import { PMREMGenerator, ShaderMaterial, NoBlending, TextureLoader, Matrix4, Euler, Texture, Color, DataTexture, Box3, Vector3, AlwaysStencilFunc, ReplaceStencilOp, UniformsUtils, MeshStandardMaterial, MeshBasicMaterial, MeshDepthMaterial, MeshNormalMaterial, MeshMatcapMaterial, PointsMaterial, ShaderLib, NearestFilter, Vector2, Vector4, MathUtils, Material, FrontSide, DoubleSide, Float32BufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, BufferAttribute, DynamicDrawUsage, BufferGeometry, Uint32BufferAttribute, Uint16BufferAttribute, Mesh, Ray, Sphere, Int16BufferAttribute, RGBAFormat, FloatType, Quaternion, Triangle, BackSide, InstancedMesh, Group, InstancedBufferAttribute, RGBADepthPacking, Points, Raycaster, WebGLRenderTarget, LinearFilter, RepeatWrapping, OrthographicCamera, BasicDepthPacking, CameraHelper, CustomBlending, AddEquation, MaxEquation, ZeroFactor, OneFactor, DstAlphaFactor, PlaneGeometry, WebGLRenderer, WebGLMultipleRenderTargets, WebGLCubeRenderTarget, HalfFloatType, UnsignedByteType, UnsignedShort4444Type, UnsignedShort5551Type, ByteType, ShortType, UnsignedShortType, IntType, UnsignedIntType, AlphaFormat, LuminanceFormat, LuminanceAlphaFormat, DepthFormat, DepthStencilFormat, RedFormat, RGBFormat, _SRGBAFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, sRGBEncoding, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, UnsignedInt248Type, PerspectiveCamera, ReverseSubtractEquation, DstColorFactor, EqualStencilFunc, Matrix3, Plane, Scene, ACESFilmicToneMapping, VSMShadowMap, DirectionalLightHelper, DirectionalLight, Object3D, Spherical, Frustum, SphereGeometry, Clock, CircleGeometry, NotEqualStencilFunc, KeepStencilOp, EventDispatcher, LineBasicMaterial, CylinderGeometry, BoxGeometry, OctahedronGeometry, Line, TorusGeometry, Line3, EllipseCurve, NormalBlending } from "/_nuxt/node_modules/.cache/vite/client/deps/three.js?v=e4f18c29"; import { EXRLoader } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_loaders_EXRLoader__js.js?v=e4f18c29"; import { RGBELoader } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_loaders_RGBELoader__js.js?v=e4f18c29"; import { FontLoader } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_loaders_FontLoader__js.js?v=e4f18c29"; import __vite__cjsImport4_jsLogger from "/_nuxt/node_modules/.cache/vite/client/deps/js-logger.js?v=e4f18c29"; const JsLogger = __vite__cjsImport4_jsLogger.__esModule ? __vite__cjsImport4_jsLogger.default : __vite__cjsImport4_jsLogger; import { has, get, differenceBy, groupBy } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29"; import { OBB } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_math_OBB__js.js?v=e4f18c29"; import __vite__cjsImport7_treeModel from "/_nuxt/node_modules/.cache/vite/client/deps/tree-model.js?v=e4f18c29"; const TreeModel = __vite__cjsImport7_treeModel.__esModule ? __vite__cjsImport7_treeModel.default : __vite__cjsImport7_treeModel; import { LineMaterial } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_lines_LineMaterial__js.js?v=e4f18c29"; import { createDerivedMaterial } from "/_nuxt/node_modules/.cache/vite/client/deps/troika-three-utils.js?v=e4f18c29"; import { createTextDerivedMaterial, BatchedText, Text } from "/_nuxt/node_modules/.cache/vite/client/deps/troika-three-text.js?v=e4f18c29"; import { uniformToVarying } from "/_nuxt/node_modules/.cache/vite/client/deps/troika-three-text_src_BatchedText__js.js?v=e4f18c29"; import { LineSegments2 } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_lines_LineSegments2__js.js?v=e4f18c29"; import { LineSegmentsGeometry } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_lines_LineSegmentsGeometry__js.js?v=e4f18c29"; import { DEG2RAD } from "/_nuxt/node_modules/.cache/vite/client/deps/three_src_math_MathUtils__js.js?v=e4f18c29"; import earcut from "/_nuxt/node_modules/.cache/vite/client/deps/earcut.js?v=e4f18c29"; import { CENTER, MeshBVH, ExtendedTriangle, MeshBVHVisualizer } from "/_nuxt/node_modules/.cache/vite/client/deps/three-mesh-bvh.js?v=e4f18c29"; import { TIME_MS, SpeckleViewer } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js"; import __vite__cjsImport18_stringToColor from "/_nuxt/node_modules/.cache/vite/client/deps/string-to-color.js?v=e4f18c29"; const stc = __vite__cjsImport18_stringToColor.__esModule ? __vite__cjsImport18_stringToColor.default : __vite__cjsImport18_stringToColor; import { ObjectLoader2Factory, getFeatureFlag, ObjectLoader2Flags } from "/_nuxt/@fs/D:/speckle-server/packages/objectloader2/dist/esm/index.js"; import { OBJLoader } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_loaders_OBJLoader__js.js?v=e4f18c29"; import { mergeVertices } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_utils_BufferGeometryUtils__js.js?v=e4f18c29"; import { FullScreenQuad } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_postprocessing_Pass__js.js?v=e4f18c29"; import { SimplexNoise } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_math_SimplexNoise__js.js?v=e4f18c29"; import { CopyShader } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_shaders_CopyShader__js.js?v=e4f18c29"; import { DepthLimitedBlurShader, BlurShaderUtils } from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_shaders_DepthLimitedBlurShader__js.js?v=e4f18c29"; import { MeasurementType } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/viewer/helpers/state.js"; import polylabel from "/_nuxt/node_modules/.cache/vite/client/deps/polylabel.js?v=e4f18c29"; import StatsImport from "/_nuxt/node_modules/.cache/vite/client/deps/three_examples_jsm_libs_stats__module__js.js?v=e4f18c29"; import { inject } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { setInterval } from "/_nuxt/node_modules/nuxt/dist/app/compat/interval.js?v=e4f18c29"; /* eslint-disable @typescript-eslint/no-unsafe-function-type */ /* * https://medium.com/better-programming/how-to-create-your-own-event-emitter-in-javascript-fbd5db2447c4 */ class EventEmitter { constructor() { this._events = {}; } on(name, listener) { if (!this._events[name]) { this._events[name] = []; } this._events[name].push(listener); } removeListener(name, listenerToRemove) { if (!this._events[name]) return; const filterListeners = listener => listener !== listenerToRemove; this._events[name] = this._events[name].filter(filterListeners); } emit(name, ...args) { if (!this._events[name]) return; const fireCallbacks = callback => { callback(...args); }; this._events[name].forEach(fireCallbacks); } dispose() { this._events = {}; } } var img$2 = "data:image/png;base64,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Q+OARAQ8PARAS8OARAP8OASAQ8OAQAO8P8R8N8O8P/ATgEgEvDwEQEPDgEQEfDgEQEvDgEQD/D/EPDgEgEfDwEQEvDvEvD/EPDvEPDgEgEfDgEQEPDwEgDwEgDvEPEAEgEfDwEgD/DwEAEPDgEgEfDwEfjvEfEvD/DvEfDwEQEvDvEfEAEgEPDQEgD/DwEvjwEQD/DwEQD/DvEPEAEQEfD/D/DwEQEfDvEPEAEQEfDwEQEAEgEfEPDwEgD/EAEgEPD/D/D/wE4BAA8BIBH5IBABEBDxDxLw8BIA/xABIBHw8BIBDw/xDw8BIBHw8BEBHw8BL4/xLw4BIBDw/xHw/xLw4BD47xDw8BIBHw/xLw8BEBDw4BABDw8BIBLw8BEBHxIBH47xHw/xDw4BIBABIBDxDw4BEA/w8BIBDw8BIBHw8BIBIBIA7xDw8BIBHxABIA/w8BEBLw/xHxDxHw8BIBHxIBL4/xHxDxHxABIBHxHxLw4BIBDw8BEBLw/xDw/xHw/xLxABIBLw/xDxEBD5DxD5IBHxIBIBDxEBL48BIBHw/8BQASAR8R8Q8PASAS8Q8Q8Q8R8S8R8PASAQ8QASAS8Q8S/AUPDwEgEPEQEgEvEAEgEPEQEvkPEfDwEgEfEQEgEvEvEvEAEgEPEAEAEQEQEAEgEQEQEAEQEgEgEAEgEAEkjgEAEQEQDwEAEPDwEgDwEkjgDwDwEPEgEQEADwDwEvEPwFABABLxIBEBDxHxLxEBAA8BIBABIBHxABL48BEBIBIBABEBDxEBIBIBEBDxIBFJEA8BDxABABHw8BIBEBEA8BABHw8BAA4BIBEBABLw4BIBABEBABIBIBEA8BIBABIBEBABABIBABEBEBABABIBHxABEBABIBEBLxIA8BEBLxEBEBLxDxHw8BIBHxABL5EBABLxDxEBIBDxEBHxHxEBABLxEBIBEBHxIBDxEBABIBHxEBLxIBEBEBIBLxEBIBIBABIBHxH8BR/A0QEfEvEQEvEQEvEfEPEQEgEAEQEQEgEvEgEfwFIBABIBHxEBH5H5IBHxIBH8HR8RASAR8Q8QAQAS8Q8RASAQARAQASASARARARASARASASAS8S8RASAR8S8S8QASAR8PARAQ8RAS8SAS/AUgEfUkgEgEgEgEgEgEgEgEfEvEgEfEvEvkvEfwFIBD8BSAQAQ+Q/AUgEgEvEkkvkvEvEfEvEPkgEQEgEgEgEPwFIBIBHxEBIBLxIBIBDxEBIBIBLxH8DSAR8S/AUvkfwlIBABIBL5EBL5LxLxDxL8FS/A0gEvwFD5IBIBLxL8DSASAS8RARAS8QARAS+SASAS+SARAS/AUgEgEPEkgEkkkgEkgEfUvEUke0kUkUkku0QEUkvkfUgEQEu0gEkAEkfwBHxEBIBFIBJJIBJJJFIBL1LtIBFJFL1IBEBIBIBHxJFEBFFHxFJLtLtJIBH8BR7SS8SSS7SS7SASAR+SAR7SQSS+R/AEe0Ue0gEvEkfEkUkUkgEgEvEe0Uu0vwBL1JLtLtL8CSS9SS/AEO0kkkgEkkkgEkvUku0vwFLtJLtHtLxJL8DSQASS/A0u0QEku0kvwZL8BS9SAS7RRRSQASASASSSSSARSASASSR7SAQRSS8SARSS/AEfwBJHtJIBJJJJJL1LtJJL1JFIBJL1LtJL1IBJIBIBJJL8AS/AUUu0gEfwFJJIBJL5L5JJLxJEBL1LxHtLxJJL8AS8R8S/AEkke0kfwBJLxL1JJJLxLxLtLtLxL5H8FS/AUkvEvwBHtIBL5LxL8BSASS7SSS9S/BEvwNHxJL1IBL8BRS9SAR+S+S8S/CEgEvEgEvwNJJL1L1L8BS9S/AUvEvwJL8AS7R8RAS7SSR9S/EkvEvkvwBIBIBL8ES7S/AUvUvxRLtLtLxL8DS9SAS8S/A0vUfEkvEvEku0vwBL8AS9S7SASSARS/AEfkku0vwJIBJJL5IBJFL5L8CSSAS/CEvwFJL1JL8ESSSS+S/AEu0u0vwZL8HSASAS/AUu0gEvxFHxL1LtIBL8MS/DEvwZH1L8AS/AEvwBL8AS/CUvwdL8DS9S/AkvyxLtIBABL8JS9R/AEvEQEvkgEu0vkvwBIBH8BS/E0u0ku0gEkgEvEQEfw9JLtL8CSS/DUQEvwhH8JS/EEu0vwFL85S/BEv1JL8ES7S/GUvxJL8fS/DkvxVL8cS8S/AEvwlIBL8HSS/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9OE////////6h////0N////QT/5J/+R//k3/5F/eSv3kf95P/eRv3kv95I/eTv3kT85L/OSPzk785H/OS/zkn85P/ORvzkz85J/OT/zkj85M/OSvzlD85G/GTPxkn8ZP/GSPxkz8ZK/GUvxkj8ZN/GSvxlH8ZJ/GTfxkv8ZQ/GR/xk38ZK/GUPxkn8ZN/GS/xk/8ZJ/GTfxkv85K/GTvxkv8ZS/GSPwk38JL/CUPwkr8JO/CTPwlH8JJ/CTfwkv8JS/CSvwk78JM/GSPwk38JL/GSvwk78JM/CUvwkr8JO/CS/xkv8JO/CTPwlL8JJ/CTvwkz8JS/CS/wk78JM/GSvwk78JM/GS/wk/8JN/GSvwk/8JM/GS/wk/8JN/CUvwkr8JP/CTPxkz8JQ/CTfxkn8BP/ATPwFL8BL/AT/wE38BS/ASvwE/8BN/CTPwE/8BN/AUvwEr8BO/ATfwkz8BP/ATfwkv8BP/ATPwkz8BP/ATfwkr8BQ/ATfwkz8BO/ATvwFL8BL/AT/wE38JM/AUPwE/8JL/AT/wE38BS/ATPwE/8BO/CS/wFD8BN/CTPwFD8BO/CSvwE/8BN/CTPwE/8BN/AUvwEz8BP/ATfwk38BR/ATvwkv8BQ/ATfwkz8BQ/ATvwkz8BS/ATvwk38BP/ATvwFL8BL/AUfwE78JM/AUfwE/8JM/AUPwE78JN/AUPwE78JL/AUfwE78JN/AUPwE78JM/AUfwE78JN/AUPwE78JM8R8O8S8M8S8Q8S8M8P8O8S8O8S8P/ATPEvDvwE3xDw/8BM8Q8O/ATvEfD/wEvxDw78BN8R8P/ATfD/DvwE3xDxD8BM8R8O/ATfEvDvwE3w/w78BO8P8P/ATPEPDvEvDfEPD/wE38BP8S8O8S8Q/ATPEvDvwE3xDw/8BN8S8P/ATvEvEPwEzxHw78BO8R8Q/ATfEPDvwE78BQ8S8M8S8P/ATvwE/8BN8Q8P/ATvEPEfEvDPEfD/wE78BQ/ATfEvD/EvDvEPEfwEzxLw/8BO8S8Q/ATvEvD/wE7xLxD8BM8S8O/AT/EfEPwE3xLxD8BP/AUfwE7xHxD8BQ8S8P/ATfwE/8BP8S8Q/ATfEvEPwE78BP/ATvwFD8BP/AUfwE3xLw/8BO8R8P/ATvEvD/wE/xHxD8BN8R8P/ATvwFH8BN/AT/EvDvEvEfwE78BQ/ATvEfEPwE78BP/AT/EvEPwE4BAA/w8BEA/w4BABDw8BIBLw0BABHw8BIBLw4BIBDw/xDw4BIBDw8BL44BABHw7w/w4BIBABIA/xDw4BIA/w8BABLw4BIBDw4BIBHw7xDw8BEBLw0BIBHw8BEA/w/xDxD8BOARAQ8PASAQ8P8Q8PARAP8OAS+P8R8PASAP8P8S8OAQAQ8OAS+PASAQ8P/ATgEgEPDvEvDwEQEPEAEQD/D/EPDwEvjgEgEfDwEfjwEgEvEAEgEvEPEvEAEgEvDgEgEfEfEvDgEgEfEfEfD/EvEPEvDwEgEPDwEQEfDvD/D/EvD/EPD/EfDgEQD/DwEgEvDvEvEAEgEvD/wE/xLw8BIA/xABIBLw/w/xDxHw/xL5IBDw4BIBD8BS8PASAQ8R8S8P8Q8QARAQ8QASAS8P8R8OARAS8QASAS8P8S8S8S8PARAQ8P/AUgEgEPEAEQEvD/EfEAEgEfD/EvD/EfDvEvEPEfEPEfwFLw4BEBHxDxLxHxHxDxHw/xLxD8BPASAS8QASAS8P8R8Q8S8P/BUvEQEQEvEfwFHxLxHxLw8BL5EBIBLw/xLxL8BP8Q8QAS+PASAR8R8Q8R8S8RAS+QASAQ8QASAQ8Q/AUfwFLxHxABH4/xHw8BL4/xEBIBDxIBIA/8BPAS+PAQAQ8OASARASAPASAQ8QAQAS8P8R8QARAQ8SAQASASAR+SAQASAQ8RAQAQASAQAQAQ8RARAS8R+SAQARAQASAPAQ8RAPAQAS8PAQASASAQASASASAS+RAQ8SASASASAR8SARASASASASASARAQ8SAQAQ+RAPASAQASAQARAQ8RARAS8QAQ8RAS8R8SAR+RASAS8P8QARASARAQASASASAS8SAR8SARAP8RASASAQ8SAQARASAQAQASARAPARARASAS/AUAEQEfEPEvEQEgEQEgEQEfkfkvEQEfkgEvwFHxEA/xEBABL5L8BR+SASARAR/DT/EvwFLxL8BSASASAQAP/A0QEfEQEgEfEvwFEBEBLxLxLxIBIBLxEBH8BQAR8R8Q/AUfkPkgEgEQEvkvD/EPEAEPEgEgEgEQEvkvwNHxIBHxEBLxIBABIBL5IBL8DSARAS+R8Q+SAS8S/AUvwFD8HSAR/AUvkfEvEfwVIBD8FS8RAS+S8S8S8SAS8SAS/AUgEQEvwNH8DS8S+Q8SASAR+S8SASAR+RAR+SAS8S8R8S8S8S8S/AUvEvEvwNEBIBIBH8BS8R+SAS8S8QS8Q9SAS8SS8Q7S7RS/AEgEvwBIBIBIBIBIBL5JEBHtIBIBJLxIBJLxJJL8ESRR8S/BEgEkfUvEAEu0fwRIBL8AQ+S7R7S7SASASS7SS/AEvkgEgEgEkvUe0u0fkgEUvEvwdIBJIBJJJL8AS9SSAR8S+S8S9SAS9SARS+SASSARS7S9S8S7SASS/AUkfwZLtIBJLxL8AS7S7SS/AkvwpL8CSASAS/AUvEvwVIBLxIBJLxJLxIBH8CS8S8S7S8S9S/AEfwpEBIBJH8GS/AEgEu0kvUvEvUfkvEvEvwRL8DS9S7R/EUvwJL1LtL8BS7S/B0kUUgEkvwJIBFIBLtH8BS8S/AEvwZL8ESASS9S/AkvEUvw1JL8CS/AkvEku0u0vwBEBLtIBL5L8JSAS/BEkUvwJL8BS9S/CUkQEvwJLtIBL8BS+S+S/AUu0kkvUu0kvwNIBIBIBL8AS7S/Dku0vkvEku0vwxLxEBFIBL8AS/AkvEgEvUgEkgEkvEvwNLtL1IBLtL8DS9SSASAS+S/B0u0u0vkvwVL8BSS8S/OEvwZLtL8RR9S/Ikvx1L9AS/WkvwBL8QS/E0u0vzBL1L86S/EUvzZL80S/UUvwhL92S/Gkvw9L9HS/BUvy1L8ES+S/DUvwJLtLxL8KS/TkvwlL8DS/Z0vx5L/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////vBABRhxyCCCCSSSSjTTTjTjjjTjz0UEEkfEvUkg0GEH1NkcDPZS47Fde4mEw+fb0rZ85Lv0T4f7sbMlCU8r5TQVw0rb87n4EzKrm8MjR2HaD5CrwVw093flLnyBxA/nKjImuPH+5NBXuHuZ7kufocQ+IFQLeanr/kmQVpitmfOa79E6LKnRwFvJx6/5TJlcNPcz8S679ASkLGlQlDU9Q/OwVww93Pnd+QOCPSrCQanqL5TQV7p7vylz9DbFeQXRSkho9Re4mQVpvlLn6NZyQW9GZpx4i+SZBWm+UufoLqHqQW0oyk89v5hBWmK2Z8cV5+jSKlA3pHaPneI/lNDFUCtmfOZ+iTHRA3oxE5x4jz53Ve/K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S/AT/wkz8BS/AUPwlD8BQ/AT/wkz8BP/ATvwk38BR/AT/wk38JP/CTvwFL8BO/CTPwlD8JO/CUPwk38BR/AT/wk78BR/AT/wk38JP/CT/wFL8BQ/CTvwFH8BP/CTvwlL8JM/CUPwk/8BR/AUPwk78BS/ATvwk/8BS/AUfwk38BR/AUPwk78BR/AUvwk/8JP/CT/wFL8BS/CTfwk/8JP/AUfwFH8JN/AUfwFD8JQ/CUPwk78BS/AUfwk/8JS/CTvwFL8BQ/CT/wFH8RN/AUPwFL8BS/ATvwFL8BS8S8Q/ATfEvEfwE/8BR/ATvwFL8BQ/AUvwE38BR8S8Q/AUfwE/8BQ/AT/wk7xLxH8BP/AUfwE78BQ/AUPEvwU7xLxD8BR8S8Q/AT/wFH8BR/AUvwE7xLw/8BR/AUvwE/8BR/AT/wFD8BO8S8S/AUfEvEvwE78BQ/AT/EvEPwE78BR/AUfwk/8BS/CUvwE78BS/AUfwFD8BP8S8R/AUvwk78BS/AUPwFL8BP/AUfwFD8BS/ATvwFL8BS/CT/wFL8BS/AUvwE/8BS/AUfEvEfwFDxL8FS/AUvwE/8BS/AUPwk/8BS/AUvwFL8BP/AUvwFH8JP/AUvwFL8JO/CT/EvEvwFL8JR/AUvwFD8JQ/CUPwlL8JO8S8Q/AT/EvEfwE7xLw/xLxHxL8FP/AUPwFDxLxH8BR8R8RAR+Q8S8R/AUAEgEfwVL8BSAS+Q/CUgEvkfEfEPEvEvwFL8BS/AT/EvEPwFLxHxHxLw8BH5L8BS/CT/wNIBL8BS8R/AT/wFH8BS8S/BUPEvwVEBL8HP/AUgEvkvwFLxLxLxL8NSASAR8Q8S/BUvwFL8BQ/AUvwFEBL5L8BQ/CUfwFL8BR8S8R/AUvEvwFL8FS/AUvEvwVD8BS/EUfEvwVD8JS/AUvwVL8FS/AUfwFEBIBLxL8BQ/CUfwlL8JS8S/BUPwFLxL8HS+S/BUvwFLxH8RS8S8S/AUfwlL8RR/AUvEvEfwFL8JQ/AUgEvkvxVLxIBL1L8CS/BUvkgEgEgEvwNL5IBIBH8FSAS+RAS+S/AUvxFEBL5D5LxL5LxH8HS8SAR+S8SAS8R8Q8R/AUQEfwdLxL8FR/CUvw9L5L8HS/A0vwVL8NS/B0vkQEgEvEvEvkgEvEvwFL8BS/AUfwNL8LSAS/D0gEgEfxVLxL8LS/BUvwVL8PS/A0vEvxNLxL8BS/CUvEvytL8XS/DUvwdL5H8HS/A0gEvwNIBL8TS8S8R/K0vxtLxL8TS/AUgEvzlL8FS8S8S8S/BUvwVLxL8HS/H0vwxL8uSASAS8SS/AEvEvEvwFL8lSASASASAR/A0vxZL1L8RS/GEvxBL8PS8S/DUvEvwJIBL8DS9SS/DkvwdIBL5IBL8AS/AkvUkgEvwlL8NS/X0gEvwJL8jS7S8S/AEvxRL8XSS/CkvwBL8ES/CUvwtL8gS/IkvxlL8+S/A0vwJLxJL8DSAS7S7S8S/HUvwRL8VS+S/GUvwRL8KS/B0vylL///GUgEv5lL8IS/TUvyJHxL88S/VEvxxL/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3kT////////qG////Qz///9A//kj/5G/+TP/kX95J/eRv3k395G/eSv3kj95O/eRfzkr85I/OT/zkf85L/OSfzlD85H/OS/zkn85P/OSPzkz85K/OUPzkj8ZM/GSvzkn8ZM/GSvzkn8ZN/GSvzkr8ZN/GS/zkn8ZN/GS/xlL8ZK/GTfxkz8ZS/GSvxk38ZL/OS/xk78ZM/OSfwk78JM/GS/wk78JM/GSvwk78JM/GS/wk78JM/GSvwk78JM/GTPwk/8JN/GS/wk78JM/GTPwk/8JN/GSvwk/8JN/CUvwkz8JP/CTfxkv8JR/CTfxk38JP/CTfxkv8JQ/CTfxkz8JS/CTvxkz8JR/CTvxk38JQ/CTvxkv8BS/ATvwk38BQ/ATvwkz8BS/ATvwk78BR/ATvwkz8BS/AT/wk78BR/ATvwkz8BR/ATvwk78BS/AUvwkv8BS/AT/wk78BS/AT/wk38BS/AT/wk78BR/AUPwkz8BR/AUPwk78BS/AT/wFL8BN/AUPwE/8JO/AUvwFD8JM/AUvwFH8JO/AUvwE78JO/AUPwE/8JP/CUvwk38JP/CTvwFL8BQ/CTvwFL8BQ/CTvwFL8BP/CTPwFL8BR/CTvwFL8RO/AUvwFD8JQ/GTfwFL8BR/CT/wFH8BQ/CTvwFL8BS/CT/wlD8JN8S8Q/ATvEfEPwE7xLxL8BQ8R8R/ATfEvEfwFDxH8FP8S8S/AT/wFHxLw3xLxH8BP/BUvD/EvEvwFL8BQ/ATvEfEPwE/8JP/AUvwE/8BR/ATvEvEfwE/8BS/AT/EvEvwFDxL8FP/AUvwFD8JP/AUPwFH8JO8S/BUPEvEPwE/8BQ/AT/wFL8BO8R8Q/AT/wFL8BP/AUvwFDxLxL8BO8S/BUPwFL8BO/AUvwFDxL8FP8R/BT/EfEvwFD8JQ/AUvwE78BS/AUfwFL8BO/AUvwFLxL8FP/AUvwFH8BS/AT/wFL8BQ/CTvEvEvwE/xLxL8BO8S8S/CUvwE7xLxD8BQ/CUPwFL8RQ8S8R/AUvwk/8BS/AUPwk7xL8FQ8S/BT/xFL8BO/CUPEvEfEfEPwFLxLxHxLxH8BQ/AUPwFD8BS/AT/wFL8BQ/AUvEvDvwE/8BQ/AUfwFLxHxL8BP8S8S/AUfEfEvwFD8BS/AT/EvEAEvkPwFL8BS8S8Q/AUfwFD8BQ/A0vkvwk/8JS/A0vkfwFL8BS/A0vkfwVLxD8JQ/AUvEvEgEgEvEvwE/xL8FS/CUfwFHxLxDxLxL8BQ8S8QAS+SAS/CUvkfwFD8FS8Q8S8R8S/AUvEvwE/8BR/AT/EvEvEvD/wlHxL8FS8R8Q/CUPwFL8FS8R8S/BUfEvwVH8BR/AUvEfEvwFD8BS/AUvwFHxLxLxL8JS8R8S8Q/CUPwlL8BS/BUvEgEvkPxFL8RQAS/GUgEvEPwFLxH8FS8S8S/AUQEvkvwFLxIBL8LR/AEj/wlIBD8BSAS8Q/FUvwVH8BR8RAS/A0QEvkvwFL8BS/CUgEvkvwtH5IBHxL8HS/C0vwFIBL5HxIBL5L5L8DSASASAS/DUvwtL5L8JS/AUvwNL8jSAS/BUvwtL8JS/CUvEvwdL8BS/B0vwlL5IBH8NS/AUvwVLxL80S/GkgEvEvwVL8DS/EUvEvxFL8ZS/AUvxFL8XSAR/C0vwlIBL8VS/EUvwVL8NS/NkvwNLtIBH8AS/DEkvwxL8AS/G0vw9JIBL5L8FS/FUvEvxVHtL8QS7S/DEvyBL8RSAS/BEvwpL8cSAS/AUgEkvwBJL8ES/IEvwpL8IS/C0vwVL8GS8S/Ekvku0gEvxdL8ES/CEvUkkvwdJIBJL8HS/AUu0vwNL5L8DS9S/AEvwRL8TS/F0vwJIBL8ISS/D0vw1IBL8bS7S/AUkvw9L8ASS/Akfx9L8KS8S9S/AUu0vEvwRL8BS/CEvwlL5L1L8RS/H0v/ZL8cS//////cS/Ikv/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////xEQAUYcccggggkkoow0044000489EBFFDxIBLxLxJJIAF0IuFksDqC0KOQEze2WrYtzSxbNl7swvTJdLGGGZ11ZpuRfVgAsyKlAexGc3MPG0AkBTQg9aEMbmsYyf9JE7dj4Lsm2qzZRVKwbGxhSE703vWJiqB2mX+M4WrZIwi7v/GgCkCRA5Ko0hTEzI0yr4HBy7sJqR0C0X6kkoakHYtedoV7yEvN3bKk0WA3eW+kaCkUl9L0SXIXXdgKbDh8BEAfVjnSxWRWEhNc/Tpavh/LOsiY7Os9VKLKqoewEiYWQIQM0adJ0HskSzHYqvFSxCz/TKsS9jGsI4ZY8XmwWVe28OmohxK4V5xYpJIwSu1XdiYdyRAGGj/RLWSSOEznXdjptYCWbzelOnCWq0ERNl3aNS0NAhG6Ke4GN076lapjq4xm7sF1JzQTspZGDpQxZennPXLdXe0ic+rhU2zVUrycmhGKnIz98TdBFDyEoy7hWLAKTAYvBPAB8gCBEA0dWKiQAicA9IRpTy9VQwXABdgB/C9jCNzgkFrCaqthF3DCWWHcPWTImuGElLAIiBlIQwAFUA1l81KtItCi+Kky51q0rVkVWAdsMnHg3Am1fqyhCXgi9xep9WALyABMAaoDXCmQYThDIEAhSWb8WxP1lH0XXZFFmai6AMGBo6FTxaSExBZdxpL1eABXA0dSqAdEhSRAm31eibwBhANHRqwhFsEZMQWXb5sBzgNYHsAAoPQwEgegtloEa3MhZDif0q8vzEXCtWi+tNgGUQqAS4E5NGHDgxXZsWXiwA4CeFIGuA040lwnBHGDmXdgGmBhUCGAJuADCHUucIygPABIYBGyhDKHyGLEwkgBSgB9CZ7Wl2Ki/MziJ1guU8R8ic4YSyxp9Mkic4YSywAORIF6gAAYfDwYDyJuUCoxY+tNrszNYJ2b5mcq5mhytCAyw1fXmxHoo76DFX8PIA5OUGUj0VhgAzRc7dtSq0t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"; var AssetType; (function (AssetType) { AssetType["TEXTURE_8BPP"] = "png"; AssetType["TEXTURE_HDR"] = "hdr"; AssetType["TEXTURE_EXR"] = "exr"; AssetType["FONT_JSON"] = "font-json"; })(AssetType || (AssetType = {})); /** * The default HDRI the viewer uses is actually a true HDR image (.exr), * specified by the explicit TEXTURE_EXR * * We do this because bundling an actual .exr or .hdr image format would require * anybody consuming the viewer to make adjustments to their build config, to enable * its import. * * Three.js doesn't mind the extension of the asset you load, so an .exr hidden behind * a .png will work just fine. */ const DefaultViewerParams = { showStats: false, verbose: false, environmentSrc: { id: 'defaultHDRI', src: img$2, type: AssetType.TEXTURE_EXR }, restrictInputToCanvas: false }; var ViewerEvent; (function (ViewerEvent) { ViewerEvent["ObjectClicked"] = "object-clicked"; ViewerEvent["ObjectDoubleClicked"] = "object-doubleclicked"; ViewerEvent["LoadComplete"] = "load-complete"; ViewerEvent["UnloadComplete"] = "unload-complete"; ViewerEvent["UnloadAllComplete"] = "unload-all-complete"; ViewerEvent["FilteringStateSet"] = "filtering-state-set"; ViewerEvent["LightConfigUpdated"] = "light-config-updated"; })(ViewerEvent || (ViewerEvent = {})); const DefaultLightConfiguration = { enabled: true, castShadow: false, intensity: 5, color: 0xffffff, elevation: 1.33, azimuth: 0.75, radius: 0, indirectLightIntensity: 1.2, shadowcatcher: false }; var ObjectLayers; (function (ObjectLayers) { ObjectLayers[ObjectLayers["STREAM_CONTENT_MESH"] = 10] = "STREAM_CONTENT_MESH"; ObjectLayers[ObjectLayers["STREAM_CONTENT_LINE"] = 11] = "STREAM_CONTENT_LINE"; ObjectLayers[ObjectLayers["STREAM_CONTENT_POINT"] = 12] = "STREAM_CONTENT_POINT"; ObjectLayers[ObjectLayers["STREAM_CONTENT_TEXT"] = 13] = "STREAM_CONTENT_TEXT"; ObjectLayers[ObjectLayers["STREAM_CONTENT_POINT_CLOUD"] = 14] = "STREAM_CONTENT_POINT_CLOUD"; ObjectLayers[ObjectLayers["NONE"] = 0] = "NONE"; ObjectLayers[ObjectLayers["STREAM_CONTENT"] = 1] = "STREAM_CONTENT"; ObjectLayers[ObjectLayers["PROPS"] = 2] = "PROPS"; ObjectLayers[ObjectLayers["SHADOWCATCHER"] = 3] = "SHADOWCATCHER"; ObjectLayers[ObjectLayers["OVERLAY"] = 4] = "OVERLAY"; ObjectLayers[ObjectLayers["MEASUREMENTS"] = 5] = "MEASUREMENTS"; })(ObjectLayers || (ObjectLayers = {})); var UpdateFlags; (function (UpdateFlags) { UpdateFlags[UpdateFlags["RENDER"] = 1] = "RENDER"; UpdateFlags[UpdateFlags["SHADOWS"] = 2] = "SHADOWS"; UpdateFlags[UpdateFlags["CLIPPING_PLANES"] = 4] = "CLIPPING_PLANES"; UpdateFlags[UpdateFlags["RENDER_RESET"] = 8] = "RENDER_RESET"; })(UpdateFlags || (UpdateFlags = {})); var StencilOutlineType; (function (StencilOutlineType) { StencilOutlineType[StencilOutlineType["NONE"] = 0] = "NONE"; StencilOutlineType[StencilOutlineType["OVERLAY"] = 1] = "OVERLAY"; StencilOutlineType[StencilOutlineType["OUTLINE_ONLY"] = 2] = "OUTLINE_ONLY"; })(StencilOutlineType || (StencilOutlineType = {})); class RotatablePMREMGenerator extends PMREMGenerator { constructor(renderer) { super(renderer); } compileProperEquirectShader(rotationMatrix) { const fixedEnvFlip = function _getEquirectMaterial() { return new ShaderMaterial({ name: 'EquirectangularToCubeUV', uniforms: { envMap: { value: null }, rotationMatrix: { value: rotationMatrix } }, vertexShader: ` precision mediump float; precision mediump int; attribute float faceIndex; varying vec3 vOutputDirection; // RH coordinate system; PMREM face-indexing convention vec3 getDirection( vec2 uv, float face ) { uv = 2.0 * uv - 1.0; vec3 direction = vec3( uv, 1.0 ); if ( face == 0.0 ) { direction = direction.zyx; // ( 1, v, u ) pos x } else if ( face == 1.0 ) { direction = direction.xzy; direction.xz *= -1.0; // ( -u, 1, -v ) pos y } else if ( face == 2.0 ) { direction.x *= -1.0; // ( -u, v, 1 ) pos z } else if ( face == 3.0 ) { direction = direction.zyx; direction.xz *= -1.0; // ( -1, v, -u ) neg x } else if ( face == 4.0 ) { direction = direction.xzy; direction.xy *= -1.0; // ( -u, -1, v ) neg y } else if ( face == 5.0 ) { direction.z *= -1.0; // ( u, v, -1 ) neg z } return direction; } void main() { vOutputDirection = getDirection( uv, faceIndex ); gl_Position = vec4( position, 1.0 ); } `, fragmentShader: /* glsl */` precision mediump float; precision mediump int; varying vec3 vOutputDirection; uniform sampler2D envMap; uniform mat4 rotationMatrix; #include void main() { vec3 outputDirection = normalize( vOutputDirection ); outputDirection = normalize((rotationMatrix * vec4(vOutputDirection, 0.)).xyz); vec2 uv = equirectUv( outputDirection ); gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); } `, blending: NoBlending, depthTest: false, depthWrite: false }); }; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore this._equirectMaterial = fixedEnvFlip(); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore this._compileMaterial(this._equirectMaterial); } } const Logger = has(JsLogger, 'warn') ? JsLogger : get(JsLogger, 'default'); class Assets { static getLoader(src, assetType) { if (assetType === undefined) assetType = src.split('.').pop(); if (!Object.values(AssetType).includes(assetType)) { Logger.warn(`Asset ${src} could not be loaded. Unknown type`); return null; } switch (assetType) { case AssetType.TEXTURE_EXR: return new EXRLoader(); case AssetType.TEXTURE_HDR: return new RGBELoader(); case AssetType.TEXTURE_8BPP: return new TextureLoader(); default: return null; } } static hdriToPMREM(renderer, hdriTex) { const generator = new RotatablePMREMGenerator(renderer); const mat = new Matrix4().makeRotationFromEuler(new Euler(-Math.PI * 0.5, 0, -Math.PI * 0.5)); generator.compileProperEquirectShader(mat); const pmremRT = generator.fromEquirectangular(hdriTex); generator.dispose(); return pmremRT.texture; } static getEnvironment(asset, renderer) { if (this._cache[asset.id]) { return Promise.resolve(Assets.hdriToPMREM(renderer, this._cache[asset.id])); } return new Promise((resolve, reject) => { const loader = Assets.getLoader(asset.src, asset.type); if (loader) { loader.load(asset.src, texture => { this._cache[asset.id] = texture; resolve(Assets.hdriToPMREM(renderer, texture)); }, undefined, error => { reject(new Error(`Loading asset ${asset.id} failed ${error.message}`)); }); } else { reject(new Error(`Loading asset ${asset.id} failed`)); } }); } static getTexture(asset) { if (this._cache[asset.id]) { return Promise.resolve(this._cache[asset.id]); } return new Promise((resolve, reject) => { // Hack to load 'data:image's - for some reason, the frontend receives the default // gradient map as a data image url, rather than a file (?). if (asset.src.includes('data:image')) { const image = new Image(); image.src = asset.src; image.onload = () => { const texture = new Texture(image); texture.needsUpdate = true; this._cache[asset.id] = texture; resolve(texture); }; image.onerror = ev => { reject(new Error(`Loading asset ${asset.id} failed with ${ev.toString()}`)); }; } else { const loader = Assets.getLoader(asset.src, asset.type); if (loader) { loader.load(asset.src, texture => { this._cache[asset.id] = texture; resolve(this._cache[asset.id]); }, undefined, error => { reject(new Error(`Loading asset ${asset.id} failed ${error.message}`)); }); } else { reject(new Error(`Loading asset ${asset.id} failed`)); } } }); } static getFont(asset) { let srcUrl = null; if (asset.src) { srcUrl = asset.src; } else { srcUrl = asset; } if (this._cache[srcUrl]) { return Promise.resolve(this._cache[srcUrl]); } return new Promise((resolve, reject) => { new FontLoader().load(srcUrl, font => { resolve(font); }, undefined, error => { reject(new Error(`Loading asset ${srcUrl} failed ${error.message}`)); }); }); } /** To be used wisely */ static async getTextureData(asset) { const texture = await Assets.getTexture(asset); const canvas = document.createElement('canvas'); canvas.width = texture.image.width; canvas.height = texture.image.height; const context = canvas.getContext('2d'); /** As you can see here https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext#return_value * The only valid cases where `getContext` returns null are: * - "contextType doesn't match a possible drawing context" Definetely not the case as we're providing '2d'! * - "differs from the first contextType requested". It can't since **we're only requesting a context once**! * - If it returns null outside of these two casese, you have bigger problems than us throwing an exception here */ if (!context) throw new Error('Fatal! 2d context could not be retrieved.'); context.drawImage(texture.image, 0, 0); const data = context.getImageData(0, 0, canvas.width, canvas.height); return Promise.resolve(data); } static generateGradientRampTexture(fromColor, toColor, steps) { // NOT NECESSARY AT THE MOMENT. USING STATIC GRADIENT RAMP } static generateDiscreetRampTexture(hexColors) { const width = hexColors.length; const height = 1; const size = width * height; const data = new Uint8Array(4 * size); for (let k = 0; k < hexColors.length; k++) { const stride = k * 4; const color = new Color(hexColors[k]); color.convertSRGBToLinear(); data[stride] = Math.floor(color.r * 255); data[stride + 1] = Math.floor(color.g * 255); data[stride + 2] = Math.floor(color.b * 255); data[stride + 3] = 255; } const texture = new DataTexture(data, width, height); texture.needsUpdate = true; /** In case we want to see what gets generated */ // const canvas = document.createElement('canvas') // canvas.width = width // canvas.height = height // const context = canvas.getContext('2d') // const imageData = new ImageData(width, height) // imageData.data.set(data) // context.putImageData(imageData, 0, 0) // console.log('SRC:', canvas.toDataURL()) return texture; } } Assets._cache = {}; class AsyncPause { constructor() { this.lastPauseTime = 0; this.needsWait = false; } tick(maxDelta) { const now = performance.now(); const delta = now - this.lastPauseTime; // console.log('Delta -> ', delta) if (delta > maxDelta) { this.needsWait = true; } } async wait(waitTime) { this.lastPauseTime = performance.now(); await new Promise(resolve => setTimeout(resolve, waitTime)); this.needsWait = false; } } const MatBuff0$1 = new Matrix4(); const MatBuff1 = new Matrix4(); const MatBuff2 = new Matrix4(); class World { constructor() { this.boxes = new Array(); this.worldBox = new Box3(); this.VecBuff = new Vector3(); this.BoxBuff0 = new Box3(); this.BoxBuff1 = new Box3(); this._worldOrigin = new Vector3(); } get worldSize() { this.worldBox.getCenter(this._worldOrigin); const size = new Vector3().subVectors(this.worldBox.max, this.worldBox.min); return { x: size.x, y: size.y, z: size.z }; } get worldOrigin() { return this._worldOrigin; } expandWorld(box) { this.boxes.push(box); this.updateWorld(); } reduceWorld(box) { this.boxes.splice(this.boxes.indexOf(box), 1); this.updateWorld(); } updateWorld() { this.worldBox.makeEmpty(); for (let k = 0; k < this.boxes.length; k++) { this.worldBox.union(this.boxes[k]); } } resetWorld() { this.worldBox.makeEmpty(); this.boxes.length = 0; } getRelativeOffset(offsetAmount = 0.001) { if (this.worldBox.isEmpty()) return offsetAmount; MatBuff0$1.identity(); MatBuff0$1.makeScale(1 + offsetAmount, 1 + offsetAmount, 1 + offsetAmount); const worldSize = this.VecBuff.set(this.worldSize.x * 0.5, this.worldSize.y * 0.5, this.worldSize.z * 0.5); this.BoxBuff0.min.set(0, 0, 0); this.BoxBuff0.max.set(0, 0, 0); this.BoxBuff1.min.set(0, 0, 0); this.BoxBuff1.max.set(0, 0, 0); const sizeBox = this.BoxBuff0.expandByVector(worldSize); const offsetBox = this.BoxBuff1.copy(sizeBox).applyMatrix4(MatBuff0$1); const dist = offsetBox.max.distanceTo(sizeBox.max); return dist; } getRelativeOffsetBox(box, offsetAmount = 0.001) { if (this.worldBox.isEmpty()) return box; const center = box.getCenter(new Vector3()); MatBuff1.makeTranslation(center.x, center.y, center.z); MatBuff2.copy(MatBuff1).invert(); MatBuff0$1.identity(); MatBuff0$1.makeScale(1 + offsetAmount, 1 + offsetAmount, 1 + offsetAmount); const offsetBox = new Box3().copy(box); offsetBox.applyMatrix4(MatBuff2); offsetBox.applyMatrix4(MatBuff0$1); offsetBox.applyMatrix4(MatBuff1); return offsetBox; } static expandBoxRelative(box, offsetAmount = 0.001) { if (box.isEmpty()) return box; if (box instanceof Box3) return World.expandBox3Relative(box, offsetAmount);else return World.expandOBBRelative(box, offsetAmount); } static expandBox3Relative(box, offsetAmount) { const center = box.getCenter(new Vector3()); const size = box.getSize(new Vector3()); MatBuff1.makeTranslation(center.x, center.y, center.z); MatBuff2.copy(MatBuff1).invert(); MatBuff0$1.identity(); MatBuff0$1.makeScale(1 + offsetAmount, 1 + offsetAmount, 1 + offsetAmount); const offsetBox = new Box3().copy(box); if (size.x === 0) { offsetBox.min.x += -offsetAmount * 0.5; offsetBox.max.x += offsetAmount * 0.5; } if (size.y === 0) { offsetBox.min.y += -offsetAmount * 0.5; offsetBox.max.y += offsetAmount * 0.5; } if (size.z === 0) { offsetBox.min.z += -offsetAmount * 0.5; offsetBox.max.z += offsetAmount * 0.5; } offsetBox.applyMatrix4(MatBuff2); offsetBox.applyMatrix4(MatBuff0$1); offsetBox.applyMatrix4(MatBuff1); return offsetBox; } static expandOBBRelative(box, offsetAmount) { const center = box.center; const size = box.getSize(new Vector3()); MatBuff1.makeTranslation(center.x, center.y, center.z); MatBuff2.copy(MatBuff1).invert(); MatBuff0$1.identity(); MatBuff0$1.makeScale(1 + offsetAmount, 1 + offsetAmount, 1 + offsetAmount); const offsetBox = new OBB().copy(box); if (size.x === 0) { offsetBox.halfSize.x += offsetAmount * 0.5; } if (size.y === 0) { offsetBox.halfSize.y += offsetAmount * 0.5; } if (size.z === 0) { offsetBox.halfSize.z += offsetAmount * 0.5; } offsetBox.applyMatrix4(MatBuff2); offsetBox.applyMatrix4(MatBuff0$1); offsetBox.applyMatrix4(MatBuff1); return offsetBox; } } var GeometryType; (function (GeometryType) { GeometryType[GeometryType["MESH"] = 0] = "MESH"; GeometryType[GeometryType["LINE"] = 1] = "LINE"; GeometryType[GeometryType["POINT"] = 2] = "POINT"; GeometryType[GeometryType["POINT_CLOUD"] = 3] = "POINT_CLOUD"; GeometryType[GeometryType["TEXT"] = 4] = "TEXT"; })(GeometryType || (GeometryType = {})); const NoneBatchUpdateRange = { offset: 0, count: 0 }; const AllBatchUpdateRange = { offset: 0, count: Infinity }; const INSTANCE_TRANSFORM_BUFFER_STRIDE = 16; const INSTANCE_GRADIENT_BUFFER_STRIDE = 1; let BATCH_INDEX_COUNTER = 0; const getNextBatchIndex = () => { return ++BATCH_INDEX_COUNTER; }; function isAcceleratedBatchType(batch) { return batch && (batch.geometryType === GeometryType.MESH || batch.geometryType === GeometryType.TEXT); } function isNoneBatchUpdateRange(range) { return range.offset === NoneBatchUpdateRange.offset && range.count === NoneBatchUpdateRange.count; } function isAllBatchUpdateRange(range, totalCount) { return range.offset === AllBatchUpdateRange.offset && (range.count === AllBatchUpdateRange.count || (totalCount ? range.count === totalCount : true)); } const speckleLineVert = /* glsl */` #include #include #include #include #include uniform float linewidth; uniform vec2 resolution; uniform float pixelThreshold; varying float vAlpha; #define SEARCH_STEPS 10 attribute vec3 instanceStart; attribute vec3 instanceEnd; attribute vec4 instanceColorStart; attribute vec4 instanceColorEnd; // varying vec3 debugColor; #ifdef WORLD_UNITS varying vec4 worldPos; varying vec3 worldStart; varying vec3 worldEnd; varying float correctedLineWidth; #ifdef USE_DASH varying vec2 vUv; #endif #else varying vec2 vUv; #endif #ifdef USE_DASH uniform float dashScale; attribute float instanceDistanceStart; attribute float instanceDistanceEnd; varying float vLineDistance; #endif #ifdef USE_RTE attribute vec3 instanceStartLow; attribute vec3 instanceEndLow; uniform vec3 uViewer_high; uniform vec3 uViewer_low; #endif void trimSegment( const in vec4 start, inout vec4 end ) { // trim end segment so it terminates between the camera plane and the near plane // conservative estimate of the near plane float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column float nearEstimate = - 0.5 * b / a; float alpha = ( nearEstimate - start.z ) / ( end.z - start.z ); end.xyz = mix( start.xyz, end.xyz, alpha ); } float screenSpaceDistance(vec4 p0, vec4 p1) { p0 = projectionMatrix * p0; p0 /= p0.w; p1 = projectionMatrix * p1; p1 /= p1.w; return length(p1.xy - p0.xy); } highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } void main() { if(instanceColorStart.w == 0.) { gl_Position = vec4(0.); return; } vAlpha = instanceColorStart.w; vec3 computedPosition = position; #ifdef USE_COLOR vColor.xyz = ( computedPosition.y < 0.5 ) ? instanceColorStart.xyz : instanceColorEnd.xyz; #endif #ifdef USE_DASH vLineDistance = ( computedPosition.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd; vUv = uv; #endif float aspect = resolution.x / resolution.y; // camera space #ifdef USE_RTE /** Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl */ // vec3 t1 = instanceStartLow.xyz - uViewer_low; // vec3 e = t1 - instanceStartLow.xyz; // vec3 t2 = ((-uViewer_low - e) + (instanceStartLow.xyz - (t1 - e))) + instanceStart.xyz - uViewer_high; // vec3 highDifference = t1 + t2; // vec3 lowDifference = t2 - (highDifference - t1); // vec4 start = modelViewMatrix * vec4(highDifference.xyz + lowDifference.xyz , 1.); vec4 start = modelViewMatrix * computeRelativePosition(instanceStartLow.xyz, instanceStart.xyz, uViewer_low, uViewer_high); // t1 = instanceEndLow.xyz - uViewer_low; // e = t1 - instanceEndLow.xyz; // t2 = ((-uViewer_low - e) + (instanceEndLow.xyz - (t1 - e))) + instanceEnd.xyz - uViewer_high; // highDifference = t1 + t2; // lowDifference = t2 - (highDifference - t1); // vec4 end = modelViewMatrix * vec4(highDifference.xyz + lowDifference.xyz , 1.); vec4 end = modelViewMatrix * computeRelativePosition(instanceEndLow.xyz, instanceEnd.xyz, uViewer_low, uViewer_high); #else vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 ); vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 ); #endif #ifdef WORLD_UNITS worldStart = start.xyz; worldEnd = end.xyz; #else vUv = uv; #endif // special case for perspective projection, and segments that terminate either in, or behind, the camera plane // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space // but we need to perform ndc-space calculations in the shader, so we must address this issue directly // perhaps there is a more elegant solution -- WestLangley bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column if ( perspective ) { if ( start.z < 0.0 && end.z >= 0.0 ) { trimSegment( start, end ); } else if ( end.z < 0.0 && start.z >= 0.0 ) { trimSegment( end, start ); } } // clip space vec4 clipStart = projectionMatrix * start; vec4 clipEnd = projectionMatrix * end; // ndc space vec3 ndcStart = clipStart.xyz / clipStart.w; vec3 ndcEnd = clipEnd.xyz / clipEnd.w; // direction vec2 dir = ndcEnd.xy - ndcStart.xy; // account for clip-space aspect ratio dir.x *= aspect; dir = normalize( dir ); #ifdef WORLD_UNITS // get the offset direction as perpendicular to the view vector vec3 worldDir = normalize( end.xyz - start.xyz ); vec3 offset; if ( computedPosition.y < 0.5 ) { offset = normalize( cross( start.xyz, worldDir ) ); } else { offset = normalize( cross( end.xyz, worldDir ) ); } // sign flip if ( computedPosition.x < 0.0 ) offset *= - 1.0; float forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) ); // don't extend the line if we're rendering dashes because we // won't be rendering the endcaps #ifndef USE_DASH // extend the line bounds to encompass endcaps start.xyz += - worldDir * linewidth * 0.5; end.xyz += worldDir * linewidth * 0.5; // shift the position of the quad so it hugs the forward edge of the line offset.xy -= dir * forwardOffset; offset.z += 0.5; #endif // endcaps if ( computedPosition.y > 1.0 || computedPosition.y < 0.0 ) { offset.xy += dir * 2.0 * forwardOffset; } // debugColor = vec3(0., 0., 1.); correctedLineWidth = linewidth; vec3 cOffset = offset; // adjust for linewidth offset *= linewidth * 0.5; // set the world position worldPos = ( computedPosition.y < 0.5 ) ? start : end; /* Not great, not terrible */ float pixelSize = length(vec2(pixelThreshold/resolution.x + pixelThreshold/resolution.y)); float offsetStep = linewidth; float d = screenSpaceDistance(worldPos, worldPos + vec4(cOffset * offsetStep, 0.)); /* We're trying to start off with a step closer to the initial difference between SS distance and the pixel size we want */ // offsetStep += pixelSize - d; vec3 move = offset; for(int i = 0; i < SEARCH_STEPS; i++){ move = cOffset * offsetStep; d = screenSpaceDistance(worldPos, worldPos + vec4(move, 0.)); if(d > pixelSize) { correctedLineWidth = offsetStep; break; } offsetStep += offsetStep; } worldPos.xyz += move; // project the worldpos vec4 clip = projectionMatrix * worldPos; // shift the depth of the projected points so the line // segments overlap neatly vec3 clipPose = ( computedPosition.y < 0.5 ) ? ndcStart : ndcEnd; clip.z = clipPose.z * clip.w; #else vec2 offset = vec2( dir.y, - dir.x ); // undo aspect ratio adjustment dir.x /= aspect; offset.x /= aspect; // sign flip if ( computedPosition.x < 0.0 ) offset *= - 1.0; // endcaps if ( computedPosition.y < 0.0 ) { offset += - dir; } else if ( computedPosition.y > 1.0 ) { offset += dir; } // adjust for linewidth offset *= linewidth; // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... offset /= resolution.y; // select end vec4 clip = ( computedPosition.y < 0.5 ) ? clipStart : clipEnd; // back to clip space offset *= clip.w; clip.xy += offset; #endif gl_Position = clip; vec4 mvPosition = ( computedPosition.y < 0.5 ) ? start : end; // this is an approximation #include #include #include } `; const speckleLineFrag = /* glsl */` uniform vec3 diffuse; uniform float opacity; uniform float linewidth; varying float vAlpha; // varying vec3 debugColor; #ifdef USE_DASH uniform float dashOffset; uniform float dashSize; uniform float gapSize; #endif varying float vLineDistance; #ifdef WORLD_UNITS varying vec4 worldPos; varying vec3 worldStart; varying vec3 worldEnd; varying float correctedLineWidth; #ifdef USE_DASH varying vec2 vUv; #endif #else varying vec2 vUv; #endif #include #include #include #include #include vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) { float mua; float mub; vec3 p13 = p1 - p3; vec3 p43 = p4 - p3; vec3 p21 = p2 - p1; float d1343 = dot( p13, p43 ); float d4321 = dot( p43, p21 ); float d1321 = dot( p13, p21 ); float d4343 = dot( p43, p43 ); float d2121 = dot( p21, p21 ); float denom = d2121 * d4343 - d4321 * d4321; float numer = d1343 * d4321 - d1321 * d4343; mua = numer / denom; mua = clamp( mua, 0.0, 1.0 ); mub = ( d1343 + d4321 * ( mua ) ) / d4343; mub = clamp( mub, 0.0, 1.0 ); return vec2( mua, mub ); } void main() { #include #ifdef USE_DASH if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX #endif float alpha; #ifdef UNIFORM_OPACITY alpha = opacity; #else alpha = vAlpha; #endif #ifdef WORLD_UNITS // Find the closest points on the view ray and the line segment vec3 rayEnd = normalize( worldPos.xyz ) * 1e5; vec3 lineDir = worldEnd - worldStart; vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd ); vec3 p1 = worldStart + lineDir * params.x; vec3 p2 = rayEnd * params.y; vec3 delta = p1 - p2; float len = length( delta ); float norm = len / correctedLineWidth; #ifndef USE_DASH #ifdef USE_ALPHA_TO_COVERAGE float dnorm = fwidth( norm ); alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm ); #else if ( norm > 0.5 ) { discard; } #endif #endif #else #ifdef USE_ALPHA_TO_COVERAGE // artifacts appear on some hardware if a derivative is taken within a conditional float a = vUv.x; float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; float len2 = a * a + b * b; float dlen = fwidth( len2 ); if ( abs( vUv.y ) > 1.0 ) { alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 ); } #else if ( abs( vUv.y ) > 1.0 ) { float a = vUv.x; float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; float len2 = a * a + b * b; if ( len2 > 1.0 ) discard; } #endif #endif vec4 diffuseColor = vec4( diffuse, alpha ); #include // #include COMMENTED CHUNK #if defined( USE_COLOR_ALPHA ) diffuseColor *= vColor; #elif defined( USE_COLOR ) diffuseColor.rgb = vColor; #endif gl_FragColor = vec4( diffuseColor.rgb, alpha ); #include #include #include #include } `; /* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ class SpeckleUserData { toJSON() { return {}; } } class SpeckleMaterial { constructor() { this._stencilOutline = StencilOutlineType.NONE; this.needsCopy = false; } get speckleUserData() { return this.userData; } set speckleUserData(value) { this.userData = value; } get speckleDefines() { return this.defines; } set speckleDefines(value) { this.defines = value; } get vertexProgram() { return ''; } get fragmentProgram() { return ''; } get uniformsDef() { return { empty: 'empty' }; } get baseUniforms() { return { emptyBase: { value: 'emptyBase' } }; } set stencilOutline(value) { this._stencilOutline = value; const thisAsMaterial = this; thisAsMaterial.stencilWrite = value === StencilOutlineType.NONE ? false : true; if (thisAsMaterial.stencilWrite) { thisAsMaterial.stencilWriteMask = 0xff; thisAsMaterial.stencilRef = 0x00; thisAsMaterial.stencilFunc = AlwaysStencilFunc; thisAsMaterial.stencilZFail = ReplaceStencilOp; thisAsMaterial.stencilZPass = ReplaceStencilOp; thisAsMaterial.stencilFail = ReplaceStencilOp; if (value === StencilOutlineType.OUTLINE_ONLY) { thisAsMaterial.colorWrite = false; thisAsMaterial.depthWrite = false; thisAsMaterial.stencilWrite = true; } } } set pointSize(value) { this.size = value; } init(defines = []) { this.speckleUserData = new SpeckleUserData(); this.setUniforms(this.uniformsDef); this.setDefines(defines); this['onBeforeCompile'] = this.onCompile; } setUniforms(def) { for (const k in def) { this.speckleUserData[k] = { value: def[k] }; } this['uniforms'] = UniformsUtils.merge([this.baseUniforms, this.speckleUserData]); } setDefines(defines = []) { if (defines) { this.speckleDefines = {}; for (let k = 0; k < defines.length; k++) { this.speckleDefines[defines[k]] = ' '; } } } copyUniforms(material) { for (const k in material.userData) { if (this.speckleUserData[k] !== undefined) // eslint-disable-next-line @typescript-eslint/no-explicit-any this.speckleUserData[k].value = material.userData[k].value; } } bindUniforms() { if (!this._internalUniforms) return; for (const k in this.uniformsDef) { this._internalUniforms.uniforms[k] = this.speckleUserData[k]; } } copyFrom(source) { this.speckleUserData = new SpeckleUserData(); this.setUniforms(this.uniformsDef); this.copyUniforms(source); this.bindUniforms(); Object.assign(this.speckleDefines, source.defines); if (source.needsCopy) this.needsCopy = source.needsCopy; } onCompile(shader) { this._internalUniforms = shader; this.bindUniforms(); shader.vertexShader = this.vertexProgram; shader.fragmentShader = this.fragmentProgram; } fastCopy(from, to) { to.alphaTest = from.alphaTest; to.alphaToCoverage = from.alphaToCoverage; to.blendDst = from.blendDst; to.blendDstAlpha = from.blendDstAlpha; to.blendEquation = from.blendEquation; to.blendEquationAlpha = from.blendEquationAlpha; to.blending = from.blending; to.blendSrc = from.blendSrc; to.blendSrcAlpha = from.blendSrcAlpha; to.clipIntersection = from.clipIntersection; to.clippingPlanes = from.clippingPlanes; to.clipShadows = from.clipShadows; to.colorWrite = from.colorWrite; Object.assign(to.defines, from.defines); to.depthFunc = from.depthFunc; to.depthTest = from.depthTest; to.depthWrite = from.depthWrite; to.stencilWrite = from.stencilWrite; to.stencilFunc = from.stencilFunc; to.stencilRef = from.stencilRef; to.stencilWriteMask = from.stencilWriteMask; to.stencilFuncMask = from.stencilFuncMask; to.stencilFail = from.stencilFail; to.stencilZFail = from.stencilZFail; to.stencilZPass = from.stencilZPass; to.opacity = from.opacity; to.polygonOffset = from.polygonOffset; to.polygonOffsetFactor = from.polygonOffsetFactor; to.polygonOffsetUnits = from.polygonOffsetUnits; to.premultipliedAlpha = from.premultipliedAlpha; to.dithering = from.dithering; to.side = from.side; to.shadowSide = from.shadowSide; to.toneMapped = from.toneMapped; to.transparent = from.transparent; to.vertexColors = from.vertexColors; to.visible = from.visible; } setMaterialOptions(options) { this.stencilOutline = options.stencilOutlines || StencilOutlineType.NONE; this.pointSize = options.pointSize || 1; } } class ExtendedMeshStandardMaterial extends MeshStandardMaterial {} class ExtendedMeshBasicMaterial extends MeshBasicMaterial {} class ExtendedMeshDepthMaterial extends MeshDepthMaterial {} class ExtendedMeshNormalMaterial extends MeshNormalMaterial {} class ExtendedMatcapMaterial extends MeshMatcapMaterial {} class ExtendedLineMaterial extends LineMaterial {} class ExtendedPointsMaterial extends PointsMaterial {} applyMixins(ExtendedMeshStandardMaterial, [SpeckleMaterial]); applyMixins(ExtendedMeshBasicMaterial, [SpeckleMaterial]); applyMixins(ExtendedMeshDepthMaterial, [SpeckleMaterial]); applyMixins(ExtendedMeshNormalMaterial, [SpeckleMaterial]); applyMixins(ExtendedMatcapMaterial, [SpeckleMaterial]); applyMixins(ExtendedLineMaterial, [SpeckleMaterial]); applyMixins(ExtendedPointsMaterial, [SpeckleMaterial]); // eslint-disable-next-line @typescript-eslint/no-explicit-any function applyMixins(derivedCtor, constructors) { constructors.forEach(baseCtor => { Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => { Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null)); }); }); } /* eslint-disable camelcase */ class SpeckleLineMaterial extends ExtendedLineMaterial { get vertexProgram() { return speckleLineVert; } get fragmentProgram() { return speckleLineFrag; } get baseUniforms() { return ShaderLib['line'].uniforms; } get uniformsDef() { return { uViewer_high: new Vector3(), uViewer_low: new Vector3(), pixelThreshold: 0 }; } set pixelThreshold(value) { this.userData.pixelThreshold.value = value; this.needsUpdate = true; } constructor(parameters, defines = []) { super(parameters); this.init(defines); } /** We need a unique key per program */ customProgramCacheKey() { return this.constructor.name; } copy(source) { super.copy(source); this.copyFrom(source); return this; } fastCopy(from, to) { super.fastCopy(from, to); const toStandard = to; const fromStandard = from; toStandard.color.copy(fromStandard.color); to.userData.pixelThreshold.value = from.userData.pixelThreshold.value; } onBeforeRender(_this, _scene, _camera, _geometry, object) { if (this.defines && this.defines['USE_RTE']) { object.modelViewMatrix.copy(_this.RTEBuffers.rteViewModelMatrix); this.userData.uViewer_low.value.copy(_this.RTEBuffers.viewerLow); this.userData.uViewer_high.value.copy(_this.RTEBuffers.viewerHigh); } _this.getDrawingBufferSize(this.resolution); this.needsUpdate = true; } } const speckleStandardVert = /* glsl */` #define STANDARD #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; uniform mat4 rteShadowMatrix; uniform vec3 uShadowViewer_high; uniform vec3 uShadowViewer_low; #endif #ifdef TRANSFORM_STORAGE attribute float objIndex; #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif varying vec3 vViewPosition; #ifdef USE_TRANSMISSION varying vec3 vWorldPosition; #endif #include #include #include #include #include #include #include #include #include #include #include #include #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } highp vec3 rotate_vertex_position(highp vec3 position, highp vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif void main() { #include #include #include #include #include #include #include #include // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #include #include #include #include #include //#include // EDITED CHUNK #ifdef TRANSFORM_STORAGE highp vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif mvPosition = modelViewMatrix * mvPosition; gl_Position = projectionMatrix * mvPosition; #include #include vViewPosition = - mvPosition.xyz; #include // #include COMMENTED CHUNK!!! #ifdef USE_SHADOWMAP #if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 // Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne. vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); vec4 shadowWorldPosition; #endif #if NUM_DIR_LIGHT_SHADOWS > 0 #pragma unroll_loop_start for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { highp vec4 shadowPosition = vec4(transformed, 1.0); mat4 shadowMatrix = directionalShadowMatrix[ i ]; #ifdef USE_RTE shadowPosition = computeRelativePosition(position_low.xyz, position.xyz, uShadowViewer_low, uShadowViewer_high); shadowMatrix = rteShadowMatrix; #ifdef TRANSFORM_STORAGE highp vec4 rtePivotShadow = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uShadowViewer_low, uShadowViewer_high); shadowPosition.xyz = rotate_scaled_vertex_position_delta(shadowPosition, rtePivotShadow, tScale, tQuaternion) + rtePivotShadow.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 rtePivotShadow = computeRelativePosition(ZERO3, ZERO3, uShadowViewer_low, uShadowViewer_high); shadowPosition.xyz = (mat3(instanceMatrix) * (shadowPosition - rtePivotShadow).xyz) + rtePivotShadow.xyz + instanceMatrix[3].xyz; #endif #else #ifdef TRANSFORM_STORAGE shadowPosition.xyz = rotate_vertex_position(shadowPosition.xyz * tScale.xyz, tQuaternion) + tTranslation.xyz; #endif #ifdef USE_INSTANCING shadowPosition = instanceMatrix * shadowPosition; #endif #endif shadowWorldPosition = modelMatrix * shadowPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); vDirectionalShadowCoord[ i ] = shadowMatrix * shadowWorldPosition; } #pragma unroll_loop_end #endif #if NUM_SPOT_LIGHT_SHADOWS > 0 #pragma unroll_loop_start for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 ); vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end #endif #if NUM_POINT_LIGHT_SHADOWS > 0 #pragma unroll_loop_start for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end #endif /* #if NUM_RECT_AREA_LIGHTS > 0 // TODO (abelnation): update vAreaShadowCoord with area light info #endif */ #endif #include #ifdef USE_TRANSMISSION vWorldPosition = worldPosition.xyz; #endif } `; const speckleStandardFrag = /* glsl */` #define STANDARD #ifdef PHYSICAL #define IOR #define SPECULAR #endif uniform vec3 diffuse; uniform vec3 emissive; uniform float roughness; uniform float metalness; uniform float opacity; #ifdef IOR uniform float ior; #endif #ifdef SPECULAR uniform float specularIntensity; uniform vec3 specularColor; #ifdef USE_SPECULARINTENSITYMAP uniform sampler2D specularIntensityMap; #endif #ifdef USE_SPECULARCOLORMAP uniform sampler2D specularColorMap; #endif #endif #ifdef USE_CLEARCOAT uniform float clearcoat; uniform float clearcoatRoughness; #endif #ifdef USE_SHEEN uniform vec3 sheenColor; uniform float sheenRoughness; #ifdef USE_SHEENCOLORMAP uniform sampler2D sheenColorMap; #endif #ifdef USE_SHEENROUGHNESSMAP uniform sampler2D sheenRoughnessMap; #endif #endif varying vec3 vViewPosition; /** We're disabling color grading for now until we want to properly offer it to the users */ //#define CUSTOM_TONEMAPPING #ifdef CUSTOM_TONEMAPPING uniform float contrast; uniform float saturation; uniform float whitescale; vec3 EvalLogContrastFunc(vec3 col, float eps, float logMidpoint, float contrastFactor) { vec3 x = max(vec3(0.), col); vec3 logX = log2(x+vec3(eps)); vec3 adjX = vec3(logMidpoint) + (logX - vec3(logMidpoint)) * contrastFactor; vec3 ret = max(vec3(0.0), exp2(adjX) - vec3(eps)); return ret; } vec3 evalSaturation(vec3 rgbVal, float saturationFactor){ vec3 lumaWeights = vec3(.25,.50,.25); vec3 grey = vec3(dot(lumaWeights,rgbVal)); return grey + saturationFactor*(rgbVal-grey); } vec3 evalExposure(vec3 rgbVal, float exposureFactor){ return rgbVal * exp2(exposureFactor); } vec3 filmicTonemap(vec3 x) { float A = 0.15; float B = 0.50; float C = 0.10; float D = 0.20; float E = 0.02; float F = 0.30; float W = 11.2; return ((x*(A*x+C*B)+D*E) / (x*(A*x+B)+D*F))- E / F; } vec3 applyFilmicToneMap( vec3 color) { color = 2.0 * filmicTonemap( color); vec3 whiteScale = 1.0 / filmicTonemap(vec3(11.2)); color *= whiteScale; return color; } vec3 postProcess(in vec3 _color, float exposureFactor, float contrastFactor, float saturationFactor){ vec3 color = _color; // color.rgb *= exposureFactor; color.rgb = evalSaturation(color.rgb, saturationFactor); color = EvalLogContrastFunc(color, 0.0001, 0.18, contrastFactor); color.rgb = ACESFilmicToneMapping( color );//applyFilmicToneMap(color.rgb); return color; } #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void main() { #include vec4 diffuseColor = vec4( diffuse, opacity ); ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); vec3 totalEmissiveRadiance = emissive; #include #include #include #include #include #include #include #include #include #include #include #include // accumulation #include #include #include #include // modulation #include vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; #include vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; #ifdef USE_SHEEN // Sheen energy compensation approximation calculation can be found at the end of // https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular; #endif #ifdef USE_CLEARCOAT float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) ); vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat; #endif // #include COMMENTED CHUNK #ifdef OPAQUE diffuseColor.a = 1.0; #endif // https://github.com/mrdoob/three.js/pull/22425 #ifdef USE_TRANSMISSION diffuseColor.a *= transmissionAlpha + 0.1; #endif gl_FragColor = vec4( outgoingLight, diffuseColor.a ); // #include // COMMENTED OUT #ifdef TONE_MAPPING #ifdef CUSTOM_TONEMAPPING gl_FragColor.rgb = postProcess(gl_FragColor.rgb, toneMappingExposure, contrast, saturation); #else gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); #endif #endif #include #include #include #include } `; /* eslint-disable camelcase */ class SpeckleStandardMaterial extends ExtendedMeshStandardMaterial { get vertexProgram() { return speckleStandardVert; } get fragmentProgram() { return speckleStandardFrag; } get baseUniforms() { return ShaderLib.standard.uniforms; } get uniformsDef() { return { uViewer_high: new Vector3(), uViewer_low: new Vector3(), rteShadowMatrix: new Matrix4(), uShadowViewer_high: new Vector3(), uShadowViewer_low: new Vector3(), uTransforms: [new Matrix4()], tTransforms: null, objCount: 1 }; } constructor(parameters, defines = []) { super(parameters); this.init(defines); } /** We need a unique key per program */ customProgramCacheKey() { return this.constructor.name; } copy(source) { super.copy(source); this.copyFrom(source); if (source instanceof SpeckleStandardMaterial) { this.originalRoughness = source.originalRoughness; this.artificialRoughness = source.artificialRoughness; } return this; } fastCopy(from, to) { super.fastCopy(from, to); const toStandard = to; const fromStandard = from; toStandard.color.copy(fromStandard.color); toStandard.roughness = fromStandard.roughness; toStandard.metalness = fromStandard.metalness; toStandard.emissive.copy(fromStandard.emissive); toStandard.emissiveIntensity = fromStandard.emissiveIntensity; toStandard.envMap = fromStandard.envMap; toStandard.envMapIntensity = fromStandard.envMapIntensity; toStandard.originalRoughness = fromStandard.originalRoughness; toStandard.artificialRoughness = fromStandard.artificialRoughness; /** Leaving textures out for now */ // toStandard.map = fromStandard.map // toStandard.lightMap = fromStandard.lightMap // toStandard.lightMapIntensity = fromStandard.lightMapIntensity // toStandard.aoMap = fromStandard.aoMap // toStandard.aoMapIntensity = fromStandard.aoMapIntensity // toStandard.emissiveMap = fromStandard.emissiveMap // toStandard.bumpMap = fromStandard.bumpMap // toStandard.bumpScale = fromStandard.bumpScale // toStandard.normalMap = fromStandard.normalMap // toStandard.normalMapType = fromStandard.normalMapType // toStandard.normalScale = fromStandard.normalScale // toStandard.displacementMap = fromStandard.displacementMap // toStandard.displacementScale = fromStandard.displacementScale // toStandard.displacementBias = fromStandard.displacementBias // toStandard.roughnessMap = fromStandard.roughnessMap // toStandard.metalnessMap = fromStandard.metalnessMap // toStandard.alphaMap = fromStandard.alphaMap } updateArtificialRoughness(artificialRougness) { if (artificialRougness) { if (this.originalRoughness === undefined) this.originalRoughness = this.roughness; this.artificialRoughness = artificialRougness; } if (this.originalRoughness === undefined || this.artificialRoughness === undefined) return; const applyRoughness = artificialRougness !== undefined ? Math.min(this.originalRoughness, this.artificialRoughness) : this.originalRoughness; this.roughness = applyRoughness; this.needsCopy = true; } /** Called by three.js render loop */ onBeforeRender(_this, _scene, _camera, _geometry, object) { if (this.defines && this.defines['USE_RTE']) { object.modelViewMatrix.copy(_this.RTEBuffers.rteViewModelMatrix); this.userData.uViewer_low.value.copy(_this.RTEBuffers.viewerLow); this.userData.uViewer_high.value.copy(_this.RTEBuffers.viewerHigh); this.userData.rteShadowMatrix.value.copy(_this.RTEBuffers.rteShadowMatrix); this.userData.uShadowViewer_low.value.copy(_this.RTEBuffers.shadowViewerLow); this.userData.uShadowViewer_high.value.copy(_this.RTEBuffers.shadowViewerHigh); this.needsUpdate = true; } } } const specklePointVert = /* glsl */` uniform float size; uniform float scale; #include #include #include #include #include #include #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; #endif highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #ifdef USE_GRADIENT_RAMP attribute float gradientIndex; varying float vGradientIndex; #endif void main() { #include #include #include #include // #include COMMENTED CHUNK #ifdef USE_RTE vec4 mvPosition = computeRelativePosition(position_low.xyz, position.xyz, uViewer_low, uViewer_high); #else vec4 mvPosition = vec4( transformed, 1.0 ); #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif mvPosition = modelViewMatrix * mvPosition; #ifdef USE_GRADIENT_RAMP vGradientIndex = gradientIndex; #endif gl_Position = projectionMatrix * mvPosition; gl_PointSize = size; #ifdef USE_SIZEATTENUATION bool isPerspective = isPerspectiveMatrix( projectionMatrix ); if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); #endif #include #include #include #include } `; const specklePointFrag = /* glsl */` uniform vec3 diffuse; uniform float opacity; #include #include #include #include #include #include #include #ifdef USE_GRADIENT_RAMP varying float vGradientIndex; uniform sampler2D gradientRamp; #endif void main() { #include vec3 outgoingLight = vec3( 0.0 ); #ifdef USE_GRADIENT_RAMP vec4 diffuseColor = vec4( texture2D(gradientRamp, vec2(vGradientIndex, 0.)).rgb, opacity ); #else vec4 diffuseColor = vec4( diffuse, opacity ); #endif #include #include #include #include outgoingLight = diffuseColor.rgb; #include #include #include #include #include } `; /* eslint-disable camelcase */ class SpecklePointMaterial extends ExtendedPointsMaterial { get vertexProgram() { return specklePointVert; } get fragmentProgram() { return specklePointFrag; } get baseUniforms() { return ShaderLib.points.uniforms; } get uniformsDef() { return { uViewer_high: new Vector3(), uViewer_low: new Vector3() }; } constructor(parameters, defines = []) { super(parameters); this.init(defines); } /** We need a unique key per program */ customProgramCacheKey() { return this.constructor.name; } copy(source) { super.copy(source); this.copyFrom(source); return this; } fastCopy(from, to) { super.fastCopy(from, to); const toStandard = to; const fromStandard = from; toStandard.color.copy(fromStandard.color); toStandard.size = fromStandard.size; toStandard.sizeAttenuation = fromStandard.sizeAttenuation; } onBeforeRender(_this, _scene, _camera, _geometry, object) { if (this.defines && this.defines['USE_RTE']) { object.modelViewMatrix.copy(_this.RTEBuffers.rteViewModelMatrix); this.userData.uViewer_low.value.copy(_this.RTEBuffers.viewerLow); this.userData.uViewer_high.value.copy(_this.RTEBuffers.viewerHigh); this.needsUpdate = true; } } } const speckleStandardColoredVert = /* glsl */` #define STANDARD #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; uniform mat4 rteShadowMatrix; uniform vec3 uShadowViewer_high; uniform vec3 uShadowViewer_low; #endif #ifdef TRANSFORM_STORAGE attribute float objIndex; #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif varying vec3 vViewPosition; #ifdef USE_TRANSMISSION varying vec3 vWorldPosition; #endif #include #include #include #include #include #include #include #include #include #include #include #include #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } vec3 rotate_vertex_position(vec3 position, vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif attribute float gradientIndex; varying float vGradientIndex; #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif void main() { #include #include #include #include #include #include #include #include // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #include #include #include #include #include //#include // EDITED CHUNK #ifdef TRANSFORM_STORAGE vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif mvPosition = modelViewMatrix * mvPosition; vGradientIndex = gradientIndex; gl_Position = projectionMatrix * mvPosition; #include #include vViewPosition = - mvPosition.xyz; #include // #include // EDITED CHUNK #ifdef USE_SHADOWMAP #if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 // Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne. vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); vec4 shadowWorldPosition; #endif #if NUM_DIR_LIGHT_SHADOWS > 0 #pragma unroll_loop_start for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { highp vec4 shadowPosition = vec4(transformed, 1.0); mat4 shadowMatrix = directionalShadowMatrix[ i ]; #ifdef USE_RTE shadowPosition = computeRelativePosition(position_low.xyz, position.xyz, uShadowViewer_low, uShadowViewer_high); shadowMatrix = rteShadowMatrix; #ifdef TRANSFORM_STORAGE highp vec4 rtePivotShadow = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uShadowViewer_low, uShadowViewer_high); shadowPosition.xyz = rotate_scaled_vertex_position_delta(shadowPosition, rtePivotShadow, tScale, tQuaternion) + rtePivotShadow.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 rtePivotShadow = computeRelativePosition(ZERO3, ZERO3, uShadowViewer_low, uShadowViewer_high); shadowPosition.xyz = (mat3(instanceMatrix) * (shadowPosition - rtePivotShadow).xyz) + rtePivotShadow.xyz + instanceMatrix[3].xyz; #endif #else #ifdef TRANSFORM_STORAGE shadowPosition.xyz = rotate_vertex_position(shadowPosition.xyz * tScale.xyz, tQuaternion) + tTranslation.xyz; #endif #ifdef USE_INSTANCING shadowPosition = instanceMatrix * shadowPosition; #endif #endif shadowWorldPosition = modelMatrix * shadowPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); vDirectionalShadowCoord[ i ] = shadowMatrix * shadowWorldPosition; #pragma unroll_loop_end #endif #if NUM_SPOT_LIGHT_SHADOWS > 0 #pragma unroll_loop_start for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 ); vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end #endif #if NUM_POINT_LIGHT_SHADOWS > 0 #pragma unroll_loop_start for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end #endif /* #if NUM_RECT_AREA_LIGHTS > 0 // TODO (abelnation): update vAreaShadowCoord with area light info #endif */ #endif #include #ifdef USE_TRANSMISSION vWorldPosition = worldPosition.xyz; #endif } `; const speckleStandardColoredFrag = /* glsl */` #define STANDARD #ifdef PHYSICAL #define IOR #define SPECULAR #endif uniform vec3 diffuse; uniform vec3 emissive; uniform float roughness; uniform float metalness; uniform float opacity; #ifdef IOR uniform float ior; #endif #ifdef SPECULAR uniform float specularIntensity; uniform vec3 specularColor; #ifdef USE_SPECULARINTENSITYMAP uniform sampler2D specularIntensityMap; #endif #ifdef USE_SPECULARCOLORMAP uniform sampler2D specularColorMap; #endif #endif #ifdef USE_CLEARCOAT uniform float clearcoat; uniform float clearcoatRoughness; #endif #ifdef USE_SHEEN uniform vec3 sheenColor; uniform float sheenRoughness; #ifdef USE_SHEENCOLORMAP uniform sampler2D sheenColorMap; #endif #ifdef USE_SHEENROUGHNESSMAP uniform sampler2D sheenRoughnessMap; #endif #endif varying vec3 vViewPosition; varying float vGradientIndex; uniform sampler2D gradientRamp; #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void main() { #include vec4 diffuseColor = vec4( texture2D(gradientRamp, vec2(vGradientIndex, 0.)).rgb, opacity ); ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); vec3 totalEmissiveRadiance = emissive; #include #include #include #include #include #include #include #include #include #include #include #include // accumulation #include #include #include #include // modulation #include vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; #include vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; #ifdef USE_SHEEN // Sheen energy compensation approximation calculation can be found at the end of // https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular; #endif #ifdef USE_CLEARCOAT float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) ); vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat; #endif #include #include #include #include #include #include } `; class SpeckleStandardColoredMaterial extends SpeckleStandardMaterial { get vertexProgram() { return speckleStandardColoredVert; } get fragmentProgram() { return speckleStandardColoredFrag; } get uniformsDef() { return { ...super.uniformsDef, gradientRamp: null }; } constructor(parameters, defines = []) { super(parameters, defines); } setGradientTexture(texture) { this.userData.gradientRamp.value = texture; this.userData.gradientRamp.value.generateMipmaps = false; this.userData.gradientRamp.value.minFilter = NearestFilter; this.userData.gradientRamp.value.magFilter = NearestFilter; this.needsUpdate = true; } } var img$1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAABCAIAAAAn2YEhAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHoSURBVDhPTZRRdoMwDAQx9//seaEzI5sXpwFptVqvMOm6/t7retd1Le8XAdF6+SMEYr03l2fF4GJprcfixl4+tyklG6ZvxeAKWGxBQsKDk9FIdD+pDUFiak9IDQEWMAM4dczEZmWSDOXPBuAQ1OCLYI4bc0S0bbnlFOR6Vgo2WwgraIvgbh8L2ZNxRH5T7QWKyKz9E7kNnUE+KTA3Oz6O3YIOkop+4juHoh1H+m3slByVm9vgOCOoXr7HvBJSjLdJRUHuSrbse+jDiZOPPt/jZIv8WPJeW+JVzYj2CIHc9GaEjmc/OhF3C+neQoBgW/KKZx2VuyxFKqDBNwfqA8NXa7p0781GBT6TPkSOozQPMPer4sBqTrvZUZgqSKP5oaCXXirJdZ4jqyRbtyE8amCkLLkzW9qik7Fx9mWE9pHEh9vMHsIawZSPcxut2DcDyjzeKinisypDwQoKnLU5WVLz7pGO/nbrIhC2MMOaGrj8PRLmfKpSJcT4NZn5wFgbKbVlCzia76HbQZMAjP72IyX94v189i7Ewfa2wcdMTfGOqekE2i/O9LZRi/T8qwFuuvknA3kW/YnLTMVO22OwUXg0OZ1IAdeqcEjXffH2jjEqNmSvRZbF43BLuUPsYsk5XPu3NqD3WKzr/QfN+6p+JpC7ZQAAAABJRU5ErkJggg=="; const Units = { Millimeters: 'mm', Centimeters: 'cm', Meters: 'm', Kilometers: 'km', Inches: 'in', Feet: 'ft', Yards: 'yd', Miles: 'mi' }; function getConversionFactor(from, to = Units.Meters) { from = normaliseName(from); to = normaliseName(to); switch (from) { // METRIC case Units.Millimeters: switch (to) { case Units.Centimeters: return 0.1; case Units.Meters: return 0.001; case Units.Kilometers: return 1e-6; case Units.Inches: return 0.0393701; case Units.Feet: return 0.00328084; case Units.Yards: return 0.00109361; case Units.Miles: return 6.21371e-7; } break; case Units.Centimeters: switch (to) { case Units.Millimeters: return 10; case Units.Meters: return 0.01; case Units.Kilometers: return 1e-5; case Units.Inches: return 0.393701; case Units.Feet: return 0.0328084; case Units.Yards: return 0.0109361; case Units.Miles: return 6.21371e-6; } break; case Units.Meters: switch (to) { case Units.Millimeters: return 1000; case Units.Centimeters: return 100; case Units.Kilometers: return 1e-3; case Units.Inches: return 39.3701; case Units.Feet: return 3.28084; case Units.Yards: return 1.09361; case Units.Miles: return 0.000621371; } break; case Units.Kilometers: switch (to) { case Units.Millimeters: return 1000000; case Units.Centimeters: return 100000; case Units.Meters: return 1000; case Units.Inches: return 39370.1; case Units.Feet: return 3280.84; case Units.Yards: return 1093.61; case Units.Miles: return 0.621371; } break; // IMPERIAL case Units.Inches: switch (to) { case Units.Millimeters: return 25.4; case Units.Centimeters: return 2.54; case Units.Meters: return 0.0254; case Units.Kilometers: return 2.54e-5; case Units.Feet: return 0.0833333; case Units.Yards: return 0.027777694; case Units.Miles: return 1.57828e-5; } break; case Units.Feet: switch (to) { case Units.Millimeters: return 304.8; case Units.Centimeters: return 30.48; case Units.Meters: return 0.3048; case Units.Kilometers: return 0.0003048; case Units.Inches: return 12; case Units.Yards: return 0.333332328; case Units.Miles: return 0.000189394; } break; case Units.Miles: switch (to) { case Units.Millimeters: return 1.609e6; case Units.Centimeters: return 160934; case Units.Meters: return 1609.34; case Units.Kilometers: return 1.60934; case Units.Inches: return 63360; case Units.Feet: return 5280; case Units.Yards: return 1759.99469184; } break; } return 1; } function normaliseName(unit) { if (!unit) return Units.Meters; switch (unit.toLowerCase()) { case 'mm': case 'mil': case 'millimeters': case 'millimetres': return Units.Millimeters; case 'cm': case 'centimetre': case 'centimeter': case 'centimetres': case 'centimeters': return Units.Centimeters; case 'm': case 'meter': case 'metre': case 'meters': case 'metres': return Units.Meters; case 'inches': case 'inch': case 'in': return Units.Inches; case 'feet': case 'foot': case 'ft': return Units.Feet; case 'yard': case 'yards': case 'yd': return Units.Yards; case 'miles': case 'mile': case 'mi': return Units.Miles; case 'km': case 'kilometers': return Units.Kilometers; default: return Units.Meters; } } const speckleGhostVert = /* glsl */` #include #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; #endif #ifdef TRANSFORM_STORAGE attribute float objIndex; #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif #include #include #include #include #include #include #include #include #include #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } vec3 rotate_vertex_position(vec3 position, vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif void main() { #include #include #include #include #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) #include #include #include #include // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #endif #include #include #include // #include COMMENTED CHUNK #ifdef TRANSFORM_STORAGE vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif mvPosition = modelViewMatrix * mvPosition; gl_Position = projectionMatrix * mvPosition; #include #include #include #include #include } `; const speckleGhostFrag = /* glsl */` uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void main() { #include vec4 diffuseColor = vec4( diffuse, opacity ); #include #include #include #include // We're disabling alpha testing because we need to use it for shadow rejection. Three.js gave me no choice // #include #include ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); // accumulation (baked indirect lighting only) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vUv2 ); reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; #else reflectedLight.indirectDiffuse += vec3( 1.0 ); #endif // modulation #include reflectedLight.indirectDiffuse *= diffuseColor.rgb; vec3 outgoingLight = reflectedLight.indirectDiffuse; #include #include #include #include #include #include #include } `; const speckleBasicVert = /* glsl */` #include #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; #endif #ifdef TRANSFORM_STORAGE attribute float objIndex; #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif #include #include #include #include #include #include #include #include #include #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } vec3 rotate_vertex_position(vec3 position, vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif #if defined(BILLBOARD) || defined(BILLBOARD_SCREEN) uniform mat4 invProjection; #endif #ifdef BILLBOARD_SCREEN uniform vec4 billboardPixelOffsetSize; #endif void main() { #include #include #include #include #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) #include #include #include #include // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #endif #include #include #include // #include COMMENTED CHUNK #ifdef TRANSFORM_STORAGE vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif mvPosition = modelViewMatrix * mvPosition; #if defined(BILLBOARD) float div = 1.; gl_Position = projectionMatrix * (viewMatrix * vec4(modelMatrix[3].xyz, 1.0) + vec4(position.x, position.y, 0., 0.0)); #elif defined(BILLBOARD_SCREEN) gl_Position = projectionMatrix * (viewMatrix * vec4(modelMatrix[3].xyz, 1.0)); float div = gl_Position.w; gl_Position /= gl_Position.w; gl_Position.xy += position.xy * billboardPixelOffsetSize.zw * 2. + billboardPixelOffsetSize.xy * 2.; #else gl_Position = projectionMatrix * mvPosition; #endif #include // #include COMMENTED CHUNK #if NUM_CLIPPING_PLANES > 0 #if defined(BILLBOARD) || defined(BILLBOARD_SCREEN) vec4 movelViewProjection = gl_Position * div; vClipPosition = - (invProjection * movelViewProjection).xyz; #else vClipPosition = - mvPosition.xyz; #endif #endif #include #include #include } `; const speckleBasicFrag = /* glsl */` uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void main() { #include vec4 diffuseColor = vec4( diffuse, opacity ); #include #include #include #include #include #include ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); // accumulation (baked indirect lighting only) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vUv2 ); reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; #else reflectedLight.indirectDiffuse += vec3( 1.0 ); #endif // modulation #include reflectedLight.indirectDiffuse *= diffuseColor.rgb; vec3 outgoingLight = reflectedLight.indirectDiffuse; #include // #include COMMENTED CHUNK #ifdef OPAQUE diffuseColor.a = 1.0; #endif // https://github.com/mrdoob/three.js/pull/22425 #ifdef USE_TRANSMISSION diffuseColor.a *= transmissionAlpha + 0.1; #endif gl_FragColor = vec4( outgoingLight * diffuseColor.a, diffuseColor.a ); #include #include #include #include #include } `; /* eslint-disable camelcase */ const matBuff = new Matrix4(); const vec2Buff0 = new Vector2(); const vec2Buff1 = new Vector2(); const vec2Buff2 = new Vector2(); class SpeckleBasicMaterial extends ExtendedMeshBasicMaterial { get vertexProgram() { return speckleBasicVert; } get fragmentProgram() { return speckleBasicFrag; } get baseUniforms() { return ShaderLib.basic.uniforms; } get uniformsDef() { return { uViewer_high: new Vector3(), uViewer_low: new Vector3(), uTransforms: [new Matrix4()], tTransforms: null, objCount: 1, invProjection: new Matrix4(), billboardPixelOffsetSize: new Vector4() }; } get billboardPixelSize() { return this._billboardPixelSize; } set billboardPixelSize(value) { this._billboardPixelSize.copy(value); } get billboardPixeOffset() { return this._billboardPixelOffset; } set billboardPixelOffset(value) { this._billboardPixelOffset.copy(value); } constructor(parameters, defines = []) { super(parameters); this._billboardPixelSize = new Vector2(); this._billboardPixelOffset = new Vector2(); this.init(defines); } /** We need a unique key per program */ customProgramCacheKey() { return this.constructor.name; } copy(source) { super.copy(source); this.copyFrom(source); return this; } fastCopy(from, to) { super.fastCopy(from, to); const toStandard = to; const fromStandard = from; toStandard.color.copy(fromStandard.color); to.userData.billboardPixelOffsetSize.value.copy(from.userData.billboardPixelOffsetSize.value); } setBillboarding(type) { /** Create the define object if not there */ if (!this.defines) this.defines = {}; /** Clear all billboarding defines */ delete this.defines['BILLBOARD_SCREEN']; delete this.defines['BILLBOARD']; if (!type) return; if (type === 'world') this.defines['BILLBOARD'] = ' '; if (type === 'screen') this.defines['BILLBOARD_SCREEN'] = ' '; } /** Called by three.js render loop */ onBeforeRender(_this, _scene, camera, _geometry, object) { if (this.defines && (this.defines['BILLBOARD'] || this.defines['BILLBOARD_SCREEN'])) { matBuff.copy(camera.projectionMatrix).invert(); this.userData.invProjection.value.copy(matBuff); this.needsUpdate = true; } if (this.defines && this.defines['BILLBOARD_SCREEN']) { _this.getDrawingBufferSize(vec2Buff0); const billboardPixelOffsetNDC = vec2Buff1.set(this._billboardPixelOffset.x, this._billboardPixelOffset.y); const billboardPixelSizeNDC = vec2Buff2.set(this._billboardPixelSize.x, this._billboardPixelSize.y); billboardPixelOffsetNDC.divide(vec2Buff0); billboardPixelSizeNDC.divide(vec2Buff0); this.userData.billboardPixelOffsetSize.value.set(billboardPixelOffsetNDC.x, billboardPixelOffsetNDC.y, billboardPixelSizeNDC.x, billboardPixelSizeNDC.y); this.needsUpdate = true; } if (this.defines && this.defines['USE_RTE']) { object.modelViewMatrix.copy(_this.RTEBuffers.rteViewModelMatrix); this.userData.uViewer_low.value.copy(_this.RTEBuffers.viewerLow); this.userData.uViewer_high.value.copy(_this.RTEBuffers.viewerHigh); this.needsUpdate = true; } } } class SpeckleGhostMaterial extends SpeckleBasicMaterial { get vertexProgram() { return speckleGhostVert; } get fragmentProgram() { return speckleGhostFrag; } constructor(parameters, defines = []) { super(parameters, defines); } } const speckleTextVert = /* glsl */` #include #ifdef USE_RTE uniform vec3 uViewer_high; uniform vec3 uViewer_low; #endif #if defined(BILLBOARD) || defined(BILLBOARD_SCREEN) uniform mat4 invProjection; #endif #ifdef BILLBOARD_SCREEN uniform vec4 billboardPixelOffsetSize; #endif #include #include #include #include #include #include #include #include #include #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif #ifdef BATCHED_TEXT varying float vGradientIndex; #endif void main() { #include #include #include #include #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) #include #include #include #include // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #endif #include #include #include vec4 mvPosition; mat4 matrix; #ifdef BATCHED_TEXT matrix = mat4( troikaBatchTexel(0.0), troikaBatchTexel(1.0), troikaBatchTexel(2.0), troikaBatchTexel(3.0) ); #else matrix = modelMatrix; #endif #ifdef USE_RTE /* We store the high part normally as the translation component */ vec3 translationHigh = matrix[3].xyz; /** We store the low part of the translation in row4 ofthe matrix */ vec3 translationLow = vec3(matrix[0][3], matrix[1][3], matrix[2][3]); highp vec4 rteTranslation = computeRelativePosition(translationLow, translationHigh, uViewer_low, uViewer_high); #if defined(BILLBOARD) mvPosition = (modelViewMatrix * rteTranslation + vec4(position.x, position.y, 0., 0.0)); #else mvPosition = vec4(mat3(matrix) * transformed + rteTranslation.xyz, 1.); mvPosition = modelViewMatrix * mvPosition; #endif #else #if defined(BILLBOARD) || defined(BILLBOARD_SCREEN) vec3 billboardPosition = matrix[3].xyz; #if defined(BILLBOARD_SCREEN) mvPosition = projectionMatrix * (viewMatrix * vec4(billboardPosition, 1.0)); float div = mvPosition.w; mvPosition /= mvPosition.w; // Pixel values are computed like so // windowX = ((ndc.x + 1) / 2) * width; // windowY = ((ndc.y + 1) / 2) * height; // That's why we multiply by 2. mvPosition.xy += position.xy * billboardPixelOffsetSize.zw * 2. + billboardPixelOffsetSize.xy * 2.; /** Back to view space for convenience */ mvPosition *= div; mvPosition = invProjection * mvPosition; #else mvPosition = (viewMatrix * vec4(billboardPosition, 1.) + vec4(position.x, position.y, 0., 0.0)); #endif #else mvPosition = viewMatrix * matrix * vec4(transformed, 1.); #endif #endif #ifdef BATCHED_TEXT vGradientIndex = troikaBatchTexel(6.).w; #endif gl_Position = projectionMatrix * mvPosition; #include #include #include #include #include } `; const speckleTextFrag = /* glsl */` uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef BATCHED_TEXT uniform sampler2D gradientRamp; varying float vGradientIndex; #endif void main() { #include vec4 diffuseColor_RGB = vec4(diffuse, opacity); vec4 diffuseColor = diffuseColor_RGB; #ifdef BATCHED_TEXT vec4 diffuseColor_Tex = vec4( texture2D(gradientRamp, vec2(vGradientIndex, 0.)).rgb, opacity ); diffuseColor = mix(diffuseColor_RGB, diffuseColor_Tex, float(vGradientIndex > 0.)); #endif #include #include #include #include #include #include ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); // accumulation (baked indirect lighting only) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vUv2 ); reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; #else reflectedLight.indirectDiffuse += vec3( 1.0 ); #endif // modulation #include reflectedLight.indirectDiffuse *= diffuseColor.rgb; vec3 outgoingLight = reflectedLight.indirectDiffuse; #include #include #include #include #include #include #include } `; class SpeckleTextMaterial extends SpeckleBasicMaterial { get vertexProgram() { return speckleTextVert; } get fragmentProgram() { return speckleTextFrag; } get uniformsDef() { return { ...super.uniformsDef, gradientRamp: null }; } /** We need a unique key per program */ customProgramCacheKey() { return this.constructor.name; } copyCustomUniforms(material) { /** We rebind the uniforms */ for (const k in this.userData) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore material.uniforms[k] = this.userData[k]; } } getDerivedMaterial() { const derived = createTextDerivedMaterial(this); this.copyCustomUniforms(derived); return derived; } /* Data texture packing strategy: # Common: 0-15: matrix 16-19: uTroikaTotalBounds 20-23: uTroikaClipRect 24: diffuse (color/outlineColor) 25: uTroikaFillOpacity (fillOpacity/outlineOpacity) 26: uTroikaCurveRadius 27: # Main: 28: uTroikaStrokeWidth 29: uTroikaStrokeColor 30: uTroikaStrokeOpacity # Outline: 28-29: uTroikaPositionOffset 30: uTroikaEdgeOffset 31: uTroikaBlurRadius */ /** Sadly, troika does not export this for no good reason so we neee to copy it over */ getDerivedBatchedMaterial() { var _a; const texUniformName = 'uTroikaMatricesTexture'; const texSizeUniformName = 'uTroikaMatricesTextureSize'; const memberIndexAttrName = 'aTroikaTextBatchMemberIndex'; const floatsPerMember = 32; // Due to how vertexTransform gets injected, the matrix transforms must happen // in the base material of TextDerivedMaterial, but other transforms to its // shader must come after, so we sandwich it between two derivations. // Transform the vertex position let batchMaterial = createDerivedMaterial(this, { chained: true, uniforms: { [texSizeUniformName]: { value: new Vector2() }, [texUniformName]: { value: null } }, // language=GLSL vertexDefs: ` uniform highp sampler2D ${texUniformName}; uniform vec2 ${texSizeUniformName}; attribute float ${memberIndexAttrName}; vec4 troikaBatchTexel(float offset) { offset += ${memberIndexAttrName} * ${floatsPerMember.toFixed(1)} / 4.0; float w = ${texSizeUniformName}.x; vec2 uv = (vec2(mod(offset, w), floor(offset / w)) + 0.5) / ${texSizeUniformName}; return texture2D(${texUniformName}, uv); } `, // language=GLSL prefix="void main() {" suffix="}" vertexTransform: ` /** We don't need this. We're transforming ourselves in our shader to allow for RTE*/ // mat4 matrix = mat4( // troikaBatchTexel(0.0), // troikaBatchTexel(1.0), // troikaBatchTexel(2.0), // troikaBatchTexel(3.0) // ); // position.xyz = (matrix * vec4(position, 1.0)).xyz; ` }); // Add the text shaders batchMaterial = createTextDerivedMaterial(batchMaterial); // Now make other changes to the derived text shader code batchMaterial = createDerivedMaterial(batchMaterial, { chained: true, uniforms: { uTroikaIsOutline: { value: false } }, // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore customRewriter(shaders) { // Convert some text shader uniforms to varyings const varyingUniforms = ['uTroikaTotalBounds', 'uTroikaClipRect', 'uTroikaPositionOffset', 'uTroikaEdgeOffset', 'uTroikaBlurRadius', 'uTroikaStrokeWidth', 'uTroikaStrokeColor', 'uTroikaStrokeOpacity', 'uTroikaFillOpacity', 'uTroikaCurveRadius', 'diffuse']; varyingUniforms.forEach(uniformName => { shaders = uniformToVarying(shaders, uniformName); }); return shaders; }, // language=GLSL vertexDefs: ` uniform bool uTroikaIsOutline; vec3 troikaFloatToColor(float v) { return mod(floor(vec3(v / 65536.0, v / 256.0, v)), 256.0) / 256.0; } `, // language=GLSL prefix="void main() {" suffix="}" vertexTransform: ` uTroikaTotalBounds = troikaBatchTexel(4.0); uTroikaClipRect = troikaBatchTexel(5.0); vec4 data = troikaBatchTexel(6.0); diffuse = troikaFloatToColor(data.x); uTroikaFillOpacity = data.y; uTroikaCurveRadius = data.z; data = troikaBatchTexel(7.0); if (uTroikaIsOutline) { if (data == vec4(0.0)) { // degenerate if zero outline position = vec3(0.0); } else { uTroikaPositionOffset = data.xy; uTroikaEdgeOffset = data.z; uTroikaBlurRadius = data.w; } } else { uTroikaStrokeWidth = data.x; uTroikaStrokeColor = troikaFloatToColor(data.y); uTroikaStrokeOpacity = data.z; } ` }); batchMaterial.setMatrixTexture = texture => { batchMaterial.uniforms[texUniformName].value = texture; batchMaterial.uniforms[texSizeUniformName].value.set(texture.image.width, texture.image.height); }; this.copyCustomUniforms(batchMaterial); ((_a = batchMaterial.defines) !== null && _a !== void 0 ? _a : batchMaterial.defines = {})['BATCHED_TEXT'] = ' '; return batchMaterial; } fastCopy(from, to) { super.fastCopy(from, to); to.userData.gradientRamp.value = from.userData.gradientRamp.value; } setGradientTexture(texture) { this.userData.gradientRamp.value = texture; this.userData.gradientRamp.value.generateMipmaps = false; this.userData.gradientRamp.value.minFilter = NearestFilter; this.userData.gradientRamp.value.magFilter = NearestFilter; this.needsUpdate = true; } } // const matBuff: Matrix4 = new Matrix4() // const vec2Buff: Vector2 = new Vector2() // export interface SpeckleTextMaterialParameters extends MeshBasicMaterialParameters { // billboardPixelHeight?: number // } // export type BillboardingType = 'world' | 'screen' // class SpeckleTextMaterial extends ExtendedMeshBasicMaterial { // private _billboardPixelHeight: number // protected get vertexProgram(): string { // return speckleTextVert // } // protected get fragmentProgram(): string { // return speckleTextFrag // } // protected get baseUniforms(): { [uniform: string]: IUniform } { // return ShaderLib.basic.uniforms // } // protected get uniformsDef(): Uniforms { // return { // uViewer_high: new Vector3(), // uViewer_low: new Vector3(), // invProjection: new Matrix4(), // billboardPixelHeight: 0, // screenSize: new Vector2(), // gradientRamp: null // } // } // public get billboardPixelHeight() { // return this._billboardPixelHeight // } // public set billboardPixelHeight(value: number) { // this._billboardPixelHeight = value // } // constructor(parameters: SpeckleTextMaterialParameters, defines: Array = []) { // super(parameters) // this.init(defines) // } // /** We need a unique key per program */ // public customProgramCacheKey() { // return this.constructor.name // } // public copy(source: Material) { // super.copy(source) // this.copyFrom(source) // return this // } // protected copyCustomUniforms(material: Material) { // /** We rebind the uniforms */ // for (const k in this.userData) { // // eslint-disable-next-line @typescript-eslint/ban-ts-comment // //@ts-ignore // material.uniforms[k] = this.userData[k] // } // } // public getDerivedMaterial() { // const derived = createTextDerivedMaterial(this) // this.copyCustomUniforms(derived) // return derived // } // /* // Data texture packing strategy: // # Common: // 0-15: matrix // 16-19: uTroikaTotalBounds // 20-23: uTroikaClipRect // 24: diffuse (color/outlineColor) // 25: uTroikaFillOpacity (fillOpacity/outlineOpacity) // 26: uTroikaCurveRadius // 27: // # Main: // 28: uTroikaStrokeWidth // 29: uTroikaStrokeColor // 30: uTroikaStrokeOpacity // # Outline: // 28-29: uTroikaPositionOffset // 30: uTroikaEdgeOffset // 31: uTroikaBlurRadius // */ // /** Sadly, troika does not export this for no good reason so we neee to copy it over */ // public getDerivedBatchedMaterial() { // const texUniformName = 'uTroikaMatricesTexture' // const texSizeUniformName = 'uTroikaMatricesTextureSize' // const memberIndexAttrName = 'aTroikaTextBatchMemberIndex' // const floatsPerMember = 32 // // Due to how vertexTransform gets injected, the matrix transforms must happen // // in the base material of TextDerivedMaterial, but other transforms to its // // shader must come after, so we sandwich it between two derivations. // // Transform the vertex position // let batchMaterial = createDerivedMaterial(this, { // chained: true, // uniforms: { // [texSizeUniformName]: { value: new Vector2() }, // [texUniformName]: { value: null } // }, // // language=GLSL // vertexDefs: ` // uniform highp sampler2D ${texUniformName}; // uniform vec2 ${texSizeUniformName}; // attribute float ${memberIndexAttrName}; // vec4 troikaBatchTexel(float offset) { // offset += ${memberIndexAttrName} * ${floatsPerMember.toFixed(1)} / 4.0; // float w = ${texSizeUniformName}.x; // vec2 uv = (vec2(mod(offset, w), floor(offset / w)) + 0.5) / ${texSizeUniformName}; // return texture2D(${texUniformName}, uv); // } // `, // // language=GLSL prefix="void main() {" suffix="}" // vertexTransform: ` // /** We don't need this. We're transforming ourselves in our shader to allow for RTE*/ // // mat4 matrix = mat4( // // troikaBatchTexel(0.0), // // troikaBatchTexel(1.0), // // troikaBatchTexel(2.0), // // troikaBatchTexel(3.0) // // ); // // position.xyz = (matrix * vec4(position, 1.0)).xyz; // ` // }) // // Add the text shaders // batchMaterial = createTextDerivedMaterial(batchMaterial) // // Now make other changes to the derived text shader code // batchMaterial = createDerivedMaterial(batchMaterial, { // chained: true, // uniforms: { // uTroikaIsOutline: { value: false } // }, // // eslint-disable-next-line @typescript-eslint/ban-ts-comment // //@ts-ignore // customRewriter(shaders) { // // Convert some text shader uniforms to varyings // const varyingUniforms = [ // 'uTroikaTotalBounds', // 'uTroikaClipRect', // 'uTroikaPositionOffset', // 'uTroikaEdgeOffset', // 'uTroikaBlurRadius', // 'uTroikaStrokeWidth', // 'uTroikaStrokeColor', // 'uTroikaStrokeOpacity', // 'uTroikaFillOpacity', // 'uTroikaCurveRadius', // 'diffuse' // ] // varyingUniforms.forEach((uniformName) => { // shaders = uniformToVarying(shaders, uniformName) // }) // return shaders // }, // // language=GLSL // vertexDefs: ` // uniform bool uTroikaIsOutline; // vec3 troikaFloatToColor(float v) { // return mod(floor(vec3(v / 65536.0, v / 256.0, v)), 256.0) / 256.0; // } // `, // // language=GLSL prefix="void main() {" suffix="}" // vertexTransform: ` // uTroikaTotalBounds = troikaBatchTexel(4.0); // uTroikaClipRect = troikaBatchTexel(5.0); // vec4 data = troikaBatchTexel(6.0); // diffuse = troikaFloatToColor(data.x); // uTroikaFillOpacity = data.y; // uTroikaCurveRadius = data.z; // data = troikaBatchTexel(7.0); // if (uTroikaIsOutline) { // if (data == vec4(0.0)) { // degenerate if zero outline // position = vec3(0.0); // } else { // uTroikaPositionOffset = data.xy; // uTroikaEdgeOffset = data.z; // uTroikaBlurRadius = data.w; // } // } else { // uTroikaStrokeWidth = data.x; // uTroikaStrokeColor = troikaFloatToColor(data.y); // uTroikaStrokeOpacity = data.z; // } // ` // }) // batchMaterial.setMatrixTexture = (texture: { // // eslint-disable-next-line @typescript-eslint/no-explicit-any // image: { width: any; height: any } // }) => { // batchMaterial.uniforms[texUniformName].value = texture // batchMaterial.uniforms[texSizeUniformName].value.set( // texture.image.width, // texture.image.height // ) // } // this.copyCustomUniforms(batchMaterial) // ;(batchMaterial.defines ??= {})['BATCHED_TEXT'] = ' ' // return batchMaterial // } // public fastCopy(from: Material, to: Material) { // super.fastCopy(from, to) // const toStandard = to as SpeckleTextMaterial // const fromStandard = from as SpeckleTextMaterial // toStandard.color.copy(fromStandard.color) // toStandard.refractionRatio = fromStandard.refractionRatio // to.userData.gradientRamp.value = from.userData.gradientRamp.value // } // public setGradientTexture(texture: Texture) { // this.userData.gradientRamp.value = texture // this.userData.gradientRamp.value.generateMipmaps = false // this.userData.gradientRamp.value.minFilter = NearestFilter // this.userData.gradientRamp.value.magFilter = NearestFilter // this.needsUpdate = true // } // public setBillboarding(type: BillboardingType | null) { // /** Create the define object if not there */ // if (!this.defines) this.defines = {} // /** Clear all billboarding defines */ // delete this.defines['BILLBOARD_SCREEN'] // delete this.defines['BILLBOARD'] // if (!type) return // if (type === 'world') this.defines['BILLBOARD'] = ' ' // if (type === 'screen') this.defines['BILLBOARD_SCREEN'] = ' ' // } // /** Called by three.js render loop */ // public onBeforeRender( // _this: SpeckleWebGLRenderer, // _scene: Scene, // camera: Camera, // _geometry: BufferGeometry, // _object: Object3D // ) { // if ( // this.defines && // (this.defines['BILLBOARD'] || this.defines['BILLBOARD_SCREEN']) // ) { // matBuff.copy(camera.projectionMatrix).invert() // this.userData.invProjection.value.copy(matBuff) // this.needsUpdate = true // } // if (this.defines && this.defines['BILLBOARD_SCREEN']) { // this.userData.billboardPixelHeight.value = this.billboardPixelHeight // this.userData.screenSize.value.copy(_this.getDrawingBufferSize(vec2Buff)) // this.needsUpdate = true // } // if (this.defines && this.defines['USE_RTE']) { // _object.modelViewMatrix.copy(_this.RTEBuffers.rteViewModelMatrix) // this.userData.uViewer_low.value.copy(_this.RTEBuffers.viewerLow) // this.userData.uViewer_high.value.copy(_this.RTEBuffers.viewerHigh) // this.needsUpdate = true // } // } // } // export default SpeckleTextMaterial class SpecklePointColouredMaterial extends SpecklePointMaterial { get vertexProgram() { return specklePointVert; } get fragmentProgram() { return specklePointFrag; } get uniformsDef() { return { ...super.uniformsDef, gradientRamp: null }; } constructor(parameters, defines = ['USE_GRADIENT_RAMP']) { super(parameters, defines); } setGradientTexture(texture) { this.userData.gradientRamp.value = texture; this.userData.gradientRamp.value.generateMipmaps = false; this.userData.gradientRamp.value.minFilter = NearestFilter; this.userData.gradientRamp.value.magFilter = NearestFilter; this.needsUpdate = true; } fastCopy(from, to) { super.fastCopy(from, to); to.userData.gradientRamp.value = from.userData.gradientRamp.value; } } class SpeckleTextColoredMaterial extends SpeckleTextMaterial { constructor() { super(...arguments); this.gradientIndexMap = {}; } updateGradientIndexMap(index, value) { this.gradientIndexMap[index] = value; } } class VirtualArray { constructor(chunks) { this.chunks = chunks; this.updateOffsets(); } get length() { if (this.chunks.length === 0) return 0; const lastChunk = this.chunks[this.chunks.length - 1]; return this.offsets[this.offsets.length - 1] + lastChunk.length; } get(index) { if (this.chunks.length === 1) return this.chunks[0][index]; const chunkIndex = this.findChunkIndex(index); const localIndex = index - this.offsets[chunkIndex]; return this.chunks[chunkIndex][localIndex]; } set(index, value) { if (this.chunks.length === 1) { this.chunks[0][index] = value; return; } const chunkIndex = this.findChunkIndex(index); const localIndex = index - this.offsets[chunkIndex]; this.chunks[chunkIndex][localIndex] = value; } findChunkIndex(index) { let low = 0; let high = this.offsets.length - 1; while (low <= high) { const mid = low + high >> 1; const start = this.offsets[mid]; const end = mid + 1 < this.offsets.length ? this.offsets[mid + 1] : this.length; if (index >= start && index < end) return mid; if (index < start) high = mid - 1;else low = mid + 1; } throw new RangeError('Index out of bounds'); } updateOffsets() { this.offsets = []; let sum = 0; for (const chunk of this.chunks) { this.offsets.push(sum); sum += chunk.length; } } } class ChunkArray extends VirtualArray { constructor(chunks) { super(chunks && chunks.map(c => c.data)); this.chunkArray = chunks; } slice() { const copiesArray = []; this.chunkArray.forEach(chunk => { const chunkCopy = new Array(chunk.data.length); for (let k = 0; k < chunk.data.length; k++) { chunkCopy[k] = chunk.data[k]; } copiesArray.push({ data: chunkCopy, id: MathUtils.generateUUID(), references: 1 }); }); return new ChunkArray(copiesArray); } copyToBuffer(buffer, offset) { let chunkOffset = 0; this.chunkArray.forEach(chunk => { buffer.set(chunk.data, offset + chunkOffset); chunkOffset += chunk.data.length; }); } computeBox3() { const box = new Box3(); const vec3 = new Vector3(); let carry = []; // to hold x/y if vec3 is split for (let c = 0; c < this.chunks.length; c++) { const chunk = this.chunks[c]; let i = 0; // Handle carry-over from previous chunk if (carry.length > 0) { while (carry.length < 3 && i < chunk.length) { carry.push(chunk[i++]); } if (carry.length === 3) { vec3.set(carry[0], carry[1], carry[2]); box.expandByPoint(vec3); carry = []; } } // Now read as many full vec3s as possible from this chunk const fullVec3Count = Math.floor((chunk.length - i) / 3); for (let j = 0; j < fullVec3Count; j++) { const x = chunk[i++]; const y = chunk[i++]; const z = chunk[i++]; vec3.set(x, y, z); box.expandByPoint(vec3); } // If there's a leftover partial vec3 at the end, save it while (i < chunk.length) { carry.push(chunk[i++]); } } // Final sanity check if (carry.length !== 0) { console.warn('Virtual position buffer ended with incomplete vec3 data'); } return box; } getFlatArray(Type) { if (!this.flatArray || !(this.flatArray instanceof Type)) { this.flatArray = new Type(this.length); let chunkOffset = 0; this.chunks.forEach(chunk => { this.flatArray.set(chunk, chunkOffset); chunkOffset += chunk.length; }); } return this.flatArray; } getFloat32Array() { return this.getFlatArray(Float32Array); } getFloat64Array() { return this.getFlatArray(Float64Array); } getInt16Array() { return this.getFlatArray(Int16Array); } getInt32Array() { return this.getFlatArray(Int32Array); } getUint16Array() { return this.getFlatArray(Uint16Array); } getUint32Array() { return this.getFlatArray(Uint32Array); } } var _a; const defaultGradient = { id: 'defaultGradient', src: img$1, type: AssetType.TEXTURE_8BPP }; var FilterMaterialType; (function (FilterMaterialType) { FilterMaterialType[FilterMaterialType["GHOST"] = 0] = "GHOST"; FilterMaterialType[FilterMaterialType["GRADIENT"] = 1] = "GRADIENT"; FilterMaterialType[FilterMaterialType["COLORED"] = 2] = "COLORED"; FilterMaterialType[FilterMaterialType["HIDDEN"] = 3] = "HIDDEN"; })(FilterMaterialType || (FilterMaterialType = {})); class Materials { constructor() { this.materialMap = {}; } static renderMaterialFromNode(materialNode, geometryNode) { var _b; if (!materialNode) return null; let renderMaterial = null; if (materialNode.model.raw.renderMaterial) { const colorsChunkArray = (geometryNode === null || geometryNode === void 0 ? void 0 : geometryNode.model.raw.colors) ? new ChunkArray(geometryNode === null || geometryNode === void 0 ? void 0 : geometryNode.model.raw.colors) : undefined; renderMaterial = { id: materialNode.model.raw.renderMaterial.id, color: materialNode.model.raw.renderMaterial.diffuse, emissive: materialNode.model.raw.renderMaterial.emissive, opacity: materialNode.model.raw.renderMaterial.opacity !== undefined ? materialNode.model.raw.renderMaterial.opacity : 1, roughness: materialNode.model.raw.renderMaterial.roughness, metalness: materialNode.model.raw.renderMaterial.metalness, vertexColors: (_b = geometryNode && colorsChunkArray && colorsChunkArray.length > 0) !== null && _b !== void 0 ? _b : false }; } return renderMaterial; } static displayStyleFromNode(node) { if (!node) return null; let displayStyle = null; if (node.model.raw.displayStyle) { /** If there are no units specified, we ignore the line width value */ let lineWeight = node.model.raw.displayStyle.lineweight || 0; const units = node.model.raw.displayStyle.units; lineWeight = units ? lineWeight * getConversionFactor(units) : 0; /** If the line width is smalle than 1mm, we'll just render it in screen space */ lineWeight = lineWeight < 0.001 ? 0 : lineWeight; displayStyle = { id: node.model.raw.displayStyle.id, color: node.model.raw.displayStyle.diffuse || node.model.raw.displayStyle.color, lineWeight }; } else if (node.model.raw.renderMaterial) { displayStyle = { id: node.model.raw.renderMaterial.id, color: node.model.raw.renderMaterial.diffuse, lineWeight: 0 }; } return displayStyle; } static colorMaterialFromNode(node) { if (!node) return null; let colorMaterial = null; if (node.model.color) { colorMaterial = { color: node.model.color }; } return colorMaterial; } static fastCopy(from, to) { to.fastCopy(from, to); /** Doing it via three.js is slow as hell */ // to.setValues( // // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any // (({ uuid, uniforms, userData, onBeforeCompile, version, ...o }) => o)(from as any) // ) } static renderMaterialToString(renderMaterial) { return renderMaterial.color.toString() + '/' + renderMaterial.opacity.toString() + '/' + renderMaterial.roughness.toString() + '/' + renderMaterial.metalness.toString(); } static displayStyleToString(displayStyle) { var _b, _c, _d; const plm = ((_b = displayStyle.color) === null || _b === void 0 ? void 0 : _b.toString()) + '/' + ((_c = displayStyle.lineWeight) === null || _c === void 0 ? void 0 : _c.toString()) + ((_d = displayStyle.opacity) === null || _d === void 0 ? void 0 : _d.toString()); return plm; } static minimalMaterialToString(minimalMaterial) { return minimalMaterial.color.toString(); } static hashCode(s) { let h = 0; for (let i = 0; i < s.length; i++) h = Math.imul(31, h) + s.charCodeAt(i) | 0; return h; } static isMaterialInstance(material) { return material instanceof Material; } static isFilterMaterial(material) { return 'filterType' in material; } static isRenderMaterial(materialData) { return 'color' in materialData && 'opacity' in materialData && 'roughness' in materialData && 'metalness' in materialData && 'vertexColors' in materialData; } static isDisplayStyle(materialData) { return 'color' in materialData && 'lineWeight' in materialData; } static getMaterialHash(renderView, materialData) { var _b, _c; /** See if we need to get the hash from the DUI3 color material. In DUI3, Points and Lines * always use the color material exclusively. Any other render material or display style is ignored */ const colorMaterialData = renderView.renderData.colorMaterial; let mat = ''; const useColorMaterialHash = colorMaterialData && !materialData && (renderView.geometryType === GeometryType.LINE || renderView.geometryType === GeometryType.POINT || renderView.geometryType === GeometryType.TEXT); const displayStyleFirst = renderView.geometryType === GeometryType.LINE; if (!materialData) { materialData = displayStyleFirst ? renderView.renderData.displayStyle || renderView.renderData.renderMaterial : renderView.renderData.renderMaterial || renderView.renderData.displayStyle; } /** DUI3 rules which apply only if the technical material exist (color proxies) in absence of a render material or display style from DUI2 * The technical material will contribute to the material hash */ if (useColorMaterialHash) { mat += _a.minimalMaterialToString(colorMaterialData); } else if (materialData) { mat = _a.isRenderMaterial(materialData) && (renderView.geometryType === GeometryType.MESH || renderView.geometryType === GeometryType.POINT || // Maybe even include GeometryType.POINT_CLOUD actually? renderView.geometryType === GeometryType.TEXT) ? _a.renderMaterialToString(materialData) : _a.isDisplayStyle(materialData) && renderView.geometryType !== GeometryType.MESH ? _a.displayStyleToString(materialData) : _a.isRenderMaterial(materialData) ? _a.renderMaterialToString(materialData) : ''; if (materialData.stencilOutlines) { mat += '/' + materialData.stencilOutlines; } if (materialData.pointSize) { mat += '/' + materialData.pointSize; } } let geometry = ''; if (renderView.renderData.geometry.attributes) geometry = renderView.renderData.geometry.attributes.COLOR ? 'vertexColors' : ''; const s = renderView.geometryType.toString() + geometry + mat + (renderView.geometryType === GeometryType.TEXT && ((_b = renderView.renderData.geometry.metaData) === null || _b === void 0 ? void 0 : _b.screenOriented) !== undefined ? ((_c = renderView.renderData.geometry.metaData) === null || _c === void 0 ? void 0 : _c.screenOriented).toString() : '') + (renderView.renderData.geometry.instanced ? 'instanced' : ''); return _a.hashCode(s); } static isTransparent(material) { return material.transparent === true && material.opacity < 1; } static isOpaque(material) { return material.transparent === false || material.transparent === true && material.opacity >= 1; } static isSpeckleMaterial(material) { return 'speckleUserData' in material; } async createDefaultMeshMaterials() { this.meshGhostMaterial = new SpeckleGhostMaterial({ color: 0xffffff, side: FrontSide, transparent: true, opacity: 0.1 }); this.meshGhostMaterial.depthWrite = false; this.meshGhostMaterial.alphaTest = 1; this.meshGradientMaterial = new SpeckleStandardColoredMaterial({ side: DoubleSide, transparent: false, opacity: 1 }); this.meshGradientMaterial.setGradientTexture(await Assets.getTexture(defaultGradient)); this.meshGradientMaterial.clipShadows = true; this.meshTransparentGradientMaterial = new SpeckleStandardColoredMaterial({ side: DoubleSide, transparent: true, opacity: 0.5 }); this.meshTransparentGradientMaterial.setGradientTexture(await Assets.getTexture(defaultGradient)); this.meshTransparentGradientMaterial.clipShadows = true; this.meshColoredMaterial = new SpeckleStandardColoredMaterial({ side: DoubleSide, transparent: false, wireframe: false }); this.meshColoredMaterial.clipShadows = true; this.meshTransparentColoredMaterial = new SpeckleStandardColoredMaterial({ side: DoubleSide, transparent: true, opacity: 0.5 }); this.meshHiddenMaterial = new SpeckleStandardMaterial({ side: DoubleSide, transparent: false, opacity: 1, wireframe: false }); this.meshHiddenMaterial.visible = false; } async createLineDefaultMaterials() { this.lineGhostMaterial = new SpeckleLineMaterial({ color: 0xffffff, linewidth: 1, // in world units with size attenuation, pixels otherwise worldUnits: false, vertexColors: true, alphaToCoverage: false, resolution: new Vector2() }); this.lineGhostMaterial.color = new Color(0xffffff); this.lineGhostMaterial.linewidth = 1; this.lineGhostMaterial.worldUnits = true; this.lineGhostMaterial.vertexColors = true; this.lineGhostMaterial.pixelThreshold = 0.5; this.lineGhostMaterial.resolution = new Vector2(); this.lineGhostMaterial.toneMapped = false; this.lineGhostMaterial.opacity = 0.1; this.lineGhostMaterial.transparent = true; this.lineColoredMaterial = new SpeckleLineMaterial({ color: 0xffffff, linewidth: 1, // in world units with size attenuation, pixels otherwise worldUnits: false, vertexColors: true, alphaToCoverage: false, resolution: new Vector2() }); this.lineColoredMaterial.color = new Color(0xffffff); this.lineColoredMaterial.linewidth = 1; this.lineColoredMaterial.worldUnits = false; this.lineColoredMaterial.vertexColors = true; this.lineColoredMaterial.pixelThreshold = 0.5; this.lineColoredMaterial.resolution = new Vector2(); this.lineColoredMaterial.toneMapped = false; this.lineHiddenMaterial = new SpeckleLineMaterial({ color: 0xffffff, linewidth: 1, // in world units with size attenuation, pixels otherwise worldUnits: false, vertexColors: true, alphaToCoverage: false, resolution: new Vector2() }); this.lineHiddenMaterial.color = new Color(0xff0000); this.lineHiddenMaterial.linewidth = 1; this.lineHiddenMaterial.worldUnits = false; this.lineHiddenMaterial.vertexColors = true; this.lineHiddenMaterial.pixelThreshold = 0.5; this.lineHiddenMaterial.resolution = new Vector2(); this.lineHiddenMaterial.visible = false; } async createDefaultPointMaterials() { this.pointGhostMaterial = new SpecklePointMaterial({ color: 0xffffff, vertexColors: false, size: 2, opacity: 0.01, sizeAttenuation: false }); this.pointCloudColouredMaterial = new SpecklePointColouredMaterial({ color: 0xffffff, vertexColors: false, size: 2, sizeAttenuation: false }, ['USE_GRADIENT_RAMP']); this.pointCloudColouredMaterial.toneMapped = false; this.pointCloudGradientMaterial = new SpecklePointColouredMaterial({ color: 0xffffff, vertexColors: false, size: 2, sizeAttenuation: false }, ['USE_GRADIENT_RAMP']); this.pointCloudGradientMaterial.setGradientTexture(await Assets.getTexture(defaultGradient)); this.pointGhostMaterial.toneMapped = false; } async createDefaultTextMaterials() { this.textGhostMaterial = new SpeckleTextMaterial({ color: 0xffffff, opacity: 0.1, side: DoubleSide }); this.textGhostMaterial.transparent = this.textGhostMaterial.opacity < 1 ? true : false; this.textGhostMaterial.depthWrite = this.textGhostMaterial.transparent ? false : true; this.textGhostMaterial.toneMapped = false; this.textGhostMaterial.color.convertSRGBToLinear(); this.textGhostMaterial = this.textGhostMaterial.getDerivedBatchedMaterial(); this.textColoredMaterial = new SpeckleTextColoredMaterial({ color: 0xffffff, opacity: 1, side: DoubleSide }); this.textColoredMaterial.transparent = this.textColoredMaterial.opacity < 1 ? true : false; this.textColoredMaterial.depthWrite = this.textColoredMaterial.transparent ? false : true; this.textColoredMaterial.toneMapped = false; this.textColoredMaterial.color.convertSRGBToLinear(); this.textColoredMaterial = this.textColoredMaterial.getDerivedBatchedMaterial(); this.textGradientMaterial = new SpeckleTextColoredMaterial({ color: 0xffffff, opacity: 1, side: DoubleSide }); this.textGradientMaterial.transparent = this.textGradientMaterial.opacity < 1 ? true : false; this.textGradientMaterial.depthWrite = this.textGradientMaterial.transparent ? false : true; this.textGradientMaterial.toneMapped = false; this.textGradientMaterial.color.convertSRGBToLinear(); this.textGradientMaterial.setGradientTexture(await Assets.getTexture(defaultGradient)); this.textGradientMaterial = this.textGradientMaterial.getDerivedBatchedMaterial(); this.textHiddenMaterial = new SpeckleTextMaterial({ color: 0xffffff, opacity: 1, side: DoubleSide }); this.textHiddenMaterial.visible = false; this.textHiddenMaterial.toneMapped = false; this.textHiddenMaterial.color.convertSRGBToLinear(); this.textHiddenMaterial = this.textHiddenMaterial.getDerivedBatchedMaterial(); } async createDefaultNullMaterials() { this.materialMap[_a.NullRenderMaterialHash] = new SpeckleStandardMaterial({ color: 0x7f7f7f, emissive: 0x0, roughness: 1, metalness: 0, side: DoubleSide }); this.materialMap[_a.NullRenderMaterialHash].color.convertSRGBToLinear(); this.materialMap[_a.NullRenderMaterialVertexColorsHash] = new SpeckleStandardMaterial({ color: 0xffffff, emissive: 0x0, roughness: 1, metalness: 0, side: DoubleSide, vertexColors: true }); this.materialMap[_a.NullRenderMaterialVertexColorsHash].color.convertSRGBToLinear(); const hash = _a.NullDisplayStyleHash; // So prettier doesn't fuck up everything this.materialMap[hash] = new SpeckleLineMaterial({ color: 0x7f7f7f, linewidth: 1, // in world units with size attenuation, pixels otherwise worldUnits: false, vertexColors: true, alphaToCoverage: false, resolution: new Vector2() }); this.materialMap[hash].color = new Color(0x7f7f7f); this.materialMap[hash].color.convertSRGBToLinear(); this.materialMap[hash].linewidth = 1; this.materialMap[hash].worldUnits = false; this.materialMap[hash].vertexColors = true; this.materialMap[hash].pixelThreshold = 0.5; this.materialMap[hash].resolution = new Vector2(); this.materialMap[_a.NullTextDisplayStyle] = new SpeckleTextMaterial({ color: 0x7f7f7f, opacity: 1, side: DoubleSide }); this.materialMap[_a.NullTextDisplayStyle].transparent = false; this.materialMap[_a.NullTextDisplayStyle].depthWrite = true; this.materialMap[_a.NullTextDisplayStyle].toneMapped = false; this.materialMap[_a.NullTextDisplayStyle].color.convertSRGBToLinear(); this.materialMap[_a.NullPointMaterialHash] = new SpecklePointMaterial({ color: 0x7f7f7f, vertexColors: false, size: 2, sizeAttenuation: false }); this.materialMap[_a.NullPointMaterialHash].color.convertSRGBToLinear(); this.materialMap[_a.NullPointCloudVertexColorsMaterialHash] = new SpecklePointMaterial({ color: 0xffffff, vertexColors: true, size: 2, sizeAttenuation: false }); this.materialMap[_a.NullPointCloudMaterialHash] = new SpecklePointMaterial({ color: 0xffffff, vertexColors: false, size: 2, sizeAttenuation: false }); this.materialMap[_a.NullRenderMaterialInstancedHash] = new SpeckleStandardMaterial({ color: 0x7f7f7f, emissive: 0x0, roughness: 1, metalness: 0, side: DoubleSide }); this.materialMap[_a.NullRenderMaterialInstancedHash].color.convertSRGBToLinear(); this.materialMap[_a.NullRenderMaterialInstancedVertexColorHash] = new SpeckleStandardMaterial({ color: 0xffffff, emissive: 0x0, roughness: 1, metalness: 0, side: DoubleSide, vertexColors: true }); this.materialMap[_a.NullRenderMaterialInstancedVertexColorHash].color.convertSRGBToLinear(); } async createDefaultMaterials() { await this.createDefaultMeshMaterials(); await this.createLineDefaultMaterials(); await this.createDefaultPointMaterials(); await this.createDefaultTextMaterials(); await this.createDefaultNullMaterials(); this.defaultGradientTextureData = await Assets.getTextureData(defaultGradient); } makeMeshMaterial(materialData) { const mat = new SpeckleStandardMaterial({ color: materialData.color, emissive: 0x0, // materialData.emissive. Disabling this for now roughness: materialData.roughness, metalness: materialData.metalness, opacity: materialData.opacity, side: DoubleSide }); mat.vertexColors = materialData.vertexColors; mat.transparent = mat.opacity < 1 ? true : false; mat.depthWrite = mat.transparent ? false : true; mat.clipShadows = true; mat.color.convertSRGBToLinear(); mat.emissive.convertSRGBToLinear(); mat.updateArtificialRoughness(_a.DEFAULT_ARTIFICIAL_ROUGHNESS); return mat; } makeLineMaterial(materialData) { const mat = new SpeckleLineMaterial({ color: materialData.color, linewidth: materialData.lineWeight > 0 ? materialData.lineWeight : 1, worldUnits: materialData.lineWeight > 0 ? true : false, vertexColors: true, alphaToCoverage: false, resolution: new Vector2() }); mat.color = new Color(materialData.color); mat.color.convertSRGBToLinear(); mat.opacity = materialData.opacity !== undefined ? materialData.opacity : 1; mat.linewidth = materialData.lineWeight > 0 ? materialData.lineWeight : 1; mat.worldUnits = materialData.lineWeight > 0 ? true : false; mat.vertexColors = true; mat.pixelThreshold = 0.5; mat.resolution = new Vector2(); mat.toneMapped = false; return mat; } makePointMaterial(materialData) { /** There's an issue with how the data is being sent. Some point clouds * have render materials with 0x000000 as the base color + vertex colors * By default three.js modulates the base color with the vertex colors * But since the base color is black, the result is also black. We'll have * to avoid this */ const isBaseColorBlack = materialData.color === -16777216; // 0xff000000 (black) const safeColor = materialData.vertexColors ? isBaseColorBlack ? 0xffffff : materialData.color : materialData.color; const mat = new SpecklePointMaterial({ color: safeColor, ...(materialData.opacity !== undefined && { opacity: materialData.opacity }), ...(materialData.vertexColors !== undefined && { vertexColors: materialData.vertexColors }), size: 2, sizeAttenuation: false }); if (mat.opacity !== undefined) mat.transparent = mat.opacity < 1 ? true : false; mat.depthWrite = mat.transparent ? false : true; mat.toneMapped = false; mat.color.convertSRGBToLinear(); return mat; } makeTextMaterial(materialData) { /** !This should not be neccessary anymore once we implement proper text batching! * If the text had no render material or display style, we simply use the default * null text material */ if (!materialData) return this.materialMap[_a.NullTextDisplayStyle]; const mat = new SpeckleTextMaterial({ color: materialData.color, opacity: 1, side: DoubleSide }); mat.transparent = mat.opacity < 1 ? true : false; mat.depthWrite = mat.transparent ? false : true; mat.toneMapped = false; mat.color.convertSRGBToLinear(); return mat; } getMaterial(hash, material, type) { let mat; switch (type) { case GeometryType.MESH: mat = this.getMeshMaterial(hash, material); break; case GeometryType.LINE: mat = this.getLineMaterial(hash, material); break; case GeometryType.POINT: mat = this.getPointMaterial(hash, material); break; case GeometryType.POINT_CLOUD: mat = this.getPointCloudMaterial(hash, material); break; case GeometryType.TEXT: mat = this.getTextMaterial(hash, material); break; } // } /** There's a bug in three.js where it checks for the length of the planes without checking if they exist first * It's been allegedly fixed in a later version but until we update we'll just assing an empty array */ mat.clippingPlanes = []; return mat; } getMeshMaterial(hash, material) { if (!this.materialMap[hash]) { this.materialMap[hash] = this.makeMeshMaterial(material); } return this.materialMap[hash]; } getLineMaterial(hash, material) { if (!this.materialMap[hash]) { this.materialMap[hash] = this.makeLineMaterial(material); } return this.materialMap[hash]; } getPointMaterial(hash, material) { if (!this.materialMap[hash]) { this.materialMap[hash] = this.makePointMaterial(material); } return this.materialMap[hash]; } getPointCloudMaterial(hash, material) { if (!this.materialMap[hash]) { this.materialMap[hash] = this.getPointMaterial(hash, material); } return this.materialMap[hash]; } getTextMaterial(hash, material) { if (!this.materialMap[hash]) { this.materialMap[hash] = this.makeTextMaterial(material); } return this.materialMap[hash].getDerivedBatchedMaterial(); } getGhostMaterial(renderView, filterMaterial) { switch (renderView.geometryType) { case GeometryType.MESH: return this.meshGhostMaterial; case GeometryType.LINE: return this.lineGhostMaterial; case GeometryType.POINT: return this.pointGhostMaterial; case GeometryType.POINT_CLOUD: return this.pointGhostMaterial; case GeometryType.TEXT: return this.textGhostMaterial; } } getGradientMaterial(renderView, filterMaterial) { switch (renderView.geometryType) { case GeometryType.MESH: { const material = renderView.transparent ? this.meshTransparentGradientMaterial : this.meshGradientMaterial; if (filterMaterial === null || filterMaterial === void 0 ? void 0 : filterMaterial.rampTexture) material.setGradientTexture(filterMaterial.rampTexture); return material; } case GeometryType.LINE: return this.lineColoredMaterial; case GeometryType.POINT: { const material = this.pointCloudGradientMaterial; if (filterMaterial === null || filterMaterial === void 0 ? void 0 : filterMaterial.rampTexture) material.setGradientTexture(filterMaterial.rampTexture); return material; } case GeometryType.POINT_CLOUD: { const material = this.pointCloudGradientMaterial; if (filterMaterial === null || filterMaterial === void 0 ? void 0 : filterMaterial.rampTexture) material.setGradientTexture(filterMaterial.rampTexture); return material; } case GeometryType.TEXT: const material = this.textGradientMaterial; if (filterMaterial === null || filterMaterial === void 0 ? void 0 : filterMaterial.rampTexture) material.setGradientTexture(filterMaterial.rampTexture); return material; } } getColoredMaterial(renderView, filterMaterial) { switch (renderView.geometryType) { case GeometryType.MESH: { const material = renderView.transparent ? this.meshTransparentColoredMaterial : this.meshColoredMaterial; if (filterMaterial === null || filterMaterial === void 0 ? void 0 : filterMaterial.rampTexture) material.setGradientTexture(filterMaterial.rampTexture); return material; } case GeometryType.LINE: return this.lineColoredMaterial; case GeometryType.POINT: { const material = this.pointCloudColouredMaterial; if (filterMaterial === null || filterMaterial === void 0 ? void 0 : filterMaterial.rampTexture) material.setGradientTexture(filterMaterial.rampTexture); return material; } case GeometryType.POINT_CLOUD: { const material = this.pointCloudColouredMaterial; if (filterMaterial === null || filterMaterial === void 0 ? void 0 : filterMaterial.rampTexture) material.setGradientTexture(filterMaterial.rampTexture); return material; } case GeometryType.TEXT: const material = this.textColoredMaterial; if (filterMaterial === null || filterMaterial === void 0 ? void 0 : filterMaterial.rampTexture) material.setGradientTexture(filterMaterial.rampTexture); return material; } } getHiddenMaterial(renderView, filterMaterial) { switch (renderView.geometryType) { case GeometryType.MESH: return this.meshHiddenMaterial; case GeometryType.LINE: return this.lineHiddenMaterial; case GeometryType.POINT: return this.meshHiddenMaterial; case GeometryType.POINT_CLOUD: return this.meshHiddenMaterial; case GeometryType.TEXT: return this.textHiddenMaterial; } } getFilterMaterial(renderView, filterMaterial) { let retMaterial = null; switch (filterMaterial.filterType) { case FilterMaterialType.GHOST: retMaterial = this.getGhostMaterial(renderView, filterMaterial); break; case FilterMaterialType.GRADIENT: retMaterial = this.getGradientMaterial(renderView, filterMaterial); break; case FilterMaterialType.COLORED: retMaterial = this.getColoredMaterial(renderView, filterMaterial); break; case FilterMaterialType.HIDDEN: retMaterial = this.getHiddenMaterial(renderView, filterMaterial); break; } /** There's a bug in three.js where it checks for the length of the planes without checking if they exist first * It's been allegedly fixed in a later version but until we update we'll just assing an empty array */ if (retMaterial) retMaterial.clippingPlanes = []; return retMaterial; } getDataMaterial(renderView, materialData) { const materialHash = _a.getMaterialHash(renderView, materialData); return this.getMaterial(materialHash, materialData, renderView.geometryType); } getFilterMaterialOptions(filterMaterial) { switch (filterMaterial.filterType) { case FilterMaterialType.COLORED: return { rampIndex: filterMaterial.rampIndex !== undefined ? filterMaterial.rampIndex : undefined, rampIndexColor: filterMaterial.rampIndexColor, rampTexture: filterMaterial.rampTexture ? filterMaterial.rampTexture : undefined, rampWidth: filterMaterial.rampTexture ? filterMaterial.rampTexture.image.width : undefined }; case FilterMaterialType.GRADIENT: return { rampIndex: filterMaterial.rampIndex !== undefined ? filterMaterial.rampIndex : undefined, rampIndexColor: filterMaterial.rampIndexColor !== undefined ? filterMaterial.rampIndexColor : filterMaterial.rampIndex ? new Color().setRGB(this.defaultGradientTextureData.data[Math.floor(filterMaterial.rampIndex * (this.defaultGradientTextureData.width - 1)) * 4] / 255, this.defaultGradientTextureData.data[Math.floor(filterMaterial.rampIndex * (this.defaultGradientTextureData.width - 1)) * 4 + 1] / 255, this.defaultGradientTextureData.data[Math.floor(filterMaterial.rampIndex * (this.defaultGradientTextureData.width - 1)) * 4 + 2] / 255).convertSRGBToLinear() : undefined, rampTexture: filterMaterial.rampTexture ? filterMaterial.rampTexture : this.meshGradientMaterial.userData.gradientRamp.value, rampWidth: filterMaterial.rampTexture ? filterMaterial.rampTexture.image.width : this.meshGradientMaterial.userData.gradientRamp.value.image.width }; default: return null; } } purge() { // to do } } _a = Materials; Materials.UNIFORM_VECTORS_USED = 33; Materials.DEFAULT_ARTIFICIAL_ROUGHNESS = 0.6; /** The inverse of "shininess" */ Materials.NullRenderMaterialHash = _a.hashCode(GeometryType.MESH.toString()); Materials.NullRenderMaterialVertexColorsHash = _a.hashCode(GeometryType.MESH.toString() + 'vertexColors'); Materials.NullDisplayStyleHash = _a.hashCode(GeometryType.LINE.toString()); Materials.NullTextDisplayStyle = _a.hashCode(GeometryType.TEXT.toString()); Materials.NullPointMaterialHash = _a.hashCode(GeometryType.POINT.toString()); Materials.NullPointCloudMaterialHash = _a.hashCode(GeometryType.POINT_CLOUD.toString()); Materials.NullPointCloudVertexColorsMaterialHash = _a.hashCode(GeometryType.POINT_CLOUD.toString() + 'vertexColors'); Materials.NullRenderMaterialInstancedHash = _a.hashCode(GeometryType.MESH.toString() + 'instanced'); Materials.NullRenderMaterialInstancedVertexColorHash = _a.hashCode(GeometryType.MESH.toString() + 'vertexColors' + 'instanced'); var SpeckleType; (function (SpeckleType) { SpeckleType["View3D"] = "View3D"; SpeckleType["BlockInstance"] = "BlockInstance"; SpeckleType["Pointcloud"] = "Pointcloud"; SpeckleType["Brep"] = "Brep"; SpeckleType["Mesh"] = "Mesh"; SpeckleType["BinaryMesh"] = "BinaryMesh"; SpeckleType["Point"] = "Point"; SpeckleType["Line"] = "Line"; SpeckleType["Polyline"] = "Polyline"; SpeckleType["Box"] = "Box"; SpeckleType["Polycurve"] = "Polycurve"; SpeckleType["Curve"] = "Curve"; SpeckleType["Circle"] = "Circle"; SpeckleType["Arc"] = "Arc"; SpeckleType["Ellipse"] = "Ellipse"; SpeckleType["RevitInstance"] = "RevitInstance"; SpeckleType["Text"] = "Text"; SpeckleType["Transform"] = "Transform"; SpeckleType["InstanceProxy"] = "InstanceProxy"; SpeckleType["RenderMaterialProxy"] = "RenderMaterialProxy"; SpeckleType["ColorProxy"] = "ColorProxy"; SpeckleType["Region"] = "Region"; SpeckleType["Unknown"] = "Unknown"; })(SpeckleType || (SpeckleType = {})); const SpeckleTypeAllRenderables = [SpeckleType.Pointcloud, SpeckleType.Brep, SpeckleType.Mesh, SpeckleType.BinaryMesh, SpeckleType.Point, SpeckleType.Line, SpeckleType.Polyline, SpeckleType.Box, SpeckleType.Polycurve, SpeckleType.Curve, SpeckleType.Circle, SpeckleType.Arc, SpeckleType.Ellipse, SpeckleType.Text, SpeckleType.Region]; class GeometryConverter {} class NodeRenderView { /** TO DO: Not sure if we should store it */ get guid() { if (!this._guid) { this._guid = this._renderData.subtreeId + this._renderData.id; } return this._guid; } get renderData() { return this._renderData; } get renderMaterialHash() { return this._materialHash; } get hasGeometry() { return this._renderData.geometry && this._renderData.geometry.attributes; } get hasMetadata() { return this._renderData.geometry && this._renderData.geometry.metaData; } get speckleType() { return this._renderData.speckleType; } get geometryType() { return this._geometryType; } get batchStart() { return this._batchIndexStart; } get batchEnd() { return this._batchIndexStart + this._batchIndexCount; } get batchCount() { return this._batchIndexCount; } get batchId() { return this._batchId; } get aabb() { return this._aabb; } set aabb(value) { this._aabb.copy(value); } get transparent() { return this._renderData.renderMaterial && this._renderData.renderMaterial.opacity < 1 || false; } get vertStart() { return this._batchVertexStart; } get vertEnd() { return this._batchVertexEnd; } get needsSegmentConversion() { return this._renderData.speckleType === SpeckleType.Curve || this._renderData.speckleType === SpeckleType.Polyline || this._renderData.speckleType === SpeckleType.Polycurve || this.renderData.speckleType === SpeckleType.Arc || this.renderData.speckleType === SpeckleType.Circle || this.renderData.speckleType === SpeckleType.Ellipse; } get validGeometry() { return this._renderData.geometry.attributes && this._renderData.geometry.attributes.POSITION && this._renderData.geometry.attributes.POSITION.length > 0 && (this._geometryType === GeometryType.MESH ? this._renderData.geometry.attributes.INDEX && this._renderData.geometry.attributes.INDEX.length > 0 : true) || false; } constructor(data) { this._guid = null; this._renderData = data; this._geometryType = this.getGeometryType(); this._materialHash = Materials.getMaterialHash(this); this._batchId = ''; this._batchIndexCount = 0; this._batchIndexStart = -1; this._batchVertexStart = -1; this._batchVertexEnd = -1; } setBatchData(id, start, count, vertStart, vertEnd) { this._batchId = id; this._batchIndexStart = start; this._batchIndexCount = count; if (vertStart !== undefined) this._batchVertexStart = vertStart; if (vertEnd !== undefined) this._batchVertexEnd = vertEnd; } computeAABB(transform) { if (!this._aabb) this._aabb = new Box3(); if (this._renderData.geometry.attributes && this._renderData.geometry.attributes.POSITION.length) { /** For transformations that contain non-uniform scaling combine with rotation the resulting * aabb is not going to be accurate. We will re-compute and assign it when we build the batches */ this._aabb.copy(this._renderData.geometry.attributes.POSITION.computeBox3()); if (transform) this._aabb.applyMatrix4(transform); } } getGeometryType() { switch (this._renderData.speckleType) { case SpeckleType.Mesh: return GeometryType.MESH; case SpeckleType.Brep: return GeometryType.MESH; case SpeckleType.Point: return GeometryType.POINT; case SpeckleType.Pointcloud: return GeometryType.POINT_CLOUD; case SpeckleType.Text: return GeometryType.TEXT; default: return GeometryType.LINE; } } disposeGeometry() { for (const attr in this._renderData.geometry.attributes) { this._renderData.geometry.attributes[attr] = new ChunkArray([]); } } } class RenderTree { get id() { return this.root.model.id; } get subtreeId() { return this.root.model.subtreeId; } constructor(tree, subtreeRoot) { this.cancel = false; this.buildNodeTime = 0; this.applyTransformTime = 0; this.convertTime = 0; this.getNodeTime = 0; this.otherTime = 0; this.count = 0; this.tree = tree; this.root = subtreeRoot; } buildRenderTree(geometryConverter, countCallback) { const p = this.tree.walkAsync(node => { let start = performance.now(); const rendeNode = this.buildRenderNode(node, geometryConverter, countCallback); node.model.renderView = rendeNode ? new NodeRenderView(rendeNode) : null; this.buildNodeTime += performance.now() - start; start = performance.now(); this.applyTransforms(node); this.applyTransformTime += performance.now() - start; if (!node.model.instanced) geometryConverter.disposeNodeGeometryData(node.model); return !this.cancel; }, this.root); return p; } applyTransforms(node) { if (node.model.renderView) { const transform = this.computeTransform(node); if (node.model.renderView.hasGeometry || node.model.renderView.hasMetadata) { if (node.model.renderView.renderData.geometry.bakeTransform) { transform.multiply(node.model.renderView.renderData.geometry.bakeTransform); } node.model.renderView.renderData.geometry.transform = transform; node.model.renderView.computeAABB(!node.model.instanced ? transform : undefined); /** I like that this is gone now! */ // if ( // node.model.instanced && // node.model.renderView.speckleType === SpeckleType.Mesh // ) // node.model.renderView.renderData.geometry.transform = transform // else { // Geometry.transformGeometryData( // node.model.renderView.renderData.geometry, // transform // ) // } // node.model.renderView.computeAABB() // } else if (node.model.renderView.hasMetadata) { // node.model.renderView.renderData.geometry.bakeTransform.premultiply(transform) // node.model.renderView.computeAABB() // } } } } buildRenderNode(node, geometryConverter, countCallback) { let ret = null; let start = performance.now(); const geometryData = geometryConverter.convertNodeToGeometryData(node.model); countCallback === null || countCallback === void 0 ? void 0 : countCallback(this.count++); this.convertTime += performance.now() - start; if (geometryData) { start = performance.now(); const renderMaterialNode = this.getRenderMaterialNode(node); const displayStyleNode = this.getDisplayStyleNode(node); const colorMaterialNode = this.getColorMaterialNode(node); this.getNodeTime += performance.now() - start; start = performance.now(); ret = { id: node.model.id, subtreeId: node.model.subtreeId, speckleType: geometryConverter.getSpeckleType(node.model), geometry: geometryData, renderMaterial: Materials.renderMaterialFromNode(renderMaterialNode || displayStyleNode, node), /** Line-type geometry can also use a renderMaterial*/ displayStyle: Materials.displayStyleFromNode(displayStyleNode || renderMaterialNode), colorMaterial: Materials.colorMaterialFromNode(colorMaterialNode) }; this.otherTime += performance.now() - start; } return ret; } getRenderMaterialNode(node) { if (node.model.raw.renderMaterial) { return node; } const ancestors = this.tree.getAncestors(node); for (let k = 0; k < ancestors.length; k++) { if (ancestors[k].model.raw.renderMaterial) { return ancestors[k]; } } return null; } getDisplayStyleNode(node) { if (node.model.raw.displayStyle) { return node; } const ancestors = this.tree.getAncestors(node); for (let k = 0; k < ancestors.length; k++) { if (ancestors[k].model.raw.displayStyle) { return ancestors[k]; } } return null; } getColorMaterialNode(node) { if (node.model.color) { return node; } const ancestors = this.tree.getAncestors(node); for (let k = 0; k < ancestors.length; k++) { if (ancestors[k].model.color) { return ancestors[k]; } } return null; } computeTransform(node) { /** We don't stack transforms nodes with each other */ if (node.model.renderView.speckleType === SpeckleType.Transform) return node.model.renderView.renderData.transform; const transform = new Matrix4(); const ancestors = this.tree.getAncestors(node); for (let k = 0; k < ancestors.length; k++) { if (ancestors[k].model.renderView) { const renderNode = ancestors[k].model.renderView.renderData; if (renderNode.speckleType === SpeckleType.Transform && renderNode.geometry.transform) { transform.premultiply(renderNode.geometry.transform); } } } return transform; } getInstances() { return this.tree.getInstances(this.root.model.subtreeId); } getDuplicates() { return this.tree.getDuplicates(this.root.model.subtreeId); } getRenderableRenderViews(...types) { return this.getRenderableNodes(...types).map(val => val.model.renderView); } getRenderableNodes(...types) { return this.root.all(node => { return node.model.renderView && (node.model.renderView.hasGeometry || node.model.renderView.hasMetadata) && types.includes(node.model.renderView.renderData.speckleType); }); } getRenderViewsForNode(node) { return this.getRenderViewNodesForNode(node).map(val => val.model.renderView); } getRenderViewNodesForNode(node) { if (node.model.atomic && node.model.renderView /** This should not be needed anymore. */ /*&& node.model.renderView.renderData.speckleType !== SpeckleType.RevitInstance && node.model.renderView.renderData.speckleType !== SpeckleType.BlockInstance */) { return [node]; } return node.all(_node => { return _node.model.renderView && (_node.model.renderView.hasGeometry || _node.model.renderView.hasMetadata); }); } getRenderViewsForNodeId(id, subtreeId) { const nodes = this.tree.findId(id, subtreeId); if (!nodes) { Logger.warn(`Id ${id} does not exist`); return null; } const ret = []; nodes.forEach(node => { ret.push(...this.getRenderViewsForNode(node)); }); return ret; } getAtomicParent(node) { if (node.model.atomic) { return node; } /** There will always the root of the tree as the atomic parent for all nodes */ return this.tree.getAncestors(node).find(node => node.model.atomic); } purge() {} /** TO DO: Need to purge only if currently building */ cancelBuild() { this.cancel = true; this.tree.purge(this.id); this.purge(); } } class NodeMap { get nodeCount() { return Object.keys(this.all).length; } constructor(subtreeRoot) { this.all = {}; this.instances = {}; this.duplicates = {}; this.registerNode(subtreeRoot); } addNode(node) { if (node.model.id.includes(NodeMap.COMPOUND_ID_CHAR)) { this.registerInstance(node); } else { if (this.all[node.model.id]) { // console.warn(`Duplicate id ${node.model.id}, skipping!`) return false; } this.registerNode(node); if (node.model.id.includes(NodeMap.DUPLICATE_ID_CHAR)) { this.registerDuplicate(node); } } return true; } removeNode(node) { if (node.model.id.includes(NodeMap.COMPOUND_ID_CHAR)) { const baseId = node.model.id.substring(0, node.model.id.indexOf(NodeMap.COMPOUND_ID_CHAR)); delete this.instances[baseId][node.model.id]; } else { delete this.all[node.model.id]; } return true; } getNodeById(id) { if (id.includes(NodeMap.COMPOUND_ID_CHAR)) { const baseId = id.substring(0, id.indexOf(NodeMap.COMPOUND_ID_CHAR)); if (this.instances[baseId]) { if (this.instances[baseId][id]) { return [this.instances[baseId][id]]; } } else { Logger.warn('Could not find instance with baseID: ', baseId); return null; } } if (id.includes(NodeMap.DUPLICATE_ID_CHAR)) { const baseId = id.substring(0, id.indexOf(NodeMap.DUPLICATE_ID_CHAR)); if (this.duplicates[baseId]) { if (this.duplicates[baseId][id]) { return [this.duplicates[baseId][id]]; } } else { Logger.warn('Could not find duplicate with baseID: ', baseId); return null; } } if (this.all[id]) { if (this.duplicates[id]) { return [this.all[id], ...Object.values(this.duplicates[id])]; } return [this.all[id]]; } if (this.instances[id]) { return Object.values(this.instances[id]); } return null; } getSubtreeById(id) { return this.all[id]; } hasId(id) { return this.hasNodeId(id) || this.hasInstanceId(id); } hasNodeId(id) { return this.all[id] !== undefined; } hasInstanceId(id) { if (id.includes(NodeMap.COMPOUND_ID_CHAR)) { const baseId = id.substring(0, id.indexOf(NodeMap.COMPOUND_ID_CHAR)); if (this.instances[baseId]) { return true; } else { return false; } } return false; } registerInstance(node) { const baseId = node.model.id.substring(0, node.model.id.indexOf(NodeMap.COMPOUND_ID_CHAR)); if (!this.instances[baseId]) { this.instances[baseId] = {}; } this.instances[baseId][node.model.id] = node; } registerDuplicate(node) { const baseId = node.model.id.substring(0, node.model.id.indexOf(NodeMap.DUPLICATE_ID_CHAR)); if (!this.duplicates[baseId]) { this.duplicates[baseId] = {}; } this.duplicates[baseId][node.model.id] = node; } registerNode(node) { this.all[node.model.id] = node; } purge() { this.all = {}; this.instances = {}; } } NodeMap.COMPOUND_ID_CHAR = '~'; NodeMap.DUPLICATE_ID_CHAR = '#'; class WorldTree { constructor() { this.renderTreeInstances = {}; this.nodeMaps = {}; this.supressWarnings = true; this.subtreeId = 0; this.tree = new TreeModel(); this._root = this.parse({ id: WorldTree.ROOT_ID, raw: {}, atomic: true, children: [], renderView: null }); } getRenderTree(subtreeId) { if (!this._root) { console.error(`WorldTree not initialised`); return null; } const renderTreeRoot = subtreeId ? this.findSubtree(subtreeId) : this.root; if (!renderTreeRoot) { return null; } const subtreeRootId = renderTreeRoot.model.id; if (!this.renderTreeInstances[subtreeRootId]) { this.renderTreeInstances[subtreeRootId] = new RenderTree(this, renderTreeRoot); } return this.renderTreeInstances[subtreeRootId]; } get root() { return this._root; } get nextSubtreeId() { return ++this.subtreeId; } get nodeCount() { let nodeCount = 0; for (const k in this.nodeMaps) nodeCount += this.nodeMaps[k].nodeCount; return nodeCount; } isRoot(node) { return node === this._root; } isSubtreeRoot(node) { return node.parent === this._root; } parse(model) { return this.tree.parse(model); } addSubtree(node) { if (this.nodeMaps[node.id]) { Logger.error(`Subtree with id ${node.id} already exists!`); return; } const subtreeId = this.nextSubtreeId; node.model.subtreeId = subtreeId; this.nodeMaps[subtreeId] = new NodeMap(node); this._root.addChild(node); } addNode(node, parent) { var _a; if (parent === null || parent.model.subtreeId === undefined) { Logger.error(`Invalid parent node!`); return; } node.model.subtreeId = parent.model.subtreeId; if ((_a = this.nodeMaps[parent.model.subtreeId]) === null || _a === void 0 ? void 0 : _a.addNode(node)) parent.addChild(node); } removeNode(node, removeChildren) { var _a; const children = node.children; (_a = this.nodeMaps[node.model.subtreeId]) === null || _a === void 0 ? void 0 : _a.removeNode(node); node.drop(); if (!removeChildren || !children) return; for (let k = 0; k < children.length; k++) { this.removeNode(children[k], removeChildren); } } hasNodeId(id, subtreeId = 1) { return this.nodeMaps[subtreeId] && this.nodeMaps[subtreeId].hasNodeId(id); } hasInstanceId(id, subtreeId = 1) { return this.nodeMaps[subtreeId] && this.nodeMaps[subtreeId].hasInstanceId(id); } hasId(id, subtreeId = 1) { return this.nodeMaps[subtreeId] && this.nodeMaps[subtreeId].hasId(id); } findAll(predicate, node) { if (!node && !this.supressWarnings) { Logger.warn(`Root will be used for searching. You might not want that`); } return (node ? node : this.root).all(predicate); } findId(id, subtreeId) { if (!id) return null; let idNode = null; if (subtreeId) { idNode = this.nodeMaps[subtreeId].getNodeById(id); } else { for (const k in this.nodeMaps) { const nodes = this.nodeMaps[k].getNodeById(id); if (nodes) idNode = [...nodes]; } } return idNode; } /** TODO: Would rather not have this */ findSubtree(id) { let idNode = null; for (const k in this.nodeMaps) { if (idNode = this.nodeMaps[k].getSubtreeById(id)) break; } return idNode; } getAncestors(node) { return node.getPath().reverse().slice(1); // We skip the node itself } getInstances(subtreeId) { return this.nodeMaps[subtreeId].instances; } getDuplicates(subtreeId) { return this.nodeMaps[subtreeId].duplicates; } /** TO DO: We might want to add boolean as return type here too */ walk(predicate, node) { if (!node && !this.supressWarnings) { Logger.warn(`Root will be used for searching. You might not want that`); } this._root.walk(predicate, node); } async walkAsync(predicate, node) { if (!node && !this.supressWarnings) { Logger.warn(`Root will be used for searching. You might not want that`); } const pause = new AsyncPause(); let success = true; async function depthFirstPreOrderAsync(callback, context) { let i, childCount; pause.tick(100); if (pause.needsWait) { await pause.wait(16); } success && (success = callback(context)); for (i = 0, childCount = context.children.length; i < childCount; i++) { if (!(await depthFirstPreOrderAsync(callback, context.children[i]))) break; } return success; } return depthFirstPreOrderAsync(predicate, node ? node : this._root); } purge(subtreeId) { if (subtreeId) { delete this.renderTreeInstances[subtreeId]; const subtreeNode = this.findId(subtreeId); if (subtreeNode) { this.nodeMaps[subtreeNode[0].model.subtreeId].purge(); delete this.nodeMaps[subtreeNode[0].model.subtreeId]; // Potentially true? this.removeNode(subtreeNode[0], false); } return; } Object.keys(this.renderTreeInstances).forEach(key => delete this.renderTreeInstances[key]); Object.keys(this.nodeMaps).forEach(key => { this.nodeMaps[key].purge; delete this.nodeMaps[key]; }); this._root.drop(); this._root.children.length = 0; this.tree = new TreeModel(); this._root = this.tree.parse({ id: WorldTree.ROOT_ID, raw: {}, atomic: true, children: [] }); } } WorldTree.ROOT_ID = 'ROOT'; const MatBuff0 = new Matrix4(); const BoxBuff0 = new Box3(); const BoxBuff1 = new Box3(); const VecBuff = new Vector3(); function getRelativeOffset(referenceBox, offsetAmount = 0.001) { if (referenceBox.isEmpty()) return offsetAmount; MatBuff0.identity(); MatBuff0.makeScale(1 + offsetAmount, 1 + offsetAmount, 1 + offsetAmount); const worldSize = referenceBox.getSize(VecBuff).multiplyScalar(0.5); BoxBuff0.min.set(0, 0, 0); BoxBuff0.max.set(0, 0, 0); BoxBuff1.min.set(0, 0, 0); BoxBuff1.max.set(0, 0, 0); const sizeBox = BoxBuff0.expandByVector(worldSize); const offsetBox = BoxBuff1.copy(sizeBox).applyMatrix4(MatBuff0); const dist = offsetBox.max.distanceTo(sizeBox.max); return dist; } function makePerspectiveProjection(screenSize, fov, near, far) { const aspect = screenSize.x / screenSize.y; const top = near * Math.tan(DEG2RAD * 0.5 * fov); const height = 2 * top; const width = aspect * height; const left = -0.5 * width; return new Matrix4().makePerspective(left, left + width, top, top - height, near, far); } /* eslint-disable camelcase */ const vecBuff0$1 = new Vector3(); const floatArrayBuff = new Float32Array(16); var GeometryAttributes; (function (GeometryAttributes) { GeometryAttributes["POSITION"] = "POSITION"; GeometryAttributes["COLOR"] = "COLOR"; GeometryAttributes["NORMAL"] = "NORMAL"; GeometryAttributes["UV"] = "UV"; GeometryAttributes["TANGENT"] = "TANGENT"; GeometryAttributes["INDEX"] = "INDEX"; })(GeometryAttributes || (GeometryAttributes = {})); class Geometry { static updateRTEGeometry(geometry, doublePositions) { if (geometry.type === 'BufferGeometry' || geometry.type === 'PlaneGeometry' || geometry.type === 'CircleGeometry') { const position_low = new Float32Array(doublePositions.length); /** We'll store the high component of the encoding inside three's default `position` attribute */ const position_high = geometry.attributes.position.array; Geometry.DoubleToHighLowBuffer(doublePositions, position_low, position_high); geometry.setAttribute('position_low', new Float32BufferAttribute(position_low, 3)); } else if (geometry.type === 'LineGeometry' || geometry.type === 'LineSegmentsGeometry') { const position_low = new Float32Array(doublePositions.length); /** This is the default instanceStart + instanceEnd interleaved attribute buffer * We're not altering it in reality since the high part of our encoding is the * original position double value casted down to float */ const position_high = geometry.attributes.instanceStart.array; Geometry.DoubleToHighLowBuffer(doublePositions, position_low, position_high); const instanceBufferLow = new InstancedInterleavedBuffer(position_low, 6, 1); // xyz, xyz geometry.setAttribute('instanceStartLow', new InterleavedBufferAttribute(instanceBufferLow, 3, 0)); // xyz geometry.setAttribute('instanceEndLow', new InterleavedBufferAttribute(instanceBufferLow, 3, 3)); // xyz } } static mergeGeometryAttribute(attributes, target) { let offset = 0; for (let k = 0; k < attributes.length; k++) { const attribute = attributes[k]; if (!attribute || !target) { throw new Error('Cannot merge geometries. Indices or positions are undefined'); } attribute.copyToBuffer(target, offset); offset += attribute.length; } return target; } static mergeIndexAttribute(indexAttributes, positionAttributes) { let indexOffset = 0; const mergedIndex = []; for (let i = 0; i < indexAttributes.length; ++i) { const index = indexAttributes[i]; const positions = positionAttributes[i]; if (!index || !positions) { throw new Error('Cannot merge geometries. Indices or positions are undefined'); } for (let j = 0; j < index.length; ++j) { mergedIndex.push(index.get(j) + indexOffset / 3); } indexOffset += positions.length; } return mergedIndex; } static mergeGeometryData(geometries) { const sampleAttributes = geometries[0].attributes; const mergedGeometry = { attributes: {}, bakeTransform: null, transform: null }; for (let i = 0; i < geometries.length; i++) { /** Catering to typescript */ if (geometries[i].bakeTransform !== null) Geometry.transformGeometryData(geometries[i], geometries[i].bakeTransform); } if (sampleAttributes && sampleAttributes.INDEX) { const indexAttributes = geometries.map(item => { /** Catering to typescript */ if (!item.attributes) return; return item.attributes.INDEX; }); const positionAttributes = geometries.map(item => { /** Catering to typescript */ if (!item.attributes) return; return item.attributes.POSITION; }); /** o_0 Catering to typescript*/ if (mergedGeometry.attributes) mergedGeometry.attributes.INDEX = new ChunkArray([{ data: Geometry.mergeIndexAttribute(indexAttributes, positionAttributes), id: MathUtils.generateUUID(), references: 1 }]); } for (const k in sampleAttributes) { if (k !== GeometryAttributes.INDEX) { const attributes = geometries.map(item => { /** Catering to typescript */ if (!item.attributes) return; return item.attributes[k]; }); /** Catering to typescript */ if (mergedGeometry.attributes) { const mergedData = Geometry.mergeGeometryAttribute(attributes, k === GeometryAttributes.POSITION ? new Float64Array(attributes.reduce((prev, cur) => { /** Catering to typescript */ if (!cur) return 0; return prev + cur.length; }, 0)) : new Float32Array(attributes.reduce((prev, cur) => { /** Catering to typescript */ if (!cur) return 0; return prev + cur.length; }, 0))); mergedGeometry.attributes[k] = new ChunkArray([{ data: mergedData, id: MathUtils.generateUUID(), references: 1 }]); } } } geometries.forEach(geometry => { for (const k in geometry.attributes) { delete geometry.attributes[k]; } }); return mergedGeometry; } static transformGeometryData(geometryData, m) { if (!geometryData.attributes) return; if (!geometryData.attributes.POSITION) return; if (!m) return; if (Geometry.isMatrix4Identity(m)) return; const e = m.elements; geometryData.attributes.POSITION.chunkArray.forEach(chunk => { for (let k = 0; k < chunk.data.length; k += 3) { const x = chunk.data[k], y = chunk.data[k + 1], z = chunk.data[k + 2]; const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]); chunk.data[k] = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w; chunk.data[k + 1] = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w; chunk.data[k + 2] = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w; } }); } static transformArray(array, m, offset, count) { if (!m) return; if (Geometry.isMatrix4Identity(m)) return; const e = m.elements; offset = offset || 0; count = count || array.length; for (let k = offset; k < offset + count; k += 3) { const x = array[k], y = array[k + 1], z = array[k + 2]; const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]); array[k] = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w; array[k + 1] = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w; array[k + 2] = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w; } } static isMatrix4Identity(matrix) { const e = matrix.elements; // Check all off-diagonal elements first if (e[1] !== 0 || e[2] !== 0 || e[3] !== 0 || e[4] !== 0 || e[6] !== 0 || e[7] !== 0 || e[8] !== 0 || e[9] !== 0 || e[11] !== 0 || e[12] !== 0 || e[13] !== 0 || e[14] !== 0) { return false; } // Now check diagonals if (e[0] !== 1 || e[5] !== 1 || e[10] !== 1 || e[15] !== 1) { return false; } return true; } static unpackColors(int32Colors) { const colors = new Array(int32Colors.length * 3); for (let i = 0; i < int32Colors.length; i++) { const color = int32Colors[i]; const r = color >> 16 & 0xff; const g = color >> 8 & 0xff; const b = color & 0xff; colors[i * 3] = r / 255; colors[i * 3 + 1] = g / 255; colors[i * 3 + 2] = b / 255; } return colors; } /** Please see https://speckle.systems/blog/improving-speckles-rte-implementation/ for additional details * regarding double -> encoding. */ static DoubleToHighLowVector(input, low, high) { let doubleValue = input.x; if (doubleValue >= 0.0) { floatArrayBuff[0] = doubleValue; const doubleHigh = floatArrayBuff[0]; high.x = doubleHigh; low.x = doubleValue - doubleHigh; } else { floatArrayBuff[0] = -doubleValue; const doubleHigh = floatArrayBuff[0]; high.x = -doubleHigh; low.x = doubleValue + doubleHigh; } doubleValue = input.y; if (doubleValue >= 0.0) { floatArrayBuff[0] = doubleValue; const doubleHigh = floatArrayBuff[0]; high.y = doubleHigh; low.y = doubleValue - doubleHigh; } else { floatArrayBuff[0] = -doubleValue; const doubleHigh = floatArrayBuff[0]; high.y = -doubleHigh; low.y = doubleValue + doubleHigh; } doubleValue = input.z; if (doubleValue >= 0.0) { floatArrayBuff[0] = doubleValue; const doubleHigh = floatArrayBuff[0]; high.z = doubleHigh; low.z = doubleValue - doubleHigh; } else { floatArrayBuff[0] = -doubleValue; const doubleHigh = floatArrayBuff[0]; high.z = -doubleHigh; low.z = doubleValue + doubleHigh; } } static DoubleToHighLowBuffer(input, position_low, position_high) { for (let k = 0; k < input.length; k++) { const doubleValue = input[k]; if (doubleValue >= 0.0) { floatArrayBuff[0] = doubleValue; const doubleHigh = floatArrayBuff[0]; position_high[k] = doubleHigh; position_low[k] = doubleValue - doubleHigh; } else { floatArrayBuff[0] = -doubleValue; const doubleHigh = floatArrayBuff[0]; position_high[k] = -doubleHigh; position_low[k] = doubleValue + doubleHigh; } } } static needsRTE(bounds) { const cameraDistance = getRelativeOffset(bounds, 0.01); const cameraNear = getRelativeOffset(bounds, 0.009); const screenSize = new Vector2(1920, 1080); const cameraProjection = makePerspectiveProjection(screenSize, 50, cameraNear, cameraNear * 10); const pixelDelta = new Vector2(-1, -1); const points = [bounds.min, bounds.max, bounds.getCenter(new Vector3())]; for (let k = 0; k < points.length; k++) { const delta = Geometry.getFP32ProjectionDelta(points[k], cameraProjection, screenSize, cameraDistance); pixelDelta.x = Math.max(pixelDelta.x, delta.x); pixelDelta.y = Math.max(pixelDelta.y, delta.y); } return pixelDelta.x >= 0.5 || pixelDelta.y >= 0.5; } static getFP32ProjectionDelta(point, projection, screenSize, relativeOffset = 1) { /** Cast to float, loose precision */ floatArrayBuff[0] = point.x; floatArrayBuff[1] = point.y; floatArrayBuff[2] = point.z; /** Single precision version */ const floatVector = vecBuff0$1.set(floatArrayBuff[0], floatArrayBuff[1], floatArrayBuff[2]); /** A bit of randomness so camera has a rotation */ const camPos = new Vector3().copy(point).add(new Vector3(Math.random() * relativeOffset, Math.random() * relativeOffset, -relativeOffset)); /** Double precision */ const viewProjectionFp64 = new Matrix4().lookAt(camPos, point, new Vector3(0, 1, 0)); viewProjectionFp64.setPosition(camPos); viewProjectionFp64.invert(); viewProjectionFp64.premultiply(projection); /** Single precision */ const viewProjectionFp32 = new Matrix4().copy(viewProjectionFp64); viewProjectionFp32.toArray(floatArrayBuff); viewProjectionFp32.fromArray(floatArrayBuff); /** Project and turn into pixels */ const float4 = new Vector4(floatVector.x, floatVector.y, floatVector.z, 1); const double4 = new Vector4(floatVector.x, floatVector.y, floatVector.z, 1); float4.applyMatrix4(viewProjectionFp32); float4.multiplyScalar(0.5 / float4.w); float4.addScalar(0.5); float4.multiply(new Vector4(screenSize.x, screenSize.y, 0, 0)); double4.applyMatrix4(viewProjectionFp64); double4.multiplyScalar(0.5 / double4.w); double4.addScalar(0.5); double4.multiply(new Vector4(screenSize.x, screenSize.y, 0, 0)); // console.log('Float -> ', float4) // console.log('Double -> ', double4) /** Pixel difference */ return new Vector2(Math.abs(double4.x - float4.x), Math.abs(double4.y - float4.y)); } /** Only supports indexed geometry */ static computeVertexNormalsBuffer(buffer, position, index) { const pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); const nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); const cb = new Vector3(), ab = new Vector3(); // indexed elements for (let i = 0, il = index.length; i < il; i += 3) { const vA = index[i + 0]; const vB = index[i + 1]; const vC = index[i + 2]; pA.fromArray(position, vA * 3); pB.fromArray(position, vB * 3); pC.fromArray(position, vC * 3); cb.subVectors(pC, pB); ab.subVectors(pA, pB); cb.cross(ab); nA.fromArray(buffer, vA * 3); nB.fromArray(buffer, vB * 3); nC.fromArray(buffer, vC * 3); nA.add(cb); nB.add(cb); nC.add(cb); buffer[vA * 3] = nA.x; buffer[vA * 3 + 1] = nA.y; buffer[vA * 3 + 2] = nA.z; buffer[vB * 3] = nB.x; buffer[vB * 3 + 1] = nB.y; buffer[vB * 3 + 2] = nB.z; buffer[vC * 3] = nC.x; buffer[vC * 3 + 1] = nC.y; buffer[vC * 3 + 2] = nC.z; } } static computeVertexNormalsBufferVirtual(buffer, position, index, flip = false) { const pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); const nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); const cb = new Vector3(), ab = new Vector3(); // indexed elements for (let i = 0, il = index.length; i < il; i += 3) { const vA = index.get(i + 0); const vB = index.get(i + 1); const vC = index.get(i + 2); pA.set(position.get(vA * 3), position.get(vA * 3 + 1), position.get(vA * 3 + 2)); pB.set(position.get(vB * 3), position.get(vB * 3 + 1), position.get(vB * 3 + 2)); pC.set(position.get(vC * 3), position.get(vC * 3 + 1), position.get(vC * 3 + 2)); cb.subVectors(pC, pB); ab.subVectors(pA, pB); cb.cross(ab); nA.fromArray(buffer, vA * 3); nB.fromArray(buffer, vB * 3); nC.fromArray(buffer, vC * 3); nA.add(cb); nB.add(cb); nC.add(cb); if (flip) { nA.normalize(); nB.normalize(); nC.normalize(); nA.negate(); nB.negate(); nC.negate(); } buffer[vA * 3] = nA.x; buffer[vA * 3 + 1] = nA.y; buffer[vA * 3 + 2] = nA.z; buffer[vB * 3] = nB.x; buffer[vB * 3 + 1] = nB.y; buffer[vB * 3 + 2] = nB.z; buffer[vC * 3] = nC.x; buffer[vC * 3 + 1] = nC.y; buffer[vC * 3 + 2] = nC.z; } } // ¯\_(ツ)_/¯ static flipNormalsBuffer(buffer) { const vec3 = new Vector3(); for (let k = 0; k < buffer.length; k += 3) { vec3.set(buffer[k], buffer[k + 1], buffer[k + 2]); vec3.normalize(); vec3.negate(); buffer[k] = vec3.x; buffer[k + 1] = vec3.y; buffer[k + 2] = vec3.z; } } static computeVertexNormals(buffer, positions) { const index = buffer.index; const positionAttribute = buffer.getAttribute('position'); if (positionAttribute !== undefined) { let normalAttribute = buffer.getAttribute('normal'); if (normalAttribute === undefined) { normalAttribute = new BufferAttribute(new Float32Array(positionAttribute.count * 3), 3); buffer.setAttribute('normal', normalAttribute); } else { // reset existing normals to zero for (let i = 0, il = normalAttribute.count; i < il; i++) { normalAttribute.setXYZ(i, 0, 0, 0); } } const pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); const nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); const cb = new Vector3(), ab = new Vector3(); // indexed elements if (index) { for (let i = 0, il = index.count; i < il; i += 3) { const vA = index.getX(i + 0); const vB = index.getX(i + 1); const vC = index.getX(i + 2); pA.fromArray(positions, vA * 3); pB.fromArray(positions, vB * 3); pC.fromArray(positions, vC * 3); cb.subVectors(pC, pB); ab.subVectors(pA, pB); cb.cross(ab); nA.fromBufferAttribute(normalAttribute, vA); nB.fromBufferAttribute(normalAttribute, vB); nC.fromBufferAttribute(normalAttribute, vC); nA.add(cb); nB.add(cb); nC.add(cb); normalAttribute.setXYZ(vA, nA.x, nA.y, nA.z); normalAttribute.setXYZ(vB, nB.x, nB.y, nB.z); normalAttribute.setXYZ(vC, nC.x, nC.y, nC.z); } } else { // non-indexed elements (unconnected triangle soup) for (let i = 0, il = positionAttribute.count; i < il; i += 3) { /** This is done blind. Don't think speckle supports non-indexed geometry */ pA.fromArray(positions, i * 3); pB.fromArray(positions, i * 3 + 1); pC.fromArray(positions, i * 3 + 2); cb.subVectors(pC, pB); ab.subVectors(pA, pB); cb.cross(ab); normalAttribute.setXYZ(i + 0, cb.x, cb.y, cb.z); normalAttribute.setXYZ(i + 1, cb.x, cb.y, cb.z); normalAttribute.setXYZ(i + 2, cb.x, cb.y, cb.z); } } buffer.normalizeNormals(); normalAttribute.needsUpdate = true; } } static triangulatePolygon(points) { const flatArray = new Array(points.length * 2); points.forEach((point, index) => point.toArray(flatArray, index * 2)); return earcut(flatArray); } } const vec4Buffer = new Vector4(); class LineBatch { get bounds() { if (!this.geometry.boundingBox) this.geometry.computeBoundingBox(); return this.geometry.boundingBox ? this.geometry.boundingBox : new Box3(); } get drawCalls() { return 1; } get minDrawCalls() { return 1; } get triCount() { return 0; } get vertCount() { return this.geometry.attributes.position.count * this.geometry.instanceCount; } constructor(id, subtreeId, renderViews) { this.visibilityRanges = {}; this.id = id; this.subtreeId = subtreeId; this.renderViews = renderViews; } get groups() { return []; } get pointCount() { return 0; } get lineCount() { /** Catering to typescript * There is no unniverse where the geometry is non-indexed. LineSegments2 are **explicitly** indexed */ const indexCount = this.geometry.index ? this.geometry.index.count : 0; return indexCount / 3 * this.geometry['_maxInstanceCount']; } get renderObject() { return this.mesh; } get geometryType() { return GeometryType.LINE; } get materials() { return this.mesh.material; } getCount() { return this.geometry.attributes.instanceStart.array.length / 6; } setBatchMaterial(material) { this.batchMaterial = material; /** Not a fan of this :( */ this.batchTransparent = material.transparent; this.batchOpacity = material.opacity; } onUpdate(deltaTime) { } onRender(renderer) { renderer.getDrawingBufferSize(this.batchMaterial.resolution); } setVisibleRange(ranges) { if (ranges.length === 1 && isNoneBatchUpdateRange(ranges[0])) { this.mesh.visible = false; return; } if (ranges.length === 1 && isAllBatchUpdateRange(ranges[0], this.getCount())) { this.mesh.visible = true; return; } this.mesh.visible = true; const data = this.colorBuffer.array; for (let k = 0; k < data.length; k += 4) { data[k + 3] = 0; } for (let i = 0; i < ranges.length; i++) { const start = ranges[i].offset * this.colorBuffer.stride; const len = ranges[i].offset * this.colorBuffer.stride + ranges[i].count * this.colorBuffer.stride; for (let k = start; k < len; k += 4) { data[k + 3] = 1; } } this.colorBuffer.updateRange = { offset: 0, count: data.length }; this.colorBuffer.needsUpdate = true; this.geometry.attributes['instanceColorStart'].needsUpdate = true; this.geometry.attributes['instanceColorEnd'].needsUpdate = true; } /** Line batches do not sort their ranges. This means we can have hidden/transparent objects anywhere inside the batch. */ getVisibleRange() { if (!this.mesh.visible) return NoneBatchUpdateRange; return AllBatchUpdateRange; } getOpaque() { if (Materials.isOpaque(this.batchMaterial)) return AllBatchUpdateRange; return NoneBatchUpdateRange; } getDepth() { return this.getOpaque(); } getTransparent() { if (Materials.isTransparent(this.batchMaterial)) return AllBatchUpdateRange; return NoneBatchUpdateRange; } getStencil() { if (this.batchMaterial.stencilWrite === true) return AllBatchUpdateRange; return NoneBatchUpdateRange; } /** Reminder here that line batches do not really change materials, just the color buffer changes */ setBatchBuffers(ranges) { var _a; const data = this.colorBuffer.array; /** Reset transparency */ this.batchMaterial.transparent = this.batchTransparent; this.batchMaterial.opacity = this.batchOpacity; for (let i = 0; i < ranges.length; i++) { const material = ranges[i].material; const materialOptions = ranges[i].materialOptions; const color = materialOptions && materialOptions.rampIndexColor ? materialOptions.rampIndexColor : material.color; const alpha = material.visible ? material.opacity : 0; (_a = this.batchMaterial).transparent || (_a.transparent = material.opacity < 1); this.batchMaterial.opacity = Math.min(this.batchMaterial.opacity, material.opacity); const start = ranges[i].offset * this.colorBuffer.stride; const len = ranges[i].offset * this.colorBuffer.stride + ranges[i].count * this.colorBuffer.stride; vec4Buffer.set(color.r, color.g, color.b, alpha); this.updateColorBuffer(start, ranges[i].count === Infinity ? this.colorBuffer.array.length : len, vec4Buffer); this.visibilityRanges[ranges[i].offset] = material.visible; } this.colorBuffer.updateRange = { offset: 0, count: data.length }; this.colorBuffer.needsUpdate = true; this.geometry.attributes['instanceColorStart'].needsUpdate = true; this.geometry.attributes['instanceColorEnd'].needsUpdate = true; const visibility = Object.values(this.visibilityRanges); let anyVisible = false; for (let k = 0; k < visibility.length; k++) { anyVisible || (anyVisible = visibility[k]); } if (anyVisible) this.setVisibleRange([AllBatchUpdateRange]);else this.setVisibleRange([NoneBatchUpdateRange]); } setDrawRanges(ranges) { this.setBatchBuffers(ranges); } resetDrawRanges() { this.setDrawRanges([{ offset: 0, count: this.getCount(), material: this.batchMaterial }]); this.mesh.material = this.batchMaterial; this.mesh.visible = true; this.batchMaterial.transparent = this.batchTransparent; this.batchMaterial.opacity = this.batchOpacity; this.visibilityRanges = { 0: this.batchMaterial.visible }; } buildBatch() { let attributeCount = 0; const rvAABB = new Box3(); const bounds = new Box3(); this.renderViews.forEach(val => { if (!val.renderData.geometry.attributes) { throw new Error(`Cannot build batch ${this.id}. Invalid geometry`); } attributeCount += val.needsSegmentConversion ? (val.renderData.geometry.attributes.POSITION.length - 3) * 2 : val.renderData.geometry.attributes.POSITION.length; bounds.union(val.aabb); }); const needsRTE = Geometry.needsRTE(bounds); const position = needsRTE ? new Float64Array(attributeCount) : new Float32Array(attributeCount); let offset = 0; for (let k = 0; k < this.renderViews.length; k++) { const geometry = this.renderViews[k].renderData.geometry; if (!geometry.attributes) { throw new Error(`Cannot build batch ${this.id}. Invalid geometry`); } let points; /** We need to make sure the line geometry has a layout of : * start(x,y,z), end(x,y,z), start(x,y,z), end(x,y,z)... etc * Some geometries have that inherent form, some don't */ if (this.renderViews[k].needsSegmentConversion) { const length = geometry.attributes.POSITION.length - 3; points = new Array(2 * length); for (let i = 0; i < length; i += 3) { points[2 * i] = geometry.attributes.POSITION.get(i); points[2 * i + 1] = geometry.attributes.POSITION.get(i + 1); points[2 * i + 2] = geometry.attributes.POSITION.get(i + 2); points[2 * i + 3] = geometry.attributes.POSITION.get(i + 3); points[2 * i + 4] = geometry.attributes.POSITION.get(i + 4); points[2 * i + 5] = geometry.attributes.POSITION.get(i + 5); } position.set(points, offset); } else { points = geometry.attributes.POSITION; geometry.attributes.POSITION.copyToBuffer(position, offset); } const positionSubArray = position.subarray(offset, offset + points.length); Geometry.transformArray(positionSubArray, geometry.transform, 0, points.length); /** We re-compute the render view aabb based on transformed geometry * We do this because some transforms like non-uniform scaling can produce incorrect results * if we compute an aabb from original geometry then apply the transform. That's why we compute * an aabb from the transformed geometry here and set it in the rv */ rvAABB.setFromArray(positionSubArray); this.renderViews[k].aabb = rvAABB; this.renderViews[k].setBatchData(this.id, offset / 6, points.length / 6); offset += points.length; } this.geometry = this.makeLineGeometry(position); if (Geometry.needsRTE(bounds)) { Geometry.updateRTEGeometry(this.geometry, position); this.batchMaterial.defines['USE_RTE'] = ' '; } this.mesh = new LineSegments2(this.geometry, this.batchMaterial); this.mesh.computeLineDistances(); this.mesh.scale.set(1, 1, 1); this.mesh.uuid = this.id; this.mesh.layers.set(ObjectLayers.STREAM_CONTENT_LINE); this.visibilityRanges = { 0: this.batchMaterial.visible }; return Promise.resolve(); } getRenderView(index) { for (let k = 0; k < this.renderViews.length; k++) { if (index >= this.renderViews[k].batchStart && index < this.renderViews[k].batchEnd && /** A bit cheaty, but ok for now */ this.colorBuffer.array[index * this.colorBuffer.stride + 3] !== 0) { return this.renderViews[k]; } } return null; } getMaterialAtIndex(index) { return this.batchMaterial; } /** TODO: I wish we wouldn't clone the material here... */ getMaterial(rv) { const start = rv.batchStart * this.colorBuffer.stride; const data = this.colorBuffer.array; const material = this.batchMaterial.clone(); material.color.setRGB(data[start], data[start + 1], data[start + 2]); material.opacity = data[start + 3]; return material; } makeLineGeometry(position) { const geometry = new LineSegmentsGeometry(); /** This will set the instanceStart and instanceEnd attributes. These will be our high parts */ if (position instanceof Float64Array) /** We need to re-allocate because there is no way to cast it down to float32. If we pass in a Float64Array, three.js will do it anyway */ geometry.setPositions(new Float32Array(position));else geometry.setPositions(position); const buffer = new Float32Array(position.length + position.length / 3); this.colorBuffer = new InstancedInterleavedBuffer(buffer, 8, 1); // rgba, rgba this.colorBuffer.setUsage(DynamicDrawUsage); this.updateColorBuffer(0, buffer.length, new Vector4(this.batchMaterial.color.r, this.batchMaterial.color.g, this.batchMaterial.color.b, 1)); geometry.setAttribute('instanceColorStart', new InterleavedBufferAttribute(this.colorBuffer, 4, 0)); // rgb geometry.setAttribute('instanceColorEnd', new InterleavedBufferAttribute(this.colorBuffer, 4, 4)); // rgb geometry.computeBoundingBox(); return geometry; } updateColorBuffer(start, end, color) { const data = this.colorBuffer.array; for (let k = start; k < end; k += 4) { data[k] = color.x; data[k + 1] = color.y; data[k + 2] = color.z; data[k + 3] = color.w; } } purge() { this.renderViews.length = 0; this.geometry.dispose(); this.batchMaterial.dispose(); this.colorBuffer.length = 0; } } const SKIP_GENERATION = Symbol('skip tree generation'); const DefaultBVHOptions = { strategy: CENTER, maxDepth: 40, maxLeafTris: 10, verbose: true, useSharedArrayBuffer: false, setBoundingBox: false, [SKIP_GENERATION]: false }; /** * _____ _ _ |_ _| | | | | | | _ __ ___ _ __ ___ _ __| |_ __ _ _ __ | |_ | | | '_ ` _ \| '_ \ / _ \| '__| __/ _` | '_ \| __| _| |_| | | | | | |_) | (_) | | | || (_| | | | | |_ |_____|_| |_| |_| .__/ \___/|_| \__\__,_|_| |_|\__| | | |_| We've made this wrapper around the original implementation to hide the transformations we do behind the scenes in order to avoid storing vertex positions as Float64. Instead we store them as Float32, but the whole BVH is re-centered around the mesh local origin as (0,0,0). We use the resulting transformations to transform anything that comes in or out of the BVH in order to keep this re-centering opaque. We've implemented auto-transformation for raycasting and shapecasting. Other functionalities like bvhcast or geometrycast will need to be wrapped around if required. Otherwise, keep in mind that if you use this class for any other purposes, you can use transformInput and transformOutput to get the correct values for Vectors, Rays, Boxes, etc */ class AccelerationStructure { get geometry() { return this._bvh.geometry; } get bvh() { return this._bvh; } static buildBVH(indices, position, options = DefaultBVHOptions, transform) { /** There is no unniverse where you can build a BVH without proper indices or positions */ if (!indices || !position) { throw new Error('Cannot build BVH with undefined indices or position!'); } let bvhPositions = position; if (transform) { bvhPositions = new Float32Array(position.length); const vecBuff = new Vector3(); for (let k = 0; k < position.length; k += 3) { vecBuff.set(position[k], position[k + 1], position[k + 2]); vecBuff.applyMatrix4(transform); bvhPositions[k] = vecBuff.x; bvhPositions[k + 1] = vecBuff.y; bvhPositions[k + 2] = vecBuff.z; } } const bvhGeometry = new BufferGeometry(); let bvhIndices = null; if (position.length >= 65535 || indices.length >= 65535) { bvhIndices = new Uint32Array(indices.length); bvhIndices.set(indices, 0); bvhGeometry.setIndex(new Uint32BufferAttribute(bvhIndices, 1)); } else { bvhIndices = new Uint16Array(indices.length); bvhIndices.set(indices, 0); bvhGeometry.setIndex(new Uint16BufferAttribute(bvhIndices, 1)); } bvhGeometry.setAttribute('position', new Float32BufferAttribute(bvhPositions, 3)); bvhGeometry.computeBoundingBox(); const bvh = new MeshBVH(bvhGeometry, options); return bvh; } constructor(bvh) { this._bvh = bvh; } /* Core Cast Functions */ raycast(ray, materialOrSide = FrontSide) { const res = this._bvh.raycast(this.transformInput(ray), materialOrSide); res.forEach(value => { value.point = this.transformOutput(value.point); }); /** The intersection results from raycasting a bvh will always overlap with MeshIntersection because the bvh uses indexed geometry */ return res; } raycastFirst(ray, materialOrSide = FrontSide) { const res = this._bvh.raycastFirst(this.transformInput(ray), materialOrSide); if (res) res.point = this.transformOutput(res.point); /** The intersection results from raycasting a bvh will always overlap with MeshIntersection because the bvh uses indexed geometry */ return res; } shapecast(callbacks) { const boxBuffer = new Box3(); const triangleBuffer = new ExtendedTriangle(); const newCallbacks = Object.create(null); if (callbacks.intersectsBounds) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore newCallbacks.intersectsBounds = (box, isLeaf, score, depth, nodeIndex) => { boxBuffer.copy(box); this.transformOutput(boxBuffer); return callbacks.intersectsBounds(boxBuffer, isLeaf, score, depth, nodeIndex); }; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore if (callbacks.intersectsTriangle) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore newCallbacks.intersectsTriangle = (triangle, triangleIndex, contained, depth) => { triangleBuffer.copy(triangle); this.transformOutput(triangleBuffer.a); this.transformOutput(triangleBuffer.b); this.transformOutput(triangleBuffer.c); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return callbacks.intersectsTriangle(triangleBuffer, triangleIndex, contained, depth); }; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore newCallbacks.intersectsRange = callbacks.intersectsRange; // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore newCallbacks.traverseBoundsOrder = callbacks.traverseBoundsOrder; return this._bvh.shapecast(newCallbacks); } transformInput(input) { AccelerationStructure.MatBuff.copy(this.inputOriginTransform).multiply(this.inputTransform); return input.applyMatrix4(AccelerationStructure.MatBuff); } transformOutput(output) { AccelerationStructure.MatBuff.copy(this.outputOriginTransfom).premultiply(this.outputTransform); return output.applyMatrix4(AccelerationStructure.MatBuff); } getBoundingBox(target) { const _target = target ? target : new Box3(); this._bvh.getBoundingBox(_target); return this.transformOutput(_target); } getVertexAtIndex(index) { const array = this._bvh.geometry.attributes.position.array; return this.transformOutput(new Vector3(array[index * 3], array[index * 3 + 1], array[index * 3 + 2])); } } AccelerationStructure.MatBuff = new Matrix4(); /** * _____ _ _ |_ _| | | | | | | _ __ ___ _ __ ___ _ __| |_ __ _ _ __ | |_ | | | '_ ` _ \| '_ \ / _ \| '__| __/ _` | '_ \| __| _| |_| | | | | | |_) | (_) | | | || (_| | | | | |_ |_____|_| |_| |_| .__/ \___/|_| \__\__,_|_| |_|\__| | | |_| Unlike the BVHs for the individual objects, which act as our BAS, the TAS *is not relative to the world origin*! All coordinates are the final world coordinates derived from the BAS bounding boxes, after all transformations. In theory this might mean the TAS is not 100% accurate for objects far away from origin, but I think it should do fine as it is. If we really really really need that 100% accuracy, we'll just make it relative to the origin */ class TopLevelAccelerationStructure { constructor(batchObjects) { this.debugBVH = false; this.batchObjects = []; this.bounds = new Box3(new Vector3(0, 0, 0), new Vector3(0, 0, 0)); this.batchObjects = batchObjects; this.buildBVH(); this.getBoundingBox(this.bounds); } buildBVH() { const indices = new Uint16Array(TopLevelAccelerationStructure.cubeIndices.length * this.batchObjects.length); const vertices = new Float32Array(TopLevelAccelerationStructure.CUBE_VERTS * 3 * this.batchObjects.length); let vertOffset = 0; let indexOffset = 0; for (let k = 0; k < this.batchObjects.length; k++) { const boxBounds = this.batchObjects[k].accelerationStructure.getBoundingBox(new Box3()); this.updateVertArray(boxBounds, vertOffset, vertices); indices.set(TopLevelAccelerationStructure.cubeIndices.map(val => val + vertOffset / 3), indexOffset); this.batchObjects[k].tasVertIndexStart = vertOffset / 3; this.batchObjects[k].tasVertIndexEnd = vertOffset / 3 + TopLevelAccelerationStructure.CUBE_VERTS; vertOffset += TopLevelAccelerationStructure.CUBE_VERTS * 3; indexOffset += TopLevelAccelerationStructure.cubeIndices.length; } this.accelerationStructure = new AccelerationStructure(AccelerationStructure.buildBVH(indices, vertices)); this.accelerationStructure.inputTransform = new Matrix4(); this.accelerationStructure.outputTransform = new Matrix4(); this.accelerationStructure.inputOriginTransform = new Matrix4(); this.accelerationStructure.outputOriginTransfom = new Matrix4(); if (this.debugBVH) { const mesh = new Mesh(this.accelerationStructure.geometry); mesh.layers.set(ObjectLayers.OVERLAY); mesh.geometry.boundsTree = this.accelerationStructure.bvh; this.bvhHelper = new MeshBVHVisualizer(mesh); this.bvhHelper.layers.set(ObjectLayers.OVERLAY); this.bvhHelper.children[0].layers.set(ObjectLayers.OVERLAY); this.bvhHelper.update(); } } updateVertArray(box, offset, outPositions) { outPositions[offset] = box.min.x; outPositions[offset + 1] = box.min.y; outPositions[offset + 2] = box.max.z; outPositions[offset + 3] = box.max.x; outPositions[offset + 4] = box.min.y; outPositions[offset + 5] = box.max.z; outPositions[offset + 6] = box.max.x; outPositions[offset + 7] = box.max.y; outPositions[offset + 8] = box.max.z; outPositions[offset + 9] = box.min.x; outPositions[offset + 10] = box.max.y; outPositions[offset + 11] = box.max.z; outPositions[offset + 12] = box.min.x; outPositions[offset + 13] = box.min.y; outPositions[offset + 14] = box.min.z; outPositions[offset + 15] = box.max.x; outPositions[offset + 16] = box.min.y; outPositions[offset + 17] = box.min.z; outPositions[offset + 18] = box.max.x; outPositions[offset + 19] = box.max.y; outPositions[offset + 20] = box.min.z; outPositions[offset + 21] = box.min.x; outPositions[offset + 22] = box.max.y; outPositions[offset + 23] = box.min.z; } refit() { var _a; const positions = this.accelerationStructure.geometry.attributes.position.array; // const boxBuffer: Box3 = new Box3() for (let k = 0; k < this.batchObjects.length; k++) { const start = this.batchObjects[k].tasVertIndexStart; const basBox = this.batchObjects[k].aabb; //accelerationStructure.getBoundingBox(boxBuffer) this.updateVertArray(basBox, start * 3, positions); } this.accelerationStructure.bvh.refit(); (_a = this.bvhHelper) === null || _a === void 0 ? void 0 : _a.update(); } /* Core Cast Functions */ raycast(ray, tasOnly = false, materialOrSide = FrontSide) { const res = []; const rayBuff = new Ray(); rayBuff.copy(ray); const tasResults = this.accelerationStructure.raycast(rayBuff, materialOrSide); if (!tasResults.length) return res; /** The index buffer for the bvh's geometry will *never* be undefined as it uses indexed geometry */ const indexBufferAttribute = this.accelerationStructure.geometry.index; tasResults.forEach(tasRes => { const vertIndex = indexBufferAttribute.array[tasRes.faceIndex * 3]; const batchObjectIndex = Math.trunc(vertIndex / TopLevelAccelerationStructure.CUBE_VERTS); tasRes.batchObject = this.batchObjects[batchObjectIndex]; /** If we requested only a TAS intersection, then we skip the BAS intersections */ if (!tasOnly) { rayBuff.copy(ray); const hits = this.batchObjects[batchObjectIndex].accelerationStructure.raycast(rayBuff, materialOrSide); hits.forEach(hit => { /** We're promoting the MeshIntersection to ExtendedMeshIntersection because * now we know it's corresponding batch object */ const extendedHit = hit; extendedHit.batchObject = this.batchObjects[batchObjectIndex]; res.push(extendedHit); }); } }); return tasOnly ? tasResults : res; } raycastFirst(ray, tasOnly = false, materialOrSide = FrontSide) { const rayBuff = new Ray(); rayBuff.copy(ray); let extendedHit = null; let tasRes = null; if (tasOnly) tasRes = [this.accelerationStructure.raycastFirst(rayBuff, materialOrSide)];else tasRes = this.accelerationStructure.raycast(rayBuff, materialOrSide); if (!tasRes || tasRes.length === 0) return null; tasRes.some(tasRes => { /** The index buffer for the bvh's geometry will *never* be undefined as it uses indexed geometry */ const indexBufferAttribute = this.accelerationStructure.geometry.index; const vertIndex = indexBufferAttribute.array[tasRes.faceIndex * 3]; const batchObjectIndex = Math.trunc(vertIndex / TopLevelAccelerationStructure.CUBE_VERTS); tasRes.batchObject = this.batchObjects[batchObjectIndex]; /** If we requested only a TAS intersection, then we skip the BAS intersections */ if (!tasOnly) { rayBuff.copy(ray); const hit = this.batchObjects[batchObjectIndex].accelerationStructure.raycastFirst(rayBuff, materialOrSide); /** We're promoting the MeshIntersection to ExtendedMeshIntersection because * now we know it's corresponding batch object */ extendedHit = hit; if (extendedHit) { extendedHit.batchObject = this.batchObjects[batchObjectIndex]; return true; } } return false; }); return tasOnly ? tasRes[0] : extendedHit; } shapecast(callbacks) { const wrapCallbacks = batchObject => { const newCallbacks = Object.create(null); if (callbacks.intersectsBounds) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore newCallbacks.intersectsBounds = callbacks.intersectsBounds; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore if (callbacks.intersectsTriangle) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore newCallbacks.intersectsTriangle = (triangle, triangleIndex, contained, depth) => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return callbacks.intersectsTriangle(triangle, triangleIndex, contained, depth, batchObject); }; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore newCallbacks.intersectsRange = callbacks.intersectsRange; // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore newCallbacks.traverseBoundsOrder = callbacks.traverseBoundsOrder; return newCallbacks; }; let ret = false; /** We only call intersectTASRange once for each batch object. */ const visitedObjects = {}; this.accelerationStructure.shapecast({ intersectsBounds: (box, isLeaf, score, depth, nodeIndex) => { if (callbacks.intersectsTAS) { return callbacks.intersectsTAS(box, isLeaf, score, depth, nodeIndex); } return false; }, intersectsRange: (triangleOffset, triangleCount) => { /** The index buffer for the bvh's geometry will *never* be undefined as it uses indexed geometry */ const batchObjects = new Set(); for (let k = 0; k < triangleCount; k++) { const indexBufferAttribute = this.accelerationStructure.geometry.index; const vertIndex = indexBufferAttribute.array[triangleOffset * 3 + k * 3]; const batchObjectIndex = Math.trunc(vertIndex / TopLevelAccelerationStructure.CUBE_VERTS); const batchObject = this.batchObjects[batchObjectIndex]; if (callbacks.intersectTASRange) { if (visitedObjects[batchObject.renderView.renderData.id] !== undefined) continue; const ret = callbacks.intersectTASRange(batchObject); visitedObjects[batchObject.renderView.renderData.id] = ret; if (ret) batchObjects.add(batchObject); } else { batchObjects.add(batchObject); } } /** No batch object selected, stop here */ if (!batchObjects.size) return false; for (const batchObject of batchObjects) { ret || (ret = batchObject.accelerationStructure.shapecast(wrapCallbacks(batchObject))); } /** We never test agains the TAS triangles because there is no point. Traversal stops here */ return false; } }); return ret; } closestPointToPoint(point) { return this.accelerationStructure.bvh.closestPointToPoint(point); } closestPointToPointHalfplane(point, planeNormal, fallback, target = { point: new Vector3(), distance: 0, faceIndex: 0 }, minThreshold = 0, maxThreshold = Infinity) { // early out if under minThreshold // skip checking if over maxThreshold // set minThreshold = maxThreshold to quickly check if a point is within a threshold // returns Infinity if no value found const temp = new Vector3(); const temp1 = new Vector3(); const temp2 = new Vector3(); const minThresholdSq = minThreshold * minThreshold; const maxThresholdSq = maxThreshold * maxThreshold; let closestDistanceSq = Infinity; let closestDistanceTriIndex = -1; this.accelerationStructure.bvh.shapecast({ boundsTraverseOrder: box => { temp.copy(point).clamp(box.min, box.max); return temp.distanceToSquared(point); }, // This is the default `closestPointToPoint` implementation. Keeping it intact for reference // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore intersectsBounds: (_box, _isLeaf, score) => { return score < closestDistanceSq && score < maxThresholdSq; }, intersectsRange: triangleOffset => { /** The index buffer for the bvh's geometry will *never* be undefined as it uses indexed geometry */ const indexBufferAttribute = this.accelerationStructure.geometry.index; const vertIndex = indexBufferAttribute.array[triangleOffset * 3]; const batchObjectIndex = Math.trunc(vertIndex / TopLevelAccelerationStructure.CUBE_VERTS); const batchObject = this.batchObjects[batchObjectIndex]; /** Because we cannot get a proper min distance to geometry when *Inside* the bounds of a batch object's bounds, * we just use the provided fallback value as min dist. Single meshes made of dijoint sets are particularly susceptible * to incorrect min dist calculation, unless we go inside their BAS. But we want to avoid that all cost speed reasons */ const ret = batchObject.aabb.containsPoint(point); if (ret && fallback !== undefined) { closestDistanceSq = fallback * fallback; } /** We do not interrupt traversal, there might be other closer valid geometry available */ return false; }, intersectsTriangle: (tri, triIndex) => { tri.closestPointToPoint(point, temp); const distSq = point.distanceToSquared(temp); const v = temp2.subVectors(temp, point); const planarity = planeNormal.dot(v); if (planarity >= 0 && distSq < closestDistanceSq) { temp1.copy(temp); closestDistanceSq = distSq; closestDistanceTriIndex = triIndex; } if (distSq < minThresholdSq) { return true; } else { return false; } } }); if (closestDistanceSq === Infinity) return null; const closestDistance = Math.sqrt(closestDistanceSq); if (!target.point) target.point = temp1.clone();else target.point.copy(temp1); target.distance = closestDistance, target.faceIndex = closestDistanceTriIndex; return target; } getBoundingBox(target) { this.accelerationStructure.getBoundingBox(target); return target; } } TopLevelAccelerationStructure.cubeIndices = [ // front 0, 1, 2, 2, 3, 0, // right 1, 5, 6, 6, 2, 1, // back 7, 6, 5, 5, 4, 7, // left 4, 0, 3, 3, 7, 4, // bottom 4, 5, 1, 1, 0, 4, // top 3, 2, 6, 6, 7, 3]; TopLevelAccelerationStructure.CUBE_VERTS = 8; const ray$2 = /* @__PURE__ */new Ray(); const tmpInverseMatrix$2 = /* @__PURE__ */new Matrix4(); const vecBuff0 = /* @__PURE__ */new Vector3(); const vecBuff1 = /* @__PURE__ */new Vector3(); const vecBuff2 = /* @__PURE__ */new Vector3(); const matBuff0 = /* @__PURE__ */new Matrix4(); const matBuff1 = /* @__PURE__ */new Matrix4(); const matBuff2 = /* @__PURE__ */new Matrix4(); class SpeckleBatchedText extends BatchedText { constructor() { super(...arguments); this._textObjects = {}; this._dirty = false; this.groups = []; this.materials = []; this.materialCache = {}; this.materialCacheLUT = {}; this.DEBUG_BILLBOARDS = false; this.debugMeshes = []; } get TAS() { return this.tas; } get batchObjects() { return this._batchObjects; } get batchMaterial() { return this._batchMaterial; } set dirty(value) { this._dirty = value; } get isBillboarded() { return this._batchMaterial && this._batchMaterial.defines && this._batchMaterial.defines['BILLBOARD']; } setBatchMaterial(material) { if (!(material instanceof SpeckleTextMaterial)) { Logger.error(`SpeckleBatchedText requires a SpeckleTextMaterial. Found ${material.constructor.name}`); return; } this._batchMaterial = this.getCachedMaterial(material); this.material = this._batchMaterial; this.materials.push(this._batchMaterial); } setBatchObjects(batchObjects, textObjects) { this._batchObjects = batchObjects; for (let k = 0; k < batchObjects.length; k++) { const id = batchObjects[k].renderView.renderData.id; this._textObjects[id] = textObjects[k]; } } lookupMaterial(material) { return this.materialCache[material.id] || this.materialCache[this.materialCacheLUT[material.id]]; } getCachedMaterial(material, copy = false) { let cachedMaterial = this.lookupMaterial(material); if (!cachedMaterial) { const clone = new SpeckleTextMaterial({}).copy(material).getDerivedBatchedMaterial(); this.materialCache[material.id] = clone; this.materialCacheLUT[clone.id] = material.id; cachedMaterial = clone; } else if (copy || material['needsCopy'] || cachedMaterial['needsCopy']) { Materials.fastCopy(material, cachedMaterial); } return cachedMaterial; } buildTAS() { this.tas = new TopLevelAccelerationStructure(this.batchObjects); /** We do a refit here, because for some reason the bvh library incorrectly computes the total bvh bounds at creation, * so we force a refit in order to get the proper bounds value out of it */ this.tas.refit(); /** Copy computed bounds over so that three.js doesn't freak out */ this.geometry.boundingBox = this.TAS.getBoundingBox(new Box3()); this.geometry.boundingSphere = this.geometry.boundingBox.getBoundingSphere(new Sphere()); } /** This could be made faster. BUT, as this point in time it's not worth the effort */ updateTransformsUniform() { let needsUpdate = false; for (let k = 0; k < this._batchObjects.length; k++) { const batchObject = this._batchObjects[k]; if (!(needsUpdate || (needsUpdate = batchObject.transformDirty))) continue; const textObject = this._textObjects[batchObject.renderView.renderData.id]; batchObject.transform.decompose(textObject.position, textObject.quaternion, textObject.scale); textObject.updateMatrix(); // Matrix const matrix = textObject.matrix.elements; const texture = this._dataTextures[ // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore textObject.material.isTextOutlineMaterial ? 'outline' : 'main']; const packingInfo = this._members.get(textObject); if (packingInfo) { const startIndex = packingInfo.index * 32; for (let i = 0; i < 16; i++) { this.setTexData(texture, startIndex + i, matrix[i]); } batchObject.transformDirty = false; } } if (this.tas && needsUpdate) { this.tas.refit(); this.tas.getBoundingBox(this.tas.bounds); } } updateMaterialTransformsUniform(material) { } setGradientTexture(texture) { this._batchMaterial.setGradientTexture(texture); } getBatchObjectMaterial(batchObject) { const rv = batchObject.renderView; const group = this.groups.find(value => { return rv.batchStart >= value.start && rv.batchStart + rv.batchCount <= value.count + value.start; }); if (!group) { Logger.warn(`Could not get material for ${batchObject.renderView.renderData.id}`); return null; } return this.materials[group.materialIndex]; } // converts the given BVH raycast intersection to align with the three.js raycast // structure (include object, world space distance and point). convertRaycastIntersect(hit, object, raycaster) { if (hit === null) { return null; } hit.point.applyMatrix4(object.matrixWorld); hit.distance = hit.point.distanceTo(raycaster.ray.origin); hit.object = object; if (hit.distance < raycaster.near || hit.distance > raycaster.far) { return null; } else { return hit; } } initDebugBox() { var _a; const debugBox = new Mesh(new BufferGeometry(), new MeshBasicMaterial({ wireframe: true, color: 0xff0000 })); debugBox.geometry.setAttribute('position', new Float32BufferAttribute(new Array(12), 3)); debugBox.geometry.setIndex( // prettier-ignore new Int16BufferAttribute([0, 1, 2, // First triangle: bottom-left → bottom-right → top-right 0, 2, 3 // Second triangle: bottom-left → top-right → top-left ], 1)); debugBox.layers.set(ObjectLayers.OVERLAY); (_a = this.parent) === null || _a === void 0 ? void 0 : _a.add(debugBox); return debugBox; } /** Debug purposes only */ onBeforeRender(renderer, scene, camera, geometry, material, group) { super.onBeforeRender(renderer, scene, camera, geometry, material, group); if (this.DEBUG_BILLBOARDS && this.isBillboarded) { const vertices = [new Vector3(), new Vector3(), new Vector3(), new Vector3()]; for (let k = 0; k < this._batchObjects.length; k++) { if (!this.debugMeshes[k]) { this.debugMeshes[k] = this.initDebugBox(); } const textMatrix = this._batchObjects[k].textTransform; const billboardPos = vecBuff0.set(textMatrix.elements[12], textMatrix.elements[13], textMatrix.elements[14]); const box = new Box3().copy(this._batchObjects[k].aabb); const min = vecBuff1.copy(box.min); const max = vecBuff2.copy(box.max); vertices[0].set(min.x, min.y, 0); vertices[1].set(max.x, min.y, 0); vertices[2].set(max.x, max.y, 0); vertices[3].set(min.x, max.y, 0); const billboardMat = matBuff0.makeTranslation(billboardPos.x, billboardPos.y, billboardPos.z); billboardMat.multiply(matBuff1.extractRotation(camera.matrixWorld)); // TO DO: This is out of place. Probably happening because acceleration structure has the text transform as input transform billboardMat.multiply(matBuff2.copy(textMatrix).invert()); for (let i = 0; i < vertices.length; i++) { const debugVertex = vecBuff2.copy(vertices[i]); debugVertex.applyMatrix4(billboardMat); this.debugMeshes[k].geometry.attributes.position.setXYZ(i, debugVertex.x, debugVertex.y, debugVertex.z); } this.debugMeshes[k].geometry.attributes.position.needsUpdate = true; } } } raycast(raycaster, intersects) { /** We bypass the TAS for billboarded text batches, otherwise we would need to refit it each frame */ if (this.isBillboarded) { const rayBuff = new Ray(); for (let k = 0; k < this._batchObjects.length; k++) { const textMatrix = this._batchObjects[k].textTransform; /** The billboard position is the text object's position stored in it's world matrix */ const billboardPos = vecBuff0.set(textMatrix.elements[12], textMatrix.elements[13], textMatrix.elements[14]); /** We compute the matrix that billboards the text */ const billboardMat = matBuff0.makeTranslation(billboardPos.x, billboardPos.y, billboardPos.z); billboardMat.multiply(matBuff1.extractRotation(raycaster.camera.matrixWorld)); billboardMat.multiply(matBuff2.copy(textMatrix).invert()); /** We invert it in order to apply to the ray instead of the geometry */ const invBillboardMat = matBuff0.copy(billboardMat).invert(); rayBuff.copy(raycaster.ray); rayBuff.applyMatrix4(invBillboardMat); /** Regular intersecting from here on out on a per batch object level */ if (raycaster.firstHitOnly === true) { const hit = this.convertRaycastIntersect(this._batchObjects[k].accelerationStructure.raycastFirst(rayBuff, this._batchMaterial), this, raycaster); if (hit) { hit.batchObject = this._batchObjects[k]; intersects.push(hit); break; // We break here as we only want the first hit } } else { const hits = this._batchObjects[k].accelerationStructure.raycast(rayBuff, this._batchMaterial); for (let i = 0, l = hits.length; i < l; i++) { const hit = this.convertRaycastIntersect(hits[i], this, raycaster); if (hit) { hit.batchObject = this._batchObjects[k]; intersects.push(hit); } } } } } else { if (this.tas) { if (this._batchMaterial === undefined) return; tmpInverseMatrix$2.copy(this.matrixWorld).invert(); ray$2.copy(raycaster.ray).applyMatrix4(tmpInverseMatrix$2); /** Texts are all quads. Intersecting their BAS is redundant */ const tasOnly = raycaster.intersectTASOnly || true; if (raycaster.firstHitOnly === true) { const hit = this.convertRaycastIntersect(this.tas.raycastFirst(ray$2, tasOnly, this._batchMaterial), this, raycaster); if (hit) { intersects.push(hit); } } else { const hits = this.tas.raycast(ray$2, tasOnly, this._batchMaterial); for (let i = 0, l = hits.length; i < l; i++) { const hit = this.convertRaycastIntersect(hits[i], this, raycaster); if (hit) { intersects.push(hit); } } } } else { super.raycast(raycaster, intersects); } } } /** * Update the batched geometry bounds to hold all members */ updateBounds() { var _a, _b; if (!this._dirty) return; // Update member local matrices and the overall bounds const tempBox3 = new Box3(); const bbox = ((_a = this.geometry.boundingBox) !== null && _a !== void 0 ? _a : new Box3()).makeEmpty(); this._members.forEach((_, text) => { var _a; if (text.matrixAutoUpdate) text.updateMatrix(); // ignore world matrix tempBox3.copy((_a = text.geometry.boundingBox) !== null && _a !== void 0 ? _a : new Box3()).applyMatrix4(text.matrix); bbox.union(tempBox3); }); bbox.getBoundingSphere((_b = this.geometry.boundingSphere) !== null && _b !== void 0 ? _b : new Sphere()); } /** * @param {Text} text */ addText(text) { if (!this._members.has(text)) { this._members.set(text, { index: -1, glyphCount: -1, dirty: true, needsUpdate: true }); text.addEventListener('synccomplete', this._onMemberSynced); } } setTexData(texture, index, value) { const texData = texture.image.data; if (value !== texData[index]) { texData[index] = value; texture.needsUpdate = true; } } /* Data texture packing strategy: # Common: 0-15: matrix 16-19: uTroikaTotalBounds 20-23: uTroikaClipRect 24: diffuse (color/outlineColor) 25: uTroikaFillOpacity (fillOpacity/outlineOpacity) 26: uTroikaCurveRadius 27: # Main: 28: uTroikaStrokeWidth 29: uTroikaStrokeColor 30: uTroikaStrokeOpacity # Outline: 28-29: uTroikaPositionOffset 30: uTroikaEdgeOffset 31: uTroikaBlurRadius */ /** * @override * Patched version that allows: * - Individual text opacities * - Coordinate inside gradient/ramp texture <27> */ _prepareForRender(material) { if (!this._dirty) return; this._dirty = false; const floatsPerMember = 32; const tempColor = new Color(); // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore const isOutline = material.isTextOutlineMaterial; // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore material.uniforms.uTroikaIsOutline.value = isOutline; // Resize the texture to fit in powers of 2 let texture = this._dataTextures[isOutline ? 'outline' : 'main']; const dataLength = Math.pow(2, Math.ceil(Math.log2(this._members.size * floatsPerMember))); if (!texture || dataLength !== texture.image.data.length) { // console.log(`resizing: ${dataLength}`); if (texture) texture.dispose(); const width = Math.min(dataLength / 4, 1024); texture = this._dataTextures[isOutline ? 'outline' : 'main'] = new DataTexture(new Float32Array(dataLength), width, dataLength / 4 / width, RGBAFormat, FloatType); } this._members.forEach((packingInfo, text) => { var _a; if (packingInfo.index > -1 && packingInfo.needsUpdate) { packingInfo.needsUpdate = false; const startIndex = packingInfo.index * floatsPerMember; // Matrix const matrix = text.matrix.elements; for (let i = 0; i < 16; i++) { this.setTexData(texture, startIndex + i, matrix[i]); } if (material.defines && material.defines['USE_RTE'] !== undefined) { const translation = new Vector3(matrix[12], matrix[13], matrix[14]); const translationLow = new Vector3(); const translationHigh = new Vector3(); Geometry.DoubleToHighLowVector(translation, translationLow, translationHigh); this.setTexData(texture, startIndex + 3, translationLow.x); this.setTexData(texture, startIndex + 7, translationLow.y); this.setTexData(texture, startIndex + 11, translationLow.z); } // Let the member populate the uniforms, since that does all the appropriate // logic and handling of defaults, and we'll just grab the results from there text._prepareForRender(material); const { uTroikaTotalBounds, uTroikaClipRect, uTroikaPositionOffset, uTroikaEdgeOffset, uTroikaBlurRadius, uTroikaStrokeWidth, uTroikaStrokeColor, uTroikaStrokeOpacity, uTroikaFillOpacity, uTroikaCurveRadius // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore } = material.uniforms; // Total bounds for uv for (let i = 0; i < 4; i++) { this.setTexData(texture, startIndex + 16 + i, uTroikaTotalBounds.value.getComponent(i)); } // Clip rect for (let i = 0; i < 4; i++) { this.setTexData(texture, startIndex + 20 + i, uTroikaClipRect.value.getComponent(i)); } // Color let color = isOutline ? text.outlineColor || 0 : text.color; if (color === null) color = this.color; if (color === null) color = this.material.color; if (color === null) color = 0xffffff; this.setTexData(texture, startIndex + 24, tempColor.set(color).getHex()); // Fill opacity / outline opacity this.setTexData(texture, startIndex + 25, (_a = text.material.opacity) !== null && _a !== void 0 ? _a : uTroikaFillOpacity.value); // Curve radius this.setTexData(texture, startIndex + 26, uTroikaCurveRadius.value); // Billboard height this.setTexData(texture, startIndex + 27, text.userData.gradientIndex); if (isOutline) { // Outline properties this.setTexData(texture, startIndex + 28, uTroikaPositionOffset.value.x); this.setTexData(texture, startIndex + 29, uTroikaPositionOffset.value.y); this.setTexData(texture, startIndex + 30, uTroikaEdgeOffset.value); this.setTexData(texture, startIndex + 31, uTroikaBlurRadius.value); } else { // Stroke properties this.setTexData(texture, startIndex + 28, uTroikaStrokeWidth.value); this.setTexData(texture, startIndex + 29, tempColor.set(uTroikaStrokeColor.value).getHex()); this.setTexData(texture, startIndex + 30, uTroikaStrokeOpacity.value); } } }); material.setMatrixTexture(texture); // For the non-member-specific uniforms: Text.prototype._prepareForRender.call(this, material); } } /* eslint-disable camelcase */ class BatchObject { get renderView() { return this._renderView; } get accelerationStructure() { return this._accelerationStructure; } get batchIndex() { return this._batchIndex; } get aabb() { if (this.renderView.aabb) { const box = new Box3().copy(this.renderView.aabb); box.applyMatrix4(this.transform); return box; } return new Box3(); } get localOrigin() { return this._localOrigin; } set pivot(value) { if (!value) { this.pivotValue.copy(this._localOrigin); } else this.pivotValue.copy(value); Geometry.DoubleToHighLowVector(this.pivotValue, this.pivot_Low, this.pivot_High); } set position(value) { this.transformTRS(value, this.eulerValue, this.scaleValue, this.pivotValue); } set euler(euler) { this.transformTRS(this.translation, euler, this.scaleValue, this.pivotValue); } set scale(scale) { this.transformTRS(this.translation, this.eulerValue, scale, this.pivotValue); } constructor(renderView, batchIndex) { this.quaternion = new Quaternion(); this.eulerValue = new Euler(); this.pivot_High = new Vector3(); this.pivot_Low = new Vector3(); this.translation = new Vector3(); this.scaleValue = new Vector3(1, 1, 1); this.pivotValue = new Vector3(); this.transformDirty = true; this._renderView = renderView; this._batchIndex = batchIndex; this.transform = new Matrix4().identity(); this.transformInv = new Matrix4().identity(); this._localOrigin = this._renderView.aabb.getCenter(new Vector3()); this.pivotValue.copy(this._localOrigin); Geometry.DoubleToHighLowVector(new Vector3(this._localOrigin.x, this._localOrigin.y, this._localOrigin.z), this.pivot_Low, this.pivot_High); } buildAccelerationStructure(positionOrBvh, indices) { const transform = new Matrix4().makeTranslation(this._localOrigin.x, this._localOrigin.y, this._localOrigin.z); transform.invert(); let bvh = positionOrBvh; if (!(bvh instanceof MeshBVH)) { if (!indices) { throw new Error(`Cannot build a BVH with only positions. Need indices too`); } bvh = AccelerationStructure.buildBVH(indices, positionOrBvh, DefaultBVHOptions, transform); } this._accelerationStructure = new AccelerationStructure(bvh); this._accelerationStructure.inputTransform = this.transformInv; this._accelerationStructure.outputTransform = this.transform; this._accelerationStructure.inputOriginTransform = new Matrix4().copy(transform); this._accelerationStructure.outputOriginTransfom = new Matrix4().copy(transform).invert(); } transformTRS(translation, euler, scale, pivot) { let T = BatchObject.matBuff0.identity(); let R = BatchObject.matBuff1.identity(); let S = BatchObject.matBuff2.identity(); BatchObject.eulerBuff.set(0, 0, 0, 'XYZ'); BatchObject.translationBuff.set(0, 0, 0); BatchObject.scaleBuff.set(1, 1, 1); BatchObject.pivotBuff.copy(this._localOrigin); if (translation) { T = BatchObject.matBuff0.makeTranslation(translation.x, translation.y, translation.z); BatchObject.translationBuff.set(translation.x, translation.y, translation.z); } if (euler) { BatchObject.eulerBuff.set(euler.x, euler.y, euler.z, 'XYZ'); R = BatchObject.matBuff1.makeRotationFromEuler(BatchObject.eulerBuff); this.quaternion.setFromEuler(BatchObject.eulerBuff); this.eulerValue.copy(BatchObject.eulerBuff); } if (scale) { S = BatchObject.matBuff2.makeScale(scale.x, scale.y, scale.z); BatchObject.scaleBuff.set(scale.x, scale.y, scale.z); } if (pivot) { BatchObject.pivotBuff.set(pivot.x, pivot.y, pivot.z); } this.transform.identity(); this.transform.multiply(T); this.transform.multiply(R); this.transform.multiply(S); const mat = new Matrix4().multiplyMatrices(new Matrix4().makeTranslation(BatchObject.pivotBuff.x, BatchObject.pivotBuff.y, BatchObject.pivotBuff.z), this.transform); mat.multiply(new Matrix4().makeTranslation(-BatchObject.pivotBuff.x, -BatchObject.pivotBuff.y, -BatchObject.pivotBuff.z)); this.transform.copy(mat); this.transformInv.copy(this.transform); this.transformInv.invert(); this.translation.copy(BatchObject.translationBuff); this.quaternion.setFromEuler(BatchObject.eulerBuff); this.scaleValue.copy(BatchObject.scaleBuff); this.pivotValue.copy(BatchObject.pivotBuff); Geometry.DoubleToHighLowVector(BatchObject.pivotBuff, this.pivot_Low, this.pivot_High); this.transformDirty = true; } } BatchObject.matBuff0 = new Matrix4(); BatchObject.matBuff1 = new Matrix4(); BatchObject.matBuff2 = new Matrix4(); BatchObject.eulerBuff = new Euler(); BatchObject.translationBuff = new Vector3(); BatchObject.scaleBuff = new Vector3(); BatchObject.pivotBuff = new Vector3(); class TextBatchObject extends BatchObject { constructor(renderView, batchIndex) { super(renderView, batchIndex); this.textTransform = new Matrix4(); if (renderView.renderData.geometry.transform) this.textTransform.copy(renderView.renderData.geometry.transform); /** TO DO: Not sure we should do this */ this.transform.copy(this.textTransform); this.transformInv.copy(new Matrix4().copy(this.textTransform).invert()); this.transformDirty = false; } get aabb() { return this._accelerationStructure.getBoundingBox(new Box3()); } transformTRS(translation, euler, scale, pivot) { super.transformTRS(translation, euler, scale, pivot); this.transform.multiply(this.textTransform); this.transformInv.copy(this.transform); this.transformInv.invert(); } } class DrawRanges { integrateRanges(groups, materials, ranges) { let _flatRanges = []; groups.sort((a, b) => a.start - b.start); ranges.sort((a, b) => a.offset - b.offset); const edgesForward = {}; const edgesBackwards = {}; for (let k = 0, l = groups.length - 1; k < groups.length; k++, l--) { const groupForward = groups[k]; const groupBackwards = groups[l]; edgesForward[groupForward.start] = groupForward.materialIndex; edgesBackwards[groupBackwards.start + groupBackwards.count] = groupBackwards.materialIndex; } _flatRanges = groups.map(group => { return group.start + group.count; }); _flatRanges.unshift(0); for (let k = 0; k < ranges.length; k++) { const range = ranges[k]; const r0 = range.offset; const r0Index = _flatRanges.findIndex(value => value > r0); const next = _flatRanges[r0Index]; _flatRanges.splice(r0Index, 0, r0); const r1 = range.offset + range.count; const r1Index = _flatRanges.findIndex(value => value > r1); _flatRanges.splice(r1Index, 0, r1); _flatRanges = _flatRanges.filter(value => { return !(value > r0 && value < r1); }); _flatRanges = [...new Set(_flatRanges)]; const materialIndex = materials.indexOf(range.material); edgesForward[r0] = materialIndex; edgesForward[r1] = r1 >= next ? edgesForward[next] : edgesBackwards[next]; } const drawRanges = []; let groupStart = -1; let count = 0; for (let k = 0; k < _flatRanges.length - 1; k++) { const start = _flatRanges[k]; const end = _flatRanges[k + 1]; count += end - start; const materialIndex = edgesForward[start]; const lastGroup = k === _flatRanges.length - 2; if (edgesForward[_flatRanges[k + 1]] === materialIndex || lastGroup) { if (groupStart === -1) { groupStart = start; } if (!lastGroup) continue; } drawRanges.push({ start: groupStart === -1 ? start : groupStart, count, materialIndex }); groupStart = -1; count = 0; } return drawRanges; } } /* eslint-disable @typescript-eslint/ban-ts-comment */ const INSTANCE_TEXT_TRIS_COUNT = 2; const INSTANCE_TEXT_VERT_COUNT = 4; class TextBatch { get bounds() { return this.mesh.TAS.getBoundingBox(new Box3()); } get drawCalls() { return this.groups.length; } get minDrawCalls() { return [...Array.from(new Set(this.groups.map(value => value.materialIndex)))].length; } get maxDrawCalls() { return 1; } get triCount() { return INSTANCE_TEXT_TRIS_COUNT * this.renderViews.length; } get vertCount() { return INSTANCE_TEXT_VERT_COUNT * this.renderViews.length; } get pointCount() { return 0; } get lineCount() { return 0; } get geometryType() { return GeometryType.TEXT; } get renderObject() { return this.mesh; } getCount() { return this.renderViews.length; } get materials() { return this.mesh.materials; } get groups() { return this.mesh.groups; } constructor(id, subtreeId, renderViews) { this.drawRanges = new DrawRanges(); this.id = id; this.subtreeId = subtreeId; this.renderViews = renderViews; } setBatchMaterial(material) { this.batchMaterial = material; } onUpdate(deltaTime) { } onRender(renderer) { } setVisibleRange(ranges) { } /* I hate how brittle Troika is. **Everything** you touch breaks shit * We can't actually use the 'visible' property inherited from Mesh, because it just breaks the text batch */ getVisibleRange() { if (this.mesh.groups.length === 1) { const group = this.mesh.groups[0]; if (!this.materials[group.materialIndex].visible) { return NoneBatchUpdateRange; } } return AllBatchUpdateRange; } /** TODO: Need to give this a glow up */ getOpaque() { if (Materials.isOpaque(this.batchMaterial)) return AllBatchUpdateRange; return NoneBatchUpdateRange; } /** TODO: Need to give this a glow up */ getDepth() { return this.getOpaque(); } /** TODO: Need to give this a glow up */ getTransparent() { if (Materials.isTransparent(this.batchMaterial)) return AllBatchUpdateRange; return NoneBatchUpdateRange; } /** TODO: Need to give this a glow up */ getStencil() { if (this.batchMaterial.stencilWrite === true) return AllBatchUpdateRange; return NoneBatchUpdateRange; } /** Text batches are mix between how mesh and line batches work. * - They still keep track of various draw groups each with it's material * - However that material is not really being used, but rather the properies are copied over to the batch fp32 data texture * - For filtering we cheat and use `SpeckleTextColoredMaterial` only to store the gradient/ramp texture + gradient indices for each text in the batch * - The color from the gradient/ramp texture will be used only if the gradient index > 0, otherwise the regular color will be used * - The gradient index is stored in each text object in it's `userData` and written to the 27'th float in the batch data texture, where the shader reads if from * - Even if, the **text batch does not use the materials in it's draw groups**, it emulates the behavior as if it would */ setBatchBuffers(ranges) { // console.warn(' Groups -> ', this.mesh.groups) // console.warn(' Ranges -> ', ranges) const splitRanges = []; ranges.forEach(range => { for (let k = 0; k < range.count; k++) { splitRanges.push({ offset: range.offset + k, count: 1, material: range.material, materialOptions: range.materialOptions }); } }); //@ts-ignore this.mesh._members.forEach((packingInfo, text) => { var _a, _b, _c, _d; const range = splitRanges.find(val => val.offset === packingInfo.index); if (!range) return; //@ts-ignore text.color = (_a = range.material) === null || _a === void 0 ? void 0 : _a.color; //@ts-ignore text.material.color = (_b = range.material) === null || _b === void 0 ? void 0 : _b.color; //@ts-ignore text.material.opacity = ((_c = range.material) === null || _c === void 0 ? void 0 : _c.visible) ? (_d = range.material) === null || _d === void 0 ? void 0 : _d.opacity : 0; if (range.material instanceof SpeckleTextColoredMaterial) { // Group has gradient/ramp texture color source if (range.materialOptions) { if (range.materialOptions.rampIndex !== undefined && range.materialOptions.rampWidth !== undefined) { /** The ramp indices specify the *begining* of each ramp color. When sampling with Nearest filter (since we don't want filtering) * we'll always be sampling right at the edge between texels. Most GPUs will sample consistently, but some won't and we end up with * a ton of artifacts. To avoid this, we are shifting the sampling indices so they're right on the center of each texel, so no inconsistent * sampling can occur. */ const shiftedIndex = range.materialOptions.rampIndex + 0.5 / range.materialOptions.rampWidth; /** Update the gradient indices for the individual texts * The colored material is singular, as provided by Materials */ range.material.updateGradientIndexMap(packingInfo.index, shiftedIndex); text.userData.gradientIndex = shiftedIndex; } if (range.materialOptions.rampTexture !== undefined) { range.material.setGradientTexture(range.materialOptions.rampTexture); this.mesh.setGradientTexture(range.materialOptions.rampTexture); } } else { text.userData.gradientIndex = range.material.gradientIndexMap[packingInfo.index]; this.mesh.setGradientTexture(range.material.userData.gradientRamp.value); } } else { // No gradient or ramp color source text.userData.gradientIndex = -1; } packingInfo.needsUpdate = true; }); //@ts-ignore this.mesh.dirty = true; //@ts-ignore this.mesh.sync(); } setDrawRanges(ranges) { const materials = ranges.map(val => { return val.material; }); const uniqueMaterials = [...Array.from(new Set(materials.map(value => value)))]; for (let k = 0; k < uniqueMaterials.length; k++) { if (!this.materials.includes(uniqueMaterials[k])) this.materials.push(uniqueMaterials[k]); } this.mesh.groups = this.drawRanges.integrateRanges(this.groups, this.materials, ranges); let count = 0; this.groups.forEach(value => count += value.count); if (count !== this.renderViews.length) { Logger.error(`Draw groups invalid on ${this.id}`); } this.setBatchBuffers(ranges); this.cleanMaterials(); } cleanMaterials() { const materialsInUse = [...Array.from(new Set(this.groups.map(value => this.materials[value.materialIndex])))]; let k = 0; while (this.materials.length > materialsInUse.length) { if (!materialsInUse.includes(this.materials[k])) { this.materials.splice(k, 1); this.groups.forEach(value => { if (value.materialIndex > k) value.materialIndex--; }); k = 0; continue; } k++; } } resetDrawRanges() { this.groups.length = 0; this.materials.length = 0; this.materials.push(this.batchMaterial); this.setVisibleRange([AllBatchUpdateRange]); this.setDrawRanges([{ offset: 0, count: this.renderViews.length, material: this.batchMaterial }]); } alignmentXToAnchorX(value) { switch (value) { case 0: return 'left'; case 1: return 'center'; case 2: return 'right'; default: return 'center'; } } alignmentYToAnchorY(value) { switch (value) { case 0: return 'top'; case 1: return 'middle'; case 2: return 'bottom'; default: return 'middle'; } } async buildBatch() { return new Promise(resolve => { var _a, _b; this.mesh = new SpeckleBatchedText(); const textMap = new Map(); const batchObjects = []; const textObjects = []; const box = new Box3(); let needsRTE = false; let needsBillboard = false; let textSynced = this.renderViews.length; for (let k = 0; k < this.renderViews.length; k++) { const textMeta = this.renderViews[k].renderData.geometry.metaData; /** Skip texts with no text */ if (((_a = this.renderViews[k].renderData.geometry.metaData) === null || _a === void 0 ? void 0 : _a.value) === '') { textSynced--; continue; } const text = new Text(); (_b = this.renderViews[k].renderData.geometry.transform) === null || _b === void 0 ? void 0 : _b.decompose(text.position, text.quaternion, text.scale); text.updateMatrixWorld(true); if (textMeta) { text.text = textMeta.value; text.fontSize = textMeta.height; text.maxWidth = textMeta.maxWidth !== null ? textMeta.maxWidth : Number.POSITIVE_INFINITY; text.anchorX = this.alignmentXToAnchorX(textMeta.alignmentH); text.anchorY = this.alignmentYToAnchorY(textMeta.alignmentV); } needsBillboard || (needsBillboard = textMeta !== undefined ? textMeta.screenOriented : false); text.material = new SpeckleTextMaterial({ color: 0xff0000 // control color }).getDerivedMaterial(); textMap.set(text, this.renderViews[k]); text.sync(() => { var _a; const { textRenderInfo } = text; /** We're using visibleBounds for a better fit */ const bounds = textRenderInfo.visibleBounds; // console.log('bounds -> ', bounds) const vertices = new Float32Array(12); vertices[0] = bounds[0]; vertices[1] = bounds[3]; vertices[2] = 0; vertices[3] = bounds[2]; vertices[4] = bounds[3]; vertices[5] = 0; vertices[6] = bounds[0]; vertices[7] = bounds[1]; vertices[8] = 0; vertices[9] = bounds[2]; vertices[10] = bounds[1]; vertices[11] = 0; box.setFromArray(vertices); box.applyMatrix4(this.renderViews[k].renderData.geometry.transform || new Matrix4()); needsRTE || (needsRTE = Geometry.needsRTE(box)); const geometry = text.geometry; geometry.computeBoundingBox(); const textBvh = AccelerationStructure.buildBVH((_a = geometry.index) === null || _a === void 0 ? void 0 : _a.array, vertices, DefaultBVHOptions); /** The bounds bug. it needs a refit to report the correct bounds */ textBvh.refit(); const batchObject = new TextBatchObject(this.renderViews[k], k); batchObject.buildAccelerationStructure(textBvh); batchObjects.push(batchObject); textObjects.push(text); //@ts-ignore this.mesh.addText(text); textSynced--; if (!textSynced) { if (!this.batchMaterial.defines) this.batchMaterial.defines = {}; if (needsRTE) { this.batchMaterial.defines['USE_RTE'] = ' '; } if (needsBillboard) this.batchMaterial.defines['BILLBOARD'] = ' '; this.mesh.setBatchObjects(batchObjects, textObjects); this.mesh.setBatchMaterial(this.batchMaterial); this.mesh.buildTAS(); //@ts-ignore this.mesh.uuid = this.id; //@ts-ignore this.mesh.layers.set(ObjectLayers.STREAM_CONTENT_TEXT); //@ts-ignore this.mesh.frustumCulled = false; this.mesh.dirty = true; this.groups.push({ start: 0, count: this.renderViews.length, materialIndex: 0 }); //@ts-ignore this.mesh.sync(() => { /** We assign the allocated packing info to the text render views as we'll be using the same batch indices for simplicity */ //@ts-ignore this.mesh._members.forEach((packingInfo, text) => { textMap.get(text).setBatchData(this.id, packingInfo.index, 1); packingInfo.needsUpdate = true; }); this.setBatchBuffers([{ offset: 0, count: this.renderViews.length, material: this.batchMaterial }]); resolve(); }); } }); } }); } getRenderView(index) { Logger.warn('Deprecated! Use InstancedBatchObject'); return null; } getMaterialAtIndex(index) { Logger.warn('Deprecated! Use InstancedBatchObject'); return null; } getMaterial(rv) { const group = this.groups.find(value => { return rv.batchStart >= value.start && rv.batchStart + rv.batchCount <= value.count + value.start; }); if (!group) { Logger.warn(`Could not get material for ${rv.renderData.id}`); return null; } return this.materials[group.materialIndex]; // /** Just like for lines, this isn't ideal but it's quicker */ // const material = this.materials[group.materialIndex].clone() as SpeckleTextMaterial // //@ts-ignore // this.mesh._members.forEach((packingInfo, text) => { // if (group.start === packingInfo.index) { // material.color.copy(text.material.color) // material.opacity = text.material.opacity // } // }) // return material } purge() { this.renderViews.length = 0; this.batchMaterial.dispose(); //@ts-ignore this.mesh.dispose(); } } const _inverseMatrix$1 = new Matrix4(); const _ray$1 = new Ray(); const _sphere$1 = new Sphere(); const _vTemp$1 = new Vector3(); const _vA$1 = new Vector3(); const _vB$1 = new Vector3(); const _vC$1 = new Vector3(); const _tempA$1 = new Vector3(); const _tempB$1 = new Vector3(); const _tempC$1 = new Vector3(); const _morphA$1 = new Vector3(); const _morphB$1 = new Vector3(); const _morphC$1 = new Vector3(); const _uvA$1 = new Vector2(); const _uvB$1 = new Vector2(); const _uvC$1 = new Vector2(); const _intersectionPoint$1 = new Vector3(); const _intersectionPointWorld$1 = new Vector3(); const ray$1 = /* @__PURE__ */new Ray(); const tmpInverseMatrix$1 = /* @__PURE__ */new Matrix4(); var TransformStorage; (function (TransformStorage) { TransformStorage[TransformStorage["VERTEX_TEXTURE"] = 0] = "VERTEX_TEXTURE"; TransformStorage[TransformStorage["UNIFORM_ARRAY"] = 1] = "UNIFORM_ARRAY"; })(TransformStorage || (TransformStorage = {})); class SpeckleMesh extends Mesh { get TAS() { return this.tas; } get batchObjects() { return this._batchObjects; } get batchIndex() { return this._batchIndex; } get needsRTE() { return this._needsRTE; } constructor(geometry, RTE = false) { super(geometry); this.materialCache = {}; this.materialStack = []; this.batchMaterialStack = []; this.materialCacheLUT = {}; this.transformsBuffer = undefined; this.transformsArrayUniforms = null; this._batchIndex = getNextBatchIndex(); this._needsRTE = RTE; } setBatchMaterial(material) { this.batchMaterial = this.getCachedMaterial(material); this.material = [this.batchMaterial]; } setBatchObjects(batchObjects, transformStorage) { this._batchObjects = batchObjects; this.transformStorage = transformStorage; if (this.transformStorage === TransformStorage.VERTEX_TEXTURE) { this.transformsBuffer = new Float32Array(this._batchObjects.length * 4 * 4); this.transformsTextureUniform = new DataTexture(this.transformsBuffer, this.transformsBuffer.length / 4, 1, RGBAFormat, FloatType); } else if (this.transformStorage === TransformStorage.UNIFORM_ARRAY) { this.transformsArrayUniforms = this._batchObjects.map(() => new Matrix4()); } this.updateTransformsUniform(); } setOverrideMaterial(material) { this.materialStack.push(this.material); this.material = this.getCachedMaterial(material, true); this.material.needsUpdate = true; } setOverrideBatchMaterial(material) { const overrideMaterial = this.getCachedMaterial(material, true); this.batchMaterialStack.push(overrideMaterial); const materials = this.material; for (let k = 0; k < materials.length; k++) { if (materials[k].uuid === this.batchMaterial.uuid) { materials[k] = overrideMaterial; } } } restoreBatchMaterial() { const materials = this.material; const overrideBatchMaterial = this.batchMaterialStack.pop(); if (!overrideBatchMaterial) return; for (let k = 0; k < materials.length; k++) { if (materials[k].uuid === overrideBatchMaterial.uuid) { materials[k] = this.batchMaterial; } } } lookupMaterial(material) { return this.materialCache[material.id] || this.materialCache[this.materialCacheLUT[material.id]]; } getCachedMaterial(material, copy = false) { let cachedMaterial = this.lookupMaterial(material); if (!cachedMaterial) { const clone = material.clone(); if (this._needsRTE) { if (!clone.defines) clone.defines = {}; clone.defines['USE_RTE'] = ' '; } this.materialCache[material.id] = clone; this.materialCacheLUT[clone.id] = material.id; cachedMaterial = clone; this.updateMaterialTransformsUniform(this.materialCache[material.id]); } else if (copy || material['needsCopy'] || cachedMaterial['needsCopy']) { Materials.fastCopy(material, cachedMaterial); } return cachedMaterial; } restoreMaterial() { if (this.materialStack.length > 0) this.material = this.materialStack.pop(); } updateMaterialTransformsUniform(material) { if (!Materials.isSpeckleMaterial(material)) return; if (!material.defines) material.defines = {}; material.defines['TRANSFORM_STORAGE'] = this.transformStorage; if (this.transformStorage === TransformStorage.VERTEX_TEXTURE) { material.userData.tTransforms.value = this.transformsTextureUniform; if (material.userData.objCount) material.userData.objCount.value = this._batchObjects.length; } else if (this.transformStorage === TransformStorage.UNIFORM_ARRAY) { if (!material.defines['OBJ_COUNT'] || material.defines['OBJ_COUNT'] !== this._batchObjects.length) { material.defines['OBJ_COUNT'] = this._batchObjects.length; } material.userData.uTransforms.value = this.transformsArrayUniforms; } material.needsUpdate = true; } updateTransformsUniform() { if (!this.transformsBuffer) return; let needsUpdate = false; if (this.transformStorage === TransformStorage.VERTEX_TEXTURE) { for (let k = 0; k < this._batchObjects.length; k++) { const batchObject = this._batchObjects[k]; if (!(needsUpdate || (needsUpdate = batchObject.transformDirty))) continue; const index = batchObject.batchIndex * 16; this.transformsBuffer[index] = batchObject.quaternion.x; this.transformsBuffer[index + 1] = batchObject.quaternion.y; this.transformsBuffer[index + 2] = batchObject.quaternion.z; this.transformsBuffer[index + 3] = batchObject.quaternion.w; this.transformsBuffer[index + 4] = batchObject.pivot_Low.x; this.transformsBuffer[index + 5] = batchObject.pivot_Low.y; this.transformsBuffer[index + 6] = batchObject.pivot_Low.z; this.transformsBuffer[index + 7] = batchObject.scaleValue.x; this.transformsBuffer[index + 8] = batchObject.pivot_High.x; this.transformsBuffer[index + 9] = batchObject.pivot_High.y; this.transformsBuffer[index + 10] = batchObject.pivot_High.z; this.transformsBuffer[index + 11] = batchObject.scaleValue.y; this.transformsBuffer[index + 12] = batchObject.translation.x; this.transformsBuffer[index + 13] = batchObject.translation.y; this.transformsBuffer[index + 14] = batchObject.translation.z; this.transformsBuffer[index + 15] = batchObject.scaleValue.z; batchObject.transformDirty = false; } this.transformsTextureUniform.needsUpdate = needsUpdate; } else { if (!this.transformsArrayUniforms) return; for (let k = 0; k < this._batchObjects.length; k++) { const batchObject = this._batchObjects[k]; if (!(needsUpdate || (needsUpdate = batchObject.transformDirty))) continue; this.transformsArrayUniforms[k].set(batchObject.quaternion.x, batchObject.pivot_Low.x, batchObject.pivot_High.x, batchObject.translation.x, batchObject.quaternion.y, batchObject.pivot_Low.y, batchObject.pivot_High.y, batchObject.translation.y, batchObject.quaternion.z, batchObject.pivot_Low.z, batchObject.pivot_High.z, batchObject.translation.z, batchObject.quaternion.w, batchObject.scaleValue.x, batchObject.scaleValue.y, batchObject.scaleValue.z); } } if (this.tas && needsUpdate) { this.tas.refit(); this.tas.getBoundingBox(this.tas.bounds); /** Caterint to typescript * There is no unniverse where the geomery bounding box/sphere is null at this point */ if (!this.geometry.boundingBox) this.geometry.boundingBox = new Box3(); this.geometry.boundingBox.copy(this.tas.bounds); if (!this.geometry.boundingSphere) this.geometry.boundingSphere = new Sphere(); this.geometry.boundingBox.getBoundingSphere(this.geometry.boundingSphere); } } buildTAS() { this.tas = new TopLevelAccelerationStructure(this.batchObjects); /** We do a refit here, because for some reason the bvh library incorrectly computes the total bvh bounds at creation, * so we force a refit in order to get the proper bounds value out of it */ this.tas.refit(); } getBatchObjectMaterial(batchObject) { const rv = batchObject.renderView; const group = this.geometry.groups.find(value => { return rv.batchStart >= value.start && rv.batchStart + rv.batchCount <= value.count + value.start; }); if (!Array.isArray(this.material)) { return this.material; } else { if (!group) { Logger.warn(`Could not get material for ${batchObject.renderView.renderData.id}`); return null; } return this.material[group.materialIndex]; } } // converts the given BVH raycast intersection to align with the three.js raycast // structure (include object, world space distance and point). convertRaycastIntersect(hit, object, raycaster) { if (hit === null) { return null; } hit.point.applyMatrix4(object.matrixWorld); hit.distance = hit.point.distanceTo(raycaster.ray.origin); hit.object = object; if (hit.distance < raycaster.near || hit.distance > raycaster.far) { return null; } else { return hit; } } raycast(raycaster, intersects) { if (this.tas) { if (this.batchMaterial === undefined) return; tmpInverseMatrix$1.copy(this.matrixWorld).invert(); ray$1.copy(raycaster.ray).applyMatrix4(tmpInverseMatrix$1); if (raycaster.firstHitOnly === true) { const hit = this.convertRaycastIntersect(this.tas.raycastFirst(ray$1, raycaster.intersectTASOnly, this.batchMaterial), this, raycaster); if (hit) { intersects.push(hit); } } else { const hits = this.tas.raycast(ray$1, raycaster.intersectTASOnly, this.batchMaterial); for (let i = 0, l = hits.length; i < l; i++) { const hit = this.convertRaycastIntersect(hits[i], this, raycaster); if (hit) { intersects.push(hit); } } } } else { const geometry = this.geometry; const material = this.material; const matrixWorld = this.matrixWorld; if (material === undefined) return; // Checking boundingSphere distance to ray if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); _sphere$1.copy(geometry.boundingSphere || new Sphere()); _sphere$1.applyMatrix4(matrixWorld); if (raycaster.ray.intersectsSphere(_sphere$1) === false) return; // _inverseMatrix$1.copy(matrixWorld).invert(); _ray$1.copy(raycaster.ray).applyMatrix4(_inverseMatrix$1); // Check boundingBox before continuing if (geometry.boundingBox !== null) { if (_ray$1.intersectsBox(geometry.boundingBox) === false) return; } let intersection; const index = geometry.index; /** Stored high component if RTE is being used. Regular positions otherwise */ const position = geometry.attributes.position; /** Stored low component if RTE is being used. undefined otherwise */ const positionLow = geometry.attributes['position_low']; const morphPosition = geometry.morphAttributes.position; const morphTargetsRelative = geometry.morphTargetsRelative; const uv = geometry.attributes.uv; const uv2 = geometry.attributes.uv2; const groups = geometry.groups; const drawRange = geometry.drawRange; if (index !== null) { // indexed buffer geometry if (Array.isArray(material)) { for (let i = 0, il = groups.length; i < il; i++) { const group = groups[i]; if (!group.materialIndex) { Logger.error(`Group with no material, skipping!`); continue; } const groupMaterial = material[group.materialIndex]; const start = Math.max(group.start, drawRange.start); const end = Math.min(index.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); for (let j = start, jl = end; j < jl; j += 3) { const a = index.getX(j); const b = index.getX(j + 1); const c = index.getX(j + 2); intersection = checkBufferGeometryIntersection$1(this, groupMaterial, raycaster, _ray$1, positionLow, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); if (intersection) { intersection.faceIndex = Math.floor(j / 3); // triangle number in indexed buffer semantics if (intersection.face) intersection.face.materialIndex = group.materialIndex; intersects.push(intersection); } } } } else { const start = Math.max(0, drawRange.start); const end = Math.min(index.count, drawRange.start + drawRange.count); for (let i = start, il = end; i < il; i += 3) { const a = index.getX(i); const b = index.getX(i + 1); const c = index.getX(i + 2); intersection = checkBufferGeometryIntersection$1(this, material, raycaster, _ray$1, positionLow, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); if (intersection) { intersection.faceIndex = Math.floor(i / 3); // triangle number in indexed buffer semantics intersects.push(intersection); } } } } else if (position !== undefined) { // non-indexed buffer geometry if (Array.isArray(material)) { for (let i = 0, il = groups.length; i < il; i++) { const group = groups[i]; const groupMaterial = material[group.materialIndex]; const start = Math.max(group.start, drawRange.start); const end = Math.min(position.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); for (let j = start, jl = end; j < jl; j += 3) { const a = j; const b = j + 1; const c = j + 2; intersection = checkBufferGeometryIntersection$1(this, groupMaterial, raycaster, _ray$1, positionLow, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); if (intersection) { intersection.faceIndex = Math.floor(j / 3); // triangle number in non-indexed buffer semantics if (intersection.face) intersection.face.materialIndex = group.materialIndex; intersects.push(intersection); } } } } else { const start = Math.max(0, drawRange.start); const end = Math.min(position.count, drawRange.start + drawRange.count); for (let i = start, il = end; i < il; i += 3) { const a = i; const b = i + 1; const c = i + 2; intersection = checkBufferGeometryIntersection$1(this, material, raycaster, _ray$1, positionLow, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); if (intersection) { intersection.faceIndex = Math.floor(i / 3); // triangle number in non-indexed buffer semantics intersects.push(intersection); } } } } } } } SpeckleMesh.MeshBatchNumber = 0; function checkIntersection$1(object, material, raycaster, ray, pA, pB, pC, point) { let intersect; if (material.side === BackSide) { intersect = ray.intersectTriangle(pC, pB, pA, true, point); } else { intersect = ray.intersectTriangle(pA, pB, pC, material.side !== DoubleSide, point); } if (intersect === null) return null; _intersectionPointWorld$1.copy(point); _intersectionPointWorld$1.applyMatrix4(object.matrixWorld); const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld$1); if (distance < raycaster.near || distance > raycaster.far) return null; return { distance, point: _intersectionPointWorld$1.clone(), object, uv: undefined, uv2: undefined, face: undefined }; } /** If the geometry is non double->2floats encoded, the `positionHigh` argument will actually * hold the default `position` attribute values */ function checkBufferGeometryIntersection$1(object, material, raycaster, ray, positionLow, positionHigh, morphPosition, morphTargetsRelative, uv, uv2, a, b, c) { _vA$1.fromBufferAttribute(positionHigh, a); _vB$1.fromBufferAttribute(positionHigh, b); _vC$1.fromBufferAttribute(positionHigh, c); if (positionLow) { _vA$1.add(_vTemp$1.fromBufferAttribute(positionLow, a)); _vB$1.add(_vTemp$1.fromBufferAttribute(positionLow, b)); _vC$1.add(_vTemp$1.fromBufferAttribute(positionLow, c)); } const morphInfluences = object.morphTargetInfluences; if (morphPosition && morphInfluences) { _morphA$1.set(0, 0, 0); _morphB$1.set(0, 0, 0); _morphC$1.set(0, 0, 0); for (let i = 0, il = morphPosition.length; i < il; i++) { const influence = morphInfluences[i]; const morphAttribute = morphPosition[i]; if (influence === 0) continue; _tempA$1.fromBufferAttribute(morphAttribute, a); _tempB$1.fromBufferAttribute(morphAttribute, b); _tempC$1.fromBufferAttribute(morphAttribute, c); if (morphTargetsRelative) { _morphA$1.addScaledVector(_tempA$1, influence); _morphB$1.addScaledVector(_tempB$1, influence); _morphC$1.addScaledVector(_tempC$1, influence); } else { _morphA$1.addScaledVector(_tempA$1.sub(_vA$1), influence); _morphB$1.addScaledVector(_tempB$1.sub(_vB$1), influence); _morphC$1.addScaledVector(_tempC$1.sub(_vC$1), influence); } } _vA$1.add(_morphA$1); _vB$1.add(_morphB$1); _vC$1.add(_morphC$1); } if (object.isSkinnedMesh) { object.boneTransform(a, _vA$1); object.boneTransform(b, _vB$1); object.boneTransform(c, _vC$1); } const intersection = checkIntersection$1(object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint$1); if (intersection) { if (uv) { _uvA$1.fromBufferAttribute(uv, a); _uvB$1.fromBufferAttribute(uv, b); _uvC$1.fromBufferAttribute(uv, c); intersection.uv = Triangle.getUV(_intersectionPoint$1, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); } if (uv2) { _uvA$1.fromBufferAttribute(uv2, a); _uvB$1.fromBufferAttribute(uv2, b); _uvC$1.fromBufferAttribute(uv2, c); intersection.uv2 = Triangle.getUV(_intersectionPoint$1, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); } const face = { a, b, c, normal: new Vector3(), materialIndex: 0 }; Triangle.getNormal(_vA$1, _vB$1, _vC$1, face.normal); intersection.face = face; } return intersection; } const speckleDepthVert = /* glsl */` #include #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; uniform mat4 rteModelViewMatrix; #endif #ifdef TRANSFORM_STORAGE attribute float objIndex; #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif #ifdef LINEAR_DEPTH varying vec4 vViewPosition; #endif #include #include #include #include #include #include // This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible. // Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for // depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1. varying vec2 vHighPrecisionZW; #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } vec3 rotate_vertex_position(vec3 position, vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif void main() { #include #include #ifdef USE_DISPLACEMENTMAP #include #include #include #endif #include #include #include #include //#include // EDITED CHUNK #ifdef TRANSFORM_STORAGE vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif #ifdef USE_RTE mvPosition = rteModelViewMatrix * mvPosition; #else mvPosition = modelViewMatrix * mvPosition; #endif #ifdef LINEAR_DEPTH vViewPosition = mvPosition; #endif gl_Position = projectionMatrix * mvPosition; #include // #include #if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; #endif vHighPrecisionZW = gl_Position.zw; } `; const speckleDepthFrag = /* glsl */` #if DEPTH_PACKING == 3200 uniform float opacity; #endif #ifdef LINEAR_DEPTH varying vec4 vViewPosition; uniform float near; uniform float far; #endif #include #include #include #include #include #include #include #include varying vec2 vHighPrecisionZW; void main() { #include vec4 diffuseColor = vec4( 1.0 ); #if DEPTH_PACKING == 3200 diffuseColor.a = opacity; #endif #include #include // #include #ifdef USE_ALPHATEST if ( diffuseColor.a < alphaTest ) discard; /** This is a workaround for rejecting shadows for certain materials, since three.js gave me no choice*/ #ifdef ALPHATEST_REJECTION if (alphaTest > 0. ) discard; #endif #endif #include // Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values. #ifdef LINEAR_DEPTH /** View z is negative moving away from the camera */ gl_FragColor = packDepthToRGBA((vViewPosition.z + near) / (near - far)); #else float fragCoordZ = (0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5); #if DEPTH_PACKING == 3200 gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); #elif DEPTH_PACKING == 3201 gl_FragColor = packDepthToRGBA( fragCoordZ ); #endif #endif } `; /* eslint-disable camelcase */ class SpeckleDepthMaterial extends ExtendedMeshDepthMaterial { get vertexProgram() { return speckleDepthVert; } get fragmentProgram() { return speckleDepthFrag; } get baseUniforms() { return ShaderLib.depth.uniforms; } get uniformsDef() { return { uViewer_high: new Vector3(), uViewer_low: new Vector3(), rteModelViewMatrix: new Matrix4(), near: 0, far: 0, uTransforms: [new Matrix4()], tTransforms: null, objCount: 1 }; } constructor(parameters, defines = []) { super(parameters); this.init(defines); } /** We need a unique key per program */ customProgramCacheKey() { return this.constructor.name; } copy(source) { super.copy(source); this.copyFrom(source); return this; } fastCopy(from, to) { super.fastCopy(from, to); to.userData.near.value = from.userData.near.value; to.userData.far.value = from.userData.far.value; } /** Another note here, this will NOT get called by three when rendering shadowmaps. We update the uniforms manually * inside SpeckleRenderer for shadowmaps */ onBeforeRender(_this, _scene, _camera, _geometry, object) { if (this.defines && this.defines['USE_RTE']) { object.modelViewMatrix.copy(_this.RTEBuffers.rteViewModelMatrix); this.userData.uViewer_low.value.copy(_this.RTEBuffers.viewerLow); this.userData.uViewer_high.value.copy(_this.RTEBuffers.viewerHigh); this.userData.rteModelViewMatrix.value.copy(_this.RTEBuffers.rteViewModelMatrix); this.needsUpdate = true; } } } class ExtendedInstancedMesh extends InstancedMesh { constructor(geometry, material, count, batchIndex) { super(geometry, material, count); this._batchIndex = batchIndex; } get batchIndex() { return this._batchIndex; } } const _inverseMatrix = new Matrix4(); const _ray = new Ray(); const _sphere = new Sphere(); const _vTemp = new Vector3(); const _vA = new Vector3(); const _vB = new Vector3(); const _vC = new Vector3(); const _tempA = new Vector3(); const _tempB = new Vector3(); const _tempC = new Vector3(); const _morphA = new Vector3(); const _morphB = new Vector3(); const _morphC = new Vector3(); const _uvA = new Vector2(); const _uvB = new Vector2(); const _uvC = new Vector2(); const _intersectionPoint = new Vector3(); const _intersectionPointWorld = new Vector3(); const ray = /* @__PURE__ */new Ray(); const tmpInverseMatrix = /* @__PURE__ */new Matrix4(); class SpeckleInstancedMesh extends Group { get TAS() { return this.tas; } get batchObjects() { return this._batchObjects; } get needsRTE() { return this._needsRTE; } constructor(geometry, RTE = false) { super(); this.materialCache = {}; this.materialStack = []; this.batchMaterialStack = []; this.materialCacheLUT = {}; this.groups = []; this.materials = []; this.instanceGeometry = undefined; this.instances = []; this.instanceGeometry = geometry; this.userData.raycastChildren = false; this._needsRTE = RTE; } setBatchMaterial(material) { this.batchMaterial = material; this.materialCache[material.id] = material; this.materials.push(this.batchMaterial); } setBatchObjects(batchObjects) { this._batchObjects = batchObjects; } setOverrideMaterial(material) { const saveMaterials = []; for (let k = 0; k < this.instances.length; k++) { saveMaterials.push(this.instances[k].material); } this.materialStack.push(saveMaterials); const overrideMaterial = this.getCachedMaterial(material, true); this.instances.forEach(value => value.material = overrideMaterial); } setOverrideBatchMaterial(material) { const overrideMaterial = this.getCachedMaterial(material, true); this.batchMaterialStack.push(overrideMaterial); const materials = this.materials; for (let k = 0; k < materials.length; k++) { if (materials[k].uuid === this.batchMaterial.uuid) { materials[k] = overrideMaterial; } } this.instances.forEach(value => { if (value.material.uuid === this.batchMaterial.uuid) value.material = overrideMaterial; }); } restoreBatchMaterial() { const overrideBatchMaterial = this.batchMaterialStack.pop(); if (!overrideBatchMaterial) return; for (let k = 0; k < this.materials.length; k++) { if (this.materials[k].uuid === overrideBatchMaterial.uuid) { this.materials[k] = this.batchMaterial; } } this.instances.forEach(value => { if (value.material.uuid === overrideBatchMaterial.uuid) value.material = this.batchMaterial; }); } lookupMaterial(material) { return this.materialCache[material.id] || this.materialCache[this.materialCacheLUT[material.id]]; } getCachedMaterial(material, copy = false) { let cachedMaterial = this.lookupMaterial(material); if (!cachedMaterial) { const clone = material.clone(); this.materialCache[material.id] = clone; this.materialCacheLUT[clone.id] = material.id; cachedMaterial = clone; this.updateMaterialTransformsUniform(this.materialCache[material.id]); } else if (copy || material['needsCopy'] || cachedMaterial['needsCopy']) { Materials.fastCopy(material, cachedMaterial); } return cachedMaterial; } restoreMaterial() { if (this.materialStack.length > 0) { const restoreMaterials = this.materialStack.pop(); for (let k = 0; k < restoreMaterials.length; k++) { this.instances[k].material = restoreMaterials[k]; } } } buildTAS() { this.tas = new TopLevelAccelerationStructure(this.batchObjects); /** We do a refit here, because for some reason the bvh library incorrectly computes the total bvh bounds at creation, * so we force a refit in order to get the proper bounds value out of it */ this.tas.refit(); } updateDrawGroups(transformBuffer, gradientBuffer, objectIndexBuffer) { this.instances.forEach(value => { var _a; this.remove(value); (_a = value.customDepthMaterial) === null || _a === void 0 ? void 0 : _a.dispose(); value.dispose(); }); this.instances.length = 0; for (let k = 0; k < this.groups.length; k++) { const materialIndex = this.groups[k].materialIndex; const material = this.materials[materialIndex]; const group = new ExtendedInstancedMesh(this.getInstanceGeometryShallowCopy(), material, 0, getNextBatchIndex()); group.instanceMatrix = new InstancedBufferAttribute(transformBuffer.subarray(this.groups[k].start, this.groups[k].start + this.groups[k].count), INSTANCE_TRANSFORM_BUFFER_STRIDE); group.geometry.setAttribute('gradientIndex', new InstancedBufferAttribute(gradientBuffer.subarray(this.groups[k].start / INSTANCE_TRANSFORM_BUFFER_STRIDE, (this.groups[k].start + this.groups[k].count) / INSTANCE_TRANSFORM_BUFFER_STRIDE), INSTANCE_GRADIENT_BUFFER_STRIDE)); if (objectIndexBuffer) group.geometry.setAttribute('objIndex', new InstancedBufferAttribute(objectIndexBuffer.subarray(this.groups[k].start / INSTANCE_TRANSFORM_BUFFER_STRIDE, (this.groups[k].start + this.groups[k].count) / INSTANCE_TRANSFORM_BUFFER_STRIDE), INSTANCE_GRADIENT_BUFFER_STRIDE)); group.count = this.groups[k].count / INSTANCE_TRANSFORM_BUFFER_STRIDE; group.instanceMatrix.needsUpdate = true; group.layers.set(ObjectLayers.STREAM_CONTENT_MESH); group.frustumCulled = false; group.customDepthMaterial = new SpeckleDepthMaterial({ depthPacking: RGBADepthPacking }, ['ALPHATEST_REJECTION']); group.castShadow = !material.transparent; group.receiveShadow = !material.transparent; this.instances.push(group); this.add(group); } this.tas.refit(); this.tas.getBoundingBox(this.tas.bounds); } updateTransformsUniform() { let needsUpdate = false; for (let k = 0; k < this._batchObjects.length; k++) { const batchObject = this._batchObjects[k]; if (!(needsUpdate || (needsUpdate = batchObject.transformDirty))) continue; const rv = batchObject.renderView; const group = this.groups.find(value => { return rv.batchStart >= value.start && rv.batchStart + rv.batchCount <= value.count + value.start; }); if (group) { const instance = this.instances[this.groups.indexOf(group)]; instance.setMatrixAt((rv.batchStart - group.start) / INSTANCE_TRANSFORM_BUFFER_STRIDE, batchObject.transform); instance.instanceMatrix.needsUpdate = true; } batchObject.transformDirty = false; } if (this.tas && needsUpdate) { this.tas.refit(); this.tas.getBoundingBox(this.tas.bounds); } } updateMaterialTransformsUniform(material) { } getBatchObjectMaterial(batchObject) { const rv = batchObject.renderView; const group = this.groups.find(value => { return rv.batchStart >= value.start && rv.batchStart + rv.batchCount <= value.count + value.start; }); if (!group) { Logger.warn(`Could not get material for ${batchObject.renderView.renderData.id}`); return null; } return this.materials[group.materialIndex]; } /** Three's 'clone' and 'copy' from geometry and buffer attributes * create duplicates of arrays and we don't want that. Most of the * buffer attributes need to be shared to avoid redundancy */ getInstanceGeometryShallowCopy() { var _a, _b; const geometry = new BufferGeometry(); for (const attr in (_a = this.instanceGeometry) === null || _a === void 0 ? void 0 : _a.attributes) { geometry.setAttribute(attr, this.instanceGeometry.attributes[attr]); } geometry.setIndex((_b = this.instanceGeometry) === null || _b === void 0 ? void 0 : _b.index); return geometry; } // converts the given BVH raycast intersection to align with the three.js raycast // structure (include object, world space distance and point). convertRaycastIntersect(hit, object, raycaster) { if (hit === null) { return null; } hit.point.applyMatrix4(object.matrixWorld); hit.distance = hit.point.distanceTo(raycaster.ray.origin); hit.object = object; if (hit.distance < raycaster.near || hit.distance > raycaster.far) { return null; } else { return hit; } } raycast(raycaster, intersects) { if (this.tas) { if (!this.batchMaterial) return; tmpInverseMatrix.copy(this.matrixWorld).invert(); ray.copy(raycaster.ray).applyMatrix4(tmpInverseMatrix); if (raycaster.firstHitOnly === true) { const hit = this.convertRaycastIntersect(this.tas.raycastFirst(ray, raycaster.intersectTASOnly, this.batchMaterial), this, raycaster); if (hit) { intersects.push(hit); } } else { const hits = this.tas.raycast(ray, raycaster.intersectTASOnly, this.batchMaterial); for (let i = 0, l = hits.length; i < l; i++) { const hit = this.convertRaycastIntersect(hits[i], this, raycaster); if (hit) { intersects.push(hit); } } } } else { const geometry = this.instanceGeometry; const material = this.materials[0]; const matrixWorld = this.matrixWorld; if (material === undefined) return; if (geometry === undefined) return; // Checking boundingSphere distance to ray if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); _sphere.copy(geometry.boundingSphere || new Sphere()); _sphere.applyMatrix4(matrixWorld); if (raycaster.ray.intersectsSphere(_sphere) === false) return; // _inverseMatrix.copy(matrixWorld).invert(); _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix); // Check boundingBox before continuing if (geometry.boundingBox !== null) { if (_ray.intersectsBox(geometry.boundingBox) === false) return; } let intersection; const index = geometry.index; /** Stored high component if RTE is being used. Regular positions otherwise */ const position = geometry.attributes.position; /** Stored low component if RTE is being used. undefined otherwise */ const positionLow = geometry.attributes['position_low']; const morphPosition = geometry.morphAttributes.position; const morphTargetsRelative = geometry.morphTargetsRelative; const uv = geometry.attributes.uv; const uv2 = geometry.attributes.uv2; const groups = geometry.groups; const drawRange = geometry.drawRange; if (index !== null) { // indexed buffer geometry if (Array.isArray(material)) { for (let i = 0, il = groups.length; i < il; i++) { const group = groups[i]; if (!group.materialIndex) { Logger.error(`Group with no material, skipping!`); continue; } const groupMaterial = material[group.materialIndex]; const start = Math.max(group.start, drawRange.start); const end = Math.min(index.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); for (let j = start, jl = end; j < jl; j += 3) { const a = index.getX(j); const b = index.getX(j + 1); const c = index.getX(j + 2); intersection = checkBufferGeometryIntersection(this, groupMaterial, raycaster, _ray, positionLow, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); if (intersection) { intersection.faceIndex = Math.floor(j / 3); // triangle number in indexed buffer semantics if (intersection.face) intersection.face.materialIndex = group.materialIndex; intersects.push(intersection); } } } } else { const start = Math.max(0, drawRange.start); const end = Math.min(index.count, drawRange.start + drawRange.count); for (let i = start, il = end; i < il; i += 3) { const a = index.getX(i); const b = index.getX(i + 1); const c = index.getX(i + 2); intersection = checkBufferGeometryIntersection(this, material, raycaster, _ray, positionLow, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); if (intersection) { intersection.faceIndex = Math.floor(i / 3); // triangle number in indexed buffer semantics intersects.push(intersection); } } } } else if (position !== undefined) { // non-indexed buffer geometry if (Array.isArray(material)) { for (let i = 0, il = groups.length; i < il; i++) { const group = groups[i]; if (!group.materialIndex) { Logger.error(`Group with no material, skipping!`); continue; } const groupMaterial = material[group.materialIndex]; const start = Math.max(group.start, drawRange.start); const end = Math.min(position.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); for (let j = start, jl = end; j < jl; j += 3) { const a = j; const b = j + 1; const c = j + 2; intersection = checkBufferGeometryIntersection(this, groupMaterial, raycaster, _ray, positionLow, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); if (intersection) { intersection.faceIndex = Math.floor(j / 3); // triangle number in non-indexed buffer semantics if (intersection.face) intersection.face.materialIndex = group.materialIndex; intersects.push(intersection); } } } } else { const start = Math.max(0, drawRange.start); const end = Math.min(position.count, drawRange.start + drawRange.count); for (let i = start, il = end; i < il; i += 3) { const a = i; const b = i + 1; const c = i + 2; intersection = checkBufferGeometryIntersection(this, material, raycaster, _ray, positionLow, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); if (intersection) { intersection.faceIndex = Math.floor(i / 3); // triangle number in non-indexed buffer semantics intersects.push(intersection); } } } } } } } SpeckleInstancedMesh.MeshBatchNumber = 0; function checkIntersection(object, material, raycaster, ray, pA, pB, pC, point) { let intersect; if (material.side === BackSide) { intersect = ray.intersectTriangle(pC, pB, pA, true, point); } else { intersect = ray.intersectTriangle(pA, pB, pC, material.side !== DoubleSide, point); } if (intersect === null) return null; _intersectionPointWorld.copy(point); _intersectionPointWorld.applyMatrix4(object.matrixWorld); const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld); if (distance < raycaster.near || distance > raycaster.far) return null; return { distance, point: _intersectionPointWorld.clone(), object, uv: undefined, uv2: undefined, face: undefined, faceIndex: undefined }; } /** If the geometry is non double->2floats encoded, the `positionHigh` argument will actually * hold the default `position` attribute values */ function checkBufferGeometryIntersection(object, material, raycaster, ray, positionLow, positionHigh, morphPosition, morphTargetsRelative, uv, uv2, a, b, c) { _vA.fromBufferAttribute(positionHigh, a); _vB.fromBufferAttribute(positionHigh, b); _vC.fromBufferAttribute(positionHigh, c); if (positionLow) { _vA.add(_vTemp.fromBufferAttribute(positionLow, a)); _vB.add(_vTemp.fromBufferAttribute(positionLow, b)); _vC.add(_vTemp.fromBufferAttribute(positionLow, c)); } const morphInfluences = object.morphTargetInfluences; if (morphPosition && morphInfluences) { _morphA.set(0, 0, 0); _morphB.set(0, 0, 0); _morphC.set(0, 0, 0); for (let i = 0, il = morphPosition.length; i < il; i++) { const influence = morphInfluences[i]; const morphAttribute = morphPosition[i]; if (influence === 0) continue; _tempA.fromBufferAttribute(morphAttribute, a); _tempB.fromBufferAttribute(morphAttribute, b); _tempC.fromBufferAttribute(morphAttribute, c); if (morphTargetsRelative) { _morphA.addScaledVector(_tempA, influence); _morphB.addScaledVector(_tempB, influence); _morphC.addScaledVector(_tempC, influence); } else { _morphA.addScaledVector(_tempA.sub(_vA), influence); _morphB.addScaledVector(_tempB.sub(_vB), influence); _morphC.addScaledVector(_tempC.sub(_vC), influence); } } _vA.add(_morphA); _vB.add(_morphB); _vC.add(_morphC); } if (object.isSkinnedMesh) { object.boneTransform(a, _vA); object.boneTransform(b, _vB); object.boneTransform(c, _vC); } const intersection = checkIntersection(object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint); if (intersection) { if (uv) { _uvA.fromBufferAttribute(uv, a); _uvB.fromBufferAttribute(uv, b); _uvC.fromBufferAttribute(uv, c); intersection.uv = Triangle.getUV(_intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2()); } if (uv2) { _uvA.fromBufferAttribute(uv2, a); _uvB.fromBufferAttribute(uv2, b); _uvC.fromBufferAttribute(uv2, c); intersection.uv2 = Triangle.getUV(_intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2()); } const face = { a, b, c, normal: new Vector3(), materialIndex: 0 }; Triangle.getNormal(_vA, _vB, _vC, face.normal); intersection.face = face; } return intersection; } class InstancedBatchObject extends BatchObject { constructor(renderView, batchIndex) { super(renderView, batchIndex); this.instanceTransform = new Matrix4(); if (renderView.renderData.geometry.transform) this.instanceTransform.copy(renderView.renderData.geometry.transform); this.transform.copy(this.instanceTransform); this.transformInv.copy(new Matrix4().copy(this.instanceTransform).invert()); this.transformDirty = false; } transformTRS(translation, euler, scale, pivot) { super.transformTRS(translation, euler, scale, pivot); this.transform.multiply(this.instanceTransform); this.transformInv.copy(this.transform); this.transformInv.invert(); } } class InstancedMeshBatch { get bounds() { return this.mesh.TAS.getBoundingBox(new Box3()); } get drawCalls() { return this.groups.length; } get minDrawCalls() { return [...Array.from(new Set(this.groups.map(value => value.materialIndex)))].length; } get maxDrawCalls() { return 1; } get triCount() { /** Catering to typescript * There is no unniverse where the geometry is non-indexed. We're **explicitly** setting the index at creation time */ const indexCount = this.geometry.index ? this.geometry.index.count : 0; return indexCount / 3 * this.renderViews.length; } get vertCount() { return this.geometry.attributes.position.count * this.renderViews.length; } get pointCount() { return 0; } get lineCount() { return 0; } get geometryType() { return GeometryType.MESH; } get renderObject() { return this.mesh; } getCount() { return this.renderViews.length * 16; } get materials() { return this.mesh.materials; } get groups() { return this.mesh.groups; } constructor(id, subtreeId, renderViews, webGL2) { this.drawRanges = new DrawRanges(); this.transformBufferIndex = 0; this.needsShuffle = false; this.id = id; this.subtreeId = subtreeId; this.renderViews = renderViews; if (!webGL2) this.instanceObjectIdBuffer = new Float32Array(this.renderViews.length); } setBatchMaterial(material) { this.batchMaterial = material; } onUpdate(deltaTime) { if (this.needsShuffle) { this.shuffleDrawGroups(); this.needsShuffle = false; } } onRender(renderer) { } /** Note: You can only set visibility on ranges that exist as draw groups! */ setVisibleRange(ranges) { /** Entire batch needs to NOT be drawn */ if (ranges.length === 1 && isNoneBatchUpdateRange(ranges[0])) { this.mesh.children.forEach(instance => instance.visible = false); return; } /** Entire batch needs to BE drawn */ if (ranges.length === 1 && ranges[0] === AllBatchUpdateRange) { this.mesh.children.forEach(instance => instance.visible = true); return; } this.mesh.children.forEach(instance => instance.visible = false); ranges.forEach(range => { const foundInstance = this.groups.find(group => range.offset === group.start && range.offset + range.count === group.start + group.count); if (foundInstance) { const instanceIndex = this.groups.indexOf(foundInstance); if (instanceIndex !== -1) this.mesh.children[instanceIndex].visible = true; } }); } getVisibleRange() { if (!this.mesh.children[0].visible) return NoneBatchUpdateRange; for (let k = 0; k < this.mesh.children.length; k++) { if (!this.mesh.children[k].visible) { return { offset: 0, count: k * 16 }; } } return AllBatchUpdateRange; } getOpaque() { /** If there is any transparent or hidden group return the update range up to it's offset */ const transparentOrHiddenGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return Materials.isTransparent(this.materials[value.materialIndex]) || this.materials[value.materialIndex].visible === false; }); if (transparentOrHiddenGroup) { return { offset: 0, count: transparentOrHiddenGroup.start }; } /** Entire batch is opaque */ return AllBatchUpdateRange; } getDepth() { /** If there is any transparent or hidden group return the update range up to it's offset */ const transparentOrHiddenGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return Materials.isTransparent(this.materials[value.materialIndex]) || this.materials[value.materialIndex].visible === false || this.materials[value.materialIndex].colorWrite === false; }); if (transparentOrHiddenGroup) { return { offset: 0, count: transparentOrHiddenGroup.start }; } /** Entire batch is opaque */ return AllBatchUpdateRange; } getTransparent() { /** Look for a transparent group */ const transparentGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return Materials.isTransparent(this.materials[value.materialIndex]); }); /** Look for a hidden group */ const hiddenGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return this.materials[value.materialIndex].visible === false; }); /** If there is a transparent group return it's range */ if (transparentGroup) { const offset = transparentGroup.start; const count = hiddenGroup !== undefined ? hiddenGroup.start - transparentGroup.start : this.getCount() - transparentGroup.start; if (offset === 0 && count === this.getCount()) return AllBatchUpdateRange; return { offset, count }; } /** Entire batch is not transparent */ return NoneBatchUpdateRange; } getStencil() { /** If there is a single group and it's material writes to stencil, return all */ if (this.groups.length === 1) { if (this.materials[0].stencilWrite === true) return AllBatchUpdateRange; } const stencilGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return this.materials[value.materialIndex].stencilWrite === true; }); if (stencilGroup) { return { offset: stencilGroup.start, count: stencilGroup.count }; } /** No stencil group */ return NoneBatchUpdateRange; } setBatchBuffers(ranges) { for (let k = 0; k < ranges.length; k++) { const range = ranges[k]; if (range.materialOptions) { if (range.materialOptions.rampIndex !== undefined && range.materialOptions.rampWidth !== undefined) { const start = ranges[k].offset; const count = ranges[k].count; /** The ramp indices specify the *begining* of each ramp color. When sampling with Nearest filter (since we don't want filtering) * we'll always be sampling right at the edge between texels. Most GPUs will sample consistently, but some won't and we end up with * a ton of artifacts. To avoid this, we are shifting the sampling indices so they're right on the center of each texel, so no inconsistent * sampling can occur. */ const shiftedIndex = range.materialOptions.rampIndex + 0.5 / range.materialOptions.rampWidth; this.updateGradientIndexBufferData(start / 16, (start + count) / 16, shiftedIndex); } /** We need to update the texture here, because each batch uses it's own clone for any material we use on it * because otherwise three.js won't properly update our custom uniforms */ if (range.materialOptions.rampTexture !== undefined) { if (range.material instanceof SpeckleStandardColoredMaterial) { range.material.setGradientTexture(range.materialOptions.rampTexture); } } } } } setDrawRanges(ranges) { ranges.forEach(value => { if (value.material) { value.material = this.mesh.getCachedMaterial(value.material); } }); const materials = ranges.map(val => { return val.material; }); const uniqueMaterials = [...Array.from(new Set(materials.map(value => value)))]; for (let k = 0; k < uniqueMaterials.length; k++) { if (!this.materials.includes(uniqueMaterials[k])) this.materials.push(uniqueMaterials[k]); } this.mesh.groups = this.drawRanges.integrateRanges(this.groups, this.materials, ranges); let count = 0; this.groups.forEach(value => count += value.count); if (count !== this.renderViews.length * 16) { Logger.error(`Draw groups invalid on ${this.id}`); } this.setBatchBuffers(ranges); this.cleanMaterials(); const transparentDepthHiddenGroup = this.groups.find(value => this.materials[value.materialIndex].transparent === true || this.materials[value.materialIndex].visible === false || this.materials[value.materialIndex].colorWrite === false); /** We shuffle only when above a certain fragmentation threshold. We don't want to be shuffling every single time */ if (this.drawCalls > this.maxDrawCalls) { this.needsShuffle = true; } else if (transparentDepthHiddenGroup) { if (this.groups.length === 1) this.needsShuffle = true;else { for (let k = this.groups.indexOf(transparentDepthHiddenGroup); k < this.groups.length; k++) { const material = this.materials[this.groups[k].materialIndex]; if (material.visible) { if (!material.transparent || material.colorWrite) { this.needsShuffle = true; break; } } } } } else this.mesh.updateDrawGroups(this.getCurrentTransformBuffer(), this.getCurrentGradientBuffer(), this.getCurrentObjectIndexBuffer()); } cleanMaterials() { const materialsInUse = [...Array.from(new Set(this.groups.map(value => this.materials[value.materialIndex])))]; let k = 0; while (this.materials.length > materialsInUse.length) { if (!materialsInUse.includes(this.materials[k])) { this.materials.splice(k, 1); this.groups.forEach(value => { if (value.materialIndex > k) value.materialIndex--; }); k = 0; continue; } k++; } } shuffleDrawGroups() { const groups = this.groups.slice(); groups.sort((a, b) => { const materialA = this.materials[a.materialIndex]; const materialB = this.materials[b.materialIndex]; const visibleOrder = +materialB.visible + +materialB.colorWrite - (+materialA.visible + +materialA.colorWrite); const transparentOrder = +materialA.transparent - +materialB.transparent; if (visibleOrder !== 0) return visibleOrder; return transparentOrder; }); const materialOrder = []; groups.reduce((previousValue, currentValue) => { if (currentValue.materialIndex !== undefined) { if (previousValue.indexOf(currentValue.materialIndex) === -1) { previousValue.push(currentValue.materialIndex); } } return previousValue; }, materialOrder); const grouped = []; for (let k = 0; k < materialOrder.length; k++) { grouped.push(groups.filter(val => { return val.materialIndex === materialOrder[k]; })); } const sourceTransformBuffer = this.getCurrentTransformBuffer(); const targetTransformBuffer = this.getNextTransformBuffer(); const sourceGradientBuffer = this.getCurrentGradientBuffer(); const targetGradientBuffer = new Float32Array(sourceGradientBuffer.length); const newGroups = []; const scratchRvs = this.renderViews.slice(); scratchRvs.sort((a, b) => { return a.batchStart - b.batchStart; }); let targetBufferOffset = 0; for (let k = 0; k < grouped.length; k++) { const materialGroup = grouped[k]; const materialGroupStart = targetBufferOffset; let materialGroupCount = 0; for (let i = 0; i < materialGroup.length; i++) { const start = materialGroup[i].start; const count = materialGroup[i].count; let subArray = sourceTransformBuffer.subarray(start, start + count); targetTransformBuffer.set(subArray, targetBufferOffset); subArray = sourceGradientBuffer.subarray(start / INSTANCE_TRANSFORM_BUFFER_STRIDE, (start + count) / INSTANCE_TRANSFORM_BUFFER_STRIDE); targetGradientBuffer.set(subArray, targetBufferOffset / INSTANCE_TRANSFORM_BUFFER_STRIDE); let rvElemCount = 0; for (let m = 0; m < scratchRvs.length; m++) { if (scratchRvs[m].batchStart >= start && scratchRvs[m].batchEnd <= start + count) { scratchRvs[m].setBatchData(this.id, targetBufferOffset + rvElemCount, scratchRvs[m].batchCount); rvElemCount += scratchRvs[m].batchCount; scratchRvs.splice(m, 1); m--; } } targetBufferOffset += count; materialGroupCount += count; } newGroups.push({ offset: materialGroupStart, count: materialGroupCount, materialIndex: materialGroup[0].materialIndex }); } this.groups.length = 0; for (let i = 0; i < newGroups.length; i++) { this.groups.push({ start: newGroups[i].offset, count: newGroups[i].count, materialIndex: newGroups[i].materialIndex }); } sourceGradientBuffer.set(targetGradientBuffer, 0); this.mesh.updateDrawGroups(targetTransformBuffer, sourceGradientBuffer, this.getCurrentObjectIndexBuffer()); /** Solve hidden groups */ const hiddenGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return this.materials[value.materialIndex].visible === false; }); if (hiddenGroup) { this.setVisibleRange([{ offset: 0, count: hiddenGroup.start }]); } } resetDrawRanges() { this.groups.length = 0; this.materials.length = 0; this.groups.push({ start: 0, count: this.renderViews.length * INSTANCE_TRANSFORM_BUFFER_STRIDE, materialIndex: 0 }); this.materials.push(this.batchMaterial); this.setVisibleRange([AllBatchUpdateRange]); this.mesh.updateDrawGroups(this.getCurrentTransformBuffer(), this.getCurrentGradientBuffer(), this.getCurrentObjectIndexBuffer()); } getCurrentTransformBuffer() { return this.transformBufferIndex % 2 === 0 ? this.instanceTransformBuffer0 : this.instanceTransformBuffer1; } getNextTransformBuffer() { return ++this.transformBufferIndex % 2 === 0 ? this.instanceTransformBuffer0 : this.instanceTransformBuffer1; } getCurrentGradientBuffer() { return this.instanceGradientBuffer; } getCurrentObjectIndexBuffer() { return this.instanceObjectIdBuffer; } buildBatch() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; const batchObjects = []; let instanceBVH = null; this.instanceTransformBuffer0 = new Float32Array(this.renderViews.length * INSTANCE_TRANSFORM_BUFFER_STRIDE); this.instanceTransformBuffer1 = new Float32Array(this.renderViews.length * INSTANCE_TRANSFORM_BUFFER_STRIDE); const targetInstanceTransformBuffer = this.getCurrentTransformBuffer(); const positions = (_a = this.renderViews[0].renderData.geometry.attributes) === null || _a === void 0 ? void 0 : _a.POSITION.getFloat32Array(); const indicesLength = (_c = (_b = this.renderViews[0].renderData.geometry.attributes) === null || _b === void 0 ? void 0 : _b.INDEX.length) !== null && _c !== void 0 ? _c : 0; const positionsLength = (_e = (_d = this.renderViews[0].renderData.geometry.attributes) === null || _d === void 0 ? void 0 : _d.POSITION.length) !== null && _e !== void 0 ? _e : 0; const indices = indicesLength < 65535 && positionsLength < 65535 ? (_f = this.renderViews[0].renderData.geometry.attributes) === null || _f === void 0 ? void 0 : _f.INDEX.getUint16Array() : (_g = this.renderViews[0].renderData.geometry.attributes) === null || _g === void 0 ? void 0 : _g.INDEX.getUint32Array(); const colors = (_j = (_h = this.renderViews[0].renderData.geometry.attributes) === null || _h === void 0 ? void 0 : _h.COLOR) === null || _j === void 0 ? void 0 : _j.getFloat32Array(); const normals = (_l = (_k = this.renderViews[0].renderData.geometry.attributes) === null || _k === void 0 ? void 0 : _k.NORMAL) === null || _l === void 0 ? void 0 : _l.getFloat32Array(); for (let k = 0; k < this.renderViews.length; k++) { /** Catering to typescript * There is no unniverse where an instanced render view does not have a transform * It's against it's definition */ const ervee = this.renderViews[k]; if (!ervee.renderData.geometry.transform) { throw new Error(`Instanced Render view with id ${ervee.renderData.id} has null transform!`); } ervee.renderData.geometry.transform.toArray(targetInstanceTransformBuffer, k * INSTANCE_TRANSFORM_BUFFER_STRIDE); this.renderViews[k].setBatchData(this.id, k * INSTANCE_TRANSFORM_BUFFER_STRIDE, INSTANCE_TRANSFORM_BUFFER_STRIDE); if (this.instanceObjectIdBuffer) this.instanceObjectIdBuffer[k] = k; const batchObject = new InstancedBatchObject(this.renderViews[k], k); if (!instanceBVH) { const transform = new Matrix4().makeTranslation(batchObject.localOrigin.x, batchObject.localOrigin.y, batchObject.localOrigin.z); transform.invert(); instanceBVH = AccelerationStructure.buildBVH(indices, positions, DefaultBVHOptions, transform); /** There's a bug in the library where it reports incorrect bounds until a refit */ instanceBVH.refit(); } batchObject.buildAccelerationStructure(instanceBVH); batchObjects.push(batchObject); } /** Catering to typescript * There is no unniverse where indices or positions are undefined at this point */ if (!indices || !positions) { throw new Error(`Cannot build batch ${this.id}. Undefined indices or positions`); } this.geometry = this.makeInstancedMeshGeometry(indices, positions, normals, colors); this.mesh = new SpeckleInstancedMesh(this.geometry); this.mesh.setBatchObjects(batchObjects); this.mesh.setBatchMaterial(this.batchMaterial); this.mesh.buildTAS(); this.geometry.boundingBox = this.mesh.TAS.getBoundingBox(new Box3()); this.geometry.boundingSphere = this.geometry.boundingBox.getBoundingSphere(new Sphere()); this.mesh.uuid = this.id; this.mesh.layers.set(ObjectLayers.STREAM_CONTENT_MESH); this.mesh.frustumCulled = false; this.groups.push({ start: 0, count: this.renderViews.length * INSTANCE_TRANSFORM_BUFFER_STRIDE, materialIndex: 0 }); this.mesh.updateDrawGroups(this.getCurrentTransformBuffer(), this.getCurrentGradientBuffer(), this.getCurrentObjectIndexBuffer()); return Promise.resolve(); } getRenderView(index) { Logger.warn('Deprecated! Use InstancedBatchObject'); return null; } getMaterialAtIndex(index) { Logger.warn('Deprecated! Use InstancedBatchObject'); return null; } getMaterial(rv) { const group = this.groups.find(value => { return rv.batchStart >= value.start && rv.batchStart + rv.batchCount <= value.count + value.start; }); if (!group) { Logger.warn(`Could not get material for ${rv.renderData.id}`); return null; } return this.materials[group.materialIndex]; } makeInstancedMeshGeometry(indices, position, normal, color) { const geometry = new BufferGeometry(); if (position) { geometry.setAttribute('position', new Float32BufferAttribute(position, 3)); } if (color) { geometry.setAttribute('color', new Float32BufferAttribute(color, 3)); } let indexBuffer = null; if (position.length >= 65535 || indices.length >= 65535) { indexBuffer = new Uint32BufferAttribute(indices, 1); } else { indexBuffer = new Uint16BufferAttribute(indices, 1); } geometry.setIndex(indexBuffer); this.instanceGradientBuffer = new Float32Array(this.renderViews.length); if (normal) { geometry.setAttribute('normal', new Float32BufferAttribute(normal, 3)).normalizeNormals(); } else Geometry.computeVertexNormals(geometry, position); return geometry; } updateGradientIndexBufferData(start, end, value) { const data = this.getCurrentGradientBuffer(); for (let k = start; k < end; k++) { data[k] = value; } } purge() { this.renderViews.length = 0; this.geometry.dispose(); this.batchMaterial.dispose(); } } class PrimitiveBatch { constructor() { this.needsShuffle = false; } get materials() { return this.primitive.material; } get groups() { /** We always write to geomtry.groups via the set accessor * which takes a DrawGroup[], so geometry.groups will always * be an array of DrawGroup. * Not to mention that **all our draw groupd are DrawGroup because * they always have a materialIndex defined** by design and convention!!! */ return this.primitive.geometry.groups; } set groups(value) { this.primitive.geometry.groups = value; } get renderObject() { return this.primitive; } get drawCalls() { return this.groups.length; } get vertCount() { return this.primitive.geometry.attributes.position.count; } getCount() { var _a; return ((_a = this.primitive.geometry.index) === null || _a === void 0 ? void 0 : _a.count) || 0; } setBatchMaterial(material) { this.batchMaterial = material; } onUpdate() { if (this.needsShuffle) { this.shuffleDrawGroups(); this.needsShuffle = false; } } setVisibleRange(ranges) { /** Entire batch needs to NOT be drawn */ if (ranges.length === 1 && isNoneBatchUpdateRange(ranges[0])) { this.primitive.geometry.setDrawRange(0, 0); /** We unset the 'visible' flag, otherwise three.js will still run pointless buffer binding commands*/ this.primitive.visible = false; return; } /** Entire batch needs to BE drawn */ if (ranges.length === 1 && ranges[0] === AllBatchUpdateRange) { this.primitive.geometry.setDrawRange(0, this.getCount()); this.primitive.visible = true; return; } /** Parts of the batch need to be visible. We get the min/max offset and total count */ let minOffset = Infinity; let maxOffset = 0; ranges.forEach(range => { minOffset = Math.min(minOffset, range.offset); maxOffset = Math.max(maxOffset, range.offset); }); const offset = ranges.find(val => val.offset === maxOffset); this.primitive.geometry.setDrawRange(minOffset, maxOffset - minOffset + (offset ? offset.count : 0)); this.primitive.visible = true; } getVisibleRange() { /** Entire batch is visible */ if (this.groups.length === 1 && this.primitive.visible) return AllBatchUpdateRange; /** Entire batch is hidden */ if (!this.primitive.visible) return NoneBatchUpdateRange; /** Parts of the batch are visible */ return { offset: this.primitive.geometry.drawRange.start, count: this.primitive.geometry.drawRange.count }; } getOpaque() { /** If there is any transparent or hidden group return the update range up to it's offset */ const transparentOrHiddenGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return Materials.isTransparent(this.materials[value.materialIndex]) || this.materials[value.materialIndex].visible === false; }); if (transparentOrHiddenGroup) { return { offset: 0, count: transparentOrHiddenGroup.start }; } /** Entire batch is opaque */ return AllBatchUpdateRange; } getDepth() { /** If there is any transparent or hidden group return the update range up to it's offset */ const transparentOrHiddenGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return Materials.isTransparent(this.materials[value.materialIndex]) || this.materials[value.materialIndex].visible === false || this.materials[value.materialIndex].colorWrite === false; }); if (transparentOrHiddenGroup) { return { offset: 0, count: transparentOrHiddenGroup.start }; } /** Entire batch is opaque */ return AllBatchUpdateRange; } getTransparent() { /** Look for a transparent group */ const transparentGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return Materials.isTransparent(this.materials[value.materialIndex]); }); /** Look for a hidden group */ const hiddenGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return this.materials[value.materialIndex].visible === false; }); /** If there is a transparent group return it's range */ if (transparentGroup) { return { offset: transparentGroup.start, count: hiddenGroup !== undefined ? hiddenGroup.start - transparentGroup.start : this.getCount() - transparentGroup.start }; } /** Entire batch is not transparent */ return NoneBatchUpdateRange; } getStencil() { /** If there is a single group and it's material writes to stencil, return all */ if (this.groups.length === 1) { if (this.materials[0].stencilWrite === true) return AllBatchUpdateRange; } const stencilGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return this.materials[value.materialIndex].stencilWrite === true; }); if (stencilGroup) { return { offset: stencilGroup.start, count: stencilGroup.count }; } /** No stencil group */ return NoneBatchUpdateRange; } setBatchBuffers(ranges) { let minGradientIndex = Infinity; let maxGradientIndex = 0; for (let k = 0; k < ranges.length; k++) { const range = ranges[k]; if (range.materialOptions) { if (range.materialOptions.rampIndex !== undefined && range.materialOptions.rampWidth !== undefined) { const start = ranges[k].offset; const len = ranges[k].offset + ranges[k].count; /** The ramp indices specify the *begining* of each ramp color. When sampling with Nearest filter (since we don't want filtering) * we'll always be sampling right at the edge between texels. Most GPUs will sample consistently, but some won't and we end up with * a ton of artifacts. To avoid this, we are shifting the sampling indices so they're right on the center of each texel, so no inconsistent * sampling can occur. */ const shiftedIndex = range.materialOptions.rampIndex + 0.5 / range.materialOptions.rampWidth; const minMaxIndices = this.updateGradientIndexBufferData(start, range.count === Infinity ? this.primitive.geometry.attributes['gradientIndex'].array.length : len, shiftedIndex); minGradientIndex = Math.min(minGradientIndex, minMaxIndices.minIndex); maxGradientIndex = Math.max(maxGradientIndex, minMaxIndices.maxIndex); } /** We need to update the texture here, because each batch uses it's own clone for any material we use on it * because otherwise three.js won't properly update our custom uniforms */ if (range.materialOptions.rampTexture !== undefined) { if (range.material instanceof SpeckleStandardColoredMaterial || range.material instanceof SpecklePointColouredMaterial) { range.material.setGradientTexture(range.materialOptions.rampTexture); } } } } if (minGradientIndex < Infinity && maxGradientIndex > 0) this.updateGradientIndexBuffer(); } cleanMaterials() { const materialsInUse = [...Array.from(new Set(this.groups.map(value => { if (value.materialIndex === undefined) return undefined; return this.materials[value.materialIndex]; })))]; let k = 0; while (this.materials.length > materialsInUse.length) { if (!materialsInUse.includes(this.materials[k])) { this.materials.splice(k, 1); this.groups.forEach(value => { if (value.materialIndex === undefined) return; if (value.materialIndex > k) value.materialIndex--; }); k = 0; continue; } k++; } } shuffleDrawGroups() { const groups = this.groups.slice(); groups.sort(this.shuffleMaterialOrder.bind(this)); const materialOrder = []; groups.reduce((previousValue, currentValue) => { if (currentValue.materialIndex !== undefined) { if (previousValue.indexOf(currentValue.materialIndex) === -1) { previousValue.push(currentValue.materialIndex); } } return previousValue; }, materialOrder); const grouped = []; for (let k = 0; k < materialOrder.length; k++) { grouped.push(groups.filter(val => { return val.materialIndex === materialOrder[k]; })); } const sourceIBO = this.getCurrentIndexBuffer(); const targetIBO = this.getNextIndexBuffer(); const sourceIBOData = sourceIBO.array; const targetIBOData = targetIBO.array; const newGroups = []; const scratchRvs = this.renderViews.slice(); scratchRvs.sort((a, b) => { return a.batchStart - b.batchStart; }); let targetIBOOffset = 0; for (let k = 0; k < grouped.length; k++) { const materialGroup = grouped[k]; const materialGroupStart = targetIBOOffset; let materialGroupCount = 0; for (let i = 0; i < materialGroup.length; i++) { const start = materialGroup[i].start; const count = materialGroup[i].count; const subArray = sourceIBOData.subarray(start, start + count); targetIBOData.set(subArray, targetIBOOffset); let rvTrisCount = 0; for (let m = 0; m < scratchRvs.length; m++) { if (scratchRvs[m].batchStart >= start && scratchRvs[m].batchEnd <= start + count) { scratchRvs[m].setBatchData(this.id, targetIBOOffset + rvTrisCount, scratchRvs[m].batchCount); rvTrisCount += scratchRvs[m].batchCount; scratchRvs.splice(m, 1); m--; } } targetIBOOffset += count; materialGroupCount += count; } newGroups.push({ offset: materialGroupStart, count: materialGroupCount, materialIndex: materialGroup[0].materialIndex }); } this.groups = []; for (let i = 0; i < newGroups.length; i++) { this.primitive.geometry.addGroup(newGroups[i].offset, newGroups[i].count, newGroups[i].materialIndex); } this.primitive.geometry.setIndex(targetIBO); /** Catering to typescript * The line above literally makes sure the index is set. Absurd */ if (this.primitive.geometry.index) this.primitive.geometry.index.needsUpdate = true; const hiddenGroup = this.groups.find(value => { if (value.materialIndex === undefined) return false; return this.materials[value.materialIndex].visible === false; }); if (hiddenGroup) { this.setVisibleRange([{ offset: 0, count: hiddenGroup.start }]); } else this.setVisibleRange([AllBatchUpdateRange]); // console.log('Final -> ', this.id, this.groups.slice()) } updateGradientIndexBuffer(rangeMin, rangeMax) { this.gradientIndexBuffer.updateRange = { offset: rangeMin !== undefined ? rangeMin : 0, count: rangeMin !== undefined && rangeMax !== undefined ? rangeMax - rangeMin + 1 : -1 }; this.gradientIndexBuffer.needsUpdate = true; this.primitive.geometry.attributes['gradientIndex'].needsUpdate = true; } resetDrawRanges() { this.primitive.visible = true; this.primitive.geometry.clearGroups(); this.primitive.geometry.addGroup(0, this.getCount(), 0); this.primitive.geometry.setDrawRange(0, Infinity); } getMaterial(rv) { for (let k = 0; k < this.groups.length; k++) { const group = this.groups[k]; if (rv.batchStart >= group.start && rv.batchEnd <= group.start + group.count) { return this.materials[group.materialIndex]; } } return null; } purge() { this.renderViews.length = 0; this.primitive.geometry.dispose(); this.batchMaterial.dispose(); } } class MeshBatch extends PrimitiveBatch { get bounds() { return this.primitive.TAS.getBoundingBox(new Box3()); } get minDrawCalls() { return [...Array.from(new Set(this.groups.map(value => value.materialIndex)))].length; } get triCount() { return this.getCount() / 3; } get pointCount() { return 0; } get lineCount() { return 0; } get geometryType() { return GeometryType.MESH; } get mesh() { return this.primitive; } constructor(id, subtreeId, renderViews, transformStorage) { super(); this.indexBufferIndex = 0; this.drawRanges = new DrawRanges(); this.id = id; this.subtreeId = subtreeId; this.renderViews = renderViews; this.transformStorage = transformStorage; } getCurrentIndexBuffer() { return this.indexBufferIndex % 2 === 0 ? this.indexBuffer0 : this.indexBuffer1; } getNextIndexBuffer() { return ++this.indexBufferIndex % 2 === 0 ? this.indexBuffer0 : this.indexBuffer1; } shuffleMaterialOrder(a, b) { const materialA = this.materials[a.materialIndex]; const materialB = this.materials[b.materialIndex]; const visibleOrder = +materialB.visible - +materialA.visible; const colorWriteOrder = +materialB.colorWrite - +materialA.colorWrite; const transparentOrder = +materialA.transparent - +materialB.transparent; if (visibleOrder !== 0) return visibleOrder; if (colorWriteOrder !== 0) return colorWriteOrder; return transparentOrder; } updateGradientIndexBufferData(start, end, value) { if (!this.primitive.geometry.index) { throw new Error(`Invalid geometry on batch ${this.id}`); } const index = this.primitive.geometry.index.array; const data = this.gradientIndexBuffer.array; let minVertexIndex = Infinity; let maxVertexIndex = 0; for (let k = start; k < end; k++) { const vIndex = index[k]; minVertexIndex = Math.min(minVertexIndex, vIndex); maxVertexIndex = Math.max(maxVertexIndex, vIndex); data[vIndex] = value; } this.gradientIndexBuffer.updateRange = { offset: minVertexIndex, count: maxVertexIndex - minVertexIndex + 1 }; this.gradientIndexBuffer.needsUpdate = true; this.primitive.geometry.attributes['gradientIndex'].needsUpdate = true; return { minIndex: minVertexIndex, maxIndex: maxVertexIndex }; } setDrawRanges(ranges) { // const current = this.groups.slice() // const incoming = ranges.slice() ranges.forEach(value => { if (value.material) { value.material = this.primitive.getCachedMaterial(value.material); } }); const materials = ranges.map(val => { return val.material; }); const uniqueMaterials = [...Array.from(new Set(materials.map(value => value)))]; for (let k = 0; k < uniqueMaterials.length; k++) { if (!this.materials.includes(uniqueMaterials[k])) this.materials.push(uniqueMaterials[k]); } this.groups = this.drawRanges.integrateRanges(this.groups, this.materials, ranges); let count = 0; this.groups.forEach(value => count += value.count); if (count !== this.getCount()) { // Logger.error('Current -> ', current) // Logger.error('Incoming -> ', incoming) // Logger.error('Current -> ', this.geometry.groups) Logger.error(`Draw groups invalid on ${this.id}, ${this.renderViews[0].renderData.id}, ${this.getCount()}, ${this.getCount() - count}`); } this.setBatchBuffers(ranges); this.cleanMaterials(); if (this.drawCalls > this.minDrawCalls + 2) { this.needsShuffle = true; } else { const transparentDepthHiddenGroup = this.groups.find(value => this.materials[value.materialIndex].transparent === true || this.materials[value.materialIndex].visible === false || this.materials[value.materialIndex].colorWrite === false); if (transparentDepthHiddenGroup) { if (this.groups.length === 1) this.needsShuffle = true;else { for (let k = this.groups.indexOf(transparentDepthHiddenGroup); k < this.groups.length; k++) { const material = this.materials[this.groups[k].materialIndex]; if (material.visible) { if (!material.transparent || material.colorWrite) { this.needsShuffle = true; break; } } } } } } } resetDrawRanges() { super.resetDrawRanges(); this.primitive.setBatchMaterial(this.batchMaterial); } buildBatch() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; let indicesCount = 0; let attributeCount = 0; const rvAABB = new Box3(); const bounds = new Box3(); for (let k = 0; k < this.renderViews.length; k++) { const ervee = this.renderViews[k]; /** Catering to typescript * There is no unniverse where indices or positions are undefined at this point */ if (!ervee.renderData.geometry.attributes || !ervee.renderData.geometry.attributes.INDEX) { throw new Error(`Cannot build batch ${this.id}. Invalid geometry, or indices`); } indicesCount += ervee.renderData.geometry.attributes.INDEX.length; attributeCount += ervee.renderData.geometry.attributes.POSITION.length; bounds.union(ervee.aabb); } const needsRTE = Geometry.needsRTE(bounds); const hasVertexColors = ((_a = this.renderViews[0].renderData.geometry.attributes) === null || _a === void 0 ? void 0 : _a.COLOR) !== undefined; const indices = attributeCount >= 65535 || indicesCount >= 65535 ? new Uint32Array(indicesCount) : new Uint16Array(indicesCount); const position = needsRTE ? new Float64Array(attributeCount) : new Float32Array(attributeCount); const color = new Float32Array(hasVertexColors ? attributeCount : 0); color.fill(1); const batchIndices = new Float32Array(attributeCount / 3); const normals = new Float32Array(attributeCount); let offset = 0; let arrayOffset = 0; const batchObjects = []; for (let k = 0; k < this.renderViews.length; k++) { const geometry = this.renderViews[k].renderData.geometry; /** Catering to typescript * There is no unniverse where indices or positions are undefined at this point */ if (!geometry.attributes || !((_b = geometry.attributes) === null || _b === void 0 ? void 0 : _b.INDEX)) { throw new Error(`Cannot build batch ${this.id}. Invalid geometry, or indices`); } (_c = geometry.attributes) === null || _c === void 0 ? void 0 : _c.INDEX.copyToBuffer(indices, arrayOffset); const indicesSubArray = indices.subarray(arrayOffset, arrayOffset + ((_d = geometry.attributes) === null || _d === void 0 ? void 0 : _d.INDEX.length)); (_e = geometry.attributes) === null || _e === void 0 ? void 0 : _e.POSITION.copyToBuffer(position, offset); const positionSubarray = position.subarray(offset, offset + ((_g = (_f = this.renderViews[k].renderData.geometry.attributes) === null || _f === void 0 ? void 0 : _f.POSITION.length) !== null && _g !== void 0 ? _g : 0)); /** We transform the copied geometry so that we do not alter original chunk data which might be shared */ Geometry.transformArray(positionSubarray, geometry.transform, 0, (_h = geometry.attributes) === null || _h === void 0 ? void 0 : _h.POSITION.length); if (geometry.attributes.COLOR) { (_j = geometry.attributes) === null || _j === void 0 ? void 0 : _j.COLOR.copyToBuffer(color, offset); } /** We either copy over the provided vertex normals */ if (geometry.attributes.NORMAL) { (_k = geometry.attributes) === null || _k === void 0 ? void 0 : _k.NORMAL.copyToBuffer(normals, offset); if (geometry.flipNormals) { Geometry.flipNormalsBuffer(normals.subarray(offset, offset + ((_l = geometry.attributes) === null || _l === void 0 ? void 0 : _l.NORMAL.length))); } } else { /** Either we compute them ourselves */ Geometry.computeVertexNormalsBufferVirtual(normals.subarray(offset, offset + ((_o = (_m = this.renderViews[k].renderData.geometry.attributes) === null || _m === void 0 ? void 0 : _m.POSITION.length) !== null && _o !== void 0 ? _o : 0)), geometry.attributes.POSITION, geometry.attributes.INDEX, geometry.flipNormals); } batchIndices.fill(k, offset / 3, offset / 3 + geometry.attributes.POSITION.length); this.renderViews[k].setBatchData(this.id, arrayOffset, geometry.attributes.INDEX.length, offset / 3, offset / 3 + geometry.attributes.POSITION.length); /** We re-compute the render view aabb based on transformed geometry * We do this because some transforms like non-uniform scaling can produce incorrect results * if we compute an aabb from original geometry then apply the transform. That's why we compute * an aabb from the transformed geometry here and set it in the rv */ rvAABB.setFromArray(positionSubarray); this.renderViews[k].aabb = rvAABB; const batchObject = new BatchObject(this.renderViews[k], k); batchObject.buildAccelerationStructure(positionSubarray, indicesSubArray); batchObjects.push(batchObject); indices.set((_p = batchObject.accelerationStructure.bvh.geometry.index) === null || _p === void 0 ? void 0 : _p.array, arrayOffset); /** Re-index the indices inside the batch */ for (let i = 0; i < indicesSubArray.length; i++) { indicesSubArray[i] = indicesSubArray[i] + offset / 3; } offset += geometry.attributes.POSITION.length; arrayOffset += geometry.attributes.INDEX.length; this.renderViews[k].disposeGeometry(); } const geometry = this.makeMeshGeometry(indices, position, normals, batchIndices, hasVertexColors ? color : undefined); if (needsRTE) Geometry.updateRTEGeometry(geometry, position); this.primitive = new SpeckleMesh(geometry, needsRTE); this.primitive.setBatchObjects(batchObjects, this.transformStorage); this.primitive.setBatchMaterial(this.batchMaterial); this.primitive.buildTAS(); this.primitive.geometry.boundingBox = this.primitive.TAS.getBoundingBox(new Box3()); this.primitive.geometry.boundingSphere = this.primitive.geometry.boundingBox.getBoundingSphere(new Sphere()); this.primitive.uuid = this.id; this.primitive.layers.set(ObjectLayers.STREAM_CONTENT_MESH); this.primitive.frustumCulled = false; this.primitive.geometry.addGroup(0, this.getCount(), 0); // batchObjects.forEach((element: BatchObject) => { // element.renderView.disposeGeometry() // }) return Promise.resolve(); } makeMeshGeometry(indices, position, normals, batchIndices, color) { const geometry = new BufferGeometry(); if (position.length >= 65535 || indices.length >= 65535) { this.indexBuffer0 = new Uint32BufferAttribute(indices, 1); this.indexBuffer1 = new Uint32BufferAttribute(indices, 1); } else { this.indexBuffer0 = new Uint16BufferAttribute(indices, 1); this.indexBuffer1 = new Uint16BufferAttribute(indices, 1); } geometry.setIndex(this.indexBuffer0); if (position) { /** When RTE enabled, we'll be storing the high component of the encoding here, * which considering our current encoding method is actually the original casted * down float32 position! */ geometry.setAttribute('position', new Float32BufferAttribute(position, 3)); } if (normals) { geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3)).normalizeNormals(); } if (batchIndices) { geometry.setAttribute('objIndex', new Float32BufferAttribute(batchIndices, 1)); } if (color) { geometry.setAttribute('color', new Float32BufferAttribute(color, 3)); } const buffer = new Float32Array(position.length / 3); this.gradientIndexBuffer = new Float32BufferAttribute(buffer, 1); this.gradientIndexBuffer.setUsage(DynamicDrawUsage); geometry.setAttribute('gradientIndex', this.gradientIndexBuffer); return geometry; } getRenderView(index) { Logger.warn('Deprecated! Use BatchObject'); return null; } getMaterialAtIndex(index) { Logger.warn('Deprecated! Use BatchObject'); return null; } } class PointBatch extends PrimitiveBatch { get geometryType() { return this.renderViews[0].geometryType; } get bounds() { if (!this.primitive.geometry.boundingBox) this.primitive.geometry.computeBoundingBox(); return this.primitive.geometry.boundingBox ? this.primitive.geometry.boundingBox : new Box3(); } get minDrawCalls() { return this.materials.length; } get triCount() { return 0; } get pointCount() { return this.getCount(); } get lineCount() { return 0; } constructor(id, subtreeId, renderViews) { super(); this.drawRanges = new DrawRanges(); this.id = id; this.subtreeId = subtreeId; this.renderViews = renderViews; } setDrawRanges(ranges) { const materials = ranges.map(val => { return val.material; }); const uniqueMaterials = [...Array.from(new Set(materials.map(value => value)))]; for (let k = 0; k < uniqueMaterials.length; k++) { if (!this.materials.includes(uniqueMaterials[k])) this.materials.push(uniqueMaterials[k]); } this.groups = this.drawRanges.integrateRanges(this.groups, this.materials, ranges); let count = 0; this.groups.forEach(value => count += value.count); if (count !== this.getCount()) { Logger.error(`Draw groups invalid on ${this.id}`); } this.setBatchBuffers(ranges); this.cleanMaterials(); if (this.drawCalls > this.minDrawCalls + 2) { this.needsShuffle = true; } else { const transparentOrHiddenGroup = this.groups.find(value => this.materials[value.materialIndex].transparent === true || this.materials[value.materialIndex].visible === false); if (transparentOrHiddenGroup) { for (let k = this.groups.indexOf(transparentOrHiddenGroup); k < this.groups.length; k++) { const material = this.materials[this.groups[k].materialIndex]; if (material.transparent !== true && material.visible !== false) { this.needsShuffle = true; break; } } } } } resetDrawRanges() { super.resetDrawRanges(); this.primitive.material = [this.batchMaterial]; } getCurrentIndexBuffer() { /** Catering to typescript * There is no unniverse where the geometry is non-indexed. We're **explicitly** setting the index at creation time */ if (!this.primitive.geometry.index) { throw new Error(`Invalid index buffer for batch ${this.id}`); } return this.primitive.geometry.index; } getNextIndexBuffer() { /** Catering to typescript * There is no unniverse where the geometry is non-indexed. We're **explicitly** setting the index at creation time */ if (!this.primitive.geometry.index) { throw new Error(`Invalid index buffer for batch ${this.id}`); } return new BufferAttribute(this.primitive.geometry.index.array.slice(), this.primitive.geometry.index.itemSize); } shuffleMaterialOrder(a, b) { const materialA = this.materials[a.materialIndex]; const materialB = this.materials[b.materialIndex]; const visibleOrder = +materialB.visible - +materialA.visible; const transparentOrder = +materialA.transparent - +materialB.transparent; if (visibleOrder !== 0) return visibleOrder; return transparentOrder; } updateGradientIndexBufferData(start, end, value) { const data = this.gradientIndexBuffer; data.array.fill(value, start, end); this.gradientIndexBuffer.updateRange = { offset: start, count: end - start }; this.gradientIndexBuffer.needsUpdate = true; this.primitive.geometry.attributes['gradientIndex'].needsUpdate = true; return { minIndex: start, maxIndex: end }; } buildBatch() { var _a, _b, _c, _d, _e, _f; let attributeCount = 0; const rvAABB = new Box3(); const bounds = new Box3(); for (let k = 0; k < this.renderViews.length; k++) { const ervee = this.renderViews[k]; /** Catering to typescript * There is no unniverse where indices or positions are undefined at this point */ if (!ervee.renderData.geometry.attributes) { throw new Error(`Cannot build batch ${this.id}. Invalid geometry, or indices`); } attributeCount += ervee.renderData.geometry.attributes.POSITION.length; bounds.union(ervee.aabb); } const needsRTE = Geometry.needsRTE(bounds); const hasVertexColors = ((_a = this.renderViews[0].renderData.geometry.attributes) === null || _a === void 0 ? void 0 : _a.COLOR) !== undefined; const needsInt32Indices = attributeCount >= 65535; const position = needsRTE ? new Float64Array(attributeCount) : new Float32Array(attributeCount); const color = new Float32Array(hasVertexColors ? attributeCount : 0).fill(1); const index = needsInt32Indices ? new Uint32Array(attributeCount / 3) : new Uint16Array(attributeCount / 3); let offset = 0; let indexOffset = 0; for (let k = 0; k < this.renderViews.length; k++) { const geometry = this.renderViews[k].renderData.geometry; if (!geometry.attributes) { throw new Error(`Cannot build batch ${this.id}. Invalid geometry, or indices`); } (_b = geometry.attributes) === null || _b === void 0 ? void 0 : _b.POSITION.copyToBuffer(position, offset); const positionSubarray = position.subarray(offset, offset + ((_d = (_c = this.renderViews[k].renderData.geometry.attributes) === null || _c === void 0 ? void 0 : _c.POSITION.length) !== null && _d !== void 0 ? _d : 0)); Geometry.transformArray(positionSubarray, geometry.transform, 0, (_e = geometry.attributes) === null || _e === void 0 ? void 0 : _e.POSITION.length); if (geometry.attributes.COLOR) { (_f = geometry.attributes) === null || _f === void 0 ? void 0 : _f.COLOR.copyToBuffer(color, offset); } index.set((needsInt32Indices ? new Uint32Array(geometry.attributes.POSITION.length / 3) : new Uint16Array(geometry.attributes.POSITION.length / 3)).map((_value, index) => index + indexOffset), indexOffset); /** We re-compute the render view aabb based on transformed geometry * We do this because some transforms like non-uniform scaling can produce incorrect results * if we compute an aabb from original geometry then apply the transform. That's why we compute * an aabb from the transformed geometry here and set it in the rv */ rvAABB.setFromArray(positionSubarray); this.renderViews[k].aabb = rvAABB; this.renderViews[k].setBatchData(this.id, offset / 3, geometry.attributes.POSITION.length / 3); offset += geometry.attributes.POSITION.length; indexOffset += geometry.attributes.POSITION.length / 3; this.renderViews[k].disposeGeometry(); } const geometry = this.makePointGeometry(index, position, color); if (needsRTE) { Geometry.updateRTEGeometry(geometry, position); if (!this.batchMaterial.defines) this.batchMaterial.defines = {}; this.batchMaterial.defines['USE_RTE'] = ' '; } this.primitive = new Points(geometry, this.batchMaterial); this.primitive.material = [this.batchMaterial]; this.primitive.geometry.addGroup(0, this.getCount(), 0); this.primitive.uuid = this.id; this.primitive.layers.set(this.renderViews[0].geometryType === GeometryType.POINT ? ObjectLayers.STREAM_CONTENT_POINT : ObjectLayers.STREAM_CONTENT_POINT_CLOUD); return Promise.resolve(); } makePointGeometry(index, position, color) { const geometry = new BufferGeometry(); geometry.setAttribute('position', new Float32BufferAttribute(position, 3)); geometry.setAttribute('color', new Float32BufferAttribute(color, 3)); if (position.length >= 65535 || index.length >= 65535) { geometry.setIndex(new Uint32BufferAttribute(index, 1)); } else { geometry.setIndex(new Uint16BufferAttribute(index, 1)); } const buffer = new Float32Array(position.length / 3); this.gradientIndexBuffer = new Float32BufferAttribute(buffer, 1); this.gradientIndexBuffer.setUsage(DynamicDrawUsage); geometry.setAttribute('gradientIndex', this.gradientIndexBuffer); geometry.computeBoundingSphere(); geometry.computeBoundingBox(); return geometry; } getRenderView(index) { for (let k = 0; k < this.renderViews.length; k++) { if (index >= this.renderViews[k].batchStart && index < this.renderViews[k].batchEnd) { return this.renderViews[k]; } } return null; } getMaterialAtIndex(index) { for (let k = 0; k < this.renderViews.length; k++) { if (index >= this.renderViews[k].batchStart && index < this.renderViews[k].batchEnd) { const rv = this.renderViews[k]; const group = this.groups.find(value => { return rv.batchStart >= value.start && rv.batchStart + rv.batchCount <= value.count + value.start; }); if (!group) { Logger.warn(`Malformed material index!`); return null; } return this.materials[group.materialIndex]; } } return null; } } var ObjectVisibility; (function (ObjectVisibility) { ObjectVisibility["OPAQUE"] = "opaque"; ObjectVisibility["TRANSPARENT"] = "transparent"; ObjectVisibility["DEPTH"] = "depth"; ObjectVisibility["STENCIL"] = "stencil"; ObjectVisibility["CUSTOM"] = "custom"; })(ObjectVisibility || (ObjectVisibility = {})); var ClearFlags; (function (ClearFlags) { ClearFlags[ClearFlags["COLOR"] = 256] = "COLOR"; ClearFlags[ClearFlags["DEPTH"] = 1024] = "DEPTH"; ClearFlags[ClearFlags["STENCIL"] = 16384] = "STENCIL"; })(ClearFlags || (ClearFlags = {})); class BaseGPass { constructor() { this._enabled = true; this.layers = null; this._enabledLayers = []; this._objectVisibility = null; this._jitter = false; this._options = {}; this._clearColor = undefined; this._clearAlpha = undefined; this._clearFlags = undefined; this._outputTarget = null; this.onBeforeRender = undefined; this.onAfterRender = undefined; this._visibilityFunction = () => { throw new Error('Undefined visibility function'); }; } get enabledLayers() { return this._enabledLayers; } get displayName() { return 'BASE'; } get outputTarget() { return this._outputTarget; } set outputTarget(value) { this._outputTarget = value; } get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; } set options(value) { Object.assign(this._options, value); } get visibility() { return this._objectVisibility; } get overrideMaterial() { return null; } get overrideBatchMaterial() { return null; } get jitter() { return this._jitter; } get clearColor() { return this._clearColor; } get clearAlpha() { return this._clearAlpha; } get clearFlags() { return this._clearFlags; } get visibilityFunction() { return this._visibilityFunction; } setClearColor(color, alpha) { this._clearColor = color; this._clearAlpha = alpha; } setClearFlags(flags) { this._clearFlags = flags; } setLayers(layers) { this.layers = layers; this._enabledLayers = layers.slice(); } enableLayer(layer, value) { if (this._enabledLayers.includes(layer)) { if (!value) this._enabledLayers.splice(this._enabledLayers.indexOf(layer), 1); } else { if (value) this._enabledLayers.push(layer); } } setVisibility(objectVisibility, visibilityFunction) { this._objectVisibility = objectVisibility; if (objectVisibility === ObjectVisibility.CUSTOM) this._visibilityFunction = visibilityFunction; } setJitter(value) { this._jitter = value; } applyLayers(camera) { if (camera === null) return; if (this.layers === null) { camera.layers.enableAll(); return; } camera.layers.disableAll(); this.layers.forEach(layer => { if (this._enabledLayers.includes(layer)) camera.layers.enable(layer); }); } clear(renderer) { if (this._clearColor !== undefined) renderer.setClearColor(this._clearColor, this._clearAlpha || 0); if (this._clearColor !== undefined || this._clearFlags !== undefined) renderer.clear(this._clearColor !== undefined || this._clearFlags !== undefined && !!(this._clearFlags & ClearFlags.COLOR), this._clearFlags !== undefined && !!(this._clearFlags & ClearFlags.DEPTH), this._clearFlags !== undefined && !!(this._clearFlags & ClearFlags.STENCIL)); } setSize(width, height) { var _a; (_a = this._outputTarget) === null || _a === void 0 ? void 0 : _a.setSize(width, height); } } class ProgressiveGPass extends BaseGPass { constructor() { super(...arguments); this._frameIndex = 0; this._accumulationFrames = 0; } get frameIndex() { return this._frameIndex; } set frameIndex(value) { this._frameIndex = value; } get accumulationFrames() { return this._accumulationFrames; } set accumulationFrames(value) { this._accumulationFrames = value; } render(renderer, camera, scene) { if (this._frameIndex >= this._accumulationFrames - 1) { return false; } return true; } } class Batcher { constructor(caps) { this.maxBatchObjects = 0; this.maxBatchVertices = 500000; this.minInstancedBatchVertices = 10000; this.maxBatchTextObjects = 5000; this.batches = {}; this.caps = caps; this.maxBatchObjects = Math.floor((this.caps.maxVertexUniforms - Materials.UNIFORM_VECTORS_USED) / 4); this.materials = new Materials(); void this.materials.createDefaultMaterials(); } async *makeBatches(worldTree, renderTree, speckleType, batchType) { let min = Number.MAX_SAFE_INTEGER, max = -1, average = 0, batchCount = 0; const instanceGroups = renderTree.getInstances(); const instancedBatches = {}; const pause = new AsyncPause(); for (const g in instanceGroups) { pause.tick(100); if (pause.needsWait) { await pause.wait(50); } let instancedNodes = worldTree.findId(g, renderTree.subtreeId); if (!instancedNodes) { continue; } instancedNodes = instancedNodes.filter(node => { return node.model.renderView && node.model.renderView.speckleType === SpeckleType.Mesh; }); if (!instancedNodes.length) continue; const vertCount = instancedNodes[0].model.renderView.renderData.geometry.attributes.POSITION.length / 3 * instancedNodes.length; if (!instancedBatches[vertCount]) { instancedBatches[vertCount] = []; } instancedBatches[vertCount].push(g); } for (const v in instancedBatches) { for (let k = 0; k < instancedBatches[v].length; k++) { const nodes = worldTree.findId(instancedBatches[v][k], renderTree.subtreeId); if (!nodes) continue; /** Make sure entire instance set is instanced */ let instanced = true; nodes.every(node => instanced && (instanced = node.model.instanced)); const rvs = nodes.map(node => node.model.renderView) /** This disconsiders orphaned nodes caused by incorrect id duplication in the stream */.filter(rv => rv); /** Determine if the instance geometry needs RTE */ let needsRTE = Geometry.needsRTE(rvs[0].aabb); if (!needsRTE) { /** Get all the transforms for this instance geometry */ const transforms = rvs.map(rv => rv.renderData.geometry.transform).filter(t => t !== null); // This is lunacy const testBox = new Box3().copy(rvs[0].aabb); const scratchBox = new Box3(); /** Go through each transform and test. */ for (let k = 0; k < transforms.length; k++) { scratchBox.copy(testBox); scratchBox.applyMatrix4(transforms[k]); needsRTE || (needsRTE = Geometry.needsRTE(scratchBox)); /** If we find one that needs RTE we break early */ if (needsRTE) break; } } /** We currently do not use RTE with hardware instancing * Explanation: https://www.notion.so/speckle/On-demand-RTE-fa57fff0685c4302a6970e81df3cab5b?pvs=4#1fbb78fc7aa680c4acc0de8929e92924 */ if (Number.parseInt(v) < this.minInstancedBatchVertices || !instanced || needsRTE) { rvs.forEach(nodeRv => { var _a, _b; const geometry = nodeRv.renderData.geometry; geometry.instanced = false; nodeRv.computeAABB(geometry.transform); if (((_b = (_a = geometry.transform) === null || _a === void 0 ? void 0 : _a.determinant()) !== null && _b !== void 0 ? _b : 0) < 0) geometry.flipNormals = true; /** I don't think we need to duplicate geometry here, now that we're transforming the batch position directly */ // const attribs = geometry.attributes // geometry.attributes = { // POSITION: attribs.POSITION.slice(), // INDEX: attribs.INDEX.slice(), // ...(attribs.COLOR && { // COLOR: attribs.COLOR.slice() // }) // } // /** - I don't particularly like this branch - // * All instances should have a transform. But it's the easiest thing we can do // * until we figure out the viewer <-> connector object duplication inconsistency // */ // if (geometry.transform) // Geometry.transformGeometryData(geometry, geometry.transform) // nodeRv.computeAABB() }); continue; } const materialHash = rvs[0].renderMaterialHash; const instancedBatch = await this.buildInstancedBatch(renderTree, rvs, materialHash); if (!instancedBatch) continue; this.batches[instancedBatch.id] = instancedBatch; min = Math.min(min, instancedBatch.renderViews.length); max = Math.max(max, instancedBatch.renderViews.length); batchCount++; yield this.batches[instancedBatch.id]; } } const renderViews = renderTree.getRenderableNodes(...speckleType).flatMap(node => { if (node.model.renderView) { if (node.model.renderView.renderData.geometry.instanced) { if (node.model.renderView.speckleType !== SpeckleType.Mesh) { return [node.model.renderView]; } return []; } return [node.model.renderView]; } else return []; }).sort((a, b) => { if (a.renderMaterialHash === 0) return -1; if (b.renderMaterialHash === 0) return 1; return a.renderMaterialHash - b.renderMaterialHash; }); const materialHashes = [...Array.from(new Set(renderViews.map(value => value.renderMaterialHash)))]; for (let i = 0; i < materialHashes.length; i++) { let renderViewsBatch = renderViews.filter(value => value.renderMaterialHash === materialHashes[i]); /** Prune any meshes with no geometry data */ let vertCount = 0; renderViewsBatch = renderViewsBatch.filter(value => { const valid = value.validGeometry; if (valid) { vertCount += value.renderData.geometry.attributes.POSITION.length / 3; } return valid || value.hasMetadata; }); if (renderViewsBatch.length === 0) continue; const batches = this.splitBatch(renderViewsBatch, vertCount); for (let k = 0; k < batches.length; k++) { pause.tick(100); if (pause.needsWait) { await pause.wait(50); } const restrictedRvs = batches[k]; const batch = await this.buildBatch(renderTree, restrictedRvs, materialHashes[i], batchType); if (!batch) continue; this.batches[batch.id] = batch; min = Math.min(min, batch.renderViews.length); max = Math.max(max, batch.renderViews.length); average += batch.renderViews.length; batchCount++; yield this.batches[batch.id]; } } Logger.warn(`Batch total: ${batchCount} min: ${min}, max: ${max}, average: ${average / materialHashes.length}`); } splitBatch(renderViews, vertCount) { /** We're first splitting based on the batch's max vertex count */ const vSplit = []; const vDiv = Math.floor(vertCount / this.maxBatchVertices); if (vDiv > 0) { let count = 0; let index = 0; vSplit.push([]); for (let k = 0; k < renderViews.length; k++) { /** Catering to typescript. * RenderViews are prefiltered based on valid geometry before reaching this point */ const ervee = renderViews[k]; const nextErvee = renderViews[k + 1]; if (!ervee.renderData.geometry.attributes) { throw new Error(`Invalid geometry on render view ${renderViews[k].renderData.id}`); } vSplit[index].push(renderViews[k]); count += ervee.renderData.geometry.attributes.POSITION.length / 3; const nexCount = count + (nextErvee && nextErvee.renderData.geometry.attributes ? nextErvee.renderData.geometry.attributes.POSITION.length / 3 : 0); if (nexCount >= this.maxBatchVertices && renderViews[k + 1]) { vSplit.push([]); index++; count = 0; } } } else { vSplit.push(renderViews); } /** Finally we're splitting again based on the batch's max object count */ const geometryType = renderViews[0].geometryType; const maxCount = this.getMaxObjectCount(geometryType); if (!maxCount) return vSplit; const oSplit = []; for (let i = 0; i < vSplit.length; i++) { const objCount = vSplit[i].length; const div = Math.floor(objCount / maxCount); const mod = objCount % maxCount; let index = 0; for (let k = 0; k < div; k++) { oSplit.push(vSplit[i].slice(index, index + maxCount)); index += maxCount; } if (mod > 0) { oSplit.push(vSplit[i].slice(index, index + mod)); } } return oSplit; } getMaxObjectCount(geometryType) { switch (geometryType) { case GeometryType.MESH: return this.maxBatchObjects; case GeometryType.TEXT: return this.maxBatchTextObjects; default: return 0; } } async buildInstancedBatch(renderTree, renderViews, materialHash) { if (!renderViews.length) { /** This is for the case when all renderviews have invalid geometries, and it generally * means there is something wrong with the stream */ Logger.warn('All renderviews have invalid geometries. Skipping batch!', renderViews); return null; } const matRef = renderViews[0].renderData.renderMaterial; const material = this.materials.getMaterial(materialHash, matRef, GeometryType.MESH); const batchID = MathUtils.generateUUID(); const geometryBatch = new InstancedMeshBatch(batchID, renderTree.id, renderViews, this.caps.isWebGL2); geometryBatch.setBatchMaterial(material); await geometryBatch.buildBatch(); return geometryBatch; } async buildBatch(renderTree, renderViews, materialHash, batchType) { if (!renderViews.length) { /** This is for the case when all renderviews have invalid geometries, and it generally * means there is something wrong with the stream */ Logger.warn('All renderviews have invalid geometries. Skipping batch!', renderViews); return null; } const geometryType = batchType !== undefined ? batchType : renderViews[0].geometryType; let matRef = renderViews[0].renderData.renderMaterial; if (geometryType === GeometryType.MESH) { matRef = renderViews[0].renderData.renderMaterial; } else if (geometryType === GeometryType.LINE) { matRef = renderViews[0].renderData.colorMaterial ? renderViews[0].renderData.colorMaterial : renderViews[0].renderData.displayStyle; } else if (geometryType === GeometryType.POINT) { matRef = renderViews[0].renderData.colorMaterial ? renderViews[0].renderData.colorMaterial : renderViews[0].renderData.renderMaterial || renderViews[0].renderData.displayStyle; } else if (geometryType === GeometryType.POINT_CLOUD) { matRef = renderViews[0].renderData.renderMaterial; } else if (geometryType === GeometryType.TEXT) { matRef = renderViews[0].renderData.colorMaterial ? renderViews[0].renderData.colorMaterial : renderViews[0].renderData.displayStyle; } const material = this.materials.getMaterial(materialHash, matRef, geometryType); const batchID = MathUtils.generateUUID(); let geometryBatch = null; switch (geometryType) { case GeometryType.MESH: geometryBatch = new MeshBatch(batchID, renderTree.id, renderViews, this.caps.floatVertexTextures ? TransformStorage.VERTEX_TEXTURE : TransformStorage.UNIFORM_ARRAY); break; case GeometryType.LINE: geometryBatch = new LineBatch(batchID, renderTree.id, renderViews); break; case GeometryType.POINT: geometryBatch = new PointBatch(batchID, renderTree.id, renderViews); break; case GeometryType.POINT_CLOUD: geometryBatch = new PointBatch(batchID, renderTree.id, renderViews); break; case GeometryType.TEXT: geometryBatch = new TextBatch(batchID, renderTree.id, renderViews); break; } geometryBatch.setBatchMaterial(material); await geometryBatch.buildBatch(); return geometryBatch; } update(deltaTime) { for (const batchId in this.batches) { this.batches[batchId].onUpdate(deltaTime); } } render(renderer) { for (const batchId in this.batches) { const batch = this.batches[batchId]; if (batch.onRender) batch.onRender(renderer); } } saveVisiblity() { const visibilityRanges = {}; for (const k in this.batches) { const batch = this.batches[k]; visibilityRanges[k] = batch.getVisibleRange(); } return visibilityRanges; } applyVisibility(ranges) { for (const k in this.batches) { const batch = this.batches[k]; const range = ranges[k]; if (!range) { batch.setVisibleRange([NoneBatchUpdateRange]); } else { batch.setVisibleRange([range]); } } } getVisibility(objectVisibility) { switch (objectVisibility) { case ObjectVisibility.OPAQUE: return this.getOpaque(); case ObjectVisibility.TRANSPARENT: return this.getTransparent(); case ObjectVisibility.STENCIL: return this.getStencil(); case ObjectVisibility.DEPTH: return this.getDepth(); case ObjectVisibility.CUSTOM: Logger.error('Custom visibility requires visibility function'); return {}; } } getTransparent() { const visibilityRanges = {}; for (const k in this.batches) { visibilityRanges[k] = this.batches[k].getTransparent(); } return visibilityRanges; } getStencil() { const visibilityRanges = {}; for (const k in this.batches) { visibilityRanges[k] = this.batches[k].getStencil(); } return visibilityRanges; } getOpaque() { const visibilityRanges = {}; for (const k in this.batches) { visibilityRanges[k] = this.batches[k].getOpaque(); } return visibilityRanges; } getDepth() { const visibilityRanges = {}; for (const k in this.batches) { visibilityRanges[k] = this.batches[k].getDepth(); } return visibilityRanges; } overrideMaterial(ranges, material) { for (const k in ranges) { if (this.batches[k].geometryType !== GeometryType.MESH) continue; const mesh = this.batches[k].renderObject; mesh.setOverrideMaterial(material); } } overrideBatchMaterial(ranges, material) { for (const k in ranges) { if (this.batches[k].geometryType !== GeometryType.MESH) continue; const mesh = this.batches[k].renderObject; mesh.setOverrideBatchMaterial(material); } } restoreMaterial(ranges) { for (const k in ranges) { if (this.batches[k].geometryType !== GeometryType.MESH) continue; const mesh = this.batches[k].renderObject; mesh.restoreMaterial(); } } restoreBatchMaterial(ranges) { for (const k in ranges) { if (this.batches[k].geometryType !== GeometryType.MESH) continue; const mesh = this.batches[k].renderObject; mesh.restoreBatchMaterial(); } } purgeBatches(subtreeId) { for (const k in this.batches) { if (this.batches[k].subtreeId === subtreeId) { this.batches[k].purge(); delete this.batches[k]; } } } getBatches(subtreeId, geometryType) { const batches = Object.values(this.batches); return batches.filter(value => { const subtree = subtreeId !== undefined ? value.subtreeId === subtreeId : true; const type = geometryType !== undefined ? this.isBatchType(value, geometryType) : true; return subtree && type; }); } isBatchType(batch, geometryType) { if (geometryType === undefined) return true; let isBatchType = false; const array = Array.isArray(geometryType) ? geometryType : [geometryType]; array.forEach(value => { switch (value) { case GeometryType.MESH: isBatchType || (isBatchType = batch instanceof MeshBatch || batch instanceof InstancedMeshBatch); break; case GeometryType.LINE: isBatchType || (isBatchType = batch instanceof LineBatch); break; case GeometryType.POINT: isBatchType || (isBatchType = batch instanceof PointBatch); break; case GeometryType.POINT_CLOUD: isBatchType || (isBatchType = batch instanceof PointBatch); break; case GeometryType.TEXT: isBatchType || (isBatchType = batch instanceof TextBatch); break; default: isBatchType = false; } }); return isBatchType; } getBatch(rv) { return this.batches[rv.batchId]; } getRenderView(batchId, index) { if (!this.batches[batchId]) { Logger.error('Invalid batch id!'); return null; } return this.batches[batchId].getRenderView(index); } getRenderViewMaterial(batchId, index) { if (!this.batches[batchId]) { Logger.error('Invalid batch id!'); return null; } return this.batches[batchId].getMaterialAtIndex(index); } resetBatchesDrawRanges() { for (const k in this.batches) { this.batches[k].resetDrawRanges(); } } /** * Used for debuggin only */ isolateBatch(batchId) { for (const k in this.batches) { if (k !== batchId) { this.batches[k].setDrawRanges([{ offset: 0, count: this.batches[k].getCount(), material: this.materials.getFilterMaterial(this.batches[k].renderViews[0], { filterType: FilterMaterialType.GHOST }) }]); } } } } var InputEvent; (function (InputEvent) { InputEvent["PointerDown"] = "pointer-down"; InputEvent["PointerUp"] = "pointer-up"; InputEvent["PointerMove"] = "pointer-move"; InputEvent["PointerCancel"] = "pointer-cancel"; InputEvent["Wheel"] = "wheel"; InputEvent["Click"] = "click"; InputEvent["DoubleClick"] = "double-click"; InputEvent["KeyUp"] = "key-up"; InputEvent["KeyDown"] = "key-down"; InputEvent["ContextMenu"] = "context-menu"; })(InputEvent || (InputEvent = {})); //TO DO: Define proper interface for InputEvent data class Input extends EventEmitter { constructor(container, restrictKeyInput = false) { super(); this.tapTimeout = 0; this.lastTap = 0; this.lastClick = 0; this.container = container; if (restrictKeyInput) { // Make canvas focusable for scoped keyboard events this.container.tabIndex = -1; // Remove default focus outline this.container.style.outline = 'none'; } // Handle mouseclicks let mdTime; this.container.addEventListener('pointerdown', e => { e.preventDefault(); this.container.focus(); // preventDefault blocks default focus const loc = this._getNormalisedClickPosition(e); loc.event = e; mdTime = new Date().getTime(); this.emit(InputEvent.PointerDown, loc); }); this.container.addEventListener('pointerup', e => { e.preventDefault(); const loc = this._getNormalisedClickPosition(e); loc.event = e; this.emit(InputEvent.PointerUp, loc); const now = new Date().getTime(); const delta = now - mdTime; const deltaClick = now - this.lastClick; if (delta > Input.MIN_CLICK_TIMING || deltaClick < Input.MAX_DOUBLE_CLICK_TIMING) return; if (e.shiftKey) loc.multiSelect = true; this.emit(InputEvent.Click, loc); this.lastClick = new Date().getTime(); }); // Doubleclicks on touch devices // http://jsfiddle.net/brettwp/J4djY/ this.container.addEventListener('touchstart', e => { this.touchLocation = e.targetTouches[0]; }); this.container.addEventListener('touchend', e => { // Ignore the first `touchend` when pinch-zooming (so we don't consider double-tap) if (e.targetTouches.length > 0) { return; } const currentTime = new Date().getTime(); const tapLength = currentTime - this.lastTap; clearTimeout(this.tapTimeout); if (tapLength < 500 && tapLength > 0) { if (this.touchLocation) { const loc = this._getNormalisedClickPosition(this.touchLocation); this.emit(InputEvent.DoubleClick, loc); } } else { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore this.tapTimeout = setTimeout(() => { clearTimeout(this.tapTimeout); }, 500); } this.lastTap = currentTime; }); this.container.addEventListener('dblclick', e => { const data = this._getNormalisedClickPosition(e); data.event = e; if (e.shiftKey) data.multiSelect = true; this.emit(InputEvent.DoubleClick, data); }); this.container.addEventListener('pointermove', e => { const data = this._getNormalisedClickPosition(e); data.event = e; this.emit(InputEvent.PointerMove, data); }); const keySource = restrictKeyInput ? this.container : document; keySource.addEventListener('keyup', e => { this.emit(InputEvent.KeyUp, e); }); keySource.addEventListener('keydown', e => { this.emit(InputEvent.KeyDown, e); }); this.container.addEventListener('wheel', e => { this.emit(InputEvent.Wheel, e); }); document.addEventListener('pointercancel', e => { const loc = this._getNormalisedClickPosition(e); loc.event = e; this.emit(InputEvent.PointerUp, loc); this.emit(InputEvent.PointerCancel, loc); }); this.container.addEventListener('contextmenu', e => { this.emit(InputEvent.ContextMenu, e); }); } on(eventType, listener) { super.on(eventType, listener); } _getNormalisedClickPosition(e) { // Reference: https://threejsfundamentals.org/threejs/lessons/threejs-picking.html const canvas = this.container; const rect = this.container.getBoundingClientRect(); const pos = { x: (e.clientX - rect.left) * canvas.width / rect.width, y: (e.clientY - rect.top) * canvas.height / rect.height }; const v = new Vector2(pos.x / canvas.width * 2 - 1, pos.y / canvas.height * -2 + 1); // console.warn(v) return v; } dispose() { super.dispose(); } } Input.MAX_DOUBLE_CLICK_TIMING = 500; Input.MIN_CLICK_TIMING = 200; const NOT_INTERSECTED = 0; const INTERSECTED = 1; const CONTAINED = 2; class SpeckleRaycaster extends Raycaster { constructor(origin, direction, near = 0, far = Infinity) { super(origin, direction, near, far); this.intersectTASOnly = false; this.onObjectIntersectionTest = null; this.layers.disableAll(); this.layers.enable(ObjectLayers.STREAM_CONTENT); this.layers.enable(ObjectLayers.STREAM_CONTENT_MESH); this.layers.enable(ObjectLayers.STREAM_CONTENT_LINE); this.layers.enable(ObjectLayers.STREAM_CONTENT_TEXT); this.layers.enable(ObjectLayers.STREAM_CONTENT_POINT_CLOUD); // OFF by default this.layers.enable(ObjectLayers.STREAM_CONTENT_POINT); this.params = { Line2: { threshold: 0 } }; } intersectObjects(objects, recursive = true, intersects = []) { for (let i = 0, l = objects.length; i < l; i++) { const ret = intersectObject(objects[i], this, intersects, recursive); if (this.firstHitOnly === true && !ret) break; } intersects.sort(ascSort); return intersects; } } function ascSort(a, b) { return a.distance - b.distance; } function intersectObject(object, raycaster, intersects, recursive) { const len = intersects.length; if (object.layers.test(raycaster.layers)) { if (raycaster.onObjectIntersectionTest) { raycaster.onObjectIntersectionTest(object); } object.raycast(raycaster, intersects); } if (raycaster.firstHitOnly === true && intersects.length - len > 0) { return true; } let ret = false; recursive && (recursive = // eslint-disable-next-line eqeqeq object.userData.raycastChildren != undefined ? object.userData.raycastChildren : true); if (recursive === true) { const children = object.children; for (let i = 0, l = children.length; i < l; i++) { ret = intersectObject(children[i], raycaster, intersects, true); if (raycaster.firstHitOnly === true && ret) break; } } return ret; } class Intersections { constructor() { this.boxBuffer = new Box3(); this.vec0Buffer = new Vector4(); this.vec1Buffer = new Vector4(); this.raycaster = new SpeckleRaycaster(); this.raycaster.params.Line = { threshold: 0.01 }; this.raycaster.params.Points = { threshold: 0.01 }; this.raycaster.params.Line2 = { threshold: 1 }; this.raycaster.onObjectIntersectionTest = this.onObjectIntersection.bind(this); } onObjectIntersection(obj) { if (obj instanceof LineSegments2) { const box = this.boxBuffer.setFromObject(obj); const min = this.vec0Buffer.set(box.min.x, box.min.y, box.min.z, 1); const max = this.vec1Buffer.set(box.max.y, box.max.y, box.max.z, 1); min.applyMatrix4(this.raycaster.camera.matrixWorldInverse).applyMatrix4(this.raycaster.camera.projectionMatrix); max.applyMatrix4(this.raycaster.camera.matrixWorldInverse).applyMatrix4(this.raycaster.camera.projectionMatrix); min.multiplyScalar(0.5).multiplyScalar(1 / min.w).addScalar(0.5); max.multiplyScalar(0.5).multiplyScalar(1 / max.w).addScalar(0.5); const ssDistance = new Vector2().set(min.x, min.y).distanceTo(new Vector2(max.x, max.y)); const mat = obj.material; const lineWidth = mat.linewidth; const worldSpace = mat.worldUnits; /** So we empirically adjust the threshold of each line(batch) based on it's * original line width and how zoomed in the camer is on the line(batch) */ if (!worldSpace) { this.raycaster.params.Line2.threshold = ssDistance < 1 ? lineWidth * 8 : lineWidth * 5; } else { this.raycaster.params.Line2.threshold = ssDistance < 1 ? lineWidth * 2 : lineWidth; } } } intersect(scene, camera, point, castLayers = undefined, nearest = true, bounds, firstOnly = false, tasOnly = false) { this.raycaster.setFromCamera(point, camera); this.raycaster.firstHitOnly = firstOnly; this.raycaster.intersectTASOnly = tasOnly; const preserveMask = this.setRaycasterLayers(castLayers); let result; if (castLayers === ObjectLayers.STREAM_CONTENT_MESH) { result = this.intersectInternal(scene, nearest, bounds); } else result = this.intersectInternal(scene, nearest, bounds); this.raycaster.layers.mask = preserveMask; return result; } intersectRay(scene, camera, ray, castLayers = undefined, nearest = true, bounds, firstOnly = false, tasOnly = false) { this.raycaster.camera = camera; this.raycaster.set(ray.origin, ray.direction); this.raycaster.firstHitOnly = firstOnly; this.raycaster.intersectTASOnly = tasOnly; const preserveMask = this.setRaycasterLayers(castLayers); let result; if (castLayers === ObjectLayers.STREAM_CONTENT_MESH) { result = this.intersectInternal(scene, nearest, bounds); } else result = this.intersectInternal(scene, nearest, bounds); this.raycaster.layers.mask = preserveMask; return result; } setRaycasterLayers(castLayers) { const preserveMask = this.raycaster.layers.mask; if (castLayers !== undefined) { this.raycaster.layers.disableAll(); if (Array.isArray(castLayers)) castLayers.forEach(layer => { this.raycaster.layers.enable(layer); });else { this.raycaster.layers.enable(castLayers); } } return preserveMask; } intersectInternal(scene, nearest, bounds) { let results = []; const target = scene.getObjectByName('ContentGroup'); if (target) { // const start = performance.now() results = this.raycaster.intersectObjects(target.children); // Logger.warn('Interesct time -> ', performance.now() - start) } if (results.length === 0) return null; if (nearest) results.sort((a, b) => { return a.distance - b.distance; }); if (bounds) { /** We slightly increase the tested bounds to account for fp precision issues which * have proven to arise exactly at the edge of the bounds. Our BVH returns intersection * points ever so slightly off the actual surface, so for very thin geometries it might * fall outside of the bounds */ this.boundsBuffer = World.expandBoxRelative(bounds); results = results.filter(result => { return this.boundsBuffer.containsPoint(result.point) || (result.pointOnLine ? this.boundsBuffer.containsPoint(result.pointOnLine) : false); }); } return results; } } Intersections.aabbPlanePoints = (plane, aabb) => { const ray = new Ray(); const outPoints = new Array(); // Test edges along X axis, pointing right. const dir = new Vector3(aabb.max.x - aabb.min.x, 0, 0); const orig = new Vector3().copy(aabb.min); ray.set(orig, dir); let t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } orig.set(aabb.min.x, aabb.max.y, aabb.min.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } orig.set(aabb.min.x, aabb.min.y, aabb.max.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } orig.set(aabb.min.x, aabb.max.y, aabb.max.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } // Test edges along Y axis, pointing up. dir.set(0, aabb.max.y - aabb.min.y, 0); orig.set(aabb.min.x, aabb.min.y, aabb.min.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } orig.set(aabb.max.x, aabb.min.y, aabb.min.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } orig.set(aabb.min.x, aabb.min.y, aabb.max.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } orig.set(aabb.max.x, aabb.min.y, aabb.max.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } // Test edges along Z axis, pointing forward. dir.set(0, 0, aabb.max.z - aabb.min.z); orig.set(aabb.min.x, aabb.min.y, aabb.min.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } orig.set(aabb.max.x, aabb.min.y, aabb.min.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } orig.set(aabb.min.x, aabb.max.y, aabb.min.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } orig.set(aabb.max.x, aabb.max.y, aabb.min.z); ray.set(orig, dir); t = ray.distanceToPlane(plane); if (t) { outPoints.push(new Vector3().copy(orig).addScaledVector(dir, t)); } return outPoints; }; const speckleShadowcatcherVert = /* glsl */` varying vec2 vUv; void main() { vUv = vec2(1. - uv.x, uv.y); gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); } `; const speckleShadowcatcherFrag = /* glsl */` varying vec2 vUv; uniform sampler2D tex0; uniform sampler2D tex1; uniform sampler2D tex2; uniform sampler2D tex3; uniform vec4 weights; uniform float sigmoidRange; uniform float sigmoidStrength; void main() { float color0 = texture2D(tex0, vUv).r * weights.x; float color1 = texture2D(tex1, vUv).r * weights.y; float color2 = texture2D(tex2, vUv).r * weights.z; float color3 = texture2D(tex3, vUv).r * weights.w; // float c0 = mix(color0, 0., color1); // float c1 = mix(color1, 0., color0); // float c2 = mix(color3, 0., color0 * 0.5 + color1 * 0.5); // float sum = c0 + c1 + c2; float sum = color0 + color1 + color3 + color2; float a = sigmoidRange;//2.; float b = 0.03; float c = sigmoidStrength;//2.43; float d = 0.59; float e = 0.14; sum = clamp((sum*(a*sum+b))/(sum*(c*sum+d)+e), 0., 1.); vec2 sUv = vUv * 2. - 1.; sum *= 1. - pow(abs(sUv.x), 6.); sum *= 1. - pow(abs(sUv.y), 6.); gl_FragColor = vec4( vec3(sum), sum ); } `; class SpeckleShadowcatcherMaterial extends SpeckleBasicMaterial { get vertexProgram() { return speckleShadowcatcherVert; } get fragmentProgram() { return speckleShadowcatcherFrag; } get uniformsDef() { return { ...super.uniformsDef, tex0: null, tex1: null, tex2: null, tex3: null, weights: new Vector4(), sigmoidRange: 0, sigmoidStrength: 0 }; } constructor(parameters, defines = []) { super(parameters, defines); } } const DefaultShadowcatcherConfig = { textureSize: 512, weights: { x: 1, y: 1, z: 0, w: 1 }, blurRadius: 16, stdDeviation: 4, sigmoidRange: 1.1, sigmoidStrength: 2 }; class ShadowcatcherPass extends BaseGPass { get displayName() { return 'Shadowcatcher'; } get outputTexture() { return this.outputTarget ? this.outputTarget.texture : null; } set needsUpdate(value) { this._needsUpdate = value; } get drawDepthMaterial() { return this.depthMaterial; } constructor() { super(); this.levels = 4; this.debugCamera = false; this.renderTargets = []; this.tempTargets = []; this._needsUpdate = false; this.blurStdDev = DefaultShadowcatcherConfig.stdDeviation; this.blurRadius = DefaultShadowcatcherConfig.blurRadius; this.prevBlurStdDev = 0; this.prevBlurRadius = 0; this.onBeforeRender = undefined; this.onAfterRender = undefined; for (let k = 0; k < this.levels; k++) { const rt = new WebGLRenderTarget(256, 256, { minFilter: LinearFilter, magFilter: LinearFilter }); this.renderTargets.push(rt); this.tempTargets.push(rt.clone()); } this.outputTarget = new WebGLRenderTarget(256, 256, { minFilter: LinearFilter, magFilter: LinearFilter }); this.outputTarget.texture.wrapS = RepeatWrapping; this.outputTarget.texture.wrapT = RepeatWrapping; this.camera = new OrthographicCamera(256 / -2, 256 / 2, 256 / 2, 256 / -2, 0, 10); this.vBlurMaterial = new ShaderMaterial({ uniforms: UniformsUtils.clone(DepthLimitedBlurShader.uniforms), defines: Object.assign({}, DepthLimitedBlurShader.defines), vertexShader: DepthLimitedBlurShader.vertexShader, fragmentShader: DepthLimitedBlurShader.fragmentShader }); this.vBlurMaterial.defines['DEPTH_PACKING'] = 1; this.vBlurMaterial.blending = NoBlending; this.hBlurMaterial = new ShaderMaterial({ uniforms: UniformsUtils.clone(DepthLimitedBlurShader.uniforms), defines: Object.assign({}, DepthLimitedBlurShader.defines), vertexShader: DepthLimitedBlurShader.vertexShader, fragmentShader: DepthLimitedBlurShader.fragmentShader }); this.hBlurMaterial.defines['DEPTH_PACKING'] = 1; this.hBlurMaterial.blending = NoBlending; this.depthMaterial = new SpeckleDepthMaterial({ depthPacking: BasicDepthPacking }, ['USE_RTE']); this.depthMaterial.blending = NoBlending; this.depthMaterial.side = DoubleSide; this.blendMaterial = new SpeckleShadowcatcherMaterial({}); this.fsQuad = new FullScreenQuad(this.vBlurMaterial); } update(scene) { this.scene = scene; if (this._needsUpdate) { if (!this.cameraHelper && this.debugCamera) { this.cameraHelper = new CameraHelper(this.camera); this.cameraHelper.layers.set(ObjectLayers.PROPS); this.scene.add(this.cameraHelper); } if (this.cameraHelper) { this.cameraHelper.update(); } /** BLUR DEFINES */ this.vBlurMaterial.defines['PERSPECTIVE_CAMERA'] = 0; this.hBlurMaterial.defines['PERSPECTIVE_CAMERA'] = 0; /** BLUR UNIFORMS */ this.vBlurMaterial.uniforms['cameraNear'].value = this.camera.near; this.vBlurMaterial.uniforms['cameraFar'].value = this.camera.far; this.hBlurMaterial.uniforms['cameraNear'].value = this.camera.near; this.hBlurMaterial.uniforms['cameraFar'].value = this.camera.far; /** BLUR UNIFORM PARAMS */ const depthCutoff = 0; this.vBlurMaterial.uniforms['depthCutoff'].value = depthCutoff; this.hBlurMaterial.uniforms['depthCutoff'].value = depthCutoff; if (this.prevBlurStdDev !== this.blurStdDev || this.prevBlurRadius !== this.blurRadius) { BlurShaderUtils.configure(this.vBlurMaterial, this.blurRadius, this.blurStdDev, new Vector2(0, 1)); BlurShaderUtils.configure(this.hBlurMaterial, this.blurRadius, this.blurStdDev, new Vector2(1, 0)); this.prevBlurStdDev = this.blurStdDev; this.prevBlurRadius = this.blurRadius; } this.vBlurMaterial.needsUpdate = true; this.hBlurMaterial.needsUpdate = true; } } render(_renderer) { if (this._needsUpdate) { const renderer = _renderer; renderer.RTEBuffers.push(); renderer.updateRTEViewModel(this.camera); const colorBuffer = new Color(); renderer.getClearColor(colorBuffer); const originalClearAlpha = renderer.getClearAlpha(); const originalAutoClear = renderer.autoClear; if (this.onBeforeRender) this.onBeforeRender(); this.applyLayers(this.camera); const maxCameraFar = this.camera.far; for (let k = 0; k < this.renderTargets.length; k++) { this.camera.far = maxCameraFar; if (k < 2) { this.camera.far = maxCameraFar / 100; } if (k === 2) { this.camera.far = maxCameraFar / 4; } this.camera.updateProjectionMatrix(); renderer.setRenderTarget(this.renderTargets[k]); renderer.setClearColor(0x000000); renderer.setClearAlpha(1); renderer.clear(); renderer.render(this.scene, this.camera); this.scene.overrideMaterial = null; renderer.setRenderTarget(this.tempTargets[k]); renderer.setClearColor(0xffffff); renderer.setClearAlpha(1.0); renderer.clear(); this.vBlurMaterial.uniforms['tDiffuse'].value = this.renderTargets[k].texture; this.vBlurMaterial.uniforms['size'].value.set(this.renderTargets[k].width, this.renderTargets[k].height); this.vBlurMaterial.needsUpdate = true; this.fsQuad.material = this.vBlurMaterial; this.fsQuad.render(renderer); renderer.setRenderTarget(this.renderTargets[k]); this.hBlurMaterial.uniforms['tDiffuse'].value = this.tempTargets[k].texture; this.hBlurMaterial.uniforms['size'].value.set(this.tempTargets[k].width, this.tempTargets[k].height); this.hBlurMaterial.needsUpdate; this.fsQuad.material = this.hBlurMaterial; this.fsQuad.render(renderer); } renderer.setRenderTarget(this.outputTarget); renderer.setClearColor(0x000000); renderer.setClearAlpha(1); this.blendMaterial.userData.tex0.value = this.renderTargets[0].texture; this.blendMaterial.userData.tex1.value = this.renderTargets[1].texture; this.blendMaterial.userData.tex2.value = this.renderTargets[2].texture; this.blendMaterial.userData.tex3.value = this.renderTargets[3].texture; this.fsQuad.material = this.blendMaterial; this.fsQuad.render(renderer); renderer.setRenderTarget(null); renderer.autoClear = originalAutoClear; renderer.setClearColor(colorBuffer); renderer.setClearAlpha(originalClearAlpha); renderer.RTEBuffers.pop(); if (this.onAfterRender) this.onAfterRender(); this._needsUpdate = false; } return false; } updateClippingPlanes(planes) { this.depthMaterial.clippingPlanes = planes; this.depthMaterial.needsUpdate = true; } setOutputSize(width, height) { var _a; if (this.renderTargets[0].width !== width || this.renderTargets[0].height !== height) { (_a = this.outputTarget) === null || _a === void 0 ? void 0 : _a.setSize(width, height); this.blendMaterial.needsUpdate = true; let div = 1; for (let k = 0; k < this.renderTargets.length; k++) { const w = Math.trunc(width * div); const h = Math.trunc(height * div); this.renderTargets[k].setSize(w, h); this.tempTargets[k].setSize(w, h); div *= 0.5; } } } setWeights(weights) { this.blendMaterial.userData.weights.value = new Vector4(weights.x, weights.y, weights.z, weights.w); this.blendMaterial.needsUpdate = true; } updateCamera(planeBox, near, far) { const planeSize = planeBox.getSize(new Vector3()); const planeCenter = planeBox.getCenter(new Vector3()); this.camera.position.copy(new Vector3().copy(planeCenter).add(new Vector3(0, 0, -0.001))); this.camera.lookAt(planeCenter); this.camera.left = planeSize.x / -2; this.camera.right = planeSize.x / 2; this.camera.top = planeSize.y / 2; this.camera.bottom = planeSize.y / -2; this.camera.near = near; this.camera.far = far; this.camera.updateProjectionMatrix(); this.camera.updateMatrixWorld(true); } updateConfig(config) { this.blurRadius = config.blurRadius; this.blurStdDev = config.stdDeviation; this.blendMaterial.userData.sigmoidRange.value = config.sigmoidRange; this.blendMaterial.userData.sigmoidStrength.value = config.sigmoidStrength; this.blendMaterial.needsUpdate = true; } setSize(width, height) { } } class Shadowcatcher { get shadowcatcherMesh() { return this.planeMesh; } set configuration(config) { this._config = JSON.parse(JSON.stringify(config)); } constructor(layer, renderlayers) { this.planeSize = new Vector2(); this._config = DefaultShadowcatcherConfig; this.shadowcatcherPass = new ShadowcatcherPass(); this.shadowcatcherPass.setLayers(renderlayers); this.displayMaterial = new SpeckleBasicMaterial({ color: 0xffffff }, ['USE_RTE']); this.displayMaterial.toneMapped = false; this.displayMaterial.map = this.shadowcatcherPass.outputTexture; // this.displayMaterial.map.wrapS = RepeatWrapping // this.displayMaterial.map.repeat.x = -1 this.displayMaterial.toneMapped = false; this.displayMaterial.transparent = true; this.displayMaterial.blending = CustomBlending; this.displayMaterial.blendEquation = AddEquation; this.displayMaterial.blendEquationAlpha = MaxEquation; this.displayMaterial.blendSrc = ZeroFactor; this.displayMaterial.blendSrcAlpha = OneFactor; this.displayMaterial.blendDst = DstAlphaFactor; this.displayMaterial.blendDstAlpha = OneFactor; this.displayMaterial.alphaTest = 0.001; this.displayMaterial.depthWrite = false; this.planeMesh = new Mesh(); this.planeMesh.material = this.displayMaterial; this.planeMesh.layers.set(layer); this.planeMesh.name = Shadowcatcher.MESH_NAME; this.planeMesh.frustumCulled = false; } update(scene) { this.shadowcatcherPass.updateConfig(this._config); this.shadowcatcherPass.update(scene); } render(renderer) { this.shadowcatcherPass.render(renderer); } bake(worldBox, maxTexSize, force) { this.updatePlaneMesh(worldBox, force); const size = this.getTextureSize(maxTexSize); const planeBox = new Box3().setFromObject(this.planeMesh); const worldHeight = worldBox.getSize(new Vector3()).z; this.shadowcatcherPass.updateCamera(planeBox, 0.001, worldHeight); this.shadowcatcherPass.setOutputSize(size.x, size.y); this.shadowcatcherPass.setWeights(this._config.weights); this.shadowcatcherPass.needsUpdate = true; } updateClippingPlanes(planes) { this.displayMaterial.clippingPlanes = planes; this.displayMaterial.needsUpdate = true; this.shadowcatcherPass.updateClippingPlanes(planes); } getTextureSize(maxTexSize) { const aspect = this.planeSize.x / this.planeSize.y; const size = new Vector2(); size.x = Math.trunc(this._config.textureSize); size.y = Math.trunc(this._config.textureSize / aspect); if (size.y > maxTexSize * Shadowcatcher.MAX_TEXTURE_SIZE_SCALE) { size.y = maxTexSize * Shadowcatcher.MAX_TEXTURE_SIZE_SCALE; size.x = aspect * size.y; } return size; } updatePlaneMesh(box, force) { const boxSize = box.getSize(new Vector3()); const boxCenter = box.getCenter(new Vector3()); const needsRebuild = new Vector2(boxSize.x, boxSize.y).distanceTo(this.planeSize) > 0.001; if (needsRebuild || force) this.updatePlaneMeshGeometry(new Vector2(boxSize.x * 2, boxSize.y * 2), new Vector3(boxCenter.x, boxCenter.y, boxCenter.z - boxSize.z * 0.5 - 0.001)); this.planeSize.set(boxSize.x, boxSize.y); } updatePlaneMeshGeometry(size, origin) { if (this.planeMesh.geometry) { this.planeMesh.geometry.dispose(); } const groundPlaneGeometry = new PlaneGeometry(size.x, size.y, Shadowcatcher.PLANE_SUBD, Shadowcatcher.PLANE_SUBD); const mat = new Matrix4().makeTranslation(origin.x, origin.y, origin.z); groundPlaneGeometry.applyMatrix4(mat); const doublePositions = new Float64Array(groundPlaneGeometry.attributes.position.array); Geometry.updateRTEGeometry(groundPlaneGeometry, doublePositions); this.planeMesh.geometry = groundPlaneGeometry; this.planeMesh.geometry.computeBoundingBox(); } } Shadowcatcher.MESH_NAME = 'Shadowcatcher'; Shadowcatcher.PLANE_SUBD = 2; Shadowcatcher.MAX_TEXTURE_SIZE_SCALE = 0.5; var CameraEvent; (function (CameraEvent) { CameraEvent["Stationary"] = "stationary"; CameraEvent["Dynamic"] = "dynamic"; CameraEvent["FrameUpdate"] = "frame-update"; CameraEvent["LateFrameUpdate"] = "late-frame-update"; CameraEvent["ProjectionChanged"] = "projection-changed"; CameraEvent["InteractionStarted"] = "interaction-started"; CameraEvent["InteractionEnded"] = "interaction-ended"; })(CameraEvent || (CameraEvent = {})); var CameraProjection; (function (CameraProjection) { CameraProjection[CameraProjection["PERSPECTIVE"] = 0] = "PERSPECTIVE"; CameraProjection[CameraProjection["ORTHOGRAPHIC"] = 1] = "ORTHOGRAPHIC"; })(CameraProjection || (CameraProjection = {})); /* eslint-disable camelcase */ class RTEBuffers { constructor() { this.viewer = new Vector3(); this.viewerLow = new Vector3(); this.viewerHigh = new Vector3(); this.rteViewModelMatrix = new Matrix4(); this.shadowViewer = new Vector3(); this.shadowViewerLow = new Vector3(); this.shadowViewerHigh = new Vector3(); this.rteShadowViewModelMatrix = new Matrix4(); this.rteShadowMatrix = new Matrix4(); } copy(from, to) { to.viewer.copy(from.viewer); to.viewerLow.copy(from.viewerLow); to.viewerHigh.copy(from.viewerHigh); to.rteViewModelMatrix.copy(from.rteViewModelMatrix); to.shadowViewer.copy(from.shadowViewer); to.shadowViewerLow.copy(from.shadowViewerLow); to.shadowViewerHigh.copy(from.shadowViewerHigh); to.rteShadowViewModelMatrix.copy(from.rteShadowViewModelMatrix); to.rteShadowMatrix.copy(from.rteShadowMatrix); } push() { if (!this._cache) this._cache = new RTEBuffers(); this.copy(this, this._cache); } pop() { if (!this._cache) this._cache = new RTEBuffers(); this.copy(this._cache, this); } } class SpeckleWebGLRenderer extends WebGLRenderer { constructor() { super(...arguments); this.RTEBuffers = new RTEBuffers(); this.readRenderTargetPixels = (renderTarget, x, y, width, height, buffer, activeCubeFaceIndex = 0) => { if (!(renderTarget && (renderTarget instanceof WebGLRenderTarget || renderTarget instanceof WebGLMultipleRenderTargets))) { console.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.'); return; } let framebuffer = this.properties.get(renderTarget).__webglFramebuffer; if (renderTarget instanceof WebGLCubeRenderTarget && activeCubeFaceIndex !== undefined) { framebuffer = framebuffer[activeCubeFaceIndex]; } if (framebuffer) { this.state.bindFramebuffer(36160, framebuffer); try { const texture = Array.isArray(renderTarget.texture) ? renderTarget.texture[0] : renderTarget.texture; const textureFormat = texture.format; const textureType = texture.type; if (textureFormat !== RGBAFormat && this.convert(textureFormat) !== this.context.getParameter(35739)) { console.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.'); return; } const halfFloatSupportedByExt = textureType === HalfFloatType && (this.extensions.has('EXT_color_buffer_half_float') || this.capabilities.isWebGL2 && this.extensions.has('EXT_color_buffer_float')); if (textureType !== UnsignedByteType && this.convert(textureType) !== this.context.getParameter(35738) && // Edge and Chrome Mac < 52 (#9513) !(textureType === FloatType && (this.capabilities.isWebGL2 || this.extensions.has('OES_texture_float') || this.extensions.has('WEBGL_color_buffer_float'))) && // Chrome Mac >= 52 and Firefox !halfFloatSupportedByExt) { console.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.'); return; } // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) if (x >= 0 && x <= renderTarget.width - width && y >= 0 && y <= renderTarget.height - height) { this.context.readPixels(x, y, width, height, this.convert(textureFormat), this.convert(textureType), buffer); } } finally { // restore framebuffer of current render target if necessary const framebuffer = this.getRenderTarget() !== null ? this.properties.get(this.getRenderTarget()).__webglFramebuffer : null; this.state.bindFramebuffer(36160, framebuffer); } } }; } updateRTEViewModel(camera) { this.RTEBuffers.rteViewModelMatrix.copy(camera.matrixWorldInverse); this.RTEBuffers.rteViewModelMatrix.elements[12] = 0; this.RTEBuffers.rteViewModelMatrix.elements[13] = 0; this.RTEBuffers.rteViewModelMatrix.elements[14] = 0; this.RTEBuffers.viewer.set(camera.matrixWorld.elements[12], camera.matrixWorld.elements[13], camera.matrixWorld.elements[14]); Geometry.DoubleToHighLowVector(this.RTEBuffers.viewer, this.RTEBuffers.viewerLow, this.RTEBuffers.viewerHigh); } /** Taken from three since they hide it, thank you very much */ convert(p, encoding = null) { let extension; if (p === UnsignedByteType) return 5121; if (p === UnsignedShort4444Type) return 32819; if (p === UnsignedShort5551Type) return 32820; if (p === ByteType) return 5120; if (p === ShortType) return 5122; if (p === UnsignedShortType) return 5123; if (p === IntType) return 5124; if (p === UnsignedIntType) return 5125; if (p === FloatType) return 5126; if (p === HalfFloatType) { if (this.capabilities.isWebGL2) return 5131; extension = this.extensions.get('OES_texture_half_float'); if (extension !== null) { return extension.HALF_FLOAT_OES; } else { return null; } } if (p === AlphaFormat) return 6406; if (p === RGBAFormat) return 6408; if (p === LuminanceFormat) return 6409; if (p === LuminanceAlphaFormat) return 6410; if (p === DepthFormat) return 6402; if (p === DepthStencilFormat) return 34041; if (p === RedFormat) return 6403; if (p === RGBFormat) { console.warn('THREE.WebGLRenderer: THREE.RGBFormat has been removed. Use THREE.RGBAFormat instead. https://github.com/mrdoob/three.js/pull/23228'); return 6408; } // WebGL 1 sRGB fallback if (p === _SRGBAFormat) { extension = this.extensions.get('EXT_sRGB'); if (extension !== null) { return extension.SRGB_ALPHA_EXT; } else { return null; } } // WebGL2 formats. if (p === RedIntegerFormat) return 36244; if (p === RGFormat) return 33319; if (p === RGIntegerFormat) return 33320; if (p === RGBAIntegerFormat) return 36249; // S3TC if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) { if (encoding === sRGBEncoding) { extension = this.extensions.get('WEBGL_compressed_texture_s3tc_srgb'); if (extension !== null) { if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT; if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; } else { return null; } } else { extension = this.extensions.get('WEBGL_compressed_texture_s3tc'); if (extension !== null) { if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; } else { return null; } } } // PVRTC if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) { extension = this.extensions.get('WEBGL_compressed_texture_pvrtc'); if (extension !== null) { if (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; if (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; if (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; if (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; } else { return null; } } // ETC1 if (p === RGB_ETC1_Format) { extension = this.extensions.get('WEBGL_compressed_texture_etc1'); if (extension !== null) { return extension.COMPRESSED_RGB_ETC1_WEBGL; } else { return null; } } // ETC2 if (p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format) { extension = this.extensions.get('WEBGL_compressed_texture_etc'); if (extension !== null) { if (p === RGB_ETC2_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2; if (p === RGBA_ETC2_EAC_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC; } else { return null; } } // ASTC if (p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format) { extension = this.extensions.get('WEBGL_compressed_texture_astc'); if (extension !== null) { if (p === RGBA_ASTC_4x4_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR; if (p === RGBA_ASTC_5x4_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR; if (p === RGBA_ASTC_5x5_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR; if (p === RGBA_ASTC_6x5_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR; if (p === RGBA_ASTC_6x6_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR; if (p === RGBA_ASTC_8x5_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR; if (p === RGBA_ASTC_8x6_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR; if (p === RGBA_ASTC_8x8_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR; if (p === RGBA_ASTC_10x5_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR; if (p === RGBA_ASTC_10x6_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR; if (p === RGBA_ASTC_10x8_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR; if (p === RGBA_ASTC_10x10_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR; if (p === RGBA_ASTC_12x10_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR; if (p === RGBA_ASTC_12x12_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR; } else { return null; } } // BPTC if (p === RGBA_BPTC_Format) { extension = this.extensions.get('EXT_texture_compression_bptc'); if (extension !== null) { if (p === RGBA_BPTC_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT; } else { return null; } } // if (p === UnsignedInt248Type) { if (this.capabilities.isWebGL2) return 34042; extension = this.extensions.get('WEBGL_depth_texture'); if (extension !== null) { return extension.UNSIGNED_INT_24_8_WEBGL; } else { return null; } } // if "p" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats) // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore return this.context[p] !== undefined ? this.context[p] : null; } } class GeometryPass extends BaseGPass { get displayName() { return 'GEOMETRY'; } setClippingPlanes(planes) { if (this.overrideMaterial) this.overrideMaterial.clippingPlanes = planes; if (this.overrideBatchMaterial) this.overrideBatchMaterial.clippingPlanes = planes; } render(renderer, camera, scene) { if (!camera || !scene) return false; if (this.onBeforeRender) this.onBeforeRender(); this.applyLayers(camera); renderer.setRenderTarget(this.outputTarget); this.clear(renderer); renderer.render(scene, camera); if (this.onAfterRender) this.onAfterRender(); return false; } } const DefaultPipelineOptions = { edges: true }; class Pipeline { get options() { return this._options; } set options(value) { Object.assign(this.options, value); } constructor(renderer, options = {}) { this._options = Object.assign({}, DefaultPipelineOptions); this.passList = []; this.drawingSize = new Vector2(); this.frameProjection = new Matrix4(); this.jitterIndex = 0; this.jitterOffsets = this.generateHaltonJiters(16); this.speckleRenderer = renderer; this.options = options; } get passes() { return this.passList; } onBeforePipelineRender() {} onAfterPipelineRender() {} getPass(name) { return this.passList.filter(pass => { return pass.displayName === name; }); } setClippingPlanes(planes) { this.passList.forEach(pass => { var _a; return (_a = pass.setClippingPlanes) === null || _a === void 0 ? void 0 : _a.call(pass, planes); }); } update(camera) { this.passList.forEach(pass => { var _a; return pass.enabled && ((_a = pass.update) === null || _a === void 0 ? void 0 : _a.call(pass, camera)); }); } reset() { this.jitterIndex = 0; } render() { this.speckleRenderer.renderer.getDrawingBufferSize(this.drawingSize); if (this.drawingSize.length() === 0) return false; const camera = this.speckleRenderer.renderingCamera; const restoreVisibility = this.speckleRenderer.batcher.saveVisiblity(); const visibilityMap = { [ObjectVisibility.OPAQUE]: this.speckleRenderer.batcher.getOpaque(), [ObjectVisibility.TRANSPARENT]: this.speckleRenderer.batcher.getTransparent(), [ObjectVisibility.DEPTH]: this.speckleRenderer.batcher.getDepth(), [ObjectVisibility.STENCIL]: this.speckleRenderer.batcher.getStencil() }; const [jitterX, jitterY] = this.jitterOffsets[this.jitterIndex]; this.onBeforePipelineRender(); this.speckleRenderer.renderer.setRenderTarget(null); this.speckleRenderer.renderer.setClearColor(0xffffff, 0); this.speckleRenderer.renderer.clear(true, true, true); let renderReturn = false; let lastVisibility; this.passList.forEach(pass => { if (!pass.enabled || !pass.render) return; let passObjectVisibility = restoreVisibility; if (pass.visibility) { if (pass.visibility === ObjectVisibility.CUSTOM) { if (pass.visibilityFunction) passObjectVisibility = pass.visibilityFunction(this.speckleRenderer); } else passObjectVisibility = visibilityMap[pass.visibility]; } if (pass.visibility) { this.speckleRenderer.batcher.applyVisibility(passObjectVisibility); lastVisibility = pass.visibility; } else if (lastVisibility) { this.speckleRenderer.batcher.applyVisibility(restoreVisibility); } if (pass.overrideMaterial) this.speckleRenderer.batcher.overrideMaterial(pass.visibility ? passObjectVisibility : restoreVisibility, pass.overrideMaterial); if (pass.overrideBatchMaterial) this.speckleRenderer.batcher.overrideBatchMaterial(pass.visibility ? passObjectVisibility : restoreVisibility, pass.overrideBatchMaterial); if (pass.jitter && camera) { this.frameProjection.copy(camera.projectionMatrix); if (camera instanceof OrthographicCamera) { const pixelWidth = this.drawingSize.x; const pixelHeight = this.drawingSize.y; const width = camera.right - camera.left; const height = camera.top - camera.bottom; const pixelRatioW = pixelWidth / width; const pixelRatioH = pixelHeight / height; camera.setViewOffset(width, height, jitterX / pixelRatioW * 0.5, jitterY / pixelRatioH * 0.5, width, height); } else if (camera instanceof PerspectiveCamera) { camera.projectionMatrix.elements[8] = jitterX / this.drawingSize.x; camera.projectionMatrix.elements[9] = jitterY / this.drawingSize.y; /** Technically it should be this, but I'm not using it because I don't understand three's implementation */ // camera.setViewOffset( // this.drawingSize.x, // this.drawingSize.y, // jitterX * 0.5, // jitterY * 0.5, // this.drawingSize.x, // this.drawingSize.y // ) } } const ret = pass.render(this.speckleRenderer.renderer, this.speckleRenderer.renderingCamera, this.speckleRenderer.scene); renderReturn || (renderReturn = ret); if (pass.visibility) this.speckleRenderer.batcher.applyVisibility(restoreVisibility); if (pass.overrideMaterial) this.speckleRenderer.batcher.restoreMaterial(pass.visibility ? passObjectVisibility : restoreVisibility); if (pass.overrideBatchMaterial) this.speckleRenderer.batcher.restoreBatchMaterial(pass.visibility ? passObjectVisibility : restoreVisibility); if (pass.jitter && camera) camera.projectionMatrix.copy(this.frameProjection); }); this.onAfterPipelineRender(); this.jitterIndex = (this.jitterIndex + 1) % this.jitterOffsets.length; return renderReturn; } resize(width, height) { this.passList.forEach(pass => { var _a; return (_a = pass.setSize) === null || _a === void 0 ? void 0 : _a.call(pass, width, height); }); } /** * Generate a number in the Halton Sequence at a given index. This is * shamelessly stolen from the pseudocode on the Wikipedia page * * @param base the base to use for the Halton Sequence * @param index the index into the sequence */ haltonNumber(base, index) { let result = 0; let f = 1; while (index > 0) { f /= base; result += f * (index % base); index = Math.floor(index / base); } return result; } generateHaltonJiters(length) { const jitters = []; for (let i = 1; i <= length; i++) jitters.push([(this.haltonNumber(2, i) - 0.5) * 2, (this.haltonNumber(3, i) - 0.5) * 2]); return jitters; } static createRenderTarget(options, width, height) { const renderTarget = new WebGLRenderTarget(width || 1, height || 1, options); /** On Chromium, on MacOS the 16 bit depth render buffer appears broken. * We're not really using a stencil buffer at all, we're just forcing * three.js to use a 24 bit depth render buffer */ renderTarget.depthBuffer = true; renderTarget.stencilBuffer = true; return renderTarget; } static createMultipleRenderTarget(count, options, width, height) { const renderTarget = new WebGLMultipleRenderTargets(width || 1, height || 1, count, options); renderTarget.depthBuffer = true; renderTarget.stencilBuffer = true; return renderTarget; } } var DepthType; (function (DepthType) { DepthType[DepthType["PERSPECTIVE_DEPTH"] = 0] = "PERSPECTIVE_DEPTH"; DepthType[DepthType["LINEAR_DEPTH"] = 1] = "LINEAR_DEPTH"; })(DepthType || (DepthType = {})); const DefaultDepthPassOptions = { depthType: DepthType.LINEAR_DEPTH }; class DepthPass extends GeometryPass { get displayName() { return 'DEPTH'; } get depthTexture() { var _a; return (_a = this._outputTarget) === null || _a === void 0 ? void 0 : _a.texture; } get overrideMaterial() { return this.depthMaterial; } set options(value) { super.options = value; this.depthType = this._options.depthType; } set depthType(value) { if (value === DepthType.LINEAR_DEPTH) if (this.depthMaterial.defines) { this.depthMaterial.defines['LINEAR_DEPTH'] = ' '; } else { if (this.depthMaterial.defines) { delete this.depthMaterial.defines['LINEAR_DEPTH']; } } this.depthMaterial.needsUpdate = true; } set depthSide(value) { this.depthMaterial.side = value; } constructor() { super(); this._options = Object.assign({}, DefaultDepthPassOptions); this._outputTarget = Pipeline.createRenderTarget({ minFilter: NearestFilter, magFilter: NearestFilter }); this.depthMaterial = new SpeckleDepthMaterial({ depthPacking: RGBADepthPacking }, ['ALPHATEST_REJECTION']); this.depthMaterial.blending = NoBlending; this.depthMaterial.side = DoubleSide; this.depthType = this._options.depthType; } update(camera) { this.depthMaterial.userData.near.value = camera.near; this.depthMaterial.userData.far.value = camera.far; this.depthMaterial.needsUpdate = true; } } const speckleStaticAoAccumulateFrag = /* glsl */` uniform float opacity; uniform sampler2D tDiffuse; varying vec2 vUv; // #define NUM_FRAMES 16 void main() { vec4 frameSample = texture2D( tDiffuse, vUv ); gl_FragColor.xyz = frameSample.rgb * 1./float(NUM_FRAMES); gl_FragColor.a = 1.;//*= opacity; }`; const speckleStaticAoAccumulateVert = /* glsl */` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); }`; const speckleStaticAoGenerateVert = /* glsl */` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); }`; const speckleStaticAoGenerateFrag = /* glsl */` #include #define AO_ESTIMATOR 1 #define NORMAL_TEXTURE 0 #define IMPROVED_NORMAL_RECONSTRUCTION 0 #define ACCURATE_NORMAL_RECONSTRUCTION 1 varying vec2 vUv; uniform sampler2D tDepth; uniform sampler2D tNormal; uniform vec2 size; uniform float cameraNear; uniform float cameraFar; uniform mat4 cameraProjectionMatrix; uniform mat4 cameraInverseProjectionMatrix; uniform float intensity; uniform float bias; uniform float kernelRadius; #if AO_ESTIMATOR == 0 #define NUM_SAMPLES 16 #define SPIRAL_TURNS 2 #define INV_NUM_SAMPLES 1.0 / float( NUM_SAMPLES ) #define offset PI2 / float(NUM_FRAMES) uniform float minResolution; uniform float frameIndex; uniform float scale; #endif #if AO_ESTIMATOR == 1 uniform float tanFov; uniform sampler2D tNoise; uniform vec3 kernel[ KERNEL_SIZE ]; #endif // RGBA depth #include vec4 getDefaultColor( const in vec2 screenPosition ) { return vec4( 1.0 ); } float getLinearDepth( const in vec2 screenPosition ) { return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) ); } float getPerspectiveDepth(const in vec2 coords) { float linearDepth = unpackRGBAToDepth( texture2D( tDepth, coords ) ); #if PERSPECTIVE_CAMERA == 1 float viewZ = orthographicDepthToViewZ(linearDepth, cameraNear, cameraFar); float centerDepth = viewZToPerspectiveDepth(viewZ, cameraNear, cameraFar); return centerDepth; #else return linearDepth; #endif } float getViewDepth(const in float linearDepth) { return orthographicDepthToViewZ(linearDepth, cameraNear, cameraFar); } float getViewZ( const in float depth ) { #if PERSPECTIVE_CAMERA == 1 return perspectiveDepthToViewZ( depth, cameraNear, cameraFar ); #else return orthographicDepthToViewZ( depth, cameraNear, cameraFar ); #endif } vec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) { float clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3]; vec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 ); clipPosition *= clipW; // unprojection. return ( cameraInverseProjectionMatrix * clipPosition ).xyz; } //https://wickedengine.net/2019/09/22/improved-normal-reconstruction-from-depth/ vec3 viewNormalImproved(in vec2 uv, in vec3 origin) { highp vec2 dd = abs(vec2(1./size.x, 1./size.y)); highp vec2 ddx = vec2(dd.x, 0.); highp vec2 ddy = vec2(0., dd.y); float sampleDepth = getPerspectiveDepth( uv - ddy ); float sampleViewZ = getViewZ( sampleDepth ); highp vec3 top = getViewPosition( uv - ddy, sampleDepth, sampleViewZ ); sampleDepth = getPerspectiveDepth( uv + ddy ); sampleViewZ = getViewZ( sampleDepth ); highp vec3 bottom = getViewPosition( uv + ddy, sampleDepth, sampleViewZ ); highp vec3 center = origin; sampleDepth = getPerspectiveDepth( uv - ddx ); sampleViewZ = getViewZ( sampleDepth ); highp vec3 left = getViewPosition( uv - ddx, sampleDepth, sampleViewZ ); sampleDepth = getPerspectiveDepth( uv + ddx ); sampleViewZ = getViewZ( sampleDepth ); highp vec3 right = getViewPosition( uv + ddx, sampleDepth, sampleViewZ ); // get the difference between the current and each offset position vec3 l = center - left; vec3 r = right - center; vec3 d = center - top; vec3 u = bottom - center; // pick horizontal and vertical diff with the smallest z difference vec3 hDeriv = abs(l.z) < abs(r.z) ? l : r; vec3 vDeriv = abs(d.z) < abs(u.z) ? d : u; // get view space normal from the cross product of the two smallest offsets vec3 viewNormal = normalize(cross(hDeriv, vDeriv)); return viewNormal; } vec3 viewNormalAccurate(in vec2 uv, in vec3 origin, in float centerDepth) { highp vec2 dd = abs(vec2(1./size.x, 1./size.y)); highp vec2 ddx = vec2(dd.x, 0.); highp vec2 ddy = vec2(0., dd.y); float sampleDepth = getPerspectiveDepth( uv - ddy ); float sampleViewZ = getViewZ( sampleDepth ); highp vec3 top = getViewPosition( uv - ddy, sampleDepth, sampleViewZ ); sampleDepth = getPerspectiveDepth( uv + ddy ); sampleViewZ = getViewZ( sampleDepth ); highp vec3 bottom = getViewPosition( uv + ddy, sampleDepth, sampleViewZ ); highp vec3 center = origin; sampleDepth = getPerspectiveDepth( uv - ddx ); sampleViewZ = getViewZ( sampleDepth ); highp vec3 left = getViewPosition( uv - ddx, sampleDepth, sampleViewZ ); sampleDepth = getPerspectiveDepth( uv + ddx ); sampleViewZ = getViewZ( sampleDepth ); highp vec3 right = getViewPosition( uv + ddx, sampleDepth, sampleViewZ ); // get the difference between the current and each offset position vec3 l = center - left; vec3 r = right - center; vec3 d = center - top; vec3 u = bottom - center; // get depth values at 1 & 2 pixels offsets from current along the horizontal axis vec4 H = vec4( getLinearDepth(uv - ddx), getLinearDepth(uv + ddx), getLinearDepth(uv - 2. * ddx), getLinearDepth(uv + 2. * ddx) ); // get depth values at 1 & 2 pixels offsets from current along the vertical axis vec4 V = vec4( getLinearDepth(uv - ddy), getLinearDepth(uv + ddy), getLinearDepth(uv - 2. * ddy), getLinearDepth(uv + 2. * ddy) ); // current pixel's depth difference from slope of offset depth samples // differs from original article because we're using non-linear depth values // see article's comments vec2 he = abs((2. * H.xy - H.zw) - centerDepth); vec2 ve = abs((2. * V.xy - V.zw) - centerDepth); // pick horizontal and vertical diff with the smallest depth difference from slopes vec3 hDeriv = he.x < he.y ? l : r; vec3 vDeriv = ve.x < ve.y ? d : u; // get view space normal from the cross product of the best derivatives vec3 viewNormal = normalize(cross(hDeriv, vDeriv)); return viewNormal; } vec3 getViewNormal( const in vec3 viewPosition, const in vec2 screenPosition, in float centerDepth ) { #if NORMAL_TEXTURE == 1 return unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz ); #elif IMPROVED_NORMAL_RECONSTRUCTION == 1 return viewNormalImproved(screenPosition, viewPosition); #elif ACCURATE_NORMAL_RECONSTRUCTION == 1 return viewNormalAccurate(screenPosition, viewPosition, centerDepth); #else return normalize( cross( dFdx( viewPosition ), dFdy( viewPosition ) ) ); #endif } float scaleDividedByCameraFar; float minResolutionMultipliedByCameraFar; // moving costly divides into consts float computeKernelSize(float d, float r) { #if PERSPECTIVE_CAMERA == 1 // Apparently this is wrong // return (r * tan(fov) * d) / (size.y * 0.5); // And this is correct float rp = r / (size.y * 0.5); return sqrt((rp*rp*tanFov*tanFov*d*d)/(1. + rp*rp*tanFov*tanFov)); #else float twoOrthoSize = size.y / (2./ cameraProjectionMatrix[1][1]); return r / twoOrthoSize; #endif } float getAmbientOcclusion( const in vec3 centerViewPosition, in float centerDepth ) { #if AO_ESTIMATOR == 0 // precompute some variables require in getOcclusion. scaleDividedByCameraFar = scale / cameraFar; minResolutionMultipliedByCameraFar = minResolution * cameraFar; vec3 centerViewNormal = getViewNormal( centerViewPosition, vUv, centerDepth ); // jsfiddle that shows sample pattern: https://jsfiddle.net/TenHands/jun67k9y/7/ float occlusionSum = 0.0; float weightSum = 0.0; for( int i = 0; i < NUM_SAMPLES; i ++ ) { float alpha = ( float(i) + 1. ) / float(NUM_SAMPLES); float angle = float(SPIRAL_TURNS) * alpha; vec2 radius = (kernelRadius / size) * pow( alpha, 1.1 ); vec2 sampleUv = vUv + vec2( cos( angle + frameIndex * offset ), sin( angle + frameIndex * offset ) ) * radius; float sampleDepth = getPerspectiveDepth( sampleUv ); if( sampleDepth >= ( 1.0 - EPSILON ) ) { continue; } float sampleViewZ = getViewZ( sampleDepth ); vec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ ); /** McGuire Estimator*/ vec3 v = sampleViewPosition - centerViewPosition; float vv = dot(v, v); float vn = dot(v, centerViewNormal) - bias; // Note large epsilon to avoid overdarkening within cracks float radius2 = 2.;//uSampleRadiusWS * uSampleRadiusWS float epsilon = 0.01; float f = max(radius2 - vv, 0.0) / radius2; occlusionSum += f * f * f * max(vn / (epsilon + vv), 0.0) / 4.; /** Three.js SAO Estimator*/ // vec3 viewDelta = sampleViewPosition - centerViewPosition; // float viewDistance = length( viewDelta ); // float scaledScreenDistance = scaleDividedByCameraFar * viewDistance; // occlusionSum += max(0.0, (dot(centerViewNormal, viewDelta) - minResolutionMultipliedByCameraFar) / scaledScreenDistance - bias) / (1.0 + pow2( scaledScreenDistance ) ); weightSum += 1.0; } if( weightSum == 0.0 ) discard; return occlusionSum * ( intensity / weightSum ); #elif AO_ESTIMATOR == 1 vec3 viewPosition = centerViewPosition; vec3 viewNormal = getViewNormal( centerViewPosition, vUv, centerDepth ); vec2 noiseScale = vec2( size.x / 4.0, size.y / 4.0 ); vec3 random = vec3( texture2D( tNoise, vUv * noiseScale ).r ); // compute matrix used to reorient a kernel vector vec3 tangent = normalize( random - viewNormal * dot( random, viewNormal ) ); vec3 bitangent = cross( viewNormal, tangent ); mat3 kernelMatrix = mat3( tangent, bitangent, viewNormal ); float occlusion = 0.0; float kernelSize_ws = computeKernelSize(-viewPosition.z, kernelRadius); float div = float( KERNEL_SIZE); float maxDist = kernelSize_ws / (cameraFar - cameraNear); for ( int i = 0; i < KERNEL_SIZE; i ++ ) { vec3 sampleVector = kernelMatrix * kernel[ i ]; // reorient sample vector in view space vec3 samplePoint = viewPosition + ( sampleVector * kernelSize_ws ); // calculate sample point vec4 samplePointNDC = cameraProjectionMatrix * vec4( samplePoint, 1.0 ); // project point and calculate NDC samplePointNDC /= samplePointNDC.w; vec2 samplePointUv = samplePointNDC.xy * 0.5 + 0.5; // compute uv coordinates float realDepth = getLinearDepth( samplePointUv ); // get linear depth from depth texture float sampleDepth = viewZToOrthographicDepth( samplePoint.z + bias, cameraNear, cameraFar ); // compute linear depth of the sample view Z value float delta = sampleDepth - realDepth; if ( delta > 0. && delta < maxDist ) { // if fragment is before sample point, increase occlusion occlusion += 1.0; } } return clamp( occlusion * intensity / div, 0.0, 1.0 ); #endif } void main() { float linearDepth = unpackRGBAToDepth( texture2D( tDepth, vUv ) ); float centerDepth = getPerspectiveDepth(vUv); if( centerDepth >= ( 1.0 - EPSILON ) ) { discard; } float centerViewZ = getViewDepth(linearDepth); vec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ ); vec3 viewNormal = getViewNormal(viewPosition, vUv, linearDepth); float ambientOcclusion = getAmbientOcclusion( viewPosition, centerDepth ); gl_FragColor = getDefaultColor( vUv ); gl_FragColor.xyz *= ambientOcclusion; gl_FragColor.a = 1.; }`; const DefaultProgressiveAOPassOptions = { intensity: 1, kernelRadius: 30, // Screen space bias: 0.01, kernelSize: 16 }; class ProgressiveAOPass extends ProgressiveGPass { setTexture(uName, texture) { this.generationMaterial.uniforms[uName].value = texture; this.generationMaterial.needsUpdate = true; } get displayName() { return 'PROGRESSIVE-AO'; } set options(value) { super.options = value; this.kernels = []; this.noiseTextures = []; } constructor() { super(); this._options = Object.assign({}, DefaultProgressiveAOPassOptions); this.kernels = []; this.noiseTextures = []; this._generationBuffer = new WebGLRenderTarget(256, 256); this._outputTarget = new WebGLRenderTarget(256, 256); this.generationMaterial = new ShaderMaterial({ fragmentShader: speckleStaticAoGenerateFrag, vertexShader: speckleStaticAoGenerateVert, uniforms: { tDepth: { value: null }, tNormal: { value: null }, size: { value: new Vector2(512, 512) }, cameraNear: { value: 1 }, cameraFar: { value: 100 }, cameraProjectionMatrix: { value: new Matrix4() }, cameraInverseProjectionMatrix: { value: new Matrix4() }, tanFov: { value: 0 }, intensity: { value: this._options.intensity }, bias: { value: this._options.bias }, kernelRadius: { value: this._options.kernelRadius }, // World space tNoise: { value: null }, kernel: { value: null } /** Only used with McGuire-like estimator */ // minResolution: { value: 0 }, // frameIndex: { value: 0 }, // scale: { value: 1 } } }); this.generationMaterial.extensions.derivatives = true; this.generationMaterial.uniforms['size'].value.set(256, 256); this.generationMaterial.blending = NoBlending; this.generationMaterial.uniformsNeedUpdate = true; this.accumulateMaterial = new ShaderMaterial({ defines: {}, fragmentShader: speckleStaticAoAccumulateFrag, vertexShader: speckleStaticAoAccumulateVert, uniforms: { tDiffuse: { value: null }, opacity: { value: 1 } } }); this.accumulateMaterial.uniforms['tDiffuse'].value = this._generationBuffer.texture; this.accumulateMaterial.blending = CustomBlending; this.accumulateMaterial.blendSrc = OneFactor; this.accumulateMaterial.blendDst = OneFactor; this.accumulateMaterial.blendEquation = ReverseSubtractEquation; this.accumulateMaterial.blendSrcAlpha = OneFactor; this.accumulateMaterial.blendDstAlpha = OneFactor; this.accumulateMaterial.blendEquationAlpha = AddEquation; this.fsQuad = new FullScreenQuad(this.generationMaterial); } update(camera) { /** DEFINES */ this.generationMaterial.defines['PERSPECTIVE_CAMERA'] = camera.isPerspectiveCamera ? 1 : 0; this.generationMaterial.defines['NUM_FRAMES'] = this.accumulationFrames; this.generationMaterial.defines['KERNEL_SIZE'] = this._options.kernelSize; this.accumulateMaterial.defines['NUM_FRAMES'] = this.accumulationFrames; /** UNIFORMS */ this.generationMaterial.uniforms['cameraNear'].value = camera.near; this.generationMaterial.uniforms['cameraFar'].value = camera.far; this.generationMaterial.uniforms['cameraInverseProjectionMatrix'].value.copy(camera.projectionMatrixInverse); this.generationMaterial.uniforms['cameraProjectionMatrix'].value.copy(camera.projectionMatrix); const fov = camera.fov / 2 * Math.PI / 180.0; this.generationMaterial.uniforms['tanFov'].value = Math.tan(fov); if (!this.kernels[this.frameIndex]) { this.generateSampleKernel(this.frameIndex); } if (!this.noiseTextures[this.frameIndex]) { this.generateRandomKernelRotations(this.frameIndex); } this.generationMaterial.uniforms['kernel'].value = this.kernels[this.frameIndex]; this.generationMaterial.uniforms['tNoise'].value = this.noiseTextures[this.frameIndex]; this.generationMaterial.uniforms['intensity'].value = this._options.intensity; this.generationMaterial.uniforms['kernelRadius'].value = this._options.kernelRadius; this.generationMaterial.uniforms['bias'].value = this._options.bias; this.generationMaterial.needsUpdate = true; this.accumulateMaterial.needsUpdate = true; } render(renderer) { renderer.setRenderTarget(this._generationBuffer); renderer.setClearColor(0x000000); renderer.setClearAlpha(1); renderer.clear(true); this.fsQuad.material = this.generationMaterial; this.fsQuad.render(renderer); renderer.setRenderTarget(this._outputTarget); if (this.frameIndex === 0) { this.clear(renderer); } this.fsQuad.material = this.accumulateMaterial; this.fsQuad.render(renderer); return super.render(renderer); } setSize(width, height) { super.setSize(width, height); this._generationBuffer.setSize(width, height); this.generationMaterial.uniforms['size'].value.set(width, height); this.generationMaterial.needsUpdate = true; } generateSampleKernel(frameIndex) { const kernelSize = this._options.kernelSize || 0; this.kernels[frameIndex] = []; for (let i = 0; i < kernelSize; i++) { const sample = new Vector3(); sample.x = Math.random() * 2 - 1; sample.y = Math.random() * 2 - 1; sample.z = Math.random(); sample.normalize(); let scale = i / kernelSize; scale = MathUtils.lerp(0.1, 1, scale * scale); sample.multiplyScalar(scale); this.kernels[frameIndex].push(sample); } } generateRandomKernelRotations(frameIndex) { const width = 4, height = 4; if (SimplexNoise === undefined) { console.error('The pass relies on SimplexNoise.'); } const simplex = new SimplexNoise(); const size = width * height * 4; const data = new Float32Array(size); for (let i = 0; i < size; i += 4) { const x = Math.random() * 2 - 1; const y = Math.random() * 2 - 1; const z = 0; data[i] = simplex.noise3d(x, y, z); data[i + 1] = 0; data[i + 2] = 0; data[i + 3] = 0; } this.noiseTextures[frameIndex] = new DataTexture(data, width, height, RGBAFormat, FloatType); this.noiseTextures[frameIndex].wrapS = RepeatWrapping; this.noiseTextures[frameIndex].wrapT = RepeatWrapping; this.noiseTextures[frameIndex].needsUpdate = true; } } const speckleApplyAoVert = ` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); }`; const speckleApplyAoFrag = ` #if BLEND_AO == 1 uniform sampler2D tAo; #endif #if BLEND_EDGES == 1 uniform sampler2D tEdges; #endif varying vec2 vUv; #define ONE3 vec3(1.,1.,1.) void main() { vec3 ao = ONE3; vec3 edges = ONE3; #if BLEND_AO == 1 ao = texture2D( tAo, vUv ).rgb; #endif #if BLEND_EDGES == 1 edges = texture2D (tEdges, vUv).rgb; #endif gl_FragColor.rgb = min(ao, edges); gl_FragColor.a = 1.; }`; const DefaultBlendPassOptions = { blendAO: true, blendEdges: false }; class BlendPass extends ProgressiveGPass { set options(value) { super.options = value; this.materialCopy.defines['BLEND_AO'] = +this._options.blendAO; this.materialCopy.defines['BLEND_EDGES'] = +this._options.blendEdges; this.materialCopy.needsUpdate = true; } constructor() { super(); this._options = Object.assign({}, DefaultBlendPassOptions); this.materialCopy = new ShaderMaterial({ defines: { BLEND_AO: +this._options.blendAO, BLEND_EDGES: +this._options.blendEdges }, uniforms: { tAo: { value: null }, tEdges: { value: null } }, vertexShader: speckleApplyAoVert, fragmentShader: speckleApplyAoFrag, blending: NoBlending }); this.materialCopy.transparent = true; this.materialCopy.depthTest = false; this.materialCopy.depthWrite = false; this.materialCopy.blending = CustomBlending; this.materialCopy.blendSrc = DstColorFactor; this.materialCopy.blendDst = ZeroFactor; this.materialCopy.blendEquation = AddEquation; this.materialCopy.blendSrcAlpha = DstAlphaFactor; this.materialCopy.blendDstAlpha = ZeroFactor; this.materialCopy.blendEquationAlpha = AddEquation; this.materialCopy.needsUpdate = true; this.fsQuad = new FullScreenQuad(this.materialCopy); } setTexture(uName, texture) { this.materialCopy.uniforms[uName].value = texture; this.materialCopy.needsUpdate = true; } get displayName() { return 'BLEND'; } render(renderer) { renderer.setRenderTarget(this._outputTarget); this.fsQuad.render(renderer); return super.render(renderer); } } class ProgressivePipeline extends Pipeline { constructor() { super(...arguments); this.accumulationFrameIndex = 0; this.accumulationFrameCount = 16; this.dynamicStage = []; this.progressiveStage = []; this.passthroughStage = []; this.accumulating = false; } get passes() { return [...this.dynamicStage, ...this.progressiveStage, ...this.passthroughStage]; } get dynamicPasses() { return [...this.dynamicStage]; } get progressivePasses() { return [...this.progressiveStage]; } get passthroughPasses() { return [...this.passthroughStage]; } getPass(name) { return [...this.dynamicStage.filter(pass => { return pass.displayName === name; }), ...this.progressiveStage.filter(pass => { return pass.displayName === name; }), ...this.passthroughStage.filter(pass => { return pass.displayName === name; })]; } setClippingPlanes(planes) { this.dynamicStage.forEach(pass => { var _a; return (_a = pass.setClippingPlanes) === null || _a === void 0 ? void 0 : _a.call(pass, planes); }); this.progressiveStage.forEach(pass => { var _a; return (_a = pass.setClippingPlanes) === null || _a === void 0 ? void 0 : _a.call(pass, planes); }); this.passthroughStage.forEach(pass => { var _a; return (_a = pass.setClippingPlanes) === null || _a === void 0 ? void 0 : _a.call(pass, planes); }); } update(camera) { this.passList.forEach(pass => { var _a; pass.enabled && ((_a = pass.update) === null || _a === void 0 ? void 0 : _a.call(pass, camera)); if (pass instanceof ProgressiveGPass) { pass.frameIndex = this.accumulationFrameIndex; } }); } render() { const ret = super.render(); if (this.accumulating) { if (++this.accumulationFrameIndex === this.accumulationFrameCount) this.onAccumulationComplete(); } return ret; } reset() { super.reset(); this.accumulationFrameIndex = 0; this.onStationaryBegin(); } resize(width, height) { super.resize(width, height); this.dynamicStage.forEach(pass => { var _a; return (_a = pass.setSize) === null || _a === void 0 ? void 0 : _a.call(pass, width, height); }); this.progressiveStage.forEach(pass => { var _a; return (_a = pass.setSize) === null || _a === void 0 ? void 0 : _a.call(pass, width, height); }); } onStationaryBegin() { this.accumulationFrameIndex = 0; this.accumulating = true; this.passList = this.progressiveStage; } onStationaryEnd() { this.accumulating = false; this.passList = this.dynamicStage; } onAccumulationComplete() { this.accumulating = false; this.passList = this.passthroughStage; } } const speckleDisplaceVert = /* glsl */` #include #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; #endif uniform vec2 size; uniform float displacement; #ifdef TRANSFORM_STORAGE attribute float objIndex; #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif #include #include #include #include #include #include #include #include #include #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } vec3 rotate_vertex_position(vec3 position, vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif void main() { #include #include #include #include #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) #include #include #include #include // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #endif #include #include #include // #include COMMENTED CHUNK #ifdef TRANSFORM_STORAGE vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif mvPosition = modelViewMatrix * mvPosition; gl_Position = projectionMatrix * mvPosition; // Transform normal vector from object space to clip space. vec3 normalHCS = mat3(projectionMatrix) * normalMatrix * normal; // Move vertex along normal vector in clip space. gl_Position.xy += normalize(normalHCS.xy) / size * gl_Position.w * displacement * 2.; #include #include #include #include #include } `; const speckleDisplaceFrag = /* glsl */` uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void main() { #include vec4 diffuseColor = vec4( diffuse, opacity ); #include #include #include #include #include #include ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); // accumulation (baked indirect lighting only) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vUv2 ); reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; #else reflectedLight.indirectDiffuse += vec3( 1.0 ); #endif // modulation #include reflectedLight.indirectDiffuse *= diffuseColor.rgb; vec3 outgoingLight = reflectedLight.indirectDiffuse; #include #include #include #include #include #include #include } `; class SpeckleDisplaceMaterial extends SpeckleBasicMaterial { get vertexProgram() { return speckleDisplaceVert; } get fragmentProgram() { return speckleDisplaceFrag; } get uniformsDef() { return { ...super.uniformsDef, size: new Vector2(), displacement: 0 }; } constructor(parameters, defines = []) { super(parameters, defines); } fastCopy(from, to) { super.fastCopy(from, to); to.userData.displacement.value = from.userData.displacement.value; } } class StencilPass extends GeometryPass { constructor() { super(); this.stencilMaterial = new SpeckleDisplaceMaterial({ color: 0xff0000 }); this.stencilMaterial.userData.displacement.value = 2; this.stencilMaterial.colorWrite = false; this.stencilMaterial.depthWrite = false; this.stencilMaterial.stencilWrite = true; this.stencilMaterial.stencilFunc = AlwaysStencilFunc; this.stencilMaterial.stencilWriteMask = 0xff; this.stencilMaterial.stencilRef = 0xff; this.stencilMaterial.stencilZFail = ReplaceStencilOp; this.stencilMaterial.stencilZPass = ReplaceStencilOp; this.stencilMaterial.stencilFail = ReplaceStencilOp; this.stencilMaterial.side = DoubleSide; } get displayName() { return 'STENCIL'; } get overrideMaterial() { return this.stencilMaterial; } setSize(width, height) { super.setSize(width, height); this.stencilMaterial.userData.size.value.copy(new Vector2(width, height)); this.stencilMaterial.needsUpdate = true; } } class StencilMaskPass extends GeometryPass { constructor() { super(); this.stencilMaskMaterial = new SpeckleDisplaceMaterial({ color: 0x04a5fb }); this.stencilMaskMaterial.userData.displacement.value = 2; this.stencilMaskMaterial.colorWrite = true; this.stencilMaskMaterial.depthWrite = false; this.stencilMaskMaterial.stencilWrite = true; this.stencilMaskMaterial.stencilFunc = EqualStencilFunc; this.stencilMaskMaterial.stencilRef = 0xff; this.stencilMaskMaterial.side = DoubleSide; } get displayName() { return 'STENCIL-MASK'; } get overrideMaterial() { return this.stencilMaskMaterial; } setSize(width, height) { super.setSize(width, height); this.stencilMaskMaterial.userData.size.value.copy(new Vector2(width, height)); this.stencilMaskMaterial.needsUpdate = true; } } const speckleEdgesGeneratorFrag = /* glsl */` #include varying vec2 vUv; uniform sampler2D tDepth; uniform sampler2D tNormal; uniform sampler2D tId; uniform float uDepthMultiplier; uniform float uDepthBias; uniform float uNormalMultiplier; uniform float uNormalBias; uniform float uOutlineThickness; uniform float uOutlineDensity; uniform vec3 uOutlineColor; uniform vec3 uBackgroundColor; uniform vec2 size; uniform float cameraNear; uniform float cameraFar; uniform mat4 cameraProjectionMatrix; uniform mat4 cameraInverseProjectionMatrix; #define ID_GRADIENT_THRESHOLD 1e-4 #include float getDepth( const in ivec2 screenPosition ) { #if __VERSION__ == 300 return unpackRGBAToDepth( texelFetch( tDepth, clamp(screenPosition, ivec2(0,0), ivec2(size)), 0 ) ); #else vec2 cUv = vec2(0.5/size.x, 0.5/size.y); return unpackRGBAToDepth( texture2D( tDepth, vec2(min(screenPosition, ivec2(size)))/size + cUv ) ); #endif } vec3 SobelSample(sampler2D t, vec2 uv, vec3 offset){ vec3 pixelCenter = texture2D(t, uv).rgb; vec3 pixelLeft = texture2D(t, uv - offset.xz).rgb; vec3 pixelRight = texture2D(t, uv + offset.xz).rgb; vec3 pixelUp = texture2D(t, uv + offset.zy).rgb; vec3 pixelDown = texture2D(t, uv - offset.zy).rgb; return abs(pixelLeft - pixelCenter) + abs(pixelRight - pixelCenter) + abs(pixelUp - pixelCenter) + abs(pixelDown - pixelCenter); } float GetTolerance(float d, float k) { // ------------------------------------------- // Find a tolerance for depth that is constant // in view space (k in view space). // // tol = k*ddx(ZtoDepth(z)) // ------------------------------------------- float A=- (cameraFar+cameraNear)/(cameraFar - cameraNear); float B=-2.0*cameraFar*cameraNear /(cameraFar -cameraNear); d = d*2.0-1.0; return -k*(d+A)*(d+A)/B; } float DetectSilho(ivec2 fragCoord, ivec2 dir, float tolerance) { // ------------------------------------------- // x0 ___ x1----o // :\ : // r0 : \ : r1 // : \ : // o---x2 ___ x3 // // r0 and r1 are the differences between actual // and expected (as if x0..3 where on the same // plane) depth values. // ------------------------------------------- float x0 = abs(getDepth(fragCoord + dir*-2)); float x1 = abs(getDepth(fragCoord + dir*-1)); float x2 = abs(getDepth(fragCoord + dir* 0)); float x3 = abs(getDepth(fragCoord + dir* 1)); float d0 = (x1-x0); float d1 = (x2-x3); float r0 = x1 + d0 - x2; float r1 = x2 + d1 - x1; float tol = GetTolerance(x2, tolerance); return smoothstep(0.0, tol*tol, max( - r0*r1, 0.0)); } // Source: https://www.shadertoy.com/view/DslXz2 float DepthEdge(ivec2 fragCoord, float tolerance) { return max( DetectSilho(fragCoord, ivec2(1,0), tolerance), // Horizontal DetectSilho(fragCoord, ivec2(0,1), tolerance) // Vertical ); } float NormalEdge(float scale) { float halfScaleFloor = floor(scale * 0.5); float halfScaleCeil = ceil(scale * 0.5); vec2 pixelSize = vec2(1.0 / size.x, 1.0 / size.y); vec2 bottomLeftUV = vUv - pixelSize * halfScaleFloor; vec2 topRightUV = vUv + pixelSize * halfScaleCeil; vec2 bottomRightUV = vUv + vec2(pixelSize.x * halfScaleCeil, -pixelSize.y * halfScaleFloor); vec2 topLeftUV = vUv + vec2(-pixelSize.x * halfScaleFloor, pixelSize.y * halfScaleCeil); vec3 centerNormal = unpackRGBToNormal(texture2D(tNormal, vUv).rgb); vec3 normal0 = unpackRGBToNormal(texture2D(tNormal, bottomLeftUV).rgb); vec3 normal1 = unpackRGBToNormal(texture2D(tNormal, topRightUV).rgb); vec3 normal2 = unpackRGBToNormal(texture2D(tNormal, bottomRightUV).rgb); vec3 normal3 = unpackRGBToNormal(texture2D(tNormal, topLeftUV).rgb); vec3 normalFiniteDifference0 = normal1 - normal0; vec3 normalFiniteDifference1 = normal3 - normal2; return sqrt(dot(normalFiniteDifference0, normalFiniteDifference0) + dot(normalFiniteDifference1, normalFiniteDifference1)); } /** Alternative to NormalEdge. */ vec3 SobelSampleNormal(vec2 uv){ float w = 1.0 / size.x; float h = 1.0 / size.y; vec3 n[9]; n[0] = unpackRGBToNormal(texture2D(tNormal, uv + vec2( -w, -h)).rgb); n[1] = unpackRGBToNormal(texture2D(tNormal, uv + vec2(0.0, -h)).rgb); n[2] = unpackRGBToNormal(texture2D(tNormal, uv + vec2( w, -h)).rgb); n[3] = unpackRGBToNormal(texture2D(tNormal, uv + vec2( -w, 0.0)).rgb); n[4] = unpackRGBToNormal(texture2D(tNormal, uv).rgb); n[5] = unpackRGBToNormal(texture2D(tNormal, uv + vec2( w, 0.0)).rgb); n[6] = unpackRGBToNormal(texture2D(tNormal, uv + vec2( -w, h)).rgb); n[7] = unpackRGBToNormal(texture2D(tNormal, uv + vec2(0.0, h)).rgb); n[8] = unpackRGBToNormal(texture2D(tNormal, uv + vec2( w, h)).rgb); vec3 sobel_edge_h = n[2] + (2.0*n[5]) + n[8] - (n[0] + (2.0*n[3]) + n[6]); vec3 sobel_edge_v = n[0] + (2.0*n[1]) + n[2] - (n[6] + (2.0*n[7]) + n[8]); vec3 sobel = sqrt((sobel_edge_h * sobel_edge_h) + (sobel_edge_v * sobel_edge_v)); return sobel; } void main() { // Depth edge float depthEdge = DepthEdge(ivec2(gl_FragCoord), uDepthBias) * uDepthMultiplier; // Normal edge float normalEdge = pow(NormalEdge(uOutlineThickness) * uNormalMultiplier, uNormalBias); // Id edge vec3 offset = vec3((1.0 / size.x), (1.0 / size.y), 0.0) * uOutlineThickness; vec3 sobelIdVec = abs(SobelSample(tId, vUv, offset)); // This is the branchless equivalent of sobelIdVec.x + sobelIdVec.y + sobelIdVec.z > ID_GRADIENT_THRESHOLD ? 1. : 0. float sobelIdEdge = step(ID_GRADIENT_THRESHOLD, sobelIdVec.x + sobelIdVec.y + sobelIdVec.z); // Combine the three edges by taking the minimum float maxOutline = saturate(max(sobelIdEdge, max(depthEdge, normalEdge))); float sobelOutline = maxOutline * uOutlineDensity; vec3 color = mix(uBackgroundColor, uOutlineColor, sobelOutline); float alpha = mix(0., uOutlineDensity, sobelOutline); // vec3 color = vec3(depthEdge, normalEdge, sobelIdEdge); // Debug gl_FragColor = vec4(color, alpha); }`; const speckleEdgesGeneratorVert = /* glsl */` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); }`; const DefaultEdgesPassOptions = { depthMultiplier: 1, depthBias: 0.001, normalMultiplier: 1, normalBias: 15, outlineThickness: 1, outlineOpacity: 0.75, outlineColor: 0x323232, backgroundColor: 0xfffffff }; class EdgesPass extends BaseGPass { set options(value) { var _a, _b, _c, _d, _e, _f, _g, _h; super.options = value; this.edgesMaterial.uniforms.uDepthMultiplier.value = (_a = this._options.depthMultiplier) !== null && _a !== void 0 ? _a : DefaultEdgesPassOptions.depthMultiplier; this.edgesMaterial.uniforms.uDepthBias.value = (_b = this._options.depthBias) !== null && _b !== void 0 ? _b : DefaultEdgesPassOptions.depthBias; this.edgesMaterial.uniforms.uNormalMultiplier.value = (_c = this._options.normalMultiplier) !== null && _c !== void 0 ? _c : DefaultEdgesPassOptions.normalMultiplier; this.edgesMaterial.uniforms.uNormalBias.value = (_d = this._options.normalBias) !== null && _d !== void 0 ? _d : DefaultEdgesPassOptions.normalBias; this.edgesMaterial.uniforms.uOutlineThickness.value = (_e = this._options.outlineThickness) !== null && _e !== void 0 ? _e : DefaultEdgesPassOptions.outlineThickness; this.edgesMaterial.uniforms.uOutlineDensity.value = (_f = this._options.outlineOpacity) !== null && _f !== void 0 ? _f : DefaultEdgesPassOptions.outlineOpacity; this.edgesMaterial.uniforms.uOutlineColor.value = new Color((_g = this._options.outlineColor) !== null && _g !== void 0 ? _g : DefaultEdgesPassOptions.outlineColor); this.edgesMaterial.uniforms.uBackgroundColor.value = new Color((_h = this._options.backgroundColor) !== null && _h !== void 0 ? _h : DefaultEdgesPassOptions.backgroundColor); } constructor() { super(); this._options = Object.assign({}, DefaultEdgesPassOptions); this._outputTarget = Pipeline.createRenderTarget({ minFilter: LinearFilter, magFilter: LinearFilter }); this.edgesMaterial = new ShaderMaterial({ fragmentShader: speckleEdgesGeneratorFrag, vertexShader: speckleEdgesGeneratorVert, uniforms: { tDepth: { value: null }, tNormal: { value: null }, tId: { value: null }, size: { value: new Vector2(512, 512) }, uDepthMultiplier: { value: this._options.depthMultiplier }, uDepthBias: { value: this._options.depthBias }, uNormalMultiplier: { value: this._options.normalMultiplier }, uNormalBias: { value: this._options.normalBias }, uOutlineThickness: { value: this._options.outlineThickness }, uOutlineDensity: { value: this._options.outlineOpacity }, uOutlineColor: { value: new Color(this._options.outlineColor) }, uBackgroundColor: { value: new Color(this._options.backgroundColor) }, cameraNear: { value: 1 }, cameraFar: { value: 100 }, cameraProjectionMatrix: { value: new Matrix4() }, cameraInverseProjectionMatrix: { value: new Matrix4() } } }); this.edgesMaterial.depthWrite = false; this.fsQuad = new FullScreenQuad(this.edgesMaterial); } setTexture(uName, texture) { this.edgesMaterial.uniforms[uName].value = texture; this.edgesMaterial.needsUpdate = true; } get displayName() { return 'EDGES'; } update(camera) { this.edgesMaterial.defines['PERSPECTIVE_CAMERA'] = camera.isPerspectiveCamera ? 1 : 0; this.edgesMaterial.uniforms['cameraNear'].value = camera.near; this.edgesMaterial.uniforms['cameraFar'].value = camera.far; } render(renderer) { if (this.onBeforeRender) this.onBeforeRender(); renderer.setRenderTarget(this._outputTarget); this.fsQuad.render(renderer); if (this.onAfterRender) this.onAfterRender(); return false; } setSize(width, height) { super.setSize(width, height); this.edgesMaterial.uniforms['size'].value.set(width, height); this.edgesMaterial.needsUpdate = true; } } const speckleTemporalSupersamplingVert = /* glsl */` varying vec2 Uv; void main() { Uv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }`; const speckleTemporalSupersamplingFrag = /* glsl */` uniform float height; uniform float width; uniform sampler2D tDiffuse; uniform sampler2D tLastFrame; varying vec2 Uv; #define LuminanceEncodeApprox vec3(0.2126, 0.7152, 0.0722) float getLuminance(vec3 color) { return clamp(dot(color, LuminanceEncodeApprox), 0., 1.); } void main() { vec4 texel = texture2D(tDiffuse, Uv); vec2 oldPixelUv = Uv; vec4 oldTexel = texture2D(tLastFrame, oldPixelUv); // Use simple neighbor clamping vec4 maxNeighbor = vec4(0.0, 0.0, 0.0, 1.0); vec4 minNeighbor = vec4(1.0); vec4 average = vec4(0.0); for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { vec2 neighborUv = Uv + vec2(float(x) / width, float(y) / height); vec4 neighborTexel = texture2D(tDiffuse, neighborUv); maxNeighbor = max(maxNeighbor, neighborTexel); minNeighbor = min(minNeighbor, neighborTexel); average += neighborTexel / 9.0; } } float lum0 = getLuminance(texel.rgb); float lum1 = getLuminance(oldTexel.rgb); float unbiased_diff = abs(lum0 - lum1) / max(lum0, max(lum1, 0.2)); float unbiased_weight = 1.0 - unbiased_diff; float unbiased_weight_sqr = unbiased_weight * unbiased_weight; float k_feedback = mix(0.8800, 0.9700, unbiased_weight_sqr); // UE Method to get rid of flickering. Weight frame mixing amount // based on local contrast. float contrast = distance(average, texel); float weight = 0.05 * contrast; float blendFactor = mix(1. - weight, k_feedback, 1.); vec4 compositeColor = mix(texel, oldTexel, blendFactor); gl_FragColor = compositeColor; }`; class TAAPass extends ProgressiveGPass { constructor() { super(); this.outputToScreen = false; this._outputTarget = new WebGLRenderTarget(256, 256, { minFilter: LinearFilter, magFilter: LinearFilter }); this.historyTarget = new WebGLRenderTarget(256, 256, { minFilter: LinearFilter, magFilter: LinearFilter }); this.materialCopy = new ShaderMaterial({ uniforms: UniformsUtils.clone(CopyShader.uniforms), vertexShader: CopyShader.vertexShader, fragmentShader: CopyShader.fragmentShader, blending: NoBlending }); this.materialCopy.needsUpdate = true; this.reprojectionMaterial = new ShaderMaterial({ uniforms: { tDiffuse: { value: null }, tLastFrame: { value: null }, width: { value: 0 }, height: { value: 0 } }, transparent: true, blending: NoBlending, depthTest: false, depthWrite: false, vertexShader: speckleTemporalSupersamplingVert, fragmentShader: speckleTemporalSupersamplingFrag }); this.reprojectionMaterial.needsUpdate = true; this.fsQuad = new FullScreenQuad(); } get displayName() { return 'TAA'; } set inputTexture(texture) { this.inputTex = texture; } render(renderer) { var _a, _b; if (this.frameIndex === 0) { renderer.setRenderTarget(this._outputTarget); renderer.clear(); this.materialCopy.uniforms['tDiffuse'].value = this.inputTex; this.materialCopy.needsUpdate = true; this.fsQuad.material = this.materialCopy; this.fsQuad.render(renderer); } renderer.setRenderTarget(this.historyTarget); renderer.clear(); this.reprojectionMaterial.uniforms['tLastFrame'].value = (_a = this._outputTarget) === null || _a === void 0 ? void 0 : _a.texture; this.reprojectionMaterial.uniforms['tDiffuse'].value = this.inputTex; this.reprojectionMaterial.needsUpdate = true; this.fsQuad.material = this.reprojectionMaterial; this.fsQuad.render(renderer); renderer.setRenderTarget(this._outputTarget); renderer.clear(); this.materialCopy.uniforms['tDiffuse'].value = this.historyTarget.texture; this.materialCopy.needsUpdate = true; this.fsQuad.material = this.materialCopy; this.fsQuad.render(renderer); if (this.outputToScreen) { renderer.setRenderTarget(null); this.materialCopy.uniforms['tDiffuse'].value = (_b = this._outputTarget) === null || _b === void 0 ? void 0 : _b.texture; this.materialCopy.needsUpdate = true; this.fsQuad.material = this.materialCopy; this.fsQuad.render(renderer); } return super.render(renderer); } setSize(width, height) { super.setSize(width, height); this.historyTarget.setSize(width, height); this.reprojectionMaterial.uniforms['width'].value = width; this.reprojectionMaterial.uniforms['height'].value = height; } } const speckleDepthNormalVert = /* glsl */` #include #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; uniform mat4 rteModelViewMatrix; #endif #ifdef TRANSFORM_STORAGE attribute float objIndex; #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif #ifdef LINEAR_DEPTH varying vec4 vViewPosition; #endif varying vec3 vNormal; #include #include #include #include #include #include // This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible. // Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for // depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1. varying vec2 vHighPrecisionZW; #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } vec3 rotate_vertex_position(vec3 position, vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif void main() { #include #include #include #ifdef USE_DISPLACEMENTMAP #include #include #endif // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #include #include #include #include #include //#include // EDITED CHUNK #ifdef TRANSFORM_STORAGE vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif #ifdef USE_RTE mvPosition = rteModelViewMatrix * mvPosition; #else mvPosition = modelViewMatrix * mvPosition; #endif #ifdef LINEAR_DEPTH vViewPosition = mvPosition; #endif vNormal = normalize( transformedNormal ); gl_Position = projectionMatrix * mvPosition; #include // #include #if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; #endif vHighPrecisionZW = gl_Position.zw; } `; const speckleDepthNormalFrag = /* glsl */` #if __VERSION__ == 100 #extension GL_EXT_draw_buffers : require #endif #if DEPTH_PACKING == 3200 uniform float opacity; #endif #ifdef LINEAR_DEPTH varying vec4 vViewPosition; uniform float near; uniform float far; #endif #include #include #include #include #include #include #include #include varying vec2 vHighPrecisionZW; varying vec3 vNormal; #if __VERSION__ == 300 layout(location = 1) out vec4 gNormal; #endif void main() { #include vec4 diffuseColor = vec4( 1.0 ); #if DEPTH_PACKING == 3200 diffuseColor.a = opacity; #endif #include #include // #include #ifdef USE_ALPHATEST if ( diffuseColor.a < alphaTest ) discard; /** This is a workaround for rejecting shadows for certain materials, since three.js gave me no choice*/ #ifdef ALPHATEST_REJECTION if (alphaTest > 0. ) discard; #endif #endif #include vec3 normal = normalize( vNormal ); /** Output view space normals*/ vec4 outNormal = vec4( packNormalToRGB( normal ), 1.0 ); vec4 outDepth; // Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values. #ifdef LINEAR_DEPTH /** View z is negative moving away from the camera */ outDepth = packDepthToRGBA((vViewPosition.z + near) / (near - far)); #else float fragCoordZ = (0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5); #if DEPTH_PACKING == 3200 outDepth = vec4( vec3( 1.0 - fragCoordZ ), opacity ); #elif DEPTH_PACKING == 3201 outDepth = packDepthToRGBA( fragCoordZ ); #endif #endif #if __VERSION__ == 300 pc_fragColor = outDepth; gNormal = outNormal; #else gl_FragData[0] = outDepth; gl_FragData[1] = outNormal; #endif } `; class SpeckleDepthNormalMaterial extends SpeckleDepthMaterial { get vertexProgram() { return speckleDepthNormalVert; } get fragmentProgram() { return speckleDepthNormalFrag; } } const DefaultDepthNormalPassOptions = { ...DefaultDepthPassOptions }; class DepthNormalPass extends BaseGPass { get displayName() { return 'DEPTH-NORMAL'; } get overrideMaterial() { return this.mrtMaterial; } get depthTexture() { return this.mrt.texture[0]; } get normalTexture() { return this.mrt.texture[1]; } get outputTarget() { return this.mrt; } set outputTarget(target) { this.mrt = target; } set options(value) { super.options = value; this.depthType = this._options.depthType; } set depthType(value) { if (value === DepthType.LINEAR_DEPTH) if (this.mrtMaterial.defines) { this.mrtMaterial.defines['LINEAR_DEPTH'] = ' '; } else { if (this.mrtMaterial.defines) { delete this.mrtMaterial.defines['LINEAR_DEPTH']; } } this.mrtMaterial.needsUpdate = true; } constructor() { super(); this._options = Object.assign({}, DefaultDepthNormalPassOptions); this.mrt = Pipeline.createMultipleRenderTarget(2, { minFilter: NearestFilter, magFilter: NearestFilter }); this.mrtMaterial = new SpeckleDepthNormalMaterial({ depthPacking: RGBADepthPacking }, ['ALPHATEST_REJECTION']); this.mrtMaterial.blending = NoBlending; this.mrtMaterial.side = DoubleSide; this.depthType = this._options.depthType; } setClippingPlanes(planes) { this.mrtMaterial.clippingPlanes = planes; } update(camera) { this.mrtMaterial.userData.near.value = camera.near; this.mrtMaterial.userData.far.value = camera.far; this.mrtMaterial.needsUpdate = true; } render(renderer, camera, scene) { if (!camera || !scene) return false; if (this.onBeforeRender) this.onBeforeRender(); renderer.setRenderTarget(this.mrt); this.applyLayers(camera); this.clear(renderer); renderer.render(scene, camera); if (this.onAfterRender) this.onAfterRender(); return false; } setSize(width, height) { this.mrt.setSize(width, height); } } const speckleDepthNormalIdFrag = /* glsl */` #if __VERSION__ == 100 #extension GL_EXT_draw_buffers : require #endif #if DEPTH_PACKING == 3200 uniform float opacity; #endif #ifdef LINEAR_DEPTH varying vec4 vViewPosition; uniform float near; uniform float far; #endif #include #include #include #include #include #include #include #include varying vec2 vHighPrecisionZW; varying vec3 vNormal; varying vec3 vIdColor; #if __VERSION__ == 300 layout(location = 1) out vec4 gNormal; layout(location = 2) out vec4 gId; #endif void main() { #include vec4 diffuseColor = vec4( 1.0 ); #if DEPTH_PACKING == 3200 diffuseColor.a = opacity; #endif #include #include // #include #ifdef USE_ALPHATEST if ( diffuseColor.a < alphaTest ) discard; /** This is a workaround for rejecting shadows for certain materials, since three.js gave me no choice*/ #ifdef ALPHATEST_REJECTION if (alphaTest > 0. ) discard; #endif #endif #include vec3 normal = normalize( vNormal ); /** Output view space normals*/ vec4 outNormal = vec4( packNormalToRGB( normal ), 1.0 ); vec4 outDepth; // Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values. #ifdef LINEAR_DEPTH /** View z is negative moving away from the camera */ outDepth = packDepthToRGBA((vViewPosition.z + near) / (near - far)); #else float fragCoordZ = (0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5); #if DEPTH_PACKING == 3200 outDepth = vec4( vec3( 1.0 - fragCoordZ ), opacity ); #elif DEPTH_PACKING == 3201 outDepth = packDepthToRGBA( fragCoordZ ); #endif #endif #if __VERSION__ == 300 pc_fragColor = outDepth; gNormal = outNormal; gId = vec4(vIdColor, 1.0); #else gl_FragData[0] = outDepth; gl_FragData[1] = outNormal; gl_FragData[2] = vec4(vIdColor, 1.0); #endif } `; const speckleDepthNormalIdVert = /* glsl */` #include #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; uniform mat4 rteModelViewMatrix; #endif #if defined( TRANSFORM_STORAGE ) || ( defined( USE_INSTANCING ) && __VERSION__ == 100) attribute float objIndex; #endif #ifdef TRANSFORM_STORAGE #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif varying vec3 vIdColor; uniform int batchIndex; #ifdef LINEAR_DEPTH varying vec4 vViewPosition; #endif varying vec3 vNormal; #include #include #include #include #include #include // This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible. // Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for // depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1. varying vec2 vHighPrecisionZW; #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } vec3 rotate_vertex_position(vec3 position, vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif /** Original glsl100 and glsl300 hash functions. Good outputs but maybe a bit slow? */ /* #if __VERSION__ == 300 vec3 hashColor(uint id) { // A simple integer hash function id = (id ^ 61u) ^ (id >> 16u); id = id * 9u; id = id ^ (id >> 4u); id = id * 0x27d4eb2du; id = id ^ (id >> 15u); return vec3( float((id >> 16u) & 0xFFu) / 255.0, float((id >> 8u) & 0xFFu) / 255.0, float(id & 0xFFu) / 255.0 ); } #elif __VERSION__ == 100 vec3 hashColor(float id) { // Step 1: Simulate XOR by using mod and floating-point arithmetic id = mod(id + 61.0, 4294967296.0); id = mod(id - floor(id / 65536.0), 4294967296.0); // Approximate id ^ (id >> 16) // Step 2: Multiply by 9 (same as original) id = mod(id * 9.0, 4294967296.0); // Step 3: Simulate XOR with division/mod trick id = mod(id - floor(id / 16.0), 4294967296.0); // Approximate id ^ (id >> 4) // Step 4: Multiply by large prime id = mod(id * 666083407.0, 4294967296.0); // Approximate * 0x27d4eb2dU // Step 5: Simulate final XOR id = mod(id - floor(id / 32768.0), 4294967296.0); // Approximate id ^ (id >> 15) // Convert hash to RGB by extracting "fake" bit shifts return vec3( mod(floor(id / 65536.0), 256.0) / 255.0, // Simulates (id >> 16) & 0xFF mod(floor(id / 256.0), 256.0) / 255.0, // Simulates (id >> 8) & 0xFF mod(id, 256.0) / 255.0 // Simulates id & 0xFF ); } #endif */ /** Simpler hash function works on both glsl versions */ highp vec3 hashColor(float id) { // Large prime multipliers highp float r = mod(id * 127.1, 256.0) / 255.0; highp float g = mod(id * 987.654, 256.0) / 255.0; highp float b = mod(id * 4321.123, 256.0) / 255.0; return vec3(r, g, b); } int szudzikHash(int x, int y) { return (x >= y) ? (x * x + x + y) : (y * y + x); } void main() { #include #include #include #ifdef USE_DISPLACEMENTMAP #include #include #endif // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #include #include #include #include #include //#include // EDITED CHUNK #ifdef TRANSFORM_STORAGE vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif #ifdef USE_RTE mvPosition = rteModelViewMatrix * mvPosition; #else mvPosition = modelViewMatrix * mvPosition; #endif #ifdef LINEAR_DEPTH vViewPosition = mvPosition; #endif vNormal = normalize( transformedNormal ); #ifdef TRANSFORM_STORAGE vIdColor = hashColor(float(szudzikHash(int(objIndex), batchIndex))); #else #if defined( USE_INSTANCING ) #if __VERSION__ == 300 vIdColor = hashColor(float(szudzikHash(int(gl_InstanceID), batchIndex))); #elif __VERSION__ == 100 vIdColor = hashColor(float(szudzikHash(int(objIndex), batchIndex))); #endif #else vIdColor = vec3(0.); #endif #endif gl_Position = projectionMatrix * mvPosition; #include // #include #if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; #endif vHighPrecisionZW = gl_Position.zw; } `; class SpeckleDepthNormalIdMaterial extends SpeckleDepthNormalMaterial { get vertexProgram() { return speckleDepthNormalIdVert; } get fragmentProgram() { return speckleDepthNormalIdFrag; } get uniformsDef() { return { ...super.uniformsDef, batchIndex: 0 }; } onBeforeRender(_this, _scene, _camera, _geometry, object) { if (this.defines && this.defines['USE_RTE']) { object.modelViewMatrix.copy(_this.RTEBuffers.rteViewModelMatrix); this.userData.uViewer_low.value.copy(_this.RTEBuffers.viewerLow); this.userData.uViewer_high.value.copy(_this.RTEBuffers.viewerHigh); this.userData.rteModelViewMatrix.value.copy(_this.RTEBuffers.rteViewModelMatrix); this.needsUpdate = true; } if (object instanceof SpeckleMesh || object instanceof ExtendedInstancedMesh) { this.userData.batchIndex.value = object.batchIndex; this.needsUpdate = true; } } } const DefaultDepthNormalIdPassOptions = { ...DefaultDepthNormalPassOptions }; class DepthNormalIdPass extends DepthNormalPass { get displayName() { return 'DEPTH-NORMAL-ID'; } get idTexture() { return this.mrt.texture[2]; } set options(value) { super.options = value; } constructor() { super(); this._options = Object.assign({}, DefaultDepthNormalIdPassOptions); this.mrt = Pipeline.createMultipleRenderTarget(3, { minFilter: NearestFilter, magFilter: NearestFilter }); this.mrtMaterial = new SpeckleDepthNormalIdMaterial({ depthPacking: RGBADepthPacking }, ['ALPHATEST_REJECTION']); this.mrtMaterial.blending = NoBlending; this.mrtMaterial.side = DoubleSide; this.depthType = this._options.depthType; } } const speckleNormalVert = /* glsl */` #define NORMAL #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; #endif #ifdef TRANSFORM_STORAGE attribute float objIndex; #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) varying vec3 vViewPosition; #endif #include #include #include #include #include #include #include #include #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } vec3 rotate_vertex_position(vec3 position, vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif void main() { #include #include #include #include #include // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #include #include #include #include #include //#include // EDITED CHUNK #ifdef TRANSFORM_STORAGE vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif mvPosition = modelViewMatrix * mvPosition; gl_Position = projectionMatrix * mvPosition; #include #include #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) vViewPosition = - mvPosition.xyz; #endif } `; const speckleNormalFrag = /* glsl */` #define NORMAL uniform float opacity; #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) varying vec3 vViewPosition; #endif #include #include #include #include #include #include #include void main() { #include #include #include #include gl_FragColor = vec4( packNormalToRGB( normal ), opacity ); #ifdef OPAQUE gl_FragColor.a = 1.0; #endif } `; /* eslint-disable camelcase */ class SpeckleNormalMaterial extends ExtendedMeshNormalMaterial { get vertexProgram() { return speckleNormalVert; } get fragmentProgram() { return speckleNormalFrag; } get baseUniforms() { return ShaderLib.normal.uniforms; } get uniformsDef() { return { uViewer_high: new Vector3(), uViewer_low: new Vector3(), uTransforms: [new Matrix4()], tTransforms: null }; } constructor(parameters, defines = []) { super(parameters); this.init(defines); } /** We need a unique key per program */ customProgramCacheKey() { return this.constructor.name; } copy(source) { super.copy(source); this.copyFrom(source); return this; } /** Called by three.js render loop */ onBeforeRender(_this, _scene, _camera, _geometry, object) { if (this.defines && this.defines['USE_RTE']) { object.modelViewMatrix.copy(_this.RTEBuffers.rteViewModelMatrix); this.userData.uViewer_low.value.copy(_this.RTEBuffers.viewerLow); this.userData.uViewer_high.value.copy(_this.RTEBuffers.viewerHigh); this.needsUpdate = true; } } } class NormalsPass extends GeometryPass { get displayName() { return 'GEOMETRY-NORMALS'; } get overrideMaterial() { return this.normalsMaterial; } constructor() { super(); this._outputTarget = Pipeline.createRenderTarget({ minFilter: NearestFilter, magFilter: NearestFilter }); this.normalsMaterial = new SpeckleNormalMaterial({}); this.normalsMaterial.blending = NoBlending; this.normalsMaterial.side = DoubleSide; } } const DefaultEdgesPipelineOptions = { outlineThickness: 1, outlineOpacity: 0.75, outlineColor: 0x323232 }; class EdgesPipeline extends ProgressivePipeline { constructor(speckleRenderer, options = DefaultEdgesPipelineOptions) { super(speckleRenderer, options); const isMRTCapable = speckleRenderer.renderer.capabilities.isWebGL2 || speckleRenderer.renderer.context.getExtension('WEBGL_draw_buffers') !== null; if (isMRTCapable) this.MRTPipeline(options);else this.SRTPipeline(options); } depthNormalIdPassVisibility(renderer) { const visibilityRanges = {}; for (const k in renderer.batcher.batches) { const batch = renderer.batcher.batches[k]; if (batch.geometryType !== GeometryType.MESH) { visibilityRanges[k] = NoneBatchUpdateRange; continue; } /** Look for a transparent group */ const transparentGroup = batch.groups.find(value => { if (value.materialIndex === undefined) return false; const material = batch.materials[value.materialIndex]; return Materials.isTransparent(material) && material.visible && !(material instanceof SpeckleGhostMaterial); }); /** Look for a hidden group */ const hiddenGroup = batch.groups.find(value => { if (value.materialIndex === undefined) return false; return batch.materials[value.materialIndex].visible === false; }); /** If there is a group return it's range */ if (transparentGroup) { visibilityRanges[k] = { offset: transparentGroup.start, count: hiddenGroup !== undefined ? hiddenGroup.start - transparentGroup.start : batch.getCount() - transparentGroup.start }; continue; } /** Exclude entire batch */ visibilityRanges[k] = NoneBatchUpdateRange; } return visibilityRanges; } MRTPipeline(options) { var _a, _b, _c; const depthNormalIdPass = new DepthNormalIdPass(); depthNormalIdPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); depthNormalIdPass.setJitter(true); depthNormalIdPass.setClearColor(0x000000, 1); depthNormalIdPass.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH); depthNormalIdPass.setVisibility(ObjectVisibility.DEPTH); const depthNormalIdPassTransparent = new DepthNormalIdPass(); depthNormalIdPassTransparent.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); depthNormalIdPassTransparent.setJitter(true); depthNormalIdPassTransparent.setVisibility(ObjectVisibility.CUSTOM, this.depthNormalIdPassVisibility); depthNormalIdPassTransparent.outputTarget = depthNormalIdPass.outputTarget; const depthPassNormalIdDynamic = new DepthNormalIdPass(); depthPassNormalIdDynamic.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); depthPassNormalIdDynamic.setClearColor(0x000000, 1); depthPassNormalIdDynamic.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH); depthPassNormalIdDynamic.setVisibility(ObjectVisibility.DEPTH); const depthPassNormalIdDynamicTransparent = new DepthNormalIdPass(); depthPassNormalIdDynamicTransparent.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); depthPassNormalIdDynamicTransparent.setVisibility(ObjectVisibility.CUSTOM, this.depthNormalIdPassVisibility); depthPassNormalIdDynamicTransparent.outputTarget = depthPassNormalIdDynamic.outputTarget; const edgesPass = new EdgesPass(); edgesPass.setTexture('tDepth', depthNormalIdPass.depthTexture); edgesPass.setTexture('tNormal', depthNormalIdPass.normalTexture); edgesPass.setTexture('tId', depthNormalIdPass.idTexture); edgesPass.options = options; const edgesPassDynamic = new EdgesPass(); edgesPassDynamic.setTexture('tDepth', depthPassNormalIdDynamic.depthTexture); edgesPassDynamic.setTexture('tNormal', depthPassNormalIdDynamic.normalTexture); edgesPassDynamic.setTexture('tId', depthPassNormalIdDynamic.idTexture); edgesPassDynamic.options = options; const taaPass = new TAAPass(); taaPass.inputTexture = (_a = edgesPass.outputTarget) === null || _a === void 0 ? void 0 : _a.texture; taaPass.accumulationFrames = this.accumulationFrameCount; this.dynamicStage.push(depthPassNormalIdDynamic, depthPassNormalIdDynamicTransparent, edgesPassDynamic); this.progressiveStage.push(depthNormalIdPass, depthNormalIdPassTransparent, edgesPass, taaPass); this.passList = this.dynamicStage; this.depthPass = depthNormalIdPass; this.depthPassDynamic = depthPassNormalIdDynamic; this.edgePass = edgesPass; this.edgePassDynamic = edgesPassDynamic; this.outputTexture = (_b = taaPass.outputTarget) === null || _b === void 0 ? void 0 : _b.texture; this.outputTextureDynamic = (_c = edgesPassDynamic.outputTarget) === null || _c === void 0 ? void 0 : _c.texture; } SRTPipeline(options) { var _a, _b, _c, _d, _e, _f, _g; const depthPass = new DepthPass(); depthPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); depthPass.setVisibility(ObjectVisibility.DEPTH); depthPass.setJitter(true); depthPass.setClearColor(0x000000, 1); depthPass.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH); const normalPass = new NormalsPass(); normalPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); normalPass.setVisibility(ObjectVisibility.OPAQUE); normalPass.setJitter(true); normalPass.setClearColor(0x000000, 1); normalPass.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH); const depthPassDynamic = new DepthPass(); depthPassDynamic.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); depthPassDynamic.setVisibility(ObjectVisibility.DEPTH); depthPassDynamic.setClearColor(0x000000, 1); depthPassDynamic.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH); const normalPassDynamic = new NormalsPass(); normalPassDynamic.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); normalPassDynamic.setVisibility(ObjectVisibility.OPAQUE); normalPassDynamic.setClearColor(0x000000, 1); normalPassDynamic.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH); const edgesPass = new EdgesPass(); edgesPass.setTexture('tDepth', (_a = depthPass.outputTarget) === null || _a === void 0 ? void 0 : _a.texture); edgesPass.setTexture('tNormal', (_b = normalPass.outputTarget) === null || _b === void 0 ? void 0 : _b.texture); edgesPass.options = options; const edgesPassDynamic = new EdgesPass(); edgesPassDynamic.setTexture('tDepth', (_c = depthPassDynamic.outputTarget) === null || _c === void 0 ? void 0 : _c.texture); edgesPassDynamic.setTexture('tNormal', (_d = normalPassDynamic.outputTarget) === null || _d === void 0 ? void 0 : _d.texture); edgesPassDynamic.options = options; const taaPass = new TAAPass(); taaPass.inputTexture = (_e = edgesPass.outputTarget) === null || _e === void 0 ? void 0 : _e.texture; taaPass.accumulationFrames = this.accumulationFrameCount; this.dynamicStage.push(depthPassDynamic, normalPassDynamic, edgesPassDynamic); this.progressiveStage.push(depthPass, normalPass, edgesPass, taaPass); this.passList = this.dynamicStage; this.depthPass = depthPass; this.depthPassDynamic = depthPassDynamic; this.edgePass = edgesPass; this.edgePassDynamic = edgesPassDynamic; this.outputTexture = (_f = taaPass.outputTarget) === null || _f === void 0 ? void 0 : _f.texture; this.outputTextureDynamic = (_g = edgesPassDynamic.outputTarget) === null || _g === void 0 ? void 0 : _g.texture; } } class DefaultPipeline extends ProgressivePipeline { constructor(speckleRenderer, options = DefaultPipelineOptions) { var _a, _b; super(speckleRenderer); const edgesPipeline = options.edges ? new EdgesPipeline(speckleRenderer) : null; const depthPass = !options.edges ? new DepthPass() : null; if (depthPass) { depthPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); depthPass.setVisibility(ObjectVisibility.DEPTH); depthPass.setJitter(true); depthPass.setClearColor(0x000000, 1); depthPass.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH); } const depthTex = options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.depthPass.depthTexture : (_a = depthPass === null || depthPass === void 0 ? void 0 : depthPass.outputTarget) === null || _a === void 0 ? void 0 : _a.texture; const depthSubPipelineDynamic = (options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.dynamicPasses : []) || []; const depthSubPipelineProgressive = (options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.progressivePasses : depthPass ? [depthPass] : []) || []; const opaqueColorPass = new GeometryPass(); opaqueColorPass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.PROPS]); opaqueColorPass.setVisibility(ObjectVisibility.OPAQUE); const transparentColorPass = new GeometryPass(); transparentColorPass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.STREAM_CONTENT_TEXT, ObjectLayers.SHADOWCATCHER]); transparentColorPass.setVisibility(ObjectVisibility.TRANSPARENT); const progressiveAOPass = new ProgressiveAOPass(); progressiveAOPass.setTexture('tDepth', depthTex); progressiveAOPass.accumulationFrames = this.accumulationFrameCount; progressiveAOPass.setClearColor(0xffffff, 1); const blendPass = new BlendPass(); blendPass.options = { blendAO: true, blendEdges: options.edges }; blendPass.setTexture('tAo', (_b = progressiveAOPass.outputTarget) === null || _b === void 0 ? void 0 : _b.texture); blendPass.setTexture('tEdges', options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.outputTexture : undefined); blendPass.accumulationFrames = this.accumulationFrameCount; const blendPassDynamic = new BlendPass(); blendPassDynamic.options = { blendAO: false, blendEdges: options.edges }; blendPassDynamic.setTexture('tEdges', options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.outputTextureDynamic : undefined); blendPassDynamic.accumulationFrames = this.accumulationFrameCount; const stencilPass = new StencilPass(); stencilPass.setVisibility(ObjectVisibility.STENCIL); stencilPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); const stencilMaskPass = new StencilMaskPass(); stencilMaskPass.setVisibility(ObjectVisibility.STENCIL); stencilMaskPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); stencilMaskPass.setClearFlags(ClearFlags.DEPTH); const overlayPass = new GeometryPass(); overlayPass.setLayers([ObjectLayers.OVERLAY, ObjectLayers.MEASUREMENTS]); this.dynamicStage.push(...depthSubPipelineDynamic, stencilPass, opaqueColorPass, transparentColorPass, ...(options.edges ? [blendPassDynamic] : []), stencilMaskPass, overlayPass); this.progressiveStage.push(...depthSubPipelineProgressive, stencilPass, opaqueColorPass, transparentColorPass, stencilMaskPass, progressiveAOPass, blendPass, overlayPass); this.passthroughStage.push(stencilPass, opaqueColorPass, transparentColorPass, stencilMaskPass, blendPass, overlayPass); this.passList = this.dynamicStage; } } // three-box3-extension.ts const _vector3$1 = new Vector3(); const _box3$1 = new Box3(); OBB.prototype.isEmpty = function () { return this.halfSize.length() === 0; }; OBB.prototype.equals = function (other, epsion = 1e-6) { _vector3$1.copy(this.center); _vector3$1.sub(other.center); if (_vector3$1.length() > epsion) return false; _vector3$1.copy(this.halfSize); _vector3$1.sub(other.halfSize); if (_vector3$1.length() > epsion) return false; for (let i = 0; i < 9; i++) { if (Math.abs(this.rotation.elements[i] - other.rotation.elements[i]) > epsion) return false; } return true; }; OBB.prototype._min = new Vector3(); OBB.prototype._max = new Vector3(); Object.defineProperty(OBB.prototype, 'min', { get() { return new Vector3().copy(this.center).sub(this.halfSize); }, set(value) { this._min.copy(value); _box3$1.set(value, this._max); _box3$1.getCenter(this.center); _box3$1.getSize(this.halfSize); this.halfSize.multiplyScalar(0.5); }, enumerable: true, configurable: true }); Object.defineProperty(OBB.prototype, 'max', { get() { return new Vector3().copy(this.center).add(this.halfSize); }, set(value) { this._max.copy(value); _box3$1.set(this._min, value); _box3$1.getCenter(this.center); _box3$1.getSize(this.halfSize); this.halfSize.multiplyScalar(0.5); }, enumerable: true, configurable: true }); Box3.prototype.fromOBB = function (obb) { const { center, halfSize, rotation } = obb; const localCorners = [new Vector3(-halfSize.x, -halfSize.y, -halfSize.z), new Vector3(-halfSize.x, -halfSize.y, halfSize.z), new Vector3(-halfSize.x, halfSize.y, -halfSize.z), new Vector3(-halfSize.x, halfSize.y, halfSize.z), new Vector3(halfSize.x, -halfSize.y, -halfSize.z), new Vector3(halfSize.x, -halfSize.y, halfSize.z), new Vector3(halfSize.x, halfSize.y, -halfSize.z), new Vector3(halfSize.x, halfSize.y, halfSize.z)]; const worldCorners = localCorners.map(corner => corner.applyMatrix3(rotation).add(center)); const aabb = new Box3().setFromPoints(worldCorners); return aabb; }; /** This is untested. Might be busted */ Box3.prototype.intersectOBB = function (obb) { // Step 1: Compute AABB corners const aabbCorners = [new Vector3(this.min.x, this.min.y, this.min.z), new Vector3(this.min.x, this.min.y, this.max.z), new Vector3(this.min.x, this.max.y, this.min.z), new Vector3(this.min.x, this.max.y, this.max.z), new Vector3(this.max.x, this.min.y, this.min.z), new Vector3(this.max.x, this.min.y, this.max.z), new Vector3(this.max.x, this.max.y, this.min.z), new Vector3(this.max.x, this.max.y, this.max.z)]; // Step 2: Transform AABB corners to OBB's local space const invRotation = new Matrix3().copy(obb.rotation).invert(); const localAABBCorners = aabbCorners.map(corner => corner.clone().sub(obb.center).applyMatrix3(invRotation)); // Step 3: Keep points inside the OBB (AABB points clipped by OBB) const intersectionPoints = []; for (const corner of localAABBCorners) { if (Math.abs(corner.x) <= obb.halfSize.x && Math.abs(corner.y) <= obb.halfSize.y && Math.abs(corner.z) <= obb.halfSize.z) { intersectionPoints.push(corner); } } // Step 4: Clip OBB edges against AABB and collect additional intersection points // (Skipping full clipping for brevity—this can be done using segment-box clipping) if (intersectionPoints.length === 0) { return null; // No intersection } // Step 5: Compute the centroid of the intersection points const centroid = new Vector3(); intersectionPoints.forEach(pt => centroid.add(pt)); centroid.divideScalar(intersectionPoints.length); // Step 6: Compute a best-fit OBB for the intersection points // Use PCA or a heuristic to determine the best-fit orientation // For simplicity, we'll use the OBB's existing axes const bestFitAxes = [new Vector3(), new Vector3(), new Vector3()]; obb.rotation.extractBasis(bestFitAxes[0], bestFitAxes[1], bestFitAxes[2]); // Step 7: Compute half-size along each axis const halfSize = new Vector3(); for (const pt of intersectionPoints) { for (let i = 0; i < 3; i++) { const proj = pt.clone().sub(centroid).dot(bestFitAxes[i]); halfSize.setComponent(i, Math.max(halfSize.getComponent(i), Math.abs(proj))); } } // Step 8: Convert centroid back to world space const worldCentroid = centroid.applyMatrix3(obb.rotation).add(obb.center); // Step 9: Return the resulting OBB return new OBB(worldCentroid, halfSize, obb.rotation.clone()); }; Box3.prototype.isInfiniteBox = function () { return this.min.x === -Infinity || this.min.y === -Infinity || this.min.z === -Infinity || this.max.x === Infinity || this.max.y === Infinity || this.max.z === Infinity; }; class RenderingStats { constructor() { this.renderTimeAcc = 0; this.renderTimeSamples = 0; this.renderTimeMaxSamples = 500; this.renderTimeStart = 0; this.renderTime = 0; this.objects = 0; this.batchCount = 0; this.drawCalls = 0; this.trisCount = 0; this.vertCount = 0; } frameStart() { this.renderTimeStart = performance.now(); } frameEnd() { this.renderTimeAcc += performance.now() - this.renderTimeStart; this.renderTimeSamples++; if (this.renderTimeSamples % this.renderTimeMaxSamples === 0) { this.renderTime = this.renderTimeAcc / this.renderTimeSamples; this.renderTimeSamples = 0; this.renderTimeAcc = 0; // Logger.log(this.renderTime) } } } const DefaultObjectPickConfiguration = { pickedObjectsFilter: arg => { const material = arg[1]; return material && // Mateirial exists material.visible && ( // Material is visible material.transparent ? material.opacity > 0 : true) && // Material is transparent and opacity is non zero !(material instanceof SpeckleGhostMaterial) // Material is not a GhostMaterial ; } }; class SpeckleRenderer { /******************************** * Renderer and rendering flags */ get renderer() { return this._renderer; } set needsRender(value) { this._needsRender || (this._needsRender = value); } set shadowMapNeedsUpdate(value) { this._renderer.shadowMap.needsUpdate = value; } /********************** * Bounds and volumes */ get sceneBox() { const bounds = new Box3(); const batches = this.batcher.getBatches(); for (let k = 0; k < batches.length; k++) { bounds.union(batches[k].bounds); } return bounds; } get visibleSceneBox() { const bounds = new Box3(); const batches = this.batcher.getBatches(); for (let k = 0; k < batches.length; k++) { const batch = batches[k]; const rvs = batch.renderViews.slice(); rvs.sort((a, b) => { return a.batchStart - b.batchStart; }); let batchObjects = null; if (isAcceleratedBatchType(batch)) { batchObjects = batch.mesh.batchObjects.slice(); batchObjects.sort((a, b) => { return a.renderView.batchStart - b.renderView.batchStart; }); } const visibleRange = batch.getVisibleRange(); let lo = 0, hi = rvs.length; while (lo < hi) { const mid = lo + hi >>> 1; if (rvs[mid].batchStart < visibleRange.offset) lo = mid + 1;else hi = mid; } const qStart = visibleRange.offset; const qEnd = visibleRange.offset + visibleRange.count; for (; lo < rvs.length; lo++) { const s = rvs[lo]; const b = batchObjects ? batchObjects[lo] : null; if (s.batchStart >= qEnd) break; const sEnd = s.batchStart + s.batchCount; if (s.batchStart >= qStart && sEnd <= qEnd) { bounds.union(b ? b.aabb : s.aabb); } } } return bounds; } get sceneSphere() { return this.sceneBox.getBoundingSphere(new Sphere()); } get sceneCenter() { return this.sceneBox.getCenter(new Vector3()); } get clippingVolume() { return !this._clippingVolume.isEmpty() && this._renderer.localClippingEnabled ? this._clippingVolume : new OBB().fromBox3(this.visibleSceneBox); } set clippingVolume(box) { if (this.sceneBox) { if (box instanceof Box3) this._clippingVolume = new OBB().fromBox3(this.sceneBox.intersect(box));else if (box instanceof OBB) { /** Normally we'd want the intersection, but that may be too hard to do for such little purpose */ this._clippingVolume = new OBB().copy(box); // const intersection = this.sceneBox.intersectOBB(box) // this._clippingVolume = intersection // ? intersection // : new OBB().fromBox3(this.sceneBox) } else Logger.error(`Incorrect clipping volume set: ${box}. Required Box3 or OBB`); } } /***************** * Clipping planes */ get clippingPlanes() { return this._clippingPlanes; } set clippingPlanes(value) { this._clippingPlanes = value.map(value => new Plane().copy(value)); this.updateClippingPlanes(); this.renderer.shadowMap.needsUpdate = true; this.needsRender = true; this.resetPipeline(); } /**************** * Common Objects */ get allObjects() { return this._scene.getObjectByName('ContentGroup'); } get scene() { return this._scene; } /******** * Lights */ get sunLight() { return this.sun; } set indirectIBL(texture) { this._scene.environment = texture; } set indirectIBLIntensity(value) { /** Update envMap intensity for mesh geometry types only */ const batches = this.batcher.getBatches(undefined, GeometryType.MESH); for (let k = 0; k < batches.length; k++) { const materials = batches[k].materials; for (let k = 0; k < materials.length; k++) { materials[k].envMapIntensity = value; } } } /******** * Camera */ get speckleCamera() { return this._speckleCamera; } set speckleCamera(value) { this._speckleCamera = value; this._speckleCamera.on(CameraEvent.Dynamic, () => { this._needsRender = true; this._pipeline instanceof ProgressivePipeline && this._pipeline.onStationaryEnd(); }); this._speckleCamera.on(CameraEvent.Stationary, () => { this._needsRender = true; this._pipeline instanceof ProgressivePipeline && this._pipeline.onStationaryBegin(); }); this._speckleCamera.on(CameraEvent.FrameUpdate, needsUpdate => { this.needsRender = needsUpdate; }); } get renderingCamera() { if (!this._speckleCamera) return null; return this._speckleCamera.renderingCamera; } /********** * Pipeline */ set pipeline(value) { this._pipeline = value; this._pipeline.setClippingPlanes(this._clippingPlanes); this._pipeline.reset(); this.resize(); } get pipeline() { return this._pipeline; } get shadowcatcher() { return this._shadowcatcher; } /************** * Intersections */ get intersections() { return this._intersections; } /***************** * Rendering Stats */ get renderingStats() { const batches = Object.values(this.batcher.batches); this._renderinStats.objects = batches.reduce((a, c) => a + c.renderViews.length, 0); this._renderinStats.batchCount = batches.length; this._renderinStats.drawCalls = batches.reduce((a, c) => a + c.drawCalls, 0), this._renderinStats.trisCount = batches.reduce((a, c) => a + c.triCount, 0), this._renderinStats.vertCount = batches.reduce((a, c) => a + c.vertCount, 0), this._renderinStats.batchDetails = batches.map(batch => { return { type: batch.constructor.name, objCount: batch.renderViews.length, drawCalls: batch.drawCalls, minDrawCalls: batch.minDrawCalls, tris: batch.triCount, verts: batch.vertCount }; }); return this._renderinStats; } constructor(tree, viewer /** TEMPORARY */) { this.SHOW_HELPERS = false; this.IGNORE_ZERO_OPACITY_OBJECTS = true; this.SHOW_BVH = false; this._speckleCamera = null; this.sunConfiguration = DefaultLightConfiguration; this.cancel = {}; this._clippingPlanes = []; this._clippingVolume = new OBB(); this._renderOverride = null; this.objectPickConfiguration = DefaultObjectPickConfiguration; this.tree = tree; this._renderinStats = new RenderingStats(); this._scene = new Scene(); this.rootGroup = new Group(); this.rootGroup.name = 'ContentGroup'; this.rootGroup.layers.set(ObjectLayers.STREAM_CONTENT); this._scene.add(this.rootGroup); this._intersections = new Intersections(); this.viewer = viewer; } create(container) { this._renderer = new SpeckleWebGLRenderer({ antialias: true, alpha: true, preserveDrawingBuffer: true, stencil: true }); this._renderer.setClearColor(0xffffff, 0); this._renderer.setPixelRatio(window.devicePixelRatio); this._renderer.outputEncoding = sRGBEncoding; this._renderer.toneMapping = ACESFilmicToneMapping; this._renderer.toneMappingExposure = 0.5; this._renderer.shadowMap.enabled = true; this._renderer.shadowMap.type = VSMShadowMap; this._renderer.shadowMap.autoUpdate = false; this._renderer.shadowMap.needsUpdate = true; this._renderer.physicallyCorrectLights = true; /** No autoclear. We're clearing ourselves */ this._renderer.autoClear = false; this._renderer.autoClearColor = false; this._renderer.autoClearDepth = false; this._renderer.autoClearStencil = false; this.container = container; this._renderer.setSize(container.offsetWidth, container.offsetHeight); container.appendChild(this._renderer.domElement); this.batcher = new Batcher(this.renderer.capabilities); this._pipeline = new DefaultPipeline(this); this.input = new Input(this._renderer.domElement, this.viewer.params.restrictInputToCanvas); this.input.on(InputEvent.Click, this.onClick.bind(this)); this.input.on(InputEvent.DoubleClick, this.onDoubleClick.bind(this)); this.addDirectLights(); if (this.SHOW_HELPERS) { const helpers = new Group(); helpers.name = 'Helpers'; this._scene.add(helpers); // Will need a OBBHelper // const sceneBoxHelper = new Box3Helper(this.clippingVolume, new Color(0xff00ff)) // sceneBoxHelper.name = 'SceneBoxHelper' // sceneBoxHelper.layers.set(ObjectLayers.PROPS) // helpers.add(sceneBoxHelper) const dirLightHelper = new DirectionalLightHelper(this.sun, 50, 0xff0000); dirLightHelper.name = 'DirLightHelper'; dirLightHelper.layers.set(ObjectLayers.PROPS); helpers.add(dirLightHelper); const camHelper = new CameraHelper(this.sun.shadow.camera); camHelper.name = 'CamHelper'; camHelper.layers.set(ObjectLayers.PROPS); helpers.add(camHelper); } this._shadowcatcher = new Shadowcatcher(ObjectLayers.SHADOWCATCHER, [ObjectLayers.STREAM_CONTENT_MESH]); let restoreVisibility; let opaque; this._shadowcatcher.shadowcatcherPass.onBeforeRender = () => { restoreVisibility = this.batcher.saveVisiblity(); opaque = this.batcher.getOpaque(); this.batcher.applyVisibility(opaque); this.batcher.overrideMaterial(opaque, this._shadowcatcher.shadowcatcherPass.drawDepthMaterial); }; this._shadowcatcher.shadowcatcherPass.onAfterRender = () => { this.batcher.applyVisibility(restoreVisibility); this.batcher.restoreMaterial(opaque); }; this._scene.add(this._shadowcatcher.shadowcatcherMesh); } update(deltaTime) { if (!this.renderingCamera) return; this.batcher.update(deltaTime); this.renderingCamera.updateMatrixWorld(true); this._renderer.updateRTEViewModel(this.renderingCamera); this.updateRTEShadows(); this.updateTransforms(); this._pipeline.update(this.renderingCamera); if (this.sunConfiguration.shadowcatcher && this._shadowcatcher) { this._shadowcatcher.update(this._scene); } } updateRTEShadowBuffers() { if (!this._renderer.shadowMap.needsUpdate) return false; this._renderer.RTEBuffers.shadowViewer.set(this.sun.shadow.camera.matrixWorld.elements[12], this.sun.shadow.camera.matrixWorld.elements[13], this.sun.shadow.camera.matrixWorld.elements[14]); Geometry.DoubleToHighLowVector(this._renderer.RTEBuffers.shadowViewer, this._renderer.RTEBuffers.shadowViewerLow, this._renderer.RTEBuffers.shadowViewerHigh); this._renderer.RTEBuffers.rteShadowViewModelMatrix.copy(this.sun.shadow.camera.matrixWorldInverse); this._renderer.RTEBuffers.rteShadowViewModelMatrix.elements[12] = 0; this._renderer.RTEBuffers.rteShadowViewModelMatrix.elements[13] = 0; this._renderer.RTEBuffers.rteShadowViewModelMatrix.elements[14] = 0; // Lovely this._renderer.RTEBuffers.rteShadowMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0); this._renderer.RTEBuffers.rteShadowMatrix.multiply(this.sun.shadow.camera.projectionMatrix); this._renderer.RTEBuffers.rteShadowMatrix.multiply(this._renderer.RTEBuffers.rteShadowViewModelMatrix); return true; } updateRTEShadows() { if (!this.updateRTEShadowBuffers()) return; const meshBatches = this.batcher.getBatches(undefined, GeometryType.MESH); for (let k = 0; k < meshBatches.length; k++) { const speckleMesh = meshBatches[k].mesh; /** Shadowmap depth material does not go thorugh the normal flow. * It's onBeforeRender is not getting called That's why we're updating * the RTE related uniforms manually here */ speckleMesh.traverse(obj => { const depthMaterial = obj.customDepthMaterial; if (depthMaterial) { depthMaterial.userData.uViewer_low.value.copy(this._renderer.RTEBuffers.shadowViewerLow); depthMaterial.userData.uViewer_high.value.copy(this._renderer.RTEBuffers.shadowViewerHigh); depthMaterial.userData.rteModelViewMatrix.value.copy(this._renderer.RTEBuffers.rteShadowViewModelMatrix); depthMaterial.needsUpdate = true; } }); } } updateTransforms() { const meshBatches = this.batcher.getBatches(undefined, [GeometryType.MESH, GeometryType.TEXT]); for (let k = 0; k < meshBatches.length; k++) { const meshBatch = meshBatches[k].mesh; meshBatch.updateTransformsUniform(); // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore meshBatch.traverse(obj => { const depthMaterial = obj.customDepthMaterial; if (depthMaterial) { meshBatch.updateMaterialTransformsUniform(depthMaterial); } }); } } resetPipeline() { this._needsRender = true; this._pipeline.reset(); } render() { if (this._renderOverride) { this._renderOverride(); return; } if (!this._speckleCamera) return; if (this._needsRender) { this._renderinStats.frameStart(); this.batcher.render(this.renderer); this._needsRender = this._pipeline.render(); this._renderinStats.frameEnd(); if (this.sunConfiguration.shadowcatcher && this._shadowcatcher) { this._shadowcatcher.render(this._renderer); } } } resize(width, height) { if (!width || !height) { const size = this._renderer.getSize(new Vector2()); width = size.x; height = size.y; } width = Math.floor(width); height = Math.floor(height); this.renderer.setSize(width, height); const dpr = this._renderer.getPixelRatio(); this._pipeline.resize(width * dpr, height * dpr); this._pipeline.reset(); this._needsRender = true; } async *addRenderTree(renderTree) { this.cancel[renderTree.id] = false; const subtreeGroup = new Group(); subtreeGroup.name = renderTree.id; subtreeGroup.layers.set(ObjectLayers.STREAM_CONTENT); this.rootGroup.add(subtreeGroup); const generator = this.batcher.makeBatches(this.tree, renderTree, SpeckleTypeAllRenderables); let currentBatchCount = 0; let lastBatchCount = -1; this._renderOverride = () => { if (currentBatchCount > lastBatchCount) { this._pipeline.render(); lastBatchCount = currentBatchCount; } }; for await (const batch of generator) { if (!batch) continue; this.addBatch(batch, subtreeGroup); if (batch.geometryType === GeometryType.MESH) { this.updateDirectLights(); } if (this.cancel[renderTree.id]) { void generator.return(); this.removeRenderTree(renderTree.id); delete this.cancel[renderTree.id]; break; } currentBatchCount++; yield; } this._renderOverride = null; this.updateHelpers(); /** We'll just update the shadowcatcher after all batches are loaded */ this.updateShadowCatcher(true); this.updateClippingPlanes(); if (this._speckleCamera) this._speckleCamera.updateCameraPlanes(this.sceneBox); delete this.cancel[renderTree.id]; } addBatch(batch, parent) { const batchRenderable = batch.renderObject; parent.add(batchRenderable); let useRTE = false; if (batchRenderable instanceof SpeckleMesh || batchRenderable instanceof SpeckleInstancedMesh || batchRenderable instanceof SpeckleBatchedText) { if (batchRenderable.TAS.bvhHelper) parent.add(batchRenderable.TAS.bvhHelper); } if (batchRenderable instanceof SpeckleMesh || batchRenderable instanceof SpeckleInstancedMesh) { useRTE = batchRenderable.needsRTE; } if (batch.geometryType === GeometryType.MESH) { batchRenderable.traverse(obj => { if (obj instanceof Mesh) { const material = Array.isArray(obj.material) ? obj.material[0] : obj.material; obj.castShadow = !material.transparent; obj.receiveShadow = !material.transparent; obj.customDepthMaterial = new SpeckleDepthMaterial({ depthPacking: RGBADepthPacking }, useRTE ? ['USE_RTE', 'ALPHATEST_REJECTION'] : ['ALPHATEST_REJECTION']); } }); } this.viewer.World.expandWorld(batch.bounds); } removeRenderTree(subtreeId) { this.rootGroup.remove(this.rootGroup.getObjectByName(subtreeId)); const batches = this.batcher.getBatches(subtreeId); batches.forEach(value => { this.viewer.World.reduceWorld(value.bounds); }); this.batcher.purgeBatches(subtreeId); this.updateDirectLights(); this.updateHelpers(); this.updateShadowCatcher(true); } cancelRenderTree(subtreeId) { if (this.cancel[subtreeId] !== undefined) { this.cancel[subtreeId] = true; } } setMaterial(rvs, material) { if (!material) return; const rvMap = {}; for (let k = 0; k < rvs.length; k++) { if (!rvs[k].batchId) { continue; } if (!rvMap[rvs[k].batchId]) rvMap[rvs[k].batchId] = []; if (!rvMap[rvs[k].batchId].includes(rvs[k])) rvMap[rvs[k].batchId].push(rvs[k]); } if (Materials.isMaterialInstance(material)) { this.setMaterialInstance(rvMap, material); } else if (Materials.isFilterMaterial(material)) { this.setFilterMaterial(rvMap, material); } else if (Materials.isRenderMaterial(material) || Materials.isDisplayStyle(material)) { this.setDataMaterial(rvMap, material); } } setMaterialInstance(rvs, material) { for (const k in rvs) { const drawRanges = rvs[k].map(value => { return { offset: value.batchStart, count: value.batchCount, material }; }); if (this.batcher.batches[k]) this.batcher.batches[k].setDrawRanges(this.flattenDrawRanges(drawRanges)); } } setFilterMaterial(rvs, material) { for (const k in rvs) { const drawRanges = rvs[k].map(value => { return { offset: value.batchStart, count: value.batchCount, material: this.batcher.materials.getFilterMaterial(value, material), materialOptions: this.batcher.materials.getFilterMaterialOptions(material) }; }); if (this.batcher.batches[k]) this.batcher.batches[k].setDrawRanges(this.flattenDrawRanges(drawRanges)); } } setDataMaterial(rvs, materialData) { for (const k in rvs) { const drawRanges = rvs[k].map(value => { const material = this.batcher.materials.getDataMaterial(value, materialData); material.setMaterialOptions(materialData); return { offset: value.batchStart, count: value.batchCount, material }; }); if (this.batcher.batches[k]) this.batcher.batches[k].setDrawRanges(this.flattenDrawRanges(drawRanges)); } } /** TO DO! * This can mess up materials if multiple materials exist in the ranges argument */ flattenDrawRanges(ranges) { if (ranges.length < 3) return ranges; ranges = ranges.sort((a, b) => { return a.offset - b.offset; }); const flatRanges = []; let offset = ranges[0].offset; let count = 0; for (let k = 0; k < ranges.length - 1; k++) { count += ranges[k].count; if (offset + count === ranges[k + 1].offset) { if (k === ranges.length - 2) { flatRanges.push({ offset, count: count + ranges[k + 1].count, material: ranges[k].material, ...(ranges[k].materialOptions && { materialOptions: ranges[k].materialOptions }) }); } continue; } flatRanges.push({ offset, count, material: ranges[k].material, ...(ranges[k].materialOptions && { materialOptions: ranges[k].materialOptions }) }); offset = ranges[k + 1].offset; count = 0; if (k === ranges.length - 2) { flatRanges.push({ offset: ranges[k + 1].offset, count: ranges[k + 1].count, material: ranges[k + 1].material, ...(ranges[k].materialOptions && { materialOptions: ranges[k].materialOptions }) }); } } return flatRanges; } getMaterial(rv) { var _a, _b; if (!rv || !rv.batchId) { return null; } return (_b = (_a = this.batcher.getBatch(rv)) === null || _a === void 0 ? void 0 : _a.getMaterial(rv)) !== null && _b !== void 0 ? _b : null; } getBatchMaterial(rv) { var _a, _b; if (!rv || !rv.batchId) { return null; } return (_b = (_a = this.batcher.getBatch(rv)) === null || _a === void 0 ? void 0 : _a.batchMaterial) !== null && _b !== void 0 ? _b : null; } resetMaterials() { this.batcher.resetBatchesDrawRanges(); } getBatch(id) { return this.batcher.batches[id]; } updateClippingPlanes() { var _a; if (!this.allObjects) return; const planes = this._clippingPlanes; this.allObjects.traverse(object => { const material = object.material; if (!material) return; if (!Array.isArray(material)) { material.clippingPlanes = planes; } else { for (let k = 0; k < material.length; k++) { material[k].clippingPlanes = planes; } } }); this._pipeline.setClippingPlanes(planes); (_a = this._shadowcatcher) === null || _a === void 0 ? void 0 : _a.updateClippingPlanes(planes); } updateShadowCatcher(force = false) { if (this.sunConfiguration.shadowcatcher !== undefined) this._shadowcatcher.shadowcatcherMesh.visible = this.sunConfiguration.shadowcatcher; if (this.sunConfiguration.shadowcatcher) { this._shadowcatcher.bake(new Box3().fromOBB(this.clippingVolume), this._renderer.capabilities.maxTextureSize, force); this.needsRender = true; } } addDirectLights() { this.sun = new DirectionalLight(0xffffff, 5); this.sun.name = 'sun'; this.sun.layers.set(ObjectLayers.STREAM_CONTENT); this._scene.add(this.sun); this.sun.castShadow = true; this.sun.shadow.mapSize.width = 2048; this.sun.shadow.mapSize.height = 2048; const d = 50; this.sun.shadow.camera.left = -d; this.sun.shadow.camera.right = d; this.sun.shadow.camera.top = d; this.sun.shadow.camera.bottom = -d; this.sun.shadow.camera.near = 5; this.sun.shadow.camera.far = 350; this.sun.shadow.bias = -0.001; this.sun.shadow.radius = 2; this.sunTarget = new Object3D(); this._scene.add(this.sunTarget); this.sunTarget.position.copy(this.sceneCenter); this.sun.target = this.sunTarget; } updateDirectLights() { const phi = this.sunConfiguration.elevation; const theta = this.sunConfiguration.azimuth; const radiusOffset = this.sunConfiguration.radius || 0; if (this.sunConfiguration.castShadow !== undefined) this.sun.castShadow = this.sunConfiguration.castShadow; if (this.sunConfiguration.intensity !== undefined) this.sun.intensity = this.sunConfiguration.intensity; this.sun.color = new Color(this.sunConfiguration.color); if (this.sunConfiguration.enabled !== undefined) this.sun.visible = this.sunConfiguration.enabled; this.sunTarget.position.copy(this.sceneCenter); const spherical = new Spherical(this.sceneSphere.radius + radiusOffset, phi, theta); this.sun.position.setFromSpherical(spherical); this.sun.position.add(this.sunTarget.position); this.sun.updateWorldMatrix(true, true); this.sunTarget.updateMatrixWorld(); this.sun.shadow.updateMatrices(this.sun); const box = this.sceneBox; const low = box.min; const high = box.max; /** Get the 8 vertices of the world space bounding box */ const corner1 = new Vector3(low.x, low.y, low.z); const corner2 = new Vector3(high.x, low.y, low.z); const corner3 = new Vector3(low.x, high.y, low.z); const corner4 = new Vector3(low.x, low.y, high.z); const corner5 = new Vector3(high.x, high.y, low.z); const corner6 = new Vector3(high.x, low.y, high.z); const corner7 = new Vector3(low.x, high.y, high.z); const corner8 = new Vector3(high.x, high.y, high.z); /** Transform them to light space */ corner1.applyMatrix4(this.sun.shadow.camera.matrixWorldInverse); corner2.applyMatrix4(this.sun.shadow.camera.matrixWorldInverse); corner3.applyMatrix4(this.sun.shadow.camera.matrixWorldInverse); corner4.applyMatrix4(this.sun.shadow.camera.matrixWorldInverse); corner5.applyMatrix4(this.sun.shadow.camera.matrixWorldInverse); corner6.applyMatrix4(this.sun.shadow.camera.matrixWorldInverse); corner7.applyMatrix4(this.sun.shadow.camera.matrixWorldInverse); corner8.applyMatrix4(this.sun.shadow.camera.matrixWorldInverse); /** Compute the light space bounding box */ const lightSpaceBox = new Box3().setFromPoints([corner1, corner2, corner3, corner4, corner5, corner6, corner7, corner8]); this.sun.shadow.camera.left = lightSpaceBox.min.x; this.sun.shadow.camera.right = lightSpaceBox.max.x; this.sun.shadow.camera.top = lightSpaceBox.min.y; this.sun.shadow.camera.bottom = lightSpaceBox.max.y; /** z is negative so smaller is actually 'larger' */ this.sun.shadow.camera.near = Math.abs(lightSpaceBox.max.z); this.sun.shadow.camera.far = Math.abs(lightSpaceBox.min.z); this.sun.shadow.camera.updateProjectionMatrix(); this.renderer.shadowMap.needsUpdate = true; this.updateHelpers(); } setSunLightConfiguration(config) { Object.assign(this.sunConfiguration, config); if (config.indirectLightIntensity !== undefined) { this.indirectIBLIntensity = config.indirectLightIntensity; } this.updateDirectLights(); this.updateShadowCatcher(); this.viewer.emit(ViewerEvent.LightConfigUpdated, { ...config }); } updateHelpers() { if (this.SHOW_HELPERS) { this._scene.getObjectByName('CamHelper').update(); this._scene.getObjectByName('DirLightHelper').update(); } } queryHits(results) { const rvs = []; const points = []; for (let k = 0; k < results.length; k++) { const rvMaterial = this.renderViewFromIntersection(results[k]); if (rvMaterial[0] && ( // If the rv exists this.objectPickConfiguration.pickedObjectsFilter // If there is a pick filter ? this.objectPickConfiguration.pickedObjectsFilter(rvMaterial) // If the pick filter passes : true)) { rvs.push(rvMaterial[0]); points.push(results[k].point); } } /** Batch rejected picking. This only happens with hidden lines */ if (rvs.length === 0) { return null; } const queryResult = []; for (let k = 0; k < rvs.length; k++) { const hitId = rvs[k].renderData.id; const subtreeId = rvs[k].renderData.subtreeId; const hitNodes = this.tree.findId(hitId, subtreeId); if (!hitNodes) continue; const hitNode = hitNodes[0]; let parentNode = hitNode; while (!parentNode.model.atomic && parentNode.parent) { parentNode = parentNode.parent; } queryResult.push({ node: parentNode, point: points[k] }); } return queryResult; } queryHitIds(results) { var _a; const queryResult = []; for (let k = 0; k < results.length; k++) { let rv = (_a = results[k].batchObject) === null || _a === void 0 ? void 0 : _a.renderView; if (!rv) { const index = results[k].faceIndex !== undefined ? results[k].faceIndex : results[k].index; if (index) rv = this.batcher.getRenderView(results[k].object.uuid, index); } if (rv) { queryResult.push({ nodeId: rv.renderData.id, point: results[k].point }); } } /** Batch rejected picking. This only happens with hidden lines */ if (queryResult.length === 0) { return null; } return queryResult; } // TO DO: Maybe need a better way renderViewFromIntersection(intersection) { let rv = null; let material = null; if (intersection.batchObject) { rv = intersection.batchObject.renderView; material = intersection.object.getBatchObjectMaterial(intersection.batchObject); } else { const index = intersection.faceIndex !== undefined && intersection.faceIndex !== null ? intersection.faceIndex : intersection.index !== undefined && intersection.index !== null ? intersection.index : undefined; if (index !== undefined) { rv = this.batcher.getRenderView(intersection.object.uuid, index); if (rv) { material = this.batcher.getRenderViewMaterial(intersection.object.uuid, index); } } } // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore return [rv, material]; } onClick(e) { if (!this.renderingCamera) return; const results = this._intersections.intersect(this._scene, this.renderingCamera, e, undefined, true, this.clippingVolume); if (!results) { this.viewer.emit(ViewerEvent.ObjectClicked, null); return; } let multiSelect = false; if (e.multiSelect) multiSelect = true; const queryResults = this.queryHits(results); if (!queryResults) { this.viewer.emit(ViewerEvent.ObjectClicked, !multiSelect ? null : { multiple: true, event: e.event }); return; } const selectionInfo = { multiple: multiSelect, event: e.event, hits: queryResults.map(value => { return { node: value.node, point: value.point }; }) }; this.viewer.emit(ViewerEvent.ObjectClicked, selectionInfo); } onDoubleClick(e) { if (!this.renderingCamera) return; const results = this._intersections.intersect(this._scene, this.renderingCamera, e, undefined, true, this.clippingVolume); if (!results) { this.viewer.emit(ViewerEvent.ObjectDoubleClicked, null); return; } let multiSelect = false; if (e.multiSelect) multiSelect = true; const queryResults = this.queryHits(results); if (!queryResults) { this.viewer.emit(ViewerEvent.ObjectDoubleClicked, null); return; } const selectionInfo = { multiple: multiSelect, hits: queryResults.map(value => { return { node: value.node, point: value.point }; }) }; this.viewer.emit(ViewerEvent.ObjectDoubleClicked, selectionInfo); } boxFromObjects(objectIds) { let box = new Box3(); const rvs = []; if (objectIds.length > 0) { for (let k = 0; k < objectIds.length; k++) { const nodes = this.tree.findId(objectIds[k]); if (nodes) nodes.forEach(node => { rvs.push(...this.tree.getRenderTree().getRenderViewsForNode(node)); }); } } else box = this.visibleSceneBox; for (let k = 0; k < rvs.length; k++) { const object = this.getObject(rvs[k]); const aabb = object ? object.aabb : rvs[k].aabb; if (aabb) { box.union(aabb); } } if (box.getSize(new Vector3()).length() === 0) { console.error(`object selection resulted in empty box`); } return box; } screenToNDC(clientX, clientY, width, height) { // Reference: https://threejsfundamentals.org/threejs/lessons/threejs-picking.html const canvas = this._renderer.domElement; const rect = this.container.getBoundingClientRect(); const pos = { x: width === undefined ? (clientX - rect.left) * canvas.width / rect.width : clientX, y: height === undefined ? (clientY - rect.top) * canvas.height / rect.height : clientY }; return { x: pos.x / (width === undefined ? canvas.width : width) * 2 - 1, y: pos.y / (height === undefined ? canvas.height : height) * -2 + 1 }; } NDCToScreen(clientX, clientY, width, height) { const canvas = this._renderer.domElement; width = width !== undefined ? width : canvas.width; height = height !== undefined ? height : canvas.height; return { x: (clientX * 0.5 + 0.5) * width, y: (clientY * -0.5 + 0.5) * height }; } debugShowBatches() { for (const k in this.batcher.batches) { const renderMat = { id: 'string', color: Math.floor(Math.random() * 16777215), opacity: 1, roughness: 1, metalness: 0, vertexColors: false, lineWeight: 1 }; this.setMaterial(this.batcher.batches[k].renderViews, renderMat); } } getBatchIds() { const batches = Object.values(this.batcher.batches); batches.sort((a, b) => a.renderViews.length - b.renderViews.length); const ids = []; for (let k = 0; k < batches.length; k++) { ids.push(batches[k].id); } return ids.reverse(); } getBatchSize(batchId) { return this.batcher.batches[batchId].renderViews.length; } isolateBatch(batchId) { this.batcher.resetBatchesDrawRanges(); this.batcher.isolateBatch(batchId); } getObjects() { const batches = this.batcher.getBatches(undefined, [GeometryType.MESH, GeometryType.TEXT]); const meshes = batches.map(batch => batch.mesh); const objects = meshes.flatMap(mesh => mesh.batchObjects); return objects; } getObject(rv) { const batch = this.batcher.getBatch(rv); if (!batch || !isAcceleratedBatchType(batch)) { // Logger.error('Render view is not of mesh type. No batch object found') return null; } return batch.mesh.batchObjects.find(value => value.renderView.guid === rv.guid); } enableLayers(layers, value) { this._pipeline.passes.forEach(pass => { if (!(pass instanceof BaseGPass)) return; layers.forEach(layer => { pass.enableLayer(layer, value); }); }); } } /** * Flattens a speckle object. It will ignore arrays, null and undefined valuesm, as well as various 'safe to ignore' speckle properties, such as * bbox, __closure, __parents, totalChildrenCount. * @param obj object to flatten * @returns an object with all its props flattened into `prop.subprop.subsubprop`. */ const flattenObject = function (obj) { const flatten = {}; for (const k in obj) { if (k === 'id' || k === '__closure' || k === '__parents' || k === 'bbox' || k === 'totalChildrenCount') continue; const v = obj[k]; if (v === null || v === undefined || Array.isArray(v)) continue; if (v.constructor === Object) { const flattenProp = flattenObject(v); for (const pk in flattenProp) { flatten[k + '.' + pk] = flattenProp[pk]; } continue; } const type = typeof v; if (type === 'string' || type === 'number' || type === 'boolean') flatten[k] = v; } if (obj.id) flatten.id = obj.id; return flatten; }; class PropertyManager { constructor() { this.propCache = {}; } /** * * @param resourceUrl The target resource's url. This must be an **object url** or null. If null, it will return the props for the whole scene. * @param bypassCache Forces a full rescan if set to true. * @returns a list of property infos containing basic information for filtering purposes. */ async getProperties(tree, resourceUrl = null, bypassCache = false) { let rootNode = tree.root; if (!bypassCache && this.propCache[resourceUrl ? resourceUrl : rootNode.model.id]) return this.propCache[resourceUrl ? resourceUrl : rootNode.model.id]; if (resourceUrl) { const actualRoot = rootNode.children.find(n => n.model.id === resourceUrl); if (actualRoot) rootNode = actualRoot;else { throw new Error(`Could not find root node for ${resourceUrl} - is it loaded?`); } } const propValues = {}; await tree.walkAsync(node => { if (!node.model.atomic) return true; const obj = flattenObject(node.model.raw); for (const key in obj) { if (Array.isArray(obj[key])) continue; if (!propValues[key]) propValues[key] = []; propValues[key].push({ value: obj[key], id: obj.id }); } return true; }, rootNode); const allPropInfos = []; for (const propKey in propValues) { const propValuesArr = propValues[propKey]; const propInfo = {}; propInfo.key = propKey; // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore propInfo.type = typeof propValuesArr[0].value === 'string' ? 'string' : 'number'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore propInfo.objectCount = propValuesArr.length; // For string based props, keep track of which ids belong to which group if (propInfo.type === 'string') { const stringPropInfo = propInfo; const valueGroups = {}; // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore for (const { value, id } of propValuesArr) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore if (!valueGroups[value]) valueGroups[value] = []; // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore valueGroups[value].push(id); } stringPropInfo.valueGroups = []; for (const key in valueGroups) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore stringPropInfo.valueGroups.push({ value: key, ids: valueGroups[key] }); } stringPropInfo.valueGroups = stringPropInfo.valueGroups.sort((a, b) => a.value.localeCompare(b.value)); } // For numeric props, we keep track of min and max and all the {id, val}s if (propInfo.type === 'number') { const numProp = propInfo; numProp.min = Number.MAX_VALUE; numProp.max = Number.MIN_VALUE; // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore for (const { value } of propValuesArr) { if (value < numProp.min) numProp.min = value; if (value > numProp.max) numProp.max = value; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore numProp.valueGroups = propValuesArr.sort((a, b) => a.value - b.value); // const sorted = propValuesArr.sort((a, b) => a.value - b.value) // propInfo.sortedValues = sorted.map(s => s.value) // propInfo.sortedIds = sorted.map(s => s.value) // tl;dr: not worth it } allPropInfos.push(propInfo); } this.propCache[rootNode.model.id] = allPropInfos; return allPropInfos; } } class IntersectionQuerySolver { constructor() { this.vecBuff0 = new Vector3(); this.vecBuff1 = new Vector3(); } setContext(renderer) { this.renderer = renderer; } solve(query) { switch (query.operation) { case 'Occlusion': return this.solveOcclusion(query); case 'Pick': return this.solvePick(query); default: Logger.error('Malformed query'); return null; } } solveOcclusion(query) { if (!this.renderer.renderingCamera) return { objects: null }; const target = this.vecBuff0.set(query.point.x, query.point.y, query.point.z || 0); const dir = this.vecBuff1.copy(target).sub(this.renderer.renderingCamera.position); dir.normalize(); const ray = new Ray(this.renderer.renderingCamera.position, dir); const results = this.renderer.intersections.intersectRay(this.renderer.scene, this.renderer.renderingCamera, ray, ObjectLayers.STREAM_CONTENT_MESH, true, this.renderer.clippingVolume); if (!results || results.length === 0) return { objects: null }; const hits = this.renderer.queryHitIds(results); if (!hits) return { objects: null }; let targetDistance = this.renderer.renderingCamera.position.distanceTo(target); targetDistance -= query.tolerance !== undefined ? query.tolerance : 0; if (targetDistance < results[0].distance) { return { objects: null }; } else { return { objects: [{ guid: hits[0].nodeId, point: hits[0].point }] }; } } solvePick(query) { if (!this.renderer.renderingCamera) return null; const results = this.renderer.intersections.intersect(this.renderer.scene, this.renderer.renderingCamera, new Vector2(query.point.x, query.point.y), undefined, true, this.renderer.clippingVolume); if (!results) return null; const hits = this.renderer.queryHits(results); if (!hits) return null; return { objects: hits.map(value => { return { guid: value.node.model.id, object: value.node.model.raw, point: value.point }; }) }; } } const frustumBuf = new Frustum(); const vec3Buff = new Vector3(); class PointQuerySolver { setContext(renderer) { this.renderer = renderer; } solve(query) { switch (query.operation) { case 'Project': return this.solveProjection(query); case 'Unproject': return this.solveUnprojection(query); default: Logger.error('Malformed query'); return null; } } solveProjection(query) { // WORLD const projected = new Vector3(query.point.x, query.point.y, query.point.z); let inFrustum = false; if (this.renderer.renderingCamera) { /** We need to check frustum inclusion in view space. */ vec3Buff.copy(projected); vec3Buff.applyMatrix4(this.renderer.renderingCamera.matrixWorldInverse); /** We check in-frustum *before* projection */ inFrustum = frustumBuf.setFromProjectionMatrix(this.renderer.renderingCamera.projectionMatrix).containsPoint(vec3Buff); projected.project(this.renderer.renderingCamera); } else Logger.error('Could not run query. Camera is null'); return { // NDC x: projected.x, y: projected.y, z: projected.z, inFrustum }; } solveUnprojection(query) { // NDC let inFrustum = false; const unprojected = new Vector3(query.point.x, query.point.y, query.point.z); if (this.renderer.renderingCamera) { unprojected.unproject(this.renderer.renderingCamera); /** We need to check frustum inclusion in view space. */ vec3Buff.copy(unprojected); vec3Buff.applyMatrix4(this.renderer.renderingCamera.matrixWorldInverse); /** We check in-frustum *after* projection */ inFrustum = frustumBuf.setFromProjectionMatrix(this.renderer.renderingCamera.projectionMatrix).containsPoint(vec3Buff); } else Logger.error('Could not run query. Camera is null'); return { // WORLD x: unprojected.x, y: unprojected.y, z: unprojected.z, inFrustum }; } } class Queries { static isPointQuery(query) { return query.operation === 'Project' || query.operation === 'Unproject'; } static isIntersectionQuery(query) { return query.operation === 'Occlusion' || query.operation === 'Pick'; } } Queries.DefaultPointQuerySolver = new PointQuerySolver(); Queries.DefaultIntersectionQuerySolver = new IntersectionQuerySolver(); class Extension extends EventEmitter { get inject() { return []; } get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; } constructor(viewer, ...args) { super(); this._enabled = false; this.viewer = viewer; } onEarlyUpdate(deltaTime) { /* EMPTY*/ } onLateUpdate(deltaTime) { /* EMPTY*/ } onRender() { /* EMPTY*/ } onResize() { /* EMPTY*/ } } /* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const SETTLING_TIME = 10 * TIME_MS.second; // plenty long enough const MIN_DECAY_MILLISECONDS$1 = 0.001; const DECAY_MILLISECONDS$1 = 50; /** * The Damper class is a generic second-order critically damped system that does * one linear step of the desired length of time. The only parameter is * DECAY_MILLISECONDS. This common parameter makes all states converge at the * same rate regardless of scale. xNormalization is a number to provide the * rough scale of x, such that NIL_SPEED clamping also happens at roughly the * same convergence for all states. */ class Damper { constructor(decayMilliseconds = DECAY_MILLISECONDS$1) { this.velocity = 0; this.naturalFrequency = 0; this.setDecayTime(decayMilliseconds); } setDecayTime(decayMilliseconds) { this.naturalFrequency = 1 / Math.max(MIN_DECAY_MILLISECONDS$1, decayMilliseconds); } update(x, xGoal, timeStepMilliseconds, xNormalization) { const nilSpeed = 0.0002 * this.naturalFrequency; if (x === null || xNormalization === 0) { return xGoal; } if (x === xGoal && this.velocity === 0) { return xGoal; } if (timeStepMilliseconds < 0) { return x; } // Exact solution to a critically damped second-order system, where: // acceleration = this.naturalFrequency * this.naturalFrequency * (xGoal // - x) - 2 * this.naturalFrequency * this.velocity; const deltaX = x - xGoal; const intermediateVelocity = this.velocity + this.naturalFrequency * deltaX; const intermediateX = deltaX + timeStepMilliseconds * intermediateVelocity; const decay = Math.exp(-this.naturalFrequency * timeStepMilliseconds); const newVelocity = (intermediateVelocity - this.naturalFrequency * intermediateX) * decay; const acceleration = -this.naturalFrequency * (newVelocity + intermediateVelocity * decay); if (Math.abs(newVelocity) < nilSpeed * Math.abs(xNormalization) && acceleration * deltaX >= 0) { // This ensures the controls settle and stop calling this function instead // of asymptotically approaching their goal. this.velocity = 0; return xGoal; } else { this.velocity = newVelocity; return xGoal + intermediateX * decay; } } } class SpeckleControls extends EventEmitter { constructor() { super(...arguments); this._up = new Vector3(0, 1, 0); this._minDist = 0; } get up() { return this._up; } set up(value) { this._up.copy(value); } get minDist() { return this._minDist; } set minDist(value) { this._minDist = value; } } /* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 10 * TIME_MS.second; // plenty long enough const MIN_DECAY_MILLISECONDS = 0.001; const DECAY_MILLISECONDS = 50; /** * The Damper class is a generic second-order critically damped system that does * one linear step of the desired length of time. The only parameter is * DECAY_MILLISECONDS. This common parameter makes all states converge at the * same rate regardless of scale. xNormalization is a number to provide the * rough scale of x, such that NIL_SPEED clamping also happens at roughly the * same convergence for all states. */ class AngleDamper { constructor(decayMilliseconds = DECAY_MILLISECONDS) { this.velocity = 0; this.naturalFrequency = 0; this.setDecayTime(decayMilliseconds); } setDecayTime(decayMilliseconds) { this.naturalFrequency = 1 / Math.max(MIN_DECAY_MILLISECONDS, decayMilliseconds); } // Wrap angle to [-PI, PI] wrapAngle(angle) { const pi2 = Math.PI * 2; return ((angle + Math.PI) % pi2 + pi2) % pi2 - Math.PI; } update(x, xGoal, timeStepMilliseconds, xNormalization) { const nilSpeed = 0.0002 * this.naturalFrequency; if (x === null || xNormalization === 0) { return xGoal; } if (x === xGoal && this.velocity === 0) { return xGoal; } if (timeStepMilliseconds < 0) { return x; } // Exact solution to a critically damped second-order system, where: // acceleration = this.naturalFrequency * this.naturalFrequency * (xGoal // - x) - 2 * this.naturalFrequency * this.velocity; const deltaX = this.wrapAngle(x - xGoal); const intermediateVelocity = this.velocity + this.naturalFrequency * deltaX; const intermediateX = deltaX + timeStepMilliseconds * intermediateVelocity; const decay = Math.exp(-this.naturalFrequency * timeStepMilliseconds); const newVelocity = (intermediateVelocity - this.naturalFrequency * intermediateX) * decay; const acceleration = -this.naturalFrequency * (newVelocity + intermediateVelocity * decay); if (Math.abs(newVelocity) < nilSpeed * Math.abs(xNormalization) && acceleration * deltaX >= 0) { // This ensures the controls settle and stop calling this function instead // of asymptotically approaching their goal. this.velocity = 0; return xGoal; } else { this.velocity = newVelocity; return xGoal + intermediateX * decay; } } } const _vectorBuff0 = new Vector3(); const _PI_2 = Math.PI / 2; const walkingSpeed = 1.42; // m/s const closeRelativeFactor = 0.03; const farRelativeFactor = 0.2; const relativeMinTargetDistance = 0.01; class FlyControls extends SpeckleControls { get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; } get options() { return this._options; } set options(value) { Object.assign(this._options, value); if (value.moveSpeed) console.warn('Fly speed modifier: ', this._options.moveSpeed); this.setDamperDecayTime(this._options.damperDecay); } set targetCamera(target) { this._targetCamera = target; this.rotate(this.euler); this._targetCamera.position.copy(this.position); } get up() { return this._up; } set up(value) { this._up.copy(value); this._basisTransform.makeRotationFromQuaternion(new Quaternion().setFromUnitVectors(new Vector3(0, 1, 0), this._up)); this._basisTransformInv.copy(this._basisTransform); this._basisTransformInv.invert(); } set minDist(value) { this._minDist = value; } constructor(camera, input, world, options) { super(); this.velocity = new Vector3(); this.euler = new Euler(0, 0, 0, 'YXZ'); this.position = new Vector3(); this.goalEuler = new Euler(0, 0, 0, 'YXZ'); this.goalPosition = new Vector3(); this.keyMap = { forward: false, back: false, left: false, right: false, up: false, down: false }; this.contextMenuTriggered = false; this.eulerXDamper = new AngleDamper(); this.eulerYDamper = new AngleDamper(); this.eulerZDamper = new AngleDamper(); this.positionXDamper = new Damper(); this.positionYDamper = new Damper(); this.positionZDamper = new Damper(); this._lastTick = 0; this._enabled = false; this._basisTransform = new Matrix4(); this._basisTransformInv = new Matrix4(); // event listeners this.onMouseMove = arg => { if (arg.event.buttons !== 1 || !this._enabled) return; const movementX = arg.event.movementX || 0; const movementY = arg.event.movementY || 0; const amount = new Vector2(); amount.y = movementX * 0.005 * this._options.lookSpeed; amount.x = movementY * 0.005 * this._options.lookSpeed; this.rotateBy(amount); this.emit('change'); }; this.onKeyDown = event => { // Don't trigger movement if any modifier keys are pressed if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) { return; } switch (event.code) { case 'ArrowUp': case 'KeyW': this.keyMap.forward = true; break; case 'ArrowLeft': case 'KeyA': this.keyMap.left = true; break; case 'ArrowDown': case 'KeyS': this.keyMap.back = true; break; case 'ArrowRight': case 'KeyD': this.keyMap.right = true; break; case 'PageUp': case 'KeyE': this.keyMap.up = true; break; case 'PageDown': case 'KeyQ': this.keyMap.down = true; break; } }; this.onKeyUp = event => { // Don't trigger movement if any modifier keys are pressed if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) { return; } switch (event.code) { case 'ArrowUp': case 'KeyW': this.keyMap.forward = false; break; case 'ArrowLeft': case 'KeyA': this.keyMap.left = false; break; case 'ArrowDown': case 'KeyS': this.keyMap.back = false; break; case 'ArrowRight': case 'KeyD': this.keyMap.right = false; break; case 'PageUp': case 'KeyE': this.keyMap.up = false; break; case 'PageDown': case 'KeyQ': this.keyMap.down = false; break; } }; this.onContextMenu = () => { this.contextMenuTriggered = true; }; this._targetCamera = camera; this.input = input; this.world = world; this._options = Object.assign({}, options); this.connect(); } isStationary() { return this.goalEuler.equals(this.euler) && this.goalPosition.equals(this.position) && this.velocity.length() === 0; } update(delta) { /** We do this because sometimes while holding a kewy down you get an extra * key down event **after** the context menu event, locking it in place */ if (this.contextMenuTriggered) { this.cancelMove(); this.contextMenuTriggered = false; } const now = performance.now(); delta = delta !== undefined ? delta : now - this._lastTick; this._lastTick = now; if (!this._enabled) return false; let relativeFactor = this.world.getRelativeOffset(farRelativeFactor); if (this._minDist) { if (this._minDist < relativeFactor * 0.5) relativeFactor = this.world.getRelativeOffset(closeRelativeFactor); } const deltaSeconds = delta / TIME_MS.second; const scaledWalkingSpeed = relativeFactor * walkingSpeed; if (this.keyMap.forward) this.velocity.z = -scaledWalkingSpeed * this._options.moveSpeed * deltaSeconds; if (this.keyMap.back) this.velocity.z = scaledWalkingSpeed * this._options.moveSpeed * deltaSeconds; if (!this.keyMap.forward && !this.keyMap.back) this.velocity.z = 0; if (this.keyMap.left) this.velocity.x = -scaledWalkingSpeed * this._options.moveSpeed * deltaSeconds; if (this.keyMap.right) this.velocity.x = scaledWalkingSpeed * this._options.moveSpeed * deltaSeconds; if (!this.keyMap.left && !this.keyMap.right) this.velocity.x = 0; if (this.keyMap.up) this.velocity.y = scaledWalkingSpeed * this._options.moveSpeed * deltaSeconds; if (this.keyMap.down) this.velocity.y = -scaledWalkingSpeed * this._options.moveSpeed * deltaSeconds; if (!this.keyMap.down && !this.keyMap.up) this.velocity.y = 0; if (this.isStationary()) return false; this.moveBy(this.velocity); this.updatePositionRotation(delta); return true; } updatePositionRotation(delta) { const diagonal = this.world.worldBox.min.distanceTo(this.world.worldBox.max); /** For very small values, the dampners need even smaller normalization */ const minMaxRange = diagonal < 1 ? this.world.getRelativeOffset(diagonal) : 1; this.position.x = this.positionXDamper.update(this.position.x, this.goalPosition.x, delta, minMaxRange); this.position.y = this.positionYDamper.update(this.position.y, this.goalPosition.y, delta, minMaxRange); this.position.z = this.positionZDamper.update(this.position.z, this.goalPosition.z, delta, minMaxRange); this.euler.x = this.eulerXDamper.update(this.euler.x, this.goalEuler.x, delta, 1); this.euler.y = this.eulerYDamper.update(this.euler.y, this.goalEuler.y, delta, 1); this.euler.z = this.eulerZDamper.update(this.euler.z, this.goalEuler.z, delta, 1); this.rotate(this.euler); this._targetCamera.position.copy(this.position); } jumpToGoal() { this.updatePositionRotation(SETTLING_TIME); } fitToSphere(sphere) { const forward = this._targetCamera.getWorldDirection(new Vector3()); forward.negate(); const pos = new Vector3().copy(sphere.center).addScaledVector(forward, sphere.radius); this.goalPosition.copy(pos); } /** The input position and target will be in a basis with (0,0,1) as up */ fromPositionAndTarget(position, target) { const cPos = this.getPosition(); const cTarget = this.getTarget(); if (cPos.equals(position) && cTarget.equals(target)) return; const tPosition = new Vector3().copy(position); const tTarget = new Vector3().copy(target); const matrix = new Matrix4().lookAt(tPosition, tTarget, this._up).premultiply(this._basisTransformInv); const quat = new Quaternion().setFromRotationMatrix(matrix); this.goalEuler.setFromQuaternion(quat); this.goalPosition.copy(tPosition); } /** The returned vector needs to be in a basis with (0,0,1) as up */ getTarget() { const target = new Vector3().copy(this.goalPosition); const matrix = new Matrix4().makeRotationFromEuler(this.goalEuler); const forward = new Vector3().setFromMatrixColumn(matrix, 2).applyMatrix4(this._basisTransform).normalize(); target.addScaledVector(forward, -this.world.getRelativeOffset(relativeMinTargetDistance)); return target; } /** The returned vector needs to be in a basis with (0,0,1) as up */ getPosition() { return new Vector3().copy(this.goalPosition); } /** * Gets the current goal position */ getCurrentPosition() { return this.position; } /** * Gets the point in model coordinates the model should orbit/pivot around. */ getCurrentTarget() { const target = new Vector3().copy(this.position); const matrix = new Matrix4().makeRotationFromEuler(this.euler); const forward = new Vector3().setFromMatrixColumn(matrix, 2).applyMatrix4(this._basisTransform).normalize(); target.addScaledVector(forward, -this.world.getRelativeOffset(relativeMinTargetDistance)); return target; } /** * Sets the smoothing decay time. */ setDamperDecayTime(decayMilliseconds) { this.eulerXDamper.setDecayTime(decayMilliseconds); this.eulerYDamper.setDecayTime(decayMilliseconds); this.eulerZDamper.setDecayTime(decayMilliseconds); this.positionXDamper.setDecayTime(decayMilliseconds); this.positionYDamper.setDecayTime(decayMilliseconds); this.positionZDamper.setDecayTime(decayMilliseconds); } moveBy(amount) { const camera = this._targetCamera; _vectorBuff0.setFromMatrixColumn(camera.matrix, 2); this.goalPosition.addScaledVector(_vectorBuff0, amount.z); this._options.relativeUpDown ? _vectorBuff0.setFromMatrixColumn(camera.matrix, 1) : _vectorBuff0.copy(this.up); this.goalPosition.addScaledVector(_vectorBuff0, amount.y); _vectorBuff0.setFromMatrixColumn(camera.matrix, 0); this.goalPosition.addScaledVector(_vectorBuff0, amount.x); } rotateBy(amount) { this.goalEuler.y -= amount.y; this.goalEuler.x -= amount.x; // Set to constrain the pitch of the camera const minPolarAngle = 0; // radians const maxPolarAngle = Math.PI; // radians this.goalEuler.x = Math.max(_PI_2 - maxPolarAngle, Math.min(_PI_2 - minPolarAngle, this.goalEuler.x)); } connect() { if (this._enabled) return; this.input.on(InputEvent.KeyUp, this.onKeyUp); this.input.on(InputEvent.KeyDown, this.onKeyDown); this.input.on(InputEvent.PointerMove, this.onMouseMove); this.input.on(InputEvent.ContextMenu, this.onContextMenu); } disconnect() { if (!this._enabled) return; this.input.removeListener(InputEvent.KeyUp, this.onKeyUp); this.input.removeListener(InputEvent.KeyDown, this.onKeyDown); this.input.removeListener(InputEvent.PointerMove, this.onMouseMove); this.input.removeListener(InputEvent.ContextMenu, this.onContextMenu); for (const k in this.keyMap) this.keyMap[k] = false; } dispose() { this.disconnect(); } rotate(euler) { if (!this._options.enableLook) return; const q = new Quaternion(); const t = new Quaternion().setFromRotationMatrix(this._basisTransform); q.setFromEuler(euler).premultiply(t); this._targetCamera.quaternion.slerp(q, 0.999); } cancelMove() { this.keyMap.forward = false; this.keyMap.left = false; this.keyMap.back = false; this.keyMap.right = false; this.keyMap.up = false; this.keyMap.down = false; } } /* @license * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @param {Number} value * @param {Number} lowerLimit * @param {Number} upperLimit * @return {Number} value clamped within lowerLimit..upperLimit */ const clamp = (value, lowerLimit, upperLimit) => Math.max(lowerLimit, Math.min(upperLimit, value)); const PAN_SENSITIVITY = 0.018; const MOVEMENT_EPSILON = 1e-5; const vector3 = new Vector3(); const ZOOM_SENSITIVITY = 0.08; const RADIUS_ZOOM_FACTOR = 0.375; var PointerChangeEvent; (function (PointerChangeEvent) { PointerChangeEvent["PointerChangeStart"] = "pointer-change-start"; PointerChangeEvent["PointerChangeEnd"] = "pointer-change-end"; })(PointerChangeEvent || (PointerChangeEvent = {})); const closeRelativeFactorPan = 0.06; const farRelativeFactorPan = 0.4; const relativeMaxTargetDistance = 0.2; /** * SmoothControls is a Three.js helper for adding delightful pointer and * keyboard-based input to a staged Three.js scene. Its API is very similar to * OrbitControls, but it offers more opinionated (subjectively more delightful) * defaults, easy extensibility and subjectively better out-of-the-box keyboard * support. * * One important change compared to OrbitControls is that the `update` method * of SmoothControls must be invoked on every frame, otherwise the controls * will not have an effect. * * Another notable difference compared to OrbitControls is that SmoothControls * does not currently support panning (but probably will in a future revision). * * Like OrbitControls, SmoothControls assumes that the orientation of the camera * has been set in terms of position, rotation and scale, so it is important to * ensure that the camera's matrixWorld is in sync before using SmoothControls. */ class SmoothOrbitControls extends SpeckleControls { get enabled() { return this._enabled; } set enabled(value) { if (value) { this.enableInteraction(); } else { this.disableInteraction(); this.orbitSphere.visible = false; } this._enabled = value; } get up() { return this._up; } set up(value) { this._up.copy(value); this._basisTransform.makeRotationFromQuaternion(new Quaternion().setFromUnitVectors(new Vector3(0, 1, 0), this._up)); this._basisTransformInv.copy(this._basisTransform); this._basisTransformInv.invert(); } constructor(camera, container, world, renderer, options) { super(); this._enabled = false; this.isUserPointing = false; // Pan state this.enablePan = true; this.enableTap = true; this.panProjection = new Matrix3(); this.panPerPixel = 0; // Internal orbital position state this.spherical = new Spherical(); this.goalSpherical = new Spherical(); this.origin = new Vector3(); this.pivotalOrigin = new Vector3(); this.goalOrigin = new Vector3(); this.targetDamperX = new Damper(); this.targetDamperY = new Damper(); this.targetDamperZ = new Damper(); this.thetaDamper = new Damper(); this.phiDamper = new Damper(); this.radiusDamper = new Damper(); this.logFov = Math.log(55); this.goalLogFov = this.logFov; this.fovDamper = new Damper(); // Pointer state this.touchMode = null; this.pointers = []; this.startPointerPosition = { clientX: 0, clientY: 0 }; this.lastSeparation = 0; this.touchDecided = false; this.zoomControlCoord = new Vector2(); this._lastTick = 0; this._basisTransform = new Matrix4(); this._basisTransformInv = new Matrix4(); this._radiusDelta = 0; this.pivotPoint = new Vector3(); this.lastPivotPoint = new Vector3(); this.usePivotal = false; this.touchModeZoom = (dx, dy) => { const touchDistance = this.twoTouchDistance(this.pointers[0], this.pointers[1]); const deltaZoom = ZOOM_SENSITIVITY * (this.lastSeparation - touchDistance) * 50 / this._container.offsetHeight; this.lastSeparation = touchDistance; this.userAdjustOrbit(0, 0, deltaZoom); if (this.panPerPixel > 0) { this.movePan(dx, dy); } }; // We implement our own version of the browser's CSS touch-action, enforced by // this function, because the iOS implementation of pan-y is bad and doesn't // match Android. Specifically, even if a touch gesture begins by panning X, // iOS will switch to scrolling as soon as the gesture moves in the Y, rather // than staying in the same mode until the end of the gesture. this.disableScroll = event => { event.preventDefault(); }; this.touchModeRotate = (dx, dy) => { const { touchAction } = this._options; if (!this.touchDecided && touchAction !== 'none') { this.touchDecided = true; const dxMag = Math.abs(dx); const dyMag = Math.abs(dy); // If motion is mostly vertical, assume scrolling is the intent. if (touchAction === 'pan-y' && dyMag > dxMag || touchAction === 'pan-x' && dxMag > dyMag) { this.touchMode = null; return; } else { this._container.addEventListener('touchmove', this.disableScroll, { passive: false }); } } this.handleSinglePointerMove(dx, dy); }; this.onPointerDown = event => { var _a; if (this._options.orbitAroundCursor) { /** Hope this is not slow */ const rect = this._container.getBoundingClientRect(); const x = (event.clientX - rect.left) / rect.width * 2 - 1; const y = (event.clientY - rect.top) / rect.height * -2 + 1; let res = this.renderer.intersections.intersect(this.renderer.scene, this._targetCamera, new Vector2(x, y), ObjectLayers.STREAM_CONTENT_MESH, true, this.renderer.clippingVolume); res = (_a = res === null || res === void 0 ? void 0 : res.filter(this.filterOrbitToCursorHits.bind(this))) !== null && _a !== void 0 ? _a : []; if (res.length) { this.pivotPoint.copy(res[0].point); this.usePivotal = true; this.orbitSphere.visible = this._options.showOrbitPoint; } else { this.usePivotal = false; this.orbitSphere.visible = false; } } if (this.pointers.length > 2) { return; } if (this.pointers.length === 0) { this._container.addEventListener('pointermove', this.onPointerMove); this._container.addEventListener('pointerup', this.onPointerUp); this.touchMode = null; this.touchDecided = false; this.startPointerPosition.clientX = event.clientX; this.startPointerPosition.clientY = event.clientY; } this.pointers.push({ clientX: event.clientX, clientY: event.clientY, id: event.pointerId }); this.isUserPointing = false; if (event.pointerType === 'touch') { this.onTouchChange(event); } else { this.onMouseDown(event); } // TO DO // this.dispatchEvent({ type: 'user-interaction' }) }; this.onPointerMove = event => { const pointer = this.pointers.find(pointer => pointer.id === event.pointerId); if (!pointer) { return; } // In case no one gave us a pointerup or pointercancel event. if (event.pointerType === 'mouse' && event.buttons === 0) { this.onPointerUp(event); return; } const numTouches = this.pointers.length; const dx = (event.clientX - pointer.clientX) / numTouches; const dy = (event.clientY - pointer.clientY) / numTouches; if (dx === 0 && dy === 0) { return; } pointer.clientX = event.clientX; pointer.clientY = event.clientY; if (event.pointerType === 'touch') { if (this.touchMode !== null) { this.touchMode(dx, dy); } } else { if (this.panPerPixel > 0) { this.movePan(dx, dy); } else { this.handleSinglePointerMove(dx, dy); } } }; this.onPointerUp = event => { const index = this.pointers.findIndex(pointer => pointer.id === event.pointerId); if (index !== -1) { this.pointers.splice(index, 1); } // altKey indicates an interaction prompt; don't reset radius in this case // as it will cause the camera to drift. // if (this.panPerPixel > 0 && !event.altKey) { // this.resetRadius() // } if (this.pointers.length === 0) { this._container.removeEventListener('pointermove', this.onPointerMove); this._container.removeEventListener('pointerup', this.onPointerUp); this._container.removeEventListener('touchmove', this.disableScroll); // if (this.enablePan && this.enableTap) { // this.recenter(event) // } } else if (this.touchMode !== null) { this.onTouchChange(event); } // ;(this.scene.element as any)[$panElement].style.opacity = 0 // element.style.cursor = 'grab' this.panPerPixel = 0; if (this.isUserPointing) { this.emit(PointerChangeEvent.PointerChangeEnd); } this.orbitSphere.visible = false; }; this.onWheel = event => { /** Hope this is not slow */ const rect = this._container.getBoundingClientRect(); const x = (event.clientX - rect.left) / rect.width * 2 - 1; const y = (event.clientY - rect.top) / rect.height * -2 + 1; this.zoomControlCoord.set(x, y); const deltaZoom = event.deltaY * (event.deltaMode === 1 ? 18 : 1) * ZOOM_SENSITIVITY / 60; this.userAdjustOrbit(0, 0, deltaZoom); event.preventDefault(); this.usePivotal = false; this.orbitSphere.visible = false; // TO DO // this.dispatchEvent({ type: 'user-interaction' }) }; this.onContext = event => { if (this.enablePan) { event.preventDefault(); } else { for (const pointer of this.pointers) { // Required because of a common browser bug where the context menu never // fires a pointercancel event. this.onPointerUp(new PointerEvent('pointercancel', { ...this.startPointerPosition, pointerId: pointer.id })); } } }; this._targetCamera = camera; this._container = container; this.world = world; this.renderer = renderer; this._options = Object.assign({}, options); this.setDamperDecayTime(this._options.damperDecay); const billboardMaterial = new SpeckleBasicMaterial({ color: 0x047efb }, ['BILLBOARD_SCREEN']); billboardMaterial.opacity = 0.75; billboardMaterial.transparent = true; billboardMaterial.color.convertSRGBToLinear(); billboardMaterial.toneMapped = false; billboardMaterial.depthTest = false; billboardMaterial.billboardPixelSize = new Vector2(15 * window.devicePixelRatio, 15 * window.devicePixelRatio); this.orbitSphere = new Mesh(new SphereGeometry(0.5, 32, 16), billboardMaterial); this.orbitSphere.layers.set(ObjectLayers.OVERLAY); this.orbitSphere.visible = false; this.orbitSphere.frustumCulled = false; this.renderer.scene.add(this.orbitSphere); } /** * The options that are currently configured for the controls instance. */ get options() { return this._options; } set options(value) { this.applyOptions(value); } set targetCamera(value) { /** When you drop out of WASD, the radius is very close to the camera * And if you switch to orthogrtaphic you will get a vey large orthographic size * This is a workaround where we try to get a more reasonable radius, by getting * the closest intersection distance to the scene geometry from the camera */ if (value instanceof OrthographicCamera) { if (this.goalSpherical.radius < this._minDist) { /** Fallback radius, in the middle of the allowed radius range */ let recomputedRadius = this.options.minimumRadius + (this._options.maximumRadius - this.options.minimumRadius) * 0.5; const ray = new Ray(this._targetCamera.position, this._targetCamera.getWorldDirection(new Vector3())); const res = this.renderer.intersections.intersectRay(this.renderer.scene, this._targetCamera, ray, ObjectLayers.STREAM_CONTENT_MESH, false, this.renderer.clippingVolume, false, false); if (res && res.length) { recomputedRadius = res[0].distance; } this.spherical.radius = recomputedRadius; this.goalSpherical.radius = recomputedRadius; } } this._targetCamera = value; this.usePivotal = this._options.orbitAroundCursor; /** We move the lat pivot point somwhere outside of world bounds, in order to force a pivotal origin recompute */ this.lastPivotPoint.set(this.world.worldOrigin.x + this.world.worldSize.x, this.world.worldOrigin.y + this.world.worldSize.y, this.world.worldOrigin.z + this.world.worldSize.z); this.moveCamera(); } set minDist(value) { this._minDist = value; } /** The input position and target will be in a basis with (0,1,0) as up */ fromPositionAndTarget(position, target) { /** This check is targeted exclusevely towards the frontend which calls this method pointlessly each frame * We don't want to make pointless calculations more than we already are */ const targetPosition = this.getPosition(); const targetTarget = this.getTarget(); const deltaTarget = vector3.subVectors(target, targetTarget).length(); const deltaPosition = vector3.subVectors(position, targetPosition).length(); const epsilon = 1e-6; if (deltaPosition < epsilon && deltaTarget < epsilon) return; const v0 = new Vector3().copy(position); const v1 = new Vector3().copy(target); /** Three.js Spherical assumes (0, 1, 0) as up... */ v0.sub(v1).applyMatrix4(this._basisTransformInv); const spherical = new Spherical(); spherical.setFromCartesianCoords(v0.x, v0.y, v0.z); this.setOrbit(spherical.theta, spherical.phi, spherical.radius); /** Three.js Spherical assumes (0, 1, 0) as up... */ v1.applyMatrix4(this._basisTransformInv); this.setTarget(v1.x, v1.y, v1.z); this.usePivotal = false; } /** * Move the camera instantly instead of accelerating toward the goal * parameters. */ jumpToGoal() { this.update(SETTLING_TIME); } fitToSphere(sphere) { /** The three.js Sphere has it's origin in a CS where Y is up (proper way) */ const nativeOrigin = new Vector3().copy(sphere.center).applyMatrix4(this._basisTransformInv); this.setTarget(nativeOrigin.x, nativeOrigin.y, nativeOrigin.z); this.setRadius(sphere.radius); this.usePivotal = false; } /** * Gets the current goal position */ getPosition() { return this.positionFromSpherical(this.goalSpherical, this.goalOrigin).applyMatrix4(this._basisTransform); } /** * Gets the point in model coordinates the model should orbit/pivot around. */ getTarget() { return this.goalOrigin.clone().applyMatrix4(this._basisTransform); } /** * Gets the current goal position */ getCurrentPosition() { return this.positionFromSpherical(this.spherical, this.origin).applyMatrix4(this._basisTransform); } /** * Gets the point in model coordinates the model should orbit/pivot around. */ getCurrentTarget() { return this.origin.clone().applyMatrix4(this._basisTransform); } isStationary() { return this.goalSpherical.theta === this.spherical.theta && this.goalSpherical.phi === this.spherical.phi && this.goalSpherical.radius === this.spherical.radius && this.goalLogFov === this.logFov && this.goalOrigin.equals(this.origin) && this.pivotPoint.equals(this.lastPivotPoint); } /** * Configure the _options of the controls. Configured _options will be * merged with whatever _options have already been configured for this * controls instance. */ applyOptions(_options) { Object.assign(this._options, _options); this.setDamperDecayTime(this._options.damperDecay); // Re-evaluates clamping based on potentially new values for min/max // polar, azimuth and radius: this.setOrbit(); this.setFieldOfView(Math.exp(this.goalLogFov)); } /** Computes min/max radius values based on the current world size */ computeMinMaxRadius() { if (this.world) { const maxDistance = this.world.getRelativeOffset(10); const minDistance = this.world.getRelativeOffset(0.01); if (!isNaN(maxDistance) && !isNaN(minDistance)) Object.assign(this._options, { maximumRadius: maxDistance, minimumRadius: minDistance }); } } /** * Set the absolute orbital goal of the camera. The change will be * applied over a number of frames depending on configured acceleration and * dampening _options. * * Returns true if invoking the method will result in the camera changing * position and/or rotation, otherwise false. */ setOrbit(goalTheta = this.goalSpherical.theta, goalPhi = this.goalSpherical.phi, goalRadius = this.goalSpherical.radius) { this.computeMinMaxRadius(); const { minimumAzimuthalAngle, maximumAzimuthalAngle, minimumPolarAngle, maximumPolarAngle, minimumRadius, maximumRadius } = this._options; const { theta, phi, radius } = this.goalSpherical; const nextTheta = clamp(goalTheta, minimumAzimuthalAngle, maximumAzimuthalAngle); if (!isFinite(minimumAzimuthalAngle) && !isFinite(maximumAzimuthalAngle)) { this.spherical.theta = this.wrapAngle(this.spherical.theta - nextTheta) + nextTheta; } const nextPhi = clamp(goalPhi, minimumPolarAngle, maximumPolarAngle); const nextRadius = clamp(goalRadius, minimumRadius, maximumRadius); if (nextTheta === theta && nextPhi === phi && nextRadius === radius) { return false; } if (!isFinite(nextTheta) || !isFinite(nextPhi) || !isFinite(nextRadius)) { return false; } this.goalSpherical.theta = nextTheta; this.goalSpherical.phi = nextPhi; this.goalSpherical.radius = nextRadius; this.goalSpherical.makeSafe(); return true; } /** * Subset of setOrbit() above, which only sets the camera's radius. */ setRadius(radius) { this.goalSpherical.radius = radius; this.setOrbit(); } /** * Sets the goal field of view for the camera */ setFieldOfView(fov) { const { minimumFieldOfView, maximumFieldOfView } = this._options; fov = clamp(fov, minimumFieldOfView, maximumFieldOfView); this.goalLogFov = Math.log(fov); } /** * Sets the smoothing decay time. */ setDamperDecayTime(decayMilliseconds) { this.thetaDamper.setDecayTime(decayMilliseconds); this.phiDamper.setDecayTime(decayMilliseconds); this.radiusDamper.setDecayTime(decayMilliseconds); this.fovDamper.setDecayTime(decayMilliseconds); this.targetDamperX.setDecayTime(decayMilliseconds); this.targetDamperY.setDecayTime(decayMilliseconds); this.targetDamperZ.setDecayTime(decayMilliseconds); } /** * Sets the point in model coordinates the object should orbit/pivot around. */ setTarget(x, y, z) { this.goalOrigin.set(x, y, z); } /** * Adjust the orbital position of the camera relative to its current orbital * position. Does not let the theta goal get more than pi ahead of the current * theta, which ensures interpolation continues in the direction of the delta. * The deltaZoom parameter adjusts both the field of view and the orbit radius * such that they progress across their allowed ranges in sync. */ adjustOrbit(deltaTheta, deltaPhi, deltaZoom) { this._radiusDelta; const { theta, phi, radius } = this.goalSpherical; const dTheta = this.spherical.theta - theta; const dThetaLimit = Math.PI - 0.001; const goalTheta = theta - clamp(deltaTheta, -dThetaLimit - dTheta, dThetaLimit - dTheta); const goalPhi = phi - deltaPhi; this.setOrbit(goalTheta, goalPhi); if (deltaZoom === 0) return; const tasIntersect = true; // Currently disabling this // this.intersections.intersect( // this.scene, // this._targetCamera as PerspectiveCamera, // this.zoomControlCoord, // ObjectLayers.STREAM_CONTENT_MESH, // false, // this.world.worldBox, // true, // false // ) !== null const zoomBasisRadius = Math.max(radius, this.world.getRelativeOffset(0.001)); const worldSizeOffset = clamp(zoomBasisRadius * Math.abs(deltaZoom) * RADIUS_ZOOM_FACTOR, 0, this.world.getRelativeOffset(relativeMaxTargetDistance)); const zoomAmount = worldSizeOffset * Math.sign(deltaZoom); const goalRadius = radius + zoomAmount; this.setOrbit(goalTheta, goalPhi, goalRadius); this._radiusDelta = radius - this.goalSpherical.radius; if (this._options.zoomToCursor) { const dollyAmount = new Vector3(); if (goalRadius < this._options.minimumRadius && this._options.infiniteZoom) { if (this._targetCamera instanceof PerspectiveCamera) { const dir = new Vector3().setFromSpherical(this.spherical).normalize(); dollyAmount.copy(dir).multiplyScalar(zoomAmount); this._radiusDelta = -zoomAmount; } } const cameraDirection = new Vector3().setFromSpherical(this.spherical).normalize().negate(); const planeX = new Vector3().copy(cameraDirection).cross(new Vector3(0, 1, 0)).normalize(); if (planeX.lengthSq() === 0) planeX.x = 1.0; const planeY = new Vector3().crossVectors(planeX, cameraDirection); const dims = { x: this._container.offsetWidth, y: this._container.offsetHeight }; const aspect = dims.x / dims.y; const worldToScreen = clamp(this.goalSpherical.radius, Math.abs(zoomAmount), Number.MAX_VALUE) * Math.tan(Math.exp(this.logFov) * MathUtils.DEG2RAD * 0.5); const cursor = new Vector3().copy(this.goalOrigin).add(planeX.multiplyScalar(this.zoomControlCoord.x * worldToScreen * aspect * +tasIntersect)).add(planeY.multiplyScalar(this.zoomControlCoord.y * worldToScreen * +tasIntersect)).add(dollyAmount); const lerpRatio = clamp(this._radiusDelta / this.goalSpherical.radius, -1, 1); const newTargetEnd = new Vector3().copy(this.goalOrigin).lerp(cursor, lerpRatio); this.setTarget(newTargetEnd.x, newTargetEnd.y, newTargetEnd.z); } /** We're not varying fov based on zoom level for now */ // if (deltaZoom !== 0) { // const goalLogFov = this.goalLogFov + deltaZoom // this.setFieldOfView(Math.exp(goalLogFov)) // } } /** * Update controls. In most cases, this will result in the camera * interpolating its position and rotation until it lines up with the * designated goal orbital position. Returns false if the camera did not move. * * Time and delta are measured in milliseconds. */ update(delta) { const now = performance.now(); delta = delta !== undefined ? delta : now - this._lastTick; this._lastTick = now; if (this.isStationary()) { return false; } this.computeMinMaxRadius(); const { maximumPolarAngle } = this._options; const dTheta = this.spherical.theta - this.goalSpherical.theta; if (Math.abs(dTheta) > Math.PI && !isFinite(this._options.minimumAzimuthalAngle) && !isFinite(this._options.maximumAzimuthalAngle)) { this.spherical.theta -= Math.sign(dTheta) * 2 * Math.PI; } this.spherical.theta = this.thetaDamper.update(this.spherical.theta, this.goalSpherical.theta, delta, Math.PI); this.spherical.phi = this.phiDamper.update(this.spherical.phi, this.goalSpherical.phi, delta, maximumPolarAngle); const minMaxRange = this._options.maximumRadius - this._options.minimumRadius; const radiusNormalisationRange = minMaxRange < 1 ? minMaxRange : 1; this.spherical.radius = this.radiusDamper.update(this.spherical.radius, this.goalSpherical.radius, delta, radiusNormalisationRange); this.logFov = this.goalLogFov; /** We're not easing the fov for now */ // this.fovDamper.update( // this.logFov, // this.goalLogFov, // delta, // 10 // ) let normalization = 1; if (this.world) { normalization = this.world.worldBox.getBoundingSphere(new Sphere()).radius / 10; } const x = this.targetDamperX.update(this.origin.x, this.goalOrigin.x, delta, normalization); const y = this.targetDamperY.update(this.origin.y, this.goalOrigin.y, delta, normalization); const z = this.targetDamperZ.update(this.origin.z, this.goalOrigin.z, delta, normalization); this.origin.set(x, y, z); return this.moveCamera(); } /** Function expects the position argument to be in a CS where Y is up */ polarFromPivotal(position) { const quaternion = this.quaternionFromSpherical(this.spherical); /** Forward direction */ const dir = new Vector3().setFromMatrixColumn(new Matrix4().makeRotationFromQuaternion(quaternion), 2); const camPos = new Vector3().copy(position); /** Pivot needs to be transformed in a Y up CS */ const pivotPoint = new Vector3().copy(this.pivotPoint).applyMatrix4(this._basisTransformInv); const cameraPivotDist = camPos.distanceTo(pivotPoint); const cameraPivotDir = new Vector3().copy(camPos).sub(pivotPoint); cameraPivotDir.normalize(); const dot = Math.min(Math.max(dir.dot(cameraPivotDir), -1), 1); const angle = Math.acos(dot); /** We compute a new distanced based on the pivot point */ const polarRadius = cameraPivotDist * Math.cos(angle); /** We compute a new origin based on the pivot point, but keeping it along the camera's current forward direction */ const polarOrigin = camPos.sub(new Vector3().copy(dir).multiplyScalar(polarRadius)); this.goalOrigin.copy(polarOrigin); this.origin.copy(polarOrigin); /** For orthographica camera's we don't need to update the radius because it will break their orthographic size */ if (this._targetCamera instanceof PerspectiveCamera) { this.goalSpherical.radius = polarRadius; this.spherical.radius = polarRadius; } } /** Function expects the origin argument to be in a CS where Y is up */ positionFromPivotal(origin, quaternion) { const pivotPoint = new Vector3().copy(this.pivotPoint).applyMatrix4(this._basisTransformInv); const position = new Vector3(); position.copy(origin); position.sub(pivotPoint); position.applyQuaternion(quaternion); position.add(pivotPoint); return position; } /** Function expects the pivotPoint and position arguments to be in a CS where Y is up */ getPivotalOrigin(pivotPoint, position, quaternion) { const pivotalOrigin = new Vector3().copy(position); pivotalOrigin.sub(pivotPoint); pivotalOrigin.applyQuaternion(new Quaternion().copy(quaternion).invert()); pivotalOrigin.add(pivotPoint); return pivotalOrigin; } moveCamera() { const lastCameraPos = new Vector3().copy(this._targetCamera.position); const lastCameraQuat = new Quaternion().copy(this._targetCamera.quaternion); this.spherical.makeSafe(); /** We get the current position and rotation based off the latest polar params * The ground truth is going to always be the polar CS! */ const quaternion = this.quaternionFromSpherical(this.spherical); let position = this.positionFromSpherical(this.spherical, this.origin); if (this.usePivotal) { /** We transform both current and previous pivots in a CS where Y us up */ const pivotPoint = new Vector3().copy(this.pivotPoint).applyMatrix4(this._basisTransformInv); const prevPivotPoint = new Vector3().copy(this.lastPivotPoint).applyMatrix4(this._basisTransformInv); const deltaPivot = prevPivotPoint.sub(pivotPoint); /** We recompute the pivotal origin/pivotal offset, but only when required! */ if (deltaPivot.length() > 0) { this.pivotalOrigin.copy(this.getPivotalOrigin(pivotPoint, position, quaternion)); } /** We get a new position in the pivotal CS */ position = this.positionFromPivotal(this.pivotalOrigin, quaternion); /** We update the polar CS based off the new pivotal camera position, * essentially creating a virtual pair polar CS which can reproduce the pivotal position */ this.polarFromPivotal(position); /** Update the last pivot */ this.lastPivotPoint.copy(this.pivotPoint); } /** We transform both position and quaternion in the required basis */ position.applyQuaternion(new Quaternion().setFromRotationMatrix(this._basisTransform)); quaternion.premultiply(new Quaternion().setFromRotationMatrix(this._basisTransform)); /** This is a trick we do for ortographic projection which stops the near plane from clipping into geometry * In orthographic projection the camera's 'depth' along it's forward does not matter. Zoooming is achieved by * varying the orthographic size, not by moving the camera. */ if (this._targetCamera instanceof OrthographicCamera) { const cameraDirection = new Vector3().setFromSpherical(this.spherical).applyQuaternion(new Quaternion().setFromRotationMatrix(this._basisTransform)).normalize(); position.add(cameraDirection.multiplyScalar(this._options.maximumRadius - this.options.minimumRadius - this.spherical.radius)); } /** Apply values and update transform */ this._targetCamera.position.copy(position); this._targetCamera.quaternion.copy(quaternion); this._targetCamera.updateMatrixWorld(true); /** Fov update */ if (this._targetCamera instanceof PerspectiveCamera) if (this._targetCamera.fov !== Math.exp(this.logFov)) { this._targetCamera.fov = Math.exp(this.logFov); this._targetCamera.updateProjectionMatrix(); } /** Compute the correct orthographic size based on the polar radius */ if (this._targetCamera instanceof OrthographicCamera) { const orthographicSize = computeOrthographicSize(this.spherical.radius, Math.exp(this.logFov), this._container.offsetWidth / this._container.offsetHeight); this._targetCamera.zoom = 1; this._targetCamera.left = orthographicSize.x / -2; this._targetCamera.right = orthographicSize.x / 2; this._targetCamera.top = orthographicSize.y / 2; this._targetCamera.bottom = orthographicSize.y / -2; this._targetCamera.updateProjectionMatrix(); } /** Update the debug origin sphere */ const spherePos = this._options.orbitAroundCursor && this.usePivotal ? this.pivotPoint : new Vector3().copy(this.origin).applyMatrix4(this._basisTransform); this.orbitSphere.position.copy(spherePos); /** We'd rather have a palpable epsilon for regular sized streams, but also * compute a custom one for microscopic ones */ const epsilon = Math.min(MOVEMENT_EPSILON, this.world.getRelativeOffset(MOVEMENT_EPSILON)); return lastCameraPos.sub(this._targetCamera.position).length() > epsilon || lastCameraQuat.angleTo(this._targetCamera.quaternion) > epsilon; } /* // Ortho height to distance function. Keeping for reference private orthographicHeightToDistance(height: number) { if (!(this._targetCamera instanceof OrthographicCamera)) return this.spherical.radius return height / (Math.tan(MathUtils.DEG2RAD * Math.exp(this.logFov) * 0.5) * 2) }*/ /** Three.js Spherical assumes (0, 1, 0) as up... */ positionFromSpherical(spherical, origin) { const position = new Vector3(); position.setFromSpherical(spherical); if (origin) position.add(origin); return position; } /** Three.js Spherical assumes (0, 1, 0) as up... */ quaternionFromSpherical(spherical) { const quaternion = new Quaternion(); quaternion.setFromEuler(new Euler(spherical.phi - Math.PI / 2, spherical.theta, 0, 'YXZ')); return quaternion; } userAdjustOrbit(deltaTheta, deltaPhi, deltaZoom) { this.adjustOrbit(deltaTheta * this._options.orbitSensitivity * +this._options.enableOrbit * this._options.inputSensitivity, deltaPhi * this._options.orbitSensitivity * +this._options.enableOrbit * this._options.inputSensitivity, deltaZoom * this._options.zoomSensitivity * +this._options.enableZoom * this._options.inputSensitivity); } enableInteraction() { if (this._enabled) return; this._container.addEventListener('pointerdown', this.onPointerDown); this._container.addEventListener('pointercancel', this.onPointerUp); this._container.addEventListener('wheel', this.onWheel); // This little beauty is to work around a WebKit bug that otherwise makes // touch events randomly not cancelable. this._container.addEventListener('touchmove', () => {}, { passive: false }); this._container.addEventListener('contextmenu', this.onContext); // this.element.style.cursor = 'grab' } disableInteraction() { if (!this._enabled) return; this._container.removeEventListener('pointerdown', this.onPointerDown); this._container.removeEventListener('pointermove', this.onPointerMove); this._container.removeEventListener('pointerup', this.onPointerUp); this._container.removeEventListener('pointercancel', this.onPointerUp); this._container.removeEventListener('wheel', this.onWheel); this._container.removeEventListener('contextmenu', this.onContext); // element.style.cursor = '' this.touchMode = null; this.pointers.length = 0; } // Wraps to between -pi and pi wrapAngle(radians) { const normalized = (radians + Math.PI) / (2 * Math.PI); const wrapped = normalized - Math.floor(normalized); return wrapped * 2 * Math.PI - Math.PI; } pixelLengthToSphericalAngle(pixelLength) { return 2 * Math.PI * pixelLength / this._container.offsetHeight; } twoTouchDistance(touchOne, touchTwo) { const { clientX: xOne, clientY: yOne } = touchOne; const { clientX: xTwo, clientY: yTwo } = touchTwo; const xDelta = xTwo - xOne; const yDelta = yTwo - yOne; return Math.sqrt(xDelta * xDelta + yDelta * yDelta); } handleSinglePointerMove(dx, dy) { const deltaTheta = this.pixelLengthToSphericalAngle(dx); const deltaPhi = this.pixelLengthToSphericalAngle(dy); if (this.isUserPointing === false) { this.isUserPointing = true; this.emit(PointerChangeEvent.PointerChangeStart); } this.userAdjustOrbit(deltaTheta, deltaPhi, 0); } initializePan() { const { theta, phi } = this.spherical; const psi = theta; //- this.scene.yaw this.panPerPixel = PAN_SENSITIVITY * this._options.panSensitivity * +this._options.enablePan / this._container.offsetHeight; this.panProjection.set(-Math.cos(psi), -Math.cos(phi) * Math.sin(psi), 0, 0, Math.sin(phi), 0, Math.sin(psi), -Math.cos(phi) * Math.cos(psi), 0); } movePan(dx, dy) { const dxy = vector3.set(dx, dy, 0).multiplyScalar(this._options.inputSensitivity); let relativeFactor = this.world.getRelativeOffset(farRelativeFactorPan); if (this._minDist) { if (this._minDist < relativeFactor * 0.5) { relativeFactor = this.world.getRelativeOffset(closeRelativeFactorPan); } } const radiusFactor = clamp(this.spherical.radius, this.world.getRelativeOffset(0.025), Number.MAX_VALUE); const metersPerPixel = Math.max(relativeFactor, radiusFactor) * Math.exp(this.logFov) * this.panPerPixel; dxy.multiplyScalar(metersPerPixel); /** This panProjection assumes (0, 1, 0) as up... */ const target = this.getTarget().applyMatrix4(this._basisTransformInv); target.add(dxy.applyMatrix3(this.panProjection)); this.setTarget(target.x, target.y, target.z); this.usePivotal = false; this.orbitSphere.visible = false; } /** By default hidden objects are ignored when picking for orbit around cursor */ filterOrbitToCursorHits(hit) { var _a; const material = this.renderer.getMaterial(hit.batchObject.renderView); return (_a = material === null || material === void 0 ? void 0 : material.visible) !== null && _a !== void 0 ? _a : false; } onTouchChange(event) { if (this.pointers.length === 1) { this.touchMode = this.touchModeRotate; } else { if (!this._options.enableZoom) { this.touchMode = null; this._container.removeEventListener('touchmove', this.disableScroll); return; } this.touchMode = this.touchDecided && this.touchMode === null ? null : this.touchModeZoom; this.touchDecided = true; this._container.addEventListener('touchmove', this.disableScroll, { passive: false }); this.lastSeparation = this.twoTouchDistance(this.pointers[0], this.pointers[1]); if (this.enablePan && this.touchMode !== null) { this.initializePan(); if (!event.altKey) ; } } } onMouseDown(event) { this.panPerPixel = 0; if (this.enablePan && (event.button === 2 || event.ctrlKey || event.metaKey || event.shiftKey)) { this.initializePan(); this.orbitSphere.visible = false; } // this.element.style.cursor = 'grabbing' } dispose() { throw new Error('Method not implemented.'); } } var NearPlaneCalculation; (function (NearPlaneCalculation) { NearPlaneCalculation[NearPlaneCalculation["EMPIRIC"] = 0] = "EMPIRIC"; NearPlaneCalculation[NearPlaneCalculation["ACCURATE"] = 1] = "ACCURATE"; })(NearPlaneCalculation || (NearPlaneCalculation = {})); function computeOrthographicSize(distance, fov, aspect) { const height = Math.tan(MathUtils.DEG2RAD * (fov / 2)) * 2.0 * distance; const width = height * aspect; return new Vector2(width, height); } const DefaultOrbitControlsOptions = { enableOrbit: true, enableZoom: true, enablePan: true, orbitSensitivity: 1, zoomSensitivity: 1, panSensitivity: 1, inputSensitivity: 1, minimumRadius: 0, maximumRadius: Infinity, minimumPolarAngle: 0, maximumPolarAngle: Math.PI, minimumAzimuthalAngle: -Infinity, maximumAzimuthalAngle: Infinity, minimumFieldOfView: 40, maximumFieldOfView: 60, touchAction: 'none', infiniteZoom: true, zoomToCursor: true, orbitAroundCursor: true, showOrbitPoint: true, lookSpeed: 1, moveSpeed: 1, damperDecay: 30, enableLook: true, relativeUpDown: false, nearPlaneCalculation: NearPlaneCalculation.ACCURATE }; class CameraController extends Extension { get renderingCamera() { return this._renderingCamera; } set renderingCamera(value) { this._renderingCamera = value; } get enabled() { return this._activeControls.enabled; } set enabled(val) { this.controls.enabled = val; } get fieldOfView() { return this.perspectiveCamera.fov; } set fieldOfView(value) { this.perspectiveCamera.fov = value; this.perspectiveCamera.updateProjectionMatrix(); } get aspect() { return this.perspectiveCamera.aspect; } get controls() { return this._activeControls; } get options() { return this._options; } set options(value) { Object.assign(this._options, value); this._orbitControls.options = value; this._flyControls.options = value; } constructor(viewer) { super(viewer); this._lastCameraChanged = false; this._options = DefaultOrbitControlsOptions; /** Create the default perspective camera */ this.perspectiveCamera = new PerspectiveCamera(55, window.innerWidth / window.innerHeight); const aspect = this.viewer.getContainer().offsetWidth / this.viewer.getContainer().offsetHeight; /** Create the default orthographic camera */ const fustrumSize = 50; this.orthographicCamera = new OrthographicCamera(-fustrumSize * aspect / 2, fustrumSize * aspect / 2, fustrumSize / 2, -fustrumSize / 2, 0.001, 10000); /** Perspective camera as default on startup */ this.renderingCamera = this.perspectiveCamera; this._flyControls = new FlyControls(this._renderingCamera, this.viewer.getRenderer().input, this.viewer.World, this._options); this._flyControls.enabled = false; this._flyControls.setDamperDecayTime(30); this._flyControls.up = new Vector3(0, 0, 1); this._orbitControls = new SmoothOrbitControls(this.perspectiveCamera, this.viewer.getContainer(), this.viewer.World, this.viewer.getRenderer(), this._options); this._orbitControls.enabled = true; this.viewer.getRenderer().speckleCamera = this; this._activeControls = this._orbitControls; this.default(); } default() { if (this._activeControls instanceof SmoothOrbitControls) { this._activeControls.up = new Vector3(0, 0, 1); this._activeControls.setOrbit(2.356, 0.955); this._activeControls.jumpToGoal(); } } on(eventType, listener) { super.on(eventType, listener); } getTarget() { return this._activeControls.getTarget(); } getPosition() { return this._activeControls.getPosition(); } toggleControls() { const oldControls = this._activeControls; let newControls = undefined; if (this._activeControls instanceof SmoothOrbitControls) { newControls = this._flyControls; } else if (this._activeControls instanceof FlyControls) { newControls = this._orbitControls; } if (!newControls) throw new Error('Not controls found!'); oldControls.enabled = false; newControls.enabled = true; newControls.fromPositionAndTarget(oldControls.getCurrentPosition(), oldControls.getCurrentTarget()); newControls.jumpToGoal(); this._activeControls = newControls; this.viewer.requestRender(); } setCameraView(arg0, arg1 = true, arg2 = 1.2) { if (!arg0) { this.zoomExtents(arg2, arg1); } else if (Array.isArray(arg0)) { this.zoom(arg0, arg2, arg1); } else if (this.isBox3(arg0)) { this.zoomToBox(arg0, arg2, arg1); } else { this.setView(arg0, arg1); } this.emit(CameraEvent.Dynamic); } onEarlyUpdate(_delta) { const changed = this._activeControls.update(_delta); if (changed !== this._lastCameraChanged) { this.emit(changed ? CameraEvent.Dynamic : CameraEvent.Stationary); } this.emit(CameraEvent.FrameUpdate, changed); this._lastCameraChanged = changed; if (changed) { this.updateCameraPlanes(); } } onLateUpdate() { /** A simple way to make sure any potential camera movement is propagated forward as dynamic especially to the rendering pipelines * Ideally, we'd need something more complicated that keeps track of ongoing animations and such and makes sure the camer is dynamic * But until we need to complicate ourselves, this will be enough */ if (this._lastCameraChanged) this.emit(CameraEvent.Dynamic); this.emit(CameraEvent.LateFrameUpdate, this._lastCameraChanged); } onResize() { const aspect = this.viewer.getContainer().offsetWidth / this.viewer.getContainer().offsetHeight; this.perspectiveCamera.aspect = aspect; this.perspectiveCamera.updateProjectionMatrix(); const distance = this._activeControls.getPosition().distanceTo(this._activeControls.getTarget()); const orthographicSize = computeOrthographicSize(distance, this.perspectiveCamera.fov, aspect); this.orthographicCamera.zoom = 1; this.orthographicCamera.left = orthographicSize.x / -2; this.orthographicCamera.right = orthographicSize.x / 2; this.orthographicCamera.top = orthographicSize.y / 2; this.orthographicCamera.bottom = orthographicSize.y / -2; this.orthographicCamera.updateProjectionMatrix(); } setPerspectiveCameraOn() { if (this._renderingCamera === this.perspectiveCamera) return; this.renderingCamera = this.perspectiveCamera; this.setupPerspectiveCamera(); this.viewer.requestRender(UpdateFlags.RENDER_RESET); } setOrthoCameraOn() { if (this._renderingCamera === this.orthographicCamera) return; this.renderingCamera = this.orthographicCamera; this.setupOrthoCamera(); this.viewer.requestRender(UpdateFlags.RENDER_RESET); } toggleCameras() { if (this._renderingCamera === this.perspectiveCamera) this.setOrthoCameraOn();else this.setPerspectiveCameraOn(); } setupOrthoCamera() { this.controls.targetCamera = this.orthographicCamera; this.enableRotations(); this.updateCameraPlanes(this.viewer.getRenderer().sceneBox); this.emit(CameraEvent.ProjectionChanged, CameraProjection.ORTHOGRAPHIC); } setupPerspectiveCamera() { this.controls.targetCamera = this.perspectiveCamera; this.enableRotations(); this.updateCameraPlanes(this.viewer.getRenderer().sceneBox); this.emit(CameraEvent.ProjectionChanged, CameraProjection.PERSPECTIVE); } disableRotations() { this.options = { enableOrbit: false, enableLook: false }; } enableRotations() { this.options = { enableOrbit: true, enableLook: true }; } updateCameraPlanes(targetVolume, offsetScale = 1) { const renderer = this.viewer.getRenderer(); if (!renderer.renderingCamera) return; if (!targetVolume) targetVolume = this.viewer.getRenderer().sceneBox; let nearPlane = this.computeNearCameraPlaneEmpiric(targetVolume, offsetScale); if (this._options.nearPlaneCalculation === NearPlaneCalculation.ACCURATE) nearPlane = this.computeNearCameraPlaneAccurate(targetVolume, offsetScale, nearPlane); if (nearPlane) { renderer.renderingCamera.near = nearPlane; renderer.renderingCamera.updateProjectionMatrix(); } this.updateFarCameraPlane(); } computeNearCameraPlaneEmpiric(targetVolume, offsetScale = 1) { if (!targetVolume) return; if (targetVolume.isEmpty()) { Logger.warn('Cannot set camera planes for empty volume'); return; } const size = targetVolume.getSize(new Vector3()); const maxSize = Math.max(size.x, size.y, size.z); const camFov = this._renderingCamera === this.perspectiveCamera ? this.fieldOfView : 55; const camAspect = this._renderingCamera === this.perspectiveCamera ? this.aspect : 1.2; const fitHeightDistance = maxSize / (2 * Math.atan(Math.PI * camFov / 360)); const fitWidthDistance = fitHeightDistance / camAspect; const distance = offsetScale * Math.max(fitHeightDistance, fitWidthDistance); return this.perspectiveCamera ? distance / 100 : 0.001; } computeNearCameraPlaneAccurate(targetVolume, offsetScale = 1, fallback) { const minDist = this.getClosestGeometryDistance(fallback); this._flyControls.minDist = minDist; this._orbitControls.minDist = minDist; if (minDist === Number.POSITIVE_INFINITY) { return this.computeNearCameraPlaneEmpiric(targetVolume, offsetScale); } const camFov = this._renderingCamera === this.perspectiveCamera ? this.fieldOfView : 55; const camAspect = this._renderingCamera === this.perspectiveCamera ? this.aspect : 1.2; const nearPlane = Math.max(minDist, 0) / Math.sqrt(1 + Math.pow(Math.tan(camFov / 180 * Math.PI / 2), 2) * (Math.pow(camAspect, 2) + 1)); // console.log(minDist, nearPlane) return nearPlane; } updateFarCameraPlane() { const renderer = this.viewer.getRenderer(); if (!renderer.renderingCamera) return; const v = new Vector3(); const box = renderer.sceneBox; const camPos = new Vector3().copy(renderer.renderingCamera.position); let d = 0; v.set(box.min.x, box.min.y, box.min.z); // 000 d = Math.max(camPos.distanceTo(v), d); v.set(box.min.x, box.min.y, box.max.z); // 001 d = Math.max(camPos.distanceTo(v), d); v.set(box.min.x, box.max.y, box.min.z); // 010 d = Math.max(camPos.distanceTo(v), d); v.set(box.min.x, box.max.y, box.max.z); // 011 d = Math.max(camPos.distanceTo(v), d); v.set(box.max.x, box.min.y, box.min.z); // 100 d = Math.max(camPos.distanceTo(v), d); v.set(box.max.x, box.min.y, box.max.z); // 101 d = Math.max(camPos.distanceTo(v), d); v.set(box.max.x, box.max.y, box.min.z); // 110 d = Math.max(camPos.distanceTo(v), d); v.set(box.max.x, box.max.y, box.max.z); // 111 d = Math.max(camPos.distanceTo(v), d); renderer.renderingCamera.far = d * 2; renderer.renderingCamera.updateProjectionMatrix(); } getClosestGeometryDistance(fallback) { const cameraPosition = this._activeControls.getCurrentPosition(); const cameraTarget = this._activeControls.getCurrentTarget(); const cameraDir = new Vector3().subVectors(cameraTarget, cameraPosition).normalize(); const batches = this.viewer.getRenderer().batcher.getBatches(undefined, [GeometryType.MESH, GeometryType.TEXT]); let minDist = Number.POSITIVE_INFINITY; for (let b = 0; b < batches.length; b++) { const result = batches[b].mesh.TAS.closestPointToPointHalfplane(cameraPosition, cameraDir, fallback); if (!result) continue; minDist = Math.min(minDist, result.distance); } return minDist; } zoom(objectIds, fit, transition) { if (!objectIds) { this.zoomExtents(fit, transition); return; } this.zoomToBox(this.viewer.getRenderer().boxFromObjects(objectIds), fit, transition); } zoomExtents(fit = 1.2, transition = true) { if (this.viewer.getRenderer().clippingVolume.isEmpty()) { const box = new Box3(new Vector3(-1, -1, -1), new Vector3(1, 1, 1)); this.zoomToBox(box, fit, transition); return; } const box = new Box3().fromOBB(this.viewer.getRenderer().clippingVolume); /** This is for special cases like when the stream will only have one point * which three will not consider it's size when computing the bounding box * resulting in a zero size bounding box. That's why we make sure the bounding * box is never zero in size */ if (box.min.equals(box.max)) { box.expandByVector(new Vector3(1, 1, 1)); } this.zoomToBox(box, fit, transition); } zoomToBox(box, fit = 1.2, transition = true) { if (box.max.x === Infinity || box.max.x === -Infinity) { box = new Box3(new Vector3(-1, -1, -1), new Vector3(1, 1, 1)); } const targetSphere = new Sphere(); box.getBoundingSphere(targetSphere); targetSphere.radius = this.fitToRadius(targetSphere.radius) * fit; this._activeControls.fitToSphere(targetSphere); if (!transition) { this._activeControls.jumpToGoal(); } this.updateCameraPlanes(box, fit); } fitToRadius(radius) { // https://stackoverflow.com/a/44849975 const vFOV = this.perspectiveCamera.getEffectiveFOV() * MathUtils.DEG2RAD; const hFOV = Math.atan(Math.tan(vFOV * 0.5) * this.perspectiveCamera.aspect) * 2; const fov = 1 < this.perspectiveCamera.aspect ? vFOV : hFOV; return radius / Math.sin(fov * 0.5); } isSpeckleView(view) { return view.name !== undefined; } isCanonicalView(view) { return typeof view === 'string'; } isInlineView(view) { return view.position !== undefined && view.target !== undefined; } isPolarView(view) { return view.azimuth !== undefined && view.polar !== undefined; } isBox3(view) { return view instanceof Box3; } setView(view, transition = true) { if (this.isSpeckleView(view)) { this.setViewSpeckle(view, transition); } if (this.isCanonicalView(view)) { this.setViewCanonical(view, transition); } if (this.isInlineView(view)) { this.setViewInline(view, transition); } if (this.isPolarView(view)) { this.setViewPolar(view, transition); } } setViewSpeckle(view, transition = true) { this._activeControls.fromPositionAndTarget(new Vector3(view.origin.x, view.origin.y, view.origin.z), new Vector3(view.target.x, view.target.y, view.target.z)); if (!transition) this._activeControls.jumpToGoal(); this.enableRotations(); } /** * Rotates camera to some canonical views * @param {string} side Can be any of front, back, up (top), down (bottom), right, left. * @param {Number} fit [description] * @param {Boolean} transition [description] * @return {[type]} [description] */ setViewCanonical(side, transition = true) { const targetSphere = new Sphere(); this.viewer.World.worldBox.getBoundingSphere(targetSphere); const distance = this.fitToRadius(targetSphere.radius); const canonicalPosition = new Vector3().copy(this.viewer.World.worldBox.getCenter(new Vector3())); const canonicalTarget = new Vector3().copy(canonicalPosition); const controlerBasis = new Quaternion().setFromUnitVectors(new Vector3(0, 1, 0), this._activeControls.up); switch (side) { case 'front': this._activeControls.fromPositionAndTarget(canonicalPosition.add(new Vector3(0, 0, 1).applyQuaternion(controlerBasis).multiplyScalar(distance)), canonicalTarget); if (this._renderingCamera === this.orthographicCamera) this.disableRotations(); break; case 'back': this._activeControls.fromPositionAndTarget(canonicalPosition.add(new Vector3(0, 0, -1).applyQuaternion(controlerBasis).multiplyScalar(distance)), canonicalTarget); if (this._renderingCamera === this.orthographicCamera) this.disableRotations(); break; case 'up': case 'top': this._activeControls.fromPositionAndTarget(canonicalPosition.add(new Vector3(0, 1, 0).applyQuaternion(controlerBasis).multiplyScalar(distance)), canonicalTarget); if (this._renderingCamera === this.orthographicCamera) this.disableRotations(); break; case 'down': case 'bottom': this._activeControls.fromPositionAndTarget(canonicalPosition.add(new Vector3(0, -1, 0).applyQuaternion(controlerBasis).multiplyScalar(distance)), canonicalTarget); if (this._renderingCamera === this.orthographicCamera) this.disableRotations(); break; case 'right': this._activeControls.fromPositionAndTarget(canonicalPosition.add(new Vector3(1, 0, 0).applyQuaternion(controlerBasis).multiplyScalar(distance)), canonicalTarget); if (this._renderingCamera === this.orthographicCamera) this.disableRotations(); break; case 'left': this._activeControls.fromPositionAndTarget(canonicalPosition.add(new Vector3(-1, 0, 0).applyQuaternion(controlerBasis).multiplyScalar(distance)), canonicalTarget); if (this._renderingCamera === this.orthographicCamera) this.disableRotations(); break; case '3d': this._activeControls.fromPositionAndTarget(new Vector3().copy(this.viewer.World.worldBox.max), canonicalTarget); this.zoomExtents(); break; default: { this.enableRotations(); break; } } if (!transition) this._activeControls.jumpToGoal(); } setViewInline(view, transition = true) { this._activeControls.fromPositionAndTarget(view.position, view.target); if (!transition) this._activeControls.jumpToGoal(); this.enableRotations(); } setViewPolar(view, transition = true) { this._activeControls.adjustOrbit(view.azimuth, view.polar, view.radius ? view.radius : 0); if (!transition) this._activeControls.jumpToGoal(); this.enableRotations(); } } // Workaround for broken three.js types const Stats = StatsImport; class Viewer extends EventEmitter { /** Gets the World object. Currently it's used for info mostly */ get World() { return this.world; } get Utils() { if (!this.utils) { this.utils = { screenToNDC: this.speckleRenderer.screenToNDC.bind(this.speckleRenderer), NDCToScreen: this.speckleRenderer.NDCToScreen.bind(this.speckleRenderer) }; } return this.utils; } get input() { return this.speckleRenderer.input; } get params() { return this.startupParams; } getConstructorChain(obj) { const cs = []; let pt = obj; do { if (pt = Object.getPrototypeOf(pt)) cs.push(pt.constructor.name || null); } while (pt !== null); return cs; } createExtension(type) { const extensionsToInject = type.prototype.inject; const injectedExtensions = []; extensionsToInject.forEach(value => { if (this.extensions[value.name]) { injectedExtensions.push(this.extensions[value.name]); return; } for (const k in this.extensions) { const prototypeChain = this.getConstructorChain(this.extensions[k]); if (prototypeChain.includes(value.name)) { injectedExtensions.push(this.extensions[k]); } } }); const extension = new type(this, ...injectedExtensions); this.extensions[type.name] = extension; return extension; } getExtension(type) { let extension; if ((extension = this.getExtensionInternal(type)) !== null) return extension; throw new Error(`Could not get Extension of type ${type.name}. Is it created?`); } hasExtension(type) { const extension = this.getExtensionInternal(type); return extension ? true : false; } getExtensionInternal(type) { if (this.extensions[type.name]) return this.extensions[type.name];else { for (const k in this.extensions) { const prototypeChain = this.getConstructorChain(this.extensions[k]); if (prototypeChain.includes(type.name)) { return this.extensions[k]; } } } return null; } constructor(container, params = DefaultViewerParams) { super(); /** Viewer components */ this.tree = new WorldTree(); this.world = new World(); this.loaders = {}; this.extensions = {}; Logger.useDefaults(); Logger.setLevel(params.verbose ? Logger.TRACE : Logger.ERROR); this.container = container || document.getElementById('renderer'); if (params.showStats) { this.stats = Stats(); this.container.prepend(this.stats.dom); this.stats.dom.style.position = 'relative'; // Mad CSS skills } this.loaders = {}; this.startupParams = params; this.clock = new Clock(); this.speckleRenderer = new SpeckleRenderer(this.tree, this); this.speckleRenderer.create(this.container); window.addEventListener('resize', this.resize.bind(this), false); this.propertyManager = new PropertyManager(); this.frame(); this.resize(); } getContainer() { return this.container; } getCanvas() { return this.speckleRenderer.renderer.domElement; } getRenderer() { return this.speckleRenderer; } resize() { const width = this.container.offsetWidth; const height = this.container.offsetHeight; this.speckleRenderer.resize(width, height); Object.values(this.extensions).forEach(value => { value.onResize(); }); } requestRender(flags = UpdateFlags.RENDER) { if (flags & UpdateFlags.RENDER) { this.speckleRenderer.needsRender = true; } if (flags & UpdateFlags.SHADOWS) { this.speckleRenderer.shadowMapNeedsUpdate = true; } if (flags & UpdateFlags.CLIPPING_PLANES) { this.speckleRenderer.updateClippingPlanes(); } if (flags & UpdateFlags.RENDER_RESET) { this.speckleRenderer.needsRender = true; this.speckleRenderer.resetPipeline(); } } frame() { this.update(); this.render(); } update() { var _a; const delta = this.clock.getDelta() * TIME_MS.second; const extensions = Object.values(this.extensions); extensions.forEach(ext => { ext.onEarlyUpdate(delta); }); this.speckleRenderer.update(delta); extensions.forEach(ext => { ext.onLateUpdate(delta); }); (_a = this.stats) === null || _a === void 0 ? void 0 : _a.update(); requestAnimationFrame(this.frame.bind(this)); } render() { this.speckleRenderer.render(); Object.values(this.extensions).forEach(ext => { ext.onRender(); }); } async init() { if (this.startupParams.environmentSrc) { Assets.getEnvironment(this.startupParams.environmentSrc, this.speckleRenderer.renderer).then(value => { this.speckleRenderer.indirectIBL = value; }).catch(reason => { Logger.error(reason); Logger.error('Environment failed to load!'); }); } } on(eventType, listener) { super.on(eventType, listener); } getObjectProperties(resourceURL = null, bypassCache = true) { return this.propertyManager.getProperties(this.tree, resourceURL, bypassCache); } getDataTree() { Logger.error('DataTree has been deprecated! Please use WorldTree'); } getWorldTree() { return this.tree; } query(query) { if (Queries.isPointQuery(query)) { Queries.DefaultPointQuerySolver.setContext(this.speckleRenderer); return Queries.DefaultPointQuerySolver.solve(query); } if (Queries.isIntersectionQuery(query)) { Queries.DefaultIntersectionQuerySolver.setContext(this.speckleRenderer); return Queries.DefaultIntersectionQuerySolver.solve(query); } return null; } setLightConfiguration(config) { this.speckleRenderer.setSunLightConfiguration(config); } getViews() { return this.tree.findAll(node => { var _a; return ((_a = node.model.renderView) === null || _a === void 0 ? void 0 : _a.speckleType) === SpeckleType.View3D; }).map(v => { return v.model.raw; }); } screenshot() { return new Promise(resolve => { // const sectionBoxVisible = this.sectionBox.display.visible // if (sectionBoxVisible) { // this.sectionBox.visible = false // } const screenshot = this.speckleRenderer.renderer.domElement.toDataURL('image/png'); // if (sectionBoxVisible) { // this.sectionBox.visible = true // } resolve(screenshot); }); } /** * OBJECT LOADING/UNLOADING */ async loadObject(loader, zoomToObject = true) { var _a; if (zoomToObject) { (_a = this.getExtension(CameraController)) === null || _a === void 0 ? void 0 : _a.default(); } this.loaders[loader.resource] = loader; const treeBuilt = await loader.load(); if (treeBuilt) { const renderTree = this.tree.getRenderTree(loader.resource); /** Catering to typescript * The render tree can't be null, we've just built it */ if (!renderTree) { throw new Error(`Could not get render tree ${loader.resource}`); } const t0 = performance.now(); for await (const step of this.speckleRenderer.addRenderTree(renderTree)) { if (zoomToObject) { const extension = this.getExtension(CameraController); if (extension) { extension.setCameraView([], false); this.speckleRenderer.pipeline.render(); } } } Logger.log(this.getRenderer().renderingStats); Logger.log('ASYNC batch build time -> ', performance.now() - t0); this.requestRender(UpdateFlags.RENDER_RESET | UpdateFlags.SHADOWS); this.emit(ViewerEvent.LoadComplete, loader.resource); } if (this.loaders[loader.resource]) this.loaders[loader.resource].dispose(); delete this.loaders[loader.resource]; } async cancelLoad(resource, unload = false) { var _a; this.loaders[resource].cancel(); (_a = this.tree.getRenderTree(resource)) === null || _a === void 0 ? void 0 : _a.cancelBuild(); this.speckleRenderer.cancelRenderTree(resource); if (unload) { await this.unloadObject(resource); } } async unloadObject(resource) { var _a; try { if (this.tree.findSubtree(resource)) { if (this.loaders[resource]) { await this.cancelLoad(resource, true); return; } delete this.loaders[resource]; this.speckleRenderer.removeRenderTree(resource); (_a = this.tree.getRenderTree(resource)) === null || _a === void 0 ? void 0 : _a.purge(); this.tree.purge(resource); this.requestRender(UpdateFlags.RENDER_RESET | UpdateFlags.SHADOWS); } } finally { Logger.warn(`Removed subtree ${resource}`); this.emit(ViewerEvent.UnloadComplete, resource); } } async unloadAll() { try { for (const key of Object.keys(this.loaders)) { if (this.loaders[key]) await this.cancelLoad(key, false); delete this.loaders[key]; } this.tree.root.children.forEach(node => { var _a; this.speckleRenderer.removeRenderTree(node.model.id); (_a = this.tree.getRenderTree()) === null || _a === void 0 ? void 0 : _a.purge(); }); this.tree.purge(); } finally { Logger.warn(`Removed all subtrees`); this.emit(ViewerEvent.UnloadAllComplete); } } dispose() { // TODO: currently it's easier to simply refresh the page :) } } Viewer.theAssets = new Assets(); var MeasurementState; (function (MeasurementState) { MeasurementState[MeasurementState["HIDDEN"] = 0] = "HIDDEN"; MeasurementState[MeasurementState["DANGLING_START"] = 1] = "DANGLING_START"; MeasurementState[MeasurementState["DANGLING_END"] = 2] = "DANGLING_END"; MeasurementState[MeasurementState["COMPLETE"] = 3] = "COMPLETE"; })(MeasurementState || (MeasurementState = {})); class Measurement extends Object3D { constructor() { super(); this.startPoint = new Vector3(); this.endPoint = new Vector3(); this.startNormal = new Vector3(); this.endNormal = new Vector3(); this.value = 0; this.units = 'm'; this.precision = 2; this._state = MeasurementState.HIDDEN; this.renderingSize = new Vector2(); this.measurementId = MathUtils.generateUUID(); } set state(value) { this._state = value; } get state() { return this._state; } get bounds() { return new Box3().expandByPoint(this.startPoint).expandByPoint(this.endPoint); } // eslint-disable-next-line @typescript-eslint/no-unused-vars frameUpdate(camera, size, _bounds) { this.renderingCamera = camera; this.renderingSize.copy(size); } toMeasurementData() { const measurementData = { type: this.measurementType, startPoint: [this.startPoint.x, this.startPoint.y, this.startPoint.z], endPoint: [this.endPoint.x, this.endPoint.y, this.endPoint.z], startNormal: [this.startNormal.x, this.startNormal.y, this.startNormal.z], endNormal: [this.endNormal.x, this.endNormal.y, this.endNormal.z], value: this.value, uuid: this.measurementId // units: this.units, // We don't write units per measurement // precision: this.precision // We don't write precision per measurement }; return measurementData; } fromMeasurementData(data) { this.measurementId = data.uuid; this.startPoint.set(data.startPoint[0], data.startPoint[1], data.startPoint[2]); this.endPoint.set(data.endPoint[0], data.endPoint[1], data.endPoint[2]); this.startNormal.set(data.startNormal[0], data.startNormal[1], data.startNormal[2]); this.endNormal.set(data.endNormal[0], data.endNormal[1], data.endNormal[2]); this.value = data.value; // this.units = data.units // We don't read units per measurement // this.precision = data.precision // We don't read precision per measurement this._state = MeasurementState.COMPLETE; } } const _mat40$1 = new Matrix4(); const _mat41$1 = new Matrix4(); const _box3 = new Box3(); const _vec3 = new Vector3(); const _vec4 = new Vector4(); const quadVerts = [new Vector3(), new Vector3(), new Vector3(), new Vector3()]; /** Screen */ const DefaultTextLabelParams = { text: 'Test Text', fontSize: 40, maxWidth: Number.POSITIVE_INFINITY, anchorX: 'left', anchorY: 'middle', billboard: 'screen', backgroundColor: new Color(0xff0000), backgroundCornerRadius: 0.5, backgroundMargins: new Vector2(50, 10), textColor: new Color(0x00ffff), textOpacity: 1, objectLayer: ObjectLayers.OVERLAY }; // /** World Billboard*/ // export const DefaultTextLabelParams: Required = { // text: 'Test Text', // fontSize: 1, // maxWidth: Number.POSITIVE_INFINITY, // anchorX: 'left', // anchorY: 'middle', // billboard: 'world', // backgroundColor: new Color(0xff0000), // backgroundCornerRadius: 0.5, // backgroundMargins: new Vector2(0.75, 0.1), // textColor: new Color(0x00ffff), // textOpacity: 1, // objectLayer: ObjectLayers.OVERLAY // } // /** World */ // export const DefaultTextLabelParams: Required = { // text: 'Test Text', // fontSize: 1, // maxWidth: Number.POSITIVE_INFINITY, // anchorX: 'center', // anchorY: 'middle', // billboard: null, // backgroundColor: new Color(0xff0000), // backgroundCornerRadius: 0.5, // backgroundMargins: new Vector2(0.75, 0.1), // textColor: new Color(0x00ffff), // textOpacity: 1, // objectLayer: ObjectLayers.OVERLAY // } class TextLabel extends Text { get textMesh() { return this; } get backgroundMesh() { return this._background; } get textBounds() { return this._textBounds; } get backgroundMaterial() { return this._backgroundMaterial; } constructor(params = DefaultTextLabelParams) { super(); /** Needs a raycast to start rendering */ this.DEBUG_BILLBOARDS = false; this._params = Object.assign({}, DefaultTextLabelParams); this._textBounds = new Box3(); this.depthOffset = -0.1; this.material = new SpeckleTextMaterial({}).getDerivedMaterial(); this.material.toneMapped = false; this._backgroundMaterial = new SpeckleBasicMaterial({}); this._backgroundMaterial.toneMapped = false; this._background = new Mesh(undefined, this._backgroundMaterial); /** Otherwise three.js looses it's shit when rendering it billboarded */ this._background.frustumCulled = false; /** No raycasting for the background */ this._background.raycast = () => {}; const geometry = new BufferGeometry(); geometry.setAttribute('position', new Float32BufferAttribute(new Array(12).fill(0), 3)); geometry.setIndex( // prettier-ignore new Int16BufferAttribute([0, 1, 2, // First triangle: bottom-left → bottom-right → top-right 0, 2, 3 // Second triangle: bottom-left → top-right → top-left ], 1)); this._collisionMesh = new Mesh(geometry, new MeshBasicMaterial({ color: 0x00ff00, wireframe: true })); this._collisionMesh.name = 'TextLabel_Collision_Mesh'; this._collisionMesh.renderOrder = 1; this._collisionMesh.visible = this.DEBUG_BILLBOARDS; this.add(this._collisionMesh); this.updateParams(params).then().catch; } async updateParams(params, onUpdateComplete) { return new Promise(resolve => { if (this.material && !(this.material instanceof SpeckleTextMaterial)) { const mat = this.material; Logger.error(`TextLabel requires a SpeckleTextMaterial instance. Found ${mat.constructor.name}`); } /** Automatically scale with DPR */ const transformedParams = Object.assign({}, params); if (params.billboard === 'screen') { if (transformedParams.backgroundMargins) transformedParams.backgroundMargins.multiplyScalar(window.devicePixelRatio); if (transformedParams.fontSize) { transformedParams.fontSize *= window.devicePixelRatio; } this.material.side = FrontSide; this._backgroundMaterial.side = FrontSide; } else { this.material.side = DoubleSide; this._backgroundMaterial.side = DoubleSide; } if (transformedParams.text) this.text = transformedParams.text; if (transformedParams.fontSize) this.fontSize = transformedParams.fontSize; if (transformedParams.anchorX) this.anchorX = transformedParams.anchorX; if (transformedParams.anchorY) this.anchorY = transformedParams.anchorY; if (transformedParams.maxWidth) this.maxWidth = transformedParams.maxWidth; if (transformedParams.textColor !== undefined) { this.material.color.copy(transformedParams.textColor); this.material.color.convertSRGBToLinear(); } if (transformedParams.textOpacity !== undefined) this.material.opacity = transformedParams.textOpacity; if (transformedParams.objectLayer !== undefined) { this.layers.set(transformedParams.objectLayer); this._collisionMesh.layers.set(transformedParams.objectLayer); this._background.layers.set(transformedParams.objectLayer); } this.material.needsUpdate = true; Object.assign(this._params, transformedParams); if (this._needsSync) { this.sync(() => { this.textBoundsToBox(this._textBounds); this.updateBackground(); this.updateBillboarding(); if (onUpdateComplete) onUpdateComplete(); resolve(); }); } else { if (onUpdateComplete) onUpdateComplete(); resolve(); } }); } raycast(raycaster, intersects) { /** No billboarding, default raycasting works fine */ if (!this._params.billboard) { super.raycast(raycaster, intersects); return; } /** If we have a billboard, we need to update the collision mesh */ const textMatrix = this.matrixWorld; const textMatrixInv = _mat40$1.copy(textMatrix).invert(); const billboardPos = new Vector3().set(textMatrix.elements[12], textMatrix.elements[13], textMatrix.elements[14]); /** World space billboarding */ if (this._params.billboard === 'world') { const box = new Box3().copy(this._params.backgroundColor !== null ? this._background.geometry.boundingBox : this._textBounds); const min = new Vector3().copy(box.min); const max = new Vector3().copy(box.max); quadVerts[0].set(min.x, min.y, 0); quadVerts[1].set(max.x, min.y, 0); quadVerts[2].set(max.x, max.y, 0); quadVerts[3].set(min.x, max.y, 0); const cameraRotationMatrix = _mat41$1.extractRotation(raycaster.camera.matrixWorld); const billboardMat = new Matrix4().makeTranslation(billboardPos.x, billboardPos.y, billboardPos.z); billboardMat.premultiply(textMatrixInv); billboardMat.multiply(cameraRotationMatrix); for (let i = 0; i < quadVerts.length; i++) { quadVerts[i].applyMatrix4(billboardMat); this._collisionMesh.geometry.attributes.position.setXYZ(i, quadVerts[i].x, quadVerts[i].y, quadVerts[i].z); } } /** Screen space billboarding */ if (this._params.billboard === 'screen') { const box = new Box3().copy(this._textBounds); if (box.getSize(new Vector3()).length() === 0) return; if (box.isInfiniteBox()) return; const min = new Vector3().copy(box.min); const max = new Vector3().copy(box.max); quadVerts[0].set(min.x, min.y, 0); quadVerts[1].set(max.x, min.y, 0); quadVerts[2].set(max.x, max.y, 0); quadVerts[3].set(min.x, max.y, 0); const billboardSize = this._params.backgroundColor !== null ? this._backgroundMaterial.userData.billboardPixelOffsetSize.value : this._backgroundMaterial.userData.billboardPixelOffsetSize.value; const invProjection = raycaster.camera.projectionMatrixInverse; const invView = raycaster.camera.matrixWorld; const clip = new Vector4(billboardPos.x, billboardPos.y, billboardPos.z, 1.0).applyMatrix4(raycaster.camera.matrixWorldInverse).applyMatrix4(raycaster.camera.projectionMatrix); const pDiv = clip.w; clip.multiplyScalar(1 / pDiv); for (let i = 0; i < quadVerts.length; i++) { _vec3.copy(quadVerts[i]); _vec3.multiply(new Vector3(billboardSize.z * 2, billboardSize.w * 2, 0)); _vec3.add(new Vector3(billboardSize.x * 2, billboardSize.y * 2, 0)); _vec4.set(clip.x, clip.y, clip.z, 1); _vec4.add(new Vector4(_vec3.x, _vec3.y, 0, 0)); _vec4.multiplyScalar(pDiv); _vec4.applyMatrix4(invProjection); _vec4.applyMatrix4(invView); _vec4.applyMatrix4(textMatrixInv); this._collisionMesh.geometry.attributes.position.setXYZ(i, _vec4.x, _vec4.y, _vec4.z); } } this._collisionMesh.geometry.attributes.position.needsUpdate = true; this._collisionMesh.geometry.computeBoundingBox(); this._collisionMesh.geometry.computeBoundingSphere(); /** No need to manually call. _collisionMesh is a child and will get automatically raycasted */ this._collisionMesh.raycast(raycaster, intersects); // super.raycast(raycaster, intersects) } /** Gets the current bounds reported by troika taking `fontSize` into account */ textBoundsToBox(target = new Box3()) { const { textRenderInfo } = this; /** visibleBounds generally is a better fit, *however* it reports faulty on some glyphs and messes up the text size */ const bounds = textRenderInfo.visibleBounds; const vertices = []; vertices.push(bounds[0], bounds[3], 0, bounds[2], bounds[3], 0, bounds[0], bounds[1], 0, bounds[2], bounds[1], 0); target.setFromArray(vertices); return target; } /** Text's blockBounds, the one we're working with bounds-wise is not a unit quad When using BILLBOARD_SCREEN we store the desired pixel size in the text's `fontSize` property This makes troika compute a large text since it thinks our pixels are world units. So we divide the text bounds by the font size to get the size of the unit text bounds, or another way of putting it, to compute the text bounds value as if fontSize = 1 From the unit box, we get it's size and compute a world->pixel ratio which we send to the shader */ updateBillboarding() { var _a, _b, _c, _d; this.material.setBillboarding(this._params.billboard); this._backgroundMaterial.setBillboarding(this._params.billboard); if (this._params.billboard === 'screen') { /** Get the current bounds */ const bounds = _box3.copy(this._textBounds); /** The fontSize is the pixel value so we normalize */ bounds.min.divideScalar(this.fontSize); bounds.max.divideScalar(this.fontSize); /** This is the size of the quad for the particular text value */ let unitSize = bounds.getSize(_vec3); /** We need to keep aspect ratio for text */ this.material.billboardPixelSize = new Vector2(1 / unitSize.y, 1 / unitSize.y); /** Same thing for background */ if (!this._background.geometry.boundingBox) this._background.geometry.computeBoundingBox(); const bgBounds = new Box3().copy(this._background.geometry.boundingBox); bgBounds.min.divideScalar(this.fontSize); bgBounds.max.divideScalar(this.fontSize); unitSize = bgBounds.getSize(_vec3); const margins = new Vector2((_b = (_a = this._params.backgroundMargins) === null || _a === void 0 ? void 0 : _a.x) !== null && _b !== void 0 ? _b : 0, (_d = (_c = this._params.backgroundMargins) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0); this._backgroundMaterial.billboardPixelSize = new Vector2(1 / unitSize.y + margins.x * (1 / unitSize.x) / this.fontSize, 1 / unitSize.y + margins.y * (1 / unitSize.y) / this.fontSize); const billboardPixelOffset = new Vector2(0, 0); switch (this.anchorX) { case 'left': billboardPixelOffset.x = -margins.x * 0.5; break; case 'right': billboardPixelOffset.x = margins.x * 0.5; break; } switch (this.anchorY) { case 'top': billboardPixelOffset.y = -margins.y * 0.5; break; case 'bottom': billboardPixelOffset.x = margins.y * 0.5; break; } this._backgroundMaterial.billboardPixelOffset = billboardPixelOffset; } } updateBackground() { var _a, _b; if (!this._params.backgroundColor) { if (this._background) { this._background.geometry.dispose(); this.remove(this._background); } return; } else if (!this._background.parent) { this.add(this._background); } const box = _box3.copy(this._textBounds); const offset = box.getCenter(new Vector3()); const boxSize = box.getSize(new Vector3()); const radius = this.fontSize * ((_a = this._params.backgroundCornerRadius) !== null && _a !== void 0 ? _a : 0); const margins = this._params.billboard !== 'screen' ? (_b = this._params.backgroundMargins) !== null && _b !== void 0 ? _b : new Vector2() : new Vector2(); if (!box.isInfiniteBox()) { const geometry = this.RectangleRounded(offset, boxSize.x + margins.x, boxSize.y + margins.y, radius, 5); geometry.computeBoundingBox(); geometry.computeBoundingSphere(); this._background.geometry = geometry; } const color = new Color(this._params.backgroundColor).convertSRGBToLinear(); this._background.material.color = color; } /** Improved version of https://discourse.threejs.org/t/roundedrectangle-squircle/28645 by way of the vibe */ RectangleRounded(offset, w, h, r, s, inset = false) { const positions = []; const uvs = []; const indices = []; if (inset) { let maxInset = 0; for (let i = 0; i <= s; i++) { const angle = Math.PI / 2 * (i / (s + 1)); const x = r * Math.cos(angle); const inset = r - x; if (inset > maxInset) maxInset = inset; } w += 2 * maxInset; } const radius = Math.min(r, w / 2, h / 2); const segmentsPerCorner = s + 1; const pointsPerCorner = segmentsPerCorner + 1; const totalPoints = pointsPerCorner * 4; positions.push(offset.x, offset.y, 0); uvs.push(0.5, 0.5); const corners = [{ cx: w / 2 - radius, cy: h / 2 - radius, angleStart: 0 }, { cx: -w / 2 + radius, cy: h / 2 - radius, angleStart: Math.PI / 2 }, { cx: -w / 2 + radius, cy: -h / 2 + radius, angleStart: Math.PI }, { cx: w / 2 - radius, cy: -h / 2 + radius, angleStart: 3 * Math.PI / 2 }]; for (let corner = 0; corner < 4; corner++) { const { cx, cy, angleStart } = corners[corner]; for (let i = 0; i <= segmentsPerCorner; i++) { const angle = angleStart + Math.PI / 2 * (i / segmentsPerCorner); const x = cx + radius * Math.cos(angle); const y = cy + radius * Math.sin(angle); positions.push(offset.x + x, offset.y + y, 0); uvs.push(0.5 + x / w, 0.5 + y / h); } } for (let i = 1; i <= totalPoints; i++) { const next = i < totalPoints ? i + 1 : 1; indices.push(0, i, next); } const geometry = new BufferGeometry(); geometry.setIndex(new Uint16BufferAttribute(indices, 1)); geometry.setAttribute('position', new Float32BufferAttribute(positions, 3)); geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); geometry.computeBoundingBox(); return geometry; } } const _vec30$3 = new Vector3(); const DefaultMeasurementPointGizmoStyle = { dashedLine: false, normalIndicatorPixelSize: 40, normalIndicatorColor: 0x047efb, normalIndicatorOpacity: 1, lineColor: 0x047efb, lineOpacity: 1, pointColor: 0x047efb, pointOpacity: 1, textColor: 0xffffff, textOpacity: 1, textPixelHeight: 11, pointPixelHeight: 5 }; class MeasurementPointGizmo extends Group { set style(value) { Object.assign(this._style, value); this.updateStyle(); } set highlight(value) { if (value) { this.normalIndicator.material.color = new Color(0xff0000); this.line.material.color = new Color(0xff0000); this.point.material.color = new Color(0xff0000); this.text.material.color.copy(new Color(0xff0000)); } else this.updateStyle(); } getNormalIndicatorMaterial() { const material = new SpeckleLineMaterial({ color: 0x047efb, linewidth: 1, worldUnits: false, vertexColors: false, alphaToCoverage: false, resolution: new Vector2(1, 1) }, ['USE_RTE']); material.color = new Color(this._style.normalIndicatorColor); material.color.convertSRGBToLinear(); material.toneMapped = false; material.linewidth = 2; material.worldUnits = false; material.resolution = new Vector2(256, 256); material.opacity = this._style.normalIndicatorOpacity !== undefined ? this._style.normalIndicatorOpacity : DefaultMeasurementPointGizmoStyle.normalIndicatorOpacity; material.transparent = material.opacity < 1; material.depthTest = false; return material; } getLineMaterial() { const lineMaterial = new SpeckleLineMaterial({ color: 0x047efb, linewidth: 1, worldUnits: false, vertexColors: false, alphaToCoverage: false, resolution: new Vector2(1, 1) }, ['USE_RTE', 'UNIFORM_OPACITY'].concat(this._style.dashedLine ? ['USE_DASH'] : [])); lineMaterial.color = new Color(this._style.lineColor); lineMaterial.color.convertSRGBToLinear(); lineMaterial.toneMapped = false; if (this._style.dashedLine) { lineMaterial.dashSize = 1; lineMaterial.gapSize = 1; lineMaterial.dashScale = 10; } lineMaterial.linewidth = 2; lineMaterial.worldUnits = false; lineMaterial.resolution = new Vector2(256, 256); lineMaterial.opacity = this._style.lineOpacity !== undefined ? this._style.lineOpacity : DefaultMeasurementPointGizmoStyle.lineOpacity; lineMaterial.transparent = lineMaterial.opacity < 1; lineMaterial.depthTest = false; return lineMaterial; } getPointMaterial(color) { const material = new SpeckleBasicMaterial({ color: color ? color : this._style.pointColor }, ['BILLBOARD_SCREEN']); material.opacity = this._style.pointOpacity !== undefined ? this._style.pointOpacity : DefaultMeasurementPointGizmoStyle.pointOpacity; material.transparent = material.opacity < 1; material.color.convertSRGBToLinear(); material.toneMapped = false; material.depthTest = false; const billboardSize = (this._style.pointPixelHeight !== undefined ? this._style.pointPixelHeight : DefaultMeasurementPointGizmoStyle.pointPixelHeight) * window.devicePixelRatio; material.billboardPixelSize = new Vector2(billboardSize, billboardSize); return material; } constructor(style) { super(); this.normalIndicatorBuffer = new Float64Array(24); this.normalIndicatorNormal = new Vector3(); this.normalIndicatorTangent = new Vector3(); this.normalIndicatorBitangent = new Vector3(); this._style = Object.assign({}, DefaultMeasurementPointGizmoStyle); this.layers.set(ObjectLayers.MEASUREMENTS); const normalIndicatorGeometry = new LineSegmentsGeometry(); normalIndicatorGeometry.setPositions(new Float32Array(this.normalIndicatorBuffer.length)); normalIndicatorGeometry.attributes['instanceStart'].data.setUsage(DynamicDrawUsage); Geometry.updateRTEGeometry(normalIndicatorGeometry, this.normalIndicatorBuffer); this.normalIndicator = new LineSegments2(normalIndicatorGeometry, undefined); this.normalIndicator.computeLineDistances(); this.normalIndicator.name = `test-mesurements-normal-indicator`; this.normalIndicator.frustumCulled = false; this.normalIndicator.layers.set(ObjectLayers.MEASUREMENTS); const buffer = new Float64Array(18); const lineGeometry = new LineSegmentsGeometry(); lineGeometry.setPositions(new Float32Array(buffer)); lineGeometry.attributes['instanceStart'].data.setUsage(DynamicDrawUsage); Geometry.updateRTEGeometry(lineGeometry, buffer); this.line = new LineSegments2(lineGeometry, undefined); this.line.computeLineDistances(); this.line.name = `test-mesurements-line`; this.line.frustumCulled = false; this.line.renderOrder = 0; this.line.layers.set(ObjectLayers.MEASUREMENTS); const sphereGeometry = new CircleGeometry(1, 16); this.point = new Mesh(sphereGeometry); this.point.layers.set(ObjectLayers.MEASUREMENTS); this.point.visible = false; this.point.renderOrder = 1; const point2 = new Mesh(sphereGeometry, this.getPointMaterial(0xffffff)); point2.renderOrder = 2; const pixelSize = (this._style.pointPixelHeight !== undefined ? this._style.pointPixelHeight : DefaultMeasurementPointGizmoStyle.pointPixelHeight) * window.devicePixelRatio - 2 * window.devicePixelRatio; point2.material.billboardPixelSize = new Vector2(pixelSize, pixelSize); point2.layers.set(ObjectLayers.MEASUREMENTS); this.point.add(point2); this.text = new TextLabel({ textColor: new Color(this._style.textColor), fontSize: this._style.textPixelHeight !== undefined ? this._style.textPixelHeight : DefaultMeasurementPointGizmoStyle.textPixelHeight, textOpacity: this._style.textOpacity !== undefined ? this._style.textOpacity : DefaultMeasurementPointGizmoStyle.textOpacity, billboard: 'screen', anchorX: 'center', anchorY: 'middle', backgroundColor: new Color(0x047efb), backgroundCornerRadius: 0.3, backgroundMargins: new Vector2(30, 10), objectLayer: ObjectLayers.MEASUREMENTS }); this.text.material.depthTest = false; this.text.depthOffset = -0.1; this.add(this.point); this.add(this.normalIndicator); this.add(this.line); this.add(this.text); this.style = style ? style : DefaultMeasurementPointGizmoStyle; } enable(normalIndicator, line, point, text) { this.normalIndicator.visible = normalIndicator; this.line.visible = line; this.point.visible = point; this.text.visible = text; this.text.textMesh.visible = text; this.line.material.visible = line; } frameUpdate(camera, size) { let halfSize = 0; const pixelSize = this._style.normalIndicatorPixelSize !== undefined ? this._style.normalIndicatorPixelSize : DefaultMeasurementPointGizmoStyle.normalIndicatorPixelSize; if (camera instanceof PerspectiveCamera) { const distance = camera.position.distanceTo(this.normalIndicator.position); const fov = MathUtils.degToRad(camera.fov); const screenHeightWorld = 2 * distance * Math.tan(fov / 2); const worldUnitsPerPixel = screenHeightWorld / size.y; halfSize = pixelSize * worldUnitsPerPixel / 2; } else if (camera instanceof OrthographicCamera) { const worldHeight = camera.top - camera.bottom; const worldUnitsPerPixel = worldHeight / size.y; halfSize = pixelSize * worldUnitsPerPixel / 2; } _vec30$3.copy(this.normalIndicator.position).addScaledVector(this.normalIndicatorTangent, halfSize).addScaledVector(this.normalIndicatorBitangent, -halfSize); _vec30$3.toArray(this.normalIndicatorBuffer, 0); _vec30$3.copy(this.normalIndicator.position).addScaledVector(this.normalIndicatorTangent, -halfSize).addScaledVector(this.normalIndicatorBitangent, -halfSize); _vec30$3.toArray(this.normalIndicatorBuffer, 3); _vec30$3.copy(this.normalIndicator.position).addScaledVector(this.normalIndicatorTangent, -halfSize).addScaledVector(this.normalIndicatorBitangent, -halfSize); _vec30$3.toArray(this.normalIndicatorBuffer, 6); _vec30$3.copy(this.normalIndicator.position).addScaledVector(this.normalIndicatorTangent, -halfSize).addScaledVector(this.normalIndicatorBitangent, halfSize); _vec30$3.toArray(this.normalIndicatorBuffer, 9); _vec30$3.copy(this.normalIndicator.position).addScaledVector(this.normalIndicatorTangent, -halfSize).addScaledVector(this.normalIndicatorBitangent, halfSize); _vec30$3.toArray(this.normalIndicatorBuffer, 12); _vec30$3.copy(this.normalIndicator.position).addScaledVector(this.normalIndicatorTangent, halfSize).addScaledVector(this.normalIndicatorBitangent, halfSize); _vec30$3.toArray(this.normalIndicatorBuffer, 15); _vec30$3.copy(this.normalIndicator.position).addScaledVector(this.normalIndicatorTangent, halfSize).addScaledVector(this.normalIndicatorBitangent, halfSize); _vec30$3.toArray(this.normalIndicatorBuffer, 18); _vec30$3.copy(this.normalIndicator.position).addScaledVector(this.normalIndicatorTangent, halfSize).addScaledVector(this.normalIndicatorBitangent, -halfSize); _vec30$3.toArray(this.normalIndicatorBuffer, 21); const posAttr = this.normalIndicator.geometry.attributes['instanceStart'].data; const posAttrLow = this.normalIndicator.geometry.attributes['instanceStartLow'].data; Geometry.DoubleToHighLowBuffer(this.normalIndicatorBuffer, posAttrLow.array, posAttr.array); posAttr.needsUpdate = true; posAttrLow.needsUpdate = true; this.normalIndicator.geometry.computeBoundingBox(); this.normalIndicator.geometry.computeBoundingSphere(); this.normalIndicator.computeLineDistances(); } updateNormalIndicator(position, normal) { this.normalIndicator.position.copy(position); this.normalIndicatorNormal.copy(normal); if (Math.abs(normal.x) > Math.abs(normal.z)) { this.normalIndicatorTangent.set(-normal.y, normal.x, 0); } else { this.normalIndicatorTangent.set(0, -normal.z, normal.y); } this.normalIndicatorTangent.normalize(); this.normalIndicatorBitangent.crossVectors(this.normalIndicatorNormal, this.normalIndicatorTangent).normalize(); } updatePoint(position) { this.point.position.copy(position); } updateLine(points) { const buffer = new Float64Array(points.length * 3); points.forEach((value, index) => { value.toArray(buffer, index * 3); }); const posAttr = this.line.geometry.attributes['instanceStart'].data; const posAttrLow = this.line.geometry.attributes['instanceStartLow'].data; Geometry.DoubleToHighLowBuffer(buffer, posAttrLow.array, posAttr.array); posAttr.needsUpdate = true; posAttr.updateRange = { offset: 0, count: points.length * 3 }; posAttrLow.needsUpdate = true; posAttrLow.updateRange = { offset: 0, count: points.length * 3 }; this.line.visible = true; this.line.geometry.instanceCount = points.length / 2; this.line.geometry.attributes['instanceStart'].needsUpdate = true; this.line.geometry.attributes['instanceEnd'].needsUpdate = true; this.line.geometry.attributes['instanceStartLow'].needsUpdate = true; this.line.geometry.attributes['instanceEndLow'].needsUpdate = true; this.line.geometry.computeBoundingBox(); this.line.geometry.computeBoundingSphere(); this.line.computeLineDistances(); } updateText(value, position, quaternion, scale) { const params = { text: value }; if (position) this.text.position.copy(position); if (quaternion) this.text.quaternion.copy(quaternion); if (scale) this.text.scale.copy(scale); this.text.updateMatrixWorld(true); return this.text.updateParams(params); } updateStyle() { this.normalIndicator.material = this.getNormalIndicatorMaterial(); this.line.material = this.getLineMaterial(); this.point.material = this.getPointMaterial(); void this.text.updateParams({ textColor: new Color(this._style.textColor) }); } raycast(raycaster, intersects) { /** We're not testing the line, points and disc because testing the label only * was explicitly requested. * However, I'll keep these commented because this last request could change in the future * and also to emphasize that raycasting agains the gizmo is not restricted to text object only * and that we *explictly* do not test any other components */ // this.disc.raycast(raycaster, intersects) // this.line.raycast(raycaster, intersects) // this.point.raycast(raycaster, intersects) this.text.raycast(raycaster, intersects); } updateClippingPlanes(planes) { var _a; this.normalIndicator.material.clippingPlanes = planes; this.point.material.clippingPlanes = planes; this.point.children[0].material.clippingPlanes = planes; this.line.material.clippingPlanes = planes; if (this.text.backgroundMesh) { this.text.backgroundMesh.material.clippingPlanes = planes; } if (this.text.textMesh) { ((_a = this.text.textMesh) === null || _a === void 0 ? void 0 : _a.material).clippingPlanes = planes; } } } const vec3Buff0$1 = new Vector3(); const vec3Buff1 = new Vector3(); const vec3Buff2 = new Vector3(); const vec3Buff3 = new Vector3(); const vec3Buff4 = new Vector3(); const vec3Buff5 = new Vector3(); class PerpendicularMeasurement extends Measurement { set isVisible(value) { var _a, _b; (_a = this.startGizmo) === null || _a === void 0 ? void 0 : _a.enable(value, value, value, value); (_b = this.endGizmo) === null || _b === void 0 ? void 0 : _b.enable(value, value, value, value); } get bounds() { return new Box3().expandByPoint(this.startPoint).expandByPoint(this.midPoint); } get measurementType() { return MeasurementType.PERPENDICULAR; } constructor() { super(); this.startGizmo = null; this.endGizmo = null; this.flipStartNormal = false; this.midPoint = new Vector3(); this.type = 'PerpendicularMeasurement'; /** Might be hard to believe but can be traced down to how our camera library works (or better yet how it doesn't) */ this.startPoint.set(NaN, NaN, NaN); this.startGizmo = new MeasurementPointGizmo(); this.endGizmo = new MeasurementPointGizmo({ dashedLine: true, lineOpacity: 0.25 }); this.startLineLength = 0.25; this.add(this.startGizmo); this.add(this.endGizmo); this.layers.set(ObjectLayers.MEASUREMENTS); } frameUpdate(camera, size, bounds) { var _a, _b; super.frameUpdate(camera, size, bounds); (_a = this.startGizmo) === null || _a === void 0 ? void 0 : _a.frameUpdate(camera, size); (_b = this.endGizmo) === null || _b === void 0 ? void 0 : _b.frameUpdate(camera, size); /** Not a fan of this but the camera library fails to tell us when zooming happens * so we need to update the screen space normal indicator each frame, otherwise it * won't look correct while zooming */ if (this._state === MeasurementState.DANGLING_START) { void this.update(); } } locationUpdated(point, normal) { if (this.state === MeasurementState.DANGLING_START) { this.startPoint.copy(point); this.startNormal.copy(normal); } else if (this.state === MeasurementState.DANGLING_END) { const dir = new Vector3().subVectors(point, this.startPoint).normalize(); const dot = dir.dot(this.startNormal); if (dot < 0) this.flipStartNormal = true;else this.flipStartNormal = false; this.endPoint.copy(point); this.endNormal.copy(normal); } } locationSelected() { if (this.state === MeasurementState.DANGLING_START) this.state = MeasurementState.DANGLING_END;else if (this.state === MeasurementState.DANGLING_END) this.state = MeasurementState.COMPLETE; } update() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; let ret; // Not sure this is needed anymore if (isNaN(this.startPoint.length())) return Promise.resolve(); if (!this.renderingCamera) return Promise.resolve(); (_a = this.startGizmo) === null || _a === void 0 ? void 0 : _a.updateNormalIndicator(this.startPoint, this.startNormal); (_b = this.startGizmo) === null || _b === void 0 ? void 0 : _b.updatePoint(this.startPoint); (_c = this.endGizmo) === null || _c === void 0 ? void 0 : _c.updateNormalIndicator(this.endPoint, this.endNormal); vec3Buff5.copy(this.startNormal); if (this.flipStartNormal) vec3Buff5.negate(); const startEndDist = this.startPoint.distanceTo(this.endPoint); const endStartDir = vec3Buff0$1.copy(this.startPoint).sub(this.endPoint).normalize(); let dot = vec3Buff5.dot(endStartDir); const angle = Math.acos(Math.min(Math.max(dot, -1), 1)); this.startLineLength = Math.abs(startEndDist * Math.cos(angle)); this.midPoint.copy(vec3Buff0$1.copy(this.startPoint).add(vec3Buff1.copy(vec3Buff5).multiplyScalar(this.startLineLength))); const textPos = vec3Buff0$1.copy(this.startPoint).add(this.midPoint).multiplyScalar(0.5); if (this._state === MeasurementState.DANGLING_START) { (_d = this.endGizmo) === null || _d === void 0 ? void 0 : _d.enable(false, false, false, false); } if (this._state === MeasurementState.DANGLING_END) { const endLineNormal = vec3Buff1.copy(this.midPoint).sub(this.endPoint).normalize(); this.endLineLength = this.midPoint.distanceTo(this.endPoint); dot = this.endNormal.dot(endLineNormal); const angle1 = Math.acos(Math.min(Math.max(dot, -1), 1)); const dist1 = this.endLineLength * Math.cos(angle1); const endLine3 = vec3Buff1.copy(this.endPoint).add(vec3Buff2.copy(this.endNormal).multiplyScalar(dist1)); const startLine0 = vec3Buff2.copy(this.startPoint); const startLine1 = vec3Buff3.copy(this.startPoint).add(vec3Buff4.copy(vec3Buff5).multiplyScalar(this.startLineLength)); (_e = this.startGizmo) === null || _e === void 0 ? void 0 : _e.updateLine([startLine0, startLine1]); const endLine0 = vec3Buff3.copy(this.endPoint); (_f = this.endGizmo) === null || _f === void 0 ? void 0 : _f.updateLine([endLine0, endLine3, endLine3, this.midPoint, this.midPoint, endLine0]); (_g = this.endGizmo) === null || _g === void 0 ? void 0 : _g.updatePoint(this.midPoint); this.value = this.midPoint.distanceTo(this.startPoint); if (this.startGizmo) ret = this.startGizmo.updateText(`${(this.value * getConversionFactor('m', this.units)).toFixed(this.precision)} ${this.units}`, textPos); (_h = this.endGizmo) === null || _h === void 0 ? void 0 : _h.enable(true, true, true, true); } if (this._state === MeasurementState.COMPLETE) { (_j = this.startGizmo) === null || _j === void 0 ? void 0 : _j.updateLine([this.startPoint, this.midPoint]); (_k = this.endGizmo) === null || _k === void 0 ? void 0 : _k.updatePoint(this.midPoint); ret = (_l = this.startGizmo) === null || _l === void 0 ? void 0 : _l.updateText(`${(this.value * getConversionFactor('m', this.units)).toFixed(this.precision)} ${this.units}`, textPos); (_m = this.startGizmo) === null || _m === void 0 ? void 0 : _m.enable(false, true, true, true); (_o = this.endGizmo) === null || _o === void 0 ? void 0 : _o.enable(false, false, true, false); } return ret !== null && ret !== void 0 ? ret : Promise.resolve(); } raycast(raycaster, intersects) { var _a, _b; const results = []; (_a = this.startGizmo) === null || _a === void 0 ? void 0 : _a.raycast(raycaster, results); (_b = this.endGizmo) === null || _b === void 0 ? void 0 : _b.raycast(raycaster, results); if (results.length) { intersects.push({ distance: results[0].distance, face: results[0].face, faceIndex: results[0].faceIndex, object: this, point: results[0].point, uv: results[0].uv }); } } highlight(value) { if (this.startGizmo) this.startGizmo.highlight = value; if (this.endGizmo) this.endGizmo.highlight = value; } updateClippingPlanes(planes) { if (this.startGizmo) this.startGizmo.updateClippingPlanes(planes); if (this.endGizmo) this.endGizmo.updateClippingPlanes(planes); } toMeasurementData() { const data = super.toMeasurementData(); data.innerPoints = [[this.midPoint.x, this.midPoint.y, this.midPoint.z]]; if (this.flipStartNormal) { vec3Buff0$1.copy(this.startNormal); vec3Buff0$1.negate(); data.startNormal = [vec3Buff0$1.x, vec3Buff0$1.y, vec3Buff0$1.z]; } return data; } fromMeasurementData(data) { super.fromMeasurementData(data); if (data.innerPoints) this.midPoint.set(data.innerPoints[0][0], data.innerPoints[0][1], data.innerPoints[0][2]); } } const vec3Buff0 = new Vector3(); class PointToPointMeasurement extends Measurement { set isVisible(value) { var _a, _b; (_a = this.startGizmo) === null || _a === void 0 ? void 0 : _a.enable(value, value, value, value); (_b = this.endGizmo) === null || _b === void 0 ? void 0 : _b.enable(value, value, value, value); } get measurementType() { return MeasurementType.POINTTOPOINT; } constructor() { super(); this.startGizmo = null; this.endGizmo = null; this.type = 'PointToPointMeasurement'; this.startGizmo = new MeasurementPointGizmo(); this.endGizmo = new MeasurementPointGizmo({ dashedLine: true, lineOpacity: 0.25 }); this.startLineLength = 0; this.add(this.startGizmo); this.add(this.endGizmo); this.layers.set(ObjectLayers.MEASUREMENTS); } frameUpdate(camera, size, bounds) { var _a, _b; super.frameUpdate(camera, size, bounds); (_a = this.startGizmo) === null || _a === void 0 ? void 0 : _a.frameUpdate(camera, size); (_b = this.endGizmo) === null || _b === void 0 ? void 0 : _b.frameUpdate(camera, size); } locationUpdated(point, normal) { if (this.state === MeasurementState.DANGLING_START) { this.startPoint.copy(point); this.startNormal.copy(normal); } else if (this.state === MeasurementState.DANGLING_END) { this.endPoint.copy(point); this.endNormal.copy(normal); } } locationSelected() { if (this.state === MeasurementState.DANGLING_START) this.state = MeasurementState.DANGLING_END;else if (this.state === MeasurementState.DANGLING_END) this.state = MeasurementState.COMPLETE; } update() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q; let ret; (_a = this.startGizmo) === null || _a === void 0 ? void 0 : _a.updateNormalIndicator(this.startPoint, this.startNormal); (_b = this.startGizmo) === null || _b === void 0 ? void 0 : _b.updatePoint(this.startPoint); (_c = this.endGizmo) === null || _c === void 0 ? void 0 : _c.updateNormalIndicator(this.endPoint, this.endNormal); this.startLineLength = this.startPoint.distanceTo(this.endPoint); this.value = this.startLineLength; const textPos = vec3Buff0.copy(this.startPoint).add(this.endPoint).multiplyScalar(0.5); if (this._state === MeasurementState.DANGLING_START) { (_d = this.startGizmo) === null || _d === void 0 ? void 0 : _d.enable(true, false, true, false); (_e = this.endGizmo) === null || _e === void 0 ? void 0 : _e.enable(false, false, false, false); } if (this._state === MeasurementState.DANGLING_END) { (_f = this.startGizmo) === null || _f === void 0 ? void 0 : _f.enable(true, true, true, true); (_g = this.endGizmo) === null || _g === void 0 ? void 0 : _g.enable(true, false, true, false); (_h = this.startGizmo) === null || _h === void 0 ? void 0 : _h.updateLine([this.startPoint, this.endPoint]); (_j = this.endGizmo) === null || _j === void 0 ? void 0 : _j.updatePoint(this.endPoint); ret = (_k = this.startGizmo) === null || _k === void 0 ? void 0 : _k.updateText(`${(this.value * getConversionFactor('m', this.units)).toFixed(this.precision)} ${this.units}`, textPos); } if (this._state === MeasurementState.COMPLETE) { (_l = this.startGizmo) === null || _l === void 0 ? void 0 : _l.enable(false, true, true, true); (_m = this.endGizmo) === null || _m === void 0 ? void 0 : _m.enable(false, false, true, false); (_o = this.startGizmo) === null || _o === void 0 ? void 0 : _o.updateLine([this.startPoint, this.endPoint]); (_p = this.endGizmo) === null || _p === void 0 ? void 0 : _p.updatePoint(this.endPoint); ret = (_q = this.startGizmo) === null || _q === void 0 ? void 0 : _q.updateText(`${(this.value * getConversionFactor('m', this.units)).toFixed(this.precision)} ${this.units}`, textPos); } return ret !== null && ret !== void 0 ? ret : Promise.resolve(); } raycast(raycaster, intersects) { var _a, _b; const results = []; (_a = this.startGizmo) === null || _a === void 0 ? void 0 : _a.raycast(raycaster, results); (_b = this.endGizmo) === null || _b === void 0 ? void 0 : _b.raycast(raycaster, results); if (results.length) { intersects.push({ distance: results[0].distance, face: results[0].face, faceIndex: results[0].faceIndex, object: this, point: results[0].point, uv: results[0].uv }); } } highlight(value) { if (this.startGizmo) this.startGizmo.highlight = value; if (this.endGizmo) this.endGizmo.highlight = value; } updateClippingPlanes(planes) { if (this.startGizmo) this.startGizmo.updateClippingPlanes(planes); if (this.endGizmo) this.endGizmo.updateClippingPlanes(planes); } } const _vec30$2 = new Vector3(); const _vec31$2 = new Vector3(); const _vec32$2 = new Vector3(); class AreaMeasurement extends Measurement { set isVisible(value) { this.pointGizmos.forEach(gizmo => { gizmo.enable(value, value, value, value); }); } get bounds() { const box = new Box3(); this.polygonPoints.forEach(point => box.expandByPoint(point)); return box; } get measurementType() { return MeasurementType.AREA; } constructor() { super(); /** We store all gizmos here */ this.pointGizmos = []; /** This stores the last touched point position and normal */ this.surfacePoint = new Vector3(); this.surfaceNormal = new Vector3(); /** The plane params defined by the first placed point * When serialized they will go in the measurements startPoint and startNormal */ this.planeOrigin = new Vector3(); this.planeNormal = new Vector3(); /** The location of the area text label */ this.labelPoint = new Vector3(); /** Various point list. A bit exhaustive, but safer */ this.pointIndex = 0; /** The selected points in 3D space */ this.points = []; /** The selected points projected on the measurement plane */ this.measuredPoints = []; /** The points defining the fill polygon. Also projected on the measurement plane */ this.polygonPoints = []; this.snapDistance = 10; this.type = 'AreaMeasurement'; /** We create the initial gizmo which will always display the area value text label*/ const gizmo = new MeasurementPointGizmo(); /** The gizmo's TextLabel will write `1` to the stencil buffer */ gizmo.text.backgroundMaterial.stencilWrite = true; gizmo.text.backgroundMaterial.depthWrite = false; gizmo.text.backgroundMaterial.depthTest = false; gizmo.text.backgroundMaterial.stencilFunc = AlwaysStencilFunc; gizmo.text.backgroundMaterial.stencilRef = 1; gizmo.text.backgroundMaterial.stencilZPass = ReplaceStencilOp; gizmo.enable(false, true, true, false); this.pointGizmos.push(gizmo); this.add(this.pointGizmos[0]); this.layers.set(ObjectLayers.MEASUREMENTS); /** The polygon will always contain the last touched point to allow real time updates */ this.polygonPoints.push(new Vector3()); } /** Frame */ frameUpdate(camera, size, bounds) { super.frameUpdate(camera, size, bounds); this.pointGizmos.forEach(gizmo => { gizmo.frameUpdate(camera, size); }); } /** Called whenver the last touched location updates */ locationUpdated(point, normal) { this.surfacePoint.copy(point); this.surfaceNormal.copy(normal); /** Update the polygon first point */ this.projectOnPlane(this.surfacePoint, this.planeOrigin, this.planeNormal, this.polygonPoints[0]); this.updateFillPolygon(this.polygonPoints); } /** Called whenver a location is selected for measuring*/ locationSelected() { /** If first point, determine the measurement plane */ if (this.pointIndex === 0) { this.planeOrigin.copy(this.surfacePoint); this.planeNormal.copy(this.surfaceNormal); this.startPoint.copy(this.surfacePoint); this.startNormal.copy(this.startNormal); } this.addPoint(this.surfacePoint); } /** Adds a point to the area measurement */ addPoint(point) { const measuredPoint = new Vector3().copy(point); if (this.pointIndex > 0) { measuredPoint.copy(this.projectOnPlane(point, this.planeOrigin, this.planeNormal)); /** Check to see if added location coincides with the first one. If yes, close the measurement */ const distanceToFirst = point.distanceTo(this.points[0]); if (distanceToFirst < 1e-10) { this._state = MeasurementState.COMPLETE; measuredPoint.copy(this.measuredPoints[0]); point.copy(this.points[0]); } } /** Add a new gizmo */ const gizmo = new MeasurementPointGizmo(); gizmo.enable(false, true, true, false); this.pointGizmos.push(gizmo); this.add(gizmo); /** Push the points */ this.points.push(point.clone()); this.measuredPoints.push(measuredPoint); this.polygonPoints.push(measuredPoint); this.pointIndex++; void this.update(); /** Update polygon and label if required */ if (this.points.length >= 2) { this.projectOnPlane(point, this.planeOrigin, this.planeNormal, this.polygonPoints[0]); this.updateFillPolygon(this.polygonPoints); this.updateLabelLocation(this.measuredPoints); } return this.points.length; } /** Removes point from the measurement */ removePoint() { if (this.pointIndex < 1) return 0; this.remove(this.pointGizmos.pop()); this.points.pop(); this.measuredPoints.pop(); this.polygonPoints.pop(); this.pointIndex--; void this.update(); this.updateFillPolygon(this.polygonPoints); this.updateLabelLocation(this.measuredPoints); return this.points.length; } /** Auto completes the measurement by joining with the first point */ autoFinish() { this.surfacePoint.copy(this.planeOrigin); this.surfaceNormal.copy(this.planeNormal); this.locationSelected(); } /** Area measurement's custom snap function. We snap to the first point by design */ snap(ndcPoint, _intersection, outPoint, outNormal) { if (this.pointIndex < 2) return false; /** First point NDC */ const firstPointSS = new Vector3().copy(this.points[0]).project(this.renderingCamera); firstPointSS.set((firstPointSS.x * 0.5 + 0.5) * this.renderingSize.x, (firstPointSS.y * -0.5 + 0.5) * this.renderingSize.y, 0); /** Mouse point NDC */ const mousePointSS = new Vector3((ndcPoint.x * 0.5 + 0.5) * this.renderingSize.x, (ndcPoint.y * -0.5 + 0.5) * this.renderingSize.y, 0); const SSDistance = firstPointSS.distanceTo(mousePointSS); /** If distance smaller than threshold, snap */ if (SSDistance < this.snapDistance * window.devicePixelRatio) { outPoint.copy(this.points[0]); outNormal.copy(this.planeNormal); return true; } return false; } /** Updates the gizmo components based on it's state and values */ update() { let ret = Promise.resolve(); this.pointGizmos[this.pointIndex].updateNormalIndicator(this.surfacePoint, this.surfaceNormal); this.pointGizmos[this.pointIndex].updatePoint(this.surfacePoint); if (this.pointIndex === 0) { this.pointGizmos[this.pointIndex].enable(true, true, true, false); return ret; } const currentPoint = this.surfacePoint; const prevPoint = this.points[this.pointIndex - 1]; this.pointGizmos[this.pointIndex].updateLine([prevPoint, currentPoint]); this.pointGizmos[this.pointIndex].enable(true, true, true, false); this.pointGizmos[this.pointIndex - 1].enable(false, true, true, false); if (this.measuredPoints.length > 1) { this.value = this.shoelaceArea3D(this.polygonPoints, this.planeNormal); ret = this.pointGizmos[0].updateText(`${(this.value * getConversionFactor('m', this.units)).toFixed(this.precision)} ${this.units}²`, this.labelPoint); this.pointGizmos[0].enable(false, true, true, true); } if (this._state === MeasurementState.COMPLETE) { for (let k = 0; k < this.points.length - 1; k++) { this.pointGizmos[k].updatePoint(this.points[k]); this.pointGizmos[k].updateLine([this.points[k], this.points[k + 1]]); this.pointGizmos[k].enable(false, true, true, false); } this.pointGizmos[this.points.length - 1].updateLine([this.points[this.points.length - 1], this.points[0]]); /** There is always an extra gizmo, so gizmo count is point count + 1 */ this.pointGizmos[this.points.length].enable(false, false, false, false); this.pointGizmos[this.points.length - 1].enable(false, false, false, false); this.pointGizmos[0].enable(false, true, true, true); /** We force a sync so that we get correct timing on text finshing */ this.pointGizmos[0].text._needsSync = true; ret = this.pointGizmos[0].updateText(`${(this.value * getConversionFactor('m', this.units)).toFixed(this.precision)} ${this.units}²`, this.labelPoint); } return ret; } /** Updates the area label location using the polyong's pole of innaccessibility * We do this to avoid having the label outside of the polygin in case of concave polygons * It works great for concave polygons, but not so great for convex regular ones */ updateLabelLocation(points) { /** We place points on the XY plane since the library requires us to */ const q = new Quaternion().setFromUnitVectors(this.planeNormal, new Vector3(0, 0, 1)); const invQ = new Quaternion().copy(q).invert(); const vector = new Vector3(); const flatPoints = points.map(p => { vector.copy(p); vector.applyQuaternion(q); return [vector.x, vector.y]; }); // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore const p = polylabel([flatPoints], 0.1); this.labelPoint.set(p[0], p[1], this.planeOrigin.z); /** We rotate back */ this.labelPoint.applyQuaternion(invQ); this.projectOnPlane(this.labelPoint, this.planeOrigin, this.planeNormal, this.labelPoint); } /** Updates the measured polygon's geometry */ updateFillPolygon(points) { if (!this.fillPolygon) { const material = new SpeckleBasicMaterial({ color: 0x047efb, side: DoubleSide, opacity: 0.5, transparent: true, toneMapped: false }); material.color.convertSRGBToLinear(); /** The transparent area plane will only draw were the stencil buffer is **NOT** `1`, effectively not overdrawing the text label */ material.depthWrite = false; material.depthTest = false; material.stencilWrite = true; material.stencilFunc = NotEqualStencilFunc; material.stencilRef = 1; material.stencilZPass = KeepStencilOp; this.fillPolygon = new Mesh(new BufferGeometry(), material); this.fillPolygon.renderOrder = 100; this.fillPolygon.frustumCulled = false; this.fillPolygon.layers.set(ObjectLayers.MEASUREMENTS); this.add(this.fillPolygon); } const geometry = this.fillPolygon.geometry; const position = geometry.getAttribute('position'); const index = geometry.getIndex(); if (points.length < 3) { this.fillPolygon.visible = false; return; } this.fillPolygon.visible = true; const [axis1, axis2] = this.chooseProjectionAxes(this.planeNormal); const projectedPoints = points.map( // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore p => new Vector2(p[axis1], p[axis2])); const indices = Geometry.triangulatePolygon(projectedPoints); if (!position || position.count !== points.length) { const buffer = new Float32Array(points.length * 3); points.forEach((point, index) => point.toArray(buffer, index * 3)); const posAttribute = new BufferAttribute(buffer, 3); posAttribute.setUsage(DynamicDrawUsage); geometry.setAttribute('position', posAttribute); } else { points.forEach((point, index) => point.toArray(position.array, index * 3)); position.needsUpdate = true; } if (!index || index.count !== indices.length) { geometry.setIndex(new Uint16BufferAttribute(indices, 1)); } else { index.array.set(indices, 0); index.needsUpdate = true; } geometry.computeBoundingBox(); } /** Measurement's custom picking. We don't test the polygon when casting */ raycast(raycaster, intersects) { const results = []; this.pointGizmos.forEach(gizmo => { gizmo.raycast(raycaster, results); }); if (results.length) { intersects.push({ distance: results[0].distance, face: results[0].face, faceIndex: results[0].faceIndex, object: this, point: results[0].point, uv: results[0].uv }); } } highlight(value) { this.pointGizmos.forEach(gizmo => { gizmo.highlight = value; }); } updateClippingPlanes(planes) { this.pointGizmos.forEach(gizmo => { gizmo.updateClippingPlanes(planes); }); this.fillPolygon.material.clippingPlanes = planes; } /** Had to make my own. Three's Hesse normal form trips me up */ projectOnPlane(point, planeOrigin, planeNormal, destination) { const p = _vec30$2.copy(point); const o = _vec31$2.copy(planeOrigin); const n = _vec32$2.copy(planeNormal).normalize(); const v = p.sub(o); const dist = v.dot(n); return (destination ? destination : new Vector3()).copy(point).sub(n.multiplyScalar(dist)); } /** Selects the vector components to use based on the measurement plane. * Don't really like it, but it works */ chooseProjectionAxes(normal) { const absNormal = normal.clone().set(Math.abs(normal.x), Math.abs(normal.y), Math.abs(normal.z)); if (absNormal.z >= absNormal.x && absNormal.z >= absNormal.y) { return ['x', 'y', 'z']; // Project to XY plane } else if (absNormal.y >= absNormal.x && absNormal.y >= absNormal.z) { return ['x', 'z', 'y']; // Project to XZ plane } else { return ['y', 'z', 'x']; // Project to YZ plane } } /** Area calculation */ shoelaceArea(points) { const n = points.length; if (n < 3) return 0; // At least 3 points needed for a polygon let area = 0; for (let i = 0; i < n; i++) { const j = (i + 1) % n; // Wrap around for the last point area += points[i].x * points[j].y - points[j].x * points[i].y; } return Math.abs(area) / 2; } shoelaceArea3D(points, normal) { const [axis1, axis2] = this.chooseProjectionAxes(normal); // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore const projectedPoints = points.map(p => new Vector2(p[axis1], p[axis2])); return this.shoelaceArea(projectedPoints); } toMeasurementData() { const data = super.toMeasurementData(); data.startPoint = [this.planeOrigin.x, this.planeOrigin.y, this.planeOrigin.z]; data.startNormal = [this.planeNormal.x, this.planeNormal.y, this.planeNormal.z]; data.innerPoints = this.points.map(value => [value.x, value.y, value.z]); return data; } fromMeasurementData(data) { var _a; super.fromMeasurementData(data); this.planeOrigin.fromArray(data.startPoint); this.planeNormal.fromArray(data.startNormal); if (data.innerPoints) { for (let k = 0; k < ((_a = data.innerPoints) === null || _a === void 0 ? void 0 : _a.length); k++) { this.addPoint(new Vector3().fromArray(data.innerPoints[k])); } } } } const _vec40 = new Vector4(); const _vec41 = new Vector4(); const _vec42 = new Vector4(); const _vec43 = new Vector4(); const _mat40 = new Matrix4(); const _mat41 = new Matrix4(); class PointMeasurement extends Measurement { set isVisible(value) { this.gizmo.visible = value; this.xLabel.visible = value; this.yLabel.visible = value; this.zLabel.visible = value; } get measurementType() { return MeasurementType.POINT; } constructor() { super(); this.xLabelPosition = new Vector3(); this.yLabelPosition = new Vector3(); this.zLabelPosition = new Vector3(); this.pixelsOffX = 50 * window.devicePixelRatio; this.pixelsOffY = 25 * window.devicePixelRatio; this.type = 'PointMeasurement'; this.gizmo = new MeasurementPointGizmo(); this.add(this.gizmo); this.xLabel = new TextLabel({ text: 'sample', textColor: new Color(0xffffff), fontSize: 11, billboard: 'screen', anchorX: 'left', anchorY: 'middle', backgroundColor: new Color(0xfb0404), backgroundMargins: new Vector2(30, 10), backgroundCornerRadius: 0.3, objectLayer: ObjectLayers.MEASUREMENTS }); this.xLabel.name = 'XLabel'; this.xLabel.material.depthTest = false; this.add(this.xLabel); this.yLabel = new TextLabel({ text: 'sample', textColor: new Color(0xffffff), fontSize: 11, anchorX: 'left', anchorY: 'middle', billboard: 'screen', backgroundColor: new Color(0x03c903), backgroundMargins: new Vector2(30, 10), backgroundCornerRadius: 0.3, objectLayer: ObjectLayers.MEASUREMENTS }); this.yLabel.name = 'YLabel'; this.yLabel.material.depthTest = false; this.add(this.yLabel); this.zLabel = new TextLabel({ text: 'sample', textColor: new Color(0xffffff), fontSize: 11, billboard: 'screen', anchorX: 'left', anchorY: 'middle', backgroundColor: new Color(0x047efb), backgroundMargins: new Vector2(30, 10), backgroundCornerRadius: 0.3, objectLayer: ObjectLayers.MEASUREMENTS }); this.zLabel.name = 'ZLabel'; this.zLabel.material.depthTest = false; this.add(this.zLabel); this.layers.set(ObjectLayers.MEASUREMENTS); } frameUpdate(camera, size, bounds) { super.frameUpdate(camera, size, bounds); this.updateLabelPositions(); this.xLabel.position.copy(this.xLabelPosition); this.yLabel.position.copy(this.yLabelPosition); this.zLabel.position.copy(this.zLabelPosition); this.gizmo.frameUpdate(camera, size); } locationUpdated(point, normal) { this.startPoint.copy(point); this.startNormal.copy(normal); } locationSelected() { if (this.state === MeasurementState.DANGLING_START) this.state = MeasurementState.COMPLETE; } updateLabelPositions() { const camera = this.renderingCamera; if (!camera) return; const ndcPos = _vec40.set(this.startPoint.x, this.startPoint.y, this.startPoint.z, 1); ndcPos.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix); const perspective = ndcPos.w; ndcPos.multiplyScalar(1 / perspective); const xOff = this.pixelsOffX / this.renderingSize.x * 2; const yOff = this.pixelsOffY / this.renderingSize.y * 2; const xPos = _vec41.set(ndcPos.x + xOff, ndcPos.y + yOff, ndcPos.z, 1); const yPos = _vec42.set(ndcPos.x + xOff, ndcPos.y, ndcPos.z, 1); const zPos = _vec43.set(ndcPos.x + xOff, ndcPos.y - yOff, ndcPos.z, 1); const invProjection = _mat40.copy(camera.projectionMatrix).invert(); const invView = _mat41.copy(camera.matrixWorldInverse).invert(); xPos.multiplyScalar(perspective); xPos.applyMatrix4(invProjection); xPos.applyMatrix4(invView); yPos.multiplyScalar(perspective); yPos.applyMatrix4(invProjection); yPos.applyMatrix4(invView); zPos.multiplyScalar(perspective); zPos.applyMatrix4(invProjection); zPos.applyMatrix4(invView); this.xLabelPosition.set(xPos.x, xPos.y, xPos.z); this.yLabelPosition.set(yPos.x, yPos.y, yPos.z); this.zLabelPosition.set(zPos.x, zPos.y, zPos.z); } async update() { this.xLabel.position.copy(this.xLabelPosition); this.yLabel.position.copy(this.yLabelPosition); this.zLabel.position.copy(this.zLabelPosition); const xP = this.xLabel.updateParams({ text: `X : ${(this.startPoint.x * getConversionFactor('m', this.units)).toFixed(this.precision)} ${this.units}` }); const yP = this.yLabel.updateParams({ text: `Y : ${(this.startPoint.y * getConversionFactor('m', this.units)).toFixed(this.precision)} ${this.units}` }); const zP = this.zLabel.updateParams({ text: `Z : ${(this.startPoint.z * getConversionFactor('m', this.units)).toFixed(this.precision)} ${this.units}` }); this.gizmo.updateNormalIndicator(this.startPoint, this.startNormal); this.gizmo.updatePoint(this.startPoint); this.gizmo.enable(true, false, true, false); this.value = this.startPoint.length(); await Promise.all([xP, yP, zP]); } raycast(raycaster, intersects) { const results = []; this.gizmo.raycast(raycaster, results); this.xLabel.raycast(raycaster, results); this.yLabel.raycast(raycaster, results); this.zLabel.raycast(raycaster, results); if (results.length) { intersects.push({ distance: results[0].distance, face: results[0].face, faceIndex: results[0].faceIndex, object: this, point: results[0].point, uv: results[0].uv }); } } highlight(value) { if (this.gizmo) this.gizmo.highlight = value; if (value) { this.xLabel.textMesh.material.color.copy(new Color(0xff0000)); this.yLabel.textMesh.material.color.copy(new Color(0xff0000)); this.zLabel.textMesh.material.color.copy(new Color(0xff0000)); } else { this.xLabel.textMesh.material.color.copy(new Color(0xffffff)); this.yLabel.textMesh.material.color.copy(new Color(0xffffff)); this.zLabel.textMesh.material.color.copy(new Color(0xffffff)); } } updateClippingPlanes(planes) { var _a, _b, _c; this.gizmo.updateClippingPlanes(planes); if (this.xLabel.backgroundMesh) { this.xLabel.backgroundMesh.material.clippingPlanes = planes; } if (this.xLabel.textMesh) { ((_a = this.xLabel.textMesh) === null || _a === void 0 ? void 0 : _a.material).clippingPlanes = planes; } if (this.yLabel.backgroundMesh) { this.yLabel.backgroundMesh.material.clippingPlanes = planes; } if (this.yLabel.textMesh) { ((_b = this.yLabel.textMesh) === null || _b === void 0 ? void 0 : _b.material).clippingPlanes = planes; } if (this.zLabel.backgroundMesh) { this.zLabel.backgroundMesh.material.clippingPlanes = planes; } if (this.zLabel.textMesh) { ((_c = this.zLabel.textMesh) === null || _c === void 0 ? void 0 : _c.material).clippingPlanes = planes; } } } var MeasurementEvent; (function (MeasurementEvent) { MeasurementEvent["CountChanged"] = "measurement-count-changed"; MeasurementEvent["MeasurementsChanged"] = "measurements-changed"; })(MeasurementEvent || (MeasurementEvent = {})); const DefaultMeasurementsOptions = { visible: true, type: MeasurementType.POINT, vertexSnap: true, units: 'm', precision: 2, chain: false }; class MeasurementsExtension extends Extension { get inject() { return [CameraController]; } get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; if (this._activeMeasurement) { this._activeMeasurement.isVisible = value; void this._activeMeasurement.update(); if (!value) this.cancelMeasurement(); } this.viewer.requestRender(); } get options() { return this._options; } set options(options) { const resetMeasurement = this._options.type !== options.type && this._activeMeasurement && this._activeMeasurement.state === MeasurementState.DANGLING_START; Object.assign(this._options, options); if (resetMeasurement) { this.cancelMeasurement(); } this.applyOptions(); } get selectedMeasurement() { return this._selectedMeasurement; } get activeMeasurement() { return this._activeMeasurement; } get measurementCount() { return this._measurements.length; } get mesurements() { return this._measurements; } emitMeasurementCountChanged() { this.emit(MeasurementEvent.CountChanged, this._measurements.length); this.emit(MeasurementEvent.MeasurementsChanged, this._measurements); } constructor(viewer, cameraProvider) { super(viewer); this.cameraProvider = cameraProvider; this._measurements = []; this._activeMeasurement = null; this._selectedMeasurement = null; this._options = Object.assign({}, DefaultMeasurementsOptions); this._frameLock = false; this._paused = false; this._sceneHit = false; this.pointBuff = new Vector3(); this.normalBuff = new Vector3(); this.screenBuff0 = new Vector2(); this.screenBuff1 = new Vector2(); this.renderer = viewer.getRenderer(); this.raycaster = new Raycaster(); this.raycaster.layers.enable(ObjectLayers.MEASUREMENTS); this.renderer.input.on(InputEvent.PointerMove, this.onPointerMove.bind(this)); this.renderer.input.on(InputEvent.Click, this.onPointerClick.bind(this)); this.renderer.input.on(InputEvent.DoubleClick, this.onPointerDoubleClick.bind(this)); } on(eventType, listener) { super.on(eventType, listener); } onLateUpdate() { const camera = this.renderer.renderingCamera; if (!camera) return; this._frameLock = false; this.renderer.renderer.getDrawingBufferSize(this.screenBuff0); if (this._activeMeasurement) this._enabled && this._activeMeasurement.frameUpdate(camera, this.screenBuff0, this.renderer.sceneBox); this._measurements.forEach(value => { (this._enabled || value instanceof PointMeasurement) && value.frameUpdate(camera, this.screenBuff0, this.renderer.sceneBox); }); this._enabled && this.updateClippingPlanes(this.renderer.clippingPlanes); } onResize() { this.renderer.renderer.getDrawingBufferSize(this.screenBuff0); } onPointerMove(data) { var _a; if (!this._enabled || this._paused) return; const camera = this.renderer.renderingCamera; if (!camera) return; if (this._frameLock) { return; } let result = this.renderer.intersections.intersect(this.renderer.scene, camera, data, ObjectLayers.STREAM_CONTENT_MESH, true, this.renderer.clippingVolume) || []; result = result.filter(value => { const material = value.object.getBatchObjectMaterial(value.batchObject); return material && !(material instanceof SpeckleGhostMaterial) && material.visible; }); if (!result.length) { this._sceneHit = false; return; } this.pointBuff.copy(result[0].point); this.normalBuff.copy(result[0].face.normal); let vertexSnap = this._options.vertexSnap; if (this._activeMeasurement && this._activeMeasurement.snap) vertexSnap = !this._activeMeasurement.snap(data, result[0], this.pointBuff, this.normalBuff); if (vertexSnap) { this.snap(result[0], this.pointBuff, this.normalBuff); } if (!this._activeMeasurement) { this._activeMeasurement = this.startMeasurement(); this._activeMeasurement.isVisible = true; } (_a = this.activeMeasurement) === null || _a === void 0 ? void 0 : _a.locationUpdated(this.pointBuff, this.normalBuff); void this._activeMeasurement.update().then(() => { this.viewer.requestRender(); }); this._frameLock = true; this._sceneHit = true; // console.log('Time -> ', performance.now() - start) } onPointerClick(data) { if (!this._enabled) return; const measurement = this.pickMeasurement(data); if (measurement) { this.selectMeasurement(measurement, true); return; } if (data.event.button === 2) { if (this._activeMeasurement && this._activeMeasurement instanceof AreaMeasurement) { const count = this._activeMeasurement.removePoint(); if (count === 0) this.cancelMeasurement(); } else this.cancelMeasurement(); return; } /** This will not work for iOS < 13 (pre-2019) (allegedly) */ /** Because there is no hovering with touch input, we simulate a hover when tapping */ if (data.event.pointerType === 'touch') { this.onPointerMove(data); } if (!this._activeMeasurement) return; if (!this._sceneHit) return; this._activeMeasurement.locationSelected(); if (this._activeMeasurement.state === MeasurementState.COMPLETE) { this.finishMeasurement(); } } onPointerDoubleClick(data) { const measurement = this.pickMeasurement(data); if (measurement) { this.cameraProvider.setCameraView(measurement.bounds, true); return; } if (this._options.type === MeasurementType.PERPENDICULAR) { this.autoLazerMeasure(data); return; } if (this._options.type === MeasurementType.AREA) { this._activeMeasurement.autoFinish(); this.finishMeasurement(); } } autoLazerMeasure(data) { if (!this._activeMeasurement) return; if (!this.renderer.renderingCamera) return; this._activeMeasurement.state = MeasurementState.DANGLING_START; let result = this.renderer.intersections.intersect(this.renderer.scene, this.renderer.renderingCamera, data, ObjectLayers.STREAM_CONTENT_MESH, true, this.renderer.clippingVolume) || []; result = result.filter(value => { const material = value.object.getBatchObjectMaterial(value.batchObject); return material && !(material instanceof SpeckleGhostMaterial) && material.visible; }); if (!result.length) return; const startPoint = new Vector3().copy(result[0].point); const startNormal = new Vector3().copy(result[0].face.normal); const offsetPoint = new Vector3().copy(startPoint).add(new Vector3().copy(startNormal).multiplyScalar(0.000001)); let perpResult = this.renderer.intersections.intersectRay(this.renderer.scene, this.renderer.renderingCamera, new Ray(offsetPoint, startNormal), ObjectLayers.STREAM_CONTENT_MESH, true, this.renderer.clippingVolume) || []; perpResult = perpResult.filter(value => { const material = value.object.getBatchObjectMaterial(value.batchObject); return material && !(material instanceof SpeckleGhostMaterial) && material.visible; }); if (!perpResult.length) { this.flashMeasurement(); return; } this._activeMeasurement.startPoint.copy(startPoint); this._activeMeasurement.startNormal.copy(startNormal); this._activeMeasurement.endPoint.copy(perpResult[0].point); this._activeMeasurement.endNormal.copy(perpResult[0].face.normal); this._activeMeasurement.state = MeasurementState.DANGLING_END; void this._activeMeasurement.update().then(() => { this.finishMeasurement(); }); } startMeasurement() { let measurement; if (this._options.type === MeasurementType.PERPENDICULAR) measurement = new PerpendicularMeasurement();else if (this._options.type === MeasurementType.POINTTOPOINT) measurement = new PointToPointMeasurement();else if (this._options.type === MeasurementType.AREA) measurement = new AreaMeasurement();else if (this._options.type === MeasurementType.POINT) measurement = new PointMeasurement();else throw new Error('Unsupported measurement type!'); measurement.state = MeasurementState.DANGLING_START; measurement.units = this._options.units !== undefined ? this._options.units : DefaultMeasurementsOptions.units; measurement.precision = this._options.precision !== undefined ? this._options.precision : DefaultMeasurementsOptions.precision; measurement.frameUpdate(this.renderer.renderingCamera, this.screenBuff0, this.renderer.sceneBox); this.renderer.scene.add(measurement); return measurement; } cancelMeasurement() { if (this._activeMeasurement) this.renderer.scene.remove(this._activeMeasurement); this._activeMeasurement = null; this.viewer.requestRender(); } finishMeasurement() { if (!this._activeMeasurement) return; void this._activeMeasurement.update(); this.pushMeasurement(this._activeMeasurement); if (this._options.chain) { const startPoint = new Vector3(); const startNormal = new Vector3(); let oldMeasurement; switch (this._options.type) { case MeasurementType.PERPENDICULAR: oldMeasurement = this._activeMeasurement; startPoint.copy(oldMeasurement.midPoint); startNormal.copy(oldMeasurement.startNormal); break; default: oldMeasurement = this._activeMeasurement; startPoint.copy(this.pointBuff); startNormal.copy(this.normalBuff); break; } this._activeMeasurement = this.startMeasurement(); this._activeMeasurement.locationUpdated(startPoint, startNormal); this._activeMeasurement.locationSelected(); } else this._activeMeasurement = null; this.viewer.requestRender(); } pushMeasurement(measurement) { if (measurement.value > 0) { this._measurements.push(measurement); this.emitMeasurementCountChanged(); } else { this.renderer.scene.remove(measurement); Logger.error('Ignoring zero value measurement!'); } } findMeasurementFromData(measurementData) { return this._measurements.find(measurement => measurement.measurementId === measurementData.uuid); } removeMeasurement(measurementData) { const targetMeasurement = measurementData ? this.findMeasurementFromData(measurementData) : this._selectedMeasurement; if (targetMeasurement) { this._measurements.splice(this._measurements.indexOf(targetMeasurement), 1); this.renderer.scene.remove(targetMeasurement); this._selectedMeasurement = null; this.emitMeasurementCountChanged(); this.viewer.requestRender(); } else { this.cancelMeasurement(); } } /** * Idempotent way of setting measurements */ setMeasurements(measurements) { if (!measurements.length) { if (this._measurements.length) { this.clearMeasurements(); } if (this._activeMeasurement) { this.cancelMeasurement(); } return; } const currentMeasurements = this._measurements.map(m => m.toMeasurementData()); const removableMeasurements = differenceBy(currentMeasurements, measurements, m => m.uuid); for (const removableMeasurement of removableMeasurements) { this.removeMeasurement(removableMeasurement); } for (const measurementData of measurements) { if (!this.findMeasurementFromData(measurementData)) { this.addMeasurement(measurementData); } } } clearMeasurements() { this.removeMeasurement(); this._measurements.forEach(measurement => { this.renderer.scene.remove(measurement); }); this._measurements = []; this.emitMeasurementCountChanged(); this.viewer.requestRender(); } flashMeasurement() { let flashCount = 0; const maxFlashCount = 5; const handle = setInterval(() => { if (this._activeMeasurement) { this._activeMeasurement.highlight(Boolean(flashCount++ % 2)); if (flashCount >= maxFlashCount) { clearInterval(handle); } this.viewer.requestRender(); } }, 100); } pickMeasurement(data) { var _a; if (!this.renderer.renderingCamera) return null; this._measurements.forEach(value => { value.highlight(false); }); this.raycaster.setFromCamera(data, this.renderer.renderingCamera); const res = this.raycaster.intersectObjects(this._measurements, false); return (_a = res[0]) === null || _a === void 0 ? void 0 : _a.object; } selectMeasurement(measurement, value) { this.cancelMeasurement(); measurement.highlight(value); this._selectedMeasurement = measurement; } snap(intersection, outPoint, outNormal) { if (!this.renderer.renderingCamera) return; const v0 = intersection.batchObject.accelerationStructure.getVertexAtIndex(intersection.face.a).project(this.renderer.renderingCamera); const v1 = intersection.batchObject.accelerationStructure.getVertexAtIndex(intersection.face.b).project(this.renderer.renderingCamera); const v2 = intersection.batchObject.accelerationStructure.getVertexAtIndex(intersection.face.c).project(this.renderer.renderingCamera); const projectedIntersection = intersection.point.project(this.renderer.renderingCamera); const tri = [v0, v1, v2]; tri.sort((a, b) => { return projectedIntersection.distanceTo(a) - projectedIntersection.distanceTo(b); }); const closestScreen = this.renderer.NDCToScreen(tri[0].x, tri[0].y); const intersectionScreen = this.renderer.NDCToScreen(projectedIntersection.x, projectedIntersection.y); this.screenBuff0.set(closestScreen.x, closestScreen.y); this.screenBuff1.set(intersectionScreen.x, intersectionScreen.y); const unprojectedPoint = tri[0].unproject(this.renderer.renderingCamera); if (this.screenBuff0.distanceTo(this.screenBuff1) < 10 * window.devicePixelRatio) { outPoint.copy(unprojectedPoint); outNormal.copy(intersection.face.normal); } } updateClippingPlanes(planes) { this._measurements.forEach(value => { value.updateClippingPlanes(planes); }); } applyOptions() { const all = [this._activeMeasurement, ...this._measurements]; const updatePromises = []; all.forEach(value => { if (value) { value.units = this._options.units !== undefined ? this._options.units : DefaultMeasurementsOptions.units; value.precision = this._options.precision !== undefined ? this._options.precision : DefaultMeasurementsOptions.precision; updatePromises.push(value.update()); } }); this.viewer.getRenderer().enableLayers([ObjectLayers.MEASUREMENTS], this._options.visible); if (this._options.visible) this.raycaster.layers.enable(ObjectLayers.MEASUREMENTS);else this.raycaster.layers.disable(ObjectLayers.MEASUREMENTS); void Promise.all(updatePromises).then(() => { this.viewer.requestRender(); }); } addMeasurement(measurementData) { const cacheOptions = this._options; this._options.type = measurementData.type; this._options.chain = false; this._options.vertexSnap = false; const measurement = this.startMeasurement(); measurement.fromMeasurementData(measurementData); measurement.isVisible = true; void measurement.update().then(() => { this.viewer.requestRender(); }); this.pushMeasurement(measurement); this._options.type = cacheOptions.type; this._options.chain = cacheOptions.chain; this._options.vertexSnap = cacheOptions.vertexSnap; } toMeasurementData() { return this._measurements.map(val => val.toMeasurementData()); } } var SelectionExtensionEvent; (function (SelectionExtensionEvent) { SelectionExtensionEvent["SelectionChanged"] = "selection-changed"; })(SelectionExtensionEvent || (SelectionExtensionEvent = {})); const DefaultSelectionExtensionOptions = { selectionMaterialData: { id: MathUtils.generateUUID(), color: 0x047efb, emissive: 0x0, opacity: 1, roughness: 1, metalness: 0, vertexColors: false, lineWeight: 1, stencilOutlines: StencilOutlineType.OVERLAY, pointSize: 4 }, windowSelection: { enabled: false, modifierKey: 'alt', minDragPixels: 6, selectionMode: 'contains' } // hoverMaterialData: { // id: generateUUID(), // color: 0xff7377, // opacity: 1, // roughness: 1, // metalness: 0, // vertexColors: false, // lineWeight: 1, // stencilOutlines: StencilOutlineType.OVERLAY, // pointSize: 4 // } }; class SelectionExtension extends Extension { get inject() { return [CameraController]; } get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; } get options() { return this._options; } set options(value) { var _a, _b, _c, _d, _e, _f, _g, _h; this._options = value; this.selectionMaterialData = Object.assign({}, this.options.selectionMaterialData); this.windowSelectionOptions = { enabled: (_b = (_a = value.windowSelection) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : false, modifierKey: (_d = (_c = value.windowSelection) === null || _c === void 0 ? void 0 : _c.modifierKey) !== null && _d !== void 0 ? _d : 'alt', minDragPixels: (_f = (_e = value.windowSelection) === null || _e === void 0 ? void 0 : _e.minDragPixels) !== null && _f !== void 0 ? _f : 6, selectionMode: (_h = (_g = value.windowSelection) === null || _g === void 0 ? void 0 : _g.selectionMode) !== null && _h !== void 0 ? _h : 'contains' }; /** Transparent selection */ this.transparentSelectionMaterialData = Object.assign({}, this.options.selectionMaterialData); this.transparentSelectionMaterialData.opacity = 0.5; /** Hidden selection */ this.hiddenSelectionMaterialData = Object.assign({}, this.options.selectionMaterialData); this.hiddenSelectionMaterialData.stencilOutlines = StencilOutlineType.OUTLINE_ONLY; /** Opaque hover */ this.hoverMaterialData = Object.assign({}, this.options.hoverMaterialData); /** Transparent hover */ this.transparentHoverMaterialData = Object.assign({}, this.options.hoverMaterialData); this.transparentHoverMaterialData.opacity = 0.5; } constructor(viewer, cameraProvider) { super(viewer); this.cameraProvider = cameraProvider; this.selectedNodes = []; this.selectionRvs = {}; this.selectionMaterials = {}; this.windowSelectionStart = null; this.windowSelectionEnd = null; this.windowSelectionElement = null; this.windowSelectionDragging = false; this.suppressNextClick = false; this.windowSelectionLastStats = null; this.windowSelectionTmpPoint = new Vector3(); this._enabled = true; this.viewer.on(ViewerEvent.ObjectClicked, this.onObjectClicked.bind(this)); this.viewer.on(ViewerEvent.ObjectDoubleClicked, this.onObjectDoubleClick.bind(this)); this.viewer.getRenderer().input.on(InputEvent.PointerDown, this.onPointerDown.bind(this)); this.viewer.getRenderer().input.on(InputEvent.PointerMove, this.onPointerMove.bind(this)); this.viewer.getRenderer().input.on(InputEvent.PointerUp, this.onPointerUp.bind(this)); this.viewer.getRenderer().input.on(InputEvent.PointerCancel, this.onPointerCancel.bind(this)); this.options = DefaultSelectionExtensionOptions; } getSelectedObjects() { return this.selectedNodes.map(v => v.model.raw); } getSelectedNodes() { return this.selectedNodes; } getSelectedObjectIds() { return this.selectedNodes.map(node => node.model.id); } getSelectedRenderViewGuids() { const renderViewGuids = new Set(); this.selectedNodes.forEach(node => { this.viewer.getWorldTree().getRenderTree().getRenderViewsForNode(node).forEach(rv => renderViewGuids.add(rv.guid)); }); return [...renderViewGuids]; } on(eventType, listener) { super.on(eventType, listener); } selectObjects(ids, multiSelect = false) { if (!this._enabled) return; if (!multiSelect) { this.selectedNodes = []; } const selectedNodeIds = new Set(this.selectedNodes.map(node => this.getNodeSelectionKey(node))); for (let k = 0; k < ids.length; k++) { const foundNodes = this.viewer.getWorldTree().findId(ids[k]); if (foundNodes) foundNodes.forEach(node => { const nodeSelectionKey = this.getNodeSelectionKey(node); if (selectedNodeIds.has(nodeSelectionKey)) return; this.selectedNodes.push(node); selectedNodeIds.add(nodeSelectionKey); }); } this.applySelection(); } selectNodes(nodes, multiSelect = false) { if (!this._enabled) return; const selectedNodeIds = new Set((multiSelect ? this.selectedNodes : []).map(node => this.getNodeSelectionKey(node))); this.selectedNodes = multiSelect ? this.selectedNodes.slice() : []; nodes.forEach(node => { const nodeSelectionKey = this.getNodeSelectionKey(node); if (selectedNodeIds.has(nodeSelectionKey)) return; this.selectedNodes.push(node); selectedNodeIds.add(nodeSelectionKey); }); this.applySelection(); } getNodeSelectionKey(node) { return `${node.model.subtreeId}:${node.model.id}`; } /**TO DO: This is redundant */ unselectObjects(ids) { if (!this._enabled) return; const nodes = []; for (let k = 0; k < ids.length; k++) { const foundNodes = this.viewer.getWorldTree().findId(ids[k]); if (foundNodes) nodes.push(...foundNodes); } this.clearSelection(nodes); } clearSelection(nodes) { if (!nodes) { this.removeSelection(); this.selectedNodes = []; this.emitSelectionChanged(); return; } const rvs = []; nodes.forEach(node => { rvs.push(...this.viewer.getWorldTree().getRenderTree().getRenderViewsForNode(node)); }); this.removeSelection(rvs); this.selectedNodes = this.selectedNodes.filter(node => !nodes.includes(node)); this.emitSelectionChanged(); } onObjectClicked(selection) { if (!this._enabled) return; if (this.suppressNextClick) { this.suppressNextClick = false; return; } if (!selection) { this.clearSelection(); return; } if (selection.multiple) { if (!this.selectedNodes.includes(selection.hits[0].node)) this.selectedNodes.push(selection.hits[0].node); } else { this.selectedNodes = [selection.hits[0].node]; } this.applySelection(); } onObjectDoubleClick(selectionInfo) { if (!this._enabled) return; if (this.windowSelectionDragging) return; if (!selectionInfo) { this.cameraProvider.setCameraView([], true); return; } this.cameraProvider.setCameraView([selectionInfo.hits[0].node.model.id], true); } onPointerDown(e) { if (!this._enabled || !this.windowSelectionOptions.enabled) return; if (e.event.pointerType === 'mouse' && e.event.button !== 0) return; if (!this.isWindowSelectionModifierPressed(e.event)) return; this.windowSelectionStart = e.event; this.windowSelectionEnd = e.event; this.windowSelectionDragging = false; } onPointerMove(e) { if (!this._enabled) return; if (this.windowSelectionStart && e.event instanceof PointerEvent) { this.updateWindowSelection(e.event); return; } const camera = this.viewer.getRenderer().renderingCamera; if (!camera) return; if (!this.options.hoverMaterialData) return; const result = this.viewer.getRenderer().intersections.intersect(this.viewer.getRenderer().scene, camera, e, [ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_TEXT], true, this.viewer.getRenderer().clippingVolume) || []; /* TEMPORARY */ let rvMaterial = [null, null]; for (let k = 0; k < result.length; k++) { rvMaterial = this.viewer.getRenderer().renderViewFromIntersection(result[k]); if (rvMaterial) break; } this.applyHover(rvMaterial[0]); } onPointerUp(e) { var _a; if (!this.windowSelectionStart) return; this.updateWindowSelection(e.event); if (this.windowSelectionDragging) { this.suppressNextClick = true; const selectionStart = performance.now(); const nodes = this.getWindowSelectionNodes(); const selectionMs = performance.now() - selectionStart; const applyStart = performance.now(); this.selectNodes(nodes, e.event.shiftKey); this.logWindowSelectionStats({ ...((_a = this.windowSelectionLastStats) !== null && _a !== void 0 ? _a : {}), selectionMs, applyMs: performance.now() - applyStart, nodes: nodes.length }); } this.clearWindowSelection(); } onPointerCancel() { this.clearWindowSelection(); } isWindowSelectionModifierPressed(event) { switch (this.windowSelectionOptions.modifierKey) { case 'none': return true; case 'shift': return event.shiftKey; case 'ctrl': return event.ctrlKey; case 'alt': return event.altKey; case 'meta': return event.metaKey; default: return false; } } updateWindowSelection(event) { if (!this.windowSelectionStart) return; this.windowSelectionEnd = event; const dragDistance = Math.hypot(event.clientX - this.windowSelectionStart.clientX, event.clientY - this.windowSelectionStart.clientY); if (!this.windowSelectionDragging && dragDistance < this.windowSelectionOptions.minDragPixels) { return; } this.windowSelectionDragging = true; this.removeHover(); this.ensureWindowSelectionElement(); this.updateWindowSelectionElement(); } ensureWindowSelectionElement() { if (this.windowSelectionElement) return; const element = document.createElement('div'); element.style.position = 'fixed'; element.style.pointerEvents = 'none'; element.style.zIndex = '2147483647'; element.style.border = '1px solid #047efb'; element.style.background = 'rgba(4, 126, 251, 0.14)'; element.style.boxShadow = '0 0 0 1px rgba(255, 255, 255, 0.6) inset'; document.body.appendChild(element); this.windowSelectionElement = element; } updateWindowSelectionElement() { if (!this.windowSelectionElement || !this.windowSelectionStart || !this.windowSelectionEnd) { return; } const left = Math.min(this.windowSelectionStart.clientX, this.windowSelectionEnd.clientX); const top = Math.min(this.windowSelectionStart.clientY, this.windowSelectionEnd.clientY); const width = Math.abs(this.windowSelectionEnd.clientX - this.windowSelectionStart.clientX); const height = Math.abs(this.windowSelectionEnd.clientY - this.windowSelectionStart.clientY); this.windowSelectionElement.style.left = `${left}px`; this.windowSelectionElement.style.top = `${top}px`; this.windowSelectionElement.style.width = `${width}px`; this.windowSelectionElement.style.height = `${height}px`; } clearWindowSelection() { var _a; this.windowSelectionStart = null; this.windowSelectionEnd = null; this.windowSelectionDragging = false; (_a = this.windowSelectionElement) === null || _a === void 0 ? void 0 : _a.remove(); this.windowSelectionElement = null; } getWindowSelectionNodes() { var _a, _b; if (!this.windowSelectionStart || !this.windowSelectionEnd) return []; const camera = this.viewer.getRenderer().renderingCamera; if (!camera) return []; const rect = this.getWindowSelectionNdcRect(); const selectedNodes = new Map(); const resolvedNodeCache = new Map(); const batches = this.viewer.getRenderer().batcher.getBatches(); const startedAt = performance.now(); let scannedBatches = 0; let prunedBatches = 0; let scannedRenderViews = 0; let matchedRenderViews = 0; camera.updateMatrixWorld(); (_b = (_a = camera).updateProjectionMatrix) === null || _b === void 0 ? void 0 : _b.call(_a); for (let batchIndex = 0; batchIndex < batches.length; batchIndex++) { const batch = batches[batchIndex]; scannedBatches++; if (batch.bounds && !batch.bounds.isEmpty() && !this.boxIntersectsSelectionRect(batch.bounds, camera, rect)) { prunedBatches++; continue; } for (let renderViewIndex = 0; renderViewIndex < batch.renderViews.length; renderViewIndex++) { const renderView = batch.renderViews[renderViewIndex]; scannedRenderViews++; if (!this.renderViewMatchesSelectionRect(renderView, camera, rect)) continue; matchedRenderViews++; this.addWindowSelectionCandidate(renderView, selectedNodes, resolvedNodeCache); } } this.windowSelectionLastStats = { batches: batches.length, scannedBatches, prunedBatches, scannedRenderViews, matchedRenderViews, selectedNodes: selectedNodes.size, collectMs: performance.now() - startedAt }; return [...selectedNodes.values()]; } addWindowSelectionCandidate(rv, selectedNodes, resolvedNodeCache) { var _a; if (!this.isSelectableRenderView(rv)) return; const renderViewNodeKey = `${rv.renderData.subtreeId}:${rv.renderData.id}`; let nodes = resolvedNodeCache.get(renderViewNodeKey); if (nodes === undefined) { nodes = (_a = this.viewer.getWorldTree().findId(rv.renderData.id, rv.renderData.subtreeId)) !== null && _a !== void 0 ? _a : null; resolvedNodeCache.set(renderViewNodeKey, nodes); } if (!nodes) return; nodes.forEach(node => { let parentNode = node; while (!parentNode.model.atomic && parentNode.parent) { parentNode = parentNode.parent; } selectedNodes.set(this.getNodeSelectionKey(parentNode), parentNode); }); } getWindowSelectionNdcRect() { const start = this.viewer.getRenderer().screenToNDC(this.windowSelectionStart.clientX, this.windowSelectionStart.clientY); const end = this.viewer.getRenderer().screenToNDC(this.windowSelectionEnd.clientX, this.windowSelectionEnd.clientY); return { minX: Math.min(start.x, end.x), maxX: Math.max(start.x, end.x), minY: Math.min(start.y, end.y), maxY: Math.max(start.y, end.y) }; } isSelectableRenderView(rv) { const material = this.viewer.getRenderer().getMaterial(rv); if (!material) return false; const pickFilter = this.viewer.getRenderer().objectPickConfiguration.pickedObjectsFilter; return pickFilter ? pickFilter([rv, material]) : true; } renderViewMatchesSelectionRect(renderView, camera, rect) { if (!renderView.aabb || renderView.aabb.isEmpty()) return false; if (this.windowSelectionOptions.selectionMode === 'intersects') { return this.boxIntersectsSelectionRect(renderView.aabb, camera, rect); } return this.boxCenterInSelectionRect(renderView.aabb, camera, rect); } boxCenterInSelectionRect(box, camera, rect) { this.windowSelectionTmpPoint.copy(box.min).add(box.max).multiplyScalar(0.5); return this.projectedPointInSelectionRect(this.windowSelectionTmpPoint, camera, rect); } boxIntersectsSelectionRect(box, camera, rect) { let minX = Infinity; let minY = Infinity; let maxX = -Infinity; let maxY = -Infinity; let projected = false; const min = box.min; const max = box.max; for (let k = 0; k < 8; k++) { this.windowSelectionTmpPoint.set(k & 1 ? max.x : min.x, k & 2 ? max.y : min.y, k & 4 ? max.z : min.z); this.windowSelectionTmpPoint.project(camera); if (this.windowSelectionTmpPoint.z < -1 || this.windowSelectionTmpPoint.z > 1) { continue; } projected = true; minX = Math.min(minX, this.windowSelectionTmpPoint.x); minY = Math.min(minY, this.windowSelectionTmpPoint.y); maxX = Math.max(maxX, this.windowSelectionTmpPoint.x); maxY = Math.max(maxY, this.windowSelectionTmpPoint.y); } if (!projected) return false; return maxX >= rect.minX && minX <= rect.maxX && maxY >= rect.minY && minY <= rect.maxY; } projectedPointInSelectionRect(point, camera, rect) { point.project(camera); return point.z >= -1 && point.z <= 1 && point.x >= rect.minX && point.x <= rect.maxX && point.y >= rect.minY && point.y <= rect.maxY; } logWindowSelectionStats(stats) { const roundedStats = Object.fromEntries(Object.entries(stats).map(([key, value]) => [key, Number.isFinite(value) ? Math.round(value * 100) / 100 : value])); // eslint-disable-next-line no-console console.info('[SpeckleViewer] window selection', roundedStats); } applySelection() { this.removeSelection(); for (let k = 0; k < this.selectedNodes.length; k++) { const rvs = this.viewer.getWorldTree().getRenderTree().getRenderViewsForNode(this.selectedNodes[k]); rvs.forEach(rv => { if (!this.selectionRvs[rv.guid]) this.selectionRvs[rv.guid] = rv; if (!this.selectionMaterials[rv.guid]) { this.selectionMaterials[rv.guid] = this.viewer.getRenderer().getMaterial(rv); } }); } const rvs = Object.values(this.selectionRvs); const opaqueRvs = rvs.filter(value => this.selectionMaterials[value.guid] && this.selectionMaterials[value.guid].visible && this.selectionMaterials[value.guid] && !(this.selectionMaterials[value.guid].transparent && this.selectionMaterials[value.guid].opacity < 1)); const transparentRvs = rvs.filter(value => this.selectionMaterials[value.guid] && this.selectionMaterials[value.guid].visible && this.selectionMaterials[value.guid] && this.selectionMaterials[value.guid].transparent && this.selectionMaterials[value.guid].opacity < 1); const hiddenRvs = rvs.filter(value => this.selectionMaterials[value.guid] && this.selectionMaterials[value.guid].visible === false); this.viewer.getRenderer().setMaterial(opaqueRvs, this.selectionMaterialData); this.viewer.getRenderer().setMaterial(transparentRvs, this.transparentSelectionMaterialData); this.viewer.getRenderer().setMaterial(hiddenRvs, this.hiddenSelectionMaterialData); this.viewer.requestRender(UpdateFlags.RENDER | UpdateFlags.CLIPPING_PLANES); this.emitSelectionChanged(); } emitSelectionChanged() { const objectIds = this.getSelectedObjectIds(); this.emit(SelectionExtensionEvent.SelectionChanged, { nodes: objectIds.length <= 1000 ? this.selectedNodes.slice() : [], objects: objectIds.length <= 1000 ? this.getSelectedObjects() : [], objectIds, renderViewGuids: Object.keys(this.selectionRvs) }); } removeSelection(rvs) { this.removeHover(); const materialMap = {}; rvs = rvs ? rvs : Object.values(this.selectionRvs); rvs.forEach(rv => { const material = this.selectionMaterials[rv.guid]; if (material) { if (!materialMap[material.uuid]) materialMap[material.uuid] = { rvs: [], matName: material.constructor.name }; materialMap[material.uuid].rvs.push(rv); } }); for (const k in materialMap) { this.viewer.getRenderer().setMaterial(materialMap[k].rvs, this.selectionMaterials[materialMap[k].rvs[0].guid]); materialMap[k].rvs.forEach(rv => { delete this.selectionRvs[rv.guid]; delete this.selectionMaterials[rv.guid]; }); } } applyHover(renderView) { this.removeHover(); if (!renderView) return; if (this.selectionRvs[renderView.guid]) { return; } this.removeHover(); this.hoverRv = renderView; this.hoverMaterial = this.viewer.getRenderer().getMaterial(this.hoverRv); this.viewer.getRenderer().setMaterial([renderView], Materials.isTransparent(this.hoverMaterial) ? this.transparentHoverMaterialData : this.hoverMaterialData); this.viewer.requestRender(); } removeHover() { if (this.hoverRv && this.hoverMaterial) this.viewer.getRenderer().setMaterial([this.hoverRv], this.hoverMaterial); this.hoverRv = null; this.hoverMaterial = null; this.viewer.requestRender(); } } /** * Abstract base class for controls. * * @abstract * @augments EventDispatcher */ class Controls extends EventDispatcher { /** * Constructs a new controls instance. * * @param {Object3D} object - The object that is managed by the controls. * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners. */ constructor(object, domElement = null) { super(); /** * The object that is managed by the controls. * * @type {Object3D} */ this.object = object; /** * The HTML element used for event listeners. * * @type {?HTMLDOMElement} * @default null */ this.domElement = domElement; /** * Whether the controls responds to user input or not. * * @type {boolean} * @default true */ this.enabled = true; /** * The internal state of the controls. * * @type {number} * @default -1 */ this.state = -1; /** * This object defines the keyboard input of the controls. * * @type {Object} */ this.keys = {}; /** * This object defines what type of actions are assigned to the available mouse buttons. * It depends on the control implementation what kind of mouse buttons and actions are supported. * * @type {{LEFT: ?number, MIDDLE: ?number, RIGHT: ?number}} */ this.mouseButtons = { LEFT: null, MIDDLE: null, RIGHT: null }; /** * This object defines what type of actions are assigned to what kind of touch interaction. * It depends on the control implementation what kind of touch interaction and actions are supported. * * @type {{ONE: ?number, TWO: ?number}} */ this.touches = { ONE: null, TWO: null }; } /** * Connects the controls to the DOM. This method has so called "side effects" since * it adds the module's event listeners to the DOM. */ connect() {} /** * Disconnects the controls from the DOM. */ disconnect() {} /** * Call this method if you no longer want use to the controls. It frees all internal * resources and removes all event listeners. */ dispose() {} /** * Controls should implement this method if they have to update their internal state * per simulation step. * * @param {number} [delta] - The time delta in seconds. */ update(/* delta */) {} } const _raycaster = new Raycaster(); const _tempVector = new Vector3(); const _tempVector2 = new Vector3(); const _tempQuaternion$1 = new Quaternion(); const _unit = { X: new Vector3(1, 0, 0), Y: new Vector3(0, 1, 0), Z: new Vector3(0, 0, 1) }; /** * Fires if any type of change (object or property change) is performed. Property changes * are separate events you can add event listeners to. The event type is "propertyname-changed". * * @event TransformControls#change * @type {Object} */ const _changeEvent = { type: 'change' }; /** * Fires if a pointer (mouse/touch) becomes active. * * @event TransformControls#mouseDown * @type {Object} */ const _mouseDownEvent = { type: 'mouseDown', mode: null }; /** * Fires if a pointer (mouse/touch) is no longer active. * * @event TransformControls#mouseUp * @type {Object} */ const _mouseUpEvent = { type: 'mouseUp', mode: null }; /** * Fires if the controlled 3D object is changed. * * @event TransformControls#objectChange * @type {Object} */ const _objectChangeEvent = { type: 'objectChange' }; /** * This class can be used to transform objects in 3D space by adapting a similar interaction model * of DCC tools like Blender. Unlike other controls, it is not intended to transform the scene's camera. * * `TransformControls` expects that its attached 3D object is part of the scene graph. * * @augments Controls */ class TransformControls extends Controls { /** * Constructs a new controls instance. * * @param {Camera} camera - The camera of the rendered scene. * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners. */ constructor(camera, domElement = null) { super(undefined, domElement); const root = new TransformControlsRoot(this); this._root = root; const gizmo = new TransformControlsGizmo(); this._gizmo = gizmo; root.add(gizmo); const plane = new TransformControlsPlane(); this._plane = plane; root.add(plane); const scope = this; this._doNotPick = false; // Defined getter, setter and store for a property function defineProperty(propName, defaultValue) { let propValue = defaultValue; Object.defineProperty(scope, propName, { get() { return propValue !== undefined ? propValue : defaultValue; }, set(value) { if (propValue !== value) { propValue = value; plane[propName] = value; gizmo[propName] = value; scope.dispatchEvent({ type: propName + '-changed', value }); scope.dispatchEvent(_changeEvent); } } }); scope[propName] = defaultValue; plane[propName] = defaultValue; gizmo[propName] = defaultValue; } // Define properties with getters/setter // Setting the defined property will automatically trigger change event // Defined properties are passed down to gizmo and plane /** * The camera of the rendered scene. * * @name TransformControls#camera * @type {Camera} */ defineProperty('camera', camera); defineProperty('object', undefined); defineProperty('enabled', true); /** * The current transformation axis. * * @name TransformControls#axis * @type {string} */ defineProperty('axis', null); /** * The current transformation axis. * * @name TransformControls#mode * @type {('translate'|'rotate'|'scale')} * @default 'translate' */ defineProperty('mode', 'translate'); /** * By default, 3D objects are continuously translated. If you set this property to a numeric * value (world units), you can define in which steps the 3D object should be translated. * * @name TransformControls#translationSnap * @type {?number} * @default null */ defineProperty('translationSnap', null); /** * By default, 3D objects are continuously rotated. If you set this property to a numeric * value (radians), you can define in which steps the 3D object should be rotated. * * @name TransformControls#rotationSnap * @type {?number} * @default null */ defineProperty('rotationSnap', null); /** * By default, 3D objects are continuously scaled. If you set this property to a numeric * value, you can define in which steps the 3D object should be scaled. * * @name TransformControls#scaleSnap * @type {?number} * @default null */ defineProperty('scaleSnap', null); /** * Defines in which coordinate space transformations should be performed. * * @name TransformControls#space * @type {('world'|'local')} * @default 'world' */ defineProperty('space', 'world'); /** * The size of the helper UI (axes/planes). * * @name TransformControls#size * @type {number} * @default 1 */ defineProperty('size', 1); /** * Whether dragging is currently performed or not. * * @name TransformControls#dragging * @type {boolean} * @readonly * @default false */ defineProperty('dragging', false); /** * Whether the x-axis helper should be visible or not. * * @name TransformControls#showX * @type {boolean} * @default true */ defineProperty('showX', true); /** * Whether the y-axis helper should be visible or not. * * @name TransformControls#showY * @type {boolean} * @default true */ defineProperty('showY', true); /** * Whether the z-axis helper should be visible or not. * * @name TransformControls#showZ * @type {boolean} * @default true */ defineProperty('showZ', true); /** * The minimum allowed X position during translation. * * @name TransformControls#minX * @type {number} * @default -Infinity */ defineProperty('minX', -Infinity); /** * The maximum allowed X position during translation. * * @name TransformControls#maxX * @type {number} * @default Infinity */ defineProperty('maxX', Infinity); /** * The minimum allowed y position during translation. * * @name TransformControls#minY * @type {number} * @default -Infinity */ defineProperty('minY', -Infinity); /** * The maximum allowed Y position during translation. * * @name TransformControls#maxY * @type {number} * @default Infinity */ defineProperty('maxY', Infinity); /** * The minimum allowed z position during translation. * * @name TransformControls#minZ * @type {number} * @default -Infinity */ defineProperty('minZ', -Infinity); /** * The maximum allowed Z position during translation. * * @name TransformControls#maxZ * @type {number} * @default Infinity */ defineProperty('maxZ', Infinity); // Reusable utility variables const worldPosition = new Vector3(); const worldPositionStart = new Vector3(); const worldQuaternion = new Quaternion(); const worldQuaternionStart = new Quaternion(); const cameraPosition = new Vector3(); const cameraQuaternion = new Quaternion(); const pointStart = new Vector3(); const pointEnd = new Vector3(); const rotationAxis = new Vector3(); const rotationAngle = 0; const eye = new Vector3(); // TODO: remove properties unused in plane and gizmo defineProperty('worldPosition', worldPosition); defineProperty('worldPositionStart', worldPositionStart); defineProperty('worldQuaternion', worldQuaternion); defineProperty('worldQuaternionStart', worldQuaternionStart); defineProperty('cameraPosition', cameraPosition); defineProperty('cameraQuaternion', cameraQuaternion); defineProperty('pointStart', pointStart); defineProperty('pointEnd', pointEnd); defineProperty('rotationAxis', rotationAxis); defineProperty('rotationAngle', rotationAngle); defineProperty('eye', eye); this._offset = new Vector3(); this._startNorm = new Vector3(); this._endNorm = new Vector3(); this._cameraScale = new Vector3(); this._parentPosition = new Vector3(); this._parentQuaternion = new Quaternion(); this._parentQuaternionInv = new Quaternion(); this._parentScale = new Vector3(); this._worldScaleStart = new Vector3(); this._worldQuaternionInv = new Quaternion(); this._worldScale = new Vector3(); this._positionStart = new Vector3(); this._quaternionStart = new Quaternion(); this._scaleStart = new Vector3(); this._getPointer = getPointer.bind(this); this._onPointerDown = onPointerDown.bind(this); this._onPointerHover = onPointerHover.bind(this); this._onPointerMove = onPointerMove.bind(this); this._onPointerUp = onPointerUp.bind(this); if (domElement !== null) { this.connect(); } } connect() { this.domElement.addEventListener('pointerdown', this._onPointerDown); this.domElement.addEventListener('pointermove', this._onPointerHover); this.domElement.addEventListener('pointerup', this._onPointerUp); this.domElement.style.touchAction = 'none'; // disable touch scroll } disconnect() { this.domElement.removeEventListener('pointerdown', this._onPointerDown); this.domElement.removeEventListener('pointermove', this._onPointerHover); this.domElement.removeEventListener('pointermove', this._onPointerMove); this.domElement.removeEventListener('pointerup', this._onPointerUp); this.domElement.style.touchAction = 'auto'; } /** * Returns the visual representation of the controls. Add the helper to your scene to * visually transform the attached 3D object. * * @return {TransformControlsRoot} The helper. */ getHelper() { return this._root; } pointerHover(pointer) { if (this._doNotPick) { this.axis = null; return; } if (this.object === undefined || this.dragging === true) return; if (pointer !== null) _raycaster.setFromCamera(pointer, this.camera); const intersect = intersectObjectWithRay(this._gizmo.picker[this.mode], _raycaster); if (intersect) { this.axis = intersect.object.name; } else { this.axis = null; } } pointerDown(pointer) { if (this._doNotPick) { return; } if (this.object === undefined || this.dragging === true || pointer !== null && pointer.button !== 0) return; if (this.axis !== null) { if (pointer !== null) _raycaster.setFromCamera(pointer, this.camera); const planeIntersect = intersectObjectWithRay(this._plane, _raycaster, true); if (planeIntersect) { this.object.updateMatrixWorld(); this.object.parent.updateMatrixWorld(); this._positionStart.copy(this.object.position); this._quaternionStart.copy(this.object.quaternion); this._scaleStart.copy(this.object.scale); this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this._worldScaleStart); this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart); } this.dragging = true; _mouseDownEvent.mode = this.mode; this.dispatchEvent(_mouseDownEvent); } } pointerMove(pointer) { if (this._doNotPick) { return; } const axis = this.axis; const mode = this.mode; const object = this.object; let space = this.space; if (mode === 'scale') { space = 'local'; } else if (axis === 'E' || axis === 'XYZE' || axis === 'XYZ') { space = 'world'; } if (object === undefined || axis === null || this.dragging === false || pointer !== null && pointer.button !== -1) return; if (pointer !== null) _raycaster.setFromCamera(pointer, this.camera); const planeIntersect = intersectObjectWithRay(this._plane, _raycaster, true); if (!planeIntersect) return; this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart); if (mode === 'translate') { // Apply translate this._offset.copy(this.pointEnd).sub(this.pointStart); if (space === 'local' && axis !== 'XYZ') { this._offset.applyQuaternion(this._worldQuaternionInv); } if (axis.indexOf('X') === -1) this._offset.x = 0; if (axis.indexOf('Y') === -1) this._offset.y = 0; if (axis.indexOf('Z') === -1) this._offset.z = 0; if (space === 'local' && axis !== 'XYZ') { this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale); } else { this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale); } object.position.copy(this._offset).add(this._positionStart); // Apply translation snap if (this.translationSnap) { if (space === 'local') { object.position.applyQuaternion(_tempQuaternion$1.copy(this._quaternionStart).invert()); if (axis.search('X') !== -1) { object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; } if (axis.search('Y') !== -1) { object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; } if (axis.search('Z') !== -1) { object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; } object.position.applyQuaternion(this._quaternionStart); } if (space === 'world') { if (object.parent) { object.position.add(_tempVector.setFromMatrixPosition(object.parent.matrixWorld)); } if (axis.search('X') !== -1) { object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; } if (axis.search('Y') !== -1) { object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; } if (axis.search('Z') !== -1) { object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; } if (object.parent) { object.position.sub(_tempVector.setFromMatrixPosition(object.parent.matrixWorld)); } } } object.position.x = Math.max(this.minX, Math.min(this.maxX, object.position.x)); object.position.y = Math.max(this.minY, Math.min(this.maxY, object.position.y)); object.position.z = Math.max(this.minZ, Math.min(this.maxZ, object.position.z)); } else if (mode === 'scale') { if (axis.search('XYZ') !== -1) { let d = this.pointEnd.length() / this.pointStart.length(); if (this.pointEnd.dot(this.pointStart) < 0) d *= -1; _tempVector2.set(d, d, d); } else { _tempVector.copy(this.pointStart); _tempVector2.copy(this.pointEnd); _tempVector.applyQuaternion(this._worldQuaternionInv); _tempVector2.applyQuaternion(this._worldQuaternionInv); /** Changed from divide. Need linear movement */ _tempVector2.sub(_tempVector); if (axis.search('X') === -1) { _tempVector2.x = 0; } if (axis.search('Y') === -1) { _tempVector2.y = 0; } if (axis.search('Z') === -1) { _tempVector2.z = 0; } } // Apply scale /** Changed from multiply. Needs linear movement. Also scale is applied bilaterally, so we divide by 2 */ object.scale.copy(this._scaleStart).add(_tempVector2.multiplyScalar(0.5)); if (this.scaleSnap) { if (axis.search('X') !== -1) { object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap; } if (axis.search('Y') !== -1) { object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap; } if (axis.search('Z') !== -1) { object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap; } } } else if (mode === 'rotate') { this._offset.copy(this.pointEnd).sub(this.pointStart); const ROTATION_SPEED = 20 / this.worldPosition.distanceTo(_tempVector.setFromMatrixPosition(this.camera.matrixWorld)); let _inPlaneRotation = false; if (axis === 'XYZE') { this.rotationAxis.copy(this._offset).cross(this.eye).normalize(); this.rotationAngle = this._offset.dot(_tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED; } else if (axis === 'X' || axis === 'Y' || axis === 'Z') { this.rotationAxis.copy(_unit[axis]); _tempVector.copy(_unit[axis]); if (space === 'local') { _tempVector.applyQuaternion(this.worldQuaternion); } _tempVector.cross(this.eye); // When _tempVector is 0 after cross with this.eye the vectors are parallel and should use in-plane rotation logic. if (_tempVector.length() === 0) { _inPlaneRotation = true; } else { this.rotationAngle = this._offset.dot(_tempVector.normalize()) * ROTATION_SPEED; } } if (axis === 'E' || _inPlaneRotation) { this.rotationAxis.copy(this.eye); this.rotationAngle = this.pointEnd.angleTo(this.pointStart); this._startNorm.copy(this.pointStart).normalize(); this._endNorm.copy(this.pointEnd).normalize(); this.rotationAngle *= this._endNorm.cross(this._startNorm).dot(this.eye) < 0 ? 1 : -1; } // Apply rotation snap if (this.rotationSnap) this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap; // Apply rotate if (space === 'local' && axis !== 'E' && axis !== 'XYZE') { object.quaternion.copy(this._quaternionStart); object.quaternion.multiply(_tempQuaternion$1.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize(); } else { this.rotationAxis.applyQuaternion(this._parentQuaternionInv); object.quaternion.copy(_tempQuaternion$1.setFromAxisAngle(this.rotationAxis, this.rotationAngle)); object.quaternion.multiply(this._quaternionStart).normalize(); } } this.dispatchEvent(_changeEvent); this.dispatchEvent(_objectChangeEvent); } pointerUp(pointer) { if (this._doNotPick) { return; } if (pointer !== null && pointer.button !== 0) return; if (this.dragging && this.axis !== null) { _mouseUpEvent.mode = this.mode; this.dispatchEvent(_mouseUpEvent); } this.dragging = false; this.axis = null; } dispose() { this.disconnect(); this._root.dispose(); } /** * Sets the 3D object that should be transformed and ensures the controls UI is visible. * * @param {Object3D} object - The 3D object that should be transformed. * @return {TransformControls} A reference to this controls. */ attach(object) { this.object = object; this._root.visible = true; return this; } /** * Removes the current 3D object from the controls and makes the helper UI invisible. * * @return {TransformControls} A reference to this controls. */ detach() { this.object = undefined; this.axis = null; this._root.visible = false; return this; } /** * Resets the object's position, rotation and scale to when the current transform began. */ reset() { if (!this.enabled) return; if (this.dragging) { this.object.position.copy(this._positionStart); this.object.quaternion.copy(this._quaternionStart); this.object.scale.copy(this._scaleStart); this.dispatchEvent(_changeEvent); this.dispatchEvent(_objectChangeEvent); this.pointStart.copy(this.pointEnd); } } /** * Returns the raycaster that is used for user interaction. This object is shared between all * instances of `TransformControls`. * * @returns {Raycaster} The internal raycaster. */ getRaycaster() { return _raycaster; } /** * Returns the transformation mode. * * @returns {'translate'|'rotate'|'scale'} The transformation mode. */ getMode() { return this.mode; } /** * Sets the given transformation mode. * * @param {'translate'|'rotate'|'scale'} mode - The transformation mode to set. */ setMode(mode) { this.mode = mode; } /** * Sets the translation snap. * * @param {?number} translationSnap - The translation snap to set. */ setTranslationSnap(translationSnap) { this.translationSnap = translationSnap; } /** * Sets the rotation snap. * * @param {?number} rotationSnap - The rotation snap to set. */ setRotationSnap(rotationSnap) { this.rotationSnap = rotationSnap; } /** * Sets the scale snap. * * @param {?number} scaleSnap - The scale snap to set. */ setScaleSnap(scaleSnap) { this.scaleSnap = scaleSnap; } /** * Sets the size of the helper UI. * * @param {number} size - The size to set. */ setSize(size) { this.size = size; } /** * Sets the coordinate space in which transformations are applied. * * @param {'world'|'local'} space - The space to set. */ setSpace(space) { this.space = space; } } // mouse / touch event handlers function getPointer(event) { if (this.domElement.ownerDocument.pointerLockElement) { return { x: 0, y: 0, button: event.button }; } else { const rect = this.domElement.getBoundingClientRect(); return { x: (event.clientX - rect.left) / rect.width * 2 - 1, y: -(event.clientY - rect.top) / rect.height * 2 + 1, button: event.button }; } } function onPointerHover(event) { if (!this.enabled) return; switch (event.pointerType) { case 'mouse': case 'pen': this.pointerHover(this._getPointer(event)); break; } } function onPointerDown(event) { if (!this.enabled) return; if (!document.pointerLockElement) { this.domElement.setPointerCapture(event.pointerId); } this.domElement.addEventListener('pointermove', this._onPointerMove); this.pointerHover(this._getPointer(event)); this.pointerDown(this._getPointer(event)); } function onPointerMove(event) { if (!this.enabled) return; this.pointerMove(this._getPointer(event)); } function onPointerUp(event) { if (!this.enabled) return; this.domElement.releasePointerCapture(event.pointerId); this.domElement.removeEventListener('pointermove', this._onPointerMove); this.pointerUp(this._getPointer(event)); } function intersectObjectWithRay(object, raycaster, includeInvisible) { const allIntersections = raycaster.intersectObject(object, true); for (let i = 0; i < allIntersections.length; i++) { if (allIntersections[i].object.visible || includeInvisible) { return allIntersections[i]; } } return false; } // // Reusable utility variables const _tempEuler$1 = new Euler(); const _alignVector = new Vector3(0, 1, 0); const _zeroVector = new Vector3(0, 0, 0); const _lookAtMatrix = new Matrix4(); const _tempQuaternion2 = new Quaternion(); const _identityQuaternion = new Quaternion(); const _dirVector = new Vector3(); const _tempMatrix = new Matrix4(); const _unitX = new Vector3(1, 0, 0); const _unitY = new Vector3(0, 1, 0); const _unitZ = new Vector3(0, 0, 1); const _v1 = new Vector3(); const _v2 = new Vector3(); const _v3 = new Vector3(); class TransformControlsRoot extends Object3D { constructor(controls) { super(); this.isTransformControlsRoot = true; this.controls = controls; this.visible = false; } // updateMatrixWorld updates key transformation variables updateMatrixWorld(force) { const controls = this.controls; if (controls.object !== undefined) { controls.object.updateMatrixWorld(); if (controls.object.parent === null) { console.error('TransformControls: The attached 3D object must be a part of the scene graph.'); } else { controls.object.parent.matrixWorld.decompose(controls._parentPosition, controls._parentQuaternion, controls._parentScale); } controls.object.matrixWorld.decompose(controls.worldPosition, controls.worldQuaternion, controls._worldScale); controls._parentQuaternionInv.copy(controls._parentQuaternion).invert(); controls._worldQuaternionInv.copy(controls.worldQuaternion).invert(); } controls.camera.updateMatrixWorld(); controls.camera.matrixWorld.decompose(controls.cameraPosition, controls.cameraQuaternion, controls._cameraScale); if (controls.camera.isOrthographicCamera) { controls.camera.getWorldDirection(controls.eye).negate(); } else { controls.eye.copy(controls.cameraPosition).sub(controls.worldPosition).normalize(); } super.updateMatrixWorld(force); } dispose() { this.traverse(function (child) { if (child.geometry) child.geometry.dispose(); if (child.material) child.material.dispose(); }); } } class TransformControlsGizmo extends Object3D { constructor() { super(); this.isTransformControlsGizmo = true; this.type = 'TransformControlsGizmo'; // shared materials const gizmoMaterial = new MeshBasicMaterial({ depthTest: false, depthWrite: false, fog: false, toneMapped: false, transparent: true }); const gizmoLineMaterial = new LineBasicMaterial({ depthTest: false, depthWrite: false, fog: false, toneMapped: false, transparent: true }); // Make unique material for each axis/color const matInvisible = gizmoMaterial.clone(); matInvisible.opacity = 0.15; const matHelper = gizmoLineMaterial.clone(); matHelper.opacity = 0.5; const matRed = gizmoMaterial.clone(); matRed.color.setHex(0xff0000); const matGreen = gizmoMaterial.clone(); matGreen.color.setHex(0x00ff00); const matBlue = gizmoMaterial.clone(); matBlue.color.setHex(0x0000ff); const matRedTransparent = gizmoMaterial.clone(); matRedTransparent.color.setHex(0xff0000); matRedTransparent.opacity = 0.5; const matGreenTransparent = gizmoMaterial.clone(); matGreenTransparent.color.setHex(0x00ff00); matGreenTransparent.opacity = 0.5; const matBlueTransparent = gizmoMaterial.clone(); matBlueTransparent.color.setHex(0x0000ff); matBlueTransparent.opacity = 0.5; const matWhiteTransparent = gizmoMaterial.clone(); matWhiteTransparent.opacity = 0.25; const matYellowTransparent = gizmoMaterial.clone(); matYellowTransparent.color.setHex(0xffff00); matYellowTransparent.opacity = 0.25; const matYellow = gizmoMaterial.clone(); matYellow.color.setHex(0xffff00); const matGray = gizmoMaterial.clone(); matGray.color.setHex(0x787878); // reusable geometry const arrowGeometry = new CylinderGeometry(0, 0.04, 0.1, 12); arrowGeometry.translate(0, 0.05, 0); const scaleHandleGeometry = new BoxGeometry(0.08, 0.08, 0.08); scaleHandleGeometry.translate(0, 0.04, 0); const lineGeometry = new BufferGeometry(); lineGeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3)); const lineGeometry2 = new CylinderGeometry(0.0075, 0.0075, 0.5, 3); lineGeometry2.translate(0, 0.25, 0); function CircleGeometry(radius, arc) { const geometry = new TorusGeometry(radius, 0.0075, 3, 64, arc * Math.PI * 2); geometry.rotateY(Math.PI / 2); geometry.rotateX(Math.PI / 2); return geometry; } // Special geometry for transform helper. If scaled with position vector it spans from [0,0,0] to position function TranslateHelperGeometry() { const geometry = new BufferGeometry(); geometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3)); return geometry; } // Gizmo definitions - custom hierarchy definitions for setupGizmo() function const gizmoTranslate = { X: [[new Mesh(arrowGeometry, matRed), [0.5, 0, 0], [0, 0, -Math.PI / 2]], [new Mesh(arrowGeometry, matRed), [-0.5, 0, 0], [0, 0, Math.PI / 2]], [new Mesh(lineGeometry2, matRed), [0, 0, 0], [0, 0, -Math.PI / 2]]], Y: [[new Mesh(arrowGeometry, matGreen), [0, 0.5, 0]], [new Mesh(arrowGeometry, matGreen), [0, -0.5, 0], [Math.PI, 0, 0]], [new Mesh(lineGeometry2, matGreen)]], Z: [[new Mesh(arrowGeometry, matBlue), [0, 0, 0.5], [Math.PI / 2, 0, 0]], [new Mesh(arrowGeometry, matBlue), [0, 0, -0.5], [-Math.PI / 2, 0, 0]], [new Mesh(lineGeometry2, matBlue), null, [Math.PI / 2, 0, 0]]], XYZ: [[new Mesh(new OctahedronGeometry(0.1, 0), matWhiteTransparent.clone()), [0, 0, 0]]] // XY: [ // [ // new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matBlueTransparent.clone()), // [0.15, 0.15, 0] // ] // ], // YZ: [ // [ // new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matRedTransparent.clone()), // [0, 0.15, 0.15], // [0, Math.PI / 2, 0] // ] // ], // XZ: [ // [ // new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matGreenTransparent.clone()), // [0.15, 0, 0.15], // [-Math.PI / 2, 0, 0] // ] // ] }; const pickerTranslate = { X: [[new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0.3, 0, 0], [0, 0, -Math.PI / 2]], [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [-0.3, 0, 0], [0, 0, Math.PI / 2]]], Y: [[new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0.3, 0]], [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, -0.3, 0], [0, 0, Math.PI]]], Z: [[new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, 0.3], [Math.PI / 2, 0, 0]], [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, -0.3], [-Math.PI / 2, 0, 0]]], XYZ: [[new Mesh(new OctahedronGeometry(0.2, 0), matInvisible)]], XY: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0.15, 0]]], YZ: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]], XZ: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]] }; const helperTranslate = { START: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, 'helper']], END: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, 'helper']], DELTA: [[new Line(TranslateHelperGeometry(), matHelper), null, null, null, 'helper']], X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']], Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], 'helper']], Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], 'helper']] }; const gizmoRotate = { // XYZE: [[new Mesh(CircleGeometry(0.5, 1), matGray), null, [0, Math.PI / 2, 0]]], X: [[new Mesh(CircleGeometry(0.5, 0.5), matRed)]], Y: [[new Mesh(CircleGeometry(0.5, 0.5), matGreen), null, [0, 0, -Math.PI / 2]]], Z: [[new Mesh(CircleGeometry(0.5, 0.5), matBlue), null, [0, Math.PI / 2, 0]]] // E: [ // [ // new Mesh(CircleGeometry(0.75, 1), matYellowTransparent), // null, // [0, Math.PI / 2, 0] // ] // ] }; const helperRotate = { AXIS: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']] }; const pickerRotate = { XYZE: [[new Mesh(new SphereGeometry(0.25, 10, 8), matInvisible)]], X: [[new Mesh(new TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]]], Y: [[new Mesh(new TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [Math.PI / 2, 0, 0]]], Z: [[new Mesh(new TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, 0, -Math.PI / 2]]] // E: [[new Mesh(new TorusGeometry(0.75, 0.1, 2, 24), matInvisible)]] }; const gizmoScale = { X: [[new Mesh(scaleHandleGeometry, matRed), [0.5, 0, 0], [0, 0, -Math.PI / 2]], [new Mesh(lineGeometry2, matRed), [0, 0, 0], [0, 0, -Math.PI / 2]], [new Mesh(scaleHandleGeometry, matRed), [-0.5, 0, 0], [0, 0, Math.PI / 2]]], Y: [[new Mesh(scaleHandleGeometry, matGreen), [0, 0.5, 0]], [new Mesh(lineGeometry2, matGreen)], [new Mesh(scaleHandleGeometry, matGreen), [0, -0.5, 0], [0, 0, Math.PI]]], Z: [[new Mesh(scaleHandleGeometry, matBlue), [0, 0, 0.5], [Math.PI / 2, 0, 0]], [new Mesh(lineGeometry2, matBlue), [0, 0, 0], [Math.PI / 2, 0, 0]], [new Mesh(scaleHandleGeometry, matBlue), [0, 0, -0.5], [-Math.PI / 2, 0, 0]]], XY: [[new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matBlueTransparent), [0.15, 0.15, 0]]], YZ: [[new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matRedTransparent), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]], XZ: [[new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matGreenTransparent), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]], XYZ: [[new Mesh(new BoxGeometry(0.1, 0.1, 0.1), matWhiteTransparent.clone())]] }; const pickerScale = { X: [[new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0.3, 0, 0], [0, 0, -Math.PI / 2]], [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [-0.3, 0, 0], [0, 0, Math.PI / 2]]], Y: [[new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0.3, 0]], [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, -0.3, 0], [0, 0, Math.PI]]], Z: [[new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, 0.3], [Math.PI / 2, 0, 0]], [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, -0.3], [-Math.PI / 2, 0, 0]]], XY: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0.15, 0]]], YZ: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]], XZ: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]], XYZ: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 0, 0]]] }; const helperScale = { X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']], Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], 'helper']], Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], 'helper']] }; // Creates an Object3D with gizmos described in custom hierarchy definition. function setupGizmo(gizmoMap) { const gizmo = new Object3D(); for (const name in gizmoMap) { for (let i = gizmoMap[name].length; i--;) { const object = gizmoMap[name][i][0].clone(); const position = gizmoMap[name][i][1]; const rotation = gizmoMap[name][i][2]; const scale = gizmoMap[name][i][3]; const tag = gizmoMap[name][i][4]; // name and tag properties are essential for picking and updating logic. object.name = name; object.tag = tag; if (position) { object.position.set(position[0], position[1], position[2]); } if (rotation) { object.rotation.set(rotation[0], rotation[1], rotation[2]); } if (scale) { object.scale.set(scale[0], scale[1], scale[2]); } object.updateMatrix(); const tempGeometry = object.geometry.clone(); tempGeometry.applyMatrix4(object.matrix); object.geometry = tempGeometry; object.renderOrder = Infinity; object.position.set(0, 0, 0); object.rotation.set(0, 0, 0); object.scale.set(1, 1, 1); gizmo.add(object); } } return gizmo; } // Gizmo creation this.gizmo = {}; this.picker = {}; this.helper = {}; this.add(this.gizmo['translate'] = setupGizmo(gizmoTranslate)); this.add(this.gizmo['rotate'] = setupGizmo(gizmoRotate)); this.add(this.gizmo['scale'] = setupGizmo(gizmoScale)); this.add(this.picker['translate'] = setupGizmo(pickerTranslate)); this.add(this.picker['rotate'] = setupGizmo(pickerRotate)); this.add(this.picker['scale'] = setupGizmo(pickerScale)); this.add(this.helper['translate'] = setupGizmo(helperTranslate)); this.add(this.helper['rotate'] = setupGizmo(helperRotate)); this.add(this.helper['scale'] = setupGizmo(helperScale)); // Pickers should be hidden always this.picker['translate'].visible = false; this.picker['rotate'].visible = false; this.picker['scale'].visible = false; } // updateMatrixWorld will update transformations and appearance of individual handles updateMatrixWorld(force) { const space = this.mode === 'scale' ? 'local' : this.space; // scale always oriented to local rotation const quaternion = space === 'local' ? this.worldQuaternion : _identityQuaternion; // Show only gizmos for current transform mode this.gizmo['translate'].visible = this.mode === 'translate'; this.gizmo['rotate'].visible = this.mode === 'rotate'; this.gizmo['scale'].visible = this.mode === 'scale'; this.helper['translate'].visible = this.mode === 'translate'; this.helper['rotate'].visible = this.mode === 'rotate'; this.helper['scale'].visible = this.mode === 'scale'; let handles = []; handles = handles.concat(this.picker[this.mode].children); handles = handles.concat(this.gizmo[this.mode].children); handles = handles.concat(this.helper[this.mode].children); for (let i = 0; i < handles.length; i++) { const handle = handles[i]; // hide aligned to camera handle.visible = true; handle.rotation.set(0, 0, 0); handle.position.copy(this.worldPosition); let factor; if (this.camera.isOrthographicCamera) { factor = (this.camera.top - this.camera.bottom) / this.camera.zoom; } else { factor = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7); } handle.scale.set(1, 1, 1).multiplyScalar(factor * this.size / 4); // TODO: simplify helpers and consider decoupling from gizmo if (handle.tag === 'helper') { handle.visible = false; if (handle.name === 'AXIS') { handle.visible = !!this.axis; if (this.axis === 'X') { _tempQuaternion$1.setFromEuler(_tempEuler$1.set(0, 0, 0)); handle.quaternion.copy(quaternion).multiply(_tempQuaternion$1); if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) > 0.9) { handle.visible = false; } } if (this.axis === 'Y') { _tempQuaternion$1.setFromEuler(_tempEuler$1.set(0, 0, Math.PI / 2)); handle.quaternion.copy(quaternion).multiply(_tempQuaternion$1); if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) > 0.9) { handle.visible = false; } } if (this.axis === 'Z') { _tempQuaternion$1.setFromEuler(_tempEuler$1.set(0, Math.PI / 2, 0)); handle.quaternion.copy(quaternion).multiply(_tempQuaternion$1); if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) > 0.9) { handle.visible = false; } } if (this.axis === 'XYZE') { _tempQuaternion$1.setFromEuler(_tempEuler$1.set(0, Math.PI / 2, 0)); _alignVector.copy(this.rotationAxis); handle.quaternion.setFromRotationMatrix(_lookAtMatrix.lookAt(_zeroVector, _alignVector, _unitY)); handle.quaternion.multiply(_tempQuaternion$1); handle.visible = this.dragging; } if (this.axis === 'E') { handle.visible = false; } } else if (handle.name === 'START') { handle.position.copy(this.worldPositionStart); handle.visible = this.dragging; } else if (handle.name === 'END') { handle.position.copy(this.worldPosition); handle.visible = this.dragging; } else if (handle.name === 'DELTA') { handle.position.copy(this.worldPositionStart); handle.quaternion.copy(this.worldQuaternionStart); _tempVector.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1); _tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert()); handle.scale.copy(_tempVector); handle.visible = this.dragging; } else { handle.quaternion.copy(quaternion); if (this.dragging) { handle.position.copy(this.worldPositionStart); } else { handle.position.copy(this.worldPosition); } if (this.axis) { handle.visible = this.axis.search(handle.name) !== -1; } } // If updating helper, skip rest of the loop continue; } // Align handles to current local or world rotation handle.quaternion.copy(quaternion); if (this.mode === 'translate' || this.mode === 'scale') { // Hide translate and scale axis facing the camera const AXIS_HIDE_THRESHOLD = 0.99; const PLANE_HIDE_THRESHOLD = 0.2; if (handle.name === 'X') { if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) { handle.scale.set(1e-10, 1e-10, 1e-10); handle.visible = false; } } if (handle.name === 'Y') { if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) { handle.scale.set(1e-10, 1e-10, 1e-10); handle.visible = false; } } if (handle.name === 'Z') { if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) { handle.scale.set(1e-10, 1e-10, 1e-10); handle.visible = false; } } if (handle.name === 'XY') { if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) { handle.scale.set(1e-10, 1e-10, 1e-10); handle.visible = false; } } if (handle.name === 'YZ') { if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) { handle.scale.set(1e-10, 1e-10, 1e-10); handle.visible = false; } } if (handle.name === 'XZ') { if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) { handle.scale.set(1e-10, 1e-10, 1e-10); handle.visible = false; } } } else if (this.mode === 'rotate') { // Align handles to current local or world rotation _tempQuaternion2.copy(quaternion); _alignVector.copy(this.eye).applyQuaternion(_tempQuaternion$1.copy(quaternion).invert()); if (handle.name.search('E') !== -1) { handle.quaternion.setFromRotationMatrix(_lookAtMatrix.lookAt(this.eye, _zeroVector, _unitY)); } if (handle.name === 'X') { _tempQuaternion$1.setFromAxisAngle(_unitX, Math.atan2(-_alignVector.y, _alignVector.z)); _tempQuaternion$1.multiplyQuaternions(_tempQuaternion2, _tempQuaternion$1); handle.quaternion.copy(_tempQuaternion$1); } if (handle.name === 'Y') { _tempQuaternion$1.setFromAxisAngle(_unitY, Math.atan2(_alignVector.x, _alignVector.z)); _tempQuaternion$1.multiplyQuaternions(_tempQuaternion2, _tempQuaternion$1); handle.quaternion.copy(_tempQuaternion$1); } if (handle.name === 'Z') { _tempQuaternion$1.setFromAxisAngle(_unitZ, Math.atan2(_alignVector.y, _alignVector.x)); _tempQuaternion$1.multiplyQuaternions(_tempQuaternion2, _tempQuaternion$1); handle.quaternion.copy(_tempQuaternion$1); } } // Hide disabled axes handle.visible = handle.visible && (handle.name.indexOf('X') === -1 || this.showX); handle.visible = handle.visible && (handle.name.indexOf('Y') === -1 || this.showY); handle.visible = handle.visible && (handle.name.indexOf('Z') === -1 || this.showZ); handle.visible = handle.visible && (handle.name.indexOf('E') === -1 || this.showX && this.showY && this.showZ); // highlight selected axis handle.material._color = handle.material._color || handle.material.color.clone(); handle.material._opacity = handle.material._opacity || handle.material.opacity; handle.material.color.copy(handle.material._color); handle.material.opacity = handle.material._opacity; if (this.enabled && this.axis) { if (handle.name === this.axis) { handle.material.color.setHex(0xffff00); handle.material.opacity = 1.0; } else if (this.axis.split('').some(function (a) { return handle.name === a; })) { handle.material.color.setHex(0xffff00); handle.material.opacity = 1.0; } } } super.updateMatrixWorld(force); } } // class TransformControlsPlane extends Mesh { constructor() { super(new PlaneGeometry(100000, 100000, 2, 2), new MeshBasicMaterial({ visible: false, wireframe: true, side: DoubleSide, transparent: true, opacity: 0.1, toneMapped: false })); this.isTransformControlsPlane = true; this.type = 'TransformControlsPlane'; } updateMatrixWorld(force) { let space = this.space; this.position.copy(this.worldPosition); if (this.mode === 'scale') space = 'local'; // scale always oriented to local rotation _v1.copy(_unitX).applyQuaternion(space === 'local' ? this.worldQuaternion : _identityQuaternion); _v2.copy(_unitY).applyQuaternion(space === 'local' ? this.worldQuaternion : _identityQuaternion); _v3.copy(_unitZ).applyQuaternion(space === 'local' ? this.worldQuaternion : _identityQuaternion); // Align the plane for current transform mode, axis and space. _alignVector.copy(_v2); switch (this.mode) { case 'translate': case 'scale': switch (this.axis) { case 'X': _alignVector.copy(this.eye).cross(_v1); _dirVector.copy(_v1).cross(_alignVector); break; case 'Y': _alignVector.copy(this.eye).cross(_v2); _dirVector.copy(_v2).cross(_alignVector); break; case 'Z': _alignVector.copy(this.eye).cross(_v3); _dirVector.copy(_v3).cross(_alignVector); break; case 'XY': _dirVector.copy(_v3); break; case 'YZ': _dirVector.copy(_v1); break; case 'XZ': _alignVector.copy(_v3); _dirVector.copy(_v2); break; case 'XYZ': case 'E': _dirVector.set(0, 0, 0); break; } break; case 'rotate': default: // special case for rotate _dirVector.set(0, 0, 0); } if (_dirVector.length() === 0) { // If in rotate mode, make the plane parallel to camera this.quaternion.copy(this.cameraQuaternion); } else { _tempMatrix.lookAt(_tempVector.set(0, 0, 0), _dirVector, _alignVector); this.quaternion.setFromRotationMatrix(_tempMatrix); } super.updateMatrixWorld(force); } } /* eslint-disable @typescript-eslint/ban-ts-comment */ var SectionToolEvent; (function (SectionToolEvent) { SectionToolEvent["DragStart"] = "section-box-drag-start"; SectionToolEvent["DragEnd"] = "section-box-drag-end"; SectionToolEvent["Updated"] = "section-box-changed"; })(SectionToolEvent || (SectionToolEvent = {})); /** Buffers */ const _matrix4 = new Matrix4(); const _quaternion = new Quaternion(); const _vector3 = new Vector3(); const _tempEuler = new Euler(); const _tempQuaternion = new Quaternion(); const unitCube = new Float32Array([-1 * 0.5, -1 * 0.5, -1 * 0.5, 1 * 0.5, -1 * 0.5, -1 * 0.5, 1 * 0.5, 1 * 0.5, -1 * 0.5, -1 * 0.5, 1 * 0.5, -1 * 0.5, -1 * 0.5, -1 * 0.5, 1 * 0.5, 1 * 0.5, -1 * 0.5, 1 * 0.5, 1 * 0.5, 1 * 0.5, 1 * 0.5, -1 * 0.5, 1 * 0.5, 1 * 0.5]); const unitCubeIndices = new Uint16Array([0, 1, 3, 3, 1, 2, 1, 5, 2, 2, 5, 6, 5, 4, 6, 6, 4, 7, 4, 0, 7, 7, 0, 3, 3, 2, 7, 7, 2, 6, 4, 5, 0, 0, 5, 1]); const unitCubeEdges = [ // Bottom Face -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, // Top Face -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, // Sides -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5]; const scratchArray = new Array(unitCubeEdges.length); const scratchPlaneArray = new Array(12); class SectionTool extends Extension { get inject() { return [CameraController]; } /** Manadatory property for all extensions */ get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; this.display.visible = value; if (value) { this.translateControls.attach(this.translationRotationAnchor); this.rotateControls.attach(this.translationRotationAnchor); } else { this.translateControls.detach(); this.rotateControls.detach(); this.scaleControls.detach(); this.draggingFace = null; this.facePlane.visible = false; } this.viewer.getRenderer().renderer.localClippingEnabled = value; this.emit(SectionToolEvent.Updated, this.planes); this.viewer.requestRender(); } /** Hides all controls and the box outline but keeps the sections enabled */ get visible() { return this.display.visible; } set visible(value) { if (!this._enabled) return; this.display.visible = value; if (value) { this.translateControls.attach(this.translationRotationAnchor); this.rotateControls.attach(this.translationRotationAnchor); if (this.draggingFace) this.scaleControls.attach(this.scaleAnchor); } else { this.translateControls.detach(); this.rotateControls.detach(); if (this.draggingFace) this.scaleControls.detach(); } } /** Gets the up to date section planes */ get sectionPlanes() { return this.planes; } /** * */ constructor(viewer, cameraProvider) { super(viewer, cameraProvider); this.cameraProvider = cameraProvider; /** Configurable rotation snap angle in radians. Set to null to disable snapping */ this.rotationSnapAngle = Math.PI / 12; // 15 degrees by default /** Note: Rotation snapping only applies to mouse interactions via TransformControls. * Programmatic calls to setBox() will not apply rotation snapping. * For complete snapping support, programmatic rotations will need to be handled separately. */ /** This is our data model. All we need is an OBB */ this.obb = new OBB(); /** The planes that will send out as clipping planes */ this.planes = [new Plane(new Vector3(1, 0, 0), 0.5), new Plane(new Vector3(-1, 0, 0), 0.5), new Plane(new Vector3(0, 1, 0), 0.5), new Plane(new Vector3(0, -1, 0), 0.5), new Plane(new Vector3(0, 0, 1), 0.5), new Plane(new Vector3(0, 0, -1), 0.5)]; /** The six planes of the unit cube */ this.localPlanes = [new Plane(new Vector3(1, 0, 0), 0.5), new Plane(new Vector3(-1, 0, 0), 0.5), new Plane(new Vector3(0, 1, 0), 0.5), new Plane(new Vector3(0, -1, 0), 0.5), new Plane(new Vector3(0, 0, 1), 0.5), new Plane(new Vector3(0, 0, -1), 0.5)]; /** Convenience LUT for when clicking on the box faces */ this.cubeFaces = // prettier-ignore { '256': { verts: [1, 2, 5, 6], axis: 'x', normal: new Vector3(1, 0, 0) }, '152': { verts: [1, 2, 5, 6], axis: 'x', normal: new Vector3(1, 0, 0) }, '407': { verts: [0, 3, 4, 7], axis: 'x', normal: new Vector3(1, 0, 0) }, '703': { verts: [0, 3, 4, 7], axis: 'x', normal: new Vector3(1, 0, 0) }, '327': { verts: [2, 3, 6, 7], axis: 'y', normal: new Vector3(0, 1, 0) }, '726': { verts: [2, 3, 6, 7], axis: 'y', normal: new Vector3(0, 1, 0) }, '450': { verts: [0, 1, 4, 5], axis: 'y', normal: new Vector3(0, 1, 0) }, '051': { verts: [0, 1, 4, 5], axis: 'y', normal: new Vector3(0, 1, 0) }, '312': { verts: [0, 1, 3, 2], axis: 'z', normal: new Vector3(0, 0, 1) }, '013': { verts: [0, 1, 3, 2], axis: 'z', normal: new Vector3(0, 0, 1) }, '546': { verts: [4, 5, 7, 6], axis: 'z', normal: new Vector3(0, 0, 1) }, '647': { verts: [4, 5, 7, 6], axis: 'z', normal: new Vector3(0, 0, 1) } }; this.lastObbTransform = new Matrix4(); this.dragging = false; this.shiftKeyPressed = false; this.sectionBoxHistory = []; this.currentHistoryIndex = 0; this.maxHistorySize = 100; this.viewer = viewer; this.dragging = false; this.display = new Group(); this.display.name = 'SectionBox'; this.display.layers.set(ObjectLayers.PROPS); this.viewer.getRenderer().scene.add(this.display); /** Create the hit box. It never gets rendered */ const boxGeometry = this.createCubeGeometry(); this.boxHitMesh = new Mesh(boxGeometry, new MeshBasicMaterial({ side: DoubleSide, visible: false, depthWrite: false })); this.boxHitMesh.layers.set(ObjectLayers.PROPS); this.display.add(this.boxHitMesh); /** Create the displayable box outline */ this.boxOutline = this.createOutline(); this.display.add(this.boxOutline); /** Create the box face highlight mesh */ this.facePlane = this.createFacePlane(); this.display.add(this.facePlane); /** Create the anchors */ this.translationRotationAnchor = new Object3D(); this.translationRotationAnchor.name = 'TranslationAnchor'; this.display.add(this.translationRotationAnchor); this.scaleAnchor = new Object3D(); this.scaleAnchor.name = 'ScaleAnchor'; this.display.add(this.scaleAnchor); this.raycaster = new Raycaster(); this.raycaster.layers.set(ObjectLayers.PROPS); /** Create the controls. We create them only once, and attach/detach as needed */ this.setupControls(); /** Whenever we switch projections we update the controls with the new camera * The speckle viewer uses different camera instances for it's different projections */ this.cameraProvider.on(CameraEvent.ProjectionChanged, () => { //@ts-ignore this.translateControls.camera = this.viewer.getRenderer().renderingCamera; //@ts-ignore this.rotateControls.camera = this.viewer.getRenderer().renderingCamera; //@ts-ignore this.scaleControls.camera = this.viewer.getRenderer().renderingCamera; }); /** This might not be needed */ // this.cameraProvider.on(CameraEvent.FrameUpdate, (data: boolean) => { // this.allowSelection = !data // }) /** Hook up to le click */ this.viewer.getRenderer().input.on(InputEvent.Click, this.clickHandler.bind(this)); /** Add keyboard event listeners for shift key rotation snapping */ this.setupKeyboardListeners(); /** Start off disabled */ this.enabled = false; } /** * */ /** We use the viewer's frame update to enable/disable the translate and rotate controls * The controls were not meant to be overlayed and working in multiple instance setups * so their input events overlap. It's not the best solution in the world, but it's one * that requires little to no source change */ onEarlyUpdate() { if (this.dragging) return; /** Test the translate gizmos */ const intersectTranslate = intersectObjectWithRay( //@ts-ignore this.translateControls._gizmo.picker['translate'], this.translateControls.getRaycaster()); /** Test the rotate gizmos */ const intersectRotate = intersectObjectWithRay( //@ts-ignore this.rotateControls._gizmo.picker['rotate'], this.rotateControls.getRaycaster()); /** Get the distances if any */ const translatDistance = intersectTranslate ? intersectTranslate.distance : Number.MAX_VALUE; const rotateDistance = intersectRotate ? intersectRotate.distance : Number.MAX_VALUE; /** Enable the closest, disable the other * It's not stupid if it works */ if (translatDistance <= rotateDistance) { this.translateControls._doNotPick = false; this.rotateControls._doNotPick = true; } else { this.translateControls._doNotPick = true; this.rotateControls._doNotPick = false; } } /** Explicit events for the selection tool */ on(eventType, listener) { super.on(eventType, listener); } /** Gets the OBB model */ getBox() { return this.obb; } /** * Sets the OBB model and updates the tool gizmos and box * @param targetBox The box to set. It accepts an aabb as well * @param offset Optional offset */ setBox(targetBox, offset = 0) { /** If no offset is provided we add a tiny factor in order to avoid z-fighting */ offset = offset === 0 ? 0.0001 : offset; if (this.isOBB(targetBox)) { /** Use the offset as a relative value */ const expandedBox = World.expandBoxRelative(targetBox, offset); /** Copy over to the OBB model */ this.obb.center.copy(expandedBox.center); this.obb.halfSize.copy(expandedBox.halfSize); this.obb.rotation.copy(expandedBox.rotation); } else if (this.isAABB(targetBox)) { /** Use an AABB */ let box = new Box3(); box.min.copy(targetBox.min); box.max.copy(targetBox.max); /** Do not allow empty boxes */ if (box.isEmpty()) box = new Box3(new Vector3(-1, -1, -1), new Vector3(1, 1, 1)); /** Use the offset as a relative value */ box = World.expandBoxRelative(targetBox, offset); /** Copy over to the OBB model with no rotation */ this.obb.center.copy(box.getCenter(new Vector3())); this.obb.halfSize.copy(box.getSize(new Vector3()).multiplyScalar(0.5)); this.obb.rotation.identity(); } else Logger.error(`Incorrect argument for setBox ${targetBox}`); /** Update the tool */ this.updatePlanes(); this.updateVisual(); this.emit(SectionToolEvent.Updated, this.planes); } /** * Convenience method */ toggle() { this.enabled = !this._enabled; } /** Gets the transformation defined by the OBB */ getObbTransform() { return new Matrix4().compose(this.obb.center, _quaternion.setFromRotationMatrix(_matrix4.setFromMatrix3(this.obb.rotation)), _vector3.copy(this.obb.halfSize).multiplyScalar(2)); } /** * Creates the controls and all their gizmos */ setupControls() { /** Get the current camera */ const camera = this.viewer.getRenderer().renderingCamera; if (!camera) { throw new Error('Cannot create SectionTool extension. No rendering camera found'); } /** Translate */ this.translateControls = new TransformControls(camera, this.viewer.getRenderer().renderer.domElement); /** Layers are not recursive in three.js. We need to assign them to all objects */ for (let k = 0; k < this.translateControls._root.children.length; k++) { this.translateControls._root.children[k].traverse(obj => { obj.layers.set(ObjectLayers.PROPS); }); } this.translateControls.getRaycaster().layers.set(ObjectLayers.PROPS); this.translateControls.setSize(0.75); this.translateControls.space = 'local'; this.display.add(this.translateControls._root); /** Rotate */ this.rotateControls = new TransformControls(camera, this.viewer.getRenderer().renderer.domElement); /** Layers are not recursive in three.js. We need to assign them to all objects */ for (let k = 0; k < this.rotateControls._root.children.length; k++) { this.rotateControls._root.children[k].traverse(obj => { obj.layers.set(ObjectLayers.PROPS); }); } this.rotateControls.getRaycaster().layers.set(ObjectLayers.PROPS); this.rotateControls.setSize(0.5); this.rotateControls.mode = 'rotate'; this.rotateControls.space = 'local'; this.display.add(this.rotateControls._root); /** Scale */ this.scaleControls = new TransformControls(camera, this.viewer.getRenderer().renderer.domElement); /** Layers are not recursive in three.js. We need to assign them to all objects */ for (let k = 0; k < this.scaleControls._root.children.length; k++) { this.scaleControls._root.children[k].traverse(obj => { obj.layers.set(ObjectLayers.PROPS); }); } this.scaleControls.getRaycaster().layers.set(ObjectLayers.PROPS); this.scaleControls.setSize(0.5); this.scaleControls.mode = 'scale'; this.scaleControls._root.visible = false; this.display.add(this.scaleControls._root); /** Hook into the controls' events.*/ this.translateControls.addEventListener('change', this.changeHandler.bind(this)); this.translateControls.addEventListener('dragging-changed', this.draggingHandler.bind(this)); this.rotateControls.addEventListener('change', this.changeHandler.bind(this)); this.rotateControls.addEventListener('dragging-changed', this.draggingHandler.bind(this)); this.scaleControls.addEventListener('change', this.changeHandler.bind(this)); this.scaleControls.addEventListener('dragging-changed', this.draggingHandler.bind(this)); } /** * Creates an OBB state from the current OBB */ createObbState() { return new OBB().copy(this.obb); } /** * Applies an OBB state to the current OBB */ applyObbState(state) { this.obb.copy(state); } /** * Saves the current section box state to history */ saveToHistory() { const currentState = this.createObbState(); /** If we're not at the latest state and make a new change, remove all future states */ if (this.currentHistoryIndex < this.sectionBoxHistory.length - 1 && this.sectionBoxHistory.length > 1) { /** Keep the initial state and all states up to the current position */ this.sectionBoxHistory = this.sectionBoxHistory.slice(0, this.currentHistoryIndex + 1); } /** Add current state to history */ this.sectionBoxHistory.push(currentState); this.currentHistoryIndex = this.sectionBoxHistory.length - 1; /** Remove oldest states if we exceed the history limit */ if (this.sectionBoxHistory.length > this.maxHistorySize) { this.sectionBoxHistory.shift(); this.currentHistoryIndex = Math.max(0, this.currentHistoryIndex - 1); } } /** * Sets up keyboard event listeners for shift key rotation snapping and undo/redo */ setupKeyboardListeners() { /** Store shift state for use in changeHandler */ this.shiftKeyPressed = false; /** Store references to event listeners for cleanup */ this.keydownHandler = e => { if (e.shiftKey && !this.shiftKeyPressed) { this.shiftKeyPressed = true; } /** Handle Cmd/Ctrl+Z for section box undo */ if ((e.metaKey || e.ctrlKey) && e.key === 'z' && !e.shiftKey) { /** Only allow undo/redo when section box controls are visible */ if (this.enabled && this.visible) { e.preventDefault(); this.undoSectionBox(); } } /** Handle Cmd/Ctrl+Shift+Z for section box redo */ if ((e.metaKey || e.ctrlKey) && e.key === 'z' && e.shiftKey) { /** Only allow undo/redo when section box controls are visible */ if (this.enabled && this.visible) { e.preventDefault(); this.redoSectionBox(); } } }; this.keyupHandler = e => { if (!e.shiftKey && this.shiftKeyPressed) { this.shiftKeyPressed = false; } }; this.viewer.getRenderer().input.on(InputEvent.KeyDown, this.keydownHandler); this.viewer.getRenderer().input.on(InputEvent.KeyUp, this.keyupHandler); } /** * Controls, outline and hitbox update based on the OBB model */ updateVisual() { /** Update the controls */ this.translationRotationAnchor.position.copy(this.obb.center); this.translationRotationAnchor.quaternion.copy(new Quaternion().setFromRotationMatrix(new Matrix4().setFromMatrix3(this.obb.rotation))); this.scaleAnchor.scale.copy(this.obb.halfSize); /** Update the hit box */ this.boxHitMesh.position.copy(this.obb.center); this.boxHitMesh.scale.copy(this.obb.halfSize); this.boxHitMesh.scale.multiplyScalar(2); this.boxHitMesh.quaternion.copy(new Quaternion().setFromRotationMatrix(new Matrix4().setFromMatrix3(this.obb.rotation))); /** Update the visible outline box */ this.updateOutline(); } /** * Triggers when transform interactions start/stop * @param event Controls event */ //@ts-ignore draggingHandler(event) { this.dragging = event.value; if (this.dragging) { /** Save initial state when interaction starts (if this is the first change) */ if (this.sectionBoxHistory.length === 0) { this.sectionBoxHistory.push(this.createObbState()); this.currentHistoryIndex = 0; } this.cameraProvider.enabled = false; if (event.target === this.translateControls) this.rotateControls.detach();else if (event.target === this.rotateControls) this.translateControls.detach(); this.emit(SectionToolEvent.DragStart); } else { /** Save final state when interaction ends */ this.saveToHistory(); this.cameraProvider.enabled = true; if (event.target === this.translateControls) this.rotateControls.attach(this.translationRotationAnchor);else if (event.target === this.rotateControls) this.translateControls.attach(this.translationRotationAnchor); this.emit(SectionToolEvent.DragEnd); } this.viewer.requestRender(); } /** Triggers whenever there is a change in the controls and their gizmos * This is where the model OBB gets updated according to controls changes. * Each control type writes it's data in the anchor's matching property. So: * - Translate control write to it's anchor 'position' * - Rotate control writes to it's anchor 'quaternion' * - Scale control writes to it's anchor 'scale */ //@ts-ignore changeHandler() { /** Just copy over position, rotation and scale*/ this.obb.center.copy(this.translationRotationAnchor.position); /** Apply rotation snapping if shift key is pressed */ let quaternion = this.translationRotationAnchor.quaternion; if (this.shiftKeyPressed) { quaternion = this.snapQuaternionToGrid(quaternion); /** Update the anchor's quaternion to keep visual controls in sync */ this.translationRotationAnchor.quaternion.copy(quaternion); } this.obb.rotation.copy(new Matrix3().setFromMatrix4(new Matrix4().makeRotationFromQuaternion(quaternion))); this.obb.halfSize.copy(this.scaleAnchor.scale); /** If there is a change in scale we need to adjust translation since we can only * push/pull a single face at a time. Simply applying a scale will bilaterally * increase the size of the box */ if (!this.lastScale) this.lastScale = new Vector3().copy(this.scaleAnchor.scale); /** Get a scale delta */ this.lastScale.sub(this.scaleAnchor.scale); this.lastScale.negate(); if (this.draggingFace) { /** Get the face normal and apply the current rotation */ const dir = new Vector3().copy(this.draggingFace.normal).applyQuaternion(new Quaternion().setFromRotationMatrix(new Matrix4().setFromMatrix3(this.obb.rotation))).normalize(); /** Compute the amount we need to adjust the box center */ const scalar = Math.abs(this.draggingFace.normal.x) * this.lastScale.x + Math.abs(this.draggingFace.normal.y) * this.lastScale.y + Math.abs(this.draggingFace.normal.z) * this.lastScale.z; dir.multiplyScalar(scalar); /** Apply the adjustment */ this.obb.center.sub(dir); } this.lastScale.copy(this.scaleAnchor.scale); /** Update everything */ this.updatePlanes(); this.updateVisual(); this.updateFaceControls(this.draggingFace); this.viewer.requestRender(); } /** * Handler used for detecting when we click on the box faces * @param args NDC pointer coords + original event + multiselect * @returns */ clickHandler(args) { if (this.dragging) return; if (!this.enabled || !this.visible) return; /** We only test against our hit box mesh */ this.raycaster.setFromCamera(args, this.cameraProvider.renderingCamera); let intersectedObjects = []; intersectedObjects = this.raycaster.intersectObject(this.boxHitMesh); /** If we did not hit it, reset it to default */ if (!intersectedObjects.length) { this.translateControls.attach(this.translationRotationAnchor); this.rotateControls.attach(this.translationRotationAnchor); this.scaleControls.detach(); this.facePlane.visible = false; this.draggingFace = null; return; } /** If we have a hit hide translate and rotate and show scale controls */ this.draggingFace = intersectedObjects[0].face; this.translateControls.detach(); this.rotateControls.detach(); this.scaleControls.attach(this.scaleAnchor); this.updateFaceControls(this.draggingFace); } /** * Computes the final box planes from the unit cube planes * transformed against the current OBB model */ updatePlanes() { /** Build the matrix */ const obbMatrix = this.getObbTransform(); /** Determine if there is a change */ let obbChanged = false; for (let i = 0; i < 16; i++) { if (Math.abs(obbMatrix.elements[i] - this.lastObbTransform.elements[i]) > 1e-6) { obbChanged = true; break; } } /** If there is no change return */ if (!obbChanged) return; /** Compute final planes */ for (let k = 0; k < this.localPlanes.length; k++) { this.planes[k].copy(this.localPlanes[k]); this.planes[k].applyMatrix4(obbMatrix); } /** Set the viewer's clipping planes and notify*/ this.viewer.getRenderer().clippingPlanes = this.planes; this.viewer.getRenderer().clippingVolume = this.getBox(); this.emit(SectionToolEvent.Updated, this.planes); this.lastObbTransform.copy(obbMatrix); } /** * Creates the plane mesh that will be shown when selecting a box face * It's RTE enabled */ createFacePlane() { /** Unit plane */ const facePlaneGeometry = new PlaneGeometry(1, 1); /** RTE attributes */ Geometry.updateRTEGeometry(facePlaneGeometry, new Float32Array(12)); facePlaneGeometry.attributes.position.setUsage(DynamicDrawUsage); facePlaneGeometry.attributes['position_low'].setUsage(DynamicDrawUsage); /** Make a regular mesh */ const facePlane = new Mesh(facePlaneGeometry, new SpeckleStandardMaterial({ transparent: true, side: DoubleSide, opacity: 0.1, wireframe: false, color: 0x0a66ff, metalness: 0.1, roughness: 0.75 }, ['USE_RTE'])); facePlane.layers.set(ObjectLayers.PROPS); facePlane.renderOrder = 5; // This is probably not needed facePlane.frustumCulled = false; return facePlane; } /** * Updates the scale control and plane mesh when a cube face is selected * @param face The face we're pulling/pushing * @returns void */ updateFaceControls(face) { if (!face) return; const vertices = this.boxHitMesh.geometry.attributes.position; /** Get the face from the LUT */ //@ts-ignore const cubeFace = this.cubeFaces[`${face.a}${face.b}${face.c}`]; /** Diagonal endponints */ const v0 = new Vector3().fromBufferAttribute(vertices, cubeFace.verts[0]); const v3 = new Vector3().fromBufferAttribute(vertices, cubeFace.verts[3]); /** Middle point of the diagonal */ const faceCenter = new Vector3((v0.x + v3.x) / 2, (v0.y + v3.y) / 2, (v0.z + v3.z) / 2); /** Compute OBB matrix */ const obbMatrix = this.getObbTransform(); /** Apply it to the unit diagonal middle point and face normal */ faceCenter.applyMatrix4(obbMatrix); const faceQuat = new Quaternion().setFromUnitVectors(new Vector3().copy(cubeFace.normal).negate(), face.normal); faceQuat.premultiply(new Quaternion().setFromRotationMatrix(new Matrix4().setFromMatrix3(this.obb.rotation))); /** Set the scale control's anchor position and orientation */ this.scaleAnchor.position.copy(faceCenter); this.scaleAnchor.quaternion.copy(faceQuat); // this.scaleAnchor.scale.copy(this.obb.halfSize) /** We only show one axis based on the face normal we're pulling/pushing */ //@ts-ignore this.scaleControls.showX = cubeFace.axis === 'x'; //@ts-ignore this.scaleControls.showY = cubeFace.axis === 'y'; //@ts-ignore this.scaleControls.showZ = cubeFace.axis === 'z'; /** Update the face plane highlight */ this.facePlane.visible = true; /** Copy the other two vrtices, first two are at the top */ const v1 = new Vector3().fromBufferAttribute(vertices, cubeFace.verts[1]); const v2 = new Vector3().fromBufferAttribute(vertices, cubeFace.verts[2]); /** Transform them */ v0.applyMatrix4(obbMatrix); v1.applyMatrix4(obbMatrix); v2.applyMatrix4(obbMatrix); v3.applyMatrix4(obbMatrix); /** Copy them to a scratch array. We can afford to do this, it's only 4 verts */ v0.toArray(scratchPlaneArray, 0); v1.toArray(scratchPlaneArray, 3); v2.toArray(scratchPlaneArray, 6); v3.toArray(scratchPlaneArray, 9); const posAttr = this.facePlane.geometry.attributes['position']; // prettier-ignore const posAttrLow = this.facePlane.geometry.attributes['position_low']; /** Split the positions straight in the high/low attributes */ Geometry.DoubleToHighLowBuffer(scratchPlaneArray, posAttrLow.array, posAttr.array); posAttr.needsUpdate = true; posAttrLow.needsUpdate = true; } /** Creates the geometry for the visible outline of the section tool */ createOutline() { /** We start from the unit cube's edges */ const buffer = unitCubeEdges.slice(); /** Create the line segments geometry */ const lineGeometry = new LineSegmentsGeometry(); lineGeometry.setPositions(buffer); lineGeometry.attributes['instanceStart'].data.setUsage(DynamicDrawUsage); /** RTE it */ Geometry.updateRTEGeometry(lineGeometry, buffer); /** Line material */ const material = new SpeckleLineMaterial({ color: 0x047efb, linewidth: 1, worldUnits: false, vertexColors: false, alphaToCoverage: false, resolution: new Vector2(32, 32) }, ['USE_RTE']); material.color = new Color(0x047efb); material.color.convertSRGBToLinear(); material.linewidth = 1; material.worldUnits = false; material.resolution = new Vector2(32, 32); material.toneMapped = false; /** Create the displayable object */ const clipOutline = new LineSegments2(lineGeometry, material); clipOutline.name = `oriented-box-outline`; clipOutline.frustumCulled = false; clipOutline.renderOrder = 1; clipOutline.layers.set(ObjectLayers.PROPS); return clipOutline; } /** Updates the section tool outline by updating it's vertices * We chose to do it this way in order have RTE working */ updateOutline() { /** Compute the OBB matrix */ const obbMatrix = this.getObbTransform(); /** Transform the unit cube edges with the OBB matrix */ const vec = new Vector3(); for (let k = 0; k < unitCubeEdges.length; k += 3) { vec.fromArray(unitCubeEdges, k); vec.applyMatrix4(obbMatrix); scratchArray[k] = vec.x; scratchArray[k + 1] = vec.y; scratchArray[k + 2] = vec.z; } /** Split the result into the high/low attribute buffers */ const posAttr = this.boxOutline.geometry.attributes['instanceStart'].data; const posAttrLow = this.boxOutline.geometry.attributes['instanceStartLow'].data; Geometry.DoubleToHighLowBuffer(scratchArray, posAttrLow.array, posAttr.array); this.boxOutline.geometry.attributes['instanceStart'].needsUpdate = true; this.boxOutline.geometry.attributes['instanceEnd'].needsUpdate = true; this.boxOutline.geometry.attributes['instanceStartLow'].needsUpdate = true; this.boxOutline.geometry.attributes['instanceEndLow'].needsUpdate = true; } /** Creates a unit cube geometry instance*/ createCubeGeometry() { const vertices = unitCube.slice(); const indexes = unitCubeIndices.slice(); const g = new BufferGeometry(); g.setAttribute('position', new Float32BufferAttribute(vertices, 3)); g.setIndex(new Uint16BufferAttribute(indexes, 1)); g.computeBoundingBox(); g.computeVertexNormals(); return g; } /** Restes the gizmos. Honestly not sure if it does anything meaningfull */ reset() { this.translateControls.reset(); this.translateControls.reset(); this.scaleControls.reset(); } /** Type guards */ isAABB(box) { return box instanceof Box3 || 'min' in box && 'max' in box; } isOBB(box) { return box instanceof OBB; } /** * Snaps a quaternion to the nearest grid based on rotationSnapAngle. * This is useful for rotation snapping. * @param q The quaternion to snap. * @returns The snapped quaternion. */ snapQuaternionToGrid(q) { /** Convert quaternion to Euler angles using pooled object */ _tempEuler.setFromQuaternion(q); /** Snap each axis to the configured angle increments */ if (this.rotationSnapAngle !== null) { _tempEuler.x = Math.round(_tempEuler.x / this.rotationSnapAngle) * this.rotationSnapAngle; _tempEuler.y = Math.round(_tempEuler.y / this.rotationSnapAngle) * this.rotationSnapAngle; _tempEuler.z = Math.round(_tempEuler.z / this.rotationSnapAngle) * this.rotationSnapAngle; } /** Convert back to quaternion using pooled object */ _tempQuaternion.setFromEuler(_tempEuler); return _tempQuaternion; } /** * Undoes the last section box change */ undoSectionBox() { if (this.currentHistoryIndex > 0) { /** Move cursor back */ this.currentHistoryIndex--; /** Get the state at current cursor position */ const previousState = this.sectionBoxHistory[this.currentHistoryIndex]; if (previousState) { /** Apply the previous state */ this.applyObbState(previousState); /** Update visual state */ this.updatePlanes(); this.updateVisual(); this.updateFaceControls(this.draggingFace); /** Update section outlines */ const sectionOutlines = this.viewer.getExtension(SectionOutlines); if (sectionOutlines && sectionOutlines.enabled) { sectionOutlines.requestUpdate(true); } this.viewer.requestRender(); } } } /** * Redoes the last undone section box change */ redoSectionBox() { if (this.currentHistoryIndex < this.sectionBoxHistory.length - 1) { /** Move cursor forward */ this.currentHistoryIndex++; /** Get the state at current cursor position */ const nextState = this.sectionBoxHistory[this.currentHistoryIndex]; if (nextState) { /** Apply the next state */ this.applyObbState(nextState); /** Update visual state */ this.updatePlanes(); this.updateVisual(); this.updateFaceControls(this.draggingFace); /** Update section outlines */ const sectionOutlines = this.viewer.getExtension(SectionOutlines); if (sectionOutlines && sectionOutlines.enabled) { sectionOutlines.requestUpdate(true); } this.viewer.requestRender(); } } } /** * Cleanup method to remove event listeners and prevent memory leaks */ dispose() { if (this.keydownHandler) { this.viewer.getRenderer().input.removeListener(InputEvent.KeyDown, this.keydownHandler); } if (this.keyupHandler) { this.viewer.getRenderer().input.removeListener(InputEvent.KeyUp, this.keyupHandler); } } } var PlaneId; (function (PlaneId) { PlaneId["POSITIVE_X"] = "POSITIVE_X"; PlaneId["POSITIVE_Y"] = "POSITIVE_Y"; PlaneId["POSITIVE_Z"] = "POSITIVE_Z"; PlaneId["NEGATIVE_X"] = "NEGATIVE_X"; PlaneId["NEGATIVE_Y"] = "NEGATIVE_Y"; PlaneId["NEGATIVE_Z"] = "NEGATIVE_Z"; })(PlaneId || (PlaneId = {})); class SectionOutlines extends Extension { get inject() { return [SectionTool]; } constructor(viewer, sectionProvider) { super(viewer); this.sectionProvider = sectionProvider; this.tmpVec = new Vector3(); this.up = new Vector3(0, 1, 0); this.down = new Vector3(0, -1, 0); this.left = new Vector3(-1, 0, 0); this.right = new Vector3(1, 0, 0); this.forward = new Vector3(0, 0, 1); this.back = new Vector3(0, 0, -1); this.planeOutlines = {}; this.lastSectionPlanes = []; this.sectionPlanesChanged = []; this.planeOutlines[PlaneId.POSITIVE_X] = this.createPlaneOutline(PlaneId.POSITIVE_X); this.planeOutlines[PlaneId.NEGATIVE_X] = this.createPlaneOutline(PlaneId.NEGATIVE_X); this.planeOutlines[PlaneId.POSITIVE_Y] = this.createPlaneOutline(PlaneId.POSITIVE_Y); this.planeOutlines[PlaneId.NEGATIVE_Y] = this.createPlaneOutline(PlaneId.NEGATIVE_Y); this.planeOutlines[PlaneId.NEGATIVE_Z] = this.createPlaneOutline(PlaneId.NEGATIVE_Z); this.planeOutlines[PlaneId.POSITIVE_Z] = this.createPlaneOutline(PlaneId.POSITIVE_Z); const sectionOutlinesGroup = new Group(); sectionOutlinesGroup.name = 'SectionBoxOutlines'; this.viewer.getRenderer().scene.add(sectionOutlinesGroup); sectionOutlinesGroup.add(this.getPlaneOutline(PlaneId.NEGATIVE_Z).renderable); sectionOutlinesGroup.add(this.getPlaneOutline(PlaneId.POSITIVE_Z).renderable); sectionOutlinesGroup.add(this.getPlaneOutline(PlaneId.POSITIVE_X).renderable); sectionOutlinesGroup.add(this.getPlaneOutline(PlaneId.NEGATIVE_X).renderable); sectionOutlinesGroup.add(this.getPlaneOutline(PlaneId.POSITIVE_Y).renderable); sectionOutlinesGroup.add(this.getPlaneOutline(PlaneId.NEGATIVE_Y).renderable); this.lastSectionPlanes.push(new Plane(), new Plane(), new Plane(), new Plane(), new Plane(), new Plane()); this.sectionProvider.on(SectionToolEvent.DragStart, this.onSectionBoxDragStart.bind(this)); this.sectionProvider.on(SectionToolEvent.DragEnd, this.onSectionBoxDragEnd.bind(this)); this.sectionProvider.on(SectionToolEvent.Updated, this.sectionUpdated.bind(this)); } getPlaneOutline(planeId) { return this.planeOutlines[planeId]; } get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; for (const k in this.planeOutlines) { this.planeOutlines[k].renderable.visible = value; } } sectionUpdated(planes) { if (!this.sectionProvider.enabled) this.enabled = false; for (const plane in this.planeOutlines) { const clippingPlanes = planes.filter(value => this.getPlaneId(value) !== plane); this.planeOutlines[plane].renderable.material.clippingPlanes = clippingPlanes; } } requestUpdate(force = false) { this.setSectionPlaneChanged(this.viewer.getRenderer().clippingPlanes); this.updateOutlines(force ? this.viewer.getRenderer().clippingPlanes : this.sectionPlanesChanged); } updatePlaneOutline(batches, _plane, outlineOffset) { const tempVector = new Vector3(); const tempVector1 = new Vector3(); const tempVector2 = new Vector3(); const tempVector3 = new Vector3(); const tempVector4 = new Vector3(); const tempLine = new Line3(); const planeId = this.getPlaneId(_plane); if (!planeId) { Logger.error(`Invalid plane! Aborting section outline update`, _plane.normal); return; } const clipOutline = this.planeOutlines[planeId].renderable; let index = 0; let posAttr = clipOutline.geometry.attributes['instanceStart'].data; /** Not a fan of this, but we have no choice. We can't know beforehand the resulting number of intersection points */ const scratchBuffer = new Array(); for (let b = 0; b < batches.length; b++) { const plane = new Plane().copy(_plane); batches[b].mesh.TAS.shapecast({ intersectsTAS: (box // isLeaf: boolean, // score: number | undefined, // depth: number, // nodeIndex: number ) => { const localPlane = plane; return localPlane.intersectsBox(box); }, intersectsBounds: box => { const localPlane = plane; return localPlane.intersectsBox(box); }, intersectsTriangle(tri, _i, _contained, _depth, batchObject) { /** Catering to typescript */ /** We're intersecting the AS for meshes. There will always be a batchObject */ if (!batchObject) { throw new Error('Null batch object in AS intersection!'); } // check each triangle edge to see if it intersects with the plane. If so then // add it to the list of segments. const material = batches[b].mesh.getBatchObjectMaterial(batchObject); if (material instanceof SpeckleGhostMaterial || material.visible === false || material === null) return; const localPlane = plane; let count = 0; tempLine.start.copy(tri.a); tempLine.end.copy(tri.b); if (localPlane.intersectLine(tempLine, tempVector)) { tempVector.add(tempVector4.copy(plane.normal).multiplyScalar(-outlineOffset)); scratchBuffer[index * 3] = tempVector.x; scratchBuffer[index * 3 + 1] = tempVector.y; scratchBuffer[index * 3 + 2] = tempVector.z; index++; count++; } tempLine.start.copy(tri.b); tempLine.end.copy(tri.c); if (localPlane.intersectLine(tempLine, tempVector)) { tempVector.add(tempVector4.copy(plane.normal).multiplyScalar(-outlineOffset)); scratchBuffer[index * 3] = tempVector.x; scratchBuffer[index * 3 + 1] = tempVector.y; scratchBuffer[index * 3 + 2] = tempVector.z; count++; index++; } tempLine.start.copy(tri.c); tempLine.end.copy(tri.a); if (localPlane.intersectLine(tempLine, tempVector)) { tempVector.add(tempVector4.copy(plane.normal).multiplyScalar(-outlineOffset)); scratchBuffer[index * 3] = tempVector.x; scratchBuffer[index * 3 + 1] = tempVector.y; scratchBuffer[index * 3 + 2] = tempVector.z; count++; index++; } // When the plane passes through a vertex and one of the edges of the triangle, there will be three intersections, two of which must be repeated if (count === 3) { tempVector1.set(scratchBuffer[(index - 3) * 3], scratchBuffer[(index - 3) * 3 + 1], scratchBuffer[(index - 3) * 3 + 2]); tempVector2.set(scratchBuffer[(index - 2) * 3], scratchBuffer[(index - 2) * 3 + 1], scratchBuffer[(index - 2) * 3 + 2]); tempVector3.set(scratchBuffer[(index - 1) * 3], scratchBuffer[(index - 1) * 3 + 1], scratchBuffer[(index - 1) * 3 + 2]); // If the last point is a duplicate intersection if (tempVector3.equals(tempVector1) || tempVector3.equals(tempVector2)) { count--; index--; } else if (tempVector1.equals(tempVector2)) { // If the last point is not a duplicate intersection // Set the penultimate point as a distinct point and delete the last point tempVector3.set(tempVector.x, tempVector.y, tempVector.z); tempVector3.add(tempVector4.copy(plane.normal).multiplyScalar(-outlineOffset)); scratchBuffer[(index - 2) * 3] = tempVector3.x; scratchBuffer[(index - 2) * 3 + 1] = tempVector3.y; scratchBuffer[(index - 2) * 3 + 2] = tempVector3.z; count--; index--; } } // If we only intersected with one or three sides then just remove it. This could be handled // more gracefully. if (count !== 2) { index -= count; } } }); } if (scratchBuffer.length > posAttr.array.length) { this.resizeGeometryBuffer(this.planeOutlines[planeId], scratchBuffer.length); console.warn(`Resized outline buffer from ${posAttr.array.length} to ${scratchBuffer.length}. ${scratchBuffer.length / 6} instance count`); } posAttr = clipOutline.geometry.attributes['instanceStart'].data; const posAttrLow = clipOutline.geometry.attributes['instanceStartLow'].data; Geometry.DoubleToHighLowBuffer(scratchBuffer, posAttrLow.array, posAttr.array); // posAttr.set(scratchBuffer, 0) posAttr.needsUpdate = true; posAttr.updateRange = { offset: 0, count: index * 3 }; posAttrLow.needsUpdate = true; posAttrLow.updateRange = { offset: 0, count: index * 3 }; clipOutline.visible = true; clipOutline.geometry.instanceCount = index / 2; clipOutline.geometry.attributes['instanceStart'].needsUpdate = true; clipOutline.geometry.attributes['instanceEnd'].needsUpdate = true; clipOutline.geometry.attributes['instanceStartLow'].needsUpdate = true; clipOutline.geometry.attributes['instanceEndLow'].needsUpdate = true; clipOutline.geometry.computeBoundingBox(); clipOutline.geometry.computeBoundingSphere(); } createPlaneOutline(planeId) { const buffer = new Float64Array(SectionOutlines.INITIAL_BUFFER_SIZE); const lineGeometry = new LineSegmentsGeometry(); /** We need to re-allocate, otherwise three.js will do it anyway */ lineGeometry.setPositions(new Float32Array(buffer)); lineGeometry.attributes['instanceStart'].data.setUsage(DynamicDrawUsage); Geometry.updateRTEGeometry(lineGeometry, buffer); const material = new SpeckleLineMaterial({ color: 0x047efb, linewidth: 2, worldUnits: false, vertexColors: false, alphaToCoverage: false, resolution: new Vector2(919, 848) }, ['USE_RTE']); material.color = new Color(0x047efb); material.color.convertSRGBToLinear(); material.linewidth = 2; material.worldUnits = false; material.resolution = new Vector2(1513, 1306); const clipOutline = new LineSegments2(lineGeometry, material); clipOutline.name = `${planeId}-outline`; clipOutline.frustumCulled = false; clipOutline.renderOrder = 1; clipOutline.layers.set(ObjectLayers.PROPS); clipOutline.visible = false; return { renderable: clipOutline }; } onSectionBoxDragStart() { this.enabled = false; } onSectionBoxDragEnd() { this.setSectionPlaneChanged(this.viewer.getRenderer().clippingPlanes); this.updateOutlines(this.sectionPlanesChanged); /** 22.03.2025: This became obsolete once we switched to OrientedSectionTool */ // const generate = () => { // this.setSectionPlaneChanged(this.viewer.getRenderer().clippingPlanes) // this.updateOutlines(this.sectionPlanesChanged) // this.sectionProvider.removeListener(SectionToolEvent.Updated, generate) // } // this.sectionProvider.on(SectionToolEvent.Updated, generate) } setSectionPlaneChanged(planes) { this.sectionPlanesChanged.length = 0; const epsilon = this.viewer.World.getRelativeOffset(0.0001); for (let k = 0; k < planes.length; k++) { if (Math.abs(this.lastSectionPlanes[k].constant - planes[k].constant) > epsilon || Math.abs(this.lastSectionPlanes[k].normal.length() - planes[k].normal.length()) > epsilon) this.sectionPlanesChanged.push(planes[k]); this.lastSectionPlanes[k].copy(planes[k]); } } updateOutlines(planes) { const start = performance.now(); const outlineOffset = this.viewer.World.getRelativeOffset(SectionOutlines.OUTLINE_Z_OFFSET); for (let k = 0; k < planes.length; k++) { this.updatePlaneOutline(this.viewer.getRenderer().batcher.getBatches(undefined, GeometryType.MESH), planes[k], outlineOffset); } this.enabled = this.sectionProvider.enabled; Logger.warn('Outline time: ', performance.now() - start); } resizeGeometryBuffer(outline, size) { outline.renderable.geometry.dispose(); const buffer = new Float32Array(size); outline.renderable.geometry = new LineSegmentsGeometry(); outline.renderable.geometry.setPositions(buffer); outline.renderable.geometry.attributes['instanceStart'].data.setUsage(DynamicDrawUsage); Geometry.updateRTEGeometry(outline.renderable.geometry, buffer); } getPlaneId(plane) { this.tmpVec.set(plane.normal.x, plane.normal.y, plane.normal.z); let box = this.sectionProvider.getBox(); if (box instanceof Box3) box = new OBB().fromBox3(box); const invRotation = new Matrix4().setFromMatrix3(box.rotation).invert(); this.tmpVec.applyMatrix4(invRotation).normalize(); this.tmpVec.set(Math.round(this.tmpVec.x), Math.round(this.tmpVec.y), Math.round(this.tmpVec.z)); if (this.tmpVec.equals(this.right)) return PlaneId.POSITIVE_X; if (this.tmpVec.equals(this.left)) return PlaneId.NEGATIVE_X; if (this.tmpVec.equals(this.up)) return PlaneId.POSITIVE_Y; if (this.tmpVec.equals(this.down)) return PlaneId.NEGATIVE_Y; if (this.tmpVec.equals(this.back)) return PlaneId.NEGATIVE_Z; if (this.tmpVec.equals(this.forward)) return PlaneId.POSITIVE_Z; return undefined; } } SectionOutlines.OUTLINE_Z_OFFSET = 0.0001; SectionOutlines.INITIAL_BUFFER_SIZE = 60000; // Must be a multiple of 6 class FilteringExtension extends Extension { get filteringState() { return this.CurrentFilteringState; } get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; } constructor(viewer) { super(viewer); this.StateKey = undefined; this.VisibilityState = new VisibilityState(); this.ColorStringFilterState = null; this.ColorNumericFilterState = null; this.UserspaceColorState = new UserspaceColorState(); this.CurrentFilteringState = {}; this.idCache = {}; this.WTI = this.viewer.getWorldTree(); this.Renderer = this.viewer.getRenderer(); } hideObjects(objectIds, stateKey = undefined, includeDescendants = false, ghost = false) { return this.setVisibilityState(objectIds, stateKey, Command.HIDE, includeDescendants, ghost); } showObjects(objectIds, stateKey = undefined, includeDescendants = false) { return this.setVisibilityState(objectIds, stateKey, Command.SHOW, includeDescendants); } isolateObjects(objectIds, stateKey = undefined, includeDescendants = true, ghost = true) { return this.setVisibilityState(objectIds, stateKey, Command.ISOLATE, includeDescendants, ghost); } unIsolateObjects(objectIds, stateKey = undefined, includeDescendants = true, ghost = true) { return this.setVisibilityState(objectIds, stateKey, Command.UNISOLATE, includeDescendants, ghost); } setVisibilityState(objectIds, stateKey = undefined, command, includeDescendants = false, ghost = false) { if (stateKey !== this.StateKey || Math.abs(command - this.VisibilityState.command) > 1) { this.VisibilityState.reset(); } this.StateKey = stateKey; this.VisibilityState.rvs = []; this.VisibilityState.ghost = ghost; if (includeDescendants) { objectIds = [...objectIds, ...this.getDescendantIds(objectIds)]; } if (command === Command.SHOW || command === Command.UNISOLATE) { /** Not the most elegant, but fast */ for (let k = 0; k < objectIds.length; k++) { if (this.VisibilityState.ids[objectIds[k]]) delete this.VisibilityState.ids[objectIds[k]]; } } if (command === Command.HIDE || command === Command.ISOLATE) { const res = objectIds.reduce((acc, curr) => (acc[curr] = 1, acc), {}); Object.assign(this.VisibilityState.ids, res); } const enabled = Object.keys(this.VisibilityState.ids).length !== 0; if (!enabled) { this.VisibilityState.command = Command.NONE; return this.setFilters(); } this.VisibilityState.command = command; if (command === Command.HIDE || command === Command.SHOW) this.WTI.walk(this.visibilityWalk.bind(this)); if (command === Command.ISOLATE || command === Command.UNISOLATE) { // this.WTI.walk(this.isolationWalk.bind(this)) const rvMap = {}; this.WTI.walk(node => { if (!node.model.atomic || this.WTI.isRoot(node)) return true; const rvNodes = this.WTI.getRenderTree().getRenderViewNodesForNode(node); if (!this.VisibilityState.ids[node.model.id]) { rvNodes.forEach(rvNode => { if (!this.VisibilityState.ids[rvNode.model.id]) rvMap[rvNode.model.id] = rvNode.model.renderView; }); } else { rvNodes.forEach(rvNode => { delete rvMap[rvNode.model.id]; }); } return true; }); this.VisibilityState.rvs = Object.values(rvMap); } return this.setFilters(); } visibilityWalk(node) { if (this.VisibilityState.ids[node.model.id]) { this.VisibilityState.rvs.push(...this.WTI.getRenderTree().getRenderViewsForNode(node)); } return true; } setColorFilter(prop, ghost = true) { if (prop.type === 'number') { this.ColorStringFilterState = null; return this.setNumericColorFilter(prop, ghost); } if (prop.type === 'string') { this.ColorNumericFilterState = null; return this.setStringColorFilter(prop, ghost); } return this.filteringState; } setNumericColorFilter(numProp, ghost) { this.ColorNumericFilterState = new ColorNumericFilterState(); this.ColorNumericFilterState.currentProp = numProp; const passMin = numProp.passMin || numProp.min; const passMax = numProp.passMax || numProp.max; /** This is the original implementation. Building the ids and values array was not slow per se * but it forced us to use indexOf inside the walk function which was IMMENSELY slow */ // const matchingIds = numProp.valueGroups // .filter((p) => p.value >= passMin && p.value <= passMax) // .map((v) => v.id) // const matchingValues = numProp.valueGroups // .filter((p) => p.value >= passMin && p.value <= passMax) // .map((v) => v.value) /** This is 'un-functionally' slow to build */ // let matchingIds = {} // matchingIds = numProp.valueGroups.reduce((obj, item) => { // return { // ...obj, // [item['id']]: item.value // } // }, matchingIds) /** This is very fast to build. It does suffer from the same issue as the original implementation * as in, if there is an id clash (which will happen for instances), the old implementation's indexOf * would return the first value. Here we choose to do the same */ const matchingIds = {}; for (let k = 0; k < numProp.valueGroups.length; k++) { if (matchingIds[numProp.valueGroups[k].id]) { continue; } if (numProp.valueGroups[k].value >= passMin && numProp.valueGroups[k].value <= passMax) matchingIds[numProp.valueGroups[k].id] = numProp.valueGroups[k].value; } const nonMatchingRvs = []; const colorGroups = []; this.WTI.walk(node => { if (!node.model.atomic || this.WTI.isRoot(node) || this.WTI.isSubtreeRoot(node)) return true; const rvs = this.WTI.getRenderTree().getRenderViewsForNode(node); const idx = matchingIds[node.model.raw.id]; if (idx === undefined) { nonMatchingRvs.push(...rvs); } else { colorGroups.push({ rvs, value: (idx - passMin) / (passMax - passMin) }); } return true; }); this.ColorNumericFilterState.colorGroups = colorGroups; this.ColorNumericFilterState.nonMatchingRvs = nonMatchingRvs; this.ColorNumericFilterState.ghost = ghost; this.ColorNumericFilterState.matchingIds = matchingIds; return this.setFilters(); } setStringColorFilter(stringProp, ghost) { this.ColorStringFilterState = new ColorStringFilterState(); this.ColorStringFilterState.currentProp = stringProp; const valueGroupColors = []; for (const vg of stringProp.valueGroups) { const col = stc(vg.value); // TODO: smarter way needed. const entry = { ...vg, color: new Color(col), rvs: [], idMap: {} }; /** This is to avoid indexOf inside the walk callback which is ridiculously slow */ entry.idMap = {}; for (let k = 0; k < vg.ids.length; k++) { entry.idMap[vg.ids[k]] = 1; } valueGroupColors.push(entry); } const rampTexture = Assets.generateDiscreetRampTexture(valueGroupColors.map(v => v.color.getHex())); // TODO: note that this does not handle well nested element categories. For example, // windows (family instances) inside walls get the same color as the walls, even though // they are identified as a different category. // 07.05.2023: Attempt on fixing the issue described above. This fixes #1525, but it does // add a bit of overhead. Not 100% sure if it breaks anything else tho' const nonMatchingMap = {}; this.WTI.walk(node => { if (!node.model.atomic || this.WTI.isRoot(node) || this.WTI.isSubtreeRoot(node)) { return true; } const vg = valueGroupColors.find(v => { return v.idMap[node.model.raw.id]; }); const rvNodes = this.WTI.getRenderTree().getRenderViewNodesForNode(node); if (!vg) { rvNodes.forEach(rvNode => nonMatchingMap[rvNode.model.renderView.renderData.id] = rvNode.model.renderView); return true; } const rvs = []; rvNodes.forEach(value => { if (this.WTI.getRenderTree().getAtomicParent(value) === node) { rvs.push(value.model.renderView); /** In some cases, the same rv gets put in both non-matching and matching lists because of its hierarchy */ delete nonMatchingMap[value.model.renderView.renderData.id]; } }); vg.rvs.push(...rvs); return true; }); const nonMatchingRvs = Object.values(nonMatchingMap); /** Deleting this since we're not going to use it further */ for (const vg of valueGroupColors) { /** Adamant on this one */ // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore delete vg.idMap; } this.ColorStringFilterState.colorGroups = valueGroupColors; this.ColorStringFilterState.rampTexture = rampTexture; this.ColorStringFilterState.nonMatchingRvs = nonMatchingRvs; this.ColorStringFilterState.ghost = ghost; return this.setFilters(); } removeColorFilter() { if (this.ColorNumericFilterState || this.ColorStringFilterState) { this.ColorStringFilterState = null; this.ColorNumericFilterState = null; return this.setFilters(); } return this.filteringState; } setUserObjectColors(groups) { this.UserspaceColorState = new UserspaceColorState(); // Resetting any other filtering color ops as they're not compatible this.ColorNumericFilterState = null; this.ColorStringFilterState = null; const localGroups = groups.map(g => { return { ...g, nodes: [], rvs: [] }; }); for (const group of localGroups) { for (let k = 0; k < group.objectIds.length; k++) { const nodes = this.WTI.findId(group.objectIds[k]); if (nodes) { group.nodes.push(...nodes); nodes.forEach(node => { const rvsNodes = this.WTI.getRenderTree().getRenderViewNodesForNode(node).map(rvNode => rvNode.model.renderView); if (rvsNodes) group.rvs.push(...rvsNodes); }); } } } this.UserspaceColorState.groups = localGroups; const rampTexture = Assets.generateDiscreetRampTexture(groups.map(g => new Color(g.color).getHex())); this.UserspaceColorState.rampTexture = rampTexture; return this.setFilters(); } removeUserObjectColors() { this.UserspaceColorState = null; return this.setFilters(); } resetFilters() { this.VisibilityState = new VisibilityState(); this.ColorStringFilterState = null; this.ColorNumericFilterState = null; this.UserspaceColorState = null; this.StateKey = undefined; this.Renderer.resetMaterials(); this.CurrentFilteringState = {}; this.viewer.requestRender(UpdateFlags.RENDER_RESET | UpdateFlags.SHADOWS); this.emit(ViewerEvent.FilteringStateSet, this.CurrentFilteringState); return null; } setFilters() { var _a, _b; this.viewer.getRenderer().resetMaterials(); this.CurrentFilteringState = {}; // String based colors if (this.ColorStringFilterState) { this.CurrentFilteringState.colorGroups = []; let k = -1; for (const group of this.ColorStringFilterState.colorGroups) { k++; this.Renderer.setMaterial(group.rvs, { filterType: FilterMaterialType.COLORED, rampIndex: k / this.ColorStringFilterState.colorGroups.length, rampIndexColor: group.color, rampTexture: this.ColorStringFilterState.rampTexture }); this.CurrentFilteringState.colorGroups.push({ value: group.value, color: group.color.getHexString(), ids: group.ids }); if (this.ColorStringFilterState.currentProp) this.CurrentFilteringState.activePropFilterKey = this.ColorStringFilterState.currentProp.key; } } // Number based colors if (this.ColorNumericFilterState) { for (const group of this.ColorNumericFilterState.colorGroups) { this.Renderer.setMaterial(group.rvs, { filterType: FilterMaterialType.GRADIENT, rampIndex: group.value }); } /** This doesn't seem to be required as it's called further down */ // const ghostNonMatching = this.ColorNumericFilterState.nonMatchingRvs // if (ghostNonMatching.length) { // this.Renderer.setMaterial(ghostNonMatching, { // filterType: FilterMaterialType.GHOST // }) // } this.CurrentFilteringState.activePropFilterKey = this.ColorNumericFilterState.currentProp.key; this.CurrentFilteringState.passMin = this.ColorNumericFilterState.currentProp.passMin || this.ColorNumericFilterState.currentProp.min; this.CurrentFilteringState.passMax = this.ColorNumericFilterState.currentProp.passMax || this.ColorNumericFilterState.currentProp.max; this.CurrentFilteringState.isolatedObjects = Object.keys(this.ColorNumericFilterState.matchingIds); } const isShowHide = this.VisibilityState.command === Command.HIDE || this.VisibilityState.command === Command.SHOW; const isIsolate = this.VisibilityState.command === Command.ISOLATE || this.VisibilityState.command === Command.UNISOLATE; if (isShowHide || isIsolate) { this.Renderer.setMaterial(this.VisibilityState.rvs, { filterType: this.VisibilityState.ghost ? FilterMaterialType.GHOST : FilterMaterialType.HIDDEN }); if (isShowHide) this.CurrentFilteringState.hiddenObjects = Object.keys(this.VisibilityState.ids); if (isIsolate) this.CurrentFilteringState.isolatedObjects = Object.keys(this.VisibilityState.ids); } const nonMatchingRvs = ((_a = this.ColorStringFilterState) === null || _a === void 0 ? void 0 : _a.nonMatchingRvs) || ((_b = this.ColorNumericFilterState) === null || _b === void 0 ? void 0 : _b.nonMatchingRvs); let ghostNonMatching = false; if (this.ColorStringFilterState) ghostNonMatching = this.ColorStringFilterState.ghost; if (this.ColorNumericFilterState) ghostNonMatching = this.ColorNumericFilterState.ghost; if (nonMatchingRvs) { this.Renderer.setMaterial(nonMatchingRvs, { filterType: ghostNonMatching ? FilterMaterialType.GHOST : FilterMaterialType.HIDDEN // TODO: ghost }); } if (this.UserspaceColorState) { this.CurrentFilteringState.userColorGroups = []; let m = -1; for (const group of this.UserspaceColorState.groups) { m++; this.Renderer.setMaterial(group.rvs, { filterType: FilterMaterialType.COLORED, rampIndex: m / this.UserspaceColorState.groups.length, rampIndexColor: new Color(group.color), rampTexture: this.UserspaceColorState.rampTexture }); this.CurrentFilteringState.userColorGroups.push({ ids: group.objectIds, color: group.color //.getHexString() }); } } this.Renderer.viewer.requestRender(UpdateFlags.RENDER_RESET | UpdateFlags.SHADOWS | UpdateFlags.CLIPPING_PLANES); this.emit(ViewerEvent.FilteringStateSet, this.CurrentFilteringState); return this.CurrentFilteringState; } getDescendantIds(objectIds) { const allIds = []; const key = objectIds.join(','); if (this.idCache[key] && this.idCache[key].length) return this.idCache[key]; for (let k = 0; k < objectIds.length; k++) { const nodes = this.WTI.findId(objectIds[k]); if (!nodes) continue; const node = nodes[0]; const subtree = node.all(node => { return node.model.raw !== undefined; }); const idList = subtree.map(node => node.model.raw.id); allIds.push(...idList); this.idCache[node.model.raw.id] = idList; } // this.WTI.walk((node: TreeNode) => { // if (objectIds.includes(node.model.raw.id)) { // const subtree = node.all((node) => { // return node.model.raw !== undefined // }) // const idList = subtree.map((node) => node.model.raw.id) // allIds.push(...idList) // this.idCache[node.model.raw.id] = idList // } // return true // }) this.idCache[key] = allIds; return allIds; } } var Command; (function (Command) { Command[Command["HIDE"] = 10] = "HIDE"; Command[Command["SHOW"] = 11] = "SHOW"; Command[Command["ISOLATE"] = 20] = "ISOLATE"; Command[Command["UNISOLATE"] = 21] = "UNISOLATE"; Command[Command["NONE"] = 30] = "NONE"; })(Command || (Command = {})); class VisibilityState { constructor() { this.command = Command.NONE; this.ghost = true; this.ids = {}; this.rvs = []; } reset() { this.ghost = true; this.ids = {}; this.rvs = []; } } class ColorStringFilterState { constructor() { this.ghost = true; } reset() { this.currentProp = null; this.colorGroups = []; this.nonMatchingRvs = []; this.rampTexture = undefined; } } class ColorNumericFilterState { constructor() { this.ghost = true; } } class UserspaceColorState { constructor() { this.groups = []; } reset() { this.groups = []; } } var ExplodeEvent; (function (ExplodeEvent) { ExplodeEvent["Finshed"] = "explode-finished"; })(ExplodeEvent || (ExplodeEvent = {})); class ExplodeExtension extends Extension { constructor() { super(...arguments); this._enabled = true; this.explodeTime = -1; this.explodeRange = 0; this.explodeOrigin = new Vector3(); } get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; } /** Similar to SpeckleRenderer's visibleSceneBox, but with static boxes from render views */ get visibleWorld() { const bounds = new Box3(); const scratchBox = new Box3(); const batches = this.viewer.getRenderer().batcher.getBatches(); for (let k = 0; k < batches.length; k++) { const batch = batches[k]; const rvs = batch.renderViews.slice(); rvs.sort((a, b) => { return a.batchStart - b.batchStart; }); const visibleRange = batch.getVisibleRange(); let lo = 0, hi = rvs.length; while (lo < hi) { const mid = lo + hi >>> 1; if (rvs[mid].batchStart < visibleRange.offset) lo = mid + 1;else hi = mid; } const qStart = visibleRange.offset; const qEnd = visibleRange.offset + visibleRange.count; for (; lo < rvs.length; lo++) { const s = rvs[lo]; if (s.batchStart >= qEnd) break; const sEnd = s.batchStart + s.batchCount; if (s.batchStart >= qStart && sEnd <= qEnd) { /** Alex 18.02.2026: There is an issue with using the render view's aabb. * Instanced render views will always provide incorrect bounds unless transformed * Which is what we are doing here */ scratchBox.copy(s.aabb); s.renderData.geometry.transform && s.renderData.geometry.instanced && scratchBox.applyMatrix4(s.renderData.geometry.transform); bounds.union(scratchBox); } } } return bounds; } onEarlyUpdate() { if (!this._enabled) return; if (this.explodeTime > -1) { this.explode(this.explodeTime, this.explodeRange); this.explodeTime = -1; } } setExplode(time) { const visibleWorld = this.visibleWorld; const size = visibleWorld.getSize(new Vector3()); this.explodeTime = time; this.explodeRange = Math.sqrt(size.x * size.x + size.y * size.y + size.z * size.z); visibleWorld.getCenter(this.explodeOrigin); } explode(time, range) { const objects = this.viewer.getRenderer().getObjects(); const vecBuff = new Vector3(); for (let i = 0; i < objects.length; i++) { const center = objects[i].aabb.getCenter(vecBuff); const dir = center.sub(this.explodeOrigin); dir.normalize().multiplyScalar(time * range); objects[i].transformTRS(dir, undefined, undefined, undefined); } this.viewer.requestRender(UpdateFlags.RENDER_RESET | UpdateFlags.SHADOWS); this.emit(ExplodeEvent.Finshed); } } /* eslint-disable @typescript-eslint/no-unused-vars */ /** * Utility class providing some top level conversion methods. * Warning: HIC SVNT DRACONES. */ class SpeckleConverter { constructor(objectLoader, tree) { this.spoofIDs = false; this.typeLookupTable = {}; this.instanceDefinitionLookupTable = {}; this.instancedObjectsLookupTable = {}; this.instanceProxies = {}; this.renderMaterialMap = {}; this.colorMap = {}; this.instanceCounter = 0; this.duplicateCounter = 0; this.traverseCount = 0; this.NodeConverterMapping = { View3D: this.View3DToNode.bind(this), BlockInstance: this.BlockInstanceToNode.bind(this), Pointcloud: this.PointcloudToNode.bind(this), Brep: this.BrepToNode.bind(this), BrepX: this.BrepToNode.bind(this), ExtrusionX: this.BrepToNode.bind(this), SubDX: this.BrepToNode.bind(this), Mesh: this.MeshToNode.bind(this), Point: this.PointToNode.bind(this), Line: this.LineToNode.bind(this), Polyline: this.PolylineToNode.bind(this), Box: this.BoxToNode.bind(this), Polycurve: this.PolycurveToNode.bind(this), Curve: this.CurveToNode.bind(this), Circle: this.CircleToNode.bind(this), Arc: this.ArcToNode.bind(this), Ellipse: this.EllipseToNode.bind(this), RevitInstance: this.RevitInstanceToNode.bind(this), Text: this.TextToNode.bind(this), Dimension: this.DimensionToNode.bind(this), InstanceDefinitionProxy: this.InstanceDefinitionProxyToNode.bind(this), InstanceProxy: this.InstanceProxyToNode.bind(this), RenderMaterialProxy: this.RenderMaterialProxyToNode.bind(this), ColorProxy: this.ColorProxyToNode.bind(this), Region: this.RegionToNode.bind(this), Parameter: null }; this.IgnoreNodes = ['Parameter', 'RawEncoding']; if (!objectLoader) { Logger.warn('Converter initialized without a corresponding object loader. Any objects that include references will throw errors.'); } this.objectLoader = objectLoader; this.activePromises = 0; this.maxChildrenPromises = 200; this.tree = tree; } /** * If the object is convertible (there is a direct conversion routine), it will invoke the callback with the conversion result. * If the object is not convertible, it will recursively iterate through it (arrays & objects) and invoke the callback on any positive conversion result. * @param {[type]} obj [description] * @param {Function} callback [description] * @return {[type]} [description] */ async traverse(objectURL, obj, callback, node = null) { try { // Exit on primitives (string, ints, bools, bigints, etc.) if (obj === null || typeof obj !== 'object') return; if (obj.referencedId) obj = await this.resolveReference(obj); const childrenConversionPromisses = []; // Traverse arrays, and exit early (we don't want to iterate through many numbers) if (Array.isArray(obj)) { for (const element of obj) { if (typeof element !== 'object') break; // exit early for non-object based arrays if (this.activePromises >= this.maxChildrenPromises) { await this.traverse(objectURL, element, callback, node); } else { const childPromise = this.traverse(objectURL, element, callback, node); childrenConversionPromisses.push(childPromise); } } if (childrenConversionPromisses.length > 0) { this.activePromises += childrenConversionPromisses.length; await Promise.all(childrenConversionPromisses); this.activePromises -= childrenConversionPromisses.length; } return; } /** These are not needed as nodes */ if (this.IgnoreNodes.includes(this.getSpeckleType(obj))) { return; } /** Ignore objects with no id */ if (!obj.id) return; const childNode = this.tree.parse({ id: this.getNodeId(obj), raw: obj, atomic: true, children: [] }); if (node === null) { /** We're adding a parent for the entire model (subtree) */ this.subtree = this.tree.parse({ id: objectURL, /* Hack required by frontend*/ raw: { id: objectURL, children: [obj] }, atomic: true, children: [] }); this.tree.addSubtree(this.subtree); this.addNode(childNode, this.subtree); } else { this.addNode(childNode, node); } // If we can convert it, we should invoke the respective conversion routine. if (this.directNodeConverterExists(obj)) { try { await this.convertToNode(obj, childNode); return; } catch (e) { Logger.warn(`(Traversing - direct) Failed to convert ${this.getSpeckleType(obj)} with id: ${obj.id}`, e); } } const target = obj; // Check if the object has a display value of sorts // eslint-disable-next-line @typescript-eslint/no-explicit-any let displayValue = this.getDisplayValue(target); if (displayValue) { childNode.model.atomic = true; } else { childNode.model.atomic = false; } if (displayValue) { if (!Array.isArray(displayValue)) { displayValue = await this.resolveReference(displayValue); if (!displayValue.units) displayValue.units = obj.units; try { const nestedNode = this.tree.parse({ id: this.getNodeId(displayValue), raw: displayValue, atomic: false, children: [] }); this.addNode(nestedNode, childNode); await this.convertToNode(displayValue, nestedNode); } catch (e) { Logger.warn(`(Traversing) Failed to convert obj with id: ${obj.id} — ${e['message']}`); } } else { for (const element of displayValue) { const val = await this.resolveReference(element); if (!val.units) val.units = obj.units; const nestedNode = this.tree.parse({ id: this.getNodeId(val), raw: val, atomic: false, children: [] }); this.addNode(nestedNode, childNode); await this.convertToNode(val, nestedNode); } } // If this is a built element and has a display value, only iterate through the "elements" prop if it exists. /** 10.25.2023 This might be serious legacy stuff that we might not need anymore */ /** 22.11.2024 We have just added stuff to this serious legacy stuff that might not be needed anymore (joke's on us, it is needed) */ if (obj.speckle_type.toLowerCase().includes('builtelements') || obj.speckle_type.toLowerCase().includes('objects.data')) { const elements = this.getElementsValue(obj); if (elements) { childrenConversionPromisses.push(this.traverse(objectURL, elements, callback, childNode)); this.activePromises += childrenConversionPromisses.length; await Promise.all(childrenConversionPromisses); this.activePromises -= childrenConversionPromisses.length; } return; } } // Last attempt: iterate through all object keys and see if we can display anything! // traverses the object in case there's any sub-objects we can convert. for (const prop in target) { if (prop === '__parents' || prop === 'bbox' || prop === '__closure') continue; if (['displayMesh', '@displayMesh', 'displayValue', '@displayValue'].includes(prop)) continue; if (typeof target[prop] !== 'object' || target[prop] === null) continue; if (this.activePromises >= this.maxChildrenPromises) { await this.traverse(objectURL, target[prop], callback, childNode); } else { const childPromise = this.traverse(objectURL, target[prop], callback, childNode); childrenConversionPromisses.push(childPromise); } } if (childrenConversionPromisses.length > 0) { this.activePromises += childrenConversionPromisses.length; await Promise.all(childrenConversionPromisses); this.activePromises -= childrenConversionPromisses.length; } } finally { callback(this.traverseCount++); } } getNodeId(obj) { if (this.spoofIDs) return MathUtils.generateUUID(); return obj.id; } addNode(node, parent) { if (this.tree.hasNodeId(node.model.id, parent.model.subtreeId)) { node.model.id = this.getDuplicateId(node.model.id, ++this.duplicateCounter); } this.tree.addNode(node, parent); } /** * Takes an array composed of chunked references and dechunks it. * @param {[type]} arr [description] * @return {[type]} [description] */ async dechunk(arr) { if (!arr || arr.length === 0) { return arr; } if (Array.isArray(arr[0]) && !arr[0].referencedId) { return arr; } // Handles pre-chunking objects, or arrs that have not been chunked if (!arr[0].referencedId) { if (!(arr[0] instanceof Object)) return [{ data: arr, id: MathUtils.generateUUID(), references: 1 }];else return arr; } const chunked = []; for (const ref of arr) { const real = await this.objectLoader.getObject({ id: ref.referencedId }); if (real.references === undefined) { real.references = 1; } else { real.references++; } if (real.data.length && (typeof real.data[0] !== 'number' || isNaN(real.data[0]))) { Logger.error(`Chunk id ${real.id} might not have numeric geometry data. This is not supported!`); } chunked.push(real); // await this.asyncPause() } // const dechunked = [].concat(...(chunked as any)) return chunked; } /** * Resolves an object reference by waiting for the loader to load it up. * @param {[type]} obj [description] * @return {[type]} [description] */ async resolveReference(obj) { if (obj.referencedId) { const resolvedObj = await this.objectLoader.getObject({ id: obj.referencedId }); // this.asyncPause() return resolvedObj; } else return obj; } /** * Gets the speckle type of an object in various scenarios. * @param {[type]} obj [description] * @return {[type]} [description] */ getSpeckleType(obj) { const rawType = obj.speckle_type ? obj.speckle_type : 'Base'; const lookup = this.typeLookupTable[rawType]; if (lookup) return lookup; let typeRet = 'Base'; const typeChain = this.getSpeckleTypeChain(obj); for (const type of typeChain) { const nodeConverter = type in this.NodeConverterMapping; if (nodeConverter) { typeRet = type; break; } } this.typeLookupTable[rawType] = typeRet; return typeRet; } getSpeckleTypeChain(obj) { let type = ['Base']; type = obj.speckle_type ? obj.speckle_type.split(':').reverse() : type; type = type.map(value => { return value.split('.').reverse()[0]; }); return type; } directNodeConverterExists(obj) { return this.getSpeckleType(obj) in this.NodeConverterMapping; } async convertToNode(obj, node) { if (obj.referencedId) obj = await this.resolveReference(obj); try { if (this.directNodeConverterExists(obj)) { const delegate = this.NodeConverterMapping[this.getSpeckleType(obj)]; if (delegate) return await delegate(obj, node); } return null; } catch (e) { Logger.warn(`(Direct convert) Failed to convert object with id: ${obj.id}`); throw e; } } getDisplayValue(obj) { const displayValue = obj['displayValue'] || obj['@displayValue'] || obj['displayMesh'] || obj['@displayMesh']; if (displayValue) { if (Array.isArray(displayValue)) { const filteredDisplayValue = displayValue.filter(v => v); if (displayValue.length !== filteredDisplayValue.length) { Logger.warn(`Object ${obj.id} has null display values which will be ignored`); } return filteredDisplayValue; } return displayValue; } return null; } getElementsValue(obj) { return obj['elements'] || obj['@elements']; } getBlockDefinition(obj) { return obj['@blockDefinition'] || obj['blockDefinition'] || obj['definition'] || obj['@definition']; } getBlockDefinitionGeometry(obj) { return obj['@geometry'] || obj['geometry']; } /** We're wasting a few milis here, but it is what it is */ getCompoundId(baseId, counter) { const index = baseId.indexOf(NodeMap.COMPOUND_ID_CHAR); if (index === -1) { return baseId + NodeMap.COMPOUND_ID_CHAR + counter; } return baseId.substring(0, index) + NodeMap.COMPOUND_ID_CHAR + counter; } getDuplicateId(baseId, counter) { const index = baseId.indexOf(NodeMap.DUPLICATE_ID_CHAR); if (index === -1) { return baseId + NodeMap.DUPLICATE_ID_CHAR + counter; } return baseId.substring(0, index) + NodeMap.DUPLICATE_ID_CHAR + counter; } getEmptyTransformData(id) { // eslint-disable-next-line camelcase return { id, speckle_type: 'Transform', units: 'm', matrix: new Array(16) }; } /** * NODES */ async View3DToNode(obj, _node) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore obj.origin.units = obj.units; // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore obj.target.units = obj.units; } /** This is only used for Blocks to search for convertible objects, without using the main 'traverse' function * It's only looking for 'elements' and 'displayValues' * I think it can be used for RevitInstances as well to replace it's current lookup, but I'm afraid to do it */ async displayableLookup(obj, node, instanced) { if (this.directNodeConverterExists(obj)) { await this.convertToNode(obj, node); } else { const displayValues = this.getDisplayValue(obj); const elements = this.getElementsValue(obj); const entries = [...(displayValues ? displayValues : []), ...(elements ? elements : [])]; for (const entry of entries) { const value = await this.resolveReference(entry); const valueNode = this.tree.parse({ id: this.getCompoundId(value.id, this.instanceCounter++), raw: value, atomic: false, children: [], instanced }); this.addNode(valueNode, node); await this.displayableLookup(value, valueNode, instanced); } } } async parseInstanceDefinitionGeometry(instanceObj, defGeometry, instanceNode) { const transformNodeId = MathUtils.generateUUID(); let transformData = null; /** Legacy form of Transform */ if (Array.isArray(instanceObj.transform)) { transformData = this.getEmptyTransformData(transformNodeId); transformData.units = instanceObj.units; transformData.matrix = instanceObj.transform; } else { transformData = instanceObj.transform ? instanceObj.transform : this.getEmptyTransformData(transformNodeId); } const transformNode = this.tree.parse({ id: transformNodeId, raw: transformData, atomic: false, children: [] }); this.addNode(transformNode, instanceNode); const childNode = this.tree.parse({ id: this.getCompoundId(defGeometry.id, this.instanceCounter++), raw: defGeometry, atomic: false, children: [], instanced: true }); this.addNode(childNode, transformNode); await this.displayableLookup(defGeometry, childNode, true); } async parseInstanceElement(_instanceObj, elementObj, instanceNode) { const childNode = this.tree.parse({ id: this.getNodeId(elementObj), raw: elementObj, atomic: false, children: [] }); this.addNode(childNode, instanceNode); await this.displayableLookup(elementObj, childNode, false); } async BlockInstanceToNode(obj, node) { const definition = await this.resolveReference(this.getBlockDefinition(obj)); node.model.raw.definition = definition; for (const def of this.getBlockDefinitionGeometry(definition)) { const ref = await this.resolveReference(def); await this.parseInstanceDefinitionGeometry(obj, ref, node); } const elements = this.getElementsValue(obj); if (elements) { for (const element of elements) { const elementObj = await this.resolveReference(element); void this.parseInstanceElement(obj, elementObj, node); } } } async RevitInstanceToNode(obj, node) { const definition = await this.resolveReference(obj.definition); node.model.raw.definition = definition; await this.parseInstanceDefinitionGeometry(obj, definition, node); const elements = this.getElementsValue(obj); if (elements) { for (const element of elements) { const elementObj = await this.resolveReference(element); void this.parseInstanceElement(obj, elementObj, node); } } } async InstanceDefinitionProxyToNode(obj, node) { if (!obj.applicationId) { Logger.warn(`Instance Definition Proxy ${obj.id} has no applicationId`); return; } this.instanceDefinitionLookupTable[obj.applicationId] = node; } async InstanceProxyToNode(obj, node) { if (!obj.applicationId) { Logger.warn(`Instance proxy ${obj.id} has no application id`); return; } this.instanceProxies[obj.applicationId] = node; return; } async RenderMaterialProxyToNode(obj, _node) { if (!obj.value) { Logger.error(`Render Material Proxy ${obj.id} has no render material value!`); return; } if (!obj.objects || !Array.isArray(obj.objects) || obj.objects.length === 0) { Logger.warn(`Render Material Proxy ${obj.id} has no target objects!`); } const renderMaterialValue = obj.value; const targetObjects = obj.objects; for (let k = 0; k < targetObjects.length; k++) { if (this.renderMaterialMap[targetObjects[k]]) { Logger.warn(`Overwritting renderMaterial ${targetObjects[k]}`); } this.renderMaterialMap[targetObjects[k]] = renderMaterialValue; } } async ColorProxyToNode(obj, _node) { if (!obj.value || typeof obj.value !== 'number') { Logger.error(`Color ${obj.id} has no value, or value is not a number!`); return; } if (!obj.objects || !Array.isArray(obj.objects) || obj.objects.length === 0) { Logger.warn(`Color Proxy ${obj.id} has no target objects!`); return; } const targetObjects = obj.objects; for (let k = 0; k < targetObjects.length; k++) { if (this.colorMap[targetObjects[k]]) { Logger.warn(`Overwritting color ${targetObjects[k]}`); } this.colorMap[targetObjects[k]] = obj; } } getInstanceProxyDefinitionId(obj) { return obj.DefinitionId || obj.definitionId; } getInstanceProxyTransform(obj) { if (!(obj.transform || obj.Transform)) { return new Matrix4().toArray(); } return obj.transform || obj.Transform; } getInstanceProxyDefinitionObjects(obj) { return obj.Objects || obj.objects; } createTransformNode(obj) { const transformNodeId = MathUtils.generateUUID(); const transformData = this.getEmptyTransformData(transformNodeId); transformData.units = obj.units; transformData.matrix = this.getInstanceProxyTransform(obj); return this.tree.parse({ id: transformNodeId, raw: transformData, atomic: false, children: [] }); } async ConvertInstanceProxyToNode(obj, node) { const definitionId = this.getInstanceProxyDefinitionId(obj); if (!definitionId) { Logger.warn(`Instance Proxy ${obj.id} has no definitionId`); return; } const definition = this.instanceDefinitionLookupTable[definitionId]; const transformNode = this.createTransformNode(obj); this.addNode(transformNode, node); const objectApplicationIds = this.getInstanceProxyDefinitionObjects(definition.model.raw); for (const objectApplicationId of objectApplicationIds) { const speckleData = this.instancedObjectsLookupTable[objectApplicationId]; // NOTE: see https://linear.app/speckle/issue/CNX-115/viewer-handle-gracefully-instances-with-elements-that-failed-to // This prevents the viewer not loading anything if a instance component is missing from its defintion. This is a likely scenario from connectors; even though we're guarding against it we'll never be able to fully enforce it. if (!speckleData) { Logger.warn(`Object ${objectApplicationId} is is missing from definition ${definitionId}. Someone probably sent an instance containing unsopprted elements - this is ok, do not panic.`); continue; } const instancedNode = this.tree.parse({ id: this.getCompoundId(speckleData.id, this.instanceCounter++), raw: speckleData, atomic: false, children: [], instanced: true }); this.addNode(instancedNode, transformNode); /** Alex 16.09.2025: We're adding support for instance proxies that are not direct displayable types */ // await this.convertToNode(speckleData, instancedNode) await this.displayableLookup(speckleData, instancedNode, true); } } async convertInstances() { /** uh, oh */ this.NodeConverterMapping.InstanceProxy = this.ConvertInstanceProxyToNode.bind(this); /** Find the nodes that need to be 'consumed' */ const consumeApplicationIds = {}; let consumeApplicationIdsCount = 0; for (const k in this.instanceDefinitionLookupTable) { const definition = this.instanceDefinitionLookupTable[k]; const objects = this.getInstanceProxyDefinitionObjects(definition.model.raw); for (let i = 0; i < objects.length; i++) { consumeApplicationIds[objects[i].toString()] = null; consumeApplicationIdsCount++; } } /** Do a short async walk */ await this.tree.walkAsync(node => { if (!node.model.raw.applicationId) return true; const applicationId = node.model.raw.applicationId.toString(); if (consumeApplicationIds[applicationId] !== undefined) { consumeApplicationIds[applicationId] = node; consumeApplicationIdsCount--; } /** Break out when all applicationIds are accounted for*/ if (consumeApplicationIdsCount === 0) return false; return true; }, this.subtree); /** Consume them */ for (const k in consumeApplicationIds) { const objectNode = consumeApplicationIds[k]; if (!objectNode) { Logger.error(`Consumable applicationId ${k} could not be found`); continue; } /** Store the speckle object data */ this.instancedObjectsLookupTable[k] = objectNode.model.raw; /** This part is catering to color proxies source and * I hate this the most * We store the definition geometry (which can be an instance if nested) parent layer color * We do that because these get consumed, so they can no longer be accessed via the WorldTree */ if (!this.instanceProxies[k]) { this.instancedObjectsLookupTable[k].parentLayerApplicationId = objectNode.parent.model.raw.applicationId; } else { const definitionId = this.instanceProxies[k].model.raw.definitionId; const proxies = Object.values(this.instanceProxies); proxies.forEach(value => { if (value.model.raw.definitionId === definitionId) { value.model.raw.parentLayerApplicationId = value.parent.model.raw.applicationId; } }); } /** Remove the instance from the list (if needed) */ delete this.instanceProxies[k]; /** Remove the node from the world tree */ this.tree.removeNode(objectNode, true); } /** Remaining instance proxies should all be valid */ for (const k in this.instanceProxies) { const node = this.instanceProxies[k]; /** Create the final instances */ await this.convertToNode(node.model.raw, node); } } async applyMaterials() { const renderMaterialCount = Object.keys(this.renderMaterialMap).length; const colorCount = Object.keys(this.colorMap).length; if (renderMaterialCount === 0 && colorCount === 0) return; /** Do a short async walk */ await this.tree.walkAsync(node => { if (!node.model.raw.applicationId) return true; const applicationId = node.model.raw.applicationId.toString(); /** With instances, render materials proxy can reference parents of original instanced data. * However, after they are instanced, they sometimes (or maybe often) do not have the same * parents anymore, so they can't inherit the render materials naturally. * * That's why we check they parent layer application id and write the render material data * into the node themselves, sort of like 'baking' them in. * * One side-effect is that we can no longer assume that each proxy is only getting applied once * so we cannot early break out of the walk */ const parentApplicationId = node.model.raw.parentLayerApplicationId; if (this.renderMaterialMap[applicationId]) { node.model.raw.renderMaterial = this.renderMaterialMap[applicationId]; } else if (this.renderMaterialMap[parentApplicationId]) { node.model.raw.renderMaterial = this.renderMaterialMap[parentApplicationId]; } /** For non-instanced objects just use the color if any is present */ if (this.colorMap[applicationId] !== undefined && !node.model.instanced) { node.model.color = this.colorMap[applicationId].value; } return true; }, this.subtree); /** For instances, we need some additional parsing */ for (const k in this.instanceProxies) { /** Find the maxDepth. This is weird because the InstanceProxy's `maxDepth` is more * like an `inverseMaxDepth` */ const maxDepth = this.tree.findAll(node => this.getSpeckleType(node.model.raw) === SpeckleType.InstanceProxy, this.instanceProxies[k]).reduce((prev, current) => prev && prev.model.raw.maxDepth > current.model.raw.maxDepth ? prev : current).model.raw.maxDepth; /** Get all the leaf InstanceProxy nodes. There might be nested instances * bu we want the leaf ones */ const instanceProxyNodes = this.tree.findAll(node => node.model.raw.maxDepth === maxDepth, this.instanceProxies[k]); /** Go over them */ for (let i = 0; i < instanceProxyNodes.length; i++) { /** Get the color of the instance. * Or it's definition geometry's layer color */ const instanceColor = this.colorMap[instanceProxyNodes[i].model.raw.applicationId] || this.colorMap[instanceProxyNodes[i].model.raw.parentLayerApplicationId]; /** Get the geometry nodes */ const instancedNodes = instanceProxyNodes[i].children[0].children; for (let j = 0; j < instancedNodes.length; j++) { /** Get the geometry definition's color * In the viewer the geometry definition is stored and shared across potential instances * as the speckle object in `raw` */ const geometryColor = this.colorMap[instancedNodes[j].model.raw.applicationId]; /** Get the definition geometry's layer color */ const geometryLayerColor = this.colorMap[instancedNodes[j].model.raw.parentLayerApplicationId]; /** If definition geometry has no color, use it's layer color */ if (!geometryColor) { instancedNodes[j].model.color = geometryLayerColor === null || geometryLayerColor === void 0 ? void 0 : geometryLayerColor.value; /** If definition geometry color source is object or layer use the definition's color */ } else if (geometryColor.source === 'object' || geometryColor.source === 'layer') { instancedNodes[j].model.color = geometryColor.value; /** If definition geometry color source is block, we need some extra stuff */ } else if (geometryColor.source === 'block') { /** If there is an color for the instance and the source is object just use it */ if (instanceColor) { if (instanceColor.source === 'object') { instancedNodes[j].model.color = instanceColor.value; /** If there is a color for the instance and the source is block, search upwards */ } else if (instanceColor.source === 'block') { /** Get the parent instance, or itself if it's not nested */ const parentInstance = this.tree.getAncestors(instanceProxyNodes[i]).find(value => this.getSpeckleType(value.model.raw) === SpeckleType.InstanceProxy) || instanceProxyNodes[i]; /** Use the parent instance or self instance color */ const color = this.colorMap[parentInstance.model.raw.applicationId]; instancedNodes[j].model.color = color === null || color === void 0 ? void 0 : color.value; } } } } } } } async PointcloudToNode(obj, node) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore node.model.raw.points = await this.dechunk(obj.points); // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore node.model.raw.colors = await this.dechunk(obj.colors); } async BrepToNode(obj, node) { try { if (!obj) return; let displayValue = this.getDisplayValue(obj); if (Array.isArray(displayValue)) displayValue = displayValue[0]; //Just take the first display value for now (not ideal) if (!displayValue) return; const ref = await this.resolveReference(displayValue); const nestedNode = this.tree.parse({ id: node.model.instanced ? this.getCompoundId(ref.id, this.instanceCounter++) : this.getNodeId(ref), raw: ref, atomic: false, children: [], ...(node.model.instanced && { instanced: node.model.instanced }) }); await this.convertToNode(ref, nestedNode); this.addNode(nestedNode, node); // deletes known unneeded fields delete obj.Edges; delete obj.Faces; delete obj.Loops; delete obj.Trims; delete obj.Curve2D; delete obj.Curve3D; delete obj.Surfaces; delete obj.Vertices; } catch (e) { Logger.warn(`Failed to convert brep id: ${obj.id}`); throw e; } } async MeshToNode(obj, node) { if (!obj) return; if (!obj.vertices || obj.vertices.length === 0) { Logger.warn(`Object id ${obj.id} of type ${obj.speckle_type} has no vertex position data and will be ignored`); node.model.raw.vertices = []; node.model.raw.faces = []; node.model.raw.colors = []; node.model.raw.vertexNormals = []; return; } if (!obj.faces || obj.faces.length === 0) { Logger.warn(`Object id ${obj.id} of type ${obj.speckle_type} has no face data and will be ignored`); node.model.raw.vertices = []; node.model.raw.faces = []; node.model.raw.colors = []; node.model.raw.vertexNormals = []; return; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore node.model.raw.vertices = await this.dechunk(obj.vertices); // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore node.model.raw.faces = await this.dechunk(obj.faces); // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore node.model.raw.colors = await this.dechunk(obj.colors); // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore node.model.raw.vertexNormals = await this.dechunk(obj.vertexNormals); } async RegionToNode(obj, node) { try { if (!obj) return; let displayValue = this.getDisplayValue(obj); if (Array.isArray(displayValue)) displayValue = displayValue[0]; //Just take the first display value for now (not ideal) if (!displayValue) return; const ref = await this.resolveReference(displayValue); const nestedNode = this.tree.parse({ id: node.model.instanced ? this.getCompoundId(ref.id, this.instanceCounter++) : this.getNodeId(ref), raw: ref, atomic: false, children: [], ...(node.model.instanced && { instanced: node.model.instanced }) }); await this.convertToNode(ref, nestedNode); this.addNode(nestedNode, node); } catch (e) { Logger.warn(`Failed to convert Region id: ${obj.id}`); throw e; } } async TextToNode(_obj, _node) { return; } async DimensionToNode(obj, node) { const displayValues = [...this.getDisplayValue(obj)]; for (const displayValue of displayValues) { const childNode = this.tree.parse({ id: this.getNodeId(displayValue), raw: displayValue, atomic: false, children: [] }); this.addNode(childNode, node); await this.convertToNode(displayValue, childNode); } /** * YOLO * - Dimensions of all types do not have information about text size * - Positioning of the text is not consistent across dimension types * - Angular Dimensions are broken */ const textObj = JSON.parse(JSON.stringify(obj)); textObj.plane = textObj.RhinoProps.plane; const derivedType = this.getSpeckleTypeChain(textObj)[0]; switch (derivedType) { case 'LengthDimension': textObj.plane.origin = textObj.position; break; case 'DistanceDimension': textObj.plane.origin = textObj.textPosition; break; case 'AngleDimension': textObj.plane.origin = textObj.textPosition; break; } textObj['speckle_type'] = 'Objects.Other.Text'; const textNode = this.tree.parse({ id: MathUtils.generateUUID(), raw: textObj, atomic: false, children: [] }); this.addNode(textNode, node); await this.convertToNode(textObj, textNode); } async PointToNode(_obj, _node) { return; } async LineToNode(_obj, _node) { return; } async PolylineToNode(obj, node) { node.model.raw.value = await this.dechunk(obj.value); } async BoxToNode(_obj, _node) { return; } async PolycurveToNode(obj, node) { node.model.nestedNodes = []; for (let i = 0; i < obj.segments.length; i++) { let element = obj.segments[i]; /** Not a big fan of this... */ if (!this.directNodeConverterExists(element)) { element = this.getDisplayValue(element); if (element.referencedId) { element = await this.resolveReference(element); } } const nestedNode = this.tree.parse({ id: this.getNodeId(element), raw: element, atomic: false, children: [] }); await this.convertToNode(element, nestedNode); /** We're not adding the segments as children since they shouldn't exist as individual line elements */ node.model.nestedNodes.push(nestedNode); } } async CurveToNode(obj, node) { let displayValue = this.getDisplayValue(obj); if (!displayValue) { Logger.warn(`Object ${obj.id} of type ${obj.speckle_type} has no display value and will be ignored`); return; } node.model.nestedNodes = []; displayValue = await this.resolveReference(obj.displayValue); displayValue.units = displayValue.units || obj.units; const nestedNode = this.tree.parse({ id: this.getNodeId(displayValue), raw: displayValue, atomic: false, children: [] }); await this.convertToNode(displayValue, nestedNode); /** We're not adding the segments as children since they shouldn't exist as individual line elements */ node.model.nestedNodes.push(nestedNode); } async CircleToNode(_obj, _node) { return; } async ArcToNode(_obj, _node) { return; } async EllipseToNode(_obj, _node) { return; } /** We shouldn't need to work with duplicates */ handleDuplicates() { var _a; /** We're generally interested in handling renderable duplicates. Otherwise we're overbloat everything with millions of parameters and such */ const SpeckleTypeDuplicableRenderables = SpeckleTypeAllRenderables.slice(); /** We remove Point because speckle data contains tons of points that are not really renderable */ SpeckleTypeDuplicableRenderables.splice(SpeckleTypeAllRenderables.indexOf(SpeckleType.Point), 1); const duplicates = (_a = this.tree.getRenderTree(this.subtree.model.id)) === null || _a === void 0 ? void 0 : _a.getDuplicates(); for (const k in duplicates) { const baseObject = this.tree.findId(k); if (!baseObject) { Logger.warn(`Base duplicated object ${k} not found!`); continue; } const speckleType = this.getSpeckleType(baseObject[0].model.raw); if (!SpeckleTypeDuplicableRenderables.includes(speckleType)) continue; for (const m in duplicates[k]) { /** Normally we'd only need the geometry related data cloned, but this covers 100% */ duplicates[k][m].model.raw = structuredClone(duplicates[k][m].model.raw); } } return Promise.resolve(); } } var LoaderEvent; (function (LoaderEvent) { LoaderEvent["LoadProgress"] = "load-progress"; LoaderEvent["LoadCancelled"] = "load-cancelled"; LoaderEvent["LoadWarning"] = "load-warning"; LoaderEvent["Converted"] = "converted"; LoaderEvent["Traversed"] = "traversed"; })(LoaderEvent || (LoaderEvent = {})); class Loader extends EventEmitter { constructor(resource, resourceData) { super(); this._resource = resource; this._resourceData = resourceData; } on(eventType, listener) { super.on(eventType, listener); } dispose() { super.dispose(); } } /* eslint-disable camelcase */ /** * Set of functions to triangulate n-gon faces (i.e. polygon faces with an arbitrary (n) number of vertices). * This class is a JavaScript port of https://github.com/specklesystems/speckle-sharp/blob/main/Objects/Objects/Utils/MeshTriangulationHelper.cs */ const _vec30$1 = new Vector3(); const _vec31$1 = new Vector3(); const _vec32$1 = new Vector3(); const _vec33$1 = new Vector3(); const _normal = new Vector3(); const _triangle = new Triangle(); class MeshTriangulationHelper { /** * Calculates the triangulation of the face at given faceIndex. * @remarks This implementation is based the ear clipping method proposed by "Christer Ericson (2005) Real-Time Collision Detection. * @param {Number} faceIndex The index of the face's cardinality indicator `n` * @param {Number[]} faces The list of faces in the mesh * @param {Number[]} vertices The list of vertices in the mesh * @return {Number} flat list of triangle faces (without cardinality indicators) */ static triangulateFace(faceIndex, faces, vertices, /** Purists rolling over in their graves because of this */ _inout_targetArray, _in_offset) { let n = faces.get(faceIndex); if (n < 3) n += 3; // 0 -> 3, 1 -> 4 //Converts from relative to absolute index (returns index in mesh.vertices list) /** Why doesn't javascript have a means to inline functions?! */ function asIndex(v) { return faceIndex + v + 1; } //Gets vertex from a relative vert index function V(v, target) { const index = faces.get(asIndex(v)) * 3; target.x = vertices.get(index); target.y = vertices.get(index + 1); target.z = vertices.get(index + 2); return target; } //Calculate face normal using the Newell Method const faceNormal = _normal; for (let ii = n - 1, jj = 0; jj < n; ii = jj, jj++) { const iPos = V(ii, _vec30$1); const jPos = V(jj, _vec31$1); faceNormal.x += (jPos.y - iPos.y) * (iPos.z + jPos.z); // projection on yz faceNormal.y += (jPos.z - iPos.z) * (iPos.x + jPos.x); // projection on xz faceNormal.z += (jPos.x - iPos.x) * (iPos.y + jPos.y); // projection on xy } faceNormal.normalize(); //Set up previous and next links to effectively form a double-linked vertex list const prev = []; //new Array(n) const next = []; //new Array(n) for (let j = 0; j < n; j++) { prev[j] = j - 1; next[j] = j + 1; } prev[0] = n - 1; next[n - 1] = 0; //Start clipping ears until we are left with a triangle let i = 0; let counter = 0; let localOffset = 0; while (n >= 3) { let isEar = true; //If we are the last triangle or we have exhausted our vertices, the below statement will be false if (n > 3 && counter < n) { const prevVertex = V(prev[i], _vec30$1); const earVertex = V(i, _vec31$1); const nextVertex = V(next[i], _vec32$1); _triangle.a.copy(prevVertex); _triangle.b.copy(earVertex); _triangle.c.copy(nextVertex); if (_triangle.isFrontFacing(faceNormal)) { let k = next[next[i]]; do { if (_triangle.containsPoint(V(k, _vec33$1))) { isEar = false; break; } k = next[k]; } while (k !== prev[i]); } else { isEar = false; } } if (isEar) { const a = faces.get(asIndex(i)); const b = faces.get(asIndex(next[i])); const c = faces.get(asIndex(prev[i])); _inout_targetArray[_in_offset + localOffset] = a; _inout_targetArray[_in_offset + localOffset + 1] = b; _inout_targetArray[_in_offset + localOffset + 2] = c; localOffset += 3; next[prev[i]] = next[i]; prev[next[i]] = prev[i]; n--; i = prev[i]; counter = 0; } else { i = next[i]; counter++; } } return localOffset; } } const _vec30 = new Vector3(); const _vec31 = new Vector3(); const _vec32 = new Vector3(); const _vec33 = new Vector3(); const _vec34 = new Vector3(); const _vec35 = new Vector3(); class SpeckleGeometryConverter extends GeometryConverter { constructor() { super(...arguments); this.typeLookupTable = {}; this.meshTriangulationTime = 0; this.actualTriangulateTime = 0; this.pushTime = 0; } getSpeckleType(node) { const rawType = node.raw.speckle_type ? node.raw.speckle_type : 'Base'; const lookup = this.typeLookupTable[rawType]; if (lookup) { return lookup; } let typeRet = SpeckleType.Unknown; let typeChain = []; typeChain = rawType.split(':').reverse(); typeChain = typeChain.map(value => { return value.split('.').reverse()[0]; }); for (const type of typeChain) { if (type in SpeckleType) { typeRet = type; break; } } this.typeLookupTable[rawType] = typeRet; return typeRet; } convertNodeToGeometryData(node) { const type = this.getSpeckleType(node); switch (type) { case SpeckleType.BlockInstance: return this.BlockInstanceToGeometryData(node); case SpeckleType.Pointcloud: return this.PointcloudToGeometryData(node); case SpeckleType.Brep: return this.BrepToGeometryData(node); case SpeckleType.Mesh: return this.MeshToGeometryData(node); case SpeckleType.BinaryMesh: return this.BinaryMeshToGeometryData(node); case SpeckleType.Point: return this.PointToGeometryData(node); case SpeckleType.Line: return this.LineToGeometryData(node); case SpeckleType.Polyline: return this.PolylineToGeometryData(node); case SpeckleType.Box: return this.BoxToGeometryData(node); case SpeckleType.Polycurve: return this.PolycurveToGeometryData(node); case SpeckleType.Curve: return this.CurveToGeometryData(node); case SpeckleType.Circle: return this.CircleToGeometryData(node); case SpeckleType.Arc: return this.ArcToGeometryData(node); case SpeckleType.Ellipse: return this.EllipseToGeometryData(node); case SpeckleType.View3D: return this.View3DToGeometryData(node); case SpeckleType.RevitInstance: return this.RevitInstanceToGeometryData(node); case SpeckleType.Text: return this.TextToGeometryData(node); case SpeckleType.Transform: return this.TransformToGeometryData(node); case SpeckleType.InstanceProxy: return this.InstanceProxyToGeometyData(node); case SpeckleType.Region: return this.RegionGeometyData(node); case SpeckleType.Unknown: // console.warn(`Skipping geometry conversion for ${type}`) return null; default: return null; } } disposeNodeGeometryData(node) { const type = this.getSpeckleType(node); switch (type) { case SpeckleType.Pointcloud: node.raw.vertices = []; node.raw.colors = []; break; case SpeckleType.Mesh: /** Raw objects will no longer hold references to chunks */ node.raw.vertices = []; node.raw.faces = []; node.raw.colors = []; node.raw.normals = []; // /** We can already delete these because we don't need them after triangulation */ // node.raw.faces.forEach((c: DataChunk) => { // c.references-- // if (!c.references) { // Logger.warn(`Deleting chunk data ${c.id}`) // // eslint-disable-next-line @typescript-eslint/ban-ts-comment // //@ts-ignore // delete c.data // } // }) /** We can already delete this because we've changes the colors to floats in linear space */ node.raw.colors.forEach(c => { c.references--; if (!c.references) { Logger.warn(`Deleting chunk data ${c.id}`); // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore delete c.data; } }); break; case SpeckleType.Point: if (node.raw.value) node.raw.value = [];else { delete node.raw.x; delete node.raw.y; delete node.raw.z; } break; case SpeckleType.Line: if (node.raw.start.value) node.raw.start.value = [];else { delete node.raw.start.x; delete node.raw.start.y; delete node.raw.start.z; } if (node.raw.end.value) node.raw.end.value = [];else { delete node.raw.end.x; delete node.raw.end.y; delete node.raw.end.z; } break; case SpeckleType.Polyline: node.raw.value = []; break; } } View3DToGeometryData(node) { const vOrigin = this.PointToVector3(node.raw.origin); const vTarget = this.PointToVector3(node.raw.target); node.raw.origin = vOrigin; node.raw.target = vTarget; return { attributes: null, bakeTransform: null, transform: null }; } TransformToGeometryData(node) { const conversionFactor = getConversionFactor(node.raw.units); /** * Speckle matrices are row major. Three's 'fromArray' function assumes * the matrix is in column major. That's why we transpose it here. */ /** Legacy "value" */ const matrixData = node.raw.value ? node.raw.value : node.raw.matrix; const matrix = new Matrix4().fromArray(matrixData).transpose(); /** We need to scale the transform, but not propagate the scale towards the block's children * They do the scaling on their own. That's why we multiply with the inverse scale at the end * Not 100% sure on this if the original block matrix containts it's own scale + rotation */ const transform = new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor).multiply(matrix).multiply(new Matrix4().makeScale(1 / conversionFactor, 1 / conversionFactor, 1 / conversionFactor)); return { attributes: null, bakeTransform: null, transform }; } /** BLOCK INSTANCE */ BlockInstanceToGeometryData(node) { return null; } /** REVIT INSTANCE */ RevitInstanceToGeometryData(node) { return null; } /** DUI3 INSTANCE PROXY */ InstanceProxyToGeometyData(node) { return null; } /** * POINT CLOUD */ PointcloudToGeometryData(node) { const conversionFactor = getConversionFactor(node.raw.units); const vertices = new ChunkArray(node.instanced ? node.raw.points.slice() : node.raw.points); const colorsRaw = new ChunkArray(node.raw.colors); let colors = null; if (colorsRaw && colorsRaw.length !== 0) { if (colorsRaw.length !== vertices.length / 3) { Logger.warn(`Mesh (id ${node.raw.id}) colours are mismatched with vertice counts. The number of colours must equal the number of vertices.`); } /** We want the colors in linear space */ colors = this.unpackColors(colorsRaw, true); } return { attributes: { POSITION: vertices, COLOR: colors ? new ChunkArray([{ data: colors, id: MathUtils.generateUUID(), references: 1 }]) : undefined }, bakeTransform: new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor), transform: null }; } /** * BREP */ BrepToGeometryData(node) { return null; } /** * REGION */ RegionGeometyData(node) { return null; } /** * MESH */ MeshToGeometryData(node) { if (!node.raw) return null; const conversionFactor = getConversionFactor(node.raw.units); if (!node.raw.vertices) return null; if (!node.raw.faces) return null; const start = performance.now(); const vertices = new ChunkArray(node.raw.vertices); const faces = new ChunkArray(node.raw.faces); const colorsRaw = this.chunkArrayHasData(node.raw.colors) ? new ChunkArray(node.raw.colors) : undefined; let normals = node.raw.vertexNormals ? new ChunkArray(node.raw.vertexNormals) : undefined; let colors = undefined; let k = 0; let triangulated = true; let triangulatedArraySize = 0; while (k < faces.length) { const chunkIndex = faces.findChunkIndex(k); if (faces.chunkArray[chunkIndex].processed) { k += faces.chunkArray[chunkIndex].data.length; continue; } let n = faces.get(k); if (n < 3) n += 3; // 0 -> 3, 1 -> 4 k += n + 1; if (n === 3) { triangulatedArraySize += 3; continue; } else { triangulatedArraySize += (n - 2) * 3; triangulated = false; } } const indices = triangulatedArraySize >= 65535 || vertices.length >= 65535 ? new Uint32Array(triangulatedArraySize) : new Uint16Array(triangulatedArraySize); let indicesOffset = 0; if (triangulated) { /** If already triangulated modfy the faces array in place */ faces.chunkArray.forEach(chunk => { if (chunk.processed) return; let write = 0; for (let read = 0; read < chunk.data.length; read++) { if (read % 4 !== 0) { chunk.data[write++] = chunk.data[read]; } } chunk.data.length = write; chunk.processed = true; }); faces.updateOffsets(); } else { k = 0; while (k < faces.length) { /** We skip to the end of triangulated chunks */ const chunkIndex = faces.findChunkIndex(k); if (faces.chunkArray[chunkIndex].processed) { indices.set(faces.chunks[chunkIndex], k); k += faces.chunkArray[chunkIndex].data.length; continue; } let n = faces.get(k); if (n < 3) n += 3; // 0 -> 3, 1 -> 4 if (n === 3) { // Triangle face indices[indicesOffset] = faces.get(k + 1); indices[indicesOffset + 1] = faces.get(k + 2); indices[indicesOffset + 2] = faces.get(k + 3); indicesOffset += 3; } else { const start1 = performance.now(); const indexCount = MeshTriangulationHelper.triangulateFace(k, // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore faces, vertices, indices, // inout indicesOffset // in ); indicesOffset += indexCount; this.actualTriangulateTime += performance.now() - start1; } k += n + 1; } } this.meshTriangulationTime += performance.now() - start; if (colorsRaw && colorsRaw.length !== 0) { if (colorsRaw.length !== vertices.length / 3) { Logger.warn(`Mesh (id ${node.raw.id}) colours are mismatched with vertice counts. The number of colours must equal the number of vertices.`); } else /** We want the colors in linear space */ colors = new ChunkArray([{ id: MathUtils.generateUUID(), references: 1, data: this.unpackColors(colorsRaw, true) }]); } if (normals && normals.length !== 0) { if (normals.length !== vertices.length) { Logger.warn(`Mesh (id ${node.raw.id}) normals are mismatched with vertice counts. The number of normals must equal the number of vertices.`); normals = undefined; } } else { normals = undefined; } return { attributes: { POSITION: vertices, INDEX: triangulated ? faces : new ChunkArray([{ data: indices, id: MathUtils.generateUUID(), references: 1 }]), ...(colors && { COLOR: colors }), ...(normals && { NORMAL: normals }) }, bakeTransform: new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor), transform: null, ...(node.instanced && { instanced: true }) }; } /** * BINARY MESH */ BinaryMeshToGeometryData(node) { if (!node.raw) return null; const blobId = `${node.raw.blobId || ''}`; if (!blobId) { Logger.warn(`Binary mesh ${node.raw.id} has no blobId. Geometry skipped.`); return null; } const arrayBuffer = SpeckleGeometryConverter.blobCache[blobId]; if (!arrayBuffer) { Logger.warn(`Blob ${blobId} not preloaded. Geometry skipped.`); return null; } const vertexStart = Number(node.raw.vertexStart || 0); const vertexCount = Number(node.raw.vertexCount || 0); const faceStart = Number(node.raw.faceStart || 0); const faceCount = Number(node.raw.faceCount || 0); if (!vertexCount || !faceCount) { Logger.warn(`Binary mesh ${node.raw.id} has empty vertex or face ranges.`); return null; } const vertexByteOffset = vertexStart * 4; const faceByteOffset = faceStart * 4; const vertexByteLength = vertexCount * 4; const faceByteLength = faceCount * 4; if (vertexByteOffset < 0 || faceByteOffset < 0 || vertexByteOffset + vertexByteLength > arrayBuffer.byteLength || faceByteOffset + faceByteLength > arrayBuffer.byteLength) { Logger.warn(`Binary mesh ${node.raw.id} references data outside blob ${blobId}.`); return null; } const vertices = new Float32Array(arrayBuffer, vertexByteOffset, vertexCount); const faces32 = new Uint32Array(arrayBuffer, faceByteOffset, faceCount); const faces = vertexCount / 3 >= 65535 ? faces32 : Uint16Array.from(faces32); const conversionFactor = getConversionFactor(node.raw.units); return { attributes: { POSITION: new ChunkArray([{ data: vertices, id: MathUtils.generateUUID(), references: 1 }]), INDEX: new ChunkArray([{ data: faces, id: MathUtils.generateUUID(), references: 1 }]) }, bakeTransform: new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor), transform: null, ...(node.instanced && { instanced: true }) }; } /** * TEXT */ TextToGeometryData(node) { const conversionFactor = getConversionFactor(node.raw.units); const plane = node.raw.plane || { origin: node.raw.origin, xdir: new Vector3(1, 0, 0), ydir: new Vector3(0, 1, 0), normal: new Vector3(0, 0, 1) }; const billboard = node.raw.screenOriented || false; const position = new Vector3(plane.origin.x, plane.origin.y, plane.origin.z); const scale = new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor); /** We ignore rotation if screen oriented */ const mat = billboard ? new Matrix4() : new Matrix4().makeBasis(plane.xdir, plane.ydir, plane.normal); mat.setPosition(position); mat.premultiply(scale); return { attributes: null, bakeTransform: mat, transform: null, metaData: node.raw }; } /** * POINT */ PointToGeometryData(node) { const conversionFactor = getConversionFactor(node.raw.units); const points = this.PointToFloatArray(node.raw); return { attributes: { POSITION: new ChunkArray([{ data: points, id: MathUtils.generateUUID(), references: 1 }]) }, bakeTransform: new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor), transform: null }; } /** * LINE */ LineToGeometryData(node) { const conversionFactor = getConversionFactor(node.raw.units); return { attributes: { POSITION: new ChunkArray([{ data: this.PointToFloatArray(node.raw.start).concat(this.PointToFloatArray(node.raw.end)), id: MathUtils.generateUUID(), references: 1 }]) }, bakeTransform: new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor), transform: null }; } /** * POLYLINE */ PolylineToGeometryData(node) { const conversionFactor = getConversionFactor(node.raw.units); const chunkArray = new ChunkArray(node.raw.value); let outChunk = chunkArray; if (node.raw.closed) { const complete = new Float32Array(chunkArray.length + 3); chunkArray.copyToBuffer(complete, 0); complete[chunkArray.length] = complete[0]; complete[chunkArray.length + 1] = complete[1]; complete[chunkArray.length + 2] = complete[2]; outChunk = new ChunkArray([{ data: complete, id: MathUtils.generateUUID(), references: 1 }]); } return { attributes: { POSITION: outChunk }, bakeTransform: new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor), transform: null }; } /** * BOX */ BoxToGeometryData(node) { /** * Right, so we're cheating here a bit. We're using three's box geometry * to get the vertices and indices. Normally we could(should) do that by hand * but it's too late in the evenning atm... */ const conversionFactor = getConversionFactor(node.raw.units); const T = new Matrix4(); const R = new Matrix4(); if (node.raw.basePlane) { T.setPosition(this.PointToVector3(node.raw.basePlane.origin)); const eps = 1e-7; const bX = new Vector3().copy(node.raw.basePlane.xdir); const bY = new Vector3().copy(node.raw.basePlane.ydir); const bZ = new Vector3().copy(node.raw.basePlane.normal); if (Math.abs(bX.dot(bY)) < eps && Math.abs(bX.dot(bZ)) < eps && Math.abs(bY.dot(bZ)) < eps) R.makeBasis(node.raw.basePlane.xdir, node.raw.basePlane.ydir, node.raw.basePlane.normal);else Logger.warn(`Box ${node.raw.id} does not have orthogonal base plane vectors`); } else Logger.warn(`Box ${node.raw.id} is missing it's base plane`); const width = (node.raw.xSize.end - node.raw.xSize.start) * conversionFactor; const depth = (node.raw.ySize.end - node.raw.ySize.start) * conversionFactor; const height = (node.raw.zSize.end - node.raw.zSize.start) * conversionFactor; // const box = new BoxBufferGeometry(width, depth, height, 1, 1, 1) const box3 = new Box3(new Vector3(-width * 0.5, -depth * 0.5, -height * 0.5), new Vector3(width * 0.5, depth * 0.5, height * 0.5)); // prettier-ignore const edges = [box3.min.x, box3.min.y, box3.min.z, box3.min.x, box3.max.y, box3.min.z, box3.min.x, box3.min.y, box3.max.z, box3.min.x, box3.max.y, box3.max.z, box3.min.x, box3.min.y, box3.min.z, box3.min.x, box3.min.y, box3.max.z, box3.min.x, box3.max.y, box3.min.z, box3.min.x, box3.max.y, box3.max.z, box3.max.x, box3.min.y, box3.min.z, box3.max.x, box3.max.y, box3.min.z, box3.max.x, box3.min.y, box3.max.z, box3.max.x, box3.max.y, box3.max.z, box3.max.x, box3.min.y, box3.min.z, box3.max.x, box3.min.y, box3.max.z, box3.max.x, box3.max.y, box3.min.z, box3.max.x, box3.max.y, box3.max.z, box3.max.x, box3.min.y, box3.max.z, box3.min.x, box3.min.y, box3.max.z, box3.max.x, box3.min.y, box3.min.z, box3.min.x, box3.min.y, box3.min.z, box3.max.x, box3.max.y, box3.max.z, box3.min.x, box3.max.y, box3.max.z, box3.max.x, box3.max.y, box3.min.z, box3.min.x, box3.max.y, box3.min.z]; return { attributes: { POSITION: new ChunkArray([{ data: edges, id: MathUtils.generateUUID(), references: 1 }]) }, bakeTransform: new Matrix4().copy(T).multiply(R), transform: null }; } /** * POLYCURVE */ PolycurveToGeometryData(node) { if (!node.nestedNodes || node.nestedNodes.length === 0) { return null; } const buffers = []; for (let i = 0; i < node.nestedNodes.length; i++) { const element = node.nestedNodes[i].model; const conv = this.convertNodeToGeometryData(element); buffers.push(conv); } return Geometry.mergeGeometryData(buffers); } /** * CURVE */ CurveToGeometryData(node) { if (!node.nestedNodes || node.nestedNodes.length === 0) { return null; } const polylineGeometry = this.PolylineToGeometryData(node.nestedNodes[0].model); if (!polylineGeometry || !polylineGeometry.attributes) return null; return { attributes: { POSITION: polylineGeometry.attributes.POSITION }, bakeTransform: polylineGeometry.bakeTransform, transform: null }; } /** * CIRCLE */ CircleToGeometryData(node) { const conversionFactor = getConversionFactor(node.raw.units); const points = this.getCircularCurvePoints(node.raw.plane, node.raw.radius * conversionFactor); return { attributes: { POSITION: new ChunkArray([{ data: points, id: MathUtils.generateUUID(), references: 1 }]) }, bakeTransform: null, transform: null }; } /** * ARC */ ArcToGeometryData(node) { const origin = new Vector3(node.raw.plane.origin.x, node.raw.plane.origin.y, node.raw.plane.origin.z); const startPoint = new Vector3(node.raw.startPoint.x, node.raw.startPoint.y, node.raw.startPoint.z); const endPoint = new Vector3(node.raw.endPoint.x, node.raw.endPoint.y, node.raw.endPoint.z); const midPoint = new Vector3(node.raw.midPoint.x, node.raw.midPoint.y, node.raw.midPoint.z); /** The arc's 'midPoint' is not really a 'mid' point. It's just another point along the arc going from * start point to the end point. We get the arc's winding by using the directions from start and end * towards the mid point */ const dd0 = new Vector3().subVectors(startPoint, midPoint).normalize(); const dd1 = new Vector3().subVectors(endPoint, midPoint).normalize(); const _clockwise = dd0.dot(dd1) > 0; // Here we compute arc's orthonormal basis vectors using the origin and the two end points. const v0 = new Vector3().subVectors(startPoint, origin); v0.normalize(); const v1 = new Vector3().subVectors(endPoint, origin); v1.normalize(); const v2 = new Vector3().crossVectors(v0, v1); v2.normalize(); /** When the arc has an angle of PI, the directions from start and end to origin * face away from each other, making the cross product return 0, and we end up * with an incorrect orthonormal basis. */ if (v2.length() === 0) { /** We compute the plane normal using the mid point instead of the start point*/ const vm = new Vector3().subVectors(midPoint, origin); vm.normalize(); v2.copy(new Vector3().crossVectors(v0, vm)); v2.normalize(); } const v3 = new Vector3().crossVectors(v2, v0); v3.normalize(); /** * We clamp the dot value to [-1,1] since that's the domain acos is defined on. Normally dot won't return * values outside that interval, but due to floating point precision, you sometimes get -1.0000000004, which * makes acos return NaN */ const dot = Math.min(Math.max(v0.dot(v1), -1), 1); // This is just the angle between the start and end points. Should be same as obj.angleRadians(or something) const angle = Math.acos(dot); const radius = node.raw.radius; // We draw the arc in a local un-rotated coordinate system. We rotate it later on via transformation const curve = new EllipseCurve(0, 0, // ax, aY radius, radius, // xRadius, yRadius 0, angle, // aStartAngle, aEndAngle _clockwise, // aClockwise 0 // aRotation ); // This just samples points along the arc curve const points = curve.getPoints(50); const matrix = new Matrix4(); // Scale first, in order for the composition to work correctly const conversionFactor = getConversionFactor(node.raw.plane.units); // We determine the orientation of the plane using the three basis vectors computed above const R = new Matrix4().makeBasis(v0, v3, v2); // We translate it to the circle's origin (considering the origin's scaling as aswell ) const T = new Matrix4().setPosition(origin.multiplyScalar(conversionFactor)); matrix.multiply(T).multiply(R); // if (scale) { const S = new Matrix4().scale(new Vector3(conversionFactor, conversionFactor, conversionFactor)); matrix.multiply(S); // } return { attributes: { POSITION: new ChunkArray([{ data: this.FlattenVector3Array(points), id: MathUtils.generateUUID(), references: 1 }]) }, bakeTransform: matrix, transform: null }; } /** * ELLIPSE */ EllipseToGeometryData(node) { const conversionFactor = getConversionFactor(node.raw.units); const center = new Vector3(node.raw.plane.origin.x, node.raw.plane.origin.y, node.raw.plane.origin.z).multiplyScalar(conversionFactor); const xAxis = new Vector3(node.raw.plane.xdir.x, node.raw.plane.xdir.y, node.raw.plane.xdir.z).normalize(); const yAxis = new Vector3(node.raw.plane.ydir.x, node.raw.plane.ydir.y, node.raw.plane.ydir.z).normalize(); let resolution = 2 * Math.PI * node.raw.firstRadius * conversionFactor * 10; resolution = parseInt(resolution.toString()); const points = []; for (let index = 0; index <= resolution; index++) { const t = index * Math.PI * 2 / resolution; const x = Math.cos(t) * node.raw.firstRadius * conversionFactor; const y = Math.sin(t) * node.raw.secondRadius * conversionFactor; const xMove = new Vector3(xAxis.x * x, xAxis.y * x, xAxis.z * x); const yMove = new Vector3(yAxis.x * y, yAxis.y * y, yAxis.z * y); const pt = new Vector3().addVectors(xMove, yMove).add(center); points.push(pt); } return { attributes: { POSITION: new ChunkArray([{ data: this.FlattenVector3Array(points), id: MathUtils.generateUUID(), references: 1 }]) }, bakeTransform: null, transform: null }; } /** * UTILS */ getCircularCurvePoints(plane, radius, startAngle = 0, endAngle = 2 * Math.PI, resolution = 127) { // Get alignment vectors const center = this.PointToVector3(plane.origin, _vec30); const xAxis = this.PointToVector3(plane.xdir, _vec31); const yAxis = this.PointToVector3(plane.ydir, _vec32); // Make sure plane axis are unit length!!!! xAxis.normalize(); yAxis.normalize(); // Determine resolution /** Alex 07.08.2025: This can blowup for very large circles, so we use a fixed number of sample points */ // let resolution = ((endAngle - startAngle) * radius) / res // resolution = parseInt(resolution.toString()) /** Not ecstatic about using Float64, but it *might* be needed. Still better than number[] in any case */ const points = new Float64Array((resolution + 1) * 3); for (let index = 0; index <= resolution; index++) { const t = startAngle + index * (endAngle - startAngle) / resolution; const x = Math.cos(t) * radius; const y = Math.sin(t) * radius; const xMove = _vec33.set(xAxis.x * x, xAxis.y * x, xAxis.z * x); const yMove = _vec34.set(yAxis.x * y, yAxis.y * y, yAxis.z * y); const pt = _vec35.addVectors(xMove, yMove).add(center); points[index * 3] = pt.x; points[index * 3 + 1] = pt.y; points[index * 3 + 2] = pt.z; } return points; } PointToVector3(obj, target, scale = true) { const conversionFactor = scale ? getConversionFactor(obj.units) : 1; const v = target ? target : new Vector3(); if (obj.value) { // Old point format based on value list v.set(obj.value[0] * conversionFactor, obj.value[1] * conversionFactor, obj.value[2] * conversionFactor); } else { // New point format based on cartesian coords v.set(obj.x * conversionFactor, obj.y * conversionFactor, obj.z * conversionFactor); } return v; } PointToFloatArray(obj) { if (obj.value) { return [obj.value[0], obj.value[1], obj.value[2]]; } else { return [obj.x, obj.y, obj.z]; } } FlattenVector3Array(input) { const output = new Array(input.length * 3); const vBuff = []; for (let k = 0, l = 0; k < input.length; k++, l += 3) { input[k].toArray(vBuff); output[l] = vBuff[0]; output[l + 1] = vBuff[1]; output[l + 2] = vBuff[2] ? vBuff[2] : 0; } return output; } unpackColors(int32Colors, tolinear = false) { const colors = new Array(int32Colors.length * 3); for (let i = 0; i < int32Colors.length; i++) { const color = int32Colors.get(i); const r = color >> 16 & 0xff; const g = color >> 8 & 0xff; const b = color & 0xff; colors[i * 3] = r / 255; colors[i * 3 + 1] = g / 255; colors[i * 3 + 2] = b / 255; if (tolinear) { colors[i * 3] = this.srgbToLinear(colors[i * 3]); colors[i * 3 + 1] = this.srgbToLinear(colors[i * 3 + 1]); colors[i * 3 + 2] = this.srgbToLinear(colors[i * 3 + 2]); } } return colors; } srgbToLinear(x) { if (x <= 0) return 0;else if (x >= 1) return 1;else if (x < 0.04045) return x / 12.92;else return Math.pow((x + 0.055) / 1.055, 2.4); } /** Connectors send empty chunks ಠ_ಠ */ chunkArrayHasData(chunks) { return chunks && chunks.filter(c => c.data && c.data.length).length > 0; } } SpeckleGeometryConverter.blobCache = {}; const OBJECT_LOADING_PROGRESS_MAX = 0.85; const POST_PROCESSING_PROGRESS = 0.9; const BLOB_PRELOAD_PROGRESS_START = 0.9; const BLOB_PRELOAD_PROGRESS_END = 0.97; const RENDER_TREE_PROGRESS_START = 0.97; const RENDER_TREE_PROGRESS_END = 0.995; const BLOB_PRELOAD_CONCURRENCY = 8; const DEFAULT_MAX_FULL_OBJECT_LOAD_COUNT = 250000; const MAX_FULL_OBJECT_LOAD_COUNT_STORAGE_KEY = 'SPECKLE_VIEWER_MAX_FULL_OBJECT_LOAD_COUNT'; class SpeckleLoader extends Loader { get resource() { return this._resource; } get finished() { return this.isFinished; } constructor(targetTree, resource, authToken, enableCaching, resourceData, logger, attributeMask, objectTypeMask) { super(resource, resourceData); this.isCancelled = false; this.isFinished = false; this.tree = targetTree; this.log = logger || Logger.log; try { this.loader = this.initObjectLoader(resource, authToken, enableCaching, resourceData, attributeMask, objectTypeMask); } catch (e) { Logger.error(e); return; } this.converter = new SpeckleConverter(this.loader, this.tree); } initObjectLoader(resource, authToken, _enableCaching, resourceData, attributeMask, objectTypeMask) { let token = undefined; try { token = authToken || localStorage.getItem('AuthToken'); } catch { // Accessing localStorage may throw when executing on sandboxed document, ignore. } if (!token) { Logger.error('Viewer: no auth token present. Requests to non-public stream objects will fail.'); } const url = new URL(resource); const segments = url.pathname.split('/'); if (segments.length < 5 || url.pathname.indexOf('streams') === -1 || url.pathname.indexOf('objects') === -1) { throw new Error('Unexpected object url format.'); } const serverUrl = url.origin; const streamId = segments[2]; const objectId = segments[4]; return ObjectLoader2Factory.createFromUrl({ serverUrl, streamId, objectId, token, attributeMask, objectTypeMask }); } async load() { const start = performance.now(); let phaseStart = start; let first = true; let dataloading = 0; const total = await this.loader.getTotalObjectCount(); const maxFullObjectLoadCount = this.getMaxFullObjectLoadCount(); if (maxFullObjectLoadCount > 0 && total > maxFullObjectLoadCount) { const message = `Viewer full-load guard: object ${this.resource} has ${total.toLocaleString()} ` + `Speckle objects, above the safe full-load limit of ${maxFullObjectLoadCount.toLocaleString()}. ` + `The model was not loaded to avoid browser out-of-memory. Generate a large-model derivative ` + `or set ${MAX_FULL_OBJECT_LOAD_COUNT_STORAGE_KEY}=0 to override locally.`; Logger.error(message); this.emit(LoaderEvent.LoadWarning, { message }); this.emit(LoaderEvent.LoadProgress, { progress: 1, id: this.resource }); this.emit(LoaderEvent.LoadCancelled, this.resource); await this.loader.disposeAsync(); return Promise.resolve(false); } let traversals = 0; let firstObjectPromise = null; this.progressListen(); Logger.warn('Downloading object ', this.resource); for await (const obj of this.loader.getObjectIterator()) { if (this.isCancelled) { this.emit(LoaderEvent.LoadCancelled, this.resource); return Promise.resolve(false); } if (first) { firstObjectPromise = this.converter.traverse(this.resource, obj, count => { traversals++; this.emit(LoaderEvent.Traversed, { count }); }); first = false; } dataloading++; this.emit(LoaderEvent.LoadProgress, { progress: total > 0 ? Math.min(OBJECT_LOADING_PROGRESS_MAX, dataloading / total * OBJECT_LOADING_PROGRESS_MAX) : OBJECT_LOADING_PROGRESS_MAX, id: this.resource }); } if (firstObjectPromise) { await firstObjectPromise; } Logger.warn(`Finished loading/traversing object ${this.resource} in ${(performance.now() - phaseStart) / TIME_MS.second} seconds. Loaded objects: ${dataloading}/${total}. Node count: ${this.tree.nodeCount}`); phaseStart = performance.now(); Logger.warn(`Finished converting object ${this.resource} in ${(performance.now() - start) / TIME_MS.second} seconds. Node count: ${this.tree.nodeCount}`); if (traversals === 0) { Logger.warn(`Viewer: no 3d objects found in object ${this.resource}`); this.emit(LoaderEvent.LoadWarning, { message: `No displayable objects found in object ${this.resource}.` }); } if (this.isCancelled) { return Promise.resolve(false); } await this.converter.convertInstances(); await this.converter.applyMaterials(); await this.converter.handleDuplicates(); this.emit(LoaderEvent.LoadProgress, { progress: POST_PROCESSING_PROGRESS, id: this.resource }); Logger.warn(`Finished post-processing object ${this.resource} in ${(performance.now() - phaseStart) / TIME_MS.second} seconds.`); phaseStart = performance.now(); await this.preloadBinaryMeshes((loaded, totalBlobs) => { this.emit(LoaderEvent.LoadProgress, { progress: BLOB_PRELOAD_PROGRESS_START + loaded / totalBlobs * (BLOB_PRELOAD_PROGRESS_END - BLOB_PRELOAD_PROGRESS_START), id: this.resource }); }); Logger.warn(`Finished preloading binary mesh blobs for ${this.resource} in ${(performance.now() - phaseStart) / TIME_MS.second} seconds.`); phaseStart = performance.now(); await this.loader.disposeAsync(); const t0 = performance.now(); const geometryConverter = new SpeckleGeometryConverter(); const renderTree = this.tree.getRenderTree(this.resource); if (!renderTree) return Promise.resolve(false); const renderNodeCount = Math.max(this.tree.nodeCount, 1); const p = renderTree.buildRenderTree(geometryConverter, count => { this.emit(LoaderEvent.Converted, { count }); this.emit(LoaderEvent.LoadProgress, { progress: Math.min(RENDER_TREE_PROGRESS_END, RENDER_TREE_PROGRESS_START + count / renderNodeCount * (RENDER_TREE_PROGRESS_END - RENDER_TREE_PROGRESS_START)), id: this.resource }); }); Logger.warn(`Finished rendering object . Node count: ${this.tree.nodeCount} Total: ${total}`); void p.then(() => { Logger.log('ASYNC Tree build time -> ', performance.now() - t0); Logger.log('Node build time -> ', renderTree.buildNodeTime); Logger.log('Apply transform time -> ', renderTree.applyTransformTime); Logger.log('Geometry build time -> ', renderTree.convertTime); Logger.log('Get Node time -> ', renderTree.getNodeTime); Logger.log('Other time -> ', renderTree.otherTime); Logger.log('Triangulation time -> ', geometryConverter.meshTriangulationTime); Logger.log('ACTUAL Triangulation time -> ', geometryConverter.actualTriangulateTime); Logger.log('Push time -> ', geometryConverter.pushTime); Logger.warn(`Finished building render tree for ${this.resource} in ${(performance.now() - phaseStart) / TIME_MS.second} seconds.`); this.isFinished = true; }); return p; } progressListen() { if (getFeatureFlag(ObjectLoader2Flags.DEBUG, false) !== 'true') { return; } let dataProgress = 0; this.on(LoaderEvent.LoadProgress, data => { const p = Math.floor(data.progress * 100); if (p > dataProgress) { Logger.log(`[debug] Loading ${p}%`); dataProgress = p; } }); this.on(LoaderEvent.Traversed, data => { if (data.count % 500 === 0) { Logger.log(`[debug] Traversed ${data.count}`); } }); this.on(LoaderEvent.Converted, data => { if (data.count % 500 === 0) { Logger.log(`[debug] Converted ${data.count}`); } }); } async preloadBinaryMeshes(progress) { const blobsToFetch = new Set(); this.tree.walk(node => { const isBinaryMesh = `${node.model.raw.speckle_type || ''}`.split(':').some(type => type.endsWith('BinaryMesh')); if (isBinaryMesh && node.model.raw.blobId) { blobsToFetch.add(`${node.model.raw.blobId}`); } return true; }); if (blobsToFetch.size > 0) { Logger.warn(`Preloading ${blobsToFetch.size} binary mesh blobs...`); const serverUrl = new URL(this.resource).origin; let token = undefined; try { token = localStorage.getItem('AuthToken'); } catch {} const urlObj = new URL(this.resource); const segments = urlObj.pathname.split('/'); const streamId = segments[2]; // /streams/STREAM_ID/... const blobIds = [...blobsToFetch].filter(blobId => !SpeckleGeometryConverter.blobCache[blobId]); if (blobIds.length === 0) { progress === null || progress === void 0 ? void 0 : progress(blobsToFetch.size, blobsToFetch.size); return; } let loaded = blobsToFetch.size - blobIds.length; const fetchBlob = async blobId => { if (SpeckleGeometryConverter.blobCache[blobId]) { loaded++; progress === null || progress === void 0 ? void 0 : progress(loaded, blobsToFetch.size); return; } const blobUrl = `${serverUrl}/api/stream/${streamId}/blob/${blobId}`; try { const res = await fetch(blobUrl, { headers: token ? { Authorization: `Bearer ${token}` } : undefined }); if (res.ok) { const buffer = await res.arrayBuffer(); SpeckleGeometryConverter.blobCache[blobId] = buffer; } else { Logger.error(`Failed to preload blob ${blobId}: ${res.statusText}`); } } catch (e) { Logger.error(`Error fetching blob ${blobId}`, e); } finally { loaded++; progress === null || progress === void 0 ? void 0 : progress(loaded, blobsToFetch.size); } }; for (let i = 0; i < blobIds.length; i += BLOB_PRELOAD_CONCURRENCY) { await Promise.all(blobIds.slice(i, i + BLOB_PRELOAD_CONCURRENCY).map(fetchBlob)); } } } getMaxFullObjectLoadCount() { let configuredValue; try { configuredValue = globalThis.SPECKLE_VIEWER_MAX_FULL_OBJECT_LOAD_COUNT; configuredValue !== null && configuredValue !== void 0 ? configuredValue : configuredValue = localStorage.getItem(MAX_FULL_OBJECT_LOAD_COUNT_STORAGE_KEY); } catch { // localStorage/global overrides may be unavailable in some runtimes. } if (configuredValue === undefined || configuredValue === null || configuredValue === '') { return DEFAULT_MAX_FULL_OBJECT_LOAD_COUNT; } const normalizedValue = `${configuredValue}`.trim().toLowerCase(); if (['0', 'false', 'off', 'disabled'].includes(normalizedValue)) { return 0; } const parsedValue = Number.parseInt(normalizedValue, 10); return Number.isFinite(parsedValue) && parsedValue > 0 ? parsedValue : DEFAULT_MAX_FULL_OBJECT_LOAD_COUNT; } cancel() { this.isCancelled = true; this.isFinished = false; } dispose() { super.dispose(); void this.loader.disposeAsync(); } } var VisualDiffMode; (function (VisualDiffMode) { VisualDiffMode[VisualDiffMode["PLAIN"] = 0] = "PLAIN"; VisualDiffMode[VisualDiffMode["COLORED"] = 1] = "COLORED"; })(VisualDiffMode || (VisualDiffMode = {})); class DiffExtension extends Extension { get enabled() { return this._enabled; } set enabled(value) { this._enabled = value; } constructor(viewer) { super(viewer); this.addedMaterials = []; this.changedOldMaterials = []; this.changedNewMaterials = []; this.removedMaterials = []; this._diffTime = -1; this._diffMode = VisualDiffMode.COLORED; this.dynamicallyLoadedDiffResources = []; this.tree = viewer.getWorldTree(); this.addedMaterialMesh = new SpeckleStandardMaterial({ color: new Color('#00ff00'), emissive: 0x0, roughness: 1, metalness: 0, opacity: 1, side: FrontSide }); this.addedMaterialMesh.vertexColors = false; this.addedMaterialMesh.depthWrite = true; this.addedMaterialMesh.transparent = true; this.addedMaterialMesh.clipShadows = true; this.addedMaterialMesh.color.convertSRGBToLinear(); this.addedMaterialMesh.clippingPlanes = []; this.changedNewMaterialMesh = new SpeckleStandardMaterial({ color: new Color('#ffff00'), emissive: 0x0, roughness: 1, metalness: 0, opacity: 1, side: FrontSide }); this.changedNewMaterialMesh.vertexColors = false; this.changedNewMaterialMesh.transparent = true; this.changedNewMaterialMesh.depthWrite = true; this.changedNewMaterialMesh.clipShadows = true; this.changedNewMaterialMesh.color.convertSRGBToLinear(); this.changedNewMaterialMesh.clippingPlanes = []; this.changedOldMaterialMesh = new SpeckleStandardMaterial({ color: new Color('#ffff00'), emissive: 0x0, roughness: 1, metalness: 0, opacity: 1, side: FrontSide }); this.changedOldMaterialMesh.vertexColors = false; this.changedOldMaterialMesh.transparent = true; this.changedOldMaterialMesh.depthWrite = true; this.changedOldMaterialMesh.clipShadows = true; this.changedOldMaterialMesh.color.convertSRGBToLinear(); this.changedOldMaterialMesh.clippingPlanes = []; this.removedMaterialMesh = new SpeckleStandardMaterial({ color: new Color('#ff0000'), emissive: 0x0, roughness: 1, metalness: 0, opacity: 1, side: FrontSide }); this.removedMaterialMesh.vertexColors = false; this.removedMaterialMesh.transparent = true; this.removedMaterialMesh.depthWrite = true; this.removedMaterialMesh.clipShadows = true; this.removedMaterialMesh.color.convertSRGBToLinear(); this.removedMaterialMesh.clippingPlanes = []; this.addedMaterialPoint = new SpecklePointMaterial({ color: 0x00ff00, vertexColors: false, size: 2, sizeAttenuation: false }); this.addedMaterialPoint.transparent = true; this.addedMaterialPoint.color.convertSRGBToLinear(); this.addedMaterialPoint.toneMapped = false; this.addedMaterialPoint.clippingPlanes = []; this.changedNewMaterialPoint = new SpecklePointMaterial({ color: 0xffff00, vertexColors: false, size: 2, sizeAttenuation: false }); this.changedNewMaterialPoint.transparent = true; this.changedNewMaterialPoint.color.convertSRGBToLinear(); this.changedNewMaterialPoint.toneMapped = false; this.changedNewMaterialPoint.clippingPlanes = []; this.changedOldMaterialPoint = new SpecklePointMaterial({ color: 0xffff00, vertexColors: false, size: 2, sizeAttenuation: false }); this.changedOldMaterialPoint.transparent = true; this.changedOldMaterialPoint.color.convertSRGBToLinear(); this.changedOldMaterialPoint.toneMapped = false; this.changedOldMaterialPoint.clippingPlanes = []; this.removedMaterialPoint = new SpecklePointMaterial({ color: 0xff0000, vertexColors: false, size: 2, sizeAttenuation: false }); this.removedMaterialPoint.transparent = true; this.removedMaterialPoint.color.convertSRGBToLinear(); this.removedMaterialPoint.toneMapped = false; this.removedMaterialPoint.clippingPlanes = []; } async diff(urlA, urlB, mode, authToken) { const loadPromises = []; this.dynamicallyLoadedDiffResources = []; if (!this.tree.findId(urlA)) { loadPromises.push(this.viewer.loadObject(new SpeckleLoader(this.viewer.getWorldTree(), urlA, authToken), false)); this.dynamicallyLoadedDiffResources.push(urlA); } if (!this.tree.findId(urlB)) { loadPromises.push(this.viewer.loadObject(new SpeckleLoader(this.viewer.getWorldTree(), urlB, authToken), false)); this.dynamicallyLoadedDiffResources.push(urlB); } await Promise.all(loadPromises); const diffResult = await this.getDiff(urlA, urlB); const depthPasses = this.viewer.getRenderer().pipeline.getPass('DEPTH'); depthPasses.forEach(value => { value.depthSide = FrontSide; }); this.updateVisualDiff(0, mode); return Promise.resolve(diffResult); } /** Currently, the diff does not store the existing materials. We can do that if we need to */ async undiff() { const depthPasses = this.viewer.getRenderer().pipeline.getPass('DEPTH'); depthPasses.forEach(value => { value.depthSide = DoubleSide; }); this.resetMaterialGroups(); this.viewer.getRenderer().resetMaterials(); const unloadPromises = []; if (this.dynamicallyLoadedDiffResources.length !== 0) { for (const id of this.dynamicallyLoadedDiffResources) unloadPromises.push(this.viewer.unloadObject(id)); } this.dynamicallyLoadedDiffResources = []; await Promise.all(unloadPromises); } buildIdMaps(rvs, idMap, appIdMap) { var _a; for (let k = 0; k < rvs.length; k++) { const atomicRv = rvs[k]; const applicationId = atomicRv.model.raw.applicationId ? atomicRv.model.raw.applicationId : (_a = this.tree.getAncestors(atomicRv).find(value => value.model.raw.applicationId)) === null || _a === void 0 ? void 0 : _a.model.raw.applicationId; idMap[atomicRv.model.raw.id] = { node: atomicRv, applicationId }; if (applicationId) { appIdMap[applicationId] = atomicRv; } } } async getDiff(urlA, urlB) { const diffResult = await this.diffIterative(urlA, urlB); this._visualDiff = this.getVisualDiffResult(diffResult); return Promise.resolve(diffResult); } diffIterative(urlA, urlB) { var _a, _b; const diffResult = { unchanged: [], added: [], removed: [], modified: [] }; const renderTreeA = this.tree.getRenderTree(urlA); const renderTreeB = this.tree.getRenderTree(urlB); if (!renderTreeA) { return Promise.reject(new Error(`Could not make diff. Resource ${urlA} could not be fetched`)); } if (!renderTreeB) { return Promise.reject(new Error(`Could not make diff. Resource ${urlB} could not be fetched`)); } let rvsA = renderTreeA.getRenderableNodes(...SpeckleTypeAllRenderables); let rvsB = renderTreeB.getRenderableNodes(...SpeckleTypeAllRenderables); rvsA = rvsA.map(value => { return renderTreeA.getAtomicParent(value); }); rvsB = rvsB.map(value => { return renderTreeB.getAtomicParent(value); }); rvsA = [...Array.from(new Set(rvsA))]; rvsB = [...Array.from(new Set(rvsB))]; const idMapA = {}; const appIdMapA = {}; this.buildIdMaps(rvsA, idMapA, appIdMapA); const idMapB = {}; const appIdMapB = {}; this.buildIdMaps(rvsB, idMapB, appIdMapB); for (let k = 0; k < rvsB.length; k++) { const res = (_a = idMapA[rvsB[k].model.raw.id]) === null || _a === void 0 ? void 0 : _a.node; if (res) { diffResult.unchanged.push(res); } else { const applicationId = idMapB[rvsB[k].model.raw.id].applicationId; if (!applicationId) { Logger.error(`No application ID found. Object id:${rvsB[k].model.raw.id} is considered 'added'!`); diffResult.added.push(rvsB[k]); continue; } const res2 = appIdMapA[applicationId]; if (res2) { diffResult.modified.push([res2, rvsB[k]]); } else { diffResult.added.push(rvsB[k]); } } } for (let k = 0; k < rvsA.length; k++) { const res = (_b = idMapB[rvsA[k].model.raw.id]) === null || _b === void 0 ? void 0 : _b.node; if (!res) { const applicationId = idMapA[rvsA[k].model.raw.id].applicationId; if (!applicationId) { Logger.error(`No application ID found. Object id:${rvsA[k].model.raw.id} is considered 'removed'!`); diffResult.removed.push(rvsA[k]); continue; } const res2 = appIdMapB[applicationId]; if (!res2) { diffResult.removed.push(rvsA[k]); } } else { diffResult.unchanged.push(res); } } return Promise.resolve(diffResult); } updateVisualDiff(time, mode) { if (mode !== undefined && mode !== this._diffMode || !this._materialGroups) { this.resetMaterialGroups(); /** Catering to typescript */ if (mode !== undefined) { this.buildMaterialGroups(mode); this._diffMode = mode; } } let needsRenderReset = false; if (time !== undefined && time !== this._diffTime) { /** We only want to do a reset at the edges of the time value * because that's where materials become to/from visible from/to visible */ needsRenderReset = this._diffTime === 0 !== (time === 0) || this._diffTime === 1 !== (time === 1); this.setDiffTime(time); this._diffTime = time; } if (this._materialGroups) this._materialGroups.forEach(value => { this.viewer.getRenderer().setMaterial(value.rvs, value.material); }); this.viewer.requestRender(needsRenderReset ? UpdateFlags.RENDER_RESET | UpdateFlags.SHADOWS : UpdateFlags.RENDER); } setDiffTime(time) { const from = Math.min(Math.max(1 - time, 0), 1); const to = Math.min(Math.max(time, 0), 1); this.addedMaterials.forEach(mat => { mat.opacity = mat['clampOpacity'] !== undefined ? Math.min(from, mat['clampOpacity']) : from; mat.depthWrite = from < 0.5 ? false : true; mat.transparent = mat.opacity < 1; mat.visible = mat.opacity === 0 ? false : true; mat.needsCopy = true; }); this.changedOldMaterials.forEach(mat => { mat.opacity = mat['clampOpacity'] !== undefined ? Math.min(to, mat['clampOpacity']) : to; mat.depthWrite = to < 0.5 ? false : true; mat.transparent = mat.opacity < 1; mat.visible = mat.opacity === 0 ? false : true; mat.needsCopy = true; }); this.changedNewMaterials.forEach(mat => { mat.opacity = mat['clampOpacity'] !== undefined ? Math.min(from, mat['clampOpacity']) : from; mat.depthWrite = from < 0.5 ? false : true; mat.transparent = mat.opacity < 1; mat.visible = mat.opacity === 0 ? false : true; mat.needsCopy = true; }); this.removedMaterials.forEach(mat => { mat.opacity = mat['clampOpacity'] !== undefined ? Math.min(to, mat['clampOpacity']) : to; mat.depthWrite = to < 0.5 ? false : true; mat.transparent = mat.opacity < 1; mat.visible = mat.opacity === 0 ? false : true; mat.needsCopy = true; }); } buildMaterialGroups(mode) { switch (mode) { case VisualDiffMode.COLORED: this._materialGroups = this.getColoredMaterialGroups(this._visualDiff); break; case VisualDiffMode.PLAIN: this._materialGroups = this.getPlainMaterialGroups(this._visualDiff); break; default: Logger.error(`Unsupported visual diff mode ${mode}`); } } resetMaterialGroups() { this._materialGroups = null; this.addedMaterials = []; this.changedOldMaterials = []; this.changedNewMaterials = []; this.removedMaterials = []; } getVisualDiffResult(diffResult) { const renderTree = this.tree.getRenderTree(); const addedRvs = diffResult.added.flatMap(value => { return renderTree.getRenderViewsForNode(value); }); const removedRvs = diffResult.removed.flatMap(value => { return renderTree.getRenderViewsForNode(value); }); const unchangedRvs = diffResult.unchanged.flatMap(value => { return renderTree.getRenderViewsForNode(value); }); const modifiedOldRvs = diffResult.modified.flatMap(value => { return renderTree.getRenderViewsForNode(value[0]); }).filter(value => { return !unchangedRvs.includes(value) && !removedRvs.includes(value); }); const modifiedNewRvs = diffResult.modified.flatMap(value => { return renderTree.getRenderViewsForNode(value[1]); }).filter(value => { return !unchangedRvs.includes(value) && !addedRvs.includes(value); }); return { unchanged: unchangedRvs, added: addedRvs, removed: removedRvs, modifiedOld: modifiedOldRvs, modifiedNew: modifiedNewRvs }; } getColoredMaterialGroups(visualDiffResult) { const groups = [ // MESHES & LINES // Currently lines work with mesh specific materials due to how the LineBatch is implemented. // We could use specific line materials, but it won't make a difference until we elevate the // LineBatch a bit { rvs: visualDiffResult.added.filter(value => value.geometryType === GeometryType.MESH || value.geometryType === GeometryType.LINE), material: this.addedMaterialMesh }, { rvs: visualDiffResult.modifiedNew.filter(value => value.geometryType === GeometryType.MESH || value.geometryType === GeometryType.LINE), material: this.changedNewMaterialMesh }, { rvs: visualDiffResult.modifiedOld.filter(value => value.geometryType === GeometryType.MESH || value.geometryType === GeometryType.LINE), material: this.changedOldMaterialMesh }, { rvs: visualDiffResult.removed.filter(value => value.geometryType === GeometryType.MESH || value.geometryType === GeometryType.LINE), material: this.removedMaterialMesh }, //POINTS { rvs: visualDiffResult.added.filter(value => value.geometryType === GeometryType.POINT || value.geometryType === GeometryType.POINT_CLOUD), material: this.addedMaterialPoint }, { rvs: visualDiffResult.modifiedNew.filter(value => value.geometryType === GeometryType.POINT || value.geometryType === GeometryType.POINT_CLOUD), material: this.changedNewMaterialPoint }, { rvs: visualDiffResult.modifiedOld.filter(value => value.geometryType === GeometryType.POINT || value.geometryType === GeometryType.POINT_CLOUD), material: this.changedOldMaterialPoint }, { rvs: visualDiffResult.removed.filter(value => value.geometryType === GeometryType.POINT || value.geometryType === GeometryType.POINT_CLOUD), material: this.removedMaterialPoint }]; this.addedMaterials.push(this.addedMaterialMesh, this.addedMaterialPoint); this.changedOldMaterials.push(this.changedOldMaterialMesh, this.changedOldMaterialPoint); this.changedNewMaterials.push(this.changedNewMaterialMesh, this.changedNewMaterialPoint); this.removedMaterials.push(this.removedMaterialMesh, this.removedMaterialPoint); return groups.filter(value => value.rvs.length > 0); } getPlainMaterialGroups(visualDiffResult) { const added = this.getBatchesSubgroups(visualDiffResult.added); const changedOld = this.getBatchesSubgroups(visualDiffResult.modifiedOld); const changedNew = this.getBatchesSubgroups(visualDiffResult.modifiedNew); const removed = this.getBatchesSubgroups(visualDiffResult.removed); this.addedMaterials = added.map(value => value.material); this.changedOldMaterials = changedOld.map(value => value.material); this.changedNewMaterials = changedNew.map(value => value.material); this.removedMaterials = removed.map(value => value.material); return [...added, ...changedOld, ...changedNew, ...removed]; } getBatchesSubgroups(subgroup) { const groupBatches = groupBy(subgroup, 'batchId'); const materialGroup = []; for (const k in groupBatches) { const matClone = this.viewer.getRenderer().getBatchMaterial(groupBatches[k][0]).clone(); matClone['clampOpacity'] = matClone.opacity; matClone.opacity = 0.5; matClone.transparent = true; materialGroup.push({ rvs: groupBatches[k], material: matClone }); } return materialGroup; } } class ObjConverter { constructor(tree) { this.lastAsyncPause = 0; this.NodeConverterMapping = { Group: this.groupToNode.bind(this), Mesh: this.MeshToNode.bind(this) }; this.tree = tree; } async asyncPause() { // Don't freeze the UI when doing all those traversals if (Date.now() - this.lastAsyncPause >= 100) { this.lastAsyncPause = Date.now(); await new Promise(resolve => setTimeout(resolve, 0)); } } async traverse(objectURL, object, callback, node = null) { await this.asyncPause(); const childNode = this.tree.parse({ id: !node ? objectURL : object.uuid, raw: object, atomic: true, children: [] }); if (!node) { this.tree.addSubtree(childNode); } else { this.tree.addNode(childNode, node); } const type = object.type; if (this.directNodeConverterExists(object)) { try { await this.convertToNode(object, childNode); } catch (e) { Logger.warn(`(Traversing - direct) Failed to convert ${type} with id: ${object.uuid}`, e); } } for (let k = 0; k < object.children.length; k++) { await this.traverse(objectURL, object.children[k], callback, childNode); } } directNodeConverterExists(obj) { return obj.type in this.NodeConverterMapping; } async convertToNode(obj, node) { try { if (this.directNodeConverterExists(obj)) { const delegate = this.NodeConverterMapping[obj.type]; if (delegate) return await delegate(obj, node); } return null; } catch (e) { Logger.warn(`(Direct convert) Failed to convert object with id: ${obj.id}`); throw e; } } async MeshToNode(_obj, node) { var _a, _b; const obj = _obj; if (!obj) return; if (!obj.geometry.attributes.position || obj.geometry.attributes.position.array.length === 0) { Logger.warn(`Object id ${obj.id} of type ${obj.type} has no vertex position data and will be ignored`); return; } node.model.raw.vertices = obj.geometry.attributes.position.array; node.model.raw.faces = (_a = obj.geometry.index) === null || _a === void 0 ? void 0 : _a.array; node.model.raw.colors = (_b = obj.geometry.attributes.color) === null || _b === void 0 ? void 0 : _b.array; node.model.raw.renderMaterial = this.meshMaterialToRenderMaterial(obj); return Promise.resolve(); } meshMaterialToRenderMaterial(obj) { var _a, _b; const material = Array.isArray(obj.material) ? obj.material[0] : obj.material; const color = this.getMaterialColor(material); const opacity = (_a = material === null || material === void 0 ? void 0 : material.opacity) !== null && _a !== void 0 ? _a : 1; return { id: (_b = material === null || material === void 0 ? void 0 : material.uuid) !== null && _b !== void 0 ? _b : `${obj.uuid}:material`, speckle_type: 'Objects.Other.RenderMaterial', name: (material === null || material === void 0 ? void 0 : material.name) || 'Material', diffuse: this.toArgbInt(color.r, color.g, color.b, opacity), opacity, roughness: 1, metalness: 0 }; } getMaterialColor(material) { var _a; const maybeColor = material; return (_a = maybeColor === null || maybeColor === void 0 ? void 0 : maybeColor.color) !== null && _a !== void 0 ? _a : { r: 0.5, g: 0.5, b: 0.5 }; } toArgbInt(r, g, b, a) { const alpha = this.toByte(a); const red = this.toByte(r); const green = this.toByte(g); const blue = this.toByte(b); return alpha << 24 | red << 16 | green << 8 | blue; } toByte(value) { return Math.max(0, Math.min(255, Math.round(value * 255))); } groupToNode(obj, node) { return Promise.resolve(); } } class ObjGeometryConverter extends GeometryConverter { getSpeckleType(node) { switch (node.raw.type) { case 'Group': return SpeckleType.BlockInstance; case 'Mesh': return SpeckleType.Mesh; default: return SpeckleType.Unknown; } } convertNodeToGeometryData(node) { const type = this.getSpeckleType(node); switch (type) { case SpeckleType.BlockInstance: return this.BlockInstanceToGeometryData(node); case SpeckleType.Mesh: return this.MeshToGeometryData(node); default: return null; } } disposeNodeGeometryData(node) { var _a, _b, _c; const raw = node.raw; if (raw.type === 'Mesh') { (_b = (_a = raw.geometry) === null || _a === void 0 ? void 0 : _a.dispose) === null || _b === void 0 ? void 0 : _b.call(_a); delete raw.geometry; delete raw.material; delete raw.vertices; delete raw.faces; delete raw.colors; delete raw.normals; return; } if (raw.type === 'Group') { (_c = raw.clear) === null || _c === void 0 ? void 0 : _c.call(raw); if (Array.isArray(raw.children)) raw.children.length = 0; } } /** BLOCK INSTANCE */ BlockInstanceToGeometryData(node) { const conversionFactor = 1; const matrix = new Matrix4().copy(node.raw.matrixWorld); const transform = new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor).multiply(matrix).multiply(new Matrix4().makeScale(1 / conversionFactor, 1 / conversionFactor, 1 / conversionFactor)); return { attributes: null, bakeTransform: null, transform }; } /** * MESH */ MeshToGeometryData(node) { if (!node.raw) return null; const conversionFactor = 1; if (!node.raw.geometry.index || node.raw.geometry.index.array.length === 0) { node.raw.geometry = mergeVertices(node.raw.geometry); } return { attributes: { POSITION: new ChunkArray([{ data: node.raw.geometry.attributes.position.array, id: MathUtils.generateUUID(), references: 1 }]), INDEX: new ChunkArray([{ data: node.raw.geometry.index.array, id: MathUtils.generateUUID(), references: 1 }]), ...(node.raw.geometry.attributes.color && { COLOR: new ChunkArray([{ data: node.raw.geometry.attributes.color.array, id: MathUtils.generateUUID(), references: 1 }]) }) }, bakeTransform: new Matrix4().makeScale(conversionFactor, conversionFactor, conversionFactor), transform: null }; } } const tileMagic = 'SPKTILE1'; const textDecoder = new TextDecoder(); const DEFAULT_TILE_LOAD_CONCURRENCY = 4; const TILE_LOAD_CONCURRENCY_STORAGE_KEY = 'SPECKLE_VIEWER_LARGE_MODEL_TILE_LOAD_CONCURRENCY'; class LargeModelStreamingLoader extends Loader { get resource() { return this._resource; } get finished() { return this.isFinished; } constructor(targetTree, resource, manifest, artifactBaseUrl, token) { super(resource); this.isFinished = false; this.isCancelled = false; this.abortControllers = new Set(); this.ifcElementPartIds = new Map(); this.tree = targetTree; this.converter = new ObjConverter(targetTree); this.manifest = manifest; this.artifactBaseUrl = artifactBaseUrl.replace(/\/$/, ''); this.token = token; } async load() { const group = new Group(); group.name = this._resource; const selectedTiles = this.selectInitialTiles(); let loadedTiles = 0; const concurrency = this.getPositiveIntegerSetting(TILE_LOAD_CONCURRENCY_STORAGE_KEY, DEFAULT_TILE_LOAD_CONCURRENCY); for (let i = 0; i < selectedTiles.length; i += concurrency) { if (this.isCancelled) return false; const batch = selectedTiles.slice(i, i + concurrency); const tileGroups = await Promise.all(batch.map(({ lod }) => this.loadTile(lod.url).catch(err => { if (this.isCancelled) return null; throw err; }))); for (const tileGroup of tileGroups) { if (!tileGroup) return false; if (this.isCancelled) return false; group.add(tileGroup); loadedTiles++; this.emit(LoaderEvent.LoadProgress, { id: this._resource, progress: loadedTiles / Math.max(selectedTiles.length, 1) }); } } if (this.isCancelled) return false; await this.converter.traverse(this._resource, group, () => Promise.resolve()); if (this.isCancelled) return false; const renderTree = this.tree.getRenderTree(this._resource); if (!renderTree) { Logger.error(`Could not get render tree for ${this._resource}`); return false; } const built = await renderTree.buildRenderTree(new ObjGeometryConverter()); this.isFinished = built; return built; } cancel() { this.isCancelled = true; this.abortControllers.forEach(controller => controller.abort()); this.abortControllers.clear(); this.isFinished = false; this.emit(LoaderEvent.LoadCancelled, this._resource); } selectInitialTiles() { const modelCenter = this.getBoundsCenter(this.manifest.bounds); return this.manifest.tiles.map(tile => { var _a; const lod = this.getLowestLod(tile); if (!(lod === null || lod === void 0 ? void 0 : lod.url)) return null; const center = this.getBoundsCenter(tile.bbox); return { tile, lod, centerDistance: center ? (_a = modelCenter === null || modelCenter === void 0 ? void 0 : modelCenter.distanceToSquared(center)) !== null && _a !== void 0 ? _a : 0 : Number.MAX_SAFE_INTEGER }; }).filter(tile => !!tile).sort((a, b) => { var _a, _b; if (a.centerDistance !== b.centerDistance) { return a.centerDistance - b.centerDistance; } return ((_a = a.lod.bytes) !== null && _a !== void 0 ? _a : 0) - ((_b = b.lod.bytes) !== null && _b !== void 0 ? _b : 0); }); } getLowestLod(tile) { return tile.lods.filter(lod => !!(lod === null || lod === void 0 ? void 0 : lod.url)).sort((a, b) => { var _a, _b, _c, _d; const levelA = (_a = a.level) !== null && _a !== void 0 ? _a : 0; const levelB = (_b = b.level) !== null && _b !== void 0 ? _b : 0; if (levelA !== levelB) return levelA - levelB; return ((_c = a.bytes) !== null && _c !== void 0 ? _c : 0) - ((_d = b.bytes) !== null && _d !== void 0 ? _d : 0); })[0]; } getBoundsCenter(bounds) { if (!bounds || bounds.length < 6) return null; return new Vector3((bounds[0] + bounds[3]) / 2, (bounds[1] + bounds[4]) / 2, (bounds[2] + bounds[5]) / 2); } async loadTile(tileUrl) { const abortController = new AbortController(); this.abortControllers.add(abortController); try { const res = await fetch(`${this.artifactBaseUrl}/${tileUrl}`, { headers: this.token ? { Authorization: `Bearer ${this.token}` } : undefined, cache: 'no-store', signal: abortController.signal }); if (!res.ok) { throw new Error(`Failed to load viewer derivative tile ${tileUrl}`); } return this.parseTile(await res.arrayBuffer(), tileUrl); } finally { this.abortControllers.delete(abortController); } } parseTile(buffer, tileUrl) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; const view = new DataView(buffer); let offset = 0; const magic = textDecoder.decode(new Uint8Array(buffer, offset, tileMagic.length)); offset += tileMagic.length; if (magic !== tileMagic) { throw new Error(`Invalid viewer derivative tile magic in ${tileUrl}`); } const version = view.getInt32(offset, true); offset += 4; if (version !== 1 && version !== 2 && version !== 3 && version !== 4 && version !== 5) { throw new Error(`Unsupported viewer derivative tile version ${version}`); } const meshCount = view.getInt32(offset, true); offset += 4; const group = new Group(); group.name = tileUrl; for (let i = 0; i < meshCount; i++) { const expressId = view.getInt32(offset, true); offset += 4; const meshId = view.getInt32(offset, true); offset += 4; const ifcGuid = version >= 2 ? this.readTileString(buffer, view, offset) : null; if (version >= 2) offset += (_a = ifcGuid === null || ifcGuid === void 0 ? void 0 : ifcGuid.totalByteLength) !== null && _a !== void 0 ? _a : 0; const ifcType = version >= 3 ? this.readTileString(buffer, view, offset) : null; if (version >= 3) offset += (_b = ifcType === null || ifcType === void 0 ? void 0 : ifcType.totalByteLength) !== null && _b !== void 0 ? _b : 0; const ifcName = version >= 3 ? this.readTileString(buffer, view, offset) : null; if (version >= 3) offset += (_c = ifcName === null || ifcName === void 0 ? void 0 : ifcName.totalByteLength) !== null && _c !== void 0 ? _c : 0; const ifcElementAssemblyGuid = version >= 4 ? this.readTileString(buffer, view, offset) : null; if (version >= 4) offset += (_d = ifcElementAssemblyGuid === null || ifcElementAssemblyGuid === void 0 ? void 0 : ifcElementAssemblyGuid.totalByteLength) !== null && _d !== void 0 ? _d : 0; const ifcElementAssemblyType = version >= 4 ? this.readTileString(buffer, view, offset) : null; if (version >= 4) offset += (_e = ifcElementAssemblyType === null || ifcElementAssemblyType === void 0 ? void 0 : ifcElementAssemblyType.totalByteLength) !== null && _e !== void 0 ? _e : 0; const ifcElementAssemblyName = version >= 4 ? this.readTileString(buffer, view, offset) : null; if (version >= 4) offset += (_f = ifcElementAssemblyName === null || ifcElementAssemblyName === void 0 ? void 0 : ifcElementAssemblyName.totalByteLength) !== null && _f !== void 0 ? _f : 0; const sourceGuid = version >= 5 ? this.readTileString(buffer, view, offset) : null; if (version >= 5) offset += (_g = sourceGuid === null || sourceGuid === void 0 ? void 0 : sourceGuid.totalByteLength) !== null && _g !== void 0 ? _g : 0; const ifcElementAssemblySourceGuid = version >= 5 ? this.readTileString(buffer, view, offset) : null; if (version >= 5) { offset += (_h = ifcElementAssemblySourceGuid === null || ifcElementAssemblySourceGuid === void 0 ? void 0 : ifcElementAssemblySourceGuid.totalByteLength) !== null && _h !== void 0 ? _h : 0; } const vertexCount = view.getInt32(offset, true); offset += 4; const indexCount = view.getInt32(offset, true); offset += 4; const color = [view.getFloat32(offset, true), view.getFloat32(offset + 4, true), view.getFloat32(offset + 8, true), view.getFloat32(offset + 12, true)]; offset += 16; const transform = new Array(16); for (let j = 0; j < 16; j++) { transform[j] = view.getFloat32(offset, true); offset += 4; } const positions = new Float32Array(new Float32Array(buffer, offset, vertexCount * 3)); offset += vertexCount * 3 * Float32Array.BYTES_PER_ELEMENT; const indices = new Uint32Array(new Uint32Array(buffer, offset, indexCount)); offset += indexCount * Uint32Array.BYTES_PER_ELEMENT; const geometry = new BufferGeometry(); geometry.setAttribute('position', new Float32BufferAttribute(positions, 3)); geometry.setIndex(new Uint32BufferAttribute(indices, 1)); const mesh = new Mesh(geometry, new MeshBasicMaterial({ color: new Color(color[0], color[1], color[2]), opacity: color[3], transparent: color[3] < 1, side: DoubleSide })); mesh.uuid = `${tileUrl}:${expressId}:${meshId}`; mesh.name = `Part ${meshId}`; const ifcElementGuid = (_j = ifcElementAssemblyGuid === null || ifcElementAssemblyGuid === void 0 ? void 0 : ifcElementAssemblyGuid.value) !== null && _j !== void 0 ? _j : ifcGuid === null || ifcGuid === void 0 ? void 0 : ifcGuid.value; const ifcElementSourceGuid = (_k = ifcElementAssemblySourceGuid === null || ifcElementAssemblySourceGuid === void 0 ? void 0 : ifcElementAssemblySourceGuid.value) !== null && _k !== void 0 ? _k : sourceGuid === null || sourceGuid === void 0 ? void 0 : sourceGuid.value; const applicationGuid = ifcElementSourceGuid !== null && ifcElementSourceGuid !== void 0 ? ifcElementSourceGuid : ifcElementGuid; const ifcElementType = (_l = ifcElementAssemblyType === null || ifcElementAssemblyType === void 0 ? void 0 : ifcElementAssemblyType.value) !== null && _l !== void 0 ? _l : ifcType === null || ifcType === void 0 ? void 0 : ifcType.value; const ifcElementName = (_m = ifcElementAssemblyName === null || ifcElementAssemblyName === void 0 ? void 0 : ifcElementAssemblyName.value) !== null && _m !== void 0 ? _m : ifcName === null || ifcName === void 0 ? void 0 : ifcName.value; const targetObjectIds = this.getIfcElementPartIds(applicationGuid); targetObjectIds.push(mesh.uuid); mesh.userData = { id: mesh.uuid, name: mesh.name, expressId, meshId, ifcGuid: ifcGuid === null || ifcGuid === void 0 ? void 0 : ifcGuid.value, ifcGlobalId: ifcGuid === null || ifcGuid === void 0 ? void 0 : ifcGuid.value, globalId: ifcGuid === null || ifcGuid === void 0 ? void 0 : ifcGuid.value, sourceGuid: sourceGuid === null || sourceGuid === void 0 ? void 0 : sourceGuid.value, guid: applicationGuid, applicationId: applicationGuid, ifcType: ifcType === null || ifcType === void 0 ? void 0 : ifcType.value, ifcName: ifcName === null || ifcName === void 0 ? void 0 : ifcName.value, ifcElementGuid, ifcElementSourceGuid, ifcElementType, ifcElementName, ifcElementAssemblyGuid: ifcElementAssemblyGuid === null || ifcElementAssemblyGuid === void 0 ? void 0 : ifcElementAssemblyGuid.value, ifcElementAssemblyType: ifcElementAssemblyType === null || ifcElementAssemblyType === void 0 ? void 0 : ifcElementAssemblyType.value, ifcElementAssemblyName: ifcElementAssemblyName === null || ifcElementAssemblyName === void 0 ? void 0 : ifcElementAssemblyName.value, ifcElementAssemblySourceGuid: ifcElementAssemblySourceGuid === null || ifcElementAssemblySourceGuid === void 0 ? void 0 : ifcElementAssemblySourceGuid.value, tileUrl }; this.setTargetObjectIds(mesh, targetObjectIds); this.setTargetObjectIds(mesh.userData, targetObjectIds); const meshMetadata = mesh; meshMetadata.applicationId = applicationGuid; meshMetadata.ifcGuid = ifcGuid === null || ifcGuid === void 0 ? void 0 : ifcGuid.value; meshMetadata.ifcGlobalId = ifcGuid === null || ifcGuid === void 0 ? void 0 : ifcGuid.value; meshMetadata.sourceGuid = sourceGuid === null || sourceGuid === void 0 ? void 0 : sourceGuid.value; meshMetadata.guid = applicationGuid; meshMetadata.ifcType = ifcType === null || ifcType === void 0 ? void 0 : ifcType.value; meshMetadata.ifcName = ifcName === null || ifcName === void 0 ? void 0 : ifcName.value; meshMetadata.ifcElementGuid = ifcElementGuid; meshMetadata.ifcElementSourceGuid = ifcElementSourceGuid; meshMetadata.ifcElementType = ifcElementType; meshMetadata.ifcElementName = ifcElementName; meshMetadata.ifcElementAssemblyGuid = ifcElementAssemblyGuid === null || ifcElementAssemblyGuid === void 0 ? void 0 : ifcElementAssemblyGuid.value; meshMetadata.ifcElementAssemblyType = ifcElementAssemblyType === null || ifcElementAssemblyType === void 0 ? void 0 : ifcElementAssemblyType.value; meshMetadata.ifcElementAssemblyName = ifcElementAssemblyName === null || ifcElementAssemblyName === void 0 ? void 0 : ifcElementAssemblyName.value; meshMetadata.ifcElementAssemblySourceGuid = ifcElementAssemblySourceGuid === null || ifcElementAssemblySourceGuid === void 0 ? void 0 : ifcElementAssemblySourceGuid.value; meshMetadata.expressId = expressId; meshMetadata.meshId = meshId; mesh.matrix.copy(new Matrix4().fromArray(transform)); mesh.matrixAutoUpdate = false; group.add(mesh); } return group; } getIfcElementPartIds(ifcElementGuid) { if (!ifcElementGuid) return []; let partIds = this.ifcElementPartIds.get(ifcElementGuid); if (!partIds) { partIds = []; this.ifcElementPartIds.set(ifcElementGuid, partIds); } return partIds; } setTargetObjectIds(object, targetObjectIds) { Object.defineProperty(object, 'targetObjectIds', { value: targetObjectIds, enumerable: false, configurable: true }); } readTileString(buffer, view, offset) { const byteLength = view.getInt32(offset, true); if (byteLength <= 0) return { totalByteLength: 4 }; const value = textDecoder.decode(new Uint8Array(buffer, offset + 4, byteLength)); return { value, totalByteLength: 4 + byteLength + this.getFourBytePadding(byteLength) }; } getFourBytePadding(byteLength) { return (4 - byteLength % 4) % 4; } getPositiveIntegerSetting(storageKey, defaultValue) { let configuredValue; try { configuredValue = globalThis[storageKey]; configuredValue !== null && configuredValue !== void 0 ? configuredValue : configuredValue = localStorage.getItem(storageKey); } catch { // localStorage/global overrides may be unavailable in some runtimes. } const parsedValue = Number.parseInt(`${configuredValue !== null && configuredValue !== void 0 ? configuredValue : ''}`, 10); return Number.isFinite(parsedValue) && parsedValue > 0 ? parsedValue : defaultValue; } } class ObjLoader extends Loader { get resource() { return this._resource; } get finished() { return this.isFinished; } constructor(targetTree, resource, resourceData) { super(resource, resourceData); this.isFinished = false; this.tree = targetTree; this.baseLoader = new OBJLoader(); this.converter = new ObjConverter(this.tree); } load() { return new Promise((resolve, reject) => { new Promise((loadResolve, loadReject) => { if (!this._resourceData) { this.baseLoader.load(this._resource, group => { this.converter.traverse(this._resource, group, () => {}).then(() => { loadResolve(); }).catch(() => { loadReject(new Error()); }); }, event => { this.emit(LoaderEvent.LoadProgress, { progress: event.loaded / (event.total + 1), id: this._resource }); }, event => { Logger.error(`Loading obj ${this._resource} failed with ${event.error}`); loadReject(new Error()); }); } else { this.converter.traverse(this._resource, this.baseLoader.parse(this._resourceData), () => {}).then(() => loadResolve()).catch(err => { Logger.error(`Loading obj ${this._resource} failed with ${err}`); loadReject(new Error()); }); } }).then(async () => { const t0 = performance.now(); const renderTree = this.tree.getRenderTree(this._resource); if (renderTree) { const res = await renderTree.buildRenderTree(new ObjGeometryConverter()); Logger.log('Tree build time -> ', performance.now() - t0); this.isFinished = true; resolve(res); } else { Logger.error(`Could not get render tree for ${this._resource}`); reject(new Error()); } }).catch(() => { Logger.error(`Could not load ${this._resource}`); reject(new Error()); }); }); } cancel() { this.isFinished = false; } dispose() { super.dispose(); } } const speckleViewportVert = /* glsl */` #define USE_ENVMAP #include #ifdef USE_RTE // The high component is stored as the default 'position' attribute buffer attribute vec3 position_low; uniform vec3 uViewer_high; uniform vec3 uViewer_low; #endif #ifdef TRANSFORM_STORAGE attribute float objIndex; #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 #define TRANSFORM_STRIDE 4 #else #define TRANSFORM_STRIDE 4. #endif uniform sampler2D tTransforms; uniform float objCount; #elif TRANSFORM_STORAGE == 1 uniform mat4 uTransforms[OBJ_COUNT]; #endif #endif varying vec3 vNormal; varying vec3 vViewPosition; #include #include #include #include #include #include #include #include #include #ifdef USE_RTE highp vec4 computeRelativePosition(in highp vec3 position_low, in highp vec3 position_high, in highp vec3 relativeTo_low, in highp vec3 relativeTo_high){ /* Source https://github.com/virtualglobebook/OpenGlobe/blob/master/Source/Examples/Chapter05/Jitter/GPURelativeToEyeDSFUN90/Shaders/VS.glsl Note here, we're storing the high part of the position encoding inside three's default 'position' attribute buffer so we avoid redundancy */ highp vec3 t1 = position_low.xyz - relativeTo_low.xyz; highp vec3 e = t1 - position_low.xyz; /** This is redunant, but necessary as a workaround for Apple platforms */ highp float x = position_high.x - relativeTo_high.x; highp float y = position_high.y - relativeTo_high.y; highp float z = position_high.z - relativeTo_high.z; highp vec3 v = vec3(x, y, z); /** End of redundant part */ highp vec3 t2 = ((-relativeTo_low - e) + (position_low.xyz - (t1 - e))) + v; highp vec3 highDifference = t1 + t2; highp vec3 lowDifference = t2 - (highDifference.xyz - t1.xyz); highp vec3 position = highDifference.xyz + lowDifference.xyz; return vec4(position, 1.); } #endif #ifdef TRANSFORM_STORAGE void objectTransform(out vec4 quaternion, out vec4 pivotLow, out vec4 pivotHigh, out vec4 translation, out vec4 scale){ #if TRANSFORM_STORAGE == 0 #if __VERSION__ == 300 ivec2 uv = ivec2(int(objIndex) * TRANSFORM_STRIDE, 0); vec4 v0 = texelFetch( tTransforms, uv, 0 ); vec4 v1 = texelFetch( tTransforms, uv + ivec2(1, 0), 0); vec4 v2 = texelFetch( tTransforms, uv + ivec2(2, 0), 0); vec4 v3 = texelFetch( tTransforms, uv + ivec2(3, 0), 0); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #else float size = objCount * TRANSFORM_STRIDE; vec2 cUv = vec2(0.5/size, 0.5); vec2 dUv = vec2(1./size, 0.); vec2 uv = vec2((objIndex * TRANSFORM_STRIDE)/size + cUv.x, cUv.y); vec4 v0 = texture2D( tTransforms, uv); vec4 v1 = texture2D( tTransforms, uv + dUv); vec4 v2 = texture2D( tTransforms, uv + 2. * dUv); vec4 v3 = texture2D( tTransforms, uv + 3. * dUv); quaternion = v0; pivotLow = vec4(v1.xyz, 1.); pivotHigh = vec4(v2.xyz, 1.); translation = vec4(v3.xyz, 1.); scale = vec4(v1.w, v2.w, v3.w, 1.); #endif #elif TRANSFORM_STORAGE == 1 mat4 tMatrix = uTransforms[int(objIndex)]; quaternion = tMatrix[0]; pivotLow = vec4(tMatrix[1].xyz, 1.); pivotHigh = vec4(tMatrix[2].xyz, 1.); translation = vec4(tMatrix[3].xyz, 1.); scale = vec4(tMatrix[1][3], tMatrix[2][3], tMatrix[3][3], 1.); #endif } vec3 rotate_vertex_position(vec3 position, vec4 quat) { return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); } /** Another workaround for Apple's stupid compiler */ vec4 safeMul(vec4 a, vec4 b) { // Prevents constant folding and optimization return (a + vec4(0.0)) * (b + vec4(1.0)) - a * vec4(1.0); } highp vec3 rotate_scaled_vertex_position_delta(highp vec4 v0, highp vec4 v1, highp vec4 scale, highp vec4 quat) { /** !!! WORKAROUND FOR Intel IrisXe CARDS !!! */ /** The code below will not produce correct results in intel IrisXE integrated GPUs. * The geometry will turn mangled, albeit stable * I can't know for sure what is going on, but rotating the difference seems to * force the result into a lower precision? */ // highp vec4 position = v0 - v1; // return position.xyz + 2.0 * cross(quat.xyz, cross(quat.xyz, position.xyz) + quat.w * position.xyz); /** Subtracting the rotated vectors works. */ return rotate_vertex_position(safeMul(v0, scale).xyz, quat) - rotate_vertex_position(safeMul(v1, scale).xyz, quat) ; /** An alternate workaround is * highp vec3 position = (v0.xyz * (1. + 1e-7)) - (v1.xyz * (1. + 1e-7)); return position + 2.0 * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); However I'm not such a fan of the (1. + 1e-7) part */ } #endif #if defined(BILLBOARD) || defined(BILLBOARD_FIXED) uniform vec3 billboardPos; uniform mat4 invProjection; #endif #ifdef BILLBOARD_FIXED uniform vec2 billboardSize; #endif varying float dotValue; void main() { #include #include #include #include #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) #include #include #include #include // #include // COMMENTED CHUNK vec3 transformedNormal = objectNormal; #ifdef USE_INSTANCING // this is in lieu of a per-instance normal-matrix // shear transforms in the instance matrix are not supported mat3 m = mat3( instanceMatrix ); transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); transformedNormal = m * transformedNormal; /* If we have negative scaling, we flip the normal */ float signDet = sign(dot(m[0], cross(m[1], m[2]))); // Optional fallback: treat 0 as +1 signDet = signDet + (1.0 - abs(signDet)); transformedNormal *= signDet; #endif transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedNormal = - transformedNormal; #endif #ifdef USE_TANGENT vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif #endif #endif #include #include #include // #include COMMENTED CHUNK #ifdef TRANSFORM_STORAGE vec4 tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale; objectTransform(tQuaternion, tPivotLow, tPivotHigh, tTranslation, tScale); #endif #ifdef USE_RTE vec4 position_lowT = vec4(position_low, 1.); vec4 position_highT = vec4(position, 1.); const vec3 ZERO3 = vec3(0., 0., 0.); highp vec4 rteLocalPosition = computeRelativePosition(position_lowT.xyz, position_highT.xyz, uViewer_low, uViewer_high); #ifdef TRANSFORM_STORAGE highp vec4 rtePivot = computeRelativePosition(tPivotLow.xyz, tPivotHigh.xyz, uViewer_low, uViewer_high); rteLocalPosition.xyz = rotate_scaled_vertex_position_delta(rteLocalPosition, rtePivot, tScale, tQuaternion) + rtePivot.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING vec4 instancePivot = computeRelativePosition(ZERO3, ZERO3, uViewer_low, uViewer_high); rteLocalPosition.xyz = (mat3(instanceMatrix) * (rteLocalPosition - instancePivot).xyz) + instancePivot.xyz + instanceMatrix[3].xyz; #endif #endif #ifdef USE_RTE vec4 mvPosition = rteLocalPosition; #else vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef TRANSFORM_STORAGE mvPosition.xyz = rotate_scaled_vertex_position_delta(mvPosition, tPivotHigh, tScale, tQuaternion) + tPivotHigh.xyz + tTranslation.xyz; #endif #ifdef USE_INSTANCING mvPosition = instanceMatrix * mvPosition; #endif #endif mvPosition = modelViewMatrix * mvPosition; vNormal = normalize( transformedNormal ); vViewPosition = -mvPosition.xyz; #if defined(BILLBOARD) float div = 1.; gl_Position = projectionMatrix * (viewMatrix * vec4(billboardPos, 1.0) + vec4(position.x, position.y, 0., 0.0)); #elif defined(BILLBOARD_FIXED) gl_Position = projectionMatrix * (viewMatrix * vec4(billboardPos, 1.0)); float div = gl_Position.w; gl_Position /= gl_Position.w; gl_Position.xy += position.xy * billboardSize; #else gl_Position = projectionMatrix * mvPosition; #endif #include // #include COMMENTED CHUNK #if NUM_CLIPPING_PLANES > 0 #if defined(BILLBOARD) || defined(BILLBOARD_FIXED) vec4 movelViewProjection = gl_Position * div; vClipPosition = - (invProjection * movelViewProjection).xyz; #else vClipPosition = - mvPosition.xyz; #endif #endif #include #include #include } `; const speckleViewportFrag = /* glsl */` uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include uniform float minIntensity; varying vec3 vViewPosition; #ifdef MATCAP_TEXTURE uniform sampler2D tMatcap; #endif void main() { #include vec4 diffuseColor = vec4( diffuse, opacity ); #include #include #include #include #include #include ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); // accumulation (baked indirect lighting only) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vUv2 ); reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; #else reflectedLight.indirectDiffuse += vec3( 1.0 ); #endif // modulation #include reflectedLight.indirectDiffuse *= diffuseColor.rgb; vec3 outgoingLight = reflectedLight.indirectDiffuse; #include // #include COMMENTED CHUNK #ifdef OPAQUE diffuseColor.a = 1.0; #endif // https://github.com/mrdoob/three.js/pull/22425 #ifdef USE_TRANSMISSION diffuseColor.a *= transmissionAlpha + 0.1; #endif vec3 normal = normalize( vNormal ); vec3 viewDir = normalize( vViewPosition ); vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); vec3 y = cross( viewDir, x ); vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; vec3 color = vec3(1.0); #ifdef MATCAP_TEXTURE color = texture2D(tMatcap, uv).rgb; #else color = vec3( mix( minIntensity, 1., uv.y ) ); #endif gl_FragColor = vec4( color.rgb, diffuseColor.a); #include #include #include #include #include } `; class SpeckleViewportMaterial extends SpeckleBasicMaterial { get vertexProgram() { return speckleViewportVert; } get fragmentProgram() { return speckleViewportFrag; } get uniformsDef() { return { ...super.uniformsDef, minIntensity: 0.01, tMatcap: null }; } constructor(parameters, defines = []) { super(parameters, defines); } set minIntensity(value) { this.userData.minIntensity.value = value; this.needsUpdate = true; } set matcapTexture(value) { if (!this.defines) return; if (value) { this.defines['MATCAP_TEXTURE'] = ''; this.userData.tMatcap.value = value; } else { delete this.defines['MATCAP_TEXTURE']; this.userData.tMatcap.value = null; } this.needsUpdate = true; } fastCopy(from, to) { super.fastCopy(from, to); to.userData.tMatcap.value = from.userData.tMatcap.value; } } const DefaultViewportPassOptions = { minIntensity: 0.1, matcapTexture: null, opacity: 1 }; class ViewportPass extends GeometryPass { get displayName() { return 'GEOMETRY-VIEWPORT'; } // get overrideMaterial(): Material { // return this.viewportMaterial // } get overrideBatchMaterial() { return this.viewportMaterial; } set options(value) { super.options = value; this.viewportMaterial.blending = this._options.opacity < 1 ? NormalBlending : NoBlending; this.viewportMaterial.side = this._options.opacity < 1 ? FrontSide : DoubleSide; this.viewportMaterial.transparent = this._options.opacity < 1 ? true : false; this.viewportMaterial.toneMapped = false; this.viewportMaterial.minIntensity = this._options.minIntensity; this.viewportMaterial.opacity = this._options.opacity; this.setMatcapTexture(this._options.matcapTexture); } constructor() { super(); this._options = Object.assign({}, DefaultViewportPassOptions); this.viewportMaterial = new SpeckleViewportMaterial({}); this.options = DefaultViewportPassOptions; } setMatcapTexture(asset) { if (!asset) return; this.pendingTexture = true; Assets.getTexture(asset).then(value => { this.viewportMaterial.matcapTexture = value; this.viewportMaterial.needsCopy = true; this.pendingTexture = false; }).catch(reason => { Logger.error(`Matcap texture failed to load ${reason}`); this.pendingTexture = false; }); } render(renderer, camera, scene) { return super.render(renderer, camera, scene) || this.pendingTexture; } } class ArcticViewPipeline extends ProgressivePipeline { constructor(speckleRenderer, options = DefaultPipelineOptions) { var _a, _b; super(speckleRenderer); this.accumulationFrameCount = 16; const edgesPipeline = options.edges ? new EdgesPipeline(speckleRenderer) : null; const depthPass = !options.edges ? new DepthPass() : null; if (depthPass) { depthPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); depthPass.setVisibility(ObjectVisibility.DEPTH); depthPass.setJitter(true); depthPass.setClearColor(0x000000, 1); depthPass.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH); } const depthTex = options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.depthPass.depthTexture : (_a = depthPass === null || depthPass === void 0 ? void 0 : depthPass.outputTarget) === null || _a === void 0 ? void 0 : _a.texture; const depthSubPipelineDynamic = (options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.dynamicPasses : []) || []; const depthSubPipelineProgressive = (options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.progressivePasses : depthPass ? [depthPass] : []) || []; const viewportPass = new ViewportPass(); viewportPass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.PROPS]); viewportPass.setVisibility(ObjectVisibility.OPAQUE); viewportPass.options = { minIntensity: 0.75 }; const viewportTransparentPass = new ViewportPass(); viewportTransparentPass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.STREAM_CONTENT_TEXT, ObjectLayers.SHADOWCATCHER]); viewportTransparentPass.setVisibility(ObjectVisibility.TRANSPARENT); viewportTransparentPass.options = { minIntensity: 0.25, opacity: 0.5 }; const progressiveAOPass = new ProgressiveAOPass(); progressiveAOPass.setTexture('tDepth', depthTex); progressiveAOPass.accumulationFrames = this.accumulationFrameCount; progressiveAOPass.options = { kernelRadius: 100, kernelSize: 64 }; progressiveAOPass.setClearColor(0xffffff, 1); const blendPass = new BlendPass(); blendPass.options = { blendAO: true, blendEdges: options.edges }; blendPass.setTexture('tAo', (_b = progressiveAOPass.outputTarget) === null || _b === void 0 ? void 0 : _b.texture); blendPass.setTexture('tEdges', options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.outputTexture : undefined); blendPass.accumulationFrames = this.accumulationFrameCount; const blendPassDynamic = new BlendPass(); blendPassDynamic.options = { blendAO: false, blendEdges: options.edges }; blendPassDynamic.setTexture('tEdges', options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.outputTextureDynamic : undefined); blendPassDynamic.accumulationFrames = this.accumulationFrameCount; const stencilPass = new StencilPass(); stencilPass.setVisibility(ObjectVisibility.STENCIL); stencilPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); const stencilMaskPass = new StencilMaskPass(); stencilMaskPass.setVisibility(ObjectVisibility.STENCIL); stencilMaskPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); stencilMaskPass.setClearFlags(ClearFlags.DEPTH); const overlayPass = new GeometryPass(); overlayPass.setLayers([ObjectLayers.OVERLAY, ObjectLayers.MEASUREMENTS]); this.dynamicStage.push(...depthSubPipelineDynamic, stencilPass, viewportPass, viewportTransparentPass, ...(options.edges ? [blendPassDynamic] : []), stencilMaskPass, overlayPass); this.progressiveStage.push(...depthSubPipelineProgressive, stencilPass, viewportPass, viewportTransparentPass, stencilMaskPass, progressiveAOPass, blendPass, overlayPass); this.passthroughStage.push(stencilPass, viewportPass, viewportTransparentPass, stencilMaskPass, blendPass, overlayPass); this.passList = this.dynamicStage; } } class ShadedPass extends BaseGPass { constructor(tree, renderer) { super(); this.materialMap = {}; this.tree = tree; this.speckleRenderer = renderer; this.buildMaterials(); this.applyColorIndices(); } get displayName() { return 'SHADED'; } setClippingPlanes(planes) { for (const k in this.materialMap) { this.materialMap[k][2].clippingPlanes = planes; } } buildMaterials() { const batches = this.speckleRenderer.batcher.getBatches(undefined, GeometryType.MESH); for (let k = 0; k < batches.length; k++) { const batch = batches[k]; const colorMap = new Map(); colorMap.set(0x888888, []); for (let i = 0; i < batch.renderViews.length; i++) { const rv = batch.renderViews[i]; const colorMaterial = rv.renderData.colorMaterial; if (!colorMaterial) { const defaultColorEntry = colorMap.get(0x888888); if (defaultColorEntry) defaultColorEntry.push(rv); /** This is so dumb */ continue; } if (!colorMap.has(colorMaterial.color)) colorMap.set(colorMaterial.color, []); const entry = colorMap.get(colorMaterial.color); if (entry) entry.push(rv); } const rampTexture = Assets.generateDiscreetRampTexture(Array.from(colorMap.keys())); const material = new SpeckleStandardColoredMaterial({ side: DoubleSide, transparent: false, wireframe: false }); material.clipShadows = true; material.setGradientTexture(rampTexture); this.materialMap[batch.id] = [batch, colorMap, material]; } } applyColorIndices() { for (const item in this.materialMap) { const batch = this.materialMap[item][0]; const colorMap = this.materialMap[item][1]; const updateRanges = []; let rampIndex = 0; for (const entry of colorMap.entries()) { const color = entry[0]; updateRanges.push(...entry[1].map(value => { return { offset: value.batchStart, count: value.batchCount, materialOptions: { rampIndex: rampIndex / colorMap.size, rampIndexColor: new Color(color), rampWidth: entry[1].length * 4 } }; })); rampIndex++; } batch.setBatchBuffers(updateRanges); } } overrideMaterials() { for (const k in this.materialMap) { const tuple = this.materialMap[k]; tuple[0].renderObject.setOverrideBatchMaterial(tuple[2]); } } restoreMaterials() { for (const k in this.materialMap) { const tuple = this.materialMap[k]; tuple[0].renderObject.restoreBatchMaterial(); } } render(renderer, camera, scene) { if (!camera || !scene) return false; this.overrideMaterials(); if (this.onBeforeRender) this.onBeforeRender(); this.applyLayers(camera); renderer.setRenderTarget(this.outputTarget); this.clear(renderer); renderer.render(scene, camera); if (this.onAfterRender) this.onAfterRender(); this.restoreMaterials(); return false; } } class ShadedViewPipeline extends ProgressivePipeline { constructor(speckleRenderer, options = DefaultPipelineOptions, tree) { super(speckleRenderer); const edgesPipeline = options.edges ? new EdgesPipeline(speckleRenderer) : null; /** We'll just render all objects outlines, not just opaque */ /** Alex 01.08.2025: I don't think this is needed anymore. */ // edgesPipeline?.depthPass.setVisibility(null) // edgesPipeline?.depthPassDynamic.setVisibility(null) const depthSubPipelineDynamic = (options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.dynamicPasses : []) || []; const depthSubPipelineProgressive = (options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.progressivePasses : []) || []; const basitPass = new ShadedPass(tree, speckleRenderer); basitPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.PROPS]); basitPass.setClearColor(0x000000, 0); basitPass.setClearFlags(ClearFlags.COLOR); basitPass.outputTarget = null; const nonMeshPass = new GeometryPass(); nonMeshPass.setLayers([ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.STREAM_CONTENT_TEXT]); const blendPass = new BlendPass(); blendPass.options = { blendAO: false, blendEdges: options.edges }; blendPass.setTexture('tEdges', options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.outputTexture : undefined); blendPass.accumulationFrames = this.accumulationFrameCount; const blendPassDynamic = new BlendPass(); blendPassDynamic.options = { blendAO: false, blendEdges: options.edges }; blendPassDynamic.setTexture('tEdges', options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.outputTextureDynamic : undefined); blendPassDynamic.accumulationFrames = this.accumulationFrameCount; const stencilPass = new StencilPass(); stencilPass.setVisibility(ObjectVisibility.STENCIL); stencilPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); const stencilMaskPass = new StencilMaskPass(); stencilMaskPass.setVisibility(ObjectVisibility.STENCIL); stencilMaskPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); stencilMaskPass.setClearFlags(ClearFlags.DEPTH); const overlayPass = new GeometryPass(); overlayPass.setLayers([ObjectLayers.OVERLAY, ObjectLayers.MEASUREMENTS]); this.dynamicStage.push(...depthSubPipelineDynamic, stencilPass, basitPass, nonMeshPass, ...(options.edges ? [blendPassDynamic] : []), stencilMaskPass, overlayPass); this.progressiveStage.push(...depthSubPipelineProgressive, stencilPass, basitPass, nonMeshPass, stencilMaskPass, blendPass, overlayPass); this.passthroughStage.push(stencilPass, basitPass, nonMeshPass, stencilMaskPass, blendPass, overlayPass); this.passList = this.dynamicStage; } } const speckleCopyOutputVert = ` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); }`; const speckleCopyOutputFrag = ` uniform float opacity; uniform sampler2D tDiffuse; varying vec2 vUv; const float UnpackDownscale = 255. / 256.; const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. ); const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. ); float unpackRGBAToDepth( const in vec4 v ) { return dot( v, UnpackFactors ); } vec3 unpackRGBToNormal( const in vec3 rgb ) { return 2.0 * rgb.xyz - 1.0; } void main() { vec4 inSample = texture2D( tDiffuse, vUv ); vec3 outSample = inSample.rgb; #if INPUT_TYPE == 0 /** Un-premultiply alpha */ inSample.rgb /= inSample.a; outSample = LinearTosRGB( inSample ).rgb; #elif INPUT_TYPE == 1 outSample.rgb = vec3(unpackRGBAToDepth(inSample)); #elif INPUT_TYPE == 2 outSample.rgb = unpackRGBToNormal(inSample.rgb); #endif gl_FragColor.rgb = outSample; gl_FragColor.a = inSample.a; }`; var InputType; (function (InputType) { InputType[InputType["Color"] = 0] = "Color"; InputType[InputType["PackedDepth"] = 1] = "PackedDepth"; InputType[InputType["Normals"] = 2] = "Normals"; InputType[InputType["Passthrough"] = 3] = "Passthrough"; })(InputType || (InputType = {})); const DefaultOutputPassOptions = { inputType: InputType.Passthrough }; class OutputPass extends BaseGPass { set options(value) { super.options = value; this.setInputType(this._options.inputType); } constructor() { super(); this._options = Object.assign({}, DefaultOutputPassOptions); this.materialCopy = new ShaderMaterial({ defines: { INPUT_TYPE: this._options.inputType }, uniforms: UniformsUtils.clone(CopyShader.uniforms), vertexShader: speckleCopyOutputVert, fragmentShader: speckleCopyOutputFrag, transparent: false }); this.materialCopy.depthWrite = false; this.materialCopy.needsUpdate = true; this.fsQuad = new FullScreenQuad(this.materialCopy); } setInputType(type) { this.materialCopy.defines['INPUT_TYPE'] = type; this.materialCopy.needsUpdate = true; } setTexture(uName, texture) { this.materialCopy.uniforms[uName].value = texture; this.materialCopy.needsUpdate = true; } get displayName() { return 'OUTPUT'; } render(renderer) { renderer.setRenderTarget(this._outputTarget); this.fsQuad.render(renderer); return false; } } class PenViewPipeline extends ProgressivePipeline { constructor(speckleRenderer, options = DefaultPipelineOptions) { super(speckleRenderer); const edgesPipeline = new EdgesPipeline(speckleRenderer); edgesPipeline.edgePassDynamic.outputTarget = null; edgesPipeline.depthPass.setVisibility(ObjectVisibility.DEPTH); edgesPipeline.depthPassDynamic.setVisibility(ObjectVisibility.DEPTH); edgesPipeline.edgePass.options = { backgroundColor: 0x000000, ...options }; edgesPipeline.edgePassDynamic.options = { backgroundColor: 0x000000, ...options }; const stencilPass = new StencilPass(); stencilPass.setVisibility(ObjectVisibility.STENCIL); stencilPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); /** We can anonymously extend a pass and inline it */ const geometryPass = new class extends GeometryPass { get displayName() { return 'GEOMETRY-HIDDEN'; } get overrideBatchMaterial() { return this.hiddenMaterial; } constructor() { super(); this.hiddenMaterial = new SpeckleStandardMaterial({ side: DoubleSide, transparent: false, opacity: 1, wireframe: false }); this.hiddenMaterial.colorWrite = false; } render(renderer, camera, scene) { renderer.setOpaqueSort(this.sortOpaque); const ret = super.render(renderer, camera, scene); //@ts-expect-error shut up renderer.setOpaqueSort(null); return ret; } sortOpaque(a, b) { /** We prioritize on materials that only write depth, so that other visible materials get properly occluded */ return +a.material.colorWrite - +b.material.colorWrite; } }(); geometryPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.PROPS]); const stencilMaskPass = new StencilMaskPass(); stencilMaskPass.setVisibility(ObjectVisibility.STENCIL); stencilMaskPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); stencilMaskPass.setClearFlags(ClearFlags.DEPTH); const overlayPass = new GeometryPass(); overlayPass.setLayers([ObjectLayers.OVERLAY, ObjectLayers.MEASUREMENTS]); const outputPass = new OutputPass(); outputPass.setTexture('tDiffuse', edgesPipeline.outputTexture); this.dynamicStage.push(...edgesPipeline.dynamicPasses, stencilPass, geometryPass, stencilMaskPass, overlayPass); this.progressiveStage.push(...edgesPipeline.progressivePasses, outputPass, stencilPass, geometryPass, stencilMaskPass, overlayPass); this.passthroughStage.push(outputPass, stencilPass, geometryPass, stencilMaskPass, overlayPass); this.passList = this.dynamicStage; } } var img = "data:image/png;base64,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"; class SolidViewPipeline extends ProgressivePipeline { constructor(speckleRenderer, options = DefaultPipelineOptions) { super(speckleRenderer); const viewportPass = new ViewportPass(); viewportPass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.PROPS]); viewportPass.setVisibility(ObjectVisibility.OPAQUE); viewportPass.options = { matcapTexture: { id: 'defaultMatcap', src: img, type: AssetType.TEXTURE_8BPP } }; const viewportTransparentPass = new ViewportPass(); viewportTransparentPass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.STREAM_CONTENT_TEXT]); viewportTransparentPass.setVisibility(ObjectVisibility.TRANSPARENT); viewportTransparentPass.options = { opacity: 0.5, matcapTexture: { id: 'defaultMatcap', src: img, type: AssetType.TEXTURE_8BPP } }; const shadowcatcherPass = new GeometryPass(); shadowcatcherPass.setLayers([ObjectLayers.SHADOWCATCHER]); const postBlendGeometryPass = new GeometryPass(); postBlendGeometryPass.setLayers([ObjectLayers.PROPS]); const stencilPass = new StencilPass(); stencilPass.setVisibility(ObjectVisibility.STENCIL); stencilPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); const stencilMaskPass = new StencilMaskPass(); stencilMaskPass.setVisibility(ObjectVisibility.STENCIL); stencilMaskPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); stencilMaskPass.setClearFlags(ClearFlags.DEPTH); const overlayPass = new GeometryPass(); overlayPass.setLayers([ObjectLayers.OVERLAY, ObjectLayers.MEASUREMENTS]); const edgesPipeline = options.edges ? new EdgesPipeline(speckleRenderer) : null; let blendPass = null; let blendPassDynamic = null; if (edgesPipeline) { blendPass = new BlendPass(); blendPass.options = { blendAO: false, blendEdges: true }; blendPass.setTexture('tEdges', edgesPipeline.outputTexture); blendPass.accumulationFrames = this.accumulationFrameCount; blendPassDynamic = new BlendPass(); blendPassDynamic.options = { blendAO: false, blendEdges: true }; blendPassDynamic.setTexture('tEdges', edgesPipeline.outputTextureDynamic); blendPassDynamic.accumulationFrames = this.accumulationFrameCount; } const depthSubPipelineDynamic = (options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.dynamicPasses : []) || []; const depthSubPipelineProgressive = (options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.progressivePasses : []) || []; const blendSubpipelineDynamic = options.edges ? blendPassDynamic ? [blendPassDynamic] : [] : []; const blendSubpipelineProgressive = options.edges ? blendPass ? [blendPass] : [] : []; this.dynamicStage.push(...depthSubPipelineDynamic, stencilPass, shadowcatcherPass, viewportPass, viewportTransparentPass, ...blendSubpipelineDynamic, postBlendGeometryPass, stencilMaskPass, overlayPass); this.progressiveStage.push(...depthSubPipelineProgressive, stencilPass, shadowcatcherPass, viewportPass, viewportTransparentPass, ...blendSubpipelineProgressive, postBlendGeometryPass, stencilMaskPass, overlayPass); this.passthroughStage.push(stencilPass, shadowcatcherPass, viewportPass, viewportTransparentPass, ...blendSubpipelineProgressive, stencilMaskPass, postBlendGeometryPass, overlayPass); this.passList = this.dynamicStage; } } var ViewMode; (function (ViewMode) { ViewMode[ViewMode["DEFAULT"] = 0] = "DEFAULT"; ViewMode[ViewMode["SOLID"] = 1] = "SOLID"; ViewMode[ViewMode["PEN"] = 2] = "PEN"; ViewMode[ViewMode["ARCTIC"] = 3] = "ARCTIC"; ViewMode[ViewMode["SHADED"] = 4] = "SHADED"; })(ViewMode || (ViewMode = {})); var ViewModeEvent; (function (ViewModeEvent) { ViewModeEvent["Changed"] = "view-mode-changed"; })(ViewModeEvent || (ViewModeEvent = {})); class ViewModes extends Extension { get inject() { return [FilteringExtension]; } get viewModeOptions() { return this.viewModeOptions; } get viewMode() { return this._viewMode; } constructor(viewer, filteringExtension) { super(viewer); this.filteringExtension = filteringExtension; this._viewModeOptions = Object.assign({}, DefaultPipelineOptions, DefaultEdgesPipelineOptions); /** Not a super fan of this, but it avoids us caching another set of per vertex color indices */ if (filteringExtension) filteringExtension.on(ViewerEvent.FilteringStateSet, arg => { /** If no texture colored filters are present */ if ((!arg.colorGroups || !arg.colorGroups.length) && (!arg.userColorGroups || !arg.userColorGroups.length)) { /** If any shaded pass exists, set it's required color indices */ this.viewer.getRenderer().pipeline.getPass('SHADED').forEach(pass => { pass.applyColorIndices(); }); } }); this.viewer.on(ViewerEvent.LoadComplete, () => { this.updateViewModeOptions(this._viewModeOptions); }); } on(eventType, listener) { super.on(eventType, listener); } setViewMode(viewMode, options) { /** Edges on/off require pipeline rebuild */ if (viewMode !== this._viewMode || options && options.edges !== this._viewModeOptions.edges) { this._viewMode = viewMode; this.updateViewModes(viewMode, options); } else { this.updateViewModeOptions(options); } Object.assign(this._viewModeOptions, options); } updateViewModes(viewMode, options) { const renderer = this.viewer.getRenderer(); switch (viewMode) { case ViewMode.DEFAULT: renderer.pipeline = new DefaultPipeline(renderer, options); break; case ViewMode.PEN: renderer.pipeline = new PenViewPipeline(renderer, options); break; case ViewMode.SOLID: renderer.pipeline = new SolidViewPipeline(renderer, options); break; case ViewMode.ARCTIC: renderer.pipeline = new ArcticViewPipeline(renderer, options); break; case ViewMode.SHADED: renderer.pipeline = new ShadedViewPipeline(renderer, options, this.viewer.getWorldTree()); break; } this.updateViewModeOptions(options); this.viewer.requestRender(UpdateFlags.RENDER_RESET); this.emit(ViewModeEvent.Changed, viewMode); } updateViewModeOptions(options) { if (!options) return; const relativeDepthBias = this.viewer.World.getRelativeOffset(DefaultEdgesPassOptions.depthBias); const edgesPasses = this.viewer.getRenderer().pipeline.getPass('EDGES'); edgesPasses.forEach(pass => { pass.options = { ...options, depthBias: relativeDepthBias }; }); this.viewer.requestRender(UpdateFlags.RENDER_RESET); } } class HybridCameraController extends CameraController { constructor(viewer) { super(viewer); this.keyMap = { forward: false, back: false, left: false, right: false, up: false, down: false }; this.contextMenuTriggered = false; viewer.getRenderer().input.on(InputEvent.KeyUp, this.onKeyUp.bind(this)); viewer.getRenderer().input.on(InputEvent.KeyDown, this.onKeyDown.bind(this)); viewer.getRenderer().input.on(InputEvent.ContextMenu, this.onContextMenu.bind(this)); } onEarlyUpdate(_delta) { super.onEarlyUpdate(_delta); /** We do this because sometimes while holding a kewy down you get an extra * key down event **after** the context menu event, locking it in place */ if (this.contextMenuTriggered) { this.cancelMove(); this.contextMenuTriggered = false; } } onKeyDown(event) { switch (event.code) { case 'ArrowUp': case 'KeyW': this.keyMap.forward = true; break; case 'ArrowLeft': case 'KeyA': this.keyMap.left = true; break; case 'ArrowDown': case 'KeyS': this.keyMap.back = true; break; case 'ArrowRight': case 'KeyD': this.keyMap.right = true; break; case 'PageUp': case 'KeyE': this.keyMap.up = true; break; case 'PageDown': case 'KeyQ': this.keyMap.down = true; break; } if (!this._flyControls.enabled && this._renderingCamera instanceof PerspectiveCamera && Object.values(this.keyMap).some(v => v === true)) this.toggleControls(); } onKeyUp(event) { switch (event.code) { case 'ArrowUp': case 'KeyW': this.keyMap.forward = false; break; case 'ArrowLeft': case 'KeyA': this.keyMap.left = false; break; case 'ArrowDown': case 'KeyS': this.keyMap.back = false; break; case 'ArrowRight': case 'KeyD': this.keyMap.right = false; break; case 'PageUp': case 'KeyE': this.keyMap.up = false; break; case 'PageDown': case 'KeyQ': this.keyMap.down = false; break; } if (this._flyControls.enabled && Object.values(this.keyMap).every(v => v === false)) this.toggleControls(); } onContextMenu() { this.contextMenuTriggered = true; } cancelMove() { this.keyMap.back = false; this.keyMap.forward = false; this.keyMap.down = false; this.keyMap.up = false; this.keyMap.left = false; this.keyMap.right = false; if (this._flyControls.enabled && Object.values(this.keyMap).every(v => v === false)) this.toggleControls(); } } class LegacySelectionExtension extends SelectionExtension { /** FE2 'manually' selects objects pon it's own, so we're disabling the extension's event handler * Note: FE2 shouldn't do that, unless it plans on properly extending the SelectionExtension, but we're doing it like this * for now in order to reduce the impact on the FE's codebase with the introduction of the new viewer API */ onObjectClicked(selection) { } } class HighlightExtension extends SelectionExtension { constructor(viewer, cameraProvider) { super(viewer, cameraProvider); this.cameraProvider = cameraProvider; const highlightMaterialData = { selectionMaterialData: { id: MathUtils.generateUUID(), color: 0x04cbfb, emissive: 0x0, opacity: 1, roughness: 1, metalness: 0, vertexColors: false, lineWeight: 1, stencilOutlines: StencilOutlineType.OVERLAY, pointSize: 4 } }; this.options = highlightMaterialData; } unselectObjects(ids) { if (!this._enabled) return; if (!this.selectedNodes.length) return; const nodes = []; for (let k = 0; k < ids.length; k++) { const foundNodes = this.viewer.getWorldTree().findId(ids[k]); if (foundNodes) nodes.push(...foundNodes); } this.clearSelection(nodes.filter(node => { return this.selectedNodes.includes(node); })); } /** Disable default events */ onObjectClicked(selection) { } onObjectDoubleClick(selection) { } onPointerMove(e) { } } class LegacyViewer extends Viewer { constructor(container, params = DefaultViewerParams) { super(container, params); this.cameraController = this.createExtension(HybridCameraController); this.selection = this.createExtension(LegacySelectionExtension); this.sections = this.createExtension(SectionTool); this.createExtension(SectionOutlines); this.measurements = this.createExtension(MeasurementsExtension); this.filtering = this.createExtension(FilteringExtension); this.explodeExtension = this.createExtension(ExplodeExtension); this.diffExtension = this.createExtension(DiffExtension); this.highlightExtension = this.createExtension(HighlightExtension); this.createExtension(ViewModes); /** Workaround so that the frontend comments get section outlines when comment that has sections needs to show at startup */ this.on(ViewerEvent.LoadComplete, () => { const sections = this.getExtension(SectionTool); const sectionOutlines = this.getExtension(SectionOutlines); if ((sections === null || sections === void 0 ? void 0 : sections.enabled) && sectionOutlines) sectionOutlines.requestUpdate(true); }); } async init() { await super.init(); } getRenderer() { return this.speckleRenderer; } /** SECTION BOX */ setSectionBox(boxData, offset) { let box; if (!boxData) { box = this.speckleRenderer.sceneBox; } else { box = new OBB(); box.min = new Vector3().fromArray(boxData.min); box.max = new Vector3().fromArray(boxData.max); box.rotation = boxData.rotation && boxData.rotation.length ? new Matrix3().fromArray(boxData.rotation) : new Matrix3().identity(); } this.sections.setBox(box, offset); } getCurrentSectionBox() { const box = this.sections.getBox(); return { min: box.min.toArray(), max: box.max.toArray(), ...(box instanceof OBB && { rotation: box.rotation.toArray() }) }; } toggleSectionBox() { this.sections.toggle(); } sectionBoxOff() { this.sections.enabled = false; } sectionBoxOn() { this.sections.enabled = true; } /** FILTERING */ selectObjects(objectIds) { if (objectIds.length) this.highlightExtension.unselectObjects(objectIds); this.selection.selectObjects(objectIds); if (!this.filtering.filteringState.selectedObjects) this.filtering.filteringState.selectedObjects = []; this.filtering.filteringState.selectedObjects.push(...this.selection.getSelectedObjects().map(obj => obj.id)); return Promise.resolve(this.filtering.filteringState); } resetSelection() { this.highlightExtension.clearSelection(); this.selection.clearSelection(); if (this.filtering.filteringState.selectedObjects) this.filtering.filteringState.selectedObjects.length = 0; this.requestRender(UpdateFlags.RENDER | UpdateFlags.SHADOWS); return Promise.resolve(this.filtering.filteringState); } hideObjects(objectIds, stateKey = undefined, includeDescendants = false, ghost = false) { return new Promise(resolve => { const filteringState = this.preserveSelectionHighlightFilter(() => { return this.filtering.hideObjects(objectIds, stateKey, includeDescendants, ghost); }); resolve(filteringState); }); } showObjects(objectIds, stateKey = undefined, includeDescendants = false) { return new Promise(resolve => { const filteringState = this.preserveSelectionHighlightFilter(() => { return this.filtering.showObjects(objectIds, stateKey, includeDescendants); }); resolve(filteringState); }); } isolateObjects(objectIds, stateKey = undefined, includeDescendants = false, ghost = true) { return new Promise(resolve => { const filteringState = this.preserveSelectionHighlightFilter(() => { return this.filtering.isolateObjects(objectIds, stateKey, includeDescendants, ghost); }); resolve(filteringState); }); } unIsolateObjects(objectIds, stateKey = undefined, includeDescendants = false) { return new Promise(resolve => { const filteringState = this.preserveSelectionHighlightFilter(() => { return this.filtering.unIsolateObjects(objectIds, stateKey, includeDescendants); }); resolve(filteringState); }); } highlightObjects(objectIds) { if (!objectIds.length) this.highlightExtension.clearSelection();else this.highlightExtension.selectObjects(objectIds); return Promise.resolve(this.filtering.filteringState); } resetHighlight() { this.highlightExtension.clearSelection(); return Promise.resolve(this.filtering.filteringState); } setColorFilter(property, ghost = true) { return new Promise(resolve => { const filteringState = this.preserveSelectionHighlightFilter(() => { return this.filtering.setColorFilter(property, ghost); }); resolve(filteringState); }); } removeColorFilter() { return new Promise(resolve => { const filteringState = this.preserveSelectionHighlightFilter(() => { return this.filtering.removeColorFilter(); }); resolve(filteringState); }); } setUserObjectColors(groups) { return new Promise(resolve => { const filteringState = this.preserveSelectionHighlightFilter(() => { return this.filtering.setUserObjectColors(groups); }); resolve(filteringState); }); } resetFilters() { return new Promise(resolve => { const filteringState = this.preserveSelectionHighlightFilter(() => { return this.filtering.resetFilters(); }); resolve(filteringState); }); } preserveSelectionHighlightFilter(filterFn) { const selectedObjects = this.selection.getSelectedObjects().map(obj => obj.id); const highLightedObjects = this.highlightExtension.getSelectedObjects().map(obj => obj.id); if (selectedObjects.length) this.selection.clearSelection(); if (highLightedObjects.length) this.highlightExtension.unselectObjects(highLightedObjects); const filteringState = filterFn(); if (filteringState) { if (!filteringState.selectedObjects) filteringState.selectedObjects = selectedObjects; this.selection.selectObjects(filteringState.selectedObjects); } if (highLightedObjects.length) this.highlightExtension.selectObjects(highLightedObjects); return filteringState || this.filtering.filteringState; } /** TREE */ getDataTree() { Logger.error('DataTree is obsolete, please use WorldTree instead'); } getWorldTree() { return this.tree; } /** QUERIES */ query(query) { if (Queries.isPointQuery(query)) { Queries.DefaultPointQuerySolver.setContext(this.speckleRenderer); return Queries.DefaultPointQuerySolver.solve(query); } if (Queries.isIntersectionQuery(query)) { Queries.DefaultIntersectionQuerySolver.setContext(this.speckleRenderer); return Queries.DefaultIntersectionQuerySolver.solve(query); } return null; } queryAsync(query) { return null; } /** CAMERA */ zoom(objectIds, fit, transition) { this.cameraController.setCameraView(objectIds, transition, fit); } setOrthoCameraOn() { this.cameraController.setOrthoCameraOn(); this.speckleRenderer.resetPipeline(); } setPerspectiveCameraOn() { this.cameraController.setPerspectiveCameraOn(); this.speckleRenderer.resetPipeline(); } toggleCameraProjection() { this.cameraController.toggleCameras(); this.speckleRenderer.resetPipeline(); } setLightConfiguration(config) { this.speckleRenderer.setSunLightConfiguration(config); } getViews() { return this.tree.findAll(node => { var _a; return ((_a = node.model.renderView) === null || _a === void 0 ? void 0 : _a.speckleType) === SpeckleType.View3D; }).map(v => v.model.raw); } setView(view, transition = true) { this.cameraController.setCameraView(view, transition); } /** MISC */ screenshot() { return new Promise(resolve => { const screenshot = this.speckleRenderer.renderer.domElement.toDataURL('image/png'); resolve(screenshot); }); } explode(time) { this.explodeExtension.setExplode(time); } getObjects(id) { const nodes = this.tree.findId(id); const objects = []; if (nodes) { nodes.forEach(node => { if (node.model.renderView) objects.push(this.speckleRenderer.getObject(node.model.renderView)); }); } return objects; } /** * OBJECT LOADING/UNLOADING */ async loadObjectAsync(url, token = undefined, enableCaching = true, zoomToObject = true) { const loader = new SpeckleLoader(this.tree, url, token, enableCaching); return this.loadObject(loader, zoomToObject); } async diff(urlA, urlB, mode, authToken) { return this.diffExtension.diff(urlA, urlB, mode, authToken); } async undiff() { return this.diffExtension.undiff(); } setDiffTime(_diffResult, time) { this.diffExtension.updateVisualDiff(time); } setVisualDiffMode(_diffResult, mode) { this.diffExtension.updateVisualDiff(undefined, mode); } enableMeasurements(value) { this.measurements.enabled = value; this.selection.enabled = !value; } setMeasurementOptions(options) { this.measurements.options = options; } removeMeasurement() { this.measurements.removeMeasurement(); } dispose() { // TODO: currently it's easier to simply refresh the page :) } } class TAAPipeline extends ProgressivePipeline { constructor(speckleRenderer, options = DefaultPipelineOptions) { var _a, _b, _c, _d; super(speckleRenderer); const edgesPipeline = options.edges ? new EdgesPipeline(speckleRenderer) : null; const depthPass = !options.edges ? new DepthPass() : null; if (depthPass) { depthPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); depthPass.setVisibility(ObjectVisibility.DEPTH); depthPass.setJitter(true); depthPass.setClearColor(0x000000, 1); depthPass.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH); } const depthTex = options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.depthPass.depthTexture : (_a = depthPass === null || depthPass === void 0 ? void 0 : depthPass.outputTarget) === null || _a === void 0 ? void 0 : _a.texture; const opaqueColorPass = new GeometryPass(); opaqueColorPass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.PROPS]); opaqueColorPass.setVisibility(ObjectVisibility.OPAQUE); const transparentColorPass = new GeometryPass(); transparentColorPass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.STREAM_CONTENT_TEXT, ObjectLayers.SHADOWCATCHER]); transparentColorPass.setVisibility(ObjectVisibility.TRANSPARENT); const blendPassDynamic = new BlendPass(); blendPassDynamic.options = { blendAO: false, blendEdges: options.edges }; blendPassDynamic.setTexture('tEdges', options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.outputTextureDynamic : undefined); blendPassDynamic.accumulationFrames = this.accumulationFrameCount; const depthSubPipelineDynamic = (options.edges ? edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.dynamicPasses : []) || []; const progressiveAOPass = new ProgressiveAOPass(); progressiveAOPass.setTexture('tDepth', depthTex); progressiveAOPass.accumulationFrames = this.accumulationFrameCount; progressiveAOPass.setClearColor(0xffffff, 1); const blendPass = new BlendPass(); blendPass.options = { blendAO: true, blendEdges: false }; blendPass.setTexture('tAo', (_b = progressiveAOPass.outputTarget) === null || _b === void 0 ? void 0 : _b.texture); blendPass.accumulationFrames = this.accumulationFrameCount; const renderTarget = Pipeline.createRenderTarget({ minFilter: LinearFilter, magFilter: LinearFilter }); const jitterOpaquePass = new GeometryPass(); jitterOpaquePass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.STREAM_CONTENT_TEXT]); jitterOpaquePass.setVisibility(ObjectVisibility.OPAQUE); jitterOpaquePass.setJitter(true); jitterOpaquePass.outputTarget = renderTarget; const jitterTransparentPass = new GeometryPass(); jitterTransparentPass.setLayers([ObjectLayers.STREAM_CONTENT, ObjectLayers.STREAM_CONTENT_MESH, ObjectLayers.STREAM_CONTENT_LINE, ObjectLayers.STREAM_CONTENT_POINT, ObjectLayers.STREAM_CONTENT_POINT_CLOUD, ObjectLayers.STREAM_CONTENT_TEXT, ObjectLayers.SHADOWCATCHER]); jitterTransparentPass.setVisibility(ObjectVisibility.TRANSPARENT); jitterTransparentPass.setJitter(true); jitterTransparentPass.outputTarget = renderTarget; const blendEdgesPass = new BlendPass(); blendEdgesPass.options = { blendAO: false, blendEdges: options.edges }; blendEdgesPass.setTexture('tEdges', options.edges ? (_c = edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.edgePass.outputTarget) === null || _c === void 0 ? void 0 : _c.texture : undefined); blendEdgesPass.accumulationFrames = this.accumulationFrameCount; blendEdgesPass.outputTarget = renderTarget; const taaPass = new TAAPass(); taaPass.inputTexture = renderTarget.texture; taaPass.accumulationFrames = this.accumulationFrameCount; const outputPass = new OutputPass(); outputPass.setTexture('tDiffuse', (_d = taaPass.outputTarget) === null || _d === void 0 ? void 0 : _d.texture); outputPass.options = { inputType: InputType.Color }; const stencilPass = new StencilPass(); stencilPass.setVisibility(ObjectVisibility.STENCIL); stencilPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); stencilPass.setClearColor(0x000000, 0); stencilPass.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH | ClearFlags.STENCIL); const stencilMaskPass = new StencilMaskPass(); stencilMaskPass.setVisibility(ObjectVisibility.STENCIL); stencilMaskPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); stencilMaskPass.setClearFlags(ClearFlags.DEPTH); const jitteredStencilPass = new StencilPass(); jitteredStencilPass.setVisibility(ObjectVisibility.STENCIL); jitteredStencilPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); jitteredStencilPass.setClearColor(0x000000, 0); jitteredStencilPass.setClearFlags(ClearFlags.COLOR | ClearFlags.DEPTH | ClearFlags.STENCIL); jitteredStencilPass.outputTarget = renderTarget; const jitteredStencilMaskPass = new StencilMaskPass(); jitteredStencilMaskPass.setVisibility(ObjectVisibility.STENCIL); jitteredStencilMaskPass.setLayers([ObjectLayers.STREAM_CONTENT_MESH]); jitteredStencilMaskPass.setClearFlags(ClearFlags.DEPTH); jitteredStencilMaskPass.outputTarget = renderTarget; const overlayPass = new GeometryPass(); overlayPass.setLayers([ObjectLayers.OVERLAY, ObjectLayers.MEASUREMENTS]); const depthSubPipelineProgressive = options.edges ? [edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.depthPass, edgesPipeline === null || edgesPipeline === void 0 ? void 0 : edgesPipeline.edgePass] : depthPass ? [depthPass] : []; this.dynamicStage.push(...depthSubPipelineDynamic, stencilPass, opaqueColorPass, transparentColorPass, ...(options.edges ? [blendPassDynamic] : []), stencilMaskPass, overlayPass); this.progressiveStage.push( // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore ...depthSubPipelineProgressive, jitteredStencilPass, jitterOpaquePass, jitterTransparentPass, jitteredStencilMaskPass, ...(options.edges ? [blendEdgesPass] : []), taaPass, outputPass, progressiveAOPass, blendPass, overlayPass); this.passthroughStage.push(outputPass, blendPass, overlayPass); this.passList = this.dynamicStage; } render() { /** The TAA pipeline cannot be soft reset currently, so we hard reset it instead as a temporary mmeasure */ const isPassthrough = this.passList === this.passthroughStage; const ret = super.render(); if (isPassthrough) { this.reset(); return true; } return ret; } } class SpeckleOfflineLoader extends SpeckleLoader { constructor(targetTree, resourceData, resourceId) { super(targetTree, resourceId || '', undefined, undefined, resourceData); } initObjectLoader(_resource, _authToken, _enableCaching, resourceData) { /** TO DO: Implement either as part of ObjectLoader2 either separate */ return ObjectLoader2Factory.createFromObjects([]); } async load() { var _a; const rootObject = await this.loader.getRootObject(); if (!rootObject && this._resource) { Logger.error('No root id set!'); return false; } /** If not id is provided, we make one up based on the root object id */ this._resource = this._resource || `/json/${(_a = rootObject === null || rootObject === void 0 ? void 0 : rootObject.baseId) !== null && _a !== void 0 ? _a : 'unnamed'}`; return super.load(); } } class WebXrViewer extends Viewer { async init() { await super.init(); /** Enable auto clearing */ this.getRenderer().renderer.autoClear = true; this.getRenderer().renderer.autoClearColor = true; this.getRenderer().renderer.autoClearDepth = true; this.getRenderer().renderer.autoClearStencil = true; /** Enable WebXr */ this.getRenderer().renderer.xr.enabled = true; /** Set the animation loop to ours */ this.getRenderer().renderer.setAnimationLoop(this.xrWrappedRender.bind(this)); /** Whenever we load something, enable all layers so it always gets rendered */ this.on(ViewerEvent.LoadComplete, () => { for (const k in this.getRenderer().batcher.batches) this.getRenderer().batcher.batches[k].renderObject.layers.enableAll(); }); } /** Override the render function an don't call SpeckleRendere's render */ render() { Object.values(this.extensions).forEach(ext => { ext.onRender(); }); } /** Rendering is now done on three's WebXr loop * We also just render plainly, no pipelines, for simplicity */ xrWrappedRender() { const renderer = this.getRenderer().renderer; const camera = this.getRenderer().renderingCamera; const storeLayers = camera.layers.mask; camera.layers.enableAll(); renderer.render(this.getRenderer().scene, camera); camera.layers.set(storeLayers); } } async function getResourceUrls(url, authToken) { /** I'm up for a better way of doing this */ if (url.includes('streams')) return getOldResourceUrls(url, authToken); return getNewResourceUrls(url, authToken); } async function getOldResourceUrls(url, authToken) { var _a; const parsed = new URL(url); const streamId = url.split('/streams/')[1].substring(0, 10); const objsUrls = []; // supports commit based urls if (url.includes('commits')) { const commitId = url.split('/commits/')[1].substring(0, 10); const objUrl = await getCommitReferencedObjectUrl({ origin: parsed.origin, streamId, commitId }, authToken); objsUrls.push(objUrl); } // object based urls if (url.includes('objects')) objsUrls.push(url); // supports urls that include overlay queries // e.g., https://speckle.xyz/streams/a632e7a784/objects/457c45feffa6f954572e5e86fb6d4f25?overlay=cf8dc76247,f5adc1d991b3dceb4b5ad6b50f919a0e if (url.includes('overlay=')) { const searchParams = new URLSearchParams(parsed.search); const resIds = (_a = searchParams.get('overlay')) === null || _a === void 0 ? void 0 : _a.split(','); if (resIds !== undefined) { for (const resId of resIds) { if (resId.length === 10) { objsUrls.push(await getCommitReferencedObjectUrl({ origin: parsed.origin, streamId, commitId: resId }, authToken)); } else { objsUrls.push(`${parsed.origin}/streams/${streamId}/objects/${resId}`); } } } } return objsUrls; } async function getCommitReferencedObjectUrl(ref, authToken) { const headers = { 'Content-Type': 'application/json', Authorization: '' }; if (authToken) { headers['Authorization'] = `Bearer ${authToken}`; } const res = await fetch(`${ref.origin}/graphql`, { method: 'POST', headers, body: JSON.stringify({ query: ` query Stream($streamId: String!, $commitId: String!) { stream(id: $streamId) { commit(id: $commitId) { referencedObject } } } `, variables: { streamId: ref.streamId, commitId: ref.commitId } }) }); const { data } = await res.json(); return `${ref.origin}/streams/${ref.streamId}/objects/${data.stream.commit.referencedObject}`; } async function getNewResourceUrls(url, authToken) { const parsed = new URL(decodeURI(url)); const params = parsed.href.match(/[^/]+$/); if (!params) { return Promise.reject(new Error('No model or object ids specified')); } const projectId = parsed.href.split('/projects/')[1].substring(0, 10); const headers = { 'Content-Type': 'application/json', Authorization: '' }; if (authToken) { headers['Authorization'] = `Bearer ${authToken}`; } const ref = { origin: parsed.origin, projectId }; const resources = SpeckleViewer.ViewerRoute.parseUrlParameters(decodeURIComponent(params[0])); const promises = []; for (let k = 0; k < resources.length; k++) { const resource = resources[k]; if (SpeckleViewer.ViewerRoute.isObjectResource(resource)) { promises.push(objectResourceToUrl(ref, resource)); } else if (SpeckleViewer.ViewerRoute.isModelResource(resource)) { promises.push(modelResourceToUrl(headers, ref, resource)); } else if (SpeckleViewer.ViewerRoute.isAllModelsResource(resource)) { promises.push(modelAllResourceToUrl(headers, ref)); } } try { const results = await Promise.all(promises); return results.flatMap(val => Array.isArray(val) ? val : [val]); } catch (e) { Logger.error(e); return []; } } async function objectResourceToUrl(ref, resource) { return Promise.resolve(`${ref.origin}/streams/${ref.projectId}/objects/${resource.toString()}`); } async function modelResourceToUrl(headers, ref, resource) { return resource.versionId ? runModelVersionQuery(headers, ref, resource) : runModelLastVersionQuery(headers, ref, resource); } async function modelAllResourceToUrl(headers, ref) { return runAllModelsQuery(headers, ref); } async function runModelLastVersionQuery(headers, ref, resource) { const res = await fetch(`${ref.origin}/graphql`, { method: 'POST', headers, body: JSON.stringify({ query: ` query ViewerUrlHelperModelLastVersion($modelId: String!, $projectId: String!) { project(id: $projectId) { model(id: $modelId) { versions(limit: 1) { items { referencedObject } } } } } `, variables: { projectId: ref.projectId, modelId: resource.modelId } }) }); try { const data = await getResponse(res); return `${ref.origin}/streams/${ref.projectId}/objects/${data.project.model.versions.items[0].referencedObject}`; } catch (e) { return Promise.reject(new Error(`Could not get object URLs for project ${ref.projectId} and model ${resource.modelId}. Error: ${e instanceof Error ? e.message : e}`)); } } async function runModelVersionQuery(headers, ref, resource) { const res = await fetch(`${ref.origin}/graphql`, { method: 'POST', headers, body: JSON.stringify({ query: ` query ViewerUrlHelperModelVersion($modelId: String!, $projectId: String!, $versionId: String!) { project(id: $projectId) { model(id: $modelId) { version(id: $versionId) { referencedObject } } } } `, variables: { projectId: ref.projectId, modelId: resource.modelId, versionId: resource.versionId } }) }); try { const data = await getResponse(res); return `${ref.origin}/streams/${ref.projectId}/objects/${data.project.model.version.referencedObject}`; } catch (e) { return Promise.reject(new Error(`Could not get object URLs for project ${ref.projectId} and model ${resource.modelId}. Error: ${e instanceof Error ? e.message : e}`)); } } async function runAllModelsQuery(headers, ref) { const res = await fetch(`${ref.origin}/graphql`, { method: 'POST', headers, body: JSON.stringify({ query: ` query ViewerUrlHelperAllModel($projectId: String!) { project(id: $projectId) { models { items { versions(limit: 1) { items { referencedObject } } } } } } `, variables: { projectId: ref.projectId } }) }); try { const data = await getResponse(res); const urls = []; data.project.models.items.forEach(element => { if (element.versions.items.length) urls.push(`${ref.origin}/streams/${ref.projectId}/objects/${element.versions.items[0].referencedObject}`); }); return urls; } catch (e) { return Promise.reject(new Error(`Could not get object URLs for project ${ref.projectId}. Error: ${e instanceof Error ? e.message : e}`)); } } async function getResponse(res) { const { data } = await res.json(); if (!data) throw new Error(`Query failed`); if (!data.project) throw new Error('Project not found'); if (!data.project.model && !data.project.models) throw new Error('Model(s) not found'); return data; } var UrlHelper = /*#__PURE__*/Object.freeze({ __proto__: null, getResourceUrls: getResourceUrls }); export { AccelerationStructure, ArcticViewPipeline, AreaMeasurement, AssetType, Assets, BaseGPass, ShadedPass as BasitPass, BatchObject, BlendPass, CONTAINED, CameraController, CameraEvent, ChunkArray, ClearFlags, DefaultEdgesPassOptions, DefaultEdgesPipelineOptions, DefaultLightConfiguration, DefaultObjectPickConfiguration, DefaultPipeline, DefaultPipelineOptions, DefaultProgressiveAOPassOptions, DefaultViewerParams, DepthNormalPass, DepthPass, DiffExtension, EdgesPass, EdgesPipeline, ExplodeEvent, ExplodeExtension, Extension, FilterMaterialType, FilteringExtension, Geometry, GeometryConverter, GeometryPass, GeometryType, HybridCameraController, INTERSECTED, Input, InputEvent, InputType, InstancedBatchObject, InstancedMeshBatch, LargeModelStreamingLoader, LegacyViewer, LineBatch, Loader, LoaderEvent, Measurement, MeasurementEvent, MeasurementState, MeasurementsExtension, MeshBatch, NOT_INTERSECTED, NearPlaneCalculation, NodeRenderView, NormalsPass, ObjLoader, ObjectLayers, ObjectVisibility, OutputPass, PenViewPipeline, PerpendicularMeasurement, Pipeline, PointBatch, PointMeasurement, PointToPointMeasurement, ProgressiveAOPass, ProgressiveGPass, ProgressivePipeline, RenderTree, SectionOutlines, SectionTool, SectionToolEvent, SelectionExtension, SelectionExtensionEvent, ShadedViewPipeline, SolidViewPipeline, SpeckleBasicMaterial, SpeckleConverter, SpeckleGeometryConverter, SpeckleInstancedMesh, SpeckleLineMaterial, SpeckleLoader, SpeckleMesh, SpeckleOfflineLoader, SpecklePointMaterial, SpeckleRenderer, SpeckleStandardMaterial, SpeckleTextMaterial, SpeckleType, SpeckleWebGLRenderer, StencilMaskPass, StencilOutlineType, StencilPass, TAAPass, TAAPipeline, TextBatch, TextLabel, TopLevelAccelerationStructure, Units, UpdateFlags, UrlHelper, ViewMode, ViewModeEvent, ViewModes, Viewer, ViewerEvent, ViewportPass, VirtualArray, VisualDiffMode, WebXrViewer, World, WorldTree }; //# sourceMappingURL=data:application/json;base64,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O0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNB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QUNRLEdBQUcsQ0FBQ0MsQ0FBQyxFQUFFLElBQUksQ0FBQ0QsR0FBRyxDQUFDRSxDQUFDLEVBQUUsSUFBSSxDQUFDRixHQUFHLENBQUNHLENBQUMsQ0FBQyxFQUMvQyxJQUFJWCxPQUFPLENBQUMsSUFBSSxDQUFDUSxHQUFHLENBQUNDLENBQUMsRUFBRSxJQUFJLENBQUNELEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFLElBQUksQ0FBQ0gsR0FBRyxDQUFDSSxDQUFDLENBQUMsRUFDL0MsSUFBSVgsT0FBTyxDQUFDLElBQUksQ0FBQ1EsR0FBRyxDQUFDQyxDQUFDLEVBQUUsSUFBSSxDQUFDRixHQUFHLENBQUNHLENBQUMsRUFBRSxJQUFJLENBQUNGLEdBQUcsQ0FBQ0csQ0FBQyxDQUFDLEVBQy9DLElBQUlYLE9BQU8sQ0FBQyxJQUFJLENBQUNRLEdBQUcsQ0FBQ0MsQ0FBQyxFQUFFLElBQUksQ0FBQ0YsR0FBRyxDQUFDRyxDQUFDLEVBQUUsSUFBSSxDQUFDSCxHQUFHLENBQUNJLENBQUMsQ0FBQyxFQUMvQyxJQUFJWCxPQUFPLENBQUMsSUFBSSxDQUFDTyxHQUFHLENBQUNFLENBQUMsRUFBRSxJQUFJLENBQUNELEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFLElBQUksQ0FBQ0YsR0FBRyxDQUFDRyxDQUFDLENBQUMsRUFDL0MsSUFBSVgsT0FBTyxDQUFDLElBQUksQ0FBQ08sR0FBRyxDQUFDRSxDQUFDLEVBQUUsSUFBSSxDQUFDRCxHQUFHLENBQUNFLENBQUMsRUFBRSxJQUFJLENBQUNILEdBQUcsQ0FBQ0ksQ0FBQyxDQUFDLEVBQy9DLElBQUlYLE9BQU8sQ0FBQyxJQUFJLENBQUNPLEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFLElBQUksQ0FBQ0YsR0FBRyxDQUFDRyxDQUFDLEVBQUUsSUFBSSxDQUFDRixHQUFHLENBQUNHLENBQUMsQ0FBQyxFQUMvQyxJQUFJWCxPQUFPLENBQUMsSUFBSSxDQUFDTyxHQUFHLENBQUNFLENBQUMsRUFBRSxJQUFJLENBQUNGLEdBQUcsQ0FBQ0csQ0FBQyxFQUFFLElBQUksQ0FBQ0gsR0FBRyxD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UyxHQUFHLENBQUNwUyxDQUFDLEVBQUVvUyxHQUFHLENBQUNuUyxDQUFDLEVBQUVtUyxHQUFHLENBQUNsUyxDQUFDLENBQUM7QUFDaEQsVUFBTTZrRSxPQUFPLEdBQUcsSUFBSXhsRSxPQUFPLENBQUM4UyxJQUFJLENBQUNyUyxDQUFDLEVBQUVvUyxHQUFHLENBQUNuUyxDQUFDLEVBQUVtUyxHQUFHLENBQUNsUyxDQUFDLENBQUM7QUFDakQsVUFBTThrRSxPQUFPLEdBQUcsSUFBSXpsRSxPQUFPLENBQUM2UyxHQUFHLENBQUNwUyxDQUFDLEVBQUVxUyxJQUFJLENBQUNwUyxDQUFDLEVBQUVtUyxHQUFHLENBQUNsUyxDQUFDLENBQUM7QUFDakQsVUFBTStrRSxPQUFPLEdBQUcsSUFBSTFsRSxPQUFPLENBQUM2UyxHQUFHLENBQUNwUyxDQUFDLEVBQUVvUyxHQUFHLENBQUNuUyxDQUFDLEVBQUVvUyxJQUFJLENBQUNuUyxDQUFDLENBQUM7QUFFakQsVUFBTWdsRSxPQUFPLEdBQUcsSUFBSTNsRSxPQUFPLENBQUM4UyxJQUFJLENBQUNyUyxDQUFDLEVBQUVxUyxJQUFJLENBQUNwUyxDQUFDLEVBQUVtUyxHQUFHLENBQUNsUyxDQUFDLENBQUM7QUFDbEQsVUFBTWlsRSxPQUFPLEdBQUcsSUFBSTVsRSxPQUFPLENBQUM4UyxJQUFJLENBQUNyUyxDQUFDLEVBQUVvUyxHQUFHLENBQUNuUyxDQUFDLEVBQUVvUyxJQUFJLENBQUNuUyxDQUFDLENBQUM7QUFDbEQsVUFBTWtsRSxPQUFPLEdBQUcsSUFBSTdsRSxPQUFPLENBQUM2UyxHQUFHLENBQUNwUyxDQUFDLEVBQUVxUyxJQUFJLENBQUNwUyxDQUFDLEVBQUVvUyxJQUFJLENBQUNuUyxDQUFDLENBQUM7QUFDbEQsVUFBTW1sRSxPQUFPLEdBQUcsSUFBSTlsRSxPQUFPLENBQUM4UyxJQUFJLENBQUNyUyxDQUFDLEVBQUVxUyxJQUFJLENBQUNwUyxDQUFDLEVBQUVvUyxJQUFJLENBQUNuUyxDQUFDLENBQUM7QUFFbkQ7QUFDQTRrRSxXQUFPLENBQUN2akUsWUFB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QUFHLEVBQ1AsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUVSLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFDUixDQUFDLEdBQUcsR0FBRyxFQUNQLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFFUixDQUFDLENBQUMsR0FBRyxHQUFHLEVBQ1IsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUNSLENBQUMsR0FBRyxHQUFHLEVBRVAsQ0FBQyxHQUFHLEdBQUcsRUFDUCxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQ1IsQ0FBQyxHQUFHLEdBQUcsRUFFUCxDQUFDLEdBQUcsR0FBRyxFQUNQLENBQUMsR0FBRyxHQUFHLEVBQ1AsQ0FBQyxHQUFHLEdBQUcsRUFFUCxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQ1IsQ0FBQyxHQUFHLEdBQUcsRUFDUCxDQUFDLEdBQUcsR0FBRyxDQUNSLENBQUM7QUFFRixNQUFNMDFGLGVBQWUsR0FBZ0IsSUFBSWwxRixXQUFXLENBQUMsQ0FDbkQsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFDckYsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUNwQixDQUFDO0FBRUYsTUFBTW0xRixhQUFhLEdBQWE7QUFDOUI7QUFDQSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBRWpDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUUvQixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFFL0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRztBQUVqQztBQUNBLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUUvQixHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUU3QixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUU3QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7QUFFL0I7QUFDQSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBRWpDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUUvQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUU3QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FDaEM7QUFFRCxNQUFNQyxZQUFZLEdBQWEsSUFBSTlxRyxLQUFLLENBQUM2cUcsYUFBYSxDQUFDenNHLE1BQU0s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QUFJNitELEtBQUssQ0FBQyxJQUFJNytELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQ3JDLElBQUk2K0QsS0FBSyxDQUFDLElBQUk3K0QsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQ3BDLElBQUk2K0QsS0FBSyxDQUFDLElBQUk3K0QsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FDdEM7QUFFRDtBQUNVLFFBQVMsQ0FBQXlyRyxTQUFBO0FBQ2pCO0FBQ0E7QUFDQSxXQUFLLEVBQUU7UUFBRXRyQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7T0FBRztBQUN2RSxXQUFLLEVBQUU7UUFBRW1nRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRTZpQyxZQUFJLEVBQUUsR0FBRztRQUFFMTRELE1BQU0sRUFBRSxJQUFJdHFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFBRztLQUN4RTtBQXNCUyxTQUFBMHJHLGdCQUFnQixHQUFZLElBQUkzd0csT0FBTyxFQUFFO0lBS3pDLElBQVEsQ0FBQWtvRyxRQUFBLEdBQUcsS0FBSztJQUNoQixJQUFlLENBQUEwSSxlQUFBLEdBQUcsS0FBSztJQUd2QixJQUFpQixDQUFBQyxpQkFBQSxHQUFVLEVBQUU7SUFDN0IsSUFBbUIsQ0FBQUMsbUJBQUEsR0FBRyxDQUFDO0lBQ3ZCLElBQWMsQ0FBQUMsY0FBQSxHQUFHLEdBQUc7SUF3RDVCLElBQUksQ0FBQzdsRCxNQUFNLEdBQUdBLE1BQU07SUFFcEIsSUFBSSxDQUFDZzlDLFFBQVEsR0FBRyxLQUFLO0FBQ3JCLFFBQUksQ0FBQzRILE9BQU8sR0FBRyxJQUFJOS9ELEtBQUssRUFBRTtBQUMxQixRQUFJLENBQUM4L0QsT0FBTyxDQUFDLzBHLElBQUksR0FBRyxZQUFZO0lBQ2hDLElBQUksQ0FBQyswRyxPQUFPLENBQUN4NEUsTUFBTSxDQUFDMXdCLEdBQUcsQ0FBQ3pKLFlBQVksQ0FBQ21xRCxLQUFLLENBQUM7QUFDM0MsUUFBSSxDQUFDNEQsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDaGhELEtBQUssQ0FBQzdSLEdBQUcsQ0FBQyxJQUFJLENBQUN3K0UsT0FBTyxDQUFDO0FBRWpEO0FBQ0EsVUFBTWtCLFdBQVcsR0FBRyxJQUFJLENBQUNDLGtCQUFrQixFQUFFO0lBQzdDLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUlodUYsSUFBSSxDQUN4Qjh0RixXQUFXLEVBQ1gsSUFBSTlpRyxpQkFBaUIsQ0FBQztBQUNwQlosVUFBSSxFQUFFa1IsVUFBVTtBQUNoQjdRLGFBQU8sRUFBRSxLQUFLO0FBQ2RyUCxnQkFBVSxFQUFFO0FBQ2IsTUFBQyxDQUNIO0lBQ0QsSUFBSSxDQUFDNHlHLFVBQVUsQ0FBQzU1RSxNQUFNLENBQUMxd0IsR0FBRyxDQUFDekosWUFBWSxDQUFDbXFELEtBQUssQ0FBQztJQUM5QyxJQUFJLENBQUN3b0QsT0FBTyxDQUFDeCtFLEdBQUcsQ0FBQyxJQUFJLENBQUM0L0UsVUFBVSxDQUFDO0FBRWpDO0FBQ0EsUUFBSSxDQUFDQyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxhQUFhLEVBQUU7SUFDdEMsSUFBSSxDQUFDdEIsT0FBTyxDQUFDeCtFLEdBQUcsQ0FBQyxJQUFJLENBQUM2L0UsVUFBVSxDQUFDO0FBRWpDO0FBQ0EsUUFBSSxDQUFDZixTQUFTLEdBQUcsSUFBSSxDQUFDaUIsZUFBZSxFQUFFO0lBQ3ZDLElBQUksQ0FBQ3ZCLE9BQU8sQ0FBQ3grRSxHQUFHLENBQUMsSUFBSSxDQUFDOCtFLFNBQVMsQ0FBQztBQUVoQztBQUNBLFFBQUksQ0FBQ0oseUJBQXlCLEdBQUcsSUFBSWptQyxRQUFRLEVBQUU7QUFDL0MsUUFBSSxDQUFDaW1DLHlCQUF5QixDQUFDajFHLElBQUksR0FBRyxtQkFBbUI7SUFDekQsSUFBSSxDQUFDKzBHLE9BQU8sQ0FBQ3grRSxHQUFHLENBQUMsSUFBSSxDQUFDMCtFLHlCQUF5QixDQUFDO0FBRWhELFFBQUksQ0FBQ00sV0FBVyxHQUFHLElBQUl2bUMsUUFBUSxFQUFFO0FBQ2pDLFFBQUksQ0FBQ3VtQyxXQUFXLENBQUN2MUcsSUFBSSxHQUFHLGFBQWE7SUFDckMsSUFBSSxDQUFDKzBHLE9BQU8sQ0FBQ3grRSxHQUFHLENBQUMsSUFBSSxDQUFDZy9FLFdBQVcsQ0FBQztBQUVsQyxRQUFJLENBQUN6dEUsU0FBUyxHQUFHLElBQUlvZixTQUFTLEVBQUU7SUFDaEMsSUFBSSxDQUFDcGYsU0FBUyxDQUFDdkwsTUFBTSxDQUFDMXdCLEdBQUcsQ0FBQ3pKLFlBQVksQ0FBQ21xRCxLQUFLLENBQUM7QUFFN0M7SUFDQSxJQUFJLENBQUNncUQsYUFBYSxFQUFFO0FBRXBCOztBQUVHO0lBQ0gsSUFBSSxDQUFDeFcsY0FBYyxDQUFDaGdHLEVBQUUsQ0FBQ2t3RCxXQUFXLENBQUMyNkIsaUJBQWlCLEVBQUUsTUFBSztBQUN6RDtBQUNBLFVBQUksQ0FBQ29xQixpQkFBaUIsQ0FBQzk2RixNQUFNLEdBQUcsSUFBSSxDQUFDaTJDLE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQ2p3QixlQUFlO0FBQ3pFO0FBQ0EsVUFBSSxDQUFDKzdDLGNBQWMsQ0FBQ2g3RixNQUFNLEdBQUcsSUFBSSxDQUFDaTJDLE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQ2p3QixlQUFlO0FBQ3RFO0FBQ0EsVUFBSSxDQUFDZzhDLGFBQWEsQ0FBQ2o3RixNQUFNLEdBQUcsSUFBSSxDQUFDaTJDLE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQ2p3QixlQUFlO0FBQ3ZFLEtBQUMsQ0FBQztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQSxJQUFJLENBQUNoSixNQUFNLENBQUNpNUIsV0FBVyxFQUFFLENBQUM1ekQsS0FBSyxDQUFDejFCLEVBQUUsQ0FBQ2trRCxVQUFVLENBQUN5QixLQUFLLEVBQUUsSUFBSSxDQUFDOHdELFlBQVksQ0FBQzU3RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFbEY7SUFDQSxJQUFJLENBQUM2N0Qsc0JBQXNCLEVBQUU7QUFFN0I7SUFDQSxJQUFJLENBQUM5MEcsT0FBTyxHQUFHLEtBQUs7QUFDdEI7QUFFQTs7QUFFRztBQUVIOzs7O0FBSUc7QUFDSXl6RSxlQUFhQSxHQUFBO0lBQ2xCLElBQUksSUFBSSxDQUFDKzNCLFFBQVEsRUFBRTtBQUVuQjtJQUNBLE1BQU11SixrQkFBa0IsR0FBR3RKLHNCQUFzQjtBQUMvQztBQUNBLFFBQUksQ0FBQzRILGlCQUFpQixDQUFDeEssTUFBTSxDQUFDNkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUNqRCxJQUFJLENBQUMySCxpQkFBaUIsQ0FBQ3pHLFlBQVksRUFBRSxDQUN0QztBQUVEO0lBQ0EsTUFBTW9JLGVBQWUsR0FBR3ZKLHNCQUFzQjtBQUM1QztBQUNBLFFBQUksQ0FBQzhILGNBQWMsQ0FBQzFLLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFDM0MsSUFBSSxDQUFDNkgsY0FBYyxDQUFDM0csWUFBWSxFQUFFLENBQ25DO0FBRUQ7SUFDQSxNQUFNcUksZ0JBQWdCLEdBQUdGLGtCQUFrQixHQUN2Q0Esa0JBQWtCLENBQUNsekUsUUFBUSxHQUMzQmlNLE1BQU0sQ0FBQzZqQyxTQUFTO0lBQ3BCLE1BQU11akMsY0FBYyxHQUFHRixlQUFlLEdBQUdBLGVBQWUsQ0FBQ256RSxRQUFRLEdBQUdpTSxNQUFNLENBQUM2akMsU0FBUztBQUVwRjs7QUFFRztJQUNILElBQUlzakMsZ0JBQWdCLElBQUlDLGNBQWMsRUFBRTtBQUN0QyxVQUFJLENBQUM3QixpQkFBaUIsQ0FBQ3BLLFVBQVUsR0FBRyxLQUFLO0FBQ3pDLFVBQUksQ0FBQ3NLLGNBQWMsQ0FBQ3RLLFVBQVUsR0FBRyxJQUFJO0FBQ3ZDLEtBQUMsTUFBTTtBQUNMLFVBQUksQ0FBQ29LLGlCQUFpQixDQUFDcEssVUFBVSxHQUFHLElBQUk7QUFDeEMsVUFBSSxDQUFDc0ssY0FBYyxDQUFDdEssVUFBVSxHQUFHLEtBQUs7QUFDeEM7QUFDRjtBQUVBO0FBQ083cUcsSUFBRUEsQ0FDUHltRCxTQUFZLEVBQ1p2bUQsUUFBbUQ7QUFFbkQsU0FBSyxDQUFDRixFQUFFLENBQUN5bUQsU0FBUyxFQUFFdm1ELFFBQVEsQ0FBQztBQUMvQjtBQUVBO0FBQ082MkcsUUFBTUEsR0FBQTtJQUNYLE9BQU8sSUFBSSxDQUFDcHhDLEdBQUc7QUFDakI7QUFFQTs7OztBQUlHO0FBQ0lxeEMsUUFBTUEsQ0FDWEMsU0FBOEQsRUFDOUQvcEcsTUFBTSxHQUFHLENBQUM7QUFFVjtBQUNBQSxVQUFNLEdBQUdBLE1BQU0sS0FBSyxDQUFDLEdBQUcsTUFBTSxHQUFHQSxNQUFNO0FBRXZDLFFBQUksSUFBSSxDQUFDZ3FHLEtBQUssQ0FBQ0QsU0FBUyxDQUFDLEVBQUU7QUFDekI7TUFDQSxNQUFNRSxXQUFXLEdBQUd0dEcsS0FBSyxDQUFDNkMsaUJBQWlCLENBQUN1cUcsU0FBUyxFQUFFL3BHLE1BQU0sQ0FBQztBQUM5RDtNQUNBLElBQUksQ0FBQ3k0RCxHQUFHLENBQUNwNUQsTUFBTSxDQUFDTCxJQUFJLENBQUNpckcsV0FBVyxDQUFDNXFHLE1BQU0sQ0FBQztNQUN4QyxJQUFJLENBQUNvNUQsR0FBRyxDQUFDNTRELFFBQVEsQ0FBQ2IsSUFBSSxDQUFDaXJHLFdBQVcsQ0FBQ3BxRyxRQUFRLENBQUM7TUFDNUMsSUFBSSxDQUFDNDRELEdBQUcsQ0FBQ04sUUFBUSxDQUFDbjVELElBQUksQ0FBQ2lyRyxXQUFXLENBQUM5eEMsUUFBUSxDQUFDO0tBQzdDLE1BQU0sSUFBSSxJQUFJLENBQUMreEMsTUFBTSxDQUFDSCxTQUFTLENBQUMsRUFBRTtBQUNqQztBQUNBLFVBQUloc0csR0FBRyxHQUFHLElBQUloQixJQUFJLEVBQUU7TUFDcEJnQixHQUFHLENBQUNOLEdBQUcsQ0FBQ3VCLElBQUksQ0FBQytxRyxTQUFTLENBQUN0c0csR0FBRyxDQUFDO01BQzNCTSxHQUFHLENBQUNQLEdBQUcsQ0FBQ3dCLElBQUksQ0FBQytxRyxTQUFTLENBQUN2c0csR0FBRyxDQUFDO0FBQzNCO0FBQ0EsVUFBSU8sR0FBRyxDQUFDVSxPQUFPLEVBQUUsRUFBRVYsR0FBRyxHQUFHLElBQUloQixJQUFJLENBQUMsSUFBSUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSUEsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEY7TUFDQWMsR0FBRyxHQUFHcEIsS0FBSyxDQUFDNkMsaUJBQWlCLENBQUN1cUcsU0FBUyxFQUFFL3BHLE1BQU0sQ0FBQztBQUNoRDtBQUNBLFVBQUksQ0FBQ3k0RCxHQUFHLENBQUNwNUQsTUFBTSxDQUFDTCxJQUFJLENBQUNqQixHQUFHLENBQUNULFNBQVMsQ0FBQyxJQUFJTCxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ2xELElBQUksQ0FBQ3c3RCxHQUFHLENBQUM1NEQsUUFBUSxDQUFDYixJQUFJLENBQUNqQixHQUFHLENBQUM0QixPQUFPLENBQUMsSUFBSTFDLE9BQU8sRUFBRSxDQUFDLENBQUM0bkIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLFVBQUksQ0FBQzR6QyxHQUFHLENBQUNOLFFBQVEsQ0FBQ3o1RCxRQUFRLEVBQUU7S0FDN0IsTUFBTWpJLE1BQU0sQ0FBQ3VDLEtBQUssQ0FBQyxDQUFpQyt3Ryx5Q0FBUyxFQUFFLENBQUM7QUFFakU7SUFDQSxJQUFJLENBQUNJLFlBQVksRUFBRTtJQUNuQixJQUFJLENBQUNDLFlBQVksRUFBRTtJQUNuQixJQUFJLENBQUM5MkcsSUFBSSxDQUFDK3pHLGdCQUFnQixDQUFDZ0IsT0FBTyxFQUFFLElBQUksQ0FBQy9uRCxNQUFNLENBQUM7QUFDbEQ7QUFFQTs7QUFFRztBQUNJK3BELFFBQU1BLEdBQUE7QUFDWCxRQUFJLENBQUMzMUcsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDODdDLFFBQVE7QUFDL0I7QUFFQTtBQUNPODVELGlCQUFlQSxHQUFBO0lBQ3BCLE9BQU8sSUFBSXR5RyxPQUFPLEVBQUUsQ0FBQ3V5RyxPQUFPLENBQzFCLElBQUksQ0FBQzl4QyxHQUFHLENBQUNwNUQsTUFBTSxFQUNma29HLFdBQVcsQ0FBQy80QixxQkFBcUIsQ0FBQzg0QixRQUFRLENBQUNrRCxjQUFjLENBQUMsSUFBSSxDQUFDL3hDLEdBQUcsQ0FBQ04sUUFBUSxDQUFDLENBQUMsRUFDN0VMLFFBQVEsQ0FBQzk0RCxJQUFJLENBQUMsSUFBSSxDQUFDeTVELEdBQUcsQ0FBQzU0RCxRQUFRLENBQUMsQ0FBQ2dsQixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQ25EO0FBQ0g7QUFFQTs7QUFFRztBQUNPeWtGLGVBQWFBLEdBQUE7QUFDckI7SUFDQSxNQUFNcjhGLE1BQU0sR0FBRyxJQUFJLENBQUNpMkMsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDandCLGVBQWU7SUFDeEQsSUFBSSxDQUFDai9DLE1BQU0sRUFBRTtBQUNYLFlBQU0sSUFBSWhVLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQztBQUNuRjtBQUVBO0FBQ0EsUUFBSSxDQUFDOHVHLGlCQUFpQixHQUFHLElBQUkzSyxpQkFBaUIsQ0FDNUNud0YsTUFBTSxFQUNOLElBQUksQ0FBQ2kyQyxNQUFNLENBQUNpNUIsV0FBVyxFQUFFLENBQUMzbUYsUUFBUSxDQUFDd3BFLFVBQVUsQ0FDOUM7QUFDRDtBQUNBLFNBQUssSUFBSTVqRSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsSUFBSSxDQUFDMnNHLGlCQUFpQixDQUFDL2tGLEtBQUssQ0FBQ0csUUFBUSxDQUFDbG9CLE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7QUFDckUsVUFBSSxDQUFDMnNHLGlCQUFpQixDQUFDL2tGLEtBQUssQ0FBQ0csUUFBUSxDQUFDL25CLENBQUMsQ0FBQyxDQUFDMmtFLFFBQVEsQ0FBRTdrQixHQUFHLElBQUk7UUFDeERBLEdBQUcsQ0FBQzVyQixNQUFNLENBQUMxd0IsR0FBRyxDQUFDekosWUFBWSxDQUFDbXFELEtBQUssQ0FBQztBQUNwQyxPQUFDLENBQUM7QUFDSjtBQUNBLFFBQUksQ0FBQ3lvRCxpQkFBaUIsQ0FBQ3pHLFlBQVksRUFBRSxDQUFDaHlFLE1BQU0sQ0FBQzF3QixHQUFHLENBQUN6SixZQUFZLENBQUNtcUQsS0FBSyxDQUFDO0FBQ3BFLFFBQUksQ0FBQ3lvRCxpQkFBaUIsQ0FBQ24xRCxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3BDLFFBQUksQ0FBQ20xRCxpQkFBaUIsQ0FBQ3ZILEtBQUssR0FBRyxPQUFPO0lBQ3RDLElBQUksQ0FBQ3NILE9BQU8sQ0FBQ3grRSxHQUFHLENBQUMsSUFBSSxDQUFDeStFLGlCQUFpQixDQUFDL2tGLEtBQUssQ0FBQztBQUU5QztBQUNBLFFBQUksQ0FBQ2lsRixjQUFjLEdBQUcsSUFBSTdLLGlCQUFpQixDQUN6Q253RixNQUFNLEVBQ04sSUFBSSxDQUFDaTJDLE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQzNtRixRQUFRLENBQUN3cEUsVUFBVSxDQUM5QztBQUNEO0FBQ0EsU0FBSyxJQUFJNWpFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxJQUFJLENBQUM2c0csY0FBYyxDQUFDamxGLEtBQUssQ0FBQ0csUUFBUSxDQUFDbG9CLE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7QUFDbEUsVUFBSSxDQUFDNnNHLGNBQWMsQ0FBQ2psRixLQUFLLENBQUNHLFFBQVEsQ0FBQy9uQixDQUFDLENBQUMsQ0FBQzJrRSxRQUFRLENBQUU3a0IsR0FBRyxJQUFJO1FBQ3JEQSxHQUFHLENBQUM1ckIsTUFBTSxDQUFDMXdCLEdBQUcsQ0FBQ3pKLFlBQVksQ0FBQ21xRCxLQUFLLENBQUM7QUFDcEMsT0FBQyxDQUFDO0FBQ0o7QUFDQSxRQUFJLENBQUMyb0QsY0FBYyxDQUFDM0csWUFBWSxFQUFFLENBQUNoeUUsTUFBTSxDQUFDMXdCLEdBQUcsQ0FBQ3pKLFlBQVksQ0FBQ21xRCxLQUFLLENBQUM7QUFDakUsUUFBSSxDQUFDMm9ELGNBQWMsQ0FBQ3IxRCxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ2hDLFFBQUksQ0FBQ3ExRCxjQUFjLENBQUNoTCxJQUFJLEdBQUcsUUFBUTtBQUNuQyxRQUFJLENBQUNnTCxjQUFjLENBQUN6SCxLQUFLLEdBQUcsT0FBTztJQUNuQyxJQUFJLENBQUNzSCxPQUFPLENBQUN4K0UsR0FBRyxDQUFDLElBQUksQ0FBQzIrRSxjQUFjLENBQUNqbEYsS0FBSyxDQUFDO0FBRTNDO0FBQ0EsUUFBSSxDQUFDa2xGLGFBQWEsR0FBRyxJQUFJOUssaUJBQWlCLENBQ3hDbndGLE1BQU0sRUFDTixJQUFJLENBQUNpMkMsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDM21GLFFBQVEsQ0FBQ3dwRSxVQUFVLENBQzlDO0FBQ0Q7QUFDQSxTQUFLLElBQUk1akUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLElBQUksQ0FBQzhzRyxhQUFhLENBQUNsbEYsS0FBSyxDQUFDRyxRQUFRLENBQUNsb0IsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtBQUNqRSxVQUFJLENBQUM4c0csYUFBYSxDQUFDbGxGLEtBQUssQ0FBQ0csUUFBUSxDQUFDL25CLENBQUMsQ0FBQyxDQUFDMmtFLFFBQVEsQ0FBRTdrQixHQUFHLElBQUk7UUFDcERBLEdBQUcsQ0FBQzVyQixNQUFNLENBQUMxd0IsR0FBRyxDQUFDekosWUFBWSxDQUFDbXFELEtBQUssQ0FBQztBQUNwQyxPQUFDLENBQUM7QUFDSjtBQUNBLFFBQUksQ0FBQzRvRCxhQUFhLENBQUM1RyxZQUFZLEVBQUUsQ0FBQ2h5RSxNQUFNLENBQUMxd0IsR0FBRyxDQUFDekosWUFBWSxDQUFDbXFELEtBQUssQ0FBQztBQUNoRSxRQUFJLENBQUM0b0QsYUFBYSxDQUFDdDFELE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDL0IsUUFBSSxDQUFDczFELGFBQWEsQ0FBQ2pMLElBQUksR0FBRyxPQUFPO0FBQ2pDLFFBQUksQ0FBQ2lMLGFBQWEsQ0FBQ2xsRixLQUFLLENBQUNyZCxPQUFPLEdBQUcsS0FBSztJQUN4QyxJQUFJLENBQUNtaUcsT0FBTyxDQUFDeCtFLEdBQUcsQ0FBQyxJQUFJLENBQUM0K0UsYUFBYSxDQUFDbGxGLEtBQUssQ0FBQztBQUUxQztBQUNBLFFBQUksQ0FBQytrRixpQkFBaUIsQ0FBQ3hyRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDa3VFLGFBQWEsQ0FBQzk4RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEYsUUFBSSxDQUFDbzZELGlCQUFpQixDQUFDeHJFLGdCQUFnQixDQUNyQyxrQkFBa0IsRUFDbEIsSUFBSSxDQUFDbXVFLGVBQWUsQ0FBQy84RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2hDO0FBRUQsUUFBSSxDQUFDczZELGNBQWMsQ0FBQzFyRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDa3VFLGFBQWEsQ0FBQzk4RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0UsUUFBSSxDQUFDczZELGNBQWMsQ0FBQzFyRSxnQkFBZ0IsQ0FDbEMsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQ211RSxlQUFlLENBQUMvOEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNoQztBQUVELFFBQUksQ0FBQ3U2RCxhQUFhLENBQUMzckUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQ2t1RSxhQUFhLENBQUM5OEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVFLFFBQUksQ0FBQ3U2RCxhQUFhLENBQUMzckUsZ0JBQWdCLENBQ2pDLGtCQUFrQixFQUNsQixJQUFJLENBQUNtdUUsZUFBZSxDQUFDLzhELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDaEM7QUFDSDtBQUVBOztBQUVHO0FBQ09nOUQsZ0JBQWNBLEdBQUE7SUFDdEIsT0FBTyxJQUFJL3FHLEdBQUcsRUFBRSxDQUFDWixJQUFJLENBQUMsSUFBSSxDQUFDeTVELEdBQUcsQ0FBQztBQUNqQztBQUVBOztBQUVHO0VBQ09teUMsYUFBYUEsQ0FBQzdtRCxLQUFVO0FBQ2hDLFFBQUksQ0FBQzBVLEdBQUcsQ0FBQ3o1RCxJQUFJLENBQUMra0QsS0FBSyxDQUFDO0FBQ3RCO0FBRUE7O0FBRUc7QUFDTzhtRCxlQUFhQSxHQUFBO0FBQ3JCLFVBQU1DLFlBQVksR0FBRyxJQUFJLENBQUNILGNBQWMsRUFBRTtBQUUxQztBQUNBLFFBQ0UsSUFBSSxDQUFDN0IsbUJBQW1CLEdBQUcsSUFBSSxDQUFDRCxpQkFBaUIsQ0FBQzV0RyxNQUFNLEdBQUcsQ0FBQyxJQUM1RCxJQUFJLENBQUM0dEcsaUJBQWlCLENBQUM1dEcsTUFBTSxHQUFHLENBQUMsRUFDakM7QUFDQTtBQUNBLFVBQUksQ0FBQzR0RyxpQkFBaUIsR0FBRyxJQUFJLENBQUNBLGlCQUFpQixDQUFDbjRGLEtBQUssQ0FDbkQsQ0FBQyxFQUNELElBQUksQ0FBQ280RixtQkFBbUIsR0FBRyxDQUFDLENBQzdCO0FBQ0g7QUFFQTtBQUNBLFFBQUksQ0FBQ0QsaUJBQWlCLENBQUM1MUcsSUFBSSxDQUFDNjNHLFlBQVksQ0FBQztJQUN6QyxJQUFJLENBQUNoQyxtQkFBbUIsR0FBRyxJQUFJLENBQUNELGlCQUFpQixDQUFDNXRHLE1BQU0sR0FBRyxDQUFDO0FBRTVEO0lBQ0EsSUFBSSxJQUFJLENBQUM0dEcsaUJBQWlCLENBQUM1dEcsTUFBTSxHQUFHLElBQUksQ0FBQzh0RyxjQUFjLEVBQUU7QUFDdkQsVUFBSSxDQUFDRixpQkFBaUIsQ0FBQ2tDLEtBQUssRUFBRTtBQUM5QixVQUFJLENBQUNqQyxtQkFBbUIsR0FBRzN3RyxJQUFJLENBQUNxRixHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ3NyRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDdEU7QUFDRjtBQUVBOztBQUVHO0FBQ09VLHdCQUFzQkEsR0FBQTtBQUM5QjtJQUNBLElBQUksQ0FBQ1osZUFBZSxHQUFHLEtBQUs7QUFFNUI7QUFDQSxRQUFJLENBQUNvQyxjQUFjLEdBQUlqakYsQ0FBZ0IsSUFBSTtNQUN6QyxJQUFJQSxDQUFDLENBQUN3d0IsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDcXdELGVBQWUsRUFBRTtRQUN2QyxJQUFJLENBQUNBLGVBQWUsR0FBRyxJQUFJO0FBQzdCO0FBRUE7QUFDQSxVQUFJLENBQUM3Z0YsQ0FBQyxDQUFDOGtELE9BQU8sSUFBSTlrRCxDQUFDLENBQUM2a0QsT0FBTyxLQUFLN2tELENBQUMsQ0FBQ3BELEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQ29ELENBQUMsQ0FBQ3d3QixRQUFRLEVBQUU7QUFDNUQ7QUFDQSxZQUFJLElBQUksQ0FBQzdqRCxPQUFPLElBQUksSUFBSSxDQUFDaVIsT0FBTyxFQUFFO1VBQ2hDb2lCLENBQUMsQ0FBQzR2QixjQUFjLEVBQUU7VUFDbEIsSUFBSSxDQUFDc3pELGNBQWMsRUFBRTtBQUN2QjtBQUNGO0FBRUE7QUFDQSxVQUFJLENBQUNsakYsQ0FBQyxDQUFDOGtELE9BQU8sSUFBSTlrRCxDQUFDLENBQUM2a0QsT0FBTyxLQUFLN2tELENBQUMsQ0FBQ3BELEdBQUcsS0FBSyxHQUFHLElBQUlvRCxDQUFDLENBQUN3d0IsUUFBUSxFQUFFO0FBQzNEO0FBQ0EsWUFBSSxJQUFJLENBQUM3akQsT0FBTyxJQUFJLElBQUksQ0FBQ2lSLE9BQU8sRUFBRTtVQUNoQ29pQixDQUFDLENBQUM0dkIsY0FBYyxFQUFFO1VBQ2xCLElBQUksQ0FBQ3V6RCxjQUFjLEVBQUU7QUFDdkI7QUFDRjtLQUNEO0FBRUQsUUFBSSxDQUFDQyxZQUFZLEdBQUlwakYsQ0FBZ0IsSUFBSTtNQUN2QyxJQUFJLENBQUNBLENBQUMsQ0FBQ3d3QixRQUFRLElBQUksSUFBSSxDQUFDcXdELGVBQWUsRUFBRTtRQUN2QyxJQUFJLENBQUNBLGVBQWUsR0FBRyxLQUFLO0FBQzlCO0tBQ0Q7QUFFRCxRQUFJLENBQUMxbEQsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDNXpELEtBQUssQ0FBQ3oxQixFQUFFLENBQUNra0QsVUFBVSxDQUFDbUMsT0FBTyxFQUFFLElBQUksQ0FBQzZ4RCxjQUFjLENBQUM7QUFDM0UsUUFBSSxDQUFDOW5ELE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQzV6RCxLQUFLLENBQUN6MUIsRUFBRSxDQUFDa2tELFVBQVUsQ0FBQ2tDLEtBQUssRUFBRSxJQUFJLENBQUNpeUQsWUFBWSxDQUFDO0FBQ3pFO0FBRUE7O0FBRUc7QUFDT2YsY0FBWUEsR0FBQTtBQUNwQjtBQUNBLFFBQUksQ0FBQ3BDLHlCQUF5QixDQUFDL2hGLFFBQVEsQ0FBQ2puQixJQUFJLENBQUMsSUFBSSxDQUFDeTVELEdBQUcsQ0FBQ3A1RCxNQUFNLENBQUM7QUFDN0QsUUFBSSxDQUFDMm9HLHlCQUF5QixDQUFDaHVFLFVBQVUsQ0FBQ2g3QixJQUFJLENBQzVDLElBQUlvZ0MsVUFBVSxFQUFFLENBQUNvdkMscUJBQXFCLENBQ3BDLElBQUl4MkUsT0FBTyxFQUFFLENBQUN3eUcsY0FBYyxDQUFDLElBQUksQ0FBQy94QyxHQUFHLENBQUNOLFFBQVEsQ0FBQyxDQUNoRCxDQUNGO0FBQ0QsUUFBSSxDQUFDbXdDLFdBQVcsQ0FBQ2w1RSxLQUFLLENBQUNwd0IsSUFBSSxDQUFDLElBQUksQ0FBQ3k1RCxHQUFHLENBQUM1NEQsUUFBUSxDQUFDO0FBRTlDO0FBQ0EsUUFBSSxDQUFDcXBHLFVBQVUsQ0FBQ2pqRixRQUFRLENBQUNqbkIsSUFBSSxDQUFDLElBQUksQ0FBQ3k1RCxHQUFHLENBQUNwNUQsTUFBTSxDQUFDO0FBQzlDLFFBQUksQ0FBQzZwRyxVQUFVLENBQUM5NUUsS0FBSyxDQUFDcHdCLElBQUksQ0FBQyxJQUFJLENBQUN5NUQsR0FBRyxDQUFDNTRELFFBQVEsQ0FBQztJQUM3QyxJQUFJLENBQUNxcEcsVUFBVSxDQUFDOTVFLEtBQUssQ0FBQ3ZLLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBSSxDQUFDcWtGLFVBQVUsQ0FBQ2x2RSxVQUFVLENBQUNoN0IsSUFBSSxDQUM3QixJQUFJb2dDLFVBQVUsRUFBRSxDQUFDb3ZDLHFCQUFxQixDQUNwQyxJQUFJeDJFLE9BQU8sRUFBRSxDQUFDd3lHLGNBQWMsQ0FBQyxJQUFJLENBQUMveEMsR0FBRyxDQUFDTixRQUFRLENBQUMsQ0FDaEQsQ0FDRjtBQUNEO0lBQ0EsSUFBSSxDQUFDaXpDLGFBQWEsRUFBRTtBQUN0QjtBQUVBOzs7QUFHRztBQUNIO0VBQ1VWLGVBQWVBLENBQUMzeUQsS0FBSztBQUM3QixRQUFJLENBQUNtb0QsUUFBUSxHQUFHbm9ELEtBQUssQ0FBQy9oRCxLQUFLO0lBQzNCLElBQUksSUFBSSxDQUFDa3FHLFFBQVEsRUFBRTtBQUNqQjtBQUNBLFVBQUksSUFBSSxDQUFDMkksaUJBQWlCLENBQUM1dEcsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN2QyxJQUFJLENBQUM0dEcsaUJBQWlCLENBQUM1MUcsSUFBSSxDQUFDLElBQUksQ0FBQzAzRyxjQUFjLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUM3QixtQkFBbUIsR0FBRyxDQUFDO0FBQzlCO0FBRUEsVUFBSSxDQUFDaFcsY0FBYyxDQUFDcCtGLE9BQU8sR0FBRyxLQUFLO0FBQ25DLFVBQUlxakQsS0FBSyxDQUFDcHhCLE1BQU0sS0FBSyxJQUFJLENBQUNvaEYsaUJBQWlCLEVBQUUsSUFBSSxDQUFDRSxjQUFjLENBQUM1RyxNQUFNLEVBQUUsTUFDcEUsSUFBSXRwRCxLQUFLLENBQUNweEIsTUFBTSxLQUFLLElBQUksQ0FBQ3NoRixjQUFjLEVBQUUsSUFBSSxDQUFDRixpQkFBaUIsQ0FBQzFHLE1BQU0sRUFBRTtBQUM5RSxVQUFJLENBQUMvdEcsSUFBSSxDQUFDK3pHLGdCQUFnQixDQUFDZ0UsU0FBUyxDQUFDO0FBQ3ZDLEtBQUMsTUFBTTtBQUNMO01BQ0EsSUFBSSxDQUFDUixhQUFhLEVBQUU7QUFFcEIsVUFBSSxDQUFDL1gsY0FBYyxDQUFDcCtGLE9BQU8sR0FBRyxJQUFJO0FBQ2xDLFVBQUlxakQsS0FBSyxDQUFDcHhCLE1BQU0sS0FBSyxJQUFJLENBQUNvaEYsaUJBQWlCLEVBQ3pDLElBQUksQ0FBQ0UsY0FBYyxDQUFDN0csTUFBTSxDQUFDLElBQUksQ0FBQzRHLHlCQUF5QixDQUFDLE1BQ3ZELElBQUlqd0QsS0FBSyxDQUFDcHhCLE1BQU0sS0FBSyxJQUFJLENBQUNzaEYsY0FBYyxFQUMzQyxJQUFJLENBQUNGLGlCQUFpQixDQUFDM0csTUFBTSxDQUFDLElBQUksQ0FBQzRHLHlCQUF5QixDQUFDO0FBQy9ELFVBQUksQ0FBQzEwRyxJQUFJLENBQUMrekcsZ0JBQWdCLENBQUNpRSxPQUFPLENBQUM7QUFDckM7QUFDQSxRQUFJLENBQUNwb0QsTUFBTSxDQUFDczVCLGFBQWEsRUFBRTtBQUM3QjtBQUVBOzs7Ozs7QUFNRztBQUNIO0FBQ1VpdUIsZUFBYUEsR0FBQTtBQUNyQjtBQUNBLFFBQUksQ0FBQ2h5QyxHQUFHLENBQUNwNUQsTUFBTSxDQUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDZ3BHLHlCQUF5QixDQUFDL2hGLFFBQVEsQ0FBQztBQUU3RDtBQUNBLFFBQUkrVCxVQUFVLEdBQUcsSUFBSSxDQUFDZ3VFLHlCQUF5QixDQUFDaHVFLFVBQVU7SUFDMUQsSUFBSSxJQUFJLENBQUM0dUUsZUFBZSxFQUFFO0FBQ3hCNXVFLGdCQUFVLEdBQUcsSUFBSSxDQUFDdXhFLG9CQUFvQixDQUFDdnhFLFVBQVUsQ0FBQztBQUNsRDtNQUNBLElBQUksQ0FBQ2d1RSx5QkFBeUIsQ0FBQ2h1RSxVQUFVLENBQUNoN0IsSUFBSSxDQUFDZzdCLFVBQVUsQ0FBQztBQUM1RDtJQUVBLElBQUksQ0FBQ3krQixHQUFHLENBQUNOLFFBQVEsQ0FBQ241RCxJQUFJLENBQ3BCLElBQUlrNkQsT0FBTyxFQUFFLENBQUNzeUMsY0FBYyxDQUFDLElBQUl4ekcsT0FBTyxFQUFFLENBQUNrekUsMEJBQTBCLENBQUNseEMsVUFBVSxDQUFDLENBQUMsQ0FDbkY7QUFDRCxRQUFJLENBQUN5K0IsR0FBRyxDQUFDNTRELFFBQVEsQ0FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQ3NwRyxXQUFXLENBQUNsNUUsS0FBSyxDQUFDO0FBRTlDOzs7QUFHRztJQUNILElBQUksQ0FBQyxJQUFJLENBQUNxOEUsU0FBUyxFQUFFLElBQUksQ0FBQ0EsU0FBUyxHQUFHLElBQUl4dUcsT0FBTyxFQUFFLENBQUMrQixJQUFJLENBQUMsSUFBSSxDQUFDc3BHLFdBQVcsQ0FBQ2w1RSxLQUFLLENBQUM7QUFDaEY7SUFDQSxJQUFJLENBQUNxOEUsU0FBUyxDQUFDdmtFLEdBQUcsQ0FBQyxJQUFJLENBQUNvaEUsV0FBVyxDQUFDbDVFLEtBQUssQ0FBQztBQUMxQyxRQUFJLENBQUNxOEUsU0FBUyxDQUFDdGdGLE1BQU0sRUFBRTtJQUV2QixJQUFJLElBQUksQ0FBQ2c5RSxZQUFZLEVBQUU7QUFDckI7QUFDQSxZQUFNMXJELEdBQUcsR0FBRyxJQUFJeC9DLE9BQU8sRUFBRSxDQUN0QitCLElBQUksQ0FBQyxJQUFJLENBQUNtcEcsWUFBWSxDQUFDNWdFLE1BQU0sQ0FBQyxDQUM5Qm94QyxlQUFlLENBQ2QsSUFBSXY1QyxVQUFVLEVBQUUsQ0FBQ292QyxxQkFBcUIsQ0FDcEMsSUFBSXgyRSxPQUFPLEVBQUUsQ0FBQ3d5RyxjQUFjLENBQUMsSUFBSSxDQUFDL3hDLEdBQUcsQ0FBQ04sUUFBUSxDQUFDLENBQ2hELENBQ0YsQ0FDQWp0QyxTQUFTLEVBQUU7QUFDZDtNQUNBLE1BQU13Z0YsTUFBTSxHQUNWdnpHLElBQUksQ0FBQzh4QixHQUFHLENBQUMsSUFBSSxDQUFDaytFLFlBQVksQ0FBQzVnRSxNQUFNLENBQUM3cEMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDK3RHLFNBQVMsQ0FBQy90RyxDQUFDLEdBQ3ZEdkYsSUFBSSxDQUFDOHhCLEdBQUcsQ0FBQyxJQUFJLENBQUNrK0UsWUFBWSxDQUFDNWdFLE1BQU0sQ0FBQzVwQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM4dEcsU0FBUyxDQUFDOXRHLENBQUMsR0FDdkR4RixJQUFJLENBQUM4eEIsR0FBRyxDQUFDLElBQUksQ0FBQ2srRSxZQUFZLENBQUM1Z0UsTUFBTSxDQUFDM3BDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzZ0RyxTQUFTLENBQUM3dEcsQ0FBQztBQUV6RDYrQyxTQUFHLENBQUM1M0IsY0FBYyxDQUFDNm1GLE1BQU0sQ0FBQztBQUMxQjtNQUNBLElBQUksQ0FBQ2p6QyxHQUFHLENBQUNwNUQsTUFBTSxDQUFDNm5DLEdBQUcsQ0FBQ3VWLEdBQUcsQ0FBQztBQUMxQjtJQUVBLElBQUksQ0FBQ2d2RCxTQUFTLENBQUN6c0csSUFBSSxDQUFDLElBQUksQ0FBQ3NwRyxXQUFXLENBQUNsNUUsS0FBSyxDQUFDO0FBRTNDO0lBQ0EsSUFBSSxDQUFDKzZFLFlBQVksRUFBRTtJQUNuQixJQUFJLENBQUNDLFlBQVksRUFBRTtBQUNuQixRQUFJLENBQUN1QixrQkFBa0IsQ0FBQyxJQUFJLENBQUN4RCxZQUFZLENBQUM7QUFDMUMsUUFBSSxDQUFDamxELE1BQU0sQ0FBQ3M1QixhQUFhLEVBQUU7QUFDN0I7QUFFQTs7OztBQUlHO0VBQ08rc0IsWUFBWUEsQ0FDcEJoMkcsSUFBNkQ7SUFFN0QsSUFBSSxJQUFJLENBQUMyc0csUUFBUSxFQUFFO0lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUN4ckcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDaVIsT0FBTyxFQUFFO0FBRXBDO0FBQ0EsUUFBSSxDQUFDazFCLFNBQVMsQ0FBQzhnQixhQUFhLENBQUNwb0QsSUFBSSxFQUFFLElBQUksQ0FBQ3UvRixjQUFjLENBQUM1bUMsZUFBZSxDQUFDO0lBQ3ZFLElBQUkwL0Msa0JBQWtCLEdBQXdCLEVBQUU7SUFFaERBLGtCQUFrQixHQUFHLElBQUksQ0FBQy93RSxTQUFTLENBQUM4ZixlQUFlLENBQUMsSUFBSSxDQUFDdXVELFVBQVUsQ0FBQztBQUVwRTtBQUNBLFFBQUksQ0FBQzBDLGtCQUFrQixDQUFDM3dHLE1BQU0sRUFBRTtNQUM5QixJQUFJLENBQUM4c0csaUJBQWlCLENBQUMzRyxNQUFNLENBQUMsSUFBSSxDQUFDNEcseUJBQXlCLENBQUM7TUFDN0QsSUFBSSxDQUFDQyxjQUFjLENBQUM3RyxNQUFNLENBQUMsSUFBSSxDQUFDNEcseUJBQXlCLENBQUM7QUFDMUQsVUFBSSxDQUFDRSxhQUFhLENBQUM3RyxNQUFNLEVBQUU7QUFDM0IsVUFBSSxDQUFDK0csU0FBUyxDQUFDemlHLE9BQU8sR0FBRyxLQUFLO01BQzlCLElBQUksQ0FBQ3dpRyxZQUFZLEdBQUcsSUFBSTtBQUN4QjtBQUNGO0FBRUE7SUFDQSxJQUFJLENBQUNBLFlBQVksR0FBR3lELGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDdGxFLElBQVk7QUFDdEQsUUFBSSxDQUFDeWhFLGlCQUFpQixDQUFDMUcsTUFBTSxFQUFFO0FBQy9CLFFBQUksQ0FBQzRHLGNBQWMsQ0FBQzVHLE1BQU0sRUFBRTtJQUM1QixJQUFJLENBQUM2RyxhQUFhLENBQUM5RyxNQUFNLENBQUMsSUFBSSxDQUFDa0gsV0FBVyxDQUFDO0FBQzNDLFFBQUksQ0FBQ3FELGtCQUFrQixDQUFDLElBQUksQ0FBQ3hELFlBQVksQ0FBQztBQUM1QztBQUVBOzs7QUFHRztBQUNPZ0MsY0FBWUEsR0FBQTtBQUNwQjtBQUNBLFVBQU0wQixTQUFTLEdBQUcsSUFBSSxDQUFDdkIsZUFBZSxFQUFFO0FBRXhDO0lBQ0EsSUFBSXdCLFVBQVUsR0FBRyxLQUFLO0lBQ3RCLEtBQUssSUFBSXg2RixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsRUFBRSxFQUFFQSxDQUFDLEVBQUUsRUFBRTtNQUMzQixJQUFJblosSUFBSSxDQUFDOHhCLEdBQUcsQ0FBQzRoRixTQUFTLENBQUM3akYsUUFBUSxDQUFDMVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDcTNGLGdCQUFnQixDQUFDM2dGLFFBQVEsQ0FBQzFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFO0FBQzlFdzZGLGtCQUFVLEdBQUcsSUFBSTtBQUNqQjtBQUNGO0FBQ0Y7QUFFQTtJQUNBLElBQUksQ0FBQ0EsVUFBVSxFQUFFO0FBRWpCO0FBQ0EsU0FBSyxJQUFJMXdHLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxJQUFJLENBQUNxdEcsV0FBVyxDQUFDeHRHLE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxDQUFDa2xELE1BQU0sQ0FBQ2xsRCxDQUFDLENBQUMsQ0FBQzRELElBQUksQ0FBQyxJQUFJLENBQUN5cEcsV0FBVyxDQUFDcnRHLENBQUMsQ0FBQyxDQUFDO01BQ3hDLElBQUksQ0FBQ2tsRCxNQUFNLENBQUNsbEQsQ0FBQyxDQUFDLENBQUM2RCxZQUFZLENBQUM0c0csU0FBUyxDQUFDO0FBQ3hDO0FBQ0E7SUFDQSxJQUFJLENBQUMzb0QsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDdjNFLGNBQWMsR0FBRyxJQUFJLENBQUMwN0MsTUFBTTtBQUN0RCxRQUFJLENBQUM0QyxNQUFNLENBQUNpNUIsV0FBVyxFQUFFLENBQUMxZ0IsY0FBYyxHQUFHLElBQUksQ0FBQ291QyxNQUFNLEVBQUU7SUFDeEQsSUFBSSxDQUFDdjJHLElBQUksQ0FBQyt6RyxnQkFBZ0IsQ0FBQ2dCLE9BQU8sRUFBRSxJQUFJLENBQUMvbkQsTUFBTSxDQUFDO0FBQ2hELFFBQUksQ0FBQ3FvRCxnQkFBZ0IsQ0FBQzNwRyxJQUFJLENBQUM2c0csU0FBUyxDQUFDO0FBQ3ZDO0FBRUE7OztBQUdHO0FBQ094QyxpQkFBZUEsR0FBQTtBQUN2QjtJQUNBLE1BQU0wQyxpQkFBaUIsR0FBRyxJQUFJanBELGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0lBQ0FsOUIsUUFBUSxDQUFDQyxpQkFBaUIsQ0FBQ2ttRixpQkFBaUIsRUFBRSxJQUFJaDZGLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRWc2RixpQkFBaUIsQ0FBQ24yRixVQUFVLENBQUNxUSxRQUE0QixDQUFDNkosUUFBUSxDQUNsRUMsZ0JBQWdCLENBQ2pCO0lBQ0NnOEUsaUJBQWlCLENBQUNuMkYsVUFBVSxDQUFDLGNBQWMsQ0FBcUIsQ0FBQ2thLFFBQVEsQ0FDekVDLGdCQUFnQixDQUNqQjtBQUNEO0lBQ0EsTUFBTXE0RSxTQUFTLEdBQUcsSUFBSWx0RixJQUFJLENBQ3hCNndGLGlCQUFpQixFQUNqQixJQUFJampHLHVCQUF1QixDQUN6QjtBQUNFckQsaUJBQVcsRUFBRSxJQUFJO0FBQ2pCSCxVQUFJLEVBQUVrUixVQUFVO0FBQ2hCeFIsYUFBTyxFQUFFLEdBQUc7QUFDWjJSLGVBQVMsRUFBRSxLQUFLO0FBQ2hCOWhCLFdBQUssRUFBRSxRQUFRO0FBQ2Y0VSxlQUFTLEVBQUUsR0FBRztBQUNkRCxlQUFTLEVBQUU7QUFDWixPQUNELENBQUMsU0FBUyxDQUFDLENBQ1osQ0FDRjtJQUNENCtGLFNBQVMsQ0FBQzk0RSxNQUFNLENBQUMxd0IsR0FBRyxDQUFDekosWUFBWSxDQUFDbXFELEtBQUssQ0FBQztBQUN4QzhvRCxhQUFTLENBQUM1aEIsV0FBVyxHQUFHLENBQUM7SUFDekI0aEIsU0FBUyxDQUFDbGxFLGFBQWEsR0FBRyxLQUFLO0FBRS9CLFdBQU9rbEUsU0FBUztBQUNsQjtBQUVBOzs7O0FBSUc7RUFDT3VELGtCQUFrQkEsQ0FBQ3JsRSxJQUFpQjtJQUM1QyxJQUFJLENBQUNBLElBQUksRUFBRTtJQUNYLE1BQU16UyxRQUFRLEdBQUcsSUFBSSxDQUFDcTFFLFVBQVUsQ0FBQ3Z6RixRQUFRLENBQUNDLFVBQVUsQ0FBQ3FRLFFBQVE7QUFDN0Q7QUFDQTtBQUNBLFVBQU0rbEYsUUFBUSxHQUFHLElBQUksQ0FBQ3RELFNBQVMsQ0FBQyxHQUFHcGlFLElBQUksQ0FBQ3pULENBQUMsQ0FBR3lULE1BQUksQ0FBQzNxQyxDQUFDLEdBQUcycUMsSUFBSSxDQUFDOTFCLENBQUMsRUFBRSxDQUFDO0FBQzlEO0FBQ0EsVUFBTXNrRSxFQUFFLEdBQUcsSUFBSTczRSxPQUFPLEVBQUUsQ0FBQzJ1QixtQkFBbUIsQ0FBQ2lJLFFBQVEsRUFBRW00RSxRQUFRLENBQUM1dUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLFVBQU02dUMsRUFBRSxHQUFHLElBQUlodkcsT0FBTyxFQUFFLENBQUMydUIsbUJBQW1CLENBQUNpSSxRQUFRLEVBQUVtNEUsUUFBUSxDQUFDNXVDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV6RTtBQUNBLFVBQU04dUMsVUFBVSxHQUFHLElBQUlqdkcsT0FBTyxDQUM1QixDQUFDNjNFLEVBQUUsQ0FBQ3AzRSxDQUFDLEdBQUd1dUcsRUFBRSxDQUFDdnVHLENBQUMsSUFBSSxDQUFDLEVBQ2pCLENBQUNvM0UsRUFBRSxDQUFDbjNFLENBQUMsR0FBR3N1RyxFQUFFLENBQUN0dUcsQ0FBQyxJQUFJLENBQUMsRUFDakIsQ0FBQ20zRSxFQUFFLENBQUNsM0UsQ0FBQyxHQUFHcXVHLEVBQUUsQ0FBQ3J1RyxDQUFDLElBQUksQ0FBQyxDQUNsQjtBQUVEO0FBQ0EsVUFBTWl1RyxTQUFTLEdBQUcsSUFBSSxDQUFDdkIsZUFBZSxFQUFFO0FBRXhDO0FBQ0E0QixjQUFVLENBQUNqdEcsWUFBWSxDQUFDNHNHLFNBQVMsQ0FBQztBQUNsQyxVQUFNTSxRQUFRLEdBQUcsSUFBSS9zRSxVQUFVLEVBQUUsQ0FBQytyQyxrQkFBa0IsQ0FDbEQsSUFBSWx1RSxPQUFPLEVBQUUsQ0FBQytCLElBQUksQ0FBQ2d0RyxRQUFRLENBQUN6a0UsTUFBTSxDQUFDLENBQUNwYyxNQUFNLEVBQUUsRUFDNUNtYixJQUFJLENBQUNpQixNQUFNLENBQ1o7SUFDRDRrRSxRQUFRLENBQUM3ckYsV0FBVyxDQUNsQixJQUFJOGUsVUFBVSxFQUFFLENBQUNvdkMscUJBQXFCLENBQ3BDLElBQUl4MkUsT0FBTyxFQUFFLENBQUN3eUcsY0FBYyxDQUFDLElBQUksQ0FBQy94QyxHQUFHLENBQUNOLFFBQVEsQ0FBQyxDQUNoRCxDQUNGO0FBRUQ7SUFDQSxJQUFJLENBQUNtd0MsV0FBVyxDQUFDcmlGLFFBQVEsQ0FBQ2puQixJQUFJLENBQUNrdEcsVUFBVSxDQUFDO0lBQzFDLElBQUksQ0FBQzVELFdBQVcsQ0FBQ3R1RSxVQUFVLENBQUNoN0IsSUFBSSxDQUFDbXRHLFFBQVEsQ0FBQztBQUMxQztBQUNBO0FBQ0E7SUFDQSxJQUFJLENBQUNqRSxhQUFhLENBQUNuQixLQUFLLEdBQUdpRixRQUFRLENBQUMvTCxJQUFJLEtBQUssR0FBRztBQUNoRDtJQUNBLElBQUksQ0FBQ2lJLGFBQWEsQ0FBQ2xCLEtBQUssR0FBR2dGLFFBQVEsQ0FBQy9MLElBQUksS0FBSyxHQUFHO0FBQ2hEO0lBQ0EsSUFBSSxDQUFDaUksYUFBYSxDQUFDakIsS0FBSyxHQUFHK0UsUUFBUSxDQUFDL0wsSUFBSSxLQUFLLEdBQUc7QUFFaEQ7QUFDQSxRQUFJLENBQUNtSSxTQUFTLENBQUN6aUcsT0FBTyxHQUFHLElBQUk7QUFDN0I7QUFDQSxVQUFNb3ZFLEVBQUUsR0FBRyxJQUFJOTNFLE9BQU8sRUFBRSxDQUFDMnVCLG1CQUFtQixDQUFDaUksUUFBUSxFQUFFbTRFLFFBQVEsQ0FBQzV1QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsVUFBTWc0QixFQUFFLEdBQUcsSUFBSW40RixPQUFPLEVBQUUsQ0FBQzJ1QixtQkFBbUIsQ0FBQ2lJLFFBQVEsRUFBRW00RSxRQUFRLENBQUM1dUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXpFO0FBQ0EwWCxNQUFFLENBQUM3MUUsWUFBWSxDQUFDNHNHLFNBQVMsQ0FBQztBQUMxQjkyQixNQUFFLENBQUM5MUUsWUFBWSxDQUFDNHNHLFNBQVMsQ0FBQztBQUMxQnpXLE1BQUUsQ0FBQ24yRixZQUFZLENBQUM0c0csU0FBUyxDQUFDO0FBQzFCSSxNQUFFLENBQUNodEcsWUFBWSxDQUFDNHNHLFNBQVMsQ0FBQztBQUUxQjtBQUNBLzJCLE1BQUUsQ0FBQ2xyRCxPQUFPLENBQUNnK0UsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDN3lCLE1BQUUsQ0FBQ25yRCxPQUFPLENBQUNnK0UsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDeFMsTUFBRSxDQUFDeHJFLE9BQU8sQ0FBQ2crRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDaENxRSxNQUFFLENBQUNyaUYsT0FBTyxDQUFDZytFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNbmQsT0FBTyxHQUFHLElBQUksQ0FBQzJkLFNBQVMsQ0FBQ3p5RixRQUFRLENBQUNDLFVBQVUsQ0FBQyxVQUFVLENBQW9CO0FBQ2pGO0lBQ0EsTUFBTTgwRSxVQUFVLEdBQUcsSUFBSSxDQUFDMGQsU0FBUyxDQUFDenlGLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDLGNBQWMsQ0FBb0I7QUFFeEY7QUFDQWdRLFlBQVEsQ0FBQ08scUJBQXFCLENBQzVCeWhGLGlCQUFpQixFQUNqQmxkLFVBQVUsQ0FBQ3hrRSxLQUFxQixFQUNoQ3VrRSxPQUFPLENBQUN2a0UsS0FBcUIsQ0FDOUI7SUFDRHVrRSxPQUFPLENBQUNqeEYsV0FBVyxHQUFHLElBQUk7SUFDMUJreEYsVUFBVSxDQUFDbHhGLFdBQVcsR0FBRyxJQUFJO0FBQy9CO0FBRUE7QUFDVTR2RyxlQUFhQSxHQUFBO0FBQ3JCO0FBQ0EsVUFBTW40RixNQUFNLEdBQUd5MkYsYUFBYSxDQUFDaDNGLEtBQUssRUFBNkI7QUFFL0Q7QUFDQSxVQUFNdTVFLFlBQVksR0FBRyxJQUFJcjZELG9CQUFvQixFQUFFO0FBQy9DcTZELGdCQUFZLENBQUNwNkQsWUFBWSxDQUFDNWUsTUFBTSxDQUFDO0lBRS9CZzVFLFlBQVksQ0FBQ3IwRSxVQUFVLENBQUMsZUFBZSxDQUN4QyxDQUFDbmIsSUFBSSxDQUFDcTFCLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUM7QUFFakM7QUFDQW5LLFlBQVEsQ0FBQ0MsaUJBQWlCLENBQUNva0UsWUFBWSxFQUFFaDVFLE1BQU0sQ0FBQztBQUNoRDtBQUNBLFVBQU14TixRQUFRLEdBQUcsSUFBSTZELG1CQUFtQixDQUN0QztBQUNFelMsV0FBSyxFQUFFLFFBQVE7QUFDZm1pQixlQUFTLEVBQUUsQ0FBQztBQUNaQyxnQkFBVSxFQUFFLEtBQUs7QUFDakJ2UixrQkFBWSxFQUFFLEtBQUs7QUFDbkJ0QixxQkFBZSxFQUFFLEtBQUs7QUFDdEJ1RSxnQkFBVSxFQUFFLElBQUl3RCxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDL0IsT0FDRCxDQUFDLFNBQVMsQ0FBQyxDQUNaO0FBQ0QxSSxZQUFRLENBQUM1TyxLQUFLLEdBQUcsSUFBSXlHLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDcENtSSxZQUFRLENBQUM1TyxLQUFLLENBQUMwRyxtQkFBbUIsRUFBRTtJQUNwQ2tJLFFBQVEsQ0FBQ3VULFNBQVMsR0FBRyxDQUFDO0lBQ3RCdlQsUUFBUSxDQUFDd1QsVUFBVSxHQUFHLEtBQUs7SUFDM0J4VCxRQUFRLENBQUNrRixVQUFVLEdBQUcsSUFBSXdELE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3pDMUksUUFBUSxDQUFDK0IsVUFBVSxHQUFHLEtBQUs7QUFFM0I7SUFDQSxNQUFNNG1HLFdBQVcsR0FBRyxJQUFJbDlFLGFBQWEsQ0FBQys2RCxZQUFZLEVBQUV4bUYsUUFBUSxDQUFDO0lBQzdEMm9HLFdBQVcsQ0FBQ3I1RyxJQUFJLEdBQUcsQ0FBc0I7SUFDekNxNUcsV0FBVyxDQUFDbHBFLGFBQWEsR0FBRyxLQUFLO0lBQ2pDa3BFLFdBQVcsQ0FBQzVsQixXQUFXLEdBQUcsQ0FBQztJQUMzQjRsQixXQUFXLENBQUM5OEUsTUFBTSxDQUFDMXdCLEdBQUcsQ0FBQ3pKLFlBQVksQ0FBQ21xRCxLQUFLLENBQUM7QUFFMUMsV0FBTzhzRCxXQUFXO0FBQ3BCO0FBRUE7O0FBRUc7QUFDT2hCLGVBQWFBLEdBQUE7QUFDckI7QUFDQSxVQUFNUyxTQUFTLEdBQUcsSUFBSSxDQUFDdkIsZUFBZSxFQUFFO0FBRXhDO0FBQ0EsVUFBTStCLEdBQUcsR0FBRyxJQUFJcHZHLE9BQU8sRUFBRTtBQUN6QixTQUFLLElBQUk3QixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdzc0csYUFBYSxDQUFDenNHLE1BQU0sRUFBRUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRGl4RyxTQUFHLENBQUN4aUYsU0FBUyxDQUFDNjlFLGFBQWEsRUFBRXRzRyxDQUFDLENBQUM7QUFDL0JpeEcsU0FBRyxDQUFDcHRHLFlBQVksQ0FBQzRzRyxTQUFTLENBQUM7QUFDM0JsRSxrQkFBWSxDQUFDdnNHLENBQUMsQ0FBQyxHQUFHaXhHLEdBQUcsQ0FBQzN1RyxDQUFDO01BQ3ZCaXFHLFlBQVksQ0FBQ3ZzRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdpeEcsR0FBRyxDQUFDMXVHLENBQUM7TUFDM0JncUcsWUFBWSxDQUFDdnNHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR2l4RyxHQUFHLENBQUN6dUcsQ0FBQztBQUM3QjtBQUVBO0FBQ0EsVUFBTTZzRixPQUFPLEdBQ1gsSUFBSSxDQUFDMGUsVUFBVSxDQUFDeHpGLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDLGVBQWUsQ0FDcEQsQ0FBQ25iLElBQUk7QUFDTixVQUFNaXdGLFVBQVUsR0FDZCxJQUFJLENBQUN5ZSxVQUFVLENBQUN4ekYsUUFBUSxDQUFDQyxVQUFVLENBQ2pDLGtCQUFrQixDQUVyQixDQUFDbmIsSUFBSTtBQUNObXJCLFlBQVEsQ0FBQ08scUJBQXFCLENBQzVCd2hGLFlBQVksRUFDWmpkLFVBQVUsQ0FBQ3hrRSxLQUFxQixFQUNoQ3VrRSxPQUFPLENBQUN2a0UsS0FBcUIsQ0FDOUI7QUFDRCxRQUFJLENBQUNpakYsVUFBVSxDQUFDeHpGLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDcGMsV0FBVyxHQUFHLElBQUk7QUFDdkUsUUFBSSxDQUFDMnZHLFVBQVUsQ0FBQ3h6RixRQUFRLENBQUNDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQ3BjLFdBQVcsR0FBRyxJQUFJO0FBQ3JFLFFBQUksQ0FBQzJ2RyxVQUFVLENBQUN4ekYsUUFBUSxDQUFDQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQ3BjLFdBQVcsR0FBRyxJQUFJO0FBQzFFLFFBQUksQ0FBQzJ2RyxVQUFVLENBQUN4ekYsUUFBUSxDQUFDQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ3BjLFdBQVcsR0FBRyxJQUFJO0FBQzFFO0FBRUE7QUFDVXl2RyxvQkFBa0JBLEdBQUE7QUFDMUIsVUFBTXAxRSxRQUFRLEdBQUcyekUsUUFBUSxDQUFDOTJGLEtBQUssRUFBRTtBQUNqQyxVQUFNNDdGLE9BQU8sR0FBRzdFLGVBQWUsQ0FBQy8yRixLQUFLLEVBQUU7QUFFdkMsVUFBTWhWLENBQUMsR0FBRyxJQUFJdTFCLGNBQWMsRUFBRTtBQUM5QnYxQixLQUFDLENBQUMwcUIsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJQyxzQkFBc0IsQ0FBQ3dOLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRW40QixDQUFDLENBQUN5MUIsUUFBUSxDQUFDLElBQUlFLHFCQUFxQixDQUFDaTdFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRDV3RyxDQUFDLENBQUN5d0Isa0JBQWtCLEVBQUU7SUFDdEJ6d0IsQ0FBQyxDQUFDMnZCLG9CQUFvQixFQUFFO0FBQ3hCLFdBQU8zdkIsQ0FBQztBQUNWO0FBRUE7QUFDVXV3RCxPQUFLQSxHQUFBO0FBQ2IsUUFBSSxDQUFDODdDLGlCQUFpQixDQUFDOTdDLEtBQUssRUFBRTtBQUM5QixRQUFJLENBQUM4N0MsaUJBQWlCLENBQUM5N0MsS0FBSyxFQUFFO0FBQzlCLFFBQUksQ0FBQ2k4QyxhQUFhLENBQUNqOEMsS0FBSyxFQUFFO0FBQzVCO0FBRUE7RUFDVWkrQyxNQUFNQSxDQUNkbnNHLEdBQXdEO0lBRXhELE9BQU9BLEdBQUcsWUFBWWhCLElBQUksSUFBSyxLQUFLLElBQUlnQixHQUFHLElBQUksS0FBSyxJQUFJQSxHQUFJO0FBQzlEO0VBRVVpc0csS0FBS0EsQ0FDYmpzRyxHQUF3RDtJQUV4RCxPQUFPQSxHQUFHLFlBQVk2QixHQUFHO0FBQzNCO0FBRUE7Ozs7O0FBS0c7RUFDTzJyRyxvQkFBb0JBLENBQUNyOEIsQ0FBYTtBQUMxQztBQUNBaXpCLGNBQVUsQ0FBQzF6QixpQkFBaUIsQ0FBQ1MsQ0FBQyxDQUFDO0FBRS9CO0FBQ0EsUUFBSSxJQUFJLENBQUNzNUIsaUJBQWlCLEtBQUssSUFBSSxFQUFFO0FBQ25DckcsZ0JBQVUsQ0FBQ3prRyxDQUFDLEdBQ1Z2RixJQUFJLENBQUNrakcsS0FBSyxDQUFDOEcsVUFBVSxDQUFDemtHLENBQUMsR0FBRyxJQUFJLENBQUM4cUcsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUNBLGlCQUFpQjtBQUM1RXJHLGdCQUFVLENBQUN4a0csQ0FBQyxHQUNWeEYsSUFBSSxDQUFDa2pHLEtBQUssQ0FBQzhHLFVBQVUsQ0FBQ3hrRyxDQUFDLEdBQUcsSUFBSSxDQUFDNnFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDQSxpQkFBaUI7QUFDNUVyRyxnQkFBVSxDQUFDdmtHLENBQUMsR0FDVnpGLElBQUksQ0FBQ2tqRyxLQUFLLENBQUM4RyxVQUFVLENBQUN2a0csQ0FBQyxHQUFHLElBQUksQ0FBQzRxRyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQ0EsaUJBQWlCO0FBQzlFO0FBRUE7QUFDQTlMLG1CQUFlLENBQUMzOEQsWUFBWSxDQUFDb2lFLFVBQVUsQ0FBQztBQUN4QyxXQUFPekYsZUFBZTtBQUN4QjtBQUVBOztBQUVHO0FBQ091TyxnQkFBY0EsR0FBQTtBQUN0QixRQUFJLElBQUksQ0FBQ25DLG1CQUFtQixHQUFHLENBQUMsRUFBRTtBQUNoQztNQUNBLElBQUksQ0FBQ0EsbUJBQW1CLEVBQUU7QUFFMUI7TUFDQSxNQUFNeUQsYUFBYSxHQUFHLElBQUksQ0FBQzFELGlCQUFpQixDQUFDLElBQUksQ0FBQ0MsbUJBQW1CLENBQUM7QUFFdEUsVUFBSXlELGFBQWEsRUFBRTtBQUNqQjtBQUNBLFlBQUksQ0FBQzNCLGFBQWEsQ0FBQzJCLGFBQWEsQ0FBQztBQUVqQztRQUNBLElBQUksQ0FBQ3BDLFlBQVksRUFBRTtRQUNuQixJQUFJLENBQUNDLFlBQVksRUFBRTtBQUNuQixZQUFJLENBQUN1QixrQkFBa0IsQ0FBQyxJQUFJLENBQUN4RCxZQUFZLENBQUM7QUFFMUM7UUFDQSxNQUFNcUUsZUFBZSxHQUFHLElBQUksQ0FBQ3RwRCxNQUFNLENBQUMyUyxZQUFZLENBQUM0MkMsZUFBZSxDQUFDO0FBQ2pFLFlBQUlELGVBQWUsSUFBSUEsZUFBZSxDQUFDOTNHLE9BQU8sRUFBRTtBQUM5QzgzRyx5QkFBZSxDQUFDRSxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQ3JDO0FBRUEsWUFBSSxDQUFDeHBELE1BQU0sQ0FBQ3M1QixhQUFhLEVBQUU7QUFDN0I7QUFDRjtBQUNGO0FBRUE7O0FBRUc7QUFDTzB1QixnQkFBY0EsR0FBQTtJQUN0QixJQUFJLElBQUksQ0FBQ3BDLG1CQUFtQixHQUFHLElBQUksQ0FBQ0QsaUJBQWlCLENBQUM1dEcsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNoRTtNQUNBLElBQUksQ0FBQzZ0RyxtQkFBbUIsRUFBRTtBQUUxQjtNQUNBLE1BQU02RCxTQUFTLEdBQUcsSUFBSSxDQUFDOUQsaUJBQWlCLENBQUMsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQztBQUNsRSxVQUFJNkQsU0FBUyxFQUFFO0FBQ2I7QUFDQSxZQUFJLENBQUMvQixhQUFhLENBQUMrQixTQUFTLENBQUM7QUFFN0I7UUFDQSxJQUFJLENBQUN4QyxZQUFZLEVBQUU7UUFDbkIsSUFBSSxDQUFDQyxZQUFZLEVBQUU7QUFDbkIsWUFBSSxDQUFDdUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDeEQsWUFBWSxDQUFDO0FBRTFDO1FBQ0EsTUFBTXFFLGVBQWUsR0FBRyxJQUFJLENBQUN0cEQsTUFBTSxDQUFDMlMsWUFBWSxDQUFDNDJDLGVBQWUsQ0FBQztBQUNqRSxZQUFJRCxlQUFlLElBQUlBLGVBQWUsQ0FBQzkzRyxPQUFPLEVBQUU7QUFDOUM4M0cseUJBQWUsQ0FBQ0UsYUFBYSxDQUFDLElBQUksQ0FBQztBQUNyQztBQUVBLFlBQUksQ0FBQ3hwRCxNQUFNLENBQUNzNUIsYUFBYSxFQUFFO0FBQzdCO0FBQ0Y7QUFDRjtBQUVBOztBQUVHO0FBQ0k3b0YsU0FBT0EsR0FBQTtJQUNaLElBQUksSUFBSSxDQUFDcTNHLGNBQWMsRUFBRTtBQUN2QixVQUFJLENBQUM5bkQsTUFBTSxDQUNSaTVCLFdBQVcsRUFBRSxDQUNiNXpELEtBQUssQ0FBQ3IxQixjQUFjLENBQUM4akQsVUFBVSxDQUFDbUMsT0FBTyxFQUFFLElBQUksQ0FBQzZ4RCxjQUFjLENBQUM7QUFDbEU7SUFDQSxJQUFJLElBQUksQ0FBQ0csWUFBWSxFQUFFO0FBQ3JCLFVBQUksQ0FBQ2pvRCxNQUFNLENBQ1JpNUIsV0FBVyxFQUFFLENBQ2I1ekQsS0FBSyxDQUFDcjFCLGNBQWMsQ0FBQzhqRCxVQUFVLENBQUNrQyxLQUFLLEVBQUUsSUFBSSxDQUFDaXlELFlBQVksQ0FBQztBQUM5RDtBQUNGO0FBQ0Q7O0FDL2xDRCxJQUFZeUIsT0FPWDtBQVBELFdBQVlBLE9BQU87QUFDakJBLFNBQUEsNkJBQXlCO0FBQ3pCQSxTQUFBLDZCQUF5QjtBQUN6QkEsU0FBQSw2QkFBeUI7QUFDekJBLFNBQUEsNkJBQXlCO0FBQ3pCQSxTQUFBLDZCQUF5QjtBQUN6QkEsU0FBQSw2QkFBeUI7QUFDM0IsQ0FBQyxFQVBXQSxPQUFPLEtBQVBBLE9BQU8sR0FPbEI7QUFNSyxNQUFPSCxlQUFnQixTQUFReGtDLFNBQVM7RUFDNUMsSUFBV0MsTUFBTUEsR0FBQTtJQUNmLE9BQU8sQ0FBQzIvQixXQUFXLENBQUM7QUFDdEI7QUFnQkFqMUcsYUFBbUJBLENBQUFzd0QsTUFBZSxFQUFZMnBELGVBQTRCO0lBQ3hFLEtBQUssQ0FBQzNwRCxNQUFNLENBQUM7SUFEK0IsSUFBZSxDQUFBMnBELGVBQUEsR0FBZkEsZUFBZTtBQVpyRCxTQUFBQyxNQUFNLEdBQVksSUFBSTd2RyxPQUFPLEVBQUU7SUFDL0IsSUFBRSxDQUFBNnNFLEVBQUEsR0FBWSxJQUFJN3NFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFJLENBQUEwdUUsSUFBQSxHQUFZLElBQUkxdUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckMsUUFBSSxDQUFBc29CLElBQUEsR0FBWSxJQUFJdG9CLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLElBQUssQ0FBQTRqRCxLQUFBLEdBQVksSUFBSTVqRCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsSUFBTyxDQUFBd3VFLE9BQUEsR0FBWSxJQUFJeHVFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QyxRQUFJLENBQUF5dUUsSUFBQSxHQUFZLElBQUl6dUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFckMsUUFBYSxDQUFBOHZHLGFBQUEsR0FBaUMsRUFBRTtJQUNoRCxJQUFpQixDQUFBQyxpQkFBQSxHQUFZLEVBQUU7SUFDL0IsSUFBb0IsQ0FBQUMsb0JBQUEsR0FBWSxFQUFFO0FBSXhDLFFBQUksQ0FBQ0YsYUFBYSxDQUFDSCxPQUFPLENBQUNNLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNQLE9BQU8sQ0FBQ00sVUFBVSxDQUFDO0FBQ3BGLFFBQUksQ0FBQ0gsYUFBYSxDQUFDSCxPQUFPLENBQUNRLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQ0Qsa0JBQWtCLENBQUNQLE9BQU8sQ0FBQ1EsVUFBVSxDQUFDO0FBQ3BGLFFBQUksQ0FBQ0wsYUFBYSxDQUFDSCxPQUFPLENBQUNTLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQ0Ysa0JBQWtCLENBQUNQLE9BQU8sQ0FBQ1MsVUFBVSxDQUFDO0FBQ3BGLFFBQUksQ0FBQ04sYUFBYSxDQUFDSCxPQUFPLENBQUNVLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQ0gsa0JBQWtCLENBQUNQLE9BQU8sQ0FBQ1UsVUFBVSxDQUFDO0FBQ3BGLFFBQUksQ0FBQ1AsYUFBYSxDQUFDSCxPQUFPLENBQUNXLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQ0osa0JBQWtCLENBQUNQLE9BQU8sQ0FBQ1csVUFBVSxDQUFDO0FBQ3BGLFFBQUksQ0FBQ1IsYUFBYSxDQUFDSCxPQUFPLENBQUNZLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQ0wsa0JBQWtCLENBQUNQLE9BQU8sQ0FBQ1ksVUFBVSxDQUFDO0FBRXBGLFVBQU1DLG9CQUFvQixHQUFHLElBQUl6bEUsS0FBSyxFQUFFO0lBQ3hDeWxFLG9CQUFvQixDQUFDMTZHLElBQUksR0FBRyxvQkFBb0I7QUFDaEQsUUFBSSxDQUFDbXdELE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQ2hoRCxLQUFLLENBQUM3UixHQUFHLENBQUNta0Ysb0JBQW9CLENBQUM7QUFDekRBLHdCQUFvQixDQUFDbmtGLEdBQUcsQ0FBQyxJQUFJLENBQUNva0YsZUFBZSxDQUFDZCxPQUFPLENBQUNXLFVBQVUsQ0FBQyxDQUFDSSxVQUFVLENBQUM7QUFDN0VGLHdCQUFvQixDQUFDbmtGLEdBQUcsQ0FBQyxJQUFJLENBQUNva0YsZUFBZSxDQUFDZCxPQUFPLENBQUNZLFVBQVUsQ0FBQyxDQUFDRyxVQUFVLENBQUM7QUFDN0VGLHdCQUFvQixDQUFDbmtGLEdBQUcsQ0FBQyxJQUFJLENBQUNva0YsZUFBZSxDQUFDZCxPQUFPLENBQUNNLFVBQVUsQ0FBQyxDQUFDUyxVQUFVLENBQUM7QUFDN0VGLHdCQUFvQixDQUFDbmtGLEdBQUcsQ0FBQyxJQUFJLENBQUNva0YsZUFBZSxDQUFDZCxPQUFPLENBQUNRLFVBQVUsQ0FBQyxDQUFDTyxVQUFVLENBQUM7QUFDN0VGLHdCQUFvQixDQUFDbmtGLEdBQUcsQ0FBQyxJQUFJLENBQUNva0YsZUFBZSxDQUFDZCxPQUFPLENBQUNTLFVBQVUsQ0FBQyxDQUFDTSxVQUFVLENBQUM7QUFDN0VGLHdCQUFvQixDQUFDbmtGLEdBQUcsQ0FBQyxJQUFJLENBQUNva0YsZUFBZSxDQUFDZCxPQUFPLENBQUNVLFVBQVUsQ0FBQyxDQUFDSyxVQUFVLENBQUM7QUFFN0UsUUFBSSxDQUFDWCxpQkFBaUIsQ0FBQy81RyxJQUFJLENBQ3pCLElBQUk2b0UsS0FBSyxFQUFFLEVBQ1gsSUFBSUEsS0FBSyxFQUFFLEVBQ1gsSUFBSUEsS0FBSyxFQUFFLEVBQ1gsSUFBSUEsS0FBSyxFQUFFLEVBQ1gsSUFBSUEsS0FBSyxFQUFFLEVBQ1gsSUFBSUEsS0FBSyxFQUFFLENBQ1o7QUFFRCxRQUFJLENBQUMrd0MsZUFBZSxDQUFDLzVHLEVBQUUsQ0FDckJ1MEcsZ0JBQWdCLENBQUNnRSxTQUFTLEVBQzFCLElBQUksQ0FBQ3VDLHFCQUFxQixDQUFDamdFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDdEM7QUFDRCxRQUFJLENBQUNrL0QsZUFBZSxDQUFDLzVHLEVBQUUsQ0FDckJ1MEcsZ0JBQWdCLENBQUNpRSxPQUFPLEVBQ3hCLElBQUksQ0FBQ3VDLG1CQUFtQixDQUFDbGdFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDcEM7QUFDRCxRQUFJLENBQUNrL0QsZUFBZSxDQUFDLzVHLEVBQUUsQ0FBQ3UwRyxnQkFBZ0IsQ0FBQ2dCLE9BQU8sRUFBRSxJQUFJLENBQUN5RixjQUFjLENBQUNuZ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25GO0VBRVErL0QsZUFBZUEsQ0FBQ0ssT0FBZ0I7QUFDdEMsV0FBTyxJQUFJLENBQUNoQixhQUFhLENBQUNnQixPQUFPLENBQUM7QUFDcEM7RUFFQSxJQUFXcjVHLE9BQU9BLEdBQUE7SUFDaEIsT0FBTyxJQUFJLENBQUM4N0MsUUFBUTtBQUN0QjtFQUVBLElBQVc5N0MsT0FBT0EsQ0FBQ3NCLEtBQWM7SUFDL0IsSUFBSSxDQUFDdzZDLFFBQVEsR0FBR3g2QyxLQUFLO0FBQ3JCLFNBQUssTUFBTW9GLENBQUMsSUFBSSxJQUFJLENBQUMyeEcsYUFBYSxFQUFFO01BQ2xDLElBQUksQ0FBQ0EsYUFBYSxDQUFDM3hHLENBQUMsQ0FBQyxDQUFDdXlHLFVBQVUsQ0FBQ2hvRyxPQUFPLEdBQUczUCxLQUFLO0FBQ2xEO0FBQ0Y7RUFFTzgzRyxjQUFjQSxDQUFDeHRELE1BQWU7SUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQ3VzRCxlQUFlLENBQUNuNEcsT0FBTyxFQUFFLElBQUksQ0FBQ0EsT0FBTyxHQUFHLEtBQUs7QUFDdkQsU0FBSyxNQUFNNm5ELEtBQUssSUFBSSxJQUFJLENBQUN3d0QsYUFBYSxFQUFFO0FBQ3RDLFlBQU1ub0csY0FBYyxHQUFHMDdDLE1BQU0sQ0FBQ2p0RCxNQUFNLENBQUUyQyxLQUFLLElBQUssSUFBSSxDQUFDZzRHLFVBQVUsQ0FBQ2g0RyxLQUFLLENBQUMsS0FBS3VtRCxLQUFLLENBQUM7QUFDakYsVUFBSSxDQUFDd3dELGFBQWEsQ0FBQ3h3RCxLQUFLLENBQUMsQ0FBQ294RCxVQUFVLENBQUNscUcsUUFBUSxDQUFDbUIsY0FBYyxHQUFHQSxjQUFjO0FBQy9FO0FBQ0Y7QUFFTzhuRyxlQUFhQSxDQUFDdHFELFFBQWlCLEtBQUs7QUFDekMsUUFBSSxDQUFDNnJELHNCQUFzQixDQUFDLElBQUksQ0FBQy9xRCxNQUFNLENBQUNpNUIsV0FBVyxFQUFFLENBQUN2M0UsY0FBYyxDQUFDO0FBQ3JFLFFBQUksQ0FBQ3NwRyxjQUFjLENBQ2pCOXJELEtBQUssR0FBRyxJQUFJLENBQUNjLE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQ3YzRSxjQUFjLEdBQUcsSUFBSSxDQUFDcW9HLG9CQUFvQixDQUM3RTtBQUNIO0FBRVFrQixvQkFBa0JBLENBQ3hCMTZELE9BQW9CLEVBQ3BCZ3FELE1BQWEsRUFDYjJRLGFBQXFCO0FBRXJCLFVBQU1DLFVBQVUsR0FBRyxJQUFJcHhHLE9BQU8sRUFBRTtBQUNoQyxVQUFNcXhHLFdBQVcsR0FBRyxJQUFJcnhHLE9BQU8sRUFBRTtBQUNqQyxVQUFNc3hHLFdBQVcsR0FBRyxJQUFJdHhHLE9BQU8sRUFBRTtBQUNqQyxVQUFNdXhHLFdBQVcsR0FBRyxJQUFJdnhHLE9BQU8sRUFBRTtBQUNqQyxVQUFNd3hHLFdBQVcsR0FBRyxJQUFJeHhHLE9BQU8sRUFBRTtBQUNqQyxVQUFNeXhHLFFBQVEsR0FBRyxJQUFJQyxLQUFLLEVBQUU7QUFDNUIsVUFBTVosT0FBTyxHQUFHLElBQUksQ0FBQ0MsVUFBVSxDQUFDdlEsTUFBTSxDQUFDO0lBQ3ZDLElBQUksQ0FBQ3NRLE9BQU8sRUFBRTtNQUNadDNHLE1BQU0sQ0FBQ3VDLEtBQUssQ0FBQyxnREFBZ0QsRUFBRXlrRyxNQUFNLENBQUNsMkQsTUFBTSxDQUFDO0FBQzdFO0FBQ0Y7SUFDQSxNQUFNNmtFLFdBQVcsR0FBRyxJQUFJLENBQUNXLGFBQWEsQ0FBQ2dCLE9BQU8sQ0FBQyxDQUFDSixVQUFVO0lBQzFELElBQUl0K0YsS0FBSyxHQUFHLENBQUM7SUFDYixJQUFJbzdFLE9BQU8sR0FDVDJoQixXQUFXLENBQUN6MkYsUUFBUSxDQUFDQyxVQUFVLENBQUMsZUFBZSxDQUNoRCxDQUFDbmIsSUFBSTtBQUNOO0FBQ0EsVUFBTW0wRyxhQUFhLEdBQUcsSUFBSS94RyxLQUFLLEVBQVU7QUFDekMsU0FBSyxJQUFJbEIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHODNDLE9BQU8sQ0FBQ3g0QyxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO01BQ3ZDLE1BQU00Z0QsS0FBSyxHQUFHLElBQUl1ZixLQUFLLEVBQUUsQ0FBQzk4RCxJQUFJLENBQUN5K0YsTUFBTSxDQUFDO01BQ3RDaHFELE9BQU8sQ0FBQzkzQyxDQUFDLENBQUMsQ0FBQ3F4QixJQUFJLENBQUM2TCxHQUFHLENBQUMvRyxTQUFTLENBQUM7QUFDNUJnRSxxQkFBYSxFQUFFQSxDQUNiLzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7YUFDRTtVQUNGLE1BQU04d0csVUFBVSxHQUFHdHlELEtBQUs7QUFDeEIsaUJBQU9zeUQsVUFBVSxDQUFDbnBFLGFBQWEsQ0FBQzNuQyxHQUFHLENBQUM7U0FDckM7UUFFRHEwQixnQkFBZ0IsRUFBR3IwQixHQUFHLElBQUk7VUFDeEIsTUFBTTh3RyxVQUFVLEdBQUd0eUQsS0FBSztBQUN4QixpQkFBT3N5RCxVQUFVLENBQUNucEUsYUFBYSxDQUFDM25DLEdBQUcsQ0FBQztTQUNyQztRQUNEMDBCLGtCQUFrQkEsQ0FBQzhFLEdBQUcsRUFBRXUzRSxFQUFFLEVBQUVDLFVBQVUsRUFBRUMsTUFBTSxFQUFFejVFLFdBQVc7QUFDekQ7QUFDQTtVQUNBLElBQUksQ0FBQ0EsV0FBVyxFQUFFO0FBQ2hCLGtCQUFNLElBQUl0OEIsS0FBSyxDQUFDLHVDQUF1QyxDQUFDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLGdCQUFNd0ssUUFBUSxHQUFHZ3dDLE9BQU8sQ0FBQzkzQyxDQUFDLENBQUMsQ0FBQ3F4QixJQUFJLENBQUN5TixzQkFBc0IsQ0FDckRsRixXQUFXLENBQ0E7QUFDYixjQUNFOXhCLFFBQVEsWUFBWTZKLG9CQUFvQixJQUN4QzdKLFFBQVEsQ0FBQ2tDLE9BQU8sS0FBSyxLQUFLLElBQzFCbEMsUUFBUSxLQUFLLElBQUksRUFFakI7VUFFRixNQUFNb3JHLFVBQVUsR0FBR3R5RCxLQUFLO1VBQ3hCLElBQUl0OEMsS0FBSyxHQUFHLENBQUM7VUFDYnl1RyxRQUFRLENBQUN6K0YsS0FBSyxDQUFDalIsSUFBSSxDQUFDdTRCLEdBQUcsQ0FBQzFFLENBQUMsQ0FBQztVQUMxQjY3RSxRQUFRLENBQUN4K0YsR0FBRyxDQUFDbFIsSUFBSSxDQUFDdTRCLEdBQUcsQ0FBQzU3QixDQUFDLENBQUM7VUFDeEIsSUFBSWt6RyxVQUFVLENBQUNJLGFBQWEsQ0FBQ1AsUUFBUSxFQUFFTCxVQUFVLENBQUMsRUFBRTtBQUNsREEsc0JBQVUsQ0FBQy9rRixHQUFHLENBQ1ptbEYsV0FBVyxDQUFDenZHLElBQUksQ0FBQ3U5QyxLQUFLLENBQUNoVixNQUFNLENBQUMsQ0FBQzFpQixjQUFjLENBQUMsQ0FBQ3VwRixhQUFhLENBQUMsQ0FDOUQ7WUFDRFEsYUFBYSxDQUFDdi9GLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBR2cvRixVQUFVLENBQUMzd0csQ0FBQztZQUN2Q2t4RyxhQUFhLENBQUN2L0YsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR2cvRixVQUFVLENBQUMxd0csQ0FBQztZQUMzQ2l4RyxhQUFhLENBQUN2L0YsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR2cvRixVQUFVLENBQUN6d0csQ0FBQztBQUMzQ3lSLGlCQUFLLEVBQUU7QUFDUHBQLGlCQUFLLEVBQUU7QUFDVDtVQUNBeXVHLFFBQVEsQ0FBQ3orRixLQUFLLENBQUNqUixJQUFJLENBQUN1NEIsR0FBRyxDQUFDNTdCLENBQUMsQ0FBQztVQUMxQit5RyxRQUFRLENBQUN4K0YsR0FBRyxDQUFDbFIsSUFBSSxDQUFDdTRCLEdBQUcsQ0FBQy9tQixDQUFDLENBQUM7VUFDeEIsSUFBSXErRixVQUFVLENBQUNJLGFBQWEsQ0FBQ1AsUUFBUSxFQUFFTCxVQUFVLENBQUMsRUFBRTtBQUNsREEsc0JBQVUsQ0FBQy9rRixHQUFHLENBQ1ptbEYsV0FBVyxDQUFDenZHLElBQUksQ0FBQ3U5QyxLQUFLLENBQUNoVixNQUFNLENBQUMsQ0FBQzFpQixjQUFjLENBQUMsQ0FBQ3VwRixhQUFhLENBQUMsQ0FDOUQ7WUFDRFEsYUFBYSxDQUFDdi9GLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBR2cvRixVQUFVLENBQUMzd0csQ0FBQztZQUN2Q2t4RyxhQUFhLENBQUN2L0YsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR2cvRixVQUFVLENBQUMxd0csQ0FBQztZQUMzQ2l4RyxhQUFhLENBQUN2L0YsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR2cvRixVQUFVLENBQUN6d0csQ0FBQztBQUMzQ3FDLGlCQUFLLEVBQUU7QUFDUG9QLGlCQUFLLEVBQUU7QUFDVDtVQUNBcS9GLFFBQVEsQ0FBQ3orRixLQUFLLENBQUNqUixJQUFJLENBQUN1NEIsR0FBRyxDQUFDL21CLENBQUMsQ0FBQztVQUMxQmsrRixRQUFRLENBQUN4K0YsR0FBRyxDQUFDbFIsSUFBSSxDQUFDdTRCLEdBQUcsQ0FBQzFFLENBQUMsQ0FBQztVQUN4QixJQUFJZzhFLFVBQVUsQ0FBQ0ksYUFBYSxDQUFDUCxRQUFRLEVBQUVMLFVBQVUsQ0FBQyxFQUFFO0FBQ2xEQSxzQkFBVSxDQUFDL2tGLEdBQUcsQ0FDWm1sRixXQUFXLENBQUN6dkcsSUFBSSxDQUFDdTlDLEtBQUssQ0FBQ2hWLE1BQU0sQ0FBQyxDQUFDMWlCLGNBQWMsQ0FBQyxDQUFDdXBGLGFBQWEsQ0FBQyxDQUM5RDtZQUNEUSxhQUFhLENBQUN2L0YsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHZy9GLFVBQVUsQ0FBQzN3RyxDQUFDO1lBQ3ZDa3hHLGFBQWEsQ0FBQ3YvRixLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHZy9GLFVBQVUsQ0FBQzF3RyxDQUFDO1lBQzNDaXhHLGFBQWEsQ0FBQ3YvRixLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHZy9GLFVBQVUsQ0FBQ3p3RyxDQUFDO0FBQzNDcUMsaUJBQUssRUFBRTtBQUNQb1AsaUJBQUssRUFBRTtBQUNUO0FBQ0E7VUFDQSxJQUFJcFAsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUNmcXVHLHVCQUFXLENBQUMxdkcsR0FBRyxDQUNiZ3dHLGFBQWEsQ0FBQyxDQUFDdi9GLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzlCdS9GLGFBQWEsQ0FBQyxDQUFDdi9GLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNsQ3UvRixhQUFhLENBQUMsQ0FBQ3YvRixLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbkM7QUFDRGsvRix1QkFBVyxDQUFDM3ZHLEdBQUcsQ0FDYmd3RyxhQUFhLENBQUMsQ0FBQ3YvRixLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUM5QnUvRixhQUFhLENBQUMsQ0FBQ3YvRixLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbEN1L0YsYUFBYSxDQUFDLENBQUN2L0YsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ25DO0FBQ0RtL0YsdUJBQVcsQ0FBQzV2RyxHQUFHLENBQ2Jnd0csYUFBYSxDQUFDLENBQUN2L0YsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDOUJ1L0YsYUFBYSxDQUFDLENBQUN2L0YsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2xDdS9GLGFBQWEsQ0FBQyxDQUFDdi9GLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuQztBQUNEO0FBQ0EsZ0JBQUltL0YsV0FBVyxDQUFDeDJDLE1BQU0sQ0FBQ3MyQyxXQUFXLENBQUMsSUFBSUUsV0FBVyxDQUFDeDJDLE1BQU0sQ0FBQ3UyQyxXQUFXLENBQUMsRUFBRTtBQUN0RXR1RyxtQkFBSyxFQUFFO0FBQ1BvUCxtQkFBSyxFQUFFO2FBQ1IsTUFBTSxJQUFJaS9GLFdBQVcsQ0FBQ3QyQyxNQUFNLENBQUN1MkMsV0FBVyxDQUFDLEVBQUU7QUFDMUM7QUFDQTtBQUNBQyx5QkFBVyxDQUFDNXZHLEdBQUcsQ0FBQ3l2RyxVQUFVLENBQUMzd0csQ0FBQyxFQUFFMndHLFVBQVUsQ0FBQzF3RyxDQUFDLEVBQUUwd0csVUFBVSxDQUFDendHLENBQUMsQ0FBQztBQUN6RDR3Ryx5QkFBVyxDQUFDbGxGLEdBQUcsQ0FDYm1sRixXQUFXLENBQUN6dkcsSUFBSSxDQUFDdTlDLEtBQUssQ0FBQ2hWLE1BQU0sQ0FBQyxDQUFDMWlCLGNBQWMsQ0FBQyxDQUFDdXBGLGFBQWEsQ0FBQyxDQUM5RDtjQUNEUSxhQUFhLENBQUMsQ0FBQ3YvRixLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHbS9GLFdBQVcsQ0FBQzl3RyxDQUFDO0FBQzlDa3hHLDJCQUFhLENBQUMsQ0FBQ3YvRixLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR20vRixXQUFXLENBQUM3d0csQ0FBQztBQUNsRGl4RywyQkFBYSxDQUFDLENBQUN2L0YsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdtL0YsV0FBVyxDQUFDNXdHLENBQUM7QUFDbERxQyxtQkFBSyxFQUFFO0FBQ1BvUCxtQkFBSyxFQUFFO0FBQ1Q7QUFDRjtBQUNBO0FBQ0E7VUFDQSxJQUFJcFAsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUNmb1AsaUJBQUssSUFBSXBQLEtBQUs7QUFDaEI7QUFDRjtBQUNELFFBQUM7QUFDSjtJQUNBLElBQUkydUcsYUFBYSxDQUFDM3pHLE1BQU0sR0FBR3d2RixPQUFPLENBQUN2a0UsS0FBSyxDQUFDanJCLE1BQU0sRUFBRTtBQUMvQyxVQUFJLENBQUNpMEcsb0JBQW9CLENBQUMsSUFBSSxDQUFDbkMsYUFBYSxDQUFDZ0IsT0FBTyxDQUFDLEVBQUVhLGFBQWEsQ0FBQzN6RyxNQUFNLENBQUM7TUFDNUV5VyxPQUFPLENBQUNwYSxJQUFJLENBQ1YsK0JBQStCbXpGLE9BQU8sQ0FBQ3ZrRSxLQUFLLENBQUNqckIsTUFBTSxPQUNqRDJ6RyxhQUFhLENBQUMzekcsTUFDaEIsS0FBSzJ6RyxhQUFhLENBQUMzekcsTUFBTSxHQUFHLENBQUMsaUJBQWlCLENBQy9DO0FBQ0g7SUFDQXd2RixPQUFPLEdBQ0wyaEIsV0FBVyxDQUFDejJGLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDLGVBQWUsQ0FDaEQsQ0FBQ25iLElBQUk7SUFDTixNQUFNaXdGLFVBQVUsR0FDZDBoQixXQUFXLENBQUN6MkYsUUFBUSxDQUFDQyxVQUFVLENBQUMsa0JBQWtCLENBQ25ELENBQUNuYixJQUFJO0FBQ05tckIsWUFBUSxDQUFDTyxxQkFBcUIsQ0FDNUJ5b0YsYUFBYSxFQUNibGtCLFVBQVUsQ0FBQ3hrRSxLQUFxQixFQUNoQ3VrRSxPQUFPLENBQUN2a0UsS0FBcUIsQ0FDOUI7QUFDRDtJQUNBdWtFLE9BQU8sQ0FBQ2p4RixXQUFXLEdBQUcsSUFBSTtJQUMxQml4RixPQUFPLENBQUM1OEQsV0FBVyxHQUFHO0FBQUU3dEIsWUFBTSxFQUFFLENBQUM7TUFBRUMsS0FBSyxFQUFFb1AsS0FBSyxHQUFHO0tBQUc7SUFDckRxN0UsVUFBVSxDQUFDbHhGLFdBQVcsR0FBRyxJQUFJO0lBQzdCa3hGLFVBQVUsQ0FBQzc4RCxXQUFXLEdBQUc7QUFBRTd0QixZQUFNLEVBQUUsQ0FBQztNQUFFQyxLQUFLLEVBQUVvUCxLQUFLLEdBQUc7S0FBRztJQUN4RCs4RixXQUFXLENBQUN6bUcsT0FBTyxHQUFHLElBQUk7QUFDMUJ5bUcsZUFBVyxDQUFDejJGLFFBQVEsQ0FBQzZXLGFBQWEsR0FBR25kLEtBQUssR0FBRyxDQUFDO0lBQzlDKzhGLFdBQVcsQ0FBQ3oyRixRQUFRLENBQUNDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQ3BjLFdBQVcsR0FBRyxJQUFJO0lBQ25FNHlHLFdBQVcsQ0FBQ3oyRixRQUFRLENBQUNDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQ3BjLFdBQVcsR0FBRyxJQUFJO0lBQ2pFNHlHLFdBQVcsQ0FBQ3oyRixRQUFRLENBQUNDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDcGMsV0FBVyxHQUFHLElBQUk7SUFDdEU0eUcsV0FBVyxDQUFDejJGLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUNwYyxXQUFXLEdBQUcsSUFBSTtBQUNwRTR5RyxlQUFXLENBQUN6MkYsUUFBUSxDQUFDd1csa0JBQWtCLEVBQUU7QUFDekNpZ0YsZUFBVyxDQUFDejJGLFFBQVEsQ0FBQzZ2QixxQkFBcUIsRUFBRTtBQUM5QztFQUVRMm5FLGtCQUFrQkEsQ0FBQ1ksT0FBZTtJQUN4QyxNQUFNOThGLE1BQU0sR0FBRyxJQUFJZ0IsWUFBWSxDQUFDdzZGLGVBQWUsQ0FBQzBDLG1CQUFtQixDQUFDO0FBQ3BFLFVBQU1sbEIsWUFBWSxHQUFHLElBQUlyNkQsb0JBQW9CLEVBQUU7QUFDL0M7SUFDQXE2RCxZQUFZLENBQUNwNkQsWUFBWSxDQUFDLElBQUk5ZCxZQUFZLENBQUNkLE1BQU0sQ0FBQyxDQUFDO0lBRWpEZzVFLFlBQVksQ0FBQ3IwRSxVQUFVLENBQUMsZUFBZSxDQUN4QyxDQUFDbmIsSUFBSSxDQUFDcTFCLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUM7QUFFakNuSyxZQUFRLENBQUNDLGlCQUFpQixDQUFDb2tFLFlBQVksRUFBRWg1RSxNQUFNLENBQUM7QUFDaEQsVUFBTXhOLFFBQVEsR0FBRyxJQUFJNkQsbUJBQW1CLENBQ3RDO0FBQ0V6UyxXQUFLLEVBQUUsUUFBUTtBQUNmbWlCLGVBQVMsRUFBRSxDQUFDO0FBQ1pDLGdCQUFVLEVBQUUsS0FBSztBQUNqQnZSLGtCQUFZLEVBQUUsS0FBSztBQUNuQnRCLHFCQUFlLEVBQUUsS0FBSztBQUN0QnVFLGdCQUFVLEVBQUUsSUFBSXdELE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRztBQUNqQyxPQUNELENBQUMsU0FBUyxDQUFDLENBQ1o7QUFDRDFJLFlBQVEsQ0FBQzVPLEtBQUssR0FBRyxJQUFJeUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUNwQ21JLFlBQVEsQ0FBQzVPLEtBQUssQ0FBQzBHLG1CQUFtQixFQUFFO0lBQ3BDa0ksUUFBUSxDQUFDdVQsU0FBUyxHQUFHLENBQUM7SUFDdEJ2VCxRQUFRLENBQUN3VCxVQUFVLEdBQUcsS0FBSztJQUMzQnhULFFBQVEsQ0FBQ2tGLFVBQVUsR0FBRyxJQUFJd0QsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFFN0MsTUFBTWlnRyxXQUFXLEdBQUcsSUFBSWw5RSxhQUFhLENBQUMrNkQsWUFBWSxFQUFFeG1GLFFBQVEsQ0FBQztBQUM3RDJvRyxlQUFXLENBQUNyNUcsSUFBSSxHQUFHLEdBQUdnN0csT0FBTyxDQUFVO0lBQ3ZDM0IsV0FBVyxDQUFDbHBFLGFBQWEsR0FBRyxLQUFLO0lBQ2pDa3BFLFdBQVcsQ0FBQzVsQixXQUFXLEdBQUcsQ0FBQztJQUMzQjRsQixXQUFXLENBQUM5OEUsTUFBTSxDQUFDMXdCLEdBQUcsQ0FBQ3pKLFlBQVksQ0FBQ21xRCxLQUFLLENBQUM7SUFDMUM4c0QsV0FBVyxDQUFDem1HLE9BQU8sR0FBRyxLQUFLO0lBRTNCLE9BQU87QUFDTGdvRyxnQkFBVSxFQUFFdkI7S0FDYjtBQUNIO0FBRVF3Qix1QkFBcUJBLEdBQUE7SUFDM0IsSUFBSSxDQUFDbDVHLE9BQU8sR0FBRyxLQUFLO0FBQ3RCO0FBRVFtNUcscUJBQW1CQSxHQUFBO0FBQ3pCLFFBQUksQ0FBQ0ksc0JBQXNCLENBQUMsSUFBSSxDQUFDL3FELE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQ3YzRSxjQUFjLENBQUM7QUFDckUsUUFBSSxDQUFDc3BHLGNBQWMsQ0FBQyxJQUFJLENBQUNqQixvQkFBb0IsQ0FBQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNGO0VBRVFnQixzQkFBc0JBLENBQUMzdEQsTUFBZTtBQUM1QyxRQUFJLENBQUMyc0Qsb0JBQW9CLENBQUNoeUcsTUFBTSxHQUFHLENBQUM7SUFDcEMsTUFBTTQ1RSxPQUFPLEdBQUcsSUFBSSxDQUFDM3hCLE1BQU0sQ0FBQ3ZtRCxLQUFLLENBQUM0QixpQkFBaUIsQ0FBQyxNQUFNLENBQUM7QUFDM0QsU0FBSyxJQUFJbkQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHa2xELE1BQU0sQ0FBQ3JsRCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO0FBQ3RDLFVBQ0VqRCxJQUFJLENBQUM4eEIsR0FBRyxDQUFDLElBQUksQ0FBQytpRixpQkFBaUIsQ0FBQzV4RyxDQUFDLENBQUMsQ0FBQ2cwRyxRQUFRLEdBQUc5dUQsTUFBTSxDQUFDbGxELENBQUMsQ0FBQyxDQUFDZzBHLFFBQVEsQ0FBQyxHQUFHdjZCLE9BQU8sSUFDM0UxOEUsSUFBSSxDQUFDOHhCLEdBQUcsQ0FDTixJQUFJLENBQUMraUYsaUJBQWlCLENBQUM1eEcsQ0FBQyxDQUFDLENBQUNtc0MsTUFBTSxDQUFDdHNDLE1BQU0sRUFBRSxHQUFHcWxELE1BQU0sQ0FBQ2xsRCxDQUFDLENBQUMsQ0FBQ21zQyxNQUFNLENBQUN0c0MsTUFBTSxFQUFFLENBQ3RFLEdBQUc0NUUsT0FBTyxFQUVYLElBQUksQ0FBQ280QixvQkFBb0IsQ0FBQ2g2RyxJQUFJLENBQUNxdEQsTUFBTSxDQUFDbGxELENBQUMsQ0FBQyxDQUFDO0FBQzNDLFVBQUksQ0FBQzR4RyxpQkFBaUIsQ0FBQzV4RyxDQUFDLENBQUMsQ0FBQzRELElBQUksQ0FBQ3NoRCxNQUFNLENBQUNsbEQsQ0FBQyxDQUFDLENBQUM7QUFDM0M7QUFDRjtFQUVROHlHLGNBQWNBLENBQUM1dEQsTUFBZTtBQUNwQyxVQUFNcndDLEtBQUssR0FBRzlULFdBQVcsQ0FBQ0QsR0FBRyxFQUFFO0FBQy9CLFVBQU1reUcsYUFBYSxHQUFHLElBQUksQ0FBQ2xyRCxNQUFNLENBQUN2bUQsS0FBSyxDQUFDNEIsaUJBQWlCLENBQ3ZEa3VHLGVBQWUsQ0FBQzRDLGdCQUFnQixDQUNqQztBQUNELFNBQUssSUFBSWowRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdrbEQsTUFBTSxDQUFDcmxELE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7QUFDdEMsVUFBSSxDQUFDK3lHLGtCQUFrQixDQUNyQixJQUFJLENBQUNqckQsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDL3ZCLE9BQU8sQ0FBQzNWLFVBQVUsQ0FBQ3ovQyxTQUFTLEVBQUU4SSxZQUFZLENBQUNhLElBQUksQ0FBQyxFQUMxRTIvQyxNQUFNLENBQUNsbEQsQ0FBQyxDQUFDLEVBQ1RnekcsYUFBYSxDQUNkO0FBQ0g7QUFDQSxRQUFJLENBQUMxNUcsT0FBTyxHQUFHLElBQUksQ0FBQ200RyxlQUFlLENBQUNuNEcsT0FBTztBQUMzQytCLFVBQU0sQ0FBQ2EsSUFBSSxDQUFDLGdCQUFnQixFQUFFNkUsV0FBVyxDQUFDRCxHQUFHLEVBQUUsR0FBRytULEtBQUssQ0FBQztBQUMxRDtBQUVRaS9GLHNCQUFvQkEsQ0FBQ3ozRCxPQUFxQixFQUFFdjhDLElBQVk7QUFDOUR1OEMsV0FBTyxDQUFDazJELFVBQVUsQ0FBQ2g0RixRQUFRLENBQUNoaUIsT0FBTyxFQUFFO0FBRXJDLFVBQU1zZCxNQUFNLEdBQUcsSUFBSWMsWUFBWSxDQUFDN1csSUFBSSxDQUFDO0lBQ3JDdThDLE9BQU8sQ0FBQ2syRCxVQUFVLENBQUNoNEYsUUFBUSxHQUFHLElBQUlpYSxvQkFBb0IsRUFBRTtJQUN4RDZuQixPQUFPLENBQUNrMkQsVUFBVSxDQUFDaDRGLFFBQVEsQ0FBQ2thLFlBQVksQ0FBQzVlLE1BQU0sQ0FBQztBQUU5Q3dtQyxXQUFPLENBQUNrMkQsVUFBVSxDQUFDaDRGLFFBQVEsQ0FBQ0MsVUFBVSxDQUNwQyxlQUFlLENBRWxCLENBQUNuYixJQUFJLENBQUNxMUIsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQztJQUNqQ25LLFFBQVEsQ0FBQ0MsaUJBQWlCLENBQUM0eEIsT0FBTyxDQUFDazJELFVBQVUsQ0FBQ2g0RixRQUFRLEVBQUUxRSxNQUFNLENBQUM7QUFDakU7RUFFUSs4RixVQUFVQSxDQUFDenhELEtBQVk7SUFDN0IsSUFBSSxDQUFDdXdELE1BQU0sQ0FBQ2x1RyxHQUFHLENBQUMyOUMsS0FBSyxDQUFDaFYsTUFBTSxDQUFDN3BDLENBQUMsRUFBRTYrQyxLQUFLLENBQUNoVixNQUFNLENBQUM1cEMsQ0FBQyxFQUFFNCtDLEtBQUssQ0FBQ2hWLE1BQU0sQ0FBQzNwQyxDQUFDLENBQUM7SUFDL0QsSUFBSUcsR0FBRyxHQUFHLElBQUksQ0FBQzh1RyxlQUFlLENBQUNoRCxNQUFNLEVBQUU7QUFDdkMsUUFBSTlyRyxHQUFHLFlBQVloQixJQUFJLEVBQUVnQixHQUFHLEdBQUcsSUFBSTZCLEdBQUcsRUFBRSxDQUFDZzhELFFBQVEsQ0FBQzc5RCxHQUFHLENBQUM7QUFDdEQsVUFBTWs3RCxXQUFXLEdBQUcsSUFBSWpoRSxPQUFPLEVBQUUsQ0FBQ3d5RyxjQUFjLENBQUN6c0csR0FBRyxDQUFDbzZELFFBQVEsQ0FBQyxDQUFDNTRELE1BQU0sRUFBRTtJQUN2RSxJQUFJLENBQUN1dEcsTUFBTSxDQUFDN3RHLFlBQVksQ0FBQ2c2RCxXQUFXLENBQUMsQ0FBQy90QyxTQUFTLEVBQUU7QUFDakQsUUFBSSxDQUFDNGhGLE1BQU0sQ0FBQ2x1RyxHQUFHLENBQ2J6RyxJQUFJLENBQUNrakcsS0FBSyxDQUFDLElBQUksQ0FBQ3lSLE1BQU0sQ0FBQ3B2RyxDQUFDLENBQUMsRUFDekJ2RixJQUFJLENBQUNrakcsS0FBSyxDQUFDLElBQUksQ0FBQ3lSLE1BQU0sQ0FBQ252RyxDQUFDLENBQUMsRUFDekJ4RixJQUFJLENBQUNrakcsS0FBSyxDQUFDLElBQUksQ0FBQ3lSLE1BQU0sQ0FBQ2x2RyxDQUFDLENBQUMsQ0FDMUI7QUFDRCxRQUFJLElBQUksQ0FBQ2t2RyxNQUFNLENBQUM5MEMsTUFBTSxDQUFDLElBQUksQ0FBQ25YLEtBQUssQ0FBQyxFQUFFLE9BQU8rckQsT0FBTyxDQUFDTSxVQUFVO0FBQzdELFFBQUksSUFBSSxDQUFDSixNQUFNLENBQUM5MEMsTUFBTSxDQUFDLElBQUksQ0FBQ3p5QyxJQUFJLENBQUMsRUFBRSxPQUFPcW5GLE9BQU8sQ0FBQ1EsVUFBVTtBQUM1RCxRQUFJLElBQUksQ0FBQ04sTUFBTSxDQUFDOTBDLE1BQU0sQ0FBQyxJQUFJLENBQUM4UixFQUFFLENBQUMsRUFBRSxPQUFPOGlDLE9BQU8sQ0FBQ1MsVUFBVTtBQUMxRCxRQUFJLElBQUksQ0FBQ1AsTUFBTSxDQUFDOTBDLE1BQU0sQ0FBQyxJQUFJLENBQUMyVCxJQUFJLENBQUMsRUFBRSxPQUFPaWhDLE9BQU8sQ0FBQ1UsVUFBVTtBQUM1RCxRQUFJLElBQUksQ0FBQ1IsTUFBTSxDQUFDOTBDLE1BQU0sQ0FBQyxJQUFJLENBQUMwVCxJQUFJLENBQUMsRUFBRSxPQUFPa2hDLE9BQU8sQ0FBQ1csVUFBVTtBQUM1RCxRQUFJLElBQUksQ0FBQ1QsTUFBTSxDQUFDOTBDLE1BQU0sQ0FBQyxJQUFJLENBQUN5VCxPQUFPLENBQUMsRUFBRSxPQUFPbWhDLE9BQU8sQ0FBQ1ksVUFBVTtBQUUvRCxXQUFPeDJHLFNBQVM7QUFDbEI7O0FBelh3QnkxRyxlQUFnQixDQUFBNEMsZ0JBQUEsR0FBRyxNQUFIO0FBQ2hCNUMsZUFBQSxDQUFBMEMsbUJBQW1CLEdBQUcsS0FBSzs7QUNiL0MsTUFBT0csa0JBQW1CLFNBQVFybkMsU0FBUztFQVcvQyxJQUFXc25DLGNBQWNBLEdBQUE7SUFDdkIsT0FBTyxJQUFJLENBQUNDLHFCQUFxQjtBQUNuQztFQUVBLElBQVc5NkcsT0FBT0EsR0FBQTtJQUNoQixPQUFPLElBQUksQ0FBQzg3QyxRQUFRO0FBQ3RCO0VBQ0EsSUFBVzk3QyxPQUFPQSxDQUFDc0IsS0FBYztJQUMvQixJQUFJLENBQUN3NkMsUUFBUSxHQUFHeDZDLEtBQUs7QUFDdkI7RUFFQXBELFlBQW1Cc3dELE1BQWU7SUFDaEMsS0FBSyxDQUFDQSxNQUFNLENBQUM7SUFwQlAsSUFBUSxDQUFBdXNELFFBQUEsR0FBdUJ6NEcsU0FBUztBQUV4QyxTQUFBMDRHLGVBQWUsR0FBRyxJQUFJQSxlQUFlLEVBQUU7SUFDdkMsSUFBc0IsQ0FBQUMsc0JBQUEsR0FBa0MsSUFBSTtJQUM1RCxJQUF1QixDQUFBQyx1QkFBQSxHQUFtQyxJQUFJO0FBQzlELFNBQUFDLG1CQUFtQixHQUErQixJQUFJQSxtQkFBbUIsRUFBRTtBQUMzRSxRQUFxQixDQUFBTCxxQkFBQSxHQUFtQixFQUFvQjtBQTRmNUQsUUFBTyxDQUFBTSxPQUFBLEdBQUcsRUFBOEI7SUE3ZTlDLElBQUksQ0FBQ0MsR0FBRyxHQUFHLElBQUksQ0FBQzdzRCxNQUFNLENBQUMwL0IsWUFBWSxFQUFFO0lBQ3JDLElBQUksQ0FBQ290QixRQUFRLEdBQUcsSUFBSSxDQUFDOXNELE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUU7QUFDM0M7QUFFTzh6QixhQUFXQSxDQUNoQjlyQyxTQUFtQixFQUNuQityQyxRQUFBLEdBQStCbDVHLFNBQVMsRUFDeENtNUcsa0JBQWtCLEdBQUcsS0FBSyxFQUMxQkMsS0FBSyxHQUFHLEtBQUs7QUFFYixXQUFPLElBQUksQ0FBQ0Msa0JBQWtCLENBQzVCbHNDLFNBQVMsRUFDVCtyQyxRQUFRLEVBQ1JJLE9BQU8sQ0FBQ0MsSUFBSSxFQUNaSixrQkFBa0IsRUFDbEJDLEtBQUssQ0FDTjtBQUNIO0VBRU9JLFdBQVdBLENBQ2hCcnNDLFNBQW1CLEVBQ25CK3JDLFFBQUEsR0FBK0JsNUcsU0FBUyxFQUN4Q201RyxrQkFBa0IsR0FBRyxLQUFLO0FBRTFCLFdBQU8sSUFBSSxDQUFDRSxrQkFBa0IsQ0FDNUJsc0MsU0FBUyxFQUNUK3JDLFFBQVEsRUFDUkksT0FBTyxDQUFDRyxJQUFJLEVBQ1pOLGtCQUFrQixDQUNuQjtBQUNIO0FBRU9PLGdCQUFjQSxDQUNuQnZzQyxTQUFtQixFQUNuQityQyxRQUFBLEdBQStCbDVHLFNBQVMsRUFDeENtNUcsa0JBQWtCLEdBQUcsSUFBSSxFQUN6QkMsS0FBSyxHQUFHLElBQUk7QUFFWixXQUFPLElBQUksQ0FBQ0Msa0JBQWtCLENBQzVCbHNDLFNBQVMsRUFDVCtyQyxRQUFRLEVBQ1JJLE9BQU8sQ0FBQ0ssT0FBTyxFQUNmUixrQkFBa0IsRUFDbEJDLEtBQUssQ0FDTjtBQUNIO0FBRU9RLGtCQUFnQkEsQ0FDckJ6c0MsU0FBbUIsRUFDbkIrckMsUUFBQSxHQUErQmw1RyxTQUFTLEVBQ3hDbTVHLGtCQUFrQixHQUFHLElBQUksRUFDekJDLEtBQUssR0FBRyxJQUFJO0FBRVosV0FBTyxJQUFJLENBQUNDLGtCQUFrQixDQUM1QmxzQyxTQUFTLEVBQ1QrckMsUUFBUSxFQUNSSSxPQUFPLENBQUNPLFNBQVMsRUFDakJWLGtCQUFrQixFQUNsQkMsS0FBSyxDQUNOO0FBQ0g7QUFFUUMsb0JBQWtCQSxDQUN4QmxzQyxTQUFtQixFQUNuQityQyxRQUFBLEdBQStCbDVHLFNBQVMsRUFDeEM4NUcsT0FBZ0IsRUFDaEJYLGtCQUFrQixHQUFHLEtBQUssRUFDMUJDLEtBQUssR0FBRyxLQUFLO0lBRWIsSUFDRUYsUUFBUSxLQUFLLElBQUksQ0FBQ1QsUUFBUSxJQUMxQnQzRyxJQUFJLENBQUM4eEIsR0FBRyxDQUFDNm1GLE9BQU8sR0FBRyxJQUFJLENBQUNwQixlQUFlLENBQUNvQixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQ3BEO0FBQ0EsVUFBSSxDQUFDcEIsZUFBZSxDQUFDempELEtBQUssRUFBRTtBQUM5QjtJQUVBLElBQUksQ0FBQ3dqRCxRQUFRLEdBQUdTLFFBQVE7QUFFeEIsUUFBSSxDQUFDUixlQUFlLENBQUNyN0QsR0FBRyxHQUFHLEVBQUU7QUFDN0IsUUFBSSxDQUFDcTdELGVBQWUsQ0FBQ1UsS0FBSyxHQUFHQSxLQUFLO0FBRWxDLFFBQUlELGtCQUFrQixFQUFFO0FBQ3RCaHNDLGVBQVMsR0FBRyxDQUFDLEdBQUdBLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQzRzQyxnQkFBZ0IsQ0FBQzVzQyxTQUFTLENBQUMsQ0FBQztBQUNqRTtJQUVBLElBQUkyc0MsT0FBTyxLQUFLUixPQUFPLENBQUNHLElBQUksSUFBSUssT0FBTyxLQUFLUixPQUFPLENBQUNPLFNBQVMsRUFBRTtBQUM3RDtBQUNBLFdBQUssSUFBSXoxRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcrb0UsU0FBUyxDQUFDbHBFLE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSSxJQUFJLENBQUNzMEcsZUFBZSxDQUFDaHJDLEdBQUcsQ0FBQ1AsU0FBUyxDQUFDL29FLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLE9BQU8sSUFBSSxDQUFDczBHLGVBQWUsQ0FBQ2hyQyxHQUFHLENBQUNQLFNBQVMsQ0FBQy9vRSxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNGO0lBRUEsSUFBSTAxRyxPQUFPLEtBQUtSLE9BQU8sQ0FBQ0MsSUFBSSxJQUFJTyxPQUFPLEtBQUtSLE9BQU8sQ0FBQ0ssT0FBTyxFQUFFO01BQzNELE1BQU1qL0UsR0FBRyxHQUFHeXlDLFNBQVMsQ0FBQ3o4QyxNQUFNLENBQzFCLENBQUNzcEYsR0FBNEIsRUFBRUMsSUFBWSxNQUFPRCxHQUFHLENBQUNDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBR0QsR0FBRyxDQUFDLEVBQ3RFLEVBQUUsQ0FDSDtNQUNENzVHLE1BQU0sQ0FBQzJNLE1BQU0sQ0FBQyxJQUFJLENBQUM0ckcsZUFBZSxDQUFDaHJDLEdBQUcsRUFBRWh6QyxHQUFHLENBQUM7QUFDOUM7QUFFQSxVQUFNaDlCLE9BQU8sR0FBR3lDLE1BQU0sQ0FBQ3VxQixJQUFJLENBQUMsSUFBSSxDQUFDZ3VGLGVBQWUsQ0FBQ2hyQyxHQUFHLENBQUMsQ0FBQ3pwRSxNQUFNLEtBQUssQ0FBQztJQUNsRSxJQUFJLENBQUN2RyxPQUFPLEVBQUU7QUFDWixVQUFJLENBQUNnN0csZUFBZSxDQUFDb0IsT0FBTyxHQUFHUixPQUFPLENBQUMvdUcsSUFBSTtBQUMzQyxhQUFPLElBQUksQ0FBQzJ2RyxVQUFVLEVBQUU7QUFDMUI7QUFFQSxRQUFJLENBQUN4QixlQUFlLENBQUNvQixPQUFPLEdBQUdBLE9BQU87SUFFdEMsSUFBSUEsT0FBTyxLQUFLUixPQUFPLENBQUNDLElBQUksSUFBSU8sT0FBTyxLQUFLUixPQUFPLENBQUNHLElBQUksRUFDdEQsSUFBSSxDQUFDVixHQUFHLENBQUMxckYsSUFBSSxDQUFDLElBQUksQ0FBQzhzRixjQUFjLENBQUN4akUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLElBQUltakUsT0FBTyxLQUFLUixPQUFPLENBQUNLLE9BQU8sSUFBSUcsT0FBTyxLQUFLUixPQUFPLENBQUNPLFNBQVMsRUFBRTtBQUNoRTtNQUNBLE1BQU0zdkMsS0FBSyxHQUFtQyxFQUFFO0FBQ2hELFVBQUksQ0FBQzZ1QyxHQUFHLENBQUMxckYsSUFBSSxDQUFFM1EsSUFBYyxJQUFJO0FBQy9CLFlBQUksQ0FBQ0EsSUFBSSxDQUFDUCxLQUFLLENBQUM2TixNQUFNLElBQUksSUFBSSxDQUFDK3VGLEdBQUcsQ0FBQ3RzRixNQUFNLENBQUMvUCxJQUFJLENBQUMsRUFBRSxPQUFPLElBQUk7QUFDNUQsY0FBTTA5RixPQUFPLEdBQUcsSUFBSSxDQUFDckIsR0FBRyxDQUFDM3NGLGFBQWEsRUFBRSxDQUFDckMseUJBQXlCLENBQUNyTixJQUFJLENBQUM7QUFDeEUsWUFBSSxDQUFDLElBQUksQ0FBQ2c4RixlQUFlLENBQUNockMsR0FBRyxDQUFDaHhELElBQUksQ0FBQ1AsS0FBSyxDQUFDamYsRUFBRSxDQUFDLEVBQUU7QUFDNUNrOUcsaUJBQU8sQ0FBQzE5RyxPQUFPLENBQUUyOUcsTUFBZ0IsSUFBSTtZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDM0IsZUFBZSxDQUFDaHJDLEdBQUcsQ0FBQzJzQyxNQUFNLENBQUNsK0YsS0FBSyxDQUFDamYsRUFBRSxDQUFDLEVBQzVDZ3RFLEtBQUssQ0FBQ213QyxNQUFNLENBQUNsK0YsS0FBSyxDQUFDamYsRUFBRSxDQUFDLEdBQUdtOUcsTUFBTSxDQUFDbCtGLEtBQUssQ0FBQ2lDLFVBQVU7QUFDcEQsV0FBQyxDQUFDO0FBQ0osU0FBQyxNQUFNO0FBQ0xnOEYsaUJBQU8sQ0FBQzE5RyxPQUFPLENBQUUyOUcsTUFBZ0IsSUFBSTtBQUNuQyxtQkFBT253QyxLQUFLLENBQUNtd0MsTUFBTSxDQUFDbCtGLEtBQUssQ0FBQ2pmLEVBQUUsQ0FBQztBQUMvQixXQUFDLENBQUM7QUFDSjtBQUNBLGVBQU8sSUFBSTtBQUNiLE9BQUMsQ0FBQztNQUNGLElBQUksQ0FBQ3c3RyxlQUFlLENBQUNyN0QsR0FBRyxHQUFHbDlDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDOHBFLEtBQUssQ0FBQztBQUNqRDtBQUVBLFdBQU8sSUFBSSxDQUFDZ3dDLFVBQVUsRUFBRTtBQUMxQjtFQUVRQyxjQUFjQSxDQUFDejlGLElBQWM7QUFDbkMsUUFBSSxJQUFJLENBQUNnOEYsZUFBZSxDQUFDaHJDLEdBQUcsQ0FBQ2h4RCxJQUFJLENBQUNQLEtBQUssQ0FBQ2pmLEVBQUUsQ0FBQyxFQUFFO01BQzNDLElBQUksQ0FBQ3c3RyxlQUFlLENBQUNyN0QsR0FBRyxDQUFDcGhELElBQUksQ0FDM0IsR0FBRyxJQUFJLENBQUM4OEcsR0FBRyxDQUFDM3NGLGFBQWEsRUFBRSxDQUFDdEMscUJBQXFCLENBQUNwTixJQUFJLENBQUMsQ0FDeEQ7QUFDSDtBQUNBLFdBQU8sSUFBSTtBQUNiO0FBRU80OUYsZ0JBQWNBLENBQUNDLElBQWtCLEVBQUVuQixLQUFLLEdBQUcsSUFBSTtBQUNwRCxRQUFJbUIsSUFBSSxDQUFDbDlHLElBQUksS0FBSyxRQUFRLEVBQUU7TUFDMUIsSUFBSSxDQUFDczdHLHNCQUFzQixHQUFHLElBQUk7QUFDbEMsYUFBTyxJQUFJLENBQUM2QixxQkFBcUIsQ0FBQ0QsSUFBMkIsRUFBRW5CLEtBQUssQ0FBQztBQUN2RTtBQUNBLFFBQUltQixJQUFJLENBQUNsOUcsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUMxQixJQUFJLENBQUN1N0csdUJBQXVCLEdBQUcsSUFBSTtBQUNuQyxhQUFPLElBQUksQ0FBQzZCLG9CQUFvQixDQUFDRixJQUEwQixFQUFFbkIsS0FBSyxDQUFDO0FBQ3JFO0lBQ0EsT0FBTyxJQUFJLENBQUNiLGNBQWM7QUFDNUI7QUFFUWlDLHVCQUFxQkEsQ0FBQ3ByQyxPQUE0QixFQUFFZ3FDLEtBQWM7QUFDeEUsUUFBSSxDQUFDUix1QkFBdUIsR0FBRyxJQUFJQSx1QkFBdUIsRUFBRTtBQUM1RCxRQUFJLENBQUNBLHVCQUF1QixDQUFDOEIsV0FBVyxHQUFHdHJDLE9BQU87SUFFbEQsTUFBTXVyQyxPQUFPLEdBQUd2ckMsT0FBTyxDQUFDdXJDLE9BQU8sSUFBSXZyQyxPQUFPLENBQUMzb0UsR0FBRztJQUM5QyxNQUFNbTBHLE9BQU8sR0FBR3hyQyxPQUFPLENBQUN3ckMsT0FBTyxJQUFJeHJDLE9BQU8sQ0FBQzVvRSxHQUFHO0FBRTlDOztBQUVHO0FBQ0g7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFHRztJQUNILE1BQU1xMEcsV0FBVyxHQUEyQixFQUFFO0FBQzlDLFNBQUssSUFBSXoyRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdnckUsT0FBTyxDQUFDRixXQUFXLENBQUNqckUsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtNQUNuRCxJQUFJeTJHLFdBQVcsQ0FBQ3pyQyxPQUFPLENBQUNGLFdBQVcsQ0FBQzlxRSxDQUFDLENBQUMsQ0FBQ2xILEVBQUUsQ0FBQyxFQUFFO0FBQzFDO0FBQ0Y7QUFDQSxVQUNFa3lFLE9BQU8sQ0FBQ0YsV0FBVyxDQUFDOXFFLENBQUMsQ0FBQyxDQUFDcEYsS0FBSyxJQUFJMjdHLE9BQU8sSUFDdkN2ckMsT0FBTyxDQUFDRixXQUFXLENBQUM5cUUsQ0FBQyxDQUFDLENBQUNwRixLQUFLLElBQUk0N0csT0FBTyxFQUV2Q0MsV0FBVyxDQUFDenJDLE9BQU8sQ0FBQ0YsV0FBVyxDQUFDOXFFLENBQUMsQ0FBQyxDQUFDbEgsRUFBRSxDQUFDLEdBQUdreUUsT0FBTyxDQUFDRixXQUFXLENBQUM5cUUsQ0FBQyxDQUFDLENBQUNwRixLQUFLO0FBQ3pFO0lBRUEsTUFBTTg3RyxjQUFjLEdBQXFCLEVBQUU7SUFDM0MsTUFBTUMsV0FBVyxHQUFzQyxFQUFFO0FBRXpELFFBQUksQ0FBQ2hDLEdBQUcsQ0FBQzFyRixJQUFJLENBQUUzUSxJQUFjLElBQUk7TUFDL0IsSUFBSSxDQUFDQSxJQUFJLENBQUNQLEtBQUssQ0FBQzZOLE1BQU0sSUFBSSxJQUFJLENBQUMrdUYsR0FBRyxDQUFDdHNGLE1BQU0sQ0FBQy9QLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQ3E4RixHQUFHLENBQUNyc0YsYUFBYSxDQUFDaFEsSUFBSSxDQUFDLEVBQzdFLE9BQU8sSUFBSTtBQUViLFlBQU0yZ0MsR0FBRyxHQUFHLElBQUksQ0FBQzA3RCxHQUFHLENBQUMzc0YsYUFBYSxFQUFFLENBQUN0QyxxQkFBcUIsQ0FBQ3BOLElBQUksQ0FBQztNQUNoRSxNQUFNcytGLEdBQUcsR0FBR0gsV0FBVyxDQUFDbitGLElBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUNsZixFQUFFLENBQUM7TUFDMUMsSUFBSTg5RyxHQUFHLEtBQUtoN0csU0FBUyxFQUFFO0FBQ3JCODZHLHNCQUFjLENBQUM3K0csSUFBSSxDQUFDLEdBQUdvaEQsR0FBRyxDQUFDO0FBQzdCLE9BQUMsTUFBTTtRQUNMMDlELFdBQVcsQ0FBQzkrRyxJQUFJLENBQUM7VUFDZm9oRCxHQUFHO1VBQ0hyK0MsS0FBSyxFQUFFLENBQUNnOEcsR0FBRyxHQUFHTCxPQUFPLEtBQUtDLE9BQU8sR0FBR0QsT0FBTztBQUM1QyxVQUFDO0FBQ0o7QUFDQSxhQUFPLElBQUk7QUFDYixLQUFDLENBQUM7QUFFRixRQUFJLENBQUMvQix1QkFBdUIsQ0FBQ21DLFdBQVcsR0FBR0EsV0FBVztBQUN0RCxRQUFJLENBQUNuQyx1QkFBdUIsQ0FBQ2tDLGNBQWMsR0FBR0EsY0FBYztBQUM1RCxRQUFJLENBQUNsQyx1QkFBdUIsQ0FBQ1EsS0FBSyxHQUFHQSxLQUFLO0FBQzFDLFFBQUksQ0FBQ1IsdUJBQXVCLENBQUNpQyxXQUFXLEdBQUdBLFdBQVc7QUFDdEQsV0FBTyxJQUFJLENBQUNYLFVBQVUsRUFBRTtBQUMxQjtBQUVRTyxzQkFBb0JBLENBQUNRLFVBQThCLEVBQUU3QixLQUFjO0FBQ3pFLFFBQUksQ0FBQ1Qsc0JBQXNCLEdBQUcsSUFBSUEsc0JBQXNCLEVBQUU7QUFDMUQsUUFBSSxDQUFDQSxzQkFBc0IsQ0FBQytCLFdBQVcsR0FBR08sVUFBVTtJQUVwRCxNQUFNQyxnQkFBZ0IsR0FBcUMsRUFBRTtBQUM3RCxTQUFLLE1BQU1DLEVBQUUsSUFBSUYsVUFBVSxDQUFDL3JDLFdBQVcsRUFBRTtNQUN2QyxNQUFNa3NDLEdBQUcsR0FBR0MsR0FBRyxDQUFDRixFQUFFLENBQUNuOEcsS0FBSyxDQUFDO0FBQ3pCLFlBQU1zOEcsS0FBSyxHQUFtQztBQUM1QyxXQUFHSCxFQUFFO0FBQ0x0OUcsYUFBSyxFQUFFLElBQUl5RyxLQUFLLENBQUM4MkcsR0FBRyxDQUFDO0FBQ3JCLzlELFdBQUcsRUFBRSxFQUFFO0FBQ1BrK0QsYUFBSyxFQUFFO09BQ1I7QUFDRDtBQUNBRCxXQUFLLENBQUNDLEtBQUssR0FBRyxFQUFFO0FBQ2hCLFdBQUssSUFBSW4zRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcrMkcsRUFBRSxDQUFDenRDLEdBQUcsQ0FBQ3pwRSxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO1FBQ3RDazNHLEtBQUssQ0FBQ0MsS0FBSyxDQUFDSixFQUFFLENBQUN6dEMsR0FBRyxDQUFDdHBFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUM1QjtBQUNBODJHLHNCQUFnQixDQUFDai9HLElBQUksQ0FBQ3EvRyxLQUFLLENBQUM7QUFDOUI7SUFDQSxNQUFNMzRGLFdBQVcsR0FBRzlpQixNQUFNLENBQUNrRSwyQkFBMkIsQ0FDcERtM0csZ0JBQWdCLENBQUMzaEcsR0FBRyxDQUFFbW5CLENBQUMsSUFBS0EsQ0FBQyxDQUFDN2lDLEtBQUssQ0FBQ3FwQyxNQUFNLEVBQUUsQ0FBQyxDQUM5QztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQSxNQUFNczBFLGNBQWMsR0FBbUMsRUFBRTtBQUN6RCxRQUFJLENBQUN6QyxHQUFHLENBQUMxckYsSUFBSSxDQUFFM1EsSUFBYyxJQUFJO01BQy9CLElBQUksQ0FBQ0EsSUFBSSxDQUFDUCxLQUFLLENBQUM2TixNQUFNLElBQUksSUFBSSxDQUFDK3VGLEdBQUcsQ0FBQ3RzRixNQUFNLENBQUMvUCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUNxOEYsR0FBRyxDQUFDcnNGLGFBQWEsQ0FBQ2hRLElBQUksQ0FBQyxFQUFFO0FBQy9FLGVBQU8sSUFBSTtBQUNiO0FBRUEsWUFBTXkrRixFQUFFLEdBQUdELGdCQUFnQixDQUFDNXdGLElBQUksQ0FBRW9XLENBQWlDLElBQUk7UUFDckUsT0FBT0EsQ0FBQyxDQUFDNjZFLEtBQUssQ0FBQzcrRixJQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDbGYsRUFBRSxDQUFDO0FBQ25DLE9BQUMsQ0FBQztBQUNGLFlBQU1rOUcsT0FBTyxHQUFHLElBQUksQ0FBQ3JCLEdBQUcsQ0FBQzNzRixhQUFhLEVBQUUsQ0FBQ3JDLHlCQUF5QixDQUFDck4sSUFBSSxDQUFDO01BQ3hFLElBQUksQ0FBQ3krRixFQUFFLEVBQUU7UUFDUGYsT0FBTyxDQUFDMTlHLE9BQU8sQ0FDWjI5RyxNQUFNLElBQ0ptQixjQUFjLENBQUNuQixNQUFNLENBQUNsK0YsS0FBSyxDQUFDaUMsVUFBVSxDQUFDRSxVQUFVLENBQUNwaEIsRUFBRSxDQUFDLEdBQ3BEbTlHLE1BQU0sQ0FBQ2wrRixLQUFLLENBQUNpQyxVQUFXLENBQzdCO0FBRUQsZUFBTyxJQUFJO0FBQ2I7TUFDQSxNQUFNaS9CLEdBQUcsR0FBMEIsRUFBRTtBQUVyQys4RCxhQUFPLENBQUMxOUcsT0FBTyxDQUFFc0MsS0FBZSxJQUFJO0FBQ2xDLFlBQUksSUFBSSxDQUFDKzVHLEdBQUcsQ0FBQzNzRixhQUFhLEVBQUUsQ0FBQy9CLGVBQWUsQ0FBQ3JyQixLQUFLLENBQUMsS0FBSzBkLElBQUksRUFBRTtVQUM1RDJnQyxHQUFHLENBQUNwaEQsSUFBSSxDQUFDK0MsS0FBSyxDQUFDbWQsS0FBSyxDQUFDaUMsVUFBVSxDQUFDO0FBQ2hDO1VBQ0EsT0FBT285RixjQUFjLENBQUN4OEcsS0FBSyxDQUFDbWQsS0FBSyxDQUFDaUMsVUFBVSxDQUFDRSxVQUFVLENBQUNwaEIsRUFBRSxDQUFDO0FBQzdEO0FBQ0YsT0FBQyxDQUFDO0FBRUZpK0csUUFBRSxDQUFDOTlELEdBQUcsQ0FBQ3BoRCxJQUFJLENBQUMsR0FBR29oRCxHQUFHLENBQUM7QUFDbkIsYUFBTyxJQUFJO0FBQ2IsS0FBQyxDQUFDO0FBRUYsVUFBTXk5RCxjQUFjLEdBQXFCMzZHLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDbzdHLGNBQWMsQ0FBQztBQUN0RTtBQUNBLFNBQUssTUFBTUwsRUFBRSxJQUFJRCxnQkFBZ0IsRUFBRTtBQUNqQztBQUNBO0FBQ0E7TUFDQSxPQUFPQyxFQUFFLENBQUNJLEtBQUs7QUFDakI7QUFDQSxRQUFJLENBQUM1QyxzQkFBc0IsQ0FBQ29DLFdBQVcsR0FBR0csZ0JBQWdCO0FBQzFELFFBQUksQ0FBQ3ZDLHNCQUFzQixDQUFDaDJGLFdBQVcsR0FBR0EsV0FBVztBQUNyRCxRQUFJLENBQUNnMkYsc0JBQXNCLENBQUNtQyxjQUFjLEdBQUdBLGNBQWM7QUFDM0QsUUFBSSxDQUFDbkMsc0JBQXNCLENBQUNTLEtBQUssR0FBR0EsS0FBSztBQUN6QyxXQUFPLElBQUksQ0FBQ2MsVUFBVSxFQUFFO0FBQzFCO0FBRU91QixtQkFBaUJBLEdBQUE7QUFDdEIsUUFBSSxJQUFJLENBQUM3Qyx1QkFBdUIsSUFBSSxJQUFJLENBQUNELHNCQUFzQixFQUFFO01BQy9ELElBQUksQ0FBQ0Esc0JBQXNCLEdBQUcsSUFBSTtNQUNsQyxJQUFJLENBQUNDLHVCQUF1QixHQUFHLElBQUk7QUFDbkMsYUFBTyxJQUFJLENBQUNzQixVQUFVLEVBQUU7QUFDMUI7SUFDQSxPQUFPLElBQUksQ0FBQzNCLGNBQWM7QUFDNUI7RUFFT21ELG1CQUFtQkEsQ0FDeEIvbEYsTUFBZ0Q7QUFFaEQsUUFBSSxDQUFDa2pGLG1CQUFtQixHQUFHLElBQUlBLG1CQUFtQixFQUFFO0FBQ3BEO0lBQ0EsSUFBSSxDQUFDRCx1QkFBdUIsR0FBRyxJQUFJO0lBQ25DLElBQUksQ0FBQ0Qsc0JBQXNCLEdBQUcsSUFBSTtBQUVsQyxVQUFNZ0QsV0FBVyxHQUtYaG1GLE1BQU0sQ0FBQ3BjLEdBQUcsQ0FBRTdVLENBQUMsSUFBSTtNQUNyQixPQUFPO0FBQUUsV0FBR0EsQ0FBQztBQUFFeWxCLGFBQUssRUFBRSxFQUFFO0FBQUVrekIsV0FBRyxFQUFFO09BQUk7QUFDckMsS0FBQyxDQUFDO0FBRUYsU0FBSyxNQUFNM1osS0FBSyxJQUFJaTRFLFdBQVcsRUFBRTtBQUMvQixXQUFLLElBQUl2M0csQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHcy9CLEtBQUssQ0FBQ3lwQyxTQUFTLENBQUNscEUsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtBQUMvQyxjQUFNK2xCLEtBQUssR0FBRyxJQUFJLENBQUM0dUYsR0FBRyxDQUFDM3VGLE1BQU0sQ0FBQ3NaLEtBQUssQ0FBQ3lwQyxTQUFTLENBQUMvb0UsQ0FBQyxDQUFDLENBQUM7QUFDakQsWUFBSStsQixLQUFLLEVBQUU7QUFDVHVaLGVBQUssQ0FBQ3ZaLEtBQUssQ0FBQ2x1QixJQUFJLENBQUMsR0FBR2t1QixLQUFLLENBQUM7QUFDMUJBLGVBQUssQ0FBQ3p0QixPQUFPLENBQUVnZ0IsSUFBYyxJQUFJO1lBQy9CLE1BQU1rL0YsUUFBUSxHQUFHLElBQUksQ0FBQzdDLEdBQUcsQ0FBQzNzRixhQUFhLEVBQUUsQ0FDdENyQyx5QkFBeUIsQ0FBQ3JOLElBQUksQ0FBQyxDQUMvQm5ELEdBQUcsQ0FBRThnRyxNQUFNLElBQUtBLE1BQU0sQ0FBQ2wrRixLQUFLLENBQUNpQyxVQUFVLENBQUM7WUFDM0MsSUFBSXc5RixRQUFRLEVBQUVsNEUsS0FBSyxDQUFDMlosR0FBRyxDQUFDcGhELElBQUksQ0FBQyxHQUFHMi9HLFFBQVEsQ0FBQztBQUMzQyxXQUFDLENBQUM7QUFDSjtBQUNGO0FBQ0Y7QUFFQSxRQUFJLENBQUMvQyxtQkFBbUIsQ0FBQ2xqRixNQUFNLEdBQUdnbUYsV0FBVztJQUM3QyxNQUFNaDVGLFdBQVcsR0FBRzlpQixNQUFNLENBQUNrRSwyQkFBMkIsQ0FDcEQ0eEIsTUFBTSxDQUFDcGMsR0FBRyxDQUFFN1UsQ0FBQyxJQUFLLElBQUlKLEtBQUssQ0FBQ0ksQ0FBQyxDQUFDN0csS0FBSyxDQUFDLENBQUNxcEMsTUFBTSxFQUFFLENBQUMsQ0FDL0M7QUFDRCxRQUFJLENBQUMyeEUsbUJBQW1CLENBQUNsMkYsV0FBVyxHQUFHQSxXQUFXO0FBQ2xELFdBQU8sSUFBSSxDQUFDdTNGLFVBQVUsRUFBRTtBQUMxQjtBQUVPMkIsd0JBQXNCQSxHQUFBO0lBQzNCLElBQUksQ0FBQ2hELG1CQUFtQixHQUFHLElBQUk7QUFDL0IsV0FBTyxJQUFJLENBQUNxQixVQUFVLEVBQUU7QUFDMUI7QUFFTzRCLGNBQVlBLEdBQUE7QUFDakIsUUFBSSxDQUFDcEQsZUFBZSxHQUFHLElBQUlBLGVBQWUsRUFBRTtJQUM1QyxJQUFJLENBQUNDLHNCQUFzQixHQUFHLElBQUk7SUFDbEMsSUFBSSxDQUFDQyx1QkFBdUIsR0FBRyxJQUFJO0lBQ25DLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUcsSUFBSTtJQUMvQixJQUFJLENBQUNKLFFBQVEsR0FBR3o0RyxTQUFTO0FBQ3pCLFFBQUksQ0FBQ2c1RyxRQUFRLENBQUN2dUMsY0FBYyxFQUFFO0FBQzlCLFFBQUksQ0FBQyt0QyxxQkFBcUIsR0FBRyxFQUFFO0FBQy9CLFFBQUksQ0FBQ3RzRCxNQUFNLENBQUNzNUIsYUFBYSxDQUFDcG5GLFdBQVcsQ0FBQ2tvRixZQUFZLEdBQUdsb0YsV0FBVyxDQUFDNnNGLE9BQU8sQ0FBQztJQUN6RSxJQUFJLENBQUMzdUYsSUFBSSxDQUFDa0IsV0FBVyxDQUFDdStHLGlCQUFpQixFQUFFLElBQUksQ0FBQ3ZELHFCQUFxQixDQUFDO0FBQ3BFLFdBQU8sSUFBSTtBQUNiO0FBRVEwQixZQUFVQSxHQUFBOztJQUNoQixJQUFJLENBQUNodUQsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDMWEsY0FBYyxFQUFFO0FBQzFDLFFBQUksQ0FBQyt0QyxxQkFBcUIsR0FBRyxFQUFFO0FBRS9CO0lBQ0EsSUFBSSxJQUFJLENBQUNHLHNCQUFzQixFQUFFO0FBQy9CLFVBQUksQ0FBQ0gscUJBQXFCLENBQUN1QyxXQUFXLEdBQUcsRUFBRTtNQUMzQyxJQUFJMzJHLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDVixLQUFLLE1BQU1zL0IsS0FBSyxJQUFJLElBQUksQ0FBQ2kxRSxzQkFBc0IsQ0FBQ29DLFdBQVcsRUFBRTtBQUMzRDMyRyxTQUFDLEVBQUU7UUFDSCxJQUFJLENBQUM0MEcsUUFBUSxDQUFDL3VDLFdBQVcsQ0FBQ3ZtQyxLQUFLLENBQUMyWixHQUFHLEVBQUU7VUFDbkNyNkIsVUFBVSxFQUFFcEgsa0JBQWtCLENBQUN1SCxPQUFPO1VBQ3RDSyxTQUFTLEVBQUVwZixDQUFDLEdBQUcsSUFBSSxDQUFDdTBHLHNCQUFzQixDQUFDb0MsV0FBVyxDQUFDOTJHLE1BQU07VUFDN0R3ZixjQUFjLEVBQUVpZ0IsS0FBSyxDQUFDN2xDLEtBQUs7QUFDM0I4a0IscUJBQVcsRUFBRSxJQUFJLENBQUNnMkYsc0JBQXNCLENBQUNoMkY7QUFDMUMsVUFBQztBQUNGLFlBQUksQ0FBQzYxRixxQkFBcUIsQ0FBQ3VDLFdBQVcsQ0FBQzkrRyxJQUFJLENBQUM7VUFDMUMrQyxLQUFLLEVBQUUwa0MsS0FBSyxDQUFDMWtDLEtBQUs7QUFDbEJuQixlQUFLLEVBQUU2bEMsS0FBSyxDQUFDN2xDLEtBQUssQ0FBQ20rRyxZQUFZLEVBQUU7VUFDakN0dUMsR0FBRyxFQUFFaHFDLEtBQUssQ0FBQ2dxQztBQUNaLFVBQUM7QUFDRixZQUFJLElBQUksQ0FBQ2lyQyxzQkFBc0IsQ0FBQytCLFdBQVcsRUFDekMsSUFBSSxDQUFDbEMscUJBQXFCLENBQUN5RCxtQkFBbUIsR0FDNUMsSUFBSSxDQUFDdEQsc0JBQXNCLENBQUMrQixXQUFXLENBQUMvc0YsR0FBRztBQUNqRDtBQUNGO0FBQ0E7SUFDQSxJQUFJLElBQUksQ0FBQ2lyRix1QkFBdUIsRUFBRTtNQUNoQyxLQUFLLE1BQU1sMUUsS0FBSyxJQUFJLElBQUksQ0FBQ2sxRSx1QkFBdUIsQ0FBQ21DLFdBQVcsRUFBRTtRQUM1RCxJQUFJLENBQUMvQixRQUFRLENBQUMvdUMsV0FBVyxDQUFDdm1DLEtBQUssQ0FBQzJaLEdBQUcsRUFBRTtVQUNuQ3I2QixVQUFVLEVBQUVwSCxrQkFBa0IsQ0FBQ3NILFFBQVE7VUFDdkNNLFNBQVMsRUFBRWtnQixLQUFLLENBQUMxa0M7QUFDbEIsVUFBQztBQUNKO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFFQSxJQUFJLENBQUN3NUcscUJBQXFCLENBQUN5RCxtQkFBbUIsR0FDNUMsSUFBSSxDQUFDckQsdUJBQXVCLENBQUM4QixXQUFXLENBQUMvc0YsR0FBRztBQUM5QyxVQUFJLENBQUM2cUYscUJBQXFCLENBQUNtQyxPQUFPLEdBQ2hDLElBQUksQ0FBQy9CLHVCQUF1QixDQUFDOEIsV0FBVyxDQUFDQyxPQUFPLElBQ2hELElBQUksQ0FBQy9CLHVCQUF1QixDQUFDOEIsV0FBVyxDQUFDajBHLEdBQUc7QUFDOUMsVUFBSSxDQUFDK3hHLHFCQUFxQixDQUFDb0MsT0FBTyxHQUNoQyxJQUFJLENBQUNoQyx1QkFBdUIsQ0FBQzhCLFdBQVcsQ0FBQ0UsT0FBTyxJQUNoRCxJQUFJLENBQUNoQyx1QkFBdUIsQ0FBQzhCLFdBQVcsQ0FBQ2wwRyxHQUFHO0FBRTlDLFVBQUksQ0FBQ2d5RyxxQkFBcUIsQ0FBQzBELGVBQWUsR0FBRy83RyxNQUFNLENBQUN1cUIsSUFBSSxDQUN0RCxJQUFJLENBQUNrdUYsdUJBQXVCLENBQUNpQyxXQUFXLENBQ3pDO0FBQ0g7SUFFQSxNQUFNc0IsVUFBVSxHQUNkLElBQUksQ0FBQ3pELGVBQWUsQ0FBQ29CLE9BQU8sS0FBS1IsT0FBTyxDQUFDQyxJQUFJLElBQzdDLElBQUksQ0FBQ2IsZUFBZSxDQUFDb0IsT0FBTyxLQUFLUixPQUFPLENBQUNHLElBQUk7SUFDL0MsTUFBTTJDLFNBQVMsR0FDYixJQUFJLENBQUMxRCxlQUFlLENBQUNvQixPQUFPLEtBQUtSLE9BQU8sQ0FBQ0ssT0FBTyxJQUNoRCxJQUFJLENBQUNqQixlQUFlLENBQUNvQixPQUFPLEtBQUtSLE9BQU8sQ0FBQ08sU0FBUztJQUVwRCxJQUFJc0MsVUFBVSxJQUFJQyxTQUFTLEVBQUU7TUFDM0IsSUFBSSxDQUFDcEQsUUFBUSxDQUFDL3VDLFdBQVcsQ0FBQyxJQUFJLENBQUN5dUMsZUFBZSxDQUFDcjdELEdBQUcsRUFBRTtBQUNsRHI2QixrQkFBVSxFQUFFLElBQUksQ0FBQzAxRixlQUFlLENBQUNVLEtBQUssR0FDbEN4OUYsa0JBQWtCLENBQUNxSCxLQUFLLEdBQ3hCckgsa0JBQWtCLENBQUN3SDtBQUN4QixRQUFDO0FBRUYsVUFBSSs0RixVQUFVLEVBQ1osSUFBSSxDQUFDM0QscUJBQXFCLENBQUM2RCxhQUFhLEdBQUdsOEcsTUFBTSxDQUFDdXFCLElBQUksQ0FBQyxJQUFJLENBQUNndUYsZUFBZSxDQUFDaHJDLEdBQUcsQ0FBQztBQUNsRixVQUFJMHVDLFNBQVMsRUFDWCxJQUFJLENBQUM1RCxxQkFBcUIsQ0FBQzBELGVBQWUsR0FBRy83RyxNQUFNLENBQUN1cUIsSUFBSSxDQUN0RCxJQUFJLENBQUNndUYsZUFBZSxDQUFDaHJDLEdBQUcsQ0FDekI7QUFDTDtJQUVBLE1BQU1vdEMsY0FBYyxHQUNsQixFQUFBOWlHLEVBQUEsT0FBSSxDQUFDMmdHLHNCQUFzQiwwQ0FBRW1DLGNBQWMsTUFDM0MsQ0FBQXQrRixFQUFBLE9BQUksQ0FBQ284Rix1QkFBdUIsTUFBRSxRQUFBcDhGLEVBQUEsdUJBQUFBLEVBQUEsQ0FBQXMrRixjQUFjO0lBRTlDLElBQUl3QixnQkFBZ0IsR0FBRyxLQUFLO0lBQzVCLElBQUksSUFBSSxDQUFDM0Qsc0JBQXNCLEVBQzdCMkQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDM0Qsc0JBQXNCLENBQUNTLEtBQUs7SUFDdEQsSUFBSSxJQUFJLENBQUNSLHVCQUF1QixFQUM5QjBELGdCQUFnQixHQUFHLElBQUksQ0FBQzFELHVCQUF1QixDQUFDUSxLQUFLO0FBRXZELFFBQUkwQixjQUFjLEVBQUU7QUFDbEIsVUFBSSxDQUFDOUIsUUFBUSxDQUFDL3VDLFdBQVcsQ0FBQzZ3QyxjQUFjLEVBQUU7UUFDeEM5M0YsVUFBVSxFQUFFczVGLGdCQUFnQixHQUN4QjFnRyxrQkFBa0IsQ0FBQ3FILEtBQUssR0FDeEJySCxrQkFBa0IsQ0FBQ3dILE1BQU07QUFDOUIsUUFBQztBQUNKO0lBRUEsSUFBSSxJQUFJLENBQUN5MUYsbUJBQW1CLEVBQUU7QUFDNUIsVUFBSSxDQUFDTCxxQkFBcUIsQ0FBQytELGVBQWUsR0FBRyxFQUFFO01BQy9DLElBQUkxckYsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNWLEtBQUssTUFBTTZTLEtBQUssSUFBSSxJQUFJLENBQUNtMUUsbUJBQW1CLENBQUNsakYsTUFBTSxFQUFFO0FBQ25EOUUsU0FBQyxFQUFFO1FBQ0gsSUFBSSxDQUFDbW9GLFFBQVEsQ0FBQy91QyxXQUFXLENBQUN2bUMsS0FBSyxDQUFDMlosR0FBRyxFQUFFO1VBQ25DcjZCLFVBQVUsRUFBRXBILGtCQUFrQixDQUFDdUgsT0FBTztVQUN0Q0ssU0FBUyxFQUFFcU4sQ0FBQyxHQUFHLElBQUksQ0FBQ2dvRixtQkFBbUIsQ0FBQ2xqRixNQUFNLENBQUMxeEIsTUFBTTtBQUNyRHdmLHdCQUFjLEVBQUUsSUFBSW5mLEtBQUssQ0FBQ28vQixLQUFLLENBQUM3bEMsS0FBSyxDQUFDO0FBQ3RDOGtCLHFCQUFXLEVBQUUsSUFBSSxDQUFDazJGLG1CQUFtQixDQUFDbDJGO0FBQ3ZDLFVBQUM7QUFFRixZQUFJLENBQUM2MUYscUJBQXFCLENBQUMrRCxlQUFlLENBQUN0Z0gsSUFBSSxDQUFDO1VBQzlDeXhFLEdBQUcsRUFBRWhxQyxLQUFLLENBQUN5cEMsU0FBUztBQUNwQnR2RSxlQUFLLEVBQUU2bEMsS0FBSyxDQUFDN2xDLEtBQUs7QUFDbkIsVUFBQztBQUNKO0FBQ0Y7QUFFQSxRQUFJLENBQUNtN0csUUFBUSxDQUFDOXNELE1BQU0sQ0FBQ3M1QixhQUFhLENBQ2hDcG5GLFdBQVcsQ0FBQ2tvRixZQUFZLEdBQUdsb0YsV0FBVyxDQUFDNnNGLE9BQU8sR0FBRzdzRixXQUFXLENBQUM4c0YsZUFBZSxDQUM3RTtJQUNELElBQUksQ0FBQzV1RixJQUFJLENBQUNrQixXQUFXLENBQUN1K0csaUJBQWlCLEVBQUUsSUFBSSxDQUFDdkQscUJBQXFCLENBQUM7SUFDcEUsT0FBTyxJQUFJLENBQUNBLHFCQUFxQjtBQUNuQztFQUdRdUIsZ0JBQWdCQSxDQUFDNXNDLFNBQW1CO0lBQzFDLE1BQU1xdkMsTUFBTSxHQUFhLEVBQUU7QUFDM0IsVUFBTTd1RixHQUFHLEdBQUd3L0MsU0FBUyxDQUFDc3ZDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFFL0IsSUFBSSxJQUFJLENBQUMzRCxPQUFPLENBQUNuckYsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDbXJGLE9BQU8sQ0FBQ25yRixHQUFHLENBQUMsQ0FBQzFwQixNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUM2MEcsT0FBTyxDQUFDbnJGLEdBQUcsQ0FBQztBQUUzRSxTQUFLLElBQUl2cEIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHK29FLFNBQVMsQ0FBQ2xwRSxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO0FBQ3pDLFlBQU0rbEIsS0FBSyxHQUFHLElBQUksQ0FBQzR1RixHQUFHLENBQUMzdUYsTUFBTSxDQUFDK2lELFNBQVMsQ0FBQy9vRSxDQUFDLENBQUMsQ0FBQztNQUMzQyxJQUFJLENBQUMrbEIsS0FBSyxFQUFFO0FBQ1osWUFBTXpOLElBQUksR0FBR3lOLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDckIsWUFBTXUxQixPQUFPLEdBQUdoakMsSUFBSSxDQUFDbU4sR0FBRyxDQUFFbk4sSUFBSSxJQUFJO0FBQ2hDLGVBQU9BLElBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLEtBQUtwYyxTQUFTO0FBQ3JDLE9BQUMsQ0FBQztBQUNGLFlBQU0wOEcsTUFBTSxHQUFHaDlELE9BQU8sQ0FBQ25tQyxHQUFHLENBQUVtRCxJQUFJLElBQUtBLElBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUNsZixFQUFFLENBQUM7QUFDdkRzL0csWUFBTSxDQUFDdmdILElBQUksQ0FBQyxHQUFHeWdILE1BQU0sQ0FBQztBQUN0QixVQUFJLENBQUM1RCxPQUFPLENBQUNwOEYsSUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ2xmLEVBQUUsQ0FBQyxHQUFHdy9HLE1BQU07QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsUUFBSSxDQUFDNUQsT0FBTyxDQUFDbnJGLEdBQUcsQ0FBQyxHQUFHNnVGLE1BQU07QUFDMUIsV0FBT0EsTUFBTTtBQUNmO0FBQ0Q7QUFFRCxJQUFLbEQsT0FNSjtBQU5ELFdBQUtBLE9BQU87RUFDVkEsT0FBQSxDQUFBQSxPQUFBLHVCQUFTO0VBQ1RBLE9BQUEsQ0FBQUEsT0FBQSx1QkFBUztFQUNUQSxPQUFBLENBQUFBLE9BQUEsNkJBQVk7RUFDWkEsT0FBQSxDQUFBQSxPQUFBLGlDQUFjO0VBQ2RBLE9BQUEsQ0FBQUEsT0FBQSx1QkFBUztBQUNYLENBQUMsRUFOSUEsT0FBTyxLQUFQQSxPQUFPLEdBTVg7QUFFRCxNQUFNWixlQUFlO0FBQXJCOThHLGdCQUFBO0FBQ1MsU0FBQWsrRyxPQUFPLEdBQUdSLE9BQU8sQ0FBQy91RyxJQUFJO0lBQ3RCLElBQUssQ0FBQTZ1RyxLQUFBLEdBQUcsSUFBSTtBQUNaLFFBQUcsQ0FBQTFyQyxHQUFBLEdBQTZCLEVBQUU7SUFDbEMsSUFBRyxDQUFBcndCLEdBQUEsR0FBcUIsRUFBRTtBQU9uQztBQUxTNFgsT0FBS0EsR0FBQTtJQUNWLElBQUksQ0FBQ21rRCxLQUFLLEdBQUcsSUFBSTtBQUNqQixRQUFJLENBQUMxckMsR0FBRyxHQUFHLEVBQUU7SUFDYixJQUFJLENBQUNyd0IsR0FBRyxHQUFHLEVBQUU7QUFDZjtBQUNEO0FBRUQsTUFBTXM3RCxzQkFBc0I7QUFBNUIvOEcsZ0JBQUE7SUFLUyxJQUFLLENBQUF3OUcsS0FBQSxHQUFHLElBQUk7QUFPckI7QUFOU25rRCxPQUFLQSxHQUFBO0lBQ1YsSUFBSSxDQUFDeWxELFdBQVcsR0FBRyxJQUFJO0lBQ3ZCLElBQUksQ0FBQ0ssV0FBVyxHQUFHLEVBQUU7SUFDckIsSUFBSSxDQUFDRCxjQUFjLEdBQUcsRUFBRTtJQUN4QixJQUFJLENBQUNuNEYsV0FBVyxHQUFHM2lCLFNBQVM7QUFDOUI7QUFDRDtBQVVELE1BQU00NEcsdUJBQXVCO0FBQTdCaDlHLGdCQUFBO0lBSVMsSUFBSyxDQUFBdzlHLEtBQUEsR0FBRyxJQUFJO0FBRXJCO0FBQUM7QUFPRCxNQUFNUCxtQkFBbUI7QUFBekJqOUcsZ0JBQUE7SUFDUyxJQUFNLENBQUErNUIsTUFBQSxHQUtQLEVBQUU7QUFLVjtBQUhTcy9CLE9BQUtBLEdBQUE7SUFDVixJQUFJLENBQUN0L0IsTUFBTSxHQUFHLEVBQUU7QUFDbEI7QUFDRDs7SUN2b0JXZ25GO0FBQVosV0FBWUEsWUFBWTtBQUN0QkEsY0FBQSxnQ0FBNEI7QUFDOUIsQ0FBQyxFQUZXQSxZQUFZLEtBQVpBLFlBQVksR0FFdkI7QUFNSyxNQUFPQyxnQkFBaUIsU0FBUTNyQyxTQUFTO0FBQS9DcjFFLGdCQUFBOztJQUNZLElBQVEsQ0FBQTQ5QyxRQUFBLEdBQVksSUFBSTtBQW9EMUIsUUFBVyxDQUFBcWpFLFdBQUEsR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBWSxDQUFBQyxZQUFBLEdBQUcsQ0FBQztBQUNoQixTQUFBQyxhQUFhLEdBQVksSUFBSTkyRyxPQUFPLEVBQUU7QUErQmhEO0VBbkZFLElBQVd2SSxPQUFPQSxHQUFBO0lBQ2hCLE9BQU8sSUFBSSxDQUFDODdDLFFBQVE7QUFDdEI7RUFDQSxJQUFXOTdDLE9BQU9BLENBQUNzQixLQUFjO0lBQy9CLElBQUksQ0FBQ3c2QyxRQUFRLEdBQUd4NkMsS0FBSztBQUN2QjtBQUVBO0VBQ0EsSUFBV2crRyxZQUFZQSxHQUFBO0FBQ3JCLFVBQU1yckYsTUFBTSxHQUFTLElBQUk1ckIsSUFBSSxFQUFFO0FBQy9CLFVBQU0wM0MsVUFBVSxHQUFHLElBQUkxM0MsSUFBSSxFQUFFO0FBQzdCLFVBQU0wMkMsT0FBTyxHQUFHLElBQUksQ0FBQ3lQLE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQy92QixPQUFPLENBQUMzVixVQUFVLEVBQUU7QUFDOUQsU0FBSyxJQUFJcjdDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3E0QyxPQUFPLENBQUN4NEMsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtBQUN2QyxZQUFNcUYsS0FBSyxHQUFHZ3pDLE9BQU8sQ0FBQ3I0QyxDQUFDLENBQUM7TUFDeEIsTUFBTWk1QyxHQUFHLEdBQUc1ekMsS0FBSyxDQUFDZ3NCLFdBQVcsQ0FBQy9iLEtBQUssRUFBRTtBQUNyQzJqQyxTQUFHLENBQUNoVSxJQUFJLENBQUMsQ0FBQ3hOLENBQUMsRUFBRWwzQixDQUFDLEtBQUk7QUFDaEIsZUFBT2szQixDQUFDLENBQUNsVyxVQUFVLEdBQUdoaEIsQ0FBQyxDQUFDZ2hCLFVBQVU7QUFDcEMsT0FBQyxDQUFDO0FBRUYsWUFBTXMrQyxZQUFZLEdBQUd4NkQsS0FBSyxDQUFDcXRCLGVBQWUsRUFBRTtNQUM1QyxJQUFJb3RDLEVBQUUsR0FBRyxDQUFDO1FBQ1JDLEVBQUUsR0FBRzltQixHQUFHLENBQUNwNUMsTUFBTTtNQUNqQixPQUFPaWdFLEVBQUUsR0FBR0MsRUFBRSxFQUFFO0FBQ2QsY0FBTW5yRCxHQUFHLEdBQUlrckQsRUFBRSxHQUFHQyxFQUFFLEtBQU0sQ0FBQztRQUMzQixJQUFJOW1CLEdBQUcsQ0FBQ3JrQyxHQUFHLENBQUMsQ0FBQzJNLFVBQVUsR0FBR3MrQyxZQUFZLENBQUNqN0QsTUFBTSxFQUFFazdELEVBQUUsR0FBR2xyRCxHQUFHLEdBQUcsQ0FBQyxNQUN0RG1yRCxFQUFFLEdBQUduckQsR0FBRztBQUNmO0FBRUEsWUFBTW9yRCxNQUFNLEdBQUdILFlBQVksQ0FBQ2o3RCxNQUFNO01BQ2xDLE1BQU1xN0QsSUFBSSxHQUFHSixZQUFZLENBQUNqN0QsTUFBTSxHQUFHaTdELFlBQVksQ0FBQ2g3RCxLQUFLO01BRXJELE9BQU9pN0QsRUFBRSxHQUFHN21CLEdBQUcsQ0FBQ3A1QyxNQUFNLEVBQUVpZ0UsRUFBRSxFQUFFLEVBQUU7QUFDNUIsY0FBTXptRCxDQUFDLEdBQUc0L0IsR0FBRyxDQUFDNm1CLEVBQUUsQ0FBQztBQUNqQixZQUFJem1ELENBQUMsQ0FBQ2tJLFVBQVUsSUFBSTArQyxJQUFJLEVBQUU7UUFDMUIsTUFBTUMsSUFBSSxHQUFHN21ELENBQUMsQ0FBQ2tJLFVBQVUsR0FBR2xJLENBQUMsQ0FBQ3NJLFVBQVU7UUFDeEMsSUFBSXRJLENBQUMsQ0FBQ2tJLFVBQVUsSUFBSXkrQyxNQUFNLElBQUlFLElBQUksSUFBSUQsSUFBSSxFQUFFO0FBQzFDOztBQUVzQztBQUN0QzVtQixvQkFBVSxDQUFDejFDLElBQUksQ0FBQ3lWLENBQUMsQ0FBQ3lJLElBQUksQ0FBQztVQUN2QnpJLENBQUMsQ0FBQ2EsVUFBVSxDQUFDSyxRQUFRLENBQUNvSSxTQUFTLElBQzdCdEosQ0FBQyxDQUFDYSxVQUFVLENBQUNLLFFBQVEsQ0FBQ0ssU0FBUyxJQUMvQnkrQixVQUFVLENBQUN4MUMsWUFBWSxDQUFDd1YsQ0FBQyxDQUFDYSxVQUFVLENBQUNLLFFBQVEsQ0FBQ29JLFNBQVMsQ0FBQztBQUMxRDRLLGdCQUFNLENBQUN0cUIsS0FBSyxDQUFDbzJDLFVBQVUsQ0FBQztBQUMxQjtBQUNGO0FBQ0Y7QUFDQSxXQUFPOXJCLE1BQU07QUFDZjtBQU1Pdy9DLGVBQWFBLEdBQUE7QUFDbEIsUUFBSSxDQUFDLElBQUksQ0FBQzMzQixRQUFRLEVBQUU7QUFFcEIsUUFBSSxJQUFJLENBQUNxakUsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO01BQ3pCLElBQUksQ0FBQ0ksT0FBTyxDQUFDLElBQUksQ0FBQ0osV0FBVyxFQUFFLElBQUksQ0FBQ0MsWUFBWSxDQUFDO0FBQ2pELFVBQUksQ0FBQ0QsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNGO0VBQ09LLFVBQVVBLENBQUNDLElBQVk7QUFDNUIsVUFBTUgsWUFBWSxHQUFHLElBQUksQ0FBQ0EsWUFBWTtJQUN0QyxNQUFNOTRHLElBQUksR0FBRzg0RyxZQUFZLENBQUNyMEcsT0FBTyxDQUFDLElBQUkxQyxPQUFPLEVBQUUsQ0FBQztJQUNoRCxJQUFJLENBQUM0MkcsV0FBVyxHQUFHTSxJQUFJO0FBQ3ZCLFFBQUksQ0FBQ0wsWUFBWSxHQUFHMzdHLElBQUksQ0FBQzIvQixJQUFJLENBQUM1OEIsSUFBSSxDQUFDd0MsQ0FBQyxHQUFHeEMsSUFBSSxDQUFDd0MsQ0FBQyxHQUFHeEMsSUFBSSxDQUFDeUMsQ0FBQyxHQUFHekMsSUFBSSxDQUFDeUMsQ0FBQyxHQUFHekMsSUFBSSxDQUFDMEMsQ0FBQyxHQUFHMUMsSUFBSSxDQUFDMEMsQ0FBQyxDQUFDO0FBQ2xGbzJHLGdCQUFZLENBQUMxMkcsU0FBUyxDQUFDLElBQUksQ0FBQ3kyRyxhQUFhLENBQUM7QUFDNUM7QUFFUUUsU0FBT0EsQ0FBQ0UsSUFBWSxFQUFFcnpHLEtBQWE7QUFDekMsVUFBTTI1QyxPQUFPLEdBQUcsSUFBSSxDQUFDeUksTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDdlgsVUFBVSxFQUFFO0FBQ3RELFVBQU03ekMsT0FBTyxHQUFHLElBQUk5ekIsT0FBTyxFQUFFO0FBQzdCLFNBQUssSUFBSXFVLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR21wQyxPQUFPLENBQUN4L0MsTUFBTSxFQUFFcVcsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsWUFBTWpTLE1BQU0sR0FBR283QyxPQUFPLENBQUNucEMsQ0FBQyxDQUFDLENBQUM0TCxJQUFJLENBQUM1ZixTQUFTLENBQUN5ekIsT0FBTyxDQUFDO01BQ2pELE1BQU0wckIsR0FBRyxHQUFHcDlDLE1BQU0sQ0FBQzZuQyxHQUFHLENBQUMsSUFBSSxDQUFDNnNFLGFBQWEsQ0FBQztNQUMxQ3QzRCxHQUFHLENBQUN2eEIsU0FBUyxFQUFFLENBQUNyRyxjQUFjLENBQUNzdkYsSUFBSSxHQUFHcnpHLEtBQUssQ0FBQztBQUU1QzI1QyxhQUFPLENBQUNucEMsQ0FBQyxDQUFDLENBQUMwdEIsWUFBWSxDQUFDeWQsR0FBRyxFQUFFemxELFNBQVMsRUFBRUEsU0FBUyxFQUFFQSxTQUFTLENBQUM7QUFDL0Q7QUFDQSxRQUFJLENBQUNrc0QsTUFBTSxDQUFDczVCLGFBQWEsQ0FBQ3BuRixXQUFXLENBQUNrb0YsWUFBWSxHQUFHbG9GLFdBQVcsQ0FBQzZzRixPQUFPLENBQUM7QUFDekUsUUFBSSxDQUFDM3VGLElBQUksQ0FBQ3FnSCxZQUFZLENBQUNTLE9BQU8sQ0FBQztBQUNqQztBQUNEOztBQ2xHRDtBQWVBOzs7QUFHRztBQUNXLE1BQU9DLGdCQUFnQjtBQWtEbkN6aEgsYUFBWUEsQ0FBQTBoSCxZQUEyQixFQUFFbDJGLElBQWU7SUE5QzlDLElBQVEsQ0FBQW0yRixRQUFBLEdBQUcsS0FBSztBQUdoQixRQUFlLENBQUFDLGVBQUEsR0FBK0IsRUFBRTtBQUNoRCxRQUE2QixDQUFBQyw2QkFBQSxHQUErQixFQUFFO0FBQzlELFFBQTJCLENBQUFDLDJCQUFBLEdBQW9DLEVBQUU7QUFDakUsUUFBZSxDQUFBQyxlQUFBLEdBQStCLEVBQUU7QUFDaEQsUUFBaUIsQ0FBQUMsaUJBQUEsR0FBb0MsRUFBRTtBQUN2RCxRQUFRLENBQUFDLFFBQUEsR0FBb0MsRUFBRTtJQUM5QyxJQUFlLENBQUFDLGVBQUEsR0FBRyxDQUFDO0lBQ25CLElBQWdCLENBQUFDLGdCQUFBLEdBQUcsQ0FBQztJQUN0QixJQUFhLENBQUFDLGFBQUEsR0FBRyxDQUFDO0lBRU4sS0FBQUMsb0JBQW9CLEdBRW5DO01BQ0ZseUIsTUFBTSxFQUFFLElBQUksQ0FBQ215QixZQUFZLENBQUN2bkUsSUFBSSxDQUFDLElBQUksQ0FBQztNQUNwQ3duRSxhQUFhLEVBQUUsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ3puRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2xEM3lCLFVBQVUsRUFBRSxJQUFJLENBQUNxNkYsZ0JBQWdCLENBQUMxbkUsSUFBSSxDQUFDLElBQUksQ0FBQztNQUM1QzF5QixJQUFJLEVBQUUsSUFBSSxDQUFDcTZGLFVBQVUsQ0FBQzNuRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2hDNG5FLEtBQUssRUFBRSxJQUFJLENBQUNELFVBQVUsQ0FBQzNuRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2pDNm5FLFVBQVUsRUFBRSxJQUFJLENBQUNGLFVBQVUsQ0FBQzNuRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ3RDOG5FLEtBQUssRUFBRSxJQUFJLENBQUNILFVBQVUsQ0FBQzNuRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2pDenlCLElBQUksRUFBRSxJQUFJLENBQUN3NkYsVUFBVSxDQUFDL25FLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDaEN2eUIsS0FBSyxFQUFFLElBQUksQ0FBQ3U2RixXQUFXLENBQUNob0UsSUFBSSxDQUFDLElBQUksQ0FBQztNQUNsQ3R5QixJQUFJLEVBQUUsSUFBSSxDQUFDdTZGLFVBQVUsQ0FBQ2pvRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2hDcnlCLFFBQVEsRUFBRSxJQUFJLENBQUN1NkYsY0FBYyxDQUFDbG9FLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDeENweUIsR0FBRyxFQUFFLElBQUksQ0FBQ3U2RixTQUFTLENBQUNub0UsSUFBSSxDQUFDLElBQUksQ0FBQztNQUM5Qm55QixTQUFTLEVBQUUsSUFBSSxDQUFDdTZGLGVBQWUsQ0FBQ3BvRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQzFDbHlCLEtBQUssRUFBRSxJQUFJLENBQUN1NkYsV0FBVyxDQUFDcm9FLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDbENqeUIsTUFBTSxFQUFFLElBQUksQ0FBQ3U2RixZQUFZLENBQUN0b0UsSUFBSSxDQUFDLElBQUksQ0FBQztNQUNwQ2h5QixHQUFHLEVBQUUsSUFBSSxDQUFDdTZGLFNBQVMsQ0FBQ3ZvRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQzlCL3hCLE9BQU8sRUFBRSxJQUFJLENBQUN1NkYsYUFBYSxDQUFDeG9FLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDdEN5b0UsYUFBYSxFQUFFLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMxb0UsSUFBSSxDQUFDLElBQUksQ0FBQztNQUNsRDl4QixJQUFJLEVBQUUsSUFBSSxDQUFDeTZGLFVBQVUsQ0FBQzNvRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2hDNG9FLFNBQVMsRUFBRSxJQUFJLENBQUNDLGVBQWUsQ0FBQzdvRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQzFDOG9FLHVCQUF1QixFQUFFLElBQUksQ0FBQ0MsNkJBQTZCLENBQUMvb0UsSUFBSSxDQUFDLElBQUksQ0FBQztNQUN0RWdwRSxhQUFhLEVBQUUsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ2pwRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2xEa3BFLG1CQUFtQixFQUFFLElBQUksQ0FBQ0MseUJBQXlCLENBQUNucEUsSUFBSSxDQUFDLElBQUksQ0FBQztNQUM5RG9wRSxVQUFVLEVBQUUsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ3JwRSxJQUFJLENBQUMsSUFBSSxDQUFDO01BQzVDN3hCLE1BQU0sRUFBRSxJQUFJLENBQUNtN0YsWUFBWSxDQUFDdHBFLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDcEN1cEUsZUFBUyxFQUFFO0tBQ1o7QUFFa0IsU0FBQUMsV0FBVyxHQUFHLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQztJQUczRCxJQUFJLENBQUM3QyxZQUFZLEVBQUU7QUFDakI3OUcsWUFBTSxDQUFDYSxJQUFJLENBQ1QscUhBQXFILENBQ3RIO0FBQ0g7SUFFQSxJQUFJLENBQUNnOUcsWUFBWSxHQUFHQSxZQUFZO0lBQ2hDLElBQUksQ0FBQzhDLGNBQWMsR0FBRyxDQUFDO0lBQ3ZCLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUcsR0FBRztJQUM5QixJQUFJLENBQUNqNUYsSUFBSSxHQUFHQSxJQUFJO0FBQ2xCO0FBRUE7Ozs7OztBQU1HO0VBQ0ksTUFBTTJoRCxRQUFRQSxDQUNuQnUzQyxTQUFpQixFQUNqQnA4RCxHQUFrQixFQUNsQnpuRCxRQUFpQyxFQUNqQ2lnQixJQUFBLEdBQXdCLElBQUk7SUFFNUIsSUFBSTtBQUNGO01BQ0EsSUFBSXduQyxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLEVBQUU7QUFDN0MsVUFBSUEsR0FBRyxDQUFDcThELFlBQVksRUFBRXI4RCxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUNzOEQsZ0JBQWdCLENBQUN0OEQsR0FBRyxDQUFDO01BRTVELE1BQU11OEQsMkJBQTJCLEdBQUcsRUFBRTtBQUV0QztBQUNBLFVBQUk1NkcsS0FBSyxDQUFDMG9DLE9BQU8sQ0FBQzJWLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLGFBQUssTUFBTW8rQyxPQUFPLElBQUlwK0MsR0FBRyxFQUFFO0FBQ3pCLGNBQUksT0FBT28rQyxPQUFPLEtBQUssUUFBUSxFQUFFLE1BQUs7QUFDdEMsY0FBSSxJQUFJLENBQUM4ZCxjQUFjLElBQUksSUFBSSxDQUFDQyxtQkFBbUIsRUFBRTtZQUNuRCxNQUFNLElBQUksQ0FBQ3QzQyxRQUFRLENBQUN1M0MsU0FBUyxFQUFFaGUsT0FBTyxFQUFFN2xHLFFBQVEsRUFBRWlnQixJQUFJLENBQUM7QUFDekQsV0FBQyxNQUFNO0FBQ0wsa0JBQU1na0csWUFBWSxHQUFHLElBQUksQ0FBQzMzQyxRQUFRLENBQUN1M0MsU0FBUyxFQUFFaGUsT0FBTyxFQUFFN2xHLFFBQVEsRUFBRWlnQixJQUFJLENBQUM7QUFDdEUrakcsdUNBQTJCLENBQUN4a0gsSUFBSSxDQUFDeWtILFlBQVksQ0FBQztBQUNoRDtBQUNGO0FBQ0EsWUFBSUQsMkJBQTJCLENBQUN4OEcsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUMxQyxjQUFJLENBQUNtOEcsY0FBYyxJQUFJSywyQkFBMkIsQ0FBQ3g4RyxNQUFNO0FBQ3pELGdCQUFNdEMsT0FBTyxDQUFDa29CLEdBQUcsQ0FBQzQyRiwyQkFBMkIsQ0FBQztBQUM5QyxjQUFJLENBQUNMLGNBQWMsSUFBSUssMkJBQTJCLENBQUN4OEcsTUFBTTtBQUMzRDtBQUNBO0FBQ0Y7QUFFQTtBQUNBLFVBQUksSUFBSSxDQUFDazhHLFdBQVcsQ0FBQzkvRyxRQUFRLENBQUMsSUFBSSxDQUFDNG9CLGNBQWMsQ0FBQ2k3QixHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3ZEO0FBQ0Y7QUFDQTtBQUNBLFVBQUksQ0FBQ0EsR0FBRyxDQUFDaG5ELEVBQUUsRUFBRTtBQUViLFlBQU15akgsU0FBUyxHQUFhLElBQUksQ0FBQ3Y1RixJQUFJLENBQUM2RSxLQUFLLENBQUM7QUFDMUMvdUIsVUFBRSxFQUFFLElBQUksQ0FBQzBqSCxTQUFTLENBQUMxOEQsR0FBRyxDQUFDO0FBQ3ZCOW5DLFdBQUcsRUFBRThuQyxHQUFHO0FBQ1JsNkIsY0FBTSxFQUFFLElBQUk7QUFDWm1DLGdCQUFRLEVBQUU7QUFDWCxRQUFDO01BRUYsSUFBSXpQLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDakI7UUFDQSxJQUFJLENBQUNnakMsT0FBTyxHQUFHLElBQUksQ0FBQ3Q0QixJQUFJLENBQUM2RSxLQUFLLENBQUM7QUFDN0IvdUIsWUFBRSxFQUFFb2pILFNBQVM7QUFDYjtBQUNBbGtHLGFBQUcsRUFBRTtBQUFFbGYsY0FBRSxFQUFFb2pILFNBQVM7WUFBRW4wRixRQUFRLEVBQUUsQ0FBQyszQixHQUFHO1dBQUc7QUFDdkNsNkIsZ0JBQU0sRUFBRSxJQUFJO0FBQ1ptQyxrQkFBUSxFQUFFO0FBQ1gsVUFBQztRQUNGLElBQUksQ0FBQy9FLElBQUksQ0FBQ3dGLFVBQVUsQ0FBQyxJQUFJLENBQUM4eUIsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQzUwQixPQUFPLENBQUM2MUYsU0FBUyxFQUFFLElBQUksQ0FBQ2poRSxPQUFPLENBQUM7QUFDdkMsT0FBQyxNQUFNO0FBQ0wsWUFBSSxDQUFDNTBCLE9BQU8sQ0FBQzYxRixTQUFTLEVBQUVqa0csSUFBSSxDQUFDO0FBQy9CO0FBRUE7QUFDQSxVQUFJLElBQUksQ0FBQ21rRyx5QkFBeUIsQ0FBQzM4RCxHQUFHLENBQUMsRUFBRTtRQUN2QyxJQUFJO0FBQ0YsZ0JBQU0sSUFBSSxDQUFDNDhELGFBQWEsQ0FBQzU4RCxHQUFHLEVBQUV5OEQsU0FBUyxDQUFDO0FBQ3hDO1NBQ0QsQ0FBQyxPQUFPNXZGLENBQUMsRUFBRTtBQUNWdHhCLGdCQUFNLENBQUNhLElBQUksQ0FDVCxDQUEyQyw4Q0FBSSxDQUFDMm9CLGNBQWMsQ0FDNURpN0IsR0FBRyxDQUNKLGFBQWFBLEdBQUcsQ0FBQ2huRCxFQUFFLENBQUUsR0FDdEI2ekIsQ0FBQyxDQUNGO0FBQ0g7QUFDRjtNQUVBLE1BQU1wQixNQUFNLEdBQWtCdTBCLEdBQUc7QUFFakM7QUFDQTtBQUNBLFVBQUk2OEQsWUFBWSxHQUFHLElBQUksQ0FBQ0MsZUFBZSxDQUFDcnhGLE1BQU0sQ0FBUTtBQUV0RCxVQUFJb3hGLFlBQVksRUFBRTtBQUNoQkosaUJBQVMsQ0FBQ3hrRyxLQUFLLENBQUM2TixNQUFNLEdBQUcsSUFBSTtBQUMvQixPQUFDLE1BQU07QUFDTDIyRixpQkFBUyxDQUFDeGtHLEtBQUssQ0FBQzZOLE1BQU0sR0FBRyxLQUFLO0FBQ2hDO0FBRUEsVUFBSSsyRixZQUFZLEVBQUU7QUFDaEIsWUFBSSxDQUFDbDdHLEtBQUssQ0FBQzBvQyxPQUFPLENBQUN3eUUsWUFBWSxDQUFDLEVBQUU7QUFDaENBLHNCQUFZLEdBQUcsTUFBTSxJQUFJLENBQUNQLGdCQUFnQixDQUFDTyxZQUFZLENBQUM7VUFDeEQsSUFBSSxDQUFDQSxZQUFZLENBQUNqa0csS0FBSyxFQUFFaWtHLFlBQVksQ0FBQ2prRyxLQUFLLEdBQUdvbkMsR0FBRyxDQUFDcG5DLEtBQUs7VUFDdkQsSUFBSTtBQUNGLGtCQUFNbWtHLFVBQVUsR0FBYSxJQUFJLENBQUM3NUYsSUFBSSxDQUFDNkUsS0FBSyxDQUFDO0FBQzNDL3VCLGdCQUFFLEVBQUUsSUFBSSxDQUFDMGpILFNBQVMsQ0FBQ0csWUFBWSxDQUFDO0FBQ2hDM2tHLGlCQUFHLEVBQUUya0csWUFBWTtBQUNqQi8yRixvQkFBTSxFQUFFLEtBQUs7QUFDYm1DLHNCQUFRLEVBQUU7QUFDWCxjQUFDO0FBQ0YsZ0JBQUksQ0FBQ3JCLE9BQU8sQ0FBQ20yRixVQUFVLEVBQUVOLFNBQVMsQ0FBQztBQUNuQyxrQkFBTSxJQUFJLENBQUNHLGFBQWEsQ0FBQ0MsWUFBWSxFQUFFRSxVQUFVLENBQUM7V0FDbkQsQ0FBQyxPQUFPbHdGLENBQUMsRUFBRTtBQUNWdHhCLGtCQUFNLENBQUNhLElBQUksQ0FDVCwrQ0FBK0M0akQsR0FBRyxDQUFDaG5ELEVBQUUsTUFDbEQ2ekIsQ0FBVyxDQUFDLFNBQVMsQ0FDeEIsRUFBRSxDQUNIO0FBQ0g7QUFDRixTQUFDLE1BQU07QUFDTCxlQUFLLE1BQU11eEUsT0FBTyxJQUFJeWUsWUFBWSxFQUFFO1lBQ2xDLE1BQU1uM0YsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDNDJGLGdCQUFnQixDQUFDbGUsT0FBTyxDQUFDO1lBQ2hELElBQUksQ0FBQzE0RSxHQUFHLENBQUM5TSxLQUFLLEVBQUU4TSxHQUFHLENBQUM5TSxLQUFLLEdBQUdvbkMsR0FBRyxDQUFDcG5DLEtBQUs7QUFDckMsa0JBQU1ta0csVUFBVSxHQUFhLElBQUksQ0FBQzc1RixJQUFJLENBQUM2RSxLQUFLLENBQUM7QUFDM0MvdUIsZ0JBQUUsRUFBRSxJQUFJLENBQUMwakgsU0FBUyxDQUFDaDNGLEdBQUcsQ0FBQztBQUN2QnhOLGlCQUFHLEVBQUV3TixHQUFHO0FBQ1JJLG9CQUFNLEVBQUUsS0FBSztBQUNibUMsc0JBQVEsRUFBRTtBQUNYLGNBQUM7QUFDRixnQkFBSSxDQUFDckIsT0FBTyxDQUFDbTJGLFVBQVUsRUFBRU4sU0FBUyxDQUFDO0FBQ25DLGtCQUFNLElBQUksQ0FBQ0csYUFBYSxDQUFDbDNGLEdBQUcsRUFBRXEzRixVQUFVLENBQUM7QUFDM0M7QUFDRjtBQUVBO0FBQ0E7QUFDQTtRQUNBLElBQ0UvOEQsR0FBRyxDQUFDZzlELFlBQVksQ0FBQ3RzRyxXQUFXLEVBQUUsQ0FBQ3ZVLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFDeEQ2akQsR0FBRyxDQUFDZzlELFlBQVksQ0FBQ3RzRyxXQUFXLEVBQUUsQ0FBQ3ZVLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFDdkQ7QUFDQSxnQkFBTTJ3QixRQUFRLEdBQUcsSUFBSSxDQUFDbXdGLGdCQUFnQixDQUFDajlELEdBQUcsQ0FBQztBQUMzQyxjQUFJbHpCLFFBQVEsRUFBRTtBQUNaeXZGLHVDQUEyQixDQUFDeGtILElBQUksQ0FDOUIsSUFBSSxDQUFDOHNFLFFBQVEsQ0FBQ3UzQyxTQUFTLEVBQUV0dkYsUUFBeUIsRUFBRXYwQixRQUFRLEVBQUVra0gsU0FBUyxDQUFDLENBQ3pFO0FBQ0QsZ0JBQUksQ0FBQ1AsY0FBYyxJQUFJSywyQkFBMkIsQ0FBQ3g4RyxNQUFNO0FBQ3pELGtCQUFNdEMsT0FBTyxDQUFDa29CLEdBQUcsQ0FBQzQyRiwyQkFBMkIsQ0FBQztBQUM5QyxnQkFBSSxDQUFDTCxjQUFjLElBQUlLLDJCQUEyQixDQUFDeDhHLE1BQU07QUFDM0Q7QUFFQTtBQUNGO0FBQ0Y7QUFFQTtBQUNBO0FBQ0EsV0FBSyxNQUFNczJHLElBQUksSUFBSTVxRixNQUFNLEVBQUU7UUFDekIsSUFBSTRxRixJQUFJLEtBQUssV0FBVyxJQUFJQSxJQUFJLEtBQUssTUFBTSxJQUFJQSxJQUFJLEtBQUssV0FBVyxFQUFFO0FBQ3JFLFlBQ0UsQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQ2w2RyxRQUFRLENBQ3ZFazZHLElBQUksQ0FDTCxFQUVEO0FBQ0YsWUFBSSxPQUFPNXFGLE1BQU0sQ0FBQzRxRixJQUFJLENBQUMsS0FBSyxRQUFRLElBQUk1cUYsTUFBTSxDQUFDNHFGLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUUvRCxZQUFJLElBQUksQ0FBQzZGLGNBQWMsSUFBSSxJQUFJLENBQUNDLG1CQUFtQixFQUFFO0FBQ25ELGdCQUFNLElBQUksQ0FBQ3QzQyxRQUFRLENBQ2pCdTNDLFNBQVMsRUFDVDN3RixNQUFNLENBQUM0cUYsSUFBSSxDQUFrQixFQUM3Qjk5RyxRQUFRLEVBQ1Jra0gsU0FBUyxDQUNWO0FBQ0gsU0FBQyxNQUFNO0FBQ0wsZ0JBQU1ELFlBQVksR0FBRyxJQUFJLENBQUMzM0MsUUFBUSxDQUNoQ3UzQyxTQUFTLEVBQ1Qzd0YsTUFBTSxDQUFDNHFGLElBQUksQ0FBa0IsRUFDN0I5OUcsUUFBUSxFQUNSa2tILFNBQVMsQ0FDVjtBQUNERixxQ0FBMkIsQ0FBQ3hrSCxJQUFJLENBQUN5a0gsWUFBWSxDQUFDO0FBQ2hEO0FBQ0Y7QUFDQSxVQUFJRCwyQkFBMkIsQ0FBQ3g4RyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzFDLFlBQUksQ0FBQ204RyxjQUFjLElBQUlLLDJCQUEyQixDQUFDeDhHLE1BQU07QUFDekQsY0FBTXRDLE9BQU8sQ0FBQ2tvQixHQUFHLENBQUM0MkYsMkJBQTJCLENBQUM7QUFDOUMsWUFBSSxDQUFDTCxjQUFjLElBQUlLLDJCQUEyQixDQUFDeDhHLE1BQU07QUFDM0Q7QUFDRixLQUFDLFNBQVM7QUFDUnhILGNBQVEsQ0FBQyxJQUFJLENBQUN1aEgsYUFBYSxFQUFFLENBQUM7QUFDaEM7QUFDRjtFQUVRNEMsU0FBU0EsQ0FBQzE4RCxHQUFrQjtJQUNsQyxJQUFJLElBQUksQ0FBQ3E1RCxRQUFRLEVBQUUsT0FBTzFqRyxTQUFTLENBQUNDLFlBQVksRUFBRTtJQUVsRCxPQUFPb3FDLEdBQUcsQ0FBQ2huRCxFQUFFO0FBQ2Y7QUFFUTR0QixTQUFPQSxDQUFDcE8sSUFBYyxFQUFFaVEsTUFBZ0I7QUFDOUMsUUFBSSxJQUFJLENBQUN2RixJQUFJLENBQUNxRSxTQUFTLENBQUMvTyxJQUFJLENBQUNQLEtBQUssQ0FBQ2pmLEVBQUUsRUFBRXl2QixNQUFNLENBQUN4USxLQUFLLENBQUNpSixTQUFTLENBQUMsRUFBRTtBQUM5RDFJLFVBQUksQ0FBQ1AsS0FBSyxDQUFDamYsRUFBRSxHQUFHLElBQUksQ0FBQ2trSCxjQUFjLENBQUMxa0csSUFBSSxDQUFDUCxLQUFLLENBQUNqZixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM2Z0gsZ0JBQWdCLENBQUM7QUFDN0U7SUFDQSxJQUFJLENBQUMzMkYsSUFBSSxDQUFDMEQsT0FBTyxDQUFDcE8sSUFBSSxFQUFFaVEsTUFBTSxDQUFDO0FBQ2pDO0FBRUE7Ozs7QUFJRztFQUNLLE1BQU0wMEYsT0FBT0EsQ0FBQ0MsR0FBb0M7SUFDeEQsSUFBSSxDQUFDQSxHQUFHLElBQUlBLEdBQUcsQ0FBQ3I5RyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzVCLGFBQU9xOUcsR0FBNkI7QUFDdEM7QUFFQSxRQUFJejdHLEtBQUssQ0FBQzBvQyxPQUFPLENBQUMreUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQ0EsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDZixZQUFZLEVBQUU7QUFDakQsYUFBT2UsR0FBNkI7QUFDdEM7QUFDQTtBQUNBLFFBQUksQ0FBQ0EsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDZixZQUFZLEVBQUU7TUFDeEIsSUFBSSxFQUFFZSxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVluaEgsTUFBTSxDQUFDLEVBQzdCLE9BQU8sQ0FDTDtBQUNFc0QsWUFBSSxFQUFFNjlHLEdBQUc7QUFDVHBrSCxVQUFFLEVBQUUyYyxTQUFTLENBQUNDLFlBQVksRUFBRTtBQUM1QkMsa0JBQVUsRUFBRTtBQUNiLFFBQ3dCLE1BQ3hCLE9BQU91bkcsR0FBNkI7QUFDM0M7SUFFQSxNQUFNQyxPQUFPLEdBQWdCLEVBQUU7QUFDL0IsU0FBSyxNQUFNQyxHQUFHLElBQUlGLEdBQUcsRUFBRTtNQUNyQixNQUFNRyxJQUFJLEdBQWUsTUFBTSxJQUFJLENBQUNuRSxZQUFZLENBQUNsd0MsU0FBUyxDQUFDO1FBQ3pEbHdFLEVBQUUsRUFBRXNrSCxHQUFHLENBQUNqQjtBQUNULFFBQTBCO0FBQzNCLFVBQUlrQixJQUFJLENBQUMxbkcsVUFBVSxLQUFLL1osU0FBUyxFQUFFO1FBQ2pDeWhILElBQUksQ0FBQzFuRyxVQUFVLEdBQUcsQ0FBQztBQUNyQixPQUFDLE1BQU07UUFDTDBuRyxJQUFJLENBQUMxbkcsVUFBVSxFQUFFO0FBQ25CO01BQ0EsSUFDRTBuRyxJQUFJLENBQUNoK0csSUFBSSxDQUFDUSxNQUFNLEtBQ2YsT0FBT3c5RyxJQUFJLENBQUNoK0csSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSWk3RSxLQUFLLENBQUMraUMsSUFBSSxDQUFDaCtHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3pEO1FBQ0FoRSxNQUFNLENBQUN1QyxLQUFLLENBQ1YsWUFBWXkvRyxJQUFJLENBQUN2a0gsRUFBRSwrREFBK0QsQ0FDbkY7QUFDSDtBQUNBcWtILGFBQU8sQ0FBQ3RsSCxJQUFJLENBQUN3bEgsSUFBSSxDQUFDO0FBQ2xCO0FBQ0Y7QUFFQTtBQUVBLFdBQU9GLE9BQU87QUFDaEI7QUFFQTs7OztBQUlHO0VBQ0ssTUFBTWYsZ0JBQWdCQSxDQUFDdDhELEdBQWtCO0lBQy9DLElBQUlBLEdBQUcsQ0FBQ3E4RCxZQUFZLEVBQUU7TUFDcEIsTUFBTW1CLFdBQVcsR0FBSSxNQUFNLElBQUksQ0FBQ3BFLFlBQVksQ0FBQ2x3QyxTQUFTLENBQUM7UUFDckRsd0UsRUFBRSxFQUFFZ25ELEdBQUcsQ0FBQ3E4RDtBQUNULFFBQW1CO0FBQ3BCO0FBQ0EsYUFBT21CLFdBQVc7S0FDbkIsTUFBTSxPQUFPeDlELEdBQUc7QUFDbkI7QUFFQTs7OztBQUlHO0VBQ0tqN0IsY0FBY0EsQ0FBQ2k3QixHQUFrQjtJQUN2QyxNQUFNeTlELE9BQU8sR0FBR3o5RCxHQUFHLENBQUNnOUQsWUFBWSxHQUFHaDlELEdBQUcsQ0FBQ2c5RCxZQUFZLEdBQUcsTUFBTTtBQUU1RCxVQUFNVSxNQUFNLEdBQUcsSUFBSSxDQUFDcEUsZUFBZSxDQUFDbUUsT0FBTyxDQUFDO0lBQzVDLElBQUlDLE1BQU0sRUFBRSxPQUFPQSxNQUFNO0lBRXpCLElBQUlDLE9BQU8sR0FBRyxNQUFNO0FBQ3BCLFVBQU1DLFNBQVMsR0FBRyxJQUFJLENBQUNDLG1CQUFtQixDQUFDNzlELEdBQUcsQ0FBQztBQUMvQyxTQUFLLE1BQU03bUQsSUFBSSxJQUFJeWtILFNBQVMsRUFBRTtBQUM1QixZQUFNRSxhQUFhLEdBQUcza0gsSUFBSSxJQUFJLElBQUksQ0FBQzRnSCxvQkFBb0I7QUFDdkQsVUFBSStELGFBQWEsRUFBRTtBQUNqQkgsZUFBTyxHQUFHeGtILElBQUk7QUFDZDtBQUNGO0FBQ0Y7QUFDQSxRQUFJLENBQUNtZ0gsZUFBZSxDQUFDbUUsT0FBTyxDQUFDLEdBQUdFLE9BQU87QUFDdkMsV0FBT0EsT0FBTztBQUNoQjtFQUVRRSxtQkFBbUJBLENBQUM3OUQsR0FBa0I7QUFDNUMsUUFBSTdtRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDbkJBLFFBQUksR0FBRzZtRCxHQUFHLENBQUNnOUQsWUFBWSxHQUFHaDlELEdBQUcsQ0FBQ2c5RCxZQUFZLENBQUNqaEgsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDbXRCLE9BQU8sRUFBRSxHQUFHL3ZCLElBQUk7QUFDdEVBLFFBQUksR0FBR0EsSUFBSSxDQUFDa2MsR0FBRyxDQUFVdmEsS0FBYSxJQUFJO0FBQ3hDLGFBQU9BLEtBQUssQ0FBQ2lCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ210QixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEMsS0FBQyxDQUFDO0FBRUYsV0FBTy92QixJQUFJO0FBQ2I7RUFFUXdqSCx5QkFBeUJBLENBQUMzOEQsR0FBa0I7SUFDbEQsT0FBTyxJQUFJLENBQUNqN0IsY0FBYyxDQUFDaTdCLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQys1RCxvQkFBb0I7QUFDOUQ7QUFFUSxRQUFNNkMsYUFBYUEsQ0FBQzU4RCxHQUFrQixFQUFFeG5DLElBQWM7QUFDNUQsUUFBSXduQyxHQUFHLENBQUNxOEQsWUFBWSxFQUFFcjhELEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQ3M4RCxnQkFBZ0IsQ0FBQ3Q4RCxHQUFHLENBQUM7SUFDNUQsSUFBSTtBQUNGLFVBQUksSUFBSSxDQUFDMjhELHlCQUF5QixDQUFDMzhELEdBQUcsQ0FBQyxFQUFFO0FBQ3ZDLGNBQU0rOUQsUUFBUSxHQUFHLElBQUksQ0FBQ2hFLG9CQUFvQixDQUFDLElBQUksQ0FBQ2gxRixjQUFjLENBQUNpN0IsR0FBRyxDQUFDLENBQUM7UUFDcEUsSUFBSSs5RCxRQUFRLEVBQUUsT0FBTyxNQUFNQSxRQUFRLENBQUMvOUQsR0FBRyxFQUFFeG5DLElBQUksQ0FBQztBQUNoRDtBQUNBLGFBQU8sSUFBSTtLQUNaLENBQUMsT0FBT3FVLENBQUMsRUFBRTtNQUNWdHhCLE1BQU0sQ0FBQ2EsSUFBSSxDQUFDLHNEQUFzRDRqRCxHQUFHLENBQUNobkQsRUFBRSxFQUFFLENBQUM7QUFDM0UsWUFBTTZ6QixDQUFDO0FBQ1Q7QUFDRjtFQUVRaXdGLGVBQWVBLENBQUM5OEQsR0FBa0I7SUFDeEMsTUFBTTY4RCxZQUFZLEdBQ2hCNzhELEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFDbkJBLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFDcEJBLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFDbEJBLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFFckIsUUFBSTY4RCxZQUFZLEVBQUU7QUFDaEIsVUFBSWw3RyxLQUFLLENBQUMwb0MsT0FBTyxDQUFDd3lFLFlBQVksQ0FBQyxFQUFFO1FBQy9CLE1BQU1tQixvQkFBb0IsR0FBR25CLFlBQVksQ0FBQzFrSCxNQUFNLENBQUVxa0MsQ0FBQyxJQUFLQSxDQUFDLENBQUM7QUFDMUQsWUFBSXFnRixZQUFZLENBQUM5OEcsTUFBTSxLQUFLaStHLG9CQUFvQixDQUFDaitHLE1BQU0sRUFBRTtVQUN2RHhFLE1BQU0sQ0FBQ2EsSUFBSSxDQUFDLFVBQVU0akQsR0FBRyxDQUFDaG5ELEVBQUUsZ0RBQWdELENBQUM7QUFDL0U7QUFDQSxlQUFPZ2xILG9CQUFvQjtBQUM3QjtBQUNBLGFBQU9uQixZQUFZO0FBQ3JCO0FBQ0EsV0FBTyxJQUFJO0FBQ2I7RUFFUUksZ0JBQWdCQSxDQUFDajlELEdBQWtCO0lBQ3pDLE9BQU9BLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSUEsR0FBRyxDQUFDLFdBQVcsQ0FBQztBQUM1QztFQUVRaStELGtCQUFrQkEsQ0FBQ2orRCxHQUFrQjtBQUMzQyxXQUNFQSxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFDdkJBLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUN0QkEsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUNqQkEsR0FBRyxDQUFDLGFBQWEsQ0FBQztBQUV0QjtFQUVRaytELDBCQUEwQkEsQ0FBQ2wrRCxHQUFrQjtJQUNuRCxPQUFPQSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUlBLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDNUM7QUFFQTtBQUNRbStELGVBQWFBLENBQUNqM0YsTUFBYyxFQUFFazNGLE9BQWU7SUFDbkQsTUFBTWpxRyxLQUFLLEdBQUcrUyxNQUFNLENBQUNqa0IsT0FBTyxDQUFDcWpCLE9BQU8sQ0FBQ08sZ0JBQWdCLENBQUM7QUFDdEQsUUFBSTFTLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNoQixhQUFPK1MsTUFBTSxHQUFHWixPQUFPLENBQUNPLGdCQUFnQixHQUFHdTNGLE9BQU87QUFDcEQ7QUFDQSxXQUFPbDNGLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDLENBQUMsRUFBRWhULEtBQUssQ0FBQyxHQUFHbVMsT0FBTyxDQUFDTyxnQkFBZ0IsR0FBR3UzRixPQUFPO0FBQ3hFO0FBRVFsQixnQkFBY0EsQ0FBQ2gyRixNQUFjLEVBQUVrM0YsT0FBZTtJQUNwRCxNQUFNanFHLEtBQUssR0FBRytTLE1BQU0sQ0FBQ2prQixPQUFPLENBQUNxakIsT0FBTyxDQUFDUyxpQkFBaUIsQ0FBQztBQUN2RCxRQUFJNVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2hCLGFBQU8rUyxNQUFNLEdBQUdaLE9BQU8sQ0FBQ1MsaUJBQWlCLEdBQUdxM0YsT0FBTztBQUNyRDtBQUNBLFdBQU9sM0YsTUFBTSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFaFQsS0FBSyxDQUFDLEdBQUdtUyxPQUFPLENBQUNTLGlCQUFpQixHQUFHcTNGLE9BQU87QUFDekU7RUFFUUMscUJBQXFCQSxDQUFDcmxILEVBQVU7QUFDdEM7SUFDQSxPQUFPO01BQUVBLEVBQUU7QUFBRWdrSCxrQkFBWSxFQUFFLFdBQVc7QUFBRXBrRyxXQUFLLEVBQUUsR0FBRztBQUFFcVUsWUFBTSxFQUFFLElBQUl0ckIsS0FBSyxDQUFDLEVBQUU7S0FBRztBQUM3RTtBQUVBOzs7QUFHRztBQUNLLFFBQU1xNEcsWUFBWUEsQ0FBQ2g2RCxHQUFrQixFQUFFajZCLEtBQWU7QUFDNUQ7QUFDQTtBQUNBaTZCLE9BQUcsQ0FBQ25nQixNQUFNLENBQUNqbkIsS0FBSyxHQUFHb25DLEdBQUcsQ0FBQ3BuQyxLQUFLO0FBQzVCO0FBQ0E7QUFDQW9uQyxPQUFHLENBQUN2MEIsTUFBTSxDQUFDN1MsS0FBSyxHQUFHb25DLEdBQUcsQ0FBQ3BuQyxLQUFLO0FBQzlCO0FBRUE7OztBQUdHO0FBQ0ssUUFBTTBsRyxpQkFBaUJBLENBQzdCdCtELEdBQWtCLEVBQ2xCeG5DLElBQWMsRUFDZHNDLFNBQWtCO0FBRWxCLFFBQUksSUFBSSxDQUFDNmhHLHlCQUF5QixDQUFDMzhELEdBQUcsQ0FBQyxFQUFFO0FBQ3ZDLFlBQU0sSUFBSSxDQUFDNDhELGFBQWEsQ0FBQzU4RCxHQUFHLEVBQUV4bkMsSUFBSSxDQUFDO0FBQ3JDLEtBQUMsTUFBTTtBQUNMLFlBQU0rbEcsYUFBYSxHQUFHLElBQUksQ0FBQ3pCLGVBQWUsQ0FBQzk4RCxHQUFHLENBQUM7QUFDL0MsWUFBTWx6QixRQUFRLEdBQUcsSUFBSSxDQUFDbXdGLGdCQUFnQixDQUFDajlELEdBQUcsQ0FBQztBQUMzQyxZQUFNa2dELE9BQU8sR0FBRyxDQUNkLElBQUlxZSxhQUFhLEdBQUlBLGFBQWlDLEdBQUcsRUFBRSxDQUFDLEVBQzVELElBQUl6eEYsUUFBUSxHQUFJQSxRQUE0QixHQUFHLEVBQUUsQ0FBQyxDQUNuRDtBQUNELFdBQUssTUFBTXNxRixLQUFLLElBQUlsWCxPQUFPLEVBQUU7UUFDM0IsTUFBTXBsRyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUN3aEgsZ0JBQWdCLENBQUNsRixLQUFLLENBQUM7QUFDaEQsY0FBTW9ILFNBQVMsR0FBYSxJQUFJLENBQUN0N0YsSUFBSSxDQUFDNkUsS0FBSyxDQUFDO0FBQzFDL3VCLFlBQUUsRUFBRSxJQUFJLENBQUNtbEgsYUFBYSxDQUFDcmpILEtBQUssQ0FBQzlCLEVBQUUsRUFBRSxJQUFJLENBQUM0Z0gsZUFBZSxFQUFFLENBQUM7QUFDeEQxaEcsYUFBRyxFQUFFcGQsS0FBSztBQUNWZ3JCLGdCQUFNLEVBQUUsS0FBSztBQUNibUMsa0JBQVEsRUFBRSxFQUFFO0FBQ1puTjtBQUNELFVBQUM7QUFFRixZQUFJLENBQUM4TCxPQUFPLENBQUM0M0YsU0FBUyxFQUFFaG1HLElBQUksQ0FBQztRQUM3QixNQUFNLElBQUksQ0FBQzhsRyxpQkFBaUIsQ0FBQ3hqSCxLQUFLLEVBQUUwakgsU0FBUyxFQUFFMWpHLFNBQVMsQ0FBQztBQUMzRDtBQUNGO0FBQ0Y7QUFFUSxRQUFNMmpHLCtCQUErQkEsQ0FDM0NDLFdBQTBCLEVBQzFCQyxXQUEwQixFQUMxQkMsWUFBc0I7QUFFdEIsVUFBTUMsZUFBZSxHQUFHbHBHLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO0lBQ2hELElBQUlrcEcsYUFBYSxHQUFHLElBQUk7QUFDeEI7SUFDQSxJQUFJbjlHLEtBQUssQ0FBQzBvQyxPQUFPLENBQUNxMEUsV0FBVyxDQUFDNzdGLFNBQVMsQ0FBQyxFQUFFO0FBQ3hDaThGLG1CQUFhLEdBQUcsSUFBSSxDQUFDVCxxQkFBcUIsQ0FBQ1EsZUFBZSxDQUFDO0FBQzNEQyxtQkFBYSxDQUFDbG1HLEtBQUssR0FBRzhsRyxXQUFXLENBQUM5bEcsS0FBZTtBQUNqRGttRyxtQkFBYSxDQUFDN3hGLE1BQU0sR0FBR3l4RixXQUFXLENBQUM3N0YsU0FBUztBQUM5QyxLQUFDLE1BQU07QUFDTGk4RixtQkFBYSxHQUFHSixXQUFXLENBQUM3N0YsU0FBUyxHQUNqQzY3RixXQUFXLENBQUM3N0YsU0FBUyxHQUNyQixJQUFJLENBQUN3N0YscUJBQXFCLENBQUNRLGVBQWUsQ0FBQztBQUNqRDtBQUNBLFVBQU1FLGFBQWEsR0FBRyxJQUFJLENBQUM3N0YsSUFBSSxDQUFDNkUsS0FBSyxDQUFDO0FBQ3BDL3VCLFFBQUUsRUFBRTZsSCxlQUFlO0FBQ25CM21HLFNBQUcsRUFBRTRtRyxhQUFhO0FBQ2xCaDVGLFlBQU0sRUFBRSxLQUFLO0FBQ2JtQyxjQUFRLEVBQUU7QUFDWCxNQUFDO0FBQ0YsUUFBSSxDQUFDckIsT0FBTyxDQUFDbTRGLGFBQWEsRUFBRUgsWUFBWSxDQUFDO0FBRXpDLFVBQU1uQyxTQUFTLEdBQWEsSUFBSSxDQUFDdjVGLElBQUksQ0FBQzZFLEtBQUssQ0FBQztBQUMxQy91QixRQUFFLEVBQUUsSUFBSSxDQUFDbWxILGFBQWEsQ0FBQ1EsV0FBVyxDQUFDM2xILEVBQUUsRUFBRSxJQUFJLENBQUM0Z0gsZUFBZSxFQUFFLENBQUM7QUFDOUQxaEcsU0FBRyxFQUFFeW1HLFdBQVc7QUFDaEI3NEYsWUFBTSxFQUFFLEtBQUs7QUFDYm1DLGNBQVEsRUFBRSxFQUFFO0FBQ1puTixlQUFTLEVBQUU7QUFDWixNQUFDO0FBQ0YsUUFBSSxDQUFDOEwsT0FBTyxDQUFDNjFGLFNBQVMsRUFBRXNDLGFBQWEsQ0FBQztJQUV0QyxNQUFNLElBQUksQ0FBQ1QsaUJBQWlCLENBQUNLLFdBQVcsRUFBRWxDLFNBQVMsRUFBRSxJQUFJLENBQUM7QUFDNUQ7QUFFUSxRQUFNdUMsb0JBQW9CQSxDQUNoQ0MsWUFBMkIsRUFDM0JDLFVBQXlCLEVBQ3pCTixZQUFzQjtBQUV0QixVQUFNbkMsU0FBUyxHQUFhLElBQUksQ0FBQ3Y1RixJQUFJLENBQUM2RSxLQUFLLENBQUM7QUFDMUMvdUIsUUFBRSxFQUFFLElBQUksQ0FBQzBqSCxTQUFTLENBQUN3QyxVQUFVLENBQUM7QUFDOUJobkcsU0FBRyxFQUFFZ25HLFVBQVU7QUFDZnA1RixZQUFNLEVBQUUsS0FBSztBQUNibUMsY0FBUSxFQUFFO0FBQ1gsTUFBQztBQUNGLFFBQUksQ0FBQ3JCLE9BQU8sQ0FBQzYxRixTQUFTLEVBQUVtQyxZQUFZLENBQUM7SUFDckMsTUFBTSxJQUFJLENBQUNOLGlCQUFpQixDQUFDWSxVQUFVLEVBQUV6QyxTQUFTLEVBQUUsS0FBSyxDQUFDO0FBQzVEO0FBRVEsUUFBTXZDLG1CQUFtQkEsQ0FBQ2w2RCxHQUFrQixFQUFFeG5DLElBQWM7QUFDbEUsVUFBTTJtRyxVQUFVLEdBQWtCLE1BQU0sSUFBSSxDQUFDN0MsZ0JBQWdCLENBQzNELElBQUksQ0FBQzJCLGtCQUFrQixDQUFDaitELEdBQUcsQ0FBa0IsQ0FDOUM7QUFDRHhuQyxRQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDaW5HLFVBQVUsR0FBR0EsVUFBVTtJQUN0QyxLQUFLLE1BQU1oM0csR0FBRyxJQUFJLElBQUksQ0FBQysxRywwQkFBMEIsQ0FBQ2lCLFVBQVUsQ0FBb0IsRUFBRTtNQUNoRixNQUFNN0IsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDaEIsZ0JBQWdCLENBQUNuMEcsR0FBRyxDQUFDO01BQzVDLE1BQU0sSUFBSSxDQUFDczJHLCtCQUErQixDQUFDeitELEdBQUcsRUFBRXM5RCxHQUFHLEVBQUU5a0csSUFBSSxDQUFDO0FBQzVEO0FBRUEsVUFBTXNVLFFBQVEsR0FBRyxJQUFJLENBQUNtd0YsZ0JBQWdCLENBQUNqOUQsR0FBRyxDQUFDO0FBQzNDLFFBQUlsekIsUUFBUSxFQUFFO0FBQ1osV0FBSyxNQUFNc3hFLE9BQU8sSUFBSXR4RSxRQUEyQixFQUFFO1FBQ2pELE1BQU1veUYsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDNUMsZ0JBQWdCLENBQUNsZSxPQUFPLENBQUM7UUFDdkQsS0FBSyxJQUFJLENBQUM0Z0Isb0JBQW9CLENBQUNoL0QsR0FBRyxFQUFFay9ELFVBQVUsRUFBRTFtRyxJQUFJLENBQUM7QUFDdkQ7QUFDRjtBQUNGO0FBRVEsUUFBTTJpRyxtQkFBbUJBLENBQUNuN0QsR0FBa0IsRUFBRXhuQyxJQUFjO0lBQ2xFLE1BQU0ybUcsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDN0MsZ0JBQWdCLENBQUN0OEQsR0FBRyxDQUFDbS9ELFVBQTJCLENBQUM7QUFDL0UzbUcsUUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ2luRyxVQUFVLEdBQUdBLFVBQVU7SUFDdEMsTUFBTSxJQUFJLENBQUNWLCtCQUErQixDQUFDeitELEdBQUcsRUFBRW0vRCxVQUFVLEVBQUUzbUcsSUFBSSxDQUFDO0FBRWpFLFVBQU1zVSxRQUFRLEdBQUcsSUFBSSxDQUFDbXdGLGdCQUFnQixDQUFDajlELEdBQUcsQ0FBQztBQUMzQyxRQUFJbHpCLFFBQVEsRUFBRTtBQUNaLFdBQUssTUFBTXN4RSxPQUFPLElBQUl0eEUsUUFBMkIsRUFBRTtRQUNqRCxNQUFNb3lGLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQzVDLGdCQUFnQixDQUFDbGUsT0FBTyxDQUFDO1FBQ3ZELEtBQUssSUFBSSxDQUFDNGdCLG9CQUFvQixDQUFDaC9ELEdBQUcsRUFBRWsvRCxVQUFVLEVBQUUxbUcsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0Y7QUFDRjtBQUVRLFFBQU1nakcsNkJBQTZCQSxDQUFDeDdELEdBQWtCLEVBQUV4bkMsSUFBYztBQUM1RSxRQUFJLENBQUN3bkMsR0FBRyxDQUFDby9ELGFBQWEsRUFBRTtNQUN0QjdqSCxNQUFNLENBQUNhLElBQUksQ0FBQyw2QkFBNkI0akQsR0FBRyxDQUFDaG5ELEVBQUUsdUJBQXVCLENBQUM7QUFDdkU7QUFDRjtJQUNBLElBQUksQ0FBQ3VnSCw2QkFBNkIsQ0FBQ3Y1RCxHQUFHLENBQUNvL0QsYUFBYSxDQUFDLEdBQUc1bUcsSUFBSTtBQUM5RDtBQUVRLFFBQU1rakcsbUJBQW1CQSxDQUFDMTdELEdBQWtCLEVBQUV4bkMsSUFBYztBQUNsRSxRQUFJLENBQUN3bkMsR0FBRyxDQUFDby9ELGFBQWEsRUFBRTtNQUN0QjdqSCxNQUFNLENBQUNhLElBQUksQ0FBQyxrQkFBa0I0akQsR0FBRyxDQUFDaG5ELEVBQUUsd0JBQXdCLENBQUM7QUFDN0Q7QUFDRjtJQUNBLElBQUksQ0FBQ3lnSCxlQUFlLENBQUN6NUQsR0FBRyxDQUFDby9ELGFBQWEsQ0FBQyxHQUFHNW1HLElBQUk7QUFDOUM7QUFDRjtBQUVRLFFBQU1vakcseUJBQXlCQSxDQUFDNTdELEdBQWtCLEVBQUVqNkIsS0FBZTtBQUN6RSxRQUFJLENBQUNpNkIsR0FBRyxDQUFDbGxELEtBQUssRUFBRTtNQUNkUyxNQUFNLENBQUN1QyxLQUFLLENBQUMseUJBQXlCa2lELEdBQUcsQ0FBQ2huRCxFQUFFLGdDQUFnQyxDQUFDO0FBQzdFO0FBQ0Y7SUFDQSxJQUFJLENBQUNnbkQsR0FBRyxDQUFDVCxPQUFPLElBQUksQ0FBQzU5QyxLQUFLLENBQUMwb0MsT0FBTyxDQUFDMlYsR0FBRyxDQUFDVCxPQUFPLENBQUMsSUFBSVMsR0FBRyxDQUFDVCxPQUFPLENBQUN4L0MsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUMzRXhFLE1BQU0sQ0FBQ2EsSUFBSSxDQUFDLHlCQUF5QjRqRCxHQUFHLENBQUNobkQsRUFBRSx5QkFBeUIsQ0FBQztBQUN2RTtBQUNBLFVBQU1xbUgsbUJBQW1CLEdBQUdyL0QsR0FBRyxDQUFDbGxELEtBQXNCO0FBQ3RELFVBQU13a0gsYUFBYSxHQUFHdC9ELEdBQUcsQ0FBQ1QsT0FBYTtBQUN2QyxTQUFLLElBQUlyL0MsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHby9HLGFBQWEsQ0FBQ3YvRyxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO01BQzdDLElBQUksSUFBSSxDQUFDdzVHLGlCQUFpQixDQUFDNEYsYUFBYSxDQUFDcC9HLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDNUMzRSxNQUFNLENBQUNhLElBQUksQ0FBQywrQkFBK0JrakgsYUFBYSxDQUFDcC9HLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEU7TUFDQSxJQUFJLENBQUN3NUcsaUJBQWlCLENBQUM0RixhQUFhLENBQUNwL0csQ0FBQyxDQUFDLENBQUMsR0FBR20vRyxtQkFBbUI7QUFDaEU7QUFDRjtBQUVRLFFBQU12RCxnQkFBZ0JBLENBQUM5N0QsR0FBa0IsRUFBRWo2QixLQUFlO0lBQ2hFLElBQUksQ0FBQ2k2QixHQUFHLENBQUNsbEQsS0FBSyxJQUFJLE9BQU9rbEQsR0FBRyxDQUFDbGxELEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDL0NTLE1BQU0sQ0FBQ3VDLEtBQUssQ0FBQyxTQUFTa2lELEdBQUcsQ0FBQ2huRCxFQUFFLDBDQUEwQyxDQUFDO0FBQ3ZFO0FBQ0Y7SUFDQSxJQUFJLENBQUNnbkQsR0FBRyxDQUFDVCxPQUFPLElBQUksQ0FBQzU5QyxLQUFLLENBQUMwb0MsT0FBTyxDQUFDMlYsR0FBRyxDQUFDVCxPQUFPLENBQUMsSUFBSVMsR0FBRyxDQUFDVCxPQUFPLENBQUN4L0MsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUMzRXhFLE1BQU0sQ0FBQ2EsSUFBSSxDQUFDLGVBQWU0akQsR0FBRyxDQUFDaG5ELEVBQUUseUJBQXlCLENBQUM7QUFDM0Q7QUFDRjtBQUNBLFVBQU1zbUgsYUFBYSxHQUFHdC9ELEdBQUcsQ0FBQ1QsT0FBYTtBQUN2QyxTQUFLLElBQUlyL0MsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHby9HLGFBQWEsQ0FBQ3YvRyxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO01BQzdDLElBQUksSUFBSSxDQUFDeTVHLFFBQVEsQ0FBQzJGLGFBQWEsQ0FBQ3AvRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ25DM0UsTUFBTSxDQUFDYSxJQUFJLENBQUMsc0JBQXNCa2pILGFBQWEsQ0FBQ3AvRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3ZEO01BQ0EsSUFBSSxDQUFDeTVHLFFBQVEsQ0FBQzJGLGFBQWEsQ0FBQ3AvRyxDQUFDLENBQUMsQ0FBQyxHQUFHOC9DLEdBQUc7QUFDdkM7QUFDRjtFQUVRdS9ELDRCQUE0QkEsQ0FBQ3YvRCxHQUFrQjtBQUNyRCxXQUFRQSxHQUFHLENBQUN3L0QsWUFBWSxJQUFJeC9ELEdBQUcsQ0FBQ3kvRCxZQUFZO0FBQzlDO0VBRVFDLHlCQUF5QkEsQ0FBQzEvRCxHQUFrQjtJQUNsRCxJQUFJLEVBQUVBLEdBQUcsQ0FBQ245QixTQUFTLElBQUltOUIsR0FBRyxDQUFDOTZCLFNBQVMsQ0FBQyxFQUFFO0FBQ3JDLGFBQU8sSUFBSXBvQixPQUFPLEVBQUUsQ0FBQzR4QixPQUFPLEVBQUU7QUFDaEM7QUFDQSxXQUFRc3hCLEdBQUcsQ0FBQ245QixTQUFTLElBQUltOUIsR0FBRyxDQUFDOTZCLFNBQVM7QUFDeEM7RUFFUXk2RixpQ0FBaUNBLENBQUMzL0QsR0FBa0I7QUFDMUQsV0FBUUEsR0FBRyxDQUFDNC9ELE9BQU8sSUFBSTUvRCxHQUFHLENBQUNULE9BQU87QUFDcEM7RUFFUXNnRSxtQkFBbUJBLENBQUM3L0QsR0FBa0I7QUFDNUMsVUFBTTYrRCxlQUFlLEdBQUdscEcsU0FBUyxDQUFDQyxZQUFZLEVBQUU7QUFDaEQsVUFBTWtwRyxhQUFhLEdBQUcsSUFBSSxDQUFDVCxxQkFBcUIsQ0FBQ1EsZUFBZSxDQUFDO0FBQ2pFQyxpQkFBYSxDQUFDbG1HLEtBQUssR0FBR29uQyxHQUFHLENBQUNwbkMsS0FBZTtJQUN6Q2ttRyxhQUFhLENBQUM3eEYsTUFBTSxHQUFHLElBQUksQ0FBQ3l5Rix5QkFBeUIsQ0FBQzEvRCxHQUFHLENBQUM7QUFDMUQsV0FBTyxJQUFJLENBQUM5OEIsSUFBSSxDQUFDNkUsS0FBSyxDQUFDO0FBQ3JCL3VCLFFBQUUsRUFBRTZsSCxlQUFlO0FBQ25CM21HLFNBQUcsRUFBRTRtRyxhQUFhO0FBQ2xCaDVGLFlBQU0sRUFBRSxLQUFLO0FBQ2JtQyxjQUFRLEVBQUU7QUFDWCxNQUFDO0FBQ0o7QUFFUSxRQUFNNjNGLDBCQUEwQkEsQ0FBQzkvRCxHQUFrQixFQUFFeG5DLElBQWM7QUFDekUsVUFBTWluRyxZQUFZLEdBQUcsSUFBSSxDQUFDRiw0QkFBNEIsQ0FBQ3YvRCxHQUFHLENBQUM7SUFDM0QsSUFBSSxDQUFDeS9ELFlBQVksRUFBRTtNQUNqQmxrSCxNQUFNLENBQUNhLElBQUksQ0FBQyxrQkFBa0I0akQsR0FBRyxDQUFDaG5ELEVBQUUsc0JBQXNCLENBQUM7QUFDM0Q7QUFDRjtBQUNBLFVBQU1tbUgsVUFBVSxHQUFHLElBQUksQ0FBQzVGLDZCQUE2QixDQUFDa0csWUFBWSxDQUFDO0FBQ25FLFVBQU1WLGFBQWEsR0FBRyxJQUFJLENBQUNjLG1CQUFtQixDQUFDNy9ELEdBQUcsQ0FBQztBQUVuRCxRQUFJLENBQUNwNUIsT0FBTyxDQUFDbTRGLGFBQWEsRUFBRXZtRyxJQUFJLENBQUM7SUFDakMsTUFBTXVuRyxvQkFBb0IsR0FBRyxJQUFJLENBQUNKLGlDQUFpQyxDQUNqRVIsVUFBVSxDQUFDbG5HLEtBQUssQ0FBQ0MsR0FBRyxDQUNyQjtBQUNELFNBQUssTUFBTThuRyxtQkFBbUIsSUFBSUQsb0JBQW9CLEVBQUU7QUFDdEQsWUFBTUUsV0FBVyxHQUFHLElBQUksQ0FBQ3pHLDJCQUEyQixDQUFDd0csbUJBQW1CLENBQUM7QUFDekU7QUFDQTtNQUNBLElBQUksQ0FBQ0MsV0FBVyxFQUFFO1FBQ2hCMWtILE1BQU0sQ0FBQ2EsSUFBSSxDQUNULFVBQVU0akgsbUJBQW1CLENBQWtDUCw2Q0FBWSxnR0FBZ0csQ0FDNUs7QUFDRDtBQUNGO0FBQ0EsWUFBTVMsYUFBYSxHQUFHLElBQUksQ0FBQ2g5RixJQUFJLENBQUM2RSxLQUFLLENBQUM7QUFDcEMvdUIsVUFBRSxFQUFFLElBQUksQ0FBQ21sSCxhQUFhLENBQUM4QixXQUFXLENBQUNqbkgsRUFBRSxFQUFFLElBQUksQ0FBQzRnSCxlQUFlLEVBQUUsQ0FBQztBQUM5RDFoRyxXQUFHLEVBQUUrbkcsV0FBVztBQUNoQm42RixjQUFNLEVBQUUsS0FBSztBQUNibUMsZ0JBQVEsRUFBRSxFQUFFO0FBQ1puTixpQkFBUyxFQUFFO0FBQ1osUUFBQztBQUNGLFVBQUksQ0FBQzhMLE9BQU8sQ0FBQ3M1RixhQUFhLEVBQUVuQixhQUFhLENBQUM7QUFDMUM7QUFDQTtNQUNBLE1BQU0sSUFBSSxDQUFDVCxpQkFBaUIsQ0FBQzJCLFdBQVcsRUFBRUMsYUFBYSxFQUFFLElBQUksQ0FBQztBQUNoRTtBQUNGO0VBRU8sTUFBTUMsZ0JBQWdCQSxHQUFBO0FBQzNCO0FBQ0EsUUFBSSxDQUFDcEcsb0JBQW9CLENBQUMwQixhQUFhLEdBQUcsSUFBSSxDQUFDcUUsMEJBQTBCLENBQUNydEUsSUFBSSxDQUFDLElBQUksQ0FBQztBQUVwRjtJQUNBLE1BQU0ydEUscUJBQXFCLEdBQXNDLEVBQUU7SUFDbkUsSUFBSUMsMEJBQTBCLEdBQUcsQ0FBQztBQUNsQyxTQUFLLE1BQU1uZ0gsQ0FBQyxJQUFJLElBQUksQ0FBQ3E1Ryw2QkFBNkIsRUFBRTtBQUNsRCxZQUFNNEYsVUFBVSxHQUFHLElBQUksQ0FBQzVGLDZCQUE2QixDQUFDcjVHLENBQUMsQ0FBQztNQUN4RCxNQUFNcS9DLE9BQU8sR0FBRyxJQUFJLENBQUNvZ0UsaUNBQWlDLENBQUNSLFVBQVUsQ0FBQ2xuRyxLQUFLLENBQUNDLEdBQUcsQ0FBQztBQUM1RSxXQUFLLElBQUk5QixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdtcEMsT0FBTyxDQUFDeC9DLE1BQU0sRUFBRXFXLENBQUMsRUFBRSxFQUFFO1FBQ3ZDZ3FHLHFCQUFxQixDQUFDN2dFLE9BQU8sQ0FBQ25wQyxDQUFDLENBQUMsQ0FBQzNYLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSTtBQUNuRDRoSCxrQ0FBMEIsRUFBRTtBQUM5QjtBQUNGO0FBRUE7QUFDQSxVQUFNLElBQUksQ0FBQ245RixJQUFJLENBQUNZLFNBQVMsQ0FBRXRMLElBQWMsSUFBSTtNQUMzQyxJQUFJLENBQUNBLElBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUNrbkcsYUFBYSxFQUFFLE9BQU8sSUFBSTtBQUM5QyxZQUFNQSxhQUFhLEdBQUc1bUcsSUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ2tuRyxhQUFhLENBQUMzZ0gsUUFBUSxFQUFFO0FBQzdELFVBQUkyaEgscUJBQXFCLENBQUNoQixhQUFhLENBQUMsS0FBS3RqSCxTQUFTLEVBQUU7QUFDdERza0gsNkJBQXFCLENBQUNoQixhQUFhLENBQUMsR0FBRzVtRyxJQUFJO0FBQzNDNm5HLGtDQUEwQixFQUFFO0FBQzlCO0FBQ0E7QUFDQSxVQUFJQSwwQkFBMEIsS0FBSyxDQUFDLEVBQUUsT0FBTyxLQUFLO0FBQ2xELGFBQU8sSUFBSTtBQUNiLEtBQUMsRUFBRSxJQUFJLENBQUM3a0UsT0FBTyxDQUFDO0FBRWhCO0FBQ0EsU0FBSyxNQUFNdDdDLENBQUMsSUFBSWtnSCxxQkFBcUIsRUFBRTtBQUNyQyxZQUFNRSxVQUFVLEdBQUdGLHFCQUFxQixDQUFDbGdILENBQUMsQ0FBQztNQUMzQyxJQUFJLENBQUNvZ0gsVUFBVSxFQUFFO0FBQ2Yva0gsY0FBTSxDQUFDdUMsS0FBSyxDQUFDLENBQTRCb0MsNEJBQUMscUJBQXFCLENBQUM7QUFDaEU7QUFDRjtBQUVBO01BQ0EsSUFBSSxDQUFDczVHLDJCQUEyQixDQUFDdDVHLENBQUMsQ0FBQyxHQUFHb2dILFVBQVUsQ0FBQ3JvRyxLQUFLLENBQUNDLEdBQUc7QUFDMUQ7Ozs7QUFJRztBQUNILFVBQUksQ0FBQyxJQUFJLENBQUN1aEcsZUFBZSxDQUFDdjVHLENBQUMsQ0FBQyxFQUFFO0FBQzVCLFlBQUksQ0FBQ3M1RywyQkFBMkIsQ0FBQ3Q1RyxDQUFDLENBQUMsQ0FBQ3FnSCx3QkFBd0IsR0FDMURELFVBQVUsQ0FBQzczRixNQUFNLENBQUN4USxLQUFLLENBQUNDLEdBQUcsQ0FBQ2tuRyxhQUFhO0FBQzdDLE9BQUMsTUFBTTtBQUNMLGNBQU1LLFlBQVksR0FBRyxJQUFJLENBQUNoRyxlQUFlLENBQUN2NUcsQ0FBQyxDQUFDLENBQUMrWCxLQUFLLENBQUNDLEdBQUcsQ0FBQ3VuRyxZQUFZO1FBQ25FLE1BQU1lLE9BQU8sR0FBR3ZrSCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUN1OUcsZUFBZSxDQUFDO0FBQ25EK0csZUFBTyxDQUFDaG9ILE9BQU8sQ0FBRXNDLEtBQWUsSUFBSTtVQUNsQyxJQUFJQSxLQUFLLENBQUNtZCxLQUFLLENBQUNDLEdBQUcsQ0FBQ3VuRyxZQUFZLEtBQUtBLFlBQVksRUFBRTtBQUNqRDNrSCxpQkFBSyxDQUFDbWQsS0FBSyxDQUFDQyxHQUFHLENBQUNxb0csd0JBQXdCLEdBQ3RDemxILEtBQUssQ0FBQzJ0QixNQUFNLENBQUN4USxLQUFLLENBQUNDLEdBQUcsQ0FBQ2tuRyxhQUFhO0FBQ3hDO0FBQ0YsU0FBQyxDQUFDO0FBQ0o7QUFDQTtBQUNBLGFBQU8sSUFBSSxDQUFDM0YsZUFBZSxDQUFDdjVHLENBQUMsQ0FBQztBQUM5QjtNQUNBLElBQUksQ0FBQ2dqQixJQUFJLENBQUMrRCxVQUFVLENBQUNxNUYsVUFBVSxFQUFFLElBQUksQ0FBQztBQUN4QztBQUdBO0FBQ0EsU0FBSyxNQUFNcGdILENBQUMsSUFBSSxJQUFJLENBQUN1NUcsZUFBZSxFQUFFO0FBQ3BDLFlBQU1qaEcsSUFBSSxHQUFHLElBQUksQ0FBQ2loRyxlQUFlLENBQUN2NUcsQ0FBQyxDQUFDO0FBQ3BDO01BQ0EsTUFBTSxJQUFJLENBQUMwOEcsYUFBYSxDQUFDcGtHLElBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLEVBQUVNLElBQUksQ0FBQztBQUVoRDtBQUNGO0VBRU8sTUFBTWlvRyxjQUFjQSxHQUFBO0lBQ3pCLE1BQU1DLG1CQUFtQixHQUFHemtILE1BQU0sQ0FBQ3VxQixJQUFJLENBQUMsSUFBSSxDQUFDa3pGLGlCQUFpQixDQUFDLENBQUMzNUcsTUFBTTtJQUN0RSxNQUFNNGdILFVBQVUsR0FBRzFrSCxNQUFNLENBQUN1cUIsSUFBSSxDQUFDLElBQUksQ0FBQ216RixRQUFRLENBQUMsQ0FBQzU1RyxNQUFNO0FBQ3BELFFBQUkyZ0gsbUJBQW1CLEtBQUssQ0FBQyxJQUFJQyxVQUFVLEtBQUssQ0FBQyxFQUFFO0FBRW5EO0FBQ0EsVUFBTSxJQUFJLENBQUN6OUYsSUFBSSxDQUFDWSxTQUFTLENBQUV0TCxJQUFjLElBQUk7TUFDM0MsSUFBSSxDQUFDQSxJQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDa25HLGFBQWEsRUFBRSxPQUFPLElBQUk7QUFDOUMsWUFBTUEsYUFBYSxHQUFHNW1HLElBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUNrbkcsYUFBYSxDQUFDM2dILFFBQVEsRUFBRTtBQUM3RDs7Ozs7Ozs7O0FBU0c7TUFDSCxNQUFNbWlILG1CQUFtQixHQUFHcG9HLElBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUNxb0csd0JBQXdCO0FBRW5FLFVBQUksSUFBSSxDQUFDN0csaUJBQWlCLENBQUMwRixhQUFhLENBQUMsRUFBRTtBQUN6QzVtRyxZQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDRixjQUFjLEdBQUcsSUFBSSxDQUFDMGhHLGlCQUFpQixDQUFDMEYsYUFBYSxDQUFDO09BQ3RFLE1BQU0sSUFBSSxJQUFJLENBQUMxRixpQkFBaUIsQ0FBQ2tILG1CQUFtQixDQUFDLEVBQUU7QUFDdERwb0csWUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ0YsY0FBYyxHQUFHLElBQUksQ0FBQzBoRyxpQkFBaUIsQ0FBQ2tILG1CQUFtQixDQUFDO0FBQzdFO0FBRUE7QUFDQSxVQUFJLElBQUksQ0FBQ2pILFFBQVEsQ0FBQ3lGLGFBQWEsQ0FBQyxLQUFLdGpILFNBQVMsSUFBSSxDQUFDMGMsSUFBSSxDQUFDUCxLQUFLLENBQUM2QyxTQUFTLEVBQUU7QUFDdkV0QyxZQUFJLENBQUNQLEtBQUssQ0FBQ3RlLEtBQUssR0FBRyxJQUFJLENBQUNnZ0gsUUFBUSxDQUFDeUYsYUFBYSxDQUFDLENBQUN0a0gsS0FBSztBQUN2RDtBQUNBLGFBQU8sSUFBSTtBQUNiLEtBQUMsRUFBRSxJQUFJLENBQUMwZ0QsT0FBTyxDQUFDO0FBRWhCO0FBQ0EsU0FBSyxNQUFNdDdDLENBQUMsSUFBSSxJQUFJLENBQUN1NUcsZUFBZSxFQUFFO0FBQ3BDOztBQUVHO0FBQ0gsWUFBTXRrRixRQUFRLEdBQUcsSUFBSSxDQUFDalMsSUFBSSxDQUN2QjRGLE9BQU8sQ0FDTHRRLElBQWMsSUFDYixJQUFJLENBQUN1TSxjQUFjLENBQUN2TSxJQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDLEtBQUswSCxXQUFXLENBQUM2N0YsYUFBYSxFQUNuRSxJQUFJLENBQUNoQyxlQUFlLENBQUN2NUcsQ0FBQyxDQUFDLENBQ3hCLENBQ0Fzc0IsTUFBTSxDQUFDLENBQUNDLElBQUksRUFBRW8wRixPQUFPLEtBQ3BCcDBGLElBQUksSUFBSUEsSUFBSSxDQUFDeFUsS0FBSyxDQUFDQyxHQUFHLENBQUNpZCxRQUFRLEdBQUcwckYsT0FBTyxDQUFDNW9HLEtBQUssQ0FBQ0MsR0FBRyxDQUFDaWQsUUFBUSxHQUFHMUksSUFBSSxHQUFHbzBGLE9BQU8sQ0FDOUUsQ0FBQzVvRyxLQUFLLENBQUNDLEdBQUcsQ0FBQ2lkLFFBQVE7QUFDdEI7O0FBRUc7TUFDSCxNQUFNMnJGLGtCQUFrQixHQUFHLElBQUksQ0FBQzU5RixJQUFJLENBQUM0RixPQUFPLENBQ3pDdFEsSUFBYyxJQUFLQSxJQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDaWQsUUFBUSxLQUFLQSxRQUFRLEVBQ3hELElBQUksQ0FBQ3NrRixlQUFlLENBQUN2NUcsQ0FBQyxDQUFDLENBQ3hCO0FBQ0Q7QUFDQSxXQUFLLElBQUlrVyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcwcUcsa0JBQWtCLENBQUMvZ0gsTUFBTSxFQUFFcVcsQ0FBQyxFQUFFLEVBQUU7QUFDbEQ7QUFDaUQ7QUFDakQsY0FBTTJxRyxhQUFhLEdBQ2pCLElBQUksQ0FBQ3BILFFBQVEsQ0FBQ21ILGtCQUFrQixDQUFDMXFHLENBQUMsQ0FBQyxDQUFDNkIsS0FBSyxDQUFDQyxHQUFHLENBQUNrbkcsYUFBYSxDQUFDLElBQzVELElBQUksQ0FBQ3pGLFFBQVEsQ0FBQ21ILGtCQUFrQixDQUFDMXFHLENBQUMsQ0FBQyxDQUFDNkIsS0FBSyxDQUFDQyxHQUFHLENBQUNxb0csd0JBQXdCLENBQUM7QUFDekU7QUFDQSxjQUFNdG5FLGNBQWMsR0FBRzZuRSxrQkFBa0IsQ0FBQzFxRyxDQUFDLENBQUMsQ0FBQzZSLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsUUFBUTtBQUNqRSxhQUFLLElBQUkxUixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcwaUMsY0FBYyxDQUFDbDVDLE1BQU0sRUFBRXdXLENBQUMsRUFBRSxFQUFFO0FBQzlDOzs7QUFHRztBQUNILGdCQUFNeXFHLGFBQWEsR0FBRyxJQUFJLENBQUNySCxRQUFRLENBQUMxZ0UsY0FBYyxDQUFDMWlDLENBQUMsQ0FBQyxDQUFDMEIsS0FBSyxDQUFDQyxHQUFHLENBQUNrbkcsYUFBYSxDQUFDO0FBQzlFO0FBQ0EsZ0JBQU02QixrQkFBa0IsR0FDdEIsSUFBSSxDQUFDdEgsUUFBUSxDQUFDMWdFLGNBQWMsQ0FBQzFpQyxDQUFDLENBQUMsQ0FBQzBCLEtBQUssQ0FBQ0MsR0FBRyxDQUFDcW9HLHdCQUF3QixDQUFDO0FBQ3JFO1VBQ0EsSUFBSSxDQUFDUyxhQUFhLEVBQUU7WUFDbEIvbkUsY0FBYyxDQUFDMWlDLENBQUMsQ0FBQyxDQUFDMEIsS0FBSyxDQUFDdGUsS0FBSyxHQUFHc25ILGtCQUFrQixhQUFsQkEsa0JBQWtCLHVCQUFsQkEsa0JBQWtCLENBQUVubUgsS0FBSztBQUN6RDtBQUNGLFdBQUMsTUFBTSxJQUNMa21ILGFBQWEsQ0FBQ3I0RyxNQUFNLEtBQUssUUFBUSxJQUNqQ3E0RyxhQUFhLENBQUNyNEcsTUFBTSxLQUFLLE9BQU8sRUFDaEM7WUFDQXN3QyxjQUFjLENBQUMxaUMsQ0FBQyxDQUFDLENBQUMwQixLQUFLLENBQUN0ZSxLQUFLLEdBQUdxbkgsYUFBYSxDQUFDbG1ILEtBQUs7QUFDbkQ7QUFDRixXQUFDLE1BQU0sSUFBSWttSCxhQUFhLENBQUNyNEcsTUFBTSxLQUFLLE9BQU8sRUFBRTtBQUMzQztBQUNBLGdCQUFJbzRHLGFBQWEsRUFBRTtBQUNqQixrQkFBSUEsYUFBYSxDQUFDcDRHLE1BQU0sS0FBSyxRQUFRLEVBQUU7Z0JBQ3JDc3dDLGNBQWMsQ0FBQzFpQyxDQUFDLENBQUMsQ0FBQzBCLEtBQUssQ0FBQ3RlLEtBQUssR0FBR29uSCxhQUFhLENBQUNqbUgsS0FBSztBQUNuRDtBQUNGLGVBQUMsTUFBTSxJQUFJaW1ILGFBQWEsQ0FBQ3A0RyxNQUFNLEtBQUssT0FBTyxFQUFFO0FBQzNDO0FBQ0Esc0JBQU11NEcsY0FBYyxHQUNsQixJQUFJLENBQUNoK0YsSUFBSSxDQUNOK0IsWUFBWSxDQUFDNjdGLGtCQUFrQixDQUFDMXFHLENBQUMsQ0FBQyxDQUFDLENBQ25DZ1EsSUFBSSxDQUNGdHJCLEtBQWUsSUFDZCxJQUFJLENBQUNpcUIsY0FBYyxDQUFDanFCLEtBQUssQ0FBQ21kLEtBQUssQ0FBQ0MsR0FBRyxDQUFDLEtBQ3BDMEgsV0FBVyxDQUFDNjdGLGFBQWEsQ0FDNUIsSUFBSXFGLGtCQUFrQixDQUFDMXFHLENBQUMsQ0FBQztBQUM5QjtBQUNBLHNCQUFNemMsS0FBSyxHQUFHLElBQUksQ0FBQ2dnSCxRQUFRLENBQUN1SCxjQUFjLENBQUNqcEcsS0FBSyxDQUFDQyxHQUFHLENBQUNrbkcsYUFBYSxDQUFDO2dCQUNuRW5tRSxjQUFjLENBQUMxaUMsQ0FBQyxDQUFDLENBQUMwQixLQUFLLENBQUN0ZSxLQUFLLEdBQUdBLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFbUIsS0FBSztBQUM5QztBQUNGO0FBQ0Y7QUFDRjtBQUNGO0FBQ0Y7QUFDRjtBQUVRLFFBQU1xL0csZ0JBQWdCQSxDQUFDbjZELEdBQWtCLEVBQUV4bkMsSUFBYztBQUMvRDtBQUNBO0FBQ0FBLFFBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUMvSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNndUcsT0FBTyxDQUFDbjlELEdBQUcsQ0FBQzd3QyxNQUFNLENBQUM7QUFDdEQ7QUFDQTtBQUNBcUosUUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ0UsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDK2tHLE9BQU8sQ0FBQ245RCxHQUFHLENBQUM1bkMsTUFBTSxDQUFDO0FBQ3hEO0FBRVEsUUFBTWdpRyxVQUFVQSxDQUFDcDZELEdBQWtCLEVBQUV4bkMsSUFBYztJQUN6RCxJQUFJO01BQ0YsSUFBSSxDQUFDd25DLEdBQUcsRUFBRTtBQUVWLFVBQUk2OEQsWUFBWSxHQUFHLElBQUksQ0FBQ0MsZUFBZSxDQUFDOThELEdBQUcsQ0FBQztBQUU1QyxVQUFJcitDLEtBQUssQ0FBQzBvQyxPQUFPLENBQUN3eUUsWUFBWSxDQUFDLEVBQUVBLFlBQVksR0FBR0EsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUMvRCxJQUFJLENBQUNBLFlBQVksRUFBRTtNQUVuQixNQUFNUyxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUNoQixnQkFBZ0IsQ0FBQ08sWUFBNkIsQ0FBQztBQUN0RSxZQUFNRSxVQUFVLEdBQWEsSUFBSSxDQUFDNzVGLElBQUksQ0FBQzZFLEtBQUssQ0FBQztRQUMzQy91QixFQUFFLEVBQUV3ZixJQUFJLENBQUNQLEtBQUssQ0FBQzZDLFNBQVMsR0FDcEIsSUFBSSxDQUFDcWpHLGFBQWEsQ0FBQ2IsR0FBRyxDQUFDdGtILEVBQUUsRUFBRSxJQUFJLENBQUM0Z0gsZUFBZSxFQUFFLENBQUMsR0FDbEQsSUFBSSxDQUFDOEMsU0FBUyxDQUFDWSxHQUFHLENBQUM7QUFDdkJwbEcsV0FBRyxFQUFFb2xHLEdBQUc7QUFDUngzRixjQUFNLEVBQUUsS0FBSztBQUNibUMsZ0JBQVEsRUFBRSxFQUFFO0FBQ1osWUFBSXpQLElBQUksQ0FBQ1AsS0FBSyxDQUFDNkMsU0FBUyxJQUFJO0FBQUVBLG1CQUFTLEVBQUV0QyxJQUFJLENBQUNQLEtBQUssQ0FBQzZDO1NBQVc7QUFDaEUsUUFBQztBQUNGLFlBQU0sSUFBSSxDQUFDOGhHLGFBQWEsQ0FBQ1UsR0FBRyxFQUFFUCxVQUFVLENBQUM7QUFDekMsVUFBSSxDQUFDbjJGLE9BQU8sQ0FBQ20yRixVQUFVLEVBQUV2a0csSUFBSSxDQUFDO0FBRTlCO01BQ0EsT0FBT3duQyxHQUFHLENBQUNtaEUsS0FBSztNQUNoQixPQUFPbmhFLEdBQUcsQ0FBQ29oRSxLQUFLO01BQ2hCLE9BQU9waEUsR0FBRyxDQUFDcWhFLEtBQUs7TUFDaEIsT0FBT3JoRSxHQUFHLENBQUNzaEUsS0FBSztNQUNoQixPQUFPdGhFLEdBQUcsQ0FBQ3VoRSxPQUFPO01BQ2xCLE9BQU92aEUsR0FBRyxDQUFDd2hFLE9BQU87TUFDbEIsT0FBT3hoRSxHQUFHLENBQUN5aEUsUUFBUTtNQUNuQixPQUFPemhFLEdBQUcsQ0FBQzBoRSxRQUFRO0tBQ3BCLENBQUMsT0FBTzcwRixDQUFDLEVBQUU7TUFDVnR4QixNQUFNLENBQUNhLElBQUksQ0FBQyw4QkFBOEI0akQsR0FBRyxDQUFDaG5ELEVBQUUsRUFBRSxDQUFDO0FBQ25ELFlBQU02ekIsQ0FBQztBQUNUO0FBQ0Y7QUFFUSxRQUFNMnRGLFVBQVVBLENBQUN4NkQsR0FBa0IsRUFBRXhuQyxJQUFjO0lBQ3pELElBQUksQ0FBQ3duQyxHQUFHLEVBQUU7QUFDVixRQUFJLENBQUNBLEdBQUcsQ0FBQ3JuQixRQUFRLElBQUtxbkIsR0FBRyxDQUFDcm5CLFFBQTBCLENBQUM1NEIsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNqRXhFLFlBQU0sQ0FBQ2EsSUFBSSxDQUNULGFBQWE0akQsR0FBRyxDQUFDaG5ELEVBQUUsWUFBWWduRCxHQUFHLENBQUNnOUQsWUFBWSxrREFBa0QsQ0FDbEc7QUFDRHhrRyxVQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDeWdCLFFBQVEsR0FBRyxFQUFFO0FBQzVCbmdCLFVBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUN5cEcsS0FBSyxHQUFHLEVBQUU7QUFDekJucEcsVUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ0UsTUFBTSxHQUFHLEVBQUU7QUFDMUJJLFVBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUMwcEcsYUFBYSxHQUFHLEVBQUU7QUFDakM7QUFDRjtBQUNBLFFBQUksQ0FBQzVoRSxHQUFHLENBQUMyaEUsS0FBSyxJQUFLM2hFLEdBQUcsQ0FBQzJoRSxLQUF1QixDQUFDNWhILE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDM0R4RSxZQUFNLENBQUNhLElBQUksQ0FDVCxhQUFhNGpELEdBQUcsQ0FBQ2huRCxFQUFFLFlBQVlnbkQsR0FBRyxDQUFDZzlELFlBQVksdUNBQXVDLENBQ3ZGO0FBQ0R4a0csVUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ3lnQixRQUFRLEdBQUcsRUFBRTtBQUM1Qm5nQixVQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDeXBHLEtBQUssR0FBRyxFQUFFO0FBQ3pCbnBHLFVBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUNFLE1BQU0sR0FBRyxFQUFFO0FBQzFCSSxVQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDMHBHLGFBQWEsR0FBRyxFQUFFO0FBQ2pDO0FBQ0Y7QUFFQTtBQUNBO0FBQ0FwcEcsUUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ3lnQixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUN3a0YsT0FBTyxDQUFDbjlELEdBQUcsQ0FBQ3JuQixRQUFRLENBQUM7QUFDMUQ7QUFDQTtBQUNBbmdCLFFBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUN5cEcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDeEUsT0FBTyxDQUFDbjlELEdBQUcsQ0FBQzJoRSxLQUFLLENBQUM7QUFDcEQ7QUFDQTtBQUNBbnBHLFFBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUNFLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQytrRyxPQUFPLENBQUNuOUQsR0FBRyxDQUFDNW5DLE1BQU0sQ0FBQztBQUN0RDtBQUNBO0FBQ0FJLFFBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUMwcEcsYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDekUsT0FBTyxDQUFDbjlELEdBQUcsQ0FBQzRoRSxhQUFhLENBQUM7QUFDdEU7QUFFUSxRQUFNN0YsWUFBWUEsQ0FBQy83RCxHQUFrQixFQUFFeG5DLElBQWM7SUFDM0QsSUFBSTtNQUNGLElBQUksQ0FBQ3duQyxHQUFHLEVBQUU7QUFFVixVQUFJNjhELFlBQVksR0FBRyxJQUFJLENBQUNDLGVBQWUsQ0FBQzk4RCxHQUFHLENBQUM7QUFFNUMsVUFBSXIrQyxLQUFLLENBQUMwb0MsT0FBTyxDQUFDd3lFLFlBQVksQ0FBQyxFQUFFQSxZQUFZLEdBQUdBLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDL0QsSUFBSSxDQUFDQSxZQUFZLEVBQUU7TUFFbkIsTUFBTVMsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDaEIsZ0JBQWdCLENBQUNPLFlBQTZCLENBQUM7QUFDdEUsWUFBTUUsVUFBVSxHQUFhLElBQUksQ0FBQzc1RixJQUFJLENBQUM2RSxLQUFLLENBQUM7UUFDM0MvdUIsRUFBRSxFQUFFd2YsSUFBSSxDQUFDUCxLQUFLLENBQUM2QyxTQUFTLEdBQ3BCLElBQUksQ0FBQ3FqRyxhQUFhLENBQUNiLEdBQUcsQ0FBQ3RrSCxFQUFFLEVBQUUsSUFBSSxDQUFDNGdILGVBQWUsRUFBRSxDQUFDLEdBQ2xELElBQUksQ0FBQzhDLFNBQVMsQ0FBQ1ksR0FBRyxDQUFDO0FBQ3ZCcGxHLFdBQUcsRUFBRW9sRyxHQUFHO0FBQ1J4M0YsY0FBTSxFQUFFLEtBQUs7QUFDYm1DLGdCQUFRLEVBQUUsRUFBRTtBQUNaLFlBQUl6UCxJQUFJLENBQUNQLEtBQUssQ0FBQzZDLFNBQVMsSUFBSTtBQUFFQSxtQkFBUyxFQUFFdEMsSUFBSSxDQUFDUCxLQUFLLENBQUM2QztTQUFXO0FBQ2hFLFFBQUM7QUFDRixZQUFNLElBQUksQ0FBQzhoRyxhQUFhLENBQUNVLEdBQUcsRUFBRVAsVUFBVSxDQUFDO0FBQ3pDLFVBQUksQ0FBQ24yRixPQUFPLENBQUNtMkYsVUFBVSxFQUFFdmtHLElBQUksQ0FBQztLQUMvQixDQUFDLE9BQU9xVSxDQUFDLEVBQUU7TUFDVnR4QixNQUFNLENBQUNhLElBQUksQ0FBQyxnQ0FBZ0M0akQsR0FBRyxDQUFDaG5ELEVBQUUsRUFBRSxDQUFDO0FBQ3JELFlBQU02ekIsQ0FBQztBQUNUO0FBQ0Y7QUFFUSxRQUFNdXVGLFVBQVVBLENBQUN5RyxJQUFtQixFQUFFOTdGLEtBQWU7QUFDM0Q7QUFDRjtBQUVRLFFBQU11MUYsZUFBZUEsQ0FBQ3Q3RCxHQUFrQixFQUFFeG5DLElBQWM7SUFDOUQsTUFBTStsRyxhQUFhLEdBQUcsQ0FBQyxHQUFJLElBQUksQ0FBQ3pCLGVBQWUsQ0FBQzk4RCxHQUFHLENBQXFCLENBQUM7QUFDekUsU0FBSyxNQUFNNjhELFlBQVksSUFBSTBCLGFBQWEsRUFBRTtBQUN4QyxZQUFNOUIsU0FBUyxHQUFhLElBQUksQ0FBQ3Y1RixJQUFJLENBQUM2RSxLQUFLLENBQUM7QUFDMUMvdUIsVUFBRSxFQUFFLElBQUksQ0FBQzBqSCxTQUFTLENBQUNHLFlBQVksQ0FBQztBQUNoQzNrRyxXQUFHLEVBQUUya0csWUFBWTtBQUNqQi8yRixjQUFNLEVBQUUsS0FBSztBQUNibUMsZ0JBQVEsRUFBRTtBQUNYLFFBQUM7QUFDRixVQUFJLENBQUNyQixPQUFPLENBQUM2MUYsU0FBUyxFQUFFamtHLElBQUksQ0FBQztBQUM3QixZQUFNLElBQUksQ0FBQ29rRyxhQUFhLENBQUNDLFlBQVksRUFBRUosU0FBUyxDQUFDO0FBQ25EO0FBQ0E7Ozs7O0FBS0c7QUFDSCxVQUFNcUYsT0FBTyxHQUFHMTdELElBQUksQ0FBQ3IrQixLQUFLLENBQUNxK0IsSUFBSSxDQUFDQyxTQUFTLENBQUNyRyxHQUFHLENBQUMsQ0FBQztBQUMvQzhoRSxXQUFPLENBQUN6Z0UsS0FBSyxHQUFHeWdFLE9BQU8sQ0FBQ0MsVUFBVSxDQUFDMWdFLEtBQUs7SUFDeEMsTUFBTTJnRSxXQUFXLEdBQUcsSUFBSSxDQUFDbkUsbUJBQW1CLENBQUNpRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsWUFBUUUsV0FBVztBQUNqQixXQUFLLGlCQUFpQjtBQUNwQkYsZUFBTyxDQUFDemdFLEtBQUssQ0FBQ3hoQixNQUFNLEdBQUdpaUYsT0FBTyxDQUFDLzJGLFFBQVE7QUFDdkM7QUFDRixXQUFLLG1CQUFtQjtBQUN0QisyRixlQUFPLENBQUN6Z0UsS0FBSyxDQUFDeGhCLE1BQU0sR0FBR2lpRixPQUFPLENBQUNHLFlBQVk7QUFDM0M7QUFDRixXQUFLLGdCQUFnQjtBQUNuQkgsZUFBTyxDQUFDemdFLEtBQUssQ0FBQ3hoQixNQUFNLEdBQUdpaUYsT0FBTyxDQUFDRyxZQUFZO0FBQzNDO0FBQ0o7QUFDQUgsV0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLG9CQUFvQjtBQUM5QyxVQUFNSSxRQUFRLEdBQWEsSUFBSSxDQUFDaC9GLElBQUksQ0FBQzZFLEtBQUssQ0FBQztBQUN6Qy91QixRQUFFLEVBQUUyYyxTQUFTLENBQUNDLFlBQVksRUFBRTtBQUM1QnNDLFNBQUcsRUFBRTRwRyxPQUFPO0FBQ1poOEYsWUFBTSxFQUFFLEtBQUs7QUFDYm1DLGNBQVEsRUFBRTtBQUNYLE1BQUM7QUFDRixRQUFJLENBQUNyQixPQUFPLENBQUNzN0YsUUFBUSxFQUFFMXBHLElBQUksQ0FBQztBQUM1QixVQUFNLElBQUksQ0FBQ29rRyxhQUFhLENBQUNrRixPQUFPLEVBQUVJLFFBQVEsQ0FBQztBQUM3QztBQUVRLFFBQU16SCxXQUFXQSxDQUFDb0gsSUFBbUIsRUFBRTk3RixLQUFlO0FBQzVEO0FBQ0Y7QUFDUSxRQUFNMjBGLFVBQVVBLENBQUNtSCxJQUFtQixFQUFFOTdGLEtBQWU7QUFDM0Q7QUFDRjtBQUVRLFFBQU00MEYsY0FBY0EsQ0FBQzM2RCxHQUFrQixFQUFFeG5DLElBQWM7QUFDN0RBLFFBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUNwZCxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUNxaUgsT0FBTyxDQUN2Q245RCxHQUFHLENBQUNsbEQsS0FBd0MsQ0FDN0M7QUFDSDtBQUVRLFFBQU04L0csU0FBU0EsQ0FBQ2lILElBQW1CLEVBQUU5N0YsS0FBZTtBQUMxRDtBQUNGO0FBRVEsUUFBTTgwRixlQUFlQSxDQUFDNzZELEdBQWtCLEVBQUV4bkMsSUFBYztBQUM5REEsUUFBSSxDQUFDUCxLQUFLLENBQUNrcUcsV0FBVyxHQUFHLEVBQUU7QUFDM0IsU0FDRSxJQUFJL3JHLENBQUMsR0FBRyxDQUFDLEVBQ1RBLENBQUMsR0FBSTRwQyxHQUFnRCxDQUFDb2lFLFFBQVEsQ0FBQ3JpSCxNQUFNLEVBQ3JFcVcsQ0FBQyxFQUFFLEVBQ0g7QUFDQSxVQUFJZ29GLE9BQU8sR0FBSXArQyxHQUFnRCxDQUFDb2lFLFFBQVEsQ0FBQ2hzRyxDQUFDLENBQUM7QUFDM0U7QUFDQSxVQUFJLENBQUMsSUFBSSxDQUFDdW1HLHlCQUF5QixDQUFDdmUsT0FBTyxDQUFDLEVBQUU7QUFDNUNBLGVBQU8sR0FBRyxJQUFJLENBQUMwZSxlQUFlLENBQUMxZSxPQUFPLENBQWtCO1FBQ3hELElBQUlBLE9BQU8sQ0FBQ2llLFlBQVksRUFBRTtBQUN4QmplLGlCQUFPLEdBQUcsTUFBTSxJQUFJLENBQUNrZSxnQkFBZ0IsQ0FBQ2xlLE9BQU8sQ0FBQztBQUNoRDtBQUNGO0FBQ0EsWUFBTTJlLFVBQVUsR0FBYSxJQUFJLENBQUM3NUYsSUFBSSxDQUFDNkUsS0FBSyxDQUFDO0FBQzNDL3VCLFVBQUUsRUFBRSxJQUFJLENBQUMwakgsU0FBUyxDQUFDdGUsT0FBTyxDQUFDO0FBQzNCbG1GLFdBQUcsRUFBRWttRixPQUFPO0FBQ1p0NEUsY0FBTSxFQUFFLEtBQUs7QUFDYm1DLGdCQUFRLEVBQUU7QUFDWCxRQUFDO0FBQ0YsWUFBTSxJQUFJLENBQUMyMEYsYUFBYSxDQUFDeGUsT0FBTyxFQUFFMmUsVUFBVSxDQUFDO0FBQzdDO01BQ0F2a0csSUFBSSxDQUFDUCxLQUFLLENBQUNrcUcsV0FBVyxDQUFDcHFILElBQUksQ0FBQ2dsSCxVQUFVLENBQUM7QUFDekM7QUFDRjtBQUVRLFFBQU1qQyxXQUFXQSxDQUFDOTZELEdBQWtCLEVBQUV4bkMsSUFBYztBQUMxRCxRQUFJcWtHLFlBQVksR0FBa0IsSUFBSSxDQUFDQyxlQUFlLENBQUM5OEQsR0FBRyxDQUFrQjtJQUM1RSxJQUFJLENBQUM2OEQsWUFBWSxFQUFFO0FBQ2pCdGhILFlBQU0sQ0FBQ2EsSUFBSSxDQUNULFVBQVU0akQsR0FBRyxDQUFDaG5ELEVBQUUsWUFBWWduRCxHQUFHLENBQUNnOUQsWUFBWSwyQ0FBMkMsQ0FDeEY7QUFDRDtBQUNGO0FBQ0F4a0csUUFBSSxDQUFDUCxLQUFLLENBQUNrcUcsV0FBVyxHQUFHLEVBQUU7SUFDM0J0RixZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUNQLGdCQUFnQixDQUFDdDhELEdBQUcsQ0FBQzY4RCxZQUE2QixDQUFDO0lBQzdFQSxZQUFZLENBQUNqa0csS0FBSyxHQUFHaWtHLFlBQVksQ0FBQ2prRyxLQUFLLElBQUlvbkMsR0FBRyxDQUFDcG5DLEtBQUs7QUFDcEQsVUFBTW1rRyxVQUFVLEdBQWEsSUFBSSxDQUFDNzVGLElBQUksQ0FBQzZFLEtBQUssQ0FBQztBQUMzQy91QixRQUFFLEVBQUUsSUFBSSxDQUFDMGpILFNBQVMsQ0FBQ0csWUFBWSxDQUFDO0FBQ2hDM2tHLFNBQUcsRUFBRTJrRyxZQUFZO0FBQ2pCLzJGLFlBQU0sRUFBRSxLQUFLO0FBQ2JtQyxjQUFRLEVBQUU7QUFDWCxNQUFDO0FBQ0YsVUFBTSxJQUFJLENBQUMyMEYsYUFBYSxDQUFDQyxZQUFZLEVBQUVFLFVBQVUsQ0FBQztBQUNsRDtJQUNBdmtHLElBQUksQ0FBQ1AsS0FBSyxDQUFDa3FHLFdBQVcsQ0FBQ3BxSCxJQUFJLENBQUNnbEgsVUFBVSxDQUFDO0FBQ3pDO0FBRVEsUUFBTWhDLFlBQVlBLENBQUM4RyxJQUFtQixFQUFFOTdGLEtBQWU7QUFDN0Q7QUFDRjtBQUVRLFFBQU1pMUYsU0FBU0EsQ0FBQzZHLElBQW1CLEVBQUU5N0YsS0FBZTtBQUMxRDtBQUNGO0FBRVEsUUFBTWsxRixhQUFhQSxDQUFDNEcsSUFBbUIsRUFBRTk3RixLQUFlO0FBQzlEO0FBQ0Y7QUFFQTtBQUNPczhGLGtCQUFnQkEsR0FBQTs7QUFDckI7QUFDQSxVQUFNQyxnQ0FBZ0MsR0FDcEN6aUcseUJBQXlCLENBQUNySyxLQUFLLEVBQUU7QUFDbkM7QUFDQThzRyxvQ0FBZ0MsQ0FBQ3QvRyxNQUFNLENBQ3JDNmMseUJBQXlCLENBQUM1YyxPQUFPLENBQUMyYyxXQUFXLENBQUNNLEtBQUssQ0FBQyxFQUNwRCxDQUFDLENBQ0Y7QUFDRCxVQUFNd0csVUFBVSxHQUFHLENBQUE1UyxFQUFBLE9BQUksQ0FBQ29QLElBQUksQ0FBQ2dGLGFBQWEsQ0FBQyxJQUFJLENBQUNzekIsT0FBTyxDQUFDdmpDLEtBQUssQ0FBQ2pmLEVBQUUsQ0FBQyxNQUFFLFFBQUE4YSxFQUFBLHVCQUFBQSxFQUFBLENBQUF3UixhQUFhLEVBQUU7QUFDbEYsU0FBSyxNQUFNcGxCLENBQUMsSUFBSXdtQixVQUFVLEVBQUU7TUFDMUIsTUFBTTY3RixVQUFVLEdBQUcsSUFBSSxDQUFDci9GLElBQUksQ0FBQ2dELE1BQU0sQ0FBQ2htQixDQUFDLENBQUM7TUFDdEMsSUFBSSxDQUFDcWlILFVBQVUsRUFBRTtBQUNmaG5ILGNBQU0sQ0FBQ2EsSUFBSSxDQUFDLENBQTBCOEQsMEJBQUMsYUFBYSxDQUFDO0FBQ3JEO0FBQ0Y7QUFDQSxZQUFNcWhCLFdBQVcsR0FBRyxJQUFJLENBQUN3RCxjQUFjLENBQUN3OUYsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDdHFHLEtBQUssQ0FBQ0MsR0FBRyxDQUFnQjtBQUMvRSxVQUFJLENBQUNvcUcsZ0NBQWdDLENBQUNubUgsUUFBUSxDQUFDb2xCLFdBQVcsQ0FBQyxFQUFFO0FBRTdELFdBQUssTUFBTW9MLENBQUMsSUFBSWpHLFVBQVUsQ0FBQ3htQixDQUFDLENBQUMsRUFBRTtBQUM3QjtRQUNBd21CLFVBQVUsQ0FBQ3htQixDQUFDLENBQUMsQ0FBQ3lzQixDQUFDLENBQUMsQ0FBQzFVLEtBQUssQ0FBQ0MsR0FBRyxHQUFHc3FHLGVBQWUsQ0FBQzk3RixVQUFVLENBQUN4bUIsQ0FBQyxDQUFDLENBQUN5c0IsQ0FBQyxDQUFDLENBQUMxVSxLQUFLLENBQUNDLEdBQUcsQ0FBQztBQUMxRTtBQUNGO0FBQ0EsV0FBT3phLE9BQU8sQ0FBQ0MsT0FBTyxFQUFFO0FBQzFCO0FBQ0Q7O0lDcm9DVytrSDtBQUFaLFdBQVlBLFdBQVc7QUFDckJBLGFBQUEsa0NBQThCO0FBQzlCQSxhQUFBLG9DQUFnQztBQUNoQ0EsYUFBQSxnQ0FBNEI7QUFDNUJBLGFBQUEsMkJBQXVCO0FBQ3ZCQSxhQUFBLDJCQUF1QjtBQUN6QixDQUFDLEVBTldBLFdBQVcsS0FBWEEsV0FBVyxHQU10QjtBQVVLLE1BQWdCQyxNQUFPLFNBQVFqckgsWUFBWTtBQU8vQ0MsYUFBc0JBLENBQUF3d0YsUUFBZ0IsRUFBRXk2QixZQUFzQjtBQUM1RCxTQUFLLEVBQUU7SUFDUCxJQUFJLENBQUNDLFNBQVMsR0FBRzE2QixRQUFRO0lBQ3pCLElBQUksQ0FBQzI2QixhQUFhLEdBQUdGLFlBQVk7QUFDbkM7QUFFTy9xSCxJQUFFQSxDQUNQeW1ELFNBQVksRUFDWnZtRCxRQUE4QztBQUU5QyxTQUFLLENBQUNGLEVBQUUsQ0FBQ3ltRCxTQUFTLEVBQUV2bUQsUUFBUSxDQUFDO0FBQy9CO0FBSU9XLFNBQU9BLEdBQUE7SUFDWixLQUFLLENBQUNBLE9BQU8sRUFBRTtBQUNqQjtBQUNEOztBQzNDRDs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU15MEYsUUFBTSxHQUFHLElBQUluckYsT0FBTyxFQUFFO0FBQzVCLE1BQU1pd0YsUUFBTSxHQUFHLElBQUlqd0YsT0FBTyxFQUFFO0FBQzVCLE1BQU1rd0YsUUFBTSxHQUFHLElBQUlsd0YsT0FBTyxFQUFFO0FBQzVCLE1BQU0rZ0gsUUFBTSxHQUFHLElBQUkvZ0gsT0FBTyxFQUFFO0FBQzVCLE1BQU1naEgsT0FBTyxHQUFHLElBQUloaEgsT0FBTyxFQUFFO0FBQzdCLE1BQU1paEgsU0FBUyxHQUFHLElBQUk3MkUsUUFBUSxFQUFFO0FBRWpCLE1BQU04MkUsdUJBQXVCLENBQUM7QUFDM0M7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFLFNBQU9DLGVBQWVBLENBQ3BCaHBGLFNBQVMsRUFDVHluRixLQUFLLEVBQ0xocEYsUUFBUTtFQUVSd3FGLGtCQUFrQixFQUNsQkMsVUFBVSxFQUNWO0FBQ0EsUUFBSTU0QyxDQUFDLEdBQUdtM0MsS0FBSyxDQUFDam1ILEdBQUcsQ0FBQ3crQixTQUFTLENBQUM7QUFDNUIsUUFBSXN3QyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVsQjtBQUNBO0lBQ0EsU0FBUzY0QyxPQUFPQSxDQUFDN21GLENBQUMsRUFBRTtBQUNsQixhQUFPdEMsU0FBUyxHQUFHc0MsQ0FBQyxHQUFHLENBQUM7QUFDMUI7O0FBRUE7QUFDQSxhQUFTOG1GLENBQUNBLENBQUM5bUYsQ0FBQyxFQUFFL1EsTUFBTSxFQUFFO0FBQ3BCLFlBQU10WCxLQUFLLEdBQUd3dEcsS0FBSyxDQUFDam1ILEdBQUcsQ0FBQzJuSCxPQUFPLENBQUM3bUYsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO01BQ3ZDL1EsTUFBTSxDQUFDanBCLENBQUMsR0FBR20yQixRQUFRLENBQUNqOUIsR0FBRyxDQUFDeVksS0FBSyxDQUFDO01BQzlCc1gsTUFBTSxDQUFDaHBCLENBQUMsR0FBR2syQixRQUFRLENBQUNqOUIsR0FBRyxDQUFDeVksS0FBSyxHQUFHLENBQUMsQ0FBQztNQUNsQ3NYLE1BQU0sQ0FBQy9vQixDQUFDLEdBQUdpMkIsUUFBUSxDQUFDajlCLEdBQUcsQ0FBQ3lZLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbEMsYUFBT3NYLE1BQU07QUFDZjs7QUFFQTtJQUNBLE1BQU04M0YsVUFBVSxHQUFHUixPQUFPO0lBQzFCLEtBQUssSUFBSVMsRUFBRSxHQUFHaDVDLENBQUMsR0FBRyxDQUFDLEVBQUVpNUMsRUFBRSxHQUFHLENBQUMsRUFBRUEsRUFBRSxHQUFHajVDLENBQUMsRUFBRWc1QyxFQUFFLEdBQUdDLEVBQUUsRUFBRUEsRUFBRSxFQUFFLEVBQUU7QUFDbEQsWUFBTUMsSUFBSSxHQUFHSixDQUFDLENBQUNFLEVBQUUsRUFBRXQyQixRQUFNLENBQUM7QUFDMUIsWUFBTXkyQixJQUFJLEdBQUdMLENBQUMsQ0FBQ0csRUFBRSxFQUFFenhCLFFBQU0sQ0FBQztNQUMxQnV4QixVQUFVLENBQUMvZ0gsQ0FBQyxJQUFJLENBQUNtaEgsSUFBSSxDQUFDbGhILENBQUMsR0FBR2loSCxJQUFJLENBQUNqaEgsQ0FBQyxLQUFLaWhILElBQUksQ0FBQ2hoSCxDQUFDLEdBQUdpaEgsSUFBSSxDQUFDamhILENBQUMsQ0FBQyxDQUFDO01BQ3RENmdILFVBQVUsQ0FBQzlnSCxDQUFDLElBQUksQ0FBQ2toSCxJQUFJLENBQUNqaEgsQ0FBQyxHQUFHZ2hILElBQUksQ0FBQ2hoSCxDQUFDLEtBQUtnaEgsSUFBSSxDQUFDbGhILENBQUMsR0FBR21oSCxJQUFJLENBQUNuaEgsQ0FBQyxDQUFDLENBQUM7TUFDdEQrZ0gsVUFBVSxDQUFDN2dILENBQUMsSUFBSSxDQUFDaWhILElBQUksQ0FBQ25oSCxDQUFDLEdBQUdraEgsSUFBSSxDQUFDbGhILENBQUMsS0FBS2toSCxJQUFJLENBQUNqaEgsQ0FBQyxHQUFHa2hILElBQUksQ0FBQ2xoSCxDQUFDLENBQUMsQ0FBQztBQUN4RDtJQUNBOGdILFVBQVUsQ0FBQ3Z6RixTQUFTLEVBQUU7O0FBRXRCO0lBQ0EsTUFBTXZELElBQUksR0FBRyxFQUFFLENBQUM7SUFDaEIsTUFBTW1aLElBQUksR0FBRyxFQUFFLENBQUM7SUFDaEIsS0FBSyxJQUFJcnZCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2kwRCxDQUFDLEVBQUVqMEQsQ0FBQyxFQUFFLEVBQUU7QUFDMUJrVyxVQUFJLENBQUNsVyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxHQUFHLENBQUM7QUFDZnF2QixVQUFJLENBQUNydkIsQ0FBQyxDQUFDLEdBQUdBLENBQUMsR0FBRyxDQUFDO0FBQ2pCO0FBQ0FrVyxRQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcrOUMsQ0FBQyxHQUFHLENBQUM7QUFDZjVrQyxRQUFJLENBQUM0a0MsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7O0FBRWY7SUFDQSxJQUFJcDBELENBQUMsR0FBRyxDQUFDO0lBQ1QsSUFBSWdvRyxPQUFPLEdBQUcsQ0FBQztJQUNmLElBQUl3RixXQUFXLEdBQUcsQ0FBQztJQUNuQixPQUFPcDVDLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDYixJQUFJcTVDLEtBQUssR0FBRyxJQUFJOztBQUVoQjtBQUNBLFVBQUlyNUMsQ0FBQyxHQUFHLENBQUMsSUFBSTR6QyxPQUFPLEdBQUc1ekMsQ0FBQyxFQUFFO1FBQ3hCLE1BQU1zNUMsVUFBVSxHQUFHUixDQUFDLENBQUM3MkYsSUFBSSxDQUFDclcsQ0FBQyxDQUFDLEVBQUU4MkUsUUFBTSxDQUFDO0FBQ3JDLGNBQU02MkIsU0FBUyxHQUFHVCxDQUFDLENBQUNsdEcsQ0FBQyxFQUFFNDdFLFFBQU0sQ0FBQztRQUM5QixNQUFNZ3lCLFVBQVUsR0FBR1YsQ0FBQyxDQUFDMTlFLElBQUksQ0FBQ3h2QixDQUFDLENBQUMsRUFBRTY3RSxRQUFNLENBQUM7QUFFckMrd0IsaUJBQVMsQ0FBQ3JyRixDQUFDLENBQUM3ekIsSUFBSSxDQUFDZ2dILFVBQVUsQ0FBQztBQUM1QmQsaUJBQVMsQ0FBQ3ZpSCxDQUFDLENBQUNxRCxJQUFJLENBQUNpZ0gsU0FBUyxDQUFDO0FBQzNCZixpQkFBUyxDQUFDMXRHLENBQUMsQ0FBQ3hSLElBQUksQ0FBQ2tnSCxVQUFVLENBQUM7QUFFNUIsWUFBSWhCLFNBQVMsQ0FBQ2lCLGFBQWEsQ0FBQ1YsVUFBVSxDQUFDLEVBQUU7VUFDdkMsSUFBSXJqSCxDQUFDLEdBQUcwbEMsSUFBSSxDQUFDQSxJQUFJLENBQUN4dkIsQ0FBQyxDQUFDLENBQUM7VUFFckIsR0FBRztZQUNELElBQUk0c0csU0FBUyxDQUFDNW1GLGFBQWEsQ0FBQ2tuRixDQUFDLENBQUNwakgsQ0FBQyxFQUFFNGlILFFBQU0sQ0FBQyxDQUFDLEVBQUU7QUFDekNlLG1CQUFLLEdBQUcsS0FBSztBQUNiO0FBQ0Y7QUFFQTNqSCxhQUFDLEdBQUcwbEMsSUFBSSxDQUFDMWxDLENBQUMsQ0FBQztBQUNiLFdBQUMsUUFBUUEsQ0FBQyxLQUFLdXNCLElBQUksQ0FBQ3JXLENBQUMsQ0FBQztBQUN4QixTQUFDLE1BQU07QUFDTHl0RyxlQUFLLEdBQUcsS0FBSztBQUNmO0FBQ0Y7QUFFQSxVQUFJQSxLQUFLLEVBQUU7UUFDVCxNQUFNbHNGLENBQUMsR0FBR2dxRixLQUFLLENBQUNqbUgsR0FBRyxDQUFDMm5ILE9BQU8sQ0FBQ2p0RyxDQUFDLENBQUMsQ0FBQztBQUMvQixjQUFNM1YsQ0FBQyxHQUFHa2hILEtBQUssQ0FBQ2ptSCxHQUFHLENBQUMybkgsT0FBTyxDQUFDejlFLElBQUksQ0FBQ3h2QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLGNBQU1kLENBQUMsR0FBR3FzRyxLQUFLLENBQUNqbUgsR0FBRyxDQUFDMm5ILE9BQU8sQ0FBQzUyRixJQUFJLENBQUNyVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDK3NHLDBCQUFrQixDQUFDQyxVQUFVLEdBQUdRLFdBQVcsQ0FBQyxHQUFHanNGLENBQUM7UUFDaER3ckYsa0JBQWtCLENBQUNDLFVBQVUsR0FBR1EsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHbmpILENBQUM7UUFDcEQwaUgsa0JBQWtCLENBQUNDLFVBQVUsR0FBR1EsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHdHVHLENBQUM7QUFDcERzdUcsbUJBQVcsSUFBSSxDQUFDO1FBRWhCaCtFLElBQUksQ0FBQ25aLElBQUksQ0FBQ3JXLENBQUMsQ0FBQyxDQUFDLEdBQUd3dkIsSUFBSSxDQUFDeHZCLENBQUMsQ0FBQztRQUN2QnFXLElBQUksQ0FBQ21aLElBQUksQ0FBQ3h2QixDQUFDLENBQUMsQ0FBQyxHQUFHcVcsSUFBSSxDQUFDclcsQ0FBQyxDQUFDO0FBQ3ZCbzBELFNBQUMsRUFBRTtBQUNIcDBELFNBQUMsR0FBR3FXLElBQUksQ0FBQ3JXLENBQUMsQ0FBQztBQUNYZ29HLGVBQU8sR0FBRyxDQUFDO0FBQ2IsT0FBQyxNQUFNO0FBQ0xob0csU0FBQyxHQUFHd3ZCLElBQUksQ0FBQ3h2QixDQUFDLENBQUM7QUFDWGdvRyxlQUFPLEVBQUU7QUFDWDtBQUNGO0FBRUEsV0FBT3dGLFdBQVc7QUFDcEI7QUFDRjs7QUNwSEEsTUFBTTEyQixNQUFNLEdBQUcsSUFBSW5yRixPQUFPLEVBQUU7QUFDNUIsTUFBTWl3RixNQUFNLEdBQUcsSUFBSWp3RixPQUFPLEVBQUU7QUFDNUIsTUFBTWt3RixNQUFNLEdBQUcsSUFBSWx3RixPQUFPLEVBQUU7QUFDNUIsTUFBTStnSCxNQUFNLEdBQUcsSUFBSS9nSCxPQUFPLEVBQUU7QUFDNUIsTUFBTW1pSCxNQUFNLEdBQUcsSUFBSW5pSCxPQUFPLEVBQUU7QUFDNUIsTUFBTW9pSCxNQUFNLEdBQUcsSUFBSXBpSCxPQUFPLEVBQUU7QUFFdEIsTUFBT3FpSCx3QkFBeUIsU0FBUXZqRyxpQkFBaUI7QUFBL0RucEIsZ0JBQUE7O0FBQ1MsUUFBZSxDQUFBNGhILGVBQUEsR0FBb0MsRUFBRTtJQUVyRCxJQUFxQixDQUFBK0sscUJBQUEsR0FBRyxDQUFDO0lBQ3pCLElBQXFCLENBQUFDLHFCQUFBLEdBQUcsQ0FBQztJQUN6QixJQUFRLENBQUFDLFFBQUEsR0FBRyxDQUFDO0FBeWlDckI7RUF2aUNTeC9GLGNBQWNBLENBQUN2TSxJQUFjO0FBQ2xDLFVBQU1pbEcsT0FBTyxHQUFHamxHLElBQUksQ0FBQ04sR0FBRyxDQUFDOGtHLFlBQVksR0FBR3hrRyxJQUFJLENBQUNOLEdBQUcsQ0FBQzhrRyxZQUFZLEdBQUcsTUFBTTtBQUV0RSxVQUFNVSxNQUFNLEdBQUcsSUFBSSxDQUFDcEUsZUFBZSxDQUFDbUUsT0FBTyxDQUFDO0FBQzVDLFFBQUlDLE1BQU0sRUFBRTtBQUNWLGFBQU9BLE1BQU07QUFDZjtBQUVBLFFBQUlDLE9BQU8sR0FBZ0IvOUYsV0FBVyxDQUFDNGtHLE9BQU87SUFDOUMsSUFBSTVHLFNBQVMsR0FBYSxFQUFFO0lBQzVCQSxTQUFTLEdBQUdILE9BQU8sQ0FBQzFoSCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNtdEIsT0FBTyxFQUFFO0FBQ3hDMDBGLGFBQVMsR0FBR0EsU0FBUyxDQUFDdm9HLEdBQUcsQ0FBVXZhLEtBQWEsSUFBSTtBQUNsRCxhQUFPQSxLQUFLLENBQUNpQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNtdEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLEtBQUMsQ0FBQztBQUNGLFNBQUssTUFBTS92QixJQUFJLElBQUl5a0gsU0FBUyxFQUFFO01BQzVCLElBQUl6a0gsSUFBSSxJQUFJeW1CLFdBQVcsRUFBRTtBQUN2Qis5RixlQUFPLEdBQUd4a0gsSUFBbUI7QUFDN0I7QUFDRjtBQUNGO0FBQ0EsUUFBSSxDQUFDbWdILGVBQWUsQ0FBQ21FLE9BQU8sQ0FBQyxHQUFHRSxPQUFPO0FBQ3ZDLFdBQU9BLE9BQU87QUFDaEI7RUFFT241Rix5QkFBeUJBLENBQUNoTSxJQUFjO0FBQzdDLFVBQU1yZixJQUFJLEdBQUcsSUFBSSxDQUFDNHJCLGNBQWMsQ0FBQ3ZNLElBQUksQ0FBQztBQUV0QyxZQUFRcmYsSUFBSTtNQUNWLEtBQUt5bUIsV0FBVyxDQUFDcTZGLGFBQWE7QUFDNUIsZUFBTyxJQUFJLENBQUN3SywyQkFBMkIsQ0FBQ2pzRyxJQUFJLENBQUM7TUFDL0MsS0FBS29ILFdBQVcsQ0FBQ0UsVUFBVTtBQUN6QixlQUFPLElBQUksQ0FBQzRrRyx3QkFBd0IsQ0FBQ2xzRyxJQUFJLENBQUM7TUFDNUMsS0FBS29ILFdBQVcsQ0FBQ0csSUFBSTtBQUNuQixlQUFPLElBQUksQ0FBQzRrRyxrQkFBa0IsQ0FBQ25zRyxJQUFJLENBQUM7TUFDdEMsS0FBS29ILFdBQVcsQ0FBQ0ksSUFBSTtBQUNuQixlQUFPLElBQUksQ0FBQzRrRyxrQkFBa0IsQ0FBQ3BzRyxJQUFJLENBQUM7TUFDdEMsS0FBS29ILFdBQVcsQ0FBQ0ssVUFBVTtBQUN6QixlQUFPLElBQUksQ0FBQzRrRyx3QkFBd0IsQ0FBQ3JzRyxJQUFJLENBQUM7TUFDNUMsS0FBS29ILFdBQVcsQ0FBQ00sS0FBSztBQUNwQixlQUFPLElBQUksQ0FBQzRrRyxtQkFBbUIsQ0FBQ3RzRyxJQUFJLENBQUM7TUFDdkMsS0FBS29ILFdBQVcsQ0FBQ08sSUFBSTtBQUNuQixlQUFPLElBQUksQ0FBQzRrRyxrQkFBa0IsQ0FBQ3ZzRyxJQUFJLENBQUM7TUFDdEMsS0FBS29ILFdBQVcsQ0FBQ1EsUUFBUTtBQUN2QixlQUFPLElBQUksQ0FBQzRrRyxzQkFBc0IsQ0FBQ3hzRyxJQUFJLENBQUM7TUFDMUMsS0FBS29ILFdBQVcsQ0FBQ1MsR0FBRztBQUNsQixlQUFPLElBQUksQ0FBQzRrRyxpQkFBaUIsQ0FBQ3pzRyxJQUFJLENBQUM7TUFDckMsS0FBS29ILFdBQVcsQ0FBQ1UsU0FBUztBQUN4QixlQUFPLElBQUksQ0FBQzRrRyx1QkFBdUIsQ0FBQzFzRyxJQUFJLENBQUM7TUFDM0MsS0FBS29ILFdBQVcsQ0FBQ1csS0FBSztBQUNwQixlQUFPLElBQUksQ0FBQzRrRyxtQkFBbUIsQ0FBQzNzRyxJQUFJLENBQUM7TUFDdkMsS0FBS29ILFdBQVcsQ0FBQ1ksTUFBTTtBQUNyQixlQUFPLElBQUksQ0FBQzRrRyxvQkFBb0IsQ0FBQzVzRyxJQUFJLENBQUM7TUFDeEMsS0FBS29ILFdBQVcsQ0FBQ2EsR0FBRztBQUNsQixlQUFPLElBQUksQ0FBQzRrRyxpQkFBaUIsQ0FBQzdzRyxJQUFJLENBQUM7TUFDckMsS0FBS29ILFdBQVcsQ0FBQ2MsT0FBTztBQUN0QixlQUFPLElBQUksQ0FBQzRrRyxxQkFBcUIsQ0FBQzlzRyxJQUFJLENBQUM7TUFDekMsS0FBS29ILFdBQVcsQ0FBQ2lvRSxNQUFNO0FBQ3JCLGVBQU8sSUFBSSxDQUFDMDlCLG9CQUFvQixDQUFDL3NHLElBQUksQ0FBQztNQUN4QyxLQUFLb0gsV0FBVyxDQUFDczdGLGFBQWE7QUFDNUIsZUFBTyxJQUFJLENBQUNzSywyQkFBMkIsQ0FBQ2h0RyxJQUFJLENBQUM7TUFDL0MsS0FBS29ILFdBQVcsQ0FBQ2UsSUFBSTtBQUNuQixlQUFPLElBQUksQ0FBQzhrRyxrQkFBa0IsQ0FBQ2p0RyxJQUFJLENBQUM7TUFDdEMsS0FBS29ILFdBQVcsQ0FBQ3NGLFNBQVM7QUFDeEIsZUFBTyxJQUFJLENBQUN3Z0csdUJBQXVCLENBQUNsdEcsSUFBSSxDQUFDO01BQzNDLEtBQUtvSCxXQUFXLENBQUM2N0YsYUFBYTtBQUM1QixlQUFPLElBQUksQ0FBQ2tLLDBCQUEwQixDQUFDbnRHLElBQUksQ0FBQztNQUM5QyxLQUFLb0gsV0FBVyxDQUFDZ0IsTUFBTTtBQUNyQixlQUFPLElBQUksQ0FBQ2dsRyxpQkFBaUIsQ0FBQ3B0RyxJQUFJLENBQUM7TUFDckMsS0FBS29ILFdBQVcsQ0FBQzRrRyxPQUFPO0FBQ3RCO0FBQ0EsZUFBTyxJQUFJO0FBQ2I7QUFDRSxlQUFPLElBQUk7QUFDZjtBQUNGO0VBRU90Z0csdUJBQXVCQSxDQUFDMUwsSUFBYztBQUMzQyxVQUFNcmYsSUFBSSxHQUFHLElBQUksQ0FBQzRyQixjQUFjLENBQUN2TSxJQUFJLENBQUM7QUFDdEMsWUFBUXJmLElBQUk7TUFDVixLQUFLeW1CLFdBQVcsQ0FBQ0UsVUFBVTtBQUN6QnRILFlBQUksQ0FBQ04sR0FBRyxDQUFDeWdCLFFBQVEsR0FBRyxFQUFFO0FBQ3RCbmdCLFlBQUksQ0FBQ04sR0FBRyxDQUFDRSxNQUFNLEdBQUcsRUFBRTtBQUNwQjtNQUNGLEtBQUt3SCxXQUFXLENBQUNJLElBQUk7QUFDbkI7QUFDQXhILFlBQUksQ0FBQ04sR0FBRyxDQUFDeWdCLFFBQVEsR0FBRyxFQUFFO0FBQ3RCbmdCLFlBQUksQ0FBQ04sR0FBRyxDQUFDeXBHLEtBQUssR0FBRyxFQUFFO0FBQ25CbnBHLFlBQUksQ0FBQ04sR0FBRyxDQUFDRSxNQUFNLEdBQUcsRUFBRTtBQUNwQkksWUFBSSxDQUFDTixHQUFHLENBQUNvNUIsT0FBTyxHQUFHLEVBQUU7QUFFckI7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtRQUNBOTRCLElBQUksQ0FBQ04sR0FBRyxDQUFDRSxNQUFNLENBQUM1ZixPQUFPLENBQUU4YyxDQUFZLElBQUk7VUFDdkNBLENBQUMsQ0FBQ08sVUFBVSxFQUFFO0FBRWQsY0FBSSxDQUFDUCxDQUFDLENBQUNPLFVBQVUsRUFBRTtZQUNqQnRhLE1BQU0sQ0FBQ2EsSUFBSSxDQUFDLHVCQUF1QmtaLENBQUMsQ0FBQ3RjLEVBQUUsRUFBRSxDQUFDO0FBQzFDO0FBQ0E7WUFDQSxPQUFPc2MsQ0FBQyxDQUFDL1YsSUFBSTtBQUNmO0FBQ0YsU0FBQyxDQUFDO0FBQ0Y7TUFDRixLQUFLcWdCLFdBQVcsQ0FBQ00sS0FBSztBQUNwQixZQUFJMUgsSUFBSSxDQUFDTixHQUFHLENBQUNwZCxLQUFLLEVBQUUwZCxJQUFJLENBQUNOLEdBQUcsQ0FBQ3BkLEtBQUssR0FBRyxFQUFFLE1BQ2xDO0FBQ0gsaUJBQU8wZCxJQUFJLENBQUNOLEdBQUcsQ0FBQzFWLENBQUM7QUFDakIsaUJBQU9nVyxJQUFJLENBQUNOLEdBQUcsQ0FBQ3pWLENBQUM7QUFDakIsaUJBQU8rVixJQUFJLENBQUNOLEdBQUcsQ0FBQ3hWLENBQUM7QUFDbkI7QUFDQTtNQUNGLEtBQUtrZCxXQUFXLENBQUNPLElBQUk7QUFDbkIsWUFBSTNILElBQUksQ0FBQ04sR0FBRyxDQUFDbkQsS0FBSyxDQUFDamEsS0FBSyxFQUFFMGQsSUFBSSxDQUFDTixHQUFHLENBQUNuRCxLQUFLLENBQUNqYSxLQUFLLEdBQUcsRUFBRSxNQUM5QztBQUNILGlCQUFPMGQsSUFBSSxDQUFDTixHQUFHLENBQUNuRCxLQUFLLENBQUN2UyxDQUFDO0FBQ3ZCLGlCQUFPZ1csSUFBSSxDQUFDTixHQUFHLENBQUNuRCxLQUFLLENBQUN0UyxDQUFDO0FBQ3ZCLGlCQUFPK1YsSUFBSSxDQUFDTixHQUFHLENBQUNuRCxLQUFLLENBQUNyUyxDQUFDO0FBQ3pCO0FBQ0EsWUFBSThWLElBQUksQ0FBQ04sR0FBRyxDQUFDbEQsR0FBRyxDQUFDbGEsS0FBSyxFQUFFMGQsSUFBSSxDQUFDTixHQUFHLENBQUNsRCxHQUFHLENBQUNsYSxLQUFLLEdBQUcsRUFBRSxNQUMxQztBQUNILGlCQUFPMGQsSUFBSSxDQUFDTixHQUFHLENBQUNsRCxHQUFHLENBQUN4UyxDQUFDO0FBQ3JCLGlCQUFPZ1csSUFBSSxDQUFDTixHQUFHLENBQUNsRCxHQUFHLENBQUN2UyxDQUFDO0FBQ3JCLGlCQUFPK1YsSUFBSSxDQUFDTixHQUFHLENBQUNsRCxHQUFHLENBQUN0UyxDQUFDO0FBQ3ZCO0FBQ0E7TUFDRixLQUFLa2QsV0FBVyxDQUFDUSxRQUFRO0FBQ3ZCNUgsWUFBSSxDQUFDTixHQUFHLENBQUNwZCxLQUFLLEdBQUcsRUFBRTtBQUNuQjtBQUlKO0FBQ0Y7RUFFVXlxSCxvQkFBb0JBLENBQUMvc0csSUFBYztJQUMzQyxNQUFNcXRHLE9BQU8sR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQ3R0RyxJQUFJLENBQUNOLEdBQUcsQ0FBQzJuQixNQUFNLENBQUM7SUFDcEQsTUFBTWttRixPQUFPLEdBQUcsSUFBSSxDQUFDRCxjQUFjLENBQUN0dEcsSUFBSSxDQUFDTixHQUFHLENBQUN1VCxNQUFNLENBQUM7QUFDcERqVCxRQUFJLENBQUNOLEdBQUcsQ0FBQzJuQixNQUFNLEdBQUdnbUYsT0FBTztBQUN6QnJ0RyxRQUFJLENBQUNOLEdBQUcsQ0FBQ3VULE1BQU0sR0FBR3M2RixPQUFPO0lBRXpCLE9BQU87QUFDTHJyRyxnQkFBVSxFQUFFLElBQUk7QUFDaEIwSixtQkFBYSxFQUFFLElBQUk7QUFDbkJ2QixlQUFTLEVBQUU7S0FDSTtBQUNuQjtFQUVVNmlHLHVCQUF1QkEsQ0FBQ2x0RyxJQUFjO0lBQzlDLE1BQU13dEcsZ0JBQWdCLEdBQUd6MUcsbUJBQW1CLENBQUNpSSxJQUFJLENBQUNOLEdBQUcsQ0FBQ1UsS0FBSyxDQUFDO0FBQzVEOzs7QUFHRztBQUNIO0FBQ0EsVUFBTXF0RyxVQUFVLEdBQWF6dEcsSUFBSSxDQUFDTixHQUFHLENBQUNwZCxLQUFLLEdBQUcwZCxJQUFJLENBQUNOLEdBQUcsQ0FBQ3BkLEtBQUssR0FBRzBkLElBQUksQ0FBQ04sR0FBRyxDQUFDK1UsTUFBTTtBQUU5RSxVQUFNQSxNQUFNLEdBQUcsSUFBSW53QixPQUFPLEVBQUUsQ0FBQzZ4QixTQUFTLENBQUNzM0YsVUFBVSxDQUFDLENBQUNDLFNBQVMsRUFBRTtBQUM5RDs7O0FBR0c7QUFDSCxVQUFNcmpHLFNBQVMsR0FBWSxJQUFJL2xCLE9BQU8sRUFBRSxDQUNyQzJHLFNBQVMsQ0FBQ3VpSCxnQkFBZ0IsRUFBRUEsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDLENBQy9EM2hHLFFBQVEsQ0FBQzRJLE1BQU0sQ0FBQyxDQUNoQjVJLFFBQVEsQ0FDUCxJQUFJdm5CLE9BQU8sRUFBRSxDQUFDMkcsU0FBUyxDQUNyQixDQUFDLEdBQUd1aUgsZ0JBQWdCLEVBQ3BCLENBQUMsR0FBR0EsZ0JBQWdCLEVBQ3BCLENBQUMsR0FBR0EsZ0JBQWdCLENBQ3JCLENBQ0Y7SUFFSCxPQUFPO0FBQ0x0ckcsZ0JBQVUsRUFBRSxJQUFJO0FBQ2hCMEosbUJBQWEsRUFBRSxJQUFJO0FBQ25CdkI7S0FDZTtBQUNuQjtBQUVBO0VBQ1U0aEcsMkJBQTJCQSxDQUFDanNHLElBQWM7QUFFbEQsV0FBTyxJQUFJO0FBQ2I7QUFFQTtFQUNVZ3RHLDJCQUEyQkEsQ0FBQ2h0RyxJQUFjO0FBRWxELFdBQU8sSUFBSTtBQUNiO0FBRUE7RUFDVW10RywwQkFBMEJBLENBQUNudEcsSUFBYztBQUVqRCxXQUFPLElBQUk7QUFDYjtBQUVBOztBQUVHO0VBQ09rc0csd0JBQXdCQSxDQUFDbHNHLElBQWM7SUFDL0MsTUFBTXd0RyxnQkFBZ0IsR0FBR3oxRyxtQkFBbUIsQ0FBQ2lJLElBQUksQ0FBQ04sR0FBRyxDQUFDVSxLQUFLLENBQUM7SUFFNUQsTUFBTStmLFFBQVEsR0FBRyxJQUFJdmpCLFVBQVUsQ0FDN0JvRCxJQUFJLENBQUNzQyxTQUFTLEdBQUd0QyxJQUFJLENBQUNOLEdBQUcsQ0FBQy9JLE1BQU0sQ0FBQ3FHLEtBQUssRUFBRSxHQUFHZ0QsSUFBSSxDQUFDTixHQUFHLENBQUMvSSxNQUFNLENBQzNEO0lBQ0QsTUFBTWczRyxTQUFTLEdBQUcsSUFBSS93RyxVQUFVLENBQUNvRCxJQUFJLENBQUNOLEdBQUcsQ0FBQ0UsTUFBTSxDQUFDO0lBQ2pELElBQUlBLE1BQU0sR0FBRyxJQUFJO0FBRWpCLFFBQUkrdEcsU0FBUyxJQUFJQSxTQUFTLENBQUNwbUgsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUN2QyxJQUFJb21ILFNBQVMsQ0FBQ3BtSCxNQUFNLEtBQUs0NEIsUUFBUSxDQUFDNTRCLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDNUN4RSxNQUFNLENBQUNhLElBQUksQ0FDVCxDQUFZb2MsZUFBSSxDQUFDTixHQUFHLENBQUNsZixFQUFFLHdHQUF3RyxDQUNoSTtBQUNIO0FBQ0E7TUFDQW9mLE1BQU0sR0FBRyxJQUFJLENBQUM4VSxZQUFZLENBQUNpNUYsU0FBUyxFQUFFLElBQUksQ0FBQztBQUM3QztJQUVBLE9BQU87QUFDTHpyRyxnQkFBVSxFQUFFO0FBQ1Y4SCxnQkFBUSxFQUFFbVcsUUFBUTtBQUNsQmhlLGFBQUssRUFBRXZDLE1BQU0sR0FDVCxJQUFJaEQsVUFBVSxDQUFDLENBQ2I7QUFBRTdWLGNBQUksRUFBRTZZLE1BQU07QUFBRXBmLFlBQUUsRUFBRTJjLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO0FBQUVDLG9CQUFVLEVBQUU7U0FBRyxDQUM5RCxDQUFDLEdBQ0YvWjtPQUNMO0FBQ0Rzb0IsbUJBQWEsRUFBRSxJQUFJdG5CLE9BQU8sRUFBRSxDQUFDMkcsU0FBUyxDQUNwQ3VpSCxnQkFBZ0IsRUFDaEJBLGdCQUFnQixFQUNoQkEsZ0JBQWdCLENBQ2pCO0FBQ0RuakcsZUFBUyxFQUFFO0tBQ0k7QUFDbkI7QUFFQTs7QUFFRztFQUNPOGhHLGtCQUFrQkEsQ0FBQ25zRyxJQUFjO0FBS3pDLFdBQU8sSUFBSTtBQUNiO0FBRUE7O0FBRUc7RUFDT290RyxpQkFBaUJBLENBQUNwdEcsSUFBYztBQUt4QyxXQUFPLElBQUk7QUFDYjtBQUVBOztBQUVHO0VBQ09vc0csa0JBQWtCQSxDQUFDcHNHLElBQWM7QUFDekMsUUFBSSxDQUFDQSxJQUFJLENBQUNOLEdBQUcsRUFBRSxPQUFPLElBQUk7SUFFMUIsTUFBTTh0RyxnQkFBZ0IsR0FBR3oxRyxtQkFBbUIsQ0FBQ2lJLElBQUksQ0FBQ04sR0FBRyxDQUFDVSxLQUFLLENBQUM7SUFFNUQsSUFBSSxDQUFDSixJQUFJLENBQUNOLEdBQUcsQ0FBQ3lnQixRQUFRLEVBQUUsT0FBTyxJQUFJO0lBQ25DLElBQUksQ0FBQ25nQixJQUFJLENBQUNOLEdBQUcsQ0FBQ3lwRyxLQUFLLEVBQUUsT0FBTyxJQUFJO0FBRWhDLFVBQU01c0csS0FBSyxHQUFHOVQsV0FBVyxDQUFDRCxHQUFHLEVBQUU7SUFFL0IsTUFBTTIzQixRQUFRLEdBQUcsSUFBSXZqQixVQUFVLENBQUNvRCxJQUFJLENBQUNOLEdBQUcsQ0FBQ3lnQixRQUFRLENBQUM7SUFDbEQsTUFBTWdwRixLQUFLLEdBQUcsSUFBSXZzRyxVQUFVLENBQUNvRCxJQUFJLENBQUNOLEdBQUcsQ0FBQ3lwRyxLQUFLLENBQUM7SUFDNUMsTUFBTXdFLFNBQVMsR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDNXRHLElBQUksQ0FBQ04sR0FBRyxDQUFDRSxNQUFNLENBQUMsR0FDckQsSUFBSWhELFVBQVUsQ0FBQ29ELElBQUksQ0FBQ04sR0FBRyxDQUFDRSxNQUFNLENBQUMsR0FDL0J0YyxTQUFTO0FBQ2IsUUFBSXcxQyxPQUFPLEdBQUc5NEIsSUFBSSxDQUFDTixHQUFHLENBQUMwcEcsYUFBYSxHQUNoQyxJQUFJeHNHLFVBQVUsQ0FBQ29ELElBQUksQ0FBQ04sR0FBRyxDQUFDMHBHLGFBQWEsQ0FBQyxHQUN0QzlsSCxTQUFTO0lBQ2IsSUFBSXNjLE1BQU0sR0FBR3RjLFNBQVM7SUFDdEIsSUFBSW9FLENBQUMsR0FBRyxDQUFDO0lBQ1QsSUFBSW1tSCxZQUFZLEdBQUcsSUFBSTtJQUN2QixJQUFJQyxxQkFBcUIsR0FBRyxDQUFDO0FBQzdCLFdBQU9wbUgsQ0FBQyxHQUFHeWhILEtBQUssQ0FBQzVoSCxNQUFNLEVBQUU7QUFDdkIsWUFBTTBVLFVBQVUsR0FBR2t0RyxLQUFLLENBQUNqdEcsY0FBYyxDQUFDeFUsQ0FBQyxDQUFDO01BQzFDLElBQUl5aEgsS0FBSyxDQUFDcHNHLFVBQVUsQ0FBQ2QsVUFBVSxDQUFDLENBQUM4eEcsU0FBUyxFQUFFO1FBQzFDcm1ILENBQUMsSUFBSXloSCxLQUFLLENBQUNwc0csVUFBVSxDQUFDZCxVQUFVLENBQUMsQ0FBQ2xWLElBQUksQ0FBQ1EsTUFBTTtBQUM3QztBQUNGO0FBQ0EsVUFBSXlxRSxDQUFDLEdBQUdtM0MsS0FBSyxDQUFDam1ILEdBQUcsQ0FBQ3dFLENBQUMsQ0FBQztNQUNwQixJQUFJc3FFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsSUFBSSxDQUFDO01BQ2pCdHFFLENBQUMsSUFBSXNxRSxDQUFDLEdBQUcsQ0FBQztNQUVWLElBQUlBLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWDg3Qyw2QkFBcUIsSUFBSSxDQUFDO0FBQzFCO0FBQ0YsT0FBQyxNQUFNO0FBQ0xBLDZCQUFxQixJQUFJLENBQUM5N0MsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3BDNjdDLG9CQUFZLEdBQUcsS0FBSztBQUN0QjtBQUNGO0lBRUEsTUFBTTF3RixPQUFPLEdBQ1gyd0YscUJBQXFCLElBQUksS0FBSyxJQUFJM3RGLFFBQVEsQ0FBQzU0QixNQUFNLElBQUksS0FBSyxHQUN0RCxJQUFJd1gsV0FBVyxDQUFDK3VHLHFCQUFxQixDQUFDLEdBQ3RDLElBQUlqdkcsV0FBVyxDQUFDaXZHLHFCQUFxQixDQUFDO0lBQzVDLElBQUlFLGFBQWEsR0FBRyxDQUFDO0FBRXJCLFFBQUlILFlBQVksRUFBRTtBQUNoQjtBQUNBMUUsV0FBSyxDQUFDcHNHLFVBQVUsQ0FBQy9jLE9BQU8sQ0FBRTJjLEtBQWdCLElBQUk7UUFDNUMsSUFBSUEsS0FBSyxDQUFDb3hHLFNBQVMsRUFBRTtRQUVyQixJQUFJRSxLQUFLLEdBQUcsQ0FBQztBQUNiLGFBQUssSUFBSUMsSUFBSSxHQUFHLENBQUMsRUFBRUEsSUFBSSxHQUFHdnhHLEtBQUssQ0FBQzVWLElBQUksQ0FBQ1EsTUFBTSxFQUFFMm1ILElBQUksRUFBRSxFQUFFO0FBQ25ELGNBQUlBLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xCdnhHLGlCQUFLLENBQUM1VixJQUFJLENBQUNrbkgsS0FBSyxFQUFFLENBQUMsR0FBR3R4RyxLQUFLLENBQUM1VixJQUFJLENBQUNtbkgsSUFBSSxDQUFDO0FBQ3hDO0FBQ0Y7QUFDQXZ4RyxhQUFLLENBQUM1VixJQUFJLENBQUNRLE1BQU0sR0FBRzBtSCxLQUFLO1FBQ3pCdHhHLEtBQUssQ0FBQ294RyxTQUFTLEdBQUcsSUFBSTtBQUN4QixPQUFDLENBQUM7TUFDRjVFLEtBQUssQ0FBQ3J0RyxhQUFhLEVBQUU7QUFDdkIsS0FBQyxNQUFNO0FBQ0xwVSxPQUFDLEdBQUcsQ0FBQztBQUNMLGFBQU9BLENBQUMsR0FBR3loSCxLQUFLLENBQUM1aEgsTUFBTSxFQUFFO0FBQ3ZCO0FBQ0EsY0FBTTBVLFVBQVUsR0FBR2t0RyxLQUFLLENBQUNqdEcsY0FBYyxDQUFDeFUsQ0FBQyxDQUFDO1FBQzFDLElBQUl5aEgsS0FBSyxDQUFDcHNHLFVBQVUsQ0FBQ2QsVUFBVSxDQUFDLENBQUM4eEcsU0FBUyxFQUFFO1VBQzFDNXdGLE9BQU8sQ0FBQ2p5QixHQUFHLENBQUNpK0csS0FBSyxDQUFDdHRHLE1BQU0sQ0FBQ0ksVUFBVSxDQUFDLEVBQUV2VSxDQUFDLENBQUM7VUFDeENBLENBQUMsSUFBSXloSCxLQUFLLENBQUNwc0csVUFBVSxDQUFDZCxVQUFVLENBQUMsQ0FBQ2xWLElBQUksQ0FBQ1EsTUFBTTtBQUM3QztBQUNGO0FBQ0EsWUFBSXlxRSxDQUFDLEdBQUdtM0MsS0FBSyxDQUFDam1ILEdBQUcsQ0FBQ3dFLENBQUMsQ0FBQztRQUNwQixJQUFJc3FFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsSUFBSSxDQUFDO1FBQ2pCLElBQUlBLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWDtVQUNBNzBDLE9BQU8sQ0FBQzZ3RixhQUFhLENBQUMsR0FBRzdFLEtBQUssQ0FBQ2ptSCxHQUFHLENBQUN3RSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDeTFCLGlCQUFPLENBQUM2d0YsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHN0UsS0FBSyxDQUFDam1ILEdBQUcsQ0FBQ3dFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0N5MUIsaUJBQU8sQ0FBQzZ3RixhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUc3RSxLQUFLLENBQUNqbUgsR0FBRyxDQUFDd0UsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3Q3NtSCx1QkFBYSxJQUFJLENBQUM7QUFDcEIsU0FBQyxNQUFNO0FBQ0wsZ0JBQU1HLE1BQU0sR0FBRzFsSCxXQUFXLENBQUNELEdBQUcsRUFBRTtBQUNoQyxnQkFBTTR3QixVQUFVLEdBQUdxeEYsdUJBQXVCLENBQUNDLGVBQWUsQ0FDeERoakgsQ0FBQztBQUNEO0FBQ0E7VUFDQXloSCxLQUFLLEVBQ0xocEYsUUFBUSxFQUNSaEQsT0FBTztBQUFFO0FBQ1Q2d0YsdUJBQWE7V0FDZDtBQUNEQSx1QkFBYSxJQUFJNTBGLFVBQVU7VUFDM0IsSUFBSSxDQUFDMHlGLHFCQUFxQixJQUFJcmpILFdBQVcsQ0FBQ0QsR0FBRyxFQUFFLEdBQUcybEgsTUFBTTtBQUMxRDtRQUVBem1ILENBQUMsSUFBSXNxRSxDQUFDLEdBQUcsQ0FBQztBQUNaO0FBQ0Y7SUFFQSxJQUFJLENBQUM2NUMscUJBQXFCLElBQUlwakgsV0FBVyxDQUFDRCxHQUFHLEVBQUUsR0FBRytULEtBQUs7QUFFdkQsUUFBSW94RyxTQUFTLElBQUlBLFNBQVMsQ0FBQ3BtSCxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3ZDLElBQUlvbUgsU0FBUyxDQUFDcG1ILE1BQU0sS0FBSzQ0QixRQUFRLENBQUM1NEIsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUM1Q3hFLE1BQU0sQ0FBQ2EsSUFBSSxDQUNULENBQVlvYyxlQUFJLENBQUNOLEdBQUcsQ0FBQ2xmLEVBQUUsd0dBQXdHLENBQ2hJO0FBQ0gsT0FBQztBQUVDb2YsY0FBTSxHQUFHLElBQUloRCxVQUFVLENBQUMsQ0FDdEI7QUFDRXBjLFlBQUUsRUFBRTJjLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO0FBQzVCQyxvQkFBVSxFQUFFLENBQUM7QUFDYnRXLGNBQUksRUFBRSxJQUFJLENBQUMydEIsWUFBWSxDQUFDaTVGLFNBQVMsRUFBRSxJQUFJO0FBQ3hDLFVBQ0YsQ0FBQztBQUNOO0FBRUEsUUFBSTcwRSxPQUFPLElBQUlBLE9BQU8sQ0FBQ3Z4QyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ25DLFVBQUl1eEMsT0FBTyxDQUFDdnhDLE1BQU0sS0FBSzQ0QixRQUFRLENBQUM1NEIsTUFBTSxFQUFFO1FBQ3RDeEUsTUFBTSxDQUFDYSxJQUFJLENBQ1QsQ0FBWW9jLGVBQUksQ0FBQ04sR0FBRyxDQUFDbGYsRUFBRSx3R0FBd0csQ0FDaEk7QUFDRHM0QyxlQUFPLEdBQUd4MUMsU0FBUztBQUNyQjtBQUNGLEtBQUMsTUFBTTtBQUNMdzFDLGFBQU8sR0FBR3gxQyxTQUFTO0FBQ3JCO0lBRUEsT0FBTztBQUNMNGUsZ0JBQVUsRUFBRTtBQUNWOEgsZ0JBQVEsRUFBRW1XLFFBQVE7UUFDbEJsVyxLQUFLLEVBQUU0akcsWUFBWSxHQUNmMUUsS0FBSyxHQUNMLElBQUl2c0csVUFBVSxDQUFDLENBQ2I7QUFDRTdWLGNBQUksRUFBRW8yQixPQUE4QjtBQUNwQzM4QixZQUFFLEVBQUUyYyxTQUFTLENBQUNDLFlBQVksRUFBRTtBQUM1QkMsb0JBQVUsRUFBRTtBQUNiLFVBQ0YsQ0FBQztBQUNOLFlBQUl1QyxNQUFNLElBQUk7QUFBRXVDLGVBQUssRUFBRXZDO1NBQVEsQ0FBQztBQUNoQyxZQUFJazVCLE9BQU8sSUFBSTtBQUFFRyxnQkFBTSxFQUFFSDtTQUFTO09BQ25DO0FBQ0RsdEIsbUJBQWEsRUFBRSxJQUFJdG5CLE9BQU8sRUFBRSxDQUFDMkcsU0FBUyxDQUNwQ3VpSCxnQkFBZ0IsRUFDaEJBLGdCQUFnQixFQUNoQkEsZ0JBQWdCLENBQ2pCO0FBQ0RuakcsZUFBUyxFQUFFLElBQUk7TUFDZixJQUFJckssSUFBSSxDQUFDc0MsU0FBUyxJQUFJO0FBQUVBLGlCQUFTLEVBQUU7T0FBTTtLQUMxQjtBQUNuQjtBQUVBOztBQUVHO0VBQ08rcEcsd0JBQXdCQSxDQUFDcnNHLElBQWM7QUFDL0MsUUFBSSxDQUFDQSxJQUFJLENBQUNOLEdBQUcsRUFBRSxPQUFPLElBQUk7SUFFMUIsTUFBTTB1RyxNQUFNLEdBQUcsR0FBR3B1RyxJQUFJLENBQUNOLEdBQUcsQ0FBQzB1RyxNQUFNLElBQUksRUFBRSxDQUFFO0lBQ3pDLElBQUksQ0FBQ0EsTUFBTSxFQUFFO01BQ1hyckgsTUFBTSxDQUFDYSxJQUFJLENBQUMsQ0FBZW9jLGtCQUFJLENBQUNOLEdBQUcsQ0FBQ2xmLEVBQUUsbUNBQW1DLENBQUM7QUFDMUUsYUFBTyxJQUFJO0FBQ2I7QUFFQSxVQUFNNnRILFdBQVcsR0FBR3pDLHdCQUF3QixDQUFDMEMsU0FBUyxDQUFDRixNQUFNLENBQUM7SUFDOUQsSUFBSSxDQUFDQyxXQUFXLEVBQUU7QUFDaEJ0ckgsWUFBTSxDQUFDYSxJQUFJLENBQUMsQ0FBUXdxSCxhQUFNLG1DQUFtQyxDQUFDO0FBQzlELGFBQU8sSUFBSTtBQUNiO0lBRUEsTUFBTUcsV0FBVyxHQUFHei9FLE1BQU0sQ0FBQzl1QixJQUFJLENBQUNOLEdBQUcsQ0FBQzZ1RyxXQUFXLElBQUksQ0FBQyxDQUFDO0lBQ3JELE1BQU1DLFdBQVcsR0FBRzEvRSxNQUFNLENBQUM5dUIsSUFBSSxDQUFDTixHQUFHLENBQUM4dUcsV0FBVyxJQUFJLENBQUMsQ0FBQztJQUNyRCxNQUFNQyxTQUFTLEdBQUczL0UsTUFBTSxDQUFDOXVCLElBQUksQ0FBQ04sR0FBRyxDQUFDK3VHLFNBQVMsSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTUMsU0FBUyxHQUFHNS9FLE1BQU0sQ0FBQzl1QixJQUFJLENBQUNOLEdBQUcsQ0FBQ2d2RyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBRWpELFFBQUksQ0FBQ0YsV0FBVyxJQUFJLENBQUNFLFNBQVMsRUFBRTtNQUM5QjNySCxNQUFNLENBQUNhLElBQUksQ0FBQyxDQUFlb2Msa0JBQUksQ0FBQ04sR0FBRyxDQUFDbGYsRUFBRSxtQ0FBbUMsQ0FBQztBQUMxRSxhQUFPLElBQUk7QUFDYjtBQUVBLFVBQU1tdUgsZ0JBQWdCLEdBQUdKLFdBQVcsR0FBRyxDQUFDO0FBQ3hDLFVBQU1LLGNBQWMsR0FBR0gsU0FBUyxHQUFHLENBQUM7QUFDcEMsVUFBTUksZ0JBQWdCLEdBQUdMLFdBQVcsR0FBRyxDQUFDO0FBQ3hDLFVBQU1NLGNBQWMsR0FBR0osU0FBUyxHQUFHLENBQUM7SUFFcEMsSUFDRUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUNwQkMsY0FBYyxHQUFHLENBQUMsSUFDbEJELGdCQUFnQixHQUFHRSxnQkFBZ0IsR0FBR1IsV0FBVyxDQUFDVSxVQUFVLElBQzVESCxjQUFjLEdBQUdFLGNBQWMsR0FBR1QsV0FBVyxDQUFDVSxVQUFVLEVBQ3hEO0FBQ0Foc0gsWUFBTSxDQUFDYSxJQUFJLENBQUMsZUFBZW9jLElBQUksQ0FBQ04sR0FBRyxDQUFDbGYsRUFBRSxpQ0FBaUM0dEgsTUFBTSxHQUFHLENBQUM7QUFDakYsYUFBTyxJQUFJO0FBQ2I7SUFFQSxNQUFNanVGLFFBQVEsR0FBRyxJQUFJOWhCLFlBQVksQ0FBQ2d3RyxXQUFXLEVBQUVNLGdCQUFnQixFQUFFSCxXQUFXLENBQUM7SUFDN0UsTUFBTVEsT0FBTyxHQUFHLElBQUlqd0csV0FBVyxDQUFDc3ZHLFdBQVcsRUFBRU8sY0FBYyxFQUFFRixTQUFTLENBQUM7QUFDdkUsVUFBTXZGLEtBQUssR0FBR3FGLFdBQVcsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHUSxPQUFPLEdBQUdud0csV0FBVyxDQUFDdE8sSUFBSSxDQUFDeStHLE9BQU8sQ0FBQztJQUM1RSxNQUFNeEIsZ0JBQWdCLEdBQUd6MUcsbUJBQW1CLENBQUNpSSxJQUFJLENBQUNOLEdBQUcsQ0FBQ1UsS0FBSyxDQUFDO0lBRTVELE9BQU87QUFDTDhCLGdCQUFVLEVBQUU7QUFDVjhILGdCQUFRLEVBQUUsSUFBSXBOLFVBQVUsQ0FBQyxDQUN2QjtBQUNFN1YsY0FBSSxFQUFFbzVCLFFBQStCO0FBQ3JDMy9CLFlBQUUsRUFBRTJjLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO0FBQzVCQyxvQkFBVSxFQUFFO0FBQ2IsVUFDRixDQUFDO0FBQ0Y0TSxhQUFLLEVBQUUsSUFBSXJOLFVBQVUsQ0FBQyxDQUNwQjtBQUNFN1YsY0FBSSxFQUFFb2lILEtBQTRCO0FBQ2xDM29ILFlBQUUsRUFBRTJjLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO0FBQzVCQyxvQkFBVSxFQUFFO0FBQ2IsVUFDRjtPQUNGO0FBQ0R1TyxtQkFBYSxFQUFFLElBQUl0bkIsT0FBTyxFQUFFLENBQUMyRyxTQUFTLENBQ3BDdWlILGdCQUFnQixFQUNoQkEsZ0JBQWdCLEVBQ2hCQSxnQkFBZ0IsQ0FDakI7QUFDRG5qRyxlQUFTLEVBQUUsSUFBSTtNQUNmLElBQUlySyxJQUFJLENBQUNzQyxTQUFTLElBQUk7QUFBRUEsaUJBQVMsRUFBRTtPQUFNO0tBQzFCO0FBQ25CO0FBRUE7O0FBRUc7RUFDTzJxRyxrQkFBa0JBLENBQUNqdEcsSUFBYztJQUN6QyxNQUFNd3RHLGdCQUFnQixHQUFHejFHLG1CQUFtQixDQUFDaUksSUFBSSxDQUFDTixHQUFHLENBQUNVLEtBQUssQ0FBQztBQUM1RCxVQUFNeW9DLEtBQUssR0FBRzdvQyxJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLElBQUk7QUFDOUJ4aEIsWUFBTSxFQUFFcm5CLElBQUksQ0FBQ04sR0FBRyxDQUFDMm5CLE1BQU07TUFDdkI0bkYsSUFBSSxFQUFFLElBQUkxbEgsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzFCMmxILElBQUksRUFBRSxJQUFJM2xILE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUMxQnNxQyxNQUFNLEVBQUUsSUFBSXRxQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQzVCO0lBQ0QsTUFBTXNvRixTQUFTLEdBQUc3eEUsSUFBSSxDQUFDTixHQUFHLENBQUMyQyxjQUFjLElBQUksS0FBSztJQUNsRCxNQUFNa1EsUUFBUSxHQUFHLElBQUlocEIsT0FBTyxDQUFDcy9DLEtBQUssQ0FBQ3hoQixNQUFNLENBQUNyOUIsQ0FBQyxFQUFFNitDLEtBQUssQ0FBQ3hoQixNQUFNLENBQUNwOUIsQ0FBQyxFQUFFNCtDLEtBQUssQ0FBQ3hoQixNQUFNLENBQUNuOUIsQ0FBQyxDQUFDO0FBQzVFLFVBQU13eEIsS0FBSyxHQUFHLElBQUlwM0IsT0FBTyxFQUFFLENBQUMyRyxTQUFTLENBQ25DdWlILGdCQUFnQixFQUNoQkEsZ0JBQWdCLEVBQ2hCQSxnQkFBZ0IsQ0FDakI7QUFDRDtJQUNBLE1BQU1ucEgsR0FBRyxHQUFHd3RGLFNBQVMsR0FDakIsSUFBSXZ0RixPQUFPLEVBQUUsR0FDYixJQUFJQSxPQUFPLEVBQUUsQ0FBQzZxSCxTQUFTLENBQUN0bUUsS0FBSyxDQUFDb21FLElBQUksRUFBRXBtRSxLQUFLLENBQUNxbUUsSUFBSSxFQUFFcm1FLEtBQUssQ0FBQ2hWLE1BQU0sQ0FBQztBQUNqRXh2QyxPQUFHLENBQUMyeEIsV0FBVyxDQUFDekQsUUFBUSxDQUFDO0FBQ3pCbHVCLE9BQUcsQ0FBQ3VvQixXQUFXLENBQUM4TyxLQUFLLENBQUM7SUFDdEIsT0FBTztBQUNMeFosZ0JBQVUsRUFBRSxJQUFJO0FBQ2hCMEosbUJBQWEsRUFBRXZuQixHQUFHO0FBQ2xCZ21CLGVBQVMsRUFBRSxJQUFJO01BQ2ZqSSxRQUFRLEVBQUVwQyxJQUFJLENBQUNOO0tBQ0E7QUFDbkI7QUFFQTs7QUFFRztFQUNPNHNHLG1CQUFtQkEsQ0FBQ3RzRyxJQUFjO0lBQzFDLE1BQU13dEcsZ0JBQWdCLEdBQUd6MUcsbUJBQW1CLENBQUNpSSxJQUFJLENBQUNOLEdBQUcsQ0FBQ1UsS0FBSyxDQUFDO0lBQzVELE1BQU16SixNQUFNLEdBQUcsSUFBSSxDQUFDeTRHLGlCQUFpQixDQUNuQ3B2RyxJQUFJLENBQUNOLEdBSUosQ0FDRjtJQUNELE9BQU87QUFDTHdDLGdCQUFVLEVBQUU7QUFDVjhILGdCQUFRLEVBQUUsSUFBSXBOLFVBQVUsQ0FBQyxDQUN2QjtBQUFFN1YsY0FBSSxFQUFFNFAsTUFBTTtBQUFFblcsWUFBRSxFQUFFMmMsU0FBUyxDQUFDQyxZQUFZLEVBQUU7QUFBRUMsb0JBQVUsRUFBRTtBQUFHLFVBQzlEO09BQ0Y7QUFDRHVPLG1CQUFhLEVBQUUsSUFBSXRuQixPQUFPLEVBQUUsQ0FBQzJHLFNBQVMsQ0FDcEN1aUgsZ0JBQWdCLEVBQ2hCQSxnQkFBZ0IsRUFDaEJBLGdCQUFnQixDQUNqQjtBQUNEbmpHLGVBQVMsRUFBRTtLQUNJO0FBQ25CO0FBRUE7O0FBRUc7RUFDT2tpRyxrQkFBa0JBLENBQUN2c0csSUFBYztJQUN6QyxNQUFNd3RHLGdCQUFnQixHQUFHejFHLG1CQUFtQixDQUFDaUksSUFBSSxDQUFDTixHQUFHLENBQUNVLEtBQUssQ0FBQztJQUM1RCxPQUFPO0FBQ0w4QixnQkFBVSxFQUFFO0FBQ1Y4SCxnQkFBUSxFQUFFLElBQUlwTixVQUFVLENBQUMsQ0FDdkI7VUFDRTdWLElBQUksRUFBRSxJQUFJLENBQUNxb0gsaUJBQWlCLENBQUNwdkcsSUFBSSxDQUFDTixHQUFHLENBQUNuRCxLQUFLLENBQUMsQ0FBQ3U1RSxNQUFNLENBQ2pELElBQUksQ0FBQ3M1QixpQkFBaUIsQ0FBQ3B2RyxJQUFJLENBQUNOLEdBQUcsQ0FBQ2xELEdBQUcsQ0FBQyxDQUNyQztBQUNEaGMsWUFBRSxFQUFFMmMsU0FBUyxDQUFDQyxZQUFZLEVBQUU7QUFDNUJDLG9CQUFVLEVBQUU7QUFDYixVQUNGO09BQ0Y7QUFDRHVPLG1CQUFhLEVBQUUsSUFBSXRuQixPQUFPLEVBQUUsQ0FBQzJHLFNBQVMsQ0FDcEN1aUgsZ0JBQWdCLEVBQ2hCQSxnQkFBZ0IsRUFDaEJBLGdCQUFnQixDQUNqQjtBQUNEbmpHLGVBQVMsRUFBRTtLQUNJO0FBQ25CO0FBRUE7O0FBRUc7RUFDT21pRyxzQkFBc0JBLENBQUN4c0csSUFBYztJQUM3QyxNQUFNd3RHLGdCQUFnQixHQUFHejFHLG1CQUFtQixDQUFDaUksSUFBSSxDQUFDTixHQUFHLENBQUNVLEtBQUssQ0FBQztJQUM1RCxNQUFNckQsVUFBVSxHQUFHLElBQUlILFVBQVUsQ0FBQ29ELElBQUksQ0FBQ04sR0FBRyxDQUFDcGQsS0FBSyxDQUFDO0lBRWpELElBQUkrc0gsUUFBUSxHQUFHdHlHLFVBQVU7QUFDekIsUUFBSWlELElBQUksQ0FBQ04sR0FBRyxDQUFDNHZHLE1BQU0sRUFBRTtNQUNuQixNQUFNQyxRQUFRLEdBQUcsSUFBSWx4RyxZQUFZLENBQUN0QixVQUFVLENBQUN4VixNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3hEd1YsZ0JBQVUsQ0FBQ08sWUFBWSxDQUFDaXlHLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDcENBLFFBQVEsQ0FBQ3h5RyxVQUFVLENBQUN4VixNQUFNLENBQUMsR0FBR2dvSCxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ3pDQSxRQUFRLENBQUN4eUcsVUFBVSxDQUFDeFYsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHZ29ILFFBQVEsQ0FBQyxDQUFDLENBQUM7TUFDN0NBLFFBQVEsQ0FBQ3h5RyxVQUFVLENBQUN4VixNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUdnb0gsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUM3Q0YsY0FBUSxHQUFHLElBQUl6eUcsVUFBVSxDQUFDLENBQ3hCO0FBQ0U3VixZQUFJLEVBQUV3b0gsUUFBK0I7QUFDckMvdUgsVUFBRSxFQUFFMmMsU0FBUyxDQUFDQyxZQUFZLEVBQUU7QUFDNUJDLGtCQUFVLEVBQUU7QUFDYixRQUNGLENBQUM7QUFDSjtJQUNBLE9BQU87QUFDTDZFLGdCQUFVLEVBQUU7QUFDVjhILGdCQUFRLEVBQUVxbEc7T0FDWDtBQUNEempHLG1CQUFhLEVBQUUsSUFBSXRuQixPQUFPLEVBQUUsQ0FBQzJHLFNBQVMsQ0FDcEN1aUgsZ0JBQWdCLEVBQ2hCQSxnQkFBZ0IsRUFDaEJBLGdCQUFnQixDQUNqQjtBQUNEbmpHLGVBQVMsRUFBRTtLQUNJO0FBQ25CO0FBRUE7O0FBRUc7RUFDT29pRyxpQkFBaUJBLENBQUN6c0csSUFBYztBQUN4Qzs7OztBQUlHO0lBQ0gsTUFBTXd0RyxnQkFBZ0IsR0FBR3oxRyxtQkFBbUIsQ0FBQ2lJLElBQUksQ0FBQ04sR0FBRyxDQUFDVSxLQUFLLENBQUM7QUFFNUQsVUFBTTByQixDQUFDLEdBQUcsSUFBSXhuQyxPQUFPLEVBQUU7QUFDdkIsVUFBTXluQyxDQUFDLEdBQUcsSUFBSXpuQyxPQUFPLEVBQUU7QUFFdkIsUUFBSTBiLElBQUksQ0FBQ04sR0FBRyxDQUFDOHZHLFNBQVMsRUFBRTtBQUN0QjFqRixPQUFDLENBQUM5VixXQUFXLENBQUMsSUFBSSxDQUFDczNGLGNBQWMsQ0FBQ3R0RyxJQUFJLENBQUNOLEdBQUcsQ0FBQzh2RyxTQUFTLENBQUNub0YsTUFBTSxDQUFDLENBQUM7TUFFN0QsTUFBTW9vRixHQUFHLEdBQUcsSUFBSTtBQUNoQixZQUFNQyxFQUFFLEdBQUcsSUFBSW5tSCxPQUFPLEVBQUUsQ0FBQytCLElBQUksQ0FBQzBVLElBQUksQ0FBQ04sR0FBRyxDQUFDOHZHLFNBQVMsQ0FBQ1AsSUFBSSxDQUFDO0FBQ3RELFlBQU1VLEVBQUUsR0FBRyxJQUFJcG1ILE9BQU8sRUFBRSxDQUFDK0IsSUFBSSxDQUFDMFUsSUFBSSxDQUFDTixHQUFHLENBQUM4dkcsU0FBUyxDQUFDTixJQUFJLENBQUM7QUFDdEQsWUFBTVUsRUFBRSxHQUFHLElBQUlybUgsT0FBTyxFQUFFLENBQUMrQixJQUFJLENBQUMwVSxJQUFJLENBQUNOLEdBQUcsQ0FBQzh2RyxTQUFTLENBQUMzN0UsTUFBTSxDQUFDO0FBQ3hELFVBQ0VwdkMsSUFBSSxDQUFDOHhCLEdBQUcsQ0FBQ201RixFQUFFLENBQUN4ckYsR0FBRyxDQUFDeXJGLEVBQUUsQ0FBQyxDQUFDLEdBQUdGLEdBQUcsSUFDMUJockgsSUFBSSxDQUFDOHhCLEdBQUcsQ0FBQ201RixFQUFFLENBQUN4ckYsR0FBRyxDQUFDMHJGLEVBQUUsQ0FBQyxDQUFDLEdBQUdILEdBQUcsSUFDMUJockgsSUFBSSxDQUFDOHhCLEdBQUcsQ0FBQ281RixFQUFFLENBQUN6ckYsR0FBRyxDQUFDMHJGLEVBQUUsQ0FBQyxDQUFDLEdBQUdILEdBQUcsRUFFMUIxakYsQ0FBQyxDQUFDb2pGLFNBQVMsQ0FDVG52RyxJQUFJLENBQUNOLEdBQUcsQ0FBQzh2RyxTQUFTLENBQUNQLElBQUksRUFDdkJqdkcsSUFBSSxDQUFDTixHQUFHLENBQUM4dkcsU0FBUyxDQUFDTixJQUFJLEVBQ3ZCbHZHLElBQUksQ0FBQ04sR0FBRyxDQUFDOHZHLFNBQVMsQ0FBQzM3RSxNQUFNLENBQzFCLE1BQ0U5d0MsTUFBTSxDQUFDYSxJQUFJLENBQUMsT0FBT29jLElBQUksQ0FBQ04sR0FBRyxDQUFDbGYsRUFBRSw4Q0FBOEMsQ0FBQztBQUNwRixLQUFDLE1BQU11QyxNQUFNLENBQUNhLElBQUksQ0FBQyxPQUFPb2MsSUFBSSxDQUFDTixHQUFHLENBQUNsZixFQUFFLDZCQUE2QixDQUFDO0FBRW5FLFVBQU1rRyxLQUFLLEdBQUcsQ0FBQ3NaLElBQUksQ0FBQ04sR0FBRyxDQUFDbXdHLEtBQUssQ0FBQ3J6RyxHQUFHLEdBQUd3RCxJQUFJLENBQUNOLEdBQUcsQ0FBQ213RyxLQUFLLENBQUN0ekcsS0FBSyxJQUFJaXhHLGdCQUFnQjtBQUM1RSxVQUFNM3VGLEtBQUssR0FBRyxDQUFDN2UsSUFBSSxDQUFDTixHQUFHLENBQUNvd0csS0FBSyxDQUFDdHpHLEdBQUcsR0FBR3dELElBQUksQ0FBQ04sR0FBRyxDQUFDb3dHLEtBQUssQ0FBQ3Z6RyxLQUFLLElBQUlpeEcsZ0JBQWdCO0FBQzVFLFVBQU03bUgsTUFBTSxHQUFHLENBQUNxWixJQUFJLENBQUNOLEdBQUcsQ0FBQ3F3RyxLQUFLLENBQUN2ekcsR0FBRyxHQUFHd0QsSUFBSSxDQUFDTixHQUFHLENBQUNxd0csS0FBSyxDQUFDeHpHLEtBQUssSUFBSWl4RyxnQkFBZ0I7QUFFN0U7QUFDQSxVQUFNd0MsSUFBSSxHQUFHLElBQUkzbUgsSUFBSSxDQUNuQixJQUFJRSxPQUFPLENBQUMsQ0FBQzdDLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQ200QixLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUNsNEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUN0RCxJQUFJNEMsT0FBTyxDQUFDN0MsS0FBSyxHQUFHLEdBQUcsRUFBRW00QixLQUFLLEdBQUcsR0FBRyxFQUFFbDRCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FDcEQ7QUFDRDtJQUNBLE1BQU04d0QsS0FBSyxHQUFHLENBQ1p1NEQsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0MsQ0FBQyxFQUFFZ21ILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNFLENBQUMsRUFBRStsSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRyxDQUFDLEVBQ2xDOGxILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNDLENBQUMsRUFBRWdtSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDRyxDQUFDLEVBQUUrbEgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0csQ0FBQyxFQUNsQzhsSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDQyxDQUFDLEVBQUVnbUgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFK2xILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNJLENBQUMsRUFDbEM4bEgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0MsQ0FBQyxFQUFFZ21ILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNHLENBQUMsRUFBRStsSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDSSxDQUFDLEVBQ2xDOGxILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNDLENBQUMsRUFBRWdtSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRSxDQUFDLEVBQUUrbEgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0csQ0FBQyxFQUNsQzhsSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDQyxDQUFDLEVBQUVnbUgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFK2xILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNJLENBQUMsRUFDbEM4bEgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0MsQ0FBQyxFQUFFZ21ILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNHLENBQUMsRUFBRStsSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRyxDQUFDLEVBQ2xDOGxILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNDLENBQUMsRUFBRWdtSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDRyxDQUFDLEVBQUUrbEgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0ksQ0FBQyxFQUVsQzhsSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDRSxDQUFDLEVBQUVnbUgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFK2xILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNHLENBQUMsRUFDbEM4bEgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFZ21ILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNHLENBQUMsRUFBRStsSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRyxDQUFDLEVBQ2xDOGxILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNFLENBQUMsRUFBRWdtSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRSxDQUFDLEVBQUUrbEgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0ksQ0FBQyxFQUNsQzhsSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDRSxDQUFDLEVBQUVnbUgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0csQ0FBQyxFQUFFK2xILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNJLENBQUMsRUFDbEM4bEgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFZ21ILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNFLENBQUMsRUFBRStsSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRyxDQUFDLEVBQ2xDOGxILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNFLENBQUMsRUFBRWdtSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRSxDQUFDLEVBQUUrbEgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0ksQ0FBQyxFQUNsQzhsSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDRSxDQUFDLEVBQUVnbUgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0csQ0FBQyxFQUFFK2xILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNHLENBQUMsRUFDbEM4bEgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFZ21ILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNHLENBQUMsRUFBRStsSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDSSxDQUFDLEVBRWxDOGxILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNFLENBQUMsRUFBRWdtSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRSxDQUFDLEVBQUUrbEgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0ksQ0FBQyxFQUNsQzhsSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDQyxDQUFDLEVBQUVnbUgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFK2xILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNJLENBQUMsRUFDbEM4bEgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0UsQ0FBQyxFQUFFZ21ILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNFLENBQUMsRUFBRStsSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRyxDQUFDLEVBQ2xDOGxILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNDLENBQUMsRUFBRWdtSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDRSxDQUFDLEVBQUUrbEgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0csQ0FBQyxFQUNsQzhsSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDRSxDQUFDLEVBQUVnbUgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0csQ0FBQyxFQUFFK2xILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNJLENBQUMsRUFDbEM4bEgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0MsQ0FBQyxFQUFFZ21ILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNHLENBQUMsRUFBRStsSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDSSxDQUFDLEVBQ2xDOGxILElBQUksQ0FBQ2xtSCxHQUFHLENBQUNFLENBQUMsRUFBRWdtSCxJQUFJLENBQUNsbUgsR0FBRyxDQUFDRyxDQUFDLEVBQUUrbEgsSUFBSSxDQUFDam1ILEdBQUcsQ0FBQ0csQ0FBQyxFQUNsQzhsSCxJQUFJLENBQUNqbUgsR0FBRyxDQUFDQyxDQUFDLEVBQUVnbUgsSUFBSSxDQUFDbG1ILEdBQUcsQ0FBQ0csQ0FBQyxFQUFFK2xILElBQUksQ0FBQ2ptSCxHQUFHLENBQUNHLENBQUMsQ0FFbkM7SUFFRCxPQUFPO0FBQ0xnWSxnQkFBVSxFQUFFO0FBQ1Y4SCxnQkFBUSxFQUFFLElBQUlwTixVQUFVLENBQUMsQ0FDdkI7QUFBRTdWLGNBQUksRUFBRTB3RCxLQUFLO0FBQUVqM0QsWUFBRSxFQUFFMmMsU0FBUyxDQUFDQyxZQUFZLEVBQUU7QUFBRUMsb0JBQVUsRUFBRTtBQUFHLFVBQzdEO09BQ0Y7QUFDRHVPLG1CQUFhLEVBQUUsSUFBSXRuQixPQUFPLEVBQUUsQ0FBQ2dILElBQUksQ0FBQ3dnQyxDQUFDLENBQUMsQ0FBQ2pnQixRQUFRLENBQUNrZ0IsQ0FBQyxDQUFDO0FBQ2hEMWhCLGVBQVMsRUFBRTtLQUNJO0FBQ25CO0FBRUE7O0FBRUc7RUFDT3FpRyx1QkFBdUJBLENBQUMxc0csSUFBYztBQUM5QyxRQUFJLENBQUNBLElBQUksQ0FBQzJwRyxXQUFXLElBQUkzcEcsSUFBSSxDQUFDMnBHLFdBQVcsQ0FBQ3BpSCxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3RELGFBQU8sSUFBSTtBQUNiO0lBQ0EsTUFBTTBvSCxPQUFPLEdBQUcsRUFBRTtBQUVsQixTQUFLLElBQUlyeUcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHb0MsSUFBSSxDQUFDMnBHLFdBQVcsQ0FBQ3BpSCxNQUFNLEVBQUVxVyxDQUFDLEVBQUUsRUFBRTtNQUNoRCxNQUFNZ29GLE9BQU8sR0FBRzVsRixJQUFJLENBQUMycEcsV0FBVyxDQUFDL3JHLENBQUMsQ0FBQyxDQUFDNkIsS0FBSztBQUN6QyxZQUFNeXdHLElBQUksR0FBRyxJQUFJLENBQUNsa0cseUJBQXlCLENBQUM0NUUsT0FBTyxDQUFDO0FBQ3BEcXFCLGFBQU8sQ0FBQzF3SCxJQUFJLENBQUMyd0gsSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsV0FBT2grRixRQUFRLENBQUN1QixpQkFBaUIsQ0FBQ3c4RixPQUF5QixDQUFDO0FBQzlEO0FBRUE7O0FBRUc7RUFDT3RELG1CQUFtQkEsQ0FBQzNzRyxJQUFjO0FBQzFDLFFBQUksQ0FBQ0EsSUFBSSxDQUFDMnBHLFdBQVcsSUFBSTNwRyxJQUFJLENBQUMycEcsV0FBVyxDQUFDcGlILE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdEQsYUFBTyxJQUFJO0FBQ2I7QUFFQSxVQUFNNG9ILGdCQUFnQixHQUFHLElBQUksQ0FBQzNELHNCQUFzQixDQUFDeHNHLElBQUksQ0FBQzJwRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUNscUcsS0FBSyxDQUFDO0lBQy9FLElBQUksQ0FBQzB3RyxnQkFBZ0IsSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQ2p1RyxVQUFVLEVBQUUsT0FBTyxJQUFJO0lBQ2xFLE9BQU87QUFDTEEsZ0JBQVUsRUFBRTtBQUNWOEgsZ0JBQVEsRUFBRW1tRyxnQkFBZ0IsQ0FBQ2p1RyxVQUFVLENBQUM4SDtPQUN2QztNQUNENEIsYUFBYSxFQUFFdWtHLGdCQUFnQixDQUFDdmtHLGFBQWE7QUFDN0N2QixlQUFTLEVBQUU7S0FDSTtBQUNuQjtBQUVBOztBQUVHO0VBQ091aUcsb0JBQW9CQSxDQUFDNXNHLElBQWM7SUFDM0MsTUFBTXd0RyxnQkFBZ0IsR0FBR3oxRyxtQkFBbUIsQ0FBQ2lJLElBQUksQ0FBQ04sR0FBRyxDQUFDVSxLQUFLLENBQUM7QUFDNUQsVUFBTXpKLE1BQU0sR0FBRyxJQUFJLENBQUN5NUcsc0JBQXNCLENBQ3hDcHdHLElBQUksQ0FBQ04sR0FBRyxDQUFDbXBDLEtBQUssRUFDZDdvQyxJQUFJLENBQUNOLEdBQUcsQ0FBQ3BlLE1BQU0sR0FBR2tzSCxnQkFBZ0IsQ0FDbkM7SUFDRCxPQUFPO0FBQ0x0ckcsZ0JBQVUsRUFBRTtBQUNWOEgsZ0JBQVEsRUFBRSxJQUFJcE4sVUFBVSxDQUFDLENBQ3ZCO0FBQ0U3VixjQUFJLEVBQUU0UCxNQUE2QjtBQUNuQ25XLFlBQUUsRUFBRTJjLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO0FBQzVCQyxvQkFBVSxFQUFFO0FBQ2IsVUFDRjtPQUNGO0FBQ0R1TyxtQkFBYSxFQUFFLElBQUk7QUFDbkJ2QixlQUFTLEVBQUU7S0FDSTtBQUNuQjtBQUVBOztBQUVHO0VBQ093aUcsaUJBQWlCQSxDQUFDN3NHLElBQWM7QUFDeEMsVUFBTXFuQixNQUFNLEdBQUcsSUFBSTk5QixPQUFPLENBQ3hCeVcsSUFBSSxDQUFDTixHQUFHLENBQUNtcEMsS0FBSyxDQUFDeGhCLE1BQU0sQ0FBQ3I5QixDQUFDLEVBQ3ZCZ1csSUFBSSxDQUFDTixHQUFHLENBQUNtcEMsS0FBSyxDQUFDeGhCLE1BQU0sQ0FBQ3A5QixDQUFDLEVBQ3ZCK1YsSUFBSSxDQUFDTixHQUFHLENBQUNtcEMsS0FBSyxDQUFDeGhCLE1BQU0sQ0FBQ245QixDQUFDLENBQ3hCO0FBQ0QsVUFBTXNtRixVQUFVLEdBQUcsSUFBSWpuRixPQUFPLENBQzVCeVcsSUFBSSxDQUFDTixHQUFHLENBQUM4d0UsVUFBVSxDQUFDeG1GLENBQUMsRUFDckJnVyxJQUFJLENBQUNOLEdBQUcsQ0FBQzh3RSxVQUFVLENBQUN2bUYsQ0FBQyxFQUNyQitWLElBQUksQ0FBQ04sR0FBRyxDQUFDOHdFLFVBQVUsQ0FBQ3RtRixDQUFDLENBQ3RCO0FBQ0QsVUFBTXVtRixRQUFRLEdBQUcsSUFBSWxuRixPQUFPLENBQzFCeVcsSUFBSSxDQUFDTixHQUFHLENBQUMrd0UsUUFBUSxDQUFDem1GLENBQUMsRUFDbkJnVyxJQUFJLENBQUNOLEdBQUcsQ0FBQyt3RSxRQUFRLENBQUN4bUYsQ0FBQyxFQUNuQitWLElBQUksQ0FBQ04sR0FBRyxDQUFDK3dFLFFBQVEsQ0FBQ3ZtRixDQUFDLENBQ3BCO0FBQ0QsVUFBTTZ0RixRQUFRLEdBQUcsSUFBSXh1RixPQUFPLENBQzFCeVcsSUFBSSxDQUFDTixHQUFHLENBQUNxNEUsUUFBUSxDQUFDL3RGLENBQUMsRUFDbkJnVyxJQUFJLENBQUNOLEdBQUcsQ0FBQ3E0RSxRQUFRLENBQUM5dEYsQ0FBQyxFQUNuQitWLElBQUksQ0FBQ04sR0FBRyxDQUFDcTRFLFFBQVEsQ0FBQzd0RixDQUFDLENBQ3BCO0FBRUQ7OztBQUdHO0FBQ0gsVUFBTW1tSCxHQUFHLEdBQUcsSUFBSTltSCxPQUFPLEVBQUUsQ0FBQ00sVUFBVSxDQUFDMm1GLFVBQVUsRUFBRXVILFFBQVEsQ0FBQyxDQUFDdmdFLFNBQVMsRUFBRTtBQUN0RSxVQUFNODRGLEdBQUcsR0FBRyxJQUFJL21ILE9BQU8sRUFBRSxDQUFDTSxVQUFVLENBQUM0bUYsUUFBUSxFQUFFc0gsUUFBUSxDQUFDLENBQUN2Z0UsU0FBUyxFQUFFO0lBQ3BFLE1BQU0rNEYsVUFBVSxHQUFHRixHQUFHLENBQUNuc0YsR0FBRyxDQUFDb3NGLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFFbkM7QUFDQSxVQUFNbHZDLEVBQUUsR0FBRyxJQUFJNzNFLE9BQU8sRUFBRSxDQUFDTSxVQUFVLENBQUMybUYsVUFBVSxFQUFFbnBELE1BQU0sQ0FBQztJQUN2RCs1QyxFQUFFLENBQUM1cEQsU0FBUyxFQUFFO0FBQ2QsVUFBTTZwRCxFQUFFLEdBQUcsSUFBSTkzRSxPQUFPLEVBQUUsQ0FBQ00sVUFBVSxDQUFDNG1GLFFBQVEsRUFBRXBwRCxNQUFNLENBQUM7SUFDckRnNkMsRUFBRSxDQUFDN3BELFNBQVMsRUFBRTtBQUNkLFVBQU1rcUUsRUFBRSxHQUFHLElBQUluNEYsT0FBTyxFQUFFLENBQUN5NkUsWUFBWSxDQUFDNUMsRUFBRSxFQUFFQyxFQUFFLENBQUM7SUFDN0NxZ0IsRUFBRSxDQUFDbHFFLFNBQVMsRUFBRTtBQUNkOzs7QUFHRztBQUNILFFBQUlrcUUsRUFBRSxDQUFDbjZGLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtBQUNyQjtBQUNBLFlBQU1pcEgsRUFBRSxHQUFHLElBQUlqbkgsT0FBTyxFQUFFLENBQUNNLFVBQVUsQ0FBQ2t1RixRQUFRLEVBQUUxd0QsTUFBTSxDQUFDO01BQ3JEbXBGLEVBQUUsQ0FBQ2g1RixTQUFTLEVBQUU7QUFDZGtxRSxRQUFFLENBQUNwMkYsSUFBSSxDQUFDLElBQUkvQixPQUFPLEVBQUUsQ0FBQ3k2RSxZQUFZLENBQUM1QyxFQUFFLEVBQUVvdkMsRUFBRSxDQUFDLENBQUM7TUFDM0M5dUIsRUFBRSxDQUFDbHFFLFNBQVMsRUFBRTtBQUNoQjtBQUNBLFVBQU0rZ0YsRUFBRSxHQUFHLElBQUlodkcsT0FBTyxFQUFFLENBQUN5NkUsWUFBWSxDQUFDMGQsRUFBRSxFQUFFdGdCLEVBQUUsQ0FBQztJQUM3Q20zQixFQUFFLENBQUMvZ0YsU0FBUyxFQUFFO0FBQ2Q7Ozs7QUFJRztJQUNILE1BQU0wTSxHQUFHLEdBQUd6L0IsSUFBSSxDQUFDc0YsR0FBRyxDQUFDdEYsSUFBSSxDQUFDcUYsR0FBRyxDQUFDczNFLEVBQUUsQ0FBQ2w5QyxHQUFHLENBQUNtOUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakQ7QUFDQSxVQUFNN0ssS0FBSyxHQUFHL3hFLElBQUksQ0FBQ21nRixJQUFJLENBQUMxZ0QsR0FBRyxDQUFDO0FBQzVCLFVBQU01aUMsTUFBTSxHQUFHMGUsSUFBSSxDQUFDTixHQUFHLENBQUNwZSxNQUFNO0FBQzlCO0FBQ0EsVUFBTW12SCxLQUFLLEdBQUcsSUFBSUMsWUFBWSxDQUM1QixDQUFDLEVBQ0QsQ0FBQztBQUFFO0FBQ0hwdkgsVUFBTSxFQUNOQSxNQUFNO0FBQUU7QUFDUixLQUFDLEVBQ0RrMUUsS0FBSztBQUFFO0lBQ1ArNUMsVUFBVTtBQUFFO0FBQ1osS0FBQztLQUNGO0FBQ0Q7QUFDQSxVQUFNNTVHLE1BQU0sR0FBRzg1RyxLQUFLLENBQUNFLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFFbEMsVUFBTWw4RixNQUFNLEdBQUcsSUFBSW53QixPQUFPLEVBQUU7QUFDNUI7SUFDQSxNQUFNa3BILGdCQUFnQixHQUFHejFHLG1CQUFtQixDQUFDaUksSUFBSSxDQUFDTixHQUFHLENBQUNtcEMsS0FBSyxDQUFDem9DLEtBQUssQ0FBQztBQUNsRTtBQUNBLFVBQU0yckIsQ0FBQyxHQUFHLElBQUl6bkMsT0FBTyxFQUFFLENBQUM2cUgsU0FBUyxDQUFDL3RDLEVBQUUsRUFBRW0zQixFQUFFLEVBQUU3VyxFQUFFLENBQUM7QUFDN0M7QUFDQSxVQUFNNTFELENBQUMsR0FBRyxJQUFJeG5DLE9BQU8sRUFBRSxDQUFDMHhCLFdBQVcsQ0FBQ3FSLE1BQU0sQ0FBQ2xXLGNBQWMsQ0FBQ3E4RixnQkFBZ0IsQ0FBQyxDQUFDO0lBRTVFLzRGLE1BQU0sQ0FBQzVJLFFBQVEsQ0FBQ2lnQixDQUFDLENBQUMsQ0FBQ2pnQixRQUFRLENBQUNrZ0IsQ0FBQyxDQUFDO0FBRTlCO0FBQ0EsVUFBTUMsQ0FBQyxHQUFHLElBQUkxbkMsT0FBTyxFQUFFLENBQUNvM0IsS0FBSyxDQUMzQixJQUFJbnlCLE9BQU8sQ0FBQ2lrSCxnQkFBZ0IsRUFBRUEsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDLENBQ2xFO0FBQ0QvNEYsVUFBTSxDQUFDNUksUUFBUSxDQUFDbWdCLENBQUMsQ0FBQztBQUNsQjtJQUVBLE9BQU87QUFDTDlwQixnQkFBVSxFQUFFO0FBQ1Y4SCxnQkFBUSxFQUFFLElBQUlwTixVQUFVLENBQUMsQ0FDdkI7QUFDRTdWLGNBQUksRUFBRSxJQUFJLENBQUM2cEgsbUJBQW1CLENBQUNqNkcsTUFBTSxDQUFDO0FBQ3RDblcsWUFBRSxFQUFFMmMsU0FBUyxDQUFDQyxZQUFZLEVBQUU7QUFDNUJDLG9CQUFVLEVBQUU7QUFDYixVQUNGO09BQ0Y7QUFDRHVPLG1CQUFhLEVBQUU2SSxNQUFNO0FBQ3JCcEssZUFBUyxFQUFFO0tBQ0k7QUFDbkI7QUFFQTs7QUFFRztFQUNPeWlHLHFCQUFxQkEsQ0FBQzlzRyxJQUFjO0lBQzVDLE1BQU13dEcsZ0JBQWdCLEdBQUd6MUcsbUJBQW1CLENBQUNpSSxJQUFJLENBQUNOLEdBQUcsQ0FBQ1UsS0FBSyxDQUFDO0FBRTVELFVBQU16VSxNQUFNLEdBQUcsSUFBSXBDLE9BQU8sQ0FDeEJ5VyxJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLENBQUN4aEIsTUFBTSxDQUFDcjlCLENBQUMsRUFDdkJnVyxJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLENBQUN4aEIsTUFBTSxDQUFDcDlCLENBQUMsRUFDdkIrVixJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLENBQUN4aEIsTUFBTSxDQUFDbjlCLENBQUMsQ0FDeEIsQ0FBQ2luQixjQUFjLENBQUNxOEYsZ0JBQWdCLENBQUM7QUFDbEMsVUFBTXFELEtBQUssR0FBRyxJQUFJdG5ILE9BQU8sQ0FDdkJ5VyxJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLENBQUNvbUUsSUFBSSxDQUFDamxILENBQUMsRUFDckJnVyxJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLENBQUNvbUUsSUFBSSxDQUFDaGxILENBQUMsRUFDckIrVixJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLENBQUNvbUUsSUFBSSxDQUFDL2tILENBQUMsQ0FDdEIsQ0FBQ3N0QixTQUFTLEVBQUU7QUFDYixVQUFNczVGLEtBQUssR0FBRyxJQUFJdm5ILE9BQU8sQ0FDdkJ5VyxJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLENBQUNxbUUsSUFBSSxDQUFDbGxILENBQUMsRUFDckJnVyxJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLENBQUNxbUUsSUFBSSxDQUFDamxILENBQUMsRUFDckIrVixJQUFJLENBQUNOLEdBQUcsQ0FBQ21wQyxLQUFLLENBQUNxbUUsSUFBSSxDQUFDaGxILENBQUMsQ0FDdEIsQ0FBQ3N0QixTQUFTLEVBQUU7QUFFYixRQUFJdmlCLFVBQVUsR0FBRyxDQUFDLEdBQUd4USxJQUFJLENBQUNDLEVBQUUsR0FBR3NiLElBQUksQ0FBQ04sR0FBRyxDQUFDcXhHLFdBQVcsR0FBR3ZELGdCQUFnQixHQUFHLEVBQUU7SUFDM0V2NEcsVUFBVSxHQUFHK3JDLFFBQVEsQ0FBQy9yQyxVQUFVLENBQUNoUCxRQUFRLEVBQUUsQ0FBQztJQUM1QyxNQUFNMFEsTUFBTSxHQUFHLEVBQUU7SUFFakIsS0FBSyxJQUFJZ0YsS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxJQUFJMUcsVUFBVSxFQUFFMEcsS0FBSyxFQUFFLEVBQUU7TUFDaEQsTUFBTWtsQyxDQUFDLEdBQUlsbEMsS0FBSyxHQUFHbFgsSUFBSSxDQUFDQyxFQUFFLEdBQUcsQ0FBQyxHQUFJdVEsVUFBVTtBQUM1QyxZQUFNakwsQ0FBQyxHQUFHdkYsSUFBSSxDQUFDcWdGLEdBQUcsQ0FBQ2prQyxDQUFDLENBQUMsR0FBRzdnQyxJQUFJLENBQUNOLEdBQUcsQ0FBQ3F4RyxXQUFXLEdBQUd2RCxnQkFBZ0I7QUFDL0QsWUFBTXZqSCxDQUFDLEdBQUd4RixJQUFJLENBQUN5aUYsR0FBRyxDQUFDcm1DLENBQUMsQ0FBQyxHQUFHN2dDLElBQUksQ0FBQ04sR0FBRyxDQUFDc3hHLFlBQVksR0FBR3hELGdCQUFnQjtNQUNoRSxNQUFNeUQsS0FBSyxHQUFHLElBQUkxbkgsT0FBTyxDQUFDc25ILEtBQUssQ0FBQzdtSCxDQUFDLEdBQUdBLENBQUMsRUFBRTZtSCxLQUFLLENBQUM1bUgsQ0FBQyxHQUFHRCxDQUFDLEVBQUU2bUgsS0FBSyxDQUFDM21ILENBQUMsR0FBR0YsQ0FBQyxDQUFDO01BQ2hFLE1BQU1rbkgsS0FBSyxHQUFHLElBQUkzbkgsT0FBTyxDQUFDdW5ILEtBQUssQ0FBQzltSCxDQUFDLEdBQUdDLENBQUMsRUFBRTZtSCxLQUFLLENBQUM3bUgsQ0FBQyxHQUFHQSxDQUFDLEVBQUU2bUgsS0FBSyxDQUFDNW1ILENBQUMsR0FBR0QsQ0FBQyxDQUFDO0FBRWhFLFlBQU0yN0QsRUFBRSxHQUFHLElBQUlyOEQsT0FBTyxFQUFFLENBQUM0bkgsVUFBVSxDQUFDRixLQUFLLEVBQUVDLEtBQUssQ0FBQyxDQUFDdDdGLEdBQUcsQ0FBQ2pxQixNQUFNLENBQUM7QUFDN0RnTCxZQUFNLENBQUNwWCxJQUFJLENBQUNxbUUsRUFBRSxDQUFDO0FBQ2pCO0lBRUEsT0FBTztBQUNMMWpELGdCQUFVLEVBQUU7QUFDVjhILGdCQUFRLEVBQUUsSUFBSXBOLFVBQVUsQ0FBQyxDQUN2QjtBQUNFN1YsY0FBSSxFQUFFLElBQUksQ0FBQzZwSCxtQkFBbUIsQ0FBQ2o2RyxNQUFNLENBQUM7QUFDdENuVyxZQUFFLEVBQUUyYyxTQUFTLENBQUNDLFlBQVksRUFBRTtBQUM1QkMsb0JBQVUsRUFBRTtBQUNiLFVBQ0Y7T0FDRjtBQUNEdU8sbUJBQWEsRUFBRSxJQUFJO0FBQ25CdkIsZUFBUyxFQUFFO0tBQ0k7QUFDbkI7QUFFQTs7QUFFRztFQUVPK2xHLHNCQUFzQkEsQ0FDOUJ2bkUsS0FnQkMsRUFDRHZuRCxNQUFjLEVBQ2Q4dkgsVUFBVSxHQUFHLENBQUMsRUFDZEMsUUFBUSxHQUFHLENBQUMsR0FBRzVzSCxJQUFJLENBQUNDLEVBQUUsRUFDdEJ1USxVQUFVLEdBQUcsR0FBRztBQUVoQjtJQUNBLE1BQU10SixNQUFNLEdBQUcsSUFBSSxDQUFDMmhILGNBQWMsQ0FBQ3prRSxLQUFLLENBQUN4aEIsTUFBTSxFQUFFcXRELE1BQU0sQ0FBQztJQUN4RCxNQUFNbThCLEtBQUssR0FBRyxJQUFJLENBQUN2RCxjQUFjLENBQUN6a0UsS0FBSyxDQUFDb21FLElBQUksRUFBRXoxQixNQUFNLENBQUM7SUFDckQsTUFBTXMzQixLQUFLLEdBQUcsSUFBSSxDQUFDeEQsY0FBYyxDQUFDemtFLEtBQUssQ0FBQ3FtRSxJQUFJLEVBQUV6MUIsTUFBTSxDQUFDO0FBRXJEO0lBQ0FvM0IsS0FBSyxDQUFDcjVGLFNBQVMsRUFBRTtJQUNqQnM1RixLQUFLLENBQUN0NUYsU0FBUyxFQUFFO0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBRUE7SUFDQSxNQUFNN2dCLE1BQU0sR0FBRyxJQUFJNEgsWUFBWSxDQUFDLENBQUN0SixVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVyRCxLQUFLLElBQUkwRyxLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFLLElBQUkxRyxVQUFVLEVBQUUwRyxLQUFLLEVBQUUsRUFBRTtNQUNoRCxNQUFNa2xDLENBQUMsR0FBR3V3RSxVQUFVLEdBQUl6MUcsS0FBSyxJQUFJMDFHLFFBQVEsR0FBR0QsVUFBVSxDQUFDLEdBQUluOEcsVUFBVTtNQUNyRSxNQUFNakwsQ0FBQyxHQUFHdkYsSUFBSSxDQUFDcWdGLEdBQUcsQ0FBQ2prQyxDQUFDLENBQUMsR0FBR3YvQyxNQUFNO01BQzlCLE1BQU0ySSxDQUFDLEdBQUd4RixJQUFJLENBQUN5aUYsR0FBRyxDQUFDcm1DLENBQUMsQ0FBQyxHQUFHdi9DLE1BQU07TUFDOUIsTUFBTTJ2SCxLQUFLLEdBQUczRyxNQUFNLENBQUNwL0csR0FBRyxDQUFDMmxILEtBQUssQ0FBQzdtSCxDQUFDLEdBQUdBLENBQUMsRUFBRTZtSCxLQUFLLENBQUM1bUgsQ0FBQyxHQUFHRCxDQUFDLEVBQUU2bUgsS0FBSyxDQUFDM21ILENBQUMsR0FBR0YsQ0FBQyxDQUFDO01BQy9ELE1BQU1rbkgsS0FBSyxHQUFHeEYsTUFBTSxDQUFDeGdILEdBQUcsQ0FBQzRsSCxLQUFLLENBQUM5bUgsQ0FBQyxHQUFHQyxDQUFDLEVBQUU2bUgsS0FBSyxDQUFDN21ILENBQUMsR0FBR0EsQ0FBQyxFQUFFNm1ILEtBQUssQ0FBQzVtSCxDQUFDLEdBQUdELENBQUMsQ0FBQztBQUUvRCxZQUFNMjdELEVBQUUsR0FBRytsRCxNQUFNLENBQUN3RixVQUFVLENBQUNGLEtBQUssRUFBRUMsS0FBSyxDQUFDLENBQUN0N0YsR0FBRyxDQUFDanFCLE1BQU0sQ0FBQztNQUV0RGdMLE1BQU0sQ0FBQ2dGLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBR2lxRCxFQUFFLENBQUM1N0QsQ0FBQztNQUN4QjJNLE1BQU0sQ0FBQ2dGLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdpcUQsRUFBRSxDQUFDMzdELENBQUM7TUFDNUIwTSxNQUFNLENBQUNnRixLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHaXFELEVBQUUsQ0FBQzE3RCxDQUFDO0FBQzlCO0FBQ0EsV0FBT3lNLE1BQU07QUFDZjtFQUVVMjJHLGNBQWNBLENBQ3RCOWxFLEdBQWtGLEVBQ2xGdjBCLE1BQWdCLEVBQ2hCeUksS0FBSyxHQUFHLElBQUk7SUFFWixNQUFNOHhGLGdCQUFnQixHQUFHOXhGLEtBQUssR0FBRzNqQixtQkFBbUIsQ0FBQ3l2QyxHQUFHLENBQUNwbkMsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNuRSxNQUFNNGpCLENBQUMsR0FBRy9RLE1BQU0sR0FBR0EsTUFBTSxHQUFHLElBQUkxcEIsT0FBTyxFQUFFO0lBQ3pDLElBQUlpK0MsR0FBRyxDQUFDbGxELEtBQUssRUFBRTtBQUNiO0FBQ0EwaEMsT0FBQyxDQUFDOTRCLEdBQUcsQ0FDSHM4QyxHQUFHLENBQUNsbEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHa3JILGdCQUFnQixFQUMvQmhtRSxHQUFHLENBQUNsbEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHa3JILGdCQUFnQixFQUMvQmhtRSxHQUFHLENBQUNsbEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHa3JILGdCQUFnQixDQUNoQztBQUNILEtBQUMsTUFBTTtBQUNMO01BQ0F4cEYsQ0FBQyxDQUFDOTRCLEdBQUcsQ0FDSHM4QyxHQUFHLENBQUN4OUMsQ0FBQyxHQUFHd2pILGdCQUFnQixFQUN4QmhtRSxHQUFHLENBQUN2OUMsQ0FBQyxHQUFHdWpILGdCQUFnQixFQUN4QmhtRSxHQUFHLENBQUN0OUMsQ0FBQyxHQUFHc2pILGdCQUFnQixDQUN6QjtBQUNIO0FBQ0EsV0FBT3hwRixDQUFDO0FBQ1Y7RUFFVW9yRixpQkFBaUJBLENBQ3pCNW5FLEdBQWtGO0lBRWxGLElBQUlBLEdBQUcsQ0FBQ2xsRCxLQUFLLEVBQUU7TUFDYixPQUFPLENBQUNrbEQsR0FBRyxDQUFDbGxELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRWtsRCxHQUFHLENBQUNsbEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFa2xELEdBQUcsQ0FBQ2xsRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsS0FBQyxNQUFNO0FBQ0wsYUFBTyxDQUFDa2xELEdBQUcsQ0FBQ3g5QyxDQUFDLEVBQUV3OUMsR0FBRyxDQUFDdjlDLENBQUMsRUFBRXU5QyxHQUFHLENBQUN0OUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0Y7RUFFVTBtSCxtQkFBbUJBLENBQUMvN0YsS0FBNEI7SUFDeEQsTUFBTTRLLE1BQU0sR0FBRyxJQUFJdDJCLEtBQUssQ0FBQzByQixLQUFLLENBQUN0dEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNK3BILEtBQUssR0FBa0IsRUFBRTtJQUMvQixLQUFLLElBQUk1cEgsQ0FBQyxHQUFHLENBQUMsRUFBRXlnQyxDQUFDLEdBQUcsQ0FBQyxFQUFFemdDLENBQUMsR0FBR210QixLQUFLLENBQUN0dEIsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRXlnQyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3BEdFQsV0FBSyxDQUFDbnRCLENBQUMsQ0FBQyxDQUFDd3VCLE9BQU8sQ0FBQ283RixLQUFLLENBQUM7QUFDdkI3eEYsWUFBTSxDQUFDMEksQ0FBQyxDQUFDLEdBQUdtcEYsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNwQjd4RixNQUFNLENBQUMwSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdtcEYsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4Qjd4RixZQUFNLENBQUMwSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdtcEYsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QztBQUNBLFdBQU83eEYsTUFBTTtBQUNmO0FBRVUvSyxjQUFZQSxDQUFDQyxXQUF1QixFQUFFNDhGLFFBQVEsR0FBRyxLQUFLO0lBQzlELE1BQU0zeEcsTUFBTSxHQUFHLElBQUl6VyxLQUFLLENBQVN3ckIsV0FBVyxDQUFDcHRCLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEQsU0FBSyxJQUFJcVcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHK1csV0FBVyxDQUFDcHRCLE1BQU0sRUFBRXFXLENBQUMsRUFBRSxFQUFFO0FBQzNDLFlBQU16YyxLQUFLLEdBQUd3ekIsV0FBVyxDQUFDenhCLEdBQUcsQ0FBQzBhLENBQUMsQ0FBQztBQUNoQyxZQUFNN1YsQ0FBQyxHQUFJNUcsS0FBSyxJQUFJLEVBQUUsR0FBSSxJQUFJO0FBQzlCLFlBQU02RyxDQUFDLEdBQUk3RyxLQUFLLElBQUksQ0FBQyxHQUFJLElBQUk7QUFDN0IsWUFBTThHLENBQUMsR0FBRzlHLEtBQUssR0FBRyxJQUFJO01BQ3RCeWUsTUFBTSxDQUFDaEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHN1YsQ0FBQyxHQUFHLEdBQUc7TUFDdkI2WCxNQUFNLENBQUNoQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHNVYsQ0FBQyxHQUFHLEdBQUc7TUFDM0I0WCxNQUFNLENBQUNoQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHM1YsQ0FBQyxHQUFHLEdBQUc7QUFDM0IsVUFBSXNwSCxRQUFRLEVBQUU7QUFDWjN4RyxjQUFNLENBQUNoQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDNHpHLFlBQVksQ0FBQzV4RyxNQUFNLENBQUNoQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaERnQyxNQUFNLENBQUNoQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzR6RyxZQUFZLENBQUM1eEcsTUFBTSxDQUFDaEMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RGdDLE1BQU0sQ0FBQ2hDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDNHpHLFlBQVksQ0FBQzV4RyxNQUFNLENBQUNoQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0Y7QUFDQSxXQUFPZ0MsTUFBTTtBQUNmO0VBRVU0eEcsWUFBWUEsQ0FBQ3huSCxDQUFTO0FBQzlCLFFBQUlBLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQ2YsSUFBSUEsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsTUFDcEIsSUFBSUEsQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPQSxDQUFDLEdBQUcsS0FBSyxNQUNqQyxPQUFPdkYsSUFBSSxDQUFDMmtDLEdBQUcsQ0FBQyxDQUFDcC9CLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQztBQUNoRDtBQUVBO0VBQ1U0akgsaUJBQWlCQSxDQUFDL3hHLE1BQXdCO0lBQ2xELE9BQU9BLE1BQU0sSUFBSUEsTUFBTSxDQUFDbGMsTUFBTSxDQUFFbWQsQ0FBWSxJQUFLQSxDQUFDLENBQUMvVixJQUFJLElBQUkrVixDQUFDLENBQUMvVixJQUFJLENBQUNRLE1BQU0sQ0FBQyxDQUFDQSxNQUFNLEdBQUcsQ0FBQztBQUN0Rjs7QUEzaUNjcWtILHdCQUFTLENBQUEwQyxTQUFBLEdBQWdDLEVBQWhDOztBQ0p6QixNQUFNbUQsMkJBQTJCLEdBQUcsSUFBSTtBQUN4QyxNQUFNQyx3QkFBd0IsR0FBRyxHQUFHO0FBQ3BDLE1BQU1DLDJCQUEyQixHQUFHLEdBQUc7QUFDdkMsTUFBTUMseUJBQXlCLEdBQUcsSUFBSTtBQUN0QyxNQUFNQywwQkFBMEIsR0FBRyxJQUFJO0FBQ3ZDLE1BQU1DLHdCQUF3QixHQUFHLEtBQUs7QUFDdEMsTUFBTUMsd0JBQXdCLEdBQUcsQ0FBQztBQUNsQyxNQUFNQyxrQ0FBa0MsR0FBRyxNQUFPO0FBQ2xELE1BQU1DLHNDQUFzQyxHQUMxQywyQ0FBMkM7QUFFdkMsTUFBT0MsYUFBYyxTQUFRaEksTUFBTTtFQVF2QyxJQUFXeDZCLFFBQVFBLEdBQUE7SUFDakIsT0FBTyxJQUFJLENBQUMwNkIsU0FBUztBQUN2QjtFQUVBLElBQVcrSCxRQUFRQSxHQUFBO0lBQ2pCLE9BQU8sSUFBSSxDQUFDQyxVQUFVO0FBQ3hCO0FBRUFsekgsY0FDRW16SCxVQUFxQixFQUNyQjNpQyxRQUFnQixFQUNoQjRpQyxTQUFrQixFQUNsQkMsYUFBdUIsRUFDdkJwSSxZQUFzQixFQUN0QnFJLE1BQXVELEVBQ3ZEQyxhQUFtQyxFQUNuQ0MsY0FBeUI7QUFFekIsU0FBSyxDQUFDaGpDLFFBQVEsRUFBRXk2QixZQUFZLENBQUM7SUF0QnJCLElBQVcsQ0FBQXdJLFdBQUEsR0FBRyxLQUFLO0lBQ25CLElBQVUsQ0FBQVAsVUFBQSxHQUFHLEtBQUs7SUFzQjFCLElBQUksQ0FBQzFuRyxJQUFJLEdBQUcybkcsVUFBVTtBQUN0QixRQUFJLENBQUM3MEMsR0FBRyxHQUFHZzFDLE1BQU0sSUFBSXp2SCxNQUFNLENBQUN5NkUsR0FBRztJQUMvQixJQUFJO0FBQ0YsVUFBSSxDQUFDcDRFLE1BQU0sR0FBRyxJQUFJLENBQUN3dEgsZ0JBQWdCLENBQ2pDbGpDLFFBQVEsRUFDUjRpQyxTQUFTLEVBQ1RDLGFBQWEsRUFDYnBJLFlBQVksRUFDWnNJLGFBQWEsRUFDYkMsY0FBYyxDQUNmO0tBQ0YsQ0FBQyxPQUFPcitGLENBQUMsRUFBRTtBQUNWdHhCLFlBQU0sQ0FBQ3VDLEtBQUssQ0FBQyt1QixDQUFDLENBQUM7QUFDZjtBQUNGO0FBRUEsUUFBSSxDQUFDdytGLFNBQVMsR0FBRyxJQUFJbFMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDdjdHLE1BQU0sRUFBRSxJQUFJLENBQUNzbEIsSUFBSSxDQUFDO0FBQy9EO0FBRVVrb0csa0JBQWdCQSxDQUN4QmxqQyxRQUFnQixFQUNoQjRpQyxTQUFrQixFQUNsQlEsY0FBd0IsRUFDeEIzSSxZQUFzQixFQUN0QnNJLGFBQW1DLEVBQ25DQyxjQUF5QjtJQUd6QixJQUFJSyxLQUFLLEdBQUd6dkgsU0FBUztJQUNyQixJQUFJO01BQ0Z5dkgsS0FBSyxHQUFHVCxTQUFTLElBQUtVLFlBQVksQ0FBQ0MsT0FBTyxDQUFDLFdBQVcsQ0FBd0I7QUFDaEYsS0FBQyxDQUFDLE1BQU07QUFDTjtBQUFBO0lBR0YsSUFBSSxDQUFDRixLQUFLLEVBQUU7QUFDVmh3SCxZQUFNLENBQUN1QyxLQUFLLENBQ1YsaUZBQWlGLENBQ2xGO0FBQ0g7QUFFQSxVQUFNNHRILEdBQUcsR0FBRyxJQUFJQyxHQUFHLENBQUN6akMsUUFBUSxDQUFDO0lBRTdCLE1BQU1rNkIsUUFBUSxHQUFHc0osR0FBRyxDQUFDRSxRQUFRLENBQUM3dkgsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUN4QyxRQUNFcW1ILFFBQVEsQ0FBQ3JpSCxNQUFNLEdBQUcsQ0FBQyxJQUNuQjJySCxHQUFHLENBQUNFLFFBQVEsQ0FBQzNvSCxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQ3RDeW9ILEdBQUcsQ0FBQ0UsUUFBUSxDQUFDM29ILE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDdEM7QUFDQSxZQUFNLElBQUlsRixLQUFLLENBQUMsK0JBQStCLENBQUM7QUFDbEQ7QUFFQSxVQUFNOHRILFNBQVMsR0FBR0gsR0FBRyxDQUFDN3JGLE1BQU07QUFDNUIsVUFBTWlzRixRQUFRLEdBQUcxSixRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFVBQU0ySixRQUFRLEdBQUczSixRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRTVCLE9BQU80SixvQkFBb0IsQ0FBQ0MsYUFBYSxDQUFDO01BQ3hDSixTQUFTO01BQ1RDLFFBQVE7TUFDUkMsUUFBUTtNQUNSUixLQUFLO01BQ0xOLGFBQWE7QUFDYkM7QUFDRCxNQUFDO0FBQ0o7RUFFTyxNQUFNcnRILElBQUlBLEdBQUE7QUFDZixVQUFNa1gsS0FBSyxHQUFHOVQsV0FBVyxDQUFDRCxHQUFHLEVBQUU7SUFDL0IsSUFBSWtySCxVQUFVLEdBQUduM0csS0FBSztJQUN0QixJQUFJbzNHLEtBQUssR0FBRyxJQUFJO0lBQ2hCLElBQUlDLFdBQVcsR0FBRyxDQUFDO0lBQ25CLE1BQU1DLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ3p1SCxNQUFNLENBQUMwdUgsbUJBQW1CLEVBQUU7QUFDckQsVUFBTUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDQyx5QkFBeUIsRUFBRTtBQUMvRCxRQUFJRCxzQkFBc0IsR0FBRyxDQUFDLElBQUlGLEtBQUssR0FBR0Usc0JBQXNCLEVBQUU7TUFDaEUsTUFBTXZ1SCxPQUFPLEdBQ1gsa0NBQ0UsSUFBSSxDQUFDa3FGLFFBQ1AsUUFBUW1rQyxLQUFLLENBQUNJLGNBQWMsRUFBRSxHQUFHLEdBQ2pDLENBQXNERiwyRUFBc0IsQ0FBQ0UsY0FBYyxFQUFFLENBQUksTUFDakcsQ0FBNkYsK0ZBQzdGLENBQVVoQywrQ0FBc0MsQ0FBeUI7QUFFM0VsdkgsWUFBTSxDQUFDdUMsS0FBSyxDQUFDRSxPQUFPLENBQUM7QUFDckIsVUFBSSxDQUFDNUYsSUFBSSxDQUFDcXFILFdBQVcsQ0FBQ2lLLFdBQVcsRUFBRTtBQUFFMXVIO0FBQVMsUUFBQztBQUMvQyxVQUFJLENBQUM1RixJQUFJLENBQUNxcUgsV0FBVyxDQUFDa0ssWUFBWSxFQUFFO0FBQUVDLGdCQUFRLEVBQUUsQ0FBQztRQUFFNXpILEVBQUUsRUFBRSxJQUFJLENBQUNrdkY7QUFBUSxPQUFFLENBQUM7TUFDdkUsSUFBSSxDQUFDOXZGLElBQUksQ0FBQ3FxSCxXQUFXLENBQUNvSyxhQUFhLEVBQUUsSUFBSSxDQUFDM2tDLFFBQVEsQ0FBQztBQUNuRCxZQUFNLElBQUksQ0FBQ3RxRixNQUFNLENBQUNrdkgsWUFBWSxFQUFFO0FBQ2hDLGFBQU9ydkgsT0FBTyxDQUFDQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQy9CO0lBRUEsSUFBSXF2SCxVQUFVLEdBQUcsQ0FBQztJQUNsQixJQUFJQyxrQkFBa0IsR0FBRyxJQUFJO0lBQzdCLElBQUksQ0FBQ0MsY0FBYyxFQUFFO0lBRXJCMXhILE1BQU0sQ0FBQ2EsSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQzhyRixRQUFRLENBQUM7SUFFakQsV0FBVyxNQUFNbG9DLEdBQUcsSUFBSSxJQUFJLENBQUNwaUQsTUFBTSxDQUFDc3ZILGlCQUFpQixFQUFFLEVBQUU7TUFDdkQsSUFBSSxJQUFJLENBQUMvQixXQUFXLEVBQUU7UUFDcEIsSUFBSSxDQUFDL3lILElBQUksQ0FBQ3FxSCxXQUFXLENBQUNvSyxhQUFhLEVBQUUsSUFBSSxDQUFDM2tDLFFBQVEsQ0FBQztBQUNuRCxlQUFPenFGLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUMvQjtBQUNBLFVBQUl5dUgsS0FBSyxFQUFFO0FBQ1RhLDBCQUFrQixHQUFHLElBQUksQ0FBQzNCLFNBQVMsQ0FBQ3htRCxRQUFRLENBQzFDLElBQUksQ0FBQ3FqQixRQUFRLEVBQ2Jsb0MsR0FBb0IsRUFDbkJqN0MsS0FBSyxJQUFJO0FBQ1Jnb0gsb0JBQVUsRUFBRTtBQUNaLGNBQUksQ0FBQzMwSCxJQUFJLENBQUNxcUgsV0FBVyxDQUFDMEssU0FBUyxFQUFFO0FBQy9CcG9IO0FBQ0QsWUFBQztBQUNKLFNBQUMsQ0FDRjtBQUNEb25ILGFBQUssR0FBRyxLQUFLO0FBQ2Y7QUFDQUMsaUJBQVcsRUFBRTtBQUNiLFVBQUksQ0FBQ2gwSCxJQUFJLENBQUNxcUgsV0FBVyxDQUFDa0ssWUFBWSxFQUFFO0FBQ2xDQyxnQkFBUSxFQUNOUCxLQUFLLEdBQUcsQ0FBQyxHQUNMcHZILElBQUksQ0FBQ3NGLEdBQUcsQ0FDTjBuSCwyQkFBMkIsRUFDMUJtQyxXQUFXLEdBQUdDLEtBQUssR0FBSXBDLDJCQUEyQixDQUNwRCxHQUNEQSwyQkFBMkI7UUFDakNqeEgsRUFBRSxFQUFFLElBQUksQ0FBQ2t2RjtBQUNWLFFBQUM7QUFDSjtBQUVBLFFBQUk4a0Msa0JBQWtCLEVBQUU7QUFDdEIsWUFBTUEsa0JBQWtCO0FBQzFCO0FBRUF6eEgsVUFBTSxDQUFDYSxJQUFJLENBQ1Qsc0NBQXNDLElBQUksQ0FBQzhyRixRQUFRLE9BQ2pELENBQUNqbkYsV0FBVyxDQUFDRCxHQUFHLEVBQUUsR0FBR2tySCxVQUFVLElBQUk3K0MsT0FBTyxDQUFDQyxNQUM3Qyw2QkFBNkI4K0MsV0FBVyxDQUFJQyxRQUFLLENBQy9DLG9CQUFJLENBQUNucEcsSUFBSSxDQUFDcUQsU0FDWixFQUFFLENBQ0g7QUFDRDJsRyxjQUFVLEdBQUdqckgsV0FBVyxDQUFDRCxHQUFHLEVBQUU7SUFFOUJ6RixNQUFNLENBQUNhLElBQUksQ0FDVCxDQUE4QixpQ0FBSSxDQUFDOHJGLFFBQVEsQ0FDekMsT0FBQ2puRixXQUFXLENBQUNELEdBQUcsRUFBRSxHQUFHK1QsS0FBSyxJQUFJczRELE9BQU8sQ0FBQ0MsTUFDeEMseUJBQXlCLElBQUksQ0FBQ3BxRCxJQUFJLENBQUNxRCxTQUFTLEVBQUUsQ0FDL0M7SUFFRCxJQUFJd21HLFVBQVUsS0FBSyxDQUFDLEVBQUU7TUFDcEJ4eEgsTUFBTSxDQUFDYSxJQUFJLENBQUMseUNBQXlDLElBQUksQ0FBQzhyRixRQUFRLEVBQUUsQ0FBQztBQUNyRSxVQUFJLENBQUM5dkYsSUFBSSxDQUFDcXFILFdBQVcsQ0FBQ2lLLFdBQVcsRUFBRTtBQUNqQzF1SCxlQUFPLEVBQUUsMENBQTBDLElBQUksQ0FBQ2txRixRQUFRO0FBQ2pFLFFBQUM7QUFDSjtJQUNBLElBQUksSUFBSSxDQUFDaWpDLFdBQVcsRUFBRTtBQUNwQixhQUFPMXRILE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUMvQjtBQUVBLFVBQU0sSUFBSSxDQUFDMnRILFNBQVMsQ0FBQ2xMLGdCQUFnQixFQUFFO0FBQ3ZDLFVBQU0sSUFBSSxDQUFDa0wsU0FBUyxDQUFDNUssY0FBYyxFQUFFO0FBQ3JDLFVBQU0sSUFBSSxDQUFDNEssU0FBUyxDQUFDaEosZ0JBQWdCLEVBQUU7QUFDdkMsUUFBSSxDQUFDanFILElBQUksQ0FBQ3FxSCxXQUFXLENBQUNrSyxZQUFZLEVBQUU7QUFDbENDLGNBQVEsRUFBRTFDLHdCQUF3QjtNQUNsQ2x4SCxFQUFFLEVBQUUsSUFBSSxDQUFDa3ZGO0FBQ1YsTUFBQztJQUNGM3NGLE1BQU0sQ0FBQ2EsSUFBSSxDQUNULG1DQUFtQyxJQUFJLENBQUM4ckYsUUFBUSxPQUM5QyxDQUFDam5GLFdBQVcsQ0FBQ0QsR0FBRyxFQUFFLEdBQUdrckgsVUFBVSxJQUFJNytDLE9BQU8sQ0FBQ0MsTUFDN0MsV0FBVyxDQUNaO0FBQ0Q0K0MsY0FBVSxHQUFHanJILFdBQVcsQ0FBQ0QsR0FBRyxFQUFFO0lBRTlCLE1BQU0sSUFBSSxDQUFDb3NILG1CQUFtQixDQUFDLENBQUNDLE1BQU0sRUFBRUMsVUFBVSxLQUFJO0FBQ3BELFVBQUksQ0FBQ2wxSCxJQUFJLENBQUNxcUgsV0FBVyxDQUFDa0ssWUFBWSxFQUFFO1FBQ2xDQyxRQUFRLEVBQ056QywyQkFBMkIsR0FDMUJrRCxNQUFNLEdBQUdDLFVBQVUsSUFDakJsRCx5QkFBeUIsR0FBR0QsMkJBQTJCLENBQUM7UUFDN0RueEgsRUFBRSxFQUFFLElBQUksQ0FBQ2t2RjtBQUNWLFFBQUM7QUFDSixLQUFDLENBQUM7SUFDRjNzRixNQUFNLENBQUNhLElBQUksQ0FDVCw2Q0FBNkMsSUFBSSxDQUFDOHJGLFFBQVEsT0FDeEQsQ0FBQ2puRixXQUFXLENBQUNELEdBQUcsRUFBRSxHQUFHa3JILFVBQVUsSUFBSTcrQyxPQUFPLENBQUNDLE1BQzdDLFdBQVcsQ0FDWjtBQUNENCtDLGNBQVUsR0FBR2pySCxXQUFXLENBQUNELEdBQUcsRUFBRTtBQUU5QixVQUFNLElBQUksQ0FBQ3BELE1BQU0sQ0FBQ2t2SCxZQUFZLEVBQUU7QUFFaEMsVUFBTTFrQyxFQUFFLEdBQUdubkYsV0FBVyxDQUFDRCxHQUFHLEVBQUU7QUFDNUIsVUFBTTJpQixpQkFBaUIsR0FBRyxJQUFJeWdHLHdCQUF3QixFQUFFO0lBRXhELE1BQU16ckUsVUFBVSxHQUFHLElBQUksQ0FBQ3oxQixJQUFJLENBQUNnRixhQUFhLENBQUMsSUFBSSxDQUFDZ2dFLFFBQVEsQ0FBQztJQUN6RCxJQUFJLENBQUN2dkMsVUFBVSxFQUFFLE9BQU9sN0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzlDLFVBQU02dkgsZUFBZSxHQUFHdHdILElBQUksQ0FBQ3FGLEdBQUcsQ0FBQyxJQUFJLENBQUM0Z0IsSUFBSSxDQUFDcUQsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN4RCxNQUFNMUMsQ0FBQyxHQUFHODBCLFVBQVUsQ0FBQ2oxQixlQUFlLENBQUNDLGlCQUFpQixFQUFHNWUsS0FBYSxJQUFJO0FBQ3hFLFVBQUksQ0FBQzNNLElBQUksQ0FBQ3FxSCxXQUFXLENBQUMrSyxTQUFTLEVBQUU7QUFDL0J6b0g7QUFDRCxRQUFDO0FBQ0YsVUFBSSxDQUFDM00sSUFBSSxDQUFDcXFILFdBQVcsQ0FBQ2tLLFlBQVksRUFBRTtBQUNsQ0MsZ0JBQVEsRUFBRTN2SCxJQUFJLENBQUNzRixHQUFHLENBQ2hCK25ILHdCQUF3QixFQUN4QkQsMEJBQTBCLEdBQ3ZCdGxILEtBQUssR0FBR3dvSCxlQUFlLElBQ3JCakQsd0JBQXdCLEdBQUdELDBCQUEwQixDQUFDLENBQzVEO1FBQ0RyeEgsRUFBRSxFQUFFLElBQUksQ0FBQ2t2RjtBQUNWLFFBQUM7QUFDSixLQUFDLENBQUM7QUFFRjNzRixVQUFNLENBQUNhLElBQUksQ0FDVCwyQ0FBMkMsSUFBSSxDQUFDOG1CLElBQUksQ0FBQ3FELFNBQVMsV0FBVzhsRyxLQUFLLEVBQUUsQ0FDakY7QUFFRCxTQUFLeG9HLENBQUMsQ0FBQ3VqRSxJQUFJLENBQUMsTUFBSztBQUNmN3JGLFlBQU0sQ0FBQ3k2RSxHQUFHLENBQUMsMkJBQTJCLEVBQUUvMEUsV0FBVyxDQUFDRCxHQUFHLEVBQUUsR0FBR29uRixFQUFFLENBQUM7TUFDL0Q3c0YsTUFBTSxDQUFDeTZFLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRXI5QixVQUFVLENBQUN0MUIsYUFBYSxDQUFDO01BQzNEOW5CLE1BQU0sQ0FBQ3k2RSxHQUFHLENBQUMsMEJBQTBCLEVBQUVyOUIsVUFBVSxDQUFDcjFCLGtCQUFrQixDQUFDO01BQ3JFL25CLE1BQU0sQ0FBQ3k2RSxHQUFHLENBQUMseUJBQXlCLEVBQUVyOUIsVUFBVSxDQUFDcDFCLFdBQVcsQ0FBQztNQUM3RGhvQixNQUFNLENBQUN5NkUsR0FBRyxDQUFDLG1CQUFtQixFQUFFcjlCLFVBQVUsQ0FBQ24xQixXQUFXLENBQUM7TUFDdkRqb0IsTUFBTSxDQUFDeTZFLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRXI5QixVQUFVLENBQUNsMUIsU0FBUyxDQUFDO01BQ2xEbG9CLE1BQU0sQ0FBQ3k2RSxHQUFHLENBQUMsd0JBQXdCLEVBQUVyeUQsaUJBQWlCLENBQUMwZ0cscUJBQXFCLENBQUM7TUFDN0U5b0gsTUFBTSxDQUFDeTZFLEdBQUcsQ0FDUiwrQkFBK0IsRUFDL0JyeUQsaUJBQWlCLENBQUMyZ0cscUJBQXFCLENBQ3hDO01BQ0Qvb0gsTUFBTSxDQUFDeTZFLEdBQUcsQ0FBQyxlQUFlLEVBQUVyeUQsaUJBQWlCLENBQUM0Z0csUUFBUSxDQUFDO01BQ3ZEaHBILE1BQU0sQ0FBQ2EsSUFBSSxDQUNULHFDQUFxQyxJQUFJLENBQUM4ckYsUUFBUSxPQUNoRCxDQUFDam5GLFdBQVcsQ0FBQ0QsR0FBRyxFQUFFLEdBQUdrckgsVUFBVSxJQUFJNytDLE9BQU8sQ0FBQ0MsTUFDN0MsV0FBVyxDQUNaO01BQ0QsSUFBSSxDQUFDczlDLFVBQVUsR0FBRyxJQUFJO0FBQ3hCLEtBQUMsQ0FBQztBQUVGLFdBQU8vbUcsQ0FBQztBQUNWO0FBRVFvcEcsZ0JBQWNBLEdBQUE7SUFDcEIsSUFBSVEsY0FBYyxDQUFDQyxrQkFBa0IsQ0FBQ0MsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLE1BQU0sRUFBRTtBQUM5RDtBQUNGO0lBRUEsSUFBSUMsWUFBWSxHQUFHLENBQUM7SUFDcEIsSUFBSSxDQUFDaDJILEVBQUUsQ0FBQzZxSCxXQUFXLENBQUNrSyxZQUFZLEVBQUdwdEgsSUFBSSxJQUFJO01BQ3pDLE1BQU1za0IsQ0FBQyxHQUFHNW1CLElBQUksQ0FBQ3FELEtBQUssQ0FBQ2YsSUFBSSxDQUFDcXRILFFBQVEsR0FBRyxHQUFHLENBQUM7TUFDekMsSUFBSS9vRyxDQUFDLEdBQUcrcEcsWUFBWSxFQUFFO0FBQ3BCcnlILGNBQU0sQ0FBQ3k2RSxHQUFHLENBQUMsQ0FBbUJueUQsbUJBQUMsR0FBRyxDQUFDO0FBQ25DK3BHLG9CQUFZLEdBQUcvcEcsQ0FBQztBQUNsQjtBQUNGLEtBQUMsQ0FBQztJQUNGLElBQUksQ0FBQ2pzQixFQUFFLENBQUM2cUgsV0FBVyxDQUFDMEssU0FBUyxFQUFHNXRILElBQUksSUFBSTtBQUN0QyxVQUFJQSxJQUFJLENBQUN3RixLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRTtRQUMxQnhKLE1BQU0sQ0FBQ3k2RSxHQUFHLENBQUMscUJBQXFCejJFLElBQUksQ0FBQ3dGLEtBQUssRUFBRSxDQUFDO0FBQy9DO0FBQ0YsS0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDbk4sRUFBRSxDQUFDNnFILFdBQVcsQ0FBQytLLFNBQVMsRUFBR2p1SCxJQUFJLElBQUk7QUFDdEMsVUFBSUEsSUFBSSxDQUFDd0YsS0FBSyxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUU7UUFDMUJ4SixNQUFNLENBQUN5NkUsR0FBRyxDQUFDLHFCQUFxQnoyRSxJQUFJLENBQUN3RixLQUFLLEVBQUUsQ0FBQztBQUMvQztBQUNGLEtBQUMsQ0FBQztBQUNKO0VBRVEsTUFBTXFvSCxtQkFBbUJBLENBQy9CUixRQUFrRDtBQUVsRCxVQUFNaUIsWUFBWSxHQUFHLElBQUk5eUYsR0FBRyxFQUFVO0FBQ3RDLFFBQUksQ0FBQzdYLElBQUksQ0FBQ2lHLElBQUksQ0FBRTNRLElBQUksSUFBSTtBQUN0QixZQUFNczFHLFlBQVksR0FBRyxDQUFHdDFHLE1BQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUM4a0csWUFBWSxJQUFJLEVBQUUsQ0FBRSxFQUN4RGpoSCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ1YwK0IsSUFBSSxDQUFFdGhDLElBQUksSUFBS0EsSUFBSSxDQUFDNDBILFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUM5QyxJQUFJRCxZQUFZLElBQUl0MUcsSUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQzB1RyxNQUFNLEVBQUU7QUFDekNpSCxvQkFBWSxDQUFDei9GLEdBQUcsQ0FBQyxHQUFHNVYsSUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQzB1RyxNQUFNLEVBQUUsQ0FBQztBQUM5QztBQUNBLGFBQU8sSUFBSTtBQUNiLEtBQUMsQ0FBQztBQUVGLFFBQUlpSCxZQUFZLENBQUM3dEgsSUFBSSxHQUFHLENBQUMsRUFBRTtNQUN6QnpFLE1BQU0sQ0FBQ2EsSUFBSSxDQUFDLGNBQWN5eEgsWUFBWSxDQUFDN3RILElBQUksdUJBQXVCLENBQUM7TUFDbkUsTUFBTTZySCxTQUFTLEdBQUcsSUFBSUYsR0FBRyxDQUFDLElBQUksQ0FBQ3pqQyxRQUFRLENBQUMsQ0FBQ3JvRCxNQUFNO01BQy9DLElBQUkwckYsS0FBSyxHQUFHenZILFNBQVM7TUFDckIsSUFBSTtBQUNGeXZILGFBQUssR0FBR0MsWUFBWSxDQUFDQyxPQUFPLENBQUMsV0FBVyxDQUFDO09BQzFDLENBQUMsTUFBTTtNQUVSLE1BQU11QyxNQUFNLEdBQUcsSUFBSXJDLEdBQUcsQ0FBQyxJQUFJLENBQUN6akMsUUFBUSxDQUFDO01BQ3JDLE1BQU1rNkIsUUFBUSxHQUFHNEwsTUFBTSxDQUFDcEMsUUFBUSxDQUFDN3ZILEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDM0MsWUFBTSt2SCxRQUFRLEdBQUcxSixRQUFRLENBQUMsQ0FBQyxDQUFDO0FBRTVCLFlBQU02TCxPQUFPLEdBQUcsQ0FBQyxHQUFHSixZQUFZLENBQUMsQ0FBQzExSCxNQUFNLENBQ3JDeXVILE1BQU0sSUFBSyxDQUFDeEMsd0JBQXdCLENBQUMwQyxTQUFTLENBQUNGLE1BQU0sQ0FBQyxDQUN4RDtBQUNELFVBQUlxSCxPQUFPLENBQUNsdUgsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QjZzSCxRQUFRLEtBQVIsUUFBQUEsUUFBUSxLQUFSLGtCQUFBQSxRQUFRLENBQUdpQixZQUFZLENBQUM3dEgsSUFBSSxFQUFFNnRILFlBQVksQ0FBQzd0SCxJQUFJLENBQUM7QUFDaEQ7QUFDRjtNQUVBLElBQUlxdEgsTUFBTSxHQUFHUSxZQUFZLENBQUM3dEgsSUFBSSxHQUFHaXVILE9BQU8sQ0FBQ2x1SCxNQUFNO0FBQy9DLFlBQU1tdUgsU0FBUyxHQUFHLE1BQU90SCxNQUFjLElBQUk7QUFDekMsWUFBSXhDLHdCQUF3QixDQUFDMEMsU0FBUyxDQUFDRixNQUFNLENBQUMsRUFBRTtBQUM5Q3lHLGdCQUFNLEVBQUU7QUFDUlQsa0JBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFHUyxNQUFNLEVBQUVRLFlBQVksQ0FBQzd0SCxJQUFJLENBQUM7QUFDckM7QUFDRjtRQUVBLE1BQU1tdUgsT0FBTyxHQUFHLENBQUd0QyxXQUFTLGVBQWVDLFFBQVEsU0FBU2xGLE1BQU0sQ0FBRTtRQUNwRSxJQUFJO0FBQ0YsZ0JBQU1wd0YsR0FBRyxHQUFHLE1BQU00M0YsS0FBSyxDQUFDRCxPQUFPLEVBQUU7WUFDL0JFLE9BQU8sRUFBRTlDLEtBQUssR0FBRztjQUFFK0MsYUFBYSxFQUFFLFVBQVUvQyxLQUFLO0FBQUUsYUFBRSxHQUFHenZIO0FBQ3pELFlBQUM7VUFDRixJQUFJMDZCLEdBQUcsQ0FBQyszRixFQUFFLEVBQUU7QUFDVixrQkFBTXg0RyxNQUFNLEdBQUcsTUFBTXlnQixHQUFHLENBQUNxd0YsV0FBVyxFQUFFO0FBQ3RDekMsb0NBQXdCLENBQUMwQyxTQUFTLENBQUNGLE1BQU0sQ0FBQyxHQUFHN3dHLE1BQU07QUFDckQsV0FBQyxNQUFNO1lBQ0x4YSxNQUFNLENBQUN1QyxLQUFLLENBQUMsQ0FBMEI4b0gsK0JBQU0sS0FBS3B3RixHQUFHLENBQUNnNEYsVUFBVSxFQUFFLENBQUM7QUFDckU7U0FDRCxDQUFDLE9BQU8zaEcsQ0FBQyxFQUFFO1VBQ1Z0eEIsTUFBTSxDQUFDdUMsS0FBSyxDQUFDLHVCQUF1QjhvSCxNQUFNLENBQUUsR0FBRS81RixDQUFDLENBQUM7QUFDbEQsU0FBQyxTQUFTO0FBQ1J3Z0csZ0JBQU0sRUFBRTtBQUNSVCxrQkFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUdTLE1BQU0sRUFBRVEsWUFBWSxDQUFDN3RILElBQUksQ0FBQztBQUN2QztPQUNEO0FBRUQsV0FBSyxJQUFJb1csQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNjNHLE9BQU8sQ0FBQ2x1SCxNQUFNLEVBQUVxVyxDQUFDLElBQUltMEcsd0JBQXdCLEVBQUU7QUFDakUsY0FBTTlzSCxPQUFPLENBQUNrb0IsR0FBRyxDQUFDc29HLE9BQU8sQ0FBQ3o0RyxLQUFLLENBQUNZLENBQUMsRUFBRUEsQ0FBQyxHQUFHbTBHLHdCQUF3QixDQUFDLENBQUNsMUcsR0FBRyxDQUFDNjRHLFNBQVMsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0Y7QUFDRjtBQUVRMUIsMkJBQXlCQSxHQUFBO0FBQy9CLFFBQUlpQyxlQUF3QjtJQUM1QixJQUFJO01BQ0ZBLGVBQWUsR0FDYkMsVUFDRCxDQUFDQyx5Q0FBeUM7QUFDM0NGLHFCQUFlLEtBQWYsUUFBQUEsZUFBZSxLQUFmLFNBQUFBLGVBQWUsR0FBZkEsZUFBZSxHQUFLakQsWUFBWSxDQUFDQyxPQUFPLENBQUNoQixzQ0FBc0MsQ0FBQztBQUNsRixLQUFDLENBQUMsTUFBTTtBQUNOO0FBQUE7SUFHRixJQUNFZ0UsZUFBZSxLQUFLM3lILFNBQVMsSUFDN0IyeUgsZUFBZSxLQUFLLElBQUksSUFDeEJBLGVBQWUsS0FBSyxFQUFFLEVBQ3RCO0FBQ0EsYUFBT2pFLGtDQUFrQztBQUMzQztBQUVBLFVBQU1vRSxlQUFlLEdBQUcsQ0FBR0gsaUJBQWUsQ0FBRSxFQUFDSSxJQUFJLEVBQUUsQ0FBQ24rRyxXQUFXLEVBQUU7QUFDakUsUUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDdlUsUUFBUSxDQUFDeXlILGVBQWUsQ0FBQyxFQUFFO0FBQy9ELGFBQU8sQ0FBQztBQUNWO0lBRUEsTUFBTUUsV0FBVyxHQUFHeG5GLE1BQU0sQ0FBQ2tTLFFBQVEsQ0FBQ28xRSxlQUFlLEVBQUUsRUFBRSxDQUFDO0FBQ3hELFdBQU90bkYsTUFBTSxDQUFDMnpDLFFBQVEsQ0FBQzZ6QyxXQUFXLENBQUMsSUFBSUEsV0FBVyxHQUFHLENBQUMsR0FDbERBLFdBQVcsR0FDWHRFLGtDQUFrQztBQUN4QztBQUVBcG5HLFFBQU1BLEdBQUE7SUFDSixJQUFJLENBQUMrbkcsV0FBVyxHQUFHLElBQUk7SUFDdkIsSUFBSSxDQUFDUCxVQUFVLEdBQUcsS0FBSztBQUN6QjtBQUVBbnlILFNBQU9BLEdBQUE7SUFDTCxLQUFLLENBQUNBLE9BQU8sRUFBRTtBQUNmLFNBQUssSUFBSSxDQUFDbUYsTUFBTSxDQUFDa3ZILFlBQVksRUFBRTtBQUNqQztBQUNEOztJQy9ZV2lDO0FBQVosV0FBWUEsY0FBYztFQUN4QkEsY0FBQSxDQUFBQSxjQUFBLHdCQUFLO0VBQ0xBLGNBQUEsQ0FBQUEsY0FBQSw0QkFBTztBQUNULENBQUMsRUFIV0EsY0FBYyxLQUFkQSxjQUFjLEdBR3pCO0FBaUJLLE1BQU9DLGFBQWMsU0FBUWppRCxTQUFTO0VBQzFDLElBQVd2ekUsT0FBT0EsR0FBQTtJQUNoQixPQUFPLElBQUksQ0FBQzg3QyxRQUFRO0FBQ3RCO0VBRUEsSUFBVzk3QyxPQUFPQSxDQUFDc0IsS0FBYztJQUMvQixJQUFJLENBQUN3NkMsUUFBUSxHQUFHeDZDLEtBQUs7QUFDdkI7RUE2QkFwRCxZQUFtQnN3RCxNQUFlO0lBQ2hDLEtBQUssQ0FBQ0EsTUFBTSxDQUFDO0lBakJQLElBQWMsQ0FBQWluRSxjQUFBLEdBQStCLEVBQUU7SUFDL0MsSUFBbUIsQ0FBQUMsbUJBQUEsR0FBK0IsRUFBRTtJQUNwRCxJQUFtQixDQUFBQyxtQkFBQSxHQUErQixFQUFFO0lBQ3BELElBQWdCLENBQUFDLGdCQUFBLEdBQStCLEVBQUU7QUFVakQsUUFBUyxDQUFBQyxTQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsU0FBQUMsU0FBUyxHQUFtQlAsY0FBYyxDQUFDOXZHLE9BQU87SUErR2xELElBQThCLENBQUFzd0csOEJBQUEsR0FBRyxFQUFjO0FBM0dyRCxRQUFJLENBQUNyc0csSUFBSSxHQUFHOGtDLE1BQU0sQ0FBQzAvQixZQUFZLEVBQUU7QUFFakMsUUFBSSxDQUFDOG5DLGlCQUFpQixHQUFHLElBQUk1aEgsdUJBQXVCLENBQUM7QUFDbkRqVSxXQUFLLEVBQUUsSUFBSXlHLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDM0JvTyxjQUFRLEVBQUUsR0FBRztBQUNiRixlQUFTLEVBQUUsQ0FBQztBQUNaQyxlQUFTLEVBQUUsQ0FBQztBQUNaekUsYUFBTyxFQUFFLENBQUM7QUFDVk0sVUFBSSxFQUFFZ1I7QUFDUCxNQUFDO0FBQ0YsUUFBSSxDQUFDbzBHLGlCQUFpQixDQUFDaGxILFlBQVksR0FBRyxLQUFLO0FBQzNDLFFBQUksQ0FBQ2dsSCxpQkFBaUIsQ0FBQ3AwSCxVQUFVLEdBQUcsSUFBSTtBQUN4QyxRQUFJLENBQUNvMEgsaUJBQWlCLENBQUNqbEgsV0FBVyxHQUFHLElBQUk7QUFDekMsUUFBSSxDQUFDaWxILGlCQUFpQixDQUFDN2xILFdBQVcsR0FBRyxJQUFJO0FBQ3pDLFFBQUksQ0FBQzZsSCxpQkFBaUIsQ0FBQzcxSCxLQUFLLENBQUMwRyxtQkFBbUIsRUFBRTtBQUNsRCxRQUFJLENBQUNtdkgsaUJBQWlCLENBQUM5bEgsY0FBYyxHQUFHLEVBQUU7QUFFMUMsUUFBSSxDQUFDK2xILHNCQUFzQixHQUFHLElBQUk3aEgsdUJBQXVCLENBQUM7QUFDeERqVSxXQUFLLEVBQUUsSUFBSXlHLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDM0JvTyxjQUFRLEVBQUUsR0FBRztBQUNiRixlQUFTLEVBQUUsQ0FBQztBQUNaQyxlQUFTLEVBQUUsQ0FBQztBQUNaekUsYUFBTyxFQUFFLENBQUM7QUFDVk0sVUFBSSxFQUFFZ1I7QUFDUCxNQUFDO0FBQ0YsUUFBSSxDQUFDcTBHLHNCQUFzQixDQUFDamxILFlBQVksR0FBRyxLQUFLO0FBQ2hELFFBQUksQ0FBQ2lsSCxzQkFBc0IsQ0FBQ2xsSCxXQUFXLEdBQUcsSUFBSTtBQUM5QyxRQUFJLENBQUNrbEgsc0JBQXNCLENBQUNyMEgsVUFBVSxHQUFHLElBQUk7QUFDN0MsUUFBSSxDQUFDcTBILHNCQUFzQixDQUFDOWxILFdBQVcsR0FBRyxJQUFJO0FBQzlDLFFBQUksQ0FBQzhsSCxzQkFBc0IsQ0FBQzkxSCxLQUFLLENBQUMwRyxtQkFBbUIsRUFBRTtBQUN2RCxRQUFJLENBQUNvdkgsc0JBQXNCLENBQUMvbEgsY0FBYyxHQUFHLEVBQUU7QUFFL0MsUUFBSSxDQUFDZ21ILHNCQUFzQixHQUFHLElBQUk5aEgsdUJBQXVCLENBQUM7QUFDeERqVSxXQUFLLEVBQUUsSUFBSXlHLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDM0JvTyxjQUFRLEVBQUUsR0FBRztBQUNiRixlQUFTLEVBQUUsQ0FBQztBQUNaQyxlQUFTLEVBQUUsQ0FBQztBQUNaekUsYUFBTyxFQUFFLENBQUM7QUFDVk0sVUFBSSxFQUFFZ1I7QUFDUCxNQUFDO0FBQ0YsUUFBSSxDQUFDczBHLHNCQUFzQixDQUFDbGxILFlBQVksR0FBRyxLQUFLO0FBQ2hELFFBQUksQ0FBQ2tsSCxzQkFBc0IsQ0FBQ25sSCxXQUFXLEdBQUcsSUFBSTtBQUM5QyxRQUFJLENBQUNtbEgsc0JBQXNCLENBQUN0MEgsVUFBVSxHQUFHLElBQUk7QUFDN0MsUUFBSSxDQUFDczBILHNCQUFzQixDQUFDL2xILFdBQVcsR0FBRyxJQUFJO0FBQzlDLFFBQUksQ0FBQytsSCxzQkFBc0IsQ0FBQy8xSCxLQUFLLENBQUMwRyxtQkFBbUIsRUFBRTtBQUN2RCxRQUFJLENBQUNxdkgsc0JBQXNCLENBQUNobUgsY0FBYyxHQUFHLEVBQUU7QUFFL0MsUUFBSSxDQUFDaW1ILG1CQUFtQixHQUFHLElBQUkvaEgsdUJBQXVCLENBQUM7QUFDckRqVSxXQUFLLEVBQUUsSUFBSXlHLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDM0JvTyxjQUFRLEVBQUUsR0FBRztBQUNiRixlQUFTLEVBQUUsQ0FBQztBQUNaQyxlQUFTLEVBQUUsQ0FBQztBQUNaekUsYUFBTyxFQUFFLENBQUM7QUFDVk0sVUFBSSxFQUFFZ1I7QUFDUCxNQUFDO0FBQ0YsUUFBSSxDQUFDdTBHLG1CQUFtQixDQUFDbmxILFlBQVksR0FBRyxLQUFLO0FBQzdDLFFBQUksQ0FBQ21sSCxtQkFBbUIsQ0FBQ3BsSCxXQUFXLEdBQUcsSUFBSTtBQUMzQyxRQUFJLENBQUNvbEgsbUJBQW1CLENBQUN2MEgsVUFBVSxHQUFHLElBQUk7QUFDMUMsUUFBSSxDQUFDdTBILG1CQUFtQixDQUFDaG1ILFdBQVcsR0FBRyxJQUFJO0FBQzNDLFFBQUksQ0FBQ2dtSCxtQkFBbUIsQ0FBQ2gySCxLQUFLLENBQUMwRyxtQkFBbUIsRUFBRTtBQUNwRCxRQUFJLENBQUNzdkgsbUJBQW1CLENBQUNqbUgsY0FBYyxHQUFHLEVBQUU7QUFFNUMsUUFBSSxDQUFDa21ILGtCQUFrQixHQUFHLElBQUkxZ0gsb0JBQW9CLENBQUM7QUFDakR2VixXQUFLLEVBQUUsUUFBUTtBQUNmNlEsa0JBQVksRUFBRSxLQUFLO0FBQ25CeEssVUFBSSxFQUFFLENBQUM7QUFDUG9QLHFCQUFlLEVBQUU7QUFDbEIsTUFBQztBQUNGLFFBQUksQ0FBQ3dnSCxrQkFBa0IsQ0FBQ3JsSCxXQUFXLEdBQUcsSUFBSTtBQUMxQyxRQUFJLENBQUNxbEgsa0JBQWtCLENBQUNqMkgsS0FBSyxDQUFDMEcsbUJBQW1CLEVBQUU7QUFDbkQsUUFBSSxDQUFDdXZILGtCQUFrQixDQUFDdGxILFVBQVUsR0FBRyxLQUFLO0FBQzFDLFFBQUksQ0FBQ3NsSCxrQkFBa0IsQ0FBQ2xtSCxjQUFjLEdBQUcsRUFBRTtBQUUzQyxRQUFJLENBQUNtbUgsdUJBQXVCLEdBQUcsSUFBSTNnSCxvQkFBb0IsQ0FBQztBQUN0RHZWLFdBQUssRUFBRSxRQUFRO0FBQ2Y2USxrQkFBWSxFQUFFLEtBQUs7QUFDbkJ4SyxVQUFJLEVBQUUsQ0FBQztBQUNQb1AscUJBQWUsRUFBRTtBQUNsQixNQUFDO0FBQ0YsUUFBSSxDQUFDeWdILHVCQUF1QixDQUFDdGxILFdBQVcsR0FBRyxJQUFJO0FBQy9DLFFBQUksQ0FBQ3NsSCx1QkFBdUIsQ0FBQ2wySCxLQUFLLENBQUMwRyxtQkFBbUIsRUFBRTtBQUN4RCxRQUFJLENBQUN3dkgsdUJBQXVCLENBQUN2bEgsVUFBVSxHQUFHLEtBQUs7QUFDL0MsUUFBSSxDQUFDdWxILHVCQUF1QixDQUFDbm1ILGNBQWMsR0FBRyxFQUFFO0FBRWhELFFBQUksQ0FBQ29tSCx1QkFBdUIsR0FBRyxJQUFJNWdILG9CQUFvQixDQUFDO0FBQ3REdlYsV0FBSyxFQUFFLFFBQVE7QUFDZjZRLGtCQUFZLEVBQUUsS0FBSztBQUNuQnhLLFVBQUksRUFBRSxDQUFDO0FBQ1BvUCxxQkFBZSxFQUFFO0FBQ2xCLE1BQUM7QUFDRixRQUFJLENBQUMwZ0gsdUJBQXVCLENBQUN2bEgsV0FBVyxHQUFHLElBQUk7QUFDL0MsUUFBSSxDQUFDdWxILHVCQUF1QixDQUFDbjJILEtBQUssQ0FBQzBHLG1CQUFtQixFQUFFO0FBQ3hELFFBQUksQ0FBQ3l2SCx1QkFBdUIsQ0FBQ3hsSCxVQUFVLEdBQUcsS0FBSztBQUMvQyxRQUFJLENBQUN3bEgsdUJBQXVCLENBQUNwbUgsY0FBYyxHQUFHLEVBQUU7QUFFaEQsUUFBSSxDQUFDcW1ILG9CQUFvQixHQUFHLElBQUk3Z0gsb0JBQW9CLENBQUM7QUFDbkR2VixXQUFLLEVBQUUsUUFBUTtBQUNmNlEsa0JBQVksRUFBRSxLQUFLO0FBQ25CeEssVUFBSSxFQUFFLENBQUM7QUFDUG9QLHFCQUFlLEVBQUU7QUFDbEIsTUFBQztBQUNGLFFBQUksQ0FBQzJnSCxvQkFBb0IsQ0FBQ3hsSCxXQUFXLEdBQUcsSUFBSTtBQUM1QyxRQUFJLENBQUN3bEgsb0JBQW9CLENBQUNwMkgsS0FBSyxDQUFDMEcsbUJBQW1CLEVBQUU7QUFDckQsUUFBSSxDQUFDMHZILG9CQUFvQixDQUFDemxILFVBQVUsR0FBRyxLQUFLO0FBQzVDLFFBQUksQ0FBQ3lsSCxvQkFBb0IsQ0FBQ3JtSCxjQUFjLEdBQUcsRUFBRTtBQUMvQztFQUdPLE1BQU1zbUgsSUFBSUEsQ0FDZkMsSUFBWSxFQUNaQyxJQUFZLEVBQ1pudUIsSUFBb0IsRUFDcEIrb0IsU0FBa0I7SUFFbEIsTUFBTXFGLFlBQVksR0FBRyxFQUFFO0lBQ3ZCLElBQUksQ0FBQ1osOEJBQThCLEdBQUcsRUFBRTtJQUV4QyxJQUFJLENBQUMsSUFBSSxDQUFDcnNHLElBQUksQ0FBQ2dELE1BQU0sQ0FBQytwRyxJQUFJLENBQUMsRUFBRTtNQUMzQkUsWUFBWSxDQUFDcDRILElBQUksQ0FDZixJQUFJLENBQUNpd0QsTUFBTSxDQUFDZ2dDLFVBQVUsQ0FDcEIsSUFBSTBpQyxhQUFhLENBQUMsSUFBSSxDQUFDMWlFLE1BQU0sQ0FBQzAvQixZQUFZLEVBQUUsRUFBRXVvQyxJQUFJLEVBQUVuRixTQUFTLENBQUMsRUFDOUQsS0FBSyxDQUNOLENBQ0Y7QUFDRCxVQUFJLENBQUN5RSw4QkFBOEIsQ0FBQ3gzSCxJQUFJLENBQUNrNEgsSUFBSSxDQUFDO0FBQ2hEO0lBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQy9zRyxJQUFJLENBQUNnRCxNQUFNLENBQUNncUcsSUFBSSxDQUFDLEVBQUU7TUFDM0JDLFlBQVksQ0FBQ3A0SCxJQUFJLENBQ2YsSUFBSSxDQUFDaXdELE1BQU0sQ0FBQ2dnQyxVQUFVLENBQ3BCLElBQUkwaUMsYUFBYSxDQUFDLElBQUksQ0FBQzFpRSxNQUFNLENBQUMwL0IsWUFBWSxFQUFFLEVBQUV3b0MsSUFBSSxFQUFFcEYsU0FBUyxDQUFDLEVBQzlELEtBQUssQ0FDTixDQUNGO0FBQ0QsVUFBSSxDQUFDeUUsOEJBQThCLENBQUN4M0gsSUFBSSxDQUFDbTRILElBQUksQ0FBQztBQUNoRDtBQUNBLFVBQU16eUgsT0FBTyxDQUFDa29CLEdBQUcsQ0FBQ3dxRyxZQUFZLENBQUM7SUFFL0IsTUFBTUMsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDQyxPQUFPLENBQUNKLElBQUksRUFBRUMsSUFBSSxDQUFDO0FBRWpELFVBQU1JLFdBQVcsR0FBRyxJQUFJLENBQUN0b0UsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDdmYsUUFBUSxDQUFDN1EsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUN2RXkvRCxlQUFXLENBQUM5M0gsT0FBTyxDQUFFc0MsS0FBWSxJQUFJO01BQ2pDQSxLQUFtQixDQUFDZzRELFNBQVMsR0FBRzEzQyxTQUFTO0FBQzdDLEtBQUMsQ0FBQztBQUVGLFFBQUksQ0FBQ20xRyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUV4dUIsSUFBSSxDQUFDO0FBRTlCLFdBQU90a0csT0FBTyxDQUFDQyxPQUFPLENBQUMweUgsVUFBVSxDQUFDO0FBQ3BDO0FBRUE7RUFDTyxNQUFNSSxNQUFNQSxHQUFBO0FBQ2pCLFVBQU1GLFdBQVcsR0FBRyxJQUFJLENBQUN0b0UsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDdmYsUUFBUSxDQUFDN1EsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUN2RXkvRCxlQUFXLENBQUM5M0gsT0FBTyxDQUFFc0MsS0FBWSxJQUFJO01BQ2pDQSxLQUFtQixDQUFDZzRELFNBQVMsR0FBR3gzQyxVQUFVO0FBQzlDLEtBQUMsQ0FBQztJQUNGLElBQUksQ0FBQ20xRyxtQkFBbUIsRUFBRTtJQUMxQixJQUFJLENBQUN6b0UsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDMWEsY0FBYyxFQUFFO0lBRTFDLE1BQU1tcUQsY0FBYyxHQUFHLEVBQUU7QUFDekIsUUFBSSxJQUFJLENBQUNuQiw4QkFBOEIsQ0FBQ3h2SCxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BELFdBQUssTUFBTS9HLEVBQUUsSUFBSSxJQUFJLENBQUN1MkgsOEJBQThCLEVBQ2xEbUIsY0FBYyxDQUFDMzRILElBQUksQ0FBQyxJQUFJLENBQUNpd0QsTUFBTSxDQUFDeWdDLFlBQVksQ0FBQ3p2RixFQUFFLENBQUMsQ0FBQztBQUNyRDtJQUNBLElBQUksQ0FBQ3UySCw4QkFBOEIsR0FBRyxFQUFFO0FBQ3hDLFVBQU05eEgsT0FBTyxDQUFDa29CLEdBQUcsQ0FBQytxRyxjQUFjLENBQUM7QUFDbkM7QUFFUUMsYUFBV0EsQ0FDakJ4M0UsR0FBb0IsRUFDcEJrK0QsS0FBa0UsRUFDbEV1WixRQUFvQzs7QUFFcEMsU0FBSyxJQUFJMXdILENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2k1QyxHQUFHLENBQUNwNUMsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtBQUNuQyxZQUFNMndILFFBQVEsR0FBRzEzRSxHQUFHLENBQUNqNUMsQ0FBQyxDQUFDO01BQ3ZCLE1BQU1rL0csYUFBYSxHQUFHeVIsUUFBUSxDQUFDNTRHLEtBQUssQ0FBQ0MsR0FBRyxDQUFDa25HLGFBQWEsR0FDbER5UixRQUFRLENBQUM1NEcsS0FBSyxDQUFDQyxHQUFHLENBQUNrbkcsYUFBYSxHQUNoQyxDQUFBdHJHLEVBQUEsT0FBSSxDQUFDb1AsSUFBSSxDQUNOK0IsWUFBWSxDQUFDNHJHLFFBQVEsQ0FBQyxDQUN0QnpxRyxJQUFJLENBQUV0ckIsS0FBSyxJQUFLQSxLQUFLLENBQUNtZCxLQUFLLENBQUNDLEdBQUcsQ0FBQ2tuRyxhQUFhLENBQUMsTUFBRSxRQUFBdHJHLEVBQUEsdUJBQUFBLEVBQUEsQ0FBQW1FLEtBQUssQ0FBQ0MsR0FBRyxDQUFDa25HLGFBQWE7TUFFOUUvSCxLQUFLLENBQUN3WixRQUFRLENBQUM1NEcsS0FBSyxDQUFDQyxHQUFHLENBQUNsZixFQUFFLENBQUMsR0FBRztBQUM3QndmLFlBQUksRUFBRXE0RyxRQUFRO0FBQ2R6UjtPQUNEO0FBQ0QsVUFBSUEsYUFBYSxFQUFFO0FBQ2pCd1IsZ0JBQVEsQ0FBQ3hSLGFBQWEsQ0FBQyxHQUFHeVIsUUFBUTtBQUNwQztBQUNGO0FBQ0Y7QUFFUSxRQUFNUixPQUFPQSxDQUFDSixJQUFZLEVBQUVDLElBQVk7SUFDOUMsTUFBTUUsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDVSxhQUFhLENBQUNiLElBQUksRUFBRUMsSUFBSSxDQUFDO0lBQ3ZELElBQUksQ0FBQ2EsV0FBVyxHQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNaLFVBQVUsQ0FBQztBQUN2RCxXQUFPM3lILE9BQU8sQ0FBQ0MsT0FBTyxDQUFDMHlILFVBQVUsQ0FBQztBQUNwQztBQUVRVSxlQUFhQSxDQUFDYixJQUFZLEVBQUVDLElBQVk7O0FBQzlDLFVBQU1FLFVBQVUsR0FBZTtBQUM3QmEsZUFBUyxFQUFFLEVBQUU7QUFDYkMsV0FBSyxFQUFFLEVBQUU7QUFDVEMsYUFBTyxFQUFFLEVBQUU7QUFDWEMsY0FBUSxFQUFFO0tBQ1g7SUFFRCxNQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDbnVHLElBQUksQ0FBQ2dGLGFBQWEsQ0FBQytuRyxJQUFJLENBQUM7SUFDakQsTUFBTXFCLFdBQVcsR0FBRyxJQUFJLENBQUNwdUcsSUFBSSxDQUFDZ0YsYUFBYSxDQUFDZ29HLElBQUksQ0FBQztJQUNqRCxJQUFJLENBQUNtQixXQUFXLEVBQUU7TUFDaEIsT0FBTzV6SCxPQUFPLENBQUNFLE1BQU0sQ0FDbkIsSUFBSUksS0FBSyxDQUFDLENBQWlDa3lILG9DQUFJLENBQXVCLHVCQUFDLENBQ3hFO0FBQ0g7SUFDQSxJQUFJLENBQUNxQixXQUFXLEVBQUU7TUFDaEIsT0FBTzd6SCxPQUFPLENBQUNFLE1BQU0sQ0FDbkIsSUFBSUksS0FBSyxDQUFDLENBQWlDbXlILG9DQUFJLENBQXVCLHVCQUFDLENBQ3hFO0FBQ0g7SUFDQSxJQUFJcUIsSUFBSSxHQUFlRixXQUFXLENBQUM1ckcsa0JBQWtCLENBQUMsR0FBRzVGLHlCQUF5QixDQUFDO0lBQ25GLElBQUkyeEcsSUFBSSxHQUFlRixXQUFXLENBQUM3ckcsa0JBQWtCLENBQUMsR0FBRzVGLHlCQUF5QixDQUFDO0FBRW5GMHhHLFFBQUksR0FBR0EsSUFBSSxDQUFDbDhHLEdBQUcsQ0FBRXZhLEtBQUssSUFBSTtBQUN4QixhQUFPdTJILFdBQVcsQ0FBQ2xyRyxlQUFlLENBQUNyckIsS0FBSyxDQUFDO0FBQzNDLEtBQUMsQ0FBQztBQUVGMDJILFFBQUksR0FBR0EsSUFBSSxDQUFDbjhHLEdBQUcsQ0FBRXZhLEtBQUssSUFBSTtBQUN4QixhQUFPdzJILFdBQVcsQ0FBQ25yRyxlQUFlLENBQUNyckIsS0FBSyxDQUFDO0FBQzNDLEtBQUMsQ0FBQztBQUVGeTJILFFBQUksR0FBRyxDQUFDLEdBQUc1dkgsS0FBSyxDQUFDb0gsSUFBSSxDQUFDLElBQUlneUIsR0FBRyxDQUFDdzJGLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckNDLFFBQUksR0FBRyxDQUFDLEdBQUc3dkgsS0FBSyxDQUFDb0gsSUFBSSxDQUFDLElBQUlneUIsR0FBRyxDQUFDeTJGLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFckMsTUFBTUMsTUFBTSxHQUFnRSxFQUFFO0lBQzlFLE1BQU1DLFNBQVMsR0FBK0IsRUFBRTtJQUNoRCxJQUFJLENBQUNmLFdBQVcsQ0FBQ1ksSUFBSSxFQUFFRSxNQUFNLEVBQUVDLFNBQVMsQ0FBQztJQUV6QyxNQUFNQyxNQUFNLEdBQWdFLEVBQUU7SUFDOUUsTUFBTUMsU0FBUyxHQUErQixFQUFFO0lBQ2hELElBQUksQ0FBQ2pCLFdBQVcsQ0FBQ2EsSUFBSSxFQUFFRyxNQUFNLEVBQUVDLFNBQVMsQ0FBQztBQUV6QyxTQUFLLElBQUkxeEgsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc3hILElBQUksQ0FBQ3p4SCxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO0FBQ3BDLFlBQU1zMkIsR0FBRyxHQUFHLENBQUExaUIsRUFBQSxHQUFBMjlHLE1BQU0sQ0FBQ0QsSUFBSSxDQUFDdHhILENBQUMsQ0FBQyxDQUFDK1gsS0FBSyxDQUFDQyxHQUFHLENBQUNsZixFQUFFLENBQUMsY0FBQThhLEVBQUEsdUJBQUFBLEVBQUEsQ0FBRTBFLElBQUk7QUFFOUMsVUFBSWdlLEdBQUcsRUFBRTtBQUNQNDVGLGtCQUFVLENBQUNhLFNBQVMsQ0FBQ2w1SCxJQUFJLENBQUN5K0IsR0FBRyxDQUFDO0FBQ2hDLE9BQUMsTUFBTTtBQUNMLGNBQU00b0YsYUFBYSxHQUFHdVMsTUFBTSxDQUFDSCxJQUFJLENBQUN0eEgsQ0FBQyxDQUFDLENBQUMrWCxLQUFLLENBQUNDLEdBQUcsQ0FBQ2xmLEVBQUUsQ0FBQyxDQUFDb21ILGFBQWE7UUFDaEUsSUFBSSxDQUFDQSxhQUFhLEVBQUU7QUFDbEI3akgsZ0JBQU0sQ0FBQ3VDLEtBQUssQ0FDVixzQ0FBc0MwekgsSUFBSSxDQUFDdHhILENBQUMsQ0FBQyxDQUFDK1gsS0FBSyxDQUFDQyxHQUFHLENBQUNsZixFQUFFLHlCQUF5QixDQUNwRjtVQUNEbzNILFVBQVUsQ0FBQ2MsS0FBSyxDQUFDbjVILElBQUksQ0FBQ3k1SCxJQUFJLENBQUN0eEgsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDRjtBQUNBLGNBQU0yeEgsSUFBSSxHQUFHSCxTQUFTLENBQUN0UyxhQUFhLENBQUM7QUFDckMsWUFBSXlTLElBQUksRUFBRTtBQUNSekIsb0JBQVUsQ0FBQ2dCLFFBQVEsQ0FBQ3I1SCxJQUFJLENBQUMsQ0FBQzg1SCxJQUFJLEVBQUVMLElBQUksQ0FBQ3R4SCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFNBQUMsTUFBTTtVQUNMa3dILFVBQVUsQ0FBQ2MsS0FBSyxDQUFDbjVILElBQUksQ0FBQ3k1SCxJQUFJLENBQUN0eEgsQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDRjtBQUNGO0FBQ0EsU0FBSyxJQUFJQSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdxeEgsSUFBSSxDQUFDeHhILE1BQU0sRUFBRUcsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsWUFBTXMyQixHQUFHLEdBQUcsQ0FBQWxlLEVBQUEsR0FBQXE1RyxNQUFNLENBQUNKLElBQUksQ0FBQ3J4SCxDQUFDLENBQUMsQ0FBQytYLEtBQUssQ0FBQ0MsR0FBRyxDQUFDbGYsRUFBRSxDQUFDLGNBQUFzZixFQUFBLHVCQUFBQSxFQUFBLENBQUVFLElBQUk7TUFDOUMsSUFBSSxDQUFDZ2UsR0FBRyxFQUFFO0FBQ1IsY0FBTTRvRixhQUFhLEdBQUdxUyxNQUFNLENBQUNGLElBQUksQ0FBQ3J4SCxDQUFDLENBQUMsQ0FBQytYLEtBQUssQ0FBQ0MsR0FBRyxDQUFDbGYsRUFBRSxDQUFDLENBQUNvbUgsYUFBYTtRQUNoRSxJQUFJLENBQUNBLGFBQWEsRUFBRTtBQUNsQjdqSCxnQkFBTSxDQUFDdUMsS0FBSyxDQUNWLHNDQUFzQ3l6SCxJQUFJLENBQUNyeEgsQ0FBQyxDQUFDLENBQUMrWCxLQUFLLENBQUNDLEdBQUcsQ0FBQ2xmLEVBQUUsMkJBQTJCLENBQ3RGO1VBQ0RvM0gsVUFBVSxDQUFDZSxPQUFPLENBQUNwNUgsSUFBSSxDQUFDdzVILElBQUksQ0FBQ3J4SCxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNGO0FBQ0EsY0FBTTJ4SCxJQUFJLEdBQUdELFNBQVMsQ0FBQ3hTLGFBQWEsQ0FBQztRQUNyQyxJQUFJLENBQUN5UyxJQUFJLEVBQUU7VUFDVHpCLFVBQVUsQ0FBQ2UsT0FBTyxDQUFDcDVILElBQUksQ0FBQ3c1SCxJQUFJLENBQUNyeEgsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDRixPQUFDLE1BQU07QUFDTGt3SCxrQkFBVSxDQUFDYSxTQUFTLENBQUNsNUgsSUFBSSxDQUFDeStCLEdBQUcsQ0FBQztBQUNoQztBQUNGO0FBRUEsV0FBTy80QixPQUFPLENBQUNDLE9BQU8sQ0FBQzB5SCxVQUFVLENBQUM7QUFDcEM7QUFFT0csa0JBQWdCQSxDQUFDdFgsSUFBYSxFQUFFbFgsSUFBcUI7QUFDMUQsUUFBS0EsSUFBSSxLQUFLam1HLFNBQVMsSUFBSWltRyxJQUFJLEtBQUssSUFBSSxDQUFDdXRCLFNBQVMsSUFBSyxDQUFDLElBQUksQ0FBQ3dDLGVBQWUsRUFBRTtNQUM1RSxJQUFJLENBQUNyQixtQkFBbUIsRUFBRTtBQUMxQjtNQUNBLElBQUkxdUIsSUFBSSxLQUFLam1HLFNBQVMsRUFBRTtBQUN0QixZQUFJLENBQUNpMkgsbUJBQW1CLENBQUNod0IsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQ3V0QixTQUFTLEdBQUd2dEIsSUFBSTtBQUN2QjtBQUNGO0lBRUEsSUFBSWl3QixnQkFBZ0IsR0FBRyxLQUFLO0lBQzVCLElBQUkvWSxJQUFJLEtBQUtuOUcsU0FBUyxJQUFJbTlHLElBQUksS0FBSyxJQUFJLENBQUNvVyxTQUFTLEVBQUU7QUFDakQ7O0FBRUc7TUFDSDJDLGdCQUFnQixHQUNiLElBQUksQ0FBQzNDLFNBQVMsS0FBSyxDQUFDLE1BQU9wVyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQ3RDLElBQUksQ0FBQ29XLFNBQVMsS0FBSyxDQUFDLE1BQU9wVyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLFVBQUksQ0FBQ2daLFdBQVcsQ0FBQ2haLElBQUksQ0FBQztNQUN0QixJQUFJLENBQUNvVyxTQUFTLEdBQUdwVyxJQUFJO0FBQ3ZCO0lBRUEsSUFBSSxJQUFJLENBQUM2WSxlQUFlLEVBQ3RCLElBQUksQ0FBQ0EsZUFBZSxDQUFDdDVILE9BQU8sQ0FBRXNDLEtBQUssSUFBSTtBQUNyQyxVQUFJLENBQUNrdEQsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDbGIsV0FBVyxDQUFDanJFLEtBQUssQ0FBQ3ErQyxHQUFHLEVBQUVyK0MsS0FBSyxDQUFDeU4sUUFBUSxDQUFDO0FBQ2xFLEtBQUMsQ0FBQztBQUNKLFFBQUksQ0FBQ3kvQyxNQUFNLENBQUNzNUIsYUFBYSxDQUN2QjB3QyxnQkFBZ0IsR0FDWjkzSCxXQUFXLENBQUNrb0YsWUFBWSxHQUFHbG9GLFdBQVcsQ0FBQzZzRixPQUFPLEdBQzlDN3NGLFdBQVcsQ0FBQzRzRixNQUFNLENBQ3ZCO0FBQ0g7RUFFUW1yQyxXQUFXQSxDQUFDaFosSUFBWTtBQUM5QixVQUFNbHdHLElBQUksR0FBRzlMLElBQUksQ0FBQ3NGLEdBQUcsQ0FBQ3RGLElBQUksQ0FBQ3FGLEdBQUcsQ0FBQyxDQUFDLEdBQUcyMkcsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQyxVQUFNandHLEVBQUUsR0FBRy9MLElBQUksQ0FBQ3NGLEdBQUcsQ0FBQ3RGLElBQUksQ0FBQ3FGLEdBQUcsQ0FBQzIyRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXpDLFFBQUksQ0FBQ2dXLGNBQWMsQ0FBQ3oySCxPQUFPLENBQUVxRSxHQUFHLElBQUk7TUFDbENBLEdBQUcsQ0FBQ2lOLE9BQU8sR0FDUmpOLEdBQWEsQ0FBQyxjQUFjLENBQUMsS0FBS2YsU0FBUyxHQUN4Q21CLElBQUksQ0FBQ3NGLEdBQUcsQ0FBQ3dHLElBQUksRUFBR2xNLEdBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUM5Q2tNLElBQUk7TUFDVmxNLEdBQUcsQ0FBQ3pCLFVBQVUsR0FBRzJOLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUk7QUFDMUNsTSxTQUFHLENBQUMwTixXQUFXLEdBQUcxTixHQUFHLENBQUNpTixPQUFPLEdBQUcsQ0FBQztNQUNqQ2pOLEdBQUcsQ0FBQzROLE9BQU8sR0FBRzVOLEdBQUcsQ0FBQ2lOLE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUk7TUFDOUNqTixHQUFHLENBQUN5SixTQUFTLEdBQUcsSUFBSTtBQUN0QixLQUFDLENBQUM7QUFFRixRQUFJLENBQUM0b0gsbUJBQW1CLENBQUMxMkgsT0FBTyxDQUFFcUUsR0FBRyxJQUFJO01BQ3ZDQSxHQUFHLENBQUNpTixPQUFPLEdBQ1JqTixHQUFhLENBQUMsY0FBYyxDQUFDLEtBQUtmLFNBQVMsR0FDeENtQixJQUFJLENBQUNzRixHQUFHLENBQUN5RyxFQUFFLEVBQUduTSxHQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsR0FDNUNtTSxFQUFFO01BQ1JuTSxHQUFHLENBQUN6QixVQUFVLEdBQUc0TixFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJO0FBQ3hDbk0sU0FBRyxDQUFDME4sV0FBVyxHQUFHMU4sR0FBRyxDQUFDaU4sT0FBTyxHQUFHLENBQUM7TUFDakNqTixHQUFHLENBQUM0TixPQUFPLEdBQUc1TixHQUFHLENBQUNpTixPQUFPLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJO01BQzlDak4sR0FBRyxDQUFDeUosU0FBUyxHQUFHLElBQUk7QUFDdEIsS0FBQyxDQUFDO0FBRUYsUUFBSSxDQUFDNm9ILG1CQUFtQixDQUFDMzJILE9BQU8sQ0FBRXFFLEdBQUcsSUFBSTtNQUN2Q0EsR0FBRyxDQUFDaU4sT0FBTyxHQUNSak4sR0FBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLZixTQUFTLEdBQ3hDbUIsSUFBSSxDQUFDc0YsR0FBRyxDQUFDd0csSUFBSSxFQUFHbE0sR0FBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQzlDa00sSUFBSTtNQUNWbE0sR0FBRyxDQUFDekIsVUFBVSxHQUFHMk4sSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSTtBQUMxQ2xNLFNBQUcsQ0FBQzBOLFdBQVcsR0FBRzFOLEdBQUcsQ0FBQ2lOLE9BQU8sR0FBRyxDQUFDO01BQ2pDak4sR0FBRyxDQUFDNE4sT0FBTyxHQUFHNU4sR0FBRyxDQUFDaU4sT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSTtNQUM5Q2pOLEdBQUcsQ0FBQ3lKLFNBQVMsR0FBRyxJQUFJO0FBQ3RCLEtBQUMsQ0FBQztBQUVGLFFBQUksQ0FBQzhvSCxnQkFBZ0IsQ0FBQzUySCxPQUFPLENBQUVxRSxHQUFHLElBQUk7TUFDcENBLEdBQUcsQ0FBQ2lOLE9BQU8sR0FDUmpOLEdBQWEsQ0FBQyxjQUFjLENBQUMsS0FBS2YsU0FBUyxHQUN4Q21CLElBQUksQ0FBQ3NGLEdBQUcsQ0FBQ3lHLEVBQUUsRUFBR25NLEdBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUM1Q21NLEVBQUU7TUFDUm5NLEdBQUcsQ0FBQ3pCLFVBQVUsR0FBRzROLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUk7QUFDeENuTSxTQUFHLENBQUMwTixXQUFXLEdBQUcxTixHQUFHLENBQUNpTixPQUFPLEdBQUcsQ0FBQztNQUNqQ2pOLEdBQUcsQ0FBQzROLE9BQU8sR0FBRzVOLEdBQUcsQ0FBQ2lOLE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUk7TUFDOUNqTixHQUFHLENBQUN5SixTQUFTLEdBQUcsSUFBSTtBQUN0QixLQUFDLENBQUM7QUFDSjtFQUVReXJILG1CQUFtQkEsQ0FBQ2h3QixJQUFvQjtBQUM5QyxZQUFRQSxJQUFJO01BQ1YsS0FBS2d0QixjQUFjLENBQUM5dkcsT0FBTztRQUN6QixJQUFJLENBQUM2eUcsZUFBZSxHQUFHLElBQUksQ0FBQ0ksd0JBQXdCLENBQUMsSUFBSSxDQUFDbkIsV0FBVyxDQUFDO0FBQ3RFO01BQ0YsS0FBS2hDLGNBQWMsQ0FBQ29ELEtBQUs7UUFDdkIsSUFBSSxDQUFDTCxlQUFlLEdBQUcsSUFBSSxDQUFDTSxzQkFBc0IsQ0FBQyxJQUFJLENBQUNyQixXQUFXLENBQUM7QUFDcEU7QUFDRjtBQUNFeDFILGNBQU0sQ0FBQ3VDLEtBQUssQ0FBQyxDQUFnQ2lrRyxtQ0FBSSxFQUFFLENBQUM7QUFDeEQ7QUFDRjtBQUVRMHVCLHFCQUFtQkEsR0FBQTtJQUN6QixJQUFJLENBQUNxQixlQUFlLEdBQUcsSUFBSTtJQUMzQixJQUFJLENBQUM3QyxjQUFjLEdBQUcsRUFBRTtJQUN4QixJQUFJLENBQUNDLG1CQUFtQixHQUFHLEVBQUU7SUFDN0IsSUFBSSxDQUFDQyxtQkFBbUIsR0FBRyxFQUFFO0lBQzdCLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUcsRUFBRTtBQUM1QjtFQUVRNEIsbUJBQW1CQSxDQUFDWixVQUFzQjtJQUNoRCxNQUFNejNFLFVBQVUsR0FBRyxJQUFJLENBQUN6MUIsSUFBSSxDQUFDZ0YsYUFBYSxFQUFFO0lBRTVDLE1BQU1tcUcsUUFBUSxHQUFHakMsVUFBVSxDQUFDYyxLQUFLLENBQUNyM0UsT0FBTyxDQUFFLytDLEtBQUssSUFBSTtBQUNsRCxhQUFPNjlDLFVBQVUsQ0FBQy95QixxQkFBcUIsQ0FBQzlxQixLQUFLLENBQUM7QUFDaEQsS0FBQyxDQUFDO0lBQ0YsTUFBTXczSCxVQUFVLEdBQUdsQyxVQUFVLENBQUNlLE9BQU8sQ0FBQ3QzRSxPQUFPLENBQUUvK0MsS0FBSyxJQUFJO0FBQ3RELGFBQU82OUMsVUFBVSxDQUFDL3lCLHFCQUFxQixDQUFDOXFCLEtBQUssQ0FBQztBQUNoRCxLQUFDLENBQUM7SUFDRixNQUFNeTNILFlBQVksR0FBR25DLFVBQVUsQ0FBQ2EsU0FBUyxDQUFDcDNFLE9BQU8sQ0FBRS8rQyxLQUFLLElBQUk7QUFDMUQsYUFBTzY5QyxVQUFVLENBQUMveUIscUJBQXFCLENBQUM5cUIsS0FBSyxDQUFDO0FBQ2hELEtBQUMsQ0FBQztJQUVGLE1BQU0wM0gsY0FBYyxHQUFHcEMsVUFBVSxDQUFDZ0IsUUFBUSxDQUN2Q3YzRSxPQUFPLENBQUUvK0MsS0FBSyxJQUFJO01BQ2pCLE9BQU82OUMsVUFBVSxDQUFDL3lCLHFCQUFxQixDQUFDOXFCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxLQUFDLENBQUMsQ0FDRDNDLE1BQU0sQ0FBRTJDLEtBQUssSUFBSTtBQUNoQixhQUFPLENBQUN5M0gsWUFBWSxDQUFDcDJILFFBQVEsQ0FBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUN3M0gsVUFBVSxDQUFDbjJILFFBQVEsQ0FBQ3JCLEtBQUssQ0FBQztBQUNyRSxLQUFDLENBQUM7SUFDSixNQUFNMjNILGNBQWMsR0FBR3JDLFVBQVUsQ0FBQ2dCLFFBQVEsQ0FDdkN2M0UsT0FBTyxDQUFFLytDLEtBQUssSUFBSTtNQUNqQixPQUFPNjlDLFVBQVUsQ0FBQy95QixxQkFBcUIsQ0FBQzlxQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsS0FBQyxDQUFDLENBQ0QzQyxNQUFNLENBQUUyQyxLQUFLLElBQUk7QUFDaEIsYUFBTyxDQUFDeTNILFlBQVksQ0FBQ3AySCxRQUFRLENBQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDdTNILFFBQVEsQ0FBQ2wySCxRQUFRLENBQUNyQixLQUFLLENBQUM7QUFDbkUsS0FBQyxDQUFDO0lBRUosT0FBTztBQUNMbTJILGVBQVMsRUFBRXNCLFlBQVk7QUFDdkJyQixXQUFLLEVBQUVtQixRQUFRO0FBQ2ZsQixhQUFPLEVBQUVtQixVQUFVO0FBQ25CSSxpQkFBVyxFQUFFRixjQUFjO0FBQzNCRyxpQkFBVyxFQUFFRjtLQUNkO0FBQ0g7RUFFUVAsd0JBQXdCQSxDQUFDVSxnQkFBa0M7QUFDakUsVUFBTW5oRyxNQUFNLEdBQUc7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ0UwbkIsR0FBRyxFQUFFeTVFLGdCQUFnQixDQUFDMUIsS0FBSyxDQUFDLzRILE1BQU0sQ0FDL0IyQyxLQUFLLElBQ0pBLEtBQUssQ0FBQzBLLFlBQVksS0FBS1osWUFBWSxDQUFDYSxJQUFJLElBQ3hDM0ssS0FBSyxDQUFDMEssWUFBWSxLQUFLWixZQUFZLENBQUMwVixJQUFJLENBQzNDO01BQ0QvUixRQUFRLEVBQUUsSUFBSSxDQUFDaW5IO0FBQ2hCLE9BQ0Q7TUFDRXIyRSxHQUFHLEVBQUV5NUUsZ0JBQWdCLENBQUNELFdBQVcsQ0FBQ3g2SCxNQUFNLENBQ3JDMkMsS0FBSyxJQUNKQSxLQUFLLENBQUMwSyxZQUFZLEtBQUtaLFlBQVksQ0FBQ2EsSUFBSSxJQUN4QzNLLEtBQUssQ0FBQzBLLFlBQVksS0FBS1osWUFBWSxDQUFDMFYsSUFBSSxDQUMzQztNQUNEL1IsUUFBUSxFQUFFLElBQUksQ0FBQ2tuSDtBQUNoQixPQUNEO01BQ0V0MkUsR0FBRyxFQUFFeTVFLGdCQUFnQixDQUFDRixXQUFXLENBQUN2NkgsTUFBTSxDQUNyQzJDLEtBQUssSUFDSkEsS0FBSyxDQUFDMEssWUFBWSxLQUFLWixZQUFZLENBQUNhLElBQUksSUFDeEMzSyxLQUFLLENBQUMwSyxZQUFZLEtBQUtaLFlBQVksQ0FBQzBWLElBQUksQ0FDM0M7TUFDRC9SLFFBQVEsRUFBRSxJQUFJLENBQUNtbkg7QUFDaEIsT0FDRDtNQUNFdjJFLEdBQUcsRUFBRXk1RSxnQkFBZ0IsQ0FBQ3pCLE9BQU8sQ0FBQ2g1SCxNQUFNLENBQ2pDMkMsS0FBSyxJQUNKQSxLQUFLLENBQUMwSyxZQUFZLEtBQUtaLFlBQVksQ0FBQ2EsSUFBSSxJQUN4QzNLLEtBQUssQ0FBQzBLLFlBQVksS0FBS1osWUFBWSxDQUFDMFYsSUFBSSxDQUMzQztNQUNEL1IsUUFBUSxFQUFFLElBQUksQ0FBQ29uSDtLQUNoQjtBQUNEO0FBQ0E7TUFDRXgyRSxHQUFHLEVBQUV5NUUsZ0JBQWdCLENBQUMxQixLQUFLLENBQUMvNEgsTUFBTSxDQUMvQjJDLEtBQUssSUFDSkEsS0FBSyxDQUFDMEssWUFBWSxLQUFLWixZQUFZLENBQUMyVixLQUFLLElBQ3pDemYsS0FBSyxDQUFDMEssWUFBWSxLQUFLWixZQUFZLENBQUN1WixXQUFXLENBQ2xEO01BQ0Q1VixRQUFRLEVBQUUsSUFBSSxDQUFDcW5IO0FBQ2hCLE9BQ0Q7TUFDRXoyRSxHQUFHLEVBQUV5NUUsZ0JBQWdCLENBQUNELFdBQVcsQ0FBQ3g2SCxNQUFNLENBQ3JDMkMsS0FBSyxJQUNKQSxLQUFLLENBQUMwSyxZQUFZLEtBQUtaLFlBQVksQ0FBQzJWLEtBQUssSUFDekN6ZixLQUFLLENBQUMwSyxZQUFZLEtBQUtaLFlBQVksQ0FBQ3VaLFdBQVcsQ0FDbEQ7TUFDRDVWLFFBQVEsRUFBRSxJQUFJLENBQUNzbkg7QUFDaEIsT0FDRDtNQUNFMTJFLEdBQUcsRUFBRXk1RSxnQkFBZ0IsQ0FBQ0YsV0FBVyxDQUFDdjZILE1BQU0sQ0FDckMyQyxLQUFLLElBQ0pBLEtBQUssQ0FBQzBLLFlBQVksS0FBS1osWUFBWSxDQUFDMlYsS0FBSyxJQUN6Q3pmLEtBQUssQ0FBQzBLLFlBQVksS0FBS1osWUFBWSxDQUFDdVosV0FBVyxDQUNsRDtNQUNENVYsUUFBUSxFQUFFLElBQUksQ0FBQ3VuSDtBQUNoQixPQUNEO01BQ0UzMkUsR0FBRyxFQUFFeTVFLGdCQUFnQixDQUFDekIsT0FBTyxDQUFDaDVILE1BQU0sQ0FDakMyQyxLQUFLLElBQ0pBLEtBQUssQ0FBQzBLLFlBQVksS0FBS1osWUFBWSxDQUFDMlYsS0FBSyxJQUN6Q3pmLEtBQUssQ0FBQzBLLFlBQVksS0FBS1osWUFBWSxDQUFDdVosV0FBVyxDQUNsRDtNQUNENVYsUUFBUSxFQUFFLElBQUksQ0FBQ3duSDtBQUNoQixNQUNGO0FBQ0QsUUFBSSxDQUFDZCxjQUFjLENBQUNsM0gsSUFBSSxDQUFDLElBQUksQ0FBQ3kzSCxpQkFBaUIsRUFBRSxJQUFJLENBQUNJLGtCQUFrQixDQUFDO0FBQ3pFLFFBQUksQ0FBQ1YsbUJBQW1CLENBQUNuM0gsSUFBSSxDQUMzQixJQUFJLENBQUMyM0gsc0JBQXNCLEVBQzNCLElBQUksQ0FBQ0ksdUJBQXVCLENBQzdCO0FBQ0QsUUFBSSxDQUFDWCxtQkFBbUIsQ0FBQ3AzSCxJQUFJLENBQzNCLElBQUksQ0FBQzAzSCxzQkFBc0IsRUFDM0IsSUFBSSxDQUFDSSx1QkFBdUIsQ0FDN0I7QUFDRCxRQUFJLENBQUNULGdCQUFnQixDQUFDcjNILElBQUksQ0FBQyxJQUFJLENBQUM0M0gsbUJBQW1CLEVBQUUsSUFBSSxDQUFDSSxvQkFBb0IsQ0FBQztBQUUvRSxXQUFPdCtGLE1BQU0sQ0FBQ3Q1QixNQUFNLENBQUUyQyxLQUFLLElBQUtBLEtBQUssQ0FBQ3ErQyxHQUFHLENBQUNwNUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2RDtFQUVRcXlILHNCQUFzQkEsQ0FBQ1EsZ0JBQWtDO0lBQy9ELE1BQU0xQixLQUFLLEdBQUcsSUFBSSxDQUFDMkIsbUJBQW1CLENBQUNELGdCQUFnQixDQUFDMUIsS0FBSyxDQUFDO0lBQzlELE1BQU00QixVQUFVLEdBQUcsSUFBSSxDQUFDRCxtQkFBbUIsQ0FBQ0QsZ0JBQWdCLENBQUNGLFdBQVcsQ0FBQztJQUN6RSxNQUFNSyxVQUFVLEdBQUcsSUFBSSxDQUFDRixtQkFBbUIsQ0FBQ0QsZ0JBQWdCLENBQUNELFdBQVcsQ0FBQztJQUN6RSxNQUFNeEIsT0FBTyxHQUFHLElBQUksQ0FBQzBCLG1CQUFtQixDQUFDRCxnQkFBZ0IsQ0FBQ3pCLE9BQU8sQ0FBQztBQUNsRSxRQUFJLENBQUNsQyxjQUFjLEdBQUdpQyxLQUFLLENBQUM3N0csR0FBRyxDQUM1QnZhLEtBQStELElBQzlEQSxLQUFLLENBQUN5TixRQUFRLENBQ2pCO0FBQ0QsUUFBSSxDQUFDMm1ILG1CQUFtQixHQUFHNEQsVUFBVSxDQUFDejlHLEdBQUcsQ0FDdEN2YSxLQUErRCxJQUM5REEsS0FBSyxDQUFDeU4sUUFBUSxDQUNqQjtBQUNELFFBQUksQ0FBQzRtSCxtQkFBbUIsR0FBRzRELFVBQVUsQ0FBQzE5RyxHQUFHLENBQ3RDdmEsS0FBK0QsSUFDOURBLEtBQUssQ0FBQ3lOLFFBQVEsQ0FDakI7QUFDRCxRQUFJLENBQUM2bUgsZ0JBQWdCLEdBQUcrQixPQUFPLENBQUM5N0csR0FBRyxDQUNoQ3ZhLEtBQStELElBQzlEQSxLQUFLLENBQUN5TixRQUFRLENBQ2pCO0FBQ0QsV0FBTyxDQUFDLEdBQUcyb0gsS0FBSyxFQUFFLEdBQUc0QixVQUFVLEVBQUUsR0FBR0MsVUFBVSxFQUFFLEdBQUc1QixPQUFPLENBQUM7QUFDN0Q7RUFFUTBCLG1CQUFtQkEsQ0FBQ0csUUFBK0I7QUFJekQsVUFBTUMsWUFBWSxHQUFHQyxPQUFPLENBQUNGLFFBQVEsRUFBRSxTQUFTLENBQUM7SUFFakQsTUFBTTNpRixhQUFhLEdBR2IsRUFBRTtBQUNSLFNBQUssTUFBTW53QyxDQUFDLElBQUkreUgsWUFBWSxFQUFFO01BQzVCLE1BQU1FLFFBQVEsR0FDWixJQUFJLENBQUNuckUsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDM2EsZ0JBQWdCLENBQUMyc0QsWUFBWSxDQUFDL3lILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM5RCxDQUFDdTBCLEtBQUssRUFBeUI7QUFHOUIwK0YsY0FBZ0IsQ0FBQyxjQUFjLENBQUMsR0FBR0EsUUFBUSxDQUFDcnBILE9BQU87TUFDckRxcEgsUUFBUSxDQUFDcnBILE9BQU8sR0FBRyxHQUFHO01BQ3RCcXBILFFBQVEsQ0FBQzVvSCxXQUFXLEdBQUcsSUFBSTtNQUMzQjhsQyxhQUFhLENBQUN0NEMsSUFBSSxDQUFDO0FBQ2pCb2hELFdBQUcsRUFBRTg1RSxZQUFZLENBQUMveUgsQ0FBQyxDQUFDO0FBQ3BCcUksZ0JBQVEsRUFBRTRxSDtBQUNYLFFBQUM7QUFDSjtBQUVBLFdBQU85aUYsYUFBYTtBQUN0QjtBQStHRDs7TUNwdUJZK2lGLFlBQVk7RUFXdkIxN0gsWUFBbUJ3ckIsSUFBZTtJQVZ4QixJQUFjLENBQUFtd0csY0FBQSxHQUFXLENBQUM7SUFHakIsS0FBQXRaLG9CQUFvQixHQUVuQztNQUNGanRFLEtBQUssRUFBRSxJQUFJLENBQUN3bUYsV0FBVyxDQUFDN2dGLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDbEN6eUIsVUFBSSxFQUFFLElBQUksQ0FBQ3c2RixVQUFVLENBQUMvbkUsSUFBSSxDQUFDLElBQUk7S0FDaEM7SUFHQyxJQUFJLENBQUN2dkIsSUFBSSxHQUFHQSxJQUFJO0FBQ2xCO0VBRU8sTUFBTXF3RyxVQUFVQSxHQUFBO0FBQ3JCO0lBQ0EsSUFBSXoyRSxJQUFJLENBQUM5N0MsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDcXlILGNBQWMsSUFBSSxHQUFHLEVBQUU7QUFDM0MsVUFBSSxDQUFDQSxjQUFjLEdBQUd2MkUsSUFBSSxDQUFDOTdDLEdBQUcsRUFBRTtNQUNoQyxNQUFNLElBQUl2RCxPQUFPLENBQUVDLE9BQU8sSUFBSzJELFVBQVUsQ0FBQzNELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RDtBQUNGO0VBRU8sTUFBTW1uRSxRQUFRQSxDQUNuQnUzQyxTQUFpQixFQUNqQmx2RyxNQUFnQixFQUNoQjNVLFFBQWlDLEVBQ2pDaWdCLElBQUEsR0FBd0IsSUFBSTtBQUU1QixVQUFNLElBQUksQ0FBQys2RyxVQUFVLEVBQUU7QUFFdkIsVUFBTTlXLFNBQVMsR0FBYSxJQUFJLENBQUN2NUYsSUFBSSxDQUFDNkUsS0FBSyxDQUFDO01BQzFDL3VCLEVBQUUsRUFBRSxDQUFDd2YsSUFBSSxHQUFHNGpHLFNBQVMsR0FBR2x2RyxNQUFNLENBQUNpbkIsSUFBSTtBQUNuQ2pjLFNBQUcsRUFBRWhMLE1BQU07QUFDWDRZLFlBQU0sRUFBRSxJQUFJO0FBQ1ptQyxjQUFRLEVBQUU7QUFDWCxNQUFDO0lBRUYsSUFBSSxDQUFDelAsSUFBSSxFQUFFO0FBQ1QsVUFBSSxDQUFDMEssSUFBSSxDQUFDd0YsVUFBVSxDQUFDK3pGLFNBQVMsQ0FBQztBQUNqQyxLQUFDLE1BQU07TUFDTCxJQUFJLENBQUN2NUYsSUFBSSxDQUFDMEQsT0FBTyxDQUFDNjFGLFNBQVMsRUFBRWprRyxJQUFJLENBQUM7QUFDcEM7QUFFQSxVQUFNcmYsSUFBSSxHQUFHK1QsTUFBTSxDQUFDL1QsSUFBSTtBQUV4QixRQUFJLElBQUksQ0FBQ3dqSCx5QkFBeUIsQ0FBQ3p2RyxNQUFNLENBQUMsRUFBRTtNQUMxQyxJQUFJO0FBQ0YsY0FBTSxJQUFJLENBQUMwdkcsYUFBYSxDQUFDMXZHLE1BQU0sRUFBRXV2RyxTQUFTLENBQUM7T0FDNUMsQ0FBQyxPQUFPNXZGLENBQUMsRUFBRTtBQUNWdHhCLGNBQU0sQ0FBQ2EsSUFBSSxDQUNULDJDQUEyQ2pELElBQUksYUFBYStULE1BQU0sQ0FBQ2luQixJQUFJLEVBQUUsRUFDekV0SCxDQUFDLENBQ0Y7QUFDSDtBQUNGO0FBQ0EsU0FBSyxJQUFJM3NCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2dOLE1BQU0sQ0FBQythLFFBQVEsQ0FBQ2xvQixNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO0FBQy9DLFlBQU0sSUFBSSxDQUFDMmtFLFFBQVEsQ0FBQ3UzQyxTQUFTLEVBQUVsdkcsTUFBTSxDQUFDK2EsUUFBUSxDQUFDL25CLENBQUMsQ0FBQyxFQUFFM0gsUUFBUSxFQUFFa2tILFNBQVMsQ0FBQztBQUN6RTtBQUNGO0VBRVFFLHlCQUF5QkEsQ0FBQzM4RCxHQUFhO0FBQzdDLFdBQU9BLEdBQUcsQ0FBQzdtRCxJQUFJLElBQUksSUFBSSxDQUFDNGdILG9CQUFvQjtBQUM5QztBQUVRLFFBQU02QyxhQUFhQSxDQUFDNThELEdBQWEsRUFBRXhuQyxJQUFjO0lBQ3ZELElBQUk7QUFDRixVQUFJLElBQUksQ0FBQ21rRyx5QkFBeUIsQ0FBQzM4RCxHQUFHLENBQUMsRUFBRTtRQUN2QyxNQUFNKzlELFFBQVEsR0FBRyxJQUFJLENBQUNoRSxvQkFBb0IsQ0FBQy81RCxHQUFHLENBQUM3bUQsSUFBSSxDQUFDO1FBQ3BELElBQUk0a0gsUUFBUSxFQUFFLE9BQU8sTUFBTUEsUUFBUSxDQUFDLzlELEdBQUcsRUFBRXhuQyxJQUFJLENBQUM7QUFDaEQ7QUFDQSxhQUFPLElBQUk7S0FDWixDQUFDLE9BQU9xVSxDQUFDLEVBQUU7TUFDVnR4QixNQUFNLENBQUNhLElBQUksQ0FBQyxzREFBc0Q0akQsR0FBRyxDQUFDaG5ELEVBQUUsRUFBRSxDQUFDO0FBQzNFLFlBQU02ekIsQ0FBQztBQUNUO0FBQ0Y7QUFFUSxRQUFNMnRGLFVBQVVBLENBQUNxSCxJQUFjLEVBQUVycEcsSUFBYzs7SUFDckQsTUFBTXduQyxHQUFHLEdBQUc2aEUsSUFBWTtJQUN4QixJQUFJLENBQUM3aEUsR0FBRyxFQUFFO0lBQ1YsSUFDRSxDQUFDQSxHQUFHLENBQUN2bEMsUUFBUSxDQUFDQyxVQUFVLENBQUNxUSxRQUFRLElBQ2pDaTFCLEdBQUcsQ0FBQ3ZsQyxRQUFRLENBQUNDLFVBQVUsQ0FBQ3FRLFFBQVEsQ0FBQ0MsS0FBSyxDQUFDanJCLE1BQU0sS0FBSyxDQUFDLEVBQ25EO0FBQ0F4RSxZQUFNLENBQUNhLElBQUksQ0FDVCxhQUFhNGpELEdBQUcsQ0FBQ2huRCxFQUFFLFlBQVlnbkQsR0FBRyxDQUFDN21ELElBQUksa0RBQWtELENBQzFGO0FBQ0Q7QUFDRjtBQUVBcWYsUUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ3lnQixRQUFRLEdBQUdxbkIsR0FBRyxDQUFDdmxDLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDcVEsUUFBUSxDQUFDQyxLQUFLO0FBQ2hFeFMsUUFBSSxDQUFDUCxLQUFLLENBQUNDLEdBQUcsQ0FBQ3lwRyxLQUFLLEdBQUcsQ0FBQTd0RyxFQUFBLEdBQUFrc0MsR0FBRyxDQUFDdmxDLFFBQVEsQ0FBQ3RHLEtBQUssY0FBQUwsRUFBQSx1QkFBQUEsRUFBQSxDQUFFa1gsS0FBSztBQUNoRHhTLFFBQUksQ0FBQ1AsS0FBSyxDQUFDQyxHQUFHLENBQUNFLE1BQU0sR0FBRyxDQUFBRSxFQUFBLEdBQUEwbkMsR0FBRyxDQUFDdmxDLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDL2dCLEtBQUssY0FBQTJlLEVBQUEsdUJBQUFBLEVBQUEsQ0FBRTBTLEtBQUs7QUFDNUR4UyxRQUFJLENBQUNQLEtBQUssQ0FBQ0MsR0FBRyxDQUFDRixjQUFjLEdBQUcsSUFBSSxDQUFDdzdHLDRCQUE0QixDQUFDeHpFLEdBQUcsQ0FBQztBQUN0RSxXQUFPdmlELE9BQU8sQ0FBQ0MsT0FBTyxFQUFFO0FBQzFCO0VBRVE4MUgsNEJBQTRCQSxDQUFDeHpFLEdBQVM7O0lBQzVDLE1BQU16M0MsUUFBUSxHQUFHNUcsS0FBSyxDQUFDMG9DLE9BQU8sQ0FBQzJWLEdBQUcsQ0FBQ3ozQyxRQUFRLENBQUMsR0FBR3kzQyxHQUFHLENBQUN6M0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHeTNDLEdBQUcsQ0FBQ3ozQyxRQUFRO0FBQzdFLFVBQU01TyxLQUFLLEdBQUcsSUFBSSxDQUFDODVILGdCQUFnQixDQUFDbHJILFFBQVEsQ0FBQztBQUM3QyxVQUFNdUIsT0FBTyxHQUFHLENBQUFnSyxFQUFBLEdBQUF2TCxRQUFRLEtBQVIsUUFBQUEsUUFBUSxLQUFSLGtCQUFBQSxRQUFRLENBQUV1QixPQUFPLE1BQUksUUFBQWdLLEVBQUEsY0FBQUEsRUFBQSxJQUFDO0lBRXRDLE9BQU87QUFDTDlhLFFBQUUsRUFBRSxDQUFBc2YsRUFBQSxHQUFBL1AsUUFBUSxhQUFSQSxRQUFRLEtBQVIsa0JBQUFBLFFBQVEsQ0FBRTRyQixJQUFJLE1BQUksUUFBQTdiLEVBQUEsY0FBQUEsRUFBQSxNQUFHMG5DLEdBQUcsQ0FBQzdyQixJQUFJLENBQVc7QUFDNUM2b0Ysa0JBQVksRUFBRSw4QkFBOEI7QUFDNUNubEgsVUFBSSxFQUFFLENBQUEwUSxRQUFRLEtBQVIsUUFBQUEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFMVEsSUFBSSxLQUFJLFVBQVU7QUFDbEN3Z0IsYUFBTyxFQUFFLElBQUksQ0FBQ3E3RyxTQUFTLENBQUMvNUgsS0FBSyxDQUFDNEcsQ0FBQyxFQUFFNUcsS0FBSyxDQUFDNkcsQ0FBQyxFQUFFN0csS0FBSyxDQUFDOEcsQ0FBQyxFQUFFcUosT0FBTyxDQUFDO01BQzNEQSxPQUFPO0FBQ1B3RSxlQUFTLEVBQUUsQ0FBQztBQUNaQyxlQUFTLEVBQUU7S0FDWjtBQUNIO0VBRVFrbEgsZ0JBQWdCQSxDQUFDbHJILFFBQW1COztJQUMxQyxNQUFNb3JILFVBQVUsR0FBR3BySCxRQUVsQjtJQUNELE9BQU8sQ0FBQXVMLEVBQUEsR0FBQTYvRyxVQUFVLEtBQVYsUUFBQUEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFaDZILEtBQUssY0FBQW1hLEVBQUEsY0FBQUEsRUFBQSxHQUFJO0FBQUV2VCxPQUFDLEVBQUUsR0FBRztBQUFFQyxPQUFDLEVBQUUsR0FBRztBQUFFQyxPQUFDLEVBQUU7S0FBSztBQUN4RDtFQUVRaXpILFNBQVNBLENBQUNuekgsQ0FBUyxFQUFFQyxDQUFTLEVBQUVDLENBQVMsRUFBRWszQixDQUFTO0FBQzFELFVBQU14RSxLQUFLLEdBQUcsSUFBSSxDQUFDeWdHLE1BQU0sQ0FBQ2o4RixDQUFDLENBQUM7QUFDNUIsVUFBTWs4RixHQUFHLEdBQUcsSUFBSSxDQUFDRCxNQUFNLENBQUNyekgsQ0FBQyxDQUFDO0FBQzFCLFVBQU11ekgsS0FBSyxHQUFHLElBQUksQ0FBQ0YsTUFBTSxDQUFDcHpILENBQUMsQ0FBQztBQUM1QixVQUFNdXpILElBQUksR0FBRyxJQUFJLENBQUNILE1BQU0sQ0FBQ256SCxDQUFDLENBQUM7QUFDM0IsV0FBUTB5QixLQUFLLElBQUksRUFBRSxHQUFLMGdHLEdBQUcsSUFBSSxFQUFHLEdBQUlDLEtBQUssSUFBSSxDQUFFLEdBQUdDLElBQUk7QUFDMUQ7RUFFUUgsTUFBTUEsQ0FBQzk0SCxLQUFhO0lBQzFCLE9BQU9tQyxJQUFJLENBQUNxRixHQUFHLENBQUMsQ0FBQyxFQUFFckYsSUFBSSxDQUFDc0YsR0FBRyxDQUFDLEdBQUcsRUFBRXRGLElBQUksQ0FBQ2tqRyxLQUFLLENBQUNybEcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQ7QUFFUXc0SCxhQUFXQSxDQUFDdHpFLEdBQWEsRUFBRXhuQyxJQUFjO0FBRy9DLFdBQU8vYSxPQUFPLENBQUNDLE9BQU8sRUFBRTtBQUMxQjtBQUNEOztBQzdJSyxNQUFPczJILG9CQUFxQixTQUFRbnpHLGlCQUFpQjtFQUNsRGtFLGNBQWNBLENBQUN2TSxJQUFjO0FBQ2xDLFlBQVFBLElBQUksQ0FBQ04sR0FBRyxDQUFDL2UsSUFBSTtBQUNuQixXQUFLLE9BQU87UUFDVixPQUFPeW1CLFdBQVcsQ0FBQ3E2RixhQUFhO0FBQ2xDLFdBQUssTUFBTTtRQUNULE9BQU9yNkYsV0FBVyxDQUFDSSxJQUFJO0FBQ3pCO1FBQ0UsT0FBT0osV0FBVyxDQUFDNGtHLE9BQU87QUFDOUI7QUFDRjtFQUVPaGdHLHlCQUF5QkEsQ0FBQ2hNLElBQWM7QUFDN0MsVUFBTXJmLElBQUksR0FBRyxJQUFJLENBQUM0ckIsY0FBYyxDQUFDdk0sSUFBSSxDQUFDO0FBQ3RDLFlBQVFyZixJQUFJO01BQ1YsS0FBS3ltQixXQUFXLENBQUNxNkYsYUFBYTtBQUM1QixlQUFPLElBQUksQ0FBQ3dLLDJCQUEyQixDQUFDanNHLElBQUksQ0FBQztNQUMvQyxLQUFLb0gsV0FBVyxDQUFDSSxJQUFJO0FBQ25CLGVBQU8sSUFBSSxDQUFDNGtHLGtCQUFrQixDQUFDcHNHLElBQUksQ0FBQztBQUN0QztBQUNFLGVBQU8sSUFBSTtBQUNmO0FBQ0Y7RUFFTzBMLHVCQUF1QkEsQ0FBQzFMLElBQWM7O0FBQzNDLFVBQU1OLEdBQUcsR0FBR00sSUFBSSxDQUFDTixHQVVoQjtBQUVELFFBQUlBLEdBQUcsQ0FBQy9lLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDdkIsT0FBQW1mLEVBQUEsU0FBQUosR0FBRyxDQUFDdUMsUUFBUSxNQUFFLFFBQUEzRyxFQUFBLHVCQUFBQSxFQUFBLENBQUFyYixPQUFPLGtEQUFJO01BQ3pCLE9BQU95ZixHQUFHLENBQUN1QyxRQUFRO01BQ25CLE9BQU92QyxHQUFHLENBQUMzUCxRQUFRO01BQ25CLE9BQU8yUCxHQUFHLENBQUN5Z0IsUUFBUTtNQUNuQixPQUFPemdCLEdBQUcsQ0FBQ3lwRyxLQUFLO01BQ2hCLE9BQU96cEcsR0FBRyxDQUFDRSxNQUFNO01BQ2pCLE9BQU9GLEdBQUcsQ0FBQ281QixPQUFPO0FBQ2xCO0FBQ0Y7QUFFQSxRQUFJcDVCLEdBQUcsQ0FBQy9lLElBQUksS0FBSyxPQUFPLEVBQUU7TUFDeEIsQ0FBQStmLEVBQUEsR0FBQWhCLEdBQUcsQ0FBQ3EvQixLQUFLLGNBQUFyK0IsRUFBQSx1QkFBQUEsRUFBQSxDQUFBZ3FCLElBQUEsQ0FBQWhyQixHQUFBLENBQUk7QUFDYixVQUFJdlcsS0FBSyxDQUFDMG9DLE9BQU8sQ0FBQ255QixHQUFHLENBQUMrUCxRQUFRLENBQUMsRUFBRS9QLEdBQUcsQ0FBQytQLFFBQVEsQ0FBQ2xvQixNQUFNLEdBQUcsQ0FBQztBQUMxRDtBQUNGO0FBRUE7RUFDVTBrSCwyQkFBMkJBLENBQUNqc0csSUFBYztJQUNsRCxNQUFNd3RHLGdCQUFnQixHQUFHLENBQUM7QUFDMUIsVUFBTS80RixNQUFNLEdBQUcsSUFBSW53QixPQUFPLEVBQUUsQ0FBQ2dILElBQUksQ0FBQzBVLElBQUksQ0FBQ04sR0FBRyxDQUFDMG5CLFdBQVcsQ0FBQztBQUN2RCxVQUFNL2MsU0FBUyxHQUFZLElBQUkvbEIsT0FBTyxFQUFFLENBQ3JDMkcsU0FBUyxDQUFDdWlILGdCQUFnQixFQUFFQSxnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUMsQ0FDL0QzaEcsUUFBUSxDQUFDNEksTUFBTSxDQUFDLENBQ2hCNUksUUFBUSxDQUNQLElBQUl2bkIsT0FBTyxFQUFFLENBQUMyRyxTQUFTLENBQ3JCLENBQUMsR0FBR3VpSCxnQkFBZ0IsRUFDcEIsQ0FBQyxHQUFHQSxnQkFBZ0IsRUFDcEIsQ0FBQyxHQUFHQSxnQkFBZ0IsQ0FDckIsQ0FDRjtJQUVILE9BQU87QUFDTHRyRyxnQkFBVSxFQUFFLElBQUk7QUFDaEIwSixtQkFBYSxFQUFFLElBQUk7QUFDbkJ2QjtLQUNlO0FBQ25CO0FBRUE7O0FBRUc7RUFDTytoRyxrQkFBa0JBLENBQUNwc0csSUFBYztBQUN6QyxRQUFJLENBQUNBLElBQUksQ0FBQ04sR0FBRyxFQUFFLE9BQU8sSUFBSTtJQUUxQixNQUFNOHRHLGdCQUFnQixHQUFHLENBQUM7SUFDMUIsSUFBSSxDQUFDeHRHLElBQUksQ0FBQ04sR0FBRyxDQUFDdUMsUUFBUSxDQUFDdEcsS0FBSyxJQUFJcUUsSUFBSSxDQUFDTixHQUFHLENBQUN1QyxRQUFRLENBQUN0RyxLQUFLLENBQUM2VyxLQUFLLENBQUNqckIsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMxRXlZLFVBQUksQ0FBQ04sR0FBRyxDQUFDdUMsUUFBUSxHQUFHdzVHLGFBQWEsQ0FBQ3o3RyxJQUFJLENBQUNOLEdBQUcsQ0FBQ3VDLFFBQVEsQ0FBQztBQUN0RDtJQUNBLE9BQU87QUFDTEMsZ0JBQVUsRUFBRTtBQUNWOEgsZ0JBQVEsRUFBRSxJQUFJcE4sVUFBVSxDQUFDLENBQ3ZCO1VBQ0U3VixJQUFJLEVBQUVpWixJQUFJLENBQUNOLEdBQUcsQ0FBQ3VDLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDcVEsUUFBUSxDQUFDQyxLQUFLO0FBQ2pEaHlCLFlBQUUsRUFBRTJjLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO0FBQzVCQyxvQkFBVSxFQUFFO0FBQ2IsVUFDRixDQUFDO0FBQ0Y0TSxhQUFLLEVBQUUsSUFBSXJOLFVBQVUsQ0FBQyxDQUNwQjtVQUNFN1YsSUFBSSxFQUFFaVosSUFBSSxDQUFDTixHQUFHLENBQUN1QyxRQUFRLENBQUN0RyxLQUFLLENBQUM2VyxLQUFLO0FBQ25DaHlCLFlBQUUsRUFBRTJjLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO0FBQzVCQyxvQkFBVSxFQUFFO0FBQ2IsVUFDRixDQUFDO1FBQ0YsSUFBSTJDLElBQUksQ0FBQ04sR0FBRyxDQUFDdUMsUUFBUSxDQUFDQyxVQUFVLENBQUMvZ0IsS0FBSyxJQUFJO0FBQ3hDZ2hCLGVBQUssRUFBRSxJQUFJdkYsVUFBVSxDQUFDLENBQ3BCO1lBQ0U3VixJQUFJLEVBQUVpWixJQUFJLENBQUNOLEdBQUcsQ0FBQ3VDLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDL2dCLEtBQUssQ0FBQ3F4QixLQUFLO0FBQzlDaHlCLGNBQUUsRUFBRTJjLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO0FBQzVCQyxzQkFBVSxFQUFFO0FBQ2IsWUFDRjtTQUNGO09BQ0Y7QUFDRHVPLG1CQUFhLEVBQUUsSUFBSXRuQixPQUFPLEVBQUUsQ0FBQzJHLFNBQVMsQ0FDcEN1aUgsZ0JBQWdCLEVBQ2hCQSxnQkFBZ0IsRUFDaEJBLGdCQUFnQixDQUNqQjtBQUNEbmpHLGVBQVMsRUFBRTtLQUNXO0FBQzFCO0FBQ0Q7O0FDM0ZELE1BQU1xeEcsU0FBUyxHQUFHLFVBQVU7QUFDNUIsTUFBTUMsV0FBVyxHQUFHLElBQUlDLFdBQVcsRUFBRTtBQUNyQyxNQUFNQyw2QkFBNkIsR0FBRyxDQUFDO0FBQ3ZDLE1BQU1DLGlDQUFpQyxHQUNyQyxrREFBa0Q7QUFjOUMsTUFBT0MseUJBQTBCLFNBQVE3UixNQUFNO0VBV25ELElBQVd4NkIsUUFBUUEsR0FBQTtJQUNqQixPQUFPLElBQUksQ0FBQzA2QixTQUFTO0FBQ3ZCO0VBRUEsSUFBVytILFFBQVFBLEdBQUE7SUFDakIsT0FBTyxJQUFJLENBQUNDLFVBQVU7QUFDeEI7RUFFQWx6SCxXQUNFQSxDQUFBbXpILFVBQXFCLEVBQ3JCM2lDLFFBQWdCLEVBQ2hCc3NDLFFBQTRCLEVBQzVCQyxlQUF1QixFQUN2QmxKLEtBQWM7SUFFZCxLQUFLLENBQUNyakMsUUFBUSxDQUFDO0lBdkJQLElBQVUsQ0FBQTBpQyxVQUFBLEdBQUcsS0FBSztJQUNsQixJQUFXLENBQUFPLFdBQUEsR0FBRyxLQUFLO0FBSXJCLFNBQUF1SixnQkFBZ0IsR0FBRyxJQUFJMzVGLEdBQUcsRUFBbUI7QUFDN0MsU0FBQTQ1RixpQkFBaUIsR0FBRyxJQUFJNXRGLEdBQUcsRUFBb0I7SUFrQnJELElBQUksQ0FBQzdqQixJQUFJLEdBQUcybkcsVUFBVTtBQUN0QixRQUFJLENBQUNRLFNBQVMsR0FBRyxJQUFJK0gsWUFBWSxDQUFDdkksVUFBVSxDQUFDO0lBQzdDLElBQUksQ0FBQzJKLFFBQVEsR0FBR0EsUUFBUTtJQUN4QixJQUFJLENBQUNDLGVBQWUsR0FBR0EsZUFBZSxDQUFDRyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUN6RCxJQUFJLENBQUNySixLQUFLLEdBQUdBLEtBQUs7QUFDcEI7RUFFTyxNQUFNMXRILElBQUlBLEdBQUE7QUFDZixVQUFNMmhDLEtBQUssR0FBRyxJQUFJc04sS0FBSyxFQUFFO0FBQ3pCdE4sU0FBSyxDQUFDM25DLElBQUksR0FBRyxJQUFJLENBQUMrcUgsU0FBUztBQUUzQixVQUFNaVMsYUFBYSxHQUFHLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7SUFFL0MsSUFBSUMsV0FBVyxHQUFHLENBQUM7SUFDbkIsTUFBTUMsV0FBVyxHQUFHLElBQUksQ0FBQ0MseUJBQXlCLENBQ2hEWCxpQ0FBaUMsRUFDakNELDZCQUE2QixDQUM5QjtBQUNELFNBQUssSUFBSWorRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd5K0csYUFBYSxDQUFDOTBILE1BQU0sRUFBRXFXLENBQUMsSUFBSTQrRyxXQUFXLEVBQUU7QUFDMUQsVUFBSSxJQUFJLENBQUM3SixXQUFXLEVBQUUsT0FBTyxLQUFLO01BQ2xDLE1BQU01bEgsS0FBSyxHQUFHc3ZILGFBQWEsQ0FBQ3IvRyxLQUFLLENBQUNZLENBQUMsRUFBRUEsQ0FBQyxHQUFHNCtHLFdBQVcsQ0FBQztNQUNyRCxNQUFNRSxVQUFVLEdBQUcsTUFBTXozSCxPQUFPLENBQUNrb0IsR0FBRyxDQUNsQ3BnQixLQUFLLENBQUM4UCxHQUFHLENBQUMsQ0FBQztBQUFFOC9HO0FBQUssWUFDaEIsSUFBSSxDQUFDQyxRQUFRLENBQUNELEdBQUcsQ0FBQ3pKLEdBQUcsQ0FBQyxDQUFDcmtDLEtBQUssQ0FBRWd1QyxHQUFHLElBQUk7QUFDbkMsWUFBSSxJQUFJLENBQUNsSyxXQUFXLEVBQUUsT0FBTyxJQUFJO0FBQ2pDLGNBQU1rSyxHQUFHO09BQ1YsQ0FBQyxDQUNILENBQ0Y7QUFFRCxXQUFLLE1BQU1DLFNBQVMsSUFBSUosVUFBVSxFQUFFO0FBQ2xDLFlBQUksQ0FBQ0ksU0FBUyxFQUFFLE9BQU8sS0FBSztBQUM1QixZQUFJLElBQUksQ0FBQ25LLFdBQVcsRUFBRSxPQUFPLEtBQUs7QUFDbEMzckYsYUFBSyxDQUFDcFIsR0FBRyxDQUFDa25HLFNBQVMsQ0FBQztBQUNwQlAsbUJBQVcsRUFBRTtBQUNiLFlBQUksQ0FBQzM4SCxJQUFJLENBQUNxcUgsV0FBVyxDQUFDa0ssWUFBWSxFQUFFO1VBQ2xDM3pILEVBQUUsRUFBRSxJQUFJLENBQUM0cEgsU0FBUztVQUNsQmdLLFFBQVEsRUFBRW1JLFdBQVcsR0FBRzkzSCxJQUFJLENBQUNxRixHQUFHLENBQUN1eUgsYUFBYSxDQUFDOTBILE1BQU0sRUFBRSxDQUFDO0FBQ3pELFVBQUM7QUFDSjtBQUNGO0FBRUEsUUFBSSxJQUFJLENBQUNvckgsV0FBVyxFQUFFLE9BQU8sS0FBSztBQUNsQyxVQUFNLElBQUksQ0FBQ0UsU0FBUyxDQUFDeG1ELFFBQVEsQ0FBQyxJQUFJLENBQUMrOUMsU0FBUyxFQUFFcGpGLEtBQUssRUFBRSxNQUFNL2hDLE9BQU8sQ0FBQ0MsT0FBTyxFQUFFLENBQUM7QUFDN0UsUUFBSSxJQUFJLENBQUN5dEgsV0FBVyxFQUFFLE9BQU8sS0FBSztJQUVsQyxNQUFNeHlFLFVBQVUsR0FBRyxJQUFJLENBQUN6MUIsSUFBSSxDQUFDZ0YsYUFBYSxDQUFDLElBQUksQ0FBQzA2RixTQUFTLENBQUM7SUFDMUQsSUFBSSxDQUFDanFFLFVBQVUsRUFBRTtNQUNmcDlDLE1BQU0sQ0FBQ3VDLEtBQUssQ0FBQyxpQ0FBaUMsSUFBSSxDQUFDOGtILFNBQVMsRUFBRSxDQUFDO0FBQy9ELGFBQU8sS0FBSztBQUNkO0lBRUEsTUFBTTJTLEtBQUssR0FBRyxNQUFNNThFLFVBQVUsQ0FBQ2oxQixlQUFlLENBQUMsSUFBSXN3RyxvQkFBb0IsRUFBRSxDQUFDO0lBQzFFLElBQUksQ0FBQ3BKLFVBQVUsR0FBRzJLLEtBQUs7QUFDdkIsV0FBT0EsS0FBSztBQUNkO0FBRU9ueUcsUUFBTUEsR0FBQTtJQUNYLElBQUksQ0FBQytuRyxXQUFXLEdBQUcsSUFBSTtBQUN2QixRQUFJLENBQUN1SixnQkFBZ0IsQ0FBQ2w4SCxPQUFPLENBQUVnOUgsVUFBVSxJQUFLQSxVQUFVLENBQUNDLEtBQUssRUFBRSxDQUFDO0FBQ2pFLFFBQUksQ0FBQ2YsZ0JBQWdCLENBQUNuOUUsS0FBSyxFQUFFO0lBQzdCLElBQUksQ0FBQ3F6RSxVQUFVLEdBQUcsS0FBSztJQUN2QixJQUFJLENBQUN4eUgsSUFBSSxDQUFDcXFILFdBQVcsQ0FBQ29LLGFBQWEsRUFBRSxJQUFJLENBQUNqSyxTQUFTLENBQUM7QUFDdEQ7QUFFUWtTLG9CQUFrQkEsR0FBQTtJQUN4QixNQUFNWSxXQUFXLEdBQUcsSUFBSSxDQUFDQyxlQUFlLENBQUMsSUFBSSxDQUFDbkIsUUFBUSxDQUFDL21HLE1BQU0sQ0FBQztJQUU5RCxPQUFPLElBQUksQ0FBQyttRyxRQUFRLENBQUNvQixLQUFLLENBQ3ZCdmdILEdBQUcsQ0FBRXdnSCxJQUFJLElBQXlCOztBQUNqQyxZQUFNVixHQUFHLEdBQUcsSUFBSSxDQUFDVyxZQUFZLENBQUNELElBQUksQ0FBQztBQUNuQyxVQUFJLEVBQUNWLEdBQUcsYUFBSEEsR0FBRyxLQUFILGtCQUFBQSxHQUFHLENBQUV6SixHQUFHLEdBQUUsT0FBTyxJQUFJO01BRTFCLE1BQU12bkgsTUFBTSxHQUFHLElBQUksQ0FBQ3d4SCxlQUFlLENBQUNFLElBQUksQ0FBQzkwRixJQUFJLENBQUM7TUFDOUMsT0FBTztRQUNMODBGLElBQUk7UUFDSlYsR0FBRztBQUNIWSxzQkFBYyxFQUFFNXhILE1BQU0sR0FDbEIsQ0FBQTJQLEVBQUEsR0FBQTRoSCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRXo1RixpQkFBaUIsQ0FBQzkzQixNQUFNLENBQUMsbUNBQUksQ0FBQyxHQUMzQ21qQyxNQUFNLENBQUN1UjtPQUNaO0FBQ0gsS0FBQyxDQUFDLENBQ0QxZ0QsTUFBTSxDQUFFMDlILElBQUksSUFBMkIsQ0FBQyxDQUFDQSxJQUFJLENBQUMsQ0FDOUMxd0YsSUFBSSxDQUFDLENBQUN4TixDQUFDLEVBQUVsM0IsQ0FBQyxLQUFJOztBQUNiLFVBQUlrM0IsQ0FBQyxDQUFDbytGLGNBQWMsS0FBS3QxSCxDQUFDLENBQUNzMUgsY0FBYyxFQUFFO0FBQ3pDLGVBQU9wK0YsQ0FBQyxDQUFDbytGLGNBQWMsR0FBR3QxSCxDQUFDLENBQUNzMUgsY0FBYztBQUM1QztBQUNBLGFBQU8sQ0FBQyxNQUFBcCtGLENBQUMsQ0FBQ3c5RixHQUFHLENBQUNhLEtBQUssbUNBQUksQ0FBQyxLQUFLLENBQUExOUcsRUFBQSxHQUFBN1gsQ0FBQyxDQUFDMDBILEdBQUcsQ0FBQ2EsS0FBSyxjQUFBMTlHLEVBQUEsY0FBQUEsRUFBQSxHQUFJLENBQUMsQ0FBQztBQUNoRCxLQUFDLENBQUM7QUFDTjtFQUVRdzlHLFlBQVlBLENBQUNELElBQWtCO0FBQ3JDLFdBQU9BLElBQUksQ0FBQ0ksSUFBSSxDQUNiOTlILE1BQU0sQ0FBRWc5SCxHQUFHLElBQUssQ0FBQyxFQUFDQSxHQUFHLGFBQUhBLEdBQUcsdUJBQUhBLEdBQUcsQ0FBRXpKLEdBQUcsRUFBQyxDQUMzQnZtRixJQUFJLENBQUMsQ0FBQ3hOLENBQUMsRUFBRWwzQixDQUFDLEtBQUk7O0FBQ2IsWUFBTXkxSCxNQUFNLEdBQUcsQ0FBQXBpSCxFQUFBLEdBQUE2akIsQ0FBQyxDQUFDdytGLEtBQUssY0FBQXJpSCxFQUFBLGNBQUFBLEVBQUEsR0FBSSxDQUFDO0FBQzNCLFlBQU1zaUgsTUFBTSxHQUFHLENBQUE5OUcsRUFBQSxHQUFBN1gsQ0FBQyxDQUFDMDFILEtBQUssY0FBQTc5RyxFQUFBLGNBQUFBLEVBQUEsR0FBSSxDQUFDO0FBQzNCLFVBQUk0OUcsTUFBTSxLQUFLRSxNQUFNLEVBQUUsT0FBT0YsTUFBTSxHQUFHRSxNQUFNO0FBQzdDLGFBQU8sQ0FBQyxDQUFBbDlHLEVBQUEsR0FBQXllLENBQUMsQ0FBQ3ErRixLQUFLLG1DQUFJLENBQUMsS0FBSyxNQUFBdjFILENBQUMsQ0FBQ3UxSCxLQUFLLE1BQUksUUFBQTc4RyxFQUFBLGNBQUFBLEVBQUEsSUFBQyxDQUFDO0tBQ3ZDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVDtFQUVRdzhHLGVBQWVBLENBQUNsb0csTUFBaUI7SUFDdkMsSUFBSSxDQUFDQSxNQUFNLElBQUlBLE1BQU0sQ0FBQzF0QixNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSTtBQUM3QyxXQUFPLElBQUlnQyxPQUFPLENBQ2hCLENBQUMwckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHQSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUMzQixDQUFDQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUdBLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQzNCLENBQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBR0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDNUI7QUFDSDtFQUVRLE1BQU0ybkcsUUFBUUEsQ0FBQ2lCLE9BQWU7QUFDcEMsVUFBTUMsZUFBZSxHQUFHLElBQUlDLGVBQWUsRUFBRTtBQUM3QyxRQUFJLENBQUM3QixnQkFBZ0IsQ0FBQ3RtRyxHQUFHLENBQUNrb0csZUFBZSxDQUFDO0lBQzFDLElBQUk7QUFDRixZQUFNOS9GLEdBQUcsR0FBRyxNQUFNNDNGLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQ3FHLGVBQWUsSUFBSTRCLE9BQU8sRUFBRSxFQUFFO0FBQzVEaEksZUFBTyxFQUFFLElBQUksQ0FBQzlDLEtBQUssR0FBRztBQUFFK0MsdUJBQWEsRUFBRSxVQUFVLElBQUksQ0FBQy9DLEtBQUs7U0FBSSxHQUFHenZILFNBQVM7QUFDM0UwNkgsYUFBSyxFQUFFLFVBQVU7UUFDakJDLE1BQU0sRUFBRUgsZUFBZSxDQUFDRztBQUN6QixRQUFDO0FBQ0YsVUFBSSxDQUFDamdHLEdBQUcsQ0FBQyszRixFQUFFLEVBQUU7QUFDWCxjQUFNLElBQUl4d0gsS0FBSyxDQUFDLENBQXlDczRILCtDQUFPLEVBQUUsQ0FBQztBQUNyRTtBQUVBLGFBQU8sSUFBSSxDQUFDSyxTQUFTLENBQUMsTUFBTWxnRyxHQUFHLENBQUNxd0YsV0FBVyxFQUFFLEVBQUV3UCxPQUFPLENBQUM7QUFDekQsS0FBQyxTQUFTO0FBQ1IsVUFBSSxDQUFDM0IsZ0JBQWdCLENBQUNpQyxNQUFNLENBQUNMLGVBQWUsQ0FBQztBQUMvQztBQUNGO0FBRVFJLFdBQVNBLENBQUMzZ0gsTUFBbUIsRUFBRXNnSCxPQUFlOztBQUNwRCxVQUFNaHlDLElBQUksR0FBRyxJQUFJdXlDLFFBQVEsQ0FBQzdnSCxNQUFNLENBQUM7SUFDakMsSUFBSWpSLE1BQU0sR0FBRyxDQUFDO0FBQ2QsVUFBTSt4SCxLQUFLLEdBQUcxQyxXQUFXLENBQUMyQyxNQUFNLENBQUMsSUFBSTcySCxVQUFVLENBQUM4VixNQUFNLEVBQUVqUixNQUFNLEVBQUVvdkgsU0FBUyxDQUFDbjBILE1BQU0sQ0FBQyxDQUFDO0lBQ2xGK0UsTUFBTSxJQUFJb3ZILFNBQVMsQ0FBQ24wSCxNQUFNO0lBQzFCLElBQUk4MkgsS0FBSyxLQUFLM0MsU0FBUyxFQUFFO0FBQ3ZCLFlBQU0sSUFBSW4ySCxLQUFLLENBQUMsQ0FBMkNzNEgsaURBQU8sRUFBRSxDQUFDO0FBQ3ZFO0lBRUEsTUFBTVUsT0FBTyxHQUFHMXlDLElBQUksQ0FBQzJ5QyxRQUFRLENBQUNseUgsTUFBTSxFQUFFLElBQUksQ0FBQztBQUMzQ0EsVUFBTSxJQUFJLENBQUM7QUFDWCxRQUNFaXlILE9BQU8sS0FBSyxDQUFDLElBQ2JBLE9BQU8sS0FBSyxDQUFDLElBQ2JBLE9BQU8sS0FBSyxDQUFDLElBQ2JBLE9BQU8sS0FBSyxDQUFDLElBQ2JBLE9BQU8sS0FBSyxDQUFDLEVBQ2I7QUFDQSxZQUFNLElBQUloNUgsS0FBSyxDQUFDLENBQThDZzVILG9EQUFPLEVBQUUsQ0FBQztBQUMxRTtJQUVBLE1BQU1FLFNBQVMsR0FBRzV5QyxJQUFJLENBQUMyeUMsUUFBUSxDQUFDbHlILE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDN0NBLFVBQU0sSUFBSSxDQUFDO0FBQ1gsVUFBTTA2QixLQUFLLEdBQUcsSUFBSXNOLEtBQUssRUFBRTtJQUN6QnROLEtBQUssQ0FBQzNuQyxJQUFJLEdBQUd3K0gsT0FBTztJQUVwQixLQUFLLElBQUlqZ0gsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNmdILFNBQVMsRUFBRTdnSCxDQUFDLEVBQUUsRUFBRTtNQUNsQyxNQUFNOGdILFNBQVMsR0FBRzd5QyxJQUFJLENBQUMyeUMsUUFBUSxDQUFDbHlILE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDN0NBLFlBQU0sSUFBSSxDQUFDO01BQ1gsTUFBTXF5SCxNQUFNLEdBQUc5eUMsSUFBSSxDQUFDMnlDLFFBQVEsQ0FBQ2x5SCxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQzFDQSxZQUFNLElBQUksQ0FBQztBQUNYLFlBQU1zeUgsT0FBTyxHQUFHTCxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQ00sY0FBYyxDQUFDdGhILE1BQU0sRUFBRXN1RSxJQUFJLEVBQUV2L0UsTUFBTSxDQUFDLEdBQUcsSUFBSTtBQUMvRSxVQUFJaXlILE9BQU8sSUFBSSxDQUFDLEVBQUVqeUgsTUFBTSxJQUFJLENBQUFnUCxFQUFBLEdBQUFzakgsT0FBTyxLQUFQLFFBQUFBLE9BQU8sS0FBUCxrQkFBQUEsT0FBTyxDQUFFRSxlQUFlLE1BQUksUUFBQXhqSCxFQUFBLGNBQUFBLEVBQUEsSUFBQztBQUN6RCxZQUFNeWpILE9BQU8sR0FBR1IsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUNNLGNBQWMsQ0FBQ3RoSCxNQUFNLEVBQUVzdUUsSUFBSSxFQUFFdi9FLE1BQU0sQ0FBQyxHQUFHLElBQUk7QUFDL0UsVUFBSWl5SCxPQUFPLElBQUksQ0FBQyxFQUFFanlILE1BQU0sSUFBSSxDQUFBd1QsRUFBQSxHQUFBaS9HLE9BQU8sS0FBUCxRQUFBQSxPQUFPLEtBQVAsa0JBQUFBLE9BQU8sQ0FBRUQsZUFBZSxNQUFJLFFBQUFoL0csRUFBQSxjQUFBQSxFQUFBLElBQUM7QUFDekQsWUFBTWsvRyxPQUFPLEdBQUdULE9BQU8sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDTSxjQUFjLENBQUN0aEgsTUFBTSxFQUFFc3VFLElBQUksRUFBRXYvRSxNQUFNLENBQUMsR0FBRyxJQUFJO0FBQy9FLFVBQUlpeUgsT0FBTyxJQUFJLENBQUMsRUFBRWp5SCxNQUFNLElBQUksQ0FBQW9VLEVBQUEsR0FBQXMrRyxPQUFPLEtBQVAsUUFBQUEsT0FBTyxLQUFQLGtCQUFBQSxPQUFPLENBQUVGLGVBQWUsTUFBSSxRQUFBcCtHLEVBQUEsY0FBQUEsRUFBQSxJQUFDO0FBQ3pELFlBQU11K0csc0JBQXNCLEdBQzFCVixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQ00sY0FBYyxDQUFDdGhILE1BQU0sRUFBRXN1RSxJQUFJLEVBQUV2L0UsTUFBTSxDQUFDLEdBQUcsSUFBSTtBQUNqRSxVQUFJaXlILE9BQU8sSUFBSSxDQUFDLEVBQUVqeUgsTUFBTSxJQUFJLENBQUFxVSxFQUFBLEdBQUFzK0csc0JBQXNCLEtBQXRCLFFBQUFBLHNCQUFzQixLQUF0QixrQkFBQUEsc0JBQXNCLENBQUVILGVBQWUsTUFBSSxRQUFBbitHLEVBQUEsY0FBQUEsRUFBQSxJQUFDO0FBQ3hFLFlBQU11K0csc0JBQXNCLEdBQzFCWCxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQ00sY0FBYyxDQUFDdGhILE1BQU0sRUFBRXN1RSxJQUFJLEVBQUV2L0UsTUFBTSxDQUFDLEdBQUcsSUFBSTtBQUNqRSxVQUFJaXlILE9BQU8sSUFBSSxDQUFDLEVBQUVqeUgsTUFBTSxJQUFJLENBQUFtc0MsRUFBQSxHQUFBeW1GLHNCQUFzQixLQUF0QixRQUFBQSxzQkFBc0IsS0FBdEIsa0JBQUFBLHNCQUFzQixDQUFFSixlQUFlLE1BQUksUUFBQXJtRixFQUFBLGNBQUFBLEVBQUEsSUFBQztBQUN4RSxZQUFNMG1GLHNCQUFzQixHQUMxQlosT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUNNLGNBQWMsQ0FBQ3RoSCxNQUFNLEVBQUVzdUUsSUFBSSxFQUFFdi9FLE1BQU0sQ0FBQyxHQUFHLElBQUk7QUFDakUsVUFBSWl5SCxPQUFPLElBQUksQ0FBQyxFQUFFanlILE1BQU0sSUFBSSxDQUFBb3NDLEVBQUEsR0FBQXltRixzQkFBc0IsS0FBdEIsUUFBQUEsc0JBQXNCLEtBQXRCLGtCQUFBQSxzQkFBc0IsQ0FBRUwsZUFBZSxNQUFJLFFBQUFwbUYsRUFBQSxjQUFBQSxFQUFBLElBQUM7QUFDeEUsWUFBTTBtRixVQUFVLEdBQUdiLE9BQU8sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDTSxjQUFjLENBQUN0aEgsTUFBTSxFQUFFc3VFLElBQUksRUFBRXYvRSxNQUFNLENBQUMsR0FBRyxJQUFJO0FBQ2xGLFVBQUlpeUgsT0FBTyxJQUFJLENBQUMsRUFBRWp5SCxNQUFNLElBQUksQ0FBQXFzQyxFQUFBLEdBQUF5bUYsVUFBVSxLQUFWLFFBQUFBLFVBQVUsS0FBVixrQkFBQUEsVUFBVSxDQUFFTixlQUFlLE1BQUksUUFBQW5tRixFQUFBLGNBQUFBLEVBQUEsSUFBQztBQUM1RCxZQUFNMG1GLDRCQUE0QixHQUNoQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUNNLGNBQWMsQ0FBQ3RoSCxNQUFNLEVBQUVzdUUsSUFBSSxFQUFFdi9FLE1BQU0sQ0FBQyxHQUFHLElBQUk7TUFDakUsSUFBSWl5SCxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ2hCanlILGNBQU0sSUFBSSxDQUFBdXNDLEVBQUEsR0FBQXdtRiw0QkFBNEIsS0FBNUIsUUFBQUEsNEJBQTRCLEtBQTVCLGtCQUFBQSw0QkFBNEIsQ0FBRVAsZUFBZSxNQUFJLFFBQUFqbUYsRUFBQSxjQUFBQSxFQUFBLElBQUM7QUFDOUQ7TUFDQSxNQUFNMjFFLFdBQVcsR0FBRzNpQyxJQUFJLENBQUMyeUMsUUFBUSxDQUFDbHlILE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDL0NBLFlBQU0sSUFBSSxDQUFDO01BQ1gsTUFBTThzQixVQUFVLEdBQUd5eUQsSUFBSSxDQUFDMnlDLFFBQVEsQ0FBQ2x5SCxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQzlDQSxZQUFNLElBQUksQ0FBQztNQUVYLE1BQU1uTCxLQUFLLEdBQUcsQ0FDWjBxRixJQUFJLENBQUN5ekMsVUFBVSxDQUFDaHpILE1BQU0sRUFBRSxJQUFJLENBQUMsRUFDN0J1L0UsSUFBSSxDQUFDeXpDLFVBQVUsQ0FBQ2h6SCxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUNqQ3UvRSxJQUFJLENBQUN5ekMsVUFBVSxDQUFDaHpILE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQ2pDdS9FLElBQUksQ0FBQ3l6QyxVQUFVLENBQUNoekgsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FDbkM7QUFDREEsWUFBTSxJQUFJLEVBQUU7QUFFWixZQUFNK2QsU0FBUyxHQUFHLElBQUlsaEIsS0FBSyxDQUFTLEVBQUUsQ0FBQztNQUN2QyxLQUFLLElBQUk0VSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsRUFBRSxFQUFFQSxDQUFDLEVBQUUsRUFBRTtRQUMzQnNNLFNBQVMsQ0FBQ3RNLENBQUMsQ0FBQyxHQUFHOHRFLElBQUksQ0FBQ3l6QyxVQUFVLENBQUNoekgsTUFBTSxFQUFFLElBQUksQ0FBQztBQUM1Q0EsY0FBTSxJQUFJLENBQUM7QUFDYjtBQUVBLFlBQU1rbkIsU0FBUyxHQUFHLElBQUluVixZQUFZLENBQ2hDLElBQUlBLFlBQVksQ0FBQ2QsTUFBTSxFQUFFalIsTUFBTSxFQUFFa2lILFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FDbEQ7QUFDRGxpSCxZQUFNLElBQUlraUgsV0FBVyxHQUFHLENBQUMsR0FBR253RyxZQUFZLENBQUNraEgsaUJBQWlCO0FBQzFELFlBQU1waUcsT0FBTyxHQUFHLElBQUlwZSxXQUFXLENBQUMsSUFBSUEsV0FBVyxDQUFDeEIsTUFBTSxFQUFFalIsTUFBTSxFQUFFOHNCLFVBQVUsQ0FBQyxDQUFDO0FBQzVFOXNCLFlBQU0sSUFBSThzQixVQUFVLEdBQUdyYSxXQUFXLENBQUN3Z0gsaUJBQWlCO0FBRXBELFlBQU10OUcsUUFBUSxHQUFHLElBQUlzYixjQUFjLEVBQUU7QUFDckN0YixjQUFRLENBQUN5USxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUlDLHNCQUFzQixDQUFDYSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDM0V2UixRQUFRLENBQUN3YixRQUFRLENBQUMsSUFBSUMscUJBQXFCLENBQUNQLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztNQUV4RCxNQUFNN0QsSUFBSSxHQUFHLElBQUk5UixJQUFJLENBQ25CdkYsUUFBUSxFQUNSLElBQUl6UCxpQkFBaUIsQ0FBQztBQUNwQnJSLGFBQUssRUFBRSxJQUFJeUcsS0FBSyxDQUFDekcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5Q21RLGVBQU8sRUFBRW5RLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakI0USxtQkFBVyxFQUFFNVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekJ5USxZQUFJLEVBQUVrUjtBQUNQLFFBQUMsQ0FDSDtNQUNEd1csSUFBSSxDQUFDcUMsSUFBSSxHQUFHLEdBQUdraUcsT0FBTyxDQUFJYSxZQUFTLENBQUlDLFNBQU0sQ0FBRTtBQUMvQ3JsRyxVQUFJLENBQUNqNkIsSUFBSSxHQUFHLFFBQVFzL0gsTUFBTSxDQUFFO01BQzVCLE1BQU1hLGNBQWMsR0FBRyxDQUFBNW1GLEVBQUEsR0FBQXFtRixzQkFBc0IsS0FBdEIsUUFBQUEsc0JBQXNCLHVCQUF0QkEsc0JBQXNCLENBQUUzOEgsS0FBSyxjQUFBczJDLEVBQUEsY0FBQUEsRUFBQSxHQUFJZ21GLE9BQU8sS0FBUCxRQUFBQSxPQUFPLHVCQUFQQSxPQUFPLENBQUV0OEgsS0FBSztNQUN0RSxNQUFNbTlILG9CQUFvQixHQUN4QixDQUFBem1GLEVBQUEsR0FBQXFtRiw0QkFBNEIsS0FBNUIsUUFBQUEsNEJBQTRCLHVCQUE1QkEsNEJBQTRCLENBQUUvOEgsS0FBSyxjQUFBMDJDLEVBQUEsY0FBQUEsRUFBQSxHQUFJb21GLFVBQVUsS0FBVixRQUFBQSxVQUFVLHVCQUFWQSxVQUFVLENBQUU5OEgsS0FBSztBQUMxRCxZQUFNbzlILGVBQWUsR0FBR0Qsb0JBQW9CLGFBQXBCQSxvQkFBb0IsS0FBcEIsU0FBQUEsb0JBQW9CLEdBQUlELGNBQWM7TUFDOUQsTUFBTUcsY0FBYyxHQUFHLENBQUE1bUYsRUFBQSxHQUFBbW1GLHNCQUFzQixLQUF0QixRQUFBQSxzQkFBc0IsdUJBQXRCQSxzQkFBc0IsQ0FBRTU4SCxLQUFLLGNBQUF5MkMsRUFBQSxjQUFBQSxFQUFBLEdBQUlnbUYsT0FBTyxLQUFQLFFBQUFBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXo4SCxLQUFLO01BQ3RFLE1BQU1zOUgsY0FBYyxHQUFHLENBQUE3akYsRUFBQSxHQUFBb2pGLHNCQUFzQixLQUF0QixRQUFBQSxzQkFBc0IsdUJBQXRCQSxzQkFBc0IsQ0FBRTc4SCxLQUFLLGNBQUF5NUMsRUFBQSxjQUFBQSxFQUFBLEdBQUlpakYsT0FBTyxLQUFQLFFBQUFBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTE4SCxLQUFLO0FBQ3RFLFlBQU11OUgsZUFBZSxHQUFHLElBQUksQ0FBQ0Msb0JBQW9CLENBQUNKLGVBQWUsQ0FBQztBQUNsRUcscUJBQWUsQ0FBQ3RnSSxJQUFJLENBQUMrNUIsSUFBSSxDQUFDcUMsSUFBSSxDQUFDO01BQy9CckMsSUFBSSxDQUFDdHJCLFFBQVEsR0FBRztRQUNkeE4sRUFBRSxFQUFFODRCLElBQUksQ0FBQ3FDLElBQUk7UUFDYnQ4QixJQUFJLEVBQUVpNkIsSUFBSSxDQUFDajZCLElBQUk7UUFDZnEvSCxTQUFTO1FBQ1RDLE1BQU07QUFDTkMsZUFBTyxFQUFFQSxPQUFPLGFBQVBBLE9BQU8sS0FBUCxrQkFBQUEsT0FBTyxDQUFFdDhILEtBQUs7QUFDdkJ5OUgsbUJBQVcsRUFBRW5CLE9BQU8sYUFBUEEsT0FBTyxLQUFQLGtCQUFBQSxPQUFPLENBQUV0OEgsS0FBSztBQUMzQjA5SCxnQkFBUSxFQUFFcEIsT0FBTyxhQUFQQSxPQUFPLEtBQVAsa0JBQUFBLE9BQU8sQ0FBRXQ4SCxLQUFLO0FBQ3hCODhILGtCQUFVLEVBQUVBLFVBQVUsYUFBVkEsVUFBVSxLQUFWLGtCQUFBQSxVQUFVLENBQUU5OEgsS0FBSztBQUM3QmltQixZQUFJLEVBQUVtM0csZUFBZTtBQUNyQjlZLHFCQUFhLEVBQUU4WSxlQUFlO0FBQzlCWCxlQUFPLEVBQUVBLE9BQU8sYUFBUEEsT0FBTyxLQUFQLGtCQUFBQSxPQUFPLENBQUV6OEgsS0FBSztBQUN2QjA4SCxlQUFPLEVBQUVBLE9BQU8sYUFBUEEsT0FBTyxLQUFQLGtCQUFBQSxPQUFPLENBQUUxOEgsS0FBSztRQUN2Qms5SCxjQUFjO1FBQ2RDLG9CQUFvQjtRQUNwQkUsY0FBYztRQUNkQyxjQUFjO0FBQ2RYLDhCQUFzQixFQUFFQSxzQkFBc0IsYUFBdEJBLHNCQUFzQixLQUF0QixrQkFBQUEsc0JBQXNCLENBQUUzOEgsS0FBSztBQUNyRDQ4SCw4QkFBc0IsRUFBRUEsc0JBQXNCLGFBQXRCQSxzQkFBc0IsS0FBdEIsa0JBQUFBLHNCQUFzQixDQUFFNThILEtBQUs7QUFDckQ2OEgsOEJBQXNCLEVBQUVBLHNCQUFzQixhQUF0QkEsc0JBQXNCLEtBQXRCLGtCQUFBQSxzQkFBc0IsQ0FBRTc4SCxLQUFLO0FBQ3JEKzhILG9DQUE0QixFQUFFQSw0QkFBNEIsYUFBNUJBLDRCQUE0QixLQUE1QixrQkFBQUEsNEJBQTRCLENBQUUvOEgsS0FBSztBQUNqRXU3SDtPQUNEO0FBQ0QsVUFBSSxDQUFDb0Msa0JBQWtCLENBQUMzbUcsSUFBSSxFQUFFdW1HLGVBQWUsQ0FBQztNQUM5QyxJQUFJLENBQUNJLGtCQUFrQixDQUFDM21HLElBQUksQ0FBQ3RyQixRQUFRLEVBQUU2eEgsZUFBZSxDQUFDO01BQ3ZELE1BQU1LLFlBQVksR0FBRzVtRyxJQWtCcEI7TUFDRDRtRyxZQUFZLENBQUN0WixhQUFhLEdBQUc4WSxlQUFlO0FBQzVDUSxrQkFBWSxDQUFDdEIsT0FBTyxHQUFHQSxPQUFPLGFBQVBBLE9BQU8sS0FBUCxrQkFBQUEsT0FBTyxDQUFFdDhILEtBQUs7QUFDckM0OUgsa0JBQVksQ0FBQ0gsV0FBVyxHQUFHbkIsT0FBTyxhQUFQQSxPQUFPLEtBQVAsa0JBQUFBLE9BQU8sQ0FBRXQ4SCxLQUFLO0FBQ3pDNDlILGtCQUFZLENBQUNkLFVBQVUsR0FBR0EsVUFBVSxhQUFWQSxVQUFVLEtBQVYsa0JBQUFBLFVBQVUsQ0FBRTk4SCxLQUFLO01BQzNDNDlILFlBQVksQ0FBQzMzRyxJQUFJLEdBQUdtM0csZUFBZTtBQUNuQ1Esa0JBQVksQ0FBQ25CLE9BQU8sR0FBR0EsT0FBTyxhQUFQQSxPQUFPLEtBQVAsa0JBQUFBLE9BQU8sQ0FBRXo4SCxLQUFLO0FBQ3JDNDlILGtCQUFZLENBQUNsQixPQUFPLEdBQUdBLE9BQU8sYUFBUEEsT0FBTyxLQUFQLGtCQUFBQSxPQUFPLENBQUUxOEgsS0FBSztNQUNyQzQ5SCxZQUFZLENBQUNWLGNBQWMsR0FBR0EsY0FBYztNQUM1Q1UsWUFBWSxDQUFDVCxvQkFBb0IsR0FBR0Esb0JBQW9CO01BQ3hEUyxZQUFZLENBQUNQLGNBQWMsR0FBR0EsY0FBYztNQUM1Q08sWUFBWSxDQUFDTixjQUFjLEdBQUdBLGNBQWM7QUFDNUNNLGtCQUFZLENBQUNqQixzQkFBc0IsR0FBR0Esc0JBQXNCLGFBQXRCQSxzQkFBc0IsS0FBdEIsa0JBQUFBLHNCQUFzQixDQUFFMzhILEtBQUs7QUFDbkU0OUgsa0JBQVksQ0FBQ2hCLHNCQUFzQixHQUFHQSxzQkFBc0IsYUFBdEJBLHNCQUFzQixLQUF0QixrQkFBQUEsc0JBQXNCLENBQUU1OEgsS0FBSztBQUNuRTQ5SCxrQkFBWSxDQUFDZixzQkFBc0IsR0FBR0Esc0JBQXNCLGFBQXRCQSxzQkFBc0IsS0FBdEIsa0JBQUFBLHNCQUFzQixDQUFFNzhILEtBQUs7QUFDbkU0OUgsa0JBQVksQ0FBQ2IsNEJBQTRCLEdBQUdBLDRCQUE0QixhQUE1QkEsNEJBQTRCLEtBQTVCLGtCQUFBQSw0QkFBNEIsQ0FBRS84SCxLQUFLO01BQy9FNDlILFlBQVksQ0FBQ3hCLFNBQVMsR0FBR0EsU0FBUztNQUNsQ3dCLFlBQVksQ0FBQ3ZCLE1BQU0sR0FBR0EsTUFBTTtBQUM1QnJsRyxVQUFJLENBQUM3RSxNQUFNLENBQUNucEIsSUFBSSxDQUFDLElBQUloSCxPQUFPLEVBQUUsQ0FBQzZ4QixTQUFTLENBQUM5TCxTQUFTLENBQUMsQ0FBQztNQUNwRGlQLElBQUksQ0FBQ29QLGdCQUFnQixHQUFHLEtBQUs7QUFDN0IxQixXQUFLLENBQUNwUixHQUFHLENBQUMwRCxJQUFJLENBQUM7QUFDakI7QUFFQSxXQUFPME4sS0FBSztBQUNkO0VBRVE4NEYsb0JBQW9CQSxDQUFDTixjQUF1QjtBQUNsRCxRQUFJLENBQUNBLGNBQWMsRUFBRSxPQUFPLEVBQUU7SUFDOUIsSUFBSVcsT0FBTyxHQUFHLElBQUksQ0FBQ2hFLGlCQUFpQixDQUFDajVILEdBQUcsQ0FBQ3M4SCxjQUFjLENBQUM7SUFDeEQsSUFBSSxDQUFDVyxPQUFPLEVBQUU7QUFDWkEsYUFBTyxHQUFHLEVBQUU7TUFDWixJQUFJLENBQUNoRSxpQkFBaUIsQ0FBQ2p4SCxHQUFHLENBQUNzMEgsY0FBYyxFQUFFVyxPQUFPLENBQUM7QUFDckQ7QUFDQSxXQUFPQSxPQUFPO0FBQ2hCO0FBRVFGLG9CQUFrQkEsQ0FBQ3ZySCxNQUFjLEVBQUVtckgsZUFBeUI7QUFDbEVwOEgsVUFBTSxDQUFDZ1EsY0FBYyxDQUFDaUIsTUFBTSxFQUFFLGlCQUFpQixFQUFFO0FBQy9DcFMsV0FBSyxFQUFFdTlILGVBQWU7QUFDdEJqN0QsZ0JBQVUsRUFBRSxLQUFLO0FBQ2pCQyxrQkFBWSxFQUFFO0FBQ2YsTUFBQztBQUNKO0FBRVFnNkQsZ0JBQWNBLENBQ3BCdGhILE1BQW1CLEVBQ25Cc3VFLElBQWMsRUFDZHYvRSxNQUFjO0lBRWQsTUFBTXlpSCxVQUFVLEdBQUdsakMsSUFBSSxDQUFDMnlDLFFBQVEsQ0FBQ2x5SCxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQzlDLFFBQUl5aUgsVUFBVSxJQUFJLENBQUMsRUFBRSxPQUFPO0FBQUUrUCxxQkFBZSxFQUFFO0tBQUc7QUFDbEQsVUFBTXg4SCxLQUFLLEdBQUdxNUgsV0FBVyxDQUFDMkMsTUFBTSxDQUFDLElBQUk3MkgsVUFBVSxDQUFDOFYsTUFBTSxFQUFFalIsTUFBTSxHQUFHLENBQUMsRUFBRXlpSCxVQUFVLENBQUMsQ0FBQztJQUNoRixPQUFPO01BQ0x6c0gsS0FBSztNQUNMdzhILGVBQWUsRUFBRSxDQUFDLEdBQUcvUCxVQUFVLEdBQUcsSUFBSSxDQUFDcVIsa0JBQWtCLENBQUNyUixVQUFVO0tBQ3JFO0FBQ0g7RUFFUXFSLGtCQUFrQkEsQ0FBQ3JSLFVBQWtCO0FBQzNDLFdBQU8sQ0FBQyxDQUFDLEdBQUlBLFVBQVUsR0FBRyxDQUFFLElBQUksQ0FBQztBQUNuQztBQUVRME4sMkJBQXlCQSxDQUFDNEQsVUFBa0IsRUFBRWwyQixZQUFvQjtBQUN4RSxRQUFJOHJCLGVBQXdCO0lBQzVCLElBQUk7QUFDRkEscUJBQWUsR0FBSUMsVUFBc0MsQ0FBQ21LLFVBQVUsQ0FBQztBQUNyRXBLLHFCQUFlLEtBQWYsUUFBQUEsZUFBZSxLQUFmLFNBQUFBLGVBQWUsR0FBZkEsZUFBZSxHQUFLakQsWUFBWSxDQUFDQyxPQUFPLENBQUNvTixVQUFVLENBQUM7QUFDdEQsS0FBQyxDQUFDLE1BQU07QUFDTjtBQUFBO0lBR0YsTUFBTS9KLFdBQVcsR0FBR3huRixNQUFNLENBQUNrUyxRQUFRLENBQUMsR0FBR2kxRSxlQUFlLGFBQWZBLGVBQWUsY0FBZkEsZUFBZSxHQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNuRSxXQUFPbm5GLE1BQU0sQ0FBQzJ6QyxRQUFRLENBQUM2ekMsV0FBVyxDQUFDLElBQUlBLFdBQVcsR0FBRyxDQUFDLEdBQ2xEQSxXQUFXLEdBQ1huc0IsWUFBWTtBQUNsQjtBQUNEOztBQ3ZhSyxNQUFPbTJCLFNBQVUsU0FBUXBXLE1BQU07RUFNbkMsSUFBV3g2QixRQUFRQSxHQUFBO0lBQ2pCLE9BQU8sSUFBSSxDQUFDMDZCLFNBQVM7QUFDdkI7RUFFQSxJQUFXK0gsUUFBUUEsR0FBQTtJQUNqQixPQUFPLElBQUksQ0FBQ0MsVUFBVTtBQUN4QjtBQUVBbHpILGNBQW1CbXpILFVBQXFCLEVBQUUzaUMsUUFBZ0IsRUFBRXk2QixZQUFzQjtBQUNoRixTQUFLLENBQUN6NkIsUUFBUSxFQUFFeTZCLFlBQVksQ0FBQztJQVhyQixJQUFVLENBQUFpSSxVQUFBLEdBQVksS0FBSztJQVluQyxJQUFJLENBQUMxbkcsSUFBSSxHQUFHMm5HLFVBQVU7QUFDdEIsUUFBSSxDQUFDa08sVUFBVSxHQUFHLElBQUlDLFNBQVMsRUFBRTtJQUNqQyxJQUFJLENBQUMzTixTQUFTLEdBQUcsSUFBSStILFlBQVksQ0FBQyxJQUFJLENBQUNsd0csSUFBSSxDQUFDO0FBQzlDO0FBRU9ybEIsTUFBSUEsR0FBQTtBQUNULFdBQU8sSUFBSUosT0FBTyxDQUFVLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFJO0FBQzlDLFVBQUlGLE9BQU8sQ0FBTyxDQUFDdzdILFdBQVcsRUFBRUMsVUFBVSxLQUFJO0FBQzVDLFlBQUksQ0FBQyxJQUFJLENBQUNyVyxhQUFhLEVBQUU7VUFDdkIsSUFBSSxDQUFDa1csVUFBVSxDQUFDbDdILElBQUksQ0FDbEIsSUFBSSxDQUFDK2tILFNBQVMsRUFDYnBqRixLQUFZLElBQUk7QUFDZixnQkFBSSxDQUFDNnJGLFNBQVMsQ0FDWHhtRCxRQUFRLENBQUMsSUFBSSxDQUFDKzlDLFNBQVMsRUFBRXBqRixLQUFLLEVBQUUsTUFBTyxFQUFDLENBQUMsQ0FDekM0bkQsSUFBSSxDQUFDLE1BQUs7QUFDVDZ4Qyx5QkFBVyxFQUFFO0FBQ2YsYUFBQyxDQUFDLENBQ0Q1eEMsS0FBSyxDQUFDLE1BQUs7QUFDVjZ4Qyx3QkFBVSxDQUFDLElBQUluN0gsS0FBSyxFQUFFLENBQUM7QUFDekIsYUFBQyxDQUFDO1dBQ0wsRUFDQTgrQyxLQUFvQixJQUFJO0FBQ3ZCLGdCQUFJLENBQUN6a0QsSUFBSSxDQUFDcXFILFdBQVcsQ0FBQ2tLLFlBQVksRUFBRTtjQUNsQ0MsUUFBUSxFQUFFL3ZFLEtBQUssQ0FBQ3d3RSxNQUFNLElBQUl4d0UsS0FBSyxDQUFDd3ZFLEtBQUssR0FBRyxDQUFDLENBQUM7Y0FDMUNyekgsRUFBRSxFQUFFLElBQUksQ0FBQzRwSDtBQUNWLGNBQUM7V0FDSCxFQUNBL2xFLEtBQWlCLElBQUk7QUFDcEJ0aEQsa0JBQU0sQ0FBQ3VDLEtBQUssQ0FBQyxlQUFlLElBQUksQ0FBQzhrSCxTQUFTLGdCQUFnQi9sRSxLQUFLLENBQUMvK0MsS0FBSyxFQUFFLENBQUM7QUFDeEVvN0gsc0JBQVUsQ0FBQyxJQUFJbjdILEtBQUssRUFBRSxDQUFDO0FBQ3pCLFdBQUMsQ0FDRjtBQUNILFNBQUMsTUFBTTtBQUNMLGNBQUksQ0FBQ3N0SCxTQUFTLENBQ1h4bUQsUUFBUSxDQUNQLElBQUksQ0FBQys5QyxTQUFTLEVBQ2QsSUFBSSxDQUFDbVcsVUFBVSxDQUFDaHhHLEtBQUssQ0FBQyxJQUFJLENBQUM4NkYsYUFBdUIsQ0FBQyxFQUNuRCxNQUFLLEVBQUcsQ0FDVCxDQUNBejdCLElBQUksQ0FBQyxNQUFNNnhDLFdBQVcsRUFBRSxDQUFDLENBQ3pCNXhDLEtBQUssQ0FBRWd1QyxHQUFHLElBQUk7WUFDYjk1SCxNQUFNLENBQUN1QyxLQUFLLENBQUMsQ0FBZSxrQkFBSSxDQUFDOGtILFNBQVMsZ0JBQWdCeVMsR0FBRyxFQUFFLENBQUM7QUFDaEU2RCxzQkFBVSxDQUFDLElBQUluN0gsS0FBSyxFQUFFLENBQUM7QUFDekIsV0FBQyxDQUFDO0FBQ047QUFDRixPQUFDLENBQUMsQ0FDQ3FwRixJQUFJLENBQUMsWUFBVztBQUNmLGNBQU1nQixFQUFFLEdBQUdubkYsV0FBVyxDQUFDRCxHQUFHLEVBQUU7UUFDNUIsTUFBTTIzQyxVQUFVLEdBQUcsSUFBSSxDQUFDejFCLElBQUksQ0FBQ2dGLGFBQWEsQ0FBQyxJQUFJLENBQUMwNkYsU0FBUyxDQUFDO0FBQzFELFlBQUlqcUUsVUFBVSxFQUFFO1VBQ2QsTUFBTW5pQixHQUFHLEdBQUcsTUFBTW1pQixVQUFVLENBQUNqMUIsZUFBZSxDQUFDLElBQUlzd0csb0JBQW9CLEVBQUUsQ0FBQztBQUN4RXo0SCxnQkFBTSxDQUFDeTZFLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRS8wRSxXQUFXLENBQUNELEdBQUcsRUFBRSxHQUFHb25GLEVBQUUsQ0FBQztVQUN6RCxJQUFJLENBQUN3aUMsVUFBVSxHQUFHLElBQUk7VUFDdEJsdEgsT0FBTyxDQUFDODRCLEdBQUcsQ0FBQztBQUNkLFNBQUMsTUFBTTtVQUNMajdCLE1BQU0sQ0FBQ3VDLEtBQUssQ0FBQyxpQ0FBaUMsSUFBSSxDQUFDOGtILFNBQVMsRUFBRSxDQUFDO0FBQy9EamxILGdCQUFNLENBQUMsSUFBSUksS0FBSyxFQUFFLENBQUM7QUFDckI7QUFDRixPQUFDLENBQUMsQ0FDRHNwRixLQUFLLENBQUMsTUFBSztRQUNWOXJGLE1BQU0sQ0FBQ3VDLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxDQUFDOGtILFNBQVMsRUFBRSxDQUFDO0FBQ2hEamxILGNBQU0sQ0FBQyxJQUFJSSxLQUFLLEVBQUUsQ0FBQztBQUNyQixPQUFDLENBQUM7QUFDTixLQUFDLENBQUM7QUFDSjtBQUVPcWxCLFFBQU1BLEdBQUE7SUFDWCxJQUFJLENBQUN3bkcsVUFBVSxHQUFHLEtBQUs7QUFDekI7QUFFT255SCxTQUFPQSxHQUFBO0lBQ1osS0FBSyxDQUFDQSxPQUFPLEVBQUU7QUFDakI7QUFDRDs7QUNqR00sTUFBTTBnSSxtQkFBbUIsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBQN0M7O0FDMVBNLE1BQU1DLG1CQUFtQixhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1GN0M7O0FDN0VELE1BQU1DLHVCQUF3QixTQUFRam9ILG9CQUFvQjtFQUN4RCxJQUFjekssYUFBYUEsR0FBQTtBQUN6QixXQUFPd3lILG1CQUFtQjtBQUM1QjtFQUVBLElBQWN2eUgsZUFBZUEsR0FBQTtBQUMzQixXQUFPd3lILG1CQUFtQjtBQUM1QjtFQUVBLElBQWN2eUgsV0FBV0EsR0FBQTtJQUN2QixPQUFPO01BQUUsR0FBRyxLQUFLLENBQUNBLFdBQVc7QUFBRXl5SCxrQkFBWSxFQUFFLElBQUk7QUFBRUMsYUFBTyxFQUFFO0tBQU07QUFDcEU7QUFFQTdoSSxjQUFZK1UsVUFBdUMsRUFBRS9GLE9BQU8sR0FBRyxFQUFFO0FBQy9ELFNBQUssQ0FBQytGLFVBQVUsRUFBRS9GLE9BQU8sQ0FBQztBQUM1QjtFQUVBLElBQVc0eUgsWUFBWUEsQ0FBQ3grSCxLQUFhO0FBQ25DLFFBQUksQ0FBQzBMLFFBQVEsQ0FBQzh5SCxZQUFZLENBQUN4K0gsS0FBSyxHQUFHQSxLQUFLO0lBQ3hDLElBQUksQ0FBQ3dELFdBQVcsR0FBRyxJQUFJO0FBQ3pCO0VBRUEsSUFBV2s3SCxhQUFhQSxDQUFDMStILEtBQXFCO0FBQzVDLFFBQUksQ0FBQyxJQUFJLENBQUM0TCxPQUFPLEVBQUU7QUFFbkIsUUFBSTVMLEtBQUssRUFBRTtBQUNULFVBQUksQ0FBQzRMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7QUFDbkMsVUFBSSxDQUFDRixRQUFRLENBQUMreUgsT0FBTyxDQUFDeitILEtBQUssR0FBR0EsS0FBSztBQUNyQyxLQUFDLE1BQU07QUFDTCxhQUFPLElBQUksQ0FBQzRMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUNyQyxVQUFJLENBQUNGLFFBQVEsQ0FBQyt5SCxPQUFPLENBQUN6K0gsS0FBSyxHQUFHLElBQUk7QUFDcEM7SUFDQSxJQUFJLENBQUN3RCxXQUFXLEdBQUcsSUFBSTtBQUN6QjtBQUVPd0ssVUFBUUEsQ0FBQ0MsSUFBYyxFQUFFQyxFQUFZO0FBQzFDLFNBQUssQ0FBQ0YsUUFBUSxDQUFDQyxJQUFJLEVBQUVDLEVBQUUsQ0FBQztBQUN0QkEsTUFBOEIsQ0FBQ3hDLFFBQVEsQ0FBQyt5SCxPQUFPLENBQUN6K0gsS0FBSyxHQUNyRGlPLElBQ0QsQ0FBQ3ZDLFFBQVEsQ0FBQyt5SCxPQUFPLENBQUN6K0gsS0FBSztBQUMxQjtBQUNEOztBQ3RCTSxNQUFNMitILDBCQUEwQixHQUFrQztBQUN2RUgsY0FBWSxFQUFFLEdBQUc7QUFDakJFLGVBQWEsRUFBRSxJQUFJO0FBQ25CMXZILFNBQU8sRUFBRTtDQUNWO0FBRUssTUFBTzR2SCxZQUFhLFNBQVE1cEUsWUFBWTtFQVM1QyxJQUFJNVosV0FBV0EsR0FBQTtBQUNiLFdBQU8sbUJBQW1CO0FBQzVCO0FBRUE7QUFDQTtBQUNBO0VBRUEsSUFBSS9MLHFCQUFxQkEsR0FBQTtJQUN2QixPQUFPLElBQUksQ0FBQ3d2RixnQkFBZ0I7QUFDOUI7RUFFQSxJQUFXaHZILE9BQU9BLENBQUM3UCxLQUEwQjtJQUMzQyxLQUFLLENBQUM2UCxPQUFPLEdBQUc3UCxLQUFLO0FBQ3JCLFFBQUksQ0FBQzYrSCxnQkFBZ0IsQ0FBQzErSCxRQUFRLEdBQzVCLElBQUksQ0FBQ3k2QyxRQUFRLENBQUM1ckMsT0FBTyxHQUFHLENBQUMsR0FBRzh2SCxjQUFjLEdBQUcxK0gsVUFBVTtBQUN6RCxRQUFJLENBQUN5K0gsZ0JBQWdCLENBQUN2dkgsSUFBSSxHQUFHLElBQUksQ0FBQ3NyQyxRQUFRLENBQUM1ckMsT0FBTyxHQUFHLENBQUMsR0FBR3NSLFNBQVMsR0FBR0UsVUFBVTtBQUMvRSxRQUFJLENBQUNxK0csZ0JBQWdCLENBQUNwdkgsV0FBVyxHQUFHLElBQUksQ0FBQ21yQyxRQUFRLENBQUM1ckMsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSztBQUM1RSxRQUFJLENBQUM2dkgsZ0JBQWdCLENBQUNydkgsVUFBVSxHQUFHLEtBQUs7SUFDeEMsSUFBSSxDQUFDcXZILGdCQUFnQixDQUFDTCxZQUFZLEdBQUcsSUFBSSxDQUFDNWpGLFFBQVEsQ0FBQzRqRixZQUFZO0lBQy9ELElBQUksQ0FBQ0ssZ0JBQWdCLENBQUM3dkgsT0FBTyxHQUFHLElBQUksQ0FBQzRyQyxRQUFRLENBQUM1ckMsT0FBTztJQUNyRCxJQUFJLENBQUMrdkgsZ0JBQWdCLENBQUMsSUFBSSxDQUFDbmtGLFFBQVEsQ0FBQzhqRixhQUFhLENBQUM7QUFDcEQ7QUFFQTloSSxnQkFBQTtBQUNFLFNBQUssRUFBRTtJQTlCRixJQUFRLENBQUFnK0MsUUFBQSxHQUFrQ3o1QyxNQUFNLENBQUMyTSxNQUFNLENBQzVELEVBQUUsRUFDRjZ3SCwwQkFBMEIsQ0FDM0I7SUE2QkMsSUFBSSxDQUFDRSxnQkFBZ0IsR0FBRyxJQUFJTix1QkFBdUIsQ0FBQyxFQUFFLENBQUM7SUFDdkQsSUFBSSxDQUFDMXVILE9BQU8sR0FBRzh1SCwwQkFBMEI7QUFDM0M7RUFFVUksZ0JBQWdCQSxDQUFDdDhILEtBQW1CO0lBQzVDLElBQUksQ0FBQ0EsS0FBSyxFQUFFO0lBQ1osSUFBSSxDQUFDdThILGNBQWMsR0FBRyxJQUFJO0lBRTFCbitILE1BQU0sQ0FBQ3NDLFVBQVUsQ0FBQ1YsS0FBSyxDQUFDLENBQ3JCNnBGLElBQUksQ0FBRXRzRixLQUFjLElBQUk7QUFDdkIsVUFBSSxDQUFDNitILGdCQUFnQixDQUFDSCxhQUFhLEdBQUcxK0gsS0FBSztBQUMzQyxVQUFJLENBQUM2K0gsZ0JBQWdCLENBQUNyekgsU0FBUyxHQUFHLElBQUk7TUFDdEMsSUFBSSxDQUFDd3pILGNBQWMsR0FBRyxLQUFLO0FBQzdCLEtBQUMsQ0FBQyxDQUNEenlDLEtBQUssQ0FBRUMsTUFBTSxJQUFJO0FBQ2hCL3JGLFlBQU0sQ0FBQ3VDLEtBQUssQ0FBQyxDQUFpQ3dwRixzQ0FBTSxFQUFFLENBQUM7TUFDdkQsSUFBSSxDQUFDd3lDLGNBQWMsR0FBRyxLQUFLO0FBQzdCLEtBQUMsQ0FBQztBQUNOO0FBRU85aEYsUUFBTUEsQ0FDWDE5QyxRQUF1QixFQUN2QnlYLE1BQXFELEVBQ3JEa3VCLEtBQWE7QUFFYixXQUFPLEtBQUssQ0FBQytYLE1BQU0sQ0FBQzE5QyxRQUFRLEVBQUV5WCxNQUFNLEVBQUVrdUIsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDNjVGLGNBQWM7QUFDckU7QUFDRDs7QUNoRkssTUFBT0Msa0JBQW1CLFNBQVEvakUsbUJBQW1CO0FBR3pEdCtELGFBQ0VBLENBQUErNEQsZUFBZ0MsRUFDaEM5bEQsT0FBQSxHQUEyQnFsRCxzQkFBc0I7O0lBRWpELEtBQUssQ0FBQ1MsZUFBZSxDQUFDO0lBTmQsSUFBc0IsQ0FBQXlGLHNCQUFBLEdBQVcsRUFBRTtBQVEzQyxVQUFNNEYsYUFBYSxHQUFHbnhELE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQUcsSUFBSXdLLGFBQWEsQ0FBQ2hLLGVBQWUsQ0FBQyxHQUFHLElBQUk7QUFFL0UsVUFBTTZLLFNBQVMsR0FBRyxDQUFDM3dELE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQUcsSUFBSTJDLFNBQVMsRUFBRSxHQUFHLElBQUk7QUFDekQsUUFBSTBJLFNBQVMsRUFBRTtNQUNiQSxTQUFTLENBQUMxa0IsU0FBUyxDQUFDLENBQUMzOEMsWUFBWSxDQUFDMnpDLG1CQUFtQixDQUFDLENBQUM7QUFDdkQwdEIsZUFBUyxDQUFDdmtCLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDcUMsS0FBSyxDQUFDO0FBQy9DOGpCLGVBQVMsQ0FBQ3BrQixTQUFTLENBQUMsSUFBSSxDQUFDO0FBQ3pCb2tCLGVBQVMsQ0FBQzdrQixhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNwQzZrQixTQUFTLENBQUM1a0IsYUFBYSxDQUFDdEIsVUFBVSxDQUFDejZCLEtBQUssR0FBR3k2QixVQUFVLENBQUNvQyxLQUFLLENBQUM7QUFDOUQ7SUFFQSxNQUFNdWtCLFFBQVEsR0FBR3B4RCxPQUFPLENBQUNzbEQsS0FBSyxHQUMxQjZMLGFBQWEsS0FBYixRQUFBQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVSLFNBQVMsQ0FBQ3pJLFlBQVksR0FDckMsQ0FBQS8rQyxFQUFBLEdBQUF3bkQsU0FBUyxLQUFULFFBQUFBLFNBQVMsS0FBVCxrQkFBQUEsU0FBUyxDQUFFbmxCLFlBQVksTUFBRSxRQUFBcmlDLEVBQUEsdUJBQUFBLEVBQUEsQ0FBQXpXLE9BQU87SUFFcEMsTUFBTTIrRCx1QkFBdUIsR0FDM0IsQ0FBQ3J4RCxPQUFPLENBQUNzbEQsS0FBSyxHQUFHNkwsYUFBYSxhQUFiQSxhQUFhLEtBQWIsa0JBQUFBLGFBQWEsQ0FBRXZGLGFBQWEsR0FBRyxFQUFFLEtBQUssRUFBRTtBQUMzRCxVQUFNMEYsMkJBQTJCLEdBQy9CLENBQUN0eEQsT0FBTyxDQUFDc2xELEtBQUssR0FDVjZMLGFBQWEsYUFBYkEsYUFBYSxLQUFiLGtCQUFBQSxhQUFhLENBQUV0RixpQkFBaUIsR0FDaEM4RSxTQUFTLEdBQ1QsQ0FBQ0EsU0FBUyxDQUFDLEdBQ1gsRUFBRSxLQUFLLEVBQUU7QUFFZixVQUFNMCtELFlBQVksR0FBRyxJQUFJTixZQUFZLEVBQUU7QUFDdkNNLGdCQUFZLENBQUNwakYsU0FBUyxDQUFDLENBQ3JCMzhDLFlBQVksQ0FBQ2lsRCxjQUFjLEVBQzNCamxELFlBQVksQ0FBQzJ6QyxtQkFBbUIsRUFDaEMzekMsWUFBWSxDQUFDbzZCLG1CQUFtQixFQUNoQ3A2QixZQUFZLENBQUNnN0Msb0JBQW9CLEVBQ2pDaDdDLFlBQVksQ0FBQ2k3QywwQkFBMEIsRUFDdkNqN0MsWUFBWSxDQUFDbXFELEtBQUssQ0FDbkIsQ0FBQztBQUNGNDFFLGdCQUFZLENBQUNqakYsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNpRyxNQUFNLENBQUM7SUFDbkQ0K0UsWUFBWSxDQUFDcnZILE9BQU8sR0FBRztBQUFFMnVILGtCQUFZLEVBQUU7S0FBTTtBQUU3QyxVQUFNVyx1QkFBdUIsR0FBRyxJQUFJUCxZQUFZLEVBQUU7QUFDbERPLDJCQUF1QixDQUFDcmpGLFNBQVMsQ0FBQyxDQUNoQzM4QyxZQUFZLENBQUNpbEQsY0FBYyxFQUMzQmpsRCxZQUFZLENBQUMyekMsbUJBQW1CLEVBQ2hDM3pDLFlBQVksQ0FBQ282QixtQkFBbUIsRUFDaENwNkIsWUFBWSxDQUFDZzdDLG9CQUFvQixFQUNqQ2g3QyxZQUFZLENBQUNpN0MsMEJBQTBCLEVBQ3ZDajdDLFlBQVksQ0FBQzh0QyxtQkFBbUIsRUFDaEM5dEMsWUFBWSxDQUFDbWlFLGFBQWEsQ0FDM0IsQ0FBQztBQUNGNjlELDJCQUF1QixDQUFDbGpGLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDa0csV0FBVyxDQUFDO0lBQ25FNCtFLHVCQUF1QixDQUFDdHZILE9BQU8sR0FBRztBQUFFMnVILGtCQUFZLEVBQUUsSUFBSTtBQUFFeHZILGFBQU8sRUFBRTtLQUFLO0FBRXRFLFVBQU11eUQsaUJBQWlCLEdBQUcsSUFBSTlJLGlCQUFpQixFQUFFO0FBQ2pEOEkscUJBQWlCLENBQUM3SSxVQUFVLENBQUMsUUFBUSxFQUFFdUksUUFBUSxDQUFDO0FBQ2hETSxxQkFBaUIsQ0FBQ3RrQixrQkFBa0IsR0FBRyxJQUFJLENBQUNtZSxzQkFBc0I7SUFDbEVtRyxpQkFBaUIsQ0FBQzF4RCxPQUFPLEdBQUc7QUFDMUJ5b0Qsa0JBQVksRUFBRSxHQUFHO0FBQ2pCRSxnQkFBVSxFQUFFO0tBQ2I7QUFDRCtJLHFCQUFpQixDQUFDNWxCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBRTVDLFVBQU02bEIsU0FBUyxHQUFHLElBQUk3RyxTQUFTLEVBQUU7SUFDakM2RyxTQUFTLENBQUMzeEQsT0FBTyxHQUFHO0FBQUU0cUQsYUFBTyxFQUFFLElBQUk7TUFBRUMsVUFBVSxFQUFFN3FELE9BQU8sQ0FBQ3NsRDtLQUFPO0lBQ2hFcU0sU0FBUyxDQUFDOUksVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBbDdDLEVBQUEsR0FBQStqRCxpQkFBaUIsQ0FBQ2xtQixZQUFZLGNBQUE3OUIsRUFBQSx1QkFBQUEsRUFBQSxDQUFFamIsT0FBTyxDQUFDO0lBQ3BFaS9ELFNBQVMsQ0FBQzlJLFVBQVUsQ0FDbEIsUUFBUSxFQUNSN29ELE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQUc2TCxhQUFhLEtBQWIsUUFBQUEsYUFBYSxLQUFiLGtCQUFBQSxhQUFhLENBQUVyWixhQUFhLEdBQUczbUQsU0FBUyxDQUN6RDtBQUNEd2dFLGFBQVMsQ0FBQ3ZrQixrQkFBa0IsR0FBRyxJQUFJLENBQUNtZSxzQkFBc0I7QUFFMUQsVUFBTXFHLGdCQUFnQixHQUFHLElBQUk5RyxTQUFTLEVBQUU7SUFDeEM4RyxnQkFBZ0IsQ0FBQzV4RCxPQUFPLEdBQUc7QUFBRTRxRCxhQUFPLEVBQUUsS0FBSztNQUFFQyxVQUFVLEVBQUU3cUQsT0FBTyxDQUFDc2xEO0tBQU87SUFDeEVzTSxnQkFBZ0IsQ0FBQy9JLFVBQVUsQ0FDekIsUUFBUSxFQUNSN29ELE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQUc2TCxhQUFhLEtBQWIsUUFBQUEsYUFBYSxLQUFiLGtCQUFBQSxhQUFhLENBQUVKLG9CQUFvQixHQUFHNS9ELFNBQVMsQ0FDaEU7QUFDRHlnRSxvQkFBZ0IsQ0FBQ3hrQixrQkFBa0IsR0FBRyxJQUFJLENBQUNtZSxzQkFBc0I7QUFFakUsVUFBTXNHLFdBQVcsR0FBRyxJQUFJdkYsV0FBVyxFQUFFO0FBQ3JDdUYsZUFBVyxDQUFDemxCLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDc0MsT0FBTyxDQUFDO0lBQ25EK2tCLFdBQVcsQ0FBQzVsQixTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUMyekMsbUJBQW1CLENBQUMsQ0FBQztBQUV6RCxVQUFNNnVCLGVBQWUsR0FBRyxJQUFJdEYsZUFBZSxFQUFFO0FBQzdDc0YsbUJBQWUsQ0FBQzFsQixhQUFhLENBQUM1QixnQkFBZ0IsQ0FBQ3NDLE9BQU8sQ0FBQztJQUN2RGdsQixlQUFlLENBQUM3bEIsU0FBUyxDQUFDLENBQUMzOEMsWUFBWSxDQUFDMnpDLG1CQUFtQixDQUFDLENBQUM7QUFDN0Q2dUIsbUJBQWUsQ0FBQy9sQixhQUFhLENBQUN0QixVQUFVLENBQUNvQyxLQUFLLENBQUM7QUFFL0MsVUFBTWtsQixXQUFXLEdBQUcsSUFBSTVNLFlBQVksRUFBRTtBQUN0QzRNLGVBQVcsQ0FBQzlsQixTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUNrL0IsT0FBTyxFQUFFbC9CLFlBQVksQ0FBQzBpRSxZQUFZLENBQUMsQ0FBQztBQUV4RSxRQUFJLENBQUN4RyxZQUFZLENBQUNwK0QsSUFBSSxDQUNwQixHQUFHaWtFLHVCQUF1QixFQUMxQlEsV0FBVyxFQUNYdzlELFlBQVksRUFDWkMsdUJBQXVCLEVBQ3ZCLElBQUl0dkgsT0FBTyxDQUFDc2xELEtBQUssR0FBRyxDQUFDc00sZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFDNUNFLGVBQWUsRUFDZkMsV0FBVyxDQUNaO0lBQ0QsSUFBSSxDQUFDdEcsZ0JBQWdCLENBQUNyK0QsSUFBSSxDQUN4QixHQUFHa2tFLDJCQUEyQixFQUM5Qk8sV0FBVyxFQUNYdzlELFlBQVksRUFDWkMsdUJBQXVCLEVBQ3ZCeDlELGVBQWUsRUFDZkosaUJBQWlCLEVBQ2pCQyxTQUFTLEVBQ1RJLFdBQVcsQ0FDWjtBQUNELFFBQUksQ0FBQ3JHLGdCQUFnQixDQUFDdCtELElBQUksQ0FDeEJ5a0UsV0FBVyxFQUNYdzlELFlBQVksRUFDWkMsdUJBQXVCLEVBQ3ZCeDlELGVBQWUsRUFDZkgsU0FBUyxFQUNUSSxXQUFXLENBQ1o7QUFFRCxRQUFJLENBQUN2TSxRQUFRLEdBQUcsSUFBSSxDQUFDZ0csWUFBWTtBQUNuQztBQUNEOztBQ3hISyxNQUFPK2pFLFVBQVcsU0FBUTdrRixTQUFTO0FBV3ZDMzlDLGFBQW1CQSxDQUFBd3JCLElBQWUsRUFBRTVvQixRQUF5QjtBQUMzRCxTQUFLLEVBQUU7QUFUQyxRQUFXLENBQUFzZCxXQUFBLEdBTWpCLEVBQUU7SUFJSixJQUFJLENBQUNzTCxJQUFJLEdBQUdBLElBQUk7SUFDaEIsSUFBSSxDQUFDdXRDLGVBQWUsR0FBR24yRCxRQUFRO0lBQy9CLElBQUksQ0FBQzYvSCxjQUFjLEVBQUU7SUFDckIsSUFBSSxDQUFDQyxpQkFBaUIsRUFBRTtBQUMxQjtFQUVBLElBQVdsa0YsV0FBV0EsR0FBQTtBQUNwQixXQUFPLFFBQVE7QUFDakI7RUFFTzZaLGlCQUFpQkEsQ0FBQzNLLE1BQWU7QUFDdEMsU0FBSyxNQUFNbGxELENBQUMsSUFBSSxJQUFJLENBQUMwWCxXQUFXLEVBQUU7TUFDaEMsSUFBSSxDQUFDQSxXQUFXLENBQUMxWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3dKLGNBQWMsR0FBRzA3QyxNQUFNO0FBQ2hEO0FBQ0Y7QUFFVSswRSxnQkFBY0EsR0FBQTtBQUN0QixVQUFNNWhGLE9BQU8sR0FBZ0IsSUFBSSxDQUFDa1ksZUFBZSxDQUFDUyxPQUFPLENBQUMzVixVQUFVLENBQ2xFei9DLFNBQVMsRUFDVDhJLFlBQVksQ0FBQ2EsSUFBSSxDQUNsQjtBQUVELFNBQUssSUFBSXZGLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3E0QyxPQUFPLENBQUN4NEMsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtBQUN2QyxZQUFNcUYsS0FBSyxHQUFjZ3pDLE9BQU8sQ0FBQ3I0QyxDQUFDLENBQUM7QUFDbkMsWUFBTXk1RyxRQUFRLEdBQXVDLElBQUk1eUUsR0FBRyxFQUFFO0FBQzlENHlFLGNBQVEsQ0FBQ2oyRyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztBQUUxQixXQUFLLElBQUkwUyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc3USxLQUFLLENBQUNnc0IsV0FBVyxDQUFDeHhCLE1BQU0sRUFBRXFXLENBQUMsRUFBRSxFQUFFO0FBQ2pELGNBQU1vZSxFQUFFLEdBQUdqdkIsS0FBSyxDQUFDZ3NCLFdBQVcsQ0FBQ25iLENBQUMsQ0FBQztBQUMvQixjQUFNMEMsYUFBYSxHQUEyQjBiLEVBQUUsQ0FBQ3BhLFVBQVUsQ0FBQ3RCLGFBQWE7UUFDekUsSUFBSSxDQUFDQSxhQUFhLEVBQUU7QUFDbEIsZ0JBQU11aEgsaUJBQWlCLEdBQUcxZ0IsUUFBUSxDQUFDaitHLEdBQUcsQ0FBQyxRQUFRLENBQUM7VUFDaEQsSUFBSTIrSCxpQkFBaUIsRUFBRUEsaUJBQWlCLENBQUN0aUksSUFBSSxDQUFDeThCLEVBQUUsQ0FBQztBQUNqRDtBQUNGO0FBRUEsWUFBSSxDQUFDbWxGLFFBQVEsQ0FBQ24rRyxHQUFHLENBQUNzZCxhQUFhLENBQUNuZixLQUFLLENBQUMsRUFBRWdnSCxRQUFRLENBQUNqMkcsR0FBRyxDQUFDb1YsYUFBYSxDQUFDbmYsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUM3RSxNQUFNeTlHLEtBQUssR0FBR3VDLFFBQVEsQ0FBQ2orRyxHQUFHLENBQUNvZCxhQUFhLENBQUNuZixLQUFLLENBQUM7QUFDL0MsWUFBSXk5RyxLQUFLLEVBQUVBLEtBQUssQ0FBQ3IvRyxJQUFJLENBQUN5OEIsRUFBRSxDQUFDO0FBQzNCO0FBRUEsWUFBTS9WLFdBQVcsR0FBRzlpQixNQUFNLENBQUNrRSwyQkFBMkIsQ0FDcEQ4QixLQUFLLENBQUNvSCxJQUFJLENBQUM0d0csUUFBUSxDQUFDbnpGLElBQUksRUFBRSxDQUFDLENBQzVCO0FBQ0QsWUFBTWplLFFBQVEsR0FBRyxJQUFJZ0gsOEJBQThCLENBQUM7QUFDbERuRixZQUFJLEVBQUVrUixVQUFVO0FBQ2hCL1EsbUJBQVcsRUFBRSxLQUFLO0FBQ2xCa1IsaUJBQVMsRUFBRTtBQUNaLFFBQUM7TUFDRmxULFFBQVEsQ0FBQ29CLFdBQVcsR0FBRyxJQUFJO0FBQzNCcEIsY0FBUSxDQUFDa0gsa0JBQWtCLENBQUNnUCxXQUFXLENBQUM7QUFFeEMsVUFBSSxDQUFDN0csV0FBVyxDQUFDclMsS0FBSyxDQUFDdk0sRUFBRSxDQUFDLEdBQUcsQ0FBQ3VNLEtBQUssRUFBRW8wRyxRQUFRLEVBQUVweEcsUUFBUSxDQUFDO0FBQzFEO0FBQ0Y7QUFFTzZ4SCxtQkFBaUJBLEdBQUE7QUFDdEIsU0FBSyxNQUFNOXRHLElBQUksSUFBSSxJQUFJLENBQUMxVSxXQUFXLEVBQUU7TUFDbkMsTUFBTXJTLEtBQUssR0FBRyxJQUFJLENBQUNxUyxXQUFXLENBQUMwVSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDdkMsTUFBTXF0RixRQUFRLEdBQUcsSUFBSSxDQUFDL2hHLFdBQVcsQ0FBQzBVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUUxQyxNQUFNZ3VHLFlBQVksR0FBRyxFQUFFO01BQ3ZCLElBQUloN0csU0FBUyxHQUFHLENBQUM7TUFDakIsS0FBSyxNQUFNODNGLEtBQUssSUFBSXVDLFFBQVEsQ0FBQ3paLE9BQU8sRUFBRSxFQUFFO0FBQ3RDLGNBQU12bUcsS0FBSyxHQUFHeTlHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEJrakIsb0JBQVksQ0FBQ3ZpSSxJQUFJLENBQ2YsR0FBR3EvRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMvaEcsR0FBRyxDQUFFdmEsS0FBcUIsSUFBSTtVQUN4QyxPQUFPO1lBQ0xnSyxNQUFNLEVBQUVoSyxLQUFLLENBQUMybUIsVUFBVTtZQUN4QjFjLEtBQUssRUFBRWpLLEtBQUssQ0FBQyttQixVQUFVO0FBQ3ZCcVIsMkJBQWUsRUFBRTtBQUNmNVQsdUJBQVMsRUFBRUEsU0FBUyxHQUFHcTZGLFFBQVEsQ0FBQzM1RyxJQUFJO0FBQ3BDdWYsNEJBQWMsRUFBRSxJQUFJbmYsS0FBSyxDQUFDekcsS0FBSyxDQUFDO0FBQ2hDNmxCLHVCQUFTLEVBQUU0M0YsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDcjNHLE1BQU0sR0FBRztBQUM5QjtXQUNrQjtBQUN2QixTQUFDLENBQUMsQ0FDSDtBQUNEdWYsaUJBQVMsRUFBRTtBQUNiO0FBQ0EvWixXQUFLLENBQUMwdEIsZUFBZSxDQUFDcW5HLFlBQVksQ0FBQztBQUNyQztBQUNGO0FBRVVDLG1CQUFpQkEsR0FBQTtBQUN6QixTQUFLLE1BQU1yNkgsQ0FBQyxJQUFJLElBQUksQ0FBQzBYLFdBQVcsRUFBRTtBQUNoQyxZQUFNNGlILEtBQUssR0FBRyxJQUFJLENBQUM1aUgsV0FBVyxDQUFDMVgsQ0FBQyxDQUFDO0FBQy9CczZILFdBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzNvRyxZQUE0QixDQUFDbVksd0JBQXdCLENBQUN3d0YsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFO0FBQ0Y7QUFFVXR0RixrQkFBZ0JBLEdBQUE7QUFDeEIsU0FBSyxNQUFNaHRDLENBQUMsSUFBSSxJQUFJLENBQUMwWCxXQUFXLEVBQUU7QUFDaEMsWUFBTTRpSCxLQUFLLEdBQUcsSUFBSSxDQUFDNWlILFdBQVcsQ0FBQzFYLENBQUMsQ0FBQztNQUMvQnM2SCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMzb0csWUFBNEIsQ0FBQ3FZLG9CQUFvQixFQUFFO0FBQ2hFO0FBQ0Y7QUFFTzhOLFFBQU1BLENBQ1gxOUMsUUFBdUIsRUFDdkJ5WCxNQUFxRCxFQUNyRGt1QixLQUFhO0FBRWIsUUFBSSxDQUFDbHVCLE1BQU0sSUFBSSxDQUFDa3VCLEtBQUssRUFBRSxPQUFPLEtBQUs7SUFFbkMsSUFBSSxDQUFDczZGLGlCQUFpQixFQUFFO0lBRXhCLElBQUksSUFBSSxDQUFDMXRILGNBQWMsRUFBRSxJQUFJLENBQUNBLGNBQWMsRUFBRTtBQUU5QyxRQUFJLENBQUNzcUMsV0FBVyxDQUFDcGxDLE1BQU0sQ0FBQztBQUV4QnpYLFlBQVEsQ0FBQzJxRCxlQUFlLENBQUMsSUFBSSxDQUFDOU8sWUFBWSxDQUFDO0FBRTNDLFFBQUksQ0FBQ29CLEtBQUssQ0FBQ2o5QyxRQUFRLENBQUM7QUFFcEJBLFlBQVEsQ0FBQzA5QyxNQUFNLENBQUMvWCxLQUFLLEVBQUVsdUIsTUFBTSxDQUFDO0lBQzlCLElBQUksSUFBSSxDQUFDZ2tDLGFBQWEsRUFBRSxJQUFJLENBQUNBLGFBQWEsRUFBRTtJQUU1QyxJQUFJLENBQUM3SSxnQkFBZ0IsRUFBRTtBQUV2QixXQUFPLEtBQUs7QUFDZDtBQUNEOztBQzlJSyxNQUFPdXRGLGtCQUFtQixTQUFRemtFLG1CQUFtQjtFQUN6RHQrRCxZQUNFKzRELGVBQWdDLEVBQ2hDOWxELE9BQTJCLEdBQUFxbEQsc0JBQXNCLEVBQ2pEOXNDLElBQWU7SUFFZixLQUFLLENBQUN1dEMsZUFBZSxDQUFDO0FBRXRCLFVBQU1xTCxhQUFhLEdBQUdueEQsT0FBTyxDQUFDc2xELEtBQUssR0FBRyxJQUFJd0ssYUFBYSxDQUFDaEssZUFBZSxDQUFDLEdBQUcsSUFBSTtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtJQUVBLE1BQU11TCx1QkFBdUIsR0FDM0IsQ0FBQ3J4RCxPQUFPLENBQUNzbEQsS0FBSyxHQUFHNkwsYUFBYSxhQUFiQSxhQUFhLEtBQWIsa0JBQUFBLGFBQWEsQ0FBRXZGLGFBQWEsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUMzRCxNQUFNMEYsMkJBQTJCLEdBQy9CLENBQUN0eEQsT0FBTyxDQUFDc2xELEtBQUssR0FBRzZMLGFBQWEsYUFBYkEsYUFBYSxLQUFiLGtCQUFBQSxhQUFhLENBQUV0RixpQkFBaUIsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUUvRCxNQUFNa2tFLFNBQVMsR0FBRyxJQUFJUixVQUFVLENBQUNoM0csSUFBSSxFQUFFdXRDLGVBQWUsQ0FBQztBQUN2RGlxRSxhQUFTLENBQUM5akYsU0FBUyxDQUFDLENBQUMzOEMsWUFBWSxDQUFDMnpDLG1CQUFtQixFQUFFM3pDLFlBQVksQ0FBQ21xRCxLQUFLLENBQUMsQ0FBQztBQUMzRXMyRSxhQUFTLENBQUNqa0YsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDcENpa0YsYUFBUyxDQUFDaGtGLGFBQWEsQ0FBQ3RCLFVBQVUsQ0FBQ3o2QixLQUFLLENBQUM7SUFDekMrL0csU0FBUyxDQUFDdmtGLFlBQVksR0FBRyxJQUFJO0FBRTdCLFVBQU13a0YsV0FBVyxHQUFHLElBQUk3cUUsWUFBWSxFQUFFO0lBQ3RDNnFFLFdBQVcsQ0FBQy9qRixTQUFTLENBQUMsQ0FDcEIzOEMsWUFBWSxDQUFDbzZCLG1CQUFtQixFQUNoQ3A2QixZQUFZLENBQUNnN0Msb0JBQW9CLEVBQ2pDaDdDLFlBQVksQ0FBQ2k3QywwQkFBMEIsRUFDdkNqN0MsWUFBWSxDQUFDOHRDLG1CQUFtQixDQUNqQyxDQUFDO0FBRUYsVUFBTXUwQixTQUFTLEdBQUcsSUFBSTdHLFNBQVMsRUFBRTtJQUNqQzZHLFNBQVMsQ0FBQzN4RCxPQUFPLEdBQUc7QUFBRTRxRCxhQUFPLEVBQUUsS0FBSztNQUFFQyxVQUFVLEVBQUU3cUQsT0FBTyxDQUFDc2xEO0tBQU87SUFDakVxTSxTQUFTLENBQUM5SSxVQUFVLENBQ2xCLFFBQVEsRUFDUjdvRCxPQUFPLENBQUNzbEQsS0FBSyxHQUFHNkwsYUFBYSxLQUFiLFFBQUFBLGFBQWEsS0FBYixrQkFBQUEsYUFBYSxDQUFFclosYUFBYSxHQUFHM21ELFNBQVMsQ0FDekQ7QUFDRHdnRSxhQUFTLENBQUN2a0Isa0JBQWtCLEdBQUcsSUFBSSxDQUFDbWUsc0JBQXNCO0FBRTFELFVBQU1xRyxnQkFBZ0IsR0FBRyxJQUFJOUcsU0FBUyxFQUFFO0lBQ3hDOEcsZ0JBQWdCLENBQUM1eEQsT0FBTyxHQUFHO0FBQUU0cUQsYUFBTyxFQUFFLEtBQUs7TUFBRUMsVUFBVSxFQUFFN3FELE9BQU8sQ0FBQ3NsRDtLQUFPO0lBQ3hFc00sZ0JBQWdCLENBQUMvSSxVQUFVLENBQ3pCLFFBQVEsRUFDUjdvRCxPQUFPLENBQUNzbEQsS0FBSyxHQUFHNkwsYUFBYSxLQUFiLFFBQUFBLGFBQWEsS0FBYixrQkFBQUEsYUFBYSxDQUFFSixvQkFBb0IsR0FBRzUvRCxTQUFTLENBQ2hFO0FBQ0R5Z0Usb0JBQWdCLENBQUN4a0Isa0JBQWtCLEdBQUcsSUFBSSxDQUFDbWUsc0JBQXNCO0FBRWpFLFVBQU1zRyxXQUFXLEdBQUcsSUFBSXZGLFdBQVcsRUFBRTtBQUNyQ3VGLGVBQVcsQ0FBQ3psQixhQUFhLENBQUM1QixnQkFBZ0IsQ0FBQ3NDLE9BQU8sQ0FBQztJQUNuRCtrQixXQUFXLENBQUM1bEIsU0FBUyxDQUFDLENBQUMzOEMsWUFBWSxDQUFDMnpDLG1CQUFtQixDQUFDLENBQUM7QUFFekQsVUFBTTZ1QixlQUFlLEdBQUcsSUFBSXRGLGVBQWUsRUFBRTtBQUM3Q3NGLG1CQUFlLENBQUMxbEIsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNzQyxPQUFPLENBQUM7SUFDdkRnbEIsZUFBZSxDQUFDN2xCLFNBQVMsQ0FBQyxDQUFDMzhDLFlBQVksQ0FBQzJ6QyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzdENnVCLG1CQUFlLENBQUMvbEIsYUFBYSxDQUFDdEIsVUFBVSxDQUFDb0MsS0FBSyxDQUFDO0FBRS9DLFVBQU1rbEIsV0FBVyxHQUFHLElBQUk1TSxZQUFZLEVBQUU7QUFDdEM0TSxlQUFXLENBQUM5bEIsU0FBUyxDQUFDLENBQUMzOEMsWUFBWSxDQUFDay9CLE9BQU8sRUFBRWwvQixZQUFZLENBQUMwaUUsWUFBWSxDQUFDLENBQUM7QUFFeEUsUUFBSSxDQUFDeEcsWUFBWSxDQUFDcCtELElBQUksQ0FDcEIsR0FBR2lrRSx1QkFBdUIsRUFDMUJRLFdBQVcsRUFDWGsrRCxTQUFTLEVBQ1RDLFdBQVcsRUFDWCxJQUFJaHdILE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQUcsQ0FBQ3NNLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQzVDRSxlQUFlLEVBQ2ZDLFdBQVcsQ0FDWjtBQUNELFFBQUksQ0FBQ3RHLGdCQUFnQixDQUFDcitELElBQUksQ0FDeEIsR0FBR2trRSwyQkFBMkIsRUFDOUJPLFdBQVcsRUFDWGsrRCxTQUFTLEVBQ1RDLFdBQVcsRUFDWGwrRCxlQUFlLEVBQ2ZILFNBQVMsRUFDVEksV0FBVyxDQUNaO0FBQ0QsUUFBSSxDQUFDckcsZ0JBQWdCLENBQUN0K0QsSUFBSSxDQUN4QnlrRSxXQUFXLEVBQ1hrK0QsU0FBUyxFQUNUQyxXQUFXLEVBQ1hsK0QsZUFBZSxFQUNmSCxTQUFTLEVBQ1RJLFdBQVcsQ0FDWjtBQUVELFFBQUksQ0FBQ3ZNLFFBQVEsR0FBRyxJQUFJLENBQUNnRyxZQUFZO0FBQ25DO0FBQ0Q7O0FDdkdNLE1BQU15a0UscUJBQXFCLEdBQUc7Ozs7O0tBSy9COztBQ0xDLE1BQU1DLHFCQUFxQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBa0MvQjs7SUMzQk1DO0FBQVosV0FBWUEsU0FBUztFQUNuQkEsU0FBQSxDQUFBQSxTQUFBLHdCQUFTO0VBQ1RBLFNBQUEsQ0FBQUEsU0FBQSxvQ0FBZTtFQUNmQSxTQUFBLENBQUFBLFNBQUEsNEJBQVc7RUFDWEEsU0FBQSxDQUFBQSxTQUFBLG9DQUFlO0FBQ2pCLENBQUMsRUFMV0EsU0FBUyxLQUFUQSxTQUFTLEdBS3BCO0FBTU0sTUFBTUMsd0JBQXdCLEdBQWdDO0VBQ25FQyxTQUFTLEVBQUVGLFNBQVMsQ0FBQ0c7Q0FDdEI7QUFFSyxNQUFPQyxVQUFXLFNBQVE3bEYsU0FBUztFQVN2QyxJQUFXMXFDLE9BQU9BLENBQUM3UCxLQUF3QjtJQUN6QyxLQUFLLENBQUM2UCxPQUFPLEdBQUc3UCxLQUFLO0lBQ3JCLElBQUksQ0FBQ3FnSSxZQUFZLENBQUMsSUFBSSxDQUFDemxGLFFBQVEsQ0FBQ3NsRixTQUFTLENBQUM7QUFDNUM7QUFFQXRqSSxnQkFBQTtBQUNFLFNBQUssRUFBRTtJQVhGLElBQVEsQ0FBQWcrQyxRQUFBLEdBQWdDejVDLE1BQU0sQ0FBQzJNLE1BQU0sQ0FDMUQsRUFBRSxFQUNGbXlILHdCQUF3QixDQUN6QjtBQVNDLFFBQUksQ0FBQ3JsRSxZQUFZLEdBQUcsSUFBSS82RCxjQUFjLENBQUM7QUFDckMrTCxhQUFPLEVBQUU7QUFDUDAwSCxrQkFBVSxFQUFFLElBQUksQ0FBQzFsRixRQUFRLENBQUNzbEY7T0FDM0I7TUFDRHBnSSxRQUFRLEVBQUV3TixhQUFhLENBQUNxc0IsS0FBSyxDQUFDdWtDLFVBQVUsQ0FBQ3ArRCxRQUFRLENBQUM7QUFDbERHLGtCQUFZLEVBQUU2L0gscUJBQXFCO0FBQ25DNS9ILG9CQUFjLEVBQUU2L0gscUJBQXFCO0FBQ3JDdHdILGlCQUFXLEVBQUU7QUFDZCxNQUFDO0FBQ0YsUUFBSSxDQUFDbXJELFlBQVksQ0FBQ3Q2RCxVQUFVLEdBQUcsS0FBSztBQUNwQyxRQUFJLENBQUNzNkQsWUFBWSxDQUFDcDNELFdBQVcsR0FBRyxJQUFJO0lBQ3BDLElBQUksQ0FBQzBsRCxNQUFNLEdBQUcsSUFBSUMsY0FBYyxDQUFDLElBQUksQ0FBQ3lSLFlBQVksQ0FBQztBQUNyRDtFQUVVeWxFLFlBQVlBLENBQUNoaUksSUFBZTtJQUNwQyxJQUFJLENBQUN1OEQsWUFBWSxDQUFDaHZELE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBR3ZOLElBQUk7QUFDOUMsUUFBSSxDQUFDdThELFlBQVksQ0FBQ3AzRCxXQUFXLEdBQUcsSUFBSTtBQUN0QztBQUVPazFELFlBQVVBLENBQUNDLEtBQWEsRUFBRXAyRCxPQUE0QjtJQUMzRCxJQUFJLENBQUNxNEQsWUFBWSxDQUFDOTZELFFBQVEsQ0FBQzY0RCxLQUFLLENBQUMsQ0FBQzM0RCxLQUFLLEdBQUd1QyxPQUFPO0FBQ2pELFFBQUksQ0FBQ3E0RCxZQUFZLENBQUNwM0QsV0FBVyxHQUFHLElBQUk7QUFDdEM7RUFFQSxJQUFJNDNDLFdBQVdBLEdBQUE7QUFDYixXQUFPLFFBQVE7QUFDakI7RUFFTzhCLE1BQU1BLENBQUMxOUMsUUFBdUI7QUFDbkNBLFlBQVEsQ0FBQzJxRCxlQUFlLENBQUMsSUFBSSxDQUFDblAsYUFBYSxDQUFDO0FBQzVDLFFBQUksQ0FBQ2tPLE1BQU0sQ0FBQ2hNLE1BQU0sQ0FBQzE5QyxRQUFRLENBQUM7QUFFNUIsV0FBTyxLQUFLO0FBQ2Q7QUFDRDs7QUNwREssTUFBTytnSSxlQUFnQixTQUFRcmxFLG1CQUFtQjtBQUN0RHQrRCxhQUNFQSxDQUFBKzRELGVBQWdDLEVBQ2hDOWxELE9BQUEsR0FBMkJxbEQsc0JBQXNCO0lBR2pELEtBQUssQ0FBQ1MsZUFBZSxDQUFDO0FBRXRCLFVBQU1xTCxhQUFhLEdBQUcsSUFBSXJCLGFBQWEsQ0FBQ2hLLGVBQWUsQ0FBQztBQUN4RHFMLGlCQUFhLENBQUNMLGVBQWUsQ0FBQ3RsQixZQUFZLEdBQUcsSUFBSTtJQUNqRDJsQixhQUFhLENBQUNSLFNBQVMsQ0FBQ3ZrQixhQUFhLENBQUM1QixnQkFBZ0IsQ0FBQ3FDLEtBQUssQ0FBQztJQUM3RHNrQixhQUFhLENBQUNQLGdCQUFnQixDQUFDeGtCLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDcUMsS0FBSyxDQUFDO0FBQ3BFc2tCLGlCQUFhLENBQUNOLFFBQVEsQ0FBQzd3RCxPQUFPLEdBQUc7QUFBRW90RCxxQkFBZSxFQUFFLFFBQVE7TUFBRSxHQUFHcHREO0tBQVM7QUFDMUVteEQsaUJBQWEsQ0FBQ0wsZUFBZSxDQUFDOXdELE9BQU8sR0FBRztBQUFFb3RELHFCQUFlLEVBQUUsUUFBUTtNQUFFLEdBQUdwdEQ7S0FBUztBQUVqRixVQUFNNnhELFdBQVcsR0FBRyxJQUFJdkYsV0FBVyxFQUFFO0FBQ3JDdUYsZUFBVyxDQUFDemxCLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDc0MsT0FBTyxDQUFDO0lBQ25EK2tCLFdBQVcsQ0FBQzVsQixTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUMyekMsbUJBQW1CLENBQUMsQ0FBQztBQUV6RDtBQUNBLFVBQU0wdEYsWUFBWSxHQUFHLElBQUssY0FBY3hyRSxZQUFZO01BR2xELElBQVc1WixXQUFXQSxHQUFBO0FBQ3BCLGVBQU8saUJBQWlCO0FBQzFCO01BRUEsSUFBVy9MLHFCQUFxQkEsR0FBQTtRQUM5QixPQUFPLElBQUksQ0FBQ294RixjQUFjO0FBQzVCO0FBRUE3akksb0JBQUE7QUFDRSxhQUFLLEVBQUU7QUFDUCxZQUFJLENBQUM2akksY0FBYyxHQUFHLElBQUkzdEgsdUJBQXVCLENBQUM7QUFDaER4RCxjQUFJLEVBQUVrUixVQUFVO0FBQ2hCL1EscUJBQVcsRUFBRSxLQUFLO0FBQ2xCVCxpQkFBTyxFQUFFLENBQUM7QUFDVjJSLG1CQUFTLEVBQUU7QUFDWixVQUFDO0FBQ0YsWUFBSSxDQUFDOC9HLGNBQWMsQ0FBQzF6SCxVQUFVLEdBQUcsS0FBSztBQUN4QztBQUVPbXdDLFlBQU1BLENBQ1gxOUMsUUFBdUIsRUFDdkJ5WCxNQUFxRCxFQUNyRGt1QixLQUFhO0FBRWIzbEMsZ0JBQVEsQ0FBQ2toSSxhQUFhLENBQUMsSUFBSSxDQUFDQyxVQUFVLENBQUM7UUFDdkMsTUFBTW4zRyxHQUFHLEdBQUcsS0FBSyxDQUFDMHpCLE1BQU0sQ0FBQzE5QyxRQUFRLEVBQUV5WCxNQUFNLEVBQUVrdUIsS0FBSyxDQUFDO0FBQ2pEO0FBQ0EzbEMsZ0JBQVEsQ0FBQ2toSSxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQzVCLGVBQU9sM0csR0FBRztBQUNaO0FBRVVtM0csZ0JBQVVBLENBQUM5akcsQ0FBYSxFQUFFbDNCLENBQWE7QUFDL0M7QUFDQSxlQUFPLENBQUNrM0IsQ0FBQyxDQUFDcHZCLFFBQVEsQ0FBQ1YsVUFBVSxHQUFHLENBQUNwSCxDQUFDLENBQUM4SCxRQUFRLENBQUNWLFVBQVU7QUFDeEQ7QUFDRCxPQUFHO0FBQ0p5ekgsZ0JBQVksQ0FBQzFrRixTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUMyekMsbUJBQW1CLEVBQUUzekMsWUFBWSxDQUFDbXFELEtBQUssQ0FBQyxDQUFDO0FBRTlFLFVBQU1xWSxlQUFlLEdBQUcsSUFBSXRGLGVBQWUsRUFBRTtBQUM3Q3NGLG1CQUFlLENBQUMxbEIsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNzQyxPQUFPLENBQUM7SUFDdkRnbEIsZUFBZSxDQUFDN2xCLFNBQVMsQ0FBQyxDQUFDMzhDLFlBQVksQ0FBQzJ6QyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzdENnVCLG1CQUFlLENBQUMvbEIsYUFBYSxDQUFDdEIsVUFBVSxDQUFDb0MsS0FBSyxDQUFDO0FBRS9DLFVBQU1rbEIsV0FBVyxHQUFHLElBQUk1TSxZQUFZLEVBQUU7QUFDdEM0TSxlQUFXLENBQUM5bEIsU0FBUyxDQUFDLENBQUMzOEMsWUFBWSxDQUFDay9CLE9BQU8sRUFBRWwvQixZQUFZLENBQUMwaUUsWUFBWSxDQUFDLENBQUM7QUFFeEUsVUFBTSsrRCxVQUFVLEdBQUcsSUFBSVIsVUFBVSxFQUFFO0lBQ25DUSxVQUFVLENBQUNsb0UsVUFBVSxDQUFDLFVBQVUsRUFBRXNJLGFBQWEsQ0FBQ3JaLGFBQWEsQ0FBQztBQUU5RCxRQUFJLENBQUMwVCxZQUFZLENBQUNwK0QsSUFBSSxDQUNwQixHQUFHK2pFLGFBQWEsQ0FBQ3ZGLGFBQWEsRUFDOUJpRyxXQUFXLEVBQ1g4K0QsWUFBWSxFQUNaNytELGVBQWUsRUFDZkMsV0FBVyxDQUNaO0FBRUQsUUFBSSxDQUFDdEcsZ0JBQWdCLENBQUNyK0QsSUFBSSxDQUN4QixHQUFHK2pFLGFBQWEsQ0FBQ3RGLGlCQUFpQixFQUNsQ2tsRSxVQUFVLEVBQ1ZsL0QsV0FBVyxFQUNYOCtELFlBQVksRUFDWjcrRCxlQUFlLEVBQ2ZDLFdBQVcsQ0FDWjtBQUVELFFBQUksQ0FBQ3JHLGdCQUFnQixDQUFDdCtELElBQUksQ0FDeEIyakksVUFBVSxFQUNWbC9ELFdBQVcsRUFDWDgrRCxZQUFZLEVBQ1o3K0QsZUFBZSxFQUNmQyxXQUFXLENBQ1o7QUFFRCxRQUFJLENBQUN2TSxRQUFRLEdBQUcsSUFBSSxDQUFDZ0csWUFBWTtBQUNuQztBQUNEOztBQ3ZIRCxJQUFJLEdBQUcsR0FBRyw0bDdqQkFBNGw3akI7O0FDYWhtN2pCLE1BQU93bEUsaUJBQWtCLFNBQVEzbEUsbUJBQW1CO0FBQ3hEdCtELGFBQ0VBLENBQUErNEQsZUFBZ0MsRUFDaEM5bEQsT0FBQSxHQUEyQnFsRCxzQkFBc0I7SUFFakQsS0FBSyxDQUFDUyxlQUFlLENBQUM7QUFFdEIsVUFBTXVwRSxZQUFZLEdBQUcsSUFBSU4sWUFBWSxFQUFFO0FBQ3ZDTSxnQkFBWSxDQUFDcGpGLFNBQVMsQ0FBQyxDQUNyQjM4QyxZQUFZLENBQUNpbEQsY0FBYyxFQUMzQmpsRCxZQUFZLENBQUMyekMsbUJBQW1CLEVBQ2hDM3pDLFlBQVksQ0FBQ282QixtQkFBbUIsRUFDaENwNkIsWUFBWSxDQUFDZzdDLG9CQUFvQixFQUNqQ2g3QyxZQUFZLENBQUNpN0MsMEJBQTBCLEVBQ3ZDajdDLFlBQVksQ0FBQ21xRCxLQUFLLENBQ25CLENBQUM7QUFDRjQxRSxnQkFBWSxDQUFDampGLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDaUcsTUFBTSxDQUFDO0lBQ25ENCtFLFlBQVksQ0FBQ3J2SCxPQUFPLEdBQUc7QUFDckI2dUgsbUJBQWEsRUFBRTtBQUNieGdJLFVBQUUsRUFBRSxlQUFlO0FBQ25CQyxXQUFHLEVBQUUyaUksR0FBYTtRQUNsQnppSSxJQUFJLEVBQUVSLFNBQVMsQ0FBQzZEO0FBQ2pCO0tBQ0Y7QUFFRCxVQUFNeTlILHVCQUF1QixHQUFHLElBQUlQLFlBQVksRUFBRTtBQUNsRE8sMkJBQXVCLENBQUNyakYsU0FBUyxDQUFDLENBQ2hDMzhDLFlBQVksQ0FBQ2lsRCxjQUFjLEVBQzNCamxELFlBQVksQ0FBQzJ6QyxtQkFBbUIsRUFDaEMzekMsWUFBWSxDQUFDbzZCLG1CQUFtQixFQUNoQ3A2QixZQUFZLENBQUNnN0Msb0JBQW9CLEVBQ2pDaDdDLFlBQVksQ0FBQ2k3QywwQkFBMEIsRUFDdkNqN0MsWUFBWSxDQUFDOHRDLG1CQUFtQixDQUNqQyxDQUFDO0FBQ0ZreUYsMkJBQXVCLENBQUNsakYsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNrRyxXQUFXLENBQUM7SUFDbkU0K0UsdUJBQXVCLENBQUN0dkgsT0FBTyxHQUFHO0FBQ2hDYixhQUFPLEVBQUUsR0FBRztBQUNaMHZILG1CQUFhLEVBQUU7QUFDYnhnSSxVQUFFLEVBQUUsZUFBZTtBQUNuQkMsV0FBRyxFQUFFMmlJLEdBQWE7UUFDbEJ6aUksSUFBSSxFQUFFUixTQUFTLENBQUM2RDtBQUNqQjtLQUNGO0FBRUQsVUFBTStwRCxpQkFBaUIsR0FBRyxJQUFJdUosWUFBWSxFQUFFO0lBQzVDdkosaUJBQWlCLENBQUMzUCxTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUNtaUUsYUFBYSxDQUFDLENBQUM7QUFFekQsVUFBTXkvRCxxQkFBcUIsR0FBRyxJQUFJL3JFLFlBQVksRUFBRTtJQUNoRCtyRSxxQkFBcUIsQ0FBQ2psRixTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUNtcUQsS0FBSyxDQUFDLENBQUM7QUFFckQsVUFBTW9ZLFdBQVcsR0FBRyxJQUFJdkYsV0FBVyxFQUFFO0FBQ3JDdUYsZUFBVyxDQUFDemxCLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDc0MsT0FBTyxDQUFDO0lBQ25EK2tCLFdBQVcsQ0FBQzVsQixTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUMyekMsbUJBQW1CLENBQUMsQ0FBQztBQUV6RCxVQUFNNnVCLGVBQWUsR0FBRyxJQUFJdEYsZUFBZSxFQUFFO0FBQzdDc0YsbUJBQWUsQ0FBQzFsQixhQUFhLENBQUM1QixnQkFBZ0IsQ0FBQ3NDLE9BQU8sQ0FBQztJQUN2RGdsQixlQUFlLENBQUM3bEIsU0FBUyxDQUFDLENBQUMzOEMsWUFBWSxDQUFDMnpDLG1CQUFtQixDQUFDLENBQUM7QUFDN0Q2dUIsbUJBQWUsQ0FBQy9sQixhQUFhLENBQUN0QixVQUFVLENBQUNvQyxLQUFLLENBQUM7QUFFL0MsVUFBTWtsQixXQUFXLEdBQUcsSUFBSTVNLFlBQVksRUFBRTtBQUN0QzRNLGVBQVcsQ0FBQzlsQixTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUNrL0IsT0FBTyxFQUFFbC9CLFlBQVksQ0FBQzBpRSxZQUFZLENBQUMsQ0FBQztBQUV4RSxVQUFNYixhQUFhLEdBQUdueEQsT0FBTyxDQUFDc2xELEtBQUssR0FBRyxJQUFJd0ssYUFBYSxDQUFDaEssZUFBZSxDQUFDLEdBQUcsSUFBSTtJQUMvRSxJQUFJNkwsU0FBUyxHQUFHLElBQUk7SUFDcEIsSUFBSUMsZ0JBQWdCLEdBQUcsSUFBSTtBQUMzQixRQUFJVCxhQUFhLEVBQUU7QUFDakJRLGVBQVMsR0FBRyxJQUFJN0csU0FBUyxFQUFFO01BQzNCNkcsU0FBUyxDQUFDM3hELE9BQU8sR0FBRztBQUFFNHFELGVBQU8sRUFBRSxLQUFLO0FBQUVDLGtCQUFVLEVBQUU7T0FBTTtNQUN4RDhHLFNBQVMsQ0FBQzlJLFVBQVUsQ0FBQyxRQUFRLEVBQUVzSSxhQUFhLENBQUNyWixhQUFhLENBQUM7QUFDM0Q2WixlQUFTLENBQUN2a0Isa0JBQWtCLEdBQUcsSUFBSSxDQUFDbWUsc0JBQXNCO0FBRTFEcUcsc0JBQWdCLEdBQUcsSUFBSTlHLFNBQVMsRUFBRTtNQUNsQzhHLGdCQUFnQixDQUFDNXhELE9BQU8sR0FBRztBQUFFNHFELGVBQU8sRUFBRSxLQUFLO0FBQUVDLGtCQUFVLEVBQUU7T0FBTTtNQUMvRCtHLGdCQUFnQixDQUFDL0ksVUFBVSxDQUFDLFFBQVEsRUFBRXNJLGFBQWEsQ0FBQ0osb0JBQW9CLENBQUM7QUFDekVhLHNCQUFnQixDQUFDeGtCLGtCQUFrQixHQUFHLElBQUksQ0FBQ21lLHNCQUFzQjtBQUNuRTtJQUVBLE1BQU04Rix1QkFBdUIsR0FDM0IsQ0FBQ3J4RCxPQUFPLENBQUNzbEQsS0FBSyxHQUFHNkwsYUFBYSxhQUFiQSxhQUFhLEtBQWIsa0JBQUFBLGFBQWEsQ0FBRXZGLGFBQWEsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUMzRCxNQUFNMEYsMkJBQTJCLEdBQy9CLENBQUN0eEQsT0FBTyxDQUFDc2xELEtBQUssR0FBRzZMLGFBQWEsYUFBYkEsYUFBYSxLQUFiLGtCQUFBQSxhQUFhLENBQUV0RixpQkFBaUIsR0FBRyxFQUFFLEtBQUssRUFBRTtBQUMvRCxVQUFNc2xFLHVCQUF1QixHQUFHbnhILE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQ3pDc00sZ0JBQWdCLEdBQ2QsQ0FBQ0EsZ0JBQWdCLENBQUMsR0FDbEIsRUFBRSxHQUNKLEVBQUU7QUFDTixVQUFNdy9ELDJCQUEyQixHQUFHcHhILE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQzdDcU0sU0FBUyxHQUNQLENBQUNBLFNBQVMsQ0FBQyxHQUNYLEVBQUUsR0FDSixFQUFFO0lBRU4sSUFBSSxDQUFDbkcsWUFBWSxDQUFDcCtELElBQUksQ0FDcEIsR0FBR2lrRSx1QkFBdUIsRUFDMUJRLFdBQVcsRUFDWGpXLGlCQUFpQixFQUNqQnl6RSxZQUFZLEVBQ1pDLHVCQUF1QixFQUN2QixHQUFHNkIsdUJBQXVCLEVBQzFCRCxxQkFBcUIsRUFDckJwL0QsZUFBZSxFQUNmQyxXQUFXLENBQ1o7SUFDRCxJQUFJLENBQUN0RyxnQkFBZ0IsQ0FBQ3IrRCxJQUFJLENBQ3hCLEdBQUdra0UsMkJBQTJCLEVBQzlCTyxXQUFXLEVBQ1hqVyxpQkFBaUIsRUFDakJ5ekUsWUFBWSxFQUNaQyx1QkFBdUIsRUFDdkIsR0FBRzhCLDJCQUEyQixFQUM5QkYscUJBQXFCLEVBQ3JCcC9ELGVBQWUsRUFDZkMsV0FBVyxDQUNaO0lBQ0QsSUFBSSxDQUFDckcsZ0JBQWdCLENBQUN0K0QsSUFBSSxDQUN4QnlrRSxXQUFXLEVBQ1hqVyxpQkFBaUIsRUFDakJ5ekUsWUFBWSxFQUNaQyx1QkFBdUIsRUFDdkIsR0FBRzhCLDJCQUEyQixFQUM5QnQvRCxlQUFlLEVBQ2ZvL0QscUJBQXFCLEVBQ3JCbi9ELFdBQVcsQ0FDWjtBQUVELFFBQUksQ0FBQ3ZNLFFBQVEsR0FBRyxJQUFJLENBQUNnRyxZQUFZO0FBQ25DO0FBQ0Q7O0lDeEhXNmxFO0FBQVosV0FBWUEsUUFBUTtFQUNsQkEsUUFBQSxDQUFBQSxRQUFBLDRCQUFPO0VBQ1BBLFFBQUEsQ0FBQUEsUUFBQSx3QkFBSztFQUNMQSxRQUFBLENBQUFBLFFBQUEsb0JBQUc7RUFDSEEsUUFBQSxDQUFBQSxRQUFBLDBCQUFNO0VBQ05BLFFBQUEsQ0FBQUEsUUFBQSwwQkFBTTtBQUNSLENBQUMsRUFOV0EsUUFBUSxLQUFSQSxRQUFRLEdBTW5CO0lBRVdDO0FBQVosV0FBWUEsYUFBYTtBQUN2QkEsZUFBQSxpQ0FBNkI7QUFDL0IsQ0FBQyxFQUZXQSxhQUFhLEtBQWJBLGFBQWEsR0FFeEI7QUFRSyxNQUFPQyxTQUFVLFNBQVFudkQsU0FBUztFQUN0QyxJQUFXQyxNQUFNQSxHQUFBO0lBQ2YsT0FBTyxDQUFDb25DLGtCQUFrQixDQUFDO0FBQzdCO0VBT0EsSUFBVytuQixlQUFlQSxHQUFBO0lBQ3hCLE9BQU8sSUFBSSxDQUFDQSxlQUFlO0FBQzdCO0VBR0EsSUFBV0MsUUFBUUEsR0FBQTtJQUNqQixPQUFPLElBQUksQ0FBQ0MsU0FBUztBQUN2QjtBQUVBM2tJLGFBQ0VBLENBQUFzd0QsTUFBZSxFQUNMczBFLGtCQUFzQztJQUVoRCxLQUFLLENBQUN0MEUsTUFBTSxDQUFDO0lBRkgsSUFBa0IsQ0FBQXMwRSxrQkFBQSxHQUFsQkEsa0JBQWtCO0FBaEJwQixRQUFnQixDQUFBQyxnQkFBQSxHQUE4QnRnSSxNQUFNLENBQUMyTSxNQUFNLENBQ25FLEVBQUUsRUFDRm9uRCxzQkFBc0IsRUFDdEJ3SywyQkFBMkIsQ0FDNUI7QUFlQztJQUNBLElBQUk4aEUsa0JBQWtCLEVBQ3BCQSxrQkFBa0IsQ0FBQzFrSSxFQUFFLENBQUMwQixXQUFXLENBQUN1K0csaUJBQWlCLEVBQUd0NEMsR0FBbUIsSUFBSTtBQUMzRTtNQUNBLElBQ0UsQ0FBQyxDQUFDQSxHQUFHLENBQUNzM0MsV0FBVyxJQUFJLENBQUN0M0MsR0FBRyxDQUFDczNDLFdBQVcsQ0FBQzkyRyxNQUFNLE1BQzNDLENBQUN3L0QsR0FBRyxDQUFDODRDLGVBQWUsSUFBSSxDQUFDOTRDLEdBQUcsQ0FBQzg0QyxlQUFlLENBQUN0NEcsTUFBTSxDQUFDLEVBQ3JEO0FBQ0E7QUFDQSxZQUFJLENBQUNpb0QsTUFBTSxDQUNSaTVCLFdBQVcsRUFBRSxDQUNidmYsUUFBUSxDQUFDN1EsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUMxQnI0RCxPQUFPLENBQUVzNEQsSUFBVyxJQUFJO1VBQ3JCQSxJQUFtQixDQUFDc3BFLGlCQUFpQixFQUFFO0FBQzNDLFNBQUMsQ0FBQztBQUNOO0FBQ0YsS0FBQyxDQUFDO0lBQ0osSUFBSSxDQUFDcHlFLE1BQU0sQ0FBQ3B3RCxFQUFFLENBQUMwQixXQUFXLENBQUNndkYsWUFBWSxFQUFFLE1BQUs7QUFDNUMsVUFBSSxDQUFDazBDLHFCQUFxQixDQUFDLElBQUksQ0FBQ0QsZ0JBQWdCLENBQUM7QUFDbkQsS0FBQyxDQUFDO0FBQ0o7QUFFTzNrSSxJQUFFQSxDQUNQeW1ELFNBQVksRUFDWnZtRCxRQUFnRDtBQUVoRCxTQUFLLENBQUNGLEVBQUUsQ0FBQ3ltRCxTQUFTLEVBQUV2bUQsUUFBUSxDQUFDO0FBQy9CO0FBRU8ya0ksYUFBV0EsQ0FBQ0wsUUFBa0IsRUFBRXp4SCxPQUF5QjtBQUM5RDtBQUNBLFFBQ0V5eEgsUUFBUSxLQUFLLElBQUksQ0FBQ0MsU0FBUyxJQUMxQjF4SCxPQUFPLElBQUlBLE9BQU8sQ0FBQ3NsRCxLQUFLLEtBQUssSUFBSSxDQUFDc3NFLGdCQUFnQixDQUFDdHNFLEtBQU0sRUFDMUQ7TUFDQSxJQUFJLENBQUNvc0UsU0FBUyxHQUFHRCxRQUFRO0FBQ3pCLFVBQUksQ0FBQ00sZUFBZSxDQUFDTixRQUFRLEVBQUV6eEgsT0FBTyxDQUFDO0FBQ3pDLEtBQUMsTUFBTTtBQUNMLFVBQUksQ0FBQzZ4SCxxQkFBcUIsQ0FBQzd4SCxPQUFPLENBQUM7QUFDckM7SUFDQTFPLE1BQU0sQ0FBQzJNLE1BQU0sQ0FBQyxJQUFJLENBQUMyekgsZ0JBQWdCLEVBQUU1eEgsT0FBTyxDQUFDO0FBQy9DO0FBRVUreEgsaUJBQWVBLENBQUNOLFFBQWtCLEVBQUV6eEgsT0FBeUI7SUFDckUsTUFBTXJRLFFBQVEsR0FBRyxJQUFJLENBQUMwdEQsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRTtBQUMxQyxZQUFRbTdDLFFBQVE7TUFDZCxLQUFLSixRQUFRLENBQUNXLE9BQU87UUFDbkJyaUksUUFBUSxDQUFDb25FLFFBQVEsR0FBRyxJQUFJN0YsZUFBZSxDQUFDdmhFLFFBQVEsRUFBRXFRLE9BQU8sQ0FBQztBQUMxRDtNQUNGLEtBQUtxeEgsUUFBUSxDQUFDWSxHQUFHO1FBQ2Z0aUksUUFBUSxDQUFDb25FLFFBQVEsR0FBRyxJQUFJMjVELGVBQWUsQ0FBQy9nSSxRQUFRLEVBQUVxUSxPQUFPLENBQUM7QUFDMUQ7TUFDRixLQUFLcXhILFFBQVEsQ0FBQ2EsS0FBSztRQUNqQnZpSSxRQUFRLENBQUNvbkUsUUFBUSxHQUFHLElBQUlpNkQsaUJBQWlCLENBQUNyaEksUUFBUSxFQUFFcVEsT0FBTyxDQUFDO0FBQzVEO01BQ0YsS0FBS3F4SCxRQUFRLENBQUNjLE1BQU07UUFDbEJ4aUksUUFBUSxDQUFDb25FLFFBQVEsR0FBRyxJQUFJcTRELGtCQUFrQixDQUFDei9ILFFBQVEsRUFBRXFRLE9BQU8sQ0FBQztBQUM3RDtNQUNGLEtBQUtxeEgsUUFBUSxDQUFDZSxNQUFNO0FBQ2xCemlJLGdCQUFRLENBQUNvbkUsUUFBUSxHQUFHLElBQUkrNEQsa0JBQWtCLENBQ3hDbmdJLFFBQVEsRUFDUnFRLE9BQU8sRUFDUCxJQUFJLENBQUNxOUMsTUFBTSxDQUFDMC9CLFlBQVksRUFBRSxDQUMzQjtBQUNEO0FBQ0o7QUFDQSxRQUFJLENBQUM4MEMscUJBQXFCLENBQUM3eEgsT0FBTyxDQUFDO0lBQ25DLElBQUksQ0FBQ3E5QyxNQUFNLENBQUNzNUIsYUFBYSxDQUFDcG5GLFdBQVcsQ0FBQ2tvRixZQUFZLENBQUM7SUFDbkQsSUFBSSxDQUFDaHFGLElBQUksQ0FBQzZqSSxhQUFhLENBQUNlLE9BQU8sRUFBRVosUUFBUSxDQUFDO0FBQzVDO0VBRVVJLHFCQUFxQkEsQ0FBQzd4SCxPQUF5QjtJQUN2RCxJQUFJLENBQUNBLE9BQU8sRUFBRTtBQUNkLFVBQU1zeUgsaUJBQWlCLEdBQUcsSUFBSSxDQUFDajFFLE1BQU0sQ0FBQ3ZtRCxLQUFLLENBQUM0QixpQkFBaUIsQ0FDM0RtMEQsdUJBQXVCLENBQUNFLFNBQVMsQ0FDbEM7QUFDRCxVQUFNd2xFLFdBQVcsR0FBRyxJQUFJLENBQUNsMUUsTUFBTSxDQUFDaTVCLFdBQVcsRUFBRSxDQUFDdmYsUUFBUSxDQUFDN1EsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUN2RXFzRSxlQUFXLENBQUMxa0ksT0FBTyxDQUFFczRELElBQVcsSUFBSTtNQUNsQ0EsSUFBSSxDQUFDbm1ELE9BQU8sR0FBRztBQUFFLFdBQUdBLE9BQU87QUFBRStzRCxpQkFBUyxFQUFFdWxFO09BQW1CO0FBQzdELEtBQUMsQ0FBQztJQUNGLElBQUksQ0FBQ2oxRSxNQUFNLENBQUNzNUIsYUFBYSxDQUFDcG5GLFdBQVcsQ0FBQ2tvRixZQUFZLENBQUM7QUFDckQ7QUFDRDs7QUMxSUssTUFBTys2QyxzQkFBdUIsU0FBUWg5QyxnQkFBZ0I7RUFZMUR6b0YsWUFBbUJzd0QsTUFBZTtJQUNoQyxLQUFLLENBQUNBLE1BQU0sQ0FBQztJQVpMLEtBQUFzb0IsTUFBTSxHQUE4QjtBQUM1Q0MsYUFBTyxFQUFFLEtBQUs7QUFDZEMsVUFBSSxFQUFFLEtBQUs7QUFDWG5tRCxVQUFJLEVBQUUsS0FBSztBQUNYczdCLFdBQUssRUFBRSxLQUFLO0FBQ1ppcEIsUUFBRSxFQUFFLEtBQUs7QUFDVDZCLFVBQUksRUFBRTtLQUNQO0lBRVMsSUFBb0IsQ0FBQUMsb0JBQUEsR0FBRyxLQUFLO0lBSXBDMW9CLE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQzV6RCxLQUFLLENBQUN6MUIsRUFBRSxDQUFDa2tELFVBQVUsQ0FBQ2tDLEtBQUssRUFBRSxJQUFJLENBQUM4ekIsT0FBTyxDQUFDci9CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RXVWLE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQzV6RCxLQUFLLENBQUN6MUIsRUFBRSxDQUFDa2tELFVBQVUsQ0FBQ21DLE9BQU8sRUFBRSxJQUFJLENBQUN3ekIsU0FBUyxDQUFDaC9CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RXVWLE1BQU0sQ0FBQ2k1QixXQUFXLEVBQUUsQ0FBQzV6RCxLQUFLLENBQUN6MUIsRUFBRSxDQUFDa2tELFVBQVUsQ0FBQ3NDLFdBQVcsRUFBRSxJQUFJLENBQUMyekIsYUFBYSxDQUFDdC9CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0RjtFQUVPdzZCLGFBQWFBLENBQUM4VSxNQUFlO0FBQ2xDLFNBQUssQ0FBQzlVLGFBQWEsQ0FBQzhVLE1BQU0sQ0FBQztBQUMzQjs7QUFFRztJQUNILElBQUksSUFBSSxDQUFDclIsb0JBQW9CLEVBQUU7TUFDN0IsSUFBSSxDQUFDd0IsVUFBVSxFQUFFO01BQ2pCLElBQUksQ0FBQ3hCLG9CQUFvQixHQUFHLEtBQUs7QUFDbkM7QUFDRjtFQUVVZSxTQUFTQSxDQUFDNTBCLEtBQW9CO0lBQ3RDLFFBQVFBLEtBQUssQ0FBQ2cxQixJQUFJO0FBQ2hCLFdBQUssU0FBUztBQUNkLFdBQUssTUFBTTtBQUNULFlBQUksQ0FBQ3ZCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLElBQUk7QUFDMUI7QUFFRixXQUFLLFdBQVc7QUFDaEIsV0FBSyxNQUFNO0FBQ1QsWUFBSSxDQUFDRCxNQUFNLENBQUNqbUQsSUFBSSxHQUFHLElBQUk7QUFDdkI7QUFFRixXQUFLLFdBQVc7QUFDaEIsV0FBSyxNQUFNO0FBQ1QsWUFBSSxDQUFDaW1ELE1BQU0sQ0FBQ0UsSUFBSSxHQUFHLElBQUk7QUFDdkI7QUFFRixXQUFLLFlBQVk7QUFDakIsV0FBSyxNQUFNO0FBQ1QsWUFBSSxDQUFDRixNQUFNLENBQUMzcUIsS0FBSyxHQUFHLElBQUk7QUFDeEI7QUFFRixXQUFLLFFBQVE7QUFDYixXQUFLLE1BQU07QUFDVCxZQUFJLENBQUMycUIsTUFBTSxDQUFDMUIsRUFBRSxHQUFHLElBQUk7QUFDckI7QUFFRixXQUFLLFVBQVU7QUFDZixXQUFLLE1BQU07QUFDVCxZQUFJLENBQUMwQixNQUFNLENBQUNHLElBQUksR0FBRyxJQUFJO0FBQ3ZCO0FBQ0o7QUFDQSxRQUNFLENBQUMsSUFBSSxDQUFDaVEsWUFBWSxDQUFDbG5GLE9BQU8sSUFDMUIsSUFBSSxDQUFDNG1GLGdCQUFnQixZQUFZdHVCLGlCQUFpQixJQUNsRDcxRCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUNvMEUsTUFBTSxDQUFDLENBQUM3MUMsSUFBSSxDQUFFK0IsQ0FBQyxJQUFLQSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBRWxELElBQUksQ0FBQzJrRCxjQUFjLEVBQUU7QUFDekI7RUFFVXJQLE9BQU9BLENBQUNqMUIsS0FBb0I7SUFDcEMsUUFBUUEsS0FBSyxDQUFDZzFCLElBQUk7QUFDaEIsV0FBSyxTQUFTO0FBQ2QsV0FBSyxNQUFNO0FBQ1QsWUFBSSxDQUFDdkIsTUFBTSxDQUFDQyxPQUFPLEdBQUcsS0FBSztBQUMzQjtBQUVGLFdBQUssV0FBVztBQUNoQixXQUFLLE1BQU07QUFDVCxZQUFJLENBQUNELE1BQU0sQ0FBQ2ptRCxJQUFJLEdBQUcsS0FBSztBQUN4QjtBQUVGLFdBQUssV0FBVztBQUNoQixXQUFLLE1BQU07QUFDVCxZQUFJLENBQUNpbUQsTUFBTSxDQUFDRSxJQUFJLEdBQUcsS0FBSztBQUN4QjtBQUVGLFdBQUssWUFBWTtBQUNqQixXQUFLLE1BQU07QUFDVCxZQUFJLENBQUNGLE1BQU0sQ0FBQzNxQixLQUFLLEdBQUcsS0FBSztBQUN6QjtBQUVGLFdBQUssUUFBUTtBQUNiLFdBQUssTUFBTTtBQUNULFlBQUksQ0FBQzJxQixNQUFNLENBQUMxQixFQUFFLEdBQUcsS0FBSztBQUN0QjtBQUVGLFdBQUssVUFBVTtBQUNmLFdBQUssTUFBTTtBQUNULFlBQUksQ0FBQzBCLE1BQU0sQ0FBQ0csSUFBSSxHQUFHLEtBQUs7QUFDeEI7QUFDSjtBQUNBLFFBQ0UsSUFBSSxDQUFDaVEsWUFBWSxDQUFDbG5GLE9BQU8sSUFDekJ5QyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUNvMEUsTUFBTSxDQUFDLENBQUNwM0IsS0FBSyxDQUFFMWMsQ0FBQyxJQUFLQSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBRXBELElBQUksQ0FBQzJrRCxjQUFjLEVBQUU7QUFDekI7QUFFVXBQLGVBQWFBLEdBQUE7SUFDckIsSUFBSSxDQUFDckIsb0JBQW9CLEdBQUcsSUFBSTtBQUNsQztBQUVVd0IsWUFBVUEsR0FBQTtBQUNsQixRQUFJLENBQUM1QixNQUFNLENBQUNFLElBQUksR0FBRyxLQUFLO0FBQ3hCLFFBQUksQ0FBQ0YsTUFBTSxDQUFDQyxPQUFPLEdBQUcsS0FBSztBQUMzQixRQUFJLENBQUNELE1BQU0sQ0FBQ0csSUFBSSxHQUFHLEtBQUs7QUFDeEIsUUFBSSxDQUFDSCxNQUFNLENBQUMxQixFQUFFLEdBQUcsS0FBSztBQUN0QixRQUFJLENBQUMwQixNQUFNLENBQUNqbUQsSUFBSSxHQUFHLEtBQUs7QUFDeEIsUUFBSSxDQUFDaW1ELE1BQU0sQ0FBQzNxQixLQUFLLEdBQUcsS0FBSztBQUN6QixRQUNFLElBQUksQ0FBQys2QixZQUFZLENBQUNsbkYsT0FBTyxJQUN6QnlDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQ28wRSxNQUFNLENBQUMsQ0FBQ3AzQixLQUFLLENBQUUxYyxDQUFDLElBQUtBLENBQUMsS0FBSyxLQUFLLENBQUMsRUFFcEQsSUFBSSxDQUFDMmtELGNBQWMsRUFBRTtBQUN6QjtBQUNEOztBQ2xGRCxNQUFNaThDLHdCQUF5QixTQUFRbmlDLGtCQUFrQjtBQUN2RDs7O0FBR0c7RUFDT2dCLGVBQWVBLENBQUNtQixTQUF5QjtBQUVuRDtBQUNEO0FBRUQsTUFBTWlnQyxrQkFBbUIsU0FBUXBpQyxrQkFBa0I7QUFDakR2akcsYUFBbUJBLENBQUFzd0QsTUFBZSxFQUFZNHZDLGNBQWdDO0FBQzVFLFNBQUssQ0FBQzV2QyxNQUFNLEVBQUU0dkMsY0FBYyxDQUFDO0lBRGUsSUFBYyxDQUFBQSxjQUFBLEdBQWRBLGNBQWM7QUFFMUQsVUFBTTBsQyxxQkFBcUIsR0FBOEI7QUFDdkQxaUMsMkJBQXFCLEVBQUU7QUFDckI1aEcsVUFBRSxFQUFFMmMsU0FBUyxDQUFDQyxZQUFZLEVBQUU7QUFDNUJqYyxhQUFLLEVBQUUsUUFBUTtBQUNmNlUsZ0JBQVEsRUFBRSxHQUFHO0FBQ2IxRSxlQUFPLEVBQUUsQ0FBQztBQUNWd0UsaUJBQVMsRUFBRSxDQUFDO0FBQ1pDLGlCQUFTLEVBQUUsQ0FBQztBQUNaL0Qsb0JBQVksRUFBRSxLQUFLO0FBQ25Ca08sa0JBQVUsRUFBRSxDQUFDO1FBQ2I5TixlQUFlLEVBQUV6USxrQkFBa0IsQ0FBQ2cvQixPQUFPO0FBQzNDcnhCLGlCQUFTLEVBQUU7QUFDWjtLQUNGO0lBQ0QsSUFBSSxDQUFDNkMsT0FBTyxHQUFHMnlILHFCQUFxQjtBQUN0QztFQUVPdGdDLGVBQWVBLENBQUN4ekIsR0FBa0I7QUFDdkMsUUFBSSxDQUFDLElBQUksQ0FBQ2wwQixRQUFRLEVBQUU7QUFDcEIsUUFBSSxDQUFDLElBQUksQ0FBQ2ltRCxhQUFhLENBQUN4N0YsTUFBTSxFQUFFO0lBRWhDLE1BQU1rbUIsS0FBSyxHQUFHLEVBQUU7QUFDaEIsU0FBSyxJQUFJL2xCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3NwRSxHQUFHLENBQUN6cEUsTUFBTSxFQUFFRyxDQUFDLEVBQUUsRUFBRTtBQUNuQyxZQUFNMDhGLFVBQVUsR0FBRyxJQUFJLENBQUM1MEMsTUFBTSxDQUFDMC9CLFlBQVksRUFBRSxDQUFDeGhFLE1BQU0sQ0FBQ3NqRCxHQUFHLENBQUN0cEUsQ0FBQyxDQUFDLENBQUM7TUFDNUQsSUFBSTA4RixVQUFVLEVBQUUzMkUsS0FBSyxDQUFDbHVCLElBQUksQ0FBQyxHQUFHNmtHLFVBQVUsQ0FBQztBQUMzQztJQUNBLElBQUksQ0FBQ0ssY0FBYyxDQUNqQmgzRSxLQUFLLENBQUM5dEIsTUFBTSxDQUFFcWdCLElBQWMsSUFBSTtBQUM5QixhQUFPLElBQUksQ0FBQytpRixhQUFhLENBQUNwL0YsUUFBUSxDQUFDcWMsSUFBSSxDQUFDO0FBQzFDLEtBQUMsQ0FBQyxDQUNIO0FBQ0g7QUFFQTtFQUNVeWpGLGVBQWVBLENBQUNtQixTQUF5QjtBQUVuRDtFQUVVbEIsbUJBQW1CQSxDQUFDa0IsU0FBeUI7QUFFdkQ7RUFFVW5sQixhQUFhQSxDQUFDcHJELENBQVU7QUFFbEM7QUFDRDtBQUVLLE1BQU8wd0csWUFBYSxTQUFRcDRDLE1BQU07QUFVdEN6dEYsYUFDRUEsQ0FBQXNrRCxTQUFzQixFQUN0Qm1ELE1BQUEsR0FBdUJ2bUQsbUJBQW1CO0FBRTFDLFNBQUssQ0FBQ29qRCxTQUFTLEVBQUVtRCxNQUFNLENBQUM7SUFDeEIsSUFBSSxDQUFDcStFLGdCQUFnQixHQUFHLElBQUksQ0FBQzkzQyxlQUFlLENBQUN5M0Msc0JBQXNCLENBQUM7SUFDcEUsSUFBSSxDQUFDLy9CLFNBQVMsR0FBRyxJQUFJLENBQUMxWCxlQUFlLENBQUMwM0Msd0JBQXdCLENBQUM7SUFDL0QsSUFBSSxDQUFDSyxRQUFRLEdBQUcsSUFBSSxDQUFDLzNDLGVBQWUsQ0FBQ2luQixXQUFXLENBQUM7QUFDakQsUUFBSSxDQUFDam5CLGVBQWUsQ0FBQzZyQixlQUFlLENBQUM7SUFDckMsSUFBSSxDQUFDbFksWUFBWSxHQUFHLElBQUksQ0FBQzNULGVBQWUsQ0FBQ3FSLHFCQUFxQixDQUFDO0lBQy9ELElBQUksQ0FBQzJtQyxTQUFTLEdBQUcsSUFBSSxDQUFDaDRDLGVBQWUsQ0FBQzB1QixrQkFBa0IsQ0FBQztJQUN6RCxJQUFJLENBQUN1cEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDajRDLGVBQWUsQ0FBQ2d6QixnQkFBZ0IsQ0FBQztJQUM5RCxJQUFJLENBQUNrbEIsYUFBYSxHQUFHLElBQUksQ0FBQ2w0QyxlQUFlLENBQUNzcEMsYUFBYSxDQUFDO0lBQ3hELElBQUksQ0FBQzZPLGtCQUFrQixHQUFHLElBQUksQ0FBQ240QyxlQUFlLENBQUMyM0Msa0JBQWtCLENBQUM7QUFDbEUsUUFBSSxDQUFDMzNDLGVBQWUsQ0FBQ3cyQyxTQUFTLENBQUM7QUFFL0I7QUFDQSxRQUFJLENBQUN0a0ksRUFBRSxDQUFDMEIsV0FBVyxDQUFDZ3ZGLFlBQVksRUFBRSxNQUFLO0FBQ3JDLFlBQU1tMUMsUUFBUSxHQUFHLElBQUksQ0FBQzlpRSxZQUFZLENBQUNneUMsV0FBVyxDQUFDO0FBQy9DLFlBQU0yRSxlQUFlLEdBQUcsSUFBSSxDQUFDMzJDLFlBQVksQ0FBQzQyQyxlQUFlLENBQUM7TUFDMUQsSUFBSSxDQUFBa3NCLFFBQVEsS0FBUixRQUFBQSxRQUFRLHVCQUFSQSxRQUFRLENBQUVqa0ksT0FBTyxLQUFJODNHLGVBQWUsRUFBRUEsZUFBZSxDQUFDRSxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQy9FLEtBQUMsQ0FBQztBQUNKO0VBRU8sTUFBTXpwRyxJQUFJQSxHQUFBO0FBQ2YsVUFBTSxLQUFLLENBQUNBLElBQUksRUFBRTtBQUNwQjtBQUVPazVFLGFBQVdBLEdBQUE7SUFDaEIsT0FBTyxJQUFJLENBQUN4d0IsZUFBZTtBQUM3QjtBQUVBO0FBQ09xdEUsZUFBYUEsQ0FDbEJDLE9BQWtELEVBQ2xEajVILE1BQWU7QUFFZixRQUFJakMsR0FBZTtJQUNuQixJQUFJLENBQUNrN0gsT0FBTyxFQUFFO0FBQ1psN0gsU0FBRyxHQUFHLElBQUksQ0FBQzR0RCxlQUFlLENBQUNvUCxRQUFRO0FBQ3JDLEtBQUMsTUFBTTtBQUNMaDlELFNBQUcsR0FBRyxJQUFJNkIsR0FBRyxFQUFFO0FBQ2Y3QixTQUFHLENBQUNOLEdBQUcsR0FBRyxJQUFJUixPQUFPLEVBQUUsQ0FBQzRzQixTQUFTLENBQUNvdkcsT0FBTyxDQUFDeDdILEdBQUcsQ0FBQztBQUM5Q00sU0FBRyxDQUFDUCxHQUFHLEdBQUcsSUFBSVAsT0FBTyxFQUFFLENBQUM0c0IsU0FBUyxDQUFDb3ZHLE9BQU8sQ0FBQ3o3SCxHQUFHLENBQUM7QUFDOUNPLFNBQUcsQ0FBQ282RCxRQUFRLEdBQ1Y4Z0UsT0FBTyxDQUFDOWdFLFFBQVEsSUFBSThnRSxPQUFPLENBQUM5Z0UsUUFBUSxDQUFDbDlELE1BQU0sR0FDdkMsSUFBSWkrRCxPQUFPLEVBQUUsQ0FBQ3J2QyxTQUFTLENBQUNvdkcsT0FBTyxDQUFDOWdFLFFBQVEsQ0FBQyxHQUN6QyxJQUFJZSxPQUFPLEVBQUUsQ0FBQ3g2RCxRQUFRLEVBQUU7QUFDaEM7SUFDQSxJQUFJLENBQUNpNkgsUUFBUSxDQUFDN3VCLE1BQU0sQ0FBQy9yRyxHQUFHLEVBQUVpQyxNQUFNLENBQUM7QUFDbkM7QUFFT2s1SCxzQkFBb0JBLEdBQUE7SUFDekIsTUFBTW43SCxHQUFHLEdBQUcsSUFBSSxDQUFDNDZILFFBQVEsQ0FBQzl1QixNQUFNLEVBQUU7SUFDbEMsT0FBTztBQUNMcHNHLFNBQUcsRUFBRU0sR0FBRyxDQUFDTixHQUFHLENBQUNtc0IsT0FBTyxFQUFFO0FBQ3RCcHNCLFNBQUcsRUFBRU8sR0FBRyxDQUFDUCxHQUFHLENBQUNvc0IsT0FBTyxFQUFFO01BQ3RCLElBQUk3ckIsR0FBRyxZQUFZNkIsR0FBRyxJQUFJO0FBQUV1NEQsZ0JBQVEsRUFBRXA2RCxHQUFHLENBQUNvNkQsUUFBUSxDQUFDdnVDLE9BQU87T0FBSTtLQUNuQjtBQUMvQztBQUVPdXZHLGtCQUFnQkEsR0FBQTtBQUNyQixRQUFJLENBQUNSLFFBQVEsQ0FBQ3R1QixNQUFNLEVBQUU7QUFDeEI7QUFFTyt1QixlQUFhQSxHQUFBO0FBQ2xCLFFBQUksQ0FBQ1QsUUFBUSxDQUFDamtJLE9BQU8sR0FBRyxLQUFLO0FBQy9CO0FBRU8ya0ksY0FBWUEsR0FBQTtBQUNqQixRQUFJLENBQUNWLFFBQVEsQ0FBQ2prSSxPQUFPLEdBQUcsSUFBSTtBQUM5QjtBQUVBO0VBQ09pakcsYUFBYUEsQ0FBQ3h6QixTQUFtQjtJQUN0QyxJQUFJQSxTQUFTLENBQUNscEUsTUFBTSxFQUFFLElBQUksQ0FBQzg5SCxrQkFBa0IsQ0FBQzdnQyxlQUFlLENBQUMvekIsU0FBUyxDQUFDO0FBRXhFLFFBQUksQ0FBQ20wQixTQUFTLENBQUNYLGFBQWEsQ0FBQ3h6QixTQUFTLENBQUM7QUFDdkMsUUFBSSxDQUFDLElBQUksQ0FBQ3kwRCxTQUFTLENBQUNycEIsY0FBYyxDQUFDK3BCLGVBQWUsRUFDaEQsSUFBSSxDQUFDVixTQUFTLENBQUNycEIsY0FBYyxDQUFDK3BCLGVBQWUsR0FBRyxFQUFFO0lBQ3BELElBQUksQ0FBQ1YsU0FBUyxDQUFDcnBCLGNBQWMsQ0FBQytwQixlQUFlLENBQUNybUksSUFBSSxDQUNoRCxHQUFHLElBQUksQ0FBQ3FsRyxTQUFTLENBQUNoQixrQkFBa0IsRUFBRSxDQUFDL21GLEdBQUcsQ0FBRTJxQyxHQUFHLElBQUtBLEdBQUcsQ0FBQ2huRCxFQUFZLENBQUMsQ0FDdEU7SUFDRCxPQUFPeUUsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDZ2dJLFNBQVMsQ0FBQ3JwQixjQUFjLENBQUM7QUFDdkQ7QUFFT2dxQixnQkFBY0EsR0FBQTtBQUNuQixRQUFJLENBQUNSLGtCQUFrQixDQUFDNWdDLGNBQWMsRUFBRTtBQUN4QyxRQUFJLENBQUNHLFNBQVMsQ0FBQ0gsY0FBYyxFQUFFO0FBQy9CLFFBQUksSUFBSSxDQUFDeWdDLFNBQVMsQ0FBQ3JwQixjQUFjLENBQUMrcEIsZUFBZSxFQUMvQyxJQUFJLENBQUNWLFNBQVMsQ0FBQ3JwQixjQUFjLENBQUMrcEIsZUFBZSxDQUFDcitILE1BQU0sR0FBRyxDQUFDO0lBQzFELElBQUksQ0FBQ3VoRixhQUFhLENBQUNwbkYsV0FBVyxDQUFDNHNGLE1BQU0sR0FBRzVzRixXQUFXLENBQUM2c0YsT0FBTyxDQUFDO0lBQzVELE9BQU90cEYsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDZ2dJLFNBQVMsQ0FBQ3JwQixjQUFjLENBQUM7QUFDdkQ7QUFFT1UsYUFBV0EsQ0FDaEI5ckMsU0FBbUIsRUFDbkIrckMsUUFBQSxHQUErQmw1RyxTQUFTLEVBQ3hDbTVHLGtCQUFrQixHQUFHLEtBQUssRUFDMUJDLEtBQUssR0FBRyxLQUFLO0FBRWIsV0FBTyxJQUFJejNHLE9BQU8sQ0FBa0JDLE9BQU8sSUFBSTtBQUM3QyxZQUFNMjJHLGNBQWMsR0FBRyxJQUFJLENBQUNpcUIsZ0NBQWdDLENBQUMsTUFBSztBQUNoRSxlQUFPLElBQUksQ0FBQ1osU0FBUyxDQUFDM29CLFdBQVcsQ0FDL0I5ckMsU0FBUyxFQUNUK3JDLFFBQVEsRUFDUkMsa0JBQWtCLEVBQ2xCQyxLQUFLLENBQ047QUFDSCxPQUFDLENBQUM7TUFDRngzRyxPQUFPLENBQUMyMkcsY0FBYyxDQUFDO0FBQ3pCLEtBQUMsQ0FBQztBQUNKO0VBRU9pQixXQUFXQSxDQUNoQnJzQyxTQUFtQixFQUNuQityQyxRQUFBLEdBQStCbDVHLFNBQVMsRUFDeENtNUcsa0JBQWtCLEdBQUcsS0FBSztBQUUxQixXQUFPLElBQUl4M0csT0FBTyxDQUFrQkMsT0FBTyxJQUFJO0FBQzdDLFlBQU0yMkcsY0FBYyxHQUFHLElBQUksQ0FBQ2lxQixnQ0FBZ0MsQ0FBQyxNQUFLO1FBQ2hFLE9BQU8sSUFBSSxDQUFDWixTQUFTLENBQUNwb0IsV0FBVyxDQUFDcnNDLFNBQVMsRUFBRStyQyxRQUFRLEVBQUVDLGtCQUFrQixDQUFDO0FBQzVFLE9BQUMsQ0FBQztNQUNGdjNHLE9BQU8sQ0FBQzIyRyxjQUFjLENBQUM7QUFDekIsS0FBQyxDQUFDO0FBQ0o7QUFFT21CLGdCQUFjQSxDQUNuQnZzQyxTQUFtQixFQUNuQityQyxRQUFBLEdBQStCbDVHLFNBQVMsRUFDeENtNUcsa0JBQWtCLEdBQUcsS0FBSyxFQUMxQkMsS0FBSyxHQUFHLElBQUk7QUFFWixXQUFPLElBQUl6M0csT0FBTyxDQUFrQkMsT0FBTyxJQUFJO0FBQzdDLFlBQU0yMkcsY0FBYyxHQUFHLElBQUksQ0FBQ2lxQixnQ0FBZ0MsQ0FBQyxNQUFLO0FBQ2hFLGVBQU8sSUFBSSxDQUFDWixTQUFTLENBQUNsb0IsY0FBYyxDQUNsQ3ZzQyxTQUFTLEVBQ1QrckMsUUFBUSxFQUNSQyxrQkFBa0IsRUFDbEJDLEtBQUssQ0FDTjtBQUNILE9BQUMsQ0FBQztNQUNGeDNHLE9BQU8sQ0FBQzIyRyxjQUFjLENBQUM7QUFDekIsS0FBQyxDQUFDO0FBQ0o7RUFFT3FCLGdCQUFnQkEsQ0FDckJ6c0MsU0FBbUIsRUFDbkIrckMsUUFBQSxHQUErQmw1RyxTQUFTLEVBQ3hDbTVHLGtCQUFrQixHQUFHLEtBQUs7QUFFMUIsV0FBTyxJQUFJeDNHLE9BQU8sQ0FBa0JDLE9BQU8sSUFBSTtBQUM3QyxZQUFNMjJHLGNBQWMsR0FBRyxJQUFJLENBQUNpcUIsZ0NBQWdDLENBQUMsTUFBSztRQUNoRSxPQUFPLElBQUksQ0FBQ1osU0FBUyxDQUFDaG9CLGdCQUFnQixDQUFDenNDLFNBQVMsRUFBRStyQyxRQUFRLEVBQUVDLGtCQUFrQixDQUFDO0FBQ2pGLE9BQUMsQ0FBQztNQUNGdjNHLE9BQU8sQ0FBQzIyRyxjQUFjLENBQUM7QUFDekIsS0FBQyxDQUFDO0FBQ0o7RUFFT2txQixnQkFBZ0JBLENBQUN0MUQsU0FBbUI7SUFDekMsSUFBSSxDQUFDQSxTQUFTLENBQUNscEUsTUFBTSxFQUFFLElBQUksQ0FBQzg5SCxrQkFBa0IsQ0FBQzVnQyxjQUFjLEVBQUUsTUFDMUQsSUFBSSxDQUFDNGdDLGtCQUFrQixDQUFDcGhDLGFBQWEsQ0FBQ3h6QixTQUFTLENBQUM7SUFDckQsT0FBT3hyRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNnZ0ksU0FBUyxDQUFDcnBCLGNBQWMsQ0FBQztBQUN2RDtBQUVPbXFCLGdCQUFjQSxHQUFBO0FBQ25CLFFBQUksQ0FBQ1gsa0JBQWtCLENBQUM1Z0MsY0FBYyxFQUFFO0lBQ3hDLE9BQU94L0YsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDZ2dJLFNBQVMsQ0FBQ3JwQixjQUFjLENBQUM7QUFDdkQ7QUFFTytCLGdCQUFjQSxDQUFDcW9CLFFBQXNCLEVBQUV2cEIsS0FBSyxHQUFHLElBQUk7QUFDeEQsV0FBTyxJQUFJejNHLE9BQU8sQ0FBa0JDLE9BQU8sSUFBSTtBQUM3QyxZQUFNMjJHLGNBQWMsR0FBRyxJQUFJLENBQUNpcUIsZ0NBQWdDLENBQUMsTUFBSztRQUNoRSxPQUFPLElBQUksQ0FBQ1osU0FBUyxDQUFDdG5CLGNBQWMsQ0FBQ3FvQixRQUFRLEVBQUV2cEIsS0FBSyxDQUFDO0FBQ3ZELE9BQUMsQ0FBQztNQUNGeDNHLE9BQU8sQ0FBQzIyRyxjQUFjLENBQUM7QUFDekIsS0FBQyxDQUFDO0FBQ0o7QUFFT2tELG1CQUFpQkEsR0FBQTtBQUN0QixXQUFPLElBQUk5NUcsT0FBTyxDQUFrQkMsT0FBTyxJQUFJO0FBQzdDLFlBQU0yMkcsY0FBYyxHQUFHLElBQUksQ0FBQ2lxQixnQ0FBZ0MsQ0FBQyxNQUFLO0FBQ2hFLGVBQU8sSUFBSSxDQUFDWixTQUFTLENBQUNubUIsaUJBQWlCLEVBQUU7QUFDM0MsT0FBQyxDQUFDO01BQ0Y3NUcsT0FBTyxDQUFDMjJHLGNBQWMsQ0FBQztBQUN6QixLQUFDLENBQUM7QUFDSjtFQUVPbUQsbUJBQW1CQSxDQUN4Qi9sRixNQUFnRDtBQUVoRCxXQUFPLElBQUloMEIsT0FBTyxDQUFrQkMsT0FBTyxJQUFJO0FBQzdDLFlBQU0yMkcsY0FBYyxHQUFHLElBQUksQ0FBQ2lxQixnQ0FBZ0MsQ0FBQyxNQUFLO0FBQ2hFLGVBQU8sSUFBSSxDQUFDWixTQUFTLENBQUNsbUIsbUJBQW1CLENBQUMvbEYsTUFBTSxDQUFDO0FBQ25ELE9BQUMsQ0FBQztNQUNGL3pCLE9BQU8sQ0FBQzIyRyxjQUFjLENBQUM7QUFDekIsS0FBQyxDQUFDO0FBQ0o7QUFFT3VELGNBQVlBLEdBQUE7QUFDakIsV0FBTyxJQUFJbjZHLE9BQU8sQ0FBa0JDLE9BQU8sSUFBSTtBQUM3QyxZQUFNMjJHLGNBQWMsR0FBRyxJQUFJLENBQUNpcUIsZ0NBQWdDLENBQUMsTUFBSztBQUNoRSxlQUFPLElBQUksQ0FBQ1osU0FBUyxDQUFDOWxCLFlBQVksRUFBRTtBQUN0QyxPQUFDLENBQUM7TUFDRmw2RyxPQUFPLENBQUMyMkcsY0FBYyxDQUFDO0FBQ3pCLEtBQUMsQ0FBQztBQUNKO0VBRVFpcUIsZ0NBQWdDQSxDQUN0Q0ksUUFBcUM7QUFFckMsVUFBTU4sZUFBZSxHQUFHLElBQUksQ0FBQ2hoQyxTQUFTLENBQ25DaEIsa0JBQWtCLEVBQUUsQ0FDcEIvbUYsR0FBRyxDQUFFMnFDLEdBQUcsSUFBS0EsR0FBRyxDQUFDaG5ELEVBQUUsQ0FBYTtBQUNuQyxVQUFNMmxJLGtCQUFrQixHQUFHLElBQUksQ0FBQ2Qsa0JBQWtCLENBQy9DemhDLGtCQUFrQixFQUFFLENBQ3BCL21GLEdBQUcsQ0FBRTJxQyxHQUFHLElBQUtBLEdBQUcsQ0FBQ2huRCxFQUFFLENBQWE7SUFDbkMsSUFBSW9sSSxlQUFlLENBQUNyK0gsTUFBTSxFQUFFLElBQUksQ0FBQ3E5RixTQUFTLENBQUNILGNBQWMsRUFBRTtJQUMzRCxJQUFJMGhDLGtCQUFrQixDQUFDNStILE1BQU0sRUFDM0IsSUFBSSxDQUFDODlILGtCQUFrQixDQUFDN2dDLGVBQWUsQ0FBQzJoQyxrQkFBa0IsQ0FBQztBQUM3RCxVQUFNdHFCLGNBQWMsR0FBR3FxQixRQUFRLEVBQUU7QUFDakMsUUFBSXJxQixjQUFjLEVBQUU7TUFDbEIsSUFBSSxDQUFDQSxjQUFjLENBQUMrcEIsZUFBZSxFQUNqQy9wQixjQUFjLENBQUMrcEIsZUFBZSxHQUFHQSxlQUFlO01BRWxELElBQUksQ0FBQ2hoQyxTQUFTLENBQUNYLGFBQWEsQ0FBQzRYLGNBQWMsQ0FBQytwQixlQUFlLENBQUM7QUFDOUQ7SUFDQSxJQUFJTyxrQkFBa0IsQ0FBQzUrSCxNQUFNLEVBQzNCLElBQUksQ0FBQzg5SCxrQkFBa0IsQ0FBQ3BoQyxhQUFhLENBQUNraUMsa0JBQWtCLENBQUM7QUFDM0QsV0FBT3RxQixjQUFjLElBQUksSUFBSSxDQUFDcXBCLFNBQVMsQ0FBQ3JwQixjQUFjO0FBQ3hEO0FBRUE7QUFDTzVzQixhQUFXQSxHQUFBO0FBQ2hCbHNGLFVBQU0sQ0FBQ3VDLEtBQUssQ0FBQyxvREFBb0QsQ0FBQztBQUNwRTtBQUVPNHBGLGNBQVlBLEdBQUE7SUFDakIsT0FBTyxJQUFJLENBQUN4a0UsSUFBSTtBQUNsQjtBQUVBO0VBQ09zb0QsS0FBS0EsQ0FBa0JBLEtBQVE7QUFDcEMsUUFBSWtCLE9BQU8sQ0FBQ0MsWUFBWSxDQUFDbkIsS0FBSyxDQUFDLEVBQUU7TUFDL0JrQixPQUFPLENBQUNHLHVCQUF1QixDQUFDdkIsVUFBVSxDQUFDLElBQUksQ0FBQzdhLGVBQWUsQ0FBQztBQUNoRSxhQUFPaWMsT0FBTyxDQUFDRyx1QkFBdUIsQ0FBQ3RCLEtBQUssQ0FBQ0MsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsUUFBSWtCLE9BQU8sQ0FBQ0UsbUJBQW1CLENBQUNwQixLQUFLLENBQUMsRUFBRTtNQUN0Q2tCLE9BQU8sQ0FBQ0ksOEJBQThCLENBQUN4QixVQUFVLENBQUMsSUFBSSxDQUFDN2EsZUFBZSxDQUFDO0FBQ3ZFLGFBQU9pYyxPQUFPLENBQUNJLDhCQUE4QixDQUFDdkIsS0FBSyxDQUFDQyxLQUFLLENBQUM7QUFDNUQ7QUFDQSxXQUFPLElBQUk7QUFDYjtFQUVPb3pELFVBQVVBLENBQUNwekQsS0FBWTtBQUc1QixXQUFPLElBQUk7QUFDYjtBQUVBO0FBQ095UyxNQUFJQSxDQUFDaFYsU0FBb0IsRUFBRTRhLEdBQVksRUFBRUMsVUFBb0I7SUFDbEUsSUFBSSxDQUFDMDVDLGdCQUFnQixDQUFDajhDLGFBQWEsQ0FBQ3RZLFNBQVMsRUFBRTZhLFVBQVUsRUFBRUQsR0FBRyxDQUFDO0FBQ2pFO0FBRU94QixrQkFBZ0JBLEdBQUE7QUFDckIsUUFBSSxDQUFDbTdDLGdCQUFnQixDQUFDbjdDLGdCQUFnQixFQUFFO0FBQ3hDLFFBQUksQ0FBQzV4QixlQUFlLENBQUNvUSxhQUFhLEVBQUU7QUFDdEM7QUFFT3FoQix3QkFBc0JBLEdBQUE7QUFDM0IsUUFBSSxDQUFDczdDLGdCQUFnQixDQUFDdDdDLHNCQUFzQixFQUFFO0FBQzlDLFFBQUksQ0FBQ3p4QixlQUFlLENBQUNvUSxhQUFhLEVBQUU7QUFDdEM7QUFFT2crRCx3QkFBc0JBLEdBQUE7QUFDM0IsUUFBSSxDQUFDckIsZ0JBQWdCLENBQUNqN0MsYUFBYSxFQUFFO0FBQ3JDLFFBQUksQ0FBQzl4QixlQUFlLENBQUNvUSxhQUFhLEVBQUU7QUFDdEM7RUFFTzhtQixxQkFBcUJBLENBQUM3aEMsTUFBNkI7QUFDeEQsUUFBSSxDQUFDMkssZUFBZSxDQUFDc1gsd0JBQXdCLENBQUNqaUIsTUFBTSxDQUFDO0FBQ3ZEO0FBRU84aEMsVUFBUUEsR0FBQTtBQUNiLFdBQU8sSUFBSSxDQUFDMWtFLElBQUksQ0FDYjRGLE9BQU8sQ0FBRXRRLElBQWMsSUFBSTs7TUFDMUIsT0FBTyxFQUFBMUUsRUFBQSxHQUFBMEUsSUFBSSxDQUFDUCxLQUFLLENBQUNpQyxVQUFVLGNBQUFwRyxFQUFBLHVCQUFBQSxFQUFBLENBQUV5TixXQUFXLE1BQUszQixXQUFXLENBQUNpb0UsTUFBTTtLQUNqRSxDQUFDLENBQ0R4eUUsR0FBRyxDQUFFbW5CLENBQVcsSUFBS0EsQ0FBQyxDQUFDdmtCLEtBQUssQ0FBQ0MsR0FBRyxDQUFDO0FBQ3RDO0FBRU80cEUsU0FBT0EsQ0FDWnVDLElBQTBELEVBQzFEUCxVQUFVLEdBQUcsSUFBSTtJQUVqQixJQUFJLENBQUMwNUMsZ0JBQWdCLENBQUNqOEMsYUFBYSxDQUFDOEMsSUFBSSxFQUFFUCxVQUFVLENBQUM7QUFDdkQ7QUFFQTtBQUNPZ0UsWUFBVUEsR0FBQTtBQUNmLFdBQU8sSUFBSXJxRixPQUFPLENBQUVDLE9BQU8sSUFBSTtBQUM3QixZQUFNb3FGLFVBQVUsR0FBRyxJQUFJLENBQUNyM0IsZUFBZSxDQUFDbjJELFFBQVEsQ0FBQ3dwRSxVQUFVLENBQUNpa0IsU0FBUyxDQUFDLFdBQVcsQ0FBQztNQUNsRnJxRixPQUFPLENBQUNvcUYsVUFBVSxDQUFDO0FBQ3JCLEtBQUMsQ0FBQztBQUNKO0VBRU9peEIsT0FBT0EsQ0FBQ0UsSUFBWTtBQUN6QixRQUFJLENBQUMwa0IsZ0JBQWdCLENBQUMza0IsVUFBVSxDQUFDQyxJQUFJLENBQUM7QUFDeEM7RUFFT3Z2QyxVQUFVQSxDQUFDMXdFLEVBQVU7SUFDMUIsTUFBTWl0QixLQUFLLEdBQUcsSUFBSSxDQUFDL0MsSUFBSSxDQUFDZ0QsTUFBTSxDQUFDbHRCLEVBQUUsQ0FBQztJQUNsQyxNQUFNdW1ELE9BQU8sR0FBa0IsRUFBRTtBQUNqQyxRQUFJdDVCLEtBQUssRUFBRTtBQUNUQSxXQUFLLENBQUN6dEIsT0FBTyxDQUFFZ2dCLElBQWMsSUFBSTtRQUMvQixJQUFJQSxJQUFJLENBQUNQLEtBQUssQ0FBQ2lDLFVBQVUsRUFDdkJxbEMsT0FBTyxDQUFDeG5ELElBQUksQ0FDVixJQUFJLENBQUMwNEQsZUFBZSxDQUFDeVksU0FBUyxDQUFDMXdELElBQUksQ0FBQ1AsS0FBSyxDQUFDaUMsVUFBVSxDQUFnQixDQUNyRTtBQUNMLE9BQUMsQ0FBQztBQUNKO0FBQ0EsV0FBT3FsQyxPQUFPO0FBQ2hCO0FBRUE7O0FBRUc7QUFFSSxRQUFNdS9FLGVBQWVBLENBQzFCcFQsR0FBVyxFQUNYSCxLQUE0QixHQUFBenZILFNBQVMsRUFDckNpdkgsYUFBYSxHQUFHLElBQUksRUFDcEI5aUMsWUFBWSxHQUFHLElBQUk7QUFFbkIsVUFBTXJxRixNQUFNLEdBQUcsSUFBSThzSCxhQUFhLENBQUMsSUFBSSxDQUFDeG5HLElBQUksRUFBRXdvRyxHQUFHLEVBQUVILEtBQUssRUFBRVIsYUFBYSxDQUFDO0FBQ3RFLFdBQU8sSUFBSSxDQUFDL2lDLFVBQVUsQ0FBQ3BxRixNQUFNLEVBQUVxcUYsWUFBWSxDQUFDO0FBQzlDO0VBRU8sTUFBTStuQyxJQUFJQSxDQUNmQyxJQUFZLEVBQ1pDLElBQVksRUFDWm51QixJQUFvQixFQUNwQitvQixTQUFrQjtBQUVsQixXQUFPLElBQUksQ0FBQzhTLGFBQWEsQ0FBQzVOLElBQUksQ0FBQ0MsSUFBSSxFQUFFQyxJQUFJLEVBQUVudUIsSUFBSSxFQUFFK29CLFNBQVMsQ0FBQztBQUM3RDtFQUVPLE1BQU0wRixNQUFNQSxHQUFBO0FBQ2pCLFdBQU8sSUFBSSxDQUFDb04sYUFBYSxDQUFDcE4sTUFBTSxFQUFFO0FBQ3BDO0FBRU95QixhQUFXQSxDQUFDOE0sV0FBdUIsRUFBRTlsQixJQUFZO0FBQ3RELFFBQUksQ0FBQzJrQixhQUFhLENBQUNyTixnQkFBZ0IsQ0FBQ3RYLElBQUksQ0FBQztBQUMzQztBQUVPK2xCLG1CQUFpQkEsQ0FBQ0QsV0FBdUIsRUFBRWg5QixJQUFvQjtJQUNwRSxJQUFJLENBQUM2N0IsYUFBYSxDQUFDck4sZ0JBQWdCLENBQUN6MEgsU0FBUyxFQUFFaW1HLElBQUksQ0FBQztBQUN0RDtFQUVPazlCLGtCQUFrQkEsQ0FBQ25rSSxLQUFjO0FBQ3RDLFFBQUksQ0FBQ3UrRixZQUFZLENBQUM3L0YsT0FBTyxHQUFHc0IsS0FBSztBQUNqQyxRQUFJLENBQUNzaUcsU0FBUyxDQUFDNWpHLE9BQU8sR0FBRyxDQUFDc0IsS0FBSztBQUNqQztFQUVPb2tJLHFCQUFxQkEsQ0FBQ3YwSCxPQUEyQjtBQUN0RCxRQUFJLENBQUMwdUYsWUFBWSxDQUFDMXVGLE9BQU8sR0FBR0EsT0FBTztBQUNyQztBQUVPdXVGLG1CQUFpQkEsR0FBQTtBQUN0QixRQUFJLENBQUNHLFlBQVksQ0FBQ0gsaUJBQWlCLEVBQUU7QUFDdkM7QUFFT3pnRyxTQUFPQSxHQUFBO0FBQ1o7QUFBQTtBQUVIOztBQ2hlSyxNQUFPMG1JLFdBQVksU0FBUW5wRSxtQkFBbUI7QUFDbER0K0QsYUFDRUEsQ0FBQSs0RCxlQUFnQyxFQUNoQzlsRCxPQUFBLEdBQTJCcWxELHNCQUFzQjs7SUFFakQsS0FBSyxDQUFDUyxlQUFlLENBQUM7QUFFdEIsVUFBTXFMLGFBQWEsR0FBR254RCxPQUFPLENBQUNzbEQsS0FBSyxHQUFHLElBQUl3SyxhQUFhLENBQUNoSyxlQUFlLENBQUMsR0FBRyxJQUFJO0FBRS9FLFVBQU02SyxTQUFTLEdBQUcsQ0FBQzN3RCxPQUFPLENBQUNzbEQsS0FBSyxHQUFHLElBQUkyQyxTQUFTLEVBQUUsR0FBRyxJQUFJO0FBQ3pELFFBQUkwSSxTQUFTLEVBQUU7TUFDYkEsU0FBUyxDQUFDMWtCLFNBQVMsQ0FBQyxDQUFDMzhDLFlBQVksQ0FBQzJ6QyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3ZEMHRCLGVBQVMsQ0FBQ3ZrQixhQUFhLENBQUM1QixnQkFBZ0IsQ0FBQ3FDLEtBQUssQ0FBQztBQUMvQzhqQixlQUFTLENBQUNwa0IsU0FBUyxDQUFDLElBQUksQ0FBQztBQUN6Qm9rQixlQUFTLENBQUM3a0IsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7TUFDcEM2a0IsU0FBUyxDQUFDNWtCLGFBQWEsQ0FBQ3RCLFVBQVUsQ0FBQ3o2QixLQUFLLEdBQUd5NkIsVUFBVSxDQUFDb0MsS0FBSyxDQUFDO0FBQzlEO0lBQ0EsTUFBTXVrQixRQUFRLEdBQUdweEQsT0FBTyxDQUFDc2xELEtBQUssR0FDMUI2TCxhQUFhLEtBQWIsUUFBQUEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFUixTQUFTLENBQUN6SSxZQUFZLEdBQ3JDLENBQUEvK0MsRUFBQSxHQUFBd25ELFNBQVMsS0FBVCxRQUFBQSxTQUFTLEtBQVQsa0JBQUFBLFNBQVMsQ0FBRW5sQixZQUFZLE1BQUUsUUFBQXJpQyxFQUFBLHVCQUFBQSxFQUFBLENBQUF6VyxPQUFPO0FBRXBDLFVBQU02K0QsZUFBZSxHQUFHLElBQUlwTSxZQUFZLEVBQUU7QUFDMUNvTSxtQkFBZSxDQUFDdGxCLFNBQVMsQ0FBQyxDQUN4QjM4QyxZQUFZLENBQUNpbEQsY0FBYyxFQUMzQmpsRCxZQUFZLENBQUMyekMsbUJBQW1CLEVBQ2hDM3pDLFlBQVksQ0FBQ282QixtQkFBbUIsRUFDaENwNkIsWUFBWSxDQUFDZzdDLG9CQUFvQixFQUNqQ2g3QyxZQUFZLENBQUNpN0MsMEJBQTBCLEVBQ3ZDajdDLFlBQVksQ0FBQ21xRCxLQUFLLENBQ25CLENBQUM7QUFDRjhYLG1CQUFlLENBQUNubEIsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNpRyxNQUFNLENBQUM7QUFFdEQsVUFBTStnQixvQkFBb0IsR0FBRyxJQUFJck0sWUFBWSxFQUFFO0FBQy9DcU0sd0JBQW9CLENBQUN2bEIsU0FBUyxDQUFDLENBQzdCMzhDLFlBQVksQ0FBQ2lsRCxjQUFjLEVBQzNCamxELFlBQVksQ0FBQzJ6QyxtQkFBbUIsRUFDaEMzekMsWUFBWSxDQUFDbzZCLG1CQUFtQixFQUNoQ3A2QixZQUFZLENBQUNnN0Msb0JBQW9CLEVBQ2pDaDdDLFlBQVksQ0FBQ2k3QywwQkFBMEIsRUFDdkNqN0MsWUFBWSxDQUFDOHRDLG1CQUFtQixFQUNoQzl0QyxZQUFZLENBQUNtaUUsYUFBYSxDQUMzQixDQUFDO0FBQ0ZELHdCQUFvQixDQUFDcGxCLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDa0csV0FBVyxDQUFDO0FBRWhFLFVBQU1raEIsZ0JBQWdCLEdBQUcsSUFBSTlHLFNBQVMsRUFBRTtJQUN4QzhHLGdCQUFnQixDQUFDNXhELE9BQU8sR0FBRztBQUFFNHFELGFBQU8sRUFBRSxLQUFLO01BQUVDLFVBQVUsRUFBRTdxRCxPQUFPLENBQUNzbEQ7S0FBTztJQUN4RXNNLGdCQUFnQixDQUFDL0ksVUFBVSxDQUN6QixRQUFRLEVBQ1I3b0QsT0FBTyxDQUFDc2xELEtBQUssR0FBRzZMLGFBQWEsS0FBYixRQUFBQSxhQUFhLEtBQWIsa0JBQUFBLGFBQWEsQ0FBRUosb0JBQW9CLEdBQUc1L0QsU0FBUyxDQUNoRTtBQUNEeWdFLG9CQUFnQixDQUFDeGtCLGtCQUFrQixHQUFHLElBQUksQ0FBQ21lLHNCQUFzQjtJQUVqRSxNQUFNOEYsdUJBQXVCLEdBQzNCLENBQUNyeEQsT0FBTyxDQUFDc2xELEtBQUssR0FBRzZMLGFBQWEsYUFBYkEsYUFBYSxLQUFiLGtCQUFBQSxhQUFhLENBQUV2RixhQUFhLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFFM0QsVUFBTThGLGlCQUFpQixHQUFHLElBQUk5SSxpQkFBaUIsRUFBRTtBQUNqRDhJLHFCQUFpQixDQUFDN0ksVUFBVSxDQUFDLFFBQVEsRUFBRXVJLFFBQVEsQ0FBQztBQUNoRE0scUJBQWlCLENBQUN0a0Isa0JBQWtCLEdBQUcsSUFBSSxDQUFDbWUsc0JBQXNCO0FBQ2xFbUcscUJBQWlCLENBQUM1bEIsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFFNUMsVUFBTTZsQixTQUFTLEdBQUcsSUFBSTdHLFNBQVMsRUFBRTtJQUNqQzZHLFNBQVMsQ0FBQzN4RCxPQUFPLEdBQUc7QUFBRTRxRCxhQUFPLEVBQUUsSUFBSTtBQUFFQyxnQkFBVSxFQUFFO0tBQU87SUFDeEQ4RyxTQUFTLENBQUM5SSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUFsN0MsRUFBQSxHQUFBK2pELGlCQUFpQixDQUFDbG1CLFlBQVksY0FBQTc5QixFQUFBLHVCQUFBQSxFQUFBLENBQUVqYixPQUFPLENBQUM7QUFDcEVpL0QsYUFBUyxDQUFDdmtCLGtCQUFrQixHQUFHLElBQUksQ0FBQ21lLHNCQUFzQjtBQUUxRCxVQUFNNU4sWUFBWSxHQUFHNEgsUUFBUSxDQUFDa0Msa0JBQWtCLENBQUM7QUFDL0N6aUQsZUFBUyxFQUFFMnpDLFlBQVk7QUFDdkJ6ekMsZUFBUyxFQUFFeXpDO0FBQ1osTUFBQztBQUNGLFVBQU04N0UsZ0JBQWdCLEdBQUcsSUFBSXR2RSxZQUFZLEVBQUU7QUFDM0NzdkUsb0JBQWdCLENBQUN4b0YsU0FBUyxDQUFDLENBQ3pCMzhDLFlBQVksQ0FBQ2lsRCxjQUFjLEVBQzNCamxELFlBQVksQ0FBQzJ6QyxtQkFBbUIsRUFDaEMzekMsWUFBWSxDQUFDbzZCLG1CQUFtQixFQUNoQ3A2QixZQUFZLENBQUNnN0Msb0JBQW9CLEVBQ2pDaDdDLFlBQVksQ0FBQ2k3QywwQkFBMEIsRUFDdkNqN0MsWUFBWSxDQUFDOHRDLG1CQUFtQixDQUNqQyxDQUFDO0FBQ0ZxM0Ysb0JBQWdCLENBQUNyb0YsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNpRyxNQUFNLENBQUM7QUFDdkRna0Ysb0JBQWdCLENBQUNsb0YsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNoQ2tvRixnQkFBZ0IsQ0FBQ2pwRixZQUFZLEdBQUdtUyxZQUFZO0FBRTVDLFVBQU0rMkUscUJBQXFCLEdBQUcsSUFBSXZ2RSxZQUFZLEVBQUU7QUFDaER1dkUseUJBQXFCLENBQUN6b0YsU0FBUyxDQUFDLENBQzlCMzhDLFlBQVksQ0FBQ2lsRCxjQUFjLEVBQzNCamxELFlBQVksQ0FBQzJ6QyxtQkFBbUIsRUFDaEMzekMsWUFBWSxDQUFDbzZCLG1CQUFtQixFQUNoQ3A2QixZQUFZLENBQUNnN0Msb0JBQW9CLEVBQ2pDaDdDLFlBQVksQ0FBQ2k3QywwQkFBMEIsRUFDdkNqN0MsWUFBWSxDQUFDOHRDLG1CQUFtQixFQUNoQzl0QyxZQUFZLENBQUNtaUUsYUFBYSxDQUMzQixDQUFDO0FBQ0ZpakUseUJBQXFCLENBQUN0b0YsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNrRyxXQUFXLENBQUM7QUFDakVna0YseUJBQXFCLENBQUNub0YsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNyQ21vRixxQkFBcUIsQ0FBQ2xwRixZQUFZLEdBQUdtUyxZQUFZO0FBRWpELFVBQU1nM0UsY0FBYyxHQUFHLElBQUk3cEUsU0FBUyxFQUFFO0lBQ3RDNnBFLGNBQWMsQ0FBQzMwSCxPQUFPLEdBQUc7QUFBRTRxRCxhQUFPLEVBQUUsS0FBSztNQUFFQyxVQUFVLEVBQUU3cUQsT0FBTyxDQUFDc2xEO0tBQU87SUFDdEVxdkUsY0FBYyxDQUFDOXJFLFVBQVUsQ0FDdkIsUUFBUSxFQUNSN29ELE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQUcsQ0FBQS8yQyxFQUFBLEdBQUE0aUQsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVOLFFBQVEsQ0FBQ3JsQixZQUFZLGNBQUFqOUIsRUFBQSx1QkFBQUEsRUFBQSxDQUFFN2IsT0FBTyxHQUFHdkIsU0FBUyxDQUMxRTtBQUNEd2pJLGtCQUFjLENBQUN2bkYsa0JBQWtCLEdBQUcsSUFBSSxDQUFDbWUsc0JBQXNCO0lBQy9Eb3BFLGNBQWMsQ0FBQ25wRixZQUFZLEdBQUdtUyxZQUFZO0FBRTFDLFVBQU0rUyxPQUFPLEdBQUcsSUFBSXhDLE9BQU8sRUFBRTtBQUM3QndDLFdBQU8sQ0FBQ2xDLFlBQVksR0FBRzdRLFlBQVksQ0FBQ2pyRCxPQUFPO0FBQzNDZytELFdBQU8sQ0FBQ3RqQixrQkFBa0IsR0FBRyxJQUFJLENBQUNtZSxzQkFBc0I7QUFFeEQsVUFBTXdsRSxVQUFVLEdBQUcsSUFBSVIsVUFBVSxFQUFFO0lBQ25DUSxVQUFVLENBQUNsb0UsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFBcjZDLEVBQUEsR0FBQWtpRCxPQUFPLENBQUNsbEIsWUFBWSxjQUFBaDlCLEVBQUEsdUJBQUFBLEVBQUEsQ0FBRTliLE9BQU8sQ0FBQztJQUNoRXErSCxVQUFVLENBQUMvd0gsT0FBTyxHQUFHO01BQUVxd0gsU0FBUyxFQUFFRixTQUFTLENBQUMxNkg7S0FBTztBQUVuRCxVQUFNbzhELFdBQVcsR0FBRyxJQUFJdkYsV0FBVyxFQUFFO0FBQ3JDdUYsZUFBVyxDQUFDemxCLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDc0MsT0FBTyxDQUFDO0lBQ25EK2tCLFdBQVcsQ0FBQzVsQixTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUMyekMsbUJBQW1CLENBQUMsQ0FBQztBQUN6RDR1QixlQUFXLENBQUMvbEIsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDdEMrbEIsZUFBVyxDQUFDOWxCLGFBQWEsQ0FBQ3RCLFVBQVUsQ0FBQ3o2QixLQUFLLEdBQUd5NkIsVUFBVSxDQUFDb0MsS0FBSyxHQUFHcEMsVUFBVSxDQUFDcUMsT0FBTyxDQUFDO0FBRW5GLFVBQU1nbEIsZUFBZSxHQUFHLElBQUl0RixlQUFlLEVBQUU7QUFDN0NzRixtQkFBZSxDQUFDMWxCLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDc0MsT0FBTyxDQUFDO0lBQ3ZEZ2xCLGVBQWUsQ0FBQzdsQixTQUFTLENBQUMsQ0FBQzM4QyxZQUFZLENBQUMyekMsbUJBQW1CLENBQUMsQ0FBQztBQUM3RDZ1QixtQkFBZSxDQUFDL2xCLGFBQWEsQ0FBQ3RCLFVBQVUsQ0FBQ29DLEtBQUssQ0FBQztBQUUvQyxVQUFNK25GLG1CQUFtQixHQUFHLElBQUl0b0UsV0FBVyxFQUFFO0FBQzdDc29FLHVCQUFtQixDQUFDeG9GLGFBQWEsQ0FBQzVCLGdCQUFnQixDQUFDc0MsT0FBTyxDQUFDO0lBQzNEOG5GLG1CQUFtQixDQUFDM29GLFNBQVMsQ0FBQyxDQUFDMzhDLFlBQVksQ0FBQzJ6QyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pFMnhGLHVCQUFtQixDQUFDOW9GLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzlDOG9GLHVCQUFtQixDQUFDN29GLGFBQWEsQ0FDL0J0QixVQUFVLENBQUN6NkIsS0FBSyxHQUFHeTZCLFVBQVUsQ0FBQ29DLEtBQUssR0FBR3BDLFVBQVUsQ0FBQ3FDLE9BQU8sQ0FDekQ7SUFDRDhuRixtQkFBbUIsQ0FBQ3BwRixZQUFZLEdBQUdtUyxZQUFZO0FBRS9DLFVBQU1rM0UsdUJBQXVCLEdBQUcsSUFBSXJvRSxlQUFlLEVBQUU7QUFDckRxb0UsMkJBQXVCLENBQUN6b0YsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNzQyxPQUFPLENBQUM7SUFDL0QrbkYsdUJBQXVCLENBQUM1b0YsU0FBUyxDQUFDLENBQUMzOEMsWUFBWSxDQUFDMnpDLG1CQUFtQixDQUFDLENBQUM7QUFDckU0eEYsMkJBQXVCLENBQUM5b0YsYUFBYSxDQUFDdEIsVUFBVSxDQUFDb0MsS0FBSyxDQUFDO0lBQ3ZEZ29GLHVCQUF1QixDQUFDcnBGLFlBQVksR0FBR21TLFlBQVk7QUFFbkQsVUFBTW9VLFdBQVcsR0FBRyxJQUFJNU0sWUFBWSxFQUFFO0FBQ3RDNE0sZUFBVyxDQUFDOWxCLFNBQVMsQ0FBQyxDQUFDMzhDLFlBQVksQ0FBQ2svQixPQUFPLEVBQUVsL0IsWUFBWSxDQUFDMGlFLFlBQVksQ0FBQyxDQUFDO0lBRXhFLE1BQU1WLDJCQUEyQixHQUFHdHhELE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQzdDLENBQUM2TCxhQUFhLEtBQWIsUUFBQUEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFUixTQUFTLEVBQUVRLGFBQWEsS0FBYixRQUFBQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVOLFFBQVEsQ0FBQyxHQUNuREYsU0FBUyxHQUNULENBQUNBLFNBQVMsQ0FBQyxHQUNYLEVBQUU7QUFFTixRQUFJLENBQUNuRixZQUFZLENBQUNwK0QsSUFBSSxDQUNwQixHQUFHaWtFLHVCQUF1QixFQUMxQlEsV0FBVyxFQUNYTixlQUFlLEVBQ2ZDLG9CQUFvQixFQUNwQixJQUFJeHhELE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQUcsQ0FBQ3NNLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQzVDRSxlQUFlLEVBQ2ZDLFdBQVcsQ0FDWjtJQUNELElBQUksQ0FBQ3RHLGdCQUFnQixDQUFDcitELElBQUk7QUFDeEI7QUFDQTtBQUNBLE9BQUdra0UsMkJBQTJCLEVBQzlCc2pFLG1CQUFtQixFQUNuQkgsZ0JBQWdCLEVBQ2hCQyxxQkFBcUIsRUFDckJHLHVCQUF1QixFQUN2QixJQUFJNzBILE9BQU8sQ0FBQ3NsRCxLQUFLLEdBQUcsQ0FBQ3F2RSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFDMUNqa0UsT0FBTyxFQUNQcWdFLFVBQVUsRUFDVnIvRCxpQkFBaUIsRUFDakJDLFNBQVMsRUFDVEksV0FBVyxDQUNaO0lBQ0QsSUFBSSxDQUFDckcsZ0JBQWdCLENBQUN0K0QsSUFBSSxDQUFDMmpJLFVBQVUsRUFBRXAvRCxTQUFTLEVBQUVJLFdBQVcsQ0FBQztBQUU5RCxRQUFJLENBQUN2TSxRQUFRLEdBQUcsSUFBSSxDQUFDZ0csWUFBWTtBQUNuQztBQUVPbmUsUUFBTUEsR0FBQTtBQUNYO0lBQ0EsTUFBTXluRixhQUFhLEdBQUcsSUFBSSxDQUFDdHZFLFFBQVEsS0FBSyxJQUFJLENBQUNrRyxnQkFBZ0I7QUFDN0QsVUFBTS94QyxHQUFHLEdBQUcsS0FBSyxDQUFDMHpCLE1BQU0sRUFBRTtBQUMxQixRQUFJeW5GLGFBQWEsRUFBRTtNQUNqQixJQUFJLENBQUMxdUUsS0FBSyxFQUFFO0FBQ1osYUFBTyxJQUFJO0FBQ2I7QUFDQSxXQUFPenNDLEdBQUc7QUFDWjtBQUNEOztBQ3RNSyxNQUFPbzdHLG9CQUFxQixTQUFRaFYsYUFBYTtBQUNyRGh6SCxjQUFZbXpILFVBQXFCLEVBQUVsSSxZQUFxQixFQUFFZ2QsVUFBbUI7QUFDM0UsU0FBSyxDQUFDOVUsVUFBVSxFQUFFOFUsVUFBVSxJQUFJLEVBQUUsRUFBRTdqSSxTQUFTLEVBQUVBLFNBQVMsRUFBRTZtSCxZQUFZLENBQUM7QUFDekU7RUFFVXlJLGdCQUFnQkEsQ0FDeEJ4SSxTQUFpQixFQUNqQmdkLFVBQW1CLEVBQ25CdFUsY0FBd0IsRUFDeEIzSSxZQUFzQjtBQU10QjtBQUNBLFdBQU9xSixvQkFBb0IsQ0FBQzZULGlCQUFpQixDQUFDLEVBQUUsQ0FBQztBQUNuRDtFQUVPLE1BQU1oaUksSUFBSUEsR0FBQTs7SUFDZixNQUFNaWlJLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQ2xpSSxNQUFNLENBQUNtaUksYUFBYSxFQUFFO0FBQ3BELFFBQUksQ0FBQ0QsVUFBVSxJQUFJLElBQUksQ0FBQ2xkLFNBQVMsRUFBRTtBQUNqQ3JuSCxZQUFNLENBQUN1QyxLQUFLLENBQUMsaUJBQWlCLENBQUM7QUFDL0IsYUFBTyxLQUFLO0FBQ2Q7QUFDQTtBQUNBLFFBQUksQ0FBQzhrSCxTQUFTLEdBQ1osSUFBSSxDQUFDQSxTQUFTLElBQUksU0FBUyxNQUFDa2QsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUU1NEcsTUFBaUIsTUFBSSxRQUFBcFQsRUFBQSxjQUFBQSxFQUFBLFlBQVMsQ0FBRTtBQUMxRSxXQUFPLEtBQUssQ0FBQ2pXLElBQUksRUFBRTtBQUNyQjtBQUNEOztBQzlCSyxNQUFPbWlJLFdBQVksU0FBUTc2QyxNQUFNO0VBQzlCLE1BQU1wOUUsSUFBSUEsR0FBQTtBQUNmLFVBQU0sS0FBSyxDQUFDQSxJQUFJLEVBQUU7QUFDbEI7SUFDQSxJQUFJLENBQUNrNUUsV0FBVyxFQUFFLENBQUMzbUYsUUFBUSxDQUFDd3FELFNBQVMsR0FBRyxJQUFJO0lBQzVDLElBQUksQ0FBQ204QixXQUFXLEVBQUUsQ0FBQzNtRixRQUFRLENBQUNrcEUsY0FBYyxHQUFHLElBQUk7SUFDakQsSUFBSSxDQUFDeWQsV0FBVyxFQUFFLENBQUMzbUYsUUFBUSxDQUFDbXBFLGNBQWMsR0FBRyxJQUFJO0lBQ2pELElBQUksQ0FBQ3dkLFdBQVcsRUFBRSxDQUFDM21GLFFBQVEsQ0FBQ29wRSxnQkFBZ0IsR0FBRyxJQUFJO0FBRW5EO0lBQ0EsSUFBSSxDQUFDdWQsV0FBVyxFQUFFLENBQUMzbUYsUUFBUSxDQUFDMmxJLEVBQUUsQ0FBQ3ptSSxPQUFPLEdBQUcsSUFBSTtBQUM3QztBQUNBLFFBQUksQ0FBQ3luRixXQUFXLEVBQUUsQ0FBQzNtRixRQUFRLENBQUM0bEksZ0JBQWdCLENBQUMsSUFBSSxDQUFDQyxlQUFlLENBQUMxdEYsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTdFO0FBQ0EsUUFBSSxDQUFDNzZDLEVBQUUsQ0FBQzBCLFdBQVcsQ0FBQ2d2RixZQUFZLEVBQUUsTUFBSztBQUNyQyxXQUFLLE1BQU1wb0YsQ0FBQyxJQUFJLElBQUksQ0FBQytnRixXQUFXLEVBQUUsQ0FBQy92QixPQUFPLENBQUMzWSxPQUFPLEVBQ2hELElBQUksQ0FBQzBvQyxXQUFXLEVBQUUsQ0FBQy92QixPQUFPLENBQUMzWSxPQUFPLENBQUNyNEMsQ0FBQyxDQUFDLENBQUMyeEIsWUFBWSxDQUFDdUMsTUFBTSxDQUFDZ2pCLFNBQVMsRUFBRTtBQUN6RSxLQUFDLENBQUM7QUFDSjtBQUVBO0FBQ1VZLFFBQU1BLEdBQUE7SUFDZC83QyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUNvdEQsVUFBVSxDQUFDLENBQUM5d0QsT0FBTyxDQUFFMHVGLEdBQWMsSUFBSTtNQUN4REEsR0FBRyxDQUFDNTBELFFBQVEsRUFBRTtBQUNoQixLQUFDLENBQUM7QUFDSjtBQUVBOztBQUVHO0FBQ082dEcsaUJBQWVBLEdBQUE7SUFDdkIsTUFBTTdsSSxRQUFRLEdBQUcsSUFBSSxDQUFDMm1GLFdBQVcsRUFBRSxDQUFDM21GLFFBQVE7SUFDNUMsTUFBTXlYLE1BQU0sR0FBRyxJQUFJLENBQUNrdkUsV0FBVyxFQUFFLENBQUNqd0IsZUFBb0M7QUFDdEUsVUFBTW92RSxXQUFXLEdBQUdydUgsTUFBTSxDQUFDcWlCLE1BQU0sQ0FBQzBzQixJQUFJO0FBQ3RDL3VDLFVBQU0sQ0FBQ3FpQixNQUFNLENBQUNnakIsU0FBUyxFQUFFO0FBQ3pCOThDLFlBQVEsQ0FBQzA5QyxNQUFNLENBQUMsSUFBSSxDQUFDaXBDLFdBQVcsRUFBRSxDQUFDaGhELEtBQUssRUFBRWx1QixNQUFNLENBQUM7QUFDakRBLFVBQU0sQ0FBQ3FpQixNQUFNLENBQUMxd0IsR0FBRyxDQUFDMDhILFdBQVcsQ0FBQztBQUNoQztBQUNEOztBQzlCTSxlQUFlQyxlQUFlQSxDQUNuQzNVLEdBQVcsRUFDWFosU0FBa0I7QUFFbEI7QUFDQSxNQUFJWSxHQUFHLENBQUN2dkgsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU9ta0ksa0JBQWtCLENBQUM1VSxHQUFHLEVBQUVaLFNBQVMsQ0FBQztBQUN0RSxTQUFPeVYsa0JBQWtCLENBQUM3VSxHQUFHLEVBQUVaLFNBQVMsQ0FBQztBQUMzQztBQUVBLGVBQWV3VixrQkFBa0JBLENBQUM1VSxHQUFXLEVBQUVaLFNBQWtCOztBQUMvRCxRQUFNMFYsTUFBTSxHQUFHLElBQUk3VSxHQUFHLENBQUNELEdBQUcsQ0FBQztBQUMzQixRQUFNSSxRQUFRLEdBQUdKLEdBQUcsQ0FBQzN2SCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvckIsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFM0QsTUFBTXM1RyxRQUFRLEdBQUcsRUFBRTtBQUNuQjtBQUNBLE1BQUkvVSxHQUFHLENBQUN2dkgsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzNCLFVBQU11a0ksUUFBUSxHQUFHaFYsR0FBRyxDQUFDM3ZILEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ29yQixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUMzRCxVQUFNdzVHLE1BQU0sR0FBRyxNQUFNQyw0QkFBNEIsQ0FDL0M7TUFDRS9nRyxNQUFNLEVBQUUyZ0csTUFBTSxDQUFDM2dHLE1BQU07TUFDckJpc0YsUUFBUTtBQUNSNFU7S0FDRCxFQUNENVYsU0FBUyxDQUNWO0FBQ0QyVixZQUFRLENBQUMxb0ksSUFBSSxDQUFDNG9JLE1BQU0sQ0FBQztBQUN2QjtBQUVBO0FBQ0EsTUFBSWpWLEdBQUcsQ0FBQ3Z2SCxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUVza0ksUUFBUSxDQUFDMW9JLElBQUksQ0FBQzJ6SCxHQUFHLENBQUM7QUFFL0M7QUFDQTtBQUNBLE1BQUlBLEdBQUcsQ0FBQ3Z2SCxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDNUIsTUFBTTBrSSxZQUFZLEdBQUcsSUFBSUMsZUFBZSxDQUFDTixNQUFNLENBQUNoN0IsTUFBTSxDQUFDO0lBQ3ZELE1BQU11N0IsTUFBTSxHQUFHLENBQUFqdEgsRUFBQSxHQUFBK3NILFlBQVksQ0FBQ25sSSxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQUUsUUFBQW9ZLEVBQUEsdUJBQUFBLEVBQUEsQ0FBQS9YLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDdEQsSUFBSWdsSSxNQUFNLEtBQUtqbEksU0FBUyxFQUFFO0FBQ3hCLFdBQUssTUFBTWtsSSxLQUFLLElBQUlELE1BQU0sRUFBRTtBQUMxQixZQUFJQyxLQUFLLENBQUNqaEksTUFBTSxLQUFLLEVBQUUsRUFBRTtBQUN2QjBnSSxrQkFBUSxDQUFDMW9JLElBQUksQ0FDWCxNQUFNNm9JLDRCQUE0QixDQUNoQztZQUNFL2dHLE1BQU0sRUFBRTJnRyxNQUFNLENBQUMzZ0csTUFBTTtZQUNyQmlzRixRQUFRO0FBQ1I0VSxvQkFBUSxFQUFFTTtXQUNrQixFQUM5QmxXLFNBQVMsQ0FDVixDQUNGO0FBQ0gsU0FBQyxNQUFNO0FBQ0wyVixrQkFBUSxDQUFDMW9JLElBQUksQ0FBQyxHQUFHeW9JLE1BQU0sQ0FBQzNnRyxNQUFNLFlBQVlpc0YsUUFBUSxZQUFZa1YsS0FBSyxFQUFFLENBQUM7QUFDeEU7QUFDRjtBQUNGO0FBQ0Y7QUFFQSxTQUFPUCxRQUFRO0FBQ2pCO0FBRUEsZUFBZUcsNEJBQTRCQSxDQUN6Q3RqQixHQUE4QixFQUM5QndOLFNBQWtCO0FBRWxCLFFBQU11RCxPQUFPLEdBQXNEO0FBQ2pFLGtCQUFjLEVBQUUsa0JBQWtCO0FBQ2xDQyxpQkFBYSxFQUFFO0dBQ2hCO0FBQ0QsTUFBSXhELFNBQVMsRUFBRTtBQUNidUQsV0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFVBQVV2RCxTQUFTLENBQUU7QUFDbEQ7RUFDQSxNQUFNdDBGLEdBQUcsR0FBRyxNQUFNNDNGLEtBQUssQ0FBQyxHQUFHOVEsR0FBRyxDQUFDejlFLE1BQU0sVUFBVSxFQUFFO0FBQy9Db2hHLFVBQU0sRUFBRSxNQUFNO0lBQ2Q1UyxPQUFPO0FBQ1AzdkIsUUFBSSxFQUFFdDRDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO0FBQ25CbWxCLFdBQUssRUFBRTs7Ozs7Ozs7QUFRSjtBQUNIMDFELGVBQVMsRUFBRTtRQUFFcFYsUUFBUSxFQUFFeE8sR0FBRyxDQUFDd08sUUFBUTtRQUFFNFUsUUFBUSxFQUFFcGpCLEdBQUcsQ0FBQ29qQjtBQUFVO0tBQzlEO0FBQ0YsSUFBQztFQUVGLE1BQU07QUFBRW5oSTtBQUFNLE1BQUcsTUFBTWkzQixHQUFHLENBQUMycUcsSUFBSSxFQUFFO0FBQ2pDLFNBQU8sR0FBRzdqQixHQUFHLENBQUN6OUUsTUFBTSxZQUFZeTlFLEdBQUcsQ0FBQ3dPLFFBQVEsQ0FBWXZzSCxlQUFJLENBQUM2aEksTUFBTSxDQUFDQyxNQUFNLENBQUNDLGdCQUFnQixDQUFFO0FBQy9GO0FBRUEsZUFBZWYsa0JBQWtCQSxDQUFDN1UsR0FBVyxFQUFFWixTQUFrQjtFQUMvRCxNQUFNMFYsTUFBTSxHQUFHLElBQUk3VSxHQUFHLENBQUM0VixTQUFTLENBQUM3VixHQUFHLENBQUMsQ0FBQztFQUN0QyxNQUFNdnNFLE1BQU0sR0FBR3FoRixNQUFNLENBQUNnQixJQUFJLENBQUNDLEtBQUssQ0FBQyxRQUFRLENBQUM7RUFDMUMsSUFBSSxDQUFDdGlGLE1BQU0sRUFBRTtJQUNYLE9BQU8xaEQsT0FBTyxDQUFDRSxNQUFNLENBQUMsSUFBSUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFDdEU7QUFFQSxRQUFNMmpJLFNBQVMsR0FBR2xCLE1BQU0sQ0FBQ2dCLElBQUksQ0FBQ3psSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvckIsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDckUsUUFBTWtuRyxPQUFPLEdBQXNEO0FBQ2pFLGtCQUFjLEVBQUUsa0JBQWtCO0FBQ2xDQyxpQkFBYSxFQUFFO0dBQ2hCO0FBRUQsTUFBSXhELFNBQVMsRUFBRTtBQUNidUQsV0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFVBQVV2RCxTQUFTLENBQUU7QUFDbEQ7QUFFQSxRQUFNeE4sR0FBRyxHQUF3QjtJQUMvQno5RSxNQUFNLEVBQUUyZ0csTUFBTSxDQUFDM2dHLE1BQU07QUFDckI2aEc7R0FDRDtBQUVELFFBQU1DLFNBQVMsR0FBR0MsYUFBYSxDQUFDQyxXQUFXLENBQUNDLGtCQUFrQixDQUM1REMsa0JBQWtCLENBQUM1aUYsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzlCO0VBRUQsTUFBTTZpRixRQUFRLEdBQUcsRUFBRTtBQUNuQixPQUFLLElBQUk5aEksQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHeWhJLFNBQVMsQ0FBQzVoSSxNQUFNLEVBQUVHLENBQUMsRUFBRSxFQUFFO0FBQ3pDLFVBQU1nb0YsUUFBUSxHQUE2Q3k1QyxTQUFTLENBQUN6aEksQ0FBQyxDQUFDO0lBRXZFLElBQUkwaEksYUFBYSxDQUFDQyxXQUFXLENBQUNJLGdCQUFnQixDQUFDLzVDLFFBQVEsQ0FBQyxFQUFFO01BQ3hEODVDLFFBQVEsQ0FBQ2pxSSxJQUFJLENBQUNtcUksbUJBQW1CLENBQUM1a0IsR0FBRyxFQUFFcDFCLFFBQVEsQ0FBQyxDQUFDO0tBQ2xELE1BQU0sSUFBSTA1QyxhQUFhLENBQUNDLFdBQVcsQ0FBQ00sZUFBZSxDQUFDajZDLFFBQVEsQ0FBQyxFQUFFO01BQzlEODVDLFFBQVEsQ0FBQ2pxSSxJQUFJLENBQUNxcUksa0JBQWtCLENBQUMvVCxPQUFPLEVBQUUvUSxHQUFHLEVBQUVwMUIsUUFBUSxDQUFDLENBQUM7S0FDMUQsTUFBTSxJQUFJMDVDLGFBQWEsQ0FBQ0MsV0FBVyxDQUFDUSxtQkFBbUIsQ0FBQ242QyxRQUFRLENBQUMsRUFBRTtNQUNsRTg1QyxRQUFRLENBQUNqcUksSUFBSSxDQUFDdXFJLHFCQUFxQixDQUFDalUsT0FBTyxFQUFFL1EsR0FBRyxDQUFDLENBQUM7QUFDcEQ7QUFDRjtFQUVBLElBQUk7SUFDRixNQUFNdDhELE9BQU8sR0FBRyxNQUFNdmpELE9BQU8sQ0FBQ2tvQixHQUFHLENBQUNxOEcsUUFBUSxDQUFDO0FBQzNDLFdBQU9oaEYsT0FBTyxDQUFDbkgsT0FBTyxDQUFFbjBCLEdBQUcsSUFBTS9qQixLQUFLLENBQUMwb0MsT0FBTyxDQUFDM2tCLEdBQUcsQ0FBQyxHQUFHQSxHQUFHLEdBQUcsQ0FBQ0EsR0FBRyxDQUFFLENBQUM7R0FDcEUsQ0FBQyxPQUFPbUgsQ0FBQyxFQUFFO0FBQ1Z0eEIsVUFBTSxDQUFDdUMsS0FBSyxDQUFDK3VCLENBQUMsQ0FBQztBQUNmLFdBQU8sRUFBRTtBQUNYO0FBQ0Y7QUFFQSxlQUFlcTFHLG1CQUFtQkEsQ0FDaEM1a0IsR0FBd0IsRUFDeEJwMUIsUUFBd0Q7QUFFeEQsU0FBT3pxRixPQUFPLENBQUNDLE9BQU8sQ0FDcEIsQ0FBRzQvRyxLQUFHLENBQUN6OUUsTUFBTSxZQUFZeTlFLEdBQUcsQ0FBQ29rQixTQUFTLFlBQVl4NUMsUUFBUSxDQUFDenBGLFFBQVEsRUFBRSxFQUFFLENBQ3hFO0FBQ0g7QUFFQSxlQUFlMmpJLGtCQUFrQkEsQ0FDL0IvVCxPQUdDLEVBQ0QvUSxHQUF3QixFQUN4QnAxQixRQUF1RDtFQUV2RCxPQUFPQSxRQUFRLENBQUNxNkMsU0FBUyxHQUNyQkMsb0JBQW9CLENBQUNuVSxPQUFPLEVBQUUvUSxHQUFHLEVBQUVwMUIsUUFBUSxDQUFDLEdBQzVDdTZDLHdCQUF3QixDQUFDcFUsT0FBTyxFQUFFL1EsR0FBRyxFQUFFcDFCLFFBQVEsQ0FBQztBQUN0RDtBQUVBLGVBQWVvNkMscUJBQXFCQSxDQUNsQ2pVLE9BR0MsRUFDRC9RLEdBQXdCO0FBRXhCLFNBQU9vbEIsaUJBQWlCLENBQUNyVSxPQUFPLEVBQUUvUSxHQUFHLENBQUM7QUFDeEM7QUFFQSxlQUFlbWxCLHdCQUF3QkEsQ0FDckNwVSxPQUEwRCxFQUMxRC9RLEdBQXdCLEVBQ3hCcDFCLFFBQXVEO0VBRXZELE1BQU0xeEQsR0FBRyxHQUFHLE1BQU00M0YsS0FBSyxDQUFDLEdBQUc5USxHQUFHLENBQUN6OUUsTUFBTSxVQUFVLEVBQUU7QUFDL0NvaEcsVUFBTSxFQUFFLE1BQU07SUFDZDVTLE9BQU87QUFDUDN2QixRQUFJLEVBQUV0NEMsSUFBSSxDQUFDQyxTQUFTLENBQUM7QUFDbkJtbEIsV0FBSyxFQUFFOzs7Ozs7Ozs7Ozs7QUFZSjtBQUNIMDFELGVBQVMsRUFBRTtRQUNUUSxTQUFTLEVBQUVwa0IsR0FBRyxDQUFDb2tCLFNBQVM7UUFDeEJpQixPQUFPLEVBQUV6NkMsUUFBUSxDQUFDeTZDO0FBQ25CO0tBQ0Y7QUFDRixJQUFDO0VBQ0YsSUFBSTtBQUNGLFVBQU1wakksSUFBSSxHQUFHLE1BQU1xakksV0FBVyxDQUFDcHNHLEdBQUcsQ0FBQztJQUNuQyxPQUFPLEdBQUc4bUYsR0FBRyxDQUFDejlFLE1BQU0sWUFBWXk5RSxHQUFHLENBQUNva0IsU0FBUyxZQUFZbmlJLElBQUksQ0FBQ2d0RSxPQUFPLENBQUN0MEQsS0FBSyxDQUFDNHFILFFBQVEsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDeEIsZ0JBQWdCLENBQUU7R0FDakgsQ0FBQyxPQUFPejBHLENBQVUsRUFBRTtJQUNuQixPQUFPcHZCLE9BQU8sQ0FBQ0UsTUFBTSxDQUNuQixJQUFJSSxLQUFLLENBQ1AsQ0FBeUN1L0csMkNBQUcsQ0FBQ29rQixTQUFTLENBQ3BEeDVDLHFCQUFRLENBQUN5NkMsT0FDWCxDQUFZOTFHLFlBQUMsWUFBWTl1QixLQUFLLEdBQUc4dUIsQ0FBQyxDQUFDN3VCLE9BQU8sR0FBRzZ1QixDQUFDLENBQUUsRUFDakQsQ0FDRjtBQUNIO0FBQ0Y7QUFFQSxlQUFlMjFHLG9CQUFvQkEsQ0FDakNuVSxPQUEwRCxFQUMxRC9RLEdBQXdCLEVBQ3hCcDFCLFFBQXVEO0VBRXZELE1BQU0xeEQsR0FBRyxHQUFHLE1BQU00M0YsS0FBSyxDQUFDLEdBQUc5USxHQUFHLENBQUN6OUUsTUFBTSxVQUFVLEVBQUU7QUFDL0NvaEcsVUFBTSxFQUFFLE1BQU07SUFDZDVTLE9BQU87QUFDUDN2QixRQUFJLEVBQUV0NEMsSUFBSSxDQUFDQyxTQUFTLENBQUM7QUFDbkJtbEIsV0FBSyxFQUFFOzs7Ozs7Ozs7O0FBVUo7QUFDSDAxRCxlQUFTLEVBQUU7UUFDVFEsU0FBUyxFQUFFcGtCLEdBQUcsQ0FBQ29rQixTQUFTO1FBQ3hCaUIsT0FBTyxFQUFFejZDLFFBQVEsQ0FBQ3k2QyxPQUFPO1FBQ3pCSixTQUFTLEVBQUVyNkMsUUFBUSxDQUFDcTZDO0FBQ3JCO0tBQ0Y7QUFDRixJQUFDO0VBQ0YsSUFBSTtBQUNGLFVBQU1oakksSUFBSSxHQUFHLE1BQU1xakksV0FBVyxDQUFDcHNHLEdBQUcsQ0FBQztBQUNuQyxXQUFPLEdBQUc4bUYsR0FBRyxDQUFDejlFLE1BQU0sQ0FBWXk5RSxjQUFHLENBQUNva0IsU0FBUyxZQUFZbmlJLElBQUksQ0FBQ2d0RSxPQUFPLENBQUN0MEQsS0FBSyxDQUFDOCtHLE9BQU8sQ0FBQ3VLLGdCQUFnQixDQUFFO0dBQ3ZHLENBQUMsT0FBT3owRyxDQUFDLEVBQUU7SUFDVixPQUFPcHZCLE9BQU8sQ0FBQ0UsTUFBTSxDQUNuQixJQUFJSSxLQUFLLENBQ1AsQ0FBeUN1L0csMkNBQUcsQ0FBQ29rQixTQUFTLENBQ3BEeDVDLHFCQUFRLENBQUN5NkMsT0FDWCxDQUFZOTFHLFlBQUMsWUFBWTl1QixLQUFLLEdBQUc4dUIsQ0FBQyxDQUFDN3VCLE9BQU8sR0FBRzZ1QixDQUFDLENBQUUsRUFDakQsQ0FDRjtBQUNIO0FBQ0Y7QUFFQSxlQUFlNjFHLGlCQUFpQkEsQ0FDOUJyVSxPQUEwRCxFQUMxRC9RLEdBQXdCO0VBRXhCLE1BQU05bUYsR0FBRyxHQUFHLE1BQU00M0YsS0FBSyxDQUFDLEdBQUc5USxHQUFHLENBQUN6OUUsTUFBTSxVQUFVLEVBQUU7QUFDL0NvaEcsVUFBTSxFQUFFLE1BQU07SUFDZDVTLE9BQU87QUFDUDN2QixRQUFJLEVBQUV0NEMsSUFBSSxDQUFDQyxTQUFTLENBQUM7QUFDbkJtbEIsV0FBSyxFQUFFOzs7Ozs7Ozs7Ozs7OztBQWNKO0FBQ0gwMUQsZUFBUyxFQUFFO1FBQ1RRLFNBQVMsRUFBRXBrQixHQUFHLENBQUNva0I7QUFDaEI7S0FDRjtBQUNGLElBQUM7RUFDRixJQUFJO0FBQ0YsVUFBTW5pSSxJQUFJLEdBQUcsTUFBTXFqSSxXQUFXLENBQUNwc0csR0FBRyxDQUFDO0lBQ25DLE1BQU11c0csSUFBSSxHQUFhLEVBQUU7SUFDekJ4akksSUFBSSxDQUFDZ3RFLE9BQU8sQ0FBQ3kyRCxNQUFNLENBQUNGLEtBQUssQ0FBQ3RxSSxPQUFPLENBQzlCNGxHLE9BQWdFLElBQUk7QUFDbkUsVUFBSUEsT0FBTyxDQUFDeWtDLFFBQVEsQ0FBQ0MsS0FBSyxDQUFDL2lJLE1BQU0sRUFDL0JnakksSUFBSSxDQUFDaHJJLElBQUksQ0FDUCxHQUFHdWxILEdBQUcsQ0FBQ3o5RSxNQUFNLENBQVl5OUUsY0FBRyxDQUFDb2tCLFNBQVMsQ0FBWXRqQyxrQkFBTyxDQUFDeWtDLFFBQVEsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDeEIsZ0JBQWdCLEVBQUUsQ0FDL0Y7QUFDTCxLQUFDLENBQ0Y7QUFDRCxXQUFPeUIsSUFBSTtHQUNaLENBQUMsT0FBT2wyRyxDQUFDLEVBQUU7SUFDVixPQUFPcHZCLE9BQU8sQ0FBQ0UsTUFBTSxDQUNuQixJQUFJSSxLQUFLLENBQ1AsQ0FBeUN1L0csMkNBQUcsQ0FBQ29rQixTQUFTLFlBQ3BENzBHLENBQUMsWUFBWTl1QixLQUFLLEdBQUc4dUIsQ0FBQyxDQUFDN3VCLE9BQU8sR0FBRzZ1QixDQUNuQyxDQUFFLEVBQ0gsQ0FDRjtBQUNIO0FBQ0Y7QUFFQSxlQUFlKzFHLFdBQVdBLENBQUNwc0csR0FBYTtFQUN0QyxNQUFNO0FBQUVqM0I7QUFBTSxNQUFHLE1BQU1pM0IsR0FBRyxDQUFDMnFHLElBQUksRUFBRTtFQUNqQyxJQUFJLENBQUM1aEksSUFBSSxFQUFFLE1BQU0sSUFBSXhCLEtBQUssQ0FBQyxjQUFjLENBQUM7RUFFMUMsSUFBSSxDQUFDd0IsSUFBSSxDQUFDZ3RFLE9BQU8sRUFBRSxNQUFNLElBQUl4dUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0FBRXZELE1BQUksQ0FBQ3dCLElBQUksQ0FBQ2d0RSxPQUFPLENBQUN0MEQsS0FBSyxJQUFJLENBQUMxWSxJQUFJLENBQUNndEUsT0FBTyxDQUFDeTJELE1BQU0sRUFBRSxNQUFNLElBQUlqbEksS0FBSyxDQUFDLG9CQUFvQixDQUFDO0FBRXRGLFNBQU93QixJQUFJO0FBQ2IiLCJuYW1lcyI6WyJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIl9ldmVudHMiLCJvbiIsIm5hbWUiLCJsaXN0ZW5lciIsInB1c2giLCJyZW1vdmVMaXN0ZW5lciIsImxpc3RlbmVyVG9SZW1vdmUiLCJmaWx0ZXJMaXN0ZW5lcnMiLCJmaWx0ZXIiLCJlbWl0IiwiYXJncyIsImZpcmVDYWxsYmFja3MiLCJjYWxsYmFjayIsImZvckVhY2giLCJkaXNwb3NlIiwiaW1nIiwiQXNzZXRUeXBlIiwiRGVmYXVsdFZpZXdlclBhcmFtcyIsInNob3dTdGF0cyIsInZlcmJvc2UiLCJlbnZpcm9ubWVudFNyYyIsImlkIiwic3JjIiwiZGVmYXVsdEhkcmkiLCJ0eXBlIiwiVEVYVFVSRV9FWFIiLCJyZXN0cmljdElucHV0VG9DYW52YXMiLCJWaWV3ZXJFdmVudCIsIkRlZmF1bHRMaWdodENvbmZpZ3VyYXRpb24iLCJlbmFibGVkIiwiY2FzdFNoYWRvdyIsImludGVuc2l0eSIsImNvbG9yIiwiZWxldmF0aW9uIiwiYXppbXV0aCIsInJhZGl1cyIsImluZGlyZWN0TGlnaHRJbnRlbnNpdHkiLCJzaGFkb3djYXRjaGVyIiwiT2JqZWN0TGF5ZXJzIiwiVXBkYXRlRmxhZ3MiLCJTdGVuY2lsT3V0bGluZVR5cGUiLCJSb3RhdGFibGVQTVJFTUdlbmVyYXRvciIsIlBNUkVNR2VuZXJhdG9yIiwicmVuZGVyZXIiLCJjb21waWxlUHJvcGVyRXF1aXJlY3RTaGFkZXIiLCJyb3RhdGlvbk1hdHJpeCIsImZpeGVkRW52RmxpcCIsIl9nZXRFcXVpcmVjdE1hdGVyaWFsIiwiU2hhZGVyTWF0ZXJpYWwiLCJ1bmlmb3JtcyIsImVudk1hcCIsInZhbHVlIiwidmVydGV4U2hhZGVyIiwiZnJhZ21lbnRTaGFkZXIiLCJibGVuZGluZyIsIk5vQmxlbmRpbmciLCJkZXB0aFRlc3QiLCJkZXB0aFdyaXRlIiwiX2VxdWlyZWN0TWF0ZXJpYWwiLCJfY29tcGlsZU1hdGVyaWFsIiwiTG9nZ2VyIiwiaGFzIiwiSnNMb2dnZXIiLCJnZXQiLCJBc3NldHMiLCJnZXRMb2FkZXIiLCJhc3NldFR5cGUiLCJ1bmRlZmluZWQiLCJzcGxpdCIsInBvcCIsIk9iamVjdCIsInZhbHVlcyIsImluY2x1ZGVzIiwid2FybiIsIkVYUkxvYWRlciIsIlRFWFRVUkVfSERSIiwiUkdCRUxvYWRlciIsIlRFWFRVUkVfOEJQUCIsIlRleHR1cmVMb2FkZXIiLCJoZHJpVG9QTVJFTSIsImhkcmlUZXgiLCJnZW5lcmF0b3IiLCJtYXQiLCJNYXRyaXg0IiwibWFrZVJvdGF0aW9uRnJvbUV1bGVyIiwiRXVsZXIiLCJNYXRoIiwiUEkiLCJwbXJlbVJUIiwiZnJvbUVxdWlyZWN0YW5ndWxhciIsInRleHR1cmUiLCJnZXRFbnZpcm9ubWVudCIsImFzc2V0IiwiX2NhY2hlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJsb2FkZXIiLCJsb2FkIiwiZXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJnZXRUZXh0dXJlIiwiaW1hZ2UiLCJJbWFnZSIsIm9ubG9hZCIsIlRleHR1cmUiLCJuZWVkc1VwZGF0ZSIsIm9uZXJyb3IiLCJldiIsInRvU3RyaW5nIiwiZ2V0Rm9udCIsInNyY1VybCIsIkZvbnRMb2FkZXIiLCJmb250IiwiZ2V0VGV4dHVyZURhdGEiLCJjYW52YXMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiZHJhd0ltYWdlIiwiZGF0YSIsImdldEltYWdlRGF0YSIsImdlbmVyYXRlR3JhZGllbnRSYW1wVGV4dHVyZSIsImZyb21Db2xvciIsInRvQ29sb3IiLCJzdGVwcyIsImdlbmVyYXRlRGlzY3JlZXRSYW1wVGV4dHVyZSIsImhleENvbG9ycyIsImxlbmd0aCIsInNpemUiLCJVaW50OEFycmF5IiwiayIsInN0cmlkZSIsIkNvbG9yIiwiY29udmVydFNSR0JUb0xpbmVhciIsImZsb29yIiwiciIsImciLCJiIiwiRGF0YVRleHR1cmUiLCJBc3luY1BhdXNlIiwibGFzdFBhdXNlVGltZSIsIm5lZWRzV2FpdCIsInRpY2siLCJtYXhEZWx0YSIsIm5vdyIsInBlcmZvcm1hbmNlIiwiZGVsdGEiLCJ3YWl0Iiwid2FpdFRpbWUiLCJzZXRUaW1lb3V0IiwiTWF0QnVmZjAiLCJNYXRCdWZmMSIsIk1hdEJ1ZmYyIiwiV29ybGQiLCJib3hlcyIsIkFycmF5Iiwid29ybGRCb3giLCJCb3gzIiwiVmVjQnVmZiIsIlZlY3RvcjMiLCJCb3hCdWZmMCIsIkJveEJ1ZmYxIiwiX3dvcmxkT3JpZ2luIiwid29ybGRTaXplIiwiZ2V0Q2VudGVyIiwic3ViVmVjdG9ycyIsIm1heCIsIm1pbiIsIngiLCJ5IiwieiIsIndvcmxkT3JpZ2luIiwiZXhwYW5kV29ybGQiLCJib3giLCJ1cGRhdGVXb3JsZCIsInJlZHVjZVdvcmxkIiwic3BsaWNlIiwiaW5kZXhPZiIsIm1ha2VFbXB0eSIsInVuaW9uIiwicmVzZXRXb3JsZCIsImdldFJlbGF0aXZlT2Zmc2V0Iiwib2Zmc2V0QW1vdW50IiwiaXNFbXB0eSIsImlkZW50aXR5IiwibWFrZVNjYWxlIiwic2V0Iiwic2l6ZUJveCIsImV4cGFuZEJ5VmVjdG9yIiwib2Zmc2V0Qm94IiwiY29weSIsImFwcGx5TWF0cml4NCIsImRpc3QiLCJkaXN0YW5jZVRvIiwiZ2V0UmVsYXRpdmVPZmZzZXRCb3giLCJjZW50ZXIiLCJtYWtlVHJhbnNsYXRpb24iLCJpbnZlcnQiLCJleHBhbmRCb3hSZWxhdGl2ZSIsImV4cGFuZEJveDNSZWxhdGl2ZSIsImV4cGFuZE9CQlJlbGF0aXZlIiwiZ2V0U2l6ZSIsIk9CQiIsImhhbGZTaXplIiwiR2VvbWV0cnlUeXBlIiwiTm9uZUJhdGNoVXBkYXRlUmFuZ2UiLCJvZmZzZXQiLCJjb3VudCIsIkFsbEJhdGNoVXBkYXRlUmFuZ2UiLCJJbmZpbml0eSIsIklOU1RBTkNFX1RSQU5TRk9STV9CVUZGRVJfU1RSSURFIiwiSU5TVEFOQ0VfR1JBRElFTlRfQlVGRkVSX1NUUklERSIsIkJBVENIX0lOREVYX0NPVU5URVIiLCJnZXROZXh0QmF0Y2hJbmRleCIsImlzQWNjZWxlcmF0ZWRCYXRjaFR5cGUiLCJiYXRjaCIsImdlb21ldHJ5VHlwZSIsIk1FU0giLCJURVhUIiwiaXNOb25lQmF0Y2hVcGRhdGVSYW5nZSIsInJhbmdlIiwiaXNBbGxCYXRjaFVwZGF0ZVJhbmdlIiwidG90YWxDb3VudCIsInNwZWNrbGVMaW5lVmVydCIsInNwZWNrbGVMaW5lRnJhZyIsIlNwZWNrbGVVc2VyRGF0YSIsInRvSlNPTiIsIlNwZWNrbGVNYXRlcmlhbCIsIl9zdGVuY2lsT3V0bGluZSIsIk5PTkUiLCJuZWVkc0NvcHkiLCJzcGVja2xlVXNlckRhdGEiLCJ1c2VyRGF0YSIsInNwZWNrbGVEZWZpbmVzIiwiZGVmaW5lcyIsInZlcnRleFByb2dyYW0iLCJmcmFnbWVudFByb2dyYW0iLCJ1bmlmb3Jtc0RlZiIsImVtcHR5IiwiYmFzZVVuaWZvcm1zIiwiZW1wdHlCYXNlIiwic3RlbmNpbE91dGxpbmUiLCJ0aGlzQXNNYXRlcmlhbCIsInN0ZW5jaWxXcml0ZSIsInN0ZW5jaWxXcml0ZU1hc2siLCJzdGVuY2lsUmVmIiwic3RlbmNpbEZ1bmMiLCJBbHdheXNTdGVuY2lsRnVuYyIsInN0ZW5jaWxaRmFpbCIsIlJlcGxhY2VTdGVuY2lsT3AiLCJzdGVuY2lsWlBhc3MiLCJzdGVuY2lsRmFpbCIsIk9VVExJTkVfT05MWSIsImNvbG9yV3JpdGUiLCJwb2ludFNpemUiLCJpbml0Iiwic2V0VW5pZm9ybXMiLCJzZXREZWZpbmVzIiwib25Db21waWxlIiwiZGVmIiwiVW5pZm9ybXNVdGlscyIsIm1lcmdlIiwiY29weVVuaWZvcm1zIiwibWF0ZXJpYWwiLCJiaW5kVW5pZm9ybXMiLCJfaW50ZXJuYWxVbmlmb3JtcyIsImNvcHlGcm9tIiwic291cmNlIiwiYXNzaWduIiwic2hhZGVyIiwiZmFzdENvcHkiLCJmcm9tIiwidG8iLCJhbHBoYVRlc3QiLCJhbHBoYVRvQ292ZXJhZ2UiLCJibGVuZERzdCIsImJsZW5kRHN0QWxwaGEiLCJibGVuZEVxdWF0aW9uIiwiYmxlbmRFcXVhdGlvbkFscGhhIiwiYmxlbmRTcmMiLCJibGVuZFNyY0FscGhhIiwiY2xpcEludGVyc2VjdGlvbiIsImNsaXBwaW5nUGxhbmVzIiwiY2xpcFNoYWRvd3MiLCJkZXB0aEZ1bmMiLCJzdGVuY2lsRnVuY01hc2siLCJvcGFjaXR5IiwicG9seWdvbk9mZnNldCIsInBvbHlnb25PZmZzZXRGYWN0b3IiLCJwb2x5Z29uT2Zmc2V0VW5pdHMiLCJwcmVtdWx0aXBsaWVkQWxwaGEiLCJkaXRoZXJpbmciLCJzaWRlIiwic2hhZG93U2lkZSIsInRvbmVNYXBwZWQiLCJ0cmFuc3BhcmVudCIsInZlcnRleENvbG9ycyIsInZpc2libGUiLCJzZXRNYXRlcmlhbE9wdGlvbnMiLCJvcHRpb25zIiwic3RlbmNpbE91dGxpbmVzIiwiRXh0ZW5kZWRNZXNoU3RhbmRhcmRNYXRlcmlhbCIsIk1lc2hTdGFuZGFyZE1hdGVyaWFsIiwiRXh0ZW5kZWRNZXNoQmFzaWNNYXRlcmlhbCIsIk1lc2hCYXNpY01hdGVyaWFsIiwiRXh0ZW5kZWRNZXNoRGVwdGhNYXRlcmlhbCIsIk1lc2hEZXB0aE1hdGVyaWFsIiwiRXh0ZW5kZWRNZXNoTm9ybWFsTWF0ZXJpYWwiLCJNZXNoTm9ybWFsTWF0ZXJpYWwiLCJFeHRlbmRlZE1hdGNhcE1hdGVyaWFsIiwiTWVzaE1hdGNhcE1hdGVyaWFsIiwiRXh0ZW5kZWRMaW5lTWF0ZXJpYWwiLCJMaW5lTWF0ZXJpYWwiLCJFeHRlbmRlZFBvaW50c01hdGVyaWFsIiwiUG9pbnRzTWF0ZXJpYWwiLCJhcHBseU1peGlucyIsImRlcml2ZWRDdG9yIiwiY29uc3RydWN0b3JzIiwiYmFzZUN0b3IiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvdG90eXBlIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiLCJTcGVja2xlTGluZU1hdGVyaWFsIiwiU2hhZGVyTGliIiwidVZpZXdlcl9oaWdoIiwidVZpZXdlcl9sb3ciLCJwaXhlbFRocmVzaG9sZCIsInBhcmFtZXRlcnMiLCJjdXN0b21Qcm9ncmFtQ2FjaGVLZXkiLCJ0b1N0YW5kYXJkIiwiZnJvbVN0YW5kYXJkIiwib25CZWZvcmVSZW5kZXIiLCJfdGhpcyIsIl9zY2VuZSIsIl9jYW1lcmEiLCJfZ2VvbWV0cnkiLCJvYmplY3QiLCJtb2RlbFZpZXdNYXRyaXgiLCJSVEVCdWZmZXJzIiwicnRlVmlld01vZGVsTWF0cml4Iiwidmlld2VyTG93Iiwidmlld2VySGlnaCIsImdldERyYXdpbmdCdWZmZXJTaXplIiwicmVzb2x1dGlvbiIsInNwZWNrbGVTdGFuZGFyZFZlcnQiLCJzcGVja2xlU3RhbmRhcmRGcmFnIiwiU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwiLCJzdGFuZGFyZCIsInJ0ZVNoYWRvd01hdHJpeCIsInVTaGFkb3dWaWV3ZXJfaGlnaCIsInVTaGFkb3dWaWV3ZXJfbG93IiwidVRyYW5zZm9ybXMiLCJ0VHJhbnNmb3JtcyIsIm9iakNvdW50Iiwib3JpZ2luYWxSb3VnaG5lc3MiLCJhcnRpZmljaWFsUm91Z2huZXNzIiwicm91Z2huZXNzIiwibWV0YWxuZXNzIiwiZW1pc3NpdmUiLCJlbWlzc2l2ZUludGVuc2l0eSIsImVudk1hcEludGVuc2l0eSIsInVwZGF0ZUFydGlmaWNpYWxSb3VnaG5lc3MiLCJhcnRpZmljaWFsUm91Z25lc3MiLCJhcHBseVJvdWdobmVzcyIsInNoYWRvd1ZpZXdlckxvdyIsInNoYWRvd1ZpZXdlckhpZ2giLCJzcGVja2xlUG9pbnRWZXJ0Iiwic3BlY2tsZVBvaW50RnJhZyIsIlNwZWNrbGVQb2ludE1hdGVyaWFsIiwicG9pbnRzIiwic2l6ZUF0dGVudWF0aW9uIiwic3BlY2tsZVN0YW5kYXJkQ29sb3JlZFZlcnQiLCJzcGVja2xlU3RhbmRhcmRDb2xvcmVkRnJhZyIsIlNwZWNrbGVTdGFuZGFyZENvbG9yZWRNYXRlcmlhbCIsImdyYWRpZW50UmFtcCIsInNldEdyYWRpZW50VGV4dHVyZSIsImdlbmVyYXRlTWlwbWFwcyIsIm1pbkZpbHRlciIsIk5lYXJlc3RGaWx0ZXIiLCJtYWdGaWx0ZXIiLCJVbml0cyIsIk1pbGxpbWV0ZXJzIiwiQ2VudGltZXRlcnMiLCJNZXRlcnMiLCJLaWxvbWV0ZXJzIiwiSW5jaGVzIiwiRmVldCIsIllhcmRzIiwiTWlsZXMiLCJnZXRDb252ZXJzaW9uRmFjdG9yIiwibm9ybWFsaXNlTmFtZSIsInVuaXQiLCJ0b0xvd2VyQ2FzZSIsInNwZWNrbGVHaG9zdFZlcnQiLCJzcGVja2xlR2hvc3RGcmFnIiwic3BlY2tsZUJhc2ljVmVydCIsInNwZWNrbGVCYXNpY0ZyYWciLCJtYXRCdWZmIiwidmVjMkJ1ZmYwIiwiVmVjdG9yMiIsInZlYzJCdWZmMSIsInZlYzJCdWZmMiIsIlNwZWNrbGVCYXNpY01hdGVyaWFsIiwiYmFzaWMiLCJpbnZQcm9qZWN0aW9uIiwiYmlsbGJvYXJkUGl4ZWxPZmZzZXRTaXplIiwiVmVjdG9yNCIsImJpbGxib2FyZFBpeGVsU2l6ZSIsIl9iaWxsYm9hcmRQaXhlbFNpemUiLCJiaWxsYm9hcmRQaXhlT2Zmc2V0IiwiX2JpbGxib2FyZFBpeGVsT2Zmc2V0IiwiYmlsbGJvYXJkUGl4ZWxPZmZzZXQiLCJzZXRCaWxsYm9hcmRpbmciLCJjYW1lcmEiLCJwcm9qZWN0aW9uTWF0cml4IiwiYmlsbGJvYXJkUGl4ZWxPZmZzZXROREMiLCJiaWxsYm9hcmRQaXhlbFNpemVOREMiLCJkaXZpZGUiLCJTcGVja2xlR2hvc3RNYXRlcmlhbCIsInNwZWNrbGVUZXh0VmVydCIsInNwZWNrbGVUZXh0RnJhZyIsIlNwZWNrbGVUZXh0TWF0ZXJpYWwiLCJjb3B5Q3VzdG9tVW5pZm9ybXMiLCJnZXREZXJpdmVkTWF0ZXJpYWwiLCJkZXJpdmVkIiwiY3JlYXRlVGV4dERlcml2ZWRNYXRlcmlhbCIsImdldERlcml2ZWRCYXRjaGVkTWF0ZXJpYWwiLCJ0ZXhVbmlmb3JtTmFtZSIsInRleFNpemVVbmlmb3JtTmFtZSIsIm1lbWJlckluZGV4QXR0ck5hbWUiLCJmbG9hdHNQZXJNZW1iZXIiLCJiYXRjaE1hdGVyaWFsIiwiY3JlYXRlRGVyaXZlZE1hdGVyaWFsIiwiY2hhaW5lZCIsInZlcnRleERlZnMiLCJ0b0ZpeGVkIiwidmVydGV4VHJhbnNmb3JtIiwidVRyb2lrYUlzT3V0bGluZSIsImN1c3RvbVJld3JpdGVyIiwic2hhZGVycyIsInZhcnlpbmdVbmlmb3JtcyIsInVuaWZvcm1OYW1lIiwidW5pZm9ybVRvVmFyeWluZyIsInNldE1hdHJpeFRleHR1cmUiLCJfYSIsIlNwZWNrbGVQb2ludENvbG91cmVkTWF0ZXJpYWwiLCJTcGVja2xlVGV4dENvbG9yZWRNYXRlcmlhbCIsImdyYWRpZW50SW5kZXhNYXAiLCJ1cGRhdGVHcmFkaWVudEluZGV4TWFwIiwiaW5kZXgiLCJWaXJ0dWFsQXJyYXkiLCJjaHVua3MiLCJ1cGRhdGVPZmZzZXRzIiwibGFzdENodW5rIiwib2Zmc2V0cyIsImNodW5rSW5kZXgiLCJmaW5kQ2h1bmtJbmRleCIsImxvY2FsSW5kZXgiLCJsb3ciLCJoaWdoIiwibWlkIiwic3RhcnQiLCJlbmQiLCJSYW5nZUVycm9yIiwic3VtIiwiY2h1bmsiLCJDaHVua0FycmF5IiwibWFwIiwiYyIsImNodW5rQXJyYXkiLCJzbGljZSIsImNvcGllc0FycmF5IiwiY2h1bmtDb3B5IiwiTWF0aFV0aWxzIiwiZ2VuZXJhdGVVVUlEIiwicmVmZXJlbmNlcyIsImNvcHlUb0J1ZmZlciIsImJ1ZmZlciIsImNodW5rT2Zmc2V0IiwiY29tcHV0ZUJveDMiLCJ2ZWMzIiwiY2FycnkiLCJpIiwiZXhwYW5kQnlQb2ludCIsImZ1bGxWZWMzQ291bnQiLCJqIiwiY29uc29sZSIsImdldEZsYXRBcnJheSIsIlR5cGUiLCJmbGF0QXJyYXkiLCJnZXRGbG9hdDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJnZXRGbG9hdDY0QXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJnZXRJbnQxNkFycmF5IiwiSW50MTZBcnJheSIsImdldEludDMyQXJyYXkiLCJJbnQzMkFycmF5IiwiZ2V0VWludDE2QXJyYXkiLCJVaW50MTZBcnJheSIsImdldFVpbnQzMkFycmF5IiwiVWludDMyQXJyYXkiLCJkZWZhdWx0R3JhZGllbnQiLCJkZWZhdWx0R3JhZGllbnRUZXh0dXJlIiwiRmlsdGVyTWF0ZXJpYWxUeXBlIiwiTWF0ZXJpYWxzIiwibWF0ZXJpYWxNYXAiLCJyZW5kZXJNYXRlcmlhbEZyb21Ob2RlIiwibWF0ZXJpYWxOb2RlIiwiZ2VvbWV0cnlOb2RlIiwicmVuZGVyTWF0ZXJpYWwiLCJtb2RlbCIsInJhdyIsImNvbG9yc0NodW5rQXJyYXkiLCJjb2xvcnMiLCJkaWZmdXNlIiwiX2IiLCJkaXNwbGF5U3R5bGVGcm9tTm9kZSIsIm5vZGUiLCJkaXNwbGF5U3R5bGUiLCJsaW5lV2VpZ2h0IiwibGluZXdlaWdodCIsInVuaXRzIiwiY29sb3JNYXRlcmlhbEZyb21Ob2RlIiwiY29sb3JNYXRlcmlhbCIsInJlbmRlck1hdGVyaWFsVG9TdHJpbmciLCJkaXNwbGF5U3R5bGVUb1N0cmluZyIsInBsbSIsIl9jIiwiX2QiLCJtaW5pbWFsTWF0ZXJpYWxUb1N0cmluZyIsIm1pbmltYWxNYXRlcmlhbCIsImhhc2hDb2RlIiwicyIsImgiLCJpbXVsIiwiY2hhckNvZGVBdCIsImlzTWF0ZXJpYWxJbnN0YW5jZSIsIk1hdGVyaWFsIiwiaXNGaWx0ZXJNYXRlcmlhbCIsImlzUmVuZGVyTWF0ZXJpYWwiLCJtYXRlcmlhbERhdGEiLCJpc0Rpc3BsYXlTdHlsZSIsImdldE1hdGVyaWFsSGFzaCIsInJlbmRlclZpZXciLCJjb2xvck1hdGVyaWFsRGF0YSIsInJlbmRlckRhdGEiLCJ1c2VDb2xvck1hdGVyaWFsSGFzaCIsIkxJTkUiLCJQT0lOVCIsImRpc3BsYXlTdHlsZUZpcnN0IiwiZ2VvbWV0cnkiLCJhdHRyaWJ1dGVzIiwiQ09MT1IiLCJtZXRhRGF0YSIsInNjcmVlbk9yaWVudGVkIiwiaW5zdGFuY2VkIiwiaXNUcmFuc3BhcmVudCIsImlzT3BhcXVlIiwiaXNTcGVja2xlTWF0ZXJpYWwiLCJjcmVhdGVEZWZhdWx0TWVzaE1hdGVyaWFscyIsIm1lc2hHaG9zdE1hdGVyaWFsIiwiRnJvbnRTaWRlIiwibWVzaEdyYWRpZW50TWF0ZXJpYWwiLCJEb3VibGVTaWRlIiwibWVzaFRyYW5zcGFyZW50R3JhZGllbnRNYXRlcmlhbCIsIm1lc2hDb2xvcmVkTWF0ZXJpYWwiLCJ3aXJlZnJhbWUiLCJtZXNoVHJhbnNwYXJlbnRDb2xvcmVkTWF0ZXJpYWwiLCJtZXNoSGlkZGVuTWF0ZXJpYWwiLCJjcmVhdGVMaW5lRGVmYXVsdE1hdGVyaWFscyIsImxpbmVHaG9zdE1hdGVyaWFsIiwibGluZXdpZHRoIiwid29ybGRVbml0cyIsImxpbmVDb2xvcmVkTWF0ZXJpYWwiLCJsaW5lSGlkZGVuTWF0ZXJpYWwiLCJjcmVhdGVEZWZhdWx0UG9pbnRNYXRlcmlhbHMiLCJwb2ludEdob3N0TWF0ZXJpYWwiLCJwb2ludENsb3VkQ29sb3VyZWRNYXRlcmlhbCIsInBvaW50Q2xvdWRHcmFkaWVudE1hdGVyaWFsIiwiY3JlYXRlRGVmYXVsdFRleHRNYXRlcmlhbHMiLCJ0ZXh0R2hvc3RNYXRlcmlhbCIsInRleHRDb2xvcmVkTWF0ZXJpYWwiLCJ0ZXh0R3JhZGllbnRNYXRlcmlhbCIsInRleHRIaWRkZW5NYXRlcmlhbCIsImNyZWF0ZURlZmF1bHROdWxsTWF0ZXJpYWxzIiwiTnVsbFJlbmRlck1hdGVyaWFsSGFzaCIsIk51bGxSZW5kZXJNYXRlcmlhbFZlcnRleENvbG9yc0hhc2giLCJoYXNoIiwiTnVsbERpc3BsYXlTdHlsZUhhc2giLCJOdWxsVGV4dERpc3BsYXlTdHlsZSIsIk51bGxQb2ludE1hdGVyaWFsSGFzaCIsIk51bGxQb2ludENsb3VkVmVydGV4Q29sb3JzTWF0ZXJpYWxIYXNoIiwiTnVsbFBvaW50Q2xvdWRNYXRlcmlhbEhhc2giLCJOdWxsUmVuZGVyTWF0ZXJpYWxJbnN0YW5jZWRIYXNoIiwiTnVsbFJlbmRlck1hdGVyaWFsSW5zdGFuY2VkVmVydGV4Q29sb3JIYXNoIiwiY3JlYXRlRGVmYXVsdE1hdGVyaWFscyIsImRlZmF1bHRHcmFkaWVudFRleHR1cmVEYXRhIiwibWFrZU1lc2hNYXRlcmlhbCIsIkRFRkFVTFRfQVJUSUZJQ0lBTF9ST1VHSE5FU1MiLCJtYWtlTGluZU1hdGVyaWFsIiwibWFrZVBvaW50TWF0ZXJpYWwiLCJpc0Jhc2VDb2xvckJsYWNrIiwic2FmZUNvbG9yIiwibWFrZVRleHRNYXRlcmlhbCIsImdldE1hdGVyaWFsIiwiZ2V0TWVzaE1hdGVyaWFsIiwiZ2V0TGluZU1hdGVyaWFsIiwiZ2V0UG9pbnRNYXRlcmlhbCIsIlBPSU5UX0NMT1VEIiwiZ2V0UG9pbnRDbG91ZE1hdGVyaWFsIiwiZ2V0VGV4dE1hdGVyaWFsIiwiZ2V0R2hvc3RNYXRlcmlhbCIsImZpbHRlck1hdGVyaWFsIiwiZ2V0R3JhZGllbnRNYXRlcmlhbCIsInJhbXBUZXh0dXJlIiwiZ2V0Q29sb3JlZE1hdGVyaWFsIiwiZ2V0SGlkZGVuTWF0ZXJpYWwiLCJnZXRGaWx0ZXJNYXRlcmlhbCIsInJldE1hdGVyaWFsIiwiZmlsdGVyVHlwZSIsIkdIT1NUIiwiR1JBRElFTlQiLCJDT0xPUkVEIiwiSElEREVOIiwiZ2V0RGF0YU1hdGVyaWFsIiwibWF0ZXJpYWxIYXNoIiwiZ2V0RmlsdGVyTWF0ZXJpYWxPcHRpb25zIiwicmFtcEluZGV4IiwicmFtcEluZGV4Q29sb3IiLCJyYW1wV2lkdGgiLCJzZXRSR0IiLCJwdXJnZSIsIlVOSUZPUk1fVkVDVE9SU19VU0VEIiwiU3BlY2tsZVR5cGUiLCJTcGVja2xlVHlwZUFsbFJlbmRlcmFibGVzIiwiUG9pbnRjbG91ZCIsIkJyZXAiLCJNZXNoIiwiQmluYXJ5TWVzaCIsIlBvaW50IiwiTGluZSIsIlBvbHlsaW5lIiwiQm94IiwiUG9seWN1cnZlIiwiQ3VydmUiLCJDaXJjbGUiLCJBcmMiLCJFbGxpcHNlIiwiVGV4dCIsIlJlZ2lvbiIsIkdlb21ldHJ5Q29udmVydGVyIiwiTm9kZVJlbmRlclZpZXciLCJndWlkIiwiX2d1aWQiLCJfcmVuZGVyRGF0YSIsInN1YnRyZWVJZCIsInJlbmRlck1hdGVyaWFsSGFzaCIsIl9tYXRlcmlhbEhhc2giLCJoYXNHZW9tZXRyeSIsImhhc01ldGFkYXRhIiwic3BlY2tsZVR5cGUiLCJfZ2VvbWV0cnlUeXBlIiwiYmF0Y2hTdGFydCIsIl9iYXRjaEluZGV4U3RhcnQiLCJiYXRjaEVuZCIsIl9iYXRjaEluZGV4Q291bnQiLCJiYXRjaENvdW50IiwiYmF0Y2hJZCIsIl9iYXRjaElkIiwiYWFiYiIsIl9hYWJiIiwidmVydFN0YXJ0IiwiX2JhdGNoVmVydGV4U3RhcnQiLCJ2ZXJ0RW5kIiwiX2JhdGNoVmVydGV4RW5kIiwibmVlZHNTZWdtZW50Q29udmVyc2lvbiIsInZhbGlkR2VvbWV0cnkiLCJQT1NJVElPTiIsIklOREVYIiwiZ2V0R2VvbWV0cnlUeXBlIiwic2V0QmF0Y2hEYXRhIiwiY29tcHV0ZUFBQkIiLCJ0cmFuc2Zvcm0iLCJkaXNwb3NlR2VvbWV0cnkiLCJhdHRyIiwiUmVuZGVyVHJlZSIsInJvb3QiLCJ0cmVlIiwic3VidHJlZVJvb3QiLCJjYW5jZWwiLCJidWlsZE5vZGVUaW1lIiwiYXBwbHlUcmFuc2Zvcm1UaW1lIiwiY29udmVydFRpbWUiLCJnZXROb2RlVGltZSIsIm90aGVyVGltZSIsImJ1aWxkUmVuZGVyVHJlZSIsImdlb21ldHJ5Q29udmVydGVyIiwiY291bnRDYWxsYmFjayIsInAiLCJ3YWxrQXN5bmMiLCJyZW5kZU5vZGUiLCJidWlsZFJlbmRlck5vZGUiLCJhcHBseVRyYW5zZm9ybXMiLCJkaXNwb3NlTm9kZUdlb21ldHJ5RGF0YSIsImNvbXB1dGVUcmFuc2Zvcm0iLCJiYWtlVHJhbnNmb3JtIiwibXVsdGlwbHkiLCJyZXQiLCJnZW9tZXRyeURhdGEiLCJjb252ZXJ0Tm9kZVRvR2VvbWV0cnlEYXRhIiwicmVuZGVyTWF0ZXJpYWxOb2RlIiwiZ2V0UmVuZGVyTWF0ZXJpYWxOb2RlIiwiZGlzcGxheVN0eWxlTm9kZSIsImdldERpc3BsYXlTdHlsZU5vZGUiLCJjb2xvck1hdGVyaWFsTm9kZSIsImdldENvbG9yTWF0ZXJpYWxOb2RlIiwiZ2V0U3BlY2tsZVR5cGUiLCJhbmNlc3RvcnMiLCJnZXRBbmNlc3RvcnMiLCJUcmFuc2Zvcm0iLCJyZW5kZXJOb2RlIiwicHJlbXVsdGlwbHkiLCJnZXRJbnN0YW5jZXMiLCJnZXREdXBsaWNhdGVzIiwiZ2V0UmVuZGVyYWJsZVJlbmRlclZpZXdzIiwidHlwZXMiLCJnZXRSZW5kZXJhYmxlTm9kZXMiLCJ2YWwiLCJhbGwiLCJnZXRSZW5kZXJWaWV3c0Zvck5vZGUiLCJnZXRSZW5kZXJWaWV3Tm9kZXNGb3JOb2RlIiwiYXRvbWljIiwiX25vZGUiLCJnZXRSZW5kZXJWaWV3c0Zvck5vZGVJZCIsIm5vZGVzIiwiZmluZElkIiwiZ2V0QXRvbWljUGFyZW50IiwiZmluZCIsImNhbmNlbEJ1aWxkIiwiTm9kZU1hcCIsIm5vZGVDb3VudCIsImtleXMiLCJpbnN0YW5jZXMiLCJkdXBsaWNhdGVzIiwicmVnaXN0ZXJOb2RlIiwiYWRkTm9kZSIsIkNPTVBPVU5EX0lEX0NIQVIiLCJyZWdpc3Rlckluc3RhbmNlIiwiRFVQTElDQVRFX0lEX0NIQVIiLCJyZWdpc3RlckR1cGxpY2F0ZSIsInJlbW92ZU5vZGUiLCJiYXNlSWQiLCJzdWJzdHJpbmciLCJnZXROb2RlQnlJZCIsImdldFN1YnRyZWVCeUlkIiwiaGFzSWQiLCJoYXNOb2RlSWQiLCJoYXNJbnN0YW5jZUlkIiwiV29ybGRUcmVlIiwicmVuZGVyVHJlZUluc3RhbmNlcyIsIm5vZGVNYXBzIiwic3VwcmVzc1dhcm5pbmdzIiwiVHJlZU1vZGVsIiwiX3Jvb3QiLCJwYXJzZSIsIlJPT1RfSUQiLCJjaGlsZHJlbiIsImdldFJlbmRlclRyZWUiLCJyZW5kZXJUcmVlUm9vdCIsImZpbmRTdWJ0cmVlIiwic3VidHJlZVJvb3RJZCIsIm5leHRTdWJ0cmVlSWQiLCJpc1Jvb3QiLCJpc1N1YnRyZWVSb290IiwicGFyZW50IiwiYWRkU3VidHJlZSIsImFkZENoaWxkIiwicmVtb3ZlQ2hpbGRyZW4iLCJkcm9wIiwiZmluZEFsbCIsInByZWRpY2F0ZSIsImlkTm9kZSIsImdldFBhdGgiLCJyZXZlcnNlIiwid2FsayIsInBhdXNlIiwic3VjY2VzcyIsImRlcHRoRmlyc3RQcmVPcmRlckFzeW5jIiwiY2hpbGRDb3VudCIsInN1YnRyZWVOb2RlIiwia2V5IiwicmVmZXJlbmNlQm94IiwibXVsdGlwbHlTY2FsYXIiLCJtYWtlUGVyc3BlY3RpdmVQcm9qZWN0aW9uIiwic2NyZWVuU2l6ZSIsImZvdiIsIm5lYXIiLCJmYXIiLCJhc3BlY3QiLCJ0b3AiLCJ0YW4iLCJERUcyUkFEIiwibGVmdCIsIm1ha2VQZXJzcGVjdGl2ZSIsInZlY0J1ZmYwIiwiZmxvYXRBcnJheUJ1ZmYiLCJHZW9tZXRyeUF0dHJpYnV0ZXMiLCJHZW9tZXRyeSIsInVwZGF0ZVJURUdlb21ldHJ5IiwiZG91YmxlUG9zaXRpb25zIiwicG9zaXRpb25fbG93IiwicG9zaXRpb25faGlnaCIsInBvc2l0aW9uIiwiYXJyYXkiLCJEb3VibGVUb0hpZ2hMb3dCdWZmZXIiLCJzZXRBdHRyaWJ1dGUiLCJGbG9hdDMyQnVmZmVyQXR0cmlidXRlIiwiaW5zdGFuY2VTdGFydCIsImluc3RhbmNlQnVmZmVyTG93IiwiSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIiLCJJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSIsIm1lcmdlR2VvbWV0cnlBdHRyaWJ1dGUiLCJ0YXJnZXQiLCJhdHRyaWJ1dGUiLCJtZXJnZUluZGV4QXR0cmlidXRlIiwiaW5kZXhBdHRyaWJ1dGVzIiwicG9zaXRpb25BdHRyaWJ1dGVzIiwiaW5kZXhPZmZzZXQiLCJtZXJnZWRJbmRleCIsInBvc2l0aW9ucyIsIm1lcmdlR2VvbWV0cnlEYXRhIiwiZ2VvbWV0cmllcyIsInNhbXBsZUF0dHJpYnV0ZXMiLCJtZXJnZWRHZW9tZXRyeSIsInRyYW5zZm9ybUdlb21ldHJ5RGF0YSIsIml0ZW0iLCJtZXJnZWREYXRhIiwicmVkdWNlIiwicHJldiIsImN1ciIsIm0iLCJpc01hdHJpeDRJZGVudGl0eSIsImUiLCJlbGVtZW50cyIsInciLCJ0cmFuc2Zvcm1BcnJheSIsIm1hdHJpeCIsInVucGFja0NvbG9ycyIsImludDMyQ29sb3JzIiwiRG91YmxlVG9IaWdoTG93VmVjdG9yIiwiaW5wdXQiLCJkb3VibGVWYWx1ZSIsImRvdWJsZUhpZ2giLCJuZWVkc1JURSIsImJvdW5kcyIsImNhbWVyYURpc3RhbmNlIiwiY2FtZXJhTmVhciIsImNhbWVyYVByb2plY3Rpb24iLCJwaXhlbERlbHRhIiwiZ2V0RlAzMlByb2plY3Rpb25EZWx0YSIsInBvaW50IiwicHJvamVjdGlvbiIsInJlbGF0aXZlT2Zmc2V0IiwiZmxvYXRWZWN0b3IiLCJjYW1Qb3MiLCJhZGQiLCJyYW5kb20iLCJ2aWV3UHJvamVjdGlvbkZwNjQiLCJsb29rQXQiLCJzZXRQb3NpdGlvbiIsInZpZXdQcm9qZWN0aW9uRnAzMiIsInRvQXJyYXkiLCJmcm9tQXJyYXkiLCJmbG9hdDQiLCJkb3VibGU0IiwiYWRkU2NhbGFyIiwiYWJzIiwiY29tcHV0ZVZlcnRleE5vcm1hbHNCdWZmZXIiLCJwQSIsInBCIiwicEMiLCJuQSIsIm5CIiwibkMiLCJjYiIsImFiIiwiaWwiLCJ2QSIsInZCIiwidkMiLCJjcm9zcyIsImNvbXB1dGVWZXJ0ZXhOb3JtYWxzQnVmZmVyVmlydHVhbCIsImZsaXAiLCJub3JtYWxpemUiLCJuZWdhdGUiLCJmbGlwTm9ybWFsc0J1ZmZlciIsImNvbXB1dGVWZXJ0ZXhOb3JtYWxzIiwicG9zaXRpb25BdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJub3JtYWxBdHRyaWJ1dGUiLCJCdWZmZXJBdHRyaWJ1dGUiLCJzZXRYWVoiLCJnZXRYIiwiZnJvbUJ1ZmZlckF0dHJpYnV0ZSIsIm5vcm1hbGl6ZU5vcm1hbHMiLCJ0cmlhbmd1bGF0ZVBvbHlnb24iLCJlYXJjdXQiLCJ2ZWM0QnVmZmVyIiwiTGluZUJhdGNoIiwiYm91bmRpbmdCb3giLCJjb21wdXRlQm91bmRpbmdCb3giLCJkcmF3Q2FsbHMiLCJtaW5EcmF3Q2FsbHMiLCJ0cmlDb3VudCIsInZlcnRDb3VudCIsImluc3RhbmNlQ291bnQiLCJyZW5kZXJWaWV3cyIsInZpc2liaWxpdHlSYW5nZXMiLCJncm91cHMiLCJwb2ludENvdW50IiwibGluZUNvdW50IiwiaW5kZXhDb3VudCIsInJlbmRlck9iamVjdCIsIm1lc2giLCJtYXRlcmlhbHMiLCJnZXRDb3VudCIsInNldEJhdGNoTWF0ZXJpYWwiLCJiYXRjaFRyYW5zcGFyZW50IiwiYmF0Y2hPcGFjaXR5Iiwib25VcGRhdGUiLCJkZWx0YVRpbWUiLCJvblJlbmRlciIsInNldFZpc2libGVSYW5nZSIsInJhbmdlcyIsImNvbG9yQnVmZmVyIiwibGVuIiwidXBkYXRlUmFuZ2UiLCJnZXRWaXNpYmxlUmFuZ2UiLCJnZXRPcGFxdWUiLCJnZXREZXB0aCIsImdldFRyYW5zcGFyZW50IiwiZ2V0U3RlbmNpbCIsInNldEJhdGNoQnVmZmVycyIsIm1hdGVyaWFsT3B0aW9ucyIsImFscGhhIiwidXBkYXRlQ29sb3JCdWZmZXIiLCJ2aXNpYmlsaXR5IiwiYW55VmlzaWJsZSIsInNldERyYXdSYW5nZXMiLCJyZXNldERyYXdSYW5nZXMiLCJidWlsZEJhdGNoIiwiYXR0cmlidXRlQ291bnQiLCJydkFBQkIiLCJwb3NpdGlvblN1YkFycmF5Iiwic3ViYXJyYXkiLCJzZXRGcm9tQXJyYXkiLCJtYWtlTGluZUdlb21ldHJ5IiwiTGluZVNlZ21lbnRzMiIsImNvbXB1dGVMaW5lRGlzdGFuY2VzIiwic2NhbGUiLCJ1dWlkIiwibGF5ZXJzIiwiU1RSRUFNX0NPTlRFTlRfTElORSIsImdldFJlbmRlclZpZXciLCJnZXRNYXRlcmlhbEF0SW5kZXgiLCJydiIsImNsb25lIiwiTGluZVNlZ21lbnRzR2VvbWV0cnkiLCJzZXRQb3NpdGlvbnMiLCJzZXRVc2FnZSIsIkR5bmFtaWNEcmF3VXNhZ2UiLCJTS0lQX0dFTkVSQVRJT04iLCJTeW1ib2wiLCJEZWZhdWx0QlZIT3B0aW9ucyIsInN0cmF0ZWd5IiwiQ0VOVEVSIiwibWF4RGVwdGgiLCJtYXhMZWFmVHJpcyIsInVzZVNoYXJlZEFycmF5QnVmZmVyIiwic2V0Qm91bmRpbmdCb3giLCJBY2NlbGVyYXRpb25TdHJ1Y3R1cmUiLCJfYnZoIiwiYnZoIiwiYnVpbGRCVkgiLCJpbmRpY2VzIiwiYnZoUG9zaXRpb25zIiwidmVjQnVmZiIsImJ2aEdlb21ldHJ5IiwiQnVmZmVyR2VvbWV0cnkiLCJidmhJbmRpY2VzIiwic2V0SW5kZXgiLCJVaW50MzJCdWZmZXJBdHRyaWJ1dGUiLCJVaW50MTZCdWZmZXJBdHRyaWJ1dGUiLCJNZXNoQlZIIiwicmF5Y2FzdCIsInJheSIsIm1hdGVyaWFsT3JTaWRlIiwicmVzIiwidHJhbnNmb3JtSW5wdXQiLCJ0cmFuc2Zvcm1PdXRwdXQiLCJyYXljYXN0Rmlyc3QiLCJzaGFwZWNhc3QiLCJjYWxsYmFja3MiLCJib3hCdWZmZXIiLCJ0cmlhbmdsZUJ1ZmZlciIsIkV4dGVuZGVkVHJpYW5nbGUiLCJuZXdDYWxsYmFja3MiLCJpbnRlcnNlY3RzQm91bmRzIiwiaXNMZWFmIiwic2NvcmUiLCJkZXB0aCIsIm5vZGVJbmRleCIsImludGVyc2VjdHNUcmlhbmdsZSIsInRyaWFuZ2xlIiwidHJpYW5nbGVJbmRleCIsImNvbnRhaW5lZCIsImEiLCJpbnRlcnNlY3RzUmFuZ2UiLCJ0cmF2ZXJzZUJvdW5kc09yZGVyIiwiTWF0QnVmZiIsImlucHV0T3JpZ2luVHJhbnNmb3JtIiwiaW5wdXRUcmFuc2Zvcm0iLCJvdXRwdXQiLCJvdXRwdXRPcmlnaW5UcmFuc2ZvbSIsIm91dHB1dFRyYW5zZm9ybSIsImdldEJvdW5kaW5nQm94IiwiX3RhcmdldCIsImdldFZlcnRleEF0SW5kZXgiLCJUb3BMZXZlbEFjY2VsZXJhdGlvblN0cnVjdHVyZSIsImJhdGNoT2JqZWN0cyIsImRlYnVnQlZIIiwiY3ViZUluZGljZXMiLCJ2ZXJ0aWNlcyIsIkNVQkVfVkVSVFMiLCJ2ZXJ0T2Zmc2V0IiwiYm94Qm91bmRzIiwiYWNjZWxlcmF0aW9uU3RydWN0dXJlIiwidXBkYXRlVmVydEFycmF5IiwidGFzVmVydEluZGV4U3RhcnQiLCJ0YXNWZXJ0SW5kZXhFbmQiLCJPVkVSTEFZIiwiYm91bmRzVHJlZSIsImJ2aEhlbHBlciIsIk1lc2hCVkhWaXN1YWxpemVyIiwidXBkYXRlIiwib3V0UG9zaXRpb25zIiwicmVmaXQiLCJiYXNCb3giLCJ0YXNPbmx5IiwicmF5QnVmZiIsIlJheSIsInRhc1Jlc3VsdHMiLCJpbmRleEJ1ZmZlckF0dHJpYnV0ZSIsInRhc1JlcyIsInZlcnRJbmRleCIsImZhY2VJbmRleCIsImJhdGNoT2JqZWN0SW5kZXgiLCJ0cnVuYyIsImJhdGNoT2JqZWN0IiwiaGl0cyIsImhpdCIsImV4dGVuZGVkSGl0Iiwic29tZSIsIndyYXBDYWxsYmFja3MiLCJ2aXNpdGVkT2JqZWN0cyIsImludGVyc2VjdHNUQVMiLCJ0cmlhbmdsZU9mZnNldCIsInRyaWFuZ2xlQ291bnQiLCJTZXQiLCJpbnRlcnNlY3RUQVNSYW5nZSIsImNsb3Nlc3RQb2ludFRvUG9pbnQiLCJjbG9zZXN0UG9pbnRUb1BvaW50SGFsZnBsYW5lIiwicGxhbmVOb3JtYWwiLCJmYWxsYmFjayIsImRpc3RhbmNlIiwibWluVGhyZXNob2xkIiwibWF4VGhyZXNob2xkIiwidGVtcCIsInRlbXAxIiwidGVtcDIiLCJtaW5UaHJlc2hvbGRTcSIsIm1heFRocmVzaG9sZFNxIiwiY2xvc2VzdERpc3RhbmNlU3EiLCJjbG9zZXN0RGlzdGFuY2VUcmlJbmRleCIsImJvdW5kc1RyYXZlcnNlT3JkZXIiLCJjbGFtcCIsImRpc3RhbmNlVG9TcXVhcmVkIiwiX2JveCIsIl9pc0xlYWYiLCJjb250YWluc1BvaW50IiwidHJpIiwidHJpSW5kZXgiLCJkaXN0U3EiLCJ2IiwicGxhbmFyaXR5IiwiZG90IiwiY2xvc2VzdERpc3RhbmNlIiwic3FydCIsInRtcEludmVyc2VNYXRyaXgiLCJ2ZWNCdWZmMSIsInZlY0J1ZmYyIiwibWF0QnVmZjAiLCJtYXRCdWZmMSIsIm1hdEJ1ZmYyIiwiU3BlY2tsZUJhdGNoZWRUZXh0IiwiQmF0Y2hlZFRleHQiLCJfdGV4dE9iamVjdHMiLCJfZGlydHkiLCJtYXRlcmlhbENhY2hlIiwibWF0ZXJpYWxDYWNoZUxVVCIsIkRFQlVHX0JJTExCT0FSRFMiLCJkZWJ1Z01lc2hlcyIsIlRBUyIsInRhcyIsIl9iYXRjaE9iamVjdHMiLCJfYmF0Y2hNYXRlcmlhbCIsImRpcnR5IiwiaXNCaWxsYm9hcmRlZCIsImdldENhY2hlZE1hdGVyaWFsIiwic2V0QmF0Y2hPYmplY3RzIiwidGV4dE9iamVjdHMiLCJsb29rdXBNYXRlcmlhbCIsImNhY2hlZE1hdGVyaWFsIiwiYnVpbGRUQVMiLCJib3VuZGluZ1NwaGVyZSIsImdldEJvdW5kaW5nU3BoZXJlIiwiU3BoZXJlIiwidXBkYXRlVHJhbnNmb3Jtc1VuaWZvcm0iLCJ0cmFuc2Zvcm1EaXJ0eSIsInRleHRPYmplY3QiLCJkZWNvbXBvc2UiLCJxdWF0ZXJuaW9uIiwidXBkYXRlTWF0cml4IiwiX2RhdGFUZXh0dXJlcyIsImlzVGV4dE91dGxpbmVNYXRlcmlhbCIsInBhY2tpbmdJbmZvIiwiX21lbWJlcnMiLCJzdGFydEluZGV4Iiwic2V0VGV4RGF0YSIsInVwZGF0ZU1hdGVyaWFsVHJhbnNmb3Jtc1VuaWZvcm0iLCJnZXRCYXRjaE9iamVjdE1hdGVyaWFsIiwiZ3JvdXAiLCJtYXRlcmlhbEluZGV4IiwiY29udmVydFJheWNhc3RJbnRlcnNlY3QiLCJyYXljYXN0ZXIiLCJtYXRyaXhXb3JsZCIsIm9yaWdpbiIsImluaXREZWJ1Z0JveCIsImRlYnVnQm94IiwiSW50MTZCdWZmZXJBdHRyaWJ1dGUiLCJzY2VuZSIsInRleHRNYXRyaXgiLCJ0ZXh0VHJhbnNmb3JtIiwiYmlsbGJvYXJkUG9zIiwiYmlsbGJvYXJkTWF0IiwiZXh0cmFjdFJvdGF0aW9uIiwiZGVidWdWZXJ0ZXgiLCJpbnRlcnNlY3RzIiwiaW52QmlsbGJvYXJkTWF0IiwiZmlyc3RIaXRPbmx5IiwibCIsImludGVyc2VjdFRBU09ubHkiLCJ1cGRhdGVCb3VuZHMiLCJ0ZW1wQm94MyIsImJib3giLCJfIiwidGV4dCIsIm1hdHJpeEF1dG9VcGRhdGUiLCJhZGRUZXh0IiwiZ2x5cGhDb3VudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25NZW1iZXJTeW5jZWQiLCJ0ZXhEYXRhIiwiX3ByZXBhcmVGb3JSZW5kZXIiLCJ0ZW1wQ29sb3IiLCJpc091dGxpbmUiLCJkYXRhTGVuZ3RoIiwicG93IiwiY2VpbCIsImxvZzIiLCJSR0JBRm9ybWF0IiwiRmxvYXRUeXBlIiwidHJhbnNsYXRpb24iLCJ0cmFuc2xhdGlvbkxvdyIsInRyYW5zbGF0aW9uSGlnaCIsInVUcm9pa2FUb3RhbEJvdW5kcyIsInVUcm9pa2FDbGlwUmVjdCIsInVUcm9pa2FQb3NpdGlvbk9mZnNldCIsInVUcm9pa2FFZGdlT2Zmc2V0IiwidVRyb2lrYUJsdXJSYWRpdXMiLCJ1VHJvaWthU3Ryb2tlV2lkdGgiLCJ1VHJvaWthU3Ryb2tlQ29sb3IiLCJ1VHJvaWthU3Ryb2tlT3BhY2l0eSIsInVUcm9pa2FGaWxsT3BhY2l0eSIsInVUcm9pa2FDdXJ2ZVJhZGl1cyIsImdldENvbXBvbmVudCIsIm91dGxpbmVDb2xvciIsImdldEhleCIsImdyYWRpZW50SW5kZXgiLCJjYWxsIiwiQmF0Y2hPYmplY3QiLCJfcmVuZGVyVmlldyIsIl9hY2NlbGVyYXRpb25TdHJ1Y3R1cmUiLCJiYXRjaEluZGV4IiwiX2JhdGNoSW5kZXgiLCJsb2NhbE9yaWdpbiIsIl9sb2NhbE9yaWdpbiIsInBpdm90IiwicGl2b3RWYWx1ZSIsInBpdm90X0xvdyIsInBpdm90X0hpZ2giLCJ0cmFuc2Zvcm1UUlMiLCJldWxlclZhbHVlIiwic2NhbGVWYWx1ZSIsImV1bGVyIiwiUXVhdGVybmlvbiIsInRyYW5zZm9ybUludiIsImJ1aWxkQWNjZWxlcmF0aW9uU3RydWN0dXJlIiwicG9zaXRpb25PckJ2aCIsIlQiLCJSIiwiUyIsImV1bGVyQnVmZiIsInRyYW5zbGF0aW9uQnVmZiIsInNjYWxlQnVmZiIsInBpdm90QnVmZiIsInNldEZyb21FdWxlciIsIm11bHRpcGx5TWF0cmljZXMiLCJUZXh0QmF0Y2hPYmplY3QiLCJEcmF3UmFuZ2VzIiwiaW50ZWdyYXRlUmFuZ2VzIiwiX2ZsYXRSYW5nZXMiLCJzb3J0IiwiZWRnZXNGb3J3YXJkIiwiZWRnZXNCYWNrd2FyZHMiLCJncm91cEZvcndhcmQiLCJncm91cEJhY2t3YXJkcyIsInVuc2hpZnQiLCJyMCIsInIwSW5kZXgiLCJmaW5kSW5kZXgiLCJuZXh0IiwicjEiLCJyMUluZGV4IiwiZHJhd1JhbmdlcyIsImdyb3VwU3RhcnQiLCJsYXN0R3JvdXAiLCJJTlNUQU5DRV9URVhUX1RSSVNfQ09VTlQiLCJJTlNUQU5DRV9URVhUX1ZFUlRfQ09VTlQiLCJUZXh0QmF0Y2giLCJtYXhEcmF3Q2FsbHMiLCJzcGxpdFJhbmdlcyIsInNoaWZ0ZWRJbmRleCIsInN5bmMiLCJ1bmlxdWVNYXRlcmlhbHMiLCJjbGVhbk1hdGVyaWFscyIsIm1hdGVyaWFsc0luVXNlIiwiYWxpZ25tZW50WFRvQW5jaG9yWCIsImFsaWdubWVudFlUb0FuY2hvclkiLCJ0ZXh0TWFwIiwiTWFwIiwibmVlZHNCaWxsYm9hcmQiLCJ0ZXh0U3luY2VkIiwidGV4dE1ldGEiLCJ1cGRhdGVNYXRyaXhXb3JsZCIsImZvbnRTaXplIiwibWF4V2lkdGgiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsImFuY2hvclgiLCJhbGlnbm1lbnRIIiwiYW5jaG9yWSIsImFsaWdubWVudFYiLCJ0ZXh0UmVuZGVySW5mbyIsInZpc2libGVCb3VuZHMiLCJ0ZXh0QnZoIiwiU1RSRUFNX0NPTlRFTlRfVEVYVCIsImZydXN0dW1DdWxsZWQiLCJfaW52ZXJzZU1hdHJpeCIsIl9yYXkiLCJfc3BoZXJlIiwiX3ZUZW1wIiwiX3ZBIiwiX3ZCIiwiX3ZDIiwiX3RlbXBBIiwiX3RlbXBCIiwiX3RlbXBDIiwiX21vcnBoQSIsIl9tb3JwaEIiLCJfbW9ycGhDIiwiX3V2QSIsIl91dkIiLCJfdXZDIiwiX2ludGVyc2VjdGlvblBvaW50IiwiX2ludGVyc2VjdGlvblBvaW50V29ybGQiLCJUcmFuc2Zvcm1TdG9yYWdlIiwiU3BlY2tsZU1lc2giLCJfbmVlZHNSVEUiLCJSVEUiLCJtYXRlcmlhbFN0YWNrIiwiYmF0Y2hNYXRlcmlhbFN0YWNrIiwidHJhbnNmb3Jtc0J1ZmZlciIsInRyYW5zZm9ybXNBcnJheVVuaWZvcm1zIiwidHJhbnNmb3JtU3RvcmFnZSIsIlZFUlRFWF9URVhUVVJFIiwidHJhbnNmb3Jtc1RleHR1cmVVbmlmb3JtIiwiVU5JRk9STV9BUlJBWSIsInNldE92ZXJyaWRlTWF0ZXJpYWwiLCJzZXRPdmVycmlkZUJhdGNoTWF0ZXJpYWwiLCJvdmVycmlkZU1hdGVyaWFsIiwicmVzdG9yZUJhdGNoTWF0ZXJpYWwiLCJvdmVycmlkZUJhdGNoTWF0ZXJpYWwiLCJyZXN0b3JlTWF0ZXJpYWwiLCJpc0FycmF5IiwiY29tcHV0ZUJvdW5kaW5nU3BoZXJlIiwiaW50ZXJzZWN0c1NwaGVyZSIsImludGVyc2VjdHNCb3giLCJpbnRlcnNlY3Rpb24iLCJwb3NpdGlvbkxvdyIsIm1vcnBoUG9zaXRpb24iLCJtb3JwaEF0dHJpYnV0ZXMiLCJtb3JwaFRhcmdldHNSZWxhdGl2ZSIsInV2IiwidXYyIiwiZHJhd1JhbmdlIiwiZ3JvdXBNYXRlcmlhbCIsImpsIiwiY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbiIsImZhY2UiLCJNZXNoQmF0Y2hOdW1iZXIiLCJjaGVja0ludGVyc2VjdGlvbiIsImludGVyc2VjdCIsIkJhY2tTaWRlIiwiaW50ZXJzZWN0VHJpYW5nbGUiLCJwb3NpdGlvbkhpZ2giLCJtb3JwaEluZmx1ZW5jZXMiLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLCJpbmZsdWVuY2UiLCJtb3JwaEF0dHJpYnV0ZSIsImFkZFNjYWxlZFZlY3RvciIsInN1YiIsImlzU2tpbm5lZE1lc2giLCJib25lVHJhbnNmb3JtIiwiVHJpYW5nbGUiLCJnZXRVViIsIm5vcm1hbCIsImdldE5vcm1hbCIsInNwZWNrbGVEZXB0aFZlcnQiLCJzcGVja2xlRGVwdGhGcmFnIiwiU3BlY2tsZURlcHRoTWF0ZXJpYWwiLCJydGVNb2RlbFZpZXdNYXRyaXgiLCJFeHRlbmRlZEluc3RhbmNlZE1lc2giLCJJbnN0YW5jZWRNZXNoIiwiU3BlY2tsZUluc3RhbmNlZE1lc2giLCJHcm91cCIsImluc3RhbmNlR2VvbWV0cnkiLCJyYXljYXN0Q2hpbGRyZW4iLCJzYXZlTWF0ZXJpYWxzIiwicmVzdG9yZU1hdGVyaWFscyIsInVwZGF0ZURyYXdHcm91cHMiLCJ0cmFuc2Zvcm1CdWZmZXIiLCJncmFkaWVudEJ1ZmZlciIsIm9iamVjdEluZGV4QnVmZmVyIiwicmVtb3ZlIiwiY3VzdG9tRGVwdGhNYXRlcmlhbCIsImdldEluc3RhbmNlR2VvbWV0cnlTaGFsbG93Q29weSIsImluc3RhbmNlTWF0cml4IiwiSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlIiwiU1RSRUFNX0NPTlRFTlRfTUVTSCIsImRlcHRoUGFja2luZyIsIlJHQkFEZXB0aFBhY2tpbmciLCJyZWNlaXZlU2hhZG93IiwiaW5zdGFuY2UiLCJzZXRNYXRyaXhBdCIsIkluc3RhbmNlZEJhdGNoT2JqZWN0IiwiaW5zdGFuY2VUcmFuc2Zvcm0iLCJJbnN0YW5jZWRNZXNoQmF0Y2giLCJ3ZWJHTDIiLCJ0cmFuc2Zvcm1CdWZmZXJJbmRleCIsIm5lZWRzU2h1ZmZsZSIsImluc3RhbmNlT2JqZWN0SWRCdWZmZXIiLCJzaHVmZmxlRHJhd0dyb3VwcyIsImZvdW5kSW5zdGFuY2UiLCJpbnN0YW5jZUluZGV4IiwidHJhbnNwYXJlbnRPckhpZGRlbkdyb3VwIiwidHJhbnNwYXJlbnRHcm91cCIsImhpZGRlbkdyb3VwIiwic3RlbmNpbEdyb3VwIiwidXBkYXRlR3JhZGllbnRJbmRleEJ1ZmZlckRhdGEiLCJ0cmFuc3BhcmVudERlcHRoSGlkZGVuR3JvdXAiLCJnZXRDdXJyZW50VHJhbnNmb3JtQnVmZmVyIiwiZ2V0Q3VycmVudEdyYWRpZW50QnVmZmVyIiwiZ2V0Q3VycmVudE9iamVjdEluZGV4QnVmZmVyIiwibWF0ZXJpYWxBIiwibWF0ZXJpYWxCIiwidmlzaWJsZU9yZGVyIiwidHJhbnNwYXJlbnRPcmRlciIsIm1hdGVyaWFsT3JkZXIiLCJwcmV2aW91c1ZhbHVlIiwiY3VycmVudFZhbHVlIiwiZ3JvdXBlZCIsInNvdXJjZVRyYW5zZm9ybUJ1ZmZlciIsInRhcmdldFRyYW5zZm9ybUJ1ZmZlciIsImdldE5leHRUcmFuc2Zvcm1CdWZmZXIiLCJzb3VyY2VHcmFkaWVudEJ1ZmZlciIsInRhcmdldEdyYWRpZW50QnVmZmVyIiwibmV3R3JvdXBzIiwic2NyYXRjaFJ2cyIsInRhcmdldEJ1ZmZlck9mZnNldCIsIm1hdGVyaWFsR3JvdXAiLCJtYXRlcmlhbEdyb3VwU3RhcnQiLCJtYXRlcmlhbEdyb3VwQ291bnQiLCJzdWJBcnJheSIsInJ2RWxlbUNvdW50IiwiaW5zdGFuY2VUcmFuc2Zvcm1CdWZmZXIwIiwiaW5zdGFuY2VUcmFuc2Zvcm1CdWZmZXIxIiwiaW5zdGFuY2VHcmFkaWVudEJ1ZmZlciIsImluc3RhbmNlQlZIIiwidGFyZ2V0SW5zdGFuY2VUcmFuc2Zvcm1CdWZmZXIiLCJpbmRpY2VzTGVuZ3RoIiwicG9zaXRpb25zTGVuZ3RoIiwiX2UiLCJfZiIsIl9nIiwiX2oiLCJfaCIsIm5vcm1hbHMiLCJfbCIsIl9rIiwiTk9STUFMIiwiZXJ2ZWUiLCJtYWtlSW5zdGFuY2VkTWVzaEdlb21ldHJ5IiwiaW5kZXhCdWZmZXIiLCJQcmltaXRpdmVCYXRjaCIsInByaW1pdGl2ZSIsInNldERyYXdSYW5nZSIsIm1pbk9mZnNldCIsIm1heE9mZnNldCIsIm1pbkdyYWRpZW50SW5kZXgiLCJtYXhHcmFkaWVudEluZGV4IiwibWluTWF4SW5kaWNlcyIsIm1pbkluZGV4IiwibWF4SW5kZXgiLCJ1cGRhdGVHcmFkaWVudEluZGV4QnVmZmVyIiwic2h1ZmZsZU1hdGVyaWFsT3JkZXIiLCJiaW5kIiwic291cmNlSUJPIiwiZ2V0Q3VycmVudEluZGV4QnVmZmVyIiwidGFyZ2V0SUJPIiwiZ2V0TmV4dEluZGV4QnVmZmVyIiwic291cmNlSUJPRGF0YSIsInRhcmdldElCT0RhdGEiLCJ0YXJnZXRJQk9PZmZzZXQiLCJydlRyaXNDb3VudCIsImFkZEdyb3VwIiwicmFuZ2VNaW4iLCJyYW5nZU1heCIsImdyYWRpZW50SW5kZXhCdWZmZXIiLCJjbGVhckdyb3VwcyIsIk1lc2hCYXRjaCIsImluZGV4QnVmZmVySW5kZXgiLCJpbmRleEJ1ZmZlcjAiLCJpbmRleEJ1ZmZlcjEiLCJjb2xvcldyaXRlT3JkZXIiLCJtaW5WZXJ0ZXhJbmRleCIsIm1heFZlcnRleEluZGV4IiwidkluZGV4IiwiaW5kaWNlc0NvdW50IiwiaGFzVmVydGV4Q29sb3JzIiwiZmlsbCIsImJhdGNoSW5kaWNlcyIsImFycmF5T2Zmc2V0IiwiaW5kaWNlc1N1YkFycmF5IiwicG9zaXRpb25TdWJhcnJheSIsImZsaXBOb3JtYWxzIiwiX20iLCJfbyIsIl9wIiwibWFrZU1lc2hHZW9tZXRyeSIsIlBvaW50QmF0Y2giLCJpdGVtU2l6ZSIsIm5lZWRzSW50MzJJbmRpY2VzIiwiX3ZhbHVlIiwibWFrZVBvaW50R2VvbWV0cnkiLCJQb2ludHMiLCJTVFJFQU1fQ09OVEVOVF9QT0lOVCIsIlNUUkVBTV9DT05URU5UX1BPSU5UX0NMT1VEIiwiT2JqZWN0VmlzaWJpbGl0eSIsIkNsZWFyRmxhZ3MiLCJCYXNlR1Bhc3MiLCJfZW5hYmxlZCIsIl9lbmFibGVkTGF5ZXJzIiwiX29iamVjdFZpc2liaWxpdHkiLCJfaml0dGVyIiwiX29wdGlvbnMiLCJfY2xlYXJDb2xvciIsIl9jbGVhckFscGhhIiwiX2NsZWFyRmxhZ3MiLCJfb3V0cHV0VGFyZ2V0Iiwib25BZnRlclJlbmRlciIsIl92aXNpYmlsaXR5RnVuY3Rpb24iLCJlbmFibGVkTGF5ZXJzIiwiZGlzcGxheU5hbWUiLCJvdXRwdXRUYXJnZXQiLCJqaXR0ZXIiLCJjbGVhckNvbG9yIiwiY2xlYXJBbHBoYSIsImNsZWFyRmxhZ3MiLCJ2aXNpYmlsaXR5RnVuY3Rpb24iLCJzZXRDbGVhckNvbG9yIiwic2V0Q2xlYXJGbGFncyIsImZsYWdzIiwic2V0TGF5ZXJzIiwiZW5hYmxlTGF5ZXIiLCJsYXllciIsInNldFZpc2liaWxpdHkiLCJvYmplY3RWaXNpYmlsaXR5IiwiQ1VTVE9NIiwic2V0Sml0dGVyIiwiYXBwbHlMYXllcnMiLCJlbmFibGVBbGwiLCJkaXNhYmxlQWxsIiwiZW5hYmxlIiwiY2xlYXIiLCJERVBUSCIsIlNURU5DSUwiLCJzZXRTaXplIiwiUHJvZ3Jlc3NpdmVHUGFzcyIsIl9mcmFtZUluZGV4IiwiX2FjY3VtdWxhdGlvbkZyYW1lcyIsImZyYW1lSW5kZXgiLCJhY2N1bXVsYXRpb25GcmFtZXMiLCJyZW5kZXIiLCJCYXRjaGVyIiwiY2FwcyIsIm1heEJhdGNoT2JqZWN0cyIsIm1heEJhdGNoVmVydGljZXMiLCJtaW5JbnN0YW5jZWRCYXRjaFZlcnRpY2VzIiwibWF4QmF0Y2hUZXh0T2JqZWN0cyIsImJhdGNoZXMiLCJtYXhWZXJ0ZXhVbmlmb3JtcyIsIm1ha2VCYXRjaGVzIiwid29ybGRUcmVlIiwicmVuZGVyVHJlZSIsImJhdGNoVHlwZSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJhdmVyYWdlIiwiaW5zdGFuY2VHcm91cHMiLCJpbnN0YW5jZWRCYXRjaGVzIiwiaW5zdGFuY2VkTm9kZXMiLCJldmVyeSIsInJ2cyIsInRyYW5zZm9ybXMiLCJ0IiwidGVzdEJveCIsInNjcmF0Y2hCb3giLCJwYXJzZUludCIsIm5vZGVSdiIsImRldGVybWluYW50IiwiaW5zdGFuY2VkQmF0Y2giLCJidWlsZEluc3RhbmNlZEJhdGNoIiwiZmxhdE1hcCIsIm1hdGVyaWFsSGFzaGVzIiwicmVuZGVyVmlld3NCYXRjaCIsInZhbGlkIiwic3BsaXRCYXRjaCIsInJlc3RyaWN0ZWRSdnMiLCJ2U3BsaXQiLCJ2RGl2IiwibmV4dEVydmVlIiwibmV4Q291bnQiLCJtYXhDb3VudCIsImdldE1heE9iamVjdENvdW50Iiwib1NwbGl0IiwiZGl2IiwibW9kIiwibWF0UmVmIiwiYmF0Y2hJRCIsImdlb21ldHJ5QmF0Y2giLCJpc1dlYkdMMiIsImZsb2F0VmVydGV4VGV4dHVyZXMiLCJzYXZlVmlzaWJsaXR5IiwiYXBwbHlWaXNpYmlsaXR5IiwiZ2V0VmlzaWJpbGl0eSIsIk9QQVFVRSIsIlRSQU5TUEFSRU5UIiwicHVyZ2VCYXRjaGVzIiwiZ2V0QmF0Y2hlcyIsInN1YnRyZWUiLCJpc0JhdGNoVHlwZSIsImdldEJhdGNoIiwiZ2V0UmVuZGVyVmlld01hdGVyaWFsIiwicmVzZXRCYXRjaGVzRHJhd1JhbmdlcyIsImlzb2xhdGVCYXRjaCIsIklucHV0RXZlbnQiLCJJbnB1dCIsImNvbnRhaW5lciIsInJlc3RyaWN0S2V5SW5wdXQiLCJ0YXBUaW1lb3V0IiwibGFzdFRhcCIsImxhc3RDbGljayIsInRhYkluZGV4Iiwic3R5bGUiLCJvdXRsaW5lIiwibWRUaW1lIiwicHJldmVudERlZmF1bHQiLCJmb2N1cyIsImxvYyIsIl9nZXROb3JtYWxpc2VkQ2xpY2tQb3NpdGlvbiIsImV2ZW50IiwiRGF0ZSIsImdldFRpbWUiLCJQb2ludGVyRG93biIsIlBvaW50ZXJVcCIsImRlbHRhQ2xpY2siLCJNSU5fQ0xJQ0tfVElNSU5HIiwiTUFYX0RPVUJMRV9DTElDS19USU1JTkciLCJzaGlmdEtleSIsIm11bHRpU2VsZWN0IiwiQ2xpY2siLCJ0b3VjaExvY2F0aW9uIiwidGFyZ2V0VG91Y2hlcyIsImN1cnJlbnRUaW1lIiwidGFwTGVuZ3RoIiwiY2xlYXJUaW1lb3V0IiwiRG91YmxlQ2xpY2siLCJQb2ludGVyTW92ZSIsImtleVNvdXJjZSIsIktleVVwIiwiS2V5RG93biIsIldoZWVsIiwiUG9pbnRlckNhbmNlbCIsIkNvbnRleHRNZW51IiwiZXZlbnRUeXBlIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInBvcyIsImNsaWVudFgiLCJjbGllbnRZIiwiTk9UX0lOVEVSU0VDVEVEIiwiSU5URVJTRUNURUQiLCJDT05UQUlORUQiLCJTcGVja2xlUmF5Y2FzdGVyIiwiUmF5Y2FzdGVyIiwiZGlyZWN0aW9uIiwib25PYmplY3RJbnRlcnNlY3Rpb25UZXN0IiwiU1RSRUFNX0NPTlRFTlQiLCJwYXJhbXMiLCJMaW5lMiIsInRocmVzaG9sZCIsImludGVyc2VjdE9iamVjdHMiLCJvYmplY3RzIiwicmVjdXJzaXZlIiwiaW50ZXJzZWN0T2JqZWN0IiwiYXNjU29ydCIsInRlc3QiLCJJbnRlcnNlY3Rpb25zIiwidmVjMEJ1ZmZlciIsInZlYzFCdWZmZXIiLCJvbk9iamVjdEludGVyc2VjdGlvbiIsIm9iaiIsInNldEZyb21PYmplY3QiLCJtYXRyaXhXb3JsZEludmVyc2UiLCJzc0Rpc3RhbmNlIiwibGluZVdpZHRoIiwid29ybGRTcGFjZSIsImNhc3RMYXllcnMiLCJuZWFyZXN0IiwiZmlyc3RPbmx5Iiwic2V0RnJvbUNhbWVyYSIsInByZXNlcnZlTWFzayIsInNldFJheWNhc3RlckxheWVycyIsInJlc3VsdCIsImludGVyc2VjdEludGVybmFsIiwibWFzayIsImludGVyc2VjdFJheSIsInJlc3VsdHMiLCJnZXRPYmplY3RCeU5hbWUiLCJib3VuZHNCdWZmZXIiLCJwb2ludE9uTGluZSIsImFhYmJQbGFuZVBvaW50cyIsInBsYW5lIiwib3V0UG9pbnRzIiwiZGlyIiwib3JpZyIsImRpc3RhbmNlVG9QbGFuZSIsInNwZWNrbGVTaGFkb3djYXRjaGVyVmVydCIsInNwZWNrbGVTaGFkb3djYXRjaGVyRnJhZyIsIlNwZWNrbGVTaGFkb3djYXRjaGVyTWF0ZXJpYWwiLCJ0ZXgwIiwidGV4MSIsInRleDIiLCJ0ZXgzIiwid2VpZ2h0cyIsInNpZ21vaWRSYW5nZSIsInNpZ21vaWRTdHJlbmd0aCIsIkRlZmF1bHRTaGFkb3djYXRjaGVyQ29uZmlnIiwidGV4dHVyZVNpemUiLCJibHVyUmFkaXVzIiwic3RkRGV2aWF0aW9uIiwiU2hhZG93Y2F0Y2hlclBhc3MiLCJvdXRwdXRUZXh0dXJlIiwiX25lZWRzVXBkYXRlIiwiZHJhd0RlcHRoTWF0ZXJpYWwiLCJkZXB0aE1hdGVyaWFsIiwibGV2ZWxzIiwiZGVidWdDYW1lcmEiLCJyZW5kZXJUYXJnZXRzIiwidGVtcFRhcmdldHMiLCJibHVyU3RkRGV2IiwicHJldkJsdXJTdGREZXYiLCJwcmV2Qmx1clJhZGl1cyIsInJ0IiwiV2ViR0xSZW5kZXJUYXJnZXQiLCJMaW5lYXJGaWx0ZXIiLCJ3cmFwUyIsIlJlcGVhdFdyYXBwaW5nIiwid3JhcFQiLCJPcnRob2dyYXBoaWNDYW1lcmEiLCJ2Qmx1ck1hdGVyaWFsIiwiRGVwdGhMaW1pdGVkQmx1clNoYWRlciIsImhCbHVyTWF0ZXJpYWwiLCJCYXNpY0RlcHRoUGFja2luZyIsImJsZW5kTWF0ZXJpYWwiLCJmc1F1YWQiLCJGdWxsU2NyZWVuUXVhZCIsImNhbWVyYUhlbHBlciIsIkNhbWVyYUhlbHBlciIsIlBST1BTIiwiZGVwdGhDdXRvZmYiLCJCbHVyU2hhZGVyVXRpbHMiLCJjb25maWd1cmUiLCJfcmVuZGVyZXIiLCJ1cGRhdGVSVEVWaWV3TW9kZWwiLCJnZXRDbGVhckNvbG9yIiwib3JpZ2luYWxDbGVhckFscGhhIiwiZ2V0Q2xlYXJBbHBoYSIsIm9yaWdpbmFsQXV0b0NsZWFyIiwiYXV0b0NsZWFyIiwibWF4Q2FtZXJhRmFyIiwidXBkYXRlUHJvamVjdGlvbk1hdHJpeCIsInNldFJlbmRlclRhcmdldCIsInNldENsZWFyQWxwaGEiLCJ1cGRhdGVDbGlwcGluZ1BsYW5lcyIsInBsYW5lcyIsInNldE91dHB1dFNpemUiLCJzZXRXZWlnaHRzIiwidXBkYXRlQ2FtZXJhIiwicGxhbmVCb3giLCJwbGFuZVNpemUiLCJwbGFuZUNlbnRlciIsInJpZ2h0IiwiYm90dG9tIiwidXBkYXRlQ29uZmlnIiwiY29uZmlnIiwiU2hhZG93Y2F0Y2hlciIsInNoYWRvd2NhdGNoZXJNZXNoIiwicGxhbmVNZXNoIiwiY29uZmlndXJhdGlvbiIsIl9jb25maWciLCJKU09OIiwic3RyaW5naWZ5IiwicmVuZGVybGF5ZXJzIiwic2hhZG93Y2F0Y2hlclBhc3MiLCJkaXNwbGF5TWF0ZXJpYWwiLCJDdXN0b21CbGVuZGluZyIsIkFkZEVxdWF0aW9uIiwiTWF4RXF1YXRpb24iLCJaZXJvRmFjdG9yIiwiT25lRmFjdG9yIiwiRHN0QWxwaGFGYWN0b3IiLCJNRVNIX05BTUUiLCJiYWtlIiwibWF4VGV4U2l6ZSIsImZvcmNlIiwidXBkYXRlUGxhbmVNZXNoIiwiZ2V0VGV4dHVyZVNpemUiLCJ3b3JsZEhlaWdodCIsIk1BWF9URVhUVVJFX1NJWkVfU0NBTEUiLCJib3hTaXplIiwiYm94Q2VudGVyIiwibmVlZHNSZWJ1aWxkIiwidXBkYXRlUGxhbmVNZXNoR2VvbWV0cnkiLCJncm91bmRQbGFuZUdlb21ldHJ5IiwiUGxhbmVHZW9tZXRyeSIsIlBMQU5FX1NVQkQiLCJDYW1lcmFFdmVudCIsIkNhbWVyYVByb2plY3Rpb24iLCJ2aWV3ZXIiLCJzaGFkb3dWaWV3ZXIiLCJydGVTaGFkb3dWaWV3TW9kZWxNYXRyaXgiLCJTcGVja2xlV2ViR0xSZW5kZXJlciIsIldlYkdMUmVuZGVyZXIiLCJyZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzIiwicmVuZGVyVGFyZ2V0IiwiYWN0aXZlQ3ViZUZhY2VJbmRleCIsIldlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIiwiZnJhbWVidWZmZXIiLCJwcm9wZXJ0aWVzIiwiX193ZWJnbEZyYW1lYnVmZmVyIiwiV2ViR0xDdWJlUmVuZGVyVGFyZ2V0Iiwic3RhdGUiLCJiaW5kRnJhbWVidWZmZXIiLCJ0ZXh0dXJlRm9ybWF0IiwiZm9ybWF0IiwidGV4dHVyZVR5cGUiLCJjb252ZXJ0IiwiZ2V0UGFyYW1ldGVyIiwiaGFsZkZsb2F0U3VwcG9ydGVkQnlFeHQiLCJIYWxmRmxvYXRUeXBlIiwiZXh0ZW5zaW9ucyIsImNhcGFiaWxpdGllcyIsIlVuc2lnbmVkQnl0ZVR5cGUiLCJyZWFkUGl4ZWxzIiwiZ2V0UmVuZGVyVGFyZ2V0IiwiZW5jb2RpbmciLCJleHRlbnNpb24iLCJVbnNpZ25lZFNob3J0NDQ0NFR5cGUiLCJVbnNpZ25lZFNob3J0NTU1MVR5cGUiLCJCeXRlVHlwZSIsIlNob3J0VHlwZSIsIlVuc2lnbmVkU2hvcnRUeXBlIiwiSW50VHlwZSIsIlVuc2lnbmVkSW50VHlwZSIsIkhBTEZfRkxPQVRfT0VTIiwiQWxwaGFGb3JtYXQiLCJMdW1pbmFuY2VGb3JtYXQiLCJMdW1pbmFuY2VBbHBoYUZvcm1hdCIsIkRlcHRoRm9ybWF0IiwiRGVwdGhTdGVuY2lsRm9ybWF0IiwiUmVkRm9ybWF0IiwiUkdCRm9ybWF0IiwiX1NSR0JBRm9ybWF0IiwiU1JHQl9BTFBIQV9FWFQiLCJSZWRJbnRlZ2VyRm9ybWF0IiwiUkdGb3JtYXQiLCJSR0ludGVnZXJGb3JtYXQiLCJSR0JBSW50ZWdlckZvcm1hdCIsIlJHQl9TM1RDX0RYVDFfRm9ybWF0IiwiUkdCQV9TM1RDX0RYVDFfRm9ybWF0IiwiUkdCQV9TM1RDX0RYVDNfRm9ybWF0IiwiUkdCQV9TM1RDX0RYVDVfRm9ybWF0Iiwic1JHQkVuY29kaW5nIiwiQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQiLCJDT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVCIsIkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUIiwiQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFQiLCJDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIiwiQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQiLCJDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCIsIkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUIiwiUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQiLCJSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdCIsIlJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdCIsIlJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCIsIkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUciLCJDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HIiwiQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUciLCJDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyIsIlJHQl9FVEMxX0Zvcm1hdCIsIkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0wiLCJSR0JfRVRDMl9Gb3JtYXQiLCJSR0JBX0VUQzJfRUFDX0Zvcm1hdCIsIkNPTVBSRVNTRURfU1JHQjhfRVRDMiIsIkNPTVBSRVNTRURfUkdCOF9FVEMyIiwiQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMiLCJDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDIiwiUkdCQV9BU1RDXzR4NF9Gb3JtYXQiLCJSR0JBX0FTVENfNXg0X0Zvcm1hdCIsIlJHQkFfQVNUQ181eDVfRm9ybWF0IiwiUkdCQV9BU1RDXzZ4NV9Gb3JtYXQiLCJSR0JBX0FTVENfNng2X0Zvcm1hdCIsIlJHQkFfQVNUQ184eDVfRm9ybWF0IiwiUkdCQV9BU1RDXzh4Nl9Gb3JtYXQiLCJSR0JBX0FTVENfOHg4X0Zvcm1hdCIsIlJHQkFfQVNUQ18xMHg1X0Zvcm1hdCIsIlJHQkFfQVNUQ18xMHg2X0Zvcm1hdCIsIlJHQkFfQVNUQ18xMHg4X0Zvcm1hdCIsIlJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQiLCJSR0JBX0FTVENfMTJ4MTBfRm9ybWF0IiwiUkdCQV9BU1RDXzEyeDEyX0Zvcm1hdCIsIkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUiIsIkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFIiLCJDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFIiLCJDT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSIiwiQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSIiwiQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUiIsIkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUiIsIkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFIiLCJDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFIiLCJDT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSIiwiQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSIiwiQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUiIsIkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUiIsIkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIiLCJDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFIiLCJDT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSIiwiQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiIsIkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSIiwiQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUiIsIkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSIiwiQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUiIsIkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSIiwiQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIiLCJDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFIiLCJDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiIsIkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUiIsIkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSIiwiQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSIiwiUkdCQV9CUFRDX0Zvcm1hdCIsIkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVCIsIkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVCIsIlVuc2lnbmVkSW50MjQ4VHlwZSIsIlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMIiwiR2VvbWV0cnlQYXNzIiwic2V0Q2xpcHBpbmdQbGFuZXMiLCJEZWZhdWx0UGlwZWxpbmVPcHRpb25zIiwiZWRnZXMiLCJQaXBlbGluZSIsInBhc3NMaXN0IiwiZHJhd2luZ1NpemUiLCJmcmFtZVByb2plY3Rpb24iLCJqaXR0ZXJJbmRleCIsImppdHRlck9mZnNldHMiLCJnZW5lcmF0ZUhhbHRvbkppdGVycyIsInNwZWNrbGVSZW5kZXJlciIsInBhc3NlcyIsIm9uQmVmb3JlUGlwZWxpbmVSZW5kZXIiLCJvbkFmdGVyUGlwZWxpbmVSZW5kZXIiLCJnZXRQYXNzIiwicGFzcyIsInJlc2V0IiwicmVuZGVyaW5nQ2FtZXJhIiwicmVzdG9yZVZpc2liaWxpdHkiLCJiYXRjaGVyIiwidmlzaWJpbGl0eU1hcCIsImppdHRlclgiLCJqaXR0ZXJZIiwicmVuZGVyUmV0dXJuIiwibGFzdFZpc2liaWxpdHkiLCJwYXNzT2JqZWN0VmlzaWJpbGl0eSIsInBpeGVsV2lkdGgiLCJwaXhlbEhlaWdodCIsInBpeGVsUmF0aW9XIiwicGl4ZWxSYXRpb0giLCJzZXRWaWV3T2Zmc2V0IiwiUGVyc3BlY3RpdmVDYW1lcmEiLCJyZXNpemUiLCJoYWx0b25OdW1iZXIiLCJiYXNlIiwiZiIsImppdHRlcnMiLCJjcmVhdGVSZW5kZXJUYXJnZXQiLCJkZXB0aEJ1ZmZlciIsInN0ZW5jaWxCdWZmZXIiLCJjcmVhdGVNdWx0aXBsZVJlbmRlclRhcmdldCIsIkRlcHRoVHlwZSIsIkRlZmF1bHREZXB0aFBhc3NPcHRpb25zIiwiZGVwdGhUeXBlIiwiTElORUFSX0RFUFRIIiwiRGVwdGhQYXNzIiwiZGVwdGhUZXh0dXJlIiwiZGVwdGhTaWRlIiwic3BlY2tsZVN0YXRpY0FvQWNjdW11bGF0ZUZyYWciLCJzcGVja2xlU3RhdGljQW9BY2N1bXVsYXRlVmVydCIsInNwZWNrbGVTdGF0aWNBb0dlbmVyYXRlVmVydCIsInNwZWNrbGVTdGF0aWNBb0dlbmVyYXRlRnJhZyIsIkRlZmF1bHRQcm9ncmVzc2l2ZUFPUGFzc09wdGlvbnMiLCJrZXJuZWxSYWRpdXMiLCJiaWFzIiwia2VybmVsU2l6ZSIsIlByb2dyZXNzaXZlQU9QYXNzIiwic2V0VGV4dHVyZSIsInVOYW1lIiwiZ2VuZXJhdGlvbk1hdGVyaWFsIiwia2VybmVscyIsIm5vaXNlVGV4dHVyZXMiLCJfZ2VuZXJhdGlvbkJ1ZmZlciIsInREZXB0aCIsInROb3JtYWwiLCJjYW1lcmFGYXIiLCJjYW1lcmFQcm9qZWN0aW9uTWF0cml4IiwiY2FtZXJhSW52ZXJzZVByb2plY3Rpb25NYXRyaXgiLCJ0YW5Gb3YiLCJ0Tm9pc2UiLCJrZXJuZWwiLCJkZXJpdmF0aXZlcyIsInVuaWZvcm1zTmVlZFVwZGF0ZSIsImFjY3VtdWxhdGVNYXRlcmlhbCIsInREaWZmdXNlIiwiUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb24iLCJpc1BlcnNwZWN0aXZlQ2FtZXJhIiwicHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnZW5lcmF0ZVNhbXBsZUtlcm5lbCIsImdlbmVyYXRlUmFuZG9tS2VybmVsUm90YXRpb25zIiwic2FtcGxlIiwibGVycCIsIlNpbXBsZXhOb2lzZSIsInNpbXBsZXgiLCJub2lzZTNkIiwic3BlY2tsZUFwcGx5QW9WZXJ0Iiwic3BlY2tsZUFwcGx5QW9GcmFnIiwiRGVmYXVsdEJsZW5kUGFzc09wdGlvbnMiLCJibGVuZEFPIiwiYmxlbmRFZGdlcyIsIkJsZW5kUGFzcyIsIm1hdGVyaWFsQ29weSIsIkJMRU5EX0FPIiwiQkxFTkRfRURHRVMiLCJ0QW8iLCJ0RWRnZXMiLCJEc3RDb2xvckZhY3RvciIsIlByb2dyZXNzaXZlUGlwZWxpbmUiLCJhY2N1bXVsYXRpb25GcmFtZUluZGV4IiwiYWNjdW11bGF0aW9uRnJhbWVDb3VudCIsImR5bmFtaWNTdGFnZSIsInByb2dyZXNzaXZlU3RhZ2UiLCJwYXNzdGhyb3VnaFN0YWdlIiwiYWNjdW11bGF0aW5nIiwiZHluYW1pY1Bhc3NlcyIsInByb2dyZXNzaXZlUGFzc2VzIiwicGFzc3Rocm91Z2hQYXNzZXMiLCJvbkFjY3VtdWxhdGlvbkNvbXBsZXRlIiwib25TdGF0aW9uYXJ5QmVnaW4iLCJvblN0YXRpb25hcnlFbmQiLCJzcGVja2xlRGlzcGxhY2VWZXJ0Iiwic3BlY2tsZURpc3BsYWNlRnJhZyIsIlNwZWNrbGVEaXNwbGFjZU1hdGVyaWFsIiwiZGlzcGxhY2VtZW50IiwiU3RlbmNpbFBhc3MiLCJzdGVuY2lsTWF0ZXJpYWwiLCJTdGVuY2lsTWFza1Bhc3MiLCJzdGVuY2lsTWFza01hdGVyaWFsIiwiRXF1YWxTdGVuY2lsRnVuYyIsInNwZWNrbGVFZGdlc0dlbmVyYXRvckZyYWciLCJzcGVja2xlRWRnZXNHZW5lcmF0b3JWZXJ0IiwiRGVmYXVsdEVkZ2VzUGFzc09wdGlvbnMiLCJkZXB0aE11bHRpcGxpZXIiLCJkZXB0aEJpYXMiLCJub3JtYWxNdWx0aXBsaWVyIiwibm9ybWFsQmlhcyIsIm91dGxpbmVUaGlja25lc3MiLCJvdXRsaW5lT3BhY2l0eSIsImJhY2tncm91bmRDb2xvciIsIkVkZ2VzUGFzcyIsImVkZ2VzTWF0ZXJpYWwiLCJ1RGVwdGhNdWx0aXBsaWVyIiwidURlcHRoQmlhcyIsInVOb3JtYWxNdWx0aXBsaWVyIiwidU5vcm1hbEJpYXMiLCJ1T3V0bGluZVRoaWNrbmVzcyIsInVPdXRsaW5lRGVuc2l0eSIsInVPdXRsaW5lQ29sb3IiLCJ1QmFja2dyb3VuZENvbG9yIiwidElkIiwic3BlY2tsZVRlbXBvcmFsU3VwZXJzYW1wbGluZ1ZlcnQiLCJzcGVja2xlVGVtcG9yYWxTdXBlcnNhbXBsaW5nRnJhZyIsIlRBQVBhc3MiLCJvdXRwdXRUb1NjcmVlbiIsImhpc3RvcnlUYXJnZXQiLCJDb3B5U2hhZGVyIiwicmVwcm9qZWN0aW9uTWF0ZXJpYWwiLCJ0TGFzdEZyYW1lIiwiaW5wdXRUZXh0dXJlIiwiaW5wdXRUZXgiLCJzcGVja2xlRGVwdGhOb3JtYWxWZXJ0Iiwic3BlY2tsZURlcHRoTm9ybWFsRnJhZyIsIlNwZWNrbGVEZXB0aE5vcm1hbE1hdGVyaWFsIiwiRGVmYXVsdERlcHRoTm9ybWFsUGFzc09wdGlvbnMiLCJEZXB0aE5vcm1hbFBhc3MiLCJtcnRNYXRlcmlhbCIsIm1ydCIsIm5vcm1hbFRleHR1cmUiLCJzcGVja2xlRGVwdGhOb3JtYWxJZEZyYWciLCJzcGVja2xlRGVwdGhOb3JtYWxJZFZlcnQiLCJTcGVja2xlRGVwdGhOb3JtYWxJZE1hdGVyaWFsIiwiRGVmYXVsdERlcHRoTm9ybWFsSWRQYXNzT3B0aW9ucyIsIkRlcHRoTm9ybWFsSWRQYXNzIiwiaWRUZXh0dXJlIiwic3BlY2tsZU5vcm1hbFZlcnQiLCJzcGVja2xlTm9ybWFsRnJhZyIsIlNwZWNrbGVOb3JtYWxNYXRlcmlhbCIsIk5vcm1hbHNQYXNzIiwibm9ybWFsc01hdGVyaWFsIiwiRGVmYXVsdEVkZ2VzUGlwZWxpbmVPcHRpb25zIiwiRWRnZXNQaXBlbGluZSIsImlzTVJUQ2FwYWJsZSIsImdldEV4dGVuc2lvbiIsIk1SVFBpcGVsaW5lIiwiU1JUUGlwZWxpbmUiLCJkZXB0aE5vcm1hbElkUGFzc1Zpc2liaWxpdHkiLCJkZXB0aE5vcm1hbElkUGFzcyIsImRlcHRoTm9ybWFsSWRQYXNzVHJhbnNwYXJlbnQiLCJkZXB0aFBhc3NOb3JtYWxJZER5bmFtaWMiLCJkZXB0aFBhc3NOb3JtYWxJZER5bmFtaWNUcmFuc3BhcmVudCIsImVkZ2VzUGFzcyIsImVkZ2VzUGFzc0R5bmFtaWMiLCJ0YWFQYXNzIiwiZGVwdGhQYXNzIiwiZGVwdGhQYXNzRHluYW1pYyIsImVkZ2VQYXNzIiwiZWRnZVBhc3NEeW5hbWljIiwib3V0cHV0VGV4dHVyZUR5bmFtaWMiLCJub3JtYWxQYXNzIiwibm9ybWFsUGFzc0R5bmFtaWMiLCJEZWZhdWx0UGlwZWxpbmUiLCJlZGdlc1BpcGVsaW5lIiwiZGVwdGhUZXgiLCJkZXB0aFN1YlBpcGVsaW5lRHluYW1pYyIsImRlcHRoU3ViUGlwZWxpbmVQcm9ncmVzc2l2ZSIsIm9wYXF1ZUNvbG9yUGFzcyIsInRyYW5zcGFyZW50Q29sb3JQYXNzIiwiU0hBRE9XQ0FUQ0hFUiIsInByb2dyZXNzaXZlQU9QYXNzIiwiYmxlbmRQYXNzIiwiYmxlbmRQYXNzRHluYW1pYyIsInN0ZW5jaWxQYXNzIiwic3RlbmNpbE1hc2tQYXNzIiwib3ZlcmxheVBhc3MiLCJNRUFTVVJFTUVOVFMiLCJfdmVjdG9yMyIsIl9ib3gzIiwiZXF1YWxzIiwib3RoZXIiLCJlcHNpb24iLCJyb3RhdGlvbiIsIl9taW4iLCJfbWF4IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsImZyb21PQkIiLCJvYmIiLCJsb2NhbENvcm5lcnMiLCJ3b3JsZENvcm5lcnMiLCJjb3JuZXIiLCJhcHBseU1hdHJpeDMiLCJzZXRGcm9tUG9pbnRzIiwiaW50ZXJzZWN0T0JCIiwiYWFiYkNvcm5lcnMiLCJpbnZSb3RhdGlvbiIsIk1hdHJpeDMiLCJsb2NhbEFBQkJDb3JuZXJzIiwiaW50ZXJzZWN0aW9uUG9pbnRzIiwiY2VudHJvaWQiLCJwdCIsImRpdmlkZVNjYWxhciIsImJlc3RGaXRBeGVzIiwiZXh0cmFjdEJhc2lzIiwicHJvaiIsInNldENvbXBvbmVudCIsIndvcmxkQ2VudHJvaWQiLCJpc0luZmluaXRlQm94IiwiUmVuZGVyaW5nU3RhdHMiLCJyZW5kZXJUaW1lQWNjIiwicmVuZGVyVGltZVNhbXBsZXMiLCJyZW5kZXJUaW1lTWF4U2FtcGxlcyIsInJlbmRlclRpbWVTdGFydCIsInJlbmRlclRpbWUiLCJ0cmlzQ291bnQiLCJmcmFtZVN0YXJ0IiwiZnJhbWVFbmQiLCJEZWZhdWx0T2JqZWN0UGlja0NvbmZpZ3VyYXRpb24iLCJwaWNrZWRPYmplY3RzRmlsdGVyIiwiYXJnIiwiU3BlY2tsZVJlbmRlcmVyIiwibmVlZHNSZW5kZXIiLCJfbmVlZHNSZW5kZXIiLCJzaGFkb3dNYXBOZWVkc1VwZGF0ZSIsInNoYWRvd01hcCIsInNjZW5lQm94IiwidmlzaWJsZVNjZW5lQm94IiwidmlzaWJsZVJhbmdlIiwibG8iLCJoaSIsInFTdGFydCIsInFFbmQiLCJzRW5kIiwic2NlbmVTcGhlcmUiLCJzY2VuZUNlbnRlciIsImNsaXBwaW5nVm9sdW1lIiwiX2NsaXBwaW5nVm9sdW1lIiwibG9jYWxDbGlwcGluZ0VuYWJsZWQiLCJmcm9tQm94MyIsIl9jbGlwcGluZ1BsYW5lcyIsIlBsYW5lIiwicmVzZXRQaXBlbGluZSIsImFsbE9iamVjdHMiLCJzdW5MaWdodCIsInN1biIsImluZGlyZWN0SUJMIiwiZW52aXJvbm1lbnQiLCJpbmRpcmVjdElCTEludGVuc2l0eSIsInNwZWNrbGVDYW1lcmEiLCJfc3BlY2tsZUNhbWVyYSIsIkR5bmFtaWMiLCJfcGlwZWxpbmUiLCJTdGF0aW9uYXJ5IiwiRnJhbWVVcGRhdGUiLCJwaXBlbGluZSIsIl9zaGFkb3djYXRjaGVyIiwiaW50ZXJzZWN0aW9ucyIsIl9pbnRlcnNlY3Rpb25zIiwicmVuZGVyaW5nU3RhdHMiLCJfcmVuZGVyaW5TdGF0cyIsImJhdGNoRGV0YWlscyIsInRyaXMiLCJ2ZXJ0cyIsIlNIT1dfSEVMUEVSUyIsIklHTk9SRV9aRVJPX09QQUNJVFlfT0JKRUNUUyIsIlNIT1dfQlZIIiwic3VuQ29uZmlndXJhdGlvbiIsIl9yZW5kZXJPdmVycmlkZSIsIm9iamVjdFBpY2tDb25maWd1cmF0aW9uIiwiU2NlbmUiLCJyb290R3JvdXAiLCJhbnRpYWxpYXMiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJzdGVuY2lsIiwic2V0UGl4ZWxSYXRpbyIsIndpbmRvdyIsImRldmljZVBpeGVsUmF0aW8iLCJvdXRwdXRFbmNvZGluZyIsInRvbmVNYXBwaW5nIiwiQUNFU0ZpbG1pY1RvbmVNYXBwaW5nIiwidG9uZU1hcHBpbmdFeHBvc3VyZSIsIlZTTVNoYWRvd01hcCIsImF1dG9VcGRhdGUiLCJwaHlzaWNhbGx5Q29ycmVjdExpZ2h0cyIsImF1dG9DbGVhckNvbG9yIiwiYXV0b0NsZWFyRGVwdGgiLCJhdXRvQ2xlYXJTdGVuY2lsIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJhcHBlbmRDaGlsZCIsImRvbUVsZW1lbnQiLCJvbkNsaWNrIiwib25Eb3VibGVDbGljayIsImFkZERpcmVjdExpZ2h0cyIsImhlbHBlcnMiLCJkaXJMaWdodEhlbHBlciIsIkRpcmVjdGlvbmFsTGlnaHRIZWxwZXIiLCJjYW1IZWxwZXIiLCJzaGFkb3ciLCJvcGFxdWUiLCJ1cGRhdGVSVEVTaGFkb3dzIiwidXBkYXRlVHJhbnNmb3JtcyIsInVwZGF0ZVJURVNoYWRvd0J1ZmZlcnMiLCJtZXNoQmF0Y2hlcyIsInNwZWNrbGVNZXNoIiwidHJhdmVyc2UiLCJtZXNoQmF0Y2giLCJkcHIiLCJnZXRQaXhlbFJhdGlvIiwiYWRkUmVuZGVyVHJlZSIsInN1YnRyZWVHcm91cCIsImN1cnJlbnRCYXRjaENvdW50IiwibGFzdEJhdGNoQ291bnQiLCJhZGRCYXRjaCIsInVwZGF0ZURpcmVjdExpZ2h0cyIsInJldHVybiIsInJlbW92ZVJlbmRlclRyZWUiLCJ1cGRhdGVIZWxwZXJzIiwidXBkYXRlU2hhZG93Q2F0Y2hlciIsInVwZGF0ZUNhbWVyYVBsYW5lcyIsImJhdGNoUmVuZGVyYWJsZSIsInVzZVJURSIsImNhbmNlbFJlbmRlclRyZWUiLCJzZXRNYXRlcmlhbCIsInJ2TWFwIiwic2V0TWF0ZXJpYWxJbnN0YW5jZSIsInNldEZpbHRlck1hdGVyaWFsIiwic2V0RGF0YU1hdGVyaWFsIiwiZmxhdHRlbkRyYXdSYW5nZXMiLCJmbGF0UmFuZ2VzIiwiZ2V0QmF0Y2hNYXRlcmlhbCIsInJlc2V0TWF0ZXJpYWxzIiwibWF4VGV4dHVyZVNpemUiLCJEaXJlY3Rpb25hbExpZ2h0IiwibWFwU2l6ZSIsImQiLCJzdW5UYXJnZXQiLCJPYmplY3QzRCIsInBoaSIsInRoZXRhIiwicmFkaXVzT2Zmc2V0Iiwic3BoZXJpY2FsIiwiU3BoZXJpY2FsIiwic2V0RnJvbVNwaGVyaWNhbCIsInVwZGF0ZVdvcmxkTWF0cml4IiwidXBkYXRlTWF0cmljZXMiLCJjb3JuZXIxIiwiY29ybmVyMiIsImNvcm5lcjMiLCJjb3JuZXI0IiwiY29ybmVyNSIsImNvcm5lcjYiLCJjb3JuZXI3IiwiY29ybmVyOCIsImxpZ2h0U3BhY2VCb3giLCJzZXRTdW5MaWdodENvbmZpZ3VyYXRpb24iLCJMaWdodENvbmZpZ1VwZGF0ZWQiLCJxdWVyeUhpdHMiLCJydk1hdGVyaWFsIiwicmVuZGVyVmlld0Zyb21JbnRlcnNlY3Rpb24iLCJxdWVyeVJlc3VsdCIsImhpdElkIiwiaGl0Tm9kZXMiLCJoaXROb2RlIiwicGFyZW50Tm9kZSIsInF1ZXJ5SGl0SWRzIiwibm9kZUlkIiwiT2JqZWN0Q2xpY2tlZCIsInF1ZXJ5UmVzdWx0cyIsIm11bHRpcGxlIiwic2VsZWN0aW9uSW5mbyIsIk9iamVjdERvdWJsZUNsaWNrZWQiLCJib3hGcm9tT2JqZWN0cyIsIm9iamVjdElkcyIsImdldE9iamVjdCIsInNjcmVlblRvTkRDIiwiTkRDVG9TY3JlZW4iLCJkZWJ1Z1Nob3dCYXRjaGVzIiwicmVuZGVyTWF0IiwiZ2V0QmF0Y2hJZHMiLCJpZHMiLCJnZXRCYXRjaFNpemUiLCJnZXRPYmplY3RzIiwibWVzaGVzIiwiZW5hYmxlTGF5ZXJzIiwiZmxhdHRlbk9iamVjdCIsImZsYXR0ZW4iLCJmbGF0dGVuUHJvcCIsInBrIiwiUHJvcGVydHlNYW5hZ2VyIiwicHJvcENhY2hlIiwiZ2V0UHJvcGVydGllcyIsInJlc291cmNlVXJsIiwiYnlwYXNzQ2FjaGUiLCJyb290Tm9kZSIsImFjdHVhbFJvb3QiLCJuIiwicHJvcFZhbHVlcyIsImFsbFByb3BJbmZvcyIsInByb3BLZXkiLCJwcm9wVmFsdWVzQXJyIiwicHJvcEluZm8iLCJvYmplY3RDb3VudCIsInN0cmluZ1Byb3BJbmZvIiwidmFsdWVHcm91cHMiLCJsb2NhbGVDb21wYXJlIiwibnVtUHJvcCIsIk1BWF9WQUxVRSIsIk1JTl9WQUxVRSIsIkludGVyc2VjdGlvblF1ZXJ5U29sdmVyIiwic2V0Q29udGV4dCIsInNvbHZlIiwicXVlcnkiLCJvcGVyYXRpb24iLCJzb2x2ZU9jY2x1c2lvbiIsInNvbHZlUGljayIsInRhcmdldERpc3RhbmNlIiwidG9sZXJhbmNlIiwiZnJ1c3R1bUJ1ZiIsIkZydXN0dW0iLCJ2ZWMzQnVmZiIsIlBvaW50UXVlcnlTb2x2ZXIiLCJzb2x2ZVByb2plY3Rpb24iLCJzb2x2ZVVucHJvamVjdGlvbiIsInByb2plY3RlZCIsImluRnJ1c3R1bSIsInNldEZyb21Qcm9qZWN0aW9uTWF0cml4IiwicHJvamVjdCIsInVucHJvamVjdGVkIiwidW5wcm9qZWN0IiwiUXVlcmllcyIsImlzUG9pbnRRdWVyeSIsImlzSW50ZXJzZWN0aW9uUXVlcnkiLCJEZWZhdWx0UG9pbnRRdWVyeVNvbHZlciIsIkRlZmF1bHRJbnRlcnNlY3Rpb25RdWVyeVNvbHZlciIsIkV4dGVuc2lvbiIsImluamVjdCIsIm9uRWFybHlVcGRhdGUiLCJvbkxhdGVVcGRhdGUiLCJvblJlc2l6ZSIsIlNFVFRMSU5HX1RJTUUiLCJUSU1FX01TIiwic2Vjb25kIiwiTUlOX0RFQ0FZX01JTExJU0VDT05EUyIsIkRFQ0FZX01JTExJU0VDT05EUyIsIkRhbXBlciIsImRlY2F5TWlsbGlzZWNvbmRzIiwidmVsb2NpdHkiLCJuYXR1cmFsRnJlcXVlbmN5Iiwic2V0RGVjYXlUaW1lIiwieEdvYWwiLCJ0aW1lU3RlcE1pbGxpc2Vjb25kcyIsInhOb3JtYWxpemF0aW9uIiwibmlsU3BlZWQiLCJkZWx0YVgiLCJpbnRlcm1lZGlhdGVWZWxvY2l0eSIsImludGVybWVkaWF0ZVgiLCJkZWNheSIsImV4cCIsIm5ld1ZlbG9jaXR5IiwiYWNjZWxlcmF0aW9uIiwiU3BlY2tsZUNvbnRyb2xzIiwiX3VwIiwiX21pbkRpc3QiLCJ1cCIsIm1pbkRpc3QiLCJBbmdsZURhbXBlciIsIndyYXBBbmdsZSIsImFuZ2xlIiwicGkyIiwiX3ZlY3RvckJ1ZmYwIiwiX1BJXzIiLCJ3YWxraW5nU3BlZWQiLCJjbG9zZVJlbGF0aXZlRmFjdG9yIiwiZmFyUmVsYXRpdmVGYWN0b3IiLCJyZWxhdGl2ZU1pblRhcmdldERpc3RhbmNlIiwiRmx5Q29udHJvbHMiLCJtb3ZlU3BlZWQiLCJzZXREYW1wZXJEZWNheVRpbWUiLCJkYW1wZXJEZWNheSIsInRhcmdldENhbWVyYSIsIl90YXJnZXRDYW1lcmEiLCJyb3RhdGUiLCJfYmFzaXNUcmFuc2Zvcm0iLCJtYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbiIsInNldEZyb21Vbml0VmVjdG9ycyIsIl9iYXNpc1RyYW5zZm9ybUludiIsIndvcmxkIiwiZ29hbEV1bGVyIiwiZ29hbFBvc2l0aW9uIiwia2V5TWFwIiwiZm9yd2FyZCIsImJhY2siLCJkb3duIiwiY29udGV4dE1lbnVUcmlnZ2VyZWQiLCJldWxlclhEYW1wZXIiLCJldWxlcllEYW1wZXIiLCJldWxlclpEYW1wZXIiLCJwb3NpdGlvblhEYW1wZXIiLCJwb3NpdGlvbllEYW1wZXIiLCJwb3NpdGlvblpEYW1wZXIiLCJfbGFzdFRpY2siLCJvbk1vdXNlTW92ZSIsImJ1dHRvbnMiLCJtb3ZlbWVudFgiLCJtb3ZlbWVudFkiLCJhbW91bnQiLCJsb29rU3BlZWQiLCJyb3RhdGVCeSIsIm9uS2V5RG93biIsImN0cmxLZXkiLCJtZXRhS2V5IiwiYWx0S2V5IiwiY29kZSIsIm9uS2V5VXAiLCJvbkNvbnRleHRNZW51IiwiY29ubmVjdCIsImlzU3RhdGlvbmFyeSIsImNhbmNlbE1vdmUiLCJyZWxhdGl2ZUZhY3RvciIsImRlbHRhU2Vjb25kcyIsInNjYWxlZFdhbGtpbmdTcGVlZCIsIm1vdmVCeSIsInVwZGF0ZVBvc2l0aW9uUm90YXRpb24iLCJkaWFnb25hbCIsIm1pbk1heFJhbmdlIiwianVtcFRvR29hbCIsImZpdFRvU3BoZXJlIiwic3BoZXJlIiwiZ2V0V29ybGREaXJlY3Rpb24iLCJmcm9tUG9zaXRpb25BbmRUYXJnZXQiLCJjUG9zIiwiZ2V0UG9zaXRpb24iLCJjVGFyZ2V0IiwiZ2V0VGFyZ2V0IiwidFBvc2l0aW9uIiwidFRhcmdldCIsInF1YXQiLCJzZXRGcm9tUm90YXRpb25NYXRyaXgiLCJzZXRGcm9tUXVhdGVybmlvbiIsInNldEZyb21NYXRyaXhDb2x1bW4iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJnZXRDdXJyZW50VGFyZ2V0IiwicmVsYXRpdmVVcERvd24iLCJtaW5Qb2xhckFuZ2xlIiwibWF4UG9sYXJBbmdsZSIsImRpc2Nvbm5lY3QiLCJlbmFibGVMb29rIiwicSIsInNsZXJwIiwibG93ZXJMaW1pdCIsInVwcGVyTGltaXQiLCJQQU5fU0VOU0lUSVZJVFkiLCJNT1ZFTUVOVF9FUFNJTE9OIiwidmVjdG9yMyIsIlpPT01fU0VOU0lUSVZJVFkiLCJSQURJVVNfWk9PTV9GQUNUT1IiLCJQb2ludGVyQ2hhbmdlRXZlbnQiLCJjbG9zZVJlbGF0aXZlRmFjdG9yUGFuIiwiZmFyUmVsYXRpdmVGYWN0b3JQYW4iLCJyZWxhdGl2ZU1heFRhcmdldERpc3RhbmNlIiwiU21vb3RoT3JiaXRDb250cm9scyIsImVuYWJsZUludGVyYWN0aW9uIiwiZGlzYWJsZUludGVyYWN0aW9uIiwib3JiaXRTcGhlcmUiLCJpc1VzZXJQb2ludGluZyIsImVuYWJsZVBhbiIsImVuYWJsZVRhcCIsInBhblByb2plY3Rpb24iLCJwYW5QZXJQaXhlbCIsImdvYWxTcGhlcmljYWwiLCJwaXZvdGFsT3JpZ2luIiwiZ29hbE9yaWdpbiIsInRhcmdldERhbXBlclgiLCJ0YXJnZXREYW1wZXJZIiwidGFyZ2V0RGFtcGVyWiIsInRoZXRhRGFtcGVyIiwicGhpRGFtcGVyIiwicmFkaXVzRGFtcGVyIiwibG9nRm92IiwibG9nIiwiZ29hbExvZ0ZvdiIsImZvdkRhbXBlciIsInRvdWNoTW9kZSIsInBvaW50ZXJzIiwic3RhcnRQb2ludGVyUG9zaXRpb24iLCJsYXN0U2VwYXJhdGlvbiIsInRvdWNoRGVjaWRlZCIsInpvb21Db250cm9sQ29vcmQiLCJfcmFkaXVzRGVsdGEiLCJwaXZvdFBvaW50IiwibGFzdFBpdm90UG9pbnQiLCJ1c2VQaXZvdGFsIiwidG91Y2hNb2RlWm9vbSIsImR4IiwiZHkiLCJ0b3VjaERpc3RhbmNlIiwidHdvVG91Y2hEaXN0YW5jZSIsImRlbHRhWm9vbSIsIl9jb250YWluZXIiLCJ1c2VyQWRqdXN0T3JiaXQiLCJtb3ZlUGFuIiwiZGlzYWJsZVNjcm9sbCIsInRvdWNoTW9kZVJvdGF0ZSIsInRvdWNoQWN0aW9uIiwiZHhNYWciLCJkeU1hZyIsInBhc3NpdmUiLCJoYW5kbGVTaW5nbGVQb2ludGVyTW92ZSIsIm9uUG9pbnRlckRvd24iLCJvcmJpdEFyb3VuZEN1cnNvciIsImZpbHRlck9yYml0VG9DdXJzb3JIaXRzIiwic2hvd09yYml0UG9pbnQiLCJvblBvaW50ZXJNb3ZlIiwib25Qb2ludGVyVXAiLCJwb2ludGVySWQiLCJwb2ludGVyVHlwZSIsIm9uVG91Y2hDaGFuZ2UiLCJvbk1vdXNlRG93biIsInBvaW50ZXIiLCJudW1Ub3VjaGVzIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIlBvaW50ZXJDaGFuZ2VFbmQiLCJvbldoZWVsIiwiZGVsdGFZIiwiZGVsdGFNb2RlIiwib25Db250ZXh0IiwiUG9pbnRlckV2ZW50IiwiYmlsbGJvYXJkTWF0ZXJpYWwiLCJTcGhlcmVHZW9tZXRyeSIsImFwcGx5T3B0aW9ucyIsInJlY29tcHV0ZWRSYWRpdXMiLCJtaW5pbXVtUmFkaXVzIiwibWF4aW11bVJhZGl1cyIsIm1vdmVDYW1lcmEiLCJ0YXJnZXRQb3NpdGlvbiIsInRhcmdldFRhcmdldCIsImRlbHRhVGFyZ2V0IiwiZGVsdGFQb3NpdGlvbiIsImVwc2lsb24iLCJ2MCIsInYxIiwic2V0RnJvbUNhcnRlc2lhbkNvb3JkcyIsInNldE9yYml0Iiwic2V0VGFyZ2V0IiwibmF0aXZlT3JpZ2luIiwic2V0UmFkaXVzIiwicG9zaXRpb25Gcm9tU3BoZXJpY2FsIiwic2V0RmllbGRPZlZpZXciLCJjb21wdXRlTWluTWF4UmFkaXVzIiwibWF4RGlzdGFuY2UiLCJtaW5EaXN0YW5jZSIsImlzTmFOIiwiZ29hbFRoZXRhIiwiZ29hbFBoaSIsImdvYWxSYWRpdXMiLCJtaW5pbXVtQXppbXV0aGFsQW5nbGUiLCJtYXhpbXVtQXppbXV0aGFsQW5nbGUiLCJtaW5pbXVtUG9sYXJBbmdsZSIsIm1heGltdW1Qb2xhckFuZ2xlIiwibmV4dFRoZXRhIiwiaXNGaW5pdGUiLCJuZXh0UGhpIiwibmV4dFJhZGl1cyIsIm1ha2VTYWZlIiwibWluaW11bUZpZWxkT2ZWaWV3IiwibWF4aW11bUZpZWxkT2ZWaWV3IiwiYWRqdXN0T3JiaXQiLCJkZWx0YVRoZXRhIiwiZGVsdGFQaGkiLCJkVGhldGEiLCJkVGhldGFMaW1pdCIsInRhc0ludGVyc2VjdCIsInpvb21CYXNpc1JhZGl1cyIsIndvcmxkU2l6ZU9mZnNldCIsInpvb21BbW91bnQiLCJzaWduIiwiem9vbVRvQ3Vyc29yIiwiZG9sbHlBbW91bnQiLCJpbmZpbml0ZVpvb20iLCJjYW1lcmFEaXJlY3Rpb24iLCJwbGFuZVgiLCJsZW5ndGhTcSIsInBsYW5lWSIsImNyb3NzVmVjdG9ycyIsImRpbXMiLCJ3b3JsZFRvU2NyZWVuIiwiY3Vyc29yIiwibGVycFJhdGlvIiwibmV3VGFyZ2V0RW5kIiwicmFkaXVzTm9ybWFsaXNhdGlvblJhbmdlIiwibm9ybWFsaXphdGlvbiIsInBvbGFyRnJvbVBpdm90YWwiLCJxdWF0ZXJuaW9uRnJvbVNwaGVyaWNhbCIsImNhbWVyYVBpdm90RGlzdCIsImNhbWVyYVBpdm90RGlyIiwiYWNvcyIsInBvbGFyUmFkaXVzIiwiY29zIiwicG9sYXJPcmlnaW4iLCJwb3NpdGlvbkZyb21QaXZvdGFsIiwiYXBwbHlRdWF0ZXJuaW9uIiwiZ2V0UGl2b3RhbE9yaWdpbiIsImxhc3RDYW1lcmFQb3MiLCJsYXN0Q2FtZXJhUXVhdCIsInByZXZQaXZvdFBvaW50IiwiZGVsdGFQaXZvdCIsIm9ydGhvZ3JhcGhpY1NpemUiLCJjb21wdXRlT3J0aG9ncmFwaGljU2l6ZSIsInpvb20iLCJzcGhlcmVQb3MiLCJhbmdsZVRvIiwib3JiaXRTZW5zaXRpdml0eSIsImVuYWJsZU9yYml0IiwiaW5wdXRTZW5zaXRpdml0eSIsInpvb21TZW5zaXRpdml0eSIsImVuYWJsZVpvb20iLCJyYWRpYW5zIiwibm9ybWFsaXplZCIsIndyYXBwZWQiLCJwaXhlbExlbmd0aFRvU3BoZXJpY2FsQW5nbGUiLCJwaXhlbExlbmd0aCIsInRvdWNoT25lIiwidG91Y2hUd28iLCJ4T25lIiwieU9uZSIsInhUd28iLCJ5VHdvIiwieERlbHRhIiwieURlbHRhIiwiUG9pbnRlckNoYW5nZVN0YXJ0IiwiaW5pdGlhbGl6ZVBhbiIsInBzaSIsInBhblNlbnNpdGl2aXR5Iiwic2luIiwiZHh5IiwicmFkaXVzRmFjdG9yIiwibWV0ZXJzUGVyUGl4ZWwiLCJidXR0b24iLCJOZWFyUGxhbmVDYWxjdWxhdGlvbiIsIkRlZmF1bHRPcmJpdENvbnRyb2xzT3B0aW9ucyIsIm5lYXJQbGFuZUNhbGN1bGF0aW9uIiwiQUNDVVJBVEUiLCJDYW1lcmFDb250cm9sbGVyIiwiX3JlbmRlcmluZ0NhbWVyYSIsIl9hY3RpdmVDb250cm9scyIsImNvbnRyb2xzIiwiZmllbGRPZlZpZXciLCJwZXJzcGVjdGl2ZUNhbWVyYSIsIl9vcmJpdENvbnRyb2xzIiwiX2ZseUNvbnRyb2xzIiwiX2xhc3RDYW1lcmFDaGFuZ2VkIiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwiZ2V0Q29udGFpbmVyIiwiZnVzdHJ1bVNpemUiLCJvcnRob2dyYXBoaWNDYW1lcmEiLCJnZXRSZW5kZXJlciIsImRlZmF1bHQiLCJ0b2dnbGVDb250cm9scyIsIm9sZENvbnRyb2xzIiwibmV3Q29udHJvbHMiLCJyZXF1ZXN0UmVuZGVyIiwic2V0Q2FtZXJhVmlldyIsImFyZzAiLCJhcmcxIiwiYXJnMiIsInpvb21FeHRlbnRzIiwiaXNCb3gzIiwiem9vbVRvQm94Iiwic2V0VmlldyIsIl9kZWx0YSIsImNoYW5nZWQiLCJMYXRlRnJhbWVVcGRhdGUiLCJzZXRQZXJzcGVjdGl2ZUNhbWVyYU9uIiwic2V0dXBQZXJzcGVjdGl2ZUNhbWVyYSIsIlJFTkRFUl9SRVNFVCIsInNldE9ydGhvQ2FtZXJhT24iLCJzZXR1cE9ydGhvQ2FtZXJhIiwidG9nZ2xlQ2FtZXJhcyIsImVuYWJsZVJvdGF0aW9ucyIsIlByb2plY3Rpb25DaGFuZ2VkIiwiT1JUSE9HUkFQSElDIiwiUEVSU1BFQ1RJVkUiLCJkaXNhYmxlUm90YXRpb25zIiwidGFyZ2V0Vm9sdW1lIiwib2Zmc2V0U2NhbGUiLCJuZWFyUGxhbmUiLCJjb21wdXRlTmVhckNhbWVyYVBsYW5lRW1waXJpYyIsImNvbXB1dGVOZWFyQ2FtZXJhUGxhbmVBY2N1cmF0ZSIsInVwZGF0ZUZhckNhbWVyYVBsYW5lIiwibWF4U2l6ZSIsImNhbUZvdiIsImNhbUFzcGVjdCIsImZpdEhlaWdodERpc3RhbmNlIiwiYXRhbiIsImZpdFdpZHRoRGlzdGFuY2UiLCJnZXRDbG9zZXN0R2VvbWV0cnlEaXN0YW5jZSIsImNhbWVyYVBvc2l0aW9uIiwiY2FtZXJhVGFyZ2V0IiwiY2FtZXJhRGlyIiwiZml0IiwidHJhbnNpdGlvbiIsInRhcmdldFNwaGVyZSIsImZpdFRvUmFkaXVzIiwidkZPViIsImdldEVmZmVjdGl2ZUZPViIsImhGT1YiLCJpc1NwZWNrbGVWaWV3IiwidmlldyIsImlzQ2Fub25pY2FsVmlldyIsImlzSW5saW5lVmlldyIsImlzUG9sYXJWaWV3IiwicG9sYXIiLCJzZXRWaWV3U3BlY2tsZSIsInNldFZpZXdDYW5vbmljYWwiLCJzZXRWaWV3SW5saW5lIiwic2V0Vmlld1BvbGFyIiwiY2Fub25pY2FsUG9zaXRpb24iLCJjYW5vbmljYWxUYXJnZXQiLCJjb250cm9sZXJCYXNpcyIsIlN0YXRzIiwiU3RhdHNJbXBvcnQiLCJWaWV3ZXIiLCJVdGlscyIsInV0aWxzIiwic3RhcnR1cFBhcmFtcyIsImdldENvbnN0cnVjdG9yQ2hhaW4iLCJjcyIsImdldFByb3RvdHlwZU9mIiwiY3JlYXRlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uc1RvSW5qZWN0IiwiaW5qZWN0ZWRFeHRlbnNpb25zIiwicHJvdG90eXBlQ2hhaW4iLCJnZXRFeHRlbnNpb25JbnRlcm5hbCIsImhhc0V4dGVuc2lvbiIsImxvYWRlcnMiLCJ1c2VEZWZhdWx0cyIsInNldExldmVsIiwiVFJBQ0UiLCJFUlJPUiIsImdldEVsZW1lbnRCeUlkIiwic3RhdHMiLCJwcmVwZW5kIiwiZG9tIiwiY2xvY2siLCJDbG9jayIsInByb3BlcnR5TWFuYWdlciIsImZyYW1lIiwiZ2V0Q2FudmFzIiwiUkVOREVSIiwiU0hBRE9XUyIsIkNMSVBQSU5HX1BMQU5FUyIsImdldERlbHRhIiwiZXh0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGhlbiIsImNhdGNoIiwicmVhc29uIiwiZ2V0T2JqZWN0UHJvcGVydGllcyIsInJlc291cmNlVVJMIiwiZ2V0RGF0YVRyZWUiLCJnZXRXb3JsZFRyZWUiLCJzZXRMaWdodENvbmZpZ3VyYXRpb24iLCJnZXRWaWV3cyIsIlZpZXczRCIsInNjcmVlbnNob3QiLCJ0b0RhdGFVUkwiLCJsb2FkT2JqZWN0Iiwiem9vbVRvT2JqZWN0IiwicmVzb3VyY2UiLCJ0cmVlQnVpbHQiLCJ0MCIsInN0ZXAiLCJMb2FkQ29tcGxldGUiLCJjYW5jZWxMb2FkIiwidW5sb2FkIiwidW5sb2FkT2JqZWN0IiwiVW5sb2FkQ29tcGxldGUiLCJ1bmxvYWRBbGwiLCJVbmxvYWRBbGxDb21wbGV0ZSIsInRoZUFzc2V0cyIsIk1lYXN1cmVtZW50U3RhdGUiLCJNZWFzdXJlbWVudCIsInN0YXJ0UG9pbnQiLCJlbmRQb2ludCIsInN0YXJ0Tm9ybWFsIiwiZW5kTm9ybWFsIiwicHJlY2lzaW9uIiwiX3N0YXRlIiwicmVuZGVyaW5nU2l6ZSIsIm1lYXN1cmVtZW50SWQiLCJmcmFtZVVwZGF0ZSIsIl9ib3VuZHMiLCJ0b01lYXN1cmVtZW50RGF0YSIsIm1lYXN1cmVtZW50RGF0YSIsIm1lYXN1cmVtZW50VHlwZSIsImZyb21NZWFzdXJlbWVudERhdGEiLCJDT01QTEVURSIsIl9tYXQ0MCIsIl9tYXQ0MSIsIl92ZWMzIiwiX3ZlYzQiLCJxdWFkVmVydHMiLCJEZWZhdWx0VGV4dExhYmVsUGFyYW1zIiwiYmlsbGJvYXJkIiwiYmFja2dyb3VuZENvcm5lclJhZGl1cyIsImJhY2tncm91bmRNYXJnaW5zIiwidGV4dENvbG9yIiwidGV4dE9wYWNpdHkiLCJvYmplY3RMYXllciIsIlRleHRMYWJlbCIsInRleHRNZXNoIiwiYmFja2dyb3VuZE1lc2giLCJfYmFja2dyb3VuZCIsInRleHRCb3VuZHMiLCJfdGV4dEJvdW5kcyIsImJhY2tncm91bmRNYXRlcmlhbCIsIl9iYWNrZ3JvdW5kTWF0ZXJpYWwiLCJfcGFyYW1zIiwiZGVwdGhPZmZzZXQiLCJfY29sbGlzaW9uTWVzaCIsInJlbmRlck9yZGVyIiwidXBkYXRlUGFyYW1zIiwib25VcGRhdGVDb21wbGV0ZSIsInRyYW5zZm9ybWVkUGFyYW1zIiwiX25lZWRzU3luYyIsInRleHRCb3VuZHNUb0JveCIsInVwZGF0ZUJhY2tncm91bmQiLCJ1cGRhdGVCaWxsYm9hcmRpbmciLCJ0ZXh0TWF0cml4SW52IiwiY2FtZXJhUm90YXRpb25NYXRyaXgiLCJiaWxsYm9hcmRTaXplIiwiaW52VmlldyIsImNsaXAiLCJwRGl2IiwidW5pdFNpemUiLCJiZ0JvdW5kcyIsIm1hcmdpbnMiLCJSZWN0YW5nbGVSb3VuZGVkIiwiaW5zZXQiLCJ1dnMiLCJtYXhJbnNldCIsInNlZ21lbnRzUGVyQ29ybmVyIiwicG9pbnRzUGVyQ29ybmVyIiwidG90YWxQb2ludHMiLCJjb3JuZXJzIiwiY3giLCJjeSIsImFuZ2xlU3RhcnQiLCJfdmVjMzAiLCJEZWZhdWx0TWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGUiLCJkYXNoZWRMaW5lIiwibm9ybWFsSW5kaWNhdG9yUGl4ZWxTaXplIiwibm9ybWFsSW5kaWNhdG9yQ29sb3IiLCJub3JtYWxJbmRpY2F0b3JPcGFjaXR5IiwibGluZUNvbG9yIiwibGluZU9wYWNpdHkiLCJwb2ludENvbG9yIiwicG9pbnRPcGFjaXR5IiwidGV4dFBpeGVsSGVpZ2h0IiwicG9pbnRQaXhlbEhlaWdodCIsIk1lYXN1cmVtZW50UG9pbnRHaXptbyIsIl9zdHlsZSIsInVwZGF0ZVN0eWxlIiwiaGlnaGxpZ2h0Iiwibm9ybWFsSW5kaWNhdG9yIiwibGluZSIsImdldE5vcm1hbEluZGljYXRvck1hdGVyaWFsIiwibGluZU1hdGVyaWFsIiwiY29uY2F0IiwiZGFzaFNpemUiLCJnYXBTaXplIiwiZGFzaFNjYWxlIiwibm9ybWFsSW5kaWNhdG9yQnVmZmVyIiwibm9ybWFsSW5kaWNhdG9yTm9ybWFsIiwibm9ybWFsSW5kaWNhdG9yVGFuZ2VudCIsIm5vcm1hbEluZGljYXRvckJpdGFuZ2VudCIsIm5vcm1hbEluZGljYXRvckdlb21ldHJ5IiwibGluZUdlb21ldHJ5Iiwic3BoZXJlR2VvbWV0cnkiLCJDaXJjbGVHZW9tZXRyeSIsInBvaW50MiIsInBpeGVsU2l6ZSIsImRlZ1RvUmFkIiwic2NyZWVuSGVpZ2h0V29ybGQiLCJ3b3JsZFVuaXRzUGVyUGl4ZWwiLCJwb3NBdHRyIiwicG9zQXR0ckxvdyIsInVwZGF0ZU5vcm1hbEluZGljYXRvciIsInVwZGF0ZVBvaW50IiwidXBkYXRlTGluZSIsInVwZGF0ZVRleHQiLCJ2ZWMzQnVmZjAiLCJ2ZWMzQnVmZjEiLCJ2ZWMzQnVmZjIiLCJ2ZWMzQnVmZjMiLCJ2ZWMzQnVmZjQiLCJ2ZWMzQnVmZjUiLCJQZXJwZW5kaWN1bGFyTWVhc3VyZW1lbnQiLCJpc1Zpc2libGUiLCJzdGFydEdpem1vIiwiZW5kR2l6bW8iLCJtaWRQb2ludCIsIk1lYXN1cmVtZW50VHlwZSIsIlBFUlBFTkRJQ1VMQVIiLCJmbGlwU3RhcnROb3JtYWwiLCJOYU4iLCJzdGFydExpbmVMZW5ndGgiLCJEQU5HTElOR19TVEFSVCIsImxvY2F0aW9uVXBkYXRlZCIsIkRBTkdMSU5HX0VORCIsImxvY2F0aW9uU2VsZWN0ZWQiLCJzdGFydEVuZERpc3QiLCJlbmRTdGFydERpciIsInRleHRQb3MiLCJlbmRMaW5lTm9ybWFsIiwiZW5kTGluZUxlbmd0aCIsImFuZ2xlMSIsImRpc3QxIiwiZW5kTGluZTMiLCJzdGFydExpbmUwIiwic3RhcnRMaW5lMSIsImVuZExpbmUwIiwiaW5uZXJQb2ludHMiLCJQb2ludFRvUG9pbnRNZWFzdXJlbWVudCIsIlBPSU5UVE9QT0lOVCIsIl9xIiwiX3ZlYzMxIiwiX3ZlYzMyIiwiQXJlYU1lYXN1cmVtZW50IiwicG9pbnRHaXptb3MiLCJnaXptbyIsInBvbHlnb25Qb2ludHMiLCJBUkVBIiwic3VyZmFjZVBvaW50Iiwic3VyZmFjZU5vcm1hbCIsInBsYW5lT3JpZ2luIiwibGFiZWxQb2ludCIsInBvaW50SW5kZXgiLCJtZWFzdXJlZFBvaW50cyIsInNuYXBEaXN0YW5jZSIsInByb2plY3RPblBsYW5lIiwidXBkYXRlRmlsbFBvbHlnb24iLCJhZGRQb2ludCIsIm1lYXN1cmVkUG9pbnQiLCJkaXN0YW5jZVRvRmlyc3QiLCJ1cGRhdGVMYWJlbExvY2F0aW9uIiwicmVtb3ZlUG9pbnQiLCJhdXRvRmluaXNoIiwic25hcCIsIm5kY1BvaW50IiwiX2ludGVyc2VjdGlvbiIsIm91dFBvaW50Iiwib3V0Tm9ybWFsIiwiZmlyc3RQb2ludFNTIiwibW91c2VQb2ludFNTIiwiU1NEaXN0YW5jZSIsImN1cnJlbnRQb2ludCIsInByZXZQb2ludCIsInNob2VsYWNlQXJlYTNEIiwiaW52USIsInZlY3RvciIsImZsYXRQb2ludHMiLCJwb2x5bGFiZWwiLCJmaWxsUG9seWdvbiIsIk5vdEVxdWFsU3RlbmNpbEZ1bmMiLCJLZWVwU3RlbmNpbE9wIiwiZ2V0SW5kZXgiLCJheGlzMSIsImF4aXMyIiwiY2hvb3NlUHJvamVjdGlvbkF4ZXMiLCJwcm9qZWN0ZWRQb2ludHMiLCJwb3NBdHRyaWJ1dGUiLCJkZXN0aW5hdGlvbiIsIm8iLCJhYnNOb3JtYWwiLCJzaG9lbGFjZUFyZWEiLCJhcmVhIiwiX3ZlYzQwIiwiX3ZlYzQxIiwiX3ZlYzQyIiwiX3ZlYzQzIiwiUG9pbnRNZWFzdXJlbWVudCIsInhMYWJlbCIsInlMYWJlbCIsInpMYWJlbCIsInhMYWJlbFBvc2l0aW9uIiwieUxhYmVsUG9zaXRpb24iLCJ6TGFiZWxQb3NpdGlvbiIsInBpeGVsc09mZlgiLCJwaXhlbHNPZmZZIiwidXBkYXRlTGFiZWxQb3NpdGlvbnMiLCJuZGNQb3MiLCJwZXJzcGVjdGl2ZSIsInhPZmYiLCJ5T2ZmIiwieFBvcyIsInlQb3MiLCJ6UG9zIiwieFAiLCJ5UCIsInpQIiwiTWVhc3VyZW1lbnRFdmVudCIsIkRlZmF1bHRNZWFzdXJlbWVudHNPcHRpb25zIiwidmVydGV4U25hcCIsImNoYWluIiwiTWVhc3VyZW1lbnRzRXh0ZW5zaW9uIiwiX2FjdGl2ZU1lYXN1cmVtZW50IiwiY2FuY2VsTWVhc3VyZW1lbnQiLCJyZXNldE1lYXN1cmVtZW50Iiwic2VsZWN0ZWRNZWFzdXJlbWVudCIsIl9zZWxlY3RlZE1lYXN1cmVtZW50IiwiYWN0aXZlTWVhc3VyZW1lbnQiLCJtZWFzdXJlbWVudENvdW50IiwiX21lYXN1cmVtZW50cyIsIm1lc3VyZW1lbnRzIiwiZW1pdE1lYXN1cmVtZW50Q291bnRDaGFuZ2VkIiwiQ291bnRDaGFuZ2VkIiwiTWVhc3VyZW1lbnRzQ2hhbmdlZCIsImNhbWVyYVByb3ZpZGVyIiwiX2ZyYW1lTG9jayIsIl9wYXVzZWQiLCJfc2NlbmVIaXQiLCJwb2ludEJ1ZmYiLCJub3JtYWxCdWZmIiwic2NyZWVuQnVmZjAiLCJzY3JlZW5CdWZmMSIsIm9uUG9pbnRlckNsaWNrIiwib25Qb2ludGVyRG91YmxlQ2xpY2siLCJzdGFydE1lYXN1cmVtZW50IiwibWVhc3VyZW1lbnQiLCJwaWNrTWVhc3VyZW1lbnQiLCJzZWxlY3RNZWFzdXJlbWVudCIsImZpbmlzaE1lYXN1cmVtZW50IiwiYXV0b0xhemVyTWVhc3VyZSIsIm9mZnNldFBvaW50IiwicGVycFJlc3VsdCIsImZsYXNoTWVhc3VyZW1lbnQiLCJwdXNoTWVhc3VyZW1lbnQiLCJvbGRNZWFzdXJlbWVudCIsImZpbmRNZWFzdXJlbWVudEZyb21EYXRhIiwicmVtb3ZlTWVhc3VyZW1lbnQiLCJ0YXJnZXRNZWFzdXJlbWVudCIsInNldE1lYXN1cmVtZW50cyIsIm1lYXN1cmVtZW50cyIsImNsZWFyTWVhc3VyZW1lbnRzIiwiY3VycmVudE1lYXN1cmVtZW50cyIsInJlbW92YWJsZU1lYXN1cmVtZW50cyIsImRpZmZlcmVuY2VCeSIsInJlbW92YWJsZU1lYXN1cmVtZW50IiwiYWRkTWVhc3VyZW1lbnQiLCJmbGFzaENvdW50IiwibWF4Rmxhc2hDb3VudCIsImhhbmRsZSIsInNldEludGVydmFsIiwiQm9vbGVhbiIsImNsZWFySW50ZXJ2YWwiLCJ2MiIsInByb2plY3RlZEludGVyc2VjdGlvbiIsImNsb3Nlc3RTY3JlZW4iLCJpbnRlcnNlY3Rpb25TY3JlZW4iLCJ1bnByb2plY3RlZFBvaW50IiwidXBkYXRlUHJvbWlzZXMiLCJkaXNhYmxlIiwiY2FjaGVPcHRpb25zIiwiU2VsZWN0aW9uRXh0ZW5zaW9uRXZlbnQiLCJEZWZhdWx0U2VsZWN0aW9uRXh0ZW5zaW9uT3B0aW9ucyIsInNlbGVjdGlvbk1hdGVyaWFsRGF0YSIsIndpbmRvd1NlbGVjdGlvbiIsIm1vZGlmaWVyS2V5IiwibWluRHJhZ1BpeGVscyIsInNlbGVjdGlvbk1vZGUiLCJTZWxlY3Rpb25FeHRlbnNpb24iLCJ3aW5kb3dTZWxlY3Rpb25PcHRpb25zIiwidHJhbnNwYXJlbnRTZWxlY3Rpb25NYXRlcmlhbERhdGEiLCJoaWRkZW5TZWxlY3Rpb25NYXRlcmlhbERhdGEiLCJob3Zlck1hdGVyaWFsRGF0YSIsInRyYW5zcGFyZW50SG92ZXJNYXRlcmlhbERhdGEiLCJzZWxlY3RlZE5vZGVzIiwic2VsZWN0aW9uUnZzIiwic2VsZWN0aW9uTWF0ZXJpYWxzIiwid2luZG93U2VsZWN0aW9uU3RhcnQiLCJ3aW5kb3dTZWxlY3Rpb25FbmQiLCJ3aW5kb3dTZWxlY3Rpb25FbGVtZW50Iiwid2luZG93U2VsZWN0aW9uRHJhZ2dpbmciLCJzdXBwcmVzc05leHRDbGljayIsIndpbmRvd1NlbGVjdGlvbkxhc3RTdGF0cyIsIndpbmRvd1NlbGVjdGlvblRtcFBvaW50Iiwib25PYmplY3RDbGlja2VkIiwib25PYmplY3REb3VibGVDbGljayIsIm9uUG9pbnRlckNhbmNlbCIsImdldFNlbGVjdGVkT2JqZWN0cyIsImdldFNlbGVjdGVkTm9kZXMiLCJnZXRTZWxlY3RlZE9iamVjdElkcyIsImdldFNlbGVjdGVkUmVuZGVyVmlld0d1aWRzIiwicmVuZGVyVmlld0d1aWRzIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdGVkTm9kZUlkcyIsImdldE5vZGVTZWxlY3Rpb25LZXkiLCJmb3VuZE5vZGVzIiwibm9kZVNlbGVjdGlvbktleSIsImFwcGx5U2VsZWN0aW9uIiwic2VsZWN0Tm9kZXMiLCJ1bnNlbGVjdE9iamVjdHMiLCJjbGVhclNlbGVjdGlvbiIsInJlbW92ZVNlbGVjdGlvbiIsImVtaXRTZWxlY3Rpb25DaGFuZ2VkIiwic2VsZWN0aW9uIiwiaXNXaW5kb3dTZWxlY3Rpb25Nb2RpZmllclByZXNzZWQiLCJ1cGRhdGVXaW5kb3dTZWxlY3Rpb24iLCJhcHBseUhvdmVyIiwic2VsZWN0aW9uU3RhcnQiLCJnZXRXaW5kb3dTZWxlY3Rpb25Ob2RlcyIsInNlbGVjdGlvbk1zIiwiYXBwbHlTdGFydCIsImxvZ1dpbmRvd1NlbGVjdGlvblN0YXRzIiwiYXBwbHlNcyIsImNsZWFyV2luZG93U2VsZWN0aW9uIiwiZHJhZ0Rpc3RhbmNlIiwiaHlwb3QiLCJyZW1vdmVIb3ZlciIsImVuc3VyZVdpbmRvd1NlbGVjdGlvbkVsZW1lbnQiLCJ1cGRhdGVXaW5kb3dTZWxlY3Rpb25FbGVtZW50IiwiZWxlbWVudCIsInBvaW50ZXJFdmVudHMiLCJ6SW5kZXgiLCJib3JkZXIiLCJiYWNrZ3JvdW5kIiwiYm94U2hhZG93IiwiYm9keSIsImdldFdpbmRvd1NlbGVjdGlvbk5kY1JlY3QiLCJyZXNvbHZlZE5vZGVDYWNoZSIsInN0YXJ0ZWRBdCIsInNjYW5uZWRCYXRjaGVzIiwicHJ1bmVkQmF0Y2hlcyIsInNjYW5uZWRSZW5kZXJWaWV3cyIsIm1hdGNoZWRSZW5kZXJWaWV3cyIsImJveEludGVyc2VjdHNTZWxlY3Rpb25SZWN0IiwicmVuZGVyVmlld0luZGV4IiwicmVuZGVyVmlld01hdGNoZXNTZWxlY3Rpb25SZWN0IiwiYWRkV2luZG93U2VsZWN0aW9uQ2FuZGlkYXRlIiwiY29sbGVjdE1zIiwiaXNTZWxlY3RhYmxlUmVuZGVyVmlldyIsInJlbmRlclZpZXdOb2RlS2V5IiwibWluWCIsIm1heFgiLCJtaW5ZIiwibWF4WSIsInBpY2tGaWx0ZXIiLCJib3hDZW50ZXJJblNlbGVjdGlvblJlY3QiLCJwcm9qZWN0ZWRQb2ludEluU2VsZWN0aW9uUmVjdCIsInJvdW5kZWRTdGF0cyIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsInJvdW5kIiwiaW5mbyIsIm9wYXF1ZVJ2cyIsInRyYW5zcGFyZW50UnZzIiwiaGlkZGVuUnZzIiwiU2VsZWN0aW9uQ2hhbmdlZCIsIm1hdE5hbWUiLCJob3ZlclJ2IiwiaG92ZXJNYXRlcmlhbCIsIkNvbnRyb2xzIiwiRXZlbnREaXNwYXRjaGVyIiwibW91c2VCdXR0b25zIiwiTEVGVCIsIk1JRERMRSIsIlJJR0hUIiwidG91Y2hlcyIsIk9ORSIsIlRXTyIsIl9yYXljYXN0ZXIiLCJfdGVtcFZlY3RvciIsIl90ZW1wVmVjdG9yMiIsIl90ZW1wUXVhdGVybmlvbiIsIl91bml0IiwiWCIsIlkiLCJaIiwiX2NoYW5nZUV2ZW50IiwiX21vdXNlRG93bkV2ZW50IiwibW9kZSIsIl9tb3VzZVVwRXZlbnQiLCJfb2JqZWN0Q2hhbmdlRXZlbnQiLCJUcmFuc2Zvcm1Db250cm9scyIsIlRyYW5zZm9ybUNvbnRyb2xzUm9vdCIsIlRyYW5zZm9ybUNvbnRyb2xzR2l6bW8iLCJfZ2l6bW8iLCJUcmFuc2Zvcm1Db250cm9sc1BsYW5lIiwiX3BsYW5lIiwic2NvcGUiLCJfZG9Ob3RQaWNrIiwicHJvcE5hbWUiLCJkZWZhdWx0VmFsdWUiLCJwcm9wVmFsdWUiLCJkaXNwYXRjaEV2ZW50Iiwid29ybGRQb3NpdGlvbiIsIndvcmxkUG9zaXRpb25TdGFydCIsIndvcmxkUXVhdGVybmlvbiIsIndvcmxkUXVhdGVybmlvblN0YXJ0IiwiY2FtZXJhUXVhdGVybmlvbiIsInBvaW50U3RhcnQiLCJwb2ludEVuZCIsInJvdGF0aW9uQXhpcyIsInJvdGF0aW9uQW5nbGUiLCJleWUiLCJfb2Zmc2V0IiwiX3N0YXJ0Tm9ybSIsIl9lbmROb3JtIiwiX2NhbWVyYVNjYWxlIiwiX3BhcmVudFBvc2l0aW9uIiwiX3BhcmVudFF1YXRlcm5pb24iLCJfcGFyZW50UXVhdGVybmlvbkludiIsIl9wYXJlbnRTY2FsZSIsIl93b3JsZFNjYWxlU3RhcnQiLCJfd29ybGRRdWF0ZXJuaW9uSW52IiwiX3dvcmxkU2NhbGUiLCJfcG9zaXRpb25TdGFydCIsIl9xdWF0ZXJuaW9uU3RhcnQiLCJfc2NhbGVTdGFydCIsIl9nZXRQb2ludGVyIiwiZ2V0UG9pbnRlciIsIl9vblBvaW50ZXJEb3duIiwiX29uUG9pbnRlckhvdmVyIiwib25Qb2ludGVySG92ZXIiLCJfb25Qb2ludGVyTW92ZSIsIl9vblBvaW50ZXJVcCIsImdldEhlbHBlciIsInBvaW50ZXJIb3ZlciIsImF4aXMiLCJkcmFnZ2luZyIsImludGVyc2VjdE9iamVjdFdpdGhSYXkiLCJwaWNrZXIiLCJwb2ludGVyRG93biIsInBsYW5lSW50ZXJzZWN0IiwicG9pbnRlck1vdmUiLCJzcGFjZSIsInRyYW5zbGF0aW9uU25hcCIsInNlYXJjaCIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsIm1pbloiLCJtYXhaIiwic2NhbGVTbmFwIiwiUk9UQVRJT05fU1BFRUQiLCJfaW5QbGFuZVJvdGF0aW9uIiwicm90YXRpb25TbmFwIiwic2V0RnJvbUF4aXNBbmdsZSIsInBvaW50ZXJVcCIsImF0dGFjaCIsImRldGFjaCIsImdldFJheWNhc3RlciIsImdldE1vZGUiLCJzZXRNb2RlIiwic2V0VHJhbnNsYXRpb25TbmFwIiwic2V0Um90YXRpb25TbmFwIiwic2V0U2NhbGVTbmFwIiwic2V0U3BhY2UiLCJvd25lckRvY3VtZW50IiwicG9pbnRlckxvY2tFbGVtZW50Iiwic2V0UG9pbnRlckNhcHR1cmUiLCJyZWxlYXNlUG9pbnRlckNhcHR1cmUiLCJpbmNsdWRlSW52aXNpYmxlIiwiYWxsSW50ZXJzZWN0aW9ucyIsIl90ZW1wRXVsZXIiLCJfYWxpZ25WZWN0b3IiLCJfemVyb1ZlY3RvciIsIl9sb29rQXRNYXRyaXgiLCJfdGVtcFF1YXRlcm5pb24yIiwiX2lkZW50aXR5UXVhdGVybmlvbiIsIl9kaXJWZWN0b3IiLCJfdGVtcE1hdHJpeCIsIl91bml0WCIsIl91bml0WSIsIl91bml0WiIsIl92MSIsIl92MiIsIl92MyIsImlzVHJhbnNmb3JtQ29udHJvbHNSb290IiwiaXNPcnRob2dyYXBoaWNDYW1lcmEiLCJjaGlsZCIsImlzVHJhbnNmb3JtQ29udHJvbHNHaXptbyIsImdpem1vTWF0ZXJpYWwiLCJmb2ciLCJnaXptb0xpbmVNYXRlcmlhbCIsIkxpbmVCYXNpY01hdGVyaWFsIiwibWF0SW52aXNpYmxlIiwibWF0SGVscGVyIiwibWF0UmVkIiwic2V0SGV4IiwibWF0R3JlZW4iLCJtYXRCbHVlIiwibWF0UmVkVHJhbnNwYXJlbnQiLCJtYXRHcmVlblRyYW5zcGFyZW50IiwibWF0Qmx1ZVRyYW5zcGFyZW50IiwibWF0V2hpdGVUcmFuc3BhcmVudCIsIm1hdFllbGxvd1RyYW5zcGFyZW50IiwibWF0WWVsbG93IiwibWF0R3JheSIsImFycm93R2VvbWV0cnkiLCJDeWxpbmRlckdlb21ldHJ5IiwidHJhbnNsYXRlIiwic2NhbGVIYW5kbGVHZW9tZXRyeSIsIkJveEdlb21ldHJ5IiwibGluZUdlb21ldHJ5MiIsImFyYyIsIlRvcnVzR2VvbWV0cnkiLCJyb3RhdGVZIiwicm90YXRlWCIsIlRyYW5zbGF0ZUhlbHBlckdlb21ldHJ5IiwiZ2l6bW9UcmFuc2xhdGUiLCJYWVoiLCJPY3RhaGVkcm9uR2VvbWV0cnkiLCJwaWNrZXJUcmFuc2xhdGUiLCJYWSIsIllaIiwiWFoiLCJoZWxwZXJUcmFuc2xhdGUiLCJTVEFSVCIsIkVORCIsIkRFTFRBIiwiZ2l6bW9Sb3RhdGUiLCJoZWxwZXJSb3RhdGUiLCJBWElTIiwicGlja2VyUm90YXRlIiwiWFlaRSIsImdpem1vU2NhbGUiLCJwaWNrZXJTY2FsZSIsImhlbHBlclNjYWxlIiwic2V0dXBHaXptbyIsImdpem1vTWFwIiwidGFnIiwidGVtcEdlb21ldHJ5IiwiaGVscGVyIiwiaGFuZGxlcyIsImZhY3RvciIsIkFYSVNfSElERV9USFJFU0hPTEQiLCJQTEFORV9ISURFX1RIUkVTSE9MRCIsImF0YW4yIiwibXVsdGlwbHlRdWF0ZXJuaW9ucyIsInNob3dYIiwic2hvd1kiLCJzaG93WiIsIl9jb2xvciIsIl9vcGFjaXR5IiwiaXNUcmFuc2Zvcm1Db250cm9sc1BsYW5lIiwiU2VjdGlvblRvb2xFdmVudCIsIl9tYXRyaXg0IiwiX3F1YXRlcm5pb24iLCJ1bml0Q3ViZSIsInVuaXRDdWJlSW5kaWNlcyIsInVuaXRDdWJlRWRnZXMiLCJzY3JhdGNoQXJyYXkiLCJzY3JhdGNoUGxhbmVBcnJheSIsIlNlY3Rpb25Ub29sIiwiZGlzcGxheSIsInRyYW5zbGF0ZUNvbnRyb2xzIiwidHJhbnNsYXRpb25Sb3RhdGlvbkFuY2hvciIsInJvdGF0ZUNvbnRyb2xzIiwic2NhbGVDb250cm9scyIsImRyYWdnaW5nRmFjZSIsImZhY2VQbGFuZSIsIlVwZGF0ZWQiLCJzY2FsZUFuY2hvciIsInNlY3Rpb25QbGFuZXMiLCJyb3RhdGlvblNuYXBBbmdsZSIsImxvY2FsUGxhbmVzIiwiY3ViZUZhY2VzIiwibGFzdE9iYlRyYW5zZm9ybSIsInNoaWZ0S2V5UHJlc3NlZCIsInNlY3Rpb25Cb3hIaXN0b3J5IiwiY3VycmVudEhpc3RvcnlJbmRleCIsIm1heEhpc3RvcnlTaXplIiwiYm94R2VvbWV0cnkiLCJjcmVhdGVDdWJlR2VvbWV0cnkiLCJib3hIaXRNZXNoIiwiYm94T3V0bGluZSIsImNyZWF0ZU91dGxpbmUiLCJjcmVhdGVGYWNlUGxhbmUiLCJzZXR1cENvbnRyb2xzIiwiY2xpY2tIYW5kbGVyIiwic2V0dXBLZXlib2FyZExpc3RlbmVycyIsImludGVyc2VjdFRyYW5zbGF0ZSIsImludGVyc2VjdFJvdGF0ZSIsInRyYW5zbGF0RGlzdGFuY2UiLCJyb3RhdGVEaXN0YW5jZSIsImdldEJveCIsInNldEJveCIsInRhcmdldEJveCIsImlzT0JCIiwiZXhwYW5kZWRCb3giLCJpc0FBQkIiLCJ1cGRhdGVQbGFuZXMiLCJ1cGRhdGVWaXN1YWwiLCJ0b2dnbGUiLCJnZXRPYmJUcmFuc2Zvcm0iLCJjb21wb3NlIiwic2V0RnJvbU1hdHJpeDMiLCJjaGFuZ2VIYW5kbGVyIiwiZHJhZ2dpbmdIYW5kbGVyIiwiY3JlYXRlT2JiU3RhdGUiLCJhcHBseU9iYlN0YXRlIiwic2F2ZVRvSGlzdG9yeSIsImN1cnJlbnRTdGF0ZSIsInNoaWZ0Iiwia2V5ZG93bkhhbmRsZXIiLCJ1bmRvU2VjdGlvbkJveCIsInJlZG9TZWN0aW9uQm94Iiwia2V5dXBIYW5kbGVyIiwidXBkYXRlT3V0bGluZSIsIkRyYWdTdGFydCIsIkRyYWdFbmQiLCJzbmFwUXVhdGVybmlvblRvR3JpZCIsInNldEZyb21NYXRyaXg0IiwibGFzdFNjYWxlIiwic2NhbGFyIiwidXBkYXRlRmFjZUNvbnRyb2xzIiwiaW50ZXJzZWN0ZWRPYmplY3RzIiwib2JiTWF0cml4Iiwib2JiQ2hhbmdlZCIsImZhY2VQbGFuZUdlb21ldHJ5IiwiY3ViZUZhY2UiLCJ2MyIsImZhY2VDZW50ZXIiLCJmYWNlUXVhdCIsImNsaXBPdXRsaW5lIiwidmVjIiwiaW5kZXhlcyIsInByZXZpb3VzU3RhdGUiLCJzZWN0aW9uT3V0bGluZXMiLCJTZWN0aW9uT3V0bGluZXMiLCJyZXF1ZXN0VXBkYXRlIiwibmV4dFN0YXRlIiwiUGxhbmVJZCIsInNlY3Rpb25Qcm92aWRlciIsInRtcFZlYyIsInBsYW5lT3V0bGluZXMiLCJsYXN0U2VjdGlvblBsYW5lcyIsInNlY3Rpb25QbGFuZXNDaGFuZ2VkIiwiUE9TSVRJVkVfWCIsImNyZWF0ZVBsYW5lT3V0bGluZSIsIk5FR0FUSVZFX1giLCJQT1NJVElWRV9ZIiwiTkVHQVRJVkVfWSIsIk5FR0FUSVZFX1oiLCJQT1NJVElWRV9aIiwic2VjdGlvbk91dGxpbmVzR3JvdXAiLCJnZXRQbGFuZU91dGxpbmUiLCJyZW5kZXJhYmxlIiwib25TZWN0aW9uQm94RHJhZ1N0YXJ0Iiwib25TZWN0aW9uQm94RHJhZ0VuZCIsInNlY3Rpb25VcGRhdGVkIiwicGxhbmVJZCIsImdldFBsYW5lSWQiLCJzZXRTZWN0aW9uUGxhbmVDaGFuZ2VkIiwidXBkYXRlT3V0bGluZXMiLCJ1cGRhdGVQbGFuZU91dGxpbmUiLCJvdXRsaW5lT2Zmc2V0IiwidGVtcFZlY3RvciIsInRlbXBWZWN0b3IxIiwidGVtcFZlY3RvcjIiLCJ0ZW1wVmVjdG9yMyIsInRlbXBWZWN0b3I0IiwidGVtcExpbmUiLCJMaW5lMyIsInNjcmF0Y2hCdWZmZXIiLCJsb2NhbFBsYW5lIiwiX2kiLCJfY29udGFpbmVkIiwiX2RlcHRoIiwiaW50ZXJzZWN0TGluZSIsInJlc2l6ZUdlb21ldHJ5QnVmZmVyIiwiSU5JVElBTF9CVUZGRVJfU0laRSIsImNvbnN0YW50IiwiT1VUTElORV9aX09GRlNFVCIsIkZpbHRlcmluZ0V4dGVuc2lvbiIsImZpbHRlcmluZ1N0YXRlIiwiQ3VycmVudEZpbHRlcmluZ1N0YXRlIiwiU3RhdGVLZXkiLCJWaXNpYmlsaXR5U3RhdGUiLCJDb2xvclN0cmluZ0ZpbHRlclN0YXRlIiwiQ29sb3JOdW1lcmljRmlsdGVyU3RhdGUiLCJVc2Vyc3BhY2VDb2xvclN0YXRlIiwiaWRDYWNoZSIsIldUSSIsIlJlbmRlcmVyIiwiaGlkZU9iamVjdHMiLCJzdGF0ZUtleSIsImluY2x1ZGVEZXNjZW5kYW50cyIsImdob3N0Iiwic2V0VmlzaWJpbGl0eVN0YXRlIiwiQ29tbWFuZCIsIkhJREUiLCJzaG93T2JqZWN0cyIsIlNIT1ciLCJpc29sYXRlT2JqZWN0cyIsIklTT0xBVEUiLCJ1bklzb2xhdGVPYmplY3RzIiwiVU5JU09MQVRFIiwiY29tbWFuZCIsImdldERlc2NlbmRhbnRJZHMiLCJhY2MiLCJjdXJyIiwic2V0RmlsdGVycyIsInZpc2liaWxpdHlXYWxrIiwicnZOb2RlcyIsInJ2Tm9kZSIsInNldENvbG9yRmlsdGVyIiwicHJvcCIsInNldE51bWVyaWNDb2xvckZpbHRlciIsInNldFN0cmluZ0NvbG9yRmlsdGVyIiwiY3VycmVudFByb3AiLCJwYXNzTWluIiwicGFzc01heCIsIm1hdGNoaW5nSWRzIiwibm9uTWF0Y2hpbmdSdnMiLCJjb2xvckdyb3VwcyIsImlkeCIsInN0cmluZ1Byb3AiLCJ2YWx1ZUdyb3VwQ29sb3JzIiwidmciLCJjb2wiLCJzdGMiLCJlbnRyeSIsImlkTWFwIiwibm9uTWF0Y2hpbmdNYXAiLCJyZW1vdmVDb2xvckZpbHRlciIsInNldFVzZXJPYmplY3RDb2xvcnMiLCJsb2NhbEdyb3VwcyIsInJ2c05vZGVzIiwicmVtb3ZlVXNlck9iamVjdENvbG9ycyIsInJlc2V0RmlsdGVycyIsIkZpbHRlcmluZ1N0YXRlU2V0IiwiZ2V0SGV4U3RyaW5nIiwiYWN0aXZlUHJvcEZpbHRlcktleSIsImlzb2xhdGVkT2JqZWN0cyIsImlzU2hvd0hpZGUiLCJpc0lzb2xhdGUiLCJoaWRkZW5PYmplY3RzIiwiZ2hvc3ROb25NYXRjaGluZyIsInVzZXJDb2xvckdyb3VwcyIsImFsbElkcyIsImpvaW4iLCJpZExpc3QiLCJFeHBsb2RlRXZlbnQiLCJFeHBsb2RlRXh0ZW5zaW9uIiwiZXhwbG9kZVRpbWUiLCJleHBsb2RlUmFuZ2UiLCJleHBsb2RlT3JpZ2luIiwidmlzaWJsZVdvcmxkIiwiZXhwbG9kZSIsInNldEV4cGxvZGUiLCJ0aW1lIiwiRmluc2hlZCIsIlNwZWNrbGVDb252ZXJ0ZXIiLCJvYmplY3RMb2FkZXIiLCJzcG9vZklEcyIsInR5cGVMb29rdXBUYWJsZSIsImluc3RhbmNlRGVmaW5pdGlvbkxvb2t1cFRhYmxlIiwiaW5zdGFuY2VkT2JqZWN0c0xvb2t1cFRhYmxlIiwiaW5zdGFuY2VQcm94aWVzIiwicmVuZGVyTWF0ZXJpYWxNYXAiLCJjb2xvck1hcCIsImluc3RhbmNlQ291bnRlciIsImR1cGxpY2F0ZUNvdW50ZXIiLCJ0cmF2ZXJzZUNvdW50IiwiTm9kZUNvbnZlcnRlck1hcHBpbmciLCJWaWV3M0RUb05vZGUiLCJCbG9ja0luc3RhbmNlIiwiQmxvY2tJbnN0YW5jZVRvTm9kZSIsIlBvaW50Y2xvdWRUb05vZGUiLCJCcmVwVG9Ob2RlIiwiQnJlcFgiLCJFeHRydXNpb25YIiwiU3ViRFgiLCJNZXNoVG9Ob2RlIiwiUG9pbnRUb05vZGUiLCJMaW5lVG9Ob2RlIiwiUG9seWxpbmVUb05vZGUiLCJCb3hUb05vZGUiLCJQb2x5Y3VydmVUb05vZGUiLCJDdXJ2ZVRvTm9kZSIsIkNpcmNsZVRvTm9kZSIsIkFyY1RvTm9kZSIsIkVsbGlwc2VUb05vZGUiLCJSZXZpdEluc3RhbmNlIiwiUmV2aXRJbnN0YW5jZVRvTm9kZSIsIlRleHRUb05vZGUiLCJEaW1lbnNpb24iLCJEaW1lbnNpb25Ub05vZGUiLCJJbnN0YW5jZURlZmluaXRpb25Qcm94eSIsIkluc3RhbmNlRGVmaW5pdGlvblByb3h5VG9Ob2RlIiwiSW5zdGFuY2VQcm94eSIsIkluc3RhbmNlUHJveHlUb05vZGUiLCJSZW5kZXJNYXRlcmlhbFByb3h5IiwiUmVuZGVyTWF0ZXJpYWxQcm94eVRvTm9kZSIsIkNvbG9yUHJveHkiLCJDb2xvclByb3h5VG9Ob2RlIiwiUmVnaW9uVG9Ob2RlIiwiUGFyYW1ldGVyIiwiSWdub3JlTm9kZXMiLCJhY3RpdmVQcm9taXNlcyIsIm1heENoaWxkcmVuUHJvbWlzZXMiLCJvYmplY3RVUkwiLCJyZWZlcmVuY2VkSWQiLCJyZXNvbHZlUmVmZXJlbmNlIiwiY2hpbGRyZW5Db252ZXJzaW9uUHJvbWlzc2VzIiwiY2hpbGRQcm9taXNlIiwiY2hpbGROb2RlIiwiZ2V0Tm9kZUlkIiwiZGlyZWN0Tm9kZUNvbnZlcnRlckV4aXN0cyIsImNvbnZlcnRUb05vZGUiLCJkaXNwbGF5VmFsdWUiLCJnZXREaXNwbGF5VmFsdWUiLCJuZXN0ZWROb2RlIiwic3BlY2tsZV90eXBlIiwiZ2V0RWxlbWVudHNWYWx1ZSIsImdldER1cGxpY2F0ZUlkIiwiZGVjaHVuayIsImFyciIsImNodW5rZWQiLCJyZWYiLCJyZWFsIiwicmVzb2x2ZWRPYmoiLCJyYXdUeXBlIiwibG9va3VwIiwidHlwZVJldCIsInR5cGVDaGFpbiIsImdldFNwZWNrbGVUeXBlQ2hhaW4iLCJub2RlQ29udmVydGVyIiwiZGVsZWdhdGUiLCJmaWx0ZXJlZERpc3BsYXlWYWx1ZSIsImdldEJsb2NrRGVmaW5pdGlvbiIsImdldEJsb2NrRGVmaW5pdGlvbkdlb21ldHJ5IiwiZ2V0Q29tcG91bmRJZCIsImNvdW50ZXIiLCJnZXRFbXB0eVRyYW5zZm9ybURhdGEiLCJkaXNwbGF5YWJsZUxvb2t1cCIsImRpc3BsYXlWYWx1ZXMiLCJ2YWx1ZU5vZGUiLCJwYXJzZUluc3RhbmNlRGVmaW5pdGlvbkdlb21ldHJ5IiwiaW5zdGFuY2VPYmoiLCJkZWZHZW9tZXRyeSIsImluc3RhbmNlTm9kZSIsInRyYW5zZm9ybU5vZGVJZCIsInRyYW5zZm9ybURhdGEiLCJ0cmFuc2Zvcm1Ob2RlIiwicGFyc2VJbnN0YW5jZUVsZW1lbnQiLCJfaW5zdGFuY2VPYmoiLCJlbGVtZW50T2JqIiwiZGVmaW5pdGlvbiIsImFwcGxpY2F0aW9uSWQiLCJyZW5kZXJNYXRlcmlhbFZhbHVlIiwidGFyZ2V0T2JqZWN0cyIsImdldEluc3RhbmNlUHJveHlEZWZpbml0aW9uSWQiLCJEZWZpbml0aW9uSWQiLCJkZWZpbml0aW9uSWQiLCJnZXRJbnN0YW5jZVByb3h5VHJhbnNmb3JtIiwiZ2V0SW5zdGFuY2VQcm94eURlZmluaXRpb25PYmplY3RzIiwiT2JqZWN0cyIsImNyZWF0ZVRyYW5zZm9ybU5vZGUiLCJDb252ZXJ0SW5zdGFuY2VQcm94eVRvTm9kZSIsIm9iamVjdEFwcGxpY2F0aW9uSWRzIiwib2JqZWN0QXBwbGljYXRpb25JZCIsInNwZWNrbGVEYXRhIiwiaW5zdGFuY2VkTm9kZSIsImNvbnZlcnRJbnN0YW5jZXMiLCJjb25zdW1lQXBwbGljYXRpb25JZHMiLCJjb25zdW1lQXBwbGljYXRpb25JZHNDb3VudCIsIm9iamVjdE5vZGUiLCJwYXJlbnRMYXllckFwcGxpY2F0aW9uSWQiLCJwcm94aWVzIiwiYXBwbHlNYXRlcmlhbHMiLCJyZW5kZXJNYXRlcmlhbENvdW50IiwiY29sb3JDb3VudCIsInBhcmVudEFwcGxpY2F0aW9uSWQiLCJjdXJyZW50IiwiaW5zdGFuY2VQcm94eU5vZGVzIiwiaW5zdGFuY2VDb2xvciIsImdlb21ldHJ5Q29sb3IiLCJnZW9tZXRyeUxheWVyQ29sb3IiLCJwYXJlbnRJbnN0YW5jZSIsIkVkZ2VzIiwiRmFjZXMiLCJMb29wcyIsIlRyaW1zIiwiQ3VydmUyRCIsIkN1cnZlM0QiLCJTdXJmYWNlcyIsIlZlcnRpY2VzIiwiZmFjZXMiLCJ2ZXJ0ZXhOb3JtYWxzIiwiX29iaiIsInRleHRPYmoiLCJSaGlub1Byb3BzIiwiZGVyaXZlZFR5cGUiLCJ0ZXh0UG9zaXRpb24iLCJ0ZXh0Tm9kZSIsIm5lc3RlZE5vZGVzIiwic2VnbWVudHMiLCJoYW5kbGVEdXBsaWNhdGVzIiwiU3BlY2tsZVR5cGVEdXBsaWNhYmxlUmVuZGVyYWJsZXMiLCJiYXNlT2JqZWN0Iiwic3RydWN0dXJlZENsb25lIiwiTG9hZGVyRXZlbnQiLCJMb2FkZXIiLCJyZXNvdXJjZURhdGEiLCJfcmVzb3VyY2UiLCJfcmVzb3VyY2VEYXRhIiwiX3ZlYzMzIiwiX25vcm1hbCIsIl90cmlhbmdsZSIsIk1lc2hUcmlhbmd1bGF0aW9uSGVscGVyIiwidHJpYW5ndWxhdGVGYWNlIiwiX2lub3V0X3RhcmdldEFycmF5IiwiX2luX29mZnNldCIsImFzSW5kZXgiLCJWIiwiZmFjZU5vcm1hbCIsImlpIiwiamoiLCJpUG9zIiwialBvcyIsImxvY2FsT2Zmc2V0IiwiaXNFYXIiLCJwcmV2VmVydGV4IiwiZWFyVmVydGV4IiwibmV4dFZlcnRleCIsImlzRnJvbnRGYWNpbmciLCJfdmVjMzQiLCJfdmVjMzUiLCJTcGVja2xlR2VvbWV0cnlDb252ZXJ0ZXIiLCJtZXNoVHJpYW5ndWxhdGlvblRpbWUiLCJhY3R1YWxUcmlhbmd1bGF0ZVRpbWUiLCJwdXNoVGltZSIsIlVua25vd24iLCJCbG9ja0luc3RhbmNlVG9HZW9tZXRyeURhdGEiLCJQb2ludGNsb3VkVG9HZW9tZXRyeURhdGEiLCJCcmVwVG9HZW9tZXRyeURhdGEiLCJNZXNoVG9HZW9tZXRyeURhdGEiLCJCaW5hcnlNZXNoVG9HZW9tZXRyeURhdGEiLCJQb2ludFRvR2VvbWV0cnlEYXRhIiwiTGluZVRvR2VvbWV0cnlEYXRhIiwiUG9seWxpbmVUb0dlb21ldHJ5RGF0YSIsIkJveFRvR2VvbWV0cnlEYXRhIiwiUG9seWN1cnZlVG9HZW9tZXRyeURhdGEiLCJDdXJ2ZVRvR2VvbWV0cnlEYXRhIiwiQ2lyY2xlVG9HZW9tZXRyeURhdGEiLCJBcmNUb0dlb21ldHJ5RGF0YSIsIkVsbGlwc2VUb0dlb21ldHJ5RGF0YSIsIlZpZXczRFRvR2VvbWV0cnlEYXRhIiwiUmV2aXRJbnN0YW5jZVRvR2VvbWV0cnlEYXRhIiwiVGV4dFRvR2VvbWV0cnlEYXRhIiwiVHJhbnNmb3JtVG9HZW9tZXRyeURhdGEiLCJJbnN0YW5jZVByb3h5VG9HZW9tZXR5RGF0YSIsIlJlZ2lvbkdlb21ldHlEYXRhIiwidk9yaWdpbiIsIlBvaW50VG9WZWN0b3IzIiwidlRhcmdldCIsImNvbnZlcnNpb25GYWN0b3IiLCJtYXRyaXhEYXRhIiwidHJhbnNwb3NlIiwiY29sb3JzUmF3IiwiY2h1bmtBcnJheUhhc0RhdGEiLCJ0cmlhbmd1bGF0ZWQiLCJ0cmlhbmd1bGF0ZWRBcnJheVNpemUiLCJwcm9jZXNzZWQiLCJpbmRpY2VzT2Zmc2V0Iiwid3JpdGUiLCJyZWFkIiwic3RhcnQxIiwiYmxvYklkIiwiYXJyYXlCdWZmZXIiLCJibG9iQ2FjaGUiLCJ2ZXJ0ZXhTdGFydCIsInZlcnRleENvdW50IiwiZmFjZVN0YXJ0IiwiZmFjZUNvdW50IiwidmVydGV4Qnl0ZU9mZnNldCIsImZhY2VCeXRlT2Zmc2V0IiwidmVydGV4Qnl0ZUxlbmd0aCIsImZhY2VCeXRlTGVuZ3RoIiwiYnl0ZUxlbmd0aCIsImZhY2VzMzIiLCJ4ZGlyIiwieWRpciIsIm1ha2VCYXNpcyIsIlBvaW50VG9GbG9hdEFycmF5Iiwib3V0Q2h1bmsiLCJjbG9zZWQiLCJjb21wbGV0ZSIsImJhc2VQbGFuZSIsImVwcyIsImJYIiwiYlkiLCJiWiIsInhTaXplIiwieVNpemUiLCJ6U2l6ZSIsImJveDMiLCJidWZmZXJzIiwiY29udiIsInBvbHlsaW5lR2VvbWV0cnkiLCJnZXRDaXJjdWxhckN1cnZlUG9pbnRzIiwiZGQwIiwiZGQxIiwiX2Nsb2Nrd2lzZSIsInZtIiwiY3VydmUiLCJFbGxpcHNlQ3VydmUiLCJnZXRQb2ludHMiLCJGbGF0dGVuVmVjdG9yM0FycmF5IiwieEF4aXMiLCJ5QXhpcyIsImZpcnN0UmFkaXVzIiwic2Vjb25kUmFkaXVzIiwieE1vdmUiLCJ5TW92ZSIsImFkZFZlY3RvcnMiLCJzdGFydEFuZ2xlIiwiZW5kQW5nbGUiLCJ2QnVmZiIsInRvbGluZWFyIiwic3JnYlRvTGluZWFyIiwiT0JKRUNUX0xPQURJTkdfUFJPR1JFU1NfTUFYIiwiUE9TVF9QUk9DRVNTSU5HX1BST0dSRVNTIiwiQkxPQl9QUkVMT0FEX1BST0dSRVNTX1NUQVJUIiwiQkxPQl9QUkVMT0FEX1BST0dSRVNTX0VORCIsIlJFTkRFUl9UUkVFX1BST0dSRVNTX1NUQVJUIiwiUkVOREVSX1RSRUVfUFJPR1JFU1NfRU5EIiwiQkxPQl9QUkVMT0FEX0NPTkNVUlJFTkNZIiwiREVGQVVMVF9NQVhfRlVMTF9PQkpFQ1RfTE9BRF9DT1VOVCIsIk1BWF9GVUxMX09CSkVDVF9MT0FEX0NPVU5UX1NUT1JBR0VfS0VZIiwiU3BlY2tsZUxvYWRlciIsImZpbmlzaGVkIiwiaXNGaW5pc2hlZCIsInRhcmdldFRyZWUiLCJhdXRoVG9rZW4iLCJlbmFibGVDYWNoaW5nIiwibG9nZ2VyIiwiYXR0cmlidXRlTWFzayIsIm9iamVjdFR5cGVNYXNrIiwiaXNDYW5jZWxsZWQiLCJpbml0T2JqZWN0TG9hZGVyIiwiY29udmVydGVyIiwiX2VuYWJsZUNhY2hpbmciLCJ0b2tlbiIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJ1cmwiLCJVUkwiLCJwYXRobmFtZSIsInNlcnZlclVybCIsInN0cmVhbUlkIiwib2JqZWN0SWQiLCJPYmplY3RMb2FkZXIyRmFjdG9yeSIsImNyZWF0ZUZyb21VcmwiLCJwaGFzZVN0YXJ0IiwiZmlyc3QiLCJkYXRhbG9hZGluZyIsInRvdGFsIiwiZ2V0VG90YWxPYmplY3RDb3VudCIsIm1heEZ1bGxPYmplY3RMb2FkQ291bnQiLCJnZXRNYXhGdWxsT2JqZWN0TG9hZENvdW50IiwidG9Mb2NhbGVTdHJpbmciLCJMb2FkV2FybmluZyIsIkxvYWRQcm9ncmVzcyIsInByb2dyZXNzIiwiTG9hZENhbmNlbGxlZCIsImRpc3Bvc2VBc3luYyIsInRyYXZlcnNhbHMiLCJmaXJzdE9iamVjdFByb21pc2UiLCJwcm9ncmVzc0xpc3RlbiIsImdldE9iamVjdEl0ZXJhdG9yIiwiVHJhdmVyc2VkIiwicHJlbG9hZEJpbmFyeU1lc2hlcyIsImxvYWRlZCIsInRvdGFsQmxvYnMiLCJyZW5kZXJOb2RlQ291bnQiLCJDb252ZXJ0ZWQiLCJnZXRGZWF0dXJlRmxhZyIsIk9iamVjdExvYWRlcjJGbGFncyIsIkRFQlVHIiwiZGF0YVByb2dyZXNzIiwiYmxvYnNUb0ZldGNoIiwiaXNCaW5hcnlNZXNoIiwiZW5kc1dpdGgiLCJ1cmxPYmoiLCJibG9iSWRzIiwiZmV0Y2hCbG9iIiwiYmxvYlVybCIsImZldGNoIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJvayIsInN0YXR1c1RleHQiLCJjb25maWd1cmVkVmFsdWUiLCJnbG9iYWxUaGlzIiwiU1BFQ0tMRV9WSUVXRVJfTUFYX0ZVTExfT0JKRUNUX0xPQURfQ09VTlQiLCJub3JtYWxpemVkVmFsdWUiLCJ0cmltIiwicGFyc2VkVmFsdWUiLCJWaXN1YWxEaWZmTW9kZSIsIkRpZmZFeHRlbnNpb24iLCJhZGRlZE1hdGVyaWFscyIsImNoYW5nZWRPbGRNYXRlcmlhbHMiLCJjaGFuZ2VkTmV3TWF0ZXJpYWxzIiwicmVtb3ZlZE1hdGVyaWFscyIsIl9kaWZmVGltZSIsIl9kaWZmTW9kZSIsImR5bmFtaWNhbGx5TG9hZGVkRGlmZlJlc291cmNlcyIsImFkZGVkTWF0ZXJpYWxNZXNoIiwiY2hhbmdlZE5ld01hdGVyaWFsTWVzaCIsImNoYW5nZWRPbGRNYXRlcmlhbE1lc2giLCJyZW1vdmVkTWF0ZXJpYWxNZXNoIiwiYWRkZWRNYXRlcmlhbFBvaW50IiwiY2hhbmdlZE5ld01hdGVyaWFsUG9pbnQiLCJjaGFuZ2VkT2xkTWF0ZXJpYWxQb2ludCIsInJlbW92ZWRNYXRlcmlhbFBvaW50IiwiZGlmZiIsInVybEEiLCJ1cmxCIiwibG9hZFByb21pc2VzIiwiZGlmZlJlc3VsdCIsImdldERpZmYiLCJkZXB0aFBhc3NlcyIsInVwZGF0ZVZpc3VhbERpZmYiLCJ1bmRpZmYiLCJyZXNldE1hdGVyaWFsR3JvdXBzIiwidW5sb2FkUHJvbWlzZXMiLCJidWlsZElkTWFwcyIsImFwcElkTWFwIiwiYXRvbWljUnYiLCJkaWZmSXRlcmF0aXZlIiwiX3Zpc3VhbERpZmYiLCJnZXRWaXN1YWxEaWZmUmVzdWx0IiwidW5jaGFuZ2VkIiwiYWRkZWQiLCJyZW1vdmVkIiwibW9kaWZpZWQiLCJyZW5kZXJUcmVlQSIsInJlbmRlclRyZWVCIiwicnZzQSIsInJ2c0IiLCJpZE1hcEEiLCJhcHBJZE1hcEEiLCJpZE1hcEIiLCJhcHBJZE1hcEIiLCJyZXMyIiwiX21hdGVyaWFsR3JvdXBzIiwiYnVpbGRNYXRlcmlhbEdyb3VwcyIsIm5lZWRzUmVuZGVyUmVzZXQiLCJzZXREaWZmVGltZSIsImdldENvbG9yZWRNYXRlcmlhbEdyb3VwcyIsIlBMQUlOIiwiZ2V0UGxhaW5NYXRlcmlhbEdyb3VwcyIsImFkZGVkUnZzIiwicmVtb3ZlZFJ2cyIsInVuY2hhbmdlZFJ2cyIsIm1vZGlmaWVkT2xkUnZzIiwibW9kaWZpZWROZXdSdnMiLCJtb2RpZmllZE9sZCIsIm1vZGlmaWVkTmV3IiwidmlzdWFsRGlmZlJlc3VsdCIsImdldEJhdGNoZXNTdWJncm91cHMiLCJjaGFuZ2VkT2xkIiwiY2hhbmdlZE5ldyIsInN1Ymdyb3VwIiwiZ3JvdXBCYXRjaGVzIiwiZ3JvdXBCeSIsIm1hdENsb25lIiwiT2JqQ29udmVydGVyIiwibGFzdEFzeW5jUGF1c2UiLCJncm91cFRvTm9kZSIsImFzeW5jUGF1c2UiLCJtZXNoTWF0ZXJpYWxUb1JlbmRlck1hdGVyaWFsIiwiZ2V0TWF0ZXJpYWxDb2xvciIsInRvQXJnYkludCIsIm1heWJlQ29sb3IiLCJ0b0J5dGUiLCJyZWQiLCJncmVlbiIsImJsdWUiLCJPYmpHZW9tZXRyeUNvbnZlcnRlciIsIm1lcmdlVmVydGljZXMiLCJ0aWxlTWFnaWMiLCJ0ZXh0RGVjb2RlciIsIlRleHREZWNvZGVyIiwiREVGQVVMVF9USUxFX0xPQURfQ09OQ1VSUkVOQ1kiLCJUSUxFX0xPQURfQ09OQ1VSUkVOQ1lfU1RPUkFHRV9LRVkiLCJMYXJnZU1vZGVsU3RyZWFtaW5nTG9hZGVyIiwibWFuaWZlc3QiLCJhcnRpZmFjdEJhc2VVcmwiLCJhYm9ydENvbnRyb2xsZXJzIiwiaWZjRWxlbWVudFBhcnRJZHMiLCJyZXBsYWNlIiwic2VsZWN0ZWRUaWxlcyIsInNlbGVjdEluaXRpYWxUaWxlcyIsImxvYWRlZFRpbGVzIiwiY29uY3VycmVuY3kiLCJnZXRQb3NpdGl2ZUludGVnZXJTZXR0aW5nIiwidGlsZUdyb3VwcyIsImxvZCIsImxvYWRUaWxlIiwiZXJyIiwidGlsZUdyb3VwIiwiYnVpbHQiLCJjb250cm9sbGVyIiwiYWJvcnQiLCJtb2RlbENlbnRlciIsImdldEJvdW5kc0NlbnRlciIsInRpbGVzIiwidGlsZSIsImdldExvd2VzdExvZCIsImNlbnRlckRpc3RhbmNlIiwiYnl0ZXMiLCJsb2RzIiwibGV2ZWxBIiwibGV2ZWwiLCJsZXZlbEIiLCJ0aWxlVXJsIiwiYWJvcnRDb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiY2FjaGUiLCJzaWduYWwiLCJwYXJzZVRpbGUiLCJkZWxldGUiLCJEYXRhVmlldyIsIm1hZ2ljIiwiZGVjb2RlIiwidmVyc2lvbiIsImdldEludDMyIiwibWVzaENvdW50IiwiZXhwcmVzc0lkIiwibWVzaElkIiwiaWZjR3VpZCIsInJlYWRUaWxlU3RyaW5nIiwidG90YWxCeXRlTGVuZ3RoIiwiaWZjVHlwZSIsImlmY05hbWUiLCJpZmNFbGVtZW50QXNzZW1ibHlHdWlkIiwiaWZjRWxlbWVudEFzc2VtYmx5VHlwZSIsImlmY0VsZW1lbnRBc3NlbWJseU5hbWUiLCJzb3VyY2VHdWlkIiwiaWZjRWxlbWVudEFzc2VtYmx5U291cmNlR3VpZCIsImdldEZsb2F0MzIiLCJCWVRFU19QRVJfRUxFTUVOVCIsImlmY0VsZW1lbnRHdWlkIiwiaWZjRWxlbWVudFNvdXJjZUd1aWQiLCJhcHBsaWNhdGlvbkd1aWQiLCJpZmNFbGVtZW50VHlwZSIsImlmY0VsZW1lbnROYW1lIiwidGFyZ2V0T2JqZWN0SWRzIiwiZ2V0SWZjRWxlbWVudFBhcnRJZHMiLCJpZmNHbG9iYWxJZCIsImdsb2JhbElkIiwic2V0VGFyZ2V0T2JqZWN0SWRzIiwibWVzaE1ldGFkYXRhIiwicGFydElkcyIsImdldEZvdXJCeXRlUGFkZGluZyIsInN0b3JhZ2VLZXkiLCJPYmpMb2FkZXIiLCJiYXNlTG9hZGVyIiwiT0JKTG9hZGVyIiwibG9hZFJlc29sdmUiLCJsb2FkUmVqZWN0Iiwic3BlY2tsZVZpZXdwb3J0VmVydCIsInNwZWNrbGVWaWV3cG9ydEZyYWciLCJTcGVja2xlVmlld3BvcnRNYXRlcmlhbCIsIm1pbkludGVuc2l0eSIsInRNYXRjYXAiLCJtYXRjYXBUZXh0dXJlIiwiRGVmYXVsdFZpZXdwb3J0UGFzc09wdGlvbnMiLCJWaWV3cG9ydFBhc3MiLCJ2aWV3cG9ydE1hdGVyaWFsIiwiTm9ybWFsQmxlbmRpbmciLCJzZXRNYXRjYXBUZXh0dXJlIiwicGVuZGluZ1RleHR1cmUiLCJBcmN0aWNWaWV3UGlwZWxpbmUiLCJ2aWV3cG9ydFBhc3MiLCJ2aWV3cG9ydFRyYW5zcGFyZW50UGFzcyIsIlNoYWRlZFBhc3MiLCJidWlsZE1hdGVyaWFscyIsImFwcGx5Q29sb3JJbmRpY2VzIiwiZGVmYXVsdENvbG9yRW50cnkiLCJ1cGRhdGVSYW5nZXMiLCJvdmVycmlkZU1hdGVyaWFscyIsInR1cGxlIiwiU2hhZGVkVmlld1BpcGVsaW5lIiwiYmFzaXRQYXNzIiwibm9uTWVzaFBhc3MiLCJzcGVja2xlQ29weU91dHB1dFZlcnQiLCJzcGVja2xlQ29weU91dHB1dEZyYWciLCJJbnB1dFR5cGUiLCJEZWZhdWx0T3V0cHV0UGFzc09wdGlvbnMiLCJpbnB1dFR5cGUiLCJQYXNzdGhyb3VnaCIsIk91dHB1dFBhc3MiLCJzZXRJbnB1dFR5cGUiLCJJTlBVVF9UWVBFIiwiUGVuVmlld1BpcGVsaW5lIiwiZ2VvbWV0cnlQYXNzIiwiaGlkZGVuTWF0ZXJpYWwiLCJzZXRPcGFxdWVTb3J0Iiwic29ydE9wYXF1ZSIsIm91dHB1dFBhc3MiLCJTb2xpZFZpZXdQaXBlbGluZSIsImRlZmF1bHRNYXRjYXAiLCJwb3N0QmxlbmRHZW9tZXRyeVBhc3MiLCJibGVuZFN1YnBpcGVsaW5lRHluYW1pYyIsImJsZW5kU3VicGlwZWxpbmVQcm9ncmVzc2l2ZSIsIlZpZXdNb2RlIiwiVmlld01vZGVFdmVudCIsIlZpZXdNb2RlcyIsInZpZXdNb2RlT3B0aW9ucyIsInZpZXdNb2RlIiwiX3ZpZXdNb2RlIiwiZmlsdGVyaW5nRXh0ZW5zaW9uIiwiX3ZpZXdNb2RlT3B0aW9ucyIsInVwZGF0ZVZpZXdNb2RlT3B0aW9ucyIsInNldFZpZXdNb2RlIiwidXBkYXRlVmlld01vZGVzIiwiREVGQVVMVCIsIlBFTiIsIlNPTElEIiwiQVJDVElDIiwiU0hBREVEIiwiQ2hhbmdlZCIsInJlbGF0aXZlRGVwdGhCaWFzIiwiZWRnZXNQYXNzZXMiLCJIeWJyaWRDYW1lcmFDb250cm9sbGVyIiwiTGVnYWN5U2VsZWN0aW9uRXh0ZW5zaW9uIiwiSGlnaGxpZ2h0RXh0ZW5zaW9uIiwiaGlnaGxpZ2h0TWF0ZXJpYWxEYXRhIiwiTGVnYWN5Vmlld2VyIiwiY2FtZXJhQ29udHJvbGxlciIsInNlY3Rpb25zIiwiZmlsdGVyaW5nIiwiZXhwbG9kZUV4dGVuc2lvbiIsImRpZmZFeHRlbnNpb24iLCJoaWdobGlnaHRFeHRlbnNpb24iLCJzZXRTZWN0aW9uQm94IiwiYm94RGF0YSIsImdldEN1cnJlbnRTZWN0aW9uQm94IiwidG9nZ2xlU2VjdGlvbkJveCIsInNlY3Rpb25Cb3hPZmYiLCJzZWN0aW9uQm94T24iLCJzZWxlY3RlZE9iamVjdHMiLCJyZXNldFNlbGVjdGlvbiIsInByZXNlcnZlU2VsZWN0aW9uSGlnaGxpZ2h0RmlsdGVyIiwiaGlnaGxpZ2h0T2JqZWN0cyIsInJlc2V0SGlnaGxpZ2h0IiwicHJvcGVydHkiLCJmaWx0ZXJGbiIsImhpZ2hMaWdodGVkT2JqZWN0cyIsInF1ZXJ5QXN5bmMiLCJ0b2dnbGVDYW1lcmFQcm9qZWN0aW9uIiwibG9hZE9iamVjdEFzeW5jIiwiX2RpZmZSZXN1bHQiLCJzZXRWaXN1YWxEaWZmTW9kZSIsImVuYWJsZU1lYXN1cmVtZW50cyIsInNldE1lYXN1cmVtZW50T3B0aW9ucyIsIlRBQVBpcGVsaW5lIiwiaml0dGVyT3BhcXVlUGFzcyIsImppdHRlclRyYW5zcGFyZW50UGFzcyIsImJsZW5kRWRnZXNQYXNzIiwiaml0dGVyZWRTdGVuY2lsUGFzcyIsImppdHRlcmVkU3RlbmNpbE1hc2tQYXNzIiwiaXNQYXNzdGhyb3VnaCIsIlNwZWNrbGVPZmZsaW5lTG9hZGVyIiwicmVzb3VyY2VJZCIsIl9hdXRoVG9rZW4iLCJjcmVhdGVGcm9tT2JqZWN0cyIsInJvb3RPYmplY3QiLCJnZXRSb290T2JqZWN0IiwiV2ViWHJWaWV3ZXIiLCJ4ciIsInNldEFuaW1hdGlvbkxvb3AiLCJ4cldyYXBwZWRSZW5kZXIiLCJzdG9yZUxheWVycyIsImdldFJlc291cmNlVXJscyIsImdldE9sZFJlc291cmNlVXJscyIsImdldE5ld1Jlc291cmNlVXJscyIsInBhcnNlZCIsIm9ianNVcmxzIiwiY29tbWl0SWQiLCJvYmpVcmwiLCJnZXRDb21taXRSZWZlcmVuY2VkT2JqZWN0VXJsIiwic2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwicmVzSWRzIiwicmVzSWQiLCJtZXRob2QiLCJ2YXJpYWJsZXMiLCJqc29uIiwic3RyZWFtIiwiY29tbWl0IiwicmVmZXJlbmNlZE9iamVjdCIsImRlY29kZVVSSSIsImhyZWYiLCJtYXRjaCIsInByb2plY3RJZCIsInJlc291cmNlcyIsIlNwZWNrbGVWaWV3ZXIiLCJWaWV3ZXJSb3V0ZSIsInBhcnNlVXJsUGFyYW1ldGVycyIsImRlY29kZVVSSUNvbXBvbmVudCIsInByb21pc2VzIiwiaXNPYmplY3RSZXNvdXJjZSIsIm9iamVjdFJlc291cmNlVG9VcmwiLCJpc01vZGVsUmVzb3VyY2UiLCJtb2RlbFJlc291cmNlVG9VcmwiLCJpc0FsbE1vZGVsc1Jlc291cmNlIiwibW9kZWxBbGxSZXNvdXJjZVRvVXJsIiwidmVyc2lvbklkIiwicnVuTW9kZWxWZXJzaW9uUXVlcnkiLCJydW5Nb2RlbExhc3RWZXJzaW9uUXVlcnkiLCJydW5BbGxNb2RlbHNRdWVyeSIsIm1vZGVsSWQiLCJnZXRSZXNwb25zZSIsInZlcnNpb25zIiwiaXRlbXMiLCJ1cmxzIiwibW9kZWxzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9tb2R1bGVzL0V2ZW50RW1pdHRlci50cyIsIi4uL3NyYy9hc3NldHMvaGRyaS9NaWxkLWR3YWIucG5nIiwiLi4vc3JjL0lWaWV3ZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9vYmplY3RzL1JvdGF0YWJsZVBNUkVNR2VuZXJhdG9yLnRzIiwiLi4vc3JjL21vZHVsZXMvdXRpbHMvTG9nZ2VyLnRzIiwiLi4vc3JjL21vZHVsZXMvQXNzZXRzLnRzIiwiLi4vc3JjL21vZHVsZXMvV29ybGQudHMiLCIuLi9zcmMvbW9kdWxlcy9iYXRjaGluZy9CYXRjaC50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtbGluZS12ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1saW5lLWZyYWcudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvU3BlY2tsZU1hdGVyaWFsLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVMaW5lTWF0ZXJpYWwudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXN0YW5kYXJkLXZlcnQudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXN0YW5kYXJkLWZyYWcudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXBvaW50LXZlcnQudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXBvaW50LWZyYWcudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvU3BlY2tsZVBvaW50TWF0ZXJpYWwudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXN0YW5kYXJkLWNvbG9yZWQtdmVydC50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtc3RhbmRhcmQtY29sb3JlZC1mcmFnLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVTdGFuZGFyZENvbG9yZWRNYXRlcmlhbC50cyIsIi4uL3NyYy9hc3NldHMvZ3JhZGllbnQucG5nIiwiLi4vc3JjL21vZHVsZXMvY29udmVydGVyL1VuaXRzLmpzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1naG9zdC12ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1naG9zdC1mcmFnLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1iYXNpYy12ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1iYXNpYy1mcmFnLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVCYXNpY01hdGVyaWFsLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVHaG9zdE1hdGVyaWFsLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS10ZXh0LXZlcnQudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXRleHQtZnJhZy50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9TcGVja2xlVGV4dE1hdGVyaWFsLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVQb2ludENvbG91cmVkTWF0ZXJpYWwudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvU3BlY2tsZVRleHRDb2xvcmVkTWF0ZXJpYWwudHMiLCIuLi9zcmMvbW9kdWxlcy9jb252ZXJ0ZXIvVmlydHVhbEFycmF5LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL01hdGVyaWFscy50cyIsIi4uL3NyYy9tb2R1bGVzL2xvYWRlcnMvR2VvbWV0cnlDb252ZXJ0ZXIudHMiLCIuLi9zcmMvbW9kdWxlcy90cmVlL05vZGVSZW5kZXJWaWV3LnRzIiwiLi4vc3JjL21vZHVsZXMvdHJlZS9SZW5kZXJUcmVlLnRzIiwiLi4vc3JjL21vZHVsZXMvdHJlZS9Ob2RlTWFwLnRzIiwiLi4vc3JjL21vZHVsZXMvdHJlZS9Xb3JsZFRyZWUudHMiLCIuLi9zcmMvbW9kdWxlcy9IZWxwZXJzLnRzIiwiLi4vc3JjL21vZHVsZXMvY29udmVydGVyL0dlb21ldHJ5LnRzIiwiLi4vc3JjL21vZHVsZXMvYmF0Y2hpbmcvTGluZUJhdGNoLnRzIiwiLi4vc3JjL21vZHVsZXMvb2JqZWN0cy9BY2NlbGVyYXRpb25TdHJ1Y3R1cmUudHMiLCIuLi9zcmMvbW9kdWxlcy9vYmplY3RzL1RvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlLnRzIiwiLi4vc3JjL21vZHVsZXMvb2JqZWN0cy9TcGVja2xlQmF0Y2hlZFRleHQudHMiLCIuLi9zcmMvbW9kdWxlcy9iYXRjaGluZy9CYXRjaE9iamVjdC50cyIsIi4uL3NyYy9tb2R1bGVzL2JhdGNoaW5nL1RleHRCYXRjaE9iamVjdC50cyIsIi4uL3NyYy9tb2R1bGVzL2JhdGNoaW5nL0RyYXdSYW5nZXMudHMiLCIuLi9zcmMvbW9kdWxlcy9iYXRjaGluZy9UZXh0QmF0Y2gudHMiLCIuLi9zcmMvbW9kdWxlcy9vYmplY3RzL1NwZWNrbGVNZXNoLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1kZXB0aC12ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1kZXB0aC1mcmFnLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVEZXB0aE1hdGVyaWFsLnRzIiwiLi4vc3JjL21vZHVsZXMvb2JqZWN0cy9FeHRlbmRlZEluc3RhbmNlZE1lc2gudHMiLCIuLi9zcmMvbW9kdWxlcy9vYmplY3RzL1NwZWNrbGVJbnN0YW5jZWRNZXNoLnRzIiwiLi4vc3JjL21vZHVsZXMvYmF0Y2hpbmcvSW5zdGFuY2VkQmF0Y2hPYmplY3QudHMiLCIuLi9zcmMvbW9kdWxlcy9iYXRjaGluZy9JbnN0YW5jZWRNZXNoQmF0Y2gudHMiLCIuLi9zcmMvbW9kdWxlcy9iYXRjaGluZy9QcmltaXRpdmVCYXRjaC50cyIsIi4uL3NyYy9tb2R1bGVzL2JhdGNoaW5nL01lc2hCYXRjaC50cyIsIi4uL3NyYy9tb2R1bGVzL2JhdGNoaW5nL1BvaW50QmF0Y2gudHMiLCIuLi9zcmMvbW9kdWxlcy9waXBlbGluZS9QYXNzZXMvR1Bhc3MudHMiLCIuLi9zcmMvbW9kdWxlcy9iYXRjaGluZy9CYXRjaGVyLnRzIiwiLi4vc3JjL21vZHVsZXMvaW5wdXQvSW5wdXQudHMiLCIuLi9zcmMvbW9kdWxlcy9vYmplY3RzL1NwZWNrbGVSYXljYXN0ZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9JbnRlcnNlY3Rpb25zLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1zaGFkb3djYXRjaGVyLXZlcnQudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXNoYWRvd2NhdGNoZS1mcmFnLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVTaGFkb3djYXRjaGVyTWF0ZXJpYWwudHMiLCIuLi9zcmMvbW9kdWxlcy9TaGFkb3djYXRjaGVyQ29uZmlnLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGFzc2VzL1NoYWRvd2NhdGNoZXJQYXNzLnRzIiwiLi4vc3JjL21vZHVsZXMvU2hhZG93Y2F0Y2hlci50cyIsIi4uL3NyYy9tb2R1bGVzL29iamVjdHMvU3BlY2tsZUNhbWVyYS50cyIsIi4uL3NyYy9tb2R1bGVzL29iamVjdHMvU3BlY2tsZVdlYkdMUmVuZGVyZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9waXBlbGluZS9QYXNzZXMvR2VvbWV0cnlQYXNzLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGlwZWxpbmVzL1BpcGVsaW5lLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGFzc2VzL0RlcHRoUGFzcy50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtc3RhdGljLWFvLWFjY3VtdWxhdGUtZnJhZy50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtc3RhdGljLWFvLWFjY3VtdWxhdGUtdmVydC50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtc3RhdGljLWFvLWdlbmVyYXRlLXZlcnQudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXN0YXRpYy1hby1nZW5lcmF0ZS1mcmFnLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGFzc2VzL1Byb2dyZXNzaXZlQU9QYXNzLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1hcHBseS1hby12ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1hcHBseS1hby1mcmFnLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGFzc2VzL0JsZW5kUGFzcy50cyIsIi4uL3NyYy9tb2R1bGVzL3BpcGVsaW5lL1BpcGVsaW5lcy9Qcm9ncmVzc2l2ZVBpcGVsaW5lLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1kaXNwbGFjZS52ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1kaXNwbGFjZS1mcmFnLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVEaXNwbGFjZU1hdGVyaWFsLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGFzc2VzL1N0ZW5jaWxQYXNzLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGFzc2VzL1N0ZW5jaWxNYXNrUGFzcy50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtZWRnZXMtZ2VuZXJhdG9yLWZyYWcudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLWVkZ2VzLWdlbmVyYXRvci12ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGFzc2VzL0VkZ2VzUGFzcy50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtdGVtcG9yYWwtc3VwZXJzYW1wbGluZy12ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS10ZW1wb3JhbC1zdXBlcnNhbXBsaW5nLWZyYWcudHMiLCIuLi9zcmMvbW9kdWxlcy9waXBlbGluZS9QYXNzZXMvVEFBUGFzcy50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtZGVwdGgtbm9ybWFsLXZlcnQudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLWRlcHRoLW5vcm1hbC1mcmFnLnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVEZXB0aE5vcm1hbE1hdGVyaWFsLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGFzc2VzL0RlcHRoTm9ybWFsUGFzcy50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtZGVwdGgtbm9ybWFsLWlkLWZyYWcudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLWRlcHRoLW5vcm1hbC1pZC12ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL1NwZWNrbGVEZXB0aE5vcm1hbElkTWF0ZXJpYWwudHMiLCIuLi9zcmMvbW9kdWxlcy9waXBlbGluZS9QYXNzZXMvRGVwdGhOb3JtYWxJZFBhc3MudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLW5vcm1hbC12ZXJ0LnRzIiwiLi4vc3JjL21vZHVsZXMvbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1ub3JtYWwtZnJhZy50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9TcGVja2xlTm9ybWFsTWF0ZXJpYWwudHMiLCIuLi9zcmMvbW9kdWxlcy9waXBlbGluZS9QYXNzZXMvTm9ybWFsc1Bhc3MudHMiLCIuLi9zcmMvbW9kdWxlcy9waXBlbGluZS9QaXBlbGluZXMvRWRnZXNQaXBlbGluZS50cyIsIi4uL3NyYy9tb2R1bGVzL3BpcGVsaW5lL1BpcGVsaW5lcy9EZWZhdWx0UGlwZWxpbmUudHMiLCIuLi9zcmMvdHlwZS1hdWdtZW50YXRpb25zL3RocmVlLWV4dGVuc2lvbnMudHMiLCIuLi9zcmMvbW9kdWxlcy9TcGVja2xlUmVuZGVyZXIudHMiLCIuLi9zcmMvaGVscGVycy9mbGF0dGVuLnRzIiwiLi4vc3JjL21vZHVsZXMvZmlsdGVyaW5nL1Byb3BlcnR5TWFuYWdlci50cyIsIi4uL3NyYy9tb2R1bGVzL3F1ZXJpZXMvSW50ZXJzZWN0aW9uUXVlcnlTb2x2ZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9xdWVyaWVzL1BvaW50UXVlcnlTb2x2ZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9xdWVyaWVzL1F1ZXJpZXMudHMiLCIuLi9zcmMvbW9kdWxlcy9leHRlbnNpb25zL0V4dGVuc2lvbi50cyIsIi4uL3NyYy9tb2R1bGVzL3V0aWxzL0RhbXBlci50cyIsIi4uL3NyYy9tb2R1bGVzL2V4dGVuc2lvbnMvY29udHJvbHMvU3BlY2tsZUNvbnRyb2xzLnRzIiwiLi4vc3JjL21vZHVsZXMvdXRpbHMvQW5nbGVEYW1wZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9leHRlbnNpb25zL2NvbnRyb2xzL0ZseUNvbnRyb2xzLnRzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9jb250cm9scy9TbW9vdGhPcmJpdENvbnRyb2xzLnRzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9DYW1lcmFDb250cm9sbGVyLnRzIiwiLi4vc3JjL21vZHVsZXMvdGhyZWUvc3RhdHMudHMiLCIuLi9zcmMvbW9kdWxlcy9WaWV3ZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9leHRlbnNpb25zL21lYXN1cmVtZW50cy9NZWFzdXJlbWVudC50cyIsIi4uL3NyYy9tb2R1bGVzL29iamVjdHMvVGV4dExhYmVsLnRzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9tZWFzdXJlbWVudHMvTWVhc3VyZW1lbnRQb2ludEdpem1vLnRzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9tZWFzdXJlbWVudHMvUGVycGVuZGljdWxhck1lYXN1cmVtZW50LnRzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9tZWFzdXJlbWVudHMvUG9pbnRUb1BvaW50TWVhc3VyZW1lbnQudHMiLCIuLi9zcmMvbW9kdWxlcy9leHRlbnNpb25zL21lYXN1cmVtZW50cy9BcmVhTWVhc3VyZW1lbnQudHMiLCIuLi9zcmMvbW9kdWxlcy9leHRlbnNpb25zL21lYXN1cmVtZW50cy9Qb2ludE1lYXN1cmVtZW50LnRzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9tZWFzdXJlbWVudHMvTWVhc3VyZW1lbnRzRXh0ZW5zaW9uLnRzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9TZWxlY3Rpb25FeHRlbnNpb24udHMiLCIuLi9zcmMvbW9kdWxlcy9leHRlbnNpb25zL0NvbnRyb2xzLmpzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9UcmFuc2Zvcm1Db250cm9scy5qcyIsIi4uL3NyYy9tb2R1bGVzL2V4dGVuc2lvbnMvc2VjdGlvbnMvU2VjdGlvblRvb2wudHMiLCIuLi9zcmMvbW9kdWxlcy9leHRlbnNpb25zL3NlY3Rpb25zL1NlY3Rpb25PdXRsaW5lcy50cyIsIi4uL3NyYy9tb2R1bGVzL2V4dGVuc2lvbnMvRmlsdGVyaW5nRXh0ZW5zaW9uLnRzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9FeHBsb2RlRXh0ZW5zaW9uLnRzIiwiLi4vc3JjL21vZHVsZXMvbG9hZGVycy9TcGVja2xlL1NwZWNrbGVDb252ZXJ0ZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9sb2FkZXJzL0xvYWRlci50cyIsIi4uL3NyYy9tb2R1bGVzL2NvbnZlcnRlci9NZXNoVHJpYW5ndWxhdGlvbkhlbHBlci5qcyIsIi4uL3NyYy9tb2R1bGVzL2xvYWRlcnMvU3BlY2tsZS9TcGVja2xlR2VvbWV0cnlDb252ZXJ0ZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9sb2FkZXJzL1NwZWNrbGUvU3BlY2tsZUxvYWRlci50cyIsIi4uL3NyYy9tb2R1bGVzL2V4dGVuc2lvbnMvRGlmZkV4dGVuc2lvbi50cyIsIi4uL3NyYy9tb2R1bGVzL2xvYWRlcnMvT0JKL09iakNvbnZlcnRlci50cyIsIi4uL3NyYy9tb2R1bGVzL2xvYWRlcnMvT0JKL09iakdlb21ldHJ5Q29udmVydGVyLnRzIiwiLi4vc3JjL21vZHVsZXMvbG9hZGVycy9TcGVja2xlL0xhcmdlTW9kZWxTdHJlYW1pbmdMb2FkZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9sb2FkZXJzL09CSi9PYmpMb2FkZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXZpZXdwb3J0LXZlcnQudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXZpZXdwb3J0LWZyYWcudHMiLCIuLi9zcmMvbW9kdWxlcy9tYXRlcmlhbHMvU3BlY2tsZVZpZXdwb3J0TWF0ZXJpYWwudHMiLCIuLi9zcmMvbW9kdWxlcy9waXBlbGluZS9QYXNzZXMvVmlld3BvcnRQYXNzLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGlwZWxpbmVzL0FyY3RpY1ZpZXdQaXBlbGluZS50cyIsIi4uL3NyYy9tb2R1bGVzL3BpcGVsaW5lL1Bhc3Nlcy9TaGFkZWRQYXNzLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGlwZWxpbmVzL1NoYWRlZFZpZXdQaXBlbGluZS50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtY29weS1vdXRwdXQtdmVydC50cyIsIi4uL3NyYy9tb2R1bGVzL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtY29weS1vdXRwdXQtZnJhZy50cyIsIi4uL3NyYy9tb2R1bGVzL3BpcGVsaW5lL1Bhc3Nlcy9PdXRwdXRQYXNzLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGlwZWxpbmVzL1BlblZpZXdQaXBlbGluZS50cyIsIi4uL3NyYy9hc3NldHMvbWF0Y2FwLnBuZyIsIi4uL3NyYy9tb2R1bGVzL3BpcGVsaW5lL1BpcGVsaW5lcy9Tb2xpZFZpZXdQaXBlbGluZS50cyIsIi4uL3NyYy9tb2R1bGVzL2V4dGVuc2lvbnMvVmlld01vZGVzLnRzIiwiLi4vc3JjL21vZHVsZXMvZXh0ZW5zaW9ucy9IeWJyaWRDYW1lcmFDb250cm9sbGVyLnRzIiwiLi4vc3JjL21vZHVsZXMvTGVnYWN5Vmlld2VyLnRzIiwiLi4vc3JjL21vZHVsZXMvcGlwZWxpbmUvUGlwZWxpbmVzL1RBQVBpcGVsaW5lLnRzIiwiLi4vc3JjL21vZHVsZXMvbG9hZGVycy9TcGVja2xlL1NwZWNrbGVPZmZsaW5lTG9hZGVyLnRzIiwiLi4vc3JjL21vZHVsZXMvV2ViWHJWaWV3ZXIudHMiLCIuLi9zcmMvbW9kdWxlcy9VcmxIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlICovXHJcbi8qXHJcbiAqIGh0dHBzOi8vbWVkaXVtLmNvbS9iZXR0ZXItcHJvZ3JhbW1pbmcvaG93LXRvLWNyZWF0ZS15b3VyLW93bi1ldmVudC1lbWl0dGVyLWluLWphdmFzY3JpcHQtZmJkNWRiMjQ0N2M0XHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudEVtaXR0ZXIge1xyXG4gIHByb3RlY3RlZCBfZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbltdPlxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuX2V2ZW50cyA9IHt9XHJcbiAgfVxyXG5cclxuICBvbihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbikge1xyXG4gICAgaWYgKCF0aGlzLl9ldmVudHNbbmFtZV0pIHtcclxuICAgICAgdGhpcy5fZXZlbnRzW25hbWVdID0gW11cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9ldmVudHNbbmFtZV0ucHVzaChsaXN0ZW5lcilcclxuICB9XHJcblxyXG4gIHJlbW92ZUxpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXJUb1JlbW92ZTogRnVuY3Rpb24pIHtcclxuICAgIGlmICghdGhpcy5fZXZlbnRzW25hbWVdKSByZXR1cm5cclxuXHJcbiAgICBjb25zdCBmaWx0ZXJMaXN0ZW5lcnMgPSAobGlzdGVuZXI6IEZ1bmN0aW9uKSA9PiBsaXN0ZW5lciAhPT0gbGlzdGVuZXJUb1JlbW92ZVxyXG5cclxuICAgIHRoaXMuX2V2ZW50c1tuYW1lXSA9IHRoaXMuX2V2ZW50c1tuYW1lXS5maWx0ZXIoZmlsdGVyTGlzdGVuZXJzKVxyXG4gIH1cclxuXHJcbiAgZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSkge1xyXG4gICAgaWYgKCF0aGlzLl9ldmVudHNbbmFtZV0pIHJldHVyblxyXG5cclxuICAgIGNvbnN0IGZpcmVDYWxsYmFja3MgPSAoY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGNhbGxiYWNrKC4uLmFyZ3MpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZXZlbnRzW25hbWVdLmZvckVhY2goZmlyZUNhbGxiYWNrcylcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLl9ldmVudHMgPSB7fVxyXG4gIH1cclxufVxyXG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsZGk4eEFRSUFBQUJGZUdsbU9rbHRZV2RsU0dsemRHOXllUUJ6ZEhKcGJtY0FnUUFBQUc5cGFXOTBiMjlzSUUxcGJHUXVjRzVuSUMxeVpYTnBlbVVnTVRBeU5IZzFNVElnTFc4Z1RXbHNaQzFvWVd4bUxtVjRjZ3B2YVdsdmRHOXZiQ0JOYVd4a0xXaGhiR1l1WlhoeUlDMHRZMjl0Y0hKbGMzTnBiMjRnWkhkaFlpQXRMVzV2TFdOc2IySmlaWElnTFc4Z1RXbHNaQzFqYjIxd2NtVnpjMlZrTG1WNGNsTnZablIzWVhKbEFITjBjbWx1WndCaUFBQUFUM0JsYmtsdFlXZGxTVThnTWk0eExqRXlJRG9nYjJscGIzUnZiMndnVFdsc1pDMW9ZV3htTG1WNGNpQXRMV052YlhCeVpYTnphVzl1SUdSM1lXSWdMUzF1YnkxamJHOWlZbVZ5SUMxdklFMXBiR1F0WTI5dGNISmxjM05sWkM1bGVISmpZWEJFWVhSbEFITjBjbWx1WndBVEFBQUFNakF5TkRvd05Ub3dNaUF5TXpvek5Eb3dOV05vWVc1dVpXeHpBR05vYkdsemRBQTNBQUFBUWdBQ0FBQUFBQUFBQUFFQUFBQUJBQUFBUndBQ0FBQUFBQUFBQUFFQUFBQUJBQUFBVWdBQ0FBQUFBQUFBQUFFQUFBQUJBQUFBQUdOb2NtOXRZWFJwWTJsMGFXVnpBR05vY205dFlYUnBZMmwwYVdWekFDQUFBQUQwMWlNL0YvZW9QaG1hbVQ3U21Say9JNW9aUHFHL2RUMDNHcUErc0hLb1BtTnZiWEJ5WlhOemFXOXVBR052YlhCeVpYTnphVzl1QUFFQUFBQUpaR0YwWVZkcGJtUnZkd0JpYjNneWFRQVFBQUFBQUFBQUFBQUFBQUQvQXdBQS93RUFBR1JwYzNCc1lYbFhhVzVrYjNjQVltOTRNbWtBRUFBQUFBQUFBQUFBQUFBQS93TUFBUDhCQUFCa2QyRkRiMjF3Y21WemMybHZia3hsZG1Wc0FHWnNiMkYwQUFRQUFBQUFBRFJDYkdsdVpVOXlaR1Z5QUd4cGJtVlBjbVJsY2dBQkFBQUFBSEJwZUdWc1FYTndaV04wVW1GMGFXOEFabXh2WVhRQUJBQUFBQUFBZ0Q5elkzSmxaVzVYYVc1a2IzZERaVzUwWlhJQWRqSm1BQWdBQUFBQUFBQUFBQUFBQUhOamNtVmxibGRwYm1SdmQxZHBaSFJvQUdac2IyRjBBQVFBQUFBQUFJQS9BT2NDQUFBQUFBQUFCOTBDQUFBQUFBQUFBQUFBR05vQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVBtbEFnQUFBQUFBdURNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ1lVQU1BQUFBQUFBQXdBQUFBQUFBQUFBQUFBQUFBQUFBT0FGSUFGQUpIQUNRQ1FnQTBBZ0FBQUFBcC93QUFQUlFBQUQrTkZBQUFBQUFBRS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3JoZi8vLy8vLy8rb2YvLy85RFAvLy8wRS8rU2Yva2YvNU8vK1JmM2tyOTVIL2VULzNrZjk1TC9lU2Yzay85NUUvT1MvemtqODVPL09SL3prejg1Si9PVC96a2I4NU0vT1NmemxEODVJL09UUHprcjg1Ui9PUnZ4a3o4WksvT1NQeGt6OFpLL0dVUHhrajhaTi9HU3Z4bEg4WkovR1RmeGt2OFpSL0dSL3hrMzhaSy9HVWZ4a244Wk4vR1MveGxIOFpKL0dUZnhrcjhaUy9HU3Z4azM4WkwvR1VmeGtqOEpPL0NTL3hrcjhKTi9DVFB4a244Sk8vQ1Mvd2xMOEpLL0NUdndrejhKUy9DU1B3azM4Sk0vQ1V2d2tyOEpPL0NUUHhrcjhKTy9DUy93bEw4SkwvQ1Qvd2t6OFpKL0NUdndrejhKUy9DUy93azc4Sk0vR1N2d2s3OEpNL0dTL3drNzhKTi9HU2Z3ay84Sk0vQ1V2d2t2OEpPL0NUUHhrcjhKTy9DVGZ4a3o4SlAvQ1R2eGtuOEJPL0FUUHdrdjhCUC9BVFB3a3I4Qk8vQVRmd2t6OEJQL0FUZndrcjhCTy9BVGZ3a3o4QlAvQVRmd2t2OEJQL0FUZndrejhCUS9BVHZ3a3I4QlMvQVRmd2t6OEJSL0FUdndrdjhCTy9BVGZ3a3o4QlEvQVR2d2t2OEJQL0FUZndrejhCTy9BVHZ3a3o4QlIvQVRmd2t6OEJQL0FUdndrcjhCUC9BVHZ3Rkw4Qk0vQVQvd0U3OEpML0FUL3dFNzhKTi9BVVB3RTc4SkwvQVVQd0U3OEJSL0FUZndFLzhCTy9DVFB3RkQ4Qk8vQ1RQd0ZEOEJPL0FVdndFdjhCUS9BVGZ3azM4QlEvQVR2d2t6OEJRL0FUdndrMzhCUS9BVHZ3a3Y4QlMvQVR2d2szOEJRL0FUdndrejhCUS9BVHZ3azM4QlAvQVR2d2t2eEh3NzhCTjhROFAvQVRQd0U3OEJOOFA4UC9BVFBFZkR2d0UzeEh3LzhCTjhQOE8vQVR2RVBEL3dFdnhIdzc4Qk44UThQL0FUZkVmRHZ3RTd4THcvOEJNOFM4UC9BVGZFUER2d0UzOEJPL0FUdkVQRHZ3RXo4Qk8vQVR2RWZEL0V2RGZ3RS84Qk44UjhQL0FUUEVQRHZFdkRmRVBFUHdFM3hMdzc4Qk44UzhQL0FUUEVQRC93RTd4THhEOEJOOFI4UC9BVGZFdkQvd0V6eEx4TDhCTzhTOFAvQVRmRWZEdndFN3hIeEQ4Qk0vQVR2d0UzOEJQL0FUZkV2RC93RTd4RHhIOEJOOFM4UC9BVHZ3RS84Qk84UzhQL0FUdndFLzhCTjhSOE8vQVR2d0UvOEJPL0FUL3dFN3hEdy84Qk44UzhSL0FUdkV2RC93RTd4SHcvOEJQL0FVUHdFM3hMeEQ4Qk84UjhRL0FUZkV2RWZ3RTd4RHhEOEJOOFA4US9BVC9FZkVQd0U3eEh4SDhCUDhSOFMvQVRQRXZEL3dFN3hMeEQ4Qk8vQVVQd0U3OEJQL0FUZndGRDhCTzhSOFAvQVR2RXZFUHdFL3hMdy84Qk5BU0FROE9BUStPQVJBUThQQVJBUzhPQVJBUDhPQVNBUThPQVFBTzhQOFI4TjhPOFAvQVRnRWdFdkR3RVFFUERnRVFFZkRnRVFFdkRnRVFEL0QvRVBEZ0VnRWZEd0VRRXZEdkV2RC9FUER2RVBEZ0VnRWZEZ0VRRVBEd0VnRHdFZ0R2RVBFQUVnRWZEd0VnRC9Ed0VBRVBEZ0VnRWZEd0VmanZFZkV2RC9EdkVmRHdFUUV2RHZFZkVBRWdFUERRRWdEL0R3RXZqd0VRRC9Ed0VRRC9EdkVQRUFFUUVmRC9EL0R3RVFFZkR2RVBFQUVRRWZEd0VRRUFFZ0VmRVBEd0VnRC9FQUVnRVBEL0QvRC93RTRCQUE4QklCSDVJQkFCRUJEeER4THc4QklBL3hBQklCSHc4QklCRHcveER3OEJJQkh3OEJFQkh3OEJMNC94THc0QklCRHcveEh3L3hMdzRCRDQ3eER3OEJJQkh3L3hMdzhCRUJEdzRCQUJEdzhCSUJMdzhCRUJIeElCSDQ3eEh3L3hEdzRCSUJBQklCRHhEdzRCRUEvdzhCSUJEdzhCSUJIdzhCSUJJQklBN3hEdzhCSUJIeEFCSUEvdzhCRUJMdy94SHhEeEh3OEJJQkh4SUJMNC94SHhEeEh4QUJJQkh4SHhMdzRCSUJEdzhCRUJMdy94RHcveEh3L3hMeEFCSUJMdy94RHhFQkQ1RHhENUlCSHhJQklCRHhFQkw0OEJJQkh3LzhCUUFTQVI4UjhROFBBU0FTOFE4UThROFI4UzhSOFBBU0FROFFBU0FTOFE4Uy9BVVBEd0VnRVBFUUVnRXZFQUVnRVBFUUV2a1BFZkR3RWdFZkVRRWdFdkV2RXZFQUVnRVBFQUVBRVFFUUVBRWdFUUVRRUFFUUVnRWdFQUVnRUFFa2pnRUFFUUVRRHdFQUVQRHdFZ0R3RWtqZ0R3RHdFUEVnRVFFQUR3RHdFdkVQd0ZBQkFCTHhJQkVCRHhIeEx4RUJBQThCSUJBQklCSHhBQkw0OEJFQklCSUJBQkVCRHhFQklCSUJFQkR4SUJGSkVBOEJEeEFCQUJIdzhCSUJFQkVBOEJBQkh3OEJBQTRCSUJFQkFCTHc0QklCQUJFQkFCSUJJQkVBOEJJQkFCSUJFQkFCQUJJQkFCRUJFQkFCQUJJQkh4QUJFQkFCSUJFQkx4SUE4QkVCTHhFQkVCTHhEeEh3OEJJQkh4QUJMNUVCQUJMeER4RUJJQkR4RUJIeEh4RUJBQkx4RUJJQkVCSHhJQkR4RUJBQklCSHhFQkx4SUJFQkVCSUJMeEVCSUJJQkFCSUJIeEg4QlIvQTBRRWZFdkVRRXZFUUV2RWZFUEVRRWdFQUVRRVFFZ0V2RWdFZndGSUJBQklCSHhFQkg1SDVJQkh4SUJIOEhSOFJBU0FSOFE4UUFRQVM4UThSQVNBUUFSQVFBU0FTQVJBUkFSQVNBUkFTQVNBUzhTOFJBU0FSOFM4UzhRQVNBUjhQQVJBUThSQVM4U0FTL0FVZ0VmVWtnRWdFZ0VnRWdFZ0VnRWdFZkV2RWdFZkV2RXZrdkVmd0ZJQkQ4QlNBUUFRK1EvQVVnRWdFdkVra3ZrdkV2RWZFdkVQa2dFUUVnRWdFZ0VQd0ZJQklCSHhFQklCTHhJQklCRHhFQklCSUJMeEg4RFNBUjhTL0FVdmtmd2xJQkFCSUJMNUVCTDVMeEx4RHhMOEZTL0EwZ0V2d0ZENUlCSUJMeEw4RFNBU0FTOFJBUkFTOFFBUkFTK1NBU0FTK1NBUkFTL0FVZ0VnRVBFa2dFa2trZ0VrZ0VmVXZFVWtlMGtVa1Vra3UwUUVVa3ZrZlVnRVFFdTBnRWtBRWtmd0JIeEVCSUJGSUJKSklCSkpKRklCTDFMdElCRkpGTDFJQkVCSUJJQkh4SkZFQkZGSHhGSkx0THRKSUJIOEJSN1NTOFNTUzdTUzdTQVNBUitTQVI3U1FTUytSL0FFZTBVZTBnRXZFa2ZFa1VrVWtnRWdFdkVlMFV1MHZ3QkwxSkx0THRMOENTUzlTUy9BRU8wa2trZ0Vra2tnRWt2VWt1MHZ3Rkx0Skx0SHRMeEpMOERTUUFTUy9BMHUwUUVrdTBrdndaTDhCUzlTQVM3UlJSU1FBU0FTQVNTU1NTQVJTQVNBU1NSN1NBUVJTUzhTQVJTUy9BRWZ3QkpIdEpJQkpKSkpKTDFMdEpKTDFKRklCSkwxTHRKTDFJQkpJQklCSkpMOEFTL0FVVXUwZ0Vmd0ZKSklCSkw1TDVKSkx4SkVCTDFMeEh0THhKSkw4QVM4UjhTL0FFa2tlMGtmd0JKTHhMMUpKSkx4THhMdEx0THhMNUg4RlMvQVVrdkV2d0JIdElCTDVMeEw4QlNBU1M3U1NTOVMvQkV2d05IeEpMMUlCTDhCUlM5U0FSK1MrUzhTL0NFZ0V2RWdFdndOSkpMMUwxTDhCUzlTL0FVdkV2d0pMOEFTN1I4UkFTN1NTUjlTL0VrdkV2a3Z3QklCSUJMOEVTN1MvQVV2VXZ4Ukx0THRMeEw4RFM5U0FTOFMvQTB2VWZFa3ZFdkVrdTB2d0JMOEFTOVM3U0FTU0FSUy9BRWZra3UwdndKSUJKSkw1SUJKRkw1TDhDU1NBUy9DRXZ3RkpMMUpMOEVTU1NTK1MvQUV1MHUwdndaTDhIU0FTQVMvQVV1MGdFdnhGSHhMMUx0SUJMOE1TL0RFdndaSDFMOEFTL0FFdndCTDhBUy9DVXZ3ZEw4RFM5Uy9Ba3Z5eEx0SUJBQkw4SlM5Ui9BRXZFUUV2a2dFdTB2a3Z3QklCSDhCUy9FMHUwa3UwZ0VrZ0V2RVFFZnc5Skx0TDhDU1MvRFVRRXZ3aEg4SlMvRUV1MHZ3Rkw4NVMvQkV2MUpMOEVTN1MvR1V2eEpMOGZTL0RrdnhWTDhjUzhTL0FFdndsSUJMOEhTUy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vOU9FLy8vLy8vLy82aC8vLy8wTi8vLy9RVC81Si8rUi8vazMvNUYvZVN2M2tmOTVQL2VSdjNrdjk1SS9lVHYza1Q4NUwvT1NQems3ODVIL09TL3prbjg1UC9PUnZ6a3o4NUovT1QvemtqODVNL09TdnpsRDg1Ry9HVFB4a244WlAvR1NQeGt6OFpLL0dVdnhrajhaTi9HU3Z4bEg4WkovR1RmeGt2OFpRL0dSL3hrMzhaSy9HVVB4a244Wk4vR1MveGsvOFpKL0dUZnhrdjg1Sy9HVHZ4a3Y4WlMvR1NQd2szOEpML0NVUHdrcjhKTy9DVFB3bEg4SkovQ1Rmd2t2OEpTL0NTdndrNzhKTS9HU1B3azM4SkwvR1N2d2s3OEpNL0NVdndrcjhKTy9DUy94a3Y4Sk8vQ1RQd2xMOEpKL0NUdndrejhKUy9DUy93azc4Sk0vR1N2d2s3OEpNL0dTL3drLzhKTi9HU3Z3ay84Sk0vR1Mvd2svOEpOL0NVdndrcjhKUC9DVFB4a3o4SlEvQ1RmeGtuOEJQL0FUUHdGTDhCTC9BVC93RTM4QlMvQVN2d0UvOEJOL0NUUHdFLzhCTi9BVXZ3RXI4Qk8vQVRmd2t6OEJQL0FUZndrdjhCUC9BVFB3a3o4QlAvQVRmd2tyOEJRL0FUZndrejhCTy9BVHZ3Rkw4QkwvQVQvd0UzOEpNL0FVUHdFLzhKTC9BVC93RTM4QlMvQVRQd0UvOEJPL0NTL3dGRDhCTi9DVFB3RkQ4Qk8vQ1N2d0UvOEJOL0NUUHdFLzhCTi9BVXZ3RXo4QlAvQVRmd2szOEJSL0FUdndrdjhCUS9BVGZ3a3o4QlEvQVR2d2t6OEJTL0FUdndrMzhCUC9BVHZ3Rkw4QkwvQVVmd0U3OEpNL0FVZndFLzhKTS9BVVB3RTc4Sk4vQVVQd0U3OEpML0FVZndFNzhKTi9BVVB3RTc4Sk0vQVVmd0U3OEpOL0FVUHdFNzhKTThSOE84UzhNOFM4UThTOE04UDhPOFM4TzhTOFAvQVRQRXZEdndFM3hEdy84Qk04UThPL0FUdkVmRC93RXZ4RHc3OEJOOFI4UC9BVGZEL0R2d0UzeER4RDhCTThSOE8vQVRmRXZEdndFM3cvdzc4Qk84UDhQL0FUUEVQRHZFdkRmRVBEL3dFMzhCUDhTOE84UzhRL0FUUEV2RHZ3RTN4RHcvOEJOOFM4UC9BVHZFdkVQd0V6eEh3NzhCTzhSOFEvQVRmRVBEdndFNzhCUThTOE04UzhQL0FUdndFLzhCTjhROFAvQVR2RVBFZkV2RFBFZkQvd0U3OEJRL0FUZkV2RC9FdkR2RVBFZndFenhMdy84Qk84UzhRL0FUdkV2RC93RTd4THhEOEJNOFM4Ty9BVC9FZkVQd0UzeEx4RDhCUC9BVWZ3RTd4SHhEOEJROFM4UC9BVGZ3RS84QlA4UzhRL0FUZkV2RVB3RTc4QlAvQVR2d0ZEOEJQL0FVZndFM3hMdy84Qk84UjhQL0FUdkV2RC93RS94SHhEOEJOOFI4UC9BVHZ3Rkg4Qk4vQVQvRXZEdkV2RWZ3RTc4QlEvQVR2RWZFUHdFNzhCUC9BVC9FdkVQd0U0QkFBL3c4QkVBL3c0QkFCRHc4QklCTHcwQkFCSHc4QklCTHc0QklCRHcveER3NEJJQkR3OEJMNDRCQUJIdzd3L3c0QklCQUJJQS94RHc0QklBL3c4QkFCTHc0QklCRHc0QklCSHc3eER3OEJFQkx3MEJJQkh3OEJFQS93L3hEeEQ4Qk9BUkFROFBBU0FROFA4UThQQVJBUDhPQVMrUDhSOFBBU0FQOFA4UzhPQVFBUThPQVMrUEFTQVE4UC9BVGdFZ0VQRHZFdkR3RVFFUEVBRVFEL0QvRVBEd0V2amdFZ0VmRHdFZmp3RWdFdkVBRWdFdkVQRXZFQUVnRXZEZ0VnRWZFZkV2RGdFZ0VmRWZFZkQvRXZFUEV2RHdFZ0VQRHdFUUVmRHZEL0QvRXZEL0VQRC9FZkRnRVFEL0R3RWdFdkR2RXZFQUVnRXZEL3dFL3hMdzhCSUEveEFCSUJMdy93L3hEeEh3L3hMNUlCRHc0QklCRDhCUzhQQVNBUThSOFM4UDhROFFBUkFROFFBU0FTOFA4UjhPQVJBUzhRQVNBUzhQOFM4UzhTOFBBUkFROFAvQVVnRWdFUEVBRVFFdkQvRWZFQUVnRWZEL0V2RC9FZkR2RXZFUEVmRVBFZndGTHc0QkVCSHhEeEx4SHhIeER4SHcveEx4RDhCUEFTQVM4UUFTQVM4UDhSOFE4UzhQL0JVdkVRRVFFdkVmd0ZIeEx4SHhMdzhCTDVFQklCTHcveEx4TDhCUDhROFFBUytQQVNBUjhSOFE4UjhTOFJBUytRQVNBUThRQVNBUThRL0FVZndGTHhIeEFCSDQveEh3OEJMNC94RUJJQkR4SUJJQS84QlBBUytQQVFBUThPQVNBUkFTQVBBU0FROFFBUUFTOFA4UjhRQVJBUThTQVFBU0FTQVIrU0FRQVNBUThSQVFBUUFTQVFBUUFROFJBUkFTOFIrU0FRQVJBUUFTQVBBUThSQVBBUUFTOFBBUUFTQVNBUUFTQVNBU0FTK1JBUThTQVNBU0FTQVI4U0FSQVNBU0FTQVNBU0FSQVE4U0FRQVErUkFQQVNBUUFTQVFBUkFROFJBUkFTOFFBUThSQVM4UjhTQVIrUkFTQVM4UDhRQVJBU0FSQVFBU0FTQVNBUzhTQVI4U0FSQVA4UkFTQVNBUThTQVFBUkFTQVFBUUFTQVJBUEFSQVJBU0FTL0FVQUVRRWZFUEV2RVFFZ0VRRWdFUUVma2ZrdkVRRWZrZ0V2d0ZIeEVBL3hFQkFCTDVMOEJSK1NBU0FSQVIvRFQvRXZ3Rkx4TDhCU0FTQVNBUUFQL0EwUUVmRVFFZ0VmRXZ3RkVCRUJMeEx4THhJQklCTHhFQkg4QlFBUjhSOFEvQVVma1BrZ0VnRVFFdmt2RC9FUEVBRVBFZ0VnRWdFUUV2a3Z3Tkh4SUJIeEVCTHhJQkFCSUJMNUlCTDhEU0FSQVMrUjhRK1NBUzhTL0FVdndGRDhIU0FSL0FVdmtmRXZFZndWSUJEOEZTOFJBUytTOFM4UzhTQVM4U0FTL0FVZ0VRRXZ3Tkg4RFM4UytROFNBU0FSK1M4U0FTQVIrUkFSK1NBUzhTOFI4UzhTOFM4Uy9BVXZFdkV2d05FQklCSUJIOEJTOFIrU0FTOFM4UVM4UTlTQVM4U1M4UTdTN1JTL0FFZ0V2d0JJQklCSUJJQklCTDVKRUJIdElCSUJKTHhJQkpMeEpKTDhFU1JSOFMvQkVnRWtmVXZFQUV1MGZ3UklCTDhBUStTN1I3UzdTQVNBU1M3U1MvQUV2a2dFZ0VnRWt2VWUwdTBma2dFVXZFdndkSUJKSUJKSkpMOEFTOVNTQVI4UytTOFM5U0FTOVNBUlMrU0FTU0FSUzdTOVM4UzdTQVNTL0FVa2Z3Wkx0SUJKTHhMOEFTN1M3U1MvQWt2d3BMOENTQVNBUy9BVXZFdndWSUJMeElCSkx4Skx4SUJIOENTOFM4UzdTOFM5Uy9BRWZ3cEVCSUJKSDhHUy9BRWdFdTBrdlV2RXZVZmt2RXZFdndSTDhEUzlTN1IvRVV2d0pMMUx0TDhCUzdTL0Iwa1VVZ0VrdndKSUJGSUJMdEg4QlM4Uy9BRXZ3Wkw4RVNBU1M5Uy9Ba3ZFVXZ3MUpMOENTL0FrdkVrdTB1MHZ3QkVCTHRJQkw1TDhKU0FTL0JFa1V2d0pMOEJTOVMvQ1VrUUV2d0pMdElCTDhCUytTK1MvQVV1MGtrdlV1MGt2d05JQklCSUJMOEFTN1MvRGt1MHZrdkVrdTB2d3hMeEVCRklCTDhBUy9Ba3ZFZ0V2VWdFa2dFa3ZFdndOTHRMMUlCTHRMOERTOVNTQVNBUytTL0IwdTB1MHZrdndWTDhCU1M4Uy9PRXZ3Wkx0TDhSUjlTL0lrdngxTDlBUy9Xa3Z3Qkw4UVMvRTB1MHZ6QkwxTDg2Uy9FVXZ6Wkw4MFMvVVV2d2hMOTJTL0drdnc5TDlIUy9CVXZ5MUw4RVMrUy9EVXZ3Skx0THhMOEtTL1RrdndsTDhEUy9aMHZ4NUwvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy92QkFCUmh4eUNDQ0NTU1NTalRUVGpUampqVGp6MFVFRWtmRXZVa2cwR0VIMU5rY0RQWlM0N0ZkZTRtRXcrZmIwclo4NUx2MFQ0ZjdzYk1sQ1U4cjVUUVZ3MHJiODduNEV6S3JtOE1qUjJIYUQ1Q3J3VncwOTNmbExueUJ4QS9uS2pJbXVQSCs1TkJYdUh1WjdrdWZvY1ErSUZRTGVhbnIva21RVnBpdG1mT2E3OUU2TEtuUndGdkp4Ni81VEpsY05QY3o4UzY3OUFTa0xHbFFsRFU5US9Pd1Z3dzkzUG5kK1FPQ1BTckNRYW5xTDVUUVY3cDd2eWx6OURiRmVRWFJTa2hvOVJlNG1RVnB2bExuNk5aeVFXOUdacHg0aStTWkJXbStVdWZvTHFIcVFXMG95azg5djVoQldtSzJaOGNWNStqU0tsQTNwSGFQbmVJL2xOREZVQ3RtZk9aK2lUSFJBM294RTV4NGp6NTNWZS9LWFAwU0JzZ2IxZGs5UjZXWGZPNnJ3clpuenUrbFhKcDl0S3QxSGw2V1hmSk1USzg5eVZMKzJuUU43Y0R6RVh5bVRLOCtVdWZJdllmbkp4OHVseDAvM0pkVjc4cGMrSkJWMVI3WHp1L0tYZmlnVm42K1VwTVY3ODRsK2NRSzNmS1hmbDN4UWZLWGZQSGZPRUZXNTN6bXE4K1hIVHZsTFNzLzhkVjc4bi9sTFNzLzhkVjU4bi9sTFRsVHZuTlY3OGMrZHBXNzV6VmUvRkw4N1N0M3ptcTkrS1g1MmxidmNsMVh2eTdQbExTbytWNjkycGxlZkZLcXo1U2hqYStTWnYvS1VNYlh5VE4vM2E1VmhYZCthVE1WWi95bFBxbk9seDVYenFaWG54Uy9LVU1iWHlUTi81U2hqYStTWnYvS1UrcVN1bkR4MzVxWlh2eHo1UzBycHg2NzNKVXl2ZmlsK2RwV2YrVXFaWHZ4ejUybFovNVNwbGUvSFBuYVZuL25OVjc4dXpQeExTcDN6bXE4OXp2bEtmK09xOCtPZk9VR01kOGRWNTh1VjU4NVh6bXE4K1hTNzVTblcrNUtsREdaOHVjcmQ4NmRKYytVdUJqTStUN3ZuVHBMbnlsd01abnlmZDg2ZEpjL01TaGpNK1hPK2NWdTM1Uzc4dU9uZktVNjByTytVcWI1YzVYWHlsT3RLenZsS20rWE9WMTg2ZGI4NXZ5NXl0M3pwMXZ6bS9MbkszZk9uU1hQbk5WNThuM0szZk9uU1hQbk5WNThuM0szZk9uU1hQbk5WNThuM0szZk9PVjVPSGp2bk5WNTh1Y3JyNXh3WXl2bk5WNTh1UHE2K2NjR01yNXpWZWZMajZ1dm5IQmpIZk9hcno1YzVYWDVLQldmK2MxWHZ5Zk9uZkZBcnI1elZlL0o5eXQzeFFLNitjMVh2eWZjcmQ4NVNwenBkODVxdmZsMzVLQldmK1V1cTgrVDUwNzRvRmRmT2FyMzVQdVZ1K0tCWFh6bXE5K1Q3bGJ2bktWT2RMdm5OVjc4dStMbGVGYXZsTHF2UGx6bGRmT09ER1Y4NXF2UGx4OVhYempneGxmT2FyejVjZlYxODQ1WGt1UEsrYzFYbnk1eXV2blRyZm5OK1hPVnUrZE9rdWZPYXJ6NVB1VnUrZE9rdWZPYXJ6NVB1VnUrZE9rdWZPYXJ6NVB1VnUrY2x6YnQrVXUrZDQ3NVNuV2xaM3lsVGZMbks2K1VwMXBXZDhwVTN5NXl1dmxLZGI4cGQrWE9WMTg2ZGI4NXZ5NXl0M3pwMGx6NXpWZWZKOXl0M3pwMGx6NXpWZWZKOXl0M3pwMGx6NXpWZWZMbkszZktXbGJ2anF2ZmM3NTJsWi80NnIzNDU4N1NzLzhkVjc4Yy9FdEszZTdOY3F6OGQrSlhLbkZkM3ptcTkvNVNoamErYzFYcFd6L2xLR05yNXpWZWxiUCtVcmxXRmQzem1xOS9JNThwYWNxUC9PcGxlL0ZMOHBReHRmSk0zL2xLR05yNUptLzdrcDlWa2NQSGZtNnJ6NDU4YVZueXM3NTNWZWxiYytPL0dsWjhyTytkMVhoVzNmbk0rTkt6NVdkODdxdkN0dS9PWjg1U3MrVm5mT2t4WHBXejV6UG5hVnU5MmFyMzQ1ODdTdDN6bXE5K0tYNTJsYnZuTlY3OFV2enRLei96bXE5K09mT0VGVzc1elZlZkx2bExTdXZqcXZmay84NVN0M3gxWHZ5ZitjUUszTytjMzVkOFVIeWwzNDU3cFFLbkh6LzRsMVhuem1PK0tCWFZIdGZPNnJ6NXpQbDVNU3FpQ2wwOGY4NmxkODdMdnEwNU1icTRKVHhGbnlURXl2ZmxLbDl3dmsxSzJmVzVLZHV2Zm5VeXZmbk4ra2pTWnVpOVJoNGozNVRKbGVmS1hmUG1Lbkc2RWd5bE8zSTkvTjFYdnlsMVhuME5JNnBtNkVpYTZlSS9uZFZ3MzV6M0JxRlBHM0RLMXA1ZnUxTXIzRDNNK2R6NkRYSGhNM1JpVHoxRjg2VEZXYmg3bnlsejZDVkN2MXR3Wnc0bnFMOEprRmU0ZTVuem1lOEpZUFVjbWhuTlk0ZEl2bUVGYWJEM1BuVXYwQytEM3JvdUdjbkhxTDVKa0ZjTStjUy9RbkI4MXR4a3llditVMEZjTTkyNW52RGhEK3ljbHdaN011TzMvSk1ncjNEM2ZuTStRT0lIN2lveVp3OGY4a3lDdE5oN3UvS1hQY0RDaC9xbkJucUQydmxOQldtdzkzUHhMbm53WVlXYVZVWkUwOXI1VFFWd0srL0tYUGtEakQ3SElqT29iY3JyODNjZEhOK2NuRzg5d0UyS1ZZYWJEZXExeUJkOGMvTS9BUmFway9rUkx3UFNKL3prdThjQVJZcGU1c2twOVBGc0xOZjg1NW1CTXlsQXFKTUQwaUVEWCs3ek1CVGdwMERrc1EwNEhwRUlGMy82Z0JUSlFGN015UTBrNTZYZk9mT2VUUVJHT2FDY2xLSlZPZWtUNXo1ejJRQVNUZEJPeEdtQjZSQ0JkODU4NTdRRXNqa2dWRFRBOVcvNXoyUUpXTm51VFRnYUVENTRzUUx2blBuUE5RUWcwK2RpWlFQVmlCZDg1ODVMdmFCQlJxK2RuQm5nNCs0NldJRjMvT2ViQVNPVGtNN0VNNU1lcmZPZjVzQi9XVU03RVp0UFMzLzgyQVRzeWhkc1RIWEhoYi8rSG9EaEtFTXBvakpwNlcvT2Y0VmtHNzVEbVJJK09QTDkzK2JnMnBtZ25ZaEk5bzh2L3p4VGhUMkVMdGlrMmp4Rjg1N3ZISUtZb1JTbW1pK0ZUU3QxYi8rYmcwSnRjN0tBdE5LbHgzdi81c0U4S1MwN0tDalIwdVY0Zy81ejJnT0lVMXN5VDc5MDd4L3lsL3lhU2poYWNtQkQzWmNycDN6bnpuOE1KT3RMam1DMU8rWEs4cjV6NXo1cEw4cGZsTDgwbCtjZDhwWGZOSmZuSGZLVjM1VWNpNzVTL0tYNXBMOHBmbEs3NXBMOHBYZktWM3pTWDVTdStVcnZ5c25JdStVdnVTL05KZm5IZktWM3pTWDVTL0tWM3pTWDVTdStVcnZ5bzVGM3lsOXlYNXBMODQ3NVN1K2FTL09PK1Vydmsvbnpuem40ZnljK1VzNTg1NENTNFRKL1BuUG5QQVNYRlczZUFrdUY0NlhaN3ZkLy84dXhXNzV6NXo1cEtyZDg0NzVTdStheWMrYytVdnpTWDV4M3lsZDgwbCtjZDhwWGZOSmZuSGZLVjM1V1RrWGZLWDNKZm1rdnpqdmxLNzVwTDg0NzVTdSthU3EzZk9mT08vS3o1ejVTL0ovRmJ2blBuUC8vLy9rL2s1ODU4NTh1eFc3NXo1ei8vLy84ZEx2QVNYRjhpNzV5YzhCSmNLbXNuUGxMOHBmbWtxdDN6anZsSzc1cEw4NDc1U3UrYVMvT08rVXJ2eW81RjN5bFY1OHBmbWt2eWwrVXJ2ay9qdmxLNzV6NVA1OHBYZk9lbGRIUGNsOTJmTlo4cFhmS1YzeldmS1g1MzVyUGxMOHBYZmxLM2ZPcTg5eVg1cEw4cFhmS1YzelNYNVMvS1gwSXdFNHp4emtSYW5oS1ZYVmYvaGtoS0RnUEZLNlhyYlU2cngzeWw5M3JqZVUyVXRTbGZ0VGl0ei9kbnlsOHZDZUZJbTVVcG5kazRyZFgvNWdGR05qU2FsTVdtbW5lVHYvNWVGTVVNWlVwUytHenF2SzMzZjRrQXA3RERxaWsxTE9IU0gvOE0wRzI1UEtDSkcwOXYvOFlnRTE4bW1vakp1enAxZi81ZURoR2llYXlSbDA5djNmNWVEa0UxaWFpWTdMc09yLy9Md1A2eXhOUkVucDZqK2MveThDUnpXQitza2thZW8vLzF3UVVPS2FhbHd6cHNQRnY5eDFubHdJUWFUdUlNdU1reDZ0ODU3bGVlc0JLeHNtbEJMZ2s4RXA0c1FMdm5Qbkk1NWNCTFpzbmNmaU5FRDFiNXlYZk9TN3lJQkxodU9Db1NzRDBpRURYem50dThoZ2lNYzB6WjhGeFRucEUrYy9Qc0JUUlFUVFdTQnUwK0hoZC8rUWdSUUtjbU9iRFRnZWx4QXUrWGUyNzBRRXpDbkppb2t3bkRzdUlHditjOTRJc1VwblJjR213ZlBGc0xOZi91QkZvNlM1MDRHbkREd3V6NXljK2NuUGtDYVZNMDJKZGh1bFpkaFpkL3k3NEFCaWlDT1ZBY1EzaTdGWXk4V2I4KzI3NVArWmdWb1A2Q2NpREJtNTZNdkZtL2wzeWY5a0Jmb2dhQ2NuQVlJMlBTUHhadi84MkFySVdpR2RuUW1SUGNlRWZpemYvNHB3RjVoWlVMdG5RNEduSGVFYUJadi9sMHU4ZEFGMWl6dVlUb2I3Vlk0NkkwQ3pmNStlT29BVkErQ1BkQ2RDWG1wOXpqcEpBczM4YytYVG5qc0F0WWV5MXliTkRkSjFUUjBrZ1diLy9CNFFBbGcrbHBoT2hMR1QwWXRMTi84dThIaUFwVWVWcGhPaHRLRDB3MHMzL3k3eFdnVWFIc1E1aE9rczBQeTQ2TDhMTi84dThWb0ZDRHNHVEtmTkJkdWRMam92MHMxLzQ3eFhBVHVPcU4wSEpRbEhPeHgwdVFOZjh1OGVRSnFIUmJFOHBRMDA1NnVRTHYveFhnN0JRUnpCMkNXZzZYSFJFSUd2L3lvQks1dGN3bkJvZzZYSFMzKzVMNHJ3Sk9hREp4aUl6cG5TNDZXSUYzLzRmQUgrWnVVOFF6a3grWEhTUC84ZVFQcW91VThUSFQ3bkhWLy9oN2dlN3JsUE9FZll1T3IvNXp4WGdSaXdpeFBGSnJwUG5WKzZMdm5QSGdHcjVDbFRuNlNRMlhLM1gvK1VnYTRWYkpNZ2dMZ1c5bnRWdWV0bWYvazBENmc5UlJTcFpSa2xRK3RWYkJIRDVkT2UzbnlDRmhicWNuSUJJMUR6OEZWUEx0LzV6eTBFV2o2MXM3d2tWS1k4dm5sZHp2L1BMZ0p6Rml4SitkRW9wMDhSS1BiZDhVdmtNQlZvUE5DVDhwUTBUZlp4WGlMdmNkTytPZVdnS3hGY09Eajg0R2tiWWVJKy81ZDVDQkdnOHBuVkVOUnFPSFNQdi8wSUkyQjQ1ZExwRXdhbnEzZi9ud1J1UEZONkpnbkhxM2U3LzBIYkhqWTRmQ1VNbnEzZi9wd1JzUERsUW1EVTlXNy84ekJHZzhvSEpZalUwNDhSOS8rb0FWa0s4WHBTeERTSjdqeEgzeHo1ZDdJQU41VWZLV1hEUWIwNCtkSXUvL2FBbkVlcnpab0Z1VXVQSHFQK1hlYkFpd2ZDRk96UkhLS0NhT3E3L2wzbXdJaUgxSE96UmdVcWx4MVhmOGM4S3dDRnd0QzA3S0FobEtqdkVXbG12L3pjQlFBZ3hFelpRRUkzaTVYcXhBMTh1L3h6QVRtSVNHWk81VnM3TGxlbDJmTHY4S3dCR1FYQVlKMkl3YW1kU3ZWdWQvK2JCUlNBTDUyWURLbWhOSzZmMUZoM3k3L2FGQUxRWU1TendaN09UU3RCWC83SWE0OGwyWTQwTVJ5ZkxqcTl6L25QTXk4bkNQekpNd3lpYWlPNFhDdm5NK2N6NklVRXlXWEVGOE54VzZxK2N6NXpQRWNNZ3B4U3RrSVlDY25uRzNUVjc4NTg1Nk1OZ1Z4TmwwaU9HUTEyZFY2K1hmT2ZIUElZTU9WV1pkTHlPeFU0cjJkK2MrT2VSQW53Z0pPeU5HQ1dweFhqNFovK3VBbDBXak11aWpUVk9LNkxkejVkL2x3RVdnOUtpYW5YbWtjVjBqLzVkNURBamdxOU5UcjJqeXIvL0lZRWVqMzAxT29qYlR4NUF1K2M5MFhlUXdKRUQ1TTVkT2tNY3oyb2Y4NTVhQUJvUEVIT25WemZEM3YvMFlPZUt4T2ZkT2tVMlNubGQvcXM4aEFTY095YVQrSlJqYTA4cnYveEhBU2ljYTNneUU0OVFkLys4RUlpcHhLN0pHVms5ZjMvS1g2QWxRZGRWQ1NaUFVQZitPbDM2Q0VoMXBVTXJKNi92OTB1OGNBUWlLbDJaa2pLeWV2Ny9uUFlBbEVWVk51R1FuSHIrK2NuUDh6QkJZN0VITWx4R2FjZVYzLzVOQWtrVmlDT0h4aU5xbHgwN3ZkN3ZVQlZROTBNN2g5YzNxWEhmZjh1OG1nU0dIeVFweWFJWnVlMUQvOWtDUFFTV1FwMmFSRzU2OGdhLy9OUUkzS3R6c29FRFIrYVY3YzRXSGYrZWFnUmFQeU9VczA4MHlYSzlSLzh1ODFBN0lKVElrNUZIQk1kNlc3LythZ2M4UUVpVHM2WVNtbHl0ejRPLy9aRStIK1E1U3lPQkhUNjZsZGY3YnZOQTJCWGtQTWtVZ3lrNnBjcmNnblBuUG5NOHpHUW9DUHpITUY1T2ZMbGUzdnptZk9aNU10T1Fjay9yNFZxdXNmbnVTL0tYMFNRY2xHeHRkbGljVnZMWWI3cytjbDNsdzJBODdVdWxHTXc1SnBTdHVuVVUxODU4NW5yaE9SL05wcVNFTTZnL09xMDA1ODVuem1lWGcwWVcwMmRVb0NQcjUwNlE5dnh6L0NRQlVndDV2TlRpN0Q1eFhTME0vL0dJRDhFQTFOVHBDTmFjZElDNy9ienlLQkp3Z3JVMU1MVTVPSzZSa0RmdHU5dDNoSUFkUUxPb21wVEZ4U1RUaDArRGl3Ny84d0FCVktwbzZwMEpBVXRuVHF1Ly9HRUJVZ3NXSFZpWXhIU0U0cng2ajVkOGM4dkFuWVBsaHgrZE1qZlp3NlJkLytYQVQ0RHlKNXFkRFNKK3poMWZmOHU4aGc3UWU2WnZBMUJ4dzhXNzV6L0lRTzJLMU5KK0ltQ2RoNHQzLzZFRWNuT0tnTjR5ZWwzZitmSUk2RmFyRXl5NDd3dWg3ZWZMdndFZEJYMVlhN0o2WFErYy8wNEZEbkxsUktaTzNTWGQvdWQ1bUR0aXRRTzJJbUNjNDhXNy84bWc3UWU2Q2NsdzFEaWZQRnUrYy96VUNmQlhJWjJUNGFSUG83ZGZmOG4vTlFKNEZnaG5Kb3lONk8zSXUvNWRuaW1CRndKTkxrdWFpR1ZTaFNuenBGMi8rZklPb0xZWThpaUl4T2dmcFU1T3Z2L09lUXdja0xTUnRjNVFTU2JCQWdiekgzcFpkL3R1OFNJRVhnOEN4TVFJRFVNNG5JOWNyWVcybkZkMy80YUlOa3owdmsrUmRseDJpLzV6dzBRQUlCeGhMNWNSdDJjT3IvNXp3MEFQa2JDa2xGa2pMdXpoMWYvNGxRUHViTVM5MGhuSnRuRG90Ly9FcUIvelpoSytJend5ZE9rZi9PZUdpQ0RUYnBRdWt5VDRlTEVDNy84U3dPbWJLTWZFTkNHVGgwdC96bmtrRVJsQTBsREVTME5kc3VWRnhBdS81UytKVUNheDBKc3Zsd2FhZkp3NlhJR3ZuUG5KZDRhSUFOZzZzdWZOQ1k0OVh3czEveHp3MEFLRkhaUkw1b0YyN0pTblJmcFpyL25QRFFBQ0RIZFJLR1Q1TFVKWnc2THlCdi84TThDbFI1WmMrYUd4UkhEb3cwczMvK0pRQlpvc0ZEbnpRU3huSFlkRVhTemYvTHZHWUJhdzlpbGNnbWdseE8yZE9rbWxtLytYZU1vRlZCKzhmZk5Cdkd1eWxPa2tDemYvanBkNHhnTHJGbjBvTW9KZzFrNGRFYUJadjNlN3lLQXZNTEtubXBjSEFUOW5Eb2pjV2IvL0x3S3lDenA1cWFDWkUvRHdqd0xOLy9sd0MvZ3RBNFM2WERlT1I2UjRGbS8rYzhoQU1BSC9XM0RlT1I2TW5GbS8vMEFBWWdnbW4ydzR6WTlHWGl6Zi81Y0FQR0I5U29MUkdHNEM5Z25VT3NXVEpPWEtKUXMyWENnQ0YzVEM1aTFLelRWbUZuTFJ2aTdleDZiYjZzdjhHazBRSUoxTWFWUjQvZlBnODE3Q1h2SW5hZVFyeFNnRCtCU1NpaEZXd000alFOS09TSWFLbWgxWk5RWTRYSklMbG1jV2V5NWV1VXFibnVtNEh2SHZUSVo1bTI2VkZudGQ1OFZyOWRtT0x1aTQ2aGZqR0FQNktFUUFWQ1VaaEtoZWdhYlZMQlFraW8xbEFjb1h0bWVubnp5N010RWt5S2lTVm1yajA5TFUzYXJwdVBUZWhvZFVjd25XZXU0c3U4Z2hYMEtiWnFWMUJXc3M1NGZ3QkJvd3BBOFZBd0c0aVFVOGptZE1jaUxlSE1UWWpkcnRUZlRYY3NvTVE2U3BHNDQ2UGRkL1EwazZEcFN2VUxZZVFseFh6NkZTaWJjbVI4ODlvc096d3VZQkFZN0JwRE1vSGt5SUFHL0QvR1ovS0wwMk1DcUltTmNvSVhzM0x0UmorSGVaTTMzZE1MdSt1ZTZiWm00M2M5TGcwalpLMjdsenQwOFFMdjBkU0hWVHN2NlhIaml4bStGZEFINkM0Q3ZGS1pyaVlLQUh2S1RXUDJhTFVBalJKR1YrOVRmTFUwVkJ1TVRER2JuWTljOUcvVGlXSFI4Y2w5d082NnZESUI0VEJMRnlXR3V3N2VXYThIMUFIK0FLdkdsQVR6TXdEdUNZajJ1amZjTktBM0JBNGR3OXBNZTAydkNtZUg4eGJhYmRiZHozUnR2bzNNak1PYXAxMGU5Wlp6NUhVdlZZeHA3ZmVMVUFlVUJ3YkNnZENJTTRINEVTRld3UlY1TnpXQTBFc2xGUmUxOFZkSnVTQjdhWG1vdVY5NU1HUW9QamlVaWFlT210Szd0OUFGY0dKTTNUTG5IZTExRmZhOEg1QWFTRU1BdWhPWkROSEVHekVSTGllaW5wMHVrSjZMTTM1ODMzWGt3Y1pHSnhOVlBYMXp6ZHhyMHd4R3o0NG1YVUh0NzlGQXdnbGsrZ2FXUGVyd1RDQll3WG9KVlRXaXJGR0h5TTlMVjI5bzhpZEh3YVVWMC9aZnM5eFRKSzkzSFl1ajNmcENZUU5wa1BVZVZ2MHdpVE5vR0wwOGhYaUdBTTFFTUkyc3ZMZzRTS09NSFRzMGhJaWRKM2FlWFBUM3R1YnozT25QQzZBTW1FVU1xSjBORkdVMHlGODdHRmpSM1BQWVhmL0x2RU9BcjhRd2FkSjFFNEdPS1JicUdZVGpvRWpxTEYvK0pmRU5BRExDMUJKZ3F6TThIR2JvcGZPdDZNdkZtLy94Q3dGeUZVWkpKMHdFNGF2bEJPdDRNY0N6Zi9MdkI3Z1NDVkNPbFptQWJhaXBxZFZERnJpeGYvTHZFSUJHNVRFaGlpVXcxOVUxT3FpL0N6WC9uaURnaTRvaG15b25ScVlRVFU2cVhJR3YrWGVQNElnS1FqaVlhSUNFSmZrMnptdDB1UUx2K1hlSDZBcFlxTVFUMVFhWElKM0kwOTYrN3VGWjM1OHU4aEFqWVFjUHpwUGx3Mkc5SWsreGRCZ3c3TXc4cWIvMjg4UzRBVW90UjNDcm9ZTWphS2RScWFPUzdURHBvOWROLzh1OEpTQXZvUUlQUnlLWGh3azlOT3k1dHd5Y1diLy9FeUJXd2d4czY1ZUo4YzluVG94NHMzLytTZ0dHQmNEWnlHWGlnSFRjMmFWRE54WnYvOFM0QWY0aG81U2hsNE1jVXNuRmJoS2NXYi8vRXNBeGNINWFQdmw0TWtLdlowNk1sQlp2OC9NOFpnQklnZjRuT2ZLQU9rcDY1S3JjTkRKWnYvOFpBQkx4Rk9sQTZoUmp2czZkRFN5V1Z2L1BFaUFKdUVDcUQ5SlVBTXljNU9IUWxtU3l0L3pucmdXR0VEbVorcG9HYUhnOUpMUlpXLy9JUURNQWdqYWk0R2RIazlEVGFMSzMrM25tWURNQWdpcWJCbkI1UFEwMml5dC91OW9Dd3d2eENQN09oUVI0UFNTMFdWdi94VUFDY0JBb1pKOU5pWUdaT2FseDBKWmtzcmZPZjVUQVpHRjVXUHBwZ0RMQ3NRVFN2QnBaTEszLzRQSUFJNkQrTHltbUFIS0haQTZweHZSb1pMTisyNy9Ib0N3UWZZdm1Fd0JrQjFRVFU0cUdmaXpmKzI3eDdBWWNJV01KK0dRQml5aWdtcDFVTTNGbS8vdy9RQTNBdGhGbGlZQXc1UXFYSFJqeFp2NDUvbFVBTUVmeGdrem1BM216NXBYaEg0czMveHp4WmdMc0gwTTEzVEFUclZUVTQzaEdnV2IvNWQ0K2dMWEQ4WGxpVXdicE9RVFU2M2lUU3pmNW4rRmtBQ1BENFhkMGt3SldvcWFPakRTemYvNFdRQ2l4M1hubmFDOEdsVFIwWDRXYi81ZDRnQUFPaHdSSk01U2tycW1wMVV1UU5mL2l6QW1vb2wwODdBMDJLbXB4VVhFRFgvNEpQQjF4eklrOUtVYVlPYnhVWGYvaDVnZzAzRWdIbW1pTThLUVRDT3hSLy9qUUJKRFJuTDVQa2hNZXJmL2hvZ1NlT1puTDVjU0lIcTMvNGFBQ2pTZ25sODRORUVwNHNRTHYvdzBRSlpITXpsOFJwZ2VsMy80YUlBS0JRNlVFUkxReHVsUmNRTHZ6L01nRlFxVFNYeERUWVZPVkxrQzcvbDBjOE04Q2NDa1p5Z2srQzZNSHBkaFp2L2JkNFp3Q3JoMTQrK1hCS0dEMWZDelgvNHlnN1E3R2JueTRUUEhvd1lXYStYZkx2RWlCUkFyRTdrRG5EWDJIaGZwWnYvOGlnanM1VHpVU1dhUzQ3TU5MTi84dTh2QUNJSGlCK3BjSnBRZW1HbG0vK1hlWEFMQkhtRG5SR3hSTGpzdzBzMy8rV2drQUhrZzVzYkZCNk1XbG12YmQvMER1Q3ZQbjJ3WHBSSERvdzBzMzh1OXpsYnYwSGNGZWxQdGhLbEI2WWFXYi81ZDRwUVNBUEwzTmpZb1BURFN6WHQ1L21vQ3dSNWU1TEVOcFJManNZdExOLzh1ODJBVjZLMTUvWndUU2c5TU5MTmY4dThLeUNPdzlrTHRpU3pSeDRZYVdiK1hmTHZGUUJSQXJFTGswNk5abzQ4TDlMTi84dThkUWRvZHJkQ2NCZHVjZUw0V2EvNVArSHFBRGdLb2hINFJDVU1SY2RMNFdhLy9IY0FHTVZCQ2xORWFtSFM0NlhJR3YrWGVQQUV6cWJsTkVTN0NyVlJjUU5mL2g3Z2lNb1hLYUlsazhYVGlvdS8vRDNCRFk1WEtlY0dpQjZSUCtYZUh1QUIyMFFwaG1HU1p4NHNRTHZsM3VpN3hYQWdjMVJ6Q2NKQ1k5Ui8vbE1BREluenNLZU0ybldSUi8va2NCUkk1am1PTDB4TUdkUHM3c1hSUmtDNy84YkFKZ0tETHJrK0pWUHM3TktpSVFMdi94c0FtMG9qak51b1M3R1RzMHFYLzV6d1hvQ2Z6aHFibWcxdVRUczBxWHdzMy95N3dsWUZHRHViT3VhSmZaT1RTb3YwczMveTd3WG9DbWlvMDY1b0pXVGRuWnBVTVdsbS8rVC9nYjhBS0VMQ2JTaWNnQmZDZHM3Tktra0N6Zi9MbmVOZ0M3eEFEZVVVb0FYOXJaeWFWRWVCWnYvbDNpYUFEREVFTjVJVW9BWU0zaEthWFM2WERMeFp2L3gzaldBd2NnRGVybDRUUlRydFZ1RW4yRmkvL3dsQUFlNHVUYytRcFFoTnlpbW5Ub2tjV2IvNXp4cUFFU0M2aDZPUlM4VVE2d25WYmpKUVdiLzVkNGxRQklRZjVweUdYZ3loVGhPcTNEUXlXYi8zZU13QW1ZSmtKem55OEo4YzdPSzNEU3lXVnZkN3M4WXdHWENMR2g5OG9Bb0E4N09xM0Vsa3NyZi9yZ016Q0N1UDFLQU9zVjZVOEV1MFdWdi8wSUROaEdNUHVsd0hUS2lVNnlRMVdpeXQvNTZjQm13SnJQMWs0QjB5bzQ4R3Bvc3JmN3ZhQVptRUZXZjNFd2RZcjNTNDZHcG9zcmY4NTQ2QU11RVdSMUNVd1VBZWFtbGVFbGtzcmYvbkFBbW9KbElVd25RbjV6VTAza1JMTWxsYi9uUEtZQWxnWGdNdDI0bUNlaXNxWEhRMHNsbS8vdzl3Qkd3UytYbjA4cHdaTVZkUzQ2TWxCWnYvOFdBREVnR3lydVR6QU9jZFg1U3ZSbjRzMy8rSDRCWG9oUXduMkpnRTJLS0Nhbkp5ZEdiaXpmLzRzZ0Exd3Rnd3U2VXdueWdneWxlR1BGbS8rWGVIOEF2MExRR2JQU21HODNxYW5HOEkvRm0vL3hZQUxrRUZEUFRKMDVFRzFTUklQeWNuSGpGMUZaMDNMdmQveUR0QmNSTmROR3dTc25xRWFIWTVCQVlRcUZIbFRmLzRTNENZQ2lvVG9rUTRFbm5wNnlhZytDKzF0SGpwci96d0lVQkY1UmFsRzZnMUUrenMwcVh3czEvK0V4QkdvZXBRbEhORFgyenMwMjR2MHMzLytIRUR1Q3VGUEtPWGpZb1RUczBxTU5MTmY4bi9CZ3dBb2g4S1VvNWVOeHJzN05La2tDemYvRjNnUXFBdmdRTXBTamtoQndqa21sTk5OMFI0Rm0vL3c1UUs3QXRNVldMVFlueWl4S2FhbDBUSHRMRi9uK0RHQVdDSW1GZVNyVVdoT3gyTkpoTlRVb1RKblowclgvdThHTEFaVUlxS3FpNU5BR1lPYmZDYWpCUU5LaTNuc092L2Q0Y3dETkJjanFtSWFGUUhBUlVhZUwzYmZNSks2dFZ1bTU2ZUsxLy9nekFBd1lpNGdUeTZBYUFIVEgwZVhzVFUwbkRURStJQ0xDOVZaR2xCa05TbXl0MzBRak9EYjBVTlBLejlnOGd1bkUwS284MTNneXdBNklLYUgwUnhHTkNPQkl3WU5UWlFmYkJlellOU0xrd1hhdnRtcjVabzVKUml2MTlyZDlQVFoxM2tFaW02WnVsMlQyOC9ROGxpQzNxaXoySGh6Z0VBQkhBZkJDTU9UZ2d3SDBHVkFPTEVvMW5sV2hSQnZjbzZOenQzWStpNE1XZDY1NjU2NXVOejFxKytRa1E1U2xrL3EzVWQ3RjNwV2lKVGVjL3dPQUExUUJ5Tm1KQ0I0UldBMndtaVFSS3VETENNNUMvaFN5OVRkM0hPaHlSSUxZNWF1YmRPZDBiYnYzbUk1SjltblB0eDN2V1dkOUtiSXo5VHM3cDYvUEE0d0JCZ0p6SFFudlNGTWJRSXBEV0o3NFU5aEVQQWloSGFwdTdaaDA4U3h1SHErdTc2NTdsdTc1QmNCelZKWldjZUtLK1FyUzJaTlI0OXZ6SUFoVVd3WjFGcVlmQWZjRUNEUy9DSkpxeFhDRkNJbkRWdmRsUnJEQklGTG50N0oyY3ViamZLcjcwSUxnYnNOMU5sYlN5NzBwUUxUNnFvZU9JQkJSRkUwTXhvSHFPZ0JRNEhvS1JjWFUvZVFCcGlYRVlIbm4wcWh1WElvakdMclZkNkFOWnJIUlRNcnZQZUxOL0FVNHZJRUVwcHZzUGE4Sk1BUGVGRUw5WWVGZ0M5QlB4TDlTTFZDNWMwRkVFWlVORkplWDNOTkpFY2tsZWV2bWVrd2owMzF0TjljM0hwZ0pkUWdiYzB2QTdxZUxOZnB6ZE5wVmxCV3J3bEFBK0FIeUZXUXk1Z21nWHVGSURRZ2JhdWlMNUZnRkVDN2tsWmxsbU5TczlrcHRMejNYdGJQV3V0M1J2cHUrK1JMRTFXYVdlT2R2dUQzUnBXM0krUE5sOWVNQUErb09HTVVwUzBRQUlvQThnMWpwcWg5b2hrWUNnQmZEYzNqM1M1YWV2ck1idnV1UFRjOXpkZEhvM1BUSWFKTnh0QXhPbmo4K1FlTWhLa3lQYVBOOFpnRVloWUNUbTBwR0JyUVFzUlNlUXNYblRndURwRUxzNDV4ZzJ1L2xNaU15ek4zTlZGMTljOUxvOVBlbEhvZE5xYTJWdGVycWI5eGlZSHo4YVJZZTc1RkFScUZzeHFJVWhvRFVnNldsQjdFT280UkIwQmRGaWxQYzMzYXlzSTFkZDNSckk5Zk4wZGQwOUk4RGppcTFqMnlCMzhJNitPalZiUjVoQXU4eEFSc0VDWnRDalFoMmdTSVl4WjAxUU1rZ3lFVUxtUzVSeStyOXlUbElpNVRvanoxOU9SWHR2bzk3aDNKczVIYld3OWdXZC9TUGVSY2c3bm50Rm12QmhBRWFCc2xKWmdJUUFCR0RmQzZVU1lNa1hDbVBnZzRqUkdIYXI1dStlMFNCY3h0cGVQU2s2Yml2M1J0WGN5Ty9TbG5KV1dLM0ZuZmNNcEN5cHBNb1pnZDdObGwvZ3lRQ0t3T1NXM1JnTE1FQkJQaFhFYm5ySVU1Rm9NS0llMGkyYm5ZdzNpQUpRdU8zcHJ0dWVPM1RjMytDdFRwY2xMcGRaNVc2NzBBelc5dWxISG16VytoQVJIQW9ZSDlHVU1rWnhCQVFrakVxWEoxbEMrc2h2QkRJbkdGSzZ6Vzd2V1k4VkFweTlyM0hacWI2MnI2YWl6UGRIcElSVTFGT1JSdDRkY1FOK25DU0g0Vk5IK2x4NWJ2Q2RnSUJBVmVPcGFZSkFyUU0yR0pJb3pxSVh4U0dZVm9RU0tNV3E4T21FOTBtRWtuaFJ6ZHl6dmRIbzlHbDdqYzNIbkN2dmNsS21XNmp0MDNuNEFBSHFBL0xucUtnZDlQT0s3L0VzQWVhQXhFQzNobkJkeTRvaXpDR2dtUndza3N4YVJsSUdVRXlQQklNRm1XemRxV2lVSXdQL0ZNMzdaZkhqY3hWTFgwMzZJUGN1bExrcDU2bkhkM3BZMTNweG1UN1ZPUHplNGR3MHNaTytHZUMwQUEzUXV4RVFhTXdLM0JnNlI5TFdFY2tpQ2cxb1gwVVRLU3VxZVJ5cEhra0NiSDFKclBkTlhGSXA1SmMxMGJ1ZW5wSVE3aVJnNlVxYnBmcDExeTRyMTdBWnlpcW5NdDNIZHpmZ2VNRk5BTExCL0MwNUVtRXVBY2tDR1NtTDV3WXJJMWpFaUJCZzBpZVVqdkJUZFJYa2ppS1dOMTkxdXA4dGRLUytucHVXcmI1bTB3cWlKcnFxelZmUWo3dmVZQ2xJVTdPbDgwZHZzTVh2Z3dJQ2xBRk5pTWpRS2xra0IwQVJ5RU1DVGV0ZUhCUWVOSWRZUWNZa1haZk96YlNrYnBIL3JYNk4xM0xxWjVxN216RnFOL3BvaDZwUUphWGhPSzZ0YUJYeWM5RlVrS3RqWElqdko2NXJ3d0lGYkFUeVBMQk5LSWhnRTBBNUtnaGxGOEZDOUNjSlEvQjBEdjNHK3p6dGt3RzlTTjJFZTdXdmJNZW0rbnAyTE05M1cxSjlJazUyMUJhNjFYazNMeXUvYThnazRuSVhUdE14bzcyWUZuUEJNNEFsb0MzQWZVM0gxa1A0Q09nVCtEVmtkSXl0WmdVQVo4TG5vL2laWmN6RjdMTkpCRmVGenl5Uys2K3RwbzN1NzZLN1UzRzU1Z05FdlROb3R3OTRzNVcvUXFtVUc3TERkT09yTEdUM2hoQUdsQVRpSVNpMHpBNVlHREI3aHROQ3BSRzNMRFFGNkJzU1dMU1Y1dWVqWnNjaWlIc2JUaXVtNXVXZTRrM054N3B2cm01NU9KWFk3S0hqM1pvc085QWNIM1M2VTc2UEhUbmdwa0Flc1hRMGtVZENtSFNGaEErSVFVa1lXNDJHTXVKWS9pQWlqSDFTWVJxTEt3MWlLaHdrZ3gyTHV1TjJQM1QwN1BYRzQ5S1lNOG5uMjN6Y0R6Wm9yNzhoWEM0L0hJVHp6eWl6WGhHQUF6d0tCQTZDWWV0SDBIRUM4RFNYRWhNMDRvRk14RGlrWEFtVm5yYjFjekk5aWlaSDh4a3d2S2JVejFyblhlWmhJamRHNmRZTHVkU3ZaZk8wZTQ3MEk1REFaN05QWnVkVjAzV25ydDhFN2dNZUZvWWprS2tKQ013YnE1UUtDekhJbUNQYU42TTRSd3B2SHNtTFZMRkpmVHErWHYwdEpYUlBwZmM2YzhSUUJqSUpqREw1cE1PUU1hT2xvWjJFVVRobGdXYitYZkx2RmdBeFFFeER1RHdTWWlTRkVVWUNrNkUxcWhna012V3VweHZkNmIvUDhCTElET0JjaCtDbExpZ1ZBM1pSSnUyb1FZWk1lY2llZHVuVnB0My9MdkFTOEFNTFk4aDRrVXZRQktDRWNHL2E5N3lLTkJsQTVLREdxMzJZR050TmRwMWQzOVZ1dG40NStSZEhFdmdBT2dOUENEaERFWmlPSVN3RUNCaHdlc1lDaHo3THlnTklOVUlROGprL3AycW0xamc0SlNReDNvNHJOMVdlOWMxVHR2VzdUeTkvZUlUMjAzUG84M3dvZ0JBZ0Y3c3lKQ1JYQVNXVkEzSGRBd2ZtQ0hpREIxaWc2NU45bXI1bElQSS95YzNjWDdQZEpqMHJLdW0vUUVZMlRLcm1qdmRxaXhucGh5TG50N3hYenhSQUVIQ0Vob29obE5BdG9iNE42REJMR3FHKzFrNUM5SEF0YVdwdklxSkZFS0FmbG5kTng2YjVxenZ2b1pDZHVSemJvODc0RkJHK1hScnNuRHAvZ2NNQnFJT0dFdkpza1FMcUNkd1A4SnVDNk95Y2FJaU9IR0lxUC9Vdk9YRm1vY2tKZHd2bzdOOTAzZmRlMzNYNkFaMUduNTNXS1BhMzB3N0xQelhKcW1qMnZDUUFEdmdTMEhJTkR4V2p1QmN3TVFjckppNlRZd1JCc0FlbWE1bGVWcVp0cWRPUmRIRTZyNlY3dVd1dmI2N2I3MFprc24yVDVtYmM4N3EzRmplOU9LbWFRU21xNmx4MXU0V2E4eEFHSkJFbzJES2hLS1VjcEgxZCszU2NvRWtVSWNoa3V2c0VmZEwycE9FaHhOYzduemMycjZLN2ZlNGttRmJIRFZuVDFhaXpENEJYZzlIT25YckxUU3ZKN3ZHNEJrUUZQaHhqdkFaeERSdEVESHNuTUxiSmhZbUI2RkdOazJiVzNyamZ1RHFPRjVXbkoxdXpqbTYxdnV1YmttQnBEQkxwMUJyTTBkOVpadjVLalNEWnBQYXg1VTZXYzhPWUJsb0pDSGNKR2dGVVRCdkVEVW9VQzY1dXlYa1VMSVNXZFhSTmIwS1dwb3lGRGQ5dDNLMXkwemE5ejNUMHIzZm54S0NRbUVvSmZ4NnlRTis4UFZwUEhKWVdvOHVkTEcrWWdDVmdWQ0d1YURUSlVCd3d2elc5TFRUUmlOSXRHaCtaS1JpWVM1MnNydEdRM0dTeVRaZE85MTkwOWM5Y2I2Yjc1TWhpbDJ5Z3JaMXl2dW12b3BHNTlLN0lRUGF1dkx3QkV3S29EeVJEbWFqU0NBUkRsQXlVd00wbzJTa0xjUVl2VXBITTUzTlcxWFdrU1N6S3psdWxlKzdybm8zNGpqSXdTeGRCNVc3U3pYME9wb21iZHhXcDNnOFFERFFBalJmRWdQaUlOWUhTSFNUWWp2NjBrQitJQVJkUXk2Q3kzY2J0TldTbEs4clRjYjR4WFpYaTExUjdyWDZlblJLa1dYVnMzaDVYZDhDazFoQlRZTHpGUmNkVVFOZUdrQUhtQXJKa0dDWkhzZWdwNDFFVWNiRmgwb1dreFFGM0pneWs2KzVJU2JsSVA1eGR0ZDBITFdwYTR3NXBvdzVlMXB1V2xOamdTQmlkczBnVzQ5N2ZvZFZKOURLYlRXejI3OEdUQXI0Q29CYmhrTWtjUXdBQ3BrYmg1Z3NzS2tZaUtHeUlXUUJTYVVMenZUMTloU0tTbEl2YlczZHJMdGRad3YzVGZkTjlmU1pqTVhvSmRMMzloNXZPOHREMWFUUlBtZlc3VHVxOEVuZ0NNZ0JZa1JHWmFhZzBnZ1pHRjhwRkFvb3pjb0hBWEEzUk1ETDByNHl1U0RoNUhNamxjeGFYWmRKZ3pQZDNkUFQxdDNIajRMZWpUVHVVajQ4cnRMTmZnNmppZm1vd3ZYSzhteXpYb3dHU2dNRkQ2UlBVRDRIT0ltR3lZTW1rR0huQ0lSTVR5Z2pLRjV1NHZ1bEkzbkxTN1U5Q2VsWTNXNXFiVlhjYjlPWkVKQTZKOUZ4N3BBMzZBNDZwZGllWHpSMjZpekR3djRBcllBYUF4aStZamtHZ0dzQTNQa1J4U2lVOEVodUZNSGtaMTVkR3E0cGxRNUNlbU5tSzg5dHpmVGJUVFhkTjJ2RytteGVEUXROT3ltaHp3eDllT0FxMHo1ckhQbkR5aXhzNzRQcUFOY0FzY0xHR21NbzhCekRFRUdxUzhwbDVzMHljbXdUZ0tZY2tzYUxYZEhtbEp4UnVOeFNhU2QyU3N2eGlZczgxSG8zUFhLMHlNOXpzMGxaMTU1WGt3NDZhclVKZE1KeFZrd2pUdkIrZ0dtQWg4Y2huS1lmcEhDemlic2JDOXFVY2p5TzRjNWtNeU9iM3BXbG1lTnhkRXRicnRxQ05mcFhudW51amEvZEc1d0pPL2Nta0JyczZkMldYUS9SNE0zMWlaTVgxajNLdGN5V1lQOEhyQUhPQnhBdHdqaHhZQ2FGUU8wV01vQ2ZLVGxrYkE4a1kzbHFMVVhyMmtzcTIxTnVYN28zM2ROelRmZEc1U2hwR2lwQXpaNWw4NzBRZlNJY0k1SmZ4NVhYdmlIZ0Q1QXg0ZkhORnhMS2dOU1RXb0p6YTFpNDNDNUc0M2MxeTdweHA2OUM0RkFTN2FtMVhkYlhMVDBidnU2TnpBYURkQTNVM0E3ZHhaendOd1BBeEo0dTNlczdoUlpkNFg0QWh3Rk84Sk0xSGdiZ2NJV0lnUmp6OVlMalVPTWVSUmkzMDFmcmQ2dVJqSWdMS2pOODZENXZyTW85T2ZBQkp6VDhsMjNPSGRiV2U4bmtPRlR0UVBkcks4RkZnRDZBWVlETzZLaVF0UUNkUWdzVGoxdWd0QlFWUWFZWEtRd3BtYm5wV2s0WEd0U1NPNmJkUFRkcWVqZjZzVFVEZW8rUGEralMwc1hIK3M5M3dMc0FHZ0MraHRHaWxhUlFMb0dTR201K3JzbzdJeHZVRzZtOU1EaWpCcC9UazVHK3VlOUxTV3NqcnZQeTVMSEs4SVJBRmdCTjRianh6NVFEUWl2UGxxS1laS2l4THM5Y3VPK3RhYi81ZDRRYUF4Y1E4TnBNYmtGb0owY0k4UlQwN01ESlEvSFM0OHYvOEw2QUdrRnFEUzBuMGFBd3B2Y29aZzNwajFGaS8vd3U0QzNoWkF0eE1hY3dOdzRvcGZrRzhTUUxOL0tWTDg1dmdsZ0JYdzhKQTh6VVhvQ2FOS2wrWXFNTkxOL0tYNVMrQzlBQTdsUFZFa05NSm5zVFBZbDh1a1lNTE4vT2ZLWHhPQUJDQ3ROc3VhSmZiT3pTb3YwczM4cGZsTDRid0ZQbFEza3RtaHRaMmRsemJpTHVGaS9sTDg1bmh2QUxnSHdjNXVYaHZHcWFkbWxTVFN6ZjU1M25qY0F2UUxPSHBONGlEZ050bE5OUzZKRzRzMy8rSndCZ1l0eHl3dGRRTUtVRTd0bW02TWVMTi9PZjRNQUFIWUZ2S09GcmtRTVNwMmRtbFF6Y1diLzVkNE1BQUlhSWNLcWJraEF5QTZ3blpwdWhuVVlXTC84OE44QVRFRXpGTnlQQ0dETWp6emswMDI4a3RRblQxeTMvNEwyQUtVRUZxYXZYQXp3OG9LMVZzQ1N5K2l0dC8vaVpBRmFDK011UlR3ZEhJODFXeVhMckZmcHYvay80YVlBdG9RQ1RxUkpkRG1Xby9xdlpTRm52ZC9qU0FMc0EybzNjaHF3SWFXN2RWSUx0WlJwV3VlK2FTL0YzaklBMEVFMEU1TktLd25MSE1QamtFVm1QS0dIbmV2dGZzcjVCYTRLMzRldStVeUJYcmozUEVlQU1XRUNwM0lYSUFaRGsyUTNVRDZlTTdVSmh0TjdWUzR3anZ5aFRxMzZlMW55RlhlcmhSN3J2TkFCakFUT2ZxVXVCT1RTcFN6czFPbVJ2VTdOTjZxU2ZLRk9yZnA3WHpCNnVGSHUrYmdEREJlcGd3UWhIQXhiMk9SVk9zVzhpNVBJcVY1QzV1ZXM4NzhmQnlwK250WjU5TWdTNUorb1VlNjd4NEFGMUF0d1lLVFNuQ2FsejI4bXBZUkwzT252VGY1V0tzK0x2RmVBTFlGNlJ6Q1VRVGRHd3JkS0tVa0owcmQveTZjOGZBQllRVFVMOUo4UWd5elJtM2sxSmFSYjZkUGIrY2Q3bkhWZUZtQUZMQ0N4anJ0MEdmSG5hcFZqeVN6QXIwdC81NHRnR1NnbVlaai9KU2FETWp6YmtFNjNBa3RQTEMzLzRKWUFFT0VPRWxKcFBBeUE2b1pRVHJlalB6aXhmLzRXd0FPb1FranlhT1lEbFVvSlFUczQ3Q1J6aXhmdS93dGdEQUIvSThxSFFCZ3pkQk5UcmVESnhadi84TFlBdWNxcEpOSmdFd2FRVFU2M3FTQlp2L2puaGJBRm5nODVGazBtQWJqTlNmblc4SXVsbS8rT2VDV0FLUEZhWVNhVHBMTktsMDdGMG1HbG0vbEw4NTRnWUFQQlRSTUdaQ2VHdngvWTRxTDhMTi9LWDV6eWdCUVpUWUJJeUF0UGhybW1KazhKcklqQVFOZktYNVMrTjRGSkI3am9ia1FYbmh0S0UyYk5LakRDemZ6bitIVUJWUStCN2F2UkNEZU5VOHdsN2Jra01MRi9PWjhjendFdGdWdUlNTEFtRjU4aGd3dzU5aWVYeGRSajJsaS9uUGpuaDNnTWJDN0FsQ0JnOHZBNVk3TTZ4TnpUa1EwS0lUaFd2L2wzZ2QwQVdnUm9mVUpnb29Pd1Z0a05oMTdMTFEwOHVqZFN2YzVtN3Y4K1QvZzF3RFJBZ0VXWm9SVnNCaHk5ZzE2Yml1WHJ5VXpjOU1ESlpTMFZyK2tDYUdTZlFWbS91MVRweE5zMGQ1NEVXQUQyQkRRZ0lMWVNEV3diTUg4VXJGRno4TUZDNFVBZmwxeWhIcXZaTURjcUdKa1lOUjdKdUt6UFI3M21CUFliZVhkaDVlZU9EUXZvbTRNM1I1enZDamdEOGtCUmd1cEVBQ2NEU0VyV2sxa2l2UUNFQzJEcEU2MDBwdXUza2k1aWJsVlNWR1RlNnZwNWV6R2V0dnVqY2VsQU13cDlWSTVvN3pyTE9lbUZXUlVGU2xsUk9IZFh4WnJ3T2dBTzZEV2lWQ3dEU05ZaG8rQlFoUERtVW9JMFNIaDdPQi9PVWFEdW5IVytkRzBVUndZTlI2bFJnY2ROejE5MDNmVDBvQVhFMjAvTzZtV284aE9sZXE5S1ZDSzZEa0UwekhEcTVvcjVuZ1FxQVB3Q0JnMnhuRXFQQlZEQkJTalVqQjdQWG9qdERhSFNGMkg2bVdtcm5sbDZXS1hEYTAwMi9ZdExyOHRHanU3NmhuWVM1Rk1vbzhkV2xqSnI0Q3FRMVU3VjVzNmRiNEwwQU5lQXBNRjNLTXBCSEdwSEtyeUtwV0k1UWdTZ283U00zdHJybG1kbElQUlVhaXZOT2JabnB0ZWRkS21iYnVYRFNqUHRwbW9IdDBXZTlNY3FKU3lmUXIyZTl4WnQzaDlnQ3JBTFVDaUFjTXRDeENwRFpCT0ErRkpjWmRaVWx4SkRqRHVvam96ZGFibHA4NHNTVGs1bEphdnJTYzEwYnVWN25wNlVRTGd0cWFhVEtPSzFlYUR5Wm9SZWxNNUdXSWVET0FWd0FzNWxPWGtOU0hhSUdMRmw2bFFpWk1EQVFNVG8zS1dVaSthdDNXdndkUnUxZld6QmR1MGpYZFBUYzJ2M1J2QnBNS2JTcG1UMkZGbS9RaXhKeWZKZEw3UGF3c2J2Z2RnQmp3Rk9qMFJ6RW1oYVFQOExvRjlrNEkxanNNNmszQ0VCb0tVQjVNT1ViVlBXTWpBVUJpMGthNjh2cnRtTnpjOTNNM1BYOEFXMHdJT1JRVDBEeUJBMTZJNE5rOGNnNjduRHV2SEVCaGdKRFpIRk5nM0FlWWhqS05JMGxFcHJqc1VSK0ZvSWtibXc4UFhLUExFZGN5WEpVODBzcFpTWEp4UE5HTnJuQy9STVY3YjZVQWsxejdlM3g3M3BoVmpqc2Rlb3Q5T09yREY1NFNzQU1vQ3AyZytJQ1VKNElQV2dSVmpLUjMwb1dMWUljYUtMRjNuV3l6S1F3T0w3akZicXVlbHhqS21lNmJtN2pmcFRFWDNINXcvWldocFp6NkN2Q20zWnJPY2UwUU5lT3dGZEFVb0tndk4rRGpCQ1FuQ291UTJiWFlab1dBUlNKbzRNV2VubCtlcHNmUjdPRittKzIycHVWMSthdXI1ZG1ibHBhMEF5bUVwWXNJNFVlYnVsZDIrVEFlQW5KblJRcUwwOHVYRmZhOGRRR0FnQlBqWUdxUlE5UmJnU1VNZ2xSVWNaS0dWQ1NSR0JDUjFTYVVUQTNsZTdhTnpFZXJaSkRKeGEwOUpnY0wzR3pmdWpjMnZjbnhKbCtwWmRTTXJzbG5mdzRKcjZyWU11SzFsbXZJWUFUSUZhQlkrTWdrbzBnaUlXL0IvRTlTVVYwNDJDWEVLRjJMUXBIS014dWQ1UVpjU0IvYTZlVXJQNVN2UEwzY3JOOTE5Y3J5VEJvTHFyTlN2alIzblVWOCtoWDdzMVRtTm5WZFRUOThIdEFESkFYQVFrNlJHUkFROExvYWpnV0E1dzBOa1p6a0wyVlZtUllJekRyUnRHSnVaS1REaW1TMnVuTjZlTnpocnJ2bHVtNDlHejR6akNsZEhhZ2U1djZEeEtEODFOTjVyZFZzMUhTeTd4TEFNVUIzUkJ5bEFtaFp3UUdJR0hVR3VnNlJtbHBrTUNwSGxTeVBNOWF6TnoxamVWREV3dGZsRnowOUxVM1BXMzNkTnltR2NZbkg1Y2dub2FkTzRnYTlDS3MyVGJHRDdmUjdrY1BjOFBzQVVVQ3F6UUxFc2lDdGxRZEpEWU55MVFuMFpSckVHRkFjQ0NJNVhtMWxNdVdIc0tES1RaTUZQV3RLUnJyYXU2NmVqMGJsQUdpdW5ySnFXWDZkUTZwb3IzOURxS1dvUjFoZmFLMitFRGdDNUE3b3F6ZGh3TW9jQ0dFY3hRbDFzS0dRdVFtdzdDbkJsUjA5YnJJL0dRblNVczFQZEw3dkw3cFo3cHVldnB1ZWNHa0dUSitjVEtPUEh6ZSt3QlpuVWxpKzcyanJKMTNnK1lBeVFFbWprTUF6SEFhYkppT3cwRHlUbWwzbEZRQjFpVnRHSFdqNW1sQnYxajZTbDFsK3UrYmE1Zm9yTks3ajBpV1J5bG1wTnVvOHVzSzlkN2dlUHFQMXFaZCtWcXV1d3MxNUFBTktBUzJIeWkxUUpjRjRDZ2xNWUNnMk1wUTBiUjJNVWhydmRUNXRrcHJEMHBNa25kUFBsZTVVOUxTcS8wRnlncVJFKzlPOHZuRm5mUUN1Sm1ONlJlMXgxZlhoWDJYK0Z2QUhuMFdBWnhPT1F6d1pjR2VaTDBDTG1Hb2FIOFZCcVJERkhwdTVhVWxNYnVKTWV1TFViT1didGQwOTNOM1BKeG9OWDVMcTVhQjVEU3hyL0Y0UFZHVEtuWUxOV2VWV2xkL2VJcUExQVEvU2p4aUdvRGNHUWdBVmpuMG5wNGNnUDJIVUxONkp6TnoxemtzajJaZE9kY2VqZDk4QXpnclNCMDVLT2RPNjJ0OUFVUzlOcnFubzRkWmNQRENBRG1oY0EzdU9DMFBZRDNoQW8wd0lyemZpZjFpaFVqMllMMllkTnRkeWtUYTQ5Skx0YnRkZmR6VTNIUGdZR3lGdUJjb284dmZRRTllR1RTQm04UE9yd1RZQXo5SUVuVGs4aFNKbE1ZbWtlbEFqSGdrOFpLSFRVNHFzNFdTY1ZyL1VHb01seWFwcjZTMG1kT29OblhIVG81NFhjQVdvUWNTL01xUTFoc1A4eGViQzJUQVplWWZwNUM3NjlkODU4dWwzaE1nTEFDOGdiOFZxRUpNUFFUaFNnZVdzVFNBYzdNbW1GK2ZPTjQydkYrLzduVG5oU3dBK0NnSG1sTUpDc2h1bTFUa29waFR4TE5hVjhYLzVkNFVzQVB3TjdoeUdRakdvMlFKNXdhcDd0WXhXSXIyVGhyb1pMcXRjWmpDMmpobnV5THB1MSs3NWRtWkUvOHU4SElBRnhCUElpT2pRVEJPZ2hnQzRDaVlDcVFyY2tGZUlJRXk0T2dsays5bkpmMWoySWx3blRIcmpmUjVidWJ2bGQrUWhpSjVwSEVTM2E1WGsxNW1iTGxxV1VERE4xcXVweU9udE84Q013QjBBaURnZUVNNGtBK2dNSUI2UXBESlBwYmxsZy9SYW94ZEZOUXQwclRiS3lRVUM2a3k2K25ydTRsVnZvMmRkTHhLTTZmbllKN1JPTzl6U3UrdkhBSzZzUVUwdmZmTWFlVThyOXZoVFFCdVFPK0MrbWFMZ2dRUXNMc0s0WHpCWkduWldDaGcwd29Sckw0TlYzV2JsN2g1S285QzZVcnlrNWJwN21qRmRxYm0rc3g2ZTk0ejI1dE9heHc2cDVaMzRGTTBQcGNsNWhqcU90NmNLOWVGQ0FGSUFXZ0FsaENRN0hjR3ZDQXd3SXJFaUs0TlVMb01LUDRtakxZYnR4dG9raWlHOFQ4V2xvOVBMcEZQWDF2bnB1NzcwQmlYMUhObnNPODBzMU5lbEZXenNYVTk1NjRNWHZoMUFMOEFwa09jTTRuRHNDN2dBM0FSOFhTSk42ekJlT3dyQW1ZdHd2aFFVMzF5L3JOcEYwVWlBZFp3MjV1N2FhdHZ1bEowYnQ1RldyWE9RclZoVzBzNTZZVTVuaEIzV09sNFk5M2w0SFdCRklveVFSU1JJMGdmb0hETGhKeHQ2aGtPUUd2Q2x0R00zUExkalE4bFJJU3ppblhHRTJwNDRsbTV4dnZjaWVqanN2dDU3ZGU0VXg4bk9sQlRISGxUMmxuUEZ5QTVZQmU0ZGhxT3BFQjh3SFpBZm9UeHdTSVhDWUJwZ25XaXIybTlyMWQ4eWtEcTRYTXFidTd1NWRKbHk4YnU3dWUrVkw3cWF3MXVhMDY2Y0s3L293cURkWHg2N2FLKytJZ0EvNEN3QW55UXBFUVZvTEFNUXVSUWZPd1plRStEckRCajdJOHpkUnRjM0tZOERlSjBqbTY3dXBXY0pMNjlubStudkpnVjB1UHBZNTA2ZVB6NkdMbTNUUlczd2ZnQ0I0QWRZTVJaUmVKUUh3Q0lBZXZTSTFBbkdCZ1NnYUFUNDIzUFRDZXZyT1JjQ0x6eTBtSFBybHVreHZ1NXZybTQzT2xOYy9FL1ZkcDVieXp2cFVqT3V5TzNSNXBBdjhxZ1FjQVdVREJCNWpvalJoUWd3WWhBelZGTXZwU0IvUTdRM1RnMTYxb0w2OHBjMHVJYXZaZ3pmUWl1WTNkMzNSczY3UlZsem15Q3QwNGQ2K3ZlUlRWVW5adVhIZGRwWHp4RkFFUmdSaXRSYVhnd2dFZmxRWmhtTU50blNPUFFSU3Nidk5sSzdMUExNOXhpRkM3akJlNzU5MmtTTTJ2ZlhQWE4zRzVjUE5uMHM0bE1KZ2Q1eFpkZmt3eGxOTHB3MGk0N2VRTVBFSUFnOERqb0JTS09HTUQ3QnlrM2tVT2V1eVBJWWtSZ3BLRmpDZXVGbUUwWXJFbGVYTFMrYnZuTDMwM3gzZm9CN1lSVk5FSXd0eDN2UUxGUy96NExhaWMybFVjQzFNOFc0RUhnYURsQm9vR29EMUJTaE1NMFVIbEcyaTRMNkdIVXFIczIyL29Qa1hSaXV6MDlWTmQzTDlQZDZZTENiYWZtcFdYbHgyN2l6M3BRQUFTSHVTbHhRMGV3b3MxN1FDTWhxR2NFaE5pS1hoM0FmSW9LRGJ1WWFLWlVnR0FIZzU1L1RjOHZLbVJHRW5MTDlWemMydks4YlZkNlVWN1U1RS9hOUhsa0R2MFlySDZta3JDalR5QkExNDZnSTBqMmdNWGpPdUhnQ0gwUXZvNU41UnFDZ0RMaGRCNk43eFMzMnkwUGdqWngwYmpUbGxkM1UzY2I3cjZSWGlubkp5ZGVFZjc4a2NYNXFTRE5RUGNJRjNpbkFSZEZvVWliQW1uSUVQZzVJZkRHcVpLTDVIVUptUUVIMzJWTlRiN1dFV1dkSzhhcU50M0Z4MTNlNFBrb08yZGM1R2UyUU8vSXpsK1pLVk5QYWVkNHZBdElMSktWc0xXMGVsTGl6M3hkL2krQStJZmFTdWlDVjJqMHBjV2UrYStYZUVpQWZLSUE5TFUwTGNudVBDbHhaNzVQL0x2QmJnTmVFQlJZK1hFQWJSY2RGS0JaNzVkL2hwQWJDSUhlb1pQaUVHenBjZERyeFo3M08vd1hnQTJFTFVRMHFLYUM0RG5VbjVwVWNjV2U5dlBsM2pjQnM0ZzVkdHlnQkxpbXBxYWwwVGppejN1UC80TVFBL2tYSmNPQkRjaUI5QlVJSFZsS2gyNHM5LzU0SFJBZ0FEOGpNWnJwN0IraW1pMStQanJ4NFpvc2QvcGZBNjRFQnd1NFNPUzlFVFJFbEpyZFM5MldiSEd0WHJqckxaN3IvL0FpOEE4VVdvbGdTUVJ5ZllKWWNSemU5dkVRNkRTS3RrYWlsY2NieTFJMHRKR3JQTDd6KzdUWi84ampvNTRJTkFRTEJVWVVPaUtHU0U5QWN5QmY0b2k1T2hzdDR4RXNCZHBBRklsZGNhaWphRXlQZzhsUWt0WHpkOWZHUFQxeHZ4ZWFOVVV1bEN6MUhuWitpUExVemFhN3c4cndKQ0FRdUFMV0VqSklSQ3pDK2dlY0lTU1gyS0dTS0dBQTg0ZFk2anNjYTFkck15Y0Q4SjRrQ2hIODM3cld1ZWFaT2VOKzZwNldwNi9RQjZsQkE2WGIwd2NkYlhoVjBpNlp1cmw1M1lZMnZBQWhBUXRBNlFQcUdZbUV1RVJBUzZLRXFEQ1BDSXZlMFVRYmdSc3FoMDlMVnBMU1NieU5ZaHhKRnhiVTlOejNKTElBeE1GVjNHNXViUWp2Q2NyR0xQWDZXZG5mWUdSQkN0YzlSQ09xOUlHNXJ3UVNBY01BRldBVjRGeUcwTnNMQ0NaaGNBNVFmZ1djNUk5aG9MaEVJTWdZTWh5anNjbkZXa01TU3VMc2xqMlA0Y2hsTm5EVXJybkl0bWhPa3FWNVg0NE9ER1BYZGlySWpEbklKVGJjTVY5RnhXNzB3eW1vanRuWXVZZWRQanVIdDZXYzhIaUFpY1RaZ0VpTUZ6UUJLYmg2Wk5DMjFDUkNNUWNNaVplYnJYczB2QXhPQ1JzV1p1MmIxSmJSdktUcjZXcnYzb3UzWmhQUzg3em81K1BRUzUxSm56QThmTC9DREFKL0FsSU1JQzdrOFM0SjdBVGNGUUVHa2gwdXd1dUQ4aHhDZkVERnErMnAxSHI1SG9lcmtmekp6V3hTSkxYSHUrbHB0ZWI2L1VXV21hWjJNSXFVSFc3UlkyYW5QUXk1RlUwZ2h0bm5lRCtBV0VBdllRRU13bWlub0VFQnRoSzJtdVoxRXdFNEI4QWhJYXJ2c2owMnVTRElYVFJpenkwZGlZV3Z6ZGMzYXE1SXhmdXgxYUxqcXUyaXh2eVQyS3B0UVZxY1dYZTBCWVFGVWhNV21sQ2tCTjRyaDNISW90UGVaREtQd2pZaXBpa2wwYmpaaHhpTGEzVlBYQ2VteW9jUjVWYXU1UWhuREd4Rks1QmxPT3M3ZjAzSnpsU2lYSGVVL3cyZ0tIQkhRVThlR3BFK0JRd05pT29leElLaWt4TUIyRnphNUFXUkxNRjc2VGRsY1hJL2lFbkE5TmRVOXhqS1FsTDNQWE56MXg3cFJDVVNVNTJQcTlQS25TdjNpa0tCcmlYVDhzZHNkVnd1eXZVWWVHNEQ4QlFnWjRHQVVDMUN1QlNBcFFOdURGaHNrNHZJclErR3d5aWlCcUJQc1RVOXk4bUpTWGtscEphNWE1NWUybE10ZDBzbmx1UmxvWmo4VGJDVWIxZlJ1NXIwUTRFMFVyYVpGMmxiU3p2aUdnR3pBQklBY2xTYW00UGVDc2c1eGZZSk9zb21RMkE1a2d0Z3dDa2RxbXN0OXJqME5nMnFTU1lIWFRad3pkcXJhdVBlT0pSR0djbW5HdGNkdW5pdzZMaXR2aU9ES2FoczdOOCtqckpwM2lNQUgwQUxvQTV3NEtFWVRFZHdUd0YwNGg3Mk1tNGt3NUJPQk5GMUdSNk5ydEMxRjFiTkxSMm90U1NaN3J1b3J6M2t3VkpFcHVxN1R5aUJ6NU1PeFhienpmQXVvQkNRRVJCdEl4Vmw0YlFDWkEraFdMOGlxNWdEOGhoeE5tQ1BhdUdSeXpFbEJ6RDFaaGZYRytYWDYrVmRMVWIvUTlVRG0wQ3hXMHN1ZDhrYUJNaTRjRkVhTzdJSGZEQmdJa0EweGtBazQzSW9jSU5nQ0JST3NvbHBMN0hjMktBdVJDVGg2OXFkVTNjbC9EMFNpVFBUbTlmZGFTNTZlNDh2UldFMUxrVDkyZTd4WjM1R1VocGFrK2wzVDJyTE5lRnRBUmFIc09ZZENpVWhRSElOa05wUU0wYWhiWUdJTStrS3F5Sys2ZTZUQmNYSS9qOGtTYlBUbVh5NlM1V251dTV1K201Z0tzbndWMjQ4djBReWpBaVN6dFYyYWQ5b1l0M2hBd0NNd0JVelZhV2lSQ0V5U0pKWVlVMHBqQXVHc0o2RFVrcGRlYm1FMUs5ckNnYTYyNFE1dm85MlQzUjcwbzZFL0ZYRmFubGwzNEVoR0JLM3BiT0htNldkOEMzUUVXUU1DRDNGU3lLdkFoMExiS21zaEtFMFhGbVpET2lmVGRTOTY1SkdreFh1NDAzZDNOL0pSTjIzVWE4NDdkRjN5UnhJVGtwWlh1Y082OEMwZ0VWQWpNUFBlbFlJb0VUdWF2VmtHV0Y0Rm92TkxSNkswVWh5WVJ1TU5qYmR4ejBwczBseWNsbmozdlBqQ1gxa2FYV1BicnhCQUVVUU1pS0FwWFFKZ0tjQ0NFODNCNll0bmdnd1hYU2oyMjcyNTRXa2JtMVZ6YmQvcHF5bWIxUjJubmI3aTJ6N1orN1BicncrZ0VSQVZRS3JuY1VBVVdJY2JzSWVsbEV3VHdmd1d6VEQyVmFpdTRlKzJlT3ViNzVVY3I3ajN0K1NFUWxXWFo2K3ZVZ0lhZ3A4MkpqRWs0RkJCYjFFOURJZFBDR2o5MDlzMU56dlR3OVIyTnh2ejZnMHB0M2NlOXBaejVSSVZiM250ZVdnSVpBcFpLWHlNaWNFOGlCc0VmWVBUNlIyQ0FGbHlUWVB5ZHFHR0dsU1Y4MmRwMk4zOG1uVGs2N3VQZTM4c2hUVTFOM0xqdTY4YUFFTmdNSkw1WVFGb1F3UDZONmlibGw2TVFrcW82VVRlejF6MDJWTG5adm81K01xRmZjZTl2NFF3eVVyZUk3UGJlV1hlRzBBaWNFYkViVUVsb0dEaGQwZEpwZktlaTBJRUZ3anFFdmJmTUtzcXpYUzQ2ejBCUGFmRSs4MVpvODd2bEhhdTdQYnJ3bUlDSzRLdkl5aTFFQVVjRDk5MU1MZExCT0M3RDhiNjZDK3pxemFrNWFxTjlrNWZ5RlpOMWJUSjcyL292bHladlZyUGI4VG9DTTRHUUdySkdKcFVDS2hDeDQ0aTBpZVJJRHVQeVFwemI2VlhFNE1XcDZ6cStudnBTYjBxWjRyNStqQVhRam1vNzhHWUFSckJTaEdGK3lNT1lRWU5MUkc2SE1HaEZKNGNJZGZMd1lObzYxMDNZM3I3UGQwdTd1bnA2ZXUrbm8zN2dyWnRPVG1kT25lUHIwb2tGOGRKK2tVMGQxMEhGalBHUUJFb0pTRUVuSXdISVg4a0F6QWhCcWhYZVlJeThxRGF2QWFCaXVOdHBCcE1SNk1URXc3dXQ3UGN1dmZOTlI3cDd2UkhKdWlQelVidzhzczE1TkEzWWtHZG5ZU3llOU9GZnAzd293Q0ZJSDFIUXhVQ1dKd2NZZGdsVEVkaVBReW01RkRUTHlvSmhkbSs3dFp3M2xZZkRoazNjMVVITFN0elVyMnZQV3V0Y3M5NkFQZ216a1lJNzA4M3ZKZ21FZFZ0VzExdVZ1bTcwczE0SDZBUVJBVTBRaGVHVWpnbFlNc1Nac1pYdEl5SVlqU1BZMXNXakk5UmFYSThzajRTVEFwMHV1cDNtcnZpbzFOejF6YzN5OTlNZzhpTFc0RjNVZHY0Z2IreHBVSTR1UG05c1VkUVdJSHZDakFRUEJGd1hNaW55UVlCQmdXY2EwWlNwUmtxQ2tSeHVPYlhub3ZYWFhjU1NvY2xOZWJYbTE1T0w2V2U2OVV0THQydktFNENScHRuVTcrZmgxbHpwWHFIcGhpS1QzVFQ0WHpqdnBvc1dXTThLTUFiR0NOQUxwRFBSaHEyQmlRTXFVZUhaYTlJOUJkQjNGc054d3ZVSDNFeFVuSXRiR29rbUxVOUxVOGNMajFLU2JaVld2RmVYbTZRbVk3WHRVODZkSGJMRC9URnhzNnBRTUxieDY3aXhEd09VRDFnSjVCUFFTMHhScEZBVlVNSU1KeVhxWHBCTm8rQ2xoZ1RCbEV6T3l6cTY1SWtnS1NNOHRjc3k0NHN3YWF2SjdwdnB2eHdsR28yS0NEK284cnZlNkZ1ZEtWRE40ZDF0ZUdHQVh5QlFZRGNMZTBMTUNXd3BnVEkzS05UakE2aWZEZ0hZSnlVdWcxMDFyT3NpaEhzYjVXbnE2V2I3akpxUFRjOVBXM3hNTHhnM0pjT0NONVh2MHBvYXlmcEtpVWE5eDd4WHp3aWdBWGNFZ2k2VDlZbE9BdUlPaEZ3ek1zcVIxUjJISUlxU0RCcXFtNWFhSkloS1FrbFJjeDVtTnpkajlHNXVibHJ1Ni9rWmk3blM1RW02NFlkYk8wVjY4K1VEUkVsZFNlYVljZDFORmpmQUxKQUhnQVRPTFFKRUt3ZUFFd2hCb1U0WGFSUFhRTFNNSDhIRUlhSGNWWHp5UFdidHBxekVROFQ5OTAxMVh6UlVNa25UYzlQWGZYOEEwbXBkdUl0clpwWHNhK2dycEV4MDRtcUI1VWM4QXVFQWVJSWFDYWlWT1JhRm9IdUVJVWpjK21ZVUxjVUEwak1GL0U4aWZTcmVLb1Q5b3F5a3VNS2JPVEV4NDZ1LzRTQnNXdHAwY0R5b3dLOWVoSjVkeCtzZjFSeFhrYUsrZUdJQUZsRjBHb0gyTzR3RE1IRXVPc0Y5VVA1WmRhNVVyUXVHdTIyakhyczRYNDZ0cGUrL0QrT2k1TDdvNjZVcnZlQXlrWFltUkFvQytwRHBIWWlGeWVFZE5JQ1dhbTM2NkN2WEwvL2dBSkFNak9TZzVmUjBFM3lPb3ZtRTZORFVVQjV1clgvK0FsOEFUc2FoM0o0eGtWRUd3eVV4MFVRdENpSXdhQTBRS1pSNWh0MDNhUXh0U2I5eDA2YjlBZ1RKc2srZ3FkL1V0SUhUaWJabzd6d2IwQWJnSVpGMFF4cU55V0JLb1FnY0RLSzZuUUdZcUQwSitSUGpXcHQ4MXNHVmhZQ0Y4TmhINWVhMmVscSttNXVQVDNpOFlFOWh0QXR4NjZYRmZQZzBYUGIxUlo3azZWNjhHU0FIUEMyZ3Z4aU13OGk3RGtDbEJQUTBEZlY2V054K0IrYkZxYjlyS2lWcHVTU0hVU3lBVTExOWZPNmU2N2pUYlNycFJocERvVFc2cTNuZTg3MkJVbHlGQkthUFFvNnEvQVQ0QU8yREtpS0Z3bGVCY1EvaEppM054MzNrUXlob0JTd1BpTG9STXBHM0dIVGJWMHlWQ3FOMXpWeTdvdExwRk05MTh0SzA5RzVZQmREUkdtbWpRbldlVzZHbGwzaGtDcFFKNXFiVzVpZGJkNEVyQUVZZ253SVFFeWJBbFVHRUFWcUE3c1JnVFkyU3NiQzBGc0hLQ0RpT0UyRkFTakhxYWFzb2xRZng2RTZMYXlVUitJNi9kS2txY1l4NjJsVnI5OEJtTDBWVHFZMks3Mytpd3BHamFJdzA5cnZBVUVBUjBJaUJjNFZoRUMraWZBbmNxR0FKWFVJbGxpUFlZVURNd2NvS1h5bFMwMHNrWFNFY2xEMlA0b3VLUlU1cHBkWllsbU10RlEzNmVsY3hqZlRhSVl4ZjFOVklIOXgxVTdzSjA5dXB6OVJqcEtHQ2FFMnRUMjhoM1hjMGRaSHU5S0FSK0NkQWJvVFF3Q3dCUndDcGdiNEQ1aHcySDNabHd1d3hBWElGRWowSEZ4dGNHZWxjd0VPRzBhaW9LRWVyWldNR3VuQ1dQUnhLbGRibWtuY3Y2QU1vU0IvSlN1TUhPTytsa3NkbjZSVk11Y2ZUczI4N2R6eXhkWjZ3QkJZRkxBZGNOZ1lqa1A0QjdnRmlnekJQUW16akEzRFpDOWdwa0d2RHJDNkRVOHdsbVd0SGtsQVpXUDRWUnExcjYzWEttVGZtbE05ZlhiUy9TMUo4TWdZaTNhMU9YcnduWEtxNWNyYkZuZG83clhIV2U4U0hKODZxVXVqY0p2SjJ6ZTFWMTBiemtkMXo1ZHpvOWVhK2VuYm5aNitxamtBUm9BVThEOEJhRUljQVJZQWR5QUlBSGRJbGRsT1BZOWdmY04wQllBS1ZNRm51U2R5eXhrYmtvSTJzVFk4ejNjdXUxeGlMYVdUR0xQVGZLVjVNZWh5UkRIYXRlcDFYdkxZVjFuY2V1MzNFZWNiWVU2ZVhjOFYrWnYwUUU2QU5VQmhnTjZSRmdTMEJCa0NadzRoWFBZWEtCUFNFWUJYUTh0S1RGU3V6TFUzQXBoVTdEQmtrM3ZtWTMxa2dwbkNTYnB2bE45NmczSWFGTE5FSTBNT2pTcXBVWGJibTZqcVNkT3EyTHp1cDMwUVNSZm54NG5tOXg3VzRXdE94ZjJWUFJ0VDFUWE9qMXhoTUpmcnA2cjZkdWdTV0UzQUlkRGowMDRXUUVGUWM4TGxBdVVjelF4Q2hCQ29HYWpVMG82TlRVRnJNUWQyVEl4Mjh1ZXRlemM0WFZYM00zZCs4VktLdGRsS0xzOTRzcmVtR2NZM1pPUzEwRHk2Y1dJZUNXd0hEZ0VQRE1BVHFjTEJYUURwd3dnWEJIUEZ5M0ZFVHdIc0ViV0pBN0xETTFQTDZ0WlRCRlJMS2pTelBYTFY4Y3pmVGZYZkdOeDY1Q3JpcnRDbjExTTMwdVZkVXN5N1RyWTlkNGU3VHZRQ1NHTG52WVQ2MWV3cXR5K2xhWVdkWENibnJuYWJkc3Y3clYxdXU4QnNZR0RnRVdnV2dUR1VBc0FIN2daWEJNYVc5RlR4ckR1RjJNeVJacU95eVVyV2tFUTlQRzdVdzUwYjVKYTg5MGJhbm8yZk9VU3JlbkR5K0xPZXdKVVNRcEc0TU1udXZvc1hubEVRd0FqSVY0NG1CUEdJQTM4RFBScEZVdkNXRTQ2bTRjZ3UxTnFPbnVoT0xwSkJGcTltTnpmU3ZjOXh4TnpjdFR6UFQwOUk4a0pVNkZIcis4bUVvTTdjY2xQODA3VHZxTEszamFKVUFpb1ZZcWtJNGhLUUR1d2pZT2hvM05VZlFLUTloU1JGZWV2Q08zUEZLU1FDTGU0M2pjTW5tYlducHR1Nzd3V3NWcjAyMVdLRWI2Vjdzc3pWSFdSdSswOWRYeVNobGZGTTlrM2RoMC9MTEd6Zm1JRTlBRVVoQmc2V3BLUUVHeFFoT1Q3TEtTNVhDNEE2Z0s3QzRGQlpIc2FaS1NNd1pCR2duaVJaU1NSdnJNYk9VaTVUNjV0bzVNYmowc0hPdWcrbjRZS0hxb2J2TlhManQ5U2syZUsxbGwxaHNDVjU1cEExS1p3dDFWRmE3TUYybjkwY2I3dFVyeXM2Y21vN2R0SGI0MUhRc1lBZUFCRElQaUd1d0pFVUFDSllOQ0lpNDFOVnVMZzNPQUNTTWlUTFRVNU5Xekk4aGhndjRPQ2tJODMwSjdtV2lvdjNYRmVibTQ5SWpoMUlpZW9TbmdrZk5VcTdHWThkUHFhU2JIVHZwcWpyZjRGMFhRWmFKRVVqam5zZEx0bTdMNXBhTncyZTZlS1MzUytjcWJpdFBkUGMrTnpjOTFoTGdHaWdNdEJQZ3VGSW13RkhnUVJBQytCOTF5cVVwWkUwTEFJc0VtQ01nYk5obGUxN1U2c1BwdUxrRmhIQTNrbnV4Zmw3dG9nSnZwMjF6RHBVcVpYbVRjdlRuNDZzWWFlYXM0cjgrL2tOWk9oMkpFSGhtcHhYMThXTGFVZUg4QVJFQW9VSDREa01EUUdoQWdDQUxvRDVCOGpzekl5bDVKRTJJeUU0REVDNktYZGZUZkdCa0RzMkVaNnZ4dnk4OHVwWk9GSml2YlUyY05HSnhLNi9JRXlUc2hxWkpjYU91TUtuVHVuUFpkT040ZDdHc2k2YWpzd0RST0JIVTlBUWhZTFpzRHBaVDAwZVpLL1U0STgyTHBMd0NSQVdjR0VEUjVrQlFBQ2VnZG9ES0FtSktVRkVhR1JHUWJBUlFJbkJxUlJENmNHUEdCdXkwY2lJaUxoekJRaFFCdVh3MU81U2tzZTFKTE9HcE9EQmRTWkpHamRlYjB1R1pOTHB3djUwNnJ1K2dWN3pmb1NJV0I1K1VDSW9tRE12YnpZZFZudVN6ZCtDa1FDT1FIUkExSWxDaWtFTkFWaURHQ0lFQVVFVFRJeWtvRURnWnVEbkJobEpHTm03c2xjU2lVSWtJYTBjSEVtODlhNlNXbGpqcHE3bFpxZThtRVlKT2ZUUWV4TFMwSHQ3UFQxeTQ5NnozRmJsV2VMeGNWRUlqM21hVjVlMVBUcnJjc3l1ejJTNmJWV3QwOU5SNTAzQ2FxdWpzM096ZlRRUnVBUStBWWFCSG9Ta3pFSUREZ0J3Z1BoQ29BeHhzY1BJNWVJZ0xvQ2dSY2lBQk5GTXZYWmFhWk1oWkRhSjh4WE9iNWRkcG94bGM0NmVXWFpubVkzM1hnTGVrWWJMU2dWdHZTelg4SG1LNHVQeW1aR2hxWHE0U3V6Ulo3d0Nvd0doQTFBYllyeFdqVVZBM0FmY1VRNnJLTlhYR0FSc0hLRjJGRk5SMWFtdWlZSk40cGxTK04rNmJ1MXBYbm83MHRYYzNIdERVTTlkT2tKcTlDUHFuZmtlMFQ5bWxCZzFZUjlDYThMK0F6NGJROXhTRkpFRXFHMGF4M2xaYVNjYThNeHlzWU9NSzZjbDl0TEQ4WkVybG1wNk55dm5UMDlHN25wdnB1QUxrRmFJTVVyNnZqenBvcjlOZUk0ZXlPbmJUU3paM0M0dUt6NXp3VDRBTkNGMkRURExOaWhZVWNXdGw2WkZ5aXpZaURkSXNDOWk0dWp6Mmh0NHFUbDNQWFBjM2R6dm1aSEZPV3RwMStQS3FlY2U0K2M5Q1VoSU1TNlh0WEhWZTdONFZ1bDNnbmtBVklYSUx5T0pTTDZEalFJamRIckNDQ1EyU2NZbEorcTZnUnltc2tVMXAwNlZ2MGc2OUxKOU5VMGQ1RjMxdEpvNGcyZDhMYUFKOEY3TUdEVlJ3ZEpTcXQyRzFyaG1oQjAwZVZmKzI3d1hZQVRrSUVENEh0QXNpQmx4M3hFL1pxbU5FcXk2OW5OVjdLMys2T2VCN1FCWndTMks0SG5HUWlDdEc1SU1pYnNSdW91VVhiS25wM1c2c3hNTGFPTzQ2dTErK3ExTnMwZ3FkejBxVStnUHp1NU5WNElLQWFTUDQ0aGtpWUhNZXdwQStERVhLVENoMVhLQXRSbE1RNXlRMGt1NzZUZTFBdHVTSFBHSFYxemJWa25yNmV1UFI3eUVNeWt6amg4aVFmV0tzNk5sZmZVRHFSU0hHb00xdXEzM0h0SzFlRlNBWjZGTUNmRjRrQ2NMb1p4UEVvM1dJeXc2eVNTT05ZN0QrUGpLMDd1ZEs3SlVrYlJxWjYxN2xxSmdzY1J1UGRjcnhha3REVjVNNmQ0MXQ1M2NlTE5md2ZTQ29uMFpmMER2b1ZaV3FwaDRJSUFFTUFWUUdtYWtvU1Fwd1p3WEFQZ1BGc2w3SlJMamNYSWNnZEJMS0NUWnFLNlN4dU1URlRQVGNlNmVLclUzUFZLL2ROemZTTkF4STRwV043aXRWRmF5enZvQjNLQnBzMGdmZG5kUndyYnUrRXNCM1FkSURxQ2w0VmdUc0NXQlBHMGlXV1NEbVhEU2FpYUc0UlFxbE4wOXNzMUE0RndQWXRtdWJ1N2xTTlZ6MXl6M2N2YzNQU1hGeEZJVHB5aTlhTktzeTg0cjlPZXdIbUhtbW5DWkJqdGNyZk92OEh0Qk9ZRVpBUlVYUE9SeEFoc0o2RGlsb2FNSnRxZ3NnL0NoRHBaS1N5elhTMFk4SjlZM0pIS2Jrd1hXbG1iSk4zeW5adWU2NXY0RGl2ZFpPd1hXTzc2NzlLbVVNNUtkRWtVSGVUWFpPK0Jjb0Q3Z1JVRElpUzROVXZIOEdXMUhmTWxFZENpbUVCSHNXa3dVcjlMUmd5UitNaVJ4Z2tPT1dsWmUrN3VTSk9NSnZybSs2N014MUdWODdPdE9oQTZ1OTczRjVTVDFMeUVSNXR5dk82NkxHemhXcnhFQURwQUtTQ1pEQ1ZEVUxTSVdIMlBUVDFDL0dRYmhkcExYSkpHNWEzdUtXeWM4UUJpMXRxY3VzanhMYTV2cGFqZlRjd0I1Z3pVQitVRDc3anh6ckxHZWlFc09iRmJpaUMxcTNWTU82WEh0VFhoZ2dJSmdUZ0MvaHVLUlBEZUdkSXhDVlFLZU5rUlNhRVB0WXFyVzVkbGFqQXdOeVVTNVhTTFR6UE16eVNiTjI3WGxxYjhtQjlIM2JPb2x6MkhFRGYwR3JESHkvVGVhbzZ1NDZlN3ZGaDNpQ2dJU2dKaEJrek1ZaFRCdnFVaHVPaGt1aUw2VWo0TFFXby9NbEo5clN0c3FZS1IrTVo1YnFqa3J0clQwMzBlNVpicllENk5ZVktDbGxxbzhodm9oTUxQbXBUR3h2Q1hIVzJXWCtRQUNMQXRBSVVOQldTSjhMSUcrU1VhbnNZVExyQnVEY1ViUnpYVHo3WDRmRmg3YXRhNWZjYjVubTd0VjBlbE9GZk54d1FUVVZxTzNMVjZFWnpCQ3JVWWVkNGl3Q01JUkdEMERpblpnRUd4VHJUMURCUzVpS0F4dGQ4OVBUYTFtSTNMemR5ekZtYlZ0UlpiNlBUZ3FUZFU1Uk5IZFZaWmQ4a2N3eHRNam1CM3ZkaFkzd2ZrQkZBQy94WE5jMG9BdW9XS2hRNWhya1RDY3F5L0VYRzAzTFhYSzlyemU5SzF4eTFkM050MzVNS1FwMDBYYVQxQjdENUk2U2NsTGhlc2UzT2VGeEFSU0FjbUxBTWswTUNnQ2xRZ05vdzB2MGpTTUNnSUdGeGk4cE1kdFNZU3RaVnU1WG10MTAzTnpmNE9KT1ZzOGU5bnlYRVNUOG41V3M5dXZLZ0NINEJZU1l6VU1FUUMraEMxbU9nNU93eFlYVWYzdzZGWE4xRHVvZTU3dW00M1BjcXVOL3BOTk5iM3VQZTM2SWFNZ3QwanVqeTY4SGxBUTBBSy9LUk5neU9JS0VGd3lveDhMbFFvQzVqOG82YjZuUGhjOXc5VDAzMTIrcHM2cXZrellWc2NlN255THoyOGw5SHRWNDRnSVhoRi9KbUVzQWh3VzhFcG5MOFltQWhSVmhQVGNhdWVpVkk5TnVidFhmeXduVncwOTM1ZWdWb0tQWE85RUJCb0FxNU94S2ZoR3g3TTRKVSs5a09FQk9ZUW5vTnc2YzA0YjdGZmU3bUhOdTdqM3QrVVNMRlNLejI2TEx2RFNBUXNCUmdTUTBRQ2xYREJoK2wzUnZKNHVFRUtpL1J2WmhjZVdLZDlHOTNldFhjNThxRFRJdW51UGUzOExiVjNaN2IvQmZ3RU9RSENDVDVaTVhCRGdXMHUwdFkzcjFjTG1MUmVGOXpmZGZMRDNmWDNLdTYvY0hpVFZUbEhIdmIrTEkxYU96Mjc4T1VCRThBc2daRXk3dEFiNkY0cDF3cGhETHhGaENwZGJFYWoxMXhWNTE5R3FqMXEzTzgrSG1hMUhLWjQ5N2Z3aUxZM2lPejI2OEdHQVJNREVHd3NpS0lDUEFGNGhjaWdIK1JHSjVHTEZvUTBvbEU1Vzd1bG51V1VsT1ZMTjkzVHZUMTgzMjl5cnUraWlPWkJxYVB0ZExqdmZUREdSWUpwaHE2T1lLOW1vNTRkd0NMNFE4TkE0bHhxd0NkaWNiampCRFNKazFEOUUwRkJFRWFhcU5ObTV1UFluamRTMXNhcVBjYnowWGU0cEc4dWppZ3IwV1hlNFNCZTdKdytqcDJIbWxuZkJoZ0lPbFVnRFVTVEF0QWUwS0tVU0lzekxPbUpvRFJoT0JMRE0xdkx5dmxLVnhPV1M3VTFQUlV6blhQU2NSYW5sVnk4cG03MVNhNEhlMzdBekRDblN6czF6enV1aTQ5ZDRVUUJENEdrQzBEVWtEWEZ3RkxCQUl0U0k1WmU0S1NNcEVYQ2VsT0hMUy9iTjUwYlJFbWlSWnZPekNlbXpHVERwN3JsZWIramtQS3RsTGo3SzJmcGlYSlVFb0haRHdha0JBNEJVSStoNkNWTncvd1BaUWxoeFNJbHk1R2JoUlFpRmRiSUdDT0c5TDJqRVE4VUk5OGNjMTAzSnhKd1ZHclUydGR6YS8wSHZxVnRPdE9Ia0NCZCtETWdySlN2NmFseDFSQTU0Q1dRRDJBS3RDL21BNGpFRDNGd0Y2aDBtdzlJekJaU1VTSUpzVVlpUmVYVFhUc0daWk1TQVNGSTNaVlhMWEVsdGJ1WHU3dnZSQlh5MnRyZGZ3Ui9uNkpHR08yT3YyYzhPOEEwSUN0UkFnMVRFTThHS0JVSUw2TWlrMGFhWUwzaU1oeWtBS0UyazJPSzVhbGlrcFNEZXVOdkdGejB1N2xKVWxlVnVabm1sZG9CMVdVSnB6VkZXZXdvcjUrcElDT1FUVlhQSHI5OGNnMEE2QUNudzNWeGFBMXBnRlZDQmdhQ3VLaHVpS1kxTENiRnVSU2tjTG1Gd2xhZU1tUi9KZWxPVWt0TldaSEVtSE5YeVNUaGVOOVBDOG1zMHFPd25xUEg5WDhpVUlrMHV1bnJTNmNWVnQ4Vm5lMENPQUtFQWJqMWpHRjlCekFwd2Z3dGFXMG9Dc1pFd0ZESTRkUTZzOHA2ODVkYzJGR3lKdzVhTjBtYzVkZmltdFBTemNzejNKUE15S01HMU9KbDdESDFMdnMzRHlwMHZ4cnAxd1kvUEJLb0FlSUN6RFFubEVxUUJBSXNRMmhqempiVEFOQVp3Z29YZXdmYzFhbGFkV3NYQnhhODJZVnphbFN2TE11bTV1NTVkcVpHVWk3bEg1dHg3dkZuZmdVUnpJTTVzczdManU3TE5lRXlBRHZBQmVHa29EUUg4U0FGQ0JPeWdFc09KV05XRWdpQThDTUNGSEsxU3ZMWFd1dllYaGN5cWUzVjVYVzZXZWp2U3pGZno0a1JqZmt1Y3RNTU8rZ1djL1ZJNndtdG9uVFNMRHE3blBCeHdjSUdmQWtZSkdzQzZBellFb2g0Q2pUR3BJUjlBVklNNEhjWkdRZ3F4aGJxcmxKd0lDWkVuaCt1S3pwN29qNnkxM045ZmROdGM4aUkzNU8zVldkdXAvMG9IRkszME5nZTlwV2Q2UU5RUG9Rd2ltdzdpWERXb1NRc3pFb2NSbGlPUEkxRDFJOGRMcm5wT0ZCd1BuTlNweWJoelM3Vm1QYzMwM1BSNjUxQkx0ZEtaTk8wZU9MRmVsU3dnZ3hLZ2M2cGNxZE5lQVYwQWNDQXRzQlFZRnJpQWtrTElEN0Q0RVZpS2h4TWp5U3haak9CN0FuSkpFTERoR2dlREptVEJTWk5CZ0NBS1FkQW9MWlhOMTlTTmNOL0M0TWtrMnpOcVdtWjVlV1JWTGxzNmlmRFdOcFhiZEh1N25sb2syZTF6REZXODc1dlQydkNNZ0VPZ3BJRVFFYzFNUVBXQk13TVlOWmFTR0pjTTQrQkNJWUlXZ2hBOHJPWDJ0VzFrVGdkaGdIU052VGMzQzVTSEJVS2hoeS9TdnpkejB3SGRNZm5aSVNNOTdjd3IxTmZSSFJUVHFIQk8yNVcrTkZuUEJVZ0NMd0Jkd3NRZDhkVVljSUZxQWRNS2FZSXRVU3VzRkxDb2lqRTJVaUtyckZoL0ZvWWk1RnM3clZXMUpVdHE0OU45YzkzcGlrVDliUHNTODdwOUJpODgrUlYzSlozTG5jOERFZ0VJZ0hOaEJyUThHZ1BxQmpBUTJGcndvd2dtYUxoNkNFaEMwUkg2WDFOM0VhVElxR1JKcWJ1TjNObU56ZC9BY1NjbmJnbzdUenQ5QVF5R0wyVGowZDBlVjRRb0FlcUNaQXNoUEtRZWlrSDdKNVJKNU95RThiRklkb0RzYjhkOGJuSE5OY2VkM2VsMUtsam1lZmx4OXQzaGVBRHN3VElVa3JTQkFGM0haRWgyWVRTSllWdkkzMGVWZlgvK0Q4Z0hNQS9RN1FaMVFDWHc5VFBFMHduY2dQRE96aFdaLy9FSkFOOUI4QnpURTFLbkYwVVUwcHAxVVUrTFBmL2orQnM0UGFhNzBwZ3VTbE5PenFvNDRzOTh1L3lxQS9BTFV5bE01MExnYnBaMmNWRHJ4Wjc1ZDh1OFdBR3hDQmlrU3A4U2hiVGJaMDZIWGl6M3k3M2VVd05lRUJUN0NjQjdTZms0ZEZLQlo3NWQrT25IZUZhQWZJSUFtU3BwU2kzTnNuRG9wUUxQZkx2YmQ0NGdQaEgwbUpVc1F0YlI2VW9GbnZ4My9vR3VoWXlZbWwwaUROSHBSZ1dlK1Q4dS8zZ0YwbEJXTEJNZXRFRHYrZjlHQ3VTZzdXdytvSHJSQTcvem5sNEs2RlBHb2g5SjR1T21pQnovOFl3VjRwb0t0VVJZSjQ0ZEd1Rm5mL3hsQWRNVVNEcjRoOUp6MXJDenYvNGFBSytLTDByNGl4VG5yUkE1LytHc0E2b3BZVEVXU1BTZDB1T21pQjMvOEpnQ3Z4WEtJSTNpK0ZmTmlidVpVdW90N21QK2M4R1FCV0lQeUt3Y0NJZ0dSRUswbXpDWHlnMmQ1N3YrTHZBaVVCdXdRc0NURE12cElXanBkTVMrYXlITTUvem5oVVlBb3NMUUtWSWdXRk9jRnJ1MjVwMTBvblA5dlBDcWhWUUN0QWZJY1NRUXJIVVdabmpNRWMwZ1JwalowNU9uZDMveTd3ZGtDcmdNTEVOSVEwanNQQWVnZllad3o4d3ZUQndjbTVTTURDZDZhaTkvTXMzUGR5cTd1ZTdsVjM3ZWZMdkFXV0FLNEVTQ0tDc0NiY0lLd3VIWUhHVldiZWpFWUJRQzRoSWN3bzBheXkwbXh1Ymtnd01SdEg4WFpBU3V1N1daWEU2SjVUTFNxMm85Nk5JYXFJN1NLWDByM28wUU8rS1FjaTY5bEFtNk1EcW83NEN2QUxHQjNRSWRGVUtFWEFCVEFLV1JnWjBVZzJWSkhOaWlEU0F5eHFjQlV3cDZncEpKV0tORWc0R2tmNVhDRlJka21kdnBOekVwdENqczV1K3RTazVmdVhraUdSYWh5a3pNTTdWZE51czh4VnVPUGE4VW82c1FqU3lDTHl0eFd3Z2Q4Ri9DY0IyaWxnS3dTQVRRVkFQd0hJVHpCSmRvdzJ6a3hhRm9ZalkrNG1DNjVKSlZzcVRpa2k5M2RtS3hJdGt4c3d0ZGRmcnU1WGsrbjJqOG9KdTQ0cnIwS2hFZ21HUjJqdUNwM2dwQUZMZ0szQjBVNHIyZ2lNQjJZRW1oUFJBRGtaelZRakxoWkJBeGdVUkVCbUtoZ3B6dFhPUXBnbkxGd0xreDd1cHRrZXlVWTkzZDA4dXZHMmVORFlYN25FQ2lGdnc3Mk9udFZPK2lES1NtYnRnaXFFSmdxaE5GbmZLZ0J2QUpFT0RrMEdnYVFXV0I5RkJlVUgya2FZRldIVUVUREtZbTFWVWVYNDVaQ2x5c1NWdTd1aVV5Uk56MXpjdFJ1N20zRG9KR2NseDluRDErbGwzcFF6VFZVZnFjY0VmWjRJS0JMUUV2QU9UU01FMEQyaU5oVkFoNGhtQytsSXBEWUhhRitFMkQ5ajR1dU5EZGxNMkZIeTZRV3hKV3ZZcVlxUk9yMllYMjhjTmNxNlRjdE02aVExRG9hR1BkdjBNR0lKYzVSY3ZLMnVMTC9FRkEvb1VpQUpIbE9QZ2JZbG10N250VEFjNmxjak1zcjMwdWV1MFIyVEdTTzB0TlYwOWZjdFBYbDlhcTVjSG16cUNhUWI2WWhvOGIxOWVBYktBSHlGcEEwQWtCT1FmY0Q2Z1hhR2lESkNKaFNCT25JMWpJRGJpR25KdVVncHd1Rm1UbG81b3FtQThrblRob1VBaVRYTldTV2hiRlFsRlFsbFFrcERKSWNORXVTVExTbFNHV29ISks5UGpFZGVyNXV3eGUrUkRORWpkbFU5dlZkTjU0RHZRRnNBcTBBQ2tIMkhVSjRFVGh6aUtCM2kyaEp2QWxES0h5d3pRblJCVWkvZGVISWRJdUJxYWFHOFhKSnlYeHRTTnB5cG03YmF0Zm8zUEZwbVdwcFFHYjVmb1k1eXZQUUozcDNUcjluUEFMWkFCQUViQmQwWTdtNGxDQUVPR0Fob3BabUYyTEk1cXIyT1JkTlR6YnYvd01MQWhrSWREYkp3ZXFCQ0llTGxEbHdVUmNvT1RmbGVxKytjL3dMekI3Z0w4RXh4UlBvaEVCQUlTaXpteWNvM3Yvd2dvQXFvRkVpV1lOM0pRdHBSSjBvY2cybzFtcHc5dnYvd1RBQVhNQ2d4b0hBMWxrVnhPTmFRNUNjeDVRTmtXNGU1OHUvd0d4QWFJRUhqTUZYVVVPalFlMHVmbXp1MnBnd1dOLy9DeWdHVmlGbDhPb1U0OGp3WGJVN096ekRNWEhtTy8vRDJBZWlMTEV5ZW9DQk5JTlYxQW9Rb3NkOHUrWGUwQ3p4WTZsMklnUk9QVk9sbnZsM3VsM3B3TlpEN25NeVJBbVQxVHBaNzVkL29RTllEN2NsYkZveTQ4VTZXZStYVG54ejF3V2VMR2t0UkVEWlBWT2xudmsvL2hJd05iSHQrMUxoL0p4NnAwczk4dS94S0FQWUZraVN2bHdGbkd0SGluU3ozeWYrWGVHb0E5MFA1SHFHVDR0VFU5S01DejN5Ny9FMEJybytsb1ZaRk5DRE5WSitYS2lsQXM5OHVkL2h2QWJBSUNMNU11VUFnNXRGMDAyNHBjV2UrWGY0bmdObEJLd3hKbHRRQTl4UXJIVFNvNDRzOTduZkx2QTVJRzBDNEkwQ0psaUdsRkJpREh0ME8zRm52Y2Y5M2hSUURsZ2Y0a01GK2krRDduTllneEZOU2lIWm9zOS8rQkdJRUNnd2dhL0pNR1FYWVdTM0ljdWFjakhoUzl4WDcvbkhaNE9RQWZVRVJrc2NobUhGY1F3ZXVKeERZV2dpYTAyMmphb1VxaFp2ZlcxZkhYWDA5N3N4elovenRMNElwQVF4QWRhQnppNFNnYUFhNEY4QW00WXhMUlJvdUdxQVB1TEFXQWJISW92Zmw4Tmd0V2lxU3V2bk45Y21NZVZkNEc0YUp4Q2JlbzQ5d3NPK0NNdFR1eVlXL1BCMWdJT0FYZUQ0Rnd5bVFYOEdHRHNCL0YxS08xbExRcnc0VVluaFlOYnRYY3RORDJIUTBTVnpkVGR4ZExTa2xtNTdjYmtoQjZtcjlkTEQ3NHJVVjMrd0pKYURiOTZ5dHRGYlN6bmc0b0IySUg4QXQ0SkNKVVBnRXBBeW90d253V1VxRkN5OGVBdWJ4WFBDN0NpTUVrdlc1ZVRnanJraXgrTWlPa1psbUxqRVRqWExtRTNQYzFOOVBXSzlHbnFubWRjamNlOVI3cmNQWU1XclB5bUljTDZCN2VsYlpoWHdBeUlJRUhNSzBHL0FLSW5EbUZtTmc4alVTUjRSbFVPbVVndGh0S2hHS2hIbzVEY2xkVEp2RWFiYU11V1VyTW1OcWJaaTFQV1l5djF5OUNXc0VHV00zZHJZNVVjOHpISmtYak9TRTVCVVh4cm5PanNjVjFpdDNpQUJSZ09zR0tFbzBhZ3FvSElBODRoNVJLSktLZytOTWl4Q2VTMExVVEJrWTNhbHBwa1d4aVNWeW9TKzY3ZmE1Z3lwNXE1YVV6WjEzRVFpTUpaZGlKMER2WFZoV3h2ZlJtNW9oZEZoakh0NWtibm91UEhOMDQ5cndQWUFIa0FETUJsZzdtNGNRT01BcjRRWUxTRjFIVGtoZ1lrZ0dsTWdpTWZvSWpZcDdYRFRLNWlOWS9IS1NKd3N5dlBjY0pDUk45MDlHN3VQUUk0d1AyZFRXK1hIY05vc2I1RUtEUnRXSUZwNllIZHpwWXJ3SmZBSW5CVUR5YWNDQWhENEZGZzRJT2dTQmdMeU9jUUdNRmloQjRvQWFNUWxjeGxRVW9TUFpMRHZFUEVONFJrZ0NRMUppMWRrZ2JoUkZRcHl6ZG1MUmhKdzB2YldvaU9oaTYxNzNGZXg2Qlh6WmQ1YVJoV01PMlNkMDNSMTNYWlh1WGQ0RWFnRUVBVHlEUWlUSDBMc0NuUU5MQ2tCUFFhTUdSQ2JEc0xnUkFXNEV0ZzNhNE5PRGpCM0NiR281TWxqZ1d3WUlJckJZSXVnSjdDbWhUQlJMdEZReU1yRVVFSk9PSlM1VlVqU1N6aG1UY3FrbFlwb0NmdDFKKzMxYmp4OWxldmNCdkVabW1sZzFhNkIzYnVoUjd6TUxsM2dtZ0I3d0RWd0ZzbEFPRU5nTHlBVzhDbndIZ0NJQXdZMWtZNUVCVWdTZ0p3TUtDcGc3bVI3WEhacnVEdEh3Yng3SllDM2hQamFVck1GMXpFZngvRHVCV1lRdU42OXFPNFVBL0ZTVG5qa2FqTUs0aWRtVHFpZE83dWRLMndsNVhkNUNJeGlqbDhYOTB1VjcwWEh0MDZ5djIrRU9nSTZBTkNBbTR2RUJIUUVlQVdJSElPUUJTNnhmSkpFeUY2QlNRaFlPbVBJVW1USXZLSzNQNW9QQUloQnpnV0lFS21KenlRd1dXc3FKQVZUSndrYTVTMHZ5UmRTMFNaVER0czFLQkJyT25uVGRGYTVvcjc5Smx5RkhMWFdyRHU2MHI5UEJIanZBeEFCSUVEUWc1cUtKR0JIZ0l2QXFRQ25ERmtjK05oNk1BUG9aQkdndVJNQ0ZRWE41VWpVOFFzS09GL0JUaHlEaUhCaVMrNDRzeUc0a2hUeVNITks1VU9UQlNKMXBJeXN1dW5DdE1RaTZiczg2ZDRycU43M0RseUJzaFJzN3VObFoxeTkzZ09jQVI5QVBJREVDRVdENUF1b0xLRGtCeVJBeHBMOElvbHhZQWl3RU5BaWNFVEZReWZmS2VlcFNENERlQjREZVAxajNFcE5XMFA4bFNSK1VyemE2azVaWFhYdTNLV3FiUTlOdDQzY3V0dkl1eHQ1MDZMdkIzaFNhYU9jN25QZzZkZkNPMVdSaGNKNjRIZTMxVjFhcXFEcTN3VjZBam1CQVlCekNsa1U0UmNBL29EVlFoMWxFTTBCcVhrUlFGZ0JFSXNsakFhbktHV3JHb3dNTEYwa1hNQ1RiTFRQV1pMWFpqZk05RmVQZDZZUEpsT2Ztb0tPeWp1R2ZuTWJrNWtNOE1NQWdxQ3FRdlFlaFNOeERBVTZHQ0M0dEc4T2cweUlPSXlJY1AvTTdDY25kNlI4SDg0dnB6MHNJYTNtL2lZbUpXODN3dWdCNzRRUUsxT2E2YWdtRTFKcVdHdzNjTkNoZlR1bm5UM3ptZjRnZ0VDeEZqVW1jNUVGNUtTT2tzN0dsamlVWlh2citjL3dzUUVDQXY0NGt3em5RTGZGZms3T04wTEJvc3MvT2ZPZUs4RGJRZ1ZuUndtQVhzVjhKU3E5RmcwV1dmam4rVVFJQ2hlZTFObWdtSVZ1SGhVYUxMUC82Z0NBWXU4M01rWFk3bm84c2xudmQvb3dJQmk3ZHJza0V3aXNpNDZIbGtzOS8rUmdEcVF2TjZneEFGNE9hTzNDdlpMTFA1L2lXQTIwTDR0cjVlRUJpdlFZNVhRc0dpeXovK0M4QVFJQy9ycGhISmFBdDhQaU5LOUZnMFdXdm5QOE40Q0JZaXhkdHl3RjVLU2h6cHFOTWlybFFWKzd2L3duQUI3d1FRRW5UbDJsd1A4YXJhaDErMWlNb1dqbXNQTG0vblBPM2VCNndJTEFGbkF5NEZsREtiZ2NjQndvWUlHR1pHR0Z3THVEaEVaRVBHNWhiWHQxdHlTeC9NWnYzUVRIMnorKzZDWSsyN2ZBQnJBUnlBT2lCMVNndWJnZnNEYUFIbEEzRFBETThhbXREckFkWUdKRXlzYkRWdkxNOE5SdWthRU5PRWh1U2U1ZGZ1TW1WdU1lNWE0clJ1L2VPTEl2T2x6MUhVZVE5eG13M2t3OENjZ0VlZ0R0Z3FaQWNENUlRSGZDZ0Fid0QxQjgwYXlMQVBrSTRCMkFka0RIeDVIZzJLU2xjNFVqeVVoOUREQlVSK0gvaGFNbTY5ZEpBU1ZKRnN2UE5TdVZMczNhdnBGT09LVnVERThkOVZjVjk5Q2FRSVd6cUdMOE9xalJYZDRIN0FSL0FlV0NaU0VZRVVEUWdGSmdMVEFlZU1pRW95Y0NZV0JTV0FxOE9BWmhRRzZsbm1SNlpGQ0hjSE9DbWxnY1F5V0h1Smd1Y0RhY2hUeW9LQ1VoSU1URmNUcTVJdHBJYm9Ta3dnU3lsMjcwN3Flc3JyUXY0TmNab0pRTVEyRGVUV2Rrc3krY1ZRcW1wWnVjTzh2SEs5cndPZUFqaUFNNEN2eEppVkhNQjVvQXlZSGxGWUl3S3RJWEVrcWhld2NNV1FJUkU2Rk1zeGs1Z3BzNUx3OEFRcUZVQjNSR3g2SDljd2FLU1RoK0tvUm1Vemc0dHErT0xPSk1URmRkQ0t5YXFYSlphZmgwNW1lcWRuVzhtdXZZMUw0dWw4ODNzZG1DcDhweUl1VFdKVE1tQkg1ODhyU1RjSldtMjdubDJsNXhtV285TE0zTlN0RmFWcDZMVWdkOEZnQUVkZ1BEMExvREJBZXNGUUFxa0JkQVhZUTRTNXdIOEhHT3dKL1lFWUJESW95TUxZNE9Fa3JoU1E1QnRINFVJQm9JbnlvMTF0Y2tHMGZ4R2dWK0ZTRStwdGEyaGRFQU50bVVuSlZFY085WmpqOHNudlhORmJiemZnR2dNNW5VS1JJK0xwZ3JXWkxGTlh4WFo4RERBQ0pRRkpBVzZTeVFGdkJDWUJwQmtWUTV4RFJOUEVGRzhMU0VkQWh4b1FZRzlDOERjY2NjR0kyRUFGUUNMZ1J5SWVDd1E3QXdvb1NyeGlidEdJalFuYk1oUkVBdXRKd041d1ZESm5tVjZGT2hZcWFORnE0OXZuRmJwZDZjYkVOeFREQXA2OU9tcjY3UGVYN2l2WGdPQ0FJa0FlZUo4akRLUElkNEZMZ2dZQXdRTTRvSkRnNWtmQUtKQ0lBN0F4QWladVNMcEl6UlRIc0hKQ2lpNk1ReEFjeVM1VWw2U1ZoL0RyRzVxVGczeGVibFNrYVdta1FaNW5IR0Y3ZnAxdFFzcjF0VitwQjdJYjZrdGhMVkhWczJ6QTl0dGtyVjRRd0JYNG13SlZGZ0ZpTVFoY0NiUTlnUEtMVU53ZGpZYVZJYndSV0hDTG9KbWpUbksremRybDY0dGpnbFd6RnBaUXYxM3pYWDJ0OU4raEVpTXVaTzB2Wjd2WVdPOG1oNWl0TFhRbGhSMW5mWGRsaTY4TzBHYkd3T2ZpZU1ZYllOR0RPQjBwR2xqRWpyakFOcEpFMlNWQ05yb1QybTVreU5oamFsVE43VjIxdzluRjlOOHMxZmQxOU5scENMaTJvbHQzWjNkdWNWdGIzOVpObWR5VFdHY2Q5MDZlMVRkZThYQWRBRU1CTVI1Qk1JdFJYakFIQUdtSE1Tb2NJTUxNZWg0TWpjYWx4TmtxcFpIbzVPQ2tOUmcwMHlzWXIyMHN2Tm1NcVdyNVpkZHFlNWIrWUxqNkhlWTJhZGNkM0ZUb3VPczh0ZTh6MTlQZkZpTlhOVGxSMDlyd1ZZQnRJRXRBd3dTbm9BUXdETmhkaGFqcUpkb29ybUFoTmp6WU5FSjRkbDVXVXJ3YVNHUnlrRndMazRzM1dhajFtNWtTNTZPZDEzM1JzbWl4REtRYW1wWmVlT3QyTnVMTy9JMHc2cXpvV3RwMHRPYkZ4NXZoR29FRXd1Z01jMFRrQU15TndtaFFJUkxHRDBnMEtBbFJKazRLWmhaaFUyczFJK0QvSnp6U21hZTJwa3lYNXZlYjdwNlZBOGpreE9PUlZhT2pwOXpwVzNwMzBRMG1DR2F5RTkwMGRkTHl2YzE0RGxBRUZBTWJDNE1Ec1F6a0w0RC9sRXVwRnkxcnFSQ0I4cElqV21HOVYyWkdKdVltVjNQS3JzeDlnMmE0L05KMmUxeXQwOWswZXU5RVhMVzJpUjNSNVhnb3NBK1FJbUZnT0k3Y1poY2dzSmduVUpsR1E0dWFndDJ6azVPVHJOeDdUek8rY25QbExuaEM0QjJvRjNEM3lrbURxRDlpQWRzTjZkbFFPNm1CWDN2L3hGZ0RrUkV3ZUZPVDlIRVhSemlWTnNKeVdEaG9zOS8rSWdBL1lMZ3BIQTF6Z2ZJZElac3diMGR1TFBmL2hjQURYeGFoNkpsRXdDM204TTJkVkhIRm52bDMrSUlCcncvR3U5aVlRY240M3FvcGNXZTl6dmwzaC9nR2hpek5OWXpSYk5iT3ppb293TFBmaC81ZDRzQU5jSHhoS25uUmFrN0p5Y1ZEcEFzOTh1L3dyd0QxUS9FK3A0aitUa3A0cGdXZStUL3k3eFVBUFFCSlE0VHNSL1pPM1lwMHM5OHUrWGVhZ2F1SDNtN0tVUU5RZXFkTFBmTHYrQUJtUWZjcGNjNFFJbW5xblN6M3k3NWRIUGVCcXdmZWJIQkFpYWVxZExQZkx2UHU4dUExY2VuYlVSQTJUMVRwWjc1ZC9ob2dzOFdWSm4waUN6dFEyTG91ZU9mUUxHLy9qWUN6UkN6Wk1RcUlvOER3ek96VTFLTG1aZDh1K1hlSEdCb1FZRUhnZ2pQa1ZvNTJZVFUxaWMyNTVZMy84SjBBNTRJZEhlQmM0aUI3RkJHNkV2bDA2VDJvRmpmK2M4T3dGSmdvZ1BZY0MrVUF0QjJ1VStQYnRqaXhuZmtYZjROZ0lxRVREeUtRU0VTQUZuVXd5MjBadjFsZDN5NzNPOEhGRWVBVmFQUXBobHBBRnJDMXNKV050dENQS2w1WHY4K1hUbmdoNEcxQ0t3dFpzTkpEUmxRZ0ZMbVlMVlNHQWZKVVlyVzNLcW52K1hlQlRBTzRDcHdoUVFReUJod1owVHBBQ0lDRXlzc3lVeVFHbWNkWkpEWVNiTnp4U0Z5TFFxTkxqY054SXVkajNGUTRXYTV1MTEydWpjb3lJb0R4aEx5MjlocDA1VTQ3M0ZWZnlpeUhVcHVZcDVYdzlkNEFYQURDZ2lvRU1Ba2tlZ1RhVkFUY3ViaTBDN2pjc0pzTFVFN0NiR0JTS1lveklsV1BLUXFLYkg0eU9lSkpURnNRQ1JTWkk3SkpVYUphUWtybUxKVHN5azRzNXRUWkZJc2lRVGFuTkdKM3RxWFRkTjNSWjNQS0FlU2dvT2VoSWlLWDNXenM5Q09kcDQ5VmJqdlBKWUVXam1DOERPU0JqRCtTRGNOSTBRWEx5NDNEOEQ1RXliaVdPQjNaT0p0bDd6QlN1eTB5dXp6V1QwcnFXdXVWdVZXMWQvaE0zZG5UODd2eWlnTDFVZmhWUzVYRGE4TVVBM29HMEIxSGlZb0UvQVlRRGZBMXErVGJRbEVRZ3dpSmlHd2NEeVpUZTZaTkdBZEZtUlVGMGJrbWJuRithNGJXcjdydmx6aHZ2M2lKWi9OSnZYWjN6ZW50T2pwV2Q0WkNNY1UrdW90ZlBIZHQwVjNUUld6eE5BSEVnTHlLSWVLWU53SHdBZEVCMVJMbUJENnlLYXFFQU0yR0RIb2tGQTN2dVo0NE1pb0owSit1a0k1alBRMlYrWk1XbGJYWFBlVENpa2VsaWdablR5dUxOZThZVGVCK2FUbzVmUjN0bGk5OEhUQWR1Q09RVW9CdVlDZkJ0d1ZvQ0NBZmM1S1p3MFJqSU53eEMrMktBUkZra0tHYnZiSTRueEVsZzZ5b2J0TXp6N1g0a3NuQnoxM2NibnB1N1FrMFgyZGlRaWRjNnJkdXpSV3JaZDVNUk1sdGFnVHJjZVVyY2Q3VGJ2Qit3TzBKNFlnWHNnaDdBOXZCY0NBRE5SU2tOeU1OcXhRU0NkWlhpOTNHSExIQTBtQTFEMnBNWjNjNjVhTnluM1gwOUU0NlBTOCs2dG1sVytLYUtaRE81RmlsYmlCaDRCaUFBd1FBVG9Rdnd0Z1RTQjFnVUJZRkdCYmhEUzRwRDJ1RkJIUVZ5NGpRVThQa1dCeDNHNVNac09ncWxRa2lMQjBraFNidFkwcFhFNlZTcVlwT2E2U1NOeVJlN01aTlJKRVNHN3R3MjRIdTJlMDNsZWpIUTBRdnB5aW41VXVpNk9SNDh6RldsWjNnR1hBTThDSkFaY29pRW00VFVvQnNoaUFZb05PeWdiNkl1RGkwTFVRb04rQmpicDZUa3FDZUtwTEc0UllUaTkzTll6eHdKMVNrV1ZuSFhOOXhvSkJtNHBaZkxEMWUyR04zMFJ1UkRQSlB6Q1g2ZGFXZGJyd01wQVlJRVNoeHZENk9DVGc2andKTmZtbndLQXo2cE5iV1l1ZGpadmQ5UEpHYlZjdTFkOWF1L2lsUCs2T09uSGVDbmdGTEJFSWNnNGp1STQxUUZTOVdnb2R0Y2hhVk9uVmZYLytFTkFRc0VNZ2NFVXhSY25ZT0kzdksyWC8vZ1hFQ1l3d1ltaFNHMUUyQTdhNUZNSjJQZG4vNFB1RVloZVEwMDVPb2RKSGFxUTVDZHlVM2U3L0VFQWRLRmlHRlB6emNWUlFXVFZPenM4eDFlN1BuUEI1Z0MreWxCS3hPQTlERXBUdHJDenYvT2VLMEZmRHBCTENJc1U2clZUV0ZuZi94MUFkTU9pYklSRDZUbnJXbG5QL3lpQ3ZBcldwVTJZTEJPZW1wQTcvKzBCbFNuYzJJc0dISGpSQTcvK2FBcm9VODVzUStZSHJSQTUvL0lLNUtFcFd4WVFQV2lCMy96UHJkcWNsMjU1OXQzNTdreWFzeVQ2YlR4Mi9McGQ1LzNHWm1mYlBzTUh6dDBOLy9lYk5DODI4MVpvN28wNzNmN3gzT0NFbGlpS0pzK1hLNlo3M2U3dzQxaEFBK2dyTnZSRHFVWkxzaE5ScnRqRC84S09EUUNuRDFGSVlhYXZOU2NtM2JqblFneE9mL2dlWUNPMUJSWUdOMUVkS21sTmxxci8vQnhRRkhEa1BCb1kwOE5DQ2VZYmJibGp0eDA3M2ZuZ0tRQXBFZVF0SnNOSkNXQTN5aFJ2UVdkVlVZYnM0M1IxZnU5M2dLN0FEK0JLZ1B0QWtuQTZBdnpoSWhvb3RMNEc0N0RxWHl1a0lqKzIyOVo2Mis1VmQzSHU2TjNmKzUzZ1U4QXprZVEwaE9EVUlpQmFvTWloRkdKOFlEQVp4V0poQVJEdzFrYVFRUWV6STN0N1R4MkZBRThIcG9rbTV1WThZVnpLUWZoYktTVVN1bXJsZXppZW01WEdWUVRzcllSUjJyM1N4VkZuSmQ0NGxKR1JIYlZSNWlsVk51cHgzbllRT2VDSndGWmdLWUJCQWJKSUhZRHFoM3NCZUFneFpOeHNHc0YxQzhHUklPQkN4bVgyVjE3Wkk1Z3ZKeUowYnhwdW1aYVNLUnNKWmsxTjlQY1ZEZmxwNlJIQklTR1JNalZWT0srMlBCaTZQSGVtSFRtYWIyY25HNnQ4YVBkVjU0S2xCTjRVZ1VhZ2FCRWdoUVJFU3dNeEFOSVpTa1ZDTU1zQlpOQ1hGZVBETFVya21iT0RCVDNTVkdiV25MNHlKUE5jc2t0cHBKUGRjcnlRVFFoRU5GdXNRbXFWN3hZcFZ2aWtSYXl3OGd2UlEzblIyYnR2RmJvd1ZVN3dWMEFkNkFDUURqZ0U3bW9QRUROVVVCN0ZnSmg4dExEbUxVVzZrbERjTUErSklPNmg3RTBOWkp0Y1hCU2xycnE1NGUyaHU1a3d1N2xaZWVaOVFQRDN4cFo4OGRkQ05rRHBYZDltVERDYW9Nc1RiMWQxazlzNGQ0M1ZGYmZBMGtCRTBESHd0NEw4TGNHYUdnQXNzQzVRemduNHJ6ZHBvY3daTVRnaVErQnhpZ1oycm03V1pKSktLbG5KVE1MdW0xeDdLcFV2dWozWFBkUFNUU2liRTQvTk1kcm5xMzNHNkt6bTlQTTlHWUVRTW5OMTZLZGhpcmVqMkZiVzZQSzhGQ2dRT0F1SVdoVkZnVDFoZGptTCtpbmE3V0tHSWRaVzFudTNaM3VoZlR6UGRtdDkzZDNmL2hRZ0RvUXZaTkZZczFBUklwc2ptYXN1N1lKeDRaaE5idW5XTXR1L0hmNEUxZ1FGQzdod0FFL0JMUkJSaEM3bFF5Q3prbFNSU2lKWWZnMVNxY0RXUHdsemRicjVZMkpJK2tsU1lsUXlhdm5UMThrT0w3NjNVR1NscUx2YngwMXZnQlhnSWloQjhtSTNCT3dNa0VtRXpCWFlUNUhaRkk5anNGOEtTUWJRVU1FcVhqZHkwU2hHeVFZU1lDR3RMclJ0Y3hFWkpZL2QxMU4yUHhpMjFaRUZVemN1cFBzc1VWdVBkTE9lWmpCYkZScXByU3M4OWQ0QVBZQmdJTzJCcTRUWkNiQWlrSU9FbEFDMmxobUtCVkg4Q05CWkNwRzBPd0luRG52cHM0T0RZeUZFUE1qNnVJY05pOHI4MUkvQ2pPQkVTWGQzeHdWT0d5V3BYdEdPUkNaYnBpT3E3aC9MOFFxay9WUzQ2aFdlRUpBS09DYWdwTUdWRURBOGdZY0tBSEtFUEF6b3NNUnZOeE9pTGlkU0Q2dWlYZ3RVOXhJT1Z6ZElQUW5CYXJ6c3NwQmJDZVVtUlVTYzZKaVZEQys2NVllUXpOOHY1REYrQmpjKzlOQ0RzWHdqdmdQdEFHMEVTRG5BaE1RWU1HQ0xnMWgvQ0hRb3hhc2Nqd0lHQjhpbVlRSG9GQUIxRW0zc203UnVITVUxcnV3d1lteVF1L080azNhNGloaVlYTE5tSXRsMTJqaXpZalVMeVhZQy9zd2VyZmpjSEhkSzRPSzIrUWc4WjJYSU9iMVhuZ2FDQlRBUENKZGdQd0s2WkJzc2s0anVaS0tQVThqSHkzRjdTL2RiU1JTdjEyMGtLUmgxOHNicEdydHBmcjYrdSsrVDZwM3Q1NEdNZzZZOGhxR3c4b2pNa3NJOFJRWm5aMWJEckRxdi93VVlGVEtReXFCMXFBU0xYeWczbFYrNzNlQ2VBb3pSZW5VbjB4ZHRUVThxUmYvZ20wR040aVFOM0pTMU02YWxoVlgvNFh3Ym9XbUo3c0lXbjVQekQveDA1NFA4R25xTW1EamsxdFpHQ3AzeWY5eC93OWRKeXdwMmJ4UW9xcWhPVlU5eFp6NWQ3bmZMS2hXS1hzUEdJZi9wU2FvY2xpNDA0OVloN3ZkOURpYWtGdWc4U2FmTzNHbkZuUC8zaFd4VG9XMEJ1VDZPNk5lTE8vL29SNU9TRWxkZ2pqaFNobHl1bXVMTy84dSt3dEFmNnlXTmxRZFVFMGRHc045M3U4TmtXb2hZNkd5RXRGOFBzbzBpblhWdXpDZCtjL3dBQ2hqRnVPcE1Ja2s0cUZOaWRsODVOTXdlVjYvL0NmZ3g0ZlE2RXd1dzBOeFU5bXkrY21ES2pmL3dhRUdxT0NoQXZsS2dKNmVVMHZiM2UzLzhHcUJ4QlZGRWNBa011WE5VMHdtMVZRLy9CdHdRMkR4aXNGSVJxUWtjMmhpZmJicC9mODU0T2FCUllnQWZwTkdaNncwbEpQakdvNXFYMzMvNEV5QUJvaUloYnVFb29SaHJqdFl3SUpXWVpObEY4c3V0Y2FqekxQUnU3T3U3di93RmtnQ2pCZ2dUUUhpSmtVNUtKYmlLU3RSV1QyaERSRERsY1VJVDB3WFJxTFdaNUdQbzlMOHBIN3JaMmJreEU4U1NxcFo2TjJxNmJJWWtCeE5YVHFLOGw2dnRqVC9EeFVsNHY1S0RsRHBZVjNVZDRNZm5nVXlBTWlGeURCaEJBTUVGU0NtQWVjSWVCWVlRMEtrbm1EekFLZURoaE95cndjMENpdEw1NHZIdDQzTW5BdWhhSkdlNHdTV3NwS2dvWlU4MUhrbDMwM3hhR2NHVmRPVHRkTURxbTN2TE8rVEIxVW0zU3NSekR0Z2QxUGNWblJwM2c3WUJBNERseUlNd3J3VG1CbkFZUUJUNEpEQTlBVU1USU15NElQQmpnNkNPTXdSWUVOZ2Q0SnlQbzhMRGNZVUkyY0NjS28zQTdJSVlNU1N5MVpKS2hrRWJoRmdlRFJMS2p0TWlxeWt0SWN5a1ROSWlDaGMrMEc2OTU1ZDByZEhmWEV5MG03RkE1OHV2c0k3QzMxTFRSMXM0NXRhbzVrZG1IVHRlQmFRRHRnQ0tBQkN4YUJyQ2lCUlFLN0NmZ1BBQ0lCUUNCaUZoeGlLb3hOc2lNZ1p5eUU5SG9ieDZhV0dzVzQyQTJJSW9PUVB5RHRUWlVramtkWWxtQTNnR1dCRndjMGtuaW8wVkYrVXRFb3hNVE1VNkp5WEpUR2pqdDF4NHJRYmNldTh0R1FTWXZ6VTRpbG1EbFdxTW5EMnJSeTZ5dDIrRGZnSTRBRHRDdjdRYTRDSkFOUUFkVUNHUVlrUVl0WERZS2dtaHNBRGlDZmdUK0ZWT1YrbG9rSkpFYU1BUnlFYUJneGRqOFN6Rlk0VTJwS2hUQ2hDN0twaU5Ta3FTWW1KdzBjTkdKd2ZISlpOc3VTd1BlckN6bStoSnBkVHBmVUp1anE3ZXRaV3Z3RmNBcDRCV29Ed2dPcFlRMEF2RUZKQWhRRFN3NzA1Z3lQQTdCZUFSbUxob0ljRnFFek1Gemt3R3ZsSWpZZDQramFOZ0syQnlyYUg1U3NTaVhJUmlIZ0ZQNFhKeEMxSW9yRnNTVkppY3FVQ2Q4S2xNZ2c3YUJhamp6UFJVaGczZE9nZHZqREN6dmdRRUFVTUF1WUIwb0N6d0MwUVNHQWJvQ3ZRcFlGQkE1UVJnSllVSklFUEVHRnNDcGdhZ0d0QldZZUFYc09zZ0xGd0ZQREFoekE1dytEOFBRUlNJemczaTVxdUZxRlRLb2VBOWgxQkRnb2lvUFluU3FWQTZ4LzRVWVJFRk5jaFBoNW90ZmM3MWJPUGpjWVJoZXpXdW5haStkdnEydGRtTjdPVTNuamtvR0FodjE0NXRMTDFpdFF6ZDhkVkZhT01sYS9BTzBBR09rQlVvWDhMaU1RSTZBMGNLU0Jzd0Uya2d3SGtleFFBcW9FTGcwNFJXRlJFTkU0SnlSN0h0Y2trb0lsQnpBeElkUW9CL0c4UkpJTmhpWkZVWEJ3RlRIOElpQ25rbVI3U0dKa0l5Vk9YT0pNR1JJamlXenV5aXphbzkyanZhL1doaGd4S0ZHMC9sZGJMdXB4VzU3L0FML0FXSUVMQ1ZDUWl2RmdEQUMxSDgyWG1qZGhFNTVRNDRYNmJuWmhOdzZ1amx0dTVibzlmZTI3NWQ0R01nekFLVUZHVVE5NzRWbzdkSzdETmJMS05vdVlqVTRxeSsvL0F2TUlqQlFvTUlIa09pRUswS1lkek9rZTlPNVp1b2dWcTZiLy9GMkN4eGRqVW9hSVJ5T1llNWRyOWc2R3NRWmQvem5oYUFOT0hxVTVvOVFIK09LSk5XYk9WQTI2c0svZi9qMkE3dzVZeGljQ3hxTm5EbzMwczkveTd4WGdPNkZZbkNyUW5BLytqaDBiNFdlK1QvK0ZkQTBFcHdTd2lWZVBUZkN6My9McHoxSUJoUVBDbUNyYkVQN2owMndzNy8rYWdaMkt1VXV4RDk0OU44TE8vL3dCWkFxNTFzRW04ZW0rRm52LzBJTElDdXpzY0h6ajAyMHM5LytYQVoyTzBwVDhRL2VjZUd4QTcvK1JRTTlIWVhrcUNJV0xqMDJ3czcvdThTWUdnbE5EajRsWGowMzBzNy8rTklHakNzZWxRNDRxOVI0YjZXZS8vR3dBeFVlSEp5RkVXYWcvTlM1VWI2V2QrWGY0Y1FHbkN1dUJEcDQrczRtZE5UVklEZUdZVisrWGY0TTBCb3dpQTdtZ3dFSWFUWVdBcDRReDduNmoxbVg0ZVEzUC93YllERkFNREI3Q2NKRkVORHhVaStnTk51bnAyaWd6bVJ3NmZmL25naHdUSUt0Q0F5aUdpc1JCQWhYRVZBMHd0VlBJNUVhNkRwaExtM2IzRmkvei9BblVBSUFDK2g4RWlHa2NpNUFiS0lYQWlNeVlWcXpJN0d4Z3ZMRE0xVnJUYTFUekxYWkc3TUZwNW51eWJ1L2RITWk3MjNlQUttQUx5RkdCWVlEY2hNQnZBTzhBZWFGRkFyY0hXSTlqWVBJdWd3NEtBQ25oRXdLUENIQkR4cVVqMk5SZ2NEY0ZVQnhncDRvaC9TVUlieExLYWtmaVNQUVJZSWVEZEIydEdKazFiUXViVXRFZ3hPQ0dKUW9jaGxpVWUwOVc2TlYybmorMmozTm12c1BRaXAreTRHMTNOUmREWnJ1SzkxdmdCdmdSTUNPd0pMQUNMQVZZQ1FRRi9ncHdKMkViQTVBSXhCdEdRY3dDTm5oT0FNUENjQkVZUmlGMUl4eUY5Q0R3VXdJb0xrWFFkcEtYRkNFUG1EUXRRd1FRMEl3TFV4TVpCd1JRQ2ZGR0tCU053ZFpsSTl5SjlvWEF0blhxeUJ5Rk9pNjNQVjg0c2EzWlczd3kwNWFuUVBRREF6Yk11cUxwdm5RNDl1TktKdzhzclZISkExTUF1MENsQUZ1Z2NzYXdUaUMwd0N3QVE2QXNnSndGcW1qY1Q0ZjRHVGgrRlVKOEkySWVZRzY1VVpNUitDaEFmVU84VUl1d012RWFEa09Ta0pvcUV0Y1JjTzRHN0Z5RkhNU0FNV2h1SDhROGxsUytYdkU2RjZEWVE2cmk2Y2RPenNlamptM3pWYWR3amt1cWFySTdPelZhYUlDRS9NY1RhZS9YSytxYTRzOTRKMkFnK0EwMGNraERBN2dKdUNPZ0RHQVZJQnlSclNPRFdFc0hRR0VBWWVCSVFMRkJ4aVVSNXN2U05KQlJqWUN3UVdNSndmeE5rbnJJNUhXbFNTUlFpZk9XakV4TW9yM3hpa3RlVGRaNmFjUWJBOGZVdks3dTlnMEYrRlM5TkNlZXJlb1d0cXoybVozeE5BT1FBSTBBZ0NBMk1QWUppQW13QXNRSm1BRkFFVGkwSG9PWUp1SGVwWUZlSXlEdUZJUThwaTJLcTFqNFA0L0JVUVZpUHdSa0NOS1hKZkhDbVRoSVA0TE5Cenh2a2syWktUR0tteW9aY1dnOEdUc242WnJhVnY1ODFoN3pkZVRSbkpCUHljcTVYZ3FkeS9aWjdxek1hUGE2dkJWQUJBb1F3UndhZG9lQWRvRkhBUnNCbWdWQUU3RXNSQklFN0dvNUtRMUEyWWpBUTJLTXlIazVFM3poUmtzZmhhajJEbmhHbGo2cFhLWkpTU0RzQkQ0UStTems0WFdNVnlxeWNLU1Z4eFJ2c29ja3pSUlI5TzJyMitWOVU4ZWJSN3RmaGxxSmhoR1JUZStadTc3THJaV1UzZmIxTGR5K3FuZEJabDk2K2NydHZxZGtiendOYUFHV1RnNUlpQVcwS2FDYWhSQmlnZFlJVUpQRkZFb0JwUXhJTnVJZEFKdFk4RWVHcmp3U1Z6Z3FUWXRocTR4VXpTL1dTVGdmMXpHK3UrWDZiN3BUbVN6VVlHRUpzNmYyVDFsbmFLMi9oU0hFWVdKUmxCSDJiUjFlM3hadlN0WGdabUFJOEl3RkFCZWlpSUNJV0RVQjY4RTVVd043STRYa04weE54YUNpVVpmY3RGb2V6QXh0U0p0bWVwdElMWXlHcmp2bStrY1NNMEdadXoxeGVyNThlc3JPYmNlYjRaWXB4Zko5VnRzUzdjVlgwYjRyWjRLN0FYK1BBbVNHTzRWNGtEYmh1WTlUUExFOWN3ZDE2K096V3U2Nm05Tyt2OGRueTd3SEZnamNWZ21nOGgzUXFCcjR0UzJtWmRIVENhTEYvL2dYNENEMmdXOFVvcWFnWmEvSDd5cGIvYmQ0RGNnRTFzaVFIQlM1d3l3cWFubTZSLy9oZ0FwUTVGOERlVUJmeUZ1RGRWQ3Yvd3ZJYzRyVWlackMwektDT2FtRXVsQ29ab3NiL3k3d2ZZU1lQV01pWm1TNGVDbVd5Z3lFdWl6MmxmZitYZVZRZWtMZWtKN0JhT0k5RkxFVTdqcTJXSnIvZDZnUUFXVEtWTFBEeVVrODZyMDE3LzlnZHgyWXpKSEFLNFVJSGV0Y1dkOTN1L1RjMlROcGllYTZkNnoyRmpmLzVaVUtrcHB5VTg2SC84bVptck16TTlZaC8vdkNrekcyR0QxaUgrN3hKdVVHb3AxcmxqdHJJUjEwc1EvL0JsUTFKTk5Mc3hGRkxGNnAzcW5mNE0rSnhMd1ZjWUlsczdPeTlWWCszanZCcEFaRFNkQXdseGRPenN2VlA5M3U4S2dGSlRqbW5TT2NZVHM3dHFrWC80QUZBT0dUUjJVREpWREttaGliYlZYL3puZ2hnQUZjZEEvaWVOQ0loRWxQeVV6Z3M2TGk2Y25KeWFPcS8zZUR0Z0xqS0FmOGhxRHNIc0d2b3dqTEtoSmVxT1NkMEdXV2V1MWpBd1d1K1pVcVd1MnJYTUY3NXBydGRkMzdqODVGenZPODhCZndBdGNBZVFUQVRRTDBFWUNVS1lkd1VBZFRVdzBaUW9wSllNQmxEQmkySTBwS1VyRlFROVRydWtPNFVEVlRVdEdDMXRDNlp1Y3RwY2JwYVdPSkFoSWFHRTczR2pVYmVxZGFyb0ZtaXZEMmhWUFE1S0ZhTU5iZG5LbnZMTUN2WGcyb0g4QVVpRGNnUXlKb0tZREpoTXc2d29RMENYRW96WWJnemhNeG1vYjZaNjd0cW1tdU9Jbkp5VlZNOXM4TGdxbkJ3VldiNmU1UzFIcmxDOU1qRjV5SkdpbTBTdXFvcjZyMDh6NE1scG5DS2hpZDdGVUczZUJsNEdkQWlRQlpBWkFyQkRSRkFVQ0pZSm9JZVVCbG9WdzFoVWc1QmxJd2hZUXFJUW9VeDZXakVUZG1DK2tzYkZLK3J0Y0xZUlE1RzRsczIxM0VzNE41dmtuR3JTeGNpZFRNSnlDdTZqdkhybFZIbWZZdmlsTklhbkRNalIxcXFqM1pyd0htQUlNQ05sVWhoWWdtQVZRZkExd0pUQ2NQS0trM1hGY0VxRmlZaTRDSWltenpmS1ZJWDQzTWJJNG9XbXB1K2t4RHJKWks1SkxwdVI5VXR0Y3lIcXl4T0lFY1ZublRtK1BZRm12TFNNSTk4MXZSVVFidzZ1YzhBdUFDQUN3UE1INklDSUFPd1hRZXhCUXRJc0RjM1VsUUxTSUFQeHdQUStsUlN6RHVaTnprcW5LazRIbzRhN3R6dTVTY2Mzbjd1a3paM2NuTTkwVDdwUG4vQ0pRTnBDMldLazNOdzFCY0d4aW9XVWFvUnNEQU83TDRUQzluSTVzc3h6L3p3UFNBZWtJdUc0TEVhVXBQRjJVR25rVTJ0QnBjVVNsSnZhS0Y2cXEydTY2MDY2LzkzZ0JKZ0lrZ3JVR2ZBNGdtZ29pTUFzd0Uxb2c2eTgxWFVXRStGaUlnVkNBRHBYNmFtODVJSENMVTRPRnlUR3QyUERhcEpmVzMxOWZlV2ptT0swVDZMdG1sZGJIYUsyZUtVdURKVVZKOWg4Y1Y3VWEwck84Q2FRRDRBUWNDbWhrV0dJRTFpQUQrSEtEMmp3am5DOFhJVGdmWEMzRXl1cE43bW1vRlFPa3E4WUQvYS9kcm1wNGtqK0xhVEUzMWszWEpQVDNYeU1QVis3VGc4YlBNdnpNTS9LZHVyS09PNjRzNTRVd0ZnZ3c0UUNCRFJIS29ueDFKSUorSFlZR3VMeHBIVU9vb3JISXNCM2hwaExWdEhJb1RDekFmaHRPRGVWck1UaEljcERGcmxLMDh2MHI5Sy9DT2t0WmpBaDlVdks5ZVppbVVDL0ZDT0pFNmVWUE91TEZlQ2V3UTBBb29GaUdLSXFnL29lQWlvMUErSlVYa3hVQ0VqS0hBTjRVSVE0VEFzbXBPTDRUWThsSll3WEpJdVdpU2J1V2xxeXJZL1JKRXI5eW0xbStKb3hCbEdkYlJtKzUxWDF0d0RINzR2aXA1MlZxS1dacFZsOWRUVHNWMkdMclBCWjREUlF1WXB3WDBMUUQ5QjFCUG1nVGFERWtVWm1Ua2R5bUo0YkRGY1JVT0JmWHM4ekpBQjFqU1VqbkI3V01idVdqZ3Fpak54Nk1iWDYybWpJeGoxMlRoallMY3hNaTJlZWRPYjA5ZDRaUTVJQlNuNVBzUHk0SFd0MTRMSkFFR0N6Qk4wb2ZaVEpBYjBuQTB6eWw2TWRTT1JkVUYwd3Zlcmx1amM4dTFlT20rWGF1MnI2TjlkK2xuUGQ0R09BajRWNEw2T1FlOWs0YkZDUFMyRE5iT21Hdm1wY2VYLytDalFkSTNHbFFjSUlCb3dReS9lVkxFQzc1ZDh1OEU5ZzN4b1JtQ2lmU2pKdFNnemxSYjh1L3dDa1FhSWNobE16ZE1qSVJOV2dneGlPM25YamoxM3lmK1hlSVVNUStndWc1OVdDcEtNbDFRMnRyTzJMLy8yQ21jYzJ3T2h0Q2NWNnozLzQ0RTlxQ1dLWTFaMDcwMDczZTV0MzRabWFWdEt3eGgza04vL2ttSmxjRTJIZWIvKzVMczQybHo1ZE9PLzI4emZjMjcveUxzK2R6UGQveWx6LytjblA4eU1WQXJBclNNd1JvTjNFOEhUQ2FWVS84eWMvd0V4QlE0RzBCSUg1R0RkemR0VS81ei9CdndiWXpIWGhrUDBSdDJkMjFWem56bnpuZ0tKQkNnZWc5RGlaUEY0TkNER1ExYUxwV25WYmpwM25UdjhDaHdBbHcreERRZUVheGZMd2xyTFVEWGkrcXA1RmhDY25jbzZ2NXovQXJVQmtJc0FmTVB3VHBpYUJ5bUFxUllzb3pFcEU0aWlzTkZoTGtvbGtobmtkMlBZdUI4Tjc1Y2xrbWU2N1dkTnRGUTU3YlNFa3hVdGRkeXNYR2c0cDVSSTN6RFNzNmpyTnhWWGs0UEpZWUVVbWJQT3VpdHVuZFUzbStCTGdDK1FJOEJEMmlqSXdTc2RRbElRZUEyNVNidERWSWhxUU9FeTRKc0ZCSHV6SEpOOUU4SjA1SDZ6Y3hvazlsTTJMZzVKSndJZjNiYlZtQTN6eTYzQ1FJNFpLOVQzUGQzVXI1dXp5Nmx4V3pmRDBIWmduSjMyUTRTKzRaTlJlM2g1MEpnVjY4SWNBN1FkSVVNT1FZZ1RPQ2l3aFlxTUIwaHVLWjBlQ0FJQVhFaHNDV0kxNHZ4dVNUQXhKY3Vsa1d4eWNkY1NTTnhpa0ZzYzMxOXpVcjJwYWxZVWc0aU9MVUNaT24yN2Q4aVJnenIwRWVadzZyRlRsVG91VnVPODhGbWdRTkJzZ2NFYTBnTU9EZkN4UmljV0U4czBnZ0xUbHlRWkZNZlRoWmM0U1dPeGdKK0ttUnF1VEEzMjU0ZnlvYzlQS2h0TWJtN2sxSGVjU3dRRnoyOFZkeFlmUlowOWQ1Y0dnZ3FrV013bDFQVkxJNDFSNTNON2g1WGdzNEErY0FvMEUwZ2xBV3BVSFFSWWZCWEN2T0lOUEo0K0I4aFpGSThqMjFjZHQ5NGNHN1BjdXZkeHUwaGphUXh1NDNhOTM2ZGhPWjdLWmlHUTA2enhlUXZSVktCRlV2bzZyd1ZtQnRBdUFMUlVpdlpLQWhwUk5ZTXNNNm0xZ3A5RE5uWjA2NzNINXo1ZDRHQWdHZWl5SGttaXFnWmlDRTR6eGplam1xWVlXTytYZjQ3QU8ySGtQc2UySWhZalF6cVRYZGpodHV4MmRPKytULytCMmdWOEtteWFNUFFGaVo1RGRmbTdqUkE5OHUvd0UyQU8wQ3VpU1VFZlhoL2NnbXR0dWpiQ3ozLzRJU0Exc0xBSmsyTWs1YVA1T0lVb29MUzdLVTZkT091LzVkNEN3d0Rpd2ZNRG5oWmc1US9TU0ltSDRKa1dRYnB5WWl2RGJIMGF4QUNtTlkvQnVEeWs2K01CNUd3V1pKVXBDb1NqbGZudjYxSklVcjlHdnJkSUtXZHJJNTUwN1BBc0FDRFliZ1FjTUFUa0duQWQrSCtPd2hRbFU3UXpES01vS3VGQVlMUENEQTJGNFVzdXRJUktITVMwbDJJMk55VHFjMGNDSWlmU0dRaTY5OHBPQitNaGR6ZHIydU91VTZVUnJIYVY4cXc4MytYbll3UjVMOVYwcXJ3WWpnblFZZ0o0REVCZ2diUUx5RzhFR2hRQXV3MXlMWVRvaDRUOVNOQS9CeGlFald6MGFPUnNId3gzcmwxOUNWMmpIdVhLaEpPYk56RWUxeklxSkZKaXZXa0ZMVXBxanRZM1dPL1Q1TWJxcHlkVmE2YThBM2NBVlVLSUFZbUc4Q1hRaGtIQ0UwRzhLTUF0MVl3T1ZBdFNRd1IzalVFOUNKRGhKY3FEQWxoZTd0SlppTm9pcHdZYlM1TEViU1hkbkJ4S1JJSXFzY0xtN1JBRWsyRWdoVU9sT2lpaVVGYXVPOU9zT3M4TW9tc0luVFVJd2VWdHZ3V2tBRjRGekE3NFhJTDJIS0Z5Q2hDQkIwZy9JTW1QcFVEZUVQQ2RoYlJNdENYRnVIS1A1STdyS1ExQ3lKRFZ6eTNYRjNKRk56eGljcE9YT0RGcHBJMWZkQkFtZW0xOEttdHJ6NlUrbXFVdGVCbElPcU9ZYktrcUVKZ2FZV2x0aHFvNHROSzlPcS8yM2VCaFFFWjhKTmtkcTBZOXJFR3FGVm5lZk9mNERlUU9nbUdKZ294WGsvTlp5cC96bitCZFFjU1VpSnh6bkVjMUxzWVZWLytDYWcxNUxZRzB1UktzZ3FyLzhRWXZrTXdwd2pVMDVObTEvLy8vNlZ2UEFTWENnelZ6TTNKeENJbDFtd1lUVFVYS25mT2Y0SFJEbTFsTXZrclp1Yk5aa2EvMjg4R2lEcmcwbU1IT0dDVXM1TDFULy93YTRHd0ZJT2NDS2ZjazNaVFphcEYvK0RkZ2Z4azQ0ajFRazloTUp0VWorYy9NOEVEQVRTS2dlMlNRZ1JCcU1NWW4xWnR4ZE96amJqcDM1L2dqSUJkUWdBUG9VZ2xCY0pBVHJUVURWaGRBK2tSR2hETW5abzZ2L2wzZ0JuZ0MzQW5NRk1oV3hKRG1ESGhSVmlnSndUS2xJWUJjQWdvZ0o0VFlOWUhPenJwN1Z4K0VONUl5c2NEMU56bVdKMGJseW9WV1ZYTHBMbm1ySWd3c3RiTGlFK05LNEtxREgxNmduV3RVcFdOanF1bFdoajhpN3dLNUFIU0QrQXZZTGFKVUd1QjBnRkZDSmhISUYvamNTQkxpQmcrUVFXTEV3RzBUb0lWQ3BqU3kwWXBPSDRYUndwczREc0RvR3drbkJ3dlp3VlJHeGNsUTQ1ZVYxTVJzNXE3bFlKR01DOVNaazJGZEE2Nml1KzFXQkhidlRDbEtJN1EwaUdGOWF2ZHFEcXFxT3VaVlVkMFZ0OEpzQXpvQVI4QU80RDFnd3dHWWdIb0FhaURiRlFOOFp6QjQvQ2RDakRxRU5pSGc1SUUzQ0FuQklPV2lUWTNCdUR5TjQzaTRCWWdMS1hHMFFrVFlzZzdoRlE2QUtPQ3BEOFN4UUtWSklLaFVDSHhRa3Rab3FMbWc2YTlCRkJ0TElqclc5UEgxNHdBdkF4STVvektLaVdtSFIyYnZvV3VlZHpiTEoxcnJtanAzZUFhd0FqdUJTUU80RklDMWdpMEFWMEViaFNBT3NEYmpXa2dKZ2FnVGtFWGhRVElENGcyQlM0YUpFNFZCT2kzSlFGRWcyQWl3dWhkQmhSYkNpSDVJTGthakVXd0xKQ053akVVQWlnb0IvVzRxZzRnb211YUphNU9GU2kyWDRqZjBHSnFQY3pCM1R2VDNSaGQwOTgyK2JtNm00YXpIcjNwNmE2YnNnbWlGR2gxR3NpdTBhcXJ1NXQ3blM1emNJN205Q2RtRWU3VzYyYW1sVzRCdFFDTGdHckFhNkxFblFCWWdHaWhEd1JPRTNEY0ZpSVNQUU11QUJNWEMxTVFhVUhVQnJlRnlQYlEvQzBHa0trRHFBMUtRVUFPS0ZORzQ1SHBtQ25odEZFS01ra2llcTQzRzc4VWpLZzBiWVkzVHB5cWoydlRNUWczdWVBVndBZFVMQXBFd2RTNFp4K0xpS1hQbnFSM1p0RjkwcmRkejAzWjVkLzduZUhNQkFRSHhDV2hCVHlqZ3VTYW5MbW1MM1ViQlJqYzdhaFU2cDZOTjRxZC8rQlZZRUVBZ3dENEEvQkxCTUlOVUNpd2drRzdDOTJSMlNTNFhZTmNGOEZxRS9JQ0EwbkpoeGljalNwRmtKMHFHUndjRWtwa2RwcEljRWs1NDRNbEtSbGxkcEoxOTF5THllQWprMVFmc3ZoWDZmZHRhZ3h1dGk3UEFwUUE4QUR0QkV3dFNTS2tERUFzYUlYR2l3U1RaU0RCQnhpVE1nL2hFMGc5OG90b3dIOGdBNFI4TjJseUEyMmJtemhvYmVNam5sKzdyTW1tcDZlWEZjbXFuSWpWNTUxeG85MjNGaXZhRXVoZ3huRjNUUjFmUjJPblZkcFk2Y085OENOd01jQnNBZlFEbGphTG9LbUZ1Z0VHQk1HU1B4c2pLZ01vUEprakhzZFJBZHVXWUxqMDg0c3hzYmpsYTRUeHVOUnhhNmxKSHJqZlhmbzNJVFdwWWZ0Yy9WV3pyYmdqN1BsTW1YVFNpZ2g2WVVxZTI3c3c4eUxqMnAxM2dPeUFEZUJGSUR1UTVSMUIvZ042dU1nRWpBcDBmU1BBNE9SQ2k4YkNRMERPQzRGZ3l1N0xTQmhBNWh2WHN4MDRPV3AyNUVSRkFrTVJjVzFMTFJ3WkVCM1dZU2JDVVFLRXVwaTJwUlFWNHFyVHZTem5qQU9tUGZVc2J1dTFWWEtubm0rQWJjQXlZTDhCNWhiQzBFOElvSGNhZ3c0UGpvektSOEpUQmZkanlIR0QvQ2JudXV4Q1FvSXR6QmFUSWdCc2FsOGU1Sk5uSmsxUEdKVkpCa2MzeGhiSzNGekdrSTBmTlFjRWR1ejBSbWk1Qk1FV3p0ZUJvZ0k5RmVERm5KVkY4MkRhVUYwQzdqZCsxQXcxODFOYngxZnFuZjRSb0RuR3dsV2c5a09obnAwTW9vTXFsanZEcDM1OHU4Qy9RYXcyTVNhS25VUmh5T0NIZWx5WkUvVVdsYXYrWGVCY1lMYUZzR3dtbXlZWkRnb2xxQkZyR09STUo0TVAvL0hzQzR4RFVoUVVHQnFVTmZCQ21sMVFtSFJoU3ZQblA5a0UwQ0VFMUtsbE1VMDlIZFpBczc3djh6Qkx3Slg1dlI0WmNkMW55NzVkNU1CTGcvcHB5ZEhscU9IVy8vNklTSURyYVVlUnlQWWZMdjlLRndFQmNsaTRQYzJQWWU1enZQK2dCTGdXaEJMcG9QZHFManJmL3lFQ1hoYlczUThFMUtkNy8rc0VEQ0VMSlQrRUVwcDlseXZjZ1dkK1hmNDFoQkFYTVZBVnBHTVJjT2FhR3cyS2FFdzZML2RuK0ZJRE9BdEFQOVFZSmlrY0ZIcVkxODZpUk1RdDVXZC90NTRIeUFpczJPR1NQckF4Y29nbjI1eUREOVloaDd2LzRJV0JBNXNIdzBaUFFET25oS2VDem0xanR4MDcvbkp6d0FpUWR3UGtMb1BBYkl3RjRTb21tc0RYakI5VThZdGhPVERiT3IvNWQ0QWNZRElRdkFKdEhvYWcyQlJCUXBFQUgwa0RHWkhJdHhaSEpkeElDY0F6NUtVOWRyRlVSTWY1WFpYR3Babm9UWmtTVnJVajhWV3BzeEpaa3BhN3hmR0JRYkNrbEVqZk80cXpGVlBPOXp6UlFRbG55d1o3RnhXelBBQlpBcXdDUXdSdUp3a2k1QmhTV05ZS0pBd015R2czYVpDNmlJQ2RSdkUyS0JwWjlydEl4UmlnTUNtYzJLQmUrMDNYc1dwVXNleUFVcnV0bzNVamMxTFJrdU1RTGVqTGtFd1R4aHl2bGRIZDBxbzc1dmZOeFVLRkNEWlI1TDN4eU5sbnBjVjNOMTRnZ0tvRTJEZUJRaW9JbUNqQXNvYVlOa0dxaVpIV0NoRTBOeExHeDZsbVZtV2tqSW9VaHp5NCtpRXRNOXhoY21RMkxGUlNjZEsxeXVrU0w4MXpNQ0VzK1ROanBlOVh1ODNwMVN2TXoxOUhFVTJUYjBYVHl1N3VtNlY3SFczVjRHa2dIM2d3UUhqQmNCMkRVQnUyQWxnVUVWWktIaGtkeG9EQkR4ZEdJaWlOa3dYa3dTRzRuaHZNU28wU1JQYzVhZTZUY2Z6Z2dDbkxYUzBzWWtucjlvVnNOelVJd09sNzFmZEhZSGpxYnB4WHp4Z0dlcXFvRzZhWVFkazdOM09VK2p2TmIzU3U3d0ROd0Q3QWYwRTZBKzRXd0g5QzhoaHdmNElWQzlpd2ZBdUhrSUJDRFFmMGZoRWhjanVqWHVWeTlZM0g4V3BVT1I2MUl1dmRyTG1OcWJNVjd1N1hNTHUvaEJNblRaQ0d6dTU3ajhuNnFuTnVyd2dJQTZVSDBEL0F0bzNLUXZDNko1YWlXaEJ5SkVzS25iZlU5eDFYZi9nU0tBYzhDWUF6aW1SalpRSWlLcmlGQ0YxaGNvRlozTFF0Vy9sdTdyNTNIWFgvK0F4c0JHQUZvZ0JhajhZam1DTHdNNUJPWU5rSjRlamtUcHdJZUhnMFBwSUMvQWdrTUVqRTZQcGtMVWxFb01NQ0VRd1JIRjBEaUJDUW5WeXFOSmljOE53dWhSbFFrdE5KRnU2NTY1NlNFVGV0dEV4dEZlajEzb0dJSUluNXlMaXM3d0s3QVI1QW9vRmxBUkdERUE2NEI0SUUvQXpBaVlVd2VEQllUQThCRElPV0RQalNHSkNqalBSeGhBRDJQdytsUUNleEdoRlE1aGNnMXBWRnlQNXdLRWtuQTlnamtGWWc1b293NlJRQ2Q3akVITUYyMUt4TGFMUXJkVnM0eFV2MVgxbGpIL3FoNW9oZGJLSi9XcnZxbm5ubEt1dU9UVWR2VlRtMytJNEJpWURFZ0g1ZzNBdHdNbUFGQkFkeUFuTWRBT09YQnNGTkVMVU9zYWhFeW9DZUFkUWFXaXFVaVV2SkxFTEg0UklVSW53Vm9CUEM1VUZ3TFlsaDJCUHhPZ3NZSEpFK041QUZXeW95U3d3eEFFZ3g0NWFSbEhDWSthVFRiS0pYaXJUemFERjE3STBobG1kU25JckVyUVZWZXhnc2VWemZXZFZQSG1kNEIwWUEwNFNBRDhnK0RRVHdGS0FTK0lZQk9nSitDeGpPUFlmeEpEQWljSkpISDhDU2doOGsyeWNybUl0aE42SENSemNLYUljWkQ2Y0VmVEZJUUFkNUFDZGowdGR5NDl0WDA4bkNTcktaZ3dRNXE0SFZ0MGViYXB4NVI2NytKNVJHVWNLUmprWGJyMWU3cmV2VjdmT2pjQWp2UEFNN0FaWUllRkE0ZWhWQitneWhPRW1HaVVGTFNRa2k0R2xJME93VDBmVk8zUFdrTWhhU1lMV1NEbnI2b2pZVmJNU3BmVHQzWnZOejB0RVVuRjVNbXVmRjZxdXFPWHBaY2R1M3hoQ3RGeFFRVHFPRVlVM3Q5R3VvOGNXTnFMdkFMNkFxd2ZnWXdLNExFdVVoTUNlWFFMbUdrRzB3UnVmbFM2Y09yLy9BY01DTFNpU21TbTlnUzdDSEVNRkZaT0x6UllkL3V6d1VJQUJnVGhsTXlsV2pOQjh2M204TGY5M2duTUR4bVpnT0JRUHBVaVdwcmVWSXYvd2d3S0ZCZlRaMHJ5NXRoVWkvL0NBUTVpWVJFelVWc3FVRTdqb29QL3c5RnhTR0JPTXlKMUphZ2lUVFVjYzNuLy81azU0Q1M0WG1UbitIQVlTVHltK05Uc3ZtcS8vQUFQQmRwVUpsNG9sYjFWZTI3L0E3b2NXazVPUllrT2NuTnRWWC9uaFVnT2ltSExoSXVsZWRuZHRVaCtjK2M4QlBZRVo4S3RrWmlEUXg3Q1lhalZYODU4NTRFMEE2cFFGbUJaUkpJU0lGeGgyOUJkMHVjdE9ONU5IVmY4NHJkNEM2UUY0aUNCZWhBdzZSc0pZVHNXSVc0VzR1QllqUU5nbnhQallORURnZlJiaXpPT3UwZzBrbEk2bzd1TjgwcFo2MGhpa3RrNE9HbDExdTZ4ZVF3WWhUME5UQ0d0dXAza3dtUFFvTmhEWnFxVjU0RmJnTXJGR0JPSkxCaFF3SUorQTR4cUlXQ2pVUTBrZzRJdzlHUWFCSEtZVUVIQWdVN2paaUhUak1lSG9YUmpjYktnakxTMDlMVXRMaWpNRWhqZGo4UFJGSTZBaHk1aGlYd1VGWjFuYmpyVHJUMTNqaU9iREtiRUtLdVJMRmJPTzlWMVhpM0FTNkJFNE9LRzBJU0dEQjhoY2d3WWI0VUVKZ0dySXR4RFF1b1ArSzhsQndqZUp3YmwyclVsUWV4N0ZzUGJObU55Y0thc3dYdGFlT1I3T1dWeVNTVnpnNWFTR0xTVXplOUZ1OXMzVDFXNDI3ejVEeklPcEZVOWtQQU44QVFXRG1BNllwZ2ZJT3dCWFlydUNiQncwa0taS09BeFF1UnNKWnNGOEg1Ym55c3p3VThiUitNamc0Q2lrdnB1SmtMa1dzdENJczI1YzRKWktGQjNYNXNVOVM1cUl2eWFwV3lxM0R1M0txTzl5T25kZVF4a2VmVFN3ekhEcTFUanlHbGl2QU1QQU9NRjBENUIvaGJ4WURrQ1lCNkQxRDRGbUtzZFNtSDhMSWVTcWNGUXFpekhjMzd1YUtaVkh3NU56Y3FGUTRhN2M3bEp3cGE2TytsM1libTdrNXVmUjgvVlRWT2wxZUVaZ3RFTFVIMmJCN0p5YUlNMHpLZURNNWlZbzlIRzhPdStYZjRLQkFNaEZnS2xRVXQ0V2JNTWh2UnpEZlN6M3VQLzRRZUVkQ3FGT3dPZTZGaFkyY2xoVVR5QjM1UHUveFRBWjRjZ3VvQlBiek5FSDhvUkVMaWRVSTBiNDZhaE1EdmZsM3k3d2NJQjZ3OWpRVFJrVEVJSHFhUlNoMjVkTktkY1dPK1hmSi93ZFlBM0lRZ1RvcHhLcUM4SHhVa1JNc3d0aURVUTdjK1hTNmFPdS8vQVdnQWZFSXFEUEJZdzRTb1hoQWdmUmlLNGtxQytCSUh3eUZtcEVzTE1rYk5UZVNSeDZNV2xqaGFON0M1V251WDY5bStYNjQzTDJJSVUwcGtLYVg2ZE8rRDNwNmxBbmU2RkhXK0JVSUIrd01JRVFrZ09NR0NCUGcva2NXSmdoR1N4cGVJUUd3a0dveUVQR2EyWnVyS1JVTWpDVEVraUh5WU4zMDN4SktuWDNOU1lGUTRtNTR1SGFhbHlBUEpGTURycmIwODJtNlBYUzd5ZUpURTdwMFlPbXpxNE4wZXdiMDkyZHJ3UXdEL0VzRkRoUEJuQ0JBT3lDZlJKQkF3b0JVM2E3QTlDWUVHS1kveVNoOW51bHcwbE1rdExra3BpZ2FsSTFmV1pGVWxHSlVXWnZtcHZydGRxYU0wWm9nbFBjMXRIVG91REdiNzFoeFJ4ZWFKOW5UcmRuVDJqcXZBTVNBWDREb2dPc0VpSUtjR0E0aFBBWllDKzROSkNRSCtEOUNjdTFKa0xVZVdrbTgwWGlMaDByZGRqLzNYeTg4UHhKc2tFQVk4Ynp6UlVLazNLVGlhUjBScWdsT2ZmbHdWd21pdnhaMXZmSVFwNExiTHo4SzU4WFRCOHdiY2QwV1hlQS9NQVVjUklHc0JKNFdJTkFmd0FFVkluUSt5a3NjbkFiSm9Xa2RsU0hDTG9hVENIVHcrQjBqOUs5cmxVeGJ2amN4aXVWU1RQVFpVTVYrOWtNb3pJa0pRbWRIbUtxMDdyMGJLSW5JWlRvc084ZGtYYlIzdmdaNkF0SWV3WkFWZ2Z3d0c0bXljTDhDN21uN1NkSkI4MUw5NDZ2L3p3VklEb2prTlE0bktBY0EwRTZMRVVHVlMwdWx6ZUhWZTdQblBCUTROdHd5OE90YUVqMUJOWnlxenZQblA4RTZoUTB4ZW5VdVNsKzFOVDA1RkYveWw4V0FaNmdGd0tUSXc4ZzJxZkRaUlRybFZmODUrUmRuenVaLy9PUzcvK2NuUDgrNHJ1OVU3UGQ4Z0o0RUxmbVJSbXJlSzEvYzczZWFBU0FDWExkbU9XSnVuaSsvL2g0Z2ZBUXdoenNTOVBwM3BkMys3UER6QThvdVJmblpTa2ZFMHVPcjZ2YzczZUhZRFFDdUxSWElrWXJCSW1kbXU5VGFaRmsxdFRpcXZ6ODhIR0E4Uk9LSm9ZMDRZNGJpYmJWV2R1Ly9CMVFjOGNoWUd3MElVQVo2ZFBMRUZsUzI0cmQvems1NEFUUUFTZ3NSRWcraE5rVWloTERVbnNHektSRTk2RWl3aG16MjJkWC91OEJsNEZqaGlBQ3RScFVBRkVEZURUaUNvQTdnWnNwalVTQXdRWVlpaE5sSWdJMkJ6bkp3azA1WERrRzRqckxSRndJdWNFaGRsVFpMTVphU0NkTVlsVWdPTVRHN3RvaWtWZ2NtSmM2TDdwdnVMRlVkUThjaWZRd1hNRDc1N2xUN29yNXAxU3ZQQnVnRlRBUndDSVFBREEyZ2FzR0VEd0Y4R1lDU2hudlNHNVJLUXVBNDY0VzRYTWRwZE44UHd1UkVpbVkyUFJ3Vld1MWszN2xNbUpLTVo2ekV4TVRFeHV6R3kxR2hMa01vaUpVYVBjZ2VhcjN6Umt6VUNrbGdjWHhZeFh0cXFWMVdLcmNHTXp3SDJBRzVnVDhBRVlFeEN4RGVPQW5BN0JHZ0wrRXdSdVpJZ1RGR1BUMlFtWWRvOWRkdExtNFgwZXlWSzk4VlpXbXA0VVkzTXlJUzFQZFkvbkkzM0hsSlBLTGd5dDE2Q0VzS0ZiMVZQTzRGbXZXSXJpZlZRVDNUMGFxdFZhZVBjMjQ4endIOEFIOEFuQURBQkNRczRzQXN3SnJLSTlHNWc4NEdVVEt5N0s0MURhSEFOSFE2SktEbkc4eTJ5V0hJU3JWbUJKWGxTcGI0cUhCeTEzTmNhS0dGRUpnWnduY0RITys3UkkzeThoVk5WNERyd05sQXM4TGlCWmdmakpRQzRsQTFUR3ZOSnQyQngwSjJkblRydmsvOHU4SXZCWmdlNFBJYWxOT3dGbFVNU25UTXFqZlRyRHJ2bDN5N3dUNkN3aWtGYkIzaWpzQS9HRTA3dkttc0xPLy9pTEJHNFBHRHlFNG4yWUhCcVQySWJDcHErMkJXejgvd21BRGZ4NVdLTGxBNm14T1JtYkJwTU0xT3hrMDNxdmZuUG5QQm5RVTZUVWFaZVQ0VjVNcWUyNVIvK0ZMQlZCcVhKekRIQ3RnNlhUYXBuLzhHM0JYQTVHSEViS0Q0aFdWdHFqVWdjLy9CQXdHYkRxSlJva2E4V1RDR1VFRm81UnNkdU90Ly9Bb0lBejRFbWh3Rk1OY25MaUNqaXRCWTBYZzlNOG84L2Ftc2VkZCtIMWJ2eDNnQ3hBUVVDSUFSc0lXU2cwU1VDV0tFVUJ1UkNCWG1CUkNEUWNzUWNmMUppRTVFTGFhV3NqdEVBSjlUT05XRkNFYVNKR3pJWEprWXRFa2UrV1dKSWlSTEg4bDgwdklaWlBZTHRtblJoZU43WlpwWFcrWjNSblN0MEZWYUdPMTNnQXdBT3dCdGdXYUI3QU9BQmlJRXRDTGplRjBBNUlzb0VjbEQrRElGRmR3bWd3UVVBUTFreGxvZVJSaU1EZXNwT0xFNExVeU1MWk9DU2JyOGNEYUxna3I4VlJ2S3BVTVpVOFlrTmdoc29uSjBVNFdiT25iNW5MTnNTOU5yenB4MXAxbmdiWUF4b0dsQWVpQW1BcENIQTBwTERtRTZCbFFNNEcyVWhvRXVENmpxSDVaa1N4R1JMalVTSmFXQnVCR0dqak91VjJibTFnN1JFMVBYSWRBOXFWeVVWRlBDaUtmY054c01SODFmaWFvdVVVM2VLK2NyZnBZZDVDRHpwWk02c3FOcXVqamRaNEd3QVZNSUNET0NCQ0lFa0VtQnpqMkhFRmxFNFZTcU53ZzRUSWZnMDJocEg0T01XdzFxV2pFZkJ1SDB5YXUyakVxRWs0VzVkcGZyVlB2cm5yNitsTWcxNmJVQ2FwcmErdHBOVGsxWk9WbmdGNGdBYWppR3VCWlk5SW9FaE1peTJHblM3RWJibTk5MFhlN3dVMEIyV0NNVGc5YXd3bEJMOVpWSWp2Zi93TDJEbEppL0ZLc0RLbXNyT1ZVZDU3djhDNncyRXBhbktEcHVhbXM1VTc4L3hkakhJdmhXMDBKZk5UUnB2NUhQLy8vSFM3UG5KejNmLy8vL0x2L3daUUpid2VvcDdKdzRFTFlWQ0Q1Zk9VcXIvOENLZ0VycGlkQWl5NHVuSjJiVlAvL0J0UWFkT0tkZ1l6N2lMdXp1MnFSZi9nZnNISVpLYWdTZFVNdXBwaHFOVWovODhFU0FpOFZJK200bGlGWTFNR2lYb0xPalM4NnJvNnIvYzZjendLakFESUh3RXZIQWJxYUFuVktnaEtTaVpFY3ZXR0FhRGNwRkU0T0NremE1SE1qSXhTTHNxVGs1T0d1dGN4SkJpdTBwVXRkZHIzM24zSmR5VDllMjUzZ0NFZ0RoaHBqZU80VDBmUUM2d1p3V2FNV1pVZ054UkNiQWlFTjBqRHliaUppR0tEazNNSlNFWU1NY2h5UzBQbzNPVTMxM0lVd1Q3Tmk0N21wU0M1S28zZGJSSjR3RFFUcGtNazBjWTA5WGM3Tkh2SzNIZHQ2ZHU4MEhMVXJFb3lKVTdCWHJlSHRTN3dRd0FMU0NKQUpqQWtZMUF3Z0Eyb0gyQTdJQ3FnUlNEakNhZ1BvdUFjMHZDNURhRlZDY2gyaWZhSkk5aTBFNHlDcVF3ZzhtSnVKMEhBSkkvbVFueDlhRTZIZ0tBeUlBRk9CaWlvTnB3SFdIZUhTTFlYWS9Fb3dPTkhHaTFCTlhOdmU5VnlwN3p1dlJqUFNhcFlIVERySnVvdTJCMnpCVTg3cFZuZ0hoQUk3QWljQ2xnb3BBQWpzQVY0Ry9BajVjS0lGREtSd0d5SEdDdEF3SU40a01nUVFOcWtrRWtiU1cwSVdEckFLOUMrbU1ra0lWSHdweVpFQVM3Q05BRE14dERBQzZFWUZHY2gwQzVzSFJCd1JHUnZrNWtVdzZSM1p0MHdncjZCWXFpenBXZDVNSnI3ZlJhUkgwKzN0MCtxbXJQYlZiaDEzTjY1dmZBTitBUUlBZE9BWkFDaVFMZkF3OEk1QXlNRkFoR29SU0YyYWxPSVFHSEJSWVFlTGNNQ0Y5SHRaSWtXTWlRTTJqK1FCeWNHNWtTaVNTVWhISkkxRGFTN01pV1NTU1J5T1pHUmtZR0tSZGF4d1R3RkltbUNlR1EwNnowMEUwTm5VMnpuZ3EwQjlnZ2dKUUtBZTZnbWhieHo2Qm9uWjNjazQ3Wnh2VHJ2ay8vaGlRV2NWU2tUU2tUR0IvSjNWRGVuSjFUQTZ3Njc1ZC9nWFFCcEFyUnpGSWJ5bktwcHVibk42YmFXZStYSzgveDNBendkakFRUklib0EvZVFKWE5aVTdKc3IwODMvOEtxQTlBUHNOUWNRem9Gb0pVWlJTaDFISEtVN1JZNzVkL2dBNWdHOUFXbUhNT3hLTlJJaUdsRmRPUk9YVElOc2R1ZmxUVTBkZDhuL2wzZ01HQVAwQytBMVFXMFRZc1NTSXFVUTJCV3N1TVVnOG02TTNXVWpRUHhIdnJpWkM0RTJwN2lTTFl5NVhad3RKd3UzeGtjR0xVMnpJWlE0cUYwOHNJNFMvQ3M3RHZYS3M5UXNXazU4b1RSODY0cmJSMi9WVmVCV3dCcndFcUFQRUlvYklUQmtMY1lCMWdwRWZ0TDFpU0hGSVBxWURRRTJFVlV0YkxPckIyRlFlekJwWklMUzJ0ZzFJb2g5NnlBNjd1eHZLZy9zdHJrVTRSRzFVaWdtbEdvVnZWUDQ3c3MyZTFPZW9DUzhSRTJzSU4zclY2MjdhTzRVV09LOWVDbGdSbURTQUZmQTFRN0JVZ1VjQnlBMkFMZ0JvbEJnTElkQlBDM056bFlUSVhzSmlMZGt3NXB3dEJRQzV1MlZKTEg4YXU2TnMydnhJSHRJa3NrbFVsRk14dmtuTkxvMUZ5aVpqczYyNmFWVVdhejNzY1hwcVRQMk5LbmFyMDZxQ3ZmQU8zQVp5RUFBZlZnMUMxQlhBbUpjSU1ETmlJRzVVUmcwUVlVTmdaN29iQmNOR0QrTjRDZUVJWFNYeTRjZ1lCSVl5OVMwUzJwc3hIOHhpVlJ2YVVtUGNzWURtTVNjdll5cHlZV3F2aXpxdDBQTHllOG5vcFRPaTloVkN5eHJqcXZBMVFDblFlZ0dVSG9RRWlsQUY3WkwyQzlsU2lnOWdpNi9LbTk0NnYvOERIUUpISEVhZzlCNFF3SkNaRktHREtwWTczM2U3d0NzUU84d0pGUWNWaEYxQkw5NVVpTzgvNWQ0UW9LQlFHZ3BOUnhSTGE5TWpZaHNYVXFwVm4vNlZ2UGQ3dkFTWENkYlMrNXQzbjIzZi8vLys1MDVrdWQvK0I0ZzVqUXBqbXVhbWEyd2dvWWZDT29QOXZQQVRzRFZNRkZRWTA0U0NWTk1OUnFrWC80RXZBZ2RvZWh5R2w3eVFtWXhpQ3pibGp0MyszbmdMVUJJUTlnLzRzUWx5UklHNGFtNW1iazVJaWUreUxyR3d6b1dkWC8rQXpjQVhNUW9JcDRZd1MyT1liS1VHSkNtQXlCdVJsZ3ZnUWlwTVRDSmdjTExXcGFDZWgybUJ3dHhnTFlSWGttMXhUVXlzYmphSFNrYVdPUituamhra0VrNE1DS3dUNFNsYmZibTg0c1ZSMXZqaVQwUkVxYWIzbFRyTEdaNE4rQkg0TlFDRmdhZ2F3cG9OZ0hNRzJGU0JuZzNiZ2JORXMzSkE5RCtMWWdCK2FhWEpGQ0pEMlA2a3lKQlVGcUxrcUhDOW1Da3BsTXhPTFV0VmE1SlhKSkxzeE1yREtSSWwzMFFsa1UxVkZiVHZsZStabTBHTjFQekV2TzlMRDFidkFOZ0FPZkJHQUN2d0FDUXRZTWFIQ1VBMndMeUNKR0EyRGtaeEJoTEc1Vmw0ZFFVVVA1bTV0UVlDNUh3bDhrT1I2SDRrYzVudUR0Rzg0dnJhNWRvWEkramNjTE5HVFFWa3BuMXQxQ1FreitVRmE3Tzl4Vm1uVG5lc01VdElISjA4WG80T1BJY2QwcnAzZ1B4QVB3Qy9oZ3dTMklJRmlGaUlzUEkvQ3hRV3BNVEVlUjJIZDhyRW95ajAyTlEza3BmckpJbnlYYm91V0pKTE1GN1ZjcDVTMVBOY1RROFRRMVl3elVRbUdoanFWMTVhanRaOG9yZkw2REhicXJmQXpBQis0WEFIeEZXTEVQRVZBUGtVV29NODF1N3c3ZENjblowNjc1ci9CVEFHcmowVkFTT08wT0VEWk04WTFSSE1LRzRydzY3LzhNMEk2RDFLWUpTTmpUUXNQSno4Q2ZIZGsyVjBlWi8rQjN3V09Lb1NBcENLbElJc2pOQk5aYW8yd3M3LytCOFFOU0ZjSlFtakpxRWZsRDhmdDQyVU5PbkhYZkx2bDNnaG9EWWhBd09BVUEwV0JmRUlISWg2alRyVFdVS25xVjBkZCtIMVdmNEFlb0NBb0RvQUtSQlF3VU1JdEFtQURIUXc0RW5CRWdNc09wZ09nVE1JV0E5NFFXSUlGRkM5RFgwM0t5aGV4YUNjT1VqUnlOSnV2ektRNEpZOTJja280TVdta2h3WXRMczljdlR3UkpwVElZUy9UcDNvQXE2Wit6cjlsM2dDbkFJNmdUQ0JwUUVUQnZnVVlCQXdIQUJ4Z3NBVW9SWlFrRGNFSENOUVp3RzdJNVVBVVFQaHdjalVRQTFyQ0hncWtDamdvUmlzWWhUeGFtUEZRT1FhNUNOQUtsSklkb3VRN3hSRXNYSXVaQjBRaUlSa1d6UnkwaktMcGMrdWZMNFVxWnVkbUNxbzF6cHlYelZUU3A3M043czlQUmZOUDU3RXdSRTZQTGRWVksvVmVyenNlbk9jNmFucjdwNnFuYTZhZlZ2bTd2WjdlQUx5QUY5QjBRSFBBSnVFMEJrUUFpSVBlRFlBc1lFSUJESWJ4VkgwSmdDSnhYaEFnbmd3WWRZaklUYkJQRGFRQS9zZ2l3SWZNTGtVQVJjcE1iRUVKYXd0UWN3UlV3RStDbnc4Qi9IOGJRNnhkQ2pKSWpSaVZDU1NoZUp6elIrSVZHMWlLQ3JtNFZwM0JYUjNoN2sxN1FscGVURUJxWXR3ZkdFbUhkSGFPMStkRjNIZDdIVlZSaDRCczREUjRDTEFjQVE0UmNIVUFpOFFVSmFMQWpqd1BaRkMzZ2k0UWt1T1dnaE1VUlRJL0thS2hIRHZrcTNJL0R5dVNXVjJWcER0RU5VdEMydTVYc2J5cVZaWnNrMmJoSnBmRk9NR3p6bGRsbXl5OXZQWEtXa3lYSVduemV0MU9LdG5Ucm5xcU85YmNkdThCNUlEQWg4Q2RBOEFnY0NFQy9sQXRMVWhSS1pITmkwMU1qWWpLVEVkU096eTVTSkJ5WW02NnlreU9URnErWE9ERTRXWFVwR3I2MnJ2dlNuOHJKZHZ0NDZjOEF1TUFHRVZJYllWZ1Z3anVHcGk5dUJyV08xZkhUVXVuRHAzdTkyZUNrZ2Noa2tFMFZkYUpMVUV2MVFxUis3NXp3eEFFVkp4SUdZNkg4SXUxTlp5cEYvK0JkSVR4TVJJRkNVcGROVFU4cWYvK0JiSVN3ekpBcCtKenlGbEgzdzEwSmRTcXYvOGRMcy8zZkxzVnUvNXo1ZGl0My9PZi8vanBkbnU5M2lqSXlVMUZRZ2hLQ2RuZWQvK0IzdzJFcktjaXVkYzVITFZWLytCN1FZbld1STdwV25aM2JWUC9HM2Y0SUFEdVlLVEpJcWpDVTA3cU5VaU8zZi9naThFQkRpTElvalVpRjRNNU1acGVZWGJwSE9xNitjL1BCSWdDMkIvRVdGcUhTR3NHMEU2Q3hCY0F0QXR4OUd3TjhHRkJoUnVFd2JDd0g4UW9nQjlLSzVJSlluQk5rbEl0eHVjajBQUnd5c1lKREJlMVhUM1RkMzNXZ1FiQk5UMEZUdTcrWlZPbEtsOEJoUUFtZ213Rm5BUk9Kc1FrRStDaEpRL0FZZ0lZSmdrVUQ5bFVqbkUya0R2RTJjSTE5a0dzQm55azBzdWs0d1haN2x4RnlBU1MwcEVOT0VuTGtvNFdGQVlyeVZSSkRGYTc1aEJORnFEZTYzczI1VytpeHVxc08zTjRibWtHVTducG5hOVo1NVdRT29FRFI1bmdPTEF4NEVJQVZNQklnclFNUEFjWUlmb29Bb1FjQlNOZzNBNFE0aHBOWGtBSVVGK0lEakxUaGNPOE80YkRrNU1UY1dvdHVXbGM0YU4rYXNiaFBEVVVwS2d1UjdNaVRhU1Rnbm1aRUxrU2N6NkIyNVhEdE9xQ082OHV1V05jZ2ZIU3R0Uzd3RHp3RC9nVFdBN0FIK0VBV1lDdG1RSGJBOVljSTdxV0FwWUg3RkFMTGlrRTBEbVhYbGxjamkwRnlWSFdra1JjTUVibUVlS2d1aW9Zcm1SSlo3aklVUkxHNGxycm1FazhjelJyWm9tYk5YVGI3Vk9POHhYRFRyUHNpRUpIbWFncU1NVmFXWEszZUN4UURQdy9SYkFOaEZreU9JZ3JUTUdlTmt5Wk5Bb3dobXp1NmRkOHVWNS9nT0hCWXc2anVIa1V5WkFMQ1pwNWhyS28yekN4My9uaERvQmNwdWJtaFIzUWVXR3p1OHFOZi93ZzhCeUJxVG1DaE9DdFRaS1dZS21mbDMrRUJncDlua3pVbnluQlZCVXorZjRKWUF3UVBnY3plQ1lqRzVPSnJDSHBUUDEvYk5PanF2Zi93NndDMkJYQ1dOUzhSNVFIVm92WWVtZldUM2JWWWViODU4NTRlQUdhRkpKeEcyZ1NXd2dsQnRxbXNMTy8vZ1NLQTc4ZUJwSndaMEVRZ0NoRWxRcGtjdW1oejBzOTh1L3dBYlFEV3d0SU1JY0NZWkdFRXRtNUUwaDh2dGE4ZGVmTlM3S091L0hmNEZlQUgwaEJnTnVEM0F3UWZ3THdDYkNvTmhVR0RURmRRS3dpanRiU3hUSXlQcnlUSVdnMUhFc2pVTGNsSytKSlZTS1ZsYVRrblI2UzFRWmtPRXdJVUpyUXgyZVpnYmxFYUlKZVp2bUZGZHgyNVc3d0s0QU9IQjFBV1lrQmdBSVdId1ZnSE1BaTBGSmkwU0xETVhxSnNhRVFkSVFnUGFtZWROaWhPU20wdHduUmNtKzljUTZoYW01dlk5UlpYRzhxRDIxeTVrdUw0Nm9XYXBFeEY3Q3VwMkw5TzZ3c084bWhJa3hidXdJVVlJbGVUVWVjZDZXZDhJVEFuWUtVQmpBVUVMR0hnR0pBN3c4Q01CTnhBMUZOTWtZWWdsTFJHSDRheUFYTUdTUll0eE9qNlpIQ2s0RkFMa2s3TFBHSndZbVYzUFZLUTRYSHN5NDRNdU5FSkNKcUdVTERxeWl2WGlQVE1XbXFDQ3VDUGRqZ1I0N3dEMXdCcXdUb0FvMFNacUJjSlFEckMzaUFBZlFMdUgyVWcxUTd3VUtjaHpORFlYaXJLdkdESlRMdzdBd0NTMTVNUnZFWXN4dm1qTHI2eHRGMllwRGM1RzVtVGhjNUpKSU5oaGdMNmFjZGt3dlc2NHNPZ2RaNk1tbjFDQ1Vzb01mQlc3UEJad0pDRmtLTVdJdEVncHhObXBlWmpDYXFiZzlnaXdmcURiMkIxZi80S3lBVUlialViank5TUVuTTM0aGd5Nk9MUzZYTjU1Ly9CUjRIaVpHTlFjSDVFakNwUVp6ZUl2L1BBdU1DSmg1Rk1LM2taSUVpWjgwL3QxMHZSWkxxZE9Lb2Uzbit1QjVSY2pqTlM0anlnbkRxKzM1ZC9yQWZBUXdteldTWHdvN291Ny96eEhBNUFYSVVrdW5GbERweFc1ZmZkN3MrZ2NzUXNtT3pKTFNjNlhVclh6NXo1elBNd0F3QmFrR3RpTjVzZWtmaXpmcW5mSi94MEFyTWY3cE5PaHhHMDRka2ZpemYvTHZEM0FYa0lDVzFETkRnTnFtbkt5TnhadjV6NWM3dy9BRnloWXk2bUowRithcVhLOEdPQlp2L2wwNTRmQUpEQktBbEJ4b25rTURmbXhhYUxKNWcrRHlMQ3RjVnIvL0IwQUFSZ2VnU0lzaG1Ha1BVYW1VVEwxQ042SEU2KzFYVk90N1VhLzQ1NEM0d0FtQllnbU1MQ053eEdBMnFHc2FaU1ZHakROZEhjZkhjalgvNERSQUJtZ1MrQmxnQlF0eUdvSjBWZ25BSXdCcWJHMGVRaW9DOUNJR25QV0hDdVZMNVNTZzdnNm1Xa2pSSEtnWWNYYVFqSEVqYVk5YlM0M2tzd09SRHlyZGtrazNha3dETmdIbXhKOXVycHZ1TEZVZFFERjU1Tk05dEZ1dnFZTUtuMTRDaXdKVkR0QjBnYlVUNEVlQlVRYUVOa0tPRk9CcVJxVWhwamFKNHhYYXNrRGFZR0JodzlsVTVGa1B3OHpmSEkrbkZybElXb3VSRkI5dGZpcVZMTng2S3B3a01WNXN4cDd5R2dlSTVGRjc2REc1OG9UT0VFeE01MDdBSTdyd0lJZ0laaFJ3Y1FHbUMvZ2k4Q2xoYmhMeWtNdWtVcUNlQk9vSzJRUUdnV2c3ajh5dlBMajBFNkJDYlJ5a2FYRTZTcFUzeTR1QXhSaXZZL0ZYcjRsQlRXaVdOMG5KQUM0TndyZXBkMUV0QTd6bkZpeXp2a05kQktCMmMrTks3Mk9udWdKS09BTk1BZjhJV0QvaFlCL1Fwd3VCcTRZOU5UalZpOUdjS0p0OHM5M2QwZVo3dVpaNkc4MDEzYzAxM2R6WGQzZDA1T0pjblBPM2VBNTBEVXhZRlVvaDhzTWdsRmxqZVlhekowMzNaeHZUcnZjNy9BY0NBNmtvaXFaT05UQWtwaUVwdFVLbXB3c2I3YnZiZDRRZ0NweDVGaUhvYmtRWXlreVQrWVRjNlhJbEdaVkhlNzg1ODU0SlBFTEtvV1luR1pvT3BTWnhFd216WlJvV05sNTVxdmZuUC9JNWs1bi8rWkhKejVkTG91OTNqT0xJZHhLbWorR00zNjVmczVLTEliS0wvOEdSQXZVcGpTVGk1R3BISGtldjE5VERHTWwrbm1mT2Y0VXNBclpRallJdU9IYkhTNlVTcFIvNTRIckJVWnF2eEd5am5hbXR0VXovK0RuZ1pPRllHUWNTUW1vUG1ENWZxeW8xSUhQL3dLQkFNYU9RWG9kaE1taGFQcG9XN2ZMNjdLTjlwdXNvNjc4L3dCWXdJSEJEWUkwQ0hRWWtMK0ZGQXRRaWlwTGgyU0VnT0FJSENoaUNqd1VuQlB3dzRUL2pkWm80RkdMdElrYXRxN25xazRHOFhCak5qK0hTUDFwQjlHeFRmTE5MbTVjYW1Zdm1jc0lzTzlwVlVEdkF4N3Y2M21qNWZCeDVpcmFPc2Q0STBBd2tIVkFmT0Fwc1VRRGxBUDJJU01Sd0tFZWJzbGhjaFFpMUZpWkhBaXdObUl1WkxwRkpWRHFDK2twSXN1c3VQeGpKdkp3U1I3TWw1RzBYWTM4WkM1RzZWN2FLaEtHd3VOa0FwVU5jUXRuYTF2YVYxaXV0TEZhMjdUM1hWd1NDYWlmWTF1Z3h1a0M3d0VCd0dRQk1nTWtCc3dmb0Ixd0FIQWRqaWlDZWdiMEp6QmNGWEJ4amFZenh5R0hDbWh3ak5zcmhESkpKYXkwbTV5RjlDbmpZdkJvWENra0w5eEFCVFRIamc0dVNvSFNjSEpVRldZVVpvTmFJVG9zVTMxSzRXcjA3MTVYZWR1OFlWRlAyVmxUMVZIZWxtc0NQSGVDMGdSbVR3NVJZajlCR0doUm1SZXhwb3dObGtjd1dhTDJZOHMwdDFSdnI2OWYxOS81NEs1QnREUWFGSWZMOUkyb3BRcDJsVm5lL09TNzNKZkNMQTZOR0ltanM2UzZhbXRVS25uZWU2THZsTDREZFJ1TktCSXlraFdYSjJHTTNxUVBSSXNoRFR4enZuUHpQRjBGT0F0WWZpZWFKUktFc1U2QzlZblhxR1Z1ZldSMVhVMU9mODU3d1A2SXRDcHlTU25QVm1TemYvT2ZBRCtoQTczVHFVa3AwcDRzeVdiLy9OQVBzRURGcmt1YU5UR3k0NnRrczM4dStYZU9JVklMMEdZN1VxY0pTenJxVjFYRm0vbDN5NytBN0FYUXdGSzl3ZWdiS2xCYm9Pbm9Ja1V3bW5xcy8vQTdvSElOZFVHQkM0aThoWVFhK29JWVhMNFVlVi95bDhDTndvdkd4bVIzU1JZSlozYlZJanQzL09lQW9FRDNFMGRpY1NFRkRKcWFZYXNxczdkL3puZ1RvQk1wUkZvVWhNRnRrbGprdmN1Nk5GMDZybzZkL3U4QU9RQmhvaVlEZXdmZ0dmQWhnVUFOQUlBSWNGeUYwTElaeE5CTkE1UnVEVGdjQ0FDREN5TjVyck1USXZsMTNkckxWeWs1T1ZQTGtrbEdTelJ5VkZLUXhYN3BSSWs1bkNrU0twaENEYm5PL2RwNkRVME5sMU84QVhnQWJkd0hnQWJPRkREY0E1QU5LU3dpUUROV2lTdVB3ZjRYUlFNeTV1RlVCQ2duZVhYa3FTSjBRWTRxeVVTVGNha2pYU0xnSW5LdkxxVGc0dVNVS05ja2t1NUtnL3JrVXRJcjU0bXhoeDFTcXp1enJEclQydmNac2hXMlhFUXVSYk4wM3F1cGNyM3RWVS93RExRV2lBeHdCcVlDaGljSTBCZ1lYUWFBTWFBMWtJU0RvR1lQMEd2QnFnN2hZaDBEZUNyUWY4YVJiSkRJV2xpMkR0WklBbGlLR1FPMkNKakl4Wk1Ua2toSElZY093cUNOQkZaaVBZblRJSFFDbmlMRGVQb2l3aTRVNGNoVHpUM1V3M1NxMW5hVm9jcmNlWWVVcjZTR1F5SU1hRFpReGd5cjdLVjRxZFowODY1dlN0dmdJRkFJeWdHTWdIRUFuSVA0UDRJdkREaG9CeUFmQUpxTGdRa1dvSDBBbklEMkZJZnhQQWlBSE00ZjBnMWtvNE9BNlJSajJQdytsVVJJUmdxRGNKNE9RbGlKQkZ3UTRQd2lvUldJMVkza3M1RVZFVktweVlyZFpvVFdGR3lsaHNhVk9lcXAzc0drR05qcmRLM2VBNjREWUFTa0NXZzlSN05UY0VzamtPS2NuYzFCTW1ZSFhvYW1tR2JIRys5eC8vQ0x3V1VLd1BjMUQxVE1DejZHUTFRcU41eFhoMTN5Zi93VDZDdmxJVnJpaWxUQTlDZlozZVZORUR2eTcvREFoRzVQYVRtNlhSWFF5Y3lEZU0vTHY4RXhBcUkzTnpNMWVRaFY5ME55RHFlL3NodWUyNy9ENkNHeGFnOEJSUk5EQWFxRVQ3VVYxWXdhUW5kbDJmbnBmQ2xncWtxQnFCNkdCRUZRS2sxWDVGQkU2YVlVYTZ0TzYzM1o3czhEOEFaY1VSbFpNZGVMRk8rWDZqVk5FRHYvNENuZ0hpaXZCZVIwSkptV2habEY1YkMyUm9vYlN1anJ2bDMrQldBQng0ZzRkWXNSdWxDRnhhd2lvV2pGT29YNGRsRlh1cmRmWDFUYk44c3l2MXY1ZHBicmFYWnUybCt2cnZwZG0wbG5ELytBeThBL29HUkF4WUdQQ2RBNXdLcUNBdzNTUWNqekprTmdvUU1JRUpOYlVHeEpOMUwxeVFaRFlHSUtjbTYvTkVtZTZVaEpDRmM2VGdreXpaaUlySndTZWtXcGtSZzluSlQ2QlkzanMwM2JKWXJpdzdqM1l1OVNSMDBIekF2cDdzVmJaWXl5elFZekJjQWpnTzRDOVFFNUNFaFNReElVY2poQW9OSUQ5RFRKS0ZxSEdQUExORWhTU1ZLeXlrYWhiRGNWRWltSkxPREdXcEhzVDVBRGFjTkc1Sk9PU0QyUys0eGF0ZG9VMnZKeC9TMkV2MThQSWlOT1d6Um5VWHd2d0QvQUJleGNnaU1IdU9Db0M0QnJIQWh3ZUFYOUFJQ0s4SEJEQ3B4blhjd0lVWkVsOG00OUJQeEVaTWJrampVR0ZGRWthTUpLcGpGY3dGd1MrTVJkRGJmR1J3MWFRM0w0REFaelRlM3JkNldIWWRiNFpSTm9tb3BUUzZhZ3EydkExa0NoUjNBaDRleEFqQVBNYStJa0Z5Y3BmcUNCZkw1cVg3eDFmdDUrZUNzd2I4bWpRRllGYy9SazFES0tES3F6dmZkRjN1endNRURyZ01hZzRyQmdTMU5ieXBEODU4NTZrR09DeXB4VU5Ja2dhSnNvTHFVUWt0WWNobXEydi95R0hXRDNNeTZYa2xtanZaMHN1K09mT1o2RUNLUWZKaWFtaHBZamgxWEZtL2puem55Rk5DNTRmZGttU2FPSFQrTE5mSFA5S0Izd3VjbjV4S0dlbVBYOFdiK1QvK0tVQkx3aGx0NkM0TWFlVkFzMzhjL3lhRE9nOXkwNU1DU1RkbHl1bllXYS8vR1VHT0N4b2dycGdpS1EwTkxGMHN2bm1OZk92bzd6LzhDUVFaMU9PaE5NVDdoZ3paM1VhcDUyNzNaN3ZCRVFPQUtZVnh1R2tMeUFaTmhpZUMwWFRaM1h6aXZQblBBQ2pBVnNLMFE4V1EzREVYaHNHalVDZWFwRVZVOHZ5RTduUXM2di9kNEEwb0F1QnVBNGtnQkxCYVFmOFpSM0E1Z09HRFBjSmNwQkRZaTVHU0l6QWV1Z3l1c1UwZ1U0S09wS1JnMFlzaU1pRW1NZU9DbzFiUmlIV0p6dUg4NVdhT1dTV1NUa0JKb1NDQlBUempicnB1R2xpanZmSjVzaVhmT2EyeHJkVjRiNFVnVG9DZkFiRWF3T2tEZWdSY0V5RGhDbGhRQTNXU1NONG5TVzhramNONFRnSm9rSkRSd1Vpa0xRM0tuS1YyYlhXWFVqMFZSRFJjRDNadVZWUEZNZmgvT0dsTW5DbVNHaExiUXVRdTJyZSt2WVVNUXlDZVh6MElGalF4cnE4QThjQS9zTzhHNkUwTHNEMUFTOExVa2w1TkhNanRFc1JNSW1Fc1ZEbG9mUmE4a1gweE9ST2cycWtwSExWaHlCMGROOGtLZ2lwSlNHSlZGMHZjcmlma2xqYzAwY2xVcENzZENjSVl4WkwzcXU1Vm5IZHEzVWRhM21lRWdFa2dkcmljVDBVWUtxdHZaZWQ2cXFkT3FkR3ZBTkZBZitMY0wyRDBCWnFUZzl4TmVrZHhSZU1CRkloU2c5Y3V2dTdaZmR6eXZkM3U1dnU3ZDdwN3VucGJ6OHp3VndBOEllUUxOQ3RGUXpOQitVZExERE9abW0rNjNzNmRkOHVsMytDandXQU9nUEF5Y2JBZWs2YklieXBvZ2QvL0F1Y0ZUQjhqMkFUb2JrUWpsSTFhNVBEblJlb3pIMGQ3djVrdS93MXdMekVFQmJsS2NuazhuR25IK05NN2RSZHM3VWMvTS9QRkdDb2pjWVFkNFgwVEE3Y2lnZzE4NitIYS9YZk9mNFVrQXR3MlhUbUUwUEtaMDFqMVJyLytEYUFGNnFRa1BFYmFIcE8rWDdiYm1pQjMvOEVBQXNvVmcwbXBJVEloWm1pR1g2amwyVWI2NVc0Njc1ZC9nQTRnR29oWnc0eDJEV0hFd0lBM1hnUk9MNFBnaUhYbjYvSDdSMTN5NlhlMjd3QnZnRVl3REZnR0hoQ2diQStBSjlBYnFaQ0ZBUjBENUM0RzhMU0VUQWpBRS9sSWZ4Q1FSQUVXOEc0UmlxTlpIS1F1eFJrb2ZodEhzVVFpNUpHNFFrWEpMRkVDbUE4QitEcUNLZ3Bja0FWU29IV0lxU3psVHpQQ1BKckNQWngrUnBYU3Azb3VnaWk1dktWMEdPZDRDMHdIMUFDS2dRZEFVRWdDOWdSeUY4WkJDNExRQ2hCUmlvUFFqSU5BRUhCL0RlSVVFWmgxa2tVSTB5Y0xpM0RBandKMGJSUmtrRmpBaWFTWGJTbFlGWUJUaFFEYUkyRlZKSkxGc1pBcHdLaUtFT29Pa09zWFlqSXZteEJZcWNlcWMzdHhxanpLVjZHTTNWZTRUaUlzVVh5bVRwcGV5M1ZNcXRPcWN5NTBjaGMxVGFoVldubDNJQjdvQTRodUdJRnVJb0VxQ0JoUWh3Z1IwQVlZa0dnb2xRVFFoalVraVE4QVZtSnljNnh1VWorTFVhVjdNVGlTcVkzY2plRVRtVm5CeVNUaGxZa2lMV1V5V3p4VUU0SG1FZ0lScytlUnhyaXZwMDdqclBRUUp5UTBraU5OMGU3RnlwMjNxcmJDUG5TQS9VQmh3WG9CT1FQNkYvRkVEOGcwUXRBNlJEZ25Zc3g1RTJGekZDSUtHcnhJRm9ONVZTWnVNbVE4cEp1YjYrdmJVbVJ5azVva2oyWk1tQnlTVktreE43Wm1DRk1pVGFoVDFOYlgxdEpxbE5XVGxaNEdXZ0FyRkVKYVVoWWx2RWxndHkrYWRIVjVwWHAwNzgvUENNQVBjS1laZzhTbWcwajYrWHBtVlYvT2U3UENJQTdJR0hDb3JBemNQdXJPVlBPOCtjK2M4SVJDY015eWJFTllKQVptbkp0Nm4zZDdDRzRkdXI1eUx2blBFZUIyeER4ek00U1hpYUtHM2tObTRNUDJweDZxbFZmODU2NE4yRUNOVFVpOEd1b3FkVjZnN0N4Znk3L0lZSDVDL0tIT3loTHA2UEViT0ZpdmwzeGQ3d1FHRi9IQSsyTk1EN2p0Wm4vOGNBUUdDYVh4UzROTU1QRm1mK2M4VUlWQUg0QmV5ZmVsTU5nb0pycnAxTW9XVzZGVkhWV1BtcDcyOCtVcnZCdEE0eHk1UWtSQ2tMMDcwOWJkUVF3UTYrRkhqLytVdmdmME9vbmptVFJKbno0eEprenQxR3FmLytDS3dib2RCNVVpWGVnRXB5ZklRWGJvdG5WZGYvZ0JhQUt2RlNGd0Q2Q1ZzR28xUXRKY3J0RkEzTlM2YlhMeTlhYTVscG50cWJ1N3V0N3VPbmY4dThCcFlBaTRud0FNd3BJVE1GZkJoUnU0Tk1Cd1lpUktHYWdKUUNhaFppV2JrYmdwWU5HUHhIcWVFYTdsTGw3WERBQ05tS2lWaHM3cmxvT1lPeFN1MWNUZ1hYTkRVRWtDUWFqZlE0bWo0N0IwYk9xZXJnZWFxbzZvN3gzaDVFNmhTUWxaRENYUy9ZNGRiaDNoMDVWcDFoNW5nUEdBd2NFQkFCVkFpWVFjQjBJRG1CQ3lnTW9taVVpa2JBbWdUMnlvU0I2QzZoRElYMW93YVVqYUhlSGFaSE04WW00L0tiZHlrcWo5SmhJM0NqRzljNEZ5VmVhbGNsa2txc0c2SU10RW1ZZzNTdDFONTJxNkRIVjhrUk93bFFINmpzTmJ5ZGJxWEs4SUZ5ckN0amdJR0FIdEJEQURzUXc0aFFYc0lCQzRqSUpZU1kwbUE4aWNDa0JTQnZGWXBlRkJDcEJQOVV0RzZRT2tVWkhOMlpaNmU2RXFSY0M1T1o0V3d1eCs1U1ZSK09HZTVkY3dBc2xvemE3V0JTWWQxU3FyY3Jwd1IzcmVaNWFJOUNHU2hjaFFoaTk4QXdJQjNweUlBT3dzdVVENm83ZTVyY3pUZmRWOGRkN2ovK0NuZ0M2RGM0SEVWbXBpcENFcGt6S28xTzkvL0F2VUZSazVyaWptbk83Tzd5cGtnYy8vQ0VBaTFReXdPYzRPMnQ3eXBSN3Mvd2ZrQzlCV0N2SnhxV3BHdVViRFlWTUhNWkw2UE4vUDhWZ1dBVmc4bWtPQ3RHL2RNTm5aUlREWmU3OHovLy9TNWprcDI3NWQ3bmVHd0lRQ1RRWG9uV29NU2t5OTc5blpSd1kyVVJBdTl0MytEVEFPT0ZlSmszTUNJRmJLTEl3Y2hUWFVZR215L1R1dCtjK2M4SElCWDQ2Q1NaTWRRQ3hZZk5hamJjYWtEdnpuK0NLQVdZVkJySFFrcDFnc2pLTFVUQytUaUEzZzVXNDY3NWQvZ0wxQWY0RDNnYzRMQUp0NUNDM015azAwSXoyakFuRkxvTHMzZlhDYTY1NVZlMVhYemZYejc2K3ZybnBqanZiZDRBMW9DRzRITEJOZ01pRFFnVENBWktJb1F6VU9paU1OUTNnMHdLMVV3bG9RMEdwWm1yU0RZTjRSVWNHSzNEMElrSGNrN3JNU1dJMnpaeUlpSFdTSnN5RnhJdUJRR0psSTNGNmxLZ21yVWJHbFR1TE9oamMvZ3lpQ21pbWZGMmhqbmVHS0ZHRk9CU2dIekM5Z1JZQ2d3bkFjUVE0RGRDTmloc2tpNUUwTGRHWWorSElJb0tFZkRFamowWkhBMmp5UzFQTHhaU2NTUkN3NlJFaHVPYk9ERlNzTlF1aFJGWG1saklxU2xFYzh6UHk5TTZkZnZ6REhvSjFXNVZuZ0lCZ0RJTWdoOFhRcWhCdzV4c0Z1SWFDRnd3bzdpQXNCVlFob1dvbWJSaXplMFlyU1V6a0trR0ROekZlekd4R1JRR0xTM0dKVnRZeE1SRnh2bElMZ2ttSmljU1ZTV1NqY3ZUTHAxZW90YnJDeFdlV21pQlFnbmFpN3dXZ0JVWVdBRG9nRTlCYVRBY2dsYWd1a3VaVXVyWk1NYy9hbk9qdFpOTnUvL0NNZ1JDSDhEeEN6SFVUQWxnMWljeWI4bzU2YVVRd1Eya2I1MXVIUmQvK01vRlVCWmgwTkV4cXlHNGJrMG1xSVREdWdSZTNZYWUzL3k3dzBnRnpnbEF6Z2dJSjhOOXBLZUVhQlp2L2wzaG9nQlpnbEkwcCtPRGdKK3pwMFJvRm0vK1Q3dkdNQ3N4LzZrRTBIRWJucEg0czMveTd5MEFMOEhyeEJGdzNtOGNjckkvRm0vL3k4QWxnQytBK1RGQ2NES0NoQVJtaU1GQ0kxWXZqZ0w2SXdNMnk5Zkk5UFcwRlVubG05cHRtN2J6OERSTno2dXl0cFpyM2drWVhvVk91bkpyd3NZQktZS3VObWhVRVlOOFEwQ1pCYnRDUU5uRVZqQkxCREk4bVMyOXo1NjlzM0lBS09OeGhLM1hIcFpucHZ5WUMzbXlCdExObnZmSnJjcGNxcDA5cmZFUUFKZEFNMURNR0VWQnVTeFJnU2tJQ1dsNWJCUmlJa2hIQU9hdVVtYm02VVRxNWtQb3VDV2NOUnZudDJ1MzBiYjYrL1RFMlAxT3pWNGVNMldkK1ZDTEVzMUhUMitMTmVFSEFFbUFQdkdvZ3N5R3dCT1JVQzVwMkU3TmpBWEF6Z1A4RGNpS0ZJb1F0KzlzcENTSjRSWTVIbzNxYmprOHNaZGY2TVpzZlZGczZkMUx0Szd2UGlrUmE1dUZlQ21BR3NBYktBbU1SNVJGTUllQlZBR1NodkxMTFNiYTBVZ2M0TDhVakRTL3JsbFkzY2Jrc1RaVVh3dzVhTE50VDAzeTBlbnB2NERBT0tGdUMzVWVYdjFCNlp0QkN0UE44QnNnQTdJR0tnM0FnMEhpR2hVeER3bmJRekZDV0g4SVNFNkZxSERBdmF2bzR0eng5SlJsSERxLzE2YW05UWZMdkFzUUJuWUtwQWNTQTNNRG9oNEJTQWJBUGtZOUhRZURLaEZReEFzQk9EeHdVd0tpSE1zemVqNkltSWVJVEtTeVZTeEpNYmE0YlJQcERob1d3dWgrMHlHNGxtU2s0T0x1UzRYK05XS1FvYU84Z3FwNTFtK3d3Z1JWTzZlMHJ6d0Fmd0puQStBSkFCQ3dNNEFwVUNYUnFlSnNKMEU5R3JqWENvUUM1a1lDMEVPRjBVNVNXSWVJMEY3VXlwTVVod0xrUkk1TWJPU3FjSEJ6S1FsbUtRa2pjU1ZNaWRFNlN6QzBKRXRHaGZhQnRGWjdtcThoeDFwWWRHbFZlR1FvMVBPNmd5TytBZ3lBZ2dKc1lRWUVDNndGY2dLd0JPSzFBZkV3TlNvTllSaUVWQ2VPV2htTmdqRVFFa0cwckZRT3dLRWN5elpUTWdRQ1N6a2owa0taU1NNcnRCaHg2TVphNmJGR1lra3hPQ2twcmswb3lIRjExR3RncjRnWGxmZnU1UVJnbmprUEFmU0FaNEY4RWJINFFNdERZa2ZnOXlMTEJ1dWtXTVRCVEF3UnIzTUx1N3lydGU3ZGN1YnVOLytaNEt4QzhBb2dYUUpKQjVCU2xvTHlQSzZKbGhuSE1GSHVmc2RuVlYzUGU1TEx2bEw0WWtLQ0Nld3NMSXFFNVNaYVhQc1E2ZGZaRVpocDd2Zk9mT0szZUl3QklBaVJSTXpkT1VpZ1BERTdzTVRWVXd1aXM3L25QRnFBbWNXNUw1UW1QbDdKT1F2M2MyZVJRY3dldy8vS1FhQXFna3htbUVlVVNLeXVuUWJOUllSYkx6M2YrYy9IUzcvZEhQMXRMODVPZWZiZC8vNTl0Szc4L1BCZWlBRmNFcUhHK0wydWdqZW1kT1hyR3hjZHYvNXp3cGdLSlpMeFRGNGpqTW93dE8vYnFENE1UVzBlTy8zZURmQkZvNG96UVpKZWNRaldXM1JwODVueWw4RUpnT1BPREFubVdvRGxNaW1vTFJ5V2ZuUG5mQVdHQVh3UEJLQjVBMnVlVldVVW9sQmhrWG0ydmwwZHM2ei84QWJzQTg0RTFBa0lJaUNjQkJZbGhWRklFd0ExUWcxaVpDYWhGb05udzdMeVhoQklVU1dvMlV4dGtwMmJtSktFYkRxNXBTUG9kNGhQTDlLUTVsU0owZTdPQlBqK1ZTUzBNRFVGek9ZT2pyOWI2MWUwV2RWdS9rVGpOQk5OMUJWV3EzZURiQ0NpYkF5RU80RHVnWWtCK2g5Q1lBblVHcUREQjBra0wwRFRnL2hFRGJYY05ZUDJONDl5Y0dHbTQ5R1hjY2treEtSSU9DT1ZCdkZ5S0llMmpnM0U0TGtsaitLQWZyazNNamhmaGVZdGdoVW1RYkZGQ08vaERORXFlTzFHRkFRaGQ0Q0lZQXFJOGdqVUFxc3BoQWdkUWR2QkxBQVB3VlhBUTRMeURnMk5KZTBVaHNCbUJEUnFhU0ZNTUlEbEdCVG5EZUxoUm5BK2trWEFvekZTcGFPZUNsaTRFNUtucE9ESTR1eDBETHBicFRJbTc1dWpweXZYbG1qcXZSd1RKbnpTZHRoN2VIV0hXbm1lQTdvQlZ3WFkxSDRXUklCY3c1UlhOTkdoUE43WFdSa2hybVZHekNEZHIzYzl2LzRYUUFRUUJ4NEp4RlcwYUZ3TStMVWlqSWJkREh4RFZVNnl3L1RxNldqZi81SUFHTkJSZ2ZSblFlYklVMFc0Nk05a3dUS09FMGNNdzNkUEYvL3hmQUdwREZDa2ZXMERaaTJsMkhRM0hCWlNmN2J2TUFCc1FNRk0wTmJRSG9Gc2xQQnVPQ3lZZi9td0RSZ01GUWk5dWt3RDBDMnB6bkt4dU9DeVllNy9Ic0FhSUltRWdMeWZUTUtnTFZES0J6ZVlFdU9DeVlmL2lDZ003QlB3em9EVEE4Z2FnUUJITDUyZGxnVFNsNVlYOXp2OEh2QUZRREJHVk15SGlGRUZoY3ZuWjJZQ1lhb3NMZi9pMkFZNkJjb1M5cE9PWmdFNUZnUmh4V1RUQkF3aU1tcnlOSzlqZi9MdkNqQVVlSXVCRVJVR0VZd3NvVE1kMEM2TlJiNUo4bUxMcHFxMXZPcWIvenAzZ1VBQ013OVJiQlhTVVEwWks0MGgzTG9KcWw5Mk9UdEhWLy9nTUxBcjRRc0lURVNCcEFuQWNRVU1RTUxzRUFDS0MyRGREa0JsdzZoUERVeUs4UWdMb0xnZmxLeGlTeE5qV1NGcm5tVGdwcWVxNDlHekJlbWpoVHk2UmRwcTN2VEowMVBmVTdEVzNlbDJpRFdidVJwM2dOREFITGFBazhrQWJ3SjlRVGdHUkh3Qnd3L2gwTGoyQ3JBakVRTnBwWUcwQjBBNzkwd2FLb1R3VUl0ckkvV3BHOGx6VDF5QUg4YlRlUmJCaHhkV2tKSTIycEZCSktNU3FNSkRzU0JiTEd3bldZSzNGZTZMR2FxdzdyNnRRT2lpUzFBaW1rZFJ6TjJOVk5LKzRzVlJZM3dFQmdFSXdLYUFIb0JCWXRBS3hBWFlHNEZDQ0dRSHRwRExqa0lrTkF3STFEWUxvVVlJSEYyeVN5bXVOb3V3V0VISms4TllqWVJrSjFvcVdRQWQ0SStIM2pnS2FEaVdSeHFNZ1dDU1F2by9qNkkwRG5rb2NoemxCdW4zWk1GQldxeUIwTWZUcVJrVzZJZ3YxR2xYVGpvNzBGZWNkMHFxejNsVzFJQnk0QjVRUmFCbVlCVmdGOUFwTUl0QlNJWDhJa0NJUVQrSWVMVUwwR0RCUEFRa0lpUFlpSVg4UmNSQWZ6ZzNLWStFQUxvWEJWVXFSNUh3cUhDazNhNmVhNlYwbDlLNWl1a1NYYTA3cE1odWFteWQzZlRKdFRKWjFNM25nWlNBOEVlUS94VUN3NDBDeXFPd3pZYTJPbSs2cTNUcnZQdS93VWtBNmNVNFBBVGhWN0FIb1RwcFRKbERlTkVEdi80UXdCakllUnN3cGxLSzJHenU4cVorWGY0UU1DbWlpS29uRTlHTDVSTkNkME5oTlBSZE8vbitGa0VRRm1IK0tZemdhaW5VRnBheHV4UlBZMllZZWIvL0NFRTZiWUo0Sm9RMk9hbWhzN3VmLy8vb0Uyb05wTFdwYVNuMjZ5bFR2eDM0N3dtd1g0ZlFPTU9hekN3VmtuRTBZVVVIemo1WTJlUlVkVXIzNDU4VXZnQVZnT1ZOeGxIRVphMGVETkZCRkM2MUJyTTF0Wjg1OHBmQW1RRE9SVkRVRmFKS2RFUG5FSktpVHJxaWVkdU91L1BuUEFDM0FOaUVFRHJDekNkS0F4aGJUVXVraU1tRlFmaFJ5Yll1TDY2K3ZlbSt2cm5MNitqZlhuNDZYZjRBNllFRmlVRjZFNEZKQkdZUndHSEpwR0E4aFNMeklPVUtjSXNQNXdTVkx3UFFQQlVVbUM1SkZBSWdQeFZYT0Rpd3FodXBhNnlTY3p6UEJUVGhTckZFcE9MR29qanBSQzJrYkxiMVY4cnM2ckRxeXZYamlSSVEyZUxXNEt0dFZYSFdIZWxmZkFkSUJSNENjUVYrQUJzRUNBU0lFWUUwUGtMa0RNaUdEVHlnaUR3Ung0TVRjNURtRnlTRWluUlBpTGgxdEdMTmtreEZ5Sjg0S1ZxU1VWRk04U1NvWkc1eVMxTThTeC9PYmFZUXZhUXdXVFhVMXg3dEszYlIyNzBPUUlXMHhXeHg1N1IyN3dEL3dCUHdnNEVaQkVJWU1HbUM5QnhDUlpDemh3d2NMRWFCQncyeEp0SWhQQ0xpakg2bWpjVUlqUW9XV1Y3N2h1RndZbytsU1k5ZG5BblJhcENxTjQ5cnBDb1NXbDVEeVdnR1gwTGdxcFZxcDIwcjEzb1J3cGdYcWhYZ3N3QUVjVkEzRDBQb3dwZzB1UW1kbXB1aHBFNHUyZHpaM2xUcHIvbDNnTm9CMmd1SVA4UFp1b1NpYUZQSmpKTzZVVDZMK2lvanAzYmQvK084TTRCY29XU0dva3A4SmcxSERvalFMTi9MdmsvNGxRS3RFQlVVK2FFNlQwczRkRWJpemYrNlhlTWdGWGhhRE9xbHdjSnNla2ZpemYvTHZJWUMreEJFMVJjTjV1ZWtmaXpmLzRwZ0Y5aUNWVVVvTUVieTQ3SS9GbS8rWEszZUtrQ3NCQXlGVzRsQVNtYkhwSGdXYi8vRmNBRmtGbVJuNFRvblNlZmx4MFIrTE4rMjcvRmtBdUlXWkVjeE9oTDJqOG56b2pRTE4vT2Y0ZHdDcVF0Z1RrUDR3SVJtR3VPY2pFOG5YT1BnWDlGRlV3TzNmOHU4QlpnT3FVZ3RRZlliWmc4azh3Wjhha1ZGcUhGOW5aMllXcWROZjhYZUFOcUJZWVhrQXZjRkNnZHNPd09JTlpjTnBnV0MxQzJDNWhlUjZHcGs0RTJGT0NrallvU1NMa1JrZjE3dUtteHF0cGNramVTNTZWSXVSRHprbGlkTXA1bzQ2YkY4dVlIRTBxMFRqdmNWMVN2ZjdrRnYyQ2J3SmlBVXVCTW9PcUFua0dYQkFZT0VTU01ISUhhRFZCc2NrY3dLc2Z4cEx4NUhrZWRXU0hBaFl1eEZDcTEzR1ZpNEZxcFhhSDhSSWZ5bXBNakpkbWVYNWt4RzhsbVNRa29iY3NpUUlrVlM5OUJqZDA2ekFqdXYxUFpOellKNXFHaEhkZUFoQUFnbUJFWW5CT2hCSUN0QUtFQk0rckFmOHhVbEFhQWcwTUFOTURFYVJZZ3B3ZlJxYTJlSlpKS1ppc1luTmc1bzNGUXduaVdZbkUyY2hoU29rV0Z3TGExaHZNQnZHNHhGT3BKblpoYmFhTnF0MVh4QTJWOTh1R0I5dWxQcjQ2cXFsYnlCM3dXa0FhNlA0WHNRRUxXS2dwQ0VFODNUamswcDNKVEZMZGpVNzB1cW85R3FseXAzdDQzbjVIUEFjeUVkRHFMQVU0cjA3QStHYkVzSjJzYk5weFhoMXZ5Ny9CUmdHUGxBZFdoVXZlY21mSjJJZFQzdlp6ZDNQL3hDZ1RJTE1MYU9iUE5GQW5XTUhKOTJiZDJ6Q0RqcmZuUC9NeEtseEtseWNTcFc4ei8vLzlCQ0NFbVZCREJNaGhUZFFmczF0Zjh1OE5vSDZGbUd5b3VCY3BVY1dvdGRGRW5ZMllIdS8vZ1JJRVhsRVpROFZ5MGNSVUdpM0lkZTdYc2RsZk9mT2VEWkFGcURpR2J5U1Q0cmRxYTIxUk8vNXljOEQ5QXIwVTRrbVJKNjhlazZDVUcycWFseFkzLzhFV2dhZ1BKTEJKSWwrTFIrSnQ3YkMrVktBMzFYbEhYZkx2OEN3Z0R3d1UyQ01RVVVCN3dIQWhWUXhRaTRId0JRb0VhaUhpY0M5QTF3SjRCcVJFQjdEcEMvaDJpSWpjY0pDbU5ZaEFvUmNFdFNrS2hMSG94VW1Dek04dXpLNm03bGM0WFVwTzVhVUc2L1hKa0VhMzBBVmNtSU5sTWdpN1BBR3dBZ3lBc1lCQ1lCUW9IRkFDNkFmTUtBS1NCNFFIc3RHTkQ0QUJpVWdhQUpnTm9ueFJBWWFGNFhFMmtNQitFUkIyZzRWMmlRU1Fwb1JrUDV3WXRDRWlNZ2tFbG5CSUR3Q0twT0Nva0JHSTNCMUM1RzRLYURuRDhYam51N05Uc3Y0clZ4QTU1TVFFTlNRcFdKejNhcnVMbzdlcTlzc1paQTFOQUlBZ05HSDhGTnNHb2RvZmdjNE5JWkFwQVRvTXkwUElPc0NvUlBHclZoUWdNWENuVXliOFNoUWlHajZ5a3Rkb2J6aHJlWEc0cWozTmtBRGRrQnpSSkt0ckNma3FHUTFOQytJOEt4Y3NJTm1tYVY0VjdnV0s5TzRuRVluT1JzSXAxYlc2MjFXMHI2eXhDMjlQTThCL29BYXdpWU9HQmJvRnlCT0F1b05BSUdES0NHaE94QmhhQk5CRGhRaTNEV2FKSWdvY3d1QnNVc2tjZkEzaCtKRFYzeVE1TWplOGNyWFVyOHVjR1BNbUp1dXowSGt4RHV2ZzZhMmxUdnJhSmxUdGJHdDhCMUFPdUgwRWxIY1BzWUJpR3NuOHdpTkdueFJGOEpwMnp1cXNtLytYZUltQlRZUWdJcVBKc1hqU0RCRHhxekpwQ3NZUkRLeTNXWWQzL3k3d09LQUpVRUZqOEhpaU5pY0hRVkNneXpydGd3d1pOZHNkUEwvL0JpUUJWd2hJUGNna054Y0ZHRmowd2w4MUx4TUcwQ3d2LytCd2dHZmdYdWN2UjZ1RFZpQXFISnBxWFNpRGJLTUN1NWYvOEYxQUdvQWI4VUhvdEVjQkdJZ3NKMmFWQnVuQlpNUC94aEFhUUNrdWZXMEI2UmJZN1hLdzNUZ3NtSCsyN3h5QWFRQTRLMzd1Z2VrV3pqd04wNExKaC8rVHdHamdwQzM3dUI0Q0RIb1M4NExKaC95N3c5UUJtd1VpR3FaeWJrUUR3aUVFY25JOG1EMlVZMkRzdHp6elpNUC94UmdNUUJWWUhrQ3ZGL0RxRFJBOVp5SlFZZWZMRHRKU2xHcHU3dzdYbStLMS84dThBSnNDaGhaQ3NINGxETUNUUTNSVUNXTmpBbkY3eWlYbkppeWthWG10cWRucmF1Ky8vQUhGQVkwUndDMVFMNERTRjBENkIxdEJZUUpUQkJ4cUhJRDlCRDJtd3pxWGpVRjZFSlV0Y1V3b29OeWJuQzYwM0s0dUdocU9CYkNIcExhdHF3NnhOajFkeGFIc3huaU9NRGpVMGxNbmJ1NDVwMXVLcXNzNmRWT2ViRTNVWkNsejIySU51TEdiNC9DNUNwZ2dzSEhDQndqSUZLaUZwQU84Rk9DbWgwRlFSb0w4TGhUcEpaSkljUWNBMnl1WVN5U2hwdGNrck1qMmNsTlNTUnZGR0o4eDYxSS9FQVBnM0NnSmQyMFZERmRkaE80UnlLRERHeFJQYmhwMVFSMjV4MWt1OFJ5RElWVG5Ua3doNEVGUUQ3UUxnQlpnR0VCYmhDVGNQNHFCTlFxQVQ4d0gwSnlDQUFiTTFIdTFLNE5PSGF5Y2MxTFErY1IzTG1JOUJDUXUrV1hINFJrUWxaSXRLa3FZa0c4bFdZaWZHNGxrbGNFa0RpbWE3RTZXTlBWVzlYVkZuZFZiNGp5Rk5vWlFac3cxVnUrQTdnRFBoVmdsRWVDcWFLQS9tTzNqUTMyZDAzM1p5T3dPdS81endIR2dyQm9WSWVaeW0wVjJwcGhCbFVUanZmK2M4TVNBNFJRMEtVcFpoVHpaM2VWTS9uem5pTkFva25Hd3BqWkVRaWpEak5Qc0tlOS9UdTc4NTdzOExJUUFyd3NiWGNUelhubzA2YmRkZEo5anAzdnlsK2M4QkpjSjF0TDdlZWZiZDVIR2dLNk8zSUxJeEZaYWdtMmFkS0pGc3ZQZDlMK051OFRnTm1Gc0twbVdreE1YcUZrVEcxbFVpdUV3UGQvL0NrQTVRaUtSZ3ZUaEpTZ1BOcGExODFXVDNVVnQvL0J0d0lpQWJzQzlDbUl6Q1JPMGJQdmIycVlSc29vRmEvK2N4VTd3SlpDQ2doNEdQQkpJMDhIb0M2anluZXN3dEZnWUlLTmJxYVY1LytBRjZBOW9JQUFBWEJLUWIybkpPRCtKQmNpVUdDTW4yYmxxbWwrUnh0L1h6ZlhOelgvNEE2b0NCSUhORzRDRXdud0ZCZ096RVJIRVdnQUpvdDVNQTFncUFRZVBncmxKVE9RZFVXdzlxYnhjYWg4N09hVW5BT1lQWlVOOXdxR04yMGNCNEQycDRYSTNydERlMFFBM2xRSkNVRXQ3VjlzVVNxdVYyUU4rb1JvRTg1Q2FuTlYwcjBnZERIMEE1RUFHb0cvQTBBSE1FVkFrd0lhQ2FMaEFvRWdoQ0FjS3hnVHgySlJWWGFLWTJEOFlYeklud3ZBZFJ3c1VsSkpKQWhvM202bXhDeFJpNU1WTFJMYjVkbmpnVDQvajJaRlRpRTlnaFlpNm00QmpkclBJTXdQN1VFVk52REcxbEhXZUFlaUFNQUNxQVFVQVVzRjJCcEFmd0d4RnVINkc4eVV5b3lEVmhFeEdDYml3U0JSUWhjVVhOZEpMRndTeC9YU0tTV1pEM3lUbDF4RFJSSEJ5c1ZSUGkxczRKTFM4M2E3VEpxTDVtUkdOZkNvMHFxQ3F0OGhDa3JuMUNqMmxkZUhlQU9vQ2VRVHNIOXBvTm9OU0QraUlDeUhnM3lEQ3dNT0ZDRUpFSmFVTTlCdFpheHRKUnkzYzdOWGZuM3B0YnFwei9BVFNBMWNBemtSb2lDKzBER2dVOEVjaUFGN0NLK3czV0Frb0wwTkJGZmZUYzJ6eHVQeEtKUzFyWlBYSHA2YmpCM3ZHRnBPMjh1N0R5OTlNd2lRT25FMEtyd29ZRFdRSDFCYUNEWnFVZ0p6Rm9LQjl1V2d5akMraUdnMm9VRXBJM3M2NnIzaVNRQWl4aVBWT09za2tlZkdNbnBjYkxabzcyWFY4bWFKdExLYndaa0Jyb0JsQThCcEdBc1NvRE5BNW8yaVNVTW1CZEVmQVZXRGhXY1h6V1RVV1NTTkkvbFE1dTd4K1MxMHJ6YTZybSt2ejRraWZqZU90eDR6WlozNVpSUzZjZFBIdDhXYThiUUNXUUhOb3k0WVJTaC9BbGtDWkJyMG5SZFNOb0ljS1lzbWFpN1ZWQ2ZEdEg2K2J1RGEvYzI0NjY1NXhpYTRxMnozdjFRaW8vT1IwOXJmWUFhNkJmeElTWUZZS1FRMkFEUWlSRUthZXk5R0lvSXl5eXQyT2ROWEJhUWNDKzNvNHF1MWUrUVNRYXBrc256KzJlNWhacjB3NG9xUHpzdTNQRk9GRUl4OUkwYkc0YVpHTms1cXd0ZHNvMWwxdVcxYm05WDVucHZ1dm0rajFxc20vazFrL3RIeURzdW12MUFRVDUrT1Y4QVowMFdGT09QRE1zSlFZVkcxMHNtdmFiMjArMmw0cjAxMjkxenk4ZW01dm1adHU3ajNlZkpyNHV6WjMzSVQ5Yk8xNUNHMFpnbE9ES1JSeUQxZVBMS0xYbUVDT2lUYXp5YXV0N0t5MDMxOWR1NXZPWjdybnAzRHU3VFFQcDh4VStkVmIrMDZzY2ZuUEdZVVpLRmJqaHhPQWxpU2thYXBITmZqZkxnVW90UWxscEhHNnZsbHBhVjJ6RnEyK2pjYjZFTnFLQ29UdmtFaElNYjJ2Q1NFb1pobUZQcUVrZG95aW5GOG9UYThraVNqZXJtOXJPajJ5djF6VE1lZk5uYnIrWGEzbnhRU2xtdkM4RzRQWUxNRjFJaElFTE1COUVURFRHaEZLNjZJUU1lRGtmekVqRnhTdmJhbGN5SHMzT0pXYW51cWJYU0wzYXJwNjdudmRtUVN6U1dCNDdZNFY4OEt1K1h6dTFaNXRSZDRjZ29RM1dsQXJ4SmpLOHRNQWxLTTM0b0pCT1FMVjREU1JqZGxlMW1qZ3dHcSs1SXQzUnUrNWRJdWJ5dlVwSjZidS9oQXpvZ29LeFZYb2tLQk5DRzU0aEFOUUtzVjRib2h3Y0FxQU9PR3dJT0hFSW9FMEZzRThIMHdablZtZy9SUUNJaWRLZ29SZERXY3lSMlRFNVNHSTlqY1BaVkpYTkVrNFNISzZRcDl4aWNHSnhLUlN2V1ZDTmJxdkhZZWI4a0pQVWRlZ3JGYmp4M2dab0FSdUFDV0JpUVdJTE1QSU9JQmpZdGdJdUxUYm1aRGhDaEJHUWRpUVJzVG8yRE16MFZ4c01Bd0lkcHlTUkV4NUpCSnVFcjIwY0IzbFFlbDBpMXJkeFVhdHBUUEJub1V1enBhb21qdnFqVkhtMFdYK0x5Z3p6TWxpejErdDRlVnBaaDRHa0FXUUFZdUVvUWgvam1CNmdFdUEzb0JhWVoxb3U0anRBU1NFSWliYUVNSGgvYjFyU013VkFSb3dEdEVYT0d1NnB1VWhLSlpVNldZcnJ5MDFHNUhBU2h1UVhTbFFvWEtEdTlqdUhsdDhWcTgveUhkbXAwTWZqZGVDMEFCK3dWK0FwZ1FFZkJ1Q0hnRkpBbm9EemgvaVFORFpGQWxCQ0lOU0xrS0NjVHR3Nm9yUUZzU2pFeEtWVGw3SGlRY0tWdWwrVGZkNW1XOFdwdGYxOWUwcjJwcjNSdy9PdThGVmdNeUJOZ0hJSnc3eWNnUkdLOFlVRjZ6dE1jU1duM0NuVGtjdnBXbTljZDM4NW55N0ZlZUJnWUFhWXR4TmlsT0hrOFQ1UUllM2lpZG1CajFGaS9jZE8rWGVDZlFLZ0hva2pnT2lEZ2xqSkNsRm5ONlJkY1dMK2N6L0JPSUNxemd4VEZDb0VvemZMNTZjbkY5TE5mL2k3QWtzV1EyRTFvelNFVTFXbEZzTmxETjdLSTlyNTFMOFV2aFlBM3creVdUV0VZcXlNb3VrT3pVbWxJdG15QmQ4NThjVjU1K3AwS3M2cXFkM0czVlRvNTdwM1Bqbmd2QU1nTFlXaWdoRm8waVhLRE5kdE9wUkJIejdLN3ZjRlcrY2x6ZWVFL0FCYkM3Q0VnNzYrbXlRZEtSS05mT1dSQzdxY2U3THB6NTM1UytBQTJBdW9FckIrbWdrSUlCdEtUTEhUY1lZWHN3aHM0ZFpMdi93UG9BSG9CYm8rOE1sREtONGZjSUdlbzVmS3hlcExGTzl0M25lZUNGUUdiZ1ljTGdjUXowSUw0RTNDNXNzZHEwb25KREVwc3Q1TGxkWDM1bnlmOEhiQUd6QU1rRU5ENUpZeWgwQXlZUDhLMDVOMUJnaU1ESVNnbVI1SG81Wjd1dTd1ekl5U0hCeDNUMk91YnN3K3EwbVJkVlR2eTQrN3dLM0FJU0FQWkN6a1VOWVFBSnVCTmdSSVdpZWsySTR5TWtBSW1Fek1BcG9vRnpmbHBVMnVwRndFS25Jb3lVUjJ1TUZ1Tjd2bXA3bHI3bDdaOTR4RGtuUVRCQVJPbDZ1RTFOVWU3bnp4Q25acVdLblZkVHJwM3dCckFTSUJwZ0FjQUZHQkJ3T2FBN2NJb0NiRCtZQStRUTRaQkNvTnNDQUE2eEdGd3dRYzRWVWRoNUZCSTNCREk5OEYzRzFyaFJsTWdBaWM0R3NLS2NFQU5nZHB5VlNXWlNIYU5Ta2V4N2FINXJqRklYa1JrTXU5UmsxaXRxZW5xdXVubjNPMDZZYld2bmJuT21yblplcnVwMXV2aytSRXJFR25vcWYzWGQ5MDNOOTEzRG9MWDI3VmRsbzRNdGJkd2pWNnoyMjMzVGdEdmdLQUIwd1dlQkhZc1FGSUFaUURZak1FRmcxZzhpekdvWEFreVJ4QVNLSVd3TU9JWU5aSE9URWFoRXc2eEdETGpjcUJ6aUlra2pqMlBKalp4Smlja3M1TVRnM01oK0pZK2tucE1lWVdJWFBsL1ZNS0RITytlWVA3TGtFYU85YnJ3ZVlBaThCak1CY1VGMEN5dEJIQTdobmxFVk10Y1NoNUNIQWJ4WmVUR2VudUpDd2lLNE9YSlVaVXpiZG01d1NiVjlOOTVCRWtYNXM0bDFSTkszT2x4WnYwb3BFNThndW5KZVdIZUJESUEvNEZpZ3hrQm9ZSllJUkF2SVdwZW9MM1FxUWhJRmFqNlZiTit1NTZXVENRN0E2d2EyVGkralVWMStYNWFkajA5NllTSkZwdDlzNGQ3MHdLOVhmMGFhZnAwNnhlWWQxbEZqb2VpQUdxQUV1QmsxSjhoRjRDelE3RGdZa3NJV1NHUjVFUUREQ0JtTFV1dnVYNW80S1lZVHNOKzZYemZYRmViYW00OUhwdVNDRWdHSSs1MDB2ZUhjSWNXZXJ4U2N4T045enp0N3JMR1Z2a2tBVjhDdkJtYUlwc040QzBRZEVZaTJzZlk2alVQd2NBdVI5NWFsMzNQTkxzbkF1eXJ4MnpPWHkwZWROOTlHQXdKVDh1Y1gyVnVMUGZXczYyZ1o0OHliTERyOEY0QUVwQVlLakhnWWlNb0FYU0RzRVl5TGljcFdvMUtBSGxKSnpSd3pOZDF1VXFUZ3AyMHVrdThubCtYVzZlbDAzSHV1UFlNSmhWUzdTSWpuVHpTenYwbk01MmFUUTV4Njd4M0FFNkFEbEZTSkFTaFFLQUZTZ1RLWE9hVVFYTjVJNE5lU0JuTWFidWE3cFhONWF1YnU0UjZWSzF6ZlQzZTVjWUtKa2NYdURnajdQbllWTGt1OXdSKzd4NEFzUUFSUWdDR2hMaWFCVllJbkhQdFVTWVhvekNkRVRKUER5enEwcmMrMlRFUmtrcEw2TnliM0s3SmdxMVp2dXViZ3NNTTdPU1lMRmJpdzd2U3NKazJTNUIybFo1WXl2RndBTjBBSmtJT0M1bTZZUHNDcmdQRU1RcTRRNTlyaE9oQ3dpVVRaVDdPYW04cWtraGh5b2tXcGViaGZUYlhSdlcrNk4rbUROR0dHeHBIYnp6ZUxHZDlRTTZRVGtZUTA4ZjRQNkExTUFWUUlDSEU1NFAwQlU0Sm9DZGtTRTlkaVdEcEJTaFVTRkl3MjdiVWMwSWVKOE1CZHlwN1hXc3VidHBGVFU5ZnlSeGgxVS9qeDNTNHI1ZS9KTll6RzhmUjNyeXk3cThGREFFZUFNWUVURFlPQTl3T0tQWUovQ2Vqb2JwTUtKRkdJZDlDbWhka2l6MnVqZDV1aFBSUU1tODNjYm51SHRKM05WMXl1M2M4bEVtdnV6VlFaZWUxeFpmK2sxaXFuWTNwN3RGbUhnRlNBTmNBb2dJTEFBRU5Db0I2Z01kR2thRFEzTjNHQzFoQndPU2NEV1lMTmRlZHM2UEFkWWlnaHB4Mkw5TlgxcEJQTTlON2ZUZHprM0xBWjR2VnN1Uk5IdlhMaXUvZTlBT002aG1HV2UwUU95L3hOQUVuQUZtZ1IyRi9HUXpBalFGQkFpb1hBbHRIV2RNQS9GSWk0aVFkQzdTUzRYMGxLUnVGMEZQU0QzMTNmWDBURmRTY2RPTnBQVEJKbWF5S0JpNEh1bGphK2ljaHpKcmEydENQWFRuZ0RTQUR2QXRvSS9FYUVxbE5CQ3c3Z2k4RmhpSmpLY0JNekFJSkdzVGcvbUFWUUVOZzFVbVhjSXFWQnJPUmNFa3hJQlNwSHNsUzFZaW9qSlVHOGJtcEc0eDRPa1VSanhKSDRxbkJ3R1lYdkx6OEdHTm1IUzVVNVZSMjg2MzZQcHc4ek42TzZWWXExdDFIVU9PcThCRHNBNndCdDRBM2dBWTRFaWdBU0FMMUNuQkFCY0Jpb0doam9FTWliQ2pBYWVQUW5yU0J5Z2V3ZWdib2tDZkpBaXdZZ2x0TGNja3JRam9xY0lrU2xJT3VIV1ZXbGpFSFpEdkh3bEJHWkxNUmRoRDRpZ1ZNUllLbWJna2FCQ2ZXUGJnd1ZySUdBWTdXNmhybHkyVVZ2MDc3SnFQUnFvOUYyNHJ5WFc2RTFMcGRPelRiNFNBL0lGVGdzTUM4QkN4RWhDUitEZUVZRnVjaGFSOEZtTE1XUS9oOXJEK1BaVUVBRmtQWncwVXg2S28rRlVxU3ljRDBQWlVPR21qZ3FGUTRhYU9EZzRhNXBwbnU3NXgyZm16bVNsOEF2UVA0RlNCWEJVRDFBSzRESUMzVzNXR3MyV2pCcTVwdlZmZktXdm5QQ0x5ZUVUNkhpTzJtNE1BTEM0cGxFN1BaMVRUZS9tTytjOEJ2S2tDOGlFWmlva2NRbFE2b1k3MDdPcUlIV0hWZk9mS1hQQ0JCMkM4cHhUbXFFUGtaaFZrWVg4VFFtREQ2N3B3N3pYTjErSmZuZlQ3Qk5CTnJHSnRZell3eURjSjA2MzB1SzNmT2ZMbkszZktYNXovbExPZjduWm1TNTMvNGFBSEJDd0N3TTBJampFeGFaY255WE9ZbTlwRi96bmplRGtpRWhaRE5Iaks1cWlRbWVWRjZOSEFyNzdlZm1lQjBnSnVCSjQ0cUYyVmhrSFZFVFlhL1o2NVpmQXJPK2MrYzhEemdpQUJ0cEpaR1BpU09Jc0VPSXR2SG9XRVBkWHpudVM1NENqQTVnVW9ESUNvR2cwRjhqRk0zc3U1YlhhOVpxdGpVdVYxL3k3d0F3Z013Q0tnYlFMWUhBcEp3emgva1JFUldraUJseUo3WExjampWOWJON1UzeTNYTzMxOUcrdmR2L2wzZ0R5QUhpRUFDd0FPeURSQVV5QTNnQnNnd0VrSVZJZ2F0aEtnZE1IL0VPSXc4aitQSWhhUXlKRnRMZ1NVYzRwSHRjanFTcVNURWpLVGdLa2NxYjRlaDdNakJTSGJQSEJ3WkIwR0VpU0tFd2xBdW95Y3hWZWxpeXpaN1N0M2prUTRQZHFnaHhjcjRzd2NXSUh1K0JBY0JsQXNBSDJnQTlDdUlZbVJwSllmZ0dQZ2VFTjRRTUxNQjl6VWRiRzRiSkYyUmpkYmg1RVJCd3ltUFV1anhMQysydkE0RHFPQ29WT01SdEVhTVNWUFdTSklBUWs0c0swdlJxVzVOTjljY3NzMkVlWjR2d1lJVUhiQnRGQnZTem9HM1Y0R2tBRGVncVlmZ1VlRDJCT2d1WUVnaGhnbllXVVNZK2pzTXc5aE9BZkFHdkVTR3dYSkpPVjFQV3lOWndOeHdOdG5GcVREbzIxSzltOTkxUlg3cjYra21Jazc5bEFtZnRiN3ByWXBUL2dmWUFpNEF4UUlmb2tTRkhBb29ESFJFMFJUNUdzUnpVT0VIUUVhSGRJcFo1MVRhTmNwYU42NWozYzdYUnVXdmVSR1U3YjBmYWVWbnBVejBFY1M2NTNoMEFFbmdHM2o1UkdQaXRBQ2NDS3dtK201ckpoY2hmdzVnM2dvODAwOXZsbEVpN0lBYmRXNjFYWDAzM3lSaHpuSnJTN25uZlJzcjc1OG1scE1kS1VnOWNEdCtUcFhydzdBR3ZBUG5Id2hyOFBJT01EVmh4YW1SUGhDeERRaklFRWljWlJSNjFvWHl6UVg5VDF0WHZQbmw1dVdidVBkYzNjOUtBWlRhRGJuMmViMTBWOWg0VlpRaHFLV01EeDE5aFhkWGhNQUNZUU5QVDJNQ1lIbkJjQWRnTk9TYkJlNjFrRllCVUJZUG1EVDk2NHdFNGJsV05YTng3cmJ0VjAzNlVTVFZON05udldXYytqUkRxcDBEMitMTmVNWUJNUUdaRUlDRVdPVWk0QVZPUllXaXlFRVRBUlJadm1uZDhTQTZqaFpsdW9OMzNOdjMzRElUbGVXZXcvR0h1amhZZDQ4Z05mQWRBWDhNUmVYaUZnS2lIWm9kT2ZkMlJnaVc1aGU3V2JzR3BVaWpTVGQycTVsdTduYmozeUpNY2NkT1RsbnZmaE90WGhXcnd0QUJMd0xJVEc1T0dZRjJUZ1RHTElwSWxObUtBdU1BVlVGTU1wNVMxdVN0ZDhQMGtxNDgzMDlQVGQyMzNYN2dreHRyZFZaNzFsblAwbmtPc2svTzZlMzJsZDFlRUZBRXZnYkNFdEk0NGlwRWtBbkFHNkVGWGZMTXZZRkFBVzJDSFJhd2hLMHVtRWJYRWFNT1ZkRzU2N25qeS9nTXBzL1pwSys5TzM5Y0N2VytnTkVTYXBUUjJuSFczQ3l2Qnp2QXVZQnJRQnRZYWp5a21EWUJJQUo5QjlLWFJHL2FtQ2hqWU40WUM0V3V0TFRMTjhIVUxZV3Rzcld2RnFldWVqY2VidjVJNVF5THFYN1R1bzc2VmxHZmRPYjEwZWI0R0RBRVlBR2dBZTdXaFdpSkFCREJHWWNxUVkwOElHZzZqOERsQ01rZ2tPZldiTzFoekluK0pDcTRLbEtxdmdzeTl1Q1BxUEt6ejZaQnJwUzFzWGVBdHNBYjhESkEwZ1VRSEtIUURBZ1NTR0hDN0M0SGNxbVF6RFVESmh6ZzFvaUlnSWhJOUhMUnZkckVwY2FqQWJaNjJtdWpkbTV4eVJJdkhPTjJyWHZ1bEFRbUUreTk3OTNUdDM3dFZVN3VTNTNnTWlBRTlEbEFDNUFCOUZFRTNFRktZMGpVQVdlRUhpWkcwUThJMEhvTk5HWWl4RFlHdzVXU05TTjRPR1NoWVd2MW5BM0JUeHBLWEdKVk9ESnJqRWZoRmltTGtmNzQ1Sks0M25NcEZwRE11YVZjeEhPMlhGYXp0MUtzT29UbmsybmsxTlNWS21sMVVldThCRUlEYkJNQUF2bUFKekIzUUpkRUllY2lFaHBpVE9SUWdySVJJR1dNR1NTalVEeXphNXUwQ0FTUWNMdE5HNmxvbFhLN1FZa3FycWI0NE9XckR1WHVURXlJQm9laFZEcHVQMHZSTjZxWjRzV1dlUGE4aUVWRWc2V2RjZDI0c2RwWXJ3SHdBWTJBV01DaFFld1c1d1JRMnhiR3lJcEd5blVLaHBaU2pXZmViMDNWenQzZFhkUnE3dHU3K2MvTjhJMUFBWUJUUVhFSzBQRElyQXpCVWpLaUpxZGxOQkJLelNqcGR1SFcvT2ZLWHd4QUluQk5JZW9lSlJUaXZOUlltcWFHOWtFRHE2M2xhM2ZPZjRKbUJHQVdKY1V6VElwakVwSm1YN0RYY25jekNEanpkK1V2K0lPQitCQ1Eyek1tNnNYbXZJa1c3RkVvUndLKy9pWDV6eFdpYkQ3RXVad0lSd0MydExTL1pyR0p1R29qM1BqbnlsejBxQ1hLc2pueUZXK2QvRCtPK1VzNTdzOXg5M3BjK1V2b3RUVU9DRGJ4TTVoMnhmS0Z1RTZkVkx2UHV6NDU0TTZwQzl2Rk91OGtobkhDbGVZUGw3REZkY3VjV04vSXUvd3FabUNkKzRTS1VoaHRDcll6TnVYT2YyblRqcXZuUGxMNE9lb0NJaTAxSkNaY0ptUGJNWUxUVTN1eHh0M3hjNXZQblBBbjRRZ0REUU4yY0JyR1pGQm1RdVRXb1dGOHFTS01YTTdzY3B1cHJ2UzVPZkZLbDhDdUFITkFyQUdoRmFFM0JKYVFKcUJlQU1LSHlKd2VpV0xRVGhBQ1pJd3N5VVBRM0MwR3RTdWNFb3Frc2ZScDVZNEpROWtrNFhYT0RJcUdMUzZreE9GN2FYNit2M2Fsckp4M24wdW9NbmF5T2VBUHNBY2tCZDRDQjRBYllSY0RaQVBnQnRRdkk5QXFNRWVEOERhRGVMZ0RSUnBFcXNTaHVDTUJiaER4a1FFaDBCaFpGc3lTVGNsRXNEUWpJa2gyRlZJQ3RoT2t1U21KMEZiQjFyeUVZaTVKWW53aWNVWWpRaWdRK1hoNHdUMU9FeDBkZWV1NzBMa0pRUndSZFVkZXExeXFvSzllZGFyNmxXK0FmV0FSd0JNSUcxQXlnb2dmTUVOZ244bkE2NER0QW15TTFEbUM5QmlBVlVLRVEwTHNDR1FqSUdqSkEyWGczamFJd1BRT1NIT0llR0hGRUl3SGNjRWRZa2lqRWJHOE8wUmtsQzRHOFE4eERwRjJTdzdCT2hTeVVMa1hKUFdlYTVMQitGdllQTmpwM3N1S3pqcXZvaklFVDVlaW5tOGJoemRndFRQRGRBSnRBMUlFN0JBWTdHNEtnQXk0QmdnT2FIUnBzeXdYaUhLQWk4TU9FWExqcnM5ZTJrTVFvSU9zQ0NRdzRpNWkwcFcxcG16Y2Z4T2tveFNTazVZcGxNeGFhTWJPS0lyQ3BMQjVXejNCSWVuSTdDNmNkNldhOENid0Njd0ZwQXdJU0V3S1FHS0FhK0ZxRVRabWx0TGx3S05BVytJa0VORWZtcmpwdlpVS29SeUVUZ2pFNEpDM1hxL0pHa2dueDdVOU9tOHRHU1NWMTVPS0VoU3BNd1ZxTE9lOGphbGIzcHc3dThMR2VBblVBbU1CcGdDZTJMWkF2OE1LQ3l3aW5qR2VHTWRDV0xVSVJBbzBDbzJiS0svWHZHL0hBL0NnQlg1eGRtRjN5NmtrMnQzVHh2YlhGVkpKakppY1VFZ3R6ZVQyK2ZHSWhvSTVEaXRDN0xHWjRUVUFqVUFpRUhLTXkrQWd3SUVFQkgxeTk3SmE4Um9BM1VPa01HWVNvUjh0ZDJVMXdRZURwaDNLVnVaN3FtNVUyWXJ0UjZWMjdqWkJHSWhaa3VxKzA5MGdYZklHNEl5RnVDaXoxcXVLOStFMEFhQUFSR0ZLQ1JESUpZUzRDN2dHRUJjbEF4dmdNcTQ4aEE0UWVBY0lJc1FBN01tTnpYTW5Kd0tJSTNFK0o5U1ZPbGFESndwTWhQRWtsdE15enhrWXJyemE5bnhJSUpjMlhBdFR2azBNVDZybHlzeVdhOVlBUVVBZ1lHTERJdENIR0JYd0ZlQmE1V3Q4bXJ3NGdwWUQxeUFnTXNPMjZXcG14RndqWTM0M3ZwNmVsbGV6aTdtK3MzbSt1YjZTOUU1dlVkVUdQMzhGTVJxYnJMZ2QxWEZqUFFBVk9BUG1Fd0licEtBQWZZQWFva0VaRWdqcFJTd0UwQXA4Zlp1KzNxbDB0RDJHREtiVFJ1M2ZTdkcrdTludTc1TDBHN0o5QWpyVHgzeU9JeG4yOW16MjRmb0MwUUdvQVdlVWpRa3BBR0lBQnNqc29kY0o3RndSTUVZRW1DT2V1ZHVlMGtpTkVucjZPeDY3N3VqWFRjOU56M0pSaHFtOVdyejdSR1RiTlZOSHQ3OGdDRUFEN2hkR1J6TUF0QURFd0s3RXRVOG9SeTBPd2RZTFBFNHZ5MHRXczgzbmhSZ3JFbFN2RzJaYTY0cnRUZDlkcmMxTnI5b3hYR3NkZEh0RmwyKzQwR0dPenFDeXQzZyt3QXlvRFZRVGFZaXdFeEFCZUFBYlFNUU9adXV5TVR4N0JvZ2djRGFRbjR1Q1J5bWVYbzNNVklod1J5UHdjNjVVWDdyNHg0NEc0cUVtV3F1V2lTY0x5MHZNaG1yTjRsWEsreTRyOTU4Y0VrSTA1UXZSNnlXTXJ4WkFFVmdFQkFYeU9mQ1RJZ091QTNFVDVUSnE4cGplUWJFRFp3NFFwb3pJemZiN3B1MWdVZUZWQ0piSk5OWE44dkp3Y2RhU2V1MnA1dnBKcGdZYW1uVWFQcmZpcDI5UEZiWnVpdTkzb3lHUTB4K1QvZGU2ZFZ6cks4SWFWOThFbUFFamdEampJQVZBU2d1b29lQWVVTW9FVWtxNWdMWVVRTUtBOGNFWkNORDBVemlWbWpkWXdNZ3hRbmdLT3RjVGhJYTFreHZqZVE3eGF0TDhrT0Y1YXRwVEVhcUdNdDNKUDFYVHF0MDZRTC8wWHk2Y25LaEZ4MDdyZ1Y2OEVoZ0x3QW5nQmhJT3VHNkJRb0pBQWw0T2tEOGdna2tDREQwR0JLWTNpN2VjaENZaklRd0llSU1ZRFVZU0dFQ0tRaElSSXhrcUJoaEdDbUhJWWphTnhpVlVnbnc2UW81TEcwanRMaDNoM2gxcEJkQ0hyaTFSb0pJbFNnUlBsNTY3aXZBTWRsTnV6UFNyRUY3NVF5OXpxMVhybzlHQjF6ZW50VFhnSWdnQ21BR0JnSGVBTFhBK1lIL0FDc0MrQVRNRGpCQzRIdENNUWhJQytRVUVCOUJkaUJDaUJFSWRJR1hod0MyQ2pnMllUMEc3RTRZQkVyUW5CdUNwaWpGc0RwbFVVQVlrTDZTeHNDS3hjaDJoM2orMEdISDVvYnhjSEFqVEppTnBWYVBtaWd0a3RRbW15K2VtRzNrTWw4TXFMcU9uUmZPOUxqdUdlVFY2RkpWYWlmYjJLT3FwNnR4WmQ0QnRBQkl3Q0M0TXlKb1JVSVNJQUVpQXJ3SHpBaXNPSm80WUVEQlFnT09GRDRJMkJ4RWkxRlRpVThwbUFSQUNDVGtNR0hZY2pVcEtrdk1USWVqRWZ1TVRscmw1TWVabHBlZVRqQWFva3MwVEwwcjcrbHlpajg3S0tjY2RWSGZBMEFBZGNEVHdwWWZvc3hxQ0NBTzhFRERlTEVqTW01YXBKUWdvM2o4SENMQXVVSSsyK3ZpU0xRa0VrcHY2K2pjdWt3YjZOL3RiVGUxTHYxKzAzcnZBeFlBVmtJc0NiQjRqdWdFQkNlaUZMcHIxbVlhT1prVTBkYWU0dGZ6bWZMdkJSUUZmaGVBM09PSGlwRStIeWlUWHZTbWxraW01WTIvL3doY0Jkb1dvTmZsS1pPRzZVbG1MM293a3c1KzBWcS8vQzhnaThINkE0cWhwTVlER1VhZWoyRWJKeGQwS2k0NjF2ZmxMbnptZVBvVHdXNFM5UVoyUEFsemUzM3VPMVFpUjh3aUxPZktYUG5NL1Q4b0V1VVRLeXRwdksxMHV4M241U3BmZE9lSmdUZ3NTcXloTFJKaVJKckZKOWRVOXFMWFg4NTdidkZHRG5qNEZqSnEvS1JpYVp4amF5VU0zQ1VSN1g1N2VlQjNnRlZsTXBwaUtmRjRKUnlhWVRiYmw4TE5mOHBYTzhHMEFxQVBzcUp5TlNJYlNjWnl4bHQwUmRMTi9PZkhNYmQ0T0tBR29JTUlEeGloWEJoaWdUdDdiZFRubVBRVnVPcitjK09lRG9nTXhFWUIreFRFaEFKUURwQ3VITkIwbzUxaEVTV2RSUGRxcmU2VnB1bkhlZmtjK2E4Q3BRQ0FRV0NFY2lBa3NUb1ZRQlNJWVVNTVBvN05KQzlZYWdhVU84WEF1MU9zdGRhMTJ6d25TVVV5T2tubWV1NG5DbEpjOTF6M1I3ME5tZmJOSWtXdzA2cXYzS0lKK2QyTlY0QVJRQkxZR3RDQkVZVEF0QVVRRE5BUmNEcWlYczJXTGgzTFFpa01HSjRhQmRrbG1wcWVzcGg0QjJ5SXNJMllzM0dGelk5aWRKTnkxZkpHdVhON201RjRTSk9UTnBwcXp2dGpwN2JvOFZxL1U5SDNTbHFPbmJpenJkRmJQQjNBQ1BnUldBbjRWUWFvNGdZS0JsWVB1Q2I5R3MyTVVBdHc2Z1FhRklNUW9nYkF0aVYzVkp5U2FERGhnUjVLZ3VTVmFsSkcrWk1BcDVpVk9NT2FtNU11dFpUd3ZDU3RCRkx5aWRPN3FMc1BOZ1diK1FTTEJNMjlBZDRHTW9zdzhKYUI3dzJnRTZCT2duQU15QjF3WVlTNGNBY2dNU0c2TndUZ0pxSnd5WktnOEpBMkE1QlJqYVpEZUtFbE5LUjdPRkp5VWFKUW5CcE1USGltcFVtNXkxS1NWUE5LVGhscHJrT29OcHlEVzNQcDFWNmV0dHVuUjJHZUMzQytjQm5HSXFoTmp3TVlhekliUTlNTHlQWWx4Z0tad2Fra2V5a3V2eXk1c29KUFhLUXBsUmZ1NHdtK3RUMTJ6MDNLMDkzNmZuVDdlKzdhcU9RcXZEWkJjbWdYQU9EcERaZWJoUFdPWTFFYkxEZU94d0p0ZGFDNmlkWDBwR1JqeGpVczNOeXpOOHZ6ZDEwYmpmMG1UUDJhZkNOQkhydjE2RWNIenFaOVZydkdBRGpESXVWQ0lIeUxKa3BGUmtQWEhseG9QSlJOekNFcUtONXhhcE9MdmU1cXVuYTZlVXozVDBlbm8zRzBzTmdRWnBXNzBKL0QrdVM3dnFBWjhTeXdyUjREN0pZc3BZSE1vUGxRT1lseUlVcWFTR3NwSnUycVdNYjV2dWxhYmxsWnUrbXB1TnQ5S2FjYzZ0ZitvcWxMcVo4STc1YUd5SG9PaWw2STFYS0FaNDdGQ0pleWpOR3I0dU40TFR6TzNMTFBTdGZTdDFSVzY1YWpmUzEwYm01eWtzdWk2T1M3NVBwdDJYYkd2SXdkb3I1R1V1SE9SV0ZBMU5pUHNFUkdxeHpxZDB2ZnpONnR6UzNYZkwzZTIzMTkzVGR6MTMzekJCT1M1MWVmREpUVFU3TU1uUE1RWllqYU81c1FuRFFwY2NCOG1IRjVTWUo2MW01Y3ROeGR5aHFGeHRaZnV2dFh1UGNxdU54dnorcGFQdVNwWVJjNzBLTngvY2xLM20rT1FHK1pSQVFrTUJrVGhpY1J0NVBjRUtLcGViWE1PdUxYS0p1V1Y2NUpHSFQxOU56MHVqeXZwVFpqYnZUT2x4K1h0dTlrR01CNmcwSkQxRlNzS3dqc0F1K2RTaGtkR3NvMWxwUm1YSzNVWXJwT3VLeTF6Y3FaN3VhNmJidnZsTWduSmRybzc4b1U3NXpYUWpYaExORC9PQmFIekFWUU1GcU1TelVGMGFrZEZ5OW95MkJGWHZybG8zdHJsMldtcnpMdGN3YXRwYWJhbG0yN201MnFsQktXdGpub1lRVFFtdGY4aG5qQTUraEk3TURnY1htQzhHVnpZM1NMckVnd3FYemE3MW1hajA4elBXdE4yMnZmWlBOOTlKZHJKeDN1MlhSby9IUExYa2FxTlRNdFNJRFFVNHZvdHJDSXd4SkZmVUhMV29tMWxyaXp0emN1MldZOWQ4ZGQ4NXM2M3Z1aEhmS1E4aG1DeFVLQ09Ka1dSRkk3UTZwR1M1NnhUbTFCZ3NjVzMxdnJtcjZhdm0rSzF5elBkY2tGQktCTE83VTUramhPN0ZBbVBjOGhpUlJEV01GbkFXVWN5OFZ4Kyt0ZVd0STlETHptamZyNjdNR3J1N1o1blgxSzdQZEc1dUxVZStYN3JaL0pkOU9rZ3gwY05uUE5SSkRBY0ppNGN5YVJ0RlVKRjdsRnlieVQ2TG1WK2ZkN2QzdDNIdTVucnZwNW1ldTFWemZuMDJvRCtuMEd6WHB0VmI0WlFjaXhTWDQzRktHcUw4a0pCQ2FsT0tuVVpmMTgyeXkxYk1yZDNUZHpkcnhYVjliZmU0Y05RYkxwaDUrczAvNkFPUVlBenpNdWRveURJYUpwTDRPdXBTR0ZrV0QrMmVSdmFucjdtdWowM0ZlMVhjMHE3dm5UNldPcFlmVHo3OGRtWjV5UmFINEptZkRtQWJRSmdPZ0xtQWxnWXcrVnltTzRVY1JvVHduUkdncGhVVTFDMXRrZVFwb2l3MWorRkhLczlkcnJOT0gwVHBVTVNta2l1Y0pHa2tWNWdLUnlYWHVRUjJuNU1IWHpuZGM2ZGJmVHQ2ZFpPMUhWV2VvSVNKa2hLQ0VPRTQrVkY2dDNYM0xzemNKeDBiYVdoYlMwSFRzYjYrdnIyUFh0UWprZ3NZQWNFQVNZQXh0WVFTUWhBSGNDYUE0b1B3SzgzS2tyaGZnSnJGbkFHNUh3ZmpnNHlXVng1SGtPcHBZUklIQlVybU1xSmFrbEVzS1dKKzFLNnpWOFZFazlMVWc3eGdYbWRPamN2MVh0eGZIQ3R0bnRWWG4yR0pTNmQ3RnpiaXM1dWl0c3c4RFlnQ1dpVUlnTkFXUVhJQ3hnVW9IY0NkaTBvN2NCcEJyZ1VpRzJSd1FBR0RneXBJL0tXVnpFWEs1VEZ5RGdqMGtNV3E0eFhLWS9pNUR0T0NwRlpxeVdrbG5sck16SFk1aVBxZ2RWMGJ3OTF1ejNlZDU5aUZWT01JcG83ZkhqdHl0M1RoNVo1bmdQN0FJWEJaWUZMaGFoNUNWQXBzQlQ0RjJCVVRVVTZKbzNFME80aHdNb2NETUhFTGN4aHZTdWNpZ0VTTWJPQTZSY2tsVFZUeGlVeE9EK1ZGMU55N3IvaUdhSThtdVJhLzZnZ2c2TDluZkJYb0RId2dJT3NLMlBSZVBBRVFISkhNMTRHdFFlVGhwWnZLbXAxWHQrM24rQTRVQUtZV1ltMlNtaEp3bkdrZTN2VHN3U1FxWFM2Y09yLy9ERWdUNkt3eUIzeWloZ0pua0NhdDZwcVY4Y1dLLy9BaklCYkl0UXVJcnJDc253bHBRTlpObW5RUklaSXZRcEEvWVJxWDFOL09aOHV6d2RJQVFjSDdCOFRZTkFpSkFaSWRpZkExZ3RUNlJHU2hpZG5UeS8rVC9nandBY0FEQlF3NFZ3RjdYQ1VBMkJWSEtUbGt3V01OMGEybnliY3pDNnV5K3BYbmpmdW5ZMnN2ZmR5cTc4KzZjYmQvZ01EQUpKQWVJQmhJMEJ3Q0ZCYUFRWVBnZG9kQTdtQ1Fwb3d1Z1loR1NBcUljQlJKR3pmY3BHcG9SVFNTUG90cnU0VDAySjRiaCthNmR1Vjc2ZXVldEkwYU9uWDNOUFY3MGJvclo0NEU0dFE1bGJDT3E2cU82ZXVyd0Z3Z05iQVYwRFpEUUpnRW5BT2RCVGFRV0FzREVpSkNrVUE1d2NjR2xzZWx1ZmJsdU56RTVDL0JoVGNiN0pMVWVsYTFKSkNtRCtrbm85UGRjOU5vaEtVNk9LR1QyNkxHN05GalBQZ2tkMnVuRUR6M1F4bWVDR3dHbGdDT0FUYVJSTUZvTWVBRFNITUVFajRTbEZ0TGlDQVg2VlI1Q0RXVGJuMnRhOHFRM3JrVUFkVnIzMDYxSzNDak9GK25ydHFXbDducEEzQVNJdlF0MFd6cDMyenBYZE5VVnE5UHlqY2RPZE5IYjZjV05uZkE3WUlCQThRSFJKQUcvRFNDcEFKVkE4QUgyR3dTMG95U1JBbDRWQVVZZFlOR3VibUtPMmJhTmpsa09zYkJ1YTIyVithTVdqY3B6eHcxZlN2elhYSHBwemtSK1Q2RjgwZDNVMlY2bDM2OTNUVTdwN2tkREZ1OERtQ1pKSW5DbU5BcVJnRllTRGlCcVBLMEtXR2taYnRjM1NUMDVLUXBOTmR6UlNPVEc2bkxPTHRadC9SVzZQZWxTNmxuUFFuM29EOVZPeGRPZUNZQW5BeGgvRGRTRWlVNVFNSXpIRGpnUzlwT21waEJUejFsSmlieDZidTc2YmROOHJXdFhmZUx4TXljbDNrMUM3VUVYS3E4WkFhVTRoSmpLRVM1ZVR6YVZDOU1vb1FYSFpJdXRjSld2Y1hqMTAxYzNOdFQzUnVQZEc0Mys3Sjl2UGVpVFJjN0s4UG9HeERVSG9hR1Z4WGhzTWtSYTE0SXllV2w0NnNvMXpXMWZHSERTelBWZlRzTG0yK3VOdDlmdVQ3U1djUDc2WU1sQVRFRWRyM2dkVVQ0TDRNakZDYUU0YUdwc1RSaWFJeGNwTlVSVFUwc3ZzNTF5WWtscmVNWnUxWGRhOXFzNlBUM2ZNRXlaTEhkK2hIa0o3b3ZmNFNJS0FSQ0dBbEVOSWlCN3dJNW1SU05EbEx5NDRHbDdNcEViM3p1ODBVbExhL2R2WDNYYVNlamtyeDZiK1VzYzJYZlYwNnFuZlBnUXVjaGtoOEc0ampBYlExbUNRblI4T2d4aytUYTFIVkNlYlVtQzYwcEdsbGpmYlo2YmozWGV0M0c1dXd5RXMwNXZmUG9OcE5HbnVsM213TUNZR0J1aklZZjRTVktSaGZJeHMwVUVReGpLUjJYdmUrYmwwdGMxT2RQV2J5ek4ydHh2SHVudXVWbzk2QStmay9ISnpmU2tHblpMazllU0NhSkVVMVNNZ21pV2hNRjVSMmpVUWFJNXR1N1d6c2NtOW5qQzRyVERKdm85SEZYZDZXMHFXcHpkK2lZZncvTklYK2FqVUM5QnJyd016Vlo2UXpjMHlwTlVWbDByd1FUMDdQYzFhN1BMc3JYcjY2NzVWMUsrK0NFbVpISGZ0SVVMcHpQRWhPaDdrUkxRYUxEQXB4aGdNSE5hbVJGN01DbHNyUXlOa2VibTdqMXcwNjVmcW01dnA3MHFDYWJTK2ZUVHJvb004ekNhRkpDRHpESEFvRFVMOEJMRklqdE1IQnNYTDl2STNxSnVUQ3pmZWszbG8zdTU2MnJTTjgwM3pkOTVCUHUyb245am55UXB4TTdNZEd2UUF5SkhhSVNsRVlDcVhMMW9MV1lhWXNGL0lsMmx1bXNtMlZ5bEc3dTdqY1Y1dGVlamZ1bEszazFPZlJDZWxuSnJ4VWdkQVlDTU13N0VvU1N3a3huNDRVTVFNcU1Cemd6Sml6YmZHK2tkcTdYWGxtYWQwYm5tYjZOOUxWOThwa3M3Tzc2YTVwMjFYaHlnMXdzaTRMQUdtU0ExVWk0aFk4Q3pGaXNYa1lTeXkybkRRN0Q2Yk15a1NjUjV1KzFZNE4yV2JTTEpGbDFydTU3cFdYdSs5S25uWFM1dXZSWEFnN1I5MFlUdmc2d0lrQ1dnZ3NHWkZhS0hob0V2QUw2SVNicENpQ2p3dGdsa0NOUThxQ3hNcE1EY2FRYmdsajBzMmJoMGgxSEY2cElCU1pkWmlMZ1hNM0hpb1lqWU54VnRPbnhOaDI1dDNobGwxSTM0Zm1vdzF2aXpaM1ZLc09zOEZibEVCUTRsZ1FNRURHWUdVaFNRcUFSQ0NBV1docm9Xd042Q2lRY1lHNkNNdzZ3d1FYYXpFZmtnZFFuU1VEYUJGZ294RmdwaHdJeTBrS1l1Q1FLRVhiUW5UQVFrTzBieW9Mc2V4dUg4YWpJNEtwa1ZhUVNuMlh1YzNoN1hrMHpSSTBjRFRtMFQxVlJxZDdjYnEzdnhWbVM1VzZMMVdIV0FhQ0EwTUFUQUF5b0Myd3V3Sm1rQ3NRTzRDT2lRSU15OFpCS0F5Z0UxaGR3aElHcEdrTjQ0ZEV4V0haWWppTGtBRVJDZktoU0tmUktnL0xyaWZNaHQ0NGszWEc0a2plU3BTR0s4Q01NTzFWYWlqc3ViaGV5NHM3UjY1enZTbXZjeEJnKyticlczWGpvdWVXTk9zanBYcUxwQWVDQVNzRHFBT0FHSUxLUElPa0E0Z0p1TmhQS1NRNFVqUUowQnhRZGh3Tk13Tm85SmdTakFSa0tvU1JiV3BVdFJXdGM1SDRLWVN6S2U3dU9Hakc3andwQmxGNXZDMVFlVjFGamFuQ3c3Nmd3NUxMb0lvMGRQME1YUlkzd0RlUUNWd0RUZ0pZRFhFT0JNSWFZRTBDMUVaQ2ppYkxyS1E4aGdRY3hvYkFVMEZHR3BJVTFtbWlReVB3dGdwN1F0VGdPUmxTdXUxMG1JaDQyQ2RPVitNRks1d2tYYU1WTnJtWWtHcnJZYmN3ZlUxSHJqejQ2M1Vkb0k3Y2RPK21FTzdOTzJPNU94ckkxc2FpN1kxc2RseDFwM1N2UEJaSUE0UUdEQWVnSzZGblhCSm9IakZtWVFEUU5UZFlvUkdzMm5SaVVMUTUvSXplNVhua25YTmJQVzFkOWF1L3gySDR1ejVkNEt1QUVEQitRSWNKNDhJeDFDY25CaEFpSm1hVFZ3enFFVTFOVGgxZi9MdkNJd0tqQzFBd0pzS25saVdVUklzbzRkam9XdjE3Rng1ZjUvaUlnM2dYVUNIZ1NRYW9nckFaNXMwTDZ5YUU1Q2xvUDZxbzZwVnYvNGI0VVVMV0lLVHJSREFKSW5MQ1BZaFZTd3hjSmdldjkzemt1OERzQUtnSG9MQ1RSZ0ZLVHlRMGJNTWFpMmQ1SENIem56bmdKbUJINGZJcjA2U2tRMkUxUGtNdVhUUmh1bGkvelB6d2NNQmZRUFVJQVpqS2dETEc4MzVMMjNWUzhqOUFzWC95ZjhFSGdNa0MrZy9BNG1SRUVvRE1EeU9qQnJxem52SWhKYTZHenN1VjB0LytBcllCcG9Sa0VUQlpBMnczZ25RVlFRMExpUHhVYUlwZU1nYlljQW9COEZxUHFscHJydFpkY2F4c01qa3FkM2R0WGQya2I3ZnA2Wk1sbWtGVHY1RjNnTFZBSlNCYVlLRlRqYVVRZllFUEVJRDdqV09waVJoWVVINENyQkNoUkE1aUprUzdXM05uSmtKd0wyVkVnaWcrcmRQVHRyamFLRTVPRGVQV2tYYWF1YmxDSkUySEIwcFV0eWlWWkhzZFpYMk9IcnZsbTgyVUZRbmRiZEdvOFY2YmNlWjRGSUFOZkErNE1XVEFYOFdBQmFBR1dDZVdwWVpaSGtXdzNBaHdEK0NKaGhDQURnc2ptN1NNM0l4VEh3TUtjQTRJbldUZVZsN09MT0NXdVZTVkppYjMzSEN4eGJKamRCbnZRT1cxZzN0aWV1WWRTOTlEbDQ5MXpmU3phMTcwdnVtWXJkMXpmWE9jN3A2N1NpbWhqbUpRSTlkajhqVTlCOXY2TlZIYW01N2FwVmNldXVuYTJMNWZOYm9DeHdCandCUkFHTEJnZzV3aVJFQmNrQ2dHS0E4b3FYaTBEckMvQkdnUmFGTEpKSERxSUJJWDB1WkNIaDBnM1FkaVFibWhzQy9rcUttU1dQUXRlRjJjRGR5bVRjbG1TNVZNVEVmcnRjWUJmMS9WQ2M1N2J0M202UExWNGViK3VZVHp0Sm8wK1hOdW1peHhBMTRQNEJzd0ZaQlNBMEJ6R2dkQVZPa0NDMUpGTjFNa2dqZzE0ZHd1aGNyUXZhbmxwMVNQWTJpaUpTelM3VWJscEljdE4zeHZjOXpYZE9qa3NnVE53OXhEektqcmVlSHFBZTRDRGdaVUhwTVNvRExpZEJYQVFFOFRTNXVSdzNTNHZJQWxoU2tRMVhMK2xKUktOMmg3RVJVa2d3bHJ0YWF0ZElZOGVkM3BnZUZFOTFhUXA2TmJHc2JlZTE5R0U2bTFMRGFqcmVCSG1lRjRBUDNCOVJCb01vUTJBQWRSbkZ5aXUyTEk1c0dERERDSGlBbEM4YnF6YUlvQ1NKODNscnJtbk5ST2V0bWJidS9nS3NjSnpFMDN1SGVkTVBjR1ZUbzFGOHVPM1RmdEFIbGdHQ2tKa1ZKcURPZ0tVQWtnSjNvckdGSEd4cU1vbmd2b2dqWFN6Q2M2ZVVENklsMWQzWEw3bG1UQ2VqZC9ncWUyWFJ1L1FMSDN4eDZyUEZjQnRnR3pENC9FWTJqWUJISUw2dXhOT1J3R2NFRmgxRkVvM2RkUFhjandWU1Njbkd4NlBUelRYTTkwT251ajN1RlAyN05IMVdIVi9LSk1mYlN1OEsrQS9RRGFoWUx2Y2hDK2h1R1N5WG9LSHJDVUJ3Z3FCSGZXYjA5V3pVaWlabSt2bzlmVzNmdU5pZWdTd2NtMk8xczAzVHZsOUpuUnJ3L3dXa0J0WVdjWUNFc0ZmQlFBclNlSkNlcGxFdVdoUXdwWkh1b1UzY3dldUtLNzZiYjY3Nk4vSWVac2dQMXI5bUU2ZHVkOG9rQ2VOTU9sMU85RUE4NEE0QWpwMEJQUmhpQjVZYVk1M0ptV2dvWVV0cmpybnplaWk2TmNxNjdiNzA0NURuTDN5K0UxSEk1TzFYb1M2ejZaTkpNUXpwNW5nYnNEWXdEZXhOaml1eW5CTUlhQTlHYSszcU9SWUFlZ0tZY1hHNm1uVHozQnpMejF4M0kzeFg2UFRKUU5pRENVR1pGMnFzbXZQcklwcWRkVWNkNGFvQjB3R3pCdWNuUmgralVCNUIvUjlPdk5GaDZBL2dUMmExOHdudWkwWkdKSWF1ZTVYZldydHUveFMwZlR5ZmhWeTg3ZVdNZDdyZktDTlZIVHZkOGpnSHFBR1JDYmc4aWkxQUErQkJBaFNUSVR4UkxqVU9ZTDJLRGpuWmZMK3BTcEc4WGF6ZlVxdFpJdGF1NXYwd3FPSUthYTFIY3VQTkxPL1JESU1vcFN5bWx5dlpjUU9lQjRBRDh3Z01HSEtDRStMc0JXRFFiQzhCMFhVd1VnMWdSQUllTmlna0tGMnNhdmhwa1dwTEg4M0kvTE5yWEU0amErOWM5SHZRQ3FUT2pzM3I4T3EyWGVsTGticDErUWhoM0M1Z1YzZVN3RCtRUldHQ3dVNGt3aFlKaUE1OE9jWXg4aTRmaGtOU0FFeUdDTURtSkhrdnVTcG5DMERvT0RuakZubXVYYWFNRGRxYjY3dVY1dWVsd0ZtUDArbWNubnBocmV6dXpDYytpOUdUS2U1QzY1cW02amMzTkZtdkRsQTJNQ3BBVGFvUGpNR3FCanhFRHRMK1hYR1Vqa2NSZ0djSUFiNE9YYWpadkxUUklKQkFHUmgzT2U5eHYwbFcxZlgzMlVCZ1RaSGVtanZhMHNPblBKZ1pmVnN1SU95NlhLM2VDeGdCbUFHT2dHMkFGRkEvb0YraEpndkFsaTRJZ0VZSDgzS29oWWh3Q2lBVXdIY3BXQzdpRkQ1UE5IQWlRdVFiMFJSSVFIY0lhYzl0eVB4eUoxY1VTNVY1ZVZKVVNTVlZLa3FIQ2hkSWJRMHpwUEhvSzc1NTdrM2lyRDJ2ZkpxaXFhbDh3ZlRibzBXSU51OEF3QUJyUU04RDZCcGo2RHlBNEFScUU0TlRTbHBhTWcyd0hGQTRvaElVbzVGamFsdEpaTEVOQ21GTVJrYWppTjlIamdxRGNTekdicWV1V3U2Ym5nejVwTEVoTW52WGo4S3o1N3o1T2hWU2xZdlR4N2JpdGsxNER6QUd0Z0dyQlJocUtvVzRPc0FGb3BCRW9jUmVZbEVlb0ZVQ1VSQlJRQW85NWdKZFp1QnlQQTNoMEhIQ0xEYXZOUy91c2ZoUkdSdXZQWGJWMjExM0xBU1VjMExkSTU1VnNianhYcnlDS1ZGdFR1UmVxZEhvMlY5Ync4ZDRHZUFEc0FGamdmVUxNUHduQUxaQndCZEJ5aUJCcEdwdXVPbzJrQUUyS29uUitTTXJRNitXYUpZL0dSa1ZGdXZxMit2a2lxdkppQk0vWnFGVFdmNERqZ0dTQW1jRGtEaUhzc0ZlQ2ZqeWtZTHRacUR5Y1NXcjE4MGRPMWIvOEltQUM3QjZ3MnpNZFhrNE9JM0xjdk9kcnRHWG50dVBMLzVkNFF5Q1B3K1JMUVUwd05qS0tYenplbUd1TEYvL2hCZ0FMQWZZU2ttbTNGNExjVHk4elJiREoyMGV2TER2K2M4RXFnMElXc040bmRaUEdWa25GcjRTZ2xoRmV6QTlmLytCeXdjSUg1QitBOHhmUXJqT09Rd0xzd2ZMdHhhRU8ydEs5ZkUrNXQzNGxjNXQzZ0p4QVdxRDFBOWdKSUdUaWFHeVVWS2hSQzgxamkvbEc3T25sL21mT1NsOEVPQVdDSWlEN0U4YUZoSkNpRldid05ZTElIMVpreXhPenN1VnV2L2M2WGVBc0lBY2dJc0FLaUI0dzNobEEzNE5rRm1LVFFzR2tpNWlYV05pbm1qaGxxRjNheGlZV3Z4dWNNOU91ZGF5UzJ1NmNqZCs1MkpZdWQ3blptUzUzZ01uQUpsQU92QXo4SnNETmdubG9Dbnd1QUg1QnhnZllhTEtvY1lSYUJtd3RSUmdVU0RpaUhDV01DbkkwS2VEc0VWQlZaVkNoWUdFS2k2bEdVb2plRk9KWWlSQUtiTWlweGlTamV5U2NTdUx5NmhQSEpRVFRqcmZSQytvWWRLV256Vks4Mk5GZlBBWUVBVFdCVFlFZkNVSTQrZ0dPQXRBd0NCRGtiVnlRSzRlUVpjQmNJSW5Gd0lZTnBHTVNQVmNJQ1J4RkFpNERPT0IwQ21FOWxmdU1EQXhGc0tNRUNoQ28ydFJPRGpta2lSY3k0cVBFaFZOcDRIdEVEbmk4SkNtMG80Y2UyV2Qzd1FnQU80QVFTQUdhWEppOG1nandDVXdVQ0Y2RGJnUnltWUN4QTFBRlRoRXdHbGhnUzgyTVMrMmtraWdEaEIxQ1VEbmc2RjJjOHpFcUVrUllLb0xoSmJTNlJKTFJKdGM0NHBvakI4dW5CZVJ6cDNvWXgzd3dqRVNMak5QYzRkZHU5cFd0M2c2SWZJSURENEFBdERwUGdLZEE0NFU0S0VBbjR3T0JCQ0tFM0E2NE40RG1oNEFpQUdjQ2VqK3R4a1lpNUpFZzVZT0lLSVVZZHdkUXVoN1NHUW5qZ2dEa2tqZHhWRjJOcGlLTTVJQWZ4L2tsa3F5WGo4UTVLREttdkxSU1h3anFUbHJhTERxcHNyV3FkbmhBS0FSZ3ZDWkJZaU9BbVFVd255UUl1Y0NWYUk0VW9xQ0loS2x4L0RtYUVRNlBHUWRBaFl6SEU4a1hNQmJKRmpnamlnS3JWeVlHSS9kWmlWWWtxZU9TVFdWT1IzMk1NM1AyYm1wZ3F1ZGJkTUZidDhDMVFOVkFlUVBRc1JZQ1lIZ01HUDRIaEN3Q1pIa3BCdkN5R2NEMENmRkFGTzRaVGthbXVYT0ZsSzRueHRKSnkweWs1cnVzcE5HL0c5czNjVGRwZTV1WElrVG0zUnc3ejB3cHhUcHR4QWxZMjFWUnR6cjhYQVE4Q2xnZmNrS0NnSW9FS0FOdkNBRGtxUWgyc0MzRVJINFFGU1VXZWFyV21qanFPTzZiYWwrODBwWnVQZDAzZCs1NkEvc2FkTmV3VFdtRDg1M2QyblhiTzVHb3VjVm5lZ0RYS0lXVEIxT0JBVGhpR0lGQnFTQy9TaXpPc3BJTk45ZFQwdGN0Y1lYRnJ1Njd1K25yajNmanBxTHErVCt3bk5UNzRhd05HSm9TWVZxU1F3UkxINDJJYWx5aE1icnByWEk4SWJIVWxLZHBlVW5HOGUwd2xacnVYNjR0UnVldTcyRzRmbEsyNzNrTjlZM2t3OFBvT0lOTVNnNWw1SURURzRoa2NtaklUN29kVVZRTWhtSkJRR2lhbDV1WXBGRjNIVGRmZWpjYlY4M2Q5UFNRY2dsUHptNyt2cW8wZ29NVzcwUWx5V2lMMFl5R0pFSjRhMUN1V09LWGFIaEhkc3V2ZW5wV1c3dVNUeS9WT25WczkxeDc1clcwdXh6OWRWVk5WR3B6eThQQU5WUUgya04xeDJMaWNPakQ1WWdvNlZEVEkwUWF1VjVPREl3bm1Va25DbTd0M2MzYTByUnVlbnZjd2xwM29FWkJ4TE9UdnRBeFFFSmd2YWd2TnhWUFVrMHBCcVM4Vkk3anlpU1RxTmRmSjZ6SG1qZkdaWG5aNmJ0czM2Ymx6ZHJlZllnbXJELzVUMExvNnFyeWNSQkpHd1NoZ2RSazRqcGh4bTZrdzFSQkdiU3hrODkwN3E4dVpuSTVCL1hIbVo3MEFWYWEyVCsxOHAzNitkOHFuTEphRHowSlplMFNsVHc2V1VwY1JObHF6QXZSeDdUZGZqQmUxcE1MYXVHTDIxMDNjZWJ0dnBTeFRINVM1NmNjRCtFeVVEbTk4dEUyVTZFbU1RcXhhSlJMcUNJaTN1WWV1dXVzVXpZanMzdTJ0YlRNclQxOWNyZHpWeFU5UFRmUnY2UU96SXZiend5RDZaMVZxYU9lQzhCUkJqQjVSOVVJd0lkRldVaExJR2JlcEtLWVlHVkZtNWRUVGJWcjVjM04zelBPWGFONWE2Ym5ydnB1NzVycFkxQlVuNFZIUGw4NXNVT3pYZ2RoZ0lPQmh5R1IwQW13RzFoZmpJb2tqWGNpTVJtQjhDcGE3MXBySjd0YXM0NUpMTnE3Ylg1dTE3OUxxQkxGMjFGM2lPbGhCanRRZDA0NDYzeVVBV0tBVmtHY0R4Q3JEMUI0UWdOU1V4TkJwTDZUaWljQzJKSTFsVW95dXRjV2JNRktra1NVNVo1ZVZsNTZXcDYxUzhXdXY5RWVXdXB0L29EY255eHNlblhuWFJnVjg4RjJBZTZENWh0ZzlocUZoSndVVUdPS1J3R3NMUFRnbGlEaHRqc1ZSUkJmUnJ0ZXJVbUp5a09KYVVwREU1U01yMHBYYU1VbDh2M0xLbXJ1Ynk2bkpTL1JTaFVYUWZlbnVWdmlJQUdQQVIrQTVvU1RJU2tCMW9NK0UwQlR5UTFHc2pFc2tEU0JvWU9NQi9nSGlqWUpvYTdYTitza2lka0kzRHNFWmtPWWxTcE9UbHFVZzNrc3k1ZmpmT1g2MnB2cjBEYzFyZTFPMGU3NkJTV3NSY25kTkhjSmQzZ09XQWFjQTFJQTBjWUNlTDRoNEFWb09ZRGJpMWFSbEtSNEgwQUpFRktoRFFFNmhCNVZIc2ZGQkhwZG9XZzNCRlM0S3RCeVRkWXltMVBKQ1dIY0RuaWNYaWNkSndjUnRKYTdBWnRwb3BVdHkrY1YwR016NWVZR2xPbEFtdk5PcW5iMHJhNmFQWHpuZ3RFQW1vQUxBQXNFYkJYQmF3S2JBZXlaQWQ0V3hzWGxRb0hJVVVGbUFoVVFnTjRUNUdLYzNmR1FuQlJoRllJeWtJdUtnaUxYS1pVbUtrZnhGUWRBS21TVWswWkhIUnRTVTdKSTRKRmI0VFIzQnhacjB4RlFiSEVYSHNDQmQ0QjBBQk00RzJnQkNpZ0NBZ2hjWUFLVkZ1Q21RSkFEbkdqU3FRQUtZQkdndEFub0xIQndRNXlTcEhhVEl4Z0l1RjRCMFNxRjlrR3ZLalJ2eEhpSENHREpRb2lBTWJPU1R4d1NrbGxReGxvY0JmTkJlam1QblR1dlRycUVNZHg4NmQxSGZBMG9BY2tGTEFSd0swUVFTUStnMlEvRElhalVhcVZ6Z2ljTmltMmhsWlgzcjVZcEdITDJibUxON1dPNVpTc3YxeTV1L3gwbjR1L0Q4bjR1OEZYZ0NIZy9nY3c1RHdSQ2lIUVV4Z1RsMEdVRUs0eVVJcHFhbkZlWDdlZjRZY0NxUWVzVHc4bWhRZ0c2VUM3QmhhbUhWSkY1N3RSVENNSjJwdjNaaC81elBBOW9BUGhVRlh4R3BFRXBVY2ZodHQwWDZXYStjK0tYUEJBZ0ZWQll4QVNjU0NFakU0MFp3WTFIVHFwSjJ0NmVYK1ovZ1RlQXg4TDBGN0tJMUY0MGdjNDVGU1p0UUxuUGVzTkxQYkhacFhhMy9KK1hlQUhzQVFzQVljQnBRV2dOSWF3RThBQW9oZ2d3YkJocEZVRlVWNE1PRTRVbXdudzRFa091K09CY2k3T2FNaFJpZ01sNTUwcVRnV3d0aVN1dmNlN3lFUXpRMFN6VjNzRHQzNm1RUGJUSm5WT2VBR3dBUzRES2h5Z3Q0blFmSURWQVZrQjN3YlZHallIcEdMRUtnRG5pZVhCVUlZWVp6Z2tqUXVia3F4OEVQSG9xQjJBZ1V5SlEvbFJxeHE0ZXhRaUxCQ3BVSmE2UXFGVGh2S2NyRWt4S29HNUVvNmFsTU9KclQyK2ROclZMUFJxNDNIWXZYbSs3WnVjdG51ZkwraGx0M1BCVnpYdFRKbnJGMHdtcFgyZVo1eXkzVnpPdmF0OHVjeTFMUzYxeXpOOFlXc3pEbDFxYXFkYTVjRWNBRGxBTW9CSG9McTlBRklBb29KMkNnQXZRUzhpalNha2dSc0k1SG9wZ28wNUxoNk1ydHBTY2phRkJYU0IxQTRoa3VjTTNDNUpaQUJUUmN5WTNzM1pVTit1emkwUXhHRm4zVFNPWVpzdWpuYk83V0s4ZExwdDU3Q3VpNDl5Y1Rwa3Jib1M2YVZ1cHZYSFdUczZWcW0vQmtTRUJad3ZodENvQmtnMHhuQ2RoMUIyRklmZUhreENoQlVCdkNiQlNRN1NVYjd6VVRjbEExNFVreUU0SGNKMjFyVU5KREl4RzBUNWlZbUtUdVNHS1JkSk5yM0NxanArbTNiSFpxblRkbnR2bXJjZXU5R1FrcUJBaVFxN3QxMzNkekxNMjVYelBRNW5zalVZZDNkM2JHSGJ1K1hCc0U0TjdHYVJ5YWluUmx0YWhXYUhsbmpDVWNiM3JYZkJhK2piVFZkM1czeTBidWJtNVd1ZGZTV0x2a2c2THgxcDN2aHNBazFHYmFvNHBCckRxSk1jcEtMS1kyTlpHUFpNVWMzMlR0dU4xNXR4eDAzbDlMVWV2cm5ZM2ZSdVV3anNjM1crN2pxcGQ1Z3NOUXRFeXd4SnFSR1p0YU9paW1XUmtUcFdncnZyTjltMjcyUGQ4bjRJWTU1QkhCQW5qV3Q1NDZpVERlUW9VVGhUaEl6TmpyVU91RU5HalRlN1UzczBqVVFxcm5yajBObGRxK3U0NzBlYjd6OVFUTnU4bWFpU3RwYUt6dkVDRGhFeStDRTFXdzNJaG9UOG8xRlNSRmpSZGJUWTNYdnV2bWxtbVpabko3WXRYUE4yb201dHUvcEJBKzNuaWtSUGMzU3JQTmdZOFNRZUpnT0llcGdZaXBSMk95RnAxTGxCRVV0cDZtNE0zMExMNVo1ZHErMkhkYlYzMHRSdTQ4M2MxazAzdjBncXF6WFUzbnFBWTNodkdNRjRVTEYwTEdGSERwTGlSQVp6SjV1MnROdEpKZ3BVcjlWOVBPYTZWNHRkZHhhbTFWNG1xRHNkTHZseDlBZ3JIZUpZYlIwSDBZZUp4SEdOa29JaGlVRnpCSHNQa2pxRnpDK1c1bTV2amQxM2JWOWZWeTdTODlkOTJSYTcwdXkrTHB6MzFNRzY4WkJ1RWRRZVdCbW5DNkFqbXlPWU1MSXJ2bjNCRk95NllMV3RkM3RxcmxudW5yUE83OTNKZEd2UHVkS1dhMk5lVHdtQXJDYzBtV0VtSTVBTDlHRXczakhuTXJjcHQ5eHViYU4xN1d0bmxYZExYWDF5NmU3eit1bkk3K1NseE5OVjRwd1lrTkVWUXBMT0JKdEtEUlBaZFRSZ1lNRHJBdzR3V201ZTFzVjlubVREcHVMVTlmWDAyM3pmZTlNZlAxTG9WNlY2SEk2NzA0YmZDVkdkakFrQ2g1ZXNVSEkyalVZbG52VW1MMU9kTjlKaXZOOU56M1RmZFBSNmU2K2piZDJmcHliWnhMNlUrZm1vdXp4VUNYRm91UXpRMEQxRkljQ3BNQ2xSZ29vaU9Nbm14c1lRVlhObU56YzJrdnF2bE0yMVBYMTMwZWoxelRrRHNiZCtPWVZaSFBEVUZySnFpTnhwVW1JcnllS204TjhlVG1qS3pjeEtOcnowd2ZHNTdybnJ2Ym0ydTdwNnp5NVRQUHprcGFpNzZZdys3S3gwZDhrZ2NFd0QzUUVjdlJocWlUbzE1SnlKUVQ1STdsMTF5UjJ5eXV2ZXpTN1V0ZDA0MnZ5L0xYVnhYbTU3OWpUYVgzNGYyWFZOZUZjQTh5Z3BGRGpkRVJobkVnbmtuY29vMEdKSkpITmpaODlHNmcrMVhkTk9qM1hkOUh2UDg0LytsdWJrNU5lTFFHWUg1SUMzRnhkQXZNQStEQkZLOEh2VWx5aHJobWt3dnVlYnpaaTYxbVdyNmFsZnB2cjY2YnR2cDVDbnJkeEsyN3lZUW1ITzhOZ3VKYTRrNkVpT1llVEJGVTlDN0wxbFBXOHZVczlVMHAyNXE1WmE3dXRSY3FXbzlkejF6MTlmcHNUSmMra3FBL1Uxdm13UzhhQmkwU1NtQXdMemlnblRxNkpvb0thN0ZwcWVOMWw3amEzZGMzY2VhNks5ejA5MDM1OU5xcDN1SUtBZ3pTWHg5UmtaSVJ5SUh1S1VrcGlPaFhRTktFU0lkUlU0WWRpT3VsZWUwd1gxbHFYVGZiSmp5MXRMOVBYRzFWeTgvbTVKK2M5TnFDVDg3TmVUUkpndndyaUthaG9Db0dNZUZMalkzdFRiSXdGSzVVbHpGbzcyVmtuTk5XMHV2RjlzeXZLeTYwOU9kTjMwMytIOWRGS2YrS0xUODFMdkhkR1lqVVhHb3pBY0hsQWZDREtteDBMdGxaeHF0elUxdDAwYjJZTkxzOTBWcTd1VzZOODIxYlVibDFia2MyTHZ4TE5UbFBqdmdrb1ZJc3pOT1RoTWoyd25ha3RTR0J1OTRhc3JFVTNTUVdkZmRaeHlUbWxsN1hpNk45YzkwM1BSdnlDZnAwVXRlbVRKNXlYd2poMjd4QUNQWS9nem9nSUhjRnlCeWczaGRBUllGemFXS1F1d2FJTDJHOEpvUmNLVUlZYm1TeHdSeklwQzREdEVUSkl0aFJpMTR5WEhzZUZ6SmtxaWRPR2pLUjVPT01XbCthYTZjUzVOYStkblg1SE10dkxuSFRzdXpMeU5abFR1elN0MDducGd5UzNlUkU3VnJsbTc2N1pWTTJzenFQbWJ0bHZydFJ5NjBPdCt6WGF0YzlPVGIvQU5VQUlnQVk0QzBRbFlQVVZBRXloU1ErQUZlQW9nZHk5U2JVTE1HekpIQ0tBNVlnQnh4akx6QmtmZ2NrWFJ3dVZCUEc0OWxTZE9CN0hzS2NJeU54S0pLNXZLNDJoVEdwWHN4NG1rWVlETkJLWkEvRnVPcmp0dDFTcStqcnR6WjNlMmVtbzdGOTFOZlRDYy91T25aWW82Mk5RYjNGVzFHb3VxWFZiNXVzalVlN1p6d0Qyd0NTQU5ZQjNCUGhkUWlZYmdid1M0R0pnUzRORExKT1JBcThFTzJQUWpRTlFOWXpIQTlDQ0RVSnZnd1kzT0paSkRDZzV4VUZ0dzNsVTRHNFRnWW9Pc1VaVUhzbEVlU3FTWk9TVzBrT1doeFNLQzZERHEybWJmczFMSzA5TndWMTBlcStmWE43VTlkOUxtOXQzbzFHR2xvMDZlK1g3cnJwWFptNVp1TlZuWDByY3l0MEVlUW0rMVpsbGFZTjMzVkx0a0ZJZ1dPQTNvUHNBb3hHSEFSdzdpb3dpRlNIM0ppako5alQwRWtIeXpGcHFUZTdsZVZydXRqMDkveTd3QlRRQ1FBTk1BZThJS0pZa0FnQUVTZy80akliSW1XaHNrSDdDL0l4S2trT2dIREJvekVleDhKSWJoSEZrRUtoRmdpeHdONFZJTzRUY2o0UFEwbVRSVkZ3TG94U0xuQndrWDZMVFYzeXd3TW11elJiYzZkYTNWMHFkR0hiRjluZTdHdmdPQ0JFZ2xNbUs3cDNjbDBkaSs2bklkc3VWUHVzM1BBWXFBMTRCZWdJZERhQ2RoZmdXaUFXR2FpTmhjQ1BJM2l6RmlCTEFPMkc4dVNVYUl4V0h3cUVjUTBVUWlvSzlDSnhRY1NSUUNHbUppWkVnNEpaVUJ1d2RBTVVIU1BTNCtyUkVTTWxKa3BNWkxTUStwM1RYcHpWVlhhdlp4dDBPeHVvMHF5NzZkeU5IVUhKazBENlpIS0o5d1JiMFdaaDIzdDNOOUdGMU45UGRQVGR6ZmF2TlgzZFBaQzZXNENXUUJLQUdGZ1R1QjFBWWNLQ0JQWUZNQTRZSC9Ic05neUx4bVJnWG9KOFNvK2lLQXBBUU1xRWRTY3RMRUFMb0ljREJqOExvV3BnVlpTRkl3Skp5U0E3ZUR0RHFPRWhKTWVYRkVZajN4d1ZEaEVRaUdROWlXbzdzcmR4N0NCWXFhTzNmeUpDVFVGUDF4N1FFSU5uZkM3Z2lVSUZGQ0ZzY1V6SWRDVWNoTGxFOEt1UkFCM1VOZElyamhUTnJUWndjdGNjSEZuTTkwR3BNVlBSdTMzeVR1dVBUTENERzB6ZSt3WHNFS0ZTaG1wZjQxZzMzQ1lISjdKVUtKR09UWlRjRFUzazFLWEVkMEY2ZEhsbDJsTTNHN250VlgzTlR2ZGJmUnZZVTNsZWdSNmdTem1iTytSUW9JTWFPYlNFb25CaU5SZ09oYU1mVU1UUXhsS3RlamhkT25hMmxQU1lUM1JkTjNmTjNQS3U5MFV6ZFo5RUpEREozWmRPZU13THlKVU1sbWx4a1lNUmlIVmxpN05UazJXdFNVYU1hdVYzcjNLeXpKakp2YzdLelZ0ZE54cSttMitua3lWV2wrbkg1eWFyd1NXR2ZJOG1rQ1FHWVVTT1pveTVkOW9hUkw2czlsUmQ4dE8yYnBMdnA2NTdtcnRhNVh0dStWM3puSDZqbndkT3hQbjg4SmVhQytHK0d1UkJNbkpSYUhRdDZVaHV3b0ZUSzhPSXN0RzltRGJLMmN2eGcxYnI1WHkvVmZkYmZlNmNuWlMrZmsrZ2ZOYjRhQWF4YW5FMFhqTUtraVFXUlVSRktJdGFMMTZmeUxsK2JhN3JWdEw3WFcwcjZkOUxzZG5mUVJQdmRTWHdyWkZFcU0wcnBqWmhvYzFqVWl6QmUwZE5PdFRsM0dFM3NldnF0VjA5ZDlMT3Q5eXEwc3BVemJ2emFpNzlFNlNDbWtlRlpNRmpjeEpyelNhdEVVdWxkRTk3N2pVOVBYYnV1YlZMMjBxM3B2dmRHa3N1Uy9OUDAvT084VjRFUW9reHBBV0pRTjN5ZzVpN29qaktTSE5YZHl6dHNzeWs1cTVOK1p2dDYrNmVXYnhWZCtmSms0NmFyOVFLdHp4a0RsY0w2QTBhSWlRa0ZJWDMzS1FpcDh0NUZLRzdOeldVenR6MXRVcTZOOUc1cWJ2ejg1dWVnUUpWVG5SZDRYSUpnTDVPZWlJeHNNZzZES2xkdXliSXpBaTNCZXJ1ZWxlN1phNjF0dnVyZTZOOUcyK3VlbStsQVROcW04OEVpMHFkbmtJRi9GY2psay9aYVBpUWhTemFMbVRuQ09rWDZFZG0rV3hKRzdTV3RMdW5PdnI1dSs3bzMwdU5OVlpENHNPYmQ0YkFNVU1KUERSUUZFTEFnUjhYakUwYjlMSml4S211WlhabTZkWnZjY2FpekhwWDYrWG05ajA5M3B1M1kxN3o4N1VVM2tJSnRaY01Ta2R4aHljVXNselROckZ5SlIzUVJUa2QyN2xlZW0rbTU3cHViNmUvWVRzWForSUpQdXpmSE1OZ1Z2QjVFVVNCRU5WSk5MeWc1cmpWbGlDMXFDUFBWUGN5eVlXdFBYYzl2WE54NmV0M1J1K3VlbDN4ZzI1M2x3MmNSUkowMEVqR1VqUVRQU2QxRkNrQ2xuV21sbVZGWExYZGQ4MHUzbk50THRXekxvMzEzUFRqc1NwWTU3cDF6cHlhOTRUN2dTd2pLUmRaRkxrUXlGSzBoZ2JtOXNOTEZLN2F1V2VSbUxxWGlzdjEzMFdrbkx0VDNSNmJ1NXZrcWFVRVhlNURnNFRqbmVCVWdJZUdBSjJFaGVFU0R1TUp5c1ZCWUdoVEdZRDJXSzlIYlhDYVNKTzBraTVEQ1ZaUzdtcE4walZLUnZGRzFhOTIwTFhpb1ZURXFHSlVFL2R0Y09FN0UrZTU0U0V1UHZqeDdaMDVYdkZpcThQb1ZnTUNCRDRiNHJRc2dXY1BaWWJoUUNmRFROUldqMks4MVJTYjBHZ1NURHFudWV0UEx5Y0hKd1VtbGtoaWtscGZoN0gwNVNKSmFYNDRscTNPemM5S2xRUFFadTVOUHJ3VjRHQUtvR1NoY2lPUGdyaThkQnJBNTRUazNPREFLUUU2WEhoYm5qZVlxWkwzRlFmaW8xWmh5UWZCRHhDWkk1aXBGc1BmTDMwMllFZ2xrbFlramNTeVdTekZERkVkNTVyQ1dpWTdkYmU5dTZWMGRhZDdubHdlQmlIb0w0eWxwUlFHNll0SXlsazNsMU5kS01wWERvdzVUTE0zek8zZlQzVGZXdjNYYzNkdDNPQ2t3L09TNzNJNlN0NzRyUVg4dkpLSVpDUVMxNUxvZFRsa3lpa2ZGQkVYYWpXbnE3dGxtZVg3bzFhN1hUMTkwMUcvUHpteFNwdmdmUHZkSjhYdkNUQ1JzWmlpTXBRSEl3T0VnK0RKejFBeGp1U0NseVJTalpqVnkwTXhUTVdWMmJhdVhTeXF1YmozVDMxTzFzNi9acnorMXJwcE8rYzhCM1lGZWdMdkJad2F4VkVtQm1JQ3JBY2NJbUZpT3d5bTR5OEVCeUhLa0Jud2lFbGNjYzVwUVZiQ0dnNjJoUUM3SDRlblhYV1k4SW9QUWlSTFh2dW5odGF1MTVYZ0krelNwcnJ1QjFxclQzYUxFSjMwcUJLZzJkUXNhNDZlcXB0MHVsMHUxdXFPN20vQU53QUpVQVdTQTZoSUVEaGRRQW5naHFRUElMVGNINGVoTkE0d0s0R05jZTcwanY2OEpJM0RZQ29BcFlvaVNaRlFmV3JaWm5qZ1JVS21IU0oxZGRKTFJ3TGxmbXBXdGtNNUZ1cDRMc1piNDVOMnprOXN1bll2dVZGM1ZiMDAzdTdhMXhvOGZJdnFDYzRoV2hhbStVVmR1WjVlNVd2ZW00OTFMOHl6MTN2TjNjdEcvVk1LcmU2YXpwQU8vQUk5QU0yQVcrS3NwSElLRUIyUkZRbTRNY0lIZzlHd1QwRTFJUnVzZndiQUw0U0RJNU9DU2JEeUhZR0dFL3hWQ2ppSkdWbkpJS1JqSnVOeEFHL1djSkdrbkdDeWxkcGUyUzhuQmw1VXFMMTlRYnZWVjlVN3R6dDgzVUtucTJwMm91bmF6eEhrNVpuZVFJK3ZvTGROc3ZmczV5M2JkdFZiTnQ3ZlNzeWpabSttdW0rdnBxWDlYZ2FPQUtFRUdnZUVQY1A4WlNxRFBDd0RQTlJqNDJmMW00bDJpNkQ1Zk9xbmN0LytCNHdLdUVGTkFzeE5FdGdjUTV5eU1CUzB0bEZKSDZkZFU5RnlxLytUL2c3QURGZ2dJUXhTSllpREtFOEQyS09tckM2QjlJeHBaNkd6Q1hLcXEvL3dLMUFIdENPUUM4QmRoekJRd1BVQkpnWUFJUUM3QzJLUmlSeVVIT0RPQlFSQkF1b3VCNE5sUFhheXlRTndiaVNjbk1lMkRmTkxyTHErWnYwU0pPWnBuUFJQMkVNVk9yNHVwMDRsOEN1Z0NZQVZZS3dhUlFnV3dCb2dCUUlPQUFEa040clJsZVZHQW1naHdza2dReUVWS0ZqRXFZU1I1R3RTRGRCVVZKVmtPc1hDL0xsSTNzYlF4SWlJZDZua2k5cWVYbGM0SkVxUzBhR1lQZ25aVUxMelZ6MTMydzVudGxtbHNXZGF6K2xabHVDaWFONVhmaTE3bGRuUVd2aGVKeUZpRUVDR3UyYjZiNkUzMTNIVnJabnI3cHUycm11dDg4dmpMM2RNTDJQV3pWaFZRQjhRQnBnQTV3bXBJRUJBSzVLUTJBb29JRUc0b2R2RThJNENCakVPb1RZZnFTYldjU0RjeEJEb09LVXlRSWtrVXJTOWxUTmoySXlJcVpLWjYwbkpPbGZ1YW9ZaU9YYkdGYW9sMjdHRE96YzY5VStLOXptM0JYc1d1cFU1VlVZYnBOZ2dqVzFVWE9iZkhaclZXeDdwZFcwZVc0c3VFY0Evc0JmQUU1aHVER0ZCQVZvQ0dwSE1ZUTNoS1NTaVF1Q0JRcG9kWUV4Q2pGa1lMOHBjdXNMUWV5U0p6aERSRDBrMnpIamdnQk9HNCtxYjI3YUtrMnVzdE9pbkxoSG41UUkwQjQ2M1BzcnViMDgzejVkS2JaSmhuSFZXS3RnVjlpNnp5dkJNb0VDZ0hqQmdnckE3cEFFOUFKdER3QWp3a0N0ZTVldytTTURMdkVhRUtlanFhbTJxSHdSaVNxU1RFNWpWZHh3U2h1TXVucDZibTc2Ym1Da3pUWk5Jbnk3NnMrZmpxclBDRndUZUFaZUNvZDQwQWNRQTZRRThGTUpTVGsyOUkzQitpTmxRTjRUcEh0V3NZQnlEYWNFa2xHQzkzdVhhNjVsTjNjYmJ1TnltTkZFSW4yR0N0QXNPOXlGS2xkT0h5eTc5QUFsQ3FDZFVZcEVOQk9GQ3dVMTBzR3VKT1VuTFRFRld4VW0yWFBLb045M041OEQ5SUtxZDJjcjZlZlM0M25oNkE5NEFLUU1WVGtKQ1NEd1AzSTBVdnBNVVNpWUpGb1RTclp1NTd2MkJDUVk2cStrRTY2VXZpdUFjK0I5Qk5vdFFocmhQZ21OR1l2N3JrYkJTbG9wOVZLcTNzenJzclgrR2FFK2dsMHVqbm42anJidktvQms0RzhEUHJIaHFoc2h3alBTRGRldEplTlpsZXZWMU5jMHQybGJ2UzlqcGNyY2VPK2FRT2pqdkN4Z1BiQzJQRElnTHd3bFFYeElQU3YyWDB2SkhYbzhwNjlGaS9rME0yNnJKbzlkK3loUHpTcmZIMEI2b1ArT0NQbUNDSU9jRTV6dG1xWElwU2w2aUQ1MVZVZXU1bzh2OE5HS1A1czdPNVN1bzV2cFV0WkYyUnJ3ZVVGbWhka2U5TkErQThjWnFFR3NYU2M0Tit0QWRYT0xkTit4Q0dHZGJIWFlyMnB5T25mSFdlL0pwK3VuWXVWMWlweDNYbWdEeXhEdEpqQ1lvRUFQS0pOTk5va0p1VXVtNEs5alhUbm9DZE1ObWt6NEhyOWpSNW41V29LblpnVnM5NEJtQVAwbERKbERvWEFlRVROYlUybWNVbE1IODg2aEhvMGQxNTlnMFN2Mmt6ZTAzUjF2a3hLZ2RsWlRidDh4QTFvUk42WkdnMEh3RDZ0TFZSUVM4ZDJYUjJqckhkRjN1VUdjSnBCdFRUZ2ovUHhMVlIydG5mSklHdUNKakVYSURZY2dlNDRNNVd5TjBvS01lN2RPKzduWjU5UVRFVDB5YUdOdmJxYy9JcGtycHBWdmhLZ0hyQ0RoNkZ0dERtTE5JT2hjYVM3SU9ITmN2Tm5WcXV1bGxidm9VMjYrVTg3T1Z2eTZwMlhUVWM4VElHbWhvQjdPUW9oWWhzQnluTmRWUVlOT0dneHVIUDFWazhzc3Z2eVp4cWR4dDNuOGprMTVIQXlFS21Ga0xaUUJaQW9CTHpHTmRMREpqQmxHVnFwcG0vbGluVTIvM0h6cE41ZUljQ0hDQWZXc0JtanNHNnl5cVVFVTN1YmVkNWZUZWxidlNqZ2kzM0VIWE5uNTA5enhmQTZvTldGZ1lRRGtCRG9GM0VVeUhhazcrSStEdWFxQ09iWHJlWE5xYW51dnJPK1BiK3FJU1UvcDl4WHo5UHNUbEpaaG9ZOTNoU3dpa0ZtZ2ZleTNRYjhBdGNJTFlEV0lpZTVlSm9TZ2l4d1B3MnFMZTI2b0RjUGFrZXlTemMzRytYNHltK3VOdDM5S0NkYjVTb3U1dkZldDBldVZWK29hMUs1eVdhTE9IdWVBbDhBNzRGbUFlRTNMa2dSR0RUZ2RFRTdobkRCMHZhS0p5SENVZ253dEp1YW01VXJsVVVmR1JKNVROdm5yYU9CdVV4NXZyVlh3amhVTTFHbEQ2aHA2NHJiWHd0enRpaWhzdjlRQWNvQXVJQXdZVHlnS0lCb1lJQlhLSmVVaExMaHVNSUFpd0R1QlFRVmdLSVp4cHVWM1N1TlJ5UGczV0xvT2ExOXJsbHpnYnh0U0ZOWXhqY3RkUFRjMGNFTmxCTHlkVXdWWEhxZDB1T3FxRUk3WjVYa3haZ2d1aS9UclZXV2U3Vk44ZWI0UmlBMDRBWDhEWkJxRDdCNHdjb2pCdkEzSVBpSDdSdXlrRmFEcmhmTEVSRzBqTDNVODBjbFFIUUNJdU9SY0dIZFBiMHJqVUY0RkdZM0swMmtYdSt2cFlJcVFuWm1sc2J3NnZaeWoyK2pwV2g5Q2tKeENTeWZZakNqcll1SzIxR25Ici9BMlFCcmdSU0pBYVJCQWZVQldZWEFEemhIQW0weHFjeVJ3NUFtWlFrS1lFUWw4bzJ1c3dNamNLYUdBWkpCa1A0K3RYTjlKSkR0RjJJZTEwOWRycjkzWGNpbEdZblBqZ2pwcm5IVG8xcDdXTjRlVk8rZ2F2WFJUWkx3V3E0ODJhOEI5QUE5UUsyQkZJaUFoUVQ4SVhBa2dMOEZJQjlRM0RjcEY0OGh5QzdDZmorSE1JTU12TDkxOVRKTEZvTkpJS2UxY3ZiYVhXYVhWMjExK09DRk9pMlVDZCtQMDYzNlMwbXFkckp4M2daTUF4RVJBRGxGQXFMaXJDY2lySXFkZE8wK0QxQXo5ZXZ4ODZyeS9kN25lQmNRRldnOVlxaEJ5MFN4RERnTjAyd0tWSW9Qb2o5aXJqdS8vd1I2QXpJUmtDN3c5dzJSSkNhQ2hpd09XVlBMMGlSR0ExTk03c3dsNnUxdjl6dkFhQ0FTV0FiU0Fic0R5RWNxQTZ3Q3VRVGNDWmdvNGNROWh5Q1hDREFpZ2V4TWpTSGFDRkFiTmtYSlNaTVJ1TmdVRUNxaEdUZ1VBT01GT0pBOUc1SE9GakZTSWVMc2s4cDR4VTJrWGE0dzY1UkVQdXlYSVh4Y1ZuZWhFZXd3Mjk4WEZhajNQQVpTQVRRQlY0RStrY0dGQzlBUDBBeU5NQmhRVzBUSmtKc1Y1VkFVT0NRVGNsaFFnb0kwaXdLUmdwWEtvb0JHUU5LQ01nNmpneUc0cUNoSHR4aXkwVlFjVUhVREVoVFJGVEZjNFhGQUVSR1JpcE1SY3JrSWpVNlhiMEp3NnFpenZ2R0NqOGRZaE9uZGJMaXR1K0FEeUJSb0RLd0JJQkxtUWJZRldBVWNEc0Fmc1hRY1ppSm91UkFuTUhGQTdpd1JLRWJtb2dvM204a2NraTJIc0Iyb0thT1JGaEdRN3d2Zkx5cEtweUlXQ0p4Y2cxb294N0tySmlibVFVSWFraTVKTWh1UkZ5RjgxVDdjODZ4VmhXeWMralJjaWJPSDR3Y3F4MXQ0ZTlydG10T3RkTUtPbmVFTEFzMEUyaTVDd0Q4RnNCa1FZTVRRTUtINlA2azRVRDZFREFtbzVId0lXQk9RV29pbEl3d3lYYUZxTFFnTzRhemtmRmxwdVRFcTJOMWxTK20ycmF0cTE1dHlJKy9aU3BkbmQ4ektFTlA1S0duUE9zMk83NFBtR0ZDSVFDbkIwZWJoQ1lKeUJOSVhDakI5Q1VFc05RaEFnNDh2RGZHY2FsMldkTURFWmh0V2FXSkt5Uzc3cFhJNnlSZGN3dnA2YnVlNmUycWRVVUZlbTQwNUxPc01kcDNEWTE0Sk5BNmhLQjZCMFFLY1NNRWUwWmZWc3NtQzhObFNZcW1VbGQwYk1GdTNwNldsdXZvM2ZjcjZVQ2JhcVQvd0lUb2JPK0FxVUREUkVBQVRoRVJVS1Zobk9SQlFhY1d6SXptSVB5RTd0cG5UY1dZMHBKTnVTRlVsTk15MHVrRnlOOWxKbG9UaFZ0ZUtSWm9wa3NxV1ZCdUtoVkpKd3dMMVFjZFE4WURRY0F5NFM3SFRxTFZWZUcyQ1RoUGdtUUNGeE1BOVkzRHhRV3NKNkQrRFl1VkJNQ3ZNRVBFaHcrRFlwYWhjN045S21TUVZDU1ZDUTBZbkJoUEhFa3NnQnJVcEphT09NcmFaMmt0Yk5hM24xcUFjRUZFeW80L2ZBZStBb3NMQUxBTkVWUUtYQWhZakN1S1lnWTByRFNTQXc1ZVlveSs1RCtHbFMxWkpGQUdJU0xraTVVNmNITFYyS0FSZHFQWFpBTGtrcUhKVVVsUWdPWFhMVTFUc29FM2pvR1ZyYWg1NXhZcml4VVBGOE5XeFNCNkdoZVJoVmpvSlpsb29vbW1VUWFmS1pVUGFSMnkxdHRhY1hLNlJTMnpQUnZybTU0N3VjeWNWTytPVGtueXU3eFdNaVhaR2N2TVJ6SXc2a1VpUUp5OWs4cG9pOGtGSlFwWFdkZXpadk56Zk9xTHJ1V1k5TnQ5NzBNSlN6bnBVdEphbXRyeUtKVXhHY00wMDRUU0lwc2lRRlhOOFhFU1RhREs1b2NSNTB0Wk56M0xyZE1KdHFiNjV1TjlmZW1lbGMzc3U5ejZwMFh0dXp4Q1EwdytTY0xDeDJMUk82VUpMeVJhT1RaNVFhbFR6TUlWUFZORzlYTjB1dE1ObnB1NTY3dnBhNi9mazBmbHp0OWgybjlsS2ZmNFBJR3lJQ0tzb0pDYWlEV1VJQ0pxMENjakk0OWtialZmcmxhWFZTMHN5MWJNYTZDbnJYajF4dHFOcXJUYlRicHo0TzBtUzdKcnc1ZzJ3OXpZcFlvSjdBNmNNaUc1ZmhHTlJvUjJZTHFWbnphek5ISmd6ZkhGeDZIVGJVOHF2bzNOMzhNUHk3N3BOT1JTdHUvZEU0QzZXd1JnK1UybUVJUTAyZVJHcVhnYkRxeXpDTFhQbXVqeS9PaGEwclN0ZDNHNXUrbnUrVCtwWTVYenFHb245OEYzR29GOEdBVThtSXlDWkl3elhwUDFsYXk4aXlZR0JSMW03NldsMVMwc3gzYmx5dTc2ZW00MzZXZGwwNU9lZ2w3a3NuM1BsM2g2Z2RJSmdPNDROUUo0bWlJMFpxUzdGcE5pOHVxbWxDOXg2Ym5qQzU3cXQxWHkxMjMzVzZOOU4vVUV6bTNaK2lPUXBtOGY0cndveGdLc0hmUUZ3a21BOVM0UzBMbEp4aWNESXVvcEdyNjdaTjdsbWU2NTZiWG0rdm03dnI3NlRiTlJTK1RMcHVxYnJ3WThHdU5RWGtZamFRMGpBM3VsTU5rM0hTYlhZNWZvdnRhN2pVdEdGclM1elBYMGI2YnVOeHZ2MGNKSm16bS9WelRkZUdjR3lLOFRDSXhCYmdyRkRIeXhzaXhTeXdSN01GbHBOWnFiV2h0cEx1N2FtNTN1Y3I3dmxLOUtnbkQ3bzc4MXI1cEI0QlU0VzA1S1J5S2NDSEFYMlV4ZUpjWmplVngvVXZOalpJNDFVMjZlc2FVWlR0ZWI3clo3ZWFtK201VXk2MjdYbTVuZmhxYXQxMU51OGprc1ZZNEdob0tZY2lLYWxFU1pkblNvb1dCdnc3UVUxak05S3hmMXJ6M0VkcG03dHE1dVBkTlQzUnVlNUxIUHhLbVNwWTQ2THZHY0pZTEFmVkJFWVpEUFRDV1RDdFI0OWtlRjZrdmNSbjMzV3lSMG0zTnlzMWEwYmxUMDMzVGM5ZlR6ZlJRRUYzb0QrcG05alU3OEFFcWlwSXhDWEpvd2owbVFIQ0l2U0YwbHhzOWRwSWlVVGJwNWxxWWJKdmNzenMyMUsvVDBldWJtMittb3BUN2RlNUFsUUg0dVRSM3dQVVBRUTRESUxEb0tra2hnaERobXM1aE5zRFJ4eWJvaHFOa2EvVGRyOE56TFRSSnRKMjAzZkdIVHk5THozTjk2Y21JRDhUNkN2REpUYytjMTNiSFBCdlFWV0VKRFdMTUpRQ1Z4VkRNaVJGUU9OUlRCaUNhdzVSN0hnR2NGME54czVlVENqY2JCQVJ0VXJ5dVBNbUc5YzhOVm1UWFgzVHh2ZHozVGlHVXV6aC8wVFVLUHhoVTRkWjRHamdMYUFZd0FjRUpnTEVHOEJyZ0N2d0ZTQkc0aFlXUVpSYU1Hd1F1RUZCMXlGUUJYSkZGZ1FIVlkraUlrY0ZnQTVad0hjR0ZEQUJlSjdMT1NXUFFSbUxvTVVLQWxGVkc1U2NCMkZVeE9CN0pJOUp5SFNlb3NJYTBJK2Q4aWxGOG14cUV2blRyU3p2Z0hOQUV6QUJiQVpxR2lJT0YvQXJ3RlhxQWNjRXJCL0VnZlI1RFlCQ1lEeHpCSUljSE9jRHlrTVVsaldLQU8wRmtoVlE3U1V1VkNxTGtlOU9PWEtnUldEcmczWVUwT3N4YU1URVhJUkVVMGhpVXhjY1pqSFV1blNGQ1hIVG9GblBCSXBoV3gyMDB1TzlMTytBZktBMWtCOHdEQ0ErQnpPQUM1QVJ5RUpBMlFVRVFrZXhjQ1lEdUJSWmNKb2FRZ3dIVkREdEJ5RkpjeEZvMERkZ3JNS2FwRnlEa2lOa2drdEhCalp3cEZBSWtjY2s0NE1iVXJyOGIzZk1CazllUmc4OHhWWHNJK0lXUmcrWE9WNHFyd0pYQUdLQ0VRa1FYY2RSUEMwQmxHUksyTlFzTUl1bEU0STBseVRpK2VkSzdOdGRjMzE1ZXVqMS8vZ0N5QVdRQ3l3REtSb0NmQW5JcEEyWW1nUVlEb2o0MFlHcWdGYWhIRWo0RlFDb25JMUVZZkJ1SlEvbklOU0hEWW15cUVRQVlpY0Rmb3RocU9SL0U0RGxCUnhGQ3FaRXRyaXFjV2tKU1JTY0xveU1PSm85NW5LS2JSdzJhY282THJuS2w4d21sZlRjOCtkZGM3cnAyb3VqbjBUUzNWREJFUWRlbXQzZmN0WFZMTjMyYzlidXR2YnRScXpOWDNUVjlxUG5Wc2I3d0F6QUNMQUJOZ0t1RGJCakJBUVRPRktGbUFad0Ezc3dEZUdab2VRL2dVNk5wdURaZ2dnSm1MYzREaGFJNHNwRkFGVkJxUkVqa2Z4RXBGRUlXYldQWW94RWd3NFErY2pZUUM1S1NTSW9EbUpERTVPUnZYSVJHTUx1czJlVU1xdG5wcTBkeHpwMjZ1cGhEcDJwVzZ1emxwdko2NVc2TmRLYWlkS2l0cUYwdE45RzV2ZFo3bzNOOVBUMVhiM3hadmxwV1pucDIrcHE1dnI0eENvaFBST0RZTXdISkE2UVRZSm9ETmlnRzRpTDJIRUhTRFBqZU53ZFFVSU9PRXZYWFV5SjhLS0hXU1J1RkdKdWVYWHVXckcwVHBqS21hV2Fhbm1vOUo5S21kVTFOUzU3bFZPcDFVZTA2TmZKYStkektkSFZlN3VicDdEWTduZ3VJVUVvRVZTT3lrVmhJZU9aZlQ0Vys3VUxxU20wam5ybGFibXVtN3RhT3N5dXpkdHVqYXJ2UzY2YWRKL1BmZW44M2RqbmtJYXh0RmFhcVNHTDVDSHRNUEFrU0xUVURCa284TkJnY0xXek5NMnpPVnk3VTNhcG01NmV1Tng3OWRzdWRudWU5TkYwMXM2N3lPTkljQThrNEswZlJDYk1nMW1qQWljeWtPQzFBWktKTldibnJtbzVLVHU3cjYydW5wdVBRbGUrOC9LWnlySjN6NTkrcGNpK2E4d0NWanFpRXNSMFlrUjZNaHpVYmN2bWltdHNIOWR3cWN0UXRiVFVXa2x0M1BOTjgzelViajI1TmJGSzczSUlTZ3FhaDR6aFBsQTVvM3FCN0VsZ3FSbUxTTlNaWWlXbmxZWlh4WjZibXlPazJWUEc4OTNNM0hwdnVtK25tKzlMQnpzaWYraEh6c2NnM1hocWhOUmZMV2kza0pINUl1WFM5R1J5TXBxQzdpN2Jybjg4M3FlbHFyVTNVMHYwOTF0MjN6ZlRxYWRyMENHbmVPamhuR2NKS1VaRDBRRkExdlhRUjhpTGtTMExNWnR2akNtYWl0UFdydm84cTd2UG4wczdFLytEZ2dlZnhWbml1RWlKc2RBOHd6bWR2VFJRUE53R1poNlFTZDhwWFd0YWRaYW5MN2w3dWJmazMzWFBkSFk5Zm45SEJ4K1QvcHRmdU94WHZqR041SWVNTUJMQWJzVktKRVRUTW54NHVhTmtsRk5GdVhPM1dwTDZldWJ1cDZLL1R4MnRIdnpObloxTDU5Q2ZicEJ2ZzlZTkV1UTBZNkhESWZCc3RRd0k1YXBDdytqZHBscTBlclhiNXhWM0w3a2V0dnA3cDd6NmJNbHgvMkF5WFJ4TE1QUkE4Sm1SUUFBdTAwSXJBNk5FZVhzR0NocGZvSkRhQzhKZlNOcVY3NlY4dFV2Ryt2dTNiYjYvUG9LbDB1elBRSmt0SUpQNzR6aGRRckE0S0hqa0g4R3hpUkdUNmFXTGlJa1lVcWRlOWU3bm1XcGV2ZHI1UGR0MzA5SHJ0dnJtLzBSOHVkTGoveWFKWFJTd3J3MGhaZ3dROEZvNmw2YUNrU0F5a1RycmlkRmxsUkEzTjVaNlhyM2ZORzlyM1Y5TjlHN250VlgxL2lCTWc5N0NFbU94Mk51OE40YnprUzRlWnFabTVrbFFFaEdiUUx5N29HMERkclY5bnA1SE5hcTY0dTJidTdXNVV1MzBXVzB2b253ckpTNDZOZWlBM3NEVUJKN0FwVWhkQW15eXZyQy9HcXo2MWU3MmVqeGZ0eDd1NTA5Tnh2cm0xWFJ2NTBnMUhFMzVWU2ZuWGVHbUpnUVVWZHFCSm1xRVNSaHZQZytoV3VVTTRvZXRyNXZ1V1dhcTdscWE2cDYrajBZVzNhcnQxQk9TVE04WHBUNjJtOEpDQkQ0eUNSQ1FTaU50Uk1vMWpYc1pjbnF5TmZWMmF2c3RMclRkemszTnpmVGR0VDA5MGViNjlKazdrYTlLK2xXZWpEUmtOSWd5aE1SaE1CeUwwOHcxTk5GOHFHdGVydThkM1N6Szk2cTYveU90cGZkRkJGMU85a2tqT09aZFFlcHVqVXY0ajUyMmk1TlJlekN0amxYdkx6ZlR2WHJwdGJ1bm84M2M5N25KV3o3dlB6V3VsTG5qTU1ZN0RzTUE3azlNTHlkZ1lVTFhXWTBYbXh1WEhDUkZjYm16WjdMWGQyWHNONmU1VmR0MjNmNUxxejNTbVN1M1BIRUppRWlFbVhEa2prTkJFaUZZS2RacHoyYWc5ZWgxNjVnMHM5bnV1V3V1NWM2V2V0dGFkamQvSk16Y2J6MHFBK2ZkSEhSM3hJaHRFa1NSU1I4UGE2S1IwRlNZVHhjblJHcFNrWm4zZTVmTDlPZDE5MGU2TjlkbmQzNlhOU3VqWG55RFRzaW04bkdBd29nckVENWFUaHFOMEJFdUQzd1FXYm01dEpIUjkwcnl0YzNON050M2QzTFhkM0hseTUwWGU1MDFzWFM3UDBEbUloME9UY29vQk1JeGZSVkI2Z3ROTVJZcFphcWVucFo0d1o2MWtqSzJ4dTVkY3RUZUhkK2ZDcnVQMUxwejNJbzdLV2E4Y1FtL0d3cHBvRjZXNE5SQ1VSMTVFYzhhR2pKZm5UZGN6eW11dnU1YWVaMnV0WTNiNjFmS3JtQjgvVXUvRUdaa1gxTlRuaXdCb3psR2tJb1Y0WkdPYUhnbm02aEc0MmdSTzR3bXNqQzZVNDdiNlZyNnB0cnU3cm5sWFRmMUNrdVNmK0JicnBkdE43NWNIU3dYRFFYREJTNUdnYUZ6N1pLSmNTVjcyWUtWdWRQU290VFBXeWtidzZ0cWR1NDMwZWxMcm5ZM1h5aTF4QmRLVXJPOE1vWnpJdkNzcVhCNTMySm1vTEdHc285YU1KV1dtbzI1ZVY1dVZ1bmU2Szk5UGROejA5Rzd1WnFkcWM4K2dxY25Fdmd3QVArTE1Ud2ZxSmdPTXBDd0djVmhlU0JaQm9XY0VvVjV3TTQ3dkpZZ0lsemdiQi9NV2g1WGFYT2NKQlZKWTdIQktLcGx6WEdKVUpSd2NHU20rTVRkcGJwZTV0TE95NzVUVk9TOUxVN1hpSkFDQWdDTEFOM0M0RUFHS0FLbEFFWUFDcENCZ3hRUG1MY3FFQUxBTU1PZ05hRjNDaWxNeEtvOWJYVVBSaUhnRGlCaGdwb09vYm1BMUhFVGxja0Q4RGxEMlluQnV6MWo4a0hzeGlZeW1JZ1pXcDVTNmp2Tk82TExzZFJXZDd0U3VmT3BmRGVCa2h2SlFHK0dvT1VKaUcwREdBeFlNU0V6azRzSjZGQUNoaWdHOE9zR2pGQ1NEaHFUZG94Q2dnMFlUOGxEY0hRSFVTKzZIZEkxaWZHNGJpVGZSdXpHTi9xZUNkdmFsMVIyTlhWWGI1MXZKdTdtcnM3cTZwM2tRTXBFUTdRbHFLWWJWM2QxdmR6VFBQdXBmYzgwejNOTThyM21lN3V5TzkyNzZSS01BTHFnY3NhbUJlaEhFdEluS0ZFb3k5eXoydTdaNlh6dlhLL2JPUG5PWnU1N3VqMDk4MWlXY2pzdTkyU1FmRTBJU0NUQzlNYmtRa0RPZ0tGSjBMRWpGQkVvWFJjWFhQUjYrV3VidWJ1cW5Mbm85RytqMGUvVUU3SFBwaUIrY21xOHhlVWd0SWFKUEl3OENVTHhVamFVcjVFY0RNSzFlKzRwUVVhNk56YnBXbldiNjZhWDY1dmtuWGZMdGZwK1QveFN3cUtXbzE0UUFEZkJYakVWS0lIbEphUWhGQVRURm1DSWl2SGRDb1pLWkpham5PY1UrYU4ybWpkYStucHVWMnA2VjQzMDMzMG1kVlJ6MkF5VTA3TzA2THZHb0tTakhKQU9KRkpva0JrRlZCWWM2YU55a3BONU1GaS9iNmNxVEV4Tis2ZHB2WlpjcGF1TjNHNDNjZWxNNXpvMTc3Y2xkTlpIUFFnMFlleUJQQVlBMTFqRFVSYk5Nd1VKREF3V3ZlMkUyMWRyVkxYZGMyclhqeDVmeUtTSitYSmZsRnJaOS9sb05JTXd4R0JDSjhvUnplYWxySmVYSXpVeEpGdm0yWlVWUEdDOW1GOXpVOUx1dHFXcHU1NmV2bTdqMGpnbHpKUC9JanFQK0pNS21UeFdpczVvVXlGWXVJa21FbzFobUtTTlo2KzlQV2J6MGtlbXB1YVhWdFRkOWZhMnQrd2svOGdickUyeWw4T01HTUI2eEpHUTBySVNRVXhWaXBHUTNldHVGNWcwYjhVakJ0ODdQTDMwZW00VWRYMzVwL1p6NlF3SUxxays3eUtEakJDQWdHdFlCeHdvSVhnZ0ZvUHlSbEpJbGh2SGxTb01McUVXZXRIS3paaXZuUTIrYXZybnRqM1RmZTdUNnBMOHJNWTI5L2FlVjlnQWlBRlpqcWZGT3VhZ2NvUGNOMWlETHJzakZTU1FNckpGakIyUmFKRFBYeXpOem0zMXpkeHZKdmxmU2wxL3VGOG5Lc2ZOZkFBSWNGS3B3OGtJZkJPSXdsaWdqS2FKNjNTVUJEQnVOK1ptODYrMDNHa3hhTng1SkYzMDNkeXl0ZDlmZHk4OWNla2dwcTFCbXp0MDZsZVFxaXM1dk5MRGxXTjQ3OENRRTZrczVsVHM0ZGI0YTRBUUlLWEdzaUZ4RllUQXlpTklVVVVEY3VsUUlZTlJ1c3VqdStaYWxxakZabmtodjBibTBqVTIwekw1WGJhbnYxaERybTk4Z2pDYWtHSitYUFBlcnc4d0FnZ1VHRmZEM04ya1lzdzdZbWpwUnRMQ3dLaFVhZSs1ZE56UzZ5NUl0ZGF5c3p4MXpmVHFjWHFQMDc1R0VtcHR6WjIvRHlBcHNFM0d3ZVpld1Vnc29NK1VVeTVkVnJFZXcvVGw2Um5sMnkvb0xHNWxQVGE2cTV1UFRiYlViK1FkNUJMbzA3MG9rRE5LM20yZTc1SUJINFFrUnc4cFpMbUJSdk1DNjJwNVlaaGF5U0VjSU5tL1pkbEpJdmM5ZExxcnUrYTZLN2ZkYzhsVDFoK0x2ZUpCaWtzN0d6M2ZCS2dGSUFwa1Z5MVFHc1l4UWp1TVVIVHJSY2JnbTRPa2s4YkkrV3JyWGU4NUtwaWNSdWVkblhOejE5UEpJMzA5YzFCQlV1emZZR0puSmRLQ2FqaDExK1VRUjJBVnV3eVRsaUVBQThQZ2U5UTdtR0Z3bUJzTlkvRzYxdnVibmw1R29wcVdta2s5cmZMWEsxM2xxdTZlbDNJWEt0K1JoTmFid3RuRHQwYzhXUUlYQUtlQWg4aDZNQXNncUFYd2JWREtPK0tLNVZEZEtqRnh0VjNYcGhmU3V5NjNUYWxaZnB1UEs3bnBtQ0FtTjB4V2ZwZHlCMGR1RHZBalFEOGkzQk9vUVNFdUJqUlRwQjZEa0RrSXFKazRCL3lucGppUTNHc1VJMWJiUTk4WlNjTkpNTnpncDNEaVNTaVF5Ym1Fbkk5bE1qbUsvVzEwOUlWZExUNjFMa2MzeUVHVEJnVWxQeUwzcXRPNjhKWUV1R01ZaGVHVVNvU3NOc2loS1JmVVdTUTJBMnczeVJyNU1CTkVva0xMRWtPQWIwalRVM0xWRWt4cGN3TnpsVDBxU29jOGNGUXFOTktXbVZQSmNWNTZCQTZuU2ZxZ2oxM2dPcEJTcWNJVEJLRElkNEVOam9PaWNLWURDaXc1NmtWd3dFZGxjakNLaTRNcGFTRklmcHZ1bFR3Mmt2bWxKSkZCYWxkSjNHTW5BL3lZa2s0SDA0TWJJU0p6blR1NUx0OW9VMDlza0o3YUtpdERReHp2SkFTa2FCZVFrRVlqRkhLZTFyaEEzSTkwN0NoYk1ibTNzeHZyaTBkOVBYYzJydjluY3ljUy9UajdvdXJ4VmhPUklpdFRvTllMUjVHZ21seWErTG1FYW5pOTdMdHVFNnM2bDR1NjQ3RnBkcTQ5M241dy8rdnBNZFY5aFB5MVljQmpaRWtPYTBEVll0YWZTeHNpazJucmx6Y056ZTdyVllRTi9xWEZXZmlLVCt6bGI0N0F5ZzdoOURsUmNPNGFxS2hsUmRhZGhRWU1ZWVd3b3ZwMTJRcTV0cnJ2S3FQWHpmZWYyYWRFLzhpOG1UYkx0ZkYzaGN3bklhWmVNWTVpK2hJWlFaS1k2STdMMzJYUnMzNjFvVDBYTmRQU3N2MDlOODNhcXJubSttMEJNU3puc0lxcW9uL0lRVG9pbjlFZ2FpckNSckc5a1o5eWtSTUk1WFhYTjFvYmt0Yzl0bzRLVjN6N20ydVpTWHp1amNibnBQa3hLcXIwQXZPeU9TN3dnUVN3eUN3QmhoL0Jsdy9oUGlYQ0FBSWhFU3RZd0M1QlFRdVFjSW1SRkE2QmRyR0hSTHlPTG9Pd1FzeEtvb1JEUnFYN21aWEpBL2phVkVseDdsMTc3cDZSZWlsaTdXM0s2Mk8xaDNsWkd0UE05Z2d1Ynh5Q09LOVZRamplUzdXOW84cndEZ3dDTXdBNlFEV2pFUWtXb05ZSFdIQUJTNEo5RURJK3NETG9Uc2JSOEM3aFZSWGxVM3RkZVRnZ0FwYkp3VkJFZzdqQTRhd3BEMlB4eUZQSDhmakV5YW5rZzNCNFNrbGN4V1RHSXdrL2tUeUR6eU5rSVhlTXdub0wyNkwzN3lpN2V5MU5PanZkSzFzOHFxMTI2dVhNR2lGeWJVdFNvYjNKcUw2NVZ1elQyN3RYVnZtRTJyenU4ZlFDWkFEVUFFMEJHeGNHdUM4QVJnRHBCZUE3QkJIcmo4Sm9FNURZQm1BSVlSQjNzaWROK1VuQkhLZyttNXlGN0pJaVFvaXJ4a3RqS2tLT0lpS01iUkd6SlR4Z1NqZ1VTNVZVcERKcEVaRG54bTVFaGxlT1gzVDNHNjYxelYzM2JIbWV1cTZhdkp0Ylk4ejAzZDMzZGI0RGdLVjZLb2J0ZEYvUHR0SDJ4enB1WFRUcXZNNjQ5VXc2NTI3ajA5Q3B2cG9CZTREV0FBemdLbUNjaWJEREFHYUFYZ0o0Rk9EME5oSUk0OEN4Q2JBZE1xRHNDQlFReUc2TEJaSU5ROGNOby9DTUM3TWh0Q0tRaDQzTWVaSGtsaitOd255VUZUWGFPREdUZ2J4YkMySkxLeWxwRUpNWDBjZFpVU3prMVd4dWR1M1RsWHN1bmVmWGR0eDYrcW4zVTdVN2ZkY3UyUzNpYW9qc3JhczUzYytYZHQ3Mk92dXVlaXQzWFZzdnEybHMzcDZiNlh0TExNdTYzaitCcklBVndGT2hRMlFjRUJiUUFHNG9oTGh1Qm9MMlNUQVR3T2NETW1RT0dCNXg0ZVlLVGMzU2FJV1FEUmswRUtoRGxKR1dzV3NleEYxSS9pMmxlN3V4YzlHMnBOeDNYMmRQaStZTGwxb3A2clhTWE4zZDgxelRyMW50NVNidXZlbTdaS1RSdWJ5dGQzclczZHk2UzZVczFNRSs3Q0xvN2l2SFZOVHN1ZE5YYzRxeWJxcU9xOEMvQUhxQVBYQlY2RWRUSUpnRngwRDhoUXpiRFpFbkpZVTFlUW5lMlNHYXk5TURrWGJYRzRoNXl2Syt6ZlMwUDkzMXFsNy9qYzFUdHYyYlJLdHFpem4waXFhbWxXcTk4RXJCM2cwd2JCVE5oK0NHaEd5YUxjZlZFR0ZJckVaZVV6WWZoWGxBMmhIdWtwQ3dPR3VudWIyUGMwejM2bGJxWWJPeGQ3bjFMcDNQRnFDc0FKSEJwRUpPRWdFNURwR29vbEJldGRZN0ZWUThvc3oxS21aTUxtMXpyRlhmS2REU1dYT2IwN2QrU2ZQcXE4TDRBOThRR2hlSEVqRFdLNHZHdEk5L1M4WXhNTFdTTG0yM3V1MWlQZGxidjBtNDZKK2p2UGpqZWVEOUFhS0ZzSHBsUXdUaGFHL2FvaDFiWE5kWFBieVhLdWpydkhCUkRKcWEwNm83clBQbjNSeWM4TFFCbEFKT0hOZ3pwZ2VvYWdORU1FMGROdWUrZU9uYjIvQmlGUzdKMHNPOUJUa3ZuSUtrRllVVTBIcGhZN1dzT3hpWUkyZGhMRlRxcmRkRy9waWRiUHdweDNYcGF4MFhUWGpzRVRqc09pVW03SlROV2tURUpxYWxtNWUrYVZZNXUvUHd6Y2pVWU85TEZ6ZVJyUEh3TU1VU2JhWjd5bEIrWW15YjJvVHFnNnpiMmVqdnB0bktjK2RtbzVHbGUvVVhiT3k2Y0s3dktnRjNCOE9GSW9SY09qS1pGQ1lTZ2VveW56QzFXd3ZyK29KbnA1UUo4alIxaEF1OUs1QnI1U29IZUh5RUpDd2tuYVhhVVRPZFlnNkZwcFVScmJsMFgxY0RxMWQ5NmNtU2ZnNUNteU1HTWplbG10VjRkdytqODZneE5WUnFtNGVQSUp1RUJJUE9vdE5DZ1pvM29jWXBRWEcwMjdNVjF6NXZ6VFlZbWwwdjJGVXEwTVpYb25WbVlmM1pmK2dYTUNUK1NzVkFjMUdvblRXMGdoTGxFdk9xeWI2L25VMlZKQm5kMmp0MDRXYStMeUR1YlZTN1FqM2ZNQXZKd09Kcy9ZRzNTbTNaWTJEeUlVNTErdHVpNkZiRzhQZTgrZmZXNWt1amgzWGZLWXp4MG41Z1Z0dnhpQjlUbDZEZWxTSythcllvSDBuWjE3QjViVjhWNzkyN0xzMkxKV3dzZDg3T0packpXMDlvcjVjdTh4Q0J6aEdmTFV6WEc2ZEROUjNaeGE0dU91clhXM2ZwV0haRkttZkNYSGxWOHZWVWYyaXZ2aVRDRkIwUHlrcGNWRkZxRjdtZXEzc2FpeUhXNVhhM1RYRmJ2TTB6cDFHNSt5K05RUGNvNmMvMERwZE1IWkhRajdmQmVBaGdkY2VYVlFxc3ZGQ0RXTHAvVkM5MXpjSHoxWlBIbCtRVXprNko5VmxGaXAzMHAvSHA5bEtRT2VHY0JnSVBFV2xwT0lkRk0wUmRWVGRQM3VoTDVlNXZKMVZCYjBPN3BCNTZXTmJqYmxXdHVMRmZCenFUSWRxTzE1S0F4QVBzakNPdXRENE5HTmdxZFNpRzJtVjY2cHpXOE9yamYwWjY5eno2YkoyWUh0ZWxwMnltdytxcnhxQXh3UDRKRTVIZGc4ekphenNXQzl6eWRPMzAwcXVkVk9QT2J2dlRKcFBwbkgyNm5XNitwMTFUcmxWZUUvQXpvVzQwQjZQSmljUDQzSTBrT2ExOTBiUVJkdUs0VDFzcXJPcjlCQk9URU1IeStYN091OG1iTHRyY1RUdGVCemdIcGkwV0xTR1J3K3c5eTRmQmtSUWVpNGlqMGpNQjJ0aTRScWNteWxmVGxxcmpmZWhIRng5QnVUc2RyRmJwZCsxcVZOVTQ2TDg4TjBGVWc1WUpwV2VzSVlFNkRWR2NVNXRVMHlVeE5zMk1yTjl5cnBNT25qRGRPblhOK1FVNzhyVTAxTHAxdlRweDF2NUhkY1FjVk9iZDRjUVRZSitjQlh4SWo4QUErR0ZISUplTEVpSnJOUm1YVWpzYkVvNEwyYTJldVVnOHBHWXJkZlRVM3l6UzN2MmF4eVZCQ2FqWHBVRHRkRjBjOEhLQU5YQTFnQUV3MFNESUJad2Z3a3dNRUE2QXh5WEVWQUpnRTRpWE1CZHpBYVZxcTVNQ1NGMHZrZ3VpVlUzRjE4U0IvUEYrdU55Z0hNbklxaE81TUtmcXJmUG8wVTVVYWRIZkJtQURXUUdFZ2FnSjBUZ044QStNQUVNR2VKNFQ4b2NOUWx4MkRrQlRnVVpvSWxBK2hpdnc4eVVpb1lFY1EwYjF5U0VWQlV5VVU1N3JLWlVDbXRFb1hNcnRLV1Z4RDBoeDFuRmk4VUJmVU9teWRWVk9TNm84NmV0WGlwMGVzOHVPWjlGcUI2V1lJS1BhalU2V0h3UE84QXpvQWxVQVBvQTVVRHNoWkFVaUFINkNoWGdodnVHWWxJaGFsTUM4aFpEMkN0QVNCUXR5cVJ4YkhIU3NDbFFxUWRBOWhHQUVvY1A1eXNONG5RNnc4QkVRcFlLbEhvdzRwbFFxaTdFWkU2U1NUM1d5a1cycGdRMkpmbXFxYjZ5ekE4ZG5vbHQ3SXZiYzVWQlZRWTkzaFF3Q2J3SUJCYlFqY3lDWGhnUU91Q09nYXdDTlRBZnlSSS9oR1F0UURNUUovRVNCdUJMQnZHNVVsNVVGcU5oZ0RkQmd4R1F3NGpaVEcwa3JjVkNvRk5Ed0NuaTdERTJrZ2tNVnc3R2lxVkNTWkhCOFlsRTdMa3N2Y2VROXd3cU0yVDhhTzluWGVBSklBU0dBejRCbGdkSVQwSUVBTFNDZURPQStVREZRNFZ5T2NDeUVJQ0xoc0g0RzFCMnhxSDVZYXJYVW1RTmVEcmloS3BpRVJoRXRrc2YxNUg0VVFqUVJXR0RHOHhGc1NXVEFsQ0xnVUNKM3JPRjJrWkZRMXJweDA5cFdyMEJjUTBkVEEwMmR3NjF1anludDd2aGV3TlNHME5vR0lDYWdlQUFDSUduSllib293cEpIS1kyaDNod213VGNid2JVRDNCVVNPYzhSemNlU1NEaWc2SVZBbENpQnFRYlV4S2hVTUdsSlZNUlBEY0p3YmlBYU9PS3B3TjlsWG1qaHBFTUVVczRuWWpUbFQ3QWhCWDhLaEJWU2d1enplalRqeDkwRWZPOEMwQkdRZmNNRWdZYUFiTVZSVkZRd2Frak13RTBuVExHQkxSUE4zVGZMTERXWXJMbU45ZlRVMzBycXF1UGQ5QzlOYkxxMXV2Z1p3TThuVS9qQ0UyRFVJaWlTSU5MaFdRZXc1aFJBYUU4d1d1ekMrMkVzeXZ0M2UydDJ4dTc2ZTVYemZUYVdHcXNiejhRRUUva1VFNTQ3QXpCU0Vvc1lHd1NaR01veEZ5WTJybWpjdlF0RzAydmZaMEp0WlMwemM5em85MDkwVjV2dXY1SmxKcHlkOUtpeW9wYThFbUFlSXhIRXZKd3FlSGNucmxBMmFrMk1GeWdQUzZ5Uk4yTTV6TFhOTDdiWFZ6cDY3dkc3dm8zOUo5UHhQK1RDRk91bkoyWEhtK0hpREVxYUI0ellwZzhBc1NJMGtTVlhMY1lsTmszbW9HRlRlMDFOM056Yzl0emR4Nk51Nk54NzV5cHB6cXI1ZW1yWjNZUmQ0aFpGR0lVOEdTUWtIUVBsR0ZZZ2J2ZzBtSXJKd1lFYnB1NjdxTWVtNVhtMmwrYnUrdWU1YnJWZDZLcHpQSENUK3hQbjkyYzhBSlVGWWpRQW1nUDFJSGdMb1Y0OUZ3SGJFUkh6V0M0cGo0WE1tNndkZ1A4Y1N1WXJpMnRaWnBsU2tHNFd0cERFa2lIMmt0cnBNVWhJSDZ6SXFISTNHUmp6S0ZLbWpCVnJ2SXByVjVWd2JSUUt6OThIc0RlR001THpnVElXUU54SUg2Z0w5S2hLS29ieHc5R3hZK2pVY0krSkpBQ2dVdExTMDY3SHBJN2xqRTRNSmFVa2txcERJcUV0cElwdVZNbjhWdTlNUVhhZnl0cWM4REVRQVFSbUNwZ1hRUG9NR015WWRUVU53ZTlrTGtFNkthSkhKZXdMWVR3K2IzRFdVbWRzcHFWbGpja01sNXVTeGJFZ3hhVXlZbFV4T0RKcnJPREZtYkY0VW1hNXlYeWFSRDVhWjZnY3F5TzBkWlhqWUJFQnlPUlVOb0RweFJJeGlpVWRCT3NuSXRyUG51aDF5OWRRdXpQU3ROelRiVWU2TjlOdDkxNm5jZmpwL1BRUDNDWm1aa1hlSllTUkNNaGhIZ01vanVjblJyNGplb0xpOWFZVGpNSDlTMHZ1ZWxmdTUxejNYMDMxcSs2ZTlMQ2RtcStpWTV4L1hWNGdBbWdzd3ZqTUpDQXpKaDFPSlkzcGc3Vm5tdlpVM2ZYcXJsbDQ5TlJ1NTVYYmQrOU5XN2s3R3ZIQ2s4MUd2RFJCZXd1Q2tqa0pBY2pLVHFROUJvMVlNT203NVpycTYzUU1HcFdabmxLMXpqZHErcm85Tnpjd1NvSFo5UFl5bzdYckF2WnFLUWpscUllVFZFSkZvaXdlOVlaYnhua2RYajVldEttMXB1NTZkNmU1YnVtMnJWV3ZQUnVqODdzYTgrL1pxTzVMdmdHNkdxeU1ialk1SkJKVTBSYlhaUnRQUktKWmM5ZWRxellrWFhXdmJVOVBkRzU2N2prZTZiL1luMHNuM1o4dVFTNmMxenZEUkd3cHlEekRFS2tpanRvcTErV3Rrd1JVeTlTb0orWERKNWZwYTdybmwyN1o2NXVQWDdrRWFsTGp2UUlNMUxPMW5qU1hqdU1ZeXNJVktKRW1VR2lGRnFpeG9odXRHRnpDTDNMYzNjMWM2K2U2ZWpmVHlxL1MxT1pGMzFLYWo4ZDlDTkM0NXl5UkVBNm1UbEJwczBzakhndjFRNVJOM2NlYWxhK2FhNjhubStzNzY3OTJTZitUN2txcmZDWDg0NUJiVGN5SE1jNkVpVDBBeHJXaVlSTHlSakJxNXVicWwxNXVleStuSTlQVGZUYzNjM0h2U3VQdTJVc3U4L3M2Zm1zendnRUhuSW9FTGhKMEl3aElCeUxpNDQ0ajhZRFBMNXRaMURyQmJvbTgxc2J6VEMrazQ2MjducHUxWGZVY1B6anYyWFZzbjV6d2xBb2grRDRISVZBN3BoOUdNb21odTVxMUNJb1ZSd1V0Wlp5dXpsUExkWmh6WGROU3ROOWMzUE45M3B0cXNseVYzMGhUYkhYUThYd091RlpHY2N1SE5HR1dnRlliR25PYXVCdzN6S3Zra2wvTDhza205dWV2cjZQVGM5UFQzVDB2VE8xVTc2TFpJT3pzMU8rREFoeEd4UU1UU0FydzFrS1JoRkNub2w5YWsyVUd0M2s5VXMxSzA5WjUwOVBScVBSdjJISDYyWFY2QkJpVjBkZkx2SVFucFpGWkFNMVlTaG0xaGFpN21HVjduTFJ0UXU1ckRlK1h1T04xSGwrNDd2NVN1UDFGM3BSZW5OYnJ3YUFLZ0ZZRUhMZEZVSDlwcU00MkowSFhCbFo3MWpnZG81SFVhU0xNYlg1dTVVODNkMzFyM1BlVEhTZjk1Q2ttT2pyYnZEeEE0WVNjU3dhYncwUmxJcGZKSUl4Yzh2STVrdVhXOHdSWGR6anEyNTdyWlo3STV6VFBkelBSN3ZsTGs1OHZQMVVuL0hvS05pVmszVWpPa0dVWjhkUE1seTBvR2w1VzdjYnZMbldsbzlIcDZiamZSdU4rZkhCem91UytsSVVVczdVWGVCelJaQ0hBeXlYcEVzUG84RWFFRGF6VTNHVkZkNlNoMWhjM05KSkdsbWVTTlhOUnptbXJsbnYzWTVHdkVjbWdMenBkTytDK2hHb2E0cHdtUURaZ280UXVFOEUrSDBGTEVhSTR6QnNDTWd4STlpaUc0TUlGU0NGaVNaU3l5WkVvSW1DcWhDcEtGeUZRQ0ZTU1N4NTZqa2xra1hZb0Jja3Nsbk4yVkNTUzF5b2tTS1Y4UlRydmVUM0g0bitmR2xlVVdNcndBTEFHYWdDc0JQUkdWd0hMZ1NZQUpHQlhJYllSQ05nckZJZ3hrRi9Fc0RtQzZDRjRCdkZVcE02a054NmtISkNMQWh3SWZCRUkzRlB1T09zeTVTQ0VTUWtFNlV6ZGNxQjBtSkxLcEpKWnlZNEw1YlNXa3grcmpvWTU1QTBkMDNYdlBscVdjZ2h1eXZuZ29VRUlnZE1GTW5JNmdsMEVwaitGdkJqd2hZUGtrRE1ZS1FnWWVCNUhrUklpajd3MUROWkpKWmdRQ3cvbkRSemRtUml1UnlXa0tSaWNMckRhTnhra01TV05weEpndXZ4K0NaQkZLbWRNRHpQZ1hXdzJnamVsWnhBdThDNHdRS0dDQTlvZkJOWEVRRXN1UEluZVVNMFN4Y2h0MmJqd0owV1Yyc3YxeXVQRlhmRWM0bGRwZHBvbEhLNWljcEphWGxTa3RucHVaWWZDTzE4TFlJUk1qQjBhL0FsWUx5Ymx4UW5obEl5Q1dLMUYwTFduV2Fkam85VXd1NHVWWTMwYi9Vc2NuWGJucFhvY25NeDNrOFRRem1XSWhtSkZtb3hMemV0S0I1TmN4bEdvanRaczdyTjl0TlhVZVh0dS9kbTZsbEx2elZWczBnZDZjR2hKeHFiR2dmUjhXQXJ4M1lSTXRRUmpFakxubTZOcURVSzY4bG1YU2JyWEhaN2pDYmxjNnU3bnZTcHNkRS9McGQ2VkNUTTJkbmZGd05wYUVwTm5HYUFOSVlTUHVzcjlkRkMzbXlpQnJjN1BaYThXcjYrbUVPNitudWJ2MjhkNW1meEFsamxlR2lFb0ZpSk44aXZJcHFUakl3ZWJxR0VOakFhemNzdWwyc3RkeElNS25sclo1KzVLU2JQTDVlZS9NUU5uOTlBZjJvN1hodmxJZGlvazV3ZklxeHBmMjJ0d3hHQWx5S3p6VEJlcVhjVWJhdGU3M3A2NTVlZWpmZmgrblpGM29rMnBxakRQUWhxaEpScFNpdU9ROUJvRlFhazFoNjBIQ3JONVVQTVdyWGpzVkYzRzBpOXN2ZGQ5YThlNlBkeXJweExyYm5mSVpGVk82bGQ0ancwUjFGaUw4b1FYTVZaY1JTZXpjbTEybkp5MnUxek55N2xCdEZlN2FqdXpjczkzS2V1bHB1UGZHaitSVGZsVEJzZzU2SU9Jd0dVb2NUaDhMajhqRW9jaU1KV0dXcGZKckRvVDNLR1Z1ZExUVnpuTFQzZDA5emZLci9NbEsyZytVRk95TytFbERRRE9XSjVnU0NXanBJTDVIS1c0bVloQm9pcVdWRnp6TXVXYXRKeW5sNTdvcWVhNmJtM3pjV1c3bkpTdDRsK2t0T2lnZjRTQUYrRWtuS1NZcG5DYldpbFZyd1FvMUJxbzFFdXlzdDF6cTF4dVdYZGVSNks4MzBlTzdtYzJhaytmK2lDZm5KM2ZLZ1RzVFlnQXF4Mmdhcms0WlJVa011TU9VeWt1MStaMlhxbDducHJ1YmZMT0tybm5UY2U4L3VvSE9rLzhCZVFRUytjQVJLTEFKQkJkR1lCWENpZ01UQjg3Q1dGTTJSeldwM3B4ZVRDV2U2cnRhTnkwMDMzZGM5TnQzTXA1MXZmMjljcTN5T0IzTEtLWVZkUVlITTBNQzFFdnh1V3JzdldJc0ttRXRjdE4yMzAyemxUMlJ1N09ybnZsTTZOVG55UXFTK0dhaUk2RW9EQWhFb25hNTZHYnBDU0ZCaHRvMUhXNmRsZXA3ZTZxYnB0bVBYTnh2NVRhZlArZnlPUnJ5OFpGQWVaUGxCektNdTQxaGxNTElrOHJ0UHlQVDJhajUwOVRkWGR0SGJvM2Z5bWx6bTY5MlpPUnp5MGFJRVlCSmlhUjFUQyswK0hQZmFQaTltV1k4cjZ1MXRsdWxWcXFiNzV4MjU3Ym5UaVhQUkF1SUc3Q3VCWG1pS3dHb2tlZnpYc1E1Rno5NG5OUzZZUkwxKzZMTTNlejBidjBzVDdidDl6a0NWTEorYThYeEtFYmJ3WWhrVUltaWJCUTBocStmU09iVVc2THJ0bWE1MTIzaFdkK1RpclBkSjl0MWVVaEtEa0pJWVVoRVRJQmhKNjNLT1J6ajN6MEZqcG50Nk50U3NWcmpmdTlMbUVGemovamlHdVhoSXk2R294em15a2E3c0hyckY3MGxRWnR2b1p6ZmRYVFVPT3VtbzM3c2xMK24zT1B0NTVzR2Rab0w2eFNMVVRYTW1HUXQ3QTZsOG16MzlqcHVlNDNiWlh2bFhSdS9sK3U5TFU0Zm5mRDJDWWhuaThFa2tuR294ckVJVmZMU3p4c3NudlpSSXA2MldsNzFySXV0cnB0cFYzZHo1dWVudnAycGNsenZ4Q2ZtdklSSm5WQnBLeUtTZStFMjlTaVVLQ2lZUTZybmxvdmFycmxhYnVGTnVudTZiN28zTng2VUhuM3lmejdLUmNPRTBNWUx5YmxFU05ESWpuS0luVlpxc29VUmROODF6VTNsOWNZTFRmZDE5UFQwOVBlbHBYcnZQcG5Ua3VyeFZsTXRDdERNWGhuQ25HSjJDbmE2WVFIVXdJMU1rVkcxZHg3cHVOeTF6ZFhOenlwemZYNUJmazdPMStreWRxYTlPQ1UxakNDTVpEUGtZNGx4T3Vta0JzUjN6QXBjMHMyeXN5WUxHL1J2cWhhdm8zUFQzZlNHbTB1L0tlcWpTWDJMRlM1bG9vSUZDTkZiU1ovVzlNdTFMS3o1YXlueTd1N3BkTjFPNU4zTjJyNzVwMHVqbngzTW5QSHNqREtQQm1pRWswTXFaYzFZWnVZSmpBaVR0WHV0dzZlamQ1UFpQWk56ZDlmS3U5enNiYzc0T1A3R3ZrYkNNSlo2RWhMcm9rV24zNVRMNUhQcWdhVGQ3Tnl6eTFYZDlGOVQwZW5wNVgzNGZjcVMvS0NrSG1JVGdQd3BrNlE4ckdQaU1HWjIyODEzRkVzeWJyVERPbG00M2MzVGR1bm84MjdQcXMzSXVkOUlVMnBZdXJ4TERPUkEwRkRTTXdGUVJJbzRQcGpWSE9ycXQvVHUzTE1iYTZiM2N1TE1idjBFMVhvSlBvR3orK2JBYjBTWWVyQmFab1NJeW1ZTmRlaVFFNWRETzFUdWZOVFVMNVYyRm0xZC9xVit1blAzRUcrWEF4UXBBVzg1enNJeUZlMHFpMkVSUVJkTnc2NXlHOUIxdDNjOVZSNmVqMDhyN3ZUSDFidmw4MXM1THZDU2NPS01jMUJEWkorR2krcHBxN05TNXErZStjalhMTTMwYjJibUU5MDNjOGRkN2VOcGQ4L21Uc2N6eVV1VFJZYll4bUtNcEIvanR2U1hXTXk1ZHc3UVJ3VmROTEdDODkzZFVKdHV6cTU3dnlMbTg4L0hXNmp1ZUc0Q05SR1JiaFdrUWV4R0ZDYWh1cEI1R0t4NElraUlqd05JY3hHZlhUY3JLQ084ZmpkSTBjcnhoZlh5MXROVGM5ZHJkZHowNndmckc5OUFHYVpwbzY1ODFPSzlqWGd3Z0ZJaldOTFF5Q3BDM2hCSTBHVXBsdWtkU1FFMkRaS1FmeFV0bFZWS1RjZW1Sc0pITjVHK01XbW8zSGxWM2ZhWjVpcXZRREZWYk9wbUQybmVKZ0hXQVRVTkpnbkx1R3dIMUJMcHRTaW1ISEJURDhYSlJIVUxuWEVreUdtV1o1dkZROXpjOXgxYzl5V0VFdVRqYnZQbHlPblJ5dDN3bEFFWmhMQmxRM29kb1ZRSnlKWmhIejloMEJyS1JBSTNzS3E0NFJqNjBMZzM3bzFEcHZwYVg2Ym01WHVQZlVuOHljZ24vQmVxblJ0SFFMVXp4aURYS0FTZ2g4cEN2QW1ZVVFjTW1wYWJvall1WEgwT2NVVEN5UHEyMlVsa2pUZ2JadFp2cjVKYTNMeXNxdFZkcFUxSDhqVC9vZzdUcFM3MDBlMi93cmdQdURnZ3Vnd29aSDRBckFKZUpCazFOSUlrVmNVaGFEMGI2Ylc2RTQ5YmlXTnd0a25kTnFydnB1YitkVDdrWFA5S09DTkE2S1pRVnN3c3U4MENJZ2RBTkFLd1p2WkVQRUxIcEt2V09vb2hzQnZEMlUxMnJyWnFlV2s0U0NjNjU2YW5wdWV2cHZXN3ZybTV3K3hqcGRMdmswSWgvSnlZWm1IYnZIa0ZVZ2d3U0Rub3lSUVFjUFJzaG1CcXRwUURqV01TTjJ6czMxY1VtaEZHZXVOenMzRXg0OHR2cm9nd2QrazVIT1M1MHdDUDk5U0FYRUJHendrRXBobkJtUXVJN09USXVSV3hiUmkrWWRibzNXMmJqNjFQZGF1NDM5VWxuWTZDMWE5S1RpRXFxczgyQlh3Tjkwb29GSUc0QytRa2hKcXRCWnVMY041RmFqWjZhbkZIU056VnIzTzlxdm05bTU2NXY1c2NGUi9hK1RXMVdvdTlFQVhtQjhBOFNDNmt3Q1pRZnlrU09waGt2QzRpYlVQZlI1WTNMY3FjNVYzcFMyRlJ5WVY4bXRxMzc2Y0F1OEJOOG9rek1Bb1FQMlI3Y2c2WUlsbWhMaXdOb09xRlQwRnJzNEpWOXNjYnZwczc3NVJKblpKK2MvR2tibTlyWGVaQUZ2Z2c0bklsaUdIcWxFVkdzY3pSRktmQzljVHlRZHJ1UGFxYVhDOEpPUE1sSmNlbnJWWEhwUXAxVHZQamlzbGk2YzA5Y1FPK0VpQXdzSFBIZDk2WWhlQkNCTDJ4MGxxaGtXZzJqMk5LeGUrTk9udGVaY1FEUFhjY2J1NTVYZDk4b0V5cmZQazBocW5RbDNndUFKdUJxaTlHbEtRYm9LVURmR0lVOEgyOWVHbEFmaVRsUDdwdDhXUi9HNGJsMW91N1o3dVUyM1h6VTRsanRlNHpReWZsS2c2dkxVQTdCVzdXTnhZaFlUY2Z5azBza05rSThLVThPbFFOTEt5dzdEVWpYbnU3dVNkYlRpcGZTenk3VnRKRGRlN25vOXMwNkxxOC9PSlhUbTVPYjRXNFp3K2pVRjZhTUJoRFNKNXNSeXFrT0JwS0NoZzJOaG90U1NWSzZneEtoZ2tLTnNwT1p4U3UwMFl0WVlOUnRibWwybTJmZk5Uc2QrRTdOUzZsV2VEMGdoOEFCb29tR1FZRXlJaUREam1hTlZCRXBHVWRuanlOZFgxOVhXNHlPREpUM1I2Ym0rc3FYZHpmUlc2ZW5sNVRWaCtOTjUra1JFbGJ5dHJ3c2dJMlVIS0poa0p5RjdEVUtCcWltRWw2d2dhTlNTVG1ZT3lxbGFXaVJ5bGUyanBwcWJ1NWZIbGR6U2VVQ1dNSFJkK2pDNU5GSzlPZTU0dGdRYUVMaE14bk5wRk9KNDRGZFF4dmxoZ2VRMktzcUx1dXBxNWE2U1BQZGR6bXg3cHU0OTdzZHFXY2ZIUFRvek1YcWJyd3JRUzFvanN5TUlxeEpNSkRlMktSUW9WS09VaW5GR3Q5Y21ETnI3Y2VuTGpkOStabnBTQ2xuSTc0UFF1T0p1S2hra0RFZk5TRWlRUjJVMDQrVnF1YTZOVjBlVjIzY2I4L0xwZE9mQjI1R2ovaXpHdWxsOVFJeUlvdEZUKzZUVmxOMENnd3p6NTNsRnl6MDhzdGRVV2J1YjlWbmt3L2sxNDNDZ0tJL1VaazRoRkZGVEhLT2lVV1YrNllUREp2clNHRE0zblczVVdtZXN3VjJkV2xKanF6MFNDZGprNzVHQ2locGtkZUZOR0dXVFdWb0YyaXBhUUxTT3JXeS9aNTJ0UjdwdmxhOXhYbTVxTitmSm1ONVh5TDFPUHh6d3dxY0d5QTk0Q1ZCeUIvd0NuUkVBblFVSUYrTGx6YVJwSGtRZ3A4UnlrTE5tNnFlTVJOalVrNW9leGJtOTljcnl1TmhrY2N2ekswbkVwRjQ5T21oOCs2Y2g4M0tWMDU0UmlBL29udlJpckRsQUJDQ2QwSDRiTHNOTGtnSUhDQmlVa09GS1IvYk5XeUpzVU04MFkzYmUyc2JrQWNGVHB0MTlKSlNkYzNMQnRSOUxoKzY5QUk3SnFNSTZFZTU0QlZJRnBCQ0FGN0N6NFE4RlBBblVmaEFCeXBCREYxeDlIdG81NFpTK085WkhKSkpuck1pVVI3anRycERKSVlyM2FxL1lZVEo5ZHJFRldmU0J4OC9KOTNnTnBCUlFWQUR1Qm1tOWhNUnNNUldDdFhmQ1hsUWUzMlVPcUZOdVpwZHU2UE9sbjlnOTdzYzc4YzdHM2VBNEFGbGkyQjVVSlNNRVlXRTNSR0NPWUlFUzZSbkYwaGMrbTNVc3V2TjNOSFYzZnc2VTFiVTRlMThuOFZaNFFjQ3NnL3crU2ExSXBoN04wejFFSUp0bE16eU4yenJlMDN6ZWVPREU2NUJoN2lwMGE5eCthYnp3ZlFCdm83S0U3U2cwT2VVRnJrekdRbGcxbmVxMWRuWFo0NFEyVUZKa0Vkb3JiTmZVY3lUKytDVXdUc0ZjSElkRGMwTFJUbWprRENGYVhxTmhzYWdxZEhaNXQzamdtbWsyUWRrWFFseDVYbjBzNjV6MWRlSDBDWmlrYUd1NlpzczdqRTFTZlh3aE5Ucm0rMnB2WTNwMTN3U3p0T1FKNm5aMXZBeGxmVVhaR3ZCNEJEQ215YWFvUU1kczZqY2plblVOVmEwMWNkbURwNXZEdnZoVzBscW5xcXFhZE1DQjMwRzFpQ01OYnpaM3pjSDVEMVJHcnBZTXlNajYyTWxpTE83czBxZEdwY1dPOU5rS3l0aE4xcXJQY2xGN0c2bnM4U1lXNDNDc0gzMGxOOVR3VHcxdEd1K3BwL0tzanZSejlJT1VsaWxZbk5PcXJ6NmFjYnFvdU85OVNQSjhVMVNSRTZpbUdLeWRsMnNRUnFEck5iZHpmSzdudnh6M1ZMMHNjMDZ5TmI4N3N3bE03U3k3d3J4U1RtZ1pIQ1BQd2Vnb2hNYkpFeWtHTzI1cDBkblZmZldQRkpXb0hhMjg2ZExwckN4cnZTNXBCeUtXbTk4Y3o1QkhGT2hZSnBOTDNLRWJFTXFZS01tRkhXM0hQSm1PM2JsTkM5bThER2JYeWYybncya0hWTytIcU1tRG1UcFF2Z2F4ZmVaUFBVTlB0eXZXNzI3M3hTVTVOQ2RUWTZuSGZkVGl3NzBPMGdyWTZlVk4xdWVPcGlIdVJqU3VwNW9vTGtHT3lvUE1EZG5abzYzcnllMzBwOTFINXljckR0MDloWGQ1L0VHenAvYTJPbmRPOFNSVDZrcUZQUE5JOXFwcGlKRlVRZTQ4cU45OGt5VXVUbE1mTDNLM3VLN3ZJNGZkUVFKb0daUGduVFBpK3BwRTBpcWNseXQwM3p2ZENUK3ltZDNuMER0cmFsOHVPNmpwWTN5RVVZaTl1bzFqU1dFckV3MWxlRU9qcXZkalpZdjNwNG40b0VFY080ZmlGRHVTZnlHbm0zTHZXVWxCbmFsRDB2Z1haTzR4VnVjN0lLN21uVGNlT3V2K1A3RFM2Qi9acVhUcDd2b1lvTjZrMU42MjQ3ZVZ0OFlRKzFGbjlNNEpxUnI0bm1DYVdPeWNYYWUzMnoydHVydlFOd2dseXBxNFJ6anErY3EzMHlXbklYeHlQT2JmT0t0djJoQzJGaHhZVFlUazFhM1c4aW5ybnFsOFg4ajZQVjJLKzlEdUpqVE5wdWxXUmMzaDIvVmVxOTlNNCtmUk9yRzhESFo1R0FiWktoR29YVU5KMzliT1hTQlEzQkhON09WMDYzZWhqcjlBbG1CQzVGQnZYNmV1L1VzMUI4S2JyZkVnR0FDUU5VR1NYazFTOUJ6NFNteGl1bTM3Qlh6NDlQVmgzZjZsZHFLbndiMXZJdUsrMThwWmNuMkNCdW0zZWpCTWpSRFV2WVJpbmtjVUJiQzZsRkxFd1lUT1ZaT3QzazZkY3R4MzErbm1Fc1IyTzFVdVBOTEdIcnZSSm40L1p5THdqelRweDNua3NJTkZhZmxGaVFWWk9Sb0s2WFU5T3owWEhWN2ZLcVBPdjlDcnBjbHgrdGpYbno5S3RkTzU0bmdVQ0g0SlhpSWhSRkV6cFJ2Uk5LZ3hMM1kvRmRiODZsRjZOVkhNeHZUdDN5ZnJZcFozd2FJRldoWlEwU2F1Z0lKVU5YNmhoYUpGU0ZsdXIzVzloTHZQcDlmRStxeW0zbmJzK1hTbHh4VzN3Ym9Bd3NRY1M1TklpUXpEK0pxZ1NUOXVtUzhvZEpzWUtJVGNjUnRMdFJ2WjVYMDM2RHBjbjJkVFJlcTQ2cUN0M24yMEV1UDFPNnFlZFpYaWpBYjREV0FtMGlJNUVIR3dNOFNad1p2cDdBOGttcU1PbnBwdnVYblpXeHZWVnpmdk16OHdobVUzWHBVRHRxanFIZ1RFQmZZUmlBcWtDM2hwQXZzQ2lRVkFHQkJ2d2dBeWUxSXdDMEJxQkVSOURtSHBvam5CZ3lrS1pKSHNqRWs0V01TcVNUa3hhYU1Ua3hPVWh3WW5CaTAwWXFWK1hhNjVRamdtZmtwa08vU1VtUDEwdjNLTzNlQXBrQkNnRTlLUnNEVEE2UUdkZzRJVUlhQXVST2lKWW9nckVEOUJRQnBFNFBwdWthbzNNT0tJdWdjdXpneER3cFNrTUdUQll4S2dVOGJRN1drbkpKS3B5U3gvSDdtVGpyYWZPdVBtbEh0QWJkanYwMTdCZWx5Q1h6cXZRTnZyd0lrQ0dncG9SeUc4Wmdub0FCVUlaR2dGQ0VnNFlsU0gySVlOQXRsSWdaVUpKd2NiSGpFUXNUSTgwWUQrSjg0NW51V2t4SDRhaVZMWFgwbVVuQzhXdWVLUkJyNXhETDllZFY2YXRoazZ4T3pERmUrRjlCb0NXQ1VYaStSaFZNeWo2MUt6UkhOVis1R2I3QmFPeVlMTkxYT1gwWHRydGR5ODNQVHl1NXFHdWJkNHBFVkpuVFdlVTBndGduaFB2QjZITFJ5RXNqbXVSanFSNFMvaTR2bnA2bVRoWmVXbVZyWnVFOTByUzBZWDF6MFY1NmJrL3Jzamp2Mm9JVzl6d0liQ0ZBencvaDRHTVl6VWN5SnFBVkVIb3pBbkRtVG4yNkdvMzluTXZhNmxWMnFXNXZwMXgxZndReTUzb09jbUpqblR2MmtYRDNHUjVnakxxSE5FMDdsQ05oRWdYdEpHcGYwdmFycDdyeHFNSFhHNXRxUFRhcnZiclBtcFN4cnhYaWFEUWdNNVBXSDBTb3hFMUdhOHRKZ1JuakEvYXE3bXBSMnNwamZjekc2NmJ6bzNOcTcrY2prYXowdElKcVhKcThMS0tFUzVDSXFoRXlKQXdra29uODBzWEdxT1VTNUdScW9keTAzMDl6ZVhmWHgxYzM5YnM1Nlo1K1hTZmMzWGhZVVkxR05Dc0djeVhHS2pScEJjdlozcGFnNW5rY3RVMUs3WFh5ODNOejAydjF5dXJ2NnlUOGM5Tk5WR3E4SmNFbUk0cVJWa1BPRDFITXpOaEpJNE1tN1N6MXpBdldaN1pyZVJ6VjgwYjh6YmR5ejBianpLcnZodU5wWmQ3M1NsMXZmQW9NRENpNEUzZ0pVNEtVSUVIc29VaTdCb0JyTU5FeXBIUW9tREpRRUpEckpDMUxyZGZjekp3VXlvS08zTG1KeE55Y2RJb0pNV3BzeU1oUUhITXNQeXNuVmVlTUJOY3hVb3R5TUhsYktJR3ZBZHFCOE5FYkFURWJEeUd1TkN3cUJkQlI2S29pSW5wZXUweWJEc0pxbGtaU0VWRS90RWRmbXVTSkNPdndpcEx0bzNKQTFFbmpFUkxwdFNjRlMvUkpwb21IZWVibzVGSmM2Z2RHQ0tPMFdPY1dOUGQ4WnlNRlplSmlDaXlpblNKTnVkNXBUVjd6NHc2ZTFiamZydHBkcVBUZVRkeXV0ZHE3L0hINXh0MzBRY2xBcnIxSlBHQVM1ZU80cDFHcmg2cnJJdFJRWVhMdFdMNlhtNWRzODFhOXlwNjNiTnI5TjlHOXU1Ni9vL0tXT0gvUzVOTzFLZmpua29mQWt4UkxoZlFDOFVpa3BJcUExZTgzZ3VrZzFVdm00cjMwV2JhYzFGMDl6Szg5TjNjM056YzkrSDlkRks3eUNueks4Y3hnT0dsN1JHSnFSQ2k4WXlqWnNib21EWjZRM0xqQnQwMHpiTTgxYXFIUlh1KzY3amJmZklWWjJaSGZuRTJ1aWYzemtYeUtMekkxQ25KNVJSbTlzcnFFU2t2ZTF2U290bTQyMU5hemU5VTgvcHU1dVBIZlg5T1N4eHp2MlQ4YXpOOHhDWWxwY3dSekVYeUl5WGtabHBrMzB0WVVMOWVvNFU1bTdsR3BkM0x6Mnp0emE4OU56emZYSHZTN2lXT1o3a0ZINHU4VlFUWVlTRWZXVUJvb2hLa1FocjNEZGR5MXdVUFdVTXp6WExzMjZOdWxtN1ZYTjlIbGZUMG45eHQyL3FFK3FyeU9zTVJGSEprU0E3Q29TV2hUb2JmaGNNQ2QzTTIrWFN0UFhWdG1EZlZHNTVWMzBmZGptM2ZTVjA1TmI0YW9IRFhHQTBZTjBiU01wSnljL2lLUlVCYkNubXFOZWJ2WlhmQ04zTFVhajNYSHUvZG5JdTl5QnpvNTRWOE5sQUpnWGhmTjNrSjd4Z0wxdWd2ZTZ6dkkyZWZOYlV3NW5yMitucWNyNmU3NmJkOEVFMUZMNEZwaG5XSUlGZktBNUxiWlJnSkdlSXF6M00xVDJHZWJVd2pqYTNScWJWOTEzY2V2MHBNU3puNmdsTEZLcTN4TEIwd0hRVkpENTlRTWlnSkF1azFoSkVSTkxtTzNONVVMVTB0R3lsMTIzYzhxN2NqM2VsMVhub0h6dXE2OUFHZW9ZQkpIREUwc2JFNFpVTjJ1c2JHQmJEWmcxT3g3c1pjdFBVczNjYm51Nk9xN3VQUFB4MTJmT2E3WmRqYnZEVklKSkVnSkVoRVF6TkhrU1hvb2F2TFd6bkt0akNQV3RkWnpsZmVtbmQyY2Q5SnFtcGRuZ1JBSjRYeEFSZldEMUQ2WE15NE5HNE1jTWk4MTB3SGpGdWw4czkwM2Mya25vMnF2bW03dU56M1R1WTdQRjZYSm5SM3gxSiszTDNDK2hTUEdDK2VpbEUrSzY1Y3RiNXUxclhYcTZqMHZidWJqYzFHNDM4dWRKLzBzdWwzaU9rbTJRMzhpVGFib1VWY2dlc01CT3ZxZlBRYnpacTV1ZGp6ZDgzZCtmY2ZTNUZMNStzZEhQRHlXTnc4a3FIVTR5eWdsNktZYkJZMVc1K1lkWFBIZXowZXY4cEE1dDIvZ1pFNTRlSVNnanNjb2dnTlRWNmhtWHZSMUtPMXB2VHZ0dFYzUjByMzUvSlBxcStOT3p4QVEzSUVRTXg2WWN6Q1I2ZkxHeWlXV2wrdEk1ZDB3N2IyNm51NjVwemQyM3lxL2RwL2NWMTZaeXJOam5qYlloQUFCWTlHSVc4R0xGaUZwRGZCNkM5bFkzWEZlTlJ1VWhMRk1aWVN6TExiSzhXZDY5bXVtK20xK09yK1FxejAxVFcvV0V3WHNtRDl4L2hTUU1xVGlPSWd3QnBCaGhySXB0Qk1qdEdzRDlqY1JqRmNXREMwMnV1czBMUWJyYVhKUTlMZGQ5UE5HVWtvNE4xSnZ4d2M4Vk9pdjJ2T3RpN3lFT0xtei9PUEllQndORzBRd0prb0QzQ1poK0J1Q0ZoeUQ0TVR6RTVTU2drZHhPSEZLWDkwa2tlU1FwTUxPQnRPSmFNR2VYTWlvU0Y1NVNrczVNVW5McnJuTTdGQnVPbmZta0NhcFNvTnFEd2ovWEhtK0dKQUIyRXlJRUZZSFVXd0huZ3NFeUVEUnJLVkk3QjJpMUhsbDQxcVh5ektqdUZFUGMzTnJkZHl6eTVKSHM0YVhhc3dqWTl5Y0tVaGxLTHRxSi9mVUx1M0pUWEd0VjNwWXJ3dVkzZzlZUzQ1S0FHK0VBRTJjRGNQQVNsbUF4aXNKQThqR3NTRGN2TmwrbGRwR3BNR3A1cVZ1aTdPbnJtMjc2K3YwQ1Y4NW1UamVmQWdreXNrL3JwcnlJREJpcERSczNLZGp4S1BXTGdvWUxpZU84T0l4aEdweUUydGR6ZXh1bFZ6YzhyNmUvWUlHM09yejlZUVp4SzdQMFNpWVdJZmRLS0Q0MU9hSjFIV29XWEkrODhpclFuTFhhbC9YTjI2N2Uvb3RkemZOOHE2ZHljYlMvT09nbWIzMFlUVVpoeExTaWtPQ0dKTm9wakxGaUJxOU16eGd5WHRQZFV0RzZPYnU1YTY1NjV1ZTZlNVUxYmR6T3k0N2Q1OUFmYmR2NlNoV0RDWGFuREs0Wno2MEhkQWlvYUl4c3l6eSt2dGZadWpCWm03aXpMbStaajNYUFhkL2hNcHQzem1INjhuRFdQalFMWWlURGlVV2hVcklHTHFVYmk5OHVYNmRuYnFXZFNYM2R5dnJ2bzNIdVZkOHBhVk8vWGJqbGVlVFFOOElHSkF1RldUd2twUFEyTCtzcnRMRnlpNUtSc29mczgvbEY5VTJ0Y3NzdDh0SHB2M09wVm40Z1RTZjNLOFRZd2xBcEhQSWg5STZoa1ZhaGpySTVjcFlYcUNpK3llbC9TMVZyTHplMnZOM2M5MXFyYjZOcFpkTHBkWGk5V0pkaW1kNGF3bXpFTXBNaUl0Q1dZTHAxZnBVYnBQV3Q2ejdmVDhwcnBaN3U3dWJ1YnM2NzAySmZRUG8vRS9OZVV3WHFqTmRtUml4WjZXbnZmYzgrTnJzWFVjNjI3N25IVFViNi9vbUswdjdVNTRMbUpramhXajl3UWx5N0toR2liVXZOYk56WTE1NnZ1Njc2N21vOUd6cnZTNmxyUElKOC82TVN3YUl4c0d6NVRseU5ZMmhQTWxwdHNtcUtIUmRjVnJkRzU2TG85MDlMUHQ0ZitUNkJ6ZWVtQ1ZnYnNZUXpUaUZDU1JwRmh4ZERXWllMV2Vzbllidm5KeGRWZDNMcXFldGM3djNibU41ODBnbDJSZDVEQWhnaEp3ODBRUEdRNXFqVFl3MmUxcVViVUg3RzU3Ym02dDA5TkZpL2xOamJ2UG9GVytKTUpmdGd0a0dCVGwyb21SeFVRNWhBcytVU0s0Vk96a3Y2ZW50N25UVWV2bTd1UGVsUytmZkYwVXZpckV1WGluWlJDK2hKdzVZV3JKcGd3alJOY3RTaDE5MGJoM1hOMVBkRzQzMDhkWEh2ZGt1L2FQNUYwNTRqZzE3WVJrUVV4T0Vqc1VhamFjYjZvTDNRUjIzY0pmTDQ5Tnhoc2JqZlJkN3ZxbkpYUnp4eFNES1pGNmN6UUZ5S2lFUkUwM3JGTDYxclQ0TjMyU3VWK2p6Yi9sMkpmay9WTzgrUkRCUm92OGJESnFIcFpsaDl0SStwRXZybTY1YTFUdU9yK1QvNWl0Szcya2FJaHFWREhESTBuUUo0VTlHcGNpcDY4NVBYRzd1UFR6TTlDUFQzVzNmbjZuSGVxendyZ3pxQ0NPWTVORTgyVXBWbGxDUFMzaWlqNUZkcjgxSEp1RnhXbmxwZnFxNTZlNlBSNk44N00vVDhjOTVpWEU0M3NpSHpkbGpsdWV3eHFuV1lHOHJUbmN0R0hWTjh0MXQzZDhxaEZyeit5ZjlWa3U4MkdZdkZrUkNnUmFRZEEzUlZQT0w2UnZ0bzFYYnVtNjY1NmJiNjc3cmp6ZHpiZlRtL0tVL3JwUHU4VkFUa29JUkhab1NZbWxwYnJGMGhaWFpXdGMzMjdqM1M2Vis2ZTZPVDA4MHJkZjBtUHRuL3g2dXZEMkJmQjhRTEdveHAyaWh5eEM2S041ZW9sNXV0YzFITDdyMk56MFZ1NlBOOU9lZlBxei82OU5Mc2M3d2xJMkdpMTZ0ejJlSjdYSTBYY2pOWjVtN3VkNjNUVTMwclQydDlOOTBlK3BwVWwzM29KUCtvRGRDc2hua1ExQ3NqZ2tleGFoRkNrY05LVXNzbzV1TzFGYmJXbmVtbFhYUFRmVHNiNzVUT2Nsalh5ZlMxNWlTeUtQTXAyU2xob3VVWHd4R3piQXgyenprYmZWUEt1cU56UjdsMmRYS1dFNDZjVlo5SHordHBXOTgxRzRYd3luR2d2b3BScUtmcTFZYk5JNFFhcFp2bzFQVGEwYm9zZFBOMzhreFhuNVRuUmQ0d0F1NDlDVUlScXNNT3hJcjBlb3RaZXpNTlpmQ1BUenU3cDVic3RVdkhwdWFtL2NudysyZjgrNkZSZFhoSUFuQTVDclFJUlVGRVlSbGFUYk1Kb290UDVGekRtWnFwdWJxZTd1dFZlYzMwYmI2ZWplSmt2dUlXSlk2bDhUSWRZV2dvajBSZ3pnbEFaNVJLaFVwTnNDS01vekVnb214UWhOUnVObzBsemM3MndsMDNQVDBYZmlkWG4waVRac3VwMGM4YndKNURBaUJtQm0wSVpBYXduWkg1Rkphem90Rk0wTENtbHIzb0wwSnRKYlJTU05ka1Y1NHAya1NTMXMzM1hIdXVWQittM1o5Qm1HYVowVTBYbmUrSElDS3diY0ptbU1CVGxRTThQOElPSFdtVERsQ1lmTm9saWIzcHVYTkdFa2trbTk5TnkwM2FtUi9udVhyb3BGdTY1WEpuWnRTNm8xb1kxd0czdWpyeGZ0N2V4N3hJQ1lHWUdoSkNKQ0VtRW1ESkFSa1NrU1ExWXR5TXVEY0RsSGtwRWVHdzdGbHprcDhTaDdIOWUxZHljRlZyb3IzMDkwcmZrNmxpbDJjejZvK2lkR3BxM0h0ZVBvS0RBOW9hMnNscklQZVV3dWc2bzZoS3lJTjRsRk0ySS9LYXpaZ3UwYmxXUk8yWWJGOXhhTUxLaS9UMGI3dm10L1RTNmJ5RTc0c3dqYVJrRjQwTlE1Z3BSaFF4dVJjdkp1SU9INHlPdkl1VlBLZHJqY3VOM0xXM1Z5dWNHNXhjODMwOVBYTm4wRXV5T2ZwT2x6YjBYaXpCVmdLTkQzTjNEQU00V1VraExsN1RWeGd5SENHK05vMkhLTzl1YjdKSDZ6Rm9xbTgyN0lSNWs1bmxYUjd2UGk4OVZucGc4alJMa3VySm84ZDRQYUYzQzlFQXd3RmFGc0VCQmNSWms2RDFCRU40Q3RGcVZCMWFOdDZxcGE3bmpmcjV1cnZzbTQzZHV0dS9TdnFtM2VuWVlUUnpXTjhLMHNPcVFtR0FxV1hGQWRVYTg2bnhPeWdaNTZmbW00VjNkYzN6cmJ5Y2pkOVo3MC9IYWlsOGprV2VHa1lDY3dpV1lhUm1zNG9ZbERVdnFETGJ1bTZidU43TnFyYmY2clBWVk9lSzVaY2NrQnJ5Q2lLdzh1Mm40MUpzMUNsRWFiMkUxMXpYVGo5bTdudWJ0VmZuOHl2eEw1bUpNaXFDTEpSSGNZRXBSZ1JDMlgydnZRUnJUZE95UFhmZFBTdGRIWFI2YW5vMzhwc2RGM3hkTHB6Zk1nMGlpYkVjdVVrY2pyRTFaYlpwNk5mVmtjN1hSdDg4ejBzOVhUYXU0OXlydTlLbHJ6NStMcHluZWhHcFEwR2JTSXpzMVJxRFMzcU5XM0hzY2lmT1RXekRGbFRyVmNlVjlEaE5ONTUrVXFyUEhNWkNrTVlqbHd5UWtpNW5DdDZYMDB3N3BSdm5wMVU3bHJuTjZYY3F1YmpmdUhCQWwrY2srM1g2U3haS0J6R0dwUmlSVHdoa3VZUUU4WTQxMTFEZW51WDZlbTQzV3ozWGFycjZlamY3TkpmMGc3aVgyQTNDNGNsS0xqVWdrZEUrNnVVVnJ6Ym1MbCt5MDJ6YTBlanAxM1dyNi9kT0g0MDc4SU1wZDhNd0YxdzRMNE1JeGZmYUFuVDFKbkxSdFJaMUNldm84cnZwdFYyZWxkTlo4MU9POEQ1aDNsRUMxd3ZRbGpJVnlRM05SUERZeElnWVd2bjAxQjV1U1RHQzByalZhbVRBNGN1MFB4VVpNUnRTTmN1MHV1cEtkeTFHNzdwVGE2VDg1Nk5Gc0J3cDJ0dnB2UEZvTFFOVUo0REFqMklXSUlpUnBoTEVzdWdVeDNNQ1BLNUlzZURsVDBTT05nMDJ0SzZ4aHhVS1UyWkdLeGpjOFpFbGRvNFhNZVNFbHE1YzZkU3k1Mzd0QzgvVTJxcThQRUU1Z1hRS1FFc0N5RU9CY0FMYkZxRzJIMkg2UENrZURaRUc0UHBTR2tqSklLWWJOa2NqcERIclNKREZlNXBJdVIxMXJYWFhmZDNjMzgwZmJkTHZrVXJDWGRnZmhMcHp3MlFWaUVVRE9RMlVaUkJLSTBEK3dUb1FrMWVMY040YWlvUExVdXFyalkrYWtXS3E4YXFibnJPTDZlajE4cTZaUVY5QjVHaDl0TEhmRGFCWFJrcGRZWm9RR0ZLRFpSSnF1RjJUeFBpeU9ERWQxTE56Y1RkU3NMZVJhejJYSHU1SVpOR01lNk56YmR6TDFkWjlCNTBsYlR2UGFJSFBEWkFiK0ZTRldHU1JIMElhSDZER3FWQmEweXlZQzJFb1VTOFM2TG05dGRkU1NKRnFzMTNOclR5bGNrcnI5MDMzVGM4MWMwbFM0Mjd5Q1RTRWxWUW12UWhyQ2FBS1BTT05KRGJGQUJlSmtPaGlpVUc1Y2pjU1IrYVhHbGJsbnhhYUpQSEpURzI3bGExNVp0b2Ftclg2YnZsMXplUFpxVnQwNzhvS0hBL095Z3Jwend0NENvZ2NRRXM5eWtTd2tRdUFkNDlNSm9JSHNoc0ZQaGFpZE1DNllRWm9qbUFteDhONU43ajAzY3ROQzVucHUraXYzZDlKMHg5dkk1NU1YUnBvcGFuVVdsWjNoWmdLQ0M1aG5JQnpIUWF4WGtvTDdLTEwwdldKZThNcHZkYzdxV1hzYkNwWmdjRlJUYzNQZFpqSnd2YzhxNVZjcG5iK2w3QitjU29NbGp3dVFuQzRPd1pCOEQvQk1XbUFUY2toeEVab29pMEZnTG1DUU9FeURjTGtqbzl4VUhrcThrU0pJN1VGMGkvUmFPRk9XWW1OdEhEVnI5RSs1MDVPeGQ2Visxc1NZL0p6d01sQU50RGRFMk1BOEJQQUpoRTRSd2ZFZlMySEpGQVlVUXdhVkRBM2pPeXR6cHBTS0lVUnc2K0g3Wnk5bXg2RnphNUpaWFpiRy9wdXplVTVxZlFUa29tOS9LY2xpZmwzaERRUDRGMkF1d0xZS3NSUUZFQW1VRXJDN0MybEtPc2xNTFNMRm9xRksxN2ZOTEVjajJ6MG1JMUdTOXk5WklaR1M2UklZTDNkMnZOMzZaTW1IRFp4TnM3K1VmVkpZdWQ0WDhJYkV5RERpUmFETkRhWFhHU1h2MnRaUmJXc3B6clo3NFFsNzVUSDZiZDg1SEpQdThGRGdwTXFGSmtkS2dPeHJCeWFZTVR0TXprNDNqZFQyZXhycDJjZlgwMmZqdWVFTGdOd0hZNFRDb1Rwd2VEVTFNYnlwUjNiV3VWUDdXNzlNbWxOT1p2eTZhYmQ0UU1CYWhQTm1SejNpYXduUVFZaS9JZE5XNk5OMWFweFg1dlAyQ0NqOHV6NVFKa3VSZDRYTUhvSFFtaThtSjBEUmlhTGRoT1ZOY2pwdHhXMmIrRUhPZFVNMXVqeXZsQWxickZXK0lNVkRhUXJ6S1hUVHBJYkVLM1plNVZDYWp1elJZdjUyVDhLY2ZWUW1zejVkT0g5bEtxcjBaZnhRSVVXZWsrdHM3S0didWU2UGMzRFp1ZW1uSGwvS0RhbmFZYmZPbmVubSszc3VsQTN2bG9iWWswSmJwbWFqaW1OWUVMYWx5Q0NDWHdmdVZPdDUwZWpub0pSS3NZbUUwcWROZkNvVTNqNXFjUFhlS29aak5PMlFVMDEycCtxdExrTXNyVGM3RzZtdG5yVjFQVGZuNVRFeDBkYjByTzlMTkgyNjh0QTRCYU9UOUtHekNDaEJjdk5KUTFQWHMyZExLOU83OUtmcGl0MnNqQ25Sd01XNzI2UytXaVhjOG0zc3dVSWtFTFJTaWxERFhQbnAyTlJmZDgzaXJqcS9nbG5TWlVwVmRGYlBQeGM3eHlMcURKTGtKYWFNeldvazBZZFQ1cXFZcHQ5UHJZOXF1NXowc1VyNXBQcmRGZlBWYkd2RDFRYWhJclVOV1VNb1dJUzVCUzJUa05mdFIzWnB2SzlEaVp6MmNTMU1IN0NORmpmbEFmMkQzVENYelhvbHBZcEdnc2pLSFBlK0ZTNkVlbDU3M1Iwclg2QjdwVElKcTQwcmQ2YmQyc3JZSFdlaFNKcUpsR2sxMTFUNXJYSnFTUFduVHJMWm5wZDN3UTdHdGp0VWRaTnpSVzMwRUZSL0N4dnRJMDZVUitQUkVKRnpweWRUSVVNRmtiRzZkWE54dkN0Zm9aaE5SZkhUekxMRHZUN1U3TmJGeDd2bE1aVDU4dGRCRTlFV3NWQ1dKWWFsMnVxTk51aDZkQnUxS1ZMR2pyTit0UDFzdVArWURxY0JJQ2RvdlFVUVFKdDd0alYyamR4MVhkY2JkRnpkejBlOGd3bXBxY1RSMDdxbzc4MGZTenNhOFN3VjBjOXpVSXA2UVRyV1MraTFFNkRkWXJ4UXIzNUptbjVkU3VDcWlCMzhQdTAvTmVNeXhQUnBUWU1vMG8wZ1JKMm9JMUZWTzlCNTNxclp2MHFMVXo5cmMyWDFDTlRTcXZJT1VnVFZsT2RPK2xzem5EK1FQb0VLMEhUVzdyb3dUUDBydTIvZk9INmsvcmRZcTFWc0R2ZjEwVXM2cXdyMTVUSkxBNWtTeTJQSWRlN3FRYnJvNXRxcTZ1VjU4N2xPY2l4VThyMTZXcDJLZnhEZzNSWXBBTEtXTlJKR3loRlQ5bGlEa1Z6QmFHdHVqMDNIcks5K0tTdGxNOWhBZVlXYzkrb0tyVUdxc2JkNGJCSEhxU2NRcEhFaDZ3NUN3K2F4YUU3czF0TjlrOHF2NE9UVWxwMVBuRzNOMTZDYTEyenVTN3hvR2RTZkhPVGNoRGlLZDg1VjF4RVpUZFZUbDBxdWxWSG5lNnB4alV5RE0raVpPSW5QMnFqU3JTQjN3bFpPM0VEM0lqT0NoUWhxTUxycmZ4N2JkbGJsZWZVZHljU25ycHp6OFhOdThNMU9LZUJDRWNhRU5QRkMyeE5jK0MzWENzYnlldU8wM1N1L2dmbk1uWGJHanVwZExqelBma2FqcUNPK0hDTEFXQmVha1BUNXBDb3A2Zzl1MlVWS3RuYXlwc3I5OVNuUG41eDJudXk3WEZhdmk5TGt1MmoybzFuZ3pRSlpPUmVxeWJwb2xaSWV2dVUxSTNzN3RUVGZSNjU2ZFBNK1dOMmNTcG56Q3NWMDRzYjlFRkE2WE9xRXZDUFhlQUF5RUpsQVNnWkZva1J1b1Q4aXE2eTRLSmZDRXJTN0hWSHZSRXdoSlhTNTdlcTZ4dll1TzkvYVRuMjB6Yml0WGczWUdDRk1ZTElxVkNLdzFSN21QNUZMaWRPVkwxVlM2dklTYWRtQldjZDErcFpxYUNPODhVWVF1WWdsTmN2TGlyWXdDcHRROTZDV2RmVXFLbktqVzk4a3ljaTRJL3o2aytlWjRFZUJoZ3Z3TjBJU1pCZmdFN2lNQmJnb1lQZ0dleGVsNVVDYUQyYmpVT3pCZDBiWk1UaTErbElQUmswdHVyTkVnNVdVcEdsKzYyVit2dmVuZyt0VFh2NGZpbGwyK0JMNEcxa29SQktHbUhRQTZFTkVpaDBDQjdLUkl1RU9paEV1MW9jUlQ2WWN0alFpUW9UR2VOeE90ZExMOWFIMFVWc2ttN1dpME45OXpLbVMwS3dneVhVYVZOWXJ4emRlbUlXcFk0LzJFNUxCOEE1UmxGc0hJUG8xQ0ZBdnhWRXBZOEJMQkJBbGlramoyTlFza2JTTzkzaVNMSXk0NFhLVnRkTUZqaGVlaXZIa2h4YTZtMnJ1azA2NmNka1hlbnJISC9SQjNFY0pDeVF6Z3lHTWlFZ29EQVQ1T0JValZiRXNySTRNNUc1V1h2dTVKenB4WGNwSjdPbGxlNTczUU9zK2hISUcwdmd4UWlnZkFrZ3NRekY0a0UxRkZPa2ZZeUZORWFNVmJsNEY4MTBtREwzVGE5N3hoMDlHNTYrbXA1Wm45UUlKclBJTENXaVpVMUhQSGtMR2tIRUFBV2lvWVRSUUtJNUcwM2NtcWRydVNJNVptcDZueDZldTNiVTJkOUhvMzVCUVpPeWY5TnJwcVV6bTg4b2lYRk9IMEpnMVBzanEwWUZ4Z3hDV0xhbXk5RXhDMjFuOWEvUnVXWmRzMnpQVDN0MGwvSzNhOFFZRGlDVUtBdm9IaStKUmNaVkpnaW1DeHVYbXFpUzlxRnQ5ektsbnVsbVhkdEx6YmR4ZnZuei93ZlNWMFhPOE1rYWdzYVVvWVJ4cGVnR2RDS2hFdFFxV3ROWmFrMXRaMnpUOTI3dHpNYW5adHE1dWVudmxCT0paZDlJQndTN0o5Qkd2QVMwSCtMTUtjRC9CTkFnVU9jTE1SekVMWUhPUEJnTEF4WUhNdnBTUmlrb1g2SndaRlJJMVBXME5JOW1FR2lRVkRJNHRwSWNHSnV5dTFmTDlOekJEV3V5a3UraHhMWTRQWWZDTUgrRTZCK1JPQmhRb0lNS0YvRkNXckl3Mnhjak5Zc3hNRFFPOHJsU1J1SHdrS1ZDNXlKOFdkbTh0TG5EUTJuTnNrazRzNXVlS29uVGdrRlU0TVYxeC90SmFha3I5eWt2b1J3cmtTQk85dW9lQmp3Q1pnMFFvQWl4Vkc0WHcxYUVnSjRmakN4REE2Rkk2SkRkUkpFRXlVemRxMlJxc3BjWUdTNXdjQ2ZIcFlxRGVjTldrTURHVGdsTmN2UEw5YzhoVFp0T3hXN3h4TGFJTU5mTlJwdmFDUG5lR1lKc2prUk9iRVlWS1kzRDREUFljdk5GeGd1elN5MG83aXRMTE5YZG03VWNiNmJ1YmpmVDBidjlrbU40ZnIzSVhINXlzamxlR1NVQkxpK09QSWdsWVNtMEJFdDdKZ29OYm51S2FqcnFhaHpsdHpyNmJ0MTN6WGRIbFZ0MzlacXBMbnlsSUxtMEZlSk1NOUNVbk1hS293VFVNQTVzUXBwdG5qZC9UdGErV1oyTjhxczY0OTc1UHVsMFhmVDV5T1o0Ry9CY3lZWElCZlpDUUdLNVNXRWhWRVV3WlVEUEVwVk54Wmw3K1p1N3EyM1hQTHpkM2QzSHU3OFBuOFZaN3lESitPVjVrTkVpbkR4czNhWVpXZW5odUdxTmszV2U5NmlueHBkUXRjV3NhdWN1Yk9yMXZ2U3BhYnI2ay9tUno5Q1VTTkJpaHBjaUpZS0VXOHk4d0ltTEtHVGVFczcwdm51dUs5ZFBSN29yVGZIdlNsZE9KZlN1bW5ScnltSnNWeFFlVHh4TlEyMGdsYjZycDNJMmw5YVozdGUxSHU3SnUrbnA3SmFidnJWOU4rR1JybGUvdEpzamtvSnJ3WTBCS1FQQWhNQmlvY0J4TUlVUWxscHROUzA1MUx0NTBjdHl5ODlMblBidXozdlRZZm5QZlNYeERyZm9DVUdWNHNVd2FvYVhXZWpRdjdwWW5aNWxtWDlHNDNHNXVlamM4Ni9uSlAvQ25TNzBBTUFKZVRWWWNpZkpvaU5FYUNVZXdXNUhGckpxRnpwdmRYZHRkTkt1K2R6NUlOVGs0bDhYd1hBWlVBRmt5WmtjZGJucHRaRkpGWU5YZExMN3ZYeHN3bk91N21vOUcxWFI0NnVjbExMdmtNaHplSC9SQ1dKcHJPNnZaRVJGRXRmQjZaL1J0SHRXK041ZDNmWGZSeHZyajNuOGsvSFBkVTRkNTRNQ0J6aTA0UlBEMkQ4TFM0b0VnaXdaZzhpd3ZuMkt6cXFNRjV0V1lYR3JhNlBTekxwV3RWMDNMRTQ2YWQ5SUtrL0hmUUNyTGtZVmRGeGVrTGthWXR4NlBTNjRRUnIwNm5PZGI3bnJ0MGJWM2R0M2NiYnVOeWZsTEYzbjljcWQ1UUZjZ04zbXQxclNUa1VlMDNSa1crV1JUZHprNVBjN3JWVXJ0VnRlNC9KLzVUVGtYZVJRU3VYREdJOFU1aU1RZWRHaE5XVUtEUlJ6VlZjM3M2MzNMVGR4WjZjK2FsTEhQUHdsenNxdkJlZysrS0M5SXlhYktFUTQ4NWxRalpMWldSMXkwOU9LdTY3bG0yM1haWXZ5WlUxSFBRRXpWV2VNTExURFVwMmVaTlZzaEIwNnlocTdjcTJkdXI3cDNtOGJzcmQrUzczSlV1SmZOaG1zVkpuMUpUQjZhWHduYk5YOHpUblR1UnJaMjl2bzhxNmI3NXo4cWR6eDBDVmp1VGt2TVUwVHF1VVZJSnN1WGV2VCsyYW0zenZkMDkxdHVucHVibTU3NTEzcGEzeFVCeU1teG5aRUtTNkZOTndnOHRxQ2VuMnMvRzNWdFhHMnNPKzV2bzk3dFZ1L0VHTnUxM2lkQjZRdkFOZUZrV0VEQVNzSCtWQWxyVW9wZXlvR0JqVkJJS2hIZHkzTWpVUHhpMUxSaVBRMUtldUtreUtpelNSVGR5dnk4Mzh1cE02S1g2VENrdloxK3k3d2E0STFCaXhGeUlSeHRCTW93ak9IS0lNMGFJMGFRZVhzY2tDY0Q0cFpXbFo3UzV3eWJ5eUo4cWNiclUyMDAwTnZLV3B1V2h0SktTVitUUDFCazVVYyt5Y2hZZE5KNDFwV3J4R2diVUdNQXVRU2xrWVJBbEloek5obnRmUTFRZm9rREtSMlJiamFZTkpFYTY4bk5YTjJQNDNja2xlVW5jektTVjNwT01PTXJPTzVvZ2pnbHBzLzdGb0J3ZEdGSG0rRUxnUitCYWdIZ0ZVaFhGaU1JbGlpRXFGZExTUWJSQnhuNmpnYlIrSkZ6ZlN2TFUxTEpJT2J1Qy9jU2psZXltWVcwdjNYSzdWOXlDQ0JONW1qVElrc2RkR2xlS25lRllHUWxESVRpL0JVa2tTTXRKMXJNREJndUkvV3lSZHZKZDBIbTdkMVhOM0crdS8ycFN0bjkvYVFIOGpsZVV4TGs0aEZHR0RJT2RkUnUvSVVZRkl1NTZ5OTFPYmNzNWM5TFVyTlJ1WFI2Yjd2ekQ4bjVkNmFzUHBZMS9CbkU5NUVTVDNQSWd5WHZYMHBFWnZWc1E1YU5MTk45YzMzYzYreWI1VmlydStjUC9PUmQ2VWprWTJHQ1VBdnN5c1VEQnBIT3cxRjNiYnF1YjVkSjFUZHJOUnlOeHM2NmJqM24yODkwbjlkNU5FMmNFUWNHaGZYV1pFa1lXeHRUeUZpRFhLWHpjOXNtOHRMM0xOMnpuUnUrN283eXUvbEw2VkFsZEYzamlBQU9Lc21oOUY1c2hXUm1takFiYkJpbU5tMkh6bVJ4UkZtNXRucDZkbTIrVlczZnhkTHZTMGxuWGVNTEF6QklSeVJsN0llTHJISHQyMUdGSlJleDJhdWN6SDdOOTNONjMzVGJkUnY4cmZuRDU5dlBHbE1zdUpEQmpNeWdSdUhWaEhQVld3UjhpMSt3bTczcW5qcDVXcjBwK09UbjFqajdwZG5veW92UUJPekJna0xrT3RKZGc5aXBaV3VqUjEzSFc3cnUyNzE4Yk8reTU2YithbkQveW5QenNUL2lvTUd1THJlV2pQVmtSNXJWY212TGkvWjJPM0szV3pWMjI2ZTV2bzU1LzlTcGNjMjd6WU05SEpkZEp5TEF1TkVUcVo2MkVWYXFwemI1cnA3dXZqcTV1Ym83N3orWTV0MzRmaTd5NFBvZGpVVTJqR1hEaWprWDVUVmRUUnNPM1pxMnJUMjkzZDEzZHl0MGVtKzdyN3Z4QWZjNmM4K3h1Wk5POGlLQXJ3bEF6T0hOWWVqZGcrVURlMWk1RzQzS2tHRnVsMHJYZHl5MDNWMnF1YlZXMzN4Y2x6NUptMVU1TytEd2xBSHlDd29PSVlhQVdrVnd4SXkyZVczQzhkamxjMWgxTnM5c3BHcHVOOU56ZlJ0dlZmUjZUN3FwdlBKbVFnNk5aNWdVQkVCb01Fd3g2SDRQUTZvbnBIb3BLWTZuQ1BKTG1kaG5MWHJqZGRubWFpK2I2YmozWHpmVDNuOHJFdjFVQ0NmbDJlVWd0NFdjSlNRMGJKTlRyaXdReStUU0JheVpUVEtPZWh0NzBzbU1yTG5Gcjg2cDZOODExOXgzMG4wQ1ZOSFBKbTVUcFN0NTRrZ2YwTE9uR2ZDZUxNWWhzUUtKS0Q1R2lUQW9uQmk4M0xwNit1KzFtVk0weWRHRjNQVDF6YzlOOTZXbzVFLzlRM1hUaWIrQXRwR3VDUlZDSTJEVU5rVlFRdE12TFYybDFPd3lVZGRjSHozR0Y5ZmRMcHZvOU54NVhmdVAvS2FhOEhqQk1RY1lxUUd3SlM5UUtjM0pUVE5yUDQyTmtiVXZSTmROZGJ1NjFsSzl4NlBUMDlmSytPcnBBcXoweWVzU3k3dzFYNlVBclI4VkNBVnk0NjIwKzE0SW5sTElkVDcxdnA2bTZybSs1bTdqZnQ1Rnp2SU00M21aNnhMNlJ4UndNMDZlVDliQmppNHZVY3R5aWM2TndVZDF5ek5SeVBUYmZIVi9KOTAxNTlCNWdrTXRXNUJaZU1CK2NOSmV5VGtFT1lnK0hLbjlUVHA3c25UcSttNy9IVG51UDE1eVMwQ2NodVJES1Foa2toYjIwb01MWm1tWWRGMHVaNmRpNmVpNXQwMldibEtueHMvK3VpNlQ5TzhTd25CSXNFOTF1UmtVdVRwbWFUUzlHdHpQYXpjMDNwdjAydmJNWGRGYTIrVjM2WFVyZWVRYWRPZUtnSlRZcTA0NGpHTXhDTnlrZ2sxMnRVT1FMM2FPT3R3U010OVBOd3ZtYjczRXlYZm9aRTVHcThZQW1RZmhJQXN0cTF5R2JzelVJUllnekRvSXU2T3pDKzNlNTByUmUzMDlIdGozMUZONTk2WS9uakdLQmg3SmFUalVTWkRITnFyZStFam9hdVdWd3JxNjM5SGxXWlBjZDM4WFU2YzgraGwwY1N1OEdaQndnTGNCTkk2N29jUWNwU05nemk1aDd6Z1A1VDFpWUc4eWprSVhwVEtweks1aXR6TTMwcnJ6M05OVGNyTDMzVGR6QmlsV2UrMDZmWW9IbG12RG5CRllkSWxoU0pqZ1hJc2hVZys0cjc3c2VHd041YTBOZ25qQnFGV3pUS2tmRGhleDhPYlhablYyaVBKaVNiNXZqQTVtNXVleUdLczhYaTU3ZWJrd08zTjE2QVN3Y0lFVURVaGVVUnlDYkExZ1N4cEhQSTBpSmxjeUtSVE1XZXZsNXRicE54YkQrWXp5MXpmTHJqOWQ4dFBkMGJaNloyVXJkZTZrQ0tvNU5JcThXZ0trRHRKVEpPc0dESllXSUxvSHFYT1dSUEZlTE9FaldObG05OU5NMis5azRLaHlZOWMxTnRMeUp4cTVnMnRmbjM3amVmcE5SSDhpUVk3NUFBWXFDY0FzdzZOREdHdUlJV2h6Q1VxSFV5dUU3TVZocEtTRlpsM1JJL0VCM0tTQWFYanphN1JVNHdqZHh1TjNOa0ZEVG5SMTNreG1HN0d0bWp1dko0d0ZFb2l3WUZRUFpUS1FybEJxN21VQlNGZTB5T3pNYm5OYlpPR2VtbWVWNUhwNDh2NXlUNStOTy9kMmRuRXNjOWNEZU1qcmRzREt4c29uN1dzd2swNkVGcjJvMU4zUFhlOUxneG5mbXh5S1gzSDgyT084SlNNcWdNMTVtUnphc1lSd25Id2QxOVdteGZMOW5sZmQyemF2T083OUxIUHFVcmJ2QzNqUTBCd2c5VEJaUElxeFRrZ2Q2WmdOQlBZTkpxWG81ZFBOR0RWVGQzTEpoTUh4NXZtYm0rbS9jbDlOa29NOW93STVRRjk5UExua05Pbm0zbWxRdVViTTFPenI1dkp1Tnp5dm5LcitVeVhHMHZ4clhlVWRLQmdmeGQ2aGlDN0hZbllMcWZMUzAxVnpCdUd6M1ZjWGJQVGQ4ZTM1K1VDV09iK09jZmJ6eVVMTVkyaDBhTXBaZW8xTGIwUm8xRitJbEhRaE9YYm9XNlBUYmR6M1I1dkwrYWx5V2M5eVdrczVUdmVHMmFzeVVNSVZFVkNYYVhLS2xacTFFZXVlMXZldW8ycTZlUEwrY1Y1N3FuRC9scElJYUVZWm9tbUJFV1hSN2hhb0loclU4L1gxRjB0WFBYM2RQWHpkOHRmSysrYytuT2wzcnlzUWlJbVJGOG9TSnEyeTR3aFJlYlU5NzZQYnVlYnM3Nk5mTktzejNlVEVPanJwbU1BcUJnVVRsSU9SY1VCZ1lsSlRFMUNldlhyejBhNDY3cDdvOGRkK1VyZDhjeUxrdndVYmh5aVdoUTZYeEdsL1RsTnZsWlhVck9iWml6cm85Yzk4NVZPam56c245bDJmeFJaS1J1elpRSWVwa0plbXA2Q2lJOWw4TG0zVHN2aEdybnU1dkp1ZWphcnZuS2J4MzRtZHFYeHE0WmUya0lrVVRKUnR6RW8ySzFGem1wUlF5UGJWN0c1cWNwdnJ0VS85bk1iejZrK3FQL0JvaG55M2JETVJwV0ZGdjE5UW02ZE94eU93cTNUYzl5dnZjZ3oxVG91OEVGZ1E4V2phSFFMNFdJSzJYb1MwV0FXazNvV1J1bmxFdHJyR2t3dGxJSnhlOHlLbEkxMDRQUTlIQzg5SzdVcUJ0YW00M2ZUREk3THZJaUdVQ0YyNjNtaGpIZUJrQXVwQ3dBa3NTSUVSRVVvcGtZMUJ5anJvNmo1VnRTaUx4MkYxSy9MOFlLWnExcFpzVGlUdUpLOXRjMWF4eTBWV2pIcHNwK2lkTG81bnREaFNYWElqN2RVVjlJRjNqS1JCaUo0eG9OYUdSS1FvR0JPZEZFaVR5KzVoT3h0cTRWMHU2MVhSNXU3L1Q4dXlMdlB1ZE5lT2hITloxb1VneGx4cWlsNmV0WFk1Uld3VVBxbzlDdHllNmJPcjZlOCs3OWxLcWQ1b01VQ2NLWXdrMFF3TTBkZE1HVVpPTU94UmNkbmVadHBaYWVuWjZsVnF1OXgvM094TDQ4MDh1TFg4UWk1bHB5NXRhTzBiK040U29xVGFPVlY3TnFxUE82Tnp5dTVkWDdHdkRWQ1VpRDZickZNU1JPS1JJSGQ1eEp0YUFhU21wTVNrUjErbXBXN0RkSnk4cnpjNVhTNmVudW00Mzg3Ujl2UHFvTjY3d21vRGZnVUlFdUlSZ3VGZ0htQVhZamwycnJHand2RFBEdWNLREF3M0gydXNWVitYRm91dTY0UWlzc1ZMWDZOejA5Ti9sSU05NmdVcEJiVFJnZDc0YjRSV0RFancrNkg4YkJXZ3dRcTA5OUFuR29hYkx4QUNUQm51aXRkbzRtSnlZcEx1Y2QzTmNWV292VmQ4bjg5QWFJRXJleGQ0QitJdVVZV2dEL0FqSU00TlVYS01Wd2JwVEJRd1JrVVI1a3hLYlVEQWQrSllVVUhPU0RaWndrWmxjM21ocXM0S25FbGNwcEY1TWVPVGpsMTF1VXRUek00NUJTcDA3N0taeE1RUG10bmZCOUFmVWFBMmhsWldNWDI4VXIzd3hnblF5UGJCWHNOL2RqV2U2Tlo0UW9CZFJyRTNxU2xzWVYwMXRkRnlLcHJQbE5ISE9WTy9ZNTRKd0JNclJzUVJ5UHNFL2s4MDZHd21vUnB2RzdiMzVTcFpRVFhwY2pzcGZCT0FQY1RqWVJ3NTdwcHp0MWlEbjArb1FoQTZlK3ErVTB1MkR0VjE2V3NWVjRRQ0swb012SjJwbVV4YlNhZGZsUFFWTUVWTjRWczhjRXFZZ3ZuVXV6VmZFL2lXYWM2ZDhMV1J4ZU5HWUdobUk2QTRwdG5hY29haHZjaWp1S3E2TjErelNESHdTMU1KeFZ2Wk9xczlLVE4wL05IM1UrWEs3ZEx2QzBpWkpxZEViMlR6NmhLL0ZHeWpxZW1GYXRIWXduaXhmcDZuS2xBWnpzYTZOUndzWjZBZ3hKbTY5WFVkOFFzRjlSaDVJalBMVG9ycDlhK2FrMTEvSHZYUFhaVzd2eGlzbDFQMlgwZHdMR2tEbnlpU3k2ZDJPaEh0ZUdlR2VPWXdtcnkyMWs3V1BUenRPbFN5eStwdlZYYmVkOFh0dXFwM0R1Rys1eVp0TGtYSGxlT2FlUmVSSVhtWkUxRlVLdWtDSjhIM0tQVHVFOUhyUEw4TWcrK3RqandOdmQ2Yk4ybTg4WXhrUkNrNVF5VGtFdlMzMDJqbHpGVGNLM0o3Rzl0dmZjbHhCakVwbFY0UU1QaytmMTFKYVZROU1pSXhjbWloMUV3aGxqWHMwZzF1eXpuamdURDZDcE0wT3p0VHNkK2lEaVhaZW1kTmV3TUJFcFFucERXVVdxRWMwaFIxa1h3bTFkemNlZDAzL0pYSWpPY3h0L1Y2SjJwbnEzYS9mVUNUNDBsMm84cGw4SHp1MUxHbzJJdWJ1NzA2czY3NVB1ZEUvV3pzd1BIVG56cXRLM2xlRHhrY1V5WmNSMUk3WTFnelVTK1VOS0t2cVBJZDh3aEtPcVFSM2E1WG5rRWcxa01TNWt1ZDVtU1VMbnA2SEV4SWxWVDQ0eGwxMER2WjZibHplSFhlcXFNTHYwdE9uSTBuMzVDVXZMZ3l0WUdBaGxxR29iT3dmcGgzSStWNjZON08zbjBRWE9xTlZUanZMbkF4YnZ5Y2M2TzZXYzhwREpCQkpubUZ4Y2l5bTZrMGRGRkIrcXFqY1dsdE9zNmUvVUtCSzdkbDl4Y0dQMzNEaENYVFU3dnFBemgxMjUwTXdZVnBSSm43c3NJaHozaXRVYmk3ME5HY241MUVpdXFPK25Rai9QVFRiZFFoME5PN215dGs1NklhVXc1SUdVQXBUOU1HNkJCQitJcXVhWkxkYmRIcjNJOWZuOVB3Zkx0YmdXTTlMV0lObkhOMTQwQnVxSHJydVQ3clJDUHZtNFpVYU83bUUwZDFoV3I5elhvYTNZd21vMUJYbjBmblVzdVB4ZDVDR1EvZXByUjA2VVJDWWZST21EbTZmVDI2cFZtcW5mVGo2QkJPSU5qVzVPZTN1eTdIZWpFaEpCTTJFQTRRWTFDVzlPb3E1RkJFK0VhVk9Wd2IxdnUra3RQVGJVY21uSzkvSFNtaWxQK0tVdWdnRjdDMTczVk4xT0llcnBkczMydDA2SFJzOHY5cUorWFVlN09LcXo1U3k3YzhQb1RLUUhnRDBnaWdXczB6SmRUcDVidFJRaGVOODdrYzMxOS9CVm4weEw0d25adFZTdWp1dlFJRTJvSlljNXplK1lEZllrZVFQR05HM2V3bDk4aWJwVnN3YjJlbzdkUGZUMEZaRkZwNzN5bVRZMm5vOWQ0d2hLRkJNZkI1b1JFZGMyeHp5NVJ5NXJpcktuWGR0NGVkZjRmMUxHblByZE9uYnR3bkR6ZlA0Z3FYYk1OcW5LOGJydzB4bFpFZnhiS1lZRFNCK2RuZFRzb0xscEVxZHJhM1JadnFWM0hsZlQzeWdZcDFidEZtRGoybTk5MjF1N05SY1Y2SzJlR29KS0Nla0ZQeGxsRER0bW9JSHdlMHVxM25jOVZ5eXUrYjYxZCsvRldUczdVNGVaWjNwMDQ2ejl4Mk5wYW12Q1ZHVWk4d1F1dUdzeVc3T3dsK3krSFZzWEhtKzZjcU9WSEpkN3BkamUrSjlIWXdwNlJJa0c3VVhwNE9US0pSdFZEVzN6VUhOOVNwemZkOGtGQWYzVUJZMk8vS1dFMDdmQmloMTBoQ21McFFHeG5paWtVN0tGUkIvY25lM1UwN1p1Ty9UcXAyenV4MmJnM3NjL2NuSnFYT1ZaNEVVQ0Zqa01jQ0tUSzZDRFMyRDNTaW5aZXcrNDFVM0E3dnZvbWFmSVZhOTBkbktqVGJwcHl1dmRSK1UrMXV4ZEhJNldNOERzQkFodVFpWXVnMDI2cXhHamhPMHczU3ZUelczZk80NkduVzE5UlN2ZDRBQ1lEYnVlVFJsbEVUOVFKalJpRmN3L1pyYW03VlEwNzcwdXptVk5LOCtzbHgrT2VERUFGQ0dJSktSbHFGVHFMc1RWTlNvcWFmQ1liTkh1eDJhNzZUVTJmU2hqYytPTjY3d0JKUnlId1BzRHRBcElaM2l2TnpZSllFc0M5QjJGTWtFakZITldNeFNIc1RvdWJPSURNazFtSkhrNW9ra2ZqaVVrcmMxeEhTZDA5TitrM2NSUVBwZ3gyZXlmbHlha3ROdThaaE1rWVBKazFGS25MZEhlQ2xSQ2FVNzBtcWt2ZnUxVTIwM2VVdXNkOXpidjNNK2o5SlVxdlBGbUZNQ1VGTmdTQTRqQWFNak1vRW03WURFVVNSRFg4alVhM3lObTV5YmFTTlRzV2wycDV2TmxmbCs2ZWtnd3cvT1JkK2x0S25lY3REeURERm95RFFGY0lWSURIRkR6Q21yMkVGbWk1VmNlMXU3bTdtNXR0cTQzNkNLWE16d1NMT29UOUs2OGphV25BeUkxZzBpY2pKcGt4S0o1dnFDM3FHVjhtNTZXYWxtK1ZXMjAzemJ1NjFkek96dE9WNThwWjAvTHFicjBZTVVOSTdEZ3c4blNnVVdqWXhGaGd5anVWNWYwZXJybGViVmRIcDRyOVBlZlMwNXZQUG9VQ1Z2UEhvRHJEQ25Nc1pHcFpJbkhJK29udVkyRVZHMCtMcFJ6VTlOM1oxYzJlZDhwZGxMK29vMU9JUEI0QTNoaU1qVmttbEFqY2pKeHAxemJVTHRoZU5aTnRUeGhjZTVlWE4yemZkMDIzM2hrSHlaT2ZwK2F5Y3l2QkhvRjFobmd2UWdSdURidENxU29nMWhFQ2xJcXc0Q0xTRm16RXlFVWt3dEl0YVNWTjgwc3NJZVIwaTVMTjFsK1NKT0hwY2JqZzVhbGNrMzVvZzFLZm1FdWJjVjNlUmVRVnMycjByNlFPK0FYc0ZIWEZ5RktITVFrU2hIZTBQd1Q0ZDdJQmZVZHJ2YVVqY08wcmpTSVlrcmFxVGtwbTYvU05vdERFa0x6MTJ1WGlFbkUzYzgxM0VLR1ZzMHIzeWVoblVVd1B0NitPbmxLdDhLeU5kQ3U2aElvQmhMMkYxRHRRR3ZHdkhCakRYOCtldnVsYlYrMVZXYzY1dFhmeW1sMGMvWTdFKzd3MVE3RnpBaTUxbXloaE9qVzdadEZxMG95N20rdXNXWnFlMXQwNUxQZCtEaEhQSUtKeDkwWGVnQmpTNkNRaHNtYTlKdTZudllRbHNyYSs5VzJYMUNlU043cDF6ZDNNRzc5MEhUbnlnaTZjOWNOR2hmZlJEd21xTWhhQkhYSXFHQzNRdU1JMitOODNhdnJQT1Y5K3BaUy9tZWFDWWtncUdFOWpFak5VUnRQSW5RUlBnczFMUFhWTzY1Nk54dVg3YzliZksrOXZQU2tIRlR2S0JhYWtNaUkxMFpjb1VsNTlpeUtjSTdXdVNpc2RWZlJ1TjNOSytiNk54NzNPK09PZDVhSmhnS3l1UkJoUGlPTnBXVHp6TkZ4U1dnMVQxbzFjMjExZDNWUGRIcnVlVjhydjgzMjhkTHZHZ0pDd0dpQWxHUzJWR3NKMFpiZDY1ODlOeDJtMzN2UjZiT3I5dEw3ZE84UDB6Z095aEtpUmtST09icGhCSFZ2ZFRvdWpsd2hPZE51bTV6WjdwdFZkejF6MzQzbmhWc3hMRnp2VUJOQS9SSUJXSVFRQjdsQVlER2tIUFIyYTllMnN6dlJkdDkxemZWYXZwdVBTNlBmT24xYnZsQ21QcGY0SlVLd0pJTUJGSm94RThpbWc0OHphTmhvMjJqRGljdXpMblN6dEpMdGF1dWN6cnVibm0rK2RjbFZPK1Q2V25lSENFOEZhSDhPdlVhaW90NGFKSVVMS0ZOREpyTnM5R3B5VEMrNk4xTFUwcjd1dTducHRYMDY1M29IcGN4dlBRS0NLV2ptWERFWGxvdmpBdU1hMG9WakNZUldYUjFGMU4zeXF5eHVjMzN5Nkx2VmI0clJtU09MelpnUFFqUEZRYTIvWW84VGRDNTF2TE83MlBOOWQvVzU4MVRuVG1POFM0ajNFOWNtam1zUWpVaW9rWFk5WlprdGd1OVhXM21YUFQxeGZQWFo3MDk2WkxPZlRweDBwZkhVRjZEVkZVaU5Ta2FndHFIaHoxOXU0MVhqcWlHS2tjY3VObGp1OTJKWFJkNldxU3hTNVhtQUxtb0dwTnhxakY4MmFTbXpNSExKT1lpOSszY2FtRXMzZlRjOXZ6azc3ajhuL0Y5bEVrcEFPYWhnVkl4S0t5V2VyVFNWQ1RXNm5ybUU5MVhOcTNSdWJpNzBybGJ2bExMbzU0eUFsTm9QTVIxSDFGT3MxVDFzMnNZVHZZYXp5cG11NjQzYzA1WGF2STM4b0hmVU1TK01BcXgwSFdoU0VKRVprU3FYUlEzaTFoYm9NTVBidTM5MlZIZW5aenVtNDM4MDUzenFYZkpwYVpwaUhSRVlJZGs4bkk0VWlSMjlsNkxuM3JlenM3YXZacUxuTjM4MDc4Vm4vZ0dnTUE1QkpHSkhKRk9tbVBkUExHaWFXVnV4OGJ5ZHJvMzFuWFJ0dmZWWjh1ZGxSUytQSTNTWnYxb0pCQkhSY1JOeW1WeVB2R0VIbzdqc2FtMjZicFZkdDJkOTdrc3VkK2tHTHBTbi9BVFNCaHdKZUNoa0lpa3Nma2c1RUFFK0x5ZEpjdVNCVWp3eWpIb2JVY3M2MXpJM2xScTJ1WHVQS09hSktsZGtrcWU3dWxKWnhLNXd1bVFWcmJtOThSNU9IQjhhMTA2L3hsS0lUd1JrSnFLa2N3MnpNTk1IeENiQ3o1R1hGVWJpbWtrd1hzb3MyeTBqTURrYWU2VGNUd3Rydld1U1NrYWxJMU9uRWtzcWRhNXUxMFV0SlRyUGNsUW1iNXlvNi9RajkzaERJQ2crQTVrcVJCdzVDRUs0ZmdPYWFGR2JOeTgyZlp1TzRjaHF6RzdKSXRFbEx6MHBGbVp1ekVxM2E1aWNSdVdyU05keVM2MUx2aWxSdVJSMm80L1BGY1J6RVk1R01hU0l0U0tXV1o1RnNicXJOdWowclZQUnVOdDlQVGZ1ZGplWjZaMVZMcThYaExqU1NUQk9qSE1WV294Z2FoSm94cHFiMnVpMkcxTzlDZDNybnNuVmQzNlZMS1hQUHZvLzVTSDRDR2lRQzEwWVNLdGdudFE2WG9NZXUwYTh4MXpzTHUydVdYWHlMcDJibnU0NzV1L2p2NmxmVVhlTEVSWVpySW5jUnpFMUhZdGxPNWQxTUc2NjhLVVJxNXk3dXpqbWRubzNOemN0V3E2Ti9WWjZaaW5PbkhlSzBRa1ZUaGtSc0I1bUpKRWlLYzFOYllsYXlnVWgxVUxyYy9lbXRadVY2WmE2WFI3SlhWM0hybS9QNUZMNlZOVHFuTjhQNHBCYWljOWtWTUI3STZKWXdSOHZxMUNYMlBjMUhWNXZtVmxNdFZiZHozUnVlMjducDc4MmtzVDd2aEtYSFR2akVEMkNBd0xYcHBGZ0ZnTmtMVHJSdlg1QWtYNGptNzFycWVxRnIyejE4ZGQzWGR6dHpmeWhTNjZMdm5ZSlZUdkVnbU5CYWxMaFZhTzRmYUdSbTJsckwrSG8yTWkrQ2krdld1NjEycm5lN3QyUE10OVBUZDNmaFZuU2dpNzNWVUVzcFZidkR6S1RCRURSNHVJSXB4NU5uSnljc3M5Q3lVemhxYjVsbW1lZHNONjRyclcvdVdhN284c3E3M1ZPcGZrbVM0Z3lmOGhNN293UXRnUjV0QlpJaWhGaE9VamhycnVsRTdCYTlucnpZN0c1ZEhwdTV1Ym52U2tINVRSZDR4Z0tNRFpMemFFNExFUU0zcmFmQ2JaQ1htTDZodDFOUmdyN3VienA1dnZTd3lYZWZJaUN2Sm9FbURXVGdXdE1UWkgwZlNHb1lxcDQwNE5oYUw4dU4zT3JXcHU0M1ZPUGIrVXlYMHF6OTlnQUM4aWpBSGtocXhjWVdrSzM4c2lwa2JhWDdYY3FydVdLYmQ0cTZOK2YzTWQ1OHRxb3VuZkhJQ1FoMk14U3NtaERGcUVyVXFJWEZhMmlLY21IUzZPUHJkbTVON2JxR3ozVGZ6cVYzcFMyY1ZiOEFQNkQvQ1FsNklZaDFDVkRxc2lRTklFS3p4NTFlbjF6UGRMbHBVcEYrbSttRWV1ZStrNkNYZTRocG5SY2Z6dzhRYlVMWVJ4SURpOG5EYVhFODQybWNMaWNrWk1SM1dXYWF1Ym5ycGRUUFZrNjk4ZVd1MnVtM2QrcG83RnpidmtSK1VmOExVRE5EOFhtSXdMbW8wRHlHaVBWdWpTaGt5VXJJMnR0dnJYYTVlTjExV3I0cjM1QlRWTyttUmE0K2RaNHN5R09pWVZ0aVJVb0NJc2FscTJvNVd1bEZzMnM5bDB3enFtMnI2ZWJ2bFZuWFgrT1ZZNzA4cFoyYXowUkdTckZ4ZFhLRFJKUzVFZkxKY3ZWYkM3dnU2MXJjNmJ1ZW11bG51dmxkVDA5NStYRUgzSDNUVHZFbUlZVlJrUkRBTDR5anVPaHJJd1dqa3VnYlRmTFFYVmROeXBucHhwWDE5TnphcS9TeTdNbk1kN2srUzZYVjVjQmJ3UE9YQVFqWk9hR2Noc3k5QTlIaHNrbm50TXRiMDFOejNTMHZHNTJlYnV6eS8wNmQrQ2tTdWMzWGlXQi94alpaUkVNVXJNQmprVk1MbDZNbmpCS2gwSWEzc05aWDZiTU91YWwzWTFOejNmaEJkdjB4SFBETENXa01lREJmcU9DR3VucWJacmwxTnRSNjluWnh2WnU1NnRubSs5S2xtdm1wU24yODhOSUpxYmhvSXVKb2tSd0xpTEtoejU3cm0yZVl6WnFZWk45VWJycHB1N252UzY1TDlQeW16L2dKV0Fqa1F3SUNDdjh5U1JMS0NrUmhsNjNsQXFxVU9Fa2F6SHVmM1RSdVUxUFNrbnVxOW0xNzdtbXBxYlh2dW0veURxZDZGSEJQc1hlSFVBbjhEa2pjb0lqQXF4Sk1nbVlMSkthS0VZT01HaU1ONUZaV25wN1VoR3VKVUh5TnV0cStONU1adWI2V2pKcS8yR3BmRjVHOUEybGpEQ3RYaGRBVFlETGd3UzJtUWY0UFNzTEljUXpsbEZsd2N3ZENJanNtSklidnFJOEdpUks0M0VwZFRNSTl5Ums0WlhhZDBuQkpscWV1YWNsYnh6dmdPRDZkSi9kUEtyeERRTU9DL0Qzc0EwQVppMGdNOEdocjVRdktBbDZXS1pBVXZjT20rMGYxSzg4U1ZNM0NsbW1SdVhKY205eHZyNittNWxBUVc4Mk8vQVV5ZkkwaWk4cjU1UENVQzFOaDRPQlhqNGNuSStEeVVXb3NGTXBxV2ltYTFQS3UzbE04MHExdnA3NXlsUi81UHdsTE83azd2akFrS1FlSWpreTVveWhJU2lHN1dheWhsMlZMTzAzYTB1YmRlMGVYN2o5ZTJsZEx2SndTOUVHY1dsNXVLWEhRTkRSQkw2ZHQzT3dhMVd6TmMzWjczdTJYTnUrVUUxSFBYR216WkNUTkpzR05IRkd3K1hzcUgxZDcwd3FldTFxNjdidW8ycTc1VGI3cW5QYVlYRWlhb1plaXpvR2MzS0JaWmhTOStPblc0VHlxNDRlVzN2enJzVk8vTVAxN0EvSjNVOVFMeUpHK3lIRFhvOVQ5M2EvYmM2UFRjYmJ3Z2UvSEg4YmQrSnB4dDNzRkN4QWpCT0pNNFVjblNHdTZ3ODF6VnU1SWJ6Y1YycnVkamVyYkhwdFYxejE4MzN5Zjl2Vzg4VjRsZy9ob0ZTYUVVMk0wWk9UbDJ2N21aVVhwSHF0Nk5LTHh2cnMzdWI1dSttK2pmZkYzN1duODgwQ1JvVTZKQUx5WVJ4Y28xMVNtWWVtYW5LdDZ0ODA5dTdPN201NVYzeTc4ZDV0U3d3RGthbW94RVBGbU4xbDdOUExybGxFOWFhakNyYjZianNiNjd0dlBkSEc4K2NrKzI3dzJEZXlvR2piSXdHaUJSZTd4YTFLS0w1eGlycWVyWE45RzJWVm5XL2pwZDUrT09pN3dzcWZSaE9IaSs4WUNjV2xyVmJDalo1dGt3ZWVMZHNlcFhiZlI1dS9QL3VTN1pkNURJSTZwZ1d2VWFGTElxbVlyYnE1c2F5L2RmY1hNN1BWRzFkOU44M2N1L1Bqdmw2VWN5Y2FqZ2xsT2lJU08yb1V5amFMVm1aNkd0dU91bXJWWHpkK2w5eVhQQjRSbUhzWDRFNG5ybDE5aENUOGlRcUtYcUhZdk96dXd0VjBiT3JqZktyYnVlay9sUzcwb1pHdWpucEJqTlQ1OWtjbUdsaGhOZXBRNkNBMzNuU2FScHRucnVieTc1VmF2bGZmOU9WWjVpWHdJUXBucnlSRjBDZWxuMWFhV0dyVzY1ZlBUejM3M2RaWHYwdVJkT2U2dkRwRGdNd3Q0ZzVLQ1ZhaTFEUnlVcWxTd2dRVXpLUWFVajlOeDVVM04xUFM1WWpyTTlMdjNaZDZKQk1JVlhpNUI4aEloU3duZzZCYWt6QmNNWlNNaTRaVEVOMFkyV0hLSFdQcHV2SmdOaVMwZmRMUExqWVltTk5OMjB2TmtwZEkxYzJjZWZQenV5NzAwRDRqa01wdkZhUWlJVVNhYkNyZ3paUUtCb3pwUjJUbFJQUFo3dW5tbXN1UGRQZDI3MGV2bzk3a3VPaTc5aWx5ZDhsc0VJemVuZ29Sa05GMEh5b1VMWmJwM1o1VnppeDA5WjNmNmY5Qm5yQnVDUjBoc0ZBeklqak5CQ0xDSXRwTk4wK0dLb1QxUjc1Q3JaN2tEbTB2ajBXb1NPTUNBMEloT1R2UmwzUTJDUFlQNldLcTV5UFJxUFgwNUd6M3VidjZqamVmcnBjNmM5WlNpT0NlYlNSVVdtWmZQUXFWRUVFbXNsNXZQVG5iZTlOM3pMYjIrVmROVDM3RjN6amt1ZUpJdFVJalF6TGlJVzhNU0ZGVTl6VW5HVnpYUWJ6bWtjM1BjeXF1NXRWY3V1MWR6aDFuaGtLM2VaSEJUY2dOWU1NcVhscUtEa1Q5TnEyTEw3Mk1KV1c3cnZyVlZHN2I3OGwzbjh6eG1hRC9ITmhHWEJKRWlCUVR6Wm1YdlJwRVcwMU45azFUUFB1TjNaMTNUZDM4VC91U3BsVHZBZ2FDN0R1S0lHK0Ftd1FJVjQ4dlVDbkZvRUhoRndhY2pNWEk3bEdSNUUyS0lLb2NTelNtZWkxeHZJdHJXNmV1NXVUR2V2bVpaalk1WlV2Ukhld0xGZko5TWZ6SjA2Y1dOOElMQkw1b2xlMGZwcExVcFUwS21xM0p4dlAxTGsxS1g1eDA1THZFWElBMENzUGFnZk5kbUZRWmwxVHJlTjVQUDBJOHI5U3prNU9LcS93RzFCWWs1cWFHczZhU2ZRUXphbk5qa1lXcXJWZGVtU3gxMHVWWVY4OXpaQjA2cndTK1VZS01KdlRDZFFkT3VZZEJpVVV2aDFUdFpOSzkvVXVWT0puS3R4MDc3ZXQ0cWQ0UGlMNlpscm43TkpyWnJwcCtWT3pDcGNWOE8zZnVINVRUU1hZMUNjOCsyNDdkNFdZU3ljWG5KMENkK3dwRE5VbmxOcmRWTG0rYmQ2YkplK08xTzFUZUZuUHlLWEl1OGZnMm5FOU9pcE1zdlRrVmJybVdVY0dZMHJxYnB2Tzh6cW9TL2FkY2NkT1QydW5mUTdsVEEvbXdPNnJJdThRQU4rNEl1a21tR3RVeENFMGpZbTEzeTZhYmhhMjhWcjlMaVdxeW9WTUN0UjY2dmRITmR0UnFhOVNFeGdHWlNhbHk3cFJKbStSdnV6Qjd6clo2N1ZXZFhQY2RkK1pDYWsrZ25EeDBiTEZGZDN1UDFPeDJPbmVSM3cvU1Vhb0JlWU0xbERrZk9tb09ZNVpsZTZsOEk1ZXoxejNUemRxdTc1Y21TeHlkbXRQYmNWdCtKOXVuUnh4N3Y2R2dIa3d0TlZOSm1GRTNyR29rMjArZGIyWFhleDV1cHlPTjkrYTdHT1JicnAyRzBxMDlkUjdTclBWSUpUT2RHcTlBRXFUazQxbGhndFI2N050TS90MmRnOXoxZXV4VnZwMHNITVdpcDlUVUk3T3EzUzl2VzlWYjlPcWFnbVM3SEtpN3kwTmNjVUd5YUlYN2ZFTGVZcWpXbFQxVG84Nk5YZnB6N2pPcHFjMSt1MllPQ1BYZWdkTDluWEszZWFqTVRtaUdnbDgwUkZDYmFaUjY5QkxFdng3Zk4wMzF6Wlh6OXltTHA4N05iVWRzOHB2UHFwUUo5VEs0Tjc0VndOYzBGUUJ1aUd3STlraGxzQzlSbTR5bXVYUGhPcTZWZGY0K1J3TGFUUGc1MVRzN096VTE3MHRJSWFnaFVjVnVvc1o3aHNEeW5LSVFlSlNOa1VHNElvV3RkWHgyNkVlSzNlNTZWMlRTWTA2aXhoWHo1Z2ZsMlRTS3ZKb0hCSVQwRUlNRTRwUWswbDc0UXJxcDlSZTMwM2RmdHZQdDVEanZaejhUdzNHMzNoNVJBNzdnT05ZNERoS2hBMGFzSlh4cXQ2bGxibFZkdG5XZVFTMk9TbHJ1dzlyMHlmTnFxeTdLMFBTaE00SHk1cVVLWmxOYWJkMm9TbnVkMmxXenM2dFpXdjBLTGRmQ2EyWEl0MXVCQTFOT0sxZXdtUHUxOEQ3NTJGVTNZRzNaNHBDV1dsM0lUUFgwd21nK2JmcUM1N1p3NzF2SnIwOHVlaGZXN1BiQTZmNzAwc0pZUmZOeS9GV2JXbGV2Q1JFYUMxbWdqeHdSSlVkNjVhWDBUcXQ5WE5icmRUWjF1ejBjL0VXcDYxOEoxOVJzcldxZEYzenMxTlpVWU43NU1HaExzSDJmUzJvdmswOVNaeU9wclpxbTNTek94cmxkL3BCMU1saTZhbXNiY0dMenordWM2TUc4OFZBa1J4UURoUm1pZ1pvU0ZOU2lVVksxZG00cXFMdjZrOHBxSEJBbTZhYnJZMU8raVRVNnNmdFVyMmNuSnJ5TVlrSW1na2RqZVE0eFVOcW55bnFhbmFtbGJtN08rK0dQbFBiMjltRHZxVXlWOE5WdXo5RWpSQk5qU1dSZ00wNUVxcWVpbkRETnZibW5OMzEyZDU0cEU2V3UyVTFaTkhkbGpQUVBuVVNESHgzRHVIa3dhaGxxVXBvakVlbUdEbzdrZEwraGJFNGRReWIxdWxkOStFeEZGMnVuSG5sUmQ4b2VRWnI0UzZjTytqbmx3RzhTc3BaMFh1THVJVDR1MldHSXd0enNqc2U3eit5bHlOTVY4b1lKYW5kdnBxY2IyYWJ6d2tRbk1JUk5ROEdTSThpR3BvNU5PYXN3eS9lMnBjM0JiTXFONDNWOHFzODc2REloV3pyOXFHcTZuU3U3NDFMb3dkTmVOUWFpaE1oc2NDRGVvMUNLRDlVV3prdmcrbTducGR0TjZkYzNjWGZCTnNDRXJkQ2V1TGp6VmRlZnAxUWx6ZVY0YVFMbS9WRnltdDBwc1ljbTU4MXo5Uk1iTHBycDIyN251cW03YjcwRTFqcWdtYnJOQmF1L21SMmFyd09BSk9TMGNEOE95bVpmMDR4bElwM254ZkdvMnEyZXRXNVhVOStuM08yT1JobFo5WmswMjV2UEUyUXBGOUhlcFJlUU1JNVlmYjVmR0Uxbk9qVytUTVM1Y0VEbFdScno4MW16cVhXM2VERUZHUmZVSWlacVZPOUEwamUvTnlwMlVURGR4MHJQOGdwcW1wZ3FxRnpaWWQ4MWg5TktBKzNqc25mQmxoYU1FTU1nWDhwaUZVaVJHR3dtdGwwdzF0MlM0Z2U5MkpUNTFrMU4rNUs3TVZ1YjN3b0FYVTFMMHowT0I0OWFlZVJ1ZW1SUnpOaE95NXVsWFQwMTZDQ1duUVY1N25SUzFpcHgxbmdKYUVRSU8wWGtFMDZVVUlPbHllT3h1RHB4VTRyT083K3RySXV5TkZldmx5VnZYUndyNzRBeTRVbzVBYnVDQWdEQnd0bzFoWUNNUWcrd1pJSVhCMFJ0SW9iQTdvNXNaaDZrWFFvd2lzcUtHdU9aNkpJVW1NaDAzYVMyVERraHZKVDdtbWtrcnhhR1BUOUlPblZXN1JZMzJMMWlwMmxUL053WWdlZ1lBZU5NaCtHa1ZRMER1WFRDM0xOSkdVYjQxMDdjV2J1VnFTZFd6MXRYM0xOS3JubzMrN1d0bi9wK0VIWXBuUnp5YU0yOHVsWXJPUDFjOXljdVJSUjZ6MTFPemI1NVZmVXF2dmMzbnk2THZDMUJNaTBMS01hd3h0WVIwVEJzelBQVzBZbW1xWGh0dmRKdmNYWEs2bTI3dHFlUGJWZFNXYWlsOVBXSm5TZjhra1lXQU1TYVBDVUhKcHhOaVhsK21SVVIzTnZLYTZOOVgyTW83NmJYT1RCbWE3bHU3cmFYMmVYN285Y3UyZHljOUJXdlB6VytKOFlqSWR3MGhKQldqUWpJNVVHbUtKYVQxdmNpbHF1MXVxdWU2cnVMNDJXYjhtYms3N3o5YlVwZk4zaFdCZlFJSUVZdkx5Z3pxZVVXbUJyYXo0VytPVDByYkhtZTQ2czZ2NDVueFNxcS9lR01LOFQzRVljUy9pTWF2WWcrbUM4dHQ5dXFhT3V1YnJyajB0UjdyT3Irblkzazc3a3AvZGsvbmtJYXhsTWc4eGdIbGRucUQxR1kxdFFSc0k1dEZTdTB0MU5McVZ1amQzMHMzYlU5TnQ4Nzlqa1Q1LzhQMVdUdE42N3dvb1FBRW1CT29IUkRaQzVsQzFoVmxJV0pHVWpTRDlFcEUxeGYzRDh1dnBrSVdOQnZOOVp1dXVJU05KeEFwOTFyTHBMWEZxMFltTTlabDAzQ3BRSnBQdTlFbnJrVlFWNDNwWTA5end2NE1XUFFIUEM3aitER0dxU0E4Q1VEVUZjellreDJVRi9YdzZoc0ZGMXFTV1BKaHB1dXQwbUJ5TkxSZ2JwTzY1dWIzMEV1UzFPK25lbFJKMHo4ampuZWdFd2NJQTh6U0RSZzlsQ2o2V1ZwNVErTEY3R3FXaE4zYzlzMFZyY3F2M08rYVN6a1V2dEVNazZJNUdSRUtNMFJOSWswNmkwWUVUVUViK3VFWHpEdGN2ZktxVlhQSHQvSjlMK3VRZUpFdFJwa0RKdTBqNHUxRENYdGRab3pLMWRNSnB6ZlZOeDQ3djhyNlBuL1JFY3hhQjNrOUZ4Y2JFM1U1dkJxT01UeVBkbDBhWm5KMk5GaTVwdS9Qb1BtcXpJdStBeU1pbkhhQ2JpNWhaRmJWb0pZYWZiTnN1bDdiU08yK25JNnF1ZWoyejNwWW40dS9JcGQ4eURXTmpkbDZKRlJxd1FwWXhHTUhadkk1V3Vxanp1VU45cXFFM04va24vY2ZsTDRnaGhvMGlTSWI0Y21ST1I3QkRQS0ljb2ZVYmhONHI3WnpkSzErNzlyeUVKZ3VORVJhOFpCVTVzRTZPWUozR2lDYmw2cUZRdmI2NXExVnF1VjM4NW55QzFxNno1RXB0QzlveGxBdWdUaUZrdjJITWJYVnNNcU96YzliZE43N3RsemJ2aytxclBJUUhDc2ZDYlExRWhHWm9qUm1hWGxtVWR4U1hicDdWRTdERzZXczY1WGQrNUwrSUoyTk84UzRTWWprcEl1RXFNbm4wN0tRdWl3d2JzVHJLbFJGMEdsS2xtNmozZDFQamR6ZDNjM2JkMyt1YzJsOC9WVkdxOGNCSnpBVTZKcXJtbVQ2S2RZbTZjb1gzVlVLZk5YTHBvNzd2bkl1OXgrT3puazBpazE4RkIreWNadlpwMlIxRWl1Nm1FNU92cm45UFh2SGR4czd2NVMvNFZzTWt6ZXdYSTBWMHdoUk9oeE8wMXZYM2ZIWFR6cHViNk9OMzdrdjZseFVmOHZGSU9ZWmQwYXNrUkVNSzJzT2NnUWN4Y0g3VVhWT1hLM04wcnY4ZE8rZm5XOFMrYWtjb0NwRHpOUXJESm93eU10OVZQV0lrWHJQZnJlNnpYUjd1aml2cHY2alh6V0pUdDNqMFhqT01DS1JnSVUyOWd0Uk1WVDczZWozSFZYMHVkRnpkOTFxdGpjMzhVdWVURDdsVHZXWkdOR0w2T1VodXgybXU3SnN3bXVGUUxuOVZ0M25IbVQxbnR6ZjRmejRuM09pN3lHUTJLVEVPWGpqWnU2eTdYMHlhSXR2ZGw3NTU5ZGZkSG05YjZ6enY5MGM4dkY5TVVFY3FFVDBOUWNtYytGVWlmWFAybTROOUYzNXNuL2NmblA0d2FpaklSREhKNzdtRVdYcGs3N2wyeDFYVWN5ZW5HN20vbkhmZ1pDWDFJbTFBcGkxRlM1c09ld2ZDV2FsRXBwWjg2ZFpOWGM4NjNGYnZkdnBVSG01TFJJUmtUc21ncEVCRFQzQ2QxcFF4YThIMU5ON0xUZHQ5SG03djNKWTU4MUUvNG9CRkFzWUhYQkoyQlpSdkN4YVduT1RSY1V5SU1xUGxBMEQyazdyWjR5S2lUb21KeVNHWnRIM0dEVnMzUFhmTjlmNjV5VSsyN3hlVDZJN1owZzc0TldBVkNEQ2dOMEl6T0NWWG9UZ2lSR0RRYWdWUW14VW14MlhPQkxTdjFqdHcwYWIxMGtBSjNsNWFrcGtoU3Z3OWtzeVVkSnhJOW1TUTRLa3BheXZSQ2xmMVJxTG9LNkRIWjRHS0FTdUt3WnlrT29ZQUJMbWp3OEdEV2U5b1FvS0NZTTlxa1VDanNqUTlrcG1wNVNQUWN6WFFucjdKWktaSzVtVEU0Wlp1VWh3Y1VuaTZhM3ljWEpaMldFVGIxV1BWMFFOZWdNRG15OGhQS1I4d1VHKzZ6RG9LSGJMNm04bXI1YW85MGVkTlQwZVZVM2Qva3V4cy81L0UwdWpuaFlTS2ZVRENUbVVwcEI2TzFLTlo2eUkwZk5zcjlkOTI2czFjYzN1bnJqYmZUM24vZ2ZqVTU0U0FKV0g2RmdJaUl6Q1hBY01WSk5GK3VmQlFuR0lTeFJnVVhkclp2elhTazVmbzNMbzNmVGM5VGZSdVBPUzA1dmZQMGwxMGFmNGNnRVlDS0RuQnBwZ0Y4SjdJWnhQYWRCNkU1MHhTRzY3NTNWbldwWk9EZVdkZGQzWFRaaEc0NWMydk4vcWFuTnU5Q1FvWkhKZEd2RHhCeEF0NmczMDBvekNXRVlZSEY4MjR2TlJZYXAxN1BUVXdoS1F4WFpuWFdkZDFuZmZXem40VzVtdDU2Z0QvZzg3QnFqMHBGVU9FWUJmcUQrNmJJNVVVd2c2bnpkWGZkYTlycXNMUGVHUXdsbDB1K2J4Vm0rQzRnZ2hkR0tvaHJZRDJTMFE1MVJ5S2hsRTN6Nm0xYnU1azV2amViblc4eWVWWkc1NlBUQmcvcmFWQjU4dHFkOGhBU2taSVQ1T1BsNHRTckRqZGprVFJySTJyd2cvZGp6NXVXamRydHUrMk4zMGJPN3VOenNQd01tbFIvUElZSWRBM3hPREpSV2FpQUNFYzA2RjlCaWhNTFZldm1FN0NhWGp5OXoyMTBldWI2Ty9MR3FuZlJFcVhLdCtRdlFTNFUwVUVBdVN4bkthT3lpNUljNFZuYmZ6V2ZuVWxieUh5SWdEQXFNelU0dHlTbnFjbDg2YWtjcDFXWXJkT1lrNzVESXo1WWVyMzZINGJ3cktVKzlNSzhPSW55bHgwWE5KSHgwOVVrZWIrWFo4d2VkVjdnMEFZZ2VvSXI0amlqS0c3T1NnVE13RzBqNmV0TTBZVFI3M3h6NWMvVlZQOHpEdENiaXFUYVhJZzVnbHdxbVdhbXJnU2ptbXVxRzZxV2trbFNWNTQ2dWI1dlBkdXVWYjhpOGl3L0orVVZCSCtlTEFDUXc2bENBekpnOERlRnZKUlBZZk9tQ2daU20wWTNiTkt1NVk0TWptV3F1ZGZHNzVjNzZQZTZCTVY1K2tNaEpXOGZ2cUFjSUphOE10alJuRU1LcVJxVUUzWkZLWTFFZFNZUzlWazhwczRTTWxZeDczUXhYWHBTRzl6ZFEwOWQ1QUFpRmtRQkZpSWhNZ2RFUVhWTXd4aEFiR0hDV0haWjdlUzgzS1JVTWx6Q2Vqa2JsYzU2UFB5UE4zUFN4OEJmeE1yZnZoYmdKOUZPc0dVYktFWVVZV1VyRWUzUFpIWUpzYnNqMllrUkd1K283akppMFZEQ3B1Nm5weWJWYjU5aVQrTjc4Qy9IT2JSSHRlRmlBazFjdjF6eGlGWVVDU1VFYWVHMk1ZL0VsVGFxNHdpeXZWOWZUczFQZEpncXB1L3JvMU5ZNzlXYzQ2ZDVjQjdndkFiZzZKbUJoSTZNUDRaT05wM1VJMHN2VXpTT1h1MmU1ZG0xMU5xc200clQwWEhYZWZUSUp5THZQbzA2RFZlZWFBeHlOSnc1c2luR0kzR2ducGpZdmR0TXBHakEzdVZ1cnV1YjZiam5YTzMzUjY0MGRkK3Vqa3BYNytvcGRGTDRITkZBRmpCTElzeGZDVWd4eExGWVBnV1lvUWlrTUJwUm03UnF3dXMrZWFVbEtsblJzd01GN251YU4rdEpOMno2YkpkSE45NzlUYk5QcWMzd093RlZXQmRDRWtaQit3ck9CZEJCcHk4UkJ4QktrTlFKWkdhV3llNmlvUFpIaXlQZXpkcUo0eEpOckx6YzIxWncxSGw1d21IL1JFT2FiaEhkOFJFREFBN1FaZ1g2RTBPWStrZ1d3K0NZVzR3R0FKd0hPYkpLSlltb1RkZE5sTWV6QzJSdFNkM1FXYWFYSkVqMHBhNlRlem15U2NUMzAvZGprdWk3NEtDRWhQNVc3T2E1VlZlRnNBd0lFdWhlUXpTY002STRTQnZrczJmRnczRGJyUmdSalpkKzExMFV6aWU0NUh5NTY1NjdLYWxwZGZvZEpqWmhjYm1YdXJQMEVqSmh3aTV1bmVNWmluVVpLaDEwaVEyNmE2UzExVktoaFZxclp2TFBPL1BkRkw1Y1NWcVRieDk4bzU1OHBvYkNyZE94Y3FoL3VyeFdrTkVpZnVyazR1dlpxWFJSWFRMR3ZWYTNoWXY2eWMvYzlFRWxNK3BLbWUwaWVvWVJRTkVibUZ0UlFzN2VxNm5SclkzK1o3cW5QSVF4SVhPUVFUampSdVVEN0U2YXRYZDA4dXB1bnpWOFY4K2N6NVBuV2VnTUVLWWNKUjVNSUowVTFMb1JwSHNjMmNtRXV1NXZlam56c1hmSi95Y1h2MU85TGFmbkUybU9wQWFzdnpuM3VhMitiamQxMHVWZEh2bDJmanZaR09TNCttVFdMNHZpb3VjcnVUdzJQSXU1VmQzVVhYYnBjcWQ3cXpQbXBQK3NvR0NIY2h1Y1AyeE53VVBwMDR3L0tqVzlQWjAzUFRxcTV2M09sM3lGV2Q0ZXhGY0xBSkk5S1IzR3NFeEZub0kweUo5UDdxdHZsNXR2T25wZEc1NVYzcXNqbnlsbld6L2hJU2V2VUdLVUlJRnFMSmhUSEtGdEk4S210ajFhZGRianJqeS9sRG5uOGNxendzUVpPME9teVlGR1U0eE1NeWltRnVscWJ2WFYwTFc1MGU3dVZjMzFxcjl0MzYza1hlSFNVQmhDU2s1UVIwWnFac2FwaW9RMnlpMUYxTTIrYmpzYnVPVFZXZTM3YVg2U3VwdDNnOWcyaXhSa09pbWlUck9KckNKOHdmejdadW5kTHBkQ2Q2NHVtL2wzNmcxMFV2bG8waXdOQzZlVWxwZkk0emMyaTZUZHlQb0YzTjExd3BtMWV4N3B1ZW16cS9uUGwyL1F3RVF1QjM1WlVITHJTbHFDVVVIazQyVzYwR3pDYmJ2ZGoxdHdLOSs3SFNmbDN6amo4Y3p3eVIxSXhiVHk1NDVIMCt3dWVoTHBSeDI0ZE5Uc2I1dmpxMVYvTlRudTEzaW1HWG9JOVlGOUpMbnNRaE1HbHBydW0rYmcyMVBYMS8rT09uZVF5V1Qwd3BrQ2dZcVJQTmtXUE5DSkNrZTNzdW1wZnM5T1gxemsxT3QzM3ppdlBrLzRJaEE0WXFSNEMzQmNCMWdKVWR5bUtjYWhPSklJMlpJN1dQSTJuQTltS3lrd1NXdmNzbTVUT0ZybTVkMDh2WkxzZXA2YmFsZjA4dWRUdkYrcFN3VFlkTzhERndmRWRRL3dDZ3hnQ2RrZ251b3lCazBmTGxKRlM3S2lDY1FzNG05Rm8xdDkzWGJSbGF5UWJwNWVOOUpKNVNxYTZlRjQvTHFuYzhQSWNNMkVvYVZQSysrUVJKTERDSGtnREtUM3hRM2x0aWFLT2JSUWIyRG9jMjFUdWx5cSsrWFRqdm1qNS9KZDRsUTBUQ2o4aytjTGx1TjBWdmVzK1dXSVpOVFRxbC9UZkhXdStYSzg4L1RtODlTeW5HSWlMRndlT3JJMXFmQ0RHU241dmFiZlVkeHU0N3M5OG4xV2ZtUzUwdThxanlvRlFoSE13V3lJd1VhOUEyTmRxblRCRmVYRmE2MmJudW05Tzd1MitWM0x2MUxPSDVwM2hyME5kcUVMbGhnWkpFb1ZudjFFd21kSmQyVTZPd25kbm84M1U5T2RQSytudjAvdmtHVUgwSlVpbTVOaHFQa3lLQTV2elVLaGJicDliVzFONzA3OHBkYzc4cHlYUENXQlBCNUZZQ1J1TlZLZ3RHUVN5S3BoQTQxRHNzbXZLM21Oc3Q5UE51N20xN091YnVaUy9RdmJPUlN0dTh4SkFtQTF5K0FrQXpoZmV1UWpPb20vVSsyVFk0aFZ0ODB6a1dUdTdqYTlxcnUvK1hVNkxuZUJCUWZNTVFRV0JTQk9MVDZaRkpzRVNBcmxGZFZzWVU5WU8wSFUzS2dyYzN5dnZONXpFRnk1WG5GaXZDclpHczhFeEFsTmhsTTFEV2syd3FlMlgxa1hTNVZoM3Zwblk2cHlkanZwZGRrdWROZUYyQkpiMklFOUNtNkdvTm5rMVVtaEZ5cmFQTG5KZCthNmNuRXJidmsvamJ2QitCVkpoU1FVVkNrK3BtRURrVUVhRkRDRTdUc25xaExNMmRPOUtsaWxqcDI2YUsyTjc2cDBhend1SkNKeWpUZE1mUU9tb2JPeldiT3Z3c3UzM05wb0hXZUZXaTV6dkI2UmxwUWwxT25SYWZlUXQ2dHhFaTJHeDE1MWY1anBkU1hYTjFPbGJmbkpjMjd4QkNNT0ZFRTBUb0VDS2RtNFZ0T2ZNSzFGcmQxeFk2YlY1OEtTdWVlNDQ4Y3FkT2VmMC9pWHhZa1pRZ0hOaWlDV3BhbGd3cnBUMWsxZHpiZk9WOTZiWVBsQlI5eXF6eXE5QTlCQS9McHlPWnA1dmxNU09zNndsTGhnTld0MmEyZXBkOTBoMlhLKzc4Z24ycHg3OWdkUWwzeWlRSDAwZGcranFpem5oNmhLUjBNei9QNUFoU1hpR0VNNXRRMU5hZE9MR1p4NWYxUm5zVCt4dWozZTlOSWo2eVV0YnZhZE9mTjNSN3ZxUk9qTEJOQW1rMFg1TjlXcWMwMU5YUVo2RnVWYmMxRy9JS0FoYnVIMHNlMTZ1RWRqWHBZSno1K2NQNU5PT3E4MUE0S3lGUW1ZSVpnbTJ1dXB6YVJiTUszYWpSMjZOZkJFbHBseE5xbTlQTURGMTlKWjI5dmNqbnNFcDR2VlJDM0U1RU5Id3FGVmlKNzY1em05cWM1M1RwMTAzNkFnNUNMMHNKZkJ4MVJYZCt1bXB6WE9qWGg2a012RE42Ukg4cFJERHNIekNhUlBxWWJjNDI1dStqZnA1Ukl0akJSTlo2QS9DRWFlaG5QMTRsbjFzRWJDR1UyenNKVFI2cVlZbW83TlRENjRZSHBwMmozSTZHTXo4SWJRNEgyM25WZXdNWWtEUVI1TnBFd1JFNnlldGx5TnQ4S1Z3bm5ONGViTi9JcEMxT1F0SUtIWGEvWXVyOUVjb3RpWGMrWDY3Nkl4c1JDSEJGU05Ld2hSUGZ0cUgxZVZkYTNzYmpjOVYrNXdwSG9NZGptNlZZVjg5MDFzMW5zQm9INkliVDBKYnVKV1VNc2JMN2wwd2hMbzVVMXZLNlZYN3FwS2dZZlZOd2NxY3F6ODFMS1o4cGZRTEVKS1lJcWNYeW5wblp2RjBLS1VVM3FySjUvTjI0NjcwS2FVcUdzMjI0UmROdUsrYjZkOU9oTk8yTGxlKzVHbVdKekpEeDZWRXJxM2IwTGhmSzduWTN2NmdQb1RPcHFFM3IyM1JoRzhQSGJHdjFMakZicVdPem5teEhJUXZKcDJGYVcwbWZzTlR5aTFpbThtcGROejM4bVNuNHZIQ0IxamRlUWlFK3R4aDd6cW05OWdsTGNtdzBvUjE2OU5WUG5wWTY1dmFWMWZUZldkNWM5OG9xM2MycXFhUFhsWjJOdVBIZTZHT3FhblpkN0ExaU9EeFFJWlRsNmRhbjdOMm5RSVdkaE5ONVUzdDlONVoxMGIrQ0UrbHFPb1pvOTBzVjc0UW5heEJ3Ui92cGhNbXhNQmJDRWlnTUtkb2hSMjZsQTNDNXR0L2JEZHVjdHV2ZHBuU0NjMUZNSHQwZForMWU3TGo3RTNETW5HNm1GbmJvMDI3M0RhVDZlZ1NzRVZhcmMrVVdzM0RHSnVFSTNEZHBVNmpySFQzN214UXB0Ulh1VXExdkpvc3UrYVFSVGtHb1lXZDhTQWFHMllFSnhEWmxQcGRMbCsxQTZLS3V1WE41eDNYa3hQS1pCc29OT3FPNnc3eFc3NlF1UUpYMWpibkZiUEVlRWhNelEvSmFURUtDazhjeEJPT21xbUNxcHFjOTZaTnVVL1ZkZmxWVG8xNWNTUmxEeGxHNDFHSWhwVXlhRW90bmJqejJWZXp0cW5aOEhJaitJcGhkUmdkVkhTdFhpOFRHSFR1djdvMGRiRnhXenhLQkxoaTB6UHphZlZzbnRSVGNObUQwMVhCVmNNbTJiYjM1UmtMTjAvTUplNThHNkxMdGIxMzEwRDlUc29uenVLdExPVTNYalNTaUVPUmFXeWllOGNXRnpUbG9NT2ZOemFxK3VjeU93bTd4dHlydjAvczdaOUxHRVhiSGZxT1ZDWFJkNHpDWmZhSmhFNUZUMFNOaVRCK1BxRjlNRlZWSFcrYnllbmxmTjM3b3BVRDBHS3E2YUxHZms0ZlN3eHl1L0RYR1dSZlR3a3pmQ3pQWnVDQ0RHeGZCODAyL1RycjVWWjEzdWx6bEc2bGk3TnFjTzlJSGErbTBUcWNxcndONEdUankxRFREazlKcmFwRGtscmVRMjQ5VGJvNDNlWDU4L0xxWVA1amRhQzFYZTUwVXRTNVhYaWNKejJHQzNpRXpPb241SGtPelVIdk90bktqMXgxVnpkL0drc3VTa0dFWE9WTzgvS1UrM3RlQnhqalM1aEZtWm1wbEQ3cE02ZG1uN05xdHZXNytPeW1POENPNjhNaVQ4bi9GQ1BSTVQ2WFBkQk1tVHZVV3lnM2RieXF5YmpyaXZ6dlBwVDgxTlk1Vms2V0s4L21uMHNwWnhVN3c2QmFtcUpBTU5TT0dUcXBCTDJNanA1dXF0TysrS1dYZWZrL09SendCN2dUQVhHQU9tQThnTW9QRlBxZFJ3UmFCUUREMEZUbXFNZXNGTUJYVjlHbFY3ZUcxbmZUcDFma1orcHJVSjZicC9YUjVrSDhXYjMwdzRpT1JHbGpBbVRSVU0yeXpkSzl0Zmw3N1p4dDBhMXBZNnlNRHZmQ3dyZ3dRRnJob3lTQkFIMXlOejhRbUJzZ1RUWnlNOElLdVNLWnZ1TUo3bStXNmVYNVYxKzUzN2lEVDh1M3hFQVBDSCtIR2ZhSFlZeFR0Q3pFMmF0WTZ5bWpmejJpSy9XN2VjcjNjVERyYnUycm5rbksyYmJ1YVN1Vlo2WkZ0UlNuNDY3MkFYSGpEVUtGTHpVSGRkc2NUMkhVeXV0c3VqYm1jbHFlM28wK2VtenAzemp2bXBkNHF3bHhrSzdyU0NydVErSG1hYnJ1VmxFbUQwVUl1cnRmak9YMTlmVFhYS3lycXJyL05TdDU2V3B4TExrc2M4VEprYkRhalpFaU1ESTVrTVltYzVRWDZ6eU5RbzFyVytydFd6cmxxZWowOWNiNDk2NW5aeHZQb2d6VlNmZDRFTkJKb0ZOUkJweE5VSXhnNVF5WHYwWUMrWGRSUXR2cDZXYjV2b3Y2KzVYczMrcTNlTHpvNU9lakE2b2poNEhKZVRlM3FCSVhUNFZSYWp0YmE3T25aclk4MzBZVDN6c3UrUmVjbFMrOEd6RE1XZGtvNVJXK0Q2ZnlkQ2lmdVM5dlpwMHUyNXI1VHBma2hlQitrYUFHWEQvSGtPTnc2TU1Fb1FtaTVROWRSMGFNQkF6Ri9TTktsYTM5Y2VVcnNsSWFvOVBYZG5FOU45eTYzc1lsMnAxenZES2loVFM5VTdTdm5oRndNZ01ROGdrNE5nUG91RFJZTkIxSndsdUwybEtJdGgxTXJwQ2wwbUMrdXZKMlZKaGFqbDducmpaakpIbTI3N3lGcVdYU2ZkNU9mT2JXdWQ1Y0RMQTh6Qk91eUlOSTZvRUp2YmFJWUVqVFNwMDAyKzdiN0kwcnViL0V1ZkwwdUpmTndwUUpYZWdUb3lHREJqMjA3cTF4ZGlNbEZLSEk2ZzNzZXBhT3ozeW1wWHZwYmdyZm4wRkhDNEZvamlFam9ieEFsdFkzcGZORE9wdC9TNm82b2w3Uzk1MGM5eVUvbnlpVE9WVm5xQVp3SDREU2VuUUxoTngrVHpDTENlRkRXMHpiRTdVMUNwaE54clZXS3I4K21QcW5mZ3ZKMENwKytuQ2NCZENhVFMwM1FCeUN6UkVRaVBsOEtzeVV5OU5UZVMvb0xKSTJlZHlxdjEwbjI4OC9VTmlsUHY4VFFhNDZDU1VNSURnVFJVV1FJN3BNaFJFOGFHbm9yNXZYM1BjdEhxblB3L09lZlB5ZmJ5dkVFQTNvOWpzYW1hY0pDU0NieGRVNjU3Q2k0VTZXbTYyY3ZZOU5XV0lmdGZKL1k1RjMwRXhLaTRaS0lSdzZCbnJjYXdSVk9wcVdxWU42ZFB2dmwwNTdxMVVsZDVQRGNGT0Vpa2hKa1F3S0xoRHBmSmFuZktpYTF0MDNiK2IxVmtiYjc0NW40Z3h6YnZCY3dtN1JLU0l4M04wRGlHSzQxUm80TmE2bjNDMXBxY2xKMXQzRzIrNjFiSjNmdVB4ZDdueWZkTzQzbnRCcW9CeUIzeTFvK2dTMnlpanlKTzFWMGllZGJQTE45UE4yV0wrWGZsVG1UbmswRnd0S1EwcU1QRm1XSmhtMXRvaldhdWNPcnk0OU9uZmZIUGsrNTNoN2hJeUdYamoybzVjVzdHNHFTMUhBMmhhdDl5OVgxNnI3M2ZzbjNlYUY0Nm16eUVpNmtJcVNhdnNYNmlZcEVvMmVlM3ZYczNkcW5SdFZmbjVjNzRwYy9rZzZWY201RE1PcGdodnBFYUVRMTJXVnBxOGJaWDJ1alpXN3UrTHNkOHV4dlBJZ2VSR0N0RnFZdjVJaWQzWEJudWgwdnBtQ3U0OGVPdVBLM2ZOUzZPZktWeVYzcUExUkx3UklrVUROZGRIc2NVUDVIRm1VZXVWVTAzMktzT3IrVXVmSit2R2NsRFNpSVNKZEdRcmNNc0wza083dlMvZW5ZM2s3czkySFhYRy9TcGQrcXBzK3FkNVJJNVBJckxGR0JuUmIwd2wwOUZRd3QxVFRiclZYWjExeHR0eXJ2ZGp2U3poL1BGTU1oUEVpa1FDa0laUVVTVGpUSnRSYUR0NXZvNUxLMW5WMU94Y2RiODVIUGpqbmVPQlNFa3ZTZzBRNnlLemJOYVI2KzZtdHBSbXpmVjA5VjNmVHlybzlHL25GVHZsSzUzanFMY1Y5RTNUNFphQ3lKYWVFRVNDRm9JR3JLTExiZnpYTnJYVGV4NjdubzU1OEZyaTc5VGFxZDZ3clIzS2huS0JsREJSVlZMMmI3dTZFM3M3TlIzSTNQUnFlbm03bS9TbjNIL1BwdEpua1VOVW5EanlJaWtVWklOWW1qVTBYbzU1bW9kVGVkTjNQVGJlMmRkK2I3a0NwenZFMkRKaUNocERzSklQNE04M1VBdmdxeG1LS3dxUkpqdkp6WXpEdU1wdXYxOHMwWThZWnh3WWN0ejU2K3ViNzgyVXZndGI5SU96cnRsM2gyQzdUZzk2NHdER0lBVVNRakYwWXJ0YkFkeVNaU3VTUlpMUjJtcFpTU3ZKaXUwMFlRNnlvU2VYWEpSeXU3cFhYdHFlV09OaTcwU2R3NE9rK2xiaDRKaEJENEhMRmdIMnlIK0UwQ2JETzhjeDdOdWtxQnNsRVdITGtvWlRmdWxyVkkxY3A1SWtNU1YzZEd6RTNVbTdTL1YwOHp5L1hkME9DV1hSemZnTDc4MmRlOXZQRFNBbFFjaGhTNDRwS1FPY0MrcGlIdHh0ZEpJc0dvUGJ5TnFScEpEUys5YXZwVXpaMTN5bThNZ01wS3EzS3J3elFQc0hFaVdxQThpNUQvS1p0bFpVQ0tSeVVSekJJOTg2M2RxZU9HbXV1YWprZU1iang3MHlUTTgrQnVucWt1K1lnNElVaEc5QWdJNGJ3aEFyU2lucXA2RFFmdTh1YThxN1pTRWNrcEdYVzNrYmxUMDJyN3Z4TnYwUTdjcXJQTGc3UW9oZ2lwYlE2dzVVWnJTQ1h3S0FzUjVPTFpZNm56VXNzNFV4OXRKUEhWNHROblYvTzZyM3o2SkZTcEZYbHdsaFFDYVN5UTF6RURya2RCVk4zQ3c0UjVwRFIza3JISDV1NHF6ZmRLQ2o4bjNPc3JWNU1IZ0pvanFlNEhxQmxSbjFNcUxUQVMzSTdSUzVXOTVKSmNyMGVYOGMrZFFPVmEvMkF0d1RZTTJ0VGtJRXhDYm5VVHRtbmtZYVIvbkoxWFQ0WU5hMWxidmtNalZidm1EM0tvZkFMNEoxeUpFV29CRUVVRVd3NkNGSFF5ajFOekRhajJ5L2xwdWQ2cm83NmErYVNxM2ZKblN0UDVEMDEwZzZ3WndkTnZUUnAxYnM3aXJHNmI3NWQ4dThZbEpFZGFGSEJITERFMU94MnBkR2xUc2dkYWQzK085eVYza0kvQ2tNYTI2M1kxVTBpcXFkaFp6LzlpQk9QN2FESFVsMUx1eW1sTXRlMnc4NjMvekV2dEg1MTZBaElSSEtLNnFuRU1yenF5eDVrZXVhOTMrTllXRVdoaTdZQ1JGa1ZER254eEhwRk9UZC9JbUxnMzF4WmpaWjc1UCtnVFFjcTMwWWk0aVl3OHNac0NESEk5YWpuZGVzTEtTT1BpMVBiZEhyT0YydmRWZkptblBxdDhZZ1RrUGFIZE14WGtvTnNkMUhJSlFTOUVrVURUbHQxSHJva3NwRjYwOHM4dnZ4QTczZHFyYThGdEVaRXdLUVIxcFFySWxoNUl6TXNUdWs0akhDeWxhNlYxUmcwdXV6V3pxcnBOL2tnNTdqT2xidklZaUkzQlpxMUdPZ2ZReGp5UTNvNWVzWENGaVpzZFpkV0trYTFsSmNla2k2clc3NjdqVWU2L2wydTl5ZWlZNlhacDduanFCMkE3QXN4Q1Jjd0RCSkM2YXRqazVSRStIM3hHTlUrN0Ywc3RYUEhLUmFYUzdZM1ppdTN4M2Z1Z21QcXMvVVNMVzhvOWQ0NGc1WU1JYmppUkVHajRVaW1OQ2Fka29pWEtwSlNNOU41TG9ycEZNdGRiT3gyRWVhTUVrYnBWM1J1WE1Kdmtob0p4dll1OFNRbkFZQUtJSndwTGd2b0VLbW9seE1ySTZZSFVhUlFqU3lVaDJIeHFkdkxhSDA0NVR4eHhqTEs2L2RQTlNTU1MxdGNZbVMvTmRiTTdtNUhQY2dRSWlER2tFWEhWZUJkd1BrRUdCZENHeUd3SjBWMWd3b2NtcHJlYkJ4bVVPR281SGxlK3VFMlB4VW1sbWlyUGNzOXFVbmN1WkxOWjNKREZlZTd3V3R5Q280bGIzek1jR0lScEJGOWVPNFVFVkl5azR0UkhCY1R5UjF5eXloMmx1dWpiV2RuSnZ1dU50VGNlajA5MDlPeDczYTZYZnFIWFpGTDVGTHBNckxpOE5BMVRMMHQxT1VXb1F6QjlUdlBXN21iMk4wcjQ5ejhpbGJTK2ZpZmRMbmVTQXRGbHlaRFpTWGZhMnd4Nk5RdkRIU3hOUGk2K1hqZlhQYzQ2Wm51L0tWdTgrbVY1N0JtaEZZWGltTkVhQTFMVDg3Q2Rld2JRbEZUMVdiVzFGMUJqZS9KeXZidy85QXQwaEpFK05Ca3hSSTAreWg2NlVPbXpTMVZOdVZjcjd2Y2wrYWsvSFAxR1FqZEFYWklwSG9pM1p5ZDYxRzNtVHJtMzlyZmM1MGM5dDM1Rkw0NUJwSjA2RFlFY2hJOWR1NGcxTWdZMlh3TzhtMjkrZFArbHBXZjgrTlk3R1pNZVhDa2gySmtTT0VwMFNKRk9JOWhxcUdUa2VuRHp2blhPL0NEdnNqVkFNMXo4WlVJQzQvYkRDWmFUVW5XWUxhNmFuWmRGcnB2cHV2Y1RQay9Mdk54NkdvSk93MFc4YzRLeFAxVnJNREcybXBwVTZyZnkxeXZQUjUwYnZqcnZkbjVycXlYZWFoQXlNYVNieGNNUWFKU0hWeUUwbTUwM2t2SXR3cWFiMjV1MnU2TlVkOVBlZlB6anZsakt5TG5lTTRRS3diUUdJbkdZa3hMREVYR3ByTjA5ZzFOMmVtR3Q5TzFjcjFzZC9DRDlEZzdJcFV2OE5BN2hjQjJLRkNYTVJ6VWEwK21WQ3hISTZtYjZFd2ozWE4zMGI2YlY5UFh4MzN5bGk2T2ZvWkdReU5lWkE0b1FjUExPbVpHRGdEK05VY0pnb2UreG9VMWoxblZQZHphODR0ZHQ5eXU3L05wWG4wajdHM1Y0YTRPTUNZaGlBc3RZMk5ocDFDYm9ldmRlYkd4SU1ISXBmTG5kYzIwcHZtN2pjODMzeWxjNTNoa0ZzSnlPZUYzQVVDR0ZCOHlJc0w0VEFNOEpjeVJreWQvRkZBVkJFaE9qYzlpbFMxM0pVS2hqTE04cTZiNk54cFgzeW5mWHdXNU02S0J4VzEzbEFDZGdoblNPaU5SODBKMlJaTHk1NktxSW9pb25pbW9YMllSdTFseklwRy9NOU94dWV1ZW5vOXpkL1RCOUxrbjY5S3VhU2ZuRTAwZTg3ejRBTTRZQWppVFJDK1VTa0RKNE1UVjZiTE9nUDVnVUdXVFh1azIySGJkOXkwOTJOck5YUFJwdTc5dzRVbHlOTytSZ1lwOGQycG83M3hJQUt2RENCV0Q1RFVQS1FNb2FheGZRb1lJQ0dEU1NGbnowbzIxbWppMTdYYmhjYjY3dHFkNjdidnYxUFIvejR3ZExwU3p0SHUrbEFuZ0lha3ZRdm5RWlBGcGhzNnU4UllPVEZ1UnpVMithVU1sUzV2WTBkMzhwNi9GK1Y1Ujd2aDlnS1hERGhvRnhDVDBZaWRvWHpCRktaOGtnSU9Eb0tCdS9wZGQzSzY2NHRPYTdyYjZlbSttN2ozUnZ6NU1uVzNPS3p2VEVUcVYwZTlmaHFBNElLUURRRWZvd0VvQ0hSRXcrYWNqbllNaEx4NDRlMUJiTzdHK1o0YWpocnV0WGJYN2ptOFN4cjBCQ05LUHhwQnVIYnZGdUhVQ2tBMU1Sa1lWZ25oRmdsUm1ubGxoUXBGa0c4UE5zemJmYXl6QlNrYWxxK21EZkt1bXU2UFQzMWlCdk0rQ0pRNVUvWEhsZUcwU2d2NDBGQktmRUNSb2pSTWpoVGxDZ3BrcVZuYmNJNDZLaXpCZnByM0pVRXVpZitxWXJJcHZDVUtSZ1NGR2hnTnlHTTBPSnFhRlBZTDFIVzFjdXVlclpYNmVtdWkrYm01NzI4K3BjN1BDeDJPSXNSMWdzUVhvRVNSQnNWQ2hqWXZtNDdOMitkaTZlNk4vS1dYTy9YVHUrT2dhWk9STW9XQ0dSVVE1ckVSdEZEVWRkYUpSTG0zSys2MWZkN3MvRDZ0M2pJSmxDRmNKNzZnTXFOQVVHT20wVHpCMHdaNWpZMU56ZFhIVzhidVBkMFhmT2U2cFM1NGJRVWdYeG0wdUtJZmhmc0tmVktDNGFXN3RIemV4T09ienRuRlM5emRxK25tN21TWm5uMExqOGN6dzl4M0k0eDdTSllnM3FlNmVpbXB5ZXRIVGRUVTJXSFg4dS9Vc3UrQndPUnFueGcwNUluUXM1TDMxS09sK2UrbFZiYjU1VmF1K1BMK1Q3dmNsOENDNVE1Y0VMZ1U0WnFCZVFySDJRVWFCbHQzS0ppTCt5dzdnUk5PbnQzMUh1K2I1SjlCYmpxQlpyeVk1TE5lRjdCNWVSSVdwUko2bUIrV05tcWhWVFVjbXB5Ty9wTTJqK3lmYngzelIvRXNjOEh1S1RUVEhKVUNXRzYvR0sxUnpOemRScFZldW50Nzh5R3h3cmJPeHI4bWxXWjRXNXowMUU1TW5hUXk5MWJLYXB5RnZoMHZWOEdNdjVQbjhuWlN3TERvNytaaXB6enpOVnU4TFZtbjBvNElDREM2cUhUZWFndHVHeTdWV04wVnI5MHBUK3pzN0xvN05aNldYU2ZsM2o4a2xnVWhyZTdTR29NN3lDRmJMbFZ4ZnU0cWQ2V2o2YldIcG02Z1dYZklWYkttdHB2SGVMTWtRTlJlMUV3ajUwTTJFVUZWRit3dXAyT25WemhYZDZYSjFCS0NEbzZXTWQ4dW1vNVhnOGdMa1E5UVNic0NQZW9aMThvNGJVN0IrVGF0OW5Uanp2ZEw4UzBuMnAzVldmaVZNZlA0Z3JZMTRldzBhSTRVaU1tSXJuYWxpa1U2M1VIdTFWaXQyL3NVc0VXbldmVkg2clQvaFd4cVFDbXhoTWZmejJiN3B5b2RMRlFtRGV2NDZvNnY1cVlUbXpVdllyc1ZZM3Z0a0dKL0c2eXZOaExiRmlFa0pDaVJRUXlpa3RUemxkTzNzdVY1TlRmZWdpNHpkREpjNTBLbXBjcXlMdjEwWHpTdDNqc0drVVpKdlNpZ2dxNXArMGhoVUlWVlRTcXFkMTJlOS9QN1lhNm0zbGFneCtlZ1RYVDZQd21wZ1Z0REh1OFBRRnlORXVQWVlUNmtUUmhqRnJRdlpVSFhSMk4yZVg1OUZDY2RzN040ZFZOZmc0VWZqVXVpN3ljU0tsalVxZ2hLQ2JLZkplNjZXV2hWSHRONzhwVDd0ZEtaMDZlUGY4bjNUVWF5WEhtK2JEVVc0UVgwV2tjWVNkVHEyZXFEN2xRdHFwMFZxMlhhZTkrdlZvYnZUeDBkK2t0U2Zpblk0OXlOZWhEUWtnbytsaGJiWWZGRlVIcnl1VnRuSTdmcFQrNmhkU2FwZmgwNnB2ejhvS1RZbVFSMHJROUFHWWdJSm9oUmNnY1dvVThKUklwZ21ocjJYSzhxTG05NzNwa3RRcDhJdW83eWNtSGt5cDAvTzE1bUVrd3c1Z3VRa0txY2cyZWVpMW1HelY3RjBWcTV1enR6ZC9wQnhGT1ZTcHgxcFhmN3NuY2puaDVtQ0NvUVllaGZVN3MwOUJEWHptUGMzdlRaMzNuOW5ZN05UUjVpcHl2UHgzcHhMSUlTUXBnaVJRem1JTUlud2hMNFRxcUUxNU5GNmhTSDdmdFR0YVdYZUJ1SjJuSjBydk5TTVRicEZUeGh2cWhOSUpyV2J1WDZxMmQzcHVlUExiNzVUR2MzYzZpck5PNEszRmZQZWhyTmhqdDJYSGJ2SVFtSlJDbTFRSGtNcjcyRlM5L0k4NVE1NnV0VmRkL1ZhZlRUcWU1ZHAwNmN5YUsrZm1PbDB1cmZJUXpta2ppV3BrSXBIRnNOcWFVSXR5Ymd3K20zOU45VTN4M2kvenNNVE9TbjRUV1kzaXB4QTBlMTdrcUErL0oxODc1RVNCNW9PTkVDYVNJbXhDam1DRHFVUXQvZE9SZmZJMjZ2anJyOTJDa3hORjJVV0svRDZKdkZXZUdTU0hrSUVpMDFpSXRNR0dJd1p1elNsQ05SRGxXOWJicTA2Ni9SUG5ZcG8xYkNyYXJaMTJlbjJUN25UdTdqMVRwMVU3eUVSbnlHUWFSaEtaQXl6RGNtblhsN08wNXZJM05LcTlOVGtFNWs2MnhoNDc1UzVzdU9xOFJ3a21FNlo1Q3RDN1VxRTBsSDBHRU05VnN6YzlVMjNhcW85K3VrbUlkUHE2d3JhNE1ibm4yMDNrSUpNeWlwNmNoRnBFVFF5RTVqR3NhdFBZZFFjUVBlbnJVOVduUVVXSzlCazFtMTR4aVRUTUUyak9TQ2hRSnRtMktkQkRVTmZyYmp1L2NtM05odTFXdTJPbGlqMTNuNmx6cWRPZUdnTVpjUnhmcDcwUzZLaWNvNVF4bk16VzZ6QnZwdmxWY2RYNmVVRXZyY210bzYzSmRIVld6V25UdmU3Y1RhZ1B4ckQzRDNQR2tnaVJZZ2lRTXIwTDZHYW5aMVFtbnBZeUVYYkNOVDF4eU5LdU9yK2dxN3o4WFMrWDFpdmZTb0V5cDB1Z2QxNUVFbUdVUXNrdk5MZW1UN2Rzb1pMdWRDMnIyTlh0blhXcTYvMGd2M1h6cmVvbTZtc2Izd3lIUXFZUzZzbCtxOGQ0TGt2Q0VHQ0dRa0Y2YWx6VDkyWGJGMEp0ODdYUjF1OGwydDJkVjZBK24yazlQbXAyK0RHWjZXUmVxQ0tvTnU1ODc0UzNrcXhvajBQRWhKaGZOTjdJcDRGMFVVRHAwOWYxcXJkZE5hZDErSU14MGF5ZGQ0TUF3bHBBaXhPZ3BoMVRVN0sxTnNUc2RuYXFjUGV2eUNsekhSeDA2ZDErUzVVN3hQRzByR2owNko4SmZPWFd1WXlMNE82YWp0SFZmSitwck1vcmI1K2NWWjRUY1BWTGVsMjB3NnFwTmV5NllSZnFwM1RrNjNTcXZuSTA1SzQ2cnovZ05TVGptSzRBRThEVzJSaklUK2taZ2pBRWNJOVJQMmFaelRZR3RCWHZQbEgzWDF1dWFTZFBLdWJ1YjhZOWRKQzZqcUZsZXUvWDZsVHZnZmJkVmM0NnlPWlpacU9ubGVDN2x3ZmtJSThZSTZSQS9ZVk80d281bGpIeTlYU3FqenIvTVZ1K25hbFZPOFpDa1hMQklub3hXdkllWHFPRnNYa0ZvUFlXNjV2bHV0cTV1YjY1eSt1YjYrdlBsMlo4bi9Gd0RhQkxpZ0ZZWUZrSFFRMFNNSzIxRFdXUTIyVkV3THpUT2hMbVdTVDNiMXI4M2tUSHB0ZFdZZGJhOHltMlhTN1AxRlRlVjVpQUI2RC9DMGdpa1lSTHFFeUtXcE5KVURyTFM4clJmcXJqQzE3MnJ6RlY4ZWRQZk9xMHZuMW9Kc2pWZUV0QW04UG5BekNPc0ZwQjZTU1JpSHlPVVQ4MGRZRzhsMXJLK1hNWktoVFh5T1RkejAycXY5aFRtei9vQXpFMHVqdXk3eE5naEVUZ2JDdzVMazRXd2ZScWxzMTdVWmNSeVd2THplZTUwc3c0NFVuTnN6MGFxVitreDZXVlhXdk4rbGhIUG91cWxXK1doMmgwQ1lHR1hEc2hVb0VUNld0N0k2aXZMMXBaZ3IyQmdzdmZUa1hLcm5yOUtUSmQ5V2hsMHU5R01BVUF5cDZOWWltSnU3VFNrVDA3U0lwbkRPdlYyM2F5MGJuWFR5dTU3MHNKejZSUHBVN3pZZXc1eTE4c0VVTk11WDY2ZXhacWtHeEpmUGl5dGRzdlpaWnZ0MmVoY2U1dTFWblhPVDQ3MHIwR051aTd4VUNGbU1ZVWpSbENtRWNzNnhCNWNSMXF0NWhMcTZMNHN4NitqZlI2Ym5tNzgrS1NUNnF2MFhuSlZXZVhDSUlVU1V1RWU4WlZHbHRQYnRBY1dYNVhkTlIyYVhTUjF1Rnh0dTU2SGhWb1NsOCtmbDNzaUhFVGIwaE1HV21pL0ZzTjU1cVBEU2lXSWMvZW05NlhYT04zamR6YzNObmQrZlRZZmpqdlN4eUxzOFZvUDhNWkpKQlREMkpvMnlPd3hEVVJ1SGMzR1lrRlJvWlNpVUxTVjNjdWtOaWxad3V2M1hmVGNtNlJwdW85ZlQzMURjMzB6cXBCdXk1dW81NHdCR3dNVlpFVGNpQm5nZTYwUGE0MW1tQkVoc3VhbkhONUZrVUhGYTV1MVYvSmJEWFRrd2NldSttU0M1emRlWEFPY0JpcU5DRmpJZElYV2kxOFdLbFlRc2JOM2VtRGU2ekluRnJwdW0xK3M2NDZ1VXFLTlM1emVnSks1N21rRG04ZnZtQURrZ213Z0llTmtab05rTG1zV3lhVXV1ODBaSkk4U1JaWm5lc3ZxYmFNWTdjd3llNjFyVlowM0h2a1J5WWd4eDIrbER5UTY2S1d0OTRoZ1NnZGk4dUo2SVgycVdLQmdZR3BocFFKQmpYU3QzU3ROY3ZKdmM5bk0zQzIyWnVMdnhQTlpOZWZxb1ZXdThpQlh3bVk1T2xHVVFOMmtJVXYzbUZERUJyWGh2VFViNTBhWjY1cWVuVHExZC9pZFc3M1BwWFR2Z0dpRkhGVWlReW5Fc0V3UkRyVE04c2Jza1lXQml3djFxNnRkcTE3TyttK2owdWowMzU5TkhJNXY2THd2WlV1bDllT1FNbURFZzhqQ0VtSXhUb2tEcWZLS2FJbytGL1hXemtYUzVkVFhNcTl1YjgrVEsvU0ZTWHc5UWJVTTRuck9OUXpoWDB2Q0NDcHB3N0dONnRNRmR5b01PNHIzNTlNNmMvUzEwdWpYaW5CdlJacFhxQnhJNklOZ1Z6SzViT3VlakZZc2sxOVRTcEdzY2F2dmNkWGM5M2ZPMThrUFpQenJwZDQvaDJBbFVqdm1qWWJsS1JGWnBuR3FoNWVvZ3ZDWE4xMDh2Zlh2dTlNaVRIMVZlUWhzNHZ6alBrYTFKK2kvcjdlbnFncjJ1dWViNXR6ZHQzODU4MWp2WE1pS1F5RXpScXYwRVdzU2dUNjhpZEMzNjNrM1U3MGRPKytkUytmZExtODhSd0x1c2FDa2hORVJZelJJMlljamZKZE5VK2ViZE92Nkx0UGUvTnozSDV6eFVEWUdZeUdUVmJsUVA3em9UQ2JidUNyYWRleHVic2dlK2MvU0M3eUVnR0VaN1VhT1FWblNFaGxGc0VYSW93bTMzSG9PcnA1VjF6a2J0dS9QdDU1K1hVM21lVVJBaElyVnhzUlZtaWV4THFpYXFPZzlkUSthVkxMUzZlN3JpNnA3cHR2Zm12eE01dlBFaVR3K2lrVENlUWlFYm9SVHA0ZExEMTlhNmpCZmVoT1hHbTdqWjEwOXgxMzdOZWZ6VXVSZDVDR2NQWWVRU09sU0RJR3FPcFNGTWpMbjJhSUJsUmMyMC9WZlhHNmI2ZWowYitMbmZOYnNYVFhocmgzbkpSSUsybE5RWEVmalcwYUNCR01MazRONVl2SXZ6cldpdlBIZDkwOStRcHpvdStnTnptTjU0TVFDQkJaRGl3c09vWlFIQUZTaUx5YytXSkhZV3h1c1NpUXpkNnFTTHRTWVcxTjdPeHU1YTV2RmQvcWFVcmVlOE1yWnlkZFI3bmlYQ3BqVUpFaDA4UGtMSXNoM2JmTHlPRzZaVFMwNnExZGszVXlrbSt0dDA4dWtON1YzM3lsK2kybk43dmx3SE9BNmhMZW1ZTXczakZsTWd1azltNUFDdTVya2UxSEo1ZThaTWpIcDZjcnB2akZwdXZuTjl5SkZTcDU3bnNnVzBFMkRUZFJnakQ0TVJnVzVIVDFDUVR3MjJqUm9KcUU5YXpWcnJrb3g2UFc3cDYrYXVlZGMzM2ZKOUw4cDMxRjA0ZXVkNGFvQlJJUzBmUjRRRW15RU82UW04N25FVTNPV0YwYTVTVVR0VFpnOWE5bkRCcm93bTU1cnBhNlhYYzN6ZllmeDMwblFiczA3eERROWhCUTJ3QUFMQjV4dE1CTG1va1Y2ZFlyMEJ1SlN5a1VTUXozVGRtODJwbmpCa3lhamR5MUs4OFlLWXJ0VGM4azVxbk9TdDU4TlRFRjA0Zzg0Qk1ZUGVUNEowK2hZalVZVTBKeGpubUpla0pGb3A3RlYya1h1YXRVNzVJTHZ4aUN2ZkQyQ3lpdko2TElGQVBnVmhQUThxVHFCMk5wekZlTjkzeWYvWWFyMzZOSkp1VVRYczh5elV3cDZhV1ZERUhUcmRWMDluKzNub3h4cEdsWXhSQmlhbDdvd3BiYzEySzcrVC9uOGwzamp3NXRYcUV1TkpTMm9icEJlU2lnaXVqeStxYzl4LzhuRXZtZ2VqQkVIQmgvVWFReDdyUXYybUp1QjA4NnR2VlhkL3prdThjalkwNUt3K2RVWHNhaldvbnkrTlpMbzd0cW5lZitjblBrTTlhWEg5TXk1QW1sOVM1RytFYWk2RlIyZCtjK2FkNUVEUVd1cU03UnZxQ2JhZnNFQ0NhMlhIZS9tZTZqL3BTK0FqejlQUVBpOXZYWk9UMVBDUHMvNWQ5TDVVS1FTSTlCRE5mczd0UG5UMTMvTHZOVU4xMEh3UXNKa0VIeDFGU0dOenFxRGRONTd2eUxzOUNrMVBTYmFmTHB4Rm1QZktMWjVGV25kY1YrK1V2dWQ2TWpwaUhtcDRWcUtYVk92N2NoTUR1L25IZkorWGZoZWkxOERQYXBQQ0ZUbDVzN0dIdVMvTHZDUUJKak0xSWFEVUhNUW5ZN0NuWFU2L1ZicGZ2eWwrYWxMNFNrYWhVRThVeGVSaGxETGdLY25tc0tSV1lMSTkxUjBEeWd4ZC9tZlZKVzNIL0RaRGdHZ0phajRwanlhbC9IQmRDRERIY2J5akpJbFkyM3NxRnVpY0tWZDNjOHZHNDNhbWVqYmVlZ1FWVWQzUEZrSXF4WnJJd0J0bHkzWGUxTEk3Rk11cnROWXY1M1dYcE9qZHI5TUcydWkxRzc2NU1KNmJtVDd2MWlYWkxpRDR6QmdKRWNuSVNZZFRKT1lFMjZ1VVJ1SmdjMlg1UFdxYTR2TitaanplTnJ0TDJydjVQK2ZGSXJ6elFQd0dRQjcwQjh1QjVSZkdzUHFCT1lpK2g5STFFa1Y4TzVWMEI1V1pYYTJPN3JmRlRyVmQxL0hUL3lsZkJ0TDRQUURaQnZCV3d5VUNZbEhCUkpVdFZMQ3hGSHg4bFFrOVVlblZGbEpkYTJwdWVqZDNLUlMzVGJYeVRNVlorMmd4dW91OEMyQUFMaW9rc25sTkVDNUZCR1h3UnUxb2VTWDFpdkdtRDk2TjJwV1g3dUkvVDAxRytsZnJWM0h2cUhweUhwK0tXYTg1QmhRc0lsVUpvR1lPUWowdzZpUVJ3N1V4c3UvZU5YN3JkUDVadHBhN2k1dTU1dWpydm5UNldPZWxlbVArVFNZbU5DT3M5QW5UbzVMcGRKT2dXdzVIMUhWOVoxMXErYjc2ZEZMODVHcGQ0WjVTRExEMFF1cUFacERMVTlwM3JTaXlkWWV6azAzQnUrbFlnYTlLZmpuMXM1NVVDMEdRem82Zks2Z2RTYlY3aGFtR1F3bDY4d3FPU3R6TFBSbzc1dS9jZm5QMU01MFhlSlFXNHJ4NGxDSThNOE5QUmdVRTdkUlB1QmRKU05ZMVZUMnZXWHU3eVhOMDNmTjU2VStmZDlKdDFzKzd4TUJTUVQ0RnZRRVFLeU1ZSEZGc1lDWE5wUklyRDdIY2kwTncyVGt3bTJ6a3B5WW1OeDZOeDdsVy9pV25lZ1JkQlUvU3U3N0FCRkVFSFBqWEFzd1BnRXhFeXpEY3JraUhqa2YybEQycjJvbUtra3BHaVZQV2RjVkZybnZJT1RuNlE5YzN1K2tBVWVEVmhyaElDSXlGcEVSRUhIblVLQkhLa2pveU1OZ2NDOEg1c1drYTQ5TW5CVjY1NVZhbmpHK2J1SzhlbTd5RzVubnlKZE9pbWhucEE3UWRRRGhtMHNQQmh4cEZtZ3B6K2RBTGtMZ1dndFRlMmI3bXpDUk9xUnVTWEdvYkcyVEZxNHVWZFBlNG1ROXhDTGtDcDg0ZDd1ZUVrRnlCM0FsL0pwQ1hBeDRUSVpSaFoyZHRFWEIwamFidldtc2pjMmNqK1k4VWw3ajBlNlZNOHpHK2E1bWIrS2JXOTl5ZTBHUnBBVnE4Sk9FSWpxUWhJem9talUwWEdibEtqZVhJcHhKRkk4R2xrZDlQUU1DVWJ6ZXMzVTJ0UGROODNmcG8xRjNvVTg2NmRxTHZLSVAwUEtsaVRUaUlZc1REWjdXR0VTazM3YWIyZW5lYWp4N2MzUGU3WnBzLzZWTE94eEw2Y0VvaW5ZZ1dpblFGd3pJMUZVYm1yMHlFeFd2TXkyYnVQS25kUFQwT091bS9saFBKK2FuZmtYbnlsblpxT2V3RnFEOEp5WkJFVTZDclRvSlpnOUNYSkx5cnMzcGU1cUt4MXBZdjUzZjgrQ1R4NFBpT0lUTUNnb2Z6MnNSRjBvRUswd3RSQzc2K3ZadWNyYnJZMzFxOG52a21hcjM1Yzd5YUlJTERYbWQ4T3hRaENqUjZUZFRkZVRuUjJNSmZOblZOODMzenVxOC93Z2dFOUNFQk81Tnlhd0s0dzBaeU1XMmFvM21vU3dsS1ZKY2o1OFdkNG84a2xwVHZkTzVQS2U2YnVLemQzZm9UOHdxblo0cFdOSVVObDJONTVOQXpJTElRMFNjZzJQS3hxVFpodFBlakRnSlVVU3JkN2xrazNMcm01cmp2bzM4Z3RsWTJsL0RaTWY4TlVGY0Q4S3BFamVQQTRrbFJac1hiMW9oMERoV2ZVNXRScTRtQnplejNXZWRIZmxEVlpGQnUrNDEwbU9qcm5IcnZDZGdYQ0gyRmtCaERJcXdJb3pyQ09IV2pnMXBFTUEwc21GYXV1VXJNRm1hbzROMmplNWE2V203YWxhYnU1dTdudlkzWFFrL09lVzVPb3EyYThaZ2Y4TENKTnBNS1FpazE0d0tIc1FwRnhHSnh3WTlXNzAyK3A1ZHFOVDAxa2IrZDkyWWZiZDlBbWdkaDFzaEZvZlR4VGl3UlpLanBnT284Y08wclR6TXJjNVpjNFdhdTNUMXk2TjNiZDNQSyttWVRueTZjYnp3OGdzUVRzcUZ0bG85aE53MzFNb2sxS0hwOERqRTZ1YnFJclRDcjRwalVSekk1NmN2T25zbFRQTjV5dS9rY0k1T2ZpQjZWdmFjZTA3eHdBNFFIdEh0QXNXbXdib2tocUYrNTJrWmNTRFVlaGx0L0t0Mkp4SlZ1ZTdzbTI3Nnp1L1B3eFh2NFFpRWxieC9pcEFUVUROaFlITkppV1BZclNQU0l0M2k0dUx5NGtqN0JFNjd5T3N1bG9sdExMMnE1bTErbTFkL1d6dVM1M3dMWHVkT1ZGM2pZQkc5Qk1seWdPNEw4WENYQjdCQkRPb1lZTWxRcHBCTkZ5OXE3U05GUHBJNWowMDN5bG8zdnVidSt1MiszWnh2UG9SODFVcFVFYzN3dVFhZ0RmQ05KUU5nOWdaMFZKR0dvdTUxTUNzRXV0SWdnMU9xZG00NFBZMWNicE91ZGpjOWZUZmRrYjZQZktWQXJ6MHlBMFB0NmhpNDl6MFlmNHFNQ3VIeTRQY1NhNHdRU3VpbVdMWHNtRFVPcmRqMDMxemRScFZVYi96NlhKeVhiNjV5U0VEQjh0TTJZRVZtQnBOUGd5WU53cnRtbTJibnJQTS80dWQ0Q0VMRW1JRXRBVkVvbG1sQ0VuZ3BjRmdva1RxWXJhMTlCU2dSWkhiangxeDMzaFdVcnBRMmRPaHBYZFg3V09kNHV5akxKOVJScEZNK1dKcUUwbWwyUHFPN09IWFJ4VmZwcGRzNjdXM1JkN3AyY2pYZzlqVXBkWW8xUVNRMEw0UWRMMGJPUGV4UjNUZlI1WGY3aUNUOHVoRjlIVmI5U21TN0Y4WWFkdThMUXhKcEptb1hXblVDRFpxcE5kNnFPcm02NjVxYytYYW54MjI4OWdXSGVsbDZJL0UwM1hIZFIwZ2Q4V3BkdTB3NUErcXB0aGlkVlZYYXJ1anpmbloxMjRkN3VIdWZOUzZMdkQvWFM5Mmt5aTZvYnFiYlVQNUZPdjZsY0tubFRtM2VmUzdESDdOdDVHdFZ1bWxlK2xkVlR0T1RlT3BITFhiMlBsQW02cWhDa0wzemxURG04Ym82ejZGNTcwMlFjM0FJOGQ4NG0ycHBWWGg3aVkxQVFsM21lb29UVzdzSUlhbGgwdzZIUnVhVldkODMzcHNqQkVsMk9Sb0NFT041OU9qV3U4VncwaVBYZnV5OTIwaFRQaTlCR0d3Y3JjNzR1b2d5bFBxcTl6bzU0NmhuV1JET0hJSHBreUprMTNtSzJYMU56cjIzVFRmYkhmMXprTEU2Nk9Wc0k0ZFVlT2J6NmpCQkxsV3pYbEl4MTJ3Zzh2VUdaQ3ljVFM3c3RIampyTHJtK0sxK21seE1qdFAwOHlML21wZEUvc1BLUWtlNGNFeU5CbElrOUpwVGRiTTFiRjNMbzFGMGV0bSsrQ1dBNFpKOUxBOGMzVTBXYytuVTlMT29FQkE3NDRpWFlKaE1VVENFRVpiVDUxeHBmWHFJOGRjM0cvUGlQanJiRUhVcnlZVUdNZDZWaWNjM2R6cDNXZWJpVkRLSWdWZlVxRXRVR3IzSUpoUElUU2U3YW5aMk8zZlQwMzhvUzBYajg1T2F3ZWJPeGNlTzgrbTVORjB2bDVXdU9GaDM2RW5ORFczTUVPaS9DSkJQa3ZoVjZ0MW5UcHhYMDc5VmpEOHk5dVVXblRwdlhlbHlYcG9wNmpyanpmRklKWTJ0MXAyaHgwelFvb2JMcjY2NmRyVzN4aGY2UWRJVlBnbjZkcWp6UDNaZ2wwK2dmTmV3TThzTVNhSlhrSk1XMXRUcm91Zyt0Vk9qU3FwdmZnNnN5WWJzWGVmblc2OG5ETWdURGpPTzJIT2xEbHFLcCtzVFV3Ym83djJOcDZaNzluZG5qcDNvRCtFeDA2ZlZWNXFHZUtaQ3ROSUtrM1RZb2RkVXc1ODlWcTRRNXl1L3cveDhoYlRjTW5vdm5XOW0vUzQ5S21xWFJkR280ZDU0cFF6alNub0dLSVI5Tk53aW9SVFU3TllxeVBLN09zOU9RVXFaN3RjM2x3blQxemVCaTkrb245bHl2ZkhFTTRtSHdrRjZRaGdQbEI3OWZPM3V6Q0VIYXJyWnNzWDlUV2tSREtCODk3cDFBd21uSVMvN0dsaFFYWWlSRnlKR25Rdmc5TVhRbkpSUzg4ZHYwUWt4TWZOSDBFdnhYWHVGSldKWnlkbmZFY0paeDhoRUltUWswY21YMmR0WkV3ODNsOEZkUG5vOThrSkxzdTNZTnZWVTZPL0tjK2xuWFM5dlBETERPaXRxQSt4QWM0YlVwcHMyN1M2TmMzdHhvTVpmdUlWYWlsMDd2WWRkMDMrOWlWakV0VTlGUjArdmVOUmJLVk84TWt0WUlwck56YUpSTUpVUGdxMmJnV2M5d1pLRnpvb0h6Y0ZlTjcrOG4yYWREWllwWFRidkx4amcrdUlocWllZk4zMVVJU2lmc2V0VjA4dE5TN3V0dkpjZWRmMG0xS2dUSUlOOFdIS3NPODlPZ3ArVW5RdDBkTzhaakloTUJXTVJVbVB3NG5HRTlDWDFOekRyamRRNSt0M0c4amZvTmRPN0x0bkkyR056OFB6bTA3ejQxc0loSElpOXkxT2xFeEpxbW5ybGgrMmRYTnF0TEYraElNMWNvcGNyelZlZkJMS1ZQS2IxakFoVktLRXV2U0dtMm42bWZIYWZONjNzWFJ5NXljbDM3TlRjcDl5YWU2YXIzVGlXRW9IT2p1K0VnSXFZVWhiY285SWFHR3NTbVFZYVRVMUNCNjZPejM3VG9JWDYrYVZaNzBzMG0xeVU3cndXNGhPRitrVk95UzUzVnFKZ3VZZnMxaWlZUmhOU3pYVzQ3djNKY3FwZE9TK2RWVUdMeno3bmVDNkY1RUhJZ29FSEVKbWExODFLS3B1RW9vYkdwWnQxeDZsVGlCNzZsQ1RNVmFFZWI3ajZlbzU0U0VZcUxqWlBSZFNLcVRwczVPMUxGYkIzUzY3bXV1TjlVNFYrOSs1V1FlZ1ZRamt3bkZXblcwM253cXR5bU5iMm8xTHBjcWNkNjI3dzJ6UEVSb1d2WVlwaW9RanNwdGk3VlZOMXhYY2RaNkhVcnBxczJOZWxWcGFiendsY2tOaENnZ1dwWHJNb3NmTzdWVFU3VWFpOWx5dWxXWDM0Z3JOVFRVWGE3NjNIT2RPeDN3SVRLU2F6UXQzb1N6QkRyOWZ0UGw2cnBkTjZxczY2Yitjd2dvSlM3azZHTHozUnhMTG5lSEdLNUFmcTVSYnVUU2VxbklRbkh3M2xUbzE4NUo5em5IVytmOEJxb1p3VjBRVUFFb0EwUWltUWxsQTlDbm9JekFXQTlFKzlXZTlGRUtlRWROdGMxMTJ0ZlRTcnV0dS9DUmJVaTkwZFZRb3NkNGprR3BuN0xxOFpnY01maWVaMUkrQllpV0c4aWd3WGF3c0dnbnNRTXFNTGQwZGxKSklpU3AxWlhiUlVXNXV2UVRxYlhVOStRM1ZUbmZpT2FkT3A0VTkzcHdwQUVYaE5JWndQYUxBZVJabElpc3pEbmlDRDJzU3lQa3VtcDVZM0RjR25wT2RiZkJ0WWUxVUc3VjhmSVhiSEUwM2RUczFIZGpwN2JmSGVUVjZWdGQ5TUx6VmE5TnJNN0hIUzl1OFBOYmVWb2VPUUoyQnNBM1paR0lPQVp6TFlGeWkwUmNtRTBObVN2R3A2NDBWQ3JLNXpkeHlQWFBOVHlybTd2OFF2cDJuOTZZYXFkTnZqUjd1emV1UGIyT0h1elFlT3BaZWxlczYzS3RudGRQVWVPdWVlZDVIajNmQ3RnWHZnVnFqTTNHSzdXcUY3QjVxSzBwVHl5S3FWOVJoVTgzYnA1dG55WnM2bG5OOCtaa3h2UE9RVHFJQ2F3bDVDSHdhVmtXcHBwQXNZcnJ3NURXS3NscnBOKytYVitHYWJGVytPd1FTb1VJb0lTa1B3c2lodVRWSjNvMldiclQzdVhXSzErNXl0M3BXRmFXSGh2cUNFT3A4ZVEvcWV5NTV3VVNRakwyRFhxZ2FvRjdpejBjbnVqVFBXczNmUjY2K0dSeVQvbHJwU245aDRTTVZKbW1TY2JLRkNhRXJqTXBoMnZuWXdqMXJLdGpiZmRaNi8vOUVhSXVZVFhzNUJOQWFDS2doQjBjbCtTcHRxbFdIVjJWbmYva01vYUhqWXNVeWVweUZybTdPNm56WnJPNDVYT3JWYzNaNXJkLy9rVjZCTWM2WFFGNlVENkg0WmlMQ2NwdEVpbG1lMXR4MWF4V3YvL2pSaDVnb2pVNWlNNWxiTlZ2MmJadFZaM2YvNDRrVjRxVWdzakZSY3ZzZFdGQkpaZW15TlM4cHJxVENHemsxRzIrMVgzbjhsMlRucFQ4NmZ5dkZVR2tYSVRSa1lncnZGSk15a05sQXl5WEoyZVhlL1M5bWJidWFtdG05ZnNlVjNQZTlLN1hTNzVySnlPK0ttQmtNeGdRM296Tm9uaWtjN2JuVnlkTDBkUTduU283a2V0MzBhMXU1NmI5TFV1ejljZnAzaDFBdmFBNFdSd0ladHBDTitLZHZHZHFkZ29abURQVGE4NzA4MzA3cm0rVjE4TmNmZE9aNkZBbDMxeGlSMkMydlFvRXlaa3VFbXVOWkhlb1RWVXdoY2xQbDU3bzAzblN0UFJ2bFhkMzVrcGNuUG9NaWFwMU85UWF2SWFBMEpzcFdKUU1OTTI5aVhOdmhmUWJxT3F1N2Rudi8rNnlHME9KYlhZOGg0OHFRcXFuSTlMMUQ0MGRWVWJLK2Yva1F6VEtFM1BnbnA2ZENpVTlVS3A4WVRaVFh5TDVxcHR1NGRaNTMvNHdoV3hVakF5Wm9DMW8yTHFwUVgyNlViU2haOEo3SjV1N3licU56RGp5Ly96QUxhUHd2bWVvcU9GQk5XUk0xZTBielp2TlBqemV5emM4M3RxK25vNzg3bitRZ1VhT1FhZ3EyUzRQVWJENmJTK0RLNXJ3bXg4Wk1WRk5MTzFhWWRZOHJIRGZSdnV1V1ZwNmU1WmZsNDNOb0t6STVYa3puT3pVQ2F2RFBCTllOS0JhSmFNQzRnQkZET3R4UGhMSEp4K0UzTlU5N2JvVzBQSTF5cE9Pczd2clZiTi9wOG1Iejh1K2s2Sk0zdnRCMkExZ1d0ZDVzRzJIc1draE15T2ZVbWFEY0VESTV5UjE3cVBUZGtzcWRKVFhqVUxsZXpnNFg3cHJydVBUMDI3Y1B0NytFSWhKblRqeXM3UEhZRy9Ia2hwOGtsRDJSeFdYS2huUzRZQjF0NUtIVmk3YmQzY2I3eGxQZGFxN09PanpzdFhjOUtYMHBhbFZWbmlGQXhvc3dseENtZzlnM3g1RWdac0lZM3h3Um1WakRhaHJiTjljYlpXYjNwNmVtKytjVjU4QmUwZ3hkci9FR0RQTGxpZEpRU3FDMU9wblhXaVJJYWhOZG5PbXRmTnFxdU5SdDFsanZyd3E5ZUdrSFNIOEZnVG9TQ2d3MkdRWW5RNVJLa2RYYWpVRzBHWFZHM21OeGE1WnZPdU4zZmZpYVhmU0ZOc1hlRE1nZ0lXWnFzOGRSSGphMG5HSnE2aVBZL20xa29hVkZvK2pDU09Yc3pmS1p1YzJLNWhLbHFOOUcvMkU1NkpZbU9qazE0THlGVEE0d2Fkb05EK0N2am1GZ2xlTUpNUnJ1eVVKaGFOWEhvS1dsNVVzMjN0emZHSmlkdGZtNTVCTFVGTjdIUHNMSUJ6QVl4RTVHSlpjVEltZVF3bkpRQktoSnVIa1dNOU5OOVp5eXp6VnQxVjljbFJhenEyKzkwNzg0aGY0V0lFN3dJS2Mwb05JTm5GTEtkL0lGQlJEK09HZWowTWJhdElZNHYxc3R1amJTbFRjOU96eXU3Y1FmM3BjM1ZlY0JmUkRoM1R3azBLakJpWHA3b3VvWUJNRjY1a2o1SE96czIxeGhkc203Ym0rYTd1NkxwNzVxdlNtY0V2eU9ZZUp1eEExTlE4bENmbUpkczgweEJSMWFxeU85L3lselk1NU1KNFpldll0UHo1ZytjbmMyYW1EditVdmsxRVc4d2d3Z3BqU0tHRG9QbW5UVTdqZVRydGI3L2wzaE9oRGo0ckMyeVdGZ1VJRFlwU2o1Y3ZOaWhWUWVjbC9QbTVNU2s3RythbTUyNTdtMU5uVFRmWWZsM3ZoT3VtdDhFdkF4dGlaRHpjRmRHaEQzQnNEdnNIckpwZlBOR1J1M3ZEU3B3cm1LbHUxSzZ1MnJhWFhkbnAzeldUaDl0M2lzQ1J5WElVRjlCM1BjeEtaRWpUekIvSWFQTm5vOGVkTis3MHJwZDRrUzllMDZDRTArRTVzWDdyOG1FRHlsYnYrbk85aEpvZU5hbklLYlMrVTFScGhIc2RZbHpkTjFjdTl0MzVVNTR2RWdjVTZWTnVKb1NucksxN0QwVlJoVXViZGswNmMrVXZ5ZjlFTXhDRWVuVFN5Z1VNTTlVdnlkcWRPM1QwYWJyNXozSDFlZndrM2pnVEl1UjJpcUNDYTFEdFBtRUR5bFdlZno1ZDdnc2hpOUJDWVVjUG5XNjFDSllwSGpvNTErbHo4UytvQkw0TGtNTXdlVHRLTlpjSFhNR0NTY1BoQlhxcTFibGQrNnB6NUhEeUtDWHczQlRrRk8rMmpSSFQySmVuWVpMemEzdVBlVytVR2U2Rlo2NGhBMjZPRUtSQ3ZTU3c5Rk85UGRTT2JxTG81SHJPc2Q4bi9sTlhrTVBrUzV1VzBnSVNrU2JPd3FVMVNoSjY4YXBYczFQVGp2bDN6dFo1ZWpDVEdndlRDU2JTYVlSeVlJK3ZTdlg1NStYZm9acEdZUDBnbFJGTWhxTG5KNDVXSG1xcS80dTlFU0VlYTZUOEVhaXNuSmhWSjdxWG5XZjh1ZDRTOERqaW5GaWJuMFJGZ2lYR0c0VEJTVVdjbWpCSWlWNzNPZFBkMFhSdGU1NXJsVjMrWjZCODYyN3pZY1JOQlBSbTR2dXVKb3FqY3VldzhpSUgyOHFGTit0cmNjZE85STBtUE5zeVlYM2QwVm0ybzIxYm81OGFlN3dzb3RCWWgrc3Y0M0o4MlhGckd3WEpCYy9hSTY1MisxWGRMcHFlWjZlWjZhYjd6cDNrd21icmVmaHQxSlhVYUowRk9sMGNseUdjanAyNzVkODUrdllTbjMwTDB3Z2dweXFvVFJXci84Y2tTMEtsODB5NkQ2blVFRVNhZFBLbXZkNlh4S2l6S29iRWRHZ1dJN0pMNkwxQmUvb2NYcUVVNDdwZTBZTXp5L1hPMDZOOWY1THNiejZKaE1wcy92aHBBRk1qa2syeWFWQklJMFJuVzlEQjNFdW8weU5vd2MzQ1VqYVNidU94dEphN2NQbEJPTnUrdVY3NFlJV2hHRUZDekRBTzRTMHQ1QVJ5NFoxeUt6dUNYSkExYWFHOXcyV21XbkpPYVpPR1d1MmU1U2NkTFNxN20xN3U3by9MajhjOHpKaDlOczRnOE04S1NQb2h3WlJud3dpYk5VeEVwejZaRmVXcjhYb3pDdWpWNjBjVFZycTlkZk5jZDM3a3MxbnVFY21ncXJ3bElJTUhJWWxEaWlQb1hRU3BJTWEyVVNnd0dJd1VsRWVZUHJtK3VIU1lFcnB0VmNTcFBkTnQzK3dtc2wyTzlBUkp5T0pZZU5JSGlBOVlTMkMyamtNcFVFT0ZPUXNsQTBvSDRkbVpNVkxxZjAzZGtvbDhTSlNUYmVSNGZUaWVtenk3eFBuMFEwVktuVHAzdmtnV3dsUVgwTW90TUE1UVh3VEFuQzR1aDJrWEExU1FZaVhOMGQ3ZXN5dHh3WXJ5VkdxNjJXK09EazM1dDBlL0UwNTlWU0NMcWRMdktRaGdXWVBWUnpHcVlGcE81L01zS0x0OEdvYlMvS1k4Yk5UelRNODYxZlI0ODc1M1BuSnp3TFdCTlloUXlFUVBoWWN3K2hWcUdSbEhPVVhYZXdJNWkrNGROVDByRWVWNTY3dmF5ZG5sV2ZWSDBycHgzcG1FNTlMdGJyYnZDMkFGS2c5U2RNMG1hVWtYQzVoUjIybTVKWnUxU04ydXFldVd1N3BaeWVxYmowYm12cW5ZMjc0TWFxM1BSQkFRZ3hTWldFZXNjaW5aRWdVSDZ4eGduMWxGVnZ0cnB1bk1wTHZyNjIrbGFQZDBiVlgrMVI5M3lueEsyNzdCNlNhT1JEcE1ham5MRERrWFNoWU5VL05JMDJzNjJ6MU05MDNQSys1dTdWWDhuNHBmZHJrdmdSS0pCZ004Q0l3M1MwMHRFOG9FNE5DQThGQ1hPbHowN0k4dFdiM0xqdXlPb1NYT0t1Ni9UNU9RM3hIMU5FSi9reFJSRTBZRnBUSWtQUVVXaTU4d2RITDRqMzFGZnQ0OHIvOW9WTlN2enhlNURpWkV0VWFwVStZS2JoMkh1Ykh2LzBjSlFnSlBnVFpZUzFOalhBMmhEYWhUNWZBcXJXM1duY04vL0I0VXp4SGdKTmZWd2pUeXJLT2RZUU51dXpFanIwK2p6VldmL29qOHB3OHRyRFNFdWtRQzBrR05kc3ZUN3ZNelYycXc5ZC8rQVZRRXB3ZUFYVW9EZzVMMHNLQ0tPd3lzUHQ4OUtkcEkxSnZjMWVuU3pNM050M04zbmtMWlB1ay9uaDVWRnprdmpJQzNvd1hSQnFkZ2pVd29XZDBVK0lwMG9GdW0vVlBUVjNkeHVYUnlld3NYK2t5VXZuejgwM2p2RGlHdE1haW9JU0ljck5hRlFVV251TUt2cmxZMWoxVy9lbXFtMXVuR1hSdTFWcSsrU1pGM3ZQem15NVZuaHRCbnBBWFFiU0VKWXVwRlN3MWhLaU9SaGcxN2IrcGNwRWhKek11bHpldEc5dE04ZHFNNzlTenU1dm9LZFJCcW5LbmVUMUNKWW1zRXhCcUxHRTQ5TkxTZ2RrdWZHMnE1N3oydWI3LzhVb3BFQkNOemFZSUtxNEx3bDBkalNMSkttM0x6enAzLzh2dUVDR25JYVo2WktueUJHUXVwVnIyT1NORmw1V3IvOUhDVUlaZFRxZUNiZElyTE03cm81Q2FVemNPSzEvL2lzSnFnWXcwVkk0bDhObGxDUithVzJZYytFRkJnajVtYXpiNjJXM1RYTjk2QnZYZW5iZnZrY0ZNQTg1aTBtWEtEbW5xSHNkU0p5UWR1eVlRZE91bTVSbE5acWU2NWZIblR5cnZQdmRubjJjUDVIUEJmd0hLakhBcEY2elJ3b0lvcDBhZVlPZ0t0SnhneVhRdHVzazNJL2RkN09OM0d6cnZ4RmptM2VnTlhac3U4WlFoVUptRDhrTGkwUU1GekU0Rm9oMDJpTms0N2w1a1V5bW9xYXJZdUhscGVTcmN1ZE5YRmRTdjAzVTIzY2JsS2d5dmNab0V6ZTE1UEE2d2VBZ2ttaE9Jd1NRNUJoaWkxVllpWUV5VStOekl1YmRIWkpJOXljYzEzUjF1eW9rdU9uVnpjeDEzeWh0TTNVYThCRUFHQlhDYmdBY2dWT0MzSkJYU0s4WVNjRVhCSFNKY2RXU1BSR051dGNLWUNNTld4bGRacFN2WFJhbnB1MnVWZDRWalhZOTUvRldacFl2elFYcGVmUVpPVG5oY1NjT0JxZmdmUG9xTThyb1ZsYkYyUGJ5YTcwdTdzdWROVGtkK1hIM1prcGRsM2hhaGdYc21HckcyNDA2TUlWM1JZUGFJRy9TdmVncllPUVR1bldmc0UyeHJJdW82cnd0RDFFaVBabTBDWlJUK3VFMW14aFZ6c2RPdW0vU3BrcEJqcCtPelVjOUtRWjEwMTRnYUZFUWd5T05OeEgxSjV5T1N4czZkdnRYdW5WL21pUElVVTI1TUR2TStYOURKcW41NGZ5UlFhN3ZQTms0d3VoamQ3TnpyR3E2amlyRHEvMEtzbWhWYWZZbXpwM24zVlVYVFV3OFZneW8wQkJOSktES2lHVnV6U05tb0xWcXAwYWxhK25qeS9UYWhkT1R6R25kWk9QSzlONGVWNExXaDZDV2R0N3RQYThwQmtwYVFFelVTTkFRN3BaNzdocjI0YkhYUmRPdW5vMmRaOWJPWlUxR3FtLzJzUDdIY2p2aXVJYms3RUwyYmc3WXYzYXpvd3B0MHdQZW5mUUpZdWxCazFMcDBGcTc2VlhuaW5HVFpKektFVXExUXBqdDU3RW1rY3ZiZkc0dU82L2F3K3pBK21xTmMyNk9Lc2ZYems1Y2EyT3ZMRytLa1kySnA2QktqV0pxMVpOTXJ3Zk85VDl5TCtlcXZwdjRidEpaUXk2b1ZVdWpVdWpzMWhYMzNPb21SWVM1cnl6bmlwR2NoU3oyNlJVYWdoM0Y2THQ2OGxHdzVWVnp6b3JIZHQzOEVFWWJPUG5IdVZiT0JqWCtmU3VsQlV1Mk9UaXQzbEVhSlVJc2ZoYnJLN2JDZXpaMDFiYmxWOWMzUFRhdDNlbGRtdWM2WFRyenJXM0h1dTkyelU1aXJQSjRtV1VTVnpBd1FGOHRxVVRuNWFoSFcyZFZLUHFtOFBlOCtRb1ZMcGZOVWVVVjNmc0VDcUdsYlBLQXpka3BVYVpZaGxDRUtuWUk5Tkl3T29PbTI3YnhYZnBud3gxVW1wM1FWMU94ME1lNzNwMFU1bFpEYnJLYjJhaldubStNSWxKd2hPSVFwVmllUkdETkJMMGF6TEc5Y1hxdHZtK3Z2UXVxTklZSU9mT3hkTndicU5GamZIQ3BkSFVFTDU3ZXp0bGpQd1o4MUthVlJFUTd5alo3WjEwMVBWTDVkTm5WZE4rZmNsU3BZYlNKeFowNnIwcVZ6cGM2Yy9TUldrUkx4ZkxvM2NNbTdRMUtqWnBWZTF5ckxPdTgvT3dlOU1MMEc2REcxK1RWYnJzcHZQUGhKMDIzYVUxUWJKb3l4UFMrYWpWc1VxMGdYZkZObElKMXVFNzdwcHliVXVOMTVhU1VTREQ4dlRFMUFhUXpuc2QxVHN2MVhrMXFwMzA0KzVOTk9uYTNHOSthU3lnbE40cHhKNlEwVnVXZ3dhTWJDbmNoV2ZIcHVsZHhkTnpuN0RhUXZlK0V3MmxkZWhRenBuTU5iZHRLdGJkNW1DMms5MnY1d3pNejBwOVlXaHEyUDJqdUczMTIzWHprY3JKdnMxWENYeTdmbEE2WGFmbnJLenZRR0NsMDBac0kxQ09kaStGUVdydG82cUw0OGQzbng1dE1scm5mS0dvN1V3dlR6UFBrUkV5VEVFN0NiSEY4SjFGRXU2blVkV3pTcFJQSHZlZ2hUR3hUYkZnN3ZEMTJlbVJKMFNDcXFvdk9xMnZlc25RUVN2a0pFbXBsaXB6a0Y3em5zWlZON2NMOXlmVU03VTNIRHpmbEhxYXBoTUtLei8wWmQ1eGVsZ2pUTE5iVm10NmFWdXFFYzIzeis1emVYTkhuZmhNelpxdHFhMmJucW5GVHBjcjBNYm5wbnk5TkdsZXk3SnBWbmhKd3pSZlRxVXlKTyswMDJqdmRUSm52bDhkZzNXVHNlTzcrdHFlbCswM3RCSDJlbGJmS1p5cDNvU0ttWnBHSTZVTXVUUGd6c0pmQ1gxVk82YXZadUVjNnZQeFA0OUJtUzZPYVY4OVhtZVF4a3g2Z2RWRUNFaXpiWW10UjBXenNWNDdzODZYS3VuWjMySFlmMW1weU5TNXR4MVN2VDNQZkx0UG9rMDFISjMwSzhDSVhMdkRLWWRhQmxoOHZ4aEZPMDUvVTI1K3Q5Zks3bS9QdlNvYmkrRGNJVHA3dm4wcC9ZVGtLblBFbVdtNGoweERwUEJRYTB4TlBUSWs2S082MjV0MDhyNk9lN0dFRTFIWjA3ejBzdjJMcGRManQzaVZYcE1pWU14d0RNWVFTaDE2ZUdzUDJlbWxmUG1zbm91cFZmNjZ0UVpzTGpvUi9udjFNZkprWHNCajNlUkNLTDBreXR2U0dveEZOUG1sRTQvcW5ITnZubThtK2I2UFQzb0hvSlRPMURON05LOWJoNlVtYk5TNkU3VXdQYThOVU1sRk9QVDFGREtOaWMyVTZwOU4zMGFWWmR0NU9mV3FuWkdwZnVmam0zYXIzdzEweWNNbmtTZXFuYTJrVXdwOU41dEtJNGR3amVudCtUTm1vd282ZVY5amhXcjZQemthOGJCd2VzT0ZNSjMyK0R1cW5idFRVOCtjaTU2dXAxWGY1cm5iQ3RwVmtYSFcwcm83enlDZnlOZUp3cFdRaEhFTk05RmlDNmhIWlFPMTczdDJxcU55OVU0OXo4Z2Z5bzVYbjBDV1VyZStBMVlMd2NoTXdSSUErZ29pUUxpTTBPYkFScUNQcHMwTjk2YldtZ3FJTEltMzB2VTNQYkh1YjdwdTVlcTd4amRTVkF3bVBxOXNzZDZLRUVMNElGZWVMb0ZEQ0RsSUpHYmswb0JaU2hwbWFvbnFKTVJLeXNOUkhlL3Nsem8ya3RlZG16cnVWZDM0d3hzYXpacCtUVWFxTDZqVVhPalZSb01aaXZQeVVENmNxM1hLOTNJYWU3czV2Z3RvdHpZZElLTktDQnBJUkRWTWlaVUZBMjdZTTg3cDF1bEd6MDcwc3pVYlZkK3VWWjZDRTQzbmpNT0pFQ3RtakJPVG1xZEdRMXRVUytMTVhtc2VWZDFScVBUY2JWMzZYUFB6V3h6d2VJVkJFTXhma0pDWU5kQjFXNis1WkZ5aWFydGl6T3oxemZYRjJoak84Lys2ZmJQdThjV2tLNFpLZENtUUdpSWhJeTFGQkUxU2lidGpuWHZSYys0ODN4WnYzZTI3eElsRFNpd1gzb3BFQ0pFVHloenpSNXQwdGNpNjduZWhOcSttc1BMblBkNStPdThHQmZLd2E2UVgwRlQwb3VtNmhrMUx1UnJFZFMwM1ZXZFY4TW5FMi9kVFNKN3ZTazFsY0plOXFwUkxZVHk5cTZRUWZzdTJKVXVMM2FkMmovL0ZLS2ppSUtzU0tQU2FnUWNvU0NYcDFWdHgxN05yUVZYVVhONy8rRWlOYmtZaGJPemtzSlJFUXdSMWRUMFVVT0hwSXFkVWIzSXVudi8yamVpNFFJZFZqNU9wUHF3ZzhFOW9YYmtYU3VSMnV1ZHR1NmpzQ3R2LzVSTlMxS1FoMnFlVEozSmgvUjFLS3EyR1JaWFpadDh1UE8vL0ZSS0N4aUI4S1FHZUoweGlQaEg2YW1FWVdqaWJXNmFWMXNWRDI3Ly9DQ1EyREI0Z29XUmk3U3ZvM041SGhIVnoxVEN5bmIxS2hhdFZWMDh6c2J2bFZlaWhqcXIxQ0NhSENIa1lGMkxnOHhWSkVEM3kvVVVYd3RtNWZydDZwdXIyK2I3dnhQU1d2cDFKZkFoc1NZWmd5Rk1TWkVSR2RvZUVtamxUcU9YUzdaWldXNmJoSFc5aXpOVGY4VEpTdjNQdVhKVTlPVnU4d1VhTHdMd1BNTllwN0JFS0ljSmR1enV5OUQwOHl6Q3NtanZ0Ly9Iams3eEhhamxSVXBuajZjbzVSYnR5NnBxRnk1OGIvL09EUGt5a2Mzc1M5MnJRSDFET09tcGhjVnVabURlTjEvK1hqaWxKaTZJemM5QlZHWmtjc3hlNkU2bWRlcmRHdGJ0VStlUE0vL2FVTG9nTjBjTW4wc0xUSXpnYkdGZTFDMmwycDZ6cHplMy8rTDhOVEdZOGx0UW5kdHBTZ2xOQ05SMjNOYlZQam4vNFhrWXlId2dRZ1IrQnVhcmFuRlRSclNKNktGejA4dXV6VnoxdDdjdTZjanl1SG9jaWdyK3FMQ2R4MW5oeUdKZXBFalFwa3dxMlRBMVVPamt3WWk4MG0yNjI3amY2bDhndHU4S0NKWW1Cb2d1STdrMWttdk5UTWVUaC9MTk9SU2k2VnpFanFTdGZNczhlcitacFp6WmQ2MVNmUWJxdlBHVUsrUEF6YStSaFVtcENnbzFuWElFWGROd3UxN2FxOHZwNjlWYjg1bnpuaEpnTFpEM0NTa1BWaHllako1ZTA3WHRYVzRqczJsYm03YU1JOFl0V3E2YmFNT3VPZk81ODU1cUdrQjJRc3BQTXlrY0JNZzFDUUh5YTdyTEk4a1lqdk1sTEVKZjAyMllaeEp1N09sakpKM1RiZkt1bVJ3ekc4L1VTRkxISnFPZUcrQnl4cUcwUDBVd3N4TUZJeEZhWU1qT3lZSUJqS0lsVEpwUlp1elViYVhLWGNieWtaU2ROY3Vicnl1YjkxeXQwMnYzZmlXY2Q2QkM1QnM3NHRnTFJCS2hHTmV3bW1RNGtSZ3pxWVVLc1ZrOHBsbXFqVXdSd25aWDZMbkt1N3ZtcGQ1TVRhN3hZRlFWNGZDWGRDdGlyS1JQdklSUkx3aE5yb1R1MXJtMXJjZVg4dS9kM1cwdWUwUTFUczJub1hWTmJVN2p0bzhjNzNlbGQ1c1JtRkNhT3B0alZUdVFkVTYzWHpueWY5NkF0ZWloVzB4cWVxbDhFK3NGZHovbDMrUW5LR01UVlk0R3FWRFNxa3lDWUZaMDE4dTkzcHFNMG9WYlhweTlNbWZxQ09SaExwaEJYRFl1OXp2blBJNHdjWnBzZEJmWHpVYVFTK0VYbGJmK3M4K3VHVGZJSUh5ZGFQcmw4MXFEblRDc1ZPeWNwdDNmOFhlS0FRWVNZdEFJU1pDV0ZWQ2hLQTRtaStMTVYwS2lQSzl4MmVXWnB0WXFKSmU1cStWZE56MGVpMHMxdFNmaWw5NlkvQ0pCM3d0NUxJNGJZN1NZS1NaZEdCdWlZTnhwVXRJbnJXVWtrOXR5b3FlbnJycjY0TEc5ejNUYk45Zm40NThEN2tDV1hiL0NvR3N3aHBOUUNwRXB0WkRVVTFKUE1KUlBPcWI3L2xMWHBSYUF1MXBZc0ZNU2xJRzZ1cVRsbTU2L3gzenAveEhBV2VHa2ZsaVNFY0VLTDl5azZKR1hzd21wZFRkVjByL251UytiaUNocFZCRkptbk5JYXhETFFKN0pDbnAxVnMxRjY3ZmU3ODMzQi9objFpZlJISVJXUXJhbk1Zb2FUaU9GWmJ6K2U3NEFxSVFuV0VOMEpjZENiUFFsQXhVaUNGS3BwWERkbnJqMGF6NWU2WGZMS1pYWGt3SXFLWnNtbmhVaEsrTmpOTkdxZ3dLOVExQ0UxTG5OOHlZZEZ4MW56WDRUVXVONjd3SVVDK21nK2pGdzZvUW9KdVBKYy9wWDNwS0kzS0ZuOU5WM09wR1ZDVXBscU5RdHU3amF2bzk2VjB1Vlo3MDhwajhwWElpdTcyUWV0SnlKT2xOd2FhK1F6VVV5SkdITUtJNVVUU3VvMlNWOTMzSGUrbDF5dXlzNnZQcVFhWjA2eUNUZ280ZkNObDJTNUVuUmhQb3JMSXNjclVFb2ZpVE4zMDdxcSt1MVZ6ZnhTcTkvZFFwY25OUkZheXk3eHpFZ0FuUVBwTWdGOG1qYkFOaEdvaFNCTzFneUM2RXlVSFcyNkRiamdmVjFqdkx2anUvZEtaM3BYSTlieWl2dnNoT1FielVieUlHb0lVY2pJVGt5YXBmVGhDV2RSdmM1dko0d0hvVHBKbm91T2xQemtGYnZsQ1dxaitsYmZJd0VVaWN0Z3ZIRklEK0N4VXBOMllVallNaVViTEc2MWFxTUI1V0tuWHJ1bDgzSnZhL1hjYzZQVGMzT2FsOCtpZmt1eDBJdThQd1pCQ1JJQ1lJaEdBNTRrQTNoaWcrWUlqQTFGa2JxU0xReTNHNTVreWFtNUpEUlVhdHRvNUtuUnViV2t4bStzd2xaMG4xVy9wOU5OUzU4dS9RbTREYkMwMTQxRmFKeEVIeTEwTlVKdUNWRDRaQ0JzcU5uWXc1bXlPYnROVDBkVmNyejUydmNoWWJ6YThvamlVUktLRTVjSDJFcEtnbHljaWlnZ2lPUnBhWGwrSzNaRzQxODVPZWxuYWIycHIzaXJNaHlnNUs1T3ZDWE5vSmZCMDZlMThuL2xLN1BsWXRNNmhTT2t4OC91dDBoYmQ4dS95Y0VpRjU2Qk1nWk5JVWRXZ3FkNTFLOWpXeHIzZkx2SWcwanlVUXpEWTFEVEl5aE9NYVJITEJSSFZuTFhJNUdSejEzTEtrNVV6YVF3dWU2N25tZXU1N3IrY3B6ZS9OYWxicnpOWUR2aHBYaG9EK2duOERxQ1pObnp1cURKSUlZSndkVGhIQlU1Ympka3FMa2RhK3B2bVVuSEhXcnZsVjR4VG0zWjUrMWFiZkJqQjdDaWhZbWtJeGdKakRqSGtNR0g2WG8zbENVUW9CdUhvTDZPcGV0Tld2ckxWa294T1RHMTVaWnVQTEdYVGZOTFhMVTlOK2dwTW5kT1ZIUFM0aWUyZ3Iwd2RRQmRndDFJekRFRXNBbVVESXhYaVNVS0xMM200bXdKWURGRC9kbUU2cU1OSklVRlRkcld0T3pkbUMzVGZOMzh2bW5UazFwN1dma0dJYTZYUEt6dmdDSWdXRWNKa0tndEJISUdrbkRHd21FOHVDT1FqZ2QyOGZqZDh1SGcwR003NXFDdEJwN1dmS0JNcmZwN1cvUUNvd2pxcmRMZ0ZpQWFsRGNSZE8wNENrd0hSelU3bDlMdGRDUWJwWHZ6U1pXL1QycythVEszNmUxbndBVkdDeDA1QlRKcEJJQUdwbHRSYTNaMEVmQU9qVlVZckxXcUNwcXU2dSthVEszNmUxbnpSTVZvTlBYZXdBcDRETVJqS0ZLQThnRmJnYU9rSWJsM3luZ1VnS0lCVzVHZS9wSk5yZFd5cER3WFZNejFrRGZ6U1pXL1QycytVRUZiOVBhM3d2NENuQU1nTFRjVndwZ2VRQUZRRmFrdElVQm5sR2FxQmFBNklZb2wzRHJXNVoyVG85aDFtTjNrOWEzZFBUY2I5Q2YzRURkYWV1enpSRW1sTm16VVhaNEpVTGtBbmhaQjhEU0JhcGV5SEFVZ3ptbWlNT3d5aUZqTEFUWnVTR2wrbGMyWGFTRlcwaktRNFdOMXB0cGRxNzY1dVBSNzRJTlJSZENwZnAxbjBmZENPMUhYZVJYaG5VUnVaSWxGeE5Sb0pVTTN4aE42ODFleTl2cjY4dWRycjJldWNubTRIWFQwNXVKYzgvVG5PL1RRWHhUdUdUU0lRbVNJbnBPdVJZSU5acDl0V3pzM09WYXBtMTIrT3JuWnU1NlBlNTN5NXlwM21KYXNNWUFBMURJTHlCaUJDR1FrcnJ2cVh5aTFGVHpjeFNXODlwSjZXT1o5T2svVGovZzhkSUVJZ0F5SkxSMXNTY2tjOU51dWZHRW1KamFxdi81SjhJVU8yUzlCVGtaaHN2eXA1aVh4S1MxVS8vOUtLV0VocWpxd21wRGpsaFFHTU5pK0Z1bURRZ2kvVGg3Zi80NnFaZVJOaEtGMElZUFRMTG5ZN1pyTG9wR0Z6cnFieHVsV2YvclFUSUVaUE5jUUlkbEdJZVIxM3VUUDIzdm5wVXgyWU41cmRWLytFSm9rekFTQVdLNkZoTWpvdUZuMEhVK1h6cUF3VTIwdDF1bkZUdWpjZVZYTitoU3k0bWV5Zm5Iem5oOUdvNGpDSHdVakRkTFViQ3pUUzZ6S2FYOUw2cnRtN2FncTd1anM5Tnh1UFdxNy8wL21iNE5HTDVxTEFRSU9KQ2JrTERSRThxbUpvOG5XdyszbXhmYk1tL1d6VWViNlZwN3J1TittMlQ5WjRqeURpWk8rY1Y3NWcxVWhLQlhwa3lGeWJVQXpFaDIxaWFkMmVhT09OK08zTjMvK1V1ZVRGRlBQb3FsMGlCbXRvSDFDTUlaTDE5Syt3Lzg4b1FjUVRNUGZUNkRhWVNhVTFzamplVFpVVzZkbHlxcHVZQmplLy9JckwwSk9SR2o5eTZwb1RWUVRkVGV5eXNwcmFPOExPLy82VGt5Y1I0d0lVQ2hETHFHb3FUc05qV3hwcHBxdi81UVNiQkl5NnFQdjV6UmF5czlodlh6elJpMWR1UGVlN3o3YVYzcG5TbElPdThRRWFDWVlEc09vWktQUzJDYVdqYnIyTGxFRVRYTlRCcTN6enU2UFhSNHRibTdiNzZTK21xYVMrc25SQklTNHRJbzZXTDhzRzNUUmh0SXB6cTFabllyOUhaNnB1dXZwNjQzRzQ5NTFqdlA1aXJQQ1loOThNQVZzMVFtWk9vWDF0Wmc0aU1zd25vSjBWNU41RzIrT3JpNmUrQitjOUFteHlYdzFRZTRXWXptMEVZeGpzYkxQMWp0UlNpWlo2NFRUZDdOODJ6R3RuTytYZTVOcC93RU1CWml2Rm1CTFlGVXNCNm1hTHFRaEZvTEYyelZHK1VXN3ZCVFFSZGJNYmJ1Tnl0Wjd2aFdhZEtHenZ0TEYvQk51MVU2Mjd3U3pqQ0dUTmpNMm1OZkNjZStEY0k1T252ZnM3UitjMzV5Y1MrRm9MVXppQ2JIOTJVQmJCdDhGYUoydDZWdTlLZ1B1UHNLblBoODVIS09uZUQwSVlQU3FDQzZuT2IxK3pCVnJlVGtZVjUvZGRMbnBUdXYxWHA1bmg5eWpxbENZTXd0VHBrOVFoT20vYkwwYmxlMWM5VWQ4UnhCUXpzbjd1Y09vZnlZemRVNFo5R2xkZVZETkJSbVpwWWJ4TjZxbktsejN4Mkc2M1Z4dFZmcG9PUVRzN01OM3lDZ3hOTGtycHJ4V3NJVUlWZVVVOG1sUVo1RjdGSTVOMk5jZDJxVzJ6dTV2OVlmR3FuWTZkMVBCaTYraEhRU3p1MDI0NzJYK0ZlV00wNzh4TVRUUlBCSFBZeEJpWHoyM0x6cTI2VlZHL1RTZnhoN3Boc3dtaXRYdWpWWnMxR3ZIVXdNNjF5YWFwRSs2aFBWdFZ1UXJZN2ZPT3RuQ3Z2MGwwK21xYWx6cHFMdUxPL3RVNUJPcFZXeHl2QjRSam5YRGlhSlJlNm9Tb25vSW1OZXhMN201cHVxT25LcitEb3BvRXh5cXNuU3M3eUMzUjN2bXBGZWYydUlTQ0RuSVVWeXhPdXFxUVh5cnZsejVNM2pnZ2JocmVuYnYyVTB2bWxWS25lWmhLVFdtRGRoWW9vYmxwaUhQMjdycDEvYk9WbXpwWXY2SVNaeVppRCttcDc5WXJYMmdUSVp5VVIxbnNodEZJemR0SmpoaEM2cWpyeTI1cU9LOXlPKzR0Nk9PazFQWGZJcEZwU3RrVGRjZHc4b2t1M0V5cE5qVWMydGZDbFRFb3JvOXY5REplZm1wWWh6QVI4NzVKcWFjeVNGZHZQS3I5Q1RCbWxycHBHakxVU01uWENkM0syZTVoeXAyNjMyK2ZsNzIwRXVjaWc0OHo5SmlhR3pxYkk1L0ROUm9nUkNrUW9rR01Jb1M5ODNDY1JQaTVYbnAzNXowYWRBK2RnK090NUd2RjVLNFh0WXFkbW5iRjM2TlJOU2tLMDZYTnVDTitZNTdrODdIWjA2bzlkOGxyQ1o5SUpoTjdVY1Y0VjYrazcwQ2ZVMHVtRk51OHpHZGFGS0JTMUJRb2xqS2swZVd3bW9QZ3EyTlJ2NmUvTWhwK0hRTER2blV0S25PZDRwUVc0UnhPU3dlc2FvWncrbXFDQnorcVlYenpxMitPci9DMUFtMVBLSlJMcDJYWk5ON05jNzVUUXAxVEJFUU9WNklNOWloVG9UU1VjdnFrVUlLSXdpL3RsMGJwOUsraTcweUhITW9vSUtqVWRudEs5SGVlR1JEY3VEMDJ6aXUzZWlFb0tRbkVVek5UQkJ3dm1pYzAyTm1xTEtqMTgzWjFWODZOKzQvVDM3QkNuYmdyMXlyVmRTNzNZbGhzdWhVY3IwNjdHcUdFMEVHWE1HMkM1TmtzZGVxK2pTcS9vem1rMDdzN1V3YnlPVGt2T3Q5S0wxWkhKY1FPZTVKT0pkZE5ScURvdjJhakNZS25hNDZyNmhLWFpwQkNkcjBxQkJsUjEvd1hxVDhvSUpVYWN6UXkvY2hxMHVsM08yYTlNbm5Zb0V1MU9SZDZCOVNnalR2MFlxTloxZE05TWhwbTllbWdoaTZGN2oxZVUyNzlnbGxMSkIxVkNOSGRmTDBHSDQ3VVhlR1NKTWNVSWt5NHVIRkF3b1RxRGZiM3VUZFhYZGRMcWpCMGVuc3FvMzhLVG9FZFR0ZDBZSG0rK2FtQ3AwMTZJU0RSYU9MMzBRNEtVR29rVklvWStyNjBVNDNUWEt1Tzc5TlcwbnJXK1Z1SUdIdXcvci9vTXZZRTE5SmlkQXRta1V3dEZCRStYd2pDT3Zyc2JycmwxS3UrRDVUbWRidXkrYWJkOUpaUHYybGVmb3dLRDUrU0ZNR1NFWnRkTlJSb3Q1NjBkbnBodXk2THI2T0h1L3FESlR3M1ZURlMrYWJ4emV0NThwWlB2cHpuTnUyYzk1Y29jbWNpc3RzMVJWQit6ZTFGaW56VGI1MXVyNjlqMW5lZmxNSDRNVTU5YmNYYTlYcmpxdlA2TDB1cDA3TG9LdDhKS0dXVHlZNTh1TUdoeEVlN3BkS0NDSjhzSXByVlZSMHJkNS9OMCsyaTdUeDMxcUthaWZoTG9IcnZFeWxkU0p4K1V5QkVUWElwaEs2bVhQelhXOVZXWXEzcGNxdFYzb0JTUzVMTkg5UEw3NVI3anBUWWdPbnoxa0M1Vm51SVFqeTNDRVRYRU5OSkNtRkprVWRqQXR1WU4yZGJkdDViZmVmMmtHdllxb3VLMk8vVUc3S1pFbVRUWGpPaFFJak0wZlcxQkZPelcwcTFFNkVkdkpzNjZPZmtUOElLM2FWcW5QZEo5S2dyd2xFb0RSQ1d6V3BwRkpyNFU1OU52aSthL1VzNDkwdWJ5T2xhdmMzdWVDNm9vbHIwSElubXlMdXQ5T3JJNVU3Q050NnJ1WGI2Wk5KK2RsTEdGWVdOOTZCMjVMcDJhMTNqYkNVY2lPbDZKaktjNTlTbW5wcWRSSzc1Mi9UdDJPU2diY2RaK1k1MFhUczU0QkNiQ1V6QUJjQWZTblhsODFZS3RBcG5qVzFNNjZxdVE4QVdRM2NiT256eDVaMWZrZWFsQ2FTNmNiaFpYcUgxTzRnOGVRM3hYRHVDU2VVTURDMHk5ZzF5WHZYakNYbUU3TUpoUGJOejBlbW85UEtxOGhGdmMzYUx1dzZmVzZWM2VvWXN0aW1GTjEyNDY3cXNyNzd3bkkvaXVRakFXdklobWtNRWZXVzNqRlMxczNUY042YnZycWVPK091N3U5RVpGRmlPYXRObmFqcnNyVk9UeFdyMUFzQVcwaFJQMHpLZzdXdnVLMEpjNnl0RHhmQmp5aWtHY2MwWm1VQmxna0dWYm1sS3pCdVlTVURXTUxtNmVqTDJXZWRHcDJOOU4vWWF6Q1pNK1ZEVDN6QlhhUHVLMjlOMGV1ODBFQVJQUmNsV01OZzYzVGtXV3JzclhjOUR4V0dmQ1ZIR1JucG1YRnhhdmJKT04raExvVGpUNTZidHpmS3VtKzgzWGNHWWE4dE1KaE5xdDhZeHpTam1Yb3pYSHpjODZPVk9UdnFTZ1JGaGtZSEltNm5IRk5pQ0VwNmdpbk9oSFpxWFhaMTFkampybSs5MVRpV1hmaVdOVG5odElFSTVBbFlhQzNTMURYZHl4cXRPMzBzTElwcWNuTzNjbDA3MHVkWjFaMWZ0dVAvVHNsTlhrZzFvaUY1Rkx0WXFVRDBndENqcnE1dDhMTXVXdlpxbFYzTUlIZCtseWNTNTlSZFZlUFRJdklnNVEyWlRWS1p6SzgxVUttRUpZM1RscG1YSFhPNlhoamIvODhIbldnakFKL0pSR3luVmJCYUhDL3EzS2ZDUEpDUGx4dWpyTk83UGJqMytKUW1takFrUmJkQVIreFVDeEV5azJ0WWdxVUhQZENYT1BERFA5M2p5T1NBK0NVeDY0L1c2aTBXZzhPM0sxMU8zYUpDemRUYmV4enYvellQSlB2R3lHcVlRbjRCL0V2c25aMUZVN3hJNmRqVkhidi94ek5NZ0ZZRjJYRUpGQ09xTDU4N056VTljcnN6cDdVNDN4VzcvOFJrUHhrakNCcEpRbDVFTlNZVWhKa2liUmRVMXIyVjNjdHU3emQzTjdjYjZibnVqM2tJKzdVSGs1TGxNZndyMmltSHFKT0NOT25XSEpRelcxSzhKMXlORXRMcFVkTjlxcnFublI2MjdWZDVCZEorTHZTN201NFRsQW9OQjhLRUlNbHFnd2dNMTB0V1FoekswdGNZVk5UQnU0dWp4M2ZiL1pGQkovMXFpbjNEcDNrTVBRL29HK0Znd24zSnBRUGhsaUxhVjJzMWQxQ0I3aFd6LzhIamdRU0NLYUNNbUlJSDN5SVFQTlRDWHk5VjF6Y1hONy81NXRTQ0EvQmFoSUg2bDFGelFzdW5KZXEyU1FiSHZOMS9xczhTeE9SS0VoRWhURW9Kb2JoWnN2Z3FkT1ZkNHEyTHY5M2s4b3BhQmJqbUdwcGhHeVYwb0lLNExFZGJvdXM4MHJaLytNeWg1cUQwQ3VSc0g0b29LZDFDaHFhZE5VMHMxR0ZLOWI3LzhFNUVJTW9GdU9hRmtwS1F3RWd4SE1hQkxNcUNnVVdYTHBMTjZha2FsbHVucHU1YVVxWkk2Njl0OXpTbGN3dWU3cnVVT3VjK09leVFkbGlOS3Q4TG9DSlFWT0RjaFJqTU1DR0pCMWdWS0Ivd2JvazJZR285aEZnR05BNGdZQUNZd1FvSnZWUFhaaG90UWpZSTFFNkZRQnpSdXM1T0dseVFTZUgwUmt5azVPVGd4TVRHV2pnNFNMdGJzMDZVdTFMaXM0cjU4bHJDQ3B4TStYMGRRaStqM2Q4QnhnQjhZRmlnVWdKMFZvZ2dCZndCOHdBMFlJWkRrRkFzME13WEFkUXV3QitRREp3aEVMMk5weDNja2xkb0hSQjJRREh3ak1CMVpVTjdIbFNzdWNKQnRCMEI3YUpOeTBjRlZjeUpKa1ZEa3lnb3VjemQ2NWNkOWVsWjE1dS9RcExRdmRPOVo3MXdLOTVEU3M3d2kwQkhzQWtJRUpJaDZrTDZBaTJBeW9QczVCZjA2bGdWSW53cWdWTUE5TUZTaUhsVGxpUFJnMGtFK2JnM0FBb0EvQTNvL0hIU3ZzbVBOQkZRMURhMDF5MFIrc3huamk1Snl6YnBVV1ZsQllxOS9EVlpXb3M5ZHhadndVd0FrS0FTZ0I4eW1wRFNTQVAxQWY2RVVQSStxTVRpeEIxd0JieFBoZnh0YTVWMG1Ta0ZaZ0hOZ2o4cW05ems1TjhwRTZZM0hmQ3JHeERQNUxwM3NPNnNzN3ovU2prczVWdllkMVpaM3I4RlJBSkhnRWJBSnRLSnVKQUJPNElVQVAxQTBBd2dZS09rZkF1QUVwZ01CQXJHUzRvbzRkYXhJV0UyY0FhY0JzaktsSTFjMjF4VmFLcGkwazd1WGtiamlWcFV0YWJCbEgzMG1xQ2lFTW5aeTVYdTZmVHBxYTZXWmE2ZXpwMkZiY3IzSzAzVUo1bVdadGRLT1phZmJwM2FlVSt5eDNCajhpNEgyQVNTQUhHQ1loV1ZOZ2RVQVo4QTdBUk5KTEd5dXBLWUI4SUZjZzNUSTZPdHUrYUdsb0Jub1JkSkhubGR5UFp6TnEydStSVG9GWmJ4NzFGbGI1VXZWbytQZW9zcmVFQWdKSmdDQkdJd2p3T0FOc0FQTUJxSXN6bGdqSENJUzY0R0pnSUdnaE1RNEpubzc4WU0yWk5DMUUyRG5BTTZCQ1pWSG95TURmbGpjNE1pV0llTjZsVGEwcnJsUXhucDZjVXk2bzFlbm05RnhXcTYrU2pybmE2VWJqM3VLMENCcWE4QVR3QkpBQVJBQjdnRHpnUHVDS2dIMWdDekJEQUM5Z2RnRkZCaEFvUUhsSGdEVkFBZmdEU3hhZ094SXdJcWtSWWYxaFBjRU9BckFIYkNMQWRsSUxnSTNDcGlmS2c4aWJPQmNEYURxQXFVSFlERENqRS9ZdVJEeVRZUktjbUpMQ21uSkNGUE93byt3K1gwcjEyenA3cml6UlczMFE1V3hDa0NkODI3VlhLM0hlQkg3dGJkSWlnSGtGb0FsY0Myd2hBRHBoOGtnWUVBaElObUVKaU1nUnFGNURWTWg4TVJCWGphRjhDb2lJajZIV0Y0SlJpUHcwcnBERVhCTEpKQUNjS2l3MmlIRWt4TVNTTGtiYU1pQU1qRWtHSlVzeFhjbGRuNmkxM213MW1lb0ltWkM1MlBocUJNajJwZk5IZU4zTHZrLzZWQjVOR1VGdE1ObkNmQVlFV1VxZnBwZVFQYnFlN1BqbjRmZDR4ckdnVnRLV2tNTllKVVBZOUU3azc3Um9Sb0dvM2EzZG5KZkdzbTIzZk9lZlA1amRWT2U4Q0lRVE9jS0VMMFFjY2tsQ21uZFRLQkFqa3lKY29ublZybkRWc3RkT2EzZHg3M2JUdmxFd2xWVjVGQ3BnL283T1Q0VHhBZzRSS0VSQ21kWEVSWWpGVWVtWmZOVHM5YlJrWk5FYzk1VGZ6Q2xidlBvMCtSek45TUJHdzJMbDFLQS94R0NnTUptWGIwR2xoaVNEY005cUhLNlcwNUZvWUhHM0xtN2laVDNUczNOeHY1aGlwMWZLTWdxdFk4aWlmQ3FBdVRTelJSRndQcFJPUklFNlRaN0tNTGxOb3JVUGhPMzFKQnBFNGNUYzNOUGJ0VDg1REZWZWZlVzFGTE9sYmZHSVBZT3NMdWlZR2hrWXhMQ0Rya3FFQ204aWxTQlVYc3daVTZ1a1pPRERsbEpKYVo1bWJYdFRhM2RmWGQ4MGs2Vjc1YkoydlA0aFR4YzN2bXk0ZG8wYzlHWkFSUXpBM0dJMWw4TEdJVUx5a2tsbXRqdTJiRlFxbk5tOXp6NDNGYWJhdHZyajN6aVZYdnk1RlVYVWlLMWVReGFtSmRyM0MrQjNYMGluWW9Pb0ptRThNdG82cWU0bEcvV1dML0R1SG45cFhaWG9zdThQRUV0R3VuejZZaWhSUjBleGxVNmtDTWZRNUJwczg1WmNicmpueFBxOStkeFdpSzd2RDlBdVVMYUMva1ZBS3hNSE9hcENMU2lpN1dsaENqR0VFWGMvdHU1V0pCalBXN3B1RWViczk3ejdxeHQyL0JpRHo4N0x5dHY4Q3BndGFJVXpBdnJodGp5aFNscU8rZExBdHlrKzlubTNXK0tTNDc4dm5Qa25FekZWZU1BOGtaRU9DRlFac290Z21nOVBCaXRwaWR0OE1uYWRhdTQxTnQ4cjcvUDY1dlBTS1RBbmRyMTJ4dzJjNUV4TDRNWE1PYmRGeXV2K0xsVHZCaEFrTkF0NGJBYUF3M1I4aEpXSHJOTVM5MHZpeWJ4N0N0YzJlMSs1T2I2S3BwOU85TUhrbmtnc2FnVGE5TFQ0NUhHM2J0ejMvNkFkRFUrb001cFF3K2tXOCtjUWJqcGQvK1RBOVNoVlplazluVUVYeTUrOUNEc3lXZHYvbk04SHZrSllJOExJRytId1A0dnJFMGFiN2xqa3VoYkxubEpHajZXcldabEp5elhWMHN6Y2JadnB1TnoxK2d6WnJEN3ZGSktBK21lbDF1dkVHQXR6QXNab3dSd3owRHlPTTZHRnJGeEZNRmxpUGJGMDNkdVhNSnRkSWt1bTdJNjhidUxwNmUrcXljOU14T3hQMTRiNUdFYzhhQzhvRGdLZ1Bvd05sQ2ZtRVhFWWVHbDZlamJxNm00OWFxKy9jbXRrLzd5RE9WT2ZZZW85MnpVRUFnNDlGRnlKdEVqRDh0SUxCRStOVHNjZ2IzUFo4NjVYWHlmMVhEeUlMZ1c0d2lQWVdmd21CV0RBb1FTOWd1NkJ5TkQ1ZmpjSFNZRWRxVExaNVYxdEw5Wlc3NXl2Y2xnZlZ1M3dUR0ZaV0QvQTNpNHlJZ21neURRSytBOEY3R0R1WWw1TG1tcXV6ZWVTVEF5SktRNGkxUFA2UE5SNlZvOVBSdWJJS1YwNDNuc09uYWsvTC9EWkNsaUFscE1rZEIzSE5jSldTSTdCUHdyVGZiTjNWSzA5YzJaVjB0UzdwMk5zdFdzdTNjZXY1VGZSQ0pqbTlpN3huRW9FNERTeGpSakljQmJGSkhVSE1Eb2NwNG1GWlVZWEMwaThWNTY0OUcrYU9MNzkyWGVRYWU1dDBkOEJId0JHOEI1SUE5SUNmd0Z6QVRVQXdjamhUZ2FzQjNBRDBncVlSaUE2c1FvRmVBbkVIR0NuQXBVWmdRb0NMZ2JVRlFoZ1FScUhhSm9IUUNqaEVJMWlIZzFwS0JXNGpRUm1Ea0JHZy9FQUVQaTVEdkg4cWc1b1UwR2ZCeFNxQ0R4K0ZFSXlHQ0NJaDdPQTh5YW5JVG5vRVVYYkJWa3VuWXVQTThQUW5KeTJVVDBVWGJDT3prdW5JdW5KcUxweUxsVGl5N3dNVEFTQ0FSdEVtQ1ZoN0VrbUFnd0FjZ0IwMFNGcG01TGdiY0ZqaGZBY3Naa2tkMTAya0pZTjN3ZFJKTXJWM0pra1h1N2J1Yi9TY3lyVWNlOXJ2a0N5VFhGU2p2QXhvQkg0Q0RRR1RER2dHZ0J4b0NBQUVCZ1VjR2l1T2ZEcU1RMEJDb0Q4UVdLSWVaSkNsMXNyOHBTRWdlZ2gvakZJYjh1eXl0TFM2OTlOOTF0MzM3M0ptOTd0UE8zMG9KR1VFeHZlN1R6dDhSZ0NENEQrQWcwRWtHNDVCQUlHeGdHT2cvaFBIUE5scG9RMEZqQXFFV3pKcWRzOFBZalNuZTlMdTVrVXUvaWVHTjV2aGFRRVZRTk1IN3U0ZXdNMkJVUXNEUHR6V0dEa0l3RERuRUlIY05OeEV1blBqbnptZXBBUTlBekEzTTB6QWVRSzFCUTVyRGRuZGd5RVFpTTl1SG1jSWIvenFYeGpBUThBTDhHSXpRTUxnWkNDaHk2Q0RaMm9MQkVJak42N0R5eERmbk0rVTJxOThKMkFpbUJvbzFnN3hjd0pJRmhBcUV5WXZYeS9ocENNUWg0YU9lZHY0amk3V212ZE9mTytEWWdJM0FQdURySEVTQnNFOUFOVEExUUtDYmtTVVRsbWc2QU5FQ05CT3FGcGNydlNTR0NYbXZsTHJzbEs3ZmNuVHViZERQQUNPQVI0QVFmQnNSQ3lRTm9DcWdJSUFIWkEzSWVvOUhJMHFEa3dBOElMVEJYNG56SWRlTWU2VWtCN3NrQmhaSkE4U1lXMDFhNjV5a09MbTJtcm01dHBtZW9tc29EOG42VWM1eDMwQ3puMXhtUVk1VEhIdStBU0NBZ0lBWWlBZ2tBS1NDbndqVUI2Z2ZBU3dIOUEwMEJkb0djQWdrSGJDS0FWb1NnbGcyaE54NkJaSVVJRmRnNXdLVkNLZ2M0SWpDSGduUW9DV1NoUG1JUndIYWtCRkFSQUhZQ29BaHdUcVFrR0lSdXNMUUtrR0ZFVUUrWWhHQzRSWUVPQkZ4Rkp1cUJIYktkdlh5Nk9LOW5aZzNoMXNhUE5POGIyWWF3K1U1OXZYTjZFZnU4VG9MY0h3RmVFRERmRFNLUmNYT2VUaXFZckltVVc5VjNiUlNYamZQYnVkbnQ2NTZlVlVxdjB5VjAxdWUra3hNZytrcXZQVzFoa3dGaVp6cjN6ckEwbzBVd2JxRXRITTlCWHlxdjlWbjhoMW9YWXlyeW5jaXFpa3RPb3RUUnlidXpDWE4wZFZldDRWNy8xU1h5SEtJY0JsRm4xYVoxaXl4ZExHelUxT3VnUEswZWp6ZS8vOG5SSWpJV1Yxa0MxS2lEakU0dHFmSmMrYWV5VTFtcGdyNVZrMmVaLytPZzRvb1diVVRETlBicVVLV0pwMVJoUFVWRjQ3Tks2aTl2di83VFBRQ1dIVXplYWFpUVBFU0l6RUUwdTJzZzJidW1sZlk2ZDF2UC93VDIwaVNMaUFOUTFqVm9ORE15eEwwM09xbmNwZGM5RzU1dTNkRHB2M3VuRTBYZUtadER2ZzlyRE1Bc3c4aSthZHJ5NWxSQlJUR05jdjIwMXRiRzZ1UFRVM0hGZlczZnprbjIzZWxka3BZcGZBK0pSR0VWQVBxSndTYUVjVTVwQXZSRkUyV1R6MHFIdmVrR2dvd3UremJiMmVjVm5lT0RaQjNQVzArbE0zMDd5RVRwSUkxQi9hNWhCSFRZamw4N0hkcVhMcjlMbk9xTnhxY3pXNy8vTjhtQXJpSXZTZWFUY0lPMUY5TjNIbDBpdW0zSG5SNy96d3JBNFVtSndQcS9VNzZUWGh3b1FiT1JwRlBGTmZhMlh1Y3J6UC95SW9nOGlkdXhoQzFJM3p0SUp1Y2ZQSTJsZGYvb0NiQ1NjTVpDMSs3TGhsS1Q5MUUza0phTVZPNjdadzhyLzhTQnNsUmhua2Z0bGlzdG9aa3pGUnpWVHlqTDV4eDVWSzcvL0JOVXNKQVRDSDRSeU9sMFltbHg1S1dwSUorMjdZMXRSbEs3MmJ1ZTZlNjFXKy9IVFU1L1JjS1RhZDRaS0V3Tm5JVTQ3T1hjMFh5ajJvSTVxVFZIUFhrNXgzdmRYVzNjZU83OTI0NXQzdWx5cEw1aGpCTUhRWVRRaVNoUWtKSmFoaWs2aXExN1Y3M1ZpejNUZmRlemJxbTQ4cXFlVmQ3dmRITjhaQjVSSlFMSklhSi9Gc01YZmVzMU1PN1VWZFV3bmJnMjdZMi9UMTAzOG4vbmZBUXFIS21nRktnTGQ0WVdOUTV3UmNCbThwK1J6ZTFyNUJxQVJoa3dtdGI0OHZ5aFduMzNKL1pxT3dLN3EvZFFTZ3JFdFR2aTBUN3A4MGluUUdibzdxTGFoTUlUVzFqZW5tdS9NM0czYk9oaTYvYWNmaWxtdkN6YkRKTTlxTUtlNTZaQmUwcXlPenM3K1pGMDRkMStTN3dzaWNna053ZVNkTnJHdlJXb1VTNUMzc1hGaml4ZjdWVHM3dWJHbzdGM3FuUzd4OElqQk9CSXVtWjhuRGt3L2tFTmc0dHE0VmVLM25WTjQyNzVxdDJZVERvNnJyMHU1U0NVRXZ1Y3BYaFh6eDRNVUtOUHFDQ2MwaEx0bkpSTUozem1VcnJ1dXl0ZnBUNzZkTlp1Qkh1Zk9reEsyNmlzN3c5VVR6Ujhsb3dvV0dPbXRRS0ZxN1c2VlBtRFRmVGZ5eEtXYWVRblR1cTZJSGZjSTdjcVlNUmZYaFh5SW9GOUFod1UxUGVaeGdoMTl3dVZrVUZWSGZiN0d3UXd1Q2FwY3FlM3NYZVFYSUV6bUVGYk9UWGl1V1RPWWRLQWhVbGROVDA3TlM2dDZlcHplbmJ2VDYrdVJhNlhSeWM5QWZKaVZEQStsUEhlT2hmQk1Uall6dWpPRmJXdk5LUW9JN095K05hZGI4cGt1R25Ka0ZRMTB1bXRtbGVLbmZOUlF2cmNjN004cExrTVlWMmFUUXFXRkw3WExVVE5TNlVXdHZqQnlwMVM3ZjJLSS9DR3F1cXBmVUc5cmZTN3NKZWdQMDNhdHlyUEN1cEMwdFRJZUxUNk9rcUo5b2tVMUI3MzlWUnJhSUYzc1JQNVd2YnluSGp0K3BTNUd0OVNYSTJEN0dvblFkeUtOVGtjZTQ2clRycS9aUVFQN2xON1h1bmF5S1h4eEkwbWljbklIYlNMVTc1ckhQYmhPeTQ5ZDZXbmFtZzZ0YjN6OFQ5Vk9PL1NPaGc5Q3NvUlM0eklteXc1aEZXdm1vVHV6WDZmbkh1ZW1ieDZyZlZiT3U4VTVoQjVEZTY5a3RocWlvN2xRZktjOXZ6UkttSVJDdHlCTkxvNVR2c2dvR0U3RlFkamRUaXQzb1JJc3NOSjNNR2tMYytQSW1MNjl0alc2bDhkT3VWWDErOURzdzFMTUkwM2pwcjlnaGRUajlYNXVZRHF3b0laTXN2WXJhMlVERENodDUzMnpmWEdqeS9TcFZHcHFUVldubWZGN25TZ2wxUzc1RFFEMGdaN0lwQzRqc2NuUVRVc0lFL1gxbmR3bTU2WGZLRk5tNXNLdWR3NjMwcWVjUHpTRGR6N0VxdzVPOU93b1FvK3FNTmMrRXM1Q2xleThzMzdxUUV5Y1MxQ3AwNmRIVHpQanRPanRSZDVCR043bG1lSUpxd2JFUFlWTUlOdm00V1ZyOWlGVGRRclo1RlBWT2EzV1VHTTM1ZHVwcHB1dDhVZ2FLRFUwSU51blh6eUtDS3FmQnlySTZxeWNLMStnRjVMTzZsbkkxamJ0cjlUT2JQNDNubnpCNk1jVUFqM0lJSlhWTzdjd3FMOXBYQzlWOU9xcjhYajUrbEQ1cFZwWGQreHgrem55SlR1SEJBYXBuNm5UMXNvOVJ1MmRSUy9kYjJYZU9Ea3pwcE9mYmhXelhvSlB5N0t4VnNjOUtZMmpVU2dUWHFWQ29sOU9ZMlliamV4cTdlcXViK0UxV3k3S25aaExvNTU4TWljZGt1MXQzOVpQSVE2S0ZoU0g2Wkw2UlZ1WFZ6RGtVNmQycXNyZDdISmtQUzl1RDVvODN5Q1FxWUVkS1owYWhXS3Ricnd5MXkwdWNhNWNEYVV6TEZKcWdhTzNtS2hOVFUxTk42ZTk3MHozekRaem84cmhIU3RYcDZnbWxCT3pUcWVydU5Ubmw5ayt1NkdvQ0p1d2hUK1dVWDFkeGNyNnJucHZ1NzNwVTJidTVSN3RSekRyUDFMUithclUzakFpUk1iZXJYMjJpaHp6YStZeDh2dTgyWHVqeXJaN0kzYXU5OCtscExsVFRkS3VPNjgvSEs4eEYrRVdZVHBweUp6MWxGVmNiNkV2Zkw1dnFiNVU0ODczbjV5b1pPemxSZDg1aEJUUmQ1SnFQR2hiU0ZnaFBJajhsRHJEQ3FtcW5yNTludTNIdmVsMllZOC9UZFRoVzF1djJYWkhOVmI0eWtKQW5MNmdhMlFrOUk2dGpLMnBZZ3JvOHFjejB4TW5YeGc2Y212cDlWa1NEbVVkdTlZaEVTQkV1VVZ5Z2ZEcjFGVk1iTnh5b3ViMVZmTjMzaThpZXc2bjFHbFdoajg5aFBCREdFdW1HTjFIZk1UUjhxTFFWem5kc0lJdGVteVhRcUYzbFZ1bmJwMzNwcFRiVWRqc2RJR3AwN2Q2V3NJTG9wVmJxOEphbmxBd3VtMTZldFJWRmpwMk9iRGFxaXZYMDZhcDFaRjB2VmI3ZTVPdVZaNFp6S0VpYVdwNFZVb3RSVy9aMkVVVDRUMDlXYXJxT0t1L05rZ29LM2FWT2pwNWl2UHFuYnVPbmZHdzBRcUV4RFBvWlVHaUxaMmRUVXhQVk94bzh5TitmcXRqaDkwN1IzazU4ZFB4Y2w4QnF5SklHWUNLUU5oVGs5ZDdXeUJpd0pCMHRsbFIwclRXQjRBWjlNSHpiZXQ3TnowZXNyZDRTcFo1b1pxSFFlNkZPaGJlMVBLbmNyM3g2Tms1RVd1a1BkZTlQTjMyWE9UVTJydU80M3F2ZkhjUHMydFo2ZEpSRkVtYVZtMUNDSXdXZjB2bkkzTmQwOTB1UE84aGhrb3FTeTlMVTY5WFRtNlBhcVhWN0pxd1RIVEJ0OEZlNjNwN0RaM2ZITWVHaFNZZ1pOZ2VMaWZEWFRXMmgzb1FvNnFQZFBPK2lGVGIzbHMxN0NqVXNVME9uVHV2RWtPdVFHWVB4NUNFZU9jd2tqOXM2ekNhdVlTL3BjZE8wZ1hmeENtb0k5M2JsMDZxcjBZcEp4RVRwcXVidlc4OFFvZEVhdzhzSU5JU0ExY2JMalM5QW1tbzZ2Y0VpK3RSMVZjOTJsZmxkK0t5ZGtwTlRxdlN4VHZEVG1zRE9MMHJsV1VXTjhWQVBHblNzV3U5Z2l3Y25uZHVwWWh1ejF5NTFkMWROelhUb1l1L2wzNWlwM2d5UXNUUVBNTE1YRVJNaWF5ak5HOHVXYVl1WDR6cTBJOU5xNmowMjN5cS8xMFQvb2RsS21sM2pFSGxjbVlmYVY2MndvakJ2bFRZVmtLZFZRNTgyM1JXY1dlLzNlQ1VHRXNoTVFZSVI1Q3VNRTZOZTA3OWpCNnJtWmZUNDJyNXZqclp2L3p4QUVJNElRTGhKWVpsS0gxU0xoTzI1SE1MaXhWa2N4dlkzamVOMnE3OC9HODhhZW1CSUZVUXBEeVFSWkVOR3haYTU3SXdxNUtqTXZtMjhqYzEvdThDelJ6ZzhMQ1U5UVloUHVUaDlqNG9MVVU3TlRxS1RFa1A2ZFZkMng1VnhYNy84VXJLalNhb1FKelZ6MExoWGpjN1VEb1NqMXNrTlhManF6dTcvL2NvVUtBK3hDUzJhcVhqbU1WelZVZ25JT2R3MWRDYzFYbVR5dlAvd2hlZ2tIQjhpVkxpZXlpbmtBenJjc2dkczV6THJVcVoyTUtxT3FvS3VWVk4rUWdxMk9yUEhFKzVLbXAyZU1ZN0Z5d1BZTTB3VGRQV3dzanhub1kvdVNkTk43ZDkzTkxXM1oxYzcxcXI4TWh0MzVMajVNZDRIVVRKa3hSRDFhV2xGeTlqS1lZdGo3ZE5zUDVxZW5vMDI1dGFYSGp2TkVyc3Avck9qdTU0d21ob2ZCZnNvK3dpblNjUEJjek96dHZjNkk3THhwWFowNy9WTzhlWk05Q3dKUzF5Q252b1EwZVgwamJmTzFGYWRpN1cram1mL2g1SlljRjBDM1hyNlFYeGNQWElJVGFyZEdnM3l1blN3Ny9WWjRheDlPT0FrRWFLQXZTZ1JTRXlGbzZhZG1PaE95L3JuYVZYVGRGYlAvemVSSEh3MENhNlVxWnlBMGt2Ukl0eFhsbVNTTU1jM2YvNGJDRkFuQXMwM3E2bExQYVk5a3BwZlU0L2trNU5PUGUvM2VBa0dBZzBBL1lBZUVCcUlJSkFLOUFaQUViQW9NSGRBMFlBMDhBMlFYUU82T2dHdGc2WVFDUFFWRUZiZ1QyQk1ZRXhBaklsZ3EwSXNGQURyQmh4UEwySXNEZUJpQU0rRVNBeEVIRURyS29LZ0R3RndIY0VSQlR3Y3dFSGhFNE9NS0lYU2tPNEZpQmlodEtZNDlBaEk0b1lTL2RnM3RBSkxiNXZCTWhSVW1mazFEZG1wZzZMdGRUZVJjZDZXSFM1VnZnUGlBUTRBTkdEQkJCNFBxUG9HSmdzSUl6Q0poQWg3S2h3VHg4SUFJZURGQ05DTmo4UFNsbG5zYUtSVUh3THdMZ2Z5bWNtN1hadk5OSERUTFhkdXozZDgxT3Q1N2o5TjU0RGF3SUpCRHdXWmszVUdvakk4eWFNU3hPOGlIaUY4ZTlmVDN1ejIzUmQ0aVFCNndCVFFzUndOY2FCTlkrS0toTUp4eWNmRGVEdEt6WHlmL004UWdBNjBMNER4RGd6cklRQVBEQ1haeWMxTUs5blowcmQrTytPZUZsQU9UQit4ejFoTXdEOWxPRTYzczZjcUN6M3UrT2VtQU9LQzZKaVk2ZEM2bkI1Unp4Wjc4ci9CeHdOV0F2RUliSDhOQVpDOFFnUG9TQWFiUnNzaFpOWEZKcW1XcmgxUnE0OUc2T3UrZ3lNL0k1bmdNNEI3QlNpeUFLQUE2aUFuamx4UEhLd2ZJVVNubENqb2NvN2RIOGFwN3U3bzkydHViejh3LzdrdmdOMEtRcWhvQlRZS2NaRjgyUXNDK1BRWWNXd3QxbnZqcTBtQXR4cEdzV3lTNXZtNmRaSEhsZGFidHU1dWJ1TnpmcHBQbjAwYXhXNDl5YWpwNjdReGptM1NsYjNmS1lQSUpzZUM2a0FQV1pJSVZ4cE4wTzZSUXl1cFhZbDh3enFVUG5tK3B2cFVybkZxN3UyK2wyN3VSenlaS0JVbThsalNNWWE0ME5RQmhScERZRUtaTXpaUVViVUZNaWt0NVV1dXRhcEk2N0tsZFR6V1gxeFhYWDYxUGQzVGE5dDNLWEp4dEw5T2RWUmU2ZDlrUXNRc1U2TXVXZ3lOWWFxTzN2ZkJKU3h5Sy9ibkhOcmNZSEtuaVJlcnpVM0ZaZWJzOXY1eXZsTEREcDM4SzBQNkFwZEozQmF4WGtSM1JRYWlHcFlqa3U0MVU0cU1WcDZiYmQ4cFRwM3hUSzRlSGlNWkdhbUE0QldPS1lxVTI1RGRUSEFyU2sxdk44ZE0ycnZma21KZmxBZlZaNFhjVElra0FMbWpITVNSSEwwbXJkMG1zRWI5bmxGZE5TdFBkM1R1emJOUzZQSys5KzVpV1haL0lENTlCS1d2REsxNHlxQlNJbngyWUl1aHJPMWNkNVhUbkhWeDM4ejJ6L2hTQnhvekdjZGhWVzlBaXFlTGkvWnBFNThJVGF6U2xtZFBNbGI0ZWpqbGFsL2lqeUUrbG1vYnAwNXpicWowNy8rbUhJemNtVFR0VHRUQ09hcmNkWi8rSTVwUExDTkJpZE1tVFExWit4eWFkdTkwUC94QXhJUE9RMlNtWUtDRE1OMWQ3VjFzZGl5dmZOS3NPN216emZySlA3NmVwMStuL0Q1VURDWnMwYUl0bEduUTExSUh1ZkxtNk85K1VzbjR1L2ZFbUg2RWxnV3dYbzJRU3d0cktDQ0dVR3dmVjNrdXc2YytlblR2bzlVYi9IZlJNclBDYXdKcG1iSUMxeE54T1ExRFZ2bEYwSmcrY1oybTN6YmR6eFk3MHZpODdQSkUwOGhFUkNmcWFmWnVSbDNSMXR6bjAwV0tmWCs1dDM2YXlsTG1UT1haTlFaUnJQMTJuU1RTeS8vOUVhVFNacE1sbllvV1dTdSt5enYvK0U1S25KcUI4cGRxWVF0emoxVFpaNy84RTFMRnhvQzhDUk5tY25VUzVRV25Zb2QyY2xxMmJ0dWpyakFyYjcyOTgwUHVsQTdNOFNyaVlVQUd3SUJURU5PbVVKbUZFNGlXYytVV3ZxdG1wcnFiNzV5WGVmZE9KWnp4S0lIQklCbE1GNHVpc3NYb3RqcXJiVzJ0SzNWdjdrNGxuUElMcFAwNTN1TTkzV0NaSitPVnpUbThWT3A3di8wRENCQWhZMktXS0JPV0w3Zi95b1BvcVEzQWtwdUxBU2huZHFWMkpSSWxERlRzM1BkVnp6MWRkSG0rK2o4NXZ3MmFxZGQ1bUxZTENIMEZkZThkemhnb3ltM3AyNFRTSmUrbXUyNWV0VWIrWGZrTjNaZG5odUNtMU9NWnV4cDl6cHRqbjdWS255NWFkSzNmQnZQUk4xNENSb0xpeElHUEFXTVZIdVRQekFCSndWMEpkQW9mc2RtQkhBTzZCYVk5VFU0ZE9jUDE4ZWQ0cDR1Mnp1aXhEZkhSc2NMTzdMSGQ0RDJBUzRGbUUwTFlmMUF4anNiUDB0TmlqcjlwUjFjK1hkeXFDclBPM2ZPU2ZqbmhCNEdaQmRBNkJYcVJoSFFlaWlmR0MxSFZLZkd1ZEtLT25lKzZPZTd5Z0JxbzlKOTJJV1kxbkRzYzRGbmZsMytUZ0RKaFlhbDNNRUJKMkhodnBaNzVESXo1ZG5pa0ExTXFIMHJZL001aDJiNFdlOXpzL1BQZ1BES2hCU3hQZzlMS1U4TjRGbnZkT1o4YzhhUVdhUGFKTmRJUitOZGh1elRxbzNobTdoNzN5N3pwM2dKd0NOZ3U0WDBlaG1Sd0N3aXFHSVNpaGxHN1pwcnFaWlJacmpyWTNYdVAvTHZBcjBFcXdXQUtDRkFhR2JLWlBCTVVqR0RFRThKaENHNTF6dTd1Zi9nRTRob21zQUJpQUR5UlZrWXQwejRxQUhHZ1dBdE1IdmRQU3VTUUtpQWZsZlpmS3IyN0grZWphcS9HVkxMbjlLVlh0bGV1KzV6RWZPYzVWMWxqdkNvaklhdENFQnk0SHRLYzBUV1BhTnkyM1VYc1FNYTFxUGJiUFhOemR4dTFWcXU1WHpDV05iSi93eVF5SndjRVU2cnp3VzhoWEFTcFI1d3ZjdzVRSCtOZ3dUREpxcFliVTlwNjZhLy9TYlNjTHdzYUgzeW5sRXN6MDlteTV1cjdaMXl2RzYvMVNYeGhyWkV1SUtab0VxSjJ2bEpWSUVTTFl2bkRsdTV3N2RRWTN2L3lpb1RrRUpFUHp1cDZaQkpKRGpXdW5SZld5OHdNR1lYT2xicHovOFU3VUVGRGsvVVNMWVk4cFJnbXFhbURzS2xxcVZaLyttSEtqNEx1SzVPbVJJc2RRUGt2dFZXeHFwdHFiblpncjJPLy9nbjVCVUExQjVUOUxrU00wTHpDZHlwZTdvMlBOejF4MXZwNlh6YzM3MHNuMDFaNW8yaTN3TGtIWFNTRjFOU0dtTTlaTGpmVjN4WWhjYlVkTlRVSDkxenk5elU3YzIzYzlUZlhPZldUcnZCM3Ntb2VDRlFrUndPWUYxaVhEMUpvNXRFMHllSm9YQm84aW11TFRCRzFaSmd0ZFhCZnVucXZtYnkrbTFsZlhQVDNzYkZGSi94Z2RpVW0xcXFwcml2WHJNekFKVU9qRklud2d5cFVzVkhkaEc3UnJ5L2l0Mi8vazRtdmdGbUwwV1h1MW9oSnRCdUVjcmFXU1FqUjFSMzMvOGsxMmhXaERxSUtKS21xQmkwb2RNSVM2YzNqY3dtRWJPdXFkLy9GOWw4aVJLS1pCTUVjMnlKN1hzYkhkblpNR2dqL2YvMWljZ3dkekc2WllJVTZzWHZwRHJwZExxWk1lbzdkT1JnMjcvOFlCU1NsQ1dwazZHRTdUK01HSUdtMUdENXZqaTUyT3FxanYvNFFxSkpkRUNYV1NsSmRrcUJ5R0pjb1dhN3R2ZXRCbTQ5TlE1VnMzUEh2ZTlMa29QVUVFKzR6MUw1c2JGd3ZHWnE4eko1YnR2ZStMN2pUS2k1V2pkc3g2UFRkTjNOdDlQWDUvOThORk9ocE9hcVROb3BFSWpNMjdsRnNKNTNsMnA2ZXFiVzV1cW01ZEhsZHg3NVN4ZEx2SUt2UEw2R0c0UDRVa3BVeUJ5MXZlYTI1OWJ5ejlucDdacTQzZHg2TnE3cS9uSnowc3U4QkNlQXZ5RHNBQlNJRjNFM1Vid1V5Qm05UDFIQ2FmdDhEVWdqQ2FqQ2FqZFR2bEdzMURaM3ZOdU8zWDU4bUg2cHR4N25oYU5lbFlZZ2lmTDBNcHAxUkxsY0oyNXJqclZXK1RLcEJWYWdWNUhmbEx1N0hkOFczUUlWc3VsNzBHb29icjQ3dFN4TmFXYmgremt2VHk1VS9DQjMyM2E4NjN5cktmU0UxQXRRWlBZajZYYmxUdFJxRGl0bmVtZzZrRXdka2RtdlBvSjNabzZ6dzlUQVZRcFpoTUxRb3FkVUk2VHVtNWdkMWR4NnZjR1FhSnFjNTFUWHBUOW9VMlpNSmhwMDV1dkQ2RWtYSU9OSzZDZmsyMXM2aXJ1ZWowNnVhYzNoNTN6YjFVTm5jUGFyMHBwMG4zT3FybzYyYWp2aXNnSTZ4Z05MRExJYWFOUzlCS0l3bW5xRytWOGR1K0xqODVUNmwwWHFubmUrVEoxTkhCdzJjOFBjaXZNMW5YS1BUVGtMRU9ZUll5Nm9WMngyUGQ1TlFQWXFYNUdHdmx4NDdQQmJKVEljbE0yOTBDdlhpbmtYb0JrNkx5aEl3VzBmeUV2cE5yNFIzNk5FdElIVnQ2ZU9kK281MUszQ3ozYzhWTmpxbkRKcFFSU0VnbDI3T2NpTlVVb3RtanExZGVtVG1pYXBUSTZuVHZvMHFjcXIza0czN0tCbUV2TzdqQnplZUtSazBnNWdNbFFRa1VGQ0tYYXdqVGJIWVBiMVYxdDhkOTZFMFRKcWxBbWZPNnEzMkVhQjZhRTBuaWlWUFZhZTVwMW5qbUVrUkpoZVlRc0VKQ2xORTZlVFZZaVF5YXU0SzZqYmRmcjYxMjFyZTdIS3BXNzYxdHlWM21pMnNpUDVCaUNPN3VaQkJqZFZ0eGR0bmRuWGU5TEthbUF4MWZycHJIeTc5U0ZzQlMzaUkvMUdhSmh6dXgzVHVQVmJOekJYWHlmUVlsZmlDdGRzNjVWbjVLV091emZEekw4TXpXb0lFeWJVTzdtNnNnZTNuVXF5ZVYxNmR6azZhajUrY090Y2RiNkRNby9tZVRReVNFWmx6ek0vQ2tVb0UrN0NvTVZzb1ZlMXFwMzBLUnhuYzdsVFdVM3J6dXZ4QkwyQ3hsZXdNb2tUUmp0d2lJVWZiR3NVVk1Ldk9Wd3FtNm52UGt3dDJkbEJHaXU3OVJHYURISllLczh6RjgxU3AwRndKcUNVemJwZk5TK0VKdHl1MmFtK2MyNXUvU3BZVHNvSGFlT0RGNThvSW41M0l1ZDZVamptbEIzblNYSWNRN0NYYkJoNmJrVHAyanE0OVo1YnZTMGFLa0NFRnE1ODZRbzFtc2VMNjNFUWd2ZzBJOU9vVHhwaTBkTHpjb09uVzN6em05OUFPRXZUUDNYN3A1YzFMcy9VRzZoaEdGTjZyaE9UbndXU2s0aE0wOFg1dVlWS0dYS01sOVFWN2MyNk56dndvK292a05SZk9ucnAwN3J6OFh3ZW04TWtrSmtzd2ZTUGx6Tlp1RnlobGhaN3BwdTUxVmlwM2VHU2dKaUdFRCt4ZnA3dCt4dFFxbFd1SzIrS2t2TTU3U1pTQ2tzQzFpcFJva1ZiTlFncXdyWk9mdUpaMlhLdHB1M2U0L09PblZWS3Q4K2psZ0RjTUlwSWFpa0tqWmhPM0RIOWZVcTJEbFZlbmM3VURGVFV1bUVjTzNiNkJMSEVINEdVbzV5S1lJSlJscjJId1VkckVzR3AwNStLNjlLbXJIMXNNbDdkYnVmSi9NU3dvLzRwaGhlS1ZwUWxGOTZCRHIrcVdkZytYUTNwZTMwd2owYnR4WXoweUdkWTJBdktxYjA2ejNReWlFOURyNTF4M3ZzREthUFFVYXpXdEpuVStGV3Urb29zT3E1dlkzK0lOUUlLMmFwalRwN2VmVTFEWUlKMmJpNVZqYnZYY0wwbjBWSVJTTURCTlJmcUkzTCsyRk13VlBsUnlwMDZydFhuMENSZHFkcEJ1MGQ3UlozM0NQemRxRUtmMDByZGhacndrSmFPSXZ2VDd0eXh4bXhMQm81TSthUmRrMnFkQlZXelYvVEJtZ25ZdW1IeVFrV0paellTOTJubVRYbUI5MEV0cGtxUFpZWVJ3bTZ1THJtOWpDWDcxcXNMSGVRU1ppWVhwVHdwVlNxanZHM2ZycVBzUWU5dDFZM3ZpUWU1RXcvaUVuNG05c0VhUGFUVkwzeTl2WnFHQkhmZWZTNU1OVHYyZDFXNDZkOFhUVGtHK1pNeTh6dCtWU0tFQzJFcHRxb3ZsNytiMzAwN1NhajdkWnM2Vjg4L0ovSGVSTUlSb2dlUWt5TElhK1BKblAyWFhPVENjcG0vUHcxKzFpQ0xtS2pzYVZ1SzlSMzlRSDlyVCt0MTVpOUFvU240R2NDM2tEMkpaM1VUb3dxbTdWTzkwMURJNjNWZWxjbHFKOVZ2aVlESlBuOVJJQzEyMGduYVlRVlRFN080M2s5NllYdDJvU2hwdlFXcnYxczFqOGhIWnJ4SzJuTldFeDlNekFYOWxSZDNpS1g3VUw1Rzl2cjZON0hwMzVQeTdZN0NheU5WRngzWDFIRlZlRzJ1YXJ3SVhJQ2RhWjE3RmgrSTh1Q3QwYW0vMUFtb21UaUNFZGx5dWl6WG9FMVRVMXI1eHdSN3ZnRU5HeWd0QVZBQnI5UGZ0azVrRldBa0dFb2swSW9zV2VEWmdHRU81bXVzN2hhdTI5OGJrUi9TWWJwb1ZOT2RLeDdrMHo0V1JROTdoaUlXSm93aGJXbmo3NHduU3YxS3M4V1E1RnlaaWt4ZU1WekNlbUJvd3h6SnJ1emVxblQyeHFPSFYrWFBUUzZYUVlPM0tuZXluUTdzdVEyVjkzelkzRHlsUEJBWmx5SmRDWnNUYmtOVFZWRGp2ZGpaN2ZvSG9KZEdvVENhL1dPemRxVVRuK05KYWlORWc4YkJTK0RCRUwyWlJvWHA1eloyRDQ4K2FWWlhtc0NZUWR1WFhGMEc4OGhvRXFaL1p2TnVyRzNlRndlMG9IcEU4WDNvMUdZc1I0R2pCcWlmcjFxcEl2TmJmZEc3Mkx0VjNIanZ2Q3Z4Y1VtanZLSzczZU5UdHdrRjU1eFg3UFF5S2xDUEJxT0pjYUxIQkNoZWx5OE9ZbFl1cUZ6VjlDcnVlbStqaDUwNytOdStuWktXYzhEbXZzY2dDZUM2Unhlc3M5RTFiRXNWRi9NS0tabXBXanNlYjZYemJvOTZiSlAxdmtJKzdVMWVSeWVvSmhrQ1hTZnFmVUtaR0d4U05GTklvNXVzdEx1aEhsV2RMdWJvNjA3Ny84V3NENW1aQk9GOHl0bGdjMTBibmJCdGpaWE1JUWQycXUyTFUzTjJyMDk3ODhmR0Q0cFFoVU5LNVFSZThwQ1lxVXpueTZhZXNSNmRicDV1OWJ0dXpxanJ2L0cwdmd1NDR2TkJsTGFtQ2FwSjRQdVI5bURucXVXU0hITjdQZE90OVBOMmUzLytMWTNRV0R5Q3NZMWpVQ2ZSWUQzMDdLYkk1Q1RBeWZrZVBIRmJQL1BRR2lJekhJemhyZW9CWWljZktDVVc5QjhTTzFPVGI1MDYyY2ozLzRrRkQ1QjdSWVVtWXgwc3JrcWRxbUpkQ0xKSWxadTFkUjQ3Nk5mN204OEltaFFad1drU1k4RnlBaGEwTW8xN05Uc09tcnV6Z3Bka0t0VkRweWVtN3UxWFI3bFZ6YnB5c2Q3VHBQcDZUSFZlQzhDdVBqMFAwbEUzSE10WUhUdU1DZ1lMZGNtRUYxMTc2cFhybmRIdWp6S3ZvczFqZCtmcVhSYzczYktiWlM1bmcwN01NQmJ3L3h4VVRSYXdYV1NDKzNVYVRzNitYcVdXNlZVM0NvMjMwYThtbjVxWCtYT2pVUG96SVZnY0VacjJEeUVnaEtUcnRWdU1jUE54MVZhdXYvemxpb0QveUZOREtZUUNHRDVEWnBOTUpZeTVYUFhOMVViLzg4VXNLVEFGREIrejBNVDZPSWx5bno0cDhiZHcxTmMyOVhVZGJ6djlVbDhOMCtmZ01DUk1nWWlta09JZnBxT3h5WHp6TXUyWG5WNmRXcWQvK1VVOEtFcVFrKzBpek5OK2ZIS3FYVHRtSmpkVmRLcVZPT3UvL0RjVGFLWVFCTnNFRVVXcENWQjlVZ2pXdWxaSTZkbnNvNzA4djNlN3dFa1JRcGdMUEFJbUFyQVFVaURBbU5VUVVrQSs0TDZZRkpxcm1Fa2VneEFGYUQ0a01uczhxV3dxU0Rjbk0ycmFrYW1sWmgzbTdaYWVjNHNaNFZsMHBVYzRycml2Q3RMTitBYml1eUpBUXdReGhZellSd1FsSWRvcGtLYVhxdTcvay9Ma3NwZkNMd2gwWFFIT0Q3Rllaa2M1SE0wSXFKUW8zVm5NOU9VK3MxdC9uNHU5M2owRWRGV0FPK29Sd0ZhVXA1RkRYc0laVDlPdjFYWHhkaC8zVk91blBGU0Jsd1djbkpZWThWQndublczUmdvK1hlN3pjSTVGc1RVeWFxYU9OblczVHJFQ3ozdVB6bnVQempwendjQUlJSDhMb0h5WXFRK0NrYXNMUVp0aXkvRkc3YnB6VlhLKzMyM2ZPUnp3RmlqMEtheDVEYlNvSlN4cFFZS3RPdHZ6OFhaazUrSGJ2QUdIRUNOalFBcElEcWtaTzVOaGEwUG8zMXNVemRaWlZKUFVWc3YwdnFzOGNRU2NPUXRDb2pGb2NHNU9VbElRSVVZVlFmeDBIUW45QmsyS0trZmdRS0RXbFJvM2FaNlBjeTAwcHhydTV2dTcvekp6Snp4YWlrWWdHc3k1RXhCRE5LVWtVOVFsOEtkMTgvSTRkN2ZvRzk4emJmNGxUa2R3azRWMGpIekVwRkF3TldUWXZSdlQybzJuc1N5ek54NmxYVHgxMzVIUHBLbGNsZEovUFR3U3BtUzNFMjVDVkNoOE56YWJ5ZWE0czEvK2FHenFRa1NrdE9uWnVFTWRPcStJR3EvLzBVcURTQ2hqdFRzSzJhbHlxbzJVdUxGZi9oY2NRR2dMMktxSkJ5RTBqaE5JRURwM1k2emZvRzk4emJRNzVxeXNrTFU0am1FVXNRWVVOM3lib2IwZGJwNTVrMStPbkczZkZ6ai9oUnpOQm9IRVdOS1A0Z2xwUVZHazBhbDg1dHJ5czhyVmZ3YjJYZWpiUmViZEovRkwzVHV1UTNUQ0NkMVZVVml6di81T05aUkJWaHhiMkwwVmE2cDA3TUN6MmYvaGxHdVJHRXpTMDV0a2o0NTA2M2tXV1p6LzhQVG5RQTNXdjJxMTZkTTlGcjgxdktodlBMRmQvK0Q1bWVrZ1Zob1lVYnNTZ1NzOCtXSmhPdVJUYlUzVDZxYlYxTlgzMWs3SFBnNlQ1TWwzZ3R3d1VMOHVyUkh3Y2ZORkd5b1VRNmN0Ni9SMjVyS2p5dk9PcmpmNEZXZEorWE8rYWwzZ3l3Vm9oRGlBVHlKVWlzSXFXcGhTWUZxSkU4MG5lZzZtbHJ1ZXRVNmU2T2Zqb3VuUFJSemFkNFoyNmxESkliR1ZOWkE1dFBrZFYyc3p4WTcvOGdzT2VNdXpoQmwwUlVycXRiZE5MdXNzZC8rVElTZkZLVWtVbjFTbFM2WVRxdDhwQ3ptZi9vUlRTNDJ1cVM3R21YdW1uS3FpMHYvK0VCc2JRSENOazAxVEV2ZVJZT2ZzYW5kZVU5V0xIZTl2ZjV0RHZoek1tWlBENEw2MUdndERBcFcrZDF2VzRYSHBlcnJwemEvVzNlaHljM3kwMGlHU1puNUpqc1N6Q2RvOHUrTFBmL2tIbllmaExwZGtlT1k0ZHZ1eUJ6LzlBSGlsb0Rjc05wWXdRemg1czN4WjMvOGZrV0NuRTBQUkUxOHNaQWlNczA5WHVyWGFtaXV0OVpMdCtEcHgrK0M1TklLRHhoRFpweWpYOHhXelU1THJtcDJhSzFmanZyeHVnbVNocHFTYmlhT0dqT3FNcWRqVDZoazNOZkJ0TDVDYlFlQWtZU2lZd0VMQVdPSDlMNXg3SUFjd0dma3VtSnB2SUVnQTRVRmpqOU5IdENFM3g1M3FYUzV4YWxPK0xGZVVYUmdqdzZ2Q3YyK0ErUmFVQWdJdDRuNWRrdEZJcnc3L1N1OERKa1VWSXIzT25aMXpETGRIbS8rSDh6d0xwQXRZTEtDL2l1TmRKQlNKdEkwN01LMWFIUWxGV1RCVlh1UzVKK09mTy9vSjNFTDJjaVVOamgwejN6bnlsOUtDZEF1S28rVUVwNW5kL3pudUJPZ1hGem15aHA2YWQveml0M2hWQXRRc0EveDJTRkFQWWMrYVQ3MTZnUkptSVRiNDZxZFdmSitPZkxvNUx2QUJpVXFFb1ZzYXNuRlRDNVlmOHU5dkhlQlhRZTV1akVIRGsxN2VVVURGVnAxMS8vZ0U1SXh6UkFEYkFRQ0Q3SVNLdE5SOUFPT0FxOWVNSjNLaUpzRWhnYWpiV3QxSEp1UkJsajNsVnoza2VYWWlnZHdMTVB2WlBsc0hPYjJlb3NROEc1MWtLNkNZREVYK0x5MWN0SlF6anVUa2NjV21tdTR5NjRUYjU3cHE3N3NtK25vOHE2ZTlnL05DOGQ3NUVTNXBtNTJLcThhQmZZSmdhaGZxWkZMOGFFRkpFcDYxdkhTc3MxSERyUXhlZjUveVErQ1VYQTRxRXlhcGNqRFRwUFZWcmRUMTlIVmVUc2QvL0xsaEhNQnRpQ21kSjhrL0p3Tk45Q3F5RTF1RkZycDZjMVZVMVczL3FuZVVrTUhDK0ZsbEh0T1FPUmphaTJFSnlkckZpT1I3blR1K25XOE90Ly9VbWNRU0tidlNtdFBRYnpTSkZDR3gyYzRwejA3ejIrMmJuRzhWWC8rMGxKa2hLUllvSDhmZ3hSQVZDZTFOT3gyMm5WTlRXUnVleWp5Ly93VWkxQUpLREhEdVVrUTRwa2MyYWw2R0REK3kyTnVSWVgzVFVGVjlONUFyVzMzdmppWjNrN0pQM3VlQVVueUFXZ0RZbmpxSThQbENNREJGMlVQRVV0WTdkTlYyVjJxbG1ZWEh0bmxwdWI1bFhmUnYwQ1dTQzZYZjBZYktXZDhDY0xhVEFsRVBpUThyTUlQR2dKbWJzRVVvM2Myb2F0b3BHSkh2ZXRYdkxkMGVWTXF1ODBicnlLNk1OT25WNzl4NFN3aG4zODZYY2hPRkVFMDdPVnNONWE4anRGaDMvNDRheElneUo2WGFma2kwT0dvWEw0MXFKNWdrakE2M3Y5Vm5uMHUwS2NReE13bm9oYm9tbENpYW5hVlpxU2QzRlhLbk40ZFovK0k5aUF2Q1RLVDZsQkJOTEEzeGUvWE95OWt3blk1Tm5mZi9vcGhvZkExYmxUcjRJaVEyOVhzRjMxT25UcmpwVzMvOEpGS2FnM1NlZ1RWdTZpaEI3bjdPdHVsbzNWWjNSMXZmL3dVRU9uRndXTVRDYW5NVFpQSXRRVHNVbXJZRjFYZkxUa3JOOTF6M1I3cmJ0dnZJVHB4QjVxbHcrbjhGeUZRc1V3a2hyQWR0UkpCeklyTEtRdU5xMlg5Rys2bWIydTZiN3B6cWJ0dnI3MHNwVDdidnJUNldvNzRhYWt1S0JDZ1RpUnpDVjR3TkxQd3ZwMHdoeTF3MkVJVjNaRlpxYmI2YmI2L3gzMGxka2NQK0ZkSGhaWmRnbms4aUtFVXVMNTUwSElKaE52ZzlWdHUyUFRpcnJuaXgzbjNlbTF6ajg1bmdJT0R2UlFCRkFDM0M5WW4yS2NuRjRLU0JZYkRMMFRFMm9wRzBGTUJGbHJRNjhtNDNQRjdNMmQzMXFyOEs0OVBOckpxclpyZVVPS3o3SzdwMzBTaTloQXR4aTU2N3ZwcFZDcTdlcTltbGRRbSttbGV6ZXE2OGZvYWdRY25xOWRLaWVxQ0xkanVRdXB2SEt1bTQ4NmM4bUpXMEoxQ1lWOHVqdStJRVc4VFo2Q1dZVWYyYTJVRGs4NU5ONDduVG4wOU1seUdxNEJpNjN5WnRIM1VkVjQ4eTlFZ1RWWFZKblNpcGQwcG9SUlBxRTdOeW9idlR1L1FTZ2ZVdVRRakJYcDFSM3N1L2FnbWpsUGk3d1NZUVU4Zzc0NHB4ZVVPdkVQUythTktqY0h6YmRSc3I5NlZMQ2tzTlB3bDAxeDVVMTUrVUV1aytscFZSNjdmRmtnUTZIa25JYmpPVURHSXJoYUxKZEdCWjJ2M1Q4cDVmT3Q2NnByNVA3S0NkZFhqb1E1Y29OTFJKaUZwTWNtNllUVHRESDk2REpQOXJqLzY2Y1FlY0Jta09tR0U1UldQbHFhNTE2RmxGTzNxZzdxVm05UE84S3NncmR5ZVJTODdlcTA5cjB1Wkxva0tFOVIxdnRMaVFJU0RZTE9lV3dldzZFNGFhOTdNSjJsY080cnU5MUVKQTZLQjB1dzYxdUI3bnBwWVZKMjY4SzVPYVo2d1FkcERNTm1vd05wcVh1cHZXNm5wMVZYcGF6VTA2ZjJhbkRydm5YVFRxMTd0bWpwL2p1d1JFcENVSmtJcDVRdFZWWk9sc3Y2TUZUbk4zSG5ld25RVWczRC9SaDR2SUoyRG5hK0x6elBOVVNVVWxsek1LaE9jaXFYUVdmV3VZNVhXT1YzK3duYVJKMWVPVlY2V2o5RXlDQnlwM21aRlFJQWQ5RVpueTlSczVNRWM3RFlzVytEY0oyT3k2WGVmM2FnK3FSUnJkbXMrWFVsck5TN0hLOFBFaW9NYU5VTnByUlVncXBnZ1FUc3dnK1h6bGR0T1ZkT2V3UWRQOXRQMlVWZWhTbjlSUjEwN3Z0Qmt3cGppMlF5cXlrMXVtdVI5TnFJV3E2TGxlMzVwQ0NISlRaYzYrYm5jMm05Y3IyY0xGZVFxZkEvS0RJUytFN05IVGdqM1BGTU1SRE1ISVVPa1JBd2pheVh3WGVocVljcjNxc3I5K3VRMmczWmZHdWwwYThGclFNTUpXOWRVdlZiRDlHRWpJVE9VRHhoa2h1aFVvdFRLRVVIem0wcXFheno2YTZoTHF1WDByM0hlbElLYlVVN1BWREhLcXJGVHZNeUppQlJUQkNJaHJCQVFudzFGcUo4Njd0eUw1dHZZMThzVktXazFQaExsVHBjNXZQb2haSElwcVBOOUtpMUZBL0NUNXVSRUc5TDRKa3lOK3krY09zVlZYNm5kanBTN0RudWJyejc4cUorWHUzUElXU2luVWNtZzRxRkI5RnZYUnJDcFI4ZFhjTEs3dlAwbFFPbXFoQ0duVU0rZHBOczdOVFIzWHlRa3dlaUpGU2pXRjFGUWVveEZOWENibThWYk5SeWI5SzdZSW83RitPbXZsTEpCMXQzd0RLc3pzbjZnWDYyQ0V3OTZmWVRWVXpjSHQ5U3ZTQmQ4N3V6REtmTlpSVzJjVmE3OHB4K1h1blc4OHFHRDBvVnhCS0dreUJoRVhTbmMvWHpxTFl3VlVkZGF0M3MxS2FueStwMkZSMDhvNm82MzBXNVVObE5zMDl0eDV2b2lFbWxEcm1HQ0pKbmV5eHUxRzZZZWQ2cWMzbnVIQ1lQam0zT2xmZmwrSUk2cnIwd3ZrUGxDQnlGTSt5Y21JbFM2WDlXeXhydFZiWVk3Zmdtby9DMEc3TlE2cHA2dXA1MGRtdlB5NkxHMUhLYzNoM1hqb1JWRkZCRW9RckorZVp2bHpLTkhDYWdpMmFWWXIzek1YbUUyMG5xbzBxMTA0cTMzbVpDZEV0M1pkQlZVN1dOMGQ0cjMrTmk0aGdRamlZaU80djV6OWZOTU9uc1JLOGIzNVRTK0o5OFg0ZTk2VjZYRXM3dVR2aVRLRkd3ajBkdGNpZ25wbk1kVDZuWlVUZTVOVFNxM2NxdzhkK3A2bEE5QnplbGZmU29FMnBwU29XNjhZUnlES2VEdm9TMU0wbmh0VFdJaTFRK1hjOXZJdzdLYjM2aGFCSzgvc09PNjMwenpQSmhsT2RPSzljcXo3VGtSQVowOUhhSjZCejVwRWFJcmplVDBlaTdyYnZwNTFSZDhKUVVRWU91cU9uNzlUc3VmS2VkZEhJOVhseUpoUUk0aGRtb29PVGRlenFOVnI3MmVuVHZ2Y2wwY0VNSVR0YWQzOG41UUpwclhTNDd6eU5XVW1McGhMOVlNMEdvSVNtaTdhbm0zelUwZGJMdlRhNnF2ZFZiR3ozVzY5OVR1d1BuMVZSM3hKQ09RMm5RNm55Y2ZDbzZ0R3RsSENYUjZheFhhcnZqU0NENXc3Zk5mT1NtSU91ZDQwRERpVmhMeGdIakEwaFd4eXkxTmRIV1M2WDYzeDQ3M0lhZHVwa1d4MVc3NWdubXFvenFwcUx2QmVFNllVaG0ra0dzV29UUGxCTnNEQk96V3E5ZHNiOTdFQ1prMU81V25kL2d2UFFWS2FOYTg3N3hNSTJFQ0IrcUNHaXFVYzJ4TU5ReHFZVHl2VHUvY2ZUVFVVeUJ1dnlVQ3ArUmRuaHFKWUpxY2ZjbWsvS2JYUy9YUXl0bDk5V3EzSzcrZHlTWnVlNlhTZmM3d0NHMFpOSm9BTG9MVFJMWk5PMEZYQVUwKzN6bGRyWWVBR2ZUemZOM2JkSFZ4M3h1MmtDYzIzWFJxZVdWYWRXejQrdkprSGw4b01iZGJTcDUxeS9pbk1oeVloQkcweVJDOUEvZGluUlRibVgxT25WenhYNzNzb2FpbVExa0N1N3hTSTJNUzVXN0x6MTA3NDZDVXMxSEI1YWFsQkVuUUk2bDl3WTVhTDVvNzd1MzBLalJlZGtIb3BkT25UdDlPWElOMk93SzJlTXBGR1VTWWtDbW1wUkpONU12dFFoSnBVYWJxZGwxTFhkNTZnejVSaUtOVFRnajNQV0lWMmlZMXpleTd4QnRUTUhBOEdCbStFRWJCY1IyRUVFRUczMUtSZmF1MWR6MDNaMzNlSzFMT0NwWjA3c3IzWGlZbExKSUxqK0hYRmZ0L2lkUmNNRmNzbU5LUlE1UStCZHI4eCtzemNhajNLcWxtYmxaWHg1MGJxT2JMczlVN3dvNGVXbW9QT01KQ05HU2FPVkpHSU1zUVF2bmIyRGwrbnA2T1RmZExMdTYxZHpYbWdaQituN2xlampqRDNPOFNjRmo0RUtpR2s1TkJNd2Y2MGhkTEV2aE81VW5CSGk5MnR1YnpXNy8zZUg3TDBweUU3SXpucDJOVEtYOCtNSFAyNnRZa0k1cFZ6ZHplbGJmL1BVaW14Z0Fwc3dQdWVnVEZxSmxabVUwdzZZVHl4bDAzRFh0M1ZsbmY5VnZoczhtd3ZHcC9XOUM4MEVMS0VzUVJJb3czVnlSUFZ5dTdqc05iczZkL3U4RXRNb1VZRFlXbnBTRW0xQXdWQjdocVp0KzdDYk1wcm81cmRUZU9Pcm5qdS8vUEl3NDZhQ21KMHdES1FuMktLbzJvcVRhbWdxb2pOUytPMU56M1JwdlZmVHYvNWNhSTBRdHhVeW1mQk5VQ01OcHBzSnlhamNyTFhPNlZ0Ly9BeGdQZDRsQmJGNWsrMDFwMlEwTGd5YUk0dW1rZG5CeDJQenVucnBWWFRjMzA5SHZFZTZOVG5tMnk1TTZ2QmxZV1BBc3llUWhnNmFKcENTSTdXTjBTK21xT0NTZXBscXFaWnpvczkzSHZmbXpUdlFTNUx1SHovZ0FJTFBJd1RFcVF4QVRtZUp3N0VaZWVUeFJ3VVN1UjI5alRkeHRxLzdjM1hUbmtRL0xuNzZsZytoQ1RrWS9oQ1FOcmttZXFjbmFSYnh6T3pqNDZkUURHM056L2g2OGowRXNHYUdVYWVGSmhhaTBVVml2SVZLNnAwNjNmVVZ1Ly9FZWFVUVJFQ2lnbW9NVW9KWnZMQ2JZUG1teHI2TlRSNXRPLzFTWHdJVVRJcEdKSS9IeHFSUEQ1SGFuZGRteTAxUFBxY2oycXEvL0tURnlKaTVUamhsSnNPT2Z1VlhOd29qbU1WRTI0NmNyNy84TjFPOUVJQ01MbmFnVHNLQ1NOR3R2aTdYUHN3anM1cDNXKzczZUFrY0RJb1JCQUNSUWhnTFV3R1VnTkZBVVVCQXdCbUx5N3RST2hBd3NSc0Nzd0QvVEpUTDRLcnBUd2Q1alBLK2xKYXU3ODJiSWtEdmxpdlRYbTdaRVRIZldWNlo4Qi9oSGxHRnpGMVVvSmM1d3FTbmpianJ1Ly9BeTBpUzhwRDFKOVd3MFY4MzZieVhlM25oWU1uQ29VenB5bFFWOTgrcmQvLy90NUYzbjhsM29HMHZnNmZZZkR6RFFQMGZjMm1McHdyTy96clBBV0VsZEk4aHR5N1k1S2d3MHJiZjFGTE95bDkwcFk0N3dHZ2RMd1RrQUFvbVZaUWY0bk5QWEZReS9ZdVAvbmd3NmhNSG1Od002Ykp0bkU1UUJ5Z2RoVENkVkp1VWc3SU9LYndqaDNyVytmYlB1UEtLOWU0c3VLOWVLeVVDZ1NwVHFGVXdnUld1eTlWczFDMnVkT25sejNrRnZmVHVuSDU1SUZVNFBJV1lsU0VtUHpxV3pnd2U1NkNwMUZUcVpwVnF2bzErbjQxbnZTemtLOUNhSnRnUmsycFc4bGZTdGJYZi9qbHVTZ0dDVCtUV3lSWDQzcDFkbG5mL3kzdFRKbHAwbVZIVnphQldYS1JaNy84RW9ta29RbElyWWJzcHRRa2ZtSnFYS25QZ3Z4WTd5QzN2cDIzNzRxaFdMR3pYRnpEM3cxM2RDRXVmSFg3ZXpzZHhWU3F2UHhyNTArbGk3d29hRFVRVE14bDJKcFFhWUQxQ2NnM3RUM0c1V3lPdStEYWJQdHREWG0rVlNncElVdFprVEcrYjA2c3c3LzhWQ2VzZ2J1ZFc1bWtYdWpXSFR6SEl1Ly9JYk8xWXkxbFZPUWt3WWIxVy9WUC81UVkyaUowVUc3TDRYa2FieHZqZVhGZmYvd0cycUVSYUFUNEgwTUR6NzdSSWltYjB4RkZOUG01Z3JoU3FvODMzdmJQMW5pa2RHR25lZVRCL0VkeHNMNlFpTEZ5NjBKMUhKUW10cm50M096VjBxN25WaDcxKzZvdW5QbE5PUlArRkxSSDBvaFFta1N6Q0dDTmdkbDVabEE5UkNlMjRUMDg3bTNUZHR1bkZkcXIvVXNhMzdQeFR2ZDR5dzJoSUdOYWZ3L3FjMmFVWk9LOXBmdi85Sms2SkJFZ2Nmbk1nY1ZtbmxhdFpZci84ek04b25qdk9ScWFOeWxMajNraml4di81Y255Z3JoYlV3eExXZGJkSGJWeGQvK0lzWnlnQmlSVko1eHVrZVU3WnlYVFVUbTVvcmI3MjB6dkZLMmlUZUJ6eWpBY1FzNUlSUW5vOGJySU4yWDFOelRmVFNybFhPYjZOL3JkWjZKTEdGZWpZMlMrazJhM0NIWTI0N3F2LzBURW45TFpkRkxMRFE4dXc5Vy8vazBvK3NtbXBkT3lpbUI0NmEvL0o3Qjlna0RxaG1wM1U2MHZsMnF0bmpHRmU3MHNjUDU1R05VeWdWbGxxZUl3MGlORkU5S0RYVmlpRXJaVGNIS25SaDlIL2Mzdmd2bWt5ZzJqV2RRT2xMT28wU0tkeHVEcE4yOCtEZStRb3VmNENSWWJrcGhrQUdaRnJLQ2RrM0JJUUQyZzROaEwxWktBZW1JZVFFMFZoRW9jZWQ0cDFWbm0rVVc5czdkcFgzd0RUUzJJSlRGdkdwZEo4bmxJcjkzNS9nRnp2YzhvaDhuV01ORmlIbi9TdDE0Ri9INWNjbWt1UHpqajVycml0M3VsMHUvVDhwYTJVdmdKTGhJQ2ZVVGlDVGhtU25VTEsrMTdrc3U5TG1VbDhDYmtUbkNvR283NWNzVi91ZEYzZ01HTGNnRDJoTkhUU3BTWWxmcitjL3dDY0RMQ09BT3NBL0FWSjlGTlFId0E1d0VYUHBQTmJQUWtUNEpEQ0lHN1Y1TjhMcVBIYk4rWW9KeSswNjZ5dlhlUWtycFF3bzYyaXM2ZExPK0RoaG9Va0ZvUGRHaEdSREE4d0VzYlFSTlBoUFE1bzNOekZabUZLcmwwZDYrYnVQUWJ0dnZOTWlnZDR2MUxodzJMdkpCRElkRWthM1RzTjAwRnB6TTdMMjRUYVJ2cy8vRXBONklLY3NUVWRMUmxNQzZIYTIvWW1GeHF6dk0vL0dDa0RnbUF0T3k2UG9JQ3ZHaEZsT2hPVEIrOGNScWViZFBSdWMvL04weUljRUkrdUppQnlaQTVFWUlaUTFzNU9vclhNbTNLM2RkSHZUWC80cXhUSXBIUTN1a2NOckNscUtYN3MxTDRuRVhTOVYwN0Z4NVoxMy81c29JU1VsajQ3S1lRb2FINXJzZk96dlRWbEs0OS8rRVdzdlJBQUhCN2s1QWhzenhBSDhZclM5cHQ4NzNTMU40OXZNenF2VzdPczlGSElPOG5OM3ZnOVp3c09BUDBVak1wSk9nTzFQTCtmcTIyNHZHWXc2MmJpb1diNjIrbDNkSHVWM0cvUzFoOXplZnN1bUVkOEVXeWpVQ3FFVEZVanRROGlsd1RFYXlPalJaYzNzbXh3VktVeTFiZlJjeXNZcUxzNnVQS3Uvb3VRVjVoSE5ZU25UeXhucUV4Q0lRYkF4SVlQMC9FWjFDaE9pMlh6QzM4cFdwOEczSFVQLzRKeUpndCtrL1JuREVROGxWUWdoVDVjNnB0SXZXbmZUY3VkLytoVEl0S1lXNTVDbUVKME45cUVOalQzYk5XWWJMci8vTFU1YW1DU0hFdmN4VlBZRGhtbmErYzJHT1NSZGswZU9WZC91OUdvUVVEeGpiS0FtcG5ZbXN5alcxQ2FsMTFqcHR2SnYvOHljUVdBWGtQWjZKTktkN3lpMGlZVHBxbXRqZXowd0syNmUxLytDZmtrbEFlaE1FMmo3NU5WaGxaTGwrZENiM2E2TzVDZWwwOU9YNGp0aytnOG5INXhQK2lQb1pUUFZoU3FCSW00NHM5QWlFNlMxRktQck41WDduZFZUY3VVTDI1NzRtL1R6VjlQVDNSdjNaaVZ0M3lHUkovd1hscGdNNUNPVDFpTktKRU1DbWUyWHNXaTVoN1c3UE5NOWJmZDF4dmwrYnVYeHY4eUx2UVpOVGtYZVhvU0VLa2lMb0liaWRFd2lubHRZUmFpM3JucHVWNDgzVzNNSDhyNi9WSmZiMXZQQVFkWlpKZ0lTQklReXBoZ0VnTDVjUlFpZ0Zlc3JjTUNpTFhNTkJSd1JCZlh5ODNGZTdzd3ZyNmU2V3BhYWJ1Ymp3cVVGT1hMMkQ2YloyREp1L2FtbzFHN01OcVhjcjNaN1oycHFOVFQyOG5vdVFxSEpqWTFXbDlSdGN3NmRqU3BubEwyNm5KaEYwclJkTzFOWk83TmJzMTAwRnlaVGxxV3F0N0NlWUltTlRJTGhUOHlFNnJlMzI4ZGQ2Y21KcWRVa0dtOCtqNzhuSlRRbDNqMWNDYnpCbXdMMEZ1bUVYVkRkVVpyOVZWejdidSsrVDZYY25VMFg2R095YStjby9FZ29Jd2Q0OERHSThYbEdvWDl5OHUzTmJlMzFLNnJxaTdxbkZmWDlJa0NEWlFWdXZMR2ZyQ1pOVTdzdjN4WUJsSmhlQmJHWUlkellQcm9VaHA4ZFZaNS9jU2tIWlA1T1k2YytUN3AxMDc0ZlpDd2NFeGFveEZzSmhjdXhEcUJ0OGRqWjF4NWgwNzJNbkhGcWFYSzNlK0ovSUgvRlFMN3NORkV1UHk3YTJsRTBpYnJkbXl2ZnV4MHdpNEk3cjIzVjRxQ09PaEJIQk9hTUdxSmg3R3hUclBqVUdMMXQxT2QwYnZ6NkxwU3p1c1RrNnFvTVhuNk9EOVB5NFhrVG5uVVBIWVlFVTF4OTRhRThtUUptNE5RdDA2cnlNUENyUGNUSGJVbzVnZHc4Z3dUSU1uWjd3OXphU0pLZWxBanFSRjI3VnlzOUZmVlR6cXBkSHByM1BUSDBzVTc1cTFkTjU2YUU0N2RRUWl3cjN6NmRFeHN1WFd0RVEySzJkMWd0bXBjcjMza0dwVE9sRWlxYU8zZW1odTFVd2h2a3dnb2VRazY0dVRhakoxNjkyeldUV2RIQXhqdmZTWjBxRVdQbDgxczlhckoydFZiKzVUajZLQi9aMmRiMDZkbnFDSXlRUWQ4MDNENkJSY1h3UklxaS9vWXJycHp5Wk1LN0V5VnVtOTkyT3g4MHF6emNTVDlKekE0b292VHl0VTlhQnVFRmRiNW1MMHBrK2FmeHVudDE2Rks0L1VjUGM5b2lUdGxxWStRa1RGWXhMK2c1ODFsMzBYSGxlSGpLYlNKT09xZTJzZkdyUGE4aFRVOUhObW00TjRlNzVRTVJpZ29NS05rRXByUlhGYlpoeit2WjF2WTBlT2ozcG5scjMzYkVjeWpyTW1CNW5va3BOVDVEa0xkS3RWVTQ4cjlJcU5ZbWFncEcrYjJvMU9LT2hPbmNIZDdwUVVsalRpdEQwcDl6bzRxM3lhSkZNalRkSkNaZ1FrRU4yR3ZmTjFSM1h5Z2wxUmZ1UG5QbExWUjFQRngzdm1pTTFSUFRhd1I2ZE94cmVVYk8xQ01GVzNPZFhwcFNvS2pyNk84eWR6MENYWlN5Nmt4N1hpOWozcUQ2WkdvTHVURU4wVTE2Z2w4bDA0cTI1dHZxOCtua2c1U1pCTGp0emRUWDZnbloxRGs2K2NWdWIwclo0dms1QzBmNGNiR0FoSWlhK29Mc2RTaFZwMXRIZWVnaFJtL1lPZTZvTjFuc1BsQ21sQldSZjQ0TktCU28wMHNDODlNbFJ2NVpxVVd6czdUcW5iaFZhcXo2VFEzWFRxcDg3WEZoMzY2blZwODdxYThVNzhaVVBZUW1pQnhjaDE4YTVCRmlFWHQxTytJN2RUeStENFJmV25tTnU5T2ZJS0NkcE0zbXU4d3FFRSs1Q2xtR05UUXZibEZLTFhMekNMOWp3WXp2aERVUGJNSmRHR3hvN3NNWG5vS3JVT0g2VlBLKytuRWM3RkQ1SU1MbmtNVkNPVXlLcVlwMXhkeVBWZTN5dlBIR3BTd3RCV3hnK1BXZVBWVWViNlBaU29HRXlXbzAzZW5tZU9Rd0lHRFdWSmNUNnBEQjkxQmFhM0hUcDEwM0hUelBIQW1Ua0hjbDA4dHlxdlFuNVBpOWo4Y2VaNHNTQ3p3a0U5cGlJYVB5cTJOVytYUGhUaXhmN3NjbWt1eG83ZE5CaTg4K2hqa1Q4MUhQQmRpa2JGb3FZTFBSN2UxRHFuTzJYUHhGT3Fud1Y3OG9FR1JQMDhJL3ozYmlwTDVEWk5TRkNrNmNoYWlRU2dwaWpaK3l6Tk9jZFlxeDEvc2pnaHluYWU3TlR2eWxmczA1dlRxcHoxeDFJVUFrTUVWbHNzS05XZXdpWmxFNnFZMTNScHVsZCtuVFZLR0d2UVIyTkZmZnFrdVM2aVpzWGVNY3ZUeSt5QzZEM2NqMVJpMndta1VPeUx1cWRwdTlubGQrZmZXN3RPcWFycWpybTNPelN3N1BsTHJwcExPemsxNGFZWldpbXNZR0twK3ZJUmZDVXpHN0x1UlBuWmRSNWthOCs3S1IwZzNaM0gyM2pqcDIvc2NZbkhPbDBkTER2SXFPMFpDa3pZUUl0bmJqcWlDS1h3NlhSZEdCMXNjOC9xQ2NuZHBVOXZaZDhuOWwwMVhpWElxNkNYbWhEUHFFVDA4dWRDbmxzOUtPQ3ZhblczT1ZPK2tDTFhUcjVnV2EvWmdnMlVFUEJkVUVFd0xZZ0lVcVVjNGhtdG5ZWHp6VkVkVkcramgzZnpXcFh5Z1A4VjhuaXZ2bjltazBwcHVPbmpwZVY2OFM5U2lmVHRKMUc2Rk1nbkg5a3ZqY2FqQ2V0dnB2b3VPNzczMXRON3M5R2oyanltOGx4WHIwMjFxWE1Qdmw1M1NyZkV6TzZ3UkRTcHFMNzYyS2hDWDJ4c2JtMjlPblR4Njc1M0p4OEp4WENqdmZxWFM1TWdPM1o0QkRET2lPQW1rQjlaOFJ6QnE1aDRLdEFweU5sMDVrOVhCNEFaK2RPamMzTHp1NDluZ3Z4Qm5XRGFkbW04V2JncXB0a3N1OEFuMkVvSG1FMXNKM0thalQxVUk2dVYzRmpOOEszelJlcFhnb01GQkNJU2hIelZxR1p0bmVoVTVTejhjM2RXNVZ5cnZmUXZKMFVISUdLbksyYW1xalIzcDFubWFaaDVuV3BVT1M3YW5KeHZQS0JSVEtOTnFnaVNPYUw0c1ExRjBXT25kbXBxbnJIZStnUlNnbDhZZEw0SFRpenZ3Nkd6QjI3Y3dyMGdxK2FHVTJSa3hHZ0x5MUdzekJpM2wvS3JicWVVS3FubzE1b1cwaGhPdWhNTjA2aDRaSnBDQ0pOV1M2bkhUcThFdDJLa1NJZ1E0cVVacGJEelZkSWlsZGpaYzdsNU1WMlQxbXlCdndyKzFwU05YSGRsZTY4Tld0b1poZzJkYjJlSy9iNFhFSGhvTXNTTDJSalQydHlVMFJTNU8vdWw2S2VqejU1SFViMmUzZVBPbTFYZlIrS1dPZW55WFZFLzRBRGhTSENCdXhCWk9mSEdVWkZLREJyRGtmVW9lb2t2NmVNT1ZWcnA3WFRhcmxmZWFaRi9yeHhQNUdOTUxRNlI4WW90dERSdVV6RkhWUVR3aTZkT0xWNmQyVnQvMVR2QjVqUEJ3QkxvTVNSVVZTK3hmTDFCdjFhK01KMjJlYmRPTjI2SzlCSGZUL2tSaGhrUnNuRXh6REZQV01qbnF1dDJiZTlZVFNudWx5cTU2ZXFiLzFTWHdsU2hSSUc1RTFVbWNFNzZINHFxSmV4VHB2Ym95TUpxYmprY0szSGwvL2crSnFhbnlnbWdpaEZEb2ZaVFF5L1k4M3E1SDU5UzlWMk4xTm50dDMvNTRhN1FlVUVDYWtCbXdadU5CYmpTaWxoQWc2ZTJiSTZtZXJZM0czUjF0MGJqZS8vNk9hZDR0RGZYeWlRb3BFd1NsRlBUUGRPeHVDOXk5ODZxY2U4M3YvNEdVTUR1S1VJUldTRVREVFRCY2FpVWIzS044WUlHdWxydXVQUlduR3I2RjNQUnM3NzdrL0w4OGNwM0RTWE9WMVhoUlZoZkNSR3pTY2pNbWlOR29MUzYwRkZCaTVnYXM5TzlLTzFYTHN5MVBjdXF1TnE3OUtsOThhZEUvNEVQSjJFUVROWkNpWWhzc2owVVhwNGROTmREVm5wRm9kT3pVM3l2dTZibS9UNUZONURiUmVPNW1hSUM0dVFvWGE2VnJEYkxZVFd1bkdJU3B1TzZycU42VjcvL0N0c3NRQzNHc0x3dFFJZEZnSUl4ajZiZk9PaGR6QTc3L3h2UEwra1VnUDBnZVFjUldmWUd0VFR0ZStwNU02U1Z4WmNlZE5IVi82clBCZjJUTktYQ1FJT1ZVRURnNFI2dVU4dlZkSnYwZDJOVGtlcmZkN3ZLQnBNQTB4eGZvankzSnM1NnNqbXZwejVJNjlUUjF5cWxkLy9odE5JS0g0a3hRSVVUMUExbUUxdGJNT2hGYTI2cWRPbis3M041NENSQVMxQVBnQkpRR205U09lWUdzQ0NRQTJRdEVUR0lKelVTTklDUEFFSGh1TitPcW51SUF4dmp5L05teUhwMzFsanZOMjF0TytzcjEzZ1AvR1NVSWh3WFUrNTUrdG9WSlRLN1BmOHU4QXZsR2xjY0QzR3NxTERVdUsyK2xkR3ZTdW5IZVByNWVQWTd1Y3JOKy9GYnZRTjEvLy8vNE9sRE5EekdtWFJxYVRMdDRlTzlVZmwzbjQ1NEZLRGc1S0R4Q2FWSDRxRERISHUzNkNPNzUvUEFHRWhMd2hNQ0tObll1b1B3YnRLeHlZL25uL0NlaDVTYUF4Z0hoTlpyWXRBZzhFWG0rYnJkUmFBbm9LcTBXRkgwMmZjZVVWNjgrMjV4NVJYcnlld2lvU1k5VXdmaWdjTXh2c0plK1lNUldVVHpkSHJ2cHZYZW1iUWI0eWowZlJBbGthMTdJVU5wa3FKSHFFOEg0K1h4VVU2YTJYUnR1NDVMdjF0QnZ2SmtVNzNIV2ZBMGM3RjNOMUx5NmNieFhaaTFwWWgvK2JHY2RST2k2Y1JERkNqMTY5Ly9vMDhTWUwrNDNzaVQ1ZzlndnhaNy84V2V3NEZ6S2wxczFzQ1ExanBvN0l4Z3lXTCttOWQ0NE9uSDc1eS9qTUN6Q2lnTGtCcmNONkQzTVYwdnQrdWoxbGJkenVPM2VsK2E4TzVsUUtVSnlNNlUwNU13dzh1SHRGQ0UzdHduSlV6YmI5TysrRGUrV3RvcTgzcWRaS0NXYzJVcVVsTHd6RHhkZi84Y3NTa3d6RkxtVG0wd1l0Vk9uaEhNT0xGZi9vTTJoSG1VbjZieGQzTjRxYytUai84blN3bkY4M25aMTBVYjJJMGRQYVpMTy8vaEROSmk0UXNQeUNhMDBvbEJ1dGtFU2lOSTRPWlhXYXZuemNlbDF6azNHNDl5dS9lbGpUdk5JdVkzK01EQkl3WURFWm1rRTdCdXpMTHBSSXJsNzl1MjY2RWJWY2VjcXY1M1BtajUrTHZDb2tUazRneGxXNi9yUnVaVU43TmRjdVNNeHVhbHgxWjczd3lOZUkrc2tjSzhNcE8rMFlsRVZUczRnUkc3RXV6RHBmdi95WnFDUmhXckQ2Yk5URzFwbTlicWRLWEZtLy93OFRPZE54VzV0VFdTYkZFOHlKdWsvL01EU2RCNFg1S1ZoMG4xRnYyYzJOUm8zdFZYLzRRRUthM2hPRGswRkppWFVTT283dWJMNXFKVHZaMmNPblRYb0c5L20wVytCMlJUV0trTFdZc1NhUGd3WHB1NWpVYnRmZmJjOVBUVnE3YnFQSysrRHBjZ3o3eWRUMTVDaHA4dklpV2RsTFdvcFRUa3VWOXpKWnYzZjZKUEVGckdLYVRSM1RZZG5ZZVFmeFpyLytrNkJLVzRmbE03TWxIdE9pNVc2NTMvOU9USEpnRW9HMGNQeHg1ZTNTcHpwWGhmL25ob0oyaTBWc09Oa0tkRFRFdFlvTFpZZHRPMTl6VThlZEYxL1VYZTZMdGpuaExXS2tKY1hKcVAxVk1JakNFMDN1MUh0N2ZnM3UraWJRMTRDUlFhMGg1Z0FUZ0RPaFpKRjZZT0lZSU1BZmVIREtpVUNxQ1FJM0Ntai90bFlXbGNlTStGWmJkZUhlK1VYTjNoM3BYendOZUlrb1FMT0I3YWx5bzJLUlg3dlN0MS9nWk85eDlTTEEva1haTERSWHlIdWwwNStaTHFuUEF3QitQQjRqV2NWbXppdkQ1ZEx2UzVPT25QQVNYQ1FQK2YyUnhFbTI1dmIvRzgvY2ptUzd3SndmTUJVRFZGMHVQenk3aXZYNTg1RjNnVjJRNVRCYlE1SFM1dkZKaVYrdi84QW01bEdaQU5QQU1qSkdXalpLQXRnRG5Rbmh5WEViVzJUZElITUR1aWdHbFN6Y2FtK3RJMElla25vOVBYSnZaMTNpU1F1d1lPWW5XM00zVGVWT3gyK1ZVM0RHN2p1eTZhcU5UcmV2blVNRTFRZWlwQk9WQjNkdXEzYmNyVlZIbXoybnIvQnNFU1ZNc1BBNHdJcjBaclpndXRDcGZIdXZsTzlNTjY0M0hwdXVtK3VOenY4cWQ1RVZiNHhFSGtRa1EzN2xBN2FnY0hMV1IzWTFObUYxTkhuZi9raEt4b1BLTE0xU29xYytWRGk1MDFUZXlzdlZ4MHMzLytHVTlPZ0NhRDFDWVZVRFVRRWFhcDJ6VXV6Wm80amNiT25RLzFUdktRNEtIb3dzdW41cUtDQnZOSjN5L0oyVm5tTDVlcnRVOXUvL3ltV21iQVdIcmxBOUJEQ3BiM3ZxTlN4RlM3RytMRnh2LzlSSnBRU3NlOHhGVTdvOGpzelQzb3BmR3BPTGZOUmMzc2JWWi81NEdMcHVFZUJHQXNZUWVsalF1QnZ1RTQrZGxQYlJpY2R6NTNXN2JXYjVWYzM5dHAvYWJSNGR3ZVdOOFZ3ZTVjd0Q2QjhDbklUTHVZZXpKZU10bU05cjd1TkxjdWIzWFJaWHZtZTZlNlBkTHJidjBwLzhtcFRZbDhCVHBjd0tRRGtDRkR3aWNzb1JGSTVFMlJWelIrMXpFRjdNamxxWDVkTnJUZXRYRmU0M0hqM3ViUzA3eGhkRjhOOFZKOWdoRE04aVJySFdKWXdmT3dqVXd6amhiWDQ0TWQzLzQ0ejBnOVJ4cjM1VlVvSDlRN2MzSnh1eUJzck8vL0RLcllCWGhCVTJQUHZwZ1Q3V3VuVUdaU2FhU0w0ZHVkTHBvTWJmLzRaTUdUNFNFb1ZWb1oxUEluT3lwMXVFVWtjamplZjd2TU1ZNDREY2lpVFVncFFrdUNLY2JxRXN0NmQwZFlxNy84Uzg1UkpEN1JKa0dvSVBENTZVVDluVzY2K2k4clB4dS85M2dYeVUyQXpnZVVrcFZwcWVZSXhxb1l0akp5TjFPejJTK1BScTV0VmJmZVFneUoxQjRlV3pURVhlYU1zQWt0eVI1bVFsQ3h0WnMxSmdtU1M5NkxxdXRtQ1B1VlUzczlQVGNlN3J2MzA1eVgzUlRONTRrRGNNa2l6QkFaNmxJUlNVZFBHcTdCclQzbDczM056ek0zY2FucmZjZTYrbnVxZVZkK0g1Uzc4NDQva2M4bGg2RG15T0JnUmxFd1R5YUl1ZVJXazg4NUd0a3cyYWFycTdwNit0dTU2Yjdwczh1Y1AvV1lsaTd3RUd4SWtRdEFBNkFxR1VCRjZoMWVDaXdWNVJ1S3lWcnRZNHV3bzRPczlhM2RleDVsZUp2M1hOeHV5a3Z5cnVteWxpZkF6RjV4aWNlNXBxYXRYZXpaaFBkTGpycW02UExPbmVpUVBvM05jY2k2ZXhjd25lanNyUXFlVXpkM0hKZlBYazluUzZwMmE1YWRuSXZtaUFHR0VPcVUwRWRNTVYxSVlNVld3cW9hM1YrT0ZiSitxZHNjSUhQUU41bTU0ZTR4SHorR2lLaWZ6RXYyYWxFaWZUM25kNzJsZnA3M1ZMc2xCblRwWGQrNmYxMHBhdWFPczhWUmhkUXlUVGpSSEJEc1hvc20zeldxM25tZlUwbHhCV3cxMnVWVit1MTA3R3FPOThQNHVTb1VPMDZzay9KYkNZYktDTnVtcDZOZEQzenJvbnp1QlkzOXgzZzhwQ2w0TFpNSFhtb3JSUGhWUFluWVRWUWJyd3EwNGZRdHVqVHByM043NHFpL0pvelljd2lSUWxGejcyZG5KUkszYkNkK3FWYk96VVhIcnYxS3J4M3FTS2ZJbFNURFV6ZTB5ZjJHM3JtSTFOSFZYNkJES0RLaERaNkh3aFNkMjA5OExlZGE2TytMRTMwWGtDYmt4TVlOS3FZVEJCZGM5RTg3N2ViZEx2eE01TEZMRE1nZDFPL3IwK1pGOU9xanJjOFdROUdhQW9SUWt4R2xmVGFhMkdvc0huS3IvR0V0SnAyajJwMHI3OG9jZzZoZXB2Y1ZiN3pnWVRmVUtMaTFRczk4M09taUtFd1JSMVU3SVdxZDlKa1BhMi9YcTgxVlJXZDZaQkMzeWwyRmE1VlN1SG91UklrQ0J4Q3ErUWN4TDRRZkY4SjJYeGNkN3NYZkNqNkRyWWRzNU9YTmxmTitvNmdoUjV2azh6Y09CbU1WV29sejloa1h3Mk1JYmRLM0t1OWpZVGx5aGhGMitnUG9KZENZTjRxcjBSRDF5Y3BNTXpCaUc3TEdUVlRVS3FueGMvMHFCenU1TENtOXFkK3R5WDFMczh0UHBtVU1FVDR1bzFtRW8yRTZGdDgwcWZ6dkRKSm16c0VGVk5WQnVzOVBWSlhPMVZsTjU0NEZ3NnNFRjZZdVRGMEVPSXBRekNEcHlVVzAzQ1hxc1BMOU1pNUx0WlRyeWpyUEVlbFIwanA2ZmNxRTlISmVxMmQ5Z1p4MFQ3RW5FMGhKZGc2WVRxUGVleFV1TzlqWld2NUVjWjdHazJ2bzd2NE1XZ1N5NUUrZGc1dDA4M1h0Q1VJckRHNnlUbEtKNnJYcCtoU09FMHF5dVYwZWQ4a0s4U3ptTWM4STl6OU5JUVB4VFB1QjQ4c085R0paOVRCZ2h0R3NDN2tVWUlJTVRrWHFxZytkOTZPbTlRZDJ2T3MvVkc0M1NPMzY1VnRlcEk2TVl4Z28xV0x5RXdtUTlkZDJJcW1DS2xXOTAwM3Z3UWtKNkZ5Wno1eks4bUp6U0RwUDEwdnpHOUxMdklyQ0RTMDFNNVdpaG5uVkV1UlR0ZEJYMWU1S2lkVXdRSUc5alUxUjFTcUhndGVkdXk5aloyWE4xaFlyUDRpc2tKL1NXM1ZJb01QVVZXc1FqbXF1alJZdjNYcUloZEtLTzZ4SFNCZEhmbkQ2YUZTbWk2YS9pOU9PRUVKQ0o4a0xjNW1IVWdUWk5aRjdkemF1dE9yOFJ5Rk05dE81dUN2UGhzd21wY3FkNHZEQWk1QU9PdXJaTlY2Z2pRUTJOYkNwcUxqdmZxb2JXNXI2aEMyNm5mVFM3TWpVTWZPelJXZDVtTDNMZ3RsRTRjTlFJTlhXWWhMMHl2ZW9NZG5vSmhKQmxnemRMNFhPelI1bGZxckVLSEkxRDBCSFRza095Z1htMURBaVp1VFI5b2xuMVd3bHpkY3IwN2Q1K3BTMDZEMkpmT25WRmZQUHdkVWFUWE81UjFwWGQ1eVh6cEdVUEpwTlVNSnR1RXNQTFlUZHZncnU3Vlg5SXNoVW40Ym1UaDFoV3I4VGJVNWxWUjFVYTgzS1FtQ01IdzlhRFE0akV3YVI2b1BhaGI2eTltb1Z0Yjhvcm5YMDZkbzhncmQ3bU9WNDQ5ZDRicGtZQ25NRDZMVThEZEZCQkZCTE1KMnBSWkhYVFUxN3kxRlVUK3p1bmUvbk1KVDlINHZQS2J6ekJjKzlLS2NNeTE3SWFFdWlpUndMWVI3WnVON09QOCttck1naXFwZlIwNDZkK1R1UzVNbHljOEZ0SmpLSTFvZzB0Qk9oUTd0TWJXcW51TzlWOHJ6ejZiYWhVMCtOZko4K2xyWTU1S1RvUzRob2J4RnFBaVFsRWdtdGUzYjFlMHI2eXZmdWxBUVp5ZHFLTEkwZTRXSzlLN01tcGMzdmhJMFphSGtRM1VacG5ZaVRWajduZGkrR3UxVnYzT3NQeDB1alUyV045Tk5QVE96RlZiNHhvMDVlaVBrS2VlVzBtVFRVMGkybjgranE3Vlo4NmxxcHFkbXZxa0d4UzVIQWp6UENUazR1SnZQRWVLVm1hTTBFdW0ramEzSGxPVjZkZDh3ZkNLQXoyWFlyeHQzeS9TRE5Kcm1zY3JjM3ZpWWw2ZmkyUzNZTUxPZm5RWTdwM1dJUTJYNjl4MXl2citwZkY4SHgyanZXOG5GVkhlZnJvT1N3UVFxYTFXN3cxa3NvQkhJU0ZKYkJRNjhsR20yb1crdHlhbUV3cFZzNDI3M0lKUUpYMDZNS2VkdVBjK1NaT3pzcFkxT3EzRmQzZ0VLRThQRWlBaWtEWDBXbHhhYVA0RlVBa0NDZFFvclhRUndzS2lDeDdlK2FwdTZqM1QxeDV1L0FBSVJFRk9oS0taTXhzd3BsZUxsZU9tMUpYcWFvOTN4QjJ1SVJ5SmRkNjF3V1pNaDdaNW5hMmV2bHpjbDNkdmhPeStiWmUwejNWdFR1NHRjMU5UVUowZUIzZUw2WWlFRmxDUloycmk1NktlaGRxNnFybm0zY3I2Ym0vRWVqMkV3eCtRS3p2RktUWFZ0VWxwL2hYQjJaSEZxa3hjT1NKZEZMMzR6Vm85dktieWxWMTZJdHBDK01FVXd4VlVjOHpVTWFtbkg2NTUzVmVDM2xGbEFRK1FpbEo3S2hGeGdiWHo5M29QVVJ2cHQwdmJ1YjgxSVNESzNUNzNPbXBkTGpwM3JpbFR0MG1odTF0WjRQc0h4QXRPVGNqYU1mRkNVNlFrVGJFOXEwdWlYcEpadWVtNXVOM3M1RytqMDFOeHZ4VzFMamcxMDdzcjNYaHJiTGd6eTl6ZU44ViszeEFBM2hoSFpaUWJhalQxT0lWbnJwTFlqVUd0NkszZGw5TjlkeHlMcm0yNjQ2djVUUnlYTzlNTDFiSFBCcHlLYkNRZ0s2amE2WFVVam0zOU95dFJyTHVNRjVmZHR1Mit2ZXllT3U5UWxuSzhYeitPaHM0cnIzbHloNEhNTGlGbW9LVHFSN0pOSnFRVGR5NThtelhGZmFLMWY2cDNoNlAzZ2dFalhCaER1a1lhamZyUjFCdEIyNHA1dDU1emlzNDh2MVdlR3NsdGdSZ1dYYW52RFFZQnNIN29WVHNuWnV3M2ppY3R0MDJxMXU3VlhHNDNQZjZyUENXQ09xeTBOeWlFWnlmTTVLWSttc1dIU2liZ1lKTG00UW5HK3U5b3JaL3U4SHVzK21jT1NoQVRua0o2SXFxWHdtRzlkUjRrR1dkdmJTcXYvUEpaYVd5UmhKcUhFMGhTUkdTQVdnaXVDYm55N1YwbW51dDhxNDY2ZW00OS8reE1LRUFISGVGTFZaUTJralU3OWpUMzlYWE5IbFJlcXNNWDMrQ3RUUWNSSGhDbkpINlhhZ0tKS0RoNUVSSUlyZnlqVnlSTFNqYmE3bzZ6TjdLMTNhdnI5RTIrYzhuems5TGp1dkZDTUdoNWl5TU1NQmZVYVJYeXk5aGcxTklkQkd3WWRLMU0xazhxdnJtMitubzkwMjMwYnAwdXI2cU91bDNnd3BHTFRBRi9FMlhRWXBFOVJ6UnUwK0VOZktoUTBjTXhVVFIxMTIveHd5Y1RaNGp6ODBpcDNoWDZyVFZpMHpKOSt2SFVUYU81M2RtOG11aTVVNXVwYy8venhVa0l6b0xZYndZSnA5RW16aEFTZE5ScUxwNDNabW9PUFhVR003L3h2UEdXS1lINUkrcDJLUzBtRXkwaWM5M09SUmhJMU5WeDN4WXR2di93WDJDZkF5d2tzMGFWdEpoTml3cVh4NmRxNUtQVzZOY2QxSGp5L2Q3dlVZbUZJU0IwUjRuZmozaXB0aW9PaGNkeVNPdEdwMVU2NTFYZi80MVBORVlzdzNlZ2xvL2pBbDFueWhlbXVQUTIrUGRWOHJ2LzhCSVlUL0MxQUpOQU5jWlFsczg4VG9CMVlBdmdpTEVYenMyc05RTmdCQWtPaWV3NjIyUkdWMXA0NmFPdTlwMFZvSGVQODNkT0xhZDlaWTd3TnJJOG93ZnNDMkVFdmwwVGc1YzI0Nlo3LzhBdjB0bHh3SDQ2VUUxSG1tNitYUlAvbmhhRUV2RDlPYU9qZnY5QTJmLy8vLzhFTUpzSmpRYUxtM1RXckZoM3Q1N2xlK0NQZDF3N2lhbDBYUk5DS1Y5djBEZVJ6MEV1UytBTUNLU2FBS1VDaWJPeHloWUJ0NGV1S1pIL0hTNzNSZDRVVlJQQUFHZzNpZy9tcGNaQkV3STFOWEtzbkphQVZ3RG9ORmlIMDNWSGJxSzlmVForanQxRmV2TTlwT2pIVkU2VUNiQ2FSaWxGQ21xYW5hbXIyTVBwdEwrdDF2bHljbTZJU1NSSVlqZTVoWWVDTWJ3WTI5eVlSNTI3SFZlM2J2MXRCdm9IWkxDQjNoNHdjZ2svT1k0L05FUXBVN1R1eVBOeGNldy8vSEdFbnpTRHQycFB2TGlsVTVUbGRyVFJZci84L0NhU2pFbG5ZUjBhS2prMHJ5YnYvOHFTNDFDUWxJdVFKdDNHakkyUlBjOThkeUhEVk5YRngzdm4yMHJ2VE9uSzA3ZDRQS1VoZnBvellUR2FaRVRuYkhyVHp0MUMzYmtkblc3blp1RTkzNDVMNlhYZUIyalZDbUJrQmxURUpCS0pDZ1FuTDBVb0dKaE9UeHhjMFZxamg2NzRONzZOdEZYbXc0SHo1T2EyYTNaZ0cyK0V1bkc5eVVsNy8rVGpTbUZDSStscE1nclNOQkE2bmEyNkkwMFdYLy96eEJvTXNhazAxTlRSZzFVNU9xN2twZi9wMUNCaW1YeWZUVHVHSEZhMUZRaTQ5My84RkR1TlhnK0lxMFNKUlNDS1FUSnZhSmlueTk5Y1IxcTdaN0c3bkp1QjdzMmRkS0YwYTlRNkpuaDQ3emczS1ZEbmFjdmtod1dXVVRyQ0NlcWVXeDJ6ek81T1QwNzA5cDVaNTMwZmQrNGxsTEYzZzRCcm81aUJFaFFaMjVDeHhGS1U3V0lwZjI5YVJrc1ZIZ2p1MDUrWFY2UEp5RmV4THFKcEZSVk96aUV3NHJaZGxudi95WTVMaEVJMUpwVFIxZ3gwOGh5bHJvNS8rVDRSRk9QQ0NUNm8zS0thY25HOWliTGxtdi95TEwzRk5uZDFOaCtpaWpRMW1PVjZwcUwvL3d2cG5xQUowSHltcDZVemkwdStDS2FiZy9qaloxNTNzWGVnYjN6UnRGdmdlWkV4QVFaT0tTbG1FVm9qQWQybU55cGM5RjAzcXhXN3VidjA3YUQxajhVODU4YWNSQzVBN0VzdTIxNnc4N1Rmdi8xOTFLZ0dPZDJLVk1UeWdWdHByLyswMFgzTzYzcUhuemt1VjZ0bi85T2srTVRTSEV0YkV3U0ppdFhPLy9ES0kvSXdlVWg4OUxVQ0ZLQnFDaWE2ZGpVNUdtOWRPVjlKZncvSGZDVGtLUmZKU084aTUxSWtXU2cxMGRidTkwOHp5WTN1ZTkwdVFWNENSSU1JUlIxQUNuQUdVQytKaUpraXRMZ2hvQTZnUENEVDloTnNEV0tFT0VBTVlSb3lXMjlWTldWQXhJdE83cmI1ZG93dFV2UGNGWncvTjNHbzVQZEhZNHJmWjQ1WGlwMDVIWTRxcWFLTXVsQWppNVh4WXZ3RFVpNlVJZ3BBT2x6YmpZcEZmdTlVNzNlQ3VhbWgwRmhHbFREVGl2di9PUzZzOERBWFJPVFU3Tnl4MzQ2VCtTNzBybzFPZUFrdUVnZitPRTRTWjJtc3NPOVU3M1J6ZkFWUWdjbEN1RFU1eDlWeStGZXZPczlLbHpQQURvSWM2RnVEbGk1dkZKaVYrdjVkK2VBVFlHcW1NQUJ6QU1NVXFFOUZ4RUgwQi9JUkRTTlB0UnJ1RGhBbndDZXJaN1p5TnhYc1dsVGM5YXJ2RWpXdVc0bUtuYnhYcXlCaDkxT29Kd0k4ZDRFVm9tWklZOTZhd0lVcGFVRFNzdXpiRUlPMjdzbzVDZVYzM1JmM0hYZnpqN3BmTHZJanNqRHlNZ21Cb0V4TGtUTGsyVWpLaE9kU2JZVGliZVd1NmhPSzNONy8rR29uZk1BL0NmU2lVMHNLU2l3eHFhZHFOVytCN3MzSGYvMXB0RUJ5Q2ZGOEtwa2Z6R3BUWStibktlWG04OUE5N1czSGVmL2pvT0NLbmo3V1FtQ0xrNDhUQzhkR0ZiYlNTNDI1dDJ6YzNYLzVzanRnSHVMMFo5aVdHT0ZpWDdHcjNaZkUzdkl3Vk9ERjYzYmQvLzNyOENXRHZWS0oxL0c1eW8yR3Z6ZDVpeW5jMHpOYzNzM0YwYy8vQ01DSWdLQUVWaXdJaDltczBuQ0RCejBYWXdqNWw4R21ocEhsYXRoZFpQYlhYUFI1VmZvc2svQ2M4UEpzdFBJVVdOOFFNTm9kUktnRkZsSTEyQWtHalRXdGUvcWhLM0l5Ukt6S3kwOWZYSzdiVUc3dVBUY2UrVTA2Zy9VQ1dvVG5naGtrUUVpQjJoVW14dExyVGp5TGtweWplOTc1cGhJWW1SSlNMM0ZaVmQ5elUzY2VtNzYvN0lwdkROckQ5N21LNGVjbjdTakFhSXRZMnFRaktOQ0pGczFPU3RPSEM3Y0hUa2EvL0ZUdHVFREhsUER0aHFJdkgyYWxEVzdOUDVyYnFYRmJaNi8veStVR2l0Rm8rSE9NMDBCUG5HdVJWa05sMVNrV3pUcWd4L2YvbzVSYVJSem11bE1oVGxvbkhhZ2RPdXlZYXZOTnVzSTdyLzhrd2RBZHcyU0VnWmNtZ1Fpa1lYVTA3WmU2TFVjcWFsMGIvL0pOSUNDaUVFWGVadWhCQ1ZMbFBxdDFaS21hYjJObmp2OTNnRmRqblplVlExYlREalphZmVSM2RTaVdlZks4NWZVK1dhdFd6T3Q5MDIzaXJwdWJsWjBhOG55NldJNTRad2VwUkRMTDBiSmhLTFU2bW53SWlDRzd0a2RITE44b3RtVm85eTBiamMzYzlIWTlQZnA5eDl0M24wdVU2TmVSUWxESThCWUJmRmhTSzFrWm9tV1VRVGNodUM2SkhMNVhtNDNOeTFMWFJ1K2J0WDBldjUySitYZkpCbE1tbmZJWTBhU0VrbnhJTk9UUGxRdnlkK3QxVlI2TnIyMzF4NlBSNk45SHZrbVRtZk5TZ3FMdkFnd1JEbDRBSGdGUEdnNm5DSWNoSWNFUmdydTF4a1JKM1FwZFRRZG9JYTVTcG0zUjVhVGhmaVBjOXpmU1k0ZGQ0NjdlRjVmVklvOUxSdlBRVjdjMllUYnp5dHBRZTk1QzFOZzVHdFpDcGM1ZEprMVBabTFIbE01c3JOMWJ0aTZhNXZHWnZiMXRhdkMzSUVScXl3c1RFL1NsUlZYT1l0Rk5RYjNzbHplelJXdjRTUWRkTkpwMkx2cVUxUmhUZGVMRkdRa1FwV0ROT1o2Z2xObVk5NmpwZHU2ZFhWbldLK3Ywcm5uOHlkSzIvR0NWdW5IdGVEeGs2NEg1ZkpPZktWMEpnamw2Q0hhZDFNTnYzcGtDWGFpbmpybTYrQkJoVG0zeHJ4WXAxQ2dnNmZRRUthbWxETUhWT3k2b1IyWVZIRldUMDc5VGswL0RyVDNGV0ZiUHh6c25mQ3ZoSVJ3Zmt2cUtLRlR5RkM1QkhaMjQ3c3crVUdwWTBmMmF6ODF6ZStjaS9QRU1jMHJ0dEFnWldlaVFLR0p5WDR6T3piblMvNlFTbnhpYVZkYmNGVlR6NDErSjhSWWl4TXF1Q3B6ZVIzeFZpVUZPZ0EzT1BtQmV0MDVHcFFsM2F0cDF1SzNlZlF3UU9tc20zWWQxR3ZrVWd2YnNjcmp2SWVQUWx4MkhNZzlVQlQyUWtVSnlvTUkwYmNIcXNpL2ZQb1NhbVN6c3NPcXYzVWNrSEtsOEozeWtERGpNUXRsZzBJbGs5aGlZZEpycU9uVkFzVjlJYlN5NUx0VDJhcTM4SERrRHBRenMxVmVwTWs0d2hXeGhMaGlJZGxxTlJCUXgwdlZ1dDZ0NTY2T2ZUajd5WTk2Rjh2ckp6OVM2bXpFME5uZGk3M2tnb3A1d3pJa3BhVVhqblBUUFRPMUZ4MDltMVd1OU1mWXcvVW9LZHUxcXZITnUrcG83ZDhpVU5KY1hzaWxmWkVZUk1SWWVtaFQ3cWNiMmIzOXFHSUg2bGZkeld0dXpZdVBLOTBvSGJwOTJ6eDQ3eWVNV29wMWlSU1VSQ0VoVFR1dzJOWkE2Mk9ON1g2aGl3OWgyeSszcTlWYjlKb3ZsQnNkMzJGeUVsTGljME1XMGFzdlJkQXVxbzYrZVZ1cS9wRVFrczcxeGh0VGswcnI5VEpxbHo0T212R05kcFlTS0V0RlM1QVdrMVAzUVJWVzFPdm5vd1ZVcmRIUFA3cm52cm8xRFBtcW5keDdkZkFpTWJkcFF5V0xUU21xT3FOUmIxUWZYNWtKZlNWQkhUcmZsMFVzVXZ0SkxUREF3YVpmUlFRcW1NV2ZVSTFpcURwMVZmcG9SSVU3Tkh0ZVFUOFNaNXVKRk1pTkMzYUlXVGFhM1dyZkhXOXJjcHV2aW1tRDhtbzFMcHI0bjhQNzhFbENrV0pwRFNvbk1hbWk2QzBOMm82cnZkTEdlbHJVejlkVGUrZnlheWN6MkJscERia0tOTTlkWjhJYkJIMTcwM0RhYnB2bGV4N3lZNk96bXNVK25LblFwdWl0a2Q5N2RTNUEvSjJDclZlK0tRaWlyTFUycGlKcXhxam1ENTI3NkhacjFmVy9vOVozYzk1OUtvZE9TL0xnODZkSFF4YnZsQmFWMjZtbm53TzY4bkxhb1lUSXpXek11NUF4TUxRT05acXVPdHZPZDAzeDFmMG55RVhwM3kvVHVINmhQb0pyVUVKeWp1dk13ckJRRWdoVG96VmMxbSs3bldwZk45cUY2cTU2YmpjWGVmTTJFVHNQNmlqV0tvZmlFaGJORXhCMGNWMTRadktCeTJTSVRXVWh1UW9JcHJwNVBsOVV1YnlldTFWTnVqbjBLUlB0UzVMQkhCMnE5eVgrbEVjK291cHpNNnIxenAxM3BDMTVDWGVJOUdMNkI1Q01JUXVxMW1lZnpvTjlOemhXdjhxRDZyS3R1enJTdlg1TlRzdVB3bktnZE84WEFyQ0tSaEhLRUJCVDliays3dXpTS09YdHQ3T1M1WDN1Y2ZnZ3FDQ2NmTEJXZHZwWW45MnNWVjRnSVBlbUQyQzIwSkVrTHFPSnU5eXlkbXFqZGJQVFVlblZWdDE2ZE5rMDdXNmprMW1iOU9uSnlham5nelE1QjZoSlJsR0JkU1FrejhlaVJ6VTFVNi9IOUYwd3ZsZEZlLzJPaVBZZk5IdE4wZU8rajg1Q3ZESkYrOUxTZ2JMbzlRc3N3UlV4Sk8zcXRqYVZjN0k5TitRZGNmUzhscXBkQ05Od2JkRDZxVXMwN2NqUjFYbUNJYzNqbEMrZXdpMTlQelg2dFRTUFZXeStFRm80ZVorbWFlazJ6cXB4MDZMaXRYMGlmdFZSL1N1NHNaNFo5bWlKOXBuRnlGRWxsRGJ0bE9ubDZ6dHB2WDNPT25LUGI5eWRNbHFzU3ZsMmxaL3VmUi9kUHpDTGozUERSUDRtbHlNMUdDU0ZjYTB0aGpkNzNmSm5qejhVeUthSzlmS0owTW5hVHpwWDN4SWpHdEFobzlsR2ozWUlLUklFSElvdnlHblcvV1U2cW1xcU9LOGJkK0pVcmJ0M004a0RNWG10UXBrWHk2WElHSlF5K24xT29qem5IdWVmY2hZckhNSXFkbGEyNXZDdG51elVXenFLR1J4emV0MTRhcEZISkJZNG9WaUlmZktOcmkxR2lUUG03bEhkWE5iVUZlUnpldmxmZkpCaFRwYzk3ZFRBc09tajNQbExrRTJwb1FiMmE4SlNNWFlmbEFtZkd1UVFSYlNMWFJweXF1blZlOUxxam42aVl4SzdIVkYwY1ZaOUprRTVuZ0VJRENsc0haQU5KUHNNSTFrelFLakJIempWYmxIUG5vYUZQQllrdjY3dHZadWFnZXN1Vjk0TUxtVlpTUDdleXhUS1RaMTBkcDBiS1VYVHFwMDhWdGw1MVhnbGxHbVlENUpURkcxdnQ0MGxXOE1ON3A1bmVVaHVUYlZyT2pmUEwzWDE5MngyOE43cDdiUGVWVEV2SXFjdllYUk9Jam9JSElVOHcydXVGUzg2dWU3eTQwVHA1VDFEWmg3UmNpUkV4K3ZkbGVUekJIUXBtS2VvVVpMNnphbEd2MFh6MGIyTzg2UFVWNzhYbU55blp0VWVieFpkNlV0ZmliSTdBOWY0eEJra0pGUmRhSk9nMTJtRFRrTDVmcjRidFdxcUxqM3A3eWJxWEg4bXgzbHR2cUYwZjhMZHlnUjVVRmJqQkNUcDVhTUNPdVljOG5UdHozRWRlSzByeHVYZE8zblR6ZmRPYXJ2eDVkRVZScWVXVjdyeE03RVoxenppdjIrUFFmWm9YbHF5RnlIdVJJOVdSYWlXbTN5eEswZDY1NVZjdFRVTHZ1bTU1VmFydlAwNXZQU3BsVHZCaTZJVUNTUkRjVXBDVUkxRFJGV1FzSVlJSHhMNWExN04zbG5sdDlQUjQ5ditiZDVFYzN1blR2SjVhUkVRY1FuQXpkZ215VFVXaEtWSW92VVRkOXl2WTYzMy82V3JNd3ZKVlRURFowd0V1c3ZBMW1ueWlmUFV2YnFuanV1SzJmNnJQQmdSU3Y0SUFCTHBOUW8yR05YRGZFSmxBeENGdmV3ekkyS1ZxbDdsZHoydDUvcXM4RGQ4dEpGRFpUU1FtQzJVVEkrc1Rqb3ZkVTh5WTMwYTFWYzZWM2YvaGJKSWpBa0E5VTZkL0pvRm9mc0pReWhxWWF3NlJwU1IyYlZPUE8vODhGM2xHaERUR3RSaUpRZ1RrOFc0NzVqNTI5anF4aVlUczd5cXB1ZU8rUGUvM2VUWUVPZ1NXV3VKa3dNOVlDWFBmZE9kT1YwV293MDd5d3gxLy9nRnRjUjlDREV4bVRVK0Z2V0hDS0J4RVpUTTNOZExRME52bTJZM0xNOUZlK3M2dnlFMlFmSEdUOG1jY1YxWGd6UXFBa0QxREpUUWtSZ3RYVUpJSXRSYS9WR29tSjZXVkZXdGNldnVWMnE2WGNxNzhwS2ZkTGt2a0ZLNlVzNzRieVZIQWtoeDBsUk1PVHdHY2tkS0ZXOTdTMG03NFI2UFhHbVZYUjRyZGNwbTAyK2liUXZPM2VLcFBhWm8wUXhoeENUbFVOaTVnL2JuTDJkN3BxUEhYVVZ0Lzg4VkdpL2dQVWI2K1dHSVBJNDlLSnFxbUQ5bGs0Wm5UdW82cXovenpMVnRBYk9aSnhlSENERU9HZzNmVlZjN05UQWt0T3JlSzIvNnJQQ1lFd1J5ZEFTTVRTbWZDUnJIeW9JczJtSDdOS2VuWHpxdlF4ZC8vOGdXVG9SekVjbHhQTHVndnRYS0tPMU9HRnh5Z2p5di94amVqSWdmZ1RSTlVwOUhCZ2tsNktZUzk4WDFzR293YjRyWEhtNi8vQVNFRG5XRUtBSlJBUEdTd1dRamtPSVRZQXdrQVVNUmhIczFMRWwzRGFFWmhHd1VEbE5LNjVaSUdGVXBEdXpqclZkNDR1aVEyRHlpdm5temEwRHZMOEE1a1pNSWdEYVJFM3BVRXVkSlRPVlRqcG52bDA0Zmk3L0FkZWprK0tzV1VhaTZWRFUwVnQ5SzZKOTJlbGRtZUlNalQ0Q1R6bVVDRmphazJZanJuN3Y1dm45bW5mSy9LblgySGlMU3k3NDcrRXpQa3ZVWTZMZ3lWR0hicmdXWGZLWGZsTWw4RU1KcFFHdzBIOVA2Mnd0TzFPTjAzWHVieVhmT3hTK0NQVXVTSHNHMUhaUHg1Sk5IdVg2QS9ISTU5TjU0QXZUR0lBTG5DaGJtdDBQSTF3S3hTU2Y3bzU0VXpwNEFCWUhMNmNoampVQUdRQ2p6V05SeWNsb0JZb09tMFdPK216OUhicUs5ZlRaK2p0MUZlbmV5N0VCOWhpdHBCckJpYnBxeURzbW16QytuVHUyM2ZUYVg5YnJQR3g5bEFMUVJTaFJDbytubzNaMkc3T3didGJwcmJWM2ZiTkh0ZW1pNUJub25UaWVzOG5KcHlZVWxTdVZGTkVld2xheXh2LzVPVFZrT3pFMHVtRmp6TlRTdDFYMy82Y21TNUVSZFB6c1V3MExSeFhVV2xuLy9zdWVsRDBHTjZaTG1uMDVhUjZ5YXBYcTgzbWYvaTVFclM0Sk9IVXpXbEdnMDAxa3c0aWR1eXM2YmFnMisxV3oydjJ3eHR5ZjJMdkNyMUhjbDNoVEtQbnc1eEpScEE5MjYxa1VWUmUyMUxpd2orRGUrQzJOb3E4bmJXdFU1TE1KcE9HMzA1bEt0bWpHY0xELy80T3BOcVNDV3RRVHBndTdVRktuU3lOQnVXWC8vMFREK2hJeVNPRW9kbkpXVW9UdXRtMnVMRVAvME1vTVN2UzY2RzV4YXBSUnB4MVpoeFkzLzhGTGx5MUFsRXVnbFJLS1VLREl4dDdDSkJVZW5ONjRWRHRPcVduZlF4eXZaUHhUK0hpYnFBa0pxblJsNHBjN2w4MUV6TUtXM25kM1hpUFo1VnpvN3MycXNyWDZXT2ZxV1haRjNnNDY1YWJpMEdjMmUzUzVJSG5YdXFlbk43akRiN2QzVzlpNkU1NmRMR3BkNURpbGhTWHpYa3Iyb1RtN2prYTdPT282ZEZldi82M1lEZ0pHNXhOTUh0RWw4dVY3TlA3aXh2LzRwK3FpaVUzYk94Z3BVdjF5dmFrMnZmL3d5a3VvQlVHNmF0Z2x4RU95enF3N28yN1pvclYvK0FVY2xKaVlHVkZpbWU1TnFkRU9veXdSVFVKZk5RbzQ2TzlxdTFmZTlzbU85UTJpM3diZ2h3SUp3SHV6dkp5ZEtBaTlsTlkzV3p6SzF6WjFrM080cnYyRzY4TW8vSGM5UGlhazZ5R3MxemFSNVdYWjBzYi8rdXhxWmdqUG5WWGRzNGQ3ZmYvdlR5ZkRLUXNPM1c0V2VPbmJmRjMvOGNwRWFDOXM3R0JrdnhXNmE5MytHYk9veW1YTEY3ODB0VE1NdlpkQ285c2E1dDUxbm4vVmJMbmVSSUowSTBhOTI2N1hyZFUxTG83V1ZhMWI2WDZicXZBU0hFelRRREZRQmZnLzVSVHNDOEI2UUI1Z25KN0hOdXV3SjFBWm9QMVdlOFBQY2VkNVF5S0t6NTEzRmUxdkhUSW9pMDc1UVY3VzhBMVV1bENMWUVzeGM1czNPQ3YzZWw5M2dGMVhFSzJIekhGWE5OdVBOOTN1ZEYzZ1lFZ2RwVFp6SngwMDF1bGJ2L1ZlZUFrdUVnZ05zMUVuRnplYWp4M3U5dlBBQmxRWWxLUTFPeHlybDhLNy9qbnBmQUR0V2xnTGVERlJQcWxKaVYrdi84QW1rT1lORU00QWc4YXdmRkNSeTBoaFlDQUFPNEFOS0UwYW5LeGRiMUpzU0JSQWp3QVFwb3hNR21vM3pLUXhhQzZGVGw3N3V0ZmltcG03dm11bmhJcDlQcnk5VlVzOXA3bHJGbDNscEJjNjUxVms3aFlyd1BJRWtURVVTaHlpZzlqYmdwR202MU1ucUVIVFppMTI3R20rYjVWemR4ZDVwazV0ZVJLbXFnZU84TTBnMDg1RXloMXVDdzFqc2FwbTM2MzA3TkZldi94SzlpSUpPYnFOUXBkVEdsSExUbzdNTTEyMHlWM2Nxdi85T2g1Q0tJU2xVZnhOaHFJSXUyZ1kyZG1wWElIbSsvMVR2RmFaa3g2QVBsTlQ1cUVLS3NOZnJwcWRpcHQ3Y0R2YWNkOGVkLytzUXNaQzZpVHA3OWVoNFZwaDIwcmR6ZlM2YWNkdTJQY2RPVjMvL1pua2hMRkNCTS9VMEdFWTlNYk82L2RsOG05OXFxbzAzUll2LzhGR01obGhsZzFCVWFIS1dIaS9RN2lpNThMcWRoTU9YT0x0dDBhclpxZTVYZCtoYlRlVHBkTjVPSzlyeC9KQmFiQmFqa25sSTJheE9oZjA2aVJOTTZ3dGZWYlZtOHI0N2w2NjZ2bG8zMGV1SEsrdjNKVmJ2Mm5KY25FdmdmWVNDY1lBRXdBeElqa0Z1UklCVW00OGpzWVkvcm00TE5IUEdDM1RsWE56ZldrdnJ0VmM3TitaNU9KOThpT2x4YS94MllseUE0blVVc0laVEVwWk5McWwrdTNUZGJjTzlqazczLzQ3TUpVUUpLSDFpVU9uNVFrZ2VJcG8xVTdYRHpqcGRGMUhlLy9pU25JQjhDQVBSSUhUa0E1Q25zMURhZXFJOXpSWW83dU9OOS8rR1d4T2dKTWdsUUZ1VkRTS0c4eHVPVEhWelJaei84RjZmVUFzSmtRajc4bEVReDVNTWdnaE5ScUp0R28wZTVIdjkzZ3QxSlhqdUlPWEV4OHVRVWNJMUZWT1RrSzIydHR1blhHMisvL0NNeHdzaWlGR09rOGlHcG1SUnpEVHUya1ZzeXRPemZabHQzZmMzMHVudTVWZWI2TS9LVkQ1dEYzZUV4RExHWm9IZkhVWldIRGtZS0pSTDFiT3NieHU1YWE2NVdsbnFsbXB4YmFqMGJtLzEydTlBNC9rNVdlTTR5dEVnSzF5VXdselJJc1lyTU9HTGpWeXlOL0x0Ulc1dTFkemZOOU54eHIwc2M4L1dJRXNYTnU4Wnlkd3BaNldIeWl1M3pXck1LSjVYamRIbks3VjdQZmp2ZGs1NEVGOUVqUUlUQVdVa0lhQXRRaDlGNFJLQ3UyQ2srUzNOYXdhV2dvNElkb2tzOHp0UjZ1YVhIcWJ0VmMwejBibHJ5bFNqUzVkTk94dVdXcHQwd1ZkTnJ6MGJPNm00NnEwOHVMa1dJajVwMUt1bTFwMkxsVnp6VTNIVDNvdVZVZWI0dEJsSWFZMGhwT1JvSVVnamRTbWh0WmR6VTZxcFZrOXZ5OUJSK25iUld6M1FoT2JOYkYzaDhrY3VHQnlpQmFHVFVzUFFidU1iT1FZbDUzMitmSUwwVzVOVkhDdHZwdGduamtOOEVuUHhBb1A4aVFsdDNXZGpTZW5TNmE5TE5INHdtcWNkYXJkK3pCTmlCNStITjQzVTU0VjFKYkZ5S1RTYmszV3c1RXJmVTRxMmMra2I1UXZqMDVWUjM4VHBzM0hPUlIzeFhFTWhPSm02V29GQnBTWnoySVFSempjS21uVENjeTQ3ZlM5VTc0d1B4VFZPUWZzMDNiZXpwWnI1UDBsalU3VDVjcjd4WWhJU0RDUzVFVzJuMnRLTnNkRkUzYUtwem93T3EvVVZJTlFZZ25JNTBkK1UySm5SenhWRnNvb011RjZOUGdvaHJueDJPN3JlNkdMZDlScmVjZmk2djNKU3pYbEpIcnhTTTdwK3BRN0xub1VIUmRNTnhVNnZTNmxxRWM5MVRwK1hPOFBWNzdESVRGeG1obDFWM1FmTk51bW9LbjJkMzlIMHlHcFFuMjNUcFh6eVpMaVprcGt2amlqTHhUR21zSXBSSms2R3NSSW9UVlRyNTM2U3BrdVRzd21DcHpidlN5OTJSZzNYMk1CT0x5RW1Za3Z6dFRPaGswUkgwK3p2RHJQUUpXRVU2NUxjNmQzR25lVEpGNU82a3JvUzhyWm5rRkVacUNGS1pLV28zb2tUcGh6QnZzNVZ3TzYrbUhRZGlXQ0txZlN2bGVlbFJUVVQ5UTNZYXJyMUJETFhDOG9ZUUU2bENaTzZwZDBIejFvanU1cjY1RE9iTG9URFZlVFVYdTlLaDNjalNLVVRqdlk1aDFucUYwODdLQk1pTkROaEV4SEdFVDVYZFIxbFpOUnkvVGJPMU5PcnAwNnFObGJmcWtvdlJUdzI1ckl1Vnc4bm82ZUJ1RWZjdHBvZ3VFMU1FK1BsejU1VjI2cmQvSnB4ejJFcjI2Vjc3eUROTzFCT3Q0cmQ2RmVGSlJmTTlaeXlHNm9QMUdpZkd1aHJidlN6aEJwQ1ROaE5QVjFYbno4NGwwL0x2R0JJZ05DN2tkRUUxZWluZGp1c1NpM1R1enAzaTlWYWdsN3AxenYzTXJaenlpSkNYcndXVG1mSWsrMWV4Y2FheDFSaEYzMU91ZEJDeENYSGJzT3QvWmRrMXRld1h1MGNwUDloclhJb3dSUG50ZGUxcXJqdkRxLzF6NVlsQW1oR0RlMUhGVHZrL3NvSjArM1hsSkdYb0pUSVdpRW9oVEVOZ2dmY3cyZG1xanV4dnpUTHBMam1IenZrS1dISmExRENhdzZ6OVdHWktMMkdndnJQVElJUWxGcUJudWYwWEs2bkZWZk5JejdvdnVOSG1mTEJPY2xpbllqcFdkNXJRa2J4R1dweUxPb21NaWhURnFHbWFSTW5sUjQ4NzhUa0kvbFZOeG9zWjgwVE5QN0hmQjViT0RDazJtQ0lpRSs1aHU0aE5LbSttOGJxT3QzRy8xeG85MDQrYTE1MW5uejk2NTB3bnBnZVZOZVlyRVEyVU1ZeXNqMVFqbDZhQ0ppNXZyclc5cWRjMzErNmtUR1M3VVZUdEhsZlVHRU96cUR0ZFhobkVTU0habWpsQ2dsZVZHemUweHZTK3VWUDVWaDNmd1N1UlVpclhSUmFlWTd6ODZtMmNwdmZDMWh1bHdyQkhEbFRGU3dtYmh0VkNMMFV1SUd2bDlhaVlwNnJDczQ3cjgyWFFmT3FuZThKMk1vU2tMUTg1VEVjdTZ0YW5rVXZRT2owZG1ybkZUdFY5THU4Z3VoZ1pUc2hzOXI0SHV6WDdLQ2xFMCtwZld1OGFTR1c4NHVUb2E1RnNieUJheHR1cWF1RTlrMjV1NDIzWjNmbjZuVUd1anM2cXo1MlQrMUhQR0ljVUtVWWR0RGNtbFBsK3NMVXc3ZDJ6cHl1bGZlN1VHVXhVMHFjM1h6V3ltck15THZJeGNUY1FXWm83eEVRMktkVTBqUlVhOC9WZE10MzF4NkxqcS8yREVYYWhxYXZEcW80ZWFxejN2Uk9yWHNhNmVPOXp4Z1FQcUZRMU13eE91bUZWRFhLRVU2cnVQWFBYcXE0OStHYmxXd25UcW05OXlMVzlkVkhlZU02TWhYcUlVaTA4Wnp0V24wWUV5YWQyNTFYVmVsU3lncWRRTzA3dFhYdDdzZDA4M3d6N3RnWDBUQ1pCTDBNRVdicjJLbk4yTDV5THFWVjdzZGgzWDRmVkgvSkJDdVUwTlFWU0trQ2UwTERueHFkNTUxWGtFL1RqcXBkTkh1ZW1TcGQ4SktsVVBORUNHdGpjbzd5VUtkRE9MTVFWdm5GWGJ4MWZqaGtFeWR4OC9zWHpUZEtuZStYbjN5bDJvd25XOU9xOEY0R0ZsTW5sTVFzWUxrVlJoS0ZpYVkyY2IydHUxZlhITG0yN20vcDBENlhKcU5VZFpIRDJ2SmpuNUxzSmtZSFdPalI3dmdFSWtMVW9BS1lENDFCT056Tmlsd1ZBQlNNb0xtdGdzYTd3TmVCbXNlamR6YVBsNXVibStqMFd0bTFYZUV5Z25rdEtTSEl3bURLU1BSdUxvMnBuS1Y3SFp5T25kdU9uZUJhSWpwd3FFcFFnYTVhckdrcTNxU2JaMjJjNG9qYnR0ZHphMDh1Njl1NjZQZFNucFdqZHMrSDJnUGs1RTh6Rkt5c2dRSW1JYlVFSFBpaWhNSTFGN2ZIdCt0a3YzRUZJTWpuazErRXlPcG1LbDNzTHlHYWFFVGh3TjlIRkNhcDYxNmZIY3pyN1Z3NTAxYzFIZlB3Y3c2Q0NrTXZsNTI2dnA5SUlSeFJPdVBOOFlCSERKUkNKNW9oVE1hYXJMdEpsNTFIcjVlb2w4YzZPVHpmZW9TOU5VZ1N1aStEY0k0cWQ1Q1FJNjJZTzJFd3B1anZQQzNoNnNTSVdUUzlqVFJDWVFHQXdyVU5hajNJZEtSYWRadXViWG01cm90S3VucnVlVlhJOGtIS0tMT0hkbGU2OE5iWWhuTHk1dW84VitoNHdEbkx6VGQ3U0tiREV3b2h0MHBtRVZGWDBWcHV1am1yVGM3eXU3Nis1dSsvVDh1K29uL0RpTlJmS0FaNkZrdVRvR2JNMGFTY2U5Rk55aWZIcHJZMUcrYnZqeTZkNE84NlhTNTNyWTVMT25qdkZPWGJKZURKRWJYcHQwY1JhR0ZWSGJpZ3RkZFozVGtiaTV2cGRMck83Ly9FbVo2VFFlMEh6S0RldlFLVnlPaTJZUDNVMlBhZkhadHU3alQ5YnRYemZmL2d4Rzh5SUdJcVVVVXVvK2lEZEVFZWhyZGhDWDd5OUw3bTFPVGJkczNkM2MyM1YvN3ZHZFJJamhLRFhEbHBlbFlJNVVVUWJ5cGR2Rk5lMisyZVZhczNaWDcvOEVvSlljTXdzWEpYeFR5UGhmS0ZOTUk1SGhwWG5KMDg2M3hkWlk3LzhhQzFPSTRiQW1xYUQzYkJPUG90RkVKMWphZk5VdVNMbkpmTG84M1d4dmpydjlVNzNNSlJ3Q3draW56dTd3YmpVb202ZE8xZk5CSHZmL2dzRWR6WUpDQ2JnWEF1THlGaVpnM0NiQk00YkZCTEVsdHl1eXNvcnJtNXZhN3BmMDN5dDBibS9FZTUyUDhjOXl1YzV5dXE4RHVobmg3UENUbHB1S2lUUEdEUnA4b0VUVU9sbDAydFRNMDlldXRaM1RVMVBZM2NhbmxmZW1pNzBMdFZKZkRUUnBrSTZDVkdDYnBHbUY4dlNYc1U4YXFsa2x6bFVyNk5UMXQ5TitsYlMvVGRWN1JuQmpwM1gxQkZvdGpKN3RiZExxcDNjcXBYYmRuVnE3Lzg4cFFjZ0JLSTdPcDZlS0VUSGN4bXBxZk1KWlU5azAzY2RiMy84TmhOdkJkUk1TOTh1M1RKck5sTkNuVnI1SkRUc0sxbmxxdS8xV2VFeDdjUUJwdmdoUHl3bk1SQVVjN1c3Q2swMnpYS3VudW11dWJDTzduL05OaEk2Y3NncVhwNFdYMUx0MmFwc3Z1anZONlhUbi81U1F3c0s4RTY1Q2dwQldET1JuVnV3bDBwb203U3FsWGNWcmk3OC9QQVNBQ2tpUkF1MEN5QUVLeE1GT3pYUmdCdHdSS0NSQVZrU2JMNXQ4d0ZvS01DQklDN2dRaXZweFBXelBHU3czZ3I0WEhjdXZLN1VuTWtwcVZNcnJxVWh3elRrcERabkZWWE9sWmxhaXU3ZDlwMDR0eDNWRmZyTE9lQWRjQnljRXFDYVFnUkhSRWw2QkVQSlVkVVhxcWxwbi9pNVZuaEdRSHhFR0JNb2dSeUpBRnhFb09XREhCcGxBYUd5QmJwcUZUemRYR3l0bnBZNW55Nk9lOENreFhNUWhCTUM4c3dodXprTlRHRU0zZFY3c2I4OHo4UG51ZklGSmp6T05qWjB1T3NHTFN6Znpyczl6c2M2T08rUVI2UERzUU9jSnJqNTF1RVhTeTc2eFc3ejd2QWh3QlZvSmFCZ2hWbHdxdzB3WEJwYUY4OWlDT2wrbStseDVYdVMrNC9PWjRJNERiRmlHMkxNbERLVkRGcElPSmMwWUlXSDljS2wwMTF4ejZWNTdzendHZWRLRUFwQUtEcVhHNktZbU5uRHhTWWZuK0ZRNlZBTmlCSjVuaVhaeG9DZ0FLZk5KMmRqVVRjQ29nZGRrc2Q5TjFSM1ZGZW5mVForanVxSzlPOHpUd0hBdkdDcXlVcC9pTXBXM1U3YjlpUjVkSGZwdlhmcmRiNDNhbVFoYnlLSkF0cVU5MmhLVUdlcmRpaTZWcDJibW0zVGNlamZ3YlFUbmtKdGh6dlpUNG1sOHVTeHpTY2JQalIxcHd1Ny8vdXpHODNkeExZODZWbmR2LzZlR1NReVBqczJYWU01ZWduY096aEgvK0ZZWllwa2pKbmJ1SDNMa2JwMmxXeTdjbkNzNnYvd3ZVTkdJSHNLSXhwcDZWR25DbGlXTnFLMVRhbnB1dU8rdHp2cDBhblBIREpkRFQvaFJMVGtRR0tDVHpCTW1yZVFNOXM0ZGNVam5xYm82dTMrbWIzN2JRMTVuRFpOaStkVGJGZ1RQUHB5dUVUSG81LytXcDAwRUl5WW0xTFRxc2FYeTl4MXhIS1ZsaDMvNkxhSmhrTk1vRDZhYXFDbXFUWnNkYlhhTE5mL3JLSWJva1QrdTF4OU0wMWU3T0s4U0dIRmZQL3dDeWlMcklXTWFFVXBsTTBtRXVZS0pzd3FPcDFFbkJ4VjkwZHVOM0w0OWpkL2FXVC9rNXVGZWVKenRmR2w0RkZXNmNMRUhSZXhSZENJaWxCdEdCclZIR1dSY2E3eW9FUkY3RUNFZ1Nna0tBUUlVRUpKT0wxV25xdGVzRkRGQ1FJUVNJMFJVTEJFazRsWTZMbEZ4YkJrWHhuRXBFVWZHWWJSVjBJZ0J2dmM5cDZxWGdQZk85engzbnUvUDEyVHBxblBPdSsvVllRa2hLbnlwOElYZjlPby8rVktJZ2w4S2tkbkZmbFhWSXRGb0xCNlBKNU9KWkhWMWRRMzhTTVNpMnY4dTJtQ3dxcEs5cXZ4K2Z5QVFDSVpDWVZtUkYycXhlSFZ0WGNQU1pZMk45OXpUeEY3MzZOV2FnbHZDQ2xFajBWaUNFcFpNSm1OUlZRa0Znd0U4andDQUQxVkY4cEgrZUN3VzBaUlFGVU9FU0p6ejhWaGNrLzNTdkhsbDg4cmdOVy9lL1BtU3RLaDhTV1VnS0s4cVcxMzlwemRmZUh2N00wOXYzcmIxaWNjZjI3aGhiZjNpbVhmUG1sTzJZTkhpeWlDSlZkYzNOald2WEwxNkRYMnRxTURqQ3hiZ2VYOVZVQ1phTEpFRStuVzlzYkhwbnFiWXJEdW53NzhaMCsrZVdUcG53YUxLQUlsWDF5OWQxclJpMVgycjZoYmNObm5TcEFuang0MjkrZHFycmp4LzlQQVprZHZubmpKMXloOXZ2R0J5OTBtOUIrNFljc3FrNmw3dm1IZGRlc2FRejNpK2N2YXdjVk1hSDU2dExuL1krdjY0M2E5OSthOFBQbmpyNWJicTIyK2ZPblhxbE1tVHA4NG9MVnRVUlpMMVRTdld0R3pZOEhEcnc2MFBMWjkzN2VXL1BlLzgwMzR6MUxyemdoVjIrUjJ6OUpicWU1WnYvK2FqSFowZmZmeEcwKzh2NkJiZCtzWS9Mbnowa3g0Zkh2eGs1L0o3TnAwUnFsdzhiOWFkSmNVamh4MjZmOUVEZjN5ejhIMXA4RjhPbm5QUjJYdGVmK0toMVExYXhZeHA0NHB2LzNYcTZYYy9mWDFVODhNWFBILzliL3QvL01wTjk1b0hQaG1SL3ViRnh4YWZQWC83bVcrY0U5azYrcE4vdm5IdjczZXZqTDladSsrODdvTmUyZmI4dW9mdXJZc3VtWG5MeEpHWGZ2amwyejhWV2FiODBPbDFjemRQLzNuSDgwOXNXTHZ5bnZycVdDd2NxQ3lYNXQ0NVhqaXZ6enV6cnErNzRWY0RmNys4NDQ2aFAvL3QxU2ZYTjlmRlNMQnkwYnlaWXNsTlY1N2YvNzBGMDVkR1YwMjQ3T3RIL2VuVzAzWTh1clpaVDZoK3FmVE9DZDZQaFY3Vzg1UEtyTHBCMHB0akJuMzczb3ViSHdiNERkVXhKVlErKzdaeFZ3MzM3TDEvalBEMmV4OVVUSHJ6K2Q4ZCtjaDZkSFdUWGxjVDE3NEEyNVFsNFp6Ky85aHc1dU8zUHZyRjdCV0hONDQ4TC9uT3BGTy8rK2l0UDIySzRISzRmTUoxbDEwd3FNZGY3MWNUQjhxS2g0Nk1UZXo3bDhmWExGOVduNHlTa0gveGd0S3BZODQvc0tsaThlK0diQjN6M0lTNW8vcis4NFAyWng2dGkyaEVWY0xqcjdyazNCTy9ma0lyZjhkLy9xblZxM3RPMmQ1NTJ1Mm43Zi80cFViTjhmWFExYWY4OE96TnhiLzZhdWk4MDk0ZFAvREE0Lzk2NnNiMmFGSG41KzlZTmJndVQ3cDAySzhQdjFuNjVveG5qOVI5c08zejVvSnozN2p4aE0rMzFVUTFUVkhrMEpMckJuMXIvdTdrMHdmODdycnJGKzU1OE53SjhSRTl2dnpnOVllcEMxZjg0Y0l6ZXU1U2tsZXYvUHZZZ3QzUFhQTFZ5bmNhdXZWL29iamZ2cGRqc0R3RjdIZitnQy92ZithOWM4ZHZ1K1RRMzFaZE8yTElrVmZmVzFjMyt0NkxqdXhKTlNHSXVSZnpCZmF5ZlcySkp0Si96NHZuN3loNVBSQzQ0cTdDNzFvYzU1NTh3aGNyV3A2Lys3WUhmN3RMK1BVMzZ1SlhqdTljd0hmWWY3NFhGOHU4ZzdpZGM0NUVUem5yc202ZnZiVjk5dERlYjkrNmZjSzQwT3lCM3pSVkJjUHh4TkxsSzYrOVozYWZHL2JWblBYTjA3VWtjUHZJd2R3cnAvLzExa0dKOHc2KzNVZ2lzY1Q0MHcrL2RadjV6WkdyUjNSKzh2cW1LWjVQcTU0N3YwZE4yYUNkU2dqOEw2b08yNzMwemt2Mm5hc04rZnJCUDQ0OHUrZU9QeDNwTTNuOUpkMy8vZ2pBSnd1OHZYY0ZPaGFNMzNNNXQvdU5saGlwdU9Ga096UnkvNTF0QzU5ZU1IZGgxYmRiWGpycis0UEpHOTU5VGozeHMyZFdSb0hpSmRlZXRuK1QvcHRUKy95cWZwR2ZMRnY3eUtieXo4ZWUvTStXMXFFSC92cGtBM0Iwem1mQmloWFhYSHBSOVh6SlQ1TDY4b3BYbm0vWlVrWE8rR3NqSVF2SG5YZjhoeE52dlhUdjF1TTEzNjJpUkpJTjh6Kzg2UHRQSjQ3cCsrWDJXbFQyck92Ty9rR1Z2bGtsZTA3N2ZzamtUUStWemJpMTZkdmxZeWFNRUFmczMvMzJvOVhsZjd6SWszNXVhUDkvWG5EOGhTTUgreDdlUDBZb1AvK2JQc2E2QzQ5OHZCWXNwbXA2OGJETzVCZUZteXNIOXZEYzJMUnR4K243N3g3NFg0Y1g5djVnMjlvRW1LdDQ1cUhYYnA3ck9YVmEyOFdyUGJmZmYvK1hpWG1uelB4NnhIVy8rbmFuMmVDLzViZUQrKzE3N0xOZys4MDNHWFBOcTZNL3ZOcDBlclVaRjh1aXM2WmRlRjdMUlQxV2Z2L0lzTk8zWFBSWXQ2MURYaVV0MFFseGYrdHRUemRjS2ltcmZuMWc0c2tmMWw1N1R2LzlMMTU2NXdzZlJzL2MwN0oralY3bUt4WHVQcjNnU1B5anEvdC8rOUV6aTgvNWF2M21JUytPMlArei8xOWJTcHZXanIxZzBFM3E2Smx2VC85OHdNWlJrejJsWEdyYWE4K05ITHo4cXZzZWVrMjk0Y3Jvc0tiN1Y5L1FIRjU4NWIxUG11dnU2ekg0NnZ2NG1tdGlseTZiWFBUSHhUWEhuenp5OVRGWC9YemJzalBiYnVsMjI3SVA1Mi9xL0hwZlpHaFJ5MVhuN0paWGI5NzI5TVlINC9OS2JyNSs4b0lsZzc3ZVZ2WjJLem0xeDI2LzlOQnJ4NDFaY1VYdlNXWGJXeS82M1N6eGhZRjEvYTYvWXZoWFc1L2V1SERoOXNZcnB3Ump5dHhMUm45eDlWdVB6WjNkNTUwbnlzYk1mWDN6STNNK3M5YWQ5L0Nrdi81UTFQaWo4ZFc0aS9rWmJYTVNQUTB4b3MvdWRrV3Z6ZGV2clh2alFMK25HaThac1hUUE5jOS9mZndIMjF2V2IzMWk3VDN5ck5KcGs2WkFCRG84NUxySFAvdnhMemVGTEh0TnIzMXYvTzM2anBjUEJ6Y1BUMnhydmVrbHo5REtseStPREkzZDBISGx0T1M0ZnczcE5Dd2h2bmJDcVorZUlQLysxTm5HUEczcmh0WkIxNWF0Yk4wMVo4VUovR3Y5RHoxNHFPU040YjZTdzROUEdqamx3MmNMT3NSZFRiNC9mdFg5b3c5dW1QN01pZGVXOUhwL1MvUDlpLzByNzI5YzZaOWU0UytQMXMyZE4vN3lnaGRlKy9TV3JYK1RmeGg4YjlIcWx1MWxUNzJZTFB4RFdiSC9yNWViZTRiOGZZVjFqL3JZY1I4YiswNnkzci84WUhqcDQwODBqbDAzTmZLYnk5YjRwNit2N2J1cWJOYy9hZyszbHM2dUhQamczaTJiRDdkclUwOTU1ODBsMTc3eTZOQXJOeTR1KzI2UDNlOVp3M1A1QmJmZWN0c2wzM3krb21KVkxPQnZhbFpJNDRyUytaVzFyOVNOSDNOYnlmR2ZQL2xLeDU3MzcwNVBmcXVxMTZkZkpkTktwRWVQUDdTM0xycGh5dHdUclFmMlhDVUVWKzI5cHZpVHdmSzcxOTcrMlUrOVQ3bXZhazUweGx0WFNWZU5zS2VlY1BJYk0rYStPT2JoRlIzY3dUK2MyWG5pbjNmVWozd2dHbXlmWGpMazVCSER0eno1VE9LM0cwODlZL0h2aHhkK25mckw0N05qVlZwZFEwTjhhWDM5N0RLRjNIdlAvRG0zVGhneHRPZDd1enNmMFI3WS9IeE44dkwyRDIrOFRCaDJWLzJFbndlT21Icm03TFc3eFhkdi9LL3J5bTd2eGRuOTcxcSs4NGN6VHF5ck9ZWFUzdFM2c20vTDZXR2Y5OGo1MndzM2pHdTFMcGt4cmFMMHVwc3FGbnlhK3FhaDlNbjQ5YS9lOThMY2doMi9tM0hsamRXM0REcnBVSHJIZHZPeDlkWFJxbWhkaE5Ra2FpdVVwRllSRGk2NHZlVEdLeTdxM1RmOVpjK1NROTlKMDdjbEIxemNQbmxtOWRiVHJoZzZjMm5MZ3JYYkp0N1hGci9nWnVtQjByVnZsWDcvOXE2ei9sRlpXalR4c3FheHd1cDNIeTM0KzlhUk0vLzBQdGU1dVdEbnZsYmYrMnVhSS8yK096THNvOG9yYWh0YjBwOE0zN1ZHdWZoSDg2YzFSNzdiOC9aTFd4OWF0NjQ2c1RSWnJVUVM5Y21rRWxBV1ZsWXVtakR6dHZGWEREK3ZZUEhEM2M5NDZaYUNQL1VvcU50VlhHZTl0S3ZubDQvT0xWMTFreDRrRFZldFd2ajhVN1ZUUDV3VFhYMVhhV25uaVBaMDg0NStkWnZPYWxqakZhVEE0ZFZ5OEU4RDloYTkvT3I2TDN2OW9lUy9udlZzaW9aN3ZkLzAvc3VOalY5T3MxS2puMnphLzk3YnI3UTk4dURhNWhXTlMrT3hTTHltVm8xVkJhQVNreFpNdlgzRzNlTkcvcjZ3ZGRycStFbWJUOW80cUxub21zWXIvcjd1MU5EaHFYVWxyUU1hMXIzYzhPcW5ueTMreThBeWt5dVFpa1ZoOU9yTlg3ZVdDUEpHdlhUczFGRFU5QmNOS090Wlh0S3c1b3JkMXZndDZUMUdxSFgxT1p0NzEwVlhmMVEzYzMxb2JMOEhWbjN4Nm92V2h2VnIxNjFzYmxvUmg4cXVKaFloYWhYUjVzMzN6NXc3WWRhVXE2OGJOdjZhTVcxVFc0djVudkdOblp4WXYreTVGK1JSWkd5MFluem52bUdkVDNtYWpVZGI5OGRURjQ2cWU1WnY4UHNiZDVZTzdEbDZTcUJvVlBGbGN6WVhEeWlkc0h4MDQzV0RSbDR3NWlJeGRkMmMxTFBUZnAwYVBuV21aTFpmTTJmNTFoZDN2dkxVOHh2djNmREF2YzNMR3BiRmxRaFVFRW1WeVA1Wjg2dm56WjU0OS9TYmkwZmQvY2lwZDF6NGV1UHJxNHlhVncvYVAvSHY5RzRmSlo0VFhWTjh6WFYyeWlodkg5dloxQ3dWRHh6WCtlaDJ1V1g5T044VWVjcUZoQlR6SmQrVnJJK3VueUwyTTl2M0RsOGNmdlBHL3NMekw0MzdidENUMHdJbHd5cklRNm0rbzIrbzJmSHM4MDgrc0xibHZudFdWRGRXUThWYlRVS0phQ3lRcUpnZm1yZndsam5UYjcxeDlMcVQ1aHpaMjFSbjdsN2ZlSGhIOHdkWGYzZmhwb0tONDd5RDE4MDQvZnZHYVQ5MjNySjY3MldicmRFRCtHS3VlRkM1c0tkOWRJbG5kRy8vbW82Nkh3N1hMRHZ1NExZVjZ1MlhmUG1qUHZUdlRjOFc5RHg4ZHVYbWE2Wk9iU3BPNm5mOGZkV3NWNTU3YnRNYVkrM0taVFcxalhxOFBoSDFCMnJxbEhBa0hLNllQK3YyK1hOdXVmR21pdVVYTjl5eWU4Um5XMGIzdTJ5TjJDTmVxWW1IWDlhL3VvYWN1MjVWWTZKMCtxRE8wYnNNSDdmVDl3TnBJWUdCemMzaUtOL3U4clBTUW1wZFE5T1EwUzJKcUZJeFd1NVlzS2w5elhmWDdkcXg3czdFY1ZMWit0SFBqazc4ZWZha1Y3WnZmblROaGxYTDc2MnZxNnRPTHRVaUZmNmFKaExXb3FIRkN4ZE9LNXM3NmVhYjViTi9NKzIwY3grWVVTYVVsUzI2NnZobnhva2wrNU9OSDJyRGVtMm9qczg1L1phK1pVWGVmYUo5elhHbVZHNXNlZXBpbzJWUXM3Zm1qdjN5VldQdTZMaWw2dldsaE13ZWV1ZUw1NmM2NXhldDJmSGR4MDBmSHhjcVh6L0NiQ2g1M1hmeGk5dldtdysxTEw5M1JYVnRiVjBrbnREOFN1VzZlS2lHeVBPV0xKNDlhKzdFc2VPclR6cnVqaWxuZnpIZE0zL1I4aW1YbmJSeFFHaHF2MUR6KzI4OVdmaUtSaWFlTXZYbFo2ZU1LMXhVRXRoaDY2dERkNzIxN0k0dEExNStmM256aDV1SXA2QTZKbVBKZGVjNWR4cGZmemY0Q2pHOVpYK2ZBV2NVVnRSdE9yaHFZMlBMeUl0ZWV2U2hKOWExM1BmQTBrZzhYaHRSRzJwSk1MUThIcWl1YTVreWQ4R2QwK2ZlTW1sODgwVWpwWXZQL09lSXI4eEFxR240QmIvWisvNmNrK1QxSDExY2NIcDdoRXdjTU8xSy84NmhOaW5aTS9IOW1rMTFkOVdmKzlRdXZ1Q3VuWUdPbDhiVk5KeTFUWDBIcWpieDdEdXE3MHFPSGRSb3BZV2Q4LzBqN21vMTM5MzZ3dXlkMy83MjJRM3JuMXI3VU1zejhVVWtYa3NTdFdwQ2pkU1RTTlhTRjYrZkc1NHdGV3FabTlyQyt5b3VPbVBybFFYUDZ1TTJDbjhhL2Exbitra3R4ck4vSGp2azlTaVpOT0RPT3VFVFg3czBxbnZGeXcxcmFvU2Q3NmIzakVvUnE5eTd4VHRvZS9wZ2JDZmlQL08yeUx6NTYzNVlQMy9FMTMwdmJSczExZHF5L3RmNnFGZE9HZkxDaG9jZmUvQ0JCemZjSjFmS05ZbWdXcDJzclU3V1IwczNkQlplUTI2N1kyTFpETitUOWQ5TXZyVlBpVHg4NS9MQ05ySDZ6STdwWXk5dVdsOTMxK3ZudkJFbGt3Zk1lSzFvNW9jdmwvYjByTjZpRzBicTRwclJsdGJRT1BwOVg3djlMdmZ5SmRVN2x3UCtJWlBQZmFEeGgzVjJoOWxjUDIzTVpXTlNyY2JvcXM3ZHh3L2UzTFpodzRPcm1oOWNHZFVpOWFwYVdWc2ZiOUR1clptNzhyM0xicG8zZDhiTjg4V3BHOTUvZVd5NDMrQ2JqQjFOKytzMjc5azdZZGRJcjVHVW9rK2Z1VVpSS2k4djdSaFVYTEJuNUREZnZwN3hOVzNQSHhRQkhkYkp1bWpvdWtRTW9rdVNJZUVkRWFwSEU3NTFFMWJoV3BMZ3ZZRnZjTHVFRy9FWHdXTTYzdFNkTlZNQ2tMam1nLzBpZk1PcWp0dDFJaG9pM1NuQ0RrQ2xpN1lJRU9rM0hEUWtCQ0VhUG5vZzl5WGhLVVBNM3RBbFBic0RDREVjWXR5WGtkbkh2b21vTS9ZUWtTSHFraUZTYktKb0dPU1hYZzVBUmdzY0FSeVUxaHcwb3JzTmVNbkJUM2RscjUxM3VRUTZMdzcrRWM2eURKdHp3V1ZacCsvd1I5NHR3TVNBT1hjcHJseUV4MERUaFJDYkV5MUVURm13NFoxbGVyeWdETTVyQWh5Zmp4ZEZ6aEk0d1RKVGhFTUNZWWZPZEU4VjdtQ1R2Q0IweXdUZG9GNUJJYUprd3BJQTJ3VkNCSXNUQklPM2lDQUFCb1AzQUFCR01zY3g1SnpGV1l3aVBPdnhXa1QzMklhdG14YTk1K01zQkdhTG5BRDRPYUNKV0tBdEFXN0FNc0FGRkZTQWdzM1p4TElCbGM4RVdYcE1DM2JpTDl2MENUNlB3U01CRnR6a0xJOWs4VkthVUpsU3pBS1RDOTR4UEdrTCtEQU0yM0JFSzdsbVF2ZW1kZndTOEFnUW1BSXJScE5DT0lKSVVJcmdLYndvV0FMZExsS0RBWmJCNkNTQTRoTTRRd1JSRU50QUk1U1lKbEplMUxxQmUwRFVTQ2VlRjRFT0VZa1M2WGxKTXFtR0JaQXNWUWNjOUJISHF0RnR3RStSYkR3dGNPRElvcWhUQWh6Um9qdHdodVRsUVZVY3o5c0NVaUNpUlFzMlQvMVFsN3hwUFUwOEFOVWtQaStRd0FGUHNPUzZKMUtJc3RZbGxDVElIWFNOWHFxTE5CVG9raVdabHBFbUVtZ0ViSXR5UjgrYTZIaUVKN3lkTXRGdURkNUFMaEM5ejBCQjZpZ2NIWlFLSkRIbkVrM2Q0RkFUSW5HdDJoSUJCTkZUdU1QeTZDa2RGWWZlZ3QrQUhIVmk2RDU0YjNpb2lQQUc5WDJVSDJBRXJyMG9LbkI5RXdTRmtqSXdUaG5NQ1N3YmlCYXBJQkN2NlRFbFRxUkdBUndpZlRiUDJaSVA5R2tDeHdZUGRnYTJSc01RQmp0RDVBeU9SMjVnczRWSzl2Z2szV1FoQ1k1N2dIL0tQQkpBSTQ3RjdJNEFZVDZmN1RFSjV3TXVKTEFMM1FRbFdLTFB5MU4zWnhUeU5oRWtHa29sZ0NBWnVwVktNL05qL215QXV0QklkQXpLaGdELzdCeXZGd1E4YnJKZ1RUMFYyRStEcXhIQmswNUpGbWNMb3BYMm9laFJQNVlFMWdVQ1JCclJhMmdJc0pCc2cvQUdtaXVZa3dCV0lLQWRXSUtITTRsTkE1UGtNeVVCMTNuMGZpZkFvTmtJSEp3WExKL1hzQUJJeWdRNWdJSUJCTmdCNEFieVlCTUhmbWY0d0VsRTFLY0ZUSXNjU0pXam1nWjhnTXp3b2pVSnRrMXBBdHcweUlEckMzZ1BsQzJBRHdKSHVJU21BaGdJejhOSmk3bU42Q1lHbmhjUUhsMFFVR0dBUldCaEFqekM1a1VlSmNDTEZnOENvYWRSREQ0dmMxOGd4TEpzbEFaZzlxWjlwczhyT0k0cGlnTEhXTWJnQnpFVS93RWFnN05ackFjUEJYUTBScUlmNFRvSFFZdm5nQWVSRjJDZmhSd2JTQkFzWUJ6bGJTUVNCR3FoYlVNWW9mb0F5aXdJMmtpZjVBT1BTb05OQXJzR0p6S2hJeitXSWZBb1NnZzhObzBkSEkrQU1YZ2lVR1NHdWd0NExSQUd3UXM5bGZvZVNzNUNOVHNoaDZNaDJJWWJOcWd5WlZpaTVHOUh6L0MxbG9vcG9WUXFTb3ZneEpiRkVnWmFCa2Q1Sk1nZGhsN1VxWWd4eXNEa1FxTTQ1MFJ3b040U2dYbVVnRVhGWkRIVmNqWVBZVjFnMHFkeUZ5Rjh3MW13TmY4dVUvSUJyeW1oMVo4Y0JVRlM4SnBFdENrQnpHb0JzOEJPVXVRSUVsVE1RWHkzY1l0QTg1QkFuUkcwQW50c1E2REloWXlEQ3Nnend3MWJRVEtZVE5LN1JxVUV2NzgxQ1I3bnNVY2xJWUxDUWFCZE5Md3BrREROZnRTbVFIcE9qa0k5RXNZd2NiSWZ0UVVPa3h2Z05taFlSTHdXZUJCSGJSRVBVek9IRjVNcXBHWUNwbUtJZG1raHA0T2J0aGJ5WmpvbE5wZVdsdktZaG5qd0tqUkFNRndHZ1ZFQzUxRXpLQUpLZ1lVWkRHT25ZOWh3eHVLWXh6by9PRW9jdFZDQ0VDay9QR1JJUHAxS1NhTHBiYmNFdjJpbEpDTlp6SG1Kb091Q21mSjZPY3hDMU8yb2U2SVhVQXV5MkUrT3lzQXBLYkphWlNVQjU1UkRTSzB0Q2s1dFJJbXhtQi9wWXBvVE9aOE9TckU0dzJvR3l3TjJ3UWoyam9LdzZ2UHBhUjRCV1lJRGp0QXc1b2dWL2NmS0lNekR6YmtWQ1JNNWw3L21pb2dxMURiVGNDSGFObThhWGw5YXdHaHBtcVpOMG9WSlNCVmduQnd2WnBFWWhsTmhNQU55MzFOOG5HdWlMaElXS2FtNjNQaWRnUVRhQU5lR0lBM3U2ZU5NVUlEa0wwcURzREc5ZXp5NlRYZzBiMTYwTWRvSVhlblB2aUZVUUYxbDRLNW5OdEY4UlZ5TjRHLzBXUnNMVlhSZEVLZHQyNFpIOHFTSUw4MTV2UkJSSWNEVE5NSkJPaE95WW5aZWFJTE1sbzVheXJ3RUx1MkJha1lYcldQc1FlR2tRTnM4aEMyU0JwUGpta3ZTZ2pjRlJRdWtZalJzanZDU3p5anlTQ1hVMEJ5OGpGY09TMVFJRDBCcER1T3VJTnhOZHRxSDFSZ2tXTkZkeVpBQ01FVU84Z0xQRS9iYlkvaGEvWmJYeTBNeWF5MUJ5emVJMStUVEhxQkZkRkc0OGdORkFjbEdXbkl2dWR4ZjdudkkrcGlrRFF5OVhiaEh0OFZnanJXMjRZV2tMVURPaFZnQndyQWg2aEFzRDNuSUltVFBQaDlOb0RrT2hkUWJ0Z2Z1UTE1aE9BVXJsdzdYV1VSTXlKamR1SzVhb29ITTU5VjlrQnVKNUFXL0ZxQlNFRzIrdlEwYUJxKyt0eEFxSkpIM2V2VlE4ZWdDdzgyWUdVdXpMS3pkb0xUTGg4dTVFY2k1RXFGcGhBWXlxMytvZk5oNVRKZVNEM0I2MGh3VUVEUmJnQ1BDT3NRZENXNUI1SVBxbE9mMGZuZnhRcjRCSVJZS1I3U0lHODJQSlg5T0Z3UmE4MWtac3JKZWd5N2c4Wmxla0w4M0RmNkhzUVZxTmF5bnZCRCtwQlR5Qnd4NmhoZU9wY21WMFMwNGdIaklXVkFYNlo3YysxMWZIaThWUDFSaFdhSnlsaUhHUVl0aFlGVEY5eEpQMG1aUm9RZXQxZlo0b0hLQXpDMzRPenFiMFAzeS9CbnFTeE9MUXlFTDJZVUp4VHEyWHdaTkNQaEYrMkpzUHRnR3ZEU0ljMkhRVGh6dnNsa0FoU0RSMWgvWDZDTEM4RW1zMHNKR0FMS2taRkJNaERZeThOdkVNUURVRWJTUHh4NEtlZ0dzWENrQnhJVW5acjRsWGZ5ZisvL2NsMEhjL2JTaWwzUUdrODRoR0dVNjZ3QkZJOXZTdStVMHJhSmRYdGxrZ2ZWaVlxYi9oK0tidGg0SWs3M0o5UDhVQnp0QkhEYXl1SkJkblE1SFdIdFVVSWhpOElvOCtvVklZNCtEaUVMVjJXQkVRbm1CdkhYVWkrR0NkY1ZoNUZQdlZMa1VDcktBcFBwMHA1V2lVZEN3b2MrM3BUYS9tVXlLMkczRHpWYSt3TmZhdnFzUXdRaFFjcG1wMHNMaW9tWlIyT3Z4a0tJa0RlclVPT2pnUVVMVitTdzY2aEZSM1NZekFCMFZCZVdtbExZc1Uwd2x4VGJUNDAwVDJ5ZWxPQW43WXB1VWRrQkZCWFVwOFZsY2NRRkhwU1pobHdndGowZXkwN3pSVmd5TkJMYnRjQXhEVE9zdTI2Y0w3U1c4N1VrV1FRZ24wS3NLUEppVXhWdUZyYUxWM3Q3UmFvaHBXamFMb3RmMEZ2dmEwajY3ZEJjUDlidGw2YnpFSnp1SWQvU0VRcTRvbVpZZ2FSS2Z6dXpHMUFWSGhOaFdlWGc5bGVZRnllQ1pMRjM3SVd3SVFDQzVGWFZZSG84TjNtMWpEd3J0RGxxMmlMR1FIOVZlSUpYdTJBOXhBQlZKclJxMUpGRS8wWDJTQ1ZiZVhPRGQyNEZxY1B5SjlXdjRUL0sxTmllTHZCQUJPVit5emVPUWlJQjAxMkpGT0E2bEZrOE4wcDBnVU1QR3ZwRG9hWTYzaXdzaEJxQnBRRHBnL1MrT0JrUkQ5K2djUkZZeEJWWFNxRFpMcEpNditHbjU2SUFQR2k5ZUhGWGlvV1lQcUlzNmRESEhvUUFLU0NETlN5WVFwcmUxUVJKQkFEcTFmZG8wRTRscksvQ0pZRmxHQ2dtUXBLdzVXcEtlc2lSL2dVRDVUV1BDb3BNaVlFQk1nd0JFc0NLSTJIUjI1Rmh5eW11ekhNcDZWb3pzRUdTeGFJVkx5MGpwYWVLakdDZ1BjSTVMcDJuZm8rczhYMVNhZ282SWFaak9SM1I5YjJuaEtNaStoTXBKZ2hKV3BPNUhZd09GQVRHVWpTUWR1am1EUjlVYWhJVXdZcVRUckpBemNPWmlwRWNWZzFMb0FJU3VGM1FBUFN4V1lHdWI4b2pNTDFIOTRCSjJSekdBOWdMNUp0U0lVRVp3QmgySVlxcm52WkMyUFRxalY4RDVCQkFDMmNVaW9qTVBSTG1BZVp1T3R6TWtFTmhGSkJibkdTSmYxRzY2QVFOT0NjU0R5aEdwNFFBYkJYc0ZVMlF6V2dPMUlaTDJaTXJtZEU1cTkxdFNTVEVuZUQxcDA3RTNFV1VFMW1EYWhtOHZWMFNFbE9nVGRKNE9EZ2p4U29BUEM3UVVEL1ZNc3REVFZxaURKcHRIV1hUZ0pGcDBSSUpWQ1llOU1WVHBLUkVrQjEwTFRySkVGSnFPcFpRM3BYdDVueTE1T04yQ0FPU1RwSlJldEFzakJBQklsVFNuemRha1I5QkxDbFBOcmQ2MDRRWFRGa3dEMml4cy93MlM4aHQyTzhDMUNwSnBuRU40ZmRpV0d6UnppTkRiUXlvSEUvSlp5ZlF1bTAvNnNidGh6UWR3YUh0ME1XWGFuQzE0a0FnbzZFMGRaTXg1VWdXMlVBS2J2Rkk3aUhBVWxoY2t6YWNsWDNLdmgvaEV6dkJZNkRPdFJodlUvVkFxUWJxRmVrK0E0Q0JBVnZiYXRnQkN4MGtWWHdyRzVpMHU4cVNnVmlHMjZkRkhkV0RSeW9GLzZSMGxYdUpQV2hMbjQzUVJaNWRZRVh2U0VESlRkaHBhT3FpeUMxb0xSM0VwZ0dxbk9BTXl1MCtBU0poTzIwWHRiVzFRNGZIUWRBQXpndUgxb3FGeFVCUWFwZzk5UU9Kc1VHREsyNzVYc3NFSlRRaW1kUHpxc2RKUXNvTHZnNmtCdlJ3MGgxN2RZM0pJSzRZZ1lNVG5nZTRaK2hvb0xpQnNndjZ3SjRZeUFncGREak9HTGFVOE9saU1oZjVtUVVJUlV5a2VOTzFKQTRVK0U5c0ZNRnVmYUV0UTRmSUdaaFdQRjZlYnNFL2diY25rVE1IMHBNQWsrRFFVYkNrdWJkTk9GMG9wM3ZKNVlac1Bxak1SR3g5c3h6bnNMcUJZc2pqc0szQU9BSkVjcWxNZEJPWHhBck1waUJsZVBaM0NrUkFPRDNrUjZrOE8zZHFBWmdpaXZoY0tSRE5sRzJrZFNrVVJtekwwVUk4WFdqam80V0VyZ0JRSmRQelFHYVJFTHgxcjJEWjJjbHhLOElBY1RBZ2lFdThsS1J1TVBXVmdVNGNEWXN4Y1VrcXlUWi9rdGJ5R2w0ZjhLdW8rMFN1bFRRNTB3YUU0YVJJVitUUVU2THlROWdtY0NaSGRodmNtRG9wQWhycmdoWEtaem41eDZDTGdHamdkdEgrbUQ5d0lwd2xndzVMWEZpRXdBQ1FJRzRLUHMxSWtaWUtEU1R4T2k0bVFsaXl3UXg2NDBGT0M2SUc5Z2kvRld4SjBuYUxQNDBzWkFyU0QwSkNtb0taSWVTRUs4K0NWQW1ZR1NNRzJWMEpYb2tXdWdGam85QU9zVVU5N3dOVXNEOFE3RVZXTUZpRVE2SE5zTUE5QVJieFdLbTM2b0FjRm9tQUxCdzBRME9naEhnQWo4bWljS1dKaXY0QWpPTTQwd0c5RmtVWTFFeEs4QkNWN3BpM0JzWjZCSTFPOEJzR2swaHlPWkZJK29BNXNUaEtocCtCeElpdEJBd0tBZER0RmdISXdMRTYwZUJPRUpZSW9NSmVKWHVnOFFUczg1RUV3RGdxUFRnNXdxczdSWVIvMlFCSWRrd01TN0lUQUNnU2FWUVRnZ2drQ0lYRnNza2x2ZUR5OHdKcDFBWUVBLzFCYVFLUEw4enprSVdBSXRBVUM0Q0VpZ3dEQlgxQUFPTm1qREFJa2I0b2xRV3pPaFZUYXh1RUJnUTdhb2lNeGl4ZmR0aGlEaTBHbm5FVHdlWDBTSFVwd2JFeUZJWlBEa2FiQWVYeUdEVzBHc1hIYUNxbkZzbnk2QlJiSTRlQWErZzRjem9xMjVUVGdnc0FlR3VBRWx0Nmdqd2hRM0p4QjNEWVJCL3JJbkR1M2djSUtvZ3FYbVgxUVFKUVN3MGFhSVVWQkpQT2tiZXlEQmNpbVVocXpLVy9Sc2FtUkZuM3VReldPSTg0SUR2M0dhVG9kaEd5SFRXc0pweDBDby9kQ2F0WWhmZUc4SC9GVHVsMUt3SUlCSjBSRlBaM0dkQXJCQnpRS0pvL2xHekZBN1FRaWlROHFXN2YvQnkxeGJKNkREelF3ZlBDTVEvWVF5Umx6c0VrVG1pSWN4cnJad2lrZVJTbUtGcHZXOERqVkJ2V2p3a3pvdFd6T2hESUZnaDhIU2lNZUcxTytJSUI3U2Q0UjBXYW55NE9PRWVwU2loMU1CakpmbWpnalFEcm53WW95eXo3T3FBUVJPd1RSblRxQXlEMTBZTUZaT0o0M2ZUN0RzczBVQ0VMM2NHWUtxZ2FvdVV6QkIyWU1BUWpTZ0tXM2xRd2ZrS2FEVVVxM1JWakxLMkNsQndpZ2NtSVBESG5LUDZIMjV2WVVBcHVEMlJhTjM1UnVtMmMyd1BIUWxlTnNIcU9hamRMR3dnU2ZMRURyRFd4ejRQNFFzQ0ZjakpiR2xpYnB1QkNGaW5OTkpnbDgxZ1g5TGUrMHBNd3VKSS9qSnRSV0xSek9VcXA4WHNmOFJZT1pKTllKdXBjVElYeEF1RVFuNUhnSm9vRUFXY25uNFNFbFFIT0xEK2VFbnNPbUZIa0o3NXFmWXo0Y3hjL3prR3FZL0NsWnpqeUdpUnVmQ1Zsb2pnSU85QjI3cDRHQjRQTkwwNGNCRWoxWTROS2dGeXlVSkJNeWdRRE5UWnIzZUcydkxuSFdLUFBpd1g2Zk8yazB2R2xHUHgyTmcxUjFaLzdFOUE5VkNwZmhINUNCYWFYeEFTelVUbzVSMHZrZ0MwMVF0S1NoUlVsRHdjV1pac29Ic3VFeEt2TFFod2lXWWZFcGs4ZVkzc0UxUys3OGpUY3NWOTYwZnMzZ1orVHh2eUgvYjErSzgvcy8vR2NIdjRoWE9RYjIveFF0eWpHdXdneWRTdkorZE4ydDVyN0pCME82Yk11c0tsMVhNamR6ZjZqc0hYd3I3RzlBNEk1Qy83RzdxdUxRcHhMbnE2dnNNc0JWOXliOVV0d05MbGNxQlViLytzTzV4cFZJQmd6OXN4QkdFUDFMbER3dDBHTndEei9SVHVoR0pRZXpzK0lnVUNqby9PT0U3VWVHMVN4c05WZGt1RWVXS2JOYVYvUU9YeFNyRW9abFFKZXpBKzdLdUlnZnFGZlZZLzBWRFFVT3lHRlBGcmlhdjY3SWlKa0FFUVEyZFdHQm9pZHlXRkdDYXJWMkxQSVV1WkpFVlJKaDhQUFBLaG1vU0lXbUhpVmVTaDY5VC9lR3RVZytGd2hDWnJkUlNCSDFLQXhLbUZFZkNrY2orUVJRMHNNSzQ0bngyZVU4UmVrQ3BhaENhalIzQzZVdkdNRjdERmhFeThmZ25zZlZVRGltZFQwY1VxSWFjY0hubm5kMFQ0Rm56QW0yQkxVY0dpbUVjRnhqSW9HcnNFekZuTUhBSk9ZNGt5SUhJdEg4dzJFNWxuZURra2d2UXN6amN0RXpmb0xSQ0x0d21KTGpPUkNVY0RpV2h6OFlpYWc1K0FKYVZGV3pEaG9PeGJSODhIQ0grWGxBcFY0T2xxTmxOTTQwSUVmY3FBQTJMWWNUcXBvTEFBUktmN016cUs2Y0dLTW9WV29FRE1wWlY0UFJ1RWF5QWtjVENOR2x2QmdWMFNJWi9ZYTdCTG1BVW9PcnFrdWRMQ3U1RElIcGFpNEdWRWJJTDFlN3EwN1FpVVlpbWdOZERtY0JLeG1wNFp0b1JBUFJ1UEhBT1kzOFZWV2p3OE15M0E1bmNXZE5DRmxGRXdEQkJZQWFwU0lSelFCRzhsQ2xhanlxeXFGd0Jqb2pSM1hmMHRDbXlVaVQ2a1FzdWdoWEZVbU5CY3hvSkN5N2pPWjVHRE04VFFzRm1SckRsVFZhbGcrTm1oUkFWVU5SR2x3VmwzZUY0bUNoTXhNTW1ZQTE0cWhEQ2FreEZodkF4U05IeGVhc0ZzQ3VJQW9RR1RjRVNTd0RUVldkQUF4MEJXTlJ3bGgyV004SzBnVVREa2EwUFBmeUp6RTBnLzZpRWVldkZJLzVva2pDWVpVcGs4ck1ZVTloZXFCWXFTZGxFcC9xV29HYmhjSWhjQ1ZtOW81dEFQc1JTcm9jai8yM2Z5UEpZblRZc1M0NUhGTmM0QTR1NTdvcWdYOFp4UnhVcGpTb0xLc0JLdGx4ZXlTQTBhZVFxb1JEU2pSNmxPcTc0a2NHQ09PbUtxNDZDVHhIMFBRVm9OR0g2cWFLU2grOEI0VUYyRlVsVTRXNGg4S1E3S2lweUltb3kveXhDSENzTUZUbCtCa2tIT0k0a0pKL1FnbEVhSjRHcUV4R2NBRlk1RmpFVllQaldHcEdlbUJWQ3ZwUGwycWpDM3I4R1FySW1pckxySlJBRW1UcVE1cExONFFIRkhvMDQzTHNuQkxTaUt5eFB6dFZhSXhoNUVjVXg5ODFUY25GMzRXR2JFMFVxZ1Q3WjMrOUN1ZWlJRlgyVnFiT0E5RUZSYTJHTkMzdnJCS2lCSVVqNEJhUVg4RUVXUmlDaUJPa215QXdrWnJvTVpTZnJXQWMvRlZVWFdHS0ZLSTBTQmFYSXhpM1lObUpzU1RNQ0lBM05OeUVXVzdGdUE4UUUrQzdJUVh0QmtobStESGN4NDZGdjZzV1FrR3FzekFySkNIaXlkUUhJK0U0eTFIem8xVEFFQ1dnRWdFaWdFOGxBcnZBdjhOTFl5d2Rnb2tHSFB4UmtKL2k0STlIL2gzOFZkUkhXR0ZOSVZQM3JrczQzbngzRkFPc0ZrRXJVS09hRWtTaGFFaDBSTlpqTHBpZ1AwUXRUMFg4VEpDRXhDSy9hUHc1K0FOQU4xUkp6R2VBS1puZXIwODRHK2FvR3RJV2xmRitURlZRdkJyZ0IvTUEvQTZSU3JBeVRFT0FHcE9wL1JBTVN2OG1malIzaWg5c0thbzYrT3VTVHUxU3BtZ1FJa2tXUDlVRFdsdFVYcHJCSC9CakdFSDU1K0puT2UxLzVCLzlTa2F6SXZMUitPY3BqUDh3R2xwVWs0TW9MZzJSUk1NTjhReit5akRESDNNUzV2OEYvd3kvcS84d0svMXJqOEpQclVxajdESDhFZmtvL0VROUJ2NWpFZURHZGtMeFk1M3Q0TWZPQUJkcXEvOGQvREV0aTUrNkFzcUpSdkZjL0w4b0FRUVpDcEpjL0dxSUpZYWFHbWNMNGdlUk8vZ1gvRGV5L1Ardi8veXJIQnRnREl6L3UvL2Z3Zi93b3Ewa09kQWQzQjBTVGxqa0l6RU5VdkRmV3B6OEp5dmgyOCtoZmdrVm5STGlDRWxHZjdIc092b2xRLy8yUXl3ZXhJcGR4V28vdlB2QkNNczNjc2pmUFlZNTllY0REYUhlbWxLZFExUW8zQzB1US9tbEJmY242SGJIR1NFN0JRNVdSMGs0MEJOck9pSlhmYy9GQ3lCZFk4Y0tJUVlTcGhJcVB5R09sVk5vZnkzVXlDSC9rU1RyWUtudlFmRVlPSklFQU1CUThGQmMreVZPNUorcTVYQ0VWQjUzN0ExeStBaEdZMjN4Y1RHMWl6UUFSVldQT0ZRTHBBcmdIMXZtQjJPWWRKY2M5MHVhRGg2T2xmZUR4ZUNSeUtINHNRbllYN3V3N3pjOTc0a2Njeld3bi9ROVhCM29kZXpWUlNjb25RQlZyaWhRdWtXUFJWNW45RUNkODc2cWUvbXZqb0g5WVBRUXhzZUo1d2Q3SFMwZ21WUDMxMlBpN0NiM09nYUhIWWtNOU1wZW9UNUhuUTkzOC9mTjNwUVBoZnAyM1RIeFhNN0p6c3JoeUtHdVRJWjdCSHM2NXdQZE91cTdIdTZNSE1tcHR6cGkzYnVRR081Mk1KblB6WklUOGpZb1A0VnpyR0ovRFpjUElOeDkzb0RzM20rai9mTEJmNzIwVzk3K0FOZkRZYUFLRzFkTjVuNU81SitRdWNONVd1bzRWSnQ3NmUvZExWZUU4cEY4aTZub2xpZStVSThqWGZnTmR1c09uU2JVQ0Qxd25nTU84VzE5TkU4bjhzSEkzL2dvRk5MZ2xkODNKQTcwcWM0SE1QLzRQbGpoZzNNQytlVG45UEw4NVVvNUNWNWY2ZThaandiMlBuRGtjRTBlZmtVTzlNS2FTblU2TDVYMldsVTluZXBEcnV3WmhXdVp6dEt3M3dVeExhbnZIc3ZDQ1B0QlhZZGlTb1QydGRQT2pJYU94TFBpa3NQK1ExcVNzQ0pjMFdoeHIzVFdPTWxUcWV3ZWs5a2dFRnNVUklSQmluWmhsWDBqY2tVZkhETFNYbExER1FnV3I2RUY5OERHY0VjREFxczZUTHBIM2VqRVdrdkFHZWdlNkVzNzNtQW5TbkpKa3JaU3Nrd3lVeTEvK1NsUURYVWtXRnV2MENvUk16VU9EZ2x4aEJCbXRMbnpTdG81cVVvNVZUN2tpSEMzL1EySG91Nzh6bW5XbkphZGhIL3NIUS8wWUNNRGVVa3Q5dit5MDlkRDk2R0VJNG9jU2tRVUxNeGsxcGlwemp6V2dVZkp3TklCNTFtMCs0eklrQXZra0phQTRwVHVLVHNsY3N3QkorVlFKcUVqR3JZZTBEVUZsRGdUbzhhbVFESWxSQXVGb2NtajZCM2FGRVlJcmJVWUkxRDhxR3FFNFVETnlFcGxrb21ML0ZTbjBaVHlDLzB2dnBiMDFiRDBWTW5pR28zSldhWVRFSmxTZzIwOERpYW95T213VjlFWUFVeFlrQXh4a3FldzJ0c3hKNWJIU0NqVU0zNzBjRFZQQXVoUjVRVjAzcUtHb2YrbnVORkZFQ0Q3a2lOeU1JWVlOWTFPQytCV2hPWXgyZ09Ib1JaZ3JHRDV6dnAzdVNySkpraWtzOGJCcmlyWjZVU0dUa2Q2RmIwVWRyQXlRWmlZYWZlc1VudkQzYklXak5FU0ZUT29IMDlDRzRaekhleE5IYTloMHFkT0NGOVF4S0lXbFc1SkI3MkwxU0ZEY1c1Und2MFk2dkFpQ0wwYnhTOVRVSlJGUm9RU2ltRHNnTUJERW5STUlPUDdDSmlHNHN4SnN0TkxLSU0xbFRBNWRrK1FqT21wdWRPQlRCOFB2eXE2VTNZeFVRZEN5UVM0aFN3N0hrTTdYUlVLWlB4dlc2anJxMkhtZWVpb01rN3dJblJTaDhaZjlYT3Zud25wRjFVQzM0UGU2ZGlyZTF6Tk9CMGJLem1QUnh4QjBLY2VBY2hOVUZ0WEhhRXM5Q2ZLOXlnN1VxQmk5VUZsaklka09wQ1FOVFpZb1VaQ3ZTUksxR0E1NTlFMFpkNXhDTGhubk96SDg2Vm5BdEErTVVTdVpXY2ttYm1LTTJUQk53Rk9RV3RiMUpzUzJTY1crcEZ1TElqNE8wc0hNV1pSREdBUU9KSUE0WVRRSTBNeHFsb2dxeHdhaG1VUldUdWdvczhjcWxZT0ludUIvcG9zOTRqbnVJVXpWNk82MWh3VHdLdEF0NWdXREtvSE1JUXJTdTlvNkNET05PVSs2dUVvcGdybEo1VTlIQW9wL2lnMDlNcm56WVIwaXdYMmtvR3hjRUhNNVdkeHdZOEtocHk3endyL1RHOGNoMGsya1lPZnhhcnNCSWRwQWVvWWNKS3FnUElUaXpvOUVxRk9kUFp3alp0Z3Y0NHFYeEF5TU83bndFVThrT2pnSHBkTUowbnBrS29UTTJWRjRORFBWRGwzblVVM0VOSWJPc2tlc1p6KzAxRjlabjdyRHZzT1FhYXNDamlud0dSQ25hQm1FcTV6Und2ekR5ZGhyWlF2N3drWFlCVzRzYlAySjFrckhiTGs1Q3orems2Ry8reHdKM1dyM2xISTh0V0ttb2ZmdFlUc2dFOGhoNU1PLy9UVkl3YitnRzVVNnhZSTBzekJSK0h2YURnSTluK0MvNFJNRXEwNmRKQkdndjFOd1VOSXY5d3JScFFEeXpKRE5GY0pLbzBFcmdmaWo4Tko1QisxaHZkN2FwK3N4bjF5all0L2ZzZXlId0gvbVlzUmZ4OFZ4RVBVV1VOKzFFaW9mMFgvRFA3eUk0ZHBaTzZzQXozaCtkNHhLTS9yYy90L05WZjVXUUYwaXlOK0NoYXV1a2UvUytiamwyYnlIV0I5L1NqL3ZTT00vNlVnTHZrNDZSUlhTYVRpY0NjdDhmYzNNZm5KQlJDYkRqUzY2TE5HbU1uQXhKbnhkb3VyU2xVQXFXYjRmNlE2bGF0ZCs1Tm1Ea0hkRkVnRmlEOGFSUFBtNGtCRjZQaHZsMmY0WDh3ZG92anZPbXMrclNYbHZwb2lINngzWFMwVC9GM09XYXJBNnlNSnhJL2NZYURvRWUyZ3krRkVkUjUrdFkvZGpGUWNuL3NNeG8xcGFsNU1aVnhtVEMzM0pzbnduYnVtNW50bFptK2VveENTNThvWkk4bzU2WXl2andiMmI3N1VZOUNjUjdpTCtOL3ZiTE9hLytWRC8rMUtQc3VFUFVWenZsaFd6WGNvUjF5WmgwUzV3RE55UHdvUHlWVFdiSS83Y01jSlY1bkhWNjVhTXc5ZWxldzFTOEh1RGtYSkY2S1NFd1FVMHFVaW95V2FtcE9UV1VIakxCRldpVEVvY29aQTUrTUhpdW9VdndySkVPZU0weGw5dU1GSklZeHNWdTNneEJGdU9VOStuVWYxcm5Ub3Q4YVlsek1mYjhnSTF0bUdqNmhwb1NibkM5Z3RkK2hqZnh3bnk2eGdKKzZ6TTBvdS9WUUFVcUVvSkJ1UE01SlgxQ2hXNFE2WlhTeVNhalpDSDFzZ0ZVNjUwMlVEWFFrRi9ZbmswUkFvZytVa0hvZWtMdWNwenZWb2paRU9sWjRTbHRVTWdJeGhRY1V0dTA5ZE5mYjRvQXNDVlZQd2FUWE9MTU01MG5HWG8zZ2U1QmVCUWlIZjR4QjloUEpHR0NMNmFGak5hSWZLTmlyblBQT2xUNCs3b0Flc2pobG90TURLalJNcWZVN2pHbFVFdTUzOHd4RWl5OW5yQ0RXQ1hKT0ZXa2NtdWRlVWdOd2RXaWpuaWsyMWMyNm83cGljVVJETkE0YjJLK2NZaEVwN1VwYzJWRFdJVnM0a0V2YjhVbE95TWtMK1FwbnVsejRteGhseXRnNGtrWHp5NVpqc1BOSms3YldhSTAyV1FsV1o1RENnNXJwRWRsdE9zQTQ1bFlscnpsaXpaK3R2RGN0MHV1eUFERkVuZHJJMTF2WmQ1bVZxVHUyV1ZZU1NzNmptRVZRVnFxVTlsSU5Feld4bndsTHp5QWRaQkVpTkcvQTA5dGthV1hPZnVMSHR1ZUoySzJrSGpPYTJVbTZMVGtKTDZ0VzhGS2JrMFUzY1VFU0RCM0tyTEs2SjVuekNnVFk5NFZ3eFpJSjdKc1l4UFN1c25DYjV6LzhYMVdtWmFLZGtUVmZKK2hDREl1TkhBTmpqTDZBNFU1V3cvbC9SS0FuRTZjVHlna1NYZEFQOXY0SlRJVG9ZVWVTZ21uUStHNVJKR0RrSkpZZFBSWTZ3bktLUktoSjN4TWtlQkRrY2gvMDRtS1duYVRlbzVFUWdCNGdjcm9xQ3BMUU1hY3FTR3ZDZmNJUTkvYVBOdXF1OW5HeWFrWmJLT3U0bDFZNlhaWjcvczQxQi9DaExUdjdLaW9uK0NnZWptdHNDTzdlQzlJTWRSSWFHbG1TcUZyZjJ6K1JBbHI3WkxBWHBDSWZpT1U3dTJpb3F5Wi9NYU5ONS9zOU1EbXdrcUVRekxZRHFOcFdWMVZreU0zU3BibmJMK1J3Tis2VTVXcXBNT2hvNyt2ay9IVkZUa2l0UncxRVNvVW9KMHVmL2JwSGkybnZZZlRZaHEyNVFjREphcGtETHI0QWRSd3FUREN1NW1xS2ZhSWpRaituQSt5VEw4N0lTaXREbi83a2ZSMUdjSU1FcUNabDAvZXhEMW5pVUxCN01zQmh1OFJOQ1lTVUNYVXVZZnVqTytmQVdQdW9PNFNmdFlxcWFhLy80aVM4aVI1ajAwVmxJTUJpSEtKYU1LRUUvSFk5QTRsUXpjdW55Y2dWQ2FIMUJxUTRIYWRFQVlhdUNQdTJ1d1JrT0pKNWdHQ2M4MmVmL2ptM0lJZHBiaGlQNEVabHdiUVI3T0NRd0dTVkw2TWNWRXVDU1FCMmQzN2pNNXNTd0RDRnVsS3dLMDZzYVZhNmtlMnBKcUpMRWlmUDgzLzI4QWYwb0dWcDNNRUhGS1lkVkVlNjJRSzJ5UkliK1cwbkVsWExxVURXcU82Zk16RnpjMnNJeEw4Y1lGQTJ5WTFpdHBBbEpydFhDbGRRYWF1aWdCd3FrUUlURnp6Q0lPUnFKS1A0QWtldTBVSWpFdEZBODZvWlpoWlJqLzYvRUUzSUZCVjFQc2drZ1orclNSUS93SFFOQkJrSktCVFBabWtpSWpyaVVHcmUxdTdzT1AwTVZqNFlxRlJKUGFzcGlPSldNVlFEK1JDaVpzVmhaV2FMZy9EQ1dVSlpReGRacVR0QlVuWUxLVGJDdS83bktTRVFZZmlhbUdpM2twMk8zRFA1NXlXZzVJY2w0c0FwMjFLdnlZdGlYaUpVcndHb3dIeitHN1VSQ1hrSUIxOUxQY0RrUjBQSDdZL0lQTWxTQ2lKKzZaWTBXcktKT1ZPMzJ2d3RpTVlBWVN3WUNjRkdueVVDTWtvekJUNjJtS2hsMTZsbFZDUytoQ1RHZUNGZGs4R3V5ODdta25JenRWc0dLT3dITTRSOFlyMVVwSGxXdWpqdFNXcURWQU12Um1xcXFESDZvV3hmRFNwMi9Pb3MvNktjQUVvbGdKVDFmaXpFejdJYUd6TWdqcit5Z0pRZCtPcllxSkZleXNGR2pWZ1c3NHE4R2k0N1VCS3BndlU0RFBva2FCLzRWdGE2eUp1b09kV1R3Rm9vL0h2U2p6dVU2SEppRzNYbzFLL3RzL25Zb3FrWWJENFdxY0tJSDhsZXI2QU4rT1psd2ZHWUJxUVg4cEQ2QS9OZEdHUDRvS3JtdW9pYVdpeDhUWFR3Qit5aCtPczVYSGZ2UHRPbXE0bFpEYmloejhQdlpwKzVxMWNxd2k1KzlGcEpxUkZaZkZRQjExdjRmckJNdVdBQUFBUUFBdmtnQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVBBWUFnQUFBQUFBWnk4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZEd01BQUFBQUFBQXdBQUFBQUFBQUFBQUFBQUFBQUFBT0FGSUFGQUpIQUNRQ1FnQTBBZ0FBQUFBdS93QUFoZ3dBQUtwaUVBQUFBQUFBRC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3JoUC8vLy8vLy8rb2IvLy85RFAvLy8wRS8rU1Ava2IvNU4vK1JmM2tuOTVHL2VUdjNrYjk1Sy9lU1Azazc5NUYvT1N2emtqODVQL09SL3prdjg1Si9PVC96a2Y4NU0vT1NmemxEODVKL09UUHprcjg1Uy9PU1B4a3o4WksvR1VQeGtuOFpOL0dTL3hsTDhaSi9HVGZ4a3Y4WlIvR1N2eGszOFpNL09TZnhrNzhaTC9PUy94azc4Wk0vT1N2eGs3OFpNL09TL3hsRDhaTi9PU2Z3azc4Sk0vQ1V2d2t2OEpQL0NUZnhrdjhKUS9DVGZ4a3o4SlAvQ1RmeGtyOEpSL0NUZnhrejhKUC9DVHZ4a3o4SlEvQ1Rmd2xMOEpNL0dUdnhrcjhKUi9DVGZ4azM4SlEvQ1R2eGt6OEpSL0NUdndsTDhKTi9DVWZ3azc4WkwvQ1Vmd2s3OFpOL0NVZndsSDhaTS9DVWZ3azc4Wk4vR1R2eGt2OEJRL0FUL3drMzhCUy9BVC93a3o4QlMvQVVQd2xEOEJRL0FUL3drejhCUC9BVHZ3azM4QlIvQVQvd2szOEpQL0NUdndGTDhCTy9DVFB3bEQ4Sk8vQ1VQd2szOEJSL0FUL3drNzhCUi9BVC93azM4SlAvQ1Qvd0ZMOEJRL0NUdndGSDhCUC9DVHZ3bEw4Sk0vQ1VQd2svOEJSL0FVUHdrNzhCUy9BVHZ3ay84QlMvQVVmd2szOEJSL0FVUHdrNzhCUi9BVXZ3ay84SlAvQ1Qvd0ZMOEJTL0NUZndrLzhKUC9BVWZ3Rkg4Sk4vQVVmd0ZEOEpRL0NVUHdrNzhCUy9BVWZ3ay84SlMvQ1R2d0ZMOEJRL0NUL3dGSDhSTi9BVVB3Rkw4QlMvQVR2d0ZMOEJTOFM4US9BVGZFdkVmd0UvOEJSL0FUdndGTDhCUS9BVXZ3RTM4QlI4UzhRL0FVZndFLzhCUS9BVC93azd4THhIOEJQL0FVZndFNzhCUS9BVVBFdndVN3hMeEQ4QlI4UzhRL0FUL3dGSDhCUi9BVXZ3RTd4THcvOEJSL0FVdndFLzhCUi9BVC93RkQ4Qk84UzhTL0FVZkV2RXZ3RTc4QlEvQVQvRXZFUHdFNzhCUi9BVWZ3ay84QlMvQ1V2d0U3OEJTL0FVZndGRDhCUDhTOFIvQVV2d2s3OEJTL0FVUHdGTDhCUC9BVWZ3RkQ4QlMvQVR2d0ZMOEJTL0NUL3dGTDhCUy9BVXZ3RS84QlMvQVVmRXZFZndGRHhMOEZTL0FVdndFLzhCUy9BVVB3ay84QlMvQVV2d0ZMOEJQL0FVdndGSDhKUC9BVXZ3Rkw4Sk8vQ1QvRXZFdndGTDhKUi9BVXZ3RkQ4SlEvQ1VQd2xMOEpPOFM4US9BVC9FdkVmd0U3eEx3L3hMeEh4TDhGUC9BVVB3RkR4THhIOEJSOFI4UkFSK1E4UzhSL0FVQUVnRWZ3Vkw4QlNBUytRL0NVZ0V2a2ZFZkVQRXZFdndGTDhCUy9BVC9FdkVQd0ZMeEh4SHhMdzhCSDVMOEJTL0NUL3dOSUJMOEJTOFIvQVQvd0ZIOEJTOFMvQlVQRXZ3VkVCTDhIUC9BVWdFdmt2d0ZMeEx4THhMOE5TQVNBUjhROFMvQlV2d0ZMOEJRL0FVdndGRUJMNUw4QlEvQ1Vmd0ZMOEJSOFM4Ui9BVXZFdndGTDhGUy9BVXZFdndWRDhCUy9FVWZFdndWRDhKUy9BVXZ3Vkw4RlMvQVVmd0ZFQklCTHhMOEJRL0NVZndsTDhKUzhTL0JVUHdGTHhMOEhTK1MvQlV2d0ZMeEg4UlM4UzhTL0FVZndsTDhSUi9BVXZFdkVmd0ZMOEpRL0FVZ0V2a3Z4Vkx4SUJMMUw4Q1MvQlV2a2dFZ0VnRXZ3Tkw1SUJJQkg4RlNBUytSQVMrUy9BVXZ4RkVCTDVENUx4TDVMeEg4SFM4U0FSK1M4U0FTOFI4UThSL0FVUUVmd2RMeEw4RlIvQ1V2dzlMNUw4SFMvQTB2d1ZMOE5TL0IwdmtRRWdFdkV2RXZrZ0V2RXZ3Rkw4QlMvQVVmd05MOExTQVMvRDBnRWdFZnhWTHhMOExTL0JVdndWTDhQUy9BMHZFdnhOTHhMOEJTL0NVdkV2eXRMOFhTL0RVdndkTDVIOEhTL0EwZ0V2d05JQkw4VFM4UzhSL0swdnh0THhMOFRTL0FVZ0V2emxMOEZTOFM4UzhTL0JVdndWTHhMOEhTL0gwdnd4TDh1U0FTQVM4U1MvQUV2RXZFdndGTDhsU0FTQVNBU0FSL0EwdnhaTDFMOFJTL0dFdnhCTDhQUzhTL0RVdkV2d0pJQkw4RFM5U1MvRGt2d2RJQkw1SUJMOEFTL0FrdlVrZ0V2d2xMOE5TL1gwZ0V2d0pMOGpTN1M4Uy9BRXZ4Ukw4WFNTL0NrdndCTDhFUy9DVXZ3dEw4Z1MvSWt2eGxMOCtTL0EwdndKTHhKTDhEU0FTN1M3UzhTL0hVdndSTDhWUytTL0dVdndSTDhLUy9CMHZ5bEwvLy9HVWdFdjVsTDhJUy9UVXZ5Skh4TDg4Uy9WRXZ4eEwvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzNrVC8vLy8vLy8vcUcvLy8vUXovLy85QS8va2ovNUcvK1RQL2tYOTVKL2VSdjNrMzk1Ry9lU3Yza2o5NU8vZVJmemtyODVJL09UL3prZjg1TC9PU2Z6bEQ4NUgvT1MvemtuODVQL09TUHprejg1Sy9PVVB6a2o4Wk0vR1N2emtuOFpNL0dTdnprbjhaTi9HU3Z6a3I4Wk4vR1MvemtuOFpOL0dTL3hsTDhaSy9HVGZ4a3o4WlMvR1N2eGszOFpML09TL3hrNzhaTS9PU2Z3azc4Sk0vR1Mvd2s3OEpNL0dTdndrNzhKTS9HUy93azc4Sk0vR1N2d2s3OEpNL0dUUHdrLzhKTi9HUy93azc4Sk0vR1RQd2svOEpOL0dTdndrLzhKTi9DVXZ3a3o4SlAvQ1RmeGt2OEpSL0NUZnhrMzhKUC9DVGZ4a3Y4SlEvQ1RmeGt6OEpTL0NUdnhrejhKUi9DVHZ4azM4SlEvQ1R2eGt2OEJTL0FUdndrMzhCUS9BVHZ3a3o4QlMvQVR2d2s3OEJSL0FUdndrejhCUy9BVC93azc4QlIvQVR2d2t6OEJSL0FUdndrNzhCUy9BVXZ3a3Y4QlMvQVQvd2s3OEJTL0FUL3drMzhCUy9BVC93azc4QlIvQVVQd2t6OEJSL0FVUHdrNzhCUy9BVC93Rkw4Qk4vQVVQd0UvOEpPL0FVdndGRDhKTS9BVXZ3Rkg4Sk8vQVV2d0U3OEpPL0FVUHdFLzhKUC9DVXZ3azM4SlAvQ1R2d0ZMOEJRL0NUdndGTDhCUS9DVHZ3Rkw4QlAvQ1RQd0ZMOEJSL0NUdndGTDhSTy9BVXZ3RkQ4SlEvR1Rmd0ZMOEJSL0NUL3dGSDhCUS9DVHZ3Rkw4QlMvQ1Qvd2xEOEpOOFM4US9BVHZFZkVQd0U3eEx4TDhCUThSOFIvQVRmRXZFZndGRHhIOEZQOFM4Uy9BVC93Rkh4THczeEx4SDhCUC9CVXZEL0V2RXZ3Rkw4QlEvQVR2RWZFUHdFLzhKUC9BVXZ3RS84QlIvQVR2RXZFZndFLzhCUy9BVC9FdkV2d0ZEeEw4RlAvQVV2d0ZEOEpQL0FVUHdGSDhKTzhTL0JVUEV2RVB3RS84QlEvQVQvd0ZMOEJPOFI4US9BVC93Rkw4QlAvQVV2d0ZEeEx4TDhCTzhTL0JVUHdGTDhCTy9BVXZ3RkR4TDhGUDhSL0JUL0VmRXZ3RkQ4SlEvQVV2d0U3OEJTL0FVZndGTDhCTy9BVXZ3Rkx4TDhGUC9BVXZ3Rkg4QlMvQVQvd0ZMOEJRL0NUdkV2RXZ3RS94THhMOEJPOFM4Uy9DVXZ3RTd4THhEOEJRL0NVUHdGTDhSUThTOFIvQVV2d2svOEJTL0FVUHdrN3hMOEZROFMvQlQveEZMOEJPL0NVUEV2RWZFZkVQd0ZMeEx4SHhMeEg4QlEvQVVQd0ZEOEJTL0FUL3dGTDhCUS9BVXZFdkR2d0UvOEJRL0FVZndGTHhIeEw4QlA4UzhTL0FVZkVmRXZ3RkQ4QlMvQVQvRXZFQUV2a1B3Rkw4QlM4UzhRL0FVZndGRDhCUS9BMHZrdndrLzhKUy9BMHZrZndGTDhCUy9BMHZrZndWTHhEOEpRL0FVdkV2RWdFZ0V2RXZ3RS94TDhGUy9DVWZ3Rkh4THhEeEx4TDhCUThTOFFBUytTQVMvQ1V2a2Z3RkQ4RlM4UThTOFI4Uy9BVXZFdndFLzhCUi9BVC9FdkV2RXZEL3dsSHhMOEZTOFI4US9DVVB3Rkw4RlM4UjhTL0JVZkV2d1ZIOEJSL0FVdkVmRXZ3RkQ4QlMvQVV2d0ZIeEx4THhMOEpTOFI4UzhRL0NVUHdsTDhCUy9CVXZFZ0V2a1B4Rkw4UlFBUy9HVWdFdkVQd0ZMeEg4RlM4UzhTL0FVUUV2a3Z3Rkx4SUJMOExSL0FFai93bElCRDhCU0FTOFEvRlV2d1ZIOEJSOFJBUy9BMFFFdmt2d0ZMOEJTL0NVZ0V2a3Z3dEg1SUJIeEw4SFMvQzB2d0ZJQkw1SHhJQkw1TDVMOERTQVNBU0FTL0RVdnd0TDVMOEpTL0FVdndOTDhqU0FTL0JVdnd0TDhKUy9DVXZFdndkTDhCUy9CMHZ3bEw1SUJIOE5TL0FVdndWTHhMODBTL0drZ0V2RXZ3Vkw4RFMvRVV2RXZ4Rkw4WlMvQVV2eEZMOFhTQVIvQzB2d2xJQkw4VlMvRVV2d1ZMOE5TL05rdndOTHRJQkg4QVMvREVrdnd4TDhBUy9HMHZ3OUpJQkw1TDhGUy9GVXZFdnhWSHRMOFFTN1MvREV2eUJMOFJTQVMvQkV2d3BMOGNTQVMvQVVnRWt2d0JKTDhFUy9JRXZ3cEw4SVMvQzB2d1ZMOEdTOFMvRWt2a3UwZ0V2eGRMOEVTL0NFdlVra3Z3ZEpJQkpMOEhTL0FVdTB2d05MNUw4RFM5Uy9BRXZ3Ukw4VFMvRjB2d0pJQkw4SVNTL0QwdncxSUJMOGJTN1MvQVVrdnc5TDhBU1MvQWtmeDlMOEtTOFM5Uy9BVXUwdkV2d1JMOEJTL0NFdndsTDVMMUw4UlMvSDB2L1pMOGNTLy8vLy8vY1MvSWt2Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3hFUUFVWWNjY2dnZ2dra29vdzAwNDQwMDA0ODlFQkZGRHhJQkx4THhKSklBRjBJdUZrc0RxQzBLT1FFemUyV3JZdHpTeGJObDdzd3ZUSmRMR0dHWjExWnB1UmZWZ0FzeUtsQWV4R2MzTVBHMEFrQlRRZzlhRU1ibXNZeWY5SkU3ZGo0THNtMnF6WlJWS3diR3hoU0U3MDN2V0ppcUIybVgrTTRXclpJd2k3di9HZ0NrQ1JBNUtvMGhURXpJMHlyNEhCeTdzSnFSMEMwWDZra29ha0hZdGVkb1Y3eUV2TjNiS2swV0EzZVcra2FDa1VsOUwwU1hJWFhkZ0tiRGg4QkVBZlZqblN4V1JXRWhOYy9UcGF2aC9MT3NpWTdPczlWS0xLcW9ld0VpWVdRSVFNMGFkSjBIc2tTekhZcXZGU3hDei9US3NTOWpHc0k0Wlk4WG13V1ZlMjhPbW9oeEs0VjV4WXBKSXdTdTFYZGlZZHlSQUdHai9STFdTU09Fem5YZGpwdFlDV2J6ZWxPbkNXcTBFUk5sM2FOUzBOQWhHNktlNEdOMDc2bGFwanE0eG03c0YxSnpRVHNwWkdEcFF4WmVublBYTGRYZTBpYytyaFUyelZVcnljbWhHS25Jejk4VGRCRkR5RW95N2hXTEFLVEFZdkJQQUI4Z0NCRUEwZFdLaVFBaWNBOUlScFR5OVZRd1hBQmRnQi9DOWpDTnpna0ZyQ2FxdGhGM0RDV1dIY1BXVEltdUdFbExBSWlCbElRd0FGVUExbDgxS3RJdENpK0treTUxcTByVmtWV0Fkc01uSGczQW0xZnF5aENYZ2k5eGVwOVdBTHlBQk1BYW9EWENtUVlUaERJRUFoU1diOFd4UDFsSDBYWFpGRm1haTZBTUdCbzZGVHhhU0V4QlpkeHBMMWVBQlhBMGRTcUFkRWhTUkFtMzFlaWJ3QmhBTkhScXdoRnNFWk1RV1hiNXNCemdOWUhzQUFvUFF3RWdlZ3Rsb0VhM01oWkRpZjBxOHZ6RVhDdFdpK3ROZ0dVUXFBUzRFNU5HSERneFhac1dYaXdBNENlRklHdUEwNDBsd25CSEdEbVhkZ0dtQmhVQ0dBSnVBRENIVXVjSXlnUEFCSVlCR3loREtIeUdMRXdrZ0JTZ0I5Q1o3V2wyS2kvTXppSjFndVU4UjhpYzRZU3l4cDlNa2ljNFlTeXdBT1JJRjZnQUFZZkR3WUR5SnVVQ294WSt0TnJzek5ZSjJiNW1jcTVtaHl0Q0F5dzFmWG14SG9vNzZERlg4UElBNU9VR1VqMFZoZ0F6UmM3ZHRTcTB0VHFmekVGNXU3REE1dzJESVdTWDVicEJmRnFtVWJvK2hybGlCTFNXYzY3c2hKdFBBSzRDS0pqcm5xRHdHVTRzeWsycisva3BPNnNBZHMzZGdZYWJqU2dVY0dpWjJRY1RDbzJXcmFZY0wzc2ZSSE4zWUw3Q3pRQlpRaXRueWtjek5MTG54T2x1WUtPNlhaeXJuS3NtN0wxWTNoODBDZ1BrTlc0NldpVUtxU2pkMkx5SGx5c3pvVldxdlFSKzdzQTRpQnBBQTRBcDRzNW5QbFFCQ0NCekd2VVc5Z2R1SE14Yk5PWjg2blF3ampPTHNzOVZLd21ROW5JcW13ZmdSSWVOQU5tRGVpZ0d6UkdDNkxoWTRzVFVhbVdMT0REdUVwU2NPTW5PZnh6Um9MT2Nxek9kVEdaaXJNZDVnM0crMGhtczNRWGl3SE9BZmF3ekFMYUFXc0Y4UkZYSEZCd0dZVHFkSWdVZVFkb3VJUmNMOXl1YzkyYzVndVozRVh0TkhVMzFaT2RMR1RCaWJGMmEyUmJ1cEdTYUZJSkt6bnFaZWRHSVh6Skt3bG03c0hMS1lIRURPYUtXb0xYQVk1aklsUld1V0Q5ajRNVTl3eDkzWUlDUjl3VXdldTFzU2h3S29LTFhyek42ZUVYUjRJMkdXWGRqYStNZ3Q1TlFlbmxNREdES1dtcC96WnpDMktibUhCQSs3c0NmV1BFd0UzQmJRU0xUR1dGTm1YdTJkS2t5UWwrWGNyTjNGaVhjUWdHdEF6eW1IMTVwWVNaeXp0MVluQzBvNVdTOHZqM1plckFHeEM1Z1N3TkVVQ01MR0tDMFhNQmdvZkV3a1FJTXpLUGE1NjNOcFdjNzVpcmxYYU15eWRhRHRWZzJLcUdhc0VTRjRVTUo1RHNJWnl4VVZMT0xDYWlhUlNpZEUxQnpPWmloYkZwWTdkaGR6bU1leS9UMGRGV003Nk1qWUI5aUlXWTRJYkE3RmdrRWFqbWkza0lsVXpTeEM3TWwyWXp1WTkyWTltZG1LdXpHWjEvR2x6Yk5mM3hZSVJvbllPeVRGSnl6MEJLSkJNN3A3N3k3T2Q5TGliM0tzYy9tSFdqcXVjYWJZQk5Ra0hXZ0E3QUJiSkxKb0RSQTBDT0FMcVVjNW1YTzdDWURmQUIrcGhSenFWY3htYzdNWXE1am5PemxYTXNKM1RwaE9UdStNNXhGQ3NzczRRc05IbWhwMEp5bll4ZitsN2ZMR3V6SnJtSlpUbmFZTHpuTk1ld01vVFM0YWRRemxFNU9leXVwMzlyK1g2ckRDN3AvTk1jdkYrTkZXQUtVZ2ZQVVlpZytVMk9QNTh6cFcxL2Y3cUh0azN5cjJWZXA1ejRMejdCNkVrcmtzcHhyOUNjdEJxMEpsclpMd3UvRUhHdC9WbXRKTEtzWEp2NlIybFduMVlmQUwvSXV6UkczNXRUL1NDblY4a1RsV00xR0l6TDY1UjhaYlgwUlZacmViT05iTDVWaFdMQjJvVjRlU1lHZzRLNVhDMjVCVC9NK2JvZldxbVBZUk1WWmZEUlJVN3NicE1lNVFRVjhGbDdtR1dDV0N5UmtMR3dQdVZXZDNwSlR1NVFpYmEyMGpOSEpjRmJWcEhHN3h6aTlXSG9MY0NJMDdOVnBOaXJ2SmVkRCsrVEhNeGMxSnAwa1UzVVZWYUxCTmplVEhGRXAzeldLTDA2WjNmeTh2Z3ZGai8xRkhKSFU5cTlMUmhGalJydzFQbEpWYlh6WUdTSmczb2RIaFVVTzZLVkt6UFNoNjNyVmdqY1lpOVdIZERZTCs2aXBybkdKc1RoRENsUExGV2pNSUhxdW50alVYcC9ueGErbGxsdWMrVEUzcFdpMCtWSTFUU3RXRng0ckZTQytjTlVheVhyem1zK1loOHg3TXhWanRMaUpscjd2UGZGcFF3WmFyQ3NrZFcwSTRzQ1htaW9iSHA2a3pPbGFrdVd5R2tVOWozTXM1YVk2YStjeHBGNCtvbHE0QkpUS1g4bjZkUm1yRlFTRTFqc3JVSUI4TGxGR3Jsck5PN08wdjh6c3ZqS012T1NVaG5vdkdXSUVYQTgxS2RSckdLRENyVUErbHFSY2dNaHVQdVdnMlhvUytTejZndzVXT1JSZUpwR292TmQzd1hYRjROWHpVd3htcWpIdVFobm9DdmhjYXpxWmE4cHBVNzJQYytNekxZckpHNnpaazF2WFVncWF0OWFjanFzRnNSNHFtR3BNODFjRGE1Nit1VldsT3d1dlRhMGFTcHE0MGFZSll2elJ1bm1Lc0xrRU9HRk5SNXkrdjd5dDB1M1kwdjJXdHBxSzMxV2kvTlFqWkNVbEp5UTFQOG5DdU83S01hK2N0V05GWnhlclJObktWQmh4aUxOVldSVFlOWlJNOE5wT1dzOGZoTmI1M09mVVF5RERiSG5tanpKMDV1NHhtMXhvUGFSZTJpbGhBS3g4b0t4Tk10Si9KTW9ycWxjbDR0cmpWRXVlb2hMNVZqZXpXWkRRMWJmVnFBZlJRSzEvbGloNU10bTZLVW1lZ3h4aU14N2xZTXN1QVZ5YVVQVGV2a3MzU1Nrdjh2YkJMN0ZRSDBTRGcyaU5JSUVJMGVYa3FUZG10blRDc21IVFlOSzBEb2ZNdTBHT3VyaEw5V1BPb3o3RjRMd1ExamVIUlhoWTRvbTdkaWJYTmExcjVWVzlneGRla2JPRU8vN21yYXJEL2VTSHFTZzNURTZUTTJPQUw4Y0s4UllTTGFKbjBvdGkxSDBXWTJTN1dRWVlaWTZ4bVVHNllPZXNZT2kwdTJOV1NMMFNUWW5RdzBGNlgvSmxXcE5hVEgyazU3YzF6SHJWS0dIR1dLc3RNMXZHcGcrSWEzZXR5T0xPUm1XeWlPdm1iRHdJclVnUEJOYWNzU3crdk5UOG41Zk0xWTBsUnRNV1hydjlhTFVuSTl2bFdiQVRjTXBIRTVVNGpRVHdpRHBUTUg5T3BlbHFzWnhKeVdMbnlnYTA2VitzdHhIRC9mbk42Ly9FUG13Sm9TNFZrM0NQSkc3MXBRWVlsUmJXS3R6VEhJbUdJdGExeWs0YXByNTZzNmpQbTB2Nk5ZbE1xeXJWZ1RhQStUUVljMlNxQTNtUzhzdGxPMGRqMk5ZMHZ5TjE1T0ZuTG1pOUYvTW1JZkZ3ZjI1dmtZZlJZTVF6b0hVQjVoVmJKVU9sSXN6RTgxcWppN0hhUzgyY2xXcmVXNlRGUG0walgrc2pHcXd1RVpNZ1A2RXFNUlVUeTY3Ri9OZTdmVXF3dkZvanA2UjJtS25lOE10WDlTc3pZb0VqaG9kbUVRdWxodWxYdzNOWHpFdjkwaTBabHIxNlh4Y1FkV2wvc0YwUXRSRVcrRlQwNmw1NzFzZXd2TjF2RS83MmJEMGNiWVJEY2dvbzJUMUV2T0ticExYbXg4dDdGWnRMZmRQSFMvdlpadFJqWjNzSXJCMUFHb1JVdGVvbWF4YTFDMHUwOG8wdzZXRjV0cDJsR0lObDY5Q3ZNU1J6WXpSdWw5ZC9ycXhvR05XRE1GNVpUb0tNSVNqVU1ub1ViaWxNN1RQMUYvZU55VCtjMWR4VXcrRVYrd0JNeXpnaGdCQ2dFTjVZME9Ga0RnRG5BR2N4QWhDRG1GWGVRSE1CSTh6TWxiNHBqK1d4WXk3TXNCQXhDY254YktYOE5odzVwK2w3RlZrTys1bnF6cEkyMkEraDRzRmhBRWFUOE9ZU2NUQytuUzZuWWhwMGxna1lwbUYyWXBET1E0aDNmODdqbVlYZFl1QkxGQjhXclNrY0ZEQ2FrYU9oSnp0ODB6V2RuWnBFd2k5akxPY2ZXcHJ2NXNFazZlbnE1ek5Ob0JMS0N3UEpFUk1jQ1FOTWE1WTJ2RUlzY3pWU3M2cG5PWTVoRzdPdnlrZU5aSkpydDFhZkxOVm5OUERSMEhTc3BFbWY3SGd2Q1dKbGc4Q1VWQmdVWUd3Mk9GbURqaHR6bXNQUXkzdWU1eFoyY1paUm1ySFU1SGhrb21jcHV2cTh4UXdtNFcwK0N5MG1ManpOWmVtd1V4WmdYQlhDaUhLQVNGQllpUEJIQ1F4bzRUS1p4VWh4UU1STzV6dDlUMktyTHN6akxzeXdkS2cwRzRoTzlGL0l3Wk5nVDNuZ2Z4S2pSeGVIREIzc2dCRWlKSVR1RHdnRlNZbklKUzRiamtvQ3o5Z21FejNPWXdveGpIc2hqTzhoekZYRjNYL1Y0UTZJM3F3TE1JZU9CQmdlWUhLYXRxWXRFeE5CYWFrNWJtUXh6dVhkcGM1am5PVllZN0xLMDlHYkM2SGpQdFFJSXFjQ2hBcnd3ajVxNEJQaTBzV2pMVzNIWW1URTBaWmhqR1BXSUxuc3U3QVFKSVZCdUhBQXBndVUvSGpRb0FaMlczVG1lRUdNSVNyaGpXcTdzQkNqaUVkRWdBdkFUeXlma2F3TXdmczBQbERMWTRYTVpxV1pZNS9lNFlNdTRzVFNMQWdndmdoZE9ub0xCa0Z2bU4xcVpUTkNwcFhNN2w1ekM5S3V1N0QrUWxwQVRvS0JObEl0U1RCNURIS1pzeVZ4VDRJNWhuVm5VTVl6akRMdXhvb0c0MERLQlhzUmhKYVNaQUNoRnpmMEpydWVMY1VZOXhkbWRJNFhZUk11eThXSXVWSGdlQVFTbFJseTRKSWVNVWw4THpOTG5mTmd4TG5yek00alpkMkFPZ0VRNVFDTGdpZ0wwRXNlM0NWd0NFQU05UkFPZDI4U0tPSEJlSDQ0NHB2TDJaem1EakRESHVld3U1N0JxbnJzV1E4VlQ2TVN1d0dpQzhrSm1BZ1JJT0VDbUd3L0QxY3U1Q3RaVnc1aUVQSTR0S1N3c1huT3pIdXpIc1lZWVhkU3NXTW12OFJCZjJBVTg4VllIWmVXNzhSSU5kVEc1UmZuekxYc2U0am9ZT0ltYUxpMDhWdzhFTktFbmxXZ2FRNWxFRnB4SzJ5d202dHlSajNabDNZT2FCYVFyQldTVThub01CQmhHUVg4cG8zN2l3NTlPY1NRUzhpWnJxd1JDSlllQlNnVC9TaEpaM0ZBczZqMXpHbVlDS0xIekpoa1BpN3NHYzF4eUlJZnkyVkJFcGdybE9sbE5UMXE5OUVidVNzdTdEcUExV0RjTlpZK2ppYVpRbzJWUDU3WmVVWlBlNHZLc1hkV0ErSnpCQ0EwUTQ0K2NzOUFJd21sclpVblE5aEM0azcvN3V3Q2tRRXhBRzdBSVJBRThBS0FBQ2dBTW9CY2diZ0N6QVNJQTVRQWVRTW9LSUF3SUJmd0xRR1FYQW93SWNCekFaZ0Jsd0QwQUIwZ0htQTdBUTRKRUdnSkRIQitEOENpQXJRQXFnRXdBWFVDTllHWUdNY0Z3VmdyQktBdVFyQm1Fb1VCOEQ0THd6RElYajg4ZEd5b3ljcit3WXVZNFlReXlDVWVVS3pLdFV3WVE1amhoTTFZQkN3QWNZQTFnRWZBR0xBMWc2Q0dCV2hTRVFaaXNIWVBGbGh4cFNpWmFYTUlYTUxMRjVRaHpDRVRFT2RQWTRVRUxHRUk0Nk93aFl4ek16WGtZc1dnQ0pBZEJOclVoNEJFaUZxbisvOUNRYy81TDcwWFQ0aDhXRXNBUTBEb1pYckFBUGc0SkVTQVlzNHdtNDBHcXhOMlBnQ0ZnZExLVkFSUUthUkZJWmZqRmx4b2d2RjJHZ0FoQUF5QjlkNENMQlU1RklabFJBWmF0UlplTENVQUlVQjBsWVFTYUJhQitmSExwS0F3dVlNT3k5VVdyU3FOZ01zQVFZQVlVRUdDVUV3T0E0QVdFV2hrTGhLb3h4TWhrTDVZNWpWMFJTckpsbDFkR3Zxd0ErQUEwZ0RuZ2lBQnhBQzhnT3NCRFFDNUFLQUJEQUl1QkV3RlBBc1FMZ0J4Z05vQkR3WncvQi9BMlFJa0FwSUhBQ2tCakFaNEk4Q3RBcXdhQWtpY1hCV0I4QlNCWEI4RDhVQmtHWVNna2lnWGk4WEVKQ3pEZzQ2elo0NmpwbFdyTDFvc0VNQllBYVFBSG9TQUVLQVNBQTJvbENLQzRCREFBWGdBTndIZ0FEMEJGQWpCbUZNSkFQWVNRWUFPb0JMUUVxQWRJQmpBRmZCa0JsQitDU1FpOEdZRFlCbUJtQWpBRGxCVUF5aEtCVEFpdzlEOEVZQ2xCakJnRkFQNEl3S29WUVJZVlF6RDhYUkdOalFSUU1JdURkTDVvdkw0SklqUmFMeW9TQ1ozcEpIdFNGZzVWYXRLcmh6UlpxcU45V2ZZRlVDODBtQ2ljS2trOTVRQzlxQ2lVUS85emlFY1pMK1JNdFRSbHhiSjBDblZjcWI4U0d4djRhTG5haVBpNW5HTTNkNUdHeWQ4ajhiUlFQdlJJVXE3dE5zb2pZUjZuSmFFZ2ppYlJ2UmtYeGQyRkpPWndSY010OWZDZG4wcXlxeHpwaTdzQVg4SWs0RFpCdkZhQ1htVTJzZFNIWHFmUllvd2gzWUlMTTVXck9WT3QwdlU5Z0ZqTmdtQVYwR1JlbFJDY0tCT2xVcExML0ZCZTZyNnY5b0tubldLdWpnNUEvSTVMcnBRTW5JS3laRkZhQmg3dXdXeFNqUW1DTDhuemZtaEpmVlFYK2NIWlFZKzdzTHByQWZ3WWMxTHZrWEM1a2N2R3JNSVh3Uys3dGljeUI3Qzh0MUlXY3NYem10ODZZMHVFOHZkcUxzbDVSVnlySHpkMkFPc0JTQkFBRmJCNkJFRFFHU0FnUUdpQUFTSFFiQWhVQTdrSXdHaUNJRDhFU0hwQ0Vod3ZEMWc0RkVvR0lWUlFLQmNRaGtRdVlXSEJ3WHNZNFRrSkNVSVdNYzdGSFpnV1ViWkJWWkthbXdpaElnU0NWZ3RCdEs0YkxKOXh4MUlMZ3I2Y3hWbE9ZeDJoM2N4YkdNY1lkVmcwanI2ZWJjUm9mVmdKUXpyQXp3cHNTVXpwWUVjWEVDM2FjdktSeUVURG5kbUY1VitZUnk5aGQxcUt6WWtWYjdPWEE4a0s1cHBxSnhad1lrOTVtdDlCWVBDRjNna1l5N3NUZktBM0JGU3lXK1VEMFhGb3JTcjFzWkdtN3NFcXFMUTNuZnc4WGxpTDA4aDkzZk9OTmtKNmtqdjNvS2dtZjh0OHFsQmErYnV3VTZCL0FBYUExRkIvZk1FZ1lpUXNwOGR2bHpJVXhROTA2RExuV3RWS2JjcWcyd0FSZ3hFSWlCZEJOT2xxaFhPRDBUTDdtcnkyMWxzTE9kT25RWjgyUEsxTmlPSG10cXhHZDJoMzI0M3FsaUZzdm93d1R1OTNZSHc2T0xXSFA4VXNzT1ZNRVltMDNkc0o5b0V3SFdtZTlaUVR1TzAwUk1FQ2ZkMnpTTzhHSkdabU1rVElRaHE4dzRwbkRGMTNZWWxGRFFNUmswcGpwTEN3aEtPbFdwNkU1MGFpTDUwMlhOczAxNlZxUE9CYkgvalVvMWRhM3h6RGhhd1FKdTdBS1NCaUdRYndBK3dBL3hjMURwSGhGQUl3QUkwRXJVdkNxMWc5Z0JnZ0Iyc0pYWUdZbFpZVFllZXdpYzBZc3NKeXF5Y0dYT0dFc3NBaWtCQ2cyUEEzQU5nRDJFTU1COGhEWnd2RDFBbVRLTTZqbmZPY3JNemZpcnNEbEFDUkFnWUhBRDBIWXVCdUFuZ25TRVFlRmJtb0ZKSEhhZkdhWGErWCs3c2ZBQy9CUFJUNkFveTBhREluNGdNdDhhTDBhclRBQzhDcGtWUUtNdEdneFFuYUlETDFWYjBWYTFYZ0RRQW15OUFVUmFDTUluRUJseFZRcWJlUnE4QUYwRlRJNUhBVVFyMWF0VDREQm9nVGUvdWthaXd5QURBQ3FwcDBnemtIM01oZzBRR1dYaTQxV0E1UUFsZ0lJQlhnbXd4RndSUUNwaTl3UlJFV1kxbzJzY2RUV0wzTHNleC9reXk0cTdBRGVCRkFtUVlnRStBWjdBOENLS3hzMWdVQlF0TnZHM1JsK0hNZkxvVnBoSFYzRmdDaEFpcEZZQW5ZQVI0Sk1MR3lJMUE4QVBTQVNDUWtCYkZzVWRpZzRBRVFBSUFLR05ZWmN6c2NxNHk2d2kvU1Q1RTV3d2tuYUIyUktTaVpMT0dER1dBQm1CTllGNEJqRFpOSkxPNHJCeUxPVzVhaXkyYzhjRTVSL1ZaV29pZGFpTzZWaVExNkZnNDB0QVZBK3RScC9KZ3poRkUwNlRzM1RpRVdpWm1reEJkdW9RR1hkaXVZWUVrS0xFYWcrRUF4SENrcjMrbVd1SVdLMFJ6dVJ1dTdCTUJhY0ZvTXdJNElYWG1TNEhmTmw4L1RCZUpKSFBrazkzWU92azRhSCt2NVNWQXdDaWxwZlh5ZWNGRWg3SHlNV1hkZ2h5Z2hjQWJRV05nWnlYSEFRb081Q3B6Qzh3SlJENG5Pekh5OXo2QlV1dTRWcXhIU0F5RWtEOG05ZU9jT0E5SU5RWExkUGV6T1ZYVEh1TVZkMkFNSUVaTUhRQzRCNUtFMFpPY2lFa0djT3liWWh0YjRNUWZReGE2bnk5MUt0ZFloclFsTmxwM1o0SW9zRkNCTEQ0MEFuaFVWcEVMbUNRNWJGamNodVR6QndnN2lidE5mT0pIRjNZc3hqTHEvRC9ZSTBUckE5aEpBWm9SZE5kUU1RS0VHUW0xNnkvWUdZbmU0ek03NXJpU0xSZlhxMW02RGpvTXpGNDA5UkFmemQ1T1RCUWd3amVVbVg5VXE5WmZ2a3Z5SjEzWUpwUmJDQUIrbFowVk5PRElvMXZoOUx6aGZSYnZhUnNMc3psZmQxWURFT2xvZkE3dHh2L2FBMEE4ZWRsNk5NWVR4TDFrVHFKSEdXWEYyQ3lNbjBHQWtVaGZ5amdSWVlxYVRFY2NEN00rZ3ZKaWlTYnV3UHFHUUExaEpKMHBQNE9yRW0rcFZYbWtLczdrZm03c3BDT0FGY0ZoMlA2UndUZ3lkOVV6Q3J1SnM0WXNWZGRsNnNBYTg0V0NJQVY0RjBxSkhyNkFaOURzdzVMdTJYdWQrd3c3TXppN3N6TXpsWFdUMDQrc2paRFdnZUk1c0NuQndLRkdsZWtIUTBIUjdsbFN6U1kydG5LaWR1V3pPYTVqMlptZHZtT1k5ejNQZFlwZ3hFV2Q0aWxhczhTallPWkFIUlljRlBXVkgrdUJJNXkxbFJ4QWgzWXh4Q1RZVWM1MEVKWm44T1ZZWmM2NHJHM0VSLzlGZ01jb1dZRzVRUXFCdXNxSWs1ZWdWS3FMelVGbEhPWXpGSHpuT1l6dTdNeDdNek1lNisrck9oOWFMQUpuWUhxZ0R1QUN4RlJES0hDUndEaWdIWFlFYVZrSlpqbWk5Z0ZrQWxSWVB1MFRLamtTNG9XRExNY3g3blpqc1F2WXdjc0owSGNSaVEwdTJIRUptT3F3Y0pLQ0JveFZueW5JY2tEZm5aZkhCTkwvcHhUZVhDN2ZNbFYwT2YxNTFlTlBYaW1YcTB1MGdvQkZRcVdXWHBVaGZRN0dyY2cvNXhkanRSSEN0V094U1ZZMTlLcjBQNUxGdytYMVlHS0VGYlJUcTZQN1RpMVk2ZE5ibWVyTjkvT1gxYTB0aTVmS1hOTWVhc0hnRndRbkFMNFYvbnRLb0tLWkR5T1Mvd1grY1hjcXl4Mkh5Mk5HcVRLN09xcDhlU1dyQXdCUU41alZFRlB6c3ZPU1dvdkZtNXNtV3M1R3h6TFJXZm8zbG94OXcxdWpUNHNCN0JoaDRubEZrM05aNWJMbUZHTTBWelB6bjlXTHI5STZmcGZOYW53eThkTXBjNDNxem9WOWkwSW9vd2JKeWdmMENGYjF0WkxtOXNTWWxwZUxFSnJLYTliNWJOdGhTVHRTVWJyTVZZTzRRM0lJS0xycWFUbU83SE5RbDJRYXh5czh4NXpPclZud2xTR2hGV2RMVFBWbDFvK2Q5VUdac0c4VFRpazFqcU9ieXJGcE9uVGwxekRTSmhsbHdsa1JGa3ZELzNzRUgzNWVQYVRTOHY5Z21BUHgxQUZOTERaWVNIQnUzTmV2cnpYbGN0cjViOUwrejNVOFpHNldsT2JVWEZHOVRlWHpQc05RUG1FS3l5eHcwOW8rZXg2OHBNdlc0d3QxblJVWlNqMzlveDkrcGhHY2srSkdNV3dKYVFXSUlMRG9iekJYMjVmK1p5ajVMeFdxbnM5bkZVMVpVVy9tWWkwbURVZmRhajRBN1l0VEtKdFNXTXRQRmNQckhyRzg0Y2JNa2N2WmNOK2lZcXR5Vm51b243MUt2c3FKamtpaVdMRmsxQ2lXYXZqWlZjNHRPOVBXdVhNZTdPczJsNDdIZFRObDlQa3U2NnpUVWQ2WHBzVkF3YUJwTkpsSmFrb1ZTRmJudEkrQ3JpNEdvaUlwWkwxZmVIWG82dmVBOXBFM1NvMXA2bWNndzdxYWRMZkxETlNxMjFUMi9jekQ2TXhac1YxWXVCeGJCWVRVdzh0QVdybjZrRUZWdEp1THk0dzY5NGdlV2wzeTBZemRWOHZuUUNwcXdTaWNoWUF2VmpVcUZVTWtITXJVYWhPK2t1M1MrWWZHZGFsU3ZkZnpWWFdmcWE5S1RFMlBqVTBBOFRUZnFXeEk3NWVxWnpDVGw1OXRpSmF2ZFdTV2JPZWpQdEVJMHVEZVZLQ3hSYUNCUHBIbFpVbk0xS3MwM0tNRHJwclNyRXZuM2phazd2OXRLQkJCc1drUGxoS1VhMVJmV2V2dmx6Mk9NT2RlU2wycHJXYjNDelFzaUpsUXpWandSdWRLYWkwRjhtb3RVY0lQTFZ5NlZXWm5MemNqSnBjMkhyNWVGYXVQa2F0UUY0ZlFIV3VITTBtbHBuRDZDaW1vb28rSDFPZ3ZMbVhKM0dkOUw1SW92aW1SMVhybXlvTGs0NzVBTFpjcDVYVGMzTWxuYklRTldzZHhwMEd5OXZ2Z2VKeVZKSTFwL3NxRWNwa1RYb25ndUZrS1VkK09OVzJablU5dSs4MmRqMFpmSHpPWlpWdHI3eWkvdG13c0JZYklxS1VGaVJ6UkV5c1c3c3RySEZWRFBJbldvM2lHQ2lTKzllYy90STVWa2lyM09qNXMxWWI0ZStMSktmVkowNmtLVlg1WTUyak0vTXM5eWJLRGFTa2lvUVl2djg2YkJ2QkJFeUVJTUJhNUJ4V1JXVmt0SWsvbktWM3hxWXpkV21Sb3VwbUpiUnBkMzMwMzQxYVk1ZWJCY0FZa2lFQjVMVUVZWFJtS0xtWFNvenprTXo1Yy9UU3JIeFQzWmxweDRTMVN0OFBuZlZaMmhHYkM4VVFFTUI1Q1FwSjNTbWp0OGh2bUxmUkhEL2JVOGdsSjR6UUttcmxpSXBPcHRLenFzSXdMb25hbWNpY0ZoNDJrMTUzYWUzUzMrRERMNHpQMHlsR2liM1NsV2FzRjBMRUR6anFRYXdydTEvNDJxNGpiS3JydzZkTWFGK0JqVnljbHpkL0FnVFlINWFUbElRWXc3VFM4bzF2cWxLSk9xeVNLTGdVK0piTDRWWStpOVZhSjh4VDYzMzFFVVdKQk5qUUY2YzlRNkRpclArZzJkK2MxdW5SbWN2RmpxTmMvMUpkcG1DS0xqVExabEV1dXJCYkM4TkhDbHRJTlpNUCtscXZ5RDVYbVoxdHlLTmZTMklBN1l1Y2FYcUxCaUJiT0tDcEpKVlJhQ0MwUFBjNXNTM1M5eTZZSUZYT1NSUzFHdnFpTDIrWU9pYWZFa2NXQlBEZ2lIbENjcFQ1VDB0V3l1dlFVWlU2SExscFJsUDVlcnhwcUtNNUtTS0RFa2tYTXBVYjhNOGxxd0JNQklEZ0xRQWZBQ0djRVFOVUZEMEFEbWdHWkpsaWlVT1l1aUZ3Q05BSGRjSnRNS3dxeGd0ZTV4aDFnTXdmS1NOaDNMbFZNUWlmelJlSlpEQmRuR2FWcnNzQitoZUhpWWZneGtBalNuQ2RnTUlWaWhDek8rN2hjV0Z3TXpoTzdMMDVqMk1IQThqZi9lYzU3TjgxMmtLSVlnbkZtbFJKQVlJSnFEYlpTVy9zN3ZEVEV5ckpLNnozQ1JIUzNPZkhzZVFJWk4wWmd3bXhHVEQ3Qk9saFlUaytndE42U2lqV0U2KzZ0VG5NN25iczN0cUpTa01rY3A5eU92YTVLNVNJVFpGdEM2VHNMUkRBWGxtS1FKU0ZjdWFubXMzek85ckhzenFqTU1PdEpMNDVhT2JGU1lnRlRWakszb3RqSU9YOVBzRkVEaGc1QlJBbnd4T3lpeXdSeE1LQ2pDcmxKWUpENUxCSUU3c1E1ekl4Yk9lNnM1aG1iQjJsNFVDQkVpV01HUllNaW9INGNraWNNSFZZVG15UW95aHhkU2dZaGd5VmtJdFdRVXR6Vzc1am1TeGoyZHhZdTRpWXE0dTdVYmpiUm96VmdBVDRvSElDL0JmRzFqUThKSlBEd1NvWmJ1NXE4MWF5N04xV1p6TXR4bHo0ZFpWVkt3dXJVdjI3SE1BMHdLa2YraGJCUUNEQXpBZDZucDVtbkRnbkZ4YVhUdVhjOGNWYzVsM1lBQmc3SWlCaUM4c2Y4dG9kQzhQaGNQdFFibDV1WU9ldDN1aGp0Q3ZndzR3NjdzQkMwRmxBQ3ZnRzhDZzAwNmU0R0JwTlR0VTN6V3VJVzAvNk01V05JeFpkd3JGNURJQkhCZ2FlcHAwZ3lsR3hwVW5OaHpnckMxMnBxck5EMktzTU1WWVlkZDJCZXRDMGZCRUFZelV4NXVpZ3FobGlCcDMwTis0UjYxT2MrbVA4S3NWYzkxM1lVZ3U0a0JDQUZ5S2VwT2tlQmtENGgxTlVudlVMQlZEMHZQZlRuWm1ndXh4SzY3THhZbmRTUWZBVUhVK1RiQVlDOG5VMDFiMnJudmxrTmU3ZGorWVlZaTdzQWRnUkJ1Q3dBYmNCc0VBWVNRT0h5RUVjSmlyaHhmalFMRmhtRDRGYk1ZeGpueTZudHc0WGRtUFk5bHNqVk5XTGNqQWFJWTB3c1kxVmdWd0Uwd05rQVJlRnN0RG9VaXdQUWlrQlVmRmlFS0MwTHlGZ3VZV2dUNXkrOXpHRGxaajJaejNTOTJkYVZVYlBzTEl5S1I4SW1Lc0pLNDRUeDkzcWVsVEhlZlRYOWYzM1ZXOTJZWGd1N09WaFZ4ZGtYRmlXcElZQW5xemRMbEFVVXQzYS90MHNZeU5NdlkveVpxN3NQeGs4NFB3Zng5THo4eEFNaHhmN2Q5TGRMTlQ1ekhHR2FDSjJrd3k3cXdhRnlvQnNnSUFwSXB6VGxBaWkyZEdkbTZIWVRpMS9aMWFjNS9WY3F4WDNkZ0ZVVEdqeHNDaEZSM3h4MkJPQlhFMld0dVcvOWhUdm5jaTZyTHV3TU5FNGFEa0Ywc3ZUbGxST09QUStiTC9PY3g4d1g0SzFtWmRnYVBpZ0dHQWdnYjFGVHhzUmsyUDhWVFpMdXU3QitCMUI3QS9qZ013R1VBVmtERUNzQlNCWEJDZzdBekJYQkVCWEJGZzhoVEJFQlhCRUFaZ000VXdrQStnekJYQkVnK2d5QzRVQlZCbUN1Q0tDc0dRWkErQXpoWENTTHhRRllHWUh3R0VNd3JCS0Y0b0Q4SkFvRjQ0ZlR4MncxMVplcVZhaXdGRkFETUFET0FqZ0F2Z1BvRUlBam9BY2dBZmdBMUlBdm9IRUJwaDZDa0FpUUNzZ0xVQUllQUlJQklnT3dCVXdOd0g0UG5CNkQrQkNRRllBamdDMWdCckFkSUN0Z0syQnhCQUJWRndlQldCVEFjWUhTQnZncHdPQUZPRmNYaThLNEtVSDhLd1ZnK0Y0dklVa0Q2MytXd2tZd1FHV2RLKzJJNU1vU0RoVDhrL1pxc0RFQUQzQUR4QlBpeHdMWU9nQWdJQWpJT2dYT0IxRWdvbVFkUUJLUUJJeFk1ckN6ZEwrV1lBSGVPRU5PMEdTRmxvbnJwV2tHRWpHQ0F1K3huVjdDbEVaUW9JRExBeXdCQ1FCQXdNNUZhUUtFQVE0QVI4RTJ3V2k4WENSdWNBSk1BSXdESTFyR084cnJjRVlBRzBDS3pNN3lYWm1YMEVPcjJNSkdNRUJkOG9JdXJ5aFFrWXVCaE9pd05VQVNRQVI0QlRBbEppTUJTUUJIUUJHd1VnUmtnVHJDYWduQ1VBSUtBYVFCMUM3dWxqbnV3UG9DVUFKV0JkZy9ZcHBjMTRuWUZWZ29jN01kaHpPWXh6SjZSeHZPWGlrclVqUzZNSnd4ZG1yMVExOHVjSm5PS1ZuU3VzNGNjVUxhZDJkMktPTE1ja0Y0UWxORkR3NHh2bFZsWnhDVTBrY2poQ1VZNGlrc3QwbC9NWnIvZ3FnQ2JBQ2FCVUZvbFFCTkFDVkFDTGhTUkRydHcrbXdBTlFFV0VxVmUvdllEUUJ5QXlzWVJzekx5Q0JoQmhJeGwwSkJHWUtNSlhDQTZ3TVlBVGtBVGpoTkFZd0xZT1lBbHdBaWdVQ3dWd2QrREF3Z1lBRnFCQ3dYMkNaMGhtTGcrb3FXd01ZQzNCazltWUozTXpDbVlxNWpyekJyVXF4aEpOMEl4SE1QZ293bGNJRHJDYUFKNkFKMEh3Sk5RTGhjQUppQUlpbXZCZmhXMXBNQUo0Q1BobFZmTTMwemdsQUQzQm5wSTJabG9rMlJTckdFa1hJa0VmbFVvd2twd2dPc0EwUUFrQUFqUUFjb0IwQUdnQkl3QTJ3QkV3QTlBQXh3RjJBYTVVVEhna1FCMXdESEFCVmtJSjBCYlFIQXh3ZUZCZTBQd0hhQWNVQWMwRG9BVzRGS0Fsd0VTS0M4SkFSeGFFa0E1Z0JreUVCMmdTSUVhT0RndUJqQklBZGdOQVNncmcvaG1ENUtCNjYzT1hNMVo1UUlLSHlTREdUekZQYTZpT2M1enN3aTdOUE0xWWtUTkZJOEptcktCZ0MyVUhCOFNDY01BeEJmRkFZaG1HUVpDZ1RsQXhFNFNBeUJnRE1NaHdUaGtHWVpoa0tCd2NDUUdZWmhtSnhPR1FaaElIQk1LQXlFNG5GQTRPRGpMc2JLWWRDUDBxbi9vQy9McmQ4RjJEQ2J1ckFBT1k3QlVDZ2lWUDBxTXhObkpCYzUwakJsV25XcVpzYlYvc1JJSW15Sms4Y2tqdUwzUytTOFBkbkRHSXU3Q0NocXlHU2xzYmxBcDZmdVpLWGRsb3l3aEJJYTlzK0FqbE5IMEY2a0hYM2RnWUo1ME1DUWk5dWppZVR0R2hXbnVxN3F3QmdYQXRqZ0Q0RWloWnlpMHcyRkFuSzllWHYxV01ablNZWjNabVlaZFo4VlF6WlhHbXB2cXdHWWl2Z1VvSUxpR2taUTRMNG9kTTg3N3d0d1o5d3hkRjlYK3hDcXViTGFJQktCbktQcWR4SXNtckQ0KzRtS1JwSmF1N0RDVndFY20zTmZ5aDRvVTM2ekJRUG5Nb1lPdTdDR29nQjdFZ01KQ0toTUpBb0V3akErdFVMQXVpNkNIQ2NPMk1iM05ERVhZVGxoTUxjSmhkTHh3aHc0TFJ3aHc0NTJIQ0VvN01jeTdETUJRUVRaVUJPZ0lZQlVBM2hUQitvTVFFT0N1T1BCK0I4QjRZRHJncWJzRjdCZUZSd21ETVVDWnpDRWNGQVNHRkhpY1VEaGJNWThNaFBpRWhJY1EwaXJUNDFXa2lsVVZNMkNDQUJBQVJVQXNBRmNEMkJUQU9nQ3hBWVFEc0JjQnlBZjRLRUIrZzdoSUJJQU13SHdjWUQ4R2VERUt3U2daQU5ob2VBYjRmQXBnWThGWURXWTRNUS9JU0VNbkZIQmtMUVp4UVFpY0djTXdraCs0Y0Q5eEN3TjFxRHl4T1VGRFVDem1NS0RuRnZoeFJqbnlRdkZwQ0xuc0xRNTVSNWJGb2dvNlNFY1o5TG5DZ0k0dkJkNm5GZ1ZBK0NvVElROEQyY3dIZ29HY2tJWWxDYkNqaE80VHVDU0dZTUpSd1NDRjVZb3dvSGtrSWVzYk9jTFMwUFl4cENFd0x5d1FoSXVuSk1ILzF5NG1jUHNLdGJ2bU1hdGpIT2Z5N2lKbWt5NjRsOVdpakZnQXZnVEJNb0VzRTJIUTEvamd2RE5BU1ZteStudUR0anFyOHYxV1BZUk10U3hJYTlIbzJnUHBqU0VxSXRsR1pLckxjek9Fd1l1Y3NsY0xtWGRoSC9IUWJRaUpJb212R3hPUWtMWTBxeTBoSzVkM1lKVkpHUW1GVXA4b3BLQjY1REwwUDh4ZzhjLzNkcDVzaVVPV2w2YUZaaTUra3hMUG91N0I5RVNRZEFGY0JSamtuUGE0RUlIYVZUVTd4OE9OSEJjTVJ5ck9WODJvK2oyMkJjZ0gwMEZ3QXFBZDBPNXJhSVFwOHQyOVBOWE9nY25VeFptV1owMkdpT3IySXpjYWR5S3JEQkdta0NuMDArU1lVMU5XNWlSUTZSajd1d1BrNlFjRU45SzlKYnkrdXJUMkt5U3o3dXdobjAwQStBN0VWVE82Z1pNVVhHcFd1T0VPbXJ1eHBSRThRaVZUcFRvRW91REZ4SExtTFk0WU1na3E3czVpd2dnQ3NTRVZGTlNWRGdwRmN1WWxXZHhkcDAvVVhZK2ZaZGVxeTZtTnNmM3duSDBqWm54aXhQVnA1bHZjTVl1N0FLUUFFaUFIS0FKMkFEOUFMWUFFQUFaOEExZ0Z1QjhBSUNBQzBBa1lQb0M3Z0dSQWJ3Q3VnZFlGa0E3d0xrQmFBUm9FZUFMMkJVQVBBQmRBSFlEK0JHZ0ZZRDhHY0J4Z09JRG5DcUVvQzdBU3dDSGdKU0NvQTV3VkFGd0E2OEx3TE1CWUFMZ0RnQTMyQWNZQ3NBTzhFV0Q0QThtY05VTkp5dm42ckRZbnlvMWpqbFd6OTRHTkRHYkFHMUFGRkFLUEFpQUJzUU1ZS29mQUNPQUVjZ2FxWkFGQVc0cUhnRldBWjBEbUE0aFFMMnlXZE9MQm1GVUN3Q1FEOEVrUHd5Y3E0VUM4Skl2RndvRjVUTUlST1FrSTQ1am5JZ3NsakRIRWtYaHdnTUZIRWpQWVZ3QlJnQ2pnS0JBZktoNEFKUUFTUGlpRys1QUVVQU9FQWVRS1k1b01WTGd6QXVCZXh4R3k4SkN4Z200a1o3d2tDWkJjbzRrWjdBZlFBb2dCUW9CVjBTdEFZd0FrSUJJd01VamUrZHc3QURtQUgxWEs5S3RQN0FFaGRONFNDc3dVY1NNOTRvS2pCTnhJeDFncUFCUVFDYmdMUUZ2aFJBTjJBSXFBUjBCWEF2U0c2d3d3VUFnQUEzQUY0Qm5FK0ZybU9jd1RZV2grQTZ4TU9ZaGN3b1djd3BuWjJZVWNZWTY4SkNERzVIRkhFalBlRVJZd1RjU01iWXRBRStBSk9DR0tsQndoQU5LQVJVSXl6RHMxeFFxQUdRQXVhM0lUdlU3dFpnSE5uUy96NHZDSXFYb2JjU005NG1WTURiaVJmc0ZzQVQ4QWs4SnpjZ0pnRFNnSG5JV21GbEFBeVFGemRTdnpEQURtTU9leThJaXFLc0UzRWkvZUNDVk1FM0VqUFlDTGdDZ0FFMEFDM0FBQW5CNENRQUVXQUk3QWdvbllRTEV6aGFBMVFEU0FMd0Q4SmxpM01ZV3c1eUVNd0xzaEhKSWN4ekhabE96c3h6SEYzV2lPQnRNUlZGQ3hJeHR5TnU2c3NkV2d5ejJBaFFBb1lCUHdDYVFVUkJDZ0NTZ0VsQTk1dVhsMEtBQTZBRHZyV29SUTBzQmRzdkNRc1lKdUpHZThUS21DYmlSamhBbXdBWWdEVEFGR0FWb0F0UUZNRDBCU0FDVGdFaWdWZ1JXaCtHS0F2QlJBQzZBQm9nTFlBNFFTSVpDWEZaemc5QTJBVTRIRUNSQkdBandLc0pRblpxSVErQitCL0NzR1lTZ2tpZGhZWGg4THh3VGxITzBoY0svV2pFM0VpNnVpWlUyTlNKTnhJejJBSldBSG1CRmdCRUFCREFBcmdBNXdCc2dGT0FiNEhLQklRRzJCR3dGMkFIMkFYSUtnRHBBMEFZQU44QjBnV29DMUFEN2d3Z0pXQ01BMndFcEF1UUlxRE1MdytBcUFJNENPQWR3RndBRW9BWDBHZ0ZFQkhRUjdtQVd3SEdBcm9QWUhXd0IxaDhCd2dKSUNMQXVBRGtnZFFYRFhKc2xmVjc2OUVmdFp0TFBPR2tTOFAvSXZWZ0Z2RVRhQkRDZEZCSTVvMjBQQmEzSlp5eXVsYzRjZTE5V3BVVWsrTEptNkQ3QWVvcWFhaUJsSExPT3JPRG9KSW95alozeVN5azRoNWxoY2NramRtWGRnNWlzUTBDRERhQjRucFVGb3ZFNGxpYWZPK0tTNTMrNUhGM1lQbE5HOEFXRVMwRnE2NkF0WVZTWmxxeTloVDVvSGV5N3F3TUF0S2l5Wnl4Rm1LS0F1bHV0Tktmb25jWEMxWGtkWGRnSUVnandOc0RQYjJRYXNUQVVJVlliNmErczNndzRjYzltaDg1MitaZHhiTlVCbUJPRzlEUTFGd1BDQnpZcHVXaFBXVWwvOTNZRUFKbkJMQUFsQXhGaXBjcG9IZ2pIT1VRaVh1aHdtQ3FKL3FZeFYyblNTc3VWZkZqeXFEU0tMQXp3SmdhQnlBVUNCTENERkdFT0V6aHlVSld4cUR0OHpSdVhZNXpPNWlyRERyaDVwdXE2ZjBzYllFNEN3b0luRGdrV05MU1FFNG1KaVZqZXVmMnNIQ2pCeGk5MVdLc1ptRWNXWHF6VllzY1k1TllsTlNHbC9sUXJoSS9ReUQ1eTU3aEJXUzFkMkZZNVE0NEZGcFhNOGZCN0NPT0xpWTA0dGlqQ0YxR1dQZG1sMkNBek11ckFBSTdTd2JCMjdvU2UxUUJuQzhvMTYzK0hNYzRwbUFkenRWM0ZpVW1uSW1CREhKVEdQRm9Jc1BFTVB6SzlWY2NDaUxuU1pndXk3dE1TT0M4SUE2VzVjbm9FT2QxRXN0N2xzWm5iNXBsbW03dGcvcUFOV0F5QmJRcW5IaHlJMEJ6TnA4MDdlSERuZ3c2c3pSZDJBYzRXbkF3QUoyRXFxRXZEcFFoRXpuSHJwMllnVXc1aXJLYzRpYy9tV0tzYzlsc055SzdGaU9sU1NLTEFuQWpnUzVBVE9JUXVIR3J4WXJoYW5UWnpuS2R6b2MzZk0rWnBlNGlZek1lNWoyWDBVWVZxNUdUYWZVV0VzRUdHQU55V0VwN1ZoZnpuRm1wNE1GVzlwRE1Sdm1QWlRzejZHT0xzekdGMldiM3hlR1lScXdrZ0ZRTkJrRHdjSjhzV0RZZWF4cDRZclFwVTlqblp6TnlYbVdXajk0dVRzZDdBSmlCZ0Ixa0F3UUNZZzVLRXd2SUF4Q2dCR1FGdkRBTHlwWXE3QzJCYUVnQ3hBQmtMQ3dvNW1yRGpCeGhRUFJRNGNjeGpIT2M0aHpuc1lPV0ZBTkdwaVlURkpsZmxoQ0xYRWRPWUo1b1lGSkphc2F5SnhDVzZYY3VlVUhJanZabUt1RnUra3U3TmY1enM1N05GTXpIL0ZiQlFJWUxRV1VXaHBxUFJTeTV5SEx6Mk8rOEVWTXZ0MDFKbzZZa1lRNnpaZkh4b0hiRmc5VEJwVXNzMUYwOWhYdWp2aDdWWjVJeDdiYTJUVDNJbVd6VnpQelY2TENvSlZFbUlsV0lOYnBUbnFaRDVES1BYcHp0TTFhVStseW1kS3Y1Rkw0dGRUbTlmK2pUSkw3RDFRVGRGeWZnbWdQNU90NlUxSUxiSmlHd3F6Y2lxODAvdnF0R3E4Tko2bFpyUllKb09nczhhVkI1aUdRVm5JT1hsOGltVldYeFNhK1gvVm9NKzhlM1Izckpac0hFVERaQitQaERGUzl4cExRMVdjNWZqNXoyYVZld2lkWnE1YWp1ZnhBNUhCaXI2ZEg2bHBycjcyRTBTWlJhUXlreURhVFR5aVV6OVQ2MFArZ3hFMk55a2h1dXZQMzVkWm4ybWpLaHE2cVZac09ndlBTSFZDZWxCMGpUczFQZnZXZ1piYUN6UkNUVFAzMVRMUWdhdHZ6WEwraC9xYkRvRDEvbkR6RG9VUVZXZTJXNXoybVBSaWIzaUo2UzMrZEFLbXIwVXJLTmg4SkhBc2hncGxPdG8rbTVaT20vVXZjdlc3MkYvcHRxU01qWDM3L3ZwQlZSYUIyYXBNd3JCSlY3c2FUNXhCU0NURUplMm1yaFJ2TXJmMzFxTTFjSkdteHBTYkRSaDdTV2x2OUs5RnBqSVhuNnNOS2NiaHZWV3RSaTV6U0xqRmxvcFNqV3JmVFpvaFRvdXV4YVdDQ016cCs2MUd6bHFuTWUxL0xyMGwzWC9NNk9hcE81bUlpOFRienREVjdvRWZzT21FT0djdUNaQzNpcU10ZlNsYitYK2hySEt6Y0pPeU01c3VmN2c0Ulk3OUJyTTJUTFZac3FKM0xHeHMwYWllUERaNjZ6SFZvMHlYZGxtS3ZET043bGpQVmxXVnV1VWZScUNYa2lxdzFFVEEwU2JJUVowajJtZEtiNEw5ajQwMFg5NUZmTm1SQ3JWMVBOUjNxTEZnaklZQVRJU3ByUXloUHk3Rmh2Zkw5Tm1YczVFNjBwYktSL3BXWDBJTVdhaWJwOThtZ290RWFsUFNsUDNTUS9scllVMzNWa3gyWE5VaytmVC9KZUZhdXRCcjZOTDFZeWdQWkFnVC9nYmc2S2lJZEQ1YXN4Um1TTmxpSDdqM09WbjZWWnRzeFM5TnVDNHNOOFZUd3grUGF0V2lhbUs2ZDM5VnNXYWFvZ3ExbjBralYzQXljR3B6RWM1a3QwYVgwK2JLbGh4Y3RQVVk3Ry9RdDVVYmJPYXVESGk4UElhTjZibDZnTzZhdmlOc2FOTlMwaVhXcTZSSUNEdVNBOUZITlRuVExYU3ZTUlN2NXlydlpxZTcrZ3RyYnBoNjYwdGRJd3F4VUMrSFE4Rm5hNU1Sa3pud3BUMll0cDhsMitKek5CRlZveTE4YnZXUys2VUtIRzZseDNXRFdBd2cyRmM5SllkRTFHNmNwdmllWDVscGQyNEhheTBnZ3RhK3BTWVNRWG0xdVlkL09sMW9oSURZTHdzWEtMaXdyVVN6T3R1bGVITytIMUsrclV2bTA5MEdRK3R5L015K0xPME5UZkNza3RXUUJrZ3ZRN0ZCK2VvdDdrTWhtN3R6WmRwTVRWanFRaGs0OVBsL2NqS0tQYXVDOEY2c2FBblN3cWtMeC9pUTVOWk9zcGtIUTl1b3ZPbWpGQ0JGNlhjTEZveEw2TVNaa2k5MVNDS1dqcXlZNGd6WVJnWVJWU0VvajVSU1Vsa09icDdaaDdQcUwwWDl3Y1ZvNS9RZHFsMjZ2MVBtK2llYjNtdGxXYkNHR05FSU53VVNnck41WWJIRkdMRzVsODB0ZWhWZTVGVnZoUlJ5MGxZblFFREZyL0dweVMxYWFCM1JZUlFKMEY1Y0pKT0hIUzNmS0xXVkxOTHdSdWZGeWVodmphbmtqYm9lVXh1cmNsaXhRR0lsWU5vRElpT1FrNlU5T2JLR2o5L01OMFA5eEtFb1BPZ2pxMFVVK2svdHF3UFlMWjdFRGppZ2lRSnkxVFU3b1BoYXEzeDNYRXo1YWNhdWRMVmZhU1BSNi9YNzEySlJNS21wdTZpMEtKOWE4VHkwcXpYd3RXQ0tOVnlORHNJcHpQZXZxeVpoODZDU0w2VTQyZjRmNXNHSVRIQm8wbWpTTmRCSkpjcGZMM293eTRXZGxvUHJOaVdtSkk0dVA4bDRWbmViQVBvR0tGRWFVRkxsQnZ1M3BLUnpUTUtmZk1XL3EwK21UTndkcTlUVFNTYk5TUmlZZWNTVkZoSkEvQkRRV2VsSVFzblIwUzJsbFd0cHJhM3pIOTI5NlQrWGtrcXJqdDFQTitraWw4V0FKZWFOQXVBQS9nRUxqWlNTb2tTd0Eyd0JuRkRwRXhSMzNYZ0VhQWtlZG04dzVWbVl4empEakRMQVpKKzZRdWcxYk11ZU9RK2pQeENJQzMwUnhZQXB4WTRRaXNVTTNMWnpod1h1alN4eldaakhDaGJzNTJuTVc3VVdabU1hMld1bkZleWZESFpnY0IwT29BbG1GQ3poYzhxeHhBcGlzckVzOG93dXhtZExxcHpyQlhHalVVT2xNc2ZMNWZEKy8ybTZwZEJ6YzUvZjM5NjdDOFBvU0ZXSUJzc0Y3bHlwV2FOaXdtVXptYnF3OXBkdHRDQzg3TEhWdGt6Uzk5Rm5samt2aDJhSkcyRTBPVmpxMHhTUDRJcTRIMEhIOWdrU1gzSHhtYUtwVjJjWW91eXprSzBlVHM1OG1HM1FhcnFDN0xBVVFNVHlZR0lGVk5NYVFTVUlCd0l5ejBBd0g2WUhRdXl3a0RpMk1kS3JHVm9MdU15cTZ3VEh5SVVDSFFaWU1HVFlFOUZTQi9ISVJNdUdEdllMZ0U4SWc1S2dmQk1vQzh4aENJODRzS3oxdXpJOU9sbVk5bTZybVp1WXE0dXd1eG1aZVNtSC8zTXlqb2hHYkF0QVFSVUY0MEl4UXFkTHNWQ2hRdCtTVjYrd1RRK1h5N01obW14OUdFVW8wV0k1MG5jaXF3ZWlGWTRCakM0TnFYNVVDUUJYQlNud3RMVEtEUSt4WWNZOXJzNTduWVhTek9WY3F5N3NDWDVNVEFINmcwZWhRbTBNQVpSZVFxUFNuNC9rSk54UmYzZ2ljeFZqRERpSm11d0dRZ05DWUFDMEJQZzJHaWJmaGFVV3lOOUpPVkY0c3o2ZEwzYUZTdWpPSldGMmF5NXRrQk1USUFTb29RTlRLNlVBWlFZMXF3WWNMeGNXSStJTXhkMkcwQ0k0Q21EOVJwL3kwZ3JCaWdoT25Pem9rR0hmVG1NTTlvZ3N1N0EwaWJDZ2tBYjRrU1BTL0pnaTE2VzVtbHZ4WVBSZUxjN3VMc1ZjTUl1NnNGMkJESWZBaGtXUTFLWkZnZU1scVdsQi94UlZiakZaejVKSnU3QU9rQzhIUXVBeXdBSXhVQzJHT1RZa0JTaDhHSWNrQ0VNNVhFTEFOSVh1dzR4eFp6Tk9ZSmhhd2hjWloxV0tzdGxhSStxdzRuSXBNMG1KR0xhc0NzQmhLaFlMd1FEUldFTUwyTURJb09FQW5hc2ZlN2tHSEhPYzV6R1p6TXg3SlZZWGRGcG92T3EySGFsRHRSZUxCa2hneWdLMjRiVXBmUG5lczE4YjZhVllYY3I0dUxpd1B6RnRGUUZLVXpQSnBBRDQ1eUZUNW5UVTVsUGNJTEROR1dYZGdHb3lFaHVFQTZaU3hyUVRvbUhHMGsrWHlVZkxjeUZYUFlTdTBNdXJxd0dweHNzQnBBVW9URnlwK2tFY1BtVEdwZmZKUW9MWis1aUZYU1pkZHhZSHlUeVlFd0JOajdVRWpnMEd3TmNLZzNxUTcxNVpDVURGWDlXTHV3cmlOb1h5Q0VUNkVwRDVVSXVoY1MzTFhsc0Y0dVp5WHJDQlpkWFZnOW05d0NEQkltRUphMEltRThzM3J6bVExajRxcnN2RnU3aGNBeWdRd05hVXhtNFR5ZzdTYy92WXlHZDhrYkxPVjlna2xWMkNCU1NPQWZ3RTRJNFdpMVBoVEhNcE9uTHpFR1BkSmF1WGROOVVacTFxcVRGNHFQSWh5R0k4aWtka21nOHlRdGIxVjVZNXFkQkpGM1krYWpob0VMa3l4L2ExQWhGcVNXK25OYTV4YmZWZDJKMlFpQ0lnVXBKeWtja0QxTlRsbCs4cHAwa1h1eThXUWsxcGhOQ1J4bHJXektqdE5MT1Y1ZjczZGdvQ1kyUEI4QTIzTlFxRXhHQnBoUWFUZW4wSHNMQTBCL2lHWE1sN0haMkU1VE16czV6TkxzT09abkVPY1hSbStxYllwUWdtTGhjb2JKMVpBVHJXUlR1d3ZKSjc2cU5yVm13aFpLUWd1VWhKL1F3WVZNWmI2L2xoQzRZeGQyZ3RxMkNJcm8rT1RVY1ByMHY5WmVjT0swU1JkMnNuNUJkQ2dUTHRZSG1MVENWUC9YRDRKSmYxM2RnRlJDS05BdEM4S0paWjBvdGFMc2Q5VDVldGt1ZE9ubCtxUWt0V2tqcWliUG5UMjM5d3RDQ0I5WDlNcE5Ea3M3bDVmT3A4VVMxZDJOb040cEhEMnpvbVJJRHJxZjN5ckxoQW03c044MDhNUlEzNXNJeUdKQ2gwak5NRDZmQ3lTWFhkZ1lab3A0NEIrNzIxVkZIeEppdERHY2psWDNkV0FySVlEUStEc0RFR3lpbkd6MUFZVm41Ti83YXc0TFJaTDRmRDJGMXZjWFpiRlpxeTBQYk5HWnNKTThjQVlnTUJQOUtHb0JrRWdub2FZK0RNVHNmeVIxK24vMkI0ZkIwMkxVdUZnSllHRDFUNFdMQnhqZlJlSGxCTmQyQ3l0cDRNQXZPeVcvSEdDNWI1blUraHdQV09HUHU3MVVtQkxod082bnlUQlFoaVdPNWVjc1d6eVdIKzdzSXdEY0FRY1JoUUEyQU01Z0lJZlJDcUNnRndtRDRIUU4yaDZIbUhDd3VLQzVyTVFzSEdGbU1IRlNGMVBZOWovZW1MeHNXQkh3OERNQnFpNEMwRElDY0J5RXdSQVRRR2tjRCtGWVdCSjBoK0x5RWdCbkNTSjJCbTRLSXVGeFlUQzBKUlFvNEtndExEakF5SVErS0JXemh4Z2ZZTXNHYmhRTDNUTVpxNXR5T0dWL3hZSDhFQ1BGbEI4b0VFRmdjYk8rcmt4WTFhaERMdVcwT3pHUFpESnpIdXptTXpDN001bG8xQnF0V2JOV0Frd0h5aE1DTkQ4S2FTM0RlRnhCSVJpYTFGMUxad1NHZGJ0Ukc0WE1ZUnNzZVIxZlJZa05ldXZZSlJUclFoY3FJUFVZNXpaeTN6Qk9uSy9lREpRVE1KSE11N0JjclFOQjRMSjcxb01ZSmh2eXRYNG9Vb3NRNVpHN3N1N2Z5QVBCSU9MU2xMRlE5a2dsTExuN2xIRnYzeFJGVHZkMkxCVHBDSVFvclU3Y2NEcHhiUGs0eTRZUTludTdGZ0xneVdLQTRndTZkMEFjQk9Id1lUOVJnV2lkek55Tm1jU3pjUGkrYmtabzJ3Q3hnVDVDQ0VBQUVPS0MwSVpZVEZraFdRa0RpWkF2TGN2MHdvek44bUpkbWVyYWprZStMR3AwbmFMQWxzZmdKUVZGdWJsb0xFd3VYdjkxWEMzTVl4WkpNdXU3QzRiSGhzU0lFS0M2dzg3NHNnaDUzYm1QWkszeVpkcWFTZTdzSVMwQndWckhRMm1kTWxDeFFzT0xhdVMwTUlmblF0ZTcyZHpIcitZWmpNdTdJQXhVNjl3dktqU1FpVW5MY3h5ZVlXUHpOT1lXWXR5cmxXUTdNVmN4MmN3d3k3dmdJUUVoUUhwd1BVT0Rsb09Mdmc1T1ppRWNRQ0t3czVyM016T1VZNVYyYTdRNTEwS1VkT202UW1HNXVxeUVHSVhEd2w0a1l4QlFlcFRGZWRuTWg2NWV4bW1vNys1ei9tTVZjN1RkcTByRmhZS0N5dzk0UkNBUm5kUllNRG5GaWllVzVuWjE5emwrVldQY3g3SE1NdXpMdTJnTjRCdGgwRGNKU3dKWUJzQVZvZVBLRGhDUXREc0NxQm1JYUxaeFoyZDNZc0VoMmM1MmFYY3E2OUVYalRiRmdEa0FBcktBNkM5Wk1CdWdXQWtUV1FrS3orVUFhWUlnU1psWno1ek1VREpqaTlXYWFicXVwalJWZ2ZRRVJBckFKZUE1UUNFRFFCUGlkUEJGeWpFZ2pCSEhCT2d2dUR3eFFtWXd1eTJ6TzZzV3VIellSZ1cyaEpCa0QwTndLQUtJUElJVVZEZ1BJbkNjSkNvWkJXQjVCZm9vV0hNUTRjTE13WWk4cHBMRG0vdzRRcXVITTUyWTU3cm85YVB5VkxqZUFEMlJGMGROZmZTL2dIdGl3S01DQ0FLUklFSUIvV3dDSUFSQVNGbWdOVUVVUTRXQ1VEZ0EzaElIUlVUdUI4QjdjSmloWWhLQStNY1dLRGpnOEZyaWc0NXptRGpoY0xYTXpIRUpEbkdteGtiaXdid0lRQkVYRFFPNExSWURrQVZBTjVRRWdVVjVnckFVc0ZPVjNaaW9tSVoxTGNENC92ak96bVpoZjNSc1VyVjJDWkhDd0dNQmxoTERvRExDZUZVSG9oRnhDR1JZaEZvUEFLQUtnVXhhUXk4b09QY1FpOFhrSloyWVUwc2U1em5zaVdGMldhY2RLcHMzVDZWcXlBQkRRRUdCclNEaEFQQUdZQ0ZCdjQyTFNGRHlMd2pqZ3QwNWppN3NRc2R2TDV1RFRiMFdBTVFCY0FqUWtBM0JSQ2dGd0ZLQlFpWlFNQXE4c0p4YUp3WlFZU2JoSTZoYTZ0OFdLQ2VIWnpNMldEaGhqTXhscjAwYkdpYkZSNk8vZnk5V0EwVGc1RXpCRzBYSGpicGN1VnozTWR5dUpzbG5aTGpNREYwWDlKZWJFTVVhclZnV3drWHdRNEU3bHkrQ0Z3dElFTlU2WWF4d3VkcDVKTExhcWxWamNhRDVzUGhZdHdwTE4vcE9SWUR5THlIZjk4NWduWkJRcHpETXhtTE9NdUdMcnNPQlc0c0ZvSVlJYTFFcDVDRTRXQjBwT3FXNldaMllVSmZuUGNDcGRkZ1BweHlnRDVCRmhDUFV5MGhKaFkzenY2MHJIQWlsRy9sMk9WWkpsMTFkV0xWQjROQVNnWkNkb3BUNXhZSkFvS0o3eXExcEQ4NGpudmROM1lBQXcwbWdBS2dCQmlzTmFsaEtFZ1hpZGs1YjVRZC9tTDVLemtqcHU0dVVuTUFLZUJOanlUazRQb1BRK0tLSkpQYStYU3g5Y2xxN3NCN0NhUW9nRmxCNUNLTXFLVEJVR2dGSUpKSDJlYzZjSnhPNFBNdVRQWmltZG1XY3I1dE9OU0RZTXpWcGhKSVE4Q0FBSzZtTkV6cGFMUmNHSWtRT2s5aUV0SEN3VVJOTDF3NTduTWN6T2htYzl5cnI5YUk5akoxZHE3Q1FnZkJZTjFKaWN1bXVTUWlONGxCYml0ZVBwVmlIemNYRmdnVDBTeFlCaHJodnBNc0NpRXpkMGxPL3JacFZZWWRPam1XSzFWM1lHTWtlR2pRL1FOVCtTSVFld3FrS3JkNTFCaXdvT0UxWVZuTXhacXJESHU2c0NtRWRDSVdBN3J4N1RtTUJDQzhTTWZIbktmQ3hqSGQ5RjNHWEdlUk91TGl3V2hxWkNHQVY4VXpQeHlnNEh3U0pRODk4OXdlQzlrUGtqTFNxNFl1ZXk3QjZFc2dzZ1FFZURXVU9qOEVVczZLZjkxNlF4SklWODNkVzBWcG9EZ01nZU5YQ0tnWWhRNkNmbVZVR1p6Q0ZqYzBpbHhMRjNZQjJRbEE3aDRCZ2hLSVFDb3RRV0xVaEk3SVJ6cXFPT09hNXorOXhsekNKaGQxazBUZE5HK3hhZCtrdkhHSXNBclkwSHdRd1hoVUpnVEpQRGVDSC8yTlNJTTZDRXJtT3d0Ym5LdVk5em1aajJHSE10cHhkR2JXYnpUbit3RDhjMWlpeEk0MVJJV0pxTkVlRVpSUW9nVldzaDNkaUZ6Zm5PakZOK1ljcXk2ZkZqTlkyd2lCeWVKQTR3akZmSHl4QXRqeHdTVDJ1YTRUUzZtTGRURmFMc3JPY1o3RERyaU5WeDMxb3F3Q1l3Y2hZS3dBVEFEUEFUdktGR0JFQ09CRmdKQ0g0bkZxR2RpRXNRaFRBYTRDVGhpTG1FSzg3TTQ0T01CakU3aHhtWXh6SEVKRG5PY1hZTGxSb3BSZXM1d3dobG02TTVNaVl3WWQxZytodTJSNFZJU3VwV2cxcGRDZXRQdWlkVTh2U3RGM1dLV3RsSjVvSzJMazQrcE0wQjIxWVZUUjVSMU5HMWprSlBibEY3MG9WbDhsMlRhUTZrTzZLWHBnWWU0T09sWC9leXpjVlUrY083bGxqYm1aYUZQUVNMdWU0eEtzdlk2MEZNbDhha3EySTVIN1RQMHhYV3F1d01RYUNESlFlcEphMjkvYXRpYUcvWGx5ckwrcjdPcWZML0lLbUxIVGFqdm4rU0tQWVVtQXN6Nkt0S0ZPMU5lVW5uQ1NLeVMrclVtWXQ1NzQvV3QvTXN2NGRWTnpXdmd6N0QzSE1JU2JDWWxYUExLcUtNWnBYQ0h6dDN1STF4ZFNlY2xPbGVqOHY0dEpxZzdEKzNjaTloT0RBZ1JLcEpIRGp1ZTNkZlg2V2d0RFNyRGpOUFphTXBkSmVOT29ZeStUSEVDcjBRYkgxZXdtaVpSYVliS0lFL0kxSDczS3Fjc1lkbXlZWVhsbHFacHNxSW55K2RTdlZvbGhXdE5yeDBVdkpWWWNoRXhxZU9RRVVuSUtMYXFnZGx0emZhY3BjM1F0bFREV1BwOGwyMnRGOVZYYnE4dUpac3NGNU1Hc2ZGaDh2S3dPWm1vbjh0cjNhRldrVG54b3M4NDdvL2Y1dFBZK1RFdm02U1RsOVRHV3J5S3ZZOEIvRXhYOHFrSkJyTmQxWmFOdy82UzgrVEZXSVJDZzE2U0tGanJTcTN3YzcyRXdVQ2NReWtpY09DTS9MZlNrZGVwdmZ5OFhJSGhodTZSckdXMXdyUzY5eXZzR3NUQWV4RzRJSTNnV1JGdVY3ejNyemRHbC8zbTA0R2tFMlNhZXlNMHhReGd6Vm9ISjZXcG10YzlabXFMMVlPaFNVQVd4NlJHd3RVaXNxeEROUWEzNWorcTR3NmJEV0lRT2ZNOS82N09rNXNhdXVTU0xCckU0cVh4RTVoT1hjb045YmNuM3RiUFlyQkZWOUJUaXlGSm1jd3YzRjZKRmlCTmpQTmtSWlk2cjdGSVlza0xXVW9JMXBTOVIyaVRxbnI1ZG4vcDd0V3F4M3lrSzVub0Y1cnZYRnliMXM3MGkvc3FnV09DRHFPSnBZcko5TFAwUGRWV1BLS0xPWDRaOXlUaEF4YXpqa2E1dWJjQmdIVXNvczBtVFNJRk5NbFQxekduclpxZTNjdTMzUEtvcmFubVBhckpKSmZtYUlxdXN5RzZlcG9td1NvUlQrQktqaTBVbk5XV0xLekplSnA5YWVSMHF5NU55eWU2YXRkeEpKbUw5YnA2amxZMEVsV0I1R2xob0pqbHI1c3RIS3pDMDBxMmRLczcyY25YUG55MVdWVzJpQ3ZXckhjamt4Rml0WTZ6MG1ucDU1KzZEdTBiM1VubU85aGVORmcwL1M5TDZYeVpXK3JHWnh2M05WOThRck9OdzhhdEZwUHM2bktqZVhVbUpJdnF2Y3Y0Vmt4VTNqWDBSVmFZTFdicGExTWVSUVcxZFVOdFhwZEpubVhXWWh1OUVVMmJFU2JSMFJheHc1SWFVSDVTL0N4cmZTNTZFTHkxeTNNMDNralRaNlJlYjBQcTJCaXVSa2dHMThteGZYWDA2ZTdIQ0N6VGF6dEtLWnk5TXpZNzk5RmRYMmVKQWlwSGpZYUl0T0gxb09mWFNuNWEvcE13cTY4MWxUUDNudnErRmhXVWRNb1BxeEN0b2FEUFdGbjQ1TzcwR29KUDdkQkYyWmtrYnI3cWJHT05lZ1IrQkFpOGZDNDZLTDIyVWdKaTRPR2l5RFI4OVQ2SkgxcjB6SmVudXpCZzVWbHJVU05mSXBqOHhEaGpJZzlXYjU2MG5wSVZwZ3d3WS9jWXhZakVRa3hZdDUzRVJDTFdkdlVaOXlqZUpYMFg1ZDJZU091V25acmRFK0c4a2o1bDlhUnAwOUZxeUtMREFMamtzeEtsb29yZHBWNjFXdmw5WjFyMUl4SG92NytoV0xCZUNLZFNERWovR096cFVXdGI0ZXN2NTBVU2V6Y2FpZnZONktqMndwa0Z0aU1lcW94ZitqVkVMNysveVhpK2xFbmZTWXFDV3JrWnlUWml3aGhFRHBCSTQwUk9HcVk5cFZjTHpYTmYzejF5dDdHYWJOUFVtbm50Zkt2ZkZnMHBuYzJza3QvVmg5V0JOSUR5VGx5NGNLd2NkMTErMzVpMTh6NnVLVC9vMXEvcEpJR0Uzb1FuUWl0citTZFdyQkNFQTJuejBJOHJ3MDNJWmVuVExUTFpFQmx6MXduR09MeGZPYWFjOUt3WVNoMUZobzJabFU1YzFFdmpRdmRWd3dpNlJOMVdicTBXQUpZVUZKQUFZMEFoTUx5ang1elFGa0FUQVdxZFk1S21YSlFCR0FGMUtNYm5aekN6R1BJWFp6R0t1ZXd3eGxnTWxJNDRtSGpVdXJSQ0dKZHVndXdQQzYxWm9qNnNsNFZiN0FOYktiUWVRa3NPWEdYZ3pCOCsrS01hMmZJZUF6Nkl4Q3FXWlAzKzdHUFlXMHJjNS9IQ2xnbStIWWhDd29nNkpMS0NaYm1DTmZFZ3MvUVptcXJ6WHVjcTR2Vk9leXljTXBKS2puekxsZS96WmFWSXk1MzMwcXk5ZnNja2Jja0c2Sk04aFVjSzJTZVFzYWZtclFkcTMrS2ZEbWRDc2wzRWpMYjBqc3ZKYVpsYXMwSUZQOWlFM2Z0amVuOVg2cGZCSEw1c0xRV2hySEVMVnVXMWpCR1FxTldwbU5helFyM2xkMk96akxNeTFGTytacVgvNkxHVnpvYmpmRDUzc0NDaEhHZ2lnUHdmQ2JnblFvVkRlUWtEL0VwQVF0S0RtRXVERWNmWGJtWmpITUxzTHV6dFJoejJCOGptaFBJSVZoVmd3Wk5naEY2UVBvbCs2dFp3d2Q3QkRoNWhjSFdHeXcwbDBocjRiR3czSnVuaTF6M2RtWmlqTTVtS09Zek9ZNWpuWnpETHM2KzgyclgzL1JWZ0FPQXRsVmlvVHFTajFuSGt5eWkwTXBHYWdVeFFjWXpkaGRqdDlTcmlSenJVVlNzSU1QUHNEUmM1RUhJRFNXenlmcEEvQWh3a29LVVRoem94Q1dFeEM3ZHZ6dENvbXBWeGh4RzdYWUNhQk1ORW9ERkI1bkhyVWFlSkFrQXhFOUw1N211cVd1bDhrVEpKSXU3eURnWFFDNmc3eXVVQkh5SE1jbmx6MnJsYmhjSjJUcS9WY3JPWTl5cmlSbGw0c3ZOZzh6d3VDd3BLUWxPWGxneEFVaTN0Zjk4NFRsaGNNWFE5eGx6RERydXdhMEU4QWc1QVBuRGNOd2NnL09ZVFEzMDB3bVVDUUo1bmN3NThsaTdESHU3QTNsME9CNEEyUkpDQzAxaVFFTUdKVDlKdmZMK1dYbVFSTWNZZGRYVmdTenRJQW80U0VsclBRb2JCMWF4UmZML09YOHpzTU03SDBTVGQyQXNUQjgwVkFJcUhFd1VVWW9Ib0tNR0R0SVh0cDB2Q1NMbHNtWDA5ejNPSlBhQnVSM3NnZkNLRkVWV0F4d3VHalFTakV6eWJXRmNFZkxscUM4dDdHTUx3dk1leC9jMTlLc011dFNIcnRrUmhUWUg1TWVRQ0dLM2VVRGtzdi95dGI0bjZmbTc4dnlLTHVMQmtHMmo0T3dEVEdzZ3RwcENEeVdIOHhCZXJMenNPYU92MHJKZUNOenJ1d1RKVm9xUEJRdU96SnhBQm5oOFdPeUhMc0U3NWpPTDkyZFRpN0RFRjNaMTNZQURKNllMQUtJQ2VKajBycElTSUI4cG1wTXpPaGlFVU0xTVlxeDg1MU9lNXdnczF4WnA3aVlCVmlBc1hnTUFJRVc3VzQvTjU2eUVjS09leWZKbGoyS3VZU091N0FUMEZzVWpRSDBHY1ZNOHlnVkVvdDBmVG5lWGgrSGI2anZjWFo4N09CVXNxNnNPeDZoVUFmWVVCT2dsNWN3SW9tTFRwamR2ekdEbXBYbDNLOThHYXU3QUt1SWtBb2dOQUYxZzhuMGpod1dpMFM5c3FLcmV6T1k5MCt6bGZZTlVhbDFGZ2d3dkpqSUdZSnBHUnRKNGtXTGlGYW5YcDgwVUhIZC9mRnBVK2JBazVlbk45dFFnQzkva2wwaElPNGJ6TkYvMWpqdEg1TEYzWWQ0ZFBDY0p4dzFrZVJ3VENZcGt0U3N1Z2N6bWtydmQySmtPYUF5aWFSMHl0UEIrNFZ0MzBlcFdxeVczWmVMVEVhVFFiUUpqSjVZMVRDRXRxVmg4NXhUT21idXdxTFBPQ2NBaHlNejFOSUQ3RDFrTk8rbFdRUllQZXJRTVdFVldYcUxwOVdMVUZyNFVHblZFSFVUWXpmdytsWm0rcWpaeXMyRnk1Z0lvZEowb3VkSXJERmE0cVZmR0tDN051NHRBbW1vVUNFRnl4cDNINUV1aGM2dDZiTGw3NXBMTEx1eDhNQTNvOXFRUWhGQkJuRkdGU0FTTSs3bHpUSllRNXJDOHVZNlpva203c1Noa1Z4c2xtSUl4M2FPcFBoaTI1Mm1XS3M3M1M5aTJYVlhvZzJ3NEErQ3NYTkJiRUltTlFIemd3WjJOemF6SzVBNXpXdXpNNVZ6R1BsbWNxeTdzTkFpcEZBcEFmUVdoNWVta3d4RnkzTzgrU2t1TFFRNm1aMVBacVpuTUpQZDJEY05wSmdmUk1kTXBRNUFxTGh4UkRmUmtIYVJ4Mmx4RzRvMjdzSGlad1FoSWF2TjhsQ3JCeHIyNk5Yek5MK1NNdTZzQ0ZnVUpBQmxpRUdBMFRDY1hFSlZub1RJRmhLVWNRWW8wc1daVE1XekkwTVpXYlNybnNmRHJHa1RZM3lObFRzbDEyQzRGeHNsQ1lsUStTa21vd1J6L083MEJ3Y0tGSkpZWTlsbDZzMkh4b3NIUnNvT0cxTjRlZUhYVDNiS3NReFk0emNsaTd0dEZCc2dCNEU2U1hXN09GeFprblE5ZVlIWTV2T2FSdVpxSS9GM1pTUjJBWHc5aEpLZTFvUkFZQTZRT1NmUGtxT0ZtTUxFakdEQnpMdXhPdzQwV2c3aWFLWEdGbzRIZ2pRblNyMnY1Q3dqbmRkM1lBM1Eyb0RxQXhnTE1MeTNLa0lZQmdDaENBRnF4T2VtVjQ0c1doNEF6eHdjY1E0Y3pzekZzd0pER1oyWm5QWkRIdVlxdzVWcDVGVmo4UFFTdEFCbEFVb25EbkhHZ3lnaVNCQStvbkpGQVFZU0lZNVpoZXJDZGppT0wzcThNbkdvcXpZTUVndmt3aXNDSUpndkVvTGdMcDBUMWlZVERram1XM2ZPYzM0bzltN25hSzFaaGVGV091a2pGWExUcE4weEZ3S0JvV2l0aUljaE9ZSkJHTlN4YnNVWTBoS3VZVVZZVFl2NWpOSmx4WjJjK1dHR1hoMDI4S1RyS2xoc1VsVGhFRU5DUk9FVW93c09EaStWeGJ5d3QzOHFXZXg3aUZ5cm5PTU9NTXZEcHQ0VXphQ2hOQUVrT2FFVHBRRThOWUptelB4WmpITWxoWnZiL21kenRQZG1Lc1k1enJ5VVhTazJzcUl3dGEzc3lPUVVXdzVRbVB5c3F4dVpLdGFYR0hidGZUTXhYM2tyeWtXa1dKMFBqWS9sQjlrbEc1eXh0am14TGVaN3U1enRONUs4cGVBd2VQbkpNSC9uSWY3OUJOcnN1aU9NNjk2dkorK0ZEQm9mSTAzTDdEV3kzRThkcFo2bDlUdXhXWEVicjNSdkNuMjBIRHFOV21uNTdWdHpWOVdjdHBtZEY3MWVTNWlyb0hDdTlGRVUrcUl2ZDczd0wwZFJoVnZKUGQ1RzBnbkk4ZHlOSmFxSXF1OVZyRjNmTC9xMHZxTHZJM3dvQm81SW5TaVcrRVhlZWxOWmJvV1lablM5MllaWmNlb3Mxdk50b0hrbjA0cVMwU2ZrSlEzMHd6eXRpc3I3QkFZNjk0dUd6WllVWlFHNW90a3F4eFJ4QXdzV1FVVHkzTFhxak9XWmQzYUM3TGhHTGp5aVhxeDRDYUpsUTZEcE1wcENNRVloWDBHSVNwaGR5ak1Xa3RNS3UxY3UyNitSZlZ6cE5OMGIyRTRNanhJREVMQktJdzJ3ZEpDenNkQjFEZmZOWmJuc0t2K2pPRUQyK0xoR2FWaXdQd2NuaWNDRElveWsxUndlQVdBSXNMeUhTeDZEQllVQ3VENnhiSHcrTTU0NFRZNTduWmpITVZabldYUnV3ZEFYQkZoYUZSV0orQ0xoYlMyUTN1WHFGSFlRNTJwV2N3aHl5UmxYZGtNVHhjSWxEalZOMmljY2IyNkgwOWtzMFZOMWRnNlNnZ0RnRHR1bXBNcUJ1MHRPaWQ0bGhDdk9aSkpQOTNWZ0MvQmdWRnhZS3dtRVEzTXNhaElkSjVLZHlyTkpOZ3V6V2FKVllyQks2MERjaWRxc0I0eHFiNXNBL2dNZ0ZzUkE5TUJpU1dOTHpEOGxYUG41Y09MTmRMYTBlTi9EbVIxV0tzMCsrTXZOMVdhbE1OMDJBV1pCRUZzSlFNUXE2UitQRXdJUWNDZDJ4cGZEZU9PRitnbGRCSlY5WCswSTBMbXduRHpqaHNJZ2t4UnVSVUUwdDZGWjFPeFlQQ0Z3dGZ5S0phd2ttN3NCZ0NWZ3VBMEJ3U1N0SnJBUUFrRXdZUXVIdFpEcWU1eitZZHFjM091NHNCT0FTcUpvS0JRT25JSlRKUUpBUGVFbVg2YjVMRUpPUVlSeWRKZi9GaXpGV0dJdTdBWWdFc1VBeEFCYUFaQXlHODNISEIrR1FuYkxYMFRXT0NqRkdGbmN5ek1aekxMdUZhc0NieThvQWJBT3prRXRBZWduU0VUNXJVS1gxSHVkM2FIMC92b2hna1laZGQzMkUrQlFJSGNhVWxFVEE4aDVPblZNNUI4c0x3WGt3N1FJTEx1d0o0U1FISVJqd2p1V2ZSNGVDNEtnU0hINmxld1Bna2NjZXpVWDczT1ZaZDZOUnVOdHdGRlE4QkNBU0NpVEc5cXdmUXlFcW5HNjNXeHdvRitMYWkyaDhaak1VWG5HR2FjNHU2MGFqTDlyR1lSSGtDTDJDOHh5QWxVVTVTSDltN1o2Mzl4ZHlzcXhKZWhCWmNYWURHSERSOEFVa0JwaVpxQnN3V0JReTdTZHEzUTdHc0x5WDVma2xYZGhTZGkzV2xTSDdmZzhEZXBtczNPNGVnOWRpMWtYY3hobDEzVmdUaURnamcya0RBYkdqWnpTelJ3SWJWTk9aeXJSY1dMQzR0dXR4bWN4akM3c3lZY1hkZDJXWVZLQVVZRkFRbm9JY3FHUU80Zlp2bGFxOFVENmU1OHEwWGNTeGQyQnFCZUdyUVR3akJ3RXArVFlRZ2dBZFZKYXRkTituQmp4YktzbDVZVS9jWGM5akhHR1hkV01wTEtnVFJVUkhodFVLRkdCZ0xVbXBTK212S2xtWnpIT0luRkdHSFA3THV3QnF3eE9CeEFxUUtjRE9RbFJRc1RFNDRKazRKdGpTNTB2WTVsY3ZMblpuY1lkYkVYMWpiQnJuVWJLVmhLQ1VDWUJKaGZpekFKd0UwSHJpenNnd2NIQXhGb3RMTFZabVA3R1BjckwzUGRhU1Vhc2JIdVpyU3JOZ3lBQVNBUVB1U0J0RVlGS0hxKzF2U1kwS0VzRkQ1MHl4Vnd2SVdSSHpKSTNPSW1YMDFxeHZjbmpzRjRzQmhBSStBb0JvVmNINGVDc0dRSS9UWTVoeE1XQlNvT3lwTmhEbDVzdkRKaEN3dkwzUGRuV2k0N1RwczBhU3lXOWdFMWdGa0RnQm9BQWFnQlhsUmFGY1NBbmczQk9nY0FFZ1p3ekV3UkhDYkF3a3d6Qm9BQlVjd1h5VmNRdWNXWUg3Zy9MQ1pqeE9PWm1DUzU3aUhPekJ3WE55UnJJaVREaGl5OHZISTZ0VmdaNDRQRFFia0NRMDBtMDdsYW1scitZTGMyVjcvVDFXT2NaWTYwbndsOGFJUHVLbkd4dllPV09jM25pbVdsQzI3emgvTTY4MVF2ODFhckx3N0NTT09wNjJtS3RFM0hQOFBiTmhSS0hTUEo5cUtra0NDL3BkTGV2TmZ5N1pZK0hRd2tkZmlhMWJ2aHN3cjdOcHBwMk5tdFNEZXJIZjlOZ256ODBFa21rS1l4MUZtYjZZU0x1WStIWmtsNWV5NXJVbE9SZkdiSkxWOVUyak0rd2NCbzhabnR4M1NudVVLVDk5TlRIOWlId2FkcVNmOVA3Q1d0TmpwdFpHeGV0QThTSFpKTlJiRy9MN1VHNW5RTTF1cXdrZGFYak1RcDlhZVJ4WjhhbE9yTDVrdlJlckJLamdyWDZUSEFuSUVLMG55NFJpdWxyZEN6TUdLNUV6TXMyRTRwNjNacG1mYUtLNlY2R215RkJ2RzVSUkZ3MFVVT254MlV4YnBWNzRzWmI1T2szdWhkR0kwM1I0ejJ0Tk9RcHVucTFxc044bWVLWEhEeFpEaW1hK1BieW1YTzhGMXd0V3JOSDJtN3owb0pKR00zaG82SDkvMFdvVEpsQmFQclFEQnJDdy9ES0xLU2hrRi9WcWJtOHhVbVhYS2VscVdobW52alVYbStJWk5OMVEzY2w5aE1FWjdBMkZTRVBYU2lXVWpObmZkcXZibVdJZEJ3OXpURkRHclNlaWRGaDBDeWNzUXVhMm10TlJ5MXJ5NTB0ZTdtSEdKdURZT242cnlPUnNWQ1QwSVpHMDJzVGRxcE1iYnpudGhyRE1HT1JSZFBiTkwrWDJ5L3JNejVHUHZRakw2bXFpZXJWb0RacFh2SDF6anY1cnI1ZnVoV05ObkpwTmJvUlhHajJpY2JNdmlyRnJBM2tySkFKMDFFMGpsUGhXSm5WTzlMa3d5YmJteTN0WTNWUmR6TFhTNlB4eWFDclZWdXNyMGcwSERuRFFuVWQyNmxxUzFyR2ZVWWgvVjlvaG9raWRQbENpV0xOR2paOWJxUmFoWVJITlNKaXVIQ1VxaXJMQldoV2tqbHpDODNoVkp6em0xUytaYmVZa2svcmY5SmliTkdpRTNycGhOaFlieTQ3WlhwK09JK3E0bFpjRHc5TlRqNHpsbVp1VHh2MDlONjFERmV3bGdmaEVISFFFUWJTNFJyUFh5ekZzYkxKY1k4N21XVzE3a3NjcHZKZXJrMkRsVHJnTVJ6QmNRSGhjRjhsRlBWTWhyVHMzdXpIMU5mbC9mWE1yNjF6by9HTTNTdnlPcTVRSDAxcVRYYXNnNkg4OVFwbHJ6V1ZweTN5cnlLclBiK2Q4ajN0MEdJdEtUWjgyd0Z4b2hhVmJJUVhta0NHYzBvdDM3TzR2OHpkVmxuempjcDlLdmhXYjlSV1hPcFdMRVFsVUpoQ0tyTEwwNWJGRTEvZlY1bFdzd2paYUc1eURaYmZ4cVBlYlpNY1BQQzhjNjRwY3l1RDhlNVdhM01lUzduMVp0YW1TbEw0ZkpmMmpEMHRGbFNpWTRzV0VPS0g1clVHTVlnenZscmRENjFYVXRXbzBlODZkTE5CbVdrY0dZdU1jMDZWN2tWR0tteHdGMEwwbjhWQ2JCQ1U3MjVSaW55MnRMOVdYc3NaT1hCdVJ5RXpadEplbFczSWxHUi83amd1T2hKZGV2bk03NU1UbXZoL3ZJblBvN1JPcTQraDhkZWJOaEJFelRXNlNBV3NLZWZIV3RuMHNkSmZ4cFZkSkV5MFRuMDlKMlFnaTc1dW01S28wczFhSjBXVFlwSm8wZzBSclVHNGZTeW80MWJjaE1RWGN4ejNhZEw0MVdPOUUxRHhwMVRKZnNwV0xmR2ErbGZ6RldHQUxkR295cENtcUlQemFPWldsQjBFWHVZU1Y1eVQ0ek5SbGxvNlh4dVk1SFZoaU5DUWVHbUpvYWtzaDhkdmx2NityUENCZGEwbHRDeWVaL3Z6MWltcDlpY29jRXNvaWh6MXBuSXBTczVRc3F0djNWYmM2T2VaamZTOXd3OTZOWHFSaEZqZ0UxSTJLVFhEd3Q2aVIzMDlBNURkN0RDNVl4N25XaU5hWDBpN2NGYkQ2dVI3Vk9tRjVkZ3ZCZU5JRE82U2d1VFgzeHBRUXhSYjZJNHppVjF4cGcydFhjU1JwdXQ2cDhaZ3c5Z3dqVHo4bGlqS1oycnpHOWpkRFdtSmYzL2N5NWx5amtWNzVjYVlNemZqR3BSTzVMN0FvR0tHajQzb1F6VTVpZk82czltYTllcmtuZkYxUEE3bzBGNXVVWnNBVElNd3ZCNkFNQUFRb0M3QUo2UWtBNENRQlZRRExCUUVnbkd6OFdRRm9tY0JXZ0hYRXhDSGVuT1k3UUtDRnduSEhzWTdNd3ZNdXNDZkJ3d1JBdUR4ZkhNV1FMRUlZdTd0OU9abU1GMHd1SHlYZG5jeENyTEQ4RUpJVVFjUWpoNUlkWW80SW9vRDhUcktZcG5aMGk4aERNdDNVNkhSbVlwaFF1Y3pNZG5ZdHZ1ek1lNEhjRWlCbU1JSmNCL0NrRWdYSVpqY29jUUVMaHdxbzB4RHlFcG1NSkhabGt3cWhpMWVrc05sbVVabG1kSkt6MldDVUZDUjE1TXFPT2dpZFRCZzVjMmlBZ3dHMEJMZ2t5eVlMQVpLQ3NSODlpbWFKc0p5SFU0dTZad21jNzZpS21YSWZCa0VzODZVaUdaNWwyY3dZTzAyMEVDQ1lHMVBvRTNjc3l6TWNNR1Y3Q2VFY0hRRHlVQnhFUU9RUnlBY2hnbklYRURTb1NCY1RXdHJvblN6Rm5Nek4xWmZWZ1NoVVJqeVRHbEMwdWUyWW5TVlp4alZpb1JnMXNXV09JQ2ptYVdmZmNvNlNYMVlFREd6dzhDcUNoREVoVUhFdElqREZRU1lzbG1GbU1LQmtPTmM3ZVh1ZVVkVE14N25zenZZSmpJbWcza0ZFVWpCY1dCUFJxQmZISkluREIzc0VRRVFQRUFUd01RcktFK2NVcFI1YlFVV1ZFalNlYzdzWTRoem5NSEtWVzR3NGxjemVvMDNNMUhuMkEyUWlVS3NKbE9GclpVYUpSeFpPSWF4cW90TFp5dFRuR0p0cXFWV0ZzUFBtd2NUUnNPd1RBVWhXUEQ4RlJzUEFORU93M1kvdWN1UndNeW1ZT0dXVEx5SE1NT01NTXV1ckFmSTBQOEdBTXdYUnBxeW9hQlRDbTRQQzA2dDNqaFI3Q2pkTytyUnF6Z08xbXV3RFhEa0JGQWJhSUxpQS9qaDlFbUVoNjN3dDlFSXU1Qy92ak1uTzFNTU1WcGxsNHRGVTJ3SDhzcndubGhHY05zNklqRmdvRExJUkxIeXdKSVNSTUtIY3o1eFpiaTdIc3U2dEVFQ1dVQklnTkpubXMwSFFIOEtaRE1aZStheU1HWW5qTU1zMUNaeEd4aGxsM29zQ0VDR21nbUFHa1FGSVgwR0NURG1qazMvdkZ4WjhaM2pkaXJjNHV6T3VyUnRNbTRjRncraWtuS3pVQW9qaFZCN1p5MjZYU3gvclNyRHM0RHRkZDJBTThCTmp3ZkFNVUVjSFFrU1JZMEVJQWJncUpKckUyTnpNRDBESG1Qbk9mRE1XY0daTmoyUGMrcllyL1pETzYwS01RNndHT0dJY0hnblMzRnEySERpd1ljT0ZNeHpTclNta3NKbVBidXhqcEx1K3B4STZ4NVZka3pVY242b3hOaUltd2FDSzd0TEc1U05XcHIvcFZZQWV0bDNZRk1DMzJoWEFMRUpGaHBxV3NoTEMwcVRxaTdNNk0wcm1hSDByRG4wU011eTlXRkxUeE9nMm5iOGhrS29lS2FVNWRTMUJhRkhEakhMektNc2tJRjEzVmdNM3NFWUdPSmhaNWhCSkJ3dkxhWlc3T2FPWXRJbVpuT2MrSFp6czRzUnpuRjNYZG5Bdkhqd0RNQVR3b2FqUzJoQ0EweE9XMzUzbFZvWWgzSDVoM3pzd2xaZDJBK1NnakRvQ3JCb0Y1OGZEWlJpMEcrVHY4M09GdWJvMHE5VjNyTUlxdTZ0RnNxQlFEY0lXUGpNdzR3YzVodW9zT05ZckpHeFZsM1lDSWp6SEJJQ29LTWNsS1E0SGduRHFEMUM4c2RMaHl2RWw0bDdwZkZ5clZvcXo3TkErRXd2QkxCUkJ3TkN6RXg4U0JGSVNjdFNmRCtRL01HRE55VDIxRjhhTFFtTWxYdUdJMEtoS1Q2Y29uU0o4aGt0eTdSY0xpakc4amN5U3hKRjNZSk1lN2hhMFdZZmlaTE9jb3RwaWlhc3kraUtkRjNaWWF3TFFNQUw0bVU2Y3dXREJwYXRNS3R6WE9heTdzTUJvNXc5R1BHK3NWRkJicWFUZFQzTDdCSzVqbnlSekpKN3V3cWsyaVFFd0NQS0VFVUY4eUJvQTlLSktLTDY1bG1CR0JVY3JPbDJjcXZNR0RuTXVpOFhZVGptQTVzaHdqTFFrc2hVS09LbGNma0pheVY1bnk5UkZKTFY2cnlKcHRvZ2ZCd2FLSGpnMm9uQzJ1bmh1VmRvLzdGcXlzb3d4MWUrbk9MdXZlTHBzM0xSc1JGWEtJYWZMU2JDaDA4K1phdEJobDBtWTAzWHRGcGlMNHRPUU5SZzZWeVJ6cTFFZjcvZTlYU1h0SVh0Uk5nM3ArcGxXWjNmRVhxdmU2QnhTTUphcjFYa2JLZzQ4Vk1rbVZTem1McmRiSGZOUVdSVE5LeGVScTRTUmk2RHdSSW5wSUtEWTExcEY2UGVUYkw0MHZsckxqMWNOOFdQRHdtYU51Smo1OENvYVU2MitWTXVHN3MrcGJjNWtNZnhCb3c2OGxlVXF4R1dEQVRmckVqSE1XUEp3MTByRmFyZEtySVZraTVKVjRkdkptWnNUQlFDNEQwQXZWR0FlaEVzcEx0R1VibTVSM0kyK1h4ZUhieW50elJPRzNoSUdzOHNQZVAvRHlCOFA1RjJYa3JoT2pFV0V0UVJsUTR3dVJVS3BGdUpNVVVXVmxqVUZOTXd3bzdVek1jOG95WVptR1pZNjhsZVVneEZoWkpSWTJtVVRJQldrejlxVE5VcnpVS2N2U1dsM0xsbU9WYzl6M01WZGVTdktRWWl5YWRJQWswQWEwUjQ5Znp0MnRZM1RNUjFhZkhabkJBMWVIVGJ5WjFnQzRCaUVJaEEwZ0FPZ3dMT0VaQUdNZ2JnVjJLRkNFU3NLbEhEZ3RBcUJjOVpDd3RuTThzWXp2aDdzN1U2OTNvemY4cEcxRm1sYXB1ckkza2IxV0dBdUhUenBtRW54RjFWNnJXRGNqeTZWM2tia1BOQnF2dlZlUnVnOHFpNlY2cnlONFBES1Y2cnlOcEI0K0ZSMjlWNUd4a1BJanFqdDNrYk9GNzRWU0phdThqZUNoekNSTFYza2JOQ2dZcEs3eU5taDV1ckE3ZDVHOEhWVlN2dlZlUnNMQmJXaDllNzFYSWNtSTk2cjFYZzQvTCs3MVhSWCtuMVYzcXVYY3hWM1lkQlJHd1h3V3dtaDZDVEZ3MkdJUkJRRU1oRHdPdzdEY3RoSUpST0p4TXpPSVJZUXVMc0tNWVJ1YytXTVk1em1NZGNLMVlEUEFVRUtJVHdGRUI1QXpRZndHZUhJQ0dBeGkwRUlFWUdBQ2NDcUhvdmtYQ1JvWkM0S291RmdNd0cyRlBqakhFSU1vb0NBQ3FMdURNRW5COEtBeXdTbkZtT0Ird1NXUEQ0aE5SczM2SVY5a0kya3dzVlFGakN3aURvbVVGb29JRWl0T1lMWnpwY09GaVl1WTNNem5GSDB6TWN4am1abVlYWlpvcDNOanpXcWFzWmRralpTbW84KzJnZnozRCs2UlZMS0hNYkxDeUNaTW9UUWxpNWV2c2NZZG9leGpzNjQ1dHcwNmk5V0NhQmdjUWdsSEVJSG5JTllWQzhUTGF1Zis3RmliR01kdXNqWG5aeG51dkltMWU4OVdLc1BBS2NCaEJ5Sm5HZ1BRQ2REQUp3VFNHV3JLa0JhU0VtV2NVMDVqSHVIQ3pOVU1ZOW1xOS9MNGlySGhtZDhqWlVBRTRCdkM4S1kyRTF3TVlPb0x4WDlzZHdMNFBRZXNXeGZXOXpzT0ZzTDkzc2t1eDdqRExsellOMDFWNEJlbnBKUnFpMENnUndQd1NRN0hBWFNvK2VnZUdBbkNPVXdyUWdjOGlVb3djS1RtWnpuT2M4VEZNVVZZeDJjWFpkbW13YWJvaXhXcFFUUUh1MVltRzFDQWhLdUpyUUtDYUhPYzJTMHNKamdsS2FYdWNMUzJZd2NabVBjeG1jNjdzRUlCK2FDSERFUEFxQlJYUllKMmNWcklaRE1XTFE5Yzl5eE9PUFpuT1lKOVR5RXNxeDJoN0M1Unpyc1ZCSURrRTZHSUdVRkVjT3prd0p3RjRUc3J6M1ZuQzBYQzF3dWNzYzlLdUlkeE1xd1FXWGF0V0FXOFRpSUQ2b0R3QnFnNHRLTXdZRGhZSTRNS0NtbVNFcUxoY3ZqamlHV0t1WVVZekZtTWM0UUhYRm0ySVFiaGtNQktCUENJcjVrT0EvQ2tWRDRnbU4xekdGeEM1dzV1Uk9aaHd5NTEzWlVSbFJPRm9Pd1lrQjJKcU1DczVKY3RZK3ZJdEhHT1o5UHU3RTRTMmd2TEM4dEpxbUppTUtZbkZpUmJUdm1MN014cEV4L0xzTXN1N0R3QUM0S0pZRFZFZ1Z3WEdDVU5nUUlrQ29MUS9ERW9PS0ZuRVBZTGlndGV0WlJnNWlqcHhDUTl5cENxeGxvcFpFN1RabzJpYTdKUXJOaTBHSU9RSmdGcEpZc1hoRVZPSnpDQlFxV1hJc1ZqNWp4elZuVEptc3pNdlJlTnNCQVJXY0tBb2d4QVlvUzVjUGhnREs0aExFR1g4M0NzV0ZxS01IR01rdVdMUFhUaTdtTVl6T3U0c0FxZ01DZ0pnWEMwT0JXY280TWdZeFlUVUZxaWJvV3RwQ0pzNmhNSnBMT2V5Q0VoSVhGcVlaWXh4RG1QWmQySHhwVU5nbjVvbFhpb3R3dUxaelJMSHkzQzkwNlhORTB1ZTV3NEp5akNnNHh6bFhaam5HV2E3YlE0RjRSRmhtRHVOTEpxQ3BvdEY0dFVFY3VjVEhIQjhzY2NXSmtNNW1uZk9aaXoyT2RtT0xFakxzb0g1Wk1Vamdsd0pNSXhESW5XVW9NaGNVN1hiNWc1aE00b1FsNllVRnduZVVJUzdtT2RuS3NWZGRoMkRJQzZPaTJSYUIrQnhFd2tXb3BrQThBbkJjM0RoWmhOM2VWZ1N1ZE9ISFBkcGNPTXpzeGpvTU1lN1hhWWlPRVFCK1NCL0poUEZCQVVFNVVzSGdZRkE2RkRZRnEzRU5NM0tQRm80cXg3S2RuRGhaekdaem5NYzl6M1g1bm02RWJ3VFhISElML2ttM0lMeFVtVWMzQ1JiaS96SHV1cWkyMU1kODJOQzJOOVdxOVY1R3lnTms3eWp2ZXE5VmdFN2dueEVJZ1VRQVhvQ0NpUkxGS0RzQjBnUnNCU0E2MHVWS2k0S29DdmhWQXNWa1BZNThQZ1RnRnVLRGhsMllaWll0OVFpTjZhQlZlMmdybW1tNmpGUDlnUGxRMUZFV1RtcythNXpmdjN0UWRQTVJNUGtpY01IWFNOVnVpQ3BpL0plTkZoUWFGaDduUGQ5K3h1VHB2MExhdVREcEdMbUdKczAyWWJ2dVhra29GYkZvMTZPMDZRVnNXRGtjYUdnUVU2UVBXeExLU3lKMHRtZnE3NXFiMVBQZkVhUzhFbEVYdjZNTzJCakJnc2RLRTNTK3V0UFZLbitYa0hyK2RSbnpaejZXZWxWK0gvellVeHRFYWtmU1VHcHpjdnRsczc3cXpxVitpMFRUWnlpT2xXbzN2VWlqQzRzS2FScHdXb2RJb3ROQnlqc2xMaXVXekw4bDJsNGU2KzE2Q3EzdzFwZjk4Mk1uUms5ODNUbDJLMTBkTkloY0pDaWk1UDhuTGs3TUxMSXBMS3NkTnpLT3JJaUZjREhramI2T3A4ZjJDVEVqWERMWktpVnNuVEwva0hNVWJUKytBZ1hYemZvcW1vUGdqaTN6WHhzZC9zaENOcEJwVUt2NU5QenBVSDNkOU8rVytaZHBmSEluTXMyZnF6WWV3eitYYmVIVG9ldW5xREdiQ2NVSDVFTXlkT2FvenJTV1dhOWM1WmR5NjR4WmJmVXJYTzc2TU51VGQwYXFud1ppTElSdVVraEVWbDZiSmx5QjNtbnJuT00wTVlxNU5tc3RJdkwvTjFGUnFOcXhTTnlPbEdqU2tacUtEWG9ObWRMNUx6TVpseU0xSlJ5MGYzcjZ0RWRHWnRIdlVubVBZK0k4Y0NTUWFpVDh6VDZkenZwZEppSHNjcjV1VmZBcHFTTG1LdnF6cHNWZ3R0NFc1SkJGYStkb2F0UlNIeXZUekUybEZVdUduUG4zR2lQcHF3MkU2bklFaFVOU3ZWbHZsdlhMbDZ0QmRoZHpIRXJMRkoveWZSbVFWc1djM0dvUGIzeHFyUVpnaTlodUMyRTVRU0tISnRHeG9hT1h1b29nenVhMHk3TTBQWmFSNGFZN1Uxc2FTS2JOYWQ2MG55L3hZWGhjSTFBV2N4WVRGbFZEMVR5eFptN1RNZk05clRReThzMXU5R1d4WTZORDhWbXdoZUduSFM4cW5tSnJuU3ZFenN4aEJSR1dWbHhGRHJ6UjN3cTNMOEdKZk1jazk2WTBha1VNNnlEOU5qRnFITGtzeHkybkpsbTliK1paNWV5czUvaStHajRtVTlMNE1kWGtsS3plWGtmV1hQa1lRU1FyVmg0Vnh3SG85cE5pVFQycDFQYXQwcmFUZnlYMlAwYmhwYjVFR2JPcEdtK3hHeElWblQ1RWlRMW9sOG9ieWc1L0x1ZlJlS3RCcVBuUkM5TnBHdjl1QmFrbk9TUkVTYUV0ck44Tzh0ekc2dEpqMk8xUnAzcUp5OVJMRnlxbEJ0cUhOV2MyUjlpYlBrK3dvNlp6bWZjdnlLWFdzZGFhZG9iTCtZOEtyc2RtZDlSMVBtMXJ5anBPTmxyenRXYXRhOU9PYkpmczNMc3VremRMNmg5R0pHTlNaaThNMXVabXg4THc1UURtWllUSVN3WEh6cXlVajdOTzdUSzNYMXRXbTlBNTNYVDZWNGdWWXlpY2lkVzdaM01ScHM0Uml1QXNhY1dIQnRwcy9kREQ3bUZHSExNL01mVDJYald3YTlxRWtmK2k4TXlsV2pWZkU1eFpBOVFXZ2xDWTBmSHpXWVNMeklKR3VWZGZQaHNSVFZKaURNMmI2UWpSSzFaTWV4c0k0UnYwZUtTQXNLbHhDczBXcHJGYTMwdm04d1I3NmU2dVIrOFBsb244MWJKbFhxckx6WVJCTWNJWEtNR2docllUaER2RmNxeTE4S3IxZFgyY3VUczFlWnBuTVZxMFV0M3BVM1ZWVllJRU1Ccy9ycExKd3AwSFF4aGVjdWk3c3N2SkV5eEZCc25MaEZXdXhXTFVmMytDOCt3VzBNSVQxR1RPK2xEL1Jqc3RzS01Mcnl5L2Y3UUdjYnFHdDdiOGk5VFRZTHNxRUE0ZWVndUVDbyswb3RWVE15M0sxbzNlNTdvdVh0QzE4cS82U1QzcWhhYXNQaUxDSUM0Z0I3UVNMRlNyRkJWanZ1VlVVWG01cGxtcVFnWFdiSXloWCs4N2pHclJCcWFtK1IyWHJNUkZnTUNpRnVRd1hoQklSWWVYYW01U01oMzh5NVdKSlhYTFI3VmtWNmxKdnd4RjYrOWRHWmp3UzFZTVNDWWFKWmdyUWxnclFYaXJCdWU5ekdkN0ZYS3NlN2Q3R1htcDZQbEh6VDVJNTN0S1JxTk1EV3JtYUx3U1JZRERDeHFLUk1lYWRocEplVytIUG54Ty9mUGd5elZjbk5hTXh6WHJCV1JhUGs3NDFHd0JOUU00U3FBUUVBaHdCQ1ZCNWdyT0VvQ1RBR0hBNGhPejFtNFRpNEpRRWVCbkFiamlGa2wyT3dtQTQzQ2JPVmRtRm5NVlk1MWdTeU1yb3F1Vzc2dEpITC9haUdjdVV4MktuTXJPWSt2T3A3T3gvTU9qUTVXZStkOUxWZk0xaW9lWTM5L3ZKWFJ0am92MC9Jd2srb00xZEpWY1RZYkFtMmxRUElyQ0lRODRXQ2NoWmlaQ0poVzl4UXN6ZVc1am1VOW5uZGMwUnpaN2ttS0xjaDh0eTMwdDBxK1NLUFlwUU9IeHBwTWVuS01jK1hNNnJHeXJXanlSVkZoMEVVQ2tGODVBWEFGVkJrTFZrTU42aGFER0dSWnVabzA1a2tMaE5uWm1pWmV6T0x4RnFENmc4M3BwcU5hM3ExLzZxckcwQnBpQncwZ2d4YTFxek16cGtraXdoQUFMQVZvdENXVGtlQXBnUXN6RHMxRGlZU09EQ1VIS3htc1dKeUVvemNqWmVha1k5eEp5TDQwMkNDQkJTQlJEUVVBNllCN0xDY0k0UkNZdUR3U2piVUhkYkNZbVk1bzRPUzRzOXlyc3hpcm5PZTY5V3A5VlowNlpnMjVFZ1dDUWNCY0MwZmdhNitFTmppQ1R5dE9MY3FIaFp3dUlYMXUrbmF1T01HRHJ1eFdCN0lRckFQaGtEaFIzRXdNU0FtQmhoYTEvTWdXdWU0cXhqbFpMUExGdVNNemxXWmwzWUcyRjRrRllSd1hRUXdrNXcveXdQSUljVHkxYmNvdDRtZEMzZWlSbkkyTWRuWFYxWUpsSWdEY0UxQUVzcG1zQndrV2l4Q2xwUGJuQzRYRnU1cnl5c0YzVG1PWm5Nekh1THV1NnNBMUlJTWNCZkE4Z1dZTTJiT0xCS0JlRHdLQkNoTDF5N2xHY1dsbk8wbUhCNFF0WVljOG93d3htZGRnS0ZDeFlDMkNLRHRxSnlEUndQcUUrVGU3b0xiaTI5RENHc3poZ3k2dXJEY0xockMwT0ZEOGtvazBxcWg1eTFWdVZyY3l6U1JPSW1YZGdZd0ljZUExUVF3Zmd5RGlZNFREczhQQVpBcUNnc0xQbUUyQzBVRnRVNHQyTWM3ZkRndEZqTTdNVmRaMzAvZXg0N05QODJVQkhoNkF5UmEwVmk4Z0NLUXNEMWl5YXh3TUNFc1E1REZDckhOSzA1dzRPYVZYTVlNV1dLV3dsRDRzTFYwTW9wVllhbkhvQUh4SjNLSXBEVk5WWG02dS8rV2FQU3NBcW1YZGcwQmNlR2dDZEFoZjVUUFNBK2d5QzhYSU55NStTYXhndXpHYUREbnNnamRkd3JWdEM5b09JOEdBUmd2SnFOTEZTWU1JU01OMU9yU3h4Ymk4WEtzSW5Nem1HWEViTmRnNDdnZlN3cmNPUXhJM3d3TUdGVnBaeitPZk9GelZlckxDR2lnNHh6RERPeGwzWUUrc1JnWUlvQTB4b25UQ3F3OUxBeGg4d1NTcTd3d1NoNE9DMWZoVjA4b1F5MFlPdTdETk1JUXRBcFE1QXB3Y0EyS0NZUGh3cVE0TW1GVTI2U3p0NExDWW5MVEZFSmRqM1BjNk15N3NES0V3K0pTcFFES0JoT0lIQkdGdkV4V0dMM2FvR1FPb21oNUNKeUZoaG1jeHptT2M5bUhQbVoyY3gxM1lEU0NnY0JNQW5XaTV6VkJ3R0lIZ1NDeVpMTEVuVWdtNWpjNGNYbU1MOWhDeVNqbnVWY3E2NHV3cGdZNG1CNklDRUlZMG1ITENCczVyU2pTbWhxeHhqcDdtczBPck96dDg1N0xzMDNHMkhPUUNEV0N3c1ZKa3c0RHhCYlJ4aXg5N1JNSnhQaUZqeXlyR1M0VzhoYzdNVmN6TVlSdXV4T0JQdEY1eVFzSDRPSEFRQW5LY3EwcTFMSU9GakNoY1RDZGxQY1FsblBXeDdETlp6cnQ4RjZzRXNGM0F2UTVISERXazhJWWpwbU94WmJTbE1Zd3V4Y0VjUkYxVVdqNWkxbFYwNFZodVFIRkN3YmtQemlyb1prRjUybk03ZFBNc2V3a3E4TzJpbVlOc0ExZ0FyNE1xWUcrRFFCU2lvS1NJb0lBWlE5VUNrRHlvRklGNGhIQWxCRkhBcGhtSG9aQkhLT0NybUZoT3dYaDhIZ3VFd253b0ljT1lVRG1jSDRmdURJTTh3UG5JOUc2UytuVm8xWGdiVnlJVGFHZk9udjc1TDFlcTBVZFZQcTB4ZEJxc2U3MVdvSGVndjcxWHFzTkE3MzFQOTZyMVdvRTZJMVA5M3F0SVBORktwRXRYZVJ0b0Y2WmJlcThqYlFiMFM4TnZWZVJ0b1VQUmRLOVY1RzRCdVJycThscTlWNUcwQW4rWWg0NlMxZXE4alp3Ti8xSzhscTlWNzNnb2N3T2t0WHF2STNRVDlSZmt0WHF2STIwRzU1dFBTdTlWZ3BSVmhXQm9BTjBOT2tsb0hBTkVLelowN3F0Y0JVQjh1ZHpNdm1pU0xpNXA4dHVBbVA2dFhlcXhFRyttSWVqZDZyT0Rtakh1OVY0T253cjd2VmNDNkM5SlhxdkkyT2gyYkJkSzlWNnJTQ2hCaEs5VjVHMFE4TXBYcXZJMmFMOGFYU0phdlZlUnRZT0ZHRWlXcjFYa2JQRHpKUGpjbHE5VjZyUURvMkkxVWxkNnJPRHRjUXFsZXE4amF3NzFVODMzcXZWYkE1MzBhdmVxOVZyRFkydEQvZDJnS285US8zZXF3V2hwUWdTVWxDbUhMS0JlTGc3RGNzS3l4TVNpWVRoR0ZBbUxDOFBROUY0dUlYTUV3b0RJTWhRT0MwWGg4SG91Y1VGQVNCUUppRVhpOGhIQk1PT2N5K2pwbXZSZUNPaVdJZlZnVGpsQUlNRkFGc0gwSElNZklGY0MrTEdCUUJHQktENFN1WmdVb2VqbWRoUUJ2QStpZ3RtT1lET0tDMllMZ1I0SXNQV1BDcTdNQ3VEOEtIQkl3U0FraTRHbU40MGw0dnhTTWFURkVjVVJ4b0dITHdYZ3pCUW13S1FBc3dLSVNBN0NZTUFUb1JnZEFLOE1wQjNDTUR0SXRJU1lQQk1zRDhGVm91RTRlT1lRamhDNG9MMk9JY0wzWXRoYzkyY09FSTRRc1lRNlptWjB6R2lJczZaR1VNY3VNdUpWblNYbXdFQkY0c0FLa0JoQ1FBdFFKME5rQmNEaUdJSWNYZzlnVmdWZzNEMGNjRkVEWkFyUXpGMkU1Q0dJZkZNNW1JUVU0SkZta1RoWEhCUU9DWWhEOEVhVURNRk5na2pnb1lGVUt3dnNkK21zMUpzeXQ4d1J1LzBLL2N1N1V1R1NZNWo1dWlWQjdkOExmL2QyVjlTOUgvVDRNMWQyQ1ZGbWFpOXJlb2xNNlo3VXMzUkYyaWpZOFA0MVNHNzZFWnBXcjFYcXRRT2p3MktZb1FicUh5MlhJZk4wdUp1Z3Uxamk4dmg4T3VQVTJjS2VjckZoSUNpRU1FR2VWYURBRVlJb0xvZEZrS1dtSHNzY0xRb3p6RG1Dd1d1ZHh4eEVKc09YbW8zbkphck9CTEJ5YUtuSml3UFI4V3JMS1pRZlRMQ1RLRm10MzN6bjhXNWpuRVRyeWNYaXNtSnNlQk9KQWVSTWdLQVlpd3JCQUJpc2hXTGlxeHZNSVNFUEE4WE5UaGNMM09ld2hjLy9NWm1ZY0hHZjVqR0t1MlRNeGVLbVpzTGdtaU1SRTJpUWZZd3FJNVg1S0NVb1RZR0lZTWQ5OXlGdzRPT2RpRjJuTGV4ejJQWTkyY3g3TlNaaUxSS21KbXduQzRiRHNHdVNBT0lrVnBuek9abk1aT1hVenBuVG1abVlSc3ZKbVl1QWxtbDBac1dBNENZWEhJUUU4SW9rQ2FWUXk1a2hVTEM4b1Y3R1RwWXgyRXd0WmkyWkQ0WTV6M0dYWGs1dkZWMkoxQWhBZWhXSFpDNXFoVkVXRThKRUJNVGM1Z25YR2JMc1E5anM1NVptak1abUYyS3VjNjBVNExtM3lwc0tqTnFBN0pMNU0rWU5SUUp1emtKU2IzckpKekRNWGhUN3hWS3hzUEJJZ29jVll4N29XMWJWSEZpenU3T2JYK2RuT2ZTdFhtKzZLdHNoRDROQW1pU1F2QnJIeC9pU0psZkcyRmVUWDJRNlhZbStGWlpuU3F4bVplRlB1QjlwZXJZRlp4UVJsQVBRbEdoS0dBWURrNlNnbUVva1d3b3Y1dWQzY3U1eEM1eXJpRnpuRUxqRHJ6ZmRPYVk5aUlQTUpDQXNMQm9mZGl3ck9nOXJtdTNhZ3d3d3AxWEZHRVRGWEYzWGhUN29mYmFJT2FqVWVqM0owajYzOVpUdjk2cjNzNFBoNDQyalRpenBreEV1YkF4cTlWNzFhUVVtdnJHanpTUnQzdlk4QTh4VU9yZy9sbE1oS3NuNVQ1Y2tVVGNWZVNSdkFscHJxcFhrYnlOc0NkTlVyNzFYa2JDNEVwRmVheVY2cjFXQVRpQjBDZ0h3QWUwQktBRWV3ME5zQjJBU1lBSm9CckJrQmxGVUJhMHNKZ29FSUN5QWNJRVBBV3NHY3N4ZUhDbERndEtBa0FPY0dnVGk0Y3ppMllRbEhaanN5dzJib1RYSmxZd3A5V3BxcUpOTVJZS0VWaVFoa2Y2WTJlbzlmWWVrWXBiSmZPbHlydVJWZWlmcXlNM0hTbDhUOU5nNmpheDBmYXRncktzbFZ5NkgzdTg4eE0vcXpkQ0hWVVFjMnB1QjdteGplZ3hza2RXQ1ZkSTBvNDNOVVVIMk5XMXlHUWRERmVYWVhZWWhXTFNONjE1R0k3ZnV0V0xSU2xyZEtzeStnVlZXRkloRzJqWlVhRFVhYjJuTUlOSy9xVTBvWnhlaUoxeFJwdWF2eS96djcwYjZXbTArSzBUWWZRTnZXcDVTUWdmS2NudWQzeEwrK1NXZmVTa1pwRDlXZXpUZFNpakZSQ3RhckNsU0xDb2xQbXA1TTlBcXY5MHo5K3JNeTRZT3NkakhkQTVhc3p2WjBES1V0SFVsZnFteUVJTzcrTkluTGF1djVtVXV5YzNVWmw3Qmc1bHhLTVJvVmlpU0xIVWQva1lWaXlBUk5UOE5DV3NneDFlZEkrSkc2bnlZbnJWWnV3eXkyeDBsZnVSZWJPSGNjckZoUFVEY21GalhtMFFTcksyOWE5K3N3dHpOV1p1U01kWnJTcHN2cWNvQkpadEdSdjFGVTNNcXdicGNvYkpyUkdveFkvSy9QblR1ZTB6N0sxdXhlUlhwZTVoSE5yaXBiNDMzR1BzZ0VqY3dxYWI1UStVNVhKU2ZwUVY2c3VrWU91ZFNMT1hsOWZxd01QZlZUc3NrdFFhVVFSY2VkODVEUW9VVjdmcU16YzFOSDBiK3J5OVRmZlRYd1htNFBUVXBUT0VlVUhrR3RPUWUyR2RyQzhmZHRvUWxHNTZVNXZYcUpJdEtwZkNVdmlmWWlFYmZOWlp4eE9Va3NvMG0xdmNwSmVMUXpjanBPZkptVmZhZEdveE85cUNZRzRSaHc0ZTRYbXBIdXpYcUNSUmExN21XMWZHWFFtM3dkbzNNTUdOWERTa0hJVWtubXRNdW1xZlJpWjBXRnZJVUhvSkhNN1VKeld2SVhieXN6eTdOTnpIMWFaKy9reTYwMGtDNk84a2JIeGFnbURZSmM0cVVVRTUyVWYvbDAxc2V0ekRibGFYamVPeXpXNmRXbnUxR2ZGaXRaQVVHMHFCWWNnUFVlN2R5Q2RicllSOHZOK3ZNNzZOUkZIVldSZTRVbHFLcTM4a25ldzZXRzBadUZTU0RoSTd2VVFkbTlEVVkrY3hXQ05sanEyNlhwWm1taThQb2s1RlZ3b3pvdk9ZNld5WGErYUk1dWtad1FpaHdhcDAwOUFxeE1yaWkzMUxDNjgyVlhabHQ4OGJuNzd5dnlySmlMbUVaUzV0UmJScWxCVUpCWFhhazl1bVVQRXl2UVhodGpzeHhTZXBXcXpmVUhkZGxpaXl3NFBON1VtbmR2MHBMVzl5SDNMK0RMTFdqS2hOcU82djFFY1h6ZXRTWVJMeGVFVWsyT1l0dmplZnBwUi96V21LbU5WeWpscngyNnZXUzFkUEhmWDBLeGJVTjRHdmcyY2c0YzA1eTh2VmhXdHNXcjVYcWI4MVpMN3BHWS9mTDVxeUVtYzRlUlBTNHNQcVpqU29VYzVlUUdMTTYxUERmcHJOa2ltMW12UjB6cC90Z0x3MThmRkM0T0hPVmIwbnJ5aTRHTXdSVmNqUWgvbjUzMVhrOUdxYk9DSUI1bm5qUWI2Vk1wcVd0UXM5M2FZbC9MemZXZ3JLWFY1ZXJrZFVTK3JMZk1tSVZYWndMcHczKzNEaFlzeWZtdzFicGV2TE1TVWxYM2tKT2ZXWFRaSXVNWnVVczE2S0tXa3pMK1MxWUVzNGZEZFJpREJvaE5aSHplV2M4bXl0SmVBZ1dXZU9wTlJMdUl2ZkdVRFpuVG1FVW1Kc1RuWW1teGtMT2c1YVVyVWE5ZWxXTjl6RHBmN2hLa0lrN1NxdlF2Y1krOGRDVWFxNW42YmFQb1N0NjYzNlV0MHRWWEt6SGJuV2s4MUxEcHBlYmwvT2liQzlIck5LU015NUE1cm8wOWI0eTJzV3E2NkN4RktURXorU1RjTlJXanExUHF3R0NLUXVGSUsvU2hiVWxOOG90by9PZCtabWRUMlRjcld2OTh2b3ozKzhHZ3BiS3ZmQm1iQS9VUEpwcitsSnFIWGw3OURNekhLL015NXMxSnNKdnF0NUlsNmROWGpUcVhxaU5IZ3oxZllYQm9jRjBvQnRLQzVEZFNGam5VVWg3Y3hWMmpTWDcvYlFhYU5tV3pMMjk4MnNGZWY2bjk4eHFxd1loWDJpdEJvcDBJVHZOSk9RVWR1M1MrczVoaGhHNVYxNmRHbWtYd1JScXZlRVRjYlBJNHFJMFdBSmFBTWtEQUJVZ0hrQUhNQUwxaHNtUEJVQUc1QU0yQkNnWUFLSVZqNURoTUpneEZ3QmlBRGdBWEFBNlFLTXM3TUhDSEI0TFhBV0lGMEVBSnhRT1BITTRoSVpjNGhZeG1ZNFRwTGhSU1pMOWd4OGUwYWJqa3BWcXVaOWhzSGxSKzlyemIzdWpiSHhmRWFucEV0WFE3Y1JZU3dveStucEV0V2o3bXhTSG1TNzQ3NElxdXZadFdHQUdFUERqbHFNY2tkUjMxYVpUNjlSSk43NkxuNmExV3NCNzhzQytIakNnSlJTQWNBM1d4aFpRSjVWZ3NjVkUycHVkaFB5MktNd3QwVm9aaXhZdjg1VnpMa1U2bGZZaEg0OWFPK0xCaEFuUTVBd1FwaVVWZ1lBRDNCQUF3Z2ZCTU9ZU0JpZ29MTVFpd28rWGFpRlk0SjJPekJjWGN4enN4ak0xeXJpN3NsSmlyeWk5V2pld1hBSDBBeVFKd0U4V0U0TUlsRHJCRkVtY1RERU93b0VMSjdDRXU0WFlwSW1ablp6M1BJU0YyYy81Mll4VmpMMVdCTnlOOEI5QkdCUWg4UHlPQUg2Q0dyaFFIRDNjbzBxSDRmWmp2aHdURkhPZVFzWjh0bUlWUnhtYzVWMll5NHVLZlZ3QjVCbERBQTJQQUZQRERpY1doRmdnV0hJbUNTUW5Pd1VCd094Y3RqaUVjSEF4Y1VLTzFEZ3RMT1lKeXpuT1l4ak01bWRkbDYxV0RxRDAwZkJNQnNMd1RTWEM4V3RDUVVCZEU0a2F5Y1ZIQktRbG5CNFZMVk01Mlk0dHVVWm1LdVlVSEh1ekhPdlZjSXhUNml4cFlRZ2VRUXdkQm1MUTZFWTJManc4V0ZFTXlCTWdKc0hGQ0ZqbUZzSmlIT3pPek9pV3ZMS3NZNXozWmpMdXhZQitEOFREd3VEZ1hCREpsQ2plM3JZNEtBb3ppc3V6Sld3bXhoQzV4WnptVG5NekdPWU1YWG9zQ2ZCTHRCWjRsQk5IRkEzNG5DY0pHamhDSkJZVWN4UjFGSFpqdEphQzdzNmM1am51WVN1dThpYVhxeFlId0lNV3VXT2xnUDRVZzhRRXBQdUtTSkJlVVk1U1hPWThubVlUT3puQ0F5SHN2SXpjNVp5c2V3YlNiQW9KbFF0a0lZNERFRjdDME5ZeFJRaGM1ckh5MWxGaUVzNW1jNW1xYzdEakNtZHBabU11dkppclJhczFXdlk4UEZBUDRINUpnU0V4Y0x3VFpDS3hPVFlISk1TOHBsaWZPSVhPRXpQaUZ6R01jNXp5RXM1MmM3T3A3R1h2SmlyaEk2bjFIc0pRSDhCZmdGVEppMEVvRklKb1lrSVZSY3h6UXdIQklRNGdFd01NRU5TeHpDRVdGRlNFUE1PU3hqTVVkaHdjWkxtT2RuT2V6SlRCZXJ5Z2hoV3ZZVHcyR2dkUThVREF0VFNnUlJ2bEd1TFNVNVBNWU9NekpFNG9ZeDQ1blBwcjZ6c3hqc3gyTEt1dXZKaXJwcXpIdHdUZ1hSRUN3Snd2QmZHaUFJekJONmNvV1pRNWhhTFNGeXRGaXhaN25Nekh5eGpHT2V6U1pkZEptSXRFcm9wOHphZ09BckR0S1doUURwWXJVUGZMQ0RCR0tMRnB4TXZKUnhhQ0Y1YVgwWGM5ekM3TXk4bVppOFZneE5pSURFTENRVTlRSVlzVUcybFRwV0xjNEx4TVdKaDFwbVozSVJNNTQ0NXpzdU01enM3T1ZjNTdzNXpzbVppOFBtWnNTaFNnUkdqNXdqRlVoRFdWOUpxRXdoaVlTb0NkenFwVnpoUVd4WVRaMmw4NXc1aHh4ZHozWG0zZzFNemF3Y0RrZ0V6YUhDblBhR3pVTVR4WmJGbFBSTjh2WHBZUlNxeFZsOUxJMmtwdStJc2JCelBiRURLbVdwTkY1VWxib0pYWGthczFKR0xDd0tuUm1ZYTcrVHB4eDIvVm1UTVhrYjMxSzFlQnlDeHNibXB5WnAvdkkza2JCM0I5RDBQQXBKQVVnREhDWmhNRkptREJ3S0VES0xDZkIwR0lGU0dRdVk1ekNwTWNjNWhRS1lHc0xtU3h3U2daWFBITXgyRDhLcmhPRWdjWmlFR2xHb2w4cTFmQnBSaWNqTDZxK0tSS0JRQmFEUURHQi9FOGhzRElFTVBncnJGZ01ZZWgyTGl3bEN0UVZ3S1lQd3lDdTRLNGVGT3dYQjhMZ05ZTVhPQ1FEOEh6MkM0WGloMkZETU9Ca0p4UUtCUE1hZDZBWG1BVmRXdlZPUzljRmJCaVFWZjFWZ3lDY0xRR0lGRGdWZ09vVVdoUmNERUNHQmlCMUJvQjNJUWNDd3ZGb1BRRllXakJJRkFtRnhDUXNZV3dQUUZXUWxGZ2pBL0hITUtPSVJRSmdsQldGQTQ0TXhld1h1cXgzUkNPcVZZdFFYbXhxckpFdFhxdkkyUGhSTk1KRXRYcXZJMm9Ic0dFaVdyMVhrYlRCeGlxclUyOVY1R3hTTDVvdWtTMWVxOGphWUplakE3ZXE4amRDNUV4eVdydkkzdzdmRDY5NnJ5TndDVmZTbzdlcThqWXlIWmtkdlZlUnRZZG9tRXJ2STJhRTR6NzFYcXRFSjJndWxlcThqYUlUb3FGZmQ2ckFmcEN0d0djQTJEZXBwcEFId0txbFR2U3NOQXBnL1pPOFNZZDRlek9lek9aVnhaeXN0c3FLdUl5emlhVkc2a0ZQTStmdkxWbDF0bmwyeTZYMW5XaTgydEYvVlBxYXRnVFppRlViMVhrYlJDZEpwY2R1OGphUUpkOFBoSzlWNUcwUThNdHZWZVJ0b1R6S1Y2cnlOb2dsaktWNnJ5Tm9oM1JoSzd5TnlFM28wK1BlcThqYXdtNlgwaWxkNUcxZzRyT0xwWHF2STJNaFN5SmRJbHE5VjcySVJmcUx0dThqWTBGQldIcFhxdkkyVEJMbTZEWHR2VmVSdEFQSjBROUlscTd5Tm1oU0ppSmppd3JJQ2c0SkJJVEtrSkNRaXdnSmlVU2hlT0RqR2xpRWhGb3NJWE1IQktKaHdveHhZaElTRnpCd2NLTWM1em1NWmVSdlZZZmhnR0FDcWdNRU5nUUlValFlZ2pnSXVIUk1vZVZEQU1RZUFlQVJJZmdSQVdoaUg0WWhVQ1FGUVhrSVpPRElQd2tnTmNNaGVEQ0VnWEF6QktjNWdlZ3BCZUo4RDJGZDRTbkJtRE1KNGlzamthb2pnQXBlamNqUDMvSTVNU0lQNWVpOFBoOGw2cmkwSGh3T0FkaDJMeFpndU9GZ3ZGd3NEd2hPQ0dKaE1LQk5KQ0xpemlFckltRkFvS0Rnb0ZBbWh6dkE0R0lvSEJ3VGljcG1EZ25IQ2c0eGpHYXJ5TmhkSWZCb0NsQjFDYUVJRVFCc0RZWmlRQkN3WXNRQWJZdEFZV0NPQldrSXZnSzR0WVdCRmd4Zy91RDF3NEZVSDhvd1B4TUxoZURRd1RqZ1Z4d015Z2ZnK1lNbkFqQlFPQlhGOEkzS1Q1c0FWMEJBQndCK0F5Q29BK2tBY01DRkI1Q0lRRXdkZ2FBTklveHhZS0FGVUQ4RVYvRElIc1RzWldjTFJ4VndvQ3NHYm1PS0JWQ1VMaGVLTXpDN0NnWENoR0M5V2pxMVFqdVJ3WWFabWhoUmVYMFpuZUtBcFFOb3NCbUNZUHd4QXZRSnFRWmdVWURSQ2VFY0NpQWdnU2loRGhlR0laaFhJUXl3ZGpnVVFraDh6T1lIb0kwSUFURGd0Q3VDUUQ1aENMbUM4SlRYQ2pCNkg0dUNTTHcrSVk4WGsxN25IUWsrdk84bVBVVHB6WHlaWFhuTk1UdkZod0ZHWk44citveDB2VjZycjJQaE5odlJSUlMxWHF2STJLZzZObXFlTzNxdlZjQjNCcGNkdThqYVFUOUJxcVY2cnlOcUJRTXBYZVJ0TVBOOVQwcnZJMk9oT3JVcWxkNUcrRTdWU3FWM2tiU0NjK0ZmZDVHMmgzV2hVZHU4allwQ2E5SFZYdThqYXc3MEZ4Mjd5TnJCTG1lUzFkNUd6UWJ0VUtwWGVxMFFuNDB1bGVxOVZ3TDZpRlczcXZWZEM4eTBscTlWNnJIUmUrRlVpV3IxWHF0b1Q5UmRJbHE5VjZyd0pmRzBxbGVxOVZoQkY3MFRkU1JMVjVHN0JBTERZSFlPaEtDQUNHSFFTQXhEZ1BSV1RCZEhBbmhVQ2tLQVl3WXdqRlJhN0ZKRjRWQXFCK1FpY013WXd6RkdkaGNINFZBL0Z3bkRJTXhRT0MwWGg4TGhPS0J3aElXUldxNXA5V0FSZUFPU0JVZ0hiQUlRQU80QkhBRVNBeFE5QjZBUmtEVUFHYUJSZ2h3RWVDaUU4V2tKQ0hRNEJkQU5ybEFMRUJHd2o2Q0VoRjJZSnhRQTF3S1lKUW5FN0dPY09NRTdHTVk5bGxSMlVtcUp6M3lYa2prQ1NWYUtKc2ZUQmVIdy9ncXFzSFlYclJVNS9iam9XMXVRZy9mU1JOVitreFZ6bzNPaW91bFRkVmc2QTN6MFJwMUpwck9VT2RYbi9SVTF2dTkweVhacGk0clVpdmw0ZjdwV09iWVVRZERtZ1BKcFB0MG9vSHJTVzl1bHJOekMybCt3aWRmNk9VMG1GNlNPTlZ6T05RbEt1cTJ1WjhQa1lUWVVnb0QrNmFISHNtaTJleVVwTFpiczRrWStYYUM3TFJUOEc2YUlvMVpyK01JdUZ6VCtSMFppeGVIRUcvRXl5UzBVcFAxWnphME5jUlFaZG92ZWFqSHRKZStkeUtMUm10RzV6K1JSWWNqNVlxRzVaZ3FQa21mbHU1TVdyUTNYbWJ2bGZMcytkZmloMy9OZk9sV0hHWXM3MGMrTkdxVEVtYXNoSmcyUU91Z21RbEhUTDV4N21abWd6NTY4Njh0T3RUK3RwRlY1TTZGYVhsa1UwSUZXbVBCUGlVcW9tOXEvcThMTEx6R3RpQzhTWmRkWjBJdmxkUVIvVmM0YnA4SXFFcyt3OEtpdFJOS0VRaGpZa1RUNy95cXJDcGpyK204aW5YVlpLNk04djdxRjZZbzVUTklwTHhZdFFCcklWclBJV3JIQnBuVkd5Ym56ekV2YVg5b3pTTVNzZTB3djZueU1JdEY4LzlDdlZGNEdQc05sNE5VWU5TYk9FUnBOU3N1S1ZiekhhK3M1V2JRMUd6SnRkODVmQlUxYVQ2cW55K3JPdzJ3UzlRK0pPZjVPelh5aG5QYnBHRVdnTzFRM2t0T21qTVUrYXZtNDBVbVl1VG1DSUppbWJ1alFiTzNaMi9ON2ZwVllabUxuVEx1ajRWVUdGWFVWanRCaUxURmkyRHBWbytnMURzaW02bGFRMFFyQ3MySVVzdE5SRkk3elZFazJqT2JDNW52cXhFSENSeTBrUjRyNVc1SnFoekNoTjYwUG1tSE9mV296RnI2WnB0Zk5mSmlKbTJyTzBTdm9QYnBmL3VyVmp3VGtLaURSU0krVjYzcjZpaHpHYU55T3I2bXFuOUROSTV1QXNSbC9qNlNQMk9zZ0pqSElUa0J3bkRWdEo4U2RibXNVTWQ4bDVzMDdwSE5oSFN1Uzg2VmZOcEpTYnAraHBuNzI0NU1vZFFoRFpRNU0zSFpmSzB0ajNRWGlIZTRTNTFhR2pDWkphdEU1ZjBXa0c0WElITk5IaW9rUm93VWxSYjBKdVhMbVRGR1pmRDV2TVVIZXJMNUk2dEFnSnBvNUVSRTB2em5zVUt3ZytXRTFmQkU2MHg0NU5lSFR6cWh1K2hXUVZWV01qS1I5UU1vL2ViRUtadlM3TUdzNXlxaFNNdk1KR2N2N09wcVU0Mkd2YXJTczZMcWpwU1ZsNjdEUU5GdFBLdFRqdFFuTmR6OG1ZWEw1MUdGdmRaUVV4bGtEZFZLOFl4WlVaMUprMTZMYzBtaU5MU1l4Q0dwTlkxUnVPM3l5OVh6VXFZeHVYUDNWcmw2bTVSbktPV3JHZ2w5bkk4MFdEYm9XdlMxQnlCYnpwakx5MzlscEc2RkNiWmpWVDJzNUpGak5ham1uSXEwK2ROd1dFWWJsWEZZY21VS2wxclVkTWppaTJlRlljWmROeU94V2ExRXZ5U0xoYlRvbGF2SW9WOFhKNGRCck9UV0lTaWtaZFRDeHQweTN5WG10eGl5OU84NUk1bW9qYXJWdzBhM3h4dmJxSXBzNG9vbHBoTWd5R2JvSjVSUVRmU3hwbDJkZmlsVFZaam1aVmdpOXc1Y282WlhYMG1mWndvRWlDZVNMT0RjZzYrL3ozWlpNa1pKZWJrUkgxOGkzLzZTT2JIU3FtaDh6RCtTelkwSyt3WERhQ3l4YUNpUk5ya0NaekY1azZYem1NRUYxbzBLVG12bHoxbUdaazZOTnlhZG9nM0xmekRkNnRBZktISGVVVkZPUHBuUDhzWDNhWkx6dVo1bGwvU2lxaS84aW5jbGl5V1NPckNLUGlWUStqK0sxQ3NwVnA3MjVqK1lZNkM4KzFvalp4Mk9oVGVlWW9ZUVppMG9IaDFMRHVRVml5Z2tJSmhiV1MxMEhScFF6ZEtrbnlaWkcraVNLbldqSHJ2WDk1QUtVcTN5Yk9oc3ZiWUgvbFNhV1c3d3ZIUGJ2VFh5MlZlOWw2VXBPNXJmZXFhUm5IVFlSQVNZNE5IbmxaY2ZUdFRKYnFoVS9WTTViYzIwYTArVWpOUnZadGFvcWJOQnk2Uk5MTGN2ZG54enlxalZzM0wvZDhxeS8zRTZqbTZxVmhXTjdOUmVsSXhpd0NuQy9IQk1ZNXFCTnN0ak4zbHJtc2M0dkdZemQ3R0dYT3ZRUlNNWXVQUnNGNml3QThBQjN3UmdBVG9CRHdCbVFCc0FCZGdlaGVES0FYWUJvZ0RTZ2pRUlFFYUY0U1JZNG1RdEFCUUE0dVFnV29DdGhtNlJ3aEhIRUlvRDRDeUJTQStpZ1Bod3NRbEJ3aEZCVWhZUXV3NW5XVUZNTFVYU1ZQbW53K1RFVmJUcGJIT2JIMDh6L1BKT3I1STVmVVdEbWNHNFpod0hBTUlUZzdCQUEzaDBHUkNXQmVGZ3ZCQ2hUQ1FEMENGQ2lXRTdzT2NQUVFvUFFNWXRGNFpoV0NTTDh6QjRHWVZRekY0dkRNUHd5SVJPSHdaQzhYQ2dYRGhDNnZmalFqWXJBd0loSHhEYnIzYWd2NDdWUFNKYXV2Y1hRRjdwcFZLOGpjSTNJVWRDS3FSTFY2cnlONEtUemNia3IxWHZZeURwenFpcFRxZEJlcCtpNzN1UXFpczN6NklTdjhxelRYZHVna2JlNk53M3dYOXRCNUZhWXB5aWdibFUweThOU0gzWnNrZjFYa2J5U0t0YXJ3S0FoU3FlbUxDeWxIVHBYbENyVzljR1ovZlVYdWplRlBNZXpRVHJldkhvajNvOHd1bXZXU1RjZWk4WEFOU0pxcHRXT2dtc0tWVWtwYWpvMGFtdnE4MUtDL3VITmd1bGNoVEo4UXBJTlFZMWJZMC9mTm1xZ2k3SE12SnBHS3ZGVkRIdElESEh4NkY1cGIxSjU2MklMajZWb01ZcXhqR1M5akdNTU1aZStwV3JSUzZOYWtiRVlKL3lEUytsTnlLdmVSdVBaTUU2ZzFYcEd2b3hGWGtiM3M4UFJ0T0htcUd2cTlWNUd6Z29UcGcyV3ZpN3lObWdsZFNPcUVydlZab2QwWTkza2JrUEVZTGp0M2tiT0Yva3VsZXE4amFBVWtUUzZSTFY2cjNzOEhSOEt0SmZlUnZlMEFwMUtMNFRKYXZJM3Zad08vby9lRkZUVE5Ya2Izc0VtQ2NENFhsaW9FeUNFSU1KaXA3WUtBNmduRW1ZcklNYURtWjJLQ2dvNW1IQmVEMDVuZXhqbllUaG16NFdpOTVEaHdUdWd4VnkrSTM5aG5nSmtDZkNQZ1lRWWdpR2d3QkhURDBYaFZJUk5JdkQ0WDRYQTloVVdKOEQyRDRMaUVQeGVMeUVzRlFId1doaU9DOFB5RmptRGppR1dNRkFvRkFvSEJPS0JOa2JyNnExVllUd3FCdWdEZURLY0pnUVlVZ2Rndkh3ZDh3V0M4STdReWNKd1pJY0p4Y1V3dkNxT0M0WGlZWHNEUE1jN09Ed01oT0h6bUM3Q2dVWVQ1d2ZEam1RamNqc1FiN0EyQ29Vd1RnTGdId1dBaGc1T0JkQVRnR2NnRm9VZ0djTEI4T1hDVU1TZ2VCNEtPRENGVUdRWDF1OWdNb1FBU1hGUVpncnNZNW1jT09GQXVJWFpnWnNLWjg1SGZUZXBkZmZuU1hpYWZENmZMK3NrWlZWVWtWVllNWUQ4Q0lCbGdnUk9GUVVMRGNjRWdkWWhZVkNNSGs1Z2VobUZFTVJZNE1RZFFraCtVVjQ0SDRaaThjSVJRTHlqbU1lNWpCY3g0bkZvbWM2citxVWNiVnVCeHA5UFNKYXZWZVJ0TUhDa1MvdlZlUnNVZ1h2cEducFhxdkkzZzgrcFZLOVY1R3pRYnRTcUk3ZXE4amRDN0lxd08zcXZJM3hiekh1OVY0T2FNZTlWNUcxaDFvcFgzcXZWWndkSXdYOTZyeU40SnlNRi9lcThqZUNkUmozcXZWWXBCTG9JTGFQRDVVYktFMkh0Y1dGWXJIMkZCSUpDakp6aXhDUWxuZGpDZzRVWlBjNHM1ekdNWlBjNXpHWHF2VllEMUJSaVFYbWd5QUc1RjRTZ05nQkFRRVBCbkNvQlNFSVlBS0tEMkF6d3FpZ0JsZ3FCTUJxQWpBTlFYaThLd0pFS2FvdUNxQ1JBczhEQzRFV0JFd1V3VlFsQXpDZ0VhQndoNkp3UjRvRTRQZ29Gb1pncEFxcjllSGpwMldyUmlERks5ODZsV3ErVE1xL1QzemordEdtalZkN1ZmMXZuZlQ5NGx1Z3hMc3o2U0tURlI0d0FJSUdXRHdEMENMSVFMVUZJV0NFVkFob0RsSVJ3RWdMUWVHT0lkQUc0RE93Y0lRK0FiZ0tKM0lXRGpHT0I4Qkl0RE1VQ2ZNSEJ4eENMd1p3K3d2emcrSVNFWEM1WDM4YTJKMEsxU3NpQk5xQlBIaWlhYkI4NXJITWIwRkVGSnkycmJOYWV2eVlxOVY2dEZvZzZSUmRwTFY1RzhEVGZDbEJocExWNnIzdUFjRGVYU3ZWZVJ2Qk95U3B2dTlWNE5tb3dyOGJkNnJvV29MTjFOVXlLSmlJdlZlcTBSZWFhK0RueGQ1RytDWC9WcEs3eU53THRGSys3eU55SGlKcGRLOVY1R3hvS05TWGJkNUcyQlNpS2g2UkxWNnJ5TnNDa3JEMmt0WHF2STJOQlMxUGlHa3RYcXZld29DZ0tZVndkeFlFUUI4UUVpQUFFQWlORkJDR0lTUXdMRUpZV0FvdzhZeGhDN2dwR096Qk5nbEJtTDJTNFVBempqSEZBK0Z4UWNGNFZTRWhIQndjRkdoR0lzMGRtVGRVSyswQWMvd1Y2dzZvY2NZLzdkSkpYdlZlUnVRRTBDR0lvaWNQVVZhWWc5OExKUGU4WHZGaWtESVBUeVBYUzBQcHk5NWwveXpFNzN2ZVN0TUtjS0YxRmFNMWVSdmV3TmdHRUtWQTRoaUJ1Z1ZFRGNnR3ZCRGhIY0dRckNNb3BKUVRnYm9GVTRYWVhoUkFBU0Q4aDcyRGpzTHM0S29JMFA4eDJDVUQ4eGlyQlFINHVJUlBGWEtNSXZucXdNSXNCaGhBQXhnYW9CVWd4QXlRS0FKcFVXZ2dBY0VIY254WUY3Z2loMkpTRWNkeHdYQ2dLSW5MUGNKdzlGQXRZVkU0dkhIdVl3aEtPdzRXSVJ4dzRRdXA4V09tb3lqalVid0plVVRlbFRYbTNlcXhXRStlRFRXaEs5VjVHMGdvWTJGVXIxWGtiYURlWlN2VmVSdE1QSytwNlYza2I0ZDBZU3ZWZVJ2aE5wRXY3dlZhSWRWQmYzcXZWZkYxR1BlcTlWcEIxcUwrNzFXa0hVWkZYM3F1OEUyWlZwSzd1Z29USmRLOVYzZzl4c0t0SmF2VmVxK0hwbHBMVjNxdEVIRjhLdEphdThqZEE0NUV1MjcxV2lEZ1piZXE5VjRYbVVyMVhxdkM4MUV1bGVxOVZyRitPUnB0SnpKeDA3dC8rbVptRmE5WHF2VllCSVFCQ29DQWdCUGdCREFwd0RGQUlvQWJVRDhHQUE4SUE1d0ZVSmdTQllHY0dVSFloNEtVQkpBQWN3VXdabGhhQkRnSWNDa3dNSkNKeUVFaUNrQTdBYUNFTWdMVUMzQ1VINHVJUXFnL0FYSUcyQnpCQUJXQkdCa0NOQlNBT01JQURXY3BDNXgwS3RhTUlzMnFPbkpSWWZnbmVKT1FuVXhwTVIxTFNoTmt1YTJleGtGNjBxc2w4VG1YNTBvMWtWL1IzeVlwOFhrcThLMUw0c0tRR1V2SjZWUDB1czVrUGd3N1R5OG1KTU91ZTlLVE02YlJWa2krcXdvQVlZaVVOUGxFZWJrazJ1MDZWWnJMVmQzMFhuVFp6emprSnBXbXU0eGpWYVZZZDdmTVBtWW13cEFZWjVaTHVhcGxCRTFSMllQcXI1TXZPWm5aejJTNHV3dXkwVWpVZmthVm05UEdkSnNxdEpZOWk0SEJRZW5MZ2g3Wkw5Z3NtWExYUmRueldYcU5WTnlTdk1OVmk2My8zMEt5WW13YmdkR25MckZXQ0lnS2FzZ29vVWM3UXVkT25POGwyWFhnMVZxNWFzek54TlVxdjB0c1dXRjZITk9HaEkybEJ0djFOMWFGNWE5RDZoMXo5VVNjZXJQdnhSdFZrbGZZOExGNUI5R3BIcnkzbkxsOGZRWjVpYmxGODZMcFd0Vmp3ZDQ1eWFpMDVTRy81WCtlMzh2SmR0NUxRbitYbTlEenRGaE5EbVVXRnB5bmFuejNhSTArWDFwSlpzWmJCczVhUDNyNzZIeGRURytTMDJGZzhvc0Z3Y2NWNmlTalc1cW1JVkgvZmN5NHpGbzV2UEpvcEx6ZEN2MytuU1pxemNiUGJFL1RhSm9iTEtwcHJhTlNOVjFVTjF0enR6UExzdGFEbGltb1gyWmVvanJUYVNVODNldFcraTNIME1uajQwMGVLZVVsTWxSKzhaQmRHR1FZbXdWd3RPT1c2WmRxMzVsazZDU2JwSkpIclJwWXdxMDVVK1JibE1WKzlWT1g4M0ljdk4wYzZZajV1Y1JUZERxR2d4TmczaDJOQkR4UU1FMDFGQ3BDbHBVUzNtT1RZNHZUM1Bnamk4bGx5dGJXdmEwbG04YkhTeVVuUG1iSGdQUlZZekkwc1hJbjZxZXRkRGpLZlJpZDd3MGthanBoeExNWDFEdjlVTWZCRjZ0RVRxRHNKUWtMa1RrNTcyNWpKa2lsWDNscGVIOXovRm5JclAzbzVoSi9ad0xtV1dwalFMMFZudFdoaXRaQkJqS3k5ekZFWHRFQ1VOaHVqdWY0TXpGdzU4NklaRmlrSVhheE02UmVROWVudmx5MkthcEpHWEtFcFErWE8wRWNXaW9kUE95UTNOV0ZCSUlvUlZvTElSS2NIQ2hXZjF0V3hoT1hzTSsxQVBERHpwbHE4Mzh2MVp1VkhaclVsdDB5WVlYaWJDNGdrZkRIT1BQUUVxRGY4eGN0Zks0TU45K3QySUdzSkkzczFINXJlcFdvaml4SVZVRUp5YWlVSHVFV1MzVzFENXVaV2kwRXgyZTZ2RDF3U3phUnMxTXhObnRhdExmcHRabEozY3RSck15MEVLUXljejlHVWZWYjZRTzJMVVNoSkZkSXE5WmlURVdjenBqSThnTktGRFZ2WEdTWTJHMW1tZkJlYmxDdXRvMGUyUkJvaWkrbEpxVXQ4MlFZV2pRUWs1SEVCRUc0YlpTWTBPZXRlWDFYWEt4ODQvbXRoanVYbFgzWFdrbFBsNjdnTHBOWWNvNlJKaFl0TkJxaDdLYVZacGZMNWxiblptZGFnSGc5QStCL3IxZWZENVY1SEZ5b1BxUFozUG5tWUdGYWI2S1J5U0NmV2RqOGx2MUs5TFdmT2hWdnRMNmpzMDFWWXhpNWgvMGwvZkRRK21ORVNpZ2lTSGtrSGpaUDFwbHl6TTh1NmIvakx4M3FhcXBmSm4zT3JWcTBLeGErb1VJRkdOSHNzK2tNVlhMVlp6TkdqNkhjdTVsYUNObHlhMWFuak5mR2hXYUdNRVVXamp1dVhuUG94VnNGVTlrWllybm1IVDlIZXNqbFdmZi93V1pLVzNPbk54MVJZakRhYWxCRW1MVm9MbGs1Q0VqNXlITVQzTlZjOXhpTE4rUmsvTVUwenBCVlZac1Z1MlJTeC9zSWdlRlpVZzlRTHh0eHYwNXBZbVdXVGx1Z3d1czVYMmpDYUtxU0c1RlB2ZGNJMGFkMjVzR1BGamdlTVRTeE5OTVNJTHk2cmxHUDVEbHdZYzZmcHpyTm1WWittVE1yVmFSMTdyL1ZQTnA5R2ZhSWVvQ1B0eFJEclFtTXVISktTK2lUdmRjMGRNUFdlOVlLeW4xZjM3K2sxL3NGMEUwS1lienhVbzg3b01TV2sxcEhMYUkyZTlVNUZwM1ZtcHZVK1pSaTBBZE1LVGsrbTdqN1lReUdQbDhzelREWmRVV2pxcjZLKzR3Z2k5bW94RDZzRDBDWlJKeVRTenN0YWkxeEZadWJXYkN0U1J3WWRkUk02ZHk5WE9TYnViSmVMQVlRSmdWbFZyaFpPcVFUVi9MYnJZNWpYejNrM3VjNmJNb3pMNHZjdWJTUUhmN0FFSEFJaEFaQUI0Z0FtQUMwQUdQQUdDQWhRSUFQQUI4QURKZ2poYUFXY0x3WndmUWVDRllHOEJIZ0V0QkloSkhCY0JiQVJJRWRnL0lSY1FnYjRLVUIyZ2pCd0hVQzRBNXdad1l4ZU9CV0JvQWRZSThDNUJUQktCR2grQ1BBcXdJd0NtQkdqWWFacDh6Kzlza3ZpKy82dlk4TDVGTkdpa1pUbHB6WmxxMnJTM2xzMHJQbWpFWGtidE1YdnBWSWxxOGpjWHdMNk5TcVJMVjZyMVdpRGcrbFczcXZJM2c5b3cwbHE5VjZyNE9YaWxXa3RYcXZJMmlEblJocExWNnJ5TjBIMnFId2tTMWVxOGpjQjhaYVMxZXE4alpvT3VndTBscTlWNzNRR0hvTHBrdFhxdmU4SCtOTHBrdnZWZTk0RTJpWVRKYXZJM3ZiQVR0VFVhbENXcnlONzJOQVl0U1hVSmZlUnZleHNIdXB4cjNFdnZJM3ZaUUROMDFMM0V2dkkzdlpRRE5DMGR4c0pOblVSVmVSdmV5WVBRbFRnM2R4czBSVmVSdkkyRmdVaEdQRzZsajUzSS9lcTlWbWk2TkQ1YnF1OVZ5SFdndjd2VmNpNUhWb3lWNnIxWGduSlFYU3U5Vmo0ZUtLRGhBSk1XRmdqa1Zzek1RQ2N0QTRMaW1vdTRTa1BZN0ZDeGhqc3gyWnF6bVBkbU94cU9pNStsSFZaNFBMa0FXQ1lYaERHeEdHSWxLSVpoTVNEaTFWck11TE9weFlzNTNlNGhJWE96aUYzYzUyYzV6clI5VmZiK2prYXZoU2NrTzVKbysxcUpudDFYcXZJMnNIY1ZCWWk5QWZhdlVZT2JVWHF2ZXJKZ1lpVW82UlhNT1hTdGVWVkJCOTVHOTdCTkZzQXd3VGJRSDRCTXlXRndTUU5BWGd3QmtCcmd3aEdEQnhDSGdMNFZpcTJCa0RJQ21LQ2djWTV6aE9Rc1lKUVpnVXJoTXpPY3pCS0N1UTRYaTBVQys0ZjQwUmN2Yk9OaFdwc2VBdlVqVXVkNjA4NzFQamRXS3U4amZEdWtTNDdkNnJvT2RSZjNlcTRGdWd2N3ZWZEJ5Wjkza2J3dW8wdjd2VmNoMlhoSDNxdkkyTWh3Y2xENDkzcXZCc2pMNmozZXE4THZDdFZlcTlWeUhXUnBYM3F2STJIb0o4SWdaZ2ZBNEQ0S0lyNDRHSUxhMThzV2hqaTN5anZtRGc0VFlVWTV4Q0xSYVcwamduRXpHWnhDUXVZeGx3K3JtSzZPbWJQQmFGNEdtNUFPUU5JTVhCa0F4UnBSWlVJd0RURHJzVUZ3ZXVaODRjRjRHM2h4emlqMktrSTRCVUZIT0U0bmRtWUt4Q0x5RWN4VFpHSnV2Sjc0bDlld0RVQ0lJd1ZScEFGNFBoT09CUkJmQjFFd1BRTVlmaEZEa2JoeFFLQU1BVkFSUVV3WXc4RTVaVmptTUxDZ1dGaE5uRGptT0tNODRjY09PWXh6RGFlYjdFUHJTb2pZRUZCMEJnQXJ3VXdESkE2QmNMUkVDQUJuU0NJSlFMQUJVQW5GUnNQeXdsQ09EUUhvZk9GNEl3RGVGbzRFa1RoNkhyb0JIZy9scEU0Zk9GQW9GNGZPQmxCN2NLQXpGQkNMM1h4MUdUdWpNNXZsOWFZMGF1Wm1ONm1TVCtJTTFkTjhCWXBwWDNOWEZPWXlkTzdhZ3V5YzdzWnZ5ODV6Wmt4L0VXTHdNakJTRGFnYjB5aFZRc0hpREJhV0lDQlFXNFdrRGl4Um5seEN3aFlPT0tGc3pNaHhRc09GQ0ZqczdDNW1JYzYrbHZiUlRTWDFWRnJEdnFWb1d4c1VSZTcxV2NRWTE5RHdhSG5rWGErcnZWZUJ1SEJxRlZLVTVtYjFYcXZnN3JFTlBRZzZUTlhrYjN0SUhacVN2VXZJM3ZjaFJPNnFMU1dyMVhrYmtKNTNMcFhxdkkyYUxwUkxwWGVxOEhSbjNlcThIVlFYOTNxdkM1R0ZZOTNxdFllYzJGVXIxWGtiUEJ4UkdZVlNKYXZWZVJzOEhWSmVqeTE5WHF2STJLQmVGSUhRS0FId0dJRUFFSUpvZWc2ZzZpNGNDUUNBRElKQVlGZ29CU0Q0WGk1MGpnbkZBU0JRSm1PRndlQjRMU3ptRkJ3VGlaamlFaGM1akdNYzY5VjcyQWRRQWdrQUlrQkx3aUJRQmRBaklDc2doUXFBS2FVREVxS3hRQVh3QkdpRU13T0lDTEtDNXdZaFRhS0J3RFlERU13L0hBUm9GdU9ZS29TQ2dTUXJpY0RnQlNCSkFnNEl0Z3ZIQS9IQUxNSzQ0ekRqc29idlJwZUh3L3Zndlc1SFF3aVg5OC92K2hiZTN2bGZ5eThPcFZqVldxc0x1K25STmF0TXM4dW5NYzUvMGhSQUpOQWY2d0RlQlVEd0pJQ1dBSXR3QVBoV0ppRUdBSlFGS0QyQnZnUVlXZ1JNSkFsd2ZsZzhIQXJoOEJ2Z3hoOEVrRWNId0czZ3ljVUNTNGNZQmFDY0VoaHdjd3VIQVJyQStjUWk5M1Vydk5oOG1hZkpqcXkvelN2Vmt4V2xXYWp2K1NXaWxPTmxUeStwVm5TWGo3NWIvUGZMVldjdTNUM3o1ZHBiQURvQUkvQUMzQUdHS2hFRkFCc0FNUUE0SUJpd0RWQlNEOFVCaVRDTUJGQUtVb0J5QVdRSVFNaXhRY1lMZ3FCVUE1d0xnVUNjSzViRkE4NUM3QklGQUNTUFlLTXg0dklTRmp5RTF5L1VSTjhaYWJUNGw4a1ZBclpMMFlveEwrQWpJSFFBWE1BNDRZaEZEMEFGTUJWZ0hFQU0rRUlLWVZIQWhRSjRVQUFZZ1FvRVVDa0EyZ3FDMkZTaENPQVc3QmVKd09jVUNnWFIyWVRpMEhzQ3ZDVG5Gbk1GRG1NRitjSjJhakVYdm9zT3dvaHVEQ0ZFWEFnZ1RRUXduQXdnN2hISVN3WUM4R0FQUXZMQmlIb1JoYU9PNVFoRXdlQ2dXc0tDNFRrSTRXWTVqaWhDeGptT1k1am1aMTVHOTRWcXlBRENFbEFyME1rOUs5WDZWUXRjTG5mMXYrK0M5T3E4amRmVmFZT1dxTWJtdmdpcThqZVJ0TUhBeTBscTlWNnJhRGZxcFZLOVY2ckhRYnRSZHQzZEJOcWkvdTdSRGt6N3U4SFJuM2RwQk5nd2xkM3dicE5WcEs5VjJQQTRESnFzSkV0WHF1MHdjWU1KRXRYcXUyZzRWUmR0NnIxV2lEZ1hqSlhxdlZhSXZNcEV0WGVxMFJmVkt3a1MxZDJpRGZSaHQzYUl2MEYyM2VxOEx6TGIxWHF0SUhHVHAvNmt6TXEvLzZMdlZZQXVvQ2tnQVBBQWpnTmhnQndRT3dEaEFRNEJJZ0FObllXdEpnS2VCRndORVRnVmdJMFBtQmtId01JTUlQU3dSamc4WVFnK0FjSWZnekVJVlJRUWhWQXFBTGNHVUZPQ21FNG9jNFhzQkZrSTRPT3pONWpWU05LeFloVEVLaVNpejJ5MXJQbU9pZXF4Mld4Mlk0d3h1WTVqdFBMc2RMVlo5Z0hsQUpXQXVnQUZRQUZ3Tk1Cd0FCaEF5QVFBRGZBNkFNWUY1b0ljc0F0NEVUQXFBeUFaWURhQWJwUVhNRnduQjlENEJJUUhJRlhCV0I4QlRoQU1Zd1M0RWdCMEFjWkNDTURNR2NUaDhIb2ZpZ0M3RkFLZ013Um9LWUdkb3FYcDBIUCs5eWRrZDRTMGFRQ21Lc0NHZ0c5QWdJRUtBMUFOTURkQUZqQTFRZkFOd0ZPQnRBOUJSQ3VCcmdiUUdvRHdIZ1ZncmcvQStoK0xYQzRQZ3FCV0I2RDRzUWk4UGcrRjVDNXhZaEZ4Q1djNXp1WVptTTNTUmszenFyS2N2VnpHUzg5SFJTNGZHZ0ZaRmdtQWQwVm5KcEtKT1oyL2NxeHZwcytURFZ2Y01HV2orYS92OG1QTnhHcDhQWFJpZllPNEdHZWluMndXNlJNNm16a3EvM09JNjR4ZGU1L2VPOVdiUkdXbS9Ub2Y3Q2VIeWg3VDJIdFVpUEtqbWtMV1BXc29yT1pKbHpuekZtekFobVpOTTA5eG1ERVhWWWQvR0UyRTBLSlpBNUpJUkJMV1BEVXpOU3hTVmsya1U3NW1ZNWx4UG83ZFlFbHA4WFNTOTN0a1krQkFxdzdCNEhNb3BJcVBRRVR0MXRXVFVPeFN1WTh5NlhzZGU4eFZaSmVrbGdRWXZuSW92ODF2RmtJT1E0eW02bUZra2w5OCtWNXJwSS9xVmtZc3MxSmN2bklPdm5mMXZuTWw4S3pZdEJ3UUdUczFKSmVPZEM1dy9TR0p0Ym5iNllveEhZWnEwaDJkMzh2RDE2dEw2M2RjejFZTkVEdytiSGdvZEVVMGU3ZU5LSGZTVHMza1V0WkZyZlNVenpFMzZmTmN2RnRCMlI2RHNkMDRsSjdVTjBORDVWalRGci9iM3pUNGJSaUxTeG96Sm1wdFFPK0t3MEh1UGx1YWd2NVNoSk16bHZtUzdYSzA0aVpadFlkZDE1dWlsOVdORDV2eFVJUnpEYldDZFVjS1VZVGNKWE1hMmxuZGI1cGVoV0lMdXM1UnlUZSttZGRwTUN3MDdHejI1cEhGdERrOGV5YVN4RUpVZlZOMGNiZE9hblJsZWRtYWZacVc1ZGpJNEt5clNYcFZoUjhHZXUwbHJVUXJqdzF6bmM3THJ1eTV6VE5QWm5NenJORU0rZDZYbzVIRjBtaXY0M04zZ2o5OGVFWTJBOGo4MGVDZEkrZXRmV25qM3I1aVpkbVNSdzkxcnh3eXBHYm5UNUw4dkpMTnBVM29hVHN6ck1TK00yU0tON0lTZ2xGZ2JTUGxoT1RGaVhPbWVXUGRUMWtUaWpsV1hsbktKYXV1UHFMK1JBWDFZdXZsbTZZK25tSnR6bDhKYmh1a0hLTFc5cTZqeHVUYkpobEVVV3RMVVBPWDUxVFBmSmlvdEUxNjErQzlXRzdWb0k1SjZhUzI2WWJtTHJ2KzZyWFpneHEzYWhrN2VRTy82TFdidldtckRkQ0ZFbUN1Zmp1dGZucGJ2azh4RzVtYkRVMThMVE5MMWErcjRxeDBOT3ZqNTZSc3FzbXV1Tjk0YVpZWTdMT3hzdFRXWHJMVmdRSU14WTdXUms3bDVzTnh3Umk2VHp4K1JYa0NrZHNObFRUdStIOW5NZTVPbE9vWWxEY3RYeHhqTlgwVVRYcFRZYWlyQ1VaTmtRaUlxNEwyc3l6bU1KNXVaUmlQL2ZIWlFWbGJXeVppYlBRYXA5R2F4ZWt3NzZMV1dFS1U3ckN4b1hPK3JySmxzMWlEVExXU3JCR3l6VTUwN3hHWnpFT3VqdWNsby9sc0dXQ0RWajh0RzBoMlZ0SnI2bjFVdWlITThGUzY5TFh1ZjNYcFNHZm9OMHY1bmwvZVJuTFZYNTBFdFNacTB5cmpRMGs0Z2FVS05iT2xoWnBVcGl5ekxHd3hWekxSeWNwUFQ4ck11M25jajVqM0dRODZCbWQ5V2g3Tk5hYkdoOW8yZWVoSWNzS2xUdTl2NjlNcVNyV1hMbFl1YVNuVE1PemRGL0hWVFhzbFpGTVdGd1N3MitMSkJzRnhNUkRTMTE1Y3h5NmZ5ODc2WHVWbTB6WEpJS1JTRVJwZjN5MjV4OHBUUnFUWDBZN0xKaDFTMjZGQ28yUGlMelBYVEhaZVFvdTJIOVgyVVNwc3FHdzJlc1lMNWlMVW5TaXYxTC9ad09oMzZna05SbVVQWHFtS0hMS3pKSjFXTU1zc0xUdXV1ZjUwck0wQjNSYWZuMUhOKzloTERyTUZKTXF5c2d0Ym5xZHMvcmhxc3Zrd3dZTXZ2bEZiVHAwUDl5OUUycHRvT0toTUNVSzlRcXZFNVgwNWN3OXN1Z3hLekVlMHMxY2FSbFdkVnIwcE5tdXJ6UHNhRHdScUlMVExKb2o2bExlNXJhbGNOTXk2VEUyT25uSTFvMDd6ZElwUlQ1VjlpVUhaajBDaURSb3BML1REaHMvcjBsNVZkMWE5NUd0R25SbDZERVhveHI2MWFyRVlKNVlrQzJJZExVRDlOWnZLaXVWN3IxR1dPR0RyTm9aaWRLUzZJNkVHUmpWMUNWSTVGZnNjRDhTRlI1QXFOZVZCR3ZyUXdycnRjcFhMeXZ3WVpaOHcxSjU4NnB0TnZXcW1sb3F5Z1VuTVIvUmEwM1RxVTFKNWIwTlJlWHNlN01NMWNhalgxWnRpWUtDaWM1UW1pdHlVbk1YbGxqL3YzdDNmUzFXWm1qVTl6TFMveDB0WEdycXdab0ZiVm02ZDhjMVdMQWxzVlRYRk1ibUtZcXdxVE9XN00wNXFybCtZTU12SUpQYmpuenZvcWJoS0VZWGtxVm13UW9ld2dJaWh5SlVweXM2VmxsS2hhMzh4RXN6czZmYitNdnFQTGVYOW1hcUh6WUNLZ2NBS1VCdWdKNEJUZ2I0QURvS1FEUEFBVEFOb0JWZ29RWUFOSUJwQkFBVklQSWVnekFvd2FBcmhKRnJCY0RDRllHY0hzR0VzT0I2R1lmaWdYTVlRaWNQQk9Rc2N4MG1HWnpNdHNLOWRBclo5K0M1dnNBMElCTklCZUFWQUJaZ0VFQVJnQTh3SVVDQkFOY0RyQmtDUGdReE1BZDRCeEFqQVlBVWdGaUJGR0Njb0poT0RNRk1BYW9CSEFrMEVvSzRGY0NvZG5DM0FiNEN1QVhBdUJTQm1Da0U0TUlTQXJCK0FrWXZBaG9WQVV3S2dIOGFjdVZyUHgyWHBqVG8wcXhFa1V2aTRRT1l0YUEyZ3hiR1RtU3RqMlRLNWZESlpLc3hFcXpLM3pCRkdtd0VYQVU4QnZBSElBTFdWQU9FQTdRT1FCRXdGakFkQk9STzRWZ2NvQ09nL2ljRk9CVmd4RkFwaCtINE1ZTXVBMitLR0RnVndIQUg0VnlFRUtMeUVKUUkwRG5CbkFyd1U0dkZEQ2d2Y0RRT0RoQ1V6dDVSVm4yMU04OUpCYld6UGQ4eG1ycXVkbHVkbHNNTitZeHp0TXZyTVoycXpGbWc0bXBHNUtVNVNPNnMrZnFtcjFYYUlVWWlsVWlXcjFYcXZnWCtvdWtTMWVxOVY4S0tKaHQ2cnZoUnFvVmJlcTlWOEhHakRTV3IxWHF2aDdvVmhwTFY2cjFYd2M2TmhWcExWNnIxWHdkSzFLdEphdTlWcEE2bVJUb0k2dlZlcThGUEdsMHlYM3F2STJhQ2EwRjFDV3J5TjVHelFUMVMrc29TMWVSdkkyYUNncVM2aEw3eU41R3pnTWp5WEhpWDNrYjN0QUgzejMwNGw5NUc5N0d3QlVzTTZIajVMN3lONzJVQi9IVjZIaW9sOTczdllYQWJQTzB6aUFsOTcza3JFZ0cwYytjT2p4N1NMM3ZlU3NDYkF6QlVCaWc3QXZBVUFCK0JpTGdxQW9BZGhhT0JpREFFa0VHRU1oRDRLZ2ZCNExTckJ3VENjSkFNQW9ZUWk4UEJjUWtMbUZCd2NFdzQ0c1djNWpHTWM1MTczaDJJalZWZ0hFQUdrQUw4QWxRTG9VQUw4QmJnQm9BQzhBQTJsQVl3cWlVR1FIc0VHQkdnRlFCR0FWd0crRW9oSVNpeGJnOEZ3Q1BrSWVpOEJZUStETW9KbTRzNFhnemdPQUt6TTZNSnh6RUl2Y3dUdU9VUWJPNjJ6NTM3SHhSZHJQVEhTUnNiUFcweExZMHErejAxajA1SkJzS1RuTlpxWS94bk1iMk9uVVlwam1OWTR4THBwaXJYeGdGZUFKUUFEVkFMc1BCdUVnQkV3TmNDTWdIYUFUY0Y4RTBIb29Eb0lvRG1CSERnQ05nT0VFK0dRNHNYbEF4Q3FET0FyWUNzRGd0Q0Fjd2hJV0NnVzRKQWZBUEFUT2NLQ3hDekM0VGtMR1gzSHpXaFdyaWRDdnNFS0FUSUUwSm9FUkNTRThLd0JrQUhBSkFBUXlZWURnWmhXQVp3RklCQ3dJU09BUlVLSWxXRlFjRHdoQi9GQUVNQ3NId1ZnS3NNZ1VyZ3pZUWhKdzQ0QzJJUVNPSENIQzl3RlhnK0tEZ3ZZYVB2UmZRZzBJRVdNcm9ablJTbmEvOTlmTEwvMTh4OHJsOHNWWkpkdW1ZelhOZHUzZ0JLZ0VKQUJSZ0Q4Q1lFQ0NFQU1LQkd3Wnd4QVZVS0FsRThDd0I0QWRJdERNQzJBVjBoRDV3bURLUmNHSUNIQklEOFB5RUN0QTZtRmdyQjlnWmdhQXpBdGdVb1ZnT01JQndtY0h6QUhJREtKODVnNHNHcUdxd0FVdDczUk4zeVQ0Z0NTeVg1anZndnk4WVhsQW5nZ1FNQVBRSnNLWVJRN0JoQjRCQmhRRm9JQUUwR1lmQmdRaEhDbURFSHdZbG1qZ2VCSUQ0SkF1WVVGd1NCZUp5Rmpod1hCaUxod29Ramhaam1GbU1jeTdwOFhBdE0rNzFXYUhYbEkzbktKTFNndjFwYWZkMmFMSHdyN3ZWZUZ1Z3Y3dlZjaHkrbFVydlZhSWRHbUVydlZlRHFTOU5na3E5VjZyNHVYS3RKeVNlOVY2cjRlSUd3cW1hU1ZlcThqZUJ5UFhTcWtFbFhxdkkyZ0g2R2pSMGphdkkzdmZCMUVTUUs3NitrelY1RzhqWXNCNFRPVG9jREVta0RlTDFCSTRoRWdSaVpaZzQxekdOeFRGaUVXdWx3NEVnVVlocGhRc0hvdGVPRG02ckNGMllPT05OcjJjZDBuMFhtd3RBbXhJMEFWRUVRQnNCVElRNEY0R1lBeWtBTkpBRU5MQTNJV0F6Z3dzQ0FCRmk0Q29CNktZR1oyY0dRUFpDT0F3aThoSVFsQStCWEU0dkNzRE9EMndUaFhCb0Z3TW9maElGQXVaWGlIeE44VW15K1R5U3JrUEo5Umtha2txOVY1R3lBRTZDQ0U0eWMwSE1LZ0lZR0RrNTR0UVBCNEJRQm1DRGNXWTVoWVVNNDR3UGhlSjNDN09GNHVFd29Zd2N6czRYaTRUaWhtY0x4Y0p4eDAwODMyZlR6bENLTEJQUURHQm9BZ3dkUWxBSnNLQ1lVZ0o0RStLQmFEQ0g0TURXTTVRT3drQzVtWVFsS2E1V1hGM0RoWmozRGd0WU9FTE14eFJqdEgwVmNwYWZIaXdFTkEwQVRnMERFSG9GU0ZjcXNPZ0U2QUxLTHlnTTRVdytLdGE1b1BnSVVzSnNIZ0ZXRUF3dkR3ZmdSV0hLRjdLeml4UUt3WkJWWVE1am5zeVN0Wkd4Nk5IeVVxeTJ4MEI2a0tqenNFdnpORjVQZXNZVGVSdmVyQ3dKelVUZDBtK3VacjNxdlZhZ0dCQzN6bXZvaXE5Vjczd01ESTArbWt0WHF2STJhSHI2VmFTMWVxOGplQ2xCZUdrdFhxdkkyY0RycEx0dlZlUnRZTzJndTBscThqZVJ0WU84UGpVMGxxOGplUnNaQ21mNlZTZ2txOGplUnM0S1RQRDZTSmF2STNxczRYczZzSnhCSFY2cjFXSkJHSEFTd0tBRElBRlZLaWtJb01BSTBDb1VCZ1dFQUFvZ0Q0Q21EQ0JUQVY0STlnVlJkaFFHWXVBZ2dHK0Q4THdZd1I0SkFNaGVIbFljSEEvQ0FCOENVR1RuWnp4YzlqcnN6RmdEaWdFZkFHZ0FNVFF1QVlZQldnRkxCMEFPd0JEZ3VFek1vQ09BZHluRElDdUJrRDRzSmdxRGd1RE1EWUE3QU40R2JBempnVkFady9IQVl5RWhFNEZtQ1BBNVFad3JobUxnOFlHUUtZTXhhT01JZDFEbzFTYjMrd2FUbTFQMHZtak5QNHhxQmg0c0E3SUJJQUM2QURnQVM0R1FDT0FxZ05nRU1BRGlBQjJENEdCQ0RFRklCdUFHQkxCV0JFZzdnb2dZeGNVQ1NzWGhrQ29BNVFxaDhINEhJQ2xETVBoY0RLS0FlaGFDTEY0UDRuQkhpZ0t6UmNMZ1pnYUFrbENIRG15Zmc2WjMxR2YzeCtaOWFabVNTZEUyZWRoQ3VUa1c1dmt1NzZkK1pwNjRsZS9NeXVaTVJONENEQXVsUW1PRmJRYzVMRmcyS3RMRUJBNGZjVkxFQkM1OU9MRUpDNm5PTEZuVXE0czV6bk92OTlhSXV0U3FQc0ZvQTJZU0IrWmVFNG8wZDFhYS9iT29rajNIbEdkMGEzdEdxaEhTYmFnRzJCOGhkWVFoMGVlbHBWakZjdlVSMWU4NmEwUGlyZldyVlNzV0I5QVVWUUVHTHlnVXdKa0tvdERNSE1MMUpjSlE5QkJDOFdoa0x4SzZWVnVIQmVLQ3c0TFdPTXVZV3pybXRIZWpSSkYvNm8wRzJCZEFFWWdFQUFBbmd3Z01NQmpnQUlnTGlCRGdVSUk4RVdIeFFLZ1NRTE1EbURzTWdPc0MwRXd2S0xZekZxQklnY2dvQi9CbmRuRkdTT0VMTUoza0luZUp5SE9ISE9acFVTbDZQdEZhNWZVcTBZb0R2aUxBc3dDV0FCbGdKMEEraUVHQUFac0FHb0FGZ0RrQnVCd0Ixd3ZGNEc4Q1FDZ0JCQUVjQWdRbUhIT0p1SVJRRWtHWUdZSzRmZ1hJU0JPN01MT1lPTUF0c3djeEM0Y0UrRTQ0d2NZT1p4bWJvNkZhM3NDMEFKU0FEREFVTUhpQndDSUFOZ0JjQUFXZ0puQklYamlBVUJLQXN3RnFKcUJVem1UbUVJZkJLQjdBZHBDR0ladVkxenNRc0JuRDRYQ2pGR1BIQmZpRjRtaFE3ZlJXNUpOd01vcSt2SUttQ1BsK1JSWURkQUlsQUROQU4rQVZWZ09RSWtBZk1BdmdNNEQ0RGdPbGlVTVFMQUNKQkhBNWdHK0J1Q3hqdU9USXRMQjRCckFXZ21BdEJRT1BMT2ZBdkE0U2hDOFRFT1l4MmNKOExzS1Y2dE83K1ltOVAwNUhUWUFBNENoQVdJRUNBL2doQWRnR3dBTWNBQ1dCRVJ3SHNjSEJhR1FZQU9JQllnTHNEbUI2NU1YRTJGaHlROUJGQVdZRytEK0ZjSlJEcGN0amhPRllNd3lGNDRRdkU1Q09NSVhsTlRaanpKanhYVmo2WHpwVnJxekt2Vm52L2Y5S3EvbzZVeWtjdjd2YlBjcXgyWG9YcFY3dE9ZenZjK1Z1OE5hOXVYRlpqdElLUUJyQVFvRWpndzRCdGdLOEFXY0JDOEU5QnpneHdHMkFoQUtJR2pCMnhrTTduQ2ZBOWhtS01MV01rc1VyT0hNNWozTU1PWmRJeHEwM3FqZlNYOW5BOUJGVS9PWUhBWE9TbDhlVUN6RytDU1BkMmtDWkN4RlVaUzFFZFhxdlZiUWRvUjFhR3hlcThqYlFwcTA5TWxxOVY1R3hTRHJxMWFHa3RYcXZJMjBQY2lyVGIxWGtiYUZIVVhTdlZlcTBRYjlSZEs5VjZyNHZ4cXREdWdpcXIxWGtiSGdUSVhNOFNQQ3dvTmZ2aUpUTE1YVkVsZTcxV0FBV0FoZ0VMQU51UEMwbUFXUUJzQUtLQnVqNExoVEVJZHNCSEFOTUZFRCs0VGpqKzhoRnJBWlFZUmZRNE9QVzE1WXRtTWV2M2hTdUJUS0diT1U4OXNNMVA5U3pUbS9TWW1jNWU5RjR6Wk1lMFI1Q1ZKWjFGdzVzdGRMTjR6dXhtWG5OaVZhMHN6bVp2THpuTE1lTEFGVEFoSURiQklCa0ZZSGNBM1lDckFGOUF0aE1CUkJGY0x3ZHhLQkZRSTRCZEFPSUt1SENqQ3puU0RDRE9CRGdJT0RRRmNIMFhhQngwNEpBTTRaaCtIcm5aZzR3VHVMRm1NZGtiaEhVckZnRytBSXNBRFRBUnNKUTJGTUROQVBDQVhjQlBRTWRZZU9FNHZBYklDTmdod0lzQXFJS1lJN0dZaGVMc0hnTW9Ga09BV3dlamhiRGpHRG1ESURqSVhPY0xSekVPRXpNTG5DZEZLWWZCZjNScmREelpKS0JVOFlUWUF6b0JMUUJtZ0N4R2dhQVpBR0ZBZFFDMkFMS0RmQW1IR0EwQW93SVhJRmdBRGdDSkNNSHpNT09GNUNENkJVRGdlZ1IwSzRQZ1p1ZVFpWVRqZ1poWEJHQy9NdzRIemhjek9jR1pUajg1SjgwK1kxUGpMZnk4bWVSZDhhYTFQbDlScDBmaFk3Sm5lR3N6Tk5GNXIvOTdNenc3T25UR25PanJ6SGIxMmZOWG1kYmdGbEFKWkFQR0FwekFOQUNhQXV3YUFEQ0FHUUFwd2ZTZ01CUk1JWUZxQVduZ1E4Rk9ERGdZY3h4UVBBWmdGU0FHaEQwRGlBM2dSd2ZpNGhYaGNId3ZBclJlQ0x3dWM1d254UmdaTUU0b0hFbmMwN2Y2VjNKeTFUbjl3SzJORTJBY29BNklBMFlBNElBdFlKa0JVd0RtQVJrQ0lnSzhCRFFlUmFvTGdwZ1FJQlVnVXdQWUc2RDZMU0hSbVBZTHdleGVMc0oyWm1qTVlKMkRqRExMN1VWVXlQbUlCVmV6WWpSbG13Q3BwLzFXQ1dCTXNkSldLL2JuUzJYZEpSM2JwVnFOR3FyUk4xRzBiMVpwV3JuMVAzbFh6WUdBTDNIbXBib3lHNU9sNmFuTjBscGt4VUdlUk1zZG1wa3cxZG1wVGtUQzIyQ1lCTVpRMllFUStrUFNnWFcxcitwSmhqdDFXT3ZEdnJUbDF2cEJWVFJtakVYUnEwWWUwdlFLcmtVV0RvSEo2TU9LaEJiMEV1ZHVteU9aYnArNVJWeGx4aGpyZk5hbEpmSmloQnFibzFLSWc5SDdtSU1RUng3QnpEc2EwdFE4K2tKWjYvWi9NVm5PMFBsOVBZL2tqTDlETlMveTllZ3ZGWENQcm1XMkU4SjN3aFJQVFNTeTh6ZHFXcU0yZm12WnF1RWZsNDFxcTh0L0dNMmkrTzhaVis5aDBMU3FjcFoyaXBiM3dnNlZxYnlZK2t2Tm0vSmFNa1NSZFBHYWZOaDJMamhvSmdrWUpCcVQ1VTdreXpwVzNMV3hpdE1rdkQzZTlCMmFobG5XanZqdS8yVkJOc2JUVVUzYm53bStvbDdwUUx5cXhyM1dJZnAvcE5MVTkxRWNjaW0rck9nNkxMQjhjbVBFTzZlNmZZb2V0SlZ5MW1KbDhtWXRjWkhxYXZ1MTlUdU1ZditzYkpwZWJCS0JUUUVZK3hiUWxzL1d4aFI4dWhmUWE1V1h5WmRvSlp2ZkhKTGY5OU13d2pyM1J0ZWZiZ01OUUxUeUFxSVVzbXA1ZXlmb2EzK1M2M3lxNnpkVTV6cDh0M1Zramd2TjZzTzQ5ZmpTWXErQ2FFYWtLU0toMHBtcE5tbk1TS1lwNUx5OTN6RmZlUnlLcWd3bkxKZkZnMG1uR3o0WE9naitxM0FsQXhUMDVzcHl0S05PY2RXV3lZTVZpcGVTTjFvd05JdzlIZlNTeVNlNTQ5S3B5VnFKalo5UEppNE56bWVJZk9kbk1xYU1UbUt6ZEJZZE9tSmM3VGFJODFHYWV0aEpGaExGWWVJSGJsQTd5bWF0OHJVU2RwSlBmUUttMXFXN2NpOXltem02V3NJMnp4akZqSXVDZmdsbllxTnNQYWsrVkNBblRjMm54YzBwU1dwSmVreDJ6ZlJHalplTXQvTVR1d1kxWWhGcVRXRHc5MEhZc2MxeXFhaXFqTndPMWxvUDV6V3pxemRWWDZ4dm1hcDgyY0xkSTJLaDFaQWtvZWU5UTZQTlJpWmxabHpDSjExTDF0bzM2cEdFM3FxUGpiS0VPTEhvT2FWZXhNN25KTGo2VUc2cDA2WnEvR1NpWWFrOVpMRnpVSFZ1Y3I3UklGQnNxNGJvVm9OYXg2ejBOVzdvUUx6TmJtR1doRkNGTHIzaXZMNGd4OU5wL0pQYVk1Sk85aFlHN1JFRmpoczJkT1cxeWkrb2x2TFpjK3MyakVXSVlSR1Uyc1JuUmx2ZEpuejdTaVVSazVzMHJRd3E0YW81TjNPS2xHS0wrK2xaQ1ZhdEovSTJERjF5Z2lpbC9xa2tkN1JialRwTjYyMFNUZmNIUzVhd05CRUkxRUd0NnJnNWV6a2M1bWRxdURoNkZlZEpIM1BteDNuRHNQT3R3YmxLQzFMajQwTnFOV25sd2t6Tko1bVlYcUN6bk1kWHMyVU10V1pmQmlYeVMrclJTVC8wNy8yc1ZoYVB6Mm9sU3AyL3g4b1pSald6QkYzdUdEckdUajA1cU55WHZxMG1wTFIxY1lRK2JIZ2JWamgwWkFhS3NVVFRmMUdTVWExUmNGKzV6bnd5NlhDNTBuSVpkRWNqSDNtb3RyVU9xWnRrd1Rwd2thNUJGcGFjN2RhMG5JYVYwUnJaT2pTWmM1MXpPTmh1clUrcEwwSU1YUU5VeDRtTHdmTEt1T1pWZGNqVDRKdXkzeVpjOXl0RWJMbkxrdnk4UkdkcDBQODIvOHZKZWxaMVdGb3NTSDZPS21uSEtTeG5ubE8xYnU1WmptR1oyZ3k2Nk4vOCtuL0xMeVk4V2FpYWJQTSt5QVBCcUJycUNKTWVXdVhyYUpLbDgwd3d1V1p6MlhrMTgvb25VK1JBZ3pONFE4NXVoRjhWb3NSQTZvQlkxTVJwT1hndXBrNHBxYm5ldDFmdVJNOXI1c3BZN1U5YlZ2bXgyTWpHUk1SN0hBcEZWRnJQWTBvUUQ3ZDU5Rk5MTkptbTV6TE8veU9rMnBhUlRhVXlicS8xVEpuMmFRZzNORFRDSHA0cE5QNzFDdWNza2xlWkF3ZGIrajlJUU1YSTZmS3N5NXBIR1hZTHcwMUxHOFZWaFUyZFB5RGV2bEVPWllxd2xkWm9LOVI5MnZya3E3UmIyenBoOHlaa1kxWUVxZ1ZTbkpyVFNVYU5lcXBmemN6dFlabGhlTE5uMU8rKzlYL29yU3JFV0I3d2pTUVlLNHBJK1EzWkdLclVoVlpoMmRuS3l3dkZ5YWZSdWJUNWhwZUxlMUY1MHZybVlzVUZxUjNrUlpxMFAzb1p1anQwbVZtSlpheDJUWStRbmdySk16Zlcybm9wYUlHRWtiYU1ld3hOTEptODhuSnAwOVBUT1l0L00xbkZWV0VqTFJ6ZldOaDhTWmdZMWN5aEpzcEt0TTByUkpNMkNCSWVDM0tDMEoxRnFyZktITFdyeTlhbDV6K1NPdWRKOFk2WjFOTVZhU0tTZFpOdjB5WW5WWUw0R01Hak1nVW9lU2Nwdm10bGIxeSt1WWd2RU1NT3VxMFBtZldiekVLeVNUY0RQN3gxOFRNZ2QxV0JMQW9HdWVzYUg5MDJlWCtYdzFabHN6UXhaWnU5STZVWDh6UzczaFhtdmd6SHNBRndBNllDemdBK2dHNkJqQVZRQXhJQXpnQ3BnQXBBUkVKUXNLQzBHTURkQWNnQXNnR1lDUkJSaVlXbFB1eDJEMEdjWGlkd3R6SDA5Z3V3dVpaeWlaczV2RUZwSkYwc1pyNlRZMURDYkFCbUFKc0FJTUFSbVFLWUdRQllBR29BREFBdWdGVUNLSmgrSnNKZ09VQnZPQWNBRUhEL0IvM09MQzhLNEhPQTd3L0F1QUlJQ2xDb0tDRjBpNE14Y0NvRDBIOWduY1VZSjhPT0ROd3VDUUxqaFUxR3NicHRFYU9sZFJIeXlLQmpNaURGZ0FxZ0UyZ0JaQXFBc0JGZ2dBQnN3QVVRSkNBREtEZ2VFVVhJQkFBYTREY0xBV1FFaUJGaFJDbnFMT0ZCWUJsZ2pTRVhnTzhINEdjTTJQRW9uRnc0RlVIOElBWDVuSVErWUwzc1lHWkRKVStsZUlGWEtBL2srait6TTB6b25McVhUOVRzMzkyZDRiSG5NMHJ6R1pmVzc1cmM2VnNBTHFBUm1BRzZCMUFIOFdCTWdVUUEvZ0YyQTFBZk9MeWdSUWpnV1FIVUJSQVJnQnhncHc5WVE0YzBCNUlVUWZBTFlXZ1hBb0V4VGtMbUVPRDREbEhITWNKaUhEakNFY3duSVJiRFpSdkdwdytLV1NScDBqR2UrQ0tTL0l2b0Fab0VQQWNBQ2pBZ1FEL0JPQUZ1QUdaQWRnQXdZTFlEN0JkWUhvWmlVQnpnTE9Ba0lIU0Qwc1RPWU9PWklWUVJZRGZBNEFVZ1B3Rk1MbmtMSGhrRCtFa0pJZloyY3h3bnpod2hZelZGNzZpOGVDTHJkSXc4Z2QxS3hZRUJBQVlBVWdBczVZU2lVQ0RnV0FLZ0N1RGNKd2xXTGhPT0FiZ0ZXRDhBeml3dUU3bFdDNFRNQjhETU1uRUltZG9yTUlTbWN3eTY5NTN4MjcvY0NsZlN5NWJPYXI5Tzc2MGRXYUkvb3JSWndQQWxEWDg1Z3RFanZOYWZLQlpqZkpKUHU3NHZ5TDZsdTVIVjNhWXZNdHU5VnBCUlJNSlhlcTB3cFZCZEs5VjZyYURuOVNvcHZWZXEyZzZvbTBxbVMxZXE3VEIzOGwweVdyMVhiUVQyT2ZYSHRCRlZYcXV5b0tJVENJZGhZYWk0Y1orK0psUWhZaCtTZDE2cnNCQndBRFFPRUNHQk5JUlFBaVlDSkFLT0Fvd1VBd0U1VVhpMElvSkFCcWdvd2dCY0poUU9VeVNFUENFY0JuRE1QaXc0SnltY3pPRnJtTUhHWnpNNXozWENMNjAzeFNzNnNiMnpKSFZnYW9BeDRDTUFWNERBQXpBcGdSRUNOQUdHQWNvUWdHV0MrV0NtRHdGNEJ3d0ZvQVNVQzdDbzBUampDRnhaZ0lVRVNCRlFPRUVlRmNIOFBkSTQ1NE1ZTkFaaFdDcTUyWU9NRkRpRWhIR08zaFdycHNRS1pQMHUxZWU3Vm1PcG1pY3lIMDZGNWswOTBhVjl1YTZNN3JqeXgya0FZY0FqMEFPSUFFUUNqRG9FNkJyQUVHZ0F1Z1BrSDBGMEhWd0x3c0FiZ0RqREVCVndGWEJUOFRNRXppSGhVRTRlZ1Y0RnVGUUMzRHdVWXN6Q2hoUW9CeDRQOExuTXpneVlLTTRYc3padC95T05SblNSZlNJRmFpV2JBaklCUDRBYklCY0FNa29KUUVkQUxvQXZBQTZJWmpZTVhhTDBBOEFwQUhJQVpWalFyTllMVjRjRE1GRUQrRDhCSUJhSGdTaE82Uk9RNFBoY0NSRElYaCt4eENPWU13bE9Zd2hkZ21IOVVRditsWHpvMEVrMmdzdGxrNkxZb1RkNG5PbGxPSVdRM01lMWJIWmc1NmxibFpjMHBPY3lWV003WHNBVmNBb29CYXdmQWtqZ0lNQUdNQUpjQUhrQjFBNGdUSVBXQ21HUUhDQkVnZFFPSUFhMERnTEJnVWE1dzREQ0ZjRVlDakIvQm1BZG9WQWtNelNqbkRoQ0Fqam1DL0RqQndYNFhpaHd1SEJhQ3VRWkdNak1XdGlLMDA4azV6czEycVpleVpZOWJKekdaakpkbDdyN251YzV1YTV6MjVtWXhnRWRBSkxBSW9BV3dDY0EyUUtnQVhJQWZJQTRRREtBc3dCWVFxRlFVQUdZQTZBRWpDa0VrQkp3RWNEd1hsaTViQVd3RjJHWUk4RWJMQ2pJa2NFN01LSE1FNG5Zd1RqbVlPTVlVWWtQZFRRazJKK1ErYXd5ejFQWG5Nb3ZGWmptc0lsL3lyRlgwR05UUTQ2Z3pOWTdPWTF5OSt4Mlk1bTY2VnFmbU9jemVDN0hOV3JQcXhVQXNZS0VGQUx5d1ZBZWdNc0tRSjBLWVQxSEZTRUhjSG9LUXVDb0R1UWx1cTV4Q0h3ZWxpRVhsbmJtSEVOMEthYWJwcnErNnJuZlYxYW0yQURSQlJLQ21ha1BYTWJ2cFRTa3Rtb2ZTWlpjcEl5Wm1ycjdxMCtyQmlBam9lTkhwUExCNDM4N2R2Y1VLMWxrYnM1V1NOanJsTkgxcG9sbS9wZzNlS0k1c0pJQTFBT0lRaFlGNHRFZ0pwb25GUk56Q0VJeENPQjQ1WXNLRUsrOWhDVUlTbVlXSENGbm5PWVFsQzJjeXpVNHlNVC9sN3FzdFdpOEVYc0FLa0Fsc0E4b0JraElBVmdCREFGR0JSZ1VnQzZnRi9BWkFtQ0tHWVpnT0lBNTR0Q3VCb0JUQVpZSWtJNDRGWmdvQ1VCWkFkWUZNRDBET0IxZ1Y0TWdaaDRENkhvVmhPQ01ETURiSVFTSWZoV1lLQmVEOENNQ3NPQ2JDZHh3KzViNWEveVlxL2xvdmhmMGlCeGhOZ0plQVNtQUdnQU8wc01RWlFVZ0F2WUdXQUZFQXFJZGhESUdpVUJzZ0xjSFN3ZkFMRUt3VVJ3VEF5Q1lVQkpBcXdGcEFzZ2FCT0NNRjRWZ2ZncWkwS3hZVGljQ0pnV1FEcEJvQkZobUtCUXdQd1ZBZmk0aExFTEJvcWQxck5hcE5LYVkzTHNuMFpYUDdkRUdaenZvTWYySVpIMW9MZ2ZlMTB6R2Mxak14bWRwZTN5eW5PN0dmNnRMTTUzbFdjMXl2eWdLQUtBMEFmNElrRFlFZytFWUUyQTFRZ0hCK2dBMVFOOENsQk9neGdiQURkQU53d0pRZVlKQVZBOEFzUU9FQ29GNFZnU0lFSkRNSkF2ZUppRUtvSThLNFBnWjUzWThYdmN6TzN1RXRTc1dzQi9OOEt1SmZlOTRkczRGRzF0S2xTV3IzdmU1QTBCM2x3MTBFZnZJM3ZjQSsvMCtuRXZ2STN2ZUI3b2RoVWUxRWZ2STN2ZUI2NDZhcW9TKzhqZTlvZ25LUlZwUWw5NUc5N1JEL1VYVUphdkkzdmVCMzVlRXlXcjFYdlpNRThJc3RJTENGUWZRT1NqUkpVb2d3cW93eldLT2N4amlSMXp6WXAvczRkbU85S0h6WXJBMHd6R1VNVERFSWd0WUl2SlRsZTZoeGpSYVdLTXpNUWtMQ2l0T01NWXF3YzFaak15KzNkV0xhUFFrK0pmRW1JdmhYQzROTlVIbmxXVlJlY296TEpKMDN2ZVN0UUhrUTZLYnd2cHNHRkJzZzBrbEwwM2tiM3NoSVFLRUtZSk1FR0ZBQjdBekJKRDhLSU13dEY0ZUF6QlFDbUVnTVE5RndJY1BBK0RJaEJqRDRYQXhrSWVEaFp3WkM0WGhtTFNFTWhjUWlkeFJ4Q0tDemh4ejJYSHVXMGFyRmpnVDl4MDJpWXJRTFNZWjBzd3JCSERsZmVxOVZnQzBwc0FwQWJBaWdLa0ppaWZRQkZBd2NDaEFnbzRUS09LaDJIWURhRjRmTUR4d2ZEZzR4VWhEd0N0QjhjVUJSTVl4bWNXQ1VRaFhITTdNWm1PbC9uVFo3MDE5QWo4MkI5RG9SZ2xSTUl3OUVnY0RnYmd2Q3djSEE1RTRlQ1Vzc3NKdzdFd3RLTUlSTUxoT1FzZXdoRXd0SEhNSVJ3c3g3SEZITWRlalJlTm8xOEkyS3dNT1VVVVZrL29YRDR6VEh2STNrYlJGNk5JNnFiZDZyd1VLMEtwWHF1NEYraFdrcnZWZUY1bElscTlWM2djVEtSTFY2cjFYZ3BJd1hTSmF2VmVxNkIweHBkTWxxOVY2ckNPc0UyQTlBWGdld1RJTVFNQU9nZkJtRFFHVFFxZy9nbWhRRVlXaTRNd0tjSkxCWUpoTzRLb1B3ZmxHT0NRRE9ER3dYQjJKeE00UHdxaTBVQ2hoQ0xoeGppRmppRm1jajROVlJ2cFRLdnF3QnZ3Q0t3QXp3QWtCY0RvREdBc0lBOWdGc0JsQUorQ0dCM3daQlVBQXdBQjRLaWdBNndDb3JLRmdrOFBoTUg0WkI0QmJBK0RnRHNMQ2pDNXdtQ1NId29Dc0FzNE00Vnd6RjdpSEVJTXpzS0hNYzBlV0lUZDB2WXljazM2Wmg5R2U5WWcwU3pZQjBRQ2VRY29DRUhRQi9BR1lBQ0RBcFFScEMwVGhKT0VnQ3NnTGVCbU1BVmNCL2hrRDJER0hwWVdpNEhzRWFCZEFWUTRDTkFjd1pCS0N1T1lUQ2NYZ1ZZSFNKZ093Y0U0NHdzekIrUXVJWE93NktveHVwQi9HTVhLMy9RMThFc1dBZElBaDBBZU1BZWdCTkFqQitBT0dBTm9CeUFjd29CaktGaE9CVEFOTUU0Qm5sZ3lBdFFLd0dBaEY0dUQ3aEpCSGdXb1NzR1lJOEVhRXBndkY0ZUM1Z1poS0JtRXduWVFpMGhjeDduT2M2aDdkV1A0a3pJRWw5akowSGpNVE16QkxCbXFJNkdOV0I2QTV3MzhuTFdIaUVTdjZscHJVeUJIT2xWbW0wVWFTMGFhWTJESHZmREp0U2pIa3pOa3dCaVNIb0pKT0lVLzlUNlV5a3Y4RWMyamt0TC9QSll1R3prb3FmbzBFVlhnRlVJSUZJME1yQ2Z6MlJPUzNwdVdvdm1aTHN1ZmtZVnJTUlUrUkJtK2xHUnIxTzVIVkJBMVlXQWRKWStzY2dIcWlUWmUzb0h1WCtSKzhpK05HYU1JdkpkV3FteHNBWlFPY3RmZ0hKTi84YUVGRTF0MVdhbHZEenZ1U1JxdDhIUGhzNlNTcmNBclJBeEdla0xWK2VyUzg3TDZ4ak5vcEk2cE42MzhrbXphclJrWjc0czBEclVhSWNpc0c2ai9vMVZrbXZqY3hPKzltL2VCQXE2UmZWa0FDck5Id1Y0NGFoMGQxZlgwbGhBOW82dE9wR1lKRzNDVDBkRzVMRmp3SE1vNWVsQUtITm5xcmxaRFVmeVlpNXFYeG9mSkc2bjFhUDc2MVBvam14OENLQnFOTXJEd1RuZXUrVHlqU0hxTWErakRIWno1dnZvMTZLdk1UY0pZMTZLc1dKd09rRzhENjBtUUJIRHR3UnduRGJaY3NPUXlGcFlKQllvb1hoekNFVHVZV2x4bDJkY2VqWjBHcTFmbzNJcTk4V0FCQUFRQ0FkUUJHUllOa0FBRlFCMEFGaUFSQVdoRHkxQ2pRR2lCMGdRY0pKUVNVdDJjeDVRVGcrTUV6c3hWek01anJsdzhqOGRsQmhWZzA0N1M5R2Q1c0Q4QVNRQVJhbUpBV3dQZ0NiQUVGZ1I4QlNBWHdqOWpnd0JpQTZBSUZnT2dNeWppakdsR09ZRWdDR2lnRkVKNDdDam5NWTdNem1NYzdNYzkxcks5bzYrbTc2REs3YXQ4eWxTQXdXK0xBQWJBSmdBSWpBUWtHQW1DSFdBcFFDVWdRTUl4UnZkeGFCQmdBbkFFckFmNEtFcW83Nm5TV0ExQTlBdDhGZnlaWmcvekdGMlpscmQ0U1RoYjI5ci9UM09WclRNdm5kOHNWbFdXYUozM2FxMytxT0MwNGF5alh1ZTV1YldhN3VMc1d4N0o3cXpKMHNoN0daak03TmRwem5PL0RJQW1VQWYwOFdGUTNDdUJZQUdQQWZoWXNXYVdJZWNBNXdyQWppamU1dTdaSEJPQ1JBM0Fad3pFN0gwOWhRVGhJSEdNVllBVXlENDExSFJqVVRpV25Xczlhem9sZGZRWjdXdW9rcDM5V0EwUUNkQUJ2QVJERXhHQ2lBTXNBRTJBb3hZZVVsSTRnQlFoVEFPcUFmN21QbFZqTUJXQUhMQm5IR01jcTU3bU9jWmRabzlvVHBLbS9SV2g3SHN5eS9mMVdaMnJsNjFPMHZtTk1TLzd5TkpHcWRTbk9wZW1ZekhzekpWNzNLc3p0L3FmVDNaYjF6cG1YdDNFb0JQWUN0TmVlTFFBeXdETnlwTmFOeWdIRUFlSW5tbVhhWEFTQWhmSkV5NUZYUmgvUVhCSDc1cTRWR1gxYVFCUFFBeXJnVjNTd0FNb0FLMWlSMU56RkhBUkFBOERtTmt1djZjQklHZTVLb28wazlCOFNYcS9sbXhKaXZZR3lBVGtBT0VENkdLRUFVWUFVZ0FVSURZS3dWeVVDd0VRQ2RBT3NENFFkOHVYaVpaZ0tZQ1BBb2h6RG1xcGM1ekJ4aERuTVZkbVBadVB0cEhLYnZpWjcyTHpOUDMwNkc5OGR6MmFDOHVtWHUrOHRldkxSRzl4VXRzbG5RaHA4NW1rcG1kV1h1VktaMmRPblN2UTdNZTc1cS84ekxCMEFKZkFIL0ZSQVVJUUtJQnNnSmFBeWxCdnNJU2JwQUEwQ3NDa1pMWis2ODRNUVU0RzhENEdRdVpGS3VLQzRVRUxDekhzTE1jek9aaFNuazU2K3F0c2wyTzdLZnpFdVg1ODBacWFpclVBbEVISUtEVGM2YzJhbDdIT1p5T1hNYXh6T1loclBQa3ZOZ1FZQWwwQWlZQTJRREJMQVVDd0lXQURRQ09CZktsWmFzaEFSRUF5NEJqZ2FBZkdabGFtWW9CckNjQnY0RkZERERuaC9tT0x1enJhUEtKTm1GWmhmMU0wNm45ODFMMnZwN2xlckxkNTMwdFY4eldIV0RRcHpQODdVejV6NWM1a2FzdHJIdXkydktyMHVwN0haek03TGRwem1NYkpDQVNJQWVkcG9VUWhBRldBSUZBV2dCRUJLRk5lSmg4R0lEa0FnQTRBNUJRTFp6SE14TWhIQUxJVUFpaWpwWXh6bUtzTHVjWWRab2FlUFhvaWo5Y3dTUnVZaStCS0wzeVVyWlBiSmVpL2t6UkxSSlZnQzRnTHVBT2VBTVlWS2xnQmVnQnZRQnBnTjhWQnlwM0ZjQ2tBNXdWQVBCUE4zem5MNDRMUXJ1SEp6bFhaakdQZGZVYjUwbS92NUxOeTlkRVUyRGVBblpDQTh4VWtRaFJEY2hENEp5aW1VSUNFSElPbkM4V1p4aHppRVhPSVhPY1pkbloxanFYcVpnMGxxNXhxTmRMMCtiVEF5U2tvRFU4cWlONXFuelo3bXIxUGhXbno3ZXMzVGtZeTgxV2dnZmVqMXZwck5CV1JZcUF5bHJXMGJOSGx5dGI2YjB1MXU4Y2w3cnlQbWZQNzRXTUlJb2kzbW9xelpVSDA0NDNTdHVOMHpxNlRXclhZSzRLODc1S1pmekhhTVppNlJyRzZhNzRNUkF4cXcxQjdXa2IxbS9sZC92SG41Qml5OVBwM1YvSW1YdWJUNDNocEZQVmdqOWtjWmRrSUowN1JrYzZGVHFuRGJDL010M0x4Tm8vbDBpU0xmTVBpYkJ5Qk42S1R6YXlUNWY1T1MwcllZbUwwYjFvOGFoaEUza1lOalZxc0hRSGNhQ1lrMUNtbnRiTzdXdWx1VzJlcjVXK2JSUlFidXRWcGl1TVp1TW12U2xvMGtWV0x3ZGFhazA3b3FaTjhxTDFWdjlKaVY4WXN0TGpxcS9ELzMwQ3BvWXhjUk5Wa29WaXdTZ3Nod1Mrcy83enFlbE5ieE1PNWltMFhneXkvRWRMU1hXTWVJRVdhK1gxRXY0QjY2c0tBOWxHNExjYk9rK1o2VTZpN2k4YWhBWmFkSkNscXppNnhqN0E4UWNjZCthcjdDZ0V4TWJsU2xwSnBKNlZyK2hOa3lzdlJkMXB0Uk95V1BWODZOVC9FYUNUMnMyT3ExV0xEMFBNZ0llZXpUbHcrbTEzWmo2Y1lZNlZacTIvSUxtWjluUC8xZWJEaHhiaGFhUVlwSXJQR202TW8yWGxsd3VsVzV6SFBjQjJzdUdwR3prcW5ObUNUa25MKzZPV2pVUy83a3NFa1dDVkNaQ1JSTTQ4VWxGcEQveVoyaHVwYjJHUHBWbjIwMVlwUDBUVXpxZlQ1czNkYlkzMVdMVTFDeVVpSjFTY2sxRGZUMTV6SEdLZTVoaGhkbG14dXM0OHY5TkdldHQrRWQydDFQa2w5a0FKUlFoRGhFSW9YbGNzb0pWNVRxVC8xSktzTU0zYzl6TEJYR1RtdlljMVZhdEVYczV2V2xrK3VhMVdFNEhFUGg1OG9Db1NCeEt5N1VsdUhDdWd3dk9qT1k2d1BCcVE2ckhsdWt4VDR1c00xcTFQWFlKc0ZJRHlDQWFrY3dJelNxQjlaclpXV3plZ1pqaEFzekwxWkdkR2wwa3RhTGcwMmtYbXBUWUg4QlRRaE5vYUpnNEFld2JoTXAxNWJHbEZ3dW55MVZucVlWWXd5NjY2OUV3T2tzVHB1RGxGWU9meVB4WWxBZm9MNGR4cVBDZlRVSGVaVFFJQzJLVlU5L2wwNWpGWEVUSE11VWo0MVRrM3JNVHZvSS9mT0h0RVJtZmNpWlp3T1lMdkxZYUp1SVcxTTdyN0ZNVllmK1grYm5PZE5tdE9uTlJRai9UQmloaEY5YVdObW12a3pGcUM4UTRKZUVScm15YW9oWFZqTldOdWd2KzFXdHpNV3hISXBaZStoYlM4SzFtT0l1TVpzZHh1WHZDdldTMVlMSWVjL1R5cWRac2Y1UlNVTksxRjZueTJiT1R4OHZTb3Y3eDJTK3FiRVFVbG5nMWo0NDFKclpKc1FhdWEzZTBpbTRvMkhLSFhTcTVxdzhCMUdsOXhhVzV1K25JVWUvNmRLdmUzdll5MGtacjlRMmlTQkFxNFJlYks3Q2NIUTBRQWVTcWtIRCs3cFhQa2NYdVYwa1UyYkEwR3ByUitKZTFXZFMxV2lCRjZoMC93dnZpWk1WYkJYUnd5Y2djc3NQTU9uVEt5QXBwZEJGekhpelFKT1loV2ZWb3UxVStaZnlMdmkrVkthRldTbEM5TDBFcTB5dWkvMDNqejBTT2J4VnNWQjBia3NhQ1NySUJjSkRmQjhvSVV0TDZHcmNXbGNRUlN2T3ZTYm94dDBtK253Mnl3VFFXS0hVcFN3bFEzaGU4RGIxNldtSXptZGxqbzB1cWZTN3psSnJTZFhJMnZxdzNCMkU0alE2U2FuVHBqMTVKaVpaQXNoK3E2TjNPR0Ruc3ZMUW1kV1h1U2ZjWWU0UlVTUzBacitSd01ac2dBekJ4YlRrb3hDZHBkTFZwT0Ywb1ZwTVRVc2V4eEZGalI5UlQrdDBhakxoQWkwMUlSbXRMbVZKRXdZMVlaQVk5QzFSdExUVUhodWZxYXZuYUhNNWwyNnJyUWFQSkNtRitIT1EzZjkxWk0vY3pSbWJTeTVYMFRYeTB6TmpnT1lkVVZOWEkyc29ORTJ3MWRkMjdtckk1TU9mUmxsNlhjTkl5MTZWbWFwV0lFQ0xHZXM0L21wZlY3QnRCeEoxWFFhR3liRXFwOG5sRUtuNnVYaitURHJIam1ES2VpbE1zeFVNdEJFZUhWN3l2Tmt4L1lrU1FVRFRySmlJZVVIMnIvNVU5ZWxxMzBaWXJGMDBhUlMzeS8ybVBwdUR4Mkp4dWJNeVJWWUgwY2xneW1QalhGalZIUXRqaXJuT3pXbUltYzJyVzBhU3JtbTd2NzVyMmljbE9pdm9zUmhlczRiV2tQNHNQc2JHYWMxSlZ6R21WM3hUbHF0ZjFtS0wrNWxIdmcxWDJKbHJDNC9OV2s1ckhhWHlwWGNoTXpHak0wRjR6clNObzJNMWJXNktJK1N4WnIwWG5lRlpzVE42TFZ0RVVvTE9tZFBaTStWQ2hMMys1MDZKYXQ4NkZXeGFNZDlISkVjMkM0MnFwY0VDeit2OThxWmVqU1lsODIrSDFDa3psbVBvdWFlalBYL0htd1AwdEo0NExFNUVpZWJPU1cyVUZ3dm1XNWtXYWFsT25HdnEyODl1bU5CSEt0Q0RGamhVUlRLMUZFcEhrVm5LbktzWXd6NW01amQvVmFTeE4rTk1WS3E3QzhnSGs2MEFlV1NlYzEveGJ2UVpwSW5LMDRqWmNHOVdEb0E3L2RWT04xTitvekFIZEZnUzVDZ0MwYTJISnFLSktUb1VhMm56Um1OSmlMeHF6bGZxMVZmUjdkQmlaTHhZbUNnVTNQeXpaWHBoZWxLU3JtU1NzTHhmazR4eVNoQm16YVIxWkZHd2hBbk54Mld5TXhLYXAyVVdwbkVyS20vWFMrOHcvbVB1TVo5bW96S3ZWbWk4YUxKaFU2OUdTY3VseS8vVHBsclNMcXMwM1J2UmpRam92SlRwMFRMK1IxVmxnTTFqRzlaNlNtNXAwcXRYOHpTWmlyQnBxZDlNNmlLaTgzTTlGZWJxa2luVS9ra1dXQXowblJEQXNMYm93cTV5ajJyUWtpbmpCakxpcTlQT2ZWbXhLMzlwZWk4MkVVQVZvR3dFR0JlU0d3TUFVUTNCZklGdHptQzBGOHNXREloWTJDL1lRaWh3NFE1eGx6SFhMWU9lYnVyNzhwZXNsMWFzQXRvQStnQzVBQWVFSWpMQUFYZ0hUQUd1QUxVNEw4ekZNQ09BNmdJWUVvbXhySDlqeHdUZys0Y2RtR1hNczBlcjFwM2NTVFYwYlZTK3ROaWNBa2tBakpBTGd5RWdCcXdDRHdGdEFVMElvSVJlSEFZZ1h3RmFCVERnRVlCZkZCTmEyTXhRY0ZBSEVHUVB3NHdwbUZHTTBzWXg3R01NTVpacW5vM0R1bDlLek84cXpackdUMW95eGoxem1UcG1YeXN4TW1Ja3pGZ2tBQ2NBQ0xnQUlRWStDSFdBYjBBeG9DaUF1dExVUU9JUUljQW1BQVFRS1VId3M1eTJNOFNCckJUQXQ4Q2pIQ21ZeVhqZzRIN0J4anM0c3hqSE9jNTFGVWpVY2RVcTh5MFFhZk40YVhVdGZUWHRNOXhMTCs5Wkd2VFlCOGdFNmdFSEFNQXFnMEs0QmJBQWpRSDhQS056aUZRZ0FjNFZ3S3BydFZiOWhRVEFrQUlTRE9HUTRSamdvWXhoSXl4MGZnYXkxekpKLzZvWWQ5V3hpelYxTVp1bGI1VmQydm96Kzdja3FyQUxBQVVHQU95QVZrVkN2QWFZQVZnQm1nT0dITFpLREFNOEtvQzVnaVdEaitxMW1BYTRCelFhSFU1MEdIT0xNTXNaY0R5aUtrdHIxRXpGVG1QWm1mZlMvOTdNN05acGZPVzZWdmMzT2xyMlppUk9rUjlha2tCYUVKWTZhWm9ITXgzK1pwYy9sTVczWnA4THpITVk5enM1am5zekV3Q2l3T3dtdGF5b0FhNEFYQWJELzMzYVRBVklBZ2NvZytDS2dCMVhabDhWNDJvZzFlOW1uU1g5aFBBS05BT1FOQ01zb09BR2pBQytYMEVIczVVRGxBSUlMZFFzWVpNc0FYSXBQaStHMFNkL0M0RUdyR1Z5bDlNS3hZS2NBb2NBZUFCK0hDTU5nR2NBWjRCTVFFVW1UMjVRb0RPRDBBTzJGZGptMFlkZ0lPQXRJUDduc01zY3hXck9CSkpvcFowSitwYXVYc2V6TVlyMy9mTXp0Mjc2UG11OHZaT1hNdmRtNFJOUUxPYTBnTFZQeTVncFVGTXhtbmQ3bWFTa2x0VHQzL09jNlhzbk1sajNab1B3QlBvQkRBSlJxalFhQUM0QUJKQUlTNUJMTktDdVFFZEJSZ2JlWjU1ZmlVRlFCRFFyaGtMV2FDN0JhR1RtWG5KdG5tNllnaittMmlGRHpSM3puMFlXMXE2SlYxRmdLWUFUd0FlZ0NHZ0g2a0RNaUJ5Z0E5Z05ZSTRqRmF5RW1MUUFLUURQZ0JGZ1ZvVnlqbU1jeGt1QTJ3WVFISGdVaENVekhkNG1Gd1ZDRWNJWFpoQzVqaUZqSE1SRlNWR2ZwTXhwSktzNWg2emtGeG02VUREU3puY2o5ZDM3aU4xY3hTdFdINEJLZ0JIakR3L1BBcHdDR2dGd0F0d2lBOHN3NEg0b0FMMEJ1aGlBWHNVQlNISVdWbGhRWEJpQTRRWXdSZzRXWXhoQ1FzWmkyYzVqQ3ptRjNPczF5aXZWcmNpa0ZWTnRQWjk4a3hqNm5UOTJidmt4SmVpU0xBTjhBUU1BZDRBWmdzUWtBQXhvQTdnQzFBUkZRT205SWhXQ21BV0FDSkErRkhOZDkzUnhNUWcvWVRSbmY5VmhSakxhMXFzWm94NHdpem0xamRCb2dUWVVnRkFEc0I1aDA0SjRWUThGd2ZoT0ZZLzFGQW5CVUZ3c0IxRnJuY3U3bGc5Y1Fsc1dJM1drMkppYTVLMjR3Nk83NkxIZ054ekJEbUhpdURSdlEranMzTWtRWnRqZDBVcU4wYUpmekVSRnFUb05rMmkvdEVCUElOYktuRmlXTkdwYks0cXRUNWNYbVl1VHBYODNOVmplKzNOMFNSUmJRTmxZanBOUTROL0NUbHdrbktidEszc0wxcE0xY0lwSGY1Y3pPOFArZFF4bWJSZU80N2ZWdkJoZHJCVUloQi9QUFRPV2kxWHFMbkxudmhXYk9SbzJOSkwxem1XbFdSZWlyUkYvdllrQTRDSEltck5EZE5TWnAvWG1xOGtteGw4VVlxK2xGVG9MMWNnUWtXNnBhaTZJV3RMZlZUVmEwcXplbWpkWCtoNjd5V3F0QnRnVEFIQVc0UzBNS2duSjlCSmphNjFsWCtTSnNsNU1zdW15MUpXYWMrYjBWTXEvVFlMZ0VQS0F0TGx5WXQ2Y0RTQyt0dmM5VFNYZ3ZXbTZTaGFOVW5VeDVHRTNDT0hkTUh2KzR3OWhFQUdBeFFRcnhNSnNVS1U5UHFjM04wU1lxNWpqYzQyZS8zdktqMFVWWXNTQWNvYm5Hajhob0c1b2pFYmRLMjdsY29UVUp1TVZ1TUdYUDMvMEhhSTVKRXlZYStoakY1c1RwKzZza3ZNellBU1lCRWdBK0lBVkFEMEJ5QWU0Q1dnRGxnUlVBRDhNd3JNRW9ZZ0d1QUFVQkRnWndzQ2tBWEVGT0RBSncrRkFmc0NTQ29BY0lLTEIrQllBcFFsWVBneUZBdWNHWVZnWnhjSjNFSW5IQ0hNeFljWTVnV05ibzFRNTZ5S2RGcHd0S2ROSWFPUlVDcWl3RXVBS0pDbWlKUWlnVVFBL1lDWGdJSUFvUWNVSndyWVdBSEdBQ01CUk1BdWdnQW9nK2hWRDRjRnduQjhBM0FFaUEyeE9DbEF1Zy9CbUJGRG1GdzRLQVNBRHBFNER0RXd1SEN4UWN3ZmliRGhSMk9MVFN2QTc0dkhKWkg2UHFHTUFyZnZZQmtRQ05RQTJBQjd3N0JoQ1NBQzJBZUFBQ3dDaEEzUVVJVmNER0VrQnpnSFl3WWdCSEFSZHBNbUVyQitMUXFCVEZ3RVRDdUx3RW5LQ2lnOFlMZ2tobUtBWmdGcEIrQ3VGUVhsQk5od0dabUY0NFV3eVBMU1ZuMmovS283SXhvUWVTem9zRzRxQ2RCQkJJQkVBOEFQVUNaQ21EQ0NEQlNBd3JCUUFNNEtnZWlnWENjR01EV0JrY0xoY0tHQTlBMEIrUXNZRWdLNFNYQzhVQzhUc0Q4SlF0RjRaT0ZvWWk0Y1lRdWNPRm1NaEhVckZtODNxelkwQ2ZSOFJvVUpmZXE5Vm5oVTlhSHFFdFhxdlZhd1RTc1BUSmF2VmVxemdNT3FMdEphdlZkaklmYW4xbWt0WHF2VmF3Y3RSZHBMVjZyMVhRVVVlWFNKYXZWZXE1QnZSTUpFdFhxdlZZeUwrWWJkNnJQQnpIaHBIZGFsUVIxZXE5VjRIVmc5VVFQaUhUekNqSzA4a205VjVHNUNkalh4a2k5WGVxeHNFOExDWTJXQy90SmtJbUZoUndsRm9ZQzRTRkJjR0FzRXBaZVlXSENFY0lXT1lXS09ZOWptT2V4ekxOL210VVdjM25mZWF1UWNvV0I1RXdFdU9GQWlndWlnTVJJVEV3WWhIQmZERVRoSUNPR0ltSEdaZzRKaE9LQXhZT0NZVENZY1pNc0hCd2NZeGpHVG1NWmFQcEZXcjZYSFVkL2VCS21VcnZWZkNjK2xmZDZyUkNkVkYvZDZyTEE2Q01jWG1rQkNUS0xNY2ZjdGtrdnE3c0x3RUZBZ1lkZ004RTZBYmtDVkFRY0RYRm9DSGdpU280T0ErZ3FDZ0lvSHBvRmFDSUxDNXc0VUV6QWV3TnJDakFpZ1pIRUpZV2laZzVBZmgrSjg1eENPTVlxNWxtYXMxdzF4NXBPWE16bHl4em1aczUwc2RuU3h2WXI0bDFNZERPWGJtTzBxczlnSzRBUDhBRm1BRFNIYXhRQXN3QS9RQmxRTGdPUldDSWFENkpRaWxBSTBDSUFPR0ZWeThzaHc0RW9YQTBBR01IQU93SUFHWUZHTG5Eamh6QXpBL2d6QktGd1pFT0tZSHpCSllRampuS0QzV3ZOV3h6bGFmTE15ZXF6dWhVczVpcmRHWkQ2VmM2YzdMWm5PVzRlVFBQbHFBa0xGdFc3MXN6R05WWTUwcWtMaHhWM1hKU1RFdWN6T3pHWnptQUsrQVRlQWFNQnluaG1lQmFnVVlDNEFMaUJqbEZBcWxBZmdHRUJXQWpRR29BRE9DUWx4VE5LQktMQVZBRVlBNHcrQTR3cmhWRTR1M1dMZy9jSDREdUNVUWlmRGxCa0oyQzdDNWdmaWRKd2hXcitTMVl5c2RTTjFHaUJ4QW13QnB3RDFBRHhBUDBSaEZCaEFCM0FCc0FCeUFlQ0FINlFleE9nQ25DQUJFQlZBV3NDR2c5aWdLcTNEZ21jQ2lCakE2aGVId0NSamdmaEpFN25NQ1NMd0tnQzZCbUlSUVE5Z2ZaeENING5FNGZEZzhQU29lMUNNNnBiUG5kamV4WG1KY3lsdVpSaVhMK2F0WHpXOXBpS0hMYXhQT2lXejJmTWM1am51blErWEUreHpPK25yY3gwT1pUMnM4TmpmQURqZ0VRQUhrQUhyY0VoZ0VpQUhkQU9TQjFnZ2dRd1IxZ2d3WndHaUJwZ1FzS3lBRFhBWllNaFJ4Wnc0REtCVEFrUXpGb1pBamdad1pSTzRoSWNLQWtobUVvY0RJVDRzN0RnNHpPZGVUVHFLM3JTWmlMTm1UbFpYcEpaa2xtMEFCWW9DR0lhSGh0cEJqNTFONDJnN3JaMjh5eGoyT0luWG00Nzd4cTVIK0lFV2pQYkpkYzBYaDgyb0NvYVFUMGgyZzJFbGFkTXZXM1RKRkRybXFVUjNtWExJNVZnajkrYVFlYnV4b3hvam13bUFRUkllSHVjc05wL1FPeHpaUGJtK0lNdW1hdjhaT2YrcjRWOVEva2p0QWdSWnUvZXVGWkE3b3NhQlR1akw1cFZxelBRVWZCSDdtRnROajZDUHlDcGkwVWZOQ0JWbkFDNTRJS1p3MUpDb1BLYjVMSE1MUGlTSjNWWk4xUnMwK1gvM0pxUE53NzN5c0R1bXp3RkhJQldubHdHL2JDS3ZZVXFKWEc1aHpyM044NlV2dVptYnJWa1h6T2lUSGEraVdMY0FiSXNnczlRYkg2eW1yU2c2SDhpY1JUQmh6blhYSGNidWFSeGZTcnZuMCtMY0FicE5CbUdpQU9sbG5IVHZwSEdrc2lDNi9CMVM5czdrVEJCaTVwTGQ1N2RKRTJ4a0FXOVJTYTVwQ29nZG9mOFFQVW5TU09zNUdQTHppVnozV09vNDc3anBlakRIelpNQVd6ajV6MWh4MG9MOUFiTExtUEJqbUhYUDZWUE5YcUltT2tRWTkxVVRUL3lSekxDQ0NtYmdWODFBdEIwZDg3b2ZPYnlYM0p1aC9HWHlTKzhpWGlyQzRBV0J4NyttSEtqNG5WVmRSV0lzWlh6YTN6YlJTMVJvMDNnTjAwWEQ4dVJEaHB3aVpQbGk4NS9kekR1Wmk4bGtVZTB2S3E0RUNyT21LelR0TDJ2Z2lnaWk2Q0FGUlUyVHVRZFpQNldwUCtXdkxndXd3NzJidjQwUXJObytaUi9yNnZZbEFmN1Nya2dXY0cwc08zVzFYdm5zTWVOQXhxLytqNlFOZklnVGM2VFpXMVgyZ0EvempWbFZsQ3FSeUNEVnZoZWhiZVljMGltMnQwR3R3aFZpYk9PMzZ6ZVhiWUVzQm9FeHlUa1VGTks4dktTZlBlMmVYclZaNTBuWmVsOFRvMzBXa2xrVVd6WlFDQUtLSXRrZExKeXRPdDN0NzVJNWx6NHVjMFUvL3F6dVg3NEVHTHBHVGhCbXpRQlZ1azA3b2tHbnk5ZW1FRjlScG52Z3ZGek1vbDUwNlRNM204eDk3UUJScUpJNkVoOXpmcDB4WGxsTElxTU91alR0OVNNa3JKdVBWU0lQOXlCbFBYaDA1TEdwYW54bmZRdTBWcmlacklhcU05V0xuditqTjB3WmdZemFZR2NXbEZhSndyZXVWL2Y3Nlp6U1QzVW8xNTVzNkowR1ltTE5SbURmQmVpV3JDQ0FuSXFPVGthU0lUWFNpdW05L25TUlJlUk95VXp5L0lwdU44YlNOckFmUlZzeko4clo1VlcvdzJGa1VXYk1QalN2UmREcUpqNnJPQlFsUXNCTEhVaTZNY0sydlNYS1pkcGh0anRZNXRUMVlxenNha2MyUy9XeDhpQkZqZ0FwZnhWcWtLSlBhdklIZi9kbTdCZ3kwUjJEVy83Nlh3clJlYk5PUm9aMEsrakVLeFk4RDNoRVZXUVNuenprL2x1T2EvNkpNT3RORkVRK0JTWFdYb3pCbHBGRmpXTmRxR3AwWnVqVXN6ek1rWHNPd2U4bFJPUkNwTW0xTHRLZTcyUGFyT2l3MExvYUZZTVVYbTBOVCtabFgyb0Q0Nm9KalN3MDg5aXFrMDJvYkQxbDVvdTVtZFo5YjFKeXMwdFhpREJqeGJZMDc5V3A2c2lEVmo0R0tQUEhoQ2tHekR1azNSVzdscnJTWWd3NjBjMk0ySHpOUVpjSUZLeFp1bXRPcXlvVmxuYytSMGh4dTlZNWt5dnRhbzB2NTM3NG0ranp0T2o1WkZNNm0wUjBYaTVHWWJIZXZOMEdmV2l4NEhvNFFqZTdOOXg1ODVqbTVjdzFaZGJqRTN1dVoxVENyVEhvdlJtcnh2TG9sNE1UWXZCT0Q1WTlPVUI3cjMxYnM3MXFMSW9hWG9qZGRaT2hsNTc1TXlYODNGSHkyc20vNmk5Q0ROaDBFOWJUVWpjMkNaVWVlZTN5K0Y4eE9vdXpjeTYwb25xdytmUUhiNzFhUmw1djNYSkpVV0d3T0J4MHZUK1Q3SXB1a3U2Wk1OWkZySFppWnlVNzBzRlZWK2Zra2taK21QWXNCd1grYUd2eHprSk8zcmN2TXEvZWJTblEzSjZ0MENLRlprek55alZUbGwvWU5ZRjZ3ODhmVUZSQWdnc2YwTkpxS2VYelJlY3N6Ri9wVENucHJIdFZaOVNzVVhqVmFxTVRPbnZsV29zSFFPRG05QW94UkJtNjhsVFZxU28xcEhMbFhNTDFkU2RNbkxudjVqbWVSVFp0SlY4a2l2Y3pMK3JCRjdVR1EwNmp4K1dkRWlsalNqaThUNUx1WnpMS3VFbTd4dlQrU3o3NTB4THpwZkl3Z1FQWXJQRVVyVDByY0MyV2xxc0NUNldOTXR6RldlOGpFUlg2NlkweXhXS3VpOFkxdWJCTFZrSWs2YmtqUVdBM1F6UHZMZWhtSU56ak5NN013WU1zMlpSKzU2azZlUlJOYjJpYTFielduVU1QWU9BalNaems0UmlVbTZjMHFKR005VDVndVdsblZtMHE1MVJScXRVWGF1Qmg3blIzMGpMNE1NNWVpT3JCdFVSbFpBcGtDYTIveXVYU3ZMZHlKczM2U3kyOTh2OXZuYzZTOVNyVmhNRVRVSElOeDV4ckJXcTFYMDFqakZhR1BuVGN4Qi95ZWw4T0pZOS9JcFBreE5nM2dnUkdLMmpSQVdXeFJTSHJVMDdyWjJYRWRKSmFpdGVZZnk4VG91dnBscXk4OGtyVmZETUVFZEk5d3RBOGs2VVczcE5icGN2UVo1anF3WGNxeTVVZlBSbTBWeXFib3NUSUJtTnlOTTNKcE42NXlIY1QxYUNLZFRIemMwdlRKcmRISTV2Zno2eDM4d1JlMkJ5MEl2RG5rQWRzOHBOK0tTeGMvU1RMejZ6SnpyODFKN3BVK25OVm5TWWdqaXpkMG1uSXp2OU1LeXJWckQxRTRaaEVvSFpONVZMS1NWL3J0bmRYNkYwWWRZeWZNeFBXNTdUSGZISll2L3hHR1VwMFNSK0xUQ2tWWlVEdEN3OGZYNVYrY01HZlM5bG5EU1J5VUpwdXp0S3JCQnEwazU1dW1aeXpGRVVXb0R1N3RQS250emxGb1FobEphdlUxaEc3akJsaXBmVG1XalVMenBvazVtYkdoM1NqVXBmVXNZUlpBRG9va1RkTUJzTk03bjE4UHF4SmlueXF5clJPVE5RK1JUWlBhUlZwczN5aTE5TDlRc3hOa0lHRWsxQWFIRGx1Y2JtUzhnSjltWkppQzdyUFFPTlBrYXFTTnJIemZCSkpTM3FTU3R0b3ZCSm5DSXFPcklBNUMvSDlWQnhWblc0eDJyS3ZkYUtDUjUvKzZzR0hDQlZ5N0pWalpRWnF2aE9KdVpJOFdEWU9CVWxSejRyRURtdDBrVXNzWkdWNk44bDZJL2JXby92cVdFazNoOFNCTEdZcE1oRGxES1UzTW5rTGRYa2toOGtVV2NjSVV2cCthL3F5LzNTYVJwcXNUWWJvQkRXc3FtTk5GZ3NTSEc3ajVQQzF5L0t5S0hzSXF2NllsdGFtL0w3L09xNFVVclRPcVlJNXNmQ01HQXJEWDRtSlVaS3RKc2JQTGZ1WTNjdk9yOXovY25uOUg0OWIyNlM3bFp0Sk1VMTU3VzFwc053UXdsRmFiQmNRY1ZwOGJhdVVCTVRwcFVjT2N3aVl6T3V0S2gySGtWZWcrTXlWWjNnaWwvdVZ2VHlCdnk1NzYzZk1ERHZpd2h0d2lUT0d0MHlpelpYcDV4TjJsUXpQa2hZU3V6ck9Ia3FlZG8wREdpUno2dm56a2EwY0NTTXNhR3liazFxU3dOeW5kcTNjVEZqbFlMczNYM3MrcTBUc094MFltbGticmVhZEVSSFkwalkrckRBU0hLRmNhc293Z1NWbHJwUWNPT2ZKa3FxeXJ4czlXVjc4a2dscTBUZm8xZjZiRTRRMW9ES3hDdUJFSXQ2ZldTYXplaUtJS01mL2ZSMHZuK1ZrZmZSSk0zTC9HcVlwb0syckV5WVhNZU1yV0szSkhhSVM1ekswNXBHN012aHFoS3M1M0k1RUNyR1JwVEcxa3N0ZFNaNGdScXNaRy9SeVBUeUh6Zlc2Q2lyWk10aXN4V29zZHFXak5acXM5OFBwWGtYTXpjNmxZTlY0SGJGaVk0c2RJcDYyckxMNmNaRGVYenlQc3RlVVBOZkxaYVJ3TWZOb29uTitqb2RZS3lQWWxsaTZTM1g4MXVuTllYblFSVVlxMVJtdlV3LzlXbDNEMFRjYjFZZ3ZWZ3VHeXMvektYNXgzM2c5UnI1bUxPbDUyaFpKTGI5UFJmeVdMQ0tIUytJYVA3SzUxSzllZHZFa1MzL2RseU81R0tYejFlWm9GVkYxRkcxa3BTc1RCMkZ3WDlhUWRaTnFIYk1sR3RYbEJLU1N6dmdqZGZvWm10U25mTkt5WVpjZjByTDRHSHNSQTZpUVZEUjZVaXBqVUV2bHkwbjI2Q0tWWWV5K2xPbUVXMUdtaS9telo1ZWJHaGNQZFJ5MEIvSkhQbUhxTm5Mb2psN3JxSzhmTGJ1UmRXU1NiaEUyRlVwcUNLYkVwQXBHVytWNWVuVHFZMWFzR1lYZEt6b1JYSkhOeG9wV0cxYXdvNGJHWG1uTG5kOWZWdXRyV2tWTXRLbHpXUjg2TlJtUFBKS201dzdTb3phd1Q3a0VhbmszUWRqdnBiK3Rza2N2ck9xNHlVU3FoeVNvOTVHZjFXd01Jc1ZnWXFhNDYzbFJyeHBpV3JWWEVqQ0wxUHJHb3JkTlc4MS84ZGRXSElKaUhRMGVuT2NwQ1V6dkVObmtyTFNIV216dWRPY1JWWnkxMGxqdnBXUlJiUWN3bWpWWnBNTmlFNlVmcTdDcjNTU3VyVk0yaTFLSmp6dUFleWJtWjMwYXJXSDRiRFdOb2YvVTBQYkp4NjFyV2tZajV4ZG1pMGErOHhTOVJGRURINnJuVEJxU05OQTc0c3NBOTh5RklhcEtQcWM1Zm4wLzh2VTdqR0w4VEt2ZityN2pJbzZjYXJGbFFlTVBUMnVkVysrK25mTDhpREZ5cXZEdlcraThXa3Fsamp1K0xCTUFtVXNueDZGSW1wbXBYOHBMV3pMVmZUMnF6ZEFyMVNXUzYzOHZEMnZxOGkrY2REWHlyVlBpd1NnSjVxSlpGU1hGZmxyeTh1bXl0Y0dYTk1PZGVpalVzbGx0NUpPV1NWZVIxVHAxU1MvZXg4REhUUlF4eDVaUTdSQ3YwNTBia3JOVm82a1RaMGFoaFFnUll6UnNiMTRzT1FCVFJZYWVoTEd6K1Q2alZPVlcxbTdlWWpUblhFMXBYb2hXQ09MeVp1N2RSTEZyQXloNFJGT2hpekRYZDNjbktrYWwxUExydVVUWkdmQnRUdjdhbGtrdDlGV0UwRTVJYkpqcTJGcHJwTTNiUDNwQkFRUGN6TGZXUCs1aWpFakNMNk9tTkhWcXlFQjZvQmFzZTM1cVdYdk5UcXkxNmk4N3lyN1NlY3ZuSlVTeGN4dWpMWnNLQWZyRUk0MVJKR1lhWFd1ZDlCbi92OXRrWmhEY2R6aUtOVXlSMWM4ZHB1bWJLaFFsVDR0SkJNalNTcTFyVlhReGRad2hQMFMyVlkwR08yeDFMNUhTaXJXOWgwRlhpU2x1Smo3WkVpUkIyS0xUVHJlVEVFYzNLVWpLSnc2ZE15aFRkS3NDQlZvbjF6bERrZFdjcjVNUlljQVppU2ZVUVBUNU54NTNVVEo1dWJsSUx5MlhjdXk4M3BJK2RXbXBMck1jejlWMU1tenZEL1BMOFFac053TWtmWFVlRk1rM1J1bERVOTRZUkwzdVlOTG1uWnZNMFhraWpWYUtMNGZTV21iRGtEUkRZMURVVkZTUjNPbmVKUVN6dEVncldYMXIwYW5LK1ZaWkwzRXMyYW4xWlBWZ3hTc2t0V2FBblpBRm04ckhrbXBhWC91Y3JFRjVJL2Vha2lxY3NqcHZCVXplaVlmVmNra0ZWVmpRQXJMWUdmNklVK3VYcmxlVGV6Y3hNTFZtMGV1WnlTclRNYnZtM3BkODZNdTBBTmdlVTh4aFdzMkpoVmVVZks3eHFYcFdvMUdKTVJjSlRZWGdKK1dXdHJDWldaWHFlbFU3cldab2k5d000MWVQT2pTdTZTM0hjbDYxZXlnQ2ZsaDBMV3RHaFhoN0g1YlQ5T2h1YTJDNjN6NytOeHpXbnptNk5ITHdYaXpVY2lqSjMrblZZUXdFK2FLM21ySUo3dFV0Z2JVZDF0amN1dVgwckN0UFk5bHdtZDkxSithMHd3aW94S3MzMXBUb1dsR2xaajJCOUExY2lGaDdDRE5KbkwxY20xQXE2WmJQTHpwTHhhU010Uk9sT2FXWW56UXhtenVpdVB3czhjeDU5aGdBSzJEY0pCL0U4V2dzTjd2V2NvUDZYU3N6TGk3ck5hb3h1UDcyckphSkt2eWM0N0tETDF0TDlXdE5pY0ZMTFZEK1Bpd3NKRWtOM3lwTFZyZTR5NWlzMFJPdnBMSFU0Yi9vMG1PckwrWWp5cXYyTXluSjJYcFY1ZXR3VlRac0JnZ2FKNGNnc3JXa1FyY1RrckRscmJsdW5jdk5mVU1LczJNak5VYjN6cXRIVWJXbjJBRVVBUStBUUlBRk1WQnhLQUJBZ0xzQXN3QUpBU2dlZ2tOQkJnYUFEVUFxUUZMQjhJUUxJRFdCa0xFSTRRa0lJY0ZJQVdrS3d1RDhDc0JSQXlpNHNKeE00WEJKRDhKUkNHUkRod3BpRWNkbU1zWlRUcjZKTHdTVFlhQVNqRTF3YzViRkpqcmJHYk83M01iTG1kOUYreDB5NWZMeTJZOEt4WUJod0NnZ0I2Z0tzSWhBREdCSUFBYndBZEFCdmlndkVnTTRSMGdJS0NOQkRoV0FNV0JFZ1E0b0JsSmpnbkxGZ1p3eUF1UTlGQUFKb3VEOEt3b0hHRkFyQitFQUJkQlhGNGZDMkN3ZjRoS0JXRjR2RDhob3RseXJOckcxWm1XdmpTUmNrOU9meVdyQUJLQUp6QURmQWl4b083QUlvRE9BT21BWklId1ZwQkpZQXpBUkFLWUJxZ1ZZRWZCSU5hV3pHQTlsZ05ZQ01nVzRmQVd3Vnd6RTRvME9Ed01uQm1BN3dyRUl1WVd3WkM0Y0UrRTdnL0YySHhEa1pucTlwZUxoYmEzUk4wNlpMMHJJZ2NZVllCZmdDQ2dBdVFGc0R4d1lnR0lBSURBQ1pBVlFXRGdJbFlQb3NEQXFCR3daZ0VnQ3FndVdEbkZvU2d4QkdBU0VUZ0pLQ2xCOEIvRTdpRmdtd013SXNHY0t3dkQ4aFlRNEdmQldZT0ZpRmcyVmdmUXltUWN5RExjeWk3Si9WWTV5ckc3czVselBtWnpNeHptT1VGSzZhNGNMRG5qTGV4MktPYy9sR082b21MRU12WjI4cDM5L2N4MlpuTXBqbkJMQVpvQ2hpY0JwQVR3RUtDYUJWZ0o2RUlBdEFWeXdzSEFLSUFXMHNDTEI2a0JyQStrQW5jV0tDNG9ETUNsd293SXNLemhNV0hDRmhEQVpoK0xzVWNPRm1PVlk2Nm53YnZVdmkwU3BPWExLZHpNV2F0emxrODZjN3NabVE1c3NWZHBaUllwbmZROW1jemRWMDJPQW1RV0NCY0pDTWhKaXRkRjJreDlqcEpXWGRvQTN2blFpa3FiZDJzS0VWVDRTZkYzcXRZZUdVcnV6UThmU3FWM2NoMlpTdTdOQ2IraStPclYzcXNWZ0VtQUIxQ1JlYmdCNVF4SUlMeklZQUY1QWpwQTNrY2NDMVpmVVhMNC9zMWFTS3NXSFlCS29BZGdNUXJZaURlQXRvQXU0ZmhFV291aGFWQWFnQU53SElDaER4aFRkN25EZ25CUlVCV2lZaExaajNNWTRQaE94eGdoWmFUbHJuZnF6RnVHUzBJTndqUVk0cnBleGppelNqTzB2TU5jc29XN0pNVjRZN1NZWjdBZklCTUlBZW9FNkNBQktsUVFnRVpBSDVBMUFVREF3TE9DUUMrREVBWjBFZ0tBWXdvQjB4bnc0T0MwSHdLb0E4NG9JUWtDWnp0TEhDN0F6Qzl6R2ZPd29kbVlwa1FIaWZwMVRULzFaTVFTY1FZdWhDcGwxVVN2S0dKem56cUltNWd4WllHSUFUNEFHSUNKQnlQVUJqQUJyQUhtQWlnTUJScFdTd1lpVUtZQ1BBSStIWWR6bWZGTU9CVkNvTHdPcUJSOFd6SE96Z1JZdmV5T3d1N09aeXE0MGFQYUtDZGFJbnpKSE80eDY3QU9BQVVNQVhOb0pxUmFBQ3NBR01CQkFpZ2doeGc1a0FrQUxLQXVJTVlHM2hjTG1PN1NGb3ZjQTVnRWxBY1l1d1pDMW1ZekNnVUM4VUM4bzkyWUZiT2N4ekV4NUZNOTBuOXlCZUliTXpuTU0rYzZYTXFvVjg3c3Baano3YUluTmtzZWlRWm1jK0NqaWkyWnhTTXlaTGxzUXNjNlhaemwvbEpacHpHT0tPek81d0F5WUJRSUIzd05rSE1VQjhBQ0tBRUlBRk9BWWJDZ2JISkVqQXlCRWdMQUFjWmdiaTBURUxpR1ErQjFETUNPZ1JnRGdCbkQwV2x0MkRndUZCQ0Vwd001Q09EakdZSlQzRUxpeWJ2cDNuVG9JcTBqQ0x4NTNSOC9PSTVFR2RQc0EzNEJMZ0JHNENsQlhEa0ExNEZHQXU0S0VCM0FudzdLU0pzS3dFdUFMaUE1UUVzd1F4TGh3bUoyaVlVRUlEcUJIZ2pSZUtHRUpRb3pDN0NZWE13dkljNFhpL0VJdkxPSVhLSlllT1Fjdnp1djV5OXk4ZlRUSHlZWldZM3krQzgvbVBjTUo5eUhLbEdPelBuTS9uZHhSMlkxbWNUMzFaZnpIT1k5ZWg3SE9rdTMyQU11QWR3Q1FnTE9GVU9nZUFGaEFHM0FPT0JHQWR3b3VjV0RzWEFROENLZ3FBVW1GclN6YzEyY1VEOEhzaEZIZTc5N01KbU1mU3JMYkNUY3M2dU1aSkowV0lmQjg2WlZrdXU1QXgxb241UkE3SUZlcWsxQ1pRN2VZcHpwNzNVUk90WTd1ZEswOTN5clBMeVJRNTlXaktNcFpzMUJtb0VDYkZZVkZFa1VPaktHVDBhRzlxa3JoQXhHWHk5V2l2akpzeGx6dU1JdUVvUy8zYjlOajRKNGVUUVNDeVhEUjBkOHBxVTE3ZVJRNjRXbjRMem9JNjFXaTFjdmc3TjFFc1dLd2ZBc0REZVdodmpqaTh5eGN0VXR2UVE2em11eTgweXpjbDlqTmRJMytGNXVXWmJZdEJTSERZMjNsQjVKcUxYeE9hcE82ZkdNM2g2R1ZVeXR6Wk1PZkQzR2ZONmM2TjN6UHNPZ05WcWErb2VRRlo2L2xqNTNuNmlPcmsxcHFXYkR1M05NVVhtK09tMGRVNWVqTHNPUXI4ME5NR3lDZUdpczFxT2N1c3R2a3d0cGgxejA1OU5ldHRHSzA1bm9rbThiS1U0M2ZySlhXRTBCT1NFVk4wMFFCdkI3NG5zSnpwWCtST3pycW9VK1JXK2pMTDNOUFZhdU5SajJhQnFzSEVNZ3NOV2o3ZSthakhkY3lZcDdtTXR1T1Btb1Zid1ZrM204VXBTanFWaXhJQnREWTJNNUlVaDBzU0xXdmZlSjBySk81VjF5bmhtSC81Y2tVMk9ycEt0VVRtdHR3S2R6bE9PaGNHNWFTZWwvNjgzT0xFZnBWakxqOXRmenZsa3ZjSUUzNGxjVGtsZU1KdUFOMThUaDRzd2J4cXNvUjg1Mmt4M3dYZGU4VEppWkFrdnVuMVZHeS8yd0ZKSWNDbmpKeENQSlRwMytxZmx6QmVYOHg3UXFWUHByVVNRK2JUTjZCOEpVcnlLbjBSZkx0QURVY0loMkdCZTNSOUc2aW5sWHlabDEvNWFXWXhCL01OdVBTYzVOcW1xQVZjbDR1QUU2S2hvbWdhV0dTQlExODZVa0U4dHJERlZMV2RXTDZYTlZIam5ya3pMNkpZdVRTOEhkL3RnR2FQcFFveUJhRzZSN1owMWxDelc2Wk1SRzZ2c2R6ZEdpSitYelBjUzArYlBiTWp0VkNVNXNGNUdQc01RSDNrSHlnNVJmWG9RemZFL1FTME1IWEtoMGw0Y1JkOHVKSk1SZmhMejQ2dEVWV3NCOXRudFNTRmptc3kxV0hLYUd0ZHVYN3I4TC84WjI1bWMzVHlQM0k3ellpc3Q5RVUySWdOQXNpUUxLd1dRMWRhMkxXZTU2Q0JFMXF0Tjk4NFV3MlVqTTZETWtkVmNwTDUyT29qcXJDNERRSDVGT0dUaDc0MDU4bFhLVjNxY3hNc0wxVitxT2JqWmg4Nkh1YVk5R0lpTE5qSkNGOUt0M2V0aGlZTWV4S0Q2b1RHNnhVV3JTSHgvVDJyVDhyeTFtSld2ZTVScFp6VXYzdDlpbXNsMXlkRDVXUzFjQUpzZW52cGFtbnFWbm9PWjl6TTZYdXVabW9ySElPSlY1bkphdEd1ajMvc0dQc0x3RTFMWWVuQ0U5YUdsZlZhN1ZNa2szRTgxV1dBU1NMcnpWUDdlU1JZTFFLRWUwbkNua0VucHpPbExySDU3NklwcStrUFkzMHJGQXJmVnlhZnVZOWt3VUxtUXY4T1hKWlNIek5acW5mQkZQdWp1K05SWHZvRlpWdzAwd3ladEFIckJxbEM4bHVia0tiK205ZWd6WDFQNUt5K2NkNmlERUdPSU5hcmhMeEhxQy9zbUNiRlFxK1hJcWthWEo3L0pNdXZrVHJPYmxFdkoxUG5TWFpwclRSRjc0ekI4enZEK1pjWHF5Z1BHTjBZczU4Uy85UlFxWG1TL2ZObkhOTHQ3NUluUU1aaTBSMmFWbFdpS2JIQU1nSWcrZEt5WVRFT25TcUNjNXJZM21DOC9UbVd0cDJyb3IrOWp5ODFkSE5zVEE5RHlBaWthU1RwS1dxZWx6cWYzcnA5YVRIZ3l5NU5ienZVNmVSK1NXTjdhUEhtd2ZoVHZtNllmNUdMZEw2MVRaQUZaalpQNXprdHpaMCtFR2R2SWw2YmV2ak13ckRaTHpONnZQK2xXVEhzSUlQQWpLbTlhMUN1bkpTM0w3NWxEbVpNU1NPdmRjZklJUzFyNkx5cXhaSHpITXhkWnZYS2FlbFdWZVgvSTR1Z2RVRFVOMVI3VG9tRmUzVmUvbmVrVnZtVllWYjdoL2pSdXI3VERoQVpiaTJXaFJWcGQwTFhISS83eHFVUFM2cmVSVGU4cW1tcXhhWVRWdGlUdzFUN2ptL0plWWw4MElFWHBndTM3M3VZTmZGZzFoUEh5aUxsanllVEVhTDJzZDN0bVdtSmR6RlhvZzZxbjk2eThGNnY5SnNaSTA3ZWlTZlpBRGMzZ2twVVBkOTVPZWM5dmF6eVgrOXc5YmQ5eGp5VDJPb20wdnpKTFQ0OEVmVm14YUhmUktpa0xXcFNlaGtNUHlZWTdlaThtSjBXaWJxUzYrK1pWNW1QZXA4NUkxL3NQQTlvUlN2cUhtdGFsM2xGR05WOFcxTExtZDVJbCs1bmVxdFFPWmx5ZWxxMXovMnRpVzZNZzNxMUhaN0E4UGx0YWxWcThpbm1JMDIzUmp0eTdSaFUyUUVBajFMUXBDRkVvK1VYdi9DNU0rWVZZUnhhT08zT1hNN2wrWm1MZitia3FMellVQW9EZVBHaGtnWWM1cWo1V3ZMZnpQMG1KdHJUcFd2SlR2WEJWVmE0L1NxSlMwakNMQnR5ZU9UUUVaWTE0OUw0S0Zmdm9rekxsWFcxYUpyenQ5eks2dGFaMFAvZ2o4Mktnb0VCUG5TUUlKTnlENXBwNjg1bFBoWHkySHVZNngxSWVPUmY5M3dDcXJWQmYyYWNOTlZscTl5U1BZYkFseHdXcmRqY2ZsRGw2dEhPWlF3cFhrckhYSXBQZEgxSzhpaWJwYldhS05Wa3pHOWh3bVc2SFNFVGE3ZTlQTVVwZXFWMk1ucHcrajJrYys0YWY2ZW5MNE14WWRqeVpBb05Cb2JCc0huenF4Mm52Nm1yUVhrd3kwa1IxVHovTDVXWGt5NGptNXFUb3FaTDBYcXdibEdoWlZjNWRHd2VyMUdTMkcxSmVyODZheHhzUGlYMVZSWnFNSlBTTVZZZUJRS3BrMGg3cDFMenV1SmErSWMrbndyM3V0QkxVenRTTTByUmRwbjJLUm5HcVJNV1FGaUFXRFJOc3R6UnJOVnBrWmNibUo3L25QWVpaY20wR2s2Z0QyMWYwcjc0c09nNlRhYXhmVVR4Nlh4VFJQNjZXNlRGZFgzbTVIcmxJaVdSdHVKcXQvSmVIMVl0Q2JHSHNnRXVTQTNIclZVS1BieVNSQVpib24xQjN6WHhDdFRhRkpUUCs4Nk9YbTBnbkRNYVNzaldJZWMvNXM2dTVoRjg3TUdETE9PTzcrWDVpdFB0RUdxcGpIZnZrRlpGcGduR0RVSnNVUElScGpWTTFxemh5WTM1aW5zR0RtWEF5ak9vdk1rVVdqVWpyL216dVJleEdGTUlJcTM0MFZEWktVSnJReElzeFJmSXF4Qzl6Q0tMdzdCZVc4a2JJeGJlT2cxOGRiT1NOR01XY0hETnpoNml3NFRsWHJscFJ4TnB4bUc5bFpqcnJ6RDY5TUpKYU1aclRjUWtPeG9uT2lDS29HUGpWYVkrSWgwMVREUlhsVThQNXFSNnlIRkdVUlRuREZtWmRHbm96V1g5WDNWbk96SkphczFKTTd2U2g4a1RNMzJzVkN0UW80YkZVeWg1cGVKNlR0SytaV3E1MmRhY3A0YlNsdWw5S3hGeDE1S2VkblBreDdhSE9QeVpxSlpwNjYrbkUwdmw2V3lYWXpkN3ZOeWtpTXhNNXVYcUx5SUVYemQ0MzBibWFzWEM0VmpZYWNOaWlpNVFTeTFITWF2ejVxVExyU09TT1V5aDJqTEw5WmYyYjU1MlhVdmFZNWVMRVl0YVBxSUN4QVo1V1NyMXR6SjBUL3k4dU1PaXgzRy80VW5Sdm1tSnNGZFUxL3BXTEpoWjViSmFGR3Bub0xsZlcyVldFck02MFRlZWxMZDNydXRMVHFPTCswRmsxRVI4UkxsUW1vNDdPemx5OWVva3F6a3prVkZENVhsOXIvdStMU1ArV3RQNk9aaXpoRW9nS1pOYUhKYU5IeHowSktOcXZvVmxiSEt5Uk91cHkwZEhjNGxaZEpZVXZvMWpKTXcvdml3V0FXbG8xbThiU1VTMUs4cTNFTG8rNnYwc3ptU1JNczJEZDN4T29pNy94QW04akdOMFVJRVdFSlk4aTZXMDF0TG5TOVRvVk5FVVppck5GMUxVWHgyNmlXTG1WNmFTU1hZWHRFVXBkUkxucUtUeS9iby9JbVFYaThhZXRGV3BrWWUwVXRFdm1kRmlOcFpxSnhWQkJnak5Wak5MWjNhU01FQ3JyMFhsOG1lNnpUWDA5cmZ6TEdLeUlOVzBRaHhKd3lvZ1BIa0RwVjh0aklTUnMwUG5VUk91a0VrWjMxWjE4VWw1VzlndzloaTV3K05KalFOWWlLbjVCdWFjb292VGNuZHd6emtweTdqUkxZaUszM3NSaE1XY0RUamtFRXZWTngyYnFkTDRHRExRNkVxcm52NW44SUdMYlAxYWs2MGFDS0xDQzVUYzdPUld2ZVh3b2dtOXl6RVBuT3Y1dVIwZlQ1TXhUM1dibDFPODZpT2xac0lhaDNuajB0U2o5WHFkY3IzdUQyMDE4cFZNN3ZycXplNTJXL3hHNUpWckJ4QThvQ0hDUnJUMFRVbncxQlovYytTS1p0cVNBekhQalJCbVplMjFvS2VKU3FDT3U5Z3c5aEVDZ2NUVlptc0V5NUx0UWxETjlHSllYb2pkWjlhWDFNNldHZUlFMmtib2ViWG5OM0xyZlJMN0VZT0kyaWxtbmpTbU9oN2Y2ck43bW1XTTBpQXl6UjFCRnVxVjVlNUh5VmwwTXBRdW9ydnFTT1NXckVZT3pUU2NxQnI5TGYzcmx2VytaSXBjcXkwVnVsNlhmeVB2b2tZMjgxRDZZMEVzaUJGalFKcFJSSTRkbEdIeFc1eTBwWnVSZUg5V0x3cDVxSmlUTU9aRjQxWTdNYWlWanF0UUc4L09sMmJKKzhlT3ZyOFpwSlRyTngyUzFTK2R6TVBrWWUvWHh1cnY4UVNjWVJZYWk4N0piNHFnaDk5R25OVmFZbThqTUpLdFpQdC8wcXI5V0dnT1NoeVVabytGeVBsOVFsbEhQZ2prdjdrVXRSZWJUV1VSME1ZdEtUOGpxbVhhQVZkV0dnT0tUVXFwSnFIbG56WHp1K1dqSDJkS1hTZzVMTXBjUHI2TnhqVnQ4bWpPODc2aU9MSVFlK1dIalVELzJvTTcyOUIvbU9YaTJwNVN0SnhlYngrRU03dFZwcGVDOVRZY0JUd1FUbWp4VVZTaExaK1d1ZDNyL3ZRTW9QSFUvcGk5WGErVnp2WXFCUFRJV0lsWEZxbzFQVkIzVFNidjUxRjRYWjNYcHlUV3E5V05XOStVdFdOV3RXVmFzRzRLbmRTSnkwRHgrZE9tV3QzODZTS2JmU2pZbUZ6UmlOU3NYWHdoR2RXOVdEWURrb0dpU2pOMlVucHlYV3BUcFdSUnF6TDUyNzFwUXd4UmVoQW01SFlWUmplMUE3TEpUUzBsQnBhaGR1VzUwVmxsNG5WbVoybXpWK1B2dnBhUk9FRmQ4ZHlNNmROYVNLUkI5ZzJrS1p1YkNUYzN4RWF1cDNlWUlwVlphSy9wZi91U1ZlU25lalRwMFdMUW5vQ0tHeitJaWVTOVArYm1WNEluSzE3Nk1TYVhXc2xtNHIyUGdQYzBaSGw3a00velc4eXVNNThtRjc2YkMzL0ZkQnFoZGFzQXE2SmF0T1pnL0pkYjZNVUNyaXdkd2VIREk4V1VISEkxMG1yeldjdTB4MnNzSlp5TVp2V3JYTHphQ1Vvd3M3dm5UWU9BQ2E2aEUvdTBWSlBVMUtpL2d6ekUyNDJPc2lobGpTU09iNU1VTUtzY0I2VzFqYUhoVHFPUUtxTEtOcHF0Ymw1MVdDeDR5OU5GNTcyY2lxeFZCdEp6NFYvbC9neElRUHNLZ1ZwazJCeHpweDdsSitkNXkyeTJlcnpFK3g1SkxOeURVaS8zajZMWGpaWGxGemxsNTc2TCt3ZEEvS3NMWVdNVWxpU0U2ZExhZXNnV1lYbWw0c1VtK0I3SkhQWFVTU2V6OGRTOGNtcXRwaVM2Nk1WYlFVQ0JZTE81QnoxcFBwMGRyVzhuK1hteGtlTmJPU25RWjVtYlNFTkhJNDVKV3JCdUQ5Uklxb2NrcE9YRTdyZTE3Wkl2S3NURnlhM04rYjgzZ3FvZkplTDFUSnp6WHpONEU0d2VGTFJFTytzY2M5TnZtZEsyOHhPb1FJdVRra2Z6MnZYQmlBTzJZSXB2TmxFMmV0L005V0xDY0R5d2FPV2dhR3VPN1hyT1pwM3FDOFJxZG5LemFZeXNReE15K056SGZYSlBaNlBTMy9uZlNYb3ZCSk5tZ1p4VW1BdmNnUEpMRFpKZFF0ekd0MHRtVEh2SWlrMFE2ZnBhWm01azZtK0k1RkJpYkM0SDFEbnRLaUVySng1czZaWFhlZ3VqRU5YN081MmpkZk14cEx3UisyN3lqVXBTUjBJRTJKd015Qlh4cHBRTm8zT2ZQT2ZXbmNZVkZtenViQ1ovVmd2RjlJM1JwYXJGaENCM0llZXNWSk5uTlBMeVBybnkwajdMU2pvdlQ2MzBZaHNESDNQTmszRFJ6Zm9NVUlNK3hRQnBLUWZSeUEvaWpaZk9LS2ZPS05JbVNYbXhuanRhb1BmSmltVStwdExSTlBhK2pMcGZIc0VBQm5JbFFhaHBpVHBXYWtua3VnNnM0cFdreEtySE05eTJmVW5kOFBwV2FmVENPREUzNThUdkt2TWRXT0lQc0ZzS28vaDJZUE9RMCt0TXRRVVZTa3o5VjQ1c0pLcmZKaXBHTlhTUjNsNkttam1hc0VDQ2Rob0pLVWo4UHNhZzNUbklLWm1ubVdtWXM0MWFhTmFWYWd2MVl1bXBpR0podW5rVldCTWdacEFlYWhQRmFKVkdYeHU1OVJ5UDJidWNiT1JidVJWZWc1TDd3c2tpaEE5aGdBK3cwaytZZEtqTktweVp6M01ra2g3cmxIck4wcFNSU1g0Zys5SnFTTDE4WXpZWGdvVGlvekNjaHN4clJwajE2SzFmY3g5S3JwdnZVUmgvZkN5VDNSdExtbzgyR0FEN0lRMkRjLzBVSENCeUtxU24wNXpKa3U3ZHpIWmhHeDdyRUk4S2ZNU2F1Y3NrbTYwbTFGVjMxWUFKSUM3QURqQU80RENFNEp3QXdRQTNBSFlBWGNIWVVPWW1HQWRBV29FWEFnd0RUd2xheHVjeVdEZ1NRZkJ3VVJMSFJuWm1FMllaWloyUWY4dDhFVWdxcHRxU2VOMHBmVlBNT2Y3QUxvQVM4QVJ3QUJFQUt1T0JBQVpBRWpCUWdMSUJqampNVUxDNEE3UURoQWRBQjFXaFNLWVVVRWhqQXBpMEJYZ1NBUUF2Q25od1R2WUozQzhYRUxna09ZT0M0VVljRnc0T0VMSmFwUHBHZnlQeXgxbXlmRC9rR2FxZlQyYW1ibDRmOHhYMkE2QUNoQUR3Z2pRZFE3QjBBNndBaHdETUFSNDBYaVFoUERrOEhnQ2tBallDUUZCd1hDMFdNSVhCK0dZWmdPMENNZ1dJTTRaQzRwcGNPQ2NNaHdKV0JGamc0UXVaZ1pYc0hNT1FQS1NYWHFJdnVNWnMxYTVqVFByVEJsMjlFbE8zNUxWZ09RQW9nQndvQTdqUlVCWXdEUkFRY0hZRUM0b1d4WU1RREJnRHFCS0FySEZDRjJuRkNFVGtJSE9BN0FPWjBDY285ek1LQmNRaTRYRm1aancvWTVqczZDcVUwdVVWdTVqdmhYakNkRDZNeVpqU1lpbUtQSjVaWm1sZmVXenBoem5NekhLc3BqU2JDYnM3TWRUc3h5OHlYTWhrMDZYTUFZWUI2Z0F4UUgwRHFwZ2VBQWRRRHZBQVpBVEkrMWtsQk9IZ1V3TG9CWEJhR0V3eG1MTkxBOUJKRndGMHdYNXpzNXpJS0FpaE85bVl3eTV5eTA5S3A4dFdSZVJCcStOTlhPNktqRzZpOE1HUHNCbEFFekFCN0JWQW1nWGlvS0FEcUFQR0JWQTlrSWxLY0tJTUFPd0FXQUpBS1FJVVVCNTJUaXc0VUN1RW9BN292Rnd2RXpIWnJHQzdBemlkem1SRG5DZ2N6c3hrRHk4YVo1TEpKeEJtOUtlUHI2V1pReE9kOUpKOHdZc3NVQUVyZ0IzQW1nMklEd2pBRGtBS1lERUY3Q3RMSnRBMmdERkFSTUdRUEdzM2V4cENKd1JXQlRDWWNkbUt1WXdQaUZqRERuS3V6SFUwNmNwbUxjWGRMRzkwenk5YVhkak40TS9NV1JURmpVbHFDeERsa0dNZDVqZVdPN21RMHZVeTdsQ25iSmlQbU0zTUxtd1d3Q1VRQTZ3U3VyTUFIcEJlSEd6OUtRMkhZRHFBam9sTExJcVpnTFZ4S3kxdVFUM2hiZDlOanEwanRNZUZmYXdNNG9iMGx0Q2V2R3BURDJZdG5Ma3o1THVKWFcxSS9ldDFDT2JxVWx6a2V2eFpNREtZTkJvMlNZclowRkRwYTN0SDkzOHl4N3JPeHNwYVlWa0R1aTBVWStnMHY3Z0hyandkUVBJRUtlUGttK1dMZHVncHpFNkZXREYxb292VC9YU3N5ck82dFdiVDZrN3ZpelFlVkcvVHg2RHBUZkNEZlQzWnBoWm1MVzFMblZra3ZHcFdWWjFhakVLemFRenA4UkZtZzgweVpVVWFvY2Rrc2QvdnBvbHBXck9hT3dia2svM3hSRk5FZnRHVGRXbGRsUUhyQnplUFFwamtPdWEzYWtxMGltMnpqdlRUZm9ubWFzWlIzZk9sOVh3ZTBNbWtGdmFraHY5ODFSdXBuTXo0cTE5YUp1UHk5TkVxL2YzTnJOM0VEMktnVFl6dmhvNXFBMm9oRzg5S00xQnBGTnhHN3pwZXRzbVoxVGRWTXYvZjEreDhIVk1hRy9ERWpzajlTYlVKclN0dnRwNlN6WmdhMGN4MWwyZTViS1NyU09LTDFZcUF5aW8rT0ZSSU5sbkNOUldaYldyT09vekdkYS9MVU1zNzlCcGlERVg0U2hMZW4rVEZXQ3lDakxEUm84RVFPQ0JPQlVjbHBZb29Yb3pQYmN3MXFHUFMvelY5OFBxMHZNcGJ3cXVyRGdESlUzYVRjYng2WlMzenBlM0xNUTltaFdibHN0akxIbDV1WVhjWDhFWHZuWmRack9xMHV3dkZrQVBEcW5KaGNMT2szZnBOWHBpV2RwbHM5VmxyT0ZLenNjdDI1RjFZdmMvcFp0TDBrVVdtQ2VtR3BTR3cxbWRUVnVrZFQxdDVqM0xVSjNPY3ZNR0M3cVdvMVBQYmxCaDdjQ2ZRK2taUENaMm9IYjVmVVVWbmpCenJOTmxGODc2cGhXTGhIa2xXTEFlQjJSckxVbmM1ci9VcnptYmt0V0tUK2JDNVNXU00xRXNVSUh1Vzc3MXVTTnRRREdjekxTUURXVUR0R1hJMzUzSkhOTHN1b2Fmb3kydm1TODA5eEw3TlJsS2F5TWpHYkVJSnR3Ymh4eGtxUHRYU0VSMkxkUDdLNW1IS3M5dDYxRThpT3R5K3JFc2RaMzU1M2syTjU2djhLMVpVUFN4VTA5aG8vMTZuOHFvdk4wS1NZV3kybnVyU3Mwajl5a2ZFWnRFY0dQYXdibEFzYWpTMDFDaE5iLytjcDg1UWk1aWJSWmtXNUwvTFFXWG92WEVDSXMwZjBJUHFkVGVaaFdSQXB0NERJZzQwNDhiRmFERU1sb2FudjZvaXErRFdGbFRSdzE1a3k0dkY0bTZ2a2s1NUZOb0E5WVpVL1FINUlVRGwvS2Vmb2RPNHdjU011QmxaM3lhTGQ5MWE0SGJONXRWR1BsYXNsNDBXSlFlMkhvaUtKRGtnS0h5K1lPVXpuOFlzdkpIVHBOR1MybFpKRjk5SzliNnNNQXE5UVF6aDBOODFzL1VkQ1ErdHF5THF4cXRjcDkveWJpUjBPV01KdElkV1hpV0VYMDlqUmhWc0JRZFp5NWExQkp1NWp6cUpGNW1pL2pablEyWmFCM3hjNUduK2ZZV0E5TmxLY2FWV2psenZrSjhyR1B1c2NqV2czTC9ndkw1R0VYa2ViTy9Wa3g3SmdtelcrVTBrUnRKSGwxRnMzSTQzem1QOTBjdW5vK0dhRE1oQSs4RFNsRDRqZXhNRHlWSm01dEN0QkNsZWZLYlhhZEpsejZ0R0dtbS9kMldSMWMxTDVpRjl0VVltMEFUQk1KemNXYWpLbmo2VkhaTXNUV1J3WXF6anBhOXU3R2tjOWdRUHRLT2Y4dEdmTmQ5YU40NHdpd3VDa0VZYXlUVzVDcEczeDlMUzNidVNPdURrSTcvbWFaSXZlL3FDL3RZUFNRWGlTV2lQckVUU0I4azBGOXY4d1k3YzdtSnVZK2lUcGZPY01KTSs0eTRiUFNWbVZXMkdJS0FXRGE0Y1BDem9ucmpOZGswR1VyQmVkOU54U0p2ZlBldGF2dExIYjZjdDlleElCbGtJcUZVNUlzTkR4TjFialo4azRldGhkMU5jWFpmUjZuMGVKYXRwZU5KZUNMMmJwUXJISlBsc21lU1JZaUF6TVVGcE1TSURTNktLRS9vY2RENnpqUDkwY05JRDBuU3htVzJGZU1JdWtVdXYvcWVteVhpMEFyaXNiSnJKL0x3c2QydjVkYUU2bnkrYmhxaXo2WE02T1prdkY0RHdla25xZ3ZFM3dFMS9hTmxCc3NrMVE2YzRXS05pWHJZWmFYaDdyU2FuT1dlYzE5Szl6YU1SWTFLLytra3Q4OTh6Sm4yTkJXNlREaFdDdzF2Sjg1Vmo1bnpKbGhka1dtam1yV1B5cXVWYWtRWlZpelp4eWZHKy90M1Y5aENCNWhMSVlueDUwcTBxM1J5S0hHSnRkRFg4R25mY3Y5SmVpTm9neGFXVW1IdE8wQXE0c1ZCVWtMUHVWRmFrbkYxb1MxcThrWTZySHVkZW5HemtXdDB5WW1YemNlbFRabC90QUUzMGp1YXlFOGhXalR2R1psd01IVmNveEU0NWMxcEpKdmdyNUg3cFZlQ29ncXNxV2thUHFZME16WlY1bWJSTjNqVXA4dFpGV200K254SzQzOW1nWThHb05PSnpDeGxDWWxiUldwcGhwbXJBOEpIREozV0ZzcXJMOTFQaTBaSGY4a21YNWlMWUJpdFROZ2ZncnpWcVRwMHF6cE0xTWw1cyttcFJsTWsrU0tMYWFNclJ5OUQvZkQvRHd6Uzk4aE83NldjOTJhUmU4aVhuUnB1dE5XQ1ZCeEtJRE9LbmxsaVoybnptRC9YTFBCZnZrUUlzVWlFWk5uTk8rWlJpZmNxSTFHVzJjcEpMN0toUmFWS1JLUnlBOGMxRHd2SU5sUmJhTHk5M0x4ZTQ3REV1cHBoY3lyeGhGMWo4bFBPclRXNnNpRE5pd09kSzFvTWs1aW5RVmpkL0pyVnA4bVBvdEYweWJCeUN5OGwzUG5TUnpjTFM3MnRwOWIyV0JzbEQ1eTFwT2tmYTlSdmxWY21HNmJHWlJPck5WVWx2ZlJsaG1ySGRLS3RWbzgyVkRqMDVSTlJ1U09XZ3JKMDViQWdhdkRMMHVuK1NTckYxV28zVEUyR3hEUlZSYVEvVW55dFdWL3g1STJjeFZqc1p0WnFqNVFXU1RjbzQwM1N0OVZZOFBTbzVxblVuVXJBMmhMNWJLMW1PWGRZaDhwL2VDL1ZZUlNNS3ZtMUp0a0pic0NYTHU1MlBiNldsTy84SFdsOElSU3RKTHQwZDhtS3MwM0pUNU4wYXJCTUExaXltbW5CQ1FIT2wzMDFyZXpPSkZ1c1ZHb21qcjF5emN6V25WYS9XTzFidDB4WXJEU2hvTGtHQ3JTbVBDdDJaTFNpOGhqL3dWY1hCMHljdWVYYVlYZlI4VjMwck5pcnJPNDJOZXVueWpkMTBrL2tsZFdyZzFMdVdjdWV5V2NrNWppREZ2Z1pQYWozdXBwSlVXUUpvTktsVm0rSDFYam9Udk9XU2Q4V3RzMFBxTHpWZTZueStyU25tc1g4ZHBmTmh3T0NNTkI5YTVWR2h0L2E1S3M2WklvSTZ2dFdhMkoxUGxseEtYWFZSRCtwWlVGM21ob0syTVhMSHA1cTEvTHpIYm1Kc0NVUmc0ZUt3bDlNOXI1RUdMVU4zUFp6bGFsYi9hZ29GUTBtUWRNNWtpTmZ6VU1jY1hiQ3ZmTm5hcFVkNmg3SVZnaTVlcjg1SkJDSVZVTDhpaXdTd21EdzVSTXNoZzNjVWIvemxvT1loVVNTTXpyU1JiWHlVZDJRb3hOWE15a2RDM3pEWXNXajRzT0drOStRalNYMHd1Q3hPbEh5UmVXREZsN3BKS3ovZms2WTBQbmtmdHhvY2RROXNrMWxqcFNmMEZWcWFwTDltN0dYV2JGVDN4N3FEZE9ucXhaTWFVSUpsUGhGbE14NVV6R08vTVE5MFpsRWpyZWEwMnZ5ak9SOTlXYjhjODNsdkl3bXdXd3Vsb0VtY2Z4T29JODE4SFRUSnJMSSt4MW1yUDBLazlJSzJQZlNVcU5FT3NzQzR6elVwZ3NrREpqejRVMDdvVVJ1ekhhYkhVRURhZlJ6b2tGYlBzNXFrUFJuczNzMElZMjRvUENRb2tvdHVRVlV6ZW81Zkk2dVpRYXpvTHA4d1NleDNObjVxVUsxWlVNS0RSRkpDbHFUcHk1NHJQeTY2bFJCZDJjK3B1ZWFtdVpTalNaY0lIMVBxNm5uUDhrazJIQVlaTE5DM0lhVXBWVWFvVDNaeU4xcE5nNm01SjhrY3ZtNU8zMDZSQnF3dEZCVlkwaFBuU0lscVNtdHgrYks1NW1JWjN1c2RPVzRSNlphcnpFQ0JGeWx6M1I5S3F6RldKQVd5QkFmRWJreWVGZWxjUlZML1dXWEVsL21VN01MWHZVTldNMHYva3JoQVhWbXhxT3BMZlFNSklvdVJOQ25rVkRZK2hLYTA0M250MDBnWmxWbW13Mk95VTl3MDE2aXlXYktEdU4rUVRPZXYyUWlhR0ZSdHB5NUhrVTBOTG5ySFB1WWhWejNXMUhJcllrWmwvVm5pRFZoWkM1enMxdVhSbjd3U1JvdGdIb1Y0OUNWbEdJSHkwdTNzMExJMk1abUVycnhxbWlYcnVvR2pYMVgzSXB0Z0hsblRxUlhDZ3FSUWpWTWQ1TVNmbVdNWXJ5TjFvNlo5U20va3NzdmVrcDFMZXVETUt1STZxd3VwaUM1a1JJU1VYNGYyclBaTFYza1Z3K3BYbHlZYStiMDlXdFcvSTY5aFpsRGoyNWdhcUpwSzlzNUtxZFJKMVp0R1U0TjFMYm1tS3VmTlZqZStiQzVxbldjcE1kQS9Udmo2aU5XNW1yR2ZCMDd6OHlURVdqT1JmTlJ2WVhPd2FuU21oMFRxMzBmTlZtck81eWVyb2Q5VGFVODdSRFpmRldUVFFiTDNMT1g5V21aUzArZmU2S1Q0VWtpaTlKb3lxZDdXTXNHMUlIaXk5NTFQV3hBN05naXByNHRGWng2V2FLU0tYeGNvdFVuTE81bWdGNWk1SVRnMnFFV3VIMENaMHZXVFhMNmFTUU1JdEx5cDMvZkxNTHNMUFI1ejVWYVljSUVXSXlHQkNnZEowalpSWmZwSjZkNWtRS3M2YWlzZGx3dTBxb2RuSkpOemJrT2t5QlEwYUV2YjJTazl4WlI4c0kyWDkxS3g2RDZrdlhwV2JuU0laelVsYUx6TnNDY3dEeVQ1eTJwZjFVU3AxcVpidFJGN280OGFuNDZCQTl4eFNHbmVseEFtMFFkbHl5VFdISUZWRGtuek1kVlptdlZGL1pyWXgwUkM5WHM0L0l0LzdYeU1Zdmc2Q29xV3BoNGJZN1YzcVFoNjd0eGl5eGx2TjlIYjcwMVhsNnZtbjlLUEtEMXJWa3ZML2JRY3hkUHg1NGRqalp6Y3VWa0V0ZFc1RjdIcFAramVHZlFyTDFncVl0Y0NtRWY0cnZveE5XaURpRTJjZ3NxbU9TaEt2VUVicVp5S016c2RlcXBuUytKWEpobWlhdFgxcVZvaXF5d2ZUNjZLeDVOR2RHbVhzenN2a2NGNnZKblBwR000a2tRSXZIZlErdE5rQVVGdEN6TWFRcFNhM1ZrdC9sdWNaa3l1MjZNZEsrM1RGRW5xenZvL1NrL05vbGl3M0F3SEUzWkFSb0lIRk1kbzBadVcraUtpOVh2QjJtVnFydmVCMk4xR3ZVc0dzSFVkS2orRVdJR0hkSlhyUGUxcG1udTdMU0N3VlErdStKTXhsN2t0WEtZMW9mTC95T3JDY0RoelJuRFFoU05scHlzenVYaStrbWM5Y3pjVENNYmw1c2dDZDlEcFowR2w1N1RQTUxrdzV4RXkwa29PalNyRnhPUnZrRE0yRFV3NDV2MDcweVdiNlRNNzNoNWNQbWlyNk1UTTNqdEJkWkw3SUNzb2NxcERNblRrNTA1Qjd2bUdLOTVRNmYvcHpkeUwzcDNlYmt0TmhORGcyS2JTbnh6SlhwcU81MlhsbVcyY29naTNkSmJPdnlaZFdpMGp2QzRoYm14NUlwc1hCUllHa0tRZDVIb1g1aER5aG12Z2pkS3NXc05KVU4wb1plcVRLL2FTeDAvdmJ2VzVtcHNLUVRwaU1QVW5ERFRvMHJiRGN1TnlLYXRNNUxUdm01ZG0xRUlxenVSMVlOdy94NWRDcHRhVWtEbnlwNXkyNmk5YUYzcWxzWlJFN1R6TlBtMzBNMWp0OVZoMkc1QVdLRlJGQlpjcmp2UzhwN3RPV1lZckZvclNVV29mQ2NFVlhMVGtHcmFiTmhvRXpCYXRhQWhhV1VXZE84ejE2V2NrOW5aRTQ1YXpsdWRNa2JKSmF0TkhKdFNUMUxYMjJFOE4wQ3VQTkg1K2JtNVJBK2F6dDJ5TUp2cGYxQ0xXUDZ0VEU2bkNETTNNMUdxSlVJcUx5RURWaHdXaHZUNlFrSm9MU2pmY3NsbmFhTVZMRldNdVpVU1J5UXBZeGttZTlyUkFtK2tlZlBPVzcvOGtZSUhzSm91eDUwcjA4ZU4vMGJucmgva3c3NWlzc3RIcVFqcE8rb3ZDc01KS3VzSWZOWnBGUmYyRGtIby9qUldnNUREWjA1dW1ud3ZlRExyaFkrbi9OTmNoQmZ1Vlo3OUlISFRVeXRReExIL3hZdUEwV0NaY1laU3BUcitQbHN2YnBXWTl3a2lzMmN0N2RCRzNlOGJrdnVrK1NXZEZnbEFOZ1FtMGtpaVdnMU44ZWFscjZYWnlNSkd4K1NTcldteDJVWCtKNytyRzlyQVRob3FLNU1lZEpxbm5mTGUzSU5reFdkQ3JMY3ZTM05TNzZJbVBua2ZMeDdRVW1VT2QxWWtrZEJHd3hObmdhTTVIaU1kSHNOSnB6bTdyVTMwNlZZSXZOd2xra3NlckxkT3F4U0I0R1lPV0drZU92ZlNDcGd2RmdUZ1FEQndObHdHNmgxYW5ZNVpBZDhoS2tFVWwvWjZWSGFVV3kvMFhhSURiSG9lYkRaVlFHRUVjV0VJQlBnUGlJQUFVbzhxbW1MR3QweTJYTTQ1SlBTWUthYzZuYjZIdXpzd3l5MGNrYnBScDdaTXphOVBoNHkrZllINFBpd3NKOGZuOG9rcTFiWitxRWpOYWZhU3pSQ3ZKZHVRMGtkRXNXdHRkTEgxR1UvSllzTXdtdVFRV1ZMVjFGUEwrazJNdmVDS2JYUzRYbk5WYVNRU3pmemFiQjUzZk0yQXdRZGttRklIbXRVR2o2NzRPV1luVmFFODFET2IrLzBySm1MUzhjVTVaeitaOWhJQXhSSU5yWWlrUFpiK3JVOTdaNW1yU1M4ek9Pakxtd1Y1ZlZWL3ZZSHdFNmRTeHRJZEgyVTJORFZsNWtrYmI2RU9ocWpTT2J5Tzd6ajVzTGdVQStObnk1RlFhNi9Lc1MzVnBvekY1cmNia3FMMWVHVGFyVFlRd01XU0hMVVNyazE3ekdIMG5VdHBHeS9qV3Y2YjFyTVZ2b0pJdVUrczJwUWUzVVhoV3JXQ2R5K2NrVVRsY3kzU292dlkxeEpTdFdQSGIwZWFNdDByTTh2ek5iMmg1TnphUldJTTJFRUUrZ2VKRUVrQlUwY25LYUMzS3F1cVRFNkM5WjFxU2NNc2tRblBZdVZlK0ZhdEJISXFVbjN0L01kV1NTTENJRDIxRWQ4b3RUUDFLamRmcXRmRDQrbXdnck9mUnpYMTFlWnJUYmtlcWtkTVJLc2tmdGdHY1FVZWh6MUhxTGN0ZitjK1pveldpSHhkSmRweTB0QmQyV3I4MFlVck56Sm95aTJUYUxzM01UWWpDdVBUanBhMW85WG5MK2xlNjM4WXhhaFZKQjhKTDNxVmUxL3l4alZyUHlXankwamt2Vmh1SDVaWVlNZ0NWbUVHdDBidFgyTWNnc3ZXWEpqbVl0Skg0TEpwaGZrY0VrWENMLzgyRllJK01KdFlEMm5CQ09UUUZmS3VQUXpkMXB5dHlqYmVkbVpHZnZvdkl2YnA3NXM0S2djdWxBdGh0a3VQamZmT3JFR2d4Q3N2OTlGVG5TMkpmeVgzT0dwcDZQcmtja3RHWXNtQmpzRktxUkF4aW5PZW9USzlxL0hJL1kwa2RTZlJWbVdxMUptcmF0dEwwR3ptOHZQTXplRHhoL1dpMkQ1L1Y3enN6U1J6MWZmNk02SHhvMUFxNnMzMXFialcybUUwU3pvYWYycEkxRWFaUEpzNjNFcm4reDFPTWE4WlNyVVJUUHVVbXdxbEF4bXdqQTNpS1Zsa2pzSzJlVzV0RTNWcG5VWXFWMkZpSnZ6VW9tdFJpUFpWTElvclMvVmt6UXc5allKK1ZwTGtlYzgvL2Q3V1Bua2ZzYkt4TTQ5VHY5R1p0UmU5Wkk2WHJMMC8yRzRHS3hBR3VScHJ1a1VMTHlqR3kzTnpHM3hDZ211RXZUNUxydW5VZWx2dVJjeEZnMWdaQng2K0VFcUd4Tk5COUt0Ymx0TXc5bHdvdlRqMnRZMlROWGhDbHZtcmx4SEZsZ01Vb2VobHlRSFkrYTNXY3pjczIwVFVKWEJxMVpoV0pXOXR2SG0xU1BuNXBldFQ1dmdZeWhiTFdlVEhpdVdYYVdUdzVvSW9ZWW02SGY1MG9yM0l1K1NXWnMwNDA2c2oyNWZNemJRcUJ5dWNjZVBEZ2o5SytGczNKWFd0ZEhvNmpmb0lseXVZdkpMYlQvM05vaXF3M0IzRGR1K1RDaGw3MXA4b1N1S0k0ek02OVVWVmI3dmd6eEFpOGl0V0lRc1hCTk5ud1ZPQ2N1ZWgxN3FidVVjUkwwMjJOMy9lSTVILzdsc1A1dE1KV1NNS3NmQk1MRmpPaUpQa2xHYVlTNmlEbVpwRk44M2VNMWtTK1ZXNzZuMWFxL2xqMjcrWWd2RnFBM2piVFRSc1ZrK1VUMDl1TzN6Wm9pbDExbWI2V3J5MnE4RlM2NHlsVHZOWnE1c0pvVW1rejlKNGFuT1FWaEJBZjh6bDZUTFMvdW9VT08wUFlwSmx3Z2V6VVZvanI2N1dFVEJBbXhZRHVicGFrbWMydEZadmZPZHBhWllYcTBGRm9vNDVSQ3RCaWFuTkpKc2VXbHBlZXBHOUYvUDAyS2dlZW4yNFNsbHRIcGE5ckNxanAzNWxlZGNOZUtYaVI3VEhZNTJrbGozNHFEbmtHN0h3cTFqTTRZVGJncUZ1S2F3OEk1ZjN4Nm9yT29qalVyVjRORThubDRSdmFyMVhDRE42UnFsNXVMUGtpS2NRUFo0TzZROGxseW00bnpWN3lsVDFySStYWmZ4TlJUU2E5YlpWb3d5NHpqajkxYWtsZFlRUWRjY095a3NWTnJKdy93djVvd2hXYk5ReHpjaWc3eXVpNjRmVVhEWkhWNk90L3M4RzhTQkRHbEEwU0llZ2NvbG1xTklDMmJYNW1jNjVleVhvbDZNVjk2NUpWOTdYekt0R1p0UUtnbkZUalVqMDlMcGZLeURsUGx5SUh2SXIwYWtsa2JhWStDU1p1a0ExZkZTdnZveTJSQXF5d09pZ3pNMUpVTDJ6M3prNFgwTjVNZjZWWnZvNlVzY2pSUjdTT2JScVIyUzdsK1NLQWdhc29EdWhXT1JkTFk2NmlaVGZEcFVJNnZISDk4OTZ6UGZMcHVSNXk0alMzTk15ckZoZ0R3ZUtqMHNHamp4L0wxWTVCcUdZNUNDU0ZZczRiK3A2VFdaZWd2TE5QdnVYRWFUb2REUzlaenJERUtKT1VEbkNKUWZKNUtYdFN6YVZnaW5lNThyMDBkblRKZXEwWnU5b3ZidnF5OVJtYkN3SFh5VHlrcHJVU2IzL0VESjNpMGtrS2l2dlBhWmN4L3VUV3krWTMwbVpiWWxCd0dqcEo3dUp5UFZMNGVVZk5jaWxqclJrbWI1NzJia1RLdU9QSTdxL1NSZXhLSFVsaDdIbFVwVEh6MTVzcEliclhNR0k2M1owNzM1a05QUnliWHRXL3htREg1dXE5K3VveTVmRkdQUWdSWlFPVVNxRFNZMVNuTE04NXF5M2w3Vm1XZVhzc2RpaFRQUGx2ellNTzBFc2w1aXhsSEhJNzZZMG1ac1RDd21pZWNUOUpNUDB2VFEwNUJzMFJlNHkyemx3OWNtSVZpNjNsSGRGOVdLZ2JscGc0TFpTa1RKTW5IblVYcmV6ZjRLdGxXdE14Zm1lVGI2TU5zb0RmMHhEa08yajVocjUzVmxwbm1hdHVOT2JNOHYzMVo2TUp6a3RHcWhBaXd1RHM0MG9tVENEU2FNekwxdm5NbFRxMDlkNDJVVU9jdmNZUnVSUmVwTE4zYlcvcStEZERCd1NwbjlJOXMrY2MvNlltUy90R0owazlGbmI5U3BMeFZpUU94SWNoeXZiUnlVcnltZDZWamtmdVgxQ1JwZjJvakM2aEd3c0NpVkNXMXlFbFpHODZYdGJGYngyRjZmQmViYWpTYjBGL1NZOTQzRFI2eDVyL004dk5nU3dVaEdOQ0todG1oYXo2VjdTN2pMYkp3czFjU2UrZEQ0MVVYNW4yNzlvcGIybCsvNlRFV3NIajQ3OFI1WTJqeTdZUWZ6cE1lcXRFZXJkTTZXZGVrdTE3TkVYanNiUnovUE15LzNnOTYxRHlvOEhqVkQwbnczenZEaytZbG1tNTY0cktKTjFhaVQyMld4OGRwMFZGckNvUUppbEtrTnprUEdpWktsWGQyV1liMlhsRW1vdmxtbXBNTlY1Sk4wY2FjODJtNnR6RVdGZ2VvYW1wS0JwaXFrcXhrKy9za2ltMnl6anVVYTNOYkJkbjcxckk1THhhMGxEWnkxenBubC9FUGJSSDdQRDV3N1NjeW5PTlZTelhLc2pTcXpTUk1zWlNoVE54OUY2ZjNGMXlFREZveFIyWHVTU1g5alFmdUsvSDduSWlLWTBLRlM2MUNKZG5ORkx2a0lmNWxXbkY0OStWb1BhWTVlYmFDZGtSbTZvSzVKOGJ4S3ZxOUsyS1pOSnUraVh3dUg5L3VZSFZKbVpMMVo0TndtRnFYSU1zMGZLN3ZibEZPN1RSbWRWck9QSDR5aDB2KzcvbTIzTkN6OWFSSEJuMm9Id3lQdVNKb2pTTXdoT2c1YlQ5RXpSbVM4VzFyV2orSnByeTFsNGt1dWpQTTh6SmlMbGE1R3M2VzV2SmFnekZocURpdytFR0dqMG9ENmxhWDlTSzZ4QmkrT2pJMHZRZE05elh5K3FHTlhwN1VYcGZTaEQ2QlV4WStIS0N4dndQaXJ0Q3c5YmU1clpWZDNHSXVWNkZ2RFJSNjlIempQSS9kQ21OM25MZlJkWVFNV1dDY29La3VjZ2tzY0hQTXlzZmx1NmlnZ01xNC9IWDBjOWpESHY2RGF4cUwrMHhGdUxLWWZOR3BTM1o2L1d2em8vMGwvblZiZDFQajVwNnlTTEdjYXVON0ZvY3cwL25IZDQ4aHBsUnI1cHVrdjJiNlgxbldFdDBINlJ0ais1V1JCa2k5alM5OVE4bytFQ1dTTDJRQ3RuT2x3cStXVVRYTTlCUDllWG9NemE1bWRMbFBscjhLc294ek5XaWxYK1FRbk5hWWROaXdyTUhaUWJQQzRWamtibktJTW1NMlRMYzZ3MFJwSFNsTXJjd3hKaURQdGs2Y2t2Nm1PMUsrM0ljZEhpaHdpYW5wV3BuTlpUWHl2UkJkanJPVytaNkZQbFg2ZFZ0RkpxUHkwOUdhWWRJeDlpc2ZjYWZocGF5cDd2OUUxMzFtbWF6bFdPc0dsTnZtVnptcmFDcnBXYnkxenVrbHBhZ1poODNSYW1wYzBWbEdqUXJuNWJ6bnl0eEk1OFdjbS8xQ2tlWERDcmFOZUoxSVpiV0VWUGJKRjdCckd5aHgyY2szbnhQeSt0ckgrUFk4SVVNdk5TYjFsNGZFNmJHcVQ2ZExPZnlYa2tXRXpDUHNQVFJSeWVSZktDa2xIZlFTTVZtMUQwRTBKMzVGTHBYM3haMmJMZWRKSXZlYkR1QW1Cd0hQRXNrK2tGeTlPSnB2Y2g1YVhyN2tsV29sZzFibUhQOG1PL3lSZXhvMUpsWlJyNW5rVSt3M0ErNURKTFdIUlUvZC8rNjVib0kvT1pZNlRsZFBsUWxnWTFOeUt0OUdvbXl0Rmo0TDRjL25VY1FFeXhzcjNtV3kxZTgwWXBWMFZacXg0MUY4TnpTS3RWb3BEU1QwVVVNdWlPS3NxRWdOelJuUXNiRVorbFh3d3MrR2tjdVlJRExtVWpUZmtqcHFTTDJsUjZTcHJYVHpQWGFnTGp1ZDBPRU05OFByVEpaY3RreDN4blBxNE9sS1ZaNUZQMDJNcExsSFRsTnlObFdJeVpVU0FyNGF3UVMxZUZWcGFtTzBrVlgrUEhUalpwc2t2dkdoZEQ2ZkpLNkxrZUZnMUVtbG9FYUJTdFc3V2xjVDc2TXlZOW5Da0pjUGxPbVZKRjlQdHNsTy9vUzZlWWt1d2lxeWh3WE9Gbk5CWkRoaFphMlpMcythNVJaRXgxV2I0U25uTGJORjYwaUQ3Um5UVy9tK0Y1U2xFa1dnc095Mjc1UmFRamM3S0dmSHBWZG41RjUwYVZaVjVkdWNSVDdSMDZkVUY2Slp2QmUxdVVXSXdodTVlTVdjeUdRU1RDdnRURDNSbm9MSkhTTVBhNEdaam5Ob2ttd1doUTBhUXBERzFSN1lWblRLK3ZtWmNYaTFuOVp0SFN2UlBJNDBFVVhYcXExZnZxd2doREVnTFNPUVRDV2RLU1NXOWRSVFUxOUdKYlZuRE1qVmFlb3pUUmo3M29hbWJ2Sy91Wml3V0NheHBEQ0k0aE8wcFYrdklLcVdjZnpsTkt4VzlkS3hvVmRxdmpzVXYvc1ZsWDc3NmJEWUZ1UmFheVhIcFZtWmVnZlBjekZhMGw0TXpGcURYRktxU3hoS3RXdHArbDhxUDVGSmViRzBEd3ZBOFltZ2c1cld6VFpYbXVJZnpOR0dUYzBpaEdPMGpGMTZKcXRSdERGZGpiV3FET1V3NGtnanBpV29EOHNpMnBlajk2WStUTHJtWk5UZWFtU0x0aDV5U0wwVHNjZG8wdFVXcXZjeE9ZTVhSWjNub3Y1STFkK05MMFRpU1BaUHVQYzlmNmFHalUzTGFySm1kTjZTcUNlUlhPY3ZVWGpsNU0rUkFtNlJRYWRwK3BiYlBDWU5US1NLTXVLVEw1eSt0OE5JMTIzb2I3cFZrRE1HT1J4WWhOYlVhVFkzc0ZoMDRlNkRUZWhCcjJ5bGtzdDhHWnpMbWpzMTZqMTh2SmRZd2kwY2pVdlg5VWtsWGcyVWp6SXpTMDVNTlg5Tldqa3psWWUyRE1XODVKSFFyRlRhdzVwZVJHeFNOcU9QNy8vMjZwdEp0TGZOSVUxZG1qTURwZnY5b3FKbkhRVktORzhUaVgwdnpsNDVla3c2cm8zcFJ1TitXeVlsV0NUMmMxWjJwRXErUVZjV0pDd1hKR3JTRFFOeElrMUplYXRrcFpjK2lLUzdyeTBVWjBmNlRNV29uRGEwbnpXWE5GK3EyMWl3c3RkSkp0UWlkVDE0NWVtWm0wWVNrMmEvZ2trWVRGbTFoMnEweVMwK0xCc0llNk1qVG01a3FyUFErbk41SDdxc284MmUySkpJYVMxWnB1T2d2RnREd2hTSGFZZnBRS0t4eXZleHNpQjdoRnB0YVIzeDRNVXFzSUdyckx4dStudzBrOW9BbHg0UmdTYjBKeUs0cDg5WDF6UE0xYzhmRU1ldE84MmpqMm82dTE5V3dCNkxIallOVXlubk5WcFg2ZVJTOW1tNWRrbzFWUG1EUHRGZW1ueFc5OEV5dHgyZzNIdHhyNGpONnNXaUtaVGZGTFpvTSt6VHNhK285V01nWUkrYkk5MHBZdytWWTVSTE9JNjkxdnBvMDNNbUlNTXQ4bW83L1VSK3lvVVR6VzdqSVc1c3FGMUZwMXVTZFdwSW92K1VLZWlnK2FMdEVHbGF1YXpZcEdGQ09iTEJSUWFjM0hqcDJTWDlMNWR1MllNL09zNC9KenZFNVppZExkVDVJNnZ0THp2bW1PK1M5V0NYQjZFZ1cxQ0VKNXBYdmw4Nlh6WXBVT1FYamVsdjdPRUtTaVdoYXlOcGVaSS9Zc0J4eldITlBLK00xc255a3BsdGExcXNsNXVxbzJKOE5mWG92N3JROXByNTB5WVhZZGg3QW13MkVGQngrSDFlM3JYdmx5WXA5V0dxYlJDZEsxdGUwdlZrMEpiOGswNTdDS3ROYjJJZ01JUlNKV3RscWZudGRtcWZ3OXYzMGdxV1dOS1NpVDZWS1VYNytJRTJtYzJYVk1ySXBFR3JIZ01JUmlQbkJjdG1rNHRPLzZTZ3htelIrVnRRWE9yVTB4MWZmWFhOYlNSTE5nUFFQUm9hQ0M0UkUwVWFLbFVIejk1akxreXlLc05WRWpubnczNXJpL01SYkVGL2ROT1owckx5WHIyT2dYNlJVY1VRTkgrY1BsRzVES2Y3eFJGN0cydDdHci8wOUF2L1pVODQ0cm14RDRiTS9URmh5RzdSNlpIVG5JZXFhL3FTL3hKand2Mmk4ZE5sN2hpMGxxMzg1RjhzSmEwMkxCYUpGbnFldk5MWFArcDNmSGJxTU5kY05FVXZvd3N3NHhSSFYwTXUvaU5Tdkx4TmxSK25INXRlVDBWRzFGUzJJUWIxbVpNT3VvU1NSTHpNOGs5VytZTSt5QWJ5YlZKVWRxWHB6ZWt0OFRFbDRmN2hjbWp1TzlFZkx6ZXA4YWpiRDROaEVJa0VUMlM1UDVUZVR5ZXJOZHhBbTZjaHB4cUc2dEYyRjZ2SWZJdmJwZ2k5aFBjVmhUaG9tQ3d3bU5VelM5Unk5NUltemVXbzF1OUx6RitWZlJlQ09iUmFldWFtZm10Z3ZBZysybHY2VVdpV250WE8vMFRtTWFNWEVqTE5QSm5tNnUzZFNESHFwSTZmSVFNMmsxeVpFc3pDNUdGV0NZRkNnZGpSVWdXTWphZytldlRtblp2WFJtWCs4MWFpUDU3M09rd3hnZ2UrZDBJazFON0ZtZTBRSXNIc0VLTDBtSkhCQmFnTktLOCtVSXlDLzl5S1hFakxTazNHeEtUdE9oOWFXWEk2WFJrNGovc0c4Q2tEOWdxbkQyYkxZOVpxek1LMXEwWjJjU090Y25VakJ5clBCTHlTTGFqOGpxalUzVVN4WkNEYUZFTHczR2doTllXV2dnZzJsRk12NWMxSGZOYnJMeFpadlJibGwxNmJHanhtRjc5VlNoaEZpY0Qrb1dBUGdhRGxwRG5ISnNsZE1QYlZhTnpETGlKUm5OMVpzVVhsbCtFa2EweWNSK3JCdEFtd1RZMFFQS0VLSEhFQitzZXVwcktMWVloZnZoQi9TMHRVZk82c3lZa3pWeUtwT1c4NUI3ZE9qMTFaM014RmdVSXFEcHFoUmFuYnh0aW1XcDFJcDg1aEY3YW1rak1vblBsQ3owSmw4OS9xd2tqNkRCRWVQbGxKUkdqMEVLWFBZOWkybDQvTXV1Wm1VdW9tcHFtRlpmTDVrUWZmUjNYS0Mxdm9sOWhGQnphUWdlUFhuTUVaYy9MTHUwbVdsNW16ZFJWN1ZIeXdZT0VHYlJlZTg2VldqQ0xDRUhZK1dHamhTeklJRFppbnV6YWtqaTZ5TFozTzByV01aczE4dmxYMVlINFh3ZVZrNUJCTFRKMDdsVSs5ZjVpYlEwMDJzZWNSdTlwcW12NUpOaEZCTkR4TlJpU1pYTldQZkxXVFFXdFdSaDdiOGNsbXBOemQxWmkxbTVJN1RNNWVoWDJCNkIxT0cxem9STmF4UjdWRG0vVDU1aWV1OUJ5RTFTS3F5OWFyTjFKbzJpQTlKUlBHeFVlNXVZTi9UbU1mMThqWmJsMFBVZ1BIZlRtV2cyRG9hdkx6YzBsbXhJRHNGcEE1ZlBCcnpaNTBya1JxVm1aWmx1bDFpcEU4TkVWczg3elJMRnNscTZTKytteG9HNUw1Y3lqanBsSmUrUzg2WEVuZGFhOE81YXk4akQydjFOZmwvWUxndktpa0M4VWxJbTFSR2V2VGp0MXRRTVRtTjA1bm16a2YrMUdsMmpwMHpFVlk0S3pSNE5HbEc0OUZhbWhQN3l4VnBpYTBGM1dscE5ia0VWWmFSVHBDQjluWkh6dStDV3RSSFZsQTdVR3dsbENhMjVrZmRLc3pkdldNWjAya2JPYkpQbDNHSjFieVo2dmZJd2t6Ti9EcUoyYkw0eTdQQ21VVUJwVEtCTWJMbERsWXhhV3N6U0tjNTdMVFNaVDBPWFcrSnRBWmJxeWF5OVdVRHNMMUswbE9WTk9XMTZpQ0R0UzFrWk53eFpacTBQVHhEcWdGWk53UEtRcjMxZURVNU0yVVFnbG5xZU5QZlRTZWk4dmpMNlhVTjVscjR2SlQ2ME4zMDNBckZTRUxXcDFwbTc2WmJrTTVwSDN6WTZhUFpIVjFrak4vWnlUTkwxL3lST3RZZGlzK2RUbEdkODduUFhHYXQ5R1hLMWErM3B6TFh3WWw2OVZxWTg1ZncwUjk3clREdjdqVlloU0dzbXZmZUdNMFcxOHFaZlUwa2JMT3lTVE0xYTlVa1RyUEJNRHRCcWNiZzR6a1RuelMvTXF3UnpjMDl1TmFubXhiZnVOU2t0bWprVldQaE9YSFJudFVXdFIvbXAxVk81SjdUQThITFVxWCtaNy9QaXhELzE3dmtpbXhXR3kzTGcxTXJscUhmVVRhZzlmc205UE5ubDFsNUx5UmUwa2pUL3FNZXczY1BJNkVra2pnMmJKZmo3dXRDWnVqbEJuMXAwdHVSNnFtdFVaQWw5dENhT0RiWmFvc2JoSjg1ZUp1YjlCRlh1RVlXYTlyU1NmZmFrS2ExVHFhUmU2RmcyMFpyajQ5S0M1VlhKMjdkNEltM0tPbjFRNjNMR1BzM285NXVYYVFjalk4bFBHalNGT1ZaMDRtNlo1SDIyYmp4M3ZuTzBFVTFhTFVvZk5RelZiZzZMSEExTk9RS0RZMzBLZkIwaXRtTFZJd2kwYWYxWmhjUVo3M1hxeHIvMysyaDJKRjFNaHJCNVZKSjZUVjlMTlVKWVpacDNuUjZoOGtYdVlTVU4xU0lFMkJlZzdGUnQyUllVUUtEU2RkVXNXYi83RFJLRURYd3RtZ3o2K29rcTFvZDMwMDc3bVdMR0ZXMEorVUowT3ltb2ZrUzhyZDh0dkkvWnlGSW55S1dhbDh3dk4zbmtudEpxV2ExQWZmOHZxdWlkSXdtd1NvT1E4TlZPY3NWMFpUNjR5MW1hK25VeXgwVlk3ZEZSQjBrWGw4a3NQbTFzemEwTGF6a2ZmN0xBMzRORWVhZ1BJTDh2ODlCczk4a1RGZlpxTXB4SE9lZytWZStSZ3k0bkxyU2s5cjZWa1FmWllnTk4wd21XWWtuam53cFIyVzJDUDIxWTBLWmsxVHoybUhhY3l6aDFSZFZscW9HRnExWndjNGJYT1k0OHFncjZsVnVhUi9VK0xuSm9IVGx0enBzZHl4VDFUc3N4VnRDaVVOUTlacDV1Z3Y2ZTBqbTBXckhkV1NuUlpwdmxIVk50QXdGaVFaemgxcDhJTFhYcHMvVEowM1Q1TjNTbDhtS3ZJdk4xRzArckdRVVFqSVE0S3VLMWl6RGxNZ0k4cHZLNVdZOGw0VnF3UEVTL3FiNWNHYW9RS3YvSHJYSjYvbE9xMElHcmFCb1NjVGFsbEZsR0hyZWx6bHZwOEdhdVJTaEJ1cUgxZFFua2QveVNMQzhIM0R3OGNtd3JJWE1VYnFVa3E1ZnpaTXpQTDFiYzFPbCtKbENURGxXTzAzQ2kvT05Vai9sNXM0RElDOFZCcWdJaWFqZmsvTTlSYTN6NU1URjRaUFRUaVlTYm9BS1ZpOTJuVHZOaERGdzR3TldLTklVbDlXdFAwNmVSVTFWMXBEYkJwT1VrWE9YSmlOM3hjRDZqUm5MbGt0VW92V1hxOWlNQy9MR3lnNGJLaVpwTWZiS0VxWW01MzBrbnRxUldLbmpXWTFmSktzOEZjYXgzdzlEY29TeFlZZ2svSitrZUt3UGsxenEwcm5yWHVSU3p2cXhUSTlKdlJicGFzekVpQXQvdGVYcW5IYnlSZjJKQW9UaEVjcGtKU3FWWk9XdnJicEkvZkhVMFQ2U29iaHBITHA5MU01VEhRNmxrazZMRXdlUFJQVXBrMWtWZm11bER6Y0c3OWZ4UFFSdXVLUk5ublU3Y2ptd0Q1QkpxRXl0TkVMRmxSd2VlM2ZlTVZRYU1YVGVYem0vNWVhenZvejd5T1JtSTMwZUx3dFVrc0pDb2paNS9icExlcFZsaGVpOVdsTXcxYVo1eitYb2ltemFyRzQzK3c2Rnh5SXRDRTBickdxTmZQYjZmT2t2RmozT2dyUE9oV2x2NHhpME5VRFNjZFdkUkxWZ3VCdVRGU1hReW03VDlUWm1rbnkzbUc1YXRhYldhY1BOL1NmOHRXYlNSSFVOT2w4NXRvQTJ5c2ZsTVZKYVhJTHFaVXJkYUUvbDRZSUZYNjFOM2FxMlMvTHlSeGN2Tm1vTlZqMlFCMnNmWUZ4eE1lbm5yVGVrMUIvWXZSYnRBNklVTXN1dTJKUWVrcGtsWWJOdUZ5akdpU1VSNU1WWWZjdC9tY3RtZ3pWanIxb29QL2JUZVJ6YnpVb1NtWHJmQkY3S0J4MndpbnlweHdyak9YOVB6VU5KRk5yUXlXN1lVeTNhbjh2VjlQbXhDSG5OWVhndk5oZ0JleUpCNWlEWlhrMnZpV3lmcFg1TXhWcnFENld2dy9tUHB2blFPeDJuRENyRlFmaEU2alJwUWhkMHAraHFCUkJ6ZEpsZGFadHlJMDFMdmIzOVg2WXRjSkhhUE5ob0RvSlFsZzBuSkNNb0UzTmw4bktTT05XdWpLMysvUnJmS0s4Nk5CbGhlTFZOMzFERDJLd3BqZ2tPekZHai9ham9Tb2JRM3pVdFJpcjZSeUgwVjNWekVpQjdORUxWSnJHcmZKam1Jc0x3cFFvdEpNYkV0WktsV3ovRzl5Z2VkK3BKUGYwWG5jRlRGeFhiR1cwcnBpeDhYbFlHNEZURW1LQmNqcG5IVk9sckw2WnlRMUNSNjF0WVlYZEh0RUxjdEwxTFpMKytMUTJXaklibkNvZktsRllvL05WWVJkaGVyMHB5YXNlUWE1c1NYa1l6ZVVYODA4ZVFaTzVmM3czV1FDSEVJMlZ3MjFhOU9UMFBRNW1YVGNVdFNjUEwrVzBEdWJGMUxaUnlITzNrRHVqMkpCYzBjRlRXajA5aDJoNm5LSnRjVGJWRjI1ZWg3TFFTa0xHNUx3K1M5WmovSkpGdGxKTm1RT3AvTHhuSzBTTnNmQnlTbENWRVp5Wk5XRkZEdkZkaEhGdGQxbXlsTCtzeHpFMnNReW8rVVllMHhOeVFNb2FseFNwVTFQYXR2ZTM2ak1tUFpyRHQ1YXpScHAvTXp1WXFiU0ZMWTNXMmEzbDhXUUJ1a29DU3pTejI4MWU2MTlhcXpQTU10N1ZCOXN0blJNcXNYUXc1RkZtb3JHV0xMOXRLdDlsUmNJUjlDaW5IMTlkVm11YW9mbHkwekxETldLZWY1eTAydlhMM09NMFptYlFwcDN5U0NxbmZFbVlzZ1RXcExEc2FsSHpaYXR1YnBVV1J4YWZTU2xkTGV2ZFdOUmVMazA0N2MxSjdiVUZ3WGJsVnJuNHFoRCttbWQreU5Ob1NVT1J5YTUzY1lkNEwrOE11VVFtbEh5aHk3Tnk4M3hVRTdTNUpMa3lGaWlxSFpvYjFtWXpIS3V1VVhZNzZzdHErWWk2eDh0ZkoyWHlPckZNbklKL29DRlJtOFBVYU9KWmVubWVUOXl1Y2lyT1dacGxEQ3B0RUdxdEw1SlhXMURsSnpWcVVrZTJYODVySDhpcjVsdEdXblRPN2Qxa1VpQk55a3ZJODNJUDlGL3ZicUttalhSWFV0V3I0S2lRZjY5TCtZWmZsTFR2S3NtV2U0SFJxZnBhZDVJdS9pRFZtaXdmbGJUeFVkM04rck1mR1kxcXlMcXN2QnAxVGtvM0lxZk45QTU5SlQ3RkxtNDJWb2M1UmJYb2NtSzFIdGd4Mzh1NnpVbXZpRjZPWlk2NEdaMDVFZGp5WnBsbFlHMEExVEVLQk1XamluZldsbm1VT1o2NS96TFJOT1czUk11WnpLNmZKSkNzM1hTYXI5UEl2YVpUdDZ5dzhRR2xUejVmSjM4cjdHbWZwdEhKSEgwcDFLYnB2ODVKc0xPWGwya0pKUlJuOU5CeW02clppWHBMNWVWZStyWDRiQnlQck5hTVl2eHBpbnhaWW1neFRMU3lDRTh2S0ZQb2puakZscU5oaXZtSVdaaTF6azlXTnBXTEh4SFE3TFVFQnBSTmFhM3duQ0VTdWF0ZFpKYjQxVlBJNHRLcWxGV0gxWk1JWXI4TkVJYWpLQThrZzUvbDJYWHpMRlBUUHBBNUh3K2U5MjVobG5WS1cvMDZTS0RIc2VFa3JoeG8zMFVwWEQvRXRsYTBESzQwdmRiZFV6a1pWbXprWVI5RzByNHNPUkppQUE5OE1waGhpcWZWWXhUc2UyakZiNzUxcGMxcTM5RGZkV0ROVzlFMm56Vmt3aENJTVdTUG9CRlNRRmZmTFRteTUxU1JSNXpycUpZZExWc2Z5L1Y5cjh0VHBhaW1XWWt6VnJMRXhiT1B5UlVvUFNxMWNvYUtrazk0ZVdrc3YyRVV6ZUd1Y2w0cjVzRVgwM1JUb3BhamdTaWhzeTFXSjNsclRNNWVkcHV2V2g4dTl2Tk5mQ0s3T0VaYUVJOGtNbjZQa3F4VXAxRkNTWkx4ZFpUUytDcEo1dVlYMVlaYXhHdVRjazBOc28rdDhobVlvVEdETDFHeE9wSlROSTQwckdFMmpLU0tNd3M3TGtrOVd4RWM2M3ovcTBScFdUVGMxZ3haWm82TkswckJGTk4wMmFhcDRyUS82VEh0U1JLeURrQlc1bzJ0cjZ4UkRkdTR4ZGJUa0ptSjdkTW1GcSt6azI1dWFiTDJtS3NiekZuSXdDMEVNVm9mUm9rZi9aTFd5Wm5PVm16OE1yZWN4alFPLzJLYWExdVVVYk5ER2JZaWhLTUpENGJoeXhMVStwZDF5TUpabU91YWlKZW1vNlNKb0txTHJ4dnFPV3drbTAweDVhOXhvdEhaTTV0TmFUa1lSS3Z0cUZTL3c3U3RYcXNpb3RiWG9xb2JrZnRpZzlrT281M2NoMzFTMkx4VHpKSEwzWG9GSXlka3Y4MlRNdlkrTG5MOVkySHJ0aVpNVmpjcURlOVJNUksvTytkQkU3VjMxWWhvYUttNVlRTkNCVnRocUQvcHZ0VDUzV1ZpVTZYSGVvVXI0cXNRSUlvdEZmeHFTM0paMHdyR1hMM1diVDZsSStNdWpMVlpzTFUzZWx6U0N5eFBINlQycWZSUkc2UzlWY0lGanZsOURPa3V5OG9UU25KUzNMb3Y3WVBwekxUa2x6Q0ZLek0vZVpzYUVLaU5WU1NzR0kzZkJIRnRhdUppcDc2dERtbnYrZG9uVG94eVJma2NXY1VsYWNKNU4weEplYzE4WDNWNXh5VVRXb3pMNnNHdG9NU3grVVN6bG5PWDgzcldvMGwrbXg2aEpDV3BOcjZJcXNRbk9hODVaN244ek5uaHhKWStSOUIxT1pMMW9EYUNENWlDTjF6UGM5U0ZNMGlXSVB0THd3M0RYUXl5Snl0V1ZGdExwTkNSOWFJK3ExWTJvcG0xcEk1VmkyNDlXVTMwMHZEKzkxbTVOS3R6bFp2aDBnbjZQbm9LRmZweVIrYTdNa3g3cGFDVmFhVWZSSjdqK2EzT2l4VUxGbEphaWZqcFhNSy9kOEVVUmJhUkVWUFNiTXoxWm9ZeHB1UGxDNjk2dFlUMzlGM0ZhK29YaGMzQ2t6RzZMczF2VmhjOVgzbC9vNnBYb21DV2J3dUgyd2szTFloTTd6U1RsL1Y3cEllYS90WXhjR1hQL3ZISHpHTmxyVzh6TDRpNEJ2NTZFdEg1SE1uMjZGeWgyK1lHTEx3Nk10TjFJd3pjdkZvbTg0dzdUWkNEdTQ3dFd1QzJoYjIwMUJMS0lFZmU2MUNvK2NqSnNyemlLUkJpeGxBUStkVk55QkZWaHNFODRlQ0VvNUw1bFpmcjd2cjZESHJUY0tIZVh3RURCaXJvNXFKdWxXYXZoc051QThjZ1VrNUFvWG1UbU1sempNbDNXZGprNjNxSHJNenB0czhMSmhrVS9sL2F5cFZia1N6bHdPQ0tJM1llMVJiV3BHYXl5N0xPazFhbVVhK1owVzM2bHloTCsrdFhzSjVBR3dyVUs4cFdHaG9mU2xhaFd2bDFscXpha0dwSXAwYVhkb0JVKzF0bEFieHBzN3RYdjVJdllyU1JHeHpzUE44S0hMbVZ6anBmNmt3eVd2alZhYXhsYUdPTlZwV0lzWlRhMUxkTWlxdVo5aHlRRDVYSURTS0tpZVo0emt2M29MOEdIZk1mN05udDY5eThrc2tmdEhtNDVLWlY5V0ZNWER6VUVnc0tINXhWcTNuTlpvOUhHWjNMelk4amtVcGxiK1pxMlRCcHIxS3NiSGFHaEpsRzVMcEZYYW1uYWMzUzRpbXhvMC9uNXJaemQzRVhzZjZmQ1hwVlpsczA1ZTZ0UVk1RlZsaFhrR3BITjZXVWxXbHJYMk1tVEZmOTdDU0xIY3hiZCt2NXBtWHhJZ1RjNE5QT2lldlRLc2J2cXdtaXBCdzFPT0hNRzZXYkowNkpueXN6V3EyaWxDRHRTeHZOczQ1TFZvN3ROaXNtb3BKN1pXdUNwc1AvNyt5VEZYOStiTFpoL0padUVZaithc1dJSEJZYWtwaWNGVTBIbkxXZS83dTR4bStNem8zeTgzeGVIUzhiMkhpZzJtZ2V0Slo2MCszSGFVRHREK1hxNlNSNjVOTmxXaU9MUmszSTZrWXNFN1VyU2N1aHRvY1RvOVN1Y3VKa3hKSFY5cTgzU2pPY01KSW92U2xqdHpYelk4RkZ5SGhhSTRnc3JTV09VWHlzYVdMTStoakZ6L2pucHJaTGVZclRPbTZ4dStwZWJvaXhzQy9Kb24rWE5LRlI5clgwOWVXeDhrVVdhUWVsOUJpM0ZXa1RIeVN5TWF2TVBsTE5kMkxnaTcrUzFZRjZGRTQ5YVpWZ21ZN3ZtWmJrSnpNc3gzOTdxczQxUTgvZkxkM2RXdDVsZWdpbVRFWEE2YW42ZjJaYTFac0UyQ2hFcFVWdVlHMkhJTjdYMFRKcmhhOXlKc1BjNzNJSzZQVGVQdFl2TkxzQ0JtMjVzb1pKQ1d0MEYrWVhKRkt0V0x3b2hFQTlqeVlic0JkVWNqQy8zdVNoWk5aRkJlcm9MRGtFbm03NmJsMkZKenpseHVZNy9ZYUFRQUx3MkhwQ0Q0dzRUUXAvRWhUZG1ieUpwZjJpZG9sOVBXc3hNaUJWdzNKSytzMzJFZ0hrSVJDRnVjb1ZXcDF2aGIycnpaa3ZNMW9zZFJObU1weThrbFhOZW5uUllNaXd3RFJVOUZES0thVXVjaDFyNlZLK3cwZnhFMWM2SjluNkpkTGRHOWdUa3JjRndrUVRpRDF5ZzlScm13N2RkalExS2lDRkpwWnNTWGpkODJvbjVTYnBqTHNGMDhiVE9TeDJYbCtIazZidTl1Z3pOOFZIRHJlZ3pRMHp5NnlLQ09ETTNKL2taeVRYd1ptK0d6R3cwTGd1VTh1MDVDV2wwSk1PMUNBeXdhUlQzRzhhT2J2ekhWbTRReUhsUnI1TXhZSGtQU1lYSUxKanlsT1RPMExtanRNVGFLTW5yazVKdG8xMnBkRmE3RW9Od3FXV0VRYUlGRnFlWjByblZNYVNQMm0zcmN6UXZjdklRTTJndk5HbEVtdHlGUVhneFZoZVdjM3lQRHk1cFJITCtPSnJhM3pReDlxSHlpbnY0M3M5SEltbUpxeEtISTlVcnc5SDBlY3YrV04xUVJVWVplYWorOUpXRE5SZVhLcHh3d3F4R0hZWG9vTEd4NUJSdlVyVEJ6bHgya2xlNE5ZMUxvL2QvYVIwUnpmeWE1VnFIeEZoRVNHa1YxS0FXWmE1blJvM3k3cXRNMUIwRWMyYStxMVVTVllIMHJMRk5QVHk0YkJkSXM1czhqbWhneXlrU2QvRDVrai9HRVc1R1BLNmtZVFpRQzlTMVZodUNlVTMzM1dsbHkwaWR2WUpKcVV6L0plYkE4VE1RLzJURmlpRlFHMVNOcEtjNnMyczVyV29TWmw4M00rcVdQcThqaC9tOVJwdFV1cllEc01qdzdqMDVVM3BXVkpaVGtPUmZPbk9YZWJDWDBKYWlSajRKZkY2VFZxbmNsOWlNWGl0TTNubktMYmwrbnJtVnJVK2d4TXVtMXRTUitPbHU1SkdxMnpKc3pYajZ2WXBEd1dJTE9pcDNXM3ZwNjFWa1RadkExSjVMVDFaSW92U05aZW8zNmFzOEhNcnFuVHhJaW8rWm5UeXlISkp1a2phbUpmTzVINHVsNlZVVzFwSXBpeXdVRnBCcXZIZzE5c2F0SDNTeldrVVJlR3QyclJ6ZjVJdmFTbmlPdUZyZjdEY0hGTkxtMWxNY2NONk12TmxmbisxS1JhM0lvenB5N1Ewcm5USkxGalFGNjRlRUtYSDBTZXBMcTlDZnZkR3BwSEYyVkZ6QjhJLzZhbjJJd3BIb0pjVFpOdmg5WTlNNlhQa2lweXJMalQzalRTVHhZejhiVkpIV0t4ZUZzQmFjaERzNHN5S09RNXlyU1B5ckZtdFdVZWJYenZUNU05OVdPemg1dTlUbHhhUVM1RllpeDRTdzRTalZNMGxrSFpDMGtEVTVtT3B4aEZyU1NRLzB6UEl2Rm9Dc0dNRnFxOENzbjFFRllhN1U2cHE1Z0x6L3FqeDJramI0NlFLRzZDODBYaDhUY2dZWVE5RTQ0ZVhxMHFxWmZYUGd5dUxvcWcrTkpKMytiNU5OY1BTSkl0cEFFRWVYbEdsV3JQcDlhSklHcnpZc0ZlSVJlajJ2a2lkWnFKZzJiQnRDYU9ITGFwZzBrNGJPalJsc0VmYTdrVG5PdXFXYSt0OUV5WVl5cTVIL2FNZFdySUFvRXdhNDQwVFNEY2ZObVgrY2hST2ZCRTUxNkRsUEJyM05KV1FTZXI3V3FvN3N6VExkUXdtWHhZY0E0aEZDRjJ5TlpuSUlmQjBsdjNZN2tYc2RTRWFDcDB4K1o1ZUxqQ3R4c0d0ckxJcEVDWHhGaW9QRXkzME9LdVUrbmZMS1QxcldSZlM1OVhuWnFMMjhqaGw1QkU2SG1uRWJYS3haeEE0ZE54Mk5kejUxVDVIMTZaNW1yRVBwc1ZML2xtWFcxZldqTytadVpaN0IxRHlBd0hzb1BCY2tOSGw0SUNjc1UwRVhtMUVWc1JlYWhtR1hNZlZqTy9WL3pUTTFZR0dBbXZTRVNnOEpVMmxqWlhvNjVsazlaSEZtb29Pbkl6ODIwVVdyUmZENXNYZ0tEQVlsVkVCVFVpUG5MZjNOYnBzMGF5NjBvUG5SYUtlNzZiWU9BQ3FBdmlZdGd1UENnY1FoeDlNd0pFRTRibGtYb3ZOdEhwbDUyck5Vb3V1NVFhMmUwMTYxeVhiN1FBVW9JSXVKdG9PUW9MbERIS2lRbW85YTVNMXBWZDc4anZuSXA4amt2Tm5OV2VyTVpwbjI0QlRnWDBDcHhRU3RUVGc1OC9OUHpJK2t5MXhlYnFscXhTODNrVVgwbXQ5ZW0yb0JEQ29kZ2VFajBBNUtDSWJYTDJ5dHJHdCtveERkV1plSG1xS25LekpoZDVjem8zTDh4VmdUQVB3bVRKdEZZcERySUVEK2xtcHR6VzVaRzZuYVNObG5ybXBwcWYwTnYrdjlKeTNyaXhNRCtEd0RjTGp6Z1BRYnVXQzR6d3ZVeDNaMUgwTUpzZFVwTFJNYnJXWG5TWGFJRVd0Y202bXRmWE1UWUZPRGk0Z0Jxa1pMSW5KWStGVWl0T2QrMHpPY0lMcmthM1QzMHJmSmozaXRhYWlLc2FGeE5RQ1RKbk5iMHNUMHRhZ3g2RXlSdDZzU1JSWlZxNngwb2wxMmdjS1V2NFFpd1hRb0IySzYwaENKclBLWktKYTNlcDNneXQzczRVbGs2NXBPWWxaamlEVldrd296TDVidzNsNWwvVm9pWk5oRkxCc0lTZm5EdzBOSmVGYXB2SytDT2Zab0s2a25hZDUxRWRlNXhxTFc5R1h4N0VoQU41YWkwMXBCd2wvdTNENmkzOGlaTEh4TnFHd3M3MW1jcTJqUFdNSnRmeVh4dWJrSnNGMXhNTkJ0WTFRaklCeENIMThzV2RhNUk0enJOcnBUanNVYk1rVHROODQ0NnQ4V24wWml4TVRDRjlKeDVDTEd4bzBVMmxIcmtqZGZXTlRwTldUYTZpTHZrazl3ai9OZW5Ma0ZaRjROeVkyQ3lnVFFUV1BlVG5yNmVhNnRSRjEzRlJxbWFYbG1hbDJjSUVXSWFSUEdmdjgzY3pPaXdpQTNMQzZNRXYvVGpVSXphM21keVdkVmpJOE1oWkNTUjdITjBLK25zbVJoN2JMVXNzNk15Q1J0NFBoSUhYT1RtY25VMDlsVjkxNmpMVjN4ODUybnlJM041RTFkeU5LTHBwcWFpNWtscXd0QndRY3h4Ukp5RUpuem9iMTZKWVNUWnJoU2xQT2FUbWRLdmU2Tk5vcjBlT3R0VVJ5K3JFd1R1bXlqVmxpYnBsODZzaG1yMVhLaWlrdlB6SlhKRzY2T05YV3B1K3FqRlBtNUZrRTBEOGs0b2dvM3pPbEJjcjBrUzR1cUZLOUdIaXVYTFM4eTlsd2JQMzYwTjlKSFZob0ZCUkFORGpvYlB6VjdyM3A4MW9nd3VKenI1dVBhdXEvL296VmFiQlhSM2t6RmpZSmNmSnNUYU9qM1gzS3JsakhQUTluSXRPT2IwMnF0THl5YWZOcFpiNWs5YXNtT1g5b0M4cks1bEgvNDJKN2UxODdtYTBXYlhmSXg5MkxnM1NEZ3BLZzFGSEZXUGF0OUVzMVk4dEZTYzA1VnMyTk55Q1Q2Vm4yQk1COUJVYTU3ZnBjZENwKzZ2YkplUE4vbWp4dTZGUDR4NW1yT0VLaUZiajB2WnpGWElHQ2NHekQ4VWc3ajQzOUtoUDd6bW1PdkxWWmVUcHN4MXc5c3Ewd3h3VmNXbU5JbitrdXF1aS9NellrRjRqWm1wcGZUbXFRdE1vdDdhWVJVWW16aCtGNy9Ub2YzdVlYcGw5Qkg2VGxmdXJGa0kydjZoOEx6ZlNEdE5LTVBTZXdpYmxsNnNVakpkekY3a1VqRG1mY3BOVzA2V3BhWk0wK2lPUkJxeEVIUjV5U2toWWt2bHFPeDNsTGRqNE1Wb3M1S1VobnBMZlBxL1NSMm1YTWV2VXJVdjY5RmxncEpzN2ZIcHA1K1dzc3hSbW5KYWk3YzdSYUtpWnovMVpMdWtZK3prRDB2NVA3L1Q2WHBHRVdtTEVLSm9uSURzb0xpczFlT2EyZXR0dFFuSDZaZk0zS2lMVzBPcFU5cGVyZ1BSc2cvRVpaU0pIMTFwbnpUVjVRanE2NTQ4OWlpdkkvRnZST3JKSFdzTnc1RFJKdzBtYU5pUUxZN3lqZDFsV3pvcFd2SFZxemowdkdReTVsY3FyMVBjckJpckJwK2lzbHZiaGNORGFjeW9pbzV5YXNPN0piTlBndk9Xck50NTAxRXB2L0lwczFlcXVsTVdHc1FQTlNIaWtOS2I2cHBmZjFrakM4MnVkRDZYT2haaWJvZVVmR2I5NXNkQktKbE5LeFV6bjc2SDlhOTFrVkdLajNBcE9OclFrdW1WUUhmTmpKMGxaM2lIKzNDMWltNmhOdzBtNmxmTTZHNmhCcTRpVWEzbWxhSW92eTA1NXpZdE1OMGdXUjdkcHo1MEY0YlV5UmZTWHExeVBIUGFmTmNpbjZDV0t2d3hLZFBVbWFMenF2QTJvRm0xNVhLQ1VsMitwMUVrV2NLVnFWdjE1bnRFOUlRbXpKcW1kWlVKY25ncnpLZFpLZk9tRWxuZnNJNmd1eS84YStQRDRKWnVEWTNNK3g1eVpWcnpSd25rbHY4ektqVjUwR1ZsNXVvM0hkUnFDODJDS3AzdWNhWC8ra2txeENWVzd0R2g4YmN2SWZmclVQNmt6Um1YVmFGR3QzaHAzbnlyVVVYaTAvUys4Nzd6Y215RXdKWTlsalEyc21lbHByNWorNGs5c2JMbXQ1MHZXU3o3RksrdlRIVjloTE9QUFJ6RFNaNDlOSlJqejA4dVpJdk5qSm9oT2JrRVNPZDlKTE5wZEtweVVFc1dEWWN0RTZ1ZzA2VkVDOG9DT0NyWU13OXR1WEtjNmQ0aHNtWjNzOUxTOUdGWXF5WlpJMDg2V3FaS0tWL2JMa0ZGa2F5OFdOdDlJUm0rVzZTT0NXTFROTnlWYVh6cXRxL3VQcUV3bGkyZnBlbC9MTXhwSExyRFUrVko2azUyOFNZK2tZVmFIcWNjZjZnaWJvdkhCc2hrSmtPR0lEeWFxNVRFczVwRkc5bEFhY2lndENOTFBLc3cva3RXN1FjM3BkN1ROWGdtSURmUWFManpzUUl2WEtpeWpkTlNSY3ZOdEh6ejFIdW5zYVo3L0pIUHM4YlRVTzdUM3RtU1JwSk5nbEVtSWNSRlVXcG5KdzljeEtUWVcwaXExS2xjbnR6U1gzb3IxamROeWVFc2VIcFRvU0JlV1hLc3FOYmx0SlhUZldwL2tjdG5tNjh3WXEzRzBjdjRyaFBSeVQvM3U4Tm1USGZMTHJWRXZTekxSTnhwZVBGanl3d1hTNnhBbnArbXNnY1FOMDhqbTBzRmhoVFVSK3pxOG12aWRGanBzcHRTYUloS2VLdXJNTlVmVDVKSFhScHFLcDdOeUtnZ2FzMUw2bjl6L1kwd3FNbkhOR1Jvb0lrbnhQUFlmS3NYSWhIb3A2MXNYZVVab3lLYlhlb0x3eXpaS3NRblRVcEdtRm5yWnZjWnAwYURTV2RONmxwL05ObFhtUHZZOUJWdEpacVowdzJsVDJ0MCtJSXBabldLVjlMLy82Q0w4WXhOeW1kTTQwdnpNd0lIc0xFaEhDZjdCVzFBcjZlbEorZG1jek9ZcXl6c3hhTHpuYWFNenZwdExPYXZKZGhKMWF0SVBJR1hTeFNGNWFMNTByYTN0YkJGT2xXTDRyV2M4MnV2U1I4UUlzNFJPYWpMMk9najdCQWJaTkE5WTEwOUxaNmRac3JhbytRZ1l0T1pReHpaVlhSbjNNVmtlZFpwV0RrdXNxZmtEcWZXY2dvM1Mwa2xXU04xMDFhU2tWeU92cUVDTDBvNWRhTGFXSVpwYUFsWDFubUZHdWZDeUpzME1XV2wxUFdnYlZrdzR2RnJ4OEt1SklsWDJnSFJRUm55TXFPbFIwUDdjaG10Ym1rVVd0cUI2MXdvM2RwSFh1ajIxWHg4dlhhUU9Cd2FISkxwZm1aZjRUTEpZcElnT3VpdE5WR2tLYnlSZ2c4a2l6V1BSZW4zeVNPRUdMTkRwSTBuMGxod0pVRGxhbkRaL2Q0SSs3cTFhSnJrZFJ6WHJNekt4alhzNDRhNldTMC9tYS9YTnNwSXFmbXdQRlhCYi9tNlN2S0UwUFJHeWJsa2FjYkszck1Vck51SDlTbzJxMVdWYWMrTEJMQk5QV01yRUt3bU5rZWlkS3lnazcvK1Nzc2VhdVlmVFgwWW1iQzFhZnA1c3F3WWFJTld0bzlsOFZDMUpBb2ZsL056ZTVwWFFaLzdyUFBxdERSNk11Q1hrZFdvbG9lY2UvbUtNU1J6Wm9VZVZFS2FBRXVLZTZaaFZ2N0Zza2xZK3JPUzMxU1RyY2tpMFJESnd6SGJHblZhZ2RjYU5pWEtRMHJFdmJ6M3pOak9vNDdRM3Y5ZzA1SWRqVUZrMjRYdEZMVXpwUVF4OVArYTM2Y3VCQWRiZXhQNmttTWFDdGl6VGtUdEMxdGJQc29IaDQ2aGtoOGZwcU5QaWN4clZZTTFhMXNiOUsxSFp0RjFyZFhpd0hpRFZ5YU15TzZhNUpCSFZqd3VrMlVUV0VJM29oTFE5MFp1T3VpaGFYd3R6R3dSVHFHUHRaVWI4YnRaNDVKSXhtMUhLTlo0ankzOHZTQ3NLV05GRkVHdC9UalRVbUdEQ3JTVFdQUXJGdEJyY05CZW92czUrbGZYcUt2WnVJTVdmV09acGxlblNZOXRpVXZxUmJxdGhVOFNGTTN0YUxDRlhyWWRGZGpJTVV1VldTUk9kWWhtVUQzMTg1eGlKVm1iYTN1YmtkT1hKZXRUNXNKZVVJTWdWRlhRUGF0N2RDamM3VEpGMlBZUnhac3B0alZSSDlSaUxycmhIR3pWaFBDZVREVkliUFlqMVBpeTlMNG5NNGd4YmsxdDBtck1PZk5qSzBqczAzeVhtdzlCc1h2SlpyZktSK25JSG5kLy90d3lhYjhvbFNxMVlpejZyemx5K0xMQjRGalJDcGdzbGJVNDczTUwxekZHWXZOaExmTGtpODJqT240Myt4Y1FjbWZ4c25LMFZDdTdZbnRWblZRd2kraWl0Y0xXWDRFa3EyTHdhZG8vMWFYVXY1ZVdrVVZhaWljaFNHejFxVHA1L2x5QzV5MTc2VmFzNmNlb3pTWC9JNEpJdFBvcENQb3QrcXRSaVJqMWZZckVWTFM3V2xXeWdyV2g4MXBFR0xCcTB6VDY5cnlTT294QkxWb0loaWNLUjVyV0pKck9wNlJBcERsc1VMOHU1VjF6VEh0RlBsNnpEaTZ5V3JqTnJUTS9WN0JKaDZPRlhMV3NhM1pvMG5ScGVoSm1temNoTUdXMU9aTzYxWmZESzB3WnEwUnJuUHBSODhpOWl3WFVlYzZYRHpWQjdSK3p5ZE05Y0dXTVpaeHVPbExLT2ExdWxXUkJaTjlLaDJucll0QlpqaUJWZ1hvTjVZTlFndHcyZFNjdythZHE4NWRwdFNIaWF6eHRuYVo2ckZZSmF0Y29uS2RKemRNbVpmN0NrUWxzRUp5aHpvWEtTLys5RElOcWpIZ3hGclBGUnE5UThQcllnWlkvdUpQcDBqQ3I2Uy9xeTUzYVhuT1ZtdzVMSUlTa3BDQ1dUelcvZHplN2tqckViQkgxOXN6bmV1LzUxdWE3dGhmclRLekV2aWVaNGd4WkNIM0tveWdpazNISGJ5ODVveGhscDBqenNkS3FCbUJCbTV4MnJkS2REYk5MQnVvSnQ4VnpHTWpWdityS0JHNHZGaitTUVFub2Y2RmpDYkVXVzEzbDA1cTJxclY4djVpYkFUZ05nS0JBRnRZK0hRY0RnMFdwQnJzb3pzWDV5ekhNVFp4MHVQcHBlWUwwWDlocDZKcHZYdXVTOU1zQi9BREZBTXNHRWhLaEV3SjhJYUF0S05lMFI4c3RxRFZtSTBlbGZlT1RpZFJ2MHRrbDltcUgxT21KbnJxdzJBaVlJTUc4SmkyaVZSbVFLcVQ1TEUwb2ZKajUwRVh1SEl4V3BOYjRvdjRHUGtRSXZMZkQwUHFNellEUUFmQVhCT0FYeThLaUUzTWJveTVRcC8vTXcyNXhxSnp6bjhpaXpmRlUvMkFnWVRqOEdxeXl5eVNaTlhybFI4WkFpOXlnYjZ6UjczaFRVdk5QaXdKMEV1SElUamtEaHNhVWtTbnZYMDI1eTVIMm1XR1p2TmE3ZGFDOUxGdmplaS9JcE14Wngwb1ZsS2E5clM4bUlNMFJld2lpOGVRUXdYZFRJbG1MZWQ2WHV1U1NMUE5sQ1laWDNjdUM4cXNzZFI3ZmtsWW00RFp3TEdXZXR1UlNIL3VWYjIrTy9tRnphS1dHamNkTTZkMVczalVVbituMW9zUnowa2xqcjVXeENWWmJFL05relhMemVSbFIyUU9WaGNYMGtrRjVLQzlXQi9CS1BnMGRHNVdnY2ZHbVZGS1hUR2tVK1ZZSTNXRmlDeG8ybmZUMUNMdm1JdE1kRkk3NE85Vk0yQjlTTFJLSDVhcFRUZTNlbXk1bTVpTkZtdzJ1L3QwMVJGUG00eTlPbzJZOFdFSUpZdVBHWldrSTBDM1JuUzFOQnRNMUNCTnRvckNPT2F2TmlpL216c3hHWG5OMDh4TmlRRW9FVk5ZMHdOaW5HeXpPOWEzVG01Zk15NmJPYUZxVVN0czZlc3g3SFJsT1lyejFlWWkxZzJPT1E0N2hYMXdyQi9XK1pYQXg5MGUySHBkMTVzNDJabGxpTVhDNkVwVE5VS0NzK2ZwZkM4ZzRpcTROZEw2ak1iQkxWMVI2Sm1hc21FOFZKaUV1MW1PKytuTmg5WEswbEowSlJTNzFTSVZZKzk0SGRxQlpzanhBN3QzeTRrb2hwSkc2YlNSMCtqVXM1OEdHV2ZVVkdSbk1JM1dGNFVBYXg5RTZrQ3hWZlBuZDVWazZWQ09yMEtGemxIU1JPaXdhY3M3emtsejRNejdFd0pkcWczQ2dxazlhbFQ5T2x1bWJYWGhkZHk0WGJabVIycVArcXpROEh1aHFsTTVkR0p6ZTR2Umo1MStXcTlEdmtrOW5KQ0dEZExaM0lwZkY0S2JjR2l5YmxFajFGVzV4NzV5VTZqTVhtcER2eDdmcDVpcHZHbkd2U1craUoxMEZFOGdBbEd1UWNhVThOLytTVjZ2dEFmUEtuYmpYMDBTKzJuOW4xRDBQZ3pGcUN6U3lXMHBUa0VsZmxyelp1bDgwNnQyNXMyaTAwdk0zQVRSR3NmUnBqaXcycDV6WC9mUVNNcXptcnpYbmRyTlZtekdPaXZNZTVDZmtZWGpmbERkTC8xcFpoS3l4bEttdy8xdVNySll1anBPNzRmRnBCMUNBcFI1UlI3YWZLVUpxUGF1RE15Nng1YSthM0hjaXJVcjdPNlBmS045d2xJVWRMcVVjcEV2Uy9iMlBvamw4V1R5QXJDeVRtdjZqSHh5ODJrTzhhYTgxOHg3V0xneEhGdFo4TjZGbHp1M09hU1JhSndpWStNdVJoVjdwdFZSL0dFM0FPYVNTUFJDRUdYYjRWV28xa3JtaVdid2FSOVdZT0VzMmFmK3Zkb3JuUkJsMWpRZWc0OTQ2a0VKQmoyS3g1V3lJSTIrNW9xa3JETkpITU10STRJSngrUzVZamhWd3dYRmtJc0F2eFdCSm00OE9Cd1NRMVZzb0wzNUo3akQ0N0dsYWpGMVpxSlNKMytjMkNSWXdxM01LbWowckxCMExpdFEvL0lmc1lTVlp5Q1NLZVBEUnJuRW5saEpWaWxwMG9VbWdjeGNFWHpYRXZzc29nTXowV3JHOUp5c3dreWE4RWZ2bm9TK3V0Wm1IekZtdFQ2cHFuc0pnTi81emVPTUdtcHIrbEtzYy9uRXJMRmZLaEJhZ2F3cEZac3Y3VEVrazJGa3JVTis3cmNMaGFtQ1NyRFNoN29pcGxOZW5UbG1mcHVFeUQ3cExVMzBsNTBSb3VaRVNxMnlyVmlzZk9jTlphYTZhM3pUMXQwekhpK1BOU1hPN0dLY3ZSZVJoV3E2R1ZvSTZlMmx5WGlsYXNFNERGT3BSUVRCckRHekRmQjNpYThrYnJXY04wbytNNG8wamdZZVBhWEt6TDVYblJSSlJKRmdKeUNJYURtTkQ3Q3BZbVRkMFBEaXkvcFpKR3VTN2lOMTVGelk2enRQTXVzMDFBYXk2ZDNxTjcxczB2YllPNEJYZ1hRWDVJQ3hRV0c1cTJ1ZVZVUVp2Nk13NXp0N0VLOE16MG56TUdPSVB0UkpxYVdqenlLUy90cXlFRm9MMGhvSVlyeVNubHNyVG5zYnZ6UHVZemZ2UkxLc1hxcGRnS1B3SVF3TkUxQVFDZ3NRV2RxV3hwOHRiTGZ6RlpscE5PRUp6MnhvTHplTi8rODJBVmdIVUNMallOa2t3cHJEczRTcmMrYUo0dHFjdmRXbW1HV0Z2U2s1OFRwbTJ4djMvNzJCVEtBWll2QUFBQytDQkloUlVwYzd6ODVTczBpNzJFdFhqa1ZQRGFFR0xOVFJDeWV2cmZCbVZmWUlzRjRIa2JDQ2dWVVdra2ZNejRsclorbXpUWlpQYWkvdDl4ODNTY1huUllGR2VCZ3NKalpDUXRhY28ydEtBNHhWQ1ZtS2MrYjdVMnprdTl1YVhndkUyYWdmNngxUGt6K1g5Z3hLSUxFU0NqcWx5V25kU1UwdDFySTRMKytOWVFya2VTZndWazJhRXZkVG9NK1hvQTd2WUI4dWJNckhzUGRwMlhHV3lEbHl1U1NMUG1ueDkzeVlXckZwZmQ4Nkg4dzYwQ3lROXFQSFZwWmZmT3BiLzdVeVlwVHgzWldaWXlqRW5hamUvMk5jc0lqbDlpV1FRWEQwbG9FOG8ydzBsckd2cHYwTmY5NFovWTBqZzFtcGlabXBmRCs3UmJCYW5qdTNsa0VrTk8vbHhSMDZTU2JweS9MNkxSbGtTL2ZRRkp2MHl6VnlMeFlpQXZ4SW9rZXhJVkJ0eHR1bU5DMEhTVEpHMzh5azlPTE8wbUdGNXMwMVNwMFV4L01leHNEQkVTWnB3aktDdFJoNXpjZTJaenBiek1ydmNiUjBJTGJvWEYxTGFmK3JWalFOM055STBjSTFITGs2UExaYnZ1Wmg3cmFhaG95OFR6WlZvek56a3NqdkRzdXJCWkJ3SzVKUnBBRjBreG83NlVQMDlORWsza285WnJSSXRja1ZXY3RHS3FUWGR0c0J1SGorMHFURXJFRHA3MmxXOVZwRkpqM09uVitlT1RhS1BWbHBXd3ZBdmlvOGJsRnVSUWs3NmNleUpia2lTUzlXdEg5ZUhUZFROQmRqTFJpWUhURFROVlltRmJVL0pWUDVCdmZNZDJqTmk1Sm9VOU1kN3A1bnExZUhrMVRvekNPYkMwVkxhS2FoTGxSNU5XZVBvVG1QZ2lvdkYxSzBYbXZkK1k5bTE0aDlabGhZUE5XTm00YlhNSDBxZDFGSDFjeDVPeHExdmd6N3BISTAvKzFJeG9KSkZHZzRpV3RmSHkzdEk0blVyRnBSTU5meTJpakVUWnUralZMQ1NyTkxZTEd5TlNOSjFteXFwMnhZejVsTFJLSGZSZjJsSDg2dDdEbEFoRW9xNGRBdEd4NWhlcHpKTHRNL1JZOGVPbmludWxWWmY2Qmg3RzFEazE0YlVmUExzNWVTS1Zhc0VFSFMxSEVDblNoWTk1bDV4aWJDQ2l0b3BiNXBXcHNmRUxVSlhQZlQvWlFKN0NCclJFVlc4ZWx2bnVRakxqK1ZaM3RhaDNTNXpsN21mYWFCcHN4eWFobjVaaWJFNHRCcktkMHJEZVJXVXIxbG42TkRXVVlteEZNTG53dFBOV1hnek5qMy8rNlM4djJEWUxVQTZVeHYzRW9ibjArRXZMNmJBeHEybkhxZmwyT0dEYlFUVUd2cWlzNG5SZURFV2tEa0hBa0hsQWdxTHhieDgzVFQxdGFacWJscVloUng2U0QrWWt4eUtiYWNoNnlSNzVneDc0ZkZFVUlnZmxKQkpxM3BJSlRXODNLT2cvSnRuTFFMMXZlWE8razc1dGp3Yjl6RVRoSzNvSC92YWtwUDA2UzlaaG4yMU5OMGFCRStWbU9yQkpOblFjczE2Yi83RVFyWEFpUk9PZXZyYStVMjhsYk5vSExHVjQ2SkwvVStxSmZmUi9xK1FsY1ZoUTBHdFlycVUzekxheTlLeU9TL3Mya2gxdTVyWVV0V1owZWRObFE2SHlaWm5RTk41UXQ5SlZUSnFzYmRRMFpGTWFWVnRWNW1hdkl6VXY5aXNQT2Y0L2pVTlErSm1PL3RNeGJSVEtFNUp0UGt6RndkMVBwbVgreGNQaVFlUVJIc2YyS0d4TUhQWHBidVlqVEtycmJCcVdwcDA1YjRJb2J2WjZqVFc0OUw1MEYrWWtqajJVQkppVU55YUszWWIzT2ZNTmxRdlJKV3BsamFVdG5MU2JHYVpteFNmNXJ0T1c5ZHJhTlVQOFJGQ0U0ZWFkdTlqWHFScG96U3JsMzVscmN2TnpXMmI1MGFrVjZMQkpwaHlGNHltUG9OUzBMTHMwNXBOcG1ETTJrc2ZaT2FkUWdUWnFZMm44ZjN5UmVSaTJ4d09uS0l6SStCNmNnM241c1ArNkhJcHRCUlBlSlVabzFXa3RlbmRCVGViRmJSWDM4YWJLRWFWV2QvM0pQWVN3MXdXZEJBYW5ON1ZlWlhKaXBNMVloR1VVNXFrbnJCVjFhM2pZMStuaDV1YjhvM0xoNjFrY1hBemw5OHp6UGZLeVg2QWdhc1pmNWUybDZpUGtzWFFiTERjTEVtbkpUUFFmenFUVytGakgzUGtlZ3V6K1RIdm0xRXZSenBpclcxam1aVG5yRmM5ODlxRlpmMGtmc1pGSjZrZnpPOUdadlQxNk43eWg5TEttblMzU2JUNWlkR2NSenBmN1hoazA1Mm43akQybFBqcjFScDNzU2hNUktqZFpCSHdpZytHOXpLYlpSVE5QMGR1L0lvdHd6NWJNVEw1TVZZUzJzY1BuZmp4UkpaUnVwN2U1anBKSFZaME9PVDZaNmkyb0sxbDFEMmt2dEtocHAyVzJhMzVlckRROW9UTWdmTXhocHIvMUVIYVdyaTFEc1dYSy9QamNpbXowY3dkOVRvSmZZZXNwb2pXeER1cE5XRHVnZG1ramZaVmVsQ0RseFQ0czhkakp4dlZqUlBCWkMxbGhZZENSMGFzYzF6MnpjcmlJeTZ5OXpFUDlqdjZLcHFzM0tDQTkzb3RRZEQ1KzdWNURrbFpqL2NHeWE5R0pNemFPUkwrMW5RalU4Ukw3TWFyK3VtVlA1aXJ4cHI0eHF2dUVYMWpmYWh5UGg3WEtJMGpvblRvZkJITjgzSnZPUkdGV2lpTkxla2lzWWUxRkVCdENqNk9QWE1tUDh2UmNMWEU1YVBqVFozYSthUFk3a1ZhSXZrQlR0MzNTSDFNdlNma00ydHlTYmVOWTFWdS9KZmVsUTNWbXJ5NU1WdmFMQmFQMUdHeE5RMmFZYWtXeTYxR0tMdXE4TStQcE9YMzBZOTdvSEs5TE5JcG0rSmduS0xPemhaTW1QTEY1dEVuM1pmUUhxZjYraWpNUGJkRDdKclNjVDNreTZ5bkM4YURScTBVQlU1MHY3YVVKKzFuamVTcUVjNXZML2VLdnVVa1plaHBaSmxsaDRLd3BtangrRXdTMDJzL2ZLMXNXek1NenpGV0dpM1Fsa2tIL1VSU3JCaUxHY2hweHJkVmpZTm85SlE0VWhOUU9ZUFJMMUZyUzN6U09Kc2RPUVhPVUgwTXN6QVFNMmVhMVBVZWcvMWFJZTQwL01LQmNvZ2RsN3o1VVp2Qkd2ZlZlRlZDazdITFFmSkhGb3NrTEc1SHB6Um1ZM2Y3Q0NqS21UVWNXS3FaSlhzUVF6SjFFa3Y5V05JTE5qdG43OGlpMGlxV21KNkM1SmF0WlpCWTFKeUJUbkdzOVpjRnR5U3J6VVRXcXg1czNVa2kvdHVBbWxlT3JnMkJMNGZFTFFuY1lmTXRJVXhqWWs1SWw5elZJcGVlckpFdlJacVFjdTAwR2dza25NYWZrR1E5ZW02R2g1S1hwcVpabWRHOThxZWQ4dEFwcWt3NXpoQW14b1ZpWWNIWDBQeTRWT0x1U2U1MGtVR0pzN0V5Znd6SDFOYVNlL2xCNDNWcHkxeVJ5TU9yN0JLRDBaTm8rZ1ZkOVN2bkhacEhNaEF1dE5GLzNPNnRHWXRkVEt0V2tRT1BFazhiR215MXF0Wk9ZbXBNOXU5WFBTT1BlSVpmVnBWQ1QwVXJCc0RhR0RMV3Rjb29vM3ZhcGs1OFNSU0lFV2ljajFla1JkOVdUbnRiSXpDNDBtSnNSRnVXckNFU0hwdG4vUzRnSDVmTXdaa3ZOOUdnME55QjYzeVlvdXUvMG1FTFVXcWFjeFdXUVg1RlZxZENRc2xrbXFKYVZmV2Q1ZkY0RmZMT3kxeGZtVWsrbWtyNm9GVkZpazRMMFRXbkhGSGFOV25TbzFzYmtkV2l1SjA2V2IyYWpGVnFwdGpaeXhGb1RKb09RK3Avbk9hNWR2OGZOaVZaTVZuWFdyVHAzc3FXT0hUK1BPeWFoeXNTdWluV01POTEwb1Z4cVh5NWRKaWN6THZTdUM5WmRFWHNOUllnTmpNck9ISGFXOTgwZ2cxc3dSVmF4UzAybnBEaEl5TFNXZDRqU1dKUFljcndyaEtSNW85QjNsV2V0bVdzalhhTUtLTmFjbXZMWjFaMUNCRzluSXJRNjJ6REd0WFl5d29JaDNPNmpSOXh2YXZONTN5RW1ZMFdhc1JNK1NuZm1mNzdYT1ZVb2ptVlZpRFZoc3RNZ1RTekN0UzdSenNtMmE2MW1aMVhqVUZFL3ovWnluT1FoYlY3M2hJb0pYMDRPSlVidjkwbnpPbXp6aHBENlVpczV0ajNIazlIT1FyU1ptYkNnMXVucGxCWUpGbmM1L2MxcGVyRFJwOFJYT2N2UVg1ajJVWHBtVUUxdW9pbFdaSTExWWtZaUYzVUZnckg4VjFQNXljcjlFa3ZpeHBOQVpPb2VUSTF2WXJGdWdlVWFjVFBqUXlWZjZkcDdoak9pd2JCY2FXT3c2Y0VGeWN6T2g5UFFrNGptbGZaMlBMR3lwM3lzejN3U3hhaVNSTkxITG5OYVNWSkpWaTRHMFd0L0djeGZPMDZOS3Jac2RVRzVVeHpwM1lZOE16ZEpGVnBVN0haSkJWcGlUSHNWRlE4U1NtVTFrMGo5MVQxclZXWjlnU2JVRzExbnFGSGFYMCtYenpNdmo2TEZLVGF5LzVjdXRVbVcyQ1dFVkpqS1RtcitIc3VrRDMxby9hUmN4RnFETGZQU09qUzBZVmM4NktpVXU5WmlyS2hZUG9uNGJGa2RnMmNkcG1VazVRM2FaWG1LdUkzV2FrbXJCVjY1VmgvclMrak1YUzEvdlo4b1JRK3JDa3hmbkw3WTY1UGV0OVBieVBxc3Y1YzZaLzNrdkZ5Y2x6YThUWXVGR0ZtYzJqeXg1UmJkT0p4bzNhdURMck5OVDB0NjkwRm1KdVIwWlNSMFZEL1lPUVlCRENNSWtpcFFiUDAvTmJIUU1OVnA3alB1QjZWb2RKZWpncStacThGblNVbGY3NHF3ZWdOTVdBdmhpV1NXQzJWU1JsYmN2cm1zdmtjV2VubEJ2ZE9WZVNUYWE1Q3gzazR2Sko3QUdSQVQ4Q0JDNEdzS1NBSDRxUWlSZ3J6a0Z5SkQzVGtDOVhqZU5ONjZWV1N6RnltY1BINGRtcHpaM3pqSEk2c0Eyd1F3SVFEWUNaSUE0SVFvaDRuQ1JWUnEzTElDckN1YlBNc1ZaWjMzaDg2YTBrZFh4bGM5L1crakZLellBSEFFQkI3RWd2S0F3QldLaTBWZk5uTUh5Qi9VVVFsV21PTXVMMXFMdVpadFVqUmlxTHpxczE2MGRScXNrVldCY0RRaUJ4WUpVcDB1UVN6R3FJTG5MYk1tUEpkbG5aSkFVMWxxeVlZSUM3MUhocWRHUytsc1dBZ29FMkJNODRTRGJQbTZWemtpYlhycUNMcnBWMXcxZjhJYWVSMCtBZ2F2SE5PTHcrVEZXQ0FDOUFhRWF4cVJ2b0xHdE1MYktzRWMyM1ZKMmsxNjdPZjBiSEJ5WER2YVU4NUk1M3lqZVUwOXRoYmtVbzNQVjVmdldyN1MweStLc1JqVGxFV3RUV1ArVnBaZUo1bXFVclRHZTFMVDIwUk0wYUNYMWMrSm5WamlQMkdPUWFwbWM1c292bDZIV3JSSkZteWVOblFjY3U4TzV2eU9iVm5nZmpUdTBxSlAyS0pIZDU4VnFaUkd1MmlQZXVPamJjdXVTVFp3UzZsOEQ2ODRZTzBXS0FsdEdpYkVCY05EeURZclRMVDZ6WmdqYkNyTFNObU5NRmx0bnlyTGk4a3MyZHFSaXN6Nm9NU1g1Sk5pTUMvTEFlVCs0bVFENmpKeTk1VVV6bnhkR3RPckRwcW43Q0wyYWliVVF2bnZiekhmTnNCMEVpaTBTcnBsUHF5cFN4QVdZcTgwOU9zam8zc2RRU1FmTlBpMkM1Wlk3T0M4SmJDdzNwVktOYjU3NHVUcVJuVXY1cG1mZEl3YjlYalQ3SmtCcWFVeFdDYUYzMVErdXBsRmpDbFl1VU55OHVZUzFGeWtyWHFXT0paOW5Dc1dJUzNua0tIV2pPbC9IOHo4WXNzZFFUT2w4OWVraSttejJqYVQvbWVDT00yeWhNVmNWY1ZjZkgyS2FYeTNFTXFFbnM5Qk0zVFhHRHJhMVpxV282ZDVKSnNJeENMRUQrY1BFRFMwYW5yM21XenB0NUJENWx1NUpDczJPb2phTDZPWHBJL2JSWWRJTEpyRjE0YVhYbGw1c09PdEppNE9TL2Y0MGFWWmZCajJGeHFOTnI4bHF3dUZZK01vSUNGS1Z5bFV4azZsMGZ5WnJSWVFackg0MmpwMVdWNzAzbmV3U3BWTmdxR2lFUlNncGtIdzVuelpicE14eTgybk5CYTNPWEdiSmZ2a1FhczZNcE9YWDAySEFzYU5wdDdCdk4zZWRIMDZGeS9tS3QyU0p0em1INzZRVlUyRnNubFhyY25sMk5oTGtXRGZOL2JXUWpSOUZWTTZpTmxoWVBIRUROOUduTlY3REVXMlVtSjg1OVBRTHUwcSt5dyttelRFNXY5VHVnWHFWUFpVOVFuWFRYdTFZeGFNS3RpUnpmbDk4aUJOc0RsS3N2cVJvSC84dUY5NjdCWkhxYyt2T255WHJSWWFvSW9Jdmw3U1AyS21pczd6SlRFMEZFbGF5aUdkSkpTdFdHcHFaclpnYXkzMFk4MmdpZHBlMThFVTFhWlVoV095bktaUmVYb3lVb2V2bTFialUwRzRmTzY1Nnk4emE4YzJjdEd5WXJReUhIa3BYdlV2N1ZyVjlqWFBDWE9TTmw5V3ArTkk2ZlltRnc0VlNIMkpkc3FTWE8rYXZVc2ltME10dVVYSzZuU3I5N1MzbEZhU0ttb3hOajRyQzQ1YVdiTTZkQ3ZiOUQ1dElOQ2svU2tuSkpWbXdwNWVkdllkaFFDenM0MEkwa0UvU3E1Sm9ObkxXUmUxR21ucjNPUXpURTVtbXhtc245Tk5tQ0owZlJhZ2NGY3R4Mkgxdzc5ZFRCWk9pU2JST0tsZDE0Z2Mwdjh4VmRhU09kTjBpZU5mSlV5VnlaV1g5RWRXSElOcE5KTTQwczFRUmM2Y3ZKbk5ldWFNMFppNW9hRFh5eDI4NlZaMVcwOE5FRUdsVUR0OVJlWlY5cjZUVzl3aURqQ280dlU0K2RKTE5wQ0Z5RGNvSTI1MEVWV3hRTFhMME9YUy9KSEZyRlo2TXRUS3NVSi9kNmhWWitwV1NLck9Iam16VFVrR3NhWDc1dEk5cC9tSlVseXk4MjRPQUpVcWxJNE5JS0p3ckZLZG4xTHZIRGJYc2pWV2FYNnNXaUdxUi96WTZzMkZBTHlFYWtmT0p1dzlLU3E1VFl2NlJpNjJqTGhDOCtYdGtpbC9zNGVRSG8zVVZhWXFYd1N4WUdTRU1oNkxSbzRiRmFpYi91N2xHTGxwbGRqd2hrZGJMZExtY3hVM01OcWRFZk5raXF3Y0FaeGFDVmx4N2h0aEJJOHJMT1QweWRCbnZxeHBJcjM5dWtzdmthNkdOU1J4WXBXZ2MrUXNuczVKN0EvQU5jYkRZVTBORlFzV1UwVStqcEVpNW5rVE5Obmp4NlB4K25NNUZGOER3bEU1TGZOaXdDbkFONEVNMVE2UWJCTTROOVQvTXVIRjVlNUZUcldtd2ZUMG5wNTNZWFhvdm50UG5mdmllWnF3NEFBb0FaQlllUUtLQVRBNEkxMVdhbi8xdjVtWHlYcXhVbFNYazlLY3l5akpxZTE4TjVpYkZBQ0xBVUlZZ3JyZ1RCa050LzhVZG5KZFNZa3gxZm91RWpmbG9TdmNGYk5tcmlLYWsxc0xtYkMwQkF4TUI2UVlOZ3RoRUcyTmJXWDFEMlJsa3RXUG44M1FOSHNlMHg3RzJvZDZqVk5TeTgyVUFtUm9MMkhyUzhTNXI1bFo4YWMzbVl2VENCOHIvZTNtSXVLYTFUdHBWWmVMQ01VU0dnMlBFUVMybXBmenZBNE56VFdNMGw2YzR4Vndqa21yUUhuMFpaS3JKSXZlTm1kMGhEWWtLbFRVc2djVFNTUHh5dmh1UTBFZFdLK21qTW9JTHI3cS9tSmdRS3RDSmoxNnJUWVhrMFphd1VqenV0dXAvZTEvdkJjS2E4L0tkL1Y4OTF5UHlkUGpySW8welpQZEpIR29PZzU5SzlaWjlTUlJjb0p5ampqcWZKRTZoajcvUFJqSmRXaUtiQmNjNG1kemg1clMwK2k5UnEwd1NVK3JHZmtNbEhYelBvdkZvbTVIVGpteVJSWk1ncHcwMC9EZ3JHc3Y2WjZFUnVSZWJSVEdreG5uTFk1ZWt4TTNDQldmT1NhVWZ5OVoxa3cyUVBXZ2U0bW9kRFowdzd4TWZrY3c5MXk0K1lPM1Fib00vVGZHaDZYek9ubVBtYXRNV2NpT0UvaDVham9ValJwbnVicHVscmdkeVIwZTkwY2JwUjk0T1RvODAwUklGbnp1OXJvZlB0S2NqV1J4T0drWHVlK01ibmVTS2JHd2NRNkxBMDRhSmpiQ1o1MWFXNU9jM1FSUkZtcGl0SjhyWEs3ZzRiaXQwdC9ZaVNGcmZCMGhzODdjd3RjM2poWHEwNXo1SWwyYU9rNWZVTTFFYnZZaUJyb1NUT1NLdEt0bFdsazlEZnFNMWJSMlZ5OUlyWDhtRjNNcElvNnBaTVI3REVQQlU1cWg0OHhzamVPeS9uSnpsS0pKc2FjUEtKYVpWWVk3VlcyS1VGcm5WKzlwaUM4MmNvZW5TU0RKYWxsL1JqbXVibHpmUW43eWRMbTZUSDl5M1MvNm9teHJIc1hBYUN2clFiTTZkOTFWcnRiTWRGSXB2a1FJdEpLZldxWDFhZ2FvSnBMNFd1UFQ2My9OYkxmOUpFMjZmR25IUDhtS0VHcjFhbjFvdE1WSkptelBTZkoyblZIcFgzcGxwdW0wcDNOMEkyS1dIQllLcERjTGtzVFVudlRPU2w4dU0xYlJ1YzNLSHZYN2xSUVptbG92Y1JOTHplRm9UQ2d0cHc2ZDh3cjlPYWZiWlNQVHlYVytQU3RYSHpWeGxxK2JPRmpCdE5JZkhocElTYnRmTHNwTXJVdUlPbjdwSVpuTU5ndlY5TDQySnltVTFGNXNnQktDUVZqZlBsU1d0NTI1eWtuWlNaSS9GbFRUemh2Tkt3OUFsNUd5OFBWQ2tMRzI2WGFnVlRUTVdnR3NkYVdVVWJXWE9sN2puMFJ3NnhvZ3pVUGh0Q21hVlphV2Y5N0gyTkVQanFOWTlwaGxpb1BFRUVGb3JOWDBrMnl2TDh2YVJWbDJrMnBYazAvbk5veHhqSzdrL0kvU3JNWHlvKzNKVXRKSS9md2xDalM4bVowMk5yUzVOdVJiODNjeEtzV28wMDVOWnNUR213bkJ1Y2FUb2VwcVJ5MlMrdWdjK2lLcktvbndGbVRwL3Bkc1dtb1BTaEpkdGlOS0hBc3lLajB2eC9ybnkxczZiRy9ROE55bkw0L3NOSnlDaVNIZldXU1FSeFpZdG1pU2xsVXBPZkwxSC9WTmlrZFdJUnJVVjhSYzVxYmRJMU5XSmc2Y0s2ZW8yVVpRUzhvZWFNU1liTm10SHl5YS9qcVdoS3NpRDc2em1UNVJyVnk5V0NYRjNRR21ZMGF5aDhxWnJzZDlQT21TL214ODZKT1FudytOOTN6YkZFWlNiMW1JMHZxMmp3NEtpYUpaYUMvS2t4OGtyUG9pOXBMUDg1cHNxMVp3TlRUdFVtK3dpb2xHZnRQWXRtcDh5blB6Y2xKRjdHMW5IUDhIYWJhMU5LWmxKdTloVEFlZUp5MElSNGlIbkR6a05NcFNxdjcyVkg4dDY4dmZlemp0MzFxc0JnQllMQklKTndheXJlY2xPNkEzdXFoWk5hY3IxSnY5dDBJb3ZPZXV3U2FVRUNTSnAzVTNWbjAvb1pDdzBKOXpaU1BRa2pjcTZTS0xXR21RbWx0VW9qbVJoVmsyakkxT2FpbWttb2V2SVk4N3pXYlloV29UM1RicWJSaVpmVnBKbnFSanpuemVJUzNGbmhTY2dlMk12Um5TN2tmbTVVbWl2SGxZelh6YUpxUEc1UU5MckwvVmFBYnRFUWFHakxUeWNJS1BsS1Y5L0pGMlRXUElELzdaWk05V3FseExXbXcxYWVtaHBYdi9KanpZc1FRYWJPV1Z3MXZPL1hCMFA5ajZFSWpLaVI3NEkrclZpRlR4MXJiUkxOaXdPRXhFSWtNT0RYaUYrY24ydlEraUw0cm1GdkVMNTBramJnbWwrK3FpaGhGandhc0hpaTFHb1BVNjlWYm5Mb3ZKTFZyTmxxR2Ezd3Q4bDIrMDFNY25Lemx1YS9xK1YySlNmSGxEWEU2NkNTQ2IybitKMDZTT2JFUHlTZTZDV25yYStwTHJzZHh3eWRwRk1xK1NQMkRrTFdEU1VpUnEzSmVudGVUVXk5SkZWajZNSkhUKzFXakRERVdOSlpmK1hNRWJoakZpUnBNZ2cxYkEzSGtFMXE5QlNXS1ZKSjFYV2hqamQ4dFRSeUtYOFFmRjRlM1hVTktUdVk4TmJiUVBUVGwvajRkRHorck5EYkdTTVl2bk5PbmZPZk5HSlpxdUU5NmZER0V2RUNyYVVIRUprZGFMQlpwbVZaenZJd2xsNFpXclhjNGtqU01adnFOMVBoYkp2a3hOeGxiWnhWMGN2MHhXM1JGME5JZUlwLzBFVlhBOFBLbTF5V2JrTFJ4QlBJb2hndE9UaTdlcG02aVIxanE1V3JCU1BNR1czQTcrclRiZ2ZFZ3FRd1d5Y2tKS0xuYWRLMnlSUmM0OU02TkU1ZGpzNUh2YTl0cUJNVUpqcHh3cUxNY2hMNTFPVzFiVE1Lc3RSZjFULzlSRlFneFp5VTZ0S3NXbUNUTER6Y2NjNGNZTnEwdnlzaGR1TUdYbEVwTDlrckkzZTBUNVJmRmF0eU9iV0d4QW9PODZSYVVIdXF2VFFsY3NsK2RjaW1GUHBSVW10UmxudEtlZEdvNlZZTTFmVUJKaVJHWlFVR3g0MzF2NXJ1M0pYWEFqVFo4Y3gya0NTeGVjc2VqZFJDeFlFOW1HZXdoUUxDUGVGUitjdnJKUEZwRnFHbm9GV2ZRckdjK2JrTGFicTYya2NxeGJJUFdkTGdXbXdROUtkRUtOZHZwZ0ZYRm1vSHJPMURjNys2YXBtNkEwYjhzek16WlVKNHVseHhOemNodkQ2WEw2M0pGM3g0Znc3UjZjMFJSRnd3YjY0VUczVDRNOFFmYUNRZEN4OHVMSmlRYlczUmtvbnk1U1JoTm5qS2dhUjRSbnNsV0g4WXhmYWVOUGhjWnJiVERzSVluWjVKNWJpc21HL05iWEltMzJreHVldENNMXRqSndhaitPYTc2WlZxeVlkRUFjSFRsRFN2bDFhT2doR1lndGhFNVdybnVEVCtQdlVVWG1YekJKVitHUXQ1MHJJcUVHYkdTcHkyOG1KU2dpellPeTJxWjN6bGticFZtNWxDZk16T1lTMWFYSGZHcHJkVnQ4ck5Pa0dzZXplYTlLWHRtY3VoZzcyTzBiRmFJbDgzQ1hSbDR5dlJZc0JyWWRPN2lxMG1LMDhzcC9wa3pNM2pjbHZ1WG04YnFqSXhGbGlGb3ZMU05qaDNwY1ZwVEg5T21TYXlLYlRTUmFsaEVORityNnM3eVVXc2VTbDdURTN2SVlDUTVDY20wMCtaalNmTDIwUnhOeWRpYkpXZEhicHRKbzZvcDIvcTFaWVdIUzJuR2hlV3lVS3owa3FYUkl1eDBaWDBzM2svNnVVdkU2WWJaVVdvQ3BJODV5WlpuT3JkYUVsc3pOSTRtWHV0STFhZm1QK3ZRWG5mUlp1OG0xRTZQcXRBS0Mxek1vTERmcWFYelgvblZlSGViT2srTDVyNmlQRm5oT0lPUDBlNkhObUozemF5OUJMRmpmSDgzbXUzOXFRaHBta0xIeGFRdUgrdUI1aUNFS3hNbmJ1dlVXYW5vbHpKa2xxMGNOeXQvVzcreXdicFNlMlN4Q0k4aTJ0SzNzcGYxRW50dmFlK0ZITWZ6TTJCNHh6VHF4cC9zSmh4Yi9EU2dxelozcHU2Qzh1S0kvdlpxRGRPbHYxRXMza29sV2JIMGhvL1FQS0RhU1JzeHBub2FtdEdGV2xSNXovbGpIMmJQYStkN0R4SVRwRE1ZZUVaUE41ZXY5RGVSeXkyeUlhZjFFR2F2YzVMVHBXMTJteUVlREVMb1g2RWpPa2txdkxadTIxaWtuS1R6cFptbVpoOVdtY2xwM2IvcEl2WWJBNE1hZzFNWlc3ZWEwd3VGOXBMTExrZm5tL3p2WGd2SVFNM1M5R2gvc09CNFhFS2lTS0NXQzRhUWFyMUtsN1NMeUlMclNrczEvanNXdXoxQ2M1cStjNXRFazZDT3JJWlVFYTlRZEN6SnJIbndnZ1RQeTI2akViM2hyR3IwRDVZa1dJSHZOK3A2QzlSRjdvcUtja2pIQzdyWDZtRU90N21tWjd0N1NoaUVadGZUcGY1TCtpS3JPcW02dFVLMCtMUnkzRHpVQlM0K2p0T2lKODZWTjdZVnpmemsyelZGNTAyaXZTK1RkWEl2WWRBdm9GWm5kWnlpOUw2elgxcUVDcjY1U25MU2Y1TTFjb3BNYm1vUGt4V2l3cGd3cUJjbTFRb0k1N0pWU1h2cFdzaWl4OUJyRW84cjNaWlJROFV5MDdVOVQwWHE4VVNwclR4dlUxaGRUSnpxYWdZcFh2YzZ3c2NqRVN1UHZJd2l5d1dKSWZKekQ1cFh2bXduQXhpVmJQQncyaGtCNVZ2ajZXdm92NFphaUF5dGVxUUpKRm5Kbzk5YXJCUEFVSUxxeWdxVytWQkVwdTloQ2c5dW95dDgzT1RDeGU2NXpWM3htQjR6UHNCUXdHMENERGFTd05vWGhDR3lxUXFRK2Q1bmQvSW9NVlowWktzbXN2N1RPbzlITCtxd05jQUVJSTROd05yaFVhRWJtcWRQUTNjYy9RMGFsWmpUYnNhZldTclZCSEZER2JRM0hucnlUL0plSFdCUEFHQUFZSWxCTHJEdFkzeDRoWVhXNHBsektHNy9oelJOclUwMXViV3EybnZxSTg2ZE5nRmVBcVE2QVl4eE1OQXh4VWJPM25uTC8rV0lNV2FjWFRpSHo3aWlUMkFWb093b0VBeUpJQ2FncEtoMms5Ymo4MWZ6VE1hTE4wdGpHbzN1MloxSEs4ejdCRGtKQ05yR2tIQ3hhUjJYTDFrUDNvam5xKzB6ZXZIYVd2aUxXaWMwMTZhOURUSzZzSXhBVEZTbmxNU0tJZmVudFErYXplQy8xV3RvcC8wb3M4dzB4QmlySGo1UW1FczN0a3hHbTJDSWRLankwRHUwMk8rcFMzVjVGNHRZeXdiMDVSVEtPTHhmYW9QMVdXdlNza214S2dzU2pQT1lVcWZQMHRUY3ZOYnlLTkt2dE1oSGhTM0hMWXhiMjZQblUvNkRNYWJXVFd0ZTdVbnlaWUlOV2VRSERhQnc5blQwazQzNjVYUUttTE5EUnVHWjZ0UGd3M1VNWnMxWnVSVlRmSkV1d1Bndnc4UHRZb2N2TGlDNlVhZVNUVnJBZVFweU1MVVEzTVZwbWhoUHRFYVdyMEd2cXhFRXNGN0R2WU9yR3RYZi9Dc3lyVjlBcE5SRkxaTzk4ZlVTcXBTVGQ5SUt5TEN3ME1Fb1BjdEFiWGx2bGFWZnNud01mYVRDaDJsTHpLeVdMa1VqM2VhZDZxNUVvNFBLUzRhQ3ljbEQvWEp0VmFSemZDNURvNXEvcEdFWEk4MDJ0S2MyZ0tob241T0gwQi9UUDB5a3ZPbkxKWFA5bXpLM25LWjMwR0p6cjljVTA4NlY2U09iRWF5WlVaYmp1dnkxL280cXQ2OU55ZWdrTTFqdVNPZlZ6MUZ4b2lTU1h4ZkRDVWpWd0ZxWjZEVDZmV1c1elYrVEM3YUpLU2ZTRFlzNHErTkNhOTdEQVZGZ1craDFuS09HeTdsNVBLWTR6MWwvcHVvVEtHejhkbXJMOHZWOFVqUWFuNDJkRXVKSTFXTmgydzRHazBmS1ZMWGN1ZzB2UWcxY01YUHpoSEU3MFhaVDRtOG5VSFF0MUVmMFBxMEE4MVFtMk5KNmpaZjVNKzBEa2pzbDhkbDF5U2Q3YURTZDVnMVhrc1ZZUVFtaHNLUjVRNGdOUXlHUzBMVWlhbnRmUmlMUWhQdDhxUDhtSEt6YlVUbzA5YzZUTVdpUXRhdHBzK0d2clRsL1JhWWg4ek5Mb2lxRmZZeTFIL3o1M0pZc21RajQzenNDdzRvZE9yNVNWREUyZHhTRmc5MnNVVjZ0YWxZSkp2R3JTR3Vjbk81aUxnV2lSeUp5V2N4RktTOHk5citabThtdEk2ZWI1cWJObWp2OGkrZDdMQ05OUUI0MEtocFJiVG9pTjBOTSsyc1RTVXc4ZzVkYUM2NnRhaTVQeHpVQ1B6YUk3QXpCellTeStuQ3A5Szl0dDNYcGFpMmRSaWJPODk4NkNTckhnMEtTRFYyVVU0MVcrck5hZzlmSW90RklhOWFVVjVaRjVmTnIzMVZwOWhlb1dXTStOR1JpTytPZnBXU3pZUVZ0UTMwdythQTdvdFFHbkpVK3ZZclBxbmxUOGtjNDB2NTcveUwzOGNrYitveTBaYk5Ua0V5S3JGZ05qWEhyUEdxSnB6cWVWUWIzL1RhSk5hYjVYbVpaZHI0czFOSmNWV253MitRYzV4VTRuOGNZaFpWYm9RZ2lYZEpEeFJ6VUdmSVRwZkc3RmFzMDhvS2hxR2xaemZxTHk2dzRDY2N5RnREU1QwMU0zUzN6MnRtWk1VOXpMdzhrZ2pLUFRlbzB6eTgzUng2VTVacUQxelphV0VJaXBRNldKVW1kdTB2OTVNUllhaFpJOHZKTDBacGpxMWFBYUlvS3Q3MTJKUWhqNFhKTkZLQ1JEcDFQV3pUdXkwTVZRUjM2MmtTOHRYa3RXbXNvVnJKTFVaTFREbjhZVFkwMG1vdUpMU2VjbEpkYW5nazlucU1EWGVmT1hwVnFYV2l0UkNIcFA1bHExWnNWaVk1TkNVeWN6NnFWZXhUTDVKVnVRam5ib0lRMGloMlpaTlRMLzM4a2ZabldLc3hmU2tORkNHUlZPNm9ybmRDZVJPa3ZOczRoT1N4dWExYlRFT3ExQmx0RzV2UWp5WTdKc09nd0xCdjNVR2dYRFpWa0tySHliV3p2Y3Q2YVhwckk4eVhjejJPakp5MXp6M2F1MVdtZG1qUmFnWkNiRDNRYU1wSUNwUXYyclZramJvdk5HNnJybHVsdkpLdVRmTlpMUnFzTUFRQUVxek1XVk95aVhmT2JTRk41TE40MWN4SzJxWnRHYXRMd2pXU3k3SmdmQUpnUm93MDhOYStiT25JTks2WWtqV3E2OHNTRE5halhhZHpMc3dZVGNTUEtHcXM3WkltV2dJeEtlQ1MxZmlWcWYwWkNXcVQzd0lIdUJsSjlTTmxtT013NzVwTDFhbTZyeG9PVFc1WkV1enczQzhvY2NhUWNvTjd2V3ZVb3I3Q3hSb2hQak96R0VVdDNHSHZoWXVHMVUvdDlHUGFnKzF5VVNJeUFNRUYrSHpMVmY3Nlk4b2s5am1hQ0t0N0VNb0h6b1VuN2treGVLR2lJMGVMQ3NzMHNiSy92bU0wNlRNVFN0V2VmcHJwTmIyMlBEMDljeks4dXdpZ21RVzJna2ppWnc0bVRYdm8zZkt0R2ZheDhhUitXaWhwbTBSRDROeU1WWWpZd1ZuWkxGbnJMemptNlNXcmFma3BldFRMdXRGSytMQ0NFWW1sMXFTUGxWSVdYTzdtdjVIVnlCNXpSM2RJci9hSVRFbHIwclhOaW5DWTl5KzdjbkdqVHFYMnY5ajV4UmpabWxOUHRmTEtHNUdGNnBzSW9kRkNpRTRwdWN6ZU5WSEtTdVNWMXJIeVowL29aeEkyYnBqa2tjY25wbXJLQzQ5TkhEeFpjcEZKK2hhbktqR0dXT2lxVS9OTlc5QWljSUUyY0YrR3RWUTdOVU0wdXhzT2hJRzQ3TWs0VDBUVVBkVXRoWks1OVhYWW44dGVwOEYrWG16Vmo1OFY2ZlRmYW5KckRTUkNzSUkrMTh2K1grdGd3OTZVTjZObVhWQkxOanFUWjA3eEc5aVFnS28vSUJheGlCNXhoSXJ1U3hhSDhJNDQrWm1UTk90TTFIVnE0d20wRXVra2liMUhMT2FxMnNwbGtyYjZDa1ZWWnRaZk0rNGJOUGpTL3hZNFRDK0VaSGtVM3d1dEduQ3R6VitqUGY3N0Z6V1RhcEs1a3k2NWIrK1ZyL29pWFpRSm9sQ3gzT25UTFYxb3FVSm1HRW51VkJJdE9LcFNkVkdHS3plUUZYTzNwZjBtZmVBditzZ2xSRTlvMnZTcTEzMVR5Smt5clZnMUQxRHRTbGxyWk1sM09MMFJUY25tbStrZFdiWE1UWUxBR0FvbW9nMGFIMjk4MWxycERTejh4M1hoU21wRzZEdERTOFQzeXVpS3JxVnJyUW12VkJtRmFzOEcrcHBLSEtKbFhhVENHbGhIRjV5QTFPaFJUT0xHWmdZemFKdVNTZWZPV2hZTEFzVVRucGxXL2ZxeXZwUFdkQmlZdFlIZ1ZOK1Q2MWVaNHhtMGhTZXQ2NWZWVzBmU09RU3pHbm50OHZsTHY4M2xtblRvUTBydVVxNytsVnpuRDZhaXc2QndLcUxNRFpTc1RnanJSYWVOWFB6aTI1bVpFQ0pzK3FiVDFvRWxXT0Zod1JoQk5FakVmT2JXcjhyKzdWQkYvWnljUkp5QjUxWGp6WC9wV1ZGd2tFZTRqNVdTc3UvOE1yVFdPZ3pOdHB4NzFuK1c5cGh4ZWJnMUFkZU9wZlRwTVRlRnlFamRMRWFtUG1ZZjVTZlBteFVJa3lwdVNUZG1xRXN5UnpaTnFBV0paSTVBUWZaNHVhNWJGejF6SzFlb2xHYlZXcythWXRhK3JKajJPdGFtcDBsRnJJNTFXRzRPQlRxWkFkUVJUVFdrL3B6UGpMTS9leDRVNWFYbVVONk1WY0NIYzdkRnI0dmhzUHVFZVRoTTVKZjhlVm9TMnVsTm95b2t1RzlwSExMM2sxOFNjU2V5QlFiS2xJUGEzSVNiTC82K21wdFJBNXE4dEo4cnNRdDYyNXExVzIwWEV4azhvY3dmVG1UcHFWNk5UMmtYMDNtalM4eVZ0ZkV2bWJ5MitHMTVzSlpWWXlVYW1MRW1sdXYvcnpPMTlYVEl4M1RMUCtpeGtleDFhUnVxaXlnTm9pTkdqMERzZXRKcjBveVN2a2lqM0FwQ3lJUVlmS3ZmVjZXL2RSdHFEekNxVXlvdUhMUGZIMWQ4VzFrdDg1SmI1bTVVeHo0TzMzc3NIRFVCdFp3bFFqSVNucDY1OEtyc2ZIMFQxeEpNNThUMzFZV0lMUy9SYzNTK0h3UlZiQ3ZSZWROSVNocFZXY3I1SXF0Y0hLSGFsNk5KZm1ZOTBpaWVsb1NJNXNHd0pyUklqT21UbW5hTkt6RHBKS3RSTGpaKys3NUx6QmZrbnRkWWVVbVpPSXVaaTFBZFZ0bm5ob1FFQlR0alRxeUdqTElwdUNCYlp4emU1bEFxNlhhUWtEU1hqczVqWk13MFFHMndYbENoVEhDb3M0ZytuTnluVzl1a2ppNUtqUzE2ZTd0TTBYOW9zY2pXbzFsalF2RWxMeWE5NW42dkV0UXlHOXJIME5PZzFRa3EwUm9lMVA3TFRVUUh4K0ExV1BLRkVxTHptVDgwaitteDA4N0o1TTRzMWY1aU5JZ1JhK2xsNCtpYzNBckVZaGYwaFM5cGlxUXZJQmJvZTJzM21PRURGN2ltTzgyZEJGRjlRUk45UmxFa3Y0Vm1WVnhmUVA2T1JyY2txNEhmS09SdmxRaGRSRkFlRkxUMHBTZXRhaDJYcUlvOXljVFJqcXVraThESDZkVjVKdGZWRGJTSHdzVFcxQnZscytkTVIzMU1YUzBFVHRNLzZhQlYxYjBqVXNqdllYRlJvTHMyVjljbTh2TXZuVmNuckdvMVpUVVJmVE1EQ2I2U1NUNHF3bzhFdUd3TmkxQkZMSkdrSmpMNlRwWHZWaHJJK2tPcmsvVHBrelZuUXMwMzdxMVZqSVlCMktRbG5GdW9PRTFEcTN6Vi9OMDhraTRHM0lwU25YWlBtOGxPbkhXRnpoWXNaU1dRajdCVnFmVWMvZEJ0cElKNWpjakJKT3BseTE2VHpiY0NWT0hLM2FQdlFNTHBYMnhOcXpaOWVxa3hKZXJTaVIwekZXVERzVEJ3MzVnL3FSclZrbWVYeTBqaXpoU3dVcGFaU2Y2THpmbHAwNzZiYlE4dGM4NUtwR1ZaeTBKM2tqZE5XbUlRMGxWZG5OTzhQcTFoUk5QM05IbHFmVDlNNkJ2TWZGbkQ4d2JscVJ5U0xIV2VIK2FqMnNXYWVjUDBvdEpDcFZuOVZkclJScEhWWDNtKytGYXRRZytHVWxGaXBXZnZVdFZra2licW9sOUlxWG9SUlZObTJpMUJ5VUlVS2w1S3AzbVpibDJva2NQVnBRb1l6Wnh2V2J1bFkwV0RwamUzcnc4Zk1LMGVtdjJzNE5UaDNlcDN0RkU3bTZMU0RyRmZCTk1RMVBiR253b1UxVEpIMVl1VThtODVxOUdveFUzUXpqYTNuMmVQUVRIc3crRUpXbDk4UG9LWmJaSXFtTEdabG55QjY5L3pFWFNOSnhra3ZvMDN4ZTRvUEhIbGFZb2NsKy93K1hhU0tsV1dlR3c4Y2k4clRGZVk3K1IxYVkydnk4L1ZvTTByTmtLa2h1VGpsSExOYjN4Q1djcXNrbTB4bGFadXFVMzhpOXgvcHh1a2xpK1BpUUY4NWFYUWhOVHF0SzlQNk5Wd2VJU21uNWViNkx0czZFZ2xyZzVxbVd0WmVadFlPZ3FGWFVUNCtlTmsxVnJ4MDE5UkcyelIxeWsvRzhrbXoxcldsalpYcXZnNW5CQk4vSFJWVklKTE1UVnl1dWJqYkhrMXJqVlNHNmx1QlBPSDBwUUhGdGNrck84K3RORVR2YVhFSjhHR21KSXFzMWJsQkRMVk5KUlppUy9zcWVLeXlSdEJ5RFloQjVlQnRuR1B0SmFhZThwcDVpek1xMWNLSUxtYVl2TjVqdUVDTFFEa1JFeG1DYkRjdkhGLzN4cUkvYUF5Z3VkS0ZwcGp5aVc2bTVMRmh3UXVTVFhFQ3R6Vjk4VXRhZVdzbFphWTBXVGJwVzEya2pobHlQTVd2VnBadVNOOXRjSzBGemtNTmN2R2hSSjJvNnpjUG56Snh6WjVFN2ZWZmthL3c3MXVJNXNmRnJsZ2VEc3BCUk10RDVtSmw4MFJSeThXa0dnK2Mra2FaMm1KMDJjSVZwY3UyVm1QY0VQeThrS2xzOFErdEV1MDZieVNWSDVJZVhNNlRQdmcwektlT1g5NHNlQXZndjR5b1RHZTdwWmUvV3lsWUkvQ3NYaDlCT09zN091bDg1L3NVaFFXZFU0Zk5vYlU2czVzcXpKaXR4QWRaelZyZk9uTC91amFwOWI3M3cyT1REUlBuU21tK3QxdVNiWXl3L3RwSjd1MHZIdnFKSXZoOGFib2hJRVhEeHlLZFJNcXltbm02WjFLenBNZXpqMHZTVW90MzFHUGFTVUd2OFJwczhmQnRyVEtZcW40N3ZyVXpNWFVqR3JFSWlVTzA3bHNzeksyV2s2VVZUa042TS82TEJ1Rlkwc2ZPVVJHbUpKN3ZoeWJXNlpralpaWTVJOUpiVDJzM011Zkl4cTBPYTJmTFVIYURNMkV0Um9yWEtUU0RTTXRhK2QyYVZ6SmlIdXNheXhwZlRJR3NiK0IyeGFrZHFXV3lYU1MxYWcyUEd0OHJGaHlqemxWNUNkS3lSbGpvOHVFTWV4ckZ0MUVWUGdpbUxrNXViSFNPK1hZckhDc3RTU1REWnB4eTYzT2c5a3JrbGNyN05QTk43MGlyNWt2TXJmRzk4VTZCRGpaWS9tS3NoQ3dPQ3FacHB3Sk5tUE8wK3BPUVpuYVRQdmdlTi9xN255Uk1qZS8yek01Wjc2TS8ySENTQk9jcEpxU25hcWswL1RtNk5OdGtTSjc0NDdPSW9wV0NLcjNkT25Jdm15Z3NDNGFQUlNSVzMwMTlhV3pvYnlPdmEzTEVhcVNxQmlWYWZCRlJkZGcxSVp5VzV5clRGV05Cc2dRRFV3ZjR4K2g4YVM4V3RJWmF1V3pENXBXTGJQeVNTK3I3Q2tHeEFJeGNzcGtFQjhtbk8rbklaclNPRFBzcVZVa2Z4NldXMUF4R2wvdGhNYWtwbW5UNWFZK2JZVWdpaGVRRDJoalV4S0xZbWUrWHJpMDBFRTBublBZNnhvcVBIeG9TZTVoaGZzT1FpYVZuRFRXclVLeXZTMUpzdmI3azAySk9HVy9kdHgzMXk4NnJCMEUrSGtoOFNvbnk1S2E4UzJwZkJIMm1QWitnNU5xSHJRdWJ4dFNkS1VGNnNDL0FBRkhaTEpFMitZR25KWnJXZVh5SU0yanVGaW00VzA5aGZ6YU9wczZFNTM1ZU5OaE5BQVBCZEJ0V3BLQjJYNGZUNFhIYXNrY3JWcjBwSGFGdHNHb3ltZHBzMEVlRjFEdk40bEVZL1RFL09kTEdzOUVYdEpDRTk5TXNyUlQ2VjdMR1d6TmFQbmFOQm1QWUU4Q09JSkhvUVlKWmFUU2ZQUUxJVG1rYlBhMWxYMGJKTHhqRm5jYWFNNXZmSHNEOENPWUMySWwrZzFUS2FIdDBvTVhPbTBoRElXR3ZSVTM1Rk55cHE4UFhZRXdDREVaTWVReTJ1S3FMbC96dTlqVjh6RndNeWw1aFdpS3I0YWp1UmV1Wlg3RVNYQ0dORFNDeHJTdEo4VnBuNWF5U2JIblptbUZyemJPT3BzZEpSdGd1TjB0UVE1K2NLeXIvTFp6VjVCaGViRUp6V3BWK2R1cHkvTUxtMFdvSFJCczk4akdyS0JneGdEeXpuRUNSdytvdlVzbytGWk16N1BRUFludW8xN2VyRVdrazFPWHJXK1p0S0JLZTdqK21VM1VyWC96YWtpaWI0OHpSVFpyZmtVWEtEa2ZCMVE5ZHJUSFI1QTVOa1EvL3pteWc5b3dpK0tVbE5VWmUvMUYyZSt1U2NmNXVram13eFBhVkhtdENXYzFHa0toQmIyRWxXVUJhT24wNVNOMm1XMm9HeVNjNDgvNlY4dlVXUVBUaGk1RzZIMXIwejUwUFd1YklFempXNkVqcVdaYlBMellXREk2T3krZExUTWVMbEFiTlhPRzBHbERpL09XVjgxRkVTNXRxQjZ6NFRFanVocU11b1lSY3FKYjQ0cXV4dzEwbXd1SE8raVovZWw1VUk0M3NSd0trbTZCNHRLc3F6b2UyM0pyT25Vc25Ydmo3bVF2SGxuYWQ5RFpVOHpvSS9mN2tQLzNick0wdTVSR2twVm5UWVJCWVBqd2FjOGVwWnh4cXErY2NxMkNLckFYd3J6bXRXM01reEdsWDFZK05Hb0hJSkx6dnVyUm1MS2l3VnNINVd5V09HM3ptL1ZwOGtmdHc2NCtOQnk5NHF6NFFTNzY3NnRCejI1TlpUZHM2UG02cms1R0VjbEpOL01WZFVhWHIyRmd0NXh1bE05RkNWYTMzdUc5YW83TDVxMGpqV3ZOdnBpdEVxdEpoQlZIcE5qdFE5YWRVbVp0cE5USjVRbW85YlM3S0dNMk11WGw4OVJiMnpENWNJRldnUXNGS0swaHNobmY3NytPdHJkTzk5TmFqNldwTVZKbXJuUWQrdEtuK1M4S3hiQ0VjL21uRUJNNk5XaC82MzhpOGUwMEJIUGxKSnJKR1B1RTBwZk02cXRBT1JPTW9QVExDUnA4S3pMMkVzM25EUjgvVTNOa3hNenZiWjZ0U2czVVJSVmlJS1FSK2I4Z1BvTDZzNWRMME5zUXVHdnE4eGtDSnJQY2pidXJDMjJtRGdPY05VZERvVU9PVmp0SnRYbG1LelBNdnErUEpaRjh2NUY1MGtrMmlOanNqT1JSblEyd2F3N0VpVXlrd21vNUtZMVRwS1ZvNUhUckZMUlQ5QnNqQ1JBOTVEcTF2TTBSZXgwUEE1azVMQ0VUclh1cXZkTjlFZFdsaXlMelYweVNXcmlVSXJUVGRYdE1LUXVFYWlnK0c0NXZQZkVaYnZHbVRNc3Naa1V5WCtkeUw2Q1dMUmhhTlk3ZlRhamdXZ2JQSkN3M0Rhalg5cjR5M1g4Ym01STZkUGhYbDU0ZzFhVXBUT2hyNk0xWStEYWVOSTF2WFNpUzhSTDZxNWFNcHpXOEt5WXExWlN4cHRQaXI0c0tDeHpXRHgyVytkVVNsV2plYnBFb1B0eHlpUzhvTVl1a1NwODVKWi95N2tGdkNYdGFPQnBsenZ2TWN2RndJa3hwS0tXNTY3aHkrdlIyUDl0RGdnUTlIT1pDay9ScGFnckpIN1NhcFB4MVR1UlJhOEllWml3NGNGelJxajFHclEra3ducHZISG9QU1NPWU1mZk5TU1ZuK1FWa1dKQTRkaWVQbHZUNjQwTDgvZG5reDN6WTBLYzJORXEwU3N0STZobFZHTEZRcVFST1NvaHdYanpUQjB0amZlNldoTmZpcFk1Y3RkcDBEYWJpU254Y3VocDhUbG9Ib0YvSzlXOFRZMFBDR3BxbHJldURFV0doN1c2TW01N2JQWUo0SC9IWDhhcks4bzU4OGppK2dPT3JOcjZiaElmT04wek80d3F6a0JESXlkUjVBY0k5eThUbzR3OW9qYlRmcVlXckxJcHpybFNaT2VQSVA1RjduRkpGTWlsSklvNU9GYVRTZk5YQWpudHlha3NjMGlacHVDeVJxNld2dVpQTXVzV0lqaFdEb1dKQ2Jaa3UxQnVRYnFJcTBXa056M25TeGhITmFib3FPbTZXNTMzTWRXaGhWNFNFMmpXU1BFc25xS3k5SlBLZWJOQlpZcjh6elZwRmcwU1JWN0drY1djZVRFVFZxUVRSbHJERUx6VyswUkdJamZ2bzc1ZlJGN3hVZmFkcFJxWCt4R1F5VjB5c1ovWDRlMld6cDhtWXRBZE5wdTU3NWt4UEVDTDR6VlRwYmFRb0NPS1I3dFVFVFJycTFWTTlSL1JGTnRrUmJ2VVcvakNyT1cyRGRLNmZNV0Z3b0NNcytVc2FRYVpmVVpJZmRMU1NiUkVKUFR2ejNhSU0xOVZ4azk5RzlpSk5aN0Q4VGI0UFg1Zk5GZnY1dEZ4NTBUQnEzYWJOV242bzFIVEY0T3hLTm9MU0ZXUCs4UG1kT1VzZExDSTZacFBrbFdlTmo2ZnFUNHNGb1hCRElQTEpOYWxtbDVvYnJJRW5zOHFVZDhjY3ZOSTJQbXhTeHg5YU8zcjVGMzFhbU9oSW0zRmpXRkJ1TitUZk9tcktzWnpaaHYwcldYWkQ0dVd0T21wT2pmOHUxdSs5Z3NBOGhpbW8wUXBPSDFuTTVmb1JNdElvcTBjd2VoOGNzdVRFUytSaE1XZklhUk9SMHMxV2VIZ0xnZEluTHdxYXM1V2pzbHVoUEkrWHErQ3VJMDRvLzdrZmMyYm84dE9sSTl1bmtVeTBZZXhLTmhEM1gySDcrVmFUbC90Z2tFazFxUFhHOXFBSm1QcC9IRHpmeU9kTnFBMWlaTlNCRVFqNTFEUnl0SFErZFZ1U0VYZWVQdGZNMmd0eWZlVFB6ZVN3U1ZZUWhJRVlnRVRPVFFQNDBjL3pwMzBiMnNjRXFoc3FTemVMd3FGUjdXaldVMDliNWRhaFlMaE1oMnRHMXpTdFYySUsxZkpsQXRucVliZ2ppYnB5aWlVbjVUL1VaOWkwSFFtTnpJcU5FYVRZOHF0Yk1qR3I0OEpPYlRlVTNvelUzbGxzbEt6dVMrd1hnK0ZSRCs0ZVpLQk9sVDlIMVdJbW1sVGNraWd1WmxXTEtpRnBOR0o3WC8ySFFKaFFGbkduRkZ5b2tyL29MbldvcGtLMElUTzlyUC9uVTNmVGZEOHM0bnBHMjVZcWFzeFJlak0zM0l0UGV1bnRNeFowbW0rald4b2l3UElVeUFkRU9LQTJOYWsyWmYwNVhTN1lvM1JqbEZhaS9JeWJUenJMQndXQ0VieXhQOGZ3OGxPNityVTJXWnByRlJ0ajNGL2FEY2k5QlJSOGw0dE1FdzFzVEpVc1BTNVNONFFRWG9tRm1JL3NaSURXbjEvblNaaGszUWlTM1ZwWkgvWW1JSkhWOGVXbWUzL3ZhNS9KSnNtdkpIVWpVdnFyVGpuVm8zdFFPeE10dUhWQWxudGI1MGFkNmJvdmRCa3RTVXFYeGNUMVBNb1dKZ2NuQkxSVE9RV2dzblAwcnBXS3RBc2s1SFF4Q0pXWjlwTU5RaDZhV3JtWXNVdVlDeVFKaTF3ODA2UEtzMTlTRGJTWFVwNU5yNm9ZVmU4NWVYTmdzQlR5SWl5U0J6dWQrOWNiNWR5bWxLM3lnNFlUYU1tMGkvMWJSV1BPRFE5cUtXazdxK1cxT21TT2JSWjAwcFNxcmhSR1owbTZiU0tocW1NK2U1Y3JrdkdQeUdra216VjZZM2I5eVdieVhxbmpObFUxQ0JQNVliL29MWHBuckxyYVJjdjdUbWdsMDliWHJpenRKNzZSbDdiQ0dWV3RlS0Z0S2FhOVdsVFFxcFpPRnIwSDlWc0YvYWRJcFBvdk5pb1BKNHJ3TEVEZmVjdlVjMk0yQmhOdWFjaWxqL05yT3FaM213czdYSk03YW1UMXYrT2hWdW96NnVEOTJyZkQ1aTBVcWlhMVdEV0hnaEVpQ1dRcGVVVmxXU1NOVnA4WkdwclMrZmJEcEtxVEhmUzdHZ29rQ2dxb2FEY25EVnBmZWRNUG1EUHVlbTJLeW1ueGFTRER1OHAvTmp4dzBLMGZSeWcrdjBZWDQ4eVIvUmVsY2ZlRi9WUmVGZmFVTk9uRHFjejV0SXFteXN1U3pGSlFXL29kY3IxWFI2RFhuWkRUZUxDU2RLUHpaMUdHT3IzQWM5U3ArYXlEb3JWam55clZqcUhsOHJnbGk2VEJhNWNzNVpGV3E0QnVIL3FXaWR1Y3I1MHRmT2dpYmFQSDQxVmszd1luVGNNRzBsNXFDbW96VnlDVEp3YWtuSTBwMnlaTzNmN2ZJeSt1LzJjTnQzeDB1czBQazBYcmFKbmFHdGZEMUc1WXdsOFhpb2FVK01VZkpFNjBTbU9OM29yTnRGNU1RcDRaVVdOR3AwYzliL1ZER0x6bERaeU1vWGlaeUwvU1Y0UEJ4THZPMG5LU1luekZUUmlEUHVDcWFSZG1ramk0S1NicWU3Y2lxMGdjZWdiWEZJNFByUFNmRTk2L20rOEs1MDVHbWNsaTFqblJyUkphZUIzeFlyQk9aYzg0OG0zSkt3ZEhMOGtpMFFiVWU4MkNaSjdTQTh0UVF5YWpwbVRNdjlpWUtPVVBTV1BEamxuY3VrbHU5dG5sdC9SM0o2SXRNUlNlaEthM1pRWWV5d0pZTUl5VlVRbFVPK0o1OFQ2SllzMHF6N3JzNDVzVGtyT0lUZFM0V3BLaTI2SDBWSjNRMjVpbTVSUmZXMVdtY3ZObXFCWWxPa2VYOTRMK3lvcWxkUzAvQ1ZZOXZvemZPUTAybHprMGk3TTR6Q3Z0Q214T2ljN3NzUWtCVk5EUm1rMGpQMzNteEQwNVhqV3htbWZhUnM1VElyclRaNGFNMWRZLzUzcC84cjMwd1NWY21ucFZwOHZxM3BTK3FxeUJNc3o5b2tTU09PMGFNaFRKYlB0TVpIaEQ4aWhxMFhLTXBROUt3UEl1N2tVamg5a1FsM3pvbDhrczJnb3RKVkxUbEw1elJtRlkrbXlvMTBhd3BHMFZ2cXRXa2ZlMTlYejB1L25wYUNMM2twaDhlTEdoY2tGam15UUlyRWhlVitsWlN2Sk5QYnBkOHhaam1LdUpuenZMNnEyajRzNmEwbUVLMFVFcGZFMFV6U1d0Vm93VnA2S0JYVkJFeXplZ3JDUjVMVnFDcVdwU3h5U010TkwweHVYK1NSZUhremRLMDFrWHk3NkVVL25OR0VXRGExZVkyWm1SODFyNFhQelBXNUg3VEc1Uk83VUZLNWxqMkRENmQ3a2VpZk1xU1I4dk5reTBoZUF2ZTBlUEpucFRPK1dnSU0zQXllSVR0M0hNelp2VjBubXJyZWJVRHNMaFlUWGhYSjlUM3pqbXkrYUpIV3RPb1h1MXU2ekU4dlJIVldpdC8wbTJQQ1VRakkxK0N4NGx0ZmRhMC9wWmN5YzN2R2x1WlJLeThLV2lGOVVvK0xVVWJTUEVZTm9ySmsxMC82VnR5eU9MQnFDMGVObDQ4MlY3cXdaaTBTeUhPZVRYbXFGNmRTc2tjMmdXRWtzeUFMSStUeHBmdGxTWDFheENkTXZQYStoaFY5SkgxdWxWdFNEZFdrQ3BRNmU5TC9NN204bDl0V1FiL0h0WXhaRXZkdHI1U0pla2c1dkluUG14a2ZJS1RnOUZUTmlhZi96OHZWZWtzakV6QlovaFZyMlpoSkZXaURTdkk5SE1qTEx3OTFmMjd0eURaVzV2MzZxODNNdkh1ODA5Mi9JblhHUUwwZnBzTDJucldsSE9STmExOU55U20vdENjakwvRCtSZStiTVZrWjl0QmFRTlRPVGhUSFp2MzFUTVp1OW1rNWxPTy92OWpybXBURW85OHhiamhHdHpXcVJ5cWNLbllWbFdaWkl5NE9PT1RhaTE5RVRuVHBJNGkycHBORU1uTHpDT1pmN0h3blJQME1USm8xTVA2Q0hpUDRJcXVWRHFTbVRsR0VVMmllb2NNNnVjMnlvZEZVcFJSMDVhTmQvWDN0SmZxdmhxWG5UNDVKN2hmMGIxWXNGcytjZ3NOWlE4Nk45TlpkUUlGVzF3V0l6anU3UlZ5ZTJKM09QZkYwV05UNjBFQitFcGwvYlduVDdsb1cxT25OM0lwMzN2eTZ1cXQ4bWFzTm5DSllKSkpjRlc1eGhkTy85RWE5VjlPV3pqMnJkb2t4MWZjak9PckpUVnNVemp1ZUZoeWpIMHJYbmVxOXNSV2liNVFabG1hMDFZcE4zZlhVOXlJMnBNUnlhUGFqb2ZMMEdTTUhXaXYrWHQwY2ptUmo3TlNOT1ZtMm9CdGtaaEJqc05MKzdXc2FUajh5dDgyaWNQVStqbGpDQmpGejFxb2pDckRoQk1nbURvQzg3cjBiL0tOZTBrbFdiRU1KbUpLUG94MzhsaTIwdHRhZkpaOG1KZk0yNEdIajYrMGZPbitIL0xsdVhKRlBhdTZXdW9lb3B2eVdiaUd5OUU1ZFFSVllzV0pCR0lUVU91WDBYai9lYjVVU2hZampxMFA1aVpzMGFJRTUzWE9xak5leURFeUJDaDNOR3Brekw2bzdsNHM1TW9QcWFFR0xjMVplVzIxWXFaT2hSdE1JcEVDckJZVERjTGZHOG1wb1ZENmk0VWRLUFdveDg4djU2c1hVbnBUQ1J6bTdtYVZtd25EWTJtSEo2YXhTb3N0MytXbktQWEptWDlXTGNlZzFOZExmRFRIc2FIbkh6am0vTlFNVFlkbk5HaFVzZlVaU1M5VCs3Vkw1NWxyMlcwN25wUTFOVlppcm53cEdsQ1h0c0o0MFZIcVBUVzJYSGFkNFE1ZmtiV1cwWlM1c3BMK2JjODAzMUxZc3NHR0tsbXFORzJreDV1cWVnZDYwRVZHZmNJbXRia2FQMDh4TzkwZEVuYVpVblRaWUJpbkIwUEpDb3FocFNWK1MwS3pvTXo3TkpwS2ZjZG5MM3Z1aVRxbEIzSTVzVmdJQUZoemYyajYwVGk4dlkvM3owQnFzaW80a2xYM3YvTVRLOVZHWFcwQ2I0ME5JbWt5a3FaTHZtWFpqSm0waUVmRlBtUklVMHlZYzU4a3E3UEVVenVhUGxkUkZOaWNVTEJaT1pEWVFQVUx4b2ZNeGRPTFRXbHJabWlLYk9ZZkZQbVhybTBCSVBKcUxRYWRDaDNWVzJjNWExa2ZzQ1VPRGZqMlRPYytTVlpKR214VGltbkhaYitDcjlreWhNVGM2RXlCR0RWdnJTMVl4cTBmU0hlb1ZKWnRGR1VhMEhMMDJFSlJZcGFzNWFPY2dQZmZOUVBMemFaWHgxbW52YkhNU3lLZkZ5eVIwWithTVBZcEgwRG9YSWsrUFNuVHUrWnR4NVZPc0dnMzNhVlpwZTZza2MyRnFaTTc5Z3BXUlJ5OFd3clRrMnRIamFiR1hseTg2Y3VERmFXemVHMDBUY28yWjdkT2t4TjVPVFVjdWRXa2xteG9JSjY4Y29nY3RjeTg3ZGFHYjlKRlZpRW9hYWJMVk9yRmp3UzJwN25sSkkyMmdXU0hKeDhzbjBYcnBxUCs1SkZ0S3lFRnVQUFkrYlFLSmo2R1NVTGZxVllZT0xJQ1BGdE9IbXFOMWVKcmVWeVptMFI1bzZma3BXMlNXcldUeURhT3paOXczcGs4b3hMZHF2VWxjUDlFYTdhTkhjTFBTYVQya2tFc1dzZXFVbmpTNDAyQjZwUWcxTkhsSCtlK1Qyc2xtV1JWWTBNem1SbHpPNW4ybmtjcEdVenRCTEZpb2hVTzZ4b2J5NGQxWitVZkZ1YU9wcFFoTDVNK2JRT09HVjlMVnVSZXhVRFlQbm53aFNHU1NTT2YvSytxMncyNlkwZmx4RzVJMnJFWFltalhVZkdtakUySmxLUEd6MUZPbU5QbC9PNzVteEtOMUtFcWRlbmw1THJKS3NmYWlvcHpqMVYzZ01BSVZKSkhVNTZrdittUy90emhwT2RQVFZrdk1XZ2dvTko2Y3pUbWwrWG16UUhzT0dwemtqUTNReDFiLzVENWZ1QjlneTNmeTZmZkVpa1RHbHBUNmpQdUFVSUxxU0tTQ1RuTTlGMU9lM1RlRllpUytOM2N1NkpxREw2ZkpKN0VnT2dZRDVaQkZnZUkrcCtqVG95MWtVdnExcGswazVnNXpkNzQwV05PU1JwajVNZU5Qc0ZnRmtUNU5yV2pnK2hqdjlSNTA1eEhHcWJ5eHJ4dkV6ZmNwQmYyT0NJRndWTFNhd0xodjFLcVZOT3pLdWRPUjMwUGt4VWFMemxEVlliWWhVREFSQTFUTUg3eCsrSlpLM1JjdE5UbWFPYkl3bTBSNTFWbzFXa1FpVk9jc1JNZW1YaVVtWm1pK2xwU3k5V29qOW03K3RTVGN1NExPRzBwV2NUVTYrWVBmVngvb3hxSzdhTkRiWmUwczRpaUtzbUd3OG85RnFHWk9TVjdXd0lGWEtiVkZUWjBRWTZzMmFUQytKZkV1NUYvOVZpcHpxeVZKRDY4YnFldWVYZ2xkYVZENktwMHNrWTFjSGpoMVRtNTNJcWRaRG5OblY2VWFjZDFZUVZscEZWNFVsbHpYbGkvNzVNY0RTdFdVOExJbldMUWhpMHNwbEdDTERiKytUcVU4ejR2SWtBOU9OVE9mWEw5OFBtelhNRzV5RElhMURRWDlvSGlwb2prYUgrZ2NuSzhkcVg3SGhFdG8za01rOXVuUnZhMitWTWxwZk5waktnMUdRVUpzeUVUb3lhL1NuSS9DcnJqcENOR1FzTElUa0ZZVzJTL0l1WDlYVVNQUDU3YXpUUGZGbkExaHFOQTFZNHBDQlhVcjBNMXJNY1J4MVp0YWluVkc4eHBsYXE3SFJDTnJuZFRGbCtqTTV0ajJXUW5haXpNeEtWYXg3bnlTemNETXFQcHFEK1JlNGJKcXB5ZW15QVJMTm1JUEZLblBsVnE1OE9aMWpEMkdpRFVJMUhyZFVtSVY4a2tXZUtWcEt0YkZsQ0FtVVBiejRPa2JWajcvTEpaczl5MXgzemx5WWxXYnBCRk9zYWQ5eVgyUVNKZzFnZWN2azF0YjN6b21HdDVIN3dKSVJqeHRGMjh3eUxwQXNnakV6T1lzeDdFSTBQd3VFamhXNURKZDhWMlNTUmNzU2czTlFiVE55OFgxRG8rbHIzV1ZYeG8yRWFXbVBwMHF2TGgvL3ROSnEvamV2TklsM0l5TTAvejlOeUxVdW91U29RaUZqZDNyN2UrWXZENkUrZTFuWVIxWnEyK0tpR3cyNkVhUXFsSFFsNW5xMU9TMCsybm5Cck5SUlZwSFAwWElwNkNXZzFra2szZ1FBY0RvN0ZNZEV2UzFQL2RPa3pEMmQvdmhEVG1Ic2FTLzJNaTFmVkgxcXdabWJHd0YrRkErY2lPbFo5RVNUbHpZMFVEWkQvdGR2SmlXVzV4TlE1NDB6VFJqK3dXQnNPeHJteTBieFU3VnFmUHMwTkJWTGFPN00yNFd4RTdmSjZhdHh3VUdqcHg0NEpIRTBWYWEzd3pUb3NlRFFWdFNXZU5sSE01Zjk4NmJPRUtFem10Y3ptWnNGc1RqeE9VUjhxb2tvcDFVa25lZVN4RjBKR25hRXM3TmJTdnpwMVJjdXpkVVV6TElvOXMwclN5SStXZ2VOTHpLNnlFU1NNczFEUjkwZm1rc3hjTjB4amJKanpTcW1LQ01MK2dlZE9uaXZ2cmNqcTRrZVVGTkxPWG1USmVqRlhtcm1jai9tMVltSE1oT1JMVWc3MHJPN0Z4cHM4TFlHVlUyNVFqbUxIVW9xdFIwNWRvMFZXZWN0aDBueTM2TTF2eTh1MUVSMDQ3U2ZFcnNaeHF0ZTRLY2NKajZhSTg1eWFoL3pmNDMwUGxXcjQzVXgvbE8zOVgzUDNTbXdqZEJKdGRxT1N6VmZ2S3NXZ2xGRGM2WmZOcCtvZEo4MzB6VUdvSElITFRQNjYwbkwwUGxwZVBwdEk0N1ZWZGI2cXprMnlkb21uK0xERUhBNGFIcEVoeVQ1bWQxT1hYUHNvbHoyNGFtcHl5L3NKaTJxWmFnOHVzM3F3WjhtZllkTHcrRXNhVVBiVTVKWDVxcTdEWW5TYnBTTDFSSkZnSHVQNGJRcFpzdHNjQjJXSlF1d2tHMDhtNWE5R3BjNmx6Vndueno4Z2MzZHMzRVFPdXBKSml2Vm96N0toNDBxSjhtVjY4M3p2QmVMYkNYQlllMXZ1Zkp5bElyWHBzR3NWalFKTUlSOHZTT1NRWFQwRHVTMWFHT3gwOGxpNWJ6a24rb2ZWaGlMRklSUUd4bzQ5QTlDSDk4UDZsc05Telk2OHVaR0ZXVmxZNmUvdmEraVNiQXdnYlhMQWVUT2kxSTVEdmx1UUwrdzJHZFNpMGFNUSt0TmlOcVJzdG1DOG1Lc0lvcktPTzZSeVdhTTZJaVpwOGFiRWVYU1B4dGlvMDUybkpXQ1dBd2hVQkxDazdqZVdvTmN1Z2w2YTZiRlE4NGJialQ4dnp6RldORFlpVVEwcVE3ZVM3bDFZTElKNGNLb0lMY25wSGs5RDBLZjhkWWhGZzFqcHlqMXRMMUY0SVFheHZrUG5JUXJCajJrVUpqNGFaMUJwMVozeTQ3NTlqcDh0MHh2b2d6RjZmRlBTZlZqN1I5aE5GQWFuY2IwdjcwOHZRU1JZcEdWRDVlYzlxeVdyTjY2cDlQbHRoY2lJMDFuTlRXdXZOUGgvdGcwSTFEYzMralBabWpHTFNUS25QbVZ6dVJUWXFGdytUYk9FaU9ZdjkvT2xhL3B0RlJiRXFRSm9aWm10N05HVXcwbk5VVTNzZlVRMEh1SVE0RmpZUzc2UDc1V01KdjdtbXlrN09xeERFSjd3dlMrYmtXaUlSQmRCeklUajkvUVBocjZ1aDFCWjd6ZDMrelphbFQ2aXhDTFN3K1R3YUQyUFA1ejZ5NlkrclcxSk03ZEY4NkxSbURVY2Jhd2J5cENXbVVRbHBJTVdySzVYbDVJaXAvdE1OZVBOeDNWbXpWNCtkL2JBMnFFc2NLVTJTZnBmRXkrYllnbHZFMTVoWmlWMjFLZEdvdlZoMEt3MmNhZ2dKOHg4ZDdXcFErWm15c3VSTmc1aHorWXIyc2RQTmVpa1N4YVlxRVFqbkQ0YTliaXE1alY2VTBYU0I1MFFrcFc3U0wyYWwyem9Xck5qUWVsUjVKRkZoTStvTDFVS2F0VVdiNGcxNkV4eVAya2pVVkU3a3MySERWRk4xRzAxZjh4RDFwemxra1c0WjRwblVpOVpKTmpZYWNiUjBxVG1ySW9xMkpxSEFyNXA3VFRqdStJeWovVThqWGNvSlRENEpmWTdqMDYzMWU2RndVUnNVODdFNGFOeS96K3JQSTNNdEZSTS82ZXZ5TUpxMFRvYVg5ckY1TncxNkZTSFkzZlMxYW1sdEJBeGVINUhaMWIrUVZrWDJHblBOMFJZU3hTQk1jNlh0WlJlUGx0YWgxa2tXaTZEdkNyUHFJcW0rek5sOWFyUVNFNjJwU05pNHRLSmhjcVgwamtueDNTU3pZMEZtT2ZVckE3NHVsRTF3OExSWnZrakRXWjJnanBsMU1xK1ZNMGprUUp0cVNNcW1uM3g0WEhmbzhlRVpVN3F4bXI4KzBscWRXQmhWOVErbjAwbStZTVQ3UlVLNWVsTncwdHBlVWxqZmZKbWJSa2RpTkplclFIeEcxL1dnNGpxeDFiVkVhUlVGdmpWRDVqamo1Skt1R2FFZDg3UnFNemNCTCtOcWppaklJbmJpQjdQUGJMWTU0Y1VLeGt2SitiQzVva2k1S0hWV3JPcG93aXpTRlJHZEdKbENPWThVTWFzTEVxU1c5U0ZyNWlZKytpNGw4NlltSkk0czFlLzNiM0dLVmRWajdRczdUWlNGclQ1blZYWEtVdjVIRjQrWmY2ZFYwUFpSOExtSTBtWjk3aGdQVEVTY2dLMGkvYWxwcjFaeHpFWDFMMm1hdmRTSmZWaHVOQkN4MjV3aGVtWG5McHNEQ2F0ektGSjJIZDM5YXNhYmx1bEdEZXVxbXh6U1BtdFFEVXB6bHJwWDVMdmFTT2U2d0pScE1ncHNxRk5PV1hxNmxRUitXc0xLOHZOcUV6a2o1a1JDcHEwcDc1cWt0N2ttaFV4bGt2dE5SUktudHE4bVBzZWVwVFdxY3VwNHpib1pVWDhqUjJiVjduVm9OcXp3YlpIVXNhb1FSa2xZbGRWcEpaczlOOVpGUDJrZHFmVTJHeDVUaXBGcUdVV1BhdCtvdHRER3JIeEVVYW5Dazd5MlRETEprQlZCZlFSMHRRTXVzYklNaDRXMXh4VnNUdkV2WEtra2sySVRrajMwYjg0eEdxMitXNmk4a1VXTEJkS2gwakk4TmowdlNMeTlvd20ybFQ1bVlMTDA3bUlmUXdpelJwclplenZvejN4Y2h1ZXdCZlVraElxcnRoOHdwTmIyZEMrZ2tpTkxkTzVodDQzSGpzbXViSkhGdEZ5WTJUYVB1VGI0TUh1bVgwTWZhNUNZdWFwem53WitpMnRZbStWazlCbW4xWVJBN0M0VmhvcDFuTHljOTg3NlZra1RZMzJmdmhWcEpOL2VKMGw1c0cwZm1LUmNvZ2hFblRwZk9qLzIxOGVrbXJtb3ZETkZ6MjZhc1F1RVlyUm8xQ2g4OXA2c1ArOGlCRjRRc0hxZWQzTDBFazNsRkZ6cFNtZnF0QnBZUkkrcExOYWNyOUpWLzBrakxXYzVEOTd0NUlwRUNML1E4NmN1MUZCb3NmeGtKWWtZakxWYTNyVnFKWXR3K1BMVy9vYnJhWTdnVk5YSTB2cXo5T2d6TmpvUmhQU0RlZU5TdkpRK2ZQcXROV3NhUVJRbEdGeExlUjFkRHFrTjhadXFZc1Y0Sm9YcDloMGtEa1BUMmNSNTB4TnQ0OE5Wam16M2FqRTJNNDVzYnJldXdqQ0VzZ2R5dytXSVZ0NWRoWkxOZ2lxMEYxUHc4bDNUQmhscFZScHVrK2QvYmc4S1pMRFRVaHRSUXZFclBhMXBMVnBEdzMyNmFuTkk1ZjdPUFVOT2pwVUlFWEkwZ3BWTk9sTW8raTV6dk81SEJlYldUWjlYT3ptRWJiYURUeTlmZXhXV0VRMG5qaDBxcC9CZUtLdHJTUzFhWUxBaFNTM3haeEhUcldQcGlFN1NhaEJJdTBqZ3ZEZFBOWXBoNVNlL3ZibTZTT0xheGNIYnl2TzBGNnM1dmx0VXF1cmNDM0VqdE5ZV2JPNzVwZEwxUVJ3WW04Y1VtdEJ5L0JITnBLT2JUMnFhcmI4emZ6a1VsekdyeWsybXRiekVUWnJSSWRPU09meVB2OTZsUFdtdStMR1FuSHFPVXpoc2JQeUhmRmR1cHQ0SllMU3RLYUphUnI5NVpicXpMNXRvY2lTV3BLWnNzMGN1blMyUVNjdlZ5bUlVb3pXQ0JKTFZveDVmS2I0dmh3VDdjMUJNTGxOUmRTZStLdFlTenUxL2F5dVk2c1h6M201SExiWWFrQkNNcE5jRmpEMVBwMHpwbnZtTDRiVWlpMUZCN2k4S3NkYUp4MERNUjdIQW5CMklYZmxSb2FVUTg2b3FwOGVUTTNJYWtYcFF2VDJWZVd1anRFOGxxeFdIZEpzbUZGdWt1bGtDbTgvbVp0TWdKbzVhMG5hS292RnJDMU9hNzZab3VRK0ZnYUp5Tmt3dXhNNDE4dkt2L2k1TEhqTlk0bTFnZ1ZZNmdqMFh0K3FETTJLaGE1U2N6c253ckhxRi96N1NLcUQwL29NMzhrVmFiazVhMFkxSjJIYTJwWkpGQUlKN1lWOEsxTmpkQ1ZONXliSzVVeEwzYVNYMjdoc2IzalNjNUFsOTRMaHA5SVpoNjBZZjFUcDcvWjhreHBQU2d6TDVGSXg5cElxSnk5UnViWXFZZ2dkSnhVc2hLOUZSS3Nyc0M4NSthY2Fva1JST1gvWjJxSmZObGhvSXVibE1tZ25YTHBkT21qQ3JsYTFHNkludEl2dkF3cTBrOHVja01Kc0o0Y2dldWJrRW05T1pwOHcySHJ1bUlxVmo3U0RSczB0SStGZll5R0J4VTQ4ZkcwcHlEWC9MbmZyb2twV0xFSjFSL21xeVJlMHFsWHpEL1lhaEVRWG9Sbm9JS0pGLzUxZTZUWm00OWpaeWw2bE12SXRsODJRdUNFQ3lsSTBLNjQrbzE5VExGMmtHMFRUVUhOemlKa3ZtQ0tyWUVKTjBRa3Vjc2liVnlFVVdodWFpMVpTUklOTmZEUEQ1ZEs3T1FIMUhxUGttc1l6YmV3YWJSK1huZVMvMVBYWm9JQVJqaUdTU0MxTWdMVlcrNmM4clg0eG04eGlCMWVwcHpUSGZUcXVrMGt1WVhOaGFHSStRcHZjSXorYWVyTXFzMGtuc0R3SWtXL0pLTUpLVmkybFpsNnhyNm0ySVFpTkdqamtaM1BSMFR1dWZ2RTNPTk5oNXR3YTFGOWV6MkNJVjlxSG45UkJXTjE2Q1dMVElFRWMxYjZ6Wk15SUZXYXhwK2xxdjFXQzJORUlYRU9Sdy9KWmFYMG5MbDhrYzZiRXA2MGttajZrRnMyRllWbUlzdFR1Y3VUb1l0WmVqRlcwU0ZuSG5JcEl5VDFmZjZqcC9Va3hGdE43WmZIMHpadEhMU2oyVUtEUTJmRGFVNjJLK2ttMCtKdm1Hbk5mSmh2ZlY0NlllYlIxbE0zVFNSUkJaQWhvVjhxYWZlVFVWOHZkSkY3TkdaaDg2Tk5zQmRJUTdMVmg1RndrUW52ZzVydDl5S2N6M0NDUXJVeHJXNlpNTFY0d204cEkyZHFPVzlwajJVRStFWnlDQ0gzaGNSSHplK3ZacUo2RTVadWlMbzRkYWp2V3F4U1RjZlZLRXd1RzJwbC8ycUxYam90c0pVMmtvMCtyTzAwYnBOZkZoSUE5RDZXL2F3YVhDbnlWSk1TelYySXNscDlmUStqRTJLVFlMMVZoMEp6aWJUaDd1TmxTZjh6Tld0OFdQSUhudmIxTXV4bnBqc2FUcDNzY0ZZZENwSkkxSWFQUVFXK2QvTGYybWFrdk5rMFI0cWxDY3B4bURDcmJKeTN6MVcyS2x0TmJvNDhQYUlmOHVaaDhrZFc1cUt6dE1xeFo2dlZwOVdORlRoMUNNbDBGK1MvYXRlYmNwVHBtZWxPb2ltK3YwL3ErMkN3cTFOcG8wb3NmbUZaVzJZbXhDUDBpbDlEZTB6T1pvdEpZN0wvcGtrYmFucHh1NUFKMGpwblZUVy9zb1FmWWFKSFY4anlaTE5oWWFqemEzU3k3RVhDRzQxY3lFS1pXdXRFUFVXdFJ0RVVGL2NZYXFwM2ZPa2xxNmFrZFhxV2tzUGl3V2dieXFUVWhsb1E2VzcvN3dYWEJHMjV5Y1NxT1ZGRWNhQmhWNXJFdFJza0dvWVZlSUFjVGE4SUZoRXhhdFNkaWVkYU9MUXJOTFhKRXk1eCtoNkwvYVE2R3pxM1RJU2N1TUpIRTh5YjdPaWJrbXVuY2luVGNhSVIwUWhiaGFGN0FXRFR3M0h6Vk5Tc3BRK1BKSk50U0c1WEVxZk9Jb3VWcUkvYzVlaXhDQmZIckhsbWlRV3BKTE9McnhUbHRKSk5tdE9OYm9HbXVmSmVOTzk4LzgzZHVaSkhXaTNCUUlDczZUVUZCVnBNbE15ZmVVY204N3NjMGpuTXVFRHBqZk9aSkw3T1N3OHEwVGtKelVvMVpzaitXU2Q3cmxucjVFMG8yYU1WbldpaWdqQ3BVbFo3NkNXbGNTVkZURExJYkxiN0V0TTF4OHJKSFY5MG5WcE9ZeXJMQmVWU0hValZDcEFrZDRMbkZzd2xpNUcrK3MxUjJnaTkwNUpHbnloTnJZd1NmSklpd3NUMDlWQnpwOGNscTBFWkcvcXB2SS9mUjZUNngwNnJZUWlJaFNrWlFVajBiQmo3a3RXMDg0ZWUzL05XWVlYZ2ppMGVqWHgwMWx0SW9zV0JDVVVUNmhOakdxUnk3VktqZTBRdkZSUDlNb3Y5Q2k3UFdwcEw3R3hXRmlVNWhCM3dabUxVV0x4cVlXb09IdVozejNxRjVzUllncEhyYXh5NE05VmRoTVJIRXRQSjZkQmVqRldFRklJSWpvMUlRaGNreitYOWFHL21yV0s4dXFRNjFZTVJxc2RHNVMrVFZxeGtnemtrdEhYekkya2hsMVp2VVNuSmFYeVo4MytldXRKdmY3Y0tscVRSdzZJMG1SS3Zia0hyaTZMUWVqcDZHV1pibHZpNVoxSnlNTjNNeHZacEFleHVYSTZnNDR4M2FWdHVTMCt0U0RXT2lESGZOOFJpa3UxRFRZMlBDWlJIclcxY3FldHk4UGkxdUcydk5pTXZWZlFIamxmVzlxQmhJYS9VMU42TUY2eTgyTFNRTlRWTlRKWTFYTFVUbGFtNUhDcTlCd2hoQ1Y2ZE1KU2N1OGdwSHh1V3pTWW92N2hPVlVVZStySmxCYVRtSGlGbmJ2cTFUMytwc1pFUlk5L1BHSHRJZVFTVlRuVllrVURoWnRZZlBPVU83L29qUlhJbzFXdmh1dFZzUTBZVlk2YVViRHpucnM5VERLTW9xTWc2Zk9yVkQvbDNpcnBpT1BJYVpNeGVZZVhQOTBIWW5Hdm9TSDBKU2g4VWRxalZGNGdKNk5YVTBXQ3VnbnEwR3JzRzdoc0NUNXhvNFA2UklYYlRQdjJrazJWL1UwNDlSNkJtYmsyamxlYytyRkJZRDBJalZnc1NLbEpVbDhOVzU4LzBacXdKUlFtYWJDNWRwNW1ySGMxVkdsMk5iOFpOUlFVWEJ0RjZNVFk2bVlsdG16MVlxYlk4OWErUHVsc3dyU2ZmTTNEWU5uY2RidkJMRjBkOTlHbXhHam15cks4Zm8xVDVxckdmU1Q0Zk5UZmxHYkNtSFE5bEpDNWFXV3YwLzFLV2plTFIzSGs4aGtxMHJxeG8rcG1rckU0emlZMUVTY2YvMVpxRkgxYW5PbVlXYnFKSXNtTXR5bkhVNWlaTVZhQlJ3cUMzbXFJeUlsK0M3Rzc3a1hzMExFMDU4NzZadE5SQ2ZxVzl2dEFxd0R5NUJpaVEwcytZM2pWMzhpOXJST0Mxc3I4c3ZKS0ZocHFVNzVveGl3U2JWajZCNDhtUE41UkI3Y2V0OFp0Z0praktXa2U3Mm9UWUVwcVhIT2xydDdLRDY4dGFZaVRtVUlsVmE0MDJjczlzNXFDczMwVzlGOU51QTc0YkNOSUxjZzFEUytaN2VyUm1yR2NPangvbnNwWkZWalBtVWxmdllXQjl3dkRWeFF0MnB6S2o1OFNYbXpWT2h1ZTB4ekVXbXlram9hY3Q4V0dBdEM0dGxoTFl2UzJYemtsWnRnSzZEVWNLWmwvaTQ2VW5aWmViQ2kwSmlSVTl4OFpxQzRlMlMvaXhVZWwwNVNMcnM5dW1lY2lYOWlZRzdsVFRqeG8rU2IrOXFmODc4aW01bzdHenBTdm16b2ZGV2t3Y1FqaXF2TkZtdmpOVWJtNzJvZU0wdDhxK0RGWExldFdGWnNKdVlnR21LNmxFRzZ0VDQ2OUxTS2ZxZk5qcUZKTDhTdXhFUFFkOTk5V3F3amg2SXFHbG5wcWZOUlNmSGEzZit4SVdRV2JtSnRlMnc0QllTZFdLc2ZVU1N6Y0Jzamp0UnZudm0wZlJjNkxOaXBsNm5KSXRnc09SVVRQUm1qa3BlbHA2cXlUMmdlVHBQbzZleFF2NEx4YWFLbU9pcGUyYmIxQjRmelRzY3RaMFBuVFN2OWxSeVNxUzBzNXkrc3hNMndWcG54MTVqTkZHYXVCVW95cVNIbTV1TmY1bk5WaTB4RWlnaWRwYzR6WHBYakN0RnlLZTNkNjEyaUxVaDhkT3BNU0tKVEtzdE9lMitLMEd6aitUN1pJcDFXYUVGc2luS1oybmtYdERocWxYZzdTaEtSZjZxcjZiT1E5UHBiMENLclJTTWQ5V0xRbGhlTnVtaFVIV1dpY1hRWDQzc2RZTmhZM05hNVdMeVRSMDNTYk55TFNZcm5OQ0VwbEdybFdWSmJwOW9pbUhUdU50ZjVNeGVHYU9mUHZnbXlCZzhpd3NKV29MTHkwbk55V1MzcFkrZGwyYWVOSXcrSGFTS3JIdzVIQ3dTMnBIdEhrR3BLOXFrMTdxVU1wa1Z2OFhPY01uYVVHMlVjdENKVFBJRW5OaFdrcGNJUHVjZ25XaU5FMWFiWExqZE5lb2ptMUJjNzQ3TDBLSXdZVDAxYUpPZTgyazlXZ3g0czBxdEUxL1FxU0tmWVFSZmpZK0RSbldrWDYwTzY0UjZGUFNna1ovZExoSlUyaVQzSU9oT0JtUm80dGxqdVhvT1BLcjhFalRIdWxLMDZ0M3daOW9qU1JyMGRCSk50QWVZa21PZ0c0bFlvY1lURWFDclNPTk41TWF4cjFGczBHS1hZN0gwYXMyMkppZ1V5a2t3U0wwdW5kc3RuakdyV2d6eGtwaDgza2tqSHNWTEVWVnVOZ3NqZk9ndkdkNThXbXlEWDg5a2U1SG5JL1RTZW1iY0xXaVAxeEVORUROVDVxVGwxbDBNSFhqVWdzUmVldHk1SW9zWkdUa2pYcGVXdElxc2RCMkRkY253YVBGRWxvcS9ObHNmY2xaY3VmT2hGU0NSZDRtM0phSVdTMVp3VURoVU5OTkh5aW5SbU4zcy9yZXpnMFdHaHJUbTZDVDZiVG1oclRYOEVrMkZnY0NwQ3B3aUZMVGQ2VmtxcDkxeVJUVDR0ZWJDT21WUERTOGwreThrRm5oVkJta3pLdFdRbWh3cFBLbllvTk4zM25MOExVb2k3YmFjT2pMMnkrT1J4YTJvSS9RMDZTS2RWamdVUmFhZWVnS3hLcGp0T251USthUjFiQjhxckxtZlNZK2hXckhocENKcHJGSDh3d1FJc3NGNDRQSXRIdDJvS05WTytwVmRFVTJrQ3lOSjZ1ZEdqVmF5QklMWmpxUG9pYnB2aGRPUTZ4OEo3ZEpxc1BsaTd3bHgwNkVuREdMd2NuK3VrZkVrdGV4Tmd3SFBOREpEeDV2NzV5VHMzVVJ4WjRXTVFSVjcrWjdwdElzbTBRNzVmYkpsaFJ3Z1RaQjkraTFhVHFuL1ZqbUphYkxGRU92RHg4dXloaVdXeFFWUzM1c3M3Qzg3dm4zQ2NPWEt6VzZVbHExQ2pmWEpQYkhRNmNjYzNWNVYrY3JVRWtXa2QxZTAvU1JUYUxranhUSzFpdDJtVEhhdFRVU1Urcm9kNjZldFJ1a2s5eXRJZE4xYVdER3JIMUNGRU5EbW5EUWk1eGpwdGplenVtay9wYVNXYlRtVGtYekc5aWtzUElKbzlKaDlVK3RQWC9HOXdrNUNLTnk0cGR6QTBsMWEwK3g0ZzdmQStlRU1hcDJoVkp6WllTL1RhVFpIWnpUV2FLTWUwVndiV2lQdmJBN0NZS1VvT0ZqQndiWHZxakxGY3QxV3NmYlBrWlVZemtVVk5wTXdwTmVkMnpZK0d3a2hlV2E1U1RxTHl6LzZyUlJDd050eHBibjh5dTRybFB1ak9xRFBxdmFDSVhxSUhIU3pKck1KS2QvczBSRGNIWmZmOUppcndTeC9kOHo5Tmk3U05pcEpFU2lQVHE3MUUxdGZVRWMyR2drVU5yME5MMUVicnhVYjc0VS8xUVlobGt3bUNJYVd2S0hKcHRNSGFsYTVHNzJmS1RKbnFNK3FETmIzK2czNkZxVzRWaUlOVTJuSHcwbXAxYU95bW1Ha2szS2JHOXFKL3kyM3pVeG1aeVQ2bXg5TXJPbGJDdFpMVHAzNmt2a1kxYWRKdm1sMFIvVmE2UVZSYmNoWVFqb1dQY1ZZbWtqTDUzblJab1hKSjFDUlg1cG1MN2tvZkRIcm04SEtnUXpjTkZ2aCtQVDE1azcrOTFrMXpOS3lYbTRyb3Y3ZlpvY2xSOEVsSFdQWmpPck10MDV2STVzMDBlYTNKWnVXaGVVT2g4Uk85a0thSG1CbGFoQlRWZldselZ6YWVsV1p6dlJIVVdzZG92NWxkalFkQ1FjUHlQU0tVb1hib2RtOGs5cjZCNXIrMW01RjdhYW40eUpxMitTS2JHd2JXa0FoZHVGbllhbDN5M3ZqY3o3T05TYmt0RTZZcTZSbDhXRXNGenRLcEZSVVFudFFsV1VBZ2ZhSVhJNzVyVzZyTkh6Y2JwT3RFRzhGc1RhVm5GaEhrdFduTFpXN1NXYjVZOUE1L1NraWlMd2lIMG4rR09KSXNHc0tDd21MeTVQU3BlKytTMWVSaE4wV1JPbUc2Yk5HYzM1ZFhrOXdhMTVKS2w1cXN5bTdSb3M0cmtrM29vTTM1anhGMHcxWitSMzlxTDlIeWJXWFhNd3RXck5HbUl2L1lza21MU1NTbUhycXczUEVpQnZVRFk0NU5jcTB1R2IzMENjbmVvUWZFRjRFR2JvZGFhT25VazNUNnRNSE1TUkNqQWhDSVJzZ2FMdGJMNXZCc3JValRGcjAzQWsrT2p0ZG0xUmVac1pMT0Nhdjg4ZVRFWThYN1QrOWFsc0ZXRFVRNDAydFB0UkFORUd2NjlFa1hzb3hJYkFrK2E1M1VVOHF0N2RWbTE4YS92cTlVYXRHNy9ZVUFhK2g0UGwxSVYzeHZMWm4rdzFVUU9mSE9uVVJSRmxHZEd2MU4vTnNCdUZnV2hNT1FIalU0RzJ0MHI3ZFRXa245cEZrMTZhR1dNbFpGRzluTFFSM2sydzJDYUlSRTFDZTVDS1U2djdjdTB5RWFZY3RGU0h5MHZ5ODJhSnl5VFhLRFNxelByNzJMQTBSeC80MHhwQkRWWnpFNUdIdUI5Q0Z3bXQvM01NWmNzSHUzUzE5U1o3aGpGaW9TaFNUSGprbHFZbU45WDcvTmJOcGo3amlzNmQ4eHBtUmhWakkyTlNoNHI3dHVBWGoxem1sbEQwa3kvYW9tM3hCSE45eE5ueWFTWDNCV1JZeU5GVzExenBpUzhYUUxaUVVvODdPNVpDRlpQWEwxemRDM0pKYVdMYTBGWjdnU2M0NTdmbDN3UHdIc2F5K2FGeC9yd1hhK3RGbkpVZnE2L2w3MmxNcXJxTnlPcjFISFZoczZVRDhkRDVQT2JOV1ZOcFIyOU56VEs5TUREMnVZV2ZxODVabXFzMUJZcENXb2ttaXFrck1VM2ZUVmhCRzhjMmt0TXorU1ZhYWh5UjBUMVlzVkF1TEN3ZFNEVWFKam45VnYxQlg2Zk5HWnRvam85UGp5Mk1vaWJtMnNKZmF2SDl6b2t6TjBndDFTZ29HcTMrWDFBMjJkRTFlOHRsN2ZKRk42WW0weEVPdzNEWVhmVW9pK3UzcXpNWHhUNHFrQnQ5Y3h5OFdiTUs5cXNXVlBjRnczVHhwRVZONjFXOU5qSCt4U1ZOSnJ4cW1hM2U1UTZuZXZUTmpnUXlGTVV5MU5GeHpFbi96bE0yU1dMYWltR2lLOHlYTFhSaGlzaEF4WnZPWWRwYTFhalNLYldKV21rSG5ucllmM3oycHVuVW9SVFpRU25MbkR4VjFacGlaMGpEMjRoeHNZNUJlYlZpUUlZa1djdnJRTzZVclZiTWF2ZWl0Q3Ria1ZYWFJIVE0zSnJXbytXbnlnczU4YnFGK1JUZFJqWnlQK20ranUzUk01dWl5cDlEd3pJMlVOanhNYnQvaDY3YW9iMGFZTnZib1Y5RjVzUW5SRTVKU05Jd3EyRm5NUE9HcVhPT2JXWE9RK1g1b2lsMTRVanpaMG16cG1sWjBYSnA2MGNpclJGN0JjSmhlSnB4VWc2K2xUMjV1bC9teVo4amg3ZW0xVnF0V29qeFUyWHJWaFdiQllGZ21EcEo2Q2kzeVhuZWQ3TkJxV1ZmMSs2TmF0SFQ3NmhvWDV2YU9sQ3ExYWxiV3JZU2N2TnFEclQ1MG5QNUZXaXdzWEt2UzlvQk9LNGVwRW9vZUpOMWFsQnJIRXN4YkVuWlBMUEk2NzRHRTJwRTQ3RHN5K1NPck5FS2dUQ3VIeUFnU2RscXI4eS8ya0pNUDk2bjNtTFdHbERVNkQzenZZYWkxRmxKSGxCRXBQU1ZucUt6N1hSekRzTkRUTk1GNE1SYUp5VGZtcGUwalpjZEtJL25FM2RYdFk1V2lPYlJHamxJM1VueTB6UHVWR2pMNW10NU0xTVdhR0Fqbk4vVWM2V3ExS2tadHlGMDVIZmNrOThWL0hhYVhOa3doaVE0SmpUaVlzSUNhY2ZWajFWemZDRFBiempYTy9nek9aWndTMFIxNlRTZVdSL1ZZYWlFRzQyWHJGeHlFblNyWFpPbmtYdUVDMCtkS21tWU1PMDNROFQwMXV3bGJiQ3dkU01ub3FjU2l0VGRXcDh6ZVdRZUgrQngxMEdnNGJHTi9jc2ptNEIxREJ0VmthYWhxMWFLMHZxOFFqZmw2Tzk4TGs1ZjNzSlBjQjZFSXBUWFNWS2xaNzV5NW5OeTd3TmJEbzFHdzVzM0lrVS9Mc3M0RXlHQ1lwcVR3V0dwcEsveE14ZURZblQ1a25YSTVtNUJaZHAzN3RKRzZ4OEUxSjFIWThNQ3lrR0Z4SzVnWVJlRmZtbzBvT3FERWFHQ0JOb2hCT0x0VWpVUjhRUGVENGhTajRiQmJIMS9UdS92WGFRK1BOTnFEbU5HRTJzYkc0Zis2TGtLUWVMbi9NbmZkVmJlMXZzWmM0NVdGdjVsenZZOE5IOUdZVzZaa2ltemc5RDFOY3B5SXpwa3YzckdNM2cxRmZmVXl1Yld3Ukhmd1BGc29STGlKdFFISUo0aG5LWWFRRzRndlJXV3Y1Sk5tcUZrZkU2SkpJdElhR29wNjNXa0hnVHhaNVN5WWpmUFZuZDhFa3ErMUZwbXh1bTBsbTBWb1RXanQzdE5iU0EyYUlZRXp0RVBvdzIwVHMycFNVcGpTTDNoMlpWWHZZNUNBNEtVc1RHa0daTHY3ZkR0SEdMTGdkUldqMFRrR1VTZTN3MllPVDlURmtBTjQwT0hMOHpUbEVqQzJ2cXg0aEg1Tm1Wclo5eThhckE4Q1ZuU3J5M3I5allPVUEyU2xNbnRZa3RYN3h1RURWOHM3SGVUV2FTTHY5dFpqL3VudnBNeGJFOXp0eDh0U1p2TDFtU3V6MFZwVGtsSGJrYk5PZ1krODJhaDU4NkxhTEtseVpxQllTUGxXWmRPWGFRUzNIZnlnMGMwbVhicnM4OUJ1amRaYjBaWkVlMWhOYmtja1Y1U3BNb0ZacWJORnFocCs3V01mQmhaYWJSQ0ZxVXJuT2R6RVM0cHAwV2tIQUxiUTBTeVEzUFVTZk5hV1p2dEVoRXlVWkhsSzNhWll5elJJRTVkYXBjekxJbk9zOW9tUXA2eE9WYjFhMzQ0Nk9TZXJseFFRekVyS09valpab1FSV2tqMGtuRkZrYnI1YkRyMWxBd2RtbUtUYnlhNHVCNUxJMUFXQ1l0Qkt3WTFkRFVqTTdwa0xPUk1lMitKUTk0YUpLTFFYRWRVNWNrTHRNMmlnV1JSellyU1puT3ZKSVY4YjE3bWFzbUZvT3h3ejlUUkhLSml1NTNzNlEzazNTalc5MXlmUnM1b1BDM3ltc24wTlJjOHJsdEdFMjFZY2RIVlBmTnkwb2JDcTdnZ0J6RlBwY0V5akRqRFhPMzN0RkVOL09uU3VZTSt6VFdJb3ZxQ1NicHBSQmxZaEd5YUtMVldwbnpOYis2NjFyZVZsajZ1RnBWM241MWhDS1ZDZGNJUlpzb2VsVnI3Tk5ub1QvcVArbWJIV3BHMW9IWjlWYVlYaVJSS09XRGFWajJveFRKc2VDd1I1TGNlZE1jam14RHg5R1huSVBpd2l5bE5MR2pnM0pwb1VyTTVlN2VSMXZlR3p1YkdXcFBXU1ZlRk5HL1I0ZjdEUkJEQkJlbXp1MHlyQ0FnUmVHbDBmcFNuZXdhUlNqQ1dSTnNNRWVUbE5SS1JVZk5UcWs5UlBmVFpNNU9WR3Q2M0lTWG1ON1NTemRKcHF0V0tnbW9DMFc2UlNvbWF1ZnBuSkwwNmJsS3NPN212OTBNOVo4VHBmVmd0MFVYTDRIZjN5cjJ6bDNHbnBQOXBldzJCdkVRNUZIQ0k3Sk5hWGJ1OWNYSXpMLzBKMEdlWGk2SFRkV045dDBGUWxvOHFHcWVhcDhwT1BtbnhCSFZ1bFdrWm5mbVBxczlRNDlhcmROallKYUNnaVdmQnpVMEZaeWF0V2dLY2d6VjVmTnJRTmQ2eTJ2OWpRcmVLVG5MSUtTbnkrR1RLN1BOZkdiTHQ1TVRhY0pTM1NsT214c1ZuSm0rSXlVb2w2anhhMDVTcW8wUHEwVGRTcHRoNEVQRmtrVXo2U3pxTTk2N0tpT1I2c2tjK0cyZ0szQ0pXVjV6REM2R00yd054WUdJemo2VFBXLzZwa1FKdjRmRVNUMmlERm9RVEZaMGRCNitYN0M5VFpRWGp4VkRJbFlmR2hWTFJLL1p4VkhyZTIyaUhIZXhHUUxLZWxHaXRmTlRwOHJiRy9tejV5MGQ4cFAxV2kvbXFyczBlT1NmelZKU25sNm92QkZGb3MzZlN0V09wcGF0TTJIVXVSUXlZMm1hK1ZldklNclVTZTFCcG95ZHFpZHlPdEZnc2RhMU4yOTgyRjRkSUpDeGNpdExFNFFVTDAycGZ5S2JPRkwzTCs2c21aaTNObHBSeDNXOWJTTDJjSFIvSnpsajZQbnlxbFAwWENPNHlyN3BFNmRFbkt6WXlHdkd6Y1BMSC8xcTBsS2lXOFgxODU2Uy9xZ3hEYk9UTkhaeHpaSTZpeHdIVmdyVDU2QnlWYWRXOUYxeFkyUDlxTkhTdXcwWWJNNy8yUWdZb1FoS2xrRkdOYzAweEszeEJIVnFDcGEwZEtjNzNKMWRVNnJjQW01K0dmSlFSNDR4SFVib2tsbTZEZWRHZzlkd2dpWDlYUVBnVUNCTERZV2p4ODlOOHpLNTBrdnZGaXlkWTZiNjFyamYyRVVSaXRyb0h4ZEMwMnZqblZtbDZ0WWsvK1NjK3F1azQwYURyb1dNWWJ6dlIwMUVLeEY1RTZYbXF4ZGo0ZXJyb25mTU9rejUzdFFlMFBoT0owM0o4cEY1M3ZjU2lzYWo5QkQ3cTA5QzFuRFNpNFJ5NXRHdXY2RGEwV0RZQjVEQ2FpQnNmU0hPWWxmZXZrYzFmRWE4anVmNlhjdUhwVnI1cEZWbGhHUXNPeVFrRnNtWW5yOWU4ZVdsSFZuUjVNK2IxTVNWU1pvNWlsL1RadzhDWVBOcjl4UnhwRjlQdmRTRmV4ZDRRbjByTG5Mc05Bb2kwUithSHd2Y2tuQmRSbnlnd20rb2tkV2hKbjBrbnVWekIxUEs2ck5Db1Q2U1VrQjVWQXY0L09yZVNUMk90WlNMemY1Z2ltdEZuNFUwK2V1U1QyZUFhY0llRU1MNHRVazVXWW5wUDVLeTQ1M3JTTS9kWm1XaUJWam8yUFI5NG16eGVtMnNrRjR0N1ZycFZiazVWa2o5MTZnM1RMU1gzMXRsRi9RdEFFMUxVamo5ejBteXI5Ky9rczJjMXhwMmpTUiswa0QvOVhYV3F4a08xbForTmFUellMblZPanhSSDdscnVsbzBzSkl0SWFubmF0TGlLb3F4b0MrNzBwYXRhMFlyUm02aEJtMWdra2gzMW1ueVNSYVNDUWhpVGI0SldaR2VrZ2N2TmxYOWFpNkdIc2RTbVd2WE9takh2b0ltcGIyZ0RwU2kvT0gwRnRrdzZGcTBSeGZUVG1IeW9TemFJVzZuK21QOWlzSFIwVlVlWSttUzZ5Mm1DU0dXTy9kNktUblFSU3JGeXhPcGVhdGQ4SGNOL3B4MmJqc2xvbVZ5NXJTS045TmpvOCtjY2NXNHhxNVoxVVVsc3M4UEhKdDVyUWhscWhxdk9wa3VKYXMzb3ozeXp0STUzR0h2ODVHWW5GV0wwRWNqQ0x6aGFhQ3ZTd1dBaURZM0hWbFRUTU5rejd4cnByUWVKTkJpS2ZObXRuRzd0SWQ0TVM5MWlGUWhPUUdzS3l6UnBzcXFidTFFa1dGa2xXblJTWkgxWnNWRHdYSEpaWnFqZDJxenBaN0N3RW1KUjViVGtDdks0MTgrTTB2VmlzUlFVbnRZVWYrWVphQ1dyd2QxT1J1dFE0WngrYWNjY2R6UDFmMkI0emVma2g2TXd5dWxhdFpxMXQxVHY3Q3dOaUhxU3RNNUxvYjZmMXF6cHRlWEtjYzZYZVRNcXJ0VER6Vlk1TmNtYVZkYlE0SEJvWlNHbG80NUtpOCtoQXE0Q1d5WHJxMUFKTkkxR0VwaWQ3RlN3OHBiYUtFTEV6dldTbUhMZjRJNnRKYUtKejJkV2pIdGFQbXQycTFlRHdPZ3ZqSEJ1ZXRKYU02SHJRbHRXb2dWWE9SMzNKSXVSNGE2dm5MYVJWWWlEeGlrMXFTTlFhclV6bHpOV1RGU1VQTjR3WU1hdE1ReDMrWkpmWU5vZkIweDhJSFNrdW54SFNZSUUzbEUzL21ySlBlT2cyTkgrOXREMEp1SHA4bHZROHBUNlpoSXJNR1p6cmdlZHZHUmFScnMwNDdRK0pzbUc1WlJtN3F4emRHalNtdWJsSkx5K3AwM2pkQmVyaHNuVkxYS0lRWDcwaThYeWswbGttNWx3bjlPbWRWcUIwQjhRVWxSTnJFMDRWanpQYU1JdkloY2g5NHpJOXBESXBMK0xhSHpGTkVqUWgzWEVLMVMvTlhKVTc2cTB1Skl1RHg3VmpqVnJRa3pYZlJMTnVJWE5ub25wRkVLTU5iUGJ5UmR0b2ViVzUrWXN6Ky8xYXhzbkQrUHozY3pMMXdTVlpBUWxnc1V5WXBkMVBQZXZGSGs1am1haTJwbHBqOXJuTkltVEM1dkV3V1RYOWhUU1JVN2lCVi9oeVFMeVpiS1V6cXlldDJiL2NTS2g0WnlTWDdWbUdYS2NyckhJSVJKbXJFWTRKbVBUYVRwYWN2cWMxdTlubEVKMGRwNy9mQVRKMUcxTXZtMUFiMVB1ZUkwTVBhWlY3ZnBtYnBTbFRVRjczTS9vdkZMMXhZYnB1VXJsaXlXU09rdWhNN3pic1BOUjNUK2hkalp3MmdxZE9wcGpsNnVWQnB2UkhXRkdyMHp2dXJXOXd1Vy9TZ2RmRmVQUXBGUkt4SGxFZ3RPbzVKSkRKSy9OblRaTkNFR1pjemZhYW1QWlExOFNTeFk2SkR4bHREeVNPSG1sNXpibENaKzVlckhSVFRaMG9xelk4RXhKRFRIT3FaMGw2K2k5NE5uZlZlZzNmRzQveU1Lc1hKOFZ1UzVVcTJSTG8zNkNIVm9pLzBXR2pWQjhmNjI5NU15d0lHTFpqeHNhZWNnOHFaYytySDFCTW1PeU5oQ0JZWWRNVSt2RDVhcFlwV2RWWTVoK21USHZkU3FwSnZzTFdpb29OZkhTdGFWUStUdTFkbkhwRS9xTzcvVnFLUVBScHRpamhXRm5rZ2RTdlZsZVpFRW5teGswZEhwK1RVSklmTmlrNlpwOFRhYWhzRCtKbmhZZko2eU51OWpxTW5mVEs0eXlUMklVdjUwZXhjTk9MTnpaUWxBNWFzcFpiK1J4NzBIanI2cVoxV2RTUjFpeE4xRUs5MDVVZTJUdExYMVlOYUNLTVFmb2ZOb0phSjllckVmZUpFSlNPMHZPVmlUdE9pMkc2VUZuR1l2QTA3MS9ZclRib285Y1JPNWhKL3RMNDE2N21DNk5qdzRJMTVKUXEzSk5UZk5acm53U1JlRVlrWDhuVDI4ei9hSStQanM1ZSttVE0yb1dKaUlReXM5RmFiUzhySnpxOVdrUG5IbXpLMWtrM0orNnFQc3NtRzVYd3VVRTE3NnRLNVY1TFZxT0hsRHNlY2RsNzJlczg5dVU3MjZTU0xDRUtLWWlrb1BIVWVsM3cvblRYb2o5aGNKT04xdjByTEVFbFlpY2hab2tRR3dhY2tiMnQ5ZlZVYnZtNEdaTitTalZxdEhvMGJwMFBpeUNZSFllT3NoUTZsWm1WNzZiRkxmb1ZuTnVSbVNLTERRb05sYTB5S3BFV2l0U1N6b3lEYmJqbEt4dmRsbVl1SnFZZkM3R2gzTVliSTJpb1ArVlR0eEFxeGtmaGN4S0c3YlJQcm92YmNqaEFITTdrSTNCTWFqdml0M3Vvam5SZlFvZ1ZLc3k1Z3pUNnM1dUcxVC92WWpFZ2lCYXJTSVdqMVpKOFk1VGRzRWNXVEVTQTN1YXYrb00rdzBIK3BXcEtTV0xEb0x4VVdBbE1hSTVKNGVrdjJyVmdqOWxUUitaZXp5U1JhRUlJL1VuTldFUVRGV0RQb3FwdTNxMXBiOU1rVXhZMG4vRmROUFZ5S2JVMCtvbGFFVEpMVmh1c0ZnZmVzZWxSZVFMcUhmUlpVYVdXblQ5MW1hc21wd1dQWFhESCt3UFJ4TW5GTkcrbTJlWG4vY2xpeHRoUW0rcGIvYm5GUjd2TlFaSm4ySWpmVWFtNDU2TC9MNGZVMmdEVGx4NVB0UmN0TmlsQzhHSXNWbGgvRStlYnlnODFKOG5UNXF3SGpRYUhTOVJSbk16cHNMRVVQRDF5N1JZRXVnMG1kbWhwVXJIbXZyNWN4b2l3Z2pNek5KOTgxYWFNMTlKMFBpdzJPUVRZa2tvb2ljK1gxR2xYMktwelRxUlczTDVGTnJicFJmMyt3dFRIQnRTVXhvcTFlaU5MMno2bElpbXd2SnpvelcrcUx4WlZISjZUbFZ5Wm16UXB0d05Nb0xQT3hxM3psTTRZeFlhaG9OSGFZU2wxWmRLK2VNS3MwYkhrVVhqYldOa3hQVjloQkNlME5VdkxpbmcyRlpTbW84MmVQclRWOFg1SGxxOVpKTjRxZWtOYm5OT1h5OGwvZXFmTDU5OU9SbU5Yc2J3cmtFbHVrRGRDWnl0WTg1a3hWbW5oTEx3SzlSSkY0ZktGMFlra3F5Q0F1VTFkTXFwM0swdXBuNXNlMGp1aU81SHFPNUhOeW92cW01ZGlRcVBCWXYwcEpBSzRJbHpwMEVVT3M1cW1xczJYTkkyVGFVcnBXZEVXT2k1ak5EYUVvK3Q5US95dlNNSnZPUVc5TElPa2ptelZwTmZKM1dTZTVXVUVidkVNSVhWcVZqdVlwTXZxelRtTFNmUysyKzBkYkwwVklpNkZnblExTkZJbWdpNlhqZXpVbVIxU2d3aThhbGpYdzZ4b0tZWGpTVDFoRlVtcU1TdGx5MUNaMUhNR0UzenVyR2FNS3ZBNUJDYk1WM0pFMm9sejJybXF1aDdRcWt2ckpKOTQ5R2k4V3NXbEdxUjREcEZFdlVIWmVtZlp2WDBuOVFsaXdWOUV4b3k3SFJXR0NVVjJwbm1sNDNsNi9hTU1SaDZPalJkRFBxck5GUUhtVU4xaXBLSVZqVkhWOXh5YTVWYmVPU3BGOFRab2FpdExWSTAzelBWanV6S3VFZWthOUN0Rm0xalZVcGl4cVptSTQrV0d2cFZxY3RsNWlhVlBhN1VTVGVTTzBQbGRwOTB0TzRrU0p5c3gwb24yT29DbmQ2R2tqOTVJK1ZVNWNSemJrU3FRek9PSHlaMlJWNTJYT2h0am9oRk5Sb09UWlp5aDlRK21POXNDR1Q2bmJ5eitYcWQxWXVDZ3ljM05weitabTVMSmltY2FzcDFrVHBiYWdrR3pSazNEUSt3N1FYL2YvYVVvYzE1clZrVlZhUThLeTZKNHdxL0JVMkRjdFRObVM4d2hMK1IxZkdmSnVSUDh0OXJTZ1UxcDcxMk95YzA3SkNvVGZJelN2ek0yNUhhYk80OFVmeUticUIwOThIdUpKK1haNkFsUmpKbmszYWpvVm1TZmZCSEdtNHdXd003NWtFakxtQlNsM3dXZFJHNjJsc0Zocytnd0ZWUlhWOHlJTTJtUG5vUmt1TnVJMXNCVlJaNDBtbWpseXBPZ3ozWEF2T09mWEtDdkhHSlNKOFllelFiV3dibTVqdE44SVZIYXB5ak9SdGk4SG9tYkQxOWExQzh3NTY3Z1dyU05Wa2s2c1hndVROclJDeVNJdGhDS3g3NUxwQ2JUcWV2SEZtenF2Q3BUempUY1VramRlRVV5bHY4V3Nab3NsNFM2ZWg5S3lnMWJWM2ppRDFrb2NSek9ab3Zvc2g4d2dTVmF4Q1dValRBMmtoSnovdktrNysxcEJ2UTY5SmN5c2k5b29FNWZVOS90ZzNMWWlGQXRybVVtMUYwTzFScjBWM3B4cXB0bFFqRFJVTGV1V0lMYm8xTDVpTFJRUFNsL1hFV2ExT0tmRGFzU0V3NENLR3B5QXBsSVZNUlY1eTV6WHpacWF4cjVhVldqa212K213V0pDOW96eFRoTXBtNlM3U21ua3RXTXJFZmVtY1RmUkV5NkZLaXMwMGxxeWlubEtkQTJ0QmVndWxPbjJ0cVhwOEwwemFKdWd2Vmp3c0VJV3MvYWpvMHdYbXhTMlZyNlhMd1lpNW45NXRpb0c0aEZqV3NFZVVHMlErYVVhOWVTdEpRZkZUWWxDZXRBejdFTkRaU2NrUHUzOXJXYUVKU0JTR3BZOXpVdVNRUjFjak9RZU01cy9tWnR3YnlQVjh5WGV4a0o3VWdneGxwRTVQbFd0S21yeGI1eThiNnF5aUhyVDJ5LzI0SENqdWxNamRLR3lYb3V1MnRxSmZYclRhUjNMcFNTVHBzTVZJS241cVl6emNsS3M4OThIV1RQV2xXNzNFZnNlazA2SHhZU3hwTkpEd3lqb3hwZVl0d2pOU0dYeTN5Wml6aFdWR2s0cUdNY3NpYldxd1BLMXovMHh6MG1ja1grN2JRUVdoRDRROXVIeDRxcWt0bHREcGdXaFkxcWlEampwTHhKOVgyak9uSTlEMnNEeFdOeHNleEtDWUdRYTA5S3orY2dyRXB0bC9xMkQxRDNyUXQ4MjA3TGg5ZXdiVGxoTFhxOUhWeTgveXJGaHNOVVBvYWRTc1dVcVF0SHNuRUsrMnBLRFhQTldLc3hhc1ZDOVQ2STV6TGhGRkRTdk5HRGhqNHRMNXgzMHlNSXVGTXRjcVM5Tk9YeGtwYkVYUWhPaWNPelp4WG5SajFGdm0wZ1RHUEZVbkR6bTBjWVdmOU9tNmNtdXNpajlVMzBFRlBqWlg1TSt6Z1RzTW8zU0tscUlOclJMRG96V3lSMWF5Q3BxTjlHbmw0c1pFaU9uNmU1OGw2OXVMQ01XU2oyek1WcFY4enBhU1ZhZ2lRSHpjaTJTU0Zhc2FCckRSRFZLQ250WlkwY2xKZUZiVVVOQ3EwcTMwa1VYTEpHb3k1cHVteDFUdCsvcGVvaW0yQzlpRzhvaXNyOTFabjl2WFp5OXkvR0h1aFRKcXRXSlE2VEViVTA2Q1dmUnlqL0NHbkxzYUVTU0gvM2ZIc0dwU1VvZkVXS3dkUXdSUTlDdEpkTEwxTGU5ZHBIb0cvTlQ3NU05VmRtL292Tm1iZ1BBUVRlaWl0ZWMrbFZvS1BtMGxCdzVMUXRtY1JTckY0NGVwWHR5N2dBMDRZQmcyY1VDTXA2TUphSmZBd2RiUzJXYnFPS1BtNVFOU1IwZDFpVUI3Y3FoSTkxNGJPOHF5MzJGbzlsSnpXblpkcGpNTCttUHZZVVFjV05RVmQ2VHAvaWp0eGpGV1dxT2MrVmZZRW41M2ZWV0pRNUxLTTV4VlNlZVhtSm1PK1NQMndhSHVjOU5yNHNHcFE3VTgrYktnNUtDUTQ2QnVlbFJpWmJvdEhTZkVSTVdqMHZiUXBVNExGMDJUbXFTWGx1aWRGdGJHbDhUdjdtYXBWRjhXS2dUckJIQzhQTGJKaW9Pak4wVzBWYU5PNTJYY29Sb2ZOWEFOK0RRWm9mR2g5dEg5YXEvRm1uelVaU2ZhS0plYWk4RHNlc0dwNCtUYjFyZjgxTExhSVBzMFZVY2pwUlFkb3ZUV2pWQ1ZqSWVDUVZuU2pTL0U5V1A3TmlFVGNqWnJjaVhxeFc0SWZScmlrbXRRMVdONm1iY2V6dnBzMmFkWHA4dmtqcnhaNndpTytTV0VMK1lNTFVWcTVDeGpUWG5NY1JyZGVhUHJlYkJWMEVmc0xSR0tEVVpoTmFVdE1UblZIaThUWk00NTdpUno2dW5Dcm83NVFsaWJOQzhJMHFSRUhLR21mbk8xRWxiM0pRYXFNYm9vazlXaUdxa1BSLzFYd0pZTWFqVkVqeXlNczRRUGZLTXFOTkREM0lUQWx3K2ptNkNPWnNxRVFwSzNvRDZlZ3hIUzN0b0xNMUQ1VWRSRlYwV0ZTTmF2NG9qbTBFQk1OTjA0bTNOTUtRcG15Uys1UVdiOUtLQkszZTZIaXRSdlNnd214c2dDR3BIR2p1L3crYWY5RndleEo4UDVJMjBoUzd6b1UrNUd1eUVKd3NDOExLU0Vva1lWV3RYK3Q0dEpGTTZjYU5IUm90QStWbzk5UG02QXhDQlFVd2NwSWtFZm1sWmFzdGJTcmZvVzJZa2s5eU1tenE4MVlrQndIeUVRdmtPQkZITW9JTmZKSjdXR2lMWWZDY1g1bVgxb3NYQlFEZ0xQUVduaXdhY1krVUp2YmFoVlE5OG5OM0l2RndlSVVsZk5FbFdFUXNLbWtHUlJONnYxVkowYVpzbUV1bEl4eWxQaUNTTEh3c2VjOWF2dVdyVUdqamtrcHBKR1ZUc2xZOEl5aWZwOFREYXNhU1VFTXlpWHFMMHBEUjJHWWhMTHA5YWpFMmdnMWp4bzRvNXF5SnE5RmlsTE4xTmFwcHF4OFNMSVVxN1I5cWVYUmlaV1NWWWFTNGFlM3NtRm1PWDlqU0xHL1JMcWJhZ3JJQkd1aHNSTDFTckdhdmV0SkhOOEVwMnQ1NTdlMGltemlpRlRrcStraTlvaXdKMUROVWlJc1ZvdkdoRHI4V2VLeTFTK0NqZmJUeWVyU2syMEQxbHR6UlVONG0zbUp6aGg3elN5ajVwREx2SERaLzNPM3NRaWNGaGI1MWRHQzlSS24wVVNlNUVwMHBaSk9LNUo3b0pmcDhTM1NTUmJqUWhoYzNwSXlObitWWWExdTdiYXMyV3hHUVpLekgvZTI2VGZELy83VUJ5RVkvV1doVFhGNWVlK1NYMjFSQktkSnU3U0pkblNQZU54bGhKM3hZeUtqVlVjR0MxbTZud29vbFAxWEtlbDhHbEdrYnI1by9FUGlwMUdaOThlb1pPM3BvalFmQ3RIYVhuV2JYcUZaWXU0T2IxVXY3Q1lIU3pvcWNIZjdVZXJLRTcya25LMVVTdEVVVFowbkhQck0xRVRxdnBsbW81U1RoYWszUTg1dTdHTG9pOXE5Nlh4WWxtNlV5TWFZaGt6Y2tBY2RGcC9wWk5SSXUzdXplU1RhQjRXSDF2RGFkNkx3WGk4Y2pUK1htMEdxTEdrV0pEN1dwYU42M2RvM29qbThkdStOTXlabTYxUWprdjN6ZUlFQ2ZwSjJZaFJoSnFuZHlYMzZpVlc5YzJpUG9kTExPci9rVExTRHhoVUVsSHJrQS9FY3V5WExROFgxT2Evblp5aEhOcmdaNzUzMDNRYXdQN3JXUG5DTkR2akxTVDBlMW9kdzdxeVdtU0tyRktoeE9kV2pOYllYQmloSUY0c2ZvTmt4NlZ2K2hLdDRvbHExaVJCZmxLVXRWOXlnK08xU1RYeVluUkZ0SVJvb3YvMU9YTncrSzFYMFpPTmVqWVVBTWxGQnlJME9CQi9hck10NTI4RWsyQW1SQkI2TkhMaC9zbWhDazVxU3MySWhXRThPRDhvSzBVanNrL3l0cWtyWkJIT2kwRGl6VGQvWGZSbHI1Skl0SkpoM2ZLMVpzV09Gc201aE9VR3hVNmZLcllvajltZ1NmVzNUTDRJcHVFNlIrUzdiRVlFcUd1TnlRYnRsWjNmK2d0YTVtNVcrbnlobG1lWHExQjVyYWZUYkNZV0VvTFBwQkJzdWQzcldONzd2cTZrNlVza3IvWXpMZEt2c1JkdUFrMFJTUHlzYk5WcklMbFdMMHBvcGJvenBXUnpZNzVWak4zOXBpMDlpZVJRUWZOSytwblR2Y0paSlBMRzlPa3UyOU9rN0pKK3diQmFWSDNuVEp5MWw0MVUvMmN4QTM3MUZ3VlJWTk9oV3JEdVlSSzdvd2pEYXJkODh2N0t5OWY1MFdFRlBIZURmWVlpNVRJSUhpczkwMHJHVFNuVkhFQ0xBWHJUbHJpRkpWOUVjV0V0WjgvdE5xdzBXZVZxYWF0ZWlTL202RU9iVDBWWXRZNmpUNnNkR3hJTnFiOUJsYWpEZStpWDNReWdnaTlIU1IrNHJqcXNXUEZpYzlFOG5LRXRSVmpSbHhhSXBPeHVoZmplOHNkMGF0RmxrdzNOTnAvUDNSNnJjNkJoRmp1SHRMMGUraUwyYkUzR0RZTkZybHBxUGlURWw2SktzMm5hWU5SWGRZUXlpcjdIUkYwMno2RU1UTXdxM08wRXMzVXQzaEhyMEVmdmRhc1cwUmxGR2FjV3kybDZoQk9iU1BXa1hkbGtVdHVlaWFyRTNJUkF3UUhjMVJhU2JlclNha1Q5eVJsNlJFdFZKL3RHbEVWVGF1QnlvR2F4TWJHanpCelRpOFdhRFY5R05QWEYwWkhmYXdocUpudkgxS255WHFYd1NSY0RLYlowTitpNlJPTnA1dGlvSW9MR09TelJvaFNieS9XazJOeVNib21ob0w4azkwcDRyUWJOaVRMT0dvWkpOeDhIS3pQbDdiZ05WcmpIVFpwM1NmMGJLaTVFSUlwOGhvRnFTNWg4VERZMGFyUkxKZHU2YTlNWGtEWmw4ZTJFSW9VUzFOYnBUcC8rNjN4ZUhtWFUxUmVMRXg0MkdwVnZRY2hqNmZNUi9hRTVSMzV0YVYzWG1Uc2JFdnE4RmhxejNuS1RKc1FZbUt1bnhPZzI2TlJyMjRPUWdvaXFTYXoySkthbFd3K2JhN3BPeUIweHVZYmM2Rm43MXlPYkVJV09hdWZIUU84cW5lWCs4TnFEc3ZwczdtS3ZOM1JWbXlxZ04yVVhPUEVSVmlzdHkzcmFTMWJ4VktVejVZNmJOeTZuVnEwMzJEalQ5SWFJYVh6djU4MWRlVFpmM3hkYjFWandRd2lsZTJBV0JXZWdsdStuMXAwZTB4SXhxT2FjVjBXY0sxRm82VVVMSmhIRnBvYWRyUmIwMlVyTy83YlJIRWs1eHZiY2h5aWVPNnN1TEZacFFtZ3Rob3VnU0pHS25WZkVXQ3lwckZkT2d2Rjhodzl2VklXeFlYbmM0TkI0UEpIdCsrczEwdnEwaWlDWGh2ZHBJcHRBczJZOHl2VmJRbXNDMXNHaU5SZWt4MFBuWERUeHNkZXhveDlvd2lQS3BvRXNXSmducE9uR3B6V2lERXJxZFZoWUV0dlZTbUxhdy9ROWRlYkhnYlF2U054NmlCV3Vsb2g3VUc2YmFWR3UrVXA1SXV6Z3N5RlpJN3ZvaXEwVHhJVFRxRW9Ga05NTmF0MXRPT083NmZKR3ozSXFTNXI1WHFKWXZ1RVRaMGpNeTB6S2JSQm02d1dZMTg2Yk5UVE1MdE5Sc3pValEwdlNZaVVDOFg1L04wekpKRSt4bElaMVBUR0RwdVp6ZmtjVVJTTjBtWlh5V0xrYW8ySG16NzZpelh4SGtrOW5MT1NSMFpCUm5Ja24xWm9pbHNhc2hwSS9mRlU3NDU4dHNOQ2lXTjh0SG5ISGJ2aU9sbTNodkhWcFIzR0ZXZFBhK3A3TFFCYUpvQTB6VzdsTnpDMUxTR3pFNnZjSkxFT3JLT1lzaXF6eHpOR2RDQlVmUUl2MlY0Slp0WlQ5VTE2NEphdEVWQ05HdEVObHZNeGNnSHlIUzBzMUFXZmtTY3lJREw1UXFiOGl0c0VkV01qNVEySG9yOW5oRkNkVVUyaUdWa1I3RmlCTm5DTWVOUjNwU0lJbDZSQW0rUW9WV2xaUnhIN1dCOXltcmtBYmgwUGN4TTVhRjhTSWI2bXFPM3VpRWZWTlBuTGkyQmtKVUIyZzBIVmo2VVNYNCtXdVF2WlAzZjd3Y0N2VHBqMmdOQXQ5SlZiRW1uS3c5MmJjalJTYWZIaXJGSlVnVGZEWWZGMGtFdWEwRXhzbkJ4ZU5Yb1FKdlRvVlhLN2w5VStyYzRLQzlOTFl2ckwrZDdVYW9nbHVqOTFtV1JjTE44YUxYQVRoVEZWSkN4RGN1dWh1cXZDck5SMUwrZ2lkbldhZmpvMElrczNQRlpPbzdRMldvK1ZWcFBtNkhoMmZxVDdLbThkUG5ST3JWWndUVXFiUjdVSmJKandkdk5yRGRtckxwODNSTlRHNzJzbUl4U2JrdVVLVFZLMDljMjlpazZQcDgyYm5MK3FYd1IrcjVNU1ZGVEl5SkY2VE5UTnBDUUR5aXIyTXMxUXNpWGI3TFNIZUZKeG9tU0U4eWJTdFVscTltaVJoL2VUV3haTFY3ajFQcFRWN2FtRDBnYlNNWWNiTXdyU0dtNjVBY3I1bHF5S3J4cHlOUGg4V0l3b2g4VHlPY0oxQ3I2Vjh4dU1KdENteWwvSzNObm1YYmlCRjgzSXhvelpramkwUU1ZT1ZtNmVDOGsrakRjNmVNSXRKUjg2YUtPcTRuUStrWFRmQjdEZzVKNW9SSlBoV041bDNzK0JFTko1UTBjMDhqZGZuTm5RYVdrbG14b0ZDSy9NdkhPaytDOHc2TGdnUDg2bG9PcXJSUDVxdGZTUlZZaEJOQlBGU1drNFNyV2R2b3pYS1V1OFBDcEpXU2o0TStyNlNDemRWS1hJVVdhWVdMV3NPb3pEZDdmQ1U2SFROb0R3cFVUMHNtdzNDa1VRVzA0U1A2T25TZGwya0RVdVR1dENkTnlFRk92SGMrTFB4Q0sxSlUrclRxMzNVclJOalJ4dzFHNlQrWnF5eXpxZWJQdEJRZ094eDFUTFlNbkxuelk5alVsNmtJKzVKN0VZYUxKdmxSUm1XWW16WERRa2pKSklmcHE5L2lWcnRxS1NDcVdkNklwMHpjdVBLdlJYNUdOV0I4Qnh4V0VseEtFWTZTNXlsbEZNb2JvakxmRmxWeXQ5VlZFZFhJdVFsNXNxTDVIVjFrUzV2dWFYcUx3U1ZaQUZQbEFhb2tMVjhmOVBqeXRYMjBmNjBvazZjNGlpOEl0eiswMXVYeThicXpZakRjcUxsL0ZSdHcydFdJemRHOW0vRDA2R29kY1dJYVRudkhmdVJUWk1JWncxOTBIS1NYcDhlTE9Zc1Exdk5YLysrTCtjdWRSeWVVNkplUEZ6VnROYkNzTnNKL0NoQzZnYVkxTXZ6RlJZYkUybFRkTVJZa1U3SmYyelZXRVFPUTZaOHNWb2ZUWGZTdFdJd2dxSVBsSnIxa2xXR285aFRPNXFEL1lKUWFIQ29obHVURVRHOHo4djZyVUJaRzIxdi9sM0x2TWFLWDdKczBnMVk3aXlaWFBmQ3JHeGVHaElnaS9rTzlySDBxbDhIV2lHeXlhL29UVWErZFQ1VytMTkNXTm5ScE8zNUZNKzB0WHJVakZqd09TbkZORFNBbElHK2k3YU8wTHVRbHQzMExZNmhoRm9nZUYrWC8yUTBFNXNjZHlod2lpb2ZPbEwyR21GZzlDcldNaXo4TnJMcjN0TVpGcUU5b3FGNms2SDFNejlFMmpLWjV6M0ZpU2Jqd2tqb09RczRXQnVWVXpEeXloVmRQalY1bkx1RTJwZlN0N1pvek4waHBuZitGMk5qWkF3UTQyV24vMVJpTk9pelFzU2hlT2xlaXF1aDNRTzc3NnJFaVpWZ2hwRlJPVzdsMXhOc0owSVY2V3BiMm02ZldvNDdSYlFiZzZtVHBHeWFDWjI3NmVvK3RGNDQyVlZ6dVIxZWFtbFQ2ZkZvZzVwbkl6RGh4c3pDdGQ3SHphUXFwYU9tbGt2bXpqb1NWamVxSXBzUWdYM1RReUpRWlhLV2g4WnIrTUpxOE9wSkhicmk4YkpxdjNnamkrSHZhR25ZTEswenFmQ1NGVnB0RUdwdlJ4enBKRjNHZzE5SFgycVFNbThTRUNEWlJmV25vYjFkQllPbkc3cis1SEZ3M1UrUFlUeGFEWWN1RFRqM3BMZjNybFgyUE9iRDR5RDZzOExEa2xhVHNMaGNIQVRDZWp4MEswditiWTBPdWN2UjV5N1RsWjQ3alorYmFDZERPUnlTWC9JdmFBV0xQaDV0dFNTOWpvZDB0S1p6WU41aWNsb3R3L0svam9wN1RFV0lWNUUzVmVEazhWak9YVXp2S3RhZm0raVNiNlVLUG5ydURzYytyV0NWN0c0NWc2NkRpL256VTJjRFR4bEhTdlZmazNHNnZjaHdkaDNOVEZTaUhneDdoYi91T3BWcXZkOGFZdGdid21PMXlZK1Y2U3RWMy9MdVVkU09oZE8xRXNYb01WWXlMaXhzVEtSMmFaODN1cHFlbE1hYnhzbHpia2hVYkw0MHJpakZYTFZxeEh0R3ZxdEllemU4L3NIdVludHRGSXd0L3Q5Ri9hQTRUSGxKYW9UMGowd3FrdVBWandrWVB2NmkvdlloS3FMalRQZkZyTzRXdm5OVTgwWWxtYm92SEtNK250ZDFrUlJiUmhOWFdsTjZPbVpJMjZMY0N5a0d4M2lNVVZsOFp4VGNZMVorcHN4b1ZneTVudEtKTmViVUVrdXNxQitGZ2luQm9UU1hPaFh5VG1sNmlPYlNFU01QNDFENk15K2JsUkdYdzBscXlvK2FjbThWb0oxMVozOHY5cVNvZFQxSjluWTN4cW5SY2kwVkRRcFcwU25qMzVucnpSakZ5bTJhMUxtNk9HVVZmWW5Ea1BuYzVFTlF3cm9RclRkSzJWTnJTS3RmU1ROVitUcFZsdG9LUzArYzVac1BoOVQvYTBValRYMWFNUlQ0cTI4UkgvVlBRbVRFN3pGb2p1NnY5eU15Y3JNMjRmYi9HUXpLTnJxOWVqMk9uZVVjaWRtWGhUOVdqTDlXTEJkaEU4NU5ydlJsakYzeCtSQ3EzNmlLTE9QVWFxY2hZYWhTT1FOcDRrRmpqRVpLVmZlRGM2bzFaQjBYUTN5N2FtYkRRUEJXSzBZa21FUlJlb3UxMzB4SkpGd0sxRkh5Z3lpT3JSWWZQZitza213bGhISVI4R3FHcEtCY2Z1L3ZwQnJSaC9ZTklrS2lsWHl5Q092ZUh4SWRLcTYvSXB0QVVCc2NDdmp4MEc1cUN5L2hoODZDWDJNbEZGcjB0TEVrM3hVdHFPUld5eFdKQnFmcDRUbkorYUw5bSttMHBHam9mRGVvUnhhS0lxU1ZsZW14RUdBbENYOGswV09MTmxXRnB5K2JQUlA2OUM4d2tnUWF2aktjcXR0TUZnNExLZzdBc2h1MWRLeG1OWmxrc1dka1Z2cklia2szalRraTZqTFNFd2JPK2ttc2VKeVhqcUQrOWpKcFlkNnE1bGQ1cFErSDA5dnRvRXpUY2NtUGl4UTN5cldQdkNOdGZmdTB5Wm1MNGIxVVZKNjF4RmpZTGhNTFVVY3VVK1hqdFVUM29rcTFqUWhsOWFDT3JVaEpUNUZ2ZHpNWnI1SklzVkV3dlpPYjBFRzg2REhtdmFReVRPcmVwZjdQTkh1K1RUck9LalFyYmtFQnR6Sk1WT2tRS3ZGbHBwWmNSNHVoSVBMZTM2WUkyMnNMMkJZZHF5em1wRi8zTHZMaytkMEZ3UjFadGF2cGEyM0p3ZXRHQnBxRzVpVHZPaTBsS05YUnB6MnRNeGEwSlI1aVp0eFlVb0JiMnd1TzB4TFdxMWNwcUhJYjZYOHhPOXBFMkRyWTNmN1RDQ0xBbUpaMkd4dVVaclZKaWJqcEtOeUtnM1JIRC9hTGtWcm85ZGo1Q0U0Um56QS9oSGx5ck9YTzlWY2p1OFk0NGxiT2k1TnlLdnMwT0Fta0NVUU5CY2syQzhwVEdXUysweHNacFZxaitaWGVtWXEwUVhBMmRLMmxpcEFjam9WUXpacWJYS1NKdW56b202SFpsV2JHUWlqWTRkeDdUdjFmVFd2L3VqMW1uVnVyTjBsWHRRT1loZWxaK1VNcGFQTTNnMVAwWTQyZDVzNWpSMS9pMm9sUTBIdDZvYVhKbVhiNkxlY3VkVzkrS05uRzIzd2NocVRiMC9wTG5MdWZKZGFUL1pzU2w5TU5zZUppckJwU2lKUkx6KytaVVh1TUpzZXBKSmNSeVdiS1BRK05qc0l2WndpNFdmZDJPbEJNdXpyL3MwSU1tdi9wODBYblJaVlNYSVpac2IrQy9zOHFJeEpWYzV2WFBmQ3FEdXV4bE1iSnkrYUdGV21lcEE3alVHek50RHNJcld5dE1xZzNtSnBkMEFtWWk3NVNKYVphMkZjYmtWYUlvcThHQVlPTncrZUkxdFMwdm52OGFyT0VMR3ZiSzRKSXRJR2xwenpmYXhNZ2g4a2l3MWJhNzQwVHF1QXNpSCtKdWlzUldqeGFnMkdxU1BPR1ZKUGlqdEc4THR0TlZuTnM0ZHlTc3JzOG1WUXlPVFV6cDMwNk11OTVsOHRVM3VvU01UVVd0a3pXcmhma1pNVk1ybWIwTDBhc3g4WGtUUHMrVGg1S0pOV3dhbUV0SDNqUlp1bnBQbGNUZmVhcWlsWXBZeVpmTFVQekV6ZW53K3B1dWNZcStUWHAzeWYzaDlhWlNmRm82ZXFrN1FSMWNaR0ZabTFBbWpaeWVKNGZObEpXYXFKZjc0TllpR2ZwaFRlcmtMWEpUcTAzM0lIeEZOY2VQUXJUNjA1dHFCdEowN3psdXF6Z3RTMVkzNzJMQTNvZWRKNU1vb3BYcFg1ZTk4aEhpdnk2UUpHV2FVUEVKMmJtMkVJYzZSOHBKbEQ0VE1WNW15WWpXZE1mdy9tZmFia2t2cGxXYlRCYUVjUmswd3VaNmt2MXkvMzFybC95N3FxTDFxc0dzZ0drSnl6ME9scWxXZDJ6VmlrdFV4alptNUNDdHIwYWZOc0E4aFlXVWwxRkZNb1lTbVp0QTliWHBkZXJtWXVZSFJxZE10ZkptcmtUOUk1NlFyTGVKbFZETnk5SkpOMFR5VTQxcm5hQ1NSaE45U0tmRUlNaTJpSnJFOUFXQnV1WjlLcmMyRzBTVmFCMlFSbzFicG9pOW94MFgwaXU1WVdjeWtLSGprTjFZNS8zdmpLalR0TlZFM05UUDFhTEhRWU9jQ3YrMmtDRDk5WnFqY2cwbFpab2pnNVdKbHBGWHRFTlVVUzlhYmxpZ1hhRVZoY0xNdVM4bENIT1dTTHA5V2lkejZpalZ1aURLM2Fyd05WZFd0QkpOalF0RTZhV1dEV1VMSWN5VlpjT0VadFBidVIrTHhNcWticWsvZVRNMlVQQmRIam5oQmtSOHpQWE5pRU5SSUdqNVdreStUY2cvOWpwdUFXVm0wMDVaUm1qbDZsZWl6V1NYbGJMYVZhZFdOck52QkZSaGJVanYyZlFYWjc0aWt2TDU5eUV0SFJxNy9hWVlENlNoMHBrSWRjK1d6dkp5L3kvdVJFVmo2R3VicHNkRlkxcGZMQ1ZkeUc1TkxwSXBJcUh4djlFTlhSajNpQmhmMW9JNXVHSkdsNnRvZEJEV093Yng1bTlGNjlUYUliRkREYmhEMVk4SFFRNTFkSWZRMG1ZYk40Vk02c05pMFdaRldsM1FKVUladU54bzdKRjhkYVFxUVdxaU1KMVdhemRXRjJrRTBuNjBrMUJ1dnVyUG4yY3BDaXErU1V6Mk9tNUI4VWRlY1ZSamYwelJTczZadm82WmViTzlYR1M1aVlzZ0Z5Uk9zY2tOUTB6VXphZ1RTcUNlWGd2ZkJqOXdnelo0a2xPZFNMbUVrMnNIWEdxVkozb25SaVZQS0c5dEZwVk44SVlvZ1JWeEFxOEYwclZSLzVFeWJLQjcweGs2S0hodmZRclU2bTJnUWFJMGo1WmtjeXQ3YjVOS1g4NURrZmZGb2hQanZPUkRhRDZ2bGh0RkhET0lkQkd5cEphMFhKellmVkZPU2U0T3hXZFhEWnpWMFlYL1pvaXBSOVFXcnlSZTBSK1JsOFpBbGl4b1NDTEx5NHB5ZW93bzF0NGNXdU5XLzVHNnJncm12alNTc3M4OUJoM3pCcVYrQzlaRFZjSVNzeDRJNW1ycnRNZWJ4NVp4eW9UT2dSU2VJUHVsL3hxelNXYk5TZzB2TnJrTnh2OTRkcitoV0pUaTVOZEtzSlJWanZXclNzV0lnOERlVTlQV2dWMG1EOVNBdzl3RFVWbEZWYzhsaXpvUThLdHVBbWxVcC9VSEdhRExYVGZIMmwxR1RlUFdYT1V0QU9hNlNNeUdFbWpKaHNwTHM0TlQvOUJ3anNkWDVOeU9Vc0paQUprV2FSVUtUMS9Rck9icHRMczUyaHNhQ0tMZzFxdEcyb29HVTdvdFFPVC9mRVk1N2ZhU1FYclY2RzlqSm8raStEVzZiQllGWVJtSXp3c09tSnA5YWN6VjR0WThPQ0g2amw4a20rY0d2VjZra250QVhoREhUZEdocU9pRERHaUJGaklxRzJtdmpja1pWMGMyVVM4RW52QTVoQ1dqampzM0lxMHFUYk5na2hVd2FuZVVHa2pMT1E2YU9tRkZrbFdvRHVwa3RLeEh1c3cybnhjQnc1dnhzQ1I4RWZ2QmNmRTZ1V2Z5T0x3ZkpZWnBKSWJHNWt4Vlcwc1EwZHB3a25TUk9kY2lNbktPcWl6K1JNWmF3L0ovVkVvSXZtbjE1UWZOcktoeFBlZldYSkV6dEdQdHBRbWxMMnRXMGo5cUJTREJzUkpWcUU3cXhIbTBCOE42NzFIYXBJbWFSajZ1aWpEVlZyMFhoVUtPalBQRzFwZFdzbGVGVGpud2FUelNLYlJHNk5WR1haZEVuR05Xb1BpWlE1SEpEUngwbVpicHRxaEExZU5sQ0Z3WnF6a2FPcC9VemJSS2dmQm1YMG0vbTByUGRtakgzbXVXWFd3a21QZjhKRjIyVEJ3RXdXRzlhQS9senk5WnR3R3hXcDNhdGw0Y1AzM3NmRGM4VkhWS0JDdHFQTUtmTnNlS2xuVFMxd09USkZEK0lFV2dnZXo1Sjd0eUwyR0ErZXcrYzBlWlZhSCtwbGE3R3NEWWhENjdQSkd1QmpGZ1hralRud2tzWVZjaDJVUlI5VW91WHlZYllOUStLdEw1YXpWWndrSnlqcWxscGc1c0VTbWxoeURsTlNzditxK1FGbC9SWFlSeXk1SEQwcDMwa3RXSlE5Rlk4Y2JHRWVPZ2liYTJrQTkxWUpXYWJTRUo2NDBER3JUQ2NQMGJVd3QwOHZQWFM3NlF0aU5KLzBrYkdlMnNIRXZ1UEwvSTNPa1lUN0VZZUVNSlNjbGtwTzFLOXZtenBEdm92L0paWU1ZczVJVFMrVnhSSTM4WVZaVU9KeTR5UWFHenVZaTBtRmZPaEoxNU1hT1J5T2l5cWdIcHlNMFBDcVh3clVRN1RmQmFHcCs0OFdKSmQ3a2dwRTE2NUpWMm8wR0pFMDNKYzUzMUt6bEd0cTRRRTBxcEtONUo3aEVzMVdWM2hVR0JNK3VKQXVPM2xXSHJ0Rm9ZSGpPNjF4N3g3djhha2xFMm1IUWVpc0VscEprem1NMWFOL1dpODRWT3A0MHZSSmljelRacHdpRUw0VCs5aUltbWUzRDQrcG9iU3JkQ2I1c0ZnUWxWdjZuMEdac2VVUTV1bGNXRXdXaVdVdWNvUG9ONWc2NlRXckZWZWlvdHc2R0FOano0RzJONXNGL29mVjlBYVUrcEdacTVVYWFyRnRIc0Y3WldORGkxbkdPZWh2ZFRKL3hzb1BpLzArWDluQjJWU3BWSTVjR1psL0phczcvUTgycjBjdjdIdzhLbkl6WFVONXVwV2JlblJmM1F5Y3JWam9PU2k5SE8rTmlJSW9tOERURW0zb01HMkNUQnlXVlFSZW9oU1psYi83RlZFMUR0RGRJd3EyWWZXbHV2NmJFWUY4SzJkdlFJQ3E5S3NTdFdxSTRzWllhZ2pra0hPa3pOdEhrVTQwS1N1ckhBcEJPVVVtQlQxRW1HT1ZZLzNLUkNsV2g3WlhhV0NETUdlWmkwQmF0UmNUa3RQMHEwdDgydEJQTDA5enI0cGlQcWliUkcyY2V6V2o1Wkl2V3JsYmtvMDFMZEYyNUY3U2RQalRtRWsyeExETVRLSHpaTVFsMyt6ZEtzYXJOTlNOUjFURlh4UytkSE9oY1ZDdFJWL1RvMGIyTWcwdDFQUlhZTllYRDZnUzN5UE1nL1ZxZW8xL3NxSkVtcWJ5NlNOMXNVUE9PZlMzOHpGaGFHSWhQaVdtbGxyNnRWaWI2czhSMUVTanZPb3pOcGorUmZGeXNhV291a1E2VW4xMVRrNXZuUWQ5VktFbFdhalhWaTBPZzFlT3pXRDBVWDlQOW91bFdIelZ5aFZXZUZ2NzZXNUpaaUh6R1dTeGNKYW4xbStTU0x4MUcyZUZoWkt0emlvMDJaTXkyYk5TVHAvVzJXMmpwbDhlTEN3c1RoSEhqeVZOU2hYditpNUtyNzU4M1M5UmYzZ2hpWVZvN2pUbW5wR09oMytLdkxRVGZVL1RhTTFLdFdJUWpGUnVNMDhYa0w1TG5KU3hveFpjalNVcXlQdUpZdWV1S2ZVM1N3M21mV0xKTjhRWFVKckdNMm1UQ1g2MVM1bkl1eUxPVUp6RDBtY2poMXJGb3VHdHpXNGNxUzlVMUxNdXFEWmF2NVRrYzFBeDk3aVJxcDB1a2ttckd3N0RsTUdySFk4bWt1akNCWmxFc1ZjTkgrODJGRnJveXNRZmZFSzVOeU9ocEhWc1RXcHZoOFNIUlVHRWxzKzlub2xWYWMrcElwdEdKaFdibElTSUcwbEI2NUlwT20xaWxEbzQyYW0rTzZZVmkwU0RjMzVhTDV1alRFZXptN2w1c2VSaElaOUNtcDhvbUlDQnEwVi9xMVk2MkpWbXJGUWtIRW1tK056bjA5djhsVkxVRVNHamRGM1hiQTFkSGZMSmFSZlJhVEJ4dWhZaFVjZHBMdFFZNFFLdkhsRVM3WE5NMWVUSVpmWGtvdTJpTU1EMncxcEFRZm1LNzVpOGdPUjlUM1hoNHFsT2syTHB3SHZTZEZEK1NqUVg4LzNJOFVsODdrcysrZVBvdnJyOTV3bW8xR0RsRHpkUmxTWnVVa05ENWJONzlINmFRZEJGVEt0VENXQjJNY1dPYnk5VGl6NXVwUVJlalNoSzYwWE5HWG5Iazk2SW1YOFRhanBsYkVqTWNzTVp2c1EvZWF1T1J1c1Fpb3RwZjNzSW9aZUhFVnQvV0VVTCtkeTdlVnFMTkdqWlZrb3drOTBuMnc5cFZ4SkZvcEJzaEp5eG9URkVKNnRlV3pma3FiM25zWnB0R1FzTk1OdkhGVGtkK1BzWlBoL2ZPL3VONEwrVUxYaWN5cXQxY2k5aExhZG9Sbmk1dGVEQzZZdTBmcWViUmFxSXAwM1IwZW55ZGZJRkRkUjZDV1Q1ZVcvM2g0ZW10TXpYdUFnak1UdlhYRmlvMFhqMFBndExGbDYrOTlOVHZqdDAzb21VWHhwOWt3d0pvdHJoTUNaeDVLcVZxZjdXZ2ZrdDBtNzJrMzk4RzJJUk9FTTZUV3k3elJtZStyeE1wTC92ZXBRd2xhZ3FsQ2FQVzF2a3g2WDI2TGFHcTlHT24zSzBxZlg5eXhwQ2JsNFZGa0R0VDZ4dzR4Y2tuOWpKdUZMenF6U1JrM1ZRYytud1NlK0dBNEZ4dWhyY1cvcFh1VFhlR21JRzZxZTBqOTVKSktqRVdpZzVweUt5WlNEekUvSlBtMWVxdERTUiswWWxXdTIyaEhGb3FOYXQzV2FlaStIblhLWEVKZGZJNnQ1dXBYMklnWG1oZXFzWkc5T2g5ZnQ3NHRISlYrbC82dXVhaWJvTnRRSmdpWkZTR2dwbXZKZzk5V2huSlJvaGVvbG0vS2tGMEc4aW13M0NidStSdVVvbEl2MnJwczJvdm9UV2FNSFhqaFRwM3BicHNJSVJDRU5rZDJ1T1doekMwTXUxektqelRseEVYbXFSOGFhMXRrd1l4c0xCVGhUOGszb3ExMjk4WEROUnVsSnY1bUx6WHpqZEt5U0xJUkljTkNIcncydE44bC81bUxVR1JDdWFleWZZSGhDUjNtSkk0dFFvUFBTbk1PWWRSZEpuMzR3ZFl5MTlLb2FDS1FnZmVaalZZYU1QWkFCNktwTzBySFI1dWxVNzlSL3RDcHk4anhoRm5OYXQ1dWhtaTJRVkVqWm9WcU5TT2d2UG5ldzFBazFxTjNpTlJIV2kxQnRnOU9vNlgrMmxBaWhOcWVJVUVHdTBLL3IrK3F4NGRLRGFVcnpIWnZJdjVKUEY0YktoWkwwWTByc1JnZXdkQ1k3cEVJK1RrcHUrZDEwM1JOcmtXTE4xU3Fzam4zMFVFYWZIZlZrd3RDWGhtWUhrVnQrbC9xa05ObjlST0g4bGF2cnVQcDZzMm9FT202VWZqL0ZLMUV4cEdOWHhHdEZISTg2U1gzSXFiTWFKOWpJUWtCRHFSbENvR05XY1RFTTFxTm0rNFV0alIvWXFUU0d6WG1zeVV5WW1iVVRhRmt2T1pUYjBuanRQL3NzTHhxZHpvSjd2cC8wblBvbGkwUmNsdnBPWlY0SUovbC85aGVRclUzazQ5YThpWWliV2tvVmg2VDV2REswSTBIVFpWM0dqZTJtNnAwM21aY1Y5N3lSdmZHbTJpeFRGdno1SnBUVlA4TmtRUFk3MTVQN3J2SS9Ub215Ym1qMVNqZ3ZKdGd4OUZvQ2tSOVdTajZzZE9INlZSYlkwQktsQjVIQ2xJbktEVVRFdDAydGg5UDhyeTc2TGRHbi9lMHhJV1dNNlNhNnJTclB6YmFjV2hGNjZmRm5HaFpDdnM0TFN3N09HU3ROT01WamtyR1pUOFBUL3ZKVE5QT1hhUWtSUkJYd2h3K29qSkd2akdMZytvTHFlMGZ1WFhvdEFtZUZocjUrcXhrWmswM1JFV3JDdFdMUjgxY0pTTkRVTy9mR096Y3V4UzgwNVZtYmZmVlpHRk1zaWkwUnlTd0pMRG8rSjNSb0wwdFI4RENyeUFqSFlla0dHa2pvUWZiWEVJeWpxUEZ2MEdJOFJReG14cE1NQkhvbmNPQ2Znelc4MjA1aUhlaHl5ek1GNHNMUlVQdG5Rb2VVYVpxeEdRbnRUbkxIMWxkMVpXNzVla2xaYUNpV1NpWTh0QTc0dFBTaktxOHNpaTBCcy9oYlBsYk0xR0M2L3ZkVENNNUhUYitYcjJWT0lZVFNlTmhka0pMOVJMZXJjT2lvNXVyTVgxMk5TZjVmMUsxR1pzU0NVTGl6NmFOalp6VERXTjBhclFFUk1mZjBscm5tWnRNVktJZUpsVCtETldpQzZJME5LUm8rNmFNUnl2ZkZ5RUlaTys1eWppUnQ4aGEyZFBXd2tYRnl3YmlYeUV0cUpGRGQ3R1RzdW5wTi90U2NuR2lYcklwdFJTUkdrYnFhNVRKZUh6cDNMMWFSVkJkYUtpck9HazlOUCtxeFdQU0tSbHFLMnJtcTlQbGM3bDZ0TFZCdXFabjJyeS90SVNrMHVpMU5lUzZLdFpxNHVSbGU3K3g5R1doQTFlUStyVms2dmxDWWhpYU9QblFZbkU1dklTakNzeVNUTnlPODR2L1pVZWFOZUpXSlVrNWt4T1lzWTFlbE5mM09XTUl2SkhlTkg5NGdLcFA1cFBsTWFYcnY0d20wUlVXMFBwY3lSZThURzYrUnpmZUZyVGw3anFtVE14TWVkUko3a2ZNSk5uVVIrNlAwS3pGajRjU096U1hYbDh5MTdSaEh1ZXNkalVqYmQ1Vm0xaHVGeW1yTmNKTnpFYWRQdG9MQlJRdXVkVnJIbkRLcUxiMEJlbkp1R1I0N0lxeHVncHBxK0I3Sm5QUlZrajluQk1IaThWdmFJTFM4anVnR3ltNWVQV1k3UVN4Y0JlZ2lhK1c3a2szaUJwZm5UYkpGcktObFlkZWpNNG11UmhGbkJCOHZObHJwdnFIRHI2cGR6eC9uWkdSWVBUeS9yZDhYeW5vdTV4SjZ1QjdTckV5U1JZYUIyRGNPQTFQa04rNWU2czRiZlZqcDdrTytYT0pmYUtrb2wxMk1oVEZxY1JBNjFRNDB2OUNUVmpGbDV4V0h4Q2ppUmxqU0I2YXFTOUJIVndEeVBFeDJkUWl3OVJoclZQUXhaYUlOWlk1OERHUkJtemdpRTBvM3lta0R2OTBDZklGRUo1NFhQUm95M2lCRnlMWFFyVE55T0xEUUZzK1ZUaUFZeFpNRTJQTk5vNFZDUGtrMklTeURZMU5qU1JzdE1MSEgxcG1jMGpkWXlGTW91TnppbmtpcDhYQU5SU0gxSG1DTmRXYjNGNlp5UnMzdy9BOU5mMUQxNmpGYU5WOE5CeUtmM01pcmxFdG9mTEhFczJhQ2JERGcwNFpQYVRXa1lwSSs4S1NmTmVjVllTVmRaMnAvWTRrWmNBNHoxVFFsczVGSzR1RFZsNlVua2syOGVMeE9nam15d2REL2JreG9mYXZRWWxDUkE5dEMxZitTbFRRUlRvdkpqMmpHNlNTcjRmdVFySENwMitneDZtS3VVMW5HNmZYcTRsbzZyNW0wUS9oR2F4N2p5T2tyeW5MbmFicEFhTC9jazk4UFZGRFpOeFdYL2dxNnVWS01ObStndnF4L2ZDY1BuUzhaLytvdlJ6Y3UvT1NMOGtpeGszTFZtTjdhSFJEeDJNM3lzNHgrM2YyMFNKZjVHQ3Vrajl5Vk5OTjBkbFdQZzZwTG5JWWc3RExVRTQzc0ZjYWJFWTJTMTROSjFhc3lxdWdtbkl6RFEwRGtOMHp1K3FubG56ZUMxRkUxL2RxdElWSFFYWVN6YUFiaGdvMVVzMlB1WDZlcStKSDFxZ2Ywa2tXc1ZMNzRoQWxteWdkQ1E5VTBORTJrVTZyMElIMWplMXJTS0xtdjFabUp2Z1lBamlhZnlwdFVYcWM2MFdzTG93NGw5NDl2TVRab2VITlMwUklyVE9vd2twMXlNR1g0aEtuclc3d0N0aThjdGIrazZac29GQTQrcE53azMwY3Z5cnFHSHVUMU5EeGtwcXMwcUZ0VS9rRXlSelkwRHUwTEgwc25qcU1yamU4MVE4dUpHa2MyYkxFNDFTUXpmQjRCdi9xaWNaY21YTHZsUlhWYWpXT2dpNjdoZ1FaVjVhS0lvc1FoOEhxUjBUUXFLWWRvdlVzMERIM0xTRktIblRma0xwcDZUbnhZa0RvSE0zMWtoWXlqaTlicjFlelVCZDFhVVhOOFZBdUhQaVpyOGlxMmcxbG5MTk5IaTMxRi9qL3B1Z1dISlRvVWNTUlpwVUxGVVVFSHdacTBsaVpjNU1yQ1RxZ3grMzNJNHc5LzdYZTRjNUpWY3pOaUVHOFNqUnBzazJRUlRrR3pacHdYUWlxZHVTZS9pdEsvMmtEaUswdTliRGpvTVYvb3VVbUxWbG1tK2MzbDA3SFE4RnBldk1tbUpuM1NqZkR6cFdTMWVQTWRMMldJQlk1THljUHArT1hYdnB0c2tMVlY5ZWl6Y1RsVktQWVdzNXB0SkR4dnlKRjdHU2JxVlR2YzgxVmVxMkQ2eHA5VEowMFk5V01zT0didzZpalpZUEpROWVISEVVMmsyVmwwcjBXS2crSDlOR3JFVFV6UGl0TnBDdVlWbGVxelY2aTlXc0V2bXZweUdRNWx0ZTVLblUra3AwM2wwWGl4VUV3NHRPbUI1T0gwckp6ZEZwcUxiV05scnJPTzV6NjBXRm9ReDdOcEk0VXZOTVI3T0owaS82bnhmVFJWaTBFR29VODFGWm1xcmV6elVSbEhSSjk4ei9jcUN5a1pHVUZKbWQxYTBUYUpvOGlyTDV1T2ZaUklnUW5Vb3BtMVQrK0kwM0t4MlZVVys5NHE4RXhMVGphbmV0QmV0TjlIUXJWbXZxNUh6Wi9lSmg1dm92Mko4UUt2OGE5S29jam1yeDNNZTJDc3FQSFlaa29RSHlZaEtkVjhacncrYzZMaVloV3ZGbERoNnROTkp2Z3hUVjJka2FmQ1M5eU9MNk5RclBzTEF0b2RPZWl4Q3FNVnBtelZZVm05Rm1pSVpYWHJDUW51WGo5U1lHTVdtZDBWWWxaSlZuSTQydzB6amtkSndxUUVYTlYrbHU5cHJmM29xVEpIN1dwRXc5RmU5a3dTamhzMnMwTm1KekJpbXphMFVwTmVhMWRFYnJhMmZTcTdPQjROb2RwYlI1QTZaTDFxbHMxYXdIanEra2RiSXdxMHBNelkySFlYS1J1dHhQSkdUa0ZhdGVRUmVqUFplbWpFWHduQ3VVcU5RU1RpWkwvTFhvcTBsQitYd3RDelR6cVZSYlpvT1pVNFppR25LSkdLckhhTEJYSDBqVldyNUpGNUNDOE5tendNTGVJanNhK0RIbUxHUjVmTVVTVGFVK1ZZZjdVQnNIQ3hyMmpaNktQVnJOWFk2Rmcwb3I1MVhQU2t6TnBDSUladGZzelNiZFdxVWtIZWRGdENHVDhaR1Y5Zk1WTm5BMktMZk5lZkpuMm9XVVpxZUxoWWRKajVTUG91Ukc1ZGFKYzdSY0ExbnBHdm9iSjJzRzhPRWtaV3dDK2MwaVVHMmUwWURRWnJHcXRJbXJFSDMrTnBLOURTUlRhd2Jnb29HcXRRS3pCajZGMmFrTFM5U3pUZVFCWmlzak5PdUFjUW5tb3pEUktkNW94SlcrV1VaOVhKdWFSTDN2SUlEc1BoU1NPckdnb0JzNmRJNk9aZWd5cEZqUlZFZU4xZG5ZUk8wWDBEamk2a2tjMlBqYUJiVWtQQ051OEdEMDlOdEpvSnFvd1NUWXk1cDZzcEVsVzRjS1Fmb2FKaFpvMFBqdzJlTWF2Q1FtTWx6NnVTRWVoV013a1hZeUl3aEhJbzlSZ2NRc3hPN0p2c0puL2ZTMGs5dEZwQWk4MWEyV2tzVVRTb1FpRk9LTWRTNkhoc1pMc3E1Y0VzVXZSVGF3anB0NG1HSTdvZ1FoQ0h6ekZmTHlsejJKdzliNXNaSythMG90WmVKamh3RjV1Z2dwdktzUFcva3Z1SlBsRjdXcnM0MVJ5M25OWmRaMFkzbXNJWGFWWmpudml6VHhwWDV0NGI2MVVuYVNPcHRSd2NwdzhRaGM1YzZUSGJlU0VVdnJLT0pKczJoSXRGNmppV05Wb2pZcUg2MHVXMkgwclNqZTBZdXRJc0l2V2cxL3ExQW1DUVpsNkIyYVJzdEFENGhOWWRiSlFqYTV3d202Q1dQRjU3RnpkQzNveHBPUTBrYkxHd3dIRnYrVUVtNW1EKzI0YmtpNVpoSXpWZjZhYU82WHNxRVliTEs4VnROa3hLQzlOMFR5YjZ6aVZkakowellqQ1FPRkozbGtKK2VxMXRhdlloWmxxeE85NUcrVGswWnh4ekZya3hVWHByUXJFWHFNMVk4S0RoNUhwU29rZHVYa3ZOcENLVXEzcjNRN0VXSVJSQ0NMMHVOZUlNVlhxOEF2dWFZaTk0THhhd3VRTnJSUTBUbUpNTFhPOXdGcmRUNm1kRjVIMmtzUkxXL3Zpb01KTnZJTG1IK2JObjByRTJvTFJLeU1haTJWWVZtWTN0TU5CdGFPaEwzQzFDOElXRFdIZ1FuL0hDTDh6KytJdVdqYVNMMXp1Uis1YTZTNnlXTFNLdGNsMG1MMG0wWW1ZdWx4Y2xSN0c2S3pDV3JrU1YwalZGRzZqTTltOXd4R24xR2l3U1RVa2xmdllpUFE0ek5ETEpTMGwvRDEzT05XODFHWnVJTVJxc2VRbno2aVdtSzBITnNVelBmeGo3eCs5UFJzZUVrcEw5UWtvdWpQbk5vbHE2bUVvczBkYXQ4VFZzSEo4bW5JbXpYTWRweTV2SUhHSnVtcVVYOWxRWGowbmpxU0sveThRYzNUWXo4dWRHOVhFL0piNzFZY0F1NUgrSkdxWEJGOTk3ODVLbng3UUZMVFZmWm9XS0RnOGIxblp2a3hPclZGaG9Dd2xGWnNOZnpNMmltdHlHUDhFdjBXSkFMODlZSzhyRlNEVUtNVTIxaXdmWStVMTVTU1dyVUE4d3R1NXpOeU56aEFxeVpWanBoSS9UenZZMFFMZER4blZCRjUwWEloazR1dlRhVEpiR1JSaVJBaTY4VkQ0OTVZelZhdE5oTUtFQ3dWNHBpSnVSU0wxdlk3QS9GUFcxOFdiS3pFV1ZFZ3NiRDJoc1dQM01NSjZyNjNlRlhlQ09iTzU4bDBDWDJzTVQxcFFtS1VpRVZ0Z3ZDYTlONEJlMXEzU1NwU3JSSGpxZk1UbDJsVG9hOExCS1dOZlJlVnpOanFRUzVyU2N2NlRNM0lOSTFqWDE3RWl5cWEvS1lqYWMrbnhsRWwyTWlrcjN5aXh4SFhpeDNEVVByTnRvSHdSdGUxcHlDL3FWcWF1aEpLVmJvL1RWNEpjRE1hTG9MeHdiWHFhcHZNR1BZeVRPbUhwZmV3YVMwb3FtMmtIQVJTa0tpbVlxYUx5dHZ1Y05MVm04MytMU0NtRU00MmNkRFVrU1Nib2ZDMlZlcGIxS1ZsQzJnOEUyb3RyTU9NUkt2cTBTQVNJdmova2szUndyTHl0aEo3VUJ2SGxJM1FXcy9WRDQ3L2Y0MjE2Si91VWcxbXREWmkxbGc4ZDN3UE5SV1lsYzJkbXdyS2pyU0hwbUhvblRmRW9kbGxQRXJVcWpGZSt0eVpqa2ZxNUZLL2FBWkI2Yk5UTFRwSWtrcm9iQ1hLc051WlozMGpGaklJTUVxMVNLSGxFRFlNVm02ck9KdXlXUnFyUkhaeHVpYkVvSHdtVG1EaXh5RHZCanJqUmF3dE9pSHBQOTBPK0M5V2FzY0c1K1FHamw2QzhJVGRITWxWRjhrZFhRcFNOZ3hWbFVtRDZOWTZTeTZnd2Rvc3NVUUg1MUxLek5HWXNMU0JSZlZKOGo5eU5EWTJEVFRjNFdvOHhFUHFMRUlRYVZPUzdpTHJmTVdPdXBLTjhnVXRRT200WmhZeWlWYk1HR2syWFdUV2JqczUya2lYYlVqZDNtb1JxdEFPV2pha1pxbmxBeE9XeWJRNDBhK3VWYVNlNk5VTVRvSTR1UW9pSk5zYjB0SWk2Y3F4Y3BvVStKcWVSKzZyUWEvMFN4WTJCOENheFQ5SmN2L0xyY0lIZGFIRGs3NnV0OGtUWnNlV09LVGpZcmpDTEcwTk9pU3VObnlZN1pxMEhjdXB4aE41aXo0ZXYraVAyanlpVVZNRlJ1WU1SNnNaYXYyMDN5K3RWaExLRTI2UGdtTWlvTStibzdkVTI0VXhxdEpSYVkyY2FhK1NIVkdoV1RzeTBUdWFYZGVVR2FzZVJSUGpUKzVTS01MWmVSMHFvK09SeGVqcEttL3phZ2lwUkg2V0J3ZEpmL0lMczFNNmk4MzJDbFdxYitSKzBRWEVQV1Jhd1YrRFBxTHBGQXhWd2cyQzY3Z0QyT1NEVWpwUFVPcm1QTjlNbXJQOXlhUFNyRTJlSk9lcXdlVU9raVd1elVHZDlMK2tpbTgxcGZ6WWh4WTNROXRKRVhYZVFTTHkzY2k4WHZKaWJqbGFsV1lNL1RacXhTWDhMSTV2SW1JdHFIYWFpaWlhM3dSZHQ4ODVGVkdiaEpJdkh1amxuUGxGc0hHSzFTMzNsb0dxb2pIM1NLaUpkdFgwU21xSnlVdG96enZOd0N1TjByVlhHZEJmMytFdm92RVRUNGZXaUR0N0hScU9xdThselZmY3BCNE1qT1J4TmFkYVgxcVR1Umx3eWJvaGQwRFRLTnFORHY2c2tFWkJRMHg4VnEybWo1Z3BQSS9jb25RWGJWb01GbitSYUdKTmNVWGpKdDl5Z21pK2toR3k2VE1HdHEwR055VlJoT2h1Wk91RUZ3cnhJdTZhMmxZVXRjdVJSVkhOTVFaUTFXYWNjWE9acEk1dXVrWWFTMWFZV0pwN3cwY3JSQmxkanM4MHVmSkpGd2lpWWJhSVJCRXA1SFV4dy9WekhpemdzT1JmU1NEQ1Nicjh4N2dNUnpVakpvWFk0aVBiZEhIdytNeTBVUzliMnNJNDIrQjA0bjVtVERXOFFIWERFR3hvNkZ3R3VXaTgxc2trM0lIeFk2ckw1NUVvMjhKR1FYTzBFZjRnVmVMTjZ0ZWFJNHRJSTBIUkVOcnRJNGk4d1F6Q3Y5MGxTUmVac2dDU0VFc081S2tIUlhNTHRJYVFwV2M2NTFRWGxsam9JV1Q0MUhISnZoV2M1MTRMZWkrRGMwanB0LzQwdTBrbGRyQmZLbEV0OEZoMzBGNVhtKzBRdkhxUnlPblVTZThLbHlib1JHRTJ6cUJZdWMwbnBpREhoMFdNclNRVjdMUlRYMVovSkpzZER1VDZWRVg5UVlpdUlETG90SzFha2w5eWVpa3FiSEpKdkJSUzZxd1BMZFVBckl1aFpONG0wd3Yyc0o1VkhTOEQwb1NWYUljbXhjaVJKRXZGaU1XS054dVJFYllJNXZCMXFWaUxvcGpWVWJvNFZxSTBpYVVhak1HVk5OeUsyOVdGdUpadmpaNWVrcktZcWFpYlBDRW5CbHNPbTFsbEtyRzRvMGxtMGhFTksxbldlZ1Y5Wkdsek9rdlA5bXRVcUh4RjhiRzZwL3NlWUd5TTZZYmp6VEZUNXRLaTNWbnpjalJPYmNKQjQ1R0tURHBlaWk4TnpCQXEyaUZSRlZOeTdPVFFPVlhOclBHajBzMW91WjVrdk15dThhSWwvVTF5eVdMajhVdmlWM0lkRFJ5T0dUMGNwcEwxT2k4SFEydU5LenFiWm9rL2VqMnpOb2hMRlE5UnFLeHBLTnk5VmVCdGI0ZkpOd0VraTBSRXVWVVhUWThnTE9xYXRzK0RFellhQ3dWcXdjeHhJdXppWVFTNDZwTm9GQlkxOHRqNlM5YXEwV0ZyZzNUVlNRZkpIUzdUV1VPVlcyMGd4SCtkcTBTamtTOGYzSzk1MEpIOGs5OUxtOTgrU1NMa0JnblYyb3BqYkNLdWxZSzRrRzFVY3YzVG5GNnFiUkEvSUduVEp5S0N5S1ltNFljY3FNdmk0RktTS3Z0TU1qL0tQL1FSUmd2R1hOb2hZZDFlK3J5allWbXJjRWhSbTZUQm9wNk0vZTZHampuMGNoRjlvOGlYVXNld3VDRFJwM0M1bFNZOEpYM05PTG9YSzB1clNrV1REWlNueTBTcjFGNnh6WkVEM0FiZUtWWmNCQnlLdE51QlU2ajV5eEhDL29WcXZ1TUp2aExIL0R6bVhERUpWUlVpMWp4QTF1aHg2L0ppY2c2NkhpMnA2U0c1STYwWkp6RDRVdVhDWmRSaDZWcjhHWWJlNTNWU1hwSkt2Tk1IVllrTENORkY2RFY2Q0pmczljNnRSMUVzMmlPOHY3R2l2MG1vem8rZ3hObXkyTFJiRnJiaFRXUnkvdkJscjRzMktMMWUrUkx4YURtclJObmRjVFY2cmpWZUhrQjJIbzZhSTR2bXlpcWpOd2lqWVRNRnlKdFZnZzVPcVY5V29zYWhXaHZlNTQ2WTlrQjRuelVrZUpITDBLeFMxQkJkYW1HbFRaWnB0Y2N2WDFXZ0tneEVYaVBoNDNkV3MyWnF6c3VhdWw5R0h4TTJnRGNKNVhLSjVVbk5RWSttemgwK0gxazRpMFQwakM3a08yYzJJT0ZhSDFHSlUwWEkrZ3FiblRkSU5NSVdzTmMybFExazB6V0sxVm04N3F3cEpKN1JoSTFXbDJ0UGpKc1BkS1VhVEh1VGpLVm9vMWVkaGsyTjFORDRMeGNQTkwxZm5kV3J4WmMxWHBOSzkweTVyYXRFbU5hdFNOcENzbjQwSS9razJpbW1ZNUxOeU5JRzFxZ1lWZEpCWTAyalRra1lmQmVwdnp4Mk5GWEJzRjRzTEQwamxaZE9ONWx2bThna2FYclJlUjVpcldRSkJaOU82SDBHS2M2MFQxbCs2aVN2Y3RIUzlXRmhETmFrYWFOU1JWN3dXcjVtcnluaTBBYmhrK3NkUllTVHFNOVdMbVRUbndiOU45RkgySVFibmlGL0RVb2xSRjdOSGFNTnRHVXJnT1QrK0d5VThVWHJOdU9oU3Y4MmpuRjVtYlJTRWpWVWp4dnhGR0VyUk9ZbEJlYmhJTlpMb1RZeWFJMEhvbnNKdjc2VmJkQmF1RlR2TVdhbnkvWVM5bDl6VGt0ejFpSmNFYzN5amRUMXFNSklxd1Z3bHlyQ1RIRWptWGl3cW1zamg0UnhOR1p0WTJHa3ExNHEwbEJ1aTh1bXg0V2o4bTFCcWdrOEdJcGJiNTRhbDVsbHdtSXFWK2RkRmlvN08rNU1paGFHOUV0WFI0ck1ReVNLTG5pUkV2NnRRV2l1ZlVJaVJ5Y0dHbkUyQ0I3bFpWV1Bwb2ptMGNObXhxbC9JMjJpVlNGSXpNSlFXWEppZXhpN3dYSnBsM0xtMml3YUdvZlE0TWZaTVZrMXk5SkZKR2lLYldJdWZHaWxON3d0WW5UeldPa2paZkZ4U1ovckpSb01ydEU3UmNxU09xeFBKSnNlQXZoeURma3VWZ2pQYlZ0U1djK2tjNjRReWFzV0tnSHVGNjVST1FTYnFNcUxwZGpvdFdjK1lQY1IxTnlHRFdxMTdUQ3F3MmFlMG9sK1hpYzZxdWdiTlQ2TldzbDluQ2JIS21uT3VRclRJNzVvOGorUGJvc1pJRlBTczZDVDN4RzNRK2JGSUo1SWVlYWE0Y21ETFpkTnRGVGRDcm1Fa3RzUWdzcFVxa3R4SE50QnlSSFVudDQ1NFZqYzd0dWNlMzVGS1dOSkhYbVJMNDBscEpJdG9iaVVWTDBOVXkrWm52aXpqbGpOWkU2ZE40YTZNQ0I3WUdwTmNZMVpaRFFacXJnZU5OakcrYlRBbFhOKzV5bG9DdzlKOGlsek5CbnQwWERsbXZxYk5BbGcya3YrMGppckdRN1lGaDNnYlVRTVJwbFRWYUxrUFQyKzBndklUbFlYVnRDZU55TTlFVXFvbUtuM2g0YmhXRzJrd1ZTK3VnUys1Q2tJcHA1dmViVjhOV1djYzJqRGlTS3RZdlltcWQ5L1JmNmRWeUE4VUM1MDJzYkh1WDVKVm11U1VlbE9Oa2pqVGVhb093ODVaSlY0K0pWL3NnNmYzTjBVakVHYXZwRlpwL1dTK0xFTERtcXp4aDdEWkJOcVhrNC8xUmp5ZTI4bHZCZXJPSE5ML3lySkk2c2FDOGZSSGQyb09hK2xaZTJiYWNrWGhqZmFOQ002ZEtSQ1RKSExzVEZzTklRZ09ndER5NGhXSzMxV05STWQvRWpyRlJvV21vMGlzaEhPUnV2aHNzWkJYZWljMmQzMVQ0czdyTmpWVTZiU0g4ZFNzNXBFeno3S2hRRVlobU4wOU5hVlkwMmlQamNxb3VtNEgwK3FjTnVKSnRRUG1ES3E1U0hqRWFadWl4NWNaK2FSemNwT1JWOHNXUmUzQTZGWWpjOFRHK2xZZTNlNkgwdXJMTG56RVA3bDIwWGgyMWRaWVhEYk5SZXAzMVJjY1ZJbDJhTDdXSXE5VFZhSXNEcElkZzFNZ2F1YU1UZU5VTCtiTk5HeThUdVJ1c1pXMU0yZEliajFlakoyOWpLL3kvYVNMdjgzUTgwK0NUM2doaHkwMTZBOG0wMGlYb3RJTFhJcXkwWVRad05TNFY2QkxWeUJMZzNwSXpEVWRCMUdQMTJhc3FjcWs1ZDBpZDFWc3M4R0JFZVZGVFQ1SXBmN05oYVVhRW03a2k3cVI3VnFoOFdUQkJoaXVhN1psdk1SM3hkRXloZXBKYXVLVUwwM2trV05ndmd1bjg1RTRSRFQ0VnF2OTdHVGljcW5abDQxS2xVZFZySEJHdlJCeUNFeVptYnhzbHpiZkVXa05uU2pWRFJ4MjVwbjNwTmk2SFRCc1dQand0V2JVckVhNjBGL2s5Vmp3OTF3K1oxV0ZrclNWYStiNHFGaDZMMmpiWDBZbWRWMEt3bHkrcFEvdkRSUXdwb3R5Z3JIcC94NHJPZ3ljdTFCNE9CNThISFV3am5WY25rNWZXYXoyZHgrSXh1WVFjelhYTnlJUTNMcWFtd1JNbS9LRkt5MllJNnMwME5VYWVjVFVsRXhYWEUySWNQTFJlZ1QwVVJUTmpzSWFIOXBMNzRrSVhBZUVZeDY4YlJqLzNHRGp5WFpKSjdSR1NpTlA4KzFBSmhSOWZnc0lOK2hXTW5RZ09zZEpodDFVY3dsNGdWWjBDT1ZZM3NXaEhEdkpQR3hFeFl6U3RLcnZDSktUWHR6aU5ubTZheWxZbGZJbXo3R2dQb2RwZVR1Z1U5VlU2cG5UdmZ3YW1vNlVJTEVqbVdhT2lMR3Y2RENSYnI0NGUxS3YxNmRDWEx5SVB0R2RNUGhaTE5vanU2dFdQQWVSRmthemZ5T2I2S01GNWk4dGZwOVRiZ1d4TkZQcFN0Nmd3dHZ1azZndjVna2FJRVhLQ0VGME5WbkNVVFMrc21kWGt4eWdneFl5NU9JZkpVbFhWNWJEQlNMb0xSSU02S1dLWjVtSktDQ3l3YVZCNmk3aVZkd2NOR0NjMlBqcUdOMVA3NU1pTVFac2RhNHcwbFpacHdXR0R5V3JVSUdUTmJudTVwZnhKK1hhS2lpc1ZQdkhycFdMYnhNN1ZPS0VKdFVyV24rOGxOSzlmdm5KRjVHRTNJaUVwMHk4Uml4TFRCaWJHVTJTWFg3NTQ5ekZXaXdjU2ZHRWdza2xnWTFlS3NNSVhBaWNpWHIzZ2hpUk1aaEtjTFVLTXdvMjhLaHFDOHR1Qkk2aTlXZUVNYm5JdktrTUVUWTlER3JnVm9RckZPSkp1Z3VLMmdld2FtTWlLbDZhTUpyZGVCc09OTDhsbjNoSTY5eE1paldhbVRiQm1WdHZod05GL0pMSHZDUWV0WTBFVnlUMGx6QnNQaDgvM0FzS1VYWTRsOTBJbXdYYXNrcThPQWZUZFVZYmVqQ3NmS0NDNjREWVNHRDNFdFhtS0dHemVFWUx1blFjdHVvaUxDQzY4S2d2U1ZxbXdTT3VqeCtWWW1iRUlZQ2RKLzQwbEc1aWlBUVhYamdoSkYwNUpIT0VEMmp4VkpkbXExZ3VCRk5qMXAwa1pZUVhXYU5DUXZMbUVqbkNCN3loV0M1UnhKTTJzSXdSYXFQaDVHUzhQa3RvMFhrQkhCY3F3a0xlNGNHcGdTT0pHVGVCZkJjUmcwMUlzMm9JaUNoQTk2QVdJTGxXRWhXNFREUXdUNUl5OENCQWw2bDgrT1JVNnVNYXVaRVJlSE1KRzJpbXBCZGhMRnJCZ0JicEdvekpmS3NGNnZIamRGMUYzaDRlTUlWWm9TQWhTaTgzR25FVXpkSUV6RGlWMTVyVVZhUHRJSW9YNmNNeTJZMFhsaGFhWGNTdWk4YjBTN0NXYm9Gc1RTaThkYWZSbjczQnFGS3cyQ1IwM29IWkxvRXJMYUpneEdZMzZrRWxYUTB0RXVQa3JsMmluekNISkdlK3NJd1dTL3FJb3laaGJmZWxneXIzYWlOMTVvNmlYUWNTTTl3a0RDcDlDVys4R09UY0lFMjhMa1ZhN0NTcmloNHVhdHhKTjg4TWt0R09TV3ZRWmwxbW9pTTFXRTFranJvNXlKZGppUmwwVEJkaUh5NktmeTg2cndhRTRMdVlTT3VocDFGMk9KR1drRUlJaVFOTzhGdEQrWVBFR0xwUXBTdE5ZU1ZlR2kwS3pKWWtpenhvTUZvNUhPM29pWk40TkNrS3cwb1NlTHlCWXZVbHJhS2hLTXpwZjZmU3RVeGQ5TXB5N1NoS3V6UmtxYVhRTFhRYmlWZWpIZW53WWhsd29UT1ZseklKSnZTb2lyVEhYSVVBaFE4N3RTTjBHV1hCQUlpOU9YZUVLaGhqckVJTjRRNU5lYW5KSXVyZ2dFWmh5N3BBZW91eHhKTnBBNERrRzZsajBibVppNkRjb2FYZE40b3B5N0cyb0ZJK0lSaVpscG1QYUljazRWajNoeHhpYmFEZXhUeFNZUWh4dWd4MnpmQnRHK3FpdlVCM3hZeVVjY0F2UHNkQ2lKRUoza1RpV0VTSnpMd3JLR0dNQWtrM2hwUXZUYmFGWGpVRzBnRnc0czB6TFo5NE9EcFZPWk53TmFsZTIyZ1pvck9tSk9KbE40TVRWNE9oU1hsbDRiV1k5ckF5aGNQSTFqUkd3a3B0bWh3V1JWbGsyaUVFYUwwMGxxMWc2aE5IMjd2UlBveWMzM2dtQndsRDVYb0k1dkV5a2wveVJ0b0IwSGlPcm10L0ltK2Job2RlNGtvYVhrbHE1SVFTNGFJdjYyUk1HZk5tbWkzcS8zQ0pRMVdKdm5DMXFPU3lpNU14T1hhSk1zT3E5TzRVWWJUelYya2VMVVM0cnFkUmxvZ3plQzRmTU9KZmVIMERDRVdtVURsR0tOU0lWMUJlZDk3d0xEakJVWWU2RFE4d2ZlQ0VQTnJTbW94T05CaitMb0ZodXA2TFdjanIzazFtSnNMUktzTEpmU3h0SHEvZk90YkVSa3ZDeVQyTzQ0ZHNMTkN4bUlpVUpmUmVXMmRWR21JdkhETjRmUG42QjJjMGo5MXBwV3F2U2FZaXphSEkrK1lkU0pGTjZEaThUYjZ0SXNjY00xU0MxRFlMeEUwSU5Ya3RCamtrV09ycmwvZUR0cCtpTXNzUmZMMVhuWTB2TGJvUkkwK29iYXdUUEdpNkJDbGpURURmdWlweGhiaVNibGpaVmh0b2duMC80ZzRtSzVvenludEVyRkttcjVKRm1uTmk4Q2ZJSlVybXJIOUppY1U5dzVJdlF3WGVoRzFnbm10VmF3cStqS0h0RjBVclM2Skl1SnRJUG1OQnAzSFNhWnRVWGpMNGdUYmV0SldrT1NUWnNWQmYyT2cyRGpkT3BCc1IxYTNtOEZpRkdIWEE3NHQyREJPdEpxNWw4bUYzZ3NRb3Z5VmxtanlVM2lZWDVHS3pkT2d4R2JhSk5uTHRKWjl5SzJ5WFhmaGtlTWNEWW9jUlJ2YUlsQ0R5NmxFdnZCd3BCZENMTmNtY2pGREl0L09reFM1dVFoTWxXWFdrUWp2Vm8reGtXajhkVWdybWtTNXM1aUloVmwxcEp5MVZGZHlEY2tiVmJwNUtDS2JsSk9TN1NXYXZqSjZKZUxhRkdWeWpwT2I4YVlrKzRkNFY5NWh4YzMzQU8rT2Y4TmovM014b3RFSmVndWg3a0xNYVhiZEFtWEpBcnZsaFlqblJhSldPK014MW1yTXR2QTVLSlErRmxaOHZxbnpxdEh5aSt0TGlTTHl6YUwrTDRPVHRXTmVRVVJRc1FmYU9OcFdwZGVRTVEyTFNCdmNqOGFzTEMzOEdLT2tRSFh4REt0U3Qxd2MwdzVkd0RzSFUxSnBwUXRCZU43bkQwcW1vT3ZMNWh5N0dnZGhaVW1tdEp1bnhaM1NSVjYzWGhud1hiTm5CVEh0SnBxV0h0ekVWZVFXa1lkRjcrTHdPU25PamNlSGpxMG1LdWlaeGVIT3ZKY3hOOEV4anBpa2hVN2VTODZHaUJGME5MTkx1ZGVSU292TnlDZlNtSG1wS2NpcGJyanl0V2U2aVQzcFNSTHhiZ1VBYlRHbzQ5SjhHT2c2eDBWS0dxbkhYanpGV21BYWtFdHFnMlVrRG81aEpqcm9zS3pFMmlGZ2hMMUZyQlFCNTlQYUd3MXBMMU1rOUY0cVdMbzZieDV4ZVlzOERJTFpGNmJScHB4RlY0Vk9MMXB2QVNjRjZzMERJUHpjYWoxbW1LZW1JTVhKYmwvcEpLdkg2RlRia0RHS0t6VFRVZFJlSitxOEtwTWVTVDNoRDdOQk1EYWt4QjJqa1ZWYUpVOUY4STZDUnQ1YlRWWXZCME5wdmpNbjh4VDV2T1dYbEFsOGlCVjZrekh2Y29wa2NPaVE5R2pNYUxTSG0rbnlVNUk2YmxNZWt1NjhKQk1sdlNRNHJCbFAzTWZxdFg1SXkzdUJVUHdyQ2hMRVhJbUJkcC80ak85YWk5TjkwRUVTSXZwdEVydmNFSWJ3ckx2ZkJZQ0x2VXlVWk9rejZ1UnNUUVhiZklRbXdxYTFwSjc0WGhFUkdVZlJSQ3ZGR0d0dVRoS01xd3BlSVE4b3hCSTBRWnNRallRalVYbkRSNjZNUkRXM0ZEaGh2SmF1Z21BMzBySFlCSkYydUJ5VFlxRm42alAzcTNqbDRmRHlsYVRna2FJTTNpdzJGaUx4bGFHTlJqUm9tYk5US0hLbThsaTBvRGhOVk43U053Z3phSWREU0tPT1JsaEhRUU1YeFdJaTlLRXJLdVFXQi9VcVVra2NJTTJvRzRZUk9qbk0zTVJvdG9yQllNZGRFYlBheVpXQzUra2o5OEcwTURoMk9hZXlTT0xnZ0VjbzZqWkpXZThORnFoWDBTZTRCd0MrSjBaSkRHM0Fjc05ndnlSZDBVY1hvWWU2QnlDRWJLcUxOVlVyVDR2aTBvWHBEY2ptOEluVVg1TDc0ZkZNYldRV2YrUnhlRGhhS3A0a0dFM1FrNWYrMWhPeW4wY1F6b016WWhJSElseWw4Um9GNjBra3plSUdUOTZDd2VJenBxNUlFWlY3SEVrNnJTSEVFbnc5aEt1NURrUjZ0UE5jK2pIWjd4Q3RGV2x1STZaN2dBcHB4cXNqRHhjTkhHdlJwQ09SYzdSZEZwTHJRdUF1TmxXdlJKNzZSUEl4RWlRNmlLWlhlSUNwcXNreVNITXZBc3M4UCtrbDl5bVVxZEdLU3Z3Ukx2QTFsVVZhUWRKSXloajdnU2lJMTlHNlNWdDBLaVowRzVFOGEwR2V1TDRxSzBxYjRJK3ozSlFhbStDVEVaMFA1NGptb01yRUdib3FLaTljb1N1czBJSjVlTnlXTFJCeEVjdDZwT2RLc1BRRUdiNDg2b1ZVWVMrNEpuR0o5eURqTlI4dHArcm1WdEVDTHlaV3FWY01PSUUzREVJTHo3VUNjS2hTK2xqOVR1WGladEk3cHhvU2JSTFZtbW5qS3NIWEtndDQ3a2NRcWFOekxMa0xwTVVTKzhHa3dxYXViWW9vZHpjbVBSeUxwTXRZWGlKV2t0SkxOanJsRlltYkd4YXlYeWkxZklvYmEwQkV0V2ZKTEYvcUlsNXRZSk5odFJXTjFWb1ZtYXMxSmNSb20wY2tYcWJIUWJUb1MzaEJPOG5KaUt1dHk4THZpMWYxZkcwYm9NZWIvbjI5SXdzbDlqNDlJK0N2cXc5amlLWnRKa2p0S3FFczNQeHFxSTJTK3pSSWhvZWs2ZnVZcW0yYU5vd1hiRjhOSjBLczhXc29URU1GL1ZHWXIyYUZobXJSVU9ndkxyUTdEZlBnNXRHa1VXTW5ZMjhQbkdGdXM1eUJ5dExmQm4zRVhBYUhVWG4ya294R3RXbVZZdWpiaHMxYW1ZMDU5RGViTW1mTjljOVdwdVV0Q3NYZ2dsTXBPT0thUHVZcGovZERaOFZxekxvZStsV3JQa2FqRzZxeDI3NkwvM2tqakh2SSsyd054elpOYk1QcC8wUmVIVGpIdlZWL0U5U05VN1JVeVltOVVtRzNadzJjanE4dStOVmxXUy90NXBodDZyNU9walZUbnp1WW05QmxTOGplRzYwVTlRaWw4cSs5QmxRWVRlUnZucnBlN1VvMDByVDF6ZW1ERFJoTjVHckhSeEQ2SU44NzlXZE14ZEh6UmZqQ2J6VVl0SUQyRmlVUnFiM3hCZU9yRm9rMW9sK1MrTHlpVUY2c1VoSEpwSTZjUHFUNU1RbXI3UkFQYzh4K1NPdUI5cGlyYUVoQTJlYWM1T29tSCtzbXJOME9MTWZranJnc21ZcThDQU5STlNlUHBraVYwRjBGemVTdHZGa3JIZ1lFam9vMUllOGw2bmU2RWpTOEpFcmJ3cU1WWm9NQTl6ZmpoK2ZSbis4STNHT1N1dkQ4bDZ0WUUwRXZHOTdsN3lyV3IzaEk0eHlWdDV5N29FRUhDVFRYdFpENE1WZUhGREhKVzNuSFhJTUljbmV0VFdhWmZHbkxpNEM5UXh4aE40Zk90QUlnVFRvM2xRUjQ2UHAzeURMZ1NLUVhvWU12T2t4WHRJbUNWWE02V2hkMFgwK01leTRFU1ptU1ZnZ1JkS1RSZXF2aFlEZWZvcklpVEd2bFhyaUxnbWtYcVpKV1hoVEpqMVp3MkhsUk84bEtSVjh2WGNNU2d1ZXdsbTgyVEg5bmNQTWFpaWFlVTBuSy9UZVBVZ3V0aExONUpaajNKVVBPajR5RE5NU3I5V2lMeTNHSlplNTk1d3VMbkxaUmVLMDlXTG84Zm92RExocUZvd0U1RmRlY3pSKytERmU2RzNJbDVZU3pab2FJUlk2ZUhjSFQwVVJGamFwOEt4ZUJZRFNpOHNKWnZENkZ3d1BPQ3ZYMGs4YmVFYWhpV1hnMUVKbjJNbEJkM3BmbERUak5WZUM1TXhEQ1NydytjWS91Z3ZEcExvb3ZFa1NZL2x0NEwvUmVXRW52QkxndzExaG9HQXVOUm83SERtamRXdlB2Q2IwWGhoSjdnVm9tR3V1UVBndWZHTjRtUkk1OVhnd295eThRY3cxMThGMFBNakNvbWZDdFBYN3dMWkV5OFE4dzExckJiRG1rZFdPRTBjdkQ1NytTeGNnZVVaTHdUdEVWbzBYYTZ6UXVEaEdxUlJRQ0hvSXA3NnMwRmp5WE9LV2k3SWwydXZCY0RXalU2aG9URXZFQ0x3M3k5TEtYbERURFhYaHdmNzBVU1lSUGtpOWFyb1JHbDZRS1hoNHkxMW9nU3FOSktpUVRFYTl4QW04SkR6RENsNGY1aFIxckNJdVRveHBNUmFvclErYk5LTE5MclpkTzlGMjFad1JIbzc0YlpSdFhBV3JndkxMUlRSb3Y3NFJTbWwvRzJWNUx4Y0RSNWlWM2txb3Y3T0NLRUxWbzVRblg4S3hvZjd5Q0JpWnZJMWRCR0NFc0dvMnFFaFRHOVdaeTk3eTBERXJ1MHdYUXZ3N1ZTVUprakx3SGhBeE0zb3VST09MUjB5ZVRua1I2MzBTeGVsWm1iMDN3aUlRa2pwbVpSb3lnSU0zalpndjd4MFdnRVBOTjB5M2tVWllnc3ZSQmh0NVpuMjBJV0VKMzBwdDNNUk0zb010dkxNK3pRd1RST1JwRnpaTVI3eHBsdDQ1RXg3b01VaFNDdkVZVko1SHZpOU1HRzNCdk1lM0F2Tmw4anBacGlIMTdSWE5GNnZJcFFYOW1oa2tpK3NvMGthMjhlc3pON3BHUFp3SUFkZjhhMUtxZ3kxdDQ2VFM4c3ZWekRia01SNWFKczBYZ3g4MjNvd3JFc3ZScUx0dFluY2JFTituUVk3NnV1MHhETDB5WVNxNkVqbGdyNzB1ZlBNMWVTVE1zdkRKeGozQk4wSFJ1czZFVlppTHpVek0zaGxaaXI2QlUzSFJodWtUU0tMaE5wZXIwbkdQY21qeDlHeWl6VnFveENzM2xPWWk4TWpKajJpY21iOTZaeVNMeWhtTHgwbUt2bk4zKzdHdmxYdm04b1ptOE1tbUt2eHpUWjBqYW1reFdtcnlkNllzNlVHeFdhZzZIOHZGME9tMFlxOUVRWHF4U3diU1JtVVpGVTBSK2JSZzVGV3M0azl3RFNSVGNzUWlaUjBsaVgzalRqRk9KUGVSSXB2bkxmRWFuUkppdEZ2Tk1kMXZnek40YVgzODFvL3AzTHd1THlKbHJpV0xmQmlKczVDdkdpTzdHbWVmRncyb0w5eExONDAwekZ4alJtcWpRNUV4V3BDOFBhREhKWXVqb3E4a2NhYk9OUEgzb3lZUXZENXBuM2pqTldhbXlKNlBPSDRmTDRlaFdtOEdweGlHM2wxYXpXTlg2MGoraVRLL2Vjc3kyOHRFeFZ5YVVIZC91UHpCRXYzZ0x4QXkyOGNpWXF6VmlOSEpVaTFTTjFaZXYzZ0x4QXkyOHZtS3ZyRWgrTjNTVVZnd2g3emtERWU4ZHpIdFkwRjJVM2xGMlJxZDlHUTZzWG5EUmlmZWxJeDdpUVdEWDFXYm9MelZMOTRmR2pFKzlLUmlybE1TUWsvdGJFa1MvZUtvR2F2VDdUb3BnYW9lNnBJb1g3cHlGWGpmY1ppS3NCcDlPbFgwaDdwTkJFdjdqZUx4bzNVYUpLbmRHakZNOTF6ekNsd0RUekUzTW9ib25ZVm5TUnNxOTVMdzY5eks3UjB3ODA0V0g2dlJobnZEdEdDdDdtbUYyT2swa3NkaGtXalNKR2hlSGVZS2tzWHZKaEM4ZEVyZzJoV3orVmExSVhxUm91NlNTYjNrd3U1dzFRSytuQnFVclUrVldVSUVYcDFGMUdFa1h1Wm16VDBEY2RqUlNGMzNNczk0NlRIWmU5anA2NVNyMEtSSzg2bjk3RzNsbkdPd2ttNjlyVU9rR2w1eVk0L21JWTY1ZWFySFlTVGVyVVlxeGt0QjA1SnFSU1owcStVRzJhM3dYYXk5RUdJdVFTWTNQZlNqQ1JiYk5IdEJkczNwTXhhUWNrNU8rNDhoTVVaWDd6cE1KUmVtck9JQ2lreGpYVG9MMXBYZURSWmh0NEZmbUl0TWZLR29wUlEvNVZoV0p2QWtrRERiMWVDODMxQ2lSdFk0VnFhcUwvTjkwa2ZSZFRrbnVQekIwM0Jva1JxcTRxVTFHS3pteGRJcm91N2tudmRFeE1Xa3dTTmlNYVdjUnlWZGRRZVlVNUkyOGx6RXplQzRJZVJuTkh4NnRWUGo4czdSZUdUekNuSkczbTh4TTJrVUNMTFp5TGZWR0twenIwb0Y2YVMxZWFrWWkwaWdMalVUZEoyOElxeTlycXZITU1lODF0NFRBdXA2WXBjN3hUNGZUcnkyR1BlU2JkRGdvbWpabzlDTk5QcFgzamhzeDd3NjI2RWdMeU5SRWhZc2poYmJ4d2lNVmVIVTdtUlFkSjJrYWdrUTl4SlM5MUxPVUNOTWVoazgycTFScTByNzR1QWFTa1hxVG92VjRoQ0lkcGV0NXBqNWRYQ1pPTHhyYXVSWUMzdjlLMjZpSmZ2Qm9OM3BTdE1Kb2wwYURVRThpUkx1bENaaUwwdE1WYXc2QytqamRJaVU4UStPOCs2VUptSnZTMHg3d2RDYmRGRkVvcFdpbGZqcnloTXdkZWxwaEtMb1hCRFNTT3hva1U1RkM5N3dGNE5tRjNwYVliRnBDNFRhbjBKVzQwaVF1aDRiTUlYcGFZYmNCd0dCc0c1RU1HbzVGOUtzdktFekNGNkV6Q2xvaTBGdklxaVZLWk1WRE5WNVFtWVF2UW1ZVXRFTndKWDBxRjdha3g4eXJ5aE13Z1N4YjB6Q2xtaHNFV3Q5SWtib292V0ozbEJzd2NTcnQ3VENkMFZDSWp1OGJUblNaSjNUV0FxV1c5cGh0bmxnWEtIZEJ5RFZZVm1HWHV3RlN5M3BHRzN4V0VNK3AwalNlcFdId1Q0Z1RjTkdvTC9raTd4dk1lNUZvNTFhUVRneE9vbzBRSnVCNCtBZ1YzampQc2RDYUpUL3BoQnNvbWVJM0NBeXpSOVlLbGQ1Y21LczBQQnhHZHptTjhrUWtjSUUzQlZZS2xudkxneFY4S0FqU1JwR1QvRDRWakZIQ0F5OFZXQ3BYVjREd2JlQ2NVLzA5YVVRWjVOMERHYnhWWUttYXZIWEFjRk1PMUt6cThSRCs5anJod2h2VGZJUkpxM1MxR1lqcmJlSGwxZU4wWFFiRlBFR21tdk43NjN5MjNrMTIrb3ZKazQxYXRFU1g3MSs4MCs5WE1WYXgwU2VjaU1xMXZGS3o3aEpkMVhxTEFlSnp0ZkgyUTNkWjFINnhJQ3VNb0tTWkpQWnpVMWFDcDR6S3hab0lvSHB0MUZBZHhYWldqT2lyaVVWUkdVV1JJb2lscVJaSGdjdmQ5QXJqM0FuamYrd0d1S0dvbHl4Uk0wellqSnhiaVVSVFdkVFdvUi9Xd3JxcEJWSS9MY1IwWDlUZ09teW9LbXJvSm95LzNkeTZBOTk0dUtjZk9KTlA4NFVkeTl6MDg0SjV6ejhmdi9NNTVlSHovZ2FmM1BXdWMzLzM0eHBsUFhmamhCMjgvL29WVnpnLys1SysrdHZpbEs1ZTArTStYSHZ2K000Yng1ZkhIZDV4OTI5T3Z2UE9wZi91YnAwL0dILzVrZkppTityN1hYRjFkN2ZtYm80UDhkNTNiZm5YL1BiOXgzMTE3SDNrdXVlV1RQM1Q5bDk3NG1ZV3JiOW9SZit6RGIzN1RUWTkyckIvNC9GLzJlK0hTM1Urd244NGEyWHZlZkU3ZnZlbGszL3kwOTZUM3BWYytkVzdSTVMrKzhOWWI5eDkrTFBCNTgvM0h2N3pUdVhqRHlsdHVlcmVXYmI3N3A1L3pudmx2SDMzWDkvM0p6dlNUcDA5LzR1UWo4Zm9vR0l4OVg0U2p0V0F3V1BYNWV1ZnVlKzQ5Y09lQ2Rjc1RaNzcyUzQvKzFNdHZ1T0czOWw5ZGVEOTM0ODlmdS9QbUovMjkzL3o1UDcwOS9MVXZQUGlIUDNqb3FhOTk5cUMyZS9IV016dlZIM3o0MmZqZ3M4LzNQLzYxMXB2REpmc2YzUDRmUHY3SmovSmZlYy9QL2VJUFhWOG9lVEpNL3ZudlhmUCt0NTY2NDdxUG5iciszZDlTMGxPLytZbVBQZmpvUXlkV2hvT1J6OGVCV0IzMitZcm50KzN1L2ZmdHUvL2VXejV3Y3ZuQ082NzgvZi94U0RIMnJ1MHI2Ky84OUkrLysxM245a2JaVS9ycFd4dnFqb3Ztajl1TG4vM01pd3Y2d25GOStNTFNoWTAvLzNyNjVPWTNiM255dVM4OG10dkY0c2tybnIvKzZlT05uLzdtMDUvZmNkMFhHanRmK1pIV0ZjTzN2NlQ4bjlldWZ2dVBQWFhxbzc4VGIyNXVSR3VUNFNxYmhQREIwQSs1SDdTYkhYdmh2dlpkdjNMYkdYR3h4Lzc5dnp6MWpIYm1KL2J1ei9lOTl1ZVB2Q2twcmp1blhiMVl2UGZnczFmZS9GckxlUEs2aTZlLytPdzNudnY2MlRkZDNYcDI1YTRUNzN2ZjdVc3JUMXJ2VVY1cXRmTFQ5bGY0V1M4ekR1MisrV3ZGZi83dHI3L3dUT2ZycHpjLy9aVnJuM3piRXgvOTJCTVBIZDg4Zm15OE51Nk5uVlh1K1JzOXhuMi8yMTFjM0g5NCtjQ2Q1c2wzWFB2VmYvWGl2WGU5OEtubm5qNGJYM2ZobTgrKytjbUQzL2owWjI1TzR1enJ6N1ErZCtQbTV1YngzMUt5THo3WlNvNmZmSk9xNytmT2VPMk9SbXVwOFo0YmwxYnMwN255N3ErKy9kb0ZZL01uV3JmdVhMbnRoUEw4M3E4ZCt1TzM1dmFOLy9VZlBSVi9OSGxzWTMzOTJNWjRWUXpEd08zM2gwRXZDQjJudTdoODhNZ0g3ZHR2ZTIzenpKcjY2YWY2WDF3NC85bmQ3M3B4OXl1UGVwc3Z2cTk0NjAyN2loZXl0eGpwODE4OS8rU0prNDlzM3JGdmlVZGZmc2ROdHg3aS9lT1JZMXQ3OXgyODlaYmJsRmN1WG5qcTdEZGV1c1A4NGwxZlhsdjZmTXU1N1QycDVVUW5QM1hIRFgvL3p0ODlHWi81eUlPanlmR050WjZJZU5CZlp4MCtnZ05hbmM3OVMwdjc3N3huNFRubjg1Lzd6TjQvL3ZvMWI5My95SmZlOUVyMjRzM0dCYzNmdWJEL1hTL2U2aDk4OHNjKy9lU1owNmVPOThlTEJ4YjhjR1BYZ1VNckczQW5QN0Qvd1A3M3YvZTllNS9wdlB2NXo3eWorUHpwL3VObjRwVzE0eDl2M1dYN1BCeWYyTGp0eXZqT3grTlRINHFQRFRhaWxjbWd0ODRHWXRSMytkQWJ1RTYzZTZSejM1RmZXem9pN3J6NmM1dmVvYzZDMDNFYWpUMEwxOTE4dTJNdkhkeTM5N2FidnZxMWZ2YjAzdVQwY2NjYmpwZXcvM0MzTjF3YmNzZmgvZkZ3eVhyZkh2UGEyL2NOUC83WjkrNStKbm5rMUtQUmNDWGFIUHZleW5nWWhyenp5N2VkL3NnbkhuNTRmVEpaT3pFWUQxWjcvWjY3em5uQVJXKzUzWFBieXd2dWtjTkgvbldReDZ2OUlBejkwT0dDSGJuN3hyZnZldnVlZzQxT28zL0RpYzdOK2hVYmE2SG50K3lXMC9uVWUxOTY3dzNKWFhaL0xiUmIwTUsrNjNiOTVoLysrRFZXOXJuSEh6MGU5ZnZqRXlmUHhLdGhyeGV5NEV1LzhxUC83dkhISHRtTUVIdVQxVjV2RXZiNkxCampUWjkxWFRGeS9jNVM2N0I5NE9aMy9jVWpQNFd3NkE5Q2JLb3ZuUGJ5a1gxM3ZQK21xMy8rRjE1TVQ1NzJseWhmaHVQaGdZUFB2UExGbFJOdnZMcUIvTzIybG85K2NNSFdUNDNlc3R6eGZ2MU5QL1BoOTM5QXNKWG8yTnI2Y0JCOTYxOTg0MWYzdmZQNVV5Yy9kdkxoelFkWFZvNE5WZ01lRElLdzNSOUVMQWg3WXRRT2VzSmR1bmZoNElMMTYzZi9reCsrODZYLytkcy82bzJQUmNkV1Y0NXR2bXA5UTduNStJM05lMy85dlgvNFM2dExUY2NWSXVTSDFPVFVxZjkremF2c0lTNDRFL3kybjAzKzA1OHNzazdMRWFOQnYzUDluNzd3VnVWbjJKZSs5VjkrNUFkL1AreVB4dU9IVG4zb29ZMkhIajYrY3VMNCtLUDg3b1lIK1N0RE1acXNiVFFYMlhCcDRmRFIrKys4Wi9uKysvY3ZzUUcvN28vZnR2OXQyc052K0lQZmUvV2YvcS8rS2crNnNPK0JRMyswLzllT2pPODlhQjl0ZEx6MmN2T1BGc0t4SDZ4cjYyLzVOLy83bXQ2Szd6cnRNSFRkdHRmdEhEM2M2WGE2ek8wRXR0dnJqNFIvN0VPcmErdkhIeHh0ckIrUElMSVhDQllPUjN3Y2hhTWpTOHYzTERhY3hjT0g3QVBkbzR1c3Z6YjJndlVUajB6V1ZzZkhWemRQYkJ4Ykd6bHVlK25JSGZjZi9JMXovL0JucnZyRjUrKzJqOElRdi95YmorN2ZzL3JPdzg4TncvSDQrUG80YUFSKzBIR1dscGJhOXIyc2MrUm9wOXRlZHB5Z0s0TFJ5anBXVzFzYlRvNnZyNTk0Y0xnVzl0MXV3RVlyd2w3MlcwZnN4YmJiWExxLzBUNTYxT0dEWVcrQ0pIMWdQSGxnOWNUazRRY2ZYam0yT2h5MkZ1KzdiLzlkOTl4NnR4MzhTUEQ3UjU0WVcrYWE1d29tVm5yOThjWm9mVEthREFjZDRiRFdRcVBSc0p1TjVTTkxSNWVkWnJ2dE9VeDRLNVBKQkc2WWJLejBWNlBWdFJQUmV2dUl3MGNqY1dpcDJVVDZ0VnNOcjlOMGx2bTRBeGV1cmE5R2c5SGFDVHcyMWg5WWUreXhCOGF0bG5ua0EzZDk0RGNXbGhZWDdkWjlTMTIvK1FtMzNSME0xNE5ndk9hdlREYldCMjZyT3hEc3NHMGZoamQ1WTdGOWxDMDJBOFpkMSswanBkYUd2ZEZrTlp6MEJnK0dvLzZBT2NMMzIyNm42M1phM1JaK08wNjdQMks4SFE3RzBkcG9PRno3OE5wNkZEMzQwQU1QL001dlJYZXZmRkQvNE1GRGR5NHNMaDVjUEx4MDFPdTRIM0laNjA5R1RxOC9QTmJmV0JrUEhQK0J4bVRSWGxoWVdEeHN1NGRiSGJmYjZuaUIxKzA1dlNZYjlQbG9aU1NHdlhBU0JnTi81QTc2am5CZHgzUGRydHNXYnJNNzZDSVRocncvNkQwa1ZzWEcya09qNFdBU25ZcmR3Uk1mT1hIdzlsLzhZS3R4ZVA4aCs2QjlDQURnZVErZzNBdS83N0F4TUMwNHR2bkpoL202Ni9CL2RyTjlkK3QrKzNDamhVMjVYcWNubGx0dUVDTHAyR0FROUVVNEZxSG9oV0hJUk9nSmdRQmhYaVBrYmNFWUZlV0pGeUl5ZzlWZ2RlTkJkekpjMzN6czhZM095ZnhUNzN2SEwzeWcxVHh3MTRLOTNGN3lGNDk0L0dFK2NMQkM2QUdEVmxiNHFhZi80NGVlKzhTYmYvWVhidnpBa2VYbDVwTHRkUnRMeTQwK0VMYlZDc1pPMysweE52SjdvVURkOWVFUE40VHV6QTg4NXZYYmZzL2hIVzhRckU0YUE4YUd3dzI0YXVJZld4K2RPUDZSelU5Yys0Y0hyM3o1aGtaejhZaDkzMkszMjJiM0grcjJqbmREb0dHVGU2c1BqSHBDUk1rVDRiN2xwWVg3bXZ1TzJrdk5ScnZqTkplT2RscUIxMmNkZHdER3c5bFljTjRQQkIrNllnRERETnNBWUlJZndjV0F1NlRBUm12WTcvcTlYdFFicmc5T0RBZTgvOWlKeVpubi8yenQrcCs4M2xwc3RKQWlicWZwTGQvZjdvMUVPeFRZUW05MUtGYVh2V01uVnBjUGR4c2k5QmZhN1NOTHphN1RhRGFjVnN0elY1WkNpTzB5d0I3ejNYRG84QjRxVDVldkRwWkY0UFFkam4yRXZqc1EzUkZlOGg1SEJJNzkwYWkvc3RJYnRCNk1WazQvL2tCMDZKWVA3cmNQZTd5MTZDNjMyKzFPMjUrMEc4eG5RM0M1SVREZUg0Umgwd3NEdjhHWEZwZTZEVzlwMmJIYkU2OFRPTDVQZG5ZNEpDRGdWbDBmaDZDSjMyZWNDMGZnVjRndEkwTEdiVmpKdys0UmVNT3cyKyt2ajFmRWFHVzRPUjRHUiszVzBwRU83emFYdTIzUmRyalhIUzBodFYxL2NxelJEOW5BSHdTaTErb2g2QnFkenRHMk56Nnk1TmpkRVErYlljZmhNSDdIR3lMTUJJTFc5WHNlb1hoendJTmUxK2Q5eDJmOTBCbDVvcmZlN0FaaFB3d29Ua0ozSk5hR3dYZzE4Q2M5NFM5NTRlRk9reC9zTnIyQjV5RmFuVzdnOUp6QUdReGJvNEhEQWhqVjhRRE53KzdCZG5PVkxmTnV1N042cE9lMjFocDJENDd2RGxsLzVEaHVwK2NGUTlweGkvY1k2cXdmd1Boc3pVRWtJeHg4dHNLRHlmSjQ0cnZqdFZhNGptVHhCejRpcE1kc1YzVHRKYzhIYWNOV1BVby9Gcmk4Ny9sSTVCNExtZFB2SXBsWjUrZ2lYN1g1S29KdjFEL3FOWHNiKzN3c01td2NHYkxSb09mN0hqSWVsd1lEMSt0Q0QyYzRjUHFqbzVBZnJnU091ekpZWW54OTBtVzkwWVAzb01TTWdrNHdjVVRIOXp6ZWNGbHJETFFjZU54ZGRUajlDYm8rQzdBTnp1Rk9COEF3UE54cHJ3OFdoMHVkc0JHNlNMeTJpNXh6SnZ3SVRNcjdMT3lFWWFmckJiUnNZOUMveHgrQmNQQkErTTZvQjN2MlBMZnhBTm9ERGlzOWNMVFZDNGFNSTNsaG01N29IcDAwZ3ZhRWR3SzM0YTI1OEdyQU85ejFuSzdqQzFjQTBSRVhmcHMzZXlzSVFPUys0NnoydTZQR3FEL3FONXJNNnd5OUVmTE1ZOTFPRy9XbjdROVJnUTc3S05HRG9kZmpiaUJjdjk4V2d4VmtDQXVHN3ByVDVaN3craDJ2Sy9waXBZbVFiUFRhY0gvVEZlT21Id2pCQnNQbExuTVl6Z0tHVGp4a0ZJSWExZFhoN1U2dmlaK1RrQ1BqZ1BlQkdJNmFoOE8ydTRvaVNhQ0xQYmxZcUxlQ0xPUzlFQmtTOW50QkcxdG5QV0JGcisydHJySTJYOEo2WTllTk9tMlBjYSszNHJZUGo3d3VDd2NqQkRPODZBWk9HNWpsdUE1Z0JQQUd5aGtnRGJ0b0xKanJ0b0I2L2toMHcxRVBGbmRhSGRGdE5qbEFENFhSNVlQUTc3Q09IL1o4RWJpUTJtSmVkd0FtMFJ0T2VKUDFoVmdiTHkyei9yREgyNXdCdGtFY3V1SklCMUxDYmdRVzArOE5BdDl4UFIreDZJVUFjdzdsWFFiY2FxTHVOWjF1VXdCV0VLOWV6dzBHUGEvbGQxdE5wK09HNjJIVDhSeWtvWUJFcDhzNGtFbUFqWFdSVG9NZTRBU2hCSlc4L25xdzJBMVF0UHBZMitsMDJnTFppUXpvclFUMzlYcElseDcySjdCNUFlTzRIdjR3aEJKQ21mc2VsbVFNSjRVUTBzVUI5Qnh0bk94N1FCMFdZRHVlaDVlSUljSGJqb3NRREdFdnJFUUhCQ0tid3hQY1IxbENhQXY0MWUrQjRLRmdoTkFZL1lOSHpBKytnUmNDNUpmZ0xvTEZ4UlUramxKdVFpTWZyejA2aTdRS0VWN01vK2VNM3NZUDdwVjVRNnJLc01GN3FNalFVWVkyS2dhc0NheWgxYWxJNEFJa0hoM2x6SHVmd3VtaGxML1MxTEx3SytaYzQ5c2Zoa0h2NTRaZEdEelhvaXpYREMyUDB6aldZbTRabVprYUNqY3pUVEYySmp2MWdsYVVhNlpHZGIzQ0xheWU2TlhyVW1JbGQvcFE3TWl5N1RqbWZOc2JQTVc1aGxsWXVxcmdFWk0rY1ZJa2thMUd0aFZiUE5Vc0xjOXp2SEZoWjU1cUtZbVhPaWoxVXBlVk9QOFNxc1pZS2VmS1ZPblpDUVlwRUN1bXl2TmMwelBPSVNyT3pGakJjYzJ3MU4zbkxVUGpxVzFINTg1ckpwbFFVU29kdnNzSDdhOVVnSjVORCtleGtlWnhiQ2VaYWVVY1R3c1Z0dEJTU3pHTUZFNkpOU3MyZFVYSnoxOXdsdXpMN2ZYMXhNMU9uRjV3bVN1bFNxcFZjRXV4emRpMFVzVzJUSzZuMkNsUHNod3VOeUxWdEpOQ0xYYTB2czA2OVRGRnFVUXIzQ0RyY3FQZTlkYXI1blRTOGt4UFU4T3dVc1BDVDBNeGNxNG1DdUxRakJBNWFaSllWbTdORzAyNTFBRnBDcGVSTXlFV215cGZWWEtyWUZIa1puR2lmRWdWeTNjTVBFc1JacFpwbXdVZHluZWNoUjZxYVdsV2xFU0ZvY1daalhOeHRUSFZRSWFCQVdYcEwzeUZSN20rUVRrRlg2Y1UzV1FFT2tIcVRMOGduMHhyVVNqeDJLSnRhWm9DLytkV2xoVzJaa1FaT2R4VVl5U2lGWm5jeUUxVGoySlZoWTRJVlJnSmlreFZLYmRBb1VYeURYbXdGQ01GeUI4R3NwK3VrbHBEZkNVZlp5RERERVNkaFVUWFV3TkpZcHFLYmlDWGN6M2lXcVNicG1id0xFSUlJaTBSZzJrZWw5c25QSUdySkt4WVJtbG9LNWFIS2FlUU1vcDhXbTVUV3QzUzZJeEtyL29KTkVpanhDeWl6Q2d5M2RZMFU4OTFNMDdWQXNvb0JuTFJOT05JaDE4dFpDbFpPSmFyeU1VNTJaMERyZkl0OG1IdmxKekF5UjZscGprVTRuYVdTbmREVzJrQ2J1V0ttcVdhRWFlMndhTTBWZ3RiVlZRYlJsSk5YSkRuQUFVMVV6SW9HdW14WmVvOEJoUXAxZFZTQWF2SWpGVG5OaVNWZTVmQkJLc2lIbWh6cFFHUzFKYks0VUpMTjZJOFJvUWpKbUlFTmJiTkN6M0xNd29keEVFYXdVMjZOS3dNelVTRkdRd0xZR2dBQlFrYmJST21BQTV5TFVHcTVsZ3B0L1FpaFJlTjB1TDBROVBnWGp4WHJEelNJalhoc1YwQVBCSGRCRzZHRld1MkRvQW44STF0blJRMWlraTNFaVdGYWhFU1Q0OHkyOFFwTnJBQjVzQUJHTnBRVEJOb3BmSEVUaEd3R1hhRjFJaWhtUVdVMWhRQ3NGZ2FQVVhTYWtET0JKQ0pLK0FsSzFWaFA2N0VjWkxBMFdsVWFJVUNMeHRxR2hseFpDWlpuTWVaaml0dEZmOFNySktaR3M4eWJFalROQU1BbEFBaExETWkvK2tad1NPQ2t4ZXFyVk5vNWJKb0ljNXpEWTVNQzlTVFBGSTBsWnU4TUV4VlN4RWx0UDFVdzliSlRhaHduSUpmUWZXeXRTd3ljTElLdzJsYXBnTHo3QndDWUIyc2F5a0F4RHlKYUIrcHBzTkRCVGFIaFJBNTNGQjM3MHl6d3RweFhrYTNzcm5iaG9WamdFYVNrS21WaU9lRlFpVklJZmZabHAzQmYxbWhJWFlSYVpGcTI2a1pSV3FLd0tQQXZuQWdNaWlVbFVTbFdMUGdXQ0FUZ1ErOURWc2pPV3pMS2t6Z2hvekQ0V1lPYjl1SUFGM05ZWUt6NXpKRlQzTnlMRXhsRzVHQ2FNd0p3clFNaGlLLzZ6Q0FBVVF6amJON09OVjJxdlhZVFI3cHVRSVBhb1ZxRkFqQ0ZHR3ZXS29KYzZJV0lySXA4bzNJVXJORWdSbnl3aXJPR09leFI1NFZPNGZBS2pBQlJiZnp5RFNvamdIZFlGK2NLK2tFc0NiVGtackp4VjJxWnNPMEJrQk5SMmFsd0I0dEF2RFk1TStzVUtKTU56a3FJQmEyVFZRUFM0WjJsbHNxTWdGUnJLbEFLUEpubkNCQ0ZCTUpaU2R4b2lhV1RtZWJxVzRZcW1hZU8yOFl1bTBweWVZbWdNM0c5aFZsMXhDYkxncEVCM2FjQU5YdHdxUTRCUzV5dzg2aVJNdFRLS0RiUUJCQUU4eG1HcVpwUnBJUUdCbVVnSXVBalFvaVZJMWlaYytPSWsvdFBNdlQ0WGxFazYybmlPUW8xaSsyZ05PcG1jVUlKTFhnYW1xbU1TNHoxQ3hMRU5ScWpDak5zZFVFU3hucXViTklpRFBEUE1vaVN6TlZGRnc5TTNPT2JRQkpUVFVwZEJNeFdlQVBKWnFtOEIxN0REem51Z0txWUZzWk1nbk95QkFRV3BZaGZaRDNwcUZydHFZbmU3VVdPQndnZ0NzWGRxUkFHVzF6ajY2YmlVS3hESkN6Tk9YQ1dTV3hGVXUzVWZmT25rVzVBOEtsdWc0dXdBRUJWcEZJUkFOS0k0NFJ0Y2hJV2RLTkhYdHMrUHY4dVRST2REVyt1TnZJVkF2SmdoamxtUTF2d1JLOHlGSWRHNDVnY25qcXdIbXFXMGtDazhRSnBDandPVHlxa1NxUm5tVFFCK21IMnBNbHV3NFV4dmxXakpDNmNERk5JNXdTYVVwdXF5aVNzUm52UFd0b2hxNFQ0cHpiemZOZDUwMDkwWEZsaHZ4RTRxbFJnbEFrRnFERjBTWk93RFlSMG9hZXhYQ1JRZmllcU5oS2tTaUtwU0VwODNUWEpvQXhCeFBOVVl1ektJMXNLdmlJNGtRdmRKVkhoZ252QUpFaHQ3VXJpeE1rNms3czFGQ0xMTmx4QmxWWno2UGhXVHRYS0NDTEpFRlFjeldLVUR1QVBxbVZKalpTTkxJeVlEOUtqQkVYaFdRcFdZNGtpblp2SXNDVnlNd3BPUEpFQi9EdmFBSDM5cHlGditNQy9Pdk1PZXlPd0FOQkJtL0M0QUJoQS9YSmdpdU1QRVdLRzNCaXFtWldqZ1BEODZrU0laaUwvTXg1dkU3dHpJZ1A3TXhnTUJCMVFIVnE2c2oyQWh1V1ZNcUczZ2hwUkVPcTJUTDFMRFhKRU9mQVN4dlNFTFdnUTBtQmQ0ME04S0h1M1dNb0YzWUMxTFR6NTFETXpyUnlRS0tDS2c0czVNQW5GWTdqYWc0bUV4a1owaWpLTCs1V0N5QnJxc1pLdm1jVHZRQmNsOXJBRUIwRk1iRnNSQ1R3RGlVQWtadFpGaEZDMjBBUW14ZGFzQ080amJITE9LL3NTSGVwWnk2ZzNFSW9FaUluU0RWTUpBK0tpcVh0UFlCeXpBK2NqM1FEd2FvcDZ1YmV5RDZ3STBPRlNqVWxRN1FtbStkVElGR2lvaWFsS1Brd29SMGh0YmhWZ0Y3WVBNbVI0NW9PbkVOYzhCMW5OL2RvYVpIRnUvWWE4WEN2YVJYRDNTZ2xRQTFRT1JTU3pFeFErMkViSkhpU1JIcUU0L0ZaKzJ5ZUowVU9ITXJzNFE0ckJvTk80elNKemdHbm9TeEhUVUNDb01ibk9lVGJlM1pIa2NaVklNS096WmdEZnBIZkJrS0VGeEhCUFZBd1VWUEFQbzZmT1pkWUJZSmp6NTRNbFRJbmQxbXdGeEFPOURqVzFDU3lnSUNhaFhlQVZnV3FoSHJ4REFwc2JKdGFya0l1Q3JnRi9RSEtGM1piRi9ZYTJvVVdMQjRiZHBMdTJPVG8wQlMwZ0dtOGE3ZEc5Q3hGWU9ZN2xmakFwb1krcEVoTks3SmlsVnlIR0V6VnM2MGNBSXJLYnFTNzlpYUFuU2ppYVpZcHV6YkJTVXhFQ2hnQmJGQWdaSTFjMzUzdXhuWUJWZ0NQY3p1TkxJa0JKTVlGWTdkbG1CRkNRYzEyN1VFZEp6cWw3TkxPWExnWTVTWXdwRUJNb3dNRVN6WXNGT28wdjlDeVZXclJvRUZ1eHFxSjZsN3dCRkFIbGhpamxxbm5kNkYwR3ZhdVhEdUE2TmQyRDFzUVp0aW16VzJ0U0dLZ0hDSWppUXRGVlNOaUJURUh1Z093SWdWRkFXNEZnbUdUU2JibmdvbGdCTExhV1FFNEJDakNPZFNYSUltUlFsRzJRMHZQSVZoanFIZ0J2UGhDYmxwNGtXU0lCSVdvUUJ6WmNhYWluTktEbTd1dEF3Q3pKQm55elNpS0FGWW9pYlFyV0IzY0lFWTRjdVFCZUYrVTVQVENNblFyb2dKdjJuRitMbXJ4aU5nalhZSFFQUmNQOFk1TjNWS1NnR3h3M2hyR213ZW9sRm5FeXEyaUlESW8rdzdRQnpBQWdyUEloakpWZTFaMUpHQWFRSEpRazVUb3Z3b1BwZ1JBMUkwQTgrTWNpUU1PRE5LVlhIajJLenZPUjJuVnZLWkczWFpyVUJuVjExU1ZxcnRSSkxreThqbjVlQUxrc3JHL1dQWmExRzdKODNBS1lDclNZbFE0SFRXUlNpNEhlNEErT1dvRE5oelpZSmNvZy9sWHJuemphK2NRNjZYVStmYVBWZ1B4S2p0WitRTmxha3JScWNkQTd3RVQyekNUWnN5dWsxdWhjZ3JXSkJtMWthb1dBTmhNekRRaW1ZQ2dER3lqU01DWlRMc0ZPNXhESnlKRmEzbTlTQ2xRcVgrVWI0QTR6Y1NreGxSamhGNjVnZGtVZ2RndWx3eE1UUk5WcGVRSHFxRVNnQzlZbE1ld0pvQXp1Y1YrSlh3VW5pcmxTUE5WWFN5LzlGRk9Ha3BIVjEyaGxGZTNielBMa1d0QU5oRTFKaFVzdEJnNXdWaHVJVnhBOUJMMG9NaFBtUGRjZXZzTktVcWdJcld2V3I2WksrcHhqRkpPVkl5cUI2V2ZwWHhpMmdpVzJaaWdOQm1WTHhCT0tBRnptMkRoVVdvbWlDaVVEdUFIa0t4QTFTSFFRS215a01qVFhuNStIRkExd0RMUlpCOVdCcDRjQUZEemkwM2dzS0tCendHMmNTNTE2NGdTK0Fvc1VxRUlRSjZpTG1MallKRUsrQXBLTm1JR3lZbU9wMEJFeENsUVA4blMydDNTOU5SVVUwYWlDbW15LzVhZG9UeERUaDlTcVExUk5yaFFTV21Ha2ZLeUFVK3IvcDFxRTFtTUZvR3FzWTUwemd1Yk5FY2tnS2lwbENKME1vcUFCcmpUWXZCZGlOS0lFeVBUc1RmaUFGZzlUcW5abEFMQnUyRUxvN1FBT0JWT29la2U3UnZDeXlDZ2RKQy9iYVVvNEhTUWlCUzhsN28xWEsxUmhjUCs5QVRXUzJNVFBFMDNaWXRyeTc4UVlacElhb3BSNlZaak9sd2phNk5saVNBZ0FyNVkwb29GOVlnb3VKRzhtb0lMLytodmxxU0FPQVZjb2NBU1prckRGaWdMRGt4Z1J3MVhTcjB6VmtjalFkZEc4bHFvamN1Z0Fpb2tHR2FNWXpZSnhHSDRVakZWU3c0WkxQcHJveFpwV0FnZ0cyc29BTklBdUFEdEhreEhub055YVZHZzRLUmFrcENscWZBQzgxRmlsVmdEaHpjTm15WUhGcEJPaTZRS0VJVCtNbEhRK29FdTAvdlNuWFlFbmhPWnVwNVdVd0pVYU5XazRTZWxqSlhRS0NNbFk2RXVxd1JOQ3M2bXlaS2ladHhFalViRENScWNjSFNaSU1Ub2NXTHl1RUZERnZSVDRBSElBMjZaUlp5cktyTEVvQ1hJU0ZBWVlCbEo3NkRwMFFIVkVqdHpHcEVBWk5EL2daQ0FiY0t1NVFnR2tLZWhqVEdCM1Zwa2dZTWw2SDlpR1JrS2VEdTJEbFNBTVdqOG90blF5SWhSRWlFK3AxWW1wam9FMEU1bytBRWhTRmFzVGkwcEJZVUpDTlhSZitKMG1nVFlSaEViUlk0R25scEE4RWF1UnptTitDajNVZkZ3Z0hndDVhRkNIa0sxVnFnTEJnb3FhQ1F5c09tWTJtMmdrMmJIYVVUOWdwbnJsaDNUTlhaRUlhdlE5Q1JWd0x6QmxETll4Y29pRU1UVTFyRnFrZVhvQUJNRUoraExhZ0pxVFMybG1UVm9SUXpTaUY0bGdZVXpOQ3dxT2w0ZDNRTFdVZ3RVZXBnWTNVQUtwb2dNc2tBUUk1cExneWNnWllGUkdmWUpvYXFteGlyY0JkQ01FbkRJaVBJTjZab1VKakZ1K0I3Qmg5WUtIbFJvVGtKaFpXakk3aHpWaGhBU0t3UGtORTBIaFlDRzhEOUlmV3lpSndMemg4dVVJaVZDQ0J5MElnT05nSm9UYUtJTGp0V01jaHBXVUxGekFqZ0VOYnA1bWdDazRIMndQdnlaMktDL1FBbkVEam9UTklvMHQ0U3pvQWFOcTNCNlN1TVU4RHpnQmFCSVErOUhqQW90S05JUi9FZlRJaGl5aUtpSUlOdzB4VloxSFJDVlFTMzZ5QUJaWjBKSFlDeVlNMWNMYUVDSkZTUE13UWNoSnFjQW80WTRLMVFRTzVROUhjbkQwd0s1aDc3UExKQVhLWHF3SkFkSlZBQVZ0ZzI3SWNQVFdDWGNKeXhUZGRVR0llRTBkVXFKRXh1Rm5nSWgwUTBaRVFoU0xtY2VvRTVxREdBeUtJNXRLSm1DbHlIWnNTaGFCb1dqbWhwNkFaS1VGYUQ5NEppSU0vZ3ZWMjJLZUVCUkNpS1Y2REIvbkZEREF0ZGcxelNKQWlGRUk0bTl4SG9HTTlQTUNhQ00xcFlUZUdZZ29EUW9nWnR6K2hlVHQxT1FRUEJPQzgweFdLQkZBYzBwQWtILzZTT0hsSmc4QjNjM0N0aU1aeFJQVmtRVG5ZajZsUUtHcGVFTXdBa2hDSnF2Si9DdmllNklSbXRveVFvYWhBSGhRUitpV0RNemk4YkoxRVdvb0s3b0NuTHlSeFNqaUJlNWl2WkxSWGRzSmtoWEN4MkNRUTBhbWdZMHZDbzZmc213RFNxMHdFT05ZRDAzMEM4aTRoRFdwREZ3TWxJaURia0U2QUw4Z0N0YmlHRmNUTkdPSUkrcG9UUlVJajhLb2tPamp6ZXdBdG9PMUZrMHhaeTJwYUtYeGxrNVNrdVVwQWhDTkFhYWpycHJVZllqK2hNVG5CNGNHTEdFampDUE5GWFZVWDNRcHlOdmlRYWdxN2JRTmRJSURXMk9wcHZFQ1doU3FhWndJVFh0ZHBaRjhEUjVHeENZWkhsa3hoU1JWRzFwNkk1TU5SU3dYRkR0WE5VeVJBRTZLNEllT1RrbVVwelNzSnMrVkVnVml0OE03QmhMeGpSRUp2QkdxMVBFb0JUWVZGNmdVR3NLc2gydXNTMFRIc3VwT09hMFBjc3VMTFRBT2dBYTRZQm9CNFlhMU9yRFhCbmxTMDVkRFN5djBHYlJVQ3BVdVhNb0FpNUl1SU9lQnIwMW1tRnFCUkU3TkcxRlhORVl6TTVvbnBwd3RDc0tzRjZ4QzVRM0ZLMFlTYW5xWUpOZ3J3WXhYS0lDUkNwUkFYT0VXMHJEUUNXamtSellta2JBZy9kS1RxT2JtWTY2R3FIUFRMRTlwS1pCRTBoVVBaMkUwdFFaU25OMDJIbWtRbEVMY1VrbEVITFJDYUZhbUlXQlFMTVRqV0tiUGgwRWZOam9IOVVpdGJGcFcwVk0wMmRia3RCQk1ibGx3QzNnRkZJTWlYbG1ST005dk5RSU5ET0ZMRW5EVXZteEIvVmhxS2h4cENESmRXUTkwaXVUakVOdUFCME90WEUyRVk0aWd1ZW9Gc0dqS080SWFWWFdYeHJ5eXM5RWNxbzRxQndJak55R1dCdlpCRnZacGh3VEFRV3RQTEZ6TUNURlJISExDa0IvcmhYZ01aa0J6NENkRXNLWkpnRFRvcWluMFFKUWtOTWtoZW9qZlhKSjFUN1dsVVJGOFNFeUJialg5ZklUbVpoSUw3U0NXMUFRaTVpNExycFJoQWs0Q2MzaFZhcTFPZVV3SWtZcndSUllocTRYOFVIWmlkUkVkQ0c5d1c5Z0VBWE90MmdLQUxGQUloVXJFaW9oNDR3aXlpTURwclowR2V6UVUwY2RnTTB5SGJDbW8xd2ptOGwzSUZPRXV1aks4VW9ES0ZDVWcyS2dpdWpFaW5FU3pkbG9hQzBwamdKL0lvaVRqRDZ2d25Qb0MzalNhT1FtUDNHS2FSUmtaZ2ptbEpna3pZWWp4YVRHUzA4czA5SWprMHhCY3hoVFY3aFptSm9DVnFIa09pZ0x1UnBPc3cwMFF3bWNpZklCRU1JaEFERjJLMkVzcHc4RllqU1F4Q1VBL2ZCUWhpM0M4b0JCb2dVV3NmdzRwdytRY3VRdElNb0M4TkRZTCtPeWhxb21ISTBZbDMwQ1NqQXFFWDJlWitVd0lHaUhTUVExaVVzMlNmQ3F5SElHVTlpd05GNkJjYWlLU2FNclFueThVQlhrYkVSYzFUQ29jeVJxQ2lpSktVZk5pS2dPMUVwc0JFaVdVdmVlY0JyZkViMlR0RlpPdXdFZFZQQkFNMEhuVEJxQkUyMlZCQnFKYUZ1UnJJZW92VFFUdE1zTFkzRFhTTTRNNGovd0hFNTNHdERQd0Z2citaS0xNdFpwdW9MZUVLSGp5VU9CNEt3WGlKSzVDMzc1QjkzbDRIVHBmZVlLZWVkQklPODB3RHVqY1hYTy9VelF6UXlCUjRkRHY1UXZYQ2wvdFYrdHpEb051bU1CYndTdXZIZml1NURmRVplVHozdDBsd1huWHB2dW5hamtoejUzM1RuNTQwRzVOT1B0RmhQTWh3YWh3eTdkLyt0b0lNOTBPcHo3bkZZbitYaFd5WmRTNlRtampaWHlmZDh2elN2b1BoQkI5MlRCOW5RM0Y5MDV3bnpQNTloL0pSOWJDUGkzVmFDU1R6dVg4dWsrRlVaM3RsUnZZV1ZQeUtlQ3l6ZDR3RWc4SzNXcmxoVjBuNHB3NUFVK0svMkVRejVuL1dCZTdDVWFsSXM0YmJweHhaVVgwNDB4VXI3Y05wNzYzdlJpTWdMTXc3WmZ6MzJQL0M3ZHozbHBOckllcmhnRjI0Ulc1Mnk1M0dtS1NnRGRvME9YaWVydUcvenk1YjB5czR0RWRabVk2bEd0S0RpNzFNTEQ3Zkszdkt4V2NLVjgyclNvblY2OXlhYW5pL3FZUDdmOThoQjVxTjc2TnZGc2Nxbk5MOTAvYTh3ZFpQUHZ6R3RRUGJiWWZ4cWw4NXVmdTZBWGJoZC9PZnZ6Ym5mTGFXeGVnVXV1OTdmSjUwRkFkMTlkTHM3bXN1K1M5N2JvUUFoMDZZT0pVRGp1N0VJbXQ3bE4vekFnQUdRZTg3d3QvcWQ3czc2ZDc3ZklweHVzbUR0L3ZhQmJ1MlJZT002V2s4VXNRbWpyL2l3ZXkvdXo1Rk94WGRqcndSL24yOUtwTktUWUVoQ2U2ODZkVllxSEh3TGZmLzFWdHo5ZVg0R3Rucjc4ZVl5NVhvMERnYndsclhiRDlzRDlyc1Z2dWU3U2FKM1hRUUl6NjMyN0pWOUhpVzhqZnU2cXkwZkwxbkFYbHdHWnYxcUZ2K3FheXoybTEzeGJ3MzVIS3Z4MXhIL244c1hybmNYKytzSy9DL21YYzlQZnhLUE1ZZllkN2Y5dlhIZ2xuNHZ2UVA3ZjJ1TnZ5N0xmbGZ6L2I5Sy85L2plNDN1UDd6MytyajIrM0gwVlA1WCtTeDczcnJtNEZ0YkhsMTk3VlpLeWZmLzQvNGJVRFhnNzBOTzlZU0RLM29DVjN6S1FqeTJzQ29lL05lQzgwNlk3d0ttVVhlbS9MRW1zMXg5VjU5aWRheTdpd0ZWL1JuY21YTlZ6WHNLdmk2c3ZnelMvY1U1Kzh5K3VrSHgwMzArOHhDdjVqTDA2cnNyWWxEZHQ1VS9VOEdJdmdyVzdUYVdzdDkvbnZ5TGxzNHY5Sy8xT0R3dDErRlV2MS9MN1Yza09YdkFEYjM0RmJjTTFGeWY5ZXFsN2RseEJ6SlE3TzE1bHNuVzhPdURzTDlmTFRXMGo0OUlVMDlyNkxhemI3amJlVUI1NmcxQWsxV1hMZis5bE9xRTVMRDlORjkvL1RldzE5TjdZbHZxOWNpVkVYWEVGK3RQV0duV3RWNG12UHNvOW53bm5CL0ErTmE1WG9SRlhoblZmV0RVdlpXdGRXMFArWWdyczMyN2ZmMDBwLzdYd1cxVmJmaFVjN2ZtTklmM0VlMWVTWE5FY2htV0xVRHJXbzdaSHVJRzRNcEJ1eDVsWFl2K2d5djRWUFJmZWtrS2ttTW9MbHhCWTlzclE1NTNPQ3l1Vi9FQXBtMi9uRFFxTlE3eFFDRGtVa0d1d3FpMnFMcTE5Nm5EdnRTdG9WSUEzTCs0bzV6OWc2bUlRemd3Kzg4TzJYOTJYUGJGOE5mZEwrUzFsQngzMWZJL1VEV1NuTWQvemlTMnZlTlc0OCtwZjFUL1JsMnhJaTc0dnBqMXZQU2RnczE5TVh1TWU3SWVCUUFNNERVcWZCYlhlMndSZThwTCtNZG1VQzdHTjY4SmExWFNxMG0vNmtQTzA2UUtzS2NwK1NyQ3RsL09xbmR3eTdlRGJ1cjVwVWwvU2dPUFVVSDVYaWMwT1RlY1ozdlFJNDkxTHBneGJ1dEt0K3hYVDFjdW80cjVnM3B6VXVVZmdYNkliMjdxYlNwVG5YdG9sVkwwMnE2NmFtM2RWL3E1ZWxoMDRteExsZWlWLzFrVmZBai8xYXpZbDc0eHRJNXJ5bTFmeURXOHJCNTAzZEprWmdyTjZUMU5MeTdNWWZiZHIvb0k1Qjg4OW5RNmRTbERhUGtsaWJJdHlzek8yWm9LWTdtNStGc1NxckdOaU9xTFpGbVdWS2NzZ1lkVTFiTnVjQ0RBOW13UE96eWZFdkRHbmE5TWNkRjdsVXBDY2w0cjUyZVdjdHF4T2tYcUlPQnZyVlR1bzdPdUxhcXZ6TzY1c040dk1Pc2xGalh2VGxCTXo4SzhScVJiTVN1d29CN3Z5cTNyVGN5c1R6WXZlb3ZzV2ExWk9KMlc5NmU3bFZxVEltV25ZMUQvelc1NmFqUE81bXMzNGJBK1ZIcVY2ZkpyalU1QmhjcFk2ZGYzY1VOT3Z2cFpZNmtJYm5WUGVwL3BSZVZDSXFVdWx4Y1RNbzlNaUl1U1hIR2RuaUpsbnA1ck0wTGZjOTdaZHNybWRTL2xDcmtOSDVhL1orOVBpVlc2N2RPQzBwREZSZmVHeTlGMXRXR2t4K1pWTFhrNjN0NmRnSGZiQzR6TzBJT1Njam9OeGNhbEpsZW5TRURJYi9DbUFsQkRrczduZDRicEtHU2EvVEZyT2lGSFZBay9LcmJUMUpWVWhQU3ZuVm9XeWZLUE1MaTlnSlZ6TEFHU0I0NWY3M0ZMNWFIOVRDQ1JGSkdlbzE4VDFmbVhFNnZ1bVZRR1FIeStJV1NwVXNTdGNYNXJVM3hyTzB0RjFISlNicTFLc0pEYTFlVWs5VmtkRDVkc1pZdE95SkowYzRsZnBYZWVqcU9mdzB4eW9VbGh1Ynd1cVlFZVZZenlmVjF1aXoxL3FqSmNtSWt2T0s4UExMK2I2cGJ0S2Y0azZpbWVaekVydzVwSjZVVXk2bFRYckQyUGtHUUZqZFJSSkoxZTJvZWR5T2RlZmh1a3NwMlNvbEFCRExLM1dTS3JpQ2ZyNk1xZ0laUUo1bmI0bzdmSmdXcWpxYUp1QytxeUlWOUhFcEcyRlhNdXB2andzNnFwYi9TNEpKUWxucGYvcEpGKzRuSVdsUnltVEsrM0tYc0N2MUo3bDdBd0pxczlyeXMvT3BMZVlrQitUeU53ckhVeXZJYUZPdGxKQ0daSGxDblM1RjVSNzlLYWZKWlh1S1ZHcFN1SzVHc0dydEtwZ2dGVjRVSjVjNGhYaG03U1M5RkR0VnZuUDVWTm15U3FrbUJZRm44Mk1qWGVxU0pjR0ZESjlKVCtzelZtVkxtbUUwbkkxSnN2UDdsZ2c1T3c2WkdVY2M3a1FxMGkxcU9LaTRxNWVDUVdFSGFVOTVSZlJtZnljMFExa0VheGpyUFpCaFJQeU8rdFRiczRxZ0plbG1wV2I4Znh5WDFWa3N4cmo1VStaT0tKT1gra09VZXBWVWxzWkwzZ0RZZW5ONGtCTWs2Rks3U3JiRVh5bCt5b1dSOUpsN1JhU3FrMWJrdHA4OUFscW5YaDE2azhSdVZTNStxU2xyb0dYY3VYNmlaanVjUHFvdUl0c0MzaXBncGpwTFdwTktsSDFKK3JWNWtSSkRtVW84Um1PYk90RHRyNWc4NXh4aGlsaUttWDdtN3ltT1hOOFp2N2RLYnNFVjE3RzhYNjREQ21UNW1UYWYzdmRsankvUDJoM1pEeFBndExTSmF1UktGQzNTUFdtUy9vd1FqQjNITGRaSHB5STVUTG5COE5xNWNQK3NJRkFuTFRwVTdwSlFQSjVQMnpnM0pYbDFXM3ltZWozbTY0VU81SHdVdGQvTVMyVm5waFpSRWJ1Q0FuU2NaeFdHY0ZqM3ZTay9GNnZLMlNwYmZFUjZUWnVPNUM3NGtqNXZSN2tlNnZMNDM1dGVxL1RrVEFRRGh1ZUJNUksvc3lNSlpad3QvdzFJN3hEeEhYWDZiYkx2QjJLVnRuL2g3MEdIZkhSWVEvb0RvRVJ5ZmQ3dzI2RGp2YmFrREZzUThPUVBob1RFOUZ5SkwwS1JzdWw5MG4rREtMRnRFZVloVU1WT0NPZjdDL1Z4L2tEM2luMUQzcE5VY0Z5UVA5TnhMaEZpVGNJSFFtS2RTaTVCQzA0YXhSSXMrT3RTVk4yTEdJWVZNZzJEYy9aQ0dnK3JBU2FaTkYxMmwxWk0vMiszeTQ3SHRGclVTM3hmVittSHFzYzFxdlRkcmFJNDd1c0h6U3FvajNvbEViM0J4Sm9CWCtkUjBXOWNRVVZJM2laMkpFUVFkRHhLaGh5ZlJIdytoUDhPbDM5S1RkZ3RSa2w4eXJUczhUVkdwallGS0NtRWJDMW5TMVhrTU1DMTNYa0dRQWl1b21EVndWbjZyQWFIdnd0MmxUZ05BOEhNMXlSUld1dXc1akpuaHNBekYvQjYxbkNkR2NWYVppMXZCSlpwODBjbTBQTXl4aTZJbTd6MkhSWmQydzV5TFk5bmVkT2x5QXJuMjN1MGxWTFZqQXpQWi9COXRaQUZKZkVaYlY5c2YwWVVaRjV5T1R5UDFPUlJwcXRNUzNxbDlXc2hBRzJOUjNFTEtTclRLMUdEMXVCbmZPdGc1YnRhcy9ZK0p6MmwrLzZTN1RaYW9hYUhjMlZzOHZ2Z1V6bVhTSjlib3VYVEFLMmRwUTFFckc1UEo0aTFKYVlxUkdyWWgxMVYxVFpvbW9QTGxITzg3MXRXcy82L2lsQjJyNzdLVGhXdzRwcFQxczdVbFI4c2FhUjFTS0N6VjEyV1Z2VjU4MjRJNXRlUHhXKzdhUDlhcWQ4VmtQWlZxSXdGd3AxamxlOXkzeXpNNjlTUFZlb3NhQnVudGk4dkcwbXF6cDhWb2VMbU0xeDUzdnJiYlJCdmwrMUszT01oYzg3ZkFxL1U3TjRaZnMwQTV5NUdKWDNadkdwK3JQR3Q1WkxEY3NzUHNTOFhabmcweEZ3dmFjdHJlczBKcVFXUVkzd2JHcnBHWXJXWml1N3VHbERJeHV3S2NETEhrYVdCTCt5TVorN2RCcDYwMVFRYkhaZlYwbjV5emVxRGtYVWZaNzhTYUhOS201VHVZblY2cklwclpKUDZ2dlpwc2t1M05BSlBERjFMcldJOU1JSjU1MVkwcldwaDN5dnRxY2tpRzVRNnM3RWRKUlUzcmczSTh5elFKcEZmdDJaOEtrUlNra2UzOXI2bG8yK0x3Y0d0VkdvbWFwcDNDeWMyQnlTemhybitaRGdNMEZWTDF4Tkxrb2Z6L3R6RHFycW1QQ3FkQ21sU29lNi9qUUR2Y0NyQml0YzFMY056dVN3R3RDM2xMOXlmbEh6enFuTDVuT3NxcGxWQnlKN05ObFYxL0V5WXkyOENqRzVUQlZqWHRsYjB1ZEEzQkZoUFRDc3c3Uzh2cnEwZ29PeUg2eVRnQUxCQytVSFNkSXhSTzJFTjFOM2lraGNja1BHeE53ZVNYQ3BGUFZ1WG52RWFxdXd1dEdXZFpINmZIbWphMTF3S01qYzdwRDVIZm0vajlGL21lbXpTMUJNek5qTzFGVnNiaWN5VEp4QW1zcnhwNThUaUdtb1ZEYXVXbTFCNTlRUmlEMEdWVHU4ZFpCWU9wSHNJYnVaNlVDdEZEZ05LWGtxcURJaXhKZlRrM0xtUTV1b0psZWlpcFd5aWVmbGJLZ2NOREJSRHBDcUFQQTl0MS9DbGpTYjUxZnp0WHFBelN1WDFvZW5YWTBvTTk3alZaOHQyeGY4ZG54cWZOMktPWlg3NVZXRHpWZ05wQlh1a2g0dS9XZDJiQlp2VkF4ZE9Vd3VCekVWNk9DSEV3UlQ1MDhIZ1dWRTFGQlVVamFaUmVXOFNmYjJkWnAxUWlIdllhNkdDUFZFclRzc0kyVks5K1QxYm9BSURhb3gvbHhsbVNWdGxkVytiSm5Kcm5Yb1ZTZ3RuOGlBWnpXK0VVckxIcHR4MnJlOEFkdHpuVkd3bFlwNk5OU2grVU01R2hHemFqa3RjbHRCdlFiaGFnL2xJZmxSaGk5cWNyZmxVV1cxOE1wcnl1UXM3U2MxOVRtdlk0VFBNZSthdE15YlFrejVGcThMd3BiSHRpdTJhSEZadWpkNy9EOVE5SDVjQUE9PVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyB0eXBlIFByb3BlcnR5SW5mbyB9IGZyb20gJy4vbW9kdWxlcy9maWx0ZXJpbmcvUHJvcGVydHlNYW5hZ2VyLmpzJ1xyXG5pbXBvcnQgdHlwZSB7IFF1ZXJ5LCBRdWVyeUFyZ3NSZXN1bHRNYXAgfSBmcm9tICcuL21vZHVsZXMvcXVlcmllcy9RdWVyeS5qcydcclxuaW1wb3J0IHsgdHlwZSBUcmVlTm9kZSwgV29ybGRUcmVlIH0gZnJvbSAnLi9tb2R1bGVzL3RyZWUvV29ybGRUcmVlLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIFV0aWxzIH0gZnJvbSAnLi9tb2R1bGVzL1V0aWxzLmpzJ1xyXG5pbXBvcnQgZGVmYXVsdEhkcmkgZnJvbSAnLi9hc3NldHMvaGRyaS9NaWxkLWR3YWIucG5nJ1xyXG5pbXBvcnQgeyBXb3JsZCB9IGZyb20gJy4vbW9kdWxlcy9Xb3JsZC5qcydcclxuaW1wb3J0IFNwZWNrbGVSZW5kZXJlciBmcm9tICcuL21vZHVsZXMvU3BlY2tsZVJlbmRlcmVyLmpzJ1xyXG5pbXBvcnQgeyBFeHRlbnNpb24gfSBmcm9tICcuL21vZHVsZXMvZXh0ZW5zaW9ucy9FeHRlbnNpb24uanMnXHJcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4vbW9kdWxlcy9sb2FkZXJzL0xvYWRlci5qcydcclxuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3RvciB9IGZyb20gJ3R5cGUtZmVzdCdcclxuaW1wb3J0IHR5cGUgeyBWZWN0b3IzTGlrZSB9IGZyb20gJy4vbW9kdWxlcy9iYXRjaGluZy9CYXRjaE9iamVjdC5qcydcclxuaW1wb3J0IHR5cGUgeyBGaWx0ZXJpbmdTdGF0ZSB9IGZyb20gJy4vbW9kdWxlcy9leHRlbnNpb25zL0ZpbHRlcmluZ0V4dGVuc2lvbi5qcydcclxuXHJcbmV4cG9ydCB0eXBlIFNwZWNrbGVSZWZlcmVuY2UgPSB7XHJcbiAgcmVmZXJlbmNlZElkOiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3BlY2tsZU9iamVjdCA9IHtcclxuICBbazogc3RyaW5nXTogdW5rbm93blxyXG4gIHNwZWNrbGVfdHlwZTogc3RyaW5nXHJcbiAgaWQ6IHN0cmluZ1xyXG4gIGVsZW1lbnRzPzogU3BlY2tsZVJlZmVyZW5jZVtdXHJcbiAgY2hpbGRyZW4/OiBTcGVja2xlT2JqZWN0W10gfCBTcGVja2xlUmVmZXJlbmNlW11cclxuICBuYW1lPzogc3RyaW5nXHJcbiAgcmVmZXJlbmNlZElkPzogc3RyaW5nXHJcbiAgdW5pdHM/OiBzdHJpbmdcclxuICBhcHBsaWNhdGlvbklkPzogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIERhdGFDaHVuayA9IHtcclxuICBpZDogc3RyaW5nXHJcbiAgZGF0YTogbnVtYmVyW11cclxuICByZWZlcmVuY2VzOiBudW1iZXJcclxuICBwcm9jZXNzZWQ/OiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmlld2VyUGFyYW1zIHtcclxuICBzaG93U3RhdHM6IGJvb2xlYW5cclxuICBlbnZpcm9ubWVudFNyYzogQXNzZXRcclxuICB2ZXJib3NlOiBib29sZWFuXHJcbiAgcmVzdHJpY3RJbnB1dFRvQ2FudmFzOiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEFzc2V0VHlwZSB7XHJcbiAgVEVYVFVSRV84QlBQID0gJ3BuZycsIC8vIEZvciBub3dcclxuICBURVhUVVJFX0hEUiA9ICdoZHInLFxyXG4gIFRFWFRVUkVfRVhSID0gJ2V4cicsXHJcbiAgRk9OVF9KU09OID0gJ2ZvbnQtanNvbidcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc3NldCB7XHJcbiAgaWQ6IHN0cmluZ1xyXG4gIHNyYzogc3RyaW5nXHJcbiAgdHlwZTogQXNzZXRUeXBlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgZGVmYXVsdCBIRFJJIHRoZSB2aWV3ZXIgdXNlcyBpcyBhY3R1YWxseSBhIHRydWUgSERSIGltYWdlICguZXhyKSxcclxuICogc3BlY2lmaWVkIGJ5IHRoZSBleHBsaWNpdCBURVhUVVJFX0VYUlxyXG4gKlxyXG4gKiBXZSBkbyB0aGlzIGJlY2F1c2UgYnVuZGxpbmcgYW4gYWN0dWFsIC5leHIgb3IgLmhkciBpbWFnZSBmb3JtYXQgd291bGQgcmVxdWlyZVxyXG4gKiBhbnlib2R5IGNvbnN1bWluZyB0aGUgdmlld2VyIHRvIG1ha2UgYWRqdXN0bWVudHMgdG8gdGhlaXIgYnVpbGQgY29uZmlnLCB0byBlbmFibGVcclxuICogaXRzIGltcG9ydC5cclxuICpcclxuICogVGhyZWUuanMgZG9lc24ndCBtaW5kIHRoZSBleHRlbnNpb24gb2YgdGhlIGFzc2V0IHlvdSBsb2FkLCBzbyBhbiAuZXhyIGhpZGRlbiBiZWhpbmRcclxuICogYSAucG5nIHdpbGwgd29yayBqdXN0IGZpbmUuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRGVmYXVsdFZpZXdlclBhcmFtczogVmlld2VyUGFyYW1zID0ge1xyXG4gIHNob3dTdGF0czogZmFsc2UsXHJcbiAgdmVyYm9zZTogZmFsc2UsXHJcbiAgZW52aXJvbm1lbnRTcmM6IHtcclxuICAgIGlkOiAnZGVmYXVsdEhEUkknLFxyXG4gICAgc3JjOiBkZWZhdWx0SGRyaSxcclxuICAgIHR5cGU6IEFzc2V0VHlwZS5URVhUVVJFX0VYUlxyXG4gIH0sXHJcbiAgcmVzdHJpY3RJbnB1dFRvQ2FudmFzOiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBWaWV3ZXJFdmVudCB7XHJcbiAgT2JqZWN0Q2xpY2tlZCA9ICdvYmplY3QtY2xpY2tlZCcsXHJcbiAgT2JqZWN0RG91YmxlQ2xpY2tlZCA9ICdvYmplY3QtZG91YmxlY2xpY2tlZCcsXHJcbiAgTG9hZENvbXBsZXRlID0gJ2xvYWQtY29tcGxldGUnLFxyXG4gIFVubG9hZENvbXBsZXRlID0gJ3VubG9hZC1jb21wbGV0ZScsXHJcbiAgVW5sb2FkQWxsQ29tcGxldGUgPSAndW5sb2FkLWFsbC1jb21wbGV0ZScsXHJcbiAgRmlsdGVyaW5nU3RhdGVTZXQgPSAnZmlsdGVyaW5nLXN0YXRlLXNldCcsXHJcbiAgTGlnaHRDb25maWdVcGRhdGVkID0gJ2xpZ2h0LWNvbmZpZy11cGRhdGVkJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdlckV2ZW50UGF5bG9hZCB7XHJcbiAgW1ZpZXdlckV2ZW50Lk9iamVjdENsaWNrZWRdOiBTZWxlY3Rpb25FdmVudCB8IG51bGxcclxuICBbVmlld2VyRXZlbnQuT2JqZWN0RG91YmxlQ2xpY2tlZF06IFNlbGVjdGlvbkV2ZW50IHwgbnVsbFxyXG4gIFtWaWV3ZXJFdmVudC5Mb2FkQ29tcGxldGVdOiBzdHJpbmdcclxuICBbVmlld2VyRXZlbnQuVW5sb2FkQ29tcGxldGVdOiBzdHJpbmdcclxuICBbVmlld2VyRXZlbnQuVW5sb2FkQWxsQ29tcGxldGVdOiB2b2lkXHJcbiAgW1ZpZXdlckV2ZW50LkZpbHRlcmluZ1N0YXRlU2V0XTogRmlsdGVyaW5nU3RhdGVcclxuICBbVmlld2VyRXZlbnQuTGlnaHRDb25maWdVcGRhdGVkXTogTGlnaHRDb25maWd1cmF0aW9uXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNwZWNrbGVWaWV3ID0gU3BlY2tsZU9iamVjdCAmIHtcclxuICBvcmlnaW46IFZlY3RvcjNMaWtlXHJcbiAgdGFyZ2V0OiBWZWN0b3IzTGlrZVxyXG4gIG5hbWU/OiBzdHJpbmdcclxuICB1cERpcmVjdGlvbj86IFZlY3RvcjNMaWtlXHJcbiAgZm9yd2FyZERpcmVjdGlvbj86IFZlY3RvcjNMaWtlXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNlbGVjdGlvbkV2ZW50ID0ge1xyXG4gIG11bHRpcGxlOiBib29sZWFuXHJcbiAgZXZlbnQ/OiBQb2ludGVyRXZlbnRcclxuICBoaXRzOiBBcnJheTx7XHJcbiAgICBub2RlOiBUcmVlTm9kZVxyXG4gICAgcG9pbnQ6IFZlY3RvcjNcclxuICB9PlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExpZ2h0Q29uZmlndXJhdGlvbiB7XHJcbiAgZW5hYmxlZD86IGJvb2xlYW5cclxuICBjYXN0U2hhZG93PzogYm9vbGVhblxyXG4gIGludGVuc2l0eT86IG51bWJlclxyXG4gIGNvbG9yPzogbnVtYmVyXHJcbiAgaW5kaXJlY3RMaWdodEludGVuc2l0eT86IG51bWJlclxyXG4gIHNoYWRvd2NhdGNoZXI/OiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3VuTGlnaHRDb25maWd1cmF0aW9uIGV4dGVuZHMgTGlnaHRDb25maWd1cmF0aW9uIHtcclxuICBlbGV2YXRpb24/OiBudW1iZXJcclxuICBhemltdXRoPzogbnVtYmVyXHJcbiAgcmFkaXVzPzogbnVtYmVyXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0TGlnaHRDb25maWd1cmF0aW9uOiBTdW5MaWdodENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgZW5hYmxlZDogdHJ1ZSxcclxuICBjYXN0U2hhZG93OiBmYWxzZSxcclxuICBpbnRlbnNpdHk6IDUsXHJcbiAgY29sb3I6IDB4ZmZmZmZmLFxyXG4gIGVsZXZhdGlvbjogMS4zMyxcclxuICBhemltdXRoOiAwLjc1LFxyXG4gIHJhZGl1czogMCxcclxuICBpbmRpcmVjdExpZ2h0SW50ZW5zaXR5OiAxLjIsXHJcbiAgc2hhZG93Y2F0Y2hlcjogZmFsc2VcclxufVxyXG5cclxuZXhwb3J0IGVudW0gT2JqZWN0TGF5ZXJzIHtcclxuICBTVFJFQU1fQ09OVEVOVF9NRVNIID0gMTAsXHJcbiAgU1RSRUFNX0NPTlRFTlRfTElORSA9IDExLFxyXG4gIFNUUkVBTV9DT05URU5UX1BPSU5UID0gMTIsXHJcbiAgU1RSRUFNX0NPTlRFTlRfVEVYVCA9IDEzLFxyXG4gIFNUUkVBTV9DT05URU5UX1BPSU5UX0NMT1VEID0gMTQsXHJcblxyXG4gIE5PTkUgPSAwLFxyXG4gIFNUUkVBTV9DT05URU5UID0gMSxcclxuICBQUk9QUyA9IDIsXHJcbiAgU0hBRE9XQ0FUQ0hFUiA9IDMsXHJcbiAgT1ZFUkxBWSA9IDQsXHJcbiAgTUVBU1VSRU1FTlRTID0gNVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBVcGRhdGVGbGFncyB7XHJcbiAgUkVOREVSID0gMGIxLFxyXG4gIFNIQURPV1MgPSAwYjEwLFxyXG4gIENMSVBQSU5HX1BMQU5FUyA9IDBiMTAwLFxyXG4gIFJFTkRFUl9SRVNFVCA9IDBiMTAwMFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1hdGVyaWFsT3B0aW9ucyB7XHJcbiAgc3RlbmNpbE91dGxpbmVzPzogU3RlbmNpbE91dGxpbmVUeXBlXHJcbiAgcG9pbnRTaXplPzogbnVtYmVyXHJcbiAgZGVwdGhXcml0ZT86IG51bWJlclxyXG59XHJcbmV4cG9ydCBlbnVtIFN0ZW5jaWxPdXRsaW5lVHlwZSB7XHJcbiAgTk9ORSxcclxuICBPVkVSTEFZLFxyXG4gIE9VVExJTkVfT05MWVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWaWV3ZXIge1xyXG4gIGdldCBVdGlscygpOiBVdGlsc1xyXG4gIGdldCBXb3JsZCgpOiBXb3JsZFxyXG5cclxuICBpbml0KCk6IFByb21pc2U8dm9pZD5cclxuICByZXNpemUoKTogdm9pZFxyXG4gIG9uPFQgZXh0ZW5kcyBWaWV3ZXJFdmVudD4oXHJcbiAgICBldmVudFR5cGU6IFQsXHJcbiAgICBoYW5kbGVyOiAoYXJnOiBWaWV3ZXJFdmVudFBheWxvYWRbVF0pID0+IHZvaWRcclxuICApOiB2b2lkXHJcbiAgcmVxdWVzdFJlbmRlcihmbGFncz86IFVwZGF0ZUZsYWdzKTogdm9pZFxyXG5cclxuICBzZXRMaWdodENvbmZpZ3VyYXRpb24oY29uZmlnOiBMaWdodENvbmZpZ3VyYXRpb24pOiB2b2lkXHJcblxyXG4gIGdldFZpZXdzKCk6IFNwZWNrbGVWaWV3W11cclxuXHJcbiAgbG9hZE9iamVjdChsb2FkZXI6IExvYWRlciwgem9vbVRvT2JqZWN0PzogYm9vbGVhbik6IFByb21pc2U8dm9pZD5cclxuICBjYW5jZWxMb2FkKHVybDogc3RyaW5nLCB1bmxvYWQ/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPlxyXG4gIHVubG9hZE9iamVjdCh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD5cclxuICB1bmxvYWRBbGwoKTogUHJvbWlzZTx2b2lkPlxyXG5cclxuICBzY3JlZW5zaG90KCk6IFByb21pc2U8c3RyaW5nPlxyXG5cclxuICBnZXRPYmplY3RQcm9wZXJ0aWVzKFxyXG4gICAgcmVzb3VyY2VVUkw/OiBzdHJpbmcsXHJcbiAgICBieXBhc3NDYWNoZT86IGJvb2xlYW5cclxuICApOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPlxyXG5cclxuICAvKiogRGF0YSBvcHMgKi9cclxuICBnZXRXb3JsZFRyZWUoKTogV29ybGRUcmVlXHJcbiAgcXVlcnk8VCBleHRlbmRzIFF1ZXJ5PihxdWVyeTogVCk6IFF1ZXJ5QXJnc1Jlc3VsdE1hcFtUWydvcGVyYXRpb24nXV0gfCBudWxsXHJcblxyXG4gIGdldFJlbmRlcmVyKCk6IFNwZWNrbGVSZW5kZXJlclxyXG4gIGdldENvbnRhaW5lcigpOiBIVE1MRWxlbWVudFxyXG4gIGdldENhbnZhcygpOiBIVE1MQ2FudmFzRWxlbWVudFxyXG5cclxuICBjcmVhdGVFeHRlbnNpb248VCBleHRlbmRzIEV4dGVuc2lvbj4odHlwZTogQ29uc3RydWN0b3I8VD4pOiBUXHJcbiAgZ2V0RXh0ZW5zaW9uPFQgZXh0ZW5kcyBFeHRlbnNpb24+KHR5cGU6IENvbnN0cnVjdG9yPFQ+KTogVFxyXG4gIGhhc0V4dGVuc2lvbjxUIGV4dGVuZHMgRXh0ZW5zaW9uPih0eXBlOiBDb25zdHJ1Y3RvcjxUPik6IGJvb2xlYW5cclxuICBkaXNwb3NlKCk6IHZvaWRcclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIE1hdHJpeDQsXHJcbiAgTm9CbGVuZGluZyxcclxuICBQTVJFTUdlbmVyYXRvcixcclxuICBTaGFkZXJNYXRlcmlhbCxcclxuICBXZWJHTFJlbmRlcmVyXHJcbn0gZnJvbSAndGhyZWUnXHJcblxyXG5leHBvcnQgY2xhc3MgUm90YXRhYmxlUE1SRU1HZW5lcmF0b3IgZXh0ZW5kcyBQTVJFTUdlbmVyYXRvciB7XHJcbiAgY29uc3RydWN0b3IocmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIpIHtcclxuICAgIHN1cGVyKHJlbmRlcmVyKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbXBpbGVQcm9wZXJFcXVpcmVjdFNoYWRlcihyb3RhdGlvbk1hdHJpeD86IE1hdHJpeDQpIHtcclxuICAgIGNvbnN0IGZpeGVkRW52RmxpcCA9IGZ1bmN0aW9uIF9nZXRFcXVpcmVjdE1hdGVyaWFsKCkge1xyXG4gICAgICByZXR1cm4gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuICAgICAgICBuYW1lOiAnRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYnLFxyXG5cclxuICAgICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgICAgZW52TWFwOiB7IHZhbHVlOiBudWxsIH0sXHJcbiAgICAgICAgICByb3RhdGlvbk1hdHJpeDogeyB2YWx1ZTogcm90YXRpb25NYXRyaXggfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHZlcnRleFNoYWRlcjogYFxyXG4gICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XHJcbiAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XHJcbiAgICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xyXG4gICAgICAgICAgdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XHJcbiAgICAgICAgICAvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXHJcbiAgICAgICAgICB2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcclxuICAgICAgICAgICAgdXYgPSAyLjAgKiB1diAtIDEuMDtcclxuICAgICAgICAgICAgdmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XHJcbiAgICAgICAgICAgIGlmICggZmFjZSA9PSAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XHJcbiAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcclxuICAgICAgICAgICAgICBkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcclxuICAgICAgICAgICAgICBkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcclxuICAgICAgICAgICAgfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XHJcbiAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcclxuICAgICAgICAgICAgICBkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcclxuICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xyXG4gICAgICAgICAgICAgIGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xyXG4gICAgICAgICAgICAgIGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3Rpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2b2lkIG1haW4oKSB7XHJcbiAgICAgICAgICAgIHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcclxuICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgYCxcclxuXHJcbiAgICAgICAgZnJhZ21lbnRTaGFkZXI6IC8qIGdsc2wgKi8gYFxyXG4gICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XHJcbiAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XHJcbiAgICAgICAgICB2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcclxuICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcclxuICAgICAgICAgIHVuaWZvcm0gbWF0NCByb3RhdGlvbk1hdHJpeDtcclxuICAgICAgICAgICNpbmNsdWRlIDxjb21tb24+XHJcbiAgICAgICAgICB2b2lkIG1haW4oKSB7XHJcblxyXG4gICAgICAgICAgICB2ZWMzIG91dHB1dERpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdk91dHB1dERpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoKHJvdGF0aW9uTWF0cml4ICogdmVjNCh2T3V0cHV0RGlyZWN0aW9uLCAwLikpLnh5eik7XHJcbiAgICAgICAgICAgIHZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYiwgMS4wICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgYCxcclxuXHJcbiAgICAgICAgYmxlbmRpbmc6IE5vQmxlbmRpbmcsXHJcbiAgICAgICAgZGVwdGhUZXN0OiBmYWxzZSxcclxuICAgICAgICBkZXB0aFdyaXRlOiBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMuX2VxdWlyZWN0TWF0ZXJpYWwgPSBmaXhlZEVudkZsaXAoKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0TWF0ZXJpYWwpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCBKc0xvZ2dlciBmcm9tICdqcy1sb2dnZXInXHJcbmltcG9ydCB7IGhhcywgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJ1xyXG5cclxuY29uc3QgTG9nZ2VyID0gKFxyXG4gIGhhcyhKc0xvZ2dlciwgJ3dhcm4nKSA/IEpzTG9nZ2VyIDogZ2V0KEpzTG9nZ2VyLCAnZGVmYXVsdCcpXHJcbikgYXMgSnNMb2dnZXIuR2xvYmFsTG9nZ2VyXHJcbmV4cG9ydCBkZWZhdWx0IExvZ2dlclxyXG4iLCJpbXBvcnQge1xyXG4gIFRleHR1cmUsXHJcbiAgV2ViR0xSZW5kZXJlcixcclxuICBUZXh0dXJlTG9hZGVyLFxyXG4gIENvbG9yLFxyXG4gIERhdGFUZXh0dXJlLFxyXG4gIERhdGFUZXh0dXJlTG9hZGVyLFxyXG4gIE1hdHJpeDQsXHJcbiAgRXVsZXJcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgRVhSTG9hZGVyIH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvRVhSTG9hZGVyLmpzJ1xyXG5pbXBvcnQgeyBSR0JFTG9hZGVyIH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvUkdCRUxvYWRlci5qcydcclxuaW1wb3J0IHsgRm9udExvYWRlciwgRm9udCB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMnXHJcbmltcG9ydCB7IHR5cGUgQXNzZXQsIEFzc2V0VHlwZSB9IGZyb20gJy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCB7IFJvdGF0YWJsZVBNUkVNR2VuZXJhdG9yIH0gZnJvbSAnLi9vYmplY3RzL1JvdGF0YWJsZVBNUkVNR2VuZXJhdG9yLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2V0cyB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiB7IFtuYW1lOiBzdHJpbmddOiBUZXh0dXJlIHwgRm9udCB9ID0ge31cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TG9hZGVyKFxyXG4gICAgc3JjOiBzdHJpbmcsXHJcbiAgICBhc3NldFR5cGU6IEFzc2V0VHlwZVxyXG4gICk6IFRleHR1cmVMb2FkZXIgfCBEYXRhVGV4dHVyZUxvYWRlciB8IG51bGwge1xyXG4gICAgaWYgKGFzc2V0VHlwZSA9PT0gdW5kZWZpbmVkKSBhc3NldFR5cGUgPSBzcmMuc3BsaXQoJy4nKS5wb3AoKSBhcyBBc3NldFR5cGVcclxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhBc3NldFR5cGUpLmluY2x1ZGVzKGFzc2V0VHlwZSkpIHtcclxuICAgICAgTG9nZ2VyLndhcm4oYEFzc2V0ICR7c3JjfSBjb3VsZCBub3QgYmUgbG9hZGVkLiBVbmtub3duIHR5cGVgKVxyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgc3dpdGNoIChhc3NldFR5cGUpIHtcclxuICAgICAgY2FzZSBBc3NldFR5cGUuVEVYVFVSRV9FWFI6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBFWFJMb2FkZXIoKVxyXG4gICAgICBjYXNlIEFzc2V0VHlwZS5URVhUVVJFX0hEUjpcclxuICAgICAgICByZXR1cm4gbmV3IFJHQkVMb2FkZXIoKVxyXG4gICAgICBjYXNlIEFzc2V0VHlwZS5URVhUVVJFXzhCUFA6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0dXJlTG9hZGVyKClcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgaGRyaVRvUE1SRU0ocmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIsIGhkcmlUZXg6IFRleHR1cmUpOiBUZXh0dXJlIHtcclxuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBSb3RhdGFibGVQTVJFTUdlbmVyYXRvcihyZW5kZXJlcilcclxuICAgIGNvbnN0IG1hdCA9IG5ldyBNYXRyaXg0KCkubWFrZVJvdGF0aW9uRnJvbUV1bGVyKFxyXG4gICAgICBuZXcgRXVsZXIoLU1hdGguUEkgKiAwLjUsIDAsIC1NYXRoLlBJICogMC41KVxyXG4gICAgKVxyXG4gICAgZ2VuZXJhdG9yLmNvbXBpbGVQcm9wZXJFcXVpcmVjdFNoYWRlcihtYXQpXHJcbiAgICBjb25zdCBwbXJlbVJUID0gZ2VuZXJhdG9yLmZyb21FcXVpcmVjdGFuZ3VsYXIoaGRyaVRleClcclxuICAgIGdlbmVyYXRvci5kaXNwb3NlKClcclxuICAgIHJldHVybiBwbXJlbVJULnRleHR1cmVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RW52aXJvbm1lbnQoXHJcbiAgICBhc3NldDogQXNzZXQsXHJcbiAgICByZW5kZXJlcjogV2ViR0xSZW5kZXJlclxyXG4gICk6IFByb21pc2U8VGV4dHVyZT4ge1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlW2Fzc2V0LmlkXSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICAgIEFzc2V0cy5oZHJpVG9QTVJFTShyZW5kZXJlciwgdGhpcy5fY2FjaGVbYXNzZXQuaWRdIGFzIFRleHR1cmUpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VGV4dHVyZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBsb2FkZXIgPSBBc3NldHMuZ2V0TG9hZGVyKGFzc2V0LnNyYywgYXNzZXQudHlwZSlcclxuICAgICAgaWYgKGxvYWRlcikge1xyXG4gICAgICAgIGxvYWRlci5sb2FkKFxyXG4gICAgICAgICAgYXNzZXQuc3JjLFxyXG4gICAgICAgICAgKHRleHR1cmUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGVbYXNzZXQuaWRdID0gdGV4dHVyZVxyXG4gICAgICAgICAgICByZXNvbHZlKEFzc2V0cy5oZHJpVG9QTVJFTShyZW5kZXJlciwgdGV4dHVyZSkpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgKGVycm9yOiBFcnJvckV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYExvYWRpbmcgYXNzZXQgJHthc3NldC5pZH0gZmFpbGVkICR7ZXJyb3IubWVzc2FnZX1gKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgTG9hZGluZyBhc3NldCAke2Fzc2V0LmlkfSBmYWlsZWRgKSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VGV4dHVyZShhc3NldDogQXNzZXQpOiBQcm9taXNlPFRleHR1cmU+IHtcclxuICAgIGlmICh0aGlzLl9jYWNoZVthc3NldC5pZF0pIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jYWNoZVthc3NldC5pZF0gYXMgVGV4dHVyZSlcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUZXh0dXJlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIEhhY2sgdG8gbG9hZCAnZGF0YTppbWFnZSdzIC0gZm9yIHNvbWUgcmVhc29uLCB0aGUgZnJvbnRlbmQgcmVjZWl2ZXMgdGhlIGRlZmF1bHRcclxuICAgICAgLy8gZ3JhZGllbnQgbWFwIGFzIGEgZGF0YSBpbWFnZSB1cmwsIHJhdGhlciB0aGFuIGEgZmlsZSAoPykuXHJcbiAgICAgIGlmIChhc3NldC5zcmMuaW5jbHVkZXMoJ2RhdGE6aW1hZ2UnKSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKClcclxuICAgICAgICBpbWFnZS5zcmMgPSBhc3NldC5zcmNcclxuICAgICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0dXJlID0gbmV3IFRleHR1cmUoaW1hZ2UpXHJcbiAgICAgICAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy5fY2FjaGVbYXNzZXQuaWRdID0gdGV4dHVyZVxyXG4gICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbWFnZS5vbmVycm9yID0gKGV2KSA9PiB7XHJcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBMb2FkaW5nIGFzc2V0ICR7YXNzZXQuaWR9IGZhaWxlZCB3aXRoICR7ZXYudG9TdHJpbmcoKX1gKSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbG9hZGVyID0gQXNzZXRzLmdldExvYWRlcihhc3NldC5zcmMsIGFzc2V0LnR5cGUpXHJcbiAgICAgICAgaWYgKGxvYWRlcikge1xyXG4gICAgICAgICAgbG9hZGVyLmxvYWQoXHJcbiAgICAgICAgICAgIGFzc2V0LnNyYyxcclxuICAgICAgICAgICAgKHRleHR1cmUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9jYWNoZVthc3NldC5pZF0gPSB0ZXh0dXJlXHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jYWNoZVthc3NldC5pZF0gYXMgVGV4dHVyZSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAoZXJyb3I6IEVycm9yRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBMb2FkaW5nIGFzc2V0ICR7YXNzZXQuaWR9IGZhaWxlZCAke2Vycm9yLm1lc3NhZ2V9YCkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgTG9hZGluZyBhc3NldCAke2Fzc2V0LmlkfSBmYWlsZWRgKSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEZvbnQoYXNzZXQ6IEFzc2V0IHwgc3RyaW5nKTogUHJvbWlzZTxGb250PiB7XHJcbiAgICBsZXQgc3JjVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxyXG4gICAgaWYgKCg8QXNzZXQ+YXNzZXQpLnNyYykge1xyXG4gICAgICBzcmNVcmwgPSAoYXNzZXQgYXMgQXNzZXQpLnNyY1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3JjVXJsID0gYXNzZXQgYXMgc3RyaW5nXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NhY2hlW3NyY1VybF0pIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jYWNoZVtzcmNVcmxdIGFzIEZvbnQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZvbnQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbmV3IEZvbnRMb2FkZXIoKS5sb2FkKFxyXG4gICAgICAgIHNyY1VybCxcclxuICAgICAgICAoZm9udDogRm9udCkgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZShmb250KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIChlcnJvcjogRXJyb3JFdmVudCkgPT4ge1xyXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgTG9hZGluZyBhc3NldCAke3NyY1VybH0gZmFpbGVkICR7ZXJyb3IubWVzc2FnZX1gKSlcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKiogVG8gYmUgdXNlZCB3aXNlbHkgKi9cclxuICBwdWJsaWMgc3RhdGljIGFzeW5jIGdldFRleHR1cmVEYXRhKGFzc2V0OiBBc3NldCk6IFByb21pc2U8SW1hZ2VEYXRhPiB7XHJcbiAgICBjb25zdCB0ZXh0dXJlID0gYXdhaXQgQXNzZXRzLmdldFRleHR1cmUoYXNzZXQpXHJcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgY2FudmFzLndpZHRoID0gdGV4dHVyZS5pbWFnZS53aWR0aFxyXG4gICAgY2FudmFzLmhlaWdodCA9IHRleHR1cmUuaW1hZ2UuaGVpZ2h0XHJcblxyXG4gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXHJcbiAgICAvKiogQXMgeW91IGNhbiBzZWUgaGVyZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTENhbnZhc0VsZW1lbnQvZ2V0Q29udGV4dCNyZXR1cm5fdmFsdWVcclxuICAgICAqICBUaGUgb25seSB2YWxpZCBjYXNlcyB3aGVyZSBgZ2V0Q29udGV4dGAgcmV0dXJucyBudWxsIGFyZTpcclxuICAgICAqICAtIFwiY29udGV4dFR5cGUgZG9lc24ndCBtYXRjaCBhIHBvc3NpYmxlIGRyYXdpbmcgY29udGV4dFwiIERlZmluZXRlbHkgbm90IHRoZSBjYXNlIGFzIHdlJ3JlIHByb3ZpZGluZyAnMmQnIVxyXG4gICAgICogIC0gXCJkaWZmZXJzIGZyb20gdGhlIGZpcnN0IGNvbnRleHRUeXBlIHJlcXVlc3RlZFwiLiBJdCBjYW4ndCBzaW5jZSAqKndlJ3JlIG9ubHkgcmVxdWVzdGluZyBhIGNvbnRleHQgb25jZSoqIVxyXG4gICAgICogIC0gSWYgaXQgcmV0dXJucyBudWxsIG91dHNpZGUgb2YgdGhlc2UgdHdvIGNhc2VzZSwgeW91IGhhdmUgYmlnZ2VyIHByb2JsZW1zIHRoYW4gdXMgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGhlcmVcclxuICAgICAqL1xyXG4gICAgaWYgKCFjb250ZXh0KSB0aHJvdyBuZXcgRXJyb3IoJ0ZhdGFsISAyZCBjb250ZXh0IGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQuJylcclxuXHJcbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlLmltYWdlLCAwLCAwKVxyXG5cclxuICAgIGNvbnN0IGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlR3JhZGllbnRSYW1wVGV4dHVyZShcclxuICAgIGZyb21Db2xvcjogc3RyaW5nLFxyXG4gICAgdG9Db2xvcjogc3RyaW5nLFxyXG4gICAgc3RlcHM6IG51bWJlclxyXG4gICkge1xyXG4gICAgZnJvbUNvbG9yXHJcbiAgICB0b0NvbG9yXHJcbiAgICBzdGVwc1xyXG4gICAgLy8gTk9UIE5FQ0VTU0FSWSBBVCBUSEUgTU9NRU5ULiBVU0lORyBTVEFUSUMgR1JBRElFTlQgUkFNUFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZURpc2NyZWV0UmFtcFRleHR1cmUoaGV4Q29sb3JzOiBudW1iZXJbXSk6IFRleHR1cmUge1xyXG4gICAgY29uc3Qgd2lkdGggPSBoZXhDb2xvcnMubGVuZ3RoXHJcbiAgICBjb25zdCBoZWlnaHQgPSAxXHJcblxyXG4gICAgY29uc3Qgc2l6ZSA9IHdpZHRoICogaGVpZ2h0XHJcbiAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHNpemUpXHJcblxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBoZXhDb2xvcnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3Qgc3RyaWRlID0gayAqIDRcclxuICAgICAgY29uc3QgY29sb3IgPSBuZXcgQ29sb3IoaGV4Q29sb3JzW2tdKVxyXG4gICAgICBjb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuICAgICAgZGF0YVtzdHJpZGVdID0gTWF0aC5mbG9vcihjb2xvci5yICogMjU1KVxyXG4gICAgICBkYXRhW3N0cmlkZSArIDFdID0gTWF0aC5mbG9vcihjb2xvci5nICogMjU1KVxyXG4gICAgICBkYXRhW3N0cmlkZSArIDJdID0gTWF0aC5mbG9vcihjb2xvci5iICogMjU1KVxyXG4gICAgICBkYXRhW3N0cmlkZSArIDNdID0gMjU1XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGV4dHVyZSA9IG5ldyBEYXRhVGV4dHVyZShkYXRhLCB3aWR0aCwgaGVpZ2h0KVxyXG4gICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWVcclxuXHJcbiAgICAvKiogSW4gY2FzZSB3ZSB3YW50IHRvIHNlZSB3aGF0IGdldHMgZ2VuZXJhdGVkICovXHJcbiAgICAvLyBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxyXG4gICAgLy8gY2FudmFzLndpZHRoID0gd2lkdGhcclxuICAgIC8vIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHRcclxuICAgIC8vIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxyXG4gICAgLy8gY29uc3QgaW1hZ2VEYXRhID0gbmV3IEltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KVxyXG4gICAgLy8gaW1hZ2VEYXRhLmRhdGEuc2V0KGRhdGEpXHJcbiAgICAvLyBjb250ZXh0LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApXHJcbiAgICAvLyBjb25zb2xlLmxvZygnU1JDOicsIGNhbnZhcy50b0RhdGFVUkwoKSlcclxuXHJcbiAgICByZXR1cm4gdGV4dHVyZVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCb3gzLCBWZWN0b3IzLCBNYXRyaXg0IH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IE9CQiB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9tYXRoL09CQi5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBBc3luY1BhdXNlIHtcclxuICBwcml2YXRlIGxhc3RQYXVzZVRpbWU6IG51bWJlciA9IDBcclxuICBwdWJsaWMgbmVlZHNXYWl0OiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgcHVibGljIHRpY2sobWF4RGVsdGE6IG51bWJlcikge1xyXG4gICAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KClcclxuICAgIGNvbnN0IGRlbHRhID0gbm93IC0gdGhpcy5sYXN0UGF1c2VUaW1lXHJcbiAgICAvLyBjb25zb2xlLmxvZygnRGVsdGEgLT4gJywgZGVsdGEpXHJcbiAgICBpZiAoZGVsdGEgPiBtYXhEZWx0YSkge1xyXG4gICAgICB0aGlzLm5lZWRzV2FpdCA9IHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB3YWl0KHdhaXRUaW1lOiBudW1iZXIpIHtcclxuICAgIHRoaXMubGFzdFBhdXNlVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB3YWl0VGltZSkpXHJcbiAgICB0aGlzLm5lZWRzV2FpdCA9IGZhbHNlXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBNYXRCdWZmMDogTWF0cml4NCA9IG5ldyBNYXRyaXg0KClcclxuY29uc3QgTWF0QnVmZjE6IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcbmNvbnN0IE1hdEJ1ZmYyOiBNYXRyaXg0ID0gbmV3IE1hdHJpeDQoKVxyXG5cclxuZXhwb3J0IGNsYXNzIFdvcmxkIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGJveGVzOiBBcnJheTxCb3gzPiA9IG5ldyBBcnJheTxCb3gzPigpXHJcbiAgcHVibGljIHJlYWRvbmx5IHdvcmxkQm94OiBCb3gzID0gbmV3IEJveDMoKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgVmVjQnVmZjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICBwcml2YXRlIHJlYWRvbmx5IEJveEJ1ZmYwOiBCb3gzID0gbmV3IEJveDMoKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQm94QnVmZjE6IEJveDMgPSBuZXcgQm94MygpXHJcblxyXG4gIHByaXZhdGUgX3dvcmxkT3JpZ2luOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHB1YmxpYyBnZXQgd29ybGRTaXplKCkge1xyXG4gICAgdGhpcy53b3JsZEJveC5nZXRDZW50ZXIodGhpcy5fd29ybGRPcmlnaW4pXHJcbiAgICBjb25zdCBzaXplID0gbmV3IFZlY3RvcjMoKS5zdWJWZWN0b3JzKHRoaXMud29ybGRCb3gubWF4LCB0aGlzLndvcmxkQm94Lm1pbilcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHg6IHNpemUueCxcclxuICAgICAgeTogc2l6ZS55LFxyXG4gICAgICB6OiBzaXplLnpcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgd29ybGRPcmlnaW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fd29ybGRPcmlnaW5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmRXb3JsZChib3g6IEJveDMpIHtcclxuICAgIHRoaXMuYm94ZXMucHVzaChib3gpXHJcbiAgICB0aGlzLnVwZGF0ZVdvcmxkKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWR1Y2VXb3JsZChib3g6IEJveDMpIHtcclxuICAgIHRoaXMuYm94ZXMuc3BsaWNlKHRoaXMuYm94ZXMuaW5kZXhPZihib3gpLCAxKVxyXG4gICAgdGhpcy51cGRhdGVXb3JsZCgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlV29ybGQoKSB7XHJcbiAgICB0aGlzLndvcmxkQm94Lm1ha2VFbXB0eSgpXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMuYm94ZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgdGhpcy53b3JsZEJveC51bmlvbih0aGlzLmJveGVzW2tdKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0V29ybGQoKSB7XHJcbiAgICB0aGlzLndvcmxkQm94Lm1ha2VFbXB0eSgpXHJcbiAgICB0aGlzLmJveGVzLmxlbmd0aCA9IDBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZWxhdGl2ZU9mZnNldChvZmZzZXRBbW91bnQ6IG51bWJlciA9IDAuMDAxKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLndvcmxkQm94LmlzRW1wdHkoKSkgcmV0dXJuIG9mZnNldEFtb3VudFxyXG5cclxuICAgIE1hdEJ1ZmYwLmlkZW50aXR5KClcclxuICAgIE1hdEJ1ZmYwLm1ha2VTY2FsZSgxICsgb2Zmc2V0QW1vdW50LCAxICsgb2Zmc2V0QW1vdW50LCAxICsgb2Zmc2V0QW1vdW50KVxyXG4gICAgY29uc3Qgd29ybGRTaXplID0gdGhpcy5WZWNCdWZmLnNldChcclxuICAgICAgdGhpcy53b3JsZFNpemUueCAqIDAuNSxcclxuICAgICAgdGhpcy53b3JsZFNpemUueSAqIDAuNSxcclxuICAgICAgdGhpcy53b3JsZFNpemUueiAqIDAuNVxyXG4gICAgKVxyXG4gICAgdGhpcy5Cb3hCdWZmMC5taW4uc2V0KDAsIDAsIDApXHJcbiAgICB0aGlzLkJveEJ1ZmYwLm1heC5zZXQoMCwgMCwgMClcclxuICAgIHRoaXMuQm94QnVmZjEubWluLnNldCgwLCAwLCAwKVxyXG4gICAgdGhpcy5Cb3hCdWZmMS5tYXguc2V0KDAsIDAsIDApXHJcbiAgICBjb25zdCBzaXplQm94ID0gdGhpcy5Cb3hCdWZmMC5leHBhbmRCeVZlY3Rvcih3b3JsZFNpemUpXHJcbiAgICBjb25zdCBvZmZzZXRCb3ggPSB0aGlzLkJveEJ1ZmYxLmNvcHkoc2l6ZUJveCkuYXBwbHlNYXRyaXg0KE1hdEJ1ZmYwKVxyXG4gICAgY29uc3QgZGlzdCA9IG9mZnNldEJveC5tYXguZGlzdGFuY2VUbyhzaXplQm94Lm1heClcclxuICAgIHJldHVybiBkaXN0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVsYXRpdmVPZmZzZXRCb3goYm94OiBCb3gzLCBvZmZzZXRBbW91bnQ6IG51bWJlciA9IDAuMDAxKSB7XHJcbiAgICBpZiAodGhpcy53b3JsZEJveC5pc0VtcHR5KCkpIHJldHVybiBib3hcclxuXHJcbiAgICBjb25zdCBjZW50ZXIgPSBib3guZ2V0Q2VudGVyKG5ldyBWZWN0b3IzKCkpXHJcbiAgICBNYXRCdWZmMS5tYWtlVHJhbnNsYXRpb24oY2VudGVyLngsIGNlbnRlci55LCBjZW50ZXIueilcclxuICAgIE1hdEJ1ZmYyLmNvcHkoTWF0QnVmZjEpLmludmVydCgpXHJcbiAgICBNYXRCdWZmMC5pZGVudGl0eSgpXHJcbiAgICBNYXRCdWZmMC5tYWtlU2NhbGUoMSArIG9mZnNldEFtb3VudCwgMSArIG9mZnNldEFtb3VudCwgMSArIG9mZnNldEFtb3VudClcclxuICAgIGNvbnN0IG9mZnNldEJveCA9IG5ldyBCb3gzKCkuY29weShib3gpXHJcbiAgICBvZmZzZXRCb3guYXBwbHlNYXRyaXg0KE1hdEJ1ZmYyKVxyXG4gICAgb2Zmc2V0Qm94LmFwcGx5TWF0cml4NChNYXRCdWZmMClcclxuICAgIG9mZnNldEJveC5hcHBseU1hdHJpeDQoTWF0QnVmZjEpXHJcbiAgICByZXR1cm4gb2Zmc2V0Qm94XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGV4cGFuZEJveFJlbGF0aXZlPFQgZXh0ZW5kcyBPQkIgfCBCb3gzPihcclxuICAgIGJveDogVCxcclxuICAgIG9mZnNldEFtb3VudDogbnVtYmVyID0gMC4wMDFcclxuICApOiBUIHtcclxuICAgIGlmIChib3guaXNFbXB0eSgpKSByZXR1cm4gYm94XHJcblxyXG4gICAgaWYgKGJveCBpbnN0YW5jZW9mIEJveDMpIHJldHVybiBXb3JsZC5leHBhbmRCb3gzUmVsYXRpdmUoYm94LCBvZmZzZXRBbW91bnQpIGFzIFRcclxuICAgIGVsc2UgcmV0dXJuIFdvcmxkLmV4cGFuZE9CQlJlbGF0aXZlKGJveCwgb2Zmc2V0QW1vdW50KSBhcyBUXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBleHBhbmRCb3gzUmVsYXRpdmUoYm94OiBCb3gzLCBvZmZzZXRBbW91bnQ6IG51bWJlcik6IEJveDMge1xyXG4gICAgY29uc3QgY2VudGVyID0gYm94LmdldENlbnRlcihuZXcgVmVjdG9yMygpKVxyXG4gICAgY29uc3Qgc2l6ZSA9IGJveC5nZXRTaXplKG5ldyBWZWN0b3IzKCkpXHJcbiAgICBNYXRCdWZmMS5tYWtlVHJhbnNsYXRpb24oY2VudGVyLngsIGNlbnRlci55LCBjZW50ZXIueilcclxuICAgIE1hdEJ1ZmYyLmNvcHkoTWF0QnVmZjEpLmludmVydCgpXHJcbiAgICBNYXRCdWZmMC5pZGVudGl0eSgpXHJcbiAgICBNYXRCdWZmMC5tYWtlU2NhbGUoMSArIG9mZnNldEFtb3VudCwgMSArIG9mZnNldEFtb3VudCwgMSArIG9mZnNldEFtb3VudClcclxuICAgIGNvbnN0IG9mZnNldEJveCA9IG5ldyBCb3gzKCkuY29weShib3gpXHJcbiAgICBpZiAoc2l6ZS54ID09PSAwKSB7XHJcbiAgICAgIG9mZnNldEJveC5taW4ueCArPSAtb2Zmc2V0QW1vdW50ICogMC41XHJcbiAgICAgIG9mZnNldEJveC5tYXgueCArPSBvZmZzZXRBbW91bnQgKiAwLjVcclxuICAgIH1cclxuICAgIGlmIChzaXplLnkgPT09IDApIHtcclxuICAgICAgb2Zmc2V0Qm94Lm1pbi55ICs9IC1vZmZzZXRBbW91bnQgKiAwLjVcclxuICAgICAgb2Zmc2V0Qm94Lm1heC55ICs9IG9mZnNldEFtb3VudCAqIDAuNVxyXG4gICAgfVxyXG4gICAgaWYgKHNpemUueiA9PT0gMCkge1xyXG4gICAgICBvZmZzZXRCb3gubWluLnogKz0gLW9mZnNldEFtb3VudCAqIDAuNVxyXG4gICAgICBvZmZzZXRCb3gubWF4LnogKz0gb2Zmc2V0QW1vdW50ICogMC41XHJcbiAgICB9XHJcbiAgICBvZmZzZXRCb3guYXBwbHlNYXRyaXg0KE1hdEJ1ZmYyKVxyXG4gICAgb2Zmc2V0Qm94LmFwcGx5TWF0cml4NChNYXRCdWZmMClcclxuICAgIG9mZnNldEJveC5hcHBseU1hdHJpeDQoTWF0QnVmZjEpXHJcblxyXG4gICAgcmV0dXJuIG9mZnNldEJveFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZXhwYW5kT0JCUmVsYXRpdmUoYm94OiBPQkIsIG9mZnNldEFtb3VudDogbnVtYmVyKTogT0JCIHtcclxuICAgIGNvbnN0IGNlbnRlciA9IGJveC5jZW50ZXJcclxuICAgIGNvbnN0IHNpemUgPSBib3guZ2V0U2l6ZShuZXcgVmVjdG9yMygpKVxyXG4gICAgTWF0QnVmZjEubWFrZVRyYW5zbGF0aW9uKGNlbnRlci54LCBjZW50ZXIueSwgY2VudGVyLnopXHJcbiAgICBNYXRCdWZmMi5jb3B5KE1hdEJ1ZmYxKS5pbnZlcnQoKVxyXG4gICAgTWF0QnVmZjAuaWRlbnRpdHkoKVxyXG4gICAgTWF0QnVmZjAubWFrZVNjYWxlKDEgKyBvZmZzZXRBbW91bnQsIDEgKyBvZmZzZXRBbW91bnQsIDEgKyBvZmZzZXRBbW91bnQpXHJcbiAgICBjb25zdCBvZmZzZXRCb3ggPSBuZXcgT0JCKCkuY29weShib3gpXHJcbiAgICBpZiAoc2l6ZS54ID09PSAwKSB7XHJcbiAgICAgIG9mZnNldEJveC5oYWxmU2l6ZS54ICs9IG9mZnNldEFtb3VudCAqIDAuNVxyXG4gICAgfVxyXG4gICAgaWYgKHNpemUueSA9PT0gMCkge1xyXG4gICAgICBvZmZzZXRCb3guaGFsZlNpemUueSArPSBvZmZzZXRBbW91bnQgKiAwLjVcclxuICAgIH1cclxuICAgIGlmIChzaXplLnogPT09IDApIHtcclxuICAgICAgb2Zmc2V0Qm94LmhhbGZTaXplLnogKz0gb2Zmc2V0QW1vdW50ICogMC41XHJcbiAgICB9XHJcbiAgICBvZmZzZXRCb3guYXBwbHlNYXRyaXg0KE1hdEJ1ZmYyKVxyXG4gICAgb2Zmc2V0Qm94LmFwcGx5TWF0cml4NChNYXRCdWZmMClcclxuICAgIG9mZnNldEJveC5hcHBseU1hdHJpeDQoTWF0QnVmZjEpXHJcblxyXG4gICAgcmV0dXJuIG9mZnNldEJveFxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCb3gzLCBNYXRlcmlhbCwgT2JqZWN0M0QsIFdlYkdMUmVuZGVyZXIgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgdHlwZSBGaWx0ZXJNYXRlcmlhbE9wdGlvbnMgfSBmcm9tICcuLi9tYXRlcmlhbHMvTWF0ZXJpYWxzLmpzJ1xyXG5pbXBvcnQgeyBOb2RlUmVuZGVyVmlldyB9IGZyb20gJy4uL3RyZWUvTm9kZVJlbmRlclZpZXcuanMnXHJcbmltcG9ydCB7IE1lc2hCYXRjaCB9IGZyb20gJy4vTWVzaEJhdGNoLmpzJ1xyXG5pbXBvcnQgeyBJbnN0YW5jZWRNZXNoQmF0Y2ggfSBmcm9tICcuL0luc3RhbmNlZE1lc2hCYXRjaC5qcydcclxuaW1wb3J0IFRleHRCYXRjaCBmcm9tICcuL1RleHRCYXRjaC5qcydcclxuXHJcbmV4cG9ydCBlbnVtIEdlb21ldHJ5VHlwZSB7XHJcbiAgTUVTSCxcclxuICBMSU5FLFxyXG4gIFBPSU5ULFxyXG4gIFBPSU5UX0NMT1VELFxyXG4gIFRFWFRcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcmF3R3JvdXAge1xyXG4gIHN0YXJ0OiBudW1iZXJcclxuICBjb3VudDogbnVtYmVyXHJcbiAgbWF0ZXJpYWxJbmRleDogbnVtYmVyXHJcbn1cclxuXHJcbi8qKiBUTyBETzogVW5pZnkgcG9pbnQgYW5kIG1lc2ggYmF0Y2ggaW1wbGVtZW50YXRpb25zICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2gge1xyXG4gIGlkOiBzdHJpbmdcclxuICBzdWJ0cmVlSWQ6IHN0cmluZ1xyXG4gIHJlbmRlclZpZXdzOiBOb2RlUmVuZGVyVmlld1tdXHJcbiAgYmF0Y2hNYXRlcmlhbDogTWF0ZXJpYWxcclxuICByZW5kZXJPYmplY3Q6IE9iamVjdDNEXHJcbiAgZ2VvbWV0cnlUeXBlOiBHZW9tZXRyeVR5cGVcclxuXHJcbiAgZ2V0IGJvdW5kcygpOiBCb3gzXHJcbiAgZ2V0IGRyYXdDYWxscygpOiBudW1iZXJcclxuICBnZXQgbWluRHJhd0NhbGxzKCk6IG51bWJlclxyXG4gIGdldCBtYXRlcmlhbHMoKTogTWF0ZXJpYWxbXVxyXG4gIGdldCBncm91cHMoKTogRHJhd0dyb3VwW11cclxuICBnZXQgdHJpQ291bnQoKTogbnVtYmVyXHJcbiAgZ2V0IHBvaW50Q291bnQoKTogbnVtYmVyXHJcbiAgZ2V0IGxpbmVDb3VudCgpOiBudW1iZXJcclxuICBnZXQgdmVydENvdW50KCk6IG51bWJlclxyXG5cclxuICBnZXRDb3VudCgpOiBudW1iZXJcclxuICBzZXRCYXRjaE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCk6IHZvaWRcclxuICBzZXRCYXRjaEJ1ZmZlcnMocmFuZ2U6IEJhdGNoVXBkYXRlUmFuZ2VbXSk6IHZvaWRcclxuICBzZXRWaXNpYmxlUmFuZ2UocmFuZ2U6IEJhdGNoVXBkYXRlUmFuZ2VbXSk6IHZvaWRcclxuICBnZXRWaXNpYmxlUmFuZ2UoKTogQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIHNldERyYXdSYW5nZXMocmFuZ2VzOiBCYXRjaFVwZGF0ZVJhbmdlW10pOiB2b2lkXHJcbiAgcmVzZXREcmF3UmFuZ2VzKCk6IHZvaWRcclxuICBidWlsZEJhdGNoKCk6IFByb21pc2U8dm9pZD5cclxuICBnZXRSZW5kZXJWaWV3KGluZGV4OiBudW1iZXIpOiBOb2RlUmVuZGVyVmlldyB8IG51bGxcclxuICBnZXRNYXRlcmlhbEF0SW5kZXgoaW5kZXg6IG51bWJlcik6IE1hdGVyaWFsIHwgbnVsbFxyXG4gIGdldE1hdGVyaWFsKHJ2OiBOb2RlUmVuZGVyVmlldyk6IE1hdGVyaWFsIHwgbnVsbFxyXG4gIGdldE9wYXF1ZSgpOiBCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgZ2V0VHJhbnNwYXJlbnQoKTogQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIGdldFN0ZW5jaWwoKTogQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIGdldERlcHRoKCk6IEJhdGNoVXBkYXRlUmFuZ2VcclxuICBvblVwZGF0ZShkZWx0YVRpbWU/OiBudW1iZXIpOiB2b2lkXHJcbiAgb25SZW5kZXI/KHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyKTogdm9pZFxyXG4gIHB1cmdlKCk6IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCYXRjaFVwZGF0ZVJhbmdlIHtcclxuICBvZmZzZXQ6IG51bWJlclxyXG4gIGNvdW50OiBudW1iZXJcclxuICBtYXRlcmlhbD86IE1hdGVyaWFsXHJcbiAgbWF0ZXJpYWxPcHRpb25zPzogRmlsdGVyTWF0ZXJpYWxPcHRpb25zXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOb25lQmF0Y2hVcGRhdGVSYW5nZSA9IHtcclxuICBvZmZzZXQ6IDAsXHJcbiAgY291bnQ6IDBcclxufSBhcyBCYXRjaFVwZGF0ZVJhbmdlXHJcblxyXG5leHBvcnQgY29uc3QgQWxsQmF0Y2hVcGRhdGVSYW5nZSA9IHtcclxuICBvZmZzZXQ6IDAsXHJcbiAgY291bnQ6IEluZmluaXR5XHJcbn0gYXMgQmF0Y2hVcGRhdGVSYW5nZVxyXG5cclxuZXhwb3J0IGNvbnN0IElOU1RBTkNFX1RSQU5TRk9STV9CVUZGRVJfU1RSSURFID0gMTZcclxuZXhwb3J0IGNvbnN0IElOU1RBTkNFX0dSQURJRU5UX0JVRkZFUl9TVFJJREUgPSAxXHJcbmxldCBCQVRDSF9JTkRFWF9DT1VOVEVSID0gMFxyXG5leHBvcnQgY29uc3QgZ2V0TmV4dEJhdGNoSW5kZXggPSAoKSA9PiB7XHJcbiAgcmV0dXJuICsrQkFUQ0hfSU5ERVhfQ09VTlRFUlxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBBY2NlbGVyYXRlZEJhdGNoVHlwZXMgPSBNZXNoQmF0Y2ggfCBJbnN0YW5jZWRNZXNoQmF0Y2ggfCBUZXh0QmF0Y2hcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FjY2VsZXJhdGVkQmF0Y2hUeXBlKGJhdGNoOiBCYXRjaCk6IGJhdGNoIGlzIEFjY2VsZXJhdGVkQmF0Y2hUeXBlcyB7XHJcbiAgcmV0dXJuIChcclxuICAgIGJhdGNoICYmXHJcbiAgICAoYmF0Y2guZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTUVTSCB8fFxyXG4gICAgICBiYXRjaC5nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5URVhUKVxyXG4gIClcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9uZUJhdGNoVXBkYXRlUmFuZ2UocmFuZ2U6IEJhdGNoVXBkYXRlUmFuZ2UpIHtcclxuICByZXR1cm4gKFxyXG4gICAgcmFuZ2Uub2Zmc2V0ID09PSBOb25lQmF0Y2hVcGRhdGVSYW5nZS5vZmZzZXQgJiZcclxuICAgIHJhbmdlLmNvdW50ID09PSBOb25lQmF0Y2hVcGRhdGVSYW5nZS5jb3VudFxyXG4gIClcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQWxsQmF0Y2hVcGRhdGVSYW5nZShyYW5nZTogQmF0Y2hVcGRhdGVSYW5nZSwgdG90YWxDb3VudD86IG51bWJlcikge1xyXG4gIHJldHVybiAoXHJcbiAgICByYW5nZS5vZmZzZXQgPT09IEFsbEJhdGNoVXBkYXRlUmFuZ2Uub2Zmc2V0ICYmXHJcbiAgICAocmFuZ2UuY291bnQgPT09IEFsbEJhdGNoVXBkYXRlUmFuZ2UuY291bnQgfHxcclxuICAgICAgKHRvdGFsQ291bnQgPyByYW5nZS5jb3VudCA9PT0gdG90YWxDb3VudCA6IHRydWUpKVxyXG4gIClcclxufVxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZUxpbmVWZXJ0ID0gLyogZ2xzbCAqLyBgXHJcblx0XHQjaW5jbHVkZSA8Y29tbW9uPlxyXG5cdFx0I2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxyXG5cdFx0I2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cclxuXHRcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cclxuXHRcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XHJcblxyXG5cdFx0dW5pZm9ybSBmbG9hdCBsaW5ld2lkdGg7XHJcblx0XHR1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcclxuXHRcdHVuaWZvcm0gZmxvYXQgcGl4ZWxUaHJlc2hvbGQ7XHJcblxyXG5cdFx0dmFyeWluZyBmbG9hdCB2QWxwaGE7XHJcblxyXG5cdFx0I2RlZmluZSBTRUFSQ0hfU1RFUFMgMTBcclxuXHJcblx0XHRhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVN0YXJ0O1xyXG5cdFx0YXR0cmlidXRlIHZlYzMgaW5zdGFuY2VFbmQ7XHJcblxyXG5cdFx0YXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvclN0YXJ0O1xyXG5cdFx0YXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvckVuZDtcclxuXHRcdC8vIHZhcnlpbmcgdmVjMyBkZWJ1Z0NvbG9yO1xyXG5cclxuXHRcdCNpZmRlZiBXT1JMRF9VTklUU1xyXG5cclxuXHRcdFx0dmFyeWluZyB2ZWM0IHdvcmxkUG9zO1xyXG5cdFx0XHR2YXJ5aW5nIHZlYzMgd29ybGRTdGFydDtcclxuXHRcdFx0dmFyeWluZyB2ZWMzIHdvcmxkRW5kO1xyXG5cdFx0XHR2YXJ5aW5nIGZsb2F0IGNvcnJlY3RlZExpbmVXaWR0aDtcclxuXHJcblx0XHRcdCNpZmRlZiBVU0VfREFTSFxyXG5cclxuXHRcdFx0XHR2YXJ5aW5nIHZlYzIgdlV2O1xyXG5cclxuXHRcdFx0I2VuZGlmXHJcblxyXG5cdFx0I2Vsc2VcclxuXHJcblx0XHRcdHZhcnlpbmcgdmVjMiB2VXY7XHJcblxyXG5cdFx0I2VuZGlmXHJcblxyXG5cdFx0I2lmZGVmIFVTRV9EQVNIXHJcblxyXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGRhc2hTY2FsZTtcclxuXHRcdFx0YXR0cmlidXRlIGZsb2F0IGluc3RhbmNlRGlzdGFuY2VTdGFydDtcclxuXHRcdFx0YXR0cmlidXRlIGZsb2F0IGluc3RhbmNlRGlzdGFuY2VFbmQ7XHJcblx0XHRcdHZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcclxuXHJcblx0XHQjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmZGVmIFVTRV9SVEVcclxuXHRcdFx0YXR0cmlidXRlIHZlYzMgaW5zdGFuY2VTdGFydExvdztcclxuXHRcdFx0YXR0cmlidXRlIHZlYzMgaW5zdGFuY2VFbmRMb3c7XHJcbiAgICAgICAgICAgIHVuaWZvcm0gdmVjMyB1Vmlld2VyX2hpZ2g7XHJcbiAgICAgICAgICAgIHVuaWZvcm0gdmVjMyB1Vmlld2VyX2xvdztcclxuICAgICAgICAjZW5kaWZcclxuXHJcblx0XHR2b2lkIHRyaW1TZWdtZW50KCBjb25zdCBpbiB2ZWM0IHN0YXJ0LCBpbm91dCB2ZWM0IGVuZCApIHtcclxuXHJcblx0XHRcdC8vIHRyaW0gZW5kIHNlZ21lbnQgc28gaXQgdGVybWluYXRlcyBiZXR3ZWVuIHRoZSBjYW1lcmEgcGxhbmUgYW5kIHRoZSBuZWFyIHBsYW5lXHJcblxyXG5cdFx0XHQvLyBjb25zZXJ2YXRpdmUgZXN0aW1hdGUgb2YgdGhlIG5lYXIgcGxhbmVcclxuXHRcdFx0ZmxvYXQgYSA9IHByb2plY3Rpb25NYXRyaXhbIDIgXVsgMiBdOyAvLyAzbmQgZW50cnkgaW4gM3RoIGNvbHVtblxyXG5cdFx0XHRmbG9hdCBiID0gcHJvamVjdGlvbk1hdHJpeFsgMyBdWyAyIF07IC8vIDNuZCBlbnRyeSBpbiA0dGggY29sdW1uXHJcblx0XHRcdGZsb2F0IG5lYXJFc3RpbWF0ZSA9IC0gMC41ICogYiAvIGE7XHJcblxyXG5cdFx0XHRmbG9hdCBhbHBoYSA9ICggbmVhckVzdGltYXRlIC0gc3RhcnQueiApIC8gKCBlbmQueiAtIHN0YXJ0LnogKTtcclxuXHJcblx0XHRcdGVuZC54eXogPSBtaXgoIHN0YXJ0Lnh5eiwgZW5kLnh5eiwgYWxwaGEgKTtcclxuXHJcblx0XHR9XHJcblxyXG5cdFx0ZmxvYXQgc2NyZWVuU3BhY2VEaXN0YW5jZSh2ZWM0IHAwLCB2ZWM0IHAxKSB7XHJcblx0XHRcdHAwID0gcHJvamVjdGlvbk1hdHJpeCAqIHAwO1xyXG5cdFx0XHRwMCAvPSBwMC53O1xyXG5cdFx0XHRwMSA9IHByb2plY3Rpb25NYXRyaXggKiBwMTtcclxuXHRcdFx0cDEgLz0gcDEudztcclxuXHRcdFx0cmV0dXJuIGxlbmd0aChwMS54eSAtIHAwLnh5KTtcclxuXHRcdH1cclxuXHJcblx0XHRoaWdocCB2ZWM0IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKGluIGhpZ2hwIHZlYzMgcG9zaXRpb25fbG93LCBpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2hpZ2gsIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19sb3csIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19oaWdoKXtcclxuXHRcdFx0LyogXHJcblx0XHRcdFNvdXJjZSBodHRwczovL2dpdGh1Yi5jb20vdmlydHVhbGdsb2JlYm9vay9PcGVuR2xvYmUvYmxvYi9tYXN0ZXIvU291cmNlL0V4YW1wbGVzL0NoYXB0ZXIwNS9KaXR0ZXIvR1BVUmVsYXRpdmVUb0V5ZURTRlVOOTAvU2hhZGVycy9WUy5nbHNsIFxyXG5cdFx0XHROb3RlIGhlcmUsIHdlJ3JlIHN0b3JpbmcgdGhlIGhpZ2ggcGFydCBvZiB0aGUgcG9zaXRpb24gZW5jb2RpbmcgaW5zaWRlIHRocmVlJ3MgZGVmYXVsdCAncG9zaXRpb24nIGF0dHJpYnV0ZSBidWZmZXIgc28gd2UgYXZvaWQgcmVkdW5kYW5jeSBcclxuXHRcdFx0Ki9cclxuXHRcdFx0aGlnaHAgdmVjMyB0MSA9IHBvc2l0aW9uX2xvdy54eXogLSByZWxhdGl2ZVRvX2xvdy54eXo7XHJcblx0XHRcdGhpZ2hwIHZlYzMgZSA9IHQxIC0gcG9zaXRpb25fbG93Lnh5ejtcclxuXHRcdFx0LyoqIFRoaXMgaXMgcmVkdW5hbnQsIGJ1dCBuZWNlc3NhcnkgYXMgYSB3b3JrYXJvdW5kIGZvciBBcHBsZSBwbGF0Zm9ybXMgKi9cclxuXHRcdFx0aGlnaHAgZmxvYXQgeCA9IHBvc2l0aW9uX2hpZ2gueCAtIHJlbGF0aXZlVG9faGlnaC54O1xyXG5cdFx0XHRoaWdocCBmbG9hdCB5ID0gcG9zaXRpb25faGlnaC55IC0gcmVsYXRpdmVUb19oaWdoLnk7XHJcblx0XHRcdGhpZ2hwIGZsb2F0IHogPSBwb3NpdGlvbl9oaWdoLnogLSByZWxhdGl2ZVRvX2hpZ2guejtcclxuXHRcdFx0aGlnaHAgdmVjMyB2ID0gdmVjMyh4LCB5LCB6KTtcclxuXHRcdFx0LyoqIEVuZCBvZiByZWR1bmRhbnQgcGFydCAqL1xyXG5cdFx0XHRoaWdocCB2ZWMzIHQyID0gKCgtcmVsYXRpdmVUb19sb3cgLSBlKSArIChwb3NpdGlvbl9sb3cueHl6IC0gKHQxIC0gZSkpKSArIHY7XHJcblx0XHRcdGhpZ2hwIHZlYzMgaGlnaERpZmZlcmVuY2UgPSB0MSArIHQyO1xyXG5cdFx0XHRoaWdocCB2ZWMzIGxvd0RpZmZlcmVuY2UgPSB0MiAtIChoaWdoRGlmZmVyZW5jZS54eXogLSB0MS54eXopO1xyXG5cdFx0XHRcclxuXHRcdFx0aGlnaHAgdmVjMyBwb3NpdGlvbiA9IGhpZ2hEaWZmZXJlbmNlLnh5eiArIGxvd0RpZmZlcmVuY2UueHl6O1xyXG5cdFx0XHRyZXR1cm4gdmVjNChwb3NpdGlvbiwgMS4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZvaWQgbWFpbigpIHtcclxuXHRcdFx0aWYoaW5zdGFuY2VDb2xvclN0YXJ0LncgPT0gMC4pIHtcclxuXHRcdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoMC4pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRcclxuXHRcdFx0dkFscGhhID0gaW5zdGFuY2VDb2xvclN0YXJ0Lnc7XHJcblxyXG4gICAgICAgICAgICB2ZWMzIGNvbXB1dGVkUG9zaXRpb24gPSBwb3NpdGlvbjtcclxuXHRcdFx0I2lmZGVmIFVTRV9DT0xPUlxyXG5cclxuXHRcdFx0XHR2Q29sb3IueHl6ID0gKCBjb21wdXRlZFBvc2l0aW9uLnkgPCAwLjUgKSA/IGluc3RhbmNlQ29sb3JTdGFydC54eXogOiBpbnN0YW5jZUNvbG9yRW5kLnh5ejtcclxuXHJcblx0XHRcdCNlbmRpZlxyXG5cclxuXHRcdFx0I2lmZGVmIFVTRV9EQVNIXHJcblxyXG5cdFx0XHRcdHZMaW5lRGlzdGFuY2UgPSAoIGNvbXB1dGVkUG9zaXRpb24ueSA8IDAuNSApID8gZGFzaFNjYWxlICogaW5zdGFuY2VEaXN0YW5jZVN0YXJ0IDogZGFzaFNjYWxlICogaW5zdGFuY2VEaXN0YW5jZUVuZDtcclxuXHRcdFx0XHR2VXYgPSB1djtcclxuXHJcblx0XHRcdCNlbmRpZlxyXG5cclxuXHRcdFx0ZmxvYXQgYXNwZWN0ID0gcmVzb2x1dGlvbi54IC8gcmVzb2x1dGlvbi55O1xyXG5cclxuXHRcdFx0Ly8gY2FtZXJhIHNwYWNlXHJcbiAgICAgICAgICAgICNpZmRlZiBVU0VfUlRFXHJcblx0XHRcdC8qKiBTb3VyY2UgaHR0cHM6Ly9naXRodWIuY29tL3ZpcnR1YWxnbG9iZWJvb2svT3Blbkdsb2JlL2Jsb2IvbWFzdGVyL1NvdXJjZS9FeGFtcGxlcy9DaGFwdGVyMDUvSml0dGVyL0dQVVJlbGF0aXZlVG9FeWVEU0ZVTjkwL1NoYWRlcnMvVlMuZ2xzbCAqL1xyXG5cdFx0XHRcdC8vIHZlYzMgdDEgPSBpbnN0YW5jZVN0YXJ0TG93Lnh5eiAtIHVWaWV3ZXJfbG93O1xyXG5cdFx0XHRcdC8vIHZlYzMgZSA9IHQxIC0gaW5zdGFuY2VTdGFydExvdy54eXo7XHJcblx0XHRcdFx0Ly8gdmVjMyB0MiA9ICgoLXVWaWV3ZXJfbG93IC0gZSkgKyAoaW5zdGFuY2VTdGFydExvdy54eXogLSAodDEgLSBlKSkpICsgaW5zdGFuY2VTdGFydC54eXogLSB1Vmlld2VyX2hpZ2g7XHJcblx0XHRcdFx0Ly8gdmVjMyBoaWdoRGlmZmVyZW5jZSA9IHQxICsgdDI7XHJcblx0XHRcdFx0Ly8gdmVjMyBsb3dEaWZmZXJlbmNlID0gdDIgLSAoaGlnaERpZmZlcmVuY2UgLSB0MSk7XHJcblx0XHRcdFx0Ly8gdmVjNCBzdGFydCA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoaGlnaERpZmZlcmVuY2UueHl6ICsgbG93RGlmZmVyZW5jZS54eXogLCAxLik7XHJcblx0XHRcdFx0dmVjNCBzdGFydCA9IG1vZGVsVmlld01hdHJpeCAqIGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKGluc3RhbmNlU3RhcnRMb3cueHl6LCBpbnN0YW5jZVN0YXJ0Lnh5eiwgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8gdDEgPSBpbnN0YW5jZUVuZExvdy54eXogLSB1Vmlld2VyX2xvdztcclxuXHRcdFx0XHQvLyBlID0gdDEgLSBpbnN0YW5jZUVuZExvdy54eXo7XHJcblx0XHRcdFx0Ly8gdDIgPSAoKC11Vmlld2VyX2xvdyAtIGUpICsgKGluc3RhbmNlRW5kTG93Lnh5eiAtICh0MSAtIGUpKSkgKyBpbnN0YW5jZUVuZC54eXogLSB1Vmlld2VyX2hpZ2g7XHJcblx0XHRcdFx0Ly8gaGlnaERpZmZlcmVuY2UgPSB0MSArIHQyO1xyXG5cdFx0XHRcdC8vIGxvd0RpZmZlcmVuY2UgPSB0MiAtIChoaWdoRGlmZmVyZW5jZSAtIHQxKTtcclxuXHRcdFx0XHQvLyB2ZWM0IGVuZCA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoaGlnaERpZmZlcmVuY2UueHl6ICsgbG93RGlmZmVyZW5jZS54eXogLCAxLik7XHJcblx0XHRcdFx0dmVjNCBlbmQgPSBtb2RlbFZpZXdNYXRyaXggKiBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihpbnN0YW5jZUVuZExvdy54eXosIGluc3RhbmNlRW5kLnh5eiwgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICB2ZWM0IHN0YXJ0ID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggaW5zdGFuY2VTdGFydCwgMS4wICk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IGVuZCA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIGluc3RhbmNlRW5kLCAxLjAgKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG5cdFx0XHQjaWZkZWYgV09STERfVU5JVFNcclxuXHJcblx0XHRcdFx0d29ybGRTdGFydCA9IHN0YXJ0Lnh5ejtcclxuXHRcdFx0XHR3b3JsZEVuZCA9IGVuZC54eXo7XHJcblxyXG5cdFx0XHQjZWxzZVxyXG5cclxuXHRcdFx0XHR2VXYgPSB1djtcclxuXHJcblx0XHRcdCNlbmRpZlxyXG5cclxuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlIGZvciBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uLCBhbmQgc2VnbWVudHMgdGhhdCB0ZXJtaW5hdGUgZWl0aGVyIGluLCBvciBiZWhpbmQsIHRoZSBjYW1lcmEgcGxhbmVcclxuXHRcdFx0Ly8gY2xlYXJseSB0aGUgZ3B1IGZpcm13YXJlIGhhcyBhIHdheSBvZiBhZGRyZXNzaW5nIHRoaXMgaXNzdWUgd2hlbiBwcm9qZWN0aW5nIGludG8gbmRjIHNwYWNlXHJcblx0XHRcdC8vIGJ1dCB3ZSBuZWVkIHRvIHBlcmZvcm0gbmRjLXNwYWNlIGNhbGN1bGF0aW9ucyBpbiB0aGUgc2hhZGVyLCBzbyB3ZSBtdXN0IGFkZHJlc3MgdGhpcyBpc3N1ZSBkaXJlY3RseVxyXG5cdFx0XHQvLyBwZXJoYXBzIHRoZXJlIGlzIGEgbW9yZSBlbGVnYW50IHNvbHV0aW9uIC0tIFdlc3RMYW5nbGV5XHJcblxyXG5cdFx0XHRib29sIHBlcnNwZWN0aXZlID0gKCBwcm9qZWN0aW9uTWF0cml4WyAyIF1bIDMgXSA9PSAtIDEuMCApOyAvLyA0dGggZW50cnkgaW4gdGhlIDNyZCBjb2x1bW5cclxuXHJcblx0XHRcdGlmICggcGVyc3BlY3RpdmUgKSB7XHJcblxyXG5cdFx0XHRcdGlmICggc3RhcnQueiA8IDAuMCAmJiBlbmQueiA+PSAwLjAgKSB7XHJcblxyXG5cdFx0XHRcdFx0dHJpbVNlZ21lbnQoIHN0YXJ0LCBlbmQgKTtcclxuXHJcblx0XHRcdFx0fSBlbHNlIGlmICggZW5kLnogPCAwLjAgJiYgc3RhcnQueiA+PSAwLjAgKSB7XHJcblxyXG5cdFx0XHRcdFx0dHJpbVNlZ21lbnQoIGVuZCwgc3RhcnQgKTtcclxuXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gY2xpcCBzcGFjZVxyXG5cdFx0XHR2ZWM0IGNsaXBTdGFydCA9IHByb2plY3Rpb25NYXRyaXggKiBzdGFydDtcclxuXHRcdFx0dmVjNCBjbGlwRW5kID0gcHJvamVjdGlvbk1hdHJpeCAqIGVuZDtcclxuXHJcblx0XHRcdC8vIG5kYyBzcGFjZVxyXG5cdFx0XHR2ZWMzIG5kY1N0YXJ0ID0gY2xpcFN0YXJ0Lnh5eiAvIGNsaXBTdGFydC53O1xyXG5cdFx0XHR2ZWMzIG5kY0VuZCA9IGNsaXBFbmQueHl6IC8gY2xpcEVuZC53O1xyXG5cclxuXHRcdFx0Ly8gZGlyZWN0aW9uXHJcblx0XHRcdHZlYzIgZGlyID0gbmRjRW5kLnh5IC0gbmRjU3RhcnQueHk7XHJcblxyXG5cdFx0XHQvLyBhY2NvdW50IGZvciBjbGlwLXNwYWNlIGFzcGVjdCByYXRpb1xyXG5cdFx0XHRkaXIueCAqPSBhc3BlY3Q7XHJcblx0XHRcdGRpciA9IG5vcm1hbGl6ZSggZGlyICk7XHJcblxyXG5cdFx0XHQjaWZkZWYgV09STERfVU5JVFNcclxuXHJcblx0XHRcdFx0Ly8gZ2V0IHRoZSBvZmZzZXQgZGlyZWN0aW9uIGFzIHBlcnBlbmRpY3VsYXIgdG8gdGhlIHZpZXcgdmVjdG9yXHJcblx0XHRcdFx0dmVjMyB3b3JsZERpciA9IG5vcm1hbGl6ZSggZW5kLnh5eiAtIHN0YXJ0Lnh5eiApO1xyXG5cdFx0XHRcdHZlYzMgb2Zmc2V0O1xyXG5cdFx0XHRcdGlmICggY29tcHV0ZWRQb3NpdGlvbi55IDwgMC41ICkge1xyXG5cclxuXHRcdFx0XHRcdG9mZnNldCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHN0YXJ0Lnh5eiwgd29ybGREaXIgKSApO1xyXG5cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRcdG9mZnNldCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGVuZC54eXosIHdvcmxkRGlyICkgKTtcclxuXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBzaWduIGZsaXBcclxuXHRcdFx0XHRpZiAoIGNvbXB1dGVkUG9zaXRpb24ueCA8IDAuMCApIG9mZnNldCAqPSAtIDEuMDtcclxuXHJcblx0XHRcdFx0ZmxvYXQgZm9yd2FyZE9mZnNldCA9IGRvdCggd29ybGREaXIsIHZlYzMoIDAuMCwgMC4wLCAxLjAgKSApO1xyXG5cclxuXHRcdFx0XHQvLyBkb24ndCBleHRlbmQgdGhlIGxpbmUgaWYgd2UncmUgcmVuZGVyaW5nIGRhc2hlcyBiZWNhdXNlIHdlXHJcblx0XHRcdFx0Ly8gd29uJ3QgYmUgcmVuZGVyaW5nIHRoZSBlbmRjYXBzXHJcblx0XHRcdFx0I2lmbmRlZiBVU0VfREFTSFxyXG5cclxuXHRcdFx0XHRcdC8vIGV4dGVuZCB0aGUgbGluZSBib3VuZHMgdG8gZW5jb21wYXNzICBlbmRjYXBzXHJcblx0XHRcdFx0XHRzdGFydC54eXogKz0gLSB3b3JsZERpciAqIGxpbmV3aWR0aCAqIDAuNTtcclxuXHRcdFx0XHRcdGVuZC54eXogKz0gd29ybGREaXIgKiBsaW5ld2lkdGggKiAwLjU7XHJcblxyXG5cdFx0XHRcdFx0Ly8gc2hpZnQgdGhlIHBvc2l0aW9uIG9mIHRoZSBxdWFkIHNvIGl0IGh1Z3MgdGhlIGZvcndhcmQgZWRnZSBvZiB0aGUgbGluZVxyXG5cdFx0XHRcdFx0b2Zmc2V0Lnh5IC09IGRpciAqIGZvcndhcmRPZmZzZXQ7XHJcblx0XHRcdFx0XHRvZmZzZXQueiArPSAwLjU7XHJcblxyXG5cdFx0XHRcdCNlbmRpZlxyXG5cclxuXHRcdFx0XHQvLyBlbmRjYXBzXHJcblx0XHRcdFx0aWYgKCBjb21wdXRlZFBvc2l0aW9uLnkgPiAxLjAgfHwgY29tcHV0ZWRQb3NpdGlvbi55IDwgMC4wICkge1xyXG5cclxuXHRcdFx0XHRcdG9mZnNldC54eSArPSBkaXIgKiAyLjAgKiBmb3J3YXJkT2Zmc2V0O1xyXG5cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIGRlYnVnQ29sb3IgPSB2ZWMzKDAuLCAwLiwgMS4pO1xyXG5cdFx0XHRcdGNvcnJlY3RlZExpbmVXaWR0aCA9IGxpbmV3aWR0aDtcclxuXHRcdFx0XHR2ZWMzIGNPZmZzZXQgPSBvZmZzZXQ7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8gYWRqdXN0IGZvciBsaW5ld2lkdGhcclxuXHRcdFx0XHRvZmZzZXQgKj0gbGluZXdpZHRoICogMC41O1xyXG5cclxuXHRcdFx0XHQvLyBzZXQgdGhlIHdvcmxkIHBvc2l0aW9uXHJcblx0XHRcdFx0d29ybGRQb3MgPSAoIGNvbXB1dGVkUG9zaXRpb24ueSA8IDAuNSApID8gc3RhcnQgOiBlbmQ7XHJcblxyXG5cdFx0XHRcdC8qXHJcblx0XHRcdFx0Tm90IGdyZWF0LCBub3QgdGVycmlibGVcclxuXHRcdFx0XHQqL1xyXG5cdFx0XHRcdGZsb2F0IHBpeGVsU2l6ZSA9IGxlbmd0aCh2ZWMyKHBpeGVsVGhyZXNob2xkL3Jlc29sdXRpb24ueCArIHBpeGVsVGhyZXNob2xkL3Jlc29sdXRpb24ueSkpO1xyXG5cdFx0XHRcdGZsb2F0IG9mZnNldFN0ZXAgPSBsaW5ld2lkdGg7XHJcblx0XHRcdFx0ZmxvYXQgZCA9IHNjcmVlblNwYWNlRGlzdGFuY2Uod29ybGRQb3MsIHdvcmxkUG9zICsgdmVjNChjT2Zmc2V0ICogb2Zmc2V0U3RlcCwgMC4pKTtcclxuXHRcdFx0XHQvKiBXZSdyZSB0cnlpbmcgdG8gc3RhcnQgb2ZmIHdpdGggYSBzdGVwIGNsb3NlciB0byB0aGUgaW5pdGlhbCBkaWZmZXJlbmNlIGJldHdlZW4gU1MgZGlzdGFuY2UgYW5kIHRoZSBwaXhlbCBzaXplIHdlIHdhbnRcclxuXHRcdFx0XHQqL1xyXG5cdFx0XHRcdC8vIG9mZnNldFN0ZXAgKz0gcGl4ZWxTaXplIC0gZDtcclxuXHRcdFx0XHR2ZWMzIG1vdmUgPSBvZmZzZXQ7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Zm9yKGludCBpID0gMDsgaSA8IFNFQVJDSF9TVEVQUzsgaSsrKXtcclxuXHRcdFx0XHRcdG1vdmUgPSBjT2Zmc2V0ICogb2Zmc2V0U3RlcDtcclxuXHRcdFx0XHRcdGQgPSBzY3JlZW5TcGFjZURpc3RhbmNlKHdvcmxkUG9zLCB3b3JsZFBvcyArIHZlYzQobW92ZSwgMC4pKTtcclxuXHRcdFx0XHRcdGlmKGQgPiBwaXhlbFNpemUpIHtcclxuXHRcdFx0XHRcdFx0Y29ycmVjdGVkTGluZVdpZHRoID0gb2Zmc2V0U3RlcDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRvZmZzZXRTdGVwICs9IG9mZnNldFN0ZXA7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR3b3JsZFBvcy54eXogKz0gbW92ZTtcclxuXHJcblx0XHRcdFx0Ly8gcHJvamVjdCB0aGUgd29ybGRwb3NcclxuXHRcdFx0XHR2ZWM0IGNsaXAgPSBwcm9qZWN0aW9uTWF0cml4ICogd29ybGRQb3M7XHJcblxyXG5cdFx0XHRcdC8vIHNoaWZ0IHRoZSBkZXB0aCBvZiB0aGUgcHJvamVjdGVkIHBvaW50cyBzbyB0aGUgbGluZVxyXG5cdFx0XHRcdC8vIHNlZ21lbnRzIG92ZXJsYXAgbmVhdGx5XHJcblx0XHRcdFx0dmVjMyBjbGlwUG9zZSA9ICggY29tcHV0ZWRQb3NpdGlvbi55IDwgMC41ICkgPyBuZGNTdGFydCA6IG5kY0VuZDtcclxuXHRcdFx0XHRjbGlwLnogPSBjbGlwUG9zZS56ICogY2xpcC53O1xyXG5cclxuXHRcdFx0I2Vsc2VcclxuXHJcblx0XHRcdFx0dmVjMiBvZmZzZXQgPSB2ZWMyKCBkaXIueSwgLSBkaXIueCApO1xyXG5cdFx0XHRcdC8vIHVuZG8gYXNwZWN0IHJhdGlvIGFkanVzdG1lbnRcclxuXHRcdFx0XHRkaXIueCAvPSBhc3BlY3Q7XHJcblx0XHRcdFx0b2Zmc2V0LnggLz0gYXNwZWN0O1xyXG5cclxuXHRcdFx0XHQvLyBzaWduIGZsaXBcclxuXHRcdFx0XHRpZiAoIGNvbXB1dGVkUG9zaXRpb24ueCA8IDAuMCApIG9mZnNldCAqPSAtIDEuMDtcclxuXHJcblx0XHRcdFx0Ly8gZW5kY2Fwc1xyXG5cdFx0XHRcdGlmICggY29tcHV0ZWRQb3NpdGlvbi55IDwgMC4wICkge1xyXG5cclxuXHRcdFx0XHRcdG9mZnNldCArPSAtIGRpcjtcclxuXHJcblx0XHRcdFx0fSBlbHNlIGlmICggY29tcHV0ZWRQb3NpdGlvbi55ID4gMS4wICkge1xyXG5cclxuXHRcdFx0XHRcdG9mZnNldCArPSBkaXI7XHJcblxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gYWRqdXN0IGZvciBsaW5ld2lkdGhcclxuXHRcdFx0XHRvZmZzZXQgKj0gbGluZXdpZHRoO1xyXG5cclxuXHRcdFx0XHQvLyBhZGp1c3QgZm9yIGNsaXAtc3BhY2UgdG8gc2NyZWVuLXNwYWNlIGNvbnZlcnNpb24gLy8gbWF5YmUgcmVzb2x1dGlvbiBzaG91bGQgYmUgYmFzZWQgb24gdmlld3BvcnQgLi4uXHJcblx0XHRcdFx0b2Zmc2V0IC89IHJlc29sdXRpb24ueTtcclxuXHJcblx0XHRcdFx0Ly8gc2VsZWN0IGVuZFxyXG5cdFx0XHRcdHZlYzQgY2xpcCA9ICggY29tcHV0ZWRQb3NpdGlvbi55IDwgMC41ICkgPyBjbGlwU3RhcnQgOiBjbGlwRW5kO1xyXG5cclxuXHRcdFx0XHQvLyBiYWNrIHRvIGNsaXAgc3BhY2VcclxuXHRcdFx0XHRvZmZzZXQgKj0gY2xpcC53O1xyXG5cclxuXHRcdFx0XHRjbGlwLnh5ICs9IG9mZnNldDtcclxuXHJcblx0XHRcdCNlbmRpZlxyXG5cclxuXHRcdFx0Z2xfUG9zaXRpb24gPSBjbGlwO1xyXG5cclxuXHRcdFx0dmVjNCBtdlBvc2l0aW9uID0gKCBjb21wdXRlZFBvc2l0aW9uLnkgPCAwLjUgKSA/IHN0YXJ0IDogZW5kOyAvLyB0aGlzIGlzIGFuIGFwcHJveGltYXRpb25cclxuXHJcblx0XHRcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XHJcblx0XHRcdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxyXG5cdFx0XHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cclxuXHJcblx0XHR9XHJcblx0XHRgXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlTGluZUZyYWcgPSAvKiBnbHNsICovIGBcclxuXHRcdHVuaWZvcm0gdmVjMyBkaWZmdXNlO1xyXG5cdFx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xyXG5cdFx0dW5pZm9ybSBmbG9hdCBsaW5ld2lkdGg7XHJcblx0XHR2YXJ5aW5nIGZsb2F0IHZBbHBoYTtcclxuXHRcdC8vIHZhcnlpbmcgdmVjMyBkZWJ1Z0NvbG9yO1xyXG5cclxuXHRcdCNpZmRlZiBVU0VfREFTSFxyXG5cclxuXHRcdFx0dW5pZm9ybSBmbG9hdCBkYXNoT2Zmc2V0O1xyXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGRhc2hTaXplO1xyXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGdhcFNpemU7XHJcblxyXG5cdFx0I2VuZGlmXHJcblxyXG5cdFx0dmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xyXG5cclxuXHRcdCNpZmRlZiBXT1JMRF9VTklUU1xyXG5cclxuXHRcdFx0dmFyeWluZyB2ZWM0IHdvcmxkUG9zO1xyXG5cdFx0XHR2YXJ5aW5nIHZlYzMgd29ybGRTdGFydDtcclxuXHRcdFx0dmFyeWluZyB2ZWMzIHdvcmxkRW5kO1xyXG5cdFx0XHR2YXJ5aW5nIGZsb2F0IGNvcnJlY3RlZExpbmVXaWR0aDtcclxuXHJcblx0XHRcdCNpZmRlZiBVU0VfREFTSFxyXG5cclxuXHRcdFx0XHR2YXJ5aW5nIHZlYzIgdlV2O1xyXG5cclxuXHRcdFx0I2VuZGlmXHJcblxyXG5cdFx0I2Vsc2VcclxuXHJcblx0XHRcdHZhcnlpbmcgdmVjMiB2VXY7XHJcblxyXG5cdFx0I2VuZGlmXHJcblxyXG5cdFx0I2luY2x1ZGUgPGNvbW1vbj5cclxuXHRcdCNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxyXG5cdFx0I2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxyXG5cdFx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XHJcblx0XHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XHJcblxyXG5cdFx0dmVjMiBjbG9zZXN0TGluZVRvTGluZSh2ZWMzIHAxLCB2ZWMzIHAyLCB2ZWMzIHAzLCB2ZWMzIHA0KSB7XHJcblxyXG5cdFx0XHRmbG9hdCBtdWE7XHJcblx0XHRcdGZsb2F0IG11YjtcclxuXHJcblx0XHRcdHZlYzMgcDEzID0gcDEgLSBwMztcclxuXHRcdFx0dmVjMyBwNDMgPSBwNCAtIHAzO1xyXG5cclxuXHRcdFx0dmVjMyBwMjEgPSBwMiAtIHAxO1xyXG5cclxuXHRcdFx0ZmxvYXQgZDEzNDMgPSBkb3QoIHAxMywgcDQzICk7XHJcblx0XHRcdGZsb2F0IGQ0MzIxID0gZG90KCBwNDMsIHAyMSApO1xyXG5cdFx0XHRmbG9hdCBkMTMyMSA9IGRvdCggcDEzLCBwMjEgKTtcclxuXHRcdFx0ZmxvYXQgZDQzNDMgPSBkb3QoIHA0MywgcDQzICk7XHJcblx0XHRcdGZsb2F0IGQyMTIxID0gZG90KCBwMjEsIHAyMSApO1xyXG5cclxuXHRcdFx0ZmxvYXQgZGVub20gPSBkMjEyMSAqIGQ0MzQzIC0gZDQzMjEgKiBkNDMyMTtcclxuXHJcblx0XHRcdGZsb2F0IG51bWVyID0gZDEzNDMgKiBkNDMyMSAtIGQxMzIxICogZDQzNDM7XHJcblxyXG5cdFx0XHRtdWEgPSBudW1lciAvIGRlbm9tO1xyXG5cdFx0XHRtdWEgPSBjbGFtcCggbXVhLCAwLjAsIDEuMCApO1xyXG5cdFx0XHRtdWIgPSAoIGQxMzQzICsgZDQzMjEgKiAoIG11YSApICkgLyBkNDM0MztcclxuXHRcdFx0bXViID0gY2xhbXAoIG11YiwgMC4wLCAxLjAgKTtcclxuXHJcblx0XHRcdHJldHVybiB2ZWMyKCBtdWEsIG11YiApO1xyXG5cclxuXHRcdH1cclxuXHJcblx0XHR2b2lkIG1haW4oKSB7XHJcblxyXG5cdFx0XHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxyXG5cclxuXHRcdFx0I2lmZGVmIFVTRV9EQVNIXHJcblxyXG5cdFx0XHRcdGlmICggdlV2LnkgPCAtIDEuMCB8fCB2VXYueSA+IDEuMCApIGRpc2NhcmQ7IC8vIGRpc2NhcmQgZW5kY2Fwc1xyXG5cclxuXHRcdFx0XHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSArIGRhc2hPZmZzZXQsIGRhc2hTaXplICsgZ2FwU2l6ZSApID4gZGFzaFNpemUgKSBkaXNjYXJkOyAvLyB0b2RvIC0gRklYXHJcblxyXG5cdFx0XHQjZW5kaWZcclxuXHJcblx0XHRcdGZsb2F0IGFscGhhO1xyXG5cdFx0XHQjaWZkZWYgVU5JRk9STV9PUEFDSVRZXHJcblx0XHRcdFx0YWxwaGEgPSBvcGFjaXR5O1xyXG5cdFx0XHQjZWxzZVxyXG5cdFx0XHRcdGFscGhhID0gdkFscGhhO1xyXG5cdFx0XHQjZW5kaWZcclxuXHJcblxyXG5cdFx0XHQjaWZkZWYgV09STERfVU5JVFNcclxuXHJcblx0XHRcdFx0Ly8gRmluZCB0aGUgY2xvc2VzdCBwb2ludHMgb24gdGhlIHZpZXcgcmF5IGFuZCB0aGUgbGluZSBzZWdtZW50XHJcblx0XHRcdFx0dmVjMyByYXlFbmQgPSBub3JtYWxpemUoIHdvcmxkUG9zLnh5eiApICogMWU1O1xyXG5cdFx0XHRcdHZlYzMgbGluZURpciA9IHdvcmxkRW5kIC0gd29ybGRTdGFydDtcclxuXHRcdFx0XHR2ZWMyIHBhcmFtcyA9IGNsb3Nlc3RMaW5lVG9MaW5lKCB3b3JsZFN0YXJ0LCB3b3JsZEVuZCwgdmVjMyggMC4wLCAwLjAsIDAuMCApLCByYXlFbmQgKTtcclxuXHJcblx0XHRcdFx0dmVjMyBwMSA9IHdvcmxkU3RhcnQgKyBsaW5lRGlyICogcGFyYW1zLng7XHJcblx0XHRcdFx0dmVjMyBwMiA9IHJheUVuZCAqIHBhcmFtcy55O1xyXG5cdFx0XHRcdHZlYzMgZGVsdGEgPSBwMSAtIHAyO1xyXG5cdFx0XHRcdGZsb2F0IGxlbiA9IGxlbmd0aCggZGVsdGEgKTtcclxuXHRcdFx0XHRmbG9hdCBub3JtID0gbGVuIC8gY29ycmVjdGVkTGluZVdpZHRoO1xyXG5cclxuXHRcdFx0XHQjaWZuZGVmIFVTRV9EQVNIXHJcblxyXG5cdFx0XHRcdFx0I2lmZGVmIFVTRV9BTFBIQV9UT19DT1ZFUkFHRVxyXG5cclxuXHRcdFx0XHRcdFx0ZmxvYXQgZG5vcm0gPSBmd2lkdGgoIG5vcm0gKTtcclxuXHRcdFx0XHRcdFx0YWxwaGEgPSAxLjAgLSBzbW9vdGhzdGVwKCAwLjUgLSBkbm9ybSwgMC41ICsgZG5vcm0sIG5vcm0gKTtcclxuXHJcblx0XHRcdFx0XHQjZWxzZVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCBub3JtID4gMC41ICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRkaXNjYXJkO1xyXG5cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdCNlbmRpZlxyXG5cclxuXHRcdFx0XHQjZW5kaWZcclxuXHJcblx0XHRcdCNlbHNlXHJcblxyXG5cdFx0XHRcdCNpZmRlZiBVU0VfQUxQSEFfVE9fQ09WRVJBR0VcclxuXHJcblx0XHRcdFx0XHQvLyBhcnRpZmFjdHMgYXBwZWFyIG9uIHNvbWUgaGFyZHdhcmUgaWYgYSBkZXJpdmF0aXZlIGlzIHRha2VuIHdpdGhpbiBhIGNvbmRpdGlvbmFsXHJcblx0XHRcdFx0XHRmbG9hdCBhID0gdlV2Lng7XHJcblx0XHRcdFx0XHRmbG9hdCBiID0gKCB2VXYueSA+IDAuMCApID8gdlV2LnkgLSAxLjAgOiB2VXYueSArIDEuMDtcclxuXHRcdFx0XHRcdGZsb2F0IGxlbjIgPSBhICogYSArIGIgKiBiO1xyXG5cdFx0XHRcdFx0ZmxvYXQgZGxlbiA9IGZ3aWR0aCggbGVuMiApO1xyXG5cclxuXHRcdFx0XHRcdGlmICggYWJzKCB2VXYueSApID4gMS4wICkge1xyXG5cclxuXHRcdFx0XHRcdFx0YWxwaGEgPSAxLjAgLSBzbW9vdGhzdGVwKCAxLjAgLSBkbGVuLCAxLjAgKyBkbGVuLCBsZW4yICk7XHJcblxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQjZWxzZVxyXG5cclxuXHRcdFx0XHRcdGlmICggYWJzKCB2VXYueSApID4gMS4wICkge1xyXG5cclxuXHRcdFx0XHRcdFx0ZmxvYXQgYSA9IHZVdi54O1xyXG5cdFx0XHRcdFx0XHRmbG9hdCBiID0gKCB2VXYueSA+IDAuMCApID8gdlV2LnkgLSAxLjAgOiB2VXYueSArIDEuMDtcclxuXHRcdFx0XHRcdFx0ZmxvYXQgbGVuMiA9IGEgKiBhICsgYiAqIGI7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIGxlbjIgPiAxLjAgKSBkaXNjYXJkO1xyXG5cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0I2VuZGlmXHJcblxyXG5cdFx0XHQjZW5kaWZcclxuXHJcblx0XHRcdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgYWxwaGEgKTtcclxuXHJcblx0XHRcdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cclxuXHRcdFx0Ly8gI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PiBDT01NRU5URUQgQ0hVTktcclxuXHRcdFx0I2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApXHJcblx0XHRcdFx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcclxuXHRcdFx0I2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SIClcclxuXHRcdFx0XHRkaWZmdXNlQ29sb3IucmdiID0gdkNvbG9yO1xyXG5cdFx0XHQjZW5kaWZcclxuXHJcblx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGRpZmZ1c2VDb2xvci5yZ2IsIGFscGhhICk7XHJcblxyXG5cdFx0XHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XHJcblx0XHRcdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XHJcblx0XHRcdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XHJcblx0XHRcdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxyXG5cclxuXHRcdH1cclxuXHRcdGBcclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1kZWNsYXJhdGlvbi1tZXJnaW5nICovXHJcbmltcG9ydCB7XHJcbiAgQWx3YXlzU3RlbmNpbEZ1bmMsXHJcbiAgdHlwZSBJVW5pZm9ybSxcclxuICBNYXRlcmlhbCxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCxcclxuICBNZXNoRGVwdGhNYXRlcmlhbCxcclxuICBNZXNoTm9ybWFsTWF0ZXJpYWwsXHJcbiAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsXHJcbiAgUG9pbnRzTWF0ZXJpYWwsXHJcbiAgUmVwbGFjZVN0ZW5jaWxPcCxcclxuICBVbmlmb3Jtc1V0aWxzLFxyXG4gIHR5cGUgU2hhZGVyLFxyXG4gIE1lc2hNYXRjYXBNYXRlcmlhbFxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBMaW5lTWF0ZXJpYWwgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbGluZXMvTGluZU1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBTdGVuY2lsT3V0bGluZVR5cGUgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIE1hdGVyaWFsT3B0aW9ucyB9IGZyb20gJy4vTWF0ZXJpYWxPcHRpb25zLmpzJ1xyXG5cclxuY2xhc3MgU3BlY2tsZVVzZXJEYXRhIHtcclxuICBbazogc3RyaW5nXTogdW5rbm93blxyXG4gIHRvSlNPTigpIHtcclxuICAgIHJldHVybiB7fVxyXG4gIH1cclxufVxyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuZXhwb3J0IHR5cGUgVW5pZm9ybXMgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+XHJcblxyXG5leHBvcnQgY2xhc3MgU3BlY2tsZU1hdGVyaWFsIHtcclxuICBwcm90ZWN0ZWQgX2ludGVybmFsVW5pZm9ybXM6IFNoYWRlclxyXG4gIHByb3RlY3RlZCBfc3RlbmNpbE91dGxpbmU6IFN0ZW5jaWxPdXRsaW5lVHlwZSA9IFN0ZW5jaWxPdXRsaW5lVHlwZS5OT05FXHJcbiAgcHVibGljIG5lZWRzQ29weTogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIHByb3RlY3RlZCBnZXQgc3BlY2tsZVVzZXJEYXRhKCk6IFNwZWNrbGVVc2VyRGF0YSB7XHJcbiAgICByZXR1cm4gKHRoaXMgYXMgdW5rbm93biBhcyBNYXRlcmlhbCkudXNlckRhdGFcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXQgc3BlY2tsZVVzZXJEYXRhKHZhbHVlOiBTcGVja2xlVXNlckRhdGEpIHtcclxuICAgIDsodGhpcyBhcyB1bmtub3duIGFzIE1hdGVyaWFsKS51c2VyRGF0YSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IHNwZWNrbGVEZWZpbmVzKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiAodGhpcyBhcyB1bmtub3duIGFzIE1hdGVyaWFsKS5kZWZpbmVzXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0IHNwZWNrbGVEZWZpbmVzKHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xyXG4gICAgOyh0aGlzIGFzIHVua25vd24gYXMgTWF0ZXJpYWwpLmRlZmluZXMgPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCB2ZXJ0ZXhQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgZnJhZ21lbnRQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgdW5pZm9ybXNEZWYoKTogVW5pZm9ybXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZW1wdHk6ICdlbXB0eSdcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgYmFzZVVuaWZvcm1zKCk6IHsgW3VuaWZvcm06IHN0cmluZ106IElVbmlmb3JtIH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZW1wdHlCYXNlOiB7IHZhbHVlOiAnZW1wdHlCYXNlJyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0IHN0ZW5jaWxPdXRsaW5lKHZhbHVlOiBTdGVuY2lsT3V0bGluZVR5cGUpIHtcclxuICAgIHRoaXMuX3N0ZW5jaWxPdXRsaW5lID0gdmFsdWVcclxuICAgIGNvbnN0IHRoaXNBc01hdGVyaWFsOiBNYXRlcmlhbCA9IHRoaXMgYXMgdW5rbm93biBhcyBNYXRlcmlhbFxyXG4gICAgdGhpc0FzTWF0ZXJpYWwuc3RlbmNpbFdyaXRlID0gdmFsdWUgPT09IFN0ZW5jaWxPdXRsaW5lVHlwZS5OT05FID8gZmFsc2UgOiB0cnVlXHJcbiAgICBpZiAodGhpc0FzTWF0ZXJpYWwuc3RlbmNpbFdyaXRlKSB7XHJcbiAgICAgIHRoaXNBc01hdGVyaWFsLnN0ZW5jaWxXcml0ZU1hc2sgPSAweGZmXHJcbiAgICAgIHRoaXNBc01hdGVyaWFsLnN0ZW5jaWxSZWYgPSAweDAwXHJcbiAgICAgIHRoaXNBc01hdGVyaWFsLnN0ZW5jaWxGdW5jID0gQWx3YXlzU3RlbmNpbEZ1bmNcclxuICAgICAgdGhpc0FzTWF0ZXJpYWwuc3RlbmNpbFpGYWlsID0gUmVwbGFjZVN0ZW5jaWxPcFxyXG4gICAgICB0aGlzQXNNYXRlcmlhbC5zdGVuY2lsWlBhc3MgPSBSZXBsYWNlU3RlbmNpbE9wXHJcbiAgICAgIHRoaXNBc01hdGVyaWFsLnN0ZW5jaWxGYWlsID0gUmVwbGFjZVN0ZW5jaWxPcFxyXG4gICAgICBpZiAodmFsdWUgPT09IFN0ZW5jaWxPdXRsaW5lVHlwZS5PVVRMSU5FX09OTFkpIHtcclxuICAgICAgICB0aGlzQXNNYXRlcmlhbC5jb2xvcldyaXRlID0gZmFsc2VcclxuICAgICAgICB0aGlzQXNNYXRlcmlhbC5kZXB0aFdyaXRlID0gZmFsc2VcclxuICAgICAgICB0aGlzQXNNYXRlcmlhbC5zdGVuY2lsV3JpdGUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXQgcG9pbnRTaXplKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIDsodGhpcyBhcyB1bmtub3duIGFzIFBvaW50c01hdGVyaWFsKS5zaXplID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbml0KGRlZmluZXM6IEFycmF5PHN0cmluZz4gPSBbXSkge1xyXG4gICAgdGhpcy5zcGVja2xlVXNlckRhdGEgPSBuZXcgU3BlY2tsZVVzZXJEYXRhKClcclxuICAgIHRoaXMuc2V0VW5pZm9ybXModGhpcy51bmlmb3Jtc0RlZilcclxuICAgIHRoaXMuc2V0RGVmaW5lcyhkZWZpbmVzKVxyXG4gICAgOyh0aGlzIGFzIHVua25vd24gYXMgTWF0ZXJpYWwpWydvbkJlZm9yZUNvbXBpbGUnXSA9IHRoaXMub25Db21waWxlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0VW5pZm9ybXMoZGVmOiBVbmlmb3Jtcykge1xyXG4gICAgZm9yIChjb25zdCBrIGluIGRlZikge1xyXG4gICAgICB0aGlzLnNwZWNrbGVVc2VyRGF0YVtrXSA9IHtcclxuICAgICAgICB2YWx1ZTogZGVmW2tdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICA7KHRoaXMgYXMgYW55KVsndW5pZm9ybXMnXSA9IFVuaWZvcm1zVXRpbHMubWVyZ2UoW1xyXG4gICAgICB0aGlzLmJhc2VVbmlmb3JtcyxcclxuICAgICAgdGhpcy5zcGVja2xlVXNlckRhdGFcclxuICAgIF0pXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0RGVmaW5lcyhkZWZpbmVzOiBBcnJheTxzdHJpbmc+ID0gW10pIHtcclxuICAgIGlmIChkZWZpbmVzKSB7XHJcbiAgICAgIHRoaXMuc3BlY2tsZURlZmluZXMgPSB7fVxyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IGRlZmluZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICB0aGlzLnNwZWNrbGVEZWZpbmVzW2RlZmluZXNba11dID0gJyAnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjb3B5VW5pZm9ybXMobWF0ZXJpYWw6IE1hdGVyaWFsKSB7XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gbWF0ZXJpYWwudXNlckRhdGEpIHtcclxuICAgICAgaWYgKHRoaXMuc3BlY2tsZVVzZXJEYXRhW2tdICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAodGhpcy5zcGVja2xlVXNlckRhdGFba10gYXMgYW55KS52YWx1ZSA9IG1hdGVyaWFsLnVzZXJEYXRhW2tdLnZhbHVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYmluZFVuaWZvcm1zKCkge1xyXG4gICAgaWYgKCF0aGlzLl9pbnRlcm5hbFVuaWZvcm1zKSByZXR1cm5cclxuXHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy51bmlmb3Jtc0RlZikge1xyXG4gICAgICB0aGlzLl9pbnRlcm5hbFVuaWZvcm1zLnVuaWZvcm1zW2tdID0gdGhpcy5zcGVja2xlVXNlckRhdGFba10gYXMgSVVuaWZvcm1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjb3B5RnJvbShzb3VyY2U6IE1hdGVyaWFsKSB7XHJcbiAgICB0aGlzLnNwZWNrbGVVc2VyRGF0YSA9IG5ldyBTcGVja2xlVXNlckRhdGEoKVxyXG4gICAgdGhpcy5zZXRVbmlmb3Jtcyh0aGlzLnVuaWZvcm1zRGVmKVxyXG4gICAgdGhpcy5jb3B5VW5pZm9ybXMoc291cmNlKVxyXG4gICAgdGhpcy5iaW5kVW5pZm9ybXMoKVxyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLnNwZWNrbGVEZWZpbmVzIGFzIG9iamVjdCwgc291cmNlLmRlZmluZXMpXHJcbiAgICBpZiAoKHNvdXJjZSBhcyB1bmtub3duIGFzIFNwZWNrbGVNYXRlcmlhbCkubmVlZHNDb3B5KVxyXG4gICAgICB0aGlzLm5lZWRzQ29weSA9IChzb3VyY2UgYXMgdW5rbm93biBhcyBTcGVja2xlTWF0ZXJpYWwpLm5lZWRzQ29weVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uQ29tcGlsZShzaGFkZXI6IFNoYWRlcikge1xyXG4gICAgdGhpcy5faW50ZXJuYWxVbmlmb3JtcyA9IHNoYWRlclxyXG4gICAgdGhpcy5iaW5kVW5pZm9ybXMoKVxyXG4gICAgc2hhZGVyLnZlcnRleFNoYWRlciA9IHRoaXMudmVydGV4UHJvZ3JhbVxyXG4gICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyID0gdGhpcy5mcmFnbWVudFByb2dyYW1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmYXN0Q29weShmcm9tOiBNYXRlcmlhbCwgdG86IE1hdGVyaWFsKSB7XHJcbiAgICB0by5hbHBoYVRlc3QgPSBmcm9tLmFscGhhVGVzdFxyXG4gICAgdG8uYWxwaGFUb0NvdmVyYWdlID0gZnJvbS5hbHBoYVRvQ292ZXJhZ2VcclxuICAgIHRvLmJsZW5kRHN0ID0gZnJvbS5ibGVuZERzdFxyXG4gICAgdG8uYmxlbmREc3RBbHBoYSA9IGZyb20uYmxlbmREc3RBbHBoYVxyXG4gICAgdG8uYmxlbmRFcXVhdGlvbiA9IGZyb20uYmxlbmRFcXVhdGlvblxyXG4gICAgdG8uYmxlbmRFcXVhdGlvbkFscGhhID0gZnJvbS5ibGVuZEVxdWF0aW9uQWxwaGFcclxuICAgIHRvLmJsZW5kaW5nID0gZnJvbS5ibGVuZGluZ1xyXG4gICAgdG8uYmxlbmRTcmMgPSBmcm9tLmJsZW5kU3JjXHJcbiAgICB0by5ibGVuZFNyY0FscGhhID0gZnJvbS5ibGVuZFNyY0FscGhhXHJcbiAgICB0by5jbGlwSW50ZXJzZWN0aW9uID0gZnJvbS5jbGlwSW50ZXJzZWN0aW9uXHJcbiAgICB0by5jbGlwcGluZ1BsYW5lcyA9IGZyb20uY2xpcHBpbmdQbGFuZXNcclxuICAgIHRvLmNsaXBTaGFkb3dzID0gZnJvbS5jbGlwU2hhZG93c1xyXG4gICAgdG8uY29sb3JXcml0ZSA9IGZyb20uY29sb3JXcml0ZVxyXG4gICAgT2JqZWN0LmFzc2lnbih0by5kZWZpbmVzIGFzIG9iamVjdCwgZnJvbS5kZWZpbmVzKVxyXG4gICAgdG8uZGVwdGhGdW5jID0gZnJvbS5kZXB0aEZ1bmNcclxuICAgIHRvLmRlcHRoVGVzdCA9IGZyb20uZGVwdGhUZXN0XHJcbiAgICB0by5kZXB0aFdyaXRlID0gZnJvbS5kZXB0aFdyaXRlXHJcbiAgICB0by5zdGVuY2lsV3JpdGUgPSBmcm9tLnN0ZW5jaWxXcml0ZVxyXG4gICAgdG8uc3RlbmNpbEZ1bmMgPSBmcm9tLnN0ZW5jaWxGdW5jXHJcbiAgICB0by5zdGVuY2lsUmVmID0gZnJvbS5zdGVuY2lsUmVmXHJcbiAgICB0by5zdGVuY2lsV3JpdGVNYXNrID0gZnJvbS5zdGVuY2lsV3JpdGVNYXNrXHJcbiAgICB0by5zdGVuY2lsRnVuY01hc2sgPSBmcm9tLnN0ZW5jaWxGdW5jTWFza1xyXG4gICAgdG8uc3RlbmNpbEZhaWwgPSBmcm9tLnN0ZW5jaWxGYWlsXHJcbiAgICB0by5zdGVuY2lsWkZhaWwgPSBmcm9tLnN0ZW5jaWxaRmFpbFxyXG4gICAgdG8uc3RlbmNpbFpQYXNzID0gZnJvbS5zdGVuY2lsWlBhc3NcclxuICAgIHRvLm9wYWNpdHkgPSBmcm9tLm9wYWNpdHlcclxuICAgIHRvLnBvbHlnb25PZmZzZXQgPSBmcm9tLnBvbHlnb25PZmZzZXRcclxuICAgIHRvLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBmcm9tLnBvbHlnb25PZmZzZXRGYWN0b3JcclxuICAgIHRvLnBvbHlnb25PZmZzZXRVbml0cyA9IGZyb20ucG9seWdvbk9mZnNldFVuaXRzXHJcbiAgICB0by5wcmVtdWx0aXBsaWVkQWxwaGEgPSBmcm9tLnByZW11bHRpcGxpZWRBbHBoYVxyXG4gICAgdG8uZGl0aGVyaW5nID0gZnJvbS5kaXRoZXJpbmdcclxuICAgIHRvLnNpZGUgPSBmcm9tLnNpZGVcclxuICAgIHRvLnNoYWRvd1NpZGUgPSBmcm9tLnNoYWRvd1NpZGVcclxuICAgIHRvLnRvbmVNYXBwZWQgPSBmcm9tLnRvbmVNYXBwZWRcclxuICAgIHRvLnRyYW5zcGFyZW50ID0gZnJvbS50cmFuc3BhcmVudFxyXG4gICAgdG8udmVydGV4Q29sb3JzID0gZnJvbS52ZXJ0ZXhDb2xvcnNcclxuICAgIHRvLnZpc2libGUgPSBmcm9tLnZpc2libGVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNYXRlcmlhbE9wdGlvbnMob3B0aW9uczogTWF0ZXJpYWxPcHRpb25zKSB7XHJcbiAgICB0aGlzLnN0ZW5jaWxPdXRsaW5lID0gb3B0aW9ucy5zdGVuY2lsT3V0bGluZXMgfHwgU3RlbmNpbE91dGxpbmVUeXBlLk5PTkVcclxuICAgIHRoaXMucG9pbnRTaXplID0gb3B0aW9ucy5wb2ludFNpemUgfHwgMVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEV4dGVuZGVkTWVzaFN0YW5kYXJkTWF0ZXJpYWwgZXh0ZW5kcyBNZXNoU3RhbmRhcmRNYXRlcmlhbCB7fVxyXG5leHBvcnQgY2xhc3MgRXh0ZW5kZWRNZXNoQmFzaWNNYXRlcmlhbCBleHRlbmRzIE1lc2hCYXNpY01hdGVyaWFsIHt9XHJcbmV4cG9ydCBjbGFzcyBFeHRlbmRlZE1lc2hEZXB0aE1hdGVyaWFsIGV4dGVuZHMgTWVzaERlcHRoTWF0ZXJpYWwge31cclxuZXhwb3J0IGNsYXNzIEV4dGVuZGVkTWVzaE5vcm1hbE1hdGVyaWFsIGV4dGVuZHMgTWVzaE5vcm1hbE1hdGVyaWFsIHt9XHJcbmV4cG9ydCBjbGFzcyBFeHRlbmRlZE1hdGNhcE1hdGVyaWFsIGV4dGVuZHMgTWVzaE1hdGNhcE1hdGVyaWFsIHt9XHJcbmV4cG9ydCBjbGFzcyBFeHRlbmRlZExpbmVNYXRlcmlhbCBleHRlbmRzIExpbmVNYXRlcmlhbCB7fVxyXG5leHBvcnQgY2xhc3MgRXh0ZW5kZWRQb2ludHNNYXRlcmlhbCBleHRlbmRzIFBvaW50c01hdGVyaWFsIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuZGVkTWVzaFN0YW5kYXJkTWF0ZXJpYWwgZXh0ZW5kcyBTcGVja2xlTWF0ZXJpYWwge31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRNZXNoQmFzaWNNYXRlcmlhbCBleHRlbmRzIFNwZWNrbGVNYXRlcmlhbCB7fVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHRlbmRlZE1lc2hEZXB0aE1hdGVyaWFsIGV4dGVuZHMgU3BlY2tsZU1hdGVyaWFsIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuZGVkTWVzaE5vcm1hbE1hdGVyaWFsIGV4dGVuZHMgU3BlY2tsZU1hdGVyaWFsIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuZGVkTWF0Y2FwTWF0ZXJpYWwgZXh0ZW5kcyBTcGVja2xlTWF0ZXJpYWwge31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRMaW5lTWF0ZXJpYWwgZXh0ZW5kcyBTcGVja2xlTWF0ZXJpYWwge31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRQb2ludHNNYXRlcmlhbCBleHRlbmRzIFNwZWNrbGVNYXRlcmlhbCB7fVxyXG5cclxuYXBwbHlNaXhpbnMoRXh0ZW5kZWRNZXNoU3RhbmRhcmRNYXRlcmlhbCwgW1NwZWNrbGVNYXRlcmlhbF0pXHJcbmFwcGx5TWl4aW5zKEV4dGVuZGVkTWVzaEJhc2ljTWF0ZXJpYWwsIFtTcGVja2xlTWF0ZXJpYWxdKVxyXG5hcHBseU1peGlucyhFeHRlbmRlZE1lc2hEZXB0aE1hdGVyaWFsLCBbU3BlY2tsZU1hdGVyaWFsXSlcclxuYXBwbHlNaXhpbnMoRXh0ZW5kZWRNZXNoTm9ybWFsTWF0ZXJpYWwsIFtTcGVja2xlTWF0ZXJpYWxdKVxyXG5hcHBseU1peGlucyhFeHRlbmRlZE1hdGNhcE1hdGVyaWFsLCBbU3BlY2tsZU1hdGVyaWFsXSlcclxuYXBwbHlNaXhpbnMoRXh0ZW5kZWRMaW5lTWF0ZXJpYWwsIFtTcGVja2xlTWF0ZXJpYWxdKVxyXG5hcHBseU1peGlucyhFeHRlbmRlZFBvaW50c01hdGVyaWFsLCBbU3BlY2tsZU1hdGVyaWFsXSlcclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1peGlucyhkZXJpdmVkQ3RvcjogYW55LCBjb25zdHJ1Y3RvcnM6IGFueVtdKSB7XHJcbiAgY29uc3RydWN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XHJcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiYXNlQ3Rvci5wcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxyXG4gICAgICAgIGRlcml2ZWRDdG9yLnByb3RvdHlwZSxcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZUN0b3IucHJvdG90eXBlLCBuYW1lKSB8fCBPYmplY3QuY3JlYXRlKG51bGwpXHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cclxuaW1wb3J0IHsgc3BlY2tsZUxpbmVWZXJ0IH0gZnJvbSAnLi9zaGFkZXJzL3NwZWNrbGUtbGluZS12ZXJ0LmpzJ1xyXG5pbXBvcnQgeyBzcGVja2xlTGluZUZyYWcgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1saW5lLWZyYWcuanMnXHJcbmltcG9ydCB7XHJcbiAgU2hhZGVyTGliLFxyXG4gIFZlY3RvcjMsXHJcbiAgdHlwZSBJVW5pZm9ybSxcclxuICBNYXRlcmlhbCxcclxuICBTY2VuZSxcclxuICBDYW1lcmEsXHJcbiAgQnVmZmVyR2VvbWV0cnksXHJcbiAgT2JqZWN0M0RcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgRXh0ZW5kZWRMaW5lTWF0ZXJpYWwsIHR5cGUgVW5pZm9ybXMgfSBmcm9tICcuL1NwZWNrbGVNYXRlcmlhbC5qcydcclxuaW1wb3J0IHtcclxuICBMaW5lTWF0ZXJpYWwsXHJcbiAgdHlwZSBMaW5lTWF0ZXJpYWxQYXJhbWV0ZXJzXHJcbn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xpbmVzL0xpbmVNYXRlcmlhbC5qcydcclxuaW1wb3J0IHR5cGUgeyBTcGVja2xlV2ViR0xSZW5kZXJlciB9IGZyb20gJy4uL29iamVjdHMvU3BlY2tsZVdlYkdMUmVuZGVyZXIuanMnXHJcblxyXG5jbGFzcyBTcGVja2xlTGluZU1hdGVyaWFsIGV4dGVuZHMgRXh0ZW5kZWRMaW5lTWF0ZXJpYWwge1xyXG4gIHByb3RlY3RlZCBnZXQgdmVydGV4UHJvZ3JhbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHNwZWNrbGVMaW5lVmVydFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBmcmFnbWVudFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlTGluZUZyYWdcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgYmFzZVVuaWZvcm1zKCk6IHsgW3VuaWZvcm06IHN0cmluZ106IElVbmlmb3JtIH0ge1xyXG4gICAgcmV0dXJuIFNoYWRlckxpYlsnbGluZSddLnVuaWZvcm1zXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IHVuaWZvcm1zRGVmKCk6IFVuaWZvcm1zIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHVWaWV3ZXJfaGlnaDogbmV3IFZlY3RvcjMoKSxcclxuICAgICAgdVZpZXdlcl9sb3c6IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIHBpeGVsVGhyZXNob2xkOiAwXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHBpeGVsVGhyZXNob2xkKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudXNlckRhdGEucGl4ZWxUaHJlc2hvbGQudmFsdWUgPSB2YWx1ZVxyXG4gICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnM6IExpbmVNYXRlcmlhbFBhcmFtZXRlcnMsIGRlZmluZXM6IHN0cmluZ1tdID0gW10pIHtcclxuICAgIHN1cGVyKHBhcmFtZXRlcnMpXHJcbiAgICB0aGlzLmluaXQoZGVmaW5lcylcclxuICB9XHJcblxyXG4gIC8qKiBXZSBuZWVkIGEgdW5pcXVlIGtleSBwZXIgcHJvZ3JhbSAqL1xyXG4gIHB1YmxpYyBjdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weShzb3VyY2U6IE1hdGVyaWFsKSB7XHJcbiAgICBzdXBlci5jb3B5KHNvdXJjZSlcclxuICAgIHRoaXMuY29weUZyb20oc291cmNlKVxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmYXN0Q29weShmcm9tOiBNYXRlcmlhbCwgdG86IE1hdGVyaWFsKSB7XHJcbiAgICBzdXBlci5mYXN0Q29weShmcm9tLCB0bylcclxuICAgIGNvbnN0IHRvU3RhbmRhcmQgPSB0byBhcyBMaW5lTWF0ZXJpYWxcclxuICAgIGNvbnN0IGZyb21TdGFuZGFyZCA9IGZyb20gYXMgTGluZU1hdGVyaWFsXHJcbiAgICB0b1N0YW5kYXJkLmNvbG9yLmNvcHkoZnJvbVN0YW5kYXJkLmNvbG9yKVxyXG4gICAgdG8udXNlckRhdGEucGl4ZWxUaHJlc2hvbGQudmFsdWUgPSBmcm9tLnVzZXJEYXRhLnBpeGVsVGhyZXNob2xkLnZhbHVlXHJcbiAgfVxyXG5cclxuICBvbkJlZm9yZVJlbmRlcihcclxuICAgIF90aGlzOiBTcGVja2xlV2ViR0xSZW5kZXJlcixcclxuICAgIF9zY2VuZTogU2NlbmUsXHJcbiAgICBfY2FtZXJhOiBDYW1lcmEsXHJcbiAgICBfZ2VvbWV0cnk6IEJ1ZmZlckdlb21ldHJ5LFxyXG4gICAgb2JqZWN0OiBPYmplY3QzRFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuZGVmaW5lcyAmJiB0aGlzLmRlZmluZXNbJ1VTRV9SVEUnXSkge1xyXG4gICAgICBvYmplY3QubW9kZWxWaWV3TWF0cml4LmNvcHkoX3RoaXMuUlRFQnVmZmVycy5ydGVWaWV3TW9kZWxNYXRyaXgpXHJcbiAgICAgIHRoaXMudXNlckRhdGEudVZpZXdlcl9sb3cudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnZpZXdlckxvdylcclxuICAgICAgdGhpcy51c2VyRGF0YS51Vmlld2VyX2hpZ2gudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnZpZXdlckhpZ2gpXHJcbiAgICB9XHJcbiAgICBfdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZSh0aGlzLnJlc29sdXRpb24pXHJcbiAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlY2tsZUxpbmVNYXRlcmlhbFxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZVN0YW5kYXJkVmVydCA9IC8qIGdsc2wgKi8gYFxyXG4jZGVmaW5lIFNUQU5EQVJEXHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICAvLyBUaGUgaGlnaCBjb21wb25lbnQgaXMgc3RvcmVkIGFzIHRoZSBkZWZhdWx0ICdwb3NpdGlvbicgYXR0cmlidXRlIGJ1ZmZlclxyXG4gICAgYXR0cmlidXRlIHZlYzMgcG9zaXRpb25fbG93O1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfaGlnaDtcclxuICAgIHVuaWZvcm0gdmVjMyB1Vmlld2VyX2xvdztcclxuICAgIHVuaWZvcm0gbWF0NCBydGVTaGFkb3dNYXRyaXg7XHJcbiAgICB1bmlmb3JtIHZlYzMgdVNoYWRvd1ZpZXdlcl9oaWdoO1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVTaGFkb3dWaWV3ZXJfbG93O1xyXG4jZW5kaWZcclxuXHJcbiNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgYXR0cmlidXRlIGZsb2F0IG9iakluZGV4O1xyXG4gICAgI2lmIFRSQU5TRk9STV9TVE9SQUdFID09IDBcclxuICAgICAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgICAgICNkZWZpbmUgVFJBTlNGT1JNX1NUUklERSA0XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgI2RlZmluZSBUUkFOU0ZPUk1fU1RSSURFIDQuXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdFRyYW5zZm9ybXM7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBvYmpDb3VudDtcclxuICAgICNlbGlmIFRSQU5TRk9STV9TVE9SQUdFID09IDFcclxuICAgICAgICB1bmlmb3JtIG1hdDQgdVRyYW5zZm9ybXNbT0JKX0NPVU5UXTtcclxuICAgICNlbmRpZlxyXG4jZW5kaWZcclxuXHJcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xyXG5cclxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cclxuXHJcbiAgICB2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XHJcblxyXG4jZW5kaWZcclxuXHJcbiNpbmNsdWRlIDxjb21tb24+XHJcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxyXG5cclxuI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICB2b2lkIG9iamVjdFRyYW5zZm9ybShvdXQgdmVjNCBxdWF0ZXJuaW9uLCBvdXQgdmVjNCBwaXZvdExvdywgb3V0IHZlYzQgcGl2b3RIaWdoLCBvdXQgdmVjNCB0cmFuc2xhdGlvbiwgb3V0IHZlYzQgc2NhbGUpe1xyXG4gICAgICAgICNpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAwXHJcbiAgICAgICAgICAgICNpZiBfX1ZFUlNJT05fXyA9PSAzMDBcclxuICAgICAgICAgICAgICAgIGl2ZWMyIHV2ID0gaXZlYzIoaW50KG9iakluZGV4KSAqIFRSQU5TRk9STV9TVFJJREUsIDApOyBcclxuICAgICAgICAgICAgICAgIHZlYzQgdjAgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYsIDAgKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjEgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigxLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYyID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMiwgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MyA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDMsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHF1YXRlcm5pb24gPSB2MDtcclxuICAgICAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh2MS54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodjIueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodjMueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBzY2FsZSA9IHZlYzQodjEudywgdjIudywgdjMudywgMS4pO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IG9iakNvdW50ICogVFJBTlNGT1JNX1NUUklERTtcclxuICAgICAgICAgICAgICAgIHZlYzIgY1V2ID0gdmVjMigwLjUvc2l6ZSwgMC41KTtcclxuICAgICAgICAgICAgICAgIHZlYzIgZFV2ID0gdmVjMigxLi9zaXplLCAwLik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHZlYzIgdXYgPSB2ZWMyKChvYmpJbmRleCAqIFRSQU5TRk9STV9TVFJJREUpL3NpemUgKyBjVXYueCwgY1V2LnkpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MCA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjEgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIGRVdik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYyID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyAyLiAqIGRVdik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYzID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyAzLiAqIGRVdik7XHJcbiAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uID0gdjA7XHJcbiAgICAgICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodjEueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHYyLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHYzLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHYxLncsIHYyLncsIHYzLncsIDEuKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VsaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMVxyXG4gICAgICAgICAgICBtYXQ0IHRNYXRyaXggPSB1VHJhbnNmb3Jtc1tpbnQob2JqSW5kZXgpXTtcclxuICAgICAgICAgICAgcXVhdGVybmlvbiA9IHRNYXRyaXhbMF07XHJcbiAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh0TWF0cml4WzFdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHRNYXRyaXhbMl0ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh0TWF0cml4WzNdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICBzY2FsZSA9IHZlYzQodE1hdHJpeFsxXVszXSwgdE1hdHJpeFsyXVszXSwgdE1hdHJpeFszXVszXSwgMS4pO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBoaWdocCB2ZWMzIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24oaGlnaHAgdmVjMyBwb3NpdGlvbiwgaGlnaHAgdmVjNCBxdWF0KVxyXG4gICAgeyAgIFxyXG4gICAgICAgIHJldHVybiBwb3NpdGlvbiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24pICsgcXVhdC53ICogcG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbm90aGVyIHdvcmthcm91bmQgZm9yIEFwcGxlJ3Mgc3R1cGlkIGNvbXBpbGVyICovXHJcbiAgICB2ZWM0IHNhZmVNdWwodmVjNCBhLCB2ZWM0IGIpIHtcclxuICAgICAgICAvLyBQcmV2ZW50cyBjb25zdGFudCBmb2xkaW5nIGFuZCBvcHRpbWl6YXRpb25cclxuICAgICAgICByZXR1cm4gKGEgKyB2ZWM0KDAuMCkpICogKGIgKyB2ZWM0KDEuMCkpIC0gYSAqIHZlYzQoMS4wKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWdocCB2ZWMzIHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKGhpZ2hwIHZlYzQgdjAsIGhpZ2hwIHZlYzQgdjEsIGhpZ2hwIHZlYzQgc2NhbGUsIGhpZ2hwIHZlYzQgcXVhdClcclxuICAgIHtcclxuICAgICAgICAvKiogISEhIFdPUktBUk9VTkQgRk9SIEludGVsIElyaXNYZSBDQVJEUyAhISEgKi9cclxuICAgICAgICAvKiogVGhlIGNvZGUgYmVsb3cgd2lsbCBub3QgcHJvZHVjZSBjb3JyZWN0IHJlc3VsdHMgaW4gaW50ZWwgSXJpc1hFIGludGVncmF0ZWQgR1BVcy4gXHJcbiAgICAgICAgICogIFRoZSBnZW9tZXRyeSB3aWxsIHR1cm4gbWFuZ2xlZCwgYWxiZWl0IHN0YWJsZVxyXG4gICAgICAgICAqICBJIGNhbid0IGtub3cgZm9yIHN1cmUgd2hhdCBpcyBnb2luZyBvbiwgYnV0IHJvdGF0aW5nIHRoZSBkaWZmZXJlbmNlIHNlZW1zIHRvIFxyXG4gICAgICAgICAqICBmb3JjZSB0aGUgcmVzdWx0IGludG8gYSBsb3dlciBwcmVjaXNpb24/XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gaGlnaHAgdmVjNCBwb3NpdGlvbiA9IHYwIC0gdjE7XHJcbiAgICAgICAgLy8gcmV0dXJuIHBvc2l0aW9uLnh5eiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24ueHl6KSArIHF1YXQudyAqIHBvc2l0aW9uLnh5eik7XHJcblxyXG4gICAgICAgIC8qKiBTdWJ0cmFjdGluZyB0aGUgcm90YXRlZCB2ZWN0b3JzIHdvcmtzLiAqL1xyXG4gICAgICAgIHJldHVybiByb3RhdGVfdmVydGV4X3Bvc2l0aW9uKHNhZmVNdWwodjAsIHNjYWxlKS54eXosIHF1YXQpICAtIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24oc2FmZU11bCh2MSwgc2NhbGUpLnh5eiwgcXVhdCkgO1xyXG5cclxuICAgICAgICAvKiogQW4gYWx0ZXJuYXRlIHdvcmthcm91bmQgaXNcclxuICAgICAgICAgKiBoaWdocCB2ZWMzIHBvc2l0aW9uID0gKHYwLnh5eiAqICgxLiArIDFlLTcpKSAtICh2MS54eXogKiAoMS4gKyAxZS03KSk7XHJcbiAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbikgKyBxdWF0LncgKiBwb3NpdGlvbik7XHJcblxyXG4gICAgICAgICAgIEhvd2V2ZXIgSSdtIG5vdCBzdWNoIGEgZmFuIG9mIHRoZSAoMS4gKyAxZS03KSBwYXJ0XHJcbiAgICAgICAgICovXHJcbiAgICB9XHJcbiNlbmRpZlxyXG5cclxuI2lmZGVmIFVTRV9SVEVcclxuICAgIGhpZ2hwIHZlYzQgY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oaW4gaGlnaHAgdmVjMyBwb3NpdGlvbl9sb3csIGluIGhpZ2hwIHZlYzMgcG9zaXRpb25faGlnaCwgaW4gaGlnaHAgdmVjMyByZWxhdGl2ZVRvX2xvdywgaW4gaGlnaHAgdmVjMyByZWxhdGl2ZVRvX2hpZ2gpe1xyXG4gICAgICAgIC8qIFxyXG4gICAgICAgIFNvdXJjZSBodHRwczovL2dpdGh1Yi5jb20vdmlydHVhbGdsb2JlYm9vay9PcGVuR2xvYmUvYmxvYi9tYXN0ZXIvU291cmNlL0V4YW1wbGVzL0NoYXB0ZXIwNS9KaXR0ZXIvR1BVUmVsYXRpdmVUb0V5ZURTRlVOOTAvU2hhZGVycy9WUy5nbHNsIFxyXG4gICAgICAgIE5vdGUgaGVyZSwgd2UncmUgc3RvcmluZyB0aGUgaGlnaCBwYXJ0IG9mIHRoZSBwb3NpdGlvbiBlbmNvZGluZyBpbnNpZGUgdGhyZWUncyBkZWZhdWx0ICdwb3NpdGlvbicgYXR0cmlidXRlIGJ1ZmZlciBzbyB3ZSBhdm9pZCByZWR1bmRhbmN5IFxyXG4gICAgICAgICovXHJcbiAgICAgICAgaGlnaHAgdmVjMyB0MSA9IHBvc2l0aW9uX2xvdy54eXogLSByZWxhdGl2ZVRvX2xvdy54eXo7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBlID0gdDEgLSBwb3NpdGlvbl9sb3cueHl6O1xyXG4gICAgICAgIC8qKiBUaGlzIGlzIHJlZHVuYW50LCBidXQgbmVjZXNzYXJ5IGFzIGEgd29ya2Fyb3VuZCBmb3IgQXBwbGUgcGxhdGZvcm1zICovXHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeCA9IHBvc2l0aW9uX2hpZ2gueCAtIHJlbGF0aXZlVG9faGlnaC54O1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHkgPSBwb3NpdGlvbl9oaWdoLnkgLSByZWxhdGl2ZVRvX2hpZ2gueTtcclxuICAgICAgICBoaWdocCBmbG9hdCB6ID0gcG9zaXRpb25faGlnaC56IC0gcmVsYXRpdmVUb19oaWdoLno7XHJcbiAgICAgICAgaGlnaHAgdmVjMyB2ID0gdmVjMyh4LCB5LCB6KTtcclxuICAgICAgICAvKiogRW5kIG9mIHJlZHVuZGFudCBwYXJ0ICovXHJcbiAgICAgICAgaGlnaHAgdmVjMyB0MiA9ICgoLXJlbGF0aXZlVG9fbG93IC0gZSkgKyAocG9zaXRpb25fbG93Lnh5eiAtICh0MSAtIGUpKSkgKyB2O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgaGlnaERpZmZlcmVuY2UgPSB0MSArIHQyO1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgbG93RGlmZmVyZW5jZSA9IHQyIC0gKGhpZ2hEaWZmZXJlbmNlLnh5eiAtIHQxLnh5eik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlnaHAgdmVjMyBwb3NpdGlvbiA9IGhpZ2hEaWZmZXJlbmNlLnh5eiArIGxvd0RpZmZlcmVuY2UueHl6O1xyXG4gICAgICAgIHJldHVybiB2ZWM0KHBvc2l0aW9uLCAxLik7XHJcbiAgICB9XHJcbiNlbmRpZlxyXG5cclxuXHJcbnZvaWQgbWFpbigpIHtcclxuXHJcbiAgICAjaW5jbHVkZSA8dXZfdmVydGV4PlxyXG4gICAgI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxyXG4gICAgI2luY2x1ZGUgPG1vcnBoY29sb3JfdmVydGV4PlxyXG4gICAgI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cclxuICAgICNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxyXG4gICAgI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxyXG4gICAgLy8gI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PiAvLyBDT01NRU5URUQgQ0hVTktcclxuICAgIHZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XHJcbiAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbiBsaWV1IG9mIGEgcGVyLWluc3RhbmNlIG5vcm1hbC1tYXRyaXhcclxuICAgICAgICAvLyBzaGVhciB0cmFuc2Zvcm1zIGluIHRoZSBpbnN0YW5jZSBtYXRyaXggYXJlIG5vdCBzdXBwb3J0ZWRcclxuICAgICAgICBtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICBcclxuICAgICAgICAvKiBJZiB3ZSBoYXZlIG5lZ2F0aXZlIHNjYWxpbmcsIHdlIGZsaXAgdGhlIG5vcm1hbCAqL1xyXG4gICAgICAgIGZsb2F0IHNpZ25EZXQgPSBzaWduKGRvdChtWzBdLCBjcm9zcyhtWzFdLCBtWzJdKSkpO1xyXG4gICAgICAgIC8vIE9wdGlvbmFsIGZhbGxiYWNrOiB0cmVhdCAwIGFzICsxXHJcbiAgICAgICAgc2lnbkRldCA9IHNpZ25EZXQgKyAoMS4wIC0gYWJzKHNpZ25EZXQpKTtcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCAqPSBzaWduRGV0O1xyXG4gICAgI2VuZGlmXHJcbiAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgI2lmZGVmIEZMSVBfU0lERURcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAjZW5kaWZcclxuICAgICNpZmRlZiBVU0VfVEFOR0VOVFxyXG4gICAgICAgIHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcclxuICAgICAgICAjaWZkZWYgRkxJUF9TSURFRFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG4gICAgI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XHJcblxyXG4gICAgI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cclxuICAgICNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxyXG4gICAgI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XHJcbiAgICAvLyNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4gLy8gRURJVEVEIENIVU5LXHJcbiAgICBcclxuICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgIGhpZ2hwIHZlYzQgdFF1YXRlcm5pb24sIHRQaXZvdExvdywgdFBpdm90SGlnaCwgdFRyYW5zbGF0aW9uLCB0U2NhbGU7XHJcbiAgICAgICAgb2JqZWN0VHJhbnNmb3JtKHRRdWF0ZXJuaW9uLCB0UGl2b3RMb3csIHRQaXZvdEhpZ2gsIHRUcmFuc2xhdGlvbiwgdFNjYWxlKTtcclxuICAgICNlbmRpZlxyXG4gICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICB2ZWM0IHBvc2l0aW9uX2xvd1QgPSB2ZWM0KHBvc2l0aW9uX2xvdywgMS4pO1xyXG4gICAgICAgIHZlYzQgcG9zaXRpb25faGlnaFQgPSB2ZWM0KHBvc2l0aW9uLCAxLik7XHJcbiAgICAgICAgY29uc3QgdmVjMyBaRVJPMyA9IHZlYzMoMC4sIDAuLCAwLik7XHJcblxyXG4gICAgICAgIGhpZ2hwIHZlYzQgcnRlTG9jYWxQb3NpdGlvbiA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHBvc2l0aW9uX2xvd1QueHl6LCBwb3NpdGlvbl9oaWdoVC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICBoaWdocCB2ZWM0IHJ0ZVBpdm90ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24odFBpdm90TG93Lnh5eiwgdFBpdm90SGlnaC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICBydGVMb2NhbFBvc2l0aW9uLnh5eiA9IHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKHJ0ZUxvY2FsUG9zaXRpb24sIHJ0ZVBpdm90LCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHJ0ZVBpdm90Lnh5eiArIHRUcmFuc2xhdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcbiAgICAgICAgICAgIHZlYzQgaW5zdGFuY2VQaXZvdCA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKFpFUk8zLCBaRVJPMywgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgIHJ0ZUxvY2FsUG9zaXRpb24ueHl6ID0gKG1hdDMoaW5zdGFuY2VNYXRyaXgpICogKHJ0ZUxvY2FsUG9zaXRpb24gLSBpbnN0YW5jZVBpdm90KS54eXopICsgaW5zdGFuY2VQaXZvdC54eXogKyBpbnN0YW5jZU1hdHJpeFszXS54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHJ0ZUxvY2FsUG9zaXRpb247XHJcbiAgICAjZWxzZVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcclxuICAgICAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICAgICAgbXZQb3NpdGlvbi54eXogPSByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShtdlBvc2l0aW9uLCB0UGl2b3RIaWdoLCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHRQaXZvdEhpZ2gueHl6ICsgdFRyYW5zbGF0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuICAgICAgICAgICAgbXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG4gICAgXHJcbiAgICBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcclxuXHJcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xyXG5cclxuXHJcbiAgICAjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxyXG4gICAgI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XHJcblxyXG4gICAgdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XHJcblxyXG4gICAgI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cclxuICAgIC8vICNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PiBDT01NRU5URUQgQ0hVTkshISFcclxuICAgICNpZmRlZiBVU0VfU0hBRE9XTUFQXHJcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXHJcblx0XHQvLyBPZmZzZXR0aW5nIHRoZSBwb3NpdGlvbiB1c2VkIGZvciBxdWVyeWluZyBvY2NsdXNpb24gYWxvbmcgdGhlIHdvcmxkIG5vcm1hbCBjYW4gYmUgdXNlZCB0byByZWR1Y2Ugc2hhZG93IGFjbmUuXHJcblx0XHR2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtcclxuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcclxuXHQjZW5kaWZcclxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxyXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcclxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XHJcbiAgICAgICAgaGlnaHAgdmVjNCBzaGFkb3dQb3NpdGlvbiA9IHZlYzQodHJhbnNmb3JtZWQsIDEuMCk7XHJcbiAgICAgICAgbWF0NCBzaGFkb3dNYXRyaXggPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdO1xyXG5cclxuICAgICAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgICAgICBzaGFkb3dQb3NpdGlvbiA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHBvc2l0aW9uX2xvdy54eXosIHBvc2l0aW9uLnh5eiwgdVNoYWRvd1ZpZXdlcl9sb3csIHVTaGFkb3dWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdHJpeCA9IHJ0ZVNoYWRvd01hdHJpeDtcclxuICAgICAgICAgICAgI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICAgICAgICAgICAgICBoaWdocCB2ZWM0IHJ0ZVBpdm90U2hhZG93ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24odFBpdm90TG93Lnh5eiwgdFBpdm90SGlnaC54eXosIHVTaGFkb3dWaWV3ZXJfbG93LCB1U2hhZG93Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93UG9zaXRpb24ueHl6ID0gcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEoc2hhZG93UG9zaXRpb24sIHJ0ZVBpdm90U2hhZG93LCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHJ0ZVBpdm90U2hhZG93Lnh5eiArIHRUcmFuc2xhdGlvbi54eXo7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuICAgICAgICAgICAgICAgIHZlYzQgcnRlUGl2b3RTaGFkb3cgPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihaRVJPMywgWkVSTzMsIHVTaGFkb3dWaWV3ZXJfbG93LCB1U2hhZG93Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93UG9zaXRpb24ueHl6ID0gKG1hdDMoaW5zdGFuY2VNYXRyaXgpICogKHNoYWRvd1Bvc2l0aW9uIC0gcnRlUGl2b3RTaGFkb3cpLnh5eikgKyBydGVQaXZvdFNoYWRvdy54eXogKyBpbnN0YW5jZU1hdHJpeFszXS54eXo7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICAgICAgc2hhZG93UG9zaXRpb24ueHl6ID0gcm90YXRlX3ZlcnRleF9wb3NpdGlvbihzaGFkb3dQb3NpdGlvbi54eXogKiB0U2NhbGUueHl6LCB0UXVhdGVybmlvbikgKyB0VHJhbnNsYXRpb24ueHl6O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcbiAgICAgICAgICAgICAgICBzaGFkb3dQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogc2hhZG93UG9zaXRpb247XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHNoYWRvd1dvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHNoYWRvd1Bvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcclxuICAgICAgICB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gc2hhZG93TWF0cml4ICogc2hhZG93V29ybGRQb3NpdGlvbjtcclxuXHR9XHJcbiAgICBcclxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxyXG5cdCNlbmRpZlxyXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxyXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcclxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xyXG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XHJcblx0XHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xyXG5cdH1cclxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxyXG5cdCNlbmRpZlxyXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcclxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XHJcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XHJcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XHJcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XHJcblx0fVxyXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXHJcblx0I2VuZGlmXHJcblx0LypcclxuXHQjaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXHJcblx0XHQvLyBUT0RPIChhYmVsbmF0aW9uKTogdXBkYXRlIHZBcmVhU2hhZG93Q29vcmQgd2l0aCBhcmVhIGxpZ2h0IGluZm9cclxuXHQjZW5kaWZcclxuXHQqL1xyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XHJcblxyXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxyXG5cclxuICAgIHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XHJcblxyXG4jZW5kaWZcclxufVxyXG5gXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlU3RhbmRhcmRGcmFnID0gLyogZ2xzbCAqLyBgXHJcbiNkZWZpbmUgU1RBTkRBUkRcclxuXHJcbiNpZmRlZiBQSFlTSUNBTFxyXG4gICAgI2RlZmluZSBJT1JcclxuICAgICNkZWZpbmUgU1BFQ1VMQVJcclxuI2VuZGlmXHJcblxyXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcclxudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xyXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcclxudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XHJcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcclxuXHJcbiNpZmRlZiBJT1JcclxuICAgIHVuaWZvcm0gZmxvYXQgaW9yO1xyXG4jZW5kaWZcclxuXHJcbiNpZmRlZiBTUEVDVUxBUlxyXG4gICAgdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcclxuICAgIHVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yO1xyXG5cclxuICAgICNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcclxuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxyXG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XHJcbiAgICAjZW5kaWZcclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxyXG4gICAgdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7XHJcbiAgICB1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVVNFX1NIRUVOXHJcbiAgICB1bmlmb3JtIHZlYzMgc2hlZW5Db2xvcjtcclxuICAgIHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XHJcblxyXG4gICAgI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQXHJcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Db2xvck1hcDtcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVBcclxuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDtcclxuICAgICNlbmRpZlxyXG4jZW5kaWZcclxuXHJcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xyXG4vKiogV2UncmUgZGlzYWJsaW5nIGNvbG9yIGdyYWRpbmcgZm9yIG5vdyB1bnRpbCB3ZSB3YW50IHRvIHByb3Blcmx5IG9mZmVyIGl0IHRvIHRoZSB1c2VycyAqL1xyXG4vLyNkZWZpbmUgQ1VTVE9NX1RPTkVNQVBQSU5HIFxyXG5cclxuI2lmZGVmIENVU1RPTV9UT05FTUFQUElOR1xyXG5cclxuXHR1bmlmb3JtIGZsb2F0IGNvbnRyYXN0O1xyXG5cdHVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbjtcclxuXHR1bmlmb3JtIGZsb2F0IHdoaXRlc2NhbGU7XHJcblx0dmVjMyBFdmFsTG9nQ29udHJhc3RGdW5jKHZlYzMgY29sLCBmbG9hdCBlcHMsIGZsb2F0IGxvZ01pZHBvaW50LCBmbG9hdCBjb250cmFzdEZhY3RvcilcclxuXHR7XHJcblx0XHR2ZWMzIHggPSBtYXgodmVjMygwLiksIGNvbCk7XHJcblx0XHR2ZWMzIGxvZ1ggPSBsb2cyKHgrdmVjMyhlcHMpKTtcclxuXHRcdHZlYzMgYWRqWCA9IHZlYzMobG9nTWlkcG9pbnQpICsgKGxvZ1ggLSB2ZWMzKGxvZ01pZHBvaW50KSkgKiBjb250cmFzdEZhY3RvcjtcclxuXHRcdHZlYzMgcmV0ID0gbWF4KHZlYzMoMC4wKSwgZXhwMihhZGpYKSAtIHZlYzMoZXBzKSk7XHJcblx0XHRyZXR1cm4gcmV0O1xyXG5cdH1cclxuXHJcblx0dmVjMyBldmFsU2F0dXJhdGlvbih2ZWMzIHJnYlZhbCwgZmxvYXQgc2F0dXJhdGlvbkZhY3Rvcil7XHJcblx0XHR2ZWMzIGx1bWFXZWlnaHRzID0gdmVjMyguMjUsLjUwLC4yNSk7XHJcblx0XHR2ZWMzIGdyZXkgPSB2ZWMzKGRvdChsdW1hV2VpZ2h0cyxyZ2JWYWwpKTtcclxuXHRcdHJldHVybiBncmV5ICsgc2F0dXJhdGlvbkZhY3RvcioocmdiVmFsLWdyZXkpO1xyXG5cdH1cclxuXHJcblx0dmVjMyBldmFsRXhwb3N1cmUodmVjMyByZ2JWYWwsIGZsb2F0IGV4cG9zdXJlRmFjdG9yKXtcclxuXHRcdHJldHVybiByZ2JWYWwgKiBleHAyKGV4cG9zdXJlRmFjdG9yKTtcclxuXHR9XHJcblxyXG5cdHZlYzMgZmlsbWljVG9uZW1hcCh2ZWMzIHgpIHtcclxuXHRcdGZsb2F0IEEgPSAwLjE1O1xyXG5cdFx0ZmxvYXQgQiA9IDAuNTA7XHJcblx0XHRmbG9hdCBDID0gMC4xMDtcclxuXHRcdGZsb2F0IEQgPSAwLjIwO1xyXG5cdFx0ZmxvYXQgRSA9IDAuMDI7XHJcblx0XHRmbG9hdCBGID0gMC4zMDtcclxuXHRcdGZsb2F0IFcgPSAxMS4yO1xyXG5cdFx0cmV0dXJuICgoeCooQSp4K0MqQikrRCpFKSAvICh4KihBKngrQikrRCpGKSktIEUgLyBGO1xyXG5cdH1cclxuXHJcblxyXG5cdHZlYzMgYXBwbHlGaWxtaWNUb25lTWFwKCB2ZWMzIGNvbG9yKSBcclxuXHR7XHJcblx0XHRjb2xvciA9IDIuMCAqIGZpbG1pY1RvbmVtYXAoIGNvbG9yKTtcclxuXHRcdHZlYzMgd2hpdGVTY2FsZSA9IDEuMCAvIGZpbG1pY1RvbmVtYXAodmVjMygxMS4yKSk7XHJcblx0XHRjb2xvciAqPSB3aGl0ZVNjYWxlO1xyXG5cdFx0cmV0dXJuIGNvbG9yO1xyXG5cdH1cclxuXHJcblx0dmVjMyBwb3N0UHJvY2VzcyhpbiB2ZWMzIF9jb2xvciwgZmxvYXQgZXhwb3N1cmVGYWN0b3IsIGZsb2F0IGNvbnRyYXN0RmFjdG9yLCBmbG9hdCBzYXR1cmF0aW9uRmFjdG9yKXtcclxuXHRcdHZlYzMgY29sb3IgPSBfY29sb3I7XHJcblxyXG5cdFx0Ly8gY29sb3IucmdiICo9IGV4cG9zdXJlRmFjdG9yO1xyXG5cdFx0Y29sb3IucmdiID0gZXZhbFNhdHVyYXRpb24oY29sb3IucmdiLCBzYXR1cmF0aW9uRmFjdG9yKTtcclxuXHRcdGNvbG9yID0gRXZhbExvZ0NvbnRyYXN0RnVuYyhjb2xvciwgMC4wMDAxLCAwLjE4LCBjb250cmFzdEZhY3Rvcik7XHJcblx0XHRjb2xvci5yZ2IgPSBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIGNvbG9yICk7Ly9hcHBseUZpbG1pY1RvbmVNYXAoY29sb3IucmdiKTtcclxuXHRcdHJldHVybiBjb2xvcjtcclxuXHR9XHJcbiNlbmRpZlxyXG5cclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2luY2x1ZGUgPHBhY2tpbmc+XHJcbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGJzZGZzPlxyXG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8ZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxyXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cclxuXHJcblxyXG52b2lkIG1haW4oKSB7XHJcblxyXG4gICAgI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cclxuXHJcbiAgICB2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcclxuICAgIFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XHJcbiAgICB2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xyXG5cclxuICAgICNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxyXG4gICAgI2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxyXG4gICAgI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxyXG4gICAgI2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+XHJcbiAgICAjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzPlxyXG4gICAgI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxyXG5cclxuICAgIC8vIGFjY3VtdWxhdGlvblxyXG4gICAgI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XHJcbiAgICAjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XHJcbiAgICAjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cclxuXHJcbiAgICAvLyBtb2R1bGF0aW9uXHJcbiAgICAjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XHJcblxyXG4gICAgdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xyXG4gICAgdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xyXG5cclxuICAgICNpbmNsdWRlIDx0cmFuc21pc3Npb25fZnJhZ21lbnQ+XHJcblxyXG4gICAgdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdG90YWxEaWZmdXNlICsgdG90YWxTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcclxuXHJcbiAgICAjaWZkZWYgVVNFX1NIRUVOXHJcblxyXG4gICAgICAgIC8vIFNoZWVuIGVuZXJneSBjb21wZW5zYXRpb24gYXBwcm94aW1hdGlvbiBjYWxjdWxhdGlvbiBjYW4gYmUgZm91bmQgYXQgdGhlIGVuZCBvZlxyXG4gICAgICAgIC8vIGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9maWxlL2QvMVQwRDFWU3lSNEFsbHFJSlRRQXJhRUl6amxiNWg0RktIL3ZpZXc/dXNwPXNoYXJpbmdcclxuICAgICAgICBmbG9hdCBzaGVlbkVuZXJneUNvbXAgPSAxLjAgLSAwLjE1NyAqIG1heDMoIG1hdGVyaWFsLnNoZWVuQ29sb3IgKTtcclxuXHJcbiAgICAgICAgb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xyXG5cclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZmRlZiBVU0VfQ0xFQVJDT0FUXHJcblxyXG4gICAgICAgIGZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xyXG5cclxuICAgICAgICB2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xyXG5cclxuICAgICAgICBvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqICggMS4wIC0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogRmNjICkgKyBjbGVhcmNvYXRTcGVjdWxhciAqIG1hdGVyaWFsLmNsZWFyY29hdDtcclxuXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAvLyAjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PiBDT01NRU5URUQgQ0hVTktcclxuICAgICNpZmRlZiBPUEFRVUVcclxuICAgICAgICBkaWZmdXNlQ29sb3IuYSA9IDEuMDtcclxuICAgICNlbmRpZlxyXG5cclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tcmRvb2IvdGhyZWUuanMvcHVsbC8yMjQyNVxyXG4gICAgI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cclxuICAgICAgICBkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTtcclxuICAgICNlbmRpZlxyXG5cclxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XHJcbiAgICAvLyAjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+IC8vIENPTU1FTlRFRCBPVVRcclxuICAgICNpZmRlZiBUT05FX01BUFBJTkdcclxuXHRcdCNpZmRlZiBDVVNUT01fVE9ORU1BUFBJTkdcclxuXHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiA9IHBvc3RQcm9jZXNzKGdsX0ZyYWdDb2xvci5yZ2IsIHRvbmVNYXBwaW5nRXhwb3N1cmUsIGNvbnRyYXN0LCBzYXR1cmF0aW9uKTtcclxuXHRcdCNlbHNlXHJcbiAgICAgICAgICAgIFxyXG5cdFx0XHRnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcclxuXHRcdCNlbmRpZlxyXG5cdCNlbmRpZlxyXG4gICAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XHJcblxyXG59XHJcbmBcclxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXHJcbmltcG9ydCB7IHNwZWNrbGVTdGFuZGFyZFZlcnQgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1zdGFuZGFyZC12ZXJ0LmpzJ1xyXG5pbXBvcnQgeyBzcGVja2xlU3RhbmRhcmRGcmFnIH0gZnJvbSAnLi9zaGFkZXJzL3NwZWNrbGUtc3RhbmRhcmQtZnJhZy5qcydcclxuaW1wb3J0IHtcclxuICBTaGFkZXJMaWIsXHJcbiAgVmVjdG9yMyxcclxuICBNYXRlcmlhbCxcclxuICB0eXBlIElVbmlmb3JtLFxyXG4gIHR5cGUgTWVzaFN0YW5kYXJkTWF0ZXJpYWxQYXJhbWV0ZXJzLFxyXG4gIFNjZW5lLFxyXG4gIENhbWVyYSxcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBPYmplY3QzRFxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBNYXRyaXg0IH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEV4dGVuZGVkTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIHR5cGUgVW5pZm9ybXMgfSBmcm9tICcuL1NwZWNrbGVNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgU3BlY2tsZVdlYkdMUmVuZGVyZXIgfSBmcm9tICcuLi9vYmplY3RzL1NwZWNrbGVXZWJHTFJlbmRlcmVyLmpzJ1xyXG5cclxuY2xhc3MgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwgZXh0ZW5kcyBFeHRlbmRlZE1lc2hTdGFuZGFyZE1hdGVyaWFsIHtcclxuICBwcm90ZWN0ZWQgb3JpZ2luYWxSb3VnaG5lc3M6IG51bWJlciB8IHVuZGVmaW5lZFxyXG4gIHByb3RlY3RlZCBhcnRpZmljaWFsUm91Z2huZXNzOiBudW1iZXIgfCB1bmRlZmluZWRcclxuXHJcbiAgcHJvdGVjdGVkIGdldCB2ZXJ0ZXhQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZVN0YW5kYXJkVmVydFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBmcmFnbWVudFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlU3RhbmRhcmRGcmFnXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IGJhc2VVbmlmb3JtcygpOiB7IFt1bmlmb3JtOiBzdHJpbmddOiBJVW5pZm9ybSB9IHtcclxuICAgIHJldHVybiBTaGFkZXJMaWIuc3RhbmRhcmQudW5pZm9ybXNcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgdW5pZm9ybXNEZWYoKTogVW5pZm9ybXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdVZpZXdlcl9oaWdoOiBuZXcgVmVjdG9yMygpLFxyXG4gICAgICB1Vmlld2VyX2xvdzogbmV3IFZlY3RvcjMoKSxcclxuICAgICAgcnRlU2hhZG93TWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG4gICAgICB1U2hhZG93Vmlld2VyX2hpZ2g6IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIHVTaGFkb3dWaWV3ZXJfbG93OiBuZXcgVmVjdG9yMygpLFxyXG4gICAgICB1VHJhbnNmb3JtczogW25ldyBNYXRyaXg0KCldLFxyXG4gICAgICB0VHJhbnNmb3JtczogbnVsbCxcclxuICAgICAgb2JqQ291bnQ6IDFcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnM6IE1lc2hTdGFuZGFyZE1hdGVyaWFsUGFyYW1ldGVycywgZGVmaW5lczogc3RyaW5nW10gPSBbXSkge1xyXG4gICAgc3VwZXIocGFyYW1ldGVycylcclxuICAgIHRoaXMuaW5pdChkZWZpbmVzKVxyXG4gIH1cclxuXHJcbiAgLyoqIFdlIG5lZWQgYSB1bmlxdWUga2V5IHBlciBwcm9ncmFtICovXHJcbiAgcHVibGljIGN1c3RvbVByb2dyYW1DYWNoZUtleSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5KHNvdXJjZTogTWF0ZXJpYWwpIHtcclxuICAgIHN1cGVyLmNvcHkoc291cmNlKVxyXG4gICAgdGhpcy5jb3B5RnJvbShzb3VyY2UpXHJcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgdGhpcy5vcmlnaW5hbFJvdWdobmVzcyA9IHNvdXJjZS5vcmlnaW5hbFJvdWdobmVzc1xyXG4gICAgICB0aGlzLmFydGlmaWNpYWxSb3VnaG5lc3MgPSBzb3VyY2UuYXJ0aWZpY2lhbFJvdWdobmVzc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmYXN0Q29weShmcm9tOiBNYXRlcmlhbCwgdG86IE1hdGVyaWFsKSB7XHJcbiAgICBzdXBlci5mYXN0Q29weShmcm9tLCB0bylcclxuICAgIGNvbnN0IHRvU3RhbmRhcmQgPSB0byBhcyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbFxyXG4gICAgY29uc3QgZnJvbVN0YW5kYXJkID0gZnJvbSBhcyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbFxyXG4gICAgdG9TdGFuZGFyZC5jb2xvci5jb3B5KGZyb21TdGFuZGFyZC5jb2xvcilcclxuICAgIHRvU3RhbmRhcmQucm91Z2huZXNzID0gZnJvbVN0YW5kYXJkLnJvdWdobmVzc1xyXG4gICAgdG9TdGFuZGFyZC5tZXRhbG5lc3MgPSBmcm9tU3RhbmRhcmQubWV0YWxuZXNzXHJcbiAgICB0b1N0YW5kYXJkLmVtaXNzaXZlLmNvcHkoZnJvbVN0YW5kYXJkLmVtaXNzaXZlKVxyXG4gICAgdG9TdGFuZGFyZC5lbWlzc2l2ZUludGVuc2l0eSA9IGZyb21TdGFuZGFyZC5lbWlzc2l2ZUludGVuc2l0eVxyXG4gICAgdG9TdGFuZGFyZC5lbnZNYXAgPSBmcm9tU3RhbmRhcmQuZW52TWFwXHJcbiAgICB0b1N0YW5kYXJkLmVudk1hcEludGVuc2l0eSA9IGZyb21TdGFuZGFyZC5lbnZNYXBJbnRlbnNpdHlcclxuICAgIHRvU3RhbmRhcmQub3JpZ2luYWxSb3VnaG5lc3MgPSBmcm9tU3RhbmRhcmQub3JpZ2luYWxSb3VnaG5lc3NcclxuICAgIHRvU3RhbmRhcmQuYXJ0aWZpY2lhbFJvdWdobmVzcyA9IGZyb21TdGFuZGFyZC5hcnRpZmljaWFsUm91Z2huZXNzXHJcblxyXG4gICAgLyoqIExlYXZpbmcgdGV4dHVyZXMgb3V0IGZvciBub3cgKi9cclxuICAgIC8vIHRvU3RhbmRhcmQubWFwID0gZnJvbVN0YW5kYXJkLm1hcFxyXG4gICAgLy8gdG9TdGFuZGFyZC5saWdodE1hcCA9IGZyb21TdGFuZGFyZC5saWdodE1hcFxyXG4gICAgLy8gdG9TdGFuZGFyZC5saWdodE1hcEludGVuc2l0eSA9IGZyb21TdGFuZGFyZC5saWdodE1hcEludGVuc2l0eVxyXG4gICAgLy8gdG9TdGFuZGFyZC5hb01hcCA9IGZyb21TdGFuZGFyZC5hb01hcFxyXG4gICAgLy8gdG9TdGFuZGFyZC5hb01hcEludGVuc2l0eSA9IGZyb21TdGFuZGFyZC5hb01hcEludGVuc2l0eVxyXG4gICAgLy8gdG9TdGFuZGFyZC5lbWlzc2l2ZU1hcCA9IGZyb21TdGFuZGFyZC5lbWlzc2l2ZU1hcFxyXG4gICAgLy8gdG9TdGFuZGFyZC5idW1wTWFwID0gZnJvbVN0YW5kYXJkLmJ1bXBNYXBcclxuICAgIC8vIHRvU3RhbmRhcmQuYnVtcFNjYWxlID0gZnJvbVN0YW5kYXJkLmJ1bXBTY2FsZVxyXG4gICAgLy8gdG9TdGFuZGFyZC5ub3JtYWxNYXAgPSBmcm9tU3RhbmRhcmQubm9ybWFsTWFwXHJcbiAgICAvLyB0b1N0YW5kYXJkLm5vcm1hbE1hcFR5cGUgPSBmcm9tU3RhbmRhcmQubm9ybWFsTWFwVHlwZVxyXG4gICAgLy8gdG9TdGFuZGFyZC5ub3JtYWxTY2FsZSA9IGZyb21TdGFuZGFyZC5ub3JtYWxTY2FsZVxyXG4gICAgLy8gdG9TdGFuZGFyZC5kaXNwbGFjZW1lbnRNYXAgPSBmcm9tU3RhbmRhcmQuZGlzcGxhY2VtZW50TWFwXHJcbiAgICAvLyB0b1N0YW5kYXJkLmRpc3BsYWNlbWVudFNjYWxlID0gZnJvbVN0YW5kYXJkLmRpc3BsYWNlbWVudFNjYWxlXHJcbiAgICAvLyB0b1N0YW5kYXJkLmRpc3BsYWNlbWVudEJpYXMgPSBmcm9tU3RhbmRhcmQuZGlzcGxhY2VtZW50Qmlhc1xyXG4gICAgLy8gdG9TdGFuZGFyZC5yb3VnaG5lc3NNYXAgPSBmcm9tU3RhbmRhcmQucm91Z2huZXNzTWFwXHJcbiAgICAvLyB0b1N0YW5kYXJkLm1ldGFsbmVzc01hcCA9IGZyb21TdGFuZGFyZC5tZXRhbG5lc3NNYXBcclxuICAgIC8vIHRvU3RhbmRhcmQuYWxwaGFNYXAgPSBmcm9tU3RhbmRhcmQuYWxwaGFNYXBcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVBcnRpZmljaWFsUm91Z2huZXNzKGFydGlmaWNpYWxSb3VnbmVzcz86IG51bWJlcikge1xyXG4gICAgaWYgKGFydGlmaWNpYWxSb3VnbmVzcykge1xyXG4gICAgICBpZiAodGhpcy5vcmlnaW5hbFJvdWdobmVzcyA9PT0gdW5kZWZpbmVkKSB0aGlzLm9yaWdpbmFsUm91Z2huZXNzID0gdGhpcy5yb3VnaG5lc3NcclxuICAgICAgdGhpcy5hcnRpZmljaWFsUm91Z2huZXNzID0gYXJ0aWZpY2lhbFJvdWduZXNzXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcmlnaW5hbFJvdWdobmVzcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYXJ0aWZpY2lhbFJvdWdobmVzcyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICByZXR1cm5cclxuXHJcbiAgICBjb25zdCBhcHBseVJvdWdobmVzcyA9XHJcbiAgICAgIGFydGlmaWNpYWxSb3VnbmVzcyAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyBNYXRoLm1pbih0aGlzLm9yaWdpbmFsUm91Z2huZXNzLCB0aGlzLmFydGlmaWNpYWxSb3VnaG5lc3MpXHJcbiAgICAgICAgOiB0aGlzLm9yaWdpbmFsUm91Z2huZXNzXHJcblxyXG4gICAgdGhpcy5yb3VnaG5lc3MgPSBhcHBseVJvdWdobmVzc1xyXG4gICAgdGhpcy5uZWVkc0NvcHkgPSB0cnVlXHJcbiAgfVxyXG5cclxuICAvKiogQ2FsbGVkIGJ5IHRocmVlLmpzIHJlbmRlciBsb29wICovXHJcbiAgcHVibGljIG9uQmVmb3JlUmVuZGVyKFxyXG4gICAgX3RoaXM6IFNwZWNrbGVXZWJHTFJlbmRlcmVyLFxyXG4gICAgX3NjZW5lOiBTY2VuZSxcclxuICAgIF9jYW1lcmE6IENhbWVyYSxcclxuICAgIF9nZW9tZXRyeTogQnVmZmVyR2VvbWV0cnksXHJcbiAgICBvYmplY3Q6IE9iamVjdDNEXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5kZWZpbmVzICYmIHRoaXMuZGVmaW5lc1snVVNFX1JURSddKSB7XHJcbiAgICAgIG9iamVjdC5tb2RlbFZpZXdNYXRyaXguY29weShfdGhpcy5SVEVCdWZmZXJzLnJ0ZVZpZXdNb2RlbE1hdHJpeClcclxuICAgICAgdGhpcy51c2VyRGF0YS51Vmlld2VyX2xvdy52YWx1ZS5jb3B5KF90aGlzLlJURUJ1ZmZlcnMudmlld2VyTG93KVxyXG4gICAgICB0aGlzLnVzZXJEYXRhLnVWaWV3ZXJfaGlnaC52YWx1ZS5jb3B5KF90aGlzLlJURUJ1ZmZlcnMudmlld2VySGlnaClcclxuXHJcbiAgICAgIHRoaXMudXNlckRhdGEucnRlU2hhZG93TWF0cml4LnZhbHVlLmNvcHkoX3RoaXMuUlRFQnVmZmVycy5ydGVTaGFkb3dNYXRyaXgpXHJcbiAgICAgIHRoaXMudXNlckRhdGEudVNoYWRvd1ZpZXdlcl9sb3cudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnNoYWRvd1ZpZXdlckxvdylcclxuICAgICAgdGhpcy51c2VyRGF0YS51U2hhZG93Vmlld2VyX2hpZ2gudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnNoYWRvd1ZpZXdlckhpZ2gpXHJcblxyXG4gICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWxcclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVQb2ludFZlcnQgPSAvKiBnbHNsICovIGBcclxudW5pZm9ybSBmbG9hdCBzaXplO1xyXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xyXG5cclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cclxuXHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICAvLyBUaGUgaGlnaCBjb21wb25lbnQgaXMgc3RvcmVkIGFzIHRoZSBkZWZhdWx0ICdwb3NpdGlvbicgYXR0cmlidXRlIGJ1ZmZlclxyXG4gICAgYXR0cmlidXRlIHZlYzMgcG9zaXRpb25fbG93O1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfaGlnaDtcclxuICAgIHVuaWZvcm0gdmVjMyB1Vmlld2VyX2xvdztcclxuI2VuZGlmXHJcblxyXG5oaWdocCB2ZWM0IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKGluIGhpZ2hwIHZlYzMgcG9zaXRpb25fbG93LCBpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2hpZ2gsIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19sb3csIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19oaWdoKXtcclxuICAgIC8qIFxyXG4gICAgU291cmNlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXJ0dWFsZ2xvYmVib29rL09wZW5HbG9iZS9ibG9iL21hc3Rlci9Tb3VyY2UvRXhhbXBsZXMvQ2hhcHRlcjA1L0ppdHRlci9HUFVSZWxhdGl2ZVRvRXllRFNGVU45MC9TaGFkZXJzL1ZTLmdsc2wgXHJcbiAgICBOb3RlIGhlcmUsIHdlJ3JlIHN0b3JpbmcgdGhlIGhpZ2ggcGFydCBvZiB0aGUgcG9zaXRpb24gZW5jb2RpbmcgaW5zaWRlIHRocmVlJ3MgZGVmYXVsdCAncG9zaXRpb24nIGF0dHJpYnV0ZSBidWZmZXIgc28gd2UgYXZvaWQgcmVkdW5kYW5jeSBcclxuICAgICovXHJcbiAgICBoaWdocCB2ZWMzIHQxID0gcG9zaXRpb25fbG93Lnh5eiAtIHJlbGF0aXZlVG9fbG93Lnh5ejtcclxuICAgIGhpZ2hwIHZlYzMgZSA9IHQxIC0gcG9zaXRpb25fbG93Lnh5ejtcclxuICAgIC8qKiBUaGlzIGlzIHJlZHVuYW50LCBidXQgbmVjZXNzYXJ5IGFzIGEgd29ya2Fyb3VuZCBmb3IgQXBwbGUgcGxhdGZvcm1zICovXHJcbiAgICBoaWdocCBmbG9hdCB4ID0gcG9zaXRpb25faGlnaC54IC0gcmVsYXRpdmVUb19oaWdoLng7XHJcbiAgICBoaWdocCBmbG9hdCB5ID0gcG9zaXRpb25faGlnaC55IC0gcmVsYXRpdmVUb19oaWdoLnk7XHJcbiAgICBoaWdocCBmbG9hdCB6ID0gcG9zaXRpb25faGlnaC56IC0gcmVsYXRpdmVUb19oaWdoLno7XHJcbiAgICBoaWdocCB2ZWMzIHYgPSB2ZWMzKHgsIHksIHopO1xyXG4gICAgLyoqIEVuZCBvZiByZWR1bmRhbnQgcGFydCAqL1xyXG4gICAgaGlnaHAgdmVjMyB0MiA9ICgoLXJlbGF0aXZlVG9fbG93IC0gZSkgKyAocG9zaXRpb25fbG93Lnh5eiAtICh0MSAtIGUpKSkgKyB2O1xyXG4gICAgaGlnaHAgdmVjMyBoaWdoRGlmZmVyZW5jZSA9IHQxICsgdDI7XHJcbiAgICBoaWdocCB2ZWMzIGxvd0RpZmZlcmVuY2UgPSB0MiAtIChoaWdoRGlmZmVyZW5jZS54eXogLSB0MS54eXopO1xyXG4gICAgXHJcbiAgICBoaWdocCB2ZWMzIHBvc2l0aW9uID0gaGlnaERpZmZlcmVuY2UueHl6ICsgbG93RGlmZmVyZW5jZS54eXo7XHJcbiAgICByZXR1cm4gdmVjNChwb3NpdGlvbiwgMS4pO1xyXG59XHJcblxyXG4jaWZkZWYgVVNFX0dSQURJRU5UX1JBTVBcclxuICAgIGF0dHJpYnV0ZSBmbG9hdCBncmFkaWVudEluZGV4O1xyXG4gICAgdmFyeWluZyBmbG9hdCB2R3JhZGllbnRJbmRleDtcclxuI2VuZGlmXHJcblxyXG52b2lkIG1haW4oKSB7XHJcblxyXG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPG1vcnBoY29sb3JfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cclxuXHQvLyAjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+IENPTU1FTlRFRCBDSFVOS1xyXG5cdCNpZmRlZiBVU0VfUlRFXHJcbiAgICAgICAgdmVjNCBtdlBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24ocG9zaXRpb25fbG93Lnh5eiwgcG9zaXRpb24ueHl6LCB1Vmlld2VyX2xvdywgdVZpZXdlcl9oaWdoKTtcclxuICAgICNlbHNlXHJcbiAgICAgICAgdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xyXG4gICAgI2VuZGlmXHJcbiAgICBcclxuICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG5cclxuICAgICAgICBtdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uO1xyXG5cclxuICAgICNlbmRpZlxyXG4gICAgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XHJcblxyXG4gICAgI2lmZGVmIFVTRV9HUkFESUVOVF9SQU1QXHJcbiAgICAgICAgdkdyYWRpZW50SW5kZXggPSBncmFkaWVudEluZGV4O1xyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcclxuXHJcblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcclxuXHJcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cclxuXHJcblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XHJcblxyXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xyXG5cclxuXHQjZW5kaWZcclxuXHJcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxyXG5cclxufVxyXG5gXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlUG9pbnRGcmFnID0gLyogZ2xzbCAqLyBgXHJcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xyXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XHJcblxyXG4jaW5jbHVkZSA8Y29tbW9uPlxyXG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cclxuXHJcbiNpZmRlZiBVU0VfR1JBRElFTlRfUkFNUFxyXG5cdHZhcnlpbmcgZmxvYXQgdkdyYWRpZW50SW5kZXg7XHJcblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRSYW1wO1xyXG4jZW5kaWZcclxuXHJcbnZvaWQgbWFpbigpIHtcclxuXHJcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cclxuXHJcblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XHJcblxyXG5cdCNpZmRlZiBVU0VfR1JBRElFTlRfUkFNUFxyXG5cdFx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCB0ZXh0dXJlMkQoZ3JhZGllbnRSYW1wLCB2ZWMyKHZHcmFkaWVudEluZGV4LCAwLikpLnJnYiwgb3BhY2l0eSApO1xyXG5cdCNlbHNlXHJcblx0XHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcclxuXHQjZW5kaWZcclxuXHJcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxtYXBfcGFydGljbGVfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XHJcblxyXG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xyXG5cclxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XHJcblxyXG59XHJcbmBcclxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXHJcbmltcG9ydCB7IHNwZWNrbGVQb2ludFZlcnQgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1wb2ludC12ZXJ0LmpzJ1xyXG5pbXBvcnQgeyBzcGVja2xlUG9pbnRGcmFnIH0gZnJvbSAnLi9zaGFkZXJzL3NwZWNrbGUtcG9pbnQtZnJhZy5qcydcclxuaW1wb3J0IHtcclxuICB0eXBlIElVbmlmb3JtLFxyXG4gIE1hdGVyaWFsLFxyXG4gIFBvaW50c01hdGVyaWFsLFxyXG4gIFNoYWRlckxpYixcclxuICBWZWN0b3IzLFxyXG4gIHR5cGUgUG9pbnRzTWF0ZXJpYWxQYXJhbWV0ZXJzLFxyXG4gIFNjZW5lLFxyXG4gIENhbWVyYSxcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBPYmplY3QzRFxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBFeHRlbmRlZFBvaW50c01hdGVyaWFsLCB0eXBlIFVuaWZvcm1zIH0gZnJvbSAnLi9TcGVja2xlTWF0ZXJpYWwuanMnXHJcbmltcG9ydCB0eXBlIHsgU3BlY2tsZVdlYkdMUmVuZGVyZXIgfSBmcm9tICcuLi9vYmplY3RzL1NwZWNrbGVXZWJHTFJlbmRlcmVyLmpzJ1xyXG5cclxuY2xhc3MgU3BlY2tsZVBvaW50TWF0ZXJpYWwgZXh0ZW5kcyBFeHRlbmRlZFBvaW50c01hdGVyaWFsIHtcclxuICBwcm90ZWN0ZWQgZ2V0IHZlcnRleFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlUG9pbnRWZXJ0XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IGZyYWdtZW50UHJvZ3JhbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHNwZWNrbGVQb2ludEZyYWdcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgYmFzZVVuaWZvcm1zKCk6IHsgW3VuaWZvcm06IHN0cmluZ106IElVbmlmb3JtIH0ge1xyXG4gICAgcmV0dXJuIFNoYWRlckxpYi5wb2ludHMudW5pZm9ybXNcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgdW5pZm9ybXNEZWYoKTogVW5pZm9ybXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdVZpZXdlcl9oaWdoOiBuZXcgVmVjdG9yMygpLFxyXG4gICAgICB1Vmlld2VyX2xvdzogbmV3IFZlY3RvcjMoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocGFyYW1ldGVyczogUG9pbnRzTWF0ZXJpYWxQYXJhbWV0ZXJzLCBkZWZpbmVzOiBzdHJpbmdbXSA9IFtdKSB7XHJcbiAgICBzdXBlcihwYXJhbWV0ZXJzKVxyXG4gICAgdGhpcy5pbml0KGRlZmluZXMpXHJcbiAgfVxyXG5cclxuICAvKiogV2UgbmVlZCBhIHVuaXF1ZSBrZXkgcGVyIHByb2dyYW0gKi9cclxuICBwdWJsaWMgY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvcHkoc291cmNlOiBNYXRlcmlhbCkge1xyXG4gICAgc3VwZXIuY29weShzb3VyY2UpXHJcbiAgICB0aGlzLmNvcHlGcm9tKHNvdXJjZSlcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmFzdENvcHkoZnJvbTogTWF0ZXJpYWwsIHRvOiBNYXRlcmlhbCkge1xyXG4gICAgc3VwZXIuZmFzdENvcHkoZnJvbSwgdG8pXHJcbiAgICBjb25zdCB0b1N0YW5kYXJkID0gdG8gYXMgUG9pbnRzTWF0ZXJpYWxcclxuICAgIGNvbnN0IGZyb21TdGFuZGFyZCA9IGZyb20gYXMgUG9pbnRzTWF0ZXJpYWxcclxuICAgIHRvU3RhbmRhcmQuY29sb3IuY29weShmcm9tU3RhbmRhcmQuY29sb3IpXHJcbiAgICB0b1N0YW5kYXJkLnNpemUgPSBmcm9tU3RhbmRhcmQuc2l6ZVxyXG4gICAgdG9TdGFuZGFyZC5zaXplQXR0ZW51YXRpb24gPSBmcm9tU3RhbmRhcmQuc2l6ZUF0dGVudWF0aW9uXHJcbiAgfVxyXG5cclxuICBvbkJlZm9yZVJlbmRlcihcclxuICAgIF90aGlzOiBTcGVja2xlV2ViR0xSZW5kZXJlcixcclxuICAgIF9zY2VuZTogU2NlbmUsXHJcbiAgICBfY2FtZXJhOiBDYW1lcmEsXHJcbiAgICBfZ2VvbWV0cnk6IEJ1ZmZlckdlb21ldHJ5LFxyXG4gICAgb2JqZWN0OiBPYmplY3QzRFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuZGVmaW5lcyAmJiB0aGlzLmRlZmluZXNbJ1VTRV9SVEUnXSkge1xyXG4gICAgICBvYmplY3QubW9kZWxWaWV3TWF0cml4LmNvcHkoX3RoaXMuUlRFQnVmZmVycy5ydGVWaWV3TW9kZWxNYXRyaXgpXHJcbiAgICAgIHRoaXMudXNlckRhdGEudVZpZXdlcl9sb3cudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnZpZXdlckxvdylcclxuICAgICAgdGhpcy51c2VyRGF0YS51Vmlld2VyX2hpZ2gudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnZpZXdlckhpZ2gpXHJcblxyXG4gICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlY2tsZVBvaW50TWF0ZXJpYWxcclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVTdGFuZGFyZENvbG9yZWRWZXJ0ID0gLyogZ2xzbCAqLyBgXHJcbiNkZWZpbmUgU1RBTkRBUkRcclxuI2lmZGVmIFVTRV9SVEVcclxuICAgIC8vIFRoZSBoaWdoIGNvbXBvbmVudCBpcyBzdG9yZWQgYXMgdGhlIGRlZmF1bHQgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgYnVmZmVyXHJcbiAgICBhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbl9sb3c7XHJcbiAgICB1bmlmb3JtIHZlYzMgdVZpZXdlcl9oaWdoO1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfbG93O1xyXG4gICAgdW5pZm9ybSBtYXQ0IHJ0ZVNoYWRvd01hdHJpeDtcclxuICAgIHVuaWZvcm0gdmVjMyB1U2hhZG93Vmlld2VyX2hpZ2g7XHJcbiAgICB1bmlmb3JtIHZlYzMgdVNoYWRvd1ZpZXdlcl9sb3c7XHJcbiNlbmRpZlxyXG5cclxuI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICBhdHRyaWJ1dGUgZmxvYXQgb2JqSW5kZXg7XHJcblxyXG4gICAgI2lmIFRSQU5TRk9STV9TVE9SQUdFID09IDBcclxuICAgICAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgICAgICNkZWZpbmUgVFJBTlNGT1JNX1NUUklERSA0XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgI2RlZmluZSBUUkFOU0ZPUk1fU1RSSURFIDQuXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdFRyYW5zZm9ybXM7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBvYmpDb3VudDtcclxuICAgICNlbGlmIFRSQU5TRk9STV9TVE9SQUdFID09IDFcclxuICAgICAgICB1bmlmb3JtIG1hdDQgdVRyYW5zZm9ybXNbT0JKX0NPVU5UXTtcclxuICAgICNlbmRpZlxyXG4jZW5kaWZcclxuXHJcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xyXG5cclxuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cclxuXHJcbiAgICB2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XHJcblxyXG4jZW5kaWZcclxuXHJcbiNpbmNsdWRlIDxjb21tb24+XHJcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxyXG5cclxuI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICB2b2lkIG9iamVjdFRyYW5zZm9ybShvdXQgdmVjNCBxdWF0ZXJuaW9uLCBvdXQgdmVjNCBwaXZvdExvdywgb3V0IHZlYzQgcGl2b3RIaWdoLCBvdXQgdmVjNCB0cmFuc2xhdGlvbiwgb3V0IHZlYzQgc2NhbGUpe1xyXG4gICAgICAgICNpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAwXHJcbiAgICAgICAgICAgICNpZiBfX1ZFUlNJT05fXyA9PSAzMDBcclxuICAgICAgICAgICAgICAgIGl2ZWMyIHV2ID0gaXZlYzIoaW50KG9iakluZGV4KSAqIFRSQU5TRk9STV9TVFJJREUsIDApOyBcclxuICAgICAgICAgICAgICAgIHZlYzQgdjAgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYsIDAgKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjEgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigxLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYyID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMiwgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MyA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDMsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHF1YXRlcm5pb24gPSB2MDtcclxuICAgICAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh2MS54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodjIueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodjMueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBzY2FsZSA9IHZlYzQodjEudywgdjIudywgdjMudywgMS4pO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IG9iakNvdW50ICogVFJBTlNGT1JNX1NUUklERTtcclxuICAgICAgICAgICAgICAgIHZlYzIgY1V2ID0gdmVjMigwLjUvc2l6ZSwgMC41KTtcclxuICAgICAgICAgICAgICAgIHZlYzIgZFV2ID0gdmVjMigxLi9zaXplLCAwLik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHZlYzIgdXYgPSB2ZWMyKChvYmpJbmRleCAqIFRSQU5TRk9STV9TVFJJREUpL3NpemUgKyBjVXYueCwgY1V2LnkpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MCA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjEgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIGRVdik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYyID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyAyLiAqIGRVdik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYzID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyAzLiAqIGRVdik7XHJcbiAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uID0gdjA7XHJcbiAgICAgICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodjEueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHYyLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHYzLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHYxLncsIHYyLncsIHYzLncsIDEuKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VsaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMVxyXG4gICAgICAgICAgICBtYXQ0IHRNYXRyaXggPSB1VHJhbnNmb3Jtc1tpbnQob2JqSW5kZXgpXTtcclxuICAgICAgICAgICAgcXVhdGVybmlvbiA9IHRNYXRyaXhbMF07XHJcbiAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh0TWF0cml4WzFdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHRNYXRyaXhbMl0ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh0TWF0cml4WzNdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICBzY2FsZSA9IHZlYzQodE1hdHJpeFsxXVszXSwgdE1hdHJpeFsyXVszXSwgdE1hdHJpeFszXVszXSwgMS4pO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgfVxyXG5cclxuICAgIHZlYzMgcm90YXRlX3ZlcnRleF9wb3NpdGlvbih2ZWMzIHBvc2l0aW9uLCB2ZWM0IHF1YXQpXHJcbiAgICB7IFxyXG4gICAgICAgIHJldHVybiBwb3NpdGlvbiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24pICsgcXVhdC53ICogcG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbm90aGVyIHdvcmthcm91bmQgZm9yIEFwcGxlJ3Mgc3R1cGlkIGNvbXBpbGVyICovXHJcbiAgICB2ZWM0IHNhZmVNdWwodmVjNCBhLCB2ZWM0IGIpIHtcclxuICAgICAgICAvLyBQcmV2ZW50cyBjb25zdGFudCBmb2xkaW5nIGFuZCBvcHRpbWl6YXRpb25cclxuICAgICAgICByZXR1cm4gKGEgKyB2ZWM0KDAuMCkpICogKGIgKyB2ZWM0KDEuMCkpIC0gYSAqIHZlYzQoMS4wKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWdocCB2ZWMzIHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKGhpZ2hwIHZlYzQgdjAsIGhpZ2hwIHZlYzQgdjEsIGhpZ2hwIHZlYzQgc2NhbGUsIGhpZ2hwIHZlYzQgcXVhdClcclxuICAgIHtcclxuICAgICAgICAvKiogISEhIFdPUktBUk9VTkQgRk9SIEludGVsIElyaXNYZSBDQVJEUyAhISEgKi9cclxuICAgICAgICAvKiogVGhlIGNvZGUgYmVsb3cgd2lsbCBub3QgcHJvZHVjZSBjb3JyZWN0IHJlc3VsdHMgaW4gaW50ZWwgSXJpc1hFIGludGVncmF0ZWQgR1BVcy4gXHJcbiAgICAgICAgICogIFRoZSBnZW9tZXRyeSB3aWxsIHR1cm4gbWFuZ2xlZCwgYWxiZWl0IHN0YWJsZVxyXG4gICAgICAgICAqICBJIGNhbid0IGtub3cgZm9yIHN1cmUgd2hhdCBpcyBnb2luZyBvbiwgYnV0IHJvdGF0aW5nIHRoZSBkaWZmZXJlbmNlIHNlZW1zIHRvIFxyXG4gICAgICAgICAqICBmb3JjZSB0aGUgcmVzdWx0IGludG8gYSBsb3dlciBwcmVjaXNpb24/XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gaGlnaHAgdmVjNCBwb3NpdGlvbiA9IHYwIC0gdjE7XHJcbiAgICAgICAgLy8gcmV0dXJuIHBvc2l0aW9uLnh5eiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24ueHl6KSArIHF1YXQudyAqIHBvc2l0aW9uLnh5eik7XHJcblxyXG4gICAgICAgIC8qKiBTdWJ0cmFjdGluZyB0aGUgcm90YXRlZCB2ZWN0b3JzIHdvcmtzLiAqL1xyXG4gICAgICAgIHJldHVybiByb3RhdGVfdmVydGV4X3Bvc2l0aW9uKHNhZmVNdWwodjAsIHNjYWxlKS54eXosIHF1YXQpICAtIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24oc2FmZU11bCh2MSwgc2NhbGUpLnh5eiwgcXVhdCkgO1xyXG5cclxuICAgICAgICAvKiogQW4gYWx0ZXJuYXRlIHdvcmthcm91bmQgaXNcclxuICAgICAgICAgKiBoaWdocCB2ZWMzIHBvc2l0aW9uID0gKHYwLnh5eiAqICgxLiArIDFlLTcpKSAtICh2MS54eXogKiAoMS4gKyAxZS03KSk7XHJcbiAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbikgKyBxdWF0LncgKiBwb3NpdGlvbik7XHJcblxyXG4gICAgICAgICAgIEhvd2V2ZXIgSSdtIG5vdCBzdWNoIGEgZmFuIG9mIHRoZSAoMS4gKyAxZS03KSBwYXJ0XHJcbiAgICAgICAgICovXHJcbiAgICB9XHJcblxyXG4jZW5kaWZcclxuXHJcbmF0dHJpYnV0ZSBmbG9hdCBncmFkaWVudEluZGV4O1xyXG52YXJ5aW5nIGZsb2F0IHZHcmFkaWVudEluZGV4O1xyXG5cclxuI2lmZGVmIFVTRV9SVEVcclxuICAgIGhpZ2hwIHZlYzQgY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oaW4gaGlnaHAgdmVjMyBwb3NpdGlvbl9sb3csIGluIGhpZ2hwIHZlYzMgcG9zaXRpb25faGlnaCwgaW4gaGlnaHAgdmVjMyByZWxhdGl2ZVRvX2xvdywgaW4gaGlnaHAgdmVjMyByZWxhdGl2ZVRvX2hpZ2gpe1xyXG4gICAgICAgIC8qIFxyXG4gICAgICAgIFNvdXJjZSBodHRwczovL2dpdGh1Yi5jb20vdmlydHVhbGdsb2JlYm9vay9PcGVuR2xvYmUvYmxvYi9tYXN0ZXIvU291cmNlL0V4YW1wbGVzL0NoYXB0ZXIwNS9KaXR0ZXIvR1BVUmVsYXRpdmVUb0V5ZURTRlVOOTAvU2hhZGVycy9WUy5nbHNsIFxyXG4gICAgICAgIE5vdGUgaGVyZSwgd2UncmUgc3RvcmluZyB0aGUgaGlnaCBwYXJ0IG9mIHRoZSBwb3NpdGlvbiBlbmNvZGluZyBpbnNpZGUgdGhyZWUncyBkZWZhdWx0ICdwb3NpdGlvbicgYXR0cmlidXRlIGJ1ZmZlciBzbyB3ZSBhdm9pZCByZWR1bmRhbmN5IFxyXG4gICAgICAgICovXHJcbiAgICAgICAgaGlnaHAgdmVjMyB0MSA9IHBvc2l0aW9uX2xvdy54eXogLSByZWxhdGl2ZVRvX2xvdy54eXo7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBlID0gdDEgLSBwb3NpdGlvbl9sb3cueHl6O1xyXG4gICAgICAgIC8qKiBUaGlzIGlzIHJlZHVuYW50LCBidXQgbmVjZXNzYXJ5IGFzIGEgd29ya2Fyb3VuZCBmb3IgQXBwbGUgcGxhdGZvcm1zICovXHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeCA9IHBvc2l0aW9uX2hpZ2gueCAtIHJlbGF0aXZlVG9faGlnaC54O1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHkgPSBwb3NpdGlvbl9oaWdoLnkgLSByZWxhdGl2ZVRvX2hpZ2gueTtcclxuICAgICAgICBoaWdocCBmbG9hdCB6ID0gcG9zaXRpb25faGlnaC56IC0gcmVsYXRpdmVUb19oaWdoLno7XHJcbiAgICAgICAgaGlnaHAgdmVjMyB2ID0gdmVjMyh4LCB5LCB6KTtcclxuICAgICAgICAvKiogRW5kIG9mIHJlZHVuZGFudCBwYXJ0ICovXHJcbiAgICAgICAgaGlnaHAgdmVjMyB0MiA9ICgoLXJlbGF0aXZlVG9fbG93IC0gZSkgKyAocG9zaXRpb25fbG93Lnh5eiAtICh0MSAtIGUpKSkgKyB2O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgaGlnaERpZmZlcmVuY2UgPSB0MSArIHQyO1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgbG93RGlmZmVyZW5jZSA9IHQyIC0gKGhpZ2hEaWZmZXJlbmNlLnh5eiAtIHQxLnh5eik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaGlnaHAgdmVjMyBwb3NpdGlvbiA9IGhpZ2hEaWZmZXJlbmNlLnh5eiArIGxvd0RpZmZlcmVuY2UueHl6O1xyXG4gICAgICAgIHJldHVybiB2ZWM0KHBvc2l0aW9uLCAxLik7XHJcbiAgICB9XHJcbiNlbmRpZlxyXG5cclxudm9pZCBtYWluKCkge1xyXG5cclxuICAgICNpbmNsdWRlIDx1dl92ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8dXYyX3ZlcnRleD5cclxuICAgICNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8bW9ycGhjb2xvcl92ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxyXG4gICAgI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cclxuICAgICNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XHJcbiAgICAvLyAjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+IC8vIENPTU1FTlRFRCBDSFVOS1xyXG4gICAgdmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDtcclxuICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG5cclxuICAgICAgICAvLyB0aGlzIGlzIGluIGxpZXUgb2YgYSBwZXItaW5zdGFuY2Ugbm9ybWFsLW1hdHJpeFxyXG4gICAgICAgIC8vIHNoZWFyIHRyYW5zZm9ybXMgaW4gdGhlIGluc3RhbmNlIG1hdHJpeCBhcmUgbm90IHN1cHBvcnRlZFxyXG4gICAgICAgIG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XHJcbiAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8qIElmIHdlIGhhdmUgbmVnYXRpdmUgc2NhbGluZywgd2UgZmxpcCB0aGUgbm9ybWFsICovXHJcbiAgICAgICAgZmxvYXQgc2lnbkRldCA9IHNpZ24oZG90KG1bMF0sIGNyb3NzKG1bMV0sIG1bMl0pKSk7XHJcbiAgICAgICAgLy8gT3B0aW9uYWwgZmFsbGJhY2s6IHRyZWF0IDAgYXMgKzFcclxuICAgICAgICBzaWduRGV0ID0gc2lnbkRldCArICgxLjAgLSBhYnMoc2lnbkRldCkpO1xyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsICo9IHNpZ25EZXQ7XHJcbiAgICAjZW5kaWZcclxuICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAjaWZkZWYgRkxJUF9TSURFRFxyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICNlbmRpZlxyXG4gICAgI2lmZGVmIFVTRV9UQU5HRU5UXHJcbiAgICAgICAgdmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xyXG4gICAgICAgICNpZmRlZiBGTElQX1NJREVEXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgI2VuZGlmXHJcbiAgICAjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cclxuXHJcbiAgICAjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxyXG4gICAgI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cclxuICAgICNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cclxuICAgIC8vI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PiAvLyBFRElURUQgQ0hVTktcclxuICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgIHZlYzQgdFF1YXRlcm5pb24sIHRQaXZvdExvdywgdFBpdm90SGlnaCwgdFRyYW5zbGF0aW9uLCB0U2NhbGU7XHJcbiAgICAgICAgb2JqZWN0VHJhbnNmb3JtKHRRdWF0ZXJuaW9uLCB0UGl2b3RMb3csIHRQaXZvdEhpZ2gsIHRUcmFuc2xhdGlvbiwgdFNjYWxlKTtcclxuICAgICNlbmRpZlxyXG4gICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICB2ZWM0IHBvc2l0aW9uX2xvd1QgPSB2ZWM0KHBvc2l0aW9uX2xvdywgMS4pO1xyXG4gICAgICAgIHZlYzQgcG9zaXRpb25faGlnaFQgPSB2ZWM0KHBvc2l0aW9uLCAxLik7XHJcbiAgICAgICAgY29uc3QgdmVjMyBaRVJPMyA9IHZlYzMoMC4sIDAuLCAwLik7XHJcblxyXG4gICAgICAgIGhpZ2hwIHZlYzQgcnRlTG9jYWxQb3NpdGlvbiA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHBvc2l0aW9uX2xvd1QueHl6LCBwb3NpdGlvbl9oaWdoVC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICBoaWdocCB2ZWM0IHJ0ZVBpdm90ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24odFBpdm90TG93Lnh5eiwgdFBpdm90SGlnaC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICBydGVMb2NhbFBvc2l0aW9uLnh5eiA9IHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKHJ0ZUxvY2FsUG9zaXRpb24sIHJ0ZVBpdm90LCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHJ0ZVBpdm90Lnh5eiArIHRUcmFuc2xhdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcbiAgICAgICAgICAgIHZlYzQgaW5zdGFuY2VQaXZvdCA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKFpFUk8zLCBaRVJPMywgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgIHJ0ZUxvY2FsUG9zaXRpb24ueHl6ID0gKG1hdDMoaW5zdGFuY2VNYXRyaXgpICogKHJ0ZUxvY2FsUG9zaXRpb24gLSBpbnN0YW5jZVBpdm90KS54eXopICsgaW5zdGFuY2VQaXZvdC54eXogKyBpbnN0YW5jZU1hdHJpeFszXS54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHJ0ZUxvY2FsUG9zaXRpb247XHJcbiAgICAjZWxzZVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcclxuICAgICAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICAgICAgbXZQb3NpdGlvbi54eXogPSByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShtdlBvc2l0aW9uLCB0UGl2b3RIaWdoLCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHRQaXZvdEhpZ2gueHl6ICsgdFRyYW5zbGF0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuICAgICAgICAgICAgbXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG5cclxuXHJcbiAgICBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcclxuXHJcbiAgICB2R3JhZGllbnRJbmRleCA9IGdyYWRpZW50SW5kZXg7XHJcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xyXG5cclxuICAgICNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cclxuXHJcbiAgICB2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcclxuXHJcbiAgICAjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxyXG4gICAgLy8gI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+Ly8gRURJVEVEIENIVU5LXHJcbiAgICAjaWZkZWYgVVNFX1NIQURPV01BUFxyXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxyXG5cdFx0Ly8gT2Zmc2V0dGluZyB0aGUgcG9zaXRpb24gdXNlZCBmb3IgcXVlcnlpbmcgb2NjbHVzaW9uIGFsb25nIHRoZSB3b3JsZCBub3JtYWwgY2FuIGJlIHVzZWQgdG8gcmVkdWNlIHNoYWRvdyBhY25lLlxyXG5cdFx0dmVjMyBzaGFkb3dXb3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XHJcblx0XHR2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247XHJcblx0I2VuZGlmXHJcblx0I2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDBcclxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XHJcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xyXG4gICAgICAgIGhpZ2hwIHZlYzQgc2hhZG93UG9zaXRpb24gPSB2ZWM0KHRyYW5zZm9ybWVkLCAxLjApO1xyXG4gICAgICAgIG1hdDQgc2hhZG93TWF0cml4ID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXTtcclxuXHJcbiAgICAgICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICAgICAgc2hhZG93UG9zaXRpb24gPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihwb3NpdGlvbl9sb3cueHl6LCBwb3NpdGlvbi54eXosIHVTaGFkb3dWaWV3ZXJfbG93LCB1U2hhZG93Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRyaXggPSBydGVTaGFkb3dNYXRyaXg7XHJcbiAgICAgICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICAgICAgaGlnaHAgdmVjNCBydGVQaXZvdFNoYWRvdyA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHRQaXZvdExvdy54eXosIHRQaXZvdEhpZ2gueHl6LCB1U2hhZG93Vmlld2VyX2xvdywgdVNoYWRvd1ZpZXdlcl9oaWdoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvc2l0aW9uLnh5eiA9IHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKHNoYWRvd1Bvc2l0aW9uLCBydGVQaXZvdFNoYWRvdywgdFNjYWxlLCB0UXVhdGVybmlvbikgKyBydGVQaXZvdFNoYWRvdy54eXogKyB0VHJhbnNsYXRpb24ueHl6O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcbiAgICAgICAgICAgICAgICB2ZWM0IHJ0ZVBpdm90U2hhZG93ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oWkVSTzMsIFpFUk8zLCB1U2hhZG93Vmlld2VyX2xvdywgdVNoYWRvd1ZpZXdlcl9oaWdoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvc2l0aW9uLnh5eiA9IChtYXQzKGluc3RhbmNlTWF0cml4KSAqIChzaGFkb3dQb3NpdGlvbiAtIHJ0ZVBpdm90U2hhZG93KS54eXopICsgcnRlUGl2b3RTaGFkb3cueHl6ICsgaW5zdGFuY2VNYXRyaXhbM10ueHl6O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvc2l0aW9uLnh5eiA9IHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24oc2hhZG93UG9zaXRpb24ueHl6ICogdFNjYWxlLnh5eiwgdFF1YXRlcm5pb24pICsgdFRyYW5zbGF0aW9uLnh5ejtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG4gICAgICAgICAgICAgICAgc2hhZG93UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHNoYWRvd1Bvc2l0aW9uO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICBzaGFkb3dXb3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiBzaGFkb3dQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XHJcbiAgICAgICAgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IHNoYWRvd01hdHJpeCAqIHNoYWRvd1dvcmxkUG9zaXRpb247XHJcbiAgICBcclxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxyXG5cdCNlbmRpZlxyXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxyXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcclxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xyXG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XHJcblx0XHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uO1xyXG5cdH1cclxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxyXG5cdCNlbmRpZlxyXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcclxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XHJcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XHJcblx0XHRzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XHJcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XHJcblx0fVxyXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXHJcblx0I2VuZGlmXHJcblx0LypcclxuXHQjaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXHJcblx0XHQvLyBUT0RPIChhYmVsbmF0aW9uKTogdXBkYXRlIHZBcmVhU2hhZG93Q29vcmQgd2l0aCBhcmVhIGxpZ2h0IGluZm9cclxuXHQjZW5kaWZcclxuXHQqL1xyXG4gICAgI2VuZGlmXHJcbiAgICAjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cclxuXHJcbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXHJcblxyXG4gICAgdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcclxuXHJcbiNlbmRpZlxyXG59XHJcbmBcclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVTdGFuZGFyZENvbG9yZWRGcmFnID0gLyogZ2xzbCAqLyBgXHJcbiNkZWZpbmUgU1RBTkRBUkRcclxuXHJcbiNpZmRlZiBQSFlTSUNBTFxyXG4gICAgI2RlZmluZSBJT1JcclxuICAgICNkZWZpbmUgU1BFQ1VMQVJcclxuI2VuZGlmXHJcblxyXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcclxudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xyXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcclxudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XHJcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcclxuXHJcbiNpZmRlZiBJT1JcclxuICAgIHVuaWZvcm0gZmxvYXQgaW9yO1xyXG4jZW5kaWZcclxuXHJcbiNpZmRlZiBTUEVDVUxBUlxyXG4gICAgdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcclxuICAgIHVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yO1xyXG5cclxuICAgICNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcclxuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxyXG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XHJcbiAgICAjZW5kaWZcclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxyXG4gICAgdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7XHJcbiAgICB1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVVNFX1NIRUVOXHJcbiAgICB1bmlmb3JtIHZlYzMgc2hlZW5Db2xvcjtcclxuICAgIHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XHJcblxyXG4gICAgI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQXHJcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Db2xvck1hcDtcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVBcclxuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDtcclxuICAgICNlbmRpZlxyXG4jZW5kaWZcclxuXHJcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xyXG5cclxudmFyeWluZyBmbG9hdCB2R3JhZGllbnRJbmRleDtcclxudW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRSYW1wO1xyXG5cclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2luY2x1ZGUgPHBhY2tpbmc+XHJcbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGJzZGZzPlxyXG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8ZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxyXG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cclxuXHJcbnZvaWQgbWFpbigpIHtcclxuXHJcbiAgICAjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxyXG5cclxuICAgIHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggdGV4dHVyZTJEKGdyYWRpZW50UmFtcCwgdmVjMih2R3JhZGllbnRJbmRleCwgMC4pKS5yZ2IsIG9wYWNpdHkgKTtcclxuICAgIFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XHJcbiAgICB2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xyXG5cclxuICAgICNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxyXG4gICAgI2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxyXG4gICAgI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxyXG4gICAgI2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+XHJcbiAgICAjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzPlxyXG4gICAgI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxyXG5cclxuICAgIC8vIGFjY3VtdWxhdGlvblxyXG4gICAgI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XHJcbiAgICAjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XHJcbiAgICAjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cclxuXHJcbiAgICAvLyBtb2R1bGF0aW9uXHJcbiAgICAjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XHJcblxyXG4gICAgdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xyXG4gICAgdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xyXG5cclxuICAgICNpbmNsdWRlIDx0cmFuc21pc3Npb25fZnJhZ21lbnQ+XHJcblxyXG4gICAgdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdG90YWxEaWZmdXNlICsgdG90YWxTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcclxuXHJcbiAgICAjaWZkZWYgVVNFX1NIRUVOXHJcblxyXG4gICAgICAgIC8vIFNoZWVuIGVuZXJneSBjb21wZW5zYXRpb24gYXBwcm94aW1hdGlvbiBjYWxjdWxhdGlvbiBjYW4gYmUgZm91bmQgYXQgdGhlIGVuZCBvZlxyXG4gICAgICAgIC8vIGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9maWxlL2QvMVQwRDFWU3lSNEFsbHFJSlRRQXJhRUl6amxiNWg0RktIL3ZpZXc/dXNwPXNoYXJpbmdcclxuICAgICAgICBmbG9hdCBzaGVlbkVuZXJneUNvbXAgPSAxLjAgLSAwLjE1NyAqIG1heDMoIG1hdGVyaWFsLnNoZWVuQ29sb3IgKTtcclxuXHJcbiAgICAgICAgb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xyXG5cclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZmRlZiBVU0VfQ0xFQVJDT0FUXHJcblxyXG4gICAgICAgIGZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xyXG5cclxuICAgICAgICB2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xyXG5cclxuICAgICAgICBvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqICggMS4wIC0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogRmNjICkgKyBjbGVhcmNvYXRTcGVjdWxhciAqIG1hdGVyaWFsLmNsZWFyY29hdDtcclxuXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxyXG4gICAgI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxyXG4gICAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XHJcbiAgICAjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cclxuICAgICNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XHJcbn1cclxuYFxyXG4iLCJpbXBvcnQgeyBzcGVja2xlU3RhbmRhcmRDb2xvcmVkVmVydCB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLXN0YW5kYXJkLWNvbG9yZWQtdmVydC5qcydcclxuaW1wb3J0IHsgc3BlY2tsZVN0YW5kYXJkQ29sb3JlZEZyYWcgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1zdGFuZGFyZC1jb2xvcmVkLWZyYWcuanMnXHJcbmltcG9ydCB7IFRleHR1cmUsIE5lYXJlc3RGaWx0ZXIsIHR5cGUgTWVzaFN0YW5kYXJkTWF0ZXJpYWxQYXJhbWV0ZXJzIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbCBmcm9tICcuL1NwZWNrbGVTdGFuZGFyZE1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIFVuaWZvcm1zIH0gZnJvbSAnLi9TcGVja2xlTWF0ZXJpYWwuanMnXHJcblxyXG5jbGFzcyBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwgZXh0ZW5kcyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbCB7XHJcbiAgcHJvdGVjdGVkIGdldCB2ZXJ0ZXhQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZVN0YW5kYXJkQ29sb3JlZFZlcnRcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgZnJhZ21lbnRQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZVN0YW5kYXJkQ29sb3JlZEZyYWdcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgdW5pZm9ybXNEZWYoKTogVW5pZm9ybXMge1xyXG4gICAgcmV0dXJuIHsgLi4uc3VwZXIudW5pZm9ybXNEZWYsIGdyYWRpZW50UmFtcDogbnVsbCB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzOiBNZXNoU3RhbmRhcmRNYXRlcmlhbFBhcmFtZXRlcnMsIGRlZmluZXMgPSBbXSkge1xyXG4gICAgc3VwZXIocGFyYW1ldGVycywgZGVmaW5lcylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRHcmFkaWVudFRleHR1cmUodGV4dHVyZTogVGV4dHVyZSkge1xyXG4gICAgdGhpcy51c2VyRGF0YS5ncmFkaWVudFJhbXAudmFsdWUgPSB0ZXh0dXJlXHJcbiAgICB0aGlzLnVzZXJEYXRhLmdyYWRpZW50UmFtcC52YWx1ZS5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZVxyXG4gICAgdGhpcy51c2VyRGF0YS5ncmFkaWVudFJhbXAudmFsdWUubWluRmlsdGVyID0gTmVhcmVzdEZpbHRlclxyXG4gICAgdGhpcy51c2VyRGF0YS5ncmFkaWVudFJhbXAudmFsdWUubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlclxyXG4gICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwZWNrbGVTdGFuZGFyZENvbG9yZWRNYXRlcmlhbFxyXG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWdBQUFBQUJDQUlBQUFBbjJZRWhBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFBSmNFaFpjd0FBRHNNQUFBN0RBY2R2cUdRQUFBSG9TVVJCVkRoUFRaUlJkb013REFReDkvL3NlYUV6STVzWHB3RnB0VnF2TU9tNi90N3JldGQxTGU4WEFkRjYrU01FWXIwM2wyZkY0R0pwcmNmaXhsNCt0eWtsRzZadnhlQUtXR3hCUXNLRGs5RklkRCtwRFVGaWFrOUlEUUVXTUFNNGRjekVabVdTRE9YUEJ1QVExT0NMWUk0YmMwUzBiYm5sRk9SNlZnbzJXd2dyYUl2Z2JoOEwyWk54Ukg1VDdRV0t5S3o5RTdrTm5VRStLVEEzT3o2TzNZSU9rb3ArNGp1SG9oMUgrbTNzbEJ5Vm05dmdPQ09vWHI3SHZCSlNqTGRKUlVIdVNyYnNlK2pEaVpPUFB0L2paSXY4V1BKZVcrSlZ6WWoyQ0lIYzlHYUVqbWMvT2hGM0MrbmVRb0JnVy9LS1p4MlZ1eXhGS3FEQk53ZnFBOE5YYTdwMDc4MUdCVDZUUGtTT296UVBNUGVyNHNCcVRydlpVWmdxU0tQNW9hQ1hYaXJKZFo0anF5UmJ0eUU4YW1Da0xMa3pXOXFpazdGeDltV0U5cEhFaDl2TUhzSWF3WlNQY3h1dDJEY0R5anplS2luaXN5cER3UW9LbkxVNVdWTHo3cEdPL25ickloQzJNTU9hR3JqOFBSTG1mS3BTSmNUNE5abjV3RmdiS2JWbEN6aWE3NkhiUVpNQWpQNzJJeVg5NHYxODlpN0V3ZmEyd2NkTVRmR09xZWtFMmkvTzlMWlJpL1Q4cXdGdXV2a25BM2tXL1luTFRNVk8yMk93VVhnME9aMUlBZGVxY0VqWGZmSDJqakVxTm1TdlJaYkY0M0JMdVVQc1lzazVYUHUzTnFEM1dLenIvUWZOKzZwK0pwQzdaUUFBQUFCSlJVNUVya0pnZ2c9PVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiZXhwb3J0IGNvbnN0IFVuaXRzID0ge1xyXG4gIE1pbGxpbWV0ZXJzOiAnbW0nLFxyXG4gIENlbnRpbWV0ZXJzOiAnY20nLFxyXG4gIE1ldGVyczogJ20nLFxyXG4gIEtpbG9tZXRlcnM6ICdrbScsXHJcbiAgSW5jaGVzOiAnaW4nLFxyXG4gIEZlZXQ6ICdmdCcsXHJcbiAgWWFyZHM6ICd5ZCcsXHJcbiAgTWlsZXM6ICdtaSdcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnNpb25GYWN0b3IoZnJvbSwgdG8gPSBVbml0cy5NZXRlcnMpIHtcclxuICBmcm9tID0gbm9ybWFsaXNlTmFtZShmcm9tKVxyXG4gIHRvID0gbm9ybWFsaXNlTmFtZSh0bylcclxuICBzd2l0Y2ggKGZyb20pIHtcclxuICAgIC8vIE1FVFJJQ1xyXG4gICAgY2FzZSBVbml0cy5NaWxsaW1ldGVyczpcclxuICAgICAgc3dpdGNoICh0bykge1xyXG4gICAgICAgIGNhc2UgVW5pdHMuQ2VudGltZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMC4xXHJcbiAgICAgICAgY2FzZSBVbml0cy5NZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMC4wMDFcclxuICAgICAgICBjYXNlIFVuaXRzLktpbG9tZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMWUtNlxyXG4gICAgICAgIGNhc2UgVW5pdHMuSW5jaGVzOlxyXG4gICAgICAgICAgcmV0dXJuIDAuMDM5MzcwMVxyXG4gICAgICAgIGNhc2UgVW5pdHMuRmVldDpcclxuICAgICAgICAgIHJldHVybiAwLjAwMzI4MDg0XHJcbiAgICAgICAgY2FzZSBVbml0cy5ZYXJkczpcclxuICAgICAgICAgIHJldHVybiAwLjAwMTA5MzYxXHJcbiAgICAgICAgY2FzZSBVbml0cy5NaWxlczpcclxuICAgICAgICAgIHJldHVybiA2LjIxMzcxZS03XHJcbiAgICAgIH1cclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgVW5pdHMuQ2VudGltZXRlcnM6XHJcbiAgICAgIHN3aXRjaCAodG8pIHtcclxuICAgICAgICBjYXNlIFVuaXRzLk1pbGxpbWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDEwXHJcbiAgICAgICAgY2FzZSBVbml0cy5NZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMC4wMVxyXG4gICAgICAgIGNhc2UgVW5pdHMuS2lsb21ldGVyczpcclxuICAgICAgICAgIHJldHVybiAxZS01XHJcbiAgICAgICAgY2FzZSBVbml0cy5JbmNoZXM6XHJcbiAgICAgICAgICByZXR1cm4gMC4zOTM3MDFcclxuICAgICAgICBjYXNlIFVuaXRzLkZlZXQ6XHJcbiAgICAgICAgICByZXR1cm4gMC4wMzI4MDg0XHJcbiAgICAgICAgY2FzZSBVbml0cy5ZYXJkczpcclxuICAgICAgICAgIHJldHVybiAwLjAxMDkzNjFcclxuICAgICAgICBjYXNlIFVuaXRzLk1pbGVzOlxyXG4gICAgICAgICAgcmV0dXJuIDYuMjEzNzFlLTZcclxuICAgICAgfVxyXG4gICAgICBicmVha1xyXG4gICAgY2FzZSBVbml0cy5NZXRlcnM6XHJcbiAgICAgIHN3aXRjaCAodG8pIHtcclxuICAgICAgICBjYXNlIFVuaXRzLk1pbGxpbWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDEwMDBcclxuICAgICAgICBjYXNlIFVuaXRzLkNlbnRpbWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDEwMFxyXG4gICAgICAgIGNhc2UgVW5pdHMuS2lsb21ldGVyczpcclxuICAgICAgICAgIHJldHVybiAxZS0zXHJcbiAgICAgICAgY2FzZSBVbml0cy5JbmNoZXM6XHJcbiAgICAgICAgICByZXR1cm4gMzkuMzcwMVxyXG4gICAgICAgIGNhc2UgVW5pdHMuRmVldDpcclxuICAgICAgICAgIHJldHVybiAzLjI4MDg0XHJcbiAgICAgICAgY2FzZSBVbml0cy5ZYXJkczpcclxuICAgICAgICAgIHJldHVybiAxLjA5MzYxXHJcbiAgICAgICAgY2FzZSBVbml0cy5NaWxlczpcclxuICAgICAgICAgIHJldHVybiAwLjAwMDYyMTM3MVxyXG4gICAgICB9XHJcbiAgICAgIGJyZWFrXHJcbiAgICBjYXNlIFVuaXRzLktpbG9tZXRlcnM6XHJcbiAgICAgIHN3aXRjaCAodG8pIHtcclxuICAgICAgICBjYXNlIFVuaXRzLk1pbGxpbWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDEwMDAwMDBcclxuICAgICAgICBjYXNlIFVuaXRzLkNlbnRpbWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDEwMDAwMFxyXG4gICAgICAgIGNhc2UgVW5pdHMuTWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDEwMDBcclxuICAgICAgICBjYXNlIFVuaXRzLkluY2hlczpcclxuICAgICAgICAgIHJldHVybiAzOTM3MC4xXHJcbiAgICAgICAgY2FzZSBVbml0cy5GZWV0OlxyXG4gICAgICAgICAgcmV0dXJuIDMyODAuODRcclxuICAgICAgICBjYXNlIFVuaXRzLllhcmRzOlxyXG4gICAgICAgICAgcmV0dXJuIDEwOTMuNjFcclxuICAgICAgICBjYXNlIFVuaXRzLk1pbGVzOlxyXG4gICAgICAgICAgcmV0dXJuIDAuNjIxMzcxXHJcbiAgICAgIH1cclxuICAgICAgYnJlYWtcclxuXHJcbiAgICAvLyBJTVBFUklBTFxyXG4gICAgY2FzZSBVbml0cy5JbmNoZXM6XHJcbiAgICAgIHN3aXRjaCAodG8pIHtcclxuICAgICAgICBjYXNlIFVuaXRzLk1pbGxpbWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDI1LjRcclxuICAgICAgICBjYXNlIFVuaXRzLkNlbnRpbWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDIuNTRcclxuICAgICAgICBjYXNlIFVuaXRzLk1ldGVyczpcclxuICAgICAgICAgIHJldHVybiAwLjAyNTRcclxuICAgICAgICBjYXNlIFVuaXRzLktpbG9tZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMi41NGUtNVxyXG4gICAgICAgIGNhc2UgVW5pdHMuRmVldDpcclxuICAgICAgICAgIHJldHVybiAwLjA4MzMzMzNcclxuICAgICAgICBjYXNlIFVuaXRzLllhcmRzOlxyXG4gICAgICAgICAgcmV0dXJuIDAuMDI3Nzc3Njk0XHJcbiAgICAgICAgY2FzZSBVbml0cy5NaWxlczpcclxuICAgICAgICAgIHJldHVybiAxLjU3ODI4ZS01XHJcbiAgICAgIH1cclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgVW5pdHMuRmVldDpcclxuICAgICAgc3dpdGNoICh0bykge1xyXG4gICAgICAgIGNhc2UgVW5pdHMuTWlsbGltZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMzA0LjhcclxuICAgICAgICBjYXNlIFVuaXRzLkNlbnRpbWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDMwLjQ4XHJcbiAgICAgICAgY2FzZSBVbml0cy5NZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMC4zMDQ4XHJcbiAgICAgICAgY2FzZSBVbml0cy5LaWxvbWV0ZXJzOlxyXG4gICAgICAgICAgcmV0dXJuIDAuMDAwMzA0OFxyXG4gICAgICAgIGNhc2UgVW5pdHMuSW5jaGVzOlxyXG4gICAgICAgICAgcmV0dXJuIDEyXHJcbiAgICAgICAgY2FzZSBVbml0cy5ZYXJkczpcclxuICAgICAgICAgIHJldHVybiAwLjMzMzMzMjMyOFxyXG4gICAgICAgIGNhc2UgVW5pdHMuTWlsZXM6XHJcbiAgICAgICAgICByZXR1cm4gMC4wMDAxODkzOTRcclxuICAgICAgfVxyXG4gICAgICBicmVha1xyXG4gICAgY2FzZSBVbml0cy5NaWxlczpcclxuICAgICAgc3dpdGNoICh0bykge1xyXG4gICAgICAgIGNhc2UgVW5pdHMuTWlsbGltZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMS42MDllNlxyXG4gICAgICAgIGNhc2UgVW5pdHMuQ2VudGltZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMTYwOTM0XHJcbiAgICAgICAgY2FzZSBVbml0cy5NZXRlcnM6XHJcbiAgICAgICAgICByZXR1cm4gMTYwOS4zNFxyXG4gICAgICAgIGNhc2UgVW5pdHMuS2lsb21ldGVyczpcclxuICAgICAgICAgIHJldHVybiAxLjYwOTM0XHJcbiAgICAgICAgY2FzZSBVbml0cy5JbmNoZXM6XHJcbiAgICAgICAgICByZXR1cm4gNjMzNjBcclxuICAgICAgICBjYXNlIFVuaXRzLkZlZXQ6XHJcbiAgICAgICAgICByZXR1cm4gNTI4MFxyXG4gICAgICAgIGNhc2UgVW5pdHMuWWFyZHM6XHJcbiAgICAgICAgICByZXR1cm4gMTc1OS45OTQ2OTE4NFxyXG4gICAgICB9XHJcbiAgICAgIGJyZWFrXHJcbiAgfVxyXG4gIHJldHVybiAxXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpc2VOYW1lKHVuaXQpIHtcclxuICBpZiAoIXVuaXQpIHJldHVybiBVbml0cy5NZXRlcnNcclxuICBzd2l0Y2ggKHVuaXQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgY2FzZSAnbW0nOlxyXG4gICAgY2FzZSAnbWlsJzpcclxuICAgIGNhc2UgJ21pbGxpbWV0ZXJzJzpcclxuICAgIGNhc2UgJ21pbGxpbWV0cmVzJzpcclxuICAgICAgcmV0dXJuIFVuaXRzLk1pbGxpbWV0ZXJzXHJcbiAgICBjYXNlICdjbSc6XHJcbiAgICBjYXNlICdjZW50aW1ldHJlJzpcclxuICAgIGNhc2UgJ2NlbnRpbWV0ZXInOlxyXG4gICAgY2FzZSAnY2VudGltZXRyZXMnOlxyXG4gICAgY2FzZSAnY2VudGltZXRlcnMnOlxyXG4gICAgICByZXR1cm4gVW5pdHMuQ2VudGltZXRlcnNcclxuICAgIGNhc2UgJ20nOlxyXG4gICAgY2FzZSAnbWV0ZXInOlxyXG4gICAgY2FzZSAnbWV0cmUnOlxyXG4gICAgY2FzZSAnbWV0ZXJzJzpcclxuICAgIGNhc2UgJ21ldHJlcyc6XHJcbiAgICAgIHJldHVybiBVbml0cy5NZXRlcnNcclxuICAgIGNhc2UgJ2luY2hlcyc6XHJcbiAgICBjYXNlICdpbmNoJzpcclxuICAgIGNhc2UgJ2luJzpcclxuICAgICAgcmV0dXJuIFVuaXRzLkluY2hlc1xyXG4gICAgY2FzZSAnZmVldCc6XHJcbiAgICBjYXNlICdmb290JzpcclxuICAgIGNhc2UgJ2Z0JzpcclxuICAgICAgcmV0dXJuIFVuaXRzLkZlZXRcclxuICAgIGNhc2UgJ3lhcmQnOlxyXG4gICAgY2FzZSAneWFyZHMnOlxyXG4gICAgY2FzZSAneWQnOlxyXG4gICAgICByZXR1cm4gVW5pdHMuWWFyZHNcclxuICAgIGNhc2UgJ21pbGVzJzpcclxuICAgIGNhc2UgJ21pbGUnOlxyXG4gICAgY2FzZSAnbWknOlxyXG4gICAgICByZXR1cm4gVW5pdHMuTWlsZXNcclxuICAgIGNhc2UgJ2ttJzpcclxuICAgIGNhc2UgJ2tpbG9tZXRlcnMnOlxyXG4gICAgICByZXR1cm4gVW5pdHMuS2lsb21ldGVyc1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIFVuaXRzLk1ldGVyc1xyXG4gIH1cclxufVxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZUdob3N0VmVydCA9IC8qIGdsc2wgKi8gYFxyXG4jaW5jbHVkZSA8Y29tbW9uPlxyXG4jaWZkZWYgVVNFX1JURVxyXG4gICAgLy8gVGhlIGhpZ2ggY29tcG9uZW50IGlzIHN0b3JlZCBhcyB0aGUgZGVmYXVsdCAncG9zaXRpb24nIGF0dHJpYnV0ZSBidWZmZXJcclxuICAgIGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uX2xvdztcclxuICAgIHVuaWZvcm0gdmVjMyB1Vmlld2VyX2hpZ2g7XHJcbiAgICB1bmlmb3JtIHZlYzMgdVZpZXdlcl9sb3c7XHJcbiNlbmRpZlxyXG5cclxuI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICBhdHRyaWJ1dGUgZmxvYXQgb2JqSW5kZXg7XHJcblxyXG4gICAgI2lmIFRSQU5TRk9STV9TVE9SQUdFID09IDBcclxuICAgICAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgICAgICNkZWZpbmUgVFJBTlNGT1JNX1NUUklERSA0XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgI2RlZmluZSBUUkFOU0ZPUk1fU1RSSURFIDQuXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdFRyYW5zZm9ybXM7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBvYmpDb3VudDtcclxuICAgICNlbGlmIFRSQU5TRk9STV9TVE9SQUdFID09IDFcclxuICAgICAgICB1bmlmb3JtIG1hdDQgdVRyYW5zZm9ybXNbT0JKX0NPVU5UXTtcclxuICAgICNlbmRpZlxyXG4jZW5kaWZcclxuXHJcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxyXG5cclxuI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICB2b2lkIG9iamVjdFRyYW5zZm9ybShvdXQgdmVjNCBxdWF0ZXJuaW9uLCBvdXQgdmVjNCBwaXZvdExvdywgb3V0IHZlYzQgcGl2b3RIaWdoLCBvdXQgdmVjNCB0cmFuc2xhdGlvbiwgb3V0IHZlYzQgc2NhbGUpe1xyXG4gICAgICAgICNpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAwXHJcbiAgICAgICAgICAgICNpZiBfX1ZFUlNJT05fXyA9PSAzMDBcclxuICAgICAgICAgICAgICAgIGl2ZWMyIHV2ID0gaXZlYzIoaW50KG9iakluZGV4KSAqIFRSQU5TRk9STV9TVFJJREUsIDApOyBcclxuICAgICAgICAgICAgICAgIHZlYzQgdjAgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYsIDAgKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjEgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigxLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYyID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMiwgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MyA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDMsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHF1YXRlcm5pb24gPSB2MDtcclxuICAgICAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh2MS54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodjIueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodjMueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBzY2FsZSA9IHZlYzQodjEudywgdjIudywgdjMudywgMS4pO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IG9iakNvdW50ICogVFJBTlNGT1JNX1NUUklERTtcclxuICAgICAgICAgICAgICAgIHZlYzIgY1V2ID0gdmVjMigwLjUvc2l6ZSwgMC41KTtcclxuICAgICAgICAgICAgICAgIHZlYzIgZFV2ID0gdmVjMigxLi9zaXplLCAwLik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHZlYzIgdXYgPSB2ZWMyKChvYmpJbmRleCAqIFRSQU5TRk9STV9TVFJJREUpL3NpemUgKyBjVXYueCwgY1V2LnkpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MCA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjEgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIGRVdik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYyID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyAyLiAqIGRVdik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYzID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyAzLiAqIGRVdik7XHJcbiAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uID0gdjA7XHJcbiAgICAgICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodjEueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHYyLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHYzLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHYxLncsIHYyLncsIHYzLncsIDEuKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VsaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMVxyXG4gICAgICAgICAgICBtYXQ0IHRNYXRyaXggPSB1VHJhbnNmb3Jtc1tpbnQob2JqSW5kZXgpXTtcclxuICAgICAgICAgICAgcXVhdGVybmlvbiA9IHRNYXRyaXhbMF07XHJcbiAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh0TWF0cml4WzFdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHRNYXRyaXhbMl0ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh0TWF0cml4WzNdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICBzY2FsZSA9IHZlYzQodE1hdHJpeFsxXVszXSwgdE1hdHJpeFsyXVszXSwgdE1hdHJpeFszXVszXSwgMS4pO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgfVxyXG5cclxuICAgIHZlYzMgcm90YXRlX3ZlcnRleF9wb3NpdGlvbih2ZWMzIHBvc2l0aW9uLCB2ZWM0IHF1YXQpXHJcbiAgICB7IFxyXG4gICAgICAgIHJldHVybiBwb3NpdGlvbiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24pICsgcXVhdC53ICogcG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgLyoqIEFub3RoZXIgd29ya2Fyb3VuZCBmb3IgQXBwbGUncyBzdHVwaWQgY29tcGlsZXIgKi9cclxuICAgIHZlYzQgc2FmZU11bCh2ZWM0IGEsIHZlYzQgYikge1xyXG4gICAgICAgIC8vIFByZXZlbnRzIGNvbnN0YW50IGZvbGRpbmcgYW5kIG9wdGltaXphdGlvblxyXG4gICAgICAgIHJldHVybiAoYSArIHZlYzQoMC4wKSkgKiAoYiArIHZlYzQoMS4wKSkgLSBhICogdmVjNCgxLjApO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZ2hwIHZlYzMgcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEoaGlnaHAgdmVjNCB2MCwgaGlnaHAgdmVjNCB2MSwgaGlnaHAgdmVjNCBzY2FsZSwgaGlnaHAgdmVjNCBxdWF0KVxyXG4gICAge1xyXG4gICAgICAgIC8qKiAhISEgV09SS0FST1VORCBGT1IgSW50ZWwgSXJpc1hlIENBUkRTICEhISAqL1xyXG4gICAgICAgIC8qKiBUaGUgY29kZSBiZWxvdyB3aWxsIG5vdCBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0cyBpbiBpbnRlbCBJcmlzWEUgaW50ZWdyYXRlZCBHUFVzLiBcclxuICAgICAgICAgKiAgVGhlIGdlb21ldHJ5IHdpbGwgdHVybiBtYW5nbGVkLCBhbGJlaXQgc3RhYmxlXHJcbiAgICAgICAgICogIEkgY2FuJ3Qga25vdyBmb3Igc3VyZSB3aGF0IGlzIGdvaW5nIG9uLCBidXQgcm90YXRpbmcgdGhlIGRpZmZlcmVuY2Ugc2VlbXMgdG8gXHJcbiAgICAgICAgICogIGZvcmNlIHRoZSByZXN1bHQgaW50byBhIGxvd2VyIHByZWNpc2lvbj9cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBoaWdocCB2ZWM0IHBvc2l0aW9uID0gdjAgLSB2MTtcclxuICAgICAgICAvLyByZXR1cm4gcG9zaXRpb24ueHl6ICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbi54eXopICsgcXVhdC53ICogcG9zaXRpb24ueHl6KTtcclxuXHJcbiAgICAgICAgLyoqIFN1YnRyYWN0aW5nIHRoZSByb3RhdGVkIHZlY3RvcnMgd29ya3MuICovXHJcbiAgICAgICAgcmV0dXJuIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24oc2FmZU11bCh2MCwgc2NhbGUpLnh5eiwgcXVhdCkgIC0gcm90YXRlX3ZlcnRleF9wb3NpdGlvbihzYWZlTXVsKHYxLCBzY2FsZSkueHl6LCBxdWF0KSA7XHJcblxyXG4gICAgICAgIC8qKiBBbiBhbHRlcm5hdGUgd29ya2Fyb3VuZCBpc1xyXG4gICAgICAgICAqIGhpZ2hwIHZlYzMgcG9zaXRpb24gPSAodjAueHl6ICogKDEuICsgMWUtNykpIC0gKHYxLnh5eiAqICgxLiArIDFlLTcpKTtcclxuICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uKSArIHF1YXQudyAqIHBvc2l0aW9uKTtcclxuXHJcbiAgICAgICAgICAgSG93ZXZlciBJJ20gbm90IHN1Y2ggYSBmYW4gb2YgdGhlICgxLiArIDFlLTcpIHBhcnRcclxuICAgICAgICAgKi9cclxuICAgIH1cclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVVNFX1JURVxyXG4gICAgaGlnaHAgdmVjNCBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2xvdywgaW4gaGlnaHAgdmVjMyBwb3NpdGlvbl9oaWdoLCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9fbG93LCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9faGlnaCl7XHJcbiAgICAgICAgLyogXHJcbiAgICAgICAgU291cmNlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXJ0dWFsZ2xvYmVib29rL09wZW5HbG9iZS9ibG9iL21hc3Rlci9Tb3VyY2UvRXhhbXBsZXMvQ2hhcHRlcjA1L0ppdHRlci9HUFVSZWxhdGl2ZVRvRXllRFNGVU45MC9TaGFkZXJzL1ZTLmdsc2wgXHJcbiAgICAgICAgTm90ZSBoZXJlLCB3ZSdyZSBzdG9yaW5nIHRoZSBoaWdoIHBhcnQgb2YgdGhlIHBvc2l0aW9uIGVuY29kaW5nIGluc2lkZSB0aHJlZSdzIGRlZmF1bHQgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgYnVmZmVyIHNvIHdlIGF2b2lkIHJlZHVuZGFuY3kgXHJcbiAgICAgICAgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQxID0gcG9zaXRpb25fbG93Lnh5eiAtIHJlbGF0aXZlVG9fbG93Lnh5ejtcclxuICAgICAgICBoaWdocCB2ZWMzIGUgPSB0MSAtIHBvc2l0aW9uX2xvdy54eXo7XHJcbiAgICAgICAgLyoqIFRoaXMgaXMgcmVkdW5hbnQsIGJ1dCBuZWNlc3NhcnkgYXMgYSB3b3JrYXJvdW5kIGZvciBBcHBsZSBwbGF0Zm9ybXMgKi9cclxuICAgICAgICBoaWdocCBmbG9hdCB4ID0gcG9zaXRpb25faGlnaC54IC0gcmVsYXRpdmVUb19oaWdoLng7XHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeSA9IHBvc2l0aW9uX2hpZ2gueSAtIHJlbGF0aXZlVG9faGlnaC55O1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHogPSBwb3NpdGlvbl9oaWdoLnogLSByZWxhdGl2ZVRvX2hpZ2guejtcclxuICAgICAgICBoaWdocCB2ZWMzIHYgPSB2ZWMzKHgsIHksIHopO1xyXG4gICAgICAgIC8qKiBFbmQgb2YgcmVkdW5kYW50IHBhcnQgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQyID0gKCgtcmVsYXRpdmVUb19sb3cgLSBlKSArIChwb3NpdGlvbl9sb3cueHl6IC0gKHQxIC0gZSkpKSArIHY7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBoaWdoRGlmZmVyZW5jZSA9IHQxICsgdDI7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBsb3dEaWZmZXJlbmNlID0gdDIgLSAoaGlnaERpZmZlcmVuY2UueHl6IC0gdDEueHl6KTtcclxuICAgICAgICBcclxuICAgICAgICBoaWdocCB2ZWMzIHBvc2l0aW9uID0gaGlnaERpZmZlcmVuY2UueHl6ICsgbG93RGlmZmVyZW5jZS54eXo7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQocG9zaXRpb24sIDEuKTtcclxuICAgIH1cclxuI2VuZGlmXHJcblxyXG52b2lkIG1haW4oKSB7XHJcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxtb3JwaGNvbG9yX3ZlcnRleD5cclxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcclxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XHJcblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxyXG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cclxuXHRcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cclxuICAgICAgICAvLyAjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+IC8vIENPTU1FTlRFRCBDSFVOS1xyXG4gICAgICAgIHZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XHJcbiAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcblxyXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGluIGxpZXUgb2YgYSBwZXItaW5zdGFuY2Ugbm9ybWFsLW1hdHJpeFxyXG4gICAgICAgICAgICAvLyBzaGVhciB0cmFuc2Zvcm1zIGluIHRoZSBpbnN0YW5jZSBtYXRyaXggYXJlIG5vdCBzdXBwb3J0ZWRcclxuICAgICAgICAgICAgbWF0MyBtID0gbWF0MyggaW5zdGFuY2VNYXRyaXggKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgbmVnYXRpdmUgc2NhbGluZywgd2UgZmxpcCB0aGUgbm9ybWFsICovXHJcbiAgICAgICAgICAgIGZsb2F0IHNpZ25EZXQgPSBzaWduKGRvdChtWzBdLCBjcm9zcyhtWzFdLCBtWzJdKSkpO1xyXG4gICAgICAgICAgICAvLyBPcHRpb25hbCBmYWxsYmFjazogdHJlYXQgMCBhcyArMVxyXG4gICAgICAgICAgICBzaWduRGV0ID0gc2lnbkRldCArICgxLjAgLSBhYnMoc2lnbkRldCkpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCAqPSBzaWduRGV0O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAgICAgI2lmZGVmIEZMSVBfU0lERURcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZmRlZiBVU0VfVEFOR0VOVFxyXG4gICAgICAgICAgICB2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XHJcbiAgICAgICAgICAgICNpZmRlZiBGTElQX1NJREVEXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcblx0I2VuZGlmXHJcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XHJcblx0Ly8gI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PiBDT01NRU5URUQgQ0hVTktcclxuICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgIHZlYzQgdFF1YXRlcm5pb24sIHRQaXZvdExvdywgdFBpdm90SGlnaCwgdFRyYW5zbGF0aW9uLCB0U2NhbGU7XHJcbiAgICAgICAgb2JqZWN0VHJhbnNmb3JtKHRRdWF0ZXJuaW9uLCB0UGl2b3RMb3csIHRQaXZvdEhpZ2gsIHRUcmFuc2xhdGlvbiwgdFNjYWxlKTtcclxuICAgICNlbmRpZlxyXG4gICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICB2ZWM0IHBvc2l0aW9uX2xvd1QgPSB2ZWM0KHBvc2l0aW9uX2xvdywgMS4pO1xyXG4gICAgICAgIHZlYzQgcG9zaXRpb25faGlnaFQgPSB2ZWM0KHBvc2l0aW9uLCAxLik7XHJcbiAgICAgICAgY29uc3QgdmVjMyBaRVJPMyA9IHZlYzMoMC4sIDAuLCAwLik7XHJcblxyXG4gICAgICAgIGhpZ2hwIHZlYzQgcnRlTG9jYWxQb3NpdGlvbiA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHBvc2l0aW9uX2xvd1QueHl6LCBwb3NpdGlvbl9oaWdoVC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICBoaWdocCB2ZWM0IHJ0ZVBpdm90ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24odFBpdm90TG93Lnh5eiwgdFBpdm90SGlnaC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICBydGVMb2NhbFBvc2l0aW9uLnh5eiA9IHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKHJ0ZUxvY2FsUG9zaXRpb24sIHJ0ZVBpdm90LCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHJ0ZVBpdm90Lnh5eiArIHRUcmFuc2xhdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcbiAgICAgICAgICAgIHZlYzQgaW5zdGFuY2VQaXZvdCA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKFpFUk8zLCBaRVJPMywgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgIHJ0ZUxvY2FsUG9zaXRpb24ueHl6ID0gKG1hdDMoaW5zdGFuY2VNYXRyaXgpICogKHJ0ZUxvY2FsUG9zaXRpb24gLSBpbnN0YW5jZVBpdm90KS54eXopICsgaW5zdGFuY2VQaXZvdC54eXogKyBpbnN0YW5jZU1hdHJpeFszXS54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHJ0ZUxvY2FsUG9zaXRpb247XHJcbiAgICAjZWxzZVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcclxuICAgICAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICAgICAgbXZQb3NpdGlvbi54eXogPSByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShtdlBvc2l0aW9uLCB0UGl2b3RIaWdoLCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHRQaXZvdEhpZ2gueHl6ICsgdFRyYW5zbGF0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuICAgICAgICAgICAgbXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG4gICAgXHJcbiAgICBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcclxuXHJcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xyXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cclxufVxyXG5gXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlR2hvc3RGcmFnID0gLyogZ2xzbCAqLyBgXHJcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xyXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XHJcbiNpZm5kZWYgRkxBVF9TSEFERURcclxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcclxuI2VuZGlmXHJcbiNpbmNsdWRlIDxjb21tb24+XHJcbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XHJcbnZvaWQgbWFpbigpIHtcclxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxyXG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xyXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XHJcbiAgICAvLyBXZSdyZSBkaXNhYmxpbmcgYWxwaGEgdGVzdGluZyBiZWNhdXNlIHdlIG5lZWQgdG8gdXNlIGl0IGZvciBzaGFkb3cgcmVqZWN0aW9uLiBUaHJlZS5qcyBnYXZlIG1lIG5vIGNob2ljZVxyXG5cdC8vICNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+IFxyXG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cclxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xyXG5cdC8vIGFjY3VtdWxhdGlvbiAoYmFrZWQgaW5kaXJlY3QgbGlnaHRpbmcgb25seSlcclxuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXHJcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XHJcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eSAqIFJFQ0lQUk9DQUxfUEk7XHJcblx0I2Vsc2VcclxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTtcclxuXHQjZW5kaWZcclxuXHQvLyBtb2R1bGF0aW9uXHJcblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxyXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xyXG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcclxuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxyXG59XHJcbmBcclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVCYXNpY1ZlcnQgPSAvKiBnbHNsICovIGBcclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2lmZGVmIFVTRV9SVEVcclxuICAgIC8vIFRoZSBoaWdoIGNvbXBvbmVudCBpcyBzdG9yZWQgYXMgdGhlIGRlZmF1bHQgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgYnVmZmVyXHJcbiAgICBhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbl9sb3c7XHJcbiAgICB1bmlmb3JtIHZlYzMgdVZpZXdlcl9oaWdoO1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfbG93O1xyXG4jZW5kaWZcclxuXHJcbiNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgYXR0cmlidXRlIGZsb2F0IG9iakluZGV4O1xyXG5cclxuICAgICNpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAwXHJcbiAgICAgICAgI2lmIF9fVkVSU0lPTl9fID09IDMwMFxyXG4gICAgICAgICAgICAjZGVmaW5lIFRSQU5TRk9STV9TVFJJREUgNFxyXG4gICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICNkZWZpbmUgVFJBTlNGT1JNX1NUUklERSA0LlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHRUcmFuc2Zvcm1zO1xyXG4gICAgICAgIHVuaWZvcm0gZmxvYXQgb2JqQ291bnQ7XHJcbiAgICAjZWxpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAxXHJcbiAgICAgICAgdW5pZm9ybSBtYXQ0IHVUcmFuc2Zvcm1zW09CSl9DT1VOVF07XHJcbiAgICAjZW5kaWZcclxuI2VuZGlmXHJcblxyXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cclxuXHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICBoaWdocCB2ZWM0IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKGluIGhpZ2hwIHZlYzMgcG9zaXRpb25fbG93LCBpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2hpZ2gsIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19sb3csIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19oaWdoKXtcclxuICAgICAgICAvKiBcclxuICAgICAgICBTb3VyY2UgaHR0cHM6Ly9naXRodWIuY29tL3ZpcnR1YWxnbG9iZWJvb2svT3Blbkdsb2JlL2Jsb2IvbWFzdGVyL1NvdXJjZS9FeGFtcGxlcy9DaGFwdGVyMDUvSml0dGVyL0dQVVJlbGF0aXZlVG9FeWVEU0ZVTjkwL1NoYWRlcnMvVlMuZ2xzbCBcclxuICAgICAgICBOb3RlIGhlcmUsIHdlJ3JlIHN0b3JpbmcgdGhlIGhpZ2ggcGFydCBvZiB0aGUgcG9zaXRpb24gZW5jb2RpbmcgaW5zaWRlIHRocmVlJ3MgZGVmYXVsdCAncG9zaXRpb24nIGF0dHJpYnV0ZSBidWZmZXIgc28gd2UgYXZvaWQgcmVkdW5kYW5jeSBcclxuICAgICAgICAqL1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdDEgPSBwb3NpdGlvbl9sb3cueHl6IC0gcmVsYXRpdmVUb19sb3cueHl6O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgZSA9IHQxIC0gcG9zaXRpb25fbG93Lnh5ejtcclxuICAgICAgICAvKiogVGhpcyBpcyByZWR1bmFudCwgYnV0IG5lY2Vzc2FyeSBhcyBhIHdvcmthcm91bmQgZm9yIEFwcGxlIHBsYXRmb3JtcyAqL1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHggPSBwb3NpdGlvbl9oaWdoLnggLSByZWxhdGl2ZVRvX2hpZ2gueDtcclxuICAgICAgICBoaWdocCBmbG9hdCB5ID0gcG9zaXRpb25faGlnaC55IC0gcmVsYXRpdmVUb19oaWdoLnk7XHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeiA9IHBvc2l0aW9uX2hpZ2gueiAtIHJlbGF0aXZlVG9faGlnaC56O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdiA9IHZlYzMoeCwgeSwgeik7XHJcbiAgICAgICAgLyoqIEVuZCBvZiByZWR1bmRhbnQgcGFydCAqL1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdDIgPSAoKC1yZWxhdGl2ZVRvX2xvdyAtIGUpICsgKHBvc2l0aW9uX2xvdy54eXogLSAodDEgLSBlKSkpICsgdjtcclxuICAgICAgICBoaWdocCB2ZWMzIGhpZ2hEaWZmZXJlbmNlID0gdDEgKyB0MjtcclxuICAgICAgICBoaWdocCB2ZWMzIGxvd0RpZmZlcmVuY2UgPSB0MiAtIChoaWdoRGlmZmVyZW5jZS54eXogLSB0MS54eXopO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGhpZ2hwIHZlYzMgcG9zaXRpb24gPSBoaWdoRGlmZmVyZW5jZS54eXogKyBsb3dEaWZmZXJlbmNlLnh5ejtcclxuICAgICAgICByZXR1cm4gdmVjNChwb3NpdGlvbiwgMS4pO1xyXG4gICAgfSAgIFxyXG4jZW5kaWZcclxuXHJcbiNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgdm9pZCBvYmplY3RUcmFuc2Zvcm0ob3V0IHZlYzQgcXVhdGVybmlvbiwgb3V0IHZlYzQgcGl2b3RMb3csIG91dCB2ZWM0IHBpdm90SGlnaCwgb3V0IHZlYzQgdHJhbnNsYXRpb24sIG91dCB2ZWM0IHNjYWxlKXtcclxuICAgICAgICAjaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMFxyXG4gICAgICAgICAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgICAgICAgICBpdmVjMiB1diA9IGl2ZWMyKGludChvYmpJbmRleCkgKiBUUkFOU0ZPUk1fU1RSSURFLCAwKTsgXHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYwID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2LCAwICk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYxID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMSwgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MiA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDIsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjMgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigzLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uID0gdjA7XHJcbiAgICAgICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodjEueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHYyLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHYzLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHYxLncsIHYyLncsIHYzLncsIDEuKTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBvYmpDb3VudCAqIFRSQU5TRk9STV9TVFJJREU7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIGNVdiA9IHZlYzIoMC41L3NpemUsIDAuNSk7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIGRVdiA9IHZlYzIoMS4vc2l6ZSwgMC4pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB2ZWMyIHV2ID0gdmVjMigob2JqSW5kZXggKiBUUkFOU0ZPUk1fU1RSSURFKS9zaXplICsgY1V2LngsIGNVdi55KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjAgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1dik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYxID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyBkVXYpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MiA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2ICsgMi4gKiBkVXYpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MyA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2ICsgMy4gKiBkVXYpO1xyXG4gICAgICAgICAgICAgICAgcXVhdGVybmlvbiA9IHYwO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RMb3cgPSB2ZWM0KHYxLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RIaWdoID0gdmVjNCh2Mi54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh2My54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHNjYWxlID0gdmVjNCh2MS53LCB2Mi53LCB2My53LCAxLik7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbGlmIFRSQU5TRk9STV9TVE9SQUdFID09IDFcclxuICAgICAgICAgICAgbWF0NCB0TWF0cml4ID0gdVRyYW5zZm9ybXNbaW50KG9iakluZGV4KV07XHJcbiAgICAgICAgICAgIHF1YXRlcm5pb24gPSB0TWF0cml4WzBdO1xyXG4gICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodE1hdHJpeFsxXS54eXosIDEuKTtcclxuICAgICAgICAgICAgcGl2b3RIaWdoID0gdmVjNCh0TWF0cml4WzJdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodE1hdHJpeFszXS54eXosIDEuKTtcclxuICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHRNYXRyaXhbMV1bM10sIHRNYXRyaXhbMl1bM10sIHRNYXRyaXhbM11bM10sIDEuKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgIH1cclxuXHJcbiAgICB2ZWMzIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24odmVjMyBwb3NpdGlvbiwgdmVjNCBxdWF0KVxyXG4gICAgeyBcclxuICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uKSArIHF1YXQudyAqIHBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQW5vdGhlciB3b3JrYXJvdW5kIGZvciBBcHBsZSdzIHN0dXBpZCBjb21waWxlciAqL1xyXG4gICAgdmVjNCBzYWZlTXVsKHZlYzQgYSwgdmVjNCBiKSB7XHJcbiAgICAgICAgLy8gUHJldmVudHMgY29uc3RhbnQgZm9sZGluZyBhbmQgb3B0aW1pemF0aW9uXHJcbiAgICAgICAgcmV0dXJuIChhICsgdmVjNCgwLjApKSAqIChiICsgdmVjNCgxLjApKSAtIGEgKiB2ZWM0KDEuMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlnaHAgdmVjMyByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShoaWdocCB2ZWM0IHYwLCBoaWdocCB2ZWM0IHYxLCBoaWdocCB2ZWM0IHNjYWxlLCBoaWdocCB2ZWM0IHF1YXQpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqICEhISBXT1JLQVJPVU5EIEZPUiBJbnRlbCBJcmlzWGUgQ0FSRFMgISEhICovXHJcbiAgICAgICAgLyoqIFRoZSBjb2RlIGJlbG93IHdpbGwgbm90IHByb2R1Y2UgY29ycmVjdCByZXN1bHRzIGluIGludGVsIElyaXNYRSBpbnRlZ3JhdGVkIEdQVXMuIFxyXG4gICAgICAgICAqICBUaGUgZ2VvbWV0cnkgd2lsbCB0dXJuIG1hbmdsZWQsIGFsYmVpdCBzdGFibGVcclxuICAgICAgICAgKiAgSSBjYW4ndCBrbm93IGZvciBzdXJlIHdoYXQgaXMgZ29pbmcgb24sIGJ1dCByb3RhdGluZyB0aGUgZGlmZmVyZW5jZSBzZWVtcyB0byBcclxuICAgICAgICAgKiAgZm9yY2UgdGhlIHJlc3VsdCBpbnRvIGEgbG93ZXIgcHJlY2lzaW9uP1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIGhpZ2hwIHZlYzQgcG9zaXRpb24gPSB2MCAtIHYxO1xyXG4gICAgICAgIC8vIHJldHVybiBwb3NpdGlvbi54eXogKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uLnh5eikgKyBxdWF0LncgKiBwb3NpdGlvbi54eXopO1xyXG5cclxuICAgICAgICAvKiogU3VidHJhY3RpbmcgdGhlIHJvdGF0ZWQgdmVjdG9ycyB3b3Jrcy4gKi9cclxuICAgICAgICByZXR1cm4gcm90YXRlX3ZlcnRleF9wb3NpdGlvbihzYWZlTXVsKHYwLCBzY2FsZSkueHl6LCBxdWF0KSAgLSByb3RhdGVfdmVydGV4X3Bvc2l0aW9uKHNhZmVNdWwodjEsIHNjYWxlKS54eXosIHF1YXQpIDtcclxuXHJcbiAgICAgICAgLyoqIEFuIGFsdGVybmF0ZSB3b3JrYXJvdW5kIGlzXHJcbiAgICAgICAgICogaGlnaHAgdmVjMyBwb3NpdGlvbiA9ICh2MC54eXogKiAoMS4gKyAxZS03KSkgLSAodjEueHl6ICogKDEuICsgMWUtNykpO1xyXG4gICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24pICsgcXVhdC53ICogcG9zaXRpb24pO1xyXG5cclxuICAgICAgICAgICBIb3dldmVyIEknbSBub3Qgc3VjaCBhIGZhbiBvZiB0aGUgKDEuICsgMWUtNykgcGFydFxyXG4gICAgICAgICAqL1xyXG4gICAgfVxyXG5cclxuI2VuZGlmXHJcblxyXG4jaWYgZGVmaW5lZChCSUxMQk9BUkQpIHx8IGRlZmluZWQoQklMTEJPQVJEX1NDUkVFTilcclxuICAgIHVuaWZvcm0gbWF0NCBpbnZQcm9qZWN0aW9uO1xyXG4jZW5kaWZcclxuXHJcbiNpZmRlZiBCSUxMQk9BUkRfU0NSRUVOXHJcbiAgICB1bmlmb3JtIHZlYzQgYmlsbGJvYXJkUGl4ZWxPZmZzZXRTaXplO1xyXG4jZW5kaWZcclxuXHJcbnZvaWQgbWFpbigpIHtcclxuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPG1vcnBoY29sb3JfdmVydGV4PlxyXG5cdCNpZiBkZWZpbmVkICggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQgKCBVU0VfU0tJTk5JTkcgKVxyXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cclxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XHJcblx0XHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxyXG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxyXG4gICAgICAgIC8vICNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4gLy8gQ09NTUVOVEVEIENIVU5LXHJcbiAgICAgICAgdmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDtcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuXHJcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgaW4gbGlldSBvZiBhIHBlci1pbnN0YW5jZSBub3JtYWwtbWF0cml4XHJcbiAgICAgICAgICAgIC8vIHNoZWFyIHRyYW5zZm9ybXMgaW4gdGhlIGluc3RhbmNlIG1hdHJpeCBhcmUgbm90IHN1cHBvcnRlZFxyXG4gICAgICAgICAgICBtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBuZWdhdGl2ZSBzY2FsaW5nLCB3ZSBmbGlwIHRoZSBub3JtYWwgKi9cclxuICAgICAgICAgICAgZmxvYXQgc2lnbkRldCA9IHNpZ24oZG90KG1bMF0sIGNyb3NzKG1bMV0sIG1bMl0pKSk7XHJcbiAgICAgICAgICAgIC8vIE9wdGlvbmFsIGZhbGxiYWNrOiB0cmVhdCAwIGFzICsxXHJcbiAgICAgICAgICAgIHNpZ25EZXQgPSBzaWduRGV0ICsgKDEuMCAtIGFicyhzaWduRGV0KSk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsICo9IHNpZ25EZXQ7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAjaWZkZWYgRkxJUF9TSURFRFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmZGVmIFVTRV9UQU5HRU5UXHJcbiAgICAgICAgICAgIHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcclxuICAgICAgICAgICAgI2lmZGVmIEZMSVBfU0lERURcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuXHQjZW5kaWZcclxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cclxuXHQvLyAjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+IENPTU1FTlRFRCBDSFVOS1xyXG4gICAgI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICAgICAgdmVjNCB0UXVhdGVybmlvbiwgdFBpdm90TG93LCB0UGl2b3RIaWdoLCB0VHJhbnNsYXRpb24sIHRTY2FsZTtcclxuICAgICAgICBvYmplY3RUcmFuc2Zvcm0odFF1YXRlcm5pb24sIHRQaXZvdExvdywgdFBpdm90SGlnaCwgdFRyYW5zbGF0aW9uLCB0U2NhbGUpO1xyXG4gICAgI2VuZGlmXHJcbiAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgIHZlYzQgcG9zaXRpb25fbG93VCA9IHZlYzQocG9zaXRpb25fbG93LCAxLik7XHJcbiAgICAgICAgdmVjNCBwb3NpdGlvbl9oaWdoVCA9IHZlYzQocG9zaXRpb24sIDEuKTtcclxuICAgICAgICBjb25zdCB2ZWMzIFpFUk8zID0gdmVjMygwLiwgMC4sIDAuKTtcclxuXHJcbiAgICAgICAgaGlnaHAgdmVjNCBydGVMb2NhbFBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24ocG9zaXRpb25fbG93VC54eXosIHBvc2l0aW9uX2hpZ2hULnh5eiwgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICAgICAgICAgIGhpZ2hwIHZlYzQgcnRlUGl2b3QgPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbih0UGl2b3RMb3cueHl6LCB0UGl2b3RIaWdoLnh5eiwgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgIHJ0ZUxvY2FsUG9zaXRpb24ueHl6ID0gcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEocnRlTG9jYWxQb3NpdGlvbiwgcnRlUGl2b3QsIHRTY2FsZSwgdFF1YXRlcm5pb24pICsgcnRlUGl2b3QueHl6ICsgdFRyYW5zbGF0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuICAgICAgICAgICAgdmVjNCBpbnN0YW5jZVBpdm90ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oWkVSTzMsIFpFUk8zLCB1Vmlld2VyX2xvdywgdVZpZXdlcl9oaWdoKTtcclxuICAgICAgICAgICAgcnRlTG9jYWxQb3NpdGlvbi54eXogPSAobWF0MyhpbnN0YW5jZU1hdHJpeCkgKiAocnRlTG9jYWxQb3NpdGlvbiAtIGluc3RhbmNlUGl2b3QpLnh5eikgKyBpbnN0YW5jZVBpdm90Lnh5eiArIGluc3RhbmNlTWF0cml4WzNdLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZmRlZiBVU0VfUlRFXHJcbiAgICAgICAgdmVjNCBtdlBvc2l0aW9uID0gcnRlTG9jYWxQb3NpdGlvbjtcclxuICAgICNlbHNlXHJcbiAgICAgICAgdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xyXG4gICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICBtdlBvc2l0aW9uLnh5eiA9IHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKG12UG9zaXRpb24sIHRQaXZvdEhpZ2gsIHRTY2FsZSwgdFF1YXRlcm5pb24pICsgdFBpdm90SGlnaC54eXogKyB0VHJhbnNsYXRpb24ueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG4gICAgICAgICAgICBtdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgI2VuZGlmXHJcbiAgICBcclxuICAgIG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgXHJcbiAgICAjaWYgZGVmaW5lZChCSUxMQk9BUkQpXHJcbiAgICAgICAgZmxvYXQgZGl2ID0gMS47XHJcbiAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogKHZpZXdNYXRyaXggKiB2ZWM0KG1vZGVsTWF0cml4WzNdLnh5eiwgMS4wKSArIHZlYzQocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgMC4sIDAuMCkpO1xyXG4gICAgI2VsaWYgZGVmaW5lZChCSUxMQk9BUkRfU0NSRUVOKVxyXG4gICAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqICh2aWV3TWF0cml4ICogdmVjNChtb2RlbE1hdHJpeFszXS54eXosIDEuMCkpO1xyXG4gICAgICAgIGZsb2F0IGRpdiA9IGdsX1Bvc2l0aW9uLnc7XHJcbiAgICAgICAgZ2xfUG9zaXRpb24gLz0gZ2xfUG9zaXRpb24udztcclxuICAgICAgICBnbF9Qb3NpdGlvbi54eSArPSBwb3NpdGlvbi54eSAqIGJpbGxib2FyZFBpeGVsT2Zmc2V0U2l6ZS56dyAqIDIuICsgYmlsbGJvYXJkUGl4ZWxPZmZzZXRTaXplLnh5ICogMi47XHJcbiAgICAjZWxzZVxyXG4gICAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAjZW5kaWZcclxuXHJcblxyXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XHJcblx0Ly8gI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+IENPTU1FTlRFRCBDSFVOS1xyXG4gICAgI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXHJcbiAgICAgICAgI2lmIGRlZmluZWQoQklMTEJPQVJEKSB8fCBkZWZpbmVkKEJJTExCT0FSRF9TQ1JFRU4pXHJcbiAgICAgICAgICAgIHZlYzQgbW92ZWxWaWV3UHJvamVjdGlvbiA9IGdsX1Bvc2l0aW9uICogZGl2O1xyXG4gICAgICAgICAgICB2Q2xpcFBvc2l0aW9uID0gLSAoaW52UHJvamVjdGlvbiAqIG1vdmVsVmlld1Byb2plY3Rpb24pLnh5ejtcclxuICAgICAgICAjZWxzZVxyXG5cdCAgICAgICAgdkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxyXG59XHJcbmBcclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVCYXNpY0ZyYWcgPSAvKiBnbHNsICovIGBcclxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XHJcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcclxuI2lmbmRlZiBGTEFUX1NIQURFRFxyXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xyXG4jZW5kaWZcclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cclxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cclxudm9pZCBtYWluKCkge1xyXG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XHJcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XHJcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cclxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xyXG5cdC8vIGFjY3VtdWxhdGlvbiAoYmFrZWQgaW5kaXJlY3QgbGlnaHRpbmcgb25seSlcclxuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXHJcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7XHJcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eSAqIFJFQ0lQUk9DQUxfUEk7XHJcblx0I2Vsc2VcclxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTtcclxuXHQjZW5kaWZcclxuXHQvLyBtb2R1bGF0aW9uXHJcblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxyXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xyXG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcclxuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxyXG5cdC8vICNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+IENPTU1FTlRFRCBDSFVOS1xyXG5cdCNpZmRlZiBPUEFRVUVcclxuXHRcdGRpZmZ1c2VDb2xvci5hID0gMS4wO1xyXG5cdCNlbmRpZlxyXG5cclxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL3RocmVlLmpzL3B1bGwvMjI0MjVcclxuXHQjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxyXG5cdFx0ZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XHJcblx0I2VuZGlmXHJcblxyXG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQgKiBkaWZmdXNlQ29sb3IuYSwgZGlmZnVzZUNvbG9yLmEgKTtcclxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XHJcbn1cclxuYFxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cclxuaW1wb3J0IHsgc3BlY2tsZUJhc2ljVmVydCB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLWJhc2ljLXZlcnQuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVCYXNpY0ZyYWcgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1iYXNpYy1mcmFnLmpzJ1xyXG5pbXBvcnQge1xyXG4gIFNoYWRlckxpYixcclxuICBWZWN0b3IzLFxyXG4gIE1hdGVyaWFsLFxyXG4gIHR5cGUgSVVuaWZvcm0sXHJcbiAgVmVjdG9yMixcclxuICB0eXBlIE1lc2hCYXNpY01hdGVyaWFsUGFyYW1ldGVycyxcclxuICBTY2VuZSxcclxuICBDYW1lcmEsXHJcbiAgQnVmZmVyR2VvbWV0cnksXHJcbiAgT2JqZWN0M0QsXHJcbiAgVmVjdG9yNFxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBNYXRyaXg0IH0gZnJvbSAndGhyZWUnXHJcblxyXG5pbXBvcnQgeyBFeHRlbmRlZE1lc2hCYXNpY01hdGVyaWFsLCB0eXBlIFVuaWZvcm1zIH0gZnJvbSAnLi9TcGVja2xlTWF0ZXJpYWwuanMnXHJcbmltcG9ydCB0eXBlIHsgU3BlY2tsZVdlYkdMUmVuZGVyZXIgfSBmcm9tICcuLi9vYmplY3RzL1NwZWNrbGVXZWJHTFJlbmRlcmVyLmpzJ1xyXG5cclxuY29uc3QgbWF0QnVmZjogTWF0cml4NCA9IG5ldyBNYXRyaXg0KClcclxuY29uc3QgdmVjMkJ1ZmYwOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoKVxyXG5jb25zdCB2ZWMyQnVmZjE6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpXHJcbmNvbnN0IHZlYzJCdWZmMjogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKClcclxuXHJcbmV4cG9ydCB0eXBlIEJpbGxib2FyZGluZ1R5cGUgPSAnd29ybGQnIHwgJ3NjcmVlbidcclxuXHJcbmNsYXNzIFNwZWNrbGVCYXNpY01hdGVyaWFsIGV4dGVuZHMgRXh0ZW5kZWRNZXNoQmFzaWNNYXRlcmlhbCB7XHJcbiAgcHJvdGVjdGVkIF9iaWxsYm9hcmRQaXhlbFNpemU6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpXHJcbiAgcHJvdGVjdGVkIF9iaWxsYm9hcmRQaXhlbE9mZnNldDogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKClcclxuXHJcbiAgcHJvdGVjdGVkIGdldCB2ZXJ0ZXhQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZUJhc2ljVmVydFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBmcmFnbWVudFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlQmFzaWNGcmFnXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IGJhc2VVbmlmb3JtcygpOiB7IFt1bmlmb3JtOiBzdHJpbmddOiBJVW5pZm9ybSB9IHtcclxuICAgIHJldHVybiBTaGFkZXJMaWIuYmFzaWMudW5pZm9ybXNcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgdW5pZm9ybXNEZWYoKTogVW5pZm9ybXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdVZpZXdlcl9oaWdoOiBuZXcgVmVjdG9yMygpLFxyXG4gICAgICB1Vmlld2VyX2xvdzogbmV3IFZlY3RvcjMoKSxcclxuICAgICAgdVRyYW5zZm9ybXM6IFtuZXcgTWF0cml4NCgpXSxcclxuICAgICAgdFRyYW5zZm9ybXM6IG51bGwsXHJcbiAgICAgIG9iakNvdW50OiAxLFxyXG4gICAgICBpbnZQcm9qZWN0aW9uOiBuZXcgTWF0cml4NCgpLFxyXG4gICAgICBiaWxsYm9hcmRQaXhlbE9mZnNldFNpemU6IG5ldyBWZWN0b3I0KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYmlsbGJvYXJkUGl4ZWxTaXplKCk6IFZlY3RvcjIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JpbGxib2FyZFBpeGVsU2l6ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBiaWxsYm9hcmRQaXhlbFNpemUodmFsdWU6IFZlY3RvcjIpIHtcclxuICAgIHRoaXMuX2JpbGxib2FyZFBpeGVsU2l6ZS5jb3B5KHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiaWxsYm9hcmRQaXhlT2Zmc2V0KCk6IFZlY3RvcjIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JpbGxib2FyZFBpeGVsT2Zmc2V0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGJpbGxib2FyZFBpeGVsT2Zmc2V0KHZhbHVlOiBWZWN0b3IyKSB7XHJcbiAgICB0aGlzLl9iaWxsYm9hcmRQaXhlbE9mZnNldC5jb3B5KHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocGFyYW1ldGVyczogTWVzaEJhc2ljTWF0ZXJpYWxQYXJhbWV0ZXJzLCBkZWZpbmVzOiBzdHJpbmdbXSA9IFtdKSB7XHJcbiAgICBzdXBlcihwYXJhbWV0ZXJzKVxyXG4gICAgdGhpcy5pbml0KGRlZmluZXMpXHJcbiAgfVxyXG5cclxuICAvKiogV2UgbmVlZCBhIHVuaXF1ZSBrZXkgcGVyIHByb2dyYW0gKi9cclxuICBwdWJsaWMgY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvcHkoc291cmNlOiBNYXRlcmlhbCkge1xyXG4gICAgc3VwZXIuY29weShzb3VyY2UpXHJcbiAgICB0aGlzLmNvcHlGcm9tKHNvdXJjZSlcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmFzdENvcHkoZnJvbTogTWF0ZXJpYWwsIHRvOiBNYXRlcmlhbCkge1xyXG4gICAgc3VwZXIuZmFzdENvcHkoZnJvbSwgdG8pXHJcbiAgICBjb25zdCB0b1N0YW5kYXJkID0gdG8gYXMgU3BlY2tsZUJhc2ljTWF0ZXJpYWxcclxuICAgIGNvbnN0IGZyb21TdGFuZGFyZCA9IGZyb20gYXMgU3BlY2tsZUJhc2ljTWF0ZXJpYWxcclxuICAgIHRvU3RhbmRhcmQuY29sb3IuY29weShmcm9tU3RhbmRhcmQuY29sb3IpXHJcbiAgICB0by51c2VyRGF0YS5iaWxsYm9hcmRQaXhlbE9mZnNldFNpemUudmFsdWUuY29weShcclxuICAgICAgZnJvbS51c2VyRGF0YS5iaWxsYm9hcmRQaXhlbE9mZnNldFNpemUudmFsdWVcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRCaWxsYm9hcmRpbmcodHlwZTogQmlsbGJvYXJkaW5nVHlwZSB8IG51bGwpIHtcclxuICAgIC8qKiBDcmVhdGUgdGhlIGRlZmluZSBvYmplY3QgaWYgbm90IHRoZXJlICovXHJcbiAgICBpZiAoIXRoaXMuZGVmaW5lcykgdGhpcy5kZWZpbmVzID0ge31cclxuICAgIC8qKiBDbGVhciBhbGwgYmlsbGJvYXJkaW5nIGRlZmluZXMgKi9cclxuICAgIGRlbGV0ZSB0aGlzLmRlZmluZXNbJ0JJTExCT0FSRF9TQ1JFRU4nXVxyXG4gICAgZGVsZXRlIHRoaXMuZGVmaW5lc1snQklMTEJPQVJEJ11cclxuXHJcbiAgICBpZiAoIXR5cGUpIHJldHVyblxyXG5cclxuICAgIGlmICh0eXBlID09PSAnd29ybGQnKSB0aGlzLmRlZmluZXNbJ0JJTExCT0FSRCddID0gJyAnXHJcbiAgICBpZiAodHlwZSA9PT0gJ3NjcmVlbicpIHRoaXMuZGVmaW5lc1snQklMTEJPQVJEX1NDUkVFTiddID0gJyAnXHJcbiAgfVxyXG5cclxuICAvKiogQ2FsbGVkIGJ5IHRocmVlLmpzIHJlbmRlciBsb29wICovXHJcbiAgcHVibGljIG9uQmVmb3JlUmVuZGVyKFxyXG4gICAgX3RoaXM6IFNwZWNrbGVXZWJHTFJlbmRlcmVyLFxyXG4gICAgX3NjZW5lOiBTY2VuZSxcclxuICAgIGNhbWVyYTogQ2FtZXJhLFxyXG4gICAgX2dlb21ldHJ5OiBCdWZmZXJHZW9tZXRyeSxcclxuICAgIG9iamVjdDogT2JqZWN0M0RcclxuICApIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kZWZpbmVzICYmXHJcbiAgICAgICh0aGlzLmRlZmluZXNbJ0JJTExCT0FSRCddIHx8IHRoaXMuZGVmaW5lc1snQklMTEJPQVJEX1NDUkVFTiddKVxyXG4gICAgKSB7XHJcbiAgICAgIG1hdEJ1ZmYuY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KClcclxuICAgICAgdGhpcy51c2VyRGF0YS5pbnZQcm9qZWN0aW9uLnZhbHVlLmNvcHkobWF0QnVmZilcclxuICAgICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kZWZpbmVzICYmIHRoaXMuZGVmaW5lc1snQklMTEJPQVJEX1NDUkVFTiddKSB7XHJcbiAgICAgIF90aGlzLmdldERyYXdpbmdCdWZmZXJTaXplKHZlYzJCdWZmMClcclxuICAgICAgY29uc3QgYmlsbGJvYXJkUGl4ZWxPZmZzZXROREMgPSB2ZWMyQnVmZjEuc2V0KFxyXG4gICAgICAgIHRoaXMuX2JpbGxib2FyZFBpeGVsT2Zmc2V0LngsXHJcbiAgICAgICAgdGhpcy5fYmlsbGJvYXJkUGl4ZWxPZmZzZXQueVxyXG4gICAgICApXHJcbiAgICAgIGNvbnN0IGJpbGxib2FyZFBpeGVsU2l6ZU5EQyA9IHZlYzJCdWZmMi5zZXQoXHJcbiAgICAgICAgdGhpcy5fYmlsbGJvYXJkUGl4ZWxTaXplLngsXHJcbiAgICAgICAgdGhpcy5fYmlsbGJvYXJkUGl4ZWxTaXplLnlcclxuICAgICAgKVxyXG4gICAgICBiaWxsYm9hcmRQaXhlbE9mZnNldE5EQy5kaXZpZGUodmVjMkJ1ZmYwKVxyXG4gICAgICBiaWxsYm9hcmRQaXhlbFNpemVOREMuZGl2aWRlKHZlYzJCdWZmMClcclxuICAgICAgdGhpcy51c2VyRGF0YS5iaWxsYm9hcmRQaXhlbE9mZnNldFNpemUudmFsdWUuc2V0KFxyXG4gICAgICAgIGJpbGxib2FyZFBpeGVsT2Zmc2V0TkRDLngsXHJcbiAgICAgICAgYmlsbGJvYXJkUGl4ZWxPZmZzZXROREMueSxcclxuICAgICAgICBiaWxsYm9hcmRQaXhlbFNpemVOREMueCxcclxuICAgICAgICBiaWxsYm9hcmRQaXhlbFNpemVOREMueVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGVmaW5lcyAmJiB0aGlzLmRlZmluZXNbJ1VTRV9SVEUnXSkge1xyXG4gICAgICBvYmplY3QubW9kZWxWaWV3TWF0cml4LmNvcHkoX3RoaXMuUlRFQnVmZmVycy5ydGVWaWV3TW9kZWxNYXRyaXgpXHJcbiAgICAgIHRoaXMudXNlckRhdGEudVZpZXdlcl9sb3cudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnZpZXdlckxvdylcclxuICAgICAgdGhpcy51c2VyRGF0YS51Vmlld2VyX2hpZ2gudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnZpZXdlckhpZ2gpXHJcbiAgICAgIHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVja2xlQmFzaWNNYXRlcmlhbFxyXG4iLCJpbXBvcnQgeyBzcGVja2xlR2hvc3RWZXJ0IH0gZnJvbSAnLi9zaGFkZXJzL3NwZWNrbGUtZ2hvc3QtdmVydC5qcydcclxuaW1wb3J0IHsgc3BlY2tsZUdob3N0RnJhZyB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLWdob3N0LWZyYWcuanMnXHJcbmltcG9ydCBTcGVja2xlQmFzaWNNYXRlcmlhbCBmcm9tICcuL1NwZWNrbGVCYXNpY01hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgdHlwZSB7IE1lc2hCYXNpY01hdGVyaWFsUGFyYW1ldGVycyB9IGZyb20gJ3RocmVlJ1xyXG5cclxuY2xhc3MgU3BlY2tsZUdob3N0TWF0ZXJpYWwgZXh0ZW5kcyBTcGVja2xlQmFzaWNNYXRlcmlhbCB7XHJcbiAgcHJvdGVjdGVkIGdldCB2ZXJ0ZXhQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZUdob3N0VmVydFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBmcmFnbWVudFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlR2hvc3RGcmFnXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzOiBNZXNoQmFzaWNNYXRlcmlhbFBhcmFtZXRlcnMsIGRlZmluZXM6IHN0cmluZ1tdID0gW10pIHtcclxuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGRlZmluZXMpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVja2xlR2hvc3RNYXRlcmlhbFxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZVRleHRWZXJ0ID0gLyogZ2xzbCAqLyBgXHJcbiNpbmNsdWRlIDxjb21tb24+XHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICB1bmlmb3JtIHZlYzMgdVZpZXdlcl9oaWdoO1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfbG93O1xyXG4jZW5kaWZcclxuXHJcbiNpZiBkZWZpbmVkKEJJTExCT0FSRCkgfHwgZGVmaW5lZChCSUxMQk9BUkRfU0NSRUVOKVxyXG4gICAgdW5pZm9ybSBtYXQ0IGludlByb2plY3Rpb247XHJcbiNlbmRpZlxyXG5cclxuI2lmZGVmIEJJTExCT0FSRF9TQ1JFRU5cclxuICAgIHVuaWZvcm0gdmVjNCBiaWxsYm9hcmRQaXhlbE9mZnNldFNpemU7XHJcbiNlbmRpZlxyXG5cclxuXHJcblxyXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cclxuXHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICBoaWdocCB2ZWM0IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKGluIGhpZ2hwIHZlYzMgcG9zaXRpb25fbG93LCBpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2hpZ2gsIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19sb3csIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19oaWdoKXtcclxuICAgICAgICAvKiBcclxuICAgICAgICBTb3VyY2UgaHR0cHM6Ly9naXRodWIuY29tL3ZpcnR1YWxnbG9iZWJvb2svT3Blbkdsb2JlL2Jsb2IvbWFzdGVyL1NvdXJjZS9FeGFtcGxlcy9DaGFwdGVyMDUvSml0dGVyL0dQVVJlbGF0aXZlVG9FeWVEU0ZVTjkwL1NoYWRlcnMvVlMuZ2xzbCBcclxuICAgICAgICBOb3RlIGhlcmUsIHdlJ3JlIHN0b3JpbmcgdGhlIGhpZ2ggcGFydCBvZiB0aGUgcG9zaXRpb24gZW5jb2RpbmcgaW5zaWRlIHRocmVlJ3MgZGVmYXVsdCAncG9zaXRpb24nIGF0dHJpYnV0ZSBidWZmZXIgc28gd2UgYXZvaWQgcmVkdW5kYW5jeSBcclxuICAgICAgICAqL1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdDEgPSBwb3NpdGlvbl9sb3cueHl6IC0gcmVsYXRpdmVUb19sb3cueHl6O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgZSA9IHQxIC0gcG9zaXRpb25fbG93Lnh5ejtcclxuICAgICAgICAvKiogVGhpcyBpcyByZWR1bmFudCwgYnV0IG5lY2Vzc2FyeSBhcyBhIHdvcmthcm91bmQgZm9yIEFwcGxlIHBsYXRmb3JtcyAqL1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHggPSBwb3NpdGlvbl9oaWdoLnggLSByZWxhdGl2ZVRvX2hpZ2gueDtcclxuICAgICAgICBoaWdocCBmbG9hdCB5ID0gcG9zaXRpb25faGlnaC55IC0gcmVsYXRpdmVUb19oaWdoLnk7XHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeiA9IHBvc2l0aW9uX2hpZ2gueiAtIHJlbGF0aXZlVG9faGlnaC56O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdiA9IHZlYzMoeCwgeSwgeik7XHJcbiAgICAgICAgLyoqIEVuZCBvZiByZWR1bmRhbnQgcGFydCAqL1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdDIgPSAoKC1yZWxhdGl2ZVRvX2xvdyAtIGUpICsgKHBvc2l0aW9uX2xvdy54eXogLSAodDEgLSBlKSkpICsgdjtcclxuICAgICAgICBoaWdocCB2ZWMzIGhpZ2hEaWZmZXJlbmNlID0gdDEgKyB0MjtcclxuICAgICAgICBoaWdocCB2ZWMzIGxvd0RpZmZlcmVuY2UgPSB0MiAtIChoaWdoRGlmZmVyZW5jZS54eXogLSB0MS54eXopO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGhpZ2hwIHZlYzMgcG9zaXRpb24gPSBoaWdoRGlmZmVyZW5jZS54eXogKyBsb3dEaWZmZXJlbmNlLnh5ejtcclxuICAgICAgICByZXR1cm4gdmVjNChwb3NpdGlvbiwgMS4pO1xyXG4gICAgfVxyXG4jZW5kaWZcclxuXHJcblxyXG4jaWZkZWYgQkFUQ0hFRF9URVhUXHJcbiAgICB2YXJ5aW5nIGZsb2F0IHZHcmFkaWVudEluZGV4O1xyXG4jZW5kaWZcclxuXHJcbnZvaWQgbWFpbigpIHtcclxuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPG1vcnBoY29sb3JfdmVydGV4PlxyXG5cdCNpZiBkZWZpbmVkICggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQgKCBVU0VfU0tJTk5JTkcgKVxyXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cclxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XHJcblx0XHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxyXG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxyXG4gICAgICAgIC8vICNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4gLy8gQ09NTUVOVEVEIENIVU5LXHJcbiAgICAgICAgdmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDtcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuXHJcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgaW4gbGlldSBvZiBhIHBlci1pbnN0YW5jZSBub3JtYWwtbWF0cml4XHJcbiAgICAgICAgICAgIC8vIHNoZWFyIHRyYW5zZm9ybXMgaW4gdGhlIGluc3RhbmNlIG1hdHJpeCBhcmUgbm90IHN1cHBvcnRlZFxyXG4gICAgICAgICAgICBtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBuZWdhdGl2ZSBzY2FsaW5nLCB3ZSBmbGlwIHRoZSBub3JtYWwgKi9cclxuICAgICAgICAgICAgZmxvYXQgc2lnbkRldCA9IHNpZ24oZG90KG1bMF0sIGNyb3NzKG1bMV0sIG1bMl0pKSk7XHJcbiAgICAgICAgICAgIC8vIE9wdGlvbmFsIGZhbGxiYWNrOiB0cmVhdCAwIGFzICsxXHJcbiAgICAgICAgICAgIHNpZ25EZXQgPSBzaWduRGV0ICsgKDEuMCAtIGFicyhzaWduRGV0KSk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsICo9IHNpZ25EZXQ7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAjaWZkZWYgRkxJUF9TSURFRFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmZGVmIFVTRV9UQU5HRU5UXHJcbiAgICAgICAgICAgIHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcclxuICAgICAgICAgICAgI2lmZGVmIEZMSVBfU0lERURcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuXHQjZW5kaWZcclxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cclxuXHJcbiAgICB2ZWM0IG12UG9zaXRpb247XHJcbiAgICBtYXQ0IG1hdHJpeDtcclxuXHJcbiAgICAjaWZkZWYgQkFUQ0hFRF9URVhUXHJcbiAgICAgICAgbWF0cml4ID0gbWF0NChcclxuICAgICAgICAgICAgdHJvaWthQmF0Y2hUZXhlbCgwLjApLCBcclxuICAgICAgICAgICAgdHJvaWthQmF0Y2hUZXhlbCgxLjApLCBcclxuICAgICAgICAgICAgdHJvaWthQmF0Y2hUZXhlbCgyLjApLCBcclxuICAgICAgICAgICAgdHJvaWthQmF0Y2hUZXhlbCgzLjApXHJcbiAgICAgICAgKTtcclxuICAgICNlbHNlXHJcbiAgICAgICAgbWF0cml4ID0gbW9kZWxNYXRyaXg7XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgIC8qIFdlIHN0b3JlIHRoZSBoaWdoIHBhcnQgbm9ybWFsbHkgYXMgdGhlIHRyYW5zbGF0aW9uIGNvbXBvbmVudCAqL1xyXG4gICAgICAgIHZlYzMgdHJhbnNsYXRpb25IaWdoID0gbWF0cml4WzNdLnh5ejtcclxuICAgICAgICAvKiogV2Ugc3RvcmUgdGhlIGxvdyBwYXJ0IG9mIHRoZSB0cmFuc2xhdGlvbiBpbiByb3c0IG9mdGhlIG1hdHJpeCAqL1xyXG4gICAgICAgIHZlYzMgdHJhbnNsYXRpb25Mb3cgPSB2ZWMzKG1hdHJpeFswXVszXSwgbWF0cml4WzFdWzNdLCBtYXRyaXhbMl1bM10pO1xyXG4gICAgICAgIGhpZ2hwIHZlYzQgcnRlVHJhbnNsYXRpb24gPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbih0cmFuc2xhdGlvbkxvdywgdHJhbnNsYXRpb25IaWdoLCB1Vmlld2VyX2xvdywgdVZpZXdlcl9oaWdoKTtcclxuICAgICAgICAjaWYgZGVmaW5lZChCSUxMQk9BUkQpXHJcbiAgICAgICAgICAgIG12UG9zaXRpb24gPSAobW9kZWxWaWV3TWF0cml4ICogcnRlVHJhbnNsYXRpb24gKyB2ZWM0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIDAuLCAwLjApKTtcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgbXZQb3NpdGlvbiA9IHZlYzQobWF0MyhtYXRyaXgpICogdHJhbnNmb3JtZWQgKyBydGVUcmFuc2xhdGlvbi54eXosIDEuKTtcclxuICAgICAgICAgICAgIG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgI2Vsc2VcclxuICAgICAgICAjaWYgZGVmaW5lZChCSUxMQk9BUkQpIHx8IGRlZmluZWQoQklMTEJPQVJEX1NDUkVFTilcclxuICAgICAgICAgICAgdmVjMyBiaWxsYm9hcmRQb3NpdGlvbiA9IG1hdHJpeFszXS54eXo7XHJcbiAgICAgICAgICAgICNpZiBkZWZpbmVkKEJJTExCT0FSRF9TQ1JFRU4pXHJcbiAgICAgICAgICAgICAgICBtdlBvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqICh2aWV3TWF0cml4ICogdmVjNChiaWxsYm9hcmRQb3NpdGlvbiwgMS4wKSk7XHJcbiAgICAgICAgICAgICAgICBmbG9hdCBkaXYgPSBtdlBvc2l0aW9uLnc7XHJcbiAgICAgICAgICAgICAgICBtdlBvc2l0aW9uIC89IG12UG9zaXRpb24udztcclxuICAgICAgICAgICAgICAgIC8vIFBpeGVsIHZhbHVlcyBhcmUgY29tcHV0ZWQgbGlrZSBzb1xyXG4gICAgICAgICAgICAgICAgLy8gd2luZG93WCA9ICgobmRjLnggKyAxKSAvIDIpICogd2lkdGg7XHJcbiAgICAgICAgICAgICAgICAvLyB3aW5kb3dZID0gKChuZGMueSArIDEpIC8gMikgKiBoZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgd2h5IHdlIG11bHRpcGx5IGJ5IDIuXHJcbiAgICAgICAgICAgICAgICBtdlBvc2l0aW9uLnh5ICs9IHBvc2l0aW9uLnh5ICogYmlsbGJvYXJkUGl4ZWxPZmZzZXRTaXplLnp3ICogMi4gKyBiaWxsYm9hcmRQaXhlbE9mZnNldFNpemUueHkgKiAyLjtcclxuICAgICAgICAgICAgICAgIC8qKiBCYWNrIHRvIHZpZXcgc3BhY2UgZm9yIGNvbnZlbmllbmNlICovXHJcbiAgICAgICAgICAgICAgICBtdlBvc2l0aW9uICo9IGRpdjtcclxuICAgICAgICAgICAgICAgIG12UG9zaXRpb24gPSBpbnZQcm9qZWN0aW9uICogbXZQb3NpdGlvbjtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIG12UG9zaXRpb24gPSAodmlld01hdHJpeCAqIHZlYzQoYmlsbGJvYXJkUG9zaXRpb24sIDEuKSArIHZlYzQocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgMC4sIDAuMCkpO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgbXZQb3NpdGlvbiA9IHZpZXdNYXRyaXggKiBtYXRyaXggKiB2ZWM0KHRyYW5zZm9ybWVkLCAxLik7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWZkZWYgQkFUQ0hFRF9URVhUXHJcbiAgICAgICAgdkdyYWRpZW50SW5kZXggPSB0cm9pa2FCYXRjaFRleGVsKDYuKS53O1xyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcclxuXHJcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4gXHJcblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cclxufVxyXG5gXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlVGV4dEZyYWcgPSAvKiBnbHNsICovIGBcclxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XHJcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcclxuI2lmbmRlZiBGTEFUX1NIQURFRFxyXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xyXG4jZW5kaWZcclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cclxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cclxuXHJcbiNpZmRlZiBCQVRDSEVEX1RFWFRcclxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudFJhbXA7XHJcblx0dmFyeWluZyBmbG9hdCB2R3JhZGllbnRJbmRleDtcclxuI2VuZGlmXHJcblxyXG52b2lkIG1haW4oKSB7XHJcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cclxuXHR2ZWM0IGRpZmZ1c2VDb2xvcl9SR0IgPSB2ZWM0KGRpZmZ1c2UsIG9wYWNpdHkpO1xyXG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yX1JHQjtcclxuXHQjaWZkZWYgQkFUQ0hFRF9URVhUXHJcblx0XHR2ZWM0IGRpZmZ1c2VDb2xvcl9UZXggPSB2ZWM0KCB0ZXh0dXJlMkQoZ3JhZGllbnRSYW1wLCB2ZWMyKHZHcmFkaWVudEluZGV4LCAwLikpLnJnYiwgb3BhY2l0eSApO1xyXG5cdFx0ZGlmZnVzZUNvbG9yID0gbWl4KGRpZmZ1c2VDb2xvcl9SR0IsIGRpZmZ1c2VDb2xvcl9UZXgsIGZsb2F0KHZHcmFkaWVudEluZGV4ID4gMC4pKTtcclxuXHQjZW5kaWZcclxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxyXG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XHJcblx0Ly8gYWNjdW11bGF0aW9uIChiYWtlZCBpbmRpcmVjdCBsaWdodGluZyBvbmx5KVxyXG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcclxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcclxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5ICogUkVDSVBST0NBTF9QSTtcclxuXHQjZWxzZVxyXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZlYzMoIDEuMCApO1xyXG5cdCNlbmRpZlxyXG5cdC8vIG1vZHVsYXRpb25cclxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XHJcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7XHJcblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xyXG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XHJcbn1cclxuYFxyXG4iLCJpbXBvcnQgeyBzcGVja2xlVGV4dFZlcnQgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS10ZXh0LXZlcnQuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVUZXh0RnJhZyB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLXRleHQtZnJhZy5qcydcclxuaW1wb3J0IHsgVmVjdG9yMiwgTWF0ZXJpYWwsIFRleHR1cmUsIE5lYXJlc3RGaWx0ZXIgfSBmcm9tICd0aHJlZSdcclxuXHJcbmltcG9ydCB7IHR5cGUgVW5pZm9ybXMgfSBmcm9tICcuL1NwZWNrbGVNYXRlcmlhbC5qcydcclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuLy9AdHMtaWdub3JlXHJcbmltcG9ydCB7IGNyZWF0ZURlcml2ZWRNYXRlcmlhbCB9IGZyb20gJ3Ryb2lrYS10aHJlZS11dGlscydcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4vL0B0cy1pZ25vcmVcclxuaW1wb3J0IHsgY3JlYXRlVGV4dERlcml2ZWRNYXRlcmlhbCB9IGZyb20gJ3Ryb2lrYS10aHJlZS10ZXh0J1xyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbi8vQHRzLWlnbm9yZVxyXG5pbXBvcnQgeyB1bmlmb3JtVG9WYXJ5aW5nIH0gZnJvbSAndHJvaWthLXRocmVlLXRleHQvc3JjL0JhdGNoZWRUZXh0LmpzJ1xyXG5pbXBvcnQgU3BlY2tsZUJhc2ljTWF0ZXJpYWwgZnJvbSAnLi9TcGVja2xlQmFzaWNNYXRlcmlhbC5qcydcclxuXHJcbmNsYXNzIFNwZWNrbGVUZXh0TWF0ZXJpYWwgZXh0ZW5kcyBTcGVja2xlQmFzaWNNYXRlcmlhbCB7XHJcbiAgcHVibGljIHNldE1hdHJpeFRleHR1cmU6ICh0ZXh0dXJlOiBUZXh0dXJlKSA9PiB2b2lkXHJcblxyXG4gIHByb3RlY3RlZCBnZXQgdmVydGV4UHJvZ3JhbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHNwZWNrbGVUZXh0VmVydFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBmcmFnbWVudFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlVGV4dEZyYWdcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgdW5pZm9ybXNEZWYoKTogVW5pZm9ybXMge1xyXG4gICAgcmV0dXJuIHsgLi4uc3VwZXIudW5pZm9ybXNEZWYsIGdyYWRpZW50UmFtcDogbnVsbCB9XHJcbiAgfVxyXG5cclxuICAvKiogV2UgbmVlZCBhIHVuaXF1ZSBrZXkgcGVyIHByb2dyYW0gKi9cclxuICBwdWJsaWMgY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNvcHlDdXN0b21Vbmlmb3JtcyhtYXRlcmlhbDogTWF0ZXJpYWwpIHtcclxuICAgIC8qKiBXZSByZWJpbmQgdGhlIHVuaWZvcm1zICovXHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy51c2VyRGF0YSkge1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICBtYXRlcmlhbC51bmlmb3Jtc1trXSA9IHRoaXMudXNlckRhdGFba11cclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGdldERlcml2ZWRNYXRlcmlhbCgpIHtcclxuICAgIGNvbnN0IGRlcml2ZWQgPSBjcmVhdGVUZXh0RGVyaXZlZE1hdGVyaWFsKHRoaXMpXHJcbiAgICB0aGlzLmNvcHlDdXN0b21Vbmlmb3JtcyhkZXJpdmVkKVxyXG4gICAgcmV0dXJuIGRlcml2ZWRcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgRGF0YSB0ZXh0dXJlIHBhY2tpbmcgc3RyYXRlZ3k6XHJcblxyXG4gICMgQ29tbW9uOlxyXG4gIDAtMTU6IG1hdHJpeFxyXG4gIDE2LTE5OiB1VHJvaWthVG90YWxCb3VuZHNcclxuICAyMC0yMzogdVRyb2lrYUNsaXBSZWN0XHJcbiAgMjQ6IGRpZmZ1c2UgKGNvbG9yL291dGxpbmVDb2xvcilcclxuICAyNTogdVRyb2lrYUZpbGxPcGFjaXR5IChmaWxsT3BhY2l0eS9vdXRsaW5lT3BhY2l0eSlcclxuICAyNjogdVRyb2lrYUN1cnZlUmFkaXVzXHJcbiAgMjc6IDxibGFuaz5cclxuXHJcbiAgIyBNYWluOlxyXG4gIDI4OiB1VHJvaWthU3Ryb2tlV2lkdGhcclxuICAyOTogdVRyb2lrYVN0cm9rZUNvbG9yXHJcbiAgMzA6IHVUcm9pa2FTdHJva2VPcGFjaXR5XHJcblxyXG4gICMgT3V0bGluZTpcclxuICAyOC0yOTogdVRyb2lrYVBvc2l0aW9uT2Zmc2V0XHJcbiAgMzA6IHVUcm9pa2FFZGdlT2Zmc2V0XHJcbiAgMzE6IHVUcm9pa2FCbHVyUmFkaXVzXHJcbiAgKi9cclxuICAvKiogU2FkbHksIHRyb2lrYSBkb2VzIG5vdCBleHBvcnQgdGhpcyBmb3Igbm8gZ29vZCByZWFzb24gc28gd2UgbmVlZSB0byBjb3B5IGl0IG92ZXIgKi9cclxuICBwdWJsaWMgZ2V0RGVyaXZlZEJhdGNoZWRNYXRlcmlhbCgpIHtcclxuICAgIGNvbnN0IHRleFVuaWZvcm1OYW1lID0gJ3VUcm9pa2FNYXRyaWNlc1RleHR1cmUnXHJcbiAgICBjb25zdCB0ZXhTaXplVW5pZm9ybU5hbWUgPSAndVRyb2lrYU1hdHJpY2VzVGV4dHVyZVNpemUnXHJcbiAgICBjb25zdCBtZW1iZXJJbmRleEF0dHJOYW1lID0gJ2FUcm9pa2FUZXh0QmF0Y2hNZW1iZXJJbmRleCdcclxuICAgIGNvbnN0IGZsb2F0c1Blck1lbWJlciA9IDMyXHJcbiAgICAvLyBEdWUgdG8gaG93IHZlcnRleFRyYW5zZm9ybSBnZXRzIGluamVjdGVkLCB0aGUgbWF0cml4IHRyYW5zZm9ybXMgbXVzdCBoYXBwZW5cclxuICAgIC8vIGluIHRoZSBiYXNlIG1hdGVyaWFsIG9mIFRleHREZXJpdmVkTWF0ZXJpYWwsIGJ1dCBvdGhlciB0cmFuc2Zvcm1zIHRvIGl0c1xyXG4gICAgLy8gc2hhZGVyIG11c3QgY29tZSBhZnRlciwgc28gd2Ugc2FuZHdpY2ggaXQgYmV0d2VlbiB0d28gZGVyaXZhdGlvbnMuXHJcblxyXG4gICAgLy8gVHJhbnNmb3JtIHRoZSB2ZXJ0ZXggcG9zaXRpb25cclxuICAgIGxldCBiYXRjaE1hdGVyaWFsID0gY3JlYXRlRGVyaXZlZE1hdGVyaWFsKHRoaXMsIHtcclxuICAgICAgY2hhaW5lZDogdHJ1ZSxcclxuICAgICAgdW5pZm9ybXM6IHtcclxuICAgICAgICBbdGV4U2l6ZVVuaWZvcm1OYW1lXTogeyB2YWx1ZTogbmV3IFZlY3RvcjIoKSB9LFxyXG4gICAgICAgIFt0ZXhVbmlmb3JtTmFtZV06IHsgdmFsdWU6IG51bGwgfVxyXG4gICAgICB9LFxyXG4gICAgICAvLyBsYW5ndWFnZT1HTFNMXHJcbiAgICAgIHZlcnRleERlZnM6IGBcclxuICAgICAgdW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgJHt0ZXhVbmlmb3JtTmFtZX07XHJcbiAgICAgIHVuaWZvcm0gdmVjMiAke3RleFNpemVVbmlmb3JtTmFtZX07XHJcbiAgICAgIGF0dHJpYnV0ZSBmbG9hdCAke21lbWJlckluZGV4QXR0ck5hbWV9O1xyXG5cclxuICAgICAgdmVjNCB0cm9pa2FCYXRjaFRleGVsKGZsb2F0IG9mZnNldCkge1xyXG4gICAgICAgIG9mZnNldCArPSAke21lbWJlckluZGV4QXR0ck5hbWV9ICogJHtmbG9hdHNQZXJNZW1iZXIudG9GaXhlZCgxKX0gLyA0LjA7XHJcbiAgICAgICAgZmxvYXQgdyA9ICR7dGV4U2l6ZVVuaWZvcm1OYW1lfS54O1xyXG4gICAgICAgIHZlYzIgdXYgPSAodmVjMihtb2Qob2Zmc2V0LCB3KSwgZmxvb3Iob2Zmc2V0IC8gdykpICsgMC41KSAvICR7dGV4U2l6ZVVuaWZvcm1OYW1lfTtcclxuICAgICAgICByZXR1cm4gdGV4dHVyZTJEKCR7dGV4VW5pZm9ybU5hbWV9LCB1dik7XHJcbiAgICAgIH1cclxuICAgIGAsXHJcbiAgICAgIC8vIGxhbmd1YWdlPUdMU0wgcHJlZml4PVwidm9pZCBtYWluKCkge1wiIHN1ZmZpeD1cIn1cIlxyXG4gICAgICB2ZXJ0ZXhUcmFuc2Zvcm06IGBcclxuICAgICAgLyoqIFdlIGRvbid0IG5lZWQgdGhpcy4gV2UncmUgdHJhbnNmb3JtaW5nIG91cnNlbHZlcyBpbiBvdXIgc2hhZGVyIHRvIGFsbG93IGZvciBSVEUqL1xyXG4gICAgICAvLyBtYXQ0IG1hdHJpeCA9IG1hdDQoXHJcbiAgICAgIC8vICAgdHJvaWthQmF0Y2hUZXhlbCgwLjApLFxyXG4gICAgICAvLyAgIHRyb2lrYUJhdGNoVGV4ZWwoMS4wKSxcclxuICAgICAgLy8gICB0cm9pa2FCYXRjaFRleGVsKDIuMCksXHJcbiAgICAgIC8vICAgdHJvaWthQmF0Y2hUZXhlbCgzLjApXHJcbiAgICAgIC8vICk7XHJcbiAgICAgIC8vIHBvc2l0aW9uLnh5eiA9IChtYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XHJcbiAgICBgXHJcbiAgICB9KVxyXG5cclxuICAgIC8vIEFkZCB0aGUgdGV4dCBzaGFkZXJzXHJcbiAgICBiYXRjaE1hdGVyaWFsID0gY3JlYXRlVGV4dERlcml2ZWRNYXRlcmlhbChiYXRjaE1hdGVyaWFsKVxyXG5cclxuICAgIC8vIE5vdyBtYWtlIG90aGVyIGNoYW5nZXMgdG8gdGhlIGRlcml2ZWQgdGV4dCBzaGFkZXIgY29kZVxyXG4gICAgYmF0Y2hNYXRlcmlhbCA9IGNyZWF0ZURlcml2ZWRNYXRlcmlhbChiYXRjaE1hdGVyaWFsLCB7XHJcbiAgICAgIGNoYWluZWQ6IHRydWUsXHJcbiAgICAgIHVuaWZvcm1zOiB7XHJcbiAgICAgICAgdVRyb2lrYUlzT3V0bGluZTogeyB2YWx1ZTogZmFsc2UgfVxyXG4gICAgICB9LFxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICBjdXN0b21SZXdyaXRlcihzaGFkZXJzKSB7XHJcbiAgICAgICAgLy8gQ29udmVydCBzb21lIHRleHQgc2hhZGVyIHVuaWZvcm1zIHRvIHZhcnlpbmdzXHJcbiAgICAgICAgY29uc3QgdmFyeWluZ1VuaWZvcm1zID0gW1xyXG4gICAgICAgICAgJ3VUcm9pa2FUb3RhbEJvdW5kcycsXHJcbiAgICAgICAgICAndVRyb2lrYUNsaXBSZWN0JyxcclxuICAgICAgICAgICd1VHJvaWthUG9zaXRpb25PZmZzZXQnLFxyXG4gICAgICAgICAgJ3VUcm9pa2FFZGdlT2Zmc2V0JyxcclxuICAgICAgICAgICd1VHJvaWthQmx1clJhZGl1cycsXHJcbiAgICAgICAgICAndVRyb2lrYVN0cm9rZVdpZHRoJyxcclxuICAgICAgICAgICd1VHJvaWthU3Ryb2tlQ29sb3InLFxyXG4gICAgICAgICAgJ3VUcm9pa2FTdHJva2VPcGFjaXR5JyxcclxuICAgICAgICAgICd1VHJvaWthRmlsbE9wYWNpdHknLFxyXG4gICAgICAgICAgJ3VUcm9pa2FDdXJ2ZVJhZGl1cycsXHJcbiAgICAgICAgICAnZGlmZnVzZSdcclxuICAgICAgICBdXHJcbiAgICAgICAgdmFyeWluZ1VuaWZvcm1zLmZvckVhY2goKHVuaWZvcm1OYW1lKSA9PiB7XHJcbiAgICAgICAgICBzaGFkZXJzID0gdW5pZm9ybVRvVmFyeWluZyhzaGFkZXJzLCB1bmlmb3JtTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBzaGFkZXJzXHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIGxhbmd1YWdlPUdMU0xcclxuICAgICAgdmVydGV4RGVmczogYFxyXG4gICAgICB1bmlmb3JtIGJvb2wgdVRyb2lrYUlzT3V0bGluZTtcclxuICAgICAgdmVjMyB0cm9pa2FGbG9hdFRvQ29sb3IoZmxvYXQgdikge1xyXG4gICAgICAgIHJldHVybiBtb2QoZmxvb3IodmVjMyh2IC8gNjU1MzYuMCwgdiAvIDI1Ni4wLCB2KSksIDI1Ni4wKSAvIDI1Ni4wO1xyXG4gICAgICB9XHJcbiAgICBgLFxyXG4gICAgICAvLyBsYW5ndWFnZT1HTFNMIHByZWZpeD1cInZvaWQgbWFpbigpIHtcIiBzdWZmaXg9XCJ9XCJcclxuICAgICAgdmVydGV4VHJhbnNmb3JtOiBgXHJcbiAgICAgIHVUcm9pa2FUb3RhbEJvdW5kcyA9IHRyb2lrYUJhdGNoVGV4ZWwoNC4wKTtcclxuICAgICAgdVRyb2lrYUNsaXBSZWN0ID0gdHJvaWthQmF0Y2hUZXhlbCg1LjApO1xyXG4gICAgICBcclxuICAgICAgdmVjNCBkYXRhID0gdHJvaWthQmF0Y2hUZXhlbCg2LjApO1xyXG4gICAgICBkaWZmdXNlID0gdHJvaWthRmxvYXRUb0NvbG9yKGRhdGEueCk7XHJcbiAgICAgIHVUcm9pa2FGaWxsT3BhY2l0eSA9IGRhdGEueTtcclxuICAgICAgdVRyb2lrYUN1cnZlUmFkaXVzID0gZGF0YS56O1xyXG4gICAgICBcclxuICAgICAgZGF0YSA9IHRyb2lrYUJhdGNoVGV4ZWwoNy4wKTtcclxuICAgICAgaWYgKHVUcm9pa2FJc091dGxpbmUpIHtcclxuICAgICAgICBpZiAoZGF0YSA9PSB2ZWM0KDAuMCkpIHsgLy8gZGVnZW5lcmF0ZSBpZiB6ZXJvIG91dGxpbmVcclxuICAgICAgICAgIHBvc2l0aW9uID0gdmVjMygwLjApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1VHJvaWthUG9zaXRpb25PZmZzZXQgPSBkYXRhLnh5O1xyXG4gICAgICAgICAgdVRyb2lrYUVkZ2VPZmZzZXQgPSBkYXRhLno7XHJcbiAgICAgICAgICB1VHJvaWthQmx1clJhZGl1cyA9IGRhdGEudztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdVRyb2lrYVN0cm9rZVdpZHRoID0gZGF0YS54O1xyXG4gICAgICAgIHVUcm9pa2FTdHJva2VDb2xvciA9IHRyb2lrYUZsb2F0VG9Db2xvcihkYXRhLnkpO1xyXG4gICAgICAgIHVUcm9pa2FTdHJva2VPcGFjaXR5ID0gZGF0YS56O1xyXG4gICAgICB9XHJcbiAgICBgXHJcbiAgICB9KVxyXG5cclxuICAgIGJhdGNoTWF0ZXJpYWwuc2V0TWF0cml4VGV4dHVyZSA9ICh0ZXh0dXJlOiB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgIGltYWdlOiB7IHdpZHRoOiBhbnk7IGhlaWdodDogYW55IH1cclxuICAgIH0pID0+IHtcclxuICAgICAgYmF0Y2hNYXRlcmlhbC51bmlmb3Jtc1t0ZXhVbmlmb3JtTmFtZV0udmFsdWUgPSB0ZXh0dXJlXHJcbiAgICAgIGJhdGNoTWF0ZXJpYWwudW5pZm9ybXNbdGV4U2l6ZVVuaWZvcm1OYW1lXS52YWx1ZS5zZXQoXHJcbiAgICAgICAgdGV4dHVyZS5pbWFnZS53aWR0aCxcclxuICAgICAgICB0ZXh0dXJlLmltYWdlLmhlaWdodFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICB0aGlzLmNvcHlDdXN0b21Vbmlmb3JtcyhiYXRjaE1hdGVyaWFsKVxyXG4gICAgOyhiYXRjaE1hdGVyaWFsLmRlZmluZXMgPz89IHt9KVsnQkFUQ0hFRF9URVhUJ10gPSAnICdcclxuICAgIHJldHVybiBiYXRjaE1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmFzdENvcHkoZnJvbTogTWF0ZXJpYWwsIHRvOiBNYXRlcmlhbCkge1xyXG4gICAgc3VwZXIuZmFzdENvcHkoZnJvbSwgdG8pXHJcbiAgICB0by51c2VyRGF0YS5ncmFkaWVudFJhbXAudmFsdWUgPSBmcm9tLnVzZXJEYXRhLmdyYWRpZW50UmFtcC52YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEdyYWRpZW50VGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKSB7XHJcbiAgICB0aGlzLnVzZXJEYXRhLmdyYWRpZW50UmFtcC52YWx1ZSA9IHRleHR1cmVcclxuICAgIHRoaXMudXNlckRhdGEuZ3JhZGllbnRSYW1wLnZhbHVlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlXHJcbiAgICB0aGlzLnVzZXJEYXRhLmdyYWRpZW50UmFtcC52YWx1ZS5taW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyXHJcbiAgICB0aGlzLnVzZXJEYXRhLmdyYWRpZW50UmFtcC52YWx1ZS5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyXHJcbiAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlY2tsZVRleHRNYXRlcmlhbFxyXG5cclxuLy8gY29uc3QgbWF0QnVmZjogTWF0cml4NCA9IG5ldyBNYXRyaXg0KClcclxuLy8gY29uc3QgdmVjMkJ1ZmY6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpXHJcblxyXG4vLyBleHBvcnQgaW50ZXJmYWNlIFNwZWNrbGVUZXh0TWF0ZXJpYWxQYXJhbWV0ZXJzIGV4dGVuZHMgTWVzaEJhc2ljTWF0ZXJpYWxQYXJhbWV0ZXJzIHtcclxuLy8gICBiaWxsYm9hcmRQaXhlbEhlaWdodD86IG51bWJlclxyXG4vLyB9XHJcblxyXG4vLyBleHBvcnQgdHlwZSBCaWxsYm9hcmRpbmdUeXBlID0gJ3dvcmxkJyB8ICdzY3JlZW4nXHJcblxyXG4vLyBjbGFzcyBTcGVja2xlVGV4dE1hdGVyaWFsIGV4dGVuZHMgRXh0ZW5kZWRNZXNoQmFzaWNNYXRlcmlhbCB7XHJcbi8vICAgcHJpdmF0ZSBfYmlsbGJvYXJkUGl4ZWxIZWlnaHQ6IG51bWJlclxyXG5cclxuLy8gICBwcm90ZWN0ZWQgZ2V0IHZlcnRleFByb2dyYW0oKTogc3RyaW5nIHtcclxuLy8gICAgIHJldHVybiBzcGVja2xlVGV4dFZlcnRcclxuLy8gICB9XHJcblxyXG4vLyAgIHByb3RlY3RlZCBnZXQgZnJhZ21lbnRQcm9ncmFtKCk6IHN0cmluZyB7XHJcbi8vICAgICByZXR1cm4gc3BlY2tsZVRleHRGcmFnXHJcbi8vICAgfVxyXG5cclxuLy8gICBwcm90ZWN0ZWQgZ2V0IGJhc2VVbmlmb3JtcygpOiB7IFt1bmlmb3JtOiBzdHJpbmddOiBJVW5pZm9ybSB9IHtcclxuLy8gICAgIHJldHVybiBTaGFkZXJMaWIuYmFzaWMudW5pZm9ybXNcclxuLy8gICB9XHJcblxyXG4vLyAgIHByb3RlY3RlZCBnZXQgdW5pZm9ybXNEZWYoKTogVW5pZm9ybXMge1xyXG4vLyAgICAgcmV0dXJuIHtcclxuLy8gICAgICAgdVZpZXdlcl9oaWdoOiBuZXcgVmVjdG9yMygpLFxyXG4vLyAgICAgICB1Vmlld2VyX2xvdzogbmV3IFZlY3RvcjMoKSxcclxuLy8gICAgICAgaW52UHJvamVjdGlvbjogbmV3IE1hdHJpeDQoKSxcclxuLy8gICAgICAgYmlsbGJvYXJkUGl4ZWxIZWlnaHQ6IDAsXHJcbi8vICAgICAgIHNjcmVlblNpemU6IG5ldyBWZWN0b3IyKCksXHJcbi8vICAgICAgIGdyYWRpZW50UmFtcDogbnVsbFxyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuXHJcbi8vICAgcHVibGljIGdldCBiaWxsYm9hcmRQaXhlbEhlaWdodCgpIHtcclxuLy8gICAgIHJldHVybiB0aGlzLl9iaWxsYm9hcmRQaXhlbEhlaWdodFxyXG4vLyAgIH1cclxuXHJcbi8vICAgcHVibGljIHNldCBiaWxsYm9hcmRQaXhlbEhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XHJcbi8vICAgICB0aGlzLl9iaWxsYm9hcmRQaXhlbEhlaWdodCA9IHZhbHVlXHJcbi8vICAgfVxyXG5cclxuLy8gICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzOiBTcGVja2xlVGV4dE1hdGVyaWFsUGFyYW1ldGVycywgZGVmaW5lczogQXJyYXk8c3RyaW5nPiA9IFtdKSB7XHJcbi8vICAgICBzdXBlcihwYXJhbWV0ZXJzKVxyXG4vLyAgICAgdGhpcy5pbml0KGRlZmluZXMpXHJcbi8vICAgfVxyXG5cclxuLy8gICAvKiogV2UgbmVlZCBhIHVuaXF1ZSBrZXkgcGVyIHByb2dyYW0gKi9cclxuLy8gICBwdWJsaWMgY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCkge1xyXG4vLyAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZVxyXG4vLyAgIH1cclxuXHJcbi8vICAgcHVibGljIGNvcHkoc291cmNlOiBNYXRlcmlhbCkge1xyXG4vLyAgICAgc3VwZXIuY29weShzb3VyY2UpXHJcbi8vICAgICB0aGlzLmNvcHlGcm9tKHNvdXJjZSlcclxuLy8gICAgIHJldHVybiB0aGlzXHJcbi8vICAgfVxyXG5cclxuLy8gICBwcm90ZWN0ZWQgY29weUN1c3RvbVVuaWZvcm1zKG1hdGVyaWFsOiBNYXRlcmlhbCkge1xyXG4vLyAgICAgLyoqIFdlIHJlYmluZCB0aGUgdW5pZm9ybXMgKi9cclxuLy8gICAgIGZvciAoY29uc3QgayBpbiB0aGlzLnVzZXJEYXRhKSB7XHJcbi8vICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuLy8gICAgICAgLy9AdHMtaWdub3JlXHJcbi8vICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zW2tdID0gdGhpcy51c2VyRGF0YVtrXVxyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuLy8gICBwdWJsaWMgZ2V0RGVyaXZlZE1hdGVyaWFsKCkge1xyXG4vLyAgICAgY29uc3QgZGVyaXZlZCA9IGNyZWF0ZVRleHREZXJpdmVkTWF0ZXJpYWwodGhpcylcclxuLy8gICAgIHRoaXMuY29weUN1c3RvbVVuaWZvcm1zKGRlcml2ZWQpXHJcbi8vICAgICByZXR1cm4gZGVyaXZlZFxyXG4vLyAgIH1cclxuXHJcbi8vICAgLypcclxuLy8gICBEYXRhIHRleHR1cmUgcGFja2luZyBzdHJhdGVneTpcclxuXHJcbi8vICAgIyBDb21tb246XHJcbi8vICAgMC0xNTogbWF0cml4XHJcbi8vICAgMTYtMTk6IHVUcm9pa2FUb3RhbEJvdW5kc1xyXG4vLyAgIDIwLTIzOiB1VHJvaWthQ2xpcFJlY3RcclxuLy8gICAyNDogZGlmZnVzZSAoY29sb3Ivb3V0bGluZUNvbG9yKVxyXG4vLyAgIDI1OiB1VHJvaWthRmlsbE9wYWNpdHkgKGZpbGxPcGFjaXR5L291dGxpbmVPcGFjaXR5KVxyXG4vLyAgIDI2OiB1VHJvaWthQ3VydmVSYWRpdXNcclxuLy8gICAyNzogPGJsYW5rPlxyXG5cclxuLy8gICAjIE1haW46XHJcbi8vICAgMjg6IHVUcm9pa2FTdHJva2VXaWR0aFxyXG4vLyAgIDI5OiB1VHJvaWthU3Ryb2tlQ29sb3JcclxuLy8gICAzMDogdVRyb2lrYVN0cm9rZU9wYWNpdHlcclxuXHJcbi8vICAgIyBPdXRsaW5lOlxyXG4vLyAgIDI4LTI5OiB1VHJvaWthUG9zaXRpb25PZmZzZXRcclxuLy8gICAzMDogdVRyb2lrYUVkZ2VPZmZzZXRcclxuLy8gICAzMTogdVRyb2lrYUJsdXJSYWRpdXNcclxuLy8gICAqL1xyXG4vLyAgIC8qKiBTYWRseSwgdHJvaWthIGRvZXMgbm90IGV4cG9ydCB0aGlzIGZvciBubyBnb29kIHJlYXNvbiBzbyB3ZSBuZWVlIHRvIGNvcHkgaXQgb3ZlciAqL1xyXG4vLyAgIHB1YmxpYyBnZXREZXJpdmVkQmF0Y2hlZE1hdGVyaWFsKCkge1xyXG4vLyAgICAgY29uc3QgdGV4VW5pZm9ybU5hbWUgPSAndVRyb2lrYU1hdHJpY2VzVGV4dHVyZSdcclxuLy8gICAgIGNvbnN0IHRleFNpemVVbmlmb3JtTmFtZSA9ICd1VHJvaWthTWF0cmljZXNUZXh0dXJlU2l6ZSdcclxuLy8gICAgIGNvbnN0IG1lbWJlckluZGV4QXR0ck5hbWUgPSAnYVRyb2lrYVRleHRCYXRjaE1lbWJlckluZGV4J1xyXG4vLyAgICAgY29uc3QgZmxvYXRzUGVyTWVtYmVyID0gMzJcclxuLy8gICAgIC8vIER1ZSB0byBob3cgdmVydGV4VHJhbnNmb3JtIGdldHMgaW5qZWN0ZWQsIHRoZSBtYXRyaXggdHJhbnNmb3JtcyBtdXN0IGhhcHBlblxyXG4vLyAgICAgLy8gaW4gdGhlIGJhc2UgbWF0ZXJpYWwgb2YgVGV4dERlcml2ZWRNYXRlcmlhbCwgYnV0IG90aGVyIHRyYW5zZm9ybXMgdG8gaXRzXHJcbi8vICAgICAvLyBzaGFkZXIgbXVzdCBjb21lIGFmdGVyLCBzbyB3ZSBzYW5kd2ljaCBpdCBiZXR3ZWVuIHR3byBkZXJpdmF0aW9ucy5cclxuXHJcbi8vICAgICAvLyBUcmFuc2Zvcm0gdGhlIHZlcnRleCBwb3NpdGlvblxyXG4vLyAgICAgbGV0IGJhdGNoTWF0ZXJpYWwgPSBjcmVhdGVEZXJpdmVkTWF0ZXJpYWwodGhpcywge1xyXG4vLyAgICAgICBjaGFpbmVkOiB0cnVlLFxyXG4vLyAgICAgICB1bmlmb3Jtczoge1xyXG4vLyAgICAgICAgIFt0ZXhTaXplVW5pZm9ybU5hbWVdOiB7IHZhbHVlOiBuZXcgVmVjdG9yMigpIH0sXHJcbi8vICAgICAgICAgW3RleFVuaWZvcm1OYW1lXTogeyB2YWx1ZTogbnVsbCB9XHJcbi8vICAgICAgIH0sXHJcbi8vICAgICAgIC8vIGxhbmd1YWdlPUdMU0xcclxuLy8gICAgICAgdmVydGV4RGVmczogYFxyXG4vLyAgICAgICB1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCAke3RleFVuaWZvcm1OYW1lfTtcclxuLy8gICAgICAgdW5pZm9ybSB2ZWMyICR7dGV4U2l6ZVVuaWZvcm1OYW1lfTtcclxuLy8gICAgICAgYXR0cmlidXRlIGZsb2F0ICR7bWVtYmVySW5kZXhBdHRyTmFtZX07XHJcblxyXG4vLyAgICAgICB2ZWM0IHRyb2lrYUJhdGNoVGV4ZWwoZmxvYXQgb2Zmc2V0KSB7XHJcbi8vICAgICAgICAgb2Zmc2V0ICs9ICR7bWVtYmVySW5kZXhBdHRyTmFtZX0gKiAke2Zsb2F0c1Blck1lbWJlci50b0ZpeGVkKDEpfSAvIDQuMDtcclxuLy8gICAgICAgICBmbG9hdCB3ID0gJHt0ZXhTaXplVW5pZm9ybU5hbWV9Lng7XHJcbi8vICAgICAgICAgdmVjMiB1diA9ICh2ZWMyKG1vZChvZmZzZXQsIHcpLCBmbG9vcihvZmZzZXQgLyB3KSkgKyAwLjUpIC8gJHt0ZXhTaXplVW5pZm9ybU5hbWV9O1xyXG4vLyAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoJHt0ZXhVbmlmb3JtTmFtZX0sIHV2KTtcclxuLy8gICAgICAgfVxyXG4vLyAgICAgYCxcclxuLy8gICAgICAgLy8gbGFuZ3VhZ2U9R0xTTCBwcmVmaXg9XCJ2b2lkIG1haW4oKSB7XCIgc3VmZml4PVwifVwiXHJcbi8vICAgICAgIHZlcnRleFRyYW5zZm9ybTogYFxyXG4vLyAgICAgICAvKiogV2UgZG9uJ3QgbmVlZCB0aGlzLiBXZSdyZSB0cmFuc2Zvcm1pbmcgb3Vyc2VsdmVzIGluIG91ciBzaGFkZXIgdG8gYWxsb3cgZm9yIFJURSovXHJcbi8vICAgICAgIC8vIG1hdDQgbWF0cml4ID0gbWF0NChcclxuLy8gICAgICAgLy8gICB0cm9pa2FCYXRjaFRleGVsKDAuMCksXHJcbi8vICAgICAgIC8vICAgdHJvaWthQmF0Y2hUZXhlbCgxLjApLFxyXG4vLyAgICAgICAvLyAgIHRyb2lrYUJhdGNoVGV4ZWwoMi4wKSxcclxuLy8gICAgICAgLy8gICB0cm9pa2FCYXRjaFRleGVsKDMuMClcclxuLy8gICAgICAgLy8gKTtcclxuLy8gICAgICAgLy8gcG9zaXRpb24ueHl6ID0gKG1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcclxuLy8gICAgIGBcclxuLy8gICAgIH0pXHJcblxyXG4vLyAgICAgLy8gQWRkIHRoZSB0ZXh0IHNoYWRlcnNcclxuLy8gICAgIGJhdGNoTWF0ZXJpYWwgPSBjcmVhdGVUZXh0RGVyaXZlZE1hdGVyaWFsKGJhdGNoTWF0ZXJpYWwpXHJcblxyXG4vLyAgICAgLy8gTm93IG1ha2Ugb3RoZXIgY2hhbmdlcyB0byB0aGUgZGVyaXZlZCB0ZXh0IHNoYWRlciBjb2RlXHJcbi8vICAgICBiYXRjaE1hdGVyaWFsID0gY3JlYXRlRGVyaXZlZE1hdGVyaWFsKGJhdGNoTWF0ZXJpYWwsIHtcclxuLy8gICAgICAgY2hhaW5lZDogdHJ1ZSxcclxuLy8gICAgICAgdW5pZm9ybXM6IHtcclxuLy8gICAgICAgICB1VHJvaWthSXNPdXRsaW5lOiB7IHZhbHVlOiBmYWxzZSB9XHJcbi8vICAgICAgIH0sXHJcbi8vICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuLy8gICAgICAgLy9AdHMtaWdub3JlXHJcbi8vICAgICAgIGN1c3RvbVJld3JpdGVyKHNoYWRlcnMpIHtcclxuLy8gICAgICAgICAvLyBDb252ZXJ0IHNvbWUgdGV4dCBzaGFkZXIgdW5pZm9ybXMgdG8gdmFyeWluZ3NcclxuLy8gICAgICAgICBjb25zdCB2YXJ5aW5nVW5pZm9ybXMgPSBbXHJcbi8vICAgICAgICAgICAndVRyb2lrYVRvdGFsQm91bmRzJyxcclxuLy8gICAgICAgICAgICd1VHJvaWthQ2xpcFJlY3QnLFxyXG4vLyAgICAgICAgICAgJ3VUcm9pa2FQb3NpdGlvbk9mZnNldCcsXHJcbi8vICAgICAgICAgICAndVRyb2lrYUVkZ2VPZmZzZXQnLFxyXG4vLyAgICAgICAgICAgJ3VUcm9pa2FCbHVyUmFkaXVzJyxcclxuLy8gICAgICAgICAgICd1VHJvaWthU3Ryb2tlV2lkdGgnLFxyXG4vLyAgICAgICAgICAgJ3VUcm9pa2FTdHJva2VDb2xvcicsXHJcbi8vICAgICAgICAgICAndVRyb2lrYVN0cm9rZU9wYWNpdHknLFxyXG4vLyAgICAgICAgICAgJ3VUcm9pa2FGaWxsT3BhY2l0eScsXHJcbi8vICAgICAgICAgICAndVRyb2lrYUN1cnZlUmFkaXVzJyxcclxuLy8gICAgICAgICAgICdkaWZmdXNlJ1xyXG4vLyAgICAgICAgIF1cclxuLy8gICAgICAgICB2YXJ5aW5nVW5pZm9ybXMuZm9yRWFjaCgodW5pZm9ybU5hbWUpID0+IHtcclxuLy8gICAgICAgICAgIHNoYWRlcnMgPSB1bmlmb3JtVG9WYXJ5aW5nKHNoYWRlcnMsIHVuaWZvcm1OYW1lKVxyXG4vLyAgICAgICAgIH0pXHJcbi8vICAgICAgICAgcmV0dXJuIHNoYWRlcnNcclxuLy8gICAgICAgfSxcclxuLy8gICAgICAgLy8gbGFuZ3VhZ2U9R0xTTFxyXG4vLyAgICAgICB2ZXJ0ZXhEZWZzOiBgXHJcbi8vICAgICAgIHVuaWZvcm0gYm9vbCB1VHJvaWthSXNPdXRsaW5lO1xyXG4vLyAgICAgICB2ZWMzIHRyb2lrYUZsb2F0VG9Db2xvcihmbG9hdCB2KSB7XHJcbi8vICAgICAgICAgcmV0dXJuIG1vZChmbG9vcih2ZWMzKHYgLyA2NTUzNi4wLCB2IC8gMjU2LjAsIHYpKSwgMjU2LjApIC8gMjU2LjA7XHJcbi8vICAgICAgIH1cclxuLy8gICAgIGAsXHJcbi8vICAgICAgIC8vIGxhbmd1YWdlPUdMU0wgcHJlZml4PVwidm9pZCBtYWluKCkge1wiIHN1ZmZpeD1cIn1cIlxyXG4vLyAgICAgICB2ZXJ0ZXhUcmFuc2Zvcm06IGBcclxuLy8gICAgICAgdVRyb2lrYVRvdGFsQm91bmRzID0gdHJvaWthQmF0Y2hUZXhlbCg0LjApO1xyXG4vLyAgICAgICB1VHJvaWthQ2xpcFJlY3QgPSB0cm9pa2FCYXRjaFRleGVsKDUuMCk7XHJcblxyXG4vLyAgICAgICB2ZWM0IGRhdGEgPSB0cm9pa2FCYXRjaFRleGVsKDYuMCk7XHJcbi8vICAgICAgIGRpZmZ1c2UgPSB0cm9pa2FGbG9hdFRvQ29sb3IoZGF0YS54KTtcclxuLy8gICAgICAgdVRyb2lrYUZpbGxPcGFjaXR5ID0gZGF0YS55O1xyXG4vLyAgICAgICB1VHJvaWthQ3VydmVSYWRpdXMgPSBkYXRhLno7XHJcblxyXG4vLyAgICAgICBkYXRhID0gdHJvaWthQmF0Y2hUZXhlbCg3LjApO1xyXG4vLyAgICAgICBpZiAodVRyb2lrYUlzT3V0bGluZSkge1xyXG4vLyAgICAgICAgIGlmIChkYXRhID09IHZlYzQoMC4wKSkgeyAvLyBkZWdlbmVyYXRlIGlmIHplcm8gb3V0bGluZVxyXG4vLyAgICAgICAgICAgcG9zaXRpb24gPSB2ZWMzKDAuMCk7XHJcbi8vICAgICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICAgIHVUcm9pa2FQb3NpdGlvbk9mZnNldCA9IGRhdGEueHk7XHJcbi8vICAgICAgICAgICB1VHJvaWthRWRnZU9mZnNldCA9IGRhdGEuejtcclxuLy8gICAgICAgICAgIHVUcm9pa2FCbHVyUmFkaXVzID0gZGF0YS53O1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICB1VHJvaWthU3Ryb2tlV2lkdGggPSBkYXRhLng7XHJcbi8vICAgICAgICAgdVRyb2lrYVN0cm9rZUNvbG9yID0gdHJvaWthRmxvYXRUb0NvbG9yKGRhdGEueSk7XHJcbi8vICAgICAgICAgdVRyb2lrYVN0cm9rZU9wYWNpdHkgPSBkYXRhLno7XHJcbi8vICAgICAgIH1cclxuLy8gICAgIGBcclxuLy8gICAgIH0pXHJcblxyXG4vLyAgICAgYmF0Y2hNYXRlcmlhbC5zZXRNYXRyaXhUZXh0dXJlID0gKHRleHR1cmU6IHtcclxuLy8gICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuLy8gICAgICAgaW1hZ2U6IHsgd2lkdGg6IGFueTsgaGVpZ2h0OiBhbnkgfVxyXG4vLyAgICAgfSkgPT4ge1xyXG4vLyAgICAgICBiYXRjaE1hdGVyaWFsLnVuaWZvcm1zW3RleFVuaWZvcm1OYW1lXS52YWx1ZSA9IHRleHR1cmVcclxuLy8gICAgICAgYmF0Y2hNYXRlcmlhbC51bmlmb3Jtc1t0ZXhTaXplVW5pZm9ybU5hbWVdLnZhbHVlLnNldChcclxuLy8gICAgICAgICB0ZXh0dXJlLmltYWdlLndpZHRoLFxyXG4vLyAgICAgICAgIHRleHR1cmUuaW1hZ2UuaGVpZ2h0XHJcbi8vICAgICAgIClcclxuLy8gICAgIH1cclxuLy8gICAgIHRoaXMuY29weUN1c3RvbVVuaWZvcm1zKGJhdGNoTWF0ZXJpYWwpXHJcbi8vICAgICA7KGJhdGNoTWF0ZXJpYWwuZGVmaW5lcyA/Pz0ge30pWydCQVRDSEVEX1RFWFQnXSA9ICcgJ1xyXG4vLyAgICAgcmV0dXJuIGJhdGNoTWF0ZXJpYWxcclxuLy8gICB9XHJcblxyXG4vLyAgIHB1YmxpYyBmYXN0Q29weShmcm9tOiBNYXRlcmlhbCwgdG86IE1hdGVyaWFsKSB7XHJcbi8vICAgICBzdXBlci5mYXN0Q29weShmcm9tLCB0bylcclxuLy8gICAgIGNvbnN0IHRvU3RhbmRhcmQgPSB0byBhcyBTcGVja2xlVGV4dE1hdGVyaWFsXHJcbi8vICAgICBjb25zdCBmcm9tU3RhbmRhcmQgPSBmcm9tIGFzIFNwZWNrbGVUZXh0TWF0ZXJpYWxcclxuLy8gICAgIHRvU3RhbmRhcmQuY29sb3IuY29weShmcm9tU3RhbmRhcmQuY29sb3IpXHJcbi8vICAgICB0b1N0YW5kYXJkLnJlZnJhY3Rpb25SYXRpbyA9IGZyb21TdGFuZGFyZC5yZWZyYWN0aW9uUmF0aW9cclxuLy8gICAgIHRvLnVzZXJEYXRhLmdyYWRpZW50UmFtcC52YWx1ZSA9IGZyb20udXNlckRhdGEuZ3JhZGllbnRSYW1wLnZhbHVlXHJcbi8vICAgfVxyXG5cclxuLy8gICBwdWJsaWMgc2V0R3JhZGllbnRUZXh0dXJlKHRleHR1cmU6IFRleHR1cmUpIHtcclxuLy8gICAgIHRoaXMudXNlckRhdGEuZ3JhZGllbnRSYW1wLnZhbHVlID0gdGV4dHVyZVxyXG4vLyAgICAgdGhpcy51c2VyRGF0YS5ncmFkaWVudFJhbXAudmFsdWUuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2VcclxuLy8gICAgIHRoaXMudXNlckRhdGEuZ3JhZGllbnRSYW1wLnZhbHVlLm1pbkZpbHRlciA9IE5lYXJlc3RGaWx0ZXJcclxuLy8gICAgIHRoaXMudXNlckRhdGEuZ3JhZGllbnRSYW1wLnZhbHVlLm1hZ0ZpbHRlciA9IE5lYXJlc3RGaWx0ZXJcclxuLy8gICAgIHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlXHJcbi8vICAgfVxyXG5cclxuLy8gICBwdWJsaWMgc2V0QmlsbGJvYXJkaW5nKHR5cGU6IEJpbGxib2FyZGluZ1R5cGUgfCBudWxsKSB7XHJcbi8vICAgICAvKiogQ3JlYXRlIHRoZSBkZWZpbmUgb2JqZWN0IGlmIG5vdCB0aGVyZSAqL1xyXG4vLyAgICAgaWYgKCF0aGlzLmRlZmluZXMpIHRoaXMuZGVmaW5lcyA9IHt9XHJcbi8vICAgICAvKiogQ2xlYXIgYWxsIGJpbGxib2FyZGluZyBkZWZpbmVzICovXHJcbi8vICAgICBkZWxldGUgdGhpcy5kZWZpbmVzWydCSUxMQk9BUkRfU0NSRUVOJ11cclxuLy8gICAgIGRlbGV0ZSB0aGlzLmRlZmluZXNbJ0JJTExCT0FSRCddXHJcblxyXG4vLyAgICAgaWYgKCF0eXBlKSByZXR1cm5cclxuXHJcbi8vICAgICBpZiAodHlwZSA9PT0gJ3dvcmxkJykgdGhpcy5kZWZpbmVzWydCSUxMQk9BUkQnXSA9ICcgJ1xyXG4vLyAgICAgaWYgKHR5cGUgPT09ICdzY3JlZW4nKSB0aGlzLmRlZmluZXNbJ0JJTExCT0FSRF9TQ1JFRU4nXSA9ICcgJ1xyXG4vLyAgIH1cclxuXHJcbi8vICAgLyoqIENhbGxlZCBieSB0aHJlZS5qcyByZW5kZXIgbG9vcCAqL1xyXG4vLyAgIHB1YmxpYyBvbkJlZm9yZVJlbmRlcihcclxuLy8gICAgIF90aGlzOiBTcGVja2xlV2ViR0xSZW5kZXJlcixcclxuLy8gICAgIF9zY2VuZTogU2NlbmUsXHJcbi8vICAgICBjYW1lcmE6IENhbWVyYSxcclxuLy8gICAgIF9nZW9tZXRyeTogQnVmZmVyR2VvbWV0cnksXHJcbi8vICAgICBfb2JqZWN0OiBPYmplY3QzRFxyXG4vLyAgICkge1xyXG4vLyAgICAgaWYgKFxyXG4vLyAgICAgICB0aGlzLmRlZmluZXMgJiZcclxuLy8gICAgICAgKHRoaXMuZGVmaW5lc1snQklMTEJPQVJEJ10gfHwgdGhpcy5kZWZpbmVzWydCSUxMQk9BUkRfU0NSRUVOJ10pXHJcbi8vICAgICApIHtcclxuLy8gICAgICAgbWF0QnVmZi5jb3B5KGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKVxyXG4vLyAgICAgICB0aGlzLnVzZXJEYXRhLmludlByb2plY3Rpb24udmFsdWUuY29weShtYXRCdWZmKVxyXG4vLyAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIGlmICh0aGlzLmRlZmluZXMgJiYgdGhpcy5kZWZpbmVzWydCSUxMQk9BUkRfU0NSRUVOJ10pIHtcclxuLy8gICAgICAgdGhpcy51c2VyRGF0YS5iaWxsYm9hcmRQaXhlbEhlaWdodC52YWx1ZSA9IHRoaXMuYmlsbGJvYXJkUGl4ZWxIZWlnaHRcclxuLy8gICAgICAgdGhpcy51c2VyRGF0YS5zY3JlZW5TaXplLnZhbHVlLmNvcHkoX3RoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemUodmVjMkJ1ZmYpKVxyXG4vLyAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIGlmICh0aGlzLmRlZmluZXMgJiYgdGhpcy5kZWZpbmVzWydVU0VfUlRFJ10pIHtcclxuLy8gICAgICAgX29iamVjdC5tb2RlbFZpZXdNYXRyaXguY29weShfdGhpcy5SVEVCdWZmZXJzLnJ0ZVZpZXdNb2RlbE1hdHJpeClcclxuLy8gICAgICAgdGhpcy51c2VyRGF0YS51Vmlld2VyX2xvdy52YWx1ZS5jb3B5KF90aGlzLlJURUJ1ZmZlcnMudmlld2VyTG93KVxyXG4vLyAgICAgICB0aGlzLnVzZXJEYXRhLnVWaWV3ZXJfaGlnaC52YWx1ZS5jb3B5KF90aGlzLlJURUJ1ZmZlcnMudmlld2VySGlnaClcclxuLy8gICAgICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWVcclxuLy8gICAgIH1cclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCBkZWZhdWx0IFNwZWNrbGVUZXh0TWF0ZXJpYWxcclxuIiwiaW1wb3J0IHsgc3BlY2tsZVBvaW50VmVydCB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLXBvaW50LXZlcnQuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVQb2ludEZyYWcgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1wb2ludC1mcmFnLmpzJ1xyXG5pbXBvcnQgeyBNYXRlcmlhbCwgTmVhcmVzdEZpbHRlciwgVGV4dHVyZSwgdHlwZSBQb2ludHNNYXRlcmlhbFBhcmFtZXRlcnMgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHR5cGUgeyBVbmlmb3JtcyB9IGZyb20gJy4vU3BlY2tsZU1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVBvaW50TWF0ZXJpYWwgZnJvbSAnLi9TcGVja2xlUG9pbnRNYXRlcmlhbC5qcydcclxuXHJcbmNsYXNzIFNwZWNrbGVQb2ludENvbG91cmVkTWF0ZXJpYWwgZXh0ZW5kcyBTcGVja2xlUG9pbnRNYXRlcmlhbCB7XHJcbiAgcHJvdGVjdGVkIGdldCB2ZXJ0ZXhQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZVBvaW50VmVydFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBmcmFnbWVudFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlUG9pbnRGcmFnXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IHVuaWZvcm1zRGVmKCk6IFVuaWZvcm1zIHtcclxuICAgIHJldHVybiB7IC4uLnN1cGVyLnVuaWZvcm1zRGVmLCBncmFkaWVudFJhbXA6IG51bGwgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwYXJhbWV0ZXJzOiBQb2ludHNNYXRlcmlhbFBhcmFtZXRlcnMsXHJcbiAgICBkZWZpbmVzOiBzdHJpbmdbXSA9IFsnVVNFX0dSQURJRU5UX1JBTVAnXVxyXG4gICkge1xyXG4gICAgc3VwZXIocGFyYW1ldGVycywgZGVmaW5lcylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRHcmFkaWVudFRleHR1cmUodGV4dHVyZTogVGV4dHVyZSkge1xyXG4gICAgdGhpcy51c2VyRGF0YS5ncmFkaWVudFJhbXAudmFsdWUgPSB0ZXh0dXJlXHJcbiAgICB0aGlzLnVzZXJEYXRhLmdyYWRpZW50UmFtcC52YWx1ZS5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZVxyXG4gICAgdGhpcy51c2VyRGF0YS5ncmFkaWVudFJhbXAudmFsdWUubWluRmlsdGVyID0gTmVhcmVzdEZpbHRlclxyXG4gICAgdGhpcy51c2VyRGF0YS5ncmFkaWVudFJhbXAudmFsdWUubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlclxyXG4gICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmYXN0Q29weShmcm9tOiBNYXRlcmlhbCwgdG86IE1hdGVyaWFsKSB7XHJcbiAgICBzdXBlci5mYXN0Q29weShmcm9tLCB0bylcclxuICAgIHRvLnVzZXJEYXRhLmdyYWRpZW50UmFtcC52YWx1ZSA9IGZyb20udXNlckRhdGEuZ3JhZGllbnRSYW1wLnZhbHVlXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVja2xlUG9pbnRDb2xvdXJlZE1hdGVyaWFsXHJcbiIsImltcG9ydCBTcGVja2xlVGV4dE1hdGVyaWFsIGZyb20gJy4vU3BlY2tsZVRleHRNYXRlcmlhbC5qcydcclxuXHJcbmNsYXNzIFNwZWNrbGVUZXh0Q29sb3JlZE1hdGVyaWFsIGV4dGVuZHMgU3BlY2tsZVRleHRNYXRlcmlhbCB7XHJcbiAgcHVibGljIGdyYWRpZW50SW5kZXhNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBudW1iZXIgfSA9IHt9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVHcmFkaWVudEluZGV4TWFwKGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ3JhZGllbnRJbmRleE1hcFtpbmRleF0gPSB2YWx1ZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlY2tsZVRleHRDb2xvcmVkTWF0ZXJpYWxcclxuIiwiaW1wb3J0IHsgVHlwZWRBcnJheSB9IGZyb20gJ3R5cGUtZmVzdCdcclxuaW1wb3J0IHsgRGF0YUNodW5rIH0gZnJvbSAnLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgQm94MywgTWF0aFV0aWxzLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnXHJcblxyXG5leHBvcnQgY2xhc3MgVmlydHVhbEFycmF5IHtcclxuICBwcml2YXRlIG9mZnNldHM6IG51bWJlcltdXHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjaHVua3M6IEFycmF5PEFycmF5PG51bWJlcj4+KSB7XHJcbiAgICB0aGlzLnVwZGF0ZU9mZnNldHMoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxlbmd0aCgpIHtcclxuICAgIGlmICh0aGlzLmNodW5rcy5sZW5ndGggPT09IDApIHJldHVybiAwXHJcbiAgICBjb25zdCBsYXN0Q2h1bmsgPSB0aGlzLmNodW5rc1t0aGlzLmNodW5rcy5sZW5ndGggLSAxXVxyXG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0c1t0aGlzLm9mZnNldHMubGVuZ3RoIC0gMV0gKyBsYXN0Q2h1bmsubGVuZ3RoXHJcbiAgfVxyXG5cclxuICBnZXQoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5jaHVua3MubGVuZ3RoID09PSAxKSByZXR1cm4gdGhpcy5jaHVua3NbMF1baW5kZXhdXHJcbiAgICBjb25zdCBjaHVua0luZGV4ID0gdGhpcy5maW5kQ2h1bmtJbmRleChpbmRleClcclxuICAgIGNvbnN0IGxvY2FsSW5kZXggPSBpbmRleCAtIHRoaXMub2Zmc2V0c1tjaHVua0luZGV4XVxyXG4gICAgcmV0dXJuIHRoaXMuY2h1bmtzW2NodW5rSW5kZXhdW2xvY2FsSW5kZXhdXHJcbiAgfVxyXG5cclxuICBzZXQoaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuY2h1bmtzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLmNodW5rc1swXVtpbmRleF0gPSB2YWx1ZVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGNodW5rSW5kZXggPSB0aGlzLmZpbmRDaHVua0luZGV4KGluZGV4KVxyXG4gICAgY29uc3QgbG9jYWxJbmRleCA9IGluZGV4IC0gdGhpcy5vZmZzZXRzW2NodW5rSW5kZXhdXHJcbiAgICB0aGlzLmNodW5rc1tjaHVua0luZGV4XVtsb2NhbEluZGV4XSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmluZENodW5rSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgbG93ID0gMFxyXG4gICAgbGV0IGhpZ2ggPSB0aGlzLm9mZnNldHMubGVuZ3RoIC0gMVxyXG5cclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCkge1xyXG4gICAgICBjb25zdCBtaWQgPSAobG93ICsgaGlnaCkgPj4gMVxyXG4gICAgICBjb25zdCBzdGFydCA9IHRoaXMub2Zmc2V0c1ttaWRdXHJcbiAgICAgIGNvbnN0IGVuZCA9IG1pZCArIDEgPCB0aGlzLm9mZnNldHMubGVuZ3RoID8gdGhpcy5vZmZzZXRzW21pZCArIDFdIDogdGhpcy5sZW5ndGhcclxuICAgICAgaWYgKGluZGV4ID49IHN0YXJ0ICYmIGluZGV4IDwgZW5kKSByZXR1cm4gbWlkXHJcbiAgICAgIGlmIChpbmRleCA8IHN0YXJ0KSBoaWdoID0gbWlkIC0gMVxyXG4gICAgICBlbHNlIGxvdyA9IG1pZCArIDFcclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIGJvdW5kcycpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlT2Zmc2V0cygpIHtcclxuICAgIHRoaXMub2Zmc2V0cyA9IFtdXHJcbiAgICBsZXQgc3VtID0gMFxyXG4gICAgZm9yIChjb25zdCBjaHVuayBvZiB0aGlzLmNodW5rcykge1xyXG4gICAgICB0aGlzLm9mZnNldHMucHVzaChzdW0pXHJcbiAgICAgIHN1bSArPSBjaHVuay5sZW5ndGhcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDaHVua0FycmF5IGV4dGVuZHMgVmlydHVhbEFycmF5IHtcclxuICBwdWJsaWMgY2h1bmtBcnJheTogQXJyYXk8RGF0YUNodW5rPlxyXG4gIHByb3RlY3RlZCBmbGF0QXJyYXk6IFR5cGVkQXJyYXlcclxuXHJcbiAgY29uc3RydWN0b3IoY2h1bmtzOiBBcnJheTxEYXRhQ2h1bms+KSB7XHJcbiAgICBzdXBlcihjaHVua3MgJiYgY2h1bmtzLm1hcCgoYzogRGF0YUNodW5rKSA9PiBjLmRhdGEpKVxyXG4gICAgdGhpcy5jaHVua0FycmF5ID0gY2h1bmtzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2xpY2UoKSB7XHJcbiAgICBjb25zdCBjb3BpZXNBcnJheTogQXJyYXk8RGF0YUNodW5rPiA9IFtdXHJcbiAgICB0aGlzLmNodW5rQXJyYXkuZm9yRWFjaCgoY2h1bms6IERhdGFDaHVuaykgPT4ge1xyXG4gICAgICBjb25zdCBjaHVua0NvcHkgPSBuZXcgQXJyYXk8bnVtYmVyPihjaHVuay5kYXRhLmxlbmd0aClcclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjaHVuay5kYXRhLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgY2h1bmtDb3B5W2tdID0gY2h1bmsuZGF0YVtrXVxyXG4gICAgICB9XHJcbiAgICAgIGNvcGllc0FycmF5LnB1c2goeyBkYXRhOiBjaHVua0NvcHksIGlkOiBNYXRoVXRpbHMuZ2VuZXJhdGVVVUlEKCksIHJlZmVyZW5jZXM6IDEgfSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gbmV3IENodW5rQXJyYXkoY29waWVzQXJyYXkpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weVRvQnVmZmVyKGJ1ZmZlcjogVHlwZWRBcnJheSwgb2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIGxldCBjaHVua09mZnNldCA9IDBcclxuXHJcbiAgICB0aGlzLmNodW5rQXJyYXkuZm9yRWFjaCgoY2h1bms6IERhdGFDaHVuaykgPT4ge1xyXG4gICAgICBidWZmZXIuc2V0KFxyXG4gICAgICAgIGNodW5rLmRhdGEgYXMgdW5rbm93biBhcyBBcnJheUxpa2U8bnVtYmVyPiAmIEFycmF5TGlrZTxiaWdpbnQ+LFxyXG4gICAgICAgIG9mZnNldCArIGNodW5rT2Zmc2V0XHJcbiAgICAgIClcclxuICAgICAgY2h1bmtPZmZzZXQgKz0gY2h1bmsuZGF0YS5sZW5ndGhcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tcHV0ZUJveDMoKTogQm94MyB7XHJcbiAgICBjb25zdCBib3ggPSBuZXcgQm94MygpXHJcbiAgICBjb25zdCB2ZWMzID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgbGV0IGNhcnJ5OiBudW1iZXJbXSA9IFtdIC8vIHRvIGhvbGQgeC95IGlmIHZlYzMgaXMgc3BsaXRcclxuXHJcbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY2h1bmtzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5jaHVua3NbY11cclxuICAgICAgbGV0IGkgPSAwXHJcblxyXG4gICAgICAvLyBIYW5kbGUgY2Fycnktb3ZlciBmcm9tIHByZXZpb3VzIGNodW5rXHJcbiAgICAgIGlmIChjYXJyeS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgd2hpbGUgKGNhcnJ5Lmxlbmd0aCA8IDMgJiYgaSA8IGNodW5rLmxlbmd0aCkge1xyXG4gICAgICAgICAgY2FycnkucHVzaChjaHVua1tpKytdKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2FycnkubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgICAgICB2ZWMzLnNldChjYXJyeVswXSwgY2FycnlbMV0sIGNhcnJ5WzJdKVxyXG4gICAgICAgICAgYm94LmV4cGFuZEJ5UG9pbnQodmVjMylcclxuICAgICAgICAgIGNhcnJ5ID0gW11cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vdyByZWFkIGFzIG1hbnkgZnVsbCB2ZWMzcyBhcyBwb3NzaWJsZSBmcm9tIHRoaXMgY2h1bmtcclxuICAgICAgY29uc3QgZnVsbFZlYzNDb3VudCA9IE1hdGguZmxvb3IoKGNodW5rLmxlbmd0aCAtIGkpIC8gMylcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmdWxsVmVjM0NvdW50OyBqKyspIHtcclxuICAgICAgICBjb25zdCB4ID0gY2h1bmtbaSsrXVxyXG4gICAgICAgIGNvbnN0IHkgPSBjaHVua1tpKytdXHJcbiAgICAgICAgY29uc3QgeiA9IGNodW5rW2krK11cclxuICAgICAgICB2ZWMzLnNldCh4LCB5LCB6KVxyXG4gICAgICAgIGJveC5leHBhbmRCeVBvaW50KHZlYzMpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIHRoZXJlJ3MgYSBsZWZ0b3ZlciBwYXJ0aWFsIHZlYzMgYXQgdGhlIGVuZCwgc2F2ZSBpdFxyXG4gICAgICB3aGlsZSAoaSA8IGNodW5rLmxlbmd0aCkge1xyXG4gICAgICAgIGNhcnJ5LnB1c2goY2h1bmtbaSsrXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbmFsIHNhbml0eSBjaGVja1xyXG4gICAgaWYgKGNhcnJ5Lmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1ZpcnR1YWwgcG9zaXRpb24gYnVmZmVyIGVuZGVkIHdpdGggaW5jb21wbGV0ZSB2ZWMzIGRhdGEnKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBib3hcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRGbGF0QXJyYXk8VCBleHRlbmRzIFR5cGVkQXJyYXk+KFR5cGU6IHsgbmV3IChsZW5ndGg6IG51bWJlcik6IFQgfSkge1xyXG4gICAgaWYgKCF0aGlzLmZsYXRBcnJheSB8fCAhKHRoaXMuZmxhdEFycmF5IGluc3RhbmNlb2YgVHlwZSkpIHtcclxuICAgICAgdGhpcy5mbGF0QXJyYXkgPSBuZXcgVHlwZSh0aGlzLmxlbmd0aClcclxuICAgICAgbGV0IGNodW5rT2Zmc2V0ID0gMFxyXG4gICAgICB0aGlzLmNodW5rcy5mb3JFYWNoKChjaHVuazogbnVtYmVyW10pID0+IHtcclxuICAgICAgICB0aGlzLmZsYXRBcnJheS5zZXQoXHJcbiAgICAgICAgICBjaHVuayBhcyB1bmtub3duIGFzIEFycmF5TGlrZTxudW1iZXI+ICYgQXJyYXlMaWtlPGJpZ2ludD4sXHJcbiAgICAgICAgICBjaHVua09mZnNldFxyXG4gICAgICAgIClcclxuICAgICAgICBjaHVua09mZnNldCArPSBjaHVuay5sZW5ndGhcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZsYXRBcnJheSBhcyBUXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RmxvYXQzMkFycmF5KCk6IEZsb2F0MzJBcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRGbGF0QXJyYXkoRmxvYXQzMkFycmF5KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb2F0NjRBcnJheSgpOiBGbG9hdDY0QXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxhdEFycmF5KEZsb2F0NjRBcnJheSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbnQxNkFycmF5KCk6IEludDE2QXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxhdEFycmF5KEludDE2QXJyYXkpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW50MzJBcnJheSgpOiBJbnQzMkFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmdldEZsYXRBcnJheShJbnQzMkFycmF5KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFVpbnQxNkFycmF5KCk6IFVpbnQxNkFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmdldEZsYXRBcnJheShVaW50MTZBcnJheSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRVaW50MzJBcnJheSgpOiBVaW50MzJBcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRGbGF0QXJyYXkoVWludDMyQXJyYXkpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbG9yLCBEb3VibGVTaWRlLCBGcm9udFNpZGUsIE1hdGVyaWFsLCBUZXh0dXJlLCBWZWN0b3IyIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEdlb21ldHJ5VHlwZSB9IGZyb20gJy4uL2JhdGNoaW5nL0JhdGNoLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIFRyZWVOb2RlIH0gZnJvbSAnLi4vdHJlZS9Xb3JsZFRyZWUuanMnXHJcbmltcG9ydCB7IE5vZGVSZW5kZXJWaWV3IH0gZnJvbSAnLi4vdHJlZS9Ob2RlUmVuZGVyVmlldy5qcydcclxuaW1wb3J0IFNwZWNrbGVMaW5lTWF0ZXJpYWwgZnJvbSAnLi9TcGVja2xlTGluZU1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwgZnJvbSAnLi9TcGVja2xlU3RhbmRhcmRNYXRlcmlhbC5qcydcclxuaW1wb3J0IFNwZWNrbGVQb2ludE1hdGVyaWFsIGZyb20gJy4vU3BlY2tsZVBvaW50TWF0ZXJpYWwuanMnXHJcbmltcG9ydCBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwgZnJvbSAnLi9TcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwuanMnXHJcbmltcG9ydCBkZWZhdWx0R3JhZGllbnRUZXh0dXJlIGZyb20gJy4uLy4uL2Fzc2V0cy9ncmFkaWVudC5wbmcnXHJcbmltcG9ydCB7IEFzc2V0cyB9IGZyb20gJy4uL0Fzc2V0cy5qcydcclxuaW1wb3J0IHsgZ2V0Q29udmVyc2lvbkZhY3RvciB9IGZyb20gJy4uL2NvbnZlcnRlci9Vbml0cy5qcydcclxuaW1wb3J0IFNwZWNrbGVHaG9zdE1hdGVyaWFsIGZyb20gJy4vU3BlY2tsZUdob3N0TWF0ZXJpYWwuanMnXHJcbmltcG9ydCBTcGVja2xlVGV4dE1hdGVyaWFsIGZyb20gJy4vU3BlY2tsZVRleHRNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgU3BlY2tsZU1hdGVyaWFsIH0gZnJvbSAnLi9TcGVja2xlTWF0ZXJpYWwuanMnXHJcbmltcG9ydCBTcGVja2xlUG9pbnRDb2xvdXJlZE1hdGVyaWFsIGZyb20gJy4vU3BlY2tsZVBvaW50Q29sb3VyZWRNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgdHlwZSBBc3NldCwgQXNzZXRUeXBlLCB0eXBlIE1hdGVyaWFsT3B0aW9ucyB9IGZyb20gJy4uLy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCBTcGVja2xlVGV4dENvbG9yZWRNYXRlcmlhbCBmcm9tICcuL1NwZWNrbGVUZXh0Q29sb3JlZE1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBDaHVua0FycmF5IH0gZnJvbSAnLi4vY29udmVydGVyL1ZpcnR1YWxBcnJheS5qcydcclxuXHJcbmNvbnN0IGRlZmF1bHRHcmFkaWVudDogQXNzZXQgPSB7XHJcbiAgaWQ6ICdkZWZhdWx0R3JhZGllbnQnLFxyXG4gIHNyYzogZGVmYXVsdEdyYWRpZW50VGV4dHVyZSxcclxuICB0eXBlOiBBc3NldFR5cGUuVEVYVFVSRV84QlBQXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyTWF0ZXJpYWwgZXh0ZW5kcyBNaW5pbWFsTWF0ZXJpYWwge1xyXG4gIGlkOiBzdHJpbmdcclxuICBlbWlzc2l2ZTogbnVtYmVyXHJcbiAgb3BhY2l0eTogbnVtYmVyXHJcbiAgcm91Z2huZXNzOiBudW1iZXJcclxuICBtZXRhbG5lc3M6IG51bWJlclxyXG4gIHZlcnRleENvbG9yczogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpc3BsYXlTdHlsZSBleHRlbmRzIE1pbmltYWxNYXRlcmlhbCB7XHJcbiAgaWQ6IHN0cmluZ1xyXG4gIGxpbmVXZWlnaHQ6IG51bWJlclxyXG4gIG9wYWNpdHk/OiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNaW5pbWFsTWF0ZXJpYWwge1xyXG4gIGNvbG9yOiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRmlsdGVyTWF0ZXJpYWxUeXBlIHtcclxuICBHSE9TVCxcclxuICBHUkFESUVOVCxcclxuICBDT0xPUkVELFxyXG4gIEhJRERFTlxyXG59XHJcblxyXG4vKiogVE8gRE86IFRoaXMgc3RpbGwgc3Vja3MgKi9cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJNYXRlcmlhbCB7XHJcbiAgZmlsdGVyVHlwZTogRmlsdGVyTWF0ZXJpYWxUeXBlXHJcbiAgcmFtcEluZGV4PzogbnVtYmVyXHJcbiAgcmFtcEluZGV4Q29sb3I/OiBDb2xvclxyXG4gIHJhbXBUZXh0dXJlPzogVGV4dHVyZVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlck1hdGVyaWFsT3B0aW9ucyB7XHJcbiAgcmFtcEluZGV4PzogbnVtYmVyXHJcbiAgcmFtcEluZGV4Q29sb3I/OiBDb2xvclxyXG4gIHJhbXBUZXh0dXJlPzogVGV4dHVyZVxyXG4gIHJhbXBXaWR0aD86IG51bWJlclxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXRlcmlhbHMge1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVU5JRk9STV9WRUNUT1JTX1VTRUQgPSAzM1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9BUlRJRklDSUFMX1JPVUdITkVTUyA9IDAuNiAvKiogVGhlIGludmVyc2Ugb2YgXCJzaGluaW5lc3NcIiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF0ZXJpYWxNYXA6IHsgW2hhc2g6IG51bWJlcl06IE1hdGVyaWFsIH0gPSB7fVxyXG4gIHByaXZhdGUgbWVzaEdob3N0TWF0ZXJpYWw6IE1hdGVyaWFsXHJcbiAgcHJpdmF0ZSBtZXNoR3JhZGllbnRNYXRlcmlhbDogTWF0ZXJpYWxcclxuICBwcml2YXRlIG1lc2hUcmFuc3BhcmVudEdyYWRpZW50TWF0ZXJpYWw6IE1hdGVyaWFsXHJcbiAgcHJpdmF0ZSBtZXNoQ29sb3JlZE1hdGVyaWFsOiBNYXRlcmlhbFxyXG4gIHByaXZhdGUgbWVzaFRyYW5zcGFyZW50Q29sb3JlZE1hdGVyaWFsOiBNYXRlcmlhbFxyXG4gIHByaXZhdGUgbWVzaEhpZGRlbk1hdGVyaWFsOiBNYXRlcmlhbFxyXG5cclxuICBwcml2YXRlIGxpbmVHaG9zdE1hdGVyaWFsOiBNYXRlcmlhbFxyXG4gIHByaXZhdGUgbGluZUNvbG9yZWRNYXRlcmlhbDogTWF0ZXJpYWxcclxuICBwcml2YXRlIGxpbmVIaWRkZW5NYXRlcmlhbDogTWF0ZXJpYWxcclxuXHJcbiAgcHJpdmF0ZSBwb2ludEdob3N0TWF0ZXJpYWw6IE1hdGVyaWFsXHJcbiAgcHJpdmF0ZSBwb2ludENsb3VkQ29sb3VyZWRNYXRlcmlhbDogTWF0ZXJpYWxcclxuICBwcml2YXRlIHBvaW50Q2xvdWRHcmFkaWVudE1hdGVyaWFsOiBNYXRlcmlhbFxyXG5cclxuICBwcml2YXRlIHRleHRHaG9zdE1hdGVyaWFsOiBNYXRlcmlhbFxyXG4gIHByaXZhdGUgdGV4dENvbG9yZWRNYXRlcmlhbDogTWF0ZXJpYWxcclxuICBwcml2YXRlIHRleHRHcmFkaWVudE1hdGVyaWFsOiBNYXRlcmlhbFxyXG4gIHByaXZhdGUgdGV4dEhpZGRlbk1hdGVyaWFsOiBNYXRlcmlhbFxyXG5cclxuICBwcml2YXRlIGRlZmF1bHRHcmFkaWVudFRleHR1cmVEYXRhITogSW1hZ2VEYXRhXHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE51bGxSZW5kZXJNYXRlcmlhbEhhc2ggPSB0aGlzLmhhc2hDb2RlKFxyXG4gICAgR2VvbWV0cnlUeXBlLk1FU0gudG9TdHJpbmcoKVxyXG4gIClcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOdWxsUmVuZGVyTWF0ZXJpYWxWZXJ0ZXhDb2xvcnNIYXNoID0gdGhpcy5oYXNoQ29kZShcclxuICAgIEdlb21ldHJ5VHlwZS5NRVNILnRvU3RyaW5nKCkgKyAndmVydGV4Q29sb3JzJ1xyXG4gIClcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOdWxsRGlzcGxheVN0eWxlSGFzaCA9IHRoaXMuaGFzaENvZGUoXHJcbiAgICBHZW9tZXRyeVR5cGUuTElORS50b1N0cmluZygpXHJcbiAgKVxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE51bGxUZXh0RGlzcGxheVN0eWxlID0gdGhpcy5oYXNoQ29kZShcclxuICAgIEdlb21ldHJ5VHlwZS5URVhULnRvU3RyaW5nKClcclxuICApXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTnVsbFBvaW50TWF0ZXJpYWxIYXNoID0gdGhpcy5oYXNoQ29kZShcclxuICAgIEdlb21ldHJ5VHlwZS5QT0lOVC50b1N0cmluZygpXHJcbiAgKVxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE51bGxQb2ludENsb3VkTWF0ZXJpYWxIYXNoID0gdGhpcy5oYXNoQ29kZShcclxuICAgIEdlb21ldHJ5VHlwZS5QT0lOVF9DTE9VRC50b1N0cmluZygpXHJcbiAgKVxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE51bGxQb2ludENsb3VkVmVydGV4Q29sb3JzTWF0ZXJpYWxIYXNoID0gdGhpcy5oYXNoQ29kZShcclxuICAgIEdlb21ldHJ5VHlwZS5QT0lOVF9DTE9VRC50b1N0cmluZygpICsgJ3ZlcnRleENvbG9ycydcclxuICApXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTnVsbFJlbmRlck1hdGVyaWFsSW5zdGFuY2VkSGFzaCA9IHRoaXMuaGFzaENvZGUoXHJcbiAgICBHZW9tZXRyeVR5cGUuTUVTSC50b1N0cmluZygpICsgJ2luc3RhbmNlZCdcclxuICApXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTnVsbFJlbmRlck1hdGVyaWFsSW5zdGFuY2VkVmVydGV4Q29sb3JIYXNoID0gdGhpcy5oYXNoQ29kZShcclxuICAgIEdlb21ldHJ5VHlwZS5NRVNILnRvU3RyaW5nKCkgKyAndmVydGV4Q29sb3JzJyArICdpbnN0YW5jZWQnXHJcbiAgKVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlbmRlck1hdGVyaWFsRnJvbU5vZGUoXHJcbiAgICBtYXRlcmlhbE5vZGU6IFRyZWVOb2RlIHwgbnVsbCxcclxuICAgIGdlb21ldHJ5Tm9kZTogVHJlZU5vZGUgfCBudWxsXHJcbiAgKTogUmVuZGVyTWF0ZXJpYWwgfCBudWxsIHtcclxuICAgIGlmICghbWF0ZXJpYWxOb2RlKSByZXR1cm4gbnVsbFxyXG4gICAgbGV0IHJlbmRlck1hdGVyaWFsOiBSZW5kZXJNYXRlcmlhbCB8IG51bGwgPSBudWxsXHJcbiAgICBpZiAobWF0ZXJpYWxOb2RlLm1vZGVsLnJhdy5yZW5kZXJNYXRlcmlhbCkge1xyXG4gICAgICBjb25zdCBjb2xvcnNDaHVua0FycmF5ID0gZ2VvbWV0cnlOb2RlPy5tb2RlbC5yYXcuY29sb3JzXHJcbiAgICAgICAgPyBuZXcgQ2h1bmtBcnJheShnZW9tZXRyeU5vZGU/Lm1vZGVsLnJhdy5jb2xvcnMpXHJcbiAgICAgICAgOiB1bmRlZmluZWRcclxuXHJcbiAgICAgIHJlbmRlck1hdGVyaWFsID0ge1xyXG4gICAgICAgIGlkOiBtYXRlcmlhbE5vZGUubW9kZWwucmF3LnJlbmRlck1hdGVyaWFsLmlkLFxyXG4gICAgICAgIGNvbG9yOiBtYXRlcmlhbE5vZGUubW9kZWwucmF3LnJlbmRlck1hdGVyaWFsLmRpZmZ1c2UsXHJcbiAgICAgICAgZW1pc3NpdmU6IG1hdGVyaWFsTm9kZS5tb2RlbC5yYXcucmVuZGVyTWF0ZXJpYWwuZW1pc3NpdmUsXHJcbiAgICAgICAgb3BhY2l0eTpcclxuICAgICAgICAgIG1hdGVyaWFsTm9kZS5tb2RlbC5yYXcucmVuZGVyTWF0ZXJpYWwub3BhY2l0eSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gbWF0ZXJpYWxOb2RlLm1vZGVsLnJhdy5yZW5kZXJNYXRlcmlhbC5vcGFjaXR5XHJcbiAgICAgICAgICAgIDogMSxcclxuICAgICAgICByb3VnaG5lc3M6IG1hdGVyaWFsTm9kZS5tb2RlbC5yYXcucmVuZGVyTWF0ZXJpYWwucm91Z2huZXNzLFxyXG4gICAgICAgIG1ldGFsbmVzczogbWF0ZXJpYWxOb2RlLm1vZGVsLnJhdy5yZW5kZXJNYXRlcmlhbC5tZXRhbG5lc3MsXHJcbiAgICAgICAgdmVydGV4Q29sb3JzOlxyXG4gICAgICAgICAgKGdlb21ldHJ5Tm9kZSAmJiBjb2xvcnNDaHVua0FycmF5ICYmIGNvbG9yc0NodW5rQXJyYXkubGVuZ3RoID4gMCkgPz8gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlck1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGRpc3BsYXlTdHlsZUZyb21Ob2RlKG5vZGU6IFRyZWVOb2RlIHwgbnVsbCk6IERpc3BsYXlTdHlsZSB8IG51bGwge1xyXG4gICAgaWYgKCFub2RlKSByZXR1cm4gbnVsbFxyXG4gICAgbGV0IGRpc3BsYXlTdHlsZTogRGlzcGxheVN0eWxlIHwgbnVsbCA9IG51bGxcclxuICAgIGlmIChub2RlLm1vZGVsLnJhdy5kaXNwbGF5U3R5bGUpIHtcclxuICAgICAgLyoqIElmIHRoZXJlIGFyZSBubyB1bml0cyBzcGVjaWZpZWQsIHdlIGlnbm9yZSB0aGUgbGluZSB3aWR0aCB2YWx1ZSAqL1xyXG4gICAgICBsZXQgbGluZVdlaWdodCA9IG5vZGUubW9kZWwucmF3LmRpc3BsYXlTdHlsZS5saW5ld2VpZ2h0IHx8IDBcclxuICAgICAgY29uc3QgdW5pdHMgPSBub2RlLm1vZGVsLnJhdy5kaXNwbGF5U3R5bGUudW5pdHNcclxuICAgICAgbGluZVdlaWdodCA9IHVuaXRzID8gbGluZVdlaWdodCAqIGdldENvbnZlcnNpb25GYWN0b3IodW5pdHMpIDogMFxyXG4gICAgICAvKiogSWYgdGhlIGxpbmUgd2lkdGggaXMgc21hbGxlIHRoYW4gMW1tLCB3ZSdsbCBqdXN0IHJlbmRlciBpdCBpbiBzY3JlZW4gc3BhY2UgKi9cclxuICAgICAgbGluZVdlaWdodCA9IGxpbmVXZWlnaHQgPCAwLjAwMSA/IDAgOiBsaW5lV2VpZ2h0XHJcbiAgICAgIGRpc3BsYXlTdHlsZSA9IHtcclxuICAgICAgICBpZDogbm9kZS5tb2RlbC5yYXcuZGlzcGxheVN0eWxlLmlkLFxyXG4gICAgICAgIGNvbG9yOiBub2RlLm1vZGVsLnJhdy5kaXNwbGF5U3R5bGUuZGlmZnVzZSB8fCBub2RlLm1vZGVsLnJhdy5kaXNwbGF5U3R5bGUuY29sb3IsXHJcbiAgICAgICAgbGluZVdlaWdodFxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG5vZGUubW9kZWwucmF3LnJlbmRlck1hdGVyaWFsKSB7XHJcbiAgICAgIGRpc3BsYXlTdHlsZSA9IHtcclxuICAgICAgICBpZDogbm9kZS5tb2RlbC5yYXcucmVuZGVyTWF0ZXJpYWwuaWQsXHJcbiAgICAgICAgY29sb3I6IG5vZGUubW9kZWwucmF3LnJlbmRlck1hdGVyaWFsLmRpZmZ1c2UsXHJcbiAgICAgICAgbGluZVdlaWdodDogMFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlzcGxheVN0eWxlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGNvbG9yTWF0ZXJpYWxGcm9tTm9kZShub2RlOiBUcmVlTm9kZSB8IG51bGwpOiBNaW5pbWFsTWF0ZXJpYWwgfCBudWxsIHtcclxuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGxcclxuXHJcbiAgICBsZXQgY29sb3JNYXRlcmlhbDogTWluaW1hbE1hdGVyaWFsIHwgbnVsbCA9IG51bGxcclxuICAgIGlmIChub2RlLm1vZGVsLmNvbG9yKSB7XHJcbiAgICAgIGNvbG9yTWF0ZXJpYWwgPSB7XHJcbiAgICAgICAgY29sb3I6IG5vZGUubW9kZWwuY29sb3JcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbG9yTWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZmFzdENvcHkoZnJvbTogTWF0ZXJpYWwsIHRvOiBNYXRlcmlhbCkge1xyXG4gICAgOyh0byBhcyB1bmtub3duIGFzIFNwZWNrbGVNYXRlcmlhbCkuZmFzdENvcHkoZnJvbSwgdG8pXHJcbiAgICAvKiogRG9pbmcgaXQgdmlhIHRocmVlLmpzIGlzIHNsb3cgYXMgaGVsbCAqL1xyXG4gICAgLy8gdG8uc2V0VmFsdWVzKFxyXG4gICAgLy8gICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAvLyAgICgoeyB1dWlkLCB1bmlmb3JtcywgdXNlckRhdGEsIG9uQmVmb3JlQ29tcGlsZSwgdmVyc2lvbiwgLi4ubyB9KSA9PiBvKShmcm9tIGFzIGFueSlcclxuICAgIC8vIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlbmRlck1hdGVyaWFsVG9TdHJpbmcocmVuZGVyTWF0ZXJpYWw6IFJlbmRlck1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICByZW5kZXJNYXRlcmlhbC5jb2xvci50b1N0cmluZygpICtcclxuICAgICAgJy8nICtcclxuICAgICAgcmVuZGVyTWF0ZXJpYWwub3BhY2l0eS50b1N0cmluZygpICtcclxuICAgICAgJy8nICtcclxuICAgICAgcmVuZGVyTWF0ZXJpYWwucm91Z2huZXNzLnRvU3RyaW5nKCkgK1xyXG4gICAgICAnLycgK1xyXG4gICAgICByZW5kZXJNYXRlcmlhbC5tZXRhbG5lc3MudG9TdHJpbmcoKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZGlzcGxheVN0eWxlVG9TdHJpbmcoZGlzcGxheVN0eWxlOiBEaXNwbGF5U3R5bGUpIHtcclxuICAgIGNvbnN0IHBsbSA9XHJcbiAgICAgIGRpc3BsYXlTdHlsZS5jb2xvcj8udG9TdHJpbmcoKSArXHJcbiAgICAgICcvJyArXHJcbiAgICAgIGRpc3BsYXlTdHlsZS5saW5lV2VpZ2h0Py50b1N0cmluZygpICtcclxuICAgICAgZGlzcGxheVN0eWxlLm9wYWNpdHk/LnRvU3RyaW5nKClcclxuICAgIHJldHVybiBwbG1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG1pbmltYWxNYXRlcmlhbFRvU3RyaW5nKG1pbmltYWxNYXRlcmlhbDogTWluaW1hbE1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gbWluaW1hbE1hdGVyaWFsLmNvbG9yLnRvU3RyaW5nKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGhhc2hDb2RlKHM6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgaCA9IDBcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgaCA9IChNYXRoLmltdWwoMzEsIGgpICsgcy5jaGFyQ29kZUF0KGkpKSB8IDBcclxuICAgIHJldHVybiBoXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGlzTWF0ZXJpYWxJbnN0YW5jZShcclxuICAgIG1hdGVyaWFsOiBNYXRlcmlhbCB8IEZpbHRlck1hdGVyaWFsIHwgUmVuZGVyTWF0ZXJpYWwgfCBEaXNwbGF5U3R5bGVcclxuICApOiBtYXRlcmlhbCBpcyBNYXRlcmlhbCB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwgaW5zdGFuY2VvZiBNYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc0ZpbHRlck1hdGVyaWFsKFxyXG4gICAgbWF0ZXJpYWw6IE1hdGVyaWFsIHwgRmlsdGVyTWF0ZXJpYWwgfCBSZW5kZXJNYXRlcmlhbCB8IERpc3BsYXlTdHlsZVxyXG4gICk6IG1hdGVyaWFsIGlzIEZpbHRlck1hdGVyaWFsIHtcclxuICAgIHJldHVybiAnZmlsdGVyVHlwZScgaW4gbWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNSZW5kZXJNYXRlcmlhbChcclxuICAgIG1hdGVyaWFsRGF0YTpcclxuICAgICAgfCBNYXRlcmlhbFxyXG4gICAgICB8IEZpbHRlck1hdGVyaWFsXHJcbiAgICAgIHwgUmVuZGVyTWF0ZXJpYWxcclxuICAgICAgfCBEaXNwbGF5U3R5bGVcclxuICAgICAgfCBNYXRlcmlhbE9wdGlvbnNcclxuICApOiBtYXRlcmlhbERhdGEgaXMgUmVuZGVyTWF0ZXJpYWwge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgJ2NvbG9yJyBpbiBtYXRlcmlhbERhdGEgJiZcclxuICAgICAgJ29wYWNpdHknIGluIG1hdGVyaWFsRGF0YSAmJlxyXG4gICAgICAncm91Z2huZXNzJyBpbiBtYXRlcmlhbERhdGEgJiZcclxuICAgICAgJ21ldGFsbmVzcycgaW4gbWF0ZXJpYWxEYXRhICYmXHJcbiAgICAgICd2ZXJ0ZXhDb2xvcnMnIGluIG1hdGVyaWFsRGF0YVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc0Rpc3BsYXlTdHlsZShcclxuICAgIG1hdGVyaWFsRGF0YTpcclxuICAgICAgfCBNYXRlcmlhbFxyXG4gICAgICB8IEZpbHRlck1hdGVyaWFsXHJcbiAgICAgIHwgUmVuZGVyTWF0ZXJpYWxcclxuICAgICAgfCBEaXNwbGF5U3R5bGVcclxuICAgICAgfCBNYXRlcmlhbE9wdGlvbnNcclxuICApOiBtYXRlcmlhbERhdGEgaXMgRGlzcGxheVN0eWxlIHtcclxuICAgIHJldHVybiAnY29sb3InIGluIG1hdGVyaWFsRGF0YSAmJiAnbGluZVdlaWdodCcgaW4gbWF0ZXJpYWxEYXRhXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldE1hdGVyaWFsSGFzaChcclxuICAgIHJlbmRlclZpZXc6IE5vZGVSZW5kZXJWaWV3LFxyXG4gICAgbWF0ZXJpYWxEYXRhPzogUmVuZGVyTWF0ZXJpYWwgfCBEaXNwbGF5U3R5bGUgfCBNYXRlcmlhbE9wdGlvbnMgfCBudWxsXHJcbiAgKTogbnVtYmVyIHtcclxuICAgIC8qKiBTZWUgaWYgd2UgbmVlZCB0byBnZXQgdGhlIGhhc2ggZnJvbSB0aGUgRFVJMyBjb2xvciBtYXRlcmlhbC4gSW4gRFVJMywgUG9pbnRzIGFuZCBMaW5lc1xyXG4gICAgICogIGFsd2F5cyB1c2UgdGhlIGNvbG9yIG1hdGVyaWFsIGV4Y2x1c2l2ZWx5LiBBbnkgb3RoZXIgcmVuZGVyIG1hdGVyaWFsIG9yIGRpc3BsYXkgc3R5bGUgaXMgaWdub3JlZFxyXG4gICAgICovXHJcbiAgICBjb25zdCBjb2xvck1hdGVyaWFsRGF0YSA9IHJlbmRlclZpZXcucmVuZGVyRGF0YS5jb2xvck1hdGVyaWFsXHJcbiAgICBsZXQgbWF0ID0gJydcclxuICAgIGNvbnN0IHVzZUNvbG9yTWF0ZXJpYWxIYXNoID1cclxuICAgICAgY29sb3JNYXRlcmlhbERhdGEgJiZcclxuICAgICAgIW1hdGVyaWFsRGF0YSAmJlxyXG4gICAgICAocmVuZGVyVmlldy5nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5MSU5FIHx8XHJcbiAgICAgICAgcmVuZGVyVmlldy5nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5QT0lOVCB8fFxyXG4gICAgICAgIHJlbmRlclZpZXcuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuVEVYVClcclxuXHJcbiAgICBjb25zdCBkaXNwbGF5U3R5bGVGaXJzdCA9IHJlbmRlclZpZXcuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTElORVxyXG4gICAgaWYgKCFtYXRlcmlhbERhdGEpIHtcclxuICAgICAgbWF0ZXJpYWxEYXRhID0gZGlzcGxheVN0eWxlRmlyc3RcclxuICAgICAgICA/IHJlbmRlclZpZXcucmVuZGVyRGF0YS5kaXNwbGF5U3R5bGUgfHwgcmVuZGVyVmlldy5yZW5kZXJEYXRhLnJlbmRlck1hdGVyaWFsXHJcbiAgICAgICAgOiByZW5kZXJWaWV3LnJlbmRlckRhdGEucmVuZGVyTWF0ZXJpYWwgfHwgcmVuZGVyVmlldy5yZW5kZXJEYXRhLmRpc3BsYXlTdHlsZVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBEVUkzIHJ1bGVzIHdoaWNoIGFwcGx5IG9ubHkgaWYgdGhlIHRlY2huaWNhbCBtYXRlcmlhbCBleGlzdCAoY29sb3IgcHJveGllcykgaW4gYWJzZW5jZSBvZiBhIHJlbmRlciBtYXRlcmlhbCBvciBkaXNwbGF5IHN0eWxlIGZyb20gRFVJMlxyXG4gICAgICogIFRoZSB0ZWNobmljYWwgbWF0ZXJpYWwgd2lsbCBjb250cmlidXRlIHRvIHRoZSBtYXRlcmlhbCBoYXNoXHJcbiAgICAgKi9cclxuICAgIGlmICh1c2VDb2xvck1hdGVyaWFsSGFzaCkge1xyXG4gICAgICBtYXQgKz0gTWF0ZXJpYWxzLm1pbmltYWxNYXRlcmlhbFRvU3RyaW5nKGNvbG9yTWF0ZXJpYWxEYXRhKVxyXG4gICAgfSBlbHNlIGlmIChtYXRlcmlhbERhdGEpIHtcclxuICAgICAgbWF0ID1cclxuICAgICAgICBNYXRlcmlhbHMuaXNSZW5kZXJNYXRlcmlhbChtYXRlcmlhbERhdGEpICYmXHJcbiAgICAgICAgKHJlbmRlclZpZXcuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTUVTSCB8fFxyXG4gICAgICAgICAgcmVuZGVyVmlldy5nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5QT0lOVCB8fCAvLyBNYXliZSBldmVuIGluY2x1ZGUgR2VvbWV0cnlUeXBlLlBPSU5UX0NMT1VEIGFjdHVhbGx5P1xyXG4gICAgICAgICAgcmVuZGVyVmlldy5nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5URVhUKVxyXG4gICAgICAgICAgPyBNYXRlcmlhbHMucmVuZGVyTWF0ZXJpYWxUb1N0cmluZyhtYXRlcmlhbERhdGEpXHJcbiAgICAgICAgICA6IE1hdGVyaWFscy5pc0Rpc3BsYXlTdHlsZShtYXRlcmlhbERhdGEpICYmXHJcbiAgICAgICAgICAgIHJlbmRlclZpZXcuZ2VvbWV0cnlUeXBlICE9PSBHZW9tZXRyeVR5cGUuTUVTSFxyXG4gICAgICAgICAgPyBNYXRlcmlhbHMuZGlzcGxheVN0eWxlVG9TdHJpbmcobWF0ZXJpYWxEYXRhKVxyXG4gICAgICAgICAgOiBNYXRlcmlhbHMuaXNSZW5kZXJNYXRlcmlhbChtYXRlcmlhbERhdGEpXHJcbiAgICAgICAgICA/IE1hdGVyaWFscy5yZW5kZXJNYXRlcmlhbFRvU3RyaW5nKG1hdGVyaWFsRGF0YSlcclxuICAgICAgICAgIDogJydcclxuICAgICAgaWYgKChtYXRlcmlhbERhdGEgYXMgTWF0ZXJpYWxPcHRpb25zKS5zdGVuY2lsT3V0bGluZXMpIHtcclxuICAgICAgICBtYXQgKz0gJy8nICsgKG1hdGVyaWFsRGF0YSBhcyBNYXRlcmlhbE9wdGlvbnMpLnN0ZW5jaWxPdXRsaW5lc1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgobWF0ZXJpYWxEYXRhIGFzIE1hdGVyaWFsT3B0aW9ucykucG9pbnRTaXplKSB7XHJcbiAgICAgICAgbWF0ICs9ICcvJyArIChtYXRlcmlhbERhdGEgYXMgTWF0ZXJpYWxPcHRpb25zKS5wb2ludFNpemVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZW9tZXRyeSA9ICcnXHJcbiAgICBpZiAocmVuZGVyVmlldy5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMpXHJcbiAgICAgIGdlb21ldHJ5ID0gcmVuZGVyVmlldy5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMuQ09MT1IgPyAndmVydGV4Q29sb3JzJyA6ICcnXHJcblxyXG4gICAgY29uc3QgcyA9XHJcbiAgICAgIHJlbmRlclZpZXcuZ2VvbWV0cnlUeXBlLnRvU3RyaW5nKCkgK1xyXG4gICAgICBnZW9tZXRyeSArXHJcbiAgICAgIG1hdCArXHJcbiAgICAgIChyZW5kZXJWaWV3Lmdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLlRFWFQgJiZcclxuICAgICAgcmVuZGVyVmlldy5yZW5kZXJEYXRhLmdlb21ldHJ5Lm1ldGFEYXRhPy5zY3JlZW5PcmllbnRlZCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyAoXHJcbiAgICAgICAgICAgIHJlbmRlclZpZXcucmVuZGVyRGF0YS5nZW9tZXRyeS5tZXRhRGF0YT8uc2NyZWVuT3JpZW50ZWQgYXMgYm9vbGVhblxyXG4gICAgICAgICAgKS50b1N0cmluZygpXHJcbiAgICAgICAgOiAnJykgK1xyXG4gICAgICAocmVuZGVyVmlldy5yZW5kZXJEYXRhLmdlb21ldHJ5Lmluc3RhbmNlZCA/ICdpbnN0YW5jZWQnIDogJycpXHJcbiAgICByZXR1cm4gTWF0ZXJpYWxzLmhhc2hDb2RlKHMpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGlzVHJhbnNwYXJlbnQobWF0ZXJpYWw6IE1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwudHJhbnNwYXJlbnQgPT09IHRydWUgJiYgbWF0ZXJpYWwub3BhY2l0eSA8IDFcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNPcGFxdWUobWF0ZXJpYWw6IE1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9PT0gZmFsc2UgfHxcclxuICAgICAgKG1hdGVyaWFsLnRyYW5zcGFyZW50ID09PSB0cnVlICYmIG1hdGVyaWFsLm9wYWNpdHkgPj0gMSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNTcGVja2xlTWF0ZXJpYWwoXHJcbiAgICBtYXRlcmlhbDogTWF0ZXJpYWxcclxuICApOiBtYXRlcmlhbCBpcyBTcGVja2xlTWF0ZXJpYWwgJiBNYXRlcmlhbCB7XHJcbiAgICByZXR1cm4gJ3NwZWNrbGVVc2VyRGF0YScgaW4gbWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlRGVmYXVsdE1lc2hNYXRlcmlhbHMoKSB7XHJcbiAgICB0aGlzLm1lc2hHaG9zdE1hdGVyaWFsID0gbmV3IFNwZWNrbGVHaG9zdE1hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IDB4ZmZmZmZmLFxyXG4gICAgICBzaWRlOiBGcm9udFNpZGUsXHJcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICBvcGFjaXR5OiAwLjFcclxuICAgIH0pXHJcbiAgICB0aGlzLm1lc2hHaG9zdE1hdGVyaWFsLmRlcHRoV3JpdGUgPSBmYWxzZVxyXG4gICAgdGhpcy5tZXNoR2hvc3RNYXRlcmlhbC5hbHBoYVRlc3QgPSAxXHJcblxyXG4gICAgdGhpcy5tZXNoR3JhZGllbnRNYXRlcmlhbCA9IG5ldyBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwoe1xyXG4gICAgICBzaWRlOiBEb3VibGVTaWRlLFxyXG4gICAgICB0cmFuc3BhcmVudDogZmFsc2UsXHJcbiAgICAgIG9wYWNpdHk6IDFcclxuICAgIH0pXHJcbiAgICA7KHRoaXMubWVzaEdyYWRpZW50TWF0ZXJpYWwgYXMgU3BlY2tsZVN0YW5kYXJkQ29sb3JlZE1hdGVyaWFsKS5zZXRHcmFkaWVudFRleHR1cmUoXHJcbiAgICAgIGF3YWl0IEFzc2V0cy5nZXRUZXh0dXJlKGRlZmF1bHRHcmFkaWVudClcclxuICAgIClcclxuICAgIHRoaXMubWVzaEdyYWRpZW50TWF0ZXJpYWwuY2xpcFNoYWRvd3MgPSB0cnVlXHJcblxyXG4gICAgdGhpcy5tZXNoVHJhbnNwYXJlbnRHcmFkaWVudE1hdGVyaWFsID0gbmV3IFNwZWNrbGVTdGFuZGFyZENvbG9yZWRNYXRlcmlhbCh7XHJcbiAgICAgIHNpZGU6IERvdWJsZVNpZGUsXHJcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICBvcGFjaXR5OiAwLjVcclxuICAgIH0pXHJcbiAgICA7KFxyXG4gICAgICB0aGlzLm1lc2hUcmFuc3BhcmVudEdyYWRpZW50TWF0ZXJpYWwgYXMgU3BlY2tsZVN0YW5kYXJkQ29sb3JlZE1hdGVyaWFsXHJcbiAgICApLnNldEdyYWRpZW50VGV4dHVyZShhd2FpdCBBc3NldHMuZ2V0VGV4dHVyZShkZWZhdWx0R3JhZGllbnQpKVxyXG4gICAgdGhpcy5tZXNoVHJhbnNwYXJlbnRHcmFkaWVudE1hdGVyaWFsLmNsaXBTaGFkb3dzID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMubWVzaENvbG9yZWRNYXRlcmlhbCA9IG5ldyBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwoe1xyXG4gICAgICBzaWRlOiBEb3VibGVTaWRlLFxyXG4gICAgICB0cmFuc3BhcmVudDogZmFsc2UsXHJcbiAgICAgIHdpcmVmcmFtZTogZmFsc2VcclxuICAgIH0pXHJcbiAgICB0aGlzLm1lc2hDb2xvcmVkTWF0ZXJpYWwuY2xpcFNoYWRvd3MgPSB0cnVlXHJcblxyXG4gICAgdGhpcy5tZXNoVHJhbnNwYXJlbnRDb2xvcmVkTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZVN0YW5kYXJkQ29sb3JlZE1hdGVyaWFsKHtcclxuICAgICAgc2lkZTogRG91YmxlU2lkZSxcclxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgIG9wYWNpdHk6IDAuNVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLm1lc2hIaWRkZW5NYXRlcmlhbCA9IG5ldyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbCh7XHJcbiAgICAgIHNpZGU6IERvdWJsZVNpZGUsXHJcbiAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcclxuICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgd2lyZWZyYW1lOiBmYWxzZVxyXG4gICAgfSlcclxuICAgIHRoaXMubWVzaEhpZGRlbk1hdGVyaWFsLnZpc2libGUgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVMaW5lRGVmYXVsdE1hdGVyaWFscygpIHtcclxuICAgIHRoaXMubGluZUdob3N0TWF0ZXJpYWwgPSBuZXcgU3BlY2tsZUxpbmVNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiAweGZmZmZmZixcclxuICAgICAgbGluZXdpZHRoOiAxLCAvLyBpbiB3b3JsZCB1bml0cyB3aXRoIHNpemUgYXR0ZW51YXRpb24sIHBpeGVscyBvdGhlcndpc2VcclxuICAgICAgd29ybGRVbml0czogZmFsc2UsXHJcbiAgICAgIHZlcnRleENvbG9yczogdHJ1ZSxcclxuICAgICAgYWxwaGFUb0NvdmVyYWdlOiBmYWxzZSxcclxuICAgICAgcmVzb2x1dGlvbjogbmV3IFZlY3RvcjIoKVxyXG4gICAgfSlcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5saW5lR2hvc3RNYXRlcmlhbCkuY29sb3IgPSBuZXcgQ29sb3IoMHhmZmZmZmYpXHJcbiAgICA7KDxTcGVja2xlTGluZU1hdGVyaWFsPnRoaXMubGluZUdob3N0TWF0ZXJpYWwpLmxpbmV3aWR0aCA9IDFcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5saW5lR2hvc3RNYXRlcmlhbCkud29ybGRVbml0cyA9IHRydWVcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5saW5lR2hvc3RNYXRlcmlhbCkudmVydGV4Q29sb3JzID0gdHJ1ZVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLmxpbmVHaG9zdE1hdGVyaWFsKS5waXhlbFRocmVzaG9sZCA9IDAuNVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLmxpbmVHaG9zdE1hdGVyaWFsKS5yZXNvbHV0aW9uID0gbmV3IFZlY3RvcjIoKVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLmxpbmVHaG9zdE1hdGVyaWFsKS50b25lTWFwcGVkID0gZmFsc2VcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5saW5lR2hvc3RNYXRlcmlhbCkub3BhY2l0eSA9IDAuMVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLmxpbmVHaG9zdE1hdGVyaWFsKS50cmFuc3BhcmVudCA9IHRydWVcclxuXHJcbiAgICB0aGlzLmxpbmVDb2xvcmVkTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZUxpbmVNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiAweGZmZmZmZixcclxuICAgICAgbGluZXdpZHRoOiAxLCAvLyBpbiB3b3JsZCB1bml0cyB3aXRoIHNpemUgYXR0ZW51YXRpb24sIHBpeGVscyBvdGhlcndpc2VcclxuICAgICAgd29ybGRVbml0czogZmFsc2UsXHJcbiAgICAgIHZlcnRleENvbG9yczogdHJ1ZSxcclxuICAgICAgYWxwaGFUb0NvdmVyYWdlOiBmYWxzZSxcclxuICAgICAgcmVzb2x1dGlvbjogbmV3IFZlY3RvcjIoKVxyXG4gICAgfSlcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5saW5lQ29sb3JlZE1hdGVyaWFsKS5jb2xvciA9IG5ldyBDb2xvcigweGZmZmZmZilcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5saW5lQ29sb3JlZE1hdGVyaWFsKS5saW5ld2lkdGggPSAxXHJcbiAgICA7KDxTcGVja2xlTGluZU1hdGVyaWFsPnRoaXMubGluZUNvbG9yZWRNYXRlcmlhbCkud29ybGRVbml0cyA9IGZhbHNlXHJcbiAgICA7KDxTcGVja2xlTGluZU1hdGVyaWFsPnRoaXMubGluZUNvbG9yZWRNYXRlcmlhbCkudmVydGV4Q29sb3JzID0gdHJ1ZVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLmxpbmVDb2xvcmVkTWF0ZXJpYWwpLnBpeGVsVGhyZXNob2xkID0gMC41XHJcbiAgICA7KDxTcGVja2xlTGluZU1hdGVyaWFsPnRoaXMubGluZUNvbG9yZWRNYXRlcmlhbCkucmVzb2x1dGlvbiA9IG5ldyBWZWN0b3IyKClcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5saW5lQ29sb3JlZE1hdGVyaWFsKS50b25lTWFwcGVkID0gZmFsc2VcclxuXHJcbiAgICB0aGlzLmxpbmVIaWRkZW5NYXRlcmlhbCA9IG5ldyBTcGVja2xlTGluZU1hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IDB4ZmZmZmZmLFxyXG4gICAgICBsaW5ld2lkdGg6IDEsIC8vIGluIHdvcmxkIHVuaXRzIHdpdGggc2l6ZSBhdHRlbnVhdGlvbiwgcGl4ZWxzIG90aGVyd2lzZVxyXG4gICAgICB3b3JsZFVuaXRzOiBmYWxzZSxcclxuICAgICAgdmVydGV4Q29sb3JzOiB0cnVlLFxyXG4gICAgICBhbHBoYVRvQ292ZXJhZ2U6IGZhbHNlLFxyXG4gICAgICByZXNvbHV0aW9uOiBuZXcgVmVjdG9yMigpXHJcbiAgICB9KVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLmxpbmVIaWRkZW5NYXRlcmlhbCkuY29sb3IgPSBuZXcgQ29sb3IoMHhmZjAwMDApXHJcbiAgICA7KDxTcGVja2xlTGluZU1hdGVyaWFsPnRoaXMubGluZUhpZGRlbk1hdGVyaWFsKS5saW5ld2lkdGggPSAxXHJcbiAgICA7KDxTcGVja2xlTGluZU1hdGVyaWFsPnRoaXMubGluZUhpZGRlbk1hdGVyaWFsKS53b3JsZFVuaXRzID0gZmFsc2VcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5saW5lSGlkZGVuTWF0ZXJpYWwpLnZlcnRleENvbG9ycyA9IHRydWVcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5saW5lSGlkZGVuTWF0ZXJpYWwpLnBpeGVsVGhyZXNob2xkID0gMC41XHJcbiAgICA7KDxTcGVja2xlTGluZU1hdGVyaWFsPnRoaXMubGluZUhpZGRlbk1hdGVyaWFsKS5yZXNvbHV0aW9uID0gbmV3IFZlY3RvcjIoKVxyXG4gICAgdGhpcy5saW5lSGlkZGVuTWF0ZXJpYWwudmlzaWJsZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZURlZmF1bHRQb2ludE1hdGVyaWFscygpIHtcclxuICAgIHRoaXMucG9pbnRHaG9zdE1hdGVyaWFsID0gbmV3IFNwZWNrbGVQb2ludE1hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IDB4ZmZmZmZmLFxyXG4gICAgICB2ZXJ0ZXhDb2xvcnM6IGZhbHNlLFxyXG4gICAgICBzaXplOiAyLFxyXG4gICAgICBvcGFjaXR5OiAwLjAxLFxyXG4gICAgICBzaXplQXR0ZW51YXRpb246IGZhbHNlXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMucG9pbnRDbG91ZENvbG91cmVkTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZVBvaW50Q29sb3VyZWRNYXRlcmlhbChcclxuICAgICAge1xyXG4gICAgICAgIGNvbG9yOiAweGZmZmZmZixcclxuICAgICAgICB2ZXJ0ZXhDb2xvcnM6IGZhbHNlLFxyXG4gICAgICAgIHNpemU6IDIsXHJcbiAgICAgICAgc2l6ZUF0dGVudWF0aW9uOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBbJ1VTRV9HUkFESUVOVF9SQU1QJ11cclxuICAgIClcclxuICAgIDsodGhpcy5wb2ludENsb3VkQ29sb3VyZWRNYXRlcmlhbCBhcyBTcGVja2xlUG9pbnRNYXRlcmlhbCkudG9uZU1hcHBlZCA9IGZhbHNlXHJcbiAgICB0aGlzLnBvaW50Q2xvdWRHcmFkaWVudE1hdGVyaWFsID0gbmV3IFNwZWNrbGVQb2ludENvbG91cmVkTWF0ZXJpYWwoXHJcbiAgICAgIHtcclxuICAgICAgICBjb2xvcjogMHhmZmZmZmYsXHJcbiAgICAgICAgdmVydGV4Q29sb3JzOiBmYWxzZSxcclxuICAgICAgICBzaXplOiAyLFxyXG4gICAgICAgIHNpemVBdHRlbnVhdGlvbjogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgWydVU0VfR1JBRElFTlRfUkFNUCddXHJcbiAgICApXHJcbiAgICA7KFxyXG4gICAgICB0aGlzLnBvaW50Q2xvdWRHcmFkaWVudE1hdGVyaWFsIGFzIFNwZWNrbGVQb2ludENvbG91cmVkTWF0ZXJpYWxcclxuICAgICkuc2V0R3JhZGllbnRUZXh0dXJlKGF3YWl0IEFzc2V0cy5nZXRUZXh0dXJlKGRlZmF1bHRHcmFkaWVudCkpXHJcbiAgICA7KHRoaXMucG9pbnRHaG9zdE1hdGVyaWFsIGFzIFNwZWNrbGVQb2ludE1hdGVyaWFsKS50b25lTWFwcGVkID0gZmFsc2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlRGVmYXVsdFRleHRNYXRlcmlhbHMoKSB7XHJcbiAgICB0aGlzLnRleHRHaG9zdE1hdGVyaWFsID0gbmV3IFNwZWNrbGVUZXh0TWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogMHhmZmZmZmYsXHJcbiAgICAgIG9wYWNpdHk6IDAuMSxcclxuICAgICAgc2lkZTogRG91YmxlU2lkZVxyXG4gICAgfSlcclxuICAgIHRoaXMudGV4dEdob3N0TWF0ZXJpYWwudHJhbnNwYXJlbnQgPVxyXG4gICAgICB0aGlzLnRleHRHaG9zdE1hdGVyaWFsLm9wYWNpdHkgPCAxID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICB0aGlzLnRleHRHaG9zdE1hdGVyaWFsLmRlcHRoV3JpdGUgPSB0aGlzLnRleHRHaG9zdE1hdGVyaWFsLnRyYW5zcGFyZW50XHJcbiAgICAgID8gZmFsc2VcclxuICAgICAgOiB0cnVlXHJcbiAgICB0aGlzLnRleHRHaG9zdE1hdGVyaWFsLnRvbmVNYXBwZWQgPSBmYWxzZVxyXG4gICAgOyh0aGlzLnRleHRHaG9zdE1hdGVyaWFsIGFzIFNwZWNrbGVUZXh0TWF0ZXJpYWwpLmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG5cclxuICAgIHRoaXMudGV4dEdob3N0TWF0ZXJpYWwgPSAoXHJcbiAgICAgIHRoaXMudGV4dEdob3N0TWF0ZXJpYWwgYXMgU3BlY2tsZVRleHRNYXRlcmlhbFxyXG4gICAgKS5nZXREZXJpdmVkQmF0Y2hlZE1hdGVyaWFsKClcclxuXHJcbiAgICB0aGlzLnRleHRDb2xvcmVkTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZVRleHRDb2xvcmVkTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogMHhmZmZmZmYsXHJcbiAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgIHNpZGU6IERvdWJsZVNpZGVcclxuICAgIH0pXHJcbiAgICB0aGlzLnRleHRDb2xvcmVkTWF0ZXJpYWwudHJhbnNwYXJlbnQgPVxyXG4gICAgICB0aGlzLnRleHRDb2xvcmVkTWF0ZXJpYWwub3BhY2l0eSA8IDEgPyB0cnVlIDogZmFsc2VcclxuICAgIHRoaXMudGV4dENvbG9yZWRNYXRlcmlhbC5kZXB0aFdyaXRlID0gdGhpcy50ZXh0Q29sb3JlZE1hdGVyaWFsLnRyYW5zcGFyZW50XHJcbiAgICAgID8gZmFsc2VcclxuICAgICAgOiB0cnVlXHJcbiAgICB0aGlzLnRleHRDb2xvcmVkTWF0ZXJpYWwudG9uZU1hcHBlZCA9IGZhbHNlXHJcbiAgICA7KFxyXG4gICAgICB0aGlzLnRleHRDb2xvcmVkTWF0ZXJpYWwgYXMgU3BlY2tsZVRleHRDb2xvcmVkTWF0ZXJpYWxcclxuICAgICkuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcblxyXG4gICAgdGhpcy50ZXh0Q29sb3JlZE1hdGVyaWFsID0gKFxyXG4gICAgICB0aGlzLnRleHRDb2xvcmVkTWF0ZXJpYWwgYXMgU3BlY2tsZVRleHRDb2xvcmVkTWF0ZXJpYWxcclxuICAgICkuZ2V0RGVyaXZlZEJhdGNoZWRNYXRlcmlhbCgpXHJcblxyXG4gICAgdGhpcy50ZXh0R3JhZGllbnRNYXRlcmlhbCA9IG5ldyBTcGVja2xlVGV4dENvbG9yZWRNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiAweGZmZmZmZixcclxuICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgc2lkZTogRG91YmxlU2lkZVxyXG4gICAgfSlcclxuICAgIHRoaXMudGV4dEdyYWRpZW50TWF0ZXJpYWwudHJhbnNwYXJlbnQgPVxyXG4gICAgICB0aGlzLnRleHRHcmFkaWVudE1hdGVyaWFsLm9wYWNpdHkgPCAxID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICB0aGlzLnRleHRHcmFkaWVudE1hdGVyaWFsLmRlcHRoV3JpdGUgPSB0aGlzLnRleHRHcmFkaWVudE1hdGVyaWFsLnRyYW5zcGFyZW50XHJcbiAgICAgID8gZmFsc2VcclxuICAgICAgOiB0cnVlXHJcbiAgICB0aGlzLnRleHRHcmFkaWVudE1hdGVyaWFsLnRvbmVNYXBwZWQgPSBmYWxzZVxyXG4gICAgOyhcclxuICAgICAgdGhpcy50ZXh0R3JhZGllbnRNYXRlcmlhbCBhcyBTcGVja2xlVGV4dENvbG9yZWRNYXRlcmlhbFxyXG4gICAgKS5jb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuICAgIDsodGhpcy50ZXh0R3JhZGllbnRNYXRlcmlhbCBhcyBTcGVja2xlVGV4dENvbG9yZWRNYXRlcmlhbCkuc2V0R3JhZGllbnRUZXh0dXJlKFxyXG4gICAgICBhd2FpdCBBc3NldHMuZ2V0VGV4dHVyZShkZWZhdWx0R3JhZGllbnQpXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy50ZXh0R3JhZGllbnRNYXRlcmlhbCA9IChcclxuICAgICAgdGhpcy50ZXh0R3JhZGllbnRNYXRlcmlhbCBhcyBTcGVja2xlVGV4dENvbG9yZWRNYXRlcmlhbFxyXG4gICAgKS5nZXREZXJpdmVkQmF0Y2hlZE1hdGVyaWFsKClcclxuXHJcbiAgICB0aGlzLnRleHRIaWRkZW5NYXRlcmlhbCA9IG5ldyBTcGVja2xlVGV4dE1hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IDB4ZmZmZmZmLFxyXG4gICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICBzaWRlOiBEb3VibGVTaWRlXHJcbiAgICB9KVxyXG4gICAgdGhpcy50ZXh0SGlkZGVuTWF0ZXJpYWwudmlzaWJsZSA9IGZhbHNlXHJcbiAgICB0aGlzLnRleHRIaWRkZW5NYXRlcmlhbC50b25lTWFwcGVkID0gZmFsc2VcclxuICAgIDsodGhpcy50ZXh0SGlkZGVuTWF0ZXJpYWwgYXMgU3BlY2tsZVRleHRNYXRlcmlhbCkuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcblxyXG4gICAgdGhpcy50ZXh0SGlkZGVuTWF0ZXJpYWwgPSAoXHJcbiAgICAgIHRoaXMudGV4dEhpZGRlbk1hdGVyaWFsIGFzIFNwZWNrbGVUZXh0TWF0ZXJpYWxcclxuICAgICkuZ2V0RGVyaXZlZEJhdGNoZWRNYXRlcmlhbCgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZURlZmF1bHROdWxsTWF0ZXJpYWxzKCkge1xyXG4gICAgdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFJlbmRlck1hdGVyaWFsSGFzaF0gPSBuZXcgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogMHg3ZjdmN2YsXHJcbiAgICAgIGVtaXNzaXZlOiAweDAsXHJcbiAgICAgIHJvdWdobmVzczogMSxcclxuICAgICAgbWV0YWxuZXNzOiAwLFxyXG4gICAgICBzaWRlOiBEb3VibGVTaWRlXHJcbiAgICB9KVxyXG4gICAgOyhcclxuICAgICAgdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFJlbmRlck1hdGVyaWFsSGFzaF0gYXMgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWxcclxuICAgICkuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcblxyXG4gICAgdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFJlbmRlck1hdGVyaWFsVmVydGV4Q29sb3JzSGFzaF0gPVxyXG4gICAgICBuZXcgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgIGNvbG9yOiAweGZmZmZmZixcclxuICAgICAgICBlbWlzc2l2ZTogMHgwLFxyXG4gICAgICAgIHJvdWdobmVzczogMSxcclxuICAgICAgICBtZXRhbG5lc3M6IDAsXHJcbiAgICAgICAgc2lkZTogRG91YmxlU2lkZSxcclxuICAgICAgICB2ZXJ0ZXhDb2xvcnM6IHRydWVcclxuICAgICAgfSlcclxuICAgIDsoXHJcbiAgICAgIHRoaXMubWF0ZXJpYWxNYXBbXHJcbiAgICAgICAgTWF0ZXJpYWxzLk51bGxSZW5kZXJNYXRlcmlhbFZlcnRleENvbG9yc0hhc2hcclxuICAgICAgXSBhcyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbFxyXG4gICAgKS5jb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuXHJcbiAgICBjb25zdCBoYXNoID0gTWF0ZXJpYWxzLk51bGxEaXNwbGF5U3R5bGVIYXNoIC8vIFNvIHByZXR0aWVyIGRvZXNuJ3QgZnVjayB1cCBldmVyeXRoaW5nXHJcbiAgICB0aGlzLm1hdGVyaWFsTWFwW2hhc2hdID0gbmV3IFNwZWNrbGVMaW5lTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogMHg3ZjdmN2YsXHJcbiAgICAgIGxpbmV3aWR0aDogMSwgLy8gaW4gd29ybGQgdW5pdHMgd2l0aCBzaXplIGF0dGVudWF0aW9uLCBwaXhlbHMgb3RoZXJ3aXNlXHJcbiAgICAgIHdvcmxkVW5pdHM6IGZhbHNlLFxyXG4gICAgICB2ZXJ0ZXhDb2xvcnM6IHRydWUsXHJcbiAgICAgIGFscGhhVG9Db3ZlcmFnZTogZmFsc2UsXHJcbiAgICAgIHJlc29sdXRpb246IG5ldyBWZWN0b3IyKClcclxuICAgIH0pXHJcbiAgICA7KDxTcGVja2xlTGluZU1hdGVyaWFsPnRoaXMubWF0ZXJpYWxNYXBbaGFzaF0pLmNvbG9yID0gbmV3IENvbG9yKDB4N2Y3ZjdmKVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLm1hdGVyaWFsTWFwW2hhc2hdKS5jb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5tYXRlcmlhbE1hcFtoYXNoXSkubGluZXdpZHRoID0gMVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLm1hdGVyaWFsTWFwW2hhc2hdKS53b3JsZFVuaXRzID0gZmFsc2VcclxuICAgIDsoPFNwZWNrbGVMaW5lTWF0ZXJpYWw+dGhpcy5tYXRlcmlhbE1hcFtoYXNoXSkudmVydGV4Q29sb3JzID0gdHJ1ZVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLm1hdGVyaWFsTWFwW2hhc2hdKS5waXhlbFRocmVzaG9sZCA9IDAuNVxyXG4gICAgOyg8U3BlY2tsZUxpbmVNYXRlcmlhbD50aGlzLm1hdGVyaWFsTWFwW2hhc2hdKS5yZXNvbHV0aW9uID0gbmV3IFZlY3RvcjIoKVxyXG5cclxuICAgIHRoaXMubWF0ZXJpYWxNYXBbTWF0ZXJpYWxzLk51bGxUZXh0RGlzcGxheVN0eWxlXSA9IG5ldyBTcGVja2xlVGV4dE1hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IDB4N2Y3ZjdmLFxyXG4gICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICBzaWRlOiBEb3VibGVTaWRlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFRleHREaXNwbGF5U3R5bGVdLnRyYW5zcGFyZW50ID0gZmFsc2VcclxuICAgIHRoaXMubWF0ZXJpYWxNYXBbTWF0ZXJpYWxzLk51bGxUZXh0RGlzcGxheVN0eWxlXS5kZXB0aFdyaXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFRleHREaXNwbGF5U3R5bGVdLnRvbmVNYXBwZWQgPSBmYWxzZVxyXG4gICAgOyhcclxuICAgICAgdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFRleHREaXNwbGF5U3R5bGVdIGFzIFNwZWNrbGVUZXh0TWF0ZXJpYWxcclxuICAgICkuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcblxyXG4gICAgdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFBvaW50TWF0ZXJpYWxIYXNoXSA9IG5ldyBTcGVja2xlUG9pbnRNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiAweDdmN2Y3ZixcclxuICAgICAgdmVydGV4Q29sb3JzOiBmYWxzZSxcclxuICAgICAgc2l6ZTogMixcclxuICAgICAgc2l6ZUF0dGVudWF0aW9uOiBmYWxzZVxyXG4gICAgfSlcclxuICAgIDsoXHJcbiAgICAgIHRoaXMubWF0ZXJpYWxNYXBbTWF0ZXJpYWxzLk51bGxQb2ludE1hdGVyaWFsSGFzaF0gYXMgU3BlY2tsZVBvaW50TWF0ZXJpYWxcclxuICAgICkuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcblxyXG4gICAgdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFBvaW50Q2xvdWRWZXJ0ZXhDb2xvcnNNYXRlcmlhbEhhc2hdID1cclxuICAgICAgbmV3IFNwZWNrbGVQb2ludE1hdGVyaWFsKHtcclxuICAgICAgICBjb2xvcjogMHhmZmZmZmYsXHJcbiAgICAgICAgdmVydGV4Q29sb3JzOiB0cnVlLFxyXG4gICAgICAgIHNpemU6IDIsXHJcbiAgICAgICAgc2l6ZUF0dGVudWF0aW9uOiBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFBvaW50Q2xvdWRNYXRlcmlhbEhhc2hdID0gbmV3IFNwZWNrbGVQb2ludE1hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IDB4ZmZmZmZmLFxyXG4gICAgICB2ZXJ0ZXhDb2xvcnM6IGZhbHNlLFxyXG4gICAgICBzaXplOiAyLFxyXG4gICAgICBzaXplQXR0ZW51YXRpb246IGZhbHNlXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMubWF0ZXJpYWxNYXBbTWF0ZXJpYWxzLk51bGxSZW5kZXJNYXRlcmlhbEluc3RhbmNlZEhhc2hdID1cclxuICAgICAgbmV3IFNwZWNrbGVTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICBjb2xvcjogMHg3ZjdmN2YsXHJcbiAgICAgICAgZW1pc3NpdmU6IDB4MCxcclxuICAgICAgICByb3VnaG5lc3M6IDEsXHJcbiAgICAgICAgbWV0YWxuZXNzOiAwLFxyXG4gICAgICAgIHNpZGU6IERvdWJsZVNpZGVcclxuICAgICAgfSlcclxuICAgIDsoXHJcbiAgICAgIHRoaXMubWF0ZXJpYWxNYXBbXHJcbiAgICAgICAgTWF0ZXJpYWxzLk51bGxSZW5kZXJNYXRlcmlhbEluc3RhbmNlZEhhc2hcclxuICAgICAgXSBhcyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbFxyXG4gICAgKS5jb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuXHJcbiAgICB0aGlzLm1hdGVyaWFsTWFwW01hdGVyaWFscy5OdWxsUmVuZGVyTWF0ZXJpYWxJbnN0YW5jZWRWZXJ0ZXhDb2xvckhhc2hdID1cclxuICAgICAgbmV3IFNwZWNrbGVTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICBjb2xvcjogMHhmZmZmZmYsXHJcbiAgICAgICAgZW1pc3NpdmU6IDB4MCxcclxuICAgICAgICByb3VnaG5lc3M6IDEsXHJcbiAgICAgICAgbWV0YWxuZXNzOiAwLFxyXG4gICAgICAgIHNpZGU6IERvdWJsZVNpZGUsXHJcbiAgICAgICAgdmVydGV4Q29sb3JzOiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICA7KFxyXG4gICAgICB0aGlzLm1hdGVyaWFsTWFwW1xyXG4gICAgICAgIE1hdGVyaWFscy5OdWxsUmVuZGVyTWF0ZXJpYWxJbnN0YW5jZWRWZXJ0ZXhDb2xvckhhc2hcclxuICAgICAgXSBhcyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbFxyXG4gICAgKS5jb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVEZWZhdWx0TWF0ZXJpYWxzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVEZWZhdWx0TWVzaE1hdGVyaWFscygpXHJcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUxpbmVEZWZhdWx0TWF0ZXJpYWxzKClcclxuICAgIGF3YWl0IHRoaXMuY3JlYXRlRGVmYXVsdFBvaW50TWF0ZXJpYWxzKClcclxuICAgIGF3YWl0IHRoaXMuY3JlYXRlRGVmYXVsdFRleHRNYXRlcmlhbHMoKVxyXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVEZWZhdWx0TnVsbE1hdGVyaWFscygpXHJcbiAgICB0aGlzLmRlZmF1bHRHcmFkaWVudFRleHR1cmVEYXRhID0gYXdhaXQgQXNzZXRzLmdldFRleHR1cmVEYXRhKGRlZmF1bHRHcmFkaWVudClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZU1lc2hNYXRlcmlhbChtYXRlcmlhbERhdGE6IFJlbmRlck1hdGVyaWFsKTogTWF0ZXJpYWwge1xyXG4gICAgY29uc3QgbWF0OiBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbCA9IG5ldyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiBtYXRlcmlhbERhdGEuY29sb3IsXHJcbiAgICAgIGVtaXNzaXZlOiAweDAsIC8vIG1hdGVyaWFsRGF0YS5lbWlzc2l2ZS4gRGlzYWJsaW5nIHRoaXMgZm9yIG5vd1xyXG4gICAgICByb3VnaG5lc3M6IG1hdGVyaWFsRGF0YS5yb3VnaG5lc3MsXHJcbiAgICAgIG1ldGFsbmVzczogbWF0ZXJpYWxEYXRhLm1ldGFsbmVzcyxcclxuICAgICAgb3BhY2l0eTogbWF0ZXJpYWxEYXRhLm9wYWNpdHksXHJcbiAgICAgIHNpZGU6IERvdWJsZVNpZGVcclxuICAgIH0pXHJcbiAgICBtYXQudmVydGV4Q29sb3JzID0gbWF0ZXJpYWxEYXRhLnZlcnRleENvbG9yc1xyXG4gICAgbWF0LnRyYW5zcGFyZW50ID0gbWF0Lm9wYWNpdHkgPCAxID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICBtYXQuZGVwdGhXcml0ZSA9IG1hdC50cmFuc3BhcmVudCA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgbWF0LmNsaXBTaGFkb3dzID0gdHJ1ZVxyXG4gICAgbWF0LmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG4gICAgbWF0LmVtaXNzaXZlLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG4gICAgbWF0LnVwZGF0ZUFydGlmaWNpYWxSb3VnaG5lc3MoTWF0ZXJpYWxzLkRFRkFVTFRfQVJUSUZJQ0lBTF9ST1VHSE5FU1MpXHJcbiAgICByZXR1cm4gbWF0XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VMaW5lTWF0ZXJpYWwobWF0ZXJpYWxEYXRhOiBEaXNwbGF5U3R5bGUpOiBNYXRlcmlhbCB7XHJcbiAgICBjb25zdCBtYXQ6IFNwZWNrbGVMaW5lTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZUxpbmVNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiBtYXRlcmlhbERhdGEuY29sb3IsXHJcbiAgICAgIGxpbmV3aWR0aDogbWF0ZXJpYWxEYXRhLmxpbmVXZWlnaHQgPiAwID8gbWF0ZXJpYWxEYXRhLmxpbmVXZWlnaHQgOiAxLFxyXG4gICAgICB3b3JsZFVuaXRzOiBtYXRlcmlhbERhdGEubGluZVdlaWdodCA+IDAgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIHZlcnRleENvbG9yczogdHJ1ZSxcclxuICAgICAgYWxwaGFUb0NvdmVyYWdlOiBmYWxzZSxcclxuICAgICAgcmVzb2x1dGlvbjogbmV3IFZlY3RvcjIoKVxyXG4gICAgfSlcclxuICAgIG1hdC5jb2xvciA9IG5ldyBDb2xvcihtYXRlcmlhbERhdGEuY29sb3IpXHJcbiAgICBtYXQuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcbiAgICBtYXQub3BhY2l0eSA9IG1hdGVyaWFsRGF0YS5vcGFjaXR5ICE9PSB1bmRlZmluZWQgPyBtYXRlcmlhbERhdGEub3BhY2l0eSA6IDFcclxuICAgIG1hdC5saW5ld2lkdGggPSBtYXRlcmlhbERhdGEubGluZVdlaWdodCA+IDAgPyBtYXRlcmlhbERhdGEubGluZVdlaWdodCA6IDFcclxuICAgIG1hdC53b3JsZFVuaXRzID0gbWF0ZXJpYWxEYXRhLmxpbmVXZWlnaHQgPiAwID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICBtYXQudmVydGV4Q29sb3JzID0gdHJ1ZVxyXG4gICAgbWF0LnBpeGVsVGhyZXNob2xkID0gMC41XHJcbiAgICBtYXQucmVzb2x1dGlvbiA9IG5ldyBWZWN0b3IyKClcclxuICAgIG1hdC50b25lTWFwcGVkID0gZmFsc2VcclxuXHJcbiAgICByZXR1cm4gbWF0XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VQb2ludE1hdGVyaWFsKG1hdGVyaWFsRGF0YTogUmVuZGVyTWF0ZXJpYWwpOiBNYXRlcmlhbCB7XHJcbiAgICAvKiogVGhlcmUncyBhbiBpc3N1ZSB3aXRoIGhvdyB0aGUgZGF0YSBpcyBiZWluZyBzZW50LiBTb21lIHBvaW50IGNsb3Vkc1xyXG4gICAgICogIGhhdmUgcmVuZGVyIG1hdGVyaWFscyB3aXRoIDB4MDAwMDAwIGFzIHRoZSBiYXNlIGNvbG9yICsgdmVydGV4IGNvbG9yc1xyXG4gICAgICogIEJ5IGRlZmF1bHQgdGhyZWUuanMgbW9kdWxhdGVzIHRoZSBiYXNlIGNvbG9yIHdpdGggdGhlIHZlcnRleCBjb2xvcnNcclxuICAgICAqICBCdXQgc2luY2UgdGhlIGJhc2UgY29sb3IgaXMgYmxhY2ssIHRoZSByZXN1bHQgaXMgYWxzbyBibGFjay4gV2UnbGwgaGF2ZVxyXG4gICAgICogIHRvIGF2b2lkIHRoaXNcclxuICAgICAqL1xyXG4gICAgY29uc3QgaXNCYXNlQ29sb3JCbGFjayA9IG1hdGVyaWFsRGF0YS5jb2xvciA9PT0gLTE2Nzc3MjE2IC8vIDB4ZmYwMDAwMDAgKGJsYWNrKVxyXG4gICAgY29uc3Qgc2FmZUNvbG9yID0gbWF0ZXJpYWxEYXRhLnZlcnRleENvbG9yc1xyXG4gICAgICA/IGlzQmFzZUNvbG9yQmxhY2tcclxuICAgICAgICA/IDB4ZmZmZmZmXHJcbiAgICAgICAgOiBtYXRlcmlhbERhdGEuY29sb3JcclxuICAgICAgOiBtYXRlcmlhbERhdGEuY29sb3JcclxuICAgIGNvbnN0IG1hdCA9IG5ldyBTcGVja2xlUG9pbnRNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiBzYWZlQ29sb3IsXHJcbiAgICAgIC4uLihtYXRlcmlhbERhdGEub3BhY2l0eSAhPT0gdW5kZWZpbmVkICYmIHsgb3BhY2l0eTogbWF0ZXJpYWxEYXRhLm9wYWNpdHkgfSksXHJcbiAgICAgIC4uLihtYXRlcmlhbERhdGEudmVydGV4Q29sb3JzICE9PSB1bmRlZmluZWQgJiYge1xyXG4gICAgICAgIHZlcnRleENvbG9yczogbWF0ZXJpYWxEYXRhLnZlcnRleENvbG9yc1xyXG4gICAgICB9KSxcclxuICAgICAgc2l6ZTogMixcclxuICAgICAgc2l6ZUF0dGVudWF0aW9uOiBmYWxzZVxyXG4gICAgfSlcclxuICAgIGlmIChtYXQub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSBtYXQudHJhbnNwYXJlbnQgPSBtYXQub3BhY2l0eSA8IDEgPyB0cnVlIDogZmFsc2VcclxuICAgIG1hdC5kZXB0aFdyaXRlID0gbWF0LnRyYW5zcGFyZW50ID8gZmFsc2UgOiB0cnVlXHJcbiAgICBtYXQudG9uZU1hcHBlZCA9IGZhbHNlXHJcbiAgICBtYXQuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcbiAgICByZXR1cm4gbWF0XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VUZXh0TWF0ZXJpYWwobWF0ZXJpYWxEYXRhOiBEaXNwbGF5U3R5bGUpOiBNYXRlcmlhbCB7XHJcbiAgICAvKiogIVRoaXMgc2hvdWxkIG5vdCBiZSBuZWNjZXNzYXJ5IGFueW1vcmUgb25jZSB3ZSBpbXBsZW1lbnQgcHJvcGVyIHRleHQgYmF0Y2hpbmchXHJcbiAgICAgKiAgSWYgdGhlIHRleHQgaGFkIG5vIHJlbmRlciBtYXRlcmlhbCBvciBkaXNwbGF5IHN0eWxlLCB3ZSBzaW1wbHkgdXNlIHRoZSBkZWZhdWx0XHJcbiAgICAgKiAgbnVsbCB0ZXh0IG1hdGVyaWFsXHJcbiAgICAgKi9cclxuICAgIGlmICghbWF0ZXJpYWxEYXRhKSByZXR1cm4gdGhpcy5tYXRlcmlhbE1hcFtNYXRlcmlhbHMuTnVsbFRleHREaXNwbGF5U3R5bGVdXHJcblxyXG4gICAgY29uc3QgbWF0ID0gbmV3IFNwZWNrbGVUZXh0TWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogbWF0ZXJpYWxEYXRhLmNvbG9yLFxyXG4gICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICBzaWRlOiBEb3VibGVTaWRlXHJcbiAgICB9KVxyXG4gICAgbWF0LnRyYW5zcGFyZW50ID0gbWF0Lm9wYWNpdHkgPCAxID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICBtYXQuZGVwdGhXcml0ZSA9IG1hdC50cmFuc3BhcmVudCA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgbWF0LnRvbmVNYXBwZWQgPSBmYWxzZVxyXG4gICAgbWF0LmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG5cclxuICAgIHJldHVybiBtYXRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRNYXRlcmlhbChcclxuICAgIGhhc2g6IG51bWJlcixcclxuICAgIG1hdGVyaWFsOiBSZW5kZXJNYXRlcmlhbCB8IERpc3BsYXlTdHlsZSB8IE1pbmltYWxNYXRlcmlhbCB8IG51bGwsXHJcbiAgICB0eXBlOiBHZW9tZXRyeVR5cGVcclxuICApOiBNYXRlcmlhbCB7XHJcbiAgICBsZXQgbWF0XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuTUVTSDpcclxuICAgICAgICBtYXQgPSB0aGlzLmdldE1lc2hNYXRlcmlhbChoYXNoLCBtYXRlcmlhbCBhcyBSZW5kZXJNYXRlcmlhbClcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5MSU5FOlxyXG4gICAgICAgIG1hdCA9IHRoaXMuZ2V0TGluZU1hdGVyaWFsKGhhc2gsIG1hdGVyaWFsIGFzIERpc3BsYXlTdHlsZSlcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5QT0lOVDpcclxuICAgICAgICBtYXQgPSB0aGlzLmdldFBvaW50TWF0ZXJpYWwoaGFzaCwgbWF0ZXJpYWwgYXMgUmVuZGVyTWF0ZXJpYWwpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuUE9JTlRfQ0xPVUQ6XHJcbiAgICAgICAgbWF0ID0gdGhpcy5nZXRQb2ludENsb3VkTWF0ZXJpYWwoaGFzaCwgbWF0ZXJpYWwgYXMgUmVuZGVyTWF0ZXJpYWwpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuVEVYVDpcclxuICAgICAgICBtYXQgPSB0aGlzLmdldFRleHRNYXRlcmlhbChoYXNoLCBtYXRlcmlhbCBhcyBEaXNwbGF5U3R5bGUpXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICAgIC8vIH1cclxuICAgIC8qKiBUaGVyZSdzIGEgYnVnIGluIHRocmVlLmpzIHdoZXJlIGl0IGNoZWNrcyBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgcGxhbmVzIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhleSBleGlzdCBmaXJzdFxyXG4gICAgICogIEl0J3MgYmVlbiBhbGxlZ2VkbHkgZml4ZWQgaW4gYSBsYXRlciB2ZXJzaW9uIGJ1dCB1bnRpbCB3ZSB1cGRhdGUgd2UnbGwganVzdCBhc3NpbmcgYW4gZW1wdHkgYXJyYXlcclxuICAgICAqL1xyXG4gICAgbWF0LmNsaXBwaW5nUGxhbmVzID0gW11cclxuXHJcbiAgICByZXR1cm4gbWF0XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1lc2hNYXRlcmlhbChoYXNoOiBudW1iZXIsIG1hdGVyaWFsOiBSZW5kZXJNYXRlcmlhbCkge1xyXG4gICAgaWYgKCF0aGlzLm1hdGVyaWFsTWFwW2hhc2hdKSB7XHJcbiAgICAgIHRoaXMubWF0ZXJpYWxNYXBbaGFzaF0gPSB0aGlzLm1ha2VNZXNoTWF0ZXJpYWwobWF0ZXJpYWwpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5tYXRlcmlhbE1hcFtoYXNoXVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMaW5lTWF0ZXJpYWwoaGFzaDogbnVtYmVyLCBtYXRlcmlhbDogUmVuZGVyTWF0ZXJpYWwgfCBEaXNwbGF5U3R5bGUpIHtcclxuICAgIGlmICghdGhpcy5tYXRlcmlhbE1hcFtoYXNoXSkge1xyXG4gICAgICB0aGlzLm1hdGVyaWFsTWFwW2hhc2hdID0gdGhpcy5tYWtlTGluZU1hdGVyaWFsKG1hdGVyaWFsIGFzIERpc3BsYXlTdHlsZSlcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm1hdGVyaWFsTWFwW2hhc2hdXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBvaW50TWF0ZXJpYWwoaGFzaDogbnVtYmVyLCBtYXRlcmlhbDogUmVuZGVyTWF0ZXJpYWwpIHtcclxuICAgIGlmICghdGhpcy5tYXRlcmlhbE1hcFtoYXNoXSkge1xyXG4gICAgICB0aGlzLm1hdGVyaWFsTWFwW2hhc2hdID0gdGhpcy5tYWtlUG9pbnRNYXRlcmlhbChtYXRlcmlhbClcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm1hdGVyaWFsTWFwW2hhc2hdXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBvaW50Q2xvdWRNYXRlcmlhbChoYXNoOiBudW1iZXIsIG1hdGVyaWFsOiBSZW5kZXJNYXRlcmlhbCkge1xyXG4gICAgaWYgKCF0aGlzLm1hdGVyaWFsTWFwW2hhc2hdKSB7XHJcbiAgICAgIHRoaXMubWF0ZXJpYWxNYXBbaGFzaF0gPSB0aGlzLmdldFBvaW50TWF0ZXJpYWwoaGFzaCwgbWF0ZXJpYWwpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5tYXRlcmlhbE1hcFtoYXNoXVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUZXh0TWF0ZXJpYWwoaGFzaDogbnVtYmVyLCBtYXRlcmlhbDogUmVuZGVyTWF0ZXJpYWwgfCBEaXNwbGF5U3R5bGUpIHtcclxuICAgIGlmICghdGhpcy5tYXRlcmlhbE1hcFtoYXNoXSkge1xyXG4gICAgICB0aGlzLm1hdGVyaWFsTWFwW2hhc2hdID0gdGhpcy5tYWtlVGV4dE1hdGVyaWFsKG1hdGVyaWFsIGFzIERpc3BsYXlTdHlsZSlcclxuICAgIH1cclxuICAgIHJldHVybiAodGhpcy5tYXRlcmlhbE1hcFtoYXNoXSBhcyBTcGVja2xlVGV4dE1hdGVyaWFsKS5nZXREZXJpdmVkQmF0Y2hlZE1hdGVyaWFsKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHaG9zdE1hdGVyaWFsKFxyXG4gICAgcmVuZGVyVmlldzogTm9kZVJlbmRlclZpZXcsXHJcbiAgICBmaWx0ZXJNYXRlcmlhbD86IEZpbHRlck1hdGVyaWFsXHJcbiAgKTogTWF0ZXJpYWwgfCBudWxsIHtcclxuICAgIGZpbHRlck1hdGVyaWFsXHJcbiAgICBzd2l0Y2ggKHJlbmRlclZpZXcuZ2VvbWV0cnlUeXBlKSB7XHJcbiAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLk1FU0g6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzaEdob3N0TWF0ZXJpYWxcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuTElORTpcclxuICAgICAgICByZXR1cm4gdGhpcy5saW5lR2hvc3RNYXRlcmlhbFxyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5QT0lOVDpcclxuICAgICAgICByZXR1cm4gdGhpcy5wb2ludEdob3N0TWF0ZXJpYWxcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuUE9JTlRfQ0xPVUQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRHaG9zdE1hdGVyaWFsXHJcbiAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLlRFWFQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dEdob3N0TWF0ZXJpYWxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHcmFkaWVudE1hdGVyaWFsKFxyXG4gICAgcmVuZGVyVmlldzogTm9kZVJlbmRlclZpZXcsXHJcbiAgICBmaWx0ZXJNYXRlcmlhbD86IEZpbHRlck1hdGVyaWFsXHJcbiAgKTogTWF0ZXJpYWwgfCBudWxsIHtcclxuICAgIHN3aXRjaCAocmVuZGVyVmlldy5nZW9tZXRyeVR5cGUpIHtcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuTUVTSDoge1xyXG4gICAgICAgIGNvbnN0IG1hdGVyaWFsID0gcmVuZGVyVmlldy50cmFuc3BhcmVudFxyXG4gICAgICAgICAgPyB0aGlzLm1lc2hUcmFuc3BhcmVudEdyYWRpZW50TWF0ZXJpYWxcclxuICAgICAgICAgIDogdGhpcy5tZXNoR3JhZGllbnRNYXRlcmlhbFxyXG4gICAgICAgIGlmIChmaWx0ZXJNYXRlcmlhbD8ucmFtcFRleHR1cmUpXHJcbiAgICAgICAgICAobWF0ZXJpYWwgYXMgU3BlY2tsZVN0YW5kYXJkQ29sb3JlZE1hdGVyaWFsKS5zZXRHcmFkaWVudFRleHR1cmUoXHJcbiAgICAgICAgICAgIGZpbHRlck1hdGVyaWFsLnJhbXBUZXh0dXJlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsXHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuTElORTpcclxuICAgICAgICByZXR1cm4gdGhpcy5saW5lQ29sb3JlZE1hdGVyaWFsXHJcbiAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLlBPSU5UOiB7XHJcbiAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLnBvaW50Q2xvdWRHcmFkaWVudE1hdGVyaWFsXHJcbiAgICAgICAgaWYgKGZpbHRlck1hdGVyaWFsPy5yYW1wVGV4dHVyZSlcclxuICAgICAgICAgIChtYXRlcmlhbCBhcyBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwpLnNldEdyYWRpZW50VGV4dHVyZShcclxuICAgICAgICAgICAgZmlsdGVyTWF0ZXJpYWwucmFtcFRleHR1cmVcclxuICAgICAgICAgIClcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWxcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5QT0lOVF9DTE9VRDoge1xyXG4gICAgICAgIGNvbnN0IG1hdGVyaWFsID0gdGhpcy5wb2ludENsb3VkR3JhZGllbnRNYXRlcmlhbFxyXG4gICAgICAgIGlmIChmaWx0ZXJNYXRlcmlhbD8ucmFtcFRleHR1cmUpXHJcbiAgICAgICAgICAobWF0ZXJpYWwgYXMgU3BlY2tsZVN0YW5kYXJkQ29sb3JlZE1hdGVyaWFsKS5zZXRHcmFkaWVudFRleHR1cmUoXHJcbiAgICAgICAgICAgIGZpbHRlck1hdGVyaWFsLnJhbXBUZXh0dXJlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsXHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuVEVYVDpcclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMudGV4dEdyYWRpZW50TWF0ZXJpYWxcclxuICAgICAgICBpZiAoZmlsdGVyTWF0ZXJpYWw/LnJhbXBUZXh0dXJlKVxyXG4gICAgICAgICAgKG1hdGVyaWFsIGFzIFNwZWNrbGVTdGFuZGFyZENvbG9yZWRNYXRlcmlhbCkuc2V0R3JhZGllbnRUZXh0dXJlKFxyXG4gICAgICAgICAgICBmaWx0ZXJNYXRlcmlhbC5yYW1wVGV4dHVyZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbG9yZWRNYXRlcmlhbChcclxuICAgIHJlbmRlclZpZXc6IE5vZGVSZW5kZXJWaWV3LFxyXG4gICAgZmlsdGVyTWF0ZXJpYWw/OiBGaWx0ZXJNYXRlcmlhbFxyXG4gICk6IE1hdGVyaWFsIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHJlbmRlclZpZXcuZ2VvbWV0cnlUeXBlKSB7XHJcbiAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLk1FU0g6IHtcclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHJlbmRlclZpZXcudHJhbnNwYXJlbnRcclxuICAgICAgICAgID8gdGhpcy5tZXNoVHJhbnNwYXJlbnRDb2xvcmVkTWF0ZXJpYWxcclxuICAgICAgICAgIDogdGhpcy5tZXNoQ29sb3JlZE1hdGVyaWFsXHJcbiAgICAgICAgaWYgKGZpbHRlck1hdGVyaWFsPy5yYW1wVGV4dHVyZSlcclxuICAgICAgICAgIChtYXRlcmlhbCBhcyBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwpLnNldEdyYWRpZW50VGV4dHVyZShcclxuICAgICAgICAgICAgZmlsdGVyTWF0ZXJpYWwucmFtcFRleHR1cmVcclxuICAgICAgICAgIClcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWxcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5MSU5FOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmxpbmVDb2xvcmVkTWF0ZXJpYWxcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuUE9JTlQ6IHtcclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMucG9pbnRDbG91ZENvbG91cmVkTWF0ZXJpYWxcclxuICAgICAgICBpZiAoZmlsdGVyTWF0ZXJpYWw/LnJhbXBUZXh0dXJlKVxyXG4gICAgICAgICAgKG1hdGVyaWFsIGFzIFNwZWNrbGVTdGFuZGFyZENvbG9yZWRNYXRlcmlhbCkuc2V0R3JhZGllbnRUZXh0dXJlKFxyXG4gICAgICAgICAgICBmaWx0ZXJNYXRlcmlhbC5yYW1wVGV4dHVyZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbFxyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLlBPSU5UX0NMT1VEOiB7XHJcbiAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLnBvaW50Q2xvdWRDb2xvdXJlZE1hdGVyaWFsXHJcbiAgICAgICAgaWYgKGZpbHRlck1hdGVyaWFsPy5yYW1wVGV4dHVyZSlcclxuICAgICAgICAgIChtYXRlcmlhbCBhcyBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwpLnNldEdyYWRpZW50VGV4dHVyZShcclxuICAgICAgICAgICAgZmlsdGVyTWF0ZXJpYWwucmFtcFRleHR1cmVcclxuICAgICAgICAgIClcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWxcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5URVhUOlxyXG4gICAgICAgIGNvbnN0IG1hdGVyaWFsID0gdGhpcy50ZXh0Q29sb3JlZE1hdGVyaWFsXHJcbiAgICAgICAgaWYgKGZpbHRlck1hdGVyaWFsPy5yYW1wVGV4dHVyZSlcclxuICAgICAgICAgIChtYXRlcmlhbCBhcyBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwpLnNldEdyYWRpZW50VGV4dHVyZShcclxuICAgICAgICAgICAgZmlsdGVyTWF0ZXJpYWwucmFtcFRleHR1cmVcclxuICAgICAgICAgIClcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRIaWRkZW5NYXRlcmlhbChcclxuICAgIHJlbmRlclZpZXc6IE5vZGVSZW5kZXJWaWV3LFxyXG4gICAgZmlsdGVyTWF0ZXJpYWw/OiBGaWx0ZXJNYXRlcmlhbFxyXG4gICk6IE1hdGVyaWFsIHwgbnVsbCB7XHJcbiAgICBmaWx0ZXJNYXRlcmlhbFxyXG4gICAgc3dpdGNoIChyZW5kZXJWaWV3Lmdlb21ldHJ5VHlwZSkge1xyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5NRVNIOlxyXG4gICAgICAgIHJldHVybiB0aGlzLm1lc2hIaWRkZW5NYXRlcmlhbFxyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5MSU5FOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmxpbmVIaWRkZW5NYXRlcmlhbFxyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5QT0lOVDpcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXNoSGlkZGVuTWF0ZXJpYWxcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuUE9JTlRfQ0xPVUQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzaEhpZGRlbk1hdGVyaWFsXHJcbiAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLlRFWFQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dEhpZGRlbk1hdGVyaWFsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RmlsdGVyTWF0ZXJpYWwoXHJcbiAgICByZW5kZXJWaWV3OiBOb2RlUmVuZGVyVmlldyxcclxuICAgIGZpbHRlck1hdGVyaWFsOiBGaWx0ZXJNYXRlcmlhbFxyXG4gICk6IE1hdGVyaWFsIHwgbnVsbCB7XHJcbiAgICBsZXQgcmV0TWF0ZXJpYWw6IE1hdGVyaWFsIHwgbnVsbCA9IG51bGxcclxuICAgIHN3aXRjaCAoZmlsdGVyTWF0ZXJpYWwuZmlsdGVyVHlwZSkge1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGVyaWFsVHlwZS5HSE9TVDpcclxuICAgICAgICByZXRNYXRlcmlhbCA9IHRoaXMuZ2V0R2hvc3RNYXRlcmlhbChyZW5kZXJWaWV3LCBmaWx0ZXJNYXRlcmlhbClcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGVyaWFsVHlwZS5HUkFESUVOVDpcclxuICAgICAgICByZXRNYXRlcmlhbCA9IHRoaXMuZ2V0R3JhZGllbnRNYXRlcmlhbChyZW5kZXJWaWV3LCBmaWx0ZXJNYXRlcmlhbClcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGVyaWFsVHlwZS5DT0xPUkVEOlxyXG4gICAgICAgIHJldE1hdGVyaWFsID0gdGhpcy5nZXRDb2xvcmVkTWF0ZXJpYWwocmVuZGVyVmlldywgZmlsdGVyTWF0ZXJpYWwpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRlcmlhbFR5cGUuSElEREVOOlxyXG4gICAgICAgIHJldE1hdGVyaWFsID0gdGhpcy5nZXRIaWRkZW5NYXRlcmlhbChyZW5kZXJWaWV3LCBmaWx0ZXJNYXRlcmlhbClcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gICAgLyoqIFRoZXJlJ3MgYSBidWcgaW4gdGhyZWUuanMgd2hlcmUgaXQgY2hlY2tzIGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBwbGFuZXMgd2l0aG91dCBjaGVja2luZyBpZiB0aGV5IGV4aXN0IGZpcnN0XHJcbiAgICAgKiAgSXQncyBiZWVuIGFsbGVnZWRseSBmaXhlZCBpbiBhIGxhdGVyIHZlcnNpb24gYnV0IHVudGlsIHdlIHVwZGF0ZSB3ZSdsbCBqdXN0IGFzc2luZyBhbiBlbXB0eSBhcnJheVxyXG4gICAgICovXHJcbiAgICBpZiAocmV0TWF0ZXJpYWwpIHJldE1hdGVyaWFsLmNsaXBwaW5nUGxhbmVzID0gW11cclxuICAgIHJldHVybiByZXRNYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGFNYXRlcmlhbChcclxuICAgIHJlbmRlclZpZXc6IE5vZGVSZW5kZXJWaWV3LFxyXG4gICAgbWF0ZXJpYWxEYXRhOiBSZW5kZXJNYXRlcmlhbCAmIERpc3BsYXlTdHlsZSAmIE1hdGVyaWFsT3B0aW9uc1xyXG4gICk6IE1hdGVyaWFsIHtcclxuICAgIGNvbnN0IG1hdGVyaWFsSGFzaCA9IE1hdGVyaWFscy5nZXRNYXRlcmlhbEhhc2gocmVuZGVyVmlldywgbWF0ZXJpYWxEYXRhKVxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TWF0ZXJpYWwobWF0ZXJpYWxIYXNoLCBtYXRlcmlhbERhdGEsIHJlbmRlclZpZXcuZ2VvbWV0cnlUeXBlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZpbHRlck1hdGVyaWFsT3B0aW9ucyhcclxuICAgIGZpbHRlck1hdGVyaWFsOiBGaWx0ZXJNYXRlcmlhbFxyXG4gICk6IEZpbHRlck1hdGVyaWFsT3B0aW9ucyB8IG51bGwge1xyXG4gICAgc3dpdGNoIChmaWx0ZXJNYXRlcmlhbC5maWx0ZXJUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0ZXJpYWxUeXBlLkNPTE9SRUQ6XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHJhbXBJbmRleDpcclxuICAgICAgICAgICAgZmlsdGVyTWF0ZXJpYWwucmFtcEluZGV4ICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICA/IGZpbHRlck1hdGVyaWFsLnJhbXBJbmRleFxyXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgcmFtcEluZGV4Q29sb3I6IGZpbHRlck1hdGVyaWFsLnJhbXBJbmRleENvbG9yLFxyXG4gICAgICAgICAgcmFtcFRleHR1cmU6IGZpbHRlck1hdGVyaWFsLnJhbXBUZXh0dXJlXHJcbiAgICAgICAgICAgID8gZmlsdGVyTWF0ZXJpYWwucmFtcFRleHR1cmVcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICByYW1wV2lkdGg6IGZpbHRlck1hdGVyaWFsLnJhbXBUZXh0dXJlXHJcbiAgICAgICAgICAgID8gZmlsdGVyTWF0ZXJpYWwucmFtcFRleHR1cmUuaW1hZ2Uud2lkdGhcclxuICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0ZXJpYWxUeXBlLkdSQURJRU5UOlxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByYW1wSW5kZXg6XHJcbiAgICAgICAgICAgIGZpbHRlck1hdGVyaWFsLnJhbXBJbmRleCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJNYXRlcmlhbC5yYW1wSW5kZXhcclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHJhbXBJbmRleENvbG9yOlxyXG4gICAgICAgICAgICBmaWx0ZXJNYXRlcmlhbC5yYW1wSW5kZXhDb2xvciAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgPyBmaWx0ZXJNYXRlcmlhbC5yYW1wSW5kZXhDb2xvclxyXG4gICAgICAgICAgICAgIDogZmlsdGVyTWF0ZXJpYWwucmFtcEluZGV4XHJcbiAgICAgICAgICAgICAgPyBuZXcgQ29sb3IoKVxyXG4gICAgICAgICAgICAgICAgICAuc2V0UkdCKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEdyYWRpZW50VGV4dHVyZURhdGEuZGF0YVtcclxuICAgICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlck1hdGVyaWFsLnJhbXBJbmRleCAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZGVmYXVsdEdyYWRpZW50VGV4dHVyZURhdGEud2lkdGggLSAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSAqIDRcclxuICAgICAgICAgICAgICAgICAgICBdIC8gMjU1LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEdyYWRpZW50VGV4dHVyZURhdGEuZGF0YVtcclxuICAgICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlck1hdGVyaWFsLnJhbXBJbmRleCAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZGVmYXVsdEdyYWRpZW50VGV4dHVyZURhdGEud2lkdGggLSAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICAgICAgICAgXSAvIDI1NSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRHcmFkaWVudFRleHR1cmVEYXRhLmRhdGFbXHJcbiAgICAgICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJNYXRlcmlhbC5yYW1wSW5kZXggKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmRlZmF1bHRHcmFkaWVudFRleHR1cmVEYXRhLndpZHRoIC0gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICkgKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA0ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgMlxyXG4gICAgICAgICAgICAgICAgICAgIF0gLyAyNTVcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAuY29udmVydFNSR0JUb0xpbmVhcigpXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICByYW1wVGV4dHVyZTogZmlsdGVyTWF0ZXJpYWwucmFtcFRleHR1cmVcclxuICAgICAgICAgICAgPyBmaWx0ZXJNYXRlcmlhbC5yYW1wVGV4dHVyZVxyXG4gICAgICAgICAgICA6IHRoaXMubWVzaEdyYWRpZW50TWF0ZXJpYWwudXNlckRhdGEuZ3JhZGllbnRSYW1wLnZhbHVlLFxyXG4gICAgICAgICAgcmFtcFdpZHRoOiBmaWx0ZXJNYXRlcmlhbC5yYW1wVGV4dHVyZVxyXG4gICAgICAgICAgICA/IGZpbHRlck1hdGVyaWFsLnJhbXBUZXh0dXJlLmltYWdlLndpZHRoXHJcbiAgICAgICAgICAgIDogdGhpcy5tZXNoR3JhZGllbnRNYXRlcmlhbC51c2VyRGF0YS5ncmFkaWVudFJhbXAudmFsdWUuaW1hZ2Uud2lkdGhcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwdXJnZSgpIHtcclxuICAgIC8vIHRvIGRvXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgR2VvbWV0cnlEYXRhIH0gZnJvbSAnLi4vY29udmVydGVyL0dlb21ldHJ5LmpzJ1xyXG5pbXBvcnQgdHlwZSB7IE5vZGVEYXRhIH0gZnJvbSAnLi4vdHJlZS9Xb3JsZFRyZWUuanMnXHJcblxyXG5leHBvcnQgZW51bSBTcGVja2xlVHlwZSB7XHJcbiAgVmlldzNEID0gJ1ZpZXczRCcsXHJcbiAgQmxvY2tJbnN0YW5jZSA9ICdCbG9ja0luc3RhbmNlJyxcclxuICBQb2ludGNsb3VkID0gJ1BvaW50Y2xvdWQnLFxyXG4gIEJyZXAgPSAnQnJlcCcsXHJcbiAgTWVzaCA9ICdNZXNoJyxcclxuICBCaW5hcnlNZXNoID0gJ0JpbmFyeU1lc2gnLFxyXG4gIFBvaW50ID0gJ1BvaW50JyxcclxuICBMaW5lID0gJ0xpbmUnLFxyXG4gIFBvbHlsaW5lID0gJ1BvbHlsaW5lJyxcclxuICBCb3ggPSAnQm94JyxcclxuICBQb2x5Y3VydmUgPSAnUG9seWN1cnZlJyxcclxuICBDdXJ2ZSA9ICdDdXJ2ZScsXHJcbiAgQ2lyY2xlID0gJ0NpcmNsZScsXHJcbiAgQXJjID0gJ0FyYycsXHJcbiAgRWxsaXBzZSA9ICdFbGxpcHNlJyxcclxuICBSZXZpdEluc3RhbmNlID0gJ1Jldml0SW5zdGFuY2UnLFxyXG4gIFRleHQgPSAnVGV4dCcsXHJcbiAgVHJhbnNmb3JtID0gJ1RyYW5zZm9ybScsXHJcbiAgSW5zdGFuY2VQcm94eSA9ICdJbnN0YW5jZVByb3h5JyxcclxuICBSZW5kZXJNYXRlcmlhbFByb3h5ID0gJ1JlbmRlck1hdGVyaWFsUHJveHknLFxyXG4gIENvbG9yUHJveHkgPSAnQ29sb3JQcm94eScsXHJcbiAgUmVnaW9uID0gJ1JlZ2lvbicsXHJcbiAgVW5rbm93biA9ICdVbmtub3duJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgU3BlY2tsZVR5cGVBbGxSZW5kZXJhYmxlczogU3BlY2tsZVR5cGVbXSA9IFtcclxuICBTcGVja2xlVHlwZS5Qb2ludGNsb3VkLFxyXG4gIFNwZWNrbGVUeXBlLkJyZXAsXHJcbiAgU3BlY2tsZVR5cGUuTWVzaCxcclxuICBTcGVja2xlVHlwZS5CaW5hcnlNZXNoLFxyXG4gIFNwZWNrbGVUeXBlLlBvaW50LFxyXG4gIFNwZWNrbGVUeXBlLkxpbmUsXHJcbiAgU3BlY2tsZVR5cGUuUG9seWxpbmUsXHJcbiAgU3BlY2tsZVR5cGUuQm94LFxyXG4gIFNwZWNrbGVUeXBlLlBvbHljdXJ2ZSxcclxuICBTcGVja2xlVHlwZS5DdXJ2ZSxcclxuICBTcGVja2xlVHlwZS5DaXJjbGUsXHJcbiAgU3BlY2tsZVR5cGUuQXJjLFxyXG4gIFNwZWNrbGVUeXBlLkVsbGlwc2UsXHJcbiAgU3BlY2tsZVR5cGUuVGV4dCxcclxuICBTcGVja2xlVHlwZS5SZWdpb25cclxuXVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdlb21ldHJ5Q29udmVydGVyIHtcclxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0U3BlY2tsZVR5cGUobm9kZTogTm9kZURhdGEpOiBTcGVja2xlVHlwZVxyXG4gIHB1YmxpYyBhYnN0cmFjdCBjb252ZXJ0Tm9kZVRvR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHwgbnVsbFxyXG4gIHB1YmxpYyBhYnN0cmFjdCBkaXNwb3NlTm9kZUdlb21ldHJ5RGF0YShub2RlOiBOb2RlRGF0YSk6IHZvaWRcclxufVxyXG4iLCJpbXBvcnQgeyBCb3gzLCBNYXRyaXg0IH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEdlb21ldHJ5VHlwZSB9IGZyb20gJy4uL2JhdGNoaW5nL0JhdGNoLmpzJ1xyXG5pbXBvcnQgeyBHZW9tZXRyeUF0dHJpYnV0ZXMsIHR5cGUgR2VvbWV0cnlEYXRhIH0gZnJvbSAnLi4vY29udmVydGVyL0dlb21ldHJ5LmpzJ1xyXG5pbXBvcnQgTWF0ZXJpYWxzLCB7XHJcbiAgTWluaW1hbE1hdGVyaWFsLFxyXG4gIHR5cGUgRGlzcGxheVN0eWxlLFxyXG4gIHR5cGUgUmVuZGVyTWF0ZXJpYWxcclxufSBmcm9tICcuLi9tYXRlcmlhbHMvTWF0ZXJpYWxzLmpzJ1xyXG5pbXBvcnQgeyBTcGVja2xlVHlwZSB9IGZyb20gJy4uL2xvYWRlcnMvR2VvbWV0cnlDb252ZXJ0ZXIuanMnXHJcbmltcG9ydCB7IENodW5rQXJyYXkgfSBmcm9tICcuLi9jb252ZXJ0ZXIvVmlydHVhbEFycmF5LmpzJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBOb2RlUmVuZGVyRGF0YSB7XHJcbiAgaWQ6IHN0cmluZ1xyXG4gIHN1YnRyZWVJZDogbnVtYmVyXHJcbiAgc3BlY2tsZVR5cGU6IFNwZWNrbGVUeXBlXHJcbiAgZ2VvbWV0cnk6IEdlb21ldHJ5RGF0YVxyXG4gIHJlbmRlck1hdGVyaWFsOiBSZW5kZXJNYXRlcmlhbCB8IG51bGxcclxuICBkaXNwbGF5U3R5bGU6IERpc3BsYXlTdHlsZSB8IG51bGxcclxuICBjb2xvck1hdGVyaWFsOiBNaW5pbWFsTWF0ZXJpYWwgfCBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBOb2RlUmVuZGVyVmlldyB7XHJcbiAgcHJpdmF0ZSBfYmF0Y2hJZDogc3RyaW5nXHJcbiAgcHJpdmF0ZSBfYmF0Y2hJbmRleFN0YXJ0OiBudW1iZXJcclxuICBwcml2YXRlIF9iYXRjaEluZGV4Q291bnQ6IG51bWJlclxyXG4gIHByaXZhdGUgX2JhdGNoVmVydGV4U3RhcnQ6IG51bWJlclxyXG4gIHByaXZhdGUgX2JhdGNoVmVydGV4RW5kOiBudW1iZXJcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyRGF0YTogTm9kZVJlbmRlckRhdGFcclxuICBwcml2YXRlIF9tYXRlcmlhbEhhc2g6IG51bWJlclxyXG4gIHByaXZhdGUgX2dlb21ldHJ5VHlwZTogR2VvbWV0cnlUeXBlXHJcbiAgcHJpdmF0ZSBfZ3VpZDogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuXHJcbiAgcHJpdmF0ZSBfYWFiYjogQm94M1xyXG5cclxuICAvKiogVE8gRE86IE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzdG9yZSBpdCAqL1xyXG4gIHB1YmxpYyBnZXQgZ3VpZCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl9ndWlkKSB7XHJcbiAgICAgIHRoaXMuX2d1aWQgPSB0aGlzLl9yZW5kZXJEYXRhLnN1YnRyZWVJZCArIHRoaXMuX3JlbmRlckRhdGEuaWRcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9ndWlkXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlbmRlckRhdGEoKTogTm9kZVJlbmRlckRhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlckRhdGFcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVuZGVyTWF0ZXJpYWxIYXNoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF0ZXJpYWxIYXNoXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0dlb21ldHJ5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlckRhdGEuZ2VvbWV0cnkgJiYgdGhpcy5fcmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc01ldGFkYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlckRhdGEuZ2VvbWV0cnkgJiYgdGhpcy5fcmVuZGVyRGF0YS5nZW9tZXRyeS5tZXRhRGF0YVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzcGVja2xlVHlwZSgpOiBTcGVja2xlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyRGF0YS5zcGVja2xlVHlwZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZW9tZXRyeVR5cGUoKTogR2VvbWV0cnlUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeVR5cGVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYmF0Y2hTdGFydCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JhdGNoSW5kZXhTdGFydFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYXRjaEVuZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9iYXRjaEluZGV4U3RhcnQgKyB0aGlzLl9iYXRjaEluZGV4Q291bnRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYmF0Y2hDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JhdGNoSW5kZXhDb3VudFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYXRjaElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmF0Y2hJZFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhYWJiKCk6IEJveDMge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FhYmJcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYWFiYih2YWx1ZTogQm94Mykge1xyXG4gICAgdGhpcy5fYWFiYi5jb3B5KHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0cmFuc3BhcmVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLl9yZW5kZXJEYXRhLnJlbmRlck1hdGVyaWFsICYmXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyRGF0YS5yZW5kZXJNYXRlcmlhbC5vcGFjaXR5IDwgMSkgfHxcclxuICAgICAgZmFsc2VcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmVydFN0YXJ0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmF0Y2hWZXJ0ZXhTdGFydFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2ZXJ0RW5kKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmF0Y2hWZXJ0ZXhFbmRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbmVlZHNTZWdtZW50Q29udmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuX3JlbmRlckRhdGEuc3BlY2tsZVR5cGUgPT09IFNwZWNrbGVUeXBlLkN1cnZlIHx8XHJcbiAgICAgIHRoaXMuX3JlbmRlckRhdGEuc3BlY2tsZVR5cGUgPT09IFNwZWNrbGVUeXBlLlBvbHlsaW5lIHx8XHJcbiAgICAgIHRoaXMuX3JlbmRlckRhdGEuc3BlY2tsZVR5cGUgPT09IFNwZWNrbGVUeXBlLlBvbHljdXJ2ZSB8fFxyXG4gICAgICB0aGlzLnJlbmRlckRhdGEuc3BlY2tsZVR5cGUgPT09IFNwZWNrbGVUeXBlLkFyYyB8fFxyXG4gICAgICB0aGlzLnJlbmRlckRhdGEuc3BlY2tsZVR5cGUgPT09IFNwZWNrbGVUeXBlLkNpcmNsZSB8fFxyXG4gICAgICB0aGlzLnJlbmRlckRhdGEuc3BlY2tsZVR5cGUgPT09IFNwZWNrbGVUeXBlLkVsbGlwc2VcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsaWRHZW9tZXRyeSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLl9yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMgJiZcclxuICAgICAgICB0aGlzLl9yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMuUE9TSVRJT04gJiZcclxuICAgICAgICB0aGlzLl9yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMuUE9TSVRJT04ubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICh0aGlzLl9nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5NRVNIXHJcbiAgICAgICAgICA/IHRoaXMuX3JlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcy5JTkRFWCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMuSU5ERVgubGVuZ3RoID4gMFxyXG4gICAgICAgICAgOiB0cnVlKSkgfHxcclxuICAgICAgZmFsc2VcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBOb2RlUmVuZGVyRGF0YSkge1xyXG4gICAgdGhpcy5fcmVuZGVyRGF0YSA9IGRhdGFcclxuICAgIHRoaXMuX2dlb21ldHJ5VHlwZSA9IHRoaXMuZ2V0R2VvbWV0cnlUeXBlKClcclxuICAgIHRoaXMuX21hdGVyaWFsSGFzaCA9IE1hdGVyaWFscy5nZXRNYXRlcmlhbEhhc2godGhpcylcclxuXHJcbiAgICB0aGlzLl9iYXRjaElkID0gJydcclxuICAgIHRoaXMuX2JhdGNoSW5kZXhDb3VudCA9IDBcclxuICAgIHRoaXMuX2JhdGNoSW5kZXhTdGFydCA9IC0xXHJcbiAgICB0aGlzLl9iYXRjaFZlcnRleFN0YXJ0ID0gLTFcclxuICAgIHRoaXMuX2JhdGNoVmVydGV4RW5kID0gLTFcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRCYXRjaERhdGEoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgc3RhcnQ6IG51bWJlcixcclxuICAgIGNvdW50OiBudW1iZXIsXHJcbiAgICB2ZXJ0U3RhcnQ/OiBudW1iZXIsXHJcbiAgICB2ZXJ0RW5kPzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9iYXRjaElkID0gaWRcclxuICAgIHRoaXMuX2JhdGNoSW5kZXhTdGFydCA9IHN0YXJ0XHJcbiAgICB0aGlzLl9iYXRjaEluZGV4Q291bnQgPSBjb3VudFxyXG4gICAgaWYgKHZlcnRTdGFydCAhPT0gdW5kZWZpbmVkKSB0aGlzLl9iYXRjaFZlcnRleFN0YXJ0ID0gdmVydFN0YXJ0XHJcbiAgICBpZiAodmVydEVuZCAhPT0gdW5kZWZpbmVkKSB0aGlzLl9iYXRjaFZlcnRleEVuZCA9IHZlcnRFbmRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21wdXRlQUFCQih0cmFuc2Zvcm0/OiBNYXRyaXg0KSB7XHJcbiAgICBpZiAoIXRoaXMuX2FhYmIpIHRoaXMuX2FhYmIgPSBuZXcgQm94MygpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMgJiZcclxuICAgICAgdGhpcy5fcmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzLlBPU0lUSU9OLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIC8qKiBGb3IgdHJhbnNmb3JtYXRpb25zIHRoYXQgY29udGFpbiBub24tdW5pZm9ybSBzY2FsaW5nIGNvbWJpbmUgd2l0aCByb3RhdGlvbiB0aGUgcmVzdWx0aW5nXHJcbiAgICAgICAqICBhYWJiIGlzIG5vdCBnb2luZyB0byBiZSBhY2N1cmF0ZS4gV2Ugd2lsbCByZS1jb21wdXRlIGFuZCBhc3NpZ24gaXQgd2hlbiB3ZSBidWlsZCB0aGUgYmF0Y2hlc1xyXG4gICAgICAgKi9cclxuICAgICAgdGhpcy5fYWFiYi5jb3B5KHRoaXMuX3JlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5jb21wdXRlQm94MygpKVxyXG4gICAgICBpZiAodHJhbnNmb3JtKSB0aGlzLl9hYWJiLmFwcGx5TWF0cml4NCh0cmFuc2Zvcm0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdlb21ldHJ5VHlwZSgpOiBHZW9tZXRyeVR5cGUge1xyXG4gICAgc3dpdGNoICh0aGlzLl9yZW5kZXJEYXRhLnNwZWNrbGVUeXBlKSB7XHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuTWVzaDpcclxuICAgICAgICByZXR1cm4gR2VvbWV0cnlUeXBlLk1FU0hcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5CcmVwOlxyXG4gICAgICAgIHJldHVybiBHZW9tZXRyeVR5cGUuTUVTSFxyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLlBvaW50OlxyXG4gICAgICAgIHJldHVybiBHZW9tZXRyeVR5cGUuUE9JTlRcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5Qb2ludGNsb3VkOlxyXG4gICAgICAgIHJldHVybiBHZW9tZXRyeVR5cGUuUE9JTlRfQ0xPVURcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5UZXh0OlxyXG4gICAgICAgIHJldHVybiBHZW9tZXRyeVR5cGUuVEVYVFxyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gR2VvbWV0cnlUeXBlLkxJTkVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNwb3NlR2VvbWV0cnkoKSB7XHJcbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gdGhpcy5fcmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyIGFzIEdlb21ldHJ5QXR0cmlidXRlc10gPSBuZXcgQ2h1bmtBcnJheShcclxuICAgICAgICBbXVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IE1hdHJpeDQgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgdHlwZSBUcmVlTm9kZSwgV29ybGRUcmVlIH0gZnJvbSAnLi9Xb3JsZFRyZWUuanMnXHJcbmltcG9ydCBNYXRlcmlhbHMgZnJvbSAnLi4vbWF0ZXJpYWxzL01hdGVyaWFscy5qcydcclxuaW1wb3J0IHsgdHlwZSBOb2RlUmVuZGVyRGF0YSwgTm9kZVJlbmRlclZpZXcgfSBmcm9tICcuL05vZGVSZW5kZXJWaWV3LmpzJ1xyXG5pbXBvcnQgeyBHZW9tZXRyeUNvbnZlcnRlciwgU3BlY2tsZVR5cGUgfSBmcm9tICcuLi9sb2FkZXJzL0dlb21ldHJ5Q29udmVydGVyLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4uL3V0aWxzL0xvZ2dlci5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBSZW5kZXJUcmVlIHtcclxuICBwcml2YXRlIHRyZWU6IFdvcmxkVHJlZVxyXG4gIHByaXZhdGUgcm9vdDogVHJlZU5vZGVcclxuICBwcml2YXRlIGNhbmNlbCA9IGZhbHNlXHJcbiAgcHVibGljIGJ1aWxkTm9kZVRpbWUgPSAwXHJcbiAgcHVibGljIGFwcGx5VHJhbnNmb3JtVGltZSA9IDBcclxuICBwdWJsaWMgY29udmVydFRpbWUgPSAwXHJcbiAgcHVibGljIGdldE5vZGVUaW1lID0gMFxyXG4gIHB1YmxpYyBvdGhlclRpbWUgPSAwXHJcbiAgcHJpdmF0ZSBjb3VudCA9IDBcclxuXHJcbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdC5tb2RlbC5pZFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzdWJ0cmVlSWQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnJvb3QubW9kZWwuc3VidHJlZUlkXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IodHJlZTogV29ybGRUcmVlLCBzdWJ0cmVlUm9vdDogVHJlZU5vZGUpIHtcclxuICAgIHRoaXMudHJlZSA9IHRyZWVcclxuICAgIHRoaXMucm9vdCA9IHN1YnRyZWVSb290XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYnVpbGRSZW5kZXJUcmVlKFxyXG4gICAgZ2VvbWV0cnlDb252ZXJ0ZXI6IEdlb21ldHJ5Q29udmVydGVyLFxyXG4gICAgY291bnRDYWxsYmFjaz86IChjb3VudDogbnVtYmVyKSA9PiB2b2lkXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBwID0gdGhpcy50cmVlLndhbGtBc3luYygobm9kZTogVHJlZU5vZGUpOiBib29sZWFuID0+IHtcclxuICAgICAgbGV0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcclxuICAgICAgY29uc3QgcmVuZGVOb2RlID0gdGhpcy5idWlsZFJlbmRlck5vZGUobm9kZSwgZ2VvbWV0cnlDb252ZXJ0ZXIsIGNvdW50Q2FsbGJhY2spXHJcbiAgICAgIG5vZGUubW9kZWwucmVuZGVyVmlldyA9IHJlbmRlTm9kZSA/IG5ldyBOb2RlUmVuZGVyVmlldyhyZW5kZU5vZGUpIDogbnVsbFxyXG4gICAgICB0aGlzLmJ1aWxkTm9kZVRpbWUgKz0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFxyXG4gICAgICBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXHJcbiAgICAgIHRoaXMuYXBwbHlUcmFuc2Zvcm1zKG5vZGUpXHJcbiAgICAgIHRoaXMuYXBwbHlUcmFuc2Zvcm1UaW1lICs9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRcclxuICAgICAgaWYgKCFub2RlLm1vZGVsLmluc3RhbmNlZCkgZ2VvbWV0cnlDb252ZXJ0ZXIuZGlzcG9zZU5vZGVHZW9tZXRyeURhdGEobm9kZS5tb2RlbClcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbmNlbFxyXG4gICAgfSwgdGhpcy5yb290KVxyXG4gICAgcmV0dXJuIHBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlUcmFuc2Zvcm1zKG5vZGU6IFRyZWVOb2RlKSB7XHJcbiAgICBpZiAobm9kZS5tb2RlbC5yZW5kZXJWaWV3KSB7XHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRoaXMuY29tcHV0ZVRyYW5zZm9ybShub2RlKVxyXG4gICAgICBpZiAobm9kZS5tb2RlbC5yZW5kZXJWaWV3Lmhhc0dlb21ldHJ5IHx8IG5vZGUubW9kZWwucmVuZGVyVmlldy5oYXNNZXRhZGF0YSkge1xyXG4gICAgICAgIGlmIChub2RlLm1vZGVsLnJlbmRlclZpZXcucmVuZGVyRGF0YS5nZW9tZXRyeS5iYWtlVHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICB0cmFuc2Zvcm0ubXVsdGlwbHkobm9kZS5tb2RlbC5yZW5kZXJWaWV3LnJlbmRlckRhdGEuZ2VvbWV0cnkuYmFrZVRyYW5zZm9ybSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZS5tb2RlbC5yZW5kZXJWaWV3LnJlbmRlckRhdGEuZ2VvbWV0cnkudHJhbnNmb3JtID0gdHJhbnNmb3JtXHJcbiAgICAgICAgbm9kZS5tb2RlbC5yZW5kZXJWaWV3LmNvbXB1dGVBQUJCKCFub2RlLm1vZGVsLmluc3RhbmNlZCA/IHRyYW5zZm9ybSA6IHVuZGVmaW5lZClcclxuICAgICAgICAvKiogSSBsaWtlIHRoYXQgdGhpcyBpcyBnb25lIG5vdyEgKi9cclxuICAgICAgICAvLyAgIGlmIChcclxuICAgICAgICAvLyAgICAgbm9kZS5tb2RlbC5pbnN0YW5jZWQgJiZcclxuICAgICAgICAvLyAgICAgbm9kZS5tb2RlbC5yZW5kZXJWaWV3LnNwZWNrbGVUeXBlID09PSBTcGVja2xlVHlwZS5NZXNoXHJcbiAgICAgICAgLy8gICApXHJcbiAgICAgICAgLy8gICAgIG5vZGUubW9kZWwucmVuZGVyVmlldy5yZW5kZXJEYXRhLmdlb21ldHJ5LnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxyXG4gICAgICAgIC8vICAgZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIEdlb21ldHJ5LnRyYW5zZm9ybUdlb21ldHJ5RGF0YShcclxuICAgICAgICAvLyAgICAgICBub2RlLm1vZGVsLnJlbmRlclZpZXcucmVuZGVyRGF0YS5nZW9tZXRyeSxcclxuICAgICAgICAvLyAgICAgICB0cmFuc2Zvcm1cclxuICAgICAgICAvLyAgICAgKVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgbm9kZS5tb2RlbC5yZW5kZXJWaWV3LmNvbXB1dGVBQUJCKClcclxuICAgICAgICAvLyB9IGVsc2UgaWYgKG5vZGUubW9kZWwucmVuZGVyVmlldy5oYXNNZXRhZGF0YSkge1xyXG4gICAgICAgIC8vICAgbm9kZS5tb2RlbC5yZW5kZXJWaWV3LnJlbmRlckRhdGEuZ2VvbWV0cnkuYmFrZVRyYW5zZm9ybS5wcmVtdWx0aXBseSh0cmFuc2Zvcm0pXHJcbiAgICAgICAgLy8gICBub2RlLm1vZGVsLnJlbmRlclZpZXcuY29tcHV0ZUFBQkIoKVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFJlbmRlck5vZGUoXHJcbiAgICBub2RlOiBUcmVlTm9kZSxcclxuICAgIGdlb21ldHJ5Q29udmVydGVyOiBHZW9tZXRyeUNvbnZlcnRlcixcclxuICAgIGNvdW50Q2FsbGJhY2s/OiAoY291bnQ6IG51bWJlcikgPT4gdm9pZFxyXG4gICk6IE5vZGVSZW5kZXJEYXRhIHwgbnVsbCB7XHJcbiAgICBsZXQgcmV0OiBOb2RlUmVuZGVyRGF0YSB8IG51bGwgPSBudWxsXHJcbiAgICBsZXQgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG4gICAgY29uc3QgZ2VvbWV0cnlEYXRhID0gZ2VvbWV0cnlDb252ZXJ0ZXIuY29udmVydE5vZGVUb0dlb21ldHJ5RGF0YShub2RlLm1vZGVsKVxyXG4gICAgY291bnRDYWxsYmFjaz8uKHRoaXMuY291bnQrKylcclxuICAgIHRoaXMuY29udmVydFRpbWUgKz0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFxyXG4gICAgaWYgKGdlb21ldHJ5RGF0YSkge1xyXG4gICAgICBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXHJcbiAgICAgIGNvbnN0IHJlbmRlck1hdGVyaWFsTm9kZSA9IHRoaXMuZ2V0UmVuZGVyTWF0ZXJpYWxOb2RlKG5vZGUpXHJcbiAgICAgIGNvbnN0IGRpc3BsYXlTdHlsZU5vZGUgPSB0aGlzLmdldERpc3BsYXlTdHlsZU5vZGUobm9kZSlcclxuICAgICAgY29uc3QgY29sb3JNYXRlcmlhbE5vZGUgPSB0aGlzLmdldENvbG9yTWF0ZXJpYWxOb2RlKG5vZGUpXHJcbiAgICAgIHRoaXMuZ2V0Tm9kZVRpbWUgKz0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFxyXG4gICAgICBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXHJcbiAgICAgIHJldCA9IHtcclxuICAgICAgICBpZDogbm9kZS5tb2RlbC5pZCxcclxuICAgICAgICBzdWJ0cmVlSWQ6IG5vZGUubW9kZWwuc3VidHJlZUlkLFxyXG4gICAgICAgIHNwZWNrbGVUeXBlOiBnZW9tZXRyeUNvbnZlcnRlci5nZXRTcGVja2xlVHlwZShub2RlLm1vZGVsKSxcclxuICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnlEYXRhLFxyXG4gICAgICAgIHJlbmRlck1hdGVyaWFsOiBNYXRlcmlhbHMucmVuZGVyTWF0ZXJpYWxGcm9tTm9kZShcclxuICAgICAgICAgIHJlbmRlck1hdGVyaWFsTm9kZSB8fCBkaXNwbGF5U3R5bGVOb2RlLFxyXG4gICAgICAgICAgbm9kZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgLyoqIExpbmUtdHlwZSBnZW9tZXRyeSBjYW4gYWxzbyB1c2UgYSByZW5kZXJNYXRlcmlhbCovXHJcbiAgICAgICAgZGlzcGxheVN0eWxlOiBNYXRlcmlhbHMuZGlzcGxheVN0eWxlRnJvbU5vZGUoXHJcbiAgICAgICAgICBkaXNwbGF5U3R5bGVOb2RlIHx8IHJlbmRlck1hdGVyaWFsTm9kZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgY29sb3JNYXRlcmlhbDogTWF0ZXJpYWxzLmNvbG9yTWF0ZXJpYWxGcm9tTm9kZShjb2xvck1hdGVyaWFsTm9kZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm90aGVyVGltZSArPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlbmRlck1hdGVyaWFsTm9kZShub2RlOiBUcmVlTm9kZSk6IFRyZWVOb2RlIHwgbnVsbCB7XHJcbiAgICBpZiAobm9kZS5tb2RlbC5yYXcucmVuZGVyTWF0ZXJpYWwpIHtcclxuICAgICAgcmV0dXJuIG5vZGVcclxuICAgIH1cclxuICAgIGNvbnN0IGFuY2VzdG9ycyA9IHRoaXMudHJlZS5nZXRBbmNlc3RvcnMobm9kZSlcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYW5jZXN0b3JzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmIChhbmNlc3RvcnNba10ubW9kZWwucmF3LnJlbmRlck1hdGVyaWFsKSB7XHJcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9yc1trXVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREaXNwbGF5U3R5bGVOb2RlKG5vZGU6IFRyZWVOb2RlKTogVHJlZU5vZGUgfCBudWxsIHtcclxuICAgIGlmIChub2RlLm1vZGVsLnJhdy5kaXNwbGF5U3R5bGUpIHtcclxuICAgICAgcmV0dXJuIG5vZGVcclxuICAgIH1cclxuICAgIGNvbnN0IGFuY2VzdG9ycyA9IHRoaXMudHJlZS5nZXRBbmNlc3RvcnMobm9kZSlcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYW5jZXN0b3JzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmIChhbmNlc3RvcnNba10ubW9kZWwucmF3LmRpc3BsYXlTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBhbmNlc3RvcnNba11cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29sb3JNYXRlcmlhbE5vZGUobm9kZTogVHJlZU5vZGUpOiBUcmVlTm9kZSB8IG51bGwge1xyXG4gICAgaWYgKG5vZGUubW9kZWwuY29sb3IpIHtcclxuICAgICAgcmV0dXJuIG5vZGVcclxuICAgIH1cclxuICAgIGNvbnN0IGFuY2VzdG9ycyA9IHRoaXMudHJlZS5nZXRBbmNlc3RvcnMobm9kZSlcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYW5jZXN0b3JzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmIChhbmNlc3RvcnNba10ubW9kZWwuY29sb3IpIHtcclxuICAgICAgICByZXR1cm4gYW5jZXN0b3JzW2tdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tcHV0ZVRyYW5zZm9ybShub2RlOiBUcmVlTm9kZSk6IE1hdHJpeDQge1xyXG4gICAgLyoqIFdlIGRvbid0IHN0YWNrIHRyYW5zZm9ybXMgbm9kZXMgd2l0aCBlYWNoIG90aGVyICovXHJcbiAgICBpZiAobm9kZS5tb2RlbC5yZW5kZXJWaWV3LnNwZWNrbGVUeXBlID09PSBTcGVja2xlVHlwZS5UcmFuc2Zvcm0pXHJcbiAgICAgIHJldHVybiBub2RlLm1vZGVsLnJlbmRlclZpZXcucmVuZGVyRGF0YS50cmFuc2Zvcm1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpXHJcbiAgICBjb25zdCBhbmNlc3RvcnMgPSB0aGlzLnRyZWUuZ2V0QW5jZXN0b3JzKG5vZGUpXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGFuY2VzdG9ycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBpZiAoYW5jZXN0b3JzW2tdLm1vZGVsLnJlbmRlclZpZXcpIHtcclxuICAgICAgICBjb25zdCByZW5kZXJOb2RlOiBOb2RlUmVuZGVyRGF0YSA9IGFuY2VzdG9yc1trXS5tb2RlbC5yZW5kZXJWaWV3LnJlbmRlckRhdGFcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZW5kZXJOb2RlLnNwZWNrbGVUeXBlID09PSBTcGVja2xlVHlwZS5UcmFuc2Zvcm0gJiZcclxuICAgICAgICAgIHJlbmRlck5vZGUuZ2VvbWV0cnkudHJhbnNmb3JtXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0cmFuc2Zvcm0ucHJlbXVsdGlwbHkocmVuZGVyTm9kZS5nZW9tZXRyeS50cmFuc2Zvcm0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJhbnNmb3JtXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5zdGFuY2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZS5nZXRJbnN0YW5jZXModGhpcy5yb290Lm1vZGVsLnN1YnRyZWVJZClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREdXBsaWNhdGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZS5nZXREdXBsaWNhdGVzKHRoaXMucm9vdC5tb2RlbC5zdWJ0cmVlSWQpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyYWJsZVJlbmRlclZpZXdzKC4uLnR5cGVzOiBTcGVja2xlVHlwZVtdKTogTm9kZVJlbmRlclZpZXdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJhYmxlTm9kZXMoLi4udHlwZXMpLm1hcChcclxuICAgICAgKHZhbDogVHJlZU5vZGUpID0+IHZhbC5tb2RlbC5yZW5kZXJWaWV3XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyYWJsZU5vZGVzKC4uLnR5cGVzOiBTcGVja2xlVHlwZVtdKTogVHJlZU5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5yb290LmFsbCgobm9kZTogVHJlZU5vZGUpOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBub2RlLm1vZGVsLnJlbmRlclZpZXcgJiZcclxuICAgICAgICAobm9kZS5tb2RlbC5yZW5kZXJWaWV3Lmhhc0dlb21ldHJ5IHx8IG5vZGUubW9kZWwucmVuZGVyVmlldy5oYXNNZXRhZGF0YSkgJiZcclxuICAgICAgICB0eXBlcy5pbmNsdWRlcyhub2RlLm1vZGVsLnJlbmRlclZpZXcucmVuZGVyRGF0YS5zcGVja2xlVHlwZSlcclxuICAgICAgKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJWaWV3c0Zvck5vZGUobm9kZTogVHJlZU5vZGUpOiBOb2RlUmVuZGVyVmlld1tdIHtcclxuICAgIHJldHVybiB0aGlzLmdldFJlbmRlclZpZXdOb2Rlc0Zvck5vZGUobm9kZSkubWFwKFxyXG4gICAgICAodmFsOiBUcmVlTm9kZSkgPT4gdmFsLm1vZGVsLnJlbmRlclZpZXdcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJWaWV3Tm9kZXNGb3JOb2RlKG5vZGU6IFRyZWVOb2RlKTogVHJlZU5vZGVbXSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIG5vZGUubW9kZWwuYXRvbWljICYmXHJcbiAgICAgIG5vZGUubW9kZWwucmVuZGVyVmlld1xyXG4gICAgICAvKiogVGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhbnltb3JlLiAqL1xyXG4gICAgICAvKiYmXHJcbiAgICAgIG5vZGUubW9kZWwucmVuZGVyVmlldy5yZW5kZXJEYXRhLnNwZWNrbGVUeXBlICE9PSBTcGVja2xlVHlwZS5SZXZpdEluc3RhbmNlICYmXHJcbiAgICAgIG5vZGUubW9kZWwucmVuZGVyVmlldy5yZW5kZXJEYXRhLnNwZWNrbGVUeXBlICE9PSBTcGVja2xlVHlwZS5CbG9ja0luc3RhbmNlXHJcbiAgICAgICovXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIFtub2RlXVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBub2RlLmFsbCgoX25vZGU6IFRyZWVOb2RlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgX25vZGUubW9kZWwucmVuZGVyVmlldyAmJlxyXG4gICAgICAgIChfbm9kZS5tb2RlbC5yZW5kZXJWaWV3Lmhhc0dlb21ldHJ5IHx8IF9ub2RlLm1vZGVsLnJlbmRlclZpZXcuaGFzTWV0YWRhdGEpXHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyVmlld3NGb3JOb2RlSWQoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgc3VidHJlZUlkPzogbnVtYmVyXHJcbiAgKTogTm9kZVJlbmRlclZpZXdbXSB8IG51bGwge1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWUuZmluZElkKGlkLCBzdWJ0cmVlSWQpXHJcbiAgICBpZiAoIW5vZGVzKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGBJZCAke2lkfSBkb2VzIG5vdCBleGlzdGApXHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbiAgICBjb25zdCByZXQ6IEFycmF5PE5vZGVSZW5kZXJWaWV3PiA9IFtdXHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlOiBUcmVlTm9kZSkgPT4ge1xyXG4gICAgICByZXQucHVzaCguLi50aGlzLmdldFJlbmRlclZpZXdzRm9yTm9kZShub2RlKSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gcmV0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QXRvbWljUGFyZW50KG5vZGU6IFRyZWVOb2RlKTogVHJlZU5vZGUge1xyXG4gICAgaWYgKG5vZGUubW9kZWwuYXRvbWljKSB7XHJcbiAgICAgIHJldHVybiBub2RlXHJcbiAgICB9XHJcbiAgICAvKiogVGhlcmUgd2lsbCBhbHdheXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgYXMgdGhlIGF0b21pYyBwYXJlbnQgZm9yIGFsbCBub2RlcyAqL1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZS5nZXRBbmNlc3RvcnMobm9kZSkuZmluZCgobm9kZSkgPT4gbm9kZS5tb2RlbC5hdG9taWMpIGFzIFRyZWVOb2RlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHVyZ2UoKSB7fVxyXG5cclxuICAvKiogVE8gRE86IE5lZWQgdG8gcHVyZ2Ugb25seSBpZiBjdXJyZW50bHkgYnVpbGRpbmcgKi9cclxuICBwdWJsaWMgY2FuY2VsQnVpbGQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbmNlbCA9IHRydWVcclxuICAgIHRoaXMudHJlZS5wdXJnZSh0aGlzLmlkKVxyXG4gICAgdGhpcy5wdXJnZSgpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCBMb2dnZXIgZnJvbSAnLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIFRyZWVOb2RlIH0gZnJvbSAnLi9Xb3JsZFRyZWUuanMnXHJcblxyXG5leHBvcnQgY2xhc3MgTm9kZU1hcCB7XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT01QT1VORF9JRF9DSEFSID0gJ34nXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEVVBMSUNBVEVfSURfQ0hBUiA9ICcjJ1xyXG5cclxuICBwcml2YXRlIGFsbDogeyBbaWQ6IHN0cmluZ106IFRyZWVOb2RlIH0gPSB7fVxyXG4gIHB1YmxpYyBpbnN0YW5jZXM6IHsgW2lkOiBzdHJpbmddOiB7IFtpZDogc3RyaW5nXTogVHJlZU5vZGUgfSB9ID0ge31cclxuICBwdWJsaWMgZHVwbGljYXRlczogeyBbaWQ6IHN0cmluZ106IHsgW2lkOiBzdHJpbmddOiBUcmVlTm9kZSB9IH0gPSB7fVxyXG5cclxuICBwdWJsaWMgZ2V0IG5vZGVDb3VudCgpIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmFsbCkubGVuZ3RoXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3Ioc3VidHJlZVJvb3Q6IFRyZWVOb2RlKSB7XHJcbiAgICB0aGlzLnJlZ2lzdGVyTm9kZShzdWJ0cmVlUm9vdClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGROb2RlKG5vZGU6IFRyZWVOb2RlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobm9kZS5tb2RlbC5pZC5pbmNsdWRlcyhOb2RlTWFwLkNPTVBPVU5EX0lEX0NIQVIpKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJJbnN0YW5jZShub2RlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuYWxsW25vZGUubW9kZWwuaWRdKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS53YXJuKGBEdXBsaWNhdGUgaWQgJHtub2RlLm1vZGVsLmlkfSwgc2tpcHBpbmchYClcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yZWdpc3Rlck5vZGUobm9kZSlcclxuXHJcbiAgICAgIGlmIChub2RlLm1vZGVsLmlkLmluY2x1ZGVzKE5vZGVNYXAuRFVQTElDQVRFX0lEX0NIQVIpKSB7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckR1cGxpY2F0ZShub2RlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZU5vZGUobm9kZTogVHJlZU5vZGUpOiBib29sZWFuIHtcclxuICAgIGlmIChub2RlLm1vZGVsLmlkLmluY2x1ZGVzKE5vZGVNYXAuQ09NUE9VTkRfSURfQ0hBUikpIHtcclxuICAgICAgY29uc3QgYmFzZUlkID0gbm9kZS5tb2RlbC5pZC5zdWJzdHJpbmcoXHJcbiAgICAgICAgMCxcclxuICAgICAgICBub2RlLm1vZGVsLmlkLmluZGV4T2YoTm9kZU1hcC5DT01QT1VORF9JRF9DSEFSKVxyXG4gICAgICApXHJcbiAgICAgIGRlbGV0ZSB0aGlzLmluc3RhbmNlc1tiYXNlSWRdW25vZGUubW9kZWwuaWRdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgdGhpcy5hbGxbbm9kZS5tb2RlbC5pZF1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Tm9kZUJ5SWQoaWQ6IHN0cmluZyk6IFRyZWVOb2RlW10gfCBudWxsIHtcclxuICAgIGlmIChpZC5pbmNsdWRlcyhOb2RlTWFwLkNPTVBPVU5EX0lEX0NIQVIpKSB7XHJcbiAgICAgIGNvbnN0IGJhc2VJZCA9IGlkLnN1YnN0cmluZygwLCBpZC5pbmRleE9mKE5vZGVNYXAuQ09NUE9VTkRfSURfQ0hBUikpXHJcbiAgICAgIGlmICh0aGlzLmluc3RhbmNlc1tiYXNlSWRdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VzW2Jhc2VJZF1baWRdKSB7XHJcbiAgICAgICAgICByZXR1cm4gW3RoaXMuaW5zdGFuY2VzW2Jhc2VJZF1baWRdXVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBMb2dnZXIud2FybignQ291bGQgbm90IGZpbmQgaW5zdGFuY2Ugd2l0aCBiYXNlSUQ6ICcsIGJhc2VJZClcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaWQuaW5jbHVkZXMoTm9kZU1hcC5EVVBMSUNBVEVfSURfQ0hBUikpIHtcclxuICAgICAgY29uc3QgYmFzZUlkID0gaWQuc3Vic3RyaW5nKDAsIGlkLmluZGV4T2YoTm9kZU1hcC5EVVBMSUNBVEVfSURfQ0hBUikpXHJcbiAgICAgIGlmICh0aGlzLmR1cGxpY2F0ZXNbYmFzZUlkXSkge1xyXG4gICAgICAgIGlmICh0aGlzLmR1cGxpY2F0ZXNbYmFzZUlkXVtpZF0pIHtcclxuICAgICAgICAgIHJldHVybiBbdGhpcy5kdXBsaWNhdGVzW2Jhc2VJZF1baWRdXVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBMb2dnZXIud2FybignQ291bGQgbm90IGZpbmQgZHVwbGljYXRlIHdpdGggYmFzZUlEOiAnLCBiYXNlSWQpXHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFsbFtpZF0pIHtcclxuICAgICAgaWYgKHRoaXMuZHVwbGljYXRlc1tpZF0pIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMuYWxsW2lkXSwgLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmR1cGxpY2F0ZXNbaWRdKV1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gW3RoaXMuYWxsW2lkXV1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmluc3RhbmNlc1tpZF0pIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5pbnN0YW5jZXNbaWRdKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U3VidHJlZUJ5SWQoaWQ6IHN0cmluZyk6IFRyZWVOb2RlIHtcclxuICAgIHJldHVybiB0aGlzLmFsbFtpZF1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNJZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNOb2RlSWQoaWQpIHx8IHRoaXMuaGFzSW5zdGFuY2VJZChpZClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNOb2RlSWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWxsW2lkXSAhPT0gdW5kZWZpbmVkXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzSW5zdGFuY2VJZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaWQuaW5jbHVkZXMoTm9kZU1hcC5DT01QT1VORF9JRF9DSEFSKSkge1xyXG4gICAgICBjb25zdCBiYXNlSWQgPSBpZC5zdWJzdHJpbmcoMCwgaWQuaW5kZXhPZihOb2RlTWFwLkNPTVBPVU5EX0lEX0NIQVIpKVxyXG4gICAgICBpZiAodGhpcy5pbnN0YW5jZXNbYmFzZUlkXSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWdpc3Rlckluc3RhbmNlKG5vZGU6IFRyZWVOb2RlKTogdm9pZCB7XHJcbiAgICBjb25zdCBiYXNlSWQgPSBub2RlLm1vZGVsLmlkLnN1YnN0cmluZyhcclxuICAgICAgMCxcclxuICAgICAgbm9kZS5tb2RlbC5pZC5pbmRleE9mKE5vZGVNYXAuQ09NUE9VTkRfSURfQ0hBUilcclxuICAgIClcclxuICAgIGlmICghdGhpcy5pbnN0YW5jZXNbYmFzZUlkXSkge1xyXG4gICAgICB0aGlzLmluc3RhbmNlc1tiYXNlSWRdID0ge31cclxuICAgIH1cclxuICAgIHRoaXMuaW5zdGFuY2VzW2Jhc2VJZF1bbm9kZS5tb2RlbC5pZF0gPSBub2RlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZ2lzdGVyRHVwbGljYXRlKG5vZGU6IFRyZWVOb2RlKTogdm9pZCB7XHJcbiAgICBjb25zdCBiYXNlSWQgPSBub2RlLm1vZGVsLmlkLnN1YnN0cmluZyhcclxuICAgICAgMCxcclxuICAgICAgbm9kZS5tb2RlbC5pZC5pbmRleE9mKE5vZGVNYXAuRFVQTElDQVRFX0lEX0NIQVIpXHJcbiAgICApXHJcbiAgICBpZiAoIXRoaXMuZHVwbGljYXRlc1tiYXNlSWRdKSB7XHJcbiAgICAgIHRoaXMuZHVwbGljYXRlc1tiYXNlSWRdID0ge31cclxuICAgIH1cclxuICAgIHRoaXMuZHVwbGljYXRlc1tiYXNlSWRdW25vZGUubW9kZWwuaWRdID0gbm9kZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWdpc3Rlck5vZGUobm9kZTogVHJlZU5vZGUpIHtcclxuICAgIHRoaXMuYWxsW25vZGUubW9kZWwuaWRdID0gbm9kZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHB1cmdlKCkge1xyXG4gICAgdGhpcy5hbGwgPSB7fVxyXG4gICAgdGhpcy5pbnN0YW5jZXMgPSB7fVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgVHJlZU1vZGVsLCB7IHR5cGUgTW9kZWwgfSBmcm9tICd0cmVlLW1vZGVsJ1xyXG5pbXBvcnQgeyBOb2RlUmVuZGVyVmlldyB9IGZyb20gJy4vTm9kZVJlbmRlclZpZXcuanMnXHJcbmltcG9ydCB7IFJlbmRlclRyZWUgfSBmcm9tICcuL1JlbmRlclRyZWUuanMnXHJcbmltcG9ydCB7IEFzeW5jUGF1c2UgfSBmcm9tICcuLi9Xb3JsZC5qcydcclxuaW1wb3J0IHsgTm9kZU1hcCB9IGZyb20gJy4vTm9kZU1hcC5qcydcclxuaW1wb3J0IExvZ2dlciBmcm9tICcuLi91dGlscy9Mb2dnZXIuanMnXHJcblxyXG5leHBvcnQgdHlwZSBUcmVlTm9kZSA9IFRyZWVNb2RlbC5Ob2RlPE5vZGVEYXRhPlxyXG5leHBvcnQgdHlwZSBTZWFyY2hQcmVkaWNhdGUgPSAobm9kZTogVHJlZU5vZGUpID0+IGJvb2xlYW5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm9kZURhdGEge1xyXG4gIGlkOiBzdHJpbmdcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHJhdzogeyBbcHJvcDogc3RyaW5nXTogYW55IH1cclxuICBjaGlsZHJlbjogVHJlZU5vZGVbXVxyXG4gIGF0b21pYzogYm9vbGVhblxyXG4gIG5lc3RlZE5vZGVzPzogVHJlZU5vZGVbXVxyXG4gIHN1YnRyZWVJZD86IG51bWJlclxyXG4gIHJlbmRlclZpZXc/OiBOb2RlUmVuZGVyVmlldyB8IG51bGxcclxuICBpbnN0YW5jZWQ/OiBib29sZWFuXHJcbiAgY29sb3I/OiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdvcmxkVHJlZSB7XHJcbiAgcHJpdmF0ZSByZW5kZXJUcmVlSW5zdGFuY2VzOiB7IFtpZDogc3RyaW5nXTogUmVuZGVyVHJlZSB9ID0ge31cclxuICBwcml2YXRlIG5vZGVNYXBzOiB7IFtpZDogc3RyaW5nXTogTm9kZU1hcCB9ID0ge31cclxuICBwcml2YXRlIHJlYWRvbmx5IHN1cHJlc3NXYXJuaW5ncyA9IHRydWVcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJPT1RfSUQgPSAnUk9PVCdcclxuICBwcml2YXRlIHN1YnRyZWVJZDogbnVtYmVyID0gMFxyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnRyZWUgPSBuZXcgVHJlZU1vZGVsKClcclxuICAgIHRoaXMuX3Jvb3QgPSB0aGlzLnBhcnNlKHtcclxuICAgICAgaWQ6IFdvcmxkVHJlZS5ST09UX0lELFxyXG4gICAgICByYXc6IHt9LFxyXG4gICAgICBhdG9taWM6IHRydWUsXHJcbiAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgcmVuZGVyVmlldzogbnVsbFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKiBUaGUgcm9vdCByZW5kZXIgdHJlZSB3aWxsIGFsd2F5cyBiZSBub24tbnVsbCBiZWNhdXNlIGl0IHdpbGwgYWx3YXlzIGNvbnRhaW4gdGhlIHJvb3QgKi9cclxuICBwdWJsaWMgZ2V0UmVuZGVyVHJlZSgpOiBSZW5kZXJUcmVlXHJcbiAgcHVibGljIGdldFJlbmRlclRyZWUoc3VidHJlZUlkOiBzdHJpbmcpOiBSZW5kZXJUcmVlIHwgbnVsbFxyXG4gIHB1YmxpYyBnZXRSZW5kZXJUcmVlKHN1YnRyZWVJZD86IHN0cmluZyk6IFJlbmRlclRyZWUgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5fcm9vdCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBXb3JsZFRyZWUgbm90IGluaXRpYWxpc2VkYClcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZW5kZXJUcmVlUm9vdCA9IHN1YnRyZWVJZCA/IHRoaXMuZmluZFN1YnRyZWUoc3VidHJlZUlkKSA6IHRoaXMucm9vdFxyXG4gICAgaWYgKCFyZW5kZXJUcmVlUm9vdCkge1xyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgY29uc3Qgc3VidHJlZVJvb3RJZCA9IHJlbmRlclRyZWVSb290Lm1vZGVsLmlkXHJcbiAgICBpZiAoIXRoaXMucmVuZGVyVHJlZUluc3RhbmNlc1tzdWJ0cmVlUm9vdElkXSkge1xyXG4gICAgICB0aGlzLnJlbmRlclRyZWVJbnN0YW5jZXNbc3VidHJlZVJvb3RJZF0gPSBuZXcgUmVuZGVyVHJlZSh0aGlzLCByZW5kZXJUcmVlUm9vdClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUcmVlSW5zdGFuY2VzW3N1YnRyZWVSb290SWRdXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyZWU6IFRyZWVNb2RlbFxyXG4gIHB1YmxpYyBfcm9vdDogVHJlZU5vZGVcclxuXHJcbiAgcHVibGljIGdldCByb290KCk6IFRyZWVOb2RlIHtcclxuICAgIHJldHVybiB0aGlzLl9yb290XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBuZXh0U3VidHJlZUlkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKyt0aGlzLnN1YnRyZWVJZFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBub2RlQ291bnQoKTogbnVtYmVyIHtcclxuICAgIGxldCBub2RlQ291bnQgPSAwXHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5ub2RlTWFwcykgbm9kZUNvdW50ICs9IHRoaXMubm9kZU1hcHNba10ubm9kZUNvdW50XHJcbiAgICByZXR1cm4gbm9kZUNvdW50XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNSb290KG5vZGU6IFRyZWVOb2RlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbm9kZSA9PT0gdGhpcy5fcm9vdFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzU3VidHJlZVJvb3Qobm9kZTogVHJlZU5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnBhcmVudCA9PT0gdGhpcy5fcm9vdFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhcnNlKG1vZGVsOiBNb2RlbDxOb2RlRGF0YT4pOiBUcmVlTm9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmVlLnBhcnNlKG1vZGVsKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZFN1YnRyZWUobm9kZTogVHJlZU5vZGUpIHtcclxuICAgIGlmICh0aGlzLm5vZGVNYXBzW25vZGUuaWRdKSB7XHJcbiAgICAgIExvZ2dlci5lcnJvcihgU3VidHJlZSB3aXRoIGlkICR7bm9kZS5pZH0gYWxyZWFkeSBleGlzdHMhYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCBzdWJ0cmVlSWQgPSB0aGlzLm5leHRTdWJ0cmVlSWRcclxuICAgIG5vZGUubW9kZWwuc3VidHJlZUlkID0gc3VidHJlZUlkXHJcbiAgICB0aGlzLm5vZGVNYXBzW3N1YnRyZWVJZF0gPSBuZXcgTm9kZU1hcChub2RlKVxyXG4gICAgdGhpcy5fcm9vdC5hZGRDaGlsZChub2RlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZE5vZGUobm9kZTogVHJlZU5vZGUsIHBhcmVudDogVHJlZU5vZGUgfCBudWxsKSB7XHJcbiAgICBpZiAocGFyZW50ID09PSBudWxsIHx8IHBhcmVudC5tb2RlbC5zdWJ0cmVlSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBMb2dnZXIuZXJyb3IoYEludmFsaWQgcGFyZW50IG5vZGUhYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBub2RlLm1vZGVsLnN1YnRyZWVJZCA9IHBhcmVudC5tb2RlbC5zdWJ0cmVlSWRcclxuICAgIGlmICh0aGlzLm5vZGVNYXBzW3BhcmVudC5tb2RlbC5zdWJ0cmVlSWRdPy5hZGROb2RlKG5vZGUpKSBwYXJlbnQuYWRkQ2hpbGQobm9kZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVOb2RlKG5vZGU6IFRyZWVOb2RlLCByZW1vdmVDaGlsZHJlbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuXHJcbiAgICB0aGlzLm5vZGVNYXBzW25vZGUubW9kZWwuc3VidHJlZUlkXT8ucmVtb3ZlTm9kZShub2RlKVxyXG4gICAgbm9kZS5kcm9wKClcclxuICAgIGlmICghcmVtb3ZlQ2hpbGRyZW4gfHwgIWNoaWxkcmVuKSByZXR1cm5cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY2hpbGRyZW4ubGVuZ3RoOyBrKyspIHtcclxuICAgICAgdGhpcy5yZW1vdmVOb2RlKGNoaWxkcmVuW2tdLCByZW1vdmVDaGlsZHJlbilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNOb2RlSWQoaWQ6IHN0cmluZywgc3VidHJlZUlkOiBudW1iZXIgPSAxKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ub2RlTWFwc1tzdWJ0cmVlSWRdICYmIHRoaXMubm9kZU1hcHNbc3VidHJlZUlkXS5oYXNOb2RlSWQoaWQpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzSW5zdGFuY2VJZChpZDogc3RyaW5nLCBzdWJ0cmVlSWQ6IG51bWJlciA9IDEpIHtcclxuICAgIHJldHVybiB0aGlzLm5vZGVNYXBzW3N1YnRyZWVJZF0gJiYgdGhpcy5ub2RlTWFwc1tzdWJ0cmVlSWRdLmhhc0luc3RhbmNlSWQoaWQpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzSWQoaWQ6IHN0cmluZywgc3VidHJlZUlkOiBudW1iZXIgPSAxKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ub2RlTWFwc1tzdWJ0cmVlSWRdICYmIHRoaXMubm9kZU1hcHNbc3VidHJlZUlkXS5oYXNJZChpZClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaW5kQWxsKHByZWRpY2F0ZTogU2VhcmNoUHJlZGljYXRlLCBub2RlPzogVHJlZU5vZGUpOiBBcnJheTxUcmVlTm9kZT4ge1xyXG4gICAgaWYgKCFub2RlICYmICF0aGlzLnN1cHJlc3NXYXJuaW5ncykge1xyXG4gICAgICBMb2dnZXIud2FybihgUm9vdCB3aWxsIGJlIHVzZWQgZm9yIHNlYXJjaGluZy4gWW91IG1pZ2h0IG5vdCB3YW50IHRoYXRgKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChub2RlID8gbm9kZSA6IHRoaXMucm9vdCkuYWxsKHByZWRpY2F0ZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaW5kSWQoaWQ6IHN0cmluZywgc3VidHJlZUlkPzogbnVtYmVyKTogVHJlZU5vZGVbXSB8IG51bGwge1xyXG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGxcclxuXHJcbiAgICBsZXQgaWROb2RlID0gbnVsbFxyXG4gICAgaWYgKHN1YnRyZWVJZCkge1xyXG4gICAgICBpZE5vZGUgPSB0aGlzLm5vZGVNYXBzW3N1YnRyZWVJZF0uZ2V0Tm9kZUJ5SWQoaWQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5ub2RlTWFwcykge1xyXG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ub2RlTWFwc1trXS5nZXROb2RlQnlJZChpZClcclxuICAgICAgICBpZiAobm9kZXMpIGlkTm9kZSA9IFsuLi5ub2Rlc11cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkTm9kZVxyXG4gIH1cclxuXHJcbiAgLyoqIFRPRE86IFdvdWxkIHJhdGhlciBub3QgaGF2ZSB0aGlzICovXHJcbiAgcHVibGljIGZpbmRTdWJ0cmVlKGlkOiBzdHJpbmcpIHtcclxuICAgIGxldCBpZE5vZGUgPSBudWxsXHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5ub2RlTWFwcykge1xyXG4gICAgICBpZiAoKGlkTm9kZSA9IHRoaXMubm9kZU1hcHNba10uZ2V0U3VidHJlZUJ5SWQoaWQpKSkgYnJlYWtcclxuICAgIH1cclxuICAgIHJldHVybiBpZE5vZGVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBbmNlc3RvcnMobm9kZTogVHJlZU5vZGUpOiBBcnJheTxUcmVlTm9kZT4ge1xyXG4gICAgcmV0dXJuIG5vZGUuZ2V0UGF0aCgpLnJldmVyc2UoKS5zbGljZSgxKSAvLyBXZSBza2lwIHRoZSBub2RlIGl0c2VsZlxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEluc3RhbmNlcyhzdWJ0cmVlSWQ6IHN0cmluZyk6IHsgW2lkOiBzdHJpbmddOiBSZWNvcmQ8c3RyaW5nLCBUcmVlTm9kZT4gfSB7XHJcbiAgICByZXR1cm4gdGhpcy5ub2RlTWFwc1tzdWJ0cmVlSWRdLmluc3RhbmNlc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldER1cGxpY2F0ZXMoc3VidHJlZUlkOiBzdHJpbmcpOiB7IFtpZDogc3RyaW5nXTogUmVjb3JkPHN0cmluZywgVHJlZU5vZGU+IH0ge1xyXG4gICAgcmV0dXJuIHRoaXMubm9kZU1hcHNbc3VidHJlZUlkXS5kdXBsaWNhdGVzXHJcbiAgfVxyXG5cclxuICAvKiogVE8gRE86IFdlIG1pZ2h0IHdhbnQgdG8gYWRkIGJvb2xlYW4gYXMgcmV0dXJuIHR5cGUgaGVyZSB0b28gKi9cclxuICBwdWJsaWMgd2FsayhwcmVkaWNhdGU6IFNlYXJjaFByZWRpY2F0ZSwgbm9kZT86IFRyZWVOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAoIW5vZGUgJiYgIXRoaXMuc3VwcmVzc1dhcm5pbmdzKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGBSb290IHdpbGwgYmUgdXNlZCBmb3Igc2VhcmNoaW5nLiBZb3UgbWlnaHQgbm90IHdhbnQgdGhhdGApXHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb290LndhbGsocHJlZGljYXRlLCBub2RlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHdhbGtBc3luYyhcclxuICAgIHByZWRpY2F0ZTogU2VhcmNoUHJlZGljYXRlLFxyXG4gICAgbm9kZT86IFRyZWVOb2RlXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIW5vZGUgJiYgIXRoaXMuc3VwcmVzc1dhcm5pbmdzKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGBSb290IHdpbGwgYmUgdXNlZCBmb3Igc2VhcmNoaW5nLiBZb3UgbWlnaHQgbm90IHdhbnQgdGhhdGApXHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXVzZSA9IG5ldyBBc3luY1BhdXNlKClcclxuXHJcbiAgICBsZXQgc3VjY2VzcyA9IHRydWVcclxuICAgIGFzeW5jIGZ1bmN0aW9uIGRlcHRoRmlyc3RQcmVPcmRlckFzeW5jKFxyXG4gICAgICBjYWxsYmFjazogU2VhcmNoUHJlZGljYXRlLFxyXG4gICAgICBjb250ZXh0OiBUcmVlTm9kZVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBpLCBjaGlsZENvdW50XHJcbiAgICAgIHBhdXNlLnRpY2soMTAwKVxyXG4gICAgICBpZiAocGF1c2UubmVlZHNXYWl0KSB7XHJcbiAgICAgICAgYXdhaXQgcGF1c2Uud2FpdCgxNilcclxuICAgICAgfVxyXG5cclxuICAgICAgc3VjY2VzcyAmJj0gY2FsbGJhY2soY29udGV4dClcclxuXHJcbiAgICAgIGZvciAoaSA9IDAsIGNoaWxkQ291bnQgPSBjb250ZXh0LmNoaWxkcmVuLmxlbmd0aDsgaSA8IGNoaWxkQ291bnQ7IGkrKykge1xyXG4gICAgICAgIGlmICghKGF3YWl0IGRlcHRoRmlyc3RQcmVPcmRlckFzeW5jKGNhbGxiYWNrLCBjb250ZXh0LmNoaWxkcmVuW2ldKSkpIGJyZWFrXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVwdGhGaXJzdFByZU9yZGVyQXN5bmMocHJlZGljYXRlLCBub2RlID8gbm9kZSA6IHRoaXMuX3Jvb3QpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHVyZ2Uoc3VidHJlZUlkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoc3VidHJlZUlkKSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlclRyZWVJbnN0YW5jZXNbc3VidHJlZUlkXVxyXG4gICAgICBjb25zdCBzdWJ0cmVlTm9kZSA9IHRoaXMuZmluZElkKHN1YnRyZWVJZClcclxuICAgICAgaWYgKHN1YnRyZWVOb2RlKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlTWFwc1tzdWJ0cmVlTm9kZVswXS5tb2RlbC5zdWJ0cmVlSWRdLnB1cmdlKClcclxuICAgICAgICBkZWxldGUgdGhpcy5ub2RlTWFwc1tzdWJ0cmVlTm9kZVswXS5tb2RlbC5zdWJ0cmVlSWRdXHJcbiAgICAgICAgLy8gUG90ZW50aWFsbHkgdHJ1ZT9cclxuICAgICAgICB0aGlzLnJlbW92ZU5vZGUoc3VidHJlZU5vZGVbMF0sIGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMucmVuZGVyVHJlZUluc3RhbmNlcykuZm9yRWFjaChcclxuICAgICAgKGtleSkgPT4gZGVsZXRlIHRoaXMucmVuZGVyVHJlZUluc3RhbmNlc1trZXldXHJcbiAgICApXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLm5vZGVNYXBzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgdGhpcy5ub2RlTWFwc1trZXldLnB1cmdlXHJcbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGVNYXBzW2tleV1cclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5fcm9vdC5kcm9wKClcclxuICAgIHRoaXMuX3Jvb3QuY2hpbGRyZW4ubGVuZ3RoID0gMFxyXG4gICAgdGhpcy50cmVlID0gbmV3IFRyZWVNb2RlbCgpXHJcbiAgICB0aGlzLl9yb290ID0gdGhpcy50cmVlLnBhcnNlKHtcclxuICAgICAgaWQ6IFdvcmxkVHJlZS5ST09UX0lELFxyXG4gICAgICByYXc6IHt9LFxyXG4gICAgICBhdG9taWM6IHRydWUsXHJcbiAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQm94MywgTWF0cml4NCwgVmVjdG9yMiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBERUcyUkFEIH0gZnJvbSAndGhyZWUvc3JjL21hdGgvTWF0aFV0aWxzLmpzJ1xyXG5cclxuY29uc3QgTWF0QnVmZjA6IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcbmNvbnN0IEJveEJ1ZmYwOiBCb3gzID0gbmV3IEJveDMoKVxyXG5jb25zdCBCb3hCdWZmMTogQm94MyA9IG5ldyBCb3gzKClcclxuY29uc3QgVmVjQnVmZjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxhdGl2ZU9mZnNldChcclxuICByZWZlcmVuY2VCb3g6IEJveDMsXHJcbiAgb2Zmc2V0QW1vdW50OiBudW1iZXIgPSAwLjAwMVxyXG4pOiBudW1iZXIge1xyXG4gIGlmIChyZWZlcmVuY2VCb3guaXNFbXB0eSgpKSByZXR1cm4gb2Zmc2V0QW1vdW50XHJcblxyXG4gIE1hdEJ1ZmYwLmlkZW50aXR5KClcclxuICBNYXRCdWZmMC5tYWtlU2NhbGUoMSArIG9mZnNldEFtb3VudCwgMSArIG9mZnNldEFtb3VudCwgMSArIG9mZnNldEFtb3VudClcclxuICBjb25zdCB3b3JsZFNpemUgPSByZWZlcmVuY2VCb3guZ2V0U2l6ZShWZWNCdWZmKS5tdWx0aXBseVNjYWxhcigwLjUpXHJcblxyXG4gIEJveEJ1ZmYwLm1pbi5zZXQoMCwgMCwgMClcclxuICBCb3hCdWZmMC5tYXguc2V0KDAsIDAsIDApXHJcbiAgQm94QnVmZjEubWluLnNldCgwLCAwLCAwKVxyXG4gIEJveEJ1ZmYxLm1heC5zZXQoMCwgMCwgMClcclxuICBjb25zdCBzaXplQm94ID0gQm94QnVmZjAuZXhwYW5kQnlWZWN0b3Iod29ybGRTaXplKVxyXG4gIGNvbnN0IG9mZnNldEJveCA9IEJveEJ1ZmYxLmNvcHkoc2l6ZUJveCkuYXBwbHlNYXRyaXg0KE1hdEJ1ZmYwKVxyXG4gIGNvbnN0IGRpc3QgPSBvZmZzZXRCb3gubWF4LmRpc3RhbmNlVG8oc2l6ZUJveC5tYXgpXHJcbiAgcmV0dXJuIGRpc3RcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQZXJzcGVjdGl2ZVByb2plY3Rpb24oXHJcbiAgc2NyZWVuU2l6ZTogVmVjdG9yMixcclxuICBmb3Y6IG51bWJlcixcclxuICBuZWFyOiBudW1iZXIsXHJcbiAgZmFyOiBudW1iZXJcclxuKSB7XHJcbiAgY29uc3QgYXNwZWN0ID0gc2NyZWVuU2l6ZS54IC8gc2NyZWVuU2l6ZS55XHJcbiAgY29uc3QgdG9wID0gbmVhciAqIE1hdGgudGFuKERFRzJSQUQgKiAwLjUgKiBmb3YpXHJcbiAgY29uc3QgaGVpZ2h0ID0gMiAqIHRvcFxyXG4gIGNvbnN0IHdpZHRoID0gYXNwZWN0ICogaGVpZ2h0XHJcbiAgY29uc3QgbGVmdCA9IC0wLjUgKiB3aWR0aFxyXG5cclxuICByZXR1cm4gbmV3IE1hdHJpeDQoKS5tYWtlUGVyc3BlY3RpdmUobGVmdCwgbGVmdCArIHdpZHRoLCB0b3AsIHRvcCAtIGhlaWdodCwgbmVhciwgZmFyKVxyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xyXG5pbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgQnVmZmVyQXR0cmlidXRlLFxyXG4gIEJ1ZmZlckdlb21ldHJ5LFxyXG4gIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIsXHJcbiAgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgTWF0aFV0aWxzLFxyXG4gIE1hdHJpeDQsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzLFxyXG4gIFZlY3RvcjRcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgRGF0YUNodW5rLCB0eXBlIFNwZWNrbGVPYmplY3QgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyBnZXRSZWxhdGl2ZU9mZnNldCwgbWFrZVBlcnNwZWN0aXZlUHJvamVjdGlvbiB9IGZyb20gJy4uL0hlbHBlcnMuanMnXHJcbmltcG9ydCBlYXJjdXQgZnJvbSAnZWFyY3V0J1xyXG5pbXBvcnQgeyBDaHVua0FycmF5IH0gZnJvbSAnLi9WaXJ0dWFsQXJyYXkuanMnXHJcblxyXG5jb25zdCB2ZWNCdWZmMDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgZmxvYXRBcnJheUJ1ZmY6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpXHJcblxyXG5leHBvcnQgZW51bSBHZW9tZXRyeUF0dHJpYnV0ZXMge1xyXG4gIFBPU0lUSU9OID0gJ1BPU0lUSU9OJyxcclxuICBDT0xPUiA9ICdDT0xPUicsXHJcbiAgTk9STUFMID0gJ05PUk1BTCcsXHJcbiAgVVYgPSAnVVYnLFxyXG4gIFRBTkdFTlQgPSAnVEFOR0VOVCcsXHJcbiAgSU5ERVggPSAnSU5ERVgnXHJcbn1cclxuXHJcbi8vIFJlcXVpcmVkIGtleXNcclxudHlwZSBSZXF1aXJlZEtleXMgPSBHZW9tZXRyeUF0dHJpYnV0ZXMuUE9TSVRJT04gfCBHZW9tZXRyeUF0dHJpYnV0ZXMuSU5ERVhcclxuXHJcbi8vIE9wdGlvbmFsIGtleXNcclxudHlwZSBPcHRpb25hbEtleXMgPSBFeGNsdWRlPEdlb21ldHJ5QXR0cmlidXRlcywgUmVxdWlyZWRLZXlzPlxyXG5cclxuLy8gRmluYWwgc2hhcGU6IHJlcXVpcmVkICsgb3B0aW9uYWwga2V5c1xyXG50eXBlIEdlb21ldHJ5QXR0cmlidXRlc1NoYXBlID0ge1xyXG4gIFtLIGluIFJlcXVpcmVkS2V5c106IENodW5rQXJyYXlcclxufSAmIHtcclxuICBbSyBpbiBPcHRpb25hbEtleXNdPzogQ2h1bmtBcnJheVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdlb21ldHJ5RGF0YSB7XHJcbiAgYXR0cmlidXRlczogR2VvbWV0cnlBdHRyaWJ1dGVzU2hhcGUgfCBudWxsXHJcbiAgYmFrZVRyYW5zZm9ybTogTWF0cml4NCB8IG51bGxcclxuICB0cmFuc2Zvcm06IE1hdHJpeDQgfCBudWxsXHJcbiAgbWV0YURhdGE/OiBTcGVja2xlT2JqZWN0XHJcbiAgaW5zdGFuY2VkPzogYm9vbGVhblxyXG4gIGZsaXBOb3JtYWxzPzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR2VvbWV0cnkge1xyXG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlUlRFR2VvbWV0cnkoXHJcbiAgICBnZW9tZXRyeTogQnVmZmVyR2VvbWV0cnksXHJcbiAgICBkb3VibGVQb3NpdGlvbnM6IEZsb2F0NjRBcnJheSB8IEZsb2F0MzJBcnJheVxyXG4gICkge1xyXG4gICAgaWYgKFxyXG4gICAgICBnZW9tZXRyeS50eXBlID09PSAnQnVmZmVyR2VvbWV0cnknIHx8XHJcbiAgICAgIGdlb21ldHJ5LnR5cGUgPT09ICdQbGFuZUdlb21ldHJ5JyB8fFxyXG4gICAgICBnZW9tZXRyeS50eXBlID09PSAnQ2lyY2xlR2VvbWV0cnknXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgcG9zaXRpb25fbG93ID0gbmV3IEZsb2F0MzJBcnJheShkb3VibGVQb3NpdGlvbnMubGVuZ3RoKVxyXG4gICAgICAvKiogV2UnbGwgc3RvcmUgdGhlIGhpZ2ggY29tcG9uZW50IG9mIHRoZSBlbmNvZGluZyBpbnNpZGUgdGhyZWUncyBkZWZhdWx0IGBwb3NpdGlvbmAgYXR0cmlidXRlICovXHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uX2hpZ2ggPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5IGFzIEZsb2F0MzJBcnJheVxyXG4gICAgICBHZW9tZXRyeS5Eb3VibGVUb0hpZ2hMb3dCdWZmZXIoZG91YmxlUG9zaXRpb25zLCBwb3NpdGlvbl9sb3csIHBvc2l0aW9uX2hpZ2gpXHJcbiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb25fbG93JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25fbG93LCAzKSlcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGdlb21ldHJ5LnR5cGUgPT09ICdMaW5lR2VvbWV0cnknIHx8XHJcbiAgICAgIGdlb21ldHJ5LnR5cGUgPT09ICdMaW5lU2VnbWVudHNHZW9tZXRyeSdcclxuICAgICkge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbl9sb3cgPSBuZXcgRmxvYXQzMkFycmF5KGRvdWJsZVBvc2l0aW9ucy5sZW5ndGgpXHJcbiAgICAgIC8qKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGluc3RhbmNlU3RhcnQgKyBpbnN0YW5jZUVuZCBpbnRlcmxlYXZlZCBhdHRyaWJ1dGUgYnVmZmVyXHJcbiAgICAgICAqICBXZSdyZSBub3QgYWx0ZXJpbmcgaXQgaW4gcmVhbGl0eSBzaW5jZSB0aGUgaGlnaCBwYXJ0IG9mIG91ciBlbmNvZGluZyBpcyB0aGVcclxuICAgICAgICogIG9yaWdpbmFsIHBvc2l0aW9uIGRvdWJsZSB2YWx1ZSBjYXN0ZWQgZG93biB0byBmbG9hdFxyXG4gICAgICAgKi9cclxuICAgICAgY29uc3QgcG9zaXRpb25faGlnaCA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuaW5zdGFuY2VTdGFydC5hcnJheSBhcyBGbG9hdDMyQXJyYXlcclxuXHJcbiAgICAgIEdlb21ldHJ5LkRvdWJsZVRvSGlnaExvd0J1ZmZlcihkb3VibGVQb3NpdGlvbnMsIHBvc2l0aW9uX2xvdywgcG9zaXRpb25faGlnaClcclxuXHJcbiAgICAgIGNvbnN0IGluc3RhbmNlQnVmZmVyTG93ID0gbmV3IEluc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKHBvc2l0aW9uX2xvdywgNiwgMSkgLy8geHl6LCB4eXpcclxuICAgICAgZ2VvbWV0cnkuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICdpbnN0YW5jZVN0YXJ0TG93JyxcclxuICAgICAgICBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoaW5zdGFuY2VCdWZmZXJMb3csIDMsIDApXHJcbiAgICAgICkgLy8geHl6XHJcbiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZShcclxuICAgICAgICAnaW5zdGFuY2VFbmRMb3cnLFxyXG4gICAgICAgIG5ldyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZShpbnN0YW5jZUJ1ZmZlckxvdywgMywgMylcclxuICAgICAgKSAvLyB4eXpcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZXJnZUdlb21ldHJ5QXR0cmlidXRlKFxyXG4gICAgYXR0cmlidXRlczogQ2h1bmtBcnJheVtdLFxyXG4gICAgdGFyZ2V0OiBGbG9hdDMyQXJyYXkgfCBGbG9hdDY0QXJyYXlcclxuICApOiBBcnJheUxpa2U8bnVtYmVyPiB7XHJcbiAgICBsZXQgb2Zmc2V0ID0gMFxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNba11cclxuICAgICAgaWYgKCFhdHRyaWJ1dGUgfHwgIXRhcmdldCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG1lcmdlIGdlb21ldHJpZXMuIEluZGljZXMgb3IgcG9zaXRpb25zIGFyZSB1bmRlZmluZWQnKVxyXG4gICAgICB9XHJcbiAgICAgIGF0dHJpYnV0ZS5jb3B5VG9CdWZmZXIodGFyZ2V0LCBvZmZzZXQpXHJcbiAgICAgIG9mZnNldCArPSBhdHRyaWJ1dGUubGVuZ3RoXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbWVyZ2VJbmRleEF0dHJpYnV0ZShcclxuICAgIGluZGV4QXR0cmlidXRlczogQ2h1bmtBcnJheVtdLFxyXG4gICAgcG9zaXRpb25BdHRyaWJ1dGVzOiBDaHVua0FycmF5W11cclxuICApOiBudW1iZXJbXSB7XHJcbiAgICBsZXQgaW5kZXhPZmZzZXQgPSAwXHJcbiAgICBjb25zdCBtZXJnZWRJbmRleCA9IFtdXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleEF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBpbmRleEF0dHJpYnV0ZXNbaV1cclxuICAgICAgY29uc3QgcG9zaXRpb25zID0gcG9zaXRpb25BdHRyaWJ1dGVzW2ldXHJcbiAgICAgIGlmICghaW5kZXggfHwgIXBvc2l0aW9ucykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG1lcmdlIGdlb21ldHJpZXMuIEluZGljZXMgb3IgcG9zaXRpb25zIGFyZSB1bmRlZmluZWQnKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGV4Lmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgbWVyZ2VkSW5kZXgucHVzaChpbmRleC5nZXQoaikgKyBpbmRleE9mZnNldCAvIDMpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGluZGV4T2Zmc2V0ICs9IHBvc2l0aW9ucy5sZW5ndGhcclxuICAgIH1cclxuICAgIHJldHVybiBtZXJnZWRJbmRleFxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lcmdlR2VvbWV0cnlEYXRhKGdlb21ldHJpZXM6IEdlb21ldHJ5RGF0YVtdKTogR2VvbWV0cnlEYXRhIHtcclxuICAgIGNvbnN0IHNhbXBsZUF0dHJpYnV0ZXMgPSBnZW9tZXRyaWVzWzBdLmF0dHJpYnV0ZXNcclxuICAgIGNvbnN0IG1lcmdlZEdlb21ldHJ5ID0ge1xyXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgYmFrZVRyYW5zZm9ybTogbnVsbCxcclxuICAgICAgdHJhbnNmb3JtOiBudWxsXHJcbiAgICB9IGFzIEdlb21ldHJ5RGF0YVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2VvbWV0cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvKiogQ2F0ZXJpbmcgdG8gdHlwZXNjcmlwdCAqL1xyXG4gICAgICBpZiAoZ2VvbWV0cmllc1tpXS5iYWtlVHJhbnNmb3JtICE9PSBudWxsKVxyXG4gICAgICAgIEdlb21ldHJ5LnRyYW5zZm9ybUdlb21ldHJ5RGF0YShnZW9tZXRyaWVzW2ldLCBnZW9tZXRyaWVzW2ldLmJha2VUcmFuc2Zvcm0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNhbXBsZUF0dHJpYnV0ZXMgJiYgc2FtcGxlQXR0cmlidXRlcy5JTkRFWCkge1xyXG4gICAgICBjb25zdCBpbmRleEF0dHJpYnV0ZXMgPSBnZW9tZXRyaWVzLm1hcCgoaXRlbTogR2VvbWV0cnlEYXRhKSA9PiB7XHJcbiAgICAgICAgLyoqIENhdGVyaW5nIHRvIHR5cGVzY3JpcHQgKi9cclxuICAgICAgICBpZiAoIWl0ZW0uYXR0cmlidXRlcykgcmV0dXJuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uYXR0cmlidXRlcy5JTkRFWFxyXG4gICAgICB9KSBhcyBDaHVua0FycmF5W11cclxuICAgICAgY29uc3QgcG9zaXRpb25BdHRyaWJ1dGVzID0gZ2VvbWV0cmllcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAvKiogQ2F0ZXJpbmcgdG8gdHlwZXNjcmlwdCAqL1xyXG4gICAgICAgIGlmICghaXRlbS5hdHRyaWJ1dGVzKSByZXR1cm5cclxuICAgICAgICByZXR1cm4gaXRlbS5hdHRyaWJ1dGVzLlBPU0lUSU9OXHJcbiAgICAgIH0pIGFzIENodW5rQXJyYXlbXVxyXG4gICAgICAvKiogb18wIENhdGVyaW5nIHRvIHR5cGVzY3JpcHQqL1xyXG4gICAgICBpZiAobWVyZ2VkR2VvbWV0cnkuYXR0cmlidXRlcylcclxuICAgICAgICBtZXJnZWRHZW9tZXRyeS5hdHRyaWJ1dGVzLklOREVYID0gbmV3IENodW5rQXJyYXkoW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkYXRhOiBHZW9tZXRyeS5tZXJnZUluZGV4QXR0cmlidXRlKGluZGV4QXR0cmlidXRlcywgcG9zaXRpb25BdHRyaWJ1dGVzKSxcclxuICAgICAgICAgICAgaWQ6IE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgICAgICAgcmVmZXJlbmNlczogMVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBrIGluIHNhbXBsZUF0dHJpYnV0ZXMpIHtcclxuICAgICAgaWYgKGsgIT09IEdlb21ldHJ5QXR0cmlidXRlcy5JTkRFWCkge1xyXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IENodW5rQXJyYXlbXSA9IGdlb21ldHJpZXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAvKiogQ2F0ZXJpbmcgdG8gdHlwZXNjcmlwdCAqL1xyXG4gICAgICAgICAgaWYgKCFpdGVtLmF0dHJpYnV0ZXMpIHJldHVyblxyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0uYXR0cmlidXRlc1trIGFzIEdlb21ldHJ5QXR0cmlidXRlc11cclxuICAgICAgICB9KSBhcyBDaHVua0FycmF5W11cclxuICAgICAgICAvKiogQ2F0ZXJpbmcgdG8gdHlwZXNjcmlwdCAqL1xyXG4gICAgICAgIGlmIChtZXJnZWRHZW9tZXRyeS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICBjb25zdCBtZXJnZWREYXRhID0gR2VvbWV0cnkubWVyZ2VHZW9tZXRyeUF0dHJpYnV0ZShcclxuICAgICAgICAgICAgYXR0cmlidXRlcyxcclxuICAgICAgICAgICAgayA9PT0gR2VvbWV0cnlBdHRyaWJ1dGVzLlBPU0lUSU9OXHJcbiAgICAgICAgICAgICAgPyBuZXcgRmxvYXQ2NEFycmF5KFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnJlZHVjZSgocHJldiwgY3VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIENhdGVyaW5nIHRvIHR5cGVzY3JpcHQgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cikgcmV0dXJuIDBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIGN1ci5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgfSwgMClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICA6IG5ldyBGbG9hdDMyQXJyYXkoXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMucmVkdWNlKChwcmV2LCBjdXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvKiogQ2F0ZXJpbmcgdG8gdHlwZXNjcmlwdCAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY3VyKSByZXR1cm4gMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3VyLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICB9LCAwKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSBhcyBudW1iZXJbXVxyXG4gICAgICAgICAgbWVyZ2VkR2VvbWV0cnkuYXR0cmlidXRlc1trIGFzIEdlb21ldHJ5QXR0cmlidXRlc10gPSBuZXcgQ2h1bmtBcnJheShbXHJcbiAgICAgICAgICAgIHsgZGF0YTogbWVyZ2VkRGF0YSwgaWQ6IE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKSwgcmVmZXJlbmNlczogMSB9XHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdlb21ldHJpZXMuZm9yRWFjaCgoZ2VvbWV0cnkpID0+IHtcclxuICAgICAgZm9yIChjb25zdCBrIGluIGdlb21ldHJ5LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBkZWxldGUgZ2VvbWV0cnkuYXR0cmlidXRlc1trIGFzIEdlb21ldHJ5QXR0cmlidXRlc11cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gbWVyZ2VkR2VvbWV0cnlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNmb3JtR2VvbWV0cnlEYXRhKGdlb21ldHJ5RGF0YTogR2VvbWV0cnlEYXRhLCBtOiBNYXRyaXg0IHwgbnVsbCkge1xyXG4gICAgaWYgKCFnZW9tZXRyeURhdGEuYXR0cmlidXRlcykgcmV0dXJuXHJcbiAgICBpZiAoIWdlb21ldHJ5RGF0YS5hdHRyaWJ1dGVzLlBPU0lUSU9OKSByZXR1cm5cclxuICAgIGlmICghbSkgcmV0dXJuXHJcbiAgICBpZiAoR2VvbWV0cnkuaXNNYXRyaXg0SWRlbnRpdHkobSkpIHJldHVyblxyXG5cclxuICAgIGNvbnN0IGUgPSBtLmVsZW1lbnRzXHJcbiAgICBnZW9tZXRyeURhdGEuYXR0cmlidXRlcy5QT1NJVElPTi5jaHVua0FycmF5LmZvckVhY2goKGNodW5rOiBEYXRhQ2h1bmspID0+IHtcclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjaHVuay5kYXRhLmxlbmd0aDsgayArPSAzKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IGNodW5rLmRhdGFba10sXHJcbiAgICAgICAgICB5ID0gY2h1bmsuZGF0YVtrICsgMV0sXHJcbiAgICAgICAgICB6ID0gY2h1bmsuZGF0YVtrICsgMl1cclxuICAgICAgICBjb25zdCB3ID0gMSAvIChlWzNdICogeCArIGVbN10gKiB5ICsgZVsxMV0gKiB6ICsgZVsxNV0pXHJcblxyXG4gICAgICAgIGNodW5rLmRhdGFba10gPSAoZVswXSAqIHggKyBlWzRdICogeSArIGVbOF0gKiB6ICsgZVsxMl0pICogd1xyXG4gICAgICAgIGNodW5rLmRhdGFbayArIDFdID0gKGVbMV0gKiB4ICsgZVs1XSAqIHkgKyBlWzldICogeiArIGVbMTNdKSAqIHdcclxuICAgICAgICBjaHVuay5kYXRhW2sgKyAyXSA9IChlWzJdICogeCArIGVbNl0gKiB5ICsgZVsxMF0gKiB6ICsgZVsxNF0pICogd1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm1BcnJheShcclxuICAgIGFycmF5OiBudW1iZXJbXSB8IEZsb2F0MzJBcnJheSB8IEZsb2F0NjRBcnJheSxcclxuICAgIG06IE1hdHJpeDQgfCBudWxsLFxyXG4gICAgb2Zmc2V0PzogbnVtYmVyLFxyXG4gICAgY291bnQ/OiBudW1iZXJcclxuICApIHtcclxuICAgIGlmICghbSkgcmV0dXJuXHJcbiAgICBpZiAoR2VvbWV0cnkuaXNNYXRyaXg0SWRlbnRpdHkobSkpIHJldHVyblxyXG5cclxuICAgIGNvbnN0IGUgPSBtLmVsZW1lbnRzXHJcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMFxyXG4gICAgY291bnQgPSBjb3VudCB8fCBhcnJheS5sZW5ndGhcclxuICAgIGZvciAobGV0IGsgPSBvZmZzZXQ7IGsgPCBvZmZzZXQgKyBjb3VudDsgayArPSAzKSB7XHJcbiAgICAgIGNvbnN0IHggPSBhcnJheVtrXSxcclxuICAgICAgICB5ID0gYXJyYXlbayArIDFdLFxyXG4gICAgICAgIHogPSBhcnJheVtrICsgMl1cclxuICAgICAgY29uc3QgdyA9IDEgLyAoZVszXSAqIHggKyBlWzddICogeSArIGVbMTFdICogeiArIGVbMTVdKVxyXG5cclxuICAgICAgYXJyYXlba10gPSAoZVswXSAqIHggKyBlWzRdICogeSArIGVbOF0gKiB6ICsgZVsxMl0pICogd1xyXG4gICAgICBhcnJheVtrICsgMV0gPSAoZVsxXSAqIHggKyBlWzVdICogeSArIGVbOV0gKiB6ICsgZVsxM10pICogd1xyXG4gICAgICBhcnJheVtrICsgMl0gPSAoZVsyXSAqIHggKyBlWzZdICogeSArIGVbMTBdICogeiArIGVbMTRdKSAqIHdcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNNYXRyaXg0SWRlbnRpdHkobWF0cml4OiBNYXRyaXg0KSB7XHJcbiAgICBjb25zdCBlID0gbWF0cml4LmVsZW1lbnRzXHJcblxyXG4gICAgLy8gQ2hlY2sgYWxsIG9mZi1kaWFnb25hbCBlbGVtZW50cyBmaXJzdFxyXG4gICAgaWYgKFxyXG4gICAgICBlWzFdICE9PSAwIHx8XHJcbiAgICAgIGVbMl0gIT09IDAgfHxcclxuICAgICAgZVszXSAhPT0gMCB8fFxyXG4gICAgICBlWzRdICE9PSAwIHx8XHJcbiAgICAgIGVbNl0gIT09IDAgfHxcclxuICAgICAgZVs3XSAhPT0gMCB8fFxyXG4gICAgICBlWzhdICE9PSAwIHx8XHJcbiAgICAgIGVbOV0gIT09IDAgfHxcclxuICAgICAgZVsxMV0gIT09IDAgfHxcclxuICAgICAgZVsxMl0gIT09IDAgfHxcclxuICAgICAgZVsxM10gIT09IDAgfHxcclxuICAgICAgZVsxNF0gIT09IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3cgY2hlY2sgZGlhZ29uYWxzXHJcbiAgICBpZiAoZVswXSAhPT0gMSB8fCBlWzVdICE9PSAxIHx8IGVbMTBdICE9PSAxIHx8IGVbMTVdICE9PSAxKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHVucGFja0NvbG9ycyhpbnQzMkNvbG9yczogbnVtYmVyW10pOiBudW1iZXJbXSB7XHJcbiAgICBjb25zdCBjb2xvcnMgPSBuZXcgQXJyYXk8bnVtYmVyPihpbnQzMkNvbG9ycy5sZW5ndGggKiAzKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnQzMkNvbG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBjb2xvciA9IGludDMyQ29sb3JzW2ldXHJcbiAgICAgIGNvbnN0IHIgPSAoY29sb3IgPj4gMTYpICYgMHhmZlxyXG4gICAgICBjb25zdCBnID0gKGNvbG9yID4+IDgpICYgMHhmZlxyXG4gICAgICBjb25zdCBiID0gY29sb3IgJiAweGZmXHJcbiAgICAgIGNvbG9yc1tpICogM10gPSByIC8gMjU1XHJcbiAgICAgIGNvbG9yc1tpICogMyArIDFdID0gZyAvIDI1NVxyXG4gICAgICBjb2xvcnNbaSAqIDMgKyAyXSA9IGIgLyAyNTVcclxuICAgIH1cclxuICAgIHJldHVybiBjb2xvcnNcclxuICB9XHJcblxyXG4gIC8qKiBQbGVhc2Ugc2VlIGh0dHBzOi8vc3BlY2tsZS5zeXN0ZW1zL2Jsb2cvaW1wcm92aW5nLXNwZWNrbGVzLXJ0ZS1pbXBsZW1lbnRhdGlvbi8gZm9yIGFkZGl0aW9uYWwgZGV0YWlsc1xyXG4gICAqICByZWdhcmRpbmcgZG91YmxlIC0+IDxmbG9hdCBsb3c7IGZsb2F0IGhpZ2g+IGVuY29kaW5nLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgRG91YmxlVG9IaWdoTG93VmVjdG9yKGlucHV0OiBWZWN0b3IzLCBsb3c6IFZlY3RvcjMsIGhpZ2g6IFZlY3RvcjMpIHtcclxuICAgIGxldCBkb3VibGVWYWx1ZSA9IGlucHV0LnhcclxuICAgIGlmIChkb3VibGVWYWx1ZSA+PSAwLjApIHtcclxuICAgICAgZmxvYXRBcnJheUJ1ZmZbMF0gPSBkb3VibGVWYWx1ZVxyXG4gICAgICBjb25zdCBkb3VibGVIaWdoID0gZmxvYXRBcnJheUJ1ZmZbMF1cclxuICAgICAgaGlnaC54ID0gZG91YmxlSGlnaFxyXG4gICAgICBsb3cueCA9IGRvdWJsZVZhbHVlIC0gZG91YmxlSGlnaFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmxvYXRBcnJheUJ1ZmZbMF0gPSAtZG91YmxlVmFsdWVcclxuICAgICAgY29uc3QgZG91YmxlSGlnaCA9IGZsb2F0QXJyYXlCdWZmWzBdXHJcbiAgICAgIGhpZ2gueCA9IC1kb3VibGVIaWdoXHJcbiAgICAgIGxvdy54ID0gZG91YmxlVmFsdWUgKyBkb3VibGVIaWdoXHJcbiAgICB9XHJcbiAgICBkb3VibGVWYWx1ZSA9IGlucHV0LnlcclxuICAgIGlmIChkb3VibGVWYWx1ZSA+PSAwLjApIHtcclxuICAgICAgZmxvYXRBcnJheUJ1ZmZbMF0gPSBkb3VibGVWYWx1ZVxyXG4gICAgICBjb25zdCBkb3VibGVIaWdoID0gZmxvYXRBcnJheUJ1ZmZbMF1cclxuICAgICAgaGlnaC55ID0gZG91YmxlSGlnaFxyXG4gICAgICBsb3cueSA9IGRvdWJsZVZhbHVlIC0gZG91YmxlSGlnaFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmxvYXRBcnJheUJ1ZmZbMF0gPSAtZG91YmxlVmFsdWVcclxuICAgICAgY29uc3QgZG91YmxlSGlnaCA9IGZsb2F0QXJyYXlCdWZmWzBdXHJcbiAgICAgIGhpZ2gueSA9IC1kb3VibGVIaWdoXHJcbiAgICAgIGxvdy55ID0gZG91YmxlVmFsdWUgKyBkb3VibGVIaWdoXHJcbiAgICB9XHJcbiAgICBkb3VibGVWYWx1ZSA9IGlucHV0LnpcclxuICAgIGlmIChkb3VibGVWYWx1ZSA+PSAwLjApIHtcclxuICAgICAgZmxvYXRBcnJheUJ1ZmZbMF0gPSBkb3VibGVWYWx1ZVxyXG4gICAgICBjb25zdCBkb3VibGVIaWdoID0gZmxvYXRBcnJheUJ1ZmZbMF1cclxuICAgICAgaGlnaC56ID0gZG91YmxlSGlnaFxyXG4gICAgICBsb3cueiA9IGRvdWJsZVZhbHVlIC0gZG91YmxlSGlnaFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmxvYXRBcnJheUJ1ZmZbMF0gPSAtZG91YmxlVmFsdWVcclxuICAgICAgY29uc3QgZG91YmxlSGlnaCA9IGZsb2F0QXJyYXlCdWZmWzBdXHJcbiAgICAgIGhpZ2gueiA9IC1kb3VibGVIaWdoXHJcbiAgICAgIGxvdy56ID0gZG91YmxlVmFsdWUgKyBkb3VibGVIaWdoXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIERvdWJsZVRvSGlnaExvd0J1ZmZlcihcclxuICAgIGlucHV0OiBBcnJheUxpa2U8bnVtYmVyPixcclxuICAgIHBvc2l0aW9uX2xvdzogbnVtYmVyW10gfCBGbG9hdDMyQXJyYXksXHJcbiAgICBwb3NpdGlvbl9oaWdoOiBudW1iZXJbXSB8IEZsb2F0MzJBcnJheVxyXG4gICkge1xyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBpbnB1dC5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBkb3VibGVWYWx1ZSA9IGlucHV0W2tdXHJcbiAgICAgIGlmIChkb3VibGVWYWx1ZSA+PSAwLjApIHtcclxuICAgICAgICBmbG9hdEFycmF5QnVmZlswXSA9IGRvdWJsZVZhbHVlXHJcbiAgICAgICAgY29uc3QgZG91YmxlSGlnaCA9IGZsb2F0QXJyYXlCdWZmWzBdXHJcbiAgICAgICAgcG9zaXRpb25faGlnaFtrXSA9IGRvdWJsZUhpZ2hcclxuICAgICAgICBwb3NpdGlvbl9sb3dba10gPSBkb3VibGVWYWx1ZSAtIGRvdWJsZUhpZ2hcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmbG9hdEFycmF5QnVmZlswXSA9IC1kb3VibGVWYWx1ZVxyXG4gICAgICAgIGNvbnN0IGRvdWJsZUhpZ2ggPSBmbG9hdEFycmF5QnVmZlswXVxyXG4gICAgICAgIHBvc2l0aW9uX2hpZ2hba10gPSAtZG91YmxlSGlnaFxyXG4gICAgICAgIHBvc2l0aW9uX2xvd1trXSA9IGRvdWJsZVZhbHVlICsgZG91YmxlSGlnaFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIG5lZWRzUlRFKGJvdW5kczogQm94Mykge1xyXG4gICAgY29uc3QgY2FtZXJhRGlzdGFuY2UgPSBnZXRSZWxhdGl2ZU9mZnNldChib3VuZHMsIDAuMDEpXHJcbiAgICBjb25zdCBjYW1lcmFOZWFyID0gZ2V0UmVsYXRpdmVPZmZzZXQoYm91bmRzLCAwLjAwOSlcclxuICAgIGNvbnN0IHNjcmVlblNpemUgPSBuZXcgVmVjdG9yMigxOTIwLCAxMDgwKVxyXG4gICAgY29uc3QgY2FtZXJhUHJvamVjdGlvbiA9IG1ha2VQZXJzcGVjdGl2ZVByb2plY3Rpb24oXHJcbiAgICAgIHNjcmVlblNpemUsXHJcbiAgICAgIDUwLFxyXG4gICAgICBjYW1lcmFOZWFyLFxyXG4gICAgICBjYW1lcmFOZWFyICogMTBcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBwaXhlbERlbHRhID0gbmV3IFZlY3RvcjIoLTEsIC0xKVxyXG4gICAgY29uc3QgcG9pbnRzID0gW2JvdW5kcy5taW4sIGJvdW5kcy5tYXgsIGJvdW5kcy5nZXRDZW50ZXIobmV3IFZlY3RvcjMoKSldXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHBvaW50cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBkZWx0YSA9IEdlb21ldHJ5LmdldEZQMzJQcm9qZWN0aW9uRGVsdGEoXHJcbiAgICAgICAgcG9pbnRzW2tdLFxyXG4gICAgICAgIGNhbWVyYVByb2plY3Rpb24sXHJcbiAgICAgICAgc2NyZWVuU2l6ZSxcclxuICAgICAgICBjYW1lcmFEaXN0YW5jZVxyXG4gICAgICApXHJcbiAgICAgIHBpeGVsRGVsdGEueCA9IE1hdGgubWF4KHBpeGVsRGVsdGEueCwgZGVsdGEueClcclxuICAgICAgcGl4ZWxEZWx0YS55ID0gTWF0aC5tYXgocGl4ZWxEZWx0YS55LCBkZWx0YS55KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwaXhlbERlbHRhLnggPj0gMC41IHx8IHBpeGVsRGVsdGEueSA+PSAwLjVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RlAzMlByb2plY3Rpb25EZWx0YShcclxuICAgIHBvaW50OiBWZWN0b3IzLFxyXG4gICAgcHJvamVjdGlvbjogTWF0cml4NCxcclxuICAgIHNjcmVlblNpemU6IFZlY3RvcjIsXHJcbiAgICByZWxhdGl2ZU9mZnNldDogbnVtYmVyID0gMVxyXG4gICkge1xyXG4gICAgLyoqIENhc3QgdG8gZmxvYXQsIGxvb3NlIHByZWNpc2lvbiAqL1xyXG4gICAgZmxvYXRBcnJheUJ1ZmZbMF0gPSBwb2ludC54XHJcbiAgICBmbG9hdEFycmF5QnVmZlsxXSA9IHBvaW50LnlcclxuICAgIGZsb2F0QXJyYXlCdWZmWzJdID0gcG9pbnQuelxyXG5cclxuICAgIC8qKiBTaW5nbGUgcHJlY2lzaW9uIHZlcnNpb24gKi9cclxuICAgIGNvbnN0IGZsb2F0VmVjdG9yID0gdmVjQnVmZjAuc2V0KFxyXG4gICAgICBmbG9hdEFycmF5QnVmZlswXSxcclxuICAgICAgZmxvYXRBcnJheUJ1ZmZbMV0sXHJcbiAgICAgIGZsb2F0QXJyYXlCdWZmWzJdXHJcbiAgICApXHJcblxyXG4gICAgLyoqIEEgYml0IG9mIHJhbmRvbW5lc3Mgc28gY2FtZXJhIGhhcyBhIHJvdGF0aW9uICovXHJcbiAgICBjb25zdCBjYW1Qb3MgPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgIC5jb3B5KHBvaW50KVxyXG4gICAgICAuYWRkKFxyXG4gICAgICAgIG5ldyBWZWN0b3IzKFxyXG4gICAgICAgICAgTWF0aC5yYW5kb20oKSAqIHJlbGF0aXZlT2Zmc2V0LFxyXG4gICAgICAgICAgTWF0aC5yYW5kb20oKSAqIHJlbGF0aXZlT2Zmc2V0LFxyXG4gICAgICAgICAgLXJlbGF0aXZlT2Zmc2V0XHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICAvKiogRG91YmxlIHByZWNpc2lvbiAqL1xyXG4gICAgY29uc3Qgdmlld1Byb2plY3Rpb25GcDY0ID0gbmV3IE1hdHJpeDQoKS5sb29rQXQoY2FtUG9zLCBwb2ludCwgbmV3IFZlY3RvcjMoMCwgMSwgMCkpXHJcbiAgICB2aWV3UHJvamVjdGlvbkZwNjQuc2V0UG9zaXRpb24oY2FtUG9zKVxyXG4gICAgdmlld1Byb2plY3Rpb25GcDY0LmludmVydCgpXHJcbiAgICB2aWV3UHJvamVjdGlvbkZwNjQucHJlbXVsdGlwbHkocHJvamVjdGlvbilcclxuICAgIC8qKiBTaW5nbGUgcHJlY2lzaW9uICovXHJcbiAgICBjb25zdCB2aWV3UHJvamVjdGlvbkZwMzIgPSBuZXcgTWF0cml4NCgpLmNvcHkodmlld1Byb2plY3Rpb25GcDY0KVxyXG4gICAgdmlld1Byb2plY3Rpb25GcDMyLnRvQXJyYXkoZmxvYXRBcnJheUJ1ZmYpXHJcbiAgICB2aWV3UHJvamVjdGlvbkZwMzIuZnJvbUFycmF5KGZsb2F0QXJyYXlCdWZmKVxyXG5cclxuICAgIC8qKiBQcm9qZWN0IGFuZCB0dXJuIGludG8gcGl4ZWxzICovXHJcbiAgICBjb25zdCBmbG9hdDQgPSBuZXcgVmVjdG9yNChmbG9hdFZlY3Rvci54LCBmbG9hdFZlY3Rvci55LCBmbG9hdFZlY3Rvci56LCAxKVxyXG4gICAgY29uc3QgZG91YmxlNCA9IG5ldyBWZWN0b3I0KGZsb2F0VmVjdG9yLngsIGZsb2F0VmVjdG9yLnksIGZsb2F0VmVjdG9yLnosIDEpXHJcbiAgICBmbG9hdDQuYXBwbHlNYXRyaXg0KHZpZXdQcm9qZWN0aW9uRnAzMilcclxuICAgIGZsb2F0NC5tdWx0aXBseVNjYWxhcigwLjUgLyBmbG9hdDQudylcclxuICAgIGZsb2F0NC5hZGRTY2FsYXIoMC41KVxyXG4gICAgZmxvYXQ0Lm11bHRpcGx5KG5ldyBWZWN0b3I0KHNjcmVlblNpemUueCwgc2NyZWVuU2l6ZS55LCAwLCAwKSlcclxuICAgIGRvdWJsZTQuYXBwbHlNYXRyaXg0KHZpZXdQcm9qZWN0aW9uRnA2NClcclxuICAgIGRvdWJsZTQubXVsdGlwbHlTY2FsYXIoMC41IC8gZG91YmxlNC53KVxyXG4gICAgZG91YmxlNC5hZGRTY2FsYXIoMC41KVxyXG4gICAgZG91YmxlNC5tdWx0aXBseShuZXcgVmVjdG9yNChzY3JlZW5TaXplLngsIHNjcmVlblNpemUueSwgMCwgMCkpXHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coJ0Zsb2F0IC0+ICcsIGZsb2F0NClcclxuICAgIC8vIGNvbnNvbGUubG9nKCdEb3VibGUgLT4gJywgZG91YmxlNClcclxuXHJcbiAgICAvKiogUGl4ZWwgZGlmZmVyZW5jZSAqL1xyXG4gICAgcmV0dXJuIG5ldyBWZWN0b3IyKE1hdGguYWJzKGRvdWJsZTQueCAtIGZsb2F0NC54KSwgTWF0aC5hYnMoZG91YmxlNC55IC0gZmxvYXQ0LnkpKVxyXG4gIH1cclxuXHJcbiAgLyoqIE9ubHkgc3VwcG9ydHMgaW5kZXhlZCBnZW9tZXRyeSAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgY29tcHV0ZVZlcnRleE5vcm1hbHNCdWZmZXIoXHJcbiAgICBidWZmZXI6IG51bWJlcltdLFxyXG4gICAgcG9zaXRpb246IG51bWJlcltdLFxyXG4gICAgaW5kZXg6IG51bWJlcltdXHJcbiAgKSB7XHJcbiAgICBjb25zdCBwQSA9IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIHBCID0gbmV3IFZlY3RvcjMoKSxcclxuICAgICAgcEMgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBjb25zdCBuQSA9IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIG5CID0gbmV3IFZlY3RvcjMoKSxcclxuICAgICAgbkMgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBjb25zdCBjYiA9IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIGFiID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuICAgIC8vIGluZGV4ZWQgZWxlbWVudHNcclxuICAgIGZvciAobGV0IGkgPSAwLCBpbCA9IGluZGV4Lmxlbmd0aDsgaSA8IGlsOyBpICs9IDMpIHtcclxuICAgICAgY29uc3QgdkEgPSBpbmRleFtpICsgMF1cclxuICAgICAgY29uc3QgdkIgPSBpbmRleFtpICsgMV1cclxuICAgICAgY29uc3QgdkMgPSBpbmRleFtpICsgMl1cclxuXHJcbiAgICAgIHBBLmZyb21BcnJheShwb3NpdGlvbiwgdkEgKiAzKVxyXG4gICAgICBwQi5mcm9tQXJyYXkocG9zaXRpb24sIHZCICogMylcclxuICAgICAgcEMuZnJvbUFycmF5KHBvc2l0aW9uLCB2QyAqIDMpXHJcblxyXG4gICAgICBjYi5zdWJWZWN0b3JzKHBDLCBwQilcclxuICAgICAgYWIuc3ViVmVjdG9ycyhwQSwgcEIpXHJcbiAgICAgIGNiLmNyb3NzKGFiKVxyXG5cclxuICAgICAgbkEuZnJvbUFycmF5KGJ1ZmZlciwgdkEgKiAzKVxyXG4gICAgICBuQi5mcm9tQXJyYXkoYnVmZmVyLCB2QiAqIDMpXHJcbiAgICAgIG5DLmZyb21BcnJheShidWZmZXIsIHZDICogMylcclxuXHJcbiAgICAgIG5BLmFkZChjYilcclxuICAgICAgbkIuYWRkKGNiKVxyXG4gICAgICBuQy5hZGQoY2IpXHJcblxyXG4gICAgICBidWZmZXJbdkEgKiAzXSA9IG5BLnhcclxuICAgICAgYnVmZmVyW3ZBICogMyArIDFdID0gbkEueVxyXG4gICAgICBidWZmZXJbdkEgKiAzICsgMl0gPSBuQS56XHJcblxyXG4gICAgICBidWZmZXJbdkIgKiAzXSA9IG5CLnhcclxuICAgICAgYnVmZmVyW3ZCICogMyArIDFdID0gbkIueVxyXG4gICAgICBidWZmZXJbdkIgKiAzICsgMl0gPSBuQi56XHJcblxyXG4gICAgICBidWZmZXJbdkMgKiAzXSA9IG5DLnhcclxuICAgICAgYnVmZmVyW3ZDICogMyArIDFdID0gbkMueVxyXG4gICAgICBidWZmZXJbdkMgKiAzICsgMl0gPSBuQy56XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGNvbXB1dGVWZXJ0ZXhOb3JtYWxzQnVmZmVyVmlydHVhbChcclxuICAgIGJ1ZmZlcjogbnVtYmVyW10sXHJcbiAgICBwb3NpdGlvbjogQ2h1bmtBcnJheSxcclxuICAgIGluZGV4OiBDaHVua0FycmF5LFxyXG4gICAgZmxpcDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBwQSA9IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIHBCID0gbmV3IFZlY3RvcjMoKSxcclxuICAgICAgcEMgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBjb25zdCBuQSA9IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIG5CID0gbmV3IFZlY3RvcjMoKSxcclxuICAgICAgbkMgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBjb25zdCBjYiA9IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIGFiID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuICAgIC8vIGluZGV4ZWQgZWxlbWVudHNcclxuICAgIGZvciAobGV0IGkgPSAwLCBpbCA9IGluZGV4Lmxlbmd0aDsgaSA8IGlsOyBpICs9IDMpIHtcclxuICAgICAgY29uc3QgdkEgPSBpbmRleC5nZXQoaSArIDApXHJcbiAgICAgIGNvbnN0IHZCID0gaW5kZXguZ2V0KGkgKyAxKVxyXG4gICAgICBjb25zdCB2QyA9IGluZGV4LmdldChpICsgMilcclxuICAgICAgcEEuc2V0KHBvc2l0aW9uLmdldCh2QSAqIDMpLCBwb3NpdGlvbi5nZXQodkEgKiAzICsgMSksIHBvc2l0aW9uLmdldCh2QSAqIDMgKyAyKSlcclxuICAgICAgcEIuc2V0KHBvc2l0aW9uLmdldCh2QiAqIDMpLCBwb3NpdGlvbi5nZXQodkIgKiAzICsgMSksIHBvc2l0aW9uLmdldCh2QiAqIDMgKyAyKSlcclxuICAgICAgcEMuc2V0KHBvc2l0aW9uLmdldCh2QyAqIDMpLCBwb3NpdGlvbi5nZXQodkMgKiAzICsgMSksIHBvc2l0aW9uLmdldCh2QyAqIDMgKyAyKSlcclxuXHJcbiAgICAgIGNiLnN1YlZlY3RvcnMocEMsIHBCKVxyXG4gICAgICBhYi5zdWJWZWN0b3JzKHBBLCBwQilcclxuICAgICAgY2IuY3Jvc3MoYWIpXHJcblxyXG4gICAgICBuQS5mcm9tQXJyYXkoYnVmZmVyLCB2QSAqIDMpXHJcbiAgICAgIG5CLmZyb21BcnJheShidWZmZXIsIHZCICogMylcclxuICAgICAgbkMuZnJvbUFycmF5KGJ1ZmZlciwgdkMgKiAzKVxyXG5cclxuICAgICAgbkEuYWRkKGNiKVxyXG4gICAgICBuQi5hZGQoY2IpXHJcbiAgICAgIG5DLmFkZChjYilcclxuXHJcbiAgICAgIGlmIChmbGlwKSB7XHJcbiAgICAgICAgbkEubm9ybWFsaXplKClcclxuICAgICAgICBuQi5ub3JtYWxpemUoKVxyXG4gICAgICAgIG5DLm5vcm1hbGl6ZSgpXHJcblxyXG4gICAgICAgIG5BLm5lZ2F0ZSgpXHJcbiAgICAgICAgbkIubmVnYXRlKClcclxuICAgICAgICBuQy5uZWdhdGUoKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBidWZmZXJbdkEgKiAzXSA9IG5BLnhcclxuICAgICAgYnVmZmVyW3ZBICogMyArIDFdID0gbkEueVxyXG4gICAgICBidWZmZXJbdkEgKiAzICsgMl0gPSBuQS56XHJcblxyXG4gICAgICBidWZmZXJbdkIgKiAzXSA9IG5CLnhcclxuICAgICAgYnVmZmVyW3ZCICogMyArIDFdID0gbkIueVxyXG4gICAgICBidWZmZXJbdkIgKiAzICsgMl0gPSBuQi56XHJcblxyXG4gICAgICBidWZmZXJbdkMgKiAzXSA9IG5DLnhcclxuICAgICAgYnVmZmVyW3ZDICogMyArIDFdID0gbkMueVxyXG4gICAgICBidWZmZXJbdkMgKiAzICsgMl0gPSBuQy56XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDCr1xcXyjjg4QpXy/Cr1xyXG4gIHB1YmxpYyBzdGF0aWMgZmxpcE5vcm1hbHNCdWZmZXIoYnVmZmVyOiBGbG9hdDMyQXJyYXkpIHtcclxuICAgIGNvbnN0IHZlYzMgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGJ1ZmZlci5sZW5ndGg7IGsgKz0gMykge1xyXG4gICAgICB2ZWMzLnNldChidWZmZXJba10sIGJ1ZmZlcltrICsgMV0sIGJ1ZmZlcltrICsgMl0pXHJcbiAgICAgIHZlYzMubm9ybWFsaXplKClcclxuICAgICAgdmVjMy5uZWdhdGUoKVxyXG4gICAgICBidWZmZXJba10gPSB2ZWMzLnhcclxuICAgICAgYnVmZmVyW2sgKyAxXSA9IHZlYzMueVxyXG4gICAgICBidWZmZXJbayArIDJdID0gdmVjMy56XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGNvbXB1dGVWZXJ0ZXhOb3JtYWxzKFxyXG4gICAgYnVmZmVyOiBCdWZmZXJHZW9tZXRyeSxcclxuICAgIHBvc2l0aW9uczogRmxvYXQ2NEFycmF5IHwgRmxvYXQzMkFycmF5XHJcbiAgKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IGJ1ZmZlci5pbmRleFxyXG4gICAgY29uc3QgcG9zaXRpb25BdHRyaWJ1dGUgPSBidWZmZXIuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpXHJcblxyXG4gICAgaWYgKHBvc2l0aW9uQXR0cmlidXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgbGV0IG5vcm1hbEF0dHJpYnV0ZSA9IGJ1ZmZlci5nZXRBdHRyaWJ1dGUoJ25vcm1hbCcpXHJcblxyXG4gICAgICBpZiAobm9ybWFsQXR0cmlidXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBub3JtYWxBdHRyaWJ1dGUgPSBuZXcgQnVmZmVyQXR0cmlidXRlKFxyXG4gICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbkF0dHJpYnV0ZS5jb3VudCAqIDMpLFxyXG4gICAgICAgICAgM1xyXG4gICAgICAgIClcclxuICAgICAgICBidWZmZXIuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBub3JtYWxBdHRyaWJ1dGUpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gcmVzZXQgZXhpc3Rpbmcgbm9ybWFscyB0byB6ZXJvXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlsID0gbm9ybWFsQXR0cmlidXRlLmNvdW50OyBpIDwgaWw7IGkrKykge1xyXG4gICAgICAgICAgbm9ybWFsQXR0cmlidXRlLnNldFhZWihpLCAwLCAwLCAwKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcEEgPSBuZXcgVmVjdG9yMygpLFxyXG4gICAgICAgIHBCID0gbmV3IFZlY3RvcjMoKSxcclxuICAgICAgICBwQyA9IG5ldyBWZWN0b3IzKClcclxuICAgICAgY29uc3QgbkEgPSBuZXcgVmVjdG9yMygpLFxyXG4gICAgICAgIG5CID0gbmV3IFZlY3RvcjMoKSxcclxuICAgICAgICBuQyA9IG5ldyBWZWN0b3IzKClcclxuICAgICAgY29uc3QgY2IgPSBuZXcgVmVjdG9yMygpLFxyXG4gICAgICAgIGFiID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuICAgICAgLy8gaW5kZXhlZCBlbGVtZW50c1xyXG4gICAgICBpZiAoaW5kZXgpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWwgPSBpbmRleC5jb3VudDsgaSA8IGlsOyBpICs9IDMpIHtcclxuICAgICAgICAgIGNvbnN0IHZBID0gaW5kZXguZ2V0WChpICsgMClcclxuICAgICAgICAgIGNvbnN0IHZCID0gaW5kZXguZ2V0WChpICsgMSlcclxuICAgICAgICAgIGNvbnN0IHZDID0gaW5kZXguZ2V0WChpICsgMilcclxuXHJcbiAgICAgICAgICBwQS5mcm9tQXJyYXkocG9zaXRpb25zLCB2QSAqIDMpXHJcbiAgICAgICAgICBwQi5mcm9tQXJyYXkocG9zaXRpb25zLCB2QiAqIDMpXHJcbiAgICAgICAgICBwQy5mcm9tQXJyYXkocG9zaXRpb25zLCB2QyAqIDMpXHJcblxyXG4gICAgICAgICAgY2Iuc3ViVmVjdG9ycyhwQywgcEIpXHJcbiAgICAgICAgICBhYi5zdWJWZWN0b3JzKHBBLCBwQilcclxuICAgICAgICAgIGNiLmNyb3NzKGFiKVxyXG5cclxuICAgICAgICAgIG5BLmZyb21CdWZmZXJBdHRyaWJ1dGUobm9ybWFsQXR0cmlidXRlLCB2QSlcclxuICAgICAgICAgIG5CLmZyb21CdWZmZXJBdHRyaWJ1dGUobm9ybWFsQXR0cmlidXRlLCB2QilcclxuICAgICAgICAgIG5DLmZyb21CdWZmZXJBdHRyaWJ1dGUobm9ybWFsQXR0cmlidXRlLCB2QylcclxuXHJcbiAgICAgICAgICBuQS5hZGQoY2IpXHJcbiAgICAgICAgICBuQi5hZGQoY2IpXHJcbiAgICAgICAgICBuQy5hZGQoY2IpXHJcblxyXG4gICAgICAgICAgbm9ybWFsQXR0cmlidXRlLnNldFhZWih2QSwgbkEueCwgbkEueSwgbkEueilcclxuICAgICAgICAgIG5vcm1hbEF0dHJpYnV0ZS5zZXRYWVoodkIsIG5CLngsIG5CLnksIG5CLnopXHJcbiAgICAgICAgICBub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKHZDLCBuQy54LCBuQy55LCBuQy56KVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBub24taW5kZXhlZCBlbGVtZW50cyAodW5jb25uZWN0ZWQgdHJpYW5nbGUgc291cClcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlsID0gcG9zaXRpb25BdHRyaWJ1dGUuY291bnQ7IGkgPCBpbDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAvKiogVGhpcyBpcyBkb25lIGJsaW5kLiBEb24ndCB0aGluayBzcGVja2xlIHN1cHBvcnRzIG5vbi1pbmRleGVkIGdlb21ldHJ5ICovXHJcbiAgICAgICAgICBwQS5mcm9tQXJyYXkocG9zaXRpb25zLCBpICogMylcclxuICAgICAgICAgIHBCLmZyb21BcnJheShwb3NpdGlvbnMsIGkgKiAzICsgMSlcclxuICAgICAgICAgIHBDLmZyb21BcnJheShwb3NpdGlvbnMsIGkgKiAzICsgMilcclxuXHJcbiAgICAgICAgICBjYi5zdWJWZWN0b3JzKHBDLCBwQilcclxuICAgICAgICAgIGFiLnN1YlZlY3RvcnMocEEsIHBCKVxyXG4gICAgICAgICAgY2IuY3Jvc3MoYWIpXHJcblxyXG4gICAgICAgICAgbm9ybWFsQXR0cmlidXRlLnNldFhZWihpICsgMCwgY2IueCwgY2IueSwgY2IueilcclxuICAgICAgICAgIG5vcm1hbEF0dHJpYnV0ZS5zZXRYWVooaSArIDEsIGNiLngsIGNiLnksIGNiLnopXHJcbiAgICAgICAgICBub3JtYWxBdHRyaWJ1dGUuc2V0WFlaKGkgKyAyLCBjYi54LCBjYi55LCBjYi56KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgYnVmZmVyLm5vcm1hbGl6ZU5vcm1hbHMoKVxyXG5cclxuICAgICAgbm9ybWFsQXR0cmlidXRlLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyB0cmlhbmd1bGF0ZVBvbHlnb24ocG9pbnRzOiBWZWN0b3IyW10pOiBudW1iZXJbXSB7XHJcbiAgICBjb25zdCBmbGF0QXJyYXkgPSBuZXcgQXJyYXk8bnVtYmVyPihwb2ludHMubGVuZ3RoICogMilcclxuICAgIHBvaW50cy5mb3JFYWNoKChwb2ludDogVmVjdG9yMiwgaW5kZXgpID0+IHBvaW50LnRvQXJyYXkoZmxhdEFycmF5LCBpbmRleCAqIDIpKVxyXG5cclxuICAgIHJldHVybiBlYXJjdXQoZmxhdEFycmF5KVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgQ29sb3IsXHJcbiAgRHluYW1pY0RyYXdVc2FnZSxcclxuICBJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcixcclxuICBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSxcclxuICBNYXRlcmlhbCxcclxuICBPYmplY3QzRCxcclxuICBWZWN0b3I0LFxyXG4gIFdlYkdMUmVuZGVyZXJcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgTGluZVNlZ21lbnRzMiB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9saW5lcy9MaW5lU2VnbWVudHMyLmpzJ1xyXG5pbXBvcnQgeyBMaW5lU2VnbWVudHNHZW9tZXRyeSB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9saW5lcy9MaW5lU2VnbWVudHNHZW9tZXRyeS5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICcuLi9jb252ZXJ0ZXIvR2VvbWV0cnkuanMnXHJcbmltcG9ydCBTcGVja2xlTGluZU1hdGVyaWFsIGZyb20gJy4uL21hdGVyaWFscy9TcGVja2xlTGluZU1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBOb2RlUmVuZGVyVmlldyB9IGZyb20gJy4uL3RyZWUvTm9kZVJlbmRlclZpZXcuanMnXHJcbmltcG9ydCB7XHJcbiAgQWxsQmF0Y2hVcGRhdGVSYW5nZSxcclxuICB0eXBlIEJhdGNoLFxyXG4gIHR5cGUgQmF0Y2hVcGRhdGVSYW5nZSxcclxuICBEcmF3R3JvdXAsXHJcbiAgR2VvbWV0cnlUeXBlLFxyXG4gIGlzQWxsQmF0Y2hVcGRhdGVSYW5nZSxcclxuICBpc05vbmVCYXRjaFVwZGF0ZVJhbmdlLFxyXG4gIE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbn0gZnJvbSAnLi9CYXRjaC5qcydcclxuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IE1hdGVyaWFscyBmcm9tICcuLi9tYXRlcmlhbHMvTWF0ZXJpYWxzLmpzJ1xyXG5pbXBvcnQgeyBDaHVua0FycmF5IH0gZnJvbSAnLi4vY29udmVydGVyL1ZpcnR1YWxBcnJheS5qcydcclxuXHJcbmNvbnN0IHZlYzRCdWZmZXIgPSBuZXcgVmVjdG9yNCgpXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW5lQmF0Y2ggaW1wbGVtZW50cyBCYXRjaCB7XHJcbiAgcHVibGljIGlkOiBzdHJpbmdcclxuICBwdWJsaWMgc3VidHJlZUlkOiBzdHJpbmdcclxuICBwdWJsaWMgcmVuZGVyVmlld3M6IE5vZGVSZW5kZXJWaWV3W11cclxuICBwcm90ZWN0ZWQgZ2VvbWV0cnk6IExpbmVTZWdtZW50c0dlb21ldHJ5XHJcbiAgcHVibGljIGJhdGNoTWF0ZXJpYWw6IFNwZWNrbGVMaW5lTWF0ZXJpYWxcclxuICBwcm90ZWN0ZWQgYmF0Y2hUcmFuc3BhcmVudDogYm9vbGVhblxyXG4gIHByb3RlY3RlZCBiYXRjaE9wYWNpdHk6IG51bWJlclxyXG4gIHByb3RlY3RlZCBtZXNoOiBMaW5lU2VnbWVudHMyXHJcbiAgcHVibGljIGNvbG9yQnVmZmVyOiBJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlclxyXG5cclxuICBwcm90ZWN0ZWQgdmlzaWJpbGl0eVJhbmdlczogeyBbb2Zmc2V0OiBudW1iZXJdOiBib29sZWFuIH0gPSB7fVxyXG5cclxuICBwdWJsaWMgZ2V0IGJvdW5kcygpOiBCb3gzIHtcclxuICAgIGlmICghdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCkgdGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKVxyXG4gICAgcmV0dXJuIHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdCb3ggPyB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94IDogbmV3IEJveDMoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkcmF3Q2FsbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAxXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1pbkRyYXdDYWxscygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDFcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdHJpQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZlcnRDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCAqIHRoaXMuZ2VvbWV0cnkuaW5zdGFuY2VDb3VudFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHN1YnRyZWVJZDogc3RyaW5nLCByZW5kZXJWaWV3czogTm9kZVJlbmRlclZpZXdbXSkge1xyXG4gICAgdGhpcy5pZCA9IGlkXHJcbiAgICB0aGlzLnN1YnRyZWVJZCA9IHN1YnRyZWVJZFxyXG4gICAgdGhpcy5yZW5kZXJWaWV3cyA9IHJlbmRlclZpZXdzXHJcbiAgfVxyXG5cclxuICBnZXQgZ3JvdXBzKCk6IERyYXdHcm91cFtdIHtcclxuICAgIHJldHVybiBbXVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwb2ludENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMFxyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxpbmVDb3VudCgpOiBudW1iZXIge1xyXG4gICAgLyoqIENhdGVyaW5nIHRvIHR5cGVzY3JpcHRcclxuICAgICAqIFRoZXJlIGlzIG5vIHVubml2ZXJzZSB3aGVyZSB0aGUgZ2VvbWV0cnkgaXMgbm9uLWluZGV4ZWQuIExpbmVTZWdtZW50czIgYXJlICoqZXhwbGljaXRseSoqIGluZGV4ZWRcclxuICAgICAqL1xyXG4gICAgY29uc3QgaW5kZXhDb3VudCA9IHRoaXMuZ2VvbWV0cnkuaW5kZXggPyB0aGlzLmdlb21ldHJ5LmluZGV4LmNvdW50IDogMFxyXG4gICAgcmV0dXJuIChpbmRleENvdW50IC8gMykgKiAodGhpcy5nZW9tZXRyeSBhcyBuZXZlcilbJ19tYXhJbnN0YW5jZUNvdW50J11cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVuZGVyT2JqZWN0KCk6IE9iamVjdDNEIHtcclxuICAgIHJldHVybiB0aGlzLm1lc2hcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2VvbWV0cnlUeXBlKCk6IEdlb21ldHJ5VHlwZSB7XHJcbiAgICByZXR1cm4gR2VvbWV0cnlUeXBlLkxJTkVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWF0ZXJpYWxzKCk6IE1hdGVyaWFsW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubWVzaC5tYXRlcmlhbCBhcyB1bmtub3duIGFzIE1hdGVyaWFsW11cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5pbnN0YW5jZVN0YXJ0LmFycmF5Lmxlbmd0aCAvIDZcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRCYXRjaE1hdGVyaWFsKG1hdGVyaWFsOiBTcGVja2xlTGluZU1hdGVyaWFsKSB7XHJcbiAgICB0aGlzLmJhdGNoTWF0ZXJpYWwgPSBtYXRlcmlhbFxyXG4gICAgLyoqIE5vdCBhIGZhbiBvZiB0aGlzIDooICovXHJcbiAgICB0aGlzLmJhdGNoVHJhbnNwYXJlbnQgPSBtYXRlcmlhbC50cmFuc3BhcmVudFxyXG4gICAgdGhpcy5iYXRjaE9wYWNpdHkgPSBtYXRlcmlhbC5vcGFjaXR5XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25VcGRhdGUoZGVsdGFUaW1lOiBudW1iZXIpIHtcclxuICAgIGRlbHRhVGltZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVuZGVyKHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyKSB7XHJcbiAgICByZW5kZXJlci5nZXREcmF3aW5nQnVmZmVyU2l6ZSh0aGlzLmJhdGNoTWF0ZXJpYWwucmVzb2x1dGlvbilcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlUmFuZ2UocmFuZ2VzOiBCYXRjaFVwZGF0ZVJhbmdlW10pIHtcclxuICAgIGlmIChyYW5nZXMubGVuZ3RoID09PSAxICYmIGlzTm9uZUJhdGNoVXBkYXRlUmFuZ2UocmFuZ2VzWzBdKSkge1xyXG4gICAgICB0aGlzLm1lc2gudmlzaWJsZSA9IGZhbHNlXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyYW5nZXMubGVuZ3RoID09PSAxICYmIGlzQWxsQmF0Y2hVcGRhdGVSYW5nZShyYW5nZXNbMF0sIHRoaXMuZ2V0Q291bnQoKSkpIHtcclxuICAgICAgdGhpcy5tZXNoLnZpc2libGUgPSB0cnVlXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWVzaC52aXNpYmxlID0gdHJ1ZVxyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY29sb3JCdWZmZXIuYXJyYXkgYXMgbnVtYmVyW11cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZGF0YS5sZW5ndGg7IGsgKz0gNCkge1xyXG4gICAgICBkYXRhW2sgKyAzXSA9IDBcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0ID0gcmFuZ2VzW2ldLm9mZnNldCAqIHRoaXMuY29sb3JCdWZmZXIuc3RyaWRlXHJcbiAgICAgIGNvbnN0IGxlbiA9XHJcbiAgICAgICAgcmFuZ2VzW2ldLm9mZnNldCAqIHRoaXMuY29sb3JCdWZmZXIuc3RyaWRlICtcclxuICAgICAgICByYW5nZXNbaV0uY291bnQgKiB0aGlzLmNvbG9yQnVmZmVyLnN0cmlkZVxyXG4gICAgICBmb3IgKGxldCBrID0gc3RhcnQ7IGsgPCBsZW47IGsgKz0gNCkge1xyXG4gICAgICAgIGRhdGFbayArIDNdID0gMVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb2xvckJ1ZmZlci51cGRhdGVSYW5nZSA9IHsgb2Zmc2V0OiAwLCBjb3VudDogZGF0YS5sZW5ndGggfVxyXG4gICAgdGhpcy5jb2xvckJ1ZmZlci5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VDb2xvclN0YXJ0J10ubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2luc3RhbmNlQ29sb3JFbmQnXS5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIC8qKiBMaW5lIGJhdGNoZXMgZG8gbm90IHNvcnQgdGhlaXIgcmFuZ2VzLiBUaGlzIG1lYW5zIHdlIGNhbiBoYXZlIGhpZGRlbi90cmFuc3BhcmVudCBvYmplY3RzIGFueXdoZXJlIGluc2lkZSB0aGUgYmF0Y2guXHJcbiAgICovXHJcbiAgcHVibGljIGdldFZpc2libGVSYW5nZSgpIHtcclxuICAgIGlmICghdGhpcy5tZXNoLnZpc2libGUpIHJldHVybiBOb25lQmF0Y2hVcGRhdGVSYW5nZVxyXG4gICAgcmV0dXJuIEFsbEJhdGNoVXBkYXRlUmFuZ2VcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPcGFxdWUoKTogQmF0Y2hVcGRhdGVSYW5nZSB7XHJcbiAgICBpZiAoTWF0ZXJpYWxzLmlzT3BhcXVlKHRoaXMuYmF0Y2hNYXRlcmlhbCkpIHJldHVybiBBbGxCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgICByZXR1cm4gTm9uZUJhdGNoVXBkYXRlUmFuZ2VcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREZXB0aCgpOiBCYXRjaFVwZGF0ZVJhbmdlIHtcclxuICAgIHJldHVybiB0aGlzLmdldE9wYXF1ZSgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VHJhbnNwYXJlbnQoKTogQmF0Y2hVcGRhdGVSYW5nZSB7XHJcbiAgICBpZiAoTWF0ZXJpYWxzLmlzVHJhbnNwYXJlbnQodGhpcy5iYXRjaE1hdGVyaWFsKSkgcmV0dXJuIEFsbEJhdGNoVXBkYXRlUmFuZ2VcclxuICAgIHJldHVybiBOb25lQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFN0ZW5jaWwoKTogQmF0Y2hVcGRhdGVSYW5nZSB7XHJcbiAgICBpZiAodGhpcy5iYXRjaE1hdGVyaWFsLnN0ZW5jaWxXcml0ZSA9PT0gdHJ1ZSkgcmV0dXJuIEFsbEJhdGNoVXBkYXRlUmFuZ2VcclxuICAgIHJldHVybiBOb25lQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIH1cclxuXHJcbiAgLyoqIFJlbWluZGVyIGhlcmUgdGhhdCBsaW5lIGJhdGNoZXMgZG8gbm90IHJlYWxseSBjaGFuZ2UgbWF0ZXJpYWxzLCBqdXN0IHRoZSBjb2xvciBidWZmZXIgY2hhbmdlcyAqL1xyXG4gIHB1YmxpYyBzZXRCYXRjaEJ1ZmZlcnMocmFuZ2VzOiBCYXRjaFVwZGF0ZVJhbmdlW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNvbG9yQnVmZmVyLmFycmF5IGFzIG51bWJlcltdXHJcbiAgICAvKiogUmVzZXQgdHJhbnNwYXJlbmN5ICovXHJcbiAgICB0aGlzLmJhdGNoTWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0aGlzLmJhdGNoVHJhbnNwYXJlbnRcclxuICAgIHRoaXMuYmF0Y2hNYXRlcmlhbC5vcGFjaXR5ID0gdGhpcy5iYXRjaE9wYWNpdHlcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHJhbmdlc1tpXS5tYXRlcmlhbCBhcyBTcGVja2xlTGluZU1hdGVyaWFsXHJcbiAgICAgIGNvbnN0IG1hdGVyaWFsT3B0aW9ucyA9IHJhbmdlc1tpXS5tYXRlcmlhbE9wdGlvbnNcclxuICAgICAgY29uc3QgY29sb3I6IENvbG9yID1cclxuICAgICAgICBtYXRlcmlhbE9wdGlvbnMgJiYgbWF0ZXJpYWxPcHRpb25zLnJhbXBJbmRleENvbG9yXHJcbiAgICAgICAgICA/IG1hdGVyaWFsT3B0aW9ucy5yYW1wSW5kZXhDb2xvclxyXG4gICAgICAgICAgOiBtYXRlcmlhbC5jb2xvclxyXG4gICAgICBjb25zdCBhbHBoYTogbnVtYmVyID0gbWF0ZXJpYWwudmlzaWJsZSA/IG1hdGVyaWFsLm9wYWNpdHkgOiAwXHJcbiAgICAgIHRoaXMuYmF0Y2hNYXRlcmlhbC50cmFuc3BhcmVudCB8fD0gbWF0ZXJpYWwub3BhY2l0eSA8IDFcclxuICAgICAgdGhpcy5iYXRjaE1hdGVyaWFsLm9wYWNpdHkgPSBNYXRoLm1pbihcclxuICAgICAgICB0aGlzLmJhdGNoTWF0ZXJpYWwub3BhY2l0eSxcclxuICAgICAgICBtYXRlcmlhbC5vcGFjaXR5XHJcbiAgICAgIClcclxuICAgICAgY29uc3Qgc3RhcnQgPSByYW5nZXNbaV0ub2Zmc2V0ICogdGhpcy5jb2xvckJ1ZmZlci5zdHJpZGVcclxuICAgICAgY29uc3QgbGVuID1cclxuICAgICAgICByYW5nZXNbaV0ub2Zmc2V0ICogdGhpcy5jb2xvckJ1ZmZlci5zdHJpZGUgK1xyXG4gICAgICAgIHJhbmdlc1tpXS5jb3VudCAqIHRoaXMuY29sb3JCdWZmZXIuc3RyaWRlXHJcblxyXG4gICAgICB2ZWM0QnVmZmVyLnNldChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBhbHBoYSlcclxuICAgICAgdGhpcy51cGRhdGVDb2xvckJ1ZmZlcihcclxuICAgICAgICBzdGFydCxcclxuICAgICAgICByYW5nZXNbaV0uY291bnQgPT09IEluZmluaXR5ID8gdGhpcy5jb2xvckJ1ZmZlci5hcnJheS5sZW5ndGggOiBsZW4sXHJcbiAgICAgICAgdmVjNEJ1ZmZlclxyXG4gICAgICApXHJcbiAgICAgIHRoaXMudmlzaWJpbGl0eVJhbmdlc1tyYW5nZXNbaV0ub2Zmc2V0XSA9IG1hdGVyaWFsLnZpc2libGVcclxuICAgIH1cclxuICAgIHRoaXMuY29sb3JCdWZmZXIudXBkYXRlUmFuZ2UgPSB7IG9mZnNldDogMCwgY291bnQ6IGRhdGEubGVuZ3RoIH1cclxuICAgIHRoaXMuY29sb3JCdWZmZXIubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2luc3RhbmNlQ29sb3JTdGFydCddLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZUNvbG9yRW5kJ10ubmVlZHNVcGRhdGUgPSB0cnVlXHJcblxyXG4gICAgY29uc3QgdmlzaWJpbGl0eSA9IE9iamVjdC52YWx1ZXModGhpcy52aXNpYmlsaXR5UmFuZ2VzKVxyXG4gICAgbGV0IGFueVZpc2libGUgPSBmYWxzZVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB2aXNpYmlsaXR5Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGFueVZpc2libGUgfHw9IHZpc2liaWxpdHlba11cclxuICAgIH1cclxuICAgIGlmIChhbnlWaXNpYmxlKSB0aGlzLnNldFZpc2libGVSYW5nZShbQWxsQmF0Y2hVcGRhdGVSYW5nZV0pXHJcbiAgICBlbHNlIHRoaXMuc2V0VmlzaWJsZVJhbmdlKFtOb25lQmF0Y2hVcGRhdGVSYW5nZV0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RHJhd1JhbmdlcyhyYW5nZXM6IEJhdGNoVXBkYXRlUmFuZ2VbXSkge1xyXG4gICAgdGhpcy5zZXRCYXRjaEJ1ZmZlcnMocmFuZ2VzKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0RHJhd1JhbmdlcygpIHtcclxuICAgIHRoaXMuc2V0RHJhd1JhbmdlcyhbXHJcbiAgICAgIHtcclxuICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgY291bnQ6IHRoaXMuZ2V0Q291bnQoKSxcclxuICAgICAgICBtYXRlcmlhbDogdGhpcy5iYXRjaE1hdGVyaWFsXHJcbiAgICAgIH1cclxuICAgIF0pXHJcblxyXG4gICAgdGhpcy5tZXNoLm1hdGVyaWFsID0gdGhpcy5iYXRjaE1hdGVyaWFsXHJcbiAgICB0aGlzLm1lc2gudmlzaWJsZSA9IHRydWVcclxuICAgIHRoaXMuYmF0Y2hNYXRlcmlhbC50cmFuc3BhcmVudCA9IHRoaXMuYmF0Y2hUcmFuc3BhcmVudFxyXG4gICAgdGhpcy5iYXRjaE1hdGVyaWFsLm9wYWNpdHkgPSB0aGlzLmJhdGNoT3BhY2l0eVxyXG4gICAgdGhpcy52aXNpYmlsaXR5UmFuZ2VzID0geyAwOiB0aGlzLmJhdGNoTWF0ZXJpYWwudmlzaWJsZSB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYnVpbGRCYXRjaCgpIHtcclxuICAgIGxldCBhdHRyaWJ1dGVDb3VudCA9IDBcclxuICAgIGNvbnN0IHJ2QUFCQjogQm94MyA9IG5ldyBCb3gzKClcclxuICAgIGNvbnN0IGJvdW5kcyA9IG5ldyBCb3gzKClcclxuICAgIHRoaXMucmVuZGVyVmlld3MuZm9yRWFjaCgodmFsOiBOb2RlUmVuZGVyVmlldykgPT4ge1xyXG4gICAgICBpZiAoIXZhbC5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBidWlsZCBiYXRjaCAke3RoaXMuaWR9LiBJbnZhbGlkIGdlb21ldHJ5YClcclxuICAgICAgfVxyXG4gICAgICBhdHRyaWJ1dGVDb3VudCArPSB2YWwubmVlZHNTZWdtZW50Q29udmVyc2lvblxyXG4gICAgICAgID8gKHZhbC5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMuUE9TSVRJT04ubGVuZ3RoIC0gMykgKiAyXHJcbiAgICAgICAgOiB2YWwucmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzLlBPU0lUSU9OLmxlbmd0aFxyXG4gICAgICBib3VuZHMudW5pb24odmFsLmFhYmIpXHJcbiAgICB9KVxyXG4gICAgY29uc3QgbmVlZHNSVEUgPSBHZW9tZXRyeS5uZWVkc1JURShib3VuZHMpXHJcblxyXG4gICAgY29uc3QgcG9zaXRpb24gPSBuZWVkc1JURVxyXG4gICAgICA/IG5ldyBGbG9hdDY0QXJyYXkoYXR0cmlidXRlQ291bnQpXHJcbiAgICAgIDogbmV3IEZsb2F0MzJBcnJheShhdHRyaWJ1dGVDb3VudClcclxuICAgIGxldCBvZmZzZXQgPSAwXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMucmVuZGVyVmlld3MubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLnJlbmRlclZpZXdzW2tdLnJlbmRlckRhdGEuZ2VvbWV0cnlcclxuICAgICAgaWYgKCFnZW9tZXRyeS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYnVpbGQgYmF0Y2ggJHt0aGlzLmlkfS4gSW52YWxpZCBnZW9tZXRyeWApXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHBvaW50czogQXJyYXk8bnVtYmVyPiB8IENodW5rQXJyYXlcclxuICAgICAgLyoqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBsaW5lIGdlb21ldHJ5IGhhcyBhIGxheW91dCBvZiA6XHJcbiAgICAgICAqICBzdGFydCh4LHkseiksIGVuZCh4LHkseiksIHN0YXJ0KHgseSx6KSwgZW5kKHgseSx6KS4uLiBldGNcclxuICAgICAgICogIFNvbWUgZ2VvbWV0cmllcyBoYXZlIHRoYXQgaW5oZXJlbnQgZm9ybSwgc29tZSBkb24ndFxyXG4gICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMucmVuZGVyVmlld3Nba10ubmVlZHNTZWdtZW50Q29udmVyc2lvbikge1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuUE9TSVRJT04ubGVuZ3RoIC0gM1xyXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheSgyICogbGVuZ3RoKVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgICAgICBwb2ludHNbMiAqIGldID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5nZXQoaSlcclxuICAgICAgICAgIHBvaW50c1syICogaSArIDFdID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5nZXQoaSArIDEpXHJcbiAgICAgICAgICBwb2ludHNbMiAqIGkgKyAyXSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuUE9TSVRJT04uZ2V0KGkgKyAyKVxyXG5cclxuICAgICAgICAgIHBvaW50c1syICogaSArIDNdID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5nZXQoaSArIDMpXHJcbiAgICAgICAgICBwb2ludHNbMiAqIGkgKyA0XSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuUE9TSVRJT04uZ2V0KGkgKyA0KVxyXG4gICAgICAgICAgcG9pbnRzWzIgKiBpICsgNV0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLlBPU0lUSU9OLmdldChpICsgNSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9zaXRpb24uc2V0KHBvaW50cywgb2Zmc2V0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBvaW50cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuUE9TSVRJT05cclxuICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLlBPU0lUSU9OLmNvcHlUb0J1ZmZlcihwb3NpdGlvbiwgb2Zmc2V0KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwb3NpdGlvblN1YkFycmF5ID0gcG9zaXRpb24uc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBwb2ludHMubGVuZ3RoKVxyXG4gICAgICBHZW9tZXRyeS50cmFuc2Zvcm1BcnJheShwb3NpdGlvblN1YkFycmF5LCBnZW9tZXRyeS50cmFuc2Zvcm0sIDAsIHBvaW50cy5sZW5ndGgpXHJcbiAgICAgIC8qKiBXZSByZS1jb21wdXRlIHRoZSByZW5kZXIgdmlldyBhYWJiIGJhc2VkIG9uIHRyYW5zZm9ybWVkIGdlb21ldHJ5XHJcbiAgICAgICAqICBXZSBkbyB0aGlzIGJlY2F1c2Ugc29tZSB0cmFuc2Zvcm1zIGxpa2Ugbm9uLXVuaWZvcm0gc2NhbGluZyBjYW4gcHJvZHVjZSBpbmNvcnJlY3QgcmVzdWx0c1xyXG4gICAgICAgKiAgaWYgd2UgY29tcHV0ZSBhbiBhYWJiIGZyb20gb3JpZ2luYWwgZ2VvbWV0cnkgdGhlbiBhcHBseSB0aGUgdHJhbnNmb3JtLiBUaGF0J3Mgd2h5IHdlIGNvbXB1dGVcclxuICAgICAgICogIGFuIGFhYmIgZnJvbSB0aGUgdHJhbnNmb3JtZWQgZ2VvbWV0cnkgaGVyZSBhbmQgc2V0IGl0IGluIHRoZSBydlxyXG4gICAgICAgKi9cclxuICAgICAgcnZBQUJCLnNldEZyb21BcnJheShwb3NpdGlvblN1YkFycmF5KVxyXG4gICAgICB0aGlzLnJlbmRlclZpZXdzW2tdLmFhYmIgPSBydkFBQkJcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3Nba10uc2V0QmF0Y2hEYXRhKHRoaXMuaWQsIG9mZnNldCAvIDYsIHBvaW50cy5sZW5ndGggLyA2KVxyXG5cclxuICAgICAgb2Zmc2V0ICs9IHBvaW50cy5sZW5ndGhcclxuICAgIH1cclxuICAgIHRoaXMuZ2VvbWV0cnkgPSB0aGlzLm1ha2VMaW5lR2VvbWV0cnkocG9zaXRpb24pXHJcbiAgICBpZiAoR2VvbWV0cnkubmVlZHNSVEUoYm91bmRzKSkge1xyXG4gICAgICBHZW9tZXRyeS51cGRhdGVSVEVHZW9tZXRyeSh0aGlzLmdlb21ldHJ5LCBwb3NpdGlvbilcclxuICAgICAgdGhpcy5iYXRjaE1hdGVyaWFsLmRlZmluZXNbJ1VTRV9SVEUnXSA9ICcgJ1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWVzaCA9IG5ldyBMaW5lU2VnbWVudHMyKHRoaXMuZ2VvbWV0cnksIHRoaXMuYmF0Y2hNYXRlcmlhbClcclxuICAgIHRoaXMubWVzaC5jb21wdXRlTGluZURpc3RhbmNlcygpXHJcbiAgICB0aGlzLm1lc2guc2NhbGUuc2V0KDEsIDEsIDEpXHJcblxyXG4gICAgdGhpcy5tZXNoLnV1aWQgPSB0aGlzLmlkXHJcbiAgICB0aGlzLm1lc2gubGF5ZXJzLnNldChPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTElORSlcclxuXHJcbiAgICB0aGlzLnZpc2liaWxpdHlSYW5nZXMgPSB7IDA6IHRoaXMuYmF0Y2hNYXRlcmlhbC52aXNpYmxlIH1cclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJWaWV3KGluZGV4OiBudW1iZXIpOiBOb2RlUmVuZGVyVmlldyB8IG51bGwge1xyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBpbmRleCA+PSB0aGlzLnJlbmRlclZpZXdzW2tdLmJhdGNoU3RhcnQgJiZcclxuICAgICAgICBpbmRleCA8IHRoaXMucmVuZGVyVmlld3Nba10uYmF0Y2hFbmQgJiZcclxuICAgICAgICAvKiogQSBiaXQgY2hlYXR5LCBidXQgb2sgZm9yIG5vdyAqL1xyXG4gICAgICAgIHRoaXMuY29sb3JCdWZmZXIuYXJyYXlbaW5kZXggKiB0aGlzLmNvbG9yQnVmZmVyLnN0cmlkZSArIDNdICE9PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclZpZXdzW2tdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TWF0ZXJpYWxBdEluZGV4KGluZGV4OiBudW1iZXIpOiBNYXRlcmlhbCB7XHJcbiAgICBpbmRleFxyXG4gICAgcmV0dXJuIHRoaXMuYmF0Y2hNYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgLyoqIFRPRE86IEkgd2lzaCB3ZSB3b3VsZG4ndCBjbG9uZSB0aGUgbWF0ZXJpYWwgaGVyZS4uLiAgKi9cclxuICBwdWJsaWMgZ2V0TWF0ZXJpYWwocnY6IE5vZGVSZW5kZXJWaWV3KTogTWF0ZXJpYWwge1xyXG4gICAgY29uc3Qgc3RhcnQgPSBydi5iYXRjaFN0YXJ0ICogdGhpcy5jb2xvckJ1ZmZlci5zdHJpZGVcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNvbG9yQnVmZmVyLmFycmF5IGFzIG51bWJlcltdXHJcbiAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMuYmF0Y2hNYXRlcmlhbC5jbG9uZSgpXHJcbiAgICBtYXRlcmlhbC5jb2xvci5zZXRSR0IoZGF0YVtzdGFydF0sIGRhdGFbc3RhcnQgKyAxXSwgZGF0YVtzdGFydCArIDJdKVxyXG4gICAgbWF0ZXJpYWwub3BhY2l0eSA9IGRhdGFbc3RhcnQgKyAzXVxyXG4gICAgcmV0dXJuIG1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VMaW5lR2VvbWV0cnkoXHJcbiAgICBwb3NpdGlvbjogRmxvYXQ2NEFycmF5IHwgRmxvYXQzMkFycmF5XHJcbiAgKTogTGluZVNlZ21lbnRzR2VvbWV0cnkge1xyXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgTGluZVNlZ21lbnRzR2VvbWV0cnkoKVxyXG4gICAgLyoqIFRoaXMgd2lsbCBzZXQgdGhlIGluc3RhbmNlU3RhcnQgYW5kIGluc3RhbmNlRW5kIGF0dHJpYnV0ZXMuIFRoZXNlIHdpbGwgYmUgb3VyIGhpZ2ggcGFydHMgKi9cclxuICAgIGlmIChwb3NpdGlvbiBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSlcclxuICAgICAgLyoqIFdlIG5lZWQgdG8gcmUtYWxsb2NhdGUgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gY2FzdCBpdCBkb3duIHRvIGZsb2F0MzIuIElmIHdlIHBhc3MgaW4gYSBGbG9hdDY0QXJyYXksIHRocmVlLmpzIHdpbGwgZG8gaXQgYW55d2F5ICovXHJcbiAgICAgIGdlb21ldHJ5LnNldFBvc2l0aW9ucyhuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9uKSlcclxuICAgIGVsc2UgZ2VvbWV0cnkuc2V0UG9zaXRpb25zKHBvc2l0aW9uKVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb24ubGVuZ3RoICsgcG9zaXRpb24ubGVuZ3RoIC8gMylcclxuICAgIHRoaXMuY29sb3JCdWZmZXIgPSBuZXcgSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIoYnVmZmVyLCA4LCAxKSAvLyByZ2JhLCByZ2JhXHJcbiAgICB0aGlzLmNvbG9yQnVmZmVyLnNldFVzYWdlKER5bmFtaWNEcmF3VXNhZ2UpXHJcbiAgICB0aGlzLnVwZGF0ZUNvbG9yQnVmZmVyKFxyXG4gICAgICAwLFxyXG4gICAgICBidWZmZXIubGVuZ3RoLFxyXG4gICAgICBuZXcgVmVjdG9yNChcclxuICAgICAgICB0aGlzLmJhdGNoTWF0ZXJpYWwuY29sb3IucixcclxuICAgICAgICB0aGlzLmJhdGNoTWF0ZXJpYWwuY29sb3IuZyxcclxuICAgICAgICB0aGlzLmJhdGNoTWF0ZXJpYWwuY29sb3IuYixcclxuICAgICAgICAxXHJcbiAgICAgIClcclxuICAgIClcclxuICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2luc3RhbmNlQ29sb3JTdGFydCcsXHJcbiAgICAgIG5ldyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSh0aGlzLmNvbG9yQnVmZmVyLCA0LCAwKVxyXG4gICAgKSAvLyByZ2JcclxuICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2luc3RhbmNlQ29sb3JFbmQnLFxyXG4gICAgICBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUodGhpcy5jb2xvckJ1ZmZlciwgNCwgNClcclxuICAgICkgLy8gcmdiXHJcbiAgICBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKVxyXG4gICAgcmV0dXJuIGdlb21ldHJ5XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbG9yQnVmZmVyKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBjb2xvcjogVmVjdG9yNCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY29sb3JCdWZmZXIuYXJyYXkgYXMgbnVtYmVyW11cclxuICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA8IGVuZDsgayArPSA0KSB7XHJcbiAgICAgIGRhdGFba10gPSBjb2xvci54XHJcbiAgICAgIGRhdGFbayArIDFdID0gY29sb3IueVxyXG4gICAgICBkYXRhW2sgKyAyXSA9IGNvbG9yLnpcclxuICAgICAgZGF0YVtrICsgM10gPSBjb2xvci53XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHVyZ2UoKSB7XHJcbiAgICB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aCA9IDBcclxuICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpXHJcbiAgICB0aGlzLmJhdGNoTWF0ZXJpYWwuZGlzcG9zZSgpXHJcbiAgICB0aGlzLmNvbG9yQnVmZmVyLmxlbmd0aCA9IDBcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBCb3gzLFxyXG4gIEJ1ZmZlckdlb21ldHJ5LFxyXG4gIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgRnJvbnRTaWRlLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE1hdHJpeDQsXHJcbiAgUmF5LFxyXG4gIFNpZGUsXHJcbiAgVWludDE2QnVmZmVyQXR0cmlidXRlLFxyXG4gIFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSxcclxuICBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7XHJcbiAgQ0VOVEVSLFxyXG4gIEV4dGVuZGVkVHJpYW5nbGUsXHJcbiAgTWVzaEJWSCxcclxuICBTaGFwZWNhc3RJbnRlcnNlY3Rpb24sXHJcbiAgU3BsaXRTdHJhdGVneVxyXG59IGZyb20gJ3RocmVlLW1lc2gtYnZoJ1xyXG5pbXBvcnQgeyBNZXNoSW50ZXJzZWN0aW9uIH0gZnJvbSAnLi9TcGVja2xlUmF5Y2FzdGVyLmpzJ1xyXG5cclxuY29uc3QgU0tJUF9HRU5FUkFUSU9OID0gU3ltYm9sKCdza2lwIHRyZWUgZ2VuZXJhdGlvbicpXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJWSE9wdGlvbnMge1xyXG4gIHN0cmF0ZWd5OiBTcGxpdFN0cmF0ZWd5XHJcbiAgbWF4RGVwdGg6IG51bWJlclxyXG4gIG1heExlYWZUcmlzOiBudW1iZXJcclxuICB2ZXJib3NlOiBib29sZWFuXHJcbiAgdXNlU2hhcmVkQXJyYXlCdWZmZXI6IGJvb2xlYW5cclxuICBzZXRCb3VuZGluZ0JveDogYm9vbGVhblxyXG4gIG9uUHJvZ3Jlc3M/OiAoKSA9PiB2b2lkXHJcbiAgW1NLSVBfR0VORVJBVElPTl06IGJvb2xlYW5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERlZmF1bHRCVkhPcHRpb25zID0ge1xyXG4gIHN0cmF0ZWd5OiBDRU5URVIsXHJcbiAgbWF4RGVwdGg6IDQwLFxyXG4gIG1heExlYWZUcmlzOiAxMCxcclxuICB2ZXJib3NlOiB0cnVlLFxyXG4gIHVzZVNoYXJlZEFycmF5QnVmZmVyOiBmYWxzZSxcclxuICBzZXRCb3VuZGluZ0JveDogZmFsc2UsXHJcbiAgW1NLSVBfR0VORVJBVElPTl06IGZhbHNlXHJcbn1cclxuXHJcbi8qKiBcclxuICogXHJcbiAgX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgICAgICAgICAgICAgXyAgIFxyXG4gfF8gICBffCAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgfCB8ICBcclxuICAgfCB8ICBfIF9fIF9fXyAgXyBfXyAgIF9fXyAgXyBfX3wgfF8gX18gXyBfIF9fIHwgfF8gXHJcbiAgIHwgfCB8ICdfIGAgXyBcXHwgJ18gXFwgLyBfIFxcfCAnX198IF9fLyBfYCB8ICdfIFxcfCBfX3xcclxuICBffCB8X3wgfCB8IHwgfCB8IHxfKSB8IChfKSB8IHwgIHwgfHwgKF98IHwgfCB8IHwgfF8gXHJcbiB8X19fX198X3wgfF98IHxffCAuX18vIFxcX19fL3xffCAgIFxcX19cXF9fLF98X3wgfF98XFxfX3xcclxuICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuV2UndmUgbWFkZSB0aGlzIHdyYXBwZXIgYXJvdW5kIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiB0byBoaWRlIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2UgZG8gYmVoaW5kIHRoZSBzY2VuZXNcclxuaW4gb3JkZXIgdG8gYXZvaWQgc3RvcmluZyB2ZXJ0ZXggcG9zaXRpb25zIGFzIEZsb2F0NjQuIEluc3RlYWQgd2Ugc3RvcmUgdGhlbSBhcyBGbG9hdDMyLCBidXQgdGhlIHdob2xlIEJWSCBpcyBcclxucmUtY2VudGVyZWQgYXJvdW5kIHRoZSBtZXNoIGxvY2FsIG9yaWdpbiBhcyAoMCwwLDApLiBXZSB1c2UgdGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1hdGlvbnMgdG8gdHJhbnNmb3JtIGFueXRoaW5nIHRoYXQgY29tZXNcclxuaW4gb3Igb3V0IG9mIHRoZSBCVkggaW4gb3JkZXIgdG8ga2VlcCB0aGlzIHJlLWNlbnRlcmluZyBvcGFxdWUuXHJcblxyXG5XZSd2ZSBpbXBsZW1lbnRlZCBhdXRvLXRyYW5zZm9ybWF0aW9uIGZvciByYXljYXN0aW5nIGFuZCBzaGFwZWNhc3RpbmcuIE90aGVyIGZ1bmN0aW9uYWxpdGllcyBsaWtlIGJ2aGNhc3Qgb3IgZ2VvbWV0cnljYXN0XHJcbndpbGwgbmVlZCB0byBiZSB3cmFwcGVkIGFyb3VuZCBpZiByZXF1aXJlZC4gXHJcblxyXG5PdGhlcndpc2UsIGtlZXAgaW4gbWluZCB0aGF0IGlmIHlvdSB1c2UgdGhpcyBjbGFzcyBmb3IgYW55IG90aGVyIHB1cnBvc2VzLCB5b3UgY2FuIHVzZSB0cmFuc2Zvcm1JbnB1dCBhbmQgdHJhbnNmb3JtT3V0cHV0XHJcbnRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZXMgZm9yIFZlY3RvcnMsIFJheXMsIEJveGVzLCBldGNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBY2NlbGVyYXRpb25TdHJ1Y3R1cmUge1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1hdEJ1ZmY6IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcbiAgcHJpdmF0ZSBfYnZoOiBNZXNoQlZIXHJcbiAgcHVibGljIGlucHV0VHJhbnNmb3JtOiBNYXRyaXg0XHJcbiAgcHVibGljIG91dHB1dFRyYW5zZm9ybTogTWF0cml4NFxyXG4gIHB1YmxpYyBpbnB1dE9yaWdpblRyYW5zZm9ybTogTWF0cml4NFxyXG4gIHB1YmxpYyBvdXRwdXRPcmlnaW5UcmFuc2ZvbTogTWF0cml4NFxyXG5cclxuICBwdWJsaWMgZ2V0IGdlb21ldHJ5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J2aC5nZW9tZXRyeVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBidmgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnZoXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGJ1aWxkQlZIKFxyXG4gICAgaW5kaWNlczogVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSB8IHVuZGVmaW5lZCxcclxuICAgIHBvc2l0aW9uOiBGbG9hdDMyQXJyYXkgfCBGbG9hdDY0QXJyYXkgfCB1bmRlZmluZWQsXHJcbiAgICBvcHRpb25zOiBCVkhPcHRpb25zID0gRGVmYXVsdEJWSE9wdGlvbnMsXHJcbiAgICB0cmFuc2Zvcm0/OiBNYXRyaXg0XHJcbiAgKTogTWVzaEJWSCB7XHJcbiAgICAvKiogVGhlcmUgaXMgbm8gdW5uaXZlcnNlIHdoZXJlIHlvdSBjYW4gYnVpbGQgYSBCVkggd2l0aG91dCBwcm9wZXIgaW5kaWNlcyBvciBwb3NpdGlvbnMgKi9cclxuICAgIGlmICghaW5kaWNlcyB8fCAhcG9zaXRpb24pIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYnVpbGQgQlZIIHdpdGggdW5kZWZpbmVkIGluZGljZXMgb3IgcG9zaXRpb24hJylcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYnZoUG9zaXRpb25zID0gcG9zaXRpb25cclxuICAgIGlmICh0cmFuc2Zvcm0pIHtcclxuICAgICAgYnZoUG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbi5sZW5ndGgpXHJcbiAgICAgIGNvbnN0IHZlY0J1ZmYgPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcG9zaXRpb24ubGVuZ3RoOyBrICs9IDMpIHtcclxuICAgICAgICB2ZWNCdWZmLnNldChwb3NpdGlvbltrXSwgcG9zaXRpb25bayArIDFdLCBwb3NpdGlvbltrICsgMl0pXHJcbiAgICAgICAgdmVjQnVmZi5hcHBseU1hdHJpeDQodHJhbnNmb3JtKVxyXG4gICAgICAgIGJ2aFBvc2l0aW9uc1trXSA9IHZlY0J1ZmYueFxyXG4gICAgICAgIGJ2aFBvc2l0aW9uc1trICsgMV0gPSB2ZWNCdWZmLnlcclxuICAgICAgICBidmhQb3NpdGlvbnNbayArIDJdID0gdmVjQnVmZi56XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGJ2aEdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KClcclxuICAgIGxldCBidmhJbmRpY2VzID0gbnVsbFxyXG4gICAgaWYgKHBvc2l0aW9uLmxlbmd0aCA+PSA2NTUzNSB8fCBpbmRpY2VzLmxlbmd0aCA+PSA2NTUzNSkge1xyXG4gICAgICBidmhJbmRpY2VzID0gbmV3IFVpbnQzMkFycmF5KGluZGljZXMubGVuZ3RoKVxyXG4gICAgICBidmhJbmRpY2VzLnNldChpbmRpY2VzLCAwKVxyXG4gICAgICBidmhHZW9tZXRyeS5zZXRJbmRleChuZXcgVWludDMyQnVmZmVyQXR0cmlidXRlKGJ2aEluZGljZXMsIDEpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYnZoSW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShpbmRpY2VzLmxlbmd0aClcclxuICAgICAgYnZoSW5kaWNlcy5zZXQoaW5kaWNlcywgMClcclxuICAgICAgYnZoR2VvbWV0cnkuc2V0SW5kZXgobmV3IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZShidmhJbmRpY2VzLCAxKSlcclxuICAgIH1cclxuXHJcbiAgICBidmhHZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoYnZoUG9zaXRpb25zLCAzKSlcclxuICAgIGJ2aEdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpXHJcblxyXG4gICAgY29uc3QgYnZoID0gbmV3IE1lc2hCVkgoYnZoR2VvbWV0cnksIG9wdGlvbnMpXHJcbiAgICByZXR1cm4gYnZoXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihidmg6IE1lc2hCVkgpIHtcclxuICAgIHRoaXMuX2J2aCA9IGJ2aFxyXG4gIH1cclxuXHJcbiAgLyogQ29yZSBDYXN0IEZ1bmN0aW9ucyAqL1xyXG4gIHB1YmxpYyByYXljYXN0KFxyXG4gICAgcmF5OiBSYXksXHJcbiAgICBtYXRlcmlhbE9yU2lkZTogU2lkZSB8IE1hdGVyaWFsIHwgTWF0ZXJpYWxbXSA9IEZyb250U2lkZVxyXG4gICk6IE1lc2hJbnRlcnNlY3Rpb25bXSB7XHJcbiAgICBjb25zdCByZXMgPSB0aGlzLl9idmgucmF5Y2FzdCh0aGlzLnRyYW5zZm9ybUlucHV0PFJheT4ocmF5KSwgbWF0ZXJpYWxPclNpZGUpXHJcbiAgICByZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcclxuICAgICAgdmFsdWUucG9pbnQgPSB0aGlzLnRyYW5zZm9ybU91dHB1dCh2YWx1ZS5wb2ludClcclxuICAgIH0pXHJcbiAgICAvKiogVGhlIGludGVyc2VjdGlvbiByZXN1bHRzIGZyb20gcmF5Y2FzdGluZyBhIGJ2aCB3aWxsIGFsd2F5cyBvdmVybGFwIHdpdGggTWVzaEludGVyc2VjdGlvbiBiZWNhdXNlIHRoZSBidmggdXNlcyBpbmRleGVkIGdlb21ldHJ5ICovXHJcbiAgICByZXR1cm4gcmVzIGFzIE1lc2hJbnRlcnNlY3Rpb25bXVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJheWNhc3RGaXJzdChcclxuICAgIHJheTogUmF5LFxyXG4gICAgbWF0ZXJpYWxPclNpZGU6IFNpZGUgfCBNYXRlcmlhbCB8IE1hdGVyaWFsW10gPSBGcm9udFNpZGVcclxuICApOiBNZXNoSW50ZXJzZWN0aW9uIHtcclxuICAgIGNvbnN0IHJlcyA9IHRoaXMuX2J2aC5yYXljYXN0Rmlyc3QodGhpcy50cmFuc2Zvcm1JbnB1dDxSYXk+KHJheSksIG1hdGVyaWFsT3JTaWRlKVxyXG4gICAgaWYgKHJlcykgcmVzLnBvaW50ID0gdGhpcy50cmFuc2Zvcm1PdXRwdXQocmVzLnBvaW50KVxyXG4gICAgLyoqIFRoZSBpbnRlcnNlY3Rpb24gcmVzdWx0cyBmcm9tIHJheWNhc3RpbmcgYSBidmggd2lsbCBhbHdheXMgb3ZlcmxhcCB3aXRoIE1lc2hJbnRlcnNlY3Rpb24gYmVjYXVzZSB0aGUgYnZoIHVzZXMgaW5kZXhlZCBnZW9tZXRyeSAqL1xyXG4gICAgcmV0dXJuIHJlcyBhcyBNZXNoSW50ZXJzZWN0aW9uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hhcGVjYXN0KFxyXG4gICAgY2FsbGJhY2tzOiB7XHJcbiAgICAgIGludGVyc2VjdHNCb3VuZHM6IChcclxuICAgICAgICBib3g6IEJveDMsXHJcbiAgICAgICAgaXNMZWFmOiBib29sZWFuLFxyXG4gICAgICAgIHNjb3JlOiBudW1iZXIgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgZGVwdGg6IG51bWJlcixcclxuICAgICAgICBub2RlSW5kZXg6IG51bWJlclxyXG4gICAgICApID0+IFNoYXBlY2FzdEludGVyc2VjdGlvbiB8IGJvb2xlYW5cclxuXHJcbiAgICAgIHRyYXZlcnNlQm91bmRzT3JkZXI/OiAoYm94OiBCb3gzKSA9PiBudW1iZXJcclxuICAgIH0gJiAoXHJcbiAgICAgIHwge1xyXG4gICAgICAgICAgaW50ZXJzZWN0c1JhbmdlOiAoXHJcbiAgICAgICAgICAgIHRyaWFuZ2xlT2Zmc2V0OiBudW1iZXIsXHJcbiAgICAgICAgICAgIHRyaWFuZ2xlQ291bnQ6IG51bWJlcixcclxuICAgICAgICAgICAgY29udGFpbmVkOiBib29sZWFuLFxyXG4gICAgICAgICAgICBkZXB0aDogbnVtYmVyLFxyXG4gICAgICAgICAgICBub2RlSW5kZXg6IG51bWJlcixcclxuICAgICAgICAgICAgYm94OiBCb3gzXHJcbiAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICB9XHJcbiAgICAgIHwge1xyXG4gICAgICAgICAgaW50ZXJzZWN0c1RyaWFuZ2xlOiAoXHJcbiAgICAgICAgICAgIHRyaWFuZ2xlOiBFeHRlbmRlZFRyaWFuZ2xlLFxyXG4gICAgICAgICAgICB0cmlhbmdsZUluZGV4OiBudW1iZXIsXHJcbiAgICAgICAgICAgIGNvbnRhaW5lZDogYm9vbGVhbixcclxuICAgICAgICAgICAgZGVwdGg6IG51bWJlclxyXG4gICAgICAgICAgKSA9PiBib29sZWFuIHwgdm9pZFxyXG4gICAgICAgIH1cclxuICAgIClcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJveEJ1ZmZlciA9IG5ldyBCb3gzKClcclxuICAgIGNvbnN0IHRyaWFuZ2xlQnVmZmVyID0gbmV3IEV4dGVuZGVkVHJpYW5nbGUoKVxyXG4gICAgY29uc3QgbmV3Q2FsbGJhY2tzOiB7XHJcbiAgICAgIGludGVyc2VjdHNCb3VuZHM6IChcclxuICAgICAgICBib3g6IEJveDMsXHJcbiAgICAgICAgaXNMZWFmOiBib29sZWFuLFxyXG4gICAgICAgIHNjb3JlOiBudW1iZXIgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgZGVwdGg6IG51bWJlcixcclxuICAgICAgICBub2RlSW5kZXg6IG51bWJlclxyXG4gICAgICApID0+IFNoYXBlY2FzdEludGVyc2VjdGlvbiB8IGJvb2xlYW5cclxuXHJcbiAgICAgIHRyYXZlcnNlQm91bmRzT3JkZXI/OiAoYm94OiBCb3gzKSA9PiBudW1iZXJcclxuICAgIH0gJiAoXHJcbiAgICAgIHwge1xyXG4gICAgICAgICAgaW50ZXJzZWN0c1JhbmdlOiAoXHJcbiAgICAgICAgICAgIHRyaWFuZ2xlT2Zmc2V0OiBudW1iZXIsXHJcbiAgICAgICAgICAgIHRyaWFuZ2xlQ291bnQ6IG51bWJlcixcclxuICAgICAgICAgICAgY29udGFpbmVkOiBib29sZWFuLFxyXG4gICAgICAgICAgICBkZXB0aDogbnVtYmVyLFxyXG4gICAgICAgICAgICBub2RlSW5kZXg6IG51bWJlcixcclxuICAgICAgICAgICAgYm94OiBCb3gzXHJcbiAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICB9XHJcbiAgICAgIHwge1xyXG4gICAgICAgICAgaW50ZXJzZWN0c1RyaWFuZ2xlOiAoXHJcbiAgICAgICAgICAgIHRyaWFuZ2xlOiBFeHRlbmRlZFRyaWFuZ2xlLFxyXG4gICAgICAgICAgICB0cmlhbmdsZUluZGV4OiBudW1iZXIsXHJcbiAgICAgICAgICAgIGNvbnRhaW5lZDogYm9vbGVhbixcclxuICAgICAgICAgICAgZGVwdGg6IG51bWJlclxyXG4gICAgICAgICAgKSA9PiBib29sZWFuIHwgdm9pZFxyXG4gICAgICAgIH1cclxuICAgICkgPSBPYmplY3QuY3JlYXRlKG51bGwpXHJcbiAgICBpZiAoY2FsbGJhY2tzLmludGVyc2VjdHNCb3VuZHMpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIG5ld0NhbGxiYWNrcy5pbnRlcnNlY3RzQm91bmRzID0gKFxyXG4gICAgICAgIGJveDogQm94MyxcclxuICAgICAgICBpc0xlYWY6IGJvb2xlYW4sXHJcbiAgICAgICAgc2NvcmU6IG51bWJlciB8IHVuZGVmaW5lZCxcclxuICAgICAgICBkZXB0aDogbnVtYmVyLFxyXG4gICAgICAgIG5vZGVJbmRleDogbnVtYmVyXHJcbiAgICAgICk6IFNoYXBlY2FzdEludGVyc2VjdGlvbiB8IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGJveEJ1ZmZlci5jb3B5KGJveClcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybU91dHB1dChib3hCdWZmZXIpXHJcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrcy5pbnRlcnNlY3RzQm91bmRzKGJveEJ1ZmZlciwgaXNMZWFmLCBzY29yZSwgZGVwdGgsIG5vZGVJbmRleClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgaWYgKGNhbGxiYWNrcy5pbnRlcnNlY3RzVHJpYW5nbGUpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgbmV3Q2FsbGJhY2tzLmludGVyc2VjdHNUcmlhbmdsZSA9IChcclxuICAgICAgICB0cmlhbmdsZTogRXh0ZW5kZWRUcmlhbmdsZSxcclxuICAgICAgICB0cmlhbmdsZUluZGV4OiBudW1iZXIsXHJcbiAgICAgICAgY29udGFpbmVkOiBib29sZWFuLFxyXG4gICAgICAgIGRlcHRoOiBudW1iZXJcclxuICAgICAgKTogYm9vbGVhbiB8IHZvaWQgPT4ge1xyXG4gICAgICAgIHRyaWFuZ2xlQnVmZmVyLmNvcHkodHJpYW5nbGUpXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1PdXRwdXQodHJpYW5nbGVCdWZmZXIuYSlcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybU91dHB1dCh0cmlhbmdsZUJ1ZmZlci5iKVxyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtT3V0cHV0KHRyaWFuZ2xlQnVmZmVyLmMpXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICByZXR1cm4gY2FsbGJhY2tzLmludGVyc2VjdHNUcmlhbmdsZShcclxuICAgICAgICAgIHRyaWFuZ2xlQnVmZmVyLFxyXG4gICAgICAgICAgdHJpYW5nbGVJbmRleCxcclxuICAgICAgICAgIGNvbnRhaW5lZCxcclxuICAgICAgICAgIGRlcHRoXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIG5ld0NhbGxiYWNrcy5pbnRlcnNlY3RzUmFuZ2UgPSBjYWxsYmFja3MuaW50ZXJzZWN0c1JhbmdlXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIG5ld0NhbGxiYWNrcy50cmF2ZXJzZUJvdW5kc09yZGVyID0gY2FsbGJhY2tzLnRyYXZlcnNlQm91bmRzT3JkZXJcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fYnZoLnNoYXBlY2FzdChuZXdDYWxsYmFja3MpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhbnNmb3JtSW5wdXQ8VCBleHRlbmRzIFZlY3RvcjMgfCBSYXkgfCBCb3gzPihpbnB1dDogVCk6IFQge1xyXG4gICAgQWNjZWxlcmF0aW9uU3RydWN0dXJlLk1hdEJ1ZmYuY29weSh0aGlzLmlucHV0T3JpZ2luVHJhbnNmb3JtKS5tdWx0aXBseShcclxuICAgICAgdGhpcy5pbnB1dFRyYW5zZm9ybVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIGlucHV0LmFwcGx5TWF0cml4NChBY2NlbGVyYXRpb25TdHJ1Y3R1cmUuTWF0QnVmZikgYXMgVFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYW5zZm9ybU91dHB1dDxUIGV4dGVuZHMgVmVjdG9yMyB8IFJheSB8IEJveDM+KG91dHB1dDogVCk6IFQge1xyXG4gICAgQWNjZWxlcmF0aW9uU3RydWN0dXJlLk1hdEJ1ZmYuY29weSh0aGlzLm91dHB1dE9yaWdpblRyYW5zZm9tKS5wcmVtdWx0aXBseShcclxuICAgICAgdGhpcy5vdXRwdXRUcmFuc2Zvcm1cclxuICAgIClcclxuICAgIHJldHVybiBvdXRwdXQuYXBwbHlNYXRyaXg0KEFjY2VsZXJhdGlvblN0cnVjdHVyZS5NYXRCdWZmKSBhcyBUXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Qm91bmRpbmdCb3godGFyZ2V0PzogQm94Myk6IEJveDMge1xyXG4gICAgY29uc3QgX3RhcmdldDogQm94MyA9IHRhcmdldCA/IHRhcmdldCA6IG5ldyBCb3gzKClcclxuICAgIHRoaXMuX2J2aC5nZXRCb3VuZGluZ0JveChfdGFyZ2V0KVxyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtT3V0cHV0KF90YXJnZXQpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VmVydGV4QXRJbmRleChpbmRleDogbnVtYmVyKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBhcnJheSA9IHRoaXMuX2J2aC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1PdXRwdXQoXHJcbiAgICAgIG5ldyBWZWN0b3IzKGFycmF5W2luZGV4ICogM10sIGFycmF5W2luZGV4ICogMyArIDFdLCBhcnJheVtpbmRleCAqIDMgKyAyXSlcclxuICAgIClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBCb3gzLFxyXG4gIEJ1ZmZlckF0dHJpYnV0ZSxcclxuICBGcm9udFNpZGUsXHJcbiAgTWF0ZXJpYWwsXHJcbiAgTWF0cml4NCxcclxuICBNZXNoLFxyXG4gIFJheSxcclxuICBTaWRlLFxyXG4gIFZlY3RvcjNcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgTWVzaEJWSFZpc3VhbGl6ZXIsIFNoYXBlY2FzdEludGVyc2VjdGlvbiB9IGZyb20gJ3RocmVlLW1lc2gtYnZoJ1xyXG5pbXBvcnQgeyBCYXRjaE9iamVjdCB9IGZyb20gJy4uL2JhdGNoaW5nL0JhdGNoT2JqZWN0LmpzJ1xyXG5pbXBvcnQgeyBFeHRlbmRlZFRyaWFuZ2xlLCBIaXRQb2ludEluZm8gfSBmcm9tICd0aHJlZS1tZXNoLWJ2aCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbixcclxuICBFeHRlbmRlZFNoYXBlQ2FzdENhbGxiYWNrcyxcclxuICBNZXNoSW50ZXJzZWN0aW9uXHJcbn0gZnJvbSAnLi9TcGVja2xlUmF5Y2FzdGVyLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyBBY2NlbGVyYXRpb25TdHJ1Y3R1cmUgfSBmcm9tICcuL0FjY2VsZXJhdGlvblN0cnVjdHVyZS5qcydcclxuXHJcbi8qKiBcclxuICogXHJcbiAgX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgICAgICAgICAgICAgXyAgIFxyXG4gfF8gICBffCAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgfCB8ICBcclxuICAgfCB8ICBfIF9fIF9fXyAgXyBfXyAgIF9fXyAgXyBfX3wgfF8gX18gXyBfIF9fIHwgfF8gXHJcbiAgIHwgfCB8ICdfIGAgXyBcXHwgJ18gXFwgLyBfIFxcfCAnX198IF9fLyBfYCB8ICdfIFxcfCBfX3xcclxuICBffCB8X3wgfCB8IHwgfCB8IHxfKSB8IChfKSB8IHwgIHwgfHwgKF98IHwgfCB8IHwgfF8gXHJcbiB8X19fX198X3wgfF98IHxffCAuX18vIFxcX19fL3xffCAgIFxcX19cXF9fLF98X3wgfF98XFxfX3xcclxuICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICBVbmxpa2UgdGhlIEJWSHMgZm9yIHRoZSBpbmRpdmlkdWFsIG9iamVjdHMsIHdoaWNoIGFjdCBhcyBvdXIgQkFTLCB0aGUgVEFTICppcyBub3QgcmVsYXRpdmUgdG8gdGhlIHdvcmxkIG9yaWdpbiohXHJcbiAgQWxsIGNvb3JkaW5hdGVzIGFyZSB0aGUgZmluYWwgd29ybGQgY29vcmRpbmF0ZXMgZGVyaXZlZCBmcm9tIHRoZSBCQVMgYm91bmRpbmcgYm94ZXMsIGFmdGVyIGFsbCB0cmFuc2Zvcm1hdGlvbnMuXHJcbiAgSW4gdGhlb3J5IHRoaXMgbWlnaHQgbWVhbiB0aGUgVEFTIGlzIG5vdCAxMDAlIGFjY3VyYXRlIGZvciBvYmplY3RzIGZhciBhd2F5IGZyb20gb3JpZ2luLCBidXQgSSB0aGluayBpdCBzaG91bGQgZG9cclxuICBmaW5lIGFzIGl0IGlzLiBJZiB3ZSByZWFsbHkgcmVhbGx5IHJlYWxseSBuZWVkIHRoYXQgMTAwJSBhY2N1cmFjeSwgd2UnbGwganVzdCBtYWtlIGl0IHJlbGF0aXZlIHRvIHRoZSBvcmlnaW5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUb3BMZXZlbEFjY2VsZXJhdGlvblN0cnVjdHVyZSB7XHJcbiAgcHJpdmF0ZSBkZWJ1Z0JWSCA9IGZhbHNlXHJcbiAgcHJpdmF0ZSBzdGF0aWMgY3ViZUluZGljZXMgPSBbXHJcbiAgICAvLyBmcm9udFxyXG4gICAgMCwgMSwgMiwgMiwgMywgMCxcclxuICAgIC8vIHJpZ2h0XHJcbiAgICAxLCA1LCA2LCA2LCAyLCAxLFxyXG4gICAgLy8gYmFja1xyXG4gICAgNywgNiwgNSwgNSwgNCwgNyxcclxuICAgIC8vIGxlZnRcclxuICAgIDQsIDAsIDMsIDMsIDcsIDQsXHJcbiAgICAvLyBib3R0b21cclxuICAgIDQsIDUsIDEsIDEsIDAsIDQsXHJcbiAgICAvLyB0b3BcclxuICAgIDMsIDIsIDYsIDYsIDcsIDNcclxuICBdXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ1VCRV9WRVJUUyA9IDhcclxuXHJcbiAgcHVibGljIGJhdGNoT2JqZWN0czogQmF0Y2hPYmplY3RbXSA9IFtdXHJcbiAgcHVibGljIGJvdW5kczogQm94MyA9IG5ldyBCb3gzKG5ldyBWZWN0b3IzKDAsIDAsIDApLCBuZXcgVmVjdG9yMygwLCAwLCAwKSlcclxuXHJcbiAgcHVibGljIGFjY2VsZXJhdGlvblN0cnVjdHVyZTogQWNjZWxlcmF0aW9uU3RydWN0dXJlXHJcbiAgcHVibGljIGJ2aEhlbHBlcjogTWVzaEJWSFZpc3VhbGl6ZXJcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKGJhdGNoT2JqZWN0czogQmF0Y2hPYmplY3RbXSkge1xyXG4gICAgdGhpcy5iYXRjaE9iamVjdHMgPSBiYXRjaE9iamVjdHNcclxuICAgIHRoaXMuYnVpbGRCVkgoKVxyXG4gICAgdGhpcy5nZXRCb3VuZGluZ0JveCh0aGlzLmJvdW5kcylcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRCVkgoKSB7XHJcbiAgICBjb25zdCBpbmRpY2VzOiBVaW50MTZBcnJheSA9IG5ldyBVaW50MTZBcnJheShcclxuICAgICAgVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmUuY3ViZUluZGljZXMubGVuZ3RoICogdGhpcy5iYXRjaE9iamVjdHMubGVuZ3RoXHJcbiAgICApXHJcbiAgICBjb25zdCB2ZXJ0aWNlczogRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcclxuICAgICAgVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmUuQ1VCRV9WRVJUUyAqIDMgKiB0aGlzLmJhdGNoT2JqZWN0cy5sZW5ndGhcclxuICAgIClcclxuICAgIGxldCB2ZXJ0T2Zmc2V0ID0gMFxyXG4gICAgbGV0IGluZGV4T2Zmc2V0ID0gMFxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmJhdGNoT2JqZWN0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBib3hCb3VuZHM6IEJveDMgPSB0aGlzLmJhdGNoT2JqZWN0c1trXS5hY2NlbGVyYXRpb25TdHJ1Y3R1cmUuZ2V0Qm91bmRpbmdCb3goXHJcbiAgICAgICAgbmV3IEJveDMoKVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMudXBkYXRlVmVydEFycmF5KGJveEJvdW5kcywgdmVydE9mZnNldCwgdmVydGljZXMpXHJcbiAgICAgIGluZGljZXMuc2V0KFxyXG4gICAgICAgIFRvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlLmN1YmVJbmRpY2VzLm1hcCgodmFsKSA9PiB2YWwgKyB2ZXJ0T2Zmc2V0IC8gMyksXHJcbiAgICAgICAgaW5kZXhPZmZzZXRcclxuICAgICAgKVxyXG4gICAgICB0aGlzLmJhdGNoT2JqZWN0c1trXS50YXNWZXJ0SW5kZXhTdGFydCA9IHZlcnRPZmZzZXQgLyAzXHJcbiAgICAgIHRoaXMuYmF0Y2hPYmplY3RzW2tdLnRhc1ZlcnRJbmRleEVuZCA9XHJcbiAgICAgICAgdmVydE9mZnNldCAvIDMgKyBUb3BMZXZlbEFjY2VsZXJhdGlvblN0cnVjdHVyZS5DVUJFX1ZFUlRTXHJcblxyXG4gICAgICB2ZXJ0T2Zmc2V0ICs9IFRvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlLkNVQkVfVkVSVFMgKiAzXHJcbiAgICAgIGluZGV4T2Zmc2V0ICs9IFRvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlLmN1YmVJbmRpY2VzLmxlbmd0aFxyXG4gICAgfVxyXG4gICAgdGhpcy5hY2NlbGVyYXRpb25TdHJ1Y3R1cmUgPSBuZXcgQWNjZWxlcmF0aW9uU3RydWN0dXJlKFxyXG4gICAgICBBY2NlbGVyYXRpb25TdHJ1Y3R1cmUuYnVpbGRCVkgoaW5kaWNlcywgdmVydGljZXMpXHJcbiAgICApXHJcbiAgICB0aGlzLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5pbnB1dFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KClcclxuICAgIHRoaXMuYWNjZWxlcmF0aW9uU3RydWN0dXJlLm91dHB1dFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KClcclxuICAgIHRoaXMuYWNjZWxlcmF0aW9uU3RydWN0dXJlLmlucHV0T3JpZ2luVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKVxyXG4gICAgdGhpcy5hY2NlbGVyYXRpb25TdHJ1Y3R1cmUub3V0cHV0T3JpZ2luVHJhbnNmb20gPSBuZXcgTWF0cml4NCgpXHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWdCVkgpIHtcclxuICAgICAgY29uc3QgbWVzaCA9IG5ldyBNZXNoKHRoaXMuYWNjZWxlcmF0aW9uU3RydWN0dXJlLmdlb21ldHJ5KVxyXG4gICAgICBtZXNoLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLk9WRVJMQVkpXHJcbiAgICAgIG1lc2guZ2VvbWV0cnkuYm91bmRzVHJlZSA9IHRoaXMuYWNjZWxlcmF0aW9uU3RydWN0dXJlLmJ2aFxyXG4gICAgICB0aGlzLmJ2aEhlbHBlciA9IG5ldyBNZXNoQlZIVmlzdWFsaXplcihtZXNoKVxyXG4gICAgICB0aGlzLmJ2aEhlbHBlci5sYXllcnMuc2V0KE9iamVjdExheWVycy5PVkVSTEFZKVxyXG4gICAgICB0aGlzLmJ2aEhlbHBlci5jaGlsZHJlblswXS5sYXllcnMuc2V0KE9iamVjdExheWVycy5PVkVSTEFZKVxyXG4gICAgICB0aGlzLmJ2aEhlbHBlci51cGRhdGUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVWZXJ0QXJyYXkoYm94OiBCb3gzLCBvZmZzZXQ6IG51bWJlciwgb3V0UG9zaXRpb25zOiBGbG9hdDMyQXJyYXkpIHtcclxuICAgIG91dFBvc2l0aW9uc1tvZmZzZXRdID0gYm94Lm1pbi54XHJcbiAgICBvdXRQb3NpdGlvbnNbb2Zmc2V0ICsgMV0gPSBib3gubWluLnlcclxuICAgIG91dFBvc2l0aW9uc1tvZmZzZXQgKyAyXSA9IGJveC5tYXguelxyXG5cclxuICAgIG91dFBvc2l0aW9uc1tvZmZzZXQgKyAzXSA9IGJveC5tYXgueFxyXG4gICAgb3V0UG9zaXRpb25zW29mZnNldCArIDRdID0gYm94Lm1pbi55XHJcbiAgICBvdXRQb3NpdGlvbnNbb2Zmc2V0ICsgNV0gPSBib3gubWF4LnpcclxuXHJcbiAgICBvdXRQb3NpdGlvbnNbb2Zmc2V0ICsgNl0gPSBib3gubWF4LnhcclxuICAgIG91dFBvc2l0aW9uc1tvZmZzZXQgKyA3XSA9IGJveC5tYXgueVxyXG4gICAgb3V0UG9zaXRpb25zW29mZnNldCArIDhdID0gYm94Lm1heC56XHJcblxyXG4gICAgb3V0UG9zaXRpb25zW29mZnNldCArIDldID0gYm94Lm1pbi54XHJcbiAgICBvdXRQb3NpdGlvbnNbb2Zmc2V0ICsgMTBdID0gYm94Lm1heC55XHJcbiAgICBvdXRQb3NpdGlvbnNbb2Zmc2V0ICsgMTFdID0gYm94Lm1heC56XHJcblxyXG4gICAgb3V0UG9zaXRpb25zW29mZnNldCArIDEyXSA9IGJveC5taW4ueFxyXG4gICAgb3V0UG9zaXRpb25zW29mZnNldCArIDEzXSA9IGJveC5taW4ueVxyXG4gICAgb3V0UG9zaXRpb25zW29mZnNldCArIDE0XSA9IGJveC5taW4uelxyXG5cclxuICAgIG91dFBvc2l0aW9uc1tvZmZzZXQgKyAxNV0gPSBib3gubWF4LnhcclxuICAgIG91dFBvc2l0aW9uc1tvZmZzZXQgKyAxNl0gPSBib3gubWluLnlcclxuICAgIG91dFBvc2l0aW9uc1tvZmZzZXQgKyAxN10gPSBib3gubWluLnpcclxuXHJcbiAgICBvdXRQb3NpdGlvbnNbb2Zmc2V0ICsgMThdID0gYm94Lm1heC54XHJcbiAgICBvdXRQb3NpdGlvbnNbb2Zmc2V0ICsgMTldID0gYm94Lm1heC55XHJcbiAgICBvdXRQb3NpdGlvbnNbb2Zmc2V0ICsgMjBdID0gYm94Lm1pbi56XHJcblxyXG4gICAgb3V0UG9zaXRpb25zW29mZnNldCArIDIxXSA9IGJveC5taW4ueFxyXG4gICAgb3V0UG9zaXRpb25zW29mZnNldCArIDIyXSA9IGJveC5tYXgueVxyXG4gICAgb3V0UG9zaXRpb25zW29mZnNldCArIDIzXSA9IGJveC5taW4uelxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZml0KCkge1xyXG4gICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5hY2NlbGVyYXRpb25TdHJ1Y3R1cmUuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvblxyXG4gICAgICAuYXJyYXkgYXMgRmxvYXQzMkFycmF5XHJcbiAgICAvLyBjb25zdCBib3hCdWZmZXI6IEJveDMgPSBuZXcgQm94MygpXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMuYmF0Y2hPYmplY3RzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5iYXRjaE9iamVjdHNba10udGFzVmVydEluZGV4U3RhcnRcclxuICAgICAgY29uc3QgYmFzQm94ID0gdGhpcy5iYXRjaE9iamVjdHNba10uYWFiYiAvL2FjY2VsZXJhdGlvblN0cnVjdHVyZS5nZXRCb3VuZGluZ0JveChib3hCdWZmZXIpXHJcbiAgICAgIHRoaXMudXBkYXRlVmVydEFycmF5KGJhc0JveCwgc3RhcnQgKiAzLCBwb3NpdGlvbnMpXHJcbiAgICB9XHJcbiAgICB0aGlzLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5idmgucmVmaXQoKVxyXG4gICAgdGhpcy5idmhIZWxwZXI/LnVwZGF0ZSgpXHJcbiAgfVxyXG5cclxuICAvKiBDb3JlIENhc3QgRnVuY3Rpb25zICovXHJcbiAgcHVibGljIHJheWNhc3QoXHJcbiAgICByYXk6IFJheSxcclxuICAgIHRhc09ubHk6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIG1hdGVyaWFsT3JTaWRlOiBTaWRlIHwgTWF0ZXJpYWwgfCBNYXRlcmlhbFtdID0gRnJvbnRTaWRlXHJcbiAgKTogRXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uW10ge1xyXG4gICAgY29uc3QgcmVzOiBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb25bXSA9IFtdXHJcbiAgICBjb25zdCByYXlCdWZmID0gbmV3IFJheSgpXHJcbiAgICByYXlCdWZmLmNvcHkocmF5KVxyXG4gICAgY29uc3QgdGFzUmVzdWx0czogRXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uW10gPSB0aGlzLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5yYXljYXN0KFxyXG4gICAgICByYXlCdWZmLFxyXG4gICAgICBtYXRlcmlhbE9yU2lkZVxyXG4gICAgKSBhcyBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb25bXVxyXG4gICAgaWYgKCF0YXNSZXN1bHRzLmxlbmd0aCkgcmV0dXJuIHJlc1xyXG5cclxuICAgIC8qKiBUaGUgaW5kZXggYnVmZmVyIGZvciB0aGUgYnZoJ3MgZ2VvbWV0cnkgd2lsbCAqbmV2ZXIqIGJlIHVuZGVmaW5lZCBhcyBpdCB1c2VzIGluZGV4ZWQgZ2VvbWV0cnkgKi9cclxuICAgIGNvbnN0IGluZGV4QnVmZmVyQXR0cmlidXRlOiBCdWZmZXJBdHRyaWJ1dGUgPSB0aGlzLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5nZW9tZXRyeVxyXG4gICAgICAuaW5kZXggYXMgQnVmZmVyQXR0cmlidXRlXHJcbiAgICB0YXNSZXN1bHRzLmZvckVhY2goKHRhc1JlczogTWVzaEludGVyc2VjdGlvbikgPT4ge1xyXG4gICAgICBjb25zdCB2ZXJ0SW5kZXggPSBpbmRleEJ1ZmZlckF0dHJpYnV0ZS5hcnJheVt0YXNSZXMuZmFjZUluZGV4ICogM11cclxuICAgICAgY29uc3QgYmF0Y2hPYmplY3RJbmRleCA9IE1hdGgudHJ1bmMoXHJcbiAgICAgICAgdmVydEluZGV4IC8gVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmUuQ1VCRV9WRVJUU1xyXG4gICAgICApXHJcbiAgICAgIDsodGFzUmVzIGFzIEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbikuYmF0Y2hPYmplY3QgPVxyXG4gICAgICAgIHRoaXMuYmF0Y2hPYmplY3RzW2JhdGNoT2JqZWN0SW5kZXhdXHJcblxyXG4gICAgICAvKiogSWYgd2UgcmVxdWVzdGVkIG9ubHkgYSBUQVMgaW50ZXJzZWN0aW9uLCB0aGVuIHdlIHNraXAgdGhlIEJBUyBpbnRlcnNlY3Rpb25zICovXHJcbiAgICAgIGlmICghdGFzT25seSkge1xyXG4gICAgICAgIHJheUJ1ZmYuY29weShyYXkpXHJcbiAgICAgICAgY29uc3QgaGl0cyA9IHRoaXMuYmF0Y2hPYmplY3RzW2JhdGNoT2JqZWN0SW5kZXhdLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5yYXljYXN0KFxyXG4gICAgICAgICAgcmF5QnVmZixcclxuICAgICAgICAgIG1hdGVyaWFsT3JTaWRlXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGhpdHMuZm9yRWFjaCgoaGl0KSA9PiB7XHJcbiAgICAgICAgICAvKiogV2UncmUgcHJvbW90aW5nIHRoZSBNZXNoSW50ZXJzZWN0aW9uIHRvIEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbiBiZWNhdXNlXHJcbiAgICAgICAgICAgKiAgbm93IHdlIGtub3cgaXQncyBjb3JyZXNwb25kaW5nIGJhdGNoIG9iamVjdFxyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBjb25zdCBleHRlbmRlZEhpdDogRXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uID0gaGl0IGFzIEV4dGVuZGVkTWVzaEludGVyc2VjdGlvblxyXG4gICAgICAgICAgZXh0ZW5kZWRIaXQuYmF0Y2hPYmplY3QgPSB0aGlzLmJhdGNoT2JqZWN0c1tiYXRjaE9iamVjdEluZGV4XVxyXG4gICAgICAgICAgcmVzLnB1c2goZXh0ZW5kZWRIaXQpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gdGFzT25seSA/IHRhc1Jlc3VsdHMgOiByZXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyByYXljYXN0Rmlyc3QoXHJcbiAgICByYXk6IFJheSxcclxuICAgIHRhc09ubHk6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIG1hdGVyaWFsT3JTaWRlOiBTaWRlIHwgTWF0ZXJpYWwgfCBNYXRlcmlhbFtdID0gRnJvbnRTaWRlXHJcbiAgKTogRXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uIHwgbnVsbCB7XHJcbiAgICBjb25zdCByYXlCdWZmID0gbmV3IFJheSgpXHJcbiAgICByYXlCdWZmLmNvcHkocmF5KVxyXG4gICAgbGV0IGV4dGVuZGVkSGl0OiBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24gfCBudWxsID0gbnVsbFxyXG4gICAgbGV0IHRhc1JlczogRXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uW10gfCBudWxsID0gbnVsbFxyXG4gICAgaWYgKHRhc09ubHkpXHJcbiAgICAgIHRhc1JlcyA9IFtcclxuICAgICAgICB0aGlzLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5yYXljYXN0Rmlyc3QoXHJcbiAgICAgICAgICByYXlCdWZmLFxyXG4gICAgICAgICAgbWF0ZXJpYWxPclNpZGVcclxuICAgICAgICApIGFzIEV4dGVuZGVkTWVzaEludGVyc2VjdGlvblxyXG4gICAgICBdXHJcbiAgICBlbHNlXHJcbiAgICAgIHRhc1JlcyA9IHRoaXMuYWNjZWxlcmF0aW9uU3RydWN0dXJlLnJheWNhc3QoXHJcbiAgICAgICAgcmF5QnVmZixcclxuICAgICAgICBtYXRlcmlhbE9yU2lkZVxyXG4gICAgICApIGFzIEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbltdXHJcblxyXG4gICAgaWYgKCF0YXNSZXMgfHwgdGFzUmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGxcclxuXHJcbiAgICB0YXNSZXMuc29tZSgodGFzUmVzOiBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24pID0+IHtcclxuICAgICAgLyoqIFRoZSBpbmRleCBidWZmZXIgZm9yIHRoZSBidmgncyBnZW9tZXRyeSB3aWxsICpuZXZlciogYmUgdW5kZWZpbmVkIGFzIGl0IHVzZXMgaW5kZXhlZCBnZW9tZXRyeSAqL1xyXG4gICAgICBjb25zdCBpbmRleEJ1ZmZlckF0dHJpYnV0ZTogQnVmZmVyQXR0cmlidXRlID0gdGhpcy5hY2NlbGVyYXRpb25TdHJ1Y3R1cmUuZ2VvbWV0cnlcclxuICAgICAgICAuaW5kZXggYXMgQnVmZmVyQXR0cmlidXRlXHJcbiAgICAgIGNvbnN0IHZlcnRJbmRleCA9IGluZGV4QnVmZmVyQXR0cmlidXRlLmFycmF5W3Rhc1Jlcy5mYWNlSW5kZXggKiAzXVxyXG4gICAgICBjb25zdCBiYXRjaE9iamVjdEluZGV4ID0gTWF0aC50cnVuYyhcclxuICAgICAgICB2ZXJ0SW5kZXggLyBUb3BMZXZlbEFjY2VsZXJhdGlvblN0cnVjdHVyZS5DVUJFX1ZFUlRTXHJcbiAgICAgIClcclxuICAgICAgdGFzUmVzLmJhdGNoT2JqZWN0ID0gdGhpcy5iYXRjaE9iamVjdHNbYmF0Y2hPYmplY3RJbmRleF1cclxuXHJcbiAgICAgIC8qKiBJZiB3ZSByZXF1ZXN0ZWQgb25seSBhIFRBUyBpbnRlcnNlY3Rpb24sIHRoZW4gd2Ugc2tpcCB0aGUgQkFTIGludGVyc2VjdGlvbnMgKi9cclxuICAgICAgaWYgKCF0YXNPbmx5KSB7XHJcbiAgICAgICAgcmF5QnVmZi5jb3B5KHJheSlcclxuICAgICAgICBjb25zdCBoaXQ6IE1lc2hJbnRlcnNlY3Rpb24gPSB0aGlzLmJhdGNoT2JqZWN0c1tcclxuICAgICAgICAgIGJhdGNoT2JqZWN0SW5kZXhcclxuICAgICAgICBdLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5yYXljYXN0Rmlyc3QocmF5QnVmZiwgbWF0ZXJpYWxPclNpZGUpXHJcbiAgICAgICAgLyoqIFdlJ3JlIHByb21vdGluZyB0aGUgTWVzaEludGVyc2VjdGlvbiB0byBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24gYmVjYXVzZVxyXG4gICAgICAgICAqICBub3cgd2Uga25vdyBpdCdzIGNvcnJlc3BvbmRpbmcgYmF0Y2ggb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZXh0ZW5kZWRIaXQgPSBoaXQgYXMgRXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uXHJcbiAgICAgICAgaWYgKGV4dGVuZGVkSGl0KSB7XHJcbiAgICAgICAgICBleHRlbmRlZEhpdC5iYXRjaE9iamVjdCA9IHRoaXMuYmF0Y2hPYmplY3RzW2JhdGNoT2JqZWN0SW5kZXhdXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIHRhc09ubHkgPyB0YXNSZXNbMF0gOiBleHRlbmRlZEhpdFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNoYXBlY2FzdChjYWxsYmFja3M6IEV4dGVuZGVkU2hhcGVDYXN0Q2FsbGJhY2tzKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB3cmFwQ2FsbGJhY2tzID0gKGJhdGNoT2JqZWN0OiBCYXRjaE9iamVjdCk6IEV4dGVuZGVkU2hhcGVDYXN0Q2FsbGJhY2tzID0+IHtcclxuICAgICAgY29uc3QgbmV3Q2FsbGJhY2tzOiBFeHRlbmRlZFNoYXBlQ2FzdENhbGxiYWNrcyA9IE9iamVjdC5jcmVhdGUobnVsbClcclxuICAgICAgaWYgKGNhbGxiYWNrcy5pbnRlcnNlY3RzQm91bmRzKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBuZXdDYWxsYmFja3MuaW50ZXJzZWN0c0JvdW5kcyA9IGNhbGxiYWNrcy5pbnRlcnNlY3RzQm91bmRzXHJcbiAgICAgIH1cclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIGlmIChjYWxsYmFja3MuaW50ZXJzZWN0c1RyaWFuZ2xlKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgIG5ld0NhbGxiYWNrcy5pbnRlcnNlY3RzVHJpYW5nbGUgPSAoXHJcbiAgICAgICAgICB0cmlhbmdsZTogRXh0ZW5kZWRUcmlhbmdsZSxcclxuICAgICAgICAgIHRyaWFuZ2xlSW5kZXg6IG51bWJlcixcclxuICAgICAgICAgIGNvbnRhaW5lZDogYm9vbGVhbixcclxuICAgICAgICAgIGRlcHRoOiBudW1iZXJcclxuICAgICAgICApOiBib29sZWFuIHwgdm9pZCA9PiB7XHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2tzLmludGVyc2VjdHNUcmlhbmdsZShcclxuICAgICAgICAgICAgdHJpYW5nbGUsXHJcbiAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXgsXHJcbiAgICAgICAgICAgIGNvbnRhaW5lZCxcclxuICAgICAgICAgICAgZGVwdGgsXHJcbiAgICAgICAgICAgIGJhdGNoT2JqZWN0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgIG5ld0NhbGxiYWNrcy5pbnRlcnNlY3RzUmFuZ2UgPSBjYWxsYmFja3MuaW50ZXJzZWN0c1JhbmdlXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgIG5ld0NhbGxiYWNrcy50cmF2ZXJzZUJvdW5kc09yZGVyID0gY2FsbGJhY2tzLnRyYXZlcnNlQm91bmRzT3JkZXJcclxuICAgICAgcmV0dXJuIG5ld0NhbGxiYWNrc1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXQgPSBmYWxzZVxyXG4gICAgLyoqIFdlIG9ubHkgY2FsbCBpbnRlcnNlY3RUQVNSYW5nZSBvbmNlIGZvciBlYWNoIGJhdGNoIG9iamVjdC4gKi9cclxuICAgIGNvbnN0IHZpc2l0ZWRPYmplY3RzOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbiB8IFNoYXBlY2FzdEludGVyc2VjdGlvbiB9ID0ge31cclxuICAgIHRoaXMuYWNjZWxlcmF0aW9uU3RydWN0dXJlLnNoYXBlY2FzdCh7XHJcbiAgICAgIGludGVyc2VjdHNCb3VuZHM6IChib3gsIGlzTGVhZiwgc2NvcmUsIGRlcHRoLCBub2RlSW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoY2FsbGJhY2tzLmludGVyc2VjdHNUQVMpIHtcclxuICAgICAgICAgIHJldHVybiBjYWxsYmFja3MuaW50ZXJzZWN0c1RBUyhib3gsIGlzTGVhZiwgc2NvcmUsIGRlcHRoLCBub2RlSW5kZXgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBpbnRlcnNlY3RzUmFuZ2U6ICh0cmlhbmdsZU9mZnNldDogbnVtYmVyLCB0cmlhbmdsZUNvdW50OiBudW1iZXIpID0+IHtcclxuICAgICAgICAvKiogVGhlIGluZGV4IGJ1ZmZlciBmb3IgdGhlIGJ2aCdzIGdlb21ldHJ5IHdpbGwgKm5ldmVyKiBiZSB1bmRlZmluZWQgYXMgaXQgdXNlcyBpbmRleGVkIGdlb21ldHJ5ICovXHJcbiAgICAgICAgY29uc3QgYmF0Y2hPYmplY3RzID0gbmV3IFNldDxCYXRjaE9iamVjdD4oKVxyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdHJpYW5nbGVDb3VudDsgaysrKSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleEJ1ZmZlckF0dHJpYnV0ZTogQnVmZmVyQXR0cmlidXRlID0gdGhpcy5hY2NlbGVyYXRpb25TdHJ1Y3R1cmVcclxuICAgICAgICAgICAgLmdlb21ldHJ5LmluZGV4IGFzIEJ1ZmZlckF0dHJpYnV0ZVxyXG4gICAgICAgICAgY29uc3QgdmVydEluZGV4ID0gaW5kZXhCdWZmZXJBdHRyaWJ1dGUuYXJyYXlbdHJpYW5nbGVPZmZzZXQgKiAzICsgayAqIDNdXHJcbiAgICAgICAgICBjb25zdCBiYXRjaE9iamVjdEluZGV4ID0gTWF0aC50cnVuYyhcclxuICAgICAgICAgICAgdmVydEluZGV4IC8gVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmUuQ1VCRV9WRVJUU1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgY29uc3QgYmF0Y2hPYmplY3QgPSB0aGlzLmJhdGNoT2JqZWN0c1tiYXRjaE9iamVjdEluZGV4XVxyXG4gICAgICAgICAgaWYgKGNhbGxiYWNrcy5pbnRlcnNlY3RUQVNSYW5nZSkge1xyXG4gICAgICAgICAgICBpZiAodmlzaXRlZE9iamVjdHNbYmF0Y2hPYmplY3QucmVuZGVyVmlldy5yZW5kZXJEYXRhLmlkXSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgIGNvbnRpbnVlXHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXQgPSBjYWxsYmFja3MuaW50ZXJzZWN0VEFTUmFuZ2UoYmF0Y2hPYmplY3QpXHJcbiAgICAgICAgICAgIHZpc2l0ZWRPYmplY3RzW2JhdGNoT2JqZWN0LnJlbmRlclZpZXcucmVuZGVyRGF0YS5pZF0gPSByZXRcclxuICAgICAgICAgICAgaWYgKHJldCkgYmF0Y2hPYmplY3RzLmFkZChiYXRjaE9iamVjdClcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJhdGNoT2JqZWN0cy5hZGQoYmF0Y2hPYmplY3QpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qKiBObyBiYXRjaCBvYmplY3Qgc2VsZWN0ZWQsIHN0b3AgaGVyZSAqL1xyXG4gICAgICAgIGlmICghYmF0Y2hPYmplY3RzLnNpemUpIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGJhdGNoT2JqZWN0IG9mIGJhdGNoT2JqZWN0cykge1xyXG4gICAgICAgICAgcmV0IHx8PSBiYXRjaE9iamVjdC5hY2NlbGVyYXRpb25TdHJ1Y3R1cmUuc2hhcGVjYXN0KFxyXG4gICAgICAgICAgICB3cmFwQ2FsbGJhY2tzKGJhdGNoT2JqZWN0KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIFdlIG5ldmVyIHRlc3QgYWdhaW5zIHRoZSBUQVMgdHJpYW5nbGVzIGJlY2F1c2UgdGhlcmUgaXMgbm8gcG9pbnQuIFRyYXZlcnNhbCBzdG9wcyBoZXJlICovXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIHJldFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3Nlc3RQb2ludFRvUG9pbnQocG9pbnQ6IFZlY3RvcjMpIHtcclxuICAgIHJldHVybiB0aGlzLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5idmguY2xvc2VzdFBvaW50VG9Qb2ludChwb2ludClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZXN0UG9pbnRUb1BvaW50SGFsZnBsYW5lKFxyXG4gICAgcG9pbnQ6IFZlY3RvcjMsXHJcbiAgICBwbGFuZU5vcm1hbDogVmVjdG9yMyxcclxuICAgIGZhbGxiYWNrPzogbnVtYmVyLFxyXG4gICAgdGFyZ2V0OiBIaXRQb2ludEluZm8gPSB7XHJcbiAgICAgIHBvaW50OiBuZXcgVmVjdG9yMygpLFxyXG4gICAgICBkaXN0YW5jZTogMCxcclxuICAgICAgZmFjZUluZGV4OiAwXHJcbiAgICB9LFxyXG4gICAgbWluVGhyZXNob2xkID0gMCxcclxuICAgIG1heFRocmVzaG9sZCA9IEluZmluaXR5XHJcbiAgKSB7XHJcbiAgICAvLyBlYXJseSBvdXQgaWYgdW5kZXIgbWluVGhyZXNob2xkXHJcbiAgICAvLyBza2lwIGNoZWNraW5nIGlmIG92ZXIgbWF4VGhyZXNob2xkXHJcbiAgICAvLyBzZXQgbWluVGhyZXNob2xkID0gbWF4VGhyZXNob2xkIHRvIHF1aWNrbHkgY2hlY2sgaWYgYSBwb2ludCBpcyB3aXRoaW4gYSB0aHJlc2hvbGRcclxuICAgIC8vIHJldHVybnMgSW5maW5pdHkgaWYgbm8gdmFsdWUgZm91bmRcclxuICAgIGNvbnN0IHRlbXAgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBjb25zdCB0ZW1wMSA9IG5ldyBWZWN0b3IzKClcclxuICAgIGNvbnN0IHRlbXAyID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgY29uc3QgbWluVGhyZXNob2xkU3EgPSBtaW5UaHJlc2hvbGQgKiBtaW5UaHJlc2hvbGRcclxuICAgIGNvbnN0IG1heFRocmVzaG9sZFNxID0gbWF4VGhyZXNob2xkICogbWF4VGhyZXNob2xkXHJcbiAgICBsZXQgY2xvc2VzdERpc3RhbmNlU3EgPSBJbmZpbml0eVxyXG4gICAgbGV0IGNsb3Nlc3REaXN0YW5jZVRyaUluZGV4ID0gLTFcclxuICAgIHRoaXMuYWNjZWxlcmF0aW9uU3RydWN0dXJlLmJ2aC5zaGFwZWNhc3Qoe1xyXG4gICAgICBib3VuZHNUcmF2ZXJzZU9yZGVyOiAoYm94OiBCb3gzKSA9PiB7XHJcbiAgICAgICAgdGVtcC5jb3B5KHBvaW50KS5jbGFtcChib3gubWluLCBib3gubWF4KVxyXG4gICAgICAgIHJldHVybiB0ZW1wLmRpc3RhbmNlVG9TcXVhcmVkKHBvaW50KVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBgY2xvc2VzdFBvaW50VG9Qb2ludGAgaW1wbGVtZW50YXRpb24uIEtlZXBpbmcgaXQgaW50YWN0IGZvciByZWZlcmVuY2VcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIGludGVyc2VjdHNCb3VuZHM6IChfYm94OiBCb3gzLCBfaXNMZWFmLCBzY29yZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHNjb3JlIDwgY2xvc2VzdERpc3RhbmNlU3EgJiYgc2NvcmUgPCBtYXhUaHJlc2hvbGRTcVxyXG4gICAgICB9LFxyXG4gICAgICBpbnRlcnNlY3RzUmFuZ2U6ICh0cmlhbmdsZU9mZnNldDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgLyoqIFRoZSBpbmRleCBidWZmZXIgZm9yIHRoZSBidmgncyBnZW9tZXRyeSB3aWxsICpuZXZlciogYmUgdW5kZWZpbmVkIGFzIGl0IHVzZXMgaW5kZXhlZCBnZW9tZXRyeSAqL1xyXG4gICAgICAgIGNvbnN0IGluZGV4QnVmZmVyQXR0cmlidXRlOiBCdWZmZXJBdHRyaWJ1dGUgPSB0aGlzLmFjY2VsZXJhdGlvblN0cnVjdHVyZVxyXG4gICAgICAgICAgLmdlb21ldHJ5LmluZGV4IGFzIEJ1ZmZlckF0dHJpYnV0ZVxyXG4gICAgICAgIGNvbnN0IHZlcnRJbmRleCA9IGluZGV4QnVmZmVyQXR0cmlidXRlLmFycmF5W3RyaWFuZ2xlT2Zmc2V0ICogM11cclxuICAgICAgICBjb25zdCBiYXRjaE9iamVjdEluZGV4ID0gTWF0aC50cnVuYyhcclxuICAgICAgICAgIHZlcnRJbmRleCAvIFRvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlLkNVQkVfVkVSVFNcclxuICAgICAgICApXHJcbiAgICAgICAgY29uc3QgYmF0Y2hPYmplY3Q6IEJhdGNoT2JqZWN0ID0gdGhpcy5iYXRjaE9iamVjdHNbYmF0Y2hPYmplY3RJbmRleF1cclxuICAgICAgICAvKiogQmVjYXVzZSB3ZSBjYW5ub3QgZ2V0IGEgcHJvcGVyIG1pbiBkaXN0YW5jZSB0byBnZW9tZXRyeSB3aGVuICpJbnNpZGUqIHRoZSBib3VuZHMgb2YgYSBiYXRjaCBvYmplY3QncyBib3VuZHMsXHJcbiAgICAgICAgICogIHdlIGp1c3QgdXNlIHRoZSBwcm92aWRlZCBmYWxsYmFjayB2YWx1ZSBhcyBtaW4gZGlzdC4gU2luZ2xlIG1lc2hlcyBtYWRlIG9mIGRpam9pbnQgc2V0cyBhcmUgcGFydGljdWxhcmx5IHN1c2NlcHRpYmxlXHJcbiAgICAgICAgICogIHRvIGluY29ycmVjdCBtaW4gZGlzdCBjYWxjdWxhdGlvbiwgdW5sZXNzIHdlIGdvIGluc2lkZSB0aGVpciBCQVMuIEJ1dCB3ZSB3YW50IHRvIGF2b2lkIHRoYXQgYWxsIGNvc3Qgc3BlZWQgcmVhc29uc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IHJldCA9IGJhdGNoT2JqZWN0LmFhYmIuY29udGFpbnNQb2ludChwb2ludClcclxuICAgICAgICBpZiAocmV0ICYmIGZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZVNxID0gZmFsbGJhY2sgKiBmYWxsYmFja1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKiogV2UgZG8gbm90IGludGVycnVwdCB0cmF2ZXJzYWwsIHRoZXJlIG1pZ2h0IGJlIG90aGVyIGNsb3NlciB2YWxpZCBnZW9tZXRyeSBhdmFpbGFibGUgKi9cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGludGVyc2VjdHNUcmlhbmdsZTogKHRyaSwgdHJpSW5kZXgpID0+IHtcclxuICAgICAgICB0cmkuY2xvc2VzdFBvaW50VG9Qb2ludChwb2ludCwgdGVtcClcclxuICAgICAgICBjb25zdCBkaXN0U3EgPSBwb2ludC5kaXN0YW5jZVRvU3F1YXJlZCh0ZW1wKVxyXG4gICAgICAgIGNvbnN0IHYgPSB0ZW1wMi5zdWJWZWN0b3JzKHRlbXAsIHBvaW50KVxyXG4gICAgICAgIGNvbnN0IHBsYW5hcml0eSA9IHBsYW5lTm9ybWFsLmRvdCh2KVxyXG4gICAgICAgIGlmIChwbGFuYXJpdHkgPj0gMCAmJiBkaXN0U3EgPCBjbG9zZXN0RGlzdGFuY2VTcSkge1xyXG4gICAgICAgICAgdGVtcDEuY29weSh0ZW1wKVxyXG4gICAgICAgICAgY2xvc2VzdERpc3RhbmNlU3EgPSBkaXN0U3FcclxuICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZVRyaUluZGV4ID0gdHJpSW5kZXhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXN0U3EgPCBtaW5UaHJlc2hvbGRTcSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGlmIChjbG9zZXN0RGlzdGFuY2VTcSA9PT0gSW5maW5pdHkpIHJldHVybiBudWxsXHJcblxyXG4gICAgY29uc3QgY2xvc2VzdERpc3RhbmNlID0gTWF0aC5zcXJ0KGNsb3Nlc3REaXN0YW5jZVNxKVxyXG5cclxuICAgIGlmICghdGFyZ2V0LnBvaW50KSB0YXJnZXQucG9pbnQgPSB0ZW1wMS5jbG9uZSgpXHJcbiAgICBlbHNlIHRhcmdldC5wb2ludC5jb3B5KHRlbXAxKVxyXG4gICAgOyh0YXJnZXQuZGlzdGFuY2UgPSBjbG9zZXN0RGlzdGFuY2UpLCAodGFyZ2V0LmZhY2VJbmRleCA9IGNsb3Nlc3REaXN0YW5jZVRyaUluZGV4KVxyXG5cclxuICAgIHJldHVybiB0YXJnZXRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCb3VuZGluZ0JveCh0YXJnZXQ6IEJveDMpOiBCb3gzIHtcclxuICAgIHRoaXMuYWNjZWxlcmF0aW9uU3RydWN0dXJlLmdldEJvdW5kaW5nQm94KHRhcmdldClcclxuICAgIHJldHVybiB0YXJnZXRcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgVGV4dCB9IGZyb20gJ3Ryb2lrYS10aHJlZS10ZXh0J1xyXG5pbXBvcnQgeyBCYXRjaGVkVGV4dCB9IGZyb20gJ3Ryb2lrYS10aHJlZS10ZXh0J1xyXG5pbXBvcnQgeyBUb3BMZXZlbEFjY2VsZXJhdGlvblN0cnVjdHVyZSB9IGZyb20gJy4vVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmUuanMnXHJcbmltcG9ydCB7XHJcbiAgQm94MyxcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBDYW1lcmEsXHJcbiAgQ29sb3IsXHJcbiAgRGF0YVRleHR1cmUsXHJcbiAgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSxcclxuICBGbG9hdFR5cGUsXHJcbiAgSW50MTZCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgSW50ZXJzZWN0aW9uLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE1hdHJpeDQsXHJcbiAgTWVzaCxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCxcclxuICBPYmplY3QzRCxcclxuICBSYXksXHJcbiAgUmF5Y2FzdGVyLFxyXG4gIFJHQkFGb3JtYXQsXHJcbiAgU2NlbmUsXHJcbiAgU3BoZXJlLFxyXG4gIFRleHR1cmUsXHJcbiAgVmVjdG9yM1xyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBCYXRjaE9iamVjdCB9IGZyb20gJy4uL2JhdGNoaW5nL0JhdGNoT2JqZWN0LmpzJ1xyXG5pbXBvcnQgeyBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24sIFNwZWNrbGVSYXljYXN0ZXIgfSBmcm9tICcuL1NwZWNrbGVSYXljYXN0ZXIuanMnXHJcbmltcG9ydCB7IERyYXdHcm91cCB9IGZyb20gJy4uL2JhdGNoaW5nL0JhdGNoLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4uL3V0aWxzL0xvZ2dlci5qcydcclxuaW1wb3J0IE1hdGVyaWFscyBmcm9tICcuLi9tYXRlcmlhbHMvTWF0ZXJpYWxzLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVRleHRNYXRlcmlhbCBmcm9tICcuLi9tYXRlcmlhbHMvU3BlY2tsZVRleHRNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICcuLi9jb252ZXJ0ZXIvR2VvbWV0cnkuanMnXHJcbmltcG9ydCB7IFRleHRCYXRjaE9iamVjdCB9IGZyb20gJy4uL2JhdGNoaW5nL1RleHRCYXRjaE9iamVjdC5qcydcclxuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzLCBTcGVja2xlV2ViR0xSZW5kZXJlciB9IGZyb20gJy4uLy4uL2luZGV4LmpzJ1xyXG5cclxuY29uc3QgcmF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBSYXkoKVxyXG5jb25zdCB0bXBJbnZlcnNlTWF0cml4ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXRyaXg0KClcclxuY29uc3QgdmVjQnVmZjAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCB2ZWNCdWZmMSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IHZlY0J1ZmYyID0gLyogQF9fUFVSRV9fICovIG5ldyBWZWN0b3IzKClcclxuY29uc3QgbWF0QnVmZjAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hdHJpeDQoKVxyXG5jb25zdCBtYXRCdWZmMSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWF0cml4NCgpXHJcbmNvbnN0IG1hdEJ1ZmYyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXRyaXg0KClcclxuXHJcbmV4cG9ydCBjbGFzcyBTcGVja2xlQmF0Y2hlZFRleHQgZXh0ZW5kcyBCYXRjaGVkVGV4dCB7XHJcbiAgZGVjbGFyZSBtYXRlcmlhbDogU3BlY2tsZVRleHRNYXRlcmlhbFxyXG5cclxuICBwcml2YXRlIHRhczogVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmVcclxuICBwcml2YXRlIF9iYXRjaE1hdGVyaWFsOiBTcGVja2xlVGV4dE1hdGVyaWFsXHJcbiAgcHJpdmF0ZSBfYmF0Y2hPYmplY3RzOiBCYXRjaE9iamVjdFtdXHJcbiAgcHJpdmF0ZSBfdGV4dE9iamVjdHM6IHsgW2lkOiBzdHJpbmddOiBUZXh0IH0gPSB7fVxyXG4gIHByaXZhdGUgX2RpcnR5OiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgcHVibGljIGdyb3VwczogQXJyYXk8RHJhd0dyb3VwPiA9IFtdXHJcbiAgcHVibGljIG1hdGVyaWFsczogTWF0ZXJpYWxbXSA9IFtdXHJcblxyXG4gIHByaXZhdGUgbWF0ZXJpYWxDYWNoZTogeyBbaWQ6IHN0cmluZ106IE1hdGVyaWFsIH0gPSB7fVxyXG4gIHByaXZhdGUgbWF0ZXJpYWxDYWNoZUxVVDogeyBbaWQ6IHN0cmluZ106IG51bWJlciB9ID0ge31cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBERUJVR19CSUxMQk9BUkRTID0gZmFsc2VcclxuICBwcml2YXRlIGRlYnVnTWVzaGVzOiBNZXNoW10gPSBbXVxyXG5cclxuICBwdWJsaWMgZ2V0IFRBUygpOiBUb3BMZXZlbEFjY2VsZXJhdGlvblN0cnVjdHVyZSB7XHJcbiAgICByZXR1cm4gdGhpcy50YXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYmF0Y2hPYmplY3RzKCk6IEJhdGNoT2JqZWN0W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JhdGNoT2JqZWN0c1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYXRjaE1hdGVyaWFsKCk6IE1hdGVyaWFsIHtcclxuICAgIHJldHVybiB0aGlzLl9iYXRjaE1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRpcnR5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXJ0eSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzQmlsbGJvYXJkZWQoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLl9iYXRjaE1hdGVyaWFsICYmXHJcbiAgICAgIHRoaXMuX2JhdGNoTWF0ZXJpYWwuZGVmaW5lcyAmJlxyXG4gICAgICB0aGlzLl9iYXRjaE1hdGVyaWFsLmRlZmluZXNbJ0JJTExCT0FSRCddXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QmF0Y2hNYXRlcmlhbChtYXRlcmlhbDogTWF0ZXJpYWwpIHtcclxuICAgIGlmICghKG1hdGVyaWFsIGluc3RhbmNlb2YgU3BlY2tsZVRleHRNYXRlcmlhbCkpIHtcclxuICAgICAgTG9nZ2VyLmVycm9yKFxyXG4gICAgICAgIGBTcGVja2xlQmF0Y2hlZFRleHQgcmVxdWlyZXMgYSBTcGVja2xlVGV4dE1hdGVyaWFsLiBGb3VuZCAke21hdGVyaWFsLmNvbnN0cnVjdG9yLm5hbWV9YFxyXG4gICAgICApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5fYmF0Y2hNYXRlcmlhbCA9IHRoaXMuZ2V0Q2FjaGVkTWF0ZXJpYWwobWF0ZXJpYWwpIGFzIFNwZWNrbGVUZXh0TWF0ZXJpYWxcclxuICAgIHRoaXMubWF0ZXJpYWwgPSB0aGlzLl9iYXRjaE1hdGVyaWFsXHJcbiAgICB0aGlzLm1hdGVyaWFscy5wdXNoKHRoaXMuX2JhdGNoTWF0ZXJpYWwpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QmF0Y2hPYmplY3RzKGJhdGNoT2JqZWN0czogQmF0Y2hPYmplY3RbXSwgdGV4dE9iamVjdHM6IFRleHRbXSkge1xyXG4gICAgdGhpcy5fYmF0Y2hPYmplY3RzID0gYmF0Y2hPYmplY3RzXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGJhdGNoT2JqZWN0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBpZCA9IGJhdGNoT2JqZWN0c1trXS5yZW5kZXJWaWV3LnJlbmRlckRhdGEuaWRcclxuICAgICAgdGhpcy5fdGV4dE9iamVjdHNbaWRdID0gdGV4dE9iamVjdHNba11cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9va3VwTWF0ZXJpYWwobWF0ZXJpYWw6IE1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLm1hdGVyaWFsQ2FjaGVbbWF0ZXJpYWwuaWRdIHx8XHJcbiAgICAgIHRoaXMubWF0ZXJpYWxDYWNoZVt0aGlzLm1hdGVyaWFsQ2FjaGVMVVRbbWF0ZXJpYWwuaWRdXVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENhY2hlZE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCwgY29weSA9IGZhbHNlKTogTWF0ZXJpYWwge1xyXG4gICAgbGV0IGNhY2hlZE1hdGVyaWFsID0gdGhpcy5sb29rdXBNYXRlcmlhbChtYXRlcmlhbClcclxuICAgIGlmICghY2FjaGVkTWF0ZXJpYWwpIHtcclxuICAgICAgY29uc3QgY2xvbmUgPSBuZXcgU3BlY2tsZVRleHRNYXRlcmlhbCh7fSlcclxuICAgICAgICAuY29weShtYXRlcmlhbClcclxuICAgICAgICAuZ2V0RGVyaXZlZEJhdGNoZWRNYXRlcmlhbCgpXHJcbiAgICAgIHRoaXMubWF0ZXJpYWxDYWNoZVttYXRlcmlhbC5pZF0gPSBjbG9uZVxyXG4gICAgICB0aGlzLm1hdGVyaWFsQ2FjaGVMVVRbY2xvbmUuaWRdID0gbWF0ZXJpYWwuaWRcclxuICAgICAgY2FjaGVkTWF0ZXJpYWwgPSBjbG9uZVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY29weSB8fFxyXG4gICAgICAobWF0ZXJpYWwgYXMgbmV2ZXIpWyduZWVkc0NvcHknXSB8fFxyXG4gICAgICAoY2FjaGVkTWF0ZXJpYWwgYXMgbmV2ZXIpWyduZWVkc0NvcHknXVxyXG4gICAgKSB7XHJcbiAgICAgIE1hdGVyaWFscy5mYXN0Q29weShtYXRlcmlhbCwgY2FjaGVkTWF0ZXJpYWwpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FjaGVkTWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBidWlsZFRBUygpIHtcclxuICAgIHRoaXMudGFzID0gbmV3IFRvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlKHRoaXMuYmF0Y2hPYmplY3RzKVxyXG4gICAgLyoqIFdlIGRvIGEgcmVmaXQgaGVyZSwgYmVjYXVzZSBmb3Igc29tZSByZWFzb24gdGhlIGJ2aCBsaWJyYXJ5IGluY29ycmVjdGx5IGNvbXB1dGVzIHRoZSB0b3RhbCBidmggYm91bmRzIGF0IGNyZWF0aW9uLFxyXG4gICAgICogIHNvIHdlIGZvcmNlIGEgcmVmaXQgaW4gb3JkZXIgdG8gZ2V0IHRoZSBwcm9wZXIgYm91bmRzIHZhbHVlIG91dCBvZiBpdFxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcy5yZWZpdCgpXHJcblxyXG4gICAgLyoqIENvcHkgY29tcHV0ZWQgYm91bmRzIG92ZXIgc28gdGhhdCB0aHJlZS5qcyBkb2Vzbid0IGZyZWFrIG91dCAqL1xyXG4gICAgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCA9IHRoaXMuVEFTLmdldEJvdW5kaW5nQm94KG5ldyBCb3gzKCkpXHJcbiAgICB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID0gdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveC5nZXRCb3VuZGluZ1NwaGVyZShcclxuICAgICAgbmV3IFNwaGVyZSgpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKiogVGhpcyBjb3VsZCBiZSBtYWRlIGZhc3Rlci4gQlVULCBhcyB0aGlzIHBvaW50IGluIHRpbWUgaXQncyBub3Qgd29ydGggdGhlIGVmZm9ydCAqL1xyXG4gIHB1YmxpYyB1cGRhdGVUcmFuc2Zvcm1zVW5pZm9ybSgpIHtcclxuICAgIGxldCBuZWVkc1VwZGF0ZSA9IGZhbHNlXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMuX2JhdGNoT2JqZWN0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBiYXRjaE9iamVjdCA9IHRoaXMuX2JhdGNoT2JqZWN0c1trXVxyXG4gICAgICBpZiAoIShuZWVkc1VwZGF0ZSB8fD0gYmF0Y2hPYmplY3QudHJhbnNmb3JtRGlydHkpKSBjb250aW51ZVxyXG4gICAgICBjb25zdCB0ZXh0T2JqZWN0ID0gdGhpcy5fdGV4dE9iamVjdHNbYmF0Y2hPYmplY3QucmVuZGVyVmlldy5yZW5kZXJEYXRhLmlkXVxyXG4gICAgICBiYXRjaE9iamVjdC50cmFuc2Zvcm0uZGVjb21wb3NlKFxyXG4gICAgICAgIHRleHRPYmplY3QucG9zaXRpb24sXHJcbiAgICAgICAgdGV4dE9iamVjdC5xdWF0ZXJuaW9uLFxyXG4gICAgICAgIHRleHRPYmplY3Quc2NhbGVcclxuICAgICAgKVxyXG4gICAgICB0ZXh0T2JqZWN0LnVwZGF0ZU1hdHJpeCgpXHJcbiAgICAgIC8vIE1hdHJpeFxyXG4gICAgICBjb25zdCBtYXRyaXggPSB0ZXh0T2JqZWN0Lm1hdHJpeC5lbGVtZW50c1xyXG4gICAgICBjb25zdCB0ZXh0dXJlID1cclxuICAgICAgICB0aGlzLl9kYXRhVGV4dHVyZXNbXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgIHRleHRPYmplY3QubWF0ZXJpYWwuaXNUZXh0T3V0bGluZU1hdGVyaWFsID8gJ291dGxpbmUnIDogJ21haW4nXHJcbiAgICAgICAgXVxyXG4gICAgICBjb25zdCBwYWNraW5nSW5mbyA9IHRoaXMuX21lbWJlcnMuZ2V0KHRleHRPYmplY3QpXHJcbiAgICAgIGlmIChwYWNraW5nSW5mbykge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWNraW5nSW5mby5pbmRleCAqIDMyXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFRleERhdGEodGV4dHVyZSwgc3RhcnRJbmRleCArIGksIG1hdHJpeFtpXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYmF0Y2hPYmplY3QudHJhbnNmb3JtRGlydHkgPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YXMgJiYgbmVlZHNVcGRhdGUpIHtcclxuICAgICAgdGhpcy50YXMucmVmaXQoKVxyXG4gICAgICB0aGlzLnRhcy5nZXRCb3VuZGluZ0JveCh0aGlzLnRhcy5ib3VuZHMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlTWF0ZXJpYWxUcmFuc2Zvcm1zVW5pZm9ybShtYXRlcmlhbDogTWF0ZXJpYWwpIHtcclxuICAgIG1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0R3JhZGllbnRUZXh0dXJlKHRleHR1cmU6IFRleHR1cmUpIHtcclxuICAgIHRoaXMuX2JhdGNoTWF0ZXJpYWwuc2V0R3JhZGllbnRUZXh0dXJlKHRleHR1cmUpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QmF0Y2hPYmplY3RNYXRlcmlhbChiYXRjaE9iamVjdDogQmF0Y2hPYmplY3QpIHtcclxuICAgIGNvbnN0IHJ2ID0gYmF0Y2hPYmplY3QucmVuZGVyVmlld1xyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKCh2YWx1ZSkgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHJ2LmJhdGNoU3RhcnQgPj0gdmFsdWUuc3RhcnQgJiZcclxuICAgICAgICBydi5iYXRjaFN0YXJ0ICsgcnYuYmF0Y2hDb3VudCA8PSB2YWx1ZS5jb3VudCArIHZhbHVlLnN0YXJ0XHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgICBpZiAoIWdyb3VwKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGBDb3VsZCBub3QgZ2V0IG1hdGVyaWFsIGZvciAke2JhdGNoT2JqZWN0LnJlbmRlclZpZXcucmVuZGVyRGF0YS5pZH1gKVxyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzW2dyb3VwLm1hdGVyaWFsSW5kZXhdXHJcbiAgfVxyXG5cclxuICAvLyBjb252ZXJ0cyB0aGUgZ2l2ZW4gQlZIIHJheWNhc3QgaW50ZXJzZWN0aW9uIHRvIGFsaWduIHdpdGggdGhlIHRocmVlLmpzIHJheWNhc3RcclxuICAvLyBzdHJ1Y3R1cmUgKGluY2x1ZGUgb2JqZWN0LCB3b3JsZCBzcGFjZSBkaXN0YW5jZSBhbmQgcG9pbnQpLlxyXG4gIHByaXZhdGUgY29udmVydFJheWNhc3RJbnRlcnNlY3QoXHJcbiAgICBoaXQ6IEludGVyc2VjdGlvbiB8IG51bGwsXHJcbiAgICBvYmplY3Q6IE9iamVjdDNELFxyXG4gICAgcmF5Y2FzdGVyOiBSYXljYXN0ZXJcclxuICApIHtcclxuICAgIGlmIChoaXQgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBoaXQucG9pbnQuYXBwbHlNYXRyaXg0KG9iamVjdC5tYXRyaXhXb3JsZClcclxuICAgIGhpdC5kaXN0YW5jZSA9IGhpdC5wb2ludC5kaXN0YW5jZVRvKHJheWNhc3Rlci5yYXkub3JpZ2luKVxyXG4gICAgaGl0Lm9iamVjdCA9IG9iamVjdFxyXG5cclxuICAgIGlmIChoaXQuZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBoaXQuZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaGl0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXREZWJ1Z0JveCgpIHtcclxuICAgIGNvbnN0IGRlYnVnQm94ID0gbmV3IE1lc2goXHJcbiAgICAgIG5ldyBCdWZmZXJHZW9tZXRyeSgpLFxyXG4gICAgICBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoeyB3aXJlZnJhbWU6IHRydWUsIGNvbG9yOiAweGZmMDAwMCB9KVxyXG4gICAgKVxyXG4gICAgZGVidWdCb3guZ2VvbWV0cnkuc2V0QXR0cmlidXRlKFxyXG4gICAgICAncG9zaXRpb24nLFxyXG4gICAgICBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShuZXcgQXJyYXkoMTIpLCAzKVxyXG4gICAgKVxyXG4gICAgZGVidWdCb3guZ2VvbWV0cnkuc2V0SW5kZXgoXHJcbiAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxyXG4gICAgICBuZXcgSW50MTZCdWZmZXJBdHRyaWJ1dGUoXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgMCwgMSwgMiwgLy8gRmlyc3QgdHJpYW5nbGU6IGJvdHRvbS1sZWZ0IOKGkiBib3R0b20tcmlnaHQg4oaSIHRvcC1yaWdodFxyXG4gICAgICAgICAgMCwgMiwgMyAvLyBTZWNvbmQgdHJpYW5nbGU6IGJvdHRvbS1sZWZ0IOKGkiB0b3AtcmlnaHQg4oaSIHRvcC1sZWZ0XHJcbiAgICAgICAgXSxcclxuICAgICAgICAxXHJcbiAgICAgIClcclxuICAgIClcclxuICAgIGRlYnVnQm94LmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLk9WRVJMQVkpXHJcbiAgICB0aGlzLnBhcmVudD8uYWRkKGRlYnVnQm94KVxyXG4gICAgcmV0dXJuIGRlYnVnQm94XHJcbiAgfVxyXG5cclxuICAvKiogRGVidWcgcHVycG9zZXMgb25seSAqL1xyXG4gIG9uQmVmb3JlUmVuZGVyKFxyXG4gICAgcmVuZGVyZXI6IFNwZWNrbGVXZWJHTFJlbmRlcmVyLFxyXG4gICAgc2NlbmU6IFNjZW5lLFxyXG4gICAgY2FtZXJhOiBDYW1lcmEsXHJcbiAgICBnZW9tZXRyeTogQnVmZmVyR2VvbWV0cnksXHJcbiAgICBtYXRlcmlhbDogTWF0ZXJpYWwsXHJcbiAgICBncm91cDogdW5rbm93blxyXG4gICkge1xyXG4gICAgc3VwZXIub25CZWZvcmVSZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXApXHJcbiAgICBpZiAodGhpcy5ERUJVR19CSUxMQk9BUkRTICYmIHRoaXMuaXNCaWxsYm9hcmRlZCkge1xyXG4gICAgICBjb25zdCB2ZXJ0aWNlcyA9IFtuZXcgVmVjdG9yMygpLCBuZXcgVmVjdG9yMygpLCBuZXcgVmVjdG9yMygpLCBuZXcgVmVjdG9yMygpXVxyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMuX2JhdGNoT2JqZWN0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIGlmICghdGhpcy5kZWJ1Z01lc2hlc1trXSkge1xyXG4gICAgICAgICAgdGhpcy5kZWJ1Z01lc2hlc1trXSA9IHRoaXMuaW5pdERlYnVnQm94KClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGV4dE1hdHJpeCA9ICh0aGlzLl9iYXRjaE9iamVjdHNba10gYXMgVGV4dEJhdGNoT2JqZWN0KS50ZXh0VHJhbnNmb3JtXHJcblxyXG4gICAgICAgIGNvbnN0IGJpbGxib2FyZFBvcyA9IHZlY0J1ZmYwLnNldChcclxuICAgICAgICAgIHRleHRNYXRyaXguZWxlbWVudHNbMTJdLFxyXG4gICAgICAgICAgdGV4dE1hdHJpeC5lbGVtZW50c1sxM10sXHJcbiAgICAgICAgICB0ZXh0TWF0cml4LmVsZW1lbnRzWzE0XVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgY29uc3QgYm94ID0gbmV3IEJveDMoKS5jb3B5KHRoaXMuX2JhdGNoT2JqZWN0c1trXS5hYWJiKVxyXG4gICAgICAgIGNvbnN0IG1pbiA9IHZlY0J1ZmYxLmNvcHkoYm94Lm1pbilcclxuICAgICAgICBjb25zdCBtYXggPSB2ZWNCdWZmMi5jb3B5KGJveC5tYXgpXHJcbiAgICAgICAgdmVydGljZXNbMF0uc2V0KG1pbi54LCBtaW4ueSwgMClcclxuICAgICAgICB2ZXJ0aWNlc1sxXS5zZXQobWF4LngsIG1pbi55LCAwKVxyXG4gICAgICAgIHZlcnRpY2VzWzJdLnNldChtYXgueCwgbWF4LnksIDApXHJcbiAgICAgICAgdmVydGljZXNbM10uc2V0KG1pbi54LCBtYXgueSwgMClcclxuXHJcbiAgICAgICAgY29uc3QgYmlsbGJvYXJkTWF0ID0gbWF0QnVmZjAubWFrZVRyYW5zbGF0aW9uKFxyXG4gICAgICAgICAgYmlsbGJvYXJkUG9zLngsXHJcbiAgICAgICAgICBiaWxsYm9hcmRQb3MueSxcclxuICAgICAgICAgIGJpbGxib2FyZFBvcy56XHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBiaWxsYm9hcmRNYXQubXVsdGlwbHkobWF0QnVmZjEuZXh0cmFjdFJvdGF0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCkpXHJcbiAgICAgICAgLy8gVE8gRE86IFRoaXMgaXMgb3V0IG9mIHBsYWNlLiBQcm9iYWJseSBoYXBwZW5pbmcgYmVjYXVzZSBhY2NlbGVyYXRpb24gc3RydWN0dXJlIGhhcyB0aGUgdGV4dCB0cmFuc2Zvcm0gYXMgaW5wdXQgdHJhbnNmb3JtXHJcbiAgICAgICAgYmlsbGJvYXJkTWF0Lm11bHRpcGx5KG1hdEJ1ZmYyLmNvcHkodGV4dE1hdHJpeCkuaW52ZXJ0KCkpXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGRlYnVnVmVydGV4ID0gdmVjQnVmZjIuY29weSh2ZXJ0aWNlc1tpXSlcclxuICAgICAgICAgIGRlYnVnVmVydGV4LmFwcGx5TWF0cml4NChiaWxsYm9hcmRNYXQpXHJcblxyXG4gICAgICAgICAgdGhpcy5kZWJ1Z01lc2hlc1trXS5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnNldFhZWihcclxuICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgZGVidWdWZXJ0ZXgueCxcclxuICAgICAgICAgICAgZGVidWdWZXJ0ZXgueSxcclxuICAgICAgICAgICAgZGVidWdWZXJ0ZXguelxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRlYnVnTWVzaGVzW2tdLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJheWNhc3QocmF5Y2FzdGVyOiBTcGVja2xlUmF5Y2FzdGVyLCBpbnRlcnNlY3RzOiBBcnJheTxJbnRlcnNlY3Rpb24+KSB7XHJcbiAgICAvKiogV2UgYnlwYXNzIHRoZSBUQVMgZm9yIGJpbGxib2FyZGVkIHRleHQgYmF0Y2hlcywgb3RoZXJ3aXNlIHdlIHdvdWxkIG5lZWQgdG8gcmVmaXQgaXQgZWFjaCBmcmFtZSAqL1xyXG4gICAgaWYgKHRoaXMuaXNCaWxsYm9hcmRlZCkge1xyXG4gICAgICBjb25zdCByYXlCdWZmID0gbmV3IFJheSgpXHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5fYmF0Y2hPYmplY3RzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dE1hdHJpeCA9ICh0aGlzLl9iYXRjaE9iamVjdHNba10gYXMgVGV4dEJhdGNoT2JqZWN0KS50ZXh0VHJhbnNmb3JtXHJcbiAgICAgICAgLyoqIFRoZSBiaWxsYm9hcmQgcG9zaXRpb24gaXMgdGhlIHRleHQgb2JqZWN0J3MgcG9zaXRpb24gc3RvcmVkIGluIGl0J3Mgd29ybGQgbWF0cml4ICovXHJcbiAgICAgICAgY29uc3QgYmlsbGJvYXJkUG9zID0gdmVjQnVmZjAuc2V0KFxyXG4gICAgICAgICAgdGV4dE1hdHJpeC5lbGVtZW50c1sxMl0sXHJcbiAgICAgICAgICB0ZXh0TWF0cml4LmVsZW1lbnRzWzEzXSxcclxuICAgICAgICAgIHRleHRNYXRyaXguZWxlbWVudHNbMTRdXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC8qKiBXZSBjb21wdXRlIHRoZSBtYXRyaXggdGhhdCBiaWxsYm9hcmRzIHRoZSB0ZXh0ICovXHJcbiAgICAgICAgY29uc3QgYmlsbGJvYXJkTWF0ID0gbWF0QnVmZjAubWFrZVRyYW5zbGF0aW9uKFxyXG4gICAgICAgICAgYmlsbGJvYXJkUG9zLngsXHJcbiAgICAgICAgICBiaWxsYm9hcmRQb3MueSxcclxuICAgICAgICAgIGJpbGxib2FyZFBvcy56XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGJpbGxib2FyZE1hdC5tdWx0aXBseShtYXRCdWZmMS5leHRyYWN0Um90YXRpb24ocmF5Y2FzdGVyLmNhbWVyYS5tYXRyaXhXb3JsZCkpXHJcbiAgICAgICAgYmlsbGJvYXJkTWF0Lm11bHRpcGx5KG1hdEJ1ZmYyLmNvcHkodGV4dE1hdHJpeCkuaW52ZXJ0KCkpXHJcbiAgICAgICAgLyoqIFdlIGludmVydCBpdCBpbiBvcmRlciB0byBhcHBseSB0byB0aGUgcmF5IGluc3RlYWQgb2YgdGhlIGdlb21ldHJ5ICovXHJcbiAgICAgICAgY29uc3QgaW52QmlsbGJvYXJkTWF0ID0gbWF0QnVmZjAuY29weShiaWxsYm9hcmRNYXQpLmludmVydCgpXHJcbiAgICAgICAgcmF5QnVmZi5jb3B5KHJheWNhc3Rlci5yYXkpXHJcbiAgICAgICAgcmF5QnVmZi5hcHBseU1hdHJpeDQoaW52QmlsbGJvYXJkTWF0KVxyXG5cclxuICAgICAgICAvKiogUmVndWxhciBpbnRlcnNlY3RpbmcgZnJvbSBoZXJlIG9uIG91dCBvbiBhIHBlciBiYXRjaCBvYmplY3QgbGV2ZWwgKi9cclxuICAgICAgICBpZiAocmF5Y2FzdGVyLmZpcnN0SGl0T25seSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5jb252ZXJ0UmF5Y2FzdEludGVyc2VjdChcclxuICAgICAgICAgICAgdGhpcy5fYmF0Y2hPYmplY3RzW2tdLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5yYXljYXN0Rmlyc3QoXHJcbiAgICAgICAgICAgICAgcmF5QnVmZixcclxuICAgICAgICAgICAgICB0aGlzLl9iYXRjaE1hdGVyaWFsXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMgYXMgdW5rbm93biBhcyBPYmplY3QzRCxcclxuICAgICAgICAgICAgcmF5Y2FzdGVyXHJcbiAgICAgICAgICApIGFzIEV4dGVuZGVkTWVzaEludGVyc2VjdGlvblxyXG4gICAgICAgICAgaWYgKGhpdCkge1xyXG4gICAgICAgICAgICBoaXQuYmF0Y2hPYmplY3QgPSB0aGlzLl9iYXRjaE9iamVjdHNba11cclxuICAgICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKGhpdClcclxuICAgICAgICAgICAgYnJlYWsgLy8gV2UgYnJlYWsgaGVyZSBhcyB3ZSBvbmx5IHdhbnQgdGhlIGZpcnN0IGhpdFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBoaXRzID0gdGhpcy5fYmF0Y2hPYmplY3RzW2tdLmFjY2VsZXJhdGlvblN0cnVjdHVyZS5yYXljYXN0KFxyXG4gICAgICAgICAgICByYXlCdWZmLFxyXG4gICAgICAgICAgICB0aGlzLl9iYXRjaE1hdGVyaWFsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGhpdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhpdCA9IHRoaXMuY29udmVydFJheWNhc3RJbnRlcnNlY3QoXHJcbiAgICAgICAgICAgICAgaGl0c1tpXSxcclxuICAgICAgICAgICAgICB0aGlzIGFzIHVua25vd24gYXMgT2JqZWN0M0QsXHJcbiAgICAgICAgICAgICAgcmF5Y2FzdGVyXHJcbiAgICAgICAgICAgICkgYXMgRXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgIGlmIChoaXQpIHtcclxuICAgICAgICAgICAgICBoaXQuYmF0Y2hPYmplY3QgPSB0aGlzLl9iYXRjaE9iamVjdHNba11cclxuICAgICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goaGl0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy50YXMpIHtcclxuICAgICAgICBpZiAodGhpcy5fYmF0Y2hNYXRlcmlhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm5cclxuXHJcbiAgICAgICAgdG1wSW52ZXJzZU1hdHJpeC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpXHJcbiAgICAgICAgcmF5LmNvcHkocmF5Y2FzdGVyLnJheSkuYXBwbHlNYXRyaXg0KHRtcEludmVyc2VNYXRyaXgpXHJcbiAgICAgICAgLyoqIFRleHRzIGFyZSBhbGwgcXVhZHMuIEludGVyc2VjdGluZyB0aGVpciBCQVMgaXMgcmVkdW5kYW50ICovXHJcbiAgICAgICAgY29uc3QgdGFzT25seSA9IHJheWNhc3Rlci5pbnRlcnNlY3RUQVNPbmx5IHx8IHRydWVcclxuXHJcbiAgICAgICAgaWYgKHJheWNhc3Rlci5maXJzdEhpdE9ubHkgPT09IHRydWUpIHtcclxuICAgICAgICAgIGNvbnN0IGhpdCA9IHRoaXMuY29udmVydFJheWNhc3RJbnRlcnNlY3QoXHJcbiAgICAgICAgICAgIHRoaXMudGFzLnJheWNhc3RGaXJzdChyYXksIHRhc09ubHksIHRoaXMuX2JhdGNoTWF0ZXJpYWwpLFxyXG4gICAgICAgICAgICB0aGlzIGFzIHVua25vd24gYXMgT2JqZWN0M0QsXHJcbiAgICAgICAgICAgIHJheWNhc3RlclxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaWYgKGhpdCkge1xyXG4gICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goaGl0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBoaXRzID0gdGhpcy50YXMucmF5Y2FzdChyYXksIHRhc09ubHksIHRoaXMuX2JhdGNoTWF0ZXJpYWwpXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGhpdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhpdCA9IHRoaXMuY29udmVydFJheWNhc3RJbnRlcnNlY3QoXHJcbiAgICAgICAgICAgICAgaGl0c1tpXSxcclxuICAgICAgICAgICAgICB0aGlzIGFzIHVua25vd24gYXMgT2JqZWN0M0QsXHJcbiAgICAgICAgICAgICAgcmF5Y2FzdGVyXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgaWYgKGhpdCkge1xyXG4gICAgICAgICAgICAgIGludGVyc2VjdHMucHVzaChoaXQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3VwZXIucmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgYmF0Y2hlZCBnZW9tZXRyeSBib3VuZHMgdG8gaG9sZCBhbGwgbWVtYmVyc1xyXG4gICAqL1xyXG4gIHVwZGF0ZUJvdW5kcygpIHtcclxuICAgIGlmICghdGhpcy5fZGlydHkpIHJldHVyblxyXG4gICAgLy8gVXBkYXRlIG1lbWJlciBsb2NhbCBtYXRyaWNlcyBhbmQgdGhlIG92ZXJhbGwgYm91bmRzXHJcbiAgICBjb25zdCB0ZW1wQm94MyA9IG5ldyBCb3gzKClcclxuICAgIGNvbnN0IGJib3ggPSAodGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCA/PyBuZXcgQm94MygpKS5tYWtlRW1wdHkoKVxyXG4gICAgdGhpcy5fbWVtYmVycy5mb3JFYWNoKChfLCB0ZXh0KSA9PiB7XHJcbiAgICAgIGlmICh0ZXh0Lm1hdHJpeEF1dG9VcGRhdGUpIHRleHQudXBkYXRlTWF0cml4KCkgLy8gaWdub3JlIHdvcmxkIG1hdHJpeFxyXG4gICAgICB0ZW1wQm94My5jb3B5KHRleHQuZ2VvbWV0cnkuYm91bmRpbmdCb3ggPz8gbmV3IEJveDMoKSkuYXBwbHlNYXRyaXg0KHRleHQubWF0cml4KVxyXG4gICAgICBiYm94LnVuaW9uKHRlbXBCb3gzKVxyXG4gICAgfSlcclxuICAgIGJib3guZ2V0Qm91bmRpbmdTcGhlcmUodGhpcy5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA/PyBuZXcgU3BoZXJlKCkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0ge1RleHR9IHRleHRcclxuICAgKi9cclxuICBhZGRUZXh0KHRleHQ6IFRleHQpIHtcclxuICAgIGlmICghdGhpcy5fbWVtYmVycy5oYXModGV4dCkpIHtcclxuICAgICAgdGhpcy5fbWVtYmVycy5zZXQodGV4dCwge1xyXG4gICAgICAgIGluZGV4OiAtMSxcclxuICAgICAgICBnbHlwaENvdW50OiAtMSxcclxuICAgICAgICBkaXJ0eTogdHJ1ZSxcclxuICAgICAgICBuZWVkc1VwZGF0ZTogdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ3N5bmNjb21wbGV0ZScsIHRoaXMuX29uTWVtYmVyU3luY2VkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUZXhEYXRhKHRleHR1cmU6IERhdGFUZXh0dXJlLCBpbmRleDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB0ZXhEYXRhID0gdGV4dHVyZS5pbWFnZS5kYXRhXHJcbiAgICBpZiAodmFsdWUgIT09IHRleERhdGFbaW5kZXhdKSB7XHJcbiAgICAgIHRleERhdGFbaW5kZXhdID0gdmFsdWVcclxuICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgRGF0YSB0ZXh0dXJlIHBhY2tpbmcgc3RyYXRlZ3k6XHJcblxyXG4gICMgQ29tbW9uOlxyXG4gIDAtMTU6IG1hdHJpeFxyXG4gIDE2LTE5OiB1VHJvaWthVG90YWxCb3VuZHNcclxuICAyMC0yMzogdVRyb2lrYUNsaXBSZWN0XHJcbiAgMjQ6IGRpZmZ1c2UgKGNvbG9yL291dGxpbmVDb2xvcilcclxuICAyNTogdVRyb2lrYUZpbGxPcGFjaXR5IChmaWxsT3BhY2l0eS9vdXRsaW5lT3BhY2l0eSlcclxuICAyNjogdVRyb2lrYUN1cnZlUmFkaXVzXHJcbiAgMjc6IDxibGFuaz5cclxuXHJcbiAgIyBNYWluOlxyXG4gIDI4OiB1VHJvaWthU3Ryb2tlV2lkdGhcclxuICAyOTogdVRyb2lrYVN0cm9rZUNvbG9yXHJcbiAgMzA6IHVUcm9pa2FTdHJva2VPcGFjaXR5XHJcblxyXG4gICMgT3V0bGluZTpcclxuICAyOC0yOTogdVRyb2lrYVBvc2l0aW9uT2Zmc2V0XHJcbiAgMzA6IHVUcm9pa2FFZGdlT2Zmc2V0XHJcbiAgMzE6IHVUcm9pa2FCbHVyUmFkaXVzXHJcbiAgKi9cclxuXHJcbiAgLyoqXHJcbiAgICogQG92ZXJyaWRlXHJcbiAgICogUGF0Y2hlZCB2ZXJzaW9uIHRoYXQgYWxsb3dzOlxyXG4gICAqIC0gSW5kaXZpZHVhbCB0ZXh0IG9wYWNpdGllc1xyXG4gICAqIC0gQ29vcmRpbmF0ZSBpbnNpZGUgZ3JhZGllbnQvcmFtcCB0ZXh0dXJlIDwyNz5cclxuICAgKi9cclxuICBfcHJlcGFyZUZvclJlbmRlcihtYXRlcmlhbDogU3BlY2tsZVRleHRNYXRlcmlhbCkge1xyXG4gICAgaWYgKCF0aGlzLl9kaXJ0eSkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZVxyXG5cclxuICAgIGNvbnN0IGZsb2F0c1Blck1lbWJlciA9IDMyXHJcbiAgICBjb25zdCB0ZW1wQ29sb3IgPSBuZXcgQ29sb3IoKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBjb25zdCBpc091dGxpbmUgPSBtYXRlcmlhbC5pc1RleHRPdXRsaW5lTWF0ZXJpYWxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgbWF0ZXJpYWwudW5pZm9ybXMudVRyb2lrYUlzT3V0bGluZS52YWx1ZSA9IGlzT3V0bGluZVxyXG5cclxuICAgIC8vIFJlc2l6ZSB0aGUgdGV4dHVyZSB0byBmaXQgaW4gcG93ZXJzIG9mIDJcclxuICAgIGxldCB0ZXh0dXJlID0gdGhpcy5fZGF0YVRleHR1cmVzW2lzT3V0bGluZSA/ICdvdXRsaW5lJyA6ICdtYWluJ11cclxuICAgIGNvbnN0IGRhdGFMZW5ndGggPSBNYXRoLnBvdyhcclxuICAgICAgMixcclxuICAgICAgTWF0aC5jZWlsKE1hdGgubG9nMih0aGlzLl9tZW1iZXJzLnNpemUgKiBmbG9hdHNQZXJNZW1iZXIpKVxyXG4gICAgKVxyXG4gICAgaWYgKCF0ZXh0dXJlIHx8IGRhdGFMZW5ndGggIT09IHRleHR1cmUuaW1hZ2UuZGF0YS5sZW5ndGgpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coYHJlc2l6aW5nOiAke2RhdGFMZW5ndGh9YCk7XHJcbiAgICAgIGlmICh0ZXh0dXJlKSB0ZXh0dXJlLmRpc3Bvc2UoKVxyXG4gICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKGRhdGFMZW5ndGggLyA0LCAxMDI0KVxyXG4gICAgICB0ZXh0dXJlID0gdGhpcy5fZGF0YVRleHR1cmVzW2lzT3V0bGluZSA/ICdvdXRsaW5lJyA6ICdtYWluJ10gPSBuZXcgRGF0YVRleHR1cmUoXHJcbiAgICAgICAgbmV3IEZsb2F0MzJBcnJheShkYXRhTGVuZ3RoKSxcclxuICAgICAgICB3aWR0aCxcclxuICAgICAgICBkYXRhTGVuZ3RoIC8gNCAvIHdpZHRoLFxyXG4gICAgICAgIFJHQkFGb3JtYXQsXHJcbiAgICAgICAgRmxvYXRUeXBlXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9tZW1iZXJzLmZvckVhY2goKHBhY2tpbmdJbmZvLCB0ZXh0KSA9PiB7XHJcbiAgICAgIGlmIChwYWNraW5nSW5mby5pbmRleCA+IC0xICYmIHBhY2tpbmdJbmZvLm5lZWRzVXBkYXRlKSB7XHJcbiAgICAgICAgcGFja2luZ0luZm8ubmVlZHNVcGRhdGUgPSBmYWxzZVxyXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWNraW5nSW5mby5pbmRleCAqIGZsb2F0c1Blck1lbWJlclxyXG5cclxuICAgICAgICAvLyBNYXRyaXhcclxuICAgICAgICBjb25zdCBtYXRyaXggPSB0ZXh0Lm1hdHJpeC5lbGVtZW50c1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuc2V0VGV4RGF0YSh0ZXh0dXJlLCBzdGFydEluZGV4ICsgaSwgbWF0cml4W2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWwuZGVmaW5lcyAmJiBtYXRlcmlhbC5kZWZpbmVzWydVU0VfUlRFJ10gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBuZXcgVmVjdG9yMyhtYXRyaXhbMTJdLCBtYXRyaXhbMTNdLCBtYXRyaXhbMTRdKVxyXG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25Mb3cgPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbkhpZ2ggPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgICAgICBHZW9tZXRyeS5Eb3VibGVUb0hpZ2hMb3dWZWN0b3IodHJhbnNsYXRpb24sIHRyYW5zbGF0aW9uTG93LCB0cmFuc2xhdGlvbkhpZ2gpXHJcbiAgICAgICAgICB0aGlzLnNldFRleERhdGEodGV4dHVyZSwgc3RhcnRJbmRleCArIDMsIHRyYW5zbGF0aW9uTG93LngpXHJcbiAgICAgICAgICB0aGlzLnNldFRleERhdGEodGV4dHVyZSwgc3RhcnRJbmRleCArIDcsIHRyYW5zbGF0aW9uTG93LnkpXHJcbiAgICAgICAgICB0aGlzLnNldFRleERhdGEodGV4dHVyZSwgc3RhcnRJbmRleCArIDExLCB0cmFuc2xhdGlvbkxvdy56KVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBMZXQgdGhlIG1lbWJlciBwb3B1bGF0ZSB0aGUgdW5pZm9ybXMsIHNpbmNlIHRoYXQgZG9lcyBhbGwgdGhlIGFwcHJvcHJpYXRlXHJcbiAgICAgICAgLy8gbG9naWMgYW5kIGhhbmRsaW5nIG9mIGRlZmF1bHRzLCBhbmQgd2UnbGwganVzdCBncmFiIHRoZSByZXN1bHRzIGZyb20gdGhlcmVcclxuICAgICAgICB0ZXh0Ll9wcmVwYXJlRm9yUmVuZGVyKG1hdGVyaWFsKVxyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgIHVUcm9pa2FUb3RhbEJvdW5kcyxcclxuICAgICAgICAgIHVUcm9pa2FDbGlwUmVjdCxcclxuICAgICAgICAgIHVUcm9pa2FQb3NpdGlvbk9mZnNldCxcclxuICAgICAgICAgIHVUcm9pa2FFZGdlT2Zmc2V0LFxyXG4gICAgICAgICAgdVRyb2lrYUJsdXJSYWRpdXMsXHJcbiAgICAgICAgICB1VHJvaWthU3Ryb2tlV2lkdGgsXHJcbiAgICAgICAgICB1VHJvaWthU3Ryb2tlQ29sb3IsXHJcbiAgICAgICAgICB1VHJvaWthU3Ryb2tlT3BhY2l0eSxcclxuICAgICAgICAgIHVUcm9pa2FGaWxsT3BhY2l0eSxcclxuICAgICAgICAgIHVUcm9pa2FDdXJ2ZVJhZGl1c1xyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgfSA9IG1hdGVyaWFsLnVuaWZvcm1zXHJcblxyXG4gICAgICAgIC8vIFRvdGFsIGJvdW5kcyBmb3IgdXZcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5zZXRUZXhEYXRhKFxyXG4gICAgICAgICAgICB0ZXh0dXJlLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4ICsgMTYgKyBpLFxyXG4gICAgICAgICAgICB1VHJvaWthVG90YWxCb3VuZHMudmFsdWUuZ2V0Q29tcG9uZW50KGkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDbGlwIHJlY3RcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5zZXRUZXhEYXRhKFxyXG4gICAgICAgICAgICB0ZXh0dXJlLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4ICsgMjAgKyBpLFxyXG4gICAgICAgICAgICB1VHJvaWthQ2xpcFJlY3QudmFsdWUuZ2V0Q29tcG9uZW50KGkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgIGxldCBjb2xvciA9IGlzT3V0bGluZSA/IHRleHQub3V0bGluZUNvbG9yIHx8IDAgOiB0ZXh0LmNvbG9yXHJcbiAgICAgICAgaWYgKGNvbG9yID09PSBudWxsKSBjb2xvciA9IHRoaXMuY29sb3JcclxuICAgICAgICBpZiAoY29sb3IgPT09IG51bGwpIGNvbG9yID0gdGhpcy5tYXRlcmlhbC5jb2xvclxyXG4gICAgICAgIGlmIChjb2xvciA9PT0gbnVsbCkgY29sb3IgPSAweGZmZmZmZlxyXG4gICAgICAgIHRoaXMuc2V0VGV4RGF0YSh0ZXh0dXJlLCBzdGFydEluZGV4ICsgMjQsIHRlbXBDb2xvci5zZXQoY29sb3IpLmdldEhleCgpKVxyXG5cclxuICAgICAgICAvLyBGaWxsIG9wYWNpdHkgLyBvdXRsaW5lIG9wYWNpdHlcclxuICAgICAgICB0aGlzLnNldFRleERhdGEoXHJcbiAgICAgICAgICB0ZXh0dXJlLFxyXG4gICAgICAgICAgc3RhcnRJbmRleCArIDI1LFxyXG4gICAgICAgICAgKHRleHQubWF0ZXJpYWwgYXMgTWF0ZXJpYWwpLm9wYWNpdHkgPz8gdVRyb2lrYUZpbGxPcGFjaXR5LnZhbHVlXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICAvLyBDdXJ2ZSByYWRpdXNcclxuICAgICAgICB0aGlzLnNldFRleERhdGEodGV4dHVyZSwgc3RhcnRJbmRleCArIDI2LCB1VHJvaWthQ3VydmVSYWRpdXMudmFsdWUpXHJcbiAgICAgICAgLy8gQmlsbGJvYXJkIGhlaWdodFxyXG4gICAgICAgIHRoaXMuc2V0VGV4RGF0YSh0ZXh0dXJlLCBzdGFydEluZGV4ICsgMjcsIHRleHQudXNlckRhdGEuZ3JhZGllbnRJbmRleClcclxuXHJcbiAgICAgICAgaWYgKGlzT3V0bGluZSkge1xyXG4gICAgICAgICAgLy8gT3V0bGluZSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICB0aGlzLnNldFRleERhdGEodGV4dHVyZSwgc3RhcnRJbmRleCArIDI4LCB1VHJvaWthUG9zaXRpb25PZmZzZXQudmFsdWUueClcclxuICAgICAgICAgIHRoaXMuc2V0VGV4RGF0YSh0ZXh0dXJlLCBzdGFydEluZGV4ICsgMjksIHVUcm9pa2FQb3NpdGlvbk9mZnNldC52YWx1ZS55KVxyXG4gICAgICAgICAgdGhpcy5zZXRUZXhEYXRhKHRleHR1cmUsIHN0YXJ0SW5kZXggKyAzMCwgdVRyb2lrYUVkZ2VPZmZzZXQudmFsdWUpXHJcbiAgICAgICAgICB0aGlzLnNldFRleERhdGEodGV4dHVyZSwgc3RhcnRJbmRleCArIDMxLCB1VHJvaWthQmx1clJhZGl1cy52YWx1ZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gU3Ryb2tlIHByb3BlcnRpZXNcclxuICAgICAgICAgIHRoaXMuc2V0VGV4RGF0YSh0ZXh0dXJlLCBzdGFydEluZGV4ICsgMjgsIHVUcm9pa2FTdHJva2VXaWR0aC52YWx1ZSlcclxuICAgICAgICAgIHRoaXMuc2V0VGV4RGF0YShcclxuICAgICAgICAgICAgdGV4dHVyZSxcclxuICAgICAgICAgICAgc3RhcnRJbmRleCArIDI5LFxyXG4gICAgICAgICAgICB0ZW1wQ29sb3Iuc2V0KHVUcm9pa2FTdHJva2VDb2xvci52YWx1ZSkuZ2V0SGV4KClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHRoaXMuc2V0VGV4RGF0YSh0ZXh0dXJlLCBzdGFydEluZGV4ICsgMzAsIHVUcm9pa2FTdHJva2VPcGFjaXR5LnZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIG1hdGVyaWFsLnNldE1hdHJpeFRleHR1cmUodGV4dHVyZSlcclxuXHJcbiAgICAvLyBGb3IgdGhlIG5vbi1tZW1iZXItc3BlY2lmaWMgdW5pZm9ybXM6XHJcbiAgICBUZXh0LnByb3RvdHlwZS5fcHJlcGFyZUZvclJlbmRlci5jYWxsKHRoaXMsIG1hdGVyaWFsKVxyXG4gIH1cclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cclxuaW1wb3J0IHsgQm94MywgRXVsZXIsIE1hdHJpeDQsIFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgTm9kZVJlbmRlclZpZXcgfSBmcm9tICcuLi90cmVlL05vZGVSZW5kZXJWaWV3LmpzJ1xyXG5pbXBvcnQgeyBHZW9tZXRyeSB9IGZyb20gJy4uL2NvbnZlcnRlci9HZW9tZXRyeS5qcydcclxuaW1wb3J0IHtcclxuICBBY2NlbGVyYXRpb25TdHJ1Y3R1cmUsXHJcbiAgRGVmYXVsdEJWSE9wdGlvbnNcclxufSBmcm9tICcuLi9vYmplY3RzL0FjY2VsZXJhdGlvblN0cnVjdHVyZS5qcydcclxuaW1wb3J0IHsgTWVzaEJWSCB9IGZyb20gJ3RocmVlLW1lc2gtYnZoJ1xyXG5cclxuZXhwb3J0IHR5cGUgVmVjdG9yTGlrZSA9XHJcbiAgfCB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6PzogbnVtYmVyOyB3PzogbnVtYmVyIH1cclxuICB8IHVuZGVmaW5lZFxyXG4gIHwgbnVsbFxyXG5leHBvcnQgdHlwZSBWZWN0b3IzTGlrZSA9IFZlY3Rvckxpa2UgJiB7IHo6IG51bWJlciB9XHJcbmV4cG9ydCB0eXBlIFZlY3RvcjRMaWtlID0gVmVjdG9yM0xpa2UgJiB7IHc6IG51bWJlciB9XHJcblxyXG5leHBvcnQgY2xhc3MgQmF0Y2hPYmplY3Qge1xyXG4gIHByb3RlY3RlZCBfcmVuZGVyVmlldzogTm9kZVJlbmRlclZpZXdcclxuICBwcm90ZWN0ZWQgX2FjY2VsZXJhdGlvblN0cnVjdHVyZTogQWNjZWxlcmF0aW9uU3RydWN0dXJlXHJcbiAgcHJvdGVjdGVkIF9iYXRjaEluZGV4OiBudW1iZXJcclxuICBwcm90ZWN0ZWQgX2xvY2FsT3JpZ2luOiBWZWN0b3IzXHJcbiAgcHVibGljIHRyYW5zZm9ybTogTWF0cml4NFxyXG4gIHB1YmxpYyB0cmFuc2Zvcm1JbnY6IE1hdHJpeDRcclxuXHJcbiAgcHVibGljIHRhc1ZlcnRJbmRleFN0YXJ0OiBudW1iZXJcclxuICBwdWJsaWMgdGFzVmVydEluZGV4RW5kOiBudW1iZXJcclxuXHJcbiAgcHVibGljIHF1YXRlcm5pb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpXHJcbiAgcHVibGljIGV1bGVyVmFsdWU6IEV1bGVyID0gbmV3IEV1bGVyKClcclxuICBwdWJsaWMgcGl2b3RfSGlnaDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICBwdWJsaWMgcGl2b3RfTG93OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHB1YmxpYyB0cmFuc2xhdGlvbjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICBwdWJsaWMgc2NhbGVWYWx1ZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpXHJcbiAgcHVibGljIHBpdm90VmFsdWU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG4gIHByb3RlY3RlZCBzdGF0aWMgbWF0QnVmZjA6IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcbiAgcHJvdGVjdGVkIHN0YXRpYyBtYXRCdWZmMTogTWF0cml4NCA9IG5ldyBNYXRyaXg0KClcclxuICBwcm90ZWN0ZWQgc3RhdGljIG1hdEJ1ZmYyOiBNYXRyaXg0ID0gbmV3IE1hdHJpeDQoKVxyXG4gIHByb3RlY3RlZCBzdGF0aWMgZXVsZXJCdWZmOiBFdWxlciA9IG5ldyBFdWxlcigpXHJcbiAgcHJvdGVjdGVkIHN0YXRpYyB0cmFuc2xhdGlvbkJ1ZmY6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJvdGVjdGVkIHN0YXRpYyBzY2FsZUJ1ZmY6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJvdGVjdGVkIHN0YXRpYyBwaXZvdEJ1ZmY6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG4gIHB1YmxpYyB0cmFuc2Zvcm1EaXJ0eSA9IHRydWVcclxuXHJcbiAgcHVibGljIGdldCByZW5kZXJWaWV3KCk6IE5vZGVSZW5kZXJWaWV3IHtcclxuICAgIHJldHVybiB0aGlzLl9yZW5kZXJWaWV3XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjY2VsZXJhdGlvblN0cnVjdHVyZSgpOiBBY2NlbGVyYXRpb25TdHJ1Y3R1cmUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjY2VsZXJhdGlvblN0cnVjdHVyZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYXRjaEluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmF0Y2hJbmRleFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhYWJiKCk6IEJveDMge1xyXG4gICAgaWYgKHRoaXMucmVuZGVyVmlldy5hYWJiKSB7XHJcbiAgICAgIGNvbnN0IGJveCA9IG5ldyBCb3gzKCkuY29weSh0aGlzLnJlbmRlclZpZXcuYWFiYilcclxuICAgICAgYm94LmFwcGx5TWF0cml4NCh0aGlzLnRyYW5zZm9ybSlcclxuICAgICAgcmV0dXJuIGJveFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBCb3gzKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbG9jYWxPcmlnaW4oKTogVmVjdG9yMyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxPcmlnaW5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcGl2b3QodmFsdWU6IFZlY3RvcjMgfCBudWxsKSB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHRoaXMucGl2b3RWYWx1ZS5jb3B5KHRoaXMuX2xvY2FsT3JpZ2luKVxyXG4gICAgfSBlbHNlIHRoaXMucGl2b3RWYWx1ZS5jb3B5KHZhbHVlKVxyXG4gICAgR2VvbWV0cnkuRG91YmxlVG9IaWdoTG93VmVjdG9yKHRoaXMucGl2b3RWYWx1ZSwgdGhpcy5waXZvdF9Mb3csIHRoaXMucGl2b3RfSGlnaClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcG9zaXRpb24odmFsdWU6IFZlY3RvcjMpIHtcclxuICAgIHRoaXMudHJhbnNmb3JtVFJTKHZhbHVlLCB0aGlzLmV1bGVyVmFsdWUsIHRoaXMuc2NhbGVWYWx1ZSwgdGhpcy5waXZvdFZhbHVlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBldWxlcihldWxlcjogRXVsZXIpIHtcclxuICAgIHRoaXMudHJhbnNmb3JtVFJTKHRoaXMudHJhbnNsYXRpb24sIGV1bGVyLCB0aGlzLnNjYWxlVmFsdWUsIHRoaXMucGl2b3RWYWx1ZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2NhbGUoc2NhbGU6IFZlY3RvcjMpIHtcclxuICAgIHRoaXMudHJhbnNmb3JtVFJTKHRoaXMudHJhbnNsYXRpb24sIHRoaXMuZXVsZXJWYWx1ZSwgc2NhbGUsIHRoaXMucGl2b3RWYWx1ZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihyZW5kZXJWaWV3OiBOb2RlUmVuZGVyVmlldywgYmF0Y2hJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9yZW5kZXJWaWV3ID0gcmVuZGVyVmlld1xyXG4gICAgdGhpcy5fYmF0Y2hJbmRleCA9IGJhdGNoSW5kZXhcclxuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKS5pZGVudGl0eSgpXHJcbiAgICB0aGlzLnRyYW5zZm9ybUludiA9IG5ldyBNYXRyaXg0KCkuaWRlbnRpdHkoKVxyXG5cclxuICAgIHRoaXMuX2xvY2FsT3JpZ2luID0gdGhpcy5fcmVuZGVyVmlldy5hYWJiLmdldENlbnRlcihuZXcgVmVjdG9yMygpKVxyXG4gICAgdGhpcy5waXZvdFZhbHVlLmNvcHkodGhpcy5fbG9jYWxPcmlnaW4pXHJcbiAgICBHZW9tZXRyeS5Eb3VibGVUb0hpZ2hMb3dWZWN0b3IoXHJcbiAgICAgIG5ldyBWZWN0b3IzKHRoaXMuX2xvY2FsT3JpZ2luLngsIHRoaXMuX2xvY2FsT3JpZ2luLnksIHRoaXMuX2xvY2FsT3JpZ2luLnopLFxyXG4gICAgICB0aGlzLnBpdm90X0xvdyxcclxuICAgICAgdGhpcy5waXZvdF9IaWdoXHJcbiAgICApXHJcbiAgfVxyXG4gIHB1YmxpYyBidWlsZEFjY2VsZXJhdGlvblN0cnVjdHVyZShcclxuICAgIHBvc2l0aW9uOiBGbG9hdDMyQXJyYXkgfCBGbG9hdDY0QXJyYXksXHJcbiAgICBpbmRpY2VzOiBVaW50MTZBcnJheSB8IFVpbnQzMkFycmF5XHJcbiAgKTogdm9pZFxyXG4gIHB1YmxpYyBidWlsZEFjY2VsZXJhdGlvblN0cnVjdHVyZShidmg6IE1lc2hCVkgpOiB2b2lkXHJcblxyXG4gIHB1YmxpYyBidWlsZEFjY2VsZXJhdGlvblN0cnVjdHVyZShcclxuICAgIHBvc2l0aW9uT3JCdmg6IEZsb2F0MzJBcnJheSB8IEZsb2F0NjRBcnJheSB8IE1lc2hCVkgsXHJcbiAgICBpbmRpY2VzPzogVWludDE2QXJyYXkgfCBVaW50MzJBcnJheVxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKS5tYWtlVHJhbnNsYXRpb24oXHJcbiAgICAgIHRoaXMuX2xvY2FsT3JpZ2luLngsXHJcbiAgICAgIHRoaXMuX2xvY2FsT3JpZ2luLnksXHJcbiAgICAgIHRoaXMuX2xvY2FsT3JpZ2luLnpcclxuICAgIClcclxuICAgIHRyYW5zZm9ybS5pbnZlcnQoKVxyXG5cclxuICAgIGxldCBidmggPSBwb3NpdGlvbk9yQnZoXHJcblxyXG4gICAgaWYgKCEoYnZoIGluc3RhbmNlb2YgTWVzaEJWSCkpIHtcclxuICAgICAgaWYgKCFpbmRpY2VzKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYnVpbGQgYSBCVkggd2l0aCBvbmx5IHBvc2l0aW9ucy4gTmVlZCBpbmRpY2VzIHRvb2ApXHJcbiAgICAgIH1cclxuICAgICAgYnZoID0gQWNjZWxlcmF0aW9uU3RydWN0dXJlLmJ1aWxkQlZIKFxyXG4gICAgICAgIGluZGljZXMsXHJcbiAgICAgICAgcG9zaXRpb25PckJ2aCBhcyBGbG9hdDMyQXJyYXkgfCBGbG9hdDY0QXJyYXksXHJcbiAgICAgICAgRGVmYXVsdEJWSE9wdGlvbnMsXHJcbiAgICAgICAgdHJhbnNmb3JtXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hY2NlbGVyYXRpb25TdHJ1Y3R1cmUgPSBuZXcgQWNjZWxlcmF0aW9uU3RydWN0dXJlKGJ2aClcclxuICAgIHRoaXMuX2FjY2VsZXJhdGlvblN0cnVjdHVyZS5pbnB1dFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtSW52XHJcbiAgICB0aGlzLl9hY2NlbGVyYXRpb25TdHJ1Y3R1cmUub3V0cHV0VHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm1cclxuICAgIHRoaXMuX2FjY2VsZXJhdGlvblN0cnVjdHVyZS5pbnB1dE9yaWdpblRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCkuY29weSh0cmFuc2Zvcm0pXHJcbiAgICB0aGlzLl9hY2NlbGVyYXRpb25TdHJ1Y3R1cmUub3V0cHV0T3JpZ2luVHJhbnNmb20gPSBuZXcgTWF0cml4NCgpXHJcbiAgICAgIC5jb3B5KHRyYW5zZm9ybSlcclxuICAgICAgLmludmVydCgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhbnNmb3JtVFJTKFxyXG4gICAgdHJhbnNsYXRpb246IFZlY3RvcjNMaWtlLFxyXG4gICAgZXVsZXI/OiBWZWN0b3IzTGlrZSxcclxuICAgIHNjYWxlPzogVmVjdG9yM0xpa2UsXHJcbiAgICBwaXZvdD86IFZlY3RvcjNMaWtlXHJcbiAgKSB7XHJcbiAgICBsZXQgVDogTWF0cml4NCA9IEJhdGNoT2JqZWN0Lm1hdEJ1ZmYwLmlkZW50aXR5KClcclxuICAgIGxldCBSOiBNYXRyaXg0ID0gQmF0Y2hPYmplY3QubWF0QnVmZjEuaWRlbnRpdHkoKVxyXG4gICAgbGV0IFM6IE1hdHJpeDQgPSBCYXRjaE9iamVjdC5tYXRCdWZmMi5pZGVudGl0eSgpXHJcbiAgICBCYXRjaE9iamVjdC5ldWxlckJ1ZmYuc2V0KDAsIDAsIDAsICdYWVonKVxyXG4gICAgQmF0Y2hPYmplY3QudHJhbnNsYXRpb25CdWZmLnNldCgwLCAwLCAwKVxyXG4gICAgQmF0Y2hPYmplY3Quc2NhbGVCdWZmLnNldCgxLCAxLCAxKVxyXG4gICAgQmF0Y2hPYmplY3QucGl2b3RCdWZmLmNvcHkodGhpcy5fbG9jYWxPcmlnaW4pXHJcblxyXG4gICAgaWYgKHRyYW5zbGF0aW9uKSB7XHJcbiAgICAgIFQgPSBCYXRjaE9iamVjdC5tYXRCdWZmMC5tYWtlVHJhbnNsYXRpb24oXHJcbiAgICAgICAgdHJhbnNsYXRpb24ueCxcclxuICAgICAgICB0cmFuc2xhdGlvbi55LFxyXG4gICAgICAgIHRyYW5zbGF0aW9uLnpcclxuICAgICAgKVxyXG4gICAgICBCYXRjaE9iamVjdC50cmFuc2xhdGlvbkJ1ZmYuc2V0KHRyYW5zbGF0aW9uLngsIHRyYW5zbGF0aW9uLnksIHRyYW5zbGF0aW9uLnopXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV1bGVyKSB7XHJcbiAgICAgIEJhdGNoT2JqZWN0LmV1bGVyQnVmZi5zZXQoZXVsZXIueCwgZXVsZXIueSwgZXVsZXIueiwgJ1hZWicpXHJcbiAgICAgIFIgPSBCYXRjaE9iamVjdC5tYXRCdWZmMS5tYWtlUm90YXRpb25Gcm9tRXVsZXIoQmF0Y2hPYmplY3QuZXVsZXJCdWZmKVxyXG4gICAgICB0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKEJhdGNoT2JqZWN0LmV1bGVyQnVmZilcclxuICAgICAgdGhpcy5ldWxlclZhbHVlLmNvcHkoQmF0Y2hPYmplY3QuZXVsZXJCdWZmKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzY2FsZSkge1xyXG4gICAgICBTID0gQmF0Y2hPYmplY3QubWF0QnVmZjIubWFrZVNjYWxlKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnopXHJcbiAgICAgIEJhdGNoT2JqZWN0LnNjYWxlQnVmZi5zZXQoc2NhbGUueCwgc2NhbGUueSwgc2NhbGUueilcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGl2b3QpIHtcclxuICAgICAgQmF0Y2hPYmplY3QucGl2b3RCdWZmLnNldChwaXZvdC54LCBwaXZvdC55LCBwaXZvdC56KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHJhbnNmb3JtLmlkZW50aXR5KClcclxuICAgIHRoaXMudHJhbnNmb3JtLm11bHRpcGx5KFQpXHJcbiAgICB0aGlzLnRyYW5zZm9ybS5tdWx0aXBseShSKVxyXG4gICAgdGhpcy50cmFuc2Zvcm0ubXVsdGlwbHkoUylcclxuXHJcbiAgICBjb25zdCBtYXQgPSBuZXcgTWF0cml4NCgpLm11bHRpcGx5TWF0cmljZXMoXHJcbiAgICAgIG5ldyBNYXRyaXg0KCkubWFrZVRyYW5zbGF0aW9uKFxyXG4gICAgICAgIEJhdGNoT2JqZWN0LnBpdm90QnVmZi54LFxyXG4gICAgICAgIEJhdGNoT2JqZWN0LnBpdm90QnVmZi55LFxyXG4gICAgICAgIEJhdGNoT2JqZWN0LnBpdm90QnVmZi56XHJcbiAgICAgICksXHJcbiAgICAgIHRoaXMudHJhbnNmb3JtXHJcbiAgICApXHJcblxyXG4gICAgbWF0Lm11bHRpcGx5KFxyXG4gICAgICBuZXcgTWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbihcclxuICAgICAgICAtQmF0Y2hPYmplY3QucGl2b3RCdWZmLngsXHJcbiAgICAgICAgLUJhdGNoT2JqZWN0LnBpdm90QnVmZi55LFxyXG4gICAgICAgIC1CYXRjaE9iamVjdC5waXZvdEJ1ZmYuelxyXG4gICAgICApXHJcbiAgICApXHJcbiAgICB0aGlzLnRyYW5zZm9ybS5jb3B5KG1hdClcclxuXHJcbiAgICB0aGlzLnRyYW5zZm9ybUludi5jb3B5KHRoaXMudHJhbnNmb3JtKVxyXG4gICAgdGhpcy50cmFuc2Zvcm1JbnYuaW52ZXJ0KClcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0aW9uLmNvcHkoQmF0Y2hPYmplY3QudHJhbnNsYXRpb25CdWZmKVxyXG4gICAgdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcihCYXRjaE9iamVjdC5ldWxlckJ1ZmYpXHJcbiAgICB0aGlzLnNjYWxlVmFsdWUuY29weShCYXRjaE9iamVjdC5zY2FsZUJ1ZmYpXHJcbiAgICB0aGlzLnBpdm90VmFsdWUuY29weShCYXRjaE9iamVjdC5waXZvdEJ1ZmYpXHJcblxyXG4gICAgR2VvbWV0cnkuRG91YmxlVG9IaWdoTG93VmVjdG9yKFxyXG4gICAgICBCYXRjaE9iamVjdC5waXZvdEJ1ZmYsXHJcbiAgICAgIHRoaXMucGl2b3RfTG93LFxyXG4gICAgICB0aGlzLnBpdm90X0hpZ2hcclxuICAgIClcclxuICAgIHRoaXMudHJhbnNmb3JtRGlydHkgPSB0cnVlXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJveDMsIE1hdHJpeDQgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgQmF0Y2hPYmplY3QsIFZlY3RvcjNMaWtlIH0gZnJvbSAnLi9CYXRjaE9iamVjdC5qcydcclxuaW1wb3J0IHsgTm9kZVJlbmRlclZpZXcgfSBmcm9tICcuLi90cmVlL05vZGVSZW5kZXJWaWV3LmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFRleHRCYXRjaE9iamVjdCBleHRlbmRzIEJhdGNoT2JqZWN0IHtcclxuICBwdWJsaWMgdGV4dFRyYW5zZm9ybTogTWF0cml4NCA9IG5ldyBNYXRyaXg0KClcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHJlbmRlclZpZXc6IE5vZGVSZW5kZXJWaWV3LCBiYXRjaEluZGV4OiBudW1iZXIpIHtcclxuICAgIHN1cGVyKHJlbmRlclZpZXcsIGJhdGNoSW5kZXgpXHJcbiAgICBpZiAocmVuZGVyVmlldy5yZW5kZXJEYXRhLmdlb21ldHJ5LnRyYW5zZm9ybSlcclxuICAgICAgdGhpcy50ZXh0VHJhbnNmb3JtLmNvcHkocmVuZGVyVmlldy5yZW5kZXJEYXRhLmdlb21ldHJ5LnRyYW5zZm9ybSlcclxuICAgIC8qKiBUTyBETzogTm90IHN1cmUgd2Ugc2hvdWxkIGRvIHRoaXMgKi9cclxuICAgIHRoaXMudHJhbnNmb3JtLmNvcHkodGhpcy50ZXh0VHJhbnNmb3JtKVxyXG4gICAgdGhpcy50cmFuc2Zvcm1JbnYuY29weShuZXcgTWF0cml4NCgpLmNvcHkodGhpcy50ZXh0VHJhbnNmb3JtKS5pbnZlcnQoKSlcclxuICAgIHRoaXMudHJhbnNmb3JtRGlydHkgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhYWJiKCk6IEJveDMge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjY2VsZXJhdGlvblN0cnVjdHVyZS5nZXRCb3VuZGluZ0JveChuZXcgQm94MygpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYW5zZm9ybVRSUyhcclxuICAgIHRyYW5zbGF0aW9uOiBWZWN0b3IzTGlrZSxcclxuICAgIGV1bGVyOiBWZWN0b3IzTGlrZSxcclxuICAgIHNjYWxlOiBWZWN0b3IzTGlrZSxcclxuICAgIHBpdm90OiBWZWN0b3IzTGlrZVxyXG4gICkge1xyXG4gICAgc3VwZXIudHJhbnNmb3JtVFJTKHRyYW5zbGF0aW9uLCBldWxlciwgc2NhbGUsIHBpdm90KVxyXG4gICAgdGhpcy50cmFuc2Zvcm0ubXVsdGlwbHkodGhpcy50ZXh0VHJhbnNmb3JtKVxyXG4gICAgdGhpcy50cmFuc2Zvcm1JbnYuY29weSh0aGlzLnRyYW5zZm9ybSlcclxuICAgIHRoaXMudHJhbnNmb3JtSW52LmludmVydCgpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IHR5cGUgQmF0Y2hVcGRhdGVSYW5nZSB9IGZyb20gJy4vQmF0Y2guanMnXHJcbmltcG9ydCB7IHR5cGUgRHJhd0dyb3VwIH0gZnJvbSAnLi9CYXRjaC5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBEcmF3UmFuZ2VzIHtcclxuICBwdWJsaWMgaW50ZWdyYXRlUmFuZ2VzKFxyXG4gICAgZ3JvdXBzOiBBcnJheTxEcmF3R3JvdXA+LFxyXG4gICAgbWF0ZXJpYWxzOiBBcnJheTxNYXRlcmlhbD4sXHJcbiAgICByYW5nZXM6IEJhdGNoVXBkYXRlUmFuZ2VbXVxyXG4gICk6IEFycmF5PERyYXdHcm91cD4ge1xyXG4gICAgbGV0IF9mbGF0UmFuZ2VzOiBBcnJheTxudW1iZXI+ID0gW11cclxuICAgIGdyb3Vwcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydClcclxuICAgIHJhbmdlcy5zb3J0KChhLCBiKSA9PiBhLm9mZnNldCAtIGIub2Zmc2V0KVxyXG5cclxuICAgIGNvbnN0IGVkZ2VzRm9yd2FyZDogeyBba2V5OiBudW1iZXJdOiBudW1iZXIgfSA9IHt9XHJcbiAgICBjb25zdCBlZGdlc0JhY2t3YXJkczogeyBba2V5OiBudW1iZXJdOiBudW1iZXIgfSA9IHt9XHJcbiAgICBmb3IgKGxldCBrID0gMCwgbCA9IGdyb3Vwcy5sZW5ndGggLSAxOyBrIDwgZ3JvdXBzLmxlbmd0aDsgaysrLCBsLS0pIHtcclxuICAgICAgY29uc3QgZ3JvdXBGb3J3YXJkID0gZ3JvdXBzW2tdXHJcbiAgICAgIGNvbnN0IGdyb3VwQmFja3dhcmRzID0gZ3JvdXBzW2xdXHJcbiAgICAgIGVkZ2VzRm9yd2FyZFtncm91cEZvcndhcmQuc3RhcnRdID0gZ3JvdXBGb3J3YXJkLm1hdGVyaWFsSW5kZXhcclxuICAgICAgZWRnZXNCYWNrd2FyZHNbZ3JvdXBCYWNrd2FyZHMuc3RhcnQgKyBncm91cEJhY2t3YXJkcy5jb3VudF0gPVxyXG4gICAgICAgIGdyb3VwQmFja3dhcmRzLm1hdGVyaWFsSW5kZXhcclxuICAgIH1cclxuXHJcbiAgICBfZmxhdFJhbmdlcyA9IGdyb3Vwcy5tYXAoKGdyb3VwOiBEcmF3R3JvdXApID0+IHtcclxuICAgICAgcmV0dXJuIGdyb3VwLnN0YXJ0ICsgZ3JvdXAuY291bnRcclxuICAgIH0pXHJcbiAgICBfZmxhdFJhbmdlcy51bnNoaWZ0KDApXHJcblxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCByYW5nZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSByYW5nZXNba11cclxuICAgICAgY29uc3QgcjAgPSByYW5nZS5vZmZzZXRcclxuICAgICAgY29uc3QgcjBJbmRleCA9IF9mbGF0UmFuZ2VzLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID4gcjApXHJcbiAgICAgIGNvbnN0IG5leHQgPSBfZmxhdFJhbmdlc1tyMEluZGV4XVxyXG4gICAgICBfZmxhdFJhbmdlcy5zcGxpY2UocjBJbmRleCwgMCwgcjApXHJcblxyXG4gICAgICBjb25zdCByMSA9IHJhbmdlLm9mZnNldCArIHJhbmdlLmNvdW50XHJcbiAgICAgIGNvbnN0IHIxSW5kZXggPSBfZmxhdFJhbmdlcy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZSA+IHIxKVxyXG4gICAgICBfZmxhdFJhbmdlcy5zcGxpY2UocjFJbmRleCwgMCwgcjEpXHJcblxyXG4gICAgICBfZmxhdFJhbmdlcyA9IF9mbGF0UmFuZ2VzLmZpbHRlcigodmFsdWUpID0+IHtcclxuICAgICAgICByZXR1cm4gISh2YWx1ZSA+IHIwICYmIHZhbHVlIDwgcjEpXHJcbiAgICAgIH0pXHJcbiAgICAgIF9mbGF0UmFuZ2VzID0gWy4uLm5ldyBTZXQoX2ZsYXRSYW5nZXMpXVxyXG5cclxuICAgICAgY29uc3QgbWF0ZXJpYWxJbmRleCA9IG1hdGVyaWFscy5pbmRleE9mKHJhbmdlLm1hdGVyaWFsIGFzIE1hdGVyaWFsKVxyXG4gICAgICBlZGdlc0ZvcndhcmRbcjBdID0gbWF0ZXJpYWxJbmRleFxyXG4gICAgICBlZGdlc0ZvcndhcmRbcjFdID0gcjEgPj0gbmV4dCA/IGVkZ2VzRm9yd2FyZFtuZXh0XSA6IGVkZ2VzQmFja3dhcmRzW25leHRdXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZHJhd1JhbmdlcyA9IFtdXHJcbiAgICBsZXQgZ3JvdXBTdGFydCA9IC0xXHJcbiAgICBsZXQgY291bnQgPSAwXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IF9mbGF0UmFuZ2VzLmxlbmd0aCAtIDE7IGsrKykge1xyXG4gICAgICBjb25zdCBzdGFydCA9IF9mbGF0UmFuZ2VzW2tdXHJcbiAgICAgIGNvbnN0IGVuZCA9IF9mbGF0UmFuZ2VzW2sgKyAxXVxyXG4gICAgICBjb3VudCArPSBlbmQgLSBzdGFydFxyXG4gICAgICBjb25zdCBtYXRlcmlhbEluZGV4ID0gZWRnZXNGb3J3YXJkW3N0YXJ0XVxyXG4gICAgICBjb25zdCBsYXN0R3JvdXAgPSBrID09PSBfZmxhdFJhbmdlcy5sZW5ndGggLSAyXHJcbiAgICAgIGlmIChlZGdlc0ZvcndhcmRbX2ZsYXRSYW5nZXNbayArIDFdXSA9PT0gbWF0ZXJpYWxJbmRleCB8fCBsYXN0R3JvdXApIHtcclxuICAgICAgICBpZiAoZ3JvdXBTdGFydCA9PT0gLTEpIHtcclxuICAgICAgICAgIGdyb3VwU3RhcnQgPSBzdGFydFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxhc3RHcm91cCkgY29udGludWVcclxuICAgICAgfVxyXG5cclxuICAgICAgZHJhd1Jhbmdlcy5wdXNoKHtcclxuICAgICAgICBzdGFydDogZ3JvdXBTdGFydCA9PT0gLTEgPyBzdGFydCA6IGdyb3VwU3RhcnQsXHJcbiAgICAgICAgY291bnQsXHJcbiAgICAgICAgbWF0ZXJpYWxJbmRleFxyXG4gICAgICB9KVxyXG4gICAgICBncm91cFN0YXJ0ID0gLTFcclxuICAgICAgY291bnQgPSAwXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRyYXdSYW5nZXNcclxuICB9XHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXHJcbmltcG9ydCB7IEJveDMsIE1hdGVyaWFsLCBNYXRyaXg0LCBPYmplY3QzRCwgV2ViR0xSZW5kZXJlciB9IGZyb20gJ3RocmVlJ1xyXG5cclxuaW1wb3J0IHsgTm9kZVJlbmRlclZpZXcgfSBmcm9tICcuLi90cmVlL05vZGVSZW5kZXJWaWV3LmpzJ1xyXG5pbXBvcnQge1xyXG4gIEFsbEJhdGNoVXBkYXRlUmFuZ2UsXHJcbiAgdHlwZSBCYXRjaCxcclxuICB0eXBlIEJhdGNoVXBkYXRlUmFuZ2UsXHJcbiAgdHlwZSBEcmF3R3JvdXAsXHJcbiAgR2VvbWV0cnlUeXBlLFxyXG4gIE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbn0gZnJvbSAnLi9CYXRjaC5qcydcclxuXHJcbmltcG9ydCBNYXRlcmlhbHMgZnJvbSAnLi4vbWF0ZXJpYWxzL01hdGVyaWFscy5qcydcclxuaW1wb3J0IHsgU3BlY2tsZUJhdGNoZWRUZXh0IH0gZnJvbSAnLi4vb2JqZWN0cy9TcGVja2xlQmF0Y2hlZFRleHQuanMnXHJcbi8vQHRzLWlnbm9yZVxyXG5pbXBvcnQgeyBBbmNob3JYLCBBbmNob3JZLCBUZXh0IH0gZnJvbSAndHJvaWthLXRocmVlLXRleHQnXHJcbmltcG9ydCB7XHJcbiAgQWNjZWxlcmF0aW9uU3RydWN0dXJlLFxyXG4gIEJhdGNoT2JqZWN0LFxyXG4gIEdlb21ldHJ5LFxyXG4gIE9iamVjdExheWVycyxcclxuICBTcGVja2xlVGV4dE1hdGVyaWFsXHJcbn0gZnJvbSAnLi4vLi4vaW5kZXguanMnXHJcbmltcG9ydCB7IERlZmF1bHRCVkhPcHRpb25zIH0gZnJvbSAnLi4vb2JqZWN0cy9BY2NlbGVyYXRpb25TdHJ1Y3R1cmUuanMnXHJcbmltcG9ydCB7IFRleHRCYXRjaE9iamVjdCB9IGZyb20gJy4vVGV4dEJhdGNoT2JqZWN0LmpzJ1xyXG5pbXBvcnQgeyBEcmF3UmFuZ2VzIH0gZnJvbSAnLi9EcmF3UmFuZ2VzLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4uL3V0aWxzL0xvZ2dlci5qcydcclxuaW1wb3J0IFNwZWNrbGVUZXh0Q29sb3JlZE1hdGVyaWFsIGZyb20gJy4uL21hdGVyaWFscy9TcGVja2xlVGV4dENvbG9yZWRNYXRlcmlhbC5qcydcclxuXHJcbmNvbnN0IElOU1RBTkNFX1RFWFRfVFJJU19DT1VOVCA9IDJcclxuY29uc3QgSU5TVEFOQ0VfVEVYVF9WRVJUX0NPVU5UID0gNFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dEJhdGNoIGltcGxlbWVudHMgQmF0Y2gge1xyXG4gIHB1YmxpYyBpZDogc3RyaW5nXHJcbiAgcHVibGljIHN1YnRyZWVJZDogc3RyaW5nXHJcbiAgcHVibGljIHJlbmRlclZpZXdzOiBOb2RlUmVuZGVyVmlld1tdXHJcbiAgcHVibGljIGJhdGNoTWF0ZXJpYWw6IE1hdGVyaWFsXHJcbiAgcHVibGljIG1lc2g6IFNwZWNrbGVCYXRjaGVkVGV4dFxyXG4gIHByb3RlY3RlZCBkcmF3UmFuZ2VzOiBEcmF3UmFuZ2VzID0gbmV3IERyYXdSYW5nZXMoKVxyXG5cclxuICBwdWJsaWMgZ2V0IGJvdW5kcygpOiBCb3gzIHtcclxuICAgIHJldHVybiB0aGlzLm1lc2guVEFTLmdldEJvdW5kaW5nQm94KG5ldyBCb3gzKCkpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRyYXdDYWxscygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzLmxlbmd0aFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtaW5EcmF3Q2FsbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBbLi4uQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMuZ3JvdXBzLm1hcCgodmFsdWUpID0+IHZhbHVlLm1hdGVyaWFsSW5kZXgpKSldXHJcbiAgICAgIC5sZW5ndGhcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWF4RHJhd0NhbGxzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0cmlDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIElOU1RBTkNFX1RFWFRfVFJJU19DT1VOVCAqIHRoaXMucmVuZGVyVmlld3MubGVuZ3RoXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZlcnRDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIElOU1RBTkNFX1RFWFRfVkVSVF9DT1VOVCAqIHRoaXMucmVuZGVyVmlld3MubGVuZ3RoXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHBvaW50Q291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGxpbmVDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2VvbWV0cnlUeXBlKCk6IEdlb21ldHJ5VHlwZSB7XHJcbiAgICByZXR1cm4gR2VvbWV0cnlUeXBlLlRFWFRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVuZGVyT2JqZWN0KCk6IE9iamVjdDNEIHtcclxuICAgIHJldHVybiB0aGlzLm1lc2ggYXMgdW5rbm93biBhcyBPYmplY3QzRFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJWaWV3cy5sZW5ndGhcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWF0ZXJpYWxzKCk6IE1hdGVyaWFsW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubWVzaC5tYXRlcmlhbHNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ3JvdXBzKCk6IEFycmF5PERyYXdHcm91cD4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWVzaC5ncm91cHNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBzdWJ0cmVlSWQ6IHN0cmluZywgcmVuZGVyVmlld3M6IE5vZGVSZW5kZXJWaWV3W10pIHtcclxuICAgIHRoaXMuaWQgPSBpZFxyXG4gICAgdGhpcy5zdWJ0cmVlSWQgPSBzdWJ0cmVlSWRcclxuICAgIHRoaXMucmVuZGVyVmlld3MgPSByZW5kZXJWaWV3c1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEJhdGNoTWF0ZXJpYWwobWF0ZXJpYWw6IE1hdGVyaWFsKSB7XHJcbiAgICB0aGlzLmJhdGNoTWF0ZXJpYWwgPSBtYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVXBkYXRlKGRlbHRhVGltZTogbnVtYmVyKSB7XHJcbiAgICBkZWx0YVRpbWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJlbmRlcihyZW5kZXJlcjogV2ViR0xSZW5kZXJlcikge1xyXG4gICAgcmVuZGVyZXJcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlUmFuZ2UocmFuZ2VzOiBCYXRjaFVwZGF0ZVJhbmdlW10pIHtcclxuICAgIHJhbmdlc1xyXG4gIH1cclxuXHJcbiAgLyogIEkgaGF0ZSBob3cgYnJpdHRsZSBUcm9pa2EgaXMuICoqRXZlcnl0aGluZyoqIHlvdSB0b3VjaCBicmVha3Mgc2hpdFxyXG4gICAqICBXZSBjYW4ndCBhY3R1YWxseSB1c2UgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBpbmhlcml0ZWQgZnJvbSBNZXNoLCBiZWNhdXNlIGl0IGp1c3QgYnJlYWtzIHRoZSB0ZXh0IGJhdGNoXHJcbiAgICovXHJcbiAgcHVibGljIGdldFZpc2libGVSYW5nZSgpOiBCYXRjaFVwZGF0ZVJhbmdlIHtcclxuICAgIGlmICh0aGlzLm1lc2guZ3JvdXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBjb25zdCBncm91cCA9IHRoaXMubWVzaC5ncm91cHNbMF1cclxuICAgICAgaWYgKCF0aGlzLm1hdGVyaWFsc1tncm91cC5tYXRlcmlhbEluZGV4XS52aXNpYmxlKSB7XHJcbiAgICAgICAgcmV0dXJuIE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gQWxsQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIH1cclxuXHJcbiAgLyoqIFRPRE86IE5lZWQgdG8gZ2l2ZSB0aGlzIGEgZ2xvdyB1cCAqL1xyXG4gIHB1YmxpYyBnZXRPcGFxdWUoKTogQmF0Y2hVcGRhdGVSYW5nZSB7XHJcbiAgICBpZiAoTWF0ZXJpYWxzLmlzT3BhcXVlKHRoaXMuYmF0Y2hNYXRlcmlhbCkpIHJldHVybiBBbGxCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgICByZXR1cm4gTm9uZUJhdGNoVXBkYXRlUmFuZ2VcclxuICB9XHJcblxyXG4gIC8qKiBUT0RPOiBOZWVkIHRvIGdpdmUgdGhpcyBhIGdsb3cgdXAgKi9cclxuICBwdWJsaWMgZ2V0RGVwdGgoKTogQmF0Y2hVcGRhdGVSYW5nZSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRPcGFxdWUoKVxyXG4gIH1cclxuXHJcbiAgLyoqIFRPRE86IE5lZWQgdG8gZ2l2ZSB0aGlzIGEgZ2xvdyB1cCAqL1xyXG4gIHB1YmxpYyBnZXRUcmFuc3BhcmVudCgpOiBCYXRjaFVwZGF0ZVJhbmdlIHtcclxuICAgIGlmIChNYXRlcmlhbHMuaXNUcmFuc3BhcmVudCh0aGlzLmJhdGNoTWF0ZXJpYWwpKSByZXR1cm4gQWxsQmF0Y2hVcGRhdGVSYW5nZVxyXG4gICAgcmV0dXJuIE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgfVxyXG5cclxuICAvKiogVE9ETzogTmVlZCB0byBnaXZlIHRoaXMgYSBnbG93IHVwICovXHJcbiAgcHVibGljIGdldFN0ZW5jaWwoKTogQmF0Y2hVcGRhdGVSYW5nZSB7XHJcbiAgICBpZiAodGhpcy5iYXRjaE1hdGVyaWFsLnN0ZW5jaWxXcml0ZSA9PT0gdHJ1ZSkgcmV0dXJuIEFsbEJhdGNoVXBkYXRlUmFuZ2VcclxuICAgIHJldHVybiBOb25lQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIH1cclxuXHJcbiAgLyoqIFRleHQgYmF0Y2hlcyBhcmUgbWl4IGJldHdlZW4gaG93IG1lc2ggYW5kIGxpbmUgYmF0Y2hlcyB3b3JrLlxyXG4gICAqIC0gVGhleSBzdGlsbCBrZWVwIHRyYWNrIG9mIHZhcmlvdXMgZHJhdyBncm91cHMgZWFjaCB3aXRoIGl0J3MgbWF0ZXJpYWxcclxuICAgKiAtIEhvd2V2ZXIgdGhhdCBtYXRlcmlhbCBpcyBub3QgcmVhbGx5IGJlaW5nIHVzZWQsIGJ1dCByYXRoZXIgdGhlIHByb3BlcmllcyBhcmUgY29waWVkIG92ZXIgdG8gdGhlIGJhdGNoIGZwMzIgZGF0YSB0ZXh0dXJlXHJcbiAgICogLSBGb3IgZmlsdGVyaW5nIHdlIGNoZWF0IGFuZCB1c2UgYFNwZWNrbGVUZXh0Q29sb3JlZE1hdGVyaWFsYCBvbmx5IHRvIHN0b3JlIHRoZSBncmFkaWVudC9yYW1wIHRleHR1cmUgKyBncmFkaWVudCBpbmRpY2VzIGZvciBlYWNoIHRleHQgaW4gdGhlIGJhdGNoXHJcbiAgICogLSBUaGUgY29sb3IgZnJvbSB0aGUgZ3JhZGllbnQvcmFtcCB0ZXh0dXJlIHdpbGwgYmUgdXNlZCBvbmx5IGlmIHRoZSBncmFkaWVudCBpbmRleCA+IDAsIG90aGVyd2lzZSB0aGUgcmVndWxhciBjb2xvciB3aWxsIGJlIHVzZWRcclxuICAgKiAtIFRoZSBncmFkaWVudCBpbmRleCBpcyBzdG9yZWQgaW4gZWFjaCB0ZXh0IG9iamVjdCBpbiBpdCdzIGB1c2VyRGF0YWAgYW5kIHdyaXR0ZW4gdG8gdGhlIDI3J3RoIGZsb2F0IGluIHRoZSBiYXRjaCBkYXRhIHRleHR1cmUsIHdoZXJlIHRoZSBzaGFkZXIgcmVhZHMgaWYgZnJvbVxyXG4gICAqIC0gRXZlbiBpZiwgdGhlICoqdGV4dCBiYXRjaCBkb2VzIG5vdCB1c2UgdGhlIG1hdGVyaWFscyBpbiBpdCdzIGRyYXcgZ3JvdXBzKiosIGl0IGVtdWxhdGVzIHRoZSBiZWhhdmlvciBhcyBpZiBpdCB3b3VsZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRCYXRjaEJ1ZmZlcnMocmFuZ2VzOiBCYXRjaFVwZGF0ZVJhbmdlW10pOiB2b2lkIHtcclxuICAgIC8vIGNvbnNvbGUud2FybignIEdyb3VwcyAtPiAnLCB0aGlzLm1lc2guZ3JvdXBzKVxyXG4gICAgLy8gY29uc29sZS53YXJuKCcgUmFuZ2VzIC0+ICcsIHJhbmdlcylcclxuICAgIGNvbnN0IHNwbGl0UmFuZ2VzOiBCYXRjaFVwZGF0ZVJhbmdlW10gPSBbXVxyXG4gICAgcmFuZ2VzLmZvckVhY2goKHJhbmdlOiBCYXRjaFVwZGF0ZVJhbmdlKSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcmFuZ2UuY291bnQ7IGsrKykge1xyXG4gICAgICAgIHNwbGl0UmFuZ2VzLnB1c2goe1xyXG4gICAgICAgICAgb2Zmc2V0OiByYW5nZS5vZmZzZXQgKyBrLFxyXG4gICAgICAgICAgY291bnQ6IDEsXHJcbiAgICAgICAgICBtYXRlcmlhbDogcmFuZ2UubWF0ZXJpYWwsXHJcbiAgICAgICAgICBtYXRlcmlhbE9wdGlvbnM6IHJhbmdlLm1hdGVyaWFsT3B0aW9uc1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIHRoaXMubWVzaC5fbWVtYmVycy5mb3JFYWNoKChwYWNraW5nSW5mbywgdGV4dCkgPT4ge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHNwbGl0UmFuZ2VzLmZpbmQoKHZhbCkgPT4gdmFsLm9mZnNldCA9PT0gcGFja2luZ0luZm8uaW5kZXgpXHJcbiAgICAgIGlmICghcmFuZ2UpIHJldHVyblxyXG5cclxuICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgIHRleHQuY29sb3IgPSByYW5nZS5tYXRlcmlhbD8uY29sb3JcclxuICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgIHRleHQubWF0ZXJpYWwuY29sb3IgPSByYW5nZS5tYXRlcmlhbD8uY29sb3JcclxuICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgIHRleHQubWF0ZXJpYWwub3BhY2l0eSA9IHJhbmdlLm1hdGVyaWFsPy52aXNpYmxlID8gcmFuZ2UubWF0ZXJpYWw/Lm9wYWNpdHkgOiAwXHJcblxyXG4gICAgICBpZiAocmFuZ2UubWF0ZXJpYWwgaW5zdGFuY2VvZiBTcGVja2xlVGV4dENvbG9yZWRNYXRlcmlhbCkge1xyXG4gICAgICAgIC8vIEdyb3VwIGhhcyBncmFkaWVudC9yYW1wIHRleHR1cmUgY29sb3Igc291cmNlXHJcbiAgICAgICAgaWYgKHJhbmdlLm1hdGVyaWFsT3B0aW9ucykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICByYW5nZS5tYXRlcmlhbE9wdGlvbnMucmFtcEluZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgcmFuZ2UubWF0ZXJpYWxPcHRpb25zLnJhbXBXaWR0aCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgLyoqIFRoZSByYW1wIGluZGljZXMgc3BlY2lmeSB0aGUgKmJlZ2luaW5nKiBvZiBlYWNoIHJhbXAgY29sb3IuIFdoZW4gc2FtcGxpbmcgd2l0aCBOZWFyZXN0IGZpbHRlciAoc2luY2Ugd2UgZG9uJ3Qgd2FudCBmaWx0ZXJpbmcpXHJcbiAgICAgICAgICAgICAqICB3ZSdsbCBhbHdheXMgYmUgc2FtcGxpbmcgcmlnaHQgYXQgdGhlIGVkZ2UgYmV0d2VlbiB0ZXhlbHMuIE1vc3QgR1BVcyB3aWxsIHNhbXBsZSBjb25zaXN0ZW50bHksIGJ1dCBzb21lIHdvbid0IGFuZCB3ZSBlbmQgdXAgd2l0aFxyXG4gICAgICAgICAgICAgKiAgYSB0b24gb2YgYXJ0aWZhY3RzLiBUbyBhdm9pZCB0aGlzLCB3ZSBhcmUgc2hpZnRpbmcgdGhlIHNhbXBsaW5nIGluZGljZXMgc28gdGhleSdyZSByaWdodCBvbiB0aGUgY2VudGVyIG9mIGVhY2ggdGV4ZWwsIHNvIG5vIGluY29uc2lzdGVudFxyXG4gICAgICAgICAgICAgKiAgc2FtcGxpbmcgY2FuIG9jY3VyLlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgY29uc3Qgc2hpZnRlZEluZGV4ID1cclxuICAgICAgICAgICAgICByYW5nZS5tYXRlcmlhbE9wdGlvbnMucmFtcEluZGV4ICsgMC41IC8gcmFuZ2UubWF0ZXJpYWxPcHRpb25zLnJhbXBXaWR0aFxyXG4gICAgICAgICAgICAvKiogVXBkYXRlIHRoZSBncmFkaWVudCBpbmRpY2VzIGZvciB0aGUgaW5kaXZpZHVhbCB0ZXh0c1xyXG4gICAgICAgICAgICAgKiAgVGhlIGNvbG9yZWQgbWF0ZXJpYWwgaXMgc2luZ3VsYXIsIGFzIHByb3ZpZGVkIGJ5IE1hdGVyaWFsc1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgcmFuZ2UubWF0ZXJpYWwudXBkYXRlR3JhZGllbnRJbmRleE1hcChwYWNraW5nSW5mby5pbmRleCwgc2hpZnRlZEluZGV4KVxyXG4gICAgICAgICAgICB0ZXh0LnVzZXJEYXRhLmdyYWRpZW50SW5kZXggPSBzaGlmdGVkSW5kZXhcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyYW5nZS5tYXRlcmlhbE9wdGlvbnMucmFtcFRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICA7KHJhbmdlLm1hdGVyaWFsIGFzIFNwZWNrbGVUZXh0TWF0ZXJpYWwpLnNldEdyYWRpZW50VGV4dHVyZShcclxuICAgICAgICAgICAgICByYW5nZS5tYXRlcmlhbE9wdGlvbnMucmFtcFRleHR1cmVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB0aGlzLm1lc2guc2V0R3JhZGllbnRUZXh0dXJlKHJhbmdlLm1hdGVyaWFsT3B0aW9ucy5yYW1wVGV4dHVyZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGV4dC51c2VyRGF0YS5ncmFkaWVudEluZGV4ID1cclxuICAgICAgICAgICAgcmFuZ2UubWF0ZXJpYWwuZ3JhZGllbnRJbmRleE1hcFtwYWNraW5nSW5mby5pbmRleF1cclxuICAgICAgICAgIHRoaXMubWVzaC5zZXRHcmFkaWVudFRleHR1cmUocmFuZ2UubWF0ZXJpYWwudXNlckRhdGEuZ3JhZGllbnRSYW1wLnZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBObyBncmFkaWVudCBvciByYW1wIGNvbG9yIHNvdXJjZVxyXG4gICAgICAgIHRleHQudXNlckRhdGEuZ3JhZGllbnRJbmRleCA9IC0xXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBhY2tpbmdJbmZvLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgfSlcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgdGhpcy5tZXNoLmRpcnR5ID0gdHJ1ZVxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICB0aGlzLm1lc2guc3luYygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RHJhd1JhbmdlcyhyYW5nZXM6IEJhdGNoVXBkYXRlUmFuZ2VbXSkge1xyXG4gICAgY29uc3QgbWF0ZXJpYWxzOiBBcnJheTxNYXRlcmlhbD4gPSByYW5nZXMubWFwKCh2YWw6IEJhdGNoVXBkYXRlUmFuZ2UpID0+IHtcclxuICAgICAgcmV0dXJuIHZhbC5tYXRlcmlhbCBhcyBNYXRlcmlhbFxyXG4gICAgfSlcclxuICAgIGNvbnN0IHVuaXF1ZU1hdGVyaWFscyA9IFsuLi5BcnJheS5mcm9tKG5ldyBTZXQobWF0ZXJpYWxzLm1hcCgodmFsdWUpID0+IHZhbHVlKSkpXVxyXG5cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdW5pcXVlTWF0ZXJpYWxzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmICghdGhpcy5tYXRlcmlhbHMuaW5jbHVkZXModW5pcXVlTWF0ZXJpYWxzW2tdKSlcclxuICAgICAgICB0aGlzLm1hdGVyaWFscy5wdXNoKHVuaXF1ZU1hdGVyaWFsc1trXSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1lc2guZ3JvdXBzID0gdGhpcy5kcmF3UmFuZ2VzLmludGVncmF0ZVJhbmdlcyhcclxuICAgICAgdGhpcy5ncm91cHMsXHJcbiAgICAgIHRoaXMubWF0ZXJpYWxzLFxyXG4gICAgICByYW5nZXNcclxuICAgIClcclxuXHJcbiAgICBsZXQgY291bnQgPSAwXHJcbiAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKCh2YWx1ZSkgPT4gKGNvdW50ICs9IHZhbHVlLmNvdW50KSlcclxuICAgIGlmIChjb3VudCAhPT0gdGhpcy5yZW5kZXJWaWV3cy5sZW5ndGgpIHtcclxuICAgICAgTG9nZ2VyLmVycm9yKGBEcmF3IGdyb3VwcyBpbnZhbGlkIG9uICR7dGhpcy5pZH1gKVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRCYXRjaEJ1ZmZlcnMocmFuZ2VzKVxyXG4gICAgdGhpcy5jbGVhbk1hdGVyaWFscygpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFuTWF0ZXJpYWxzKCkge1xyXG4gICAgY29uc3QgbWF0ZXJpYWxzSW5Vc2UgPSBbXHJcbiAgICAgIC4uLkFycmF5LmZyb20oXHJcbiAgICAgICAgbmV3IFNldCh0aGlzLmdyb3Vwcy5tYXAoKHZhbHVlKSA9PiB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XSkpXHJcbiAgICAgIClcclxuICAgIF1cclxuICAgIGxldCBrID0gMFxyXG4gICAgd2hpbGUgKHRoaXMubWF0ZXJpYWxzLmxlbmd0aCA+IG1hdGVyaWFsc0luVXNlLmxlbmd0aCkge1xyXG4gICAgICBpZiAoIW1hdGVyaWFsc0luVXNlLmluY2x1ZGVzKHRoaXMubWF0ZXJpYWxzW2tdKSkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzLnNwbGljZShrLCAxKVxyXG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKHZhbHVlOiBEcmF3R3JvdXApID0+IHtcclxuICAgICAgICAgIGlmICh2YWx1ZS5tYXRlcmlhbEluZGV4ID4gaykgdmFsdWUubWF0ZXJpYWxJbmRleC0tXHJcbiAgICAgICAgfSlcclxuICAgICAgICBrID0gMFxyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgaysrXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXREcmF3UmFuZ2VzKCkge1xyXG4gICAgdGhpcy5ncm91cHMubGVuZ3RoID0gMFxyXG4gICAgdGhpcy5tYXRlcmlhbHMubGVuZ3RoID0gMFxyXG5cclxuICAgIHRoaXMubWF0ZXJpYWxzLnB1c2godGhpcy5iYXRjaE1hdGVyaWFsKVxyXG4gICAgdGhpcy5zZXRWaXNpYmxlUmFuZ2UoW0FsbEJhdGNoVXBkYXRlUmFuZ2VdKVxyXG4gICAgdGhpcy5zZXREcmF3UmFuZ2VzKFtcclxuICAgICAge1xyXG4gICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICBjb3VudDogdGhpcy5yZW5kZXJWaWV3cy5sZW5ndGgsXHJcbiAgICAgICAgbWF0ZXJpYWw6IHRoaXMuYmF0Y2hNYXRlcmlhbFxyXG4gICAgICB9XHJcbiAgICBdKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGFsaWdubWVudFhUb0FuY2hvclgodmFsdWU6IG51bWJlcik6IEFuY2hvclgge1xyXG4gICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcmV0dXJuICdsZWZ0J1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcmV0dXJuICdjZW50ZXInXHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICByZXR1cm4gJ3JpZ2h0J1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnY2VudGVyJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGFsaWdubWVudFlUb0FuY2hvclkodmFsdWU6IG51bWJlcik6IEFuY2hvclkge1xyXG4gICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcmV0dXJuICd0b3AnXHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICByZXR1cm4gJ21pZGRsZSdcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHJldHVybiAnYm90dG9tJ1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnbWlkZGxlJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGJ1aWxkQmF0Y2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5tZXNoID0gbmV3IFNwZWNrbGVCYXRjaGVkVGV4dCgpXHJcbiAgICAgIGNvbnN0IHRleHRNYXAgPSBuZXcgTWFwKClcclxuICAgICAgY29uc3QgYmF0Y2hPYmplY3RzOiBCYXRjaE9iamVjdFtdID0gW11cclxuICAgICAgY29uc3QgdGV4dE9iamVjdHM6IFRleHRbXSA9IFtdXHJcbiAgICAgIGNvbnN0IGJveCA9IG5ldyBCb3gzKClcclxuICAgICAgbGV0IG5lZWRzUlRFID0gZmFsc2VcclxuICAgICAgbGV0IG5lZWRzQmlsbGJvYXJkID0gZmFsc2VcclxuICAgICAgbGV0IHRleHRTeW5jZWQgPSB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aFxyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMucmVuZGVyVmlld3MubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBjb25zdCB0ZXh0TWV0YSA9IHRoaXMucmVuZGVyVmlld3Nba10ucmVuZGVyRGF0YS5nZW9tZXRyeVxyXG4gICAgICAgICAgLm1ldGFEYXRhIGFzIHVua25vd24gYXMge1xyXG4gICAgICAgICAgdmFsdWU6IHN0cmluZ1xyXG4gICAgICAgICAgaGVpZ2h0OiBudW1iZXJcclxuICAgICAgICAgIG1heFdpZHRoOiBudW1iZXJcclxuICAgICAgICAgIGFsaWdubWVudEg6IG51bWJlclxyXG4gICAgICAgICAgYWxpZ25tZW50VjogbnVtYmVyXHJcbiAgICAgICAgICBzY3JlZW5PcmllbnRlZDogYm9vbGVhblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIFNraXAgdGV4dHMgd2l0aCBubyB0ZXh0ICovXHJcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyVmlld3Nba10ucmVuZGVyRGF0YS5nZW9tZXRyeS5tZXRhRGF0YT8udmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICB0ZXh0U3luY2VkLS1cclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0ID0gbmV3IFRleHQoKVxyXG4gICAgICAgIHRoaXMucmVuZGVyVmlld3Nba10ucmVuZGVyRGF0YS5nZW9tZXRyeS50cmFuc2Zvcm0/LmRlY29tcG9zZShcclxuICAgICAgICAgIHRleHQucG9zaXRpb24sXHJcbiAgICAgICAgICB0ZXh0LnF1YXRlcm5pb24sXHJcbiAgICAgICAgICB0ZXh0LnNjYWxlXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRleHQudXBkYXRlTWF0cml4V29ybGQodHJ1ZSlcclxuXHJcbiAgICAgICAgaWYgKHRleHRNZXRhKSB7XHJcbiAgICAgICAgICB0ZXh0LnRleHQgPSB0ZXh0TWV0YS52YWx1ZVxyXG4gICAgICAgICAgdGV4dC5mb250U2l6ZSA9IHRleHRNZXRhLmhlaWdodFxyXG4gICAgICAgICAgdGV4dC5tYXhXaWR0aCA9XHJcbiAgICAgICAgICAgIHRleHRNZXRhLm1heFdpZHRoICE9PSBudWxsID8gdGV4dE1ldGEubWF4V2lkdGggOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcclxuICAgICAgICAgIHRleHQuYW5jaG9yWCA9IHRoaXMuYWxpZ25tZW50WFRvQW5jaG9yWCh0ZXh0TWV0YS5hbGlnbm1lbnRIKVxyXG4gICAgICAgICAgdGV4dC5hbmNob3JZID0gdGhpcy5hbGlnbm1lbnRZVG9BbmNob3JZKHRleHRNZXRhLmFsaWdubWVudFYpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5lZWRzQmlsbGJvYXJkIHx8PSB0ZXh0TWV0YSAhPT0gdW5kZWZpbmVkID8gdGV4dE1ldGEuc2NyZWVuT3JpZW50ZWQgOiBmYWxzZVxyXG5cclxuICAgICAgICB0ZXh0Lm1hdGVyaWFsID0gbmV3IFNwZWNrbGVUZXh0TWF0ZXJpYWwoe1xyXG4gICAgICAgICAgY29sb3I6IDB4ZmYwMDAwIC8vIGNvbnRyb2wgY29sb3JcclxuICAgICAgICB9KS5nZXREZXJpdmVkTWF0ZXJpYWwoKVxyXG5cclxuICAgICAgICB0ZXh0TWFwLnNldCh0ZXh0LCB0aGlzLnJlbmRlclZpZXdzW2tdKVxyXG5cclxuICAgICAgICB0ZXh0LnN5bmMoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgeyB0ZXh0UmVuZGVySW5mbyB9ID0gdGV4dFxyXG4gICAgICAgICAgLyoqIFdlJ3JlIHVzaW5nIHZpc2libGVCb3VuZHMgZm9yIGEgYmV0dGVyIGZpdCAqL1xyXG4gICAgICAgICAgY29uc3QgYm91bmRzID0gdGV4dFJlbmRlckluZm8udmlzaWJsZUJvdW5kc1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2JvdW5kcyAtPiAnLCBib3VuZHMpXHJcbiAgICAgICAgICBjb25zdCB2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoMTIpXHJcbiAgICAgICAgICB2ZXJ0aWNlc1swXSA9IGJvdW5kc1swXVxyXG4gICAgICAgICAgdmVydGljZXNbMV0gPSBib3VuZHNbM11cclxuICAgICAgICAgIHZlcnRpY2VzWzJdID0gMFxyXG4gICAgICAgICAgdmVydGljZXNbM10gPSBib3VuZHNbMl1cclxuICAgICAgICAgIHZlcnRpY2VzWzRdID0gYm91bmRzWzNdXHJcbiAgICAgICAgICB2ZXJ0aWNlc1s1XSA9IDBcclxuICAgICAgICAgIHZlcnRpY2VzWzZdID0gYm91bmRzWzBdXHJcbiAgICAgICAgICB2ZXJ0aWNlc1s3XSA9IGJvdW5kc1sxXVxyXG4gICAgICAgICAgdmVydGljZXNbOF0gPSAwXHJcbiAgICAgICAgICB2ZXJ0aWNlc1s5XSA9IGJvdW5kc1syXVxyXG4gICAgICAgICAgdmVydGljZXNbMTBdID0gYm91bmRzWzFdXHJcbiAgICAgICAgICB2ZXJ0aWNlc1sxMV0gPSAwXHJcblxyXG4gICAgICAgICAgYm94LnNldEZyb21BcnJheSh2ZXJ0aWNlcylcclxuICAgICAgICAgIGJveC5hcHBseU1hdHJpeDQoXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVmlld3Nba10ucmVuZGVyRGF0YS5nZW9tZXRyeS50cmFuc2Zvcm0gfHwgbmV3IE1hdHJpeDQoKVxyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICAgIG5lZWRzUlRFIHx8PSBHZW9tZXRyeS5uZWVkc1JURShib3gpXHJcblxyXG4gICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSB0ZXh0Lmdlb21ldHJ5XHJcbiAgICAgICAgICBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKVxyXG4gICAgICAgICAgY29uc3QgdGV4dEJ2aCA9IEFjY2VsZXJhdGlvblN0cnVjdHVyZS5idWlsZEJWSChcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5kZXg/LmFycmF5IGFzIHVua25vd24gYXMgVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSxcclxuICAgICAgICAgICAgdmVydGljZXMsXHJcbiAgICAgICAgICAgIERlZmF1bHRCVkhPcHRpb25zXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAvKiogVGhlIGJvdW5kcyBidWcuIDxTaWdoPiBpdCBuZWVkcyBhIHJlZml0IHRvIHJlcG9ydCB0aGUgY29ycmVjdCBib3VuZHMgKi9cclxuICAgICAgICAgIHRleHRCdmgucmVmaXQoKVxyXG5cclxuICAgICAgICAgIGNvbnN0IGJhdGNoT2JqZWN0ID0gbmV3IFRleHRCYXRjaE9iamVjdCh0aGlzLnJlbmRlclZpZXdzW2tdLCBrKVxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QuYnVpbGRBY2NlbGVyYXRpb25TdHJ1Y3R1cmUodGV4dEJ2aClcclxuICAgICAgICAgIGJhdGNoT2JqZWN0cy5wdXNoKGJhdGNoT2JqZWN0KVxyXG4gICAgICAgICAgdGV4dE9iamVjdHMucHVzaCh0ZXh0KVxyXG4gICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICB0aGlzLm1lc2guYWRkVGV4dCh0ZXh0KVxyXG4gICAgICAgICAgdGV4dFN5bmNlZC0tXHJcbiAgICAgICAgICBpZiAoIXRleHRTeW5jZWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmJhdGNoTWF0ZXJpYWwuZGVmaW5lcykgdGhpcy5iYXRjaE1hdGVyaWFsLmRlZmluZXMgPSB7fVxyXG4gICAgICAgICAgICBpZiAobmVlZHNSVEUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmJhdGNoTWF0ZXJpYWwuZGVmaW5lc1snVVNFX1JURSddID0gJyAnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5lZWRzQmlsbGJvYXJkKSB0aGlzLmJhdGNoTWF0ZXJpYWwuZGVmaW5lc1snQklMTEJPQVJEJ10gPSAnICdcclxuICAgICAgICAgICAgdGhpcy5tZXNoLnNldEJhdGNoT2JqZWN0cyhiYXRjaE9iamVjdHMsIHRleHRPYmplY3RzKVxyXG4gICAgICAgICAgICB0aGlzLm1lc2guc2V0QmF0Y2hNYXRlcmlhbCh0aGlzLmJhdGNoTWF0ZXJpYWwpXHJcbiAgICAgICAgICAgIHRoaXMubWVzaC5idWlsZFRBUygpXHJcblxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgdGhpcy5tZXNoLnV1aWQgPSB0aGlzLmlkXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB0aGlzLm1lc2gubGF5ZXJzLnNldChPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfVEVYVClcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHRoaXMubWVzaC5mcnVzdHVtQ3VsbGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWVzaC5kaXJ0eSA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgIHN0YXJ0OiAwLFxyXG4gICAgICAgICAgICAgIGNvdW50OiB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aCxcclxuICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4OiAwXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB0aGlzLm1lc2guc3luYygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLyoqIFdlIGFzc2lnbiB0aGUgYWxsb2NhdGVkIHBhY2tpbmcgaW5mbyB0byB0aGUgdGV4dCByZW5kZXIgdmlld3MgYXMgd2UnbGwgYmUgdXNpbmcgdGhlIHNhbWUgYmF0Y2ggaW5kaWNlcyBmb3Igc2ltcGxpY2l0eSAqL1xyXG4gICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgIHRoaXMubWVzaC5fbWVtYmVycy5mb3JFYWNoKChwYWNraW5nSW5mbywgdGV4dCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGV4dE1hcC5nZXQodGV4dCkuc2V0QmF0Y2hEYXRhKHRoaXMuaWQsIHBhY2tpbmdJbmZvLmluZGV4LCAxKVxyXG4gICAgICAgICAgICAgICAgcGFja2luZ0luZm8ubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB0aGlzLnNldEJhdGNoQnVmZmVycyhbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICAgICAgICAgICAgY291bnQ6IHRoaXMucmVuZGVyVmlld3MubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5iYXRjaE1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICByZXNvbHZlKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbmRlclZpZXcoaW5kZXg6IG51bWJlcik6IE5vZGVSZW5kZXJWaWV3IHwgbnVsbCB7XHJcbiAgICBpbmRleFxyXG4gICAgTG9nZ2VyLndhcm4oJ0RlcHJlY2F0ZWQhIFVzZSBJbnN0YW5jZWRCYXRjaE9iamVjdCcpXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE1hdGVyaWFsQXRJbmRleChpbmRleDogbnVtYmVyKTogTWF0ZXJpYWwgfCBudWxsIHtcclxuICAgIGluZGV4XHJcbiAgICBMb2dnZXIud2FybignRGVwcmVjYXRlZCEgVXNlIEluc3RhbmNlZEJhdGNoT2JqZWN0JylcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TWF0ZXJpYWwocnY6IE5vZGVSZW5kZXJWaWV3KTogTWF0ZXJpYWwgfCBudWxsIHtcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuZmluZCgodmFsdWUpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBydi5iYXRjaFN0YXJ0ID49IHZhbHVlLnN0YXJ0ICYmXHJcbiAgICAgICAgcnYuYmF0Y2hTdGFydCArIHJ2LmJhdGNoQ291bnQgPD0gdmFsdWUuY291bnQgKyB2YWx1ZS5zdGFydFxyXG4gICAgICApXHJcbiAgICB9KVxyXG4gICAgaWYgKCFncm91cCkge1xyXG4gICAgICBMb2dnZXIud2FybihgQ291bGQgbm90IGdldCBtYXRlcmlhbCBmb3IgJHtydi5yZW5kZXJEYXRhLmlkfWApXHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5tYXRlcmlhbHNbZ3JvdXAubWF0ZXJpYWxJbmRleF1cclxuXHJcbiAgICAvLyAvKiogSnVzdCBsaWtlIGZvciBsaW5lcywgdGhpcyBpc24ndCBpZGVhbCBidXQgaXQncyBxdWlja2VyICovXHJcbiAgICAvLyBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxzW2dyb3VwLm1hdGVyaWFsSW5kZXhdLmNsb25lKCkgYXMgU3BlY2tsZVRleHRNYXRlcmlhbFxyXG4gICAgLy8gLy9AdHMtaWdub3JlXHJcbiAgICAvLyB0aGlzLm1lc2guX21lbWJlcnMuZm9yRWFjaCgocGFja2luZ0luZm8sIHRleHQpID0+IHtcclxuICAgIC8vICAgaWYgKGdyb3VwLnN0YXJ0ID09PSBwYWNraW5nSW5mby5pbmRleCkge1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLmNvbG9yLmNvcHkodGV4dC5tYXRlcmlhbC5jb2xvcilcclxuICAgIC8vICAgICBtYXRlcmlhbC5vcGFjaXR5ID0gdGV4dC5tYXRlcmlhbC5vcGFjaXR5XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pXHJcblxyXG4gICAgLy8gcmV0dXJuIG1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHVyZ2UoKSB7XHJcbiAgICB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aCA9IDBcclxuICAgIHRoaXMuYmF0Y2hNYXRlcmlhbC5kaXNwb3NlKClcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgdGhpcy5tZXNoLmRpc3Bvc2UoKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEJhY2tTaWRlLFxyXG4gIEJveDMsXHJcbiAgQnVmZmVyQXR0cmlidXRlLFxyXG4gIEJ1ZmZlckdlb21ldHJ5LFxyXG4gIERhdGFUZXh0dXJlLFxyXG4gIERvdWJsZVNpZGUsXHJcbiAgRmxvYXRUeXBlLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE1hdHJpeDQsXHJcbiAgTWVzaCxcclxuICBPYmplY3QzRCxcclxuICBSYXksXHJcbiAgUmF5Y2FzdGVyLFxyXG4gIFJHQkFGb3JtYXQsXHJcbiAgU2tpbm5lZE1lc2gsXHJcbiAgU3BoZXJlLFxyXG4gIFRyaWFuZ2xlLFxyXG4gIFZlY3RvcjIsXHJcbiAgVmVjdG9yMyxcclxuICB0eXBlIEludGVyc2VjdGlvblxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBCYXRjaE9iamVjdCB9IGZyb20gJy4uL2JhdGNoaW5nL0JhdGNoT2JqZWN0LmpzJ1xyXG5pbXBvcnQgTWF0ZXJpYWxzIGZyb20gJy4uL21hdGVyaWFscy9NYXRlcmlhbHMuanMnXHJcbmltcG9ydCB7IFRvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlIH0gZnJvbSAnLi9Ub3BMZXZlbEFjY2VsZXJhdGlvblN0cnVjdHVyZS5qcydcclxuaW1wb3J0IHsgU3BlY2tsZVJheWNhc3RlciB9IGZyb20gJy4vU3BlY2tsZVJheWNhc3Rlci5qcydcclxuaW1wb3J0IExvZ2dlciBmcm9tICcuLi91dGlscy9Mb2dnZXIuanMnXHJcbmltcG9ydCB7IGdldE5leHRCYXRjaEluZGV4IH0gZnJvbSAnLi4vYmF0Y2hpbmcvQmF0Y2guanMnXHJcblxyXG5jb25zdCBfaW52ZXJzZU1hdHJpeCA9IG5ldyBNYXRyaXg0KClcclxuY29uc3QgX3JheSA9IG5ldyBSYXkoKVxyXG5jb25zdCBfc3BoZXJlID0gbmV3IFNwaGVyZSgpXHJcbmNvbnN0IF92VGVtcCA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3ZBID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfdkIgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF92QyA9IG5ldyBWZWN0b3IzKClcclxuXHJcbmNvbnN0IF90ZW1wQSA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3RlbXBCID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfdGVtcEMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5jb25zdCBfbW9ycGhBID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfbW9ycGhCID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfbW9ycGhDID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuY29uc3QgX3V2QSA9IG5ldyBWZWN0b3IyKClcclxuY29uc3QgX3V2QiA9IG5ldyBWZWN0b3IyKClcclxuY29uc3QgX3V2QyA9IG5ldyBWZWN0b3IyKClcclxuXHJcbmNvbnN0IF9pbnRlcnNlY3Rpb25Qb2ludCA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX2ludGVyc2VjdGlvblBvaW50V29ybGQgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5jb25zdCByYXkgPSAvKiBAX19QVVJFX18gKi8gbmV3IFJheSgpXHJcbmNvbnN0IHRtcEludmVyc2VNYXRyaXggPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hdHJpeDQoKVxyXG5cclxuZXhwb3J0IGVudW0gVHJhbnNmb3JtU3RvcmFnZSB7XHJcbiAgVkVSVEVYX1RFWFRVUkUgPSAwLFxyXG4gIFVOSUZPUk1fQVJSQVkgPSAxXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwZWNrbGVNZXNoIGV4dGVuZHMgTWVzaCB7XHJcbiAgcHVibGljIHN0YXRpYyBNZXNoQmF0Y2hOdW1iZXIgPSAwXHJcblxyXG4gIHByaXZhdGUgdGFzOiBUb3BMZXZlbEFjY2VsZXJhdGlvblN0cnVjdHVyZVxyXG4gIHByaXZhdGUgYmF0Y2hNYXRlcmlhbDogTWF0ZXJpYWxcclxuICBwcml2YXRlIG1hdGVyaWFsQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBNYXRlcmlhbCB9ID0ge31cclxuICBwcml2YXRlIG1hdGVyaWFsU3RhY2s6IEFycmF5PE1hdGVyaWFsIHwgTWF0ZXJpYWxbXT4gPSBbXVxyXG4gIHByaXZhdGUgYmF0Y2hNYXRlcmlhbFN0YWNrOiBBcnJheTxNYXRlcmlhbD4gPSBbXVxyXG4gIHByaXZhdGUgbWF0ZXJpYWxDYWNoZUxVVDogeyBbaWQ6IHN0cmluZ106IG51bWJlciB9ID0ge31cclxuXHJcbiAgcHJpdmF0ZSBfYmF0Y2hPYmplY3RzOiBCYXRjaE9iamVjdFtdXHJcbiAgcHJpdmF0ZSBfYmF0Y2hJbmRleDogbnVtYmVyXHJcbiAgcHJpdmF0ZSBfbmVlZHNSVEU6IGJvb2xlYW5cclxuICBwcml2YXRlIHRyYW5zZm9ybXNCdWZmZXI6IEZsb2F0MzJBcnJheSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG4gIHByaXZhdGUgdHJhbnNmb3JtU3RvcmFnZTogVHJhbnNmb3JtU3RvcmFnZVxyXG5cclxuICBwdWJsaWMgdHJhbnNmb3Jtc1RleHR1cmVVbmlmb3JtOiBEYXRhVGV4dHVyZVxyXG4gIHB1YmxpYyB0cmFuc2Zvcm1zQXJyYXlVbmlmb3JtczogTWF0cml4NFtdIHwgbnVsbCA9IG51bGxcclxuXHJcbiAgcHVibGljIGdldCBUQVMoKTogVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmUge1xyXG4gICAgcmV0dXJuIHRoaXMudGFzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGJhdGNoT2JqZWN0cygpOiBCYXRjaE9iamVjdFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9iYXRjaE9iamVjdHNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYmF0Y2hJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JhdGNoSW5kZXhcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbmVlZHNSVEUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVlZHNSVEVcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKGdlb21ldHJ5OiBCdWZmZXJHZW9tZXRyeSwgUlRFID0gZmFsc2UpIHtcclxuICAgIHN1cGVyKGdlb21ldHJ5KVxyXG4gICAgdGhpcy5fYmF0Y2hJbmRleCA9IGdldE5leHRCYXRjaEluZGV4KClcclxuICAgIHRoaXMuX25lZWRzUlRFID0gUlRFXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QmF0Y2hNYXRlcmlhbChtYXRlcmlhbDogTWF0ZXJpYWwpIHtcclxuICAgIHRoaXMuYmF0Y2hNYXRlcmlhbCA9IHRoaXMuZ2V0Q2FjaGVkTWF0ZXJpYWwobWF0ZXJpYWwpXHJcbiAgICB0aGlzLm1hdGVyaWFsID0gW3RoaXMuYmF0Y2hNYXRlcmlhbF1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRCYXRjaE9iamVjdHMoXHJcbiAgICBiYXRjaE9iamVjdHM6IEJhdGNoT2JqZWN0W10sXHJcbiAgICB0cmFuc2Zvcm1TdG9yYWdlOiBUcmFuc2Zvcm1TdG9yYWdlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9iYXRjaE9iamVjdHMgPSBiYXRjaE9iamVjdHNcclxuICAgIHRoaXMudHJhbnNmb3JtU3RvcmFnZSA9IHRyYW5zZm9ybVN0b3JhZ2VcclxuXHJcbiAgICBpZiAodGhpcy50cmFuc2Zvcm1TdG9yYWdlID09PSBUcmFuc2Zvcm1TdG9yYWdlLlZFUlRFWF9URVhUVVJFKSB7XHJcbiAgICAgIHRoaXMudHJhbnNmb3Jtc0J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5fYmF0Y2hPYmplY3RzLmxlbmd0aCAqIDQgKiA0KVxyXG4gICAgICB0aGlzLnRyYW5zZm9ybXNUZXh0dXJlVW5pZm9ybSA9IG5ldyBEYXRhVGV4dHVyZShcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybXNCdWZmZXIsXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1zQnVmZmVyLmxlbmd0aCAvIDQsXHJcbiAgICAgICAgMSxcclxuICAgICAgICBSR0JBRm9ybWF0LFxyXG4gICAgICAgIEZsb2F0VHlwZVxyXG4gICAgICApXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudHJhbnNmb3JtU3RvcmFnZSA9PT0gVHJhbnNmb3JtU3RvcmFnZS5VTklGT1JNX0FSUkFZKSB7XHJcbiAgICAgIHRoaXMudHJhbnNmb3Jtc0FycmF5VW5pZm9ybXMgPSB0aGlzLl9iYXRjaE9iamVjdHMubWFwKCgpID0+IG5ldyBNYXRyaXg0KCkpXHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybXNVbmlmb3JtKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRPdmVycmlkZU1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCkge1xyXG4gICAgdGhpcy5tYXRlcmlhbFN0YWNrLnB1c2godGhpcy5tYXRlcmlhbClcclxuXHJcbiAgICB0aGlzLm1hdGVyaWFsID0gdGhpcy5nZXRDYWNoZWRNYXRlcmlhbChtYXRlcmlhbCwgdHJ1ZSlcclxuICAgIHRoaXMubWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0T3ZlcnJpZGVCYXRjaE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCkge1xyXG4gICAgY29uc3Qgb3ZlcnJpZGVNYXRlcmlhbCA9IHRoaXMuZ2V0Q2FjaGVkTWF0ZXJpYWwobWF0ZXJpYWwsIHRydWUpXHJcbiAgICB0aGlzLmJhdGNoTWF0ZXJpYWxTdGFjay5wdXNoKG92ZXJyaWRlTWF0ZXJpYWwpXHJcbiAgICBjb25zdCBtYXRlcmlhbHMgPSB0aGlzLm1hdGVyaWFsIGFzIEFycmF5PE1hdGVyaWFsPlxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBtYXRlcmlhbHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgaWYgKG1hdGVyaWFsc1trXS51dWlkID09PSB0aGlzLmJhdGNoTWF0ZXJpYWwudXVpZCkge1xyXG4gICAgICAgIG1hdGVyaWFsc1trXSA9IG92ZXJyaWRlTWF0ZXJpYWxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmVCYXRjaE1hdGVyaWFsKCkge1xyXG4gICAgY29uc3QgbWF0ZXJpYWxzID0gdGhpcy5tYXRlcmlhbCBhcyBBcnJheTxNYXRlcmlhbD5cclxuICAgIGNvbnN0IG92ZXJyaWRlQmF0Y2hNYXRlcmlhbCA9IHRoaXMuYmF0Y2hNYXRlcmlhbFN0YWNrLnBvcCgpXHJcbiAgICBpZiAoIW92ZXJyaWRlQmF0Y2hNYXRlcmlhbCkgcmV0dXJuXHJcblxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBtYXRlcmlhbHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgaWYgKG1hdGVyaWFsc1trXS51dWlkID09PSBvdmVycmlkZUJhdGNoTWF0ZXJpYWwudXVpZCkge1xyXG4gICAgICAgIG1hdGVyaWFsc1trXSA9IHRoaXMuYmF0Y2hNYXRlcmlhbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvb2t1cE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5tYXRlcmlhbENhY2hlW21hdGVyaWFsLmlkXSB8fFxyXG4gICAgICB0aGlzLm1hdGVyaWFsQ2FjaGVbdGhpcy5tYXRlcmlhbENhY2hlTFVUW21hdGVyaWFsLmlkXV1cclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDYWNoZWRNYXRlcmlhbChtYXRlcmlhbDogTWF0ZXJpYWwsIGNvcHkgPSBmYWxzZSk6IE1hdGVyaWFsIHtcclxuICAgIGxldCBjYWNoZWRNYXRlcmlhbCA9IHRoaXMubG9va3VwTWF0ZXJpYWwobWF0ZXJpYWwpXHJcbiAgICBpZiAoIWNhY2hlZE1hdGVyaWFsKSB7XHJcbiAgICAgIGNvbnN0IGNsb25lID0gbWF0ZXJpYWwuY2xvbmUoKVxyXG4gICAgICBpZiAodGhpcy5fbmVlZHNSVEUpIHtcclxuICAgICAgICBpZiAoIWNsb25lLmRlZmluZXMpIGNsb25lLmRlZmluZXMgPSB7fVxyXG4gICAgICAgIGNsb25lLmRlZmluZXNbJ1VTRV9SVEUnXSA9ICcgJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubWF0ZXJpYWxDYWNoZVttYXRlcmlhbC5pZF0gPSBjbG9uZVxyXG4gICAgICB0aGlzLm1hdGVyaWFsQ2FjaGVMVVRbY2xvbmUuaWRdID0gbWF0ZXJpYWwuaWRcclxuICAgICAgY2FjaGVkTWF0ZXJpYWwgPSBjbG9uZVxyXG4gICAgICB0aGlzLnVwZGF0ZU1hdGVyaWFsVHJhbnNmb3Jtc1VuaWZvcm0odGhpcy5tYXRlcmlhbENhY2hlW21hdGVyaWFsLmlkXSlcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGNvcHkgfHxcclxuICAgICAgKG1hdGVyaWFsIGFzIG5ldmVyKVsnbmVlZHNDb3B5J10gfHxcclxuICAgICAgKGNhY2hlZE1hdGVyaWFsIGFzIG5ldmVyKVsnbmVlZHNDb3B5J11cclxuICAgICkge1xyXG4gICAgICBNYXRlcmlhbHMuZmFzdENvcHkobWF0ZXJpYWwsIGNhY2hlZE1hdGVyaWFsKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhY2hlZE1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdG9yZU1hdGVyaWFsKCkge1xyXG4gICAgaWYgKHRoaXMubWF0ZXJpYWxTdGFjay5sZW5ndGggPiAwKVxyXG4gICAgICB0aGlzLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbFN0YWNrLnBvcCgpIGFzIE1hdGVyaWFsIHwgTWF0ZXJpYWxbXVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZU1hdGVyaWFsVHJhbnNmb3Jtc1VuaWZvcm0obWF0ZXJpYWw6IE1hdGVyaWFsKSB7XHJcbiAgICBpZiAoIU1hdGVyaWFscy5pc1NwZWNrbGVNYXRlcmlhbChtYXRlcmlhbCkpIHJldHVyblxyXG5cclxuICAgIGlmICghbWF0ZXJpYWwuZGVmaW5lcykgbWF0ZXJpYWwuZGVmaW5lcyA9IHt9XHJcbiAgICBtYXRlcmlhbC5kZWZpbmVzWydUUkFOU0ZPUk1fU1RPUkFHRSddID0gdGhpcy50cmFuc2Zvcm1TdG9yYWdlXHJcblxyXG4gICAgaWYgKHRoaXMudHJhbnNmb3JtU3RvcmFnZSA9PT0gVHJhbnNmb3JtU3RvcmFnZS5WRVJURVhfVEVYVFVSRSkge1xyXG4gICAgICBtYXRlcmlhbC51c2VyRGF0YS50VHJhbnNmb3Jtcy52YWx1ZSA9IHRoaXMudHJhbnNmb3Jtc1RleHR1cmVVbmlmb3JtXHJcbiAgICAgIGlmIChtYXRlcmlhbC51c2VyRGF0YS5vYmpDb3VudClcclxuICAgICAgICBtYXRlcmlhbC51c2VyRGF0YS5vYmpDb3VudC52YWx1ZSA9IHRoaXMuX2JhdGNoT2JqZWN0cy5sZW5ndGhcclxuICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2Zvcm1TdG9yYWdlID09PSBUcmFuc2Zvcm1TdG9yYWdlLlVOSUZPUk1fQVJSQVkpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICFtYXRlcmlhbC5kZWZpbmVzWydPQkpfQ09VTlQnXSB8fFxyXG4gICAgICAgIG1hdGVyaWFsLmRlZmluZXNbJ09CSl9DT1VOVCddICE9PSB0aGlzLl9iYXRjaE9iamVjdHMubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIG1hdGVyaWFsLmRlZmluZXNbJ09CSl9DT1VOVCddID0gdGhpcy5fYmF0Y2hPYmplY3RzLmxlbmd0aFxyXG4gICAgICB9XHJcbiAgICAgIG1hdGVyaWFsLnVzZXJEYXRhLnVUcmFuc2Zvcm1zLnZhbHVlID0gdGhpcy50cmFuc2Zvcm1zQXJyYXlVbmlmb3Jtc1xyXG4gICAgfVxyXG5cclxuICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVRyYW5zZm9ybXNVbmlmb3JtKCkge1xyXG4gICAgaWYgKCF0aGlzLnRyYW5zZm9ybXNCdWZmZXIpIHJldHVyblxyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2VcclxuICAgIGlmICh0aGlzLnRyYW5zZm9ybVN0b3JhZ2UgPT09IFRyYW5zZm9ybVN0b3JhZ2UuVkVSVEVYX1RFWFRVUkUpIHtcclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLl9iYXRjaE9iamVjdHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBjb25zdCBiYXRjaE9iamVjdCA9IHRoaXMuX2JhdGNoT2JqZWN0c1trXVxyXG4gICAgICAgIGlmICghKG5lZWRzVXBkYXRlIHx8PSBiYXRjaE9iamVjdC50cmFuc2Zvcm1EaXJ0eSkpIGNvbnRpbnVlXHJcblxyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gYmF0Y2hPYmplY3QuYmF0Y2hJbmRleCAqIDE2XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1zQnVmZmVyW2luZGV4XSA9IGJhdGNoT2JqZWN0LnF1YXRlcm5pb24ueFxyXG4gICAgICAgIHRoaXMudHJhbnNmb3Jtc0J1ZmZlcltpbmRleCArIDFdID0gYmF0Y2hPYmplY3QucXVhdGVybmlvbi55XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1zQnVmZmVyW2luZGV4ICsgMl0gPSBiYXRjaE9iamVjdC5xdWF0ZXJuaW9uLnpcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybXNCdWZmZXJbaW5kZXggKyAzXSA9IGJhdGNoT2JqZWN0LnF1YXRlcm5pb24ud1xyXG5cclxuICAgICAgICB0aGlzLnRyYW5zZm9ybXNCdWZmZXJbaW5kZXggKyA0XSA9IGJhdGNoT2JqZWN0LnBpdm90X0xvdy54XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1zQnVmZmVyW2luZGV4ICsgNV0gPSBiYXRjaE9iamVjdC5waXZvdF9Mb3cueVxyXG4gICAgICAgIHRoaXMudHJhbnNmb3Jtc0J1ZmZlcltpbmRleCArIDZdID0gYmF0Y2hPYmplY3QucGl2b3RfTG93LnpcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybXNCdWZmZXJbaW5kZXggKyA3XSA9IGJhdGNoT2JqZWN0LnNjYWxlVmFsdWUueFxyXG5cclxuICAgICAgICB0aGlzLnRyYW5zZm9ybXNCdWZmZXJbaW5kZXggKyA4XSA9IGJhdGNoT2JqZWN0LnBpdm90X0hpZ2gueFxyXG4gICAgICAgIHRoaXMudHJhbnNmb3Jtc0J1ZmZlcltpbmRleCArIDldID0gYmF0Y2hPYmplY3QucGl2b3RfSGlnaC55XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1zQnVmZmVyW2luZGV4ICsgMTBdID0gYmF0Y2hPYmplY3QucGl2b3RfSGlnaC56XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1zQnVmZmVyW2luZGV4ICsgMTFdID0gYmF0Y2hPYmplY3Quc2NhbGVWYWx1ZS55XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNmb3Jtc0J1ZmZlcltpbmRleCArIDEyXSA9IGJhdGNoT2JqZWN0LnRyYW5zbGF0aW9uLnhcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybXNCdWZmZXJbaW5kZXggKyAxM10gPSBiYXRjaE9iamVjdC50cmFuc2xhdGlvbi55XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1zQnVmZmVyW2luZGV4ICsgMTRdID0gYmF0Y2hPYmplY3QudHJhbnNsYXRpb24uelxyXG4gICAgICAgIHRoaXMudHJhbnNmb3Jtc0J1ZmZlcltpbmRleCArIDE1XSA9IGJhdGNoT2JqZWN0LnNjYWxlVmFsdWUuelxyXG5cclxuICAgICAgICBiYXRjaE9iamVjdC50cmFuc2Zvcm1EaXJ0eSA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc2Zvcm1zVGV4dHVyZVVuaWZvcm0ubmVlZHNVcGRhdGUgPSBuZWVkc1VwZGF0ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLnRyYW5zZm9ybXNBcnJheVVuaWZvcm1zKSByZXR1cm5cclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLl9iYXRjaE9iamVjdHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBjb25zdCBiYXRjaE9iamVjdCA9IHRoaXMuX2JhdGNoT2JqZWN0c1trXVxyXG4gICAgICAgIGlmICghKG5lZWRzVXBkYXRlIHx8PSBiYXRjaE9iamVjdC50cmFuc2Zvcm1EaXJ0eSkpIGNvbnRpbnVlXHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNmb3Jtc0FycmF5VW5pZm9ybXNba10uc2V0KFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QucXVhdGVybmlvbi54LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QucGl2b3RfTG93LngsXHJcbiAgICAgICAgICBiYXRjaE9iamVjdC5waXZvdF9IaWdoLngsXHJcbiAgICAgICAgICBiYXRjaE9iamVjdC50cmFuc2xhdGlvbi54LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QucXVhdGVybmlvbi55LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QucGl2b3RfTG93LnksXHJcbiAgICAgICAgICBiYXRjaE9iamVjdC5waXZvdF9IaWdoLnksXHJcbiAgICAgICAgICBiYXRjaE9iamVjdC50cmFuc2xhdGlvbi55LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QucXVhdGVybmlvbi56LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QucGl2b3RfTG93LnosXHJcbiAgICAgICAgICBiYXRjaE9iamVjdC5waXZvdF9IaWdoLnosXHJcbiAgICAgICAgICBiYXRjaE9iamVjdC50cmFuc2xhdGlvbi56LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QucXVhdGVybmlvbi53LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3Quc2NhbGVWYWx1ZS54LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3Quc2NhbGVWYWx1ZS55LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3Quc2NhbGVWYWx1ZS56XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YXMgJiYgbmVlZHNVcGRhdGUpIHtcclxuICAgICAgdGhpcy50YXMucmVmaXQoKVxyXG4gICAgICB0aGlzLnRhcy5nZXRCb3VuZGluZ0JveCh0aGlzLnRhcy5ib3VuZHMpXHJcbiAgICAgIC8qKiBDYXRlcmludCB0byB0eXBlc2NyaXB0XHJcbiAgICAgICAqICBUaGVyZSBpcyBubyB1bm5pdmVyc2Ugd2hlcmUgdGhlIGdlb21lcnkgYm91bmRpbmcgYm94L3NwaGVyZSBpcyBudWxsIGF0IHRoaXMgcG9pbnRcclxuICAgICAgICovXHJcbiAgICAgIGlmICghdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCkgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCA9IG5ldyBCb3gzKClcclxuICAgICAgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveC5jb3B5KHRoaXMudGFzLmJvdW5kcylcclxuICAgICAgaWYgKCF0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlKSB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID0gbmV3IFNwaGVyZSgpXHJcbiAgICAgIHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdCb3guZ2V0Qm91bmRpbmdTcGhlcmUodGhpcy5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBidWlsZFRBUygpIHtcclxuICAgIHRoaXMudGFzID0gbmV3IFRvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlKHRoaXMuYmF0Y2hPYmplY3RzKVxyXG4gICAgLyoqIFdlIGRvIGEgcmVmaXQgaGVyZSwgYmVjYXVzZSBmb3Igc29tZSByZWFzb24gdGhlIGJ2aCBsaWJyYXJ5IGluY29ycmVjdGx5IGNvbXB1dGVzIHRoZSB0b3RhbCBidmggYm91bmRzIGF0IGNyZWF0aW9uLFxyXG4gICAgICogIHNvIHdlIGZvcmNlIGEgcmVmaXQgaW4gb3JkZXIgdG8gZ2V0IHRoZSBwcm9wZXIgYm91bmRzIHZhbHVlIG91dCBvZiBpdFxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcy5yZWZpdCgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QmF0Y2hPYmplY3RNYXRlcmlhbChiYXRjaE9iamVjdDogQmF0Y2hPYmplY3QpIHtcclxuICAgIGNvbnN0IHJ2ID0gYmF0Y2hPYmplY3QucmVuZGVyVmlld1xyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdlb21ldHJ5Lmdyb3Vwcy5maW5kKCh2YWx1ZSkgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHJ2LmJhdGNoU3RhcnQgPj0gdmFsdWUuc3RhcnQgJiZcclxuICAgICAgICBydi5iYXRjaFN0YXJ0ICsgcnYuYmF0Y2hDb3VudCA8PSB2YWx1ZS5jb3VudCArIHZhbHVlLnN0YXJ0XHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghZ3JvdXApIHtcclxuICAgICAgICBMb2dnZXIud2FybihcclxuICAgICAgICAgIGBDb3VsZCBub3QgZ2V0IG1hdGVyaWFsIGZvciAke2JhdGNoT2JqZWN0LnJlbmRlclZpZXcucmVuZGVyRGF0YS5pZH1gXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxbZ3JvdXAubWF0ZXJpYWxJbmRleCBhcyBudW1iZXJdXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjb252ZXJ0cyB0aGUgZ2l2ZW4gQlZIIHJheWNhc3QgaW50ZXJzZWN0aW9uIHRvIGFsaWduIHdpdGggdGhlIHRocmVlLmpzIHJheWNhc3RcclxuICAvLyBzdHJ1Y3R1cmUgKGluY2x1ZGUgb2JqZWN0LCB3b3JsZCBzcGFjZSBkaXN0YW5jZSBhbmQgcG9pbnQpLlxyXG4gIHByaXZhdGUgY29udmVydFJheWNhc3RJbnRlcnNlY3QoXHJcbiAgICBoaXQ6IEludGVyc2VjdGlvbiB8IG51bGwsXHJcbiAgICBvYmplY3Q6IE9iamVjdDNELFxyXG4gICAgcmF5Y2FzdGVyOiBSYXljYXN0ZXJcclxuICApIHtcclxuICAgIGlmIChoaXQgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBoaXQucG9pbnQuYXBwbHlNYXRyaXg0KG9iamVjdC5tYXRyaXhXb3JsZClcclxuICAgIGhpdC5kaXN0YW5jZSA9IGhpdC5wb2ludC5kaXN0YW5jZVRvKHJheWNhc3Rlci5yYXkub3JpZ2luKVxyXG4gICAgaGl0Lm9iamVjdCA9IG9iamVjdFxyXG5cclxuICAgIGlmIChoaXQuZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBoaXQuZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaGl0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYXljYXN0KHJheWNhc3RlcjogU3BlY2tsZVJheWNhc3RlciwgaW50ZXJzZWN0czogQXJyYXk8SW50ZXJzZWN0aW9uPikge1xyXG4gICAgaWYgKHRoaXMudGFzKSB7XHJcbiAgICAgIGlmICh0aGlzLmJhdGNoTWF0ZXJpYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuXHJcblxyXG4gICAgICB0bXBJbnZlcnNlTWF0cml4LmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KClcclxuICAgICAgcmF5LmNvcHkocmF5Y2FzdGVyLnJheSkuYXBwbHlNYXRyaXg0KHRtcEludmVyc2VNYXRyaXgpXHJcblxyXG4gICAgICBpZiAocmF5Y2FzdGVyLmZpcnN0SGl0T25seSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGhpdCA9IHRoaXMuY29udmVydFJheWNhc3RJbnRlcnNlY3QoXHJcbiAgICAgICAgICB0aGlzLnRhcy5yYXljYXN0Rmlyc3QocmF5LCByYXljYXN0ZXIuaW50ZXJzZWN0VEFTT25seSwgdGhpcy5iYXRjaE1hdGVyaWFsKSxcclxuICAgICAgICAgIHRoaXMsXHJcbiAgICAgICAgICByYXljYXN0ZXJcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGhpdCkge1xyXG4gICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKGhpdClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgaGl0cyA9IHRoaXMudGFzLnJheWNhc3QoXHJcbiAgICAgICAgICByYXksXHJcbiAgICAgICAgICByYXljYXN0ZXIuaW50ZXJzZWN0VEFTT25seSxcclxuICAgICAgICAgIHRoaXMuYmF0Y2hNYXRlcmlhbFxyXG4gICAgICAgIClcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGhpdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBoaXQgPSB0aGlzLmNvbnZlcnRSYXljYXN0SW50ZXJzZWN0KGhpdHNbaV0sIHRoaXMsIHJheWNhc3RlcilcclxuICAgICAgICAgIGlmIChoaXQpIHtcclxuICAgICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKGhpdClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeVxyXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxcclxuICAgICAgY29uc3QgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkXHJcblxyXG4gICAgICBpZiAobWF0ZXJpYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuXHJcblxyXG4gICAgICAvLyBDaGVja2luZyBib3VuZGluZ1NwaGVyZSBkaXN0YW5jZSB0byByYXlcclxuXHJcbiAgICAgIGlmIChnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCkgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKClcclxuXHJcbiAgICAgIF9zcGhlcmUuY29weShnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSB8fCBuZXcgU3BoZXJlKCkpXHJcbiAgICAgIF9zcGhlcmUuYXBwbHlNYXRyaXg0KG1hdHJpeFdvcmxkKVxyXG5cclxuICAgICAgaWYgKHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0c1NwaGVyZShfc3BoZXJlKSA9PT0gZmFsc2UpIHJldHVyblxyXG5cclxuICAgICAgLy9cclxuXHJcbiAgICAgIF9pbnZlcnNlTWF0cml4LmNvcHkobWF0cml4V29ybGQpLmludmVydCgpXHJcbiAgICAgIF9yYXkuY29weShyYXljYXN0ZXIucmF5KS5hcHBseU1hdHJpeDQoX2ludmVyc2VNYXRyaXgpXHJcblxyXG4gICAgICAvLyBDaGVjayBib3VuZGluZ0JveCBiZWZvcmUgY29udGludWluZ1xyXG5cclxuICAgICAgaWYgKGdlb21ldHJ5LmJvdW5kaW5nQm94ICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKF9yYXkuaW50ZXJzZWN0c0JveChnZW9tZXRyeS5ib3VuZGluZ0JveCkgPT09IGZhbHNlKSByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGludGVyc2VjdGlvblxyXG5cclxuICAgICAgY29uc3QgaW5kZXggPSBnZW9tZXRyeS5pbmRleFxyXG4gICAgICAvKiogU3RvcmVkIGhpZ2ggY29tcG9uZW50IGlmIFJURSBpcyBiZWluZyB1c2VkLiBSZWd1bGFyIHBvc2l0aW9ucyBvdGhlcndpc2UgKi9cclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uIGFzIEJ1ZmZlckF0dHJpYnV0ZVxyXG4gICAgICAvKiogU3RvcmVkIGxvdyBjb21wb25lbnQgaWYgUlRFIGlzIGJlaW5nIHVzZWQuIHVuZGVmaW5lZCBvdGhlcndpc2UgKi9cclxuICAgICAgY29uc3QgcG9zaXRpb25Mb3cgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzWydwb3NpdGlvbl9sb3cnXSBhcyBCdWZmZXJBdHRyaWJ1dGVcclxuICAgICAgY29uc3QgbW9ycGhQb3NpdGlvbiA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiBhcyBBcnJheTxCdWZmZXJBdHRyaWJ1dGU+XHJcbiAgICAgIGNvbnN0IG1vcnBoVGFyZ2V0c1JlbGF0aXZlID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzUmVsYXRpdmVcclxuICAgICAgY29uc3QgdXYgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnV2IGFzIEJ1ZmZlckF0dHJpYnV0ZVxyXG4gICAgICBjb25zdCB1djIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnV2MiBhcyBCdWZmZXJBdHRyaWJ1dGVcclxuICAgICAgY29uc3QgZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzXHJcbiAgICAgIGNvbnN0IGRyYXdSYW5nZSA9IGdlb21ldHJ5LmRyYXdSYW5nZVxyXG5cclxuICAgICAgaWYgKGluZGV4ICE9PSBudWxsKSB7XHJcbiAgICAgICAgLy8gaW5kZXhlZCBidWZmZXIgZ2VvbWV0cnlcclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdyb3Vwc1tpXVxyXG4gICAgICAgICAgICBpZiAoIWdyb3VwLm1hdGVyaWFsSW5kZXgpIHtcclxuICAgICAgICAgICAgICBMb2dnZXIuZXJyb3IoYEdyb3VwIHdpdGggbm8gbWF0ZXJpYWwsIHNraXBwaW5nIWApXHJcbiAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbZ3JvdXAubWF0ZXJpYWxJbmRleF1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoZ3JvdXAuc3RhcnQsIGRyYXdSYW5nZS5zdGFydClcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgaW5kZXguY291bnQsXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4oZ3JvdXAuc3RhcnQgKyBncm91cC5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KVxyXG4gICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gc3RhcnQsIGpsID0gZW5kOyBqIDwgamw7IGogKz0gMykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGEgPSBpbmRleC5nZXRYKGopXHJcbiAgICAgICAgICAgICAgY29uc3QgYiA9IGluZGV4LmdldFgoaiArIDEpXHJcbiAgICAgICAgICAgICAgY29uc3QgYyA9IGluZGV4LmdldFgoaiArIDIpXHJcblxyXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBNYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgIHJheWNhc3RlcixcclxuICAgICAgICAgICAgICAgIF9yYXksXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkxvdyxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgbW9ycGhQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0c1JlbGF0aXZlLFxyXG4gICAgICAgICAgICAgICAgdXYsXHJcbiAgICAgICAgICAgICAgICB1djIsXHJcbiAgICAgICAgICAgICAgICBhLFxyXG4gICAgICAgICAgICAgICAgYixcclxuICAgICAgICAgICAgICAgIGNcclxuICAgICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKGogLyAzKSAvLyB0cmlhbmdsZSBudW1iZXIgaW4gaW5kZXhlZCBidWZmZXIgc2VtYW50aWNzXHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uLmZhY2UpXHJcbiAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlLm1hdGVyaWFsSW5kZXggPSBncm91cC5tYXRlcmlhbEluZGV4XHJcbiAgICAgICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goaW50ZXJzZWN0aW9uKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGRyYXdSYW5nZS5zdGFydClcclxuICAgICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKGluZGV4LmNvdW50LCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQpXHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0LCBpbCA9IGVuZDsgaSA8IGlsOyBpICs9IDMpIHtcclxuICAgICAgICAgICAgY29uc3QgYSA9IGluZGV4LmdldFgoaSlcclxuICAgICAgICAgICAgY29uc3QgYiA9IGluZGV4LmdldFgoaSArIDEpXHJcbiAgICAgICAgICAgIGNvbnN0IGMgPSBpbmRleC5nZXRYKGkgKyAyKVxyXG5cclxuICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbihcclxuICAgICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICAgIG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgIHJheWNhc3RlcixcclxuICAgICAgICAgICAgICBfcmF5LFxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uTG93LFxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgIG1vcnBoUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgbW9ycGhUYXJnZXRzUmVsYXRpdmUsXHJcbiAgICAgICAgICAgICAgdXYsXHJcbiAgICAgICAgICAgICAgdXYyLFxyXG4gICAgICAgICAgICAgIGEsXHJcbiAgICAgICAgICAgICAgYixcclxuICAgICAgICAgICAgICBjXHJcbiAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gTWF0aC5mbG9vcihpIC8gMykgLy8gdHJpYW5nbGUgbnVtYmVyIGluIGluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xyXG4gICAgICAgICAgICAgIGludGVyc2VjdHMucHVzaChpbnRlcnNlY3Rpb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIG5vbi1pbmRleGVkIGJ1ZmZlciBnZW9tZXRyeVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXRlcmlhbCkpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzW2ldXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFtncm91cC5tYXRlcmlhbEluZGV4IGFzIG51bWJlcl1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoZ3JvdXAuc3RhcnQsIGRyYXdSYW5nZS5zdGFydClcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgcG9zaXRpb24uY291bnQsXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4oZ3JvdXAuc3RhcnQgKyBncm91cC5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KVxyXG4gICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gc3RhcnQsIGpsID0gZW5kOyBqIDwgamw7IGogKz0gMykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGEgPSBqXHJcbiAgICAgICAgICAgICAgY29uc3QgYiA9IGogKyAxXHJcbiAgICAgICAgICAgICAgY29uc3QgYyA9IGogKyAyXHJcblxyXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBNYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgIHJheWNhc3RlcixcclxuICAgICAgICAgICAgICAgIF9yYXksXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkxvdyxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgbW9ycGhQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0c1JlbGF0aXZlLFxyXG4gICAgICAgICAgICAgICAgdXYsXHJcbiAgICAgICAgICAgICAgICB1djIsXHJcbiAgICAgICAgICAgICAgICBhLFxyXG4gICAgICAgICAgICAgICAgYixcclxuICAgICAgICAgICAgICAgIGNcclxuICAgICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKGogLyAzKSAvLyB0cmlhbmdsZSBudW1iZXIgaW4gbm9uLWluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5mYWNlKVxyXG4gICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZS5tYXRlcmlhbEluZGV4ID0gZ3JvdXAubWF0ZXJpYWxJbmRleCBhcyBudW1iZXJcclxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMucHVzaChpbnRlcnNlY3Rpb24pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgZHJhd1JhbmdlLnN0YXJ0KVxyXG4gICAgICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4ocG9zaXRpb24uY291bnQsIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudClcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQsIGlsID0gZW5kOyBpIDwgaWw7IGkgKz0gMykge1xyXG4gICAgICAgICAgICBjb25zdCBhID0gaVxyXG4gICAgICAgICAgICBjb25zdCBiID0gaSArIDFcclxuICAgICAgICAgICAgY29uc3QgYyA9IGkgKyAyXHJcblxyXG4gICAgICAgICAgICBpbnRlcnNlY3Rpb24gPSBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKFxyXG4gICAgICAgICAgICAgIHRoaXMsXHJcbiAgICAgICAgICAgICAgbWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgcmF5Y2FzdGVyLFxyXG4gICAgICAgICAgICAgIF9yYXksXHJcbiAgICAgICAgICAgICAgcG9zaXRpb25Mb3csXHJcbiAgICAgICAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgbW9ycGhQb3NpdGlvbixcclxuICAgICAgICAgICAgICBtb3JwaFRhcmdldHNSZWxhdGl2ZSxcclxuICAgICAgICAgICAgICB1dixcclxuICAgICAgICAgICAgICB1djIsXHJcbiAgICAgICAgICAgICAgYSxcclxuICAgICAgICAgICAgICBiLFxyXG4gICAgICAgICAgICAgIGNcclxuICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbikge1xyXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKGkgLyAzKSAvLyB0cmlhbmdsZSBudW1iZXIgaW4gbm9uLWluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xyXG4gICAgICAgICAgICAgIGludGVyc2VjdHMucHVzaChpbnRlcnNlY3Rpb24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrSW50ZXJzZWN0aW9uKFxyXG4gIG9iamVjdDogT2JqZWN0M0QsXHJcbiAgbWF0ZXJpYWw6IE1hdGVyaWFsLFxyXG4gIHJheWNhc3RlcjogUmF5Y2FzdGVyLFxyXG4gIHJheTogUmF5LFxyXG4gIHBBOiBWZWN0b3IzLFxyXG4gIHBCOiBWZWN0b3IzLFxyXG4gIHBDOiBWZWN0b3IzLFxyXG4gIHBvaW50OiBWZWN0b3IzXHJcbik6IChJbnRlcnNlY3Rpb24gJiB7IHV2MjogVmVjdG9yMiB8IHVuZGVmaW5lZCB9KSB8IG51bGwge1xyXG4gIGxldCBpbnRlcnNlY3RcclxuXHJcbiAgaWYgKG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlKSB7XHJcbiAgICBpbnRlcnNlY3QgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUocEMsIHBCLCBwQSwgdHJ1ZSwgcG9pbnQpXHJcbiAgfSBlbHNlIHtcclxuICAgIGludGVyc2VjdCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZShwQSwgcEIsIHBDLCBtYXRlcmlhbC5zaWRlICE9PSBEb3VibGVTaWRlLCBwb2ludClcclxuICB9XHJcblxyXG4gIGlmIChpbnRlcnNlY3QgPT09IG51bGwpIHJldHVybiBudWxsXHJcblxyXG4gIF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkLmNvcHkocG9pbnQpXHJcbiAgX2ludGVyc2VjdGlvblBvaW50V29ybGQuYXBwbHlNYXRyaXg0KG9iamVjdC5tYXRyaXhXb3JsZClcclxuXHJcbiAgY29uc3QgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkKVxyXG5cclxuICBpZiAoZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIpIHJldHVybiBudWxsXHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBkaXN0YW5jZSxcclxuICAgIHBvaW50OiBfaW50ZXJzZWN0aW9uUG9pbnRXb3JsZC5jbG9uZSgpLFxyXG4gICAgb2JqZWN0LFxyXG4gICAgdXY6IHVuZGVmaW5lZCxcclxuICAgIHV2MjogdW5kZWZpbmVkLFxyXG4gICAgZmFjZTogdW5kZWZpbmVkXHJcbiAgfVxyXG59XHJcblxyXG4vKiogSWYgdGhlIGdlb21ldHJ5IGlzIG5vbiBkb3VibGUtPjJmbG9hdHMgZW5jb2RlZCwgdGhlIGBwb3NpdGlvbkhpZ2hgIGFyZ3VtZW50IHdpbGwgYWN0dWFsbHlcclxuICogIGhvbGQgdGhlIGRlZmF1bHQgYHBvc2l0aW9uYCBhdHRyaWJ1dGUgdmFsdWVzXHJcbiAqL1xyXG5mdW5jdGlvbiBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKFxyXG4gIG9iamVjdDogT2JqZWN0M0QsXHJcbiAgbWF0ZXJpYWw6IE1hdGVyaWFsLFxyXG4gIHJheWNhc3RlcjogUmF5Y2FzdGVyLFxyXG4gIHJheTogUmF5LFxyXG4gIHBvc2l0aW9uTG93OiBCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgcG9zaXRpb25IaWdoOiBCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgbW9ycGhQb3NpdGlvbjogQXJyYXk8QnVmZmVyQXR0cmlidXRlPixcclxuICBtb3JwaFRhcmdldHNSZWxhdGl2ZTogYm9vbGVhbixcclxuICB1djogQnVmZmVyQXR0cmlidXRlLFxyXG4gIHV2MjogQnVmZmVyQXR0cmlidXRlLFxyXG4gIGE6IG51bWJlcixcclxuICBiOiBudW1iZXIsXHJcbiAgYzogbnVtYmVyXHJcbikge1xyXG4gIF92QS5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uSGlnaCwgYSlcclxuICBfdkIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkhpZ2gsIGIpXHJcbiAgX3ZDLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25IaWdoLCBjKVxyXG4gIGlmIChwb3NpdGlvbkxvdykge1xyXG4gICAgX3ZBLmFkZChfdlRlbXAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkxvdywgYSkpXHJcbiAgICBfdkIuYWRkKF92VGVtcC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uTG93LCBiKSlcclxuICAgIF92Qy5hZGQoX3ZUZW1wLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25Mb3csIGMpKVxyXG4gIH1cclxuXHJcbiAgY29uc3QgbW9ycGhJbmZsdWVuY2VzID0gKG9iamVjdCBhcyBTa2lubmVkTWVzaCkubW9ycGhUYXJnZXRJbmZsdWVuY2VzXHJcblxyXG4gIGlmIChtb3JwaFBvc2l0aW9uICYmIG1vcnBoSW5mbHVlbmNlcykge1xyXG4gICAgX21vcnBoQS5zZXQoMCwgMCwgMClcclxuICAgIF9tb3JwaEIuc2V0KDAsIDAsIDApXHJcbiAgICBfbW9ycGhDLnNldCgwLCAwLCAwKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwLCBpbCA9IG1vcnBoUG9zaXRpb24ubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xyXG4gICAgICBjb25zdCBpbmZsdWVuY2UgPSBtb3JwaEluZmx1ZW5jZXNbaV1cclxuICAgICAgY29uc3QgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaFBvc2l0aW9uW2ldXHJcblxyXG4gICAgICBpZiAoaW5mbHVlbmNlID09PSAwKSBjb250aW51ZVxyXG5cclxuICAgICAgX3RlbXBBLmZyb21CdWZmZXJBdHRyaWJ1dGUobW9ycGhBdHRyaWJ1dGUsIGEpXHJcbiAgICAgIF90ZW1wQi5mcm9tQnVmZmVyQXR0cmlidXRlKG1vcnBoQXR0cmlidXRlLCBiKVxyXG4gICAgICBfdGVtcEMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtb3JwaEF0dHJpYnV0ZSwgYylcclxuXHJcbiAgICAgIGlmIChtb3JwaFRhcmdldHNSZWxhdGl2ZSkge1xyXG4gICAgICAgIF9tb3JwaEEuYWRkU2NhbGVkVmVjdG9yKF90ZW1wQSwgaW5mbHVlbmNlKVxyXG4gICAgICAgIF9tb3JwaEIuYWRkU2NhbGVkVmVjdG9yKF90ZW1wQiwgaW5mbHVlbmNlKVxyXG4gICAgICAgIF9tb3JwaEMuYWRkU2NhbGVkVmVjdG9yKF90ZW1wQywgaW5mbHVlbmNlKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIF9tb3JwaEEuYWRkU2NhbGVkVmVjdG9yKF90ZW1wQS5zdWIoX3ZBKSwgaW5mbHVlbmNlKVxyXG4gICAgICAgIF9tb3JwaEIuYWRkU2NhbGVkVmVjdG9yKF90ZW1wQi5zdWIoX3ZCKSwgaW5mbHVlbmNlKVxyXG4gICAgICAgIF9tb3JwaEMuYWRkU2NhbGVkVmVjdG9yKF90ZW1wQy5zdWIoX3ZDKSwgaW5mbHVlbmNlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3ZBLmFkZChfbW9ycGhBKVxyXG4gICAgX3ZCLmFkZChfbW9ycGhCKVxyXG4gICAgX3ZDLmFkZChfbW9ycGhDKVxyXG4gIH1cclxuXHJcbiAgaWYgKChvYmplY3QgYXMgU2tpbm5lZE1lc2gpLmlzU2tpbm5lZE1lc2gpIHtcclxuICAgIDsob2JqZWN0IGFzIFNraW5uZWRNZXNoKS5ib25lVHJhbnNmb3JtKGEsIF92QSlcclxuICAgIDsob2JqZWN0IGFzIFNraW5uZWRNZXNoKS5ib25lVHJhbnNmb3JtKGIsIF92QilcclxuICAgIDsob2JqZWN0IGFzIFNraW5uZWRNZXNoKS5ib25lVHJhbnNmb3JtKGMsIF92QylcclxuICB9XHJcblxyXG4gIGNvbnN0IGludGVyc2VjdGlvbiA9IGNoZWNrSW50ZXJzZWN0aW9uKFxyXG4gICAgb2JqZWN0LFxyXG4gICAgbWF0ZXJpYWwsXHJcbiAgICByYXljYXN0ZXIsXHJcbiAgICByYXksXHJcbiAgICBfdkEsXHJcbiAgICBfdkIsXHJcbiAgICBfdkMsXHJcbiAgICBfaW50ZXJzZWN0aW9uUG9pbnRcclxuICApXHJcblxyXG4gIGlmIChpbnRlcnNlY3Rpb24pIHtcclxuICAgIGlmICh1dikge1xyXG4gICAgICBfdXZBLmZyb21CdWZmZXJBdHRyaWJ1dGUodXYsIGEpXHJcbiAgICAgIF91dkIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1diwgYilcclxuICAgICAgX3V2Qy5mcm9tQnVmZmVyQXR0cmlidXRlKHV2LCBjKVxyXG5cclxuICAgICAgaW50ZXJzZWN0aW9uLnV2ID0gVHJpYW5nbGUuZ2V0VVYoXHJcbiAgICAgICAgX2ludGVyc2VjdGlvblBvaW50LFxyXG4gICAgICAgIF92QSxcclxuICAgICAgICBfdkIsXHJcbiAgICAgICAgX3ZDLFxyXG4gICAgICAgIF91dkEsXHJcbiAgICAgICAgX3V2QixcclxuICAgICAgICBfdXZDLFxyXG4gICAgICAgIG5ldyBWZWN0b3IyKClcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1djIpIHtcclxuICAgICAgX3V2QS5mcm9tQnVmZmVyQXR0cmlidXRlKHV2MiwgYSlcclxuICAgICAgX3V2Qi5mcm9tQnVmZmVyQXR0cmlidXRlKHV2MiwgYilcclxuICAgICAgX3V2Qy5mcm9tQnVmZmVyQXR0cmlidXRlKHV2MiwgYylcclxuXHJcbiAgICAgIGludGVyc2VjdGlvbi51djIgPSBUcmlhbmdsZS5nZXRVVihcclxuICAgICAgICBfaW50ZXJzZWN0aW9uUG9pbnQsXHJcbiAgICAgICAgX3ZBLFxyXG4gICAgICAgIF92QixcclxuICAgICAgICBfdkMsXHJcbiAgICAgICAgX3V2QSxcclxuICAgICAgICBfdXZCLFxyXG4gICAgICAgIF91dkMsXHJcbiAgICAgICAgbmV3IFZlY3RvcjIoKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmFjZSA9IHtcclxuICAgICAgYSxcclxuICAgICAgYixcclxuICAgICAgYyxcclxuICAgICAgbm9ybWFsOiBuZXcgVmVjdG9yMygpLFxyXG4gICAgICBtYXRlcmlhbEluZGV4OiAwXHJcbiAgICB9XHJcblxyXG4gICAgVHJpYW5nbGUuZ2V0Tm9ybWFsKF92QSwgX3ZCLCBfdkMsIGZhY2Uubm9ybWFsKVxyXG5cclxuICAgIGludGVyc2VjdGlvbi5mYWNlID0gZmFjZVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGludGVyc2VjdGlvblxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlRGVwdGhWZXJ0ID0gLyogZ2xzbCAqLyBgXHJcbiNpbmNsdWRlIDxjb21tb24+XHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICAvLyBUaGUgaGlnaCBjb21wb25lbnQgaXMgc3RvcmVkIGFzIHRoZSBkZWZhdWx0ICdwb3NpdGlvbicgYXR0cmlidXRlIGJ1ZmZlclxyXG4gICAgYXR0cmlidXRlIHZlYzMgcG9zaXRpb25fbG93O1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfaGlnaDtcclxuICAgIHVuaWZvcm0gdmVjMyB1Vmlld2VyX2xvdztcclxuICAgIHVuaWZvcm0gbWF0NCBydGVNb2RlbFZpZXdNYXRyaXg7XHJcbiNlbmRpZlxyXG5cclxuI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICBhdHRyaWJ1dGUgZmxvYXQgb2JqSW5kZXg7XHJcblxyXG4gICAgI2lmIFRSQU5TRk9STV9TVE9SQUdFID09IDBcclxuICAgICAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgICAgICNkZWZpbmUgVFJBTlNGT1JNX1NUUklERSA0XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgI2RlZmluZSBUUkFOU0ZPUk1fU1RSSURFIDQuXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdFRyYW5zZm9ybXM7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBvYmpDb3VudDtcclxuICAgICNlbGlmIFRSQU5TRk9STV9TVE9SQUdFID09IDFcclxuICAgICAgICB1bmlmb3JtIG1hdDQgdVRyYW5zZm9ybXNbT0JKX0NPVU5UXTtcclxuICAgICNlbmRpZlxyXG4jZW5kaWZcclxuXHJcbiNpZmRlZiBMSU5FQVJfREVQVEhcclxuICAgIHZhcnlpbmcgdmVjNCB2Vmlld1Bvc2l0aW9uO1xyXG4jZW5kaWZcclxuXHJcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cclxuLy8gVGhpcyBpcyB1c2VkIGZvciBjb21wdXRpbmcgYW4gZXF1aXZhbGVudCBvZiBnbF9GcmFnQ29vcmQueiB0aGF0IGlzIGFzIGhpZ2ggcHJlY2lzaW9uIGFzIHBvc3NpYmxlLlxyXG4vLyBTb21lIHBsYXRmb3JtcyBjb21wdXRlIGdsX0ZyYWdDb29yZCBhdCBhIGxvd2VyIHByZWNpc2lvbiB3aGljaCBtYWtlcyB0aGUgbWFudWFsbHkgY29tcHV0ZWQgdmFsdWUgYmV0dGVyIGZvclxyXG4vLyBkZXB0aC1iYXNlZCBwb3N0cHJvY2Vzc2luZyBlZmZlY3RzLiBSZXByb2R1Y2VkIG9uIGlQYWQgd2l0aCBBMTAgcHJvY2Vzc29yIC8gaVBhZE9TIDEzLjMuMS5cclxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XHJcblxyXG4jaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgIHZvaWQgb2JqZWN0VHJhbnNmb3JtKG91dCB2ZWM0IHF1YXRlcm5pb24sIG91dCB2ZWM0IHBpdm90TG93LCBvdXQgdmVjNCBwaXZvdEhpZ2gsIG91dCB2ZWM0IHRyYW5zbGF0aW9uLCBvdXQgdmVjNCBzY2FsZSl7XHJcbiAgICAgICAgI2lmIFRSQU5TRk9STV9TVE9SQUdFID09IDBcclxuICAgICAgICAgICAgI2lmIF9fVkVSU0lPTl9fID09IDMwMFxyXG4gICAgICAgICAgICAgICAgaXZlYzIgdXYgPSBpdmVjMihpbnQob2JqSW5kZXgpICogVFJBTlNGT1JNX1NUUklERSwgMCk7IFxyXG4gICAgICAgICAgICAgICAgdmVjNCB2MCA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diwgMCApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MSA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDEsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjIgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigyLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYzID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMywgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgcXVhdGVybmlvbiA9IHYwO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RMb3cgPSB2ZWM0KHYxLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RIaWdoID0gdmVjNCh2Mi54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh2My54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHNjYWxlID0gdmVjNCh2MS53LCB2Mi53LCB2My53LCAxLik7XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gb2JqQ291bnQgKiBUUkFOU0ZPUk1fU1RSSURFO1xyXG4gICAgICAgICAgICAgICAgdmVjMiBjVXYgPSB2ZWMyKDAuNS9zaXplLCAwLjUpO1xyXG4gICAgICAgICAgICAgICAgdmVjMiBkVXYgPSB2ZWMyKDEuL3NpemUsIDAuKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmVjMiB1diA9IHZlYzIoKG9iakluZGV4ICogVFJBTlNGT1JNX1NUUklERSkvc2l6ZSArIGNVdi54LCBjVXYueSk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYwID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MSA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2ICsgZFV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjIgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIDIuICogZFV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjMgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIDMuICogZFV2KTtcclxuICAgICAgICAgICAgICAgIHF1YXRlcm5pb24gPSB2MDtcclxuICAgICAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh2MS54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodjIueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodjMueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBzY2FsZSA9IHZlYzQodjEudywgdjIudywgdjMudywgMS4pO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZWxpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAxXHJcbiAgICAgICAgICAgIG1hdDQgdE1hdHJpeCA9IHVUcmFuc2Zvcm1zW2ludChvYmpJbmRleCldO1xyXG4gICAgICAgICAgICBxdWF0ZXJuaW9uID0gdE1hdHJpeFswXTtcclxuICAgICAgICAgICAgcGl2b3RMb3cgPSB2ZWM0KHRNYXRyaXhbMV0ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodE1hdHJpeFsyXS54eXosIDEuKTtcclxuICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHRNYXRyaXhbM10ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHNjYWxlID0gdmVjNCh0TWF0cml4WzFdWzNdLCB0TWF0cml4WzJdWzNdLCB0TWF0cml4WzNdWzNdLCAxLik7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICB9XHJcblxyXG4gICAgdmVjMyByb3RhdGVfdmVydGV4X3Bvc2l0aW9uKHZlYzMgcG9zaXRpb24sIHZlYzQgcXVhdClcclxuICAgIHsgXHJcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbikgKyBxdWF0LncgKiBwb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEFub3RoZXIgd29ya2Fyb3VuZCBmb3IgQXBwbGUncyBzdHVwaWQgY29tcGlsZXIgKi9cclxuICAgIHZlYzQgc2FmZU11bCh2ZWM0IGEsIHZlYzQgYikge1xyXG4gICAgICAgIC8vIFByZXZlbnRzIGNvbnN0YW50IGZvbGRpbmcgYW5kIG9wdGltaXphdGlvblxyXG4gICAgICAgIHJldHVybiAoYSArIHZlYzQoMC4wKSkgKiAoYiArIHZlYzQoMS4wKSkgLSBhICogdmVjNCgxLjApO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZ2hwIHZlYzMgcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEoaGlnaHAgdmVjNCB2MCwgaGlnaHAgdmVjNCB2MSwgaGlnaHAgdmVjNCBzY2FsZSwgaGlnaHAgdmVjNCBxdWF0KVxyXG4gICAge1xyXG4gICAgICAgIC8qKiAhISEgV09SS0FST1VORCBGT1IgSW50ZWwgSXJpc1hlIENBUkRTICEhISAqL1xyXG4gICAgICAgIC8qKiBUaGUgY29kZSBiZWxvdyB3aWxsIG5vdCBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0cyBpbiBpbnRlbCBJcmlzWEUgaW50ZWdyYXRlZCBHUFVzLiBcclxuICAgICAgICAgKiAgVGhlIGdlb21ldHJ5IHdpbGwgdHVybiBtYW5nbGVkLCBhbGJlaXQgc3RhYmxlXHJcbiAgICAgICAgICogIEkgY2FuJ3Qga25vdyBmb3Igc3VyZSB3aGF0IGlzIGdvaW5nIG9uLCBidXQgcm90YXRpbmcgdGhlIGRpZmZlcmVuY2Ugc2VlbXMgdG8gXHJcbiAgICAgICAgICogIGZvcmNlIHRoZSByZXN1bHQgaW50byBhIGxvd2VyIHByZWNpc2lvbj9cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBoaWdocCB2ZWM0IHBvc2l0aW9uID0gdjAgLSB2MTtcclxuICAgICAgICAvLyByZXR1cm4gcG9zaXRpb24ueHl6ICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbi54eXopICsgcXVhdC53ICogcG9zaXRpb24ueHl6KTtcclxuXHJcbiAgICAgICAgLyoqIFN1YnRyYWN0aW5nIHRoZSByb3RhdGVkIHZlY3RvcnMgd29ya3MuICovXHJcbiAgICAgICAgcmV0dXJuIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24oc2FmZU11bCh2MCwgc2NhbGUpLnh5eiwgcXVhdCkgIC0gcm90YXRlX3ZlcnRleF9wb3NpdGlvbihzYWZlTXVsKHYxLCBzY2FsZSkueHl6LCBxdWF0KSA7XHJcblxyXG4gICAgICAgIC8qKiBBbiBhbHRlcm5hdGUgd29ya2Fyb3VuZCBpc1xyXG4gICAgICAgICAqIGhpZ2hwIHZlYzMgcG9zaXRpb24gPSAodjAueHl6ICogKDEuICsgMWUtNykpIC0gKHYxLnh5eiAqICgxLiArIDFlLTcpKTtcclxuICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uKSArIHF1YXQudyAqIHBvc2l0aW9uKTtcclxuXHJcbiAgICAgICAgICAgSG93ZXZlciBJJ20gbm90IHN1Y2ggYSBmYW4gb2YgdGhlICgxLiArIDFlLTcpIHBhcnRcclxuICAgICAgICAgKi9cclxuICAgIH1cclxuXHJcbiAgICBcclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVVNFX1JURVxyXG4gICAgaGlnaHAgdmVjNCBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2xvdywgaW4gaGlnaHAgdmVjMyBwb3NpdGlvbl9oaWdoLCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9fbG93LCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9faGlnaCl7XHJcbiAgICAgICAgLyogXHJcbiAgICAgICAgU291cmNlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXJ0dWFsZ2xvYmVib29rL09wZW5HbG9iZS9ibG9iL21hc3Rlci9Tb3VyY2UvRXhhbXBsZXMvQ2hhcHRlcjA1L0ppdHRlci9HUFVSZWxhdGl2ZVRvRXllRFNGVU45MC9TaGFkZXJzL1ZTLmdsc2wgXHJcbiAgICAgICAgTm90ZSBoZXJlLCB3ZSdyZSBzdG9yaW5nIHRoZSBoaWdoIHBhcnQgb2YgdGhlIHBvc2l0aW9uIGVuY29kaW5nIGluc2lkZSB0aHJlZSdzIGRlZmF1bHQgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgYnVmZmVyIHNvIHdlIGF2b2lkIHJlZHVuZGFuY3kgXHJcbiAgICAgICAgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQxID0gcG9zaXRpb25fbG93Lnh5eiAtIHJlbGF0aXZlVG9fbG93Lnh5ejtcclxuICAgICAgICBoaWdocCB2ZWMzIGUgPSB0MSAtIHBvc2l0aW9uX2xvdy54eXo7XHJcbiAgICAgICAgLyoqIFRoaXMgaXMgcmVkdW5hbnQsIGJ1dCBuZWNlc3NhcnkgYXMgYSB3b3JrYXJvdW5kIGZvciBBcHBsZSBwbGF0Zm9ybXMgKi9cclxuICAgICAgICBoaWdocCBmbG9hdCB4ID0gcG9zaXRpb25faGlnaC54IC0gcmVsYXRpdmVUb19oaWdoLng7XHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeSA9IHBvc2l0aW9uX2hpZ2gueSAtIHJlbGF0aXZlVG9faGlnaC55O1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHogPSBwb3NpdGlvbl9oaWdoLnogLSByZWxhdGl2ZVRvX2hpZ2guejtcclxuICAgICAgICBoaWdocCB2ZWMzIHYgPSB2ZWMzKHgsIHksIHopO1xyXG4gICAgICAgIC8qKiBFbmQgb2YgcmVkdW5kYW50IHBhcnQgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQyID0gKCgtcmVsYXRpdmVUb19sb3cgLSBlKSArIChwb3NpdGlvbl9sb3cueHl6IC0gKHQxIC0gZSkpKSArIHY7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBoaWdoRGlmZmVyZW5jZSA9IHQxICsgdDI7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBsb3dEaWZmZXJlbmNlID0gdDIgLSAoaGlnaERpZmZlcmVuY2UueHl6IC0gdDEueHl6KTtcclxuICAgICAgICBcclxuICAgICAgICBoaWdocCB2ZWMzIHBvc2l0aW9uID0gaGlnaERpZmZlcmVuY2UueHl6ICsgbG93RGlmZmVyZW5jZS54eXo7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQocG9zaXRpb24sIDEuKTtcclxuICAgIH1cclxuI2VuZGlmXHJcblxyXG5cclxudm9pZCBtYWluKCkge1xyXG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cclxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxyXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cclxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XHJcblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XHJcblx0I2VuZGlmXHJcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XHJcblx0Ly8jaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+IC8vIEVESVRFRCBDSFVOS1xyXG4gICAgI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICAgICAgdmVjNCB0UXVhdGVybmlvbiwgdFBpdm90TG93LCB0UGl2b3RIaWdoLCB0VHJhbnNsYXRpb24sIHRTY2FsZTtcclxuICAgICAgICBvYmplY3RUcmFuc2Zvcm0odFF1YXRlcm5pb24sIHRQaXZvdExvdywgdFBpdm90SGlnaCwgdFRyYW5zbGF0aW9uLCB0U2NhbGUpO1xyXG4gICAgI2VuZGlmXHJcbiAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgIHZlYzQgcG9zaXRpb25fbG93VCA9IHZlYzQocG9zaXRpb25fbG93LCAxLik7XHJcbiAgICAgICAgdmVjNCBwb3NpdGlvbl9oaWdoVCA9IHZlYzQocG9zaXRpb24sIDEuKTtcclxuICAgICAgICBjb25zdCB2ZWMzIFpFUk8zID0gdmVjMygwLiwgMC4sIDAuKTtcclxuXHJcbiAgICAgICAgaGlnaHAgdmVjNCBydGVMb2NhbFBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24ocG9zaXRpb25fbG93VC54eXosIHBvc2l0aW9uX2hpZ2hULnh5eiwgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICAgICAgICAgIGhpZ2hwIHZlYzQgcnRlUGl2b3QgPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbih0UGl2b3RMb3cueHl6LCB0UGl2b3RIaWdoLnh5eiwgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgIHJ0ZUxvY2FsUG9zaXRpb24ueHl6ID0gcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEocnRlTG9jYWxQb3NpdGlvbiwgcnRlUGl2b3QsIHRTY2FsZSwgdFF1YXRlcm5pb24pICsgcnRlUGl2b3QueHl6ICsgdFRyYW5zbGF0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuICAgICAgICAgICAgdmVjNCBpbnN0YW5jZVBpdm90ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oWkVSTzMsIFpFUk8zLCB1Vmlld2VyX2xvdywgdVZpZXdlcl9oaWdoKTtcclxuICAgICAgICAgICAgcnRlTG9jYWxQb3NpdGlvbi54eXogPSAobWF0MyhpbnN0YW5jZU1hdHJpeCkgKiAocnRlTG9jYWxQb3NpdGlvbiAtIGluc3RhbmNlUGl2b3QpLnh5eikgKyBpbnN0YW5jZVBpdm90Lnh5eiArIGluc3RhbmNlTWF0cml4WzNdLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZmRlZiBVU0VfUlRFXHJcbiAgICAgICAgdmVjNCBtdlBvc2l0aW9uID0gcnRlTG9jYWxQb3NpdGlvbjtcclxuICAgICNlbHNlXHJcbiAgICAgICAgdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xyXG4gICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICBtdlBvc2l0aW9uLnh5eiA9IHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKG12UG9zaXRpb24sIHRQaXZvdEhpZ2gsIHRTY2FsZSwgdFF1YXRlcm5pb24pICsgdFBpdm90SGlnaC54eXogKyB0VHJhbnNsYXRpb24ueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG4gICAgICAgICAgICBtdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgI2VuZGlmXHJcbiAgIFxyXG4gICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICBtdlBvc2l0aW9uID0gcnRlTW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICNlbHNlXHJcbiAgICAgICAgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgI2lmZGVmIExJTkVBUl9ERVBUSFxyXG4gICAgICAgIHZWaWV3UG9zaXRpb24gPSBtdlBvc2l0aW9uO1xyXG4gICAgI2VuZGlmIFxyXG4gICAgXHJcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xyXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XHJcblx0Ly8gI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XHJcbiAgICAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcclxuXHQgICAgdkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XHJcbiAgICAjZW5kaWZcclxuXHR2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7XHJcbn1cclxuYFxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZURlcHRoRnJhZyA9IC8qIGdsc2wgKi8gYFxyXG4jaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXHJcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xyXG4jZW5kaWZcclxuI2lmZGVmIExJTkVBUl9ERVBUSFxyXG4gICAgdmFyeWluZyB2ZWM0IHZWaWV3UG9zaXRpb247XHJcblx0dW5pZm9ybSBmbG9hdCBuZWFyO1xyXG5cdHVuaWZvcm0gZmxvYXQgZmFyO1xyXG4jZW5kaWZcclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2luY2x1ZGUgPHBhY2tpbmc+XHJcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XHJcbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xyXG5cclxudm9pZCBtYWluKCkge1xyXG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XHJcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcclxuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXHJcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XHJcblx0I2VuZGlmXHJcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XHJcblx0Ly8gI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cclxuXHQjaWZkZWYgVVNFX0FMUEhBVEVTVFxyXG5cdFx0aWYgKCBkaWZmdXNlQ29sb3IuYSA8IGFscGhhVGVzdCApIGRpc2NhcmQ7XHJcblx0XHQvKiogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHJlamVjdGluZyBzaGFkb3dzIGZvciBjZXJ0YWluIG1hdGVyaWFscywgc2luY2UgdGhyZWUuanMgZ2F2ZSBtZSBubyBjaG9pY2UqL1xyXG5cdFx0I2lmZGVmIEFMUEhBVEVTVF9SRUpFQ1RJT05cclxuXHRcdFx0aWYgKGFscGhhVGVzdCA+IDAuICkgZGlzY2FyZDtcclxuXHRcdCNlbmRpZlxyXG5cdCNlbmRpZlxyXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cclxuXHQvLyBIaWdoZXIgcHJlY2lzaW9uIGVxdWl2YWxlbnQgb2YgZ2xfRnJhZ0Nvb3JkLnouIFRoaXMgYXNzdW1lcyBkZXB0aFJhbmdlIGhhcyBiZWVuIGxlZnQgdG8gaXRzIGRlZmF1bHQgdmFsdWVzLlxyXG5cdCNpZmRlZiBMSU5FQVJfREVQVEhcclxuXHRcdC8qKiBWaWV3IHogaXMgbmVnYXRpdmUgbW92aW5nIGF3YXkgZnJvbSB0aGUgY2FtZXJhICovXHJcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoKHZWaWV3UG9zaXRpb24ueiArIG5lYXIpIC8gKG5lYXIgLSBmYXIpKTtcclxuXHQjZWxzZVxyXG5cdFx0ZmxvYXQgZnJhZ0Nvb3JkWiA9ICgwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNSk7XHJcblx0XHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXHJcblx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xyXG5cdFx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXHJcblx0XHRcdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZnJhZ0Nvb3JkWiApO1xyXG5cdFx0I2VuZGlmXHJcblx0I2VuZGlmXHJcbn1cclxuYFxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cclxuaW1wb3J0IHsgc3BlY2tsZURlcHRoVmVydCB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLWRlcHRoLXZlcnQuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVEZXB0aEZyYWcgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1kZXB0aC1mcmFnLmpzJ1xyXG5pbXBvcnQge1xyXG4gIEJ1ZmZlckdlb21ldHJ5LFxyXG4gIENhbWVyYSxcclxuICBPYmplY3QzRCxcclxuICBTY2VuZSxcclxuICBTaGFkZXJMaWIsXHJcbiAgVmVjdG9yMyxcclxuICB0eXBlIElVbmlmb3JtLFxyXG4gIHR5cGUgTWVzaERlcHRoTWF0ZXJpYWxQYXJhbWV0ZXJzXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IE1hdHJpeDQsIE1hdGVyaWFsIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEV4dGVuZGVkTWVzaERlcHRoTWF0ZXJpYWwsIHR5cGUgVW5pZm9ybXMgfSBmcm9tICcuL1NwZWNrbGVNYXRlcmlhbC5qcydcclxuaW1wb3J0IHR5cGUgeyBTcGVja2xlV2ViR0xSZW5kZXJlciB9IGZyb20gJy4uL29iamVjdHMvU3BlY2tsZVdlYkdMUmVuZGVyZXIuanMnXHJcblxyXG5jbGFzcyBTcGVja2xlRGVwdGhNYXRlcmlhbCBleHRlbmRzIEV4dGVuZGVkTWVzaERlcHRoTWF0ZXJpYWwge1xyXG4gIHByb3RlY3RlZCBnZXQgdmVydGV4UHJvZ3JhbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHNwZWNrbGVEZXB0aFZlcnRcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgZnJhZ21lbnRQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZURlcHRoRnJhZ1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBiYXNlVW5pZm9ybXMoKTogeyBbdW5pZm9ybTogc3RyaW5nXTogSVVuaWZvcm0gfSB7XHJcbiAgICByZXR1cm4gU2hhZGVyTGliLmRlcHRoLnVuaWZvcm1zXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IHVuaWZvcm1zRGVmKCk6IFVuaWZvcm1zIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHVWaWV3ZXJfaGlnaDogbmV3IFZlY3RvcjMoKSxcclxuICAgICAgdVZpZXdlcl9sb3c6IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIHJ0ZU1vZGVsVmlld01hdHJpeDogbmV3IE1hdHJpeDQoKSxcclxuICAgICAgbmVhcjogMCxcclxuICAgICAgZmFyOiAwLFxyXG4gICAgICB1VHJhbnNmb3JtczogW25ldyBNYXRyaXg0KCldLFxyXG4gICAgICB0VHJhbnNmb3JtczogbnVsbCxcclxuICAgICAgb2JqQ291bnQ6IDFcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnM6IE1lc2hEZXB0aE1hdGVyaWFsUGFyYW1ldGVycywgZGVmaW5lczogc3RyaW5nW10gPSBbXSkge1xyXG4gICAgc3VwZXIocGFyYW1ldGVycylcclxuICAgIHRoaXMuaW5pdChkZWZpbmVzKVxyXG4gIH1cclxuXHJcbiAgLyoqIFdlIG5lZWQgYSB1bmlxdWUga2V5IHBlciBwcm9ncmFtICovXHJcbiAgcHVibGljIGN1c3RvbVByb2dyYW1DYWNoZUtleSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5KHNvdXJjZTogTWF0ZXJpYWwpIHtcclxuICAgIHN1cGVyLmNvcHkoc291cmNlKVxyXG4gICAgdGhpcy5jb3B5RnJvbShzb3VyY2UpXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZhc3RDb3B5KGZyb206IE1hdGVyaWFsLCB0bzogTWF0ZXJpYWwpIHtcclxuICAgIHN1cGVyLmZhc3RDb3B5KGZyb20sIHRvKVxyXG4gICAgdG8udXNlckRhdGEubmVhci52YWx1ZSA9IGZyb20udXNlckRhdGEubmVhci52YWx1ZVxyXG4gICAgdG8udXNlckRhdGEuZmFyLnZhbHVlID0gZnJvbS51c2VyRGF0YS5mYXIudmFsdWVcclxuICB9XHJcblxyXG4gIC8qKiBBbm90aGVyIG5vdGUgaGVyZSwgdGhpcyB3aWxsIE5PVCBnZXQgY2FsbGVkIGJ5IHRocmVlIHdoZW4gcmVuZGVyaW5nIHNoYWRvd21hcHMuIFdlIHVwZGF0ZSB0aGUgdW5pZm9ybXMgbWFudWFsbHlcclxuICAgKiBpbnNpZGUgU3BlY2tsZVJlbmRlcmVyIGZvciBzaGFkb3dtYXBzXHJcbiAgICovXHJcbiAgb25CZWZvcmVSZW5kZXIoXHJcbiAgICBfdGhpczogU3BlY2tsZVdlYkdMUmVuZGVyZXIsXHJcbiAgICBfc2NlbmU6IFNjZW5lLFxyXG4gICAgX2NhbWVyYTogQ2FtZXJhLFxyXG4gICAgX2dlb21ldHJ5OiBCdWZmZXJHZW9tZXRyeSxcclxuICAgIG9iamVjdDogT2JqZWN0M0RcclxuICApIHtcclxuICAgIGlmICh0aGlzLmRlZmluZXMgJiYgdGhpcy5kZWZpbmVzWydVU0VfUlRFJ10pIHtcclxuICAgICAgb2JqZWN0Lm1vZGVsVmlld01hdHJpeC5jb3B5KF90aGlzLlJURUJ1ZmZlcnMucnRlVmlld01vZGVsTWF0cml4KVxyXG4gICAgICB0aGlzLnVzZXJEYXRhLnVWaWV3ZXJfbG93LnZhbHVlLmNvcHkoX3RoaXMuUlRFQnVmZmVycy52aWV3ZXJMb3cpXHJcbiAgICAgIHRoaXMudXNlckRhdGEudVZpZXdlcl9oaWdoLnZhbHVlLmNvcHkoX3RoaXMuUlRFQnVmZmVycy52aWV3ZXJIaWdoKVxyXG4gICAgICB0aGlzLnVzZXJEYXRhLnJ0ZU1vZGVsVmlld01hdHJpeC52YWx1ZS5jb3B5KF90aGlzLlJURUJ1ZmZlcnMucnRlVmlld01vZGVsTWF0cml4KVxyXG4gICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlY2tsZURlcHRoTWF0ZXJpYWxcclxuIiwiaW1wb3J0IHsgQnVmZmVyR2VvbWV0cnksIEluc3RhbmNlZE1lc2gsIE1hdGVyaWFsIH0gZnJvbSAndGhyZWUnXHJcblxyXG5leHBvcnQgY2xhc3MgRXh0ZW5kZWRJbnN0YW5jZWRNZXNoIGV4dGVuZHMgSW5zdGFuY2VkTWVzaDxcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBNYXRlcmlhbCB8IE1hdGVyaWFsW11cclxuPiB7XHJcbiAgcHJpdmF0ZSBfYmF0Y2hJbmRleDogbnVtYmVyXHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcclxuICAgIGdlb21ldHJ5OiBCdWZmZXJHZW9tZXRyeSB8IHVuZGVmaW5lZCxcclxuICAgIG1hdGVyaWFsOiBNYXRlcmlhbCB8IE1hdGVyaWFsW10gfCB1bmRlZmluZWQsXHJcbiAgICBjb3VudDogbnVtYmVyLFxyXG4gICAgYmF0Y2hJbmRleDogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwsIGNvdW50KVxyXG4gICAgdGhpcy5fYmF0Y2hJbmRleCA9IGJhdGNoSW5kZXhcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYmF0Y2hJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JhdGNoSW5kZXhcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBCYWNrU2lkZSxcclxuICBCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgQnVmZmVyR2VvbWV0cnksXHJcbiAgRG91YmxlU2lkZSxcclxuICBHcm91cCxcclxuICBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgSW5zdGFuY2VkTWVzaCxcclxuICBNYXRlcmlhbCxcclxuICBNYXRyaXg0LFxyXG4gIE9iamVjdDNELFxyXG4gIFJheSxcclxuICBSYXljYXN0ZXIsXHJcbiAgUkdCQURlcHRoUGFja2luZyxcclxuICBTa2lubmVkTWVzaCxcclxuICBTcGhlcmUsXHJcbiAgVHJpYW5nbGUsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzLFxyXG4gIHR5cGUgSW50ZXJzZWN0aW9uXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEJhdGNoT2JqZWN0IH0gZnJvbSAnLi4vYmF0Y2hpbmcvQmF0Y2hPYmplY3QuanMnXHJcbmltcG9ydCBNYXRlcmlhbHMgZnJvbSAnLi4vbWF0ZXJpYWxzL01hdGVyaWFscy5qcydcclxuaW1wb3J0IHsgVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmUgfSBmcm9tICcuL1RvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQge1xyXG4gIHR5cGUgRHJhd0dyb3VwLFxyXG4gIGdldE5leHRCYXRjaEluZGV4LFxyXG4gIElOU1RBTkNFX0dSQURJRU5UX0JVRkZFUl9TVFJJREUsXHJcbiAgSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREVcclxufSBmcm9tICcuLi9iYXRjaGluZy9CYXRjaC5qcydcclxuaW1wb3J0IHsgU3BlY2tsZVJheWNhc3RlciB9IGZyb20gJy4vU3BlY2tsZVJheWNhc3Rlci5qcydcclxuaW1wb3J0IExvZ2dlciBmcm9tICcuLi91dGlscy9Mb2dnZXIuanMnXHJcbmltcG9ydCBTcGVja2xlRGVwdGhNYXRlcmlhbCBmcm9tICcuLi9tYXRlcmlhbHMvU3BlY2tsZURlcHRoTWF0ZXJpYWwuanMnXHJcbmltcG9ydCB7IEV4dGVuZGVkSW5zdGFuY2VkTWVzaCB9IGZyb20gJy4vRXh0ZW5kZWRJbnN0YW5jZWRNZXNoLmpzJ1xyXG5cclxuY29uc3QgX2ludmVyc2VNYXRyaXggPSBuZXcgTWF0cml4NCgpXHJcbmNvbnN0IF9yYXkgPSBuZXcgUmF5KClcclxuY29uc3QgX3NwaGVyZSA9IG5ldyBTcGhlcmUoKVxyXG5jb25zdCBfdlRlbXAgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF92QSA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3ZCID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfdkMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5jb25zdCBfdGVtcEEgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF90ZW1wQiA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3RlbXBDID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuY29uc3QgX21vcnBoQSA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX21vcnBoQiA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX21vcnBoQyA9IG5ldyBWZWN0b3IzKClcclxuXHJcbmNvbnN0IF91dkEgPSBuZXcgVmVjdG9yMigpXHJcbmNvbnN0IF91dkIgPSBuZXcgVmVjdG9yMigpXHJcbmNvbnN0IF91dkMgPSBuZXcgVmVjdG9yMigpXHJcblxyXG5jb25zdCBfaW50ZXJzZWN0aW9uUG9pbnQgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuY29uc3QgcmF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBSYXkoKVxyXG5jb25zdCB0bXBJbnZlcnNlTWF0cml4ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXRyaXg0KClcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwZWNrbGVJbnN0YW5jZWRNZXNoIGV4dGVuZHMgR3JvdXAge1xyXG4gIHB1YmxpYyBzdGF0aWMgTWVzaEJhdGNoTnVtYmVyID0gMFxyXG5cclxuICBwcml2YXRlIHRhczogVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmVcclxuICBwcml2YXRlIGJhdGNoTWF0ZXJpYWw6IE1hdGVyaWFsXHJcbiAgcHJpdmF0ZSBtYXRlcmlhbENhY2hlOiB7IFtpZDogc3RyaW5nXTogTWF0ZXJpYWwgfSA9IHt9XHJcbiAgcHJpdmF0ZSBtYXRlcmlhbFN0YWNrOiBBcnJheTxBcnJheTxNYXRlcmlhbCB8IE1hdGVyaWFsW10+PiA9IFtdXHJcbiAgcHJpdmF0ZSBiYXRjaE1hdGVyaWFsU3RhY2s6IEFycmF5PE1hdGVyaWFsPiA9IFtdXHJcbiAgcHJpdmF0ZSBtYXRlcmlhbENhY2hlTFVUOiB7IFtpZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7fVxyXG5cclxuICBwcml2YXRlIF9iYXRjaE9iamVjdHM6IEJhdGNoT2JqZWN0W11cclxuICBwcml2YXRlIF9uZWVkc1JURTogYm9vbGVhblxyXG5cclxuICBwdWJsaWMgZ3JvdXBzOiBBcnJheTxEcmF3R3JvdXA+ID0gW11cclxuICBwdWJsaWMgbWF0ZXJpYWxzOiBNYXRlcmlhbFtdID0gW11cclxuICBwcml2YXRlIGluc3RhbmNlR2VvbWV0cnk6IEJ1ZmZlckdlb21ldHJ5IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXHJcbiAgcHJpdmF0ZSBpbnN0YW5jZXM6IEluc3RhbmNlZE1lc2hbXSA9IFtdXHJcblxyXG4gIHB1YmxpYyBnZXQgVEFTKCk6IFRvcExldmVsQWNjZWxlcmF0aW9uU3RydWN0dXJlIHtcclxuICAgIHJldHVybiB0aGlzLnRhc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYXRjaE9iamVjdHMoKTogQmF0Y2hPYmplY3RbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmF0Y2hPYmplY3RzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG5lZWRzUlRFKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX25lZWRzUlRFXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihnZW9tZXRyeTogQnVmZmVyR2VvbWV0cnksIFJURSA9IGZhbHNlKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLmluc3RhbmNlR2VvbWV0cnkgPSBnZW9tZXRyeVxyXG4gICAgdGhpcy51c2VyRGF0YS5yYXljYXN0Q2hpbGRyZW4gPSBmYWxzZVxyXG4gICAgdGhpcy5fbmVlZHNSVEUgPSBSVEVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRCYXRjaE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCkge1xyXG4gICAgdGhpcy5iYXRjaE1hdGVyaWFsID0gbWF0ZXJpYWxcclxuICAgIHRoaXMubWF0ZXJpYWxDYWNoZVttYXRlcmlhbC5pZF0gPSBtYXRlcmlhbFxyXG4gICAgdGhpcy5tYXRlcmlhbHMucHVzaCh0aGlzLmJhdGNoTWF0ZXJpYWwpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QmF0Y2hPYmplY3RzKGJhdGNoT2JqZWN0czogQmF0Y2hPYmplY3RbXSkge1xyXG4gICAgdGhpcy5fYmF0Y2hPYmplY3RzID0gYmF0Y2hPYmplY3RzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0T3ZlcnJpZGVNYXRlcmlhbChtYXRlcmlhbDogTWF0ZXJpYWwpIHtcclxuICAgIGNvbnN0IHNhdmVNYXRlcmlhbHM6IEFycmF5PE1hdGVyaWFsW10gfCBNYXRlcmlhbD4gPSBbXVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmluc3RhbmNlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBzYXZlTWF0ZXJpYWxzLnB1c2godGhpcy5pbnN0YW5jZXNba10ubWF0ZXJpYWwpXHJcbiAgICB9XHJcbiAgICB0aGlzLm1hdGVyaWFsU3RhY2sucHVzaChzYXZlTWF0ZXJpYWxzKVxyXG5cclxuICAgIGNvbnN0IG92ZXJyaWRlTWF0ZXJpYWwgPSB0aGlzLmdldENhY2hlZE1hdGVyaWFsKG1hdGVyaWFsLCB0cnVlKVxyXG4gICAgdGhpcy5pbnN0YW5jZXMuZm9yRWFjaCgodmFsdWUpID0+ICh2YWx1ZS5tYXRlcmlhbCA9IG92ZXJyaWRlTWF0ZXJpYWwpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE92ZXJyaWRlQmF0Y2hNYXRlcmlhbChtYXRlcmlhbDogTWF0ZXJpYWwpIHtcclxuICAgIGNvbnN0IG92ZXJyaWRlTWF0ZXJpYWwgPSB0aGlzLmdldENhY2hlZE1hdGVyaWFsKG1hdGVyaWFsLCB0cnVlKVxyXG4gICAgdGhpcy5iYXRjaE1hdGVyaWFsU3RhY2sucHVzaChvdmVycmlkZU1hdGVyaWFsKVxyXG4gICAgY29uc3QgbWF0ZXJpYWxzID0gdGhpcy5tYXRlcmlhbHNcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWF0ZXJpYWxzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmIChtYXRlcmlhbHNba10udXVpZCA9PT0gdGhpcy5iYXRjaE1hdGVyaWFsLnV1aWQpIHtcclxuICAgICAgICBtYXRlcmlhbHNba10gPSBvdmVycmlkZU1hdGVyaWFsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5zdGFuY2VzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICgodmFsdWUubWF0ZXJpYWwgYXMgTWF0ZXJpYWwpLnV1aWQgPT09IHRoaXMuYmF0Y2hNYXRlcmlhbC51dWlkKVxyXG4gICAgICAgIHZhbHVlLm1hdGVyaWFsID0gb3ZlcnJpZGVNYXRlcmlhbFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlQmF0Y2hNYXRlcmlhbCgpIHtcclxuICAgIGNvbnN0IG92ZXJyaWRlQmF0Y2hNYXRlcmlhbCA9IHRoaXMuYmF0Y2hNYXRlcmlhbFN0YWNrLnBvcCgpXHJcbiAgICBpZiAoIW92ZXJyaWRlQmF0Y2hNYXRlcmlhbCkgcmV0dXJuXHJcblxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLm1hdGVyaWFscy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBpZiAodGhpcy5tYXRlcmlhbHNba10udXVpZCA9PT0gb3ZlcnJpZGVCYXRjaE1hdGVyaWFsLnV1aWQpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc1trXSA9IHRoaXMuYmF0Y2hNYXRlcmlhbFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmluc3RhbmNlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAoKHZhbHVlLm1hdGVyaWFsIGFzIE1hdGVyaWFsKS51dWlkID09PSBvdmVycmlkZUJhdGNoTWF0ZXJpYWwudXVpZClcclxuICAgICAgICB2YWx1ZS5tYXRlcmlhbCA9IHRoaXMuYmF0Y2hNYXRlcmlhbFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9va3VwTWF0ZXJpYWwobWF0ZXJpYWw6IE1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLm1hdGVyaWFsQ2FjaGVbbWF0ZXJpYWwuaWRdIHx8XHJcbiAgICAgIHRoaXMubWF0ZXJpYWxDYWNoZVt0aGlzLm1hdGVyaWFsQ2FjaGVMVVRbbWF0ZXJpYWwuaWRdXVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENhY2hlZE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCwgY29weSA9IGZhbHNlKTogTWF0ZXJpYWwge1xyXG4gICAgbGV0IGNhY2hlZE1hdGVyaWFsID0gdGhpcy5sb29rdXBNYXRlcmlhbChtYXRlcmlhbClcclxuICAgIGlmICghY2FjaGVkTWF0ZXJpYWwpIHtcclxuICAgICAgY29uc3QgY2xvbmUgPSBtYXRlcmlhbC5jbG9uZSgpXHJcbiAgICAgIHRoaXMubWF0ZXJpYWxDYWNoZVttYXRlcmlhbC5pZF0gPSBjbG9uZVxyXG4gICAgICB0aGlzLm1hdGVyaWFsQ2FjaGVMVVRbY2xvbmUuaWRdID0gbWF0ZXJpYWwuaWRcclxuICAgICAgY2FjaGVkTWF0ZXJpYWwgPSBjbG9uZVxyXG4gICAgICB0aGlzLnVwZGF0ZU1hdGVyaWFsVHJhbnNmb3Jtc1VuaWZvcm0odGhpcy5tYXRlcmlhbENhY2hlW21hdGVyaWFsLmlkXSlcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGNvcHkgfHxcclxuICAgICAgKG1hdGVyaWFsIGFzIG5ldmVyKVsnbmVlZHNDb3B5J10gfHxcclxuICAgICAgKGNhY2hlZE1hdGVyaWFsIGFzIG5ldmVyKVsnbmVlZHNDb3B5J11cclxuICAgICkge1xyXG4gICAgICBNYXRlcmlhbHMuZmFzdENvcHkobWF0ZXJpYWwsIGNhY2hlZE1hdGVyaWFsKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhY2hlZE1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdG9yZU1hdGVyaWFsKCkge1xyXG4gICAgaWYgKHRoaXMubWF0ZXJpYWxTdGFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHJlc3RvcmVNYXRlcmlhbHMgPSB0aGlzLm1hdGVyaWFsU3RhY2sucG9wKCkgYXMgTWF0ZXJpYWxbXVxyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IHJlc3RvcmVNYXRlcmlhbHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICB0aGlzLmluc3RhbmNlc1trXS5tYXRlcmlhbCA9IHJlc3RvcmVNYXRlcmlhbHNba11cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1aWxkVEFTKCkge1xyXG4gICAgdGhpcy50YXMgPSBuZXcgVG9wTGV2ZWxBY2NlbGVyYXRpb25TdHJ1Y3R1cmUodGhpcy5iYXRjaE9iamVjdHMpXHJcbiAgICAvKiogV2UgZG8gYSByZWZpdCBoZXJlLCBiZWNhdXNlIGZvciBzb21lIHJlYXNvbiB0aGUgYnZoIGxpYnJhcnkgaW5jb3JyZWN0bHkgY29tcHV0ZXMgdGhlIHRvdGFsIGJ2aCBib3VuZHMgYXQgY3JlYXRpb24sXHJcbiAgICAgKiAgc28gd2UgZm9yY2UgYSByZWZpdCBpbiBvcmRlciB0byBnZXQgdGhlIHByb3BlciBib3VuZHMgdmFsdWUgb3V0IG9mIGl0XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGFzLnJlZml0KClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVEcmF3R3JvdXBzKFxyXG4gICAgdHJhbnNmb3JtQnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcbiAgICBncmFkaWVudEJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG4gICAgb2JqZWN0SW5kZXhCdWZmZXI/OiBGbG9hdDMyQXJyYXlcclxuICApIHtcclxuICAgIHRoaXMuaW5zdGFuY2VzLmZvckVhY2goKHZhbHVlOiBJbnN0YW5jZWRNZXNoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKHZhbHVlKVxyXG4gICAgICB2YWx1ZS5jdXN0b21EZXB0aE1hdGVyaWFsPy5kaXNwb3NlKClcclxuICAgICAgdmFsdWUuZGlzcG9zZSgpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5pbnN0YW5jZXMubGVuZ3RoID0gMFxyXG5cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5ncm91cHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgbWF0ZXJpYWxJbmRleCA9IHRoaXMuZ3JvdXBzW2tdLm1hdGVyaWFsSW5kZXhcclxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsc1ttYXRlcmlhbEluZGV4XVxyXG5cclxuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgRXh0ZW5kZWRJbnN0YW5jZWRNZXNoKFxyXG4gICAgICAgIHRoaXMuZ2V0SW5zdGFuY2VHZW9tZXRyeVNoYWxsb3dDb3B5KCksXHJcbiAgICAgICAgbWF0ZXJpYWwsXHJcbiAgICAgICAgMCxcclxuICAgICAgICBnZXROZXh0QmF0Y2hJbmRleCgpXHJcbiAgICAgIClcclxuICAgICAgZ3JvdXAuaW5zdGFuY2VNYXRyaXggPSBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKFxyXG4gICAgICAgIHRyYW5zZm9ybUJ1ZmZlci5zdWJhcnJheShcclxuICAgICAgICAgIHRoaXMuZ3JvdXBzW2tdLnN0YXJ0LFxyXG4gICAgICAgICAgdGhpcy5ncm91cHNba10uc3RhcnQgKyB0aGlzLmdyb3Vwc1trXS5jb3VudFxyXG4gICAgICAgICksXHJcbiAgICAgICAgSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREVcclxuICAgICAgKVxyXG4gICAgICBncm91cC5nZW9tZXRyeS5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICAgJ2dyYWRpZW50SW5kZXgnLFxyXG4gICAgICAgIG5ldyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUoXHJcbiAgICAgICAgICBncmFkaWVudEJ1ZmZlci5zdWJhcnJheShcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNba10uc3RhcnQgLyBJTlNUQU5DRV9UUkFOU0ZPUk1fQlVGRkVSX1NUUklERSxcclxuICAgICAgICAgICAgKHRoaXMuZ3JvdXBzW2tdLnN0YXJ0ICsgdGhpcy5ncm91cHNba10uY291bnQpIC9cclxuICAgICAgICAgICAgICBJTlNUQU5DRV9UUkFOU0ZPUk1fQlVGRkVSX1NUUklERVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIElOU1RBTkNFX0dSQURJRU5UX0JVRkZFUl9TVFJJREVcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgaWYgKG9iamVjdEluZGV4QnVmZmVyKVxyXG4gICAgICAgIGdyb3VwLmdlb21ldHJ5LnNldEF0dHJpYnV0ZShcclxuICAgICAgICAgICdvYmpJbmRleCcsXHJcbiAgICAgICAgICBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKFxyXG4gICAgICAgICAgICBvYmplY3RJbmRleEJ1ZmZlci5zdWJhcnJheShcclxuICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1trXS5zdGFydCAvIElOU1RBTkNFX1RSQU5TRk9STV9CVUZGRVJfU1RSSURFLFxyXG4gICAgICAgICAgICAgICh0aGlzLmdyb3Vwc1trXS5zdGFydCArIHRoaXMuZ3JvdXBzW2tdLmNvdW50KSAvXHJcbiAgICAgICAgICAgICAgICBJTlNUQU5DRV9UUkFOU0ZPUk1fQlVGRkVSX1NUUklERVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBJTlNUQU5DRV9HUkFESUVOVF9CVUZGRVJfU1RSSURFXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICBncm91cC5jb3VudCA9IHRoaXMuZ3JvdXBzW2tdLmNvdW50IC8gSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREVcclxuICAgICAgZ3JvdXAuaW5zdGFuY2VNYXRyaXgubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICAgIGdyb3VwLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0gpXHJcbiAgICAgIGdyb3VwLmZydXN0dW1DdWxsZWQgPSBmYWxzZVxyXG4gICAgICBncm91cC5jdXN0b21EZXB0aE1hdGVyaWFsID0gbmV3IFNwZWNrbGVEZXB0aE1hdGVyaWFsKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRlcHRoUGFja2luZzogUkdCQURlcHRoUGFja2luZ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgWydBTFBIQVRFU1RfUkVKRUNUSU9OJ11cclxuICAgICAgKVxyXG4gICAgICBncm91cC5jYXN0U2hhZG93ID0gIW1hdGVyaWFsLnRyYW5zcGFyZW50XHJcbiAgICAgIGdyb3VwLnJlY2VpdmVTaGFkb3cgPSAhbWF0ZXJpYWwudHJhbnNwYXJlbnRcclxuXHJcbiAgICAgIHRoaXMuaW5zdGFuY2VzLnB1c2goZ3JvdXApXHJcbiAgICAgIHRoaXMuYWRkKGdyb3VwKVxyXG4gICAgfVxyXG4gICAgdGhpcy50YXMucmVmaXQoKVxyXG4gICAgdGhpcy50YXMuZ2V0Qm91bmRpbmdCb3godGhpcy50YXMuYm91bmRzKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVRyYW5zZm9ybXNVbmlmb3JtKCkge1xyXG4gICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2VcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5fYmF0Y2hPYmplY3RzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IGJhdGNoT2JqZWN0ID0gdGhpcy5fYmF0Y2hPYmplY3RzW2tdXHJcbiAgICAgIGlmICghKG5lZWRzVXBkYXRlIHx8PSBiYXRjaE9iamVjdC50cmFuc2Zvcm1EaXJ0eSkpIGNvbnRpbnVlXHJcbiAgICAgIGNvbnN0IHJ2ID0gYmF0Y2hPYmplY3QucmVuZGVyVmlld1xyXG4gICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIHJ2LmJhdGNoU3RhcnQgPj0gdmFsdWUuc3RhcnQgJiZcclxuICAgICAgICAgIHJ2LmJhdGNoU3RhcnQgKyBydi5iYXRjaENvdW50IDw9IHZhbHVlLmNvdW50ICsgdmFsdWUuc3RhcnRcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlOiBJbnN0YW5jZWRNZXNoID0gdGhpcy5pbnN0YW5jZXNbdGhpcy5ncm91cHMuaW5kZXhPZihncm91cCldXHJcbiAgICAgICAgaW5zdGFuY2Uuc2V0TWF0cml4QXQoXHJcbiAgICAgICAgICAocnYuYmF0Y2hTdGFydCAtIGdyb3VwLnN0YXJ0KSAvIElOU1RBTkNFX1RSQU5TRk9STV9CVUZGRVJfU1RSSURFLFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QudHJhbnNmb3JtXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpbnN0YW5jZS5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICBiYXRjaE9iamVjdC50cmFuc2Zvcm1EaXJ0eSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YXMgJiYgbmVlZHNVcGRhdGUpIHtcclxuICAgICAgdGhpcy50YXMucmVmaXQoKVxyXG4gICAgICB0aGlzLnRhcy5nZXRCb3VuZGluZ0JveCh0aGlzLnRhcy5ib3VuZHMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlTWF0ZXJpYWxUcmFuc2Zvcm1zVW5pZm9ybShtYXRlcmlhbDogTWF0ZXJpYWwpIHtcclxuICAgIG1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QmF0Y2hPYmplY3RNYXRlcmlhbChiYXRjaE9iamVjdDogQmF0Y2hPYmplY3QpIHtcclxuICAgIGNvbnN0IHJ2ID0gYmF0Y2hPYmplY3QucmVuZGVyVmlld1xyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKCh2YWx1ZSkgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHJ2LmJhdGNoU3RhcnQgPj0gdmFsdWUuc3RhcnQgJiZcclxuICAgICAgICBydi5iYXRjaFN0YXJ0ICsgcnYuYmF0Y2hDb3VudCA8PSB2YWx1ZS5jb3VudCArIHZhbHVlLnN0YXJ0XHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgICBpZiAoIWdyb3VwKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGBDb3VsZCBub3QgZ2V0IG1hdGVyaWFsIGZvciAke2JhdGNoT2JqZWN0LnJlbmRlclZpZXcucmVuZGVyRGF0YS5pZH1gKVxyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzW2dyb3VwLm1hdGVyaWFsSW5kZXhdXHJcbiAgfVxyXG5cclxuICAvKiogVGhyZWUncyAnY2xvbmUnIGFuZCAnY29weScgZnJvbSBnZW9tZXRyeSBhbmQgYnVmZmVyIGF0dHJpYnV0ZXNcclxuICAgKiAgY3JlYXRlIGR1cGxpY2F0ZXMgb2YgYXJyYXlzIGFuZCB3ZSBkb24ndCB3YW50IHRoYXQuIE1vc3Qgb2YgdGhlXHJcbiAgICogIGJ1ZmZlciBhdHRyaWJ1dGVzIG5lZWQgdG8gYmUgc2hhcmVkIHRvIGF2b2lkIHJlZHVuZGFuY3lcclxuICAgKi9cclxuICBwcml2YXRlIGdldEluc3RhbmNlR2VvbWV0cnlTaGFsbG93Q29weSgpOiBCdWZmZXJHZW9tZXRyeSB7XHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpXHJcbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gdGhpcy5pbnN0YW5jZUdlb21ldHJ5Py5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmluc3RhbmNlR2VvbWV0cnkuYXR0cmlidXRlc1thdHRyXSlcclxuICAgIH1cclxuICAgIGdlb21ldHJ5LnNldEluZGV4KHRoaXMuaW5zdGFuY2VHZW9tZXRyeT8uaW5kZXggYXMgQnVmZmVyQXR0cmlidXRlKVxyXG4gICAgcmV0dXJuIGdlb21ldHJ5XHJcbiAgfVxyXG5cclxuICAvLyBjb252ZXJ0cyB0aGUgZ2l2ZW4gQlZIIHJheWNhc3QgaW50ZXJzZWN0aW9uIHRvIGFsaWduIHdpdGggdGhlIHRocmVlLmpzIHJheWNhc3RcclxuICAvLyBzdHJ1Y3R1cmUgKGluY2x1ZGUgb2JqZWN0LCB3b3JsZCBzcGFjZSBkaXN0YW5jZSBhbmQgcG9pbnQpLlxyXG4gIHByaXZhdGUgY29udmVydFJheWNhc3RJbnRlcnNlY3QoXHJcbiAgICBoaXQ6IEludGVyc2VjdGlvbiB8IG51bGwsXHJcbiAgICBvYmplY3Q6IE9iamVjdDNELFxyXG4gICAgcmF5Y2FzdGVyOiBSYXljYXN0ZXJcclxuICApIHtcclxuICAgIGlmIChoaXQgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBoaXQucG9pbnQuYXBwbHlNYXRyaXg0KG9iamVjdC5tYXRyaXhXb3JsZClcclxuICAgIGhpdC5kaXN0YW5jZSA9IGhpdC5wb2ludC5kaXN0YW5jZVRvKHJheWNhc3Rlci5yYXkub3JpZ2luKVxyXG4gICAgaGl0Lm9iamVjdCA9IG9iamVjdFxyXG5cclxuICAgIGlmIChoaXQuZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBoaXQuZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaGl0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYXljYXN0KHJheWNhc3RlcjogU3BlY2tsZVJheWNhc3RlciwgaW50ZXJzZWN0czogQXJyYXk8SW50ZXJzZWN0aW9uPikge1xyXG4gICAgaWYgKHRoaXMudGFzKSB7XHJcbiAgICAgIGlmICghdGhpcy5iYXRjaE1hdGVyaWFsKSByZXR1cm5cclxuXHJcbiAgICAgIHRtcEludmVyc2VNYXRyaXguY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKVxyXG4gICAgICByYXkuY29weShyYXljYXN0ZXIucmF5KS5hcHBseU1hdHJpeDQodG1wSW52ZXJzZU1hdHJpeClcclxuXHJcbiAgICAgIGlmIChyYXljYXN0ZXIuZmlyc3RIaXRPbmx5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5jb252ZXJ0UmF5Y2FzdEludGVyc2VjdChcclxuICAgICAgICAgIHRoaXMudGFzLnJheWNhc3RGaXJzdChyYXksIHJheWNhc3Rlci5pbnRlcnNlY3RUQVNPbmx5LCB0aGlzLmJhdGNoTWF0ZXJpYWwpLFxyXG4gICAgICAgICAgdGhpcyxcclxuICAgICAgICAgIHJheWNhc3RlclxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAoaGl0KSB7XHJcbiAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goaGl0KVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBoaXRzID0gdGhpcy50YXMucmF5Y2FzdChcclxuICAgICAgICAgIHJheSxcclxuICAgICAgICAgIHJheWNhc3Rlci5pbnRlcnNlY3RUQVNPbmx5LFxyXG4gICAgICAgICAgdGhpcy5iYXRjaE1hdGVyaWFsXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaGl0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGhpdCA9IHRoaXMuY29udmVydFJheWNhc3RJbnRlcnNlY3QoaGl0c1tpXSwgdGhpcywgcmF5Y2FzdGVyKVxyXG4gICAgICAgICAgaWYgKGhpdCkge1xyXG4gICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goaGl0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLmluc3RhbmNlR2VvbWV0cnlcclxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsc1swXVxyXG4gICAgICBjb25zdCBtYXRyaXhXb3JsZCA9IHRoaXMubWF0cml4V29ybGRcclxuXHJcbiAgICAgIGlmIChtYXRlcmlhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm5cclxuICAgICAgaWYgKGdlb21ldHJ5ID09PSB1bmRlZmluZWQpIHJldHVyblxyXG5cclxuICAgICAgLy8gQ2hlY2tpbmcgYm91bmRpbmdTcGhlcmUgZGlzdGFuY2UgdG8gcmF5XHJcblxyXG4gICAgICBpZiAoZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgPT09IG51bGwpIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpXHJcblxyXG4gICAgICBfc3BoZXJlLmNvcHkoZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgfHwgbmV3IFNwaGVyZSgpKVxyXG4gICAgICBfc3BoZXJlLmFwcGx5TWF0cml4NChtYXRyaXhXb3JsZClcclxuXHJcbiAgICAgIGlmIChyYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoX3NwaGVyZSkgPT09IGZhbHNlKSByZXR1cm5cclxuXHJcbiAgICAgIC8vXHJcblxyXG4gICAgICBfaW52ZXJzZU1hdHJpeC5jb3B5KG1hdHJpeFdvcmxkKS5pbnZlcnQoKVxyXG4gICAgICBfcmF5LmNvcHkocmF5Y2FzdGVyLnJheSkuYXBwbHlNYXRyaXg0KF9pbnZlcnNlTWF0cml4KVxyXG5cclxuICAgICAgLy8gQ2hlY2sgYm91bmRpbmdCb3ggYmVmb3JlIGNvbnRpbnVpbmdcclxuXHJcbiAgICAgIGlmIChnZW9tZXRyeS5ib3VuZGluZ0JveCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChfcmF5LmludGVyc2VjdHNCb3goZ2VvbWV0cnkuYm91bmRpbmdCb3gpID09PSBmYWxzZSkgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBpbnRlcnNlY3Rpb25cclxuXHJcbiAgICAgIGNvbnN0IGluZGV4ID0gZ2VvbWV0cnkuaW5kZXhcclxuICAgICAgLyoqIFN0b3JlZCBoaWdoIGNvbXBvbmVudCBpZiBSVEUgaXMgYmVpbmcgdXNlZC4gUmVndWxhciBwb3NpdGlvbnMgb3RoZXJ3aXNlICovXHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbiBhcyBCdWZmZXJBdHRyaWJ1dGVcclxuICAgICAgLyoqIFN0b3JlZCBsb3cgY29tcG9uZW50IGlmIFJURSBpcyBiZWluZyB1c2VkLiB1bmRlZmluZWQgb3RoZXJ3aXNlICovXHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uTG93ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1sncG9zaXRpb25fbG93J10gYXMgQnVmZmVyQXR0cmlidXRlXHJcbiAgICAgIGNvbnN0IG1vcnBoUG9zaXRpb24gPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24gYXMgQXJyYXk8QnVmZmVyQXR0cmlidXRlPlxyXG4gICAgICBjb25zdCBtb3JwaFRhcmdldHNSZWxhdGl2ZSA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlXHJcbiAgICAgIGNvbnN0IHV2ID0gZ2VvbWV0cnkuYXR0cmlidXRlcy51diBhcyBCdWZmZXJBdHRyaWJ1dGVcclxuICAgICAgY29uc3QgdXYyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy51djIgYXMgQnVmZmVyQXR0cmlidXRlXHJcbiAgICAgIGNvbnN0IGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3Vwc1xyXG4gICAgICBjb25zdCBkcmF3UmFuZ2UgPSBnZW9tZXRyeS5kcmF3UmFuZ2VcclxuXHJcbiAgICAgIGlmIChpbmRleCAhPT0gbnVsbCkge1xyXG4gICAgICAgIC8vIGluZGV4ZWQgYnVmZmVyIGdlb21ldHJ5XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdGVyaWFsKSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBncm91cHNbaV1cclxuICAgICAgICAgICAgaWYgKCFncm91cC5tYXRlcmlhbEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgTG9nZ2VyLmVycm9yKGBHcm91cCB3aXRoIG5vIG1hdGVyaWFsLCBza2lwcGluZyFgKVxyXG4gICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBNYXRlcmlhbCA9IG1hdGVyaWFsW2dyb3VwLm1hdGVyaWFsSW5kZXhdXHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KGdyb3VwLnN0YXJ0LCBkcmF3UmFuZ2Uuc3RhcnQpXHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKFxyXG4gICAgICAgICAgICAgIGluZGV4LmNvdW50LFxyXG4gICAgICAgICAgICAgIE1hdGgubWluKGdyb3VwLnN0YXJ0ICsgZ3JvdXAuY291bnQsIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudClcclxuICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0LCBqbCA9IGVuZDsgaiA8IGpsOyBqICs9IDMpIHtcclxuICAgICAgICAgICAgICBjb25zdCBhID0gaW5kZXguZ2V0WChqKVxyXG4gICAgICAgICAgICAgIGNvbnN0IGIgPSBpbmRleC5nZXRYKGogKyAxKVxyXG4gICAgICAgICAgICAgIGNvbnN0IGMgPSBpbmRleC5nZXRYKGogKyAyKVxyXG5cclxuICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24gPSBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgdGhpcyxcclxuICAgICAgICAgICAgICAgIGdyb3VwTWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICByYXljYXN0ZXIsXHJcbiAgICAgICAgICAgICAgICBfcmF5LFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25Mb3csXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIG1vcnBoUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICBtb3JwaFRhcmdldHNSZWxhdGl2ZSxcclxuICAgICAgICAgICAgICAgIHV2LFxyXG4gICAgICAgICAgICAgICAgdXYyLFxyXG4gICAgICAgICAgICAgICAgYSxcclxuICAgICAgICAgICAgICAgIGIsXHJcbiAgICAgICAgICAgICAgICBjXHJcbiAgICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gTWF0aC5mbG9vcihqIC8gMykgLy8gdHJpYW5nbGUgbnVtYmVyIGluIGluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5mYWNlKVxyXG4gICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZS5tYXRlcmlhbEluZGV4ID0gZ3JvdXAubWF0ZXJpYWxJbmRleFxyXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKGludGVyc2VjdGlvbilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBkcmF3UmFuZ2Uuc3RhcnQpXHJcbiAgICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihpbmRleC5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KVxyXG5cclxuICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydCwgaWwgPSBlbmQ7IGkgPCBpbDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGEgPSBpbmRleC5nZXRYKGkpXHJcbiAgICAgICAgICAgIGNvbnN0IGIgPSBpbmRleC5nZXRYKGkgKyAxKVxyXG4gICAgICAgICAgICBjb25zdCBjID0gaW5kZXguZ2V0WChpICsgMilcclxuXHJcbiAgICAgICAgICAgIGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24oXHJcbiAgICAgICAgICAgICAgdGhpcyxcclxuICAgICAgICAgICAgICBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICByYXljYXN0ZXIsXHJcbiAgICAgICAgICAgICAgX3JheSxcclxuICAgICAgICAgICAgICBwb3NpdGlvbkxvdyxcclxuICAgICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgICAgICBtb3JwaFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgIG1vcnBoVGFyZ2V0c1JlbGF0aXZlLFxyXG4gICAgICAgICAgICAgIHV2LFxyXG4gICAgICAgICAgICAgIHV2MixcclxuICAgICAgICAgICAgICBhLFxyXG4gICAgICAgICAgICAgIGIsXHJcbiAgICAgICAgICAgICAgY1xyXG4gICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGguZmxvb3IoaSAvIDMpIC8vIHRyaWFuZ2xlIG51bWJlciBpbiBpbmRleGVkIGJ1ZmZlciBzZW1hbnRpY3NcclxuICAgICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goaW50ZXJzZWN0aW9uKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyBub24taW5kZXhlZCBidWZmZXIgZ2VvbWV0cnlcclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdyb3Vwc1tpXVxyXG4gICAgICAgICAgICBpZiAoIWdyb3VwLm1hdGVyaWFsSW5kZXgpIHtcclxuICAgICAgICAgICAgICBMb2dnZXIuZXJyb3IoYEdyb3VwIHdpdGggbm8gbWF0ZXJpYWwsIHNraXBwaW5nIWApXHJcbiAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbZ3JvdXAubWF0ZXJpYWxJbmRleF1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoZ3JvdXAuc3RhcnQsIGRyYXdSYW5nZS5zdGFydClcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgcG9zaXRpb24uY291bnQsXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4oZ3JvdXAuc3RhcnQgKyBncm91cC5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KVxyXG4gICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gc3RhcnQsIGpsID0gZW5kOyBqIDwgamw7IGogKz0gMykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGEgPSBqXHJcbiAgICAgICAgICAgICAgY29uc3QgYiA9IGogKyAxXHJcbiAgICAgICAgICAgICAgY29uc3QgYyA9IGogKyAyXHJcblxyXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBNYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgIHJheWNhc3RlcixcclxuICAgICAgICAgICAgICAgIF9yYXksXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkxvdyxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgbW9ycGhQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0c1JlbGF0aXZlLFxyXG4gICAgICAgICAgICAgICAgdXYsXHJcbiAgICAgICAgICAgICAgICB1djIsXHJcbiAgICAgICAgICAgICAgICBhLFxyXG4gICAgICAgICAgICAgICAgYixcclxuICAgICAgICAgICAgICAgIGNcclxuICAgICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKGogLyAzKSAvLyB0cmlhbmdsZSBudW1iZXIgaW4gbm9uLWluZGV4ZWQgYnVmZmVyIHNlbWFudGljc1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5mYWNlKVxyXG4gICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZS5tYXRlcmlhbEluZGV4ID0gZ3JvdXAubWF0ZXJpYWxJbmRleFxyXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKGludGVyc2VjdGlvbilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBkcmF3UmFuZ2Uuc3RhcnQpXHJcbiAgICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihwb3NpdGlvbi5jb3VudCwgZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50KVxyXG5cclxuICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydCwgaWwgPSBlbmQ7IGkgPCBpbDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGEgPSBpXHJcbiAgICAgICAgICAgIGNvbnN0IGIgPSBpICsgMVxyXG4gICAgICAgICAgICBjb25zdCBjID0gaSArIDJcclxuXHJcbiAgICAgICAgICAgIGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rpb24oXHJcbiAgICAgICAgICAgICAgdGhpcyxcclxuICAgICAgICAgICAgICBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICByYXljYXN0ZXIsXHJcbiAgICAgICAgICAgICAgX3JheSxcclxuICAgICAgICAgICAgICBwb3NpdGlvbkxvdyxcclxuICAgICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgICAgICBtb3JwaFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgIG1vcnBoVGFyZ2V0c1JlbGF0aXZlLFxyXG4gICAgICAgICAgICAgIHV2LFxyXG4gICAgICAgICAgICAgIHV2MixcclxuICAgICAgICAgICAgICBhLFxyXG4gICAgICAgICAgICAgIGIsXHJcbiAgICAgICAgICAgICAgY1xyXG4gICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGguZmxvb3IoaSAvIDMpIC8vIHRyaWFuZ2xlIG51bWJlciBpbiBub24taW5kZXhlZCBidWZmZXIgc2VtYW50aWNzXHJcbiAgICAgICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKGludGVyc2VjdGlvbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tJbnRlcnNlY3Rpb24oXHJcbiAgb2JqZWN0OiBPYmplY3QzRCxcclxuICBtYXRlcmlhbDogTWF0ZXJpYWwsXHJcbiAgcmF5Y2FzdGVyOiBSYXljYXN0ZXIsXHJcbiAgcmF5OiBSYXksXHJcbiAgcEE6IFZlY3RvcjMsXHJcbiAgcEI6IFZlY3RvcjMsXHJcbiAgcEM6IFZlY3RvcjMsXHJcbiAgcG9pbnQ6IFZlY3RvcjNcclxuKTogKEludGVyc2VjdGlvbiAmIHsgdXYyOiBWZWN0b3IyIHwgdW5kZWZpbmVkIH0pIHwgbnVsbCB7XHJcbiAgbGV0IGludGVyc2VjdFxyXG5cclxuICBpZiAobWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUpIHtcclxuICAgIGludGVyc2VjdCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZShwQywgcEIsIHBBLCB0cnVlLCBwb2ludClcclxuICB9IGVsc2Uge1xyXG4gICAgaW50ZXJzZWN0ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHBBLCBwQiwgcEMsIG1hdGVyaWFsLnNpZGUgIT09IERvdWJsZVNpZGUsIHBvaW50KVxyXG4gIH1cclxuXHJcbiAgaWYgKGludGVyc2VjdCA9PT0gbnVsbCkgcmV0dXJuIG51bGxcclxuXHJcbiAgX2ludGVyc2VjdGlvblBvaW50V29ybGQuY29weShwb2ludClcclxuICBfaW50ZXJzZWN0aW9uUG9pbnRXb3JsZC5hcHBseU1hdHJpeDQob2JqZWN0Lm1hdHJpeFdvcmxkKVxyXG5cclxuICBjb25zdCBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oX2ludGVyc2VjdGlvblBvaW50V29ybGQpXHJcblxyXG4gIGlmIChkaXN0YW5jZSA8IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4gcmF5Y2FzdGVyLmZhcikgcmV0dXJuIG51bGxcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGRpc3RhbmNlLFxyXG4gICAgcG9pbnQ6IF9pbnRlcnNlY3Rpb25Qb2ludFdvcmxkLmNsb25lKCksXHJcbiAgICBvYmplY3QsXHJcbiAgICB1djogdW5kZWZpbmVkLFxyXG4gICAgdXYyOiB1bmRlZmluZWQsXHJcbiAgICBmYWNlOiB1bmRlZmluZWQsXHJcbiAgICBmYWNlSW5kZXg6IHVuZGVmaW5lZFxyXG4gIH1cclxufVxyXG5cclxuLyoqIElmIHRoZSBnZW9tZXRyeSBpcyBub24gZG91YmxlLT4yZmxvYXRzIGVuY29kZWQsIHRoZSBgcG9zaXRpb25IaWdoYCBhcmd1bWVudCB3aWxsIGFjdHVhbGx5XHJcbiAqICBob2xkIHRoZSBkZWZhdWx0IGBwb3NpdGlvbmAgYXR0cmlidXRlIHZhbHVlc1xyXG4gKi9cclxuZnVuY3Rpb24gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbihcclxuICBvYmplY3Q6IE9iamVjdDNELFxyXG4gIG1hdGVyaWFsOiBNYXRlcmlhbCxcclxuICByYXljYXN0ZXI6IFJheWNhc3RlcixcclxuICByYXk6IFJheSxcclxuICBwb3NpdGlvbkxvdzogQnVmZmVyQXR0cmlidXRlLFxyXG4gIHBvc2l0aW9uSGlnaDogQnVmZmVyQXR0cmlidXRlLFxyXG4gIG1vcnBoUG9zaXRpb246IEFycmF5PEJ1ZmZlckF0dHJpYnV0ZT4sXHJcbiAgbW9ycGhUYXJnZXRzUmVsYXRpdmU6IGJvb2xlYW4sXHJcbiAgdXY6IEJ1ZmZlckF0dHJpYnV0ZSxcclxuICB1djI6IEJ1ZmZlckF0dHJpYnV0ZSxcclxuICBhOiBudW1iZXIsXHJcbiAgYjogbnVtYmVyLFxyXG4gIGM6IG51bWJlclxyXG4pIHtcclxuICBfdkEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkhpZ2gsIGEpXHJcbiAgX3ZCLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25IaWdoLCBiKVxyXG4gIF92Qy5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uSGlnaCwgYylcclxuICBpZiAocG9zaXRpb25Mb3cpIHtcclxuICAgIF92QS5hZGQoX3ZUZW1wLmZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25Mb3csIGEpKVxyXG4gICAgX3ZCLmFkZChfdlRlbXAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkxvdywgYikpXHJcbiAgICBfdkMuYWRkKF92VGVtcC5mcm9tQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uTG93LCBjKSlcclxuICB9XHJcblxyXG4gIGNvbnN0IG1vcnBoSW5mbHVlbmNlcyA9IChvYmplY3QgYXMgU2tpbm5lZE1lc2gpLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1xyXG5cclxuICBpZiAobW9ycGhQb3NpdGlvbiAmJiBtb3JwaEluZmx1ZW5jZXMpIHtcclxuICAgIF9tb3JwaEEuc2V0KDAsIDAsIDApXHJcbiAgICBfbW9ycGhCLnNldCgwLCAwLCAwKVxyXG4gICAgX21vcnBoQy5zZXQoMCwgMCwgMClcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMCwgaWwgPSBtb3JwaFBvc2l0aW9uLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcclxuICAgICAgY29uc3QgaW5mbHVlbmNlID0gbW9ycGhJbmZsdWVuY2VzW2ldXHJcbiAgICAgIGNvbnN0IG1vcnBoQXR0cmlidXRlID0gbW9ycGhQb3NpdGlvbltpXVxyXG5cclxuICAgICAgaWYgKGluZmx1ZW5jZSA9PT0gMCkgY29udGludWVcclxuXHJcbiAgICAgIF90ZW1wQS5mcm9tQnVmZmVyQXR0cmlidXRlKG1vcnBoQXR0cmlidXRlLCBhKVxyXG4gICAgICBfdGVtcEIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtb3JwaEF0dHJpYnV0ZSwgYilcclxuICAgICAgX3RlbXBDLmZyb21CdWZmZXJBdHRyaWJ1dGUobW9ycGhBdHRyaWJ1dGUsIGMpXHJcblxyXG4gICAgICBpZiAobW9ycGhUYXJnZXRzUmVsYXRpdmUpIHtcclxuICAgICAgICBfbW9ycGhBLmFkZFNjYWxlZFZlY3RvcihfdGVtcEEsIGluZmx1ZW5jZSlcclxuICAgICAgICBfbW9ycGhCLmFkZFNjYWxlZFZlY3RvcihfdGVtcEIsIGluZmx1ZW5jZSlcclxuICAgICAgICBfbW9ycGhDLmFkZFNjYWxlZFZlY3RvcihfdGVtcEMsIGluZmx1ZW5jZSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBfbW9ycGhBLmFkZFNjYWxlZFZlY3RvcihfdGVtcEEuc3ViKF92QSksIGluZmx1ZW5jZSlcclxuICAgICAgICBfbW9ycGhCLmFkZFNjYWxlZFZlY3RvcihfdGVtcEIuc3ViKF92QiksIGluZmx1ZW5jZSlcclxuICAgICAgICBfbW9ycGhDLmFkZFNjYWxlZFZlY3RvcihfdGVtcEMuc3ViKF92QyksIGluZmx1ZW5jZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF92QS5hZGQoX21vcnBoQSlcclxuICAgIF92Qi5hZGQoX21vcnBoQilcclxuICAgIF92Qy5hZGQoX21vcnBoQylcclxuICB9XHJcblxyXG4gIGlmICgob2JqZWN0IGFzIFNraW5uZWRNZXNoKS5pc1NraW5uZWRNZXNoKSB7XHJcbiAgICA7KG9iamVjdCBhcyBTa2lubmVkTWVzaCkuYm9uZVRyYW5zZm9ybShhLCBfdkEpXHJcbiAgICA7KG9iamVjdCBhcyBTa2lubmVkTWVzaCkuYm9uZVRyYW5zZm9ybShiLCBfdkIpXHJcbiAgICA7KG9iamVjdCBhcyBTa2lubmVkTWVzaCkuYm9uZVRyYW5zZm9ybShjLCBfdkMpXHJcbiAgfVxyXG5cclxuICBjb25zdCBpbnRlcnNlY3Rpb24gPSBjaGVja0ludGVyc2VjdGlvbihcclxuICAgIG9iamVjdCxcclxuICAgIG1hdGVyaWFsLFxyXG4gICAgcmF5Y2FzdGVyLFxyXG4gICAgcmF5LFxyXG4gICAgX3ZBLFxyXG4gICAgX3ZCLFxyXG4gICAgX3ZDLFxyXG4gICAgX2ludGVyc2VjdGlvblBvaW50XHJcbiAgKVxyXG5cclxuICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICBpZiAodXYpIHtcclxuICAgICAgX3V2QS5mcm9tQnVmZmVyQXR0cmlidXRlKHV2LCBhKVxyXG4gICAgICBfdXZCLmZyb21CdWZmZXJBdHRyaWJ1dGUodXYsIGIpXHJcbiAgICAgIF91dkMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1diwgYylcclxuXHJcbiAgICAgIGludGVyc2VjdGlvbi51diA9IFRyaWFuZ2xlLmdldFVWKFxyXG4gICAgICAgIF9pbnRlcnNlY3Rpb25Qb2ludCxcclxuICAgICAgICBfdkEsXHJcbiAgICAgICAgX3ZCLFxyXG4gICAgICAgIF92QyxcclxuICAgICAgICBfdXZBLFxyXG4gICAgICAgIF91dkIsXHJcbiAgICAgICAgX3V2QyxcclxuICAgICAgICBuZXcgVmVjdG9yMigpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodXYyKSB7XHJcbiAgICAgIF91dkEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1djIsIGEpXHJcbiAgICAgIF91dkIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1djIsIGIpXHJcbiAgICAgIF91dkMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1djIsIGMpXHJcblxyXG4gICAgICBpbnRlcnNlY3Rpb24udXYyID0gVHJpYW5nbGUuZ2V0VVYoXHJcbiAgICAgICAgX2ludGVyc2VjdGlvblBvaW50LFxyXG4gICAgICAgIF92QSxcclxuICAgICAgICBfdkIsXHJcbiAgICAgICAgX3ZDLFxyXG4gICAgICAgIF91dkEsXHJcbiAgICAgICAgX3V2QixcclxuICAgICAgICBfdXZDLFxyXG4gICAgICAgIG5ldyBWZWN0b3IyKClcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZhY2UgPSB7XHJcbiAgICAgIGEsXHJcbiAgICAgIGIsXHJcbiAgICAgIGMsXHJcbiAgICAgIG5vcm1hbDogbmV3IFZlY3RvcjMoKSxcclxuICAgICAgbWF0ZXJpYWxJbmRleDogMFxyXG4gICAgfVxyXG5cclxuICAgIFRyaWFuZ2xlLmdldE5vcm1hbChfdkEsIF92QiwgX3ZDLCBmYWNlLm5vcm1hbClcclxuXHJcbiAgICBpbnRlcnNlY3Rpb24uZmFjZSA9IGZhY2VcclxuICB9XHJcblxyXG4gIHJldHVybiBpbnRlcnNlY3Rpb25cclxufVxyXG4iLCJpbXBvcnQgeyBCYXRjaE9iamVjdCwgdHlwZSBWZWN0b3IzTGlrZSB9IGZyb20gJy4vQmF0Y2hPYmplY3QuanMnXHJcblxyXG5pbXBvcnQgeyBNYXRyaXg0IH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IE5vZGVSZW5kZXJWaWV3IH0gZnJvbSAnLi4vdHJlZS9Ob2RlUmVuZGVyVmlldy5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBJbnN0YW5jZWRCYXRjaE9iamVjdCBleHRlbmRzIEJhdGNoT2JqZWN0IHtcclxuICBwcm90ZWN0ZWQgaW5zdGFuY2VUcmFuc2Zvcm06IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihyZW5kZXJWaWV3OiBOb2RlUmVuZGVyVmlldywgYmF0Y2hJbmRleDogbnVtYmVyKSB7XHJcbiAgICBzdXBlcihyZW5kZXJWaWV3LCBiYXRjaEluZGV4KVxyXG4gICAgaWYgKHJlbmRlclZpZXcucmVuZGVyRGF0YS5nZW9tZXRyeS50cmFuc2Zvcm0pXHJcbiAgICAgIHRoaXMuaW5zdGFuY2VUcmFuc2Zvcm0uY29weShyZW5kZXJWaWV3LnJlbmRlckRhdGEuZ2VvbWV0cnkudHJhbnNmb3JtKVxyXG4gICAgdGhpcy50cmFuc2Zvcm0uY29weSh0aGlzLmluc3RhbmNlVHJhbnNmb3JtKVxyXG4gICAgdGhpcy50cmFuc2Zvcm1JbnYuY29weShuZXcgTWF0cml4NCgpLmNvcHkodGhpcy5pbnN0YW5jZVRyYW5zZm9ybSkuaW52ZXJ0KCkpXHJcbiAgICB0aGlzLnRyYW5zZm9ybURpcnR5ID0gZmFsc2VcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFuc2Zvcm1UUlMoXHJcbiAgICB0cmFuc2xhdGlvbjogVmVjdG9yM0xpa2UsXHJcbiAgICBldWxlcjogVmVjdG9yM0xpa2UsXHJcbiAgICBzY2FsZTogVmVjdG9yM0xpa2UsXHJcbiAgICBwaXZvdDogVmVjdG9yM0xpa2VcclxuICApIHtcclxuICAgIHN1cGVyLnRyYW5zZm9ybVRSUyh0cmFuc2xhdGlvbiwgZXVsZXIsIHNjYWxlLCBwaXZvdClcclxuICAgIHRoaXMudHJhbnNmb3JtLm11bHRpcGx5KHRoaXMuaW5zdGFuY2VUcmFuc2Zvcm0pXHJcbiAgICB0aGlzLnRyYW5zZm9ybUludi5jb3B5KHRoaXMudHJhbnNmb3JtKVxyXG4gICAgdGhpcy50cmFuc2Zvcm1JbnYuaW52ZXJ0KClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBCb3gzLFxyXG4gIEJ1ZmZlckdlb21ldHJ5LFxyXG4gIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgTWF0ZXJpYWwsXHJcbiAgTWF0cml4NCxcclxuICBPYmplY3QzRCxcclxuICBTcGhlcmUsXHJcbiAgVWludDE2QnVmZmVyQXR0cmlidXRlLFxyXG4gIFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSxcclxuICBXZWJHTFJlbmRlcmVyXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEdlb21ldHJ5IH0gZnJvbSAnLi4vY29udmVydGVyL0dlb21ldHJ5LmpzJ1xyXG5pbXBvcnQgeyBOb2RlUmVuZGVyVmlldyB9IGZyb20gJy4uL3RyZWUvTm9kZVJlbmRlclZpZXcuanMnXHJcbmltcG9ydCB7XHJcbiAgQWxsQmF0Y2hVcGRhdGVSYW5nZSxcclxuICB0eXBlIEJhdGNoLFxyXG4gIHR5cGUgQmF0Y2hVcGRhdGVSYW5nZSxcclxuICB0eXBlIERyYXdHcm91cCxcclxuICBHZW9tZXRyeVR5cGUsXHJcbiAgSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREUsXHJcbiAgaXNOb25lQmF0Y2hVcGRhdGVSYW5nZSxcclxuICBOb25lQmF0Y2hVcGRhdGVSYW5nZVxyXG59IGZyb20gJy4vQmF0Y2guanMnXHJcbmltcG9ydCBTcGVja2xlSW5zdGFuY2VkTWVzaCBmcm9tICcuLi9vYmplY3RzL1NwZWNrbGVJbnN0YW5jZWRNZXNoLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQge1xyXG4gIEFjY2VsZXJhdGlvblN0cnVjdHVyZSxcclxuICBEZWZhdWx0QlZIT3B0aW9uc1xyXG59IGZyb20gJy4uL29iamVjdHMvQWNjZWxlcmF0aW9uU3RydWN0dXJlLmpzJ1xyXG5pbXBvcnQgeyBJbnN0YW5jZWRCYXRjaE9iamVjdCB9IGZyb20gJy4vSW5zdGFuY2VkQmF0Y2hPYmplY3QuanMnXHJcbmltcG9ydCBNYXRlcmlhbHMgZnJvbSAnLi4vbWF0ZXJpYWxzL01hdGVyaWFscy5qcydcclxuaW1wb3J0IHsgRHJhd1JhbmdlcyB9IGZyb20gJy4vRHJhd1Jhbmdlcy5qcydcclxuaW1wb3J0IFNwZWNrbGVTdGFuZGFyZENvbG9yZWRNYXRlcmlhbCBmcm9tICcuLi9tYXRlcmlhbHMvU3BlY2tsZVN0YW5kYXJkQ29sb3JlZE1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBCYXRjaE9iamVjdCB9IGZyb20gJy4vQmF0Y2hPYmplY3QuanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEluc3RhbmNlZE1lc2hCYXRjaCBpbXBsZW1lbnRzIEJhdGNoIHtcclxuICBwdWJsaWMgaWQ6IHN0cmluZ1xyXG4gIHB1YmxpYyBzdWJ0cmVlSWQ6IHN0cmluZ1xyXG4gIHB1YmxpYyByZW5kZXJWaWV3czogTm9kZVJlbmRlclZpZXdbXVxyXG4gIHByaXZhdGUgZ2VvbWV0cnk6IEJ1ZmZlckdlb21ldHJ5XHJcbiAgcHVibGljIGJhdGNoTWF0ZXJpYWw6IE1hdGVyaWFsXHJcbiAgcHVibGljIG1lc2g6IFNwZWNrbGVJbnN0YW5jZWRNZXNoXHJcbiAgcHJvdGVjdGVkIGRyYXdSYW5nZXM6IERyYXdSYW5nZXMgPSBuZXcgRHJhd1JhbmdlcygpXHJcblxyXG4gIHByaXZhdGUgaW5zdGFuY2VUcmFuc2Zvcm1CdWZmZXIwOiBGbG9hdDMyQXJyYXlcclxuICBwcml2YXRlIGluc3RhbmNlVHJhbnNmb3JtQnVmZmVyMTogRmxvYXQzMkFycmF5XHJcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1CdWZmZXJJbmRleDogbnVtYmVyID0gMFxyXG4gIHByaXZhdGUgaW5zdGFuY2VHcmFkaWVudEJ1ZmZlcjogRmxvYXQzMkFycmF5XHJcbiAgcHJpdmF0ZSBpbnN0YW5jZU9iamVjdElkQnVmZmVyOiBGbG9hdDMyQXJyYXkgfCB1bmRlZmluZWRcclxuXHJcbiAgcHJpdmF0ZSBuZWVkc1NodWZmbGUgPSBmYWxzZVxyXG5cclxuICBwdWJsaWMgZ2V0IGJvdW5kcygpOiBCb3gzIHtcclxuICAgIHJldHVybiB0aGlzLm1lc2guVEFTLmdldEJvdW5kaW5nQm94KG5ldyBCb3gzKCkpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRyYXdDYWxscygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzLmxlbmd0aFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtaW5EcmF3Q2FsbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBbLi4uQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMuZ3JvdXBzLm1hcCgodmFsdWUpID0+IHZhbHVlLm1hdGVyaWFsSW5kZXgpKSldXHJcbiAgICAgIC5sZW5ndGhcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWF4RHJhd0NhbGxzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0cmlDb3VudCgpOiBudW1iZXIge1xyXG4gICAgLyoqIENhdGVyaW5nIHRvIHR5cGVzY3JpcHRcclxuICAgICAqIFRoZXJlIGlzIG5vIHVubml2ZXJzZSB3aGVyZSB0aGUgZ2VvbWV0cnkgaXMgbm9uLWluZGV4ZWQuIFdlJ3JlICoqZXhwbGljaXRseSoqIHNldHRpbmcgdGhlIGluZGV4IGF0IGNyZWF0aW9uIHRpbWVcclxuICAgICAqL1xyXG4gICAgY29uc3QgaW5kZXhDb3VudCA9IHRoaXMuZ2VvbWV0cnkuaW5kZXggPyB0aGlzLmdlb21ldHJ5LmluZGV4LmNvdW50IDogMFxyXG4gICAgcmV0dXJuIChpbmRleENvdW50IC8gMykgKiB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2ZXJ0Q291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uY291bnQgKiB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwb2ludENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBsaW5lQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGdlb21ldHJ5VHlwZSgpOiBHZW9tZXRyeVR5cGUge1xyXG4gICAgcmV0dXJuIEdlb21ldHJ5VHlwZS5NRVNIXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlbmRlck9iamVjdCgpOiBPYmplY3QzRCB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXNoXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aCAqIDE2XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1hdGVyaWFscygpOiBNYXRlcmlhbFtdIHtcclxuICAgIHJldHVybiB0aGlzLm1lc2gubWF0ZXJpYWxzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGdyb3VwcygpOiBBcnJheTxEcmF3R3JvdXA+IHtcclxuICAgIHJldHVybiB0aGlzLm1lc2guZ3JvdXBzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgc3VidHJlZUlkOiBzdHJpbmcsXHJcbiAgICByZW5kZXJWaWV3czogTm9kZVJlbmRlclZpZXdbXSxcclxuICAgIHdlYkdMMjogYm9vbGVhblxyXG4gICkge1xyXG4gICAgdGhpcy5pZCA9IGlkXHJcbiAgICB0aGlzLnN1YnRyZWVJZCA9IHN1YnRyZWVJZFxyXG4gICAgdGhpcy5yZW5kZXJWaWV3cyA9IHJlbmRlclZpZXdzXHJcbiAgICBpZiAoIXdlYkdMMikgdGhpcy5pbnN0YW5jZU9iamVjdElkQnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnJlbmRlclZpZXdzLmxlbmd0aClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRCYXRjaE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCkge1xyXG4gICAgdGhpcy5iYXRjaE1hdGVyaWFsID0gbWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblVwZGF0ZShkZWx0YVRpbWU6IG51bWJlcikge1xyXG4gICAgZGVsdGFUaW1lXHJcbiAgICBpZiAodGhpcy5uZWVkc1NodWZmbGUpIHtcclxuICAgICAgdGhpcy5zaHVmZmxlRHJhd0dyb3VwcygpXHJcbiAgICAgIHRoaXMubmVlZHNTaHVmZmxlID0gZmFsc2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJlbmRlcihyZW5kZXJlcjogV2ViR0xSZW5kZXJlcikge1xyXG4gICAgcmVuZGVyZXJcclxuICB9XHJcblxyXG4gIC8qKiBOb3RlOiBZb3UgY2FuIG9ubHkgc2V0IHZpc2liaWxpdHkgb24gcmFuZ2VzIHRoYXQgZXhpc3QgYXMgZHJhdyBncm91cHMhICovXHJcbiAgcHVibGljIHNldFZpc2libGVSYW5nZShyYW5nZXM6IEJhdGNoVXBkYXRlUmFuZ2VbXSkge1xyXG4gICAgLyoqIEVudGlyZSBiYXRjaCBuZWVkcyB0byBOT1QgYmUgZHJhd24gKi9cclxuICAgIGlmIChyYW5nZXMubGVuZ3RoID09PSAxICYmIGlzTm9uZUJhdGNoVXBkYXRlUmFuZ2UocmFuZ2VzWzBdKSkge1xyXG4gICAgICB0aGlzLm1lc2guY2hpbGRyZW4uZm9yRWFjaCgoaW5zdGFuY2UpID0+IChpbnN0YW5jZS52aXNpYmxlID0gZmFsc2UpKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIC8qKiBFbnRpcmUgYmF0Y2ggbmVlZHMgdG8gQkUgZHJhd24gKi9cclxuICAgIGlmIChyYW5nZXMubGVuZ3RoID09PSAxICYmIHJhbmdlc1swXSA9PT0gQWxsQmF0Y2hVcGRhdGVSYW5nZSkge1xyXG4gICAgICB0aGlzLm1lc2guY2hpbGRyZW4uZm9yRWFjaCgoaW5zdGFuY2UpID0+IChpbnN0YW5jZS52aXNpYmxlID0gdHJ1ZSkpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWVzaC5jaGlsZHJlbi5mb3JFYWNoKChpbnN0YW5jZSkgPT4gKGluc3RhbmNlLnZpc2libGUgPSBmYWxzZSkpXHJcbiAgICByYW5nZXMuZm9yRWFjaCgocmFuZ2UpID0+IHtcclxuICAgICAgY29uc3QgZm91bmRJbnN0YW5jZSA9IHRoaXMuZ3JvdXBzLmZpbmQoXHJcbiAgICAgICAgKGdyb3VwOiBEcmF3R3JvdXApID0+XHJcbiAgICAgICAgICByYW5nZS5vZmZzZXQgPT09IGdyb3VwLnN0YXJ0ICYmXHJcbiAgICAgICAgICByYW5nZS5vZmZzZXQgKyByYW5nZS5jb3VudCA9PT0gZ3JvdXAuc3RhcnQgKyBncm91cC5jb3VudFxyXG4gICAgICApXHJcbiAgICAgIGlmIChmb3VuZEluc3RhbmNlKSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VJbmRleCA9IHRoaXMuZ3JvdXBzLmluZGV4T2YoZm91bmRJbnN0YW5jZSlcclxuICAgICAgICBpZiAoaW5zdGFuY2VJbmRleCAhPT0gLTEpIHRoaXMubWVzaC5jaGlsZHJlbltpbnN0YW5jZUluZGV4XS52aXNpYmxlID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFZpc2libGVSYW5nZSgpOiBCYXRjaFVwZGF0ZVJhbmdlIHtcclxuICAgIGlmICghdGhpcy5tZXNoLmNoaWxkcmVuWzBdLnZpc2libGUpIHJldHVybiBOb25lQmF0Y2hVcGRhdGVSYW5nZVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLm1lc2guY2hpbGRyZW4ubGVuZ3RoOyBrKyspIHtcclxuICAgICAgaWYgKCF0aGlzLm1lc2guY2hpbGRyZW5ba10udmlzaWJsZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgICBjb3VudDogayAqIDE2XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gQWxsQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE9wYXF1ZSgpOiBCYXRjaFVwZGF0ZVJhbmdlIHtcclxuICAgIC8qKiBJZiB0aGVyZSBpcyBhbnkgdHJhbnNwYXJlbnQgb3IgaGlkZGVuIGdyb3VwIHJldHVybiB0aGUgdXBkYXRlIHJhbmdlIHVwIHRvIGl0J3Mgb2Zmc2V0ICovXHJcbiAgICBjb25zdCB0cmFuc3BhcmVudE9ySGlkZGVuR3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUubWF0ZXJpYWxJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2VcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBNYXRlcmlhbHMuaXNUcmFuc3BhcmVudCh0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XSkgfHxcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XS52aXNpYmxlID09PSBmYWxzZVxyXG4gICAgICApXHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0cmFuc3BhcmVudE9ySGlkZGVuR3JvdXApIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgY291bnQ6IHRyYW5zcGFyZW50T3JIaWRkZW5Hcm91cC5zdGFydFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiogRW50aXJlIGJhdGNoIGlzIG9wYXF1ZSAqL1xyXG4gICAgcmV0dXJuIEFsbEJhdGNoVXBkYXRlUmFuZ2VcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREZXB0aCgpOiBCYXRjaFVwZGF0ZVJhbmdlIHtcclxuICAgIC8qKiBJZiB0aGVyZSBpcyBhbnkgdHJhbnNwYXJlbnQgb3IgaGlkZGVuIGdyb3VwIHJldHVybiB0aGUgdXBkYXRlIHJhbmdlIHVwIHRvIGl0J3Mgb2Zmc2V0ICovXHJcbiAgICBjb25zdCB0cmFuc3BhcmVudE9ySGlkZGVuR3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUubWF0ZXJpYWxJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2VcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBNYXRlcmlhbHMuaXNUcmFuc3BhcmVudCh0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XSkgfHxcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XS52aXNpYmxlID09PSBmYWxzZSB8fFxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdLmNvbG9yV3JpdGUgPT09IGZhbHNlXHJcbiAgICAgIClcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRyYW5zcGFyZW50T3JIaWRkZW5Hcm91cCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICBjb3VudDogdHJhbnNwYXJlbnRPckhpZGRlbkdyb3VwLnN0YXJ0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKiBFbnRpcmUgYmF0Y2ggaXMgb3BhcXVlICovXHJcbiAgICByZXR1cm4gQWxsQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRyYW5zcGFyZW50KCk6IEJhdGNoVXBkYXRlUmFuZ2Uge1xyXG4gICAgLyoqIExvb2sgZm9yIGEgdHJhbnNwYXJlbnQgZ3JvdXAgKi9cclxuICAgIGNvbnN0IHRyYW5zcGFyZW50R3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUubWF0ZXJpYWxJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2VcclxuICAgICAgcmV0dXJuIE1hdGVyaWFscy5pc1RyYW5zcGFyZW50KHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdKVxyXG4gICAgfSlcclxuICAgIC8qKiBMb29rIGZvciBhIGhpZGRlbiBncm91cCAqL1xyXG4gICAgY29uc3QgaGlkZGVuR3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUubWF0ZXJpYWxJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2VcclxuICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdLnZpc2libGUgPT09IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgLyoqIElmIHRoZXJlIGlzIGEgdHJhbnNwYXJlbnQgZ3JvdXAgcmV0dXJuIGl0J3MgcmFuZ2UgKi9cclxuICAgIGlmICh0cmFuc3BhcmVudEdyb3VwKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IHRyYW5zcGFyZW50R3JvdXAuc3RhcnRcclxuICAgICAgY29uc3QgY291bnQgPVxyXG4gICAgICAgIGhpZGRlbkdyb3VwICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgID8gaGlkZGVuR3JvdXAuc3RhcnQgLSB0cmFuc3BhcmVudEdyb3VwLnN0YXJ0XHJcbiAgICAgICAgICA6IHRoaXMuZ2V0Q291bnQoKSAtIHRyYW5zcGFyZW50R3JvdXAuc3RhcnRcclxuICAgICAgaWYgKG9mZnNldCA9PT0gMCAmJiBjb3VudCA9PT0gdGhpcy5nZXRDb3VudCgpKSByZXR1cm4gQWxsQmF0Y2hVcGRhdGVSYW5nZVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG9mZnNldCxcclxuICAgICAgICBjb3VudFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiogRW50aXJlIGJhdGNoIGlzIG5vdCB0cmFuc3BhcmVudCAqL1xyXG4gICAgcmV0dXJuIE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U3RlbmNpbCgpOiBCYXRjaFVwZGF0ZVJhbmdlIHtcclxuICAgIC8qKiBJZiB0aGVyZSBpcyBhIHNpbmdsZSBncm91cCBhbmQgaXQncyBtYXRlcmlhbCB3cml0ZXMgdG8gc3RlbmNpbCwgcmV0dXJuIGFsbCAqL1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBpZiAodGhpcy5tYXRlcmlhbHNbMF0uc3RlbmNpbFdyaXRlID09PSB0cnVlKSByZXR1cm4gQWxsQmF0Y2hVcGRhdGVSYW5nZVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RlbmNpbEdyb3VwID0gdGhpcy5ncm91cHMuZmluZCgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKHZhbHVlLm1hdGVyaWFsSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XS5zdGVuY2lsV3JpdGUgPT09IHRydWVcclxuICAgIH0pXHJcbiAgICBpZiAoc3RlbmNpbEdyb3VwKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgb2Zmc2V0OiBzdGVuY2lsR3JvdXAuc3RhcnQsXHJcbiAgICAgICAgY291bnQ6IHN0ZW5jaWxHcm91cC5jb3VudFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiogTm8gc3RlbmNpbCBncm91cCAqL1xyXG4gICAgcmV0dXJuIE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QmF0Y2hCdWZmZXJzKHJhbmdlczogQmF0Y2hVcGRhdGVSYW5nZVtdKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHJhbmdlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHJhbmdlc1trXVxyXG4gICAgICBpZiAocmFuZ2UubWF0ZXJpYWxPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcmFuZ2UubWF0ZXJpYWxPcHRpb25zLnJhbXBJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICByYW5nZS5tYXRlcmlhbE9wdGlvbnMucmFtcFdpZHRoICE9PSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gcmFuZ2VzW2tdLm9mZnNldFxyXG4gICAgICAgICAgY29uc3QgY291bnQgPSByYW5nZXNba10uY291bnRcclxuICAgICAgICAgIC8qKiBUaGUgcmFtcCBpbmRpY2VzIHNwZWNpZnkgdGhlICpiZWdpbmluZyogb2YgZWFjaCByYW1wIGNvbG9yLiBXaGVuIHNhbXBsaW5nIHdpdGggTmVhcmVzdCBmaWx0ZXIgKHNpbmNlIHdlIGRvbid0IHdhbnQgZmlsdGVyaW5nKVxyXG4gICAgICAgICAgICogIHdlJ2xsIGFsd2F5cyBiZSBzYW1wbGluZyByaWdodCBhdCB0aGUgZWRnZSBiZXR3ZWVuIHRleGVscy4gTW9zdCBHUFVzIHdpbGwgc2FtcGxlIGNvbnNpc3RlbnRseSwgYnV0IHNvbWUgd29uJ3QgYW5kIHdlIGVuZCB1cCB3aXRoXHJcbiAgICAgICAgICAgKiAgYSB0b24gb2YgYXJ0aWZhY3RzLiBUbyBhdm9pZCB0aGlzLCB3ZSBhcmUgc2hpZnRpbmcgdGhlIHNhbXBsaW5nIGluZGljZXMgc28gdGhleSdyZSByaWdodCBvbiB0aGUgY2VudGVyIG9mIGVhY2ggdGV4ZWwsIHNvIG5vIGluY29uc2lzdGVudFxyXG4gICAgICAgICAgICogIHNhbXBsaW5nIGNhbiBvY2N1ci5cclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgY29uc3Qgc2hpZnRlZEluZGV4ID1cclxuICAgICAgICAgICAgcmFuZ2UubWF0ZXJpYWxPcHRpb25zLnJhbXBJbmRleCArIDAuNSAvIHJhbmdlLm1hdGVyaWFsT3B0aW9ucy5yYW1wV2lkdGhcclxuICAgICAgICAgIHRoaXMudXBkYXRlR3JhZGllbnRJbmRleEJ1ZmZlckRhdGEoXHJcbiAgICAgICAgICAgIHN0YXJ0IC8gMTYsXHJcbiAgICAgICAgICAgIChzdGFydCArIGNvdW50KSAvIDE2LFxyXG4gICAgICAgICAgICBzaGlmdGVkSW5kZXhcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlIGhlcmUsIGJlY2F1c2UgZWFjaCBiYXRjaCB1c2VzIGl0J3Mgb3duIGNsb25lIGZvciBhbnkgbWF0ZXJpYWwgd2UgdXNlIG9uIGl0XHJcbiAgICAgICAgICogIGJlY2F1c2Ugb3RoZXJ3aXNlIHRocmVlLmpzIHdvbid0IHByb3Blcmx5IHVwZGF0ZSBvdXIgY3VzdG9tIHVuaWZvcm1zXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKHJhbmdlLm1hdGVyaWFsT3B0aW9ucy5yYW1wVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpZiAocmFuZ2UubWF0ZXJpYWwgaW5zdGFuY2VvZiBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgcmFuZ2UubWF0ZXJpYWwuc2V0R3JhZGllbnRUZXh0dXJlKHJhbmdlLm1hdGVyaWFsT3B0aW9ucy5yYW1wVGV4dHVyZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREcmF3UmFuZ2VzKHJhbmdlczogQmF0Y2hVcGRhdGVSYW5nZVtdKSB7XHJcbiAgICByYW5nZXMuZm9yRWFjaCgodmFsdWU6IEJhdGNoVXBkYXRlUmFuZ2UpID0+IHtcclxuICAgICAgaWYgKHZhbHVlLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgdmFsdWUubWF0ZXJpYWwgPSB0aGlzLm1lc2guZ2V0Q2FjaGVkTWF0ZXJpYWwodmFsdWUubWF0ZXJpYWwpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgbWF0ZXJpYWxzOiBBcnJheTxNYXRlcmlhbD4gPSByYW5nZXMubWFwKCh2YWw6IEJhdGNoVXBkYXRlUmFuZ2UpID0+IHtcclxuICAgICAgcmV0dXJuIHZhbC5tYXRlcmlhbCBhcyBNYXRlcmlhbFxyXG4gICAgfSlcclxuICAgIGNvbnN0IHVuaXF1ZU1hdGVyaWFscyA9IFsuLi5BcnJheS5mcm9tKG5ldyBTZXQobWF0ZXJpYWxzLm1hcCgodmFsdWUpID0+IHZhbHVlKSkpXVxyXG5cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdW5pcXVlTWF0ZXJpYWxzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmICghdGhpcy5tYXRlcmlhbHMuaW5jbHVkZXModW5pcXVlTWF0ZXJpYWxzW2tdKSlcclxuICAgICAgICB0aGlzLm1hdGVyaWFscy5wdXNoKHVuaXF1ZU1hdGVyaWFsc1trXSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1lc2guZ3JvdXBzID0gdGhpcy5kcmF3UmFuZ2VzLmludGVncmF0ZVJhbmdlcyhcclxuICAgICAgdGhpcy5ncm91cHMsXHJcbiAgICAgIHRoaXMubWF0ZXJpYWxzLFxyXG4gICAgICByYW5nZXNcclxuICAgIClcclxuXHJcbiAgICBsZXQgY291bnQgPSAwXHJcbiAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKCh2YWx1ZSkgPT4gKGNvdW50ICs9IHZhbHVlLmNvdW50KSlcclxuICAgIGlmIChjb3VudCAhPT0gdGhpcy5yZW5kZXJWaWV3cy5sZW5ndGggKiAxNikge1xyXG4gICAgICBMb2dnZXIuZXJyb3IoYERyYXcgZ3JvdXBzIGludmFsaWQgb24gJHt0aGlzLmlkfWApXHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEJhdGNoQnVmZmVycyhyYW5nZXMpXHJcbiAgICB0aGlzLmNsZWFuTWF0ZXJpYWxzKClcclxuICAgIGNvbnN0IHRyYW5zcGFyZW50RGVwdGhIaWRkZW5Hcm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoXHJcbiAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XS50cmFuc3BhcmVudCA9PT0gdHJ1ZSB8fFxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdLnZpc2libGUgPT09IGZhbHNlIHx8XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNbdmFsdWUubWF0ZXJpYWxJbmRleF0uY29sb3JXcml0ZSA9PT0gZmFsc2VcclxuICAgIClcclxuICAgIC8qKiBXZSBzaHVmZmxlIG9ubHkgd2hlbiBhYm92ZSBhIGNlcnRhaW4gZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQuIFdlIGRvbid0IHdhbnQgdG8gYmUgc2h1ZmZsaW5nIGV2ZXJ5IHNpbmdsZSB0aW1lICovXHJcbiAgICBpZiAodGhpcy5kcmF3Q2FsbHMgPiB0aGlzLm1heERyYXdDYWxscykge1xyXG4gICAgICB0aGlzLm5lZWRzU2h1ZmZsZSA9IHRydWVcclxuICAgIH0gZWxzZSBpZiAodHJhbnNwYXJlbnREZXB0aEhpZGRlbkdyb3VwKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyb3Vwcy5sZW5ndGggPT09IDEpIHRoaXMubmVlZHNTaHVmZmxlID0gdHJ1ZVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgbGV0IGsgPSB0aGlzLmdyb3Vwcy5pbmRleE9mKHRyYW5zcGFyZW50RGVwdGhIaWRkZW5Hcm91cCk7XHJcbiAgICAgICAgICBrIDwgdGhpcy5ncm91cHMubGVuZ3RoO1xyXG4gICAgICAgICAgaysrXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxzW3RoaXMuZ3JvdXBzW2tdLm1hdGVyaWFsSW5kZXhdXHJcbiAgICAgICAgICBpZiAobWF0ZXJpYWwudmlzaWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoIW1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IG1hdGVyaWFsLmNvbG9yV3JpdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLm5lZWRzU2h1ZmZsZSA9IHRydWVcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2VcclxuICAgICAgdGhpcy5tZXNoLnVwZGF0ZURyYXdHcm91cHMoXHJcbiAgICAgICAgdGhpcy5nZXRDdXJyZW50VHJhbnNmb3JtQnVmZmVyKCksXHJcbiAgICAgICAgdGhpcy5nZXRDdXJyZW50R3JhZGllbnRCdWZmZXIoKSxcclxuICAgICAgICB0aGlzLmdldEN1cnJlbnRPYmplY3RJbmRleEJ1ZmZlcigpXHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW5NYXRlcmlhbHMoKSB7XHJcbiAgICBjb25zdCBtYXRlcmlhbHNJblVzZSA9IFtcclxuICAgICAgLi4uQXJyYXkuZnJvbShcclxuICAgICAgICBuZXcgU2V0KHRoaXMuZ3JvdXBzLm1hcCgodmFsdWUpID0+IHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdKSlcclxuICAgICAgKVxyXG4gICAgXVxyXG4gICAgbGV0IGsgPSAwXHJcbiAgICB3aGlsZSAodGhpcy5tYXRlcmlhbHMubGVuZ3RoID4gbWF0ZXJpYWxzSW5Vc2UubGVuZ3RoKSB7XHJcbiAgICAgIGlmICghbWF0ZXJpYWxzSW5Vc2UuaW5jbHVkZXModGhpcy5tYXRlcmlhbHNba10pKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHMuc3BsaWNlKGssIDEpXHJcbiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgodmFsdWU6IERyYXdHcm91cCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlLm1hdGVyaWFsSW5kZXggPiBrKSB2YWx1ZS5tYXRlcmlhbEluZGV4LS1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGsgPSAwXHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBrKytcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2h1ZmZsZURyYXdHcm91cHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5zbGljZSgpXHJcblxyXG4gICAgZ3JvdXBzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgbWF0ZXJpYWxBOiBNYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxzW2EubWF0ZXJpYWxJbmRleF1cclxuICAgICAgY29uc3QgbWF0ZXJpYWxCOiBNYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxzW2IubWF0ZXJpYWxJbmRleF1cclxuICAgICAgY29uc3QgdmlzaWJsZU9yZGVyID1cclxuICAgICAgICArbWF0ZXJpYWxCLnZpc2libGUgK1xyXG4gICAgICAgICttYXRlcmlhbEIuY29sb3JXcml0ZSAtXHJcbiAgICAgICAgKCttYXRlcmlhbEEudmlzaWJsZSArICttYXRlcmlhbEEuY29sb3JXcml0ZSlcclxuICAgICAgY29uc3QgdHJhbnNwYXJlbnRPcmRlciA9ICttYXRlcmlhbEEudHJhbnNwYXJlbnQgLSArbWF0ZXJpYWxCLnRyYW5zcGFyZW50XHJcbiAgICAgIGlmICh2aXNpYmxlT3JkZXIgIT09IDApIHJldHVybiB2aXNpYmxlT3JkZXJcclxuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50T3JkZXJcclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgbWF0ZXJpYWxPcmRlcjogQXJyYXk8bnVtYmVyPiA9IFtdXHJcbiAgICBncm91cHMucmVkdWNlKChwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUpID0+IHtcclxuICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5tYXRlcmlhbEluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAocHJldmlvdXNWYWx1ZS5pbmRleE9mKGN1cnJlbnRWYWx1ZS5tYXRlcmlhbEluZGV4KSA9PT0gLTEpIHtcclxuICAgICAgICAgIHByZXZpb3VzVmFsdWUucHVzaChjdXJyZW50VmFsdWUubWF0ZXJpYWxJbmRleClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWVcclxuICAgIH0sIG1hdGVyaWFsT3JkZXIpXHJcblxyXG4gICAgY29uc3QgZ3JvdXBlZCA9IFtdXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IG1hdGVyaWFsT3JkZXIubGVuZ3RoOyBrKyspIHtcclxuICAgICAgZ3JvdXBlZC5wdXNoKFxyXG4gICAgICAgIGdyb3Vwcy5maWx0ZXIoKHZhbCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbC5tYXRlcmlhbEluZGV4ID09PSBtYXRlcmlhbE9yZGVyW2tdXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNvdXJjZVRyYW5zZm9ybUJ1ZmZlcjogRmxvYXQzMkFycmF5ID0gdGhpcy5nZXRDdXJyZW50VHJhbnNmb3JtQnVmZmVyKClcclxuICAgIGNvbnN0IHRhcmdldFRyYW5zZm9ybUJ1ZmZlcjogRmxvYXQzMkFycmF5ID0gdGhpcy5nZXROZXh0VHJhbnNmb3JtQnVmZmVyKClcclxuICAgIGNvbnN0IHNvdXJjZUdyYWRpZW50QnVmZmVyOiBGbG9hdDMyQXJyYXkgPSB0aGlzLmdldEN1cnJlbnRHcmFkaWVudEJ1ZmZlcigpXHJcbiAgICBjb25zdCB0YXJnZXRHcmFkaWVudEJ1ZmZlcjogRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcclxuICAgICAgc291cmNlR3JhZGllbnRCdWZmZXIubGVuZ3RoXHJcbiAgICApXHJcbiAgICBjb25zdCBuZXdHcm91cHMgPSBbXVxyXG4gICAgY29uc3Qgc2NyYXRjaFJ2cyA9IHRoaXMucmVuZGVyVmlld3Muc2xpY2UoKVxyXG4gICAgc2NyYXRjaFJ2cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLmJhdGNoU3RhcnQgLSBiLmJhdGNoU3RhcnRcclxuICAgIH0pXHJcbiAgICBsZXQgdGFyZ2V0QnVmZmVyT2Zmc2V0ID0gMFxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBncm91cGVkLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IG1hdGVyaWFsR3JvdXAgPSBncm91cGVkW2tdXHJcbiAgICAgIGNvbnN0IG1hdGVyaWFsR3JvdXBTdGFydCA9IHRhcmdldEJ1ZmZlck9mZnNldFxyXG4gICAgICBsZXQgbWF0ZXJpYWxHcm91cENvdW50ID0gMFxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChtYXRlcmlhbEdyb3VwIGFzIFtdKS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbWF0ZXJpYWxHcm91cFtpXS5zdGFydFxyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gbWF0ZXJpYWxHcm91cFtpXS5jb3VudFxyXG4gICAgICAgIGxldCBzdWJBcnJheSA9IHNvdXJjZVRyYW5zZm9ybUJ1ZmZlci5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBjb3VudClcclxuICAgICAgICB0YXJnZXRUcmFuc2Zvcm1CdWZmZXIuc2V0KHN1YkFycmF5LCB0YXJnZXRCdWZmZXJPZmZzZXQpXHJcbiAgICAgICAgc3ViQXJyYXkgPSBzb3VyY2VHcmFkaWVudEJ1ZmZlci5zdWJhcnJheShcclxuICAgICAgICAgIHN0YXJ0IC8gSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREUsXHJcbiAgICAgICAgICAoc3RhcnQgKyBjb3VudCkgLyBJTlNUQU5DRV9UUkFOU0ZPUk1fQlVGRkVSX1NUUklERVxyXG4gICAgICAgIClcclxuICAgICAgICB0YXJnZXRHcmFkaWVudEJ1ZmZlci5zZXQoXHJcbiAgICAgICAgICBzdWJBcnJheSxcclxuICAgICAgICAgIHRhcmdldEJ1ZmZlck9mZnNldCAvIElOU1RBTkNFX1RSQU5TRk9STV9CVUZGRVJfU1RSSURFXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGxldCBydkVsZW1Db3VudCA9IDBcclxuICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IHNjcmF0Y2hSdnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgc2NyYXRjaFJ2c1ttXS5iYXRjaFN0YXJ0ID49IHN0YXJ0ICYmXHJcbiAgICAgICAgICAgIHNjcmF0Y2hSdnNbbV0uYmF0Y2hFbmQgPD0gc3RhcnQgKyBjb3VudFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHNjcmF0Y2hSdnNbbV0uc2V0QmF0Y2hEYXRhKFxyXG4gICAgICAgICAgICAgIHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgdGFyZ2V0QnVmZmVyT2Zmc2V0ICsgcnZFbGVtQ291bnQsXHJcbiAgICAgICAgICAgICAgc2NyYXRjaFJ2c1ttXS5iYXRjaENvdW50XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgcnZFbGVtQ291bnQgKz0gc2NyYXRjaFJ2c1ttXS5iYXRjaENvdW50XHJcbiAgICAgICAgICAgIHNjcmF0Y2hSdnMuc3BsaWNlKG0sIDEpXHJcbiAgICAgICAgICAgIG0tLVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0YXJnZXRCdWZmZXJPZmZzZXQgKz0gY291bnRcclxuICAgICAgICBtYXRlcmlhbEdyb3VwQ291bnQgKz0gY291bnRcclxuICAgICAgfVxyXG4gICAgICBuZXdHcm91cHMucHVzaCh7XHJcbiAgICAgICAgb2Zmc2V0OiBtYXRlcmlhbEdyb3VwU3RhcnQsXHJcbiAgICAgICAgY291bnQ6IG1hdGVyaWFsR3JvdXBDb3VudCxcclxuICAgICAgICBtYXRlcmlhbEluZGV4OiBtYXRlcmlhbEdyb3VwWzBdLm1hdGVyaWFsSW5kZXhcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXBzLmxlbmd0aCA9IDBcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3R3JvdXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBzLnB1c2goe1xyXG4gICAgICAgIHN0YXJ0OiBuZXdHcm91cHNbaV0ub2Zmc2V0LFxyXG4gICAgICAgIGNvdW50OiBuZXdHcm91cHNbaV0uY291bnQsXHJcbiAgICAgICAgbWF0ZXJpYWxJbmRleDogbmV3R3JvdXBzW2ldLm1hdGVyaWFsSW5kZXhcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHNvdXJjZUdyYWRpZW50QnVmZmVyLnNldCh0YXJnZXRHcmFkaWVudEJ1ZmZlciwgMClcclxuICAgIHRoaXMubWVzaC51cGRhdGVEcmF3R3JvdXBzKFxyXG4gICAgICB0YXJnZXRUcmFuc2Zvcm1CdWZmZXIsXHJcbiAgICAgIHNvdXJjZUdyYWRpZW50QnVmZmVyLFxyXG4gICAgICB0aGlzLmdldEN1cnJlbnRPYmplY3RJbmRleEJ1ZmZlcigpXHJcbiAgICApXHJcblxyXG4gICAgLyoqIFNvbHZlIGhpZGRlbiBncm91cHMgKi9cclxuICAgIGNvbnN0IGhpZGRlbkdyb3VwID0gdGhpcy5ncm91cHMuZmluZCgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKHZhbHVlLm1hdGVyaWFsSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XS52aXNpYmxlID09PSBmYWxzZVxyXG4gICAgfSlcclxuICAgIGlmIChoaWRkZW5Hcm91cCkge1xyXG4gICAgICB0aGlzLnNldFZpc2libGVSYW5nZShbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICAgICAgY291bnQ6IGhpZGRlbkdyb3VwLnN0YXJ0XHJcbiAgICAgICAgfVxyXG4gICAgICBdKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0RHJhd1JhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBzLmxlbmd0aCA9IDBcclxuICAgIHRoaXMubWF0ZXJpYWxzLmxlbmd0aCA9IDBcclxuICAgIHRoaXMuZ3JvdXBzLnB1c2goe1xyXG4gICAgICBzdGFydDogMCxcclxuICAgICAgY291bnQ6IHRoaXMucmVuZGVyVmlld3MubGVuZ3RoICogSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREUsXHJcbiAgICAgIG1hdGVyaWFsSW5kZXg6IDBcclxuICAgIH0pXHJcbiAgICB0aGlzLm1hdGVyaWFscy5wdXNoKHRoaXMuYmF0Y2hNYXRlcmlhbClcclxuICAgIHRoaXMuc2V0VmlzaWJsZVJhbmdlKFtBbGxCYXRjaFVwZGF0ZVJhbmdlXSlcclxuICAgIHRoaXMubWVzaC51cGRhdGVEcmF3R3JvdXBzKFxyXG4gICAgICB0aGlzLmdldEN1cnJlbnRUcmFuc2Zvcm1CdWZmZXIoKSxcclxuICAgICAgdGhpcy5nZXRDdXJyZW50R3JhZGllbnRCdWZmZXIoKSxcclxuICAgICAgdGhpcy5nZXRDdXJyZW50T2JqZWN0SW5kZXhCdWZmZXIoKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDdXJyZW50VHJhbnNmb3JtQnVmZmVyKCk6IEZsb2F0MzJBcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1CdWZmZXJJbmRleCAlIDIgPT09IDBcclxuICAgICAgPyB0aGlzLmluc3RhbmNlVHJhbnNmb3JtQnVmZmVyMFxyXG4gICAgICA6IHRoaXMuaW5zdGFuY2VUcmFuc2Zvcm1CdWZmZXIxXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5leHRUcmFuc2Zvcm1CdWZmZXIoKTogRmxvYXQzMkFycmF5IHtcclxuICAgIHJldHVybiArK3RoaXMudHJhbnNmb3JtQnVmZmVySW5kZXggJSAyID09PSAwXHJcbiAgICAgID8gdGhpcy5pbnN0YW5jZVRyYW5zZm9ybUJ1ZmZlcjBcclxuICAgICAgOiB0aGlzLmluc3RhbmNlVHJhbnNmb3JtQnVmZmVyMVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDdXJyZW50R3JhZGllbnRCdWZmZXIoKTogRmxvYXQzMkFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmluc3RhbmNlR3JhZGllbnRCdWZmZXJcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q3VycmVudE9iamVjdEluZGV4QnVmZmVyKCk6IEZsb2F0MzJBcnJheSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnN0YW5jZU9iamVjdElkQnVmZmVyXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYnVpbGRCYXRjaCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGJhdGNoT2JqZWN0czogQmF0Y2hPYmplY3RbXSA9IFtdXHJcbiAgICBsZXQgaW5zdGFuY2VCVkggPSBudWxsXHJcbiAgICB0aGlzLmluc3RhbmNlVHJhbnNmb3JtQnVmZmVyMCA9IG5ldyBGbG9hdDMyQXJyYXkoXHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3MubGVuZ3RoICogSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREVcclxuICAgIClcclxuICAgIHRoaXMuaW5zdGFuY2VUcmFuc2Zvcm1CdWZmZXIxID0gbmV3IEZsb2F0MzJBcnJheShcclxuICAgICAgdGhpcy5yZW5kZXJWaWV3cy5sZW5ndGggKiBJTlNUQU5DRV9UUkFOU0ZPUk1fQlVGRkVSX1NUUklERVxyXG4gICAgKVxyXG4gICAgY29uc3QgdGFyZ2V0SW5zdGFuY2VUcmFuc2Zvcm1CdWZmZXIgPSB0aGlzLmdldEN1cnJlbnRUcmFuc2Zvcm1CdWZmZXIoKVxyXG5cclxuICAgIGNvbnN0IHBvc2l0aW9ucyA9XHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3NbMF0ucmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzPy5QT1NJVElPTi5nZXRGbG9hdDMyQXJyYXkoKVxyXG4gICAgY29uc3QgaW5kaWNlc0xlbmd0aCA9XHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3NbMF0ucmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzPy5JTkRFWC5sZW5ndGggPz8gMFxyXG4gICAgY29uc3QgcG9zaXRpb25zTGVuZ3RoID1cclxuICAgICAgdGhpcy5yZW5kZXJWaWV3c1swXS5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXM/LlBPU0lUSU9OLmxlbmd0aCA/PyAwXHJcbiAgICBjb25zdCBpbmRpY2VzID1cclxuICAgICAgaW5kaWNlc0xlbmd0aCA8IDY1NTM1ICYmIHBvc2l0aW9uc0xlbmd0aCA8IDY1NTM1XHJcbiAgICAgICAgPyB0aGlzLnJlbmRlclZpZXdzWzBdLnJlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcz8uSU5ERVguZ2V0VWludDE2QXJyYXkoKVxyXG4gICAgICAgIDogdGhpcy5yZW5kZXJWaWV3c1swXS5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXM/LklOREVYLmdldFVpbnQzMkFycmF5KClcclxuICAgIGNvbnN0IGNvbG9ycyA9XHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3NbMF0ucmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzPy5DT0xPUj8uZ2V0RmxvYXQzMkFycmF5KClcclxuICAgIGNvbnN0IG5vcm1hbHMgPVxyXG4gICAgICB0aGlzLnJlbmRlclZpZXdzWzBdLnJlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcz8uTk9STUFMPy5nZXRGbG9hdDMyQXJyYXkoKVxyXG5cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5yZW5kZXJWaWV3cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAvKiogQ2F0ZXJpbmcgdG8gdHlwZXNjcmlwdFxyXG4gICAgICAgKiAgVGhlcmUgaXMgbm8gdW5uaXZlcnNlIHdoZXJlIGFuIGluc3RhbmNlZCByZW5kZXIgdmlldyBkb2VzIG5vdCBoYXZlIGEgdHJhbnNmb3JtXHJcbiAgICAgICAqICBJdCdzIGFnYWluc3QgaXQncyBkZWZpbml0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBjb25zdCBlcnZlZSA9IHRoaXMucmVuZGVyVmlld3Nba11cclxuICAgICAgaWYgKCFlcnZlZS5yZW5kZXJEYXRhLmdlb21ldHJ5LnRyYW5zZm9ybSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBJbnN0YW5jZWQgUmVuZGVyIHZpZXcgd2l0aCBpZCAke2VydmVlLnJlbmRlckRhdGEuaWR9IGhhcyBudWxsIHRyYW5zZm9ybSFgXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGVydmVlLnJlbmRlckRhdGEuZ2VvbWV0cnkudHJhbnNmb3JtLnRvQXJyYXkoXHJcbiAgICAgICAgdGFyZ2V0SW5zdGFuY2VUcmFuc2Zvcm1CdWZmZXIsXHJcbiAgICAgICAgayAqIElOU1RBTkNFX1RSQU5TRk9STV9CVUZGRVJfU1RSSURFXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5yZW5kZXJWaWV3c1trXS5zZXRCYXRjaERhdGEoXHJcbiAgICAgICAgdGhpcy5pZCxcclxuICAgICAgICBrICogSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREUsXHJcbiAgICAgICAgSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREVcclxuICAgICAgKVxyXG4gICAgICBpZiAodGhpcy5pbnN0YW5jZU9iamVjdElkQnVmZmVyKSB0aGlzLmluc3RhbmNlT2JqZWN0SWRCdWZmZXJba10gPSBrXHJcblxyXG4gICAgICBjb25zdCBiYXRjaE9iamVjdCA9IG5ldyBJbnN0YW5jZWRCYXRjaE9iamVjdCh0aGlzLnJlbmRlclZpZXdzW2tdLCBrKVxyXG4gICAgICBpZiAoIWluc3RhbmNlQlZIKSB7XHJcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKS5tYWtlVHJhbnNsYXRpb24oXHJcbiAgICAgICAgICBiYXRjaE9iamVjdC5sb2NhbE9yaWdpbi54LFxyXG4gICAgICAgICAgYmF0Y2hPYmplY3QubG9jYWxPcmlnaW4ueSxcclxuICAgICAgICAgIGJhdGNoT2JqZWN0LmxvY2FsT3JpZ2luLnpcclxuICAgICAgICApXHJcbiAgICAgICAgdHJhbnNmb3JtLmludmVydCgpXHJcblxyXG4gICAgICAgIGluc3RhbmNlQlZIID0gQWNjZWxlcmF0aW9uU3RydWN0dXJlLmJ1aWxkQlZIKFxyXG4gICAgICAgICAgaW5kaWNlcyxcclxuICAgICAgICAgIHBvc2l0aW9ucyxcclxuICAgICAgICAgIERlZmF1bHRCVkhPcHRpb25zLFxyXG4gICAgICAgICAgdHJhbnNmb3JtXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC8qKiBUaGVyZSdzIGEgYnVnIGluIHRoZSBsaWJyYXJ5IHdoZXJlIGl0IHJlcG9ydHMgaW5jb3JyZWN0IGJvdW5kcyB1bnRpbCBhIHJlZml0ICovXHJcbiAgICAgICAgaW5zdGFuY2VCVkgucmVmaXQoKVxyXG4gICAgICB9XHJcbiAgICAgIGJhdGNoT2JqZWN0LmJ1aWxkQWNjZWxlcmF0aW9uU3RydWN0dXJlKGluc3RhbmNlQlZIKVxyXG4gICAgICBiYXRjaE9iamVjdHMucHVzaChiYXRjaE9iamVjdClcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ2F0ZXJpbmcgdG8gdHlwZXNjcmlwdFxyXG4gICAgICogIFRoZXJlIGlzIG5vIHVubml2ZXJzZSB3aGVyZSBpbmRpY2VzIG9yIHBvc2l0aW9ucyBhcmUgdW5kZWZpbmVkIGF0IHRoaXMgcG9pbnRcclxuICAgICAqL1xyXG4gICAgaWYgKCFpbmRpY2VzIHx8ICFwb3NpdGlvbnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYnVpbGQgYmF0Y2ggJHt0aGlzLmlkfS4gVW5kZWZpbmVkIGluZGljZXMgb3IgcG9zaXRpb25zYClcclxuICAgIH1cclxuICAgIHRoaXMuZ2VvbWV0cnkgPSB0aGlzLm1ha2VJbnN0YW5jZWRNZXNoR2VvbWV0cnkoaW5kaWNlcywgcG9zaXRpb25zLCBub3JtYWxzLCBjb2xvcnMpXHJcblxyXG4gICAgdGhpcy5tZXNoID0gbmV3IFNwZWNrbGVJbnN0YW5jZWRNZXNoKHRoaXMuZ2VvbWV0cnkpXHJcbiAgICB0aGlzLm1lc2guc2V0QmF0Y2hPYmplY3RzKGJhdGNoT2JqZWN0cylcclxuICAgIHRoaXMubWVzaC5zZXRCYXRjaE1hdGVyaWFsKHRoaXMuYmF0Y2hNYXRlcmlhbClcclxuICAgIHRoaXMubWVzaC5idWlsZFRBUygpXHJcblxyXG4gICAgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCA9IHRoaXMubWVzaC5UQVMuZ2V0Qm91bmRpbmdCb3gobmV3IEJveDMoKSlcclxuICAgIHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgPSB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94LmdldEJvdW5kaW5nU3BoZXJlKFxyXG4gICAgICBuZXcgU3BoZXJlKClcclxuICAgIClcclxuXHJcbiAgICB0aGlzLm1lc2gudXVpZCA9IHRoaXMuaWRcclxuICAgIHRoaXMubWVzaC5sYXllcnMuc2V0KE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNIKVxyXG4gICAgdGhpcy5tZXNoLmZydXN0dW1DdWxsZWQgPSBmYWxzZVxyXG5cclxuICAgIHRoaXMuZ3JvdXBzLnB1c2goe1xyXG4gICAgICBzdGFydDogMCxcclxuICAgICAgY291bnQ6IHRoaXMucmVuZGVyVmlld3MubGVuZ3RoICogSU5TVEFOQ0VfVFJBTlNGT1JNX0JVRkZFUl9TVFJJREUsXHJcbiAgICAgIG1hdGVyaWFsSW5kZXg6IDBcclxuICAgIH0pXHJcbiAgICB0aGlzLm1lc2gudXBkYXRlRHJhd0dyb3VwcyhcclxuICAgICAgdGhpcy5nZXRDdXJyZW50VHJhbnNmb3JtQnVmZmVyKCksXHJcbiAgICAgIHRoaXMuZ2V0Q3VycmVudEdyYWRpZW50QnVmZmVyKCksXHJcbiAgICAgIHRoaXMuZ2V0Q3VycmVudE9iamVjdEluZGV4QnVmZmVyKClcclxuICAgIClcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJWaWV3KGluZGV4OiBudW1iZXIpOiBOb2RlUmVuZGVyVmlldyB8IG51bGwge1xyXG4gICAgaW5kZXhcclxuICAgIExvZ2dlci53YXJuKCdEZXByZWNhdGVkISBVc2UgSW5zdGFuY2VkQmF0Y2hPYmplY3QnKVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRNYXRlcmlhbEF0SW5kZXgoaW5kZXg6IG51bWJlcik6IE1hdGVyaWFsIHwgbnVsbCB7XHJcbiAgICBpbmRleFxyXG4gICAgTG9nZ2VyLndhcm4oJ0RlcHJlY2F0ZWQhIFVzZSBJbnN0YW5jZWRCYXRjaE9iamVjdCcpXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE1hdGVyaWFsKHJ2OiBOb2RlUmVuZGVyVmlldyk6IE1hdGVyaWFsIHwgbnVsbCB7XHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgcnYuYmF0Y2hTdGFydCA+PSB2YWx1ZS5zdGFydCAmJlxyXG4gICAgICAgIHJ2LmJhdGNoU3RhcnQgKyBydi5iYXRjaENvdW50IDw9IHZhbHVlLmNvdW50ICsgdmFsdWUuc3RhcnRcclxuICAgICAgKVxyXG4gICAgfSlcclxuICAgIGlmICghZ3JvdXApIHtcclxuICAgICAgTG9nZ2VyLndhcm4oYENvdWxkIG5vdCBnZXQgbWF0ZXJpYWwgZm9yICR7cnYucmVuZGVyRGF0YS5pZH1gKVxyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzW2dyb3VwLm1hdGVyaWFsSW5kZXhdXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VJbnN0YW5jZWRNZXNoR2VvbWV0cnkoXHJcbiAgICBpbmRpY2VzOiBVaW50MzJBcnJheSB8IFVpbnQxNkFycmF5LFxyXG4gICAgcG9zaXRpb246IEZsb2F0MzJBcnJheSxcclxuICAgIG5vcm1hbD86IEZsb2F0MzJBcnJheSxcclxuICAgIGNvbG9yPzogRmxvYXQzMkFycmF5XHJcbiAgKTogQnVmZmVyR2VvbWV0cnkge1xyXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKVxyXG4gICAgaWYgKHBvc2l0aW9uKSB7XHJcbiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbiwgMykpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbG9yKSB7XHJcbiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnY29sb3InLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShjb2xvciwgMykpXHJcbiAgICB9XHJcbiAgICBsZXQgaW5kZXhCdWZmZXIgPSBudWxsXHJcbiAgICBpZiAocG9zaXRpb24ubGVuZ3RoID49IDY1NTM1IHx8IGluZGljZXMubGVuZ3RoID49IDY1NTM1KSB7XHJcbiAgICAgIGluZGV4QnVmZmVyID0gbmV3IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZShpbmRpY2VzLCAxKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5kZXhCdWZmZXIgPSBuZXcgVWludDE2QnVmZmVyQXR0cmlidXRlKGluZGljZXMsIDEpXHJcbiAgICB9XHJcbiAgICBnZW9tZXRyeS5zZXRJbmRleChpbmRleEJ1ZmZlcilcclxuXHJcbiAgICB0aGlzLmluc3RhbmNlR3JhZGllbnRCdWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucmVuZGVyVmlld3MubGVuZ3RoKVxyXG5cclxuICAgIGlmIChub3JtYWwpIHtcclxuICAgICAgZ2VvbWV0cnlcclxuICAgICAgICAuc2V0QXR0cmlidXRlKCdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShub3JtYWwsIDMpKVxyXG4gICAgICAgIC5ub3JtYWxpemVOb3JtYWxzKClcclxuICAgIH0gZWxzZSBHZW9tZXRyeS5jb21wdXRlVmVydGV4Tm9ybWFscyhnZW9tZXRyeSwgcG9zaXRpb24pXHJcblxyXG4gICAgcmV0dXJuIGdlb21ldHJ5XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUdyYWRpZW50SW5kZXhCdWZmZXJEYXRhKFxyXG4gICAgc3RhcnQ6IG51bWJlcixcclxuICAgIGVuZDogbnVtYmVyLFxyXG4gICAgdmFsdWU6IG51bWJlclxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0Q3VycmVudEdyYWRpZW50QnVmZmVyKClcclxuICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA8IGVuZDsgaysrKSB7XHJcbiAgICAgIGRhdGFba10gPSB2YWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHB1cmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJWaWV3cy5sZW5ndGggPSAwXHJcbiAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKVxyXG4gICAgdGhpcy5iYXRjaE1hdGVyaWFsLmRpc3Bvc2UoKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBNYXRlcmlhbCwgT2JqZWN0M0QsIEJ1ZmZlckdlb21ldHJ5LCBCdWZmZXJBdHRyaWJ1dGUsIEJveDMgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgTm9kZVJlbmRlclZpZXcgfSBmcm9tICcuLi8uLi9pbmRleC5qcydcclxuaW1wb3J0IHtcclxuICBBbGxCYXRjaFVwZGF0ZVJhbmdlLFxyXG4gIHR5cGUgQmF0Y2gsXHJcbiAgdHlwZSBCYXRjaFVwZGF0ZVJhbmdlLFxyXG4gIEdlb21ldHJ5VHlwZSxcclxuICBpc05vbmVCYXRjaFVwZGF0ZVJhbmdlLFxyXG4gIE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbn0gZnJvbSAnLi9CYXRjaC5qcydcclxuaW1wb3J0IHsgdHlwZSBEcmF3R3JvdXAgfSBmcm9tICcuL0JhdGNoLmpzJ1xyXG5pbXBvcnQgTWF0ZXJpYWxzIGZyb20gJy4uL21hdGVyaWFscy9NYXRlcmlhbHMuanMnXHJcbmltcG9ydCBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwgZnJvbSAnLi4vbWF0ZXJpYWxzL1NwZWNrbGVTdGFuZGFyZENvbG9yZWRNYXRlcmlhbC5qcydcclxuaW1wb3J0IFNwZWNrbGVQb2ludENvbG91cmVkTWF0ZXJpYWwgZnJvbSAnLi4vbWF0ZXJpYWxzL1NwZWNrbGVQb2ludENvbG91cmVkTWF0ZXJpYWwuanMnXHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUHJpbWl0aXZlPFxyXG4gIFRHZW9tZXRyeSBleHRlbmRzIEJ1ZmZlckdlb21ldHJ5ID0gQnVmZmVyR2VvbWV0cnksXHJcbiAgVE1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwgfCBNYXRlcmlhbFtdID0gTWF0ZXJpYWwgfCBNYXRlcmlhbFtdXHJcbj4gZXh0ZW5kcyBPYmplY3QzRCB7XHJcbiAgZ2VvbWV0cnk6IFRHZW9tZXRyeVxyXG4gIG1hdGVyaWFsOiBUTWF0ZXJpYWxcclxuICB2aXNpYmxlOiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcmltaXRpdmVCYXRjaCBpbXBsZW1lbnRzIEJhdGNoIHtcclxuICBwdWJsaWMgaWQ6IHN0cmluZ1xyXG4gIHB1YmxpYyBzdWJ0cmVlSWQ6IHN0cmluZ1xyXG4gIHB1YmxpYyByZW5kZXJWaWV3czogTm9kZVJlbmRlclZpZXdbXVxyXG4gIHB1YmxpYyBiYXRjaE1hdGVyaWFsOiBNYXRlcmlhbFxyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcHJpbWl0aXZlOiBQcmltaXRpdmVcclxuICBwcm90ZWN0ZWQgZ3JhZGllbnRJbmRleEJ1ZmZlcjogQnVmZmVyQXR0cmlidXRlXHJcbiAgcHJvdGVjdGVkIG5lZWRzU2h1ZmZsZTogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIGFic3RyYWN0IGdldCBnZW9tZXRyeVR5cGUoKTogR2VvbWV0cnlUeXBlXHJcbiAgYWJzdHJhY3QgZ2V0IGJvdW5kcygpOiBCb3gzXHJcbiAgYWJzdHJhY3QgZ2V0IG1pbkRyYXdDYWxscygpOiBudW1iZXJcclxuICBhYnN0cmFjdCBnZXQgdHJpQ291bnQoKTogbnVtYmVyXHJcbiAgYWJzdHJhY3QgZ2V0IHBvaW50Q291bnQoKTogbnVtYmVyXHJcbiAgYWJzdHJhY3QgZ2V0IGxpbmVDb3VudCgpOiBudW1iZXJcclxuXHJcbiAgcHVibGljIGdldCBtYXRlcmlhbHMoKTogTWF0ZXJpYWxbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmltaXRpdmUubWF0ZXJpYWwgYXMgTWF0ZXJpYWxbXVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBncm91cHMoKTogRHJhd0dyb3VwW10ge1xyXG4gICAgLyoqIFdlIGFsd2F5cyB3cml0ZSB0byBnZW9tdHJ5Lmdyb3VwcyB2aWEgdGhlIHNldCBhY2Nlc3NvclxyXG4gICAgICogIHdoaWNoIHRha2VzIGEgRHJhd0dyb3VwW10sIHNvIGdlb21ldHJ5Lmdyb3VwcyB3aWxsIGFsd2F5c1xyXG4gICAgICogIGJlIGFuIGFycmF5IG9mIERyYXdHcm91cC5cclxuICAgICAqICBOb3QgdG8gbWVudGlvbiB0aGF0ICoqYWxsIG91ciBkcmF3IGdyb3VwZCBhcmUgRHJhd0dyb3VwIGJlY2F1c2VcclxuICAgICAqICB0aGV5IGFsd2F5cyBoYXZlIGEgbWF0ZXJpYWxJbmRleCBkZWZpbmVkKiogYnkgZGVzaWduIGFuZCBjb252ZW50aW9uISEhXHJcbiAgICAgKi9cclxuICAgIHJldHVybiB0aGlzLnByaW1pdGl2ZS5nZW9tZXRyeS5ncm91cHMgYXMgRHJhd0dyb3VwW11cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZ3JvdXBzKHZhbHVlOiBEcmF3R3JvdXBbXSkge1xyXG4gICAgdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuZ3JvdXBzID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVuZGVyT2JqZWN0KCk6IE9iamVjdDNEIHtcclxuICAgIHJldHVybiB0aGlzLnByaW1pdGl2ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkcmF3Q2FsbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3Vwcy5sZW5ndGhcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmVydENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuaW5kZXg/LmNvdW50IHx8IDBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRCYXRjaE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5iYXRjaE1hdGVyaWFsID0gbWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblVwZGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLm5lZWRzU2h1ZmZsZSkge1xyXG4gICAgICB0aGlzLnNodWZmbGVEcmF3R3JvdXBzKClcclxuICAgICAgdGhpcy5uZWVkc1NodWZmbGUgPSBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpc2libGVSYW5nZShyYW5nZXM6IEJhdGNoVXBkYXRlUmFuZ2VbXSkge1xyXG4gICAgLyoqIEVudGlyZSBiYXRjaCBuZWVkcyB0byBOT1QgYmUgZHJhd24gKi9cclxuICAgIGlmIChyYW5nZXMubGVuZ3RoID09PSAxICYmIGlzTm9uZUJhdGNoVXBkYXRlUmFuZ2UocmFuZ2VzWzBdKSkge1xyXG4gICAgICB0aGlzLnByaW1pdGl2ZS5nZW9tZXRyeS5zZXREcmF3UmFuZ2UoMCwgMClcclxuICAgICAgLyoqIFdlIHVuc2V0IHRoZSAndmlzaWJsZScgZmxhZywgb3RoZXJ3aXNlIHRocmVlLmpzIHdpbGwgc3RpbGwgcnVuIHBvaW50bGVzcyBidWZmZXIgYmluZGluZyBjb21tYW5kcyovXHJcbiAgICAgIHRoaXMucHJpbWl0aXZlLnZpc2libGUgPSBmYWxzZVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIC8qKiBFbnRpcmUgYmF0Y2ggbmVlZHMgdG8gQkUgZHJhd24gKi9cclxuICAgIGlmIChyYW5nZXMubGVuZ3RoID09PSAxICYmIHJhbmdlc1swXSA9PT0gQWxsQmF0Y2hVcGRhdGVSYW5nZSkge1xyXG4gICAgICB0aGlzLnByaW1pdGl2ZS5nZW9tZXRyeS5zZXREcmF3UmFuZ2UoMCwgdGhpcy5nZXRDb3VudCgpKVxyXG4gICAgICB0aGlzLnByaW1pdGl2ZS52aXNpYmxlID0gdHJ1ZVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICAvKiogUGFydHMgb2YgdGhlIGJhdGNoIG5lZWQgdG8gYmUgdmlzaWJsZS4gV2UgZ2V0IHRoZSBtaW4vbWF4IG9mZnNldCBhbmQgdG90YWwgY291bnQgKi9cclxuICAgIGxldCBtaW5PZmZzZXQgPSBJbmZpbml0eVxyXG4gICAgbGV0IG1heE9mZnNldCA9IDBcclxuICAgIHJhbmdlcy5mb3JFYWNoKChyYW5nZSkgPT4ge1xyXG4gICAgICBtaW5PZmZzZXQgPSBNYXRoLm1pbihtaW5PZmZzZXQsIHJhbmdlLm9mZnNldClcclxuICAgICAgbWF4T2Zmc2V0ID0gTWF0aC5tYXgobWF4T2Zmc2V0LCByYW5nZS5vZmZzZXQpXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IG9mZnNldCA9IHJhbmdlcy5maW5kKCh2YWwpID0+IHZhbC5vZmZzZXQgPT09IG1heE9mZnNldClcclxuICAgIHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LnNldERyYXdSYW5nZShcclxuICAgICAgbWluT2Zmc2V0LFxyXG4gICAgICBtYXhPZmZzZXQgLSBtaW5PZmZzZXQgKyAob2Zmc2V0ID8gb2Zmc2V0LmNvdW50IDogMClcclxuICAgIClcclxuICAgIHRoaXMucHJpbWl0aXZlLnZpc2libGUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VmlzaWJsZVJhbmdlKCk6IEJhdGNoVXBkYXRlUmFuZ2Uge1xyXG4gICAgLyoqIEVudGlyZSBiYXRjaCBpcyB2aXNpYmxlICovXHJcbiAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID09PSAxICYmIHRoaXMucHJpbWl0aXZlLnZpc2libGUpIHJldHVybiBBbGxCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgICAvKiogRW50aXJlIGJhdGNoIGlzIGhpZGRlbiAqL1xyXG4gICAgaWYgKCF0aGlzLnByaW1pdGl2ZS52aXNpYmxlKSByZXR1cm4gTm9uZUJhdGNoVXBkYXRlUmFuZ2VcclxuICAgIC8qKiBQYXJ0cyBvZiB0aGUgYmF0Y2ggYXJlIHZpc2libGUgKi9cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG9mZnNldDogdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuZHJhd1JhbmdlLnN0YXJ0LFxyXG4gICAgICBjb3VudDogdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuZHJhd1JhbmdlLmNvdW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T3BhcXVlKCk6IEJhdGNoVXBkYXRlUmFuZ2Uge1xyXG4gICAgLyoqIElmIHRoZXJlIGlzIGFueSB0cmFuc3BhcmVudCBvciBoaWRkZW4gZ3JvdXAgcmV0dXJuIHRoZSB1cGRhdGUgcmFuZ2UgdXAgdG8gaXQncyBvZmZzZXQgKi9cclxuICAgIGNvbnN0IHRyYW5zcGFyZW50T3JIaWRkZW5Hcm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS5tYXRlcmlhbEluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIE1hdGVyaWFscy5pc1RyYW5zcGFyZW50KHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdKSB8fFxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdLnZpc2libGUgPT09IGZhbHNlXHJcbiAgICAgIClcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRyYW5zcGFyZW50T3JIaWRkZW5Hcm91cCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICBjb3VudDogdHJhbnNwYXJlbnRPckhpZGRlbkdyb3VwLnN0YXJ0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKiBFbnRpcmUgYmF0Y2ggaXMgb3BhcXVlICovXHJcbiAgICByZXR1cm4gQWxsQmF0Y2hVcGRhdGVSYW5nZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERlcHRoKCk6IEJhdGNoVXBkYXRlUmFuZ2Uge1xyXG4gICAgLyoqIElmIHRoZXJlIGlzIGFueSB0cmFuc3BhcmVudCBvciBoaWRkZW4gZ3JvdXAgcmV0dXJuIHRoZSB1cGRhdGUgcmFuZ2UgdXAgdG8gaXQncyBvZmZzZXQgKi9cclxuICAgIGNvbnN0IHRyYW5zcGFyZW50T3JIaWRkZW5Hcm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS5tYXRlcmlhbEluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIE1hdGVyaWFscy5pc1RyYW5zcGFyZW50KHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdKSB8fFxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdLnZpc2libGUgPT09IGZhbHNlIHx8XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNbdmFsdWUubWF0ZXJpYWxJbmRleF0uY29sb3JXcml0ZSA9PT0gZmFsc2VcclxuICAgICAgKVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodHJhbnNwYXJlbnRPckhpZGRlbkdyb3VwKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICAgIGNvdW50OiB0cmFuc3BhcmVudE9ySGlkZGVuR3JvdXAuc3RhcnRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqIEVudGlyZSBiYXRjaCBpcyBvcGFxdWUgKi9cclxuICAgIHJldHVybiBBbGxCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VHJhbnNwYXJlbnQoKTogQmF0Y2hVcGRhdGVSYW5nZSB7XHJcbiAgICAvKiogTG9vayBmb3IgYSB0cmFuc3BhcmVudCBncm91cCAqL1xyXG4gICAgY29uc3QgdHJhbnNwYXJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS5tYXRlcmlhbEluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxyXG4gICAgICByZXR1cm4gTWF0ZXJpYWxzLmlzVHJhbnNwYXJlbnQodGhpcy5tYXRlcmlhbHNbdmFsdWUubWF0ZXJpYWxJbmRleF0pXHJcbiAgICB9KVxyXG4gICAgLyoqIExvb2sgZm9yIGEgaGlkZGVuIGdyb3VwICovXHJcbiAgICBjb25zdCBoaWRkZW5Hcm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS5tYXRlcmlhbEluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5tYXRlcmlhbHNbdmFsdWUubWF0ZXJpYWxJbmRleF0udmlzaWJsZSA9PT0gZmFsc2VcclxuICAgIH0pXHJcbiAgICAvKiogSWYgdGhlcmUgaXMgYSB0cmFuc3BhcmVudCBncm91cCByZXR1cm4gaXQncyByYW5nZSAqL1xyXG4gICAgaWYgKHRyYW5zcGFyZW50R3JvdXApIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBvZmZzZXQ6IHRyYW5zcGFyZW50R3JvdXAuc3RhcnQsXHJcbiAgICAgICAgY291bnQ6XHJcbiAgICAgICAgICBoaWRkZW5Hcm91cCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaGlkZGVuR3JvdXAuc3RhcnQgLSB0cmFuc3BhcmVudEdyb3VwLnN0YXJ0XHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb3VudCgpIC0gdHJhbnNwYXJlbnRHcm91cC5zdGFydFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiogRW50aXJlIGJhdGNoIGlzIG5vdCB0cmFuc3BhcmVudCAqL1xyXG4gICAgcmV0dXJuIE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U3RlbmNpbCgpOiBCYXRjaFVwZGF0ZVJhbmdlIHtcclxuICAgIC8qKiBJZiB0aGVyZSBpcyBhIHNpbmdsZSBncm91cCBhbmQgaXQncyBtYXRlcmlhbCB3cml0ZXMgdG8gc3RlbmNpbCwgcmV0dXJuIGFsbCAqL1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBpZiAodGhpcy5tYXRlcmlhbHNbMF0uc3RlbmNpbFdyaXRlID09PSB0cnVlKSByZXR1cm4gQWxsQmF0Y2hVcGRhdGVSYW5nZVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RlbmNpbEdyb3VwID0gdGhpcy5ncm91cHMuZmluZCgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKHZhbHVlLm1hdGVyaWFsSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XS5zdGVuY2lsV3JpdGUgPT09IHRydWVcclxuICAgIH0pXHJcbiAgICBpZiAoc3RlbmNpbEdyb3VwKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgb2Zmc2V0OiBzdGVuY2lsR3JvdXAuc3RhcnQsXHJcbiAgICAgICAgY291bnQ6IHN0ZW5jaWxHcm91cC5jb3VudFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiogTm8gc3RlbmNpbCBncm91cCAqL1xyXG4gICAgcmV0dXJuIE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QmF0Y2hCdWZmZXJzKHJhbmdlczogQmF0Y2hVcGRhdGVSYW5nZVtdKTogdm9pZCB7XHJcbiAgICBsZXQgbWluR3JhZGllbnRJbmRleCA9IEluZmluaXR5XHJcbiAgICBsZXQgbWF4R3JhZGllbnRJbmRleCA9IDBcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcmFuZ2VzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gcmFuZ2VzW2tdXHJcbiAgICAgIGlmIChyYW5nZS5tYXRlcmlhbE9wdGlvbnMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByYW5nZS5tYXRlcmlhbE9wdGlvbnMucmFtcEluZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHJhbmdlLm1hdGVyaWFsT3B0aW9ucy5yYW1wV2lkdGggIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSByYW5nZXNba10ub2Zmc2V0XHJcbiAgICAgICAgICBjb25zdCBsZW4gPSByYW5nZXNba10ub2Zmc2V0ICsgcmFuZ2VzW2tdLmNvdW50XHJcbiAgICAgICAgICAvKiogVGhlIHJhbXAgaW5kaWNlcyBzcGVjaWZ5IHRoZSAqYmVnaW5pbmcqIG9mIGVhY2ggcmFtcCBjb2xvci4gV2hlbiBzYW1wbGluZyB3aXRoIE5lYXJlc3QgZmlsdGVyIChzaW5jZSB3ZSBkb24ndCB3YW50IGZpbHRlcmluZylcclxuICAgICAgICAgICAqICB3ZSdsbCBhbHdheXMgYmUgc2FtcGxpbmcgcmlnaHQgYXQgdGhlIGVkZ2UgYmV0d2VlbiB0ZXhlbHMuIE1vc3QgR1BVcyB3aWxsIHNhbXBsZSBjb25zaXN0ZW50bHksIGJ1dCBzb21lIHdvbid0IGFuZCB3ZSBlbmQgdXAgd2l0aFxyXG4gICAgICAgICAgICogIGEgdG9uIG9mIGFydGlmYWN0cy4gVG8gYXZvaWQgdGhpcywgd2UgYXJlIHNoaWZ0aW5nIHRoZSBzYW1wbGluZyBpbmRpY2VzIHNvIHRoZXkncmUgcmlnaHQgb24gdGhlIGNlbnRlciBvZiBlYWNoIHRleGVsLCBzbyBubyBpbmNvbnNpc3RlbnRcclxuICAgICAgICAgICAqICBzYW1wbGluZyBjYW4gb2NjdXIuXHJcbiAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICBjb25zdCBzaGlmdGVkSW5kZXggPVxyXG4gICAgICAgICAgICByYW5nZS5tYXRlcmlhbE9wdGlvbnMucmFtcEluZGV4ICsgMC41IC8gcmFuZ2UubWF0ZXJpYWxPcHRpb25zLnJhbXBXaWR0aFxyXG4gICAgICAgICAgY29uc3QgbWluTWF4SW5kaWNlcyA9IHRoaXMudXBkYXRlR3JhZGllbnRJbmRleEJ1ZmZlckRhdGEoXHJcbiAgICAgICAgICAgIHN0YXJ0LFxyXG4gICAgICAgICAgICByYW5nZS5jb3VudCA9PT0gSW5maW5pdHlcclxuICAgICAgICAgICAgICA/IHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2dyYWRpZW50SW5kZXgnXS5hcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgICA6IGxlbixcclxuICAgICAgICAgICAgc2hpZnRlZEluZGV4XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBtaW5HcmFkaWVudEluZGV4ID0gTWF0aC5taW4obWluR3JhZGllbnRJbmRleCwgbWluTWF4SW5kaWNlcy5taW5JbmRleClcclxuICAgICAgICAgIG1heEdyYWRpZW50SW5kZXggPSBNYXRoLm1heChtYXhHcmFkaWVudEluZGV4LCBtaW5NYXhJbmRpY2VzLm1heEluZGV4KVxyXG4gICAgICAgIH1cclxuICAgICAgICAvKiogV2UgbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmUgaGVyZSwgYmVjYXVzZSBlYWNoIGJhdGNoIHVzZXMgaXQncyBvd24gY2xvbmUgZm9yIGFueSBtYXRlcmlhbCB3ZSB1c2Ugb24gaXRcclxuICAgICAgICAgKiAgYmVjYXVzZSBvdGhlcndpc2UgdGhyZWUuanMgd29uJ3QgcHJvcGVybHkgdXBkYXRlIG91ciBjdXN0b20gdW5pZm9ybXNcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAocmFuZ2UubWF0ZXJpYWxPcHRpb25zLnJhbXBUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgcmFuZ2UubWF0ZXJpYWwgaW5zdGFuY2VvZiBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWwgfHxcclxuICAgICAgICAgICAgcmFuZ2UubWF0ZXJpYWwgaW5zdGFuY2VvZiBTcGVja2xlUG9pbnRDb2xvdXJlZE1hdGVyaWFsXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgcmFuZ2UubWF0ZXJpYWwuc2V0R3JhZGllbnRUZXh0dXJlKHJhbmdlLm1hdGVyaWFsT3B0aW9ucy5yYW1wVGV4dHVyZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChtaW5HcmFkaWVudEluZGV4IDwgSW5maW5pdHkgJiYgbWF4R3JhZGllbnRJbmRleCA+IDApXHJcbiAgICAgIHRoaXMudXBkYXRlR3JhZGllbnRJbmRleEJ1ZmZlcigpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY2xlYW5NYXRlcmlhbHMoKSB7XHJcbiAgICBjb25zdCBtYXRlcmlhbHNJblVzZSA9IFtcclxuICAgICAgLi4uQXJyYXkuZnJvbShcclxuICAgICAgICBuZXcgU2V0KFxyXG4gICAgICAgICAgdGhpcy5ncm91cHMubWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubWF0ZXJpYWxJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgIF1cclxuICAgIGxldCBrID0gMFxyXG4gICAgd2hpbGUgKHRoaXMubWF0ZXJpYWxzLmxlbmd0aCA+IG1hdGVyaWFsc0luVXNlLmxlbmd0aCkge1xyXG4gICAgICBpZiAoIW1hdGVyaWFsc0luVXNlLmluY2x1ZGVzKHRoaXMubWF0ZXJpYWxzW2tdKSkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzLnNwbGljZShrLCAxKVxyXG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKHZhbHVlOiBEcmF3R3JvdXApID0+IHtcclxuICAgICAgICAgIGlmICh2YWx1ZS5tYXRlcmlhbEluZGV4ID09PSB1bmRlZmluZWQpIHJldHVyblxyXG4gICAgICAgICAgaWYgKHZhbHVlLm1hdGVyaWFsSW5kZXggPiBrKSB2YWx1ZS5tYXRlcmlhbEluZGV4LS1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGsgPSAwXHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBrKytcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRDdXJyZW50SW5kZXhCdWZmZXIoKTogQnVmZmVyQXR0cmlidXRlXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldE5leHRJbmRleEJ1ZmZlcigpOiBCdWZmZXJBdHRyaWJ1dGVcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2h1ZmZsZU1hdGVyaWFsT3JkZXIoYTogRHJhd0dyb3VwLCBiOiBEcmF3R3JvdXApOiBudW1iZXJcclxuXHJcbiAgcHJpdmF0ZSBzaHVmZmxlRHJhd0dyb3VwcygpIHtcclxuICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLnNsaWNlKClcclxuICAgIGdyb3Vwcy5zb3J0KHRoaXMuc2h1ZmZsZU1hdGVyaWFsT3JkZXIuYmluZCh0aGlzKSlcclxuXHJcbiAgICBjb25zdCBtYXRlcmlhbE9yZGVyOiBBcnJheTxudW1iZXI+ID0gW11cclxuICAgIGdyb3Vwcy5yZWR1Y2UoKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkgPT4ge1xyXG4gICAgICBpZiAoY3VycmVudFZhbHVlLm1hdGVyaWFsSW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChwcmV2aW91c1ZhbHVlLmluZGV4T2YoY3VycmVudFZhbHVlLm1hdGVyaWFsSW5kZXgpID09PSAtMSkge1xyXG4gICAgICAgICAgcHJldmlvdXNWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZS5tYXRlcmlhbEluZGV4KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcHJldmlvdXNWYWx1ZVxyXG4gICAgfSwgbWF0ZXJpYWxPcmRlcilcclxuXHJcbiAgICBjb25zdCBncm91cGVkID0gW11cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWF0ZXJpYWxPcmRlci5sZW5ndGg7IGsrKykge1xyXG4gICAgICBncm91cGVkLnB1c2goXHJcbiAgICAgICAgZ3JvdXBzLmZpbHRlcigodmFsKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsLm1hdGVyaWFsSW5kZXggPT09IG1hdGVyaWFsT3JkZXJba11cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc291cmNlSUJPOiBCdWZmZXJBdHRyaWJ1dGUgPSB0aGlzLmdldEN1cnJlbnRJbmRleEJ1ZmZlcigpXHJcbiAgICBjb25zdCB0YXJnZXRJQk86IEJ1ZmZlckF0dHJpYnV0ZSA9IHRoaXMuZ2V0TmV4dEluZGV4QnVmZmVyKClcclxuICAgIGNvbnN0IHNvdXJjZUlCT0RhdGE6IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkgPSBzb3VyY2VJQk8uYXJyYXkgYXNcclxuICAgICAgfCBVaW50MTZBcnJheVxyXG4gICAgICB8IFVpbnQzMkFycmF5XHJcbiAgICBjb25zdCB0YXJnZXRJQk9EYXRhOiBVaW50MTZBcnJheSB8IFVpbnQzMkFycmF5ID0gdGFyZ2V0SUJPLmFycmF5IGFzXHJcbiAgICAgIHwgVWludDE2QXJyYXlcclxuICAgICAgfCBVaW50MzJBcnJheVxyXG4gICAgY29uc3QgbmV3R3JvdXBzID0gW11cclxuICAgIGNvbnN0IHNjcmF0Y2hSdnMgPSB0aGlzLnJlbmRlclZpZXdzLnNsaWNlKClcclxuICAgIHNjcmF0Y2hSdnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICByZXR1cm4gYS5iYXRjaFN0YXJ0IC0gYi5iYXRjaFN0YXJ0XHJcbiAgICB9KVxyXG4gICAgbGV0IHRhcmdldElCT09mZnNldCA9IDBcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZ3JvdXBlZC5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBtYXRlcmlhbEdyb3VwID0gZ3JvdXBlZFtrXVxyXG4gICAgICBjb25zdCBtYXRlcmlhbEdyb3VwU3RhcnQgPSB0YXJnZXRJQk9PZmZzZXRcclxuICAgICAgbGV0IG1hdGVyaWFsR3JvdXBDb3VudCA9IDBcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAobWF0ZXJpYWxHcm91cCBhcyBbXSkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IG1hdGVyaWFsR3JvdXBbaV0uc3RhcnRcclxuICAgICAgICBjb25zdCBjb3VudCA9IG1hdGVyaWFsR3JvdXBbaV0uY291bnRcclxuICAgICAgICBjb25zdCBzdWJBcnJheSA9IHNvdXJjZUlCT0RhdGEuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgY291bnQpXHJcbiAgICAgICAgdGFyZ2V0SUJPRGF0YS5zZXQoc3ViQXJyYXksIHRhcmdldElCT09mZnNldClcclxuICAgICAgICBsZXQgcnZUcmlzQ291bnQgPSAwXHJcbiAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBzY3JhdGNoUnZzLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHNjcmF0Y2hSdnNbbV0uYmF0Y2hTdGFydCA+PSBzdGFydCAmJlxyXG4gICAgICAgICAgICBzY3JhdGNoUnZzW21dLmJhdGNoRW5kIDw9IHN0YXJ0ICsgY291bnRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBzY3JhdGNoUnZzW21dLnNldEJhdGNoRGF0YShcclxuICAgICAgICAgICAgICB0aGlzLmlkLFxyXG4gICAgICAgICAgICAgIHRhcmdldElCT09mZnNldCArIHJ2VHJpc0NvdW50LFxyXG4gICAgICAgICAgICAgIHNjcmF0Y2hSdnNbbV0uYmF0Y2hDb3VudFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHJ2VHJpc0NvdW50ICs9IHNjcmF0Y2hSdnNbbV0uYmF0Y2hDb3VudFxyXG4gICAgICAgICAgICBzY3JhdGNoUnZzLnNwbGljZShtLCAxKVxyXG4gICAgICAgICAgICBtLS1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGFyZ2V0SUJPT2Zmc2V0ICs9IGNvdW50XHJcbiAgICAgICAgbWF0ZXJpYWxHcm91cENvdW50ICs9IGNvdW50XHJcbiAgICAgIH1cclxuICAgICAgbmV3R3JvdXBzLnB1c2goe1xyXG4gICAgICAgIG9mZnNldDogbWF0ZXJpYWxHcm91cFN0YXJ0LFxyXG4gICAgICAgIGNvdW50OiBtYXRlcmlhbEdyb3VwQ291bnQsXHJcbiAgICAgICAgbWF0ZXJpYWxJbmRleDogbWF0ZXJpYWxHcm91cFswXS5tYXRlcmlhbEluZGV4XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmdyb3VwcyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0dyb3Vwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnByaW1pdGl2ZS5nZW9tZXRyeS5hZGRHcm91cChcclxuICAgICAgICBuZXdHcm91cHNbaV0ub2Zmc2V0LFxyXG4gICAgICAgIG5ld0dyb3Vwc1tpXS5jb3VudCxcclxuICAgICAgICBuZXdHcm91cHNbaV0ubWF0ZXJpYWxJbmRleFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuc2V0SW5kZXgodGFyZ2V0SUJPKVxyXG4gICAgLyoqIENhdGVyaW5nIHRvIHR5cGVzY3JpcHRcclxuICAgICAqICBUaGUgbGluZSBhYm92ZSBsaXRlcmFsbHkgbWFrZXMgc3VyZSB0aGUgaW5kZXggaXMgc2V0LiBBYnN1cmRcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmluZGV4KSB0aGlzLnByaW1pdGl2ZS5nZW9tZXRyeS5pbmRleC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuXHJcbiAgICBjb25zdCBoaWRkZW5Hcm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS5tYXRlcmlhbEluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5tYXRlcmlhbHNbdmFsdWUubWF0ZXJpYWxJbmRleF0udmlzaWJsZSA9PT0gZmFsc2VcclxuICAgIH0pXHJcbiAgICBpZiAoaGlkZGVuR3JvdXApIHtcclxuICAgICAgdGhpcy5zZXRWaXNpYmxlUmFuZ2UoW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICAgIGNvdW50OiBoaWRkZW5Hcm91cC5zdGFydFxyXG4gICAgICAgIH1cclxuICAgICAgXSlcclxuICAgIH0gZWxzZSB0aGlzLnNldFZpc2libGVSYW5nZShbQWxsQmF0Y2hVcGRhdGVSYW5nZV0pXHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coJ0ZpbmFsIC0+ICcsIHRoaXMuaWQsIHRoaXMuZ3JvdXBzLnNsaWNlKCkpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdXBkYXRlR3JhZGllbnRJbmRleEJ1ZmZlckRhdGEoXHJcbiAgICBzdGFydDogbnVtYmVyLFxyXG4gICAgZW5kOiBudW1iZXIsXHJcbiAgICB2YWx1ZTogbnVtYmVyXHJcbiAgKTogeyBtaW5JbmRleDogbnVtYmVyOyBtYXhJbmRleDogbnVtYmVyIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZUdyYWRpZW50SW5kZXhCdWZmZXIocmFuZ2VNaW4/OiBudW1iZXIsIHJhbmdlTWF4PzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyYWRpZW50SW5kZXhCdWZmZXIudXBkYXRlUmFuZ2UgPSB7XHJcbiAgICAgIG9mZnNldDogcmFuZ2VNaW4gIT09IHVuZGVmaW5lZCA/IHJhbmdlTWluIDogMCxcclxuICAgICAgY291bnQ6XHJcbiAgICAgICAgcmFuZ2VNaW4gIT09IHVuZGVmaW5lZCAmJiByYW5nZU1heCAhPT0gdW5kZWZpbmVkID8gcmFuZ2VNYXggLSByYW5nZU1pbiArIDEgOiAtMVxyXG4gICAgfVxyXG4gICAgdGhpcy5ncmFkaWVudEluZGV4QnVmZmVyLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snZ3JhZGllbnRJbmRleCddLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFic3RyYWN0IHNldERyYXdSYW5nZXMocmFuZ2VzOiBCYXRjaFVwZGF0ZVJhbmdlW10pOiB2b2lkXHJcblxyXG4gIHB1YmxpYyByZXNldERyYXdSYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaW1pdGl2ZS52aXNpYmxlID0gdHJ1ZVxyXG4gICAgdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuY2xlYXJHcm91cHMoKVxyXG4gICAgdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuYWRkR3JvdXAoMCwgdGhpcy5nZXRDb3VudCgpLCAwKVxyXG4gICAgdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuc2V0RHJhd1JhbmdlKDAsIEluZmluaXR5KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFic3RyYWN0IGJ1aWxkQmF0Y2goKTogUHJvbWlzZTx2b2lkPlxyXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRSZW5kZXJWaWV3KGluZGV4OiBudW1iZXIpOiBOb2RlUmVuZGVyVmlldyB8IG51bGxcclxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0TWF0ZXJpYWxBdEluZGV4KGluZGV4OiBudW1iZXIpOiBNYXRlcmlhbCB8IG51bGxcclxuICBwdWJsaWMgZ2V0TWF0ZXJpYWwocnY6IE5vZGVSZW5kZXJWaWV3KTogTWF0ZXJpYWwgfCBudWxsIHtcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5ncm91cHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwc1trXVxyXG4gICAgICBpZiAocnYuYmF0Y2hTdGFydCA+PSBncm91cC5zdGFydCAmJiBydi5iYXRjaEVuZCA8PSBncm91cC5zdGFydCArIGdyb3VwLmNvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzW2dyb3VwLm1hdGVyaWFsSW5kZXhdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHVyZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aCA9IDBcclxuICAgIHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmRpc3Bvc2UoKVxyXG4gICAgdGhpcy5iYXRjaE1hdGVyaWFsLmRpc3Bvc2UoKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIE1hdGVyaWFsLFxyXG4gIEJ1ZmZlckF0dHJpYnV0ZSxcclxuICBCb3gzLFxyXG4gIEJ1ZmZlckdlb21ldHJ5LFxyXG4gIFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSxcclxuICBVaW50MTZCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSxcclxuICBEeW5hbWljRHJhd1VzYWdlLFxyXG4gIFNwaGVyZVxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBQcmltaXRpdmVCYXRjaCB9IGZyb20gJy4vUHJpbWl0aXZlQmF0Y2guanMnXHJcbmltcG9ydCBTcGVja2xlTWVzaCwgeyBUcmFuc2Zvcm1TdG9yYWdlIH0gZnJvbSAnLi4vb2JqZWN0cy9TcGVja2xlTWVzaC5qcydcclxuaW1wb3J0IHsgRHJhd1JhbmdlcyB9IGZyb20gJy4vRHJhd1Jhbmdlcy5qcydcclxuaW1wb3J0IHsgTm9kZVJlbmRlclZpZXcgfSBmcm9tICcuLi90cmVlL05vZGVSZW5kZXJWaWV3LmpzJ1xyXG5pbXBvcnQgeyB0eXBlIEJhdGNoVXBkYXRlUmFuZ2UsIHR5cGUgRHJhd0dyb3VwLCBHZW9tZXRyeVR5cGUgfSBmcm9tICcuL0JhdGNoLmpzJ1xyXG5pbXBvcnQgeyBCYXRjaE9iamVjdCB9IGZyb20gJy4vQmF0Y2hPYmplY3QuanMnXHJcbmltcG9ydCB7IEdlb21ldHJ5IH0gZnJvbSAnLi4vY29udmVydGVyL0dlb21ldHJ5LmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4uL3V0aWxzL0xvZ2dlci5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBNZXNoQmF0Y2ggZXh0ZW5kcyBQcmltaXRpdmVCYXRjaCB7XHJcbiAgcHJvdGVjdGVkIHByaW1pdGl2ZTogU3BlY2tsZU1lc2hcclxuICBwcm90ZWN0ZWQgdHJhbnNmb3JtU3RvcmFnZTogVHJhbnNmb3JtU3RvcmFnZVxyXG5cclxuICBwcml2YXRlIGluZGV4QnVmZmVyMDogQnVmZmVyQXR0cmlidXRlXHJcbiAgcHJpdmF0ZSBpbmRleEJ1ZmZlcjE6IEJ1ZmZlckF0dHJpYnV0ZVxyXG4gIHByaXZhdGUgaW5kZXhCdWZmZXJJbmRleCA9IDBcclxuXHJcbiAgcHJvdGVjdGVkIGRyYXdSYW5nZXM6IERyYXdSYW5nZXMgPSBuZXcgRHJhd1JhbmdlcygpXHJcblxyXG4gIGdldCBib3VuZHMoKTogQm94MyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmltaXRpdmUuVEFTLmdldEJvdW5kaW5nQm94KG5ldyBCb3gzKCkpXHJcbiAgfVxyXG5cclxuICBnZXQgbWluRHJhd0NhbGxzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gWy4uLkFycmF5LmZyb20obmV3IFNldCh0aGlzLmdyb3Vwcy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS5tYXRlcmlhbEluZGV4KSkpXVxyXG4gICAgICAubGVuZ3RoXHJcbiAgfVxyXG5cclxuICBnZXQgdHJpQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdldENvdW50KCkgLyAzXHJcbiAgfVxyXG5cclxuICBnZXQgcG9pbnRDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDBcclxuICB9XHJcblxyXG4gIGdldCBsaW5lQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGdlb21ldHJ5VHlwZSgpOiBHZW9tZXRyeVR5cGUge1xyXG4gICAgcmV0dXJuIEdlb21ldHJ5VHlwZS5NRVNIXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1lc2goKTogU3BlY2tsZU1lc2gge1xyXG4gICAgcmV0dXJuIHRoaXMucHJpbWl0aXZlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgc3VidHJlZUlkOiBzdHJpbmcsXHJcbiAgICByZW5kZXJWaWV3czogTm9kZVJlbmRlclZpZXdbXSxcclxuICAgIHRyYW5zZm9ybVN0b3JhZ2U6IFRyYW5zZm9ybVN0b3JhZ2VcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuaWQgPSBpZFxyXG4gICAgdGhpcy5zdWJ0cmVlSWQgPSBzdWJ0cmVlSWRcclxuICAgIHRoaXMucmVuZGVyVmlld3MgPSByZW5kZXJWaWV3c1xyXG4gICAgdGhpcy50cmFuc2Zvcm1TdG9yYWdlID0gdHJhbnNmb3JtU3RvcmFnZVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEN1cnJlbnRJbmRleEJ1ZmZlcigpOiBCdWZmZXJBdHRyaWJ1dGUge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5kZXhCdWZmZXJJbmRleCAlIDIgPT09IDAgPyB0aGlzLmluZGV4QnVmZmVyMCA6IHRoaXMuaW5kZXhCdWZmZXIxXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0TmV4dEluZGV4QnVmZmVyKCk6IEJ1ZmZlckF0dHJpYnV0ZSB7XHJcbiAgICByZXR1cm4gKyt0aGlzLmluZGV4QnVmZmVySW5kZXggJSAyID09PSAwID8gdGhpcy5pbmRleEJ1ZmZlcjAgOiB0aGlzLmluZGV4QnVmZmVyMVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNodWZmbGVNYXRlcmlhbE9yZGVyKGE6IERyYXdHcm91cCwgYjogRHJhd0dyb3VwKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG1hdGVyaWFsQTogTWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsc1thLm1hdGVyaWFsSW5kZXhdXHJcbiAgICBjb25zdCBtYXRlcmlhbEI6IE1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbHNbYi5tYXRlcmlhbEluZGV4XVxyXG4gICAgY29uc3QgdmlzaWJsZU9yZGVyID0gK21hdGVyaWFsQi52aXNpYmxlIC0gK21hdGVyaWFsQS52aXNpYmxlXHJcbiAgICBjb25zdCBjb2xvcldyaXRlT3JkZXIgPSArbWF0ZXJpYWxCLmNvbG9yV3JpdGUgLSArbWF0ZXJpYWxBLmNvbG9yV3JpdGVcclxuICAgIGNvbnN0IHRyYW5zcGFyZW50T3JkZXIgPSArbWF0ZXJpYWxBLnRyYW5zcGFyZW50IC0gK21hdGVyaWFsQi50cmFuc3BhcmVudFxyXG4gICAgaWYgKHZpc2libGVPcmRlciAhPT0gMCkgcmV0dXJuIHZpc2libGVPcmRlclxyXG4gICAgaWYgKGNvbG9yV3JpdGVPcmRlciAhPT0gMCkgcmV0dXJuIGNvbG9yV3JpdGVPcmRlclxyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50T3JkZXJcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVHcmFkaWVudEluZGV4QnVmZmVyRGF0YShcclxuICAgIHN0YXJ0OiBudW1iZXIsXHJcbiAgICBlbmQ6IG51bWJlcixcclxuICAgIHZhbHVlOiBudW1iZXJcclxuICApOiB7IG1pbkluZGV4OiBudW1iZXI7IG1heEluZGV4OiBudW1iZXIgfSB7XHJcbiAgICBpZiAoIXRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmluZGV4KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnZW9tZXRyeSBvbiBiYXRjaCAke3RoaXMuaWR9YClcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuaW5kZXguYXJyYXkgYXMgbnVtYmVyW11cclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdyYWRpZW50SW5kZXhCdWZmZXIuYXJyYXkgYXMgbnVtYmVyW11cclxuICAgIGxldCBtaW5WZXJ0ZXhJbmRleCA9IEluZmluaXR5XHJcbiAgICBsZXQgbWF4VmVydGV4SW5kZXggPSAwXHJcbiAgICBmb3IgKGxldCBrID0gc3RhcnQ7IGsgPCBlbmQ7IGsrKykge1xyXG4gICAgICBjb25zdCB2SW5kZXggPSBpbmRleFtrXVxyXG4gICAgICBtaW5WZXJ0ZXhJbmRleCA9IE1hdGgubWluKG1pblZlcnRleEluZGV4LCB2SW5kZXgpXHJcbiAgICAgIG1heFZlcnRleEluZGV4ID0gTWF0aC5tYXgobWF4VmVydGV4SW5kZXgsIHZJbmRleClcclxuICAgICAgZGF0YVt2SW5kZXhdID0gdmFsdWVcclxuICAgIH1cclxuICAgIHRoaXMuZ3JhZGllbnRJbmRleEJ1ZmZlci51cGRhdGVSYW5nZSA9IHtcclxuICAgICAgb2Zmc2V0OiBtaW5WZXJ0ZXhJbmRleCxcclxuICAgICAgY291bnQ6IG1heFZlcnRleEluZGV4IC0gbWluVmVydGV4SW5kZXggKyAxXHJcbiAgICB9XHJcbiAgICB0aGlzLmdyYWRpZW50SW5kZXhCdWZmZXIubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB0aGlzLnByaW1pdGl2ZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydncmFkaWVudEluZGV4J10ubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtaW5JbmRleDogbWluVmVydGV4SW5kZXgsXHJcbiAgICAgIG1heEluZGV4OiBtYXhWZXJ0ZXhJbmRleFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERyYXdSYW5nZXMocmFuZ2VzOiBCYXRjaFVwZGF0ZVJhbmdlW10pIHtcclxuICAgIC8vIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdyb3Vwcy5zbGljZSgpXHJcbiAgICAvLyBjb25zdCBpbmNvbWluZyA9IHJhbmdlcy5zbGljZSgpXHJcbiAgICByYW5nZXMuZm9yRWFjaCgodmFsdWU6IEJhdGNoVXBkYXRlUmFuZ2UpID0+IHtcclxuICAgICAgaWYgKHZhbHVlLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgdmFsdWUubWF0ZXJpYWwgPSB0aGlzLnByaW1pdGl2ZS5nZXRDYWNoZWRNYXRlcmlhbCh2YWx1ZS5tYXRlcmlhbClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGNvbnN0IG1hdGVyaWFsczogQXJyYXk8TWF0ZXJpYWw+ID0gcmFuZ2VzLm1hcCgodmFsOiBCYXRjaFVwZGF0ZVJhbmdlKSA9PiB7XHJcbiAgICAgIHJldHVybiB2YWwubWF0ZXJpYWwgYXMgTWF0ZXJpYWxcclxuICAgIH0pXHJcbiAgICBjb25zdCB1bmlxdWVNYXRlcmlhbHM6IEFycmF5PE1hdGVyaWFsPiA9IFtcclxuICAgICAgLi4uQXJyYXkuZnJvbShuZXcgU2V0KG1hdGVyaWFscy5tYXAoKHZhbHVlOiBNYXRlcmlhbCkgPT4gdmFsdWUpKSlcclxuICAgIF1cclxuXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHVuaXF1ZU1hdGVyaWFscy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBpZiAoIXRoaXMubWF0ZXJpYWxzLmluY2x1ZGVzKHVuaXF1ZU1hdGVyaWFsc1trXSkpXHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHMucHVzaCh1bmlxdWVNYXRlcmlhbHNba10pXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ncm91cHMgPSB0aGlzLmRyYXdSYW5nZXMuaW50ZWdyYXRlUmFuZ2VzKHRoaXMuZ3JvdXBzLCB0aGlzLm1hdGVyaWFscywgcmFuZ2VzKVxyXG5cclxuICAgIGxldCBjb3VudCA9IDBcclxuICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKHZhbHVlKSA9PiAoY291bnQgKz0gdmFsdWUuY291bnQpKVxyXG4gICAgaWYgKGNvdW50ICE9PSB0aGlzLmdldENvdW50KCkpIHtcclxuICAgICAgLy8gTG9nZ2VyLmVycm9yKCdDdXJyZW50IC0+ICcsIGN1cnJlbnQpXHJcbiAgICAgIC8vIExvZ2dlci5lcnJvcignSW5jb21pbmcgLT4gJywgaW5jb21pbmcpXHJcbiAgICAgIC8vIExvZ2dlci5lcnJvcignQ3VycmVudCAtPiAnLCB0aGlzLmdlb21ldHJ5Lmdyb3VwcylcclxuICAgICAgTG9nZ2VyLmVycm9yKFxyXG4gICAgICAgIGBEcmF3IGdyb3VwcyBpbnZhbGlkIG9uICR7dGhpcy5pZH0sICR7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlclZpZXdzWzBdLnJlbmRlckRhdGEuaWRcclxuICAgICAgICB9LCAke3RoaXMuZ2V0Q291bnQoKX0sICR7dGhpcy5nZXRDb3VudCgpIC0gY291bnR9YFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEJhdGNoQnVmZmVycyhyYW5nZXMpXHJcbiAgICB0aGlzLmNsZWFuTWF0ZXJpYWxzKClcclxuXHJcbiAgICBpZiAodGhpcy5kcmF3Q2FsbHMgPiB0aGlzLm1pbkRyYXdDYWxscyArIDIpIHtcclxuICAgICAgdGhpcy5uZWVkc1NodWZmbGUgPSB0cnVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0cmFuc3BhcmVudERlcHRoSGlkZGVuR3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKFxyXG4gICAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICAgIHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdLnRyYW5zcGFyZW50ID09PSB0cnVlIHx8XHJcbiAgICAgICAgICB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XS52aXNpYmxlID09PSBmYWxzZSB8fFxyXG4gICAgICAgICAgdGhpcy5tYXRlcmlhbHNbdmFsdWUubWF0ZXJpYWxJbmRleF0uY29sb3JXcml0ZSA9PT0gZmFsc2VcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKHRyYW5zcGFyZW50RGVwdGhIaWRkZW5Hcm91cCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3Vwcy5sZW5ndGggPT09IDEpIHRoaXMubmVlZHNTaHVmZmxlID0gdHJ1ZVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgbGV0IGsgPSB0aGlzLmdyb3Vwcy5pbmRleE9mKHRyYW5zcGFyZW50RGVwdGhIaWRkZW5Hcm91cCk7XHJcbiAgICAgICAgICAgIGsgPCB0aGlzLmdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGsrK1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbHNbdGhpcy5ncm91cHNba10ubWF0ZXJpYWxJbmRleF1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnZpc2libGUpIHtcclxuICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IG1hdGVyaWFsLmNvbG9yV3JpdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmVlZHNTaHVmZmxlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldERyYXdSYW5nZXMoKTogdm9pZCB7XHJcbiAgICBzdXBlci5yZXNldERyYXdSYW5nZXMoKVxyXG4gICAgdGhpcy5wcmltaXRpdmUuc2V0QmF0Y2hNYXRlcmlhbCh0aGlzLmJhdGNoTWF0ZXJpYWwpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYnVpbGRCYXRjaCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBpbmRpY2VzQ291bnQgPSAwXHJcbiAgICBsZXQgYXR0cmlidXRlQ291bnQgPSAwXHJcbiAgICBjb25zdCBydkFBQkI6IEJveDMgPSBuZXcgQm94MygpXHJcbiAgICBjb25zdCBib3VuZHM6IEJveDMgPSBuZXcgQm94MygpXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMucmVuZGVyVmlld3MubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgZXJ2ZWUgPSB0aGlzLnJlbmRlclZpZXdzW2tdXHJcbiAgICAgIC8qKiBDYXRlcmluZyB0byB0eXBlc2NyaXB0XHJcbiAgICAgICAqICBUaGVyZSBpcyBubyB1bm5pdmVyc2Ugd2hlcmUgaW5kaWNlcyBvciBwb3NpdGlvbnMgYXJlIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50XHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIWVydmVlLnJlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcyB8fFxyXG4gICAgICAgICFlcnZlZS5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMuSU5ERVhcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYnVpbGQgYmF0Y2ggJHt0aGlzLmlkfS4gSW52YWxpZCBnZW9tZXRyeSwgb3IgaW5kaWNlc2ApXHJcbiAgICAgIH1cclxuICAgICAgaW5kaWNlc0NvdW50ICs9IGVydmVlLnJlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcy5JTkRFWC5sZW5ndGhcclxuICAgICAgYXR0cmlidXRlQ291bnQgKz0gZXJ2ZWUucmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzLlBPU0lUSU9OLmxlbmd0aFxyXG4gICAgICBib3VuZHMudW5pb24oZXJ2ZWUuYWFiYilcclxuICAgIH1cclxuICAgIGNvbnN0IG5lZWRzUlRFID0gR2VvbWV0cnkubmVlZHNSVEUoYm91bmRzKVxyXG5cclxuICAgIGNvbnN0IGhhc1ZlcnRleENvbG9ycyA9XHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3NbMF0ucmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzPy5DT0xPUiAhPT0gdW5kZWZpbmVkXHJcbiAgICBjb25zdCBpbmRpY2VzID1cclxuICAgICAgYXR0cmlidXRlQ291bnQgPj0gNjU1MzUgfHwgaW5kaWNlc0NvdW50ID49IDY1NTM1XHJcbiAgICAgICAgPyBuZXcgVWludDMyQXJyYXkoaW5kaWNlc0NvdW50KVxyXG4gICAgICAgIDogbmV3IFVpbnQxNkFycmF5KGluZGljZXNDb3VudClcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gbmVlZHNSVEVcclxuICAgICAgPyBuZXcgRmxvYXQ2NEFycmF5KGF0dHJpYnV0ZUNvdW50KVxyXG4gICAgICA6IG5ldyBGbG9hdDMyQXJyYXkoYXR0cmlidXRlQ291bnQpXHJcbiAgICBjb25zdCBjb2xvciA9IG5ldyBGbG9hdDMyQXJyYXkoaGFzVmVydGV4Q29sb3JzID8gYXR0cmlidXRlQ291bnQgOiAwKVxyXG4gICAgY29sb3IuZmlsbCgxKVxyXG4gICAgY29uc3QgYmF0Y2hJbmRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShhdHRyaWJ1dGVDb3VudCAvIDMpXHJcbiAgICBjb25zdCBub3JtYWxzID0gbmV3IEZsb2F0MzJBcnJheShhdHRyaWJ1dGVDb3VudClcclxuXHJcbiAgICBsZXQgb2Zmc2V0ID0gMFxyXG4gICAgbGV0IGFycmF5T2Zmc2V0ID0gMFxyXG4gICAgY29uc3QgYmF0Y2hPYmplY3RzID0gW11cclxuXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMucmVuZGVyVmlld3MubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLnJlbmRlclZpZXdzW2tdLnJlbmRlckRhdGEuZ2VvbWV0cnlcclxuICAgICAgLyoqIENhdGVyaW5nIHRvIHR5cGVzY3JpcHRcclxuICAgICAgICogIFRoZXJlIGlzIG5vIHVubml2ZXJzZSB3aGVyZSBpbmRpY2VzIG9yIHBvc2l0aW9ucyBhcmUgdW5kZWZpbmVkIGF0IHRoaXMgcG9pbnRcclxuICAgICAgICovXHJcbiAgICAgIGlmICghZ2VvbWV0cnkuYXR0cmlidXRlcyB8fCAhZ2VvbWV0cnkuYXR0cmlidXRlcz8uSU5ERVgpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBidWlsZCBiYXRjaCAke3RoaXMuaWR9LiBJbnZhbGlkIGdlb21ldHJ5LCBvciBpbmRpY2VzYClcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlcz8uSU5ERVguY29weVRvQnVmZmVyKGluZGljZXMsIGFycmF5T2Zmc2V0KVxyXG4gICAgICBjb25zdCBpbmRpY2VzU3ViQXJyYXkgPSBpbmRpY2VzLnN1YmFycmF5KFxyXG4gICAgICAgIGFycmF5T2Zmc2V0LFxyXG4gICAgICAgIGFycmF5T2Zmc2V0ICsgZ2VvbWV0cnkuYXR0cmlidXRlcz8uSU5ERVgubGVuZ3RoXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXM/LlBPU0lUSU9OLmNvcHlUb0J1ZmZlcihwb3NpdGlvbiwgb2Zmc2V0KVxyXG4gICAgICBjb25zdCBwb3NpdGlvblN1YmFycmF5ID0gcG9zaXRpb24uc3ViYXJyYXkoXHJcbiAgICAgICAgb2Zmc2V0LFxyXG4gICAgICAgIG9mZnNldCArXHJcbiAgICAgICAgICAodGhpcy5yZW5kZXJWaWV3c1trXS5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXM/LlBPU0lUSU9OLmxlbmd0aCA/PyAwKVxyXG4gICAgICApXHJcbiAgICAgIC8qKiBXZSB0cmFuc2Zvcm0gdGhlIGNvcGllZCBnZW9tZXRyeSBzbyB0aGF0IHdlIGRvIG5vdCBhbHRlciBvcmlnaW5hbCBjaHVuayBkYXRhIHdoaWNoIG1pZ2h0IGJlIHNoYXJlZCAqL1xyXG4gICAgICBHZW9tZXRyeS50cmFuc2Zvcm1BcnJheShcclxuICAgICAgICBwb3NpdGlvblN1YmFycmF5LFxyXG4gICAgICAgIGdlb21ldHJ5LnRyYW5zZm9ybSxcclxuICAgICAgICAwLFxyXG4gICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXM/LlBPU0lUSU9OLmxlbmd0aFxyXG4gICAgICApXHJcblxyXG4gICAgICBpZiAoZ2VvbWV0cnkuYXR0cmlidXRlcy5DT0xPUikge1xyXG4gICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXM/LkNPTE9SLmNvcHlUb0J1ZmZlcihjb2xvciwgb2Zmc2V0KVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiogV2UgZWl0aGVyIGNvcHkgb3ZlciB0aGUgcHJvdmlkZWQgdmVydGV4IG5vcm1hbHMgKi9cclxuICAgICAgaWYgKGdlb21ldHJ5LmF0dHJpYnV0ZXMuTk9STUFMKSB7XHJcbiAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlcz8uTk9STUFMLmNvcHlUb0J1ZmZlcihub3JtYWxzLCBvZmZzZXQpXHJcbiAgICAgICAgaWYgKGdlb21ldHJ5LmZsaXBOb3JtYWxzKSB7XHJcbiAgICAgICAgICBHZW9tZXRyeS5mbGlwTm9ybWFsc0J1ZmZlcihcclxuICAgICAgICAgICAgbm9ybWFscy5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGdlb21ldHJ5LmF0dHJpYnV0ZXM/Lk5PUk1BTC5sZW5ndGgpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8qKiBFaXRoZXIgd2UgY29tcHV0ZSB0aGVtIG91cnNlbHZlcyAqL1xyXG4gICAgICAgIEdlb21ldHJ5LmNvbXB1dGVWZXJ0ZXhOb3JtYWxzQnVmZmVyVmlydHVhbChcclxuICAgICAgICAgIG5vcm1hbHMuc3ViYXJyYXkoXHJcbiAgICAgICAgICAgIG9mZnNldCxcclxuICAgICAgICAgICAgb2Zmc2V0ICtcclxuICAgICAgICAgICAgICAodGhpcy5yZW5kZXJWaWV3c1trXS5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXM/LlBPU0lUSU9OLmxlbmd0aCA/PyAwKVxyXG4gICAgICAgICAgKSBhcyB1bmtub3duIGFzIG51bWJlcltdLFxyXG4gICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTixcclxuICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMuSU5ERVgsXHJcbiAgICAgICAgICBnZW9tZXRyeS5mbGlwTm9ybWFsc1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBiYXRjaEluZGljZXMuZmlsbChrLCBvZmZzZXQgLyAzLCBvZmZzZXQgLyAzICsgZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5sZW5ndGgpXHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3Nba10uc2V0QmF0Y2hEYXRhKFxyXG4gICAgICAgIHRoaXMuaWQsXHJcbiAgICAgICAgYXJyYXlPZmZzZXQsXHJcbiAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5JTkRFWC5sZW5ndGgsXHJcbiAgICAgICAgb2Zmc2V0IC8gMyxcclxuICAgICAgICBvZmZzZXQgLyAzICsgZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5sZW5ndGhcclxuICAgICAgKVxyXG5cclxuICAgICAgLyoqIFdlIHJlLWNvbXB1dGUgdGhlIHJlbmRlciB2aWV3IGFhYmIgYmFzZWQgb24gdHJhbnNmb3JtZWQgZ2VvbWV0cnlcclxuICAgICAgICogIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIHRyYW5zZm9ybXMgbGlrZSBub24tdW5pZm9ybSBzY2FsaW5nIGNhbiBwcm9kdWNlIGluY29ycmVjdCByZXN1bHRzXHJcbiAgICAgICAqICBpZiB3ZSBjb21wdXRlIGFuIGFhYmIgZnJvbSBvcmlnaW5hbCBnZW9tZXRyeSB0aGVuIGFwcGx5IHRoZSB0cmFuc2Zvcm0uIFRoYXQncyB3aHkgd2UgY29tcHV0ZVxyXG4gICAgICAgKiAgYW4gYWFiYiBmcm9tIHRoZSB0cmFuc2Zvcm1lZCBnZW9tZXRyeSBoZXJlIGFuZCBzZXQgaXQgaW4gdGhlIHJ2XHJcbiAgICAgICAqL1xyXG4gICAgICBydkFBQkIuc2V0RnJvbUFycmF5KHBvc2l0aW9uU3ViYXJyYXkpXHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3Nba10uYWFiYiA9IHJ2QUFCQlxyXG5cclxuICAgICAgY29uc3QgYmF0Y2hPYmplY3QgPSBuZXcgQmF0Y2hPYmplY3QodGhpcy5yZW5kZXJWaWV3c1trXSwgaylcclxuICAgICAgYmF0Y2hPYmplY3QuYnVpbGRBY2NlbGVyYXRpb25TdHJ1Y3R1cmUocG9zaXRpb25TdWJhcnJheSwgaW5kaWNlc1N1YkFycmF5KVxyXG4gICAgICBiYXRjaE9iamVjdHMucHVzaChiYXRjaE9iamVjdClcclxuXHJcbiAgICAgIGluZGljZXMuc2V0KFxyXG4gICAgICAgIGJhdGNoT2JqZWN0LmFjY2VsZXJhdGlvblN0cnVjdHVyZS5idmguZ2VvbWV0cnkuaW5kZXg/LmFycmF5IGFzIG51bWJlcltdLFxyXG4gICAgICAgIGFycmF5T2Zmc2V0XHJcbiAgICAgIClcclxuXHJcbiAgICAgIC8qKiBSZS1pbmRleCB0aGUgaW5kaWNlcyBpbnNpZGUgdGhlIGJhdGNoICovXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlc1N1YkFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaW5kaWNlc1N1YkFycmF5W2ldID0gaW5kaWNlc1N1YkFycmF5W2ldICsgb2Zmc2V0IC8gM1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvZmZzZXQgKz0gZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5sZW5ndGhcclxuICAgICAgYXJyYXlPZmZzZXQgKz0gZ2VvbWV0cnkuYXR0cmlidXRlcy5JTkRFWC5sZW5ndGhcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3Nba10uZGlzcG9zZUdlb21ldHJ5KClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IHRoaXMubWFrZU1lc2hHZW9tZXRyeShcclxuICAgICAgaW5kaWNlcyxcclxuICAgICAgcG9zaXRpb24sXHJcbiAgICAgIG5vcm1hbHMsXHJcbiAgICAgIGJhdGNoSW5kaWNlcyxcclxuICAgICAgaGFzVmVydGV4Q29sb3JzID8gY29sb3IgOiB1bmRlZmluZWRcclxuICAgIClcclxuXHJcbiAgICBpZiAobmVlZHNSVEUpIEdlb21ldHJ5LnVwZGF0ZVJURUdlb21ldHJ5KGdlb21ldHJ5LCBwb3NpdGlvbilcclxuXHJcbiAgICB0aGlzLnByaW1pdGl2ZSA9IG5ldyBTcGVja2xlTWVzaChnZW9tZXRyeSwgbmVlZHNSVEUpXHJcbiAgICB0aGlzLnByaW1pdGl2ZS5zZXRCYXRjaE9iamVjdHMoYmF0Y2hPYmplY3RzLCB0aGlzLnRyYW5zZm9ybVN0b3JhZ2UpXHJcbiAgICB0aGlzLnByaW1pdGl2ZS5zZXRCYXRjaE1hdGVyaWFsKHRoaXMuYmF0Y2hNYXRlcmlhbClcclxuICAgIHRoaXMucHJpbWl0aXZlLmJ1aWxkVEFTKClcclxuICAgIHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmJvdW5kaW5nQm94ID0gdGhpcy5wcmltaXRpdmUuVEFTLmdldEJvdW5kaW5nQm94KG5ldyBCb3gzKCkpXHJcbiAgICB0aGlzLnByaW1pdGl2ZS5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9XHJcbiAgICAgIHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmJvdW5kaW5nQm94LmdldEJvdW5kaW5nU3BoZXJlKG5ldyBTcGhlcmUoKSlcclxuXHJcbiAgICB0aGlzLnByaW1pdGl2ZS51dWlkID0gdGhpcy5pZFxyXG4gICAgdGhpcy5wcmltaXRpdmUubGF5ZXJzLnNldChPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSClcclxuICAgIHRoaXMucHJpbWl0aXZlLmZydXN0dW1DdWxsZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuYWRkR3JvdXAoMCwgdGhpcy5nZXRDb3VudCgpLCAwKVxyXG5cclxuICAgIC8vIGJhdGNoT2JqZWN0cy5mb3JFYWNoKChlbGVtZW50OiBCYXRjaE9iamVjdCkgPT4ge1xyXG4gICAgLy8gICBlbGVtZW50LnJlbmRlclZpZXcuZGlzcG9zZUdlb21ldHJ5KClcclxuICAgIC8vIH0pXHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWFrZU1lc2hHZW9tZXRyeShcclxuICAgIGluZGljZXM6IFVpbnQzMkFycmF5IHwgVWludDE2QXJyYXksXHJcbiAgICBwb3NpdGlvbjogRmxvYXQ2NEFycmF5IHwgRmxvYXQzMkFycmF5LFxyXG4gICAgbm9ybWFsczogRmxvYXQzMkFycmF5LFxyXG4gICAgYmF0Y2hJbmRpY2VzOiBGbG9hdDMyQXJyYXksXHJcbiAgICBjb2xvcj86IEZsb2F0MzJBcnJheVxyXG4gICk6IEJ1ZmZlckdlb21ldHJ5IHtcclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KClcclxuICAgIGlmIChwb3NpdGlvbi5sZW5ndGggPj0gNjU1MzUgfHwgaW5kaWNlcy5sZW5ndGggPj0gNjU1MzUpIHtcclxuICAgICAgdGhpcy5pbmRleEJ1ZmZlcjAgPSBuZXcgVWludDMyQnVmZmVyQXR0cmlidXRlKGluZGljZXMsIDEpXHJcbiAgICAgIHRoaXMuaW5kZXhCdWZmZXIxID0gbmV3IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZShpbmRpY2VzLCAxKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbmRleEJ1ZmZlcjAgPSBuZXcgVWludDE2QnVmZmVyQXR0cmlidXRlKGluZGljZXMsIDEpXHJcbiAgICAgIHRoaXMuaW5kZXhCdWZmZXIxID0gbmV3IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZShpbmRpY2VzLCAxKVxyXG4gICAgfVxyXG4gICAgZ2VvbWV0cnkuc2V0SW5kZXgodGhpcy5pbmRleEJ1ZmZlcjApXHJcblxyXG4gICAgaWYgKHBvc2l0aW9uKSB7XHJcbiAgICAgIC8qKiBXaGVuIFJURSBlbmFibGVkLCB3ZSdsbCBiZSBzdG9yaW5nIHRoZSBoaWdoIGNvbXBvbmVudCBvZiB0aGUgZW5jb2RpbmcgaGVyZSxcclxuICAgICAgICogd2hpY2ggY29uc2lkZXJpbmcgb3VyIGN1cnJlbnQgZW5jb2RpbmcgbWV0aG9kIGlzIGFjdHVhbGx5IHRoZSBvcmlnaW5hbCBjYXN0ZWRcclxuICAgICAgICogZG93biBmbG9hdDMyIHBvc2l0aW9uIVxyXG4gICAgICAgKi9cclxuICAgICAgZ2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKHBvc2l0aW9uLCAzKSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAobm9ybWFscykge1xyXG4gICAgICBnZW9tZXRyeVxyXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKG5vcm1hbHMsIDMpKVxyXG4gICAgICAgIC5ub3JtYWxpemVOb3JtYWxzKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmF0Y2hJbmRpY2VzKSB7XHJcbiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnb2JqSW5kZXgnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShiYXRjaEluZGljZXMsIDEpKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2xvcikge1xyXG4gICAgICBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoY29sb3IsIDMpKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb24ubGVuZ3RoIC8gMylcclxuICAgIHRoaXMuZ3JhZGllbnRJbmRleEJ1ZmZlciA9IG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKGJ1ZmZlciwgMSlcclxuICAgIHRoaXMuZ3JhZGllbnRJbmRleEJ1ZmZlci5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKVxyXG4gICAgZ2VvbWV0cnkuc2V0QXR0cmlidXRlKCdncmFkaWVudEluZGV4JywgdGhpcy5ncmFkaWVudEluZGV4QnVmZmVyKVxyXG5cclxuICAgIHJldHVybiBnZW9tZXRyeVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbmRlclZpZXcoaW5kZXg6IG51bWJlcik6IE5vZGVSZW5kZXJWaWV3IHwgbnVsbCB7XHJcbiAgICBpbmRleFxyXG4gICAgTG9nZ2VyLndhcm4oJ0RlcHJlY2F0ZWQhIFVzZSBCYXRjaE9iamVjdCcpXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuICBwdWJsaWMgZ2V0TWF0ZXJpYWxBdEluZGV4KGluZGV4OiBudW1iZXIpOiBNYXRlcmlhbCB8IG51bGwge1xyXG4gICAgaW5kZXhcclxuICAgIExvZ2dlci53YXJuKCdEZXByZWNhdGVkISBVc2UgQmF0Y2hPYmplY3QnKVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBNYXRlcmlhbCxcclxuICBCb3gzLFxyXG4gIEJ1ZmZlckF0dHJpYnV0ZSxcclxuICBQb2ludHMsXHJcbiAgQnVmZmVyR2VvbWV0cnksXHJcbiAgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSxcclxuICBVaW50MzJCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgVWludDE2QnVmZmVyQXR0cmlidXRlLFxyXG4gIER5bmFtaWNEcmF3VXNhZ2VcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICcuLi9jb252ZXJ0ZXIvR2VvbWV0cnkuanMnXHJcbmltcG9ydCB7IE5vZGVSZW5kZXJWaWV3IH0gZnJvbSAnLi4vdHJlZS9Ob2RlUmVuZGVyVmlldy5qcydcclxuaW1wb3J0IHsgdHlwZSBCYXRjaFVwZGF0ZVJhbmdlLCB0eXBlIERyYXdHcm91cCwgR2VvbWV0cnlUeXBlIH0gZnJvbSAnLi9CYXRjaC5qcydcclxuaW1wb3J0IHsgUHJpbWl0aXZlQmF0Y2ggfSBmcm9tICcuL1ByaW1pdGl2ZUJhdGNoLmpzJ1xyXG5pbXBvcnQgeyBEcmF3UmFuZ2VzIH0gZnJvbSAnLi9EcmF3UmFuZ2VzLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4uL3V0aWxzL0xvZ2dlci5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBQb2ludEJhdGNoIGV4dGVuZHMgUHJpbWl0aXZlQmF0Y2gge1xyXG4gIHByb3RlY3RlZCBwcmltaXRpdmU6IFBvaW50c1xyXG4gIHByb3RlY3RlZCBkcmF3UmFuZ2VzOiBEcmF3UmFuZ2VzID0gbmV3IERyYXdSYW5nZXMoKVxyXG5cclxuICBwdWJsaWMgZ2V0IGdlb21ldHJ5VHlwZSgpOiBHZW9tZXRyeVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMucmVuZGVyVmlld3NbMF0uZ2VvbWV0cnlUeXBlXHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgYm91bmRzKCk6IEJveDMge1xyXG4gICAgaWYgKCF0aGlzLnByaW1pdGl2ZS5nZW9tZXRyeS5ib3VuZGluZ0JveClcclxuICAgICAgdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KClcclxuICAgIHJldHVybiB0aGlzLnByaW1pdGl2ZS5nZW9tZXRyeS5ib3VuZGluZ0JveFxyXG4gICAgICA/IHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmJvdW5kaW5nQm94XHJcbiAgICAgIDogbmV3IEJveDMoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtaW5EcmF3Q2FsbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLm1hdGVyaWFscy5sZW5ndGhcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdHJpQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHBvaW50Q291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdldENvdW50KClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbGluZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHN1YnRyZWVJZDogc3RyaW5nLCByZW5kZXJWaWV3czogTm9kZVJlbmRlclZpZXdbXSkge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5pZCA9IGlkXHJcbiAgICB0aGlzLnN1YnRyZWVJZCA9IHN1YnRyZWVJZFxyXG4gICAgdGhpcy5yZW5kZXJWaWV3cyA9IHJlbmRlclZpZXdzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RHJhd1JhbmdlcyhyYW5nZXM6IEJhdGNoVXBkYXRlUmFuZ2VbXSkge1xyXG4gICAgY29uc3QgbWF0ZXJpYWxzOiBBcnJheTxNYXRlcmlhbD4gPSByYW5nZXMubWFwKCh2YWw6IEJhdGNoVXBkYXRlUmFuZ2UpID0+IHtcclxuICAgICAgcmV0dXJuIHZhbC5tYXRlcmlhbCBhcyBNYXRlcmlhbFxyXG4gICAgfSlcclxuICAgIGNvbnN0IHVuaXF1ZU1hdGVyaWFscyA9IFsuLi5BcnJheS5mcm9tKG5ldyBTZXQobWF0ZXJpYWxzLm1hcCgodmFsdWUpID0+IHZhbHVlKSkpXVxyXG5cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdW5pcXVlTWF0ZXJpYWxzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmICghdGhpcy5tYXRlcmlhbHMuaW5jbHVkZXModW5pcXVlTWF0ZXJpYWxzW2tdKSlcclxuICAgICAgICB0aGlzLm1hdGVyaWFscy5wdXNoKHVuaXF1ZU1hdGVyaWFsc1trXSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyb3VwcyA9IHRoaXMuZHJhd1Jhbmdlcy5pbnRlZ3JhdGVSYW5nZXModGhpcy5ncm91cHMsIHRoaXMubWF0ZXJpYWxzLCByYW5nZXMpXHJcblxyXG4gICAgbGV0IGNvdW50ID0gMFxyXG4gICAgdGhpcy5ncm91cHMuZm9yRWFjaCgodmFsdWUpID0+IChjb3VudCArPSB2YWx1ZS5jb3VudCkpXHJcbiAgICBpZiAoY291bnQgIT09IHRoaXMuZ2V0Q291bnQoKSkge1xyXG4gICAgICBMb2dnZXIuZXJyb3IoYERyYXcgZ3JvdXBzIGludmFsaWQgb24gJHt0aGlzLmlkfWApXHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEJhdGNoQnVmZmVycyhyYW5nZXMpXHJcbiAgICB0aGlzLmNsZWFuTWF0ZXJpYWxzKClcclxuXHJcbiAgICBpZiAodGhpcy5kcmF3Q2FsbHMgPiB0aGlzLm1pbkRyYXdDYWxscyArIDIpIHtcclxuICAgICAgdGhpcy5uZWVkc1NodWZmbGUgPSB0cnVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0cmFuc3BhcmVudE9ySGlkZGVuR3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKFxyXG4gICAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICAgIHRoaXMubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdLnRyYW5zcGFyZW50ID09PSB0cnVlIHx8XHJcbiAgICAgICAgICB0aGlzLm1hdGVyaWFsc1t2YWx1ZS5tYXRlcmlhbEluZGV4XS52aXNpYmxlID09PSBmYWxzZVxyXG4gICAgICApXHJcbiAgICAgIGlmICh0cmFuc3BhcmVudE9ySGlkZGVuR3JvdXApIHtcclxuICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgbGV0IGsgPSB0aGlzLmdyb3Vwcy5pbmRleE9mKHRyYW5zcGFyZW50T3JIaWRkZW5Hcm91cCk7XHJcbiAgICAgICAgICBrIDwgdGhpcy5ncm91cHMubGVuZ3RoO1xyXG4gICAgICAgICAgaysrXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxzW3RoaXMuZ3JvdXBzW2tdLm1hdGVyaWFsSW5kZXhdXHJcbiAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbnQgIT09IHRydWUgJiYgbWF0ZXJpYWwudmlzaWJsZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5uZWVkc1NodWZmbGUgPSB0cnVlXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXREcmF3UmFuZ2VzKCkge1xyXG4gICAgc3VwZXIucmVzZXREcmF3UmFuZ2VzKClcclxuICAgIHRoaXMucHJpbWl0aXZlLm1hdGVyaWFsID0gW3RoaXMuYmF0Y2hNYXRlcmlhbF1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRDdXJyZW50SW5kZXhCdWZmZXIoKTogQnVmZmVyQXR0cmlidXRlIHtcclxuICAgIC8qKiBDYXRlcmluZyB0byB0eXBlc2NyaXB0XHJcbiAgICAgKiBUaGVyZSBpcyBubyB1bm5pdmVyc2Ugd2hlcmUgdGhlIGdlb21ldHJ5IGlzIG5vbi1pbmRleGVkLiBXZSdyZSAqKmV4cGxpY2l0bHkqKiBzZXR0aW5nIHRoZSBpbmRleCBhdCBjcmVhdGlvbiB0aW1lXHJcbiAgICAgKi9cclxuICAgIGlmICghdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuaW5kZXgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGluZGV4IGJ1ZmZlciBmb3IgYmF0Y2ggJHt0aGlzLmlkfWApXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuaW5kZXhcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXROZXh0SW5kZXhCdWZmZXIoKTogQnVmZmVyQXR0cmlidXRlIHtcclxuICAgIC8qKiBDYXRlcmluZyB0byB0eXBlc2NyaXB0XHJcbiAgICAgKiBUaGVyZSBpcyBubyB1bm5pdmVyc2Ugd2hlcmUgdGhlIGdlb21ldHJ5IGlzIG5vbi1pbmRleGVkLiBXZSdyZSAqKmV4cGxpY2l0bHkqKiBzZXR0aW5nIHRoZSBpbmRleCBhdCBjcmVhdGlvbiB0aW1lXHJcbiAgICAgKi9cclxuICAgIGlmICghdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuaW5kZXgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGluZGV4IGJ1ZmZlciBmb3IgYmF0Y2ggJHt0aGlzLmlkfWApXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEJ1ZmZlckF0dHJpYnV0ZShcclxuICAgICAgKHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmluZGV4LmFycmF5IGFzIFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkpLnNsaWNlKCksXHJcbiAgICAgIHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmluZGV4Lml0ZW1TaXplXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2h1ZmZsZU1hdGVyaWFsT3JkZXIoYTogRHJhd0dyb3VwLCBiOiBEcmF3R3JvdXApOiBudW1iZXIge1xyXG4gICAgY29uc3QgbWF0ZXJpYWxBOiBNYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxzW2EubWF0ZXJpYWxJbmRleF1cclxuICAgIGNvbnN0IG1hdGVyaWFsQjogTWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsc1tiLm1hdGVyaWFsSW5kZXhdXHJcbiAgICBjb25zdCB2aXNpYmxlT3JkZXIgPSArbWF0ZXJpYWxCLnZpc2libGUgLSArbWF0ZXJpYWxBLnZpc2libGVcclxuICAgIGNvbnN0IHRyYW5zcGFyZW50T3JkZXIgPSArbWF0ZXJpYWxBLnRyYW5zcGFyZW50IC0gK21hdGVyaWFsQi50cmFuc3BhcmVudFxyXG4gICAgaWYgKHZpc2libGVPcmRlciAhPT0gMCkgcmV0dXJuIHZpc2libGVPcmRlclxyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50T3JkZXJcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVHcmFkaWVudEluZGV4QnVmZmVyRGF0YShcclxuICAgIHN0YXJ0OiBudW1iZXIsXHJcbiAgICBlbmQ6IG51bWJlcixcclxuICAgIHZhbHVlOiBudW1iZXJcclxuICApOiB7IG1pbkluZGV4OiBudW1iZXI7IG1heEluZGV4OiBudW1iZXIgfSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ncmFkaWVudEluZGV4QnVmZmVyXHJcbiAgICA7KGRhdGEuYXJyYXkgYXMgRmxvYXQzMkFycmF5KS5maWxsKHZhbHVlLCBzdGFydCwgZW5kKVxyXG4gICAgdGhpcy5ncmFkaWVudEluZGV4QnVmZmVyLnVwZGF0ZVJhbmdlID0ge1xyXG4gICAgICBvZmZzZXQ6IHN0YXJ0LFxyXG4gICAgICBjb3VudDogZW5kIC0gc3RhcnRcclxuICAgIH1cclxuICAgIHRoaXMuZ3JhZGllbnRJbmRleEJ1ZmZlci5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHRoaXMucHJpbWl0aXZlLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2dyYWRpZW50SW5kZXgnXS5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1pbkluZGV4OiBzdGFydCxcclxuICAgICAgbWF4SW5kZXg6IGVuZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1aWxkQmF0Y2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgYXR0cmlidXRlQ291bnQgPSAwXHJcbiAgICBjb25zdCBydkFBQkI6IEJveDMgPSBuZXcgQm94MygpXHJcbiAgICBjb25zdCBib3VuZHMgPSBuZXcgQm94MygpXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMucmVuZGVyVmlld3MubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgZXJ2ZWUgPSB0aGlzLnJlbmRlclZpZXdzW2tdXHJcbiAgICAgIC8qKiBDYXRlcmluZyB0byB0eXBlc2NyaXB0XHJcbiAgICAgICAqICBUaGVyZSBpcyBubyB1bm5pdmVyc2Ugd2hlcmUgaW5kaWNlcyBvciBwb3NpdGlvbnMgYXJlIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50XHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAoIWVydmVlLnJlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGJ1aWxkIGJhdGNoICR7dGhpcy5pZH0uIEludmFsaWQgZ2VvbWV0cnksIG9yIGluZGljZXNgKVxyXG4gICAgICB9XHJcbiAgICAgIGF0dHJpYnV0ZUNvdW50ICs9IGVydmVlLnJlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5sZW5ndGhcclxuICAgICAgYm91bmRzLnVuaW9uKGVydmVlLmFhYmIpXHJcbiAgICB9XHJcbiAgICBjb25zdCBuZWVkc1JURSA9IEdlb21ldHJ5Lm5lZWRzUlRFKGJvdW5kcylcclxuICAgIGNvbnN0IGhhc1ZlcnRleENvbG9ycyA9XHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3NbMF0ucmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzPy5DT0xPUiAhPT0gdW5kZWZpbmVkXHJcbiAgICBjb25zdCBuZWVkc0ludDMySW5kaWNlcyA9IGF0dHJpYnV0ZUNvdW50ID49IDY1NTM1XHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IG5lZWRzUlRFXHJcbiAgICAgID8gbmV3IEZsb2F0NjRBcnJheShhdHRyaWJ1dGVDb3VudClcclxuICAgICAgOiBuZXcgRmxvYXQzMkFycmF5KGF0dHJpYnV0ZUNvdW50KVxyXG4gICAgY29uc3QgY29sb3IgPSBuZXcgRmxvYXQzMkFycmF5KGhhc1ZlcnRleENvbG9ycyA/IGF0dHJpYnV0ZUNvdW50IDogMCkuZmlsbCgxKVxyXG4gICAgY29uc3QgaW5kZXggPSBuZWVkc0ludDMySW5kaWNlc1xyXG4gICAgICA/IG5ldyBVaW50MzJBcnJheShhdHRyaWJ1dGVDb3VudCAvIDMpXHJcbiAgICAgIDogbmV3IFVpbnQxNkFycmF5KGF0dHJpYnV0ZUNvdW50IC8gMylcclxuICAgIGxldCBvZmZzZXQgPSAwXHJcbiAgICBsZXQgaW5kZXhPZmZzZXQgPSAwXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMucmVuZGVyVmlld3MubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLnJlbmRlclZpZXdzW2tdLnJlbmRlckRhdGEuZ2VvbWV0cnlcclxuICAgICAgaWYgKCFnZW9tZXRyeS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYnVpbGQgYmF0Y2ggJHt0aGlzLmlkfS4gSW52YWxpZCBnZW9tZXRyeSwgb3IgaW5kaWNlc2ApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXM/LlBPU0lUSU9OLmNvcHlUb0J1ZmZlcihwb3NpdGlvbiwgb2Zmc2V0KVxyXG4gICAgICBjb25zdCBwb3NpdGlvblN1YmFycmF5ID0gcG9zaXRpb24uc3ViYXJyYXkoXHJcbiAgICAgICAgb2Zmc2V0LFxyXG4gICAgICAgIG9mZnNldCArXHJcbiAgICAgICAgICAodGhpcy5yZW5kZXJWaWV3c1trXS5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXM/LlBPU0lUSU9OLmxlbmd0aCA/PyAwKVxyXG4gICAgICApXHJcblxyXG4gICAgICBHZW9tZXRyeS50cmFuc2Zvcm1BcnJheShcclxuICAgICAgICBwb3NpdGlvblN1YmFycmF5LFxyXG4gICAgICAgIGdlb21ldHJ5LnRyYW5zZm9ybSxcclxuICAgICAgICAwLFxyXG4gICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXM/LlBPU0lUSU9OLmxlbmd0aFxyXG4gICAgICApXHJcbiAgICAgIGlmIChnZW9tZXRyeS5hdHRyaWJ1dGVzLkNPTE9SKSB7XHJcbiAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlcz8uQ09MT1IuY29weVRvQnVmZmVyKGNvbG9yLCBvZmZzZXQpXHJcbiAgICAgIH1cclxuICAgICAgaW5kZXguc2V0KFxyXG4gICAgICAgIChuZWVkc0ludDMySW5kaWNlc1xyXG4gICAgICAgICAgPyBuZXcgVWludDMyQXJyYXkoZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5sZW5ndGggLyAzKVxyXG4gICAgICAgICAgOiBuZXcgVWludDE2QXJyYXkoZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5sZW5ndGggLyAzKVxyXG4gICAgICAgICkubWFwKChfdmFsdWUsIGluZGV4KSA9PiBpbmRleCArIGluZGV4T2Zmc2V0KSxcclxuICAgICAgICBpbmRleE9mZnNldFxyXG4gICAgICApXHJcblxyXG4gICAgICAvKiogV2UgcmUtY29tcHV0ZSB0aGUgcmVuZGVyIHZpZXcgYWFiYiBiYXNlZCBvbiB0cmFuc2Zvcm1lZCBnZW9tZXRyeVxyXG4gICAgICAgKiAgV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgdHJhbnNmb3JtcyBsaWtlIG5vbi11bmlmb3JtIHNjYWxpbmcgY2FuIHByb2R1Y2UgaW5jb3JyZWN0IHJlc3VsdHNcclxuICAgICAgICogIGlmIHdlIGNvbXB1dGUgYW4gYWFiYiBmcm9tIG9yaWdpbmFsIGdlb21ldHJ5IHRoZW4gYXBwbHkgdGhlIHRyYW5zZm9ybS4gVGhhdCdzIHdoeSB3ZSBjb21wdXRlXHJcbiAgICAgICAqICBhbiBhYWJiIGZyb20gdGhlIHRyYW5zZm9ybWVkIGdlb21ldHJ5IGhlcmUgYW5kIHNldCBpdCBpbiB0aGUgcnZcclxuICAgICAgICovXHJcbiAgICAgIHJ2QUFCQi5zZXRGcm9tQXJyYXkocG9zaXRpb25TdWJhcnJheSlcclxuICAgICAgdGhpcy5yZW5kZXJWaWV3c1trXS5hYWJiID0gcnZBQUJCXHJcblxyXG4gICAgICB0aGlzLnJlbmRlclZpZXdzW2tdLnNldEJhdGNoRGF0YShcclxuICAgICAgICB0aGlzLmlkLFxyXG4gICAgICAgIG9mZnNldCAvIDMsXHJcbiAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5sZW5ndGggLyAzXHJcbiAgICAgIClcclxuXHJcbiAgICAgIG9mZnNldCArPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLlBPU0lUSU9OLmxlbmd0aFxyXG4gICAgICBpbmRleE9mZnNldCArPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLlBPU0lUSU9OLmxlbmd0aCAvIDNcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3Nba10uZGlzcG9zZUdlb21ldHJ5KClcclxuICAgIH1cclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5tYWtlUG9pbnRHZW9tZXRyeShpbmRleCwgcG9zaXRpb24sIGNvbG9yKVxyXG5cclxuICAgIGlmIChuZWVkc1JURSkge1xyXG4gICAgICBHZW9tZXRyeS51cGRhdGVSVEVHZW9tZXRyeShnZW9tZXRyeSwgcG9zaXRpb24pXHJcbiAgICAgIGlmICghdGhpcy5iYXRjaE1hdGVyaWFsLmRlZmluZXMpIHRoaXMuYmF0Y2hNYXRlcmlhbC5kZWZpbmVzID0ge31cclxuICAgICAgdGhpcy5iYXRjaE1hdGVyaWFsLmRlZmluZXNbJ1VTRV9SVEUnXSA9ICcgJ1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJpbWl0aXZlID0gbmV3IFBvaW50cyhnZW9tZXRyeSwgdGhpcy5iYXRjaE1hdGVyaWFsKVxyXG4gICAgdGhpcy5wcmltaXRpdmUubWF0ZXJpYWwgPSBbdGhpcy5iYXRjaE1hdGVyaWFsXVxyXG4gICAgdGhpcy5wcmltaXRpdmUuZ2VvbWV0cnkuYWRkR3JvdXAoMCwgdGhpcy5nZXRDb3VudCgpLCAwKVxyXG4gICAgdGhpcy5wcmltaXRpdmUudXVpZCA9IHRoaXMuaWRcclxuICAgIHRoaXMucHJpbWl0aXZlLmxheWVycy5zZXQoXHJcbiAgICAgIHRoaXMucmVuZGVyVmlld3NbMF0uZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUE9JTlRcclxuICAgICAgICA/IE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVFxyXG4gICAgICAgIDogT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5UX0NMT1VEXHJcbiAgICApXHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWFrZVBvaW50R2VvbWV0cnkoXHJcbiAgICBpbmRleDogVWludDMyQXJyYXkgfCBVaW50MTZBcnJheSxcclxuICAgIHBvc2l0aW9uOiBGbG9hdDY0QXJyYXkgfCBGbG9hdDMyQXJyYXksXHJcbiAgICBjb2xvcjogRmxvYXQzMkFycmF5XHJcbiAgKTogQnVmZmVyR2VvbWV0cnkge1xyXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKVxyXG5cclxuICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbiwgMykpXHJcbiAgICBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ2NvbG9yJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoY29sb3IsIDMpKVxyXG4gICAgaWYgKHBvc2l0aW9uLmxlbmd0aCA+PSA2NTUzNSB8fCBpbmRleC5sZW5ndGggPj0gNjU1MzUpIHtcclxuICAgICAgZ2VvbWV0cnkuc2V0SW5kZXgobmV3IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZShpbmRleCwgMSkpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBnZW9tZXRyeS5zZXRJbmRleChuZXcgVWludDE2QnVmZmVyQXR0cmlidXRlKGluZGV4LCAxKSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9uLmxlbmd0aCAvIDMpXHJcbiAgICB0aGlzLmdyYWRpZW50SW5kZXhCdWZmZXIgPSBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShidWZmZXIsIDEpXHJcbiAgICB0aGlzLmdyYWRpZW50SW5kZXhCdWZmZXIuc2V0VXNhZ2UoRHluYW1pY0RyYXdVc2FnZSlcclxuICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnZ3JhZGllbnRJbmRleCcsIHRoaXMuZ3JhZGllbnRJbmRleEJ1ZmZlcilcclxuXHJcbiAgICBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKVxyXG4gICAgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KClcclxuXHJcbiAgICByZXR1cm4gZ2VvbWV0cnlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJWaWV3KGluZGV4OiBudW1iZXIpOiBOb2RlUmVuZGVyVmlldyB8IG51bGwge1xyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLnJlbmRlclZpZXdzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBpbmRleCA+PSB0aGlzLnJlbmRlclZpZXdzW2tdLmJhdGNoU3RhcnQgJiZcclxuICAgICAgICBpbmRleCA8IHRoaXMucmVuZGVyVmlld3Nba10uYmF0Y2hFbmRcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVmlld3Nba11cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcbiAgcHVibGljIGdldE1hdGVyaWFsQXRJbmRleChpbmRleDogbnVtYmVyKTogTWF0ZXJpYWwgfCBudWxsIHtcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5yZW5kZXJWaWV3cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaW5kZXggPj0gdGhpcy5yZW5kZXJWaWV3c1trXS5iYXRjaFN0YXJ0ICYmXHJcbiAgICAgICAgaW5kZXggPCB0aGlzLnJlbmRlclZpZXdzW2tdLmJhdGNoRW5kXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IHJ2ID0gdGhpcy5yZW5kZXJWaWV3c1trXVxyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuZmluZCgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHJ2LmJhdGNoU3RhcnQgPj0gdmFsdWUuc3RhcnQgJiZcclxuICAgICAgICAgICAgcnYuYmF0Y2hTdGFydCArIHJ2LmJhdGNoQ291bnQgPD0gdmFsdWUuY291bnQgKyB2YWx1ZS5zdGFydFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKCFncm91cCkge1xyXG4gICAgICAgICAgTG9nZ2VyLndhcm4oYE1hbGZvcm1lZCBtYXRlcmlhbCBpbmRleCFgKVxyXG4gICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWxzW2dyb3VwLm1hdGVyaWFsSW5kZXhdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQ2FtZXJhLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE9ydGhvZ3JhcGhpY0NhbWVyYSxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBQbGFuZSxcclxuICBTY2VuZSxcclxuICBXZWJHTFJlbmRlcmVyLFxyXG4gIFdlYkdMUmVuZGVyVGFyZ2V0XHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IE9iamVjdExheWVycyB9IGZyb20gJy4uLy4uLy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCB7IEJhdGNoVXBkYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi9iYXRjaGluZy9CYXRjaC5qcydcclxuaW1wb3J0IFNwZWNrbGVSZW5kZXJlciBmcm9tICcuLi8uLi9TcGVja2xlUmVuZGVyZXIuanMnXHJcblxyXG5leHBvcnQgZW51bSBPYmplY3RWaXNpYmlsaXR5IHtcclxuICBPUEFRVUUgPSAnb3BhcXVlJyxcclxuICBUUkFOU1BBUkVOVCA9ICd0cmFuc3BhcmVudCcsXHJcbiAgREVQVEggPSAnZGVwdGgnLFxyXG4gIFNURU5DSUwgPSAnc3RlbmNpbCcsXHJcbiAgQ1VTVE9NID0gJ2N1c3RvbSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ2xlYXJGbGFncyB7XHJcbiAgQ09MT1IgPSAweDAwMDAwMTAwLFxyXG4gIERFUFRIID0gMHgwMDAwMDQwMCxcclxuICBTVEVOQ0lMID0gMHgwMDAwNDAwMFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhc3NPcHRpb25zIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdQYXNzIHtcclxuICBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nXHJcbiAgc2V0IG91dHB1dFRhcmdldCh2YWx1ZTogV2ViR0xSZW5kZXJUYXJnZXQpXHJcbiAgZ2V0IG91dHB1dFRhcmdldCgpOiBXZWJHTFJlbmRlclRhcmdldCB8IG51bGxcclxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuXHJcbiAgc2V0IGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pXHJcbiAgc2V0IG9wdGlvbnModmFsdWU6IFBhc3NPcHRpb25zKVxyXG4gIGdldCB2aXNpYmlsaXR5KCk6IE9iamVjdFZpc2liaWxpdHkgfCBudWxsXHJcbiAgZ2V0IG92ZXJyaWRlTWF0ZXJpYWwoKTogTWF0ZXJpYWwgfCBudWxsXHJcbiAgZ2V0IG92ZXJyaWRlQmF0Y2hNYXRlcmlhbCgpOiBNYXRlcmlhbCB8IG51bGxcclxuICBnZXQgaml0dGVyKCk6IGJvb2xlYW5cclxuICBnZXQgY2xlYXJDb2xvcigpOiBudW1iZXIgfCB1bmRlZmluZWRcclxuICBnZXQgY2xlYXJBbHBoYSgpOiBudW1iZXIgfCB1bmRlZmluZWRcclxuICBnZXQgY2xlYXJGbGFncygpOiBudW1iZXIgfCB1bmRlZmluZWRcclxuICBnZXQgdmlzaWJpbGl0eUZ1bmN0aW9uKCk6XHJcbiAgICB8ICgocmVuZGVyZXI6IFNwZWNrbGVSZW5kZXJlcikgPT4gUmVjb3JkPHN0cmluZywgQmF0Y2hVcGRhdGVSYW5nZT4pXHJcbiAgICB8IHVuZGVmaW5lZFxyXG5cclxuICBzZXRTaXplPyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWRcclxuICBvbkJlZm9yZVJlbmRlcj86ICgpID0+IHZvaWRcclxuICBvbkFmZXJSZW5kZXI/OiAoKSA9PiB2b2lkXHJcbiAgdXBkYXRlPyhjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhIHwgbnVsbCk6IHZvaWRcclxuICByZW5kZXI/KFxyXG4gICAgcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIsXHJcbiAgICBjYW1lcmE/OiBQZXJzcGVjdGl2ZUNhbWVyYSB8IE9ydGhvZ3JhcGhpY0NhbWVyYSB8IG51bGwsXHJcbiAgICBzY2VuZT86IFNjZW5lXHJcbiAgKTogYm9vbGVhblxyXG4gIHNldENsZWFyQ29sb3IoY29sb3I6IG51bWJlciwgYWxwaGE6IG51bWJlcik6IHZvaWRcclxuICBzZXRDbGVhckZsYWdzKGZsYWdzOiBudW1iZXIpOiB2b2lkXHJcbiAgc2V0Q2xpcHBpbmdQbGFuZXM/KHBsYW5lczogUGxhbmVbXSk6IHZvaWRcclxuICBzZXRMYXllcnM/KGxheWVyczogT2JqZWN0TGF5ZXJzW10pOiB2b2lkXHJcbiAgc2V0VmlzaWJpbGl0eT8oXHJcbiAgICBvYmplY3RWaXNpYmlsaXR5OiBPYmplY3RWaXNpYmlsaXR5LFxyXG4gICAgdmlzaWJpbGl0eUZ1bmN0aW9uPzogKHJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXIpID0+IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+XHJcbiAgKTogdm9pZFxyXG4gIHNldEppdHRlcih2YWx1ZTogYm9vbGVhbik6IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VHUGFzcyBpbXBsZW1lbnRzIEdQYXNzIHtcclxuICBwcm90ZWN0ZWQgX2VuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlXHJcbiAgcHJvdGVjdGVkIGxheWVyczogT2JqZWN0TGF5ZXJzW10gfCBudWxsID0gbnVsbFxyXG4gIHByb3RlY3RlZCBfZW5hYmxlZExheWVyczogT2JqZWN0TGF5ZXJzW10gPSBbXVxyXG4gIHByb3RlY3RlZCBfb2JqZWN0VmlzaWJpbGl0eTogT2JqZWN0VmlzaWJpbGl0eSB8IG51bGwgPSBudWxsXHJcbiAgcHJvdGVjdGVkIF9qaXR0ZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHByb3RlY3RlZCBfb3B0aW9uczogUGFzc09wdGlvbnMgPSB7fVxyXG4gIHByb3RlY3RlZCBfY2xlYXJDb2xvcjogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXHJcbiAgcHJvdGVjdGVkIF9jbGVhckFscGhhOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcclxuICBwcm90ZWN0ZWQgX2NsZWFyRmxhZ3M6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG5cclxuICBwcm90ZWN0ZWQgX291dHB1dFRhcmdldDogV2ViR0xSZW5kZXJUYXJnZXQgfCBudWxsID0gbnVsbFxyXG5cclxuICBwdWJsaWMgb25CZWZvcmVSZW5kZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcclxuICBwcm90ZWN0ZWQgX3Zpc2liaWxpdHlGdW5jdGlvbjpcclxuICAgIHwgKChyZW5kZXJlcjogU3BlY2tsZVJlbmRlcmVyKSA9PiBSZWNvcmQ8c3RyaW5nLCBCYXRjaFVwZGF0ZVJhbmdlPilcclxuICAgIHwgdW5kZWZpbmVkID0gKCkgPT4ge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmRlZmluZWQgdmlzaWJpbGl0eSBmdW5jdGlvbicpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGVuYWJsZWRMYXllcnMoKTogT2JqZWN0TGF5ZXJzW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRMYXllcnNcclxuICB9XHJcblxyXG4gIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdCQVNFJ1xyXG4gIH1cclxuICBnZXQgb3V0cHV0VGFyZ2V0KCk6IFdlYkdMUmVuZGVyVGFyZ2V0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGFyZ2V0XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0cHV0VGFyZ2V0KHZhbHVlOiBXZWJHTFJlbmRlclRhcmdldCB8IG51bGwpIHtcclxuICAgIHRoaXMuX291dHB1dFRhcmdldCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmFibGVkXHJcbiAgfVxyXG5cclxuICBzZXQgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBzZXQgb3B0aW9ucyh2YWx1ZTogUGFzc09wdGlvbnMpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBnZXQgdmlzaWJpbGl0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9vYmplY3RWaXNpYmlsaXR5XHJcbiAgfVxyXG5cclxuICBnZXQgb3ZlcnJpZGVNYXRlcmlhbCgpOiBNYXRlcmlhbCB8IG51bGwge1xyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIGdldCBvdmVycmlkZUJhdGNoTWF0ZXJpYWwoKTogTWF0ZXJpYWwgfCBudWxsIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBnZXQgaml0dGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ppdHRlclxyXG4gIH1cclxuXHJcbiAgZ2V0IGNsZWFyQ29sb3IoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGVhckNvbG9yXHJcbiAgfVxyXG5cclxuICBnZXQgY2xlYXJBbHBoYSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyQWxwaGFcclxuICB9XHJcblxyXG4gIGdldCBjbGVhckZsYWdzKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xlYXJGbGFnc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2aXNpYmlsaXR5RnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJpbGl0eUZ1bmN0aW9uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q2xlYXJDb2xvcihjb2xvcjogbnVtYmVyLCBhbHBoYTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jbGVhckNvbG9yID0gY29sb3JcclxuICAgIHRoaXMuX2NsZWFyQWxwaGEgPSBhbHBoYVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENsZWFyRmxhZ3MoZmxhZ3M6IG51bWJlcikge1xyXG4gICAgdGhpcy5fY2xlYXJGbGFncyA9IGZsYWdzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TGF5ZXJzKGxheWVyczogT2JqZWN0TGF5ZXJzW10pIHtcclxuICAgIHRoaXMubGF5ZXJzID0gbGF5ZXJzXHJcbiAgICB0aGlzLl9lbmFibGVkTGF5ZXJzID0gbGF5ZXJzLnNsaWNlKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbmFibGVMYXllcihsYXllcjogT2JqZWN0TGF5ZXJzLCB2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWRMYXllcnMuaW5jbHVkZXMobGF5ZXIpKSB7XHJcbiAgICAgIGlmICghdmFsdWUpIHRoaXMuX2VuYWJsZWRMYXllcnMuc3BsaWNlKHRoaXMuX2VuYWJsZWRMYXllcnMuaW5kZXhPZihsYXllciksIDEpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodmFsdWUpIHRoaXMuX2VuYWJsZWRMYXllcnMucHVzaChsYXllcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmlsaXR5KFxyXG4gICAgb2JqZWN0VmlzaWJpbGl0eTogT2JqZWN0VmlzaWJpbGl0eSB8IG51bGwsXHJcbiAgICB2aXNpYmlsaXR5RnVuY3Rpb24/OiAocmVuZGVyZXI6IFNwZWNrbGVSZW5kZXJlcikgPT4gUmVjb3JkPHN0cmluZywgQmF0Y2hVcGRhdGVSYW5nZT5cclxuICApIHtcclxuICAgIHRoaXMuX29iamVjdFZpc2liaWxpdHkgPSBvYmplY3RWaXNpYmlsaXR5XHJcbiAgICBpZiAob2JqZWN0VmlzaWJpbGl0eSA9PT0gT2JqZWN0VmlzaWJpbGl0eS5DVVNUT00pXHJcbiAgICAgIHRoaXMuX3Zpc2liaWxpdHlGdW5jdGlvbiA9IHZpc2liaWxpdHlGdW5jdGlvblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEppdHRlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faml0dGVyID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhcHBseUxheWVycyhjYW1lcmE6IENhbWVyYSB8IG51bGwpIHtcclxuICAgIGlmIChjYW1lcmEgPT09IG51bGwpIHJldHVyblxyXG5cclxuICAgIGlmICh0aGlzLmxheWVycyA9PT0gbnVsbCkge1xyXG4gICAgICBjYW1lcmEubGF5ZXJzLmVuYWJsZUFsbCgpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgY2FtZXJhLmxheWVycy5kaXNhYmxlQWxsKClcclxuICAgIHRoaXMubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9lbmFibGVkTGF5ZXJzLmluY2x1ZGVzKGxheWVyKSkgY2FtZXJhLmxheWVycy5lbmFibGUobGF5ZXIpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNsZWFyKHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyKSB7XHJcbiAgICBpZiAodGhpcy5fY2xlYXJDb2xvciAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICByZW5kZXJlci5zZXRDbGVhckNvbG9yKHRoaXMuX2NsZWFyQ29sb3IsIHRoaXMuX2NsZWFyQWxwaGEgfHwgMClcclxuICAgIGlmICh0aGlzLl9jbGVhckNvbG9yICE9PSB1bmRlZmluZWQgfHwgdGhpcy5fY2xlYXJGbGFncyAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICByZW5kZXJlci5jbGVhcihcclxuICAgICAgICB0aGlzLl9jbGVhckNvbG9yICE9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICh0aGlzLl9jbGVhckZsYWdzICE9PSB1bmRlZmluZWQgJiYgISEodGhpcy5fY2xlYXJGbGFncyAmIENsZWFyRmxhZ3MuQ09MT1IpKSxcclxuICAgICAgICB0aGlzLl9jbGVhckZsYWdzICE9PSB1bmRlZmluZWQgJiYgISEodGhpcy5fY2xlYXJGbGFncyAmIENsZWFyRmxhZ3MuREVQVEgpLFxyXG4gICAgICAgIHRoaXMuX2NsZWFyRmxhZ3MgIT09IHVuZGVmaW5lZCAmJiAhISh0aGlzLl9jbGVhckZsYWdzICYgQ2xlYXJGbGFncy5TVEVOQ0lMKVxyXG4gICAgICApXHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCByZW5kZXIoXHJcbiAgICByZW5kZXJlcjogV2ViR0xSZW5kZXJlcixcclxuICAgIGNhbWVyYT86IFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhIHwgbnVsbCxcclxuICAgIHNjZW5lPzogU2NlbmVcclxuICApOiBib29sZWFuXHJcblxyXG4gIHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9vdXRwdXRUYXJnZXQ/LnNldFNpemUod2lkdGgsIGhlaWdodClcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcm9ncmVzc2l2ZUdQYXNzIGV4dGVuZHMgQmFzZUdQYXNzIHtcclxuICBwcm90ZWN0ZWQgX2ZyYW1lSW5kZXggPSAwXHJcbiAgcHJvdGVjdGVkIF9hY2N1bXVsYXRpb25GcmFtZXMgPSAwXHJcblxyXG4gIGdldCBmcmFtZUluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJhbWVJbmRleFxyXG4gIH1cclxuICBzZXQgZnJhbWVJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9mcmFtZUluZGV4ID0gdmFsdWVcclxuICB9XHJcblxyXG4gIGdldCBhY2N1bXVsYXRpb25GcmFtZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hY2N1bXVsYXRpb25GcmFtZXNcclxuICB9XHJcbiAgc2V0IGFjY3VtdWxhdGlvbkZyYW1lcyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9hY2N1bXVsYXRpb25GcmFtZXMgPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcihcclxuICAgIHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLFxyXG4gICAgY2FtZXJhPzogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEgfCBudWxsLFxyXG4gICAgc2NlbmU/OiBTY2VuZVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgLyoqIFRoYW5rIHlvdSBlc2xpbnQgKi9cclxuICAgIHJlbmRlcmVyXHJcbiAgICBjYW1lcmFcclxuICAgIHNjZW5lXHJcbiAgICBpZiAodGhpcy5fZnJhbWVJbmRleCA+PSB0aGlzLl9hY2N1bXVsYXRpb25GcmFtZXMgLSAxKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQm94MywgTWF0aFV0aWxzLCBNYXRyaXg0LCBXZWJHTENhcGFiaWxpdGllcyB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgTGluZUJhdGNoIGZyb20gJy4vTGluZUJhdGNoLmpzJ1xyXG5pbXBvcnQgTWF0ZXJpYWxzLCB7XHJcbiAgRmlsdGVyTWF0ZXJpYWxUeXBlLFxyXG4gIE1pbmltYWxNYXRlcmlhbCxcclxuICB0eXBlIERpc3BsYXlTdHlsZSxcclxuICB0eXBlIFJlbmRlck1hdGVyaWFsXHJcbn0gZnJvbSAnLi4vbWF0ZXJpYWxzL01hdGVyaWFscy5qcydcclxuaW1wb3J0IHsgTm9kZVJlbmRlclZpZXcgfSBmcm9tICcuLi90cmVlL05vZGVSZW5kZXJWaWV3LmpzJ1xyXG5pbXBvcnQge1xyXG4gIHR5cGUgQmF0Y2gsXHJcbiAgdHlwZSBCYXRjaFVwZGF0ZVJhbmdlLFxyXG4gIEdlb21ldHJ5VHlwZSxcclxuICBOb25lQmF0Y2hVcGRhdGVSYW5nZVxyXG59IGZyb20gJy4vQmF0Y2guanMnXHJcbmltcG9ydCB7IE1hdGVyaWFsLCBXZWJHTFJlbmRlcmVyIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEFzeW5jUGF1c2UgfSBmcm9tICcuLi9Xb3JsZC5qcydcclxuaW1wb3J0IHsgUmVuZGVyVHJlZSB9IGZyb20gJy4uL3RyZWUvUmVuZGVyVHJlZS5qcydcclxuaW1wb3J0IFRleHRCYXRjaCBmcm9tICcuL1RleHRCYXRjaC5qcydcclxuaW1wb3J0IFNwZWNrbGVNZXNoLCB7IFRyYW5zZm9ybVN0b3JhZ2UgfSBmcm9tICcuLi9vYmplY3RzL1NwZWNrbGVNZXNoLmpzJ1xyXG5pbXBvcnQgeyBTcGVja2xlVHlwZSB9IGZyb20gJy4uL2xvYWRlcnMvR2VvbWV0cnlDb252ZXJ0ZXIuanMnXHJcbmltcG9ydCB7IHR5cGUgVHJlZU5vZGUsIFdvcmxkVHJlZSB9IGZyb20gJy4uLy4uL2luZGV4LmpzJ1xyXG5pbXBvcnQgeyBJbnN0YW5jZWRNZXNoQmF0Y2ggfSBmcm9tICcuL0luc3RhbmNlZE1lc2hCYXRjaC5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnksIEdlb21ldHJ5RGF0YSB9IGZyb20gJy4uL2NvbnZlcnRlci9HZW9tZXRyeS5qcydcclxuaW1wb3J0IHsgTWVzaEJhdGNoIH0gZnJvbSAnLi9NZXNoQmF0Y2guanMnXHJcbmltcG9ydCB7IFBvaW50QmF0Y2ggfSBmcm9tICcuL1BvaW50QmF0Y2guanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RWaXNpYmlsaXR5IH0gZnJvbSAnLi4vcGlwZWxpbmUvUGFzc2VzL0dQYXNzLmpzJ1xyXG5cclxudHlwZSBCYXRjaFR5cGVNYXAgPSB7XHJcbiAgW0dlb21ldHJ5VHlwZS5NRVNIXTogTWVzaEJhdGNoXHJcbiAgW0dlb21ldHJ5VHlwZS5MSU5FXTogTGluZUJhdGNoXHJcbiAgW0dlb21ldHJ5VHlwZS5QT0lOVF06IFBvaW50QmF0Y2hcclxuICBbR2VvbWV0cnlUeXBlLlBPSU5UX0NMT1VEXTogUG9pbnRCYXRjaFxyXG4gIFtHZW9tZXRyeVR5cGUuVEVYVF06IFRleHRCYXRjaFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXRjaGVyIHtcclxuICBwcml2YXRlIGNhcHM6IFdlYkdMQ2FwYWJpbGl0aWVzXHJcbiAgcHJpdmF0ZSBtYXhCYXRjaE9iamVjdHMgPSAwXHJcbiAgcHJpdmF0ZSBtYXhCYXRjaFZlcnRpY2VzID0gNTAwMDAwXHJcbiAgcHJpdmF0ZSBtaW5JbnN0YW5jZWRCYXRjaFZlcnRpY2VzID0gMTAwMDBcclxuICBwcml2YXRlIG1heEJhdGNoVGV4dE9iamVjdHMgPSA1MDAwXHJcbiAgcHVibGljIG1hdGVyaWFsczogTWF0ZXJpYWxzXHJcbiAgcHVibGljIGJhdGNoZXM6IHsgW2lkOiBzdHJpbmddOiBCYXRjaCB9ID0ge31cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKGNhcHM6IFdlYkdMQ2FwYWJpbGl0aWVzKSB7XHJcbiAgICB0aGlzLmNhcHMgPSBjYXBzXHJcbiAgICB0aGlzLm1heEJhdGNoT2JqZWN0cyA9IE1hdGguZmxvb3IoXHJcbiAgICAgICh0aGlzLmNhcHMubWF4VmVydGV4VW5pZm9ybXMgLSBNYXRlcmlhbHMuVU5JRk9STV9WRUNUT1JTX1VTRUQpIC8gNFxyXG4gICAgKVxyXG4gICAgdGhpcy5tYXRlcmlhbHMgPSBuZXcgTWF0ZXJpYWxzKClcclxuICAgIHZvaWQgdGhpcy5tYXRlcmlhbHMuY3JlYXRlRGVmYXVsdE1hdGVyaWFscygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgKm1ha2VCYXRjaGVzKFxyXG4gICAgd29ybGRUcmVlOiBXb3JsZFRyZWUsXHJcbiAgICByZW5kZXJUcmVlOiBSZW5kZXJUcmVlLFxyXG4gICAgc3BlY2tsZVR5cGU6IFNwZWNrbGVUeXBlW10sXHJcbiAgICBiYXRjaFR5cGU/OiBHZW9tZXRyeVR5cGVcclxuICApIHtcclxuICAgIGxldCBtaW4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuICAgICAgbWF4ID0gLTEsXHJcbiAgICAgIGF2ZXJhZ2UgPSAwLFxyXG4gICAgICBiYXRjaENvdW50ID0gMFxyXG5cclxuICAgIGNvbnN0IGluc3RhbmNlR3JvdXBzID0gcmVuZGVyVHJlZS5nZXRJbnN0YW5jZXMoKVxyXG4gICAgY29uc3QgaW5zdGFuY2VkQmF0Y2hlczogeyBbaWQ6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSA9IHt9XHJcblxyXG4gICAgY29uc3QgcGF1c2UgPSBuZXcgQXN5bmNQYXVzZSgpXHJcbiAgICBmb3IgKGNvbnN0IGcgaW4gaW5zdGFuY2VHcm91cHMpIHtcclxuICAgICAgcGF1c2UudGljaygxMDApXHJcbiAgICAgIGlmIChwYXVzZS5uZWVkc1dhaXQpIHtcclxuICAgICAgICBhd2FpdCBwYXVzZS53YWl0KDUwKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgaW5zdGFuY2VkTm9kZXMgPSB3b3JsZFRyZWUuZmluZElkKGcsIHJlbmRlclRyZWUuc3VidHJlZUlkKVxyXG4gICAgICBpZiAoIWluc3RhbmNlZE5vZGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBpbnN0YW5jZWROb2RlcyA9IGluc3RhbmNlZE5vZGVzLmZpbHRlcigobm9kZTogVHJlZU5vZGUpID0+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgbm9kZS5tb2RlbC5yZW5kZXJWaWV3ICYmXHJcbiAgICAgICAgICBub2RlLm1vZGVsLnJlbmRlclZpZXcuc3BlY2tsZVR5cGUgPT09IFNwZWNrbGVUeXBlLk1lc2hcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmICghaW5zdGFuY2VkTm9kZXMubGVuZ3RoKSBjb250aW51ZVxyXG5cclxuICAgICAgY29uc3QgdmVydENvdW50ID1cclxuICAgICAgICAoaW5zdGFuY2VkTm9kZXNbMF0ubW9kZWwucmVuZGVyVmlldy5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMuUE9TSVRJT05cclxuICAgICAgICAgIC5sZW5ndGggL1xyXG4gICAgICAgICAgMykgKlxyXG4gICAgICAgIGluc3RhbmNlZE5vZGVzLmxlbmd0aFxyXG5cclxuICAgICAgaWYgKCFpbnN0YW5jZWRCYXRjaGVzW3ZlcnRDb3VudF0pIHtcclxuICAgICAgICBpbnN0YW5jZWRCYXRjaGVzW3ZlcnRDb3VudF0gPSBbXVxyXG4gICAgICB9XHJcbiAgICAgIGluc3RhbmNlZEJhdGNoZXNbdmVydENvdW50XS5wdXNoKGcpXHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHYgaW4gaW5zdGFuY2VkQmF0Y2hlcykge1xyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IGluc3RhbmNlZEJhdGNoZXNbdl0ubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBjb25zdCBub2RlcyA9IHdvcmxkVHJlZS5maW5kSWQoaW5zdGFuY2VkQmF0Y2hlc1t2XVtrXSwgcmVuZGVyVHJlZS5zdWJ0cmVlSWQpXHJcbiAgICAgICAgaWYgKCFub2RlcykgY29udGludWVcclxuICAgICAgICAvKiogTWFrZSBzdXJlIGVudGlyZSBpbnN0YW5jZSBzZXQgaXMgaW5zdGFuY2VkICovXHJcbiAgICAgICAgbGV0IGluc3RhbmNlZCA9IHRydWVcclxuICAgICAgICBub2Rlcy5ldmVyeSgobm9kZTogVHJlZU5vZGUpID0+IChpbnN0YW5jZWQgJiY9IG5vZGUubW9kZWwuaW5zdGFuY2VkKSlcclxuXHJcbiAgICAgICAgY29uc3QgcnZzID0gbm9kZXNcclxuICAgICAgICAgIC5tYXAoKG5vZGU6IFRyZWVOb2RlKSA9PiBub2RlLm1vZGVsLnJlbmRlclZpZXcpXHJcbiAgICAgICAgICAvKiogVGhpcyBkaXNjb25zaWRlcnMgb3JwaGFuZWQgbm9kZXMgY2F1c2VkIGJ5IGluY29ycmVjdCBpZCBkdXBsaWNhdGlvbiBpbiB0aGUgc3RyZWFtICovXHJcbiAgICAgICAgICAuZmlsdGVyKChydjogTm9kZVJlbmRlclZpZXcpID0+IHJ2KVxyXG5cclxuICAgICAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSBpbnN0YW5jZSBnZW9tZXRyeSBuZWVkcyBSVEUgKi9cclxuICAgICAgICBsZXQgbmVlZHNSVEUgPSBHZW9tZXRyeS5uZWVkc1JURShydnNbMF0uYWFiYilcclxuICAgICAgICBpZiAoIW5lZWRzUlRFKSB7XHJcbiAgICAgICAgICAvKiogR2V0IGFsbCB0aGUgdHJhbnNmb3JtcyBmb3IgdGhpcyBpbnN0YW5jZSBnZW9tZXRyeSAqL1xyXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtczogQXJyYXk8TWF0cml4ND4gPSBydnNcclxuICAgICAgICAgICAgLm1hcCgocnY6IE5vZGVSZW5kZXJWaWV3KSA9PiBydi5yZW5kZXJEYXRhLmdlb21ldHJ5LnRyYW5zZm9ybSlcclxuICAgICAgICAgICAgLmZpbHRlcigodCk6IHQgaXMgTWF0cml4NCA9PiB0ICE9PSBudWxsKSAvLyBUaGlzIGlzIGx1bmFjeVxyXG5cclxuICAgICAgICAgIGNvbnN0IHRlc3RCb3g6IEJveDMgPSBuZXcgQm94MygpLmNvcHkocnZzWzBdLmFhYmIpXHJcbiAgICAgICAgICBjb25zdCBzY3JhdGNoQm94OiBCb3gzID0gbmV3IEJveDMoKVxyXG4gICAgICAgICAgLyoqIEdvIHRocm91Z2ggZWFjaCB0cmFuc2Zvcm0gYW5kIHRlc3QuICovXHJcbiAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRyYW5zZm9ybXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgc2NyYXRjaEJveC5jb3B5KHRlc3RCb3gpXHJcbiAgICAgICAgICAgIHNjcmF0Y2hCb3guYXBwbHlNYXRyaXg0KHRyYW5zZm9ybXNba10pXHJcbiAgICAgICAgICAgIG5lZWRzUlRFIHx8PSBHZW9tZXRyeS5uZWVkc1JURShzY3JhdGNoQm94KVxyXG4gICAgICAgICAgICAvKiogSWYgd2UgZmluZCBvbmUgdGhhdCBuZWVkcyBSVEUgd2UgYnJlYWsgZWFybHkgKi9cclxuICAgICAgICAgICAgaWYgKG5lZWRzUlRFKSBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIFdlIGN1cnJlbnRseSBkbyBub3QgdXNlIFJURSB3aXRoIGhhcmR3YXJlIGluc3RhbmNpbmdcclxuICAgICAgICAgKiBFeHBsYW5hdGlvbjogaHR0cHM6Ly93d3cubm90aW9uLnNvL3NwZWNrbGUvT24tZGVtYW5kLVJURS1mYTU3ZmZmMDY4NWM0MzAyYTY5NzBlODFkZjNjYWI1Yj9wdnM9NCMxZmJiNzhmYzdhYTY4MGM0YWNjMGRlODkyOWU5MjkyNFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIE51bWJlci5wYXJzZUludCh2KSA8IHRoaXMubWluSW5zdGFuY2VkQmF0Y2hWZXJ0aWNlcyB8fFxyXG4gICAgICAgICAgIWluc3RhbmNlZCB8fFxyXG4gICAgICAgICAgbmVlZHNSVEVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJ2cy5mb3JFYWNoKChub2RlUnYpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBub2RlUnYucmVuZGVyRGF0YS5nZW9tZXRyeSBhcyBHZW9tZXRyeURhdGFcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5zdGFuY2VkID0gZmFsc2VcclxuICAgICAgICAgICAgbm9kZVJ2LmNvbXB1dGVBQUJCKGdlb21ldHJ5LnRyYW5zZm9ybSlcclxuICAgICAgICAgICAgaWYgKChnZW9tZXRyeS50cmFuc2Zvcm0/LmRldGVybWluYW50KCkgPz8gMCkgPCAwKVxyXG4gICAgICAgICAgICAgIGdlb21ldHJ5LmZsaXBOb3JtYWxzID0gdHJ1ZVxyXG4gICAgICAgICAgICAvKiogSSBkb24ndCB0aGluayB3ZSBuZWVkIHRvIGR1cGxpY2F0ZSBnZW9tZXRyeSBoZXJlLCBub3cgdGhhdCB3ZSdyZSB0cmFuc2Zvcm1pbmcgdGhlIGJhdGNoIHBvc2l0aW9uIGRpcmVjdGx5ICovXHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGF0dHJpYnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgIC8vIGdlb21ldHJ5LmF0dHJpYnV0ZXMgPSB7XHJcbiAgICAgICAgICAgIC8vICAgUE9TSVRJT046IGF0dHJpYnMuUE9TSVRJT04uc2xpY2UoKSxcclxuICAgICAgICAgICAgLy8gICBJTkRFWDogYXR0cmlicy5JTkRFWC5zbGljZSgpLFxyXG4gICAgICAgICAgICAvLyAgIC4uLihhdHRyaWJzLkNPTE9SICYmIHtcclxuICAgICAgICAgICAgLy8gICAgIENPTE9SOiBhdHRyaWJzLkNPTE9SLnNsaWNlKClcclxuICAgICAgICAgICAgLy8gICB9KVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vIC8qKiAgLSBJIGRvbid0IHBhcnRpY3VsYXJseSBsaWtlIHRoaXMgYnJhbmNoIC1cclxuICAgICAgICAgICAgLy8gICogIEFsbCBpbnN0YW5jZXMgc2hvdWxkIGhhdmUgYSB0cmFuc2Zvcm0uIEJ1dCBpdCdzIHRoZSBlYXNpZXN0IHRoaW5nIHdlIGNhbiBkb1xyXG4gICAgICAgICAgICAvLyAgKiAgdW50aWwgd2UgZmlndXJlIG91dCB0aGUgdmlld2VyIDwtPiBjb25uZWN0b3Igb2JqZWN0IGR1cGxpY2F0aW9uIGluY29uc2lzdGVuY3lcclxuICAgICAgICAgICAgLy8gICovXHJcbiAgICAgICAgICAgIC8vIGlmIChnZW9tZXRyeS50cmFuc2Zvcm0pXHJcbiAgICAgICAgICAgIC8vICAgR2VvbWV0cnkudHJhbnNmb3JtR2VvbWV0cnlEYXRhKGdlb21ldHJ5LCBnZW9tZXRyeS50cmFuc2Zvcm0pXHJcbiAgICAgICAgICAgIC8vIG5vZGVSdi5jb21wdXRlQUFCQigpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1hdGVyaWFsSGFzaCA9IHJ2c1swXS5yZW5kZXJNYXRlcmlhbEhhc2hcclxuICAgICAgICBjb25zdCBpbnN0YW5jZWRCYXRjaCA9IGF3YWl0IHRoaXMuYnVpbGRJbnN0YW5jZWRCYXRjaChcclxuICAgICAgICAgIHJlbmRlclRyZWUsXHJcbiAgICAgICAgICBydnMsXHJcbiAgICAgICAgICBtYXRlcmlhbEhhc2hcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKCFpbnN0YW5jZWRCYXRjaCkgY29udGludWVcclxuXHJcbiAgICAgICAgdGhpcy5iYXRjaGVzW2luc3RhbmNlZEJhdGNoLmlkXSA9IGluc3RhbmNlZEJhdGNoXHJcbiAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBpbnN0YW5jZWRCYXRjaC5yZW5kZXJWaWV3cy5sZW5ndGgpXHJcbiAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBpbnN0YW5jZWRCYXRjaC5yZW5kZXJWaWV3cy5sZW5ndGgpXHJcbiAgICAgICAgYmF0Y2hDb3VudCsrXHJcbiAgICAgICAgeWllbGQgdGhpcy5iYXRjaGVzW2luc3RhbmNlZEJhdGNoLmlkXVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVuZGVyVmlld3MgPSByZW5kZXJUcmVlXHJcbiAgICAgIC5nZXRSZW5kZXJhYmxlTm9kZXMoLi4uc3BlY2tsZVR5cGUpXHJcbiAgICAgIC5mbGF0TWFwKChub2RlOiBUcmVlTm9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChub2RlLm1vZGVsLnJlbmRlclZpZXcpIHtcclxuICAgICAgICAgIGlmIChub2RlLm1vZGVsLnJlbmRlclZpZXcucmVuZGVyRGF0YS5nZW9tZXRyeS5pbnN0YW5jZWQpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGUubW9kZWwucmVuZGVyVmlldy5zcGVja2xlVHlwZSAhPT0gU3BlY2tsZVR5cGUuTWVzaCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbbm9kZS5tb2RlbC5yZW5kZXJWaWV3XVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFtub2RlLm1vZGVsLnJlbmRlclZpZXddXHJcbiAgICAgICAgfSBlbHNlIHJldHVybiBbXVxyXG4gICAgICB9KVxyXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGlmIChhLnJlbmRlck1hdGVyaWFsSGFzaCA9PT0gMCkgcmV0dXJuIC0xXHJcbiAgICAgICAgaWYgKGIucmVuZGVyTWF0ZXJpYWxIYXNoID09PSAwKSByZXR1cm4gMVxyXG4gICAgICAgIHJldHVybiBhLnJlbmRlck1hdGVyaWFsSGFzaCAtIGIucmVuZGVyTWF0ZXJpYWxIYXNoXHJcbiAgICAgIH0pXHJcblxyXG4gICAgY29uc3QgbWF0ZXJpYWxIYXNoZXMgPSBbXHJcbiAgICAgIC4uLkFycmF5LmZyb20obmV3IFNldChyZW5kZXJWaWV3cy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS5yZW5kZXJNYXRlcmlhbEhhc2gpKSlcclxuICAgIF1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGVyaWFsSGFzaGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCByZW5kZXJWaWV3c0JhdGNoID0gcmVuZGVyVmlld3MuZmlsdGVyKFxyXG4gICAgICAgICh2YWx1ZSkgPT4gdmFsdWUucmVuZGVyTWF0ZXJpYWxIYXNoID09PSBtYXRlcmlhbEhhc2hlc1tpXVxyXG4gICAgICApXHJcbiAgICAgIC8qKiBQcnVuZSBhbnkgbWVzaGVzIHdpdGggbm8gZ2VvbWV0cnkgZGF0YSAqL1xyXG4gICAgICBsZXQgdmVydENvdW50ID0gMFxyXG4gICAgICByZW5kZXJWaWV3c0JhdGNoID0gcmVuZGVyVmlld3NCYXRjaC5maWx0ZXIoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsaWQgPSB2YWx1ZS52YWxpZEdlb21ldHJ5XHJcbiAgICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgICB2ZXJ0Q291bnQgKz0gdmFsdWUucmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzLlBPU0lUSU9OLmxlbmd0aCAvIDNcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbGlkIHx8IHZhbHVlLmhhc01ldGFkYXRhXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAocmVuZGVyVmlld3NCYXRjaC5sZW5ndGggPT09IDApIGNvbnRpbnVlXHJcbiAgICAgIGNvbnN0IGJhdGNoZXMgPSB0aGlzLnNwbGl0QmF0Y2gocmVuZGVyVmlld3NCYXRjaCwgdmVydENvdW50KVxyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IGJhdGNoZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBwYXVzZS50aWNrKDEwMClcclxuICAgICAgICBpZiAocGF1c2UubmVlZHNXYWl0KSB7XHJcbiAgICAgICAgICBhd2FpdCBwYXVzZS53YWl0KDUwKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXN0cmljdGVkUnZzID0gYmF0Y2hlc1trXVxyXG4gICAgICAgIGNvbnN0IGJhdGNoID0gYXdhaXQgdGhpcy5idWlsZEJhdGNoKFxyXG4gICAgICAgICAgcmVuZGVyVHJlZSxcclxuICAgICAgICAgIHJlc3RyaWN0ZWRSdnMsXHJcbiAgICAgICAgICBtYXRlcmlhbEhhc2hlc1tpXSxcclxuICAgICAgICAgIGJhdGNoVHlwZVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgaWYgKCFiYXRjaCkgY29udGludWVcclxuXHJcbiAgICAgICAgdGhpcy5iYXRjaGVzW2JhdGNoLmlkXSA9IGJhdGNoXHJcbiAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBiYXRjaC5yZW5kZXJWaWV3cy5sZW5ndGgpXHJcbiAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBiYXRjaC5yZW5kZXJWaWV3cy5sZW5ndGgpXHJcbiAgICAgICAgYXZlcmFnZSArPSBiYXRjaC5yZW5kZXJWaWV3cy5sZW5ndGhcclxuICAgICAgICBiYXRjaENvdW50KytcclxuICAgICAgICB5aWVsZCB0aGlzLmJhdGNoZXNbYmF0Y2guaWRdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIExvZ2dlci53YXJuKFxyXG4gICAgICBgQmF0Y2ggdG90YWw6ICR7YmF0Y2hDb3VudH0gbWluOiAke21pbn0sIG1heDogJHttYXh9LCBhdmVyYWdlOiAke1xyXG4gICAgICAgIGF2ZXJhZ2UgLyBtYXRlcmlhbEhhc2hlcy5sZW5ndGhcclxuICAgICAgfWBcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3BsaXRCYXRjaChcclxuICAgIHJlbmRlclZpZXdzOiBOb2RlUmVuZGVyVmlld1tdLFxyXG4gICAgdmVydENvdW50OiBudW1iZXJcclxuICApOiBOb2RlUmVuZGVyVmlld1tdW10ge1xyXG4gICAgLyoqIFdlJ3JlIGZpcnN0IHNwbGl0dGluZyBiYXNlZCBvbiB0aGUgYmF0Y2gncyBtYXggdmVydGV4IGNvdW50ICovXHJcbiAgICBjb25zdCB2U3BsaXQ6IEFycmF5PEFycmF5PE5vZGVSZW5kZXJWaWV3Pj4gPSBbXVxyXG4gICAgY29uc3QgdkRpdiA9IE1hdGguZmxvb3IodmVydENvdW50IC8gdGhpcy5tYXhCYXRjaFZlcnRpY2VzKVxyXG4gICAgaWYgKHZEaXYgPiAwKSB7XHJcbiAgICAgIGxldCBjb3VudCA9IDBcclxuICAgICAgbGV0IGluZGV4ID0gMFxyXG4gICAgICB2U3BsaXQucHVzaChbXSlcclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCByZW5kZXJWaWV3cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIC8qKiBDYXRlcmluZyB0byB0eXBlc2NyaXB0LlxyXG4gICAgICAgICAqICBSZW5kZXJWaWV3cyBhcmUgcHJlZmlsdGVyZWQgYmFzZWQgb24gdmFsaWQgZ2VvbWV0cnkgYmVmb3JlIHJlYWNoaW5nIHRoaXMgcG9pbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBlcnZlZSA9IHJlbmRlclZpZXdzW2tdXHJcbiAgICAgICAgY29uc3QgbmV4dEVydmVlID0gcmVuZGVyVmlld3NbayArIDFdXHJcbiAgICAgICAgaWYgKCFlcnZlZS5yZW5kZXJEYXRhLmdlb21ldHJ5LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYEludmFsaWQgZ2VvbWV0cnkgb24gcmVuZGVyIHZpZXcgJHtyZW5kZXJWaWV3c1trXS5yZW5kZXJEYXRhLmlkfWBcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgdlNwbGl0W2luZGV4XS5wdXNoKHJlbmRlclZpZXdzW2tdKVxyXG4gICAgICAgIGNvdW50ICs9IGVydmVlLnJlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5sZW5ndGggLyAzXHJcbiAgICAgICAgY29uc3QgbmV4Q291bnQgPVxyXG4gICAgICAgICAgY291bnQgK1xyXG4gICAgICAgICAgKG5leHRFcnZlZSAmJiBuZXh0RXJ2ZWUucmVuZGVyRGF0YS5nZW9tZXRyeS5hdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgID8gbmV4dEVydmVlLnJlbmRlckRhdGEuZ2VvbWV0cnkuYXR0cmlidXRlcy5QT1NJVElPTi5sZW5ndGggLyAzXHJcbiAgICAgICAgICAgIDogMClcclxuICAgICAgICBpZiAobmV4Q291bnQgPj0gdGhpcy5tYXhCYXRjaFZlcnRpY2VzICYmIHJlbmRlclZpZXdzW2sgKyAxXSkge1xyXG4gICAgICAgICAgdlNwbGl0LnB1c2goW10pXHJcbiAgICAgICAgICBpbmRleCsrXHJcbiAgICAgICAgICBjb3VudCA9IDBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZTcGxpdC5wdXNoKHJlbmRlclZpZXdzKVxyXG4gICAgfVxyXG4gICAgLyoqIEZpbmFsbHkgd2UncmUgc3BsaXR0aW5nIGFnYWluIGJhc2VkIG9uIHRoZSBiYXRjaCdzIG1heCBvYmplY3QgY291bnQgKi9cclxuICAgIGNvbnN0IGdlb21ldHJ5VHlwZSA9IHJlbmRlclZpZXdzWzBdLmdlb21ldHJ5VHlwZVxyXG4gICAgY29uc3QgbWF4Q291bnQgPSB0aGlzLmdldE1heE9iamVjdENvdW50KGdlb21ldHJ5VHlwZSlcclxuICAgIGlmICghbWF4Q291bnQpIHJldHVybiB2U3BsaXRcclxuXHJcbiAgICBjb25zdCBvU3BsaXQgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2U3BsaXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgb2JqQ291bnQgPSB2U3BsaXRbaV0ubGVuZ3RoXHJcbiAgICAgIGNvbnN0IGRpdiA9IE1hdGguZmxvb3Iob2JqQ291bnQgLyBtYXhDb3VudClcclxuICAgICAgY29uc3QgbW9kID0gb2JqQ291bnQgJSBtYXhDb3VudFxyXG4gICAgICBsZXQgaW5kZXggPSAwXHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZGl2OyBrKyspIHtcclxuICAgICAgICBvU3BsaXQucHVzaCh2U3BsaXRbaV0uc2xpY2UoaW5kZXgsIGluZGV4ICsgbWF4Q291bnQpKVxyXG4gICAgICAgIGluZGV4ICs9IG1heENvdW50XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1vZCA+IDApIHtcclxuICAgICAgICBvU3BsaXQucHVzaCh2U3BsaXRbaV0uc2xpY2UoaW5kZXgsIGluZGV4ICsgbW9kKSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9TcGxpdFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXhPYmplY3RDb3VudChnZW9tZXRyeVR5cGU6IEdlb21ldHJ5VHlwZSkge1xyXG4gICAgc3dpdGNoIChnZW9tZXRyeVR5cGUpIHtcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuTUVTSDpcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXhCYXRjaE9iamVjdHNcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuVEVYVDpcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXhCYXRjaFRleHRPYmplY3RzXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIDBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRJbnN0YW5jZWRCYXRjaChcclxuICAgIHJlbmRlclRyZWU6IFJlbmRlclRyZWUsXHJcbiAgICByZW5kZXJWaWV3czogTm9kZVJlbmRlclZpZXdbXSxcclxuICAgIG1hdGVyaWFsSGFzaDogbnVtYmVyXHJcbiAgKTogUHJvbWlzZTxCYXRjaCB8IG51bGw+IHtcclxuICAgIGlmICghcmVuZGVyVmlld3MubGVuZ3RoKSB7XHJcbiAgICAgIC8qKiBUaGlzIGlzIGZvciB0aGUgY2FzZSB3aGVuIGFsbCByZW5kZXJ2aWV3cyBoYXZlIGludmFsaWQgZ2VvbWV0cmllcywgYW5kIGl0IGdlbmVyYWxseVxyXG4gICAgICAgKiBtZWFucyB0aGVyZSBpcyBzb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgc3RyZWFtXHJcbiAgICAgICAqL1xyXG4gICAgICBMb2dnZXIud2FybihcclxuICAgICAgICAnQWxsIHJlbmRlcnZpZXdzIGhhdmUgaW52YWxpZCBnZW9tZXRyaWVzLiBTa2lwcGluZyBiYXRjaCEnLFxyXG4gICAgICAgIHJlbmRlclZpZXdzXHJcbiAgICAgIClcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXRSZWYgPSByZW5kZXJWaWV3c1swXS5yZW5kZXJEYXRhLnJlbmRlck1hdGVyaWFsXHJcbiAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxzLmdldE1hdGVyaWFsKG1hdGVyaWFsSGFzaCwgbWF0UmVmLCBHZW9tZXRyeVR5cGUuTUVTSClcclxuICAgIGNvbnN0IGJhdGNoSUQgPSBNYXRoVXRpbHMuZ2VuZXJhdGVVVUlEKClcclxuICAgIGNvbnN0IGdlb21ldHJ5QmF0Y2ggPSBuZXcgSW5zdGFuY2VkTWVzaEJhdGNoKFxyXG4gICAgICBiYXRjaElELFxyXG4gICAgICByZW5kZXJUcmVlLmlkLFxyXG4gICAgICByZW5kZXJWaWV3cyxcclxuICAgICAgdGhpcy5jYXBzLmlzV2ViR0wyXHJcbiAgICApXHJcbiAgICBnZW9tZXRyeUJhdGNoLnNldEJhdGNoTWF0ZXJpYWwobWF0ZXJpYWwpXHJcbiAgICBhd2FpdCBnZW9tZXRyeUJhdGNoLmJ1aWxkQmF0Y2goKVxyXG5cclxuICAgIHJldHVybiBnZW9tZXRyeUJhdGNoXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGJ1aWxkQmF0Y2goXHJcbiAgICByZW5kZXJUcmVlOiBSZW5kZXJUcmVlLFxyXG4gICAgcmVuZGVyVmlld3M6IE5vZGVSZW5kZXJWaWV3W10sXHJcbiAgICBtYXRlcmlhbEhhc2g6IG51bWJlcixcclxuICAgIGJhdGNoVHlwZT86IEdlb21ldHJ5VHlwZVxyXG4gICk6IFByb21pc2U8QmF0Y2ggfCBudWxsPiB7XHJcbiAgICBpZiAoIXJlbmRlclZpZXdzLmxlbmd0aCkge1xyXG4gICAgICAvKiogVGhpcyBpcyBmb3IgdGhlIGNhc2Ugd2hlbiBhbGwgcmVuZGVydmlld3MgaGF2ZSBpbnZhbGlkIGdlb21ldHJpZXMsIGFuZCBpdCBnZW5lcmFsbHlcclxuICAgICAgICogbWVhbnMgdGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIHN0cmVhbVxyXG4gICAgICAgKi9cclxuICAgICAgTG9nZ2VyLndhcm4oXHJcbiAgICAgICAgJ0FsbCByZW5kZXJ2aWV3cyBoYXZlIGludmFsaWQgZ2VvbWV0cmllcy4gU2tpcHBpbmcgYmF0Y2ghJyxcclxuICAgICAgICByZW5kZXJWaWV3c1xyXG4gICAgICApXHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ2VvbWV0cnlUeXBlID1cclxuICAgICAgYmF0Y2hUeXBlICE9PSB1bmRlZmluZWQgPyBiYXRjaFR5cGUgOiByZW5kZXJWaWV3c1swXS5nZW9tZXRyeVR5cGVcclxuICAgIGxldCBtYXRSZWY6IFJlbmRlck1hdGVyaWFsIHwgRGlzcGxheVN0eWxlIHwgTWluaW1hbE1hdGVyaWFsIHwgbnVsbCA9XHJcbiAgICAgIHJlbmRlclZpZXdzWzBdLnJlbmRlckRhdGEucmVuZGVyTWF0ZXJpYWxcclxuXHJcbiAgICBpZiAoZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTUVTSCkge1xyXG4gICAgICBtYXRSZWYgPSByZW5kZXJWaWV3c1swXS5yZW5kZXJEYXRhLnJlbmRlck1hdGVyaWFsXHJcbiAgICB9IGVsc2UgaWYgKGdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLkxJTkUpIHtcclxuICAgICAgbWF0UmVmID0gcmVuZGVyVmlld3NbMF0ucmVuZGVyRGF0YS5jb2xvck1hdGVyaWFsXHJcbiAgICAgICAgPyByZW5kZXJWaWV3c1swXS5yZW5kZXJEYXRhLmNvbG9yTWF0ZXJpYWxcclxuICAgICAgICA6IHJlbmRlclZpZXdzWzBdLnJlbmRlckRhdGEuZGlzcGxheVN0eWxlXHJcbiAgICB9IGVsc2UgaWYgKGdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLlBPSU5UKSB7XHJcbiAgICAgIG1hdFJlZiA9IHJlbmRlclZpZXdzWzBdLnJlbmRlckRhdGEuY29sb3JNYXRlcmlhbFxyXG4gICAgICAgID8gcmVuZGVyVmlld3NbMF0ucmVuZGVyRGF0YS5jb2xvck1hdGVyaWFsXHJcbiAgICAgICAgOiByZW5kZXJWaWV3c1swXS5yZW5kZXJEYXRhLnJlbmRlck1hdGVyaWFsIHx8XHJcbiAgICAgICAgICByZW5kZXJWaWV3c1swXS5yZW5kZXJEYXRhLmRpc3BsYXlTdHlsZVxyXG4gICAgfSBlbHNlIGlmIChnZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5QT0lOVF9DTE9VRCkge1xyXG4gICAgICBtYXRSZWYgPSByZW5kZXJWaWV3c1swXS5yZW5kZXJEYXRhLnJlbmRlck1hdGVyaWFsXHJcbiAgICB9IGVsc2UgaWYgKGdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLlRFWFQpIHtcclxuICAgICAgbWF0UmVmID0gcmVuZGVyVmlld3NbMF0ucmVuZGVyRGF0YS5jb2xvck1hdGVyaWFsXHJcbiAgICAgICAgPyByZW5kZXJWaWV3c1swXS5yZW5kZXJEYXRhLmNvbG9yTWF0ZXJpYWxcclxuICAgICAgICA6IHJlbmRlclZpZXdzWzBdLnJlbmRlckRhdGEuZGlzcGxheVN0eWxlXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFscy5nZXRNYXRlcmlhbChtYXRlcmlhbEhhc2gsIG1hdFJlZiwgZ2VvbWV0cnlUeXBlKVxyXG5cclxuICAgIGNvbnN0IGJhdGNoSUQgPSBNYXRoVXRpbHMuZ2VuZXJhdGVVVUlEKClcclxuICAgIGxldCBnZW9tZXRyeUJhdGNoOiBCYXRjaCB8IG51bGwgPSBudWxsXHJcbiAgICBzd2l0Y2ggKGdlb21ldHJ5VHlwZSkge1xyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5NRVNIOlxyXG4gICAgICAgIGdlb21ldHJ5QmF0Y2ggPSBuZXcgTWVzaEJhdGNoKFxyXG4gICAgICAgICAgYmF0Y2hJRCxcclxuICAgICAgICAgIHJlbmRlclRyZWUuaWQsXHJcbiAgICAgICAgICByZW5kZXJWaWV3cyxcclxuICAgICAgICAgIHRoaXMuY2Fwcy5mbG9hdFZlcnRleFRleHR1cmVzXHJcbiAgICAgICAgICAgID8gVHJhbnNmb3JtU3RvcmFnZS5WRVJURVhfVEVYVFVSRVxyXG4gICAgICAgICAgICA6IFRyYW5zZm9ybVN0b3JhZ2UuVU5JRk9STV9BUlJBWVxyXG4gICAgICAgIClcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5MSU5FOlxyXG4gICAgICAgIGdlb21ldHJ5QmF0Y2ggPSBuZXcgTGluZUJhdGNoKGJhdGNoSUQsIHJlbmRlclRyZWUuaWQsIHJlbmRlclZpZXdzKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLlBPSU5UOlxyXG4gICAgICAgIGdlb21ldHJ5QmF0Y2ggPSBuZXcgUG9pbnRCYXRjaChiYXRjaElELCByZW5kZXJUcmVlLmlkLCByZW5kZXJWaWV3cylcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5QT0lOVF9DTE9VRDpcclxuICAgICAgICBnZW9tZXRyeUJhdGNoID0gbmV3IFBvaW50QmF0Y2goYmF0Y2hJRCwgcmVuZGVyVHJlZS5pZCwgcmVuZGVyVmlld3MpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuVEVYVDpcclxuICAgICAgICBnZW9tZXRyeUJhdGNoID0gbmV3IFRleHRCYXRjaChiYXRjaElELCByZW5kZXJUcmVlLmlkLCByZW5kZXJWaWV3cylcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGdlb21ldHJ5QmF0Y2guc2V0QmF0Y2hNYXRlcmlhbChtYXRlcmlhbClcclxuICAgIGF3YWl0IGdlb21ldHJ5QmF0Y2guYnVpbGRCYXRjaCgpXHJcblxyXG4gICAgcmV0dXJuIGdlb21ldHJ5QmF0Y2hcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGUoZGVsdGFUaW1lOiBudW1iZXIpIHtcclxuICAgIGZvciAoY29uc3QgYmF0Y2hJZCBpbiB0aGlzLmJhdGNoZXMpIHtcclxuICAgICAgdGhpcy5iYXRjaGVzW2JhdGNoSWRdLm9uVXBkYXRlKGRlbHRhVGltZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXIocmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIpIHtcclxuICAgIGZvciAoY29uc3QgYmF0Y2hJZCBpbiB0aGlzLmJhdGNoZXMpIHtcclxuICAgICAgY29uc3QgYmF0Y2ggPSB0aGlzLmJhdGNoZXNbYmF0Y2hJZF1cclxuICAgICAgaWYgKGJhdGNoLm9uUmVuZGVyKSBiYXRjaC5vblJlbmRlcihyZW5kZXJlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlVmlzaWJsaXR5KCk6IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+IHtcclxuICAgIGNvbnN0IHZpc2liaWxpdHlSYW5nZXM6IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+ID0ge31cclxuICAgIGZvciAoY29uc3QgayBpbiB0aGlzLmJhdGNoZXMpIHtcclxuICAgICAgY29uc3QgYmF0Y2g6IEJhdGNoID0gdGhpcy5iYXRjaGVzW2tdXHJcbiAgICAgIHZpc2liaWxpdHlSYW5nZXNba10gPSBiYXRjaC5nZXRWaXNpYmxlUmFuZ2UoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpc2liaWxpdHlSYW5nZXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBseVZpc2liaWxpdHkocmFuZ2VzOiBSZWNvcmQ8c3RyaW5nLCBCYXRjaFVwZGF0ZVJhbmdlPikge1xyXG4gICAgZm9yIChjb25zdCBrIGluIHRoaXMuYmF0Y2hlcykge1xyXG4gICAgICBjb25zdCBiYXRjaDogQmF0Y2ggPSB0aGlzLmJhdGNoZXNba11cclxuICAgICAgY29uc3QgcmFuZ2UgPSByYW5nZXNba11cclxuICAgICAgaWYgKCFyYW5nZSkge1xyXG4gICAgICAgIGJhdGNoLnNldFZpc2libGVSYW5nZShbTm9uZUJhdGNoVXBkYXRlUmFuZ2VdKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJhdGNoLnNldFZpc2libGVSYW5nZShbcmFuZ2VdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VmlzaWJpbGl0eShvYmplY3RWaXNpYmlsaXR5OiBPYmplY3RWaXNpYmlsaXR5KSB7XHJcbiAgICBzd2l0Y2ggKG9iamVjdFZpc2liaWxpdHkpIHtcclxuICAgICAgY2FzZSBPYmplY3RWaXNpYmlsaXR5Lk9QQVFVRTpcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcGFxdWUoKVxyXG4gICAgICBjYXNlIE9iamVjdFZpc2liaWxpdHkuVFJBTlNQQVJFTlQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNwYXJlbnQoKVxyXG4gICAgICBjYXNlIE9iamVjdFZpc2liaWxpdHkuU1RFTkNJTDpcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGVuY2lsKClcclxuICAgICAgY2FzZSBPYmplY3RWaXNpYmlsaXR5LkRFUFRIOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldERlcHRoKClcclxuICAgICAgY2FzZSBPYmplY3RWaXNpYmlsaXR5LkNVU1RPTTpcclxuICAgICAgICBMb2dnZXIuZXJyb3IoJ0N1c3RvbSB2aXNpYmlsaXR5IHJlcXVpcmVzIHZpc2liaWxpdHkgZnVuY3Rpb24nKVxyXG4gICAgICAgIHJldHVybiB7fVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRyYW5zcGFyZW50KCk6IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+IHtcclxuICAgIGNvbnN0IHZpc2liaWxpdHlSYW5nZXM6IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+ID0ge31cclxuICAgIGZvciAoY29uc3QgayBpbiB0aGlzLmJhdGNoZXMpIHtcclxuICAgICAgdmlzaWJpbGl0eVJhbmdlc1trXSA9IHRoaXMuYmF0Y2hlc1trXS5nZXRUcmFuc3BhcmVudCgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlzaWJpbGl0eVJhbmdlc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFN0ZW5jaWwoKTogUmVjb3JkPHN0cmluZywgQmF0Y2hVcGRhdGVSYW5nZT4ge1xyXG4gICAgY29uc3QgdmlzaWJpbGl0eVJhbmdlczogUmVjb3JkPHN0cmluZywgQmF0Y2hVcGRhdGVSYW5nZT4gPSB7fVxyXG4gICAgZm9yIChjb25zdCBrIGluIHRoaXMuYmF0Y2hlcykge1xyXG4gICAgICB2aXNpYmlsaXR5UmFuZ2VzW2tdID0gdGhpcy5iYXRjaGVzW2tdLmdldFN0ZW5jaWwoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpc2liaWxpdHlSYW5nZXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPcGFxdWUoKTogUmVjb3JkPHN0cmluZywgQmF0Y2hVcGRhdGVSYW5nZT4ge1xyXG4gICAgY29uc3QgdmlzaWJpbGl0eVJhbmdlczogUmVjb3JkPHN0cmluZywgQmF0Y2hVcGRhdGVSYW5nZT4gPSB7fVxyXG4gICAgZm9yIChjb25zdCBrIGluIHRoaXMuYmF0Y2hlcykge1xyXG4gICAgICB2aXNpYmlsaXR5UmFuZ2VzW2tdID0gdGhpcy5iYXRjaGVzW2tdLmdldE9wYXF1ZSgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlzaWJpbGl0eVJhbmdlc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERlcHRoKCk6IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+IHtcclxuICAgIGNvbnN0IHZpc2liaWxpdHlSYW5nZXM6IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+ID0ge31cclxuICAgIGZvciAoY29uc3QgayBpbiB0aGlzLmJhdGNoZXMpIHtcclxuICAgICAgdmlzaWJpbGl0eVJhbmdlc1trXSA9IHRoaXMuYmF0Y2hlc1trXS5nZXREZXB0aCgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlzaWJpbGl0eVJhbmdlc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlTWF0ZXJpYWwoXHJcbiAgICByYW5nZXM6IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+LFxyXG4gICAgbWF0ZXJpYWw6IE1hdGVyaWFsXHJcbiAgKSB7XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gcmFuZ2VzKSB7XHJcbiAgICAgIGlmICh0aGlzLmJhdGNoZXNba10uZ2VvbWV0cnlUeXBlICE9PSBHZW9tZXRyeVR5cGUuTUVTSCkgY29udGludWVcclxuICAgICAgY29uc3QgbWVzaCA9IHRoaXMuYmF0Y2hlc1trXS5yZW5kZXJPYmplY3QgYXMgU3BlY2tsZU1lc2hcclxuICAgICAgbWVzaC5zZXRPdmVycmlkZU1hdGVyaWFsKG1hdGVyaWFsKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlQmF0Y2hNYXRlcmlhbChcclxuICAgIHJhbmdlczogUmVjb3JkPHN0cmluZywgQmF0Y2hVcGRhdGVSYW5nZT4sXHJcbiAgICBtYXRlcmlhbDogTWF0ZXJpYWxcclxuICApIHtcclxuICAgIGZvciAoY29uc3QgayBpbiByYW5nZXMpIHtcclxuICAgICAgaWYgKHRoaXMuYmF0Y2hlc1trXS5nZW9tZXRyeVR5cGUgIT09IEdlb21ldHJ5VHlwZS5NRVNIKSBjb250aW51ZVxyXG4gICAgICBjb25zdCBtZXNoID0gdGhpcy5iYXRjaGVzW2tdLnJlbmRlck9iamVjdCBhcyBTcGVja2xlTWVzaFxyXG4gICAgICBtZXNoLnNldE92ZXJyaWRlQmF0Y2hNYXRlcmlhbChtYXRlcmlhbClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlTWF0ZXJpYWwocmFuZ2VzOiBSZWNvcmQ8c3RyaW5nLCBCYXRjaFVwZGF0ZVJhbmdlPikge1xyXG4gICAgZm9yIChjb25zdCBrIGluIHJhbmdlcykge1xyXG4gICAgICBpZiAodGhpcy5iYXRjaGVzW2tdLmdlb21ldHJ5VHlwZSAhPT0gR2VvbWV0cnlUeXBlLk1FU0gpIGNvbnRpbnVlXHJcbiAgICAgIGNvbnN0IG1lc2ggPSB0aGlzLmJhdGNoZXNba10ucmVuZGVyT2JqZWN0IGFzIFNwZWNrbGVNZXNoXHJcbiAgICAgIG1lc2gucmVzdG9yZU1hdGVyaWFsKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlQmF0Y2hNYXRlcmlhbChyYW5nZXM6IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+KSB7XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gcmFuZ2VzKSB7XHJcbiAgICAgIGlmICh0aGlzLmJhdGNoZXNba10uZ2VvbWV0cnlUeXBlICE9PSBHZW9tZXRyeVR5cGUuTUVTSCkgY29udGludWVcclxuICAgICAgY29uc3QgbWVzaCA9IHRoaXMuYmF0Y2hlc1trXS5yZW5kZXJPYmplY3QgYXMgU3BlY2tsZU1lc2hcclxuICAgICAgbWVzaC5yZXN0b3JlQmF0Y2hNYXRlcmlhbCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHVyZ2VCYXRjaGVzKHN1YnRyZWVJZDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5iYXRjaGVzKSB7XHJcbiAgICAgIGlmICh0aGlzLmJhdGNoZXNba10uc3VidHJlZUlkID09PSBzdWJ0cmVlSWQpIHtcclxuICAgICAgICB0aGlzLmJhdGNoZXNba10ucHVyZ2UoKVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmJhdGNoZXNba11cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEJhdGNoZXM8SyBleHRlbmRzIEdlb21ldHJ5VHlwZT4oXHJcbiAgICBzdWJ0cmVlSWQ/OiBzdHJpbmcsXHJcbiAgICBnZW9tZXRyeVR5cGU/OiBLXHJcbiAgKTogQmF0Y2hUeXBlTWFwW0tdW11cclxuICBwdWJsaWMgZ2V0QmF0Y2hlczxLIGV4dGVuZHMgR2VvbWV0cnlUeXBlPihcclxuICAgIHN1YnRyZWVJZD86IHN0cmluZyxcclxuICAgIGdlb21ldHJ5VHlwZT86IEFycmF5PEs+XHJcbiAgKTogQmF0Y2hUeXBlTWFwW0tdW11cclxuXHJcbiAgcHVibGljIGdldEJhdGNoZXM8SyBleHRlbmRzIEdlb21ldHJ5VHlwZT4oXHJcbiAgICBzdWJ0cmVlSWQ/OiBzdHJpbmcsXHJcbiAgICBnZW9tZXRyeVR5cGU/OiBLIHwgQXJyYXk8Sz5cclxuICApOiBCYXRjaFR5cGVNYXBbS11bXSB7XHJcbiAgICBjb25zdCBiYXRjaGVzOiBCYXRjaFtdID0gT2JqZWN0LnZhbHVlcyh0aGlzLmJhdGNoZXMpXHJcbiAgICByZXR1cm4gYmF0Y2hlcy5maWx0ZXIoKHZhbHVlOiBCYXRjaCkgPT4ge1xyXG4gICAgICBjb25zdCBzdWJ0cmVlID0gc3VidHJlZUlkICE9PSB1bmRlZmluZWQgPyB2YWx1ZS5zdWJ0cmVlSWQgPT09IHN1YnRyZWVJZCA6IHRydWVcclxuICAgICAgY29uc3QgdHlwZSA9XHJcbiAgICAgICAgZ2VvbWV0cnlUeXBlICE9PSB1bmRlZmluZWQgPyB0aGlzLmlzQmF0Y2hUeXBlKHZhbHVlLCBnZW9tZXRyeVR5cGUpIDogdHJ1ZVxyXG4gICAgICByZXR1cm4gc3VidHJlZSAmJiB0eXBlXHJcbiAgICB9KSBhcyBCYXRjaFR5cGVNYXBbS11bXVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0JhdGNoVHlwZTxLIGV4dGVuZHMgR2VvbWV0cnlUeXBlPihcclxuICAgIGJhdGNoOiBCYXRjaCxcclxuICAgIGdlb21ldHJ5VHlwZT86IEsgfCBBcnJheTxLPlxyXG4gICk6IGJhdGNoIGlzIEJhdGNoVHlwZU1hcFtLXSB7XHJcbiAgICBpZiAoZ2VvbWV0cnlUeXBlID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlXHJcbiAgICBsZXQgaXNCYXRjaFR5cGUgPSBmYWxzZVxyXG4gICAgY29uc3QgYXJyYXkgPSBBcnJheS5pc0FycmF5KGdlb21ldHJ5VHlwZSkgPyBnZW9tZXRyeVR5cGUgOiBbZ2VvbWV0cnlUeXBlXVxyXG4gICAgYXJyYXkuZm9yRWFjaCgodmFsdWU6IEspID0+IHtcclxuICAgICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLk1FU0g6XHJcbiAgICAgICAgICBpc0JhdGNoVHlwZSB8fD1cclxuICAgICAgICAgICAgYmF0Y2ggaW5zdGFuY2VvZiBNZXNoQmF0Y2ggfHwgYmF0Y2ggaW5zdGFuY2VvZiBJbnN0YW5jZWRNZXNoQmF0Y2hcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuTElORTpcclxuICAgICAgICAgIGlzQmF0Y2hUeXBlIHx8PSBiYXRjaCBpbnN0YW5jZW9mIExpbmVCYXRjaFxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIEdlb21ldHJ5VHlwZS5QT0lOVDpcclxuICAgICAgICAgIGlzQmF0Y2hUeXBlIHx8PSBiYXRjaCBpbnN0YW5jZW9mIFBvaW50QmF0Y2hcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuUE9JTlRfQ0xPVUQ6XHJcbiAgICAgICAgICBpc0JhdGNoVHlwZSB8fD0gYmF0Y2ggaW5zdGFuY2VvZiBQb2ludEJhdGNoXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLlRFWFQ6XHJcbiAgICAgICAgICBpc0JhdGNoVHlwZSB8fD0gYmF0Y2ggaW5zdGFuY2VvZiBUZXh0QmF0Y2hcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlzQmF0Y2hUeXBlID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiBpc0JhdGNoVHlwZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEJhdGNoKHJ2OiBOb2RlUmVuZGVyVmlldyk6IEJhdGNoIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmJhdGNoZXNbcnYuYmF0Y2hJZF1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJWaWV3KGJhdGNoSWQ6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKCF0aGlzLmJhdGNoZXNbYmF0Y2hJZF0pIHtcclxuICAgICAgTG9nZ2VyLmVycm9yKCdJbnZhbGlkIGJhdGNoIGlkIScpXHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYmF0Y2hlc1tiYXRjaElkXS5nZXRSZW5kZXJWaWV3KGluZGV4KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbmRlclZpZXdNYXRlcmlhbChiYXRjaElkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICghdGhpcy5iYXRjaGVzW2JhdGNoSWRdKSB7XHJcbiAgICAgIExvZ2dlci5lcnJvcignSW52YWxpZCBiYXRjaCBpZCEnKVxyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmJhdGNoZXNbYmF0Y2hJZF0uZ2V0TWF0ZXJpYWxBdEluZGV4KGluZGV4KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0QmF0Y2hlc0RyYXdSYW5nZXMoKSB7XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5iYXRjaGVzKSB7XHJcbiAgICAgIHRoaXMuYmF0Y2hlc1trXS5yZXNldERyYXdSYW5nZXMoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCBmb3IgZGVidWdnaW4gb25seVxyXG4gICAqL1xyXG4gIHB1YmxpYyBpc29sYXRlQmF0Y2goYmF0Y2hJZDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5iYXRjaGVzKSB7XHJcbiAgICAgIGlmIChrICE9PSBiYXRjaElkKSB7XHJcbiAgICAgICAgdGhpcy5iYXRjaGVzW2tdLnNldERyYXdSYW5nZXMoW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmJhdGNoZXNba10uZ2V0Q291bnQoKSxcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMubWF0ZXJpYWxzLmdldEZpbHRlck1hdGVyaWFsKHRoaXMuYmF0Y2hlc1trXS5yZW5kZXJWaWV3c1swXSwge1xyXG4gICAgICAgICAgICAgIGZpbHRlclR5cGU6IEZpbHRlck1hdGVyaWFsVHlwZS5HSE9TVFxyXG4gICAgICAgICAgICB9KSBhcyBNYXRlcmlhbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgVmVjdG9yMiB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4uL0V2ZW50RW1pdHRlci5qcydcclxuXHJcbmV4cG9ydCBlbnVtIElucHV0RXZlbnQge1xyXG4gIFBvaW50ZXJEb3duID0gJ3BvaW50ZXItZG93bicsXHJcbiAgUG9pbnRlclVwID0gJ3BvaW50ZXItdXAnLFxyXG4gIFBvaW50ZXJNb3ZlID0gJ3BvaW50ZXItbW92ZScsXHJcbiAgUG9pbnRlckNhbmNlbCA9ICdwb2ludGVyLWNhbmNlbCcsXHJcbiAgV2hlZWwgPSAnd2hlZWwnLFxyXG4gIENsaWNrID0gJ2NsaWNrJyxcclxuICBEb3VibGVDbGljayA9ICdkb3VibGUtY2xpY2snLFxyXG4gIEtleVVwID0gJ2tleS11cCcsXHJcbiAgS2V5RG93biA9ICdrZXktZG93bicsXHJcbiAgQ29udGV4dE1lbnUgPSAnY29udGV4dC1tZW51J1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElucHV0RXZlbnRQYXlsb2FkIHtcclxuICBbSW5wdXRFdmVudC5Qb2ludGVyRG93bl06IFZlY3RvcjIgJiB7IGV2ZW50OiBQb2ludGVyRXZlbnQgfVxyXG4gIFtJbnB1dEV2ZW50LlBvaW50ZXJVcF06IFZlY3RvcjIgJiB7IGV2ZW50OiBQb2ludGVyRXZlbnQgfVxyXG4gIFtJbnB1dEV2ZW50LlBvaW50ZXJNb3ZlXTogVmVjdG9yMiAmIHsgZXZlbnQ6IFBvaW50ZXJFdmVudCB9XHJcbiAgW0lucHV0RXZlbnQuUG9pbnRlckNhbmNlbF06IHZvaWRcclxuICBbSW5wdXRFdmVudC5XaGVlbF06IFdoZWVsRXZlbnRcclxuICBbSW5wdXRFdmVudC5DbGlja106IFZlY3RvcjIgJiB7IGV2ZW50OiBQb2ludGVyRXZlbnQ7IG11bHRpU2VsZWN0OiBib29sZWFuIH1cclxuICBbSW5wdXRFdmVudC5Eb3VibGVDbGlja106IFZlY3RvcjIgJiB7IGV2ZW50OiBQb2ludGVyRXZlbnQ7IG11bHRpU2VsZWN0OiBib29sZWFuIH1cclxuICBbSW5wdXRFdmVudC5LZXlVcF06IEtleWJvYXJkRXZlbnRcclxuICBbSW5wdXRFdmVudC5LZXlEb3duXTogS2V5Ym9hcmRFdmVudFxyXG4gIFtJbnB1dEV2ZW50LkNvbnRleHRNZW51XTogUG9pbnRlckV2ZW50XHJcbn1cclxuXHJcbi8vVE8gRE86IERlZmluZSBwcm9wZXIgaW50ZXJmYWNlIGZvciBJbnB1dEV2ZW50IGRhdGFcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5wdXQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9ET1VCTEVfQ0xJQ0tfVElNSU5HID0gNTAwXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUlOX0NMSUNLX1RJTUlORyA9IDIwMFxyXG4gIHByaXZhdGUgdGFwVGltZW91dDogbnVtYmVyID0gMFxyXG4gIHByaXZhdGUgbGFzdFRhcCA9IDBcclxuICBwcml2YXRlIGxhc3RDbGljayA9IDBcclxuICBwcml2YXRlIHRvdWNoTG9jYXRpb246IFRvdWNoIHwgdW5kZWZpbmVkXHJcbiAgcHJpdmF0ZSBjb250YWluZXJcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgcmVzdHJpY3RLZXlJbnB1dDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lclxyXG4gICAgaWYgKHJlc3RyaWN0S2V5SW5wdXQpIHtcclxuICAgICAgLy8gTWFrZSBjYW52YXMgZm9jdXNhYmxlIGZvciBzY29wZWQga2V5Ym9hcmQgZXZlbnRzXHJcbiAgICAgIHRoaXMuY29udGFpbmVyLnRhYkluZGV4ID0gLTFcclxuICAgICAgLy8gUmVtb3ZlIGRlZmF1bHQgZm9jdXMgb3V0bGluZVxyXG4gICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5vdXRsaW5lID0gJ25vbmUnXHJcbiAgICB9XHJcbiAgICAvLyBIYW5kbGUgbW91c2VjbGlja3NcclxuICAgIGxldCBtZFRpbWU6IG51bWJlclxyXG4gICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCAoZSkgPT4ge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgdGhpcy5jb250YWluZXIuZm9jdXMoKSAvLyBwcmV2ZW50RGVmYXVsdCBibG9ja3MgZGVmYXVsdCBmb2N1c1xyXG4gICAgICBjb25zdCBsb2MgPSB0aGlzLl9nZXROb3JtYWxpc2VkQ2xpY2tQb3NpdGlvbihlKVxyXG4gICAgICA7KGxvYyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5ldmVudCA9IGVcclxuICAgICAgbWRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKClcclxuICAgICAgdGhpcy5lbWl0KElucHV0RXZlbnQuUG9pbnRlckRvd24sIGxvYylcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKGUpID0+IHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgIGNvbnN0IGxvYyA9IHRoaXMuX2dldE5vcm1hbGlzZWRDbGlja1Bvc2l0aW9uKGUpXHJcbiAgICAgIDsobG9jIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmV2ZW50ID0gZVxyXG5cclxuICAgICAgdGhpcy5lbWl0KElucHV0RXZlbnQuUG9pbnRlclVwLCBsb2MpXHJcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXHJcbiAgICAgIGNvbnN0IGRlbHRhID0gbm93IC0gbWRUaW1lXHJcbiAgICAgIGNvbnN0IGRlbHRhQ2xpY2sgPSBub3cgLSB0aGlzLmxhc3RDbGlja1xyXG5cclxuICAgICAgaWYgKGRlbHRhID4gSW5wdXQuTUlOX0NMSUNLX1RJTUlORyB8fCBkZWx0YUNsaWNrIDwgSW5wdXQuTUFYX0RPVUJMRV9DTElDS19USU1JTkcpXHJcbiAgICAgICAgcmV0dXJuXHJcblxyXG4gICAgICBpZiAoZS5zaGlmdEtleSkgKGxvYyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5tdWx0aVNlbGVjdCA9IHRydWVcclxuICAgICAgdGhpcy5lbWl0KElucHV0RXZlbnQuQ2xpY2ssIGxvYylcclxuICAgICAgdGhpcy5sYXN0Q2xpY2sgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBEb3VibGVjbGlja3Mgb24gdG91Y2ggZGV2aWNlc1xyXG4gICAgLy8gaHR0cDovL2pzZmlkZGxlLm5ldC9icmV0dHdwL0o0ZGpZL1xyXG4gICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIChlKSA9PiB7XHJcbiAgICAgIHRoaXMudG91Y2hMb2NhdGlvbiA9IGUudGFyZ2V0VG91Y2hlc1swXVxyXG4gICAgfSlcclxuICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgKGUpID0+IHtcclxuICAgICAgLy8gSWdub3JlIHRoZSBmaXJzdCBgdG91Y2hlbmRgIHdoZW4gcGluY2gtem9vbWluZyAoc28gd2UgZG9uJ3QgY29uc2lkZXIgZG91YmxlLXRhcClcclxuICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxyXG4gICAgICBjb25zdCB0YXBMZW5ndGggPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRhcFxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50YXBUaW1lb3V0KVxyXG4gICAgICBpZiAodGFwTGVuZ3RoIDwgNTAwICYmIHRhcExlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAodGhpcy50b3VjaExvY2F0aW9uKSB7XHJcbiAgICAgICAgICBjb25zdCBsb2MgPSB0aGlzLl9nZXROb3JtYWxpc2VkQ2xpY2tQb3NpdGlvbih0aGlzLnRvdWNoTG9jYXRpb24pXHJcbiAgICAgICAgICB0aGlzLmVtaXQoSW5wdXRFdmVudC5Eb3VibGVDbGljaywgbG9jKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgdGhpcy50YXBUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50YXBUaW1lb3V0KVxyXG4gICAgICAgIH0sIDUwMClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RUYXAgPSBjdXJyZW50VGltZVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIChlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9nZXROb3JtYWxpc2VkQ2xpY2tQb3NpdGlvbihlKVxyXG4gICAgICA7KGRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZXZlbnQgPSBlXHJcbiAgICAgIGlmIChlLnNoaWZ0S2V5KSAoZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5tdWx0aVNlbGVjdCA9IHRydWVcclxuICAgICAgdGhpcy5lbWl0KElucHV0RXZlbnQuRG91YmxlQ2xpY2ssIGRhdGEpXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgKGUpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2dldE5vcm1hbGlzZWRDbGlja1Bvc2l0aW9uKGUpXHJcbiAgICAgIDsoZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5ldmVudCA9IGVcclxuICAgICAgdGhpcy5lbWl0KElucHV0RXZlbnQuUG9pbnRlck1vdmUsIGRhdGEpXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IGtleVNvdXJjZSA9IHJlc3RyaWN0S2V5SW5wdXQgPyB0aGlzLmNvbnRhaW5lciA6IGRvY3VtZW50XHJcbiAgICBrZXlTb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoZSkgPT4ge1xyXG4gICAgICB0aGlzLmVtaXQoSW5wdXRFdmVudC5LZXlVcCwgZSlcclxuICAgIH0pXHJcbiAgICBrZXlTb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XHJcbiAgICAgIHRoaXMuZW1pdChJbnB1dEV2ZW50LktleURvd24sIGUpXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgKGUpID0+IHtcclxuICAgICAgdGhpcy5lbWl0KElucHV0RXZlbnQuV2hlZWwsIGUpXHJcbiAgICB9KVxyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCAoZSkgPT4ge1xyXG4gICAgICBjb25zdCBsb2MgPSB0aGlzLl9nZXROb3JtYWxpc2VkQ2xpY2tQb3NpdGlvbihlKVxyXG4gICAgICA7KGxvYyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5ldmVudCA9IGVcclxuXHJcbiAgICAgIHRoaXMuZW1pdChJbnB1dEV2ZW50LlBvaW50ZXJVcCwgbG9jKVxyXG4gICAgICB0aGlzLmVtaXQoSW5wdXRFdmVudC5Qb2ludGVyQ2FuY2VsLCBsb2MpXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGUpID0+IHtcclxuICAgICAgdGhpcy5lbWl0KElucHV0RXZlbnQuQ29udGV4dE1lbnUsIGUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uPFQgZXh0ZW5kcyBJbnB1dEV2ZW50PihcclxuICAgIGV2ZW50VHlwZTogVCxcclxuICAgIGxpc3RlbmVyOiAoYXJnOiBJbnB1dEV2ZW50UGF5bG9hZFtUXSkgPT4gdm9pZFxyXG4gICk6IHZvaWQge1xyXG4gICAgc3VwZXIub24oZXZlbnRUeXBlLCBsaXN0ZW5lcilcclxuICB9XHJcblxyXG4gIF9nZXROb3JtYWxpc2VkQ2xpY2tQb3NpdGlvbihlOiBNb3VzZUV2ZW50IHwgVG91Y2gpIHtcclxuICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly90aHJlZWpzZnVuZGFtZW50YWxzLm9yZy90aHJlZWpzL2xlc3NvbnMvdGhyZWVqcy1waWNraW5nLmh0bWxcclxuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuY29udGFpbmVyIGFzIEhUTUxDYW52YXNFbGVtZW50XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcclxuXHJcbiAgICBjb25zdCBwb3MgPSB7XHJcbiAgICAgIHg6ICgoZS5jbGllbnRYIC0gcmVjdC5sZWZ0KSAqIGNhbnZhcy53aWR0aCkgLyByZWN0LndpZHRoLFxyXG4gICAgICB5OiAoKGUuY2xpZW50WSAtIHJlY3QudG9wKSAqIGNhbnZhcy5oZWlnaHQpIC8gcmVjdC5oZWlnaHRcclxuICAgIH1cclxuICAgIGNvbnN0IHYgPSBuZXcgVmVjdG9yMihcclxuICAgICAgKHBvcy54IC8gY2FudmFzLndpZHRoKSAqIDIgLSAxLFxyXG4gICAgICAocG9zLnkgLyBjYW52YXMuaGVpZ2h0KSAqIC0yICsgMVxyXG4gICAgKVxyXG4gICAgLy8gY29uc29sZS53YXJuKHYpXHJcbiAgICByZXR1cm4gdlxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHN1cGVyLmRpc3Bvc2UoKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgdHlwZSBJbnRlcnNlY3Rpb24sXHJcbiAgT2JqZWN0M0QsXHJcbiAgUmF5Y2FzdGVyLFxyXG4gIFZlY3RvcjMsXHJcbiAgUmF5Y2FzdGVyUGFyYW1ldGVycyxcclxuICBGYWNlXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEV4dGVuZGVkVHJpYW5nbGUsIFNoYXBlY2FzdEludGVyc2VjdGlvbiB9IGZyb20gJ3RocmVlLW1lc2gtYnZoJ1xyXG5pbXBvcnQgeyBCYXRjaE9iamVjdCB9IGZyb20gJy4uL2JhdGNoaW5nL0JhdGNoT2JqZWN0LmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZU1lc2ggZnJvbSAnLi9TcGVja2xlTWVzaC5qcydcclxuaW1wb3J0IFNwZWNrbGVJbnN0YW5jZWRNZXNoIGZyb20gJy4vU3BlY2tsZUluc3RhbmNlZE1lc2guanMnXHJcblxyXG5leHBvcnQgY29uc3QgTk9UX0lOVEVSU0VDVEVEOiBTaGFwZWNhc3RJbnRlcnNlY3Rpb24gPSAwXHJcbmV4cG9ydCBjb25zdCBJTlRFUlNFQ1RFRDogU2hhcGVjYXN0SW50ZXJzZWN0aW9uID0gMVxyXG5leHBvcnQgY29uc3QgQ09OVEFJTkVEOiBTaGFwZWNhc3RJbnRlcnNlY3Rpb24gPSAyXHJcbmV4cG9ydCB0eXBlIEV4dGVuZGVkU2hhcGVDYXN0Q2FsbGJhY2tzID0ge1xyXG4gIGludGVyc2VjdHNUQVM/OiAoXHJcbiAgICBib3g6IEJveDMsXHJcbiAgICBpc0xlYWY6IGJvb2xlYW4sXHJcbiAgICBzY29yZTogbnVtYmVyIHwgdW5kZWZpbmVkLFxyXG4gICAgZGVwdGg6IG51bWJlcixcclxuICAgIG5vZGVJbmRleDogbnVtYmVyXHJcbiAgKSA9PiBTaGFwZWNhc3RJbnRlcnNlY3Rpb24gfCBib29sZWFuXHJcbiAgaW50ZXJzZWN0VEFTUmFuZ2U/OiAoYmF0Y2hPYmplY3RzOiBCYXRjaE9iamVjdCkgPT4gU2hhcGVjYXN0SW50ZXJzZWN0aW9uIHwgYm9vbGVhblxyXG4gIGludGVyc2VjdHNCb3VuZHM6IChcclxuICAgIGJveDogQm94MyxcclxuICAgIGlzTGVhZjogYm9vbGVhbixcclxuICAgIHNjb3JlOiBudW1iZXIgfCB1bmRlZmluZWQsXHJcbiAgICBkZXB0aDogbnVtYmVyLFxyXG4gICAgbm9kZUluZGV4OiBudW1iZXJcclxuICApID0+IFNoYXBlY2FzdEludGVyc2VjdGlvbiB8IGJvb2xlYW5cclxuXHJcbiAgdHJhdmVyc2VCb3VuZHNPcmRlcj86IChib3g6IEJveDMpID0+IG51bWJlclxyXG59ICYgKFxyXG4gIHwge1xyXG4gICAgICBpbnRlcnNlY3RzUmFuZ2U6IChcclxuICAgICAgICB0cmlhbmdsZU9mZnNldDogbnVtYmVyLFxyXG4gICAgICAgIHRyaWFuZ2xlQ291bnQ6IG51bWJlcixcclxuICAgICAgICBjb250YWluZWQ6IGJvb2xlYW4sXHJcbiAgICAgICAgZGVwdGg6IG51bWJlcixcclxuICAgICAgICBub2RlSW5kZXg6IG51bWJlcixcclxuICAgICAgICBib3g6IEJveDNcclxuICAgICAgKSA9PiBib29sZWFuXHJcbiAgICB9XHJcbiAgfCB7XHJcbiAgICAgIGludGVyc2VjdHNUcmlhbmdsZTogKFxyXG4gICAgICAgIHRyaWFuZ2xlOiBFeHRlbmRlZFRyaWFuZ2xlLFxyXG4gICAgICAgIHRyaWFuZ2xlSW5kZXg6IG51bWJlcixcclxuICAgICAgICBjb250YWluZWQ6IGJvb2xlYW4sXHJcbiAgICAgICAgZGVwdGg6IG51bWJlcixcclxuICAgICAgICBiYXRjaE9iamVjdD86IEJhdGNoT2JqZWN0XHJcbiAgICAgICkgPT4gYm9vbGVhbiB8IHZvaWRcclxuICAgIH1cclxuKVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHRlbmRlZEludGVyc2VjdGlvbiBleHRlbmRzIEludGVyc2VjdGlvbiB7XHJcbiAgYmF0Y2hPYmplY3Q/OiBCYXRjaE9iamVjdFxyXG4gIHBvaW50T25MaW5lPzogVmVjdG9yM1xyXG4gIC8vIG1hdGVyaWFsPzogTWF0ZXJpYWxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZXNoSW50ZXJzZWN0aW9uIGV4dGVuZHMgSW50ZXJzZWN0aW9uIHtcclxuICBmYWNlOiBGYWNlXHJcbiAgZmFjZUluZGV4OiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24gZXh0ZW5kcyBNZXNoSW50ZXJzZWN0aW9uIHtcclxuICBiYXRjaE9iamVjdDogQmF0Y2hPYmplY3RcclxuICBvYmplY3Q6IFNwZWNrbGVNZXNoIHwgU3BlY2tsZUluc3RhbmNlZE1lc2hcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHRlbmRlZFJheWNhc3RlclBhcmFtZXRlcnMgZXh0ZW5kcyBSYXljYXN0ZXJQYXJhbWV0ZXJzIHtcclxuICBMaW5lMjogeyB0aHJlc2hvbGQ6IG51bWJlciB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTcGVja2xlUmF5Y2FzdGVyIGV4dGVuZHMgUmF5Y2FzdGVyIHtcclxuICBwdWJsaWMgaW50ZXJzZWN0VEFTT25seTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgcHVibGljIG9uT2JqZWN0SW50ZXJzZWN0aW9uVGVzdDogKChvYmplY3Q6IE9iamVjdDNEKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsXHJcbiAgcHVibGljIHBhcmFtczogRXh0ZW5kZWRSYXljYXN0ZXJQYXJhbWV0ZXJzXHJcblxyXG4gIGNvbnN0cnVjdG9yKG9yaWdpbj86IFZlY3RvcjMsIGRpcmVjdGlvbj86IFZlY3RvcjMsIG5lYXIgPSAwLCBmYXIgPSBJbmZpbml0eSkge1xyXG4gICAgc3VwZXIob3JpZ2luLCBkaXJlY3Rpb24sIG5lYXIsIGZhcilcclxuICAgIHRoaXMubGF5ZXJzLmRpc2FibGVBbGwoKVxyXG4gICAgdGhpcy5sYXllcnMuZW5hYmxlKE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVClcclxuICAgIHRoaXMubGF5ZXJzLmVuYWJsZShPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSClcclxuICAgIHRoaXMubGF5ZXJzLmVuYWJsZShPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTElORSlcclxuICAgIHRoaXMubGF5ZXJzLmVuYWJsZShPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfVEVYVClcclxuICAgIHRoaXMubGF5ZXJzLmVuYWJsZShPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfUE9JTlRfQ0xPVUQpXHJcbiAgICAvLyBPRkYgYnkgZGVmYXVsdFxyXG4gICAgdGhpcy5sYXllcnMuZW5hYmxlKE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVClcclxuICAgIHRoaXMucGFyYW1zID0geyBMaW5lMjogeyB0aHJlc2hvbGQ6IDAgfSB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW50ZXJzZWN0T2JqZWN0cyhvYmplY3RzOiBBcnJheTxPYmplY3QzRD4sIHJlY3Vyc2l2ZSA9IHRydWUsIGludGVyc2VjdHMgPSBbXSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBvYmplY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCByZXQgPSBpbnRlcnNlY3RPYmplY3Qob2JqZWN0c1tpXSwgdGhpcywgaW50ZXJzZWN0cywgcmVjdXJzaXZlKVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmlyc3RIaXRPbmx5ID09PSB0cnVlICYmICFyZXQpIGJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJzZWN0cy5zb3J0KGFzY1NvcnQpXHJcblxyXG4gICAgcmV0dXJuIGludGVyc2VjdHNcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFzY1NvcnQoYTogSW50ZXJzZWN0aW9uLCBiOiBJbnRlcnNlY3Rpb24pIHtcclxuICByZXR1cm4gYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2VcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJzZWN0T2JqZWN0KFxyXG4gIG9iamVjdDogT2JqZWN0M0QsXHJcbiAgcmF5Y2FzdGVyOiBTcGVja2xlUmF5Y2FzdGVyLFxyXG4gIGludGVyc2VjdHM6IEFycmF5PEludGVyc2VjdGlvbj4sXHJcbiAgcmVjdXJzaXZlOiBib29sZWFuXHJcbik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGxlbiA9IGludGVyc2VjdHMubGVuZ3RoXHJcbiAgaWYgKG9iamVjdC5sYXllcnMudGVzdChyYXljYXN0ZXIubGF5ZXJzKSkge1xyXG4gICAgaWYgKHJheWNhc3Rlci5vbk9iamVjdEludGVyc2VjdGlvblRlc3QpIHtcclxuICAgICAgcmF5Y2FzdGVyLm9uT2JqZWN0SW50ZXJzZWN0aW9uVGVzdChvYmplY3QpXHJcbiAgICB9XHJcbiAgICBvYmplY3QucmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpXHJcbiAgfVxyXG4gIGlmIChyYXljYXN0ZXIuZmlyc3RIaXRPbmx5ID09PSB0cnVlICYmIGludGVyc2VjdHMubGVuZ3RoIC0gbGVuID4gMCkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGxldCByZXQgPSBmYWxzZVxyXG4gIHJlY3Vyc2l2ZSAmJj1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcclxuICAgIG9iamVjdC51c2VyRGF0YS5yYXljYXN0Q2hpbGRyZW4gIT0gdW5kZWZpbmVkXHJcbiAgICAgID8gb2JqZWN0LnVzZXJEYXRhLnJheWNhc3RDaGlsZHJlblxyXG4gICAgICA6IHRydWVcclxuICBpZiAocmVjdXJzaXZlID09PSB0cnVlKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlblxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIHJldCA9IGludGVyc2VjdE9iamVjdChjaGlsZHJlbltpXSwgcmF5Y2FzdGVyLCBpbnRlcnNlY3RzLCB0cnVlKVxyXG4gICAgICBpZiAocmF5Y2FzdGVyLmZpcnN0SGl0T25seSA9PT0gdHJ1ZSAmJiByZXQpIGJyZWFrXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByZXRcclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgQ2FtZXJhLFxyXG4gIE9iamVjdDNELFxyXG4gIFBsYW5lLFxyXG4gIFJheSxcclxuICBTY2VuZSxcclxuICBWZWN0b3IyLFxyXG4gIFZlY3RvcjMsXHJcbiAgVmVjdG9yNFxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBMaW5lTWF0ZXJpYWwgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbGluZXMvTGluZU1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBMaW5lU2VnbWVudHMyIH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xpbmVzL0xpbmVTZWdtZW50czIuanMnXHJcbmltcG9ydCB7XHJcbiAgRXh0ZW5kZWRJbnRlcnNlY3Rpb24sXHJcbiAgRXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uLFxyXG4gIFNwZWNrbGVSYXljYXN0ZXJcclxufSBmcm9tICcuL29iamVjdHMvU3BlY2tsZVJheWNhc3Rlci5qcydcclxuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgV29ybGQgfSBmcm9tICcuL1dvcmxkLmpzJ1xyXG5pbXBvcnQgeyBPQkIgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbWF0aC9PQkIuanMnXHJcblxyXG5leHBvcnQgY2xhc3MgSW50ZXJzZWN0aW9ucyB7XHJcbiAgcHJvdGVjdGVkIHJheWNhc3RlcjogU3BlY2tsZVJheWNhc3RlclxyXG4gIHByaXZhdGUgYm94QnVmZmVyOiBCb3gzID0gbmV3IEJveDMoKVxyXG4gIHByaXZhdGUgdmVjMEJ1ZmZlcjogVmVjdG9yNCA9IG5ldyBWZWN0b3I0KClcclxuICBwcml2YXRlIHZlYzFCdWZmZXI6IFZlY3RvcjQgPSBuZXcgVmVjdG9yNCgpXHJcbiAgcHJpdmF0ZSBib3VuZHNCdWZmZXI6IEJveDMgfCBPQkJcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5yYXljYXN0ZXIgPSBuZXcgU3BlY2tsZVJheWNhc3RlcigpXHJcbiAgICB0aGlzLnJheWNhc3Rlci5wYXJhbXMuTGluZSA9IHsgdGhyZXNob2xkOiAwLjAxIH1cclxuICAgIHRoaXMucmF5Y2FzdGVyLnBhcmFtcy5Qb2ludHMgPSB7IHRocmVzaG9sZDogMC4wMSB9XHJcbiAgICB0aGlzLnJheWNhc3Rlci5wYXJhbXMuTGluZTIgPSB7IHRocmVzaG9sZDogMSB9XHJcbiAgICB0aGlzLnJheWNhc3Rlci5vbk9iamVjdEludGVyc2VjdGlvblRlc3QgPSB0aGlzLm9uT2JqZWN0SW50ZXJzZWN0aW9uLmJpbmQodGhpcylcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbk9iamVjdEludGVyc2VjdGlvbihvYmo6IE9iamVjdDNEKSB7XHJcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTGluZVNlZ21lbnRzMikge1xyXG4gICAgICBjb25zdCBib3ggPSB0aGlzLmJveEJ1ZmZlci5zZXRGcm9tT2JqZWN0KG9iailcclxuICAgICAgY29uc3QgbWluID0gdGhpcy52ZWMwQnVmZmVyLnNldChib3gubWluLngsIGJveC5taW4ueSwgYm94Lm1pbi56LCAxKVxyXG4gICAgICBjb25zdCBtYXggPSB0aGlzLnZlYzFCdWZmZXIuc2V0KGJveC5tYXgueSwgYm94Lm1heC55LCBib3gubWF4LnosIDEpXHJcbiAgICAgIG1pblxyXG4gICAgICAgIC5hcHBseU1hdHJpeDQodGhpcy5yYXljYXN0ZXIuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSlcclxuICAgICAgICAuYXBwbHlNYXRyaXg0KHRoaXMucmF5Y2FzdGVyLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KVxyXG4gICAgICBtYXhcclxuICAgICAgICAuYXBwbHlNYXRyaXg0KHRoaXMucmF5Y2FzdGVyLmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpXHJcbiAgICAgICAgLmFwcGx5TWF0cml4NCh0aGlzLnJheWNhc3Rlci5jYW1lcmEucHJvamVjdGlvbk1hdHJpeClcclxuICAgICAgbWluXHJcbiAgICAgICAgLm11bHRpcGx5U2NhbGFyKDAuNSlcclxuICAgICAgICAubXVsdGlwbHlTY2FsYXIoMSAvIG1pbi53KVxyXG4gICAgICAgIC5hZGRTY2FsYXIoMC41KVxyXG4gICAgICBtYXhcclxuICAgICAgICAubXVsdGlwbHlTY2FsYXIoMC41KVxyXG4gICAgICAgIC5tdWx0aXBseVNjYWxhcigxIC8gbWF4LncpXHJcbiAgICAgICAgLmFkZFNjYWxhcigwLjUpXHJcblxyXG4gICAgICBjb25zdCBzc0Rpc3RhbmNlID0gbmV3IFZlY3RvcjIoKVxyXG4gICAgICAgIC5zZXQobWluLngsIG1pbi55KVxyXG4gICAgICAgIC5kaXN0YW5jZVRvKG5ldyBWZWN0b3IyKG1heC54LCBtYXgueSkpXHJcblxyXG4gICAgICBjb25zdCBtYXQ6IExpbmVNYXRlcmlhbCA9IG9iai5tYXRlcmlhbFxyXG4gICAgICBjb25zdCBsaW5lV2lkdGggPSBtYXQubGluZXdpZHRoXHJcbiAgICAgIGNvbnN0IHdvcmxkU3BhY2UgPSBtYXQud29ybGRVbml0c1xyXG4gICAgICAvKiogU28gd2UgZW1waXJpY2FsbHkgYWRqdXN0IHRoZSB0aHJlc2hvbGQgb2YgZWFjaCBsaW5lKGJhdGNoKSBiYXNlZCBvbiBpdCdzXHJcbiAgICAgICAqICBvcmlnaW5hbCBsaW5lIHdpZHRoIGFuZCBob3cgem9vbWVkIGluIHRoZSBjYW1lciBpcyBvbiB0aGUgbGluZShiYXRjaClcclxuICAgICAgICovXHJcbiAgICAgIGlmICghd29ybGRTcGFjZSkge1xyXG4gICAgICAgIHRoaXMucmF5Y2FzdGVyLnBhcmFtcy5MaW5lMi50aHJlc2hvbGQgPVxyXG4gICAgICAgICAgc3NEaXN0YW5jZSA8IDEgPyBsaW5lV2lkdGggKiA4IDogbGluZVdpZHRoICogNVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmF5Y2FzdGVyLnBhcmFtcy5MaW5lMi50aHJlc2hvbGQgPVxyXG4gICAgICAgICAgc3NEaXN0YW5jZSA8IDEgPyBsaW5lV2lkdGggKiAyIDogbGluZVdpZHRoXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbnRlcnNlY3QoXHJcbiAgICBzY2VuZTogU2NlbmUsXHJcbiAgICBjYW1lcmE6IENhbWVyYSxcclxuICAgIHBvaW50OiBWZWN0b3IyLFxyXG4gICAgY2FzdExheWVyczogT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0gsXHJcbiAgICBuZWFyZXN0PzogYm9vbGVhbixcclxuICAgIGJvdW5kcz86IEJveDMgfCBPQkIsXHJcbiAgICBmaXJzdE9ubHk/OiBib29sZWFuLFxyXG4gICAgdGFzT25seT86IGJvb2xlYW5cclxuICApOiBBcnJheTxFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24+IHwgbnVsbFxyXG4gIHB1YmxpYyBpbnRlcnNlY3QoXHJcbiAgICBzY2VuZTogU2NlbmUsXHJcbiAgICBjYW1lcmE6IENhbWVyYSxcclxuICAgIHBvaW50OiBWZWN0b3IyLFxyXG4gICAgY2FzdExheWVycz86IEFycmF5PE9iamVjdExheWVycz4sXHJcbiAgICBuZWFyZXN0PzogYm9vbGVhbixcclxuICAgIGJvdW5kcz86IEJveDMgfCBPQkIsXHJcbiAgICBmaXJzdE9ubHk/OiBib29sZWFuLFxyXG4gICAgdGFzT25seT86IGJvb2xlYW5cclxuICApOiBBcnJheTxFeHRlbmRlZEludGVyc2VjdGlvbj4gfCBudWxsXHJcblxyXG4gIHB1YmxpYyBpbnRlcnNlY3QoXHJcbiAgICBzY2VuZTogU2NlbmUsXHJcbiAgICBjYW1lcmE6IENhbWVyYSxcclxuICAgIHBvaW50OiBWZWN0b3IyLFxyXG4gICAgY2FzdExheWVyczogQXJyYXk8T2JqZWN0TGF5ZXJzPiB8IE9iamVjdExheWVycyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcclxuICAgIG5lYXJlc3QgPSB0cnVlLFxyXG4gICAgYm91bmRzPzogQm94MyB8IE9CQixcclxuICAgIGZpcnN0T25seSA9IGZhbHNlLFxyXG4gICAgdGFzT25seSA9IGZhbHNlXHJcbiAgKTogQXJyYXk8RXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uPiB8IEFycmF5PEV4dGVuZGVkSW50ZXJzZWN0aW9uPiB8IG51bGwge1xyXG4gICAgdGhpcy5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShwb2ludCwgY2FtZXJhKVxyXG4gICAgdGhpcy5yYXljYXN0ZXIuZmlyc3RIaXRPbmx5ID0gZmlyc3RPbmx5XHJcbiAgICB0aGlzLnJheWNhc3Rlci5pbnRlcnNlY3RUQVNPbmx5ID0gdGFzT25seVxyXG4gICAgY29uc3QgcHJlc2VydmVNYXNrID0gdGhpcy5zZXRSYXljYXN0ZXJMYXllcnMoY2FzdExheWVycylcclxuICAgIGxldCByZXN1bHQ6IEFycmF5PEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbj4gfCBBcnJheTxFeHRlbmRlZEludGVyc2VjdGlvbj4gfCBudWxsXHJcbiAgICBpZiAoY2FzdExheWVycyA9PT0gT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0gpIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5pbnRlcnNlY3RJbnRlcm5hbDxFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24+KHNjZW5lLCBuZWFyZXN0LCBib3VuZHMpXHJcbiAgICB9IGVsc2UgcmVzdWx0ID0gdGhpcy5pbnRlcnNlY3RJbnRlcm5hbDxFeHRlbmRlZEludGVyc2VjdGlvbj4oc2NlbmUsIG5lYXJlc3QsIGJvdW5kcylcclxuICAgIHRoaXMucmF5Y2FzdGVyLmxheWVycy5tYXNrID0gcHJlc2VydmVNYXNrXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW50ZXJzZWN0UmF5KFxyXG4gICAgc2NlbmU6IFNjZW5lLFxyXG4gICAgY2FtZXJhOiBDYW1lcmEsXHJcbiAgICByYXk6IFJheSxcclxuICAgIGNhc3RMYXllcnM6IE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNILFxyXG4gICAgbmVhcmVzdD86IGJvb2xlYW4sXHJcbiAgICBib3VuZHM/OiBCb3gzIHwgT0JCLFxyXG4gICAgZmlyc3RPbmx5PzogYm9vbGVhbixcclxuICAgIHRhc09ubHk/OiBib29sZWFuXHJcbiAgKTogQXJyYXk8RXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uPiB8IG51bGxcclxuICBwdWJsaWMgaW50ZXJzZWN0UmF5KFxyXG4gICAgc2NlbmU6IFNjZW5lLFxyXG4gICAgY2FtZXJhOiBDYW1lcmEsXHJcbiAgICByYXk6IFJheSxcclxuICAgIGNhc3RMYXllcnM/OiBBcnJheTxPYmplY3RMYXllcnM+LFxyXG4gICAgbmVhcmVzdD86IGJvb2xlYW4sXHJcbiAgICBib3VuZHM/OiBCb3gzIHwgT0JCLFxyXG4gICAgZmlyc3RPbmx5PzogYm9vbGVhbixcclxuICAgIHRhc09ubHk/OiBib29sZWFuXHJcbiAgKTogQXJyYXk8RXh0ZW5kZWRJbnRlcnNlY3Rpb24+IHwgbnVsbFxyXG5cclxuICBwdWJsaWMgaW50ZXJzZWN0UmF5KFxyXG4gICAgc2NlbmU6IFNjZW5lLFxyXG4gICAgY2FtZXJhOiBDYW1lcmEsXHJcbiAgICByYXk6IFJheSxcclxuICAgIGNhc3RMYXllcnM6IEFycmF5PE9iamVjdExheWVycz4gfCBPYmplY3RMYXllcnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXHJcbiAgICBuZWFyZXN0ID0gdHJ1ZSxcclxuICAgIGJvdW5kcz86IEJveDMgfCBPQkIsXHJcbiAgICBmaXJzdE9ubHkgPSBmYWxzZSxcclxuICAgIHRhc09ubHkgPSBmYWxzZVxyXG4gICk6IEFycmF5PEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbj4gfCBBcnJheTxFeHRlbmRlZEludGVyc2VjdGlvbj4gfCBudWxsIHtcclxuICAgIHRoaXMucmF5Y2FzdGVyLmNhbWVyYSA9IGNhbWVyYVxyXG4gICAgdGhpcy5yYXljYXN0ZXIuc2V0KHJheS5vcmlnaW4sIHJheS5kaXJlY3Rpb24pXHJcbiAgICB0aGlzLnJheWNhc3Rlci5maXJzdEhpdE9ubHkgPSBmaXJzdE9ubHlcclxuICAgIHRoaXMucmF5Y2FzdGVyLmludGVyc2VjdFRBU09ubHkgPSB0YXNPbmx5XHJcbiAgICBjb25zdCBwcmVzZXJ2ZU1hc2sgPSB0aGlzLnNldFJheWNhc3RlckxheWVycyhjYXN0TGF5ZXJzKVxyXG4gICAgbGV0IHJlc3VsdDogQXJyYXk8RXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uPiB8IEFycmF5PEV4dGVuZGVkSW50ZXJzZWN0aW9uPiB8IG51bGxcclxuICAgIGlmIChjYXN0TGF5ZXJzID09PSBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCkge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLmludGVyc2VjdEludGVybmFsPEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbj4oc2NlbmUsIG5lYXJlc3QsIGJvdW5kcylcclxuICAgIH0gZWxzZSByZXN1bHQgPSB0aGlzLmludGVyc2VjdEludGVybmFsPEV4dGVuZGVkSW50ZXJzZWN0aW9uPihzY2VuZSwgbmVhcmVzdCwgYm91bmRzKVxyXG4gICAgdGhpcy5yYXljYXN0ZXIubGF5ZXJzLm1hc2sgPSBwcmVzZXJ2ZU1hc2tcclxuICAgIHJldHVybiByZXN1bHRcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UmF5Y2FzdGVyTGF5ZXJzKFxyXG4gICAgY2FzdExheWVyczogQXJyYXk8T2JqZWN0TGF5ZXJzPiB8IE9iamVjdExheWVycyB8IHVuZGVmaW5lZFxyXG4gICk6IG51bWJlciB7XHJcbiAgICBjb25zdCBwcmVzZXJ2ZU1hc2sgPSB0aGlzLnJheWNhc3Rlci5sYXllcnMubWFza1xyXG4gICAgaWYgKGNhc3RMYXllcnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJheWNhc3Rlci5sYXllcnMuZGlzYWJsZUFsbCgpXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhc3RMYXllcnMpKVxyXG4gICAgICAgIGNhc3RMYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMucmF5Y2FzdGVyLmxheWVycy5lbmFibGUobGF5ZXIpXHJcbiAgICAgICAgfSlcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yYXljYXN0ZXIubGF5ZXJzLmVuYWJsZShjYXN0TGF5ZXJzKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJlc2VydmVNYXNrXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludGVyc2VjdEludGVybmFsPFQgZXh0ZW5kcyBFeHRlbmRlZEludGVyc2VjdGlvbj4oXHJcbiAgICBzY2VuZTogU2NlbmUsXHJcbiAgICBuZWFyZXN0PzogYm9vbGVhbixcclxuICAgIGJvdW5kcz86IEJveDMgfCBPQkJcclxuICApOiBUW10gfCBudWxsIHtcclxuICAgIGxldCByZXN1bHRzOiBUW10gfCBudWxsID0gW11cclxuICAgIGNvbnN0IHRhcmdldCA9IHNjZW5lLmdldE9iamVjdEJ5TmFtZSgnQ29udGVudEdyb3VwJylcclxuXHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgIC8vIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcclxuICAgICAgcmVzdWx0cyA9IHRoaXMucmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdHModGFyZ2V0LmNoaWxkcmVuKVxyXG4gICAgICAvLyBMb2dnZXIud2FybignSW50ZXJlc2N0IHRpbWUgLT4gJywgcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydClcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsXHJcbiAgICBpZiAobmVhcmVzdClcclxuICAgICAgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlXHJcbiAgICAgIH0pXHJcbiAgICBpZiAoYm91bmRzKSB7XHJcbiAgICAgIC8qKiBXZSBzbGlnaHRseSBpbmNyZWFzZSB0aGUgdGVzdGVkIGJvdW5kcyB0byBhY2NvdW50IGZvciBmcCBwcmVjaXNpb24gaXNzdWVzIHdoaWNoXHJcbiAgICAgICAqICBoYXZlIHByb3ZlbiB0byBhcmlzZSBleGFjdGx5IGF0IHRoZSBlZGdlIG9mIHRoZSBib3VuZHMuIE91ciBCVkggcmV0dXJucyBpbnRlcnNlY3Rpb25cclxuICAgICAgICogIHBvaW50cyBldmVyIHNvIHNsaWdodGx5IG9mZiB0aGUgYWN0dWFsIHN1cmZhY2UsIHNvIGZvciB2ZXJ5IHRoaW4gZ2VvbWV0cmllcyBpdCBtaWdodFxyXG4gICAgICAgKiAgZmFsbCBvdXRzaWRlIG9mIHRoZSBib3VuZHNcclxuICAgICAgICovXHJcbiAgICAgIHRoaXMuYm91bmRzQnVmZmVyID0gV29ybGQuZXhwYW5kQm94UmVsYXRpdmUoYm91bmRzKVxyXG5cclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgdGhpcy5ib3VuZHNCdWZmZXIuY29udGFpbnNQb2ludChyZXN1bHQucG9pbnQpIHx8XHJcbiAgICAgICAgICAocmVzdWx0LnBvaW50T25MaW5lXHJcbiAgICAgICAgICAgID8gdGhpcy5ib3VuZHNCdWZmZXIuY29udGFpbnNQb2ludChyZXN1bHQucG9pbnRPbkxpbmUpXHJcbiAgICAgICAgICAgIDogZmFsc2UpXHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHRzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGFhYmJQbGFuZVBvaW50cyA9IChwbGFuZTogUGxhbmUsIGFhYmI6IEJveDMpID0+IHtcclxuICAgIGNvbnN0IHJheSA9IG5ldyBSYXkoKVxyXG4gICAgY29uc3Qgb3V0UG9pbnRzID0gbmV3IEFycmF5PFZlY3RvcjM+KClcclxuICAgIC8vIFRlc3QgZWRnZXMgYWxvbmcgWCBheGlzLCBwb2ludGluZyByaWdodC5cclxuICAgIGNvbnN0IGRpcjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKGFhYmIubWF4LnggLSBhYWJiLm1pbi54LCAwLCAwKVxyXG4gICAgY29uc3Qgb3JpZzogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkuY29weShhYWJiLm1pbilcclxuICAgIHJheS5zZXQob3JpZywgZGlyKVxyXG4gICAgbGV0IHQgPSByYXkuZGlzdGFuY2VUb1BsYW5lKHBsYW5lKVxyXG4gICAgaWYgKHQpIHtcclxuICAgICAgb3V0UG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKS5jb3B5KG9yaWcpLmFkZFNjYWxlZFZlY3RvcihkaXIsIHQpKVxyXG4gICAgfVxyXG5cclxuICAgIG9yaWcuc2V0KGFhYmIubWluLngsIGFhYmIubWF4LnksIGFhYmIubWluLnopXHJcbiAgICByYXkuc2V0KG9yaWcsIGRpcilcclxuICAgIHQgPSByYXkuZGlzdGFuY2VUb1BsYW5lKHBsYW5lKVxyXG4gICAgaWYgKHQpIHtcclxuICAgICAgb3V0UG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKS5jb3B5KG9yaWcpLmFkZFNjYWxlZFZlY3RvcihkaXIsIHQpKVxyXG4gICAgfVxyXG5cclxuICAgIG9yaWcuc2V0KGFhYmIubWluLngsIGFhYmIubWluLnksIGFhYmIubWF4LnopXHJcbiAgICByYXkuc2V0KG9yaWcsIGRpcilcclxuICAgIHQgPSByYXkuZGlzdGFuY2VUb1BsYW5lKHBsYW5lKVxyXG4gICAgaWYgKHQpIHtcclxuICAgICAgb3V0UG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKS5jb3B5KG9yaWcpLmFkZFNjYWxlZFZlY3RvcihkaXIsIHQpKVxyXG4gICAgfVxyXG5cclxuICAgIG9yaWcuc2V0KGFhYmIubWluLngsIGFhYmIubWF4LnksIGFhYmIubWF4LnopXHJcbiAgICByYXkuc2V0KG9yaWcsIGRpcilcclxuICAgIHQgPSByYXkuZGlzdGFuY2VUb1BsYW5lKHBsYW5lKVxyXG4gICAgaWYgKHQpIHtcclxuICAgICAgb3V0UG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKS5jb3B5KG9yaWcpLmFkZFNjYWxlZFZlY3RvcihkaXIsIHQpKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFRlc3QgZWRnZXMgYWxvbmcgWSBheGlzLCBwb2ludGluZyB1cC5cclxuICAgIGRpci5zZXQoMCwgYWFiYi5tYXgueSAtIGFhYmIubWluLnksIDApXHJcbiAgICBvcmlnLnNldChhYWJiLm1pbi54LCBhYWJiLm1pbi55LCBhYWJiLm1pbi56KVxyXG4gICAgcmF5LnNldChvcmlnLCBkaXIpXHJcbiAgICB0ID0gcmF5LmRpc3RhbmNlVG9QbGFuZShwbGFuZSlcclxuICAgIGlmICh0KSB7XHJcbiAgICAgIG91dFBvaW50cy5wdXNoKG5ldyBWZWN0b3IzKCkuY29weShvcmlnKS5hZGRTY2FsZWRWZWN0b3IoZGlyLCB0KSlcclxuICAgIH1cclxuXHJcbiAgICBvcmlnLnNldChhYWJiLm1heC54LCBhYWJiLm1pbi55LCBhYWJiLm1pbi56KVxyXG4gICAgcmF5LnNldChvcmlnLCBkaXIpXHJcbiAgICB0ID0gcmF5LmRpc3RhbmNlVG9QbGFuZShwbGFuZSlcclxuICAgIGlmICh0KSB7XHJcbiAgICAgIG91dFBvaW50cy5wdXNoKG5ldyBWZWN0b3IzKCkuY29weShvcmlnKS5hZGRTY2FsZWRWZWN0b3IoZGlyLCB0KSlcclxuICAgIH1cclxuICAgIG9yaWcuc2V0KGFhYmIubWluLngsIGFhYmIubWluLnksIGFhYmIubWF4LnopXHJcbiAgICByYXkuc2V0KG9yaWcsIGRpcilcclxuICAgIHQgPSByYXkuZGlzdGFuY2VUb1BsYW5lKHBsYW5lKVxyXG4gICAgaWYgKHQpIHtcclxuICAgICAgb3V0UG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKS5jb3B5KG9yaWcpLmFkZFNjYWxlZFZlY3RvcihkaXIsIHQpKVxyXG4gICAgfVxyXG5cclxuICAgIG9yaWcuc2V0KGFhYmIubWF4LngsIGFhYmIubWluLnksIGFhYmIubWF4LnopXHJcbiAgICByYXkuc2V0KG9yaWcsIGRpcilcclxuICAgIHQgPSByYXkuZGlzdGFuY2VUb1BsYW5lKHBsYW5lKVxyXG4gICAgaWYgKHQpIHtcclxuICAgICAgb3V0UG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKS5jb3B5KG9yaWcpLmFkZFNjYWxlZFZlY3RvcihkaXIsIHQpKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFRlc3QgZWRnZXMgYWxvbmcgWiBheGlzLCBwb2ludGluZyBmb3J3YXJkLlxyXG4gICAgZGlyLnNldCgwLCAwLCBhYWJiLm1heC56IC0gYWFiYi5taW4ueilcclxuICAgIG9yaWcuc2V0KGFhYmIubWluLngsIGFhYmIubWluLnksIGFhYmIubWluLnopXHJcbiAgICByYXkuc2V0KG9yaWcsIGRpcilcclxuICAgIHQgPSByYXkuZGlzdGFuY2VUb1BsYW5lKHBsYW5lKVxyXG4gICAgaWYgKHQpIHtcclxuICAgICAgb3V0UG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKS5jb3B5KG9yaWcpLmFkZFNjYWxlZFZlY3RvcihkaXIsIHQpKVxyXG4gICAgfVxyXG4gICAgb3JpZy5zZXQoYWFiYi5tYXgueCwgYWFiYi5taW4ueSwgYWFiYi5taW4ueilcclxuICAgIHJheS5zZXQob3JpZywgZGlyKVxyXG4gICAgdCA9IHJheS5kaXN0YW5jZVRvUGxhbmUocGxhbmUpXHJcbiAgICBpZiAodCkge1xyXG4gICAgICBvdXRQb2ludHMucHVzaChuZXcgVmVjdG9yMygpLmNvcHkob3JpZykuYWRkU2NhbGVkVmVjdG9yKGRpciwgdCkpXHJcbiAgICB9XHJcbiAgICBvcmlnLnNldChhYWJiLm1pbi54LCBhYWJiLm1heC55LCBhYWJiLm1pbi56KVxyXG4gICAgcmF5LnNldChvcmlnLCBkaXIpXHJcbiAgICB0ID0gcmF5LmRpc3RhbmNlVG9QbGFuZShwbGFuZSlcclxuICAgIGlmICh0KSB7XHJcbiAgICAgIG91dFBvaW50cy5wdXNoKG5ldyBWZWN0b3IzKCkuY29weShvcmlnKS5hZGRTY2FsZWRWZWN0b3IoZGlyLCB0KSlcclxuICAgIH1cclxuICAgIG9yaWcuc2V0KGFhYmIubWF4LngsIGFhYmIubWF4LnksIGFhYmIubWluLnopXHJcbiAgICByYXkuc2V0KG9yaWcsIGRpcilcclxuICAgIHQgPSByYXkuZGlzdGFuY2VUb1BsYW5lKHBsYW5lKVxyXG4gICAgaWYgKHQpIHtcclxuICAgICAgb3V0UG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKS5jb3B5KG9yaWcpLmFkZFNjYWxlZFZlY3RvcihkaXIsIHQpKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXRQb2ludHNcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVTaGFkb3djYXRjaGVyVmVydCA9IC8qIGdsc2wgKi8gYFxyXG5cdHZhcnlpbmcgdmVjMiB2VXY7XHJcblx0XHR2b2lkIG1haW4oKSB7XHJcblx0XHRcdHZVdiA9IHZlYzIoMS4gLSB1di54LCB1di55KTtcclxuXHRcdFx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xyXG5cdFx0fVxyXG5gXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlU2hhZG93Y2F0Y2hlckZyYWcgPSAvKiBnbHNsICovIGBcclxudmFyeWluZyB2ZWMyIHZVdjtcclxuXHJcbnVuaWZvcm0gc2FtcGxlcjJEIHRleDA7XHJcbnVuaWZvcm0gc2FtcGxlcjJEIHRleDE7XHJcbnVuaWZvcm0gc2FtcGxlcjJEIHRleDI7XHJcbnVuaWZvcm0gc2FtcGxlcjJEIHRleDM7XHJcbnVuaWZvcm0gdmVjNCB3ZWlnaHRzO1xyXG51bmlmb3JtIGZsb2F0IHNpZ21vaWRSYW5nZTtcclxudW5pZm9ybSBmbG9hdCBzaWdtb2lkU3RyZW5ndGg7XHJcblxyXG52b2lkIG1haW4oKSB7XHJcblx0ZmxvYXQgY29sb3IwID0gdGV4dHVyZTJEKHRleDAsIHZVdikuciAqIHdlaWdodHMueDtcclxuXHRmbG9hdCBjb2xvcjEgPSB0ZXh0dXJlMkQodGV4MSwgdlV2KS5yICogd2VpZ2h0cy55O1xyXG5cdGZsb2F0IGNvbG9yMiA9IHRleHR1cmUyRCh0ZXgyLCB2VXYpLnIgKiB3ZWlnaHRzLno7XHJcblx0ZmxvYXQgY29sb3IzID0gdGV4dHVyZTJEKHRleDMsIHZVdikuciAqIHdlaWdodHMudztcclxuXHJcblx0Ly8gZmxvYXQgYzAgPSBtaXgoY29sb3IwLCAwLiwgY29sb3IxKTtcclxuXHQvLyBmbG9hdCBjMSA9IG1peChjb2xvcjEsIDAuLCBjb2xvcjApO1xyXG5cdC8vIGZsb2F0IGMyID0gbWl4KGNvbG9yMywgMC4sIGNvbG9yMCAqIDAuNSArIGNvbG9yMSAqIDAuNSk7XHJcblx0Ly8gZmxvYXQgc3VtID0gYzAgKyBjMSArIGMyO1xyXG5cclxuXHRmbG9hdCBzdW0gPSBjb2xvcjAgKyBjb2xvcjEgKyBjb2xvcjMgKyBjb2xvcjI7XHJcblxyXG5cdGZsb2F0IGEgPSBzaWdtb2lkUmFuZ2U7Ly8yLjtcclxuXHRmbG9hdCBiID0gMC4wMztcclxuXHRmbG9hdCBjID0gc2lnbW9pZFN0cmVuZ3RoOy8vMi40MztcclxuXHRmbG9hdCBkID0gMC41OTtcclxuXHRmbG9hdCBlID0gMC4xNDtcclxuXHRzdW0gPSBjbGFtcCgoc3VtKihhKnN1bStiKSkvKHN1bSooYypzdW0rZCkrZSksIDAuLCAxLik7XHJcblxyXG5cdHZlYzIgc1V2ID0gdlV2ICogMi4gLSAxLjtcclxuXHRzdW0gKj0gMS4gLSBwb3coYWJzKHNVdi54KSwgNi4pO1xyXG5cdHN1bSAqPSAxLiAtIHBvdyhhYnMoc1V2LnkpLCA2Lik7XHJcblxyXG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoc3VtKSwgc3VtICk7XHJcbn1cclxuYFxyXG4iLCJpbXBvcnQgeyBzcGVja2xlU2hhZG93Y2F0Y2hlclZlcnQgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1zaGFkb3djYXRjaGVyLXZlcnQuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVTaGFkb3djYXRjaGVyRnJhZyB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLXNoYWRvd2NhdGNoZS1mcmFnLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZUJhc2ljTWF0ZXJpYWwgZnJvbSAnLi9TcGVja2xlQmFzaWNNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgVmVjdG9yNCwgdHlwZSBNZXNoQmFzaWNNYXRlcmlhbFBhcmFtZXRlcnMgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgdHlwZSBVbmlmb3JtcyB9IGZyb20gJy4vU3BlY2tsZU1hdGVyaWFsLmpzJ1xyXG5cclxuY2xhc3MgU3BlY2tsZVNoYWRvd2NhdGNoZXJNYXRlcmlhbCBleHRlbmRzIFNwZWNrbGVCYXNpY01hdGVyaWFsIHtcclxuICBwcm90ZWN0ZWQgZ2V0IHZlcnRleFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlU2hhZG93Y2F0Y2hlclZlcnRcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgZnJhZ21lbnRQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZVNoYWRvd2NhdGNoZXJGcmFnXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IHVuaWZvcm1zRGVmKCk6IFVuaWZvcm1zIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnN1cGVyLnVuaWZvcm1zRGVmLFxyXG4gICAgICB0ZXgwOiBudWxsLFxyXG4gICAgICB0ZXgxOiBudWxsLFxyXG4gICAgICB0ZXgyOiBudWxsLFxyXG4gICAgICB0ZXgzOiBudWxsLFxyXG4gICAgICB3ZWlnaHRzOiBuZXcgVmVjdG9yNCgpLFxyXG4gICAgICBzaWdtb2lkUmFuZ2U6IDAsXHJcbiAgICAgIHNpZ21vaWRTdHJlbmd0aDogMFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocGFyYW1ldGVyczogTWVzaEJhc2ljTWF0ZXJpYWxQYXJhbWV0ZXJzLCBkZWZpbmVzID0gW10pIHtcclxuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGRlZmluZXMpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVja2xlU2hhZG93Y2F0Y2hlck1hdGVyaWFsXHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgU2hhZG93Y2F0Y2hlckNvbmZpZyB7XHJcbiAgdGV4dHVyZVNpemU6IG51bWJlclxyXG4gIHdlaWdodHM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcjsgdzogbnVtYmVyIH1cclxuICBibHVyUmFkaXVzOiBudW1iZXJcclxuICBzdGREZXZpYXRpb246IG51bWJlclxyXG4gIHNpZ21vaWRSYW5nZTogbnVtYmVyXHJcbiAgc2lnbW9pZFN0cmVuZ3RoOiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERlZmF1bHRTaGFkb3djYXRjaGVyQ29uZmlnOiBTaGFkb3djYXRjaGVyQ29uZmlnID0ge1xyXG4gIHRleHR1cmVTaXplOiA1MTIsXHJcbiAgd2VpZ2h0czogeyB4OiAxLCB5OiAxLCB6OiAwLCB3OiAxIH0sXHJcbiAgYmx1clJhZGl1czogMTYsXHJcbiAgc3RkRGV2aWF0aW9uOiA0LFxyXG4gIHNpZ21vaWRSYW5nZTogMS4xLFxyXG4gIHNpZ21vaWRTdHJlbmd0aDogMlxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQmFzaWNEZXB0aFBhY2tpbmcsXHJcbiAgQm94MyxcclxuICBDYW1lcmFIZWxwZXIsXHJcbiAgQ29sb3IsXHJcbiAgRG91YmxlU2lkZSxcclxuICBMaW5lYXJGaWx0ZXIsXHJcbiAgTm9CbGVuZGluZyxcclxuICBPcnRob2dyYXBoaWNDYW1lcmEsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgUGxhbmUsXHJcbiAgUmVwZWF0V3JhcHBpbmcsXHJcbiAgU2NlbmUsXHJcbiAgU2hhZGVyTWF0ZXJpYWwsXHJcbiAgVGV4dHVyZSxcclxuICBVbmlmb3Jtc1V0aWxzLFxyXG4gIFZlY3RvcjIsXHJcbiAgVmVjdG9yMyxcclxuICBWZWN0b3I0LFxyXG4gIFdlYkdMUmVuZGVyZXIsXHJcbiAgV2ViR0xSZW5kZXJUYXJnZXRcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgRnVsbFNjcmVlblF1YWQgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvUGFzcy5qcydcclxuaW1wb3J0IHtcclxuICBCbHVyU2hhZGVyVXRpbHMsXHJcbiAgRGVwdGhMaW1pdGVkQmx1clNoYWRlclxyXG59IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9zaGFkZXJzL0RlcHRoTGltaXRlZEJsdXJTaGFkZXIuanMnXHJcbmltcG9ydCBTcGVja2xlRGVwdGhNYXRlcmlhbCBmcm9tICcuLi8uLi9tYXRlcmlhbHMvU3BlY2tsZURlcHRoTWF0ZXJpYWwuanMnXHJcbmltcG9ydCBTcGVja2xlU2hhZG93Y2F0Y2hlck1hdGVyaWFsIGZyb20gJy4uLy4uL21hdGVyaWFscy9TcGVja2xlU2hhZG93Y2F0Y2hlck1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQge1xyXG4gIERlZmF1bHRTaGFkb3djYXRjaGVyQ29uZmlnLFxyXG4gIHR5cGUgU2hhZG93Y2F0Y2hlckNvbmZpZ1xyXG59IGZyb20gJy4uLy4uL1NoYWRvd2NhdGNoZXJDb25maWcuanMnXHJcbmltcG9ydCB0eXBlIHsgU3BlY2tsZVdlYkdMUmVuZGVyZXIgfSBmcm9tICcuLi8uLi9vYmplY3RzL1NwZWNrbGVXZWJHTFJlbmRlcmVyLmpzJ1xyXG5pbXBvcnQgeyBCYXNlR1Bhc3MgfSBmcm9tICcuL0dQYXNzLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFNoYWRvd2NhdGNoZXJQYXNzIGV4dGVuZHMgQmFzZUdQYXNzIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxldmVsczogbnVtYmVyID0gNFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVidWdDYW1lcmEgPSBmYWxzZVxyXG4gIHByaXZhdGUgcmVuZGVyVGFyZ2V0czogV2ViR0xSZW5kZXJUYXJnZXRbXSA9IFtdXHJcbiAgcHJpdmF0ZSB0ZW1wVGFyZ2V0czogV2ViR0xSZW5kZXJUYXJnZXRbXSA9IFtdXHJcbiAgcHJpdmF0ZSBjYW1lcmE6IE9ydGhvZ3JhcGhpY0NhbWVyYVxyXG4gIHByaXZhdGUgc2NlbmUhOiBTY2VuZVxyXG4gIHByaXZhdGUgX25lZWRzVXBkYXRlID0gZmFsc2VcclxuXHJcbiAgcHJpdmF0ZSBmc1F1YWQ6IEZ1bGxTY3JlZW5RdWFkXHJcbiAgcHJpdmF0ZSBibGVuZE1hdGVyaWFsOiBTcGVja2xlU2hhZG93Y2F0Y2hlck1hdGVyaWFsXHJcbiAgcHJpdmF0ZSBkZXB0aE1hdGVyaWFsOiBTcGVja2xlRGVwdGhNYXRlcmlhbFxyXG4gIHByaXZhdGUgdkJsdXJNYXRlcmlhbDogU2hhZGVyTWF0ZXJpYWxcclxuICBwcml2YXRlIGhCbHVyTWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsXHJcbiAgcHJpdmF0ZSBibHVyU3RkRGV2ID0gRGVmYXVsdFNoYWRvd2NhdGNoZXJDb25maWcuc3RkRGV2aWF0aW9uXHJcbiAgcHJpdmF0ZSBibHVyUmFkaXVzID0gRGVmYXVsdFNoYWRvd2NhdGNoZXJDb25maWcuYmx1clJhZGl1c1xyXG4gIHByaXZhdGUgcHJldkJsdXJTdGREZXYgPSAwXHJcbiAgcHJpdmF0ZSBwcmV2Qmx1clJhZGl1cyA9IDBcclxuICBwcml2YXRlIGNhbWVyYUhlbHBlciE6IENhbWVyYUhlbHBlclxyXG5cclxuICBwdWJsaWMgb25CZWZvcmVSZW5kZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcclxuXHJcbiAgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ1NoYWRvd2NhdGNoZXInXHJcbiAgfVxyXG5cclxuICBnZXQgb3V0cHV0VGV4dHVyZSgpOiBUZXh0dXJlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5vdXRwdXRUYXJnZXQgPyB0aGlzLm91dHB1dFRhcmdldC50ZXh0dXJlIDogbnVsbFxyXG4gIH1cclxuXHJcbiAgc2V0IG5lZWRzVXBkYXRlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBnZXQgZHJhd0RlcHRoTWF0ZXJpYWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kZXB0aE1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5sZXZlbHM7IGsrKykge1xyXG4gICAgICBjb25zdCBydCA9IG5ldyBXZWJHTFJlbmRlclRhcmdldCgyNTYsIDI1Niwge1xyXG4gICAgICAgIG1pbkZpbHRlcjogTGluZWFyRmlsdGVyLFxyXG4gICAgICAgIG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMucmVuZGVyVGFyZ2V0cy5wdXNoKHJ0KVxyXG4gICAgICB0aGlzLnRlbXBUYXJnZXRzLnB1c2gocnQuY2xvbmUoKSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm91dHB1dFRhcmdldCA9IG5ldyBXZWJHTFJlbmRlclRhcmdldCgyNTYsIDI1Niwge1xyXG4gICAgICBtaW5GaWx0ZXI6IExpbmVhckZpbHRlcixcclxuICAgICAgbWFnRmlsdGVyOiBMaW5lYXJGaWx0ZXJcclxuICAgIH0pXHJcbiAgICB0aGlzLm91dHB1dFRhcmdldC50ZXh0dXJlLndyYXBTID0gUmVwZWF0V3JhcHBpbmdcclxuICAgIHRoaXMub3V0cHV0VGFyZ2V0LnRleHR1cmUud3JhcFQgPSBSZXBlYXRXcmFwcGluZ1xyXG5cclxuICAgIHRoaXMuY2FtZXJhID0gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSgyNTYgLyAtMiwgMjU2IC8gMiwgMjU2IC8gMiwgMjU2IC8gLTIsIDAsIDEwKVxyXG5cclxuICAgIHRoaXMudkJsdXJNYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcbiAgICAgIHVuaWZvcm1zOiBVbmlmb3Jtc1V0aWxzLmNsb25lKERlcHRoTGltaXRlZEJsdXJTaGFkZXIudW5pZm9ybXMpLFxyXG4gICAgICBkZWZpbmVzOiBPYmplY3QuYXNzaWduKHt9LCBEZXB0aExpbWl0ZWRCbHVyU2hhZGVyLmRlZmluZXMpLFxyXG4gICAgICB2ZXJ0ZXhTaGFkZXI6IERlcHRoTGltaXRlZEJsdXJTaGFkZXIudmVydGV4U2hhZGVyLFxyXG4gICAgICBmcmFnbWVudFNoYWRlcjogRGVwdGhMaW1pdGVkQmx1clNoYWRlci5mcmFnbWVudFNoYWRlclxyXG4gICAgfSlcclxuICAgIHRoaXMudkJsdXJNYXRlcmlhbC5kZWZpbmVzWydERVBUSF9QQUNLSU5HJ10gPSAxXHJcbiAgICB0aGlzLnZCbHVyTWF0ZXJpYWwuYmxlbmRpbmcgPSBOb0JsZW5kaW5nXHJcblxyXG4gICAgdGhpcy5oQmx1ck1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMuY2xvbmUoRGVwdGhMaW1pdGVkQmx1clNoYWRlci51bmlmb3JtcyksXHJcbiAgICAgIGRlZmluZXM6IE9iamVjdC5hc3NpZ24oe30sIERlcHRoTGltaXRlZEJsdXJTaGFkZXIuZGVmaW5lcyksXHJcbiAgICAgIHZlcnRleFNoYWRlcjogRGVwdGhMaW1pdGVkQmx1clNoYWRlci52ZXJ0ZXhTaGFkZXIsXHJcbiAgICAgIGZyYWdtZW50U2hhZGVyOiBEZXB0aExpbWl0ZWRCbHVyU2hhZGVyLmZyYWdtZW50U2hhZGVyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5oQmx1ck1hdGVyaWFsLmRlZmluZXNbJ0RFUFRIX1BBQ0tJTkcnXSA9IDFcclxuICAgIHRoaXMuaEJsdXJNYXRlcmlhbC5ibGVuZGluZyA9IE5vQmxlbmRpbmdcclxuXHJcbiAgICB0aGlzLmRlcHRoTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZURlcHRoTWF0ZXJpYWwoXHJcbiAgICAgIHtcclxuICAgICAgICBkZXB0aFBhY2tpbmc6IEJhc2ljRGVwdGhQYWNraW5nXHJcbiAgICAgIH0sXHJcbiAgICAgIFsnVVNFX1JURSddXHJcbiAgICApXHJcbiAgICB0aGlzLmRlcHRoTWF0ZXJpYWwuYmxlbmRpbmcgPSBOb0JsZW5kaW5nXHJcbiAgICB0aGlzLmRlcHRoTWF0ZXJpYWwuc2lkZSA9IERvdWJsZVNpZGVcclxuXHJcbiAgICB0aGlzLmJsZW5kTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZVNoYWRvd2NhdGNoZXJNYXRlcmlhbCh7fSlcclxuICAgIHRoaXMuZnNRdWFkID0gbmV3IEZ1bGxTY3JlZW5RdWFkKHRoaXMudkJsdXJNYXRlcmlhbClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGUoc2NlbmU6IFNjZW5lKSB7XHJcbiAgICB0aGlzLnNjZW5lID0gc2NlbmVcclxuICAgIGlmICh0aGlzLl9uZWVkc1VwZGF0ZSkge1xyXG4gICAgICBpZiAoIXRoaXMuY2FtZXJhSGVscGVyICYmIHRoaXMuZGVidWdDYW1lcmEpIHtcclxuICAgICAgICB0aGlzLmNhbWVyYUhlbHBlciA9IG5ldyBDYW1lcmFIZWxwZXIodGhpcy5jYW1lcmEpXHJcbiAgICAgICAgdGhpcy5jYW1lcmFIZWxwZXIubGF5ZXJzLnNldChPYmplY3RMYXllcnMuUFJPUFMpXHJcbiAgICAgICAgdGhpcy5zY2VuZS5hZGQodGhpcy5jYW1lcmFIZWxwZXIpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY2FtZXJhSGVscGVyKSB7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFIZWxwZXIudXBkYXRlKClcclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqIEJMVVIgREVGSU5FUyAqL1xyXG4gICAgICB0aGlzLnZCbHVyTWF0ZXJpYWwuZGVmaW5lc1snUEVSU1BFQ1RJVkVfQ0FNRVJBJ10gPSAwXHJcbiAgICAgIHRoaXMuaEJsdXJNYXRlcmlhbC5kZWZpbmVzWydQRVJTUEVDVElWRV9DQU1FUkEnXSA9IDBcclxuXHJcbiAgICAgIC8qKiBCTFVSIFVOSUZPUk1TICovXHJcbiAgICAgIHRoaXMudkJsdXJNYXRlcmlhbC51bmlmb3Jtc1snY2FtZXJhTmVhciddLnZhbHVlID0gKFxyXG4gICAgICAgIHRoaXMuY2FtZXJhIGFzIFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhXHJcbiAgICAgICkubmVhclxyXG4gICAgICB0aGlzLnZCbHVyTWF0ZXJpYWwudW5pZm9ybXNbJ2NhbWVyYUZhciddLnZhbHVlID0gKFxyXG4gICAgICAgIHRoaXMuY2FtZXJhIGFzIFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhXHJcbiAgICAgICkuZmFyXHJcbiAgICAgIHRoaXMuaEJsdXJNYXRlcmlhbC51bmlmb3Jtc1snY2FtZXJhTmVhciddLnZhbHVlID0gKFxyXG4gICAgICAgIHRoaXMuY2FtZXJhIGFzIFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhXHJcbiAgICAgICkubmVhclxyXG4gICAgICB0aGlzLmhCbHVyTWF0ZXJpYWwudW5pZm9ybXNbJ2NhbWVyYUZhciddLnZhbHVlID0gKFxyXG4gICAgICAgIHRoaXMuY2FtZXJhIGFzIFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhXHJcbiAgICAgICkuZmFyXHJcblxyXG4gICAgICAvKiogQkxVUiBVTklGT1JNIFBBUkFNUyAqL1xyXG4gICAgICBjb25zdCBkZXB0aEN1dG9mZiA9IDBcclxuICAgICAgdGhpcy52Qmx1ck1hdGVyaWFsLnVuaWZvcm1zWydkZXB0aEN1dG9mZiddLnZhbHVlID0gZGVwdGhDdXRvZmZcclxuICAgICAgdGhpcy5oQmx1ck1hdGVyaWFsLnVuaWZvcm1zWydkZXB0aEN1dG9mZiddLnZhbHVlID0gZGVwdGhDdXRvZmZcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMucHJldkJsdXJTdGREZXYgIT09IHRoaXMuYmx1clN0ZERldiB8fFxyXG4gICAgICAgIHRoaXMucHJldkJsdXJSYWRpdXMgIT09IHRoaXMuYmx1clJhZGl1c1xyXG4gICAgICApIHtcclxuICAgICAgICBCbHVyU2hhZGVyVXRpbHMuY29uZmlndXJlKFxyXG4gICAgICAgICAgdGhpcy52Qmx1ck1hdGVyaWFsLFxyXG4gICAgICAgICAgdGhpcy5ibHVyUmFkaXVzLFxyXG4gICAgICAgICAgdGhpcy5ibHVyU3RkRGV2LFxyXG4gICAgICAgICAgbmV3IFZlY3RvcjIoMCwgMSlcclxuICAgICAgICApXHJcbiAgICAgICAgQmx1clNoYWRlclV0aWxzLmNvbmZpZ3VyZShcclxuICAgICAgICAgIHRoaXMuaEJsdXJNYXRlcmlhbCxcclxuICAgICAgICAgIHRoaXMuYmx1clJhZGl1cyxcclxuICAgICAgICAgIHRoaXMuYmx1clN0ZERldixcclxuICAgICAgICAgIG5ldyBWZWN0b3IyKDEsIDApXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMucHJldkJsdXJTdGREZXYgPSB0aGlzLmJsdXJTdGREZXZcclxuICAgICAgICB0aGlzLnByZXZCbHVyUmFkaXVzID0gdGhpcy5ibHVyUmFkaXVzXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudkJsdXJNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgICAgdGhpcy5oQmx1ck1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcihfcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLl9uZWVkc1VwZGF0ZSkge1xyXG4gICAgICBjb25zdCByZW5kZXJlciA9IF9yZW5kZXJlciBhcyBTcGVja2xlV2ViR0xSZW5kZXJlclxyXG4gICAgICByZW5kZXJlci5SVEVCdWZmZXJzLnB1c2goKVxyXG4gICAgICByZW5kZXJlci51cGRhdGVSVEVWaWV3TW9kZWwodGhpcy5jYW1lcmEpXHJcblxyXG4gICAgICBjb25zdCBjb2xvckJ1ZmZlciA9IG5ldyBDb2xvcigpXHJcbiAgICAgIHJlbmRlcmVyLmdldENsZWFyQ29sb3IoY29sb3JCdWZmZXIpXHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ2xlYXJBbHBoYSA9IHJlbmRlcmVyLmdldENsZWFyQWxwaGEoKVxyXG4gICAgICBjb25zdCBvcmlnaW5hbEF1dG9DbGVhciA9IHJlbmRlcmVyLmF1dG9DbGVhclxyXG5cclxuICAgICAgaWYgKHRoaXMub25CZWZvcmVSZW5kZXIpIHRoaXMub25CZWZvcmVSZW5kZXIoKVxyXG4gICAgICB0aGlzLmFwcGx5TGF5ZXJzKHRoaXMuY2FtZXJhKVxyXG5cclxuICAgICAgY29uc3QgbWF4Q2FtZXJhRmFyID0gdGhpcy5jYW1lcmEuZmFyXHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5yZW5kZXJUYXJnZXRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEuZmFyID0gbWF4Q2FtZXJhRmFyXHJcbiAgICAgICAgaWYgKGsgPCAyKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbWVyYS5mYXIgPSBtYXhDYW1lcmFGYXIgLyAxMDBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGsgPT09IDIpIHtcclxuICAgICAgICAgIHRoaXMuY2FtZXJhLmZhciA9IG1heENhbWVyYUZhciAvIDRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKVxyXG5cclxuICAgICAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJUYXJnZXRzW2tdKVxyXG4gICAgICAgIHJlbmRlcmVyLnNldENsZWFyQ29sb3IoMHgwMDAwMDApXHJcbiAgICAgICAgcmVuZGVyZXIuc2V0Q2xlYXJBbHBoYSgxKVxyXG4gICAgICAgIHJlbmRlcmVyLmNsZWFyKClcclxuICAgICAgICByZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEpXHJcbiAgICAgICAgdGhpcy5zY2VuZS5vdmVycmlkZU1hdGVyaWFsID0gbnVsbFxyXG5cclxuICAgICAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGhpcy50ZW1wVGFyZ2V0c1trXSlcclxuICAgICAgICByZW5kZXJlci5zZXRDbGVhckNvbG9yKDB4ZmZmZmZmKVxyXG4gICAgICAgIHJlbmRlcmVyLnNldENsZWFyQWxwaGEoMS4wKVxyXG4gICAgICAgIHJlbmRlcmVyLmNsZWFyKClcclxuXHJcbiAgICAgICAgdGhpcy52Qmx1ck1hdGVyaWFsLnVuaWZvcm1zWyd0RGlmZnVzZSddLnZhbHVlID0gdGhpcy5yZW5kZXJUYXJnZXRzW2tdLnRleHR1cmVcclxuICAgICAgICB0aGlzLnZCbHVyTWF0ZXJpYWwudW5pZm9ybXNbJ3NpemUnXS52YWx1ZS5zZXQoXHJcbiAgICAgICAgICB0aGlzLnJlbmRlclRhcmdldHNba10ud2lkdGgsXHJcbiAgICAgICAgICB0aGlzLnJlbmRlclRhcmdldHNba10uaGVpZ2h0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMudkJsdXJNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgICAgICB0aGlzLmZzUXVhZC5tYXRlcmlhbCA9IHRoaXMudkJsdXJNYXRlcmlhbFxyXG4gICAgICAgIHRoaXMuZnNRdWFkLnJlbmRlcihyZW5kZXJlcilcclxuXHJcbiAgICAgICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyVGFyZ2V0c1trXSlcclxuICAgICAgICB0aGlzLmhCbHVyTWF0ZXJpYWwudW5pZm9ybXNbJ3REaWZmdXNlJ10udmFsdWUgPSB0aGlzLnRlbXBUYXJnZXRzW2tdLnRleHR1cmVcclxuICAgICAgICB0aGlzLmhCbHVyTWF0ZXJpYWwudW5pZm9ybXNbJ3NpemUnXS52YWx1ZS5zZXQoXHJcbiAgICAgICAgICB0aGlzLnRlbXBUYXJnZXRzW2tdLndpZHRoLFxyXG4gICAgICAgICAgdGhpcy50ZW1wVGFyZ2V0c1trXS5oZWlnaHRcclxuICAgICAgICApXHJcbiAgICAgICAgdGhpcy5oQmx1ck1hdGVyaWFsLm5lZWRzVXBkYXRlXHJcbiAgICAgICAgdGhpcy5mc1F1YWQubWF0ZXJpYWwgPSB0aGlzLmhCbHVyTWF0ZXJpYWxcclxuICAgICAgICB0aGlzLmZzUXVhZC5yZW5kZXIocmVuZGVyZXIpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLm91dHB1dFRhcmdldClcclxuICAgICAgcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigweDAwMDAwMClcclxuICAgICAgcmVuZGVyZXIuc2V0Q2xlYXJBbHBoYSgxKVxyXG4gICAgICB0aGlzLmJsZW5kTWF0ZXJpYWwudXNlckRhdGEudGV4MC52YWx1ZSA9IHRoaXMucmVuZGVyVGFyZ2V0c1swXS50ZXh0dXJlXHJcbiAgICAgIHRoaXMuYmxlbmRNYXRlcmlhbC51c2VyRGF0YS50ZXgxLnZhbHVlID0gdGhpcy5yZW5kZXJUYXJnZXRzWzFdLnRleHR1cmVcclxuICAgICAgdGhpcy5ibGVuZE1hdGVyaWFsLnVzZXJEYXRhLnRleDIudmFsdWUgPSB0aGlzLnJlbmRlclRhcmdldHNbMl0udGV4dHVyZVxyXG4gICAgICB0aGlzLmJsZW5kTWF0ZXJpYWwudXNlckRhdGEudGV4My52YWx1ZSA9IHRoaXMucmVuZGVyVGFyZ2V0c1szXS50ZXh0dXJlXHJcbiAgICAgIHRoaXMuZnNRdWFkLm1hdGVyaWFsID0gdGhpcy5ibGVuZE1hdGVyaWFsXHJcbiAgICAgIHRoaXMuZnNRdWFkLnJlbmRlcihyZW5kZXJlcilcclxuXHJcbiAgICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChudWxsKVxyXG4gICAgICByZW5kZXJlci5hdXRvQ2xlYXIgPSBvcmlnaW5hbEF1dG9DbGVhclxyXG4gICAgICByZW5kZXJlci5zZXRDbGVhckNvbG9yKGNvbG9yQnVmZmVyKVxyXG4gICAgICByZW5kZXJlci5zZXRDbGVhckFscGhhKG9yaWdpbmFsQ2xlYXJBbHBoYSlcclxuXHJcbiAgICAgIHJlbmRlcmVyLlJURUJ1ZmZlcnMucG9wKClcclxuXHJcbiAgICAgIGlmICh0aGlzLm9uQWZ0ZXJSZW5kZXIpIHRoaXMub25BZnRlclJlbmRlcigpXHJcbiAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gZmFsc2VcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUNsaXBwaW5nUGxhbmVzKHBsYW5lczogUGxhbmVbXSkge1xyXG4gICAgdGhpcy5kZXB0aE1hdGVyaWFsLmNsaXBwaW5nUGxhbmVzID0gcGxhbmVzXHJcbiAgICB0aGlzLmRlcHRoTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0T3V0cHV0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnJlbmRlclRhcmdldHNbMF0ud2lkdGggIT09IHdpZHRoIHx8XHJcbiAgICAgIHRoaXMucmVuZGVyVGFyZ2V0c1swXS5oZWlnaHQgIT09IGhlaWdodFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMub3V0cHV0VGFyZ2V0Py5zZXRTaXplKHdpZHRoLCBoZWlnaHQpXHJcbiAgICAgIHRoaXMuYmxlbmRNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgICAgbGV0IGRpdiA9IDFcclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLnJlbmRlclRhcmdldHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBjb25zdCB3ID0gTWF0aC50cnVuYyh3aWR0aCAqIGRpdilcclxuICAgICAgICBjb25zdCBoID0gTWF0aC50cnVuYyhoZWlnaHQgKiBkaXYpXHJcbiAgICAgICAgdGhpcy5yZW5kZXJUYXJnZXRzW2tdLnNldFNpemUodywgaClcclxuICAgICAgICB0aGlzLnRlbXBUYXJnZXRzW2tdLnNldFNpemUodywgaClcclxuICAgICAgICBkaXYgKj0gMC41XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRXZWlnaHRzKHdlaWdodHM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcjsgdzogbnVtYmVyIH0pIHtcclxuICAgIHRoaXMuYmxlbmRNYXRlcmlhbC51c2VyRGF0YS53ZWlnaHRzLnZhbHVlID0gbmV3IFZlY3RvcjQoXHJcbiAgICAgIHdlaWdodHMueCxcclxuICAgICAgd2VpZ2h0cy55LFxyXG4gICAgICB3ZWlnaHRzLnosXHJcbiAgICAgIHdlaWdodHMud1xyXG4gICAgKVxyXG4gICAgdGhpcy5ibGVuZE1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUNhbWVyYShwbGFuZUJveDogQm94MywgbmVhcjogbnVtYmVyLCBmYXI6IG51bWJlcikge1xyXG4gICAgY29uc3QgcGxhbmVTaXplID0gcGxhbmVCb3guZ2V0U2l6ZShuZXcgVmVjdG9yMygpKVxyXG4gICAgY29uc3QgcGxhbmVDZW50ZXIgPSBwbGFuZUJveC5nZXRDZW50ZXIobmV3IFZlY3RvcjMoKSlcclxuICAgIHRoaXMuY2FtZXJhLnBvc2l0aW9uLmNvcHkoXHJcbiAgICAgIG5ldyBWZWN0b3IzKCkuY29weShwbGFuZUNlbnRlcikuYWRkKG5ldyBWZWN0b3IzKDAsIDAsIC0wLjAwMSkpXHJcbiAgICApXHJcbiAgICB0aGlzLmNhbWVyYS5sb29rQXQocGxhbmVDZW50ZXIpXHJcbiAgICB0aGlzLmNhbWVyYS5sZWZ0ID0gcGxhbmVTaXplLnggLyAtMlxyXG4gICAgdGhpcy5jYW1lcmEucmlnaHQgPSBwbGFuZVNpemUueCAvIDJcclxuICAgIHRoaXMuY2FtZXJhLnRvcCA9IHBsYW5lU2l6ZS55IC8gMlxyXG4gICAgdGhpcy5jYW1lcmEuYm90dG9tID0gcGxhbmVTaXplLnkgLyAtMlxyXG4gICAgdGhpcy5jYW1lcmEubmVhciA9IG5lYXJcclxuICAgIHRoaXMuY2FtZXJhLmZhciA9IGZhclxyXG4gICAgdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpXHJcbiAgICB0aGlzLmNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCh0cnVlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUNvbmZpZyhjb25maWc6IFNoYWRvd2NhdGNoZXJDb25maWcpIHtcclxuICAgIHRoaXMuYmx1clJhZGl1cyA9IGNvbmZpZy5ibHVyUmFkaXVzXHJcbiAgICB0aGlzLmJsdXJTdGREZXYgPSBjb25maWcuc3RkRGV2aWF0aW9uXHJcbiAgICB0aGlzLmJsZW5kTWF0ZXJpYWwudXNlckRhdGEuc2lnbW9pZFJhbmdlLnZhbHVlID0gY29uZmlnLnNpZ21vaWRSYW5nZVxyXG4gICAgdGhpcy5ibGVuZE1hdGVyaWFsLnVzZXJEYXRhLnNpZ21vaWRTdHJlbmd0aC52YWx1ZSA9IGNvbmZpZy5zaWdtb2lkU3RyZW5ndGhcclxuICAgIHRoaXMuYmxlbmRNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICB3aWR0aFxyXG4gICAgaGVpZ2h0XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQWRkRXF1YXRpb24sXHJcbiAgQm94MyxcclxuICBDdXN0b21CbGVuZGluZyxcclxuICBEc3RBbHBoYUZhY3RvcixcclxuICBNYXRyaXg0LFxyXG4gIE1heEVxdWF0aW9uLFxyXG4gIE1lc2gsXHJcbiAgT25lRmFjdG9yLFxyXG4gIFBsYW5lLFxyXG4gIFBsYW5lR2VvbWV0cnksXHJcbiAgU2NlbmUsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzLFxyXG4gIFplcm9GYWN0b3JcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICcuL2NvbnZlcnRlci9HZW9tZXRyeS5qcydcclxuaW1wb3J0IFNwZWNrbGVCYXNpY01hdGVyaWFsIGZyb20gJy4vbWF0ZXJpYWxzL1NwZWNrbGVCYXNpY01hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBTaGFkb3djYXRjaGVyUGFzcyB9IGZyb20gJy4vcGlwZWxpbmUvUGFzc2VzL1NoYWRvd2NhdGNoZXJQYXNzLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQge1xyXG4gIERlZmF1bHRTaGFkb3djYXRjaGVyQ29uZmlnLFxyXG4gIHR5cGUgU2hhZG93Y2F0Y2hlckNvbmZpZ1xyXG59IGZyb20gJy4vU2hhZG93Y2F0Y2hlckNvbmZpZy5qcydcclxuaW1wb3J0IHR5cGUgeyBTcGVja2xlV2ViR0xSZW5kZXJlciB9IGZyb20gJy4vb2JqZWN0cy9TcGVja2xlV2ViR0xSZW5kZXJlci5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBTaGFkb3djYXRjaGVyIHtcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1FU0hfTkFNRSA9ICdTaGFkb3djYXRjaGVyJ1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUExBTkVfU1VCRCA9IDJcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWF9URVhUVVJFX1NJWkVfU0NBTEUgPSAwLjVcclxuICBwcml2YXRlIHBsYW5lTWVzaDogTWVzaFxyXG4gIHByaXZhdGUgcGxhbmVTaXplOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoKVxyXG4gIHByaXZhdGUgZGlzcGxheU1hdGVyaWFsOiBTcGVja2xlQmFzaWNNYXRlcmlhbFxyXG4gIHB1YmxpYyBzaGFkb3djYXRjaGVyUGFzczogU2hhZG93Y2F0Y2hlclBhc3NcclxuICBwcml2YXRlIF9jb25maWc6IFNoYWRvd2NhdGNoZXJDb25maWcgPSBEZWZhdWx0U2hhZG93Y2F0Y2hlckNvbmZpZ1xyXG5cclxuICBwdWJsaWMgZ2V0IHNoYWRvd2NhdGNoZXJNZXNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGxhbmVNZXNoXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNvbmZpZ3VyYXRpb24oY29uZmlnOiBTaGFkb3djYXRjaGVyQ29uZmlnKSB7XHJcbiAgICB0aGlzLl9jb25maWcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbmZpZykpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IobGF5ZXI6IE9iamVjdExheWVycywgcmVuZGVybGF5ZXJzOiBBcnJheTxPYmplY3RMYXllcnM+KSB7XHJcbiAgICB0aGlzLnNoYWRvd2NhdGNoZXJQYXNzID0gbmV3IFNoYWRvd2NhdGNoZXJQYXNzKClcclxuICAgIHRoaXMuc2hhZG93Y2F0Y2hlclBhc3Muc2V0TGF5ZXJzKHJlbmRlcmxheWVycylcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlNYXRlcmlhbCA9IG5ldyBTcGVja2xlQmFzaWNNYXRlcmlhbCh7IGNvbG9yOiAweGZmZmZmZiB9LCBbJ1VTRV9SVEUnXSlcclxuICAgIHRoaXMuZGlzcGxheU1hdGVyaWFsLnRvbmVNYXBwZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5kaXNwbGF5TWF0ZXJpYWwubWFwID0gdGhpcy5zaGFkb3djYXRjaGVyUGFzcy5vdXRwdXRUZXh0dXJlXHJcbiAgICAvLyB0aGlzLmRpc3BsYXlNYXRlcmlhbC5tYXAud3JhcFMgPSBSZXBlYXRXcmFwcGluZ1xyXG4gICAgLy8gdGhpcy5kaXNwbGF5TWF0ZXJpYWwubWFwLnJlcGVhdC54ID0gLTFcclxuICAgIHRoaXMuZGlzcGxheU1hdGVyaWFsLnRvbmVNYXBwZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5kaXNwbGF5TWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlXHJcbiAgICB0aGlzLmRpc3BsYXlNYXRlcmlhbC5ibGVuZGluZyA9IEN1c3RvbUJsZW5kaW5nXHJcbiAgICB0aGlzLmRpc3BsYXlNYXRlcmlhbC5ibGVuZEVxdWF0aW9uID0gQWRkRXF1YXRpb25cclxuICAgIHRoaXMuZGlzcGxheU1hdGVyaWFsLmJsZW5kRXF1YXRpb25BbHBoYSA9IE1heEVxdWF0aW9uXHJcbiAgICB0aGlzLmRpc3BsYXlNYXRlcmlhbC5ibGVuZFNyYyA9IFplcm9GYWN0b3JcclxuICAgIHRoaXMuZGlzcGxheU1hdGVyaWFsLmJsZW5kU3JjQWxwaGEgPSBPbmVGYWN0b3JcclxuICAgIHRoaXMuZGlzcGxheU1hdGVyaWFsLmJsZW5kRHN0ID0gRHN0QWxwaGFGYWN0b3JcclxuICAgIHRoaXMuZGlzcGxheU1hdGVyaWFsLmJsZW5kRHN0QWxwaGEgPSBPbmVGYWN0b3JcclxuICAgIHRoaXMuZGlzcGxheU1hdGVyaWFsLmFscGhhVGVzdCA9IDAuMDAxXHJcbiAgICB0aGlzLmRpc3BsYXlNYXRlcmlhbC5kZXB0aFdyaXRlID0gZmFsc2VcclxuXHJcbiAgICB0aGlzLnBsYW5lTWVzaCA9IG5ldyBNZXNoKClcclxuICAgIHRoaXMucGxhbmVNZXNoLm1hdGVyaWFsID0gdGhpcy5kaXNwbGF5TWF0ZXJpYWxcclxuICAgIHRoaXMucGxhbmVNZXNoLmxheWVycy5zZXQobGF5ZXIpXHJcbiAgICB0aGlzLnBsYW5lTWVzaC5uYW1lID0gU2hhZG93Y2F0Y2hlci5NRVNIX05BTUVcclxuICAgIHRoaXMucGxhbmVNZXNoLmZydXN0dW1DdWxsZWQgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZShzY2VuZTogU2NlbmUpIHtcclxuICAgIHRoaXMuc2hhZG93Y2F0Y2hlclBhc3MudXBkYXRlQ29uZmlnKHRoaXMuX2NvbmZpZylcclxuICAgIHRoaXMuc2hhZG93Y2F0Y2hlclBhc3MudXBkYXRlKHNjZW5lKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcihyZW5kZXJlcjogU3BlY2tsZVdlYkdMUmVuZGVyZXIpIHtcclxuICAgIHRoaXMuc2hhZG93Y2F0Y2hlclBhc3MucmVuZGVyKHJlbmRlcmVyKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGJha2Uod29ybGRCb3g6IEJveDMsIG1heFRleFNpemU6IG51bWJlciwgZm9yY2U/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVBsYW5lTWVzaCh3b3JsZEJveCwgZm9yY2UpXHJcbiAgICBjb25zdCBzaXplID0gdGhpcy5nZXRUZXh0dXJlU2l6ZShtYXhUZXhTaXplKVxyXG4gICAgY29uc3QgcGxhbmVCb3ggPSBuZXcgQm94MygpLnNldEZyb21PYmplY3QodGhpcy5wbGFuZU1lc2gpXHJcbiAgICBjb25zdCB3b3JsZEhlaWdodCA9IHdvcmxkQm94LmdldFNpemUobmV3IFZlY3RvcjMoKSkuelxyXG4gICAgdGhpcy5zaGFkb3djYXRjaGVyUGFzcy51cGRhdGVDYW1lcmEocGxhbmVCb3gsIDAuMDAxLCB3b3JsZEhlaWdodClcclxuICAgIHRoaXMuc2hhZG93Y2F0Y2hlclBhc3Muc2V0T3V0cHV0U2l6ZShzaXplLngsIHNpemUueSlcclxuICAgIHRoaXMuc2hhZG93Y2F0Y2hlclBhc3Muc2V0V2VpZ2h0cyh0aGlzLl9jb25maWcud2VpZ2h0cylcclxuICAgIHRoaXMuc2hhZG93Y2F0Y2hlclBhc3MubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2xpcHBpbmdQbGFuZXMocGxhbmVzOiBQbGFuZVtdKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlNYXRlcmlhbC5jbGlwcGluZ1BsYW5lcyA9IHBsYW5lc1xyXG4gICAgdGhpcy5kaXNwbGF5TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB0aGlzLnNoYWRvd2NhdGNoZXJQYXNzLnVwZGF0ZUNsaXBwaW5nUGxhbmVzKHBsYW5lcylcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGV4dHVyZVNpemUobWF4VGV4U2l6ZTogbnVtYmVyKTogVmVjdG9yMiB7XHJcbiAgICBjb25zdCBhc3BlY3QgPSB0aGlzLnBsYW5lU2l6ZS54IC8gdGhpcy5wbGFuZVNpemUueVxyXG4gICAgY29uc3Qgc2l6ZSA9IG5ldyBWZWN0b3IyKClcclxuICAgIHNpemUueCA9IE1hdGgudHJ1bmModGhpcy5fY29uZmlnLnRleHR1cmVTaXplKVxyXG4gICAgc2l6ZS55ID0gTWF0aC50cnVuYyh0aGlzLl9jb25maWcudGV4dHVyZVNpemUgLyBhc3BlY3QpXHJcblxyXG4gICAgaWYgKHNpemUueSA+IG1heFRleFNpemUgKiBTaGFkb3djYXRjaGVyLk1BWF9URVhUVVJFX1NJWkVfU0NBTEUpIHtcclxuICAgICAgc2l6ZS55ID0gbWF4VGV4U2l6ZSAqIFNoYWRvd2NhdGNoZXIuTUFYX1RFWFRVUkVfU0laRV9TQ0FMRVxyXG4gICAgICBzaXplLnggPSBhc3BlY3QgKiBzaXplLnlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2l6ZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQbGFuZU1lc2goYm94OiBCb3gzLCBmb3JjZT86IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGJveFNpemUgPSBib3guZ2V0U2l6ZShuZXcgVmVjdG9yMygpKVxyXG4gICAgY29uc3QgYm94Q2VudGVyID0gYm94LmdldENlbnRlcihuZXcgVmVjdG9yMygpKVxyXG4gICAgY29uc3QgbmVlZHNSZWJ1aWxkID1cclxuICAgICAgbmV3IFZlY3RvcjIoYm94U2l6ZS54LCBib3hTaXplLnkpLmRpc3RhbmNlVG8odGhpcy5wbGFuZVNpemUpID4gMC4wMDFcclxuXHJcbiAgICBpZiAobmVlZHNSZWJ1aWxkIHx8IGZvcmNlKVxyXG4gICAgICB0aGlzLnVwZGF0ZVBsYW5lTWVzaEdlb21ldHJ5KFxyXG4gICAgICAgIG5ldyBWZWN0b3IyKGJveFNpemUueCAqIDIsIGJveFNpemUueSAqIDIpLFxyXG4gICAgICAgIG5ldyBWZWN0b3IzKGJveENlbnRlci54LCBib3hDZW50ZXIueSwgYm94Q2VudGVyLnogLSBib3hTaXplLnogKiAwLjUgLSAwLjAwMSlcclxuICAgICAgKVxyXG5cclxuICAgIHRoaXMucGxhbmVTaXplLnNldChib3hTaXplLngsIGJveFNpemUueSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGxhbmVNZXNoR2VvbWV0cnkoc2l6ZTogVmVjdG9yMiwgb3JpZ2luOiBWZWN0b3IzKSB7XHJcbiAgICBpZiAodGhpcy5wbGFuZU1lc2guZ2VvbWV0cnkpIHtcclxuICAgICAgdGhpcy5wbGFuZU1lc2guZ2VvbWV0cnkuZGlzcG9zZSgpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdW5kUGxhbmVHZW9tZXRyeSA9IG5ldyBQbGFuZUdlb21ldHJ5KFxyXG4gICAgICBzaXplLngsXHJcbiAgICAgIHNpemUueSxcclxuICAgICAgU2hhZG93Y2F0Y2hlci5QTEFORV9TVUJELFxyXG4gICAgICBTaGFkb3djYXRjaGVyLlBMQU5FX1NVQkRcclxuICAgIClcclxuICAgIGNvbnN0IG1hdCA9IG5ldyBNYXRyaXg0KCkubWFrZVRyYW5zbGF0aW9uKG9yaWdpbi54LCBvcmlnaW4ueSwgb3JpZ2luLnopXHJcbiAgICBncm91bmRQbGFuZUdlb21ldHJ5LmFwcGx5TWF0cml4NChtYXQpXHJcbiAgICBjb25zdCBkb3VibGVQb3NpdGlvbnMgPSBuZXcgRmxvYXQ2NEFycmF5KFxyXG4gICAgICBncm91bmRQbGFuZUdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXlcclxuICAgIClcclxuICAgIEdlb21ldHJ5LnVwZGF0ZVJURUdlb21ldHJ5KGdyb3VuZFBsYW5lR2VvbWV0cnksIGRvdWJsZVBvc2l0aW9ucylcclxuICAgIHRoaXMucGxhbmVNZXNoLmdlb21ldHJ5ID0gZ3JvdW5kUGxhbmVHZW9tZXRyeVxyXG4gICAgdGhpcy5wbGFuZU1lc2guZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQm94MywgT3J0aG9ncmFwaGljQ2FtZXJhLCBQZXJzcGVjdGl2ZUNhbWVyYSB9IGZyb20gJ3RocmVlJ1xyXG5cclxuZXhwb3J0IGVudW0gQ2FtZXJhRXZlbnQge1xyXG4gIFN0YXRpb25hcnkgPSAnc3RhdGlvbmFyeScsXHJcbiAgRHluYW1pYyA9ICdkeW5hbWljJyxcclxuICBGcmFtZVVwZGF0ZSA9ICdmcmFtZS11cGRhdGUnLFxyXG4gIExhdGVGcmFtZVVwZGF0ZSA9ICdsYXRlLWZyYW1lLXVwZGF0ZScsXHJcbiAgUHJvamVjdGlvbkNoYW5nZWQgPSAncHJvamVjdGlvbi1jaGFuZ2VkJyxcclxuICBJbnRlcmFjdGlvblN0YXJ0ZWQgPSAnaW50ZXJhY3Rpb24tc3RhcnRlZCcsXHJcbiAgSW50ZXJhY3Rpb25FbmRlZCA9ICdpbnRlcmFjdGlvbi1lbmRlZCdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYW1lcmFFdmVudFBheWxvYWQge1xyXG4gIFtDYW1lcmFFdmVudC5TdGF0aW9uYXJ5XTogdm9pZFxyXG4gIFtDYW1lcmFFdmVudC5EeW5hbWljXTogdm9pZFxyXG4gIFtDYW1lcmFFdmVudC5GcmFtZVVwZGF0ZV06IGJvb2xlYW5cclxuICBbQ2FtZXJhRXZlbnQuTGF0ZUZyYW1lVXBkYXRlXTogYm9vbGVhblxyXG4gIFtDYW1lcmFFdmVudC5Qcm9qZWN0aW9uQ2hhbmdlZF06IENhbWVyYVByb2plY3Rpb25cclxuICBbQ2FtZXJhRXZlbnQuSW50ZXJhY3Rpb25TdGFydGVkXTogdm9pZFxyXG4gIFtDYW1lcmFFdmVudC5JbnRlcmFjdGlvbkVuZGVkXTogdm9pZFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNwZWNrbGVDYW1lcmEge1xyXG4gIGdldCByZW5kZXJpbmdDYW1lcmEoKTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmFcclxuICBnZXQgZmllbGRPZlZpZXcoKTogbnVtYmVyXHJcbiAgc2V0IGZpZWxkT2ZWaWV3KHZhbHVlOiBudW1iZXIpXHJcbiAgZ2V0IGFzcGVjdCgpOiBudW1iZXJcclxuICBvbjxUIGV4dGVuZHMgQ2FtZXJhRXZlbnQ+KFxyXG4gICAgZXZlbnRUeXBlOiBULFxyXG4gICAgbGlzdGVuZXI6IChhcmc6IENhbWVyYUV2ZW50UGF5bG9hZFtUXSkgPT4gdm9pZFxyXG4gICk6IHZvaWRcclxuICB1cGRhdGVDYW1lcmFQbGFuZXModGFyZ2V0Vm9sdW1lPzogQm94Mywgb2Zmc2V0U2NhbGU/OiBudW1iZXIpOiB2b2lkXHJcbn1cclxuZXhwb3J0IGVudW0gQ2FtZXJhUHJvamVjdGlvbiB7XHJcbiAgUEVSU1BFQ1RJVkUsXHJcbiAgT1JUSE9HUkFQSElDXHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXHJcbmltcG9ydCB7XHJcbiAgX1NSR0JBRm9ybWF0LFxyXG4gIEFscGhhRm9ybWF0LFxyXG4gIEJ5dGVUeXBlLFxyXG4gIENhbWVyYSxcclxuICBEZXB0aEZvcm1hdCxcclxuICBEZXB0aFN0ZW5jaWxGb3JtYXQsXHJcbiAgRmxvYXRUeXBlLFxyXG4gIEhhbGZGbG9hdFR5cGUsXHJcbiAgSW50VHlwZSxcclxuICBMdW1pbmFuY2VBbHBoYUZvcm1hdCxcclxuICBMdW1pbmFuY2VGb3JtYXQsXHJcbiAgTWF0cml4NCxcclxuICBSZWRGb3JtYXQsXHJcbiAgUmVkSW50ZWdlckZvcm1hdCxcclxuICBSR0JfRVRDMV9Gb3JtYXQsXHJcbiAgUkdCX0VUQzJfRm9ybWF0LFxyXG4gIFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0LFxyXG4gIFJHQl9QVlJUQ180QlBQVjFfRm9ybWF0LFxyXG4gIFJHQl9TM1RDX0RYVDFfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQsXHJcbiAgUkdCQV9BU1RDXzEweDVfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ18xMHg2X0Zvcm1hdCxcclxuICBSR0JBX0FTVENfMTB4OF9Gb3JtYXQsXHJcbiAgUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdCxcclxuICBSR0JBX0FTVENfMTJ4MTJfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ180eDRfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ181eDRfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ181eDVfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ182eDVfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ182eDZfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ184eDVfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ184eDZfRm9ybWF0LFxyXG4gIFJHQkFfQVNUQ184eDhfRm9ybWF0LFxyXG4gIFJHQkFfQlBUQ19Gb3JtYXQsXHJcbiAgUkdCQV9FVEMyX0VBQ19Gb3JtYXQsXHJcbiAgUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0LFxyXG4gIFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdCxcclxuICBSR0JBX1MzVENfRFhUMV9Gb3JtYXQsXHJcbiAgUkdCQV9TM1RDX0RYVDNfRm9ybWF0LFxyXG4gIFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCxcclxuICBSR0JBRm9ybWF0LFxyXG4gIFJHQkFJbnRlZ2VyRm9ybWF0LFxyXG4gIFJHQkZvcm1hdCxcclxuICBSR0Zvcm1hdCxcclxuICBSR0ludGVnZXJGb3JtYXQsXHJcbiAgU2hvcnRUeXBlLFxyXG4gIHNSR0JFbmNvZGluZyxcclxuICBVbnNpZ25lZEJ5dGVUeXBlLFxyXG4gIFVuc2lnbmVkSW50MjQ4VHlwZSxcclxuICBVbnNpZ25lZEludFR5cGUsXHJcbiAgVW5zaWduZWRTaG9ydDQ0NDRUeXBlLFxyXG4gIFVuc2lnbmVkU2hvcnQ1NTUxVHlwZSxcclxuICBVbnNpZ25lZFNob3J0VHlwZSxcclxuICBWZWN0b3IzLFxyXG4gIFdlYkdMQ3ViZVJlbmRlclRhcmdldCxcclxuICBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyxcclxuICBXZWJHTFJlbmRlcmVyLFxyXG4gIFdlYkdMUmVuZGVyVGFyZ2V0XHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEdlb21ldHJ5IH0gZnJvbSAnLi4vY29udmVydGVyL0dlb21ldHJ5LmpzJ1xyXG5pbXBvcnQgeyBUeXBlZEFycmF5IH0gZnJvbSAndHlwZS1mZXN0J1xyXG5leHBvcnQgY2xhc3MgUlRFQnVmZmVycyB7XHJcbiAgcHJpdmF0ZSBfY2FjaGU6IFJURUJ1ZmZlcnMgfCB1bmRlZmluZWRcclxuXHJcbiAgdmlld2VyOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHZpZXdlckxvdzogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICB2aWV3ZXJIaWdoOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHJ0ZVZpZXdNb2RlbE1hdHJpeDogTWF0cml4NCA9IG5ldyBNYXRyaXg0KClcclxuXHJcbiAgc2hhZG93Vmlld2VyOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHNoYWRvd1ZpZXdlckxvdzogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICBzaGFkb3dWaWV3ZXJIaWdoOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHJ0ZVNoYWRvd1ZpZXdNb2RlbE1hdHJpeDogTWF0cml4NCA9IG5ldyBNYXRyaXg0KClcclxuICBydGVTaGFkb3dNYXRyaXg6IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcblxyXG4gIGNvcHkoZnJvbTogUlRFQnVmZmVycywgdG86IFJURUJ1ZmZlcnMpIHtcclxuICAgIHRvLnZpZXdlci5jb3B5KGZyb20udmlld2VyKVxyXG4gICAgdG8udmlld2VyTG93LmNvcHkoZnJvbS52aWV3ZXJMb3cpXHJcbiAgICB0by52aWV3ZXJIaWdoLmNvcHkoZnJvbS52aWV3ZXJIaWdoKVxyXG4gICAgdG8ucnRlVmlld01vZGVsTWF0cml4LmNvcHkoZnJvbS5ydGVWaWV3TW9kZWxNYXRyaXgpXHJcblxyXG4gICAgdG8uc2hhZG93Vmlld2VyLmNvcHkoZnJvbS5zaGFkb3dWaWV3ZXIpXHJcbiAgICB0by5zaGFkb3dWaWV3ZXJMb3cuY29weShmcm9tLnNoYWRvd1ZpZXdlckxvdylcclxuICAgIHRvLnNoYWRvd1ZpZXdlckhpZ2guY29weShmcm9tLnNoYWRvd1ZpZXdlckhpZ2gpXHJcbiAgICB0by5ydGVTaGFkb3dWaWV3TW9kZWxNYXRyaXguY29weShmcm9tLnJ0ZVNoYWRvd1ZpZXdNb2RlbE1hdHJpeClcclxuICAgIHRvLnJ0ZVNoYWRvd01hdHJpeC5jb3B5KGZyb20ucnRlU2hhZG93TWF0cml4KVxyXG4gIH1cclxuXHJcbiAgcHVzaCgpIHtcclxuICAgIGlmICghdGhpcy5fY2FjaGUpIHRoaXMuX2NhY2hlID0gbmV3IFJURUJ1ZmZlcnMoKVxyXG4gICAgdGhpcy5jb3B5KHRoaXMsIHRoaXMuX2NhY2hlKVxyXG4gIH1cclxuXHJcbiAgcG9wKCkge1xyXG4gICAgaWYgKCF0aGlzLl9jYWNoZSkgdGhpcy5fY2FjaGUgPSBuZXcgUlRFQnVmZmVycygpXHJcbiAgICB0aGlzLmNvcHkodGhpcy5fY2FjaGUsIHRoaXMpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3BlY2tsZVdlYkdMUmVuZGVyZXIgZXh0ZW5kcyBXZWJHTFJlbmRlcmVyIHtcclxuICBwdWJsaWMgUlRFQnVmZmVycyA9IG5ldyBSVEVCdWZmZXJzKClcclxuXHJcbiAgdXBkYXRlUlRFVmlld01vZGVsKGNhbWVyYTogQ2FtZXJhKSB7XHJcbiAgICB0aGlzLlJURUJ1ZmZlcnMucnRlVmlld01vZGVsTWF0cml4LmNvcHkoY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSlcclxuICAgIHRoaXMuUlRFQnVmZmVycy5ydGVWaWV3TW9kZWxNYXRyaXguZWxlbWVudHNbMTJdID0gMFxyXG4gICAgdGhpcy5SVEVCdWZmZXJzLnJ0ZVZpZXdNb2RlbE1hdHJpeC5lbGVtZW50c1sxM10gPSAwXHJcbiAgICB0aGlzLlJURUJ1ZmZlcnMucnRlVmlld01vZGVsTWF0cml4LmVsZW1lbnRzWzE0XSA9IDBcclxuXHJcbiAgICB0aGlzLlJURUJ1ZmZlcnMudmlld2VyLnNldChcclxuICAgICAgY2FtZXJhLm1hdHJpeFdvcmxkLmVsZW1lbnRzWzEyXSxcclxuICAgICAgY2FtZXJhLm1hdHJpeFdvcmxkLmVsZW1lbnRzWzEzXSxcclxuICAgICAgY2FtZXJhLm1hdHJpeFdvcmxkLmVsZW1lbnRzWzE0XVxyXG4gICAgKVxyXG5cclxuICAgIEdlb21ldHJ5LkRvdWJsZVRvSGlnaExvd1ZlY3RvcihcclxuICAgICAgdGhpcy5SVEVCdWZmZXJzLnZpZXdlcixcclxuICAgICAgdGhpcy5SVEVCdWZmZXJzLnZpZXdlckxvdyxcclxuICAgICAgdGhpcy5SVEVCdWZmZXJzLnZpZXdlckhpZ2hcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzID0gKFxyXG4gICAgcmVuZGVyVGFyZ2V0OlxyXG4gICAgICB8IFdlYkdMUmVuZGVyVGFyZ2V0XHJcbiAgICAgIHwgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0XHJcbiAgICAgIHwgV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBidWZmZXI6IFR5cGVkQXJyYXksXHJcbiAgICBhY3RpdmVDdWJlRmFjZUluZGV4OiBudW1iZXIgPSAwXHJcbiAgKSA9PiB7XHJcbiAgICBpZiAoXHJcbiAgICAgICEoXHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0ICYmXHJcbiAgICAgICAgKHJlbmRlclRhcmdldCBpbnN0YW5jZW9mIFdlYkdMUmVuZGVyVGFyZ2V0IHx8XHJcbiAgICAgICAgICByZW5kZXJUYXJnZXQgaW5zdGFuY2VvZiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4nXHJcbiAgICAgIClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZyYW1lYnVmZmVyID0gdGhpcy5wcm9wZXJ0aWVzLmdldChyZW5kZXJUYXJnZXQpLl9fd2ViZ2xGcmFtZWJ1ZmZlclxyXG5cclxuICAgIGlmIChcclxuICAgICAgcmVuZGVyVGFyZ2V0IGluc3RhbmNlb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0ICYmXHJcbiAgICAgIGFjdGl2ZUN1YmVGYWNlSW5kZXggIT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIGZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXJbYWN0aXZlQ3ViZUZhY2VJbmRleF1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZnJhbWVidWZmZXIpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsIGZyYW1lYnVmZmVyKVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCB0ZXh0dXJlID0gQXJyYXkuaXNBcnJheShyZW5kZXJUYXJnZXQudGV4dHVyZSlcclxuICAgICAgICAgID8gcmVuZGVyVGFyZ2V0LnRleHR1cmVbMF1cclxuICAgICAgICAgIDogcmVuZGVyVGFyZ2V0LnRleHR1cmVcclxuICAgICAgICBjb25zdCB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZS5mb3JtYXRcclxuICAgICAgICBjb25zdCB0ZXh0dXJlVHlwZSA9IHRleHR1cmUudHlwZVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0ZXh0dXJlRm9ybWF0ICE9PSBSR0JBRm9ybWF0ICYmXHJcbiAgICAgICAgICB0aGlzLmNvbnZlcnQodGV4dHVyZUZvcm1hdCkgIT09IHRoaXMuY29udGV4dC5nZXRQYXJhbWV0ZXIoMzU3MzkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAnVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBoYWxmRmxvYXRTdXBwb3J0ZWRCeUV4dCA9XHJcbiAgICAgICAgICB0ZXh0dXJlVHlwZSA9PT0gSGFsZkZsb2F0VHlwZSAmJlxyXG4gICAgICAgICAgKHRoaXMuZXh0ZW5zaW9ucy5oYXMoJ0VYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCcpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLmNhcGFiaWxpdGllcy5pc1dlYkdMMiAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9ucy5oYXMoJ0VYVF9jb2xvcl9idWZmZXJfZmxvYXQnKSkpXHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRleHR1cmVUeXBlICE9PSBVbnNpZ25lZEJ5dGVUeXBlICYmXHJcbiAgICAgICAgICB0aGlzLmNvbnZlcnQodGV4dHVyZVR5cGUpICE9PSB0aGlzLmNvbnRleHQuZ2V0UGFyYW1ldGVyKDM1NzM4KSAmJiAvLyBFZGdlIGFuZCBDaHJvbWUgTWFjIDwgNTIgKCM5NTEzKVxyXG4gICAgICAgICAgIShcclxuICAgICAgICAgICAgdGV4dHVyZVR5cGUgPT09IEZsb2F0VHlwZSAmJlxyXG4gICAgICAgICAgICAodGhpcy5jYXBhYmlsaXRpZXMuaXNXZWJHTDIgfHxcclxuICAgICAgICAgICAgICB0aGlzLmV4dGVuc2lvbnMuaGFzKCdPRVNfdGV4dHVyZV9mbG9hdCcpIHx8XHJcbiAgICAgICAgICAgICAgdGhpcy5leHRlbnNpb25zLmhhcygnV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0JykpXHJcbiAgICAgICAgICApICYmIC8vIENocm9tZSBNYWMgPj0gNTIgYW5kIEZpcmVmb3hcclxuICAgICAgICAgICFoYWxmRmxvYXRTdXBwb3J0ZWRCeUV4dFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4nXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50IGVuc3VyZXMgdmFsaWQgcmVhZCByZXF1ZXN0cyAobm8gb3V0LW9mLWJvdW5kcyBwaXhlbHMsIHNlZSAjODYwNClcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgeCA+PSAwICYmXHJcbiAgICAgICAgICB4IDw9IHJlbmRlclRhcmdldC53aWR0aCAtIHdpZHRoICYmXHJcbiAgICAgICAgICB5ID49IDAgJiZcclxuICAgICAgICAgIHkgPD0gcmVuZGVyVGFyZ2V0LmhlaWdodCAtIGhlaWdodFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5jb250ZXh0LnJlYWRQaXhlbHMoXHJcbiAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQsXHJcbiAgICAgICAgICAgIHRoaXMuY29udmVydCh0ZXh0dXJlRm9ybWF0KSxcclxuICAgICAgICAgICAgdGhpcy5jb252ZXJ0KHRleHR1cmVUeXBlKSxcclxuICAgICAgICAgICAgYnVmZmVyXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIC8vIHJlc3RvcmUgZnJhbWVidWZmZXIgb2YgY3VycmVudCByZW5kZXIgdGFyZ2V0IGlmIG5lY2Vzc2FyeVxyXG5cclxuICAgICAgICBjb25zdCBmcmFtZWJ1ZmZlciA9XHJcbiAgICAgICAgICB0aGlzLmdldFJlbmRlclRhcmdldCgpICE9PSBudWxsXHJcbiAgICAgICAgICAgID8gdGhpcy5wcm9wZXJ0aWVzLmdldCh0aGlzLmdldFJlbmRlclRhcmdldCgpKS5fX3dlYmdsRnJhbWVidWZmZXJcclxuICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgdGhpcy5zdGF0ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsIGZyYW1lYnVmZmVyKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVGFrZW4gZnJvbSB0aHJlZSBzaW5jZSB0aGV5IGhpZGUgaXQsIHRoYW5rIHlvdSB2ZXJ5IG11Y2ggKi9cclxuICBwcml2YXRlIGNvbnZlcnQocDogbnVtYmVyLCBlbmNvZGluZyA9IG51bGwpIHtcclxuICAgIGxldCBleHRlbnNpb25cclxuXHJcbiAgICBpZiAocCA9PT0gVW5zaWduZWRCeXRlVHlwZSkgcmV0dXJuIDUxMjFcclxuICAgIGlmIChwID09PSBVbnNpZ25lZFNob3J0NDQ0NFR5cGUpIHJldHVybiAzMjgxOVxyXG4gICAgaWYgKHAgPT09IFVuc2lnbmVkU2hvcnQ1NTUxVHlwZSkgcmV0dXJuIDMyODIwXHJcblxyXG4gICAgaWYgKHAgPT09IEJ5dGVUeXBlKSByZXR1cm4gNTEyMFxyXG4gICAgaWYgKHAgPT09IFNob3J0VHlwZSkgcmV0dXJuIDUxMjJcclxuICAgIGlmIChwID09PSBVbnNpZ25lZFNob3J0VHlwZSkgcmV0dXJuIDUxMjNcclxuICAgIGlmIChwID09PSBJbnRUeXBlKSByZXR1cm4gNTEyNFxyXG4gICAgaWYgKHAgPT09IFVuc2lnbmVkSW50VHlwZSkgcmV0dXJuIDUxMjVcclxuICAgIGlmIChwID09PSBGbG9hdFR5cGUpIHJldHVybiA1MTI2XHJcblxyXG4gICAgaWYgKHAgPT09IEhhbGZGbG9hdFR5cGUpIHtcclxuICAgICAgaWYgKHRoaXMuY2FwYWJpbGl0aWVzLmlzV2ViR0wyKSByZXR1cm4gNTEzMVxyXG5cclxuICAgICAgZXh0ZW5zaW9uID0gdGhpcy5leHRlbnNpb25zLmdldCgnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpXHJcblxyXG4gICAgICBpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbi5IQUxGX0ZMT0FUX09FU1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocCA9PT0gQWxwaGFGb3JtYXQpIHJldHVybiA2NDA2XHJcbiAgICBpZiAocCA9PT0gUkdCQUZvcm1hdCkgcmV0dXJuIDY0MDhcclxuICAgIGlmIChwID09PSBMdW1pbmFuY2VGb3JtYXQpIHJldHVybiA2NDA5XHJcbiAgICBpZiAocCA9PT0gTHVtaW5hbmNlQWxwaGFGb3JtYXQpIHJldHVybiA2NDEwXHJcbiAgICBpZiAocCA9PT0gRGVwdGhGb3JtYXQpIHJldHVybiA2NDAyXHJcbiAgICBpZiAocCA9PT0gRGVwdGhTdGVuY2lsRm9ybWF0KSByZXR1cm4gMzQwNDFcclxuICAgIGlmIChwID09PSBSZWRGb3JtYXQpIHJldHVybiA2NDAzXHJcblxyXG4gICAgaWYgKHAgPT09IFJHQkZvcm1hdCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRIUkVFLlJHQkZvcm1hdCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuUkdCQUZvcm1hdCBpbnN0ZWFkLiBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL3RocmVlLmpzL3B1bGwvMjMyMjgnXHJcbiAgICAgIClcclxuICAgICAgcmV0dXJuIDY0MDhcclxuICAgIH1cclxuXHJcbiAgICAvLyBXZWJHTCAxIHNSR0IgZmFsbGJhY2tcclxuXHJcbiAgICBpZiAocCA9PT0gX1NSR0JBRm9ybWF0KSB7XHJcbiAgICAgIGV4dGVuc2lvbiA9IHRoaXMuZXh0ZW5zaW9ucy5nZXQoJ0VYVF9zUkdCJylcclxuXHJcbiAgICAgIGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uLlNSR0JfQUxQSEFfRVhUXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFdlYkdMMiBmb3JtYXRzLlxyXG5cclxuICAgIGlmIChwID09PSBSZWRJbnRlZ2VyRm9ybWF0KSByZXR1cm4gMzYyNDRcclxuICAgIGlmIChwID09PSBSR0Zvcm1hdCkgcmV0dXJuIDMzMzE5XHJcbiAgICBpZiAocCA9PT0gUkdJbnRlZ2VyRm9ybWF0KSByZXR1cm4gMzMzMjBcclxuICAgIGlmIChwID09PSBSR0JBSW50ZWdlckZvcm1hdCkgcmV0dXJuIDM2MjQ5XHJcblxyXG4gICAgLy8gUzNUQ1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcCA9PT0gUkdCX1MzVENfRFhUMV9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9TM1RDX0RYVDFfRm9ybWF0IHx8XHJcbiAgICAgIHAgPT09IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCB8fFxyXG4gICAgICBwID09PSBSR0JBX1MzVENfRFhUNV9Gb3JtYXRcclxuICAgICkge1xyXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZykge1xyXG4gICAgICAgIGV4dGVuc2lvbiA9IHRoaXMuZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2InKVxyXG5cclxuICAgICAgICBpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAocCA9PT0gUkdCX1MzVENfRFhUMV9Gb3JtYXQpIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFRcclxuICAgICAgICAgIGlmIChwID09PSBSR0JBX1MzVENfRFhUMV9Gb3JtYXQpXHJcbiAgICAgICAgICAgIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFRcclxuICAgICAgICAgIGlmIChwID09PSBSR0JBX1MzVENfRFhUM19Gb3JtYXQpXHJcbiAgICAgICAgICAgIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFRcclxuICAgICAgICAgIGlmIChwID09PSBSR0JBX1MzVENfRFhUNV9Gb3JtYXQpXHJcbiAgICAgICAgICAgIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXh0ZW5zaW9uID0gdGhpcy5leHRlbnNpb25zLmdldCgnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnKVxyXG5cclxuICAgICAgICBpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAocCA9PT0gUkdCX1MzVENfRFhUMV9Gb3JtYXQpIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVFxyXG4gICAgICAgICAgaWYgKHAgPT09IFJHQkFfUzNUQ19EWFQxX0Zvcm1hdClcclxuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVFxyXG4gICAgICAgICAgaWYgKHAgPT09IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdClcclxuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVFxyXG4gICAgICAgICAgaWYgKHAgPT09IFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdClcclxuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFBWUlRDXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBwID09PSBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdCB8fFxyXG4gICAgICBwID09PSBSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdCB8fFxyXG4gICAgICBwID09PSBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0XHJcbiAgICApIHtcclxuICAgICAgZXh0ZW5zaW9uID0gdGhpcy5leHRlbnNpb25zLmdldCgnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJylcclxuXHJcbiAgICAgIGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcclxuICAgICAgICBpZiAocCA9PT0gUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQpXHJcbiAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUdcclxuICAgICAgICBpZiAocCA9PT0gUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQpXHJcbiAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUdcclxuICAgICAgICBpZiAocCA9PT0gUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0KVxyXG4gICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNR1xyXG4gICAgICAgIGlmIChwID09PSBSR0JBX1BWUlRDXzJCUFBWMV9Gb3JtYXQpXHJcbiAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEVUQzFcclxuXHJcbiAgICBpZiAocCA9PT0gUkdCX0VUQzFfRm9ybWF0KSB7XHJcbiAgICAgIGV4dGVuc2lvbiA9IHRoaXMuZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxJylcclxuXHJcbiAgICAgIGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0xcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRVRDMlxyXG5cclxuICAgIGlmIChwID09PSBSR0JfRVRDMl9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9FVEMyX0VBQ19Gb3JtYXQpIHtcclxuICAgICAgZXh0ZW5zaW9uID0gdGhpcy5leHRlbnNpb25zLmdldCgnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YycpXHJcblxyXG4gICAgICBpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHAgPT09IFJHQl9FVEMyX0Zvcm1hdClcclxuICAgICAgICAgIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nXHJcbiAgICAgICAgICAgID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfRVRDMlxyXG4gICAgICAgICAgICA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQjhfRVRDMlxyXG4gICAgICAgIGlmIChwID09PSBSR0JBX0VUQzJfRUFDX0Zvcm1hdClcclxuICAgICAgICAgIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nXHJcbiAgICAgICAgICAgID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDXHJcbiAgICAgICAgICAgIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQVNUQ1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzR4NF9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzV4NF9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzV4NV9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzZ4NV9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzZ4Nl9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzh4NV9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzh4Nl9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzh4OF9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzEweDVfRm9ybWF0IHx8XHJcbiAgICAgIHAgPT09IFJHQkFfQVNUQ18xMHg2X0Zvcm1hdCB8fFxyXG4gICAgICBwID09PSBSR0JBX0FTVENfMTB4OF9Gb3JtYXQgfHxcclxuICAgICAgcCA9PT0gUkdCQV9BU1RDXzEweDEwX0Zvcm1hdCB8fFxyXG4gICAgICBwID09PSBSR0JBX0FTVENfMTJ4MTBfRm9ybWF0IHx8XHJcbiAgICAgIHAgPT09IFJHQkFfQVNUQ18xMngxMl9Gb3JtYXRcclxuICAgICkge1xyXG4gICAgICBleHRlbnNpb24gPSB0aGlzLmV4dGVuc2lvbnMuZ2V0KCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YycpXHJcblxyXG4gICAgICBpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHAgPT09IFJHQkFfQVNUQ180eDRfRm9ybWF0KVxyXG4gICAgICAgICAgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmdcclxuICAgICAgICAgICAgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSXHJcbiAgICAgICAgICAgIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFJcclxuICAgICAgICBpZiAocCA9PT0gUkdCQV9BU1RDXzV4NF9Gb3JtYXQpXHJcbiAgICAgICAgICByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZ1xyXG4gICAgICAgICAgICA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFJcclxuICAgICAgICAgICAgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUlxyXG4gICAgICAgIGlmIChwID09PSBSR0JBX0FTVENfNXg1X0Zvcm1hdClcclxuICAgICAgICAgIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nXHJcbiAgICAgICAgICAgID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUlxyXG4gICAgICAgICAgICA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSXHJcbiAgICAgICAgaWYgKHAgPT09IFJHQkFfQVNUQ182eDVfRm9ybWF0KVxyXG4gICAgICAgICAgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmdcclxuICAgICAgICAgICAgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSXHJcbiAgICAgICAgICAgIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFJcclxuICAgICAgICBpZiAocCA9PT0gUkdCQV9BU1RDXzZ4Nl9Gb3JtYXQpXHJcbiAgICAgICAgICByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZ1xyXG4gICAgICAgICAgICA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFJcclxuICAgICAgICAgICAgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUlxyXG4gICAgICAgIGlmIChwID09PSBSR0JBX0FTVENfOHg1X0Zvcm1hdClcclxuICAgICAgICAgIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nXHJcbiAgICAgICAgICAgID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUlxyXG4gICAgICAgICAgICA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSXHJcbiAgICAgICAgaWYgKHAgPT09IFJHQkFfQVNUQ184eDZfRm9ybWF0KVxyXG4gICAgICAgICAgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmdcclxuICAgICAgICAgICAgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSXHJcbiAgICAgICAgICAgIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFJcclxuICAgICAgICBpZiAocCA9PT0gUkdCQV9BU1RDXzh4OF9Gb3JtYXQpXHJcbiAgICAgICAgICByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZ1xyXG4gICAgICAgICAgICA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFJcclxuICAgICAgICAgICAgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUlxyXG4gICAgICAgIGlmIChwID09PSBSR0JBX0FTVENfMTB4NV9Gb3JtYXQpXHJcbiAgICAgICAgICByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZ1xyXG4gICAgICAgICAgICA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSXHJcbiAgICAgICAgICAgIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSXHJcbiAgICAgICAgaWYgKHAgPT09IFJHQkFfQVNUQ18xMHg2X0Zvcm1hdClcclxuICAgICAgICAgIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nXHJcbiAgICAgICAgICAgID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFJcclxuICAgICAgICAgICAgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFJcclxuICAgICAgICBpZiAocCA9PT0gUkdCQV9BU1RDXzEweDhfRm9ybWF0KVxyXG4gICAgICAgICAgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmdcclxuICAgICAgICAgICAgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUlxyXG4gICAgICAgICAgICA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUlxyXG4gICAgICAgIGlmIChwID09PSBSR0JBX0FTVENfMTB4MTBfRm9ybWF0KVxyXG4gICAgICAgICAgcmV0dXJuIGVuY29kaW5nID09PSBzUkdCRW5jb2RpbmdcclxuICAgICAgICAgICAgPyBleHRlbnNpb24uQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFJcclxuICAgICAgICAgICAgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSXHJcbiAgICAgICAgaWYgKHAgPT09IFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQpXHJcbiAgICAgICAgICByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZ1xyXG4gICAgICAgICAgICA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUlxyXG4gICAgICAgICAgICA6IGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFJcclxuICAgICAgICBpZiAocCA9PT0gUkdCQV9BU1RDXzEyeDEyX0Zvcm1hdClcclxuICAgICAgICAgIHJldHVybiBlbmNvZGluZyA9PT0gc1JHQkVuY29kaW5nXHJcbiAgICAgICAgICAgID8gZXh0ZW5zaW9uLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSXHJcbiAgICAgICAgICAgIDogZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBCUFRDXHJcblxyXG4gICAgaWYgKHAgPT09IFJHQkFfQlBUQ19Gb3JtYXQpIHtcclxuICAgICAgZXh0ZW5zaW9uID0gdGhpcy5leHRlbnNpb25zLmdldCgnRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YycpXHJcblxyXG4gICAgICBpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHAgPT09IFJHQkFfQlBUQ19Gb3JtYXQpXHJcbiAgICAgICAgICByZXR1cm4gZW5jb2RpbmcgPT09IHNSR0JFbmNvZGluZ1xyXG4gICAgICAgICAgICA/IGV4dGVuc2lvbi5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFRcclxuICAgICAgICAgICAgOiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX0JQVENfVU5PUk1fRVhUXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcblxyXG4gICAgaWYgKHAgPT09IFVuc2lnbmVkSW50MjQ4VHlwZSkge1xyXG4gICAgICBpZiAodGhpcy5jYXBhYmlsaXRpZXMuaXNXZWJHTDIpIHJldHVybiAzNDA0MlxyXG5cclxuICAgICAgZXh0ZW5zaW9uID0gdGhpcy5leHRlbnNpb25zLmdldCgnV0VCR0xfZGVwdGhfdGV4dHVyZScpXHJcblxyXG4gICAgICBpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbi5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBcInBcIiBjYW4ndCBiZSByZXNvbHZlZCwgYXNzdW1lIHRoZSB1c2VyIGRlZmluZXMgYSBXZWJHTCBjb25zdGFudCBhcyBhIHN0cmluZyAoZmFsbGJhY2svd29ya2Fyb3VuZCBmb3IgcGFja2VkIFJHQiBmb3JtYXRzKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0W3BdICE9PSB1bmRlZmluZWQgPyB0aGlzLmNvbnRleHRbcF0gOiBudWxsXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgT3J0aG9ncmFwaGljQ2FtZXJhLFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFBsYW5lLFxyXG4gIFNjZW5lLFxyXG4gIFdlYkdMUmVuZGVyZXJcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgQmFzZUdQYXNzIH0gZnJvbSAnLi9HUGFzcy5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBHZW9tZXRyeVBhc3MgZXh0ZW5kcyBCYXNlR1Bhc3Mge1xyXG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnR0VPTUVUUlknXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q2xpcHBpbmdQbGFuZXMocGxhbmVzOiBQbGFuZVtdKSB7XHJcbiAgICBpZiAodGhpcy5vdmVycmlkZU1hdGVyaWFsKSB0aGlzLm92ZXJyaWRlTWF0ZXJpYWwuY2xpcHBpbmdQbGFuZXMgPSBwbGFuZXNcclxuICAgIGlmICh0aGlzLm92ZXJyaWRlQmF0Y2hNYXRlcmlhbCkgdGhpcy5vdmVycmlkZUJhdGNoTWF0ZXJpYWwuY2xpcHBpbmdQbGFuZXMgPSBwbGFuZXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXIoXHJcbiAgICByZW5kZXJlcjogV2ViR0xSZW5kZXJlcixcclxuICAgIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEgfCBudWxsLFxyXG4gICAgc2NlbmU/OiBTY2VuZVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjYW1lcmEgfHwgIXNjZW5lKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICBpZiAodGhpcy5vbkJlZm9yZVJlbmRlcikgdGhpcy5vbkJlZm9yZVJlbmRlcigpXHJcblxyXG4gICAgdGhpcy5hcHBseUxheWVycyhjYW1lcmEpXHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMub3V0cHV0VGFyZ2V0KVxyXG5cclxuICAgIHRoaXMuY2xlYXIocmVuZGVyZXIpXHJcblxyXG4gICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpXHJcbiAgICBpZiAodGhpcy5vbkFmdGVyUmVuZGVyKSB0aGlzLm9uQWZ0ZXJSZW5kZXIoKVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIE1hdHJpeDQsXHJcbiAgT3J0aG9ncmFwaGljQ2FtZXJhLFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFBsYW5lLFxyXG4gIFZlY3RvcjIsXHJcbiAgV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsXHJcbiAgV2ViR0xSZW5kZXJUYXJnZXQsXHJcbiAgV2ViR0xSZW5kZXJUYXJnZXRPcHRpb25zXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEdQYXNzLCBPYmplY3RWaXNpYmlsaXR5IH0gZnJvbSAnLi4vUGFzc2VzL0dQYXNzLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVJlbmRlcmVyIGZyb20gJy4uLy4uL1NwZWNrbGVSZW5kZXJlci5qcydcclxuaW1wb3J0IHsgQmF0Y2hVcGRhdGVSYW5nZSB9IGZyb20gJy4uLy4uL2JhdGNoaW5nL0JhdGNoLmpzJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCYXNlUGlwZWxpbmVPcHRpb25zIHt9XHJcbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVPcHRpb25zIGV4dGVuZHMgQmFzZVBpcGVsaW5lT3B0aW9ucyB7XHJcbiAgZWRnZXM/OiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0UGlwZWxpbmVPcHRpb25zID0ge1xyXG4gIGVkZ2VzOiB0cnVlXHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQaXBlbGluZSB7XHJcbiAgcHJvdGVjdGVkIHNwZWNrbGVSZW5kZXJlcjogU3BlY2tsZVJlbmRlcmVyXHJcbiAgcHJvdGVjdGVkIF9vcHRpb25zOiBCYXNlUGlwZWxpbmVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFBpcGVsaW5lT3B0aW9ucylcclxuICBwcm90ZWN0ZWQgcGFzc0xpc3Q6IEFycmF5PEdQYXNzPiA9IFtdXHJcblxyXG4gIHByb3RlY3RlZCBkcmF3aW5nU2l6ZTogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKClcclxuICBwcm90ZWN0ZWQgZnJhbWVQcm9qZWN0aW9uOiBNYXRyaXg0ID0gbmV3IE1hdHJpeDQoKVxyXG5cclxuICBwcm90ZWN0ZWQgaml0dGVySW5kZXg6IG51bWJlciA9IDBcclxuICBwcm90ZWN0ZWQgaml0dGVyT2Zmc2V0czogbnVtYmVyW11bXSA9IHRoaXMuZ2VuZXJhdGVIYWx0b25KaXRlcnMoMTYpXHJcblxyXG4gIHB1YmxpYyBnZXQgb3B0aW9ucygpOiBCYXNlUGlwZWxpbmVPcHRpb25zIHtcclxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IEJhc2VQaXBlbGluZU9wdGlvbnMpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXIsIG9wdGlvbnM6IEJhc2VQaXBlbGluZU9wdGlvbnMgPSB7fSkge1xyXG4gICAgdGhpcy5zcGVja2xlUmVuZGVyZXIgPSByZW5kZXJlclxyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwYXNzZXMoKTogQXJyYXk8R1Bhc3M+IHtcclxuICAgIHJldHVybiB0aGlzLnBhc3NMaXN0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CZWZvcmVQaXBlbGluZVJlbmRlcigpOiB2b2lkIHt9XHJcbiAgcHVibGljIG9uQWZ0ZXJQaXBlbGluZVJlbmRlcigpOiB2b2lkIHt9XHJcblxyXG4gIHB1YmxpYyBnZXRQYXNzKG5hbWU6IHN0cmluZyk6IEdQYXNzW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFzc0xpc3QuZmlsdGVyKChwYXNzOiBHUGFzcykgPT4ge1xyXG4gICAgICByZXR1cm4gcGFzcy5kaXNwbGF5TmFtZSA9PT0gbmFtZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDbGlwcGluZ1BsYW5lcyhwbGFuZXM6IFBsYW5lW10pOiB2b2lkIHtcclxuICAgIHRoaXMucGFzc0xpc3QuZm9yRWFjaCgocGFzczogR1Bhc3MpID0+IHBhc3Muc2V0Q2xpcHBpbmdQbGFuZXM/LihwbGFuZXMpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZShjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhc3NMaXN0LmZvckVhY2goKHBhc3M6IEdQYXNzKSA9PiBwYXNzLmVuYWJsZWQgJiYgcGFzcy51cGRhdGU/LihjYW1lcmEpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0KCkge1xyXG4gICAgdGhpcy5qaXR0ZXJJbmRleCA9IDBcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXIoKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci5yZW5kZXJlci5nZXREcmF3aW5nQnVmZmVyU2l6ZSh0aGlzLmRyYXdpbmdTaXplKVxyXG4gICAgaWYgKHRoaXMuZHJhd2luZ1NpemUubGVuZ3RoKCkgPT09IDApIHJldHVybiBmYWxzZVxyXG5cclxuICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMuc3BlY2tsZVJlbmRlcmVyLnJlbmRlcmluZ0NhbWVyYVxyXG5cclxuICAgIGNvbnN0IHJlc3RvcmVWaXNpYmlsaXR5OiBSZWNvcmQ8c3RyaW5nLCBCYXRjaFVwZGF0ZVJhbmdlPiA9XHJcbiAgICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLmJhdGNoZXIuc2F2ZVZpc2libGl0eSgpXHJcbiAgICBjb25zdCB2aXNpYmlsaXR5TWFwID0ge1xyXG4gICAgICBbT2JqZWN0VmlzaWJpbGl0eS5PUEFRVUVdOiB0aGlzLnNwZWNrbGVSZW5kZXJlci5iYXRjaGVyLmdldE9wYXF1ZSgpLFxyXG4gICAgICBbT2JqZWN0VmlzaWJpbGl0eS5UUkFOU1BBUkVOVF06IHRoaXMuc3BlY2tsZVJlbmRlcmVyLmJhdGNoZXIuZ2V0VHJhbnNwYXJlbnQoKSxcclxuICAgICAgW09iamVjdFZpc2liaWxpdHkuREVQVEhdOiB0aGlzLnNwZWNrbGVSZW5kZXJlci5iYXRjaGVyLmdldERlcHRoKCksXHJcbiAgICAgIFtPYmplY3RWaXNpYmlsaXR5LlNURU5DSUxdOiB0aGlzLnNwZWNrbGVSZW5kZXJlci5iYXRjaGVyLmdldFN0ZW5jaWwoKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFtqaXR0ZXJYLCBqaXR0ZXJZXSA9IHRoaXMuaml0dGVyT2Zmc2V0c1t0aGlzLmppdHRlckluZGV4XVxyXG5cclxuICAgIHRoaXMub25CZWZvcmVQaXBlbGluZVJlbmRlcigpXHJcblxyXG4gICAgdGhpcy5zcGVja2xlUmVuZGVyZXIucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG51bGwpXHJcbiAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci5yZW5kZXJlci5zZXRDbGVhckNvbG9yKDB4ZmZmZmZmLCAwKVxyXG4gICAgdGhpcy5zcGVja2xlUmVuZGVyZXIucmVuZGVyZXIuY2xlYXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSlcclxuXHJcbiAgICBsZXQgcmVuZGVyUmV0dXJuOiBib29sZWFuID0gZmFsc2VcclxuICAgIGxldCBsYXN0VmlzaWJpbGl0eTogT2JqZWN0VmlzaWJpbGl0eVxyXG4gICAgdGhpcy5wYXNzTGlzdC5mb3JFYWNoKChwYXNzOiBHUGFzcykgPT4ge1xyXG4gICAgICBpZiAoIXBhc3MuZW5hYmxlZCB8fCAhcGFzcy5yZW5kZXIpIHJldHVyblxyXG5cclxuICAgICAgbGV0IHBhc3NPYmplY3RWaXNpYmlsaXR5ID0gcmVzdG9yZVZpc2liaWxpdHlcclxuICAgICAgaWYgKHBhc3MudmlzaWJpbGl0eSkge1xyXG4gICAgICAgIGlmIChwYXNzLnZpc2liaWxpdHkgPT09IE9iamVjdFZpc2liaWxpdHkuQ1VTVE9NKSB7XHJcbiAgICAgICAgICBpZiAocGFzcy52aXNpYmlsaXR5RnVuY3Rpb24pXHJcbiAgICAgICAgICAgIHBhc3NPYmplY3RWaXNpYmlsaXR5ID0gcGFzcy52aXNpYmlsaXR5RnVuY3Rpb24odGhpcy5zcGVja2xlUmVuZGVyZXIpXHJcbiAgICAgICAgfSBlbHNlIHBhc3NPYmplY3RWaXNpYmlsaXR5ID0gdmlzaWJpbGl0eU1hcFtwYXNzLnZpc2liaWxpdHldXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwYXNzLnZpc2liaWxpdHkpIHtcclxuICAgICAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci5iYXRjaGVyLmFwcGx5VmlzaWJpbGl0eShwYXNzT2JqZWN0VmlzaWJpbGl0eSlcclxuICAgICAgICBsYXN0VmlzaWJpbGl0eSA9IHBhc3MudmlzaWJpbGl0eVxyXG4gICAgICB9IGVsc2UgaWYgKGxhc3RWaXNpYmlsaXR5KSB7XHJcbiAgICAgICAgdGhpcy5zcGVja2xlUmVuZGVyZXIuYmF0Y2hlci5hcHBseVZpc2liaWxpdHkocmVzdG9yZVZpc2liaWxpdHkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwYXNzLm92ZXJyaWRlTWF0ZXJpYWwpXHJcbiAgICAgICAgdGhpcy5zcGVja2xlUmVuZGVyZXIuYmF0Y2hlci5vdmVycmlkZU1hdGVyaWFsKFxyXG4gICAgICAgICAgcGFzcy52aXNpYmlsaXR5ID8gcGFzc09iamVjdFZpc2liaWxpdHkgOiByZXN0b3JlVmlzaWJpbGl0eSxcclxuICAgICAgICAgIHBhc3Mub3ZlcnJpZGVNYXRlcmlhbFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgIGlmIChwYXNzLm92ZXJyaWRlQmF0Y2hNYXRlcmlhbClcclxuICAgICAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci5iYXRjaGVyLm92ZXJyaWRlQmF0Y2hNYXRlcmlhbChcclxuICAgICAgICAgIHBhc3MudmlzaWJpbGl0eSA/IHBhc3NPYmplY3RWaXNpYmlsaXR5IDogcmVzdG9yZVZpc2liaWxpdHksXHJcbiAgICAgICAgICBwYXNzLm92ZXJyaWRlQmF0Y2hNYXRlcmlhbFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgIGlmIChwYXNzLmppdHRlciAmJiBjYW1lcmEpIHtcclxuICAgICAgICB0aGlzLmZyYW1lUHJvamVjdGlvbi5jb3B5KGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KVxyXG4gICAgICAgIGlmIChjYW1lcmEgaW5zdGFuY2VvZiBPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgICAgICAgIGNvbnN0IHBpeGVsV2lkdGggPSB0aGlzLmRyYXdpbmdTaXplLnhcclxuICAgICAgICAgIGNvbnN0IHBpeGVsSGVpZ2h0ID0gdGhpcy5kcmF3aW5nU2l6ZS55XHJcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGNhbWVyYS5yaWdodCAtIGNhbWVyYS5sZWZ0XHJcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjYW1lcmEudG9wIC0gY2FtZXJhLmJvdHRvbVxyXG4gICAgICAgICAgY29uc3QgcGl4ZWxSYXRpb1cgPSBwaXhlbFdpZHRoIC8gd2lkdGhcclxuICAgICAgICAgIGNvbnN0IHBpeGVsUmF0aW9IID0gcGl4ZWxIZWlnaHQgLyBoZWlnaHRcclxuXHJcbiAgICAgICAgICBjYW1lcmEuc2V0Vmlld09mZnNldChcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodCxcclxuICAgICAgICAgICAgKGppdHRlclggLyBwaXhlbFJhdGlvVykgKiAwLjUsXHJcbiAgICAgICAgICAgIChqaXR0ZXJZIC8gcGl4ZWxSYXRpb0gpICogMC41LFxyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSBlbHNlIGlmIChjYW1lcmEgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICAgICAgY2FtZXJhLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbOF0gPSBqaXR0ZXJYIC8gdGhpcy5kcmF3aW5nU2l6ZS54XHJcbiAgICAgICAgICBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s5XSA9IGppdHRlclkgLyB0aGlzLmRyYXdpbmdTaXplLnlcclxuICAgICAgICAgIC8qKiBUZWNobmljYWxseSBpdCBzaG91bGQgYmUgdGhpcywgYnV0IEknbSBub3QgdXNpbmcgaXQgYmVjYXVzZSBJIGRvbid0IHVuZGVyc3RhbmQgdGhyZWUncyBpbXBsZW1lbnRhdGlvbiAqL1xyXG4gICAgICAgICAgLy8gY2FtZXJhLnNldFZpZXdPZmZzZXQoXHJcbiAgICAgICAgICAvLyAgIHRoaXMuZHJhd2luZ1NpemUueCxcclxuICAgICAgICAgIC8vICAgdGhpcy5kcmF3aW5nU2l6ZS55LFxyXG4gICAgICAgICAgLy8gICBqaXR0ZXJYICogMC41LFxyXG4gICAgICAgICAgLy8gICBqaXR0ZXJZICogMC41LFxyXG4gICAgICAgICAgLy8gICB0aGlzLmRyYXdpbmdTaXplLngsXHJcbiAgICAgICAgICAvLyAgIHRoaXMuZHJhd2luZ1NpemUueVxyXG4gICAgICAgICAgLy8gKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmV0ID0gcGFzcy5yZW5kZXIoXHJcbiAgICAgICAgdGhpcy5zcGVja2xlUmVuZGVyZXIucmVuZGVyZXIsXHJcbiAgICAgICAgdGhpcy5zcGVja2xlUmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhLFxyXG4gICAgICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLnNjZW5lXHJcbiAgICAgIClcclxuICAgICAgcmVuZGVyUmV0dXJuIHx8PSByZXRcclxuXHJcbiAgICAgIGlmIChwYXNzLnZpc2liaWxpdHkpXHJcbiAgICAgICAgdGhpcy5zcGVja2xlUmVuZGVyZXIuYmF0Y2hlci5hcHBseVZpc2liaWxpdHkocmVzdG9yZVZpc2liaWxpdHkpXHJcbiAgICAgIGlmIChwYXNzLm92ZXJyaWRlTWF0ZXJpYWwpXHJcbiAgICAgICAgdGhpcy5zcGVja2xlUmVuZGVyZXIuYmF0Y2hlci5yZXN0b3JlTWF0ZXJpYWwoXHJcbiAgICAgICAgICBwYXNzLnZpc2liaWxpdHkgPyBwYXNzT2JqZWN0VmlzaWJpbGl0eSA6IHJlc3RvcmVWaXNpYmlsaXR5XHJcbiAgICAgICAgKVxyXG4gICAgICBpZiAocGFzcy5vdmVycmlkZUJhdGNoTWF0ZXJpYWwpXHJcbiAgICAgICAgdGhpcy5zcGVja2xlUmVuZGVyZXIuYmF0Y2hlci5yZXN0b3JlQmF0Y2hNYXRlcmlhbChcclxuICAgICAgICAgIHBhc3MudmlzaWJpbGl0eSA/IHBhc3NPYmplY3RWaXNpYmlsaXR5IDogcmVzdG9yZVZpc2liaWxpdHlcclxuICAgICAgICApXHJcbiAgICAgIGlmIChwYXNzLmppdHRlciAmJiBjYW1lcmEpIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodGhpcy5mcmFtZVByb2plY3Rpb24pXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMub25BZnRlclBpcGVsaW5lUmVuZGVyKClcclxuXHJcbiAgICB0aGlzLmppdHRlckluZGV4ID0gKHRoaXMuaml0dGVySW5kZXggKyAxKSAlIHRoaXMuaml0dGVyT2Zmc2V0cy5sZW5ndGhcclxuXHJcbiAgICByZXR1cm4gcmVuZGVyUmV0dXJuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnBhc3NMaXN0LmZvckVhY2goKHBhc3M6IEdQYXNzKSA9PiBwYXNzLnNldFNpemU/Lih3aWR0aCwgaGVpZ2h0KSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGEgbnVtYmVyIGluIHRoZSBIYWx0b24gU2VxdWVuY2UgYXQgYSBnaXZlbiBpbmRleC4gVGhpcyBpc1xyXG4gICAqIHNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIHRoZSBwc2V1ZG9jb2RlIG9uIHRoZSBXaWtpcGVkaWEgcGFnZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJhc2UgdGhlIGJhc2UgdG8gdXNlIGZvciB0aGUgSGFsdG9uIFNlcXVlbmNlXHJcbiAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBpbnRvIHRoZSBzZXF1ZW5jZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBoYWx0b25OdW1iZXIoYmFzZTogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gMFxyXG4gICAgbGV0IGYgPSAxXHJcbiAgICB3aGlsZSAoaW5kZXggPiAwKSB7XHJcbiAgICAgIGYgLz0gYmFzZVxyXG4gICAgICByZXN1bHQgKz0gZiAqIChpbmRleCAlIGJhc2UpXHJcbiAgICAgIGluZGV4ID0gTWF0aC5mbG9vcihpbmRleCAvIGJhc2UpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdlbmVyYXRlSGFsdG9uSml0ZXJzKGxlbmd0aDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBqaXR0ZXJzID0gW11cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBsZW5ndGg7IGkrKylcclxuICAgICAgaml0dGVycy5wdXNoKFtcclxuICAgICAgICAodGhpcy5oYWx0b25OdW1iZXIoMiwgaSkgLSAwLjUpICogMixcclxuICAgICAgICAodGhpcy5oYWx0b25OdW1iZXIoMywgaSkgLSAwLjUpICogMlxyXG4gICAgICBdKVxyXG5cclxuICAgIHJldHVybiBqaXR0ZXJzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJlbmRlclRhcmdldChcclxuICAgIG9wdGlvbnM/OiBXZWJHTFJlbmRlclRhcmdldE9wdGlvbnMsXHJcbiAgICB3aWR0aD86IG51bWJlcixcclxuICAgIGhlaWdodD86IG51bWJlclxyXG4gICk6IFdlYkdMUmVuZGVyVGFyZ2V0IHtcclxuICAgIGNvbnN0IHJlbmRlclRhcmdldCA9IG5ldyBXZWJHTFJlbmRlclRhcmdldCh3aWR0aCB8fCAxLCBoZWlnaHQgfHwgMSwgb3B0aW9ucylcclxuICAgIC8qKiBPbiBDaHJvbWl1bSwgb24gTWFjT1MgdGhlIDE2IGJpdCBkZXB0aCByZW5kZXIgYnVmZmVyIGFwcGVhcnMgYnJva2VuLlxyXG4gICAgICogIFdlJ3JlIG5vdCByZWFsbHkgdXNpbmcgYSBzdGVuY2lsIGJ1ZmZlciBhdCBhbGwsIHdlJ3JlIGp1c3QgZm9yY2luZ1xyXG4gICAgICogIHRocmVlLmpzIHRvIHVzZSBhIDI0IGJpdCBkZXB0aCByZW5kZXIgYnVmZmVyXHJcbiAgICAgKi9cclxuICAgIHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciA9IHRydWVcclxuICAgIHJlbmRlclRhcmdldC5zdGVuY2lsQnVmZmVyID0gdHJ1ZVxyXG5cclxuICAgIHJldHVybiByZW5kZXJUYXJnZXRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlTXVsdGlwbGVSZW5kZXJUYXJnZXQoXHJcbiAgICBjb3VudDogbnVtYmVyLFxyXG4gICAgb3B0aW9ucz86IFdlYkdMUmVuZGVyVGFyZ2V0T3B0aW9ucyxcclxuICAgIHdpZHRoPzogbnVtYmVyLFxyXG4gICAgaGVpZ2h0PzogbnVtYmVyXHJcbiAgKTogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMge1xyXG4gICAgY29uc3QgcmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKFxyXG4gICAgICB3aWR0aCB8fCAxLFxyXG4gICAgICBoZWlnaHQgfHwgMSxcclxuICAgICAgY291bnQsXHJcbiAgICAgIG9wdGlvbnNcclxuICAgIClcclxuICAgIC8qKiBPbiBDaHJvbWl1bSwgb24gTWFjT1MgdGhlIDE2IGJpdCBkZXB0aCByZW5kZXIgYnVmZmVyIGFwcGVhcnMgYnJva2VuLlxyXG4gICAgICogIFdlJ3JlIG5vdCByZWFsbHkgdXNpbmcgYSBzdGVuY2lsIGJ1ZmZlciBhdCBhbGwsIHdlJ3JlIGp1c3QgZm9yY2luZ1xyXG4gICAgICogIHRocmVlLmpzIHRvIHVzZSBhIDI0IGJpdCBkZXB0aCByZW5kZXIgYnVmZmVyXHJcbiAgICAgKi9cclxuICAgIDsocmVuZGVyVGFyZ2V0IGFzIHVua25vd24gYXMgV2ViR0xSZW5kZXJUYXJnZXQpLmRlcHRoQnVmZmVyID0gdHJ1ZVxyXG4gICAgOyhyZW5kZXJUYXJnZXQgYXMgdW5rbm93biBhcyBXZWJHTFJlbmRlclRhcmdldCkuc3RlbmNpbEJ1ZmZlciA9IHRydWVcclxuXHJcbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgRG91YmxlU2lkZSxcclxuICBNYXRlcmlhbCxcclxuICBOZWFyZXN0RmlsdGVyLFxyXG4gIE5vQmxlbmRpbmcsXHJcbiAgT3J0aG9ncmFwaGljQ2FtZXJhLFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFJHQkFEZXB0aFBhY2tpbmcsXHJcbiAgU2lkZSxcclxuICBUZXh0dXJlXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IFBhc3NPcHRpb25zIH0gZnJvbSAnLi9HUGFzcy5qcydcclxuaW1wb3J0IFNwZWNrbGVEZXB0aE1hdGVyaWFsIGZyb20gJy4uLy4uL21hdGVyaWFscy9TcGVja2xlRGVwdGhNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgUGlwZWxpbmUgfSBmcm9tICcuLi9QaXBlbGluZXMvUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IEdlb21ldHJ5UGFzcyB9IGZyb20gJy4vR2VvbWV0cnlQYXNzLmpzJ1xyXG5cclxuZXhwb3J0IGVudW0gRGVwdGhUeXBlIHtcclxuICBQRVJTUEVDVElWRV9ERVBUSCxcclxuICBMSU5FQVJfREVQVEhcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXB0aFBhc3NPcHRpb25zIGV4dGVuZHMgUGFzc09wdGlvbnMge1xyXG4gIGRlcHRoVHlwZT86IERlcHRoVHlwZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgRGVmYXVsdERlcHRoUGFzc09wdGlvbnM6IFJlcXVpcmVkPERlcHRoUGFzc09wdGlvbnM+ID0ge1xyXG4gIGRlcHRoVHlwZTogRGVwdGhUeXBlLkxJTkVBUl9ERVBUSFxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGVwdGhQYXNzIGV4dGVuZHMgR2VvbWV0cnlQYXNzIHtcclxuICBwcml2YXRlIGRlcHRoTWF0ZXJpYWw6IFNwZWNrbGVEZXB0aE1hdGVyaWFsXHJcblxyXG4gIHB1YmxpYyBfb3B0aW9uczogUmVxdWlyZWQ8RGVwdGhQYXNzT3B0aW9ucz4gPSBPYmplY3QuYXNzaWduKFxyXG4gICAge30sXHJcbiAgICBEZWZhdWx0RGVwdGhQYXNzT3B0aW9uc1xyXG4gIClcclxuXHJcbiAgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ0RFUFRIJ1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlcHRoVGV4dHVyZSgpOiBUZXh0dXJlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRwdXRUYXJnZXQ/LnRleHR1cmVcclxuICB9XHJcblxyXG4gIGdldCBvdmVycmlkZU1hdGVyaWFsKCk6IE1hdGVyaWFsIHtcclxuICAgIHJldHVybiB0aGlzLmRlcHRoTWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3B0aW9ucyh2YWx1ZTogRGVwdGhQYXNzT3B0aW9ucykge1xyXG4gICAgc3VwZXIub3B0aW9ucyA9IHZhbHVlXHJcbiAgICB0aGlzLmRlcHRoVHlwZSA9IHRoaXMuX29wdGlvbnMuZGVwdGhUeXBlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0IGRlcHRoVHlwZSh2YWx1ZTogRGVwdGhUeXBlKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IERlcHRoVHlwZS5MSU5FQVJfREVQVEgpXHJcbiAgICAgIGlmICh0aGlzLmRlcHRoTWF0ZXJpYWwuZGVmaW5lcykge1xyXG4gICAgICAgIHRoaXMuZGVwdGhNYXRlcmlhbC5kZWZpbmVzWydMSU5FQVJfREVQVEgnXSA9ICcgJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRlcHRoTWF0ZXJpYWwuZGVmaW5lcykge1xyXG4gICAgICAgICAgZGVsZXRlIHRoaXMuZGVwdGhNYXRlcmlhbC5kZWZpbmVzWydMSU5FQVJfREVQVEgnXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgdGhpcy5kZXB0aE1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXB0aFNpZGUodmFsdWU6IFNpZGUpIHtcclxuICAgIHRoaXMuZGVwdGhNYXRlcmlhbC5zaWRlID0gdmFsdWVcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKVxyXG5cclxuICAgIHRoaXMuX291dHB1dFRhcmdldCA9IFBpcGVsaW5lLmNyZWF0ZVJlbmRlclRhcmdldCh7XHJcbiAgICAgIG1pbkZpbHRlcjogTmVhcmVzdEZpbHRlcixcclxuICAgICAgbWFnRmlsdGVyOiBOZWFyZXN0RmlsdGVyXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuZGVwdGhNYXRlcmlhbCA9IG5ldyBTcGVja2xlRGVwdGhNYXRlcmlhbChcclxuICAgICAge1xyXG4gICAgICAgIGRlcHRoUGFja2luZzogUkdCQURlcHRoUGFja2luZ1xyXG4gICAgICB9LFxyXG4gICAgICBbJ0FMUEhBVEVTVF9SRUpFQ1RJT04nXVxyXG4gICAgKVxyXG4gICAgdGhpcy5kZXB0aE1hdGVyaWFsLmJsZW5kaW5nID0gTm9CbGVuZGluZ1xyXG4gICAgdGhpcy5kZXB0aE1hdGVyaWFsLnNpZGUgPSBEb3VibGVTaWRlXHJcbiAgICB0aGlzLmRlcHRoVHlwZSA9IHRoaXMuX29wdGlvbnMuZGVwdGhUeXBlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlKGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgIHRoaXMuZGVwdGhNYXRlcmlhbC51c2VyRGF0YS5uZWFyLnZhbHVlID0gY2FtZXJhLm5lYXJcclxuICAgIHRoaXMuZGVwdGhNYXRlcmlhbC51c2VyRGF0YS5mYXIudmFsdWUgPSBjYW1lcmEuZmFyXHJcbiAgICB0aGlzLmRlcHRoTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlU3RhdGljQW9BY2N1bXVsYXRlRnJhZyA9IC8qIGdsc2wgKi8gYFxyXG4gICAgdW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xyXG4gICAgdW5pZm9ybSBzYW1wbGVyMkQgdERpZmZ1c2U7XHJcbiAgICB2YXJ5aW5nIHZlYzIgdlV2O1xyXG4gICAgLy8gI2RlZmluZSBOVU1fRlJBTUVTIDE2XHJcblxyXG4gICAgdm9pZCBtYWluKCkge1xyXG4gICAgICAgIHZlYzQgZnJhbWVTYW1wbGUgPSB0ZXh0dXJlMkQoIHREaWZmdXNlLCB2VXYgKTtcclxuICAgICAgICBnbF9GcmFnQ29sb3IueHl6ID0gZnJhbWVTYW1wbGUucmdiICogMS4vZmxvYXQoTlVNX0ZSQU1FUyk7XHJcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgPSAxLjsvLyo9IG9wYWNpdHk7XHJcbiAgICB9YFxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZVN0YXRpY0FvQWNjdW11bGF0ZVZlcnQgPSAvKiBnbHNsICovIGBcclxuICAgIHZhcnlpbmcgdmVjMiB2VXY7XHJcbiAgICB2b2lkIG1haW4oKSB7XHJcbiAgICAgICAgdlV2ID0gdXY7XHJcbiAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xyXG4gICAgfWBcclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVTdGF0aWNBb0dlbmVyYXRlVmVydCA9IC8qIGdsc2wgKi8gYFxyXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcclxuXHRcdHZvaWQgbWFpbigpIHtcclxuXHRcdFx0dlV2ID0gdXY7XHJcblx0XHRcdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcclxuXHRcdH1gXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlU3RhdGljQW9HZW5lcmF0ZUZyYWcgPSAvKiBnbHNsICovIGBcclxuXHRcdCNpbmNsdWRlIDxjb21tb24+XHJcblx0XHQjZGVmaW5lIEFPX0VTVElNQVRPUiAxXHJcblx0XHQjZGVmaW5lIE5PUk1BTF9URVhUVVJFIDBcclxuXHRcdCNkZWZpbmUgSU1QUk9WRURfTk9STUFMX1JFQ09OU1RSVUNUSU9OIDBcclxuXHRcdCNkZWZpbmUgQUNDVVJBVEVfTk9STUFMX1JFQ09OU1RSVUNUSU9OIDFcclxuXHJcblx0XHR2YXJ5aW5nIHZlYzIgdlV2O1xyXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgdERlcHRoO1xyXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgdE5vcm1hbDtcclxuICAgICAgICB1bmlmb3JtIHZlYzIgc2l6ZTtcclxuXHJcblx0XHR1bmlmb3JtIGZsb2F0IGNhbWVyYU5lYXI7XHJcblx0XHR1bmlmb3JtIGZsb2F0IGNhbWVyYUZhcjtcclxuXHRcdHVuaWZvcm0gbWF0NCBjYW1lcmFQcm9qZWN0aW9uTWF0cml4O1xyXG5cdFx0dW5pZm9ybSBtYXQ0IGNhbWVyYUludmVyc2VQcm9qZWN0aW9uTWF0cml4O1xyXG5cdFx0XHJcblx0XHR1bmlmb3JtIGZsb2F0IGludGVuc2l0eTtcclxuXHRcdHVuaWZvcm0gZmxvYXQgYmlhcztcclxuXHRcdHVuaWZvcm0gZmxvYXQga2VybmVsUmFkaXVzO1xyXG5cdFx0XHJcblx0XHRcclxuXHRcdCNpZiBBT19FU1RJTUFUT1IgPT0gMFxyXG5cdFx0XHQjZGVmaW5lIE5VTV9TQU1QTEVTIDE2XHJcbiAgICAgICAgXHQjZGVmaW5lIFNQSVJBTF9UVVJOUyAyXHJcblx0XHRcdCNkZWZpbmUgSU5WX05VTV9TQU1QTEVTIDEuMCAvIGZsb2F0KCBOVU1fU0FNUExFUyApXHJcbiAgICAgICAgXHQjZGVmaW5lIG9mZnNldCBQSTIgLyBmbG9hdChOVU1fRlJBTUVTKVxyXG5cclxuXHRcdFx0dW5pZm9ybSBmbG9hdCBtaW5SZXNvbHV0aW9uO1xyXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGZyYW1lSW5kZXg7XHJcblx0XHRcdHVuaWZvcm0gZmxvYXQgc2NhbGU7XHJcblx0XHQjZW5kaWZcclxuXHJcblx0XHQjaWYgQU9fRVNUSU1BVE9SID09IDFcclxuXHRcdFx0dW5pZm9ybSBmbG9hdCB0YW5Gb3Y7XHJcblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIHROb2lzZTtcclxuXHRcdFx0dW5pZm9ybSB2ZWMzIGtlcm5lbFsgS0VSTkVMX1NJWkUgXTtcclxuXHRcdCNlbmRpZlxyXG5cclxuXHRcdC8vIFJHQkEgZGVwdGhcclxuXHRcdCNpbmNsdWRlIDxwYWNraW5nPlxyXG5cdFx0dmVjNCBnZXREZWZhdWx0Q29sb3IoIGNvbnN0IGluIHZlYzIgc2NyZWVuUG9zaXRpb24gKSB7XHJcblx0XHRcdHJldHVybiB2ZWM0KCAxLjAgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0ZmxvYXQgZ2V0TGluZWFyRGVwdGgoIGNvbnN0IGluIHZlYzIgc2NyZWVuUG9zaXRpb24gKSB7XHJcblx0XHRcdHJldHVybiB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCB0RGVwdGgsIHNjcmVlblBvc2l0aW9uICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHRmbG9hdCBnZXRQZXJzcGVjdGl2ZURlcHRoKGNvbnN0IGluIHZlYzIgY29vcmRzKSB7XHJcblx0XHRcdGZsb2F0IGxpbmVhckRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggdERlcHRoLCBjb29yZHMgKSApO1xyXG5cdFx0XHQjaWYgUEVSU1BFQ1RJVkVfQ0FNRVJBID09IDFcclxuXHRcdFx0XHRmbG9hdCB2aWV3WiA9IG9ydGhvZ3JhcGhpY0RlcHRoVG9WaWV3WihsaW5lYXJEZXB0aCwgY2FtZXJhTmVhciwgY2FtZXJhRmFyKTtcclxuXHRcdFx0XHRmbG9hdCBjZW50ZXJEZXB0aCA9IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKHZpZXdaLCBjYW1lcmFOZWFyLCBjYW1lcmFGYXIpO1xyXG5cdFx0XHRcdHJldHVybiBjZW50ZXJEZXB0aDtcclxuXHRcdFx0I2Vsc2VcclxuXHRcdFx0XHRyZXR1cm4gbGluZWFyRGVwdGg7XHJcblx0XHRcdCNlbmRpZlxyXG5cdFx0fVxyXG5cclxuXHRcdGZsb2F0IGdldFZpZXdEZXB0aChjb25zdCBpbiBmbG9hdCBsaW5lYXJEZXB0aCkge1xyXG5cdFx0XHRyZXR1cm4gb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKGxpbmVhckRlcHRoLCBjYW1lcmFOZWFyLCBjYW1lcmFGYXIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZsb2F0IGdldFZpZXdaKCBjb25zdCBpbiBmbG9hdCBkZXB0aCApIHtcclxuXHRcdFx0I2lmIFBFUlNQRUNUSVZFX0NBTUVSQSA9PSAxXHJcblx0XHRcdHJldHVybiBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggZGVwdGgsIGNhbWVyYU5lYXIsIGNhbWVyYUZhciApO1xyXG5cdFx0XHQjZWxzZVxyXG5cdFx0XHRyZXR1cm4gb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBkZXB0aCwgY2FtZXJhTmVhciwgY2FtZXJhRmFyICk7XHJcblx0XHRcdCNlbmRpZlxyXG5cdFx0fVxyXG5cclxuXHRcdHZlYzMgZ2V0Vmlld1Bvc2l0aW9uKCBjb25zdCBpbiB2ZWMyIHNjcmVlblBvc2l0aW9uLCBjb25zdCBpbiBmbG9hdCBkZXB0aCwgY29uc3QgaW4gZmxvYXQgdmlld1ogKSB7XHJcblx0XHRcdGZsb2F0IGNsaXBXID0gY2FtZXJhUHJvamVjdGlvbk1hdHJpeFsyXVszXSAqIHZpZXdaICsgY2FtZXJhUHJvamVjdGlvbk1hdHJpeFszXVszXTtcclxuXHRcdFx0dmVjNCBjbGlwUG9zaXRpb24gPSB2ZWM0KCAoIHZlYzMoIHNjcmVlblBvc2l0aW9uLCBkZXB0aCApIC0gMC41ICkgKiAyLjAsIDEuMCApO1xyXG5cdFx0XHRjbGlwUG9zaXRpb24gKj0gY2xpcFc7IC8vIHVucHJvamVjdGlvbi5cclxuXHRcdFx0cmV0dXJuICggY2FtZXJhSW52ZXJzZVByb2plY3Rpb25NYXRyaXggKiBjbGlwUG9zaXRpb24gKS54eXo7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9odHRwczovL3dpY2tlZGVuZ2luZS5uZXQvMjAxOS8wOS8yMi9pbXByb3ZlZC1ub3JtYWwtcmVjb25zdHJ1Y3Rpb24tZnJvbS1kZXB0aC9cclxuXHRcdHZlYzMgdmlld05vcm1hbEltcHJvdmVkKGluIHZlYzIgdXYsIGluIHZlYzMgb3JpZ2luKVxyXG5cdFx0e1x0XHJcblx0XHRcdGhpZ2hwIHZlYzIgZGQgPSBhYnModmVjMigxLi9zaXplLngsIDEuL3NpemUueSkpO1xyXG5cdFx0XHRoaWdocCB2ZWMyIGRkeCA9IHZlYzIoZGQueCwgMC4pO1xyXG5cdFx0XHRoaWdocCB2ZWMyIGRkeSA9IHZlYzIoMC4sIGRkLnkpO1xyXG5cclxuXHRcdFx0ZmxvYXQgc2FtcGxlRGVwdGggPSBnZXRQZXJzcGVjdGl2ZURlcHRoKCB1diAtIGRkeSApO1xyXG5cdFx0XHRmbG9hdCBzYW1wbGVWaWV3WiA9IGdldFZpZXdaKCBzYW1wbGVEZXB0aCApO1xyXG5cdFx0XHRoaWdocCB2ZWMzIHRvcCA9IGdldFZpZXdQb3NpdGlvbiggdXYgLSBkZHksIHNhbXBsZURlcHRoLCBzYW1wbGVWaWV3WiApO1xyXG5cclxuXHRcdFx0c2FtcGxlRGVwdGggPSBnZXRQZXJzcGVjdGl2ZURlcHRoKCB1diArIGRkeSApO1xyXG5cdFx0XHRzYW1wbGVWaWV3WiA9IGdldFZpZXdaKCBzYW1wbGVEZXB0aCApO1xyXG5cdFx0XHRoaWdocCB2ZWMzIGJvdHRvbSA9IGdldFZpZXdQb3NpdGlvbiggdXYgKyBkZHksIHNhbXBsZURlcHRoLCBzYW1wbGVWaWV3WiApO1xyXG5cclxuXHRcdFx0aGlnaHAgdmVjMyBjZW50ZXIgPSBvcmlnaW47XHJcblx0XHRcdFxyXG5cdFx0XHRzYW1wbGVEZXB0aCA9IGdldFBlcnNwZWN0aXZlRGVwdGgoIHV2IC0gZGR4ICk7XHJcblx0XHRcdHNhbXBsZVZpZXdaID0gZ2V0Vmlld1ooIHNhbXBsZURlcHRoICk7XHJcblx0XHRcdGhpZ2hwIHZlYzMgbGVmdCA9IGdldFZpZXdQb3NpdGlvbiggdXYgLSBkZHgsIHNhbXBsZURlcHRoLCBzYW1wbGVWaWV3WiApO1xyXG5cclxuXHRcdFx0c2FtcGxlRGVwdGggPSBnZXRQZXJzcGVjdGl2ZURlcHRoKCB1diArIGRkeCApO1xyXG5cdFx0XHRzYW1wbGVWaWV3WiA9IGdldFZpZXdaKCBzYW1wbGVEZXB0aCApO1xyXG5cdFx0XHRoaWdocCB2ZWMzIHJpZ2h0ID0gZ2V0Vmlld1Bvc2l0aW9uKCB1diArIGRkeCwgc2FtcGxlRGVwdGgsIHNhbXBsZVZpZXdaICk7XHJcblxyXG5cdFx0XHQgLy8gZ2V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGVhY2ggb2Zmc2V0IHBvc2l0aW9uXHJcblx0XHRcdHZlYzMgbCA9IGNlbnRlciAtIGxlZnQ7XHJcblx0XHRcdHZlYzMgciA9IHJpZ2h0IC0gY2VudGVyO1xyXG5cdFx0XHR2ZWMzIGQgPSBjZW50ZXIgLSB0b3A7XHJcblx0XHRcdHZlYzMgdSA9IGJvdHRvbSAtIGNlbnRlcjtcclxuXHJcblx0XHRcdC8vIHBpY2sgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGlmZiB3aXRoIHRoZSBzbWFsbGVzdCB6IGRpZmZlcmVuY2VcclxuXHRcdFx0dmVjMyBoRGVyaXYgPSBhYnMobC56KSA8IGFicyhyLnopID8gbCA6IHI7XHJcblx0XHRcdHZlYzMgdkRlcml2ID0gYWJzKGQueikgPCBhYnModS56KSA/IGQgOiB1O1xyXG5cclxuXHRcdFx0Ly8gZ2V0IHZpZXcgc3BhY2Ugbm9ybWFsIGZyb20gdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdGhlIHR3byBzbWFsbGVzdCBvZmZzZXRzXHJcblx0XHRcdHZlYzMgdmlld05vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyhoRGVyaXYsIHZEZXJpdikpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHZpZXdOb3JtYWw7XHJcblx0XHR9XHJcblxyXG5cdFx0dmVjMyB2aWV3Tm9ybWFsQWNjdXJhdGUoaW4gdmVjMiB1diwgaW4gdmVjMyBvcmlnaW4sIGluIGZsb2F0IGNlbnRlckRlcHRoKSB7XHJcblx0XHRcdGhpZ2hwIHZlYzIgZGQgPSBhYnModmVjMigxLi9zaXplLngsIDEuL3NpemUueSkpO1xyXG5cdFx0XHRoaWdocCB2ZWMyIGRkeCA9IHZlYzIoZGQueCwgMC4pO1xyXG5cdFx0XHRoaWdocCB2ZWMyIGRkeSA9IHZlYzIoMC4sIGRkLnkpO1xyXG5cclxuXHRcdFx0ZmxvYXQgc2FtcGxlRGVwdGggPSBnZXRQZXJzcGVjdGl2ZURlcHRoKCB1diAtIGRkeSApO1xyXG5cdFx0XHRmbG9hdCBzYW1wbGVWaWV3WiA9IGdldFZpZXdaKCBzYW1wbGVEZXB0aCApO1xyXG5cdFx0XHRoaWdocCB2ZWMzIHRvcCA9IGdldFZpZXdQb3NpdGlvbiggdXYgLSBkZHksIHNhbXBsZURlcHRoLCBzYW1wbGVWaWV3WiApO1xyXG5cclxuXHRcdFx0c2FtcGxlRGVwdGggPSBnZXRQZXJzcGVjdGl2ZURlcHRoKCB1diArIGRkeSApO1xyXG5cdFx0XHRzYW1wbGVWaWV3WiA9IGdldFZpZXdaKCBzYW1wbGVEZXB0aCApO1xyXG5cdFx0XHRoaWdocCB2ZWMzIGJvdHRvbSA9IGdldFZpZXdQb3NpdGlvbiggdXYgKyBkZHksIHNhbXBsZURlcHRoLCBzYW1wbGVWaWV3WiApO1xyXG5cclxuXHRcdFx0aGlnaHAgdmVjMyBjZW50ZXIgPSBvcmlnaW47XHJcblx0XHRcdFxyXG5cdFx0XHRzYW1wbGVEZXB0aCA9IGdldFBlcnNwZWN0aXZlRGVwdGgoIHV2IC0gZGR4ICk7XHJcblx0XHRcdHNhbXBsZVZpZXdaID0gZ2V0Vmlld1ooIHNhbXBsZURlcHRoICk7XHJcblx0XHRcdGhpZ2hwIHZlYzMgbGVmdCA9IGdldFZpZXdQb3NpdGlvbiggdXYgLSBkZHgsIHNhbXBsZURlcHRoLCBzYW1wbGVWaWV3WiApO1xyXG5cclxuXHRcdFx0c2FtcGxlRGVwdGggPSBnZXRQZXJzcGVjdGl2ZURlcHRoKCB1diArIGRkeCApO1xyXG5cdFx0XHRzYW1wbGVWaWV3WiA9IGdldFZpZXdaKCBzYW1wbGVEZXB0aCApO1xyXG5cdFx0XHRoaWdocCB2ZWMzIHJpZ2h0ID0gZ2V0Vmlld1Bvc2l0aW9uKCB1diArIGRkeCwgc2FtcGxlRGVwdGgsIHNhbXBsZVZpZXdaICk7XHJcblxyXG5cdFx0XHQgLy8gZ2V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGVhY2ggb2Zmc2V0IHBvc2l0aW9uXHJcblx0XHRcdHZlYzMgbCA9IGNlbnRlciAtIGxlZnQ7XHJcblx0XHRcdHZlYzMgciA9IHJpZ2h0IC0gY2VudGVyO1xyXG5cdFx0XHR2ZWMzIGQgPSBjZW50ZXIgLSB0b3A7XHJcblx0XHRcdHZlYzMgdSA9IGJvdHRvbSAtIGNlbnRlcjtcclxuXHJcblx0XHRcdC8vIGdldCBkZXB0aCB2YWx1ZXMgYXQgMSAmIDIgcGl4ZWxzIG9mZnNldHMgZnJvbSBjdXJyZW50IGFsb25nIHRoZSBob3Jpem9udGFsIGF4aXNcclxuXHRcdFx0dmVjNCBIID0gdmVjNChcclxuXHRcdFx0XHRnZXRMaW5lYXJEZXB0aCh1diAtIGRkeCksXHJcblx0XHRcdFx0Z2V0TGluZWFyRGVwdGgodXYgKyBkZHgpLFxyXG5cdFx0XHRcdGdldExpbmVhckRlcHRoKHV2IC0gMi4gKiBkZHgpLFxyXG5cdFx0XHRcdGdldExpbmVhckRlcHRoKHV2ICsgMi4gKiBkZHgpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHQvLyBnZXQgZGVwdGggdmFsdWVzIGF0IDEgJiAyIHBpeGVscyBvZmZzZXRzIGZyb20gY3VycmVudCBhbG9uZyB0aGUgdmVydGljYWwgYXhpc1xyXG5cdFx0XHR2ZWM0IFYgPSB2ZWM0KFxyXG5cdFx0XHRcdGdldExpbmVhckRlcHRoKHV2IC0gZGR5KSxcclxuXHRcdFx0XHRnZXRMaW5lYXJEZXB0aCh1diArIGRkeSksXHJcblx0XHRcdFx0Z2V0TGluZWFyRGVwdGgodXYgLSAyLiAqIGRkeSksXHJcblx0XHRcdFx0Z2V0TGluZWFyRGVwdGgodXYgKyAyLiAqIGRkeSlcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIGN1cnJlbnQgcGl4ZWwncyBkZXB0aCBkaWZmZXJlbmNlIGZyb20gc2xvcGUgb2Ygb2Zmc2V0IGRlcHRoIHNhbXBsZXNcclxuXHRcdFx0Ly8gZGlmZmVycyBmcm9tIG9yaWdpbmFsIGFydGljbGUgYmVjYXVzZSB3ZSdyZSB1c2luZyBub24tbGluZWFyIGRlcHRoIHZhbHVlc1xyXG5cdFx0XHQvLyBzZWUgYXJ0aWNsZSdzIGNvbW1lbnRzXHJcblx0XHRcdHZlYzIgaGUgPSBhYnMoKDIuICogSC54eSAtIEguencpIC0gY2VudGVyRGVwdGgpO1xyXG5cdFx0XHR2ZWMyIHZlID0gYWJzKCgyLiAqIFYueHkgLSBWLnp3KSAtIGNlbnRlckRlcHRoKTtcclxuXHJcblx0XHRcdC8vIHBpY2sgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGlmZiB3aXRoIHRoZSBzbWFsbGVzdCBkZXB0aCBkaWZmZXJlbmNlIGZyb20gc2xvcGVzXHJcblx0XHRcdHZlYzMgaERlcml2ID0gaGUueCA8IGhlLnkgPyBsIDogcjtcclxuXHRcdFx0dmVjMyB2RGVyaXYgPSB2ZS54IDwgdmUueSA/IGQgOiB1O1xyXG5cclxuXHRcdFx0Ly8gZ2V0IHZpZXcgc3BhY2Ugbm9ybWFsIGZyb20gdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdGhlIGJlc3QgZGVyaXZhdGl2ZXNcclxuXHRcdFx0dmVjMyB2aWV3Tm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKGhEZXJpdiwgdkRlcml2KSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdmlld05vcm1hbDtcclxuXHJcblx0XHR9XHJcblxyXG5cdFx0dmVjMyBnZXRWaWV3Tm9ybWFsKCBjb25zdCBpbiB2ZWMzIHZpZXdQb3NpdGlvbiwgY29uc3QgaW4gdmVjMiBzY3JlZW5Qb3NpdGlvbiwgaW4gZmxvYXQgY2VudGVyRGVwdGggKSB7XHJcblx0XHRcdCNpZiBOT1JNQUxfVEVYVFVSRSA9PSAxXHJcblx0XHRcdFx0cmV0dXJuIHVucGFja1JHQlRvTm9ybWFsKCB0ZXh0dXJlMkQoIHROb3JtYWwsIHNjcmVlblBvc2l0aW9uICkueHl6ICk7XHJcblx0XHRcdCNlbGlmIElNUFJPVkVEX05PUk1BTF9SRUNPTlNUUlVDVElPTiA9PSAxXHJcblx0XHRcdFx0cmV0dXJuIHZpZXdOb3JtYWxJbXByb3ZlZChzY3JlZW5Qb3NpdGlvbiwgdmlld1Bvc2l0aW9uKTtcclxuXHRcdFx0I2VsaWYgQUNDVVJBVEVfTk9STUFMX1JFQ09OU1RSVUNUSU9OID09IDFcclxuXHRcdFx0XHRyZXR1cm4gdmlld05vcm1hbEFjY3VyYXRlKHNjcmVlblBvc2l0aW9uLCB2aWV3UG9zaXRpb24sIGNlbnRlckRlcHRoKTtcclxuXHRcdFx0I2Vsc2VcclxuXHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCBjcm9zcyggZEZkeCggdmlld1Bvc2l0aW9uICksIGRGZHkoIHZpZXdQb3NpdGlvbiApICkgKTtcclxuXHRcdFx0I2VuZGlmXHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGZsb2F0IHNjYWxlRGl2aWRlZEJ5Q2FtZXJhRmFyO1xyXG5cdFx0ZmxvYXQgbWluUmVzb2x1dGlvbk11bHRpcGxpZWRCeUNhbWVyYUZhcjtcclxuICAgICAgICAvLyBtb3ZpbmcgY29zdGx5IGRpdmlkZXMgaW50byBjb25zdHNcclxuXHRcdFxyXG5cclxuXHRcdGZsb2F0IGNvbXB1dGVLZXJuZWxTaXplKGZsb2F0IGQsIGZsb2F0IHIpIHtcclxuXHRcdFx0I2lmIFBFUlNQRUNUSVZFX0NBTUVSQSA9PSAxXHJcblx0XHRcdFx0Ly8gQXBwYXJlbnRseSB0aGlzIGlzIHdyb25nXHJcblx0XHRcdFx0Ly8gcmV0dXJuIChyICogdGFuKGZvdikgKiBkKSAvIChzaXplLnkgKiAwLjUpO1xyXG5cdFx0XHRcdC8vIEFuZCB0aGlzIGlzIGNvcnJlY3RcclxuXHRcdFx0XHRmbG9hdCBycCA9IHIgLyAoc2l6ZS55ICogMC41KTtcclxuXHRcdFx0XHRyZXR1cm4gc3FydCgocnAqcnAqdGFuRm92KnRhbkZvdipkKmQpLygxLiArIHJwKnJwKnRhbkZvdip0YW5Gb3YpKTtcclxuXHRcdFx0I2Vsc2VcclxuXHRcdFx0XHRmbG9hdCB0d29PcnRob1NpemUgPSBzaXplLnkgLyAoMi4vIGNhbWVyYVByb2plY3Rpb25NYXRyaXhbMV1bMV0pO1xyXG5cdFx0XHRcdHJldHVybiByIC8gdHdvT3J0aG9TaXplO1xyXG5cdFx0XHQjZW5kaWZcclxuXHRcdH1cclxuXHJcblx0XHRmbG9hdCBnZXRBbWJpZW50T2NjbHVzaW9uKCBjb25zdCBpbiB2ZWMzIGNlbnRlclZpZXdQb3NpdGlvbiwgaW4gZmxvYXQgY2VudGVyRGVwdGggKSB7XHJcbiAgICAgICAgICAgICNpZiBBT19FU1RJTUFUT1IgPT0gMFxyXG4gICAgICAgICAgICAgICAgLy8gcHJlY29tcHV0ZSBzb21lIHZhcmlhYmxlcyByZXF1aXJlIGluIGdldE9jY2x1c2lvbi5cclxuICAgICAgICAgICAgICAgIHNjYWxlRGl2aWRlZEJ5Q2FtZXJhRmFyID0gc2NhbGUgLyBjYW1lcmFGYXI7XHJcbiAgICAgICAgICAgICAgICBtaW5SZXNvbHV0aW9uTXVsdGlwbGllZEJ5Q2FtZXJhRmFyID0gbWluUmVzb2x1dGlvbiAqIGNhbWVyYUZhcjtcclxuICAgICAgICAgICAgICAgIHZlYzMgY2VudGVyVmlld05vcm1hbCA9IGdldFZpZXdOb3JtYWwoIGNlbnRlclZpZXdQb3NpdGlvbiwgdlV2LCBjZW50ZXJEZXB0aCApO1xyXG4gICAgICAgICAgICAgICAgLy8ganNmaWRkbGUgdGhhdCBzaG93cyBzYW1wbGUgcGF0dGVybjogaHR0cHM6Ly9qc2ZpZGRsZS5uZXQvVGVuSGFuZHMvanVuNjdrOXkvNy9cclxuICAgICAgICAgICAgICAgIGZsb2F0IG9jY2x1c2lvblN1bSA9IDAuMDtcclxuICAgICAgICAgICAgICAgIGZsb2F0IHdlaWdodFN1bSA9IDAuMDtcclxuICAgICAgICAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgTlVNX1NBTVBMRVM7IGkgKysgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSAoIGZsb2F0KGkpICsgMS4gKSAvIGZsb2F0KE5VTV9TQU1QTEVTKTtcclxuICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbmdsZSA9IGZsb2F0KFNQSVJBTF9UVVJOUykgICogYWxwaGE7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMiByYWRpdXMgPSAoa2VybmVsUmFkaXVzIC8gc2l6ZSkgKiBwb3coIGFscGhhLCAxLjEgKTtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMyIHNhbXBsZVV2ID0gdlV2ICsgdmVjMiggY29zKCBhbmdsZSArIGZyYW1lSW5kZXggKiBvZmZzZXQgKSwgc2luKCBhbmdsZSArIGZyYW1lSW5kZXggKiBvZmZzZXQgKSApICogcmFkaXVzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVEZXB0aCA9IGdldFBlcnNwZWN0aXZlRGVwdGgoIHNhbXBsZVV2ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIHNhbXBsZURlcHRoID49ICggMS4wIC0gRVBTSUxPTiApICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlVmlld1ogPSBnZXRWaWV3Wiggc2FtcGxlRGVwdGggKTtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzIHNhbXBsZVZpZXdQb3NpdGlvbiA9IGdldFZpZXdQb3NpdGlvbiggc2FtcGxlVXYsIHNhbXBsZURlcHRoLCBzYW1wbGVWaWV3WiApO1xyXG5cclxuXHRcdFx0XHRcdC8qKiBNY0d1aXJlIEVzdGltYXRvciovXHJcblx0XHRcdFx0XHR2ZWMzIHYgPSBzYW1wbGVWaWV3UG9zaXRpb24gLSBjZW50ZXJWaWV3UG9zaXRpb247XHJcblx0XHRcdFx0XHRmbG9hdCB2diA9IGRvdCh2LCB2KTtcclxuXHRcdFx0XHRcdGZsb2F0IHZuID0gZG90KHYsIGNlbnRlclZpZXdOb3JtYWwpIC0gYmlhcztcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0Ly8gTm90ZSBsYXJnZSBlcHNpbG9uIHRvIGF2b2lkIG92ZXJkYXJrZW5pbmcgd2l0aGluIGNyYWNrc1xyXG5cdFx0XHRcdFx0ZmxvYXQgcmFkaXVzMiA9IDIuOy8vdVNhbXBsZVJhZGl1c1dTICogdVNhbXBsZVJhZGl1c1dTXHJcblx0XHRcdFx0XHRmbG9hdCBlcHNpbG9uID0gMC4wMTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0ZmxvYXQgZiA9IG1heChyYWRpdXMyIC0gdnYsIDAuMCkgLyByYWRpdXMyO1xyXG5cdFx0XHRcdFx0b2NjbHVzaW9uU3VtICs9IGYgKiBmICogZiAqIG1heCh2biAvIChlcHNpbG9uICsgdnYpLCAwLjApIC8gNC47XHJcblxyXG5cdFx0XHRcdFx0LyoqIFRocmVlLmpzIFNBTyBFc3RpbWF0b3IqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZlYzMgdmlld0RlbHRhID0gc2FtcGxlVmlld1Bvc2l0aW9uIC0gY2VudGVyVmlld1Bvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IHZpZXdEaXN0YW5jZSA9IGxlbmd0aCggdmlld0RlbHRhICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgc2NhbGVkU2NyZWVuRGlzdGFuY2UgPSBzY2FsZURpdmlkZWRCeUNhbWVyYUZhciAqIHZpZXdEaXN0YW5jZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBvY2NsdXNpb25TdW0gKz0gbWF4KDAuMCwgKGRvdChjZW50ZXJWaWV3Tm9ybWFsLCB2aWV3RGVsdGEpIC0gbWluUmVzb2x1dGlvbk11bHRpcGxpZWRCeUNhbWVyYUZhcikgLyBzY2FsZWRTY3JlZW5EaXN0YW5jZSAtIGJpYXMpIC8gKDEuMCArIHBvdzIoIHNjYWxlZFNjcmVlbkRpc3RhbmNlICkgKTtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRTdW0gKz0gMS4wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoIHdlaWdodFN1bSA9PSAwLjAgKSBkaXNjYXJkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9jY2x1c2lvblN1bSAqICggaW50ZW5zaXR5IC8gd2VpZ2h0U3VtICk7XHJcblx0XHRcdCNlbGlmIEFPX0VTVElNQVRPUiA9PSAxXHJcblx0XHRcdFx0dmVjMyB2aWV3UG9zaXRpb24gPSBjZW50ZXJWaWV3UG9zaXRpb247XHJcblx0XHRcdFx0dmVjMyB2aWV3Tm9ybWFsID0gZ2V0Vmlld05vcm1hbCggY2VudGVyVmlld1Bvc2l0aW9uLCB2VXYsIGNlbnRlckRlcHRoICk7XHJcblx0XHRcdFx0dmVjMiBub2lzZVNjYWxlID0gdmVjMiggc2l6ZS54IC8gNC4wLCBzaXplLnkgLyA0LjAgKTtcclxuXHRcdFx0XHR2ZWMzIHJhbmRvbSA9IHZlYzMoIHRleHR1cmUyRCggdE5vaXNlLCB2VXYgKiBub2lzZVNjYWxlICkuciApO1xyXG5cdFx0XHRcdC8vIGNvbXB1dGUgbWF0cml4IHVzZWQgdG8gcmVvcmllbnQgYSBrZXJuZWwgdmVjdG9yXHJcblx0XHRcdFx0dmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCByYW5kb20gLSB2aWV3Tm9ybWFsICogZG90KCByYW5kb20sIHZpZXdOb3JtYWwgKSApO1xyXG5cdFx0XHRcdHZlYzMgYml0YW5nZW50ID0gY3Jvc3MoIHZpZXdOb3JtYWwsIHRhbmdlbnQgKTtcclxuXHRcdFx0XHRtYXQzIGtlcm5lbE1hdHJpeCA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgdmlld05vcm1hbCApO1xyXG5cdFx0XHRcdGZsb2F0IG9jY2x1c2lvbiA9IDAuMDtcclxuXHRcdFx0XHRmbG9hdCBrZXJuZWxTaXplX3dzID0gY29tcHV0ZUtlcm5lbFNpemUoLXZpZXdQb3NpdGlvbi56LCBrZXJuZWxSYWRpdXMpO1xyXG5cdFx0XHRcdGZsb2F0IGRpdiA9IGZsb2F0KCBLRVJORUxfU0laRSk7XHJcblx0XHRcdFx0ZmxvYXQgbWF4RGlzdCA9IGtlcm5lbFNpemVfd3MgLyAoY2FtZXJhRmFyIC0gY2FtZXJhTmVhcik7XHJcblx0XHRcdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgS0VSTkVMX1NJWkU7IGkgKysgKSB7XHJcblx0XHRcdFx0XHR2ZWMzIHNhbXBsZVZlY3RvciA9IGtlcm5lbE1hdHJpeCAqIGtlcm5lbFsgaSBdOyAvLyByZW9yaWVudCBzYW1wbGUgdmVjdG9yIGluIHZpZXcgc3BhY2VcclxuXHRcdFx0XHRcdHZlYzMgc2FtcGxlUG9pbnQgPSB2aWV3UG9zaXRpb24gKyAoIHNhbXBsZVZlY3RvciAqIGtlcm5lbFNpemVfd3MgKTsgLy8gY2FsY3VsYXRlIHNhbXBsZSBwb2ludFxyXG5cdFx0XHRcdFx0dmVjNCBzYW1wbGVQb2ludE5EQyA9IGNhbWVyYVByb2plY3Rpb25NYXRyaXggKiB2ZWM0KCBzYW1wbGVQb2ludCwgMS4wICk7IC8vIHByb2plY3QgcG9pbnQgYW5kIGNhbGN1bGF0ZSBORENcclxuXHRcdFx0XHRcdHNhbXBsZVBvaW50TkRDIC89IHNhbXBsZVBvaW50TkRDLnc7XHJcblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVBvaW50VXYgPSBzYW1wbGVQb2ludE5EQy54eSAqIDAuNSArIDAuNTsgLy8gY29tcHV0ZSB1diBjb29yZGluYXRlc1xyXG5cdFx0XHRcdFx0ZmxvYXQgcmVhbERlcHRoID0gZ2V0TGluZWFyRGVwdGgoIHNhbXBsZVBvaW50VXYgKTsgLy8gZ2V0IGxpbmVhciBkZXB0aCBmcm9tIGRlcHRoIHRleHR1cmVcclxuXHRcdFx0XHRcdGZsb2F0IHNhbXBsZURlcHRoID0gdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBzYW1wbGVQb2ludC56ICsgYmlhcywgY2FtZXJhTmVhciwgY2FtZXJhRmFyICk7IC8vIGNvbXB1dGUgbGluZWFyIGRlcHRoIG9mIHRoZSBzYW1wbGUgdmlldyBaIHZhbHVlXHJcblx0XHRcdFx0XHRmbG9hdCBkZWx0YSA9IHNhbXBsZURlcHRoIC0gcmVhbERlcHRoO1xyXG5cdFx0XHRcdFx0aWYgKCBkZWx0YSA+IDAuICYmIGRlbHRhIDwgbWF4RGlzdCApIHsgLy8gaWYgZnJhZ21lbnQgaXMgYmVmb3JlIHNhbXBsZSBwb2ludCwgaW5jcmVhc2Ugb2NjbHVzaW9uXHJcblx0XHRcdFx0XHRcdG9jY2x1c2lvbiArPSAxLjA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBjbGFtcCggb2NjbHVzaW9uICogaW50ZW5zaXR5IC8gZGl2LCAwLjAsIDEuMCApO1xyXG5cdFx0XHQjZW5kaWZcclxuXHRcdFx0fVxyXG5cdFx0dm9pZCBtYWluKCkge1xyXG5cdFx0XHRmbG9hdCBsaW5lYXJEZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHREZXB0aCwgdlV2ICkgKTtcclxuXHRcdFx0ZmxvYXQgY2VudGVyRGVwdGggPSBnZXRQZXJzcGVjdGl2ZURlcHRoKHZVdik7XHJcblx0XHRcdGlmKCBjZW50ZXJEZXB0aCA+PSAoIDEuMCAtIEVQU0lMT04gKSApIHtcclxuXHRcdFx0XHRkaXNjYXJkO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZsb2F0IGNlbnRlclZpZXdaID0gZ2V0Vmlld0RlcHRoKGxpbmVhckRlcHRoKTtcclxuXHRcdFx0dmVjMyB2aWV3UG9zaXRpb24gPSBnZXRWaWV3UG9zaXRpb24oIHZVdiwgY2VudGVyRGVwdGgsIGNlbnRlclZpZXdaICk7XHJcblx0XHRcdHZlYzMgdmlld05vcm1hbCA9IGdldFZpZXdOb3JtYWwodmlld1Bvc2l0aW9uLCB2VXYsIGxpbmVhckRlcHRoKTtcclxuXHRcdFx0ZmxvYXQgYW1iaWVudE9jY2x1c2lvbiA9IGdldEFtYmllbnRPY2NsdXNpb24oIHZpZXdQb3NpdGlvbiwgY2VudGVyRGVwdGggKTtcclxuXHRcdFx0Z2xfRnJhZ0NvbG9yID0gZ2V0RGVmYXVsdENvbG9yKCB2VXYgKTtcclxuXHRcdFx0Z2xfRnJhZ0NvbG9yLnh5eiAqPSAgYW1iaWVudE9jY2x1c2lvbjtcclxuXHRcdFx0Z2xfRnJhZ0NvbG9yLmEgPSAxLjtcclxuXHRcdH1gXHJcbiIsImltcG9ydCB7XHJcbiAgQWRkRXF1YXRpb24sXHJcbiAgQ3VzdG9tQmxlbmRpbmcsXHJcbiAgRGF0YVRleHR1cmUsXHJcbiAgRmxvYXRUeXBlLFxyXG4gIE1hdGhVdGlscyxcclxuICBNYXRyaXg0LFxyXG4gIE5vQmxlbmRpbmcsXHJcbiAgT25lRmFjdG9yLFxyXG4gIE9ydGhvZ3JhcGhpY0NhbWVyYSxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBSZXBlYXRXcmFwcGluZyxcclxuICBSZXZlcnNlU3VidHJhY3RFcXVhdGlvbixcclxuICBSR0JBRm9ybWF0LFxyXG4gIFNoYWRlck1hdGVyaWFsLFxyXG4gIFRleHR1cmUsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzLFxyXG4gIFdlYkdMUmVuZGVyZXIsXHJcbiAgV2ViR0xSZW5kZXJUYXJnZXRcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgRnVsbFNjcmVlblF1YWQgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvUGFzcy5qcydcclxuXHJcbmltcG9ydCB7IFNpbXBsZXhOb2lzZSB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9tYXRoL1NpbXBsZXhOb2lzZS5qcydcclxuaW1wb3J0IHsgUGFzc09wdGlvbnMsIFByb2dyZXNzaXZlR1Bhc3MgfSBmcm9tICcuL0dQYXNzLmpzJ1xyXG5pbXBvcnQgeyBzcGVja2xlU3RhdGljQW9BY2N1bXVsYXRlRnJhZyB9IGZyb20gJy4uLy4uL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtc3RhdGljLWFvLWFjY3VtdWxhdGUtZnJhZy5qcydcclxuaW1wb3J0IHsgc3BlY2tsZVN0YXRpY0FvQWNjdW11bGF0ZVZlcnQgfSBmcm9tICcuLi8uLi9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXN0YXRpYy1hby1hY2N1bXVsYXRlLXZlcnQuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVTdGF0aWNBb0dlbmVyYXRlVmVydCB9IGZyb20gJy4uLy4uL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtc3RhdGljLWFvLWdlbmVyYXRlLXZlcnQuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVTdGF0aWNBb0dlbmVyYXRlRnJhZyB9IGZyb20gJy4uLy4uL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtc3RhdGljLWFvLWdlbmVyYXRlLWZyYWcuanMnXHJcblxyXG4vKipcclxuICogU0FPIGltcGxlbWVudGF0aW9uIGluc3BpcmVkIGZyb20gYmhvdXN0b24gcHJldmlvdXMgU0FPIHdvcmtcclxuICovXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzaXZlQU9QYXNzT3B0aW9ucyBleHRlbmRzIFBhc3NPcHRpb25zIHtcclxuICBpbnRlbnNpdHk/OiBudW1iZXJcclxuICBrZXJuZWxSYWRpdXM/OiBudW1iZXJcclxuICBrZXJuZWxTaXplPzogbnVtYmVyXHJcbiAgYmlhcz86IG51bWJlclxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgRGVmYXVsdFByb2dyZXNzaXZlQU9QYXNzT3B0aW9uczogUmVxdWlyZWQ8UHJvZ3Jlc3NpdmVBT1Bhc3NPcHRpb25zPiA9IHtcclxuICBpbnRlbnNpdHk6IDEsXHJcbiAga2VybmVsUmFkaXVzOiAzMCwgLy8gU2NyZWVuIHNwYWNlXHJcbiAgYmlhczogMC4wMSxcclxuICBrZXJuZWxTaXplOiAxNlxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NpdmVBT1Bhc3MgZXh0ZW5kcyBQcm9ncmVzc2l2ZUdQYXNzIHtcclxuICBwcml2YXRlIGdlbmVyYXRpb25NYXRlcmlhbDogU2hhZGVyTWF0ZXJpYWxcclxuICBwcml2YXRlIGFjY3VtdWxhdGVNYXRlcmlhbDogU2hhZGVyTWF0ZXJpYWxcclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGlvbkJ1ZmZlcjogV2ViR0xSZW5kZXJUYXJnZXRcclxuXHJcbiAgcHVibGljIF9vcHRpb25zOiBSZXF1aXJlZDxQcm9ncmVzc2l2ZUFPUGFzc09wdGlvbnM+ID0gT2JqZWN0LmFzc2lnbihcclxuICAgIHt9LFxyXG4gICAgRGVmYXVsdFByb2dyZXNzaXZlQU9QYXNzT3B0aW9uc1xyXG4gIClcclxuXHJcbiAgcHJpdmF0ZSBmc1F1YWQ6IEZ1bGxTY3JlZW5RdWFkXHJcblxyXG4gIHByaXZhdGUga2VybmVsczogQXJyYXk8QXJyYXk8VmVjdG9yMz4+ID0gW11cclxuICBwcml2YXRlIG5vaXNlVGV4dHVyZXM6IEFycmF5PFRleHR1cmU+ID0gW11cclxuXHJcbiAgcHVibGljIHNldFRleHR1cmUodU5hbWU6IHN0cmluZywgdGV4dHVyZTogVGV4dHVyZSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwudW5pZm9ybXNbdU5hbWVdLnZhbHVlID0gdGV4dHVyZVxyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ1BST0dSRVNTSVZFLUFPJ1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBQcm9ncmVzc2l2ZUFPUGFzc09wdGlvbnMpIHtcclxuICAgIHN1cGVyLm9wdGlvbnMgPSB2YWx1ZVxyXG4gICAgdGhpcy5rZXJuZWxzID0gW11cclxuICAgIHRoaXMubm9pc2VUZXh0dXJlcyA9IFtdXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuXHJcbiAgICB0aGlzLl9nZW5lcmF0aW9uQnVmZmVyID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KDI1NiwgMjU2KVxyXG4gICAgdGhpcy5fb3V0cHV0VGFyZ2V0ID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KDI1NiwgMjU2KVxyXG5cclxuICAgIHRoaXMuZ2VuZXJhdGlvbk1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuICAgICAgZnJhZ21lbnRTaGFkZXI6IHNwZWNrbGVTdGF0aWNBb0dlbmVyYXRlRnJhZyxcclxuICAgICAgdmVydGV4U2hhZGVyOiBzcGVja2xlU3RhdGljQW9HZW5lcmF0ZVZlcnQsXHJcbiAgICAgIHVuaWZvcm1zOiB7XHJcbiAgICAgICAgdERlcHRoOiB7IHZhbHVlOiBudWxsIH0sXHJcbiAgICAgICAgdE5vcm1hbDogeyB2YWx1ZTogbnVsbCB9LFxyXG4gICAgICAgIHNpemU6IHsgdmFsdWU6IG5ldyBWZWN0b3IyKDUxMiwgNTEyKSB9LFxyXG5cclxuICAgICAgICBjYW1lcmFOZWFyOiB7IHZhbHVlOiAxIH0sXHJcbiAgICAgICAgY2FtZXJhRmFyOiB7IHZhbHVlOiAxMDAgfSxcclxuICAgICAgICBjYW1lcmFQcm9qZWN0aW9uTWF0cml4OiB7IHZhbHVlOiBuZXcgTWF0cml4NCgpIH0sXHJcbiAgICAgICAgY2FtZXJhSW52ZXJzZVByb2plY3Rpb25NYXRyaXg6IHsgdmFsdWU6IG5ldyBNYXRyaXg0KCkgfSxcclxuICAgICAgICB0YW5Gb3Y6IHsgdmFsdWU6IDAgfSxcclxuXHJcbiAgICAgICAgaW50ZW5zaXR5OiB7IHZhbHVlOiB0aGlzLl9vcHRpb25zLmludGVuc2l0eSB9LFxyXG4gICAgICAgIGJpYXM6IHsgdmFsdWU6IHRoaXMuX29wdGlvbnMuYmlhcyB9LFxyXG4gICAgICAgIGtlcm5lbFJhZGl1czogeyB2YWx1ZTogdGhpcy5fb3B0aW9ucy5rZXJuZWxSYWRpdXMgfSwgLy8gV29ybGQgc3BhY2VcclxuXHJcbiAgICAgICAgdE5vaXNlOiB7IHZhbHVlOiBudWxsIH0sXHJcbiAgICAgICAga2VybmVsOiB7IHZhbHVlOiBudWxsIH1cclxuXHJcbiAgICAgICAgLyoqIE9ubHkgdXNlZCB3aXRoIE1jR3VpcmUtbGlrZSBlc3RpbWF0b3IgKi9cclxuICAgICAgICAvLyBtaW5SZXNvbHV0aW9uOiB7IHZhbHVlOiAwIH0sXHJcbiAgICAgICAgLy8gZnJhbWVJbmRleDogeyB2YWx1ZTogMCB9LFxyXG4gICAgICAgIC8vIHNjYWxlOiB7IHZhbHVlOiAxIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmdlbmVyYXRpb25NYXRlcmlhbC5leHRlbnNpb25zLmRlcml2YXRpdmVzID0gdHJ1ZVxyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ3NpemUnXS52YWx1ZS5zZXQoMjU2LCAyNTYpXHJcbiAgICB0aGlzLmdlbmVyYXRpb25NYXRlcmlhbC5ibGVuZGluZyA9IE5vQmxlbmRpbmdcclxuICAgIHRoaXMuZ2VuZXJhdGlvbk1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IHRydWVcclxuXHJcbiAgICB0aGlzLmFjY3VtdWxhdGVNYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcbiAgICAgIGRlZmluZXM6IHt9LFxyXG4gICAgICBmcmFnbWVudFNoYWRlcjogc3BlY2tsZVN0YXRpY0FvQWNjdW11bGF0ZUZyYWcsXHJcbiAgICAgIHZlcnRleFNoYWRlcjogc3BlY2tsZVN0YXRpY0FvQWNjdW11bGF0ZVZlcnQsXHJcbiAgICAgIHVuaWZvcm1zOiB7XHJcbiAgICAgICAgdERpZmZ1c2U6IHsgdmFsdWU6IG51bGwgfSxcclxuICAgICAgICBvcGFjaXR5OiB7IHZhbHVlOiAxIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuYWNjdW11bGF0ZU1hdGVyaWFsLnVuaWZvcm1zWyd0RGlmZnVzZSddLnZhbHVlID0gdGhpcy5fZ2VuZXJhdGlvbkJ1ZmZlci50ZXh0dXJlXHJcbiAgICB0aGlzLmFjY3VtdWxhdGVNYXRlcmlhbC5ibGVuZGluZyA9IEN1c3RvbUJsZW5kaW5nXHJcbiAgICB0aGlzLmFjY3VtdWxhdGVNYXRlcmlhbC5ibGVuZFNyYyA9IE9uZUZhY3RvclxyXG4gICAgdGhpcy5hY2N1bXVsYXRlTWF0ZXJpYWwuYmxlbmREc3QgPSBPbmVGYWN0b3JcclxuICAgIHRoaXMuYWNjdW11bGF0ZU1hdGVyaWFsLmJsZW5kRXF1YXRpb24gPSBSZXZlcnNlU3VidHJhY3RFcXVhdGlvblxyXG4gICAgdGhpcy5hY2N1bXVsYXRlTWF0ZXJpYWwuYmxlbmRTcmNBbHBoYSA9IE9uZUZhY3RvclxyXG4gICAgdGhpcy5hY2N1bXVsYXRlTWF0ZXJpYWwuYmxlbmREc3RBbHBoYSA9IE9uZUZhY3RvclxyXG4gICAgdGhpcy5hY2N1bXVsYXRlTWF0ZXJpYWwuYmxlbmRFcXVhdGlvbkFscGhhID0gQWRkRXF1YXRpb25cclxuXHJcbiAgICB0aGlzLmZzUXVhZCA9IG5ldyBGdWxsU2NyZWVuUXVhZCh0aGlzLmdlbmVyYXRpb25NYXRlcmlhbClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGUoY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSB8IE9ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgLyoqIERFRklORVMgKi9cclxuICAgIHRoaXMuZ2VuZXJhdGlvbk1hdGVyaWFsLmRlZmluZXNbJ1BFUlNQRUNUSVZFX0NBTUVSQSddID0gKFxyXG4gICAgICBjYW1lcmEgYXMgUGVyc3BlY3RpdmVDYW1lcmFcclxuICAgICkuaXNQZXJzcGVjdGl2ZUNhbWVyYVxyXG4gICAgICA/IDFcclxuICAgICAgOiAwXHJcbiAgICB0aGlzLmdlbmVyYXRpb25NYXRlcmlhbC5kZWZpbmVzWydOVU1fRlJBTUVTJ10gPSB0aGlzLmFjY3VtdWxhdGlvbkZyYW1lc1xyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwuZGVmaW5lc1snS0VSTkVMX1NJWkUnXSA9IHRoaXMuX29wdGlvbnMua2VybmVsU2l6ZVxyXG4gICAgdGhpcy5hY2N1bXVsYXRlTWF0ZXJpYWwuZGVmaW5lc1snTlVNX0ZSQU1FUyddID0gdGhpcy5hY2N1bXVsYXRpb25GcmFtZXNcclxuXHJcbiAgICAvKiogVU5JRk9STVMgKi9cclxuICAgIHRoaXMuZ2VuZXJhdGlvbk1hdGVyaWFsLnVuaWZvcm1zWydjYW1lcmFOZWFyJ10udmFsdWUgPSBjYW1lcmEubmVhclxyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ2NhbWVyYUZhciddLnZhbHVlID0gY2FtZXJhLmZhclxyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ2NhbWVyYUludmVyc2VQcm9qZWN0aW9uTWF0cml4J10udmFsdWUuY29weShcclxuICAgICAgY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlXHJcbiAgICApXHJcbiAgICB0aGlzLmdlbmVyYXRpb25NYXRlcmlhbC51bmlmb3Jtc1snY2FtZXJhUHJvamVjdGlvbk1hdHJpeCddLnZhbHVlLmNvcHkoXHJcbiAgICAgIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4XHJcbiAgICApXHJcbiAgICBjb25zdCBmb3YgPSAoKChjYW1lcmEgYXMgUGVyc3BlY3RpdmVDYW1lcmEpLmZvdiAvIDIpICogTWF0aC5QSSkgLyAxODAuMFxyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ3RhbkZvdiddLnZhbHVlID0gTWF0aC50YW4oZm92KVxyXG5cclxuICAgIGlmICghdGhpcy5rZXJuZWxzW3RoaXMuZnJhbWVJbmRleF0pIHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZVNhbXBsZUtlcm5lbCh0aGlzLmZyYW1lSW5kZXgpXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMubm9pc2VUZXh0dXJlc1t0aGlzLmZyYW1lSW5kZXhdKSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVSYW5kb21LZXJuZWxSb3RhdGlvbnModGhpcy5mcmFtZUluZGV4KVxyXG4gICAgfVxyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ2tlcm5lbCddLnZhbHVlID0gdGhpcy5rZXJuZWxzW3RoaXMuZnJhbWVJbmRleF1cclxuICAgIHRoaXMuZ2VuZXJhdGlvbk1hdGVyaWFsLnVuaWZvcm1zWyd0Tm9pc2UnXS52YWx1ZSA9XHJcbiAgICAgIHRoaXMubm9pc2VUZXh0dXJlc1t0aGlzLmZyYW1lSW5kZXhdXHJcblxyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ2ludGVuc2l0eSddLnZhbHVlID0gdGhpcy5fb3B0aW9ucy5pbnRlbnNpdHlcclxuICAgIHRoaXMuZ2VuZXJhdGlvbk1hdGVyaWFsLnVuaWZvcm1zWydrZXJuZWxSYWRpdXMnXS52YWx1ZSA9IHRoaXMuX29wdGlvbnMua2VybmVsUmFkaXVzXHJcbiAgICB0aGlzLmdlbmVyYXRpb25NYXRlcmlhbC51bmlmb3Jtc1snYmlhcyddLnZhbHVlID0gdGhpcy5fb3B0aW9ucy5iaWFzXHJcblxyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB0aGlzLmFjY3VtdWxhdGVNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXIocmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIpOiBib29sZWFuIHtcclxuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLl9nZW5lcmF0aW9uQnVmZmVyKVxyXG4gICAgcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigweDAwMDAwMClcclxuICAgIHJlbmRlcmVyLnNldENsZWFyQWxwaGEoMSlcclxuICAgIHJlbmRlcmVyLmNsZWFyKHRydWUpXHJcbiAgICB0aGlzLmZzUXVhZC5tYXRlcmlhbCA9IHRoaXMuZ2VuZXJhdGlvbk1hdGVyaWFsXHJcbiAgICB0aGlzLmZzUXVhZC5yZW5kZXIocmVuZGVyZXIpXHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMuX291dHB1dFRhcmdldClcclxuICAgIGlmICh0aGlzLmZyYW1lSW5kZXggPT09IDApIHtcclxuICAgICAgdGhpcy5jbGVhcihyZW5kZXJlcilcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZzUXVhZC5tYXRlcmlhbCA9IHRoaXMuYWNjdW11bGF0ZU1hdGVyaWFsXHJcbiAgICB0aGlzLmZzUXVhZC5yZW5kZXIocmVuZGVyZXIpXHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnJlbmRlcihyZW5kZXJlcilcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICBzdXBlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB0aGlzLl9nZW5lcmF0aW9uQnVmZmVyLnNldFNpemUod2lkdGgsIGhlaWdodClcclxuXHJcbiAgICB0aGlzLmdlbmVyYXRpb25NYXRlcmlhbC51bmlmb3Jtc1snc2l6ZSddLnZhbHVlLnNldCh3aWR0aCwgaGVpZ2h0KVxyXG4gICAgdGhpcy5nZW5lcmF0aW9uTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVTYW1wbGVLZXJuZWwoZnJhbWVJbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBrZXJuZWxTaXplID0gdGhpcy5fb3B0aW9ucy5rZXJuZWxTaXplIHx8IDBcclxuICAgIHRoaXMua2VybmVsc1tmcmFtZUluZGV4XSA9IFtdXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXJuZWxTaXplOyBpKyspIHtcclxuICAgICAgY29uc3Qgc2FtcGxlID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgICBzYW1wbGUueCA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMVxyXG4gICAgICBzYW1wbGUueSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMVxyXG4gICAgICBzYW1wbGUueiA9IE1hdGgucmFuZG9tKClcclxuXHJcbiAgICAgIHNhbXBsZS5ub3JtYWxpemUoKVxyXG5cclxuICAgICAgbGV0IHNjYWxlID0gaSAvIGtlcm5lbFNpemVcclxuICAgICAgc2NhbGUgPSBNYXRoVXRpbHMubGVycCgwLjEsIDEsIHNjYWxlICogc2NhbGUpXHJcbiAgICAgIHNhbXBsZS5tdWx0aXBseVNjYWxhcihzY2FsZSlcclxuXHJcbiAgICAgIHRoaXMua2VybmVsc1tmcmFtZUluZGV4XS5wdXNoKHNhbXBsZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZW5lcmF0ZVJhbmRvbUtlcm5lbFJvdGF0aW9ucyhmcmFtZUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHdpZHRoID0gNCxcclxuICAgICAgaGVpZ2h0ID0gNFxyXG5cclxuICAgIGlmIChTaW1wbGV4Tm9pc2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgcGFzcyByZWxpZXMgb24gU2ltcGxleE5vaXNlLicpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2ltcGxleCA9IG5ldyBTaW1wbGV4Tm9pc2UoKVxyXG5cclxuICAgIGNvbnN0IHNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDRcclxuICAgIGNvbnN0IGRhdGEgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUpXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHtcclxuICAgICAgY29uc3QgeCA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMVxyXG4gICAgICBjb25zdCB5ID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxXHJcbiAgICAgIGNvbnN0IHogPSAwXHJcblxyXG4gICAgICBkYXRhW2ldID0gc2ltcGxleC5ub2lzZTNkKHgsIHksIHopXHJcbiAgICAgIGRhdGFbaSArIDFdID0gMFxyXG4gICAgICBkYXRhW2kgKyAyXSA9IDBcclxuICAgICAgZGF0YVtpICsgM10gPSAwXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub2lzZVRleHR1cmVzW2ZyYW1lSW5kZXhdID0gbmV3IERhdGFUZXh0dXJlKFxyXG4gICAgICBkYXRhLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICBSR0JBRm9ybWF0LFxyXG4gICAgICBGbG9hdFR5cGVcclxuICAgIClcclxuICAgIHRoaXMubm9pc2VUZXh0dXJlc1tmcmFtZUluZGV4XS53cmFwUyA9IFJlcGVhdFdyYXBwaW5nXHJcbiAgICB0aGlzLm5vaXNlVGV4dHVyZXNbZnJhbWVJbmRleF0ud3JhcFQgPSBSZXBlYXRXcmFwcGluZ1xyXG4gICAgdGhpcy5ub2lzZVRleHR1cmVzW2ZyYW1lSW5kZXhdLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxufVxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZUFwcGx5QW9WZXJ0ID0gYFxyXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcclxuXHRcdHZvaWQgbWFpbigpIHtcclxuXHRcdFx0dlV2ID0gdXY7XHJcblx0XHRcdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcclxuXHRcdH1gXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlQXBwbHlBb0ZyYWcgPSBgXHJcblxyXG4gICAgICAgICNpZiBCTEVORF9BTyA9PSAxXHJcblx0XHQgICAgdW5pZm9ybSBzYW1wbGVyMkQgdEFvO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiBCTEVORF9FREdFUyA9PSAxXHJcbiAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHRFZGdlcztcclxuICAgICAgICAjZW5kaWZcclxuXHRcdHZhcnlpbmcgdmVjMiB2VXY7XHJcblxyXG4gICAgICAgICNkZWZpbmUgT05FMyB2ZWMzKDEuLDEuLDEuKVxyXG5cclxuXHRcdHZvaWQgbWFpbigpIHtcclxuICAgICAgICAgICAgdmVjMyBhbyA9IE9ORTM7XHJcbiAgICAgICAgICAgIHZlYzMgZWRnZXMgPSBPTkUzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgI2lmIEJMRU5EX0FPID09IDFcclxuICAgICAgICAgICAgICAgIGFvID0gdGV4dHVyZTJEKCB0QW8sIHZVdiApLnJnYjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgQkxFTkRfRURHRVMgPT0gMVxyXG4gICAgICAgICAgICAgICAgZWRnZXMgPSB0ZXh0dXJlMkQgKHRFZGdlcywgdlV2KS5yZ2I7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaW4oYW8sIGVkZ2VzKTtcclxuXHRcdFx0Z2xfRnJhZ0NvbG9yLmEgPSAxLjtcclxuXHRcdH1gXHJcbiIsImltcG9ydCB7XHJcbiAgQWRkRXF1YXRpb24sXHJcbiAgQ3VzdG9tQmxlbmRpbmcsXHJcbiAgRHN0QWxwaGFGYWN0b3IsXHJcbiAgRHN0Q29sb3JGYWN0b3IsXHJcbiAgTm9CbGVuZGluZyxcclxuICBTaGFkZXJNYXRlcmlhbCxcclxuICBUZXh0dXJlLFxyXG4gIFdlYkdMUmVuZGVyZXIsXHJcbiAgWmVyb0ZhY3RvclxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBGdWxsU2NyZWVuUXVhZCB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9wb3N0cHJvY2Vzc2luZy9QYXNzLmpzJ1xyXG5pbXBvcnQgeyBQYXNzT3B0aW9ucywgUHJvZ3Jlc3NpdmVHUGFzcyB9IGZyb20gJy4vR1Bhc3MuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVBcHBseUFvVmVydCB9IGZyb20gJy4uLy4uL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtYXBwbHktYW8tdmVydC5qcydcclxuaW1wb3J0IHsgc3BlY2tsZUFwcGx5QW9GcmFnIH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1hcHBseS1hby1mcmFnLmpzJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCbGVuZFBhc3NPcHRpb25zIGV4dGVuZHMgUGFzc09wdGlvbnMge1xyXG4gIGJsZW5kQU8/OiBib29sZWFuXHJcbiAgYmxlbmRFZGdlcz86IGJvb2xlYW5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERlZmF1bHRCbGVuZFBhc3NPcHRpb25zOiBSZXF1aXJlZDxCbGVuZFBhc3NPcHRpb25zPiA9IHtcclxuICBibGVuZEFPOiB0cnVlLFxyXG4gIGJsZW5kRWRnZXM6IGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCbGVuZFBhc3MgZXh0ZW5kcyBQcm9ncmVzc2l2ZUdQYXNzIHtcclxuICBwcml2YXRlIGZzUXVhZDogRnVsbFNjcmVlblF1YWRcclxuICBwdWJsaWMgbWF0ZXJpYWxDb3B5OiBTaGFkZXJNYXRlcmlhbFxyXG5cclxuICBwdWJsaWMgX29wdGlvbnM6IFJlcXVpcmVkPEJsZW5kUGFzc09wdGlvbnM+ID0gT2JqZWN0LmFzc2lnbihcclxuICAgIHt9LFxyXG4gICAgRGVmYXVsdEJsZW5kUGFzc09wdGlvbnNcclxuICApXHJcblxyXG4gIHB1YmxpYyBzZXQgb3B0aW9ucyh2YWx1ZTogQmxlbmRQYXNzT3B0aW9ucykge1xyXG4gICAgc3VwZXIub3B0aW9ucyA9IHZhbHVlXHJcbiAgICB0aGlzLm1hdGVyaWFsQ29weS5kZWZpbmVzWydCTEVORF9BTyddID0gK3RoaXMuX29wdGlvbnMuYmxlbmRBT1xyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkuZGVmaW5lc1snQkxFTkRfRURHRVMnXSA9ICt0aGlzLl9vcHRpb25zLmJsZW5kRWRnZXNcclxuICAgIHRoaXMubWF0ZXJpYWxDb3B5Lm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLm1hdGVyaWFsQ29weSA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcbiAgICAgIGRlZmluZXM6IHtcclxuICAgICAgICBCTEVORF9BTzogK3RoaXMuX29wdGlvbnMuYmxlbmRBTyxcclxuICAgICAgICBCTEVORF9FREdFUzogK3RoaXMuX29wdGlvbnMuYmxlbmRFZGdlc1xyXG4gICAgICB9LFxyXG4gICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgIHRBbzogeyB2YWx1ZTogbnVsbCB9LFxyXG4gICAgICAgIHRFZGdlczogeyB2YWx1ZTogbnVsbCB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHZlcnRleFNoYWRlcjogc3BlY2tsZUFwcGx5QW9WZXJ0LFxyXG4gICAgICBmcmFnbWVudFNoYWRlcjogc3BlY2tsZUFwcGx5QW9GcmFnLFxyXG4gICAgICBibGVuZGluZzogTm9CbGVuZGluZ1xyXG4gICAgfSlcclxuICAgIHRoaXMubWF0ZXJpYWxDb3B5LnRyYW5zcGFyZW50ID0gdHJ1ZVxyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkuZGVwdGhUZXN0ID0gZmFsc2VcclxuICAgIHRoaXMubWF0ZXJpYWxDb3B5LmRlcHRoV3JpdGUgPSBmYWxzZVxyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkuYmxlbmRpbmcgPSBDdXN0b21CbGVuZGluZ1xyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkuYmxlbmRTcmMgPSBEc3RDb2xvckZhY3RvclxyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkuYmxlbmREc3QgPSBaZXJvRmFjdG9yXHJcbiAgICB0aGlzLm1hdGVyaWFsQ29weS5ibGVuZEVxdWF0aW9uID0gQWRkRXF1YXRpb25cclxuICAgIHRoaXMubWF0ZXJpYWxDb3B5LmJsZW5kU3JjQWxwaGEgPSBEc3RBbHBoYUZhY3RvclxyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkuYmxlbmREc3RBbHBoYSA9IFplcm9GYWN0b3JcclxuICAgIHRoaXMubWF0ZXJpYWxDb3B5LmJsZW5kRXF1YXRpb25BbHBoYSA9IEFkZEVxdWF0aW9uXHJcblxyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB0aGlzLmZzUXVhZCA9IG5ldyBGdWxsU2NyZWVuUXVhZCh0aGlzLm1hdGVyaWFsQ29weSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUZXh0dXJlKHVOYW1lOiBzdHJpbmcsIHRleHR1cmU6IFRleHR1cmUgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMubWF0ZXJpYWxDb3B5LnVuaWZvcm1zW3VOYW1lXS52YWx1ZSA9IHRleHR1cmVcclxuICAgIHRoaXMubWF0ZXJpYWxDb3B5Lm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ0JMRU5EJ1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcihyZW5kZXJlcjogV2ViR0xSZW5kZXJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMuX291dHB1dFRhcmdldClcclxuICAgIHRoaXMuZnNRdWFkLnJlbmRlcihyZW5kZXJlcilcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucmVuZGVyKHJlbmRlcmVyKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBPcnRob2dyYXBoaWNDYW1lcmEsIFBlcnNwZWN0aXZlQ2FtZXJhLCBQbGFuZSB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBHUGFzcywgUHJvZ3Jlc3NpdmVHUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9HUGFzcy5qcydcclxuaW1wb3J0IHsgUGlwZWxpbmUgfSBmcm9tICcuL1BpcGVsaW5lLmpzJ1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb2dyZXNzaXZlUGlwZWxpbmUgZXh0ZW5kcyBQaXBlbGluZSB7XHJcbiAgcHJvdGVjdGVkIGFjY3VtdWxhdGlvbkZyYW1lSW5kZXg6IG51bWJlciA9IDBcclxuICBwcm90ZWN0ZWQgYWNjdW11bGF0aW9uRnJhbWVDb3VudDogbnVtYmVyID0gMTZcclxuICBwcm90ZWN0ZWQgZHluYW1pY1N0YWdlOiBBcnJheTxHUGFzcz4gPSBbXVxyXG4gIHByb3RlY3RlZCBwcm9ncmVzc2l2ZVN0YWdlOiBBcnJheTxHUGFzcz4gPSBbXVxyXG4gIHByb3RlY3RlZCBwYXNzdGhyb3VnaFN0YWdlOiBBcnJheTxHUGFzcz4gPSBbXVxyXG4gIHByb3RlY3RlZCBhY2N1bXVsYXRpbmcgPSBmYWxzZVxyXG5cclxuICBwdWJsaWMgZ2V0IHBhc3NlcygpOiBBcnJheTxHUGFzcz4ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmR5bmFtaWNTdGFnZSwgLi4udGhpcy5wcm9ncmVzc2l2ZVN0YWdlLCAuLi50aGlzLnBhc3N0aHJvdWdoU3RhZ2VdXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGR5bmFtaWNQYXNzZXMoKTogQXJyYXk8R1Bhc3M+IHtcclxuICAgIHJldHVybiBbLi4udGhpcy5keW5hbWljU3RhZ2VdXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHByb2dyZXNzaXZlUGFzc2VzKCk6IEFycmF5PEdQYXNzPiB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMucHJvZ3Jlc3NpdmVTdGFnZV1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcGFzc3Rocm91Z2hQYXNzZXMoKTogQXJyYXk8R1Bhc3M+IHtcclxuICAgIHJldHVybiBbLi4udGhpcy5wYXNzdGhyb3VnaFN0YWdlXVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBhc3MobmFtZTogc3RyaW5nKTogR1Bhc3NbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAuLi50aGlzLmR5bmFtaWNTdGFnZS5maWx0ZXIoKHBhc3M6IEdQYXNzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHBhc3MuZGlzcGxheU5hbWUgPT09IG5hbWVcclxuICAgICAgfSksXHJcbiAgICAgIC4uLnRoaXMucHJvZ3Jlc3NpdmVTdGFnZS5maWx0ZXIoKHBhc3M6IEdQYXNzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHBhc3MuZGlzcGxheU5hbWUgPT09IG5hbWVcclxuICAgICAgfSksXHJcbiAgICAgIC4uLnRoaXMucGFzc3Rocm91Z2hTdGFnZS5maWx0ZXIoKHBhc3M6IEdQYXNzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHBhc3MuZGlzcGxheU5hbWUgPT09IG5hbWVcclxuICAgICAgfSlcclxuICAgIF1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDbGlwcGluZ1BsYW5lcyhwbGFuZXM6IFBsYW5lW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZHluYW1pY1N0YWdlLmZvckVhY2goKHBhc3M6IEdQYXNzKSA9PiBwYXNzLnNldENsaXBwaW5nUGxhbmVzPy4ocGxhbmVzKSlcclxuICAgIHRoaXMucHJvZ3Jlc3NpdmVTdGFnZS5mb3JFYWNoKChwYXNzOiBHUGFzcykgPT4gcGFzcy5zZXRDbGlwcGluZ1BsYW5lcz8uKHBsYW5lcykpXHJcbiAgICB0aGlzLnBhc3N0aHJvdWdoU3RhZ2UuZm9yRWFjaCgocGFzczogR1Bhc3MpID0+IHBhc3Muc2V0Q2xpcHBpbmdQbGFuZXM/LihwbGFuZXMpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZShjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhc3NMaXN0LmZvckVhY2goKHBhc3M6IEdQYXNzKSA9PiB7XHJcbiAgICAgIHBhc3MuZW5hYmxlZCAmJiBwYXNzLnVwZGF0ZT8uKGNhbWVyYSlcclxuICAgICAgaWYgKHBhc3MgaW5zdGFuY2VvZiBQcm9ncmVzc2l2ZUdQYXNzKSB7XHJcbiAgICAgICAgcGFzcy5mcmFtZUluZGV4ID0gdGhpcy5hY2N1bXVsYXRpb25GcmFtZUluZGV4XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmV0ID0gc3VwZXIucmVuZGVyKClcclxuXHJcbiAgICBpZiAodGhpcy5hY2N1bXVsYXRpbmcpIHtcclxuICAgICAgaWYgKCsrdGhpcy5hY2N1bXVsYXRpb25GcmFtZUluZGV4ID09PSB0aGlzLmFjY3VtdWxhdGlvbkZyYW1lQ291bnQpXHJcbiAgICAgICAgdGhpcy5vbkFjY3VtdWxhdGlvbkNvbXBsZXRlKClcclxuICAgIH1cclxuICAgIHJldHVybiByZXRcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpIHtcclxuICAgIHN1cGVyLnJlc2V0KClcclxuICAgIHRoaXMuYWNjdW11bGF0aW9uRnJhbWVJbmRleCA9IDBcclxuICAgIHRoaXMub25TdGF0aW9uYXJ5QmVnaW4oKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgc3VwZXIucmVzaXplKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB0aGlzLmR5bmFtaWNTdGFnZS5mb3JFYWNoKChwYXNzOiBHUGFzcykgPT4gcGFzcy5zZXRTaXplPy4od2lkdGgsIGhlaWdodCkpXHJcbiAgICB0aGlzLnByb2dyZXNzaXZlU3RhZ2UuZm9yRWFjaCgocGFzczogR1Bhc3MpID0+IHBhc3Muc2V0U2l6ZT8uKHdpZHRoLCBoZWlnaHQpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU3RhdGlvbmFyeUJlZ2luKCkge1xyXG4gICAgdGhpcy5hY2N1bXVsYXRpb25GcmFtZUluZGV4ID0gMFxyXG4gICAgdGhpcy5hY2N1bXVsYXRpbmcgPSB0cnVlXHJcbiAgICB0aGlzLnBhc3NMaXN0ID0gdGhpcy5wcm9ncmVzc2l2ZVN0YWdlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TdGF0aW9uYXJ5RW5kKCkge1xyXG4gICAgdGhpcy5hY2N1bXVsYXRpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy5wYXNzTGlzdCA9IHRoaXMuZHluYW1pY1N0YWdlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25BY2N1bXVsYXRpb25Db21wbGV0ZSgpIHtcclxuICAgIHRoaXMuYWNjdW11bGF0aW5nID0gZmFsc2VcclxuICAgIHRoaXMucGFzc0xpc3QgPSB0aGlzLnBhc3N0aHJvdWdoU3RhZ2VcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVEaXNwbGFjZVZlcnQgPSAvKiBnbHNsICovIGBcclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2lmZGVmIFVTRV9SVEVcclxuICAgIC8vIFRoZSBoaWdoIGNvbXBvbmVudCBpcyBzdG9yZWQgYXMgdGhlIGRlZmF1bHQgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgYnVmZmVyXHJcbiAgICBhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbl9sb3c7XHJcbiAgICB1bmlmb3JtIHZlYzMgdVZpZXdlcl9oaWdoO1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfbG93O1xyXG4jZW5kaWZcclxudW5pZm9ybSB2ZWMyIHNpemU7XHJcbnVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50O1xyXG5cclxuI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICBhdHRyaWJ1dGUgZmxvYXQgb2JqSW5kZXg7XHJcblxyXG4gICAgI2lmIFRSQU5TRk9STV9TVE9SQUdFID09IDBcclxuICAgICAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgICAgICNkZWZpbmUgVFJBTlNGT1JNX1NUUklERSA0XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgI2RlZmluZSBUUkFOU0ZPUk1fU1RSSURFIDQuXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdFRyYW5zZm9ybXM7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBvYmpDb3VudDtcclxuICAgICNlbGlmIFRSQU5TRk9STV9TVE9SQUdFID09IDFcclxuICAgICAgICB1bmlmb3JtIG1hdDQgdVRyYW5zZm9ybXNbT0JKX0NPVU5UXTtcclxuICAgICNlbmRpZlxyXG4jZW5kaWZcclxuXHJcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxyXG5cclxuI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICB2b2lkIG9iamVjdFRyYW5zZm9ybShvdXQgdmVjNCBxdWF0ZXJuaW9uLCBvdXQgdmVjNCBwaXZvdExvdywgb3V0IHZlYzQgcGl2b3RIaWdoLCBvdXQgdmVjNCB0cmFuc2xhdGlvbiwgb3V0IHZlYzQgc2NhbGUpe1xyXG4gICAgICAgICNpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAwXHJcbiAgICAgICAgICAgICNpZiBfX1ZFUlNJT05fXyA9PSAzMDBcclxuICAgICAgICAgICAgICAgIGl2ZWMyIHV2ID0gaXZlYzIoaW50KG9iakluZGV4KSAqIFRSQU5TRk9STV9TVFJJREUsIDApOyBcclxuICAgICAgICAgICAgICAgIHZlYzQgdjAgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYsIDAgKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjEgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigxLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYyID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMiwgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MyA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDMsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHF1YXRlcm5pb24gPSB2MDtcclxuICAgICAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh2MS54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodjIueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodjMueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBzY2FsZSA9IHZlYzQodjEudywgdjIudywgdjMudywgMS4pO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IG9iakNvdW50ICogVFJBTlNGT1JNX1NUUklERTtcclxuICAgICAgICAgICAgICAgIHZlYzIgY1V2ID0gdmVjMigwLjUvc2l6ZSwgMC41KTtcclxuICAgICAgICAgICAgICAgIHZlYzIgZFV2ID0gdmVjMigxLi9zaXplLCAwLik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHZlYzIgdXYgPSB2ZWMyKChvYmpJbmRleCAqIFRSQU5TRk9STV9TVFJJREUpL3NpemUgKyBjVXYueCwgY1V2LnkpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MCA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjEgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIGRVdik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYyID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyAyLiAqIGRVdik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYzID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyAzLiAqIGRVdik7XHJcbiAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uID0gdjA7XHJcbiAgICAgICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodjEueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHYyLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHYzLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHYxLncsIHYyLncsIHYzLncsIDEuKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VsaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMVxyXG4gICAgICAgICAgICBtYXQ0IHRNYXRyaXggPSB1VHJhbnNmb3Jtc1tpbnQob2JqSW5kZXgpXTtcclxuICAgICAgICAgICAgcXVhdGVybmlvbiA9IHRNYXRyaXhbMF07XHJcbiAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh0TWF0cml4WzFdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHRNYXRyaXhbMl0ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh0TWF0cml4WzNdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICBzY2FsZSA9IHZlYzQodE1hdHJpeFsxXVszXSwgdE1hdHJpeFsyXVszXSwgdE1hdHJpeFszXVszXSwgMS4pO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgfVxyXG5cclxuICAgIHZlYzMgcm90YXRlX3ZlcnRleF9wb3NpdGlvbih2ZWMzIHBvc2l0aW9uLCB2ZWM0IHF1YXQpXHJcbiAgICB7IFxyXG4gICAgICAgIHJldHVybiBwb3NpdGlvbiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24pICsgcXVhdC53ICogcG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbm90aGVyIHdvcmthcm91bmQgZm9yIEFwcGxlJ3Mgc3R1cGlkIGNvbXBpbGVyICovXHJcbiAgICB2ZWM0IHNhZmVNdWwodmVjNCBhLCB2ZWM0IGIpIHtcclxuICAgICAgICAvLyBQcmV2ZW50cyBjb25zdGFudCBmb2xkaW5nIGFuZCBvcHRpbWl6YXRpb25cclxuICAgICAgICByZXR1cm4gKGEgKyB2ZWM0KDAuMCkpICogKGIgKyB2ZWM0KDEuMCkpIC0gYSAqIHZlYzQoMS4wKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWdocCB2ZWMzIHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKGhpZ2hwIHZlYzQgdjAsIGhpZ2hwIHZlYzQgdjEsIGhpZ2hwIHZlYzQgc2NhbGUsIGhpZ2hwIHZlYzQgcXVhdClcclxuICAgIHtcclxuICAgICAgICAvKiogISEhIFdPUktBUk9VTkQgRk9SIEludGVsIElyaXNYZSBDQVJEUyAhISEgKi9cclxuICAgICAgICAvKiogVGhlIGNvZGUgYmVsb3cgd2lsbCBub3QgcHJvZHVjZSBjb3JyZWN0IHJlc3VsdHMgaW4gaW50ZWwgSXJpc1hFIGludGVncmF0ZWQgR1BVcy4gXHJcbiAgICAgICAgICogIFRoZSBnZW9tZXRyeSB3aWxsIHR1cm4gbWFuZ2xlZCwgYWxiZWl0IHN0YWJsZVxyXG4gICAgICAgICAqICBJIGNhbid0IGtub3cgZm9yIHN1cmUgd2hhdCBpcyBnb2luZyBvbiwgYnV0IHJvdGF0aW5nIHRoZSBkaWZmZXJlbmNlIHNlZW1zIHRvIFxyXG4gICAgICAgICAqICBmb3JjZSB0aGUgcmVzdWx0IGludG8gYSBsb3dlciBwcmVjaXNpb24/XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gaGlnaHAgdmVjNCBwb3NpdGlvbiA9IHYwIC0gdjE7XHJcbiAgICAgICAgLy8gcmV0dXJuIHBvc2l0aW9uLnh5eiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24ueHl6KSArIHF1YXQudyAqIHBvc2l0aW9uLnh5eik7XHJcblxyXG4gICAgICAgIC8qKiBTdWJ0cmFjdGluZyB0aGUgcm90YXRlZCB2ZWN0b3JzIHdvcmtzLiAqL1xyXG4gICAgICAgIHJldHVybiByb3RhdGVfdmVydGV4X3Bvc2l0aW9uKHNhZmVNdWwodjAsIHNjYWxlKS54eXosIHF1YXQpICAtIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24oc2FmZU11bCh2MSwgc2NhbGUpLnh5eiwgcXVhdCkgO1xyXG5cclxuICAgICAgICAvKiogQW4gYWx0ZXJuYXRlIHdvcmthcm91bmQgaXNcclxuICAgICAgICAgKiBoaWdocCB2ZWMzIHBvc2l0aW9uID0gKHYwLnh5eiAqICgxLiArIDFlLTcpKSAtICh2MS54eXogKiAoMS4gKyAxZS03KSk7XHJcbiAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbikgKyBxdWF0LncgKiBwb3NpdGlvbik7XHJcblxyXG4gICAgICAgICAgIEhvd2V2ZXIgSSdtIG5vdCBzdWNoIGEgZmFuIG9mIHRoZSAoMS4gKyAxZS03KSBwYXJ0XHJcbiAgICAgICAgICovXHJcbiAgICB9XHJcbiAgICBcclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVVNFX1JURVxyXG4gICAgaGlnaHAgdmVjNCBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2xvdywgaW4gaGlnaHAgdmVjMyBwb3NpdGlvbl9oaWdoLCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9fbG93LCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9faGlnaCl7XHJcbiAgICAgICAgLyogXHJcbiAgICAgICAgU291cmNlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXJ0dWFsZ2xvYmVib29rL09wZW5HbG9iZS9ibG9iL21hc3Rlci9Tb3VyY2UvRXhhbXBsZXMvQ2hhcHRlcjA1L0ppdHRlci9HUFVSZWxhdGl2ZVRvRXllRFNGVU45MC9TaGFkZXJzL1ZTLmdsc2wgXHJcbiAgICAgICAgTm90ZSBoZXJlLCB3ZSdyZSBzdG9yaW5nIHRoZSBoaWdoIHBhcnQgb2YgdGhlIHBvc2l0aW9uIGVuY29kaW5nIGluc2lkZSB0aHJlZSdzIGRlZmF1bHQgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgYnVmZmVyIHNvIHdlIGF2b2lkIHJlZHVuZGFuY3kgXHJcbiAgICAgICAgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQxID0gcG9zaXRpb25fbG93Lnh5eiAtIHJlbGF0aXZlVG9fbG93Lnh5ejtcclxuICAgICAgICBoaWdocCB2ZWMzIGUgPSB0MSAtIHBvc2l0aW9uX2xvdy54eXo7XHJcbiAgICAgICAgLyoqIFRoaXMgaXMgcmVkdW5hbnQsIGJ1dCBuZWNlc3NhcnkgYXMgYSB3b3JrYXJvdW5kIGZvciBBcHBsZSBwbGF0Zm9ybXMgKi9cclxuICAgICAgICBoaWdocCBmbG9hdCB4ID0gcG9zaXRpb25faGlnaC54IC0gcmVsYXRpdmVUb19oaWdoLng7XHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeSA9IHBvc2l0aW9uX2hpZ2gueSAtIHJlbGF0aXZlVG9faGlnaC55O1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHogPSBwb3NpdGlvbl9oaWdoLnogLSByZWxhdGl2ZVRvX2hpZ2guejtcclxuICAgICAgICBoaWdocCB2ZWMzIHYgPSB2ZWMzKHgsIHksIHopO1xyXG4gICAgICAgIC8qKiBFbmQgb2YgcmVkdW5kYW50IHBhcnQgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQyID0gKCgtcmVsYXRpdmVUb19sb3cgLSBlKSArIChwb3NpdGlvbl9sb3cueHl6IC0gKHQxIC0gZSkpKSArIHY7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBoaWdoRGlmZmVyZW5jZSA9IHQxICsgdDI7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBsb3dEaWZmZXJlbmNlID0gdDIgLSAoaGlnaERpZmZlcmVuY2UueHl6IC0gdDEueHl6KTtcclxuICAgICAgICBcclxuICAgICAgICBoaWdocCB2ZWMzIHBvc2l0aW9uID0gaGlnaERpZmZlcmVuY2UueHl6ICsgbG93RGlmZmVyZW5jZS54eXo7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQocG9zaXRpb24sIDEuKTtcclxuICAgIH1cclxuI2VuZGlmXHJcblxyXG52b2lkIG1haW4oKSB7XHJcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxtb3JwaGNvbG9yX3ZlcnRleD5cclxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcclxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XHJcblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxyXG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cclxuXHRcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cclxuICAgICAgICAvLyAjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+IC8vIENPTU1FTlRFRCBDSFVOS1xyXG4gICAgICAgIHZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XHJcbiAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcblxyXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGluIGxpZXUgb2YgYSBwZXItaW5zdGFuY2Ugbm9ybWFsLW1hdHJpeFxyXG4gICAgICAgICAgICAvLyBzaGVhciB0cmFuc2Zvcm1zIGluIHRoZSBpbnN0YW5jZSBtYXRyaXggYXJlIG5vdCBzdXBwb3J0ZWRcclxuICAgICAgICAgICAgbWF0MyBtID0gbWF0MyggaW5zdGFuY2VNYXRyaXggKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgbmVnYXRpdmUgc2NhbGluZywgd2UgZmxpcCB0aGUgbm9ybWFsICovXHJcbiAgICAgICAgICAgIGZsb2F0IHNpZ25EZXQgPSBzaWduKGRvdChtWzBdLCBjcm9zcyhtWzFdLCBtWzJdKSkpO1xyXG4gICAgICAgICAgICAvLyBPcHRpb25hbCBmYWxsYmFjazogdHJlYXQgMCBhcyArMVxyXG4gICAgICAgICAgICBzaWduRGV0ID0gc2lnbkRldCArICgxLjAgLSBhYnMoc2lnbkRldCkpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCAqPSBzaWduRGV0O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAgICAgI2lmZGVmIEZMSVBfU0lERURcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZmRlZiBVU0VfVEFOR0VOVFxyXG4gICAgICAgICAgICB2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XHJcbiAgICAgICAgICAgICNpZmRlZiBGTElQX1NJREVEXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcblx0I2VuZGlmXHJcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XHJcblx0Ly8gI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PiBDT01NRU5URUQgQ0hVTktcclxuICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgIHZlYzQgdFF1YXRlcm5pb24sIHRQaXZvdExvdywgdFBpdm90SGlnaCwgdFRyYW5zbGF0aW9uLCB0U2NhbGU7XHJcbiAgICAgICAgb2JqZWN0VHJhbnNmb3JtKHRRdWF0ZXJuaW9uLCB0UGl2b3RMb3csIHRQaXZvdEhpZ2gsIHRUcmFuc2xhdGlvbiwgdFNjYWxlKTtcclxuICAgICNlbmRpZlxyXG4gICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICB2ZWM0IHBvc2l0aW9uX2xvd1QgPSB2ZWM0KHBvc2l0aW9uX2xvdywgMS4pO1xyXG4gICAgICAgIHZlYzQgcG9zaXRpb25faGlnaFQgPSB2ZWM0KHBvc2l0aW9uLCAxLik7XHJcbiAgICAgICAgY29uc3QgdmVjMyBaRVJPMyA9IHZlYzMoMC4sIDAuLCAwLik7XHJcblxyXG4gICAgICAgIGhpZ2hwIHZlYzQgcnRlTG9jYWxQb3NpdGlvbiA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHBvc2l0aW9uX2xvd1QueHl6LCBwb3NpdGlvbl9oaWdoVC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICBoaWdocCB2ZWM0IHJ0ZVBpdm90ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24odFBpdm90TG93Lnh5eiwgdFBpdm90SGlnaC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICBydGVMb2NhbFBvc2l0aW9uLnh5eiA9IHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKHJ0ZUxvY2FsUG9zaXRpb24sIHJ0ZVBpdm90LCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHJ0ZVBpdm90Lnh5eiArIHRUcmFuc2xhdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcbiAgICAgICAgICAgIHZlYzQgaW5zdGFuY2VQaXZvdCA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKFpFUk8zLCBaRVJPMywgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgIHJ0ZUxvY2FsUG9zaXRpb24ueHl6ID0gKG1hdDMoaW5zdGFuY2VNYXRyaXgpICogKHJ0ZUxvY2FsUG9zaXRpb24gLSBpbnN0YW5jZVBpdm90KS54eXopICsgaW5zdGFuY2VQaXZvdC54eXogKyBpbnN0YW5jZU1hdHJpeFszXS54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHJ0ZUxvY2FsUG9zaXRpb247XHJcbiAgICAjZWxzZVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcclxuICAgICAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICAgICAgbXZQb3NpdGlvbi54eXogPSByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShtdlBvc2l0aW9uLCB0UGl2b3RIaWdoLCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHRQaXZvdEhpZ2gueHl6ICsgdFRyYW5zbGF0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuICAgICAgICAgICAgbXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG4gICAgXHJcbiAgICBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcclxuXHJcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgXHJcbiAgICAvLyBUcmFuc2Zvcm0gbm9ybWFsIHZlY3RvciBmcm9tIG9iamVjdCBzcGFjZSB0byBjbGlwIHNwYWNlLlxyXG4gICAgdmVjMyBub3JtYWxIQ1MgPSBtYXQzKHByb2plY3Rpb25NYXRyaXgpICogbm9ybWFsTWF0cml4ICogbm9ybWFsO1xyXG5cclxuICAgIC8vIE1vdmUgdmVydGV4IGFsb25nIG5vcm1hbCB2ZWN0b3IgaW4gY2xpcCBzcGFjZS5cclxuICAgIGdsX1Bvc2l0aW9uLnh5ICs9IG5vcm1hbGl6ZShub3JtYWxIQ1MueHkpIC8gc2l6ZSAqIGdsX1Bvc2l0aW9uLncgKiBkaXNwbGFjZW1lbnQgKiAyLjtcclxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XHJcbn1cclxuYFxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZURpc3BsYWNlRnJhZyA9IC8qIGdsc2wgKi8gYFxyXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcclxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xyXG4jaWZuZGVmIEZMQVRfU0hBREVEXHJcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XHJcbiNlbmRpZlxyXG4jaW5jbHVkZSA8Y29tbW9uPlxyXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxyXG52b2lkIG1haW4oKSB7XHJcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cclxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcclxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxyXG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XHJcblx0Ly8gYWNjdW11bGF0aW9uIChiYWtlZCBpbmRpcmVjdCBsaWdodGluZyBvbmx5KVxyXG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcclxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcclxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5ICogUkVDSVBST0NBTF9QSTtcclxuXHQjZWxzZVxyXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZlYzMoIDEuMCApO1xyXG5cdCNlbmRpZlxyXG5cdC8vIG1vZHVsYXRpb25cclxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XHJcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7XHJcblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xyXG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XHJcbn1cclxuYFxyXG4iLCJpbXBvcnQgeyBzcGVja2xlRGlzcGxhY2VWZXJ0IH0gZnJvbSAnLi9zaGFkZXJzL3NwZWNrbGUtZGlzcGxhY2UudmVydC5qcydcclxuaW1wb3J0IHsgc3BlY2tsZURpc3BsYWNlRnJhZyB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLWRpc3BsYWNlLWZyYWcuanMnXHJcbmltcG9ydCB7IE1hdGVyaWFsLCBWZWN0b3IyLCB0eXBlIE1lc2hCYXNpY01hdGVyaWFsUGFyYW1ldGVycyB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgU3BlY2tsZUJhc2ljTWF0ZXJpYWwgZnJvbSAnLi9TcGVja2xlQmFzaWNNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgdHlwZSBVbmlmb3JtcyB9IGZyb20gJy4vU3BlY2tsZU1hdGVyaWFsLmpzJ1xyXG5cclxuY2xhc3MgU3BlY2tsZURpc3BsYWNlTWF0ZXJpYWwgZXh0ZW5kcyBTcGVja2xlQmFzaWNNYXRlcmlhbCB7XHJcbiAgcHJvdGVjdGVkIGdldCB2ZXJ0ZXhQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZURpc3BsYWNlVmVydFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBmcmFnbWVudFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlRGlzcGxhY2VGcmFnXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IHVuaWZvcm1zRGVmKCk6IFVuaWZvcm1zIHtcclxuICAgIHJldHVybiB7IC4uLnN1cGVyLnVuaWZvcm1zRGVmLCBzaXplOiBuZXcgVmVjdG9yMigpLCBkaXNwbGFjZW1lbnQ6IDAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocGFyYW1ldGVyczogTWVzaEJhc2ljTWF0ZXJpYWxQYXJhbWV0ZXJzLCBkZWZpbmVzOiBzdHJpbmdbXSA9IFtdKSB7XHJcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBkZWZpbmVzKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZhc3RDb3B5KGZyb206IE1hdGVyaWFsLCB0bzogTWF0ZXJpYWwpIHtcclxuICAgIHN1cGVyLmZhc3RDb3B5KGZyb20sIHRvKVxyXG4gICAgdG8udXNlckRhdGEuZGlzcGxhY2VtZW50LnZhbHVlID0gZnJvbS51c2VyRGF0YS5kaXNwbGFjZW1lbnQudmFsdWVcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwZWNrbGVEaXNwbGFjZU1hdGVyaWFsXHJcbiIsImltcG9ydCB7XHJcbiAgQWx3YXlzU3RlbmNpbEZ1bmMsXHJcbiAgRG91YmxlU2lkZSxcclxuICBNYXRlcmlhbCxcclxuICBSZXBsYWNlU3RlbmNpbE9wLFxyXG4gIFZlY3RvcjJcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IFNwZWNrbGVEaXNwbGFjZU1hdGVyaWFsIGZyb20gJy4uLy4uL21hdGVyaWFscy9TcGVja2xlRGlzcGxhY2VNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnlQYXNzIH0gZnJvbSAnLi9HZW9tZXRyeVBhc3MuanMnXHJcblxyXG5leHBvcnQgY2xhc3MgU3RlbmNpbFBhc3MgZXh0ZW5kcyBHZW9tZXRyeVBhc3Mge1xyXG4gIHByaXZhdGUgc3RlbmNpbE1hdGVyaWFsOiBTcGVja2xlRGlzcGxhY2VNYXRlcmlhbFxyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLnN0ZW5jaWxNYXRlcmlhbCA9IG5ldyBTcGVja2xlRGlzcGxhY2VNYXRlcmlhbCh7IGNvbG9yOiAweGZmMDAwMCB9KVxyXG4gICAgdGhpcy5zdGVuY2lsTWF0ZXJpYWwudXNlckRhdGEuZGlzcGxhY2VtZW50LnZhbHVlID0gMlxyXG4gICAgdGhpcy5zdGVuY2lsTWF0ZXJpYWwuY29sb3JXcml0ZSA9IGZhbHNlXHJcbiAgICB0aGlzLnN0ZW5jaWxNYXRlcmlhbC5kZXB0aFdyaXRlID0gZmFsc2VcclxuICAgIHRoaXMuc3RlbmNpbE1hdGVyaWFsLnN0ZW5jaWxXcml0ZSA9IHRydWVcclxuICAgIHRoaXMuc3RlbmNpbE1hdGVyaWFsLnN0ZW5jaWxGdW5jID0gQWx3YXlzU3RlbmNpbEZ1bmNcclxuICAgIHRoaXMuc3RlbmNpbE1hdGVyaWFsLnN0ZW5jaWxXcml0ZU1hc2sgPSAweGZmXHJcbiAgICB0aGlzLnN0ZW5jaWxNYXRlcmlhbC5zdGVuY2lsUmVmID0gMHhmZlxyXG4gICAgdGhpcy5zdGVuY2lsTWF0ZXJpYWwuc3RlbmNpbFpGYWlsID0gUmVwbGFjZVN0ZW5jaWxPcFxyXG4gICAgdGhpcy5zdGVuY2lsTWF0ZXJpYWwuc3RlbmNpbFpQYXNzID0gUmVwbGFjZVN0ZW5jaWxPcFxyXG4gICAgdGhpcy5zdGVuY2lsTWF0ZXJpYWwuc3RlbmNpbEZhaWwgPSBSZXBsYWNlU3RlbmNpbE9wXHJcbiAgICB0aGlzLnN0ZW5jaWxNYXRlcmlhbC5zaWRlID0gRG91YmxlU2lkZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdTVEVOQ0lMJ1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvdmVycmlkZU1hdGVyaWFsKCk6IE1hdGVyaWFsIHtcclxuICAgIHJldHVybiB0aGlzLnN0ZW5jaWxNYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIHN1cGVyLnNldFNpemUod2lkdGgsIGhlaWdodClcclxuXHJcbiAgICB0aGlzLnN0ZW5jaWxNYXRlcmlhbC51c2VyRGF0YS5zaXplLnZhbHVlLmNvcHkobmV3IFZlY3RvcjIod2lkdGgsIGhlaWdodCkpXHJcbiAgICB0aGlzLnN0ZW5jaWxNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgRG91YmxlU2lkZSwgRXF1YWxTdGVuY2lsRnVuYywgTWF0ZXJpYWwsIFZlY3RvcjIgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IFNwZWNrbGVEaXNwbGFjZU1hdGVyaWFsIGZyb20gJy4uLy4uL21hdGVyaWFscy9TcGVja2xlRGlzcGxhY2VNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnlQYXNzIH0gZnJvbSAnLi9HZW9tZXRyeVBhc3MuanMnXHJcblxyXG5leHBvcnQgY2xhc3MgU3RlbmNpbE1hc2tQYXNzIGV4dGVuZHMgR2VvbWV0cnlQYXNzIHtcclxuICBwcml2YXRlIHN0ZW5jaWxNYXNrTWF0ZXJpYWw6IFNwZWNrbGVEaXNwbGFjZU1hdGVyaWFsXHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuc3RlbmNpbE1hc2tNYXRlcmlhbCA9IG5ldyBTcGVja2xlRGlzcGxhY2VNYXRlcmlhbCh7IGNvbG9yOiAweDA0YTVmYiB9KVxyXG4gICAgdGhpcy5zdGVuY2lsTWFza01hdGVyaWFsLnVzZXJEYXRhLmRpc3BsYWNlbWVudC52YWx1ZSA9IDJcclxuICAgIHRoaXMuc3RlbmNpbE1hc2tNYXRlcmlhbC5jb2xvcldyaXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5zdGVuY2lsTWFza01hdGVyaWFsLmRlcHRoV3JpdGUgPSBmYWxzZVxyXG4gICAgdGhpcy5zdGVuY2lsTWFza01hdGVyaWFsLnN0ZW5jaWxXcml0ZSA9IHRydWVcclxuICAgIHRoaXMuc3RlbmNpbE1hc2tNYXRlcmlhbC5zdGVuY2lsRnVuYyA9IEVxdWFsU3RlbmNpbEZ1bmNcclxuICAgIHRoaXMuc3RlbmNpbE1hc2tNYXRlcmlhbC5zdGVuY2lsUmVmID0gMHhmZlxyXG4gICAgdGhpcy5zdGVuY2lsTWFza01hdGVyaWFsLnNpZGUgPSBEb3VibGVTaWRlXHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnU1RFTkNJTC1NQVNLJ1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvdmVycmlkZU1hdGVyaWFsKCk6IE1hdGVyaWFsIHtcclxuICAgIHJldHVybiB0aGlzLnN0ZW5jaWxNYXNrTWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICBzdXBlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpXHJcblxyXG4gICAgdGhpcy5zdGVuY2lsTWFza01hdGVyaWFsLnVzZXJEYXRhLnNpemUudmFsdWUuY29weShuZXcgVmVjdG9yMih3aWR0aCwgaGVpZ2h0KSlcclxuICAgIHRoaXMuc3RlbmNpbE1hc2tNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVFZGdlc0dlbmVyYXRvckZyYWcgPSAvKiBnbHNsICovIGBcclxuI2luY2x1ZGUgPGNvbW1vbj5cclxudmFyeWluZyB2ZWMyIHZVdjtcclxudW5pZm9ybSBzYW1wbGVyMkQgdERlcHRoO1xyXG51bmlmb3JtIHNhbXBsZXIyRCB0Tm9ybWFsO1xyXG51bmlmb3JtIHNhbXBsZXIyRCB0SWQ7XHJcbnVuaWZvcm0gZmxvYXQgdURlcHRoTXVsdGlwbGllcjtcclxudW5pZm9ybSBmbG9hdCB1RGVwdGhCaWFzO1xyXG51bmlmb3JtIGZsb2F0IHVOb3JtYWxNdWx0aXBsaWVyO1xyXG51bmlmb3JtIGZsb2F0IHVOb3JtYWxCaWFzO1xyXG51bmlmb3JtIGZsb2F0IHVPdXRsaW5lVGhpY2tuZXNzO1xyXG51bmlmb3JtIGZsb2F0IHVPdXRsaW5lRGVuc2l0eTtcclxudW5pZm9ybSB2ZWMzIHVPdXRsaW5lQ29sb3I7XHJcbnVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yO1xyXG51bmlmb3JtIHZlYzIgc2l6ZTtcclxuXHJcbnVuaWZvcm0gZmxvYXQgY2FtZXJhTmVhcjtcclxudW5pZm9ybSBmbG9hdCBjYW1lcmFGYXI7XHJcbnVuaWZvcm0gbWF0NCBjYW1lcmFQcm9qZWN0aW9uTWF0cml4O1xyXG51bmlmb3JtIG1hdDQgY2FtZXJhSW52ZXJzZVByb2plY3Rpb25NYXRyaXg7XHJcblxyXG4jZGVmaW5lIElEX0dSQURJRU5UX1RIUkVTSE9MRCAxZS00XHJcbiNpbmNsdWRlIDxwYWNraW5nPlxyXG5cclxuXHJcbmZsb2F0IGdldERlcHRoKCBjb25zdCBpbiBpdmVjMiBzY3JlZW5Qb3NpdGlvbiApIHtcclxuICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcblx0ICByZXR1cm4gdW5wYWNrUkdCQVRvRGVwdGgoIHRleGVsRmV0Y2goIHREZXB0aCwgY2xhbXAoc2NyZWVuUG9zaXRpb24sIGl2ZWMyKDAsMCksIGl2ZWMyKHNpemUpKSwgMCApICk7XHJcbiAgI2Vsc2VcclxuICAgIHZlYzIgY1V2ID0gdmVjMigwLjUvc2l6ZS54LCAwLjUvc2l6ZS55KTtcclxuICAgIHJldHVybiB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCB0RGVwdGgsIHZlYzIobWluKHNjcmVlblBvc2l0aW9uLCBpdmVjMihzaXplKSkpL3NpemUgKyBjVXYgKSApO1xyXG4gICNlbmRpZlxyXG59XHJcblxyXG5cclxuXHJcbnZlYzMgU29iZWxTYW1wbGUoc2FtcGxlcjJEIHQsIHZlYzIgdXYsIHZlYzMgb2Zmc2V0KXtcclxuXHR2ZWMzIHBpeGVsQ2VudGVyID0gdGV4dHVyZTJEKHQsIHV2KS5yZ2I7XHJcblx0dmVjMyBwaXhlbExlZnQgICA9IHRleHR1cmUyRCh0LCB1diAtIG9mZnNldC54eikucmdiO1xyXG5cdHZlYzMgcGl4ZWxSaWdodCAgPSB0ZXh0dXJlMkQodCwgdXYgKyBvZmZzZXQueHopLnJnYjtcclxuXHR2ZWMzIHBpeGVsVXAgICAgID0gdGV4dHVyZTJEKHQsIHV2ICsgb2Zmc2V0Lnp5KS5yZ2I7XHJcblx0dmVjMyBwaXhlbERvd24gICA9IHRleHR1cmUyRCh0LCB1diAtIG9mZnNldC56eSkucmdiO1xyXG5cclxuXHRyZXR1cm4gYWJzKHBpeGVsTGVmdCAtIHBpeGVsQ2VudGVyKSAgK1xyXG5cdFx0XHRhYnMocGl4ZWxSaWdodCAtIHBpeGVsQ2VudGVyKSArXHJcblx0XHRcdGFicyhwaXhlbFVwIC0gcGl4ZWxDZW50ZXIpICAgICtcclxuXHRcdFx0YWJzKHBpeGVsRG93biAtIHBpeGVsQ2VudGVyKTtcclxufVxyXG5cclxuXHJcbmZsb2F0IEdldFRvbGVyYW5jZShmbG9hdCBkLCBmbG9hdCBrKVxyXG57XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBGaW5kIGEgdG9sZXJhbmNlIGZvciBkZXB0aCB0aGF0IGlzIGNvbnN0YW50XHJcbiAgICAvLyBpbiB2aWV3IHNwYWNlIChrIGluIHZpZXcgc3BhY2UpLlxyXG4gICAgLy9cclxuICAgIC8vIHRvbCA9IGsqZGR4KFp0b0RlcHRoKHopKVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgXHJcbiAgICBmbG9hdCBBPS0gICAoY2FtZXJhRmFyK2NhbWVyYU5lYXIpLyhjYW1lcmFGYXIgLSBjYW1lcmFOZWFyKTtcclxuICAgIGZsb2F0IEI9LTIuMCpjYW1lcmFGYXIqY2FtZXJhTmVhciAvKGNhbWVyYUZhciAtY2FtZXJhTmVhcik7XHJcbiAgICBcclxuICAgIGQgPSBkKjIuMC0xLjA7XHJcbiAgICBcclxuICAgIHJldHVybiAtayooZCtBKSooZCtBKS9COyAgIFxyXG59XHJcblxyXG5mbG9hdCBEZXRlY3RTaWxobyhpdmVjMiBmcmFnQ29vcmQsIGl2ZWMyIGRpciwgZmxvYXQgdG9sZXJhbmNlKVxyXG57XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyAgIHgwIF9fXyB4MS0tLS1vIFxyXG4gICAgLy8gICAgICAgICAgOlxcICAgIDogXHJcbiAgICAvLyAgICAgICByMCA6IFxcICAgOiByMVxyXG4gICAgLy8gICAgICAgICAgOiAgXFwgIDogXHJcbiAgICAvLyAgICAgICAgICBvLS0teDIgX19fIHgzXHJcbiAgICAvL1xyXG4gICAgLy8gcjAgYW5kIHIxIGFyZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBhY3R1YWxcclxuICAgIC8vIGFuZCBleHBlY3RlZCAoYXMgaWYgeDAuLjMgd2hlcmUgb24gdGhlIHNhbWVcclxuICAgIC8vIHBsYW5lKSBkZXB0aCB2YWx1ZXMuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBmbG9hdCB4MCA9IGFicyhnZXREZXB0aChmcmFnQ29vcmQgKyBkaXIqLTIpKTtcclxuICAgIGZsb2F0IHgxID0gYWJzKGdldERlcHRoKGZyYWdDb29yZCArIGRpciotMSkpO1xyXG4gICAgZmxvYXQgeDIgPSBhYnMoZ2V0RGVwdGgoZnJhZ0Nvb3JkICsgZGlyKiAwKSk7XHJcbiAgICBmbG9hdCB4MyA9IGFicyhnZXREZXB0aChmcmFnQ29vcmQgKyBkaXIqIDEpKTtcclxuICAgIFxyXG4gICAgZmxvYXQgZDAgPSAoeDEteDApO1xyXG4gICAgZmxvYXQgZDEgPSAoeDIteDMpO1xyXG4gICAgXHJcbiAgICBmbG9hdCByMCA9IHgxICsgZDAgLSB4MjtcclxuICAgIGZsb2F0IHIxID0geDIgKyBkMSAtIHgxO1xyXG4gICAgXHJcbiAgICBmbG9hdCB0b2wgPSBHZXRUb2xlcmFuY2UoeDIsIHRvbGVyYW5jZSk7XHJcbiAgICBcclxuICAgIHJldHVybiBzbW9vdGhzdGVwKDAuMCwgdG9sKnRvbCwgbWF4KCAtIHIwKnIxLCAwLjApKTtcclxuXHJcbn1cclxuXHJcbi8vIFNvdXJjZTogaHR0cHM6Ly93d3cuc2hhZGVydG95LmNvbS92aWV3L0RzbFh6MlxyXG5mbG9hdCBEZXB0aEVkZ2UoaXZlYzIgZnJhZ0Nvb3JkLCBmbG9hdCB0b2xlcmFuY2UpXHJcbntcclxuICAgIHJldHVybiBtYXgoXHJcbiAgICAgICAgRGV0ZWN0U2lsaG8oZnJhZ0Nvb3JkLCBpdmVjMigxLDApLCB0b2xlcmFuY2UpLCAvLyBIb3Jpem9udGFsXHJcbiAgICAgICAgRGV0ZWN0U2lsaG8oZnJhZ0Nvb3JkLCBpdmVjMigwLDEpLCB0b2xlcmFuY2UpICAvLyBWZXJ0aWNhbFxyXG4gICAgICAgICk7XHJcbn1cclxuXHJcbmZsb2F0IE5vcm1hbEVkZ2UoZmxvYXQgc2NhbGUpXHJcbntcclxuXHRmbG9hdCBoYWxmU2NhbGVGbG9vciA9IGZsb29yKHNjYWxlICogMC41KTtcclxuXHRmbG9hdCBoYWxmU2NhbGVDZWlsID0gY2VpbChzY2FsZSAqIDAuNSk7XHJcblxyXG5cdHZlYzIgcGl4ZWxTaXplID0gdmVjMigxLjAgLyBzaXplLngsIDEuMCAvIHNpemUueSk7XHJcblxyXG5cdHZlYzIgYm90dG9tTGVmdFVWID0gdlV2IC0gcGl4ZWxTaXplICogaGFsZlNjYWxlRmxvb3I7XHJcblx0dmVjMiB0b3BSaWdodFVWID0gdlV2ICsgcGl4ZWxTaXplICogaGFsZlNjYWxlQ2VpbDsgIFxyXG5cdHZlYzIgYm90dG9tUmlnaHRVViA9IHZVdiArIHZlYzIocGl4ZWxTaXplLnggKiBoYWxmU2NhbGVDZWlsLCAtcGl4ZWxTaXplLnkgKiBoYWxmU2NhbGVGbG9vcik7XHJcblx0dmVjMiB0b3BMZWZ0VVYgPSB2VXYgKyB2ZWMyKC1waXhlbFNpemUueCAqIGhhbGZTY2FsZUZsb29yLCBwaXhlbFNpemUueSAqIGhhbGZTY2FsZUNlaWwpO1xyXG5cclxuXHR2ZWMzIGNlbnRlck5vcm1hbCA9IHVucGFja1JHQlRvTm9ybWFsKHRleHR1cmUyRCh0Tm9ybWFsLCB2VXYpLnJnYik7XHJcblx0dmVjMyBub3JtYWwwID0gdW5wYWNrUkdCVG9Ob3JtYWwodGV4dHVyZTJEKHROb3JtYWwsIGJvdHRvbUxlZnRVVikucmdiKTtcclxuXHR2ZWMzIG5vcm1hbDEgPSB1bnBhY2tSR0JUb05vcm1hbCh0ZXh0dXJlMkQodE5vcm1hbCwgdG9wUmlnaHRVVikucmdiKTtcclxuXHR2ZWMzIG5vcm1hbDIgPSB1bnBhY2tSR0JUb05vcm1hbCh0ZXh0dXJlMkQodE5vcm1hbCwgYm90dG9tUmlnaHRVVikucmdiKTtcclxuXHR2ZWMzIG5vcm1hbDMgPSB1bnBhY2tSR0JUb05vcm1hbCh0ZXh0dXJlMkQodE5vcm1hbCwgdG9wTGVmdFVWKS5yZ2IpO1xyXG5cclxuXHR2ZWMzIG5vcm1hbEZpbml0ZURpZmZlcmVuY2UwID0gbm9ybWFsMSAtIG5vcm1hbDA7XHJcblx0dmVjMyBub3JtYWxGaW5pdGVEaWZmZXJlbmNlMSA9IG5vcm1hbDMgLSBub3JtYWwyO1xyXG5cclxuXHRyZXR1cm4gc3FydChkb3Qobm9ybWFsRmluaXRlRGlmZmVyZW5jZTAsIG5vcm1hbEZpbml0ZURpZmZlcmVuY2UwKSArIGRvdChub3JtYWxGaW5pdGVEaWZmZXJlbmNlMSwgbm9ybWFsRmluaXRlRGlmZmVyZW5jZTEpKTtcclxufVxyXG5cclxuLyoqIEFsdGVybmF0aXZlIHRvIE5vcm1hbEVkZ2UuICovXHJcbnZlYzMgU29iZWxTYW1wbGVOb3JtYWwodmVjMiB1dil7XHJcblx0ZmxvYXQgdyA9IDEuMCAvIHNpemUueDtcclxuXHRmbG9hdCBoID0gMS4wIC8gc2l6ZS55O1xyXG5cdHZlYzMgbls5XTtcclxuXHRuWzBdID0gdW5wYWNrUkdCVG9Ob3JtYWwodGV4dHVyZTJEKHROb3JtYWwsIHV2ICsgdmVjMiggLXcsIC1oKSkucmdiKTtcclxuXHRuWzFdID0gdW5wYWNrUkdCVG9Ob3JtYWwodGV4dHVyZTJEKHROb3JtYWwsIHV2ICsgdmVjMigwLjAsIC1oKSkucmdiKTtcclxuXHRuWzJdID0gdW5wYWNrUkdCVG9Ob3JtYWwodGV4dHVyZTJEKHROb3JtYWwsIHV2ICsgdmVjMiggIHcsIC1oKSkucmdiKTtcclxuXHRuWzNdID0gdW5wYWNrUkdCVG9Ob3JtYWwodGV4dHVyZTJEKHROb3JtYWwsIHV2ICsgdmVjMiggLXcsIDAuMCkpLnJnYik7XHJcblx0bls0XSA9IHVucGFja1JHQlRvTm9ybWFsKHRleHR1cmUyRCh0Tm9ybWFsLCB1dikucmdiKTtcclxuXHRuWzVdID0gdW5wYWNrUkdCVG9Ob3JtYWwodGV4dHVyZTJEKHROb3JtYWwsIHV2ICsgdmVjMiggIHcsIDAuMCkpLnJnYik7XHJcblx0bls2XSA9IHVucGFja1JHQlRvTm9ybWFsKHRleHR1cmUyRCh0Tm9ybWFsLCB1diArIHZlYzIoIC13LCBoKSkucmdiKTtcclxuXHRuWzddID0gdW5wYWNrUkdCVG9Ob3JtYWwodGV4dHVyZTJEKHROb3JtYWwsIHV2ICsgdmVjMigwLjAsIGgpKS5yZ2IpO1xyXG5cdG5bOF0gPSB1bnBhY2tSR0JUb05vcm1hbCh0ZXh0dXJlMkQodE5vcm1hbCwgdXYgKyB2ZWMyKCAgdywgaCkpLnJnYik7XHJcblxyXG5cdHZlYzMgc29iZWxfZWRnZV9oID0gblsyXSArICgyLjAqbls1XSkgKyBuWzhdIC0gKG5bMF0gKyAoMi4wKm5bM10pICsgbls2XSk7XHJcbiAgXHR2ZWMzIHNvYmVsX2VkZ2VfdiA9IG5bMF0gKyAoMi4wKm5bMV0pICsgblsyXSAtIChuWzZdICsgKDIuMCpuWzddKSArIG5bOF0pO1xyXG5cdHZlYzMgc29iZWwgPSBzcXJ0KChzb2JlbF9lZGdlX2ggKiBzb2JlbF9lZGdlX2gpICsgKHNvYmVsX2VkZ2VfdiAqIHNvYmVsX2VkZ2VfdikpO1xyXG5cdHJldHVybiBzb2JlbDtcclxufVxyXG5cclxuXHJcbnZvaWQgbWFpbigpIHtcclxuXHQvLyBEZXB0aCBlZGdlXHJcbiAgZmxvYXQgZGVwdGhFZGdlID0gRGVwdGhFZGdlKGl2ZWMyKGdsX0ZyYWdDb29yZCksIHVEZXB0aEJpYXMpICogdURlcHRoTXVsdGlwbGllcjsgXHJcbiAgLy8gTm9ybWFsIGVkZ2VcclxuXHRmbG9hdCBub3JtYWxFZGdlID0gcG93KE5vcm1hbEVkZ2UodU91dGxpbmVUaGlja25lc3MpICogdU5vcm1hbE11bHRpcGxpZXIsIHVOb3JtYWxCaWFzKTtcclxuICAvLyBJZCBlZGdlXHJcblx0dmVjMyBvZmZzZXQgPSB2ZWMzKCgxLjAgLyBzaXplLngpLCAoMS4wIC8gc2l6ZS55KSwgMC4wKSAqIHVPdXRsaW5lVGhpY2tuZXNzO1xyXG5cdHZlYzMgc29iZWxJZFZlYyA9IGFicyhTb2JlbFNhbXBsZSh0SWQsIHZVdiwgb2Zmc2V0KSk7XHJcbiAgLy8gVGhpcyBpcyB0aGUgYnJhbmNobGVzcyBlcXVpdmFsZW50IG9mIHNvYmVsSWRWZWMueCArIHNvYmVsSWRWZWMueSArIHNvYmVsSWRWZWMueiA+IElEX0dSQURJRU5UX1RIUkVTSE9MRCA/IDEuIDogMC5cclxuXHRmbG9hdCBzb2JlbElkRWRnZSA9IHN0ZXAoSURfR1JBRElFTlRfVEhSRVNIT0xELCBzb2JlbElkVmVjLnggKyBzb2JlbElkVmVjLnkgKyBzb2JlbElkVmVjLnopO1xyXG5cclxuICAvLyBDb21iaW5lIHRoZSB0aHJlZSBlZGdlcyBieSB0YWtpbmcgdGhlIG1pbmltdW1cclxuICBmbG9hdCBtYXhPdXRsaW5lID0gc2F0dXJhdGUobWF4KHNvYmVsSWRFZGdlLCBtYXgoZGVwdGhFZGdlLCBub3JtYWxFZGdlKSkpO1xyXG5cdGZsb2F0IHNvYmVsT3V0bGluZSA9IG1heE91dGxpbmUgKiB1T3V0bGluZURlbnNpdHk7XHJcblxyXG4gIFxyXG4gIHZlYzMgY29sb3IgPSBtaXgodUJhY2tncm91bmRDb2xvciwgdU91dGxpbmVDb2xvciwgc29iZWxPdXRsaW5lKTtcclxuICBmbG9hdCBhbHBoYSA9IG1peCgwLiwgdU91dGxpbmVEZW5zaXR5LCBzb2JlbE91dGxpbmUpO1xyXG4gIC8vIHZlYzMgY29sb3IgPSB2ZWMzKGRlcHRoRWRnZSwgbm9ybWFsRWRnZSwgc29iZWxJZEVkZ2UpOyAvLyBEZWJ1Z1xyXG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcclxuXHJcbn1gXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlRWRnZXNHZW5lcmF0b3JWZXJ0ID0gLyogZ2xzbCAqLyBgXHJcbnZhcnlpbmcgdmVjMiB2VXY7XHJcbnZvaWQgbWFpbigpIHtcclxuICAgIHZVdiA9IHV2O1xyXG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xyXG59YFxyXG4iLCJpbXBvcnQge1xyXG4gIENvbG9yLFxyXG4gIExpbmVhckZpbHRlcixcclxuICBNYXRyaXg0LFxyXG4gIE9ydGhvZ3JhcGhpY0NhbWVyYSxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBTaGFkZXJNYXRlcmlhbCxcclxuICBUZXh0dXJlLFxyXG4gIFZlY3RvcjIsXHJcbiAgV2ViR0xSZW5kZXJlclxyXG59IGZyb20gJ3RocmVlJ1xyXG5cclxuaW1wb3J0IHsgRnVsbFNjcmVlblF1YWQgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvUGFzcy5qcydcclxuaW1wb3J0IHsgQmFzZUdQYXNzLCBQYXNzT3B0aW9ucyB9IGZyb20gJy4vR1Bhc3MuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVFZGdlc0dlbmVyYXRvckZyYWcgfSBmcm9tICcuLi8uLi9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLWVkZ2VzLWdlbmVyYXRvci1mcmFnLmpzJ1xyXG5pbXBvcnQgeyBzcGVja2xlRWRnZXNHZW5lcmF0b3JWZXJ0IH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL3NoYWRlcnMvc3BlY2tsZS1lZGdlcy1nZW5lcmF0b3ItdmVydC5qcydcclxuaW1wb3J0IHsgUGlwZWxpbmUgfSBmcm9tICcuLi9QaXBlbGluZXMvUGlwZWxpbmUuanMnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2VzUGFzc09wdGlvbnMgZXh0ZW5kcyBQYXNzT3B0aW9ucyB7XHJcbiAgZGVwdGhNdWx0aXBsaWVyPzogbnVtYmVyXHJcbiAgZGVwdGhCaWFzPzogbnVtYmVyXHJcbiAgbm9ybWFsTXVsdGlwbGllcj86IG51bWJlclxyXG4gIG5vcm1hbEJpYXM/OiBudW1iZXJcclxuICBvdXRsaW5lVGhpY2tuZXNzPzogbnVtYmVyXHJcbiAgb3V0bGluZU9wYWNpdHk/OiBudW1iZXJcclxuICBvdXRsaW5lQ29sb3I/OiBudW1iZXJcclxuICBiYWNrZ3JvdW5kQ29sb3I/OiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERlZmF1bHRFZGdlc1Bhc3NPcHRpb25zOiBSZXF1aXJlZDxFZGdlc1Bhc3NPcHRpb25zPiA9IHtcclxuICBkZXB0aE11bHRpcGxpZXI6IDEsXHJcbiAgZGVwdGhCaWFzOiAwLjAwMSxcclxuICBub3JtYWxNdWx0aXBsaWVyOiAxLFxyXG4gIG5vcm1hbEJpYXM6IDE1LFxyXG4gIG91dGxpbmVUaGlja25lc3M6IDEsXHJcbiAgb3V0bGluZU9wYWNpdHk6IDAuNzUsXHJcbiAgb3V0bGluZUNvbG9yOiAweDMyMzIzMixcclxuICBiYWNrZ3JvdW5kQ29sb3I6IDB4ZmZmZmZmZlxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRWRnZXNQYXNzIGV4dGVuZHMgQmFzZUdQYXNzIHtcclxuICBwdWJsaWMgZWRnZXNNYXRlcmlhbDogU2hhZGVyTWF0ZXJpYWxcclxuICBwcml2YXRlIGZzUXVhZDogRnVsbFNjcmVlblF1YWRcclxuXHJcbiAgcHVibGljIF9vcHRpb25zOiBSZXF1aXJlZDxFZGdlc1Bhc3NPcHRpb25zPiA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICB7fSxcclxuICAgIERlZmF1bHRFZGdlc1Bhc3NPcHRpb25zXHJcbiAgKVxyXG5cclxuICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IEVkZ2VzUGFzc09wdGlvbnMpIHtcclxuICAgIHN1cGVyLm9wdGlvbnMgPSB2YWx1ZVxyXG4gICAgdGhpcy5lZGdlc01hdGVyaWFsLnVuaWZvcm1zLnVEZXB0aE11bHRpcGxpZXIudmFsdWUgPVxyXG4gICAgICB0aGlzLl9vcHRpb25zLmRlcHRoTXVsdGlwbGllciA/PyBEZWZhdWx0RWRnZXNQYXNzT3B0aW9ucy5kZXB0aE11bHRpcGxpZXJcclxuICAgIHRoaXMuZWRnZXNNYXRlcmlhbC51bmlmb3Jtcy51RGVwdGhCaWFzLnZhbHVlID1cclxuICAgICAgdGhpcy5fb3B0aW9ucy5kZXB0aEJpYXMgPz8gRGVmYXVsdEVkZ2VzUGFzc09wdGlvbnMuZGVwdGhCaWFzXHJcbiAgICB0aGlzLmVkZ2VzTWF0ZXJpYWwudW5pZm9ybXMudU5vcm1hbE11bHRpcGxpZXIudmFsdWUgPVxyXG4gICAgICB0aGlzLl9vcHRpb25zLm5vcm1hbE11bHRpcGxpZXIgPz8gRGVmYXVsdEVkZ2VzUGFzc09wdGlvbnMubm9ybWFsTXVsdGlwbGllclxyXG4gICAgdGhpcy5lZGdlc01hdGVyaWFsLnVuaWZvcm1zLnVOb3JtYWxCaWFzLnZhbHVlID1cclxuICAgICAgdGhpcy5fb3B0aW9ucy5ub3JtYWxCaWFzID8/IERlZmF1bHRFZGdlc1Bhc3NPcHRpb25zLm5vcm1hbEJpYXNcclxuICAgIHRoaXMuZWRnZXNNYXRlcmlhbC51bmlmb3Jtcy51T3V0bGluZVRoaWNrbmVzcy52YWx1ZSA9XHJcbiAgICAgIHRoaXMuX29wdGlvbnMub3V0bGluZVRoaWNrbmVzcyA/PyBEZWZhdWx0RWRnZXNQYXNzT3B0aW9ucy5vdXRsaW5lVGhpY2tuZXNzXHJcbiAgICB0aGlzLmVkZ2VzTWF0ZXJpYWwudW5pZm9ybXMudU91dGxpbmVEZW5zaXR5LnZhbHVlID1cclxuICAgICAgdGhpcy5fb3B0aW9ucy5vdXRsaW5lT3BhY2l0eSA/PyBEZWZhdWx0RWRnZXNQYXNzT3B0aW9ucy5vdXRsaW5lT3BhY2l0eVxyXG4gICAgdGhpcy5lZGdlc01hdGVyaWFsLnVuaWZvcm1zLnVPdXRsaW5lQ29sb3IudmFsdWUgPSBuZXcgQ29sb3IoXHJcbiAgICAgIHRoaXMuX29wdGlvbnMub3V0bGluZUNvbG9yID8/IERlZmF1bHRFZGdlc1Bhc3NPcHRpb25zLm91dGxpbmVDb2xvclxyXG4gICAgKVxyXG4gICAgdGhpcy5lZGdlc01hdGVyaWFsLnVuaWZvcm1zLnVCYWNrZ3JvdW5kQ29sb3IudmFsdWUgPSBuZXcgQ29sb3IoXHJcbiAgICAgIHRoaXMuX29wdGlvbnMuYmFja2dyb3VuZENvbG9yID8/IERlZmF1bHRFZGdlc1Bhc3NPcHRpb25zLmJhY2tncm91bmRDb2xvclxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKVxyXG5cclxuICAgIHRoaXMuX291dHB1dFRhcmdldCA9IFBpcGVsaW5lLmNyZWF0ZVJlbmRlclRhcmdldCh7XHJcbiAgICAgIG1pbkZpbHRlcjogTGluZWFyRmlsdGVyLFxyXG4gICAgICBtYWdGaWx0ZXI6IExpbmVhckZpbHRlclxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmVkZ2VzTWF0ZXJpYWwgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xyXG4gICAgICBmcmFnbWVudFNoYWRlcjogc3BlY2tsZUVkZ2VzR2VuZXJhdG9yRnJhZyxcclxuICAgICAgdmVydGV4U2hhZGVyOiBzcGVja2xlRWRnZXNHZW5lcmF0b3JWZXJ0LFxyXG4gICAgICB1bmlmb3Jtczoge1xyXG4gICAgICAgIHREZXB0aDogeyB2YWx1ZTogbnVsbCB9LFxyXG4gICAgICAgIHROb3JtYWw6IHsgdmFsdWU6IG51bGwgfSxcclxuICAgICAgICB0SWQ6IHsgdmFsdWU6IG51bGwgfSxcclxuICAgICAgICBzaXplOiB7IHZhbHVlOiBuZXcgVmVjdG9yMig1MTIsIDUxMikgfSxcclxuXHJcbiAgICAgICAgdURlcHRoTXVsdGlwbGllcjogeyB2YWx1ZTogdGhpcy5fb3B0aW9ucy5kZXB0aE11bHRpcGxpZXIgfSxcclxuICAgICAgICB1RGVwdGhCaWFzOiB7IHZhbHVlOiB0aGlzLl9vcHRpb25zLmRlcHRoQmlhcyB9LFxyXG4gICAgICAgIHVOb3JtYWxNdWx0aXBsaWVyOiB7IHZhbHVlOiB0aGlzLl9vcHRpb25zLm5vcm1hbE11bHRpcGxpZXIgfSxcclxuICAgICAgICB1Tm9ybWFsQmlhczogeyB2YWx1ZTogdGhpcy5fb3B0aW9ucy5ub3JtYWxCaWFzIH0sXHJcbiAgICAgICAgdU91dGxpbmVUaGlja25lc3M6IHsgdmFsdWU6IHRoaXMuX29wdGlvbnMub3V0bGluZVRoaWNrbmVzcyB9LFxyXG4gICAgICAgIHVPdXRsaW5lRGVuc2l0eTogeyB2YWx1ZTogdGhpcy5fb3B0aW9ucy5vdXRsaW5lT3BhY2l0eSB9LFxyXG4gICAgICAgIHVPdXRsaW5lQ29sb3I6IHsgdmFsdWU6IG5ldyBDb2xvcih0aGlzLl9vcHRpb25zLm91dGxpbmVDb2xvcikgfSxcclxuICAgICAgICB1QmFja2dyb3VuZENvbG9yOiB7IHZhbHVlOiBuZXcgQ29sb3IodGhpcy5fb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpIH0sXHJcblxyXG4gICAgICAgIGNhbWVyYU5lYXI6IHsgdmFsdWU6IDEgfSxcclxuICAgICAgICBjYW1lcmFGYXI6IHsgdmFsdWU6IDEwMCB9LFxyXG4gICAgICAgIGNhbWVyYVByb2plY3Rpb25NYXRyaXg6IHsgdmFsdWU6IG5ldyBNYXRyaXg0KCkgfSxcclxuICAgICAgICBjYW1lcmFJbnZlcnNlUHJvamVjdGlvbk1hdHJpeDogeyB2YWx1ZTogbmV3IE1hdHJpeDQoKSB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLmVkZ2VzTWF0ZXJpYWwuZGVwdGhXcml0ZSA9IGZhbHNlXHJcblxyXG4gICAgdGhpcy5mc1F1YWQgPSBuZXcgRnVsbFNjcmVlblF1YWQodGhpcy5lZGdlc01hdGVyaWFsKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFRleHR1cmUodU5hbWU6IHN0cmluZywgdGV4dHVyZTogVGV4dHVyZSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5lZGdlc01hdGVyaWFsLnVuaWZvcm1zW3VOYW1lXS52YWx1ZSA9IHRleHR1cmVcclxuICAgIHRoaXMuZWRnZXNNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnRURHRVMnXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlKGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgIHRoaXMuZWRnZXNNYXRlcmlhbC5kZWZpbmVzWydQRVJTUEVDVElWRV9DQU1FUkEnXSA9IChjYW1lcmEgYXMgUGVyc3BlY3RpdmVDYW1lcmEpXHJcbiAgICAgIC5pc1BlcnNwZWN0aXZlQ2FtZXJhXHJcbiAgICAgID8gMVxyXG4gICAgICA6IDBcclxuICAgIHRoaXMuZWRnZXNNYXRlcmlhbC51bmlmb3Jtc1snY2FtZXJhTmVhciddLnZhbHVlID0gY2FtZXJhLm5lYXJcclxuICAgIHRoaXMuZWRnZXNNYXRlcmlhbC51bmlmb3Jtc1snY2FtZXJhRmFyJ10udmFsdWUgPSBjYW1lcmEuZmFyXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyKHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5vbkJlZm9yZVJlbmRlcikgdGhpcy5vbkJlZm9yZVJlbmRlcigpXHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMuX291dHB1dFRhcmdldClcclxuXHJcbiAgICB0aGlzLmZzUXVhZC5yZW5kZXIocmVuZGVyZXIpXHJcbiAgICBpZiAodGhpcy5vbkFmdGVyUmVuZGVyKSB0aGlzLm9uQWZ0ZXJSZW5kZXIoKVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgc3VwZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KVxyXG4gICAgdGhpcy5lZGdlc01hdGVyaWFsLnVuaWZvcm1zWydzaXplJ10udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQpXHJcbiAgICB0aGlzLmVkZ2VzTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlVGVtcG9yYWxTdXBlcnNhbXBsaW5nVmVydCA9IC8qIGdsc2wgKi8gYFxyXG4gICAgdmFyeWluZyB2ZWMyIFV2O1xyXG4gICAgXHJcbiAgICB2b2lkIG1haW4oKSB7XHJcbiAgICAgICAgVXYgPSB1djtcclxuICAgICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xyXG4gICAgfWBcclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVUZW1wb3JhbFN1cGVyc2FtcGxpbmdGcmFnID0gLyogZ2xzbCAqLyBgXHJcbiAgICB1bmlmb3JtIGZsb2F0IGhlaWdodDtcclxuICAgIHVuaWZvcm0gZmxvYXQgd2lkdGg7XHJcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB0RGlmZnVzZTtcclxuICAgIHVuaWZvcm0gc2FtcGxlcjJEIHRMYXN0RnJhbWU7XHJcbiAgICB2YXJ5aW5nIHZlYzIgVXY7XHJcblxyXG4gICAgI2RlZmluZSBMdW1pbmFuY2VFbmNvZGVBcHByb3ggdmVjMygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKVxyXG4gICAgZmxvYXQgZ2V0THVtaW5hbmNlKHZlYzMgY29sb3IpIHtcclxuICAgICAgICByZXR1cm4gY2xhbXAoZG90KGNvbG9yLCBMdW1pbmFuY2VFbmNvZGVBcHByb3gpLCAwLiwgMS4pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB2b2lkIG1haW4oKSB7XHJcbiAgICAgICAgdmVjNCB0ZXhlbCA9IHRleHR1cmUyRCh0RGlmZnVzZSwgVXYpO1xyXG4gICAgICAgIHZlYzIgb2xkUGl4ZWxVdiA9IFV2O1xyXG4gICAgICAgIHZlYzQgb2xkVGV4ZWwgPSB0ZXh0dXJlMkQodExhc3RGcmFtZSwgb2xkUGl4ZWxVdik7XHJcblxyXG4gICAgICAgIC8vIFVzZSBzaW1wbGUgbmVpZ2hib3IgY2xhbXBpbmdcclxuICAgICAgICB2ZWM0IG1heE5laWdoYm9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xyXG4gICAgICAgIHZlYzQgbWluTmVpZ2hib3IgPSB2ZWM0KDEuMCk7XHJcbiAgICAgICAgdmVjNCBhdmVyYWdlID0gdmVjNCgwLjApO1xyXG4gICAgICAgIGZvciAoaW50IHggPSAtMTsgeCA8PSAxOyB4KyspIHtcclxuICAgICAgICAgICAgZm9yIChpbnQgeSA9IC0xOyB5IDw9IDE7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgdmVjMiBuZWlnaGJvclV2ID0gVXYgKyB2ZWMyKGZsb2F0KHgpIC8gd2lkdGgsIGZsb2F0KHkpIC8gaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgbmVpZ2hib3JUZXhlbCA9IHRleHR1cmUyRCh0RGlmZnVzZSwgbmVpZ2hib3JVdik7XHJcbiAgICAgICAgICAgICAgICBtYXhOZWlnaGJvciA9IG1heChtYXhOZWlnaGJvciwgbmVpZ2hib3JUZXhlbCk7XHJcbiAgICAgICAgICAgICAgICBtaW5OZWlnaGJvciA9IG1pbihtaW5OZWlnaGJvciwgbmVpZ2hib3JUZXhlbCk7XHJcbiAgICAgICAgICAgICAgICBhdmVyYWdlICs9IG5laWdoYm9yVGV4ZWwgLyA5LjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmxvYXQgbHVtMCA9IGdldEx1bWluYW5jZSh0ZXhlbC5yZ2IpO1xyXG4gICAgICAgIGZsb2F0IGx1bTEgPSBnZXRMdW1pbmFuY2Uob2xkVGV4ZWwucmdiKTtcclxuXHJcbiAgICAgICAgZmxvYXQgdW5iaWFzZWRfZGlmZiA9IGFicyhsdW0wIC0gbHVtMSkgLyBtYXgobHVtMCwgbWF4KGx1bTEsIDAuMikpO1xyXG4gICAgICAgIGZsb2F0IHVuYmlhc2VkX3dlaWdodCA9IDEuMCAtIHVuYmlhc2VkX2RpZmY7XHJcbiAgICAgICAgZmxvYXQgdW5iaWFzZWRfd2VpZ2h0X3NxciA9IHVuYmlhc2VkX3dlaWdodCAqIHVuYmlhc2VkX3dlaWdodDtcclxuICAgICAgICBmbG9hdCBrX2ZlZWRiYWNrID0gbWl4KDAuODgwMCwgMC45NzAwLCB1bmJpYXNlZF93ZWlnaHRfc3FyKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBVRSBNZXRob2QgdG8gZ2V0IHJpZCBvZiBmbGlja2VyaW5nLiBXZWlnaHQgZnJhbWUgbWl4aW5nIGFtb3VudFxyXG4gICAgICAgIC8vIGJhc2VkIG9uIGxvY2FsIGNvbnRyYXN0LlxyXG4gICAgICAgIGZsb2F0IGNvbnRyYXN0ID0gZGlzdGFuY2UoYXZlcmFnZSwgdGV4ZWwpO1xyXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDAuMDUgKiBjb250cmFzdDtcclxuXHJcbiAgICAgICAgZmxvYXQgYmxlbmRGYWN0b3IgPSBtaXgoMS4gLSB3ZWlnaHQsIGtfZmVlZGJhY2ssIDEuKTtcclxuICAgICAgICB2ZWM0IGNvbXBvc2l0ZUNvbG9yID0gbWl4KHRleGVsLCBvbGRUZXhlbCwgYmxlbmRGYWN0b3IpO1xyXG4gICAgXHJcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gY29tcG9zaXRlQ29sb3I7XHJcbiAgICB9YFxyXG4iLCJpbXBvcnQge1xyXG4gIExpbmVhckZpbHRlcixcclxuICBOb0JsZW5kaW5nLFxyXG4gIFNoYWRlck1hdGVyaWFsLFxyXG4gIFRleHR1cmUsXHJcbiAgVW5pZm9ybXNVdGlscyxcclxuICBXZWJHTFJlbmRlclRhcmdldCxcclxuICBXZWJHTFJlbmRlcmVyXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IENvcHlTaGFkZXIgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vc2hhZGVycy9Db3B5U2hhZGVyLmpzJ1xyXG5pbXBvcnQgeyBGdWxsU2NyZWVuUXVhZCB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9wb3N0cHJvY2Vzc2luZy9QYXNzLmpzJ1xyXG5pbXBvcnQgeyBQcm9ncmVzc2l2ZUdQYXNzIH0gZnJvbSAnLi9HUGFzcy5qcydcclxuaW1wb3J0IHsgc3BlY2tsZVRlbXBvcmFsU3VwZXJzYW1wbGluZ1ZlcnQgfSBmcm9tICcuLi8uLi9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXRlbXBvcmFsLXN1cGVyc2FtcGxpbmctdmVydC5qcydcclxuaW1wb3J0IHsgc3BlY2tsZVRlbXBvcmFsU3VwZXJzYW1wbGluZ0ZyYWcgfSBmcm9tICcuLi8uLi9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLXRlbXBvcmFsLXN1cGVyc2FtcGxpbmctZnJhZy5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBUQUFQYXNzIGV4dGVuZHMgUHJvZ3Jlc3NpdmVHUGFzcyB7XHJcbiAgcHJpdmF0ZSBpbnB1dFRleDogVGV4dHVyZSB8IHVuZGVmaW5lZFxyXG4gIHByaXZhdGUgaGlzdG9yeVRhcmdldDogV2ViR0xSZW5kZXJUYXJnZXRcclxuICBwcml2YXRlIGZzUXVhZDogRnVsbFNjcmVlblF1YWRcclxuICBwdWJsaWMgb3V0cHV0VG9TY3JlZW4gPSBmYWxzZVxyXG5cclxuICBwcml2YXRlIG1hdGVyaWFsQ29weTogU2hhZGVyTWF0ZXJpYWxcclxuICBwcml2YXRlIHJlcHJvamVjdGlvbk1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbFxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuXHJcbiAgICB0aGlzLl9vdXRwdXRUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoMjU2LCAyNTYsIHtcclxuICAgICAgbWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXHJcbiAgICAgIG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyXHJcbiAgICB9KVxyXG4gICAgdGhpcy5oaXN0b3J5VGFyZ2V0ID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KDI1NiwgMjU2LCB7XHJcbiAgICAgIG1pbkZpbHRlcjogTGluZWFyRmlsdGVyLFxyXG4gICAgICBtYWdGaWx0ZXI6IExpbmVhckZpbHRlclxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLm1hdGVyaWFsQ29weSA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcbiAgICAgIHVuaWZvcm1zOiBVbmlmb3Jtc1V0aWxzLmNsb25lKENvcHlTaGFkZXIudW5pZm9ybXMpLFxyXG4gICAgICB2ZXJ0ZXhTaGFkZXI6IENvcHlTaGFkZXIudmVydGV4U2hhZGVyLFxyXG4gICAgICBmcmFnbWVudFNoYWRlcjogQ29weVNoYWRlci5mcmFnbWVudFNoYWRlcixcclxuICAgICAgYmxlbmRpbmc6IE5vQmxlbmRpbmdcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkubmVlZHNVcGRhdGUgPSB0cnVlXHJcblxyXG4gICAgdGhpcy5yZXByb2plY3Rpb25NYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcbiAgICAgIHVuaWZvcm1zOiB7XHJcbiAgICAgICAgdERpZmZ1c2U6IHsgdmFsdWU6IG51bGwgfSxcclxuICAgICAgICB0TGFzdEZyYW1lOiB7IHZhbHVlOiBudWxsIH0sXHJcbiAgICAgICAgd2lkdGg6IHsgdmFsdWU6IDAgfSxcclxuICAgICAgICBoZWlnaHQ6IHsgdmFsdWU6IDAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgYmxlbmRpbmc6IE5vQmxlbmRpbmcsXHJcbiAgICAgIGRlcHRoVGVzdDogZmFsc2UsXHJcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxyXG5cclxuICAgICAgdmVydGV4U2hhZGVyOiBzcGVja2xlVGVtcG9yYWxTdXBlcnNhbXBsaW5nVmVydCxcclxuICAgICAgZnJhZ21lbnRTaGFkZXI6IHNwZWNrbGVUZW1wb3JhbFN1cGVyc2FtcGxpbmdGcmFnXHJcbiAgICB9KVxyXG4gICAgdGhpcy5yZXByb2plY3Rpb25NYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuXHJcbiAgICB0aGlzLmZzUXVhZCA9IG5ldyBGdWxsU2NyZWVuUXVhZCgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ1RBQSdcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5wdXRUZXh0dXJlKHRleHR1cmU6IFRleHR1cmUgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuaW5wdXRUZXggPSB0ZXh0dXJlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyKHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5mcmFtZUluZGV4ID09PSAwKSB7XHJcbiAgICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLl9vdXRwdXRUYXJnZXQpXHJcbiAgICAgIHJlbmRlcmVyLmNsZWFyKClcclxuICAgICAgdGhpcy5tYXRlcmlhbENvcHkudW5pZm9ybXNbJ3REaWZmdXNlJ10udmFsdWUgPSB0aGlzLmlucHV0VGV4XHJcbiAgICAgIHRoaXMubWF0ZXJpYWxDb3B5Lm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgICB0aGlzLmZzUXVhZC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxDb3B5XHJcbiAgICAgIHRoaXMuZnNRdWFkLnJlbmRlcihyZW5kZXJlcilcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGhpcy5oaXN0b3J5VGFyZ2V0KVxyXG4gICAgcmVuZGVyZXIuY2xlYXIoKVxyXG4gICAgdGhpcy5yZXByb2plY3Rpb25NYXRlcmlhbC51bmlmb3Jtc1sndExhc3RGcmFtZSddLnZhbHVlID0gdGhpcy5fb3V0cHV0VGFyZ2V0Py50ZXh0dXJlXHJcbiAgICB0aGlzLnJlcHJvamVjdGlvbk1hdGVyaWFsLnVuaWZvcm1zWyd0RGlmZnVzZSddLnZhbHVlID0gdGhpcy5pbnB1dFRleFxyXG4gICAgdGhpcy5yZXByb2plY3Rpb25NYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHRoaXMuZnNRdWFkLm1hdGVyaWFsID0gdGhpcy5yZXByb2plY3Rpb25NYXRlcmlhbFxyXG4gICAgdGhpcy5mc1F1YWQucmVuZGVyKHJlbmRlcmVyKVxyXG5cclxuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLl9vdXRwdXRUYXJnZXQpXHJcbiAgICByZW5kZXJlci5jbGVhcigpXHJcbiAgICB0aGlzLm1hdGVyaWFsQ29weS51bmlmb3Jtc1sndERpZmZ1c2UnXS52YWx1ZSA9IHRoaXMuaGlzdG9yeVRhcmdldC50ZXh0dXJlXHJcbiAgICB0aGlzLm1hdGVyaWFsQ29weS5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHRoaXMuZnNRdWFkLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbENvcHlcclxuICAgIHRoaXMuZnNRdWFkLnJlbmRlcihyZW5kZXJlcilcclxuXHJcbiAgICBpZiAodGhpcy5vdXRwdXRUb1NjcmVlbikge1xyXG4gICAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQobnVsbClcclxuICAgICAgdGhpcy5tYXRlcmlhbENvcHkudW5pZm9ybXNbJ3REaWZmdXNlJ10udmFsdWUgPSB0aGlzLl9vdXRwdXRUYXJnZXQ/LnRleHR1cmVcclxuICAgICAgdGhpcy5tYXRlcmlhbENvcHkubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICAgIHRoaXMuZnNRdWFkLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbENvcHlcclxuICAgICAgdGhpcy5mc1F1YWQucmVuZGVyKHJlbmRlcmVyKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdXBlci5yZW5kZXIocmVuZGVyZXIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgc3VwZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KVxyXG4gICAgdGhpcy5oaXN0b3J5VGFyZ2V0LnNldFNpemUod2lkdGgsIGhlaWdodClcclxuICAgIHRoaXMucmVwcm9qZWN0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ3dpZHRoJ10udmFsdWUgPSB3aWR0aFxyXG4gICAgdGhpcy5yZXByb2plY3Rpb25NYXRlcmlhbC51bmlmb3Jtc1snaGVpZ2h0J10udmFsdWUgPSBoZWlnaHRcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVEZXB0aE5vcm1hbFZlcnQgPSAvKiBnbHNsICovIGBcclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2lmZGVmIFVTRV9SVEVcclxuICAgIC8vIFRoZSBoaWdoIGNvbXBvbmVudCBpcyBzdG9yZWQgYXMgdGhlIGRlZmF1bHQgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgYnVmZmVyXHJcbiAgICBhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbl9sb3c7XHJcbiAgICB1bmlmb3JtIHZlYzMgdVZpZXdlcl9oaWdoO1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfbG93O1xyXG4gICAgdW5pZm9ybSBtYXQ0IHJ0ZU1vZGVsVmlld01hdHJpeDtcclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgIGF0dHJpYnV0ZSBmbG9hdCBvYmpJbmRleDtcclxuXHJcbiAgICAjaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMFxyXG4gICAgICAgICNpZiBfX1ZFUlNJT05fXyA9PSAzMDBcclxuICAgICAgICAgICAgI2RlZmluZSBUUkFOU0ZPUk1fU1RSSURFIDRcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAjZGVmaW5lIFRSQU5TRk9STV9TVFJJREUgNC5cclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0VHJhbnNmb3JtcztcclxuICAgICAgICB1bmlmb3JtIGZsb2F0IG9iakNvdW50O1xyXG4gICAgI2VsaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMVxyXG4gICAgICAgIHVuaWZvcm0gbWF0NCB1VHJhbnNmb3Jtc1tPQkpfQ09VTlRdO1xyXG4gICAgI2VuZGlmXHJcbiNlbmRpZlxyXG5cclxuI2lmZGVmIExJTkVBUl9ERVBUSFxyXG4gICAgdmFyeWluZyB2ZWM0IHZWaWV3UG9zaXRpb247XHJcbiNlbmRpZlxyXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcclxuXHJcbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cclxuLy8gVGhpcyBpcyB1c2VkIGZvciBjb21wdXRpbmcgYW4gZXF1aXZhbGVudCBvZiBnbF9GcmFnQ29vcmQueiB0aGF0IGlzIGFzIGhpZ2ggcHJlY2lzaW9uIGFzIHBvc3NpYmxlLlxyXG4vLyBTb21lIHBsYXRmb3JtcyBjb21wdXRlIGdsX0ZyYWdDb29yZCBhdCBhIGxvd2VyIHByZWNpc2lvbiB3aGljaCBtYWtlcyB0aGUgbWFudWFsbHkgY29tcHV0ZWQgdmFsdWUgYmV0dGVyIGZvclxyXG4vLyBkZXB0aC1iYXNlZCBwb3N0cHJvY2Vzc2luZyBlZmZlY3RzLiBSZXByb2R1Y2VkIG9uIGlQYWQgd2l0aCBBMTAgcHJvY2Vzc29yIC8gaVBhZE9TIDEzLjMuMS5cclxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XHJcblxyXG4jaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgIHZvaWQgb2JqZWN0VHJhbnNmb3JtKG91dCB2ZWM0IHF1YXRlcm5pb24sIG91dCB2ZWM0IHBpdm90TG93LCBvdXQgdmVjNCBwaXZvdEhpZ2gsIG91dCB2ZWM0IHRyYW5zbGF0aW9uLCBvdXQgdmVjNCBzY2FsZSl7XHJcbiAgICAgICAgI2lmIFRSQU5TRk9STV9TVE9SQUdFID09IDBcclxuICAgICAgICAgICAgI2lmIF9fVkVSU0lPTl9fID09IDMwMFxyXG4gICAgICAgICAgICAgICAgaXZlYzIgdXYgPSBpdmVjMihpbnQob2JqSW5kZXgpICogVFJBTlNGT1JNX1NUUklERSwgMCk7IFxyXG4gICAgICAgICAgICAgICAgdmVjNCB2MCA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diwgMCApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MSA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDEsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjIgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigyLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYzID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMywgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgcXVhdGVybmlvbiA9IHYwO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RMb3cgPSB2ZWM0KHYxLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RIaWdoID0gdmVjNCh2Mi54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh2My54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHNjYWxlID0gdmVjNCh2MS53LCB2Mi53LCB2My53LCAxLik7XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gb2JqQ291bnQgKiBUUkFOU0ZPUk1fU1RSSURFO1xyXG4gICAgICAgICAgICAgICAgdmVjMiBjVXYgPSB2ZWMyKDAuNS9zaXplLCAwLjUpO1xyXG4gICAgICAgICAgICAgICAgdmVjMiBkVXYgPSB2ZWMyKDEuL3NpemUsIDAuKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmVjMiB1diA9IHZlYzIoKG9iakluZGV4ICogVFJBTlNGT1JNX1NUUklERSkvc2l6ZSArIGNVdi54LCBjVXYueSk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYwID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MSA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2ICsgZFV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjIgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIDIuICogZFV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjMgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIDMuICogZFV2KTtcclxuICAgICAgICAgICAgICAgIHF1YXRlcm5pb24gPSB2MDtcclxuICAgICAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh2MS54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodjIueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodjMueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBzY2FsZSA9IHZlYzQodjEudywgdjIudywgdjMudywgMS4pO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZWxpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAxXHJcbiAgICAgICAgICAgIG1hdDQgdE1hdHJpeCA9IHVUcmFuc2Zvcm1zW2ludChvYmpJbmRleCldO1xyXG4gICAgICAgICAgICBxdWF0ZXJuaW9uID0gdE1hdHJpeFswXTtcclxuICAgICAgICAgICAgcGl2b3RMb3cgPSB2ZWM0KHRNYXRyaXhbMV0ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodE1hdHJpeFsyXS54eXosIDEuKTtcclxuICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHRNYXRyaXhbM10ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHNjYWxlID0gdmVjNCh0TWF0cml4WzFdWzNdLCB0TWF0cml4WzJdWzNdLCB0TWF0cml4WzNdWzNdLCAxLik7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICB9XHJcblxyXG4gICAgdmVjMyByb3RhdGVfdmVydGV4X3Bvc2l0aW9uKHZlYzMgcG9zaXRpb24sIHZlYzQgcXVhdClcclxuICAgIHsgXHJcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbikgKyBxdWF0LncgKiBwb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEFub3RoZXIgd29ya2Fyb3VuZCBmb3IgQXBwbGUncyBzdHVwaWQgY29tcGlsZXIgKi9cclxuICAgIHZlYzQgc2FmZU11bCh2ZWM0IGEsIHZlYzQgYikge1xyXG4gICAgICAgIC8vIFByZXZlbnRzIGNvbnN0YW50IGZvbGRpbmcgYW5kIG9wdGltaXphdGlvblxyXG4gICAgICAgIHJldHVybiAoYSArIHZlYzQoMC4wKSkgKiAoYiArIHZlYzQoMS4wKSkgLSBhICogdmVjNCgxLjApO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZ2hwIHZlYzMgcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEoaGlnaHAgdmVjNCB2MCwgaGlnaHAgdmVjNCB2MSwgaGlnaHAgdmVjNCBzY2FsZSwgaGlnaHAgdmVjNCBxdWF0KVxyXG4gICAge1xyXG4gICAgICAgIC8qKiAhISEgV09SS0FST1VORCBGT1IgSW50ZWwgSXJpc1hlIENBUkRTICEhISAqL1xyXG4gICAgICAgIC8qKiBUaGUgY29kZSBiZWxvdyB3aWxsIG5vdCBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0cyBpbiBpbnRlbCBJcmlzWEUgaW50ZWdyYXRlZCBHUFVzLiBcclxuICAgICAgICAgKiAgVGhlIGdlb21ldHJ5IHdpbGwgdHVybiBtYW5nbGVkLCBhbGJlaXQgc3RhYmxlXHJcbiAgICAgICAgICogIEkgY2FuJ3Qga25vdyBmb3Igc3VyZSB3aGF0IGlzIGdvaW5nIG9uLCBidXQgcm90YXRpbmcgdGhlIGRpZmZlcmVuY2Ugc2VlbXMgdG8gXHJcbiAgICAgICAgICogIGZvcmNlIHRoZSByZXN1bHQgaW50byBhIGxvd2VyIHByZWNpc2lvbj9cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBoaWdocCB2ZWM0IHBvc2l0aW9uID0gdjAgLSB2MTtcclxuICAgICAgICAvLyByZXR1cm4gcG9zaXRpb24ueHl6ICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbi54eXopICsgcXVhdC53ICogcG9zaXRpb24ueHl6KTtcclxuXHJcbiAgICAgICAgLyoqIFN1YnRyYWN0aW5nIHRoZSByb3RhdGVkIHZlY3RvcnMgd29ya3MuICovXHJcbiAgICAgICAgcmV0dXJuIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24oc2FmZU11bCh2MCwgc2NhbGUpLnh5eiwgcXVhdCkgIC0gcm90YXRlX3ZlcnRleF9wb3NpdGlvbihzYWZlTXVsKHYxLCBzY2FsZSkueHl6LCBxdWF0KSA7XHJcblxyXG4gICAgICAgIC8qKiBBbiBhbHRlcm5hdGUgd29ya2Fyb3VuZCBpc1xyXG4gICAgICAgICAqIGhpZ2hwIHZlYzMgcG9zaXRpb24gPSAodjAueHl6ICogKDEuICsgMWUtNykpIC0gKHYxLnh5eiAqICgxLiArIDFlLTcpKTtcclxuICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uKSArIHF1YXQudyAqIHBvc2l0aW9uKTtcclxuXHJcbiAgICAgICAgICAgSG93ZXZlciBJJ20gbm90IHN1Y2ggYSBmYW4gb2YgdGhlICgxLiArIDFlLTcpIHBhcnRcclxuICAgICAgICAgKi9cclxuICAgIH1cclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVVNFX1JURVxyXG4gICAgaGlnaHAgdmVjNCBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2xvdywgaW4gaGlnaHAgdmVjMyBwb3NpdGlvbl9oaWdoLCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9fbG93LCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9faGlnaCl7XHJcbiAgICAgICAgLyogXHJcbiAgICAgICAgU291cmNlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXJ0dWFsZ2xvYmVib29rL09wZW5HbG9iZS9ibG9iL21hc3Rlci9Tb3VyY2UvRXhhbXBsZXMvQ2hhcHRlcjA1L0ppdHRlci9HUFVSZWxhdGl2ZVRvRXllRFNGVU45MC9TaGFkZXJzL1ZTLmdsc2wgXHJcbiAgICAgICAgTm90ZSBoZXJlLCB3ZSdyZSBzdG9yaW5nIHRoZSBoaWdoIHBhcnQgb2YgdGhlIHBvc2l0aW9uIGVuY29kaW5nIGluc2lkZSB0aHJlZSdzIGRlZmF1bHQgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgYnVmZmVyIHNvIHdlIGF2b2lkIHJlZHVuZGFuY3kgXHJcbiAgICAgICAgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQxID0gcG9zaXRpb25fbG93Lnh5eiAtIHJlbGF0aXZlVG9fbG93Lnh5ejtcclxuICAgICAgICBoaWdocCB2ZWMzIGUgPSB0MSAtIHBvc2l0aW9uX2xvdy54eXo7XHJcbiAgICAgICAgLyoqIFRoaXMgaXMgcmVkdW5hbnQsIGJ1dCBuZWNlc3NhcnkgYXMgYSB3b3JrYXJvdW5kIGZvciBBcHBsZSBwbGF0Zm9ybXMgKi9cclxuICAgICAgICBoaWdocCBmbG9hdCB4ID0gcG9zaXRpb25faGlnaC54IC0gcmVsYXRpdmVUb19oaWdoLng7XHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeSA9IHBvc2l0aW9uX2hpZ2gueSAtIHJlbGF0aXZlVG9faGlnaC55O1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHogPSBwb3NpdGlvbl9oaWdoLnogLSByZWxhdGl2ZVRvX2hpZ2guejtcclxuICAgICAgICBoaWdocCB2ZWMzIHYgPSB2ZWMzKHgsIHksIHopO1xyXG4gICAgICAgIC8qKiBFbmQgb2YgcmVkdW5kYW50IHBhcnQgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQyID0gKCgtcmVsYXRpdmVUb19sb3cgLSBlKSArIChwb3NpdGlvbl9sb3cueHl6IC0gKHQxIC0gZSkpKSArIHY7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBoaWdoRGlmZmVyZW5jZSA9IHQxICsgdDI7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBsb3dEaWZmZXJlbmNlID0gdDIgLSAoaGlnaERpZmZlcmVuY2UueHl6IC0gdDEueHl6KTtcclxuICAgICAgICBcclxuICAgICAgICBoaWdocCB2ZWMzIHBvc2l0aW9uID0gaGlnaERpZmZlcmVuY2UueHl6ICsgbG93RGlmZmVyZW5jZS54eXo7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQocG9zaXRpb24sIDEuKTtcclxuICAgIH1cclxuI2VuZGlmXHJcblxyXG5cclxudm9pZCBtYWluKCkge1xyXG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cclxuICAgICNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XHJcblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcclxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XHJcblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XHJcblx0I2VuZGlmXHJcbiAgICAvLyAjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+IC8vIENPTU1FTlRFRCBDSFVOS1xyXG4gICAgdmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDtcclxuICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG5cclxuICAgICAgICAvLyB0aGlzIGlzIGluIGxpZXUgb2YgYSBwZXItaW5zdGFuY2Ugbm9ybWFsLW1hdHJpeFxyXG4gICAgICAgIC8vIHNoZWFyIHRyYW5zZm9ybXMgaW4gdGhlIGluc3RhbmNlIG1hdHJpeCBhcmUgbm90IHN1cHBvcnRlZFxyXG4gICAgICAgIG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XHJcbiAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8qIElmIHdlIGhhdmUgbmVnYXRpdmUgc2NhbGluZywgd2UgZmxpcCB0aGUgbm9ybWFsICovXHJcbiAgICAgICAgZmxvYXQgc2lnbkRldCA9IHNpZ24oZG90KG1bMF0sIGNyb3NzKG1bMV0sIG1bMl0pKSk7XHJcbiAgICAgICAgLy8gT3B0aW9uYWwgZmFsbGJhY2s6IHRyZWF0IDAgYXMgKzFcclxuICAgICAgICBzaWduRGV0ID0gc2lnbkRldCArICgxLjAgLSBhYnMoc2lnbkRldCkpO1xyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsICo9IHNpZ25EZXQ7XHJcbiAgICAjZW5kaWZcclxuICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAjaWZkZWYgRkxJUF9TSURFRFxyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICNlbmRpZlxyXG4gICAgI2lmZGVmIFVTRV9UQU5HRU5UXHJcbiAgICAgICAgdmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xyXG4gICAgICAgICNpZmRlZiBGTElQX1NJREVEXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgI2VuZGlmXHJcblx0I2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XHJcblx0Ly8jaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+IC8vIEVESVRFRCBDSFVOS1xyXG4gICAgI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICAgICAgdmVjNCB0UXVhdGVybmlvbiwgdFBpdm90TG93LCB0UGl2b3RIaWdoLCB0VHJhbnNsYXRpb24sIHRTY2FsZTtcclxuICAgICAgICBvYmplY3RUcmFuc2Zvcm0odFF1YXRlcm5pb24sIHRQaXZvdExvdywgdFBpdm90SGlnaCwgdFRyYW5zbGF0aW9uLCB0U2NhbGUpO1xyXG4gICAgI2VuZGlmXHJcbiAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgIHZlYzQgcG9zaXRpb25fbG93VCA9IHZlYzQocG9zaXRpb25fbG93LCAxLik7XHJcbiAgICAgICAgdmVjNCBwb3NpdGlvbl9oaWdoVCA9IHZlYzQocG9zaXRpb24sIDEuKTtcclxuICAgICAgICBjb25zdCB2ZWMzIFpFUk8zID0gdmVjMygwLiwgMC4sIDAuKTtcclxuXHJcbiAgICAgICAgaGlnaHAgdmVjNCBydGVMb2NhbFBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24ocG9zaXRpb25fbG93VC54eXosIHBvc2l0aW9uX2hpZ2hULnh5eiwgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICAgICAgICAgIGhpZ2hwIHZlYzQgcnRlUGl2b3QgPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbih0UGl2b3RMb3cueHl6LCB0UGl2b3RIaWdoLnh5eiwgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgIHJ0ZUxvY2FsUG9zaXRpb24ueHl6ID0gcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEocnRlTG9jYWxQb3NpdGlvbiwgcnRlUGl2b3QsIHRTY2FsZSwgdFF1YXRlcm5pb24pICsgcnRlUGl2b3QueHl6ICsgdFRyYW5zbGF0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuICAgICAgICAgICAgdmVjNCBpbnN0YW5jZVBpdm90ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oWkVSTzMsIFpFUk8zLCB1Vmlld2VyX2xvdywgdVZpZXdlcl9oaWdoKTtcclxuICAgICAgICAgICAgcnRlTG9jYWxQb3NpdGlvbi54eXogPSAobWF0MyhpbnN0YW5jZU1hdHJpeCkgKiAocnRlTG9jYWxQb3NpdGlvbiAtIGluc3RhbmNlUGl2b3QpLnh5eikgKyBpbnN0YW5jZVBpdm90Lnh5eiArIGluc3RhbmNlTWF0cml4WzNdLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZmRlZiBVU0VfUlRFXHJcbiAgICAgICAgdmVjNCBtdlBvc2l0aW9uID0gcnRlTG9jYWxQb3NpdGlvbjtcclxuICAgICNlbHNlXHJcbiAgICAgICAgdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xyXG4gICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICBtdlBvc2l0aW9uLnh5eiA9IHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKG12UG9zaXRpb24sIHRQaXZvdEhpZ2gsIHRTY2FsZSwgdFF1YXRlcm5pb24pICsgdFBpdm90SGlnaC54eXogKyB0VHJhbnNsYXRpb24ueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG4gICAgICAgICAgICBtdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgI2VuZGlmXHJcbiAgIFxyXG4gICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICBtdlBvc2l0aW9uID0gcnRlTW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICNlbHNlXHJcbiAgICAgICAgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgI2lmZGVmIExJTkVBUl9ERVBUSFxyXG4gICAgICAgIHZWaWV3UG9zaXRpb24gPSBtdlBvc2l0aW9uO1xyXG4gICAgI2VuZGlmIFxyXG4gICAgdk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcclxuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XHJcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cclxuXHQvLyAjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cclxuICAgICNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxyXG5cdCAgICB2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcclxuICAgICNlbmRpZlxyXG5cdHZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dztcclxufVxyXG5gXHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlRGVwdGhOb3JtYWxGcmFnID0gLyogZ2xzbCAqLyBgXHJcbiNpZiBfX1ZFUlNJT05fXyA9PSAxMDBcclxuICAgICNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmVcclxuI2VuZGlmXHJcblxyXG4jaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXHJcblx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xyXG4jZW5kaWZcclxuI2lmZGVmIExJTkVBUl9ERVBUSFxyXG4gICAgdmFyeWluZyB2ZWM0IHZWaWV3UG9zaXRpb247XHJcblx0dW5pZm9ybSBmbG9hdCBuZWFyO1xyXG5cdHVuaWZvcm0gZmxvYXQgZmFyO1xyXG4jZW5kaWZcclxuI2luY2x1ZGUgPGNvbW1vbj5cclxuI2luY2x1ZGUgPHBhY2tpbmc+XHJcbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XHJcbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xyXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcclxuXHJcbiNpZiBfX1ZFUlNJT05fXyA9PSAzMDBcclxuICAgIGxheW91dChsb2NhdGlvbiA9IDEpIG91dCB2ZWM0IGdOb3JtYWw7XHJcbiNlbmRpZlxyXG5cclxudm9pZCBtYWluKCkge1xyXG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XHJcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcclxuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXHJcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XHJcblx0I2VuZGlmXHJcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XHJcblx0Ly8gI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cclxuXHQjaWZkZWYgVVNFX0FMUEhBVEVTVFxyXG5cdFx0aWYgKCBkaWZmdXNlQ29sb3IuYSA8IGFscGhhVGVzdCApIGRpc2NhcmQ7XHJcblx0XHQvKiogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHJlamVjdGluZyBzaGFkb3dzIGZvciBjZXJ0YWluIG1hdGVyaWFscywgc2luY2UgdGhyZWUuanMgZ2F2ZSBtZSBubyBjaG9pY2UqL1xyXG5cdFx0I2lmZGVmIEFMUEhBVEVTVF9SRUpFQ1RJT05cclxuXHRcdFx0aWYgKGFscGhhVGVzdCA+IDAuICkgZGlzY2FyZDtcclxuXHRcdCNlbmRpZlxyXG5cdCNlbmRpZlxyXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cclxuICAgIHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7XHJcblxyXG4gICAgLyoqIE91dHB1dCB2aWV3IHNwYWNlIG5vcm1hbHMqL1xyXG4gICAgXHJcbiAgICB2ZWM0IG91dE5vcm1hbCA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIDEuMCApO1xyXG4gICAgdmVjNCBvdXREZXB0aDtcclxuXHQvLyBIaWdoZXIgcHJlY2lzaW9uIGVxdWl2YWxlbnQgb2YgZ2xfRnJhZ0Nvb3JkLnouIFRoaXMgYXNzdW1lcyBkZXB0aFJhbmdlIGhhcyBiZWVuIGxlZnQgdG8gaXRzIGRlZmF1bHQgdmFsdWVzLlxyXG5cdCNpZmRlZiBMSU5FQVJfREVQVEhcclxuXHRcdC8qKiBWaWV3IHogaXMgbmVnYXRpdmUgbW92aW5nIGF3YXkgZnJvbSB0aGUgY2FtZXJhICovXHJcblx0XHRvdXREZXB0aCA9IHBhY2tEZXB0aFRvUkdCQSgodlZpZXdQb3NpdGlvbi56ICsgbmVhcikgLyAobmVhciAtIGZhcikpO1xyXG5cdCNlbHNlXHJcblx0XHRmbG9hdCBmcmFnQ29vcmRaID0gKDAuNSAqIHZIaWdoUHJlY2lzaW9uWldbMF0gLyB2SGlnaFByZWNpc2lvblpXWzFdICsgMC41KTtcclxuXHRcdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcclxuXHRcdFx0b3V0RGVwdGggPSB2ZWM0KCB2ZWMzKCAxLjAgLSBmcmFnQ29vcmRaICksIG9wYWNpdHkgKTtcclxuXHRcdCNlbGlmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMVxyXG5cdFx0XHRvdXREZXB0aCA9IHBhY2tEZXB0aFRvUkdCQSggZnJhZ0Nvb3JkWiApO1xyXG5cdFx0I2VuZGlmXHJcblx0I2VuZGlmXHJcbiAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgcGNfZnJhZ0NvbG9yID0gb3V0RGVwdGg7XHJcbiAgICAgICAgZ05vcm1hbCA9IG91dE5vcm1hbDtcclxuICAgICNlbHNlXHJcbiAgICAgICAgZ2xfRnJhZ0RhdGFbMF0gPSBvdXREZXB0aDtcclxuICAgICAgICBnbF9GcmFnRGF0YVsxXSA9IG91dE5vcm1hbDtcclxuICAgICNlbmRpZlxyXG59XHJcbmBcclxuIiwiaW1wb3J0IHsgc3BlY2tsZURlcHRoTm9ybWFsVmVydCB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLWRlcHRoLW5vcm1hbC12ZXJ0LmpzJ1xyXG5pbXBvcnQgeyBzcGVja2xlRGVwdGhOb3JtYWxGcmFnIH0gZnJvbSAnLi9zaGFkZXJzL3NwZWNrbGUtZGVwdGgtbm9ybWFsLWZyYWcuanMnXHJcbmltcG9ydCBTcGVja2xlRGVwdGhNYXRlcmlhbCBmcm9tICcuL1NwZWNrbGVEZXB0aE1hdGVyaWFsLmpzJ1xyXG5cclxuY2xhc3MgU3BlY2tsZURlcHRoTm9ybWFsTWF0ZXJpYWwgZXh0ZW5kcyBTcGVja2xlRGVwdGhNYXRlcmlhbCB7XHJcbiAgcHJvdGVjdGVkIGdldCB2ZXJ0ZXhQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZURlcHRoTm9ybWFsVmVydFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBmcmFnbWVudFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlRGVwdGhOb3JtYWxGcmFnXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVja2xlRGVwdGhOb3JtYWxNYXRlcmlhbFxyXG4iLCJpbXBvcnQge1xyXG4gIERvdWJsZVNpZGUsXHJcbiAgTWF0ZXJpYWwsXHJcbiAgTmVhcmVzdEZpbHRlcixcclxuICBOb0JsZW5kaW5nLFxyXG4gIE9ydGhvZ3JhcGhpY0NhbWVyYSxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBQbGFuZSxcclxuICBSR0JBRGVwdGhQYWNraW5nLFxyXG4gIFNjZW5lLFxyXG4gIFRleHR1cmUsXHJcbiAgV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsXHJcbiAgV2ViR0xSZW5kZXJlcixcclxuICBXZWJHTFJlbmRlclRhcmdldFxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBCYXNlR1Bhc3MgfSBmcm9tICcuL0dQYXNzLmpzJ1xyXG5pbXBvcnQgeyBQaXBlbGluZSB9IGZyb20gJy4uL1BpcGVsaW5lcy9QaXBlbGluZS5qcydcclxuaW1wb3J0IHsgRGVmYXVsdERlcHRoUGFzc09wdGlvbnMsIERlcHRoUGFzc09wdGlvbnMsIERlcHRoVHlwZSB9IGZyb20gJy4vRGVwdGhQYXNzLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZURlcHRoTm9ybWFsTWF0ZXJpYWwgZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL1NwZWNrbGVEZXB0aE5vcm1hbE1hdGVyaWFsLmpzJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXB0aE5vcm1hbFBhc3NPcHRpb25zIGV4dGVuZHMgRGVwdGhQYXNzT3B0aW9ucyB7fVxyXG5cclxuZXhwb3J0IGNvbnN0IERlZmF1bHREZXB0aE5vcm1hbFBhc3NPcHRpb25zOiBSZXF1aXJlZDxEZXB0aE5vcm1hbFBhc3NPcHRpb25zPiA9IHtcclxuICAuLi5EZWZhdWx0RGVwdGhQYXNzT3B0aW9uc1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGVwdGhOb3JtYWxQYXNzIGV4dGVuZHMgQmFzZUdQYXNzIHtcclxuICBwcm90ZWN0ZWQgbXJ0TWF0ZXJpYWw6IFNwZWNrbGVEZXB0aE5vcm1hbE1hdGVyaWFsXHJcbiAgcHJvdGVjdGVkIG1ydDogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHNcclxuXHJcbiAgcHVibGljIF9vcHRpb25zOiBSZXF1aXJlZDxEZXB0aE5vcm1hbFBhc3NPcHRpb25zPiA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICB7fSxcclxuICAgIERlZmF1bHREZXB0aE5vcm1hbFBhc3NPcHRpb25zXHJcbiAgKVxyXG5cclxuICBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnREVQVEgtTk9STUFMJ1xyXG4gIH1cclxuXHJcbiAgZ2V0IG92ZXJyaWRlTWF0ZXJpYWwoKTogTWF0ZXJpYWwge1xyXG4gICAgcmV0dXJuIHRoaXMubXJ0TWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIGdldCBkZXB0aFRleHR1cmUoKTogVGV4dHVyZSB7XHJcbiAgICByZXR1cm4gdGhpcy5tcnQudGV4dHVyZVswXVxyXG4gIH1cclxuXHJcbiAgZ2V0IG5vcm1hbFRleHR1cmUoKTogVGV4dHVyZSB7XHJcbiAgICByZXR1cm4gdGhpcy5tcnQudGV4dHVyZVsxXVxyXG4gIH1cclxuXHJcbiAgZ2V0IG91dHB1dFRhcmdldCgpOiBXZWJHTFJlbmRlclRhcmdldCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMubXJ0IGFzIHVua25vd24gYXMgV2ViR0xSZW5kZXJUYXJnZXRcclxuICB9XHJcblxyXG4gIHNldCBvdXRwdXRUYXJnZXQodGFyZ2V0OiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cykge1xyXG4gICAgdGhpcy5tcnQgPSB0YXJnZXRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3B0aW9ucyh2YWx1ZTogRGVwdGhOb3JtYWxQYXNzT3B0aW9ucykge1xyXG4gICAgc3VwZXIub3B0aW9ucyA9IHZhbHVlXHJcbiAgICB0aGlzLmRlcHRoVHlwZSA9IHRoaXMuX29wdGlvbnMuZGVwdGhUeXBlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0IGRlcHRoVHlwZSh2YWx1ZTogRGVwdGhUeXBlKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IERlcHRoVHlwZS5MSU5FQVJfREVQVEgpXHJcbiAgICAgIGlmICh0aGlzLm1ydE1hdGVyaWFsLmRlZmluZXMpIHtcclxuICAgICAgICB0aGlzLm1ydE1hdGVyaWFsLmRlZmluZXNbJ0xJTkVBUl9ERVBUSCddID0gJyAnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMubXJ0TWF0ZXJpYWwuZGVmaW5lcykge1xyXG4gICAgICAgICAgZGVsZXRlIHRoaXMubXJ0TWF0ZXJpYWwuZGVmaW5lc1snTElORUFSX0RFUFRIJ11cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIHRoaXMubXJ0TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuXHJcbiAgICB0aGlzLm1ydCA9IFBpcGVsaW5lLmNyZWF0ZU11bHRpcGxlUmVuZGVyVGFyZ2V0KDIsIHtcclxuICAgICAgbWluRmlsdGVyOiBOZWFyZXN0RmlsdGVyLFxyXG4gICAgICBtYWdGaWx0ZXI6IE5lYXJlc3RGaWx0ZXJcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5tcnRNYXRlcmlhbCA9IG5ldyBTcGVja2xlRGVwdGhOb3JtYWxNYXRlcmlhbChcclxuICAgICAge1xyXG4gICAgICAgIGRlcHRoUGFja2luZzogUkdCQURlcHRoUGFja2luZ1xyXG4gICAgICB9LFxyXG4gICAgICBbJ0FMUEhBVEVTVF9SRUpFQ1RJT04nXVxyXG4gICAgKVxyXG4gICAgdGhpcy5tcnRNYXRlcmlhbC5ibGVuZGluZyA9IE5vQmxlbmRpbmdcclxuICAgIHRoaXMubXJ0TWF0ZXJpYWwuc2lkZSA9IERvdWJsZVNpZGVcclxuICAgIHRoaXMuZGVwdGhUeXBlID0gdGhpcy5fb3B0aW9ucy5kZXB0aFR5cGVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDbGlwcGluZ1BsYW5lcyhwbGFuZXM6IFBsYW5lW10pIHtcclxuICAgIHRoaXMubXJ0TWF0ZXJpYWwuY2xpcHBpbmdQbGFuZXMgPSBwbGFuZXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGUoY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSB8IE9ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgdGhpcy5tcnRNYXRlcmlhbC51c2VyRGF0YS5uZWFyLnZhbHVlID0gY2FtZXJhLm5lYXJcclxuICAgIHRoaXMubXJ0TWF0ZXJpYWwudXNlckRhdGEuZmFyLnZhbHVlID0gY2FtZXJhLmZhclxyXG4gICAgdGhpcy5tcnRNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXIoXHJcbiAgICByZW5kZXJlcjogV2ViR0xSZW5kZXJlcixcclxuICAgIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEgfCBudWxsLFxyXG4gICAgc2NlbmU/OiBTY2VuZVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjYW1lcmEgfHwgIXNjZW5lKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICBpZiAodGhpcy5vbkJlZm9yZVJlbmRlcikgdGhpcy5vbkJlZm9yZVJlbmRlcigpXHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMubXJ0KVxyXG5cclxuICAgIHRoaXMuYXBwbHlMYXllcnMoY2FtZXJhKVxyXG5cclxuICAgIHRoaXMuY2xlYXIocmVuZGVyZXIpXHJcblxyXG4gICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpXHJcblxyXG4gICAgaWYgKHRoaXMub25BZnRlclJlbmRlcikgdGhpcy5vbkFmdGVyUmVuZGVyKClcclxuXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLm1ydC5zZXRTaXplKHdpZHRoLCBoZWlnaHQpXHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlRGVwdGhOb3JtYWxJZEZyYWcgPSAvKiBnbHNsICovIGBcclxuI2lmIF9fVkVSU0lPTl9fID09IDEwMFxyXG4gICAgI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZVxyXG4jZW5kaWZcclxuXHJcbiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcclxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XHJcbiNlbmRpZlxyXG4jaWZkZWYgTElORUFSX0RFUFRIXHJcbiAgICB2YXJ5aW5nIHZlYzQgdlZpZXdQb3NpdGlvbjtcclxuXHR1bmlmb3JtIGZsb2F0IG5lYXI7XHJcblx0dW5pZm9ybSBmbG9hdCBmYXI7XHJcbiNlbmRpZlxyXG4jaW5jbHVkZSA8Y29tbW9uPlxyXG4jaW5jbHVkZSA8cGFja2luZz5cclxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cclxudmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7XHJcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xyXG5cclxudmFyeWluZyB2ZWMzIHZJZENvbG9yO1xyXG5cclxuI2lmIF9fVkVSU0lPTl9fID09IDMwMFxyXG4gICAgbGF5b3V0KGxvY2F0aW9uID0gMSkgb3V0IHZlYzQgZ05vcm1hbDtcclxuICAgIGxheW91dChsb2NhdGlvbiA9IDIpIG91dCB2ZWM0IGdJZDtcclxuI2VuZGlmXHJcblxyXG52b2lkIG1haW4oKSB7XHJcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cclxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xyXG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcclxuXHRcdGRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTtcclxuXHQjZW5kaWZcclxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cclxuXHQvLyAjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxyXG5cdCNpZmRlZiBVU0VfQUxQSEFURVNUXHJcblx0XHRpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDtcclxuXHRcdC8qKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgcmVqZWN0aW5nIHNoYWRvd3MgZm9yIGNlcnRhaW4gbWF0ZXJpYWxzLCBzaW5jZSB0aHJlZS5qcyBnYXZlIG1lIG5vIGNob2ljZSovXHJcblx0XHQjaWZkZWYgQUxQSEFURVNUX1JFSkVDVElPTlxyXG5cdFx0XHRpZiAoYWxwaGFUZXN0ID4gMC4gKSBkaXNjYXJkO1xyXG5cdFx0I2VuZGlmXHJcblx0I2VuZGlmXHJcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxyXG4gICAgdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcclxuXHJcbiAgICAvKiogT3V0cHV0IHZpZXcgc3BhY2Ugbm9ybWFscyovXHJcbiAgICBcclxuICAgIHZlYzQgb3V0Tm9ybWFsID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgMS4wICk7XHJcbiAgICB2ZWM0IG91dERlcHRoO1xyXG5cdC8vIEhpZ2hlciBwcmVjaXNpb24gZXF1aXZhbGVudCBvZiBnbF9GcmFnQ29vcmQuei4gVGhpcyBhc3N1bWVzIGRlcHRoUmFuZ2UgaGFzIGJlZW4gbGVmdCB0byBpdHMgZGVmYXVsdCB2YWx1ZXMuXHJcblx0I2lmZGVmIExJTkVBUl9ERVBUSFxyXG5cdFx0LyoqIFZpZXcgeiBpcyBuZWdhdGl2ZSBtb3ZpbmcgYXdheSBmcm9tIHRoZSBjYW1lcmEgKi9cclxuXHRcdG91dERlcHRoID0gcGFja0RlcHRoVG9SR0JBKCh2Vmlld1Bvc2l0aW9uLnogKyBuZWFyKSAvIChuZWFyIC0gZmFyKSk7XHJcblx0I2Vsc2VcclxuXHRcdGZsb2F0IGZyYWdDb29yZFogPSAoMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjUpO1xyXG5cdFx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxyXG5cdFx0XHRvdXREZXB0aCA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xyXG5cdFx0I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXHJcblx0XHRcdG91dERlcHRoID0gcGFja0RlcHRoVG9SR0JBKCBmcmFnQ29vcmRaICk7XHJcblx0XHQjZW5kaWZcclxuXHQjZW5kaWZcclxuICAgICNpZiBfX1ZFUlNJT05fXyA9PSAzMDBcclxuICAgICAgICBwY19mcmFnQ29sb3IgPSBvdXREZXB0aDtcclxuICAgICAgICBnTm9ybWFsID0gb3V0Tm9ybWFsO1xyXG4gICAgICAgIGdJZCA9IHZlYzQodklkQ29sb3IsIDEuMCk7XHJcbiAgICAjZWxzZVxyXG4gICAgICAgIGdsX0ZyYWdEYXRhWzBdID0gb3V0RGVwdGg7XHJcbiAgICAgICAgZ2xfRnJhZ0RhdGFbMV0gPSBvdXROb3JtYWw7XHJcbiAgICAgICAgZ2xfRnJhZ0RhdGFbMl0gPSB2ZWM0KHZJZENvbG9yLCAxLjApO1xyXG4gICAgI2VuZGlmXHJcbn1cclxuYFxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZURlcHRoTm9ybWFsSWRWZXJ0ID0gLyogZ2xzbCAqLyBgXHJcbiNpbmNsdWRlIDxjb21tb24+XHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICAvLyBUaGUgaGlnaCBjb21wb25lbnQgaXMgc3RvcmVkIGFzIHRoZSBkZWZhdWx0ICdwb3NpdGlvbicgYXR0cmlidXRlIGJ1ZmZlclxyXG4gICAgYXR0cmlidXRlIHZlYzMgcG9zaXRpb25fbG93O1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfaGlnaDtcclxuICAgIHVuaWZvcm0gdmVjMyB1Vmlld2VyX2xvdztcclxuICAgIHVuaWZvcm0gbWF0NCBydGVNb2RlbFZpZXdNYXRyaXg7XHJcbiNlbmRpZlxyXG5cclxuI2lmIGRlZmluZWQoIFRSQU5TRk9STV9TVE9SQUdFICkgfHwgKCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lORyApICYmIF9fVkVSU0lPTl9fID09IDEwMClcclxuICAgIGF0dHJpYnV0ZSBmbG9hdCBvYmpJbmRleDtcclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICNpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAwXHJcbiAgICAgICAgI2lmIF9fVkVSU0lPTl9fID09IDMwMFxyXG4gICAgICAgICAgICAjZGVmaW5lIFRSQU5TRk9STV9TVFJJREUgNFxyXG4gICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICNkZWZpbmUgVFJBTlNGT1JNX1NUUklERSA0LlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHRUcmFuc2Zvcm1zO1xyXG4gICAgICAgIHVuaWZvcm0gZmxvYXQgb2JqQ291bnQ7XHJcbiAgICAjZWxpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAxXHJcbiAgICAgICAgdW5pZm9ybSBtYXQ0IHVUcmFuc2Zvcm1zW09CSl9DT1VOVF07XHJcbiAgICAjZW5kaWZcclxuI2VuZGlmXHJcblxyXG52YXJ5aW5nIHZlYzMgdklkQ29sb3I7XHJcbnVuaWZvcm0gaW50IGJhdGNoSW5kZXg7XHJcblxyXG4jaWZkZWYgTElORUFSX0RFUFRIXHJcbiAgICB2YXJ5aW5nIHZlYzQgdlZpZXdQb3NpdGlvbjtcclxuI2VuZGlmXHJcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xyXG5cclxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4PlxyXG4vLyBUaGlzIGlzIHVzZWQgZm9yIGNvbXB1dGluZyBhbiBlcXVpdmFsZW50IG9mIGdsX0ZyYWdDb29yZC56IHRoYXQgaXMgYXMgaGlnaCBwcmVjaXNpb24gYXMgcG9zc2libGUuXHJcbi8vIFNvbWUgcGxhdGZvcm1zIGNvbXB1dGUgZ2xfRnJhZ0Nvb3JkIGF0IGEgbG93ZXIgcHJlY2lzaW9uIHdoaWNoIG1ha2VzIHRoZSBtYW51YWxseSBjb21wdXRlZCB2YWx1ZSBiZXR0ZXIgZm9yXHJcbi8vIGRlcHRoLWJhc2VkIHBvc3Rwcm9jZXNzaW5nIGVmZmVjdHMuIFJlcHJvZHVjZWQgb24gaVBhZCB3aXRoIEExMCBwcm9jZXNzb3IgLyBpUGFkT1MgMTMuMy4xLlxyXG52YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVztcclxuXHJcbiNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgdm9pZCBvYmplY3RUcmFuc2Zvcm0ob3V0IHZlYzQgcXVhdGVybmlvbiwgb3V0IHZlYzQgcGl2b3RMb3csIG91dCB2ZWM0IHBpdm90SGlnaCwgb3V0IHZlYzQgdHJhbnNsYXRpb24sIG91dCB2ZWM0IHNjYWxlKXtcclxuICAgICAgICAjaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMFxyXG4gICAgICAgICAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgICAgICAgICBpdmVjMiB1diA9IGl2ZWMyKGludChvYmpJbmRleCkgKiBUUkFOU0ZPUk1fU1RSSURFLCAwKTsgXHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYwID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2LCAwICk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYxID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMSwgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MiA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDIsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjMgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigzLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uID0gdjA7XHJcbiAgICAgICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodjEueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHYyLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHYzLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHYxLncsIHYyLncsIHYzLncsIDEuKTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBvYmpDb3VudCAqIFRSQU5TRk9STV9TVFJJREU7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIGNVdiA9IHZlYzIoMC41L3NpemUsIDAuNSk7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIGRVdiA9IHZlYzIoMS4vc2l6ZSwgMC4pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB2ZWMyIHV2ID0gdmVjMigob2JqSW5kZXggKiBUUkFOU0ZPUk1fU1RSSURFKS9zaXplICsgY1V2LngsIGNVdi55KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjAgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1dik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYxID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyBkVXYpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MiA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2ICsgMi4gKiBkVXYpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MyA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2ICsgMy4gKiBkVXYpO1xyXG4gICAgICAgICAgICAgICAgcXVhdGVybmlvbiA9IHYwO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RMb3cgPSB2ZWM0KHYxLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RIaWdoID0gdmVjNCh2Mi54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh2My54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHNjYWxlID0gdmVjNCh2MS53LCB2Mi53LCB2My53LCAxLik7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbGlmIFRSQU5TRk9STV9TVE9SQUdFID09IDFcclxuICAgICAgICAgICAgbWF0NCB0TWF0cml4ID0gdVRyYW5zZm9ybXNbaW50KG9iakluZGV4KV07XHJcbiAgICAgICAgICAgIHF1YXRlcm5pb24gPSB0TWF0cml4WzBdO1xyXG4gICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodE1hdHJpeFsxXS54eXosIDEuKTtcclxuICAgICAgICAgICAgcGl2b3RIaWdoID0gdmVjNCh0TWF0cml4WzJdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodE1hdHJpeFszXS54eXosIDEuKTtcclxuICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHRNYXRyaXhbMV1bM10sIHRNYXRyaXhbMl1bM10sIHRNYXRyaXhbM11bM10sIDEuKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgIH1cclxuXHJcbiAgICB2ZWMzIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24odmVjMyBwb3NpdGlvbiwgdmVjNCBxdWF0KVxyXG4gICAgeyBcclxuICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uKSArIHF1YXQudyAqIHBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQW5vdGhlciB3b3JrYXJvdW5kIGZvciBBcHBsZSdzIHN0dXBpZCBjb21waWxlciAqL1xyXG4gICAgdmVjNCBzYWZlTXVsKHZlYzQgYSwgdmVjNCBiKSB7XHJcbiAgICAgICAgLy8gUHJldmVudHMgY29uc3RhbnQgZm9sZGluZyBhbmQgb3B0aW1pemF0aW9uXHJcbiAgICAgICAgcmV0dXJuIChhICsgdmVjNCgwLjApKSAqIChiICsgdmVjNCgxLjApKSAtIGEgKiB2ZWM0KDEuMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlnaHAgdmVjMyByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShoaWdocCB2ZWM0IHYwLCBoaWdocCB2ZWM0IHYxLCBoaWdocCB2ZWM0IHNjYWxlLCBoaWdocCB2ZWM0IHF1YXQpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqICEhISBXT1JLQVJPVU5EIEZPUiBJbnRlbCBJcmlzWGUgQ0FSRFMgISEhICovXHJcbiAgICAgICAgLyoqIFRoZSBjb2RlIGJlbG93IHdpbGwgbm90IHByb2R1Y2UgY29ycmVjdCByZXN1bHRzIGluIGludGVsIElyaXNYRSBpbnRlZ3JhdGVkIEdQVXMuIFxyXG4gICAgICAgICAqICBUaGUgZ2VvbWV0cnkgd2lsbCB0dXJuIG1hbmdsZWQsIGFsYmVpdCBzdGFibGVcclxuICAgICAgICAgKiAgSSBjYW4ndCBrbm93IGZvciBzdXJlIHdoYXQgaXMgZ29pbmcgb24sIGJ1dCByb3RhdGluZyB0aGUgZGlmZmVyZW5jZSBzZWVtcyB0byBcclxuICAgICAgICAgKiAgZm9yY2UgdGhlIHJlc3VsdCBpbnRvIGEgbG93ZXIgcHJlY2lzaW9uP1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIGhpZ2hwIHZlYzQgcG9zaXRpb24gPSB2MCAtIHYxO1xyXG4gICAgICAgIC8vIHJldHVybiBwb3NpdGlvbi54eXogKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uLnh5eikgKyBxdWF0LncgKiBwb3NpdGlvbi54eXopO1xyXG5cclxuICAgICAgICAvKiogU3VidHJhY3RpbmcgdGhlIHJvdGF0ZWQgdmVjdG9ycyB3b3Jrcy4gKi9cclxuICAgICAgICByZXR1cm4gcm90YXRlX3ZlcnRleF9wb3NpdGlvbihzYWZlTXVsKHYwLCBzY2FsZSkueHl6LCBxdWF0KSAgLSByb3RhdGVfdmVydGV4X3Bvc2l0aW9uKHNhZmVNdWwodjEsIHNjYWxlKS54eXosIHF1YXQpIDtcclxuXHJcbiAgICAgICAgLyoqIEFuIGFsdGVybmF0ZSB3b3JrYXJvdW5kIGlzXHJcbiAgICAgICAgICogaGlnaHAgdmVjMyBwb3NpdGlvbiA9ICh2MC54eXogKiAoMS4gKyAxZS03KSkgLSAodjEueHl6ICogKDEuICsgMWUtNykpO1xyXG4gICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24pICsgcXVhdC53ICogcG9zaXRpb24pO1xyXG5cclxuICAgICAgICAgICBIb3dldmVyIEknbSBub3Qgc3VjaCBhIGZhbiBvZiB0aGUgKDEuICsgMWUtNykgcGFydFxyXG4gICAgICAgICAqL1xyXG4gICAgfVxyXG4jZW5kaWZcclxuXHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICBoaWdocCB2ZWM0IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKGluIGhpZ2hwIHZlYzMgcG9zaXRpb25fbG93LCBpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2hpZ2gsIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19sb3csIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19oaWdoKXtcclxuICAgICAgICAvKiBcclxuICAgICAgICBTb3VyY2UgaHR0cHM6Ly9naXRodWIuY29tL3ZpcnR1YWxnbG9iZWJvb2svT3Blbkdsb2JlL2Jsb2IvbWFzdGVyL1NvdXJjZS9FeGFtcGxlcy9DaGFwdGVyMDUvSml0dGVyL0dQVVJlbGF0aXZlVG9FeWVEU0ZVTjkwL1NoYWRlcnMvVlMuZ2xzbCBcclxuICAgICAgICBOb3RlIGhlcmUsIHdlJ3JlIHN0b3JpbmcgdGhlIGhpZ2ggcGFydCBvZiB0aGUgcG9zaXRpb24gZW5jb2RpbmcgaW5zaWRlIHRocmVlJ3MgZGVmYXVsdCAncG9zaXRpb24nIGF0dHJpYnV0ZSBidWZmZXIgc28gd2UgYXZvaWQgcmVkdW5kYW5jeSBcclxuICAgICAgICAqL1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdDEgPSBwb3NpdGlvbl9sb3cueHl6IC0gcmVsYXRpdmVUb19sb3cueHl6O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgZSA9IHQxIC0gcG9zaXRpb25fbG93Lnh5ejtcclxuICAgICAgICAvKiogVGhpcyBpcyByZWR1bmFudCwgYnV0IG5lY2Vzc2FyeSBhcyBhIHdvcmthcm91bmQgZm9yIEFwcGxlIHBsYXRmb3JtcyAqL1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHggPSBwb3NpdGlvbl9oaWdoLnggLSByZWxhdGl2ZVRvX2hpZ2gueDtcclxuICAgICAgICBoaWdocCBmbG9hdCB5ID0gcG9zaXRpb25faGlnaC55IC0gcmVsYXRpdmVUb19oaWdoLnk7XHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeiA9IHBvc2l0aW9uX2hpZ2gueiAtIHJlbGF0aXZlVG9faGlnaC56O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdiA9IHZlYzMoeCwgeSwgeik7XHJcbiAgICAgICAgLyoqIEVuZCBvZiByZWR1bmRhbnQgcGFydCAqL1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdDIgPSAoKC1yZWxhdGl2ZVRvX2xvdyAtIGUpICsgKHBvc2l0aW9uX2xvdy54eXogLSAodDEgLSBlKSkpICsgdjtcclxuICAgICAgICBoaWdocCB2ZWMzIGhpZ2hEaWZmZXJlbmNlID0gdDEgKyB0MjtcclxuICAgICAgICBoaWdocCB2ZWMzIGxvd0RpZmZlcmVuY2UgPSB0MiAtIChoaWdoRGlmZmVyZW5jZS54eXogLSB0MS54eXopO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGhpZ2hwIHZlYzMgcG9zaXRpb24gPSBoaWdoRGlmZmVyZW5jZS54eXogKyBsb3dEaWZmZXJlbmNlLnh5ejtcclxuICAgICAgICByZXR1cm4gdmVjNChwb3NpdGlvbiwgMS4pO1xyXG4gICAgfVxyXG4jZW5kaWZcclxuXHJcblxyXG4vKiogT3JpZ2luYWwgZ2xzbDEwMCBhbmQgZ2xzbDMwMCBoYXNoIGZ1bmN0aW9ucy4gR29vZCBvdXRwdXRzIGJ1dCBtYXliZSBhIGJpdCBzbG93PyAqL1xyXG4vKlxyXG4jaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICB2ZWMzIGhhc2hDb2xvcih1aW50IGlkKSB7XHJcbiAgICAgICAgLy8gQSBzaW1wbGUgaW50ZWdlciBoYXNoIGZ1bmN0aW9uXHJcbiAgICAgICAgaWQgPSAoaWQgXiA2MXUpIF4gKGlkID4+IDE2dSk7XHJcbiAgICAgICAgaWQgPSBpZCAqIDl1O1xyXG4gICAgICAgIGlkID0gaWQgXiAoaWQgPj4gNHUpO1xyXG4gICAgICAgIGlkID0gaWQgKiAweDI3ZDRlYjJkdTtcclxuICAgICAgICBpZCA9IGlkIF4gKGlkID4+IDE1dSk7XHJcblxyXG4gICAgICAgIHJldHVybiB2ZWMzKFxyXG4gICAgICAgICAgICBmbG9hdCgoaWQgPj4gMTZ1KSAmIDB4RkZ1KSAvIDI1NS4wLFxyXG4gICAgICAgICAgICBmbG9hdCgoaWQgPj4gOHUpICYgMHhGRnUpIC8gMjU1LjAsXHJcbiAgICAgICAgICAgIGZsb2F0KGlkICYgMHhGRnUpIC8gMjU1LjBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4jZWxpZiBfX1ZFUlNJT05fXyA9PSAxMDBcclxuICAgIHZlYzMgaGFzaENvbG9yKGZsb2F0IGlkKSB7XHJcbiAgICAgICAgLy8gU3RlcCAxOiBTaW11bGF0ZSBYT1IgYnkgdXNpbmcgbW9kIGFuZCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljXHJcbiAgICAgICAgaWQgPSBtb2QoaWQgKyA2MS4wLCA0Mjk0OTY3Mjk2LjApO1xyXG4gICAgICAgIGlkID0gbW9kKGlkIC0gZmxvb3IoaWQgLyA2NTUzNi4wKSwgNDI5NDk2NzI5Ni4wKTsgLy8gQXBwcm94aW1hdGUgaWQgXiAoaWQgPj4gMTYpXHJcbiAgICAgICAgLy8gU3RlcCAyOiBNdWx0aXBseSBieSA5IChzYW1lIGFzIG9yaWdpbmFsKVxyXG4gICAgICAgIGlkID0gbW9kKGlkICogOS4wLCA0Mjk0OTY3Mjk2LjApO1xyXG4gICAgICAgIC8vIFN0ZXAgMzogU2ltdWxhdGUgWE9SIHdpdGggZGl2aXNpb24vbW9kIHRyaWNrXHJcbiAgICAgICAgaWQgPSBtb2QoaWQgLSBmbG9vcihpZCAvIDE2LjApLCA0Mjk0OTY3Mjk2LjApOyAvLyBBcHByb3hpbWF0ZSBpZCBeIChpZCA+PiA0KVxyXG4gICAgICAgIC8vIFN0ZXAgNDogTXVsdGlwbHkgYnkgbGFyZ2UgcHJpbWVcclxuICAgICAgICBpZCA9IG1vZChpZCAqIDY2NjA4MzQwNy4wLCA0Mjk0OTY3Mjk2LjApOyAvLyBBcHByb3hpbWF0ZSAqIDB4MjdkNGViMmRVXHJcbiAgICAgICAgLy8gU3RlcCA1OiBTaW11bGF0ZSBmaW5hbCBYT1JcclxuICAgICAgICBpZCA9IG1vZChpZCAtIGZsb29yKGlkIC8gMzI3NjguMCksIDQyOTQ5NjcyOTYuMCk7IC8vIEFwcHJveGltYXRlIGlkIF4gKGlkID4+IDE1KVxyXG4gICAgICAgIC8vIENvbnZlcnQgaGFzaCB0byBSR0IgYnkgZXh0cmFjdGluZyBcImZha2VcIiBiaXQgc2hpZnRzXHJcbiAgICAgICAgcmV0dXJuIHZlYzMoXHJcbiAgICAgICAgICAgIG1vZChmbG9vcihpZCAvIDY1NTM2LjApLCAyNTYuMCkgLyAyNTUuMCwgLy8gU2ltdWxhdGVzIChpZCA+PiAxNikgJiAweEZGXHJcbiAgICAgICAgICAgIG1vZChmbG9vcihpZCAvIDI1Ni4wKSwgMjU2LjApIC8gMjU1LjAsICAgLy8gU2ltdWxhdGVzIChpZCA+PiA4KSAmIDB4RkZcclxuICAgICAgICAgICAgbW9kKGlkLCAyNTYuMCkgLyAyNTUuMCAgICAgICAgICAgICAgICAgICAvLyBTaW11bGF0ZXMgaWQgJiAweEZGXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuI2VuZGlmXHJcbiovXHJcblxyXG4vKiogU2ltcGxlciBoYXNoIGZ1bmN0aW9uIHdvcmtzIG9uIGJvdGggZ2xzbCB2ZXJzaW9ucyAqL1xyXG5oaWdocCB2ZWMzIGhhc2hDb2xvcihmbG9hdCBpZCkge1xyXG4gICAgLy8gTGFyZ2UgcHJpbWUgbXVsdGlwbGllcnNcclxuICAgIGhpZ2hwIGZsb2F0IHIgPSBtb2QoaWQgKiAxMjcuMSwgMjU2LjApIC8gMjU1LjA7XHJcbiAgICBoaWdocCBmbG9hdCBnID0gbW9kKGlkICogOTg3LjY1NCwgMjU2LjApIC8gMjU1LjA7XHJcbiAgICBoaWdocCBmbG9hdCBiID0gbW9kKGlkICogNDMyMS4xMjMsIDI1Ni4wKSAvIDI1NS4wO1xyXG4gICAgXHJcbiAgICByZXR1cm4gdmVjMyhyLCBnLCBiKTtcclxufVxyXG5cclxuaW50IHN6dWR6aWtIYXNoKGludCB4LCBpbnQgeSkge1xyXG4gICAgcmV0dXJuICh4ID49IHkpID8gKHggKiB4ICsgeCArIHkpIDogKHkgKiB5ICsgeCk7XHJcbn1cclxuXHJcbnZvaWQgbWFpbigpIHtcclxuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XHJcbiAgICAjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxyXG5cdCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXHJcblx0XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxyXG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxyXG5cdCNlbmRpZlxyXG4gICAgLy8gI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PiAvLyBDT01NRU5URUQgQ0hVTktcclxuICAgIHZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XHJcbiAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbiBsaWV1IG9mIGEgcGVyLWluc3RhbmNlIG5vcm1hbC1tYXRyaXhcclxuICAgICAgICAvLyBzaGVhciB0cmFuc2Zvcm1zIGluIHRoZSBpbnN0YW5jZSBtYXRyaXggYXJlIG5vdCBzdXBwb3J0ZWRcclxuICAgICAgICBtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICBcclxuICAgICAgICAvKiBJZiB3ZSBoYXZlIG5lZ2F0aXZlIHNjYWxpbmcsIHdlIGZsaXAgdGhlIG5vcm1hbCAqL1xyXG4gICAgICAgIGZsb2F0IHNpZ25EZXQgPSBzaWduKGRvdChtWzBdLCBjcm9zcyhtWzFdLCBtWzJdKSkpO1xyXG4gICAgICAgIC8vIE9wdGlvbmFsIGZhbGxiYWNrOiB0cmVhdCAwIGFzICsxXHJcbiAgICAgICAgc2lnbkRldCA9IHNpZ25EZXQgKyAoMS4wIC0gYWJzKHNpZ25EZXQpKTtcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCAqPSBzaWduRGV0O1xyXG4gICAgI2VuZGlmXHJcbiAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgI2lmZGVmIEZMSVBfU0lERURcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAjZW5kaWZcclxuICAgICNpZmRlZiBVU0VfVEFOR0VOVFxyXG4gICAgICAgIHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcclxuICAgICAgICAjaWZkZWYgRkxJUF9TSURFRFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxyXG5cdC8vI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PiAvLyBFRElURUQgQ0hVTktcclxuICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgIHZlYzQgdFF1YXRlcm5pb24sIHRQaXZvdExvdywgdFBpdm90SGlnaCwgdFRyYW5zbGF0aW9uLCB0U2NhbGU7XHJcbiAgICAgICAgb2JqZWN0VHJhbnNmb3JtKHRRdWF0ZXJuaW9uLCB0UGl2b3RMb3csIHRQaXZvdEhpZ2gsIHRUcmFuc2xhdGlvbiwgdFNjYWxlKTtcclxuICAgICNlbmRpZlxyXG4gICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICB2ZWM0IHBvc2l0aW9uX2xvd1QgPSB2ZWM0KHBvc2l0aW9uX2xvdywgMS4pO1xyXG4gICAgICAgIHZlYzQgcG9zaXRpb25faGlnaFQgPSB2ZWM0KHBvc2l0aW9uLCAxLik7XHJcbiAgICAgICAgY29uc3QgdmVjMyBaRVJPMyA9IHZlYzMoMC4sIDAuLCAwLik7XHJcblxyXG4gICAgICAgIGhpZ2hwIHZlYzQgcnRlTG9jYWxQb3NpdGlvbiA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHBvc2l0aW9uX2xvd1QueHl6LCBwb3NpdGlvbl9oaWdoVC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgICAgICAgICBoaWdocCB2ZWM0IHJ0ZVBpdm90ID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24odFBpdm90TG93Lnh5eiwgdFBpdm90SGlnaC54eXosIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICBydGVMb2NhbFBvc2l0aW9uLnh5eiA9IHJvdGF0ZV9zY2FsZWRfdmVydGV4X3Bvc2l0aW9uX2RlbHRhKHJ0ZUxvY2FsUG9zaXRpb24sIHJ0ZVBpdm90LCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHJ0ZVBpdm90Lnh5eiArIHRUcmFuc2xhdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcbiAgICAgICAgICAgIHZlYzQgaW5zdGFuY2VQaXZvdCA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKFpFUk8zLCBaRVJPMywgdVZpZXdlcl9sb3csIHVWaWV3ZXJfaGlnaCk7XHJcbiAgICAgICAgICAgIHJ0ZUxvY2FsUG9zaXRpb24ueHl6ID0gKG1hdDMoaW5zdGFuY2VNYXRyaXgpICogKHJ0ZUxvY2FsUG9zaXRpb24gLSBpbnN0YW5jZVBpdm90KS54eXopICsgaW5zdGFuY2VQaXZvdC54eXogKyBpbnN0YW5jZU1hdHJpeFszXS54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWZkZWYgVVNFX1JURVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHJ0ZUxvY2FsUG9zaXRpb247XHJcbiAgICAjZWxzZVxyXG4gICAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcclxuICAgICAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICAgICAgbXZQb3NpdGlvbi54eXogPSByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShtdlBvc2l0aW9uLCB0UGl2b3RIaWdoLCB0U2NhbGUsIHRRdWF0ZXJuaW9uKSArIHRQaXZvdEhpZ2gueHl6ICsgdFRyYW5zbGF0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuICAgICAgICAgICAgbXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG4gICBcclxuICAgICNpZmRlZiBVU0VfUlRFXHJcbiAgICAgICAgbXZQb3NpdGlvbiA9IHJ0ZU1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAjZWxzZVxyXG4gICAgICAgIG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgI2VuZGlmXHJcbiAgICBcclxuICAgICNpZmRlZiBMSU5FQVJfREVQVEhcclxuICAgICAgICB2Vmlld1Bvc2l0aW9uID0gbXZQb3NpdGlvbjtcclxuICAgICNlbmRpZiBcclxuXHJcbiAgICB2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xyXG4gICAgXHJcbiAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICB2SWRDb2xvciA9IGhhc2hDb2xvcihmbG9hdChzenVkemlrSGFzaChpbnQob2JqSW5kZXgpLCBiYXRjaEluZGV4KSkpO1xyXG4gICAgI2Vsc2VcclxuICAgICAgICAjaWYgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkcgKSBcclxuICAgICAgICAgICAgI2lmIF9fVkVSU0lPTl9fID09IDMwMFxyXG4gICAgICAgICAgICAgICAgdklkQ29sb3IgPSBoYXNoQ29sb3IoZmxvYXQoc3p1ZHppa0hhc2goaW50KGdsX0luc3RhbmNlSUQpLCBiYXRjaEluZGV4KSkpO1xyXG4gICAgICAgICAgICAjZWxpZiBfX1ZFUlNJT05fXyA9PSAxMDBcclxuICAgICAgICAgICAgICAgIHZJZENvbG9yID0gaGFzaENvbG9yKGZsb2F0KHN6dWR6aWtIYXNoKGludChvYmpJbmRleCksIGJhdGNoSW5kZXgpKSk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgIHZJZENvbG9yID0gdmVjMygwLik7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuXHJcblxyXG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcclxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxyXG5cdC8vICNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxyXG4gICAgI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXHJcblx0ICAgIHZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xyXG4gICAgI2VuZGlmXHJcblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xyXG59XHJcbmBcclxuIiwiaW1wb3J0IHsgQnVmZmVyR2VvbWV0cnksIENhbWVyYSwgT2JqZWN0M0QsIFNjZW5lIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IFNwZWNrbGVXZWJHTFJlbmRlcmVyIH0gZnJvbSAnLi4vb2JqZWN0cy9TcGVja2xlV2ViR0xSZW5kZXJlci5qcydcclxuaW1wb3J0IHsgc3BlY2tsZURlcHRoTm9ybWFsSWRGcmFnIH0gZnJvbSAnLi9zaGFkZXJzL3NwZWNrbGUtZGVwdGgtbm9ybWFsLWlkLWZyYWcuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVEZXB0aE5vcm1hbElkVmVydCB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLWRlcHRoLW5vcm1hbC1pZC12ZXJ0LmpzJ1xyXG5pbXBvcnQgU3BlY2tsZURlcHRoTm9ybWFsTWF0ZXJpYWwgZnJvbSAnLi9TcGVja2xlRGVwdGhOb3JtYWxNYXRlcmlhbC5qcydcclxuaW1wb3J0IFNwZWNrbGVNZXNoIGZyb20gJy4uL29iamVjdHMvU3BlY2tsZU1lc2guanMnXHJcbmltcG9ydCB7IFVuaWZvcm1zIH0gZnJvbSAnLi9TcGVja2xlTWF0ZXJpYWwuanMnXHJcbmltcG9ydCB7IEV4dGVuZGVkSW5zdGFuY2VkTWVzaCB9IGZyb20gJy4uL29iamVjdHMvRXh0ZW5kZWRJbnN0YW5jZWRNZXNoLmpzJ1xyXG5cclxuY2xhc3MgU3BlY2tsZURlcHRoTm9ybWFsSWRNYXRlcmlhbCBleHRlbmRzIFNwZWNrbGVEZXB0aE5vcm1hbE1hdGVyaWFsIHtcclxuICBwcm90ZWN0ZWQgZ2V0IHZlcnRleFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlRGVwdGhOb3JtYWxJZFZlcnRcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgZnJhZ21lbnRQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZURlcHRoTm9ybWFsSWRGcmFnXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IHVuaWZvcm1zRGVmKCk6IFVuaWZvcm1zIHtcclxuICAgIHJldHVybiB7IC4uLnN1cGVyLnVuaWZvcm1zRGVmLCBiYXRjaEluZGV4OiAwIH1cclxuICB9XHJcblxyXG4gIG9uQmVmb3JlUmVuZGVyKFxyXG4gICAgX3RoaXM6IFNwZWNrbGVXZWJHTFJlbmRlcmVyLFxyXG4gICAgX3NjZW5lOiBTY2VuZSxcclxuICAgIF9jYW1lcmE6IENhbWVyYSxcclxuICAgIF9nZW9tZXRyeTogQnVmZmVyR2VvbWV0cnksXHJcbiAgICBvYmplY3Q6IE9iamVjdDNEXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5kZWZpbmVzICYmIHRoaXMuZGVmaW5lc1snVVNFX1JURSddKSB7XHJcbiAgICAgIG9iamVjdC5tb2RlbFZpZXdNYXRyaXguY29weShfdGhpcy5SVEVCdWZmZXJzLnJ0ZVZpZXdNb2RlbE1hdHJpeClcclxuICAgICAgdGhpcy51c2VyRGF0YS51Vmlld2VyX2xvdy52YWx1ZS5jb3B5KF90aGlzLlJURUJ1ZmZlcnMudmlld2VyTG93KVxyXG4gICAgICB0aGlzLnVzZXJEYXRhLnVWaWV3ZXJfaGlnaC52YWx1ZS5jb3B5KF90aGlzLlJURUJ1ZmZlcnMudmlld2VySGlnaClcclxuICAgICAgdGhpcy51c2VyRGF0YS5ydGVNb2RlbFZpZXdNYXRyaXgudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnJ0ZVZpZXdNb2RlbE1hdHJpeClcclxuICAgICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3BlY2tsZU1lc2ggfHwgb2JqZWN0IGluc3RhbmNlb2YgRXh0ZW5kZWRJbnN0YW5jZWRNZXNoKSB7XHJcbiAgICAgIHRoaXMudXNlckRhdGEuYmF0Y2hJbmRleC52YWx1ZSA9IG9iamVjdC5iYXRjaEluZGV4XHJcbiAgICAgIHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVja2xlRGVwdGhOb3JtYWxJZE1hdGVyaWFsXHJcbiIsImltcG9ydCB7IERvdWJsZVNpZGUsIE5lYXJlc3RGaWx0ZXIsIE5vQmxlbmRpbmcsIFJHQkFEZXB0aFBhY2tpbmcsIFRleHR1cmUgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgUGlwZWxpbmUgfSBmcm9tICcuLi9QaXBlbGluZXMvUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7XHJcbiAgRGVmYXVsdERlcHRoTm9ybWFsUGFzc09wdGlvbnMsXHJcbiAgRGVwdGhOb3JtYWxQYXNzLFxyXG4gIERlcHRoTm9ybWFsUGFzc09wdGlvbnNcclxufSBmcm9tICcuL0RlcHRoTm9ybWFsUGFzcy5qcydcclxuaW1wb3J0IFNwZWNrbGVEZXB0aE5vcm1hbElkTWF0ZXJpYWwgZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL1NwZWNrbGVEZXB0aE5vcm1hbElkTWF0ZXJpYWwuanMnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERlcHRoTm9ybWFsSWRQYXNzT3B0aW9ucyBleHRlbmRzIERlcHRoTm9ybWFsUGFzc09wdGlvbnMge31cclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0RGVwdGhOb3JtYWxJZFBhc3NPcHRpb25zOiBSZXF1aXJlZDxEZXB0aE5vcm1hbElkUGFzc09wdGlvbnM+ID0ge1xyXG4gIC4uLkRlZmF1bHREZXB0aE5vcm1hbFBhc3NPcHRpb25zXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEZXB0aE5vcm1hbElkUGFzcyBleHRlbmRzIERlcHRoTm9ybWFsUGFzcyB7XHJcbiAgcHVibGljIF9vcHRpb25zOiBSZXF1aXJlZDxEZXB0aE5vcm1hbFBhc3NPcHRpb25zPiA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICB7fSxcclxuICAgIERlZmF1bHREZXB0aE5vcm1hbElkUGFzc09wdGlvbnNcclxuICApXHJcblxyXG4gIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdERVBUSC1OT1JNQUwtSUQnXHJcbiAgfVxyXG5cclxuICBnZXQgaWRUZXh0dXJlKCk6IFRleHR1cmUge1xyXG4gICAgcmV0dXJuIHRoaXMubXJ0LnRleHR1cmVbMl1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3B0aW9ucyh2YWx1ZTogRGVwdGhOb3JtYWxJZFBhc3NPcHRpb25zKSB7XHJcbiAgICBzdXBlci5vcHRpb25zID0gdmFsdWVcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKVxyXG5cclxuICAgIHRoaXMubXJ0ID0gUGlwZWxpbmUuY3JlYXRlTXVsdGlwbGVSZW5kZXJUYXJnZXQoMywge1xyXG4gICAgICBtaW5GaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXHJcbiAgICAgIG1hZ0ZpbHRlcjogTmVhcmVzdEZpbHRlclxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLm1ydE1hdGVyaWFsID0gbmV3IFNwZWNrbGVEZXB0aE5vcm1hbElkTWF0ZXJpYWwoXHJcbiAgICAgIHtcclxuICAgICAgICBkZXB0aFBhY2tpbmc6IFJHQkFEZXB0aFBhY2tpbmdcclxuICAgICAgfSxcclxuICAgICAgWydBTFBIQVRFU1RfUkVKRUNUSU9OJ11cclxuICAgIClcclxuICAgIHRoaXMubXJ0TWF0ZXJpYWwuYmxlbmRpbmcgPSBOb0JsZW5kaW5nXHJcbiAgICB0aGlzLm1ydE1hdGVyaWFsLnNpZGUgPSBEb3VibGVTaWRlXHJcbiAgICB0aGlzLmRlcHRoVHlwZSA9IHRoaXMuX29wdGlvbnMuZGVwdGhUeXBlXHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBzcGVja2xlTm9ybWFsVmVydCA9IC8qIGdsc2wgKi8gYFxyXG4jZGVmaW5lIE5PUk1BTFxyXG4jaWZkZWYgVVNFX1JURVxyXG4gICAgLy8gVGhlIGhpZ2ggY29tcG9uZW50IGlzIHN0b3JlZCBhcyB0aGUgZGVmYXVsdCAncG9zaXRpb24nIGF0dHJpYnV0ZSBidWZmZXJcclxuICAgIGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uX2xvdztcclxuICAgIHVuaWZvcm0gdmVjMyB1Vmlld2VyX2hpZ2g7XHJcbiAgICB1bmlmb3JtIHZlYzMgdVZpZXdlcl9sb3c7XHJcbiNlbmRpZlxyXG5cclxuI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICBhdHRyaWJ1dGUgZmxvYXQgb2JqSW5kZXg7XHJcblxyXG4gICAgI2lmIFRSQU5TRk9STV9TVE9SQUdFID09IDBcclxuICAgICAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgICAgICNkZWZpbmUgVFJBTlNGT1JNX1NUUklERSA0XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgI2RlZmluZSBUUkFOU0ZPUk1fU1RSSURFIDQuXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdFRyYW5zZm9ybXM7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBvYmpDb3VudDtcclxuICAgICNlbGlmIFRSQU5TRk9STV9TVE9SQUdFID09IDFcclxuICAgICAgICB1bmlmb3JtIG1hdDQgdVRyYW5zZm9ybXNbT0JKX0NPVU5UXTtcclxuICAgICNlbmRpZlxyXG4jZW5kaWZcclxuXHJcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXHJcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XHJcbiNlbmRpZlxyXG4jaW5jbHVkZSA8Y29tbW9uPlxyXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XHJcblxyXG4jaWZkZWYgVVNFX1JURVxyXG4gICAgaGlnaHAgdmVjNCBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2xvdywgaW4gaGlnaHAgdmVjMyBwb3NpdGlvbl9oaWdoLCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9fbG93LCBpbiBoaWdocCB2ZWMzIHJlbGF0aXZlVG9faGlnaCl7XHJcbiAgICAgICAgLyogXHJcbiAgICAgICAgU291cmNlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXJ0dWFsZ2xvYmVib29rL09wZW5HbG9iZS9ibG9iL21hc3Rlci9Tb3VyY2UvRXhhbXBsZXMvQ2hhcHRlcjA1L0ppdHRlci9HUFVSZWxhdGl2ZVRvRXllRFNGVU45MC9TaGFkZXJzL1ZTLmdsc2wgXHJcbiAgICAgICAgTm90ZSBoZXJlLCB3ZSdyZSBzdG9yaW5nIHRoZSBoaWdoIHBhcnQgb2YgdGhlIHBvc2l0aW9uIGVuY29kaW5nIGluc2lkZSB0aHJlZSdzIGRlZmF1bHQgJ3Bvc2l0aW9uJyBhdHRyaWJ1dGUgYnVmZmVyIHNvIHdlIGF2b2lkIHJlZHVuZGFuY3kgXHJcbiAgICAgICAgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQxID0gcG9zaXRpb25fbG93Lnh5eiAtIHJlbGF0aXZlVG9fbG93Lnh5ejtcclxuICAgICAgICBoaWdocCB2ZWMzIGUgPSB0MSAtIHBvc2l0aW9uX2xvdy54eXo7XHJcbiAgICAgICAgLyoqIFRoaXMgaXMgcmVkdW5hbnQsIGJ1dCBuZWNlc3NhcnkgYXMgYSB3b3JrYXJvdW5kIGZvciBBcHBsZSBwbGF0Zm9ybXMgKi9cclxuICAgICAgICBoaWdocCBmbG9hdCB4ID0gcG9zaXRpb25faGlnaC54IC0gcmVsYXRpdmVUb19oaWdoLng7XHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeSA9IHBvc2l0aW9uX2hpZ2gueSAtIHJlbGF0aXZlVG9faGlnaC55O1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHogPSBwb3NpdGlvbl9oaWdoLnogLSByZWxhdGl2ZVRvX2hpZ2guejtcclxuICAgICAgICBoaWdocCB2ZWMzIHYgPSB2ZWMzKHgsIHksIHopO1xyXG4gICAgICAgIC8qKiBFbmQgb2YgcmVkdW5kYW50IHBhcnQgKi9cclxuICAgICAgICBoaWdocCB2ZWMzIHQyID0gKCgtcmVsYXRpdmVUb19sb3cgLSBlKSArIChwb3NpdGlvbl9sb3cueHl6IC0gKHQxIC0gZSkpKSArIHY7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBoaWdoRGlmZmVyZW5jZSA9IHQxICsgdDI7XHJcbiAgICAgICAgaGlnaHAgdmVjMyBsb3dEaWZmZXJlbmNlID0gdDIgLSAoaGlnaERpZmZlcmVuY2UueHl6IC0gdDEueHl6KTtcclxuICAgICAgICBcclxuICAgICAgICBoaWdocCB2ZWMzIHBvc2l0aW9uID0gaGlnaERpZmZlcmVuY2UueHl6ICsgbG93RGlmZmVyZW5jZS54eXo7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQocG9zaXRpb24sIDEuKTtcclxuICAgIH1cclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgIHZvaWQgb2JqZWN0VHJhbnNmb3JtKG91dCB2ZWM0IHF1YXRlcm5pb24sIG91dCB2ZWM0IHBpdm90TG93LCBvdXQgdmVjNCBwaXZvdEhpZ2gsIG91dCB2ZWM0IHRyYW5zbGF0aW9uLCBvdXQgdmVjNCBzY2FsZSl7XHJcbiAgICAgICAgI2lmIFRSQU5TRk9STV9TVE9SQUdFID09IDBcclxuICAgICAgICAgICAgI2lmIF9fVkVSU0lPTl9fID09IDMwMFxyXG4gICAgICAgICAgICAgICAgaXZlYzIgdXYgPSBpdmVjMihpbnQob2JqSW5kZXgpICogVFJBTlNGT1JNX1NUUklERSwgMCk7IFxyXG4gICAgICAgICAgICAgICAgdmVjNCB2MCA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diwgMCApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MSA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDEsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjIgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigyLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYzID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMywgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgcXVhdGVybmlvbiA9IHYwO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RMb3cgPSB2ZWM0KHYxLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RIaWdoID0gdmVjNCh2Mi54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh2My54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHNjYWxlID0gdmVjNCh2MS53LCB2Mi53LCB2My53LCAxLik7XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gb2JqQ291bnQgKiBUUkFOU0ZPUk1fU1RSSURFO1xyXG4gICAgICAgICAgICAgICAgdmVjMiBjVXYgPSB2ZWMyKDAuNS9zaXplLCAwLjUpO1xyXG4gICAgICAgICAgICAgICAgdmVjMiBkVXYgPSB2ZWMyKDEuL3NpemUsIDAuKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmVjMiB1diA9IHZlYzIoKG9iakluZGV4ICogVFJBTlNGT1JNX1NUUklERSkvc2l6ZSArIGNVdi54LCBjVXYueSk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYwID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MSA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2ICsgZFV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjIgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIDIuICogZFV2KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjMgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1diArIDMuICogZFV2KTtcclxuICAgICAgICAgICAgICAgIHF1YXRlcm5pb24gPSB2MDtcclxuICAgICAgICAgICAgICAgIHBpdm90TG93ID0gdmVjNCh2MS54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodjIueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodjMueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBzY2FsZSA9IHZlYzQodjEudywgdjIudywgdjMudywgMS4pO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZWxpZiBUUkFOU0ZPUk1fU1RPUkFHRSA9PSAxXHJcbiAgICAgICAgICAgIG1hdDQgdE1hdHJpeCA9IHVUcmFuc2Zvcm1zW2ludChvYmpJbmRleCldO1xyXG4gICAgICAgICAgICBxdWF0ZXJuaW9uID0gdE1hdHJpeFswXTtcclxuICAgICAgICAgICAgcGl2b3RMb3cgPSB2ZWM0KHRNYXRyaXhbMV0ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHBpdm90SGlnaCA9IHZlYzQodE1hdHJpeFsyXS54eXosIDEuKTtcclxuICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHRNYXRyaXhbM10ueHl6LCAxLik7XHJcbiAgICAgICAgICAgIHNjYWxlID0gdmVjNCh0TWF0cml4WzFdWzNdLCB0TWF0cml4WzJdWzNdLCB0TWF0cml4WzNdWzNdLCAxLik7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICB9XHJcblxyXG4gICAgdmVjMyByb3RhdGVfdmVydGV4X3Bvc2l0aW9uKHZlYzMgcG9zaXRpb24sIHZlYzQgcXVhdClcclxuICAgIHsgXHJcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbikgKyBxdWF0LncgKiBwb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEFub3RoZXIgd29ya2Fyb3VuZCBmb3IgQXBwbGUncyBzdHVwaWQgY29tcGlsZXIgKi9cclxuICAgIHZlYzQgc2FmZU11bCh2ZWM0IGEsIHZlYzQgYikge1xyXG4gICAgICAgIC8vIFByZXZlbnRzIGNvbnN0YW50IGZvbGRpbmcgYW5kIG9wdGltaXphdGlvblxyXG4gICAgICAgIHJldHVybiAoYSArIHZlYzQoMC4wKSkgKiAoYiArIHZlYzQoMS4wKSkgLSBhICogdmVjNCgxLjApO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZ2hwIHZlYzMgcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEoaGlnaHAgdmVjNCB2MCwgaGlnaHAgdmVjNCB2MSwgaGlnaHAgdmVjNCBzY2FsZSwgaGlnaHAgdmVjNCBxdWF0KVxyXG4gICAge1xyXG4gICAgICAgIC8qKiAhISEgV09SS0FST1VORCBGT1IgSW50ZWwgSXJpc1hlIENBUkRTICEhISAqL1xyXG4gICAgICAgIC8qKiBUaGUgY29kZSBiZWxvdyB3aWxsIG5vdCBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0cyBpbiBpbnRlbCBJcmlzWEUgaW50ZWdyYXRlZCBHUFVzLiBcclxuICAgICAgICAgKiAgVGhlIGdlb21ldHJ5IHdpbGwgdHVybiBtYW5nbGVkLCBhbGJlaXQgc3RhYmxlXHJcbiAgICAgICAgICogIEkgY2FuJ3Qga25vdyBmb3Igc3VyZSB3aGF0IGlzIGdvaW5nIG9uLCBidXQgcm90YXRpbmcgdGhlIGRpZmZlcmVuY2Ugc2VlbXMgdG8gXHJcbiAgICAgICAgICogIGZvcmNlIHRoZSByZXN1bHQgaW50byBhIGxvd2VyIHByZWNpc2lvbj9cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBoaWdocCB2ZWM0IHBvc2l0aW9uID0gdjAgLSB2MTtcclxuICAgICAgICAvLyByZXR1cm4gcG9zaXRpb24ueHl6ICsgMi4wICogY3Jvc3MocXVhdC54eXosIGNyb3NzKHF1YXQueHl6LCBwb3NpdGlvbi54eXopICsgcXVhdC53ICogcG9zaXRpb24ueHl6KTtcclxuXHJcbiAgICAgICAgLyoqIFN1YnRyYWN0aW5nIHRoZSByb3RhdGVkIHZlY3RvcnMgd29ya3MuICovXHJcbiAgICAgICAgcmV0dXJuIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24oc2FmZU11bCh2MCwgc2NhbGUpLnh5eiwgcXVhdCkgIC0gcm90YXRlX3ZlcnRleF9wb3NpdGlvbihzYWZlTXVsKHYxLCBzY2FsZSkueHl6LCBxdWF0KSA7XHJcblxyXG4gICAgICAgIC8qKiBBbiBhbHRlcm5hdGUgd29ya2Fyb3VuZCBpc1xyXG4gICAgICAgICAqIGhpZ2hwIHZlYzMgcG9zaXRpb24gPSAodjAueHl6ICogKDEuICsgMWUtNykpIC0gKHYxLnh5eiAqICgxLiArIDFlLTcpKTtcclxuICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uKSArIHF1YXQudyAqIHBvc2l0aW9uKTtcclxuXHJcbiAgICAgICAgICAgSG93ZXZlciBJJ20gbm90IHN1Y2ggYSBmYW4gb2YgdGhlICgxLiArIDFlLTcpIHBhcnRcclxuICAgICAgICAgKi9cclxuICAgIH1cclxuXHJcbiNlbmRpZlxyXG5cclxudm9pZCBtYWluKCkge1xyXG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxyXG4gICAgLy8gI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PiAvLyBDT01NRU5URUQgQ0hVTktcclxuICAgIHZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7XHJcbiAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcclxuXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbiBsaWV1IG9mIGEgcGVyLWluc3RhbmNlIG5vcm1hbC1tYXRyaXhcclxuICAgICAgICAvLyBzaGVhciB0cmFuc2Zvcm1zIGluIHRoZSBpbnN0YW5jZSBtYXRyaXggYXJlIG5vdCBzdXBwb3J0ZWRcclxuICAgICAgICBtYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApO1xyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICBcclxuICAgICAgICAvKiBJZiB3ZSBoYXZlIG5lZ2F0aXZlIHNjYWxpbmcsIHdlIGZsaXAgdGhlIG5vcm1hbCAqL1xyXG4gICAgICAgIGZsb2F0IHNpZ25EZXQgPSBzaWduKGRvdChtWzBdLCBjcm9zcyhtWzFdLCBtWzJdKSkpO1xyXG4gICAgICAgIC8vIE9wdGlvbmFsIGZhbGxiYWNrOiB0cmVhdCAwIGFzICsxXHJcbiAgICAgICAgc2lnbkRldCA9IHNpZ25EZXQgKyAoMS4wIC0gYWJzKHNpZ25EZXQpKTtcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCAqPSBzaWduRGV0O1xyXG4gICAgI2VuZGlmXHJcbiAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgI2lmZGVmIEZMSVBfU0lERURcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAjZW5kaWZcclxuICAgICNpZmRlZiBVU0VfVEFOR0VOVFxyXG4gICAgICAgIHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcclxuICAgICAgICAjaWZkZWYgRkxJUF9TSURFRFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxyXG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxyXG4gICAgLy8jaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+IC8vIEVESVRFRCBDSFVOS1xyXG4gICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICB2ZWM0IHRRdWF0ZXJuaW9uLCB0UGl2b3RMb3csIHRQaXZvdEhpZ2gsIHRUcmFuc2xhdGlvbiwgdFNjYWxlO1xyXG4gICAgICAgIG9iamVjdFRyYW5zZm9ybSh0UXVhdGVybmlvbiwgdFBpdm90TG93LCB0UGl2b3RIaWdoLCB0VHJhbnNsYXRpb24sIHRTY2FsZSk7XHJcbiAgICAjZW5kaWZcclxuICAgICNpZmRlZiBVU0VfUlRFXHJcbiAgICAgICAgdmVjNCBwb3NpdGlvbl9sb3dUID0gdmVjNChwb3NpdGlvbl9sb3csIDEuKTtcclxuICAgICAgICB2ZWM0IHBvc2l0aW9uX2hpZ2hUID0gdmVjNChwb3NpdGlvbiwgMS4pO1xyXG4gICAgICAgIGNvbnN0IHZlYzMgWkVSTzMgPSB2ZWMzKDAuLCAwLiwgMC4pO1xyXG5cclxuICAgICAgICBoaWdocCB2ZWM0IHJ0ZUxvY2FsUG9zaXRpb24gPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihwb3NpdGlvbl9sb3dULnh5eiwgcG9zaXRpb25faGlnaFQueHl6LCB1Vmlld2VyX2xvdywgdVZpZXdlcl9oaWdoKTtcclxuICAgICAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICAgICAgaGlnaHAgdmVjNCBydGVQaXZvdCA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHRQaXZvdExvdy54eXosIHRQaXZvdEhpZ2gueHl6LCB1Vmlld2VyX2xvdywgdVZpZXdlcl9oaWdoKTtcclxuICAgICAgICAgICAgcnRlTG9jYWxQb3NpdGlvbi54eXogPSByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShydGVMb2NhbFBvc2l0aW9uLCBydGVQaXZvdCwgdFNjYWxlLCB0UXVhdGVybmlvbikgKyBydGVQaXZvdC54eXogKyB0VHJhbnNsYXRpb24ueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG4gICAgICAgICAgICB2ZWM0IGluc3RhbmNlUGl2b3QgPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihaRVJPMywgWkVSTzMsIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICBydGVMb2NhbFBvc2l0aW9uLnh5eiA9IChtYXQzKGluc3RhbmNlTWF0cml4KSAqIChydGVMb2NhbFBvc2l0aW9uIC0gaW5zdGFuY2VQaXZvdCkueHl6KSArIGluc3RhbmNlUGl2b3QueHl6ICsgaW5zdGFuY2VNYXRyaXhbM10ueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICB2ZWM0IG12UG9zaXRpb24gPSBydGVMb2NhbFBvc2l0aW9uO1xyXG4gICAgI2Vsc2VcclxuICAgICAgICB2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XHJcbiAgICAgICAgI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICAgICAgICAgIG12UG9zaXRpb24ueHl6ID0gcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEobXZQb3NpdGlvbiwgdFBpdm90SGlnaCwgdFNjYWxlLCB0UXVhdGVybmlvbikgKyB0UGl2b3RIaWdoLnh5eiArIHRUcmFuc2xhdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcbiAgICAgICAgICAgIG12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjtcclxuXHJcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xyXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XHJcbiAgICAjaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxyXG5cdCAgICB2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcclxuICAgICNlbmRpZlxyXG59XHJcbmBcclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVOb3JtYWxGcmFnID0gLyogZ2xzbCAqLyBgXHJcbiNkZWZpbmUgTk9STUFMXHJcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcclxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcclxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcclxuI2VuZGlmXHJcbiNpbmNsdWRlIDxwYWNraW5nPlxyXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XHJcbnZvaWQgbWFpbigpIHtcclxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxyXG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cclxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XHJcblx0I2lmZGVmIE9QQVFVRVxyXG5cdFx0Z2xfRnJhZ0NvbG9yLmEgPSAxLjA7XHJcblx0I2VuZGlmXHJcbn1cclxuYFxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cclxuaW1wb3J0IHsgc3BlY2tsZU5vcm1hbFZlcnQgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1ub3JtYWwtdmVydC5qcydcclxuaW1wb3J0IHsgc3BlY2tsZU5vcm1hbEZyYWcgfSBmcm9tICcuL3NoYWRlcnMvc3BlY2tsZS1ub3JtYWwtZnJhZy5qcydcclxuaW1wb3J0IHtcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBDYW1lcmEsXHJcbiAgTWF0ZXJpYWwsXHJcbiAgT2JqZWN0M0QsXHJcbiAgU2NlbmUsXHJcbiAgU2hhZGVyTGliLFxyXG4gIFZlY3RvcjMsXHJcbiAgdHlwZSBJVW5pZm9ybSxcclxuICB0eXBlIE1lc2hOb3JtYWxNYXRlcmlhbFBhcmFtZXRlcnNcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgTWF0cml4NCB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBFeHRlbmRlZE1lc2hOb3JtYWxNYXRlcmlhbCwgdHlwZSBVbmlmb3JtcyB9IGZyb20gJy4vU3BlY2tsZU1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgdHlwZSB7IFNwZWNrbGVXZWJHTFJlbmRlcmVyIH0gZnJvbSAnLi4vb2JqZWN0cy9TcGVja2xlV2ViR0xSZW5kZXJlci5qcydcclxuXHJcbmNsYXNzIFNwZWNrbGVOb3JtYWxNYXRlcmlhbCBleHRlbmRzIEV4dGVuZGVkTWVzaE5vcm1hbE1hdGVyaWFsIHtcclxuICBwcm90ZWN0ZWQgZ2V0IHZlcnRleFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlTm9ybWFsVmVydFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBmcmFnbWVudFByb2dyYW0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzcGVja2xlTm9ybWFsRnJhZ1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBiYXNlVW5pZm9ybXMoKTogeyBbdW5pZm9ybTogc3RyaW5nXTogSVVuaWZvcm0gfSB7XHJcbiAgICByZXR1cm4gU2hhZGVyTGliLm5vcm1hbC51bmlmb3Jtc1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCB1bmlmb3Jtc0RlZigpOiBVbmlmb3JtcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB1Vmlld2VyX2hpZ2g6IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgIHVWaWV3ZXJfbG93OiBuZXcgVmVjdG9yMygpLFxyXG4gICAgICB1VHJhbnNmb3JtczogW25ldyBNYXRyaXg0KCldLFxyXG4gICAgICB0VHJhbnNmb3JtczogbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocGFyYW1ldGVyczogTWVzaE5vcm1hbE1hdGVyaWFsUGFyYW1ldGVycywgZGVmaW5lczogc3RyaW5nW10gPSBbXSkge1xyXG4gICAgc3VwZXIocGFyYW1ldGVycylcclxuICAgIHRoaXMuaW5pdChkZWZpbmVzKVxyXG4gIH1cclxuXHJcbiAgLyoqIFdlIG5lZWQgYSB1bmlxdWUga2V5IHBlciBwcm9ncmFtICovXHJcbiAgcHVibGljIGN1c3RvbVByb2dyYW1DYWNoZUtleSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5KHNvdXJjZTogTWF0ZXJpYWwpIHtcclxuICAgIHN1cGVyLmNvcHkoc291cmNlKVxyXG4gICAgdGhpcy5jb3B5RnJvbShzb3VyY2UpXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbiAgLyoqIENhbGxlZCBieSB0aHJlZS5qcyByZW5kZXIgbG9vcCAqL1xyXG4gIHB1YmxpYyBvbkJlZm9yZVJlbmRlcihcclxuICAgIF90aGlzOiBTcGVja2xlV2ViR0xSZW5kZXJlcixcclxuICAgIF9zY2VuZTogU2NlbmUsXHJcbiAgICBfY2FtZXJhOiBDYW1lcmEsXHJcbiAgICBfZ2VvbWV0cnk6IEJ1ZmZlckdlb21ldHJ5LFxyXG4gICAgb2JqZWN0OiBPYmplY3QzRFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuZGVmaW5lcyAmJiB0aGlzLmRlZmluZXNbJ1VTRV9SVEUnXSkge1xyXG4gICAgICBvYmplY3QubW9kZWxWaWV3TWF0cml4LmNvcHkoX3RoaXMuUlRFQnVmZmVycy5ydGVWaWV3TW9kZWxNYXRyaXgpXHJcbiAgICAgIHRoaXMudXNlckRhdGEudVZpZXdlcl9sb3cudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnZpZXdlckxvdylcclxuICAgICAgdGhpcy51c2VyRGF0YS51Vmlld2VyX2hpZ2gudmFsdWUuY29weShfdGhpcy5SVEVCdWZmZXJzLnZpZXdlckhpZ2gpXHJcblxyXG4gICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlY2tsZU5vcm1hbE1hdGVyaWFsXHJcbiIsImltcG9ydCB7IERvdWJsZVNpZGUsIE1hdGVyaWFsLCBOZWFyZXN0RmlsdGVyLCBOb0JsZW5kaW5nIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCBTcGVja2xlTm9ybWFsTWF0ZXJpYWwgZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL1NwZWNrbGVOb3JtYWxNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgUGlwZWxpbmUgfSBmcm9tICcuLi9QaXBlbGluZXMvUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IEdlb21ldHJ5UGFzcyB9IGZyb20gJy4vR2VvbWV0cnlQYXNzLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIE5vcm1hbHNQYXNzIGV4dGVuZHMgR2VvbWV0cnlQYXNzIHtcclxuICBwcml2YXRlIG5vcm1hbHNNYXRlcmlhbDogU3BlY2tsZU5vcm1hbE1hdGVyaWFsXHJcblxyXG4gIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdHRU9NRVRSWS1OT1JNQUxTJ1xyXG4gIH1cclxuXHJcbiAgZ2V0IG92ZXJyaWRlTWF0ZXJpYWwoKTogTWF0ZXJpYWwge1xyXG4gICAgcmV0dXJuIHRoaXMubm9ybWFsc01hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuXHJcbiAgICB0aGlzLl9vdXRwdXRUYXJnZXQgPSBQaXBlbGluZS5jcmVhdGVSZW5kZXJUYXJnZXQoe1xyXG4gICAgICBtaW5GaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXHJcbiAgICAgIG1hZ0ZpbHRlcjogTmVhcmVzdEZpbHRlclxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLm5vcm1hbHNNYXRlcmlhbCA9IG5ldyBTcGVja2xlTm9ybWFsTWF0ZXJpYWwoe30pXHJcbiAgICB0aGlzLm5vcm1hbHNNYXRlcmlhbC5ibGVuZGluZyA9IE5vQmxlbmRpbmdcclxuICAgIHRoaXMubm9ybWFsc01hdGVyaWFsLnNpZGUgPSBEb3VibGVTaWRlXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCBTcGVja2xlUmVuZGVyZXIgZnJvbSAnLi4vLi4vU3BlY2tsZVJlbmRlcmVyLmpzJ1xyXG5pbXBvcnQgeyBFZGdlc1Bhc3MgfSBmcm9tICcuLi9QYXNzZXMvRWRnZXNQYXNzLmpzJ1xyXG5pbXBvcnQgeyBDbGVhckZsYWdzLCBPYmplY3RWaXNpYmlsaXR5IH0gZnJvbSAnLi4vUGFzc2VzL0dQYXNzLmpzJ1xyXG5pbXBvcnQgeyBUQUFQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL1RBQVBhc3MuanMnXHJcbmltcG9ydCB7IE9iamVjdExheWVycyB9IGZyb20gJy4uLy4uLy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCB7IFByb2dyZXNzaXZlUGlwZWxpbmUgfSBmcm9tICcuL1Byb2dyZXNzaXZlUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IERlcHRoTm9ybWFsSWRQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL0RlcHRoTm9ybWFsSWRQYXNzLmpzJ1xyXG5pbXBvcnQgeyBUZXh0dXJlLCBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBEZXB0aFBhc3MgfSBmcm9tICcuLi9QYXNzZXMvRGVwdGhQYXNzLmpzJ1xyXG5pbXBvcnQgeyBOb3JtYWxzUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9Ob3JtYWxzUGFzcy5qcydcclxuaW1wb3J0IHsgQmFzZVBpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7XHJcbiAgQmF0Y2hVcGRhdGVSYW5nZSxcclxuICBHZW9tZXRyeVR5cGUsXHJcbiAgTm9uZUJhdGNoVXBkYXRlUmFuZ2VcclxufSBmcm9tICcuLi8uLi9iYXRjaGluZy9CYXRjaC5qcydcclxuaW1wb3J0IE1hdGVyaWFscyBmcm9tICcuLi8uLi9tYXRlcmlhbHMvTWF0ZXJpYWxzLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZUdob3N0TWF0ZXJpYWwgZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL1NwZWNrbGVHaG9zdE1hdGVyaWFsLmpzJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFZGdlc1BpcGVsaW5lT3B0aW9ucyBleHRlbmRzIEJhc2VQaXBlbGluZU9wdGlvbnMge1xyXG4gIG91dGxpbmVUaGlja25lc3M/OiBudW1iZXJcclxuICBvdXRsaW5lQ29sb3I/OiBudW1iZXJcclxuICBvdXRsaW5lT3BhY2l0eT86IG51bWJlclxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgRGVmYXVsdEVkZ2VzUGlwZWxpbmVPcHRpb25zID0ge1xyXG4gIG91dGxpbmVUaGlja25lc3M6IDEsXHJcbiAgb3V0bGluZU9wYWNpdHk6IDAuNzUsXHJcbiAgb3V0bGluZUNvbG9yOiAweDMyMzIzMlxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRWRnZXNQaXBlbGluZSBleHRlbmRzIFByb2dyZXNzaXZlUGlwZWxpbmUge1xyXG4gIHB1YmxpYyBkZXB0aFBhc3M6IERlcHRoTm9ybWFsSWRQYXNzIHwgRGVwdGhQYXNzXHJcbiAgcHVibGljIGRlcHRoUGFzc0R5bmFtaWM6IERlcHRoTm9ybWFsSWRQYXNzIHwgRGVwdGhQYXNzXHJcbiAgcHVibGljIGVkZ2VQYXNzOiBFZGdlc1Bhc3NcclxuICBwdWJsaWMgZWRnZVBhc3NEeW5hbWljOiBFZGdlc1Bhc3NcclxuICBwdWJsaWMgb3V0cHV0VGV4dHVyZT86IFRleHR1cmVcclxuICBwdWJsaWMgb3V0cHV0VGV4dHVyZUR5bmFtaWM/OiBUZXh0dXJlXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgc3BlY2tsZVJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXIsXHJcbiAgICBvcHRpb25zOiBFZGdlc1BpcGVsaW5lT3B0aW9ucyA9IERlZmF1bHRFZGdlc1BpcGVsaW5lT3B0aW9uc1xyXG4gICkge1xyXG4gICAgc3VwZXIoc3BlY2tsZVJlbmRlcmVyLCBvcHRpb25zKVxyXG5cclxuICAgIGNvbnN0IGlzTVJUQ2FwYWJsZSA9XHJcbiAgICAgIHNwZWNrbGVSZW5kZXJlci5yZW5kZXJlci5jYXBhYmlsaXRpZXMuaXNXZWJHTDIgfHxcclxuICAgICAgc3BlY2tsZVJlbmRlcmVyLnJlbmRlcmVyLmNvbnRleHQuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9kcmF3X2J1ZmZlcnMnKSAhPT0gbnVsbFxyXG5cclxuICAgIGlmIChpc01SVENhcGFibGUpIHRoaXMuTVJUUGlwZWxpbmUob3B0aW9ucylcclxuICAgIGVsc2UgdGhpcy5TUlRQaXBlbGluZShvcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGRlcHRoTm9ybWFsSWRQYXNzVmlzaWJpbGl0eShcclxuICAgIHJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXJcclxuICApOiBSZWNvcmQ8c3RyaW5nLCBCYXRjaFVwZGF0ZVJhbmdlPiB7XHJcbiAgICBjb25zdCB2aXNpYmlsaXR5UmFuZ2VzOiBSZWNvcmQ8c3RyaW5nLCBCYXRjaFVwZGF0ZVJhbmdlPiA9IHt9XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gcmVuZGVyZXIuYmF0Y2hlci5iYXRjaGVzKSB7XHJcbiAgICAgIGNvbnN0IGJhdGNoID0gcmVuZGVyZXIuYmF0Y2hlci5iYXRjaGVzW2tdXHJcbiAgICAgIGlmIChiYXRjaC5nZW9tZXRyeVR5cGUgIT09IEdlb21ldHJ5VHlwZS5NRVNIKSB7XHJcbiAgICAgICAgdmlzaWJpbGl0eVJhbmdlc1trXSA9IE5vbmVCYXRjaFVwZGF0ZVJhbmdlXHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICAvKiogTG9vayBmb3IgYSB0cmFuc3BhcmVudCBncm91cCAqL1xyXG4gICAgICBjb25zdCB0cmFuc3BhcmVudEdyb3VwID0gYmF0Y2guZ3JvdXBzLmZpbmQoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLm1hdGVyaWFsSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSBiYXRjaC5tYXRlcmlhbHNbdmFsdWUubWF0ZXJpYWxJbmRleF1cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgTWF0ZXJpYWxzLmlzVHJhbnNwYXJlbnQobWF0ZXJpYWwpICYmXHJcbiAgICAgICAgICBtYXRlcmlhbC52aXNpYmxlICYmXHJcbiAgICAgICAgICAhKG1hdGVyaWFsIGluc3RhbmNlb2YgU3BlY2tsZUdob3N0TWF0ZXJpYWwpXHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG4gICAgICAvKiogTG9vayBmb3IgYSBoaWRkZW4gZ3JvdXAgKi9cclxuICAgICAgY29uc3QgaGlkZGVuR3JvdXAgPSBiYXRjaC5ncm91cHMuZmluZCgodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUubWF0ZXJpYWxJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2VcclxuICAgICAgICByZXR1cm4gYmF0Y2gubWF0ZXJpYWxzW3ZhbHVlLm1hdGVyaWFsSW5kZXhdLnZpc2libGUgPT09IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIC8qKiBJZiB0aGVyZSBpcyBhIGdyb3VwIHJldHVybiBpdCdzIHJhbmdlICovXHJcbiAgICAgIGlmICh0cmFuc3BhcmVudEdyb3VwKSB7XHJcbiAgICAgICAgdmlzaWJpbGl0eVJhbmdlc1trXSA9IHtcclxuICAgICAgICAgIG9mZnNldDogdHJhbnNwYXJlbnRHcm91cC5zdGFydCxcclxuICAgICAgICAgIGNvdW50OlxyXG4gICAgICAgICAgICBoaWRkZW5Hcm91cCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgPyBoaWRkZW5Hcm91cC5zdGFydCAtIHRyYW5zcGFyZW50R3JvdXAuc3RhcnRcclxuICAgICAgICAgICAgICA6IGJhdGNoLmdldENvdW50KCkgLSB0cmFuc3BhcmVudEdyb3VwLnN0YXJ0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgLyoqIEV4Y2x1ZGUgZW50aXJlIGJhdGNoICovXHJcbiAgICAgIHZpc2liaWxpdHlSYW5nZXNba10gPSBOb25lQmF0Y2hVcGRhdGVSYW5nZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpc2liaWxpdHlSYW5nZXNcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBNUlRQaXBlbGluZShvcHRpb25zOiBFZGdlc1BpcGVsaW5lT3B0aW9ucykge1xyXG4gICAgY29uc3QgZGVwdGhOb3JtYWxJZFBhc3MgPSBuZXcgRGVwdGhOb3JtYWxJZFBhc3MoKVxyXG4gICAgZGVwdGhOb3JtYWxJZFBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcbiAgICBkZXB0aE5vcm1hbElkUGFzcy5zZXRKaXR0ZXIodHJ1ZSlcclxuICAgIGRlcHRoTm9ybWFsSWRQYXNzLnNldENsZWFyQ29sb3IoMHgwMDAwMDAsIDEpXHJcbiAgICBkZXB0aE5vcm1hbElkUGFzcy5zZXRDbGVhckZsYWdzKENsZWFyRmxhZ3MuQ09MT1IgfCBDbGVhckZsYWdzLkRFUFRIKVxyXG4gICAgZGVwdGhOb3JtYWxJZFBhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LkRFUFRIKVxyXG5cclxuICAgIGNvbnN0IGRlcHRoTm9ybWFsSWRQYXNzVHJhbnNwYXJlbnQgPSBuZXcgRGVwdGhOb3JtYWxJZFBhc3MoKVxyXG4gICAgZGVwdGhOb3JtYWxJZFBhc3NUcmFuc3BhcmVudC5zZXRMYXllcnMoW09iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNIXSlcclxuICAgIGRlcHRoTm9ybWFsSWRQYXNzVHJhbnNwYXJlbnQuc2V0Sml0dGVyKHRydWUpXHJcbiAgICBkZXB0aE5vcm1hbElkUGFzc1RyYW5zcGFyZW50LnNldFZpc2liaWxpdHkoXHJcbiAgICAgIE9iamVjdFZpc2liaWxpdHkuQ1VTVE9NLFxyXG4gICAgICB0aGlzLmRlcHRoTm9ybWFsSWRQYXNzVmlzaWJpbGl0eVxyXG4gICAgKVxyXG5cclxuICAgIGRlcHRoTm9ybWFsSWRQYXNzVHJhbnNwYXJlbnQub3V0cHV0VGFyZ2V0ID1cclxuICAgICAgZGVwdGhOb3JtYWxJZFBhc3Mub3V0cHV0VGFyZ2V0IGFzIHVua25vd24gYXMgV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHNcclxuXHJcbiAgICBjb25zdCBkZXB0aFBhc3NOb3JtYWxJZER5bmFtaWMgPSBuZXcgRGVwdGhOb3JtYWxJZFBhc3MoKVxyXG4gICAgZGVwdGhQYXNzTm9ybWFsSWREeW5hbWljLnNldExheWVycyhbT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0hdKVxyXG4gICAgZGVwdGhQYXNzTm9ybWFsSWREeW5hbWljLnNldENsZWFyQ29sb3IoMHgwMDAwMDAsIDEpXHJcbiAgICBkZXB0aFBhc3NOb3JtYWxJZER5bmFtaWMuc2V0Q2xlYXJGbGFncyhDbGVhckZsYWdzLkNPTE9SIHwgQ2xlYXJGbGFncy5ERVBUSClcclxuICAgIGRlcHRoUGFzc05vcm1hbElkRHluYW1pYy5zZXRWaXNpYmlsaXR5KE9iamVjdFZpc2liaWxpdHkuREVQVEgpXHJcblxyXG4gICAgY29uc3QgZGVwdGhQYXNzTm9ybWFsSWREeW5hbWljVHJhbnNwYXJlbnQgPSBuZXcgRGVwdGhOb3JtYWxJZFBhc3MoKVxyXG4gICAgZGVwdGhQYXNzTm9ybWFsSWREeW5hbWljVHJhbnNwYXJlbnQuc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcbiAgICBkZXB0aFBhc3NOb3JtYWxJZER5bmFtaWNUcmFuc3BhcmVudC5zZXRWaXNpYmlsaXR5KFxyXG4gICAgICBPYmplY3RWaXNpYmlsaXR5LkNVU1RPTSxcclxuICAgICAgdGhpcy5kZXB0aE5vcm1hbElkUGFzc1Zpc2liaWxpdHlcclxuICAgIClcclxuICAgIGRlcHRoUGFzc05vcm1hbElkRHluYW1pY1RyYW5zcGFyZW50Lm91dHB1dFRhcmdldCA9XHJcbiAgICAgIGRlcHRoUGFzc05vcm1hbElkRHluYW1pYy5vdXRwdXRUYXJnZXQgYXMgdW5rbm93biBhcyBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0c1xyXG5cclxuICAgIGNvbnN0IGVkZ2VzUGFzcyA9IG5ldyBFZGdlc1Bhc3MoKVxyXG4gICAgZWRnZXNQYXNzLnNldFRleHR1cmUoJ3REZXB0aCcsIGRlcHRoTm9ybWFsSWRQYXNzLmRlcHRoVGV4dHVyZSlcclxuICAgIGVkZ2VzUGFzcy5zZXRUZXh0dXJlKCd0Tm9ybWFsJywgZGVwdGhOb3JtYWxJZFBhc3Mubm9ybWFsVGV4dHVyZSlcclxuICAgIGVkZ2VzUGFzcy5zZXRUZXh0dXJlKCd0SWQnLCBkZXB0aE5vcm1hbElkUGFzcy5pZFRleHR1cmUpXHJcbiAgICBlZGdlc1Bhc3Mub3B0aW9ucyA9IG9wdGlvbnNcclxuXHJcbiAgICBjb25zdCBlZGdlc1Bhc3NEeW5hbWljID0gbmV3IEVkZ2VzUGFzcygpXHJcbiAgICBlZGdlc1Bhc3NEeW5hbWljLnNldFRleHR1cmUoJ3REZXB0aCcsIGRlcHRoUGFzc05vcm1hbElkRHluYW1pYy5kZXB0aFRleHR1cmUpXHJcbiAgICBlZGdlc1Bhc3NEeW5hbWljLnNldFRleHR1cmUoJ3ROb3JtYWwnLCBkZXB0aFBhc3NOb3JtYWxJZER5bmFtaWMubm9ybWFsVGV4dHVyZSlcclxuICAgIGVkZ2VzUGFzc0R5bmFtaWMuc2V0VGV4dHVyZSgndElkJywgZGVwdGhQYXNzTm9ybWFsSWREeW5hbWljLmlkVGV4dHVyZSlcclxuICAgIGVkZ2VzUGFzc0R5bmFtaWMub3B0aW9ucyA9IG9wdGlvbnNcclxuXHJcbiAgICBjb25zdCB0YWFQYXNzID0gbmV3IFRBQVBhc3MoKVxyXG4gICAgdGFhUGFzcy5pbnB1dFRleHR1cmUgPSBlZGdlc1Bhc3Mub3V0cHV0VGFyZ2V0Py50ZXh0dXJlXHJcbiAgICB0YWFQYXNzLmFjY3VtdWxhdGlvbkZyYW1lcyA9IHRoaXMuYWNjdW11bGF0aW9uRnJhbWVDb3VudFxyXG5cclxuICAgIHRoaXMuZHluYW1pY1N0YWdlLnB1c2goXHJcbiAgICAgIGRlcHRoUGFzc05vcm1hbElkRHluYW1pYyxcclxuICAgICAgZGVwdGhQYXNzTm9ybWFsSWREeW5hbWljVHJhbnNwYXJlbnQsXHJcbiAgICAgIGVkZ2VzUGFzc0R5bmFtaWNcclxuICAgIClcclxuICAgIHRoaXMucHJvZ3Jlc3NpdmVTdGFnZS5wdXNoKFxyXG4gICAgICBkZXB0aE5vcm1hbElkUGFzcyxcclxuICAgICAgZGVwdGhOb3JtYWxJZFBhc3NUcmFuc3BhcmVudCxcclxuICAgICAgZWRnZXNQYXNzLFxyXG4gICAgICB0YWFQYXNzXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5wYXNzTGlzdCA9IHRoaXMuZHluYW1pY1N0YWdlXHJcblxyXG4gICAgdGhpcy5kZXB0aFBhc3MgPSBkZXB0aE5vcm1hbElkUGFzc1xyXG4gICAgdGhpcy5kZXB0aFBhc3NEeW5hbWljID0gZGVwdGhQYXNzTm9ybWFsSWREeW5hbWljXHJcbiAgICB0aGlzLmVkZ2VQYXNzID0gZWRnZXNQYXNzXHJcbiAgICB0aGlzLmVkZ2VQYXNzRHluYW1pYyA9IGVkZ2VzUGFzc0R5bmFtaWNcclxuICAgIHRoaXMub3V0cHV0VGV4dHVyZSA9IHRhYVBhc3Mub3V0cHV0VGFyZ2V0Py50ZXh0dXJlXHJcbiAgICB0aGlzLm91dHB1dFRleHR1cmVEeW5hbWljID0gZWRnZXNQYXNzRHluYW1pYy5vdXRwdXRUYXJnZXQ/LnRleHR1cmVcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBTUlRQaXBlbGluZShvcHRpb25zOiBFZGdlc1BpcGVsaW5lT3B0aW9ucykge1xyXG4gICAgY29uc3QgZGVwdGhQYXNzID0gbmV3IERlcHRoUGFzcygpXHJcbiAgICBkZXB0aFBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcbiAgICBkZXB0aFBhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LkRFUFRIKVxyXG4gICAgZGVwdGhQYXNzLnNldEppdHRlcih0cnVlKVxyXG4gICAgZGVwdGhQYXNzLnNldENsZWFyQ29sb3IoMHgwMDAwMDAsIDEpXHJcbiAgICBkZXB0aFBhc3Muc2V0Q2xlYXJGbGFncyhDbGVhckZsYWdzLkNPTE9SIHwgQ2xlYXJGbGFncy5ERVBUSClcclxuXHJcbiAgICBjb25zdCBub3JtYWxQYXNzID0gbmV3IE5vcm1hbHNQYXNzKClcclxuICAgIG5vcm1hbFBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcbiAgICBub3JtYWxQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5PUEFRVUUpXHJcbiAgICBub3JtYWxQYXNzLnNldEppdHRlcih0cnVlKVxyXG4gICAgbm9ybWFsUGFzcy5zZXRDbGVhckNvbG9yKDB4MDAwMDAwLCAxKVxyXG4gICAgbm9ybWFsUGFzcy5zZXRDbGVhckZsYWdzKENsZWFyRmxhZ3MuQ09MT1IgfCBDbGVhckZsYWdzLkRFUFRIKVxyXG5cclxuICAgIGNvbnN0IGRlcHRoUGFzc0R5bmFtaWMgPSBuZXcgRGVwdGhQYXNzKClcclxuICAgIGRlcHRoUGFzc0R5bmFtaWMuc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcbiAgICBkZXB0aFBhc3NEeW5hbWljLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5ERVBUSClcclxuICAgIGRlcHRoUGFzc0R5bmFtaWMuc2V0Q2xlYXJDb2xvcigweDAwMDAwMCwgMSlcclxuICAgIGRlcHRoUGFzc0R5bmFtaWMuc2V0Q2xlYXJGbGFncyhDbGVhckZsYWdzLkNPTE9SIHwgQ2xlYXJGbGFncy5ERVBUSClcclxuXHJcbiAgICBjb25zdCBub3JtYWxQYXNzRHluYW1pYyA9IG5ldyBOb3JtYWxzUGFzcygpXHJcbiAgICBub3JtYWxQYXNzRHluYW1pYy5zZXRMYXllcnMoW09iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNIXSlcclxuICAgIG5vcm1hbFBhc3NEeW5hbWljLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5PUEFRVUUpXHJcbiAgICBub3JtYWxQYXNzRHluYW1pYy5zZXRDbGVhckNvbG9yKDB4MDAwMDAwLCAxKVxyXG4gICAgbm9ybWFsUGFzc0R5bmFtaWMuc2V0Q2xlYXJGbGFncyhDbGVhckZsYWdzLkNPTE9SIHwgQ2xlYXJGbGFncy5ERVBUSClcclxuXHJcbiAgICBjb25zdCBlZGdlc1Bhc3MgPSBuZXcgRWRnZXNQYXNzKClcclxuICAgIGVkZ2VzUGFzcy5zZXRUZXh0dXJlKCd0RGVwdGgnLCBkZXB0aFBhc3Mub3V0cHV0VGFyZ2V0Py50ZXh0dXJlKVxyXG4gICAgZWRnZXNQYXNzLnNldFRleHR1cmUoJ3ROb3JtYWwnLCBub3JtYWxQYXNzLm91dHB1dFRhcmdldD8udGV4dHVyZSlcclxuICAgIGVkZ2VzUGFzcy5vcHRpb25zID0gb3B0aW9uc1xyXG5cclxuICAgIGNvbnN0IGVkZ2VzUGFzc0R5bmFtaWMgPSBuZXcgRWRnZXNQYXNzKClcclxuICAgIGVkZ2VzUGFzc0R5bmFtaWMuc2V0VGV4dHVyZSgndERlcHRoJywgZGVwdGhQYXNzRHluYW1pYy5vdXRwdXRUYXJnZXQ/LnRleHR1cmUpXHJcbiAgICBlZGdlc1Bhc3NEeW5hbWljLnNldFRleHR1cmUoJ3ROb3JtYWwnLCBub3JtYWxQYXNzRHluYW1pYy5vdXRwdXRUYXJnZXQ/LnRleHR1cmUpXHJcbiAgICBlZGdlc1Bhc3NEeW5hbWljLm9wdGlvbnMgPSBvcHRpb25zXHJcblxyXG4gICAgY29uc3QgdGFhUGFzcyA9IG5ldyBUQUFQYXNzKClcclxuICAgIHRhYVBhc3MuaW5wdXRUZXh0dXJlID0gZWRnZXNQYXNzLm91dHB1dFRhcmdldD8udGV4dHVyZVxyXG4gICAgdGFhUGFzcy5hY2N1bXVsYXRpb25GcmFtZXMgPSB0aGlzLmFjY3VtdWxhdGlvbkZyYW1lQ291bnRcclxuXHJcbiAgICB0aGlzLmR5bmFtaWNTdGFnZS5wdXNoKGRlcHRoUGFzc0R5bmFtaWMsIG5vcm1hbFBhc3NEeW5hbWljLCBlZGdlc1Bhc3NEeW5hbWljKVxyXG4gICAgdGhpcy5wcm9ncmVzc2l2ZVN0YWdlLnB1c2goZGVwdGhQYXNzLCBub3JtYWxQYXNzLCBlZGdlc1Bhc3MsIHRhYVBhc3MpXHJcblxyXG4gICAgdGhpcy5wYXNzTGlzdCA9IHRoaXMuZHluYW1pY1N0YWdlXHJcblxyXG4gICAgdGhpcy5kZXB0aFBhc3MgPSBkZXB0aFBhc3NcclxuICAgIHRoaXMuZGVwdGhQYXNzRHluYW1pYyA9IGRlcHRoUGFzc0R5bmFtaWNcclxuICAgIHRoaXMuZWRnZVBhc3MgPSBlZGdlc1Bhc3NcclxuICAgIHRoaXMuZWRnZVBhc3NEeW5hbWljID0gZWRnZXNQYXNzRHluYW1pY1xyXG4gICAgdGhpcy5vdXRwdXRUZXh0dXJlID0gdGFhUGFzcy5vdXRwdXRUYXJnZXQ/LnRleHR1cmVcclxuICAgIHRoaXMub3V0cHV0VGV4dHVyZUR5bmFtaWMgPSBlZGdlc1Bhc3NEeW5hbWljLm91dHB1dFRhcmdldD8udGV4dHVyZVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgU3BlY2tsZVJlbmRlcmVyIGZyb20gJy4uLy4uL1NwZWNrbGVSZW5kZXJlci5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnlQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL0dlb21ldHJ5UGFzcy5qcydcclxuaW1wb3J0IHsgRGVwdGhQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL0RlcHRoUGFzcy5qcydcclxuaW1wb3J0IHsgQ2xlYXJGbGFncywgT2JqZWN0VmlzaWJpbGl0eSB9IGZyb20gJy4uL1Bhc3Nlcy9HUGFzcy5qcydcclxuaW1wb3J0IHsgUHJvZ3Jlc3NpdmVBT1Bhc3MgfSBmcm9tICcuLi9QYXNzZXMvUHJvZ3Jlc3NpdmVBT1Bhc3MuanMnXHJcbmltcG9ydCB7IEJsZW5kUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9CbGVuZFBhc3MuanMnXHJcbmltcG9ydCB7IFByb2dyZXNzaXZlUGlwZWxpbmUgfSBmcm9tICcuL1Byb2dyZXNzaXZlUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IFN0ZW5jaWxQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL1N0ZW5jaWxQYXNzLmpzJ1xyXG5pbXBvcnQgeyBTdGVuY2lsTWFza1Bhc3MgfSBmcm9tICcuLi9QYXNzZXMvU3RlbmNpbE1hc2tQYXNzLmpzJ1xyXG5pbXBvcnQgeyBFZGdlc1BpcGVsaW5lIH0gZnJvbSAnLi9FZGdlc1BpcGVsaW5lLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyBEZWZhdWx0UGlwZWxpbmVPcHRpb25zLCBQaXBlbGluZU9wdGlvbnMgfSBmcm9tICcuL1BpcGVsaW5lLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIERlZmF1bHRQaXBlbGluZSBleHRlbmRzIFByb2dyZXNzaXZlUGlwZWxpbmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgc3BlY2tsZVJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXIsXHJcbiAgICBvcHRpb25zOiBQaXBlbGluZU9wdGlvbnMgPSBEZWZhdWx0UGlwZWxpbmVPcHRpb25zXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzcGVja2xlUmVuZGVyZXIpXHJcblxyXG4gICAgY29uc3QgZWRnZXNQaXBlbGluZSA9IG9wdGlvbnMuZWRnZXMgPyBuZXcgRWRnZXNQaXBlbGluZShzcGVja2xlUmVuZGVyZXIpIDogbnVsbFxyXG5cclxuICAgIGNvbnN0IGRlcHRoUGFzcyA9ICFvcHRpb25zLmVkZ2VzID8gbmV3IERlcHRoUGFzcygpIDogbnVsbFxyXG4gICAgaWYgKGRlcHRoUGFzcykge1xyXG4gICAgICBkZXB0aFBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcbiAgICAgIGRlcHRoUGFzcy5zZXRWaXNpYmlsaXR5KE9iamVjdFZpc2liaWxpdHkuREVQVEgpXHJcbiAgICAgIGRlcHRoUGFzcy5zZXRKaXR0ZXIodHJ1ZSlcclxuICAgICAgZGVwdGhQYXNzLnNldENsZWFyQ29sb3IoMHgwMDAwMDAsIDEpXHJcbiAgICAgIGRlcHRoUGFzcy5zZXRDbGVhckZsYWdzKENsZWFyRmxhZ3MuQ09MT1IgfCBDbGVhckZsYWdzLkRFUFRIKVxyXG4gICAgfVxyXG4gICAgY29uc3QgZGVwdGhUZXggPSBvcHRpb25zLmVkZ2VzXHJcbiAgICAgID8gZWRnZXNQaXBlbGluZT8uZGVwdGhQYXNzLmRlcHRoVGV4dHVyZVxyXG4gICAgICA6IGRlcHRoUGFzcz8ub3V0cHV0VGFyZ2V0Py50ZXh0dXJlXHJcblxyXG4gICAgY29uc3QgZGVwdGhTdWJQaXBlbGluZUR5bmFtaWMgPVxyXG4gICAgICAob3B0aW9ucy5lZGdlcyA/IGVkZ2VzUGlwZWxpbmU/LmR5bmFtaWNQYXNzZXMgOiBbXSkgfHwgW11cclxuICAgIGNvbnN0IGRlcHRoU3ViUGlwZWxpbmVQcm9ncmVzc2l2ZSA9XHJcbiAgICAgIChvcHRpb25zLmVkZ2VzXHJcbiAgICAgICAgPyBlZGdlc1BpcGVsaW5lPy5wcm9ncmVzc2l2ZVBhc3Nlc1xyXG4gICAgICAgIDogZGVwdGhQYXNzXHJcbiAgICAgICAgPyBbZGVwdGhQYXNzXVxyXG4gICAgICAgIDogW10pIHx8IFtdXHJcblxyXG4gICAgY29uc3Qgb3BhcXVlQ29sb3JQYXNzID0gbmV3IEdlb21ldHJ5UGFzcygpXHJcbiAgICBvcGFxdWVDb2xvclBhc3Muc2V0TGF5ZXJzKFtcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5ULFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX0xJTkUsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5UX0NMT1VELFxyXG4gICAgICBPYmplY3RMYXllcnMuUFJPUFNcclxuICAgIF0pXHJcbiAgICBvcGFxdWVDb2xvclBhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5Lk9QQVFVRSlcclxuXHJcbiAgICBjb25zdCB0cmFuc3BhcmVudENvbG9yUGFzcyA9IG5ldyBHZW9tZXRyeVBhc3MoKVxyXG4gICAgdHJhbnNwYXJlbnRDb2xvclBhc3Muc2V0TGF5ZXJzKFtcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5ULFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX0xJTkUsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5UX0NMT1VELFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfVEVYVCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNIQURPV0NBVENIRVJcclxuICAgIF0pXHJcbiAgICB0cmFuc3BhcmVudENvbG9yUGFzcy5zZXRWaXNpYmlsaXR5KE9iamVjdFZpc2liaWxpdHkuVFJBTlNQQVJFTlQpXHJcblxyXG4gICAgY29uc3QgcHJvZ3Jlc3NpdmVBT1Bhc3MgPSBuZXcgUHJvZ3Jlc3NpdmVBT1Bhc3MoKVxyXG4gICAgcHJvZ3Jlc3NpdmVBT1Bhc3Muc2V0VGV4dHVyZSgndERlcHRoJywgZGVwdGhUZXgpXHJcbiAgICBwcm9ncmVzc2l2ZUFPUGFzcy5hY2N1bXVsYXRpb25GcmFtZXMgPSB0aGlzLmFjY3VtdWxhdGlvbkZyYW1lQ291bnRcclxuICAgIHByb2dyZXNzaXZlQU9QYXNzLnNldENsZWFyQ29sb3IoMHhmZmZmZmYsIDEpXHJcblxyXG4gICAgY29uc3QgYmxlbmRQYXNzID0gbmV3IEJsZW5kUGFzcygpXHJcbiAgICBibGVuZFBhc3Mub3B0aW9ucyA9IHsgYmxlbmRBTzogdHJ1ZSwgYmxlbmRFZGdlczogb3B0aW9ucy5lZGdlcyB9XHJcbiAgICBibGVuZFBhc3Muc2V0VGV4dHVyZSgndEFvJywgcHJvZ3Jlc3NpdmVBT1Bhc3Mub3V0cHV0VGFyZ2V0Py50ZXh0dXJlKVxyXG4gICAgYmxlbmRQYXNzLnNldFRleHR1cmUoXHJcbiAgICAgICd0RWRnZXMnLFxyXG4gICAgICBvcHRpb25zLmVkZ2VzID8gZWRnZXNQaXBlbGluZT8ub3V0cHV0VGV4dHVyZSA6IHVuZGVmaW5lZFxyXG4gICAgKVxyXG4gICAgYmxlbmRQYXNzLmFjY3VtdWxhdGlvbkZyYW1lcyA9IHRoaXMuYWNjdW11bGF0aW9uRnJhbWVDb3VudFxyXG5cclxuICAgIGNvbnN0IGJsZW5kUGFzc0R5bmFtaWMgPSBuZXcgQmxlbmRQYXNzKClcclxuICAgIGJsZW5kUGFzc0R5bmFtaWMub3B0aW9ucyA9IHsgYmxlbmRBTzogZmFsc2UsIGJsZW5kRWRnZXM6IG9wdGlvbnMuZWRnZXMgfVxyXG4gICAgYmxlbmRQYXNzRHluYW1pYy5zZXRUZXh0dXJlKFxyXG4gICAgICAndEVkZ2VzJyxcclxuICAgICAgb3B0aW9ucy5lZGdlcyA/IGVkZ2VzUGlwZWxpbmU/Lm91dHB1dFRleHR1cmVEeW5hbWljIDogdW5kZWZpbmVkXHJcbiAgICApXHJcbiAgICBibGVuZFBhc3NEeW5hbWljLmFjY3VtdWxhdGlvbkZyYW1lcyA9IHRoaXMuYWNjdW11bGF0aW9uRnJhbWVDb3VudFxyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWxQYXNzID0gbmV3IFN0ZW5jaWxQYXNzKClcclxuICAgIHN0ZW5jaWxQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5TVEVOQ0lMKVxyXG4gICAgc3RlbmNpbFBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcblxyXG4gICAgY29uc3Qgc3RlbmNpbE1hc2tQYXNzID0gbmV3IFN0ZW5jaWxNYXNrUGFzcygpXHJcbiAgICBzdGVuY2lsTWFza1Bhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LlNURU5DSUwpXHJcbiAgICBzdGVuY2lsTWFza1Bhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcbiAgICBzdGVuY2lsTWFza1Bhc3Muc2V0Q2xlYXJGbGFncyhDbGVhckZsYWdzLkRFUFRIKVxyXG5cclxuICAgIGNvbnN0IG92ZXJsYXlQYXNzID0gbmV3IEdlb21ldHJ5UGFzcygpXHJcbiAgICBvdmVybGF5UGFzcy5zZXRMYXllcnMoW09iamVjdExheWVycy5PVkVSTEFZLCBPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTXSlcclxuXHJcbiAgICB0aGlzLmR5bmFtaWNTdGFnZS5wdXNoKFxyXG4gICAgICAuLi5kZXB0aFN1YlBpcGVsaW5lRHluYW1pYyxcclxuICAgICAgc3RlbmNpbFBhc3MsXHJcbiAgICAgIG9wYXF1ZUNvbG9yUGFzcyxcclxuICAgICAgdHJhbnNwYXJlbnRDb2xvclBhc3MsXHJcbiAgICAgIC4uLihvcHRpb25zLmVkZ2VzID8gW2JsZW5kUGFzc0R5bmFtaWNdIDogW10pLFxyXG4gICAgICBzdGVuY2lsTWFza1Bhc3MsXHJcbiAgICAgIG92ZXJsYXlQYXNzXHJcbiAgICApXHJcbiAgICB0aGlzLnByb2dyZXNzaXZlU3RhZ2UucHVzaChcclxuICAgICAgLi4uZGVwdGhTdWJQaXBlbGluZVByb2dyZXNzaXZlLFxyXG4gICAgICBzdGVuY2lsUGFzcyxcclxuICAgICAgb3BhcXVlQ29sb3JQYXNzLFxyXG4gICAgICB0cmFuc3BhcmVudENvbG9yUGFzcyxcclxuICAgICAgc3RlbmNpbE1hc2tQYXNzLFxyXG4gICAgICBwcm9ncmVzc2l2ZUFPUGFzcyxcclxuICAgICAgYmxlbmRQYXNzLFxyXG4gICAgICBvdmVybGF5UGFzc1xyXG4gICAgKVxyXG4gICAgdGhpcy5wYXNzdGhyb3VnaFN0YWdlLnB1c2goXHJcbiAgICAgIHN0ZW5jaWxQYXNzLFxyXG4gICAgICBvcGFxdWVDb2xvclBhc3MsXHJcbiAgICAgIHRyYW5zcGFyZW50Q29sb3JQYXNzLFxyXG4gICAgICBzdGVuY2lsTWFza1Bhc3MsXHJcbiAgICAgIGJsZW5kUGFzcyxcclxuICAgICAgb3ZlcmxheVBhc3NcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnBhc3NMaXN0ID0gdGhpcy5keW5hbWljU3RhZ2VcclxuICB9XHJcbn1cclxuIiwiLy8gdGhyZWUtYm94My1leHRlbnNpb24udHNcclxuXHJcbmltcG9ydCB7IEJveDMsIFZlY3RvcjMsIE1hdHJpeDMgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgT0JCIH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL21hdGgvT0JCLmpzJ1xyXG5cclxuY29uc3QgX3ZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF9ib3gzID0gbmV3IEJveDMoKVxyXG5cclxuT0JCLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xyXG4gIHJldHVybiB0aGlzLmhhbGZTaXplLmxlbmd0aCgpID09PSAwXHJcbn1cclxuXHJcbk9CQi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyOiBPQkIsIGVwc2lvbiA9IDFlLTYpIHtcclxuICBfdmVjdG9yMy5jb3B5KHRoaXMuY2VudGVyKVxyXG4gIF92ZWN0b3IzLnN1YihvdGhlci5jZW50ZXIpXHJcblxyXG4gIGlmIChfdmVjdG9yMy5sZW5ndGgoKSA+IGVwc2lvbikgcmV0dXJuIGZhbHNlXHJcblxyXG4gIF92ZWN0b3IzLmNvcHkodGhpcy5oYWxmU2l6ZSlcclxuICBfdmVjdG9yMy5zdWIob3RoZXIuaGFsZlNpemUpXHJcblxyXG4gIGlmIChfdmVjdG9yMy5sZW5ndGgoKSA+IGVwc2lvbikgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XHJcbiAgICBpZiAoTWF0aC5hYnModGhpcy5yb3RhdGlvbi5lbGVtZW50c1tpXSAtIG90aGVyLnJvdGF0aW9uLmVsZW1lbnRzW2ldKSA+IGVwc2lvbilcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG5PQkIucHJvdG90eXBlLl9taW4gPSBuZXcgVmVjdG9yMygpXHJcbk9CQi5wcm90b3R5cGUuX21heCA9IG5ldyBWZWN0b3IzKClcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPQkIucHJvdG90eXBlLCAnbWluJywge1xyXG4gIGdldCh0aGlzOiBPQkIpIHtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yMygpLmNvcHkodGhpcy5jZW50ZXIpLnN1Yih0aGlzLmhhbGZTaXplKVxyXG4gIH0sXHJcbiAgc2V0KHRoaXM6IE9CQiwgdmFsdWU6IFZlY3RvcjMpIHtcclxuICAgIHRoaXMuX21pbi5jb3B5KHZhbHVlKVxyXG4gICAgX2JveDMuc2V0KHZhbHVlLCB0aGlzLl9tYXgpXHJcbiAgICBfYm94My5nZXRDZW50ZXIodGhpcy5jZW50ZXIpXHJcbiAgICBfYm94My5nZXRTaXplKHRoaXMuaGFsZlNpemUpXHJcbiAgICB0aGlzLmhhbGZTaXplLm11bHRpcGx5U2NhbGFyKDAuNSlcclxuICB9LFxyXG4gIGVudW1lcmFibGU6IHRydWUsXHJcbiAgY29uZmlndXJhYmxlOiB0cnVlXHJcbn0pXHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoT0JCLnByb3RvdHlwZSwgJ21heCcsIHtcclxuICBnZXQodGhpczogT0JCKSB7XHJcbiAgICByZXR1cm4gbmV3IFZlY3RvcjMoKS5jb3B5KHRoaXMuY2VudGVyKS5hZGQodGhpcy5oYWxmU2l6ZSlcclxuICB9LFxyXG4gIHNldCh0aGlzOiBPQkIsIHZhbHVlOiBWZWN0b3IzKSB7XHJcbiAgICB0aGlzLl9tYXguY29weSh2YWx1ZSlcclxuICAgIF9ib3gzLnNldCh0aGlzLl9taW4sIHZhbHVlKVxyXG4gICAgX2JveDMuZ2V0Q2VudGVyKHRoaXMuY2VudGVyKVxyXG4gICAgX2JveDMuZ2V0U2l6ZSh0aGlzLmhhbGZTaXplKVxyXG4gICAgdGhpcy5oYWxmU2l6ZS5tdWx0aXBseVNjYWxhcigwLjUpXHJcbiAgfSxcclxuICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG59KVxyXG5cclxuQm94My5wcm90b3R5cGUuZnJvbU9CQiA9IGZ1bmN0aW9uIChvYmI6IE9CQik6IEJveDMge1xyXG4gIGNvbnN0IHsgY2VudGVyLCBoYWxmU2l6ZSwgcm90YXRpb24gfSA9IG9iYlxyXG5cclxuICBjb25zdCBsb2NhbENvcm5lcnMgPSBbXHJcbiAgICBuZXcgVmVjdG9yMygtaGFsZlNpemUueCwgLWhhbGZTaXplLnksIC1oYWxmU2l6ZS56KSxcclxuICAgIG5ldyBWZWN0b3IzKC1oYWxmU2l6ZS54LCAtaGFsZlNpemUueSwgaGFsZlNpemUueiksXHJcbiAgICBuZXcgVmVjdG9yMygtaGFsZlNpemUueCwgaGFsZlNpemUueSwgLWhhbGZTaXplLnopLFxyXG4gICAgbmV3IFZlY3RvcjMoLWhhbGZTaXplLngsIGhhbGZTaXplLnksIGhhbGZTaXplLnopLFxyXG4gICAgbmV3IFZlY3RvcjMoaGFsZlNpemUueCwgLWhhbGZTaXplLnksIC1oYWxmU2l6ZS56KSxcclxuICAgIG5ldyBWZWN0b3IzKGhhbGZTaXplLngsIC1oYWxmU2l6ZS55LCBoYWxmU2l6ZS56KSxcclxuICAgIG5ldyBWZWN0b3IzKGhhbGZTaXplLngsIGhhbGZTaXplLnksIC1oYWxmU2l6ZS56KSxcclxuICAgIG5ldyBWZWN0b3IzKGhhbGZTaXplLngsIGhhbGZTaXplLnksIGhhbGZTaXplLnopXHJcbiAgXVxyXG5cclxuICBjb25zdCB3b3JsZENvcm5lcnMgPSBsb2NhbENvcm5lcnMubWFwKChjb3JuZXIpID0+XHJcbiAgICBjb3JuZXIuYXBwbHlNYXRyaXgzKHJvdGF0aW9uKS5hZGQoY2VudGVyKVxyXG4gIClcclxuXHJcbiAgY29uc3QgYWFiYiA9IG5ldyBCb3gzKCkuc2V0RnJvbVBvaW50cyh3b3JsZENvcm5lcnMpXHJcblxyXG4gIHJldHVybiBhYWJiXHJcbn1cclxuXHJcbi8qKiBUaGlzIGlzIHVudGVzdGVkLiBNaWdodCBiZSBidXN0ZWQgKi9cclxuQm94My5wcm90b3R5cGUuaW50ZXJzZWN0T0JCID0gZnVuY3Rpb24gKG9iYjogT0JCKTogT0JCIHwgbnVsbCB7XHJcbiAgLy8gU3RlcCAxOiBDb21wdXRlIEFBQkIgY29ybmVyc1xyXG4gIGNvbnN0IGFhYmJDb3JuZXJzID0gW1xyXG4gICAgbmV3IFZlY3RvcjModGhpcy5taW4ueCwgdGhpcy5taW4ueSwgdGhpcy5taW4ueiksXHJcbiAgICBuZXcgVmVjdG9yMyh0aGlzLm1pbi54LCB0aGlzLm1pbi55LCB0aGlzLm1heC56KSxcclxuICAgIG5ldyBWZWN0b3IzKHRoaXMubWluLngsIHRoaXMubWF4LnksIHRoaXMubWluLnopLFxyXG4gICAgbmV3IFZlY3RvcjModGhpcy5taW4ueCwgdGhpcy5tYXgueSwgdGhpcy5tYXgueiksXHJcbiAgICBuZXcgVmVjdG9yMyh0aGlzLm1heC54LCB0aGlzLm1pbi55LCB0aGlzLm1pbi56KSxcclxuICAgIG5ldyBWZWN0b3IzKHRoaXMubWF4LngsIHRoaXMubWluLnksIHRoaXMubWF4LnopLFxyXG4gICAgbmV3IFZlY3RvcjModGhpcy5tYXgueCwgdGhpcy5tYXgueSwgdGhpcy5taW4ueiksXHJcbiAgICBuZXcgVmVjdG9yMyh0aGlzLm1heC54LCB0aGlzLm1heC55LCB0aGlzLm1heC56KVxyXG4gIF1cclxuXHJcbiAgLy8gU3RlcCAyOiBUcmFuc2Zvcm0gQUFCQiBjb3JuZXJzIHRvIE9CQidzIGxvY2FsIHNwYWNlXHJcbiAgY29uc3QgaW52Um90YXRpb24gPSBuZXcgTWF0cml4MygpLmNvcHkob2JiLnJvdGF0aW9uKS5pbnZlcnQoKVxyXG4gIGNvbnN0IGxvY2FsQUFCQkNvcm5lcnMgPSBhYWJiQ29ybmVycy5tYXAoKGNvcm5lcikgPT5cclxuICAgIGNvcm5lci5jbG9uZSgpLnN1YihvYmIuY2VudGVyKS5hcHBseU1hdHJpeDMoaW52Um90YXRpb24pXHJcbiAgKVxyXG5cclxuICAvLyBTdGVwIDM6IEtlZXAgcG9pbnRzIGluc2lkZSB0aGUgT0JCIChBQUJCIHBvaW50cyBjbGlwcGVkIGJ5IE9CQilcclxuICBjb25zdCBpbnRlcnNlY3Rpb25Qb2ludHMgPSBbXVxyXG4gIGZvciAoY29uc3QgY29ybmVyIG9mIGxvY2FsQUFCQkNvcm5lcnMpIHtcclxuICAgIGlmIChcclxuICAgICAgTWF0aC5hYnMoY29ybmVyLngpIDw9IG9iYi5oYWxmU2l6ZS54ICYmXHJcbiAgICAgIE1hdGguYWJzKGNvcm5lci55KSA8PSBvYmIuaGFsZlNpemUueSAmJlxyXG4gICAgICBNYXRoLmFicyhjb3JuZXIueikgPD0gb2JiLmhhbGZTaXplLnpcclxuICAgICkge1xyXG4gICAgICBpbnRlcnNlY3Rpb25Qb2ludHMucHVzaChjb3JuZXIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTdGVwIDQ6IENsaXAgT0JCIGVkZ2VzIGFnYWluc3QgQUFCQiBhbmQgY29sbGVjdCBhZGRpdGlvbmFsIGludGVyc2VjdGlvbiBwb2ludHNcclxuICAvLyAoU2tpcHBpbmcgZnVsbCBjbGlwcGluZyBmb3IgYnJldml0eeKAlHRoaXMgY2FuIGJlIGRvbmUgdXNpbmcgc2VnbWVudC1ib3ggY2xpcHBpbmcpXHJcblxyXG4gIGlmIChpbnRlcnNlY3Rpb25Qb2ludHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gbnVsbCAvLyBObyBpbnRlcnNlY3Rpb25cclxuICB9XHJcblxyXG4gIC8vIFN0ZXAgNTogQ29tcHV0ZSB0aGUgY2VudHJvaWQgb2YgdGhlIGludGVyc2VjdGlvbiBwb2ludHNcclxuICBjb25zdCBjZW50cm9pZCA9IG5ldyBWZWN0b3IzKClcclxuICBpbnRlcnNlY3Rpb25Qb2ludHMuZm9yRWFjaCgocHQpID0+IGNlbnRyb2lkLmFkZChwdCkpXHJcbiAgY2VudHJvaWQuZGl2aWRlU2NhbGFyKGludGVyc2VjdGlvblBvaW50cy5sZW5ndGgpXHJcblxyXG4gIC8vIFN0ZXAgNjogQ29tcHV0ZSBhIGJlc3QtZml0IE9CQiBmb3IgdGhlIGludGVyc2VjdGlvbiBwb2ludHNcclxuICAvLyBVc2UgUENBIG9yIGEgaGV1cmlzdGljIHRvIGRldGVybWluZSB0aGUgYmVzdC1maXQgb3JpZW50YXRpb25cclxuICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UnbGwgdXNlIHRoZSBPQkIncyBleGlzdGluZyBheGVzXHJcbiAgY29uc3QgYmVzdEZpdEF4ZXMgPSBbbmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMoKV1cclxuICBvYmIucm90YXRpb24uZXh0cmFjdEJhc2lzKGJlc3RGaXRBeGVzWzBdLCBiZXN0Rml0QXhlc1sxXSwgYmVzdEZpdEF4ZXNbMl0pXHJcblxyXG4gIC8vIFN0ZXAgNzogQ29tcHV0ZSBoYWxmLXNpemUgYWxvbmcgZWFjaCBheGlzXHJcbiAgY29uc3QgaGFsZlNpemUgPSBuZXcgVmVjdG9yMygpXHJcbiAgZm9yIChjb25zdCBwdCBvZiBpbnRlcnNlY3Rpb25Qb2ludHMpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHByb2ogPSBwdC5jbG9uZSgpLnN1YihjZW50cm9pZCkuZG90KGJlc3RGaXRBeGVzW2ldKVxyXG4gICAgICBoYWxmU2l6ZS5zZXRDb21wb25lbnQoaSwgTWF0aC5tYXgoaGFsZlNpemUuZ2V0Q29tcG9uZW50KGkpLCBNYXRoLmFicyhwcm9qKSkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTdGVwIDg6IENvbnZlcnQgY2VudHJvaWQgYmFjayB0byB3b3JsZCBzcGFjZVxyXG4gIGNvbnN0IHdvcmxkQ2VudHJvaWQgPSBjZW50cm9pZC5hcHBseU1hdHJpeDMob2JiLnJvdGF0aW9uKS5hZGQob2JiLmNlbnRlcilcclxuXHJcbiAgLy8gU3RlcCA5OiBSZXR1cm4gdGhlIHJlc3VsdGluZyBPQkJcclxuICByZXR1cm4gbmV3IE9CQih3b3JsZENlbnRyb2lkLCBoYWxmU2l6ZSwgb2JiLnJvdGF0aW9uLmNsb25lKCkpXHJcbn1cclxuXHJcbkJveDMucHJvdG90eXBlLmlzSW5maW5pdGVCb3ggPSBmdW5jdGlvbiAoKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIChcclxuICAgIHRoaXMubWluLnggPT09IC1JbmZpbml0eSB8fFxyXG4gICAgdGhpcy5taW4ueSA9PT0gLUluZmluaXR5IHx8XHJcbiAgICB0aGlzLm1pbi56ID09PSAtSW5maW5pdHkgfHxcclxuICAgIHRoaXMubWF4LnggPT09IEluZmluaXR5IHx8XHJcbiAgICB0aGlzLm1heC55ID09PSBJbmZpbml0eSB8fFxyXG4gICAgdGhpcy5tYXgueiA9PT0gSW5maW5pdHlcclxuICApXHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBBQ0VTRmlsbWljVG9uZU1hcHBpbmcsXHJcbiAgQm94MyxcclxuICBDYW1lcmFIZWxwZXIsXHJcbiAgQ29sb3IsXHJcbiAgRGlyZWN0aW9uYWxMaWdodCxcclxuICBEaXJlY3Rpb25hbExpZ2h0SGVscGVyLFxyXG4gIEdyb3VwLFxyXG4gIHR5cGUgSW50ZXJzZWN0aW9uLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE1lc2gsXHJcbiAgT2JqZWN0M0QsXHJcbiAgUGxhbmUsXHJcbiAgUkdCQURlcHRoUGFja2luZyxcclxuICBTY2VuZSxcclxuICBTcGhlcmUsXHJcbiAgU3BoZXJpY2FsLFxyXG4gIHNSR0JFbmNvZGluZyxcclxuICBUZXh0dXJlLFxyXG4gIFZlY3RvcjMsXHJcbiAgVlNNU2hhZG93TWFwLFxyXG4gIFZlY3RvcjIsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgT3J0aG9ncmFwaGljQ2FtZXJhXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7XHJcbiAgdHlwZSBCYXRjaCxcclxuICB0eXBlIEJhdGNoVXBkYXRlUmFuZ2UsXHJcbiAgR2VvbWV0cnlUeXBlLFxyXG4gIGlzQWNjZWxlcmF0ZWRCYXRjaFR5cGVcclxufSBmcm9tICcuL2JhdGNoaW5nL0JhdGNoLmpzJ1xyXG5pbXBvcnQgQmF0Y2hlciBmcm9tICcuL2JhdGNoaW5nL0JhdGNoZXIuanMnXHJcbmltcG9ydCB7IEdlb21ldHJ5IH0gZnJvbSAnLi9jb252ZXJ0ZXIvR2VvbWV0cnkuanMnXHJcbmltcG9ydCBJbnB1dCwgeyBJbnB1dEV2ZW50IH0gZnJvbSAnLi9pbnB1dC9JbnB1dC5qcydcclxuaW1wb3J0IHsgSW50ZXJzZWN0aW9ucyB9IGZyb20gJy4vSW50ZXJzZWN0aW9ucy5qcydcclxuaW1wb3J0IFNwZWNrbGVEZXB0aE1hdGVyaWFsIGZyb20gJy4vbWF0ZXJpYWxzL1NwZWNrbGVEZXB0aE1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwgZnJvbSAnLi9tYXRlcmlhbHMvU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwuanMnXHJcbmltcG9ydCB7IE5vZGVSZW5kZXJWaWV3IH0gZnJvbSAnLi90cmVlL05vZGVSZW5kZXJWaWV3LmpzJ1xyXG5pbXBvcnQgeyBWaWV3ZXIgfSBmcm9tICcuL1ZpZXdlci5qcydcclxuaW1wb3J0IHsgV29ybGRUcmVlLCB0eXBlIFRyZWVOb2RlIH0gZnJvbSAnLi90cmVlL1dvcmxkVHJlZS5qcydcclxuaW1wb3J0IHtcclxuICBEZWZhdWx0TGlnaHRDb25maWd1cmF0aW9uLFxyXG4gIE9iamVjdExheWVycyxcclxuICB0eXBlIFNlbGVjdGlvbkV2ZW50LFxyXG4gIHR5cGUgU3VuTGlnaHRDb25maWd1cmF0aW9uLFxyXG4gIFZpZXdlckV2ZW50XHJcbn0gZnJvbSAnLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgU2hhZG93Y2F0Y2hlciB9IGZyb20gJy4vU2hhZG93Y2F0Y2hlci5qcydcclxuaW1wb3J0IFNwZWNrbGVNZXNoIGZyb20gJy4vb2JqZWN0cy9TcGVja2xlTWVzaC5qcydcclxuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEludGVyc2VjdGlvbiB9IGZyb20gJy4vb2JqZWN0cy9TcGVja2xlUmF5Y2FzdGVyLmpzJ1xyXG5pbXBvcnQgeyBCYXRjaE9iamVjdCB9IGZyb20gJy4vYmF0Y2hpbmcvQmF0Y2hPYmplY3QuanMnXHJcbmltcG9ydCB7IENhbWVyYUV2ZW50LCB0eXBlIFNwZWNrbGVDYW1lcmEgfSBmcm9tICcuL29iamVjdHMvU3BlY2tsZUNhbWVyYS5qcydcclxuaW1wb3J0IE1hdGVyaWFscywge1xyXG4gIHR5cGUgUmVuZGVyTWF0ZXJpYWwsXHJcbiAgdHlwZSBEaXNwbGF5U3R5bGUsXHJcbiAgdHlwZSBGaWx0ZXJNYXRlcmlhbCxcclxuICB0eXBlIEZpbHRlck1hdGVyaWFsT3B0aW9uc1xyXG59IGZyb20gJy4vbWF0ZXJpYWxzL01hdGVyaWFscy5qcydcclxuaW1wb3J0IHsgdHlwZSBNYXRlcmlhbE9wdGlvbnMgfSBmcm9tICcuL21hdGVyaWFscy9NYXRlcmlhbE9wdGlvbnMuanMnXHJcbmltcG9ydCB7IFNwZWNrbGVNYXRlcmlhbCB9IGZyb20gJy4vbWF0ZXJpYWxzL1NwZWNrbGVNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgU3BlY2tsZVdlYkdMUmVuZGVyZXIgfSBmcm9tICcuL29iamVjdHMvU3BlY2tsZVdlYkdMUmVuZGVyZXIuanMnXHJcbmltcG9ydCB7IFNwZWNrbGVUeXBlQWxsUmVuZGVyYWJsZXMgfSBmcm9tICcuL2xvYWRlcnMvR2VvbWV0cnlDb252ZXJ0ZXIuanMnXHJcbmltcG9ydCBTcGVja2xlSW5zdGFuY2VkTWVzaCBmcm9tICcuL29iamVjdHMvU3BlY2tsZUluc3RhbmNlZE1lc2guanMnXHJcbmltcG9ydCB7IE1lc2hCYXRjaCB9IGZyb20gJy4vYmF0Y2hpbmcvTWVzaEJhdGNoLmpzJ1xyXG5pbXBvcnQgeyBSZW5kZXJUcmVlIH0gZnJvbSAnLi90cmVlL1JlbmRlclRyZWUuanMnXHJcbmltcG9ydCB7IFBpcGVsaW5lIH0gZnJvbSAnLi9waXBlbGluZS9QaXBlbGluZXMvUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IERlZmF1bHRQaXBlbGluZSB9IGZyb20gJy4vcGlwZWxpbmUvUGlwZWxpbmVzL0RlZmF1bHRQaXBlbGluZS5qcydcclxuaW1wb3J0IHsgUHJvZ3Jlc3NpdmVQaXBlbGluZSB9IGZyb20gJy4vcGlwZWxpbmUvUGlwZWxpbmVzL1Byb2dyZXNzaXZlUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IEJhc2VHUGFzcywgR1Bhc3MgfSBmcm9tICcuL3BpcGVsaW5lL1Bhc3Nlcy9HUGFzcy5qcydcclxuaW1wb3J0IHsgT0JCIH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL21hdGgvT0JCLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5cclxuLyogVE8gRE86IE5vdCBzdXJlIHdoZXJlIHRvIGJlc3QgaW1wb3J0IHRoZXNlICovXHJcbmltcG9ydCAnLi4vdHlwZS1hdWdtZW50YXRpb25zL3RocmVlLWV4dGVuc2lvbnMuanMnXHJcbmltcG9ydCB7IFRleHRCYXRjaCB9IGZyb20gJy4uL2luZGV4LmpzJ1xyXG5pbXBvcnQgeyBTcGVja2xlQmF0Y2hlZFRleHQgfSBmcm9tICcuL29iamVjdHMvU3BlY2tsZUJhdGNoZWRUZXh0LmpzJ1xyXG5pbXBvcnQgU3BlY2tsZUdob3N0TWF0ZXJpYWwgZnJvbSAnLi9tYXRlcmlhbHMvU3BlY2tsZUdob3N0TWF0ZXJpYWwuanMnXHJcblxyXG5leHBvcnQgY2xhc3MgUmVuZGVyaW5nU3RhdHMge1xyXG4gIHByaXZhdGUgcmVuZGVyVGltZUFjYyA9IDBcclxuICBwcml2YXRlIHJlbmRlclRpbWVTYW1wbGVzID0gMFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyVGltZU1heFNhbXBsZXMgPSA1MDBcclxuICBwcml2YXRlIHJlbmRlclRpbWVTdGFydCA9IDBcclxuICBwdWJsaWMgcmVuZGVyVGltZSA9IDBcclxuXHJcbiAgcHVibGljIG9iamVjdHM6IG51bWJlciA9IDBcclxuICBwdWJsaWMgYmF0Y2hDb3VudDogbnVtYmVyID0gMFxyXG4gIHB1YmxpYyBkcmF3Q2FsbHM6IG51bWJlciA9IDBcclxuICBwdWJsaWMgdHJpc0NvdW50OiBudW1iZXIgPSAwXHJcbiAgcHVibGljIHZlcnRDb3VudDogbnVtYmVyID0gMFxyXG5cclxuICBwdWJsaWMgYmF0Y2hEZXRhaWxzITogQXJyYXk8e1xyXG4gICAgZHJhd0NhbGxzOiBudW1iZXJcclxuICAgIG1pbkRyYXdDYWxsczogbnVtYmVyXHJcbiAgICB0cmlzOiBudW1iZXJcclxuICAgIHZlcnRzOiBudW1iZXJcclxuICB9PlxyXG5cclxuICBwdWJsaWMgZnJhbWVTdGFydCgpIHtcclxuICAgIHRoaXMucmVuZGVyVGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcclxuICB9XHJcbiAgcHVibGljIGZyYW1lRW5kKCkge1xyXG4gICAgdGhpcy5yZW5kZXJUaW1lQWNjICs9IHBlcmZvcm1hbmNlLm5vdygpIC0gdGhpcy5yZW5kZXJUaW1lU3RhcnRcclxuICAgIHRoaXMucmVuZGVyVGltZVNhbXBsZXMrK1xyXG4gICAgaWYgKHRoaXMucmVuZGVyVGltZVNhbXBsZXMgJSB0aGlzLnJlbmRlclRpbWVNYXhTYW1wbGVzID09PSAwKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVGltZSA9IHRoaXMucmVuZGVyVGltZUFjYyAvIHRoaXMucmVuZGVyVGltZVNhbXBsZXNcclxuICAgICAgdGhpcy5yZW5kZXJUaW1lU2FtcGxlcyA9IDBcclxuICAgICAgdGhpcy5yZW5kZXJUaW1lQWNjID0gMFxyXG4gICAgICAvLyBMb2dnZXIubG9nKHRoaXMucmVuZGVyVGltZSlcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0UGlja0NvbmZpZ3VyYXRpb24ge1xyXG4gIHBpY2tlZE9iamVjdHNGaWx0ZXI6ICgoYXJnOiBbTm9kZVJlbmRlclZpZXcsIE1hdGVyaWFsXSkgPT4gYm9vbGVhbikgfCBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0T2JqZWN0UGlja0NvbmZpZ3VyYXRpb24gPSB7XHJcbiAgcGlja2VkT2JqZWN0c0ZpbHRlcjogKGFyZzogW05vZGVSZW5kZXJWaWV3LCBNYXRlcmlhbF0pID0+IHtcclxuICAgIGNvbnN0IG1hdGVyaWFsID0gYXJnWzFdXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBtYXRlcmlhbCAmJiAvLyBNYXRlaXJpYWwgZXhpc3RzXHJcbiAgICAgIG1hdGVyaWFsLnZpc2libGUgJiYgLy8gTWF0ZXJpYWwgaXMgdmlzaWJsZVxyXG4gICAgICAobWF0ZXJpYWwudHJhbnNwYXJlbnQgPyBtYXRlcmlhbC5vcGFjaXR5ID4gMCA6IHRydWUpICYmIC8vIE1hdGVyaWFsIGlzIHRyYW5zcGFyZW50IGFuZCBvcGFjaXR5IGlzIG5vbiB6ZXJvXHJcbiAgICAgICEobWF0ZXJpYWwgaW5zdGFuY2VvZiBTcGVja2xlR2hvc3RNYXRlcmlhbCkgLy8gTWF0ZXJpYWwgaXMgbm90IGEgR2hvc3RNYXRlcmlhbFxyXG4gICAgKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BlY2tsZVJlbmRlcmVyIHtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgU0hPV19IRUxQRVJTID0gZmFsc2VcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgSUdOT1JFX1pFUk9fT1BBQ0lUWV9PQkpFQ1RTID0gdHJ1ZVxyXG4gIHB1YmxpYyBTSE9XX0JWSCA9IGZhbHNlXHJcblxyXG4gIHByb3RlY3RlZCBfcmVuZGVyZXI6IFNwZWNrbGVXZWJHTFJlbmRlcmVyXHJcbiAgcHJvdGVjdGVkIF9yZW5kZXJpblN0YXRzOiBSZW5kZXJpbmdTdGF0c1xyXG4gIHByb3RlY3RlZCBfc2NlbmU6IFNjZW5lXHJcbiAgcHJvdGVjdGVkIF9uZWVkc1JlbmRlcjogYm9vbGVhblxyXG4gIHByb3RlY3RlZCBfaW50ZXJzZWN0aW9uczogSW50ZXJzZWN0aW9uc1xyXG4gIHByb3RlY3RlZCBfc2hhZG93Y2F0Y2hlcjogU2hhZG93Y2F0Y2hlclxyXG4gIHByb3RlY3RlZCBfc3BlY2tsZUNhbWVyYTogU3BlY2tsZUNhbWVyYSB8IG51bGwgPSBudWxsXHJcblxyXG4gIHByb3RlY3RlZCBjb250YWluZXI6IEhUTUxFbGVtZW50XHJcbiAgcHJvdGVjdGVkIHJvb3RHcm91cDogR3JvdXBcclxuICBwcm90ZWN0ZWQgX3BpcGVsaW5lOiBQaXBlbGluZVxyXG5cclxuICBwcm90ZWN0ZWQgc3VuOiBEaXJlY3Rpb25hbExpZ2h0XHJcbiAgcHJvdGVjdGVkIHN1bkNvbmZpZ3VyYXRpb246IFN1bkxpZ2h0Q29uZmlndXJhdGlvbiA9IERlZmF1bHRMaWdodENvbmZpZ3VyYXRpb25cclxuICBwcm90ZWN0ZWQgc3VuVGFyZ2V0OiBPYmplY3QzRFxyXG4gIHByb3RlY3RlZCB0cmVlOiBXb3JsZFRyZWVcclxuXHJcbiAgcHJvdGVjdGVkIGNhbmNlbDogeyBbc3VidHJlZUlkOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxyXG5cclxuICBwcm90ZWN0ZWQgX2NsaXBwaW5nUGxhbmVzOiBQbGFuZVtdID0gW11cclxuICBwcm90ZWN0ZWQgX2NsaXBwaW5nVm9sdW1lOiBPQkIgPSBuZXcgT0JCKClcclxuXHJcbiAgcHJvdGVjdGVkIF9yZW5kZXJPdmVycmlkZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGxcclxuXHJcbiAgcHVibGljIG9iamVjdFBpY2tDb25maWd1cmF0aW9uOiBPYmplY3RQaWNrQ29uZmlndXJhdGlvbiA9XHJcbiAgICBEZWZhdWx0T2JqZWN0UGlja0NvbmZpZ3VyYXRpb25cclxuXHJcbiAgcHVibGljIHZpZXdlcjogVmlld2VyIC8vIFRFTVBPUkFSWVxyXG4gIHB1YmxpYyBiYXRjaGVyOiBCYXRjaGVyXHJcbiAgcHVibGljIGlucHV0OiBJbnB1dFxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgKiBSZW5kZXJlciBhbmQgcmVuZGVyaW5nIGZsYWdzICovXHJcbiAgcHVibGljIGdldCByZW5kZXJlcigpOiBTcGVja2xlV2ViR0xSZW5kZXJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyZXJcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgbmVlZHNSZW5kZXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZWRzUmVuZGVyIHx8PSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzaGFkb3dNYXBOZWVkc1VwZGF0ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcmVuZGVyZXIuc2hhZG93TWFwLm5lZWRzVXBkYXRlID0gdmFsdWVcclxuICB9XHJcblxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICogQm91bmRzIGFuZCB2b2x1bWVzICovXHJcbiAgcHVibGljIGdldCBzY2VuZUJveCgpOiBCb3gzIHtcclxuICAgIGNvbnN0IGJvdW5kczogQm94MyA9IG5ldyBCb3gzKClcclxuICAgIGNvbnN0IGJhdGNoZXMgPSB0aGlzLmJhdGNoZXIuZ2V0QmF0Y2hlcygpXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGJhdGNoZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgYm91bmRzLnVuaW9uKGJhdGNoZXNba10uYm91bmRzKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJvdW5kc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2aXNpYmxlU2NlbmVCb3goKTogQm94MyB7XHJcbiAgICBjb25zdCBib3VuZHM6IEJveDMgPSBuZXcgQm94MygpXHJcbiAgICBjb25zdCBiYXRjaGVzID0gdGhpcy5iYXRjaGVyLmdldEJhdGNoZXMoKVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBiYXRjaGVzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IGJhdGNoID0gYmF0Y2hlc1trXVxyXG4gICAgICBjb25zdCBydnMgPSBiYXRjaC5yZW5kZXJWaWV3cy5zbGljZSgpXHJcbiAgICAgIHJ2cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGEuYmF0Y2hTdGFydCAtIGIuYmF0Y2hTdGFydFxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgYmF0Y2hPYmplY3RzID0gbnVsbFxyXG4gICAgICBpZiAoaXNBY2NlbGVyYXRlZEJhdGNoVHlwZShiYXRjaCkpIHtcclxuICAgICAgICBiYXRjaE9iamVjdHMgPSBiYXRjaC5tZXNoLmJhdGNoT2JqZWN0cy5zbGljZSgpXHJcbiAgICAgICAgYmF0Y2hPYmplY3RzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIHJldHVybiBhLnJlbmRlclZpZXcuYmF0Y2hTdGFydCAtIGIucmVuZGVyVmlldy5iYXRjaFN0YXJ0XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdmlzaWJsZVJhbmdlID0gYmF0Y2guZ2V0VmlzaWJsZVJhbmdlKClcclxuICAgICAgbGV0IGxvID0gMCxcclxuICAgICAgICBoaSA9IHJ2cy5sZW5ndGhcclxuICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcclxuICAgICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDFcclxuICAgICAgICBpZiAocnZzW21pZF0uYmF0Y2hTdGFydCA8IHZpc2libGVSYW5nZS5vZmZzZXQpIGxvID0gbWlkICsgMVxyXG4gICAgICAgIGVsc2UgaGkgPSBtaWRcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcVN0YXJ0ID0gdmlzaWJsZVJhbmdlLm9mZnNldFxyXG4gICAgICBjb25zdCBxRW5kID0gdmlzaWJsZVJhbmdlLm9mZnNldCArIHZpc2libGVSYW5nZS5jb3VudFxyXG5cclxuICAgICAgZm9yICg7IGxvIDwgcnZzLmxlbmd0aDsgbG8rKykge1xyXG4gICAgICAgIGNvbnN0IHMgPSBydnNbbG9dXHJcbiAgICAgICAgY29uc3QgYiA9IGJhdGNoT2JqZWN0cyA/IGJhdGNoT2JqZWN0c1tsb10gOiBudWxsXHJcbiAgICAgICAgaWYgKHMuYmF0Y2hTdGFydCA+PSBxRW5kKSBicmVha1xyXG4gICAgICAgIGNvbnN0IHNFbmQgPSBzLmJhdGNoU3RhcnQgKyBzLmJhdGNoQ291bnRcclxuICAgICAgICBpZiAocy5iYXRjaFN0YXJ0ID49IHFTdGFydCAmJiBzRW5kIDw9IHFFbmQpIHtcclxuICAgICAgICAgIGJvdW5kcy51bmlvbihiID8gYi5hYWJiIDogcy5hYWJiKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJvdW5kc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzY2VuZVNwaGVyZSgpOiBTcGhlcmUge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NlbmVCb3guZ2V0Qm91bmRpbmdTcGhlcmUobmV3IFNwaGVyZSgpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzY2VuZUNlbnRlcigpOiBWZWN0b3IzIHtcclxuICAgIHJldHVybiB0aGlzLnNjZW5lQm94LmdldENlbnRlcihuZXcgVmVjdG9yMygpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjbGlwcGluZ1ZvbHVtZSgpOiBPQkIge1xyXG4gICAgcmV0dXJuICF0aGlzLl9jbGlwcGluZ1ZvbHVtZS5pc0VtcHR5KCkgJiYgdGhpcy5fcmVuZGVyZXIubG9jYWxDbGlwcGluZ0VuYWJsZWRcclxuICAgICAgPyB0aGlzLl9jbGlwcGluZ1ZvbHVtZVxyXG4gICAgICA6IG5ldyBPQkIoKS5mcm9tQm94Myh0aGlzLnZpc2libGVTY2VuZUJveClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY2xpcHBpbmdWb2x1bWUoYm94OiBCb3gzIHwgT0JCKSB7XHJcbiAgICBpZiAodGhpcy5zY2VuZUJveCkge1xyXG4gICAgICBpZiAoYm94IGluc3RhbmNlb2YgQm94MylcclxuICAgICAgICB0aGlzLl9jbGlwcGluZ1ZvbHVtZSA9IG5ldyBPQkIoKS5mcm9tQm94Myh0aGlzLnNjZW5lQm94LmludGVyc2VjdChib3gpKVxyXG4gICAgICBlbHNlIGlmIChib3ggaW5zdGFuY2VvZiBPQkIpIHtcclxuICAgICAgICAvKiogTm9ybWFsbHkgd2UnZCB3YW50IHRoZSBpbnRlcnNlY3Rpb24sIGJ1dCB0aGF0IG1heSBiZSB0b28gaGFyZCB0byBkbyBmb3Igc3VjaCBsaXR0bGUgcHVycG9zZSAqL1xyXG4gICAgICAgIHRoaXMuX2NsaXBwaW5nVm9sdW1lID0gbmV3IE9CQigpLmNvcHkoYm94KVxyXG4gICAgICAgIC8vIGNvbnN0IGludGVyc2VjdGlvbiA9IHRoaXMuc2NlbmVCb3guaW50ZXJzZWN0T0JCKGJveClcclxuICAgICAgICAvLyB0aGlzLl9jbGlwcGluZ1ZvbHVtZSA9IGludGVyc2VjdGlvblxyXG4gICAgICAgIC8vICAgPyBpbnRlcnNlY3Rpb25cclxuICAgICAgICAvLyAgIDogbmV3IE9CQigpLmZyb21Cb3gzKHRoaXMuc2NlbmVCb3gpXHJcbiAgICAgIH0gZWxzZSBMb2dnZXIuZXJyb3IoYEluY29ycmVjdCBjbGlwcGluZyB2b2x1bWUgc2V0OiAke2JveH0uIFJlcXVpcmVkIEJveDMgb3IgT0JCYClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKioqKioqKioqKioqKioqKlxyXG4gICAqIENsaXBwaW5nIHBsYW5lcyAqL1xyXG4gIHB1YmxpYyBnZXQgY2xpcHBpbmdQbGFuZXMoKTogUGxhbmVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpcHBpbmdQbGFuZXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY2xpcHBpbmdQbGFuZXModmFsdWU6IFBsYW5lW10pIHtcclxuICAgIHRoaXMuX2NsaXBwaW5nUGxhbmVzID0gdmFsdWUubWFwKCh2YWx1ZTogUGxhbmUpID0+IG5ldyBQbGFuZSgpLmNvcHkodmFsdWUpKVxyXG4gICAgdGhpcy51cGRhdGVDbGlwcGluZ1BsYW5lcygpXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRvd01hcC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHRoaXMubmVlZHNSZW5kZXIgPSB0cnVlXHJcbiAgICB0aGlzLnJlc2V0UGlwZWxpbmUoKVxyXG4gIH1cclxuXHJcbiAgLyoqKioqKioqKioqKioqKipcclxuICAgKiBDb21tb24gT2JqZWN0cyAqL1xyXG4gIHB1YmxpYyBnZXQgYWxsT2JqZWN0cygpOiBPYmplY3QzRCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2NlbmUuZ2V0T2JqZWN0QnlOYW1lKCdDb250ZW50R3JvdXAnKSBhcyBPYmplY3QzRFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzY2VuZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zY2VuZVxyXG4gIH1cclxuXHJcbiAgLyoqKioqKioqXHJcbiAgICogTGlnaHRzICovXHJcblxyXG4gIHB1YmxpYyBnZXQgc3VuTGlnaHQoKTogRGlyZWN0aW9uYWxMaWdodCB7XHJcbiAgICByZXR1cm4gdGhpcy5zdW5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5kaXJlY3RJQkwodGV4dHVyZTogVGV4dHVyZSkge1xyXG4gICAgdGhpcy5fc2NlbmUuZW52aXJvbm1lbnQgPSB0ZXh0dXJlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGluZGlyZWN0SUJMSW50ZW5zaXR5KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIC8qKiBVcGRhdGUgZW52TWFwIGludGVuc2l0eSBmb3IgbWVzaCBnZW9tZXRyeSB0eXBlcyBvbmx5ICovXHJcbiAgICBjb25zdCBiYXRjaGVzID0gdGhpcy5iYXRjaGVyLmdldEJhdGNoZXModW5kZWZpbmVkLCBHZW9tZXRyeVR5cGUuTUVTSClcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYmF0Y2hlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBtYXRlcmlhbHM6IFNwZWNrbGVTdGFuZGFyZE1hdGVyaWFsW10gPSBiYXRjaGVzW2tdXHJcbiAgICAgICAgLm1hdGVyaWFscyBhcyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbFtdXHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWF0ZXJpYWxzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgbWF0ZXJpYWxzW2tdLmVudk1hcEludGVuc2l0eSA9IHZhbHVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKioqKioqKlxyXG4gICAqIENhbWVyYSAqL1xyXG4gIHB1YmxpYyBnZXQgc3BlY2tsZUNhbWVyYSgpOiBTcGVja2xlQ2FtZXJhIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2tsZUNhbWVyYVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzcGVja2xlQ2FtZXJhKHZhbHVlOiBTcGVja2xlQ2FtZXJhKSB7XHJcbiAgICB0aGlzLl9zcGVja2xlQ2FtZXJhID0gdmFsdWVcclxuICAgIHRoaXMuX3NwZWNrbGVDYW1lcmEub24oQ2FtZXJhRXZlbnQuRHluYW1pYywgKCkgPT4ge1xyXG4gICAgICB0aGlzLl9uZWVkc1JlbmRlciA9IHRydWVcclxuICAgICAgdGhpcy5fcGlwZWxpbmUgaW5zdGFuY2VvZiBQcm9ncmVzc2l2ZVBpcGVsaW5lICYmIHRoaXMuX3BpcGVsaW5lLm9uU3RhdGlvbmFyeUVuZCgpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5fc3BlY2tsZUNhbWVyYS5vbihDYW1lcmFFdmVudC5TdGF0aW9uYXJ5LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX25lZWRzUmVuZGVyID0gdHJ1ZVxyXG4gICAgICB0aGlzLl9waXBlbGluZSBpbnN0YW5jZW9mIFByb2dyZXNzaXZlUGlwZWxpbmUgJiZcclxuICAgICAgICB0aGlzLl9waXBlbGluZS5vblN0YXRpb25hcnlCZWdpbigpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5fc3BlY2tsZUNhbWVyYS5vbihDYW1lcmFFdmVudC5GcmFtZVVwZGF0ZSwgKG5lZWRzVXBkYXRlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHRoaXMubmVlZHNSZW5kZXIgPSBuZWVkc1VwZGF0ZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVuZGVyaW5nQ2FtZXJhKCk6IFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuX3NwZWNrbGVDYW1lcmEpIHJldHVybiBudWxsXHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2tsZUNhbWVyYS5yZW5kZXJpbmdDYW1lcmFcclxuICB9XHJcblxyXG4gIC8qKioqKioqKioqXHJcbiAgICogUGlwZWxpbmUgKi9cclxuICBwdWJsaWMgc2V0IHBpcGVsaW5lKHZhbHVlOiBQaXBlbGluZSkge1xyXG4gICAgdGhpcy5fcGlwZWxpbmUgPSB2YWx1ZVxyXG4gICAgdGhpcy5fcGlwZWxpbmUuc2V0Q2xpcHBpbmdQbGFuZXModGhpcy5fY2xpcHBpbmdQbGFuZXMpXHJcbiAgICB0aGlzLl9waXBlbGluZS5yZXNldCgpXHJcbiAgICB0aGlzLnJlc2l6ZSgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHBpcGVsaW5lKCk6IFBpcGVsaW5lIHtcclxuICAgIHJldHVybiB0aGlzLl9waXBlbGluZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaGFkb3djYXRjaGVyKCk6IFNoYWRvd2NhdGNoZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9zaGFkb3djYXRjaGVyXHJcbiAgfVxyXG5cclxuICAvKioqKioqKioqKioqKipcclxuICAgKiBJbnRlcnNlY3Rpb25zICovXHJcbiAgcHVibGljIGdldCBpbnRlcnNlY3Rpb25zKCk6IEludGVyc2VjdGlvbnMge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludGVyc2VjdGlvbnNcclxuICB9XHJcblxyXG4gIC8qKioqKioqKioqKioqKioqKlxyXG4gICAqIFJlbmRlcmluZyBTdGF0cyAqL1xyXG4gIHB1YmxpYyBnZXQgcmVuZGVyaW5nU3RhdHMoKTogUmVuZGVyaW5nU3RhdHMge1xyXG4gICAgY29uc3QgYmF0Y2hlcyA9IE9iamVjdC52YWx1ZXModGhpcy5iYXRjaGVyLmJhdGNoZXMpXHJcblxyXG4gICAgdGhpcy5fcmVuZGVyaW5TdGF0cy5vYmplY3RzID0gYmF0Y2hlcy5yZWR1Y2UoXHJcbiAgICAgIChhOiBudW1iZXIsIGM6IEJhdGNoKSA9PiBhICsgYy5yZW5kZXJWaWV3cy5sZW5ndGgsXHJcbiAgICAgIDBcclxuICAgIClcclxuICAgIHRoaXMuX3JlbmRlcmluU3RhdHMuYmF0Y2hDb3VudCA9IGJhdGNoZXMubGVuZ3RoXHJcbiAgICA7KHRoaXMuX3JlbmRlcmluU3RhdHMuZHJhd0NhbGxzID0gYmF0Y2hlcy5yZWR1Y2UoXHJcbiAgICAgIChhOiBudW1iZXIsIGM6IEJhdGNoKSA9PiBhICsgYy5kcmF3Q2FsbHMsXHJcbiAgICAgIDBcclxuICAgICkpLFxyXG4gICAgICAodGhpcy5fcmVuZGVyaW5TdGF0cy50cmlzQ291bnQgPSBiYXRjaGVzLnJlZHVjZShcclxuICAgICAgICAoYTogbnVtYmVyLCBjOiBCYXRjaCkgPT4gYSArIGMudHJpQ291bnQsXHJcbiAgICAgICAgMFxyXG4gICAgICApKSxcclxuICAgICAgKHRoaXMuX3JlbmRlcmluU3RhdHMudmVydENvdW50ID0gYmF0Y2hlcy5yZWR1Y2UoXHJcbiAgICAgICAgKGE6IG51bWJlciwgYzogQmF0Y2gpID0+IGEgKyBjLnZlcnRDb3VudCxcclxuICAgICAgICAwXHJcbiAgICAgICkpLFxyXG4gICAgICAodGhpcy5fcmVuZGVyaW5TdGF0cy5iYXRjaERldGFpbHMgPSBiYXRjaGVzLm1hcCgoYmF0Y2g6IEJhdGNoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHR5cGU6IGJhdGNoLmNvbnN0cnVjdG9yLm5hbWUsXHJcbiAgICAgICAgICBvYmpDb3VudDogYmF0Y2gucmVuZGVyVmlld3MubGVuZ3RoLFxyXG4gICAgICAgICAgZHJhd0NhbGxzOiBiYXRjaC5kcmF3Q2FsbHMsXHJcbiAgICAgICAgICBtaW5EcmF3Q2FsbHM6IGJhdGNoLm1pbkRyYXdDYWxscyxcclxuICAgICAgICAgIHRyaXM6IGJhdGNoLnRyaUNvdW50LFxyXG4gICAgICAgICAgdmVydHM6IGJhdGNoLnZlcnRDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgfSkpXHJcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyaW5TdGF0c1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHRyZWU6IFdvcmxkVHJlZSwgdmlld2VyOiBWaWV3ZXIgLyoqIFRFTVBPUkFSWSAqLykge1xyXG4gICAgdGhpcy50cmVlID0gdHJlZVxyXG4gICAgdGhpcy5fcmVuZGVyaW5TdGF0cyA9IG5ldyBSZW5kZXJpbmdTdGF0cygpXHJcbiAgICB0aGlzLl9zY2VuZSA9IG5ldyBTY2VuZSgpXHJcbiAgICB0aGlzLnJvb3RHcm91cCA9IG5ldyBHcm91cCgpXHJcbiAgICB0aGlzLnJvb3RHcm91cC5uYW1lID0gJ0NvbnRlbnRHcm91cCdcclxuICAgIHRoaXMucm9vdEdyb3VwLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UKVxyXG4gICAgdGhpcy5fc2NlbmUuYWRkKHRoaXMucm9vdEdyb3VwKVxyXG5cclxuICAgIHRoaXMuX2ludGVyc2VjdGlvbnMgPSBuZXcgSW50ZXJzZWN0aW9ucygpXHJcbiAgICB0aGlzLnZpZXdlciA9IHZpZXdlclxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZShjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IG5ldyBTcGVja2xlV2ViR0xSZW5kZXJlcih7XHJcbiAgICAgIGFudGlhbGlhczogdHJ1ZSxcclxuICAgICAgYWxwaGE6IHRydWUsXHJcbiAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdHJ1ZSxcclxuICAgICAgc3RlbmNpbDogdHJ1ZVxyXG4gICAgfSlcclxuICAgIHRoaXMuX3JlbmRlcmVyLnNldENsZWFyQ29sb3IoMHhmZmZmZmYsIDApXHJcbiAgICB0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKVxyXG4gICAgdGhpcy5fcmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgPSBzUkdCRW5jb2RpbmdcclxuICAgIHRoaXMuX3JlbmRlcmVyLnRvbmVNYXBwaW5nID0gQUNFU0ZpbG1pY1RvbmVNYXBwaW5nXHJcbiAgICB0aGlzLl9yZW5kZXJlci50b25lTWFwcGluZ0V4cG9zdXJlID0gMC41XHJcbiAgICB0aGlzLl9yZW5kZXJlci5zaGFkb3dNYXAuZW5hYmxlZCA9IHRydWVcclxuICAgIHRoaXMuX3JlbmRlcmVyLnNoYWRvd01hcC50eXBlID0gVlNNU2hhZG93TWFwXHJcbiAgICB0aGlzLl9yZW5kZXJlci5zaGFkb3dNYXAuYXV0b1VwZGF0ZSA9IGZhbHNlXHJcbiAgICB0aGlzLl9yZW5kZXJlci5zaGFkb3dNYXAubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB0aGlzLl9yZW5kZXJlci5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyA9IHRydWVcclxuXHJcbiAgICAvKiogTm8gYXV0b2NsZWFyLiBXZSdyZSBjbGVhcmluZyBvdXJzZWx2ZXMgKi9cclxuICAgIHRoaXMuX3JlbmRlcmVyLmF1dG9DbGVhciA9IGZhbHNlXHJcbiAgICB0aGlzLl9yZW5kZXJlci5hdXRvQ2xlYXJDb2xvciA9IGZhbHNlXHJcbiAgICB0aGlzLl9yZW5kZXJlci5hdXRvQ2xlYXJEZXB0aCA9IGZhbHNlXHJcbiAgICB0aGlzLl9yZW5kZXJlci5hdXRvQ2xlYXJTdGVuY2lsID0gZmFsc2VcclxuXHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lclxyXG4gICAgdGhpcy5fcmVuZGVyZXIuc2V0U2l6ZShjb250YWluZXIub2Zmc2V0V2lkdGgsIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQpXHJcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmVuZGVyZXIuZG9tRWxlbWVudClcclxuXHJcbiAgICB0aGlzLmJhdGNoZXIgPSBuZXcgQmF0Y2hlcih0aGlzLnJlbmRlcmVyLmNhcGFiaWxpdGllcylcclxuXHJcbiAgICB0aGlzLl9waXBlbGluZSA9IG5ldyBEZWZhdWx0UGlwZWxpbmUodGhpcylcclxuXHJcbiAgICB0aGlzLmlucHV0ID0gbmV3IElucHV0KFxyXG4gICAgICB0aGlzLl9yZW5kZXJlci5kb21FbGVtZW50LFxyXG4gICAgICB0aGlzLnZpZXdlci5wYXJhbXMucmVzdHJpY3RJbnB1dFRvQ2FudmFzXHJcbiAgICApXHJcbiAgICB0aGlzLmlucHV0Lm9uKElucHV0RXZlbnQuQ2xpY2ssIHRoaXMub25DbGljay5iaW5kKHRoaXMpKVxyXG4gICAgdGhpcy5pbnB1dC5vbihJbnB1dEV2ZW50LkRvdWJsZUNsaWNrLCB0aGlzLm9uRG91YmxlQ2xpY2suYmluZCh0aGlzKSlcclxuXHJcbiAgICB0aGlzLmFkZERpcmVjdExpZ2h0cygpXHJcbiAgICBpZiAodGhpcy5TSE9XX0hFTFBFUlMpIHtcclxuICAgICAgY29uc3QgaGVscGVycyA9IG5ldyBHcm91cCgpXHJcbiAgICAgIGhlbHBlcnMubmFtZSA9ICdIZWxwZXJzJ1xyXG4gICAgICB0aGlzLl9zY2VuZS5hZGQoaGVscGVycylcclxuXHJcbiAgICAgIC8vIFdpbGwgbmVlZCBhIE9CQkhlbHBlclxyXG4gICAgICAvLyBjb25zdCBzY2VuZUJveEhlbHBlciA9IG5ldyBCb3gzSGVscGVyKHRoaXMuY2xpcHBpbmdWb2x1bWUsIG5ldyBDb2xvcigweGZmMDBmZikpXHJcbiAgICAgIC8vIHNjZW5lQm94SGVscGVyLm5hbWUgPSAnU2NlbmVCb3hIZWxwZXInXHJcbiAgICAgIC8vIHNjZW5lQm94SGVscGVyLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlBST1BTKVxyXG4gICAgICAvLyBoZWxwZXJzLmFkZChzY2VuZUJveEhlbHBlcilcclxuXHJcbiAgICAgIGNvbnN0IGRpckxpZ2h0SGVscGVyID0gbmV3IERpcmVjdGlvbmFsTGlnaHRIZWxwZXIodGhpcy5zdW4sIDUwLCAweGZmMDAwMClcclxuICAgICAgZGlyTGlnaHRIZWxwZXIubmFtZSA9ICdEaXJMaWdodEhlbHBlcidcclxuICAgICAgZGlyTGlnaHRIZWxwZXIubGF5ZXJzLnNldChPYmplY3RMYXllcnMuUFJPUFMpXHJcbiAgICAgIGhlbHBlcnMuYWRkKGRpckxpZ2h0SGVscGVyKVxyXG5cclxuICAgICAgY29uc3QgY2FtSGVscGVyID0gbmV3IENhbWVyYUhlbHBlcih0aGlzLnN1bi5zaGFkb3cuY2FtZXJhKVxyXG4gICAgICBjYW1IZWxwZXIubmFtZSA9ICdDYW1IZWxwZXInXHJcbiAgICAgIGNhbUhlbHBlci5sYXllcnMuc2V0KE9iamVjdExheWVycy5QUk9QUylcclxuICAgICAgaGVscGVycy5hZGQoY2FtSGVscGVyKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NoYWRvd2NhdGNoZXIgPSBuZXcgU2hhZG93Y2F0Y2hlcihPYmplY3RMYXllcnMuU0hBRE9XQ0FUQ0hFUiwgW1xyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSFxyXG4gICAgXSlcclxuICAgIGxldCByZXN0b3JlVmlzaWJpbGl0eTogUmVjb3JkPHN0cmluZywgQmF0Y2hVcGRhdGVSYW5nZT5cclxuICAgIGxldCBvcGFxdWU6IFJlY29yZDxzdHJpbmcsIEJhdGNoVXBkYXRlUmFuZ2U+XHJcblxyXG4gICAgdGhpcy5fc2hhZG93Y2F0Y2hlci5zaGFkb3djYXRjaGVyUGFzcy5vbkJlZm9yZVJlbmRlciA9ICgpID0+IHtcclxuICAgICAgcmVzdG9yZVZpc2liaWxpdHkgPSB0aGlzLmJhdGNoZXIuc2F2ZVZpc2libGl0eSgpXHJcbiAgICAgIG9wYXF1ZSA9IHRoaXMuYmF0Y2hlci5nZXRPcGFxdWUoKVxyXG4gICAgICB0aGlzLmJhdGNoZXIuYXBwbHlWaXNpYmlsaXR5KG9wYXF1ZSlcclxuICAgICAgdGhpcy5iYXRjaGVyLm92ZXJyaWRlTWF0ZXJpYWwoXHJcbiAgICAgICAgb3BhcXVlLFxyXG4gICAgICAgIHRoaXMuX3NoYWRvd2NhdGNoZXIuc2hhZG93Y2F0Y2hlclBhc3MuZHJhd0RlcHRoTWF0ZXJpYWxcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgdGhpcy5fc2hhZG93Y2F0Y2hlci5zaGFkb3djYXRjaGVyUGFzcy5vbkFmdGVyUmVuZGVyID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmJhdGNoZXIuYXBwbHlWaXNpYmlsaXR5KHJlc3RvcmVWaXNpYmlsaXR5KVxyXG4gICAgICB0aGlzLmJhdGNoZXIucmVzdG9yZU1hdGVyaWFsKG9wYXF1ZSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zY2VuZS5hZGQodGhpcy5fc2hhZG93Y2F0Y2hlci5zaGFkb3djYXRjaGVyTWVzaClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGUoZGVsdGFUaW1lOiBudW1iZXIpIHtcclxuICAgIGlmICghdGhpcy5yZW5kZXJpbmdDYW1lcmEpIHJldHVyblxyXG4gICAgdGhpcy5iYXRjaGVyLnVwZGF0ZShkZWx0YVRpbWUpXHJcblxyXG4gICAgdGhpcy5yZW5kZXJpbmdDYW1lcmEudXBkYXRlTWF0cml4V29ybGQodHJ1ZSlcclxuICAgIHRoaXMuX3JlbmRlcmVyLnVwZGF0ZVJURVZpZXdNb2RlbCh0aGlzLnJlbmRlcmluZ0NhbWVyYSlcclxuICAgIHRoaXMudXBkYXRlUlRFU2hhZG93cygpXHJcblxyXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm1zKClcclxuXHJcbiAgICB0aGlzLl9waXBlbGluZS51cGRhdGUodGhpcy5yZW5kZXJpbmdDYW1lcmEpXHJcblxyXG4gICAgaWYgKHRoaXMuc3VuQ29uZmlndXJhdGlvbi5zaGFkb3djYXRjaGVyICYmIHRoaXMuX3NoYWRvd2NhdGNoZXIpIHtcclxuICAgICAgdGhpcy5fc2hhZG93Y2F0Y2hlci51cGRhdGUodGhpcy5fc2NlbmUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJURVNoYWRvd0J1ZmZlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuX3JlbmRlcmVyLnNoYWRvd01hcC5uZWVkc1VwZGF0ZSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgdGhpcy5fcmVuZGVyZXIuUlRFQnVmZmVycy5zaGFkb3dWaWV3ZXIuc2V0KFxyXG4gICAgICB0aGlzLnN1bi5zaGFkb3cuY2FtZXJhLm1hdHJpeFdvcmxkLmVsZW1lbnRzWzEyXSxcclxuICAgICAgdGhpcy5zdW4uc2hhZG93LmNhbWVyYS5tYXRyaXhXb3JsZC5lbGVtZW50c1sxM10sXHJcbiAgICAgIHRoaXMuc3VuLnNoYWRvdy5jYW1lcmEubWF0cml4V29ybGQuZWxlbWVudHNbMTRdXHJcbiAgICApXHJcbiAgICBHZW9tZXRyeS5Eb3VibGVUb0hpZ2hMb3dWZWN0b3IoXHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLlJURUJ1ZmZlcnMuc2hhZG93Vmlld2VyLFxyXG4gICAgICB0aGlzLl9yZW5kZXJlci5SVEVCdWZmZXJzLnNoYWRvd1ZpZXdlckxvdyxcclxuICAgICAgdGhpcy5fcmVuZGVyZXIuUlRFQnVmZmVycy5zaGFkb3dWaWV3ZXJIaWdoXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5fcmVuZGVyZXIuUlRFQnVmZmVycy5ydGVTaGFkb3dWaWV3TW9kZWxNYXRyaXguY29weShcclxuICAgICAgdGhpcy5zdW4uc2hhZG93LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2VcclxuICAgIClcclxuICAgIHRoaXMuX3JlbmRlcmVyLlJURUJ1ZmZlcnMucnRlU2hhZG93Vmlld01vZGVsTWF0cml4LmVsZW1lbnRzWzEyXSA9IDBcclxuICAgIHRoaXMuX3JlbmRlcmVyLlJURUJ1ZmZlcnMucnRlU2hhZG93Vmlld01vZGVsTWF0cml4LmVsZW1lbnRzWzEzXSA9IDBcclxuICAgIHRoaXMuX3JlbmRlcmVyLlJURUJ1ZmZlcnMucnRlU2hhZG93Vmlld01vZGVsTWF0cml4LmVsZW1lbnRzWzE0XSA9IDBcclxuXHJcbiAgICAvLyBMb3ZlbHlcclxuICAgIHRoaXMuX3JlbmRlcmVyLlJURUJ1ZmZlcnMucnRlU2hhZG93TWF0cml4LnNldChcclxuICAgICAgMC41LFxyXG4gICAgICAwLjAsXHJcbiAgICAgIDAuMCxcclxuICAgICAgMC41LFxyXG4gICAgICAwLjAsXHJcbiAgICAgIDAuNSxcclxuICAgICAgMC4wLFxyXG4gICAgICAwLjUsXHJcbiAgICAgIDAuMCxcclxuICAgICAgMC4wLFxyXG4gICAgICAwLjUsXHJcbiAgICAgIDAuNSxcclxuICAgICAgMC4wLFxyXG4gICAgICAwLjAsXHJcbiAgICAgIDAuMCxcclxuICAgICAgMS4wXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5fcmVuZGVyZXIuUlRFQnVmZmVycy5ydGVTaGFkb3dNYXRyaXgubXVsdGlwbHkoXHJcbiAgICAgIHRoaXMuc3VuLnNoYWRvdy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeFxyXG4gICAgKVxyXG4gICAgdGhpcy5fcmVuZGVyZXIuUlRFQnVmZmVycy5ydGVTaGFkb3dNYXRyaXgubXVsdGlwbHkoXHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLlJURUJ1ZmZlcnMucnRlU2hhZG93Vmlld01vZGVsTWF0cml4XHJcbiAgICApXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVSVEVTaGFkb3dzKCkge1xyXG4gICAgaWYgKCF0aGlzLnVwZGF0ZVJURVNoYWRvd0J1ZmZlcnMoKSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgbWVzaEJhdGNoZXM6IE1lc2hCYXRjaFtdID0gdGhpcy5iYXRjaGVyLmdldEJhdGNoZXMoXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgR2VvbWV0cnlUeXBlLk1FU0hcclxuICAgIClcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWVzaEJhdGNoZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3Qgc3BlY2tsZU1lc2g6IFNwZWNrbGVNZXNoIHwgU3BlY2tsZUluc3RhbmNlZE1lc2ggPSBtZXNoQmF0Y2hlc1trXS5tZXNoXHJcblxyXG4gICAgICAvKiogU2hhZG93bWFwIGRlcHRoIG1hdGVyaWFsIGRvZXMgbm90IGdvIHRob3J1Z2ggdGhlIG5vcm1hbCBmbG93LlxyXG4gICAgICAgKiBJdCdzIG9uQmVmb3JlUmVuZGVyIGlzIG5vdCBnZXR0aW5nIGNhbGxlZCBUaGF0J3Mgd2h5IHdlJ3JlIHVwZGF0aW5nXHJcbiAgICAgICAqIHRoZSBSVEUgcmVsYXRlZCB1bmlmb3JtcyBtYW51YWxseSBoZXJlXHJcbiAgICAgICAqL1xyXG4gICAgICBzcGVja2xlTWVzaC50cmF2ZXJzZSgob2JqOiBPYmplY3QzRCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlcHRoTWF0ZXJpYWw6IFNwZWNrbGVEZXB0aE1hdGVyaWFsID1cclxuICAgICAgICAgIG9iai5jdXN0b21EZXB0aE1hdGVyaWFsIGFzIFNwZWNrbGVEZXB0aE1hdGVyaWFsXHJcbiAgICAgICAgaWYgKGRlcHRoTWF0ZXJpYWwpIHtcclxuICAgICAgICAgIGRlcHRoTWF0ZXJpYWwudXNlckRhdGEudVZpZXdlcl9sb3cudmFsdWUuY29weShcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuUlRFQnVmZmVycy5zaGFkb3dWaWV3ZXJMb3dcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGRlcHRoTWF0ZXJpYWwudXNlckRhdGEudVZpZXdlcl9oaWdoLnZhbHVlLmNvcHkoXHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLlJURUJ1ZmZlcnMuc2hhZG93Vmlld2VySGlnaFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgZGVwdGhNYXRlcmlhbC51c2VyRGF0YS5ydGVNb2RlbFZpZXdNYXRyaXgudmFsdWUuY29weShcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuUlRFQnVmZmVycy5ydGVTaGFkb3dWaWV3TW9kZWxNYXRyaXhcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGRlcHRoTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUcmFuc2Zvcm1zKCkge1xyXG4gICAgY29uc3QgbWVzaEJhdGNoZXM6IChNZXNoQmF0Y2ggfCBUZXh0QmF0Y2gpW10gPSB0aGlzLmJhdGNoZXIuZ2V0QmF0Y2hlcyh1bmRlZmluZWQsIFtcclxuICAgICAgR2VvbWV0cnlUeXBlLk1FU0gsXHJcbiAgICAgIEdlb21ldHJ5VHlwZS5URVhUXHJcbiAgICBdKVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBtZXNoQmF0Y2hlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBtZXNoQmF0Y2g6IFNwZWNrbGVNZXNoIHwgU3BlY2tsZUluc3RhbmNlZE1lc2ggfCBTcGVja2xlQmF0Y2hlZFRleHQgPVxyXG4gICAgICAgIG1lc2hCYXRjaGVzW2tdLm1lc2hcclxuICAgICAgbWVzaEJhdGNoLnVwZGF0ZVRyYW5zZm9ybXNVbmlmb3JtKClcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgbWVzaEJhdGNoLnRyYXZlcnNlKChvYmo6IE9iamVjdDNEKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGVwdGhNYXRlcmlhbDogU3BlY2tsZURlcHRoTWF0ZXJpYWwgPVxyXG4gICAgICAgICAgb2JqLmN1c3RvbURlcHRoTWF0ZXJpYWwgYXMgU3BlY2tsZURlcHRoTWF0ZXJpYWxcclxuICAgICAgICBpZiAoZGVwdGhNYXRlcmlhbCkge1xyXG4gICAgICAgICAgbWVzaEJhdGNoLnVwZGF0ZU1hdGVyaWFsVHJhbnNmb3Jtc1VuaWZvcm0oZGVwdGhNYXRlcmlhbClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRQaXBlbGluZSgpIHtcclxuICAgIHRoaXMuX25lZWRzUmVuZGVyID0gdHJ1ZVxyXG4gICAgdGhpcy5fcGlwZWxpbmUucmVzZXQoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZW5kZXJPdmVycmlkZSkge1xyXG4gICAgICB0aGlzLl9yZW5kZXJPdmVycmlkZSgpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fc3BlY2tsZUNhbWVyYSkgcmV0dXJuXHJcblxyXG4gICAgaWYgKHRoaXMuX25lZWRzUmVuZGVyKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmluU3RhdHMuZnJhbWVTdGFydCgpXHJcbiAgICAgIHRoaXMuYmF0Y2hlci5yZW5kZXIodGhpcy5yZW5kZXJlcilcclxuICAgICAgdGhpcy5fbmVlZHNSZW5kZXIgPSB0aGlzLl9waXBlbGluZS5yZW5kZXIoKVxyXG4gICAgICB0aGlzLl9yZW5kZXJpblN0YXRzLmZyYW1lRW5kKClcclxuXHJcbiAgICAgIGlmICh0aGlzLnN1bkNvbmZpZ3VyYXRpb24uc2hhZG93Y2F0Y2hlciAmJiB0aGlzLl9zaGFkb3djYXRjaGVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2hhZG93Y2F0Y2hlci5yZW5kZXIodGhpcy5fcmVuZGVyZXIpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNpemUod2lkdGg/OiBudW1iZXIsIGhlaWdodD86IG51bWJlcikge1xyXG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7XHJcbiAgICAgIGNvbnN0IHNpemUgPSB0aGlzLl9yZW5kZXJlci5nZXRTaXplKG5ldyBWZWN0b3IyKCkpXHJcbiAgICAgIHdpZHRoID0gc2l6ZS54XHJcbiAgICAgIGhlaWdodCA9IHNpemUueVxyXG4gICAgfVxyXG4gICAgd2lkdGggPSBNYXRoLmZsb29yKHdpZHRoKVxyXG4gICAgaGVpZ2h0ID0gTWF0aC5mbG9vcihoZWlnaHQpXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodClcclxuICAgIGNvbnN0IGRwciA9IHRoaXMuX3JlbmRlcmVyLmdldFBpeGVsUmF0aW8oKVxyXG4gICAgdGhpcy5fcGlwZWxpbmUucmVzaXplKHdpZHRoICogZHByLCBoZWlnaHQgKiBkcHIpXHJcbiAgICB0aGlzLl9waXBlbGluZS5yZXNldCgpXHJcbiAgICB0aGlzLl9uZWVkc1JlbmRlciA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyAqYWRkUmVuZGVyVHJlZShyZW5kZXJUcmVlOiBSZW5kZXJUcmVlKSB7XHJcbiAgICB0aGlzLmNhbmNlbFtyZW5kZXJUcmVlLmlkXSA9IGZhbHNlXHJcbiAgICBjb25zdCBzdWJ0cmVlR3JvdXAgPSBuZXcgR3JvdXAoKVxyXG4gICAgc3VidHJlZUdyb3VwLm5hbWUgPSByZW5kZXJUcmVlLmlkXHJcbiAgICBzdWJ0cmVlR3JvdXAubGF5ZXJzLnNldChPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlQpXHJcbiAgICB0aGlzLnJvb3RHcm91cC5hZGQoc3VidHJlZUdyb3VwKVxyXG5cclxuICAgIGNvbnN0IGdlbmVyYXRvciA9IHRoaXMuYmF0Y2hlci5tYWtlQmF0Y2hlcyhcclxuICAgICAgdGhpcy50cmVlLFxyXG4gICAgICByZW5kZXJUcmVlLFxyXG4gICAgICBTcGVja2xlVHlwZUFsbFJlbmRlcmFibGVzXHJcbiAgICApXHJcbiAgICBsZXQgY3VycmVudEJhdGNoQ291bnQgPSAwXHJcbiAgICBsZXQgbGFzdEJhdGNoQ291bnQgPSAtMVxyXG4gICAgdGhpcy5fcmVuZGVyT3ZlcnJpZGUgPSAoKSA9PiB7XHJcbiAgICAgIGlmIChjdXJyZW50QmF0Y2hDb3VudCA+IGxhc3RCYXRjaENvdW50KSB7XHJcbiAgICAgICAgdGhpcy5fcGlwZWxpbmUucmVuZGVyKClcclxuICAgICAgICBsYXN0QmF0Y2hDb3VudCA9IGN1cnJlbnRCYXRjaENvdW50XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGJhdGNoIG9mIGdlbmVyYXRvcikge1xyXG4gICAgICBpZiAoIWJhdGNoKSBjb250aW51ZVxyXG5cclxuICAgICAgdGhpcy5hZGRCYXRjaChiYXRjaCwgc3VidHJlZUdyb3VwKVxyXG4gICAgICBpZiAoYmF0Y2guZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTUVTSCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGlyZWN0TGlnaHRzKClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuY2FuY2VsW3JlbmRlclRyZWUuaWRdKSB7XHJcbiAgICAgICAgdm9pZCBnZW5lcmF0b3IucmV0dXJuKClcclxuICAgICAgICB0aGlzLnJlbW92ZVJlbmRlclRyZWUocmVuZGVyVHJlZS5pZClcclxuICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxbcmVuZGVyVHJlZS5pZF1cclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnRCYXRjaENvdW50KytcclxuICAgICAgeWllbGRcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9yZW5kZXJPdmVycmlkZSA9IG51bGxcclxuICAgIHRoaXMudXBkYXRlSGVscGVycygpXHJcblxyXG4gICAgLyoqIFdlJ2xsIGp1c3QgdXBkYXRlIHRoZSBzaGFkb3djYXRjaGVyIGFmdGVyIGFsbCBiYXRjaGVzIGFyZSBsb2FkZWQgKi9cclxuICAgIHRoaXMudXBkYXRlU2hhZG93Q2F0Y2hlcih0cnVlKVxyXG4gICAgdGhpcy51cGRhdGVDbGlwcGluZ1BsYW5lcygpXHJcbiAgICBpZiAodGhpcy5fc3BlY2tsZUNhbWVyYSkgdGhpcy5fc3BlY2tsZUNhbWVyYS51cGRhdGVDYW1lcmFQbGFuZXModGhpcy5zY2VuZUJveClcclxuICAgIGRlbGV0ZSB0aGlzLmNhbmNlbFtyZW5kZXJUcmVlLmlkXVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRCYXRjaChiYXRjaDogQmF0Y2gsIHBhcmVudDogT2JqZWN0M0QpIHtcclxuICAgIGNvbnN0IGJhdGNoUmVuZGVyYWJsZSA9IGJhdGNoLnJlbmRlck9iamVjdFxyXG4gICAgcGFyZW50LmFkZChiYXRjaFJlbmRlcmFibGUpXHJcbiAgICBsZXQgdXNlUlRFID0gZmFsc2VcclxuICAgIGlmIChcclxuICAgICAgYmF0Y2hSZW5kZXJhYmxlIGluc3RhbmNlb2YgU3BlY2tsZU1lc2ggfHxcclxuICAgICAgYmF0Y2hSZW5kZXJhYmxlIGluc3RhbmNlb2YgU3BlY2tsZUluc3RhbmNlZE1lc2ggfHxcclxuICAgICAgYmF0Y2hSZW5kZXJhYmxlIGluc3RhbmNlb2YgU3BlY2tsZUJhdGNoZWRUZXh0XHJcbiAgICApIHtcclxuICAgICAgaWYgKGJhdGNoUmVuZGVyYWJsZS5UQVMuYnZoSGVscGVyKSBwYXJlbnQuYWRkKGJhdGNoUmVuZGVyYWJsZS5UQVMuYnZoSGVscGVyKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgYmF0Y2hSZW5kZXJhYmxlIGluc3RhbmNlb2YgU3BlY2tsZU1lc2ggfHxcclxuICAgICAgYmF0Y2hSZW5kZXJhYmxlIGluc3RhbmNlb2YgU3BlY2tsZUluc3RhbmNlZE1lc2hcclxuICAgICkge1xyXG4gICAgICB1c2VSVEUgPSBiYXRjaFJlbmRlcmFibGUubmVlZHNSVEVcclxuICAgIH1cclxuICAgIGlmIChiYXRjaC5nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5NRVNIKSB7XHJcbiAgICAgIGJhdGNoUmVuZGVyYWJsZS50cmF2ZXJzZSgob2JqOiBPYmplY3QzRCkgPT4ge1xyXG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IEFycmF5LmlzQXJyYXkob2JqLm1hdGVyaWFsKSA/IG9iai5tYXRlcmlhbFswXSA6IG9iai5tYXRlcmlhbFxyXG5cclxuICAgICAgICAgIG9iai5jYXN0U2hhZG93ID0gIW1hdGVyaWFsLnRyYW5zcGFyZW50XHJcbiAgICAgICAgICBvYmoucmVjZWl2ZVNoYWRvdyA9ICFtYXRlcmlhbC50cmFuc3BhcmVudFxyXG4gICAgICAgICAgb2JqLmN1c3RvbURlcHRoTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZURlcHRoTWF0ZXJpYWwoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkZXB0aFBhY2tpbmc6IFJHQkFEZXB0aFBhY2tpbmdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdXNlUlRFID8gWydVU0VfUlRFJywgJ0FMUEhBVEVTVF9SRUpFQ1RJT04nXSA6IFsnQUxQSEFURVNUX1JFSkVDVElPTiddXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld2VyLldvcmxkLmV4cGFuZFdvcmxkKGJhdGNoLmJvdW5kcylcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVSZW5kZXJUcmVlKHN1YnRyZWVJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJvb3RHcm91cC5yZW1vdmUodGhpcy5yb290R3JvdXAuZ2V0T2JqZWN0QnlOYW1lKHN1YnRyZWVJZCkgYXMgT2JqZWN0M0QpXHJcblxyXG4gICAgY29uc3QgYmF0Y2hlcyA9IHRoaXMuYmF0Y2hlci5nZXRCYXRjaGVzKHN1YnRyZWVJZClcclxuICAgIGJhdGNoZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy52aWV3ZXIuV29ybGQucmVkdWNlV29ybGQodmFsdWUuYm91bmRzKVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmJhdGNoZXIucHVyZ2VCYXRjaGVzKHN1YnRyZWVJZClcclxuICAgIHRoaXMudXBkYXRlRGlyZWN0TGlnaHRzKClcclxuICAgIHRoaXMudXBkYXRlSGVscGVycygpXHJcbiAgICB0aGlzLnVwZGF0ZVNoYWRvd0NhdGNoZXIodHJ1ZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxSZW5kZXJUcmVlKHN1YnRyZWVJZDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5jYW5jZWxbc3VidHJlZUlkXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY2FuY2VsW3N1YnRyZWVJZF0gPSB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TWF0ZXJpYWwocnZzOiBOb2RlUmVuZGVyVmlld1tdLCBtYXRlcmlhbDogTWF0ZXJpYWwpOiB2b2lkXHJcbiAgcHVibGljIHNldE1hdGVyaWFsKFxyXG4gICAgcnZzOiBOb2RlUmVuZGVyVmlld1tdLFxyXG4gICAgbWF0ZXJpYWw6IFJlbmRlck1hdGVyaWFsICYgRGlzcGxheVN0eWxlICYgTWF0ZXJpYWxPcHRpb25zXHJcbiAgKTogdm9pZFxyXG4gIHB1YmxpYyBzZXRNYXRlcmlhbChydnM6IE5vZGVSZW5kZXJWaWV3W10sIG1hdGVyaWFsOiBGaWx0ZXJNYXRlcmlhbCk6IHZvaWRcclxuICBwdWJsaWMgc2V0TWF0ZXJpYWwoXHJcbiAgICBydnM6IE5vZGVSZW5kZXJWaWV3W10sXHJcbiAgICBtYXRlcmlhbDpcclxuICAgICAgfCBNYXRlcmlhbFxyXG4gICAgICB8IChSZW5kZXJNYXRlcmlhbCAmIERpc3BsYXlTdHlsZSAmIE1hdGVyaWFsT3B0aW9ucylcclxuICAgICAgfCBGaWx0ZXJNYXRlcmlhbFxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKCFtYXRlcmlhbCkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgcnZNYXA6IHsgW2lkOiBzdHJpbmddOiBOb2RlUmVuZGVyVmlld1tdIH0gPSB7fVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBydnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgaWYgKCFydnNba10uYmF0Y2hJZCkge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFydk1hcFtydnNba10uYmF0Y2hJZF0pIHJ2TWFwW3J2c1trXS5iYXRjaElkXSA9IFtdXHJcbiAgICAgIGlmICghcnZNYXBbcnZzW2tdLmJhdGNoSWRdLmluY2x1ZGVzKHJ2c1trXSkpIHJ2TWFwW3J2c1trXS5iYXRjaElkXS5wdXNoKHJ2c1trXSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoTWF0ZXJpYWxzLmlzTWF0ZXJpYWxJbnN0YW5jZShtYXRlcmlhbCkpIHtcclxuICAgICAgdGhpcy5zZXRNYXRlcmlhbEluc3RhbmNlKHJ2TWFwLCBtYXRlcmlhbClcclxuICAgIH0gZWxzZSBpZiAoTWF0ZXJpYWxzLmlzRmlsdGVyTWF0ZXJpYWwobWF0ZXJpYWwpKSB7XHJcbiAgICAgIHRoaXMuc2V0RmlsdGVyTWF0ZXJpYWwocnZNYXAsIG1hdGVyaWFsKVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgTWF0ZXJpYWxzLmlzUmVuZGVyTWF0ZXJpYWwobWF0ZXJpYWwpIHx8XHJcbiAgICAgIE1hdGVyaWFscy5pc0Rpc3BsYXlTdHlsZShtYXRlcmlhbClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldERhdGFNYXRlcmlhbChydk1hcCwgbWF0ZXJpYWwpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1hdGVyaWFsSW5zdGFuY2UoXHJcbiAgICBydnM6IFJlY29yZDxzdHJpbmcsIE5vZGVSZW5kZXJWaWV3W10+LFxyXG4gICAgbWF0ZXJpYWw6IE1hdGVyaWFsXHJcbiAgKSB7XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gcnZzKSB7XHJcbiAgICAgIGNvbnN0IGRyYXdSYW5nZXMgPSBydnNba10ubWFwKCh2YWx1ZTogTm9kZVJlbmRlclZpZXcpID0+IHtcclxuICAgICAgICByZXR1cm4geyBvZmZzZXQ6IHZhbHVlLmJhdGNoU3RhcnQsIGNvdW50OiB2YWx1ZS5iYXRjaENvdW50LCBtYXRlcmlhbCB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmICh0aGlzLmJhdGNoZXIuYmF0Y2hlc1trXSlcclxuICAgICAgICB0aGlzLmJhdGNoZXIuYmF0Y2hlc1trXS5zZXREcmF3UmFuZ2VzKHRoaXMuZmxhdHRlbkRyYXdSYW5nZXMoZHJhd1JhbmdlcykpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlck1hdGVyaWFsKFxyXG4gICAgcnZzOiBSZWNvcmQ8c3RyaW5nLCBOb2RlUmVuZGVyVmlld1tdPixcclxuICAgIG1hdGVyaWFsOiBGaWx0ZXJNYXRlcmlhbFxyXG4gICkge1xyXG4gICAgZm9yIChjb25zdCBrIGluIHJ2cykge1xyXG4gICAgICBjb25zdCBkcmF3UmFuZ2VzID0gcnZzW2tdLm1hcCgodmFsdWU6IE5vZGVSZW5kZXJWaWV3KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9mZnNldDogdmFsdWUuYmF0Y2hTdGFydCxcclxuICAgICAgICAgIGNvdW50OiB2YWx1ZS5iYXRjaENvdW50LFxyXG4gICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuYmF0Y2hlci5tYXRlcmlhbHMuZ2V0RmlsdGVyTWF0ZXJpYWwoXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICBtYXRlcmlhbFxyXG4gICAgICAgICAgKSBhcyBNYXRlcmlhbCxcclxuICAgICAgICAgIG1hdGVyaWFsT3B0aW9uczogdGhpcy5iYXRjaGVyLm1hdGVyaWFscy5nZXRGaWx0ZXJNYXRlcmlhbE9wdGlvbnMoXHJcbiAgICAgICAgICAgIG1hdGVyaWFsXHJcbiAgICAgICAgICApIGFzIEZpbHRlck1hdGVyaWFsT3B0aW9uc1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKHRoaXMuYmF0Y2hlci5iYXRjaGVzW2tdKVxyXG4gICAgICAgIHRoaXMuYmF0Y2hlci5iYXRjaGVzW2tdLnNldERyYXdSYW5nZXModGhpcy5mbGF0dGVuRHJhd1JhbmdlcyhkcmF3UmFuZ2VzKSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0YU1hdGVyaWFsKFxyXG4gICAgcnZzOiBSZWNvcmQ8c3RyaW5nLCBOb2RlUmVuZGVyVmlld1tdPixcclxuICAgIG1hdGVyaWFsRGF0YTogUmVuZGVyTWF0ZXJpYWwgJiBEaXNwbGF5U3R5bGUgJiBNYXRlcmlhbE9wdGlvbnNcclxuICApIHtcclxuICAgIGZvciAoY29uc3QgayBpbiBydnMpIHtcclxuICAgICAgY29uc3QgZHJhd1JhbmdlcyA9IHJ2c1trXS5tYXAoKHZhbHVlOiBOb2RlUmVuZGVyVmlldykgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1hdGVyaWFsID0gdGhpcy5iYXRjaGVyLm1hdGVyaWFscy5nZXREYXRhTWF0ZXJpYWwodmFsdWUsIG1hdGVyaWFsRGF0YSlcclxuICAgICAgICA7KG1hdGVyaWFsIGFzIHVua25vd24gYXMgU3BlY2tsZU1hdGVyaWFsKS5zZXRNYXRlcmlhbE9wdGlvbnMobWF0ZXJpYWxEYXRhKVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBvZmZzZXQ6IHZhbHVlLmJhdGNoU3RhcnQsXHJcbiAgICAgICAgICBjb3VudDogdmFsdWUuYmF0Y2hDb3VudCxcclxuICAgICAgICAgIG1hdGVyaWFsXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgaWYgKHRoaXMuYmF0Y2hlci5iYXRjaGVzW2tdKVxyXG4gICAgICAgIHRoaXMuYmF0Y2hlci5iYXRjaGVzW2tdLnNldERyYXdSYW5nZXModGhpcy5mbGF0dGVuRHJhd1JhbmdlcyhkcmF3UmFuZ2VzKSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBUTyBETyFcclxuICAgKiBUaGlzIGNhbiBtZXNzIHVwIG1hdGVyaWFscyBpZiBtdWx0aXBsZSBtYXRlcmlhbHMgZXhpc3QgaW4gdGhlIHJhbmdlcyBhcmd1bWVudCAqL1xyXG4gIHByaXZhdGUgZmxhdHRlbkRyYXdSYW5nZXMocmFuZ2VzOiBBcnJheTxCYXRjaFVwZGF0ZVJhbmdlPik6IEFycmF5PEJhdGNoVXBkYXRlUmFuZ2U+IHtcclxuICAgIGlmIChyYW5nZXMubGVuZ3RoIDwgMykgcmV0dXJuIHJhbmdlc1xyXG5cclxuICAgIHJhbmdlcyA9IHJhbmdlcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLm9mZnNldCAtIGIub2Zmc2V0XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IGZsYXRSYW5nZXMgPSBbXVxyXG4gICAgbGV0IG9mZnNldCA9IHJhbmdlc1swXS5vZmZzZXRcclxuICAgIGxldCBjb3VudCA9IDBcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcmFuZ2VzLmxlbmd0aCAtIDE7IGsrKykge1xyXG4gICAgICBjb3VudCArPSByYW5nZXNba10uY291bnRcclxuICAgICAgaWYgKG9mZnNldCArIGNvdW50ID09PSByYW5nZXNbayArIDFdLm9mZnNldCkge1xyXG4gICAgICAgIGlmIChrID09PSByYW5nZXMubGVuZ3RoIC0gMikge1xyXG4gICAgICAgICAgZmxhdFJhbmdlcy5wdXNoKHtcclxuICAgICAgICAgICAgb2Zmc2V0LFxyXG4gICAgICAgICAgICBjb3VudDogY291bnQgKyByYW5nZXNbayArIDFdLmNvdW50LFxyXG4gICAgICAgICAgICBtYXRlcmlhbDogcmFuZ2VzW2tdLm1hdGVyaWFsLFxyXG4gICAgICAgICAgICAuLi4ocmFuZ2VzW2tdLm1hdGVyaWFsT3B0aW9ucyAmJiB7XHJcbiAgICAgICAgICAgICAgbWF0ZXJpYWxPcHRpb25zOiByYW5nZXNba10ubWF0ZXJpYWxPcHRpb25zXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIGZsYXRSYW5nZXMucHVzaCh7XHJcbiAgICAgICAgb2Zmc2V0LFxyXG4gICAgICAgIGNvdW50LFxyXG4gICAgICAgIG1hdGVyaWFsOiByYW5nZXNba10ubWF0ZXJpYWwsXHJcbiAgICAgICAgLi4uKHJhbmdlc1trXS5tYXRlcmlhbE9wdGlvbnMgJiYge1xyXG4gICAgICAgICAgbWF0ZXJpYWxPcHRpb25zOiByYW5nZXNba10ubWF0ZXJpYWxPcHRpb25zXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgb2Zmc2V0ID0gcmFuZ2VzW2sgKyAxXS5vZmZzZXRcclxuICAgICAgY291bnQgPSAwXHJcbiAgICAgIGlmIChrID09PSByYW5nZXMubGVuZ3RoIC0gMikge1xyXG4gICAgICAgIGZsYXRSYW5nZXMucHVzaCh7XHJcbiAgICAgICAgICBvZmZzZXQ6IHJhbmdlc1trICsgMV0ub2Zmc2V0LFxyXG4gICAgICAgICAgY291bnQ6IHJhbmdlc1trICsgMV0uY291bnQsXHJcbiAgICAgICAgICBtYXRlcmlhbDogcmFuZ2VzW2sgKyAxXS5tYXRlcmlhbCxcclxuICAgICAgICAgIC4uLihyYW5nZXNba10ubWF0ZXJpYWxPcHRpb25zICYmIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWxPcHRpb25zOiByYW5nZXNba10ubWF0ZXJpYWxPcHRpb25zXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmxhdFJhbmdlc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE1hdGVyaWFsKHJ2OiBOb2RlUmVuZGVyVmlldyk6IE1hdGVyaWFsIHwgbnVsbCB7XHJcbiAgICBpZiAoIXJ2IHx8ICFydi5iYXRjaElkKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5iYXRjaGVyLmdldEJhdGNoKHJ2KT8uZ2V0TWF0ZXJpYWwocnYpID8/IG51bGxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCYXRjaE1hdGVyaWFsKHJ2OiBOb2RlUmVuZGVyVmlldyk6IE1hdGVyaWFsIHwgbnVsbCB7XHJcbiAgICBpZiAoIXJ2IHx8ICFydi5iYXRjaElkKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5iYXRjaGVyLmdldEJhdGNoKHJ2KT8uYmF0Y2hNYXRlcmlhbCA/PyBudWxsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRNYXRlcmlhbHMoKSB7XHJcbiAgICB0aGlzLmJhdGNoZXIucmVzZXRCYXRjaGVzRHJhd1JhbmdlcygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QmF0Y2goaWQ6IHN0cmluZyk6IEJhdGNoIHtcclxuICAgIHJldHVybiB0aGlzLmJhdGNoZXIuYmF0Y2hlc1tpZF1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDbGlwcGluZ1BsYW5lcygpIHtcclxuICAgIGlmICghdGhpcy5hbGxPYmplY3RzKSByZXR1cm5cclxuICAgIGNvbnN0IHBsYW5lcyA9IHRoaXMuX2NsaXBwaW5nUGxhbmVzXHJcblxyXG4gICAgdGhpcy5hbGxPYmplY3RzLnRyYXZlcnNlKChvYmplY3QpID0+IHtcclxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSAob2JqZWN0IGFzIHVua25vd24gYXMgeyBtYXRlcmlhbDogTWF0ZXJpYWwgfSkubWF0ZXJpYWxcclxuICAgICAgaWYgKCFtYXRlcmlhbCkgcmV0dXJuXHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShtYXRlcmlhbCkpIHtcclxuICAgICAgICBtYXRlcmlhbC5jbGlwcGluZ1BsYW5lcyA9IHBsYW5lc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWF0ZXJpYWwubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgIG1hdGVyaWFsW2tdLmNsaXBwaW5nUGxhbmVzID0gcGxhbmVzXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5fcGlwZWxpbmUuc2V0Q2xpcHBpbmdQbGFuZXMocGxhbmVzKVxyXG4gICAgdGhpcy5fc2hhZG93Y2F0Y2hlcj8udXBkYXRlQ2xpcHBpbmdQbGFuZXMocGxhbmVzKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVNoYWRvd0NhdGNoZXIoZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKHRoaXMuc3VuQ29uZmlndXJhdGlvbi5zaGFkb3djYXRjaGVyICE9PSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuX3NoYWRvd2NhdGNoZXIuc2hhZG93Y2F0Y2hlck1lc2gudmlzaWJsZSA9XHJcbiAgICAgICAgdGhpcy5zdW5Db25maWd1cmF0aW9uLnNoYWRvd2NhdGNoZXJcclxuICAgIGlmICh0aGlzLnN1bkNvbmZpZ3VyYXRpb24uc2hhZG93Y2F0Y2hlcikge1xyXG4gICAgICB0aGlzLl9zaGFkb3djYXRjaGVyLmJha2UoXHJcbiAgICAgICAgbmV3IEJveDMoKS5mcm9tT0JCKHRoaXMuY2xpcHBpbmdWb2x1bWUpLFxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmNhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSxcclxuICAgICAgICBmb3JjZVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMubmVlZHNSZW5kZXIgPSB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZERpcmVjdExpZ2h0cygpIHtcclxuICAgIHRoaXMuc3VuID0gbmV3IERpcmVjdGlvbmFsTGlnaHQoMHhmZmZmZmYsIDUpXHJcbiAgICB0aGlzLnN1bi5uYW1lID0gJ3N1bidcclxuICAgIHRoaXMuc3VuLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UKVxyXG4gICAgdGhpcy5fc2NlbmUuYWRkKHRoaXMuc3VuKVxyXG5cclxuICAgIHRoaXMuc3VuLmNhc3RTaGFkb3cgPSB0cnVlXHJcblxyXG4gICAgdGhpcy5zdW4uc2hhZG93Lm1hcFNpemUud2lkdGggPSAyMDQ4XHJcbiAgICB0aGlzLnN1bi5zaGFkb3cubWFwU2l6ZS5oZWlnaHQgPSAyMDQ4XHJcblxyXG4gICAgY29uc3QgZCA9IDUwXHJcblxyXG4gICAgdGhpcy5zdW4uc2hhZG93LmNhbWVyYS5sZWZ0ID0gLWRcclxuICAgIHRoaXMuc3VuLnNoYWRvdy5jYW1lcmEucmlnaHQgPSBkXHJcbiAgICB0aGlzLnN1bi5zaGFkb3cuY2FtZXJhLnRvcCA9IGRcclxuICAgIHRoaXMuc3VuLnNoYWRvdy5jYW1lcmEuYm90dG9tID0gLWRcclxuICAgIHRoaXMuc3VuLnNoYWRvdy5jYW1lcmEubmVhciA9IDVcclxuICAgIHRoaXMuc3VuLnNoYWRvdy5jYW1lcmEuZmFyID0gMzUwXHJcbiAgICB0aGlzLnN1bi5zaGFkb3cuYmlhcyA9IC0wLjAwMVxyXG4gICAgdGhpcy5zdW4uc2hhZG93LnJhZGl1cyA9IDJcclxuXHJcbiAgICB0aGlzLnN1blRhcmdldCA9IG5ldyBPYmplY3QzRCgpXHJcbiAgICB0aGlzLl9zY2VuZS5hZGQodGhpcy5zdW5UYXJnZXQpXHJcbiAgICB0aGlzLnN1blRhcmdldC5wb3NpdGlvbi5jb3B5KHRoaXMuc2NlbmVDZW50ZXIpXHJcbiAgICB0aGlzLnN1bi50YXJnZXQgPSB0aGlzLnN1blRhcmdldFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVEaXJlY3RMaWdodHMoKSB7XHJcbiAgICBjb25zdCBwaGkgPSB0aGlzLnN1bkNvbmZpZ3VyYXRpb24uZWxldmF0aW9uXHJcbiAgICBjb25zdCB0aGV0YSA9IHRoaXMuc3VuQ29uZmlndXJhdGlvbi5hemltdXRoXHJcbiAgICBjb25zdCByYWRpdXNPZmZzZXQgPSB0aGlzLnN1bkNvbmZpZ3VyYXRpb24ucmFkaXVzIHx8IDBcclxuICAgIGlmICh0aGlzLnN1bkNvbmZpZ3VyYXRpb24uY2FzdFNoYWRvdyAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLnN1bi5jYXN0U2hhZG93ID0gdGhpcy5zdW5Db25maWd1cmF0aW9uLmNhc3RTaGFkb3dcclxuICAgIGlmICh0aGlzLnN1bkNvbmZpZ3VyYXRpb24uaW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuc3VuLmludGVuc2l0eSA9IHRoaXMuc3VuQ29uZmlndXJhdGlvbi5pbnRlbnNpdHlcclxuICAgIHRoaXMuc3VuLmNvbG9yID0gbmV3IENvbG9yKHRoaXMuc3VuQ29uZmlndXJhdGlvbi5jb2xvcilcclxuICAgIGlmICh0aGlzLnN1bkNvbmZpZ3VyYXRpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLnN1bi52aXNpYmxlID0gdGhpcy5zdW5Db25maWd1cmF0aW9uLmVuYWJsZWRcclxuXHJcbiAgICB0aGlzLnN1blRhcmdldC5wb3NpdGlvbi5jb3B5KHRoaXMuc2NlbmVDZW50ZXIpXHJcbiAgICBjb25zdCBzcGhlcmljYWwgPSBuZXcgU3BoZXJpY2FsKHRoaXMuc2NlbmVTcGhlcmUucmFkaXVzICsgcmFkaXVzT2Zmc2V0LCBwaGksIHRoZXRhKVxyXG4gICAgdGhpcy5zdW4ucG9zaXRpb24uc2V0RnJvbVNwaGVyaWNhbChzcGhlcmljYWwpXHJcbiAgICB0aGlzLnN1bi5wb3NpdGlvbi5hZGQodGhpcy5zdW5UYXJnZXQucG9zaXRpb24pXHJcbiAgICB0aGlzLnN1bi51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCB0cnVlKVxyXG4gICAgdGhpcy5zdW5UYXJnZXQudXBkYXRlTWF0cml4V29ybGQoKVxyXG4gICAgdGhpcy5zdW4uc2hhZG93LnVwZGF0ZU1hdHJpY2VzKHRoaXMuc3VuKVxyXG4gICAgY29uc3QgYm94ID0gdGhpcy5zY2VuZUJveFxyXG4gICAgY29uc3QgbG93ID0gYm94Lm1pblxyXG4gICAgY29uc3QgaGlnaCA9IGJveC5tYXhcclxuXHJcbiAgICAvKiogR2V0IHRoZSA4IHZlcnRpY2VzIG9mIHRoZSB3b3JsZCBzcGFjZSBib3VuZGluZyBib3ggKi9cclxuICAgIGNvbnN0IGNvcm5lcjEgPSBuZXcgVmVjdG9yMyhsb3cueCwgbG93LnksIGxvdy56KVxyXG4gICAgY29uc3QgY29ybmVyMiA9IG5ldyBWZWN0b3IzKGhpZ2gueCwgbG93LnksIGxvdy56KVxyXG4gICAgY29uc3QgY29ybmVyMyA9IG5ldyBWZWN0b3IzKGxvdy54LCBoaWdoLnksIGxvdy56KVxyXG4gICAgY29uc3QgY29ybmVyNCA9IG5ldyBWZWN0b3IzKGxvdy54LCBsb3cueSwgaGlnaC56KVxyXG5cclxuICAgIGNvbnN0IGNvcm5lcjUgPSBuZXcgVmVjdG9yMyhoaWdoLngsIGhpZ2gueSwgbG93LnopXHJcbiAgICBjb25zdCBjb3JuZXI2ID0gbmV3IFZlY3RvcjMoaGlnaC54LCBsb3cueSwgaGlnaC56KVxyXG4gICAgY29uc3QgY29ybmVyNyA9IG5ldyBWZWN0b3IzKGxvdy54LCBoaWdoLnksIGhpZ2gueilcclxuICAgIGNvbnN0IGNvcm5lcjggPSBuZXcgVmVjdG9yMyhoaWdoLngsIGhpZ2gueSwgaGlnaC56KVxyXG5cclxuICAgIC8qKiBUcmFuc2Zvcm0gdGhlbSB0byBsaWdodCBzcGFjZSAqL1xyXG4gICAgY29ybmVyMS5hcHBseU1hdHJpeDQodGhpcy5zdW4uc2hhZG93LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpXHJcbiAgICBjb3JuZXIyLmFwcGx5TWF0cml4NCh0aGlzLnN1bi5zaGFkb3cuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSlcclxuICAgIGNvcm5lcjMuYXBwbHlNYXRyaXg0KHRoaXMuc3VuLnNoYWRvdy5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKVxyXG4gICAgY29ybmVyNC5hcHBseU1hdHJpeDQodGhpcy5zdW4uc2hhZG93LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpXHJcbiAgICBjb3JuZXI1LmFwcGx5TWF0cml4NCh0aGlzLnN1bi5zaGFkb3cuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSlcclxuICAgIGNvcm5lcjYuYXBwbHlNYXRyaXg0KHRoaXMuc3VuLnNoYWRvdy5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKVxyXG4gICAgY29ybmVyNy5hcHBseU1hdHJpeDQodGhpcy5zdW4uc2hhZG93LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpXHJcbiAgICBjb3JuZXI4LmFwcGx5TWF0cml4NCh0aGlzLnN1bi5zaGFkb3cuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSlcclxuICAgIC8qKiBDb21wdXRlIHRoZSBsaWdodCBzcGFjZSBib3VuZGluZyBib3ggKi9cclxuICAgIGNvbnN0IGxpZ2h0U3BhY2VCb3ggPSBuZXcgQm94MygpLnNldEZyb21Qb2ludHMoW1xyXG4gICAgICBjb3JuZXIxLFxyXG4gICAgICBjb3JuZXIyLFxyXG4gICAgICBjb3JuZXIzLFxyXG4gICAgICBjb3JuZXI0LFxyXG4gICAgICBjb3JuZXI1LFxyXG4gICAgICBjb3JuZXI2LFxyXG4gICAgICBjb3JuZXI3LFxyXG4gICAgICBjb3JuZXI4XHJcbiAgICBdKVxyXG4gICAgdGhpcy5zdW4uc2hhZG93LmNhbWVyYS5sZWZ0ID0gbGlnaHRTcGFjZUJveC5taW4ueFxyXG4gICAgdGhpcy5zdW4uc2hhZG93LmNhbWVyYS5yaWdodCA9IGxpZ2h0U3BhY2VCb3gubWF4LnhcclxuICAgIHRoaXMuc3VuLnNoYWRvdy5jYW1lcmEudG9wID0gbGlnaHRTcGFjZUJveC5taW4ueVxyXG4gICAgdGhpcy5zdW4uc2hhZG93LmNhbWVyYS5ib3R0b20gPSBsaWdodFNwYWNlQm94Lm1heC55XHJcbiAgICAvKiogeiBpcyBuZWdhdGl2ZSBzbyBzbWFsbGVyIGlzIGFjdHVhbGx5ICdsYXJnZXInICovXHJcbiAgICB0aGlzLnN1bi5zaGFkb3cuY2FtZXJhLm5lYXIgPSBNYXRoLmFicyhsaWdodFNwYWNlQm94Lm1heC56KVxyXG4gICAgdGhpcy5zdW4uc2hhZG93LmNhbWVyYS5mYXIgPSBNYXRoLmFicyhsaWdodFNwYWNlQm94Lm1pbi56KVxyXG4gICAgdGhpcy5zdW4uc2hhZG93LmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KClcclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZG93TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgdGhpcy51cGRhdGVIZWxwZXJzKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTdW5MaWdodENvbmZpZ3VyYXRpb24oY29uZmlnOiBTdW5MaWdodENvbmZpZ3VyYXRpb24pIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5zdW5Db25maWd1cmF0aW9uLCBjb25maWcpXHJcbiAgICBpZiAoY29uZmlnLmluZGlyZWN0TGlnaHRJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmluZGlyZWN0SUJMSW50ZW5zaXR5ID0gY29uZmlnLmluZGlyZWN0TGlnaHRJbnRlbnNpdHlcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlRGlyZWN0TGlnaHRzKClcclxuICAgIHRoaXMudXBkYXRlU2hhZG93Q2F0Y2hlcigpXHJcbiAgICB0aGlzLnZpZXdlci5lbWl0KFZpZXdlckV2ZW50LkxpZ2h0Q29uZmlnVXBkYXRlZCwgeyAuLi5jb25maWcgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlSGVscGVycygpIHtcclxuICAgIGlmICh0aGlzLlNIT1dfSEVMUEVSUykge1xyXG4gICAgICA7KHRoaXMuX3NjZW5lLmdldE9iamVjdEJ5TmFtZSgnQ2FtSGVscGVyJykgYXMgQ2FtZXJhSGVscGVyKS51cGRhdGUoKVxyXG4gICAgICAvLyBUaGFuayB5b3UgcHJldHRpZXIsIHRoaXMgbG9va3Mgc28gbXVjaCBiZXR0ZXJcclxuICAgICAgLy8gOyh0aGlzLl9zY2VuZS5nZXRPYmplY3RCeU5hbWUoJ1NjZW5lQm94SGVscGVyJykgYXMgQm94M0hlbHBlcikuYm94LmNvcHkoXHJcbiAgICAgIC8vICAgdGhpcy5jbGlwcGluZ1ZvbHVtZVxyXG4gICAgICAvLyApXHJcbiAgICAgIDsoXHJcbiAgICAgICAgdGhpcy5fc2NlbmUuZ2V0T2JqZWN0QnlOYW1lKCdEaXJMaWdodEhlbHBlcicpIGFzIERpcmVjdGlvbmFsTGlnaHRIZWxwZXJcclxuICAgICAgKS51cGRhdGUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHF1ZXJ5SGl0cyhcclxuICAgIHJlc3VsdHM6IEFycmF5PEV4dGVuZGVkSW50ZXJzZWN0aW9uPlxyXG4gICk6IEFycmF5PHsgbm9kZTogVHJlZU5vZGU7IHBvaW50OiBWZWN0b3IzIH0+IHwgbnVsbCB7XHJcbiAgICBjb25zdCBydnM6IEFycmF5PE5vZGVSZW5kZXJWaWV3PiA9IFtdXHJcbiAgICBjb25zdCBwb2ludHMgPSBbXVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCByZXN1bHRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IHJ2TWF0ZXJpYWw6IFtOb2RlUmVuZGVyVmlldywgTWF0ZXJpYWxdID0gdGhpcy5yZW5kZXJWaWV3RnJvbUludGVyc2VjdGlvbihcclxuICAgICAgICByZXN1bHRzW2tdXHJcbiAgICAgIClcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHJ2TWF0ZXJpYWxbMF0gJiYgLy8gSWYgdGhlIHJ2IGV4aXN0c1xyXG4gICAgICAgICh0aGlzLm9iamVjdFBpY2tDb25maWd1cmF0aW9uLnBpY2tlZE9iamVjdHNGaWx0ZXIgLy8gSWYgdGhlcmUgaXMgYSBwaWNrIGZpbHRlclxyXG4gICAgICAgICAgPyB0aGlzLm9iamVjdFBpY2tDb25maWd1cmF0aW9uLnBpY2tlZE9iamVjdHNGaWx0ZXIocnZNYXRlcmlhbCkgLy8gSWYgdGhlIHBpY2sgZmlsdGVyIHBhc3Nlc1xyXG4gICAgICAgICAgOiB0cnVlKVxyXG4gICAgICApIHtcclxuICAgICAgICBydnMucHVzaChydk1hdGVyaWFsWzBdKVxyXG4gICAgICAgIHBvaW50cy5wdXNoKHJlc3VsdHNba10ucG9pbnQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQmF0Y2ggcmVqZWN0ZWQgcGlja2luZy4gVGhpcyBvbmx5IGhhcHBlbnMgd2l0aCBoaWRkZW4gbGluZXMgKi9cclxuICAgIGlmIChydnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVlcnlSZXN1bHQgPSBbXVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBydnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgaGl0SWQgPSBydnNba10ucmVuZGVyRGF0YS5pZFxyXG4gICAgICBjb25zdCBzdWJ0cmVlSWQgPSBydnNba10ucmVuZGVyRGF0YS5zdWJ0cmVlSWRcclxuICAgICAgY29uc3QgaGl0Tm9kZXMgPSB0aGlzLnRyZWUuZmluZElkKGhpdElkLCBzdWJ0cmVlSWQpXHJcbiAgICAgIGlmICghaGl0Tm9kZXMpIGNvbnRpbnVlXHJcblxyXG4gICAgICBjb25zdCBoaXROb2RlID0gaGl0Tm9kZXNbMF1cclxuICAgICAgbGV0IHBhcmVudE5vZGUgPSBoaXROb2RlXHJcbiAgICAgIHdoaWxlICghcGFyZW50Tm9kZS5tb2RlbC5hdG9taWMgJiYgcGFyZW50Tm9kZS5wYXJlbnQpIHtcclxuICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnRcclxuICAgICAgfVxyXG4gICAgICBxdWVyeVJlc3VsdC5wdXNoKHsgbm9kZTogcGFyZW50Tm9kZSwgcG9pbnQ6IHBvaW50c1trXSB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5UmVzdWx0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcXVlcnlIaXRJZHMoXHJcbiAgICByZXN1bHRzOiBBcnJheTxFeHRlbmRlZEludGVyc2VjdGlvbj5cclxuICApOiBBcnJheTx7IG5vZGVJZDogc3RyaW5nOyBwb2ludDogVmVjdG9yMyB9PiB8IG51bGwge1xyXG4gICAgY29uc3QgcXVlcnlSZXN1bHQgPSBbXVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCByZXN1bHRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGxldCBydjogTm9kZVJlbmRlclZpZXcgfCBudWxsID0gcmVzdWx0c1trXS5iYXRjaE9iamVjdFxyXG4gICAgICAgID8ucmVuZGVyVmlldyBhcyBOb2RlUmVuZGVyVmlld1xyXG4gICAgICBpZiAoIXJ2KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9XHJcbiAgICAgICAgICByZXN1bHRzW2tdLmZhY2VJbmRleCAhPT0gdW5kZWZpbmVkID8gcmVzdWx0c1trXS5mYWNlSW5kZXggOiByZXN1bHRzW2tdLmluZGV4XHJcbiAgICAgICAgaWYgKGluZGV4KSBydiA9IHRoaXMuYmF0Y2hlci5nZXRSZW5kZXJWaWV3KHJlc3VsdHNba10ub2JqZWN0LnV1aWQsIGluZGV4KVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChydikge1xyXG4gICAgICAgIHF1ZXJ5UmVzdWx0LnB1c2goeyBub2RlSWQ6IHJ2LnJlbmRlckRhdGEuaWQsIHBvaW50OiByZXN1bHRzW2tdLnBvaW50IH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQmF0Y2ggcmVqZWN0ZWQgcGlja2luZy4gVGhpcyBvbmx5IGhhcHBlbnMgd2l0aCBoaWRkZW4gbGluZXMgKi9cclxuICAgIGlmIChxdWVyeVJlc3VsdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcXVlcnlSZXN1bHRcclxuICB9XHJcblxyXG4gIC8vIFRPIERPOiBNYXliZSBuZWVkIGEgYmV0dGVyIHdheVxyXG4gIHB1YmxpYyByZW5kZXJWaWV3RnJvbUludGVyc2VjdGlvbihcclxuICAgIGludGVyc2VjdGlvbjogRXh0ZW5kZWRJbnRlcnNlY3Rpb25cclxuICApOiBbTm9kZVJlbmRlclZpZXcsIE1hdGVyaWFsXSB7XHJcbiAgICBsZXQgcnYgPSBudWxsXHJcbiAgICBsZXQgbWF0ZXJpYWwgPSBudWxsXHJcbiAgICBpZiAoaW50ZXJzZWN0aW9uLmJhdGNoT2JqZWN0KSB7XHJcbiAgICAgIHJ2ID0gaW50ZXJzZWN0aW9uLmJhdGNoT2JqZWN0LnJlbmRlclZpZXdcclxuICAgICAgbWF0ZXJpYWwgPSAoaW50ZXJzZWN0aW9uLm9iamVjdCBhcyBTcGVja2xlTWVzaCkuZ2V0QmF0Y2hPYmplY3RNYXRlcmlhbChcclxuICAgICAgICBpbnRlcnNlY3Rpb24uYmF0Y2hPYmplY3RcclxuICAgICAgKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPVxyXG4gICAgICAgIGludGVyc2VjdGlvbi5mYWNlSW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbnRlcnNlY3Rpb24uZmFjZUluZGV4ICE9PSBudWxsXHJcbiAgICAgICAgICA/IGludGVyc2VjdGlvbi5mYWNlSW5kZXhcclxuICAgICAgICAgIDogaW50ZXJzZWN0aW9uLmluZGV4ICE9PSB1bmRlZmluZWQgJiYgaW50ZXJzZWN0aW9uLmluZGV4ICE9PSBudWxsXHJcbiAgICAgICAgICA/IGludGVyc2VjdGlvbi5pbmRleFxyXG4gICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBydiA9IHRoaXMuYmF0Y2hlci5nZXRSZW5kZXJWaWV3KGludGVyc2VjdGlvbi5vYmplY3QudXVpZCwgaW5kZXgpXHJcbiAgICAgICAgaWYgKHJ2KSB7XHJcbiAgICAgICAgICBtYXRlcmlhbCA9IHRoaXMuYmF0Y2hlci5nZXRSZW5kZXJWaWV3TWF0ZXJpYWwoaW50ZXJzZWN0aW9uLm9iamVjdC51dWlkLCBpbmRleClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgcmV0dXJuIFtydiwgbWF0ZXJpYWxdXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2xpY2soZTogVmVjdG9yMiAmIHsgbXVsdGlTZWxlY3Q6IGJvb2xlYW47IGV2ZW50OiBQb2ludGVyRXZlbnQgfSkge1xyXG4gICAgaWYgKCF0aGlzLnJlbmRlcmluZ0NhbWVyYSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgcmVzdWx0czogQXJyYXk8SW50ZXJzZWN0aW9uPiB8IG51bGwgPSB0aGlzLl9pbnRlcnNlY3Rpb25zLmludGVyc2VjdChcclxuICAgICAgdGhpcy5fc2NlbmUsXHJcbiAgICAgIHRoaXMucmVuZGVyaW5nQ2FtZXJhLFxyXG4gICAgICBlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIHRydWUsXHJcbiAgICAgIHRoaXMuY2xpcHBpbmdWb2x1bWVcclxuICAgIClcclxuXHJcbiAgICBpZiAoIXJlc3VsdHMpIHtcclxuICAgICAgdGhpcy52aWV3ZXIuZW1pdChWaWV3ZXJFdmVudC5PYmplY3RDbGlja2VkLCBudWxsKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBsZXQgbXVsdGlTZWxlY3QgPSBmYWxzZVxyXG4gICAgaWYgKGUubXVsdGlTZWxlY3QpIG11bHRpU2VsZWN0ID0gdHJ1ZVxyXG4gICAgY29uc3QgcXVlcnlSZXN1bHRzID0gdGhpcy5xdWVyeUhpdHMocmVzdWx0cylcclxuICAgIGlmICghcXVlcnlSZXN1bHRzKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLmVtaXQoXHJcbiAgICAgICAgVmlld2VyRXZlbnQuT2JqZWN0Q2xpY2tlZCxcclxuICAgICAgICAhbXVsdGlTZWxlY3QgPyBudWxsIDogeyBtdWx0aXBsZTogdHJ1ZSwgZXZlbnQ6IGUuZXZlbnQgfVxyXG4gICAgICApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSB7XHJcbiAgICAgIG11bHRpcGxlOiBtdWx0aVNlbGVjdCxcclxuICAgICAgZXZlbnQ6IGUuZXZlbnQsXHJcbiAgICAgIGhpdHM6IHF1ZXJ5UmVzdWx0cy5tYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5vZGU6IHZhbHVlLm5vZGUsXHJcbiAgICAgICAgICBwb2ludDogdmFsdWUucG9pbnRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9IGFzIFNlbGVjdGlvbkV2ZW50XHJcbiAgICB0aGlzLnZpZXdlci5lbWl0KFZpZXdlckV2ZW50Lk9iamVjdENsaWNrZWQsIHNlbGVjdGlvbkluZm8pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRG91YmxlQ2xpY2soZTogVmVjdG9yMiAmIHsgbXVsdGlTZWxlY3Q6IGJvb2xlYW47IGV2ZW50OiBQb2ludGVyRXZlbnQgfSkge1xyXG4gICAgaWYgKCF0aGlzLnJlbmRlcmluZ0NhbWVyYSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgcmVzdWx0czogQXJyYXk8SW50ZXJzZWN0aW9uPiB8IG51bGwgPSB0aGlzLl9pbnRlcnNlY3Rpb25zLmludGVyc2VjdChcclxuICAgICAgdGhpcy5fc2NlbmUsXHJcbiAgICAgIHRoaXMucmVuZGVyaW5nQ2FtZXJhLFxyXG4gICAgICBlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIHRydWUsXHJcbiAgICAgIHRoaXMuY2xpcHBpbmdWb2x1bWVcclxuICAgIClcclxuICAgIGlmICghcmVzdWx0cykge1xyXG4gICAgICB0aGlzLnZpZXdlci5lbWl0KFZpZXdlckV2ZW50Lk9iamVjdERvdWJsZUNsaWNrZWQsIG51bGwpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGxldCBtdWx0aVNlbGVjdCA9IGZhbHNlXHJcbiAgICBpZiAoZS5tdWx0aVNlbGVjdCkgbXVsdGlTZWxlY3QgPSB0cnVlXHJcblxyXG4gICAgY29uc3QgcXVlcnlSZXN1bHRzID0gdGhpcy5xdWVyeUhpdHMocmVzdWx0cylcclxuICAgIGlmICghcXVlcnlSZXN1bHRzKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLmVtaXQoVmlld2VyRXZlbnQuT2JqZWN0RG91YmxlQ2xpY2tlZCwgbnVsbClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IHtcclxuICAgICAgbXVsdGlwbGU6IG11bHRpU2VsZWN0LFxyXG4gICAgICBoaXRzOiBxdWVyeVJlc3VsdHMubWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBub2RlOiB2YWx1ZS5ub2RlLFxyXG4gICAgICAgICAgcG9pbnQ6IHZhbHVlLnBvaW50XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBhcyBTZWxlY3Rpb25FdmVudFxyXG5cclxuICAgIHRoaXMudmlld2VyLmVtaXQoVmlld2VyRXZlbnQuT2JqZWN0RG91YmxlQ2xpY2tlZCwgc2VsZWN0aW9uSW5mbylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBib3hGcm9tT2JqZWN0cyhvYmplY3RJZHM6IHN0cmluZ1tdKTogQm94MyB7XHJcbiAgICBsZXQgYm94ID0gbmV3IEJveDMoKVxyXG4gICAgY29uc3QgcnZzOiBOb2RlUmVuZGVyVmlld1tdID0gW11cclxuICAgIGlmIChvYmplY3RJZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IG9iamVjdElkcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlLmZpbmRJZChvYmplY3RJZHNba10pXHJcbiAgICAgICAgaWYgKG5vZGVzKVxyXG4gICAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZTogVHJlZU5vZGUpID0+IHtcclxuICAgICAgICAgICAgcnZzLnB1c2goLi4udGhpcy50cmVlLmdldFJlbmRlclRyZWUoKS5nZXRSZW5kZXJWaWV3c0Zvck5vZGUobm9kZSkpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgYm94ID0gdGhpcy52aXNpYmxlU2NlbmVCb3hcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcnZzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuZ2V0T2JqZWN0KHJ2c1trXSlcclxuICAgICAgY29uc3QgYWFiYiA9IG9iamVjdCA/IG9iamVjdC5hYWJiIDogcnZzW2tdLmFhYmJcclxuICAgICAgaWYgKGFhYmIpIHtcclxuICAgICAgICBib3gudW5pb24oYWFiYilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGJveC5nZXRTaXplKG5ldyBWZWN0b3IzKCkpLmxlbmd0aCgpID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYG9iamVjdCBzZWxlY3Rpb24gcmVzdWx0ZWQgaW4gZW1wdHkgYm94YClcclxuICAgIH1cclxuICAgIHJldHVybiBib3hcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzY3JlZW5Ub05EQyhcclxuICAgIGNsaWVudFg6IG51bWJlcixcclxuICAgIGNsaWVudFk6IG51bWJlcixcclxuICAgIHdpZHRoPzogbnVtYmVyLFxyXG4gICAgaGVpZ2h0PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vdGhyZWVqc2Z1bmRhbWVudGFscy5vcmcvdGhyZWVqcy9sZXNzb25zL3RocmVlanMtcGlja2luZy5odG1sXHJcbiAgICBjb25zdCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50ID0gdGhpcy5fcmVuZGVyZXIuZG9tRWxlbWVudFxyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXHJcblxyXG4gICAgY29uc3QgcG9zID0ge1xyXG4gICAgICB4OlxyXG4gICAgICAgIHdpZHRoID09PSB1bmRlZmluZWRcclxuICAgICAgICAgID8gKChjbGllbnRYIC0gcmVjdC5sZWZ0KSAqIGNhbnZhcy53aWR0aCkgLyByZWN0LndpZHRoXHJcbiAgICAgICAgICA6IGNsaWVudFgsXHJcbiAgICAgIHk6XHJcbiAgICAgICAgaGVpZ2h0ID09PSB1bmRlZmluZWRcclxuICAgICAgICAgID8gKChjbGllbnRZIC0gcmVjdC50b3ApICogY2FudmFzLmhlaWdodCkgLyByZWN0LmhlaWdodFxyXG4gICAgICAgICAgOiBjbGllbnRZXHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB4OiAocG9zLnggLyAod2lkdGggPT09IHVuZGVmaW5lZCA/IGNhbnZhcy53aWR0aCA6IHdpZHRoKSkgKiAyIC0gMSxcclxuICAgICAgeTogKHBvcy55IC8gKGhlaWdodCA9PT0gdW5kZWZpbmVkID8gY2FudmFzLmhlaWdodCA6IGhlaWdodCkpICogLTIgKyAxXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTkRDVG9TY3JlZW4oXHJcbiAgICBjbGllbnRYOiBudW1iZXIsXHJcbiAgICBjbGllbnRZOiBudW1iZXIsXHJcbiAgICB3aWR0aD86IG51bWJlcixcclxuICAgIGhlaWdodD86IG51bWJlclxyXG4gICkge1xyXG4gICAgY29uc3QgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCA9IHRoaXMuX3JlbmRlcmVyLmRvbUVsZW1lbnRcclxuICAgIHdpZHRoID0gd2lkdGggIT09IHVuZGVmaW5lZCA/IHdpZHRoIDogY2FudmFzLndpZHRoXHJcbiAgICBoZWlnaHQgPSBoZWlnaHQgIT09IHVuZGVmaW5lZCA/IGhlaWdodCA6IGNhbnZhcy5oZWlnaHRcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHg6IChjbGllbnRYICogMC41ICsgMC41KSAqIHdpZHRoLFxyXG4gICAgICB5OiAoY2xpZW50WSAqIC0wLjUgKyAwLjUpICogaGVpZ2h0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVidWdTaG93QmF0Y2hlcygpIHtcclxuICAgIGZvciAoY29uc3QgayBpbiB0aGlzLmJhdGNoZXIuYmF0Y2hlcykge1xyXG4gICAgICBjb25zdCByZW5kZXJNYXQgPSB7XHJcbiAgICAgICAgaWQ6ICdzdHJpbmcnLFxyXG4gICAgICAgIGNvbG9yOiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNjc3NzIxNSksXHJcbiAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICByb3VnaG5lc3M6IDEsXHJcbiAgICAgICAgbWV0YWxuZXNzOiAwLFxyXG4gICAgICAgIHZlcnRleENvbG9yczogZmFsc2UsXHJcbiAgICAgICAgbGluZVdlaWdodDogMVxyXG4gICAgICB9IGFzIFJlbmRlck1hdGVyaWFsICYgRGlzcGxheVN0eWxlICYgTWF0ZXJpYWxPcHRpb25zXHJcbiAgICAgIHRoaXMuc2V0TWF0ZXJpYWwodGhpcy5iYXRjaGVyLmJhdGNoZXNba10ucmVuZGVyVmlld3MsIHJlbmRlck1hdClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCYXRjaElkcygpIHtcclxuICAgIGNvbnN0IGJhdGNoZXMgPSBPYmplY3QudmFsdWVzKHRoaXMuYmF0Y2hlci5iYXRjaGVzKVxyXG4gICAgYmF0Y2hlcy5zb3J0KChhLCBiKSA9PiBhLnJlbmRlclZpZXdzLmxlbmd0aCAtIGIucmVuZGVyVmlld3MubGVuZ3RoKVxyXG4gICAgY29uc3QgaWRzID0gW11cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYmF0Y2hlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBpZHMucHVzaChiYXRjaGVzW2tdLmlkKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkcy5yZXZlcnNlKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCYXRjaFNpemUoYmF0Y2hJZDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmJhdGNoZXIuYmF0Y2hlc1tiYXRjaElkXS5yZW5kZXJWaWV3cy5sZW5ndGhcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc29sYXRlQmF0Y2goYmF0Y2hJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmJhdGNoZXIucmVzZXRCYXRjaGVzRHJhd1JhbmdlcygpXHJcbiAgICB0aGlzLmJhdGNoZXIuaXNvbGF0ZUJhdGNoKGJhdGNoSWQpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T2JqZWN0cygpOiBCYXRjaE9iamVjdFtdIHtcclxuICAgIGNvbnN0IGJhdGNoZXMgPSB0aGlzLmJhdGNoZXIuZ2V0QmF0Y2hlcyh1bmRlZmluZWQsIFtcclxuICAgICAgR2VvbWV0cnlUeXBlLk1FU0gsXHJcbiAgICAgIEdlb21ldHJ5VHlwZS5URVhUXHJcbiAgICBdKVxyXG4gICAgY29uc3QgbWVzaGVzID0gYmF0Y2hlcy5tYXAoKGJhdGNoOiBNZXNoQmF0Y2ggfCBUZXh0QmF0Y2gpID0+IGJhdGNoLm1lc2gpXHJcbiAgICBjb25zdCBvYmplY3RzID0gbWVzaGVzLmZsYXRNYXAoKG1lc2gpID0+IG1lc2guYmF0Y2hPYmplY3RzKVxyXG4gICAgcmV0dXJuIG9iamVjdHNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPYmplY3QocnY6IE5vZGVSZW5kZXJWaWV3KTogQmF0Y2hPYmplY3QgfCBudWxsIHtcclxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5iYXRjaGVyLmdldEJhdGNoKHJ2KVxyXG4gICAgaWYgKCFiYXRjaCB8fCAhaXNBY2NlbGVyYXRlZEJhdGNoVHlwZShiYXRjaCkpIHtcclxuICAgICAgLy8gTG9nZ2VyLmVycm9yKCdSZW5kZXIgdmlldyBpcyBub3Qgb2YgbWVzaCB0eXBlLiBObyBiYXRjaCBvYmplY3QgZm91bmQnKVxyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhdGNoLm1lc2guYmF0Y2hPYmplY3RzLmZpbmQoXHJcbiAgICAgICh2YWx1ZSkgPT4gdmFsdWUucmVuZGVyVmlldy5ndWlkID09PSBydi5ndWlkXHJcbiAgICApIGFzIEJhdGNoT2JqZWN0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW5hYmxlTGF5ZXJzKGxheWVyczogT2JqZWN0TGF5ZXJzW10sIHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9waXBlbGluZS5wYXNzZXMuZm9yRWFjaCgocGFzczogR1Bhc3MpID0+IHtcclxuICAgICAgaWYgKCEocGFzcyBpbnN0YW5jZW9mIEJhc2VHUGFzcykpIHJldHVyblxyXG4gICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXI6IE9iamVjdExheWVycykgPT4ge1xyXG4gICAgICAgIHBhc3MuZW5hYmxlTGF5ZXIobGF5ZXIsIHZhbHVlKVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiLyoqXHJcbiAqIEZsYXR0ZW5zIGEgc3BlY2tsZSBvYmplY3QuIEl0IHdpbGwgaWdub3JlIGFycmF5cywgbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlc20sIGFzIHdlbGwgYXMgdmFyaW91cyAnc2FmZSB0byBpZ25vcmUnIHNwZWNrbGUgcHJvcGVydGllcywgc3VjaCBhc1xyXG4gKiBiYm94LCBfX2Nsb3N1cmUsIF9fcGFyZW50cywgdG90YWxDaGlsZHJlbkNvdW50LlxyXG4gKiBAcGFyYW0gb2JqIG9iamVjdCB0byBmbGF0dGVuXHJcbiAqIEByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGFsbCBpdHMgcHJvcHMgZmxhdHRlbmVkIGludG8gYHByb3Auc3VicHJvcC5zdWJzdWJwcm9wYC5cclxuICovXHJcbmNvbnN0IGZsYXR0ZW5PYmplY3QgPSBmdW5jdGlvbiAob2JqOiB7IFt4OiBzdHJpbmddOiB1bmtub3duOyBpZDogdW5rbm93biB9KSB7XHJcbiAgY29uc3QgZmxhdHRlbiA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XHJcbiAgZm9yIChjb25zdCBrIGluIG9iaikge1xyXG4gICAgaWYgKFxyXG4gICAgICBrID09PSAnaWQnIHx8XHJcbiAgICAgIGsgPT09ICdfX2Nsb3N1cmUnIHx8XHJcbiAgICAgIGsgPT09ICdfX3BhcmVudHMnIHx8XHJcbiAgICAgIGsgPT09ICdiYm94JyB8fFxyXG4gICAgICBrID09PSAndG90YWxDaGlsZHJlbkNvdW50J1xyXG4gICAgKVxyXG4gICAgICBjb250aW51ZVxyXG5cclxuICAgIGNvbnN0IHYgPSBvYmpba11cclxuICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCBBcnJheS5pc0FycmF5KHYpKSBjb250aW51ZVxyXG4gICAgaWYgKHYuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICBjb25zdCBmbGF0dGVuUHJvcCA9IGZsYXR0ZW5PYmplY3QodiBhcyB7IFt4OiBzdHJpbmddOiB1bmtub3duOyBpZDogdW5rbm93biB9KVxyXG4gICAgICBmb3IgKGNvbnN0IHBrIGluIGZsYXR0ZW5Qcm9wKSB7XHJcbiAgICAgICAgZmxhdHRlbltrICsgJy4nICsgcGtdID0gZmxhdHRlblByb3BbcGtdXHJcbiAgICAgIH1cclxuICAgICAgY29udGludWVcclxuICAgIH1cclxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdlxyXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJykgZmxhdHRlbltrXSA9IHZcclxuICB9XHJcbiAgaWYgKG9iai5pZCkgZmxhdHRlbi5pZCA9IG9iai5pZFxyXG4gIHJldHVybiBmbGF0dGVuXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZsYXR0ZW5PYmplY3RcclxuIiwiaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi4vLi4vaGVscGVycy9mbGF0dGVuLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIFRyZWVOb2RlLCBXb3JsZFRyZWUgfSBmcm9tICcuLi90cmVlL1dvcmxkVHJlZS5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eU1hbmFnZXIge1xyXG4gIHByaXZhdGUgcHJvcENhY2hlID0ge30gYXMgUmVjb3JkPHN0cmluZywgUHJvcGVydHlJbmZvW10+XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJlc291cmNlVXJsIFRoZSB0YXJnZXQgcmVzb3VyY2UncyB1cmwuIFRoaXMgbXVzdCBiZSBhbiAqKm9iamVjdCB1cmwqKiBvciBudWxsLiBJZiBudWxsLCBpdCB3aWxsIHJldHVybiB0aGUgcHJvcHMgZm9yIHRoZSB3aG9sZSBzY2VuZS5cclxuICAgKiBAcGFyYW0gYnlwYXNzQ2FjaGUgRm9yY2VzIGEgZnVsbCByZXNjYW4gaWYgc2V0IHRvIHRydWUuXHJcbiAgICogQHJldHVybnMgYSBsaXN0IG9mIHByb3BlcnR5IGluZm9zIGNvbnRhaW5pbmcgYmFzaWMgaW5mb3JtYXRpb24gZm9yIGZpbHRlcmluZyBwdXJwb3Nlcy5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvcGVydGllcyhcclxuICAgIHRyZWU6IFdvcmxkVHJlZSxcclxuICAgIHJlc291cmNlVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcclxuICAgIGJ5cGFzc0NhY2hlID0gZmFsc2VcclxuICApOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XHJcbiAgICBsZXQgcm9vdE5vZGU6IFRyZWVOb2RlID0gdHJlZS5yb290XHJcblxyXG4gICAgaWYgKCFieXBhc3NDYWNoZSAmJiB0aGlzLnByb3BDYWNoZVtyZXNvdXJjZVVybCA/IHJlc291cmNlVXJsIDogcm9vdE5vZGUubW9kZWwuaWRdKVxyXG4gICAgICByZXR1cm4gdGhpcy5wcm9wQ2FjaGVbcmVzb3VyY2VVcmwgPyByZXNvdXJjZVVybCA6IHJvb3ROb2RlLm1vZGVsLmlkXVxyXG5cclxuICAgIGlmIChyZXNvdXJjZVVybCkge1xyXG4gICAgICBjb25zdCBhY3R1YWxSb290ID0gcm9vdE5vZGUuY2hpbGRyZW4uZmluZChcclxuICAgICAgICAobjogeyBtb2RlbDogeyBpZDogc3RyaW5nIH0gfSkgPT4gbi5tb2RlbC5pZCA9PT0gcmVzb3VyY2VVcmxcclxuICAgICAgKVxyXG4gICAgICBpZiAoYWN0dWFsUm9vdCkgcm9vdE5vZGUgPSBhY3R1YWxSb290XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgcm9vdCBub2RlIGZvciAke3Jlc291cmNlVXJsfSAtIGlzIGl0IGxvYWRlZD9gKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvcFZhbHVlczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7fVxyXG5cclxuICAgIGF3YWl0IHRyZWUud2Fsa0FzeW5jKChub2RlOiBUcmVlTm9kZSkgPT4ge1xyXG4gICAgICBpZiAoIW5vZGUubW9kZWwuYXRvbWljKSByZXR1cm4gdHJ1ZVxyXG4gICAgICBjb25zdCBvYmogPSBmbGF0dGVuKG5vZGUubW9kZWwucmF3KVxyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmpba2V5XSkpIGNvbnRpbnVlXHJcbiAgICAgICAgaWYgKCFwcm9wVmFsdWVzW2tleV0pIHByb3BWYWx1ZXNba2V5XSA9IFtdXHJcbiAgICAgICAgOyhwcm9wVmFsdWVzW2tleV0gYXMgQXJyYXk8dW5rbm93bj4pLnB1c2goeyB2YWx1ZTogb2JqW2tleV0sIGlkOiBvYmouaWQgfSlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSwgcm9vdE5vZGUpXHJcblxyXG4gICAgY29uc3QgYWxsUHJvcEluZm9zOiBQcm9wZXJ0eUluZm9bXSA9IFtdXHJcblxyXG4gICAgZm9yIChjb25zdCBwcm9wS2V5IGluIHByb3BWYWx1ZXMpIHtcclxuICAgICAgY29uc3QgcHJvcFZhbHVlc0FyciA9IHByb3BWYWx1ZXNbcHJvcEtleV1cclxuICAgICAgY29uc3QgcHJvcEluZm8gPSB7fSBhcyBQcm9wZXJ0eUluZm9cclxuICAgICAgcHJvcEluZm8ua2V5ID0gcHJvcEtleVxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICBwcm9wSW5mby50eXBlID0gdHlwZW9mIHByb3BWYWx1ZXNBcnJbMF0udmFsdWUgPT09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnbnVtYmVyJ1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICBwcm9wSW5mby5vYmplY3RDb3VudCA9IHByb3BWYWx1ZXNBcnIubGVuZ3RoXHJcblxyXG4gICAgICAvLyBGb3Igc3RyaW5nIGJhc2VkIHByb3BzLCBrZWVwIHRyYWNrIG9mIHdoaWNoIGlkcyBiZWxvbmcgdG8gd2hpY2ggZ3JvdXBcclxuICAgICAgaWYgKHByb3BJbmZvLnR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5nUHJvcEluZm8gPSBwcm9wSW5mbyBhcyBTdHJpbmdQcm9wZXJ0eUluZm9cclxuICAgICAgICBjb25zdCB2YWx1ZUdyb3VwcyA9IHt9XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgIGZvciAoY29uc3QgeyB2YWx1ZSwgaWQgfSBvZiBwcm9wVmFsdWVzQXJyKSB7XHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgIGlmICghdmFsdWVHcm91cHNbdmFsdWVdKSB2YWx1ZUdyb3Vwc1t2YWx1ZV0gPSBbXVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICB2YWx1ZUdyb3Vwc1t2YWx1ZV0ucHVzaChpZClcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RyaW5nUHJvcEluZm8udmFsdWVHcm91cHMgPSBbXVxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlR3JvdXBzKSB7XHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgIHN0cmluZ1Byb3BJbmZvLnZhbHVlR3JvdXBzLnB1c2goeyB2YWx1ZToga2V5LCBpZHM6IHZhbHVlR3JvdXBzW2tleV0gfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0cmluZ1Byb3BJbmZvLnZhbHVlR3JvdXBzID0gc3RyaW5nUHJvcEluZm8udmFsdWVHcm91cHMuc29ydCgoYSwgYikgPT5cclxuICAgICAgICAgIGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICAvLyBGb3IgbnVtZXJpYyBwcm9wcywgd2Uga2VlcCB0cmFjayBvZiBtaW4gYW5kIG1heCBhbmQgYWxsIHRoZSB7aWQsIHZhbH1zXHJcbiAgICAgIGlmIChwcm9wSW5mby50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGNvbnN0IG51bVByb3AgPSBwcm9wSW5mbyBhcyBOdW1lcmljUHJvcGVydHlJbmZvXHJcbiAgICAgICAgbnVtUHJvcC5taW4gPSBOdW1iZXIuTUFYX1ZBTFVFXHJcbiAgICAgICAgbnVtUHJvcC5tYXggPSBOdW1iZXIuTUlOX1ZBTFVFXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgIGZvciAoY29uc3QgeyB2YWx1ZSB9IG9mIHByb3BWYWx1ZXNBcnIpIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSA8IG51bVByb3AubWluKSBudW1Qcm9wLm1pbiA9IHZhbHVlXHJcbiAgICAgICAgICBpZiAodmFsdWUgPiBudW1Qcm9wLm1heCkgbnVtUHJvcC5tYXggPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgbnVtUHJvcC52YWx1ZUdyb3VwcyA9IHByb3BWYWx1ZXNBcnIuc29ydCgoYSwgYikgPT4gYS52YWx1ZSAtIGIudmFsdWUpXHJcbiAgICAgICAgLy8gY29uc3Qgc29ydGVkID0gcHJvcFZhbHVlc0Fyci5zb3J0KChhLCBiKSA9PiBhLnZhbHVlIC0gYi52YWx1ZSlcclxuICAgICAgICAvLyBwcm9wSW5mby5zb3J0ZWRWYWx1ZXMgPSBzb3J0ZWQubWFwKHMgPT4gcy52YWx1ZSlcclxuICAgICAgICAvLyBwcm9wSW5mby5zb3J0ZWRJZHMgPSBzb3J0ZWQubWFwKHMgPT4gcy52YWx1ZSkgLy8gdGw7ZHI6IG5vdCB3b3J0aCBpdFxyXG4gICAgICB9XHJcbiAgICAgIGFsbFByb3BJbmZvcy5wdXNoKHByb3BJbmZvKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvcENhY2hlW3Jvb3ROb2RlLm1vZGVsLmlkXSA9IGFsbFByb3BJbmZvc1xyXG5cclxuICAgIHJldHVybiBhbGxQcm9wSW5mb3NcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcm9wZXJ0eUluZm8gdHlwZXMgcmVwcmVzZW50IGFsbCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IHlvdSBjYW4gZmlsdGVyIG9uIGluIHRoZSB2aWV3ZXJcclxuICovXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5SW5mbyB7XHJcbiAgLyoqXHJcbiAgICogUHJvcGVydHkgaWRlbnRpZmllciwgZmxhdHRlbmVkXHJcbiAgICovXHJcbiAga2V5OiBzdHJpbmdcclxuICAvKipcclxuICAgKiBUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyB0aGF0IGhhdmUgdGhpcyBwcm9wZXJ0eVxyXG4gICAqL1xyXG4gIG9iamVjdENvdW50OiBudW1iZXJcclxuICB0eXBlOiAnbnVtYmVyJyB8ICdzdHJpbmcnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTnVtZXJpY1Byb3BlcnR5SW5mbyBleHRlbmRzIFByb3BlcnR5SW5mbyB7XHJcbiAgdHlwZTogJ251bWJlcidcclxuICAvKipcclxuICAgKiBBYnNvbHV0ZSBtaW4vbWF4IHZhbHVlcyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgcHJvcGVydHlcclxuICAgKi9cclxuICBtaW46IG51bWJlclxyXG4gIG1heDogbnVtYmVyXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgcGFpcnMgb2Ygb2JqZWN0IElEcyBhbmQgdGhlaXIgYWN0dWFsIHZhbHVlcyBmb3IgdGhhdCBwcm9wZXJ0eVxyXG4gICAqL1xyXG4gIHZhbHVlR3JvdXBzOiB7IHZhbHVlOiBudW1iZXI7IGlkOiBzdHJpbmcgfVtdXHJcbiAgLyoqXHJcbiAgICogVXNlciBkZWZpbmVkL2ZpbHRlcmVkIG1pbi9tYXggdGhhdCBpcyBib3VuZCB3aXRoaW4gbWluL21heCBhYm92ZVxyXG4gICAqL1xyXG4gIHBhc3NNaW46IG51bWJlciB8IG51bGxcclxuICBwYXNzTWF4OiBudW1iZXIgfCBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nUHJvcGVydHlJbmZvIGV4dGVuZHMgUHJvcGVydHlJbmZvIHtcclxuICB0eXBlOiAnc3RyaW5nJ1xyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIHBhaXJzIG9mIG9iamVjdCBJRHMgYW5kIHRoZWlyIGFjdHVhbCB2YWx1ZXMgZm9yIHRoYXQgcHJvcGVydHlcclxuICAgKi9cclxuICB2YWx1ZUdyb3VwczogeyB2YWx1ZTogc3RyaW5nOyBpZHM6IHN0cmluZ1tdIH1bXVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSW50ZXJzZWN0aW9uLCBSYXksIFZlY3RvcjIsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IFNwZWNrbGVSZW5kZXJlciBmcm9tICcuLi9TcGVja2xlUmVuZGVyZXIuanMnXHJcbmltcG9ydCB0eXBlIHsgSW50ZXJzZWN0aW9uUXVlcnksIEludGVyc2VjdGlvblF1ZXJ5UmVzdWx0IH0gZnJvbSAnLi9RdWVyeS5qcydcclxuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IExvZ2dlciBmcm9tICcuLi91dGlscy9Mb2dnZXIuanMnXHJcblxyXG5leHBvcnQgY2xhc3MgSW50ZXJzZWN0aW9uUXVlcnlTb2x2ZXIge1xyXG4gIHByaXZhdGUgdmVjQnVmZjA6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJpdmF0ZSB2ZWNCdWZmMTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJlciE6IFNwZWNrbGVSZW5kZXJlclxyXG5cclxuICBwdWJsaWMgc2V0Q29udGV4dChyZW5kZXJlcjogU3BlY2tsZVJlbmRlcmVyKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb2x2ZShxdWVyeTogSW50ZXJzZWN0aW9uUXVlcnkpOiBJbnRlcnNlY3Rpb25RdWVyeVJlc3VsdCB8IG51bGwge1xyXG4gICAgc3dpdGNoIChxdWVyeS5vcGVyYXRpb24pIHtcclxuICAgICAgY2FzZSAnT2NjbHVzaW9uJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5zb2x2ZU9jY2x1c2lvbihxdWVyeSlcclxuICAgICAgY2FzZSAnUGljayc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc29sdmVQaWNrKHF1ZXJ5KVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIExvZ2dlci5lcnJvcignTWFsZm9ybWVkIHF1ZXJ5JylcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzb2x2ZU9jY2x1c2lvbihxdWVyeTogSW50ZXJzZWN0aW9uUXVlcnkpOiBJbnRlcnNlY3Rpb25RdWVyeVJlc3VsdCB7XHJcbiAgICBpZiAoIXRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhKSByZXR1cm4geyBvYmplY3RzOiBudWxsIH1cclxuXHJcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnZlY0J1ZmYwLnNldChxdWVyeS5wb2ludC54LCBxdWVyeS5wb2ludC55LCBxdWVyeS5wb2ludC56IHx8IDApXHJcbiAgICBjb25zdCBkaXIgPSB0aGlzLnZlY0J1ZmYxLmNvcHkodGFyZ2V0KS5zdWIodGhpcy5yZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEucG9zaXRpb24pXHJcbiAgICBkaXIubm9ybWFsaXplKClcclxuICAgIGNvbnN0IHJheSA9IG5ldyBSYXkodGhpcy5yZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEucG9zaXRpb24sIGRpcilcclxuICAgIGNvbnN0IHJlc3VsdHM6IEFycmF5PEludGVyc2VjdGlvbj4gfCBudWxsID1cclxuICAgICAgdGhpcy5yZW5kZXJlci5pbnRlcnNlY3Rpb25zLmludGVyc2VjdFJheShcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNjZW5lLFxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhLFxyXG4gICAgICAgIHJheSxcclxuICAgICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuY2xpcHBpbmdWb2x1bWVcclxuICAgICAgKVxyXG4gICAgaWYgKCFyZXN1bHRzIHx8IHJlc3VsdHMubGVuZ3RoID09PSAwKSByZXR1cm4geyBvYmplY3RzOiBudWxsIH1cclxuICAgIGNvbnN0IGhpdHMgPSB0aGlzLnJlbmRlcmVyLnF1ZXJ5SGl0SWRzKHJlc3VsdHMpXHJcbiAgICBpZiAoIWhpdHMpIHJldHVybiB7IG9iamVjdHM6IG51bGwgfVxyXG4gICAgbGV0IHRhcmdldERpc3RhbmNlID0gdGhpcy5yZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEucG9zaXRpb24uZGlzdGFuY2VUbyh0YXJnZXQpXHJcbiAgICB0YXJnZXREaXN0YW5jZSAtPSBxdWVyeS50b2xlcmFuY2UgIT09IHVuZGVmaW5lZCA/IHF1ZXJ5LnRvbGVyYW5jZSA6IDBcclxuXHJcbiAgICBpZiAodGFyZ2V0RGlzdGFuY2UgPCByZXN1bHRzWzBdLmRpc3RhbmNlKSB7XHJcbiAgICAgIHJldHVybiB7IG9iamVjdHM6IG51bGwgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBvYmplY3RzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGd1aWQ6IGhpdHNbMF0ubm9kZUlkLFxyXG4gICAgICAgICAgICBwb2ludDogaGl0c1swXS5wb2ludFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzb2x2ZVBpY2socXVlcnk6IEludGVyc2VjdGlvblF1ZXJ5KTogSW50ZXJzZWN0aW9uUXVlcnlSZXN1bHQgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5yZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEpIHJldHVybiBudWxsXHJcblxyXG4gICAgY29uc3QgcmVzdWx0czogQXJyYXk8SW50ZXJzZWN0aW9uPiB8IG51bGwgPSB0aGlzLnJlbmRlcmVyLmludGVyc2VjdGlvbnMuaW50ZXJzZWN0KFxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNjZW5lLFxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcmluZ0NhbWVyYSxcclxuICAgICAgbmV3IFZlY3RvcjIocXVlcnkucG9pbnQueCwgcXVlcnkucG9pbnQueSksXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgdHJ1ZSxcclxuICAgICAgdGhpcy5yZW5kZXJlci5jbGlwcGluZ1ZvbHVtZVxyXG4gICAgKVxyXG4gICAgaWYgKCFyZXN1bHRzKSByZXR1cm4gbnVsbFxyXG4gICAgY29uc3QgaGl0cyA9IHRoaXMucmVuZGVyZXIucXVlcnlIaXRzKHJlc3VsdHMpXHJcbiAgICBpZiAoIWhpdHMpIHJldHVybiBudWxsXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBvYmplY3RzOiBoaXRzLm1hcCgodmFsdWUpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZ3VpZDogdmFsdWUubm9kZS5tb2RlbC5pZCxcclxuICAgICAgICAgIG9iamVjdDogdmFsdWUubm9kZS5tb2RlbC5yYXcsXHJcbiAgICAgICAgICBwb2ludDogdmFsdWUucG9pbnRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IEZydXN0dW0sIFZlY3RvcjMgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IFNwZWNrbGVSZW5kZXJlciBmcm9tICcuLi9TcGVja2xlUmVuZGVyZXIuanMnXHJcbmltcG9ydCB0eXBlIHsgUG9pbnRRdWVyeSwgUG9pbnRRdWVyeVJlc3VsdCB9IGZyb20gJy4vUXVlcnkuanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5cclxuY29uc3QgZnJ1c3R1bUJ1ZjogRnJ1c3R1bSA9IG5ldyBGcnVzdHVtKClcclxuY29uc3QgdmVjM0J1ZmY6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5leHBvcnQgY2xhc3MgUG9pbnRRdWVyeVNvbHZlciB7XHJcbiAgcHJpdmF0ZSByZW5kZXJlcjogU3BlY2tsZVJlbmRlcmVyXHJcblxyXG4gIHB1YmxpYyBzZXRDb250ZXh0KHJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXIpIHtcclxuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlclxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvbHZlKHF1ZXJ5OiBQb2ludFF1ZXJ5KTogUG9pbnRRdWVyeVJlc3VsdCB8IG51bGwge1xyXG4gICAgc3dpdGNoIChxdWVyeS5vcGVyYXRpb24pIHtcclxuICAgICAgY2FzZSAnUHJvamVjdCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc29sdmVQcm9qZWN0aW9uKHF1ZXJ5KVxyXG4gICAgICBjYXNlICdVbnByb2plY3QnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNvbHZlVW5wcm9qZWN0aW9uKHF1ZXJ5KVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIExvZ2dlci5lcnJvcignTWFsZm9ybWVkIHF1ZXJ5JylcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzb2x2ZVByb2plY3Rpb24ocXVlcnk6IFBvaW50UXVlcnkpOiBQb2ludFF1ZXJ5UmVzdWx0IHtcclxuICAgIC8vIFdPUkxEXHJcbiAgICBjb25zdCBwcm9qZWN0ZWQgPSBuZXcgVmVjdG9yMyhxdWVyeS5wb2ludC54LCBxdWVyeS5wb2ludC55LCBxdWVyeS5wb2ludC56KVxyXG4gICAgbGV0IGluRnJ1c3R1bSA9IGZhbHNlXHJcblxyXG4gICAgaWYgKHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhKSB7XHJcbiAgICAgIC8qKiBXZSBuZWVkIHRvIGNoZWNrIGZydXN0dW0gaW5jbHVzaW9uIGluIHZpZXcgc3BhY2UuICovXHJcbiAgICAgIHZlYzNCdWZmLmNvcHkocHJvamVjdGVkKVxyXG4gICAgICB2ZWMzQnVmZi5hcHBseU1hdHJpeDQodGhpcy5yZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKVxyXG5cclxuICAgICAgLyoqIFdlIGNoZWNrIGluLWZydXN0dW0gKmJlZm9yZSogcHJvamVjdGlvbiAqL1xyXG4gICAgICBpbkZydXN0dW0gPSBmcnVzdHVtQnVmXHJcbiAgICAgICAgLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhLnByb2plY3Rpb25NYXRyaXgpXHJcbiAgICAgICAgLmNvbnRhaW5zUG9pbnQodmVjM0J1ZmYpXHJcbiAgICAgIHByb2plY3RlZC5wcm9qZWN0KHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhKVxyXG4gICAgfSBlbHNlIExvZ2dlci5lcnJvcignQ291bGQgbm90IHJ1biBxdWVyeS4gQ2FtZXJhIGlzIG51bGwnKVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIE5EQ1xyXG4gICAgICB4OiBwcm9qZWN0ZWQueCxcclxuICAgICAgeTogcHJvamVjdGVkLnksXHJcbiAgICAgIHo6IHByb2plY3RlZC56LFxyXG4gICAgICBpbkZydXN0dW1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc29sdmVVbnByb2plY3Rpb24ocXVlcnk6IFBvaW50UXVlcnkpOiBQb2ludFF1ZXJ5UmVzdWx0IHtcclxuICAgIC8vIE5EQ1xyXG4gICAgbGV0IGluRnJ1c3R1bSA9IGZhbHNlXHJcbiAgICBjb25zdCB1bnByb2plY3RlZCA9IG5ldyBWZWN0b3IzKHF1ZXJ5LnBvaW50LngsIHF1ZXJ5LnBvaW50LnksIHF1ZXJ5LnBvaW50LnopXHJcbiAgICBpZiAodGhpcy5yZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEpIHtcclxuICAgICAgdW5wcm9qZWN0ZWQudW5wcm9qZWN0KHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhKVxyXG5cclxuICAgICAgLyoqIFdlIG5lZWQgdG8gY2hlY2sgZnJ1c3R1bSBpbmNsdXNpb24gaW4gdmlldyBzcGFjZS4gKi9cclxuICAgICAgdmVjM0J1ZmYuY29weSh1bnByb2plY3RlZClcclxuICAgICAgdmVjM0J1ZmYuYXBwbHlNYXRyaXg0KHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSlcclxuXHJcbiAgICAgIC8qKiBXZSBjaGVjayBpbi1mcnVzdHVtICphZnRlciogcHJvamVjdGlvbiAqL1xyXG4gICAgICBpbkZydXN0dW0gPSBmcnVzdHVtQnVmXHJcbiAgICAgICAgLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhLnByb2plY3Rpb25NYXRyaXgpXHJcbiAgICAgICAgLmNvbnRhaW5zUG9pbnQodmVjM0J1ZmYpXHJcbiAgICB9IGVsc2UgTG9nZ2VyLmVycm9yKCdDb3VsZCBub3QgcnVuIHF1ZXJ5LiBDYW1lcmEgaXMgbnVsbCcpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvLyBXT1JMRFxyXG4gICAgICB4OiB1bnByb2plY3RlZC54LFxyXG4gICAgICB5OiB1bnByb2plY3RlZC55LFxyXG4gICAgICB6OiB1bnByb2plY3RlZC56LFxyXG4gICAgICBpbkZydXN0dW1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW50ZXJzZWN0aW9uUXVlcnlTb2x2ZXIgfSBmcm9tICcuL0ludGVyc2VjdGlvblF1ZXJ5U29sdmVyLmpzJ1xyXG5pbXBvcnQgeyBQb2ludFF1ZXJ5U29sdmVyIH0gZnJvbSAnLi9Qb2ludFF1ZXJ5U29sdmVyLmpzJ1xyXG5pbXBvcnQgdHlwZSB7IEludGVyc2VjdGlvblF1ZXJ5LCBQb2ludFF1ZXJ5LCBRdWVyeSB9IGZyb20gJy4vUXVlcnkuanMnXHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcmllcyB7XHJcbiAgcHVibGljIHN0YXRpYyBEZWZhdWx0UG9pbnRRdWVyeVNvbHZlcjogUG9pbnRRdWVyeVNvbHZlciA9IG5ldyBQb2ludFF1ZXJ5U29sdmVyKClcclxuICBwdWJsaWMgc3RhdGljIERlZmF1bHRJbnRlcnNlY3Rpb25RdWVyeVNvbHZlcjogSW50ZXJzZWN0aW9uUXVlcnlTb2x2ZXIgPVxyXG4gICAgbmV3IEludGVyc2VjdGlvblF1ZXJ5U29sdmVyKClcclxuICBwdWJsaWMgc3RhdGljIGlzUG9pbnRRdWVyeShxdWVyeTogUXVlcnkpOiBxdWVyeSBpcyBQb2ludFF1ZXJ5IHtcclxuICAgIHJldHVybiBxdWVyeS5vcGVyYXRpb24gPT09ICdQcm9qZWN0JyB8fCBxdWVyeS5vcGVyYXRpb24gPT09ICdVbnByb2plY3QnXHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgaXNJbnRlcnNlY3Rpb25RdWVyeShxdWVyeTogUXVlcnkpOiBxdWVyeSBpcyBJbnRlcnNlY3Rpb25RdWVyeSB7XHJcbiAgICByZXR1cm4gcXVlcnkub3BlcmF0aW9uID09PSAnT2NjbHVzaW9uJyB8fCBxdWVyeS5vcGVyYXRpb24gPT09ICdQaWNrJ1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAndHlwZS1mZXN0J1xyXG5pbXBvcnQgeyB0eXBlIElWaWV3ZXIgfSBmcm9tICcuLi8uLi9pbmRleC5qcydcclxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuLi9FdmVudEVtaXR0ZXIuanMnXHJcblxyXG5leHBvcnQgY2xhc3MgRXh0ZW5zaW9uIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICBwdWJsaWMgZ2V0IGluamVjdCgpOiBBcnJheTxDb25zdHJ1Y3RvcjxFeHRlbnNpb24+PiB7XHJcbiAgICByZXR1cm4gW11cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB2aWV3ZXI6IElWaWV3ZXJcclxuICBwcm90ZWN0ZWQgX2VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICBwdWJsaWMgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBlbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9lbmFibGVkID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2aWV3ZXI6IElWaWV3ZXIsIC4uLmFyZ3M6IEV4dGVuc2lvbltdKSB7XHJcbiAgICBhcmdzXHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLnZpZXdlciA9IHZpZXdlclxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRWFybHlVcGRhdGUoZGVsdGFUaW1lPzogbnVtYmVyKSB7XHJcbiAgICBkZWx0YVRpbWVcclxuICAgIC8qIEVNUFRZKi9cclxuICB9XHJcbiAgcHVibGljIG9uTGF0ZVVwZGF0ZShkZWx0YVRpbWU/OiBudW1iZXIpIHtcclxuICAgIGRlbHRhVGltZVxyXG4gICAgLyogRU1QVFkqL1xyXG4gIH1cclxuICBwdWJsaWMgb25SZW5kZXIoKSB7XHJcbiAgICAvKiBFTVBUWSovXHJcbiAgfVxyXG4gIHB1YmxpYyBvblJlc2l6ZSgpIHtcclxuICAgIC8qIEVNUFRZKi9cclxuICB9XHJcbn1cclxuIiwiLyogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7XHJcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAqXHJcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICpcclxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLFxyXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuICovXHJcblxyXG5pbXBvcnQgeyBUSU1FX01TIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5cclxuZXhwb3J0IGNvbnN0IFNFVFRMSU5HX1RJTUUgPSAxMCAqIFRJTUVfTVMuc2Vjb25kIC8vIHBsZW50eSBsb25nIGVub3VnaFxyXG5jb25zdCBNSU5fREVDQVlfTUlMTElTRUNPTkRTID0gMC4wMDFcclxuZXhwb3J0IGNvbnN0IERFQ0FZX01JTExJU0VDT05EUyA9IDUwXHJcblxyXG4vKipcclxuICogVGhlIERhbXBlciBjbGFzcyBpcyBhIGdlbmVyaWMgc2Vjb25kLW9yZGVyIGNyaXRpY2FsbHkgZGFtcGVkIHN5c3RlbSB0aGF0IGRvZXNcclxuICogb25lIGxpbmVhciBzdGVwIG9mIHRoZSBkZXNpcmVkIGxlbmd0aCBvZiB0aW1lLiBUaGUgb25seSBwYXJhbWV0ZXIgaXNcclxuICogREVDQVlfTUlMTElTRUNPTkRTLiBUaGlzIGNvbW1vbiBwYXJhbWV0ZXIgbWFrZXMgYWxsIHN0YXRlcyBjb252ZXJnZSBhdCB0aGVcclxuICogc2FtZSByYXRlIHJlZ2FyZGxlc3Mgb2Ygc2NhbGUuIHhOb3JtYWxpemF0aW9uIGlzIGEgbnVtYmVyIHRvIHByb3ZpZGUgdGhlXHJcbiAqIHJvdWdoIHNjYWxlIG9mIHgsIHN1Y2ggdGhhdCBOSUxfU1BFRUQgY2xhbXBpbmcgYWxzbyBoYXBwZW5zIGF0IHJvdWdobHkgdGhlXHJcbiAqIHNhbWUgY29udmVyZ2VuY2UgZm9yIGFsbCBzdGF0ZXMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGFtcGVyIHtcclxuICBwcml2YXRlIHZlbG9jaXR5OiBudW1iZXIgPSAwXHJcbiAgcHJpdmF0ZSBuYXR1cmFsRnJlcXVlbmN5OiBudW1iZXIgPSAwXHJcblxyXG4gIGNvbnN0cnVjdG9yKGRlY2F5TWlsbGlzZWNvbmRzOiBudW1iZXIgPSBERUNBWV9NSUxMSVNFQ09ORFMpIHtcclxuICAgIHRoaXMuc2V0RGVjYXlUaW1lKGRlY2F5TWlsbGlzZWNvbmRzKVxyXG4gIH1cclxuXHJcbiAgc2V0RGVjYXlUaW1lKGRlY2F5TWlsbGlzZWNvbmRzOiBudW1iZXIpIHtcclxuICAgIHRoaXMubmF0dXJhbEZyZXF1ZW5jeSA9IDEgLyBNYXRoLm1heChNSU5fREVDQVlfTUlMTElTRUNPTkRTLCBkZWNheU1pbGxpc2Vjb25kcylcclxuICB9XHJcblxyXG4gIHVwZGF0ZShcclxuICAgIHg6IG51bWJlcixcclxuICAgIHhHb2FsOiBudW1iZXIsXHJcbiAgICB0aW1lU3RlcE1pbGxpc2Vjb25kczogbnVtYmVyLFxyXG4gICAgeE5vcm1hbGl6YXRpb246IG51bWJlclxyXG4gICk6IG51bWJlciB7XHJcbiAgICBjb25zdCBuaWxTcGVlZCA9IDAuMDAwMiAqIHRoaXMubmF0dXJhbEZyZXF1ZW5jeVxyXG5cclxuICAgIGlmICh4ID09PSBudWxsIHx8IHhOb3JtYWxpemF0aW9uID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB4R29hbFxyXG4gICAgfVxyXG4gICAgaWYgKHggPT09IHhHb2FsICYmIHRoaXMudmVsb2NpdHkgPT09IDApIHtcclxuICAgICAgcmV0dXJuIHhHb2FsXHJcbiAgICB9XHJcbiAgICBpZiAodGltZVN0ZXBNaWxsaXNlY29uZHMgPCAwKSB7XHJcbiAgICAgIHJldHVybiB4XHJcbiAgICB9XHJcbiAgICAvLyBFeGFjdCBzb2x1dGlvbiB0byBhIGNyaXRpY2FsbHkgZGFtcGVkIHNlY29uZC1vcmRlciBzeXN0ZW0sIHdoZXJlOlxyXG4gICAgLy8gYWNjZWxlcmF0aW9uID0gdGhpcy5uYXR1cmFsRnJlcXVlbmN5ICogdGhpcy5uYXR1cmFsRnJlcXVlbmN5ICogKHhHb2FsXHJcbiAgICAvLyAtIHgpIC0gMiAqIHRoaXMubmF0dXJhbEZyZXF1ZW5jeSAqIHRoaXMudmVsb2NpdHk7XHJcbiAgICBjb25zdCBkZWx0YVggPSB4IC0geEdvYWxcclxuICAgIGNvbnN0IGludGVybWVkaWF0ZVZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eSArIHRoaXMubmF0dXJhbEZyZXF1ZW5jeSAqIGRlbHRhWFxyXG4gICAgY29uc3QgaW50ZXJtZWRpYXRlWCA9IGRlbHRhWCArIHRpbWVTdGVwTWlsbGlzZWNvbmRzICogaW50ZXJtZWRpYXRlVmVsb2NpdHlcclxuICAgIGNvbnN0IGRlY2F5ID0gTWF0aC5leHAoLXRoaXMubmF0dXJhbEZyZXF1ZW5jeSAqIHRpbWVTdGVwTWlsbGlzZWNvbmRzKVxyXG4gICAgY29uc3QgbmV3VmVsb2NpdHkgPVxyXG4gICAgICAoaW50ZXJtZWRpYXRlVmVsb2NpdHkgLSB0aGlzLm5hdHVyYWxGcmVxdWVuY3kgKiBpbnRlcm1lZGlhdGVYKSAqIGRlY2F5XHJcbiAgICBjb25zdCBhY2NlbGVyYXRpb24gPVxyXG4gICAgICAtdGhpcy5uYXR1cmFsRnJlcXVlbmN5ICogKG5ld1ZlbG9jaXR5ICsgaW50ZXJtZWRpYXRlVmVsb2NpdHkgKiBkZWNheSlcclxuICAgIGlmIChcclxuICAgICAgTWF0aC5hYnMobmV3VmVsb2NpdHkpIDwgbmlsU3BlZWQgKiBNYXRoLmFicyh4Tm9ybWFsaXphdGlvbikgJiZcclxuICAgICAgYWNjZWxlcmF0aW9uICogZGVsdGFYID49IDBcclxuICAgICkge1xyXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGNvbnRyb2xzIHNldHRsZSBhbmQgc3RvcCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaW5zdGVhZFxyXG4gICAgICAvLyBvZiBhc3ltcHRvdGljYWxseSBhcHByb2FjaGluZyB0aGVpciBnb2FsLlxyXG4gICAgICB0aGlzLnZlbG9jaXR5ID0gMFxyXG4gICAgICByZXR1cm4geEdvYWxcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmVsb2NpdHkgPSBuZXdWZWxvY2l0eVxyXG4gICAgICByZXR1cm4geEdvYWwgKyBpbnRlcm1lZGlhdGVYICogZGVjYXlcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgT3J0aG9ncmFwaGljQ2FtZXJhLCBQZXJzcGVjdGl2ZUNhbWVyYSwgU3BoZXJlLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi4vLi4vRXZlbnRFbWl0dGVyLmpzJ1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNwZWNrbGVDb250cm9scyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgcHJvdGVjdGVkIF91cDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDEsIDApXHJcbiAgcHJvdGVjdGVkIF9taW5EaXN0OiBudW1iZXIgPSAwXHJcblxyXG4gIHB1YmxpYyBnZXQgdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXBcclxuICB9XHJcbiAgcHVibGljIHNldCB1cCh2YWx1ZTogVmVjdG9yMykge1xyXG4gICAgdGhpcy5fdXAuY29weSh2YWx1ZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWluRGlzdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9taW5EaXN0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG1pbkRpc3QodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbWluRGlzdCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBnZXQgb3B0aW9ucygpOiBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIHVua25vd24+PlxyXG4gIGFic3RyYWN0IHNldCBvcHRpb25zKHZhbHVlOiBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIHVua25vd24+PilcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IGVuYWJsZWQoKTogYm9vbGVhblxyXG4gIGFic3RyYWN0IHNldCBlbmFibGVkKHZhbHVlOiBib29sZWFuKVxyXG4gIGFic3RyYWN0IHNldCB0YXJnZXRDYW1lcmEodGFyZ2V0OiBQZXJzcGVjdGl2ZUNhbWVyYSB8IE9ydGhvZ3JhcGhpY0NhbWVyYSlcclxuXHJcbiAgYWJzdHJhY3QgaXNTdGF0aW9uYXJ5KCk6IGJvb2xlYW5cclxuICBhYnN0cmFjdCB1cGRhdGUoZGVsdGE/OiBudW1iZXIpOiBib29sZWFuXHJcbiAgYWJzdHJhY3QganVtcFRvR29hbCgpOiB2b2lkXHJcbiAgYWJzdHJhY3QgZml0VG9TcGhlcmUoc3BoZXJlOiBTcGhlcmUpOiB2b2lkXHJcbiAgYWJzdHJhY3QgZGlzcG9zZSgpOiB2b2lkXHJcblxyXG4gIGFic3RyYWN0IGZyb21Qb3NpdGlvbkFuZFRhcmdldChwb3NpdGlvbjogVmVjdG9yMywgdGFyZ2V0OiBWZWN0b3IzKTogdm9pZFxyXG4gIGFic3RyYWN0IGdldFRhcmdldCgpOiBWZWN0b3IzXHJcbiAgYWJzdHJhY3QgZ2V0UG9zaXRpb24oKTogVmVjdG9yM1xyXG4gIGFic3RyYWN0IGdldEN1cnJlbnRUYXJnZXQoKTogVmVjdG9yM1xyXG4gIGFic3RyYWN0IGdldEN1cnJlbnRQb3NpdGlvbigpOiBWZWN0b3IzXHJcbn1cclxuIiwiLyogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7XHJcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAqXHJcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICpcclxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLFxyXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuICovXHJcblxyXG5pbXBvcnQgeyBUSU1FX01TIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5cclxuZXhwb3J0IGNvbnN0IFNFVFRMSU5HX1RJTUUgPSAxMCAqIFRJTUVfTVMuc2Vjb25kIC8vIHBsZW50eSBsb25nIGVub3VnaFxyXG5jb25zdCBNSU5fREVDQVlfTUlMTElTRUNPTkRTID0gMC4wMDFcclxuZXhwb3J0IGNvbnN0IERFQ0FZX01JTExJU0VDT05EUyA9IDUwXHJcblxyXG4vKipcclxuICogVGhlIERhbXBlciBjbGFzcyBpcyBhIGdlbmVyaWMgc2Vjb25kLW9yZGVyIGNyaXRpY2FsbHkgZGFtcGVkIHN5c3RlbSB0aGF0IGRvZXNcclxuICogb25lIGxpbmVhciBzdGVwIG9mIHRoZSBkZXNpcmVkIGxlbmd0aCBvZiB0aW1lLiBUaGUgb25seSBwYXJhbWV0ZXIgaXNcclxuICogREVDQVlfTUlMTElTRUNPTkRTLiBUaGlzIGNvbW1vbiBwYXJhbWV0ZXIgbWFrZXMgYWxsIHN0YXRlcyBjb252ZXJnZSBhdCB0aGVcclxuICogc2FtZSByYXRlIHJlZ2FyZGxlc3Mgb2Ygc2NhbGUuIHhOb3JtYWxpemF0aW9uIGlzIGEgbnVtYmVyIHRvIHByb3ZpZGUgdGhlXHJcbiAqIHJvdWdoIHNjYWxlIG9mIHgsIHN1Y2ggdGhhdCBOSUxfU1BFRUQgY2xhbXBpbmcgYWxzbyBoYXBwZW5zIGF0IHJvdWdobHkgdGhlXHJcbiAqIHNhbWUgY29udmVyZ2VuY2UgZm9yIGFsbCBzdGF0ZXMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQW5nbGVEYW1wZXIge1xyXG4gIHByaXZhdGUgdmVsb2NpdHk6IG51bWJlciA9IDBcclxuICBwcml2YXRlIG5hdHVyYWxGcmVxdWVuY3k6IG51bWJlciA9IDBcclxuXHJcbiAgY29uc3RydWN0b3IoZGVjYXlNaWxsaXNlY29uZHM6IG51bWJlciA9IERFQ0FZX01JTExJU0VDT05EUykge1xyXG4gICAgdGhpcy5zZXREZWNheVRpbWUoZGVjYXlNaWxsaXNlY29uZHMpXHJcbiAgfVxyXG5cclxuICBzZXREZWNheVRpbWUoZGVjYXlNaWxsaXNlY29uZHM6IG51bWJlcikge1xyXG4gICAgdGhpcy5uYXR1cmFsRnJlcXVlbmN5ID0gMSAvIE1hdGgubWF4KE1JTl9ERUNBWV9NSUxMSVNFQ09ORFMsIGRlY2F5TWlsbGlzZWNvbmRzKVxyXG4gIH1cclxuXHJcbiAgLy8gV3JhcCBhbmdsZSB0byBbLVBJLCBQSV1cclxuICBwcm90ZWN0ZWQgd3JhcEFuZ2xlKGFuZ2xlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgcGkyID0gTWF0aC5QSSAqIDJcclxuICAgIHJldHVybiAoKCgoYW5nbGUgKyBNYXRoLlBJKSAlIHBpMikgKyBwaTIpICUgcGkyKSAtIE1hdGguUElcclxuICB9XHJcblxyXG4gIHVwZGF0ZShcclxuICAgIHg6IG51bWJlcixcclxuICAgIHhHb2FsOiBudW1iZXIsXHJcbiAgICB0aW1lU3RlcE1pbGxpc2Vjb25kczogbnVtYmVyLFxyXG4gICAgeE5vcm1hbGl6YXRpb246IG51bWJlclxyXG4gICk6IG51bWJlciB7XHJcbiAgICBjb25zdCBuaWxTcGVlZCA9IDAuMDAwMiAqIHRoaXMubmF0dXJhbEZyZXF1ZW5jeVxyXG5cclxuICAgIGlmICh4ID09PSBudWxsIHx8IHhOb3JtYWxpemF0aW9uID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB4R29hbFxyXG4gICAgfVxyXG4gICAgaWYgKHggPT09IHhHb2FsICYmIHRoaXMudmVsb2NpdHkgPT09IDApIHtcclxuICAgICAgcmV0dXJuIHhHb2FsXHJcbiAgICB9XHJcbiAgICBpZiAodGltZVN0ZXBNaWxsaXNlY29uZHMgPCAwKSB7XHJcbiAgICAgIHJldHVybiB4XHJcbiAgICB9XHJcbiAgICAvLyBFeGFjdCBzb2x1dGlvbiB0byBhIGNyaXRpY2FsbHkgZGFtcGVkIHNlY29uZC1vcmRlciBzeXN0ZW0sIHdoZXJlOlxyXG4gICAgLy8gYWNjZWxlcmF0aW9uID0gdGhpcy5uYXR1cmFsRnJlcXVlbmN5ICogdGhpcy5uYXR1cmFsRnJlcXVlbmN5ICogKHhHb2FsXHJcbiAgICAvLyAtIHgpIC0gMiAqIHRoaXMubmF0dXJhbEZyZXF1ZW5jeSAqIHRoaXMudmVsb2NpdHk7XHJcbiAgICBjb25zdCBkZWx0YVggPSB0aGlzLndyYXBBbmdsZSh4IC0geEdvYWwpXHJcbiAgICBjb25zdCBpbnRlcm1lZGlhdGVWZWxvY2l0eSA9IHRoaXMudmVsb2NpdHkgKyB0aGlzLm5hdHVyYWxGcmVxdWVuY3kgKiBkZWx0YVhcclxuICAgIGNvbnN0IGludGVybWVkaWF0ZVggPSBkZWx0YVggKyB0aW1lU3RlcE1pbGxpc2Vjb25kcyAqIGludGVybWVkaWF0ZVZlbG9jaXR5XHJcbiAgICBjb25zdCBkZWNheSA9IE1hdGguZXhwKC10aGlzLm5hdHVyYWxGcmVxdWVuY3kgKiB0aW1lU3RlcE1pbGxpc2Vjb25kcylcclxuICAgIGNvbnN0IG5ld1ZlbG9jaXR5ID1cclxuICAgICAgKGludGVybWVkaWF0ZVZlbG9jaXR5IC0gdGhpcy5uYXR1cmFsRnJlcXVlbmN5ICogaW50ZXJtZWRpYXRlWCkgKiBkZWNheVxyXG4gICAgY29uc3QgYWNjZWxlcmF0aW9uID1cclxuICAgICAgLXRoaXMubmF0dXJhbEZyZXF1ZW5jeSAqIChuZXdWZWxvY2l0eSArIGludGVybWVkaWF0ZVZlbG9jaXR5ICogZGVjYXkpXHJcbiAgICBpZiAoXHJcbiAgICAgIE1hdGguYWJzKG5ld1ZlbG9jaXR5KSA8IG5pbFNwZWVkICogTWF0aC5hYnMoeE5vcm1hbGl6YXRpb24pICYmXHJcbiAgICAgIGFjY2VsZXJhdGlvbiAqIGRlbHRhWCA+PSAwXHJcbiAgICApIHtcclxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBjb250cm9scyBzZXR0bGUgYW5kIHN0b3AgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGluc3RlYWRcclxuICAgICAgLy8gb2YgYXN5bXB0b3RpY2FsbHkgYXBwcm9hY2hpbmcgdGhlaXIgZ29hbC5cclxuICAgICAgdGhpcy52ZWxvY2l0eSA9IDBcclxuICAgICAgcmV0dXJuIHhHb2FsXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZlbG9jaXR5ID0gbmV3VmVsb2NpdHlcclxuICAgICAgcmV0dXJuIHhHb2FsICsgaW50ZXJtZWRpYXRlWCAqIGRlY2F5XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgRXVsZXIsXHJcbiAgTWF0cml4NCxcclxuICBPcnRob2dyYXBoaWNDYW1lcmEsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgUXVhdGVybmlvbixcclxuICBTcGhlcmUsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IERhbXBlciwgU0VUVExJTkdfVElNRSB9IGZyb20gJy4uLy4uL3V0aWxzL0RhbXBlci5qcydcclxuaW1wb3J0IHsgU3BlY2tsZUNvbnRyb2xzIH0gZnJvbSAnLi9TcGVja2xlQ29udHJvbHMuanMnXHJcbmltcG9ydCB7IFdvcmxkIH0gZnJvbSAnLi4vLi4vV29ybGQuanMnXHJcbmltcG9ydCB7IEFuZ2xlRGFtcGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvQW5nbGVEYW1wZXIuanMnXHJcbmltcG9ydCB7IFRJTUVfTVMgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQnXHJcbmltcG9ydCBJbnB1dCwgeyBJbnB1dEV2ZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQvSW5wdXQuanMnXHJcblxyXG5jb25zdCBfdmVjdG9yQnVmZjAgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5jb25zdCBfUElfMiA9IE1hdGguUEkgLyAyXHJcbnR5cGUgTW92ZVR5cGUgPSAnZm9yd2FyZCcgfCAnYmFjaycgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ3VwJyB8ICdkb3duJ1xyXG5jb25zdCB3YWxraW5nU3BlZWQgPSAxLjQyIC8vIG0vc1xyXG5jb25zdCBjbG9zZVJlbGF0aXZlRmFjdG9yID0gMC4wM1xyXG5jb25zdCBmYXJSZWxhdGl2ZUZhY3RvciA9IDAuMlxyXG5jb25zdCByZWxhdGl2ZU1pblRhcmdldERpc3RhbmNlID0gMC4wMVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGbHlDb250cm9sc09wdGlvbnMge1xyXG4gIFtuYW1lOiBzdHJpbmddOiB1bmtub3duXHJcbiAgZW5hYmxlTG9vaz86IGJvb2xlYW5cclxuICBsb29rU3BlZWQ/OiBudW1iZXJcclxuICBtb3ZlU3BlZWQ/OiBudW1iZXJcclxuICBkYW1wZXJEZWNheT86IG51bWJlclxyXG4gIHJlbGF0aXZlVXBEb3duPzogYm9vbGVhblxyXG59XHJcblxyXG5jbGFzcyBGbHlDb250cm9scyBleHRlbmRzIFNwZWNrbGVDb250cm9scyB7XHJcbiAgcHJvdGVjdGVkIGlucHV0OiBJbnB1dFxyXG4gIHByb3RlY3RlZCBfb3B0aW9uczogUmVxdWlyZWQ8Rmx5Q29udHJvbHNPcHRpb25zPlxyXG4gIHByb3RlY3RlZCBfdGFyZ2V0Q2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSB8IE9ydGhvZ3JhcGhpY0NhbWVyYVxyXG4gIHByb3RlY3RlZCB2ZWxvY2l0eSA9IG5ldyBWZWN0b3IzKClcclxuICBwcm90ZWN0ZWQgZXVsZXIgPSBuZXcgRXVsZXIoMCwgMCwgMCwgJ1lYWicpXHJcbiAgcHJvdGVjdGVkIHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKVxyXG4gIHByb3RlY3RlZCBnb2FsRXVsZXIgPSBuZXcgRXVsZXIoMCwgMCwgMCwgJ1lYWicpXHJcbiAgcHJvdGVjdGVkIGdvYWxQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKClcclxuICBwcm90ZWN0ZWQga2V5TWFwOiBSZWNvcmQ8TW92ZVR5cGUsIGJvb2xlYW4+ID0ge1xyXG4gICAgZm9yd2FyZDogZmFsc2UsXHJcbiAgICBiYWNrOiBmYWxzZSxcclxuICAgIGxlZnQ6IGZhbHNlLFxyXG4gICAgcmlnaHQ6IGZhbHNlLFxyXG4gICAgdXA6IGZhbHNlLFxyXG4gICAgZG93bjogZmFsc2VcclxuICB9XHJcbiAgcHJvdGVjdGVkIGNvbnRleHRNZW51VHJpZ2dlcmVkID0gZmFsc2VcclxuXHJcbiAgcHJvdGVjdGVkIGV1bGVyWERhbXBlcjogQW5nbGVEYW1wZXIgPSBuZXcgQW5nbGVEYW1wZXIoKVxyXG4gIHByb3RlY3RlZCBldWxlcllEYW1wZXI6IEFuZ2xlRGFtcGVyID0gbmV3IEFuZ2xlRGFtcGVyKClcclxuICBwcm90ZWN0ZWQgZXVsZXJaRGFtcGVyOiBBbmdsZURhbXBlciA9IG5ldyBBbmdsZURhbXBlcigpXHJcbiAgcHJvdGVjdGVkIHBvc2l0aW9uWERhbXBlcjogRGFtcGVyID0gbmV3IERhbXBlcigpXHJcbiAgcHJvdGVjdGVkIHBvc2l0aW9uWURhbXBlcjogRGFtcGVyID0gbmV3IERhbXBlcigpXHJcbiAgcHJvdGVjdGVkIHBvc2l0aW9uWkRhbXBlcjogRGFtcGVyID0gbmV3IERhbXBlcigpXHJcbiAgcHJvdGVjdGVkIF9sYXN0VGljazogbnVtYmVyID0gMFxyXG4gIHByb3RlY3RlZCBfZW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgcHJpdmF0ZSBfYmFzaXNUcmFuc2Zvcm06IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcbiAgcHJpdmF0ZSBfYmFzaXNUcmFuc2Zvcm1JbnY6IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcblxyXG4gIHByb3RlY3RlZCBfbWluRGlzdDogbnVtYmVyXHJcblxyXG4gIHByaXZhdGUgd29ybGQ6IFdvcmxkXHJcblxyXG4gIHB1YmxpYyBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmFibGVkXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcHRpb25zKCk6IEZseUNvbnRyb2xzT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBGbHlDb250cm9sc09wdGlvbnMpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgdmFsdWUpXHJcbiAgICBpZiAodmFsdWUubW92ZVNwZWVkKSBjb25zb2xlLndhcm4oJ0ZseSBzcGVlZCBtb2RpZmllcjogJywgdGhpcy5fb3B0aW9ucy5tb3ZlU3BlZWQpXHJcbiAgICB0aGlzLnNldERhbXBlckRlY2F5VGltZSh0aGlzLl9vcHRpb25zLmRhbXBlckRlY2F5KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB0YXJnZXRDYW1lcmEodGFyZ2V0OiBQZXJzcGVjdGl2ZUNhbWVyYSB8IE9ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgdGhpcy5fdGFyZ2V0Q2FtZXJhID0gdGFyZ2V0XHJcbiAgICB0aGlzLnJvdGF0ZSh0aGlzLmV1bGVyKVxyXG4gICAgdGhpcy5fdGFyZ2V0Q2FtZXJhLnBvc2l0aW9uLmNvcHkodGhpcy5wb3NpdGlvbilcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdXAodmFsdWU6IFZlY3RvcjMpIHtcclxuICAgIHRoaXMuX3VwLmNvcHkodmFsdWUpXHJcbiAgICB0aGlzLl9iYXNpc1RyYW5zZm9ybS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihcclxuICAgICAgbmV3IFF1YXRlcm5pb24oKS5zZXRGcm9tVW5pdFZlY3RvcnMobmV3IFZlY3RvcjMoMCwgMSwgMCksIHRoaXMuX3VwKVxyXG4gICAgKVxyXG4gICAgdGhpcy5fYmFzaXNUcmFuc2Zvcm1JbnYuY29weSh0aGlzLl9iYXNpc1RyYW5zZm9ybSlcclxuICAgIHRoaXMuX2Jhc2lzVHJhbnNmb3JtSW52LmludmVydCgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG1pbkRpc3QodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbWluRGlzdCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEsXHJcbiAgICBpbnB1dDogSW5wdXQsXHJcbiAgICB3b3JsZDogV29ybGQsXHJcbiAgICBvcHRpb25zOiBSZXF1aXJlZDxGbHlDb250cm9sc09wdGlvbnM+XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpXHJcblxyXG4gICAgdGhpcy5fdGFyZ2V0Q2FtZXJhID0gY2FtZXJhXHJcbiAgICB0aGlzLmlucHV0ID0gaW5wdXRcclxuICAgIHRoaXMud29ybGQgPSB3b3JsZFxyXG4gICAgdGhpcy5fb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpXHJcblxyXG4gICAgdGhpcy5jb25uZWN0KClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1N0YXRpb25hcnkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmdvYWxFdWxlci5lcXVhbHModGhpcy5ldWxlcikgJiZcclxuICAgICAgdGhpcy5nb2FsUG9zaXRpb24uZXF1YWxzKHRoaXMucG9zaXRpb24pICYmXHJcbiAgICAgIHRoaXMudmVsb2NpdHkubGVuZ3RoKCkgPT09IDBcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGUoZGVsdGE/OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIC8qKiBXZSBkbyB0aGlzIGJlY2F1c2Ugc29tZXRpbWVzIHdoaWxlIGhvbGRpbmcgYSBrZXd5IGRvd24geW91IGdldCBhbiBleHRyYVxyXG4gICAgICogIGtleSBkb3duIGV2ZW50ICoqYWZ0ZXIqKiB0aGUgY29udGV4dCBtZW51IGV2ZW50LCBsb2NraW5nIGl0IGluIHBsYWNlXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNvbnRleHRNZW51VHJpZ2dlcmVkKSB7XHJcbiAgICAgIHRoaXMuY2FuY2VsTW92ZSgpXHJcbiAgICAgIHRoaXMuY29udGV4dE1lbnVUcmlnZ2VyZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpXHJcbiAgICBkZWx0YSA9IGRlbHRhICE9PSB1bmRlZmluZWQgPyBkZWx0YSA6IG5vdyAtIHRoaXMuX2xhc3RUaWNrXHJcbiAgICB0aGlzLl9sYXN0VGljayA9IG5vd1xyXG5cclxuICAgIGlmICghdGhpcy5fZW5hYmxlZCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgbGV0IHJlbGF0aXZlRmFjdG9yID0gdGhpcy53b3JsZC5nZXRSZWxhdGl2ZU9mZnNldChmYXJSZWxhdGl2ZUZhY3RvcilcclxuICAgIGlmICh0aGlzLl9taW5EaXN0KSB7XHJcbiAgICAgIGlmICh0aGlzLl9taW5EaXN0IDwgcmVsYXRpdmVGYWN0b3IgKiAwLjUpXHJcbiAgICAgICAgcmVsYXRpdmVGYWN0b3IgPSB0aGlzLndvcmxkLmdldFJlbGF0aXZlT2Zmc2V0KGNsb3NlUmVsYXRpdmVGYWN0b3IpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGVsdGFTZWNvbmRzID0gZGVsdGEgLyBUSU1FX01TLnNlY29uZFxyXG4gICAgY29uc3Qgc2NhbGVkV2Fsa2luZ1NwZWVkID0gcmVsYXRpdmVGYWN0b3IgKiB3YWxraW5nU3BlZWRcclxuXHJcbiAgICBpZiAodGhpcy5rZXlNYXAuZm9yd2FyZClcclxuICAgICAgdGhpcy52ZWxvY2l0eS56ID0gLXNjYWxlZFdhbGtpbmdTcGVlZCAqIHRoaXMuX29wdGlvbnMubW92ZVNwZWVkICogZGVsdGFTZWNvbmRzXHJcbiAgICBpZiAodGhpcy5rZXlNYXAuYmFjaylcclxuICAgICAgdGhpcy52ZWxvY2l0eS56ID0gc2NhbGVkV2Fsa2luZ1NwZWVkICogdGhpcy5fb3B0aW9ucy5tb3ZlU3BlZWQgKiBkZWx0YVNlY29uZHNcclxuICAgIGlmICghdGhpcy5rZXlNYXAuZm9yd2FyZCAmJiAhdGhpcy5rZXlNYXAuYmFjaykgdGhpcy52ZWxvY2l0eS56ID0gMFxyXG5cclxuICAgIGlmICh0aGlzLmtleU1hcC5sZWZ0KVxyXG4gICAgICB0aGlzLnZlbG9jaXR5LnggPSAtc2NhbGVkV2Fsa2luZ1NwZWVkICogdGhpcy5fb3B0aW9ucy5tb3ZlU3BlZWQgKiBkZWx0YVNlY29uZHNcclxuICAgIGlmICh0aGlzLmtleU1hcC5yaWdodClcclxuICAgICAgdGhpcy52ZWxvY2l0eS54ID0gc2NhbGVkV2Fsa2luZ1NwZWVkICogdGhpcy5fb3B0aW9ucy5tb3ZlU3BlZWQgKiBkZWx0YVNlY29uZHNcclxuICAgIGlmICghdGhpcy5rZXlNYXAubGVmdCAmJiAhdGhpcy5rZXlNYXAucmlnaHQpIHRoaXMudmVsb2NpdHkueCA9IDBcclxuXHJcbiAgICBpZiAodGhpcy5rZXlNYXAudXApXHJcbiAgICAgIHRoaXMudmVsb2NpdHkueSA9IHNjYWxlZFdhbGtpbmdTcGVlZCAqIHRoaXMuX29wdGlvbnMubW92ZVNwZWVkICogZGVsdGFTZWNvbmRzXHJcbiAgICBpZiAodGhpcy5rZXlNYXAuZG93bilcclxuICAgICAgdGhpcy52ZWxvY2l0eS55ID0gLXNjYWxlZFdhbGtpbmdTcGVlZCAqIHRoaXMuX29wdGlvbnMubW92ZVNwZWVkICogZGVsdGFTZWNvbmRzXHJcbiAgICBpZiAoIXRoaXMua2V5TWFwLmRvd24gJiYgIXRoaXMua2V5TWFwLnVwKSB0aGlzLnZlbG9jaXR5LnkgPSAwXHJcblxyXG4gICAgaWYgKHRoaXMuaXNTdGF0aW9uYXJ5KCkpIHJldHVybiBmYWxzZVxyXG5cclxuICAgIHRoaXMubW92ZUJ5KHRoaXMudmVsb2NpdHkpXHJcblxyXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvblJvdGF0aW9uKGRlbHRhKVxyXG5cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlUG9zaXRpb25Sb3RhdGlvbihkZWx0YTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBkaWFnb25hbCA9IHRoaXMud29ybGQud29ybGRCb3gubWluLmRpc3RhbmNlVG8odGhpcy53b3JsZC53b3JsZEJveC5tYXgpXHJcbiAgICAvKiogRm9yIHZlcnkgc21hbGwgdmFsdWVzLCB0aGUgZGFtcG5lcnMgbmVlZCBldmVuIHNtYWxsZXIgbm9ybWFsaXphdGlvbiAqL1xyXG4gICAgY29uc3QgbWluTWF4UmFuZ2UgPSBkaWFnb25hbCA8IDEgPyB0aGlzLndvcmxkLmdldFJlbGF0aXZlT2Zmc2V0KGRpYWdvbmFsKSA6IDFcclxuICAgIHRoaXMucG9zaXRpb24ueCA9IHRoaXMucG9zaXRpb25YRGFtcGVyLnVwZGF0ZShcclxuICAgICAgdGhpcy5wb3NpdGlvbi54LFxyXG4gICAgICB0aGlzLmdvYWxQb3NpdGlvbi54LFxyXG4gICAgICBkZWx0YSxcclxuICAgICAgbWluTWF4UmFuZ2VcclxuICAgIClcclxuICAgIHRoaXMucG9zaXRpb24ueSA9IHRoaXMucG9zaXRpb25ZRGFtcGVyLnVwZGF0ZShcclxuICAgICAgdGhpcy5wb3NpdGlvbi55LFxyXG4gICAgICB0aGlzLmdvYWxQb3NpdGlvbi55LFxyXG4gICAgICBkZWx0YSxcclxuICAgICAgbWluTWF4UmFuZ2VcclxuICAgIClcclxuICAgIHRoaXMucG9zaXRpb24ueiA9IHRoaXMucG9zaXRpb25aRGFtcGVyLnVwZGF0ZShcclxuICAgICAgdGhpcy5wb3NpdGlvbi56LFxyXG4gICAgICB0aGlzLmdvYWxQb3NpdGlvbi56LFxyXG4gICAgICBkZWx0YSxcclxuICAgICAgbWluTWF4UmFuZ2VcclxuICAgIClcclxuXHJcbiAgICB0aGlzLmV1bGVyLnggPSB0aGlzLmV1bGVyWERhbXBlci51cGRhdGUodGhpcy5ldWxlci54LCB0aGlzLmdvYWxFdWxlci54LCBkZWx0YSwgMSlcclxuICAgIHRoaXMuZXVsZXIueSA9IHRoaXMuZXVsZXJZRGFtcGVyLnVwZGF0ZSh0aGlzLmV1bGVyLnksIHRoaXMuZ29hbEV1bGVyLnksIGRlbHRhLCAxKVxyXG4gICAgdGhpcy5ldWxlci56ID0gdGhpcy5ldWxlclpEYW1wZXIudXBkYXRlKHRoaXMuZXVsZXIueiwgdGhpcy5nb2FsRXVsZXIueiwgZGVsdGEsIDEpXHJcblxyXG4gICAgdGhpcy5yb3RhdGUodGhpcy5ldWxlcilcclxuICAgIHRoaXMuX3RhcmdldENhbWVyYS5wb3NpdGlvbi5jb3B5KHRoaXMucG9zaXRpb24pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMganVtcFRvR29hbCgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlUG9zaXRpb25Sb3RhdGlvbihTRVRUTElOR19USU1FKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpdFRvU3BoZXJlKHNwaGVyZTogU3BoZXJlKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb3J3YXJkID0gdGhpcy5fdGFyZ2V0Q2FtZXJhLmdldFdvcmxkRGlyZWN0aW9uKG5ldyBWZWN0b3IzKCkpXHJcbiAgICBmb3J3YXJkLm5lZ2F0ZSgpXHJcbiAgICBjb25zdCBwb3MgPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgIC5jb3B5KHNwaGVyZS5jZW50ZXIpXHJcbiAgICAgIC5hZGRTY2FsZWRWZWN0b3IoZm9yd2FyZCwgc3BoZXJlLnJhZGl1cylcclxuICAgIHRoaXMuZ29hbFBvc2l0aW9uLmNvcHkocG9zKVxyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSBpbnB1dCBwb3NpdGlvbiBhbmQgdGFyZ2V0IHdpbGwgYmUgaW4gYSBiYXNpcyB3aXRoICgwLDAsMSkgYXMgdXAgKi9cclxuICBwdWJsaWMgZnJvbVBvc2l0aW9uQW5kVGFyZ2V0KHBvc2l0aW9uOiBWZWN0b3IzLCB0YXJnZXQ6IFZlY3RvcjMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNQb3MgPSB0aGlzLmdldFBvc2l0aW9uKClcclxuICAgIGNvbnN0IGNUYXJnZXQgPSB0aGlzLmdldFRhcmdldCgpXHJcbiAgICBpZiAoY1Bvcy5lcXVhbHMocG9zaXRpb24pICYmIGNUYXJnZXQuZXF1YWxzKHRhcmdldCkpIHJldHVyblxyXG5cclxuICAgIGNvbnN0IHRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCkuY29weShwb3NpdGlvbilcclxuICAgIGNvbnN0IHRUYXJnZXQgPSBuZXcgVmVjdG9yMygpLmNvcHkodGFyZ2V0KVxyXG4gICAgY29uc3QgbWF0cml4ID0gbmV3IE1hdHJpeDQoKVxyXG4gICAgICAubG9va0F0KHRQb3NpdGlvbiwgdFRhcmdldCwgdGhpcy5fdXApXHJcbiAgICAgIC5wcmVtdWx0aXBseSh0aGlzLl9iYXNpc1RyYW5zZm9ybUludilcclxuICAgIGNvbnN0IHF1YXQgPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21Sb3RhdGlvbk1hdHJpeChtYXRyaXgpXHJcbiAgICB0aGlzLmdvYWxFdWxlci5zZXRGcm9tUXVhdGVybmlvbihxdWF0KVxyXG4gICAgdGhpcy5nb2FsUG9zaXRpb24uY29weSh0UG9zaXRpb24pXHJcbiAgfVxyXG5cclxuICAvKiogVGhlIHJldHVybmVkIHZlY3RvciBuZWVkcyB0byBiZSBpbiBhIGJhc2lzIHdpdGggKDAsMCwxKSBhcyB1cCAqL1xyXG4gIHB1YmxpYyBnZXRUYXJnZXQoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgVmVjdG9yMygpLmNvcHkodGhpcy5nb2FsUG9zaXRpb24pXHJcbiAgICBjb25zdCBtYXRyaXggPSBuZXcgTWF0cml4NCgpLm1ha2VSb3RhdGlvbkZyb21FdWxlcih0aGlzLmdvYWxFdWxlcilcclxuICAgIGNvbnN0IGZvcndhcmQgPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgIC5zZXRGcm9tTWF0cml4Q29sdW1uKG1hdHJpeCwgMilcclxuICAgICAgLmFwcGx5TWF0cml4NCh0aGlzLl9iYXNpc1RyYW5zZm9ybSlcclxuICAgICAgLm5vcm1hbGl6ZSgpXHJcbiAgICB0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKFxyXG4gICAgICBmb3J3YXJkLFxyXG4gICAgICAtdGhpcy53b3JsZC5nZXRSZWxhdGl2ZU9mZnNldChyZWxhdGl2ZU1pblRhcmdldERpc3RhbmNlKVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIHRhcmdldFxyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSByZXR1cm5lZCB2ZWN0b3IgbmVlZHMgdG8gYmUgaW4gYSBiYXNpcyB3aXRoICgwLDAsMSkgYXMgdXAgKi9cclxuICBwdWJsaWMgZ2V0UG9zaXRpb24oKTogVmVjdG9yMyB7XHJcbiAgICByZXR1cm4gbmV3IFZlY3RvcjMoKS5jb3B5KHRoaXMuZ29hbFBvc2l0aW9uKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgY3VycmVudCBnb2FsIHBvc2l0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGdldEN1cnJlbnRQb3NpdGlvbigpOiBWZWN0b3IzIHtcclxuICAgIHJldHVybiB0aGlzLnBvc2l0aW9uXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwb2ludCBpbiBtb2RlbCBjb29yZGluYXRlcyB0aGUgbW9kZWwgc2hvdWxkIG9yYml0L3Bpdm90IGFyb3VuZC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Q3VycmVudFRhcmdldCgpOiBWZWN0b3IzIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBWZWN0b3IzKCkuY29weSh0aGlzLnBvc2l0aW9uKVxyXG4gICAgY29uc3QgbWF0cml4ID0gbmV3IE1hdHJpeDQoKS5tYWtlUm90YXRpb25Gcm9tRXVsZXIodGhpcy5ldWxlcilcclxuICAgIGNvbnN0IGZvcndhcmQgPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgIC5zZXRGcm9tTWF0cml4Q29sdW1uKG1hdHJpeCwgMilcclxuICAgICAgLmFwcGx5TWF0cml4NCh0aGlzLl9iYXNpc1RyYW5zZm9ybSlcclxuICAgICAgLm5vcm1hbGl6ZSgpXHJcbiAgICB0YXJnZXQuYWRkU2NhbGVkVmVjdG9yKFxyXG4gICAgICBmb3J3YXJkLFxyXG4gICAgICAtdGhpcy53b3JsZC5nZXRSZWxhdGl2ZU9mZnNldChyZWxhdGl2ZU1pblRhcmdldERpc3RhbmNlKVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIHRhcmdldFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc21vb3RoaW5nIGRlY2F5IHRpbWUuXHJcbiAgICovXHJcbiAgcHVibGljIHNldERhbXBlckRlY2F5VGltZShkZWNheU1pbGxpc2Vjb25kczogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmV1bGVyWERhbXBlci5zZXREZWNheVRpbWUoZGVjYXlNaWxsaXNlY29uZHMpXHJcbiAgICB0aGlzLmV1bGVyWURhbXBlci5zZXREZWNheVRpbWUoZGVjYXlNaWxsaXNlY29uZHMpXHJcbiAgICB0aGlzLmV1bGVyWkRhbXBlci5zZXREZWNheVRpbWUoZGVjYXlNaWxsaXNlY29uZHMpXHJcbiAgICB0aGlzLnBvc2l0aW9uWERhbXBlci5zZXREZWNheVRpbWUoZGVjYXlNaWxsaXNlY29uZHMpXHJcbiAgICB0aGlzLnBvc2l0aW9uWURhbXBlci5zZXREZWNheVRpbWUoZGVjYXlNaWxsaXNlY29uZHMpXHJcbiAgICB0aGlzLnBvc2l0aW9uWkRhbXBlci5zZXREZWNheVRpbWUoZGVjYXlNaWxsaXNlY29uZHMpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW92ZUJ5KGFtb3VudDogVmVjdG9yMykge1xyXG4gICAgY29uc3QgY2FtZXJhID0gdGhpcy5fdGFyZ2V0Q2FtZXJhXHJcbiAgICBfdmVjdG9yQnVmZjAuc2V0RnJvbU1hdHJpeENvbHVtbihjYW1lcmEubWF0cml4LCAyKVxyXG4gICAgdGhpcy5nb2FsUG9zaXRpb24uYWRkU2NhbGVkVmVjdG9yKF92ZWN0b3JCdWZmMCwgYW1vdW50LnopXHJcbiAgICB0aGlzLl9vcHRpb25zLnJlbGF0aXZlVXBEb3duXHJcbiAgICAgID8gX3ZlY3RvckJ1ZmYwLnNldEZyb21NYXRyaXhDb2x1bW4oY2FtZXJhLm1hdHJpeCwgMSlcclxuICAgICAgOiBfdmVjdG9yQnVmZjAuY29weSh0aGlzLnVwKVxyXG4gICAgdGhpcy5nb2FsUG9zaXRpb24uYWRkU2NhbGVkVmVjdG9yKF92ZWN0b3JCdWZmMCwgYW1vdW50LnkpXHJcbiAgICBfdmVjdG9yQnVmZjAuc2V0RnJvbU1hdHJpeENvbHVtbihjYW1lcmEubWF0cml4LCAwKVxyXG4gICAgdGhpcy5nb2FsUG9zaXRpb24uYWRkU2NhbGVkVmVjdG9yKF92ZWN0b3JCdWZmMCwgYW1vdW50LngpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcm90YXRlQnkoYW1vdW50OiBWZWN0b3IyKSB7XHJcbiAgICB0aGlzLmdvYWxFdWxlci55IC09IGFtb3VudC55XHJcbiAgICB0aGlzLmdvYWxFdWxlci54IC09IGFtb3VudC54XHJcbiAgICAvLyBTZXQgdG8gY29uc3RyYWluIHRoZSBwaXRjaCBvZiB0aGUgY2FtZXJhXHJcbiAgICBjb25zdCBtaW5Qb2xhckFuZ2xlID0gMCAvLyByYWRpYW5zXHJcbiAgICBjb25zdCBtYXhQb2xhckFuZ2xlID0gTWF0aC5QSSAvLyByYWRpYW5zXHJcbiAgICB0aGlzLmdvYWxFdWxlci54ID0gTWF0aC5tYXgoXHJcbiAgICAgIF9QSV8yIC0gbWF4UG9sYXJBbmdsZSxcclxuICAgICAgTWF0aC5taW4oX1BJXzIgLSBtaW5Qb2xhckFuZ2xlLCB0aGlzLmdvYWxFdWxlci54KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNvbm5lY3QoKSB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCkgcmV0dXJuXHJcbiAgICB0aGlzLmlucHV0Lm9uKElucHV0RXZlbnQuS2V5VXAsIHRoaXMub25LZXlVcClcclxuICAgIHRoaXMuaW5wdXQub24oSW5wdXRFdmVudC5LZXlEb3duLCB0aGlzLm9uS2V5RG93bilcclxuICAgIHRoaXMuaW5wdXQub24oSW5wdXRFdmVudC5Qb2ludGVyTW92ZSwgdGhpcy5vbk1vdXNlTW92ZSlcclxuICAgIHRoaXMuaW5wdXQub24oSW5wdXRFdmVudC5Db250ZXh0TWVudSwgdGhpcy5vbkNvbnRleHRNZW51KVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGRpc2Nvbm5lY3QoKSB7XHJcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVyblxyXG5cclxuICAgIHRoaXMuaW5wdXQucmVtb3ZlTGlzdGVuZXIoSW5wdXRFdmVudC5LZXlVcCwgdGhpcy5vbktleVVwKVxyXG4gICAgdGhpcy5pbnB1dC5yZW1vdmVMaXN0ZW5lcihJbnB1dEV2ZW50LktleURvd24sIHRoaXMub25LZXlEb3duKVxyXG4gICAgdGhpcy5pbnB1dC5yZW1vdmVMaXN0ZW5lcihJbnB1dEV2ZW50LlBvaW50ZXJNb3ZlLCB0aGlzLm9uTW91c2VNb3ZlKVxyXG4gICAgdGhpcy5pbnB1dC5yZW1vdmVMaXN0ZW5lcihJbnB1dEV2ZW50LkNvbnRleHRNZW51LCB0aGlzLm9uQ29udGV4dE1lbnUpXHJcblxyXG4gICAgZm9yIChjb25zdCBrIGluIHRoaXMua2V5TWFwKSB0aGlzLmtleU1hcFtrIGFzIE1vdmVUeXBlXSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuZGlzY29ubmVjdCgpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcm90YXRlKGV1bGVyOiBFdWxlcikge1xyXG4gICAgaWYgKCF0aGlzLl9vcHRpb25zLmVuYWJsZUxvb2spIHJldHVyblxyXG5cclxuICAgIGNvbnN0IHEgPSBuZXcgUXVhdGVybmlvbigpXHJcbiAgICBjb25zdCB0ID0gbmV3IFF1YXRlcm5pb24oKS5zZXRGcm9tUm90YXRpb25NYXRyaXgodGhpcy5fYmFzaXNUcmFuc2Zvcm0pXHJcbiAgICBxLnNldEZyb21FdWxlcihldWxlcikucHJlbXVsdGlwbHkodClcclxuICAgIHRoaXMuX3RhcmdldENhbWVyYS5xdWF0ZXJuaW9uLnNsZXJwKHEsIDAuOTk5KVxyXG4gIH1cclxuXHJcbiAgLy8gZXZlbnQgbGlzdGVuZXJzXHJcbiAgcHJvdGVjdGVkIG9uTW91c2VNb3ZlID0gKGFyZzogVmVjdG9yMiAmIHsgZXZlbnQ6IFBvaW50ZXJFdmVudCB9KSA9PiB7XHJcbiAgICBpZiAoYXJnLmV2ZW50LmJ1dHRvbnMgIT09IDEgfHwgIXRoaXMuX2VuYWJsZWQpIHJldHVyblxyXG5cclxuICAgIGNvbnN0IG1vdmVtZW50WCA9IGFyZy5ldmVudC5tb3ZlbWVudFggfHwgMFxyXG4gICAgY29uc3QgbW92ZW1lbnRZID0gYXJnLmV2ZW50Lm1vdmVtZW50WSB8fCAwXHJcbiAgICBjb25zdCBhbW91bnQgPSBuZXcgVmVjdG9yMigpXHJcbiAgICBhbW91bnQueSA9IG1vdmVtZW50WCAqIDAuMDA1ICogdGhpcy5fb3B0aW9ucy5sb29rU3BlZWRcclxuICAgIGFtb3VudC54ID0gbW92ZW1lbnRZICogMC4wMDUgKiB0aGlzLl9vcHRpb25zLmxvb2tTcGVlZFxyXG5cclxuICAgIHRoaXMucm90YXRlQnkoYW1vdW50KVxyXG4gICAgdGhpcy5lbWl0KCdjaGFuZ2UnKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG4gICAgLy8gRG9uJ3QgdHJpZ2dlciBtb3ZlbWVudCBpZiBhbnkgbW9kaWZpZXIga2V5cyBhcmUgcHJlc3NlZFxyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICBjYXNlICdLZXlXJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5mb3J3YXJkID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxyXG4gICAgICBjYXNlICdLZXlBJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5sZWZ0ID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxyXG4gICAgICBjYXNlICdLZXlTJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5iYWNrID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcclxuICAgICAgY2FzZSAnS2V5RCc6XHJcbiAgICAgICAgdGhpcy5rZXlNYXAucmlnaHQgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XHJcbiAgICAgIGNhc2UgJ0tleUUnOlxyXG4gICAgICAgIHRoaXMua2V5TWFwLnVwID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlICdQYWdlRG93bic6XHJcbiAgICAgIGNhc2UgJ0tleVEnOlxyXG4gICAgICAgIHRoaXMua2V5TWFwLmRvd24gPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbktleVVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAvLyBEb24ndCB0cmlnZ2VyIG1vdmVtZW50IGlmIGFueSBtb2RpZmllciBrZXlzIGFyZSBwcmVzc2VkXHJcbiAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgIGNhc2UgJ0tleVcnOlxyXG4gICAgICAgIHRoaXMua2V5TWFwLmZvcndhcmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxyXG4gICAgICBjYXNlICdLZXlBJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5sZWZ0ID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgY2FzZSAnS2V5Uyc6XHJcbiAgICAgICAgdGhpcy5rZXlNYXAuYmFjayA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICBjYXNlICdLZXlEJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5yaWdodCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XHJcbiAgICAgIGNhc2UgJ0tleUUnOlxyXG4gICAgICAgIHRoaXMua2V5TWFwLnVwID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgY2FzZSAnUGFnZURvd24nOlxyXG4gICAgICBjYXNlICdLZXlRJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5kb3duID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uQ29udGV4dE1lbnUgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51VHJpZ2dlcmVkID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNhbmNlbE1vdmUoKSB7XHJcbiAgICB0aGlzLmtleU1hcC5mb3J3YXJkID0gZmFsc2VcclxuICAgIHRoaXMua2V5TWFwLmxlZnQgPSBmYWxzZVxyXG4gICAgdGhpcy5rZXlNYXAuYmFjayA9IGZhbHNlXHJcbiAgICB0aGlzLmtleU1hcC5yaWdodCA9IGZhbHNlXHJcbiAgICB0aGlzLmtleU1hcC51cCA9IGZhbHNlXHJcbiAgICB0aGlzLmtleU1hcC5kb3duID0gZmFsc2VcclxuICB9XHJcbn1cclxuZXhwb3J0IHsgRmx5Q29udHJvbHMgfVxyXG4iLCIvKiBAbGljZW5zZVxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcclxuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuICpcclxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKlxyXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXHJcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgTWF0cml4MyxcclxuICBTcGhlcmljYWwsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzLFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFNwaGVyZSxcclxuICBNYXRyaXg0LFxyXG4gIE1hdGhVdGlscyxcclxuICBPcnRob2dyYXBoaWNDYW1lcmEsXHJcbiAgUXVhdGVybmlvbixcclxuICBFdWxlcixcclxuICBNZXNoLFxyXG4gIFNwaGVyZUdlb21ldHJ5LFxyXG4gIFJheVxyXG59IGZyb20gJ3RocmVlJ1xyXG5cclxuaW1wb3J0IHsgRGFtcGVyLCBTRVRUTElOR19USU1FIH0gZnJvbSAnLi4vLi4vdXRpbHMvRGFtcGVyLmpzJ1xyXG5cclxuaW1wb3J0IHsgV29ybGQgfSBmcm9tICcuLi8uLi9Xb3JsZC5qcydcbmltcG9ydCB7IFNwZWNrbGVDb250cm9scyB9IGZyb20gJy4vU3BlY2tsZUNvbnRyb2xzLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZU9ydGhvZ3JhcGhpY1NpemUgfSBmcm9tICcuLi9DYW1lcmFDb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IFNwZWNrbGVCYXNpY01hdGVyaWFsIGZyb20gJy4uLy4uL21hdGVyaWFscy9TcGVja2xlQmFzaWNNYXRlcmlhbC5qcydcclxuaW1wb3J0IFNwZWNrbGVSZW5kZXJlciBmcm9tICcuLi8uLi9TcGVja2xlUmVuZGVyZXIuanMnXHJcbmltcG9ydCB7IEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbiB9IGZyb20gJy4uLy4uL29iamVjdHMvU3BlY2tsZVJheWNhc3Rlci5qcydcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGxvd2VyTGltaXRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHVwcGVyTGltaXRcclxuICogQHJldHVybiB7TnVtYmVyfSB2YWx1ZSBjbGFtcGVkIHdpdGhpbiBsb3dlckxpbWl0Li51cHBlckxpbWl0XHJcbiAqL1xyXG5jb25zdCBjbGFtcCA9ICh2YWx1ZTogbnVtYmVyLCBsb3dlckxpbWl0OiBudW1iZXIsIHVwcGVyTGltaXQ6IG51bWJlcik6IG51bWJlciA9PlxyXG4gIE1hdGgubWF4KGxvd2VyTGltaXQsIE1hdGgubWluKHVwcGVyTGltaXQsIHZhbHVlKSlcclxuXHJcbmNvbnN0IFBBTl9TRU5TSVRJVklUWSA9IDAuMDE4XHJcbmNvbnN0IE1PVkVNRU5UX0VQU0lMT04gPSAxZS01XHJcbmNvbnN0IHZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5leHBvcnQgdHlwZSBUb3VjaE1vZGUgPSBudWxsIHwgKChkeDogbnVtYmVyLCBkeTogbnVtYmVyKSA9PiB2b2lkKVxyXG5leHBvcnQgdHlwZSBUb3VjaEFjdGlvbiA9ICdwYW4teScgfCAncGFuLXgnIHwgJ25vbmUnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBvaW50ZXIge1xyXG4gIGNsaWVudFg6IG51bWJlclxyXG4gIGNsaWVudFk6IG51bWJlclxyXG4gIGlkOiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTbW9vdGhPcmJpdENvbnRyb2xzT3B0aW9ucyB7XHJcbiAgLy8gU2Vuc2l0aXZpdHkgb2Ygcm90YXRpbmcuXHJcbiAgZW5hYmxlT3JiaXQ/OiBib29sZWFuXHJcbiAgLy8gU2Vuc2l0aXZpdHkgb2Ygem9vbWluZy5cclxuICBlbmFibGVab29tPzogYm9vbGVhblxyXG4gIC8vIFNlbnNpdGl2aXR5IG9mIHBhbm5pbmcuXHJcbiAgZW5hYmxlUGFuPzogYm9vbGVhblxyXG4gIC8vIFNlbnNpdGl2aXR5IG9mIHJvdGF0aW5nLlxyXG4gIG9yYml0U2Vuc2l0aXZpdHk/OiBudW1iZXJcclxuICAvLyBTZW5zaXRpdml0eSBvZiB6b29taW5nLlxyXG4gIHpvb21TZW5zaXRpdml0eT86IG51bWJlclxyXG4gIC8vIFNlbnNpdGl2aXR5IG9mIHBhbm5pbmcuXHJcbiAgcGFuU2Vuc2l0aXZpdHk/OiBudW1iZXJcclxuICAvLyBHZW5lcmFsIFNlbnNpdGl2aXR5LlxyXG4gIGlucHV0U2Vuc2l0aXZpdHk/OiBudW1iZXJcclxuICAvLyBUaGUgY2xvc2VzdCB0aGUgY2FtZXJhIGNhbiBiZSB0byB0aGUgdGFyZ2V0XHJcbiAgbWluaW11bVJhZGl1cz86IG51bWJlclxyXG4gIC8vIFRoZSBmYXJ0aGVzdCB0aGUgY2FtZXJhIGNhbiBiZSBmcm9tIHRoZSB0YXJnZXRcclxuICBtYXhpbXVtUmFkaXVzPzogbnVtYmVyXHJcbiAgLy8gVGhlIG1pbmltdW0gYW5nbGUgYmV0d2VlbiBtb2RlbC11cCBhbmQgdGhlIGNhbWVyYSBwb2xhciBwb3NpdGlvblxyXG4gIG1pbmltdW1Qb2xhckFuZ2xlPzogbnVtYmVyXHJcbiAgLy8gVGhlIG1heGltdW0gYW5nbGUgYmV0d2VlbiBtb2RlbC11cCBhbmQgdGhlIGNhbWVyYSBwb2xhciBwb3NpdGlvblxyXG4gIG1heGltdW1Qb2xhckFuZ2xlPzogbnVtYmVyXHJcbiAgLy8gVGhlIG1pbmltdW0gYW5nbGUgYmV0d2VlbiBtb2RlbC1mb3J3YXJkIGFuZCB0aGUgY2FtZXJhIGF6aW11dGhhbCBwb3NpdGlvblxyXG4gIG1pbmltdW1BemltdXRoYWxBbmdsZT86IG51bWJlclxyXG4gIC8vIFRoZSBtYXhpbXVtIGFuZ2xlIGJldHdlZW4gbW9kZWwtZm9yd2FyZCBhbmQgdGhlIGNhbWVyYSBhemltdXRoYWwgcG9zaXRpb25cclxuICBtYXhpbXVtQXppbXV0aGFsQW5nbGU/OiBudW1iZXJcclxuICAvLyBUaGUgbWluaW11bSBjYW1lcmEgZmllbGQgb2YgdmlldyBpbiBkZWdyZWVzXHJcbiAgbWluaW11bUZpZWxkT2ZWaWV3PzogbnVtYmVyXHJcbiAgLy8gVGhlIG1heGltdW0gY2FtZXJhIGZpZWxkIG9mIHZpZXcgaW4gZGVncmVlc1xyXG4gIG1heGltdW1GaWVsZE9mVmlldz86IG51bWJlclxyXG4gIC8vIENvbnRyb2xzIHNjcm9sbGluZyBiZWhhdmlvclxyXG4gIHRvdWNoQWN0aW9uPzogVG91Y2hBY3Rpb25cclxuICAvLyBJbmZpbml0ZSB6b29tXHJcbiAgaW5maW5pdGVab29tPzogYm9vbGVhblxyXG4gIC8vIFpvb20gdG8gY3Vyc29yXHJcbiAgem9vbVRvQ3Vyc29yPzogYm9vbGVhblxyXG4gIC8vIE9yYml0IGFyb3VuZCBjdXJzb3JcclxuICBvcmJpdEFyb3VuZEN1cnNvcj86IGJvb2xlYW5cclxuICAvLyBTaG93IG9yYml0IHBvaW50XHJcbiAgc2hvd09yYml0UG9pbnQ/OiBib29sZWFuXHJcbiAgLy8gRGFtcGVuaW5nXHJcbiAgZGFtcGVyRGVjYXk/OiBudW1iZXJcclxufVxyXG5cclxuY29uc3QgWk9PTV9TRU5TSVRJVklUWSA9IDAuMDhcbmNvbnN0IFJBRElVU19aT09NX0ZBQ1RPUiA9IDAuMzc1XG5cclxuZXhwb3J0IGVudW0gUG9pbnRlckNoYW5nZUV2ZW50IHtcclxuICBQb2ludGVyQ2hhbmdlU3RhcnQgPSAncG9pbnRlci1jaGFuZ2Utc3RhcnQnLFxyXG4gIFBvaW50ZXJDaGFuZ2VFbmQgPSAncG9pbnRlci1jaGFuZ2UtZW5kJ1xyXG59XHJcblxyXG5jb25zdCBjbG9zZVJlbGF0aXZlRmFjdG9yUGFuID0gMC4wNlxuY29uc3QgZmFyUmVsYXRpdmVGYWN0b3JQYW4gPSAwLjRcbmNvbnN0IHJlbGF0aXZlTWF4VGFyZ2V0RGlzdGFuY2UgPSAwLjJcblxyXG4vKipcclxuICogU21vb3RoQ29udHJvbHMgaXMgYSBUaHJlZS5qcyBoZWxwZXIgZm9yIGFkZGluZyBkZWxpZ2h0ZnVsIHBvaW50ZXIgYW5kXHJcbiAqIGtleWJvYXJkLWJhc2VkIGlucHV0IHRvIGEgc3RhZ2VkIFRocmVlLmpzIHNjZW5lLiBJdHMgQVBJIGlzIHZlcnkgc2ltaWxhciB0b1xyXG4gKiBPcmJpdENvbnRyb2xzLCBidXQgaXQgb2ZmZXJzIG1vcmUgb3BpbmlvbmF0ZWQgKHN1YmplY3RpdmVseSBtb3JlIGRlbGlnaHRmdWwpXHJcbiAqIGRlZmF1bHRzLCBlYXN5IGV4dGVuc2liaWxpdHkgYW5kIHN1YmplY3RpdmVseSBiZXR0ZXIgb3V0LW9mLXRoZS1ib3gga2V5Ym9hcmRcclxuICogc3VwcG9ydC5cclxuICpcclxuICogT25lIGltcG9ydGFudCBjaGFuZ2UgY29tcGFyZWQgdG8gT3JiaXRDb250cm9scyBpcyB0aGF0IHRoZSBgdXBkYXRlYCBtZXRob2RcclxuICogb2YgU21vb3RoQ29udHJvbHMgbXVzdCBiZSBpbnZva2VkIG9uIGV2ZXJ5IGZyYW1lLCBvdGhlcndpc2UgdGhlIGNvbnRyb2xzXHJcbiAqIHdpbGwgbm90IGhhdmUgYW4gZWZmZWN0LlxyXG4gKlxyXG4gKiBBbm90aGVyIG5vdGFibGUgZGlmZmVyZW5jZSBjb21wYXJlZCB0byBPcmJpdENvbnRyb2xzIGlzIHRoYXQgU21vb3RoQ29udHJvbHNcclxuICogZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgcGFubmluZyAoYnV0IHByb2JhYmx5IHdpbGwgaW4gYSBmdXR1cmUgcmV2aXNpb24pLlxyXG4gKlxyXG4gKiBMaWtlIE9yYml0Q29udHJvbHMsIFNtb290aENvbnRyb2xzIGFzc3VtZXMgdGhhdCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGNhbWVyYVxyXG4gKiBoYXMgYmVlbiBzZXQgaW4gdGVybXMgb2YgcG9zaXRpb24sIHJvdGF0aW9uIGFuZCBzY2FsZSwgc28gaXQgaXMgaW1wb3J0YW50IHRvXHJcbiAqIGVuc3VyZSB0aGF0IHRoZSBjYW1lcmEncyBtYXRyaXhXb3JsZCBpcyBpbiBzeW5jIGJlZm9yZSB1c2luZyBTbW9vdGhDb250cm9scy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBTbW9vdGhPcmJpdENvbnRyb2xzIGV4dGVuZHMgU3BlY2tsZUNvbnRyb2xzIHtcclxuICBwcm90ZWN0ZWQgX2VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHByb3RlY3RlZCBfb3B0aW9uczogUmVxdWlyZWQ8U21vb3RoT3JiaXRDb250cm9sc09wdGlvbnM+XHJcbiAgcHJvdGVjdGVkIGlzVXNlclBvaW50aW5nID0gZmFsc2VcclxuXHJcbiAgLy8gUGFuIHN0YXRlXHJcbiAgcHVibGljIGVuYWJsZVBhbiA9IHRydWVcclxuICBwdWJsaWMgZW5hYmxlVGFwID0gdHJ1ZVxyXG4gIHByb3RlY3RlZCBwYW5Qcm9qZWN0aW9uID0gbmV3IE1hdHJpeDMoKVxyXG4gIHByb3RlY3RlZCBwYW5QZXJQaXhlbCA9IDBcclxuXHJcbiAgLy8gSW50ZXJuYWwgb3JiaXRhbCBwb3NpdGlvbiBzdGF0ZVxyXG4gIHB1YmxpYyBzcGhlcmljYWwgPSBuZXcgU3BoZXJpY2FsKClcclxuICBwcm90ZWN0ZWQgZ29hbFNwaGVyaWNhbCA9IG5ldyBTcGhlcmljYWwoKVxyXG4gIHByb3RlY3RlZCBvcmlnaW4gPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJvdGVjdGVkIHBpdm90YWxPcmlnaW46IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJvdGVjdGVkIGdvYWxPcmlnaW4gPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJvdGVjdGVkIHRhcmdldERhbXBlclggPSBuZXcgRGFtcGVyKClcclxuICBwcm90ZWN0ZWQgdGFyZ2V0RGFtcGVyWSA9IG5ldyBEYW1wZXIoKVxyXG4gIHByb3RlY3RlZCB0YXJnZXREYW1wZXJaID0gbmV3IERhbXBlcigpXHJcbiAgcHJvdGVjdGVkIHRoZXRhRGFtcGVyID0gbmV3IERhbXBlcigpXHJcbiAgcHJvdGVjdGVkIHBoaURhbXBlciA9IG5ldyBEYW1wZXIoKVxyXG4gIHByb3RlY3RlZCByYWRpdXNEYW1wZXIgPSBuZXcgRGFtcGVyKClcclxuICBwcm90ZWN0ZWQgbG9nRm92ID0gTWF0aC5sb2coNTUpXHJcbiAgcHJvdGVjdGVkIGdvYWxMb2dGb3YgPSB0aGlzLmxvZ0ZvdlxyXG4gIHByb3RlY3RlZCBmb3ZEYW1wZXIgPSBuZXcgRGFtcGVyKClcclxuXHJcbiAgLy8gUG9pbnRlciBzdGF0ZVxyXG4gIHByb3RlY3RlZCB0b3VjaE1vZGU6IFRvdWNoTW9kZSA9IG51bGxcclxuICBwcm90ZWN0ZWQgcG9pbnRlcnM6IFBvaW50ZXJbXSA9IFtdXHJcbiAgcHJvdGVjdGVkIHN0YXJ0UG9pbnRlclBvc2l0aW9uID0geyBjbGllbnRYOiAwLCBjbGllbnRZOiAwIH1cclxuICBwcm90ZWN0ZWQgbGFzdFNlcGFyYXRpb24gPSAwXHJcbiAgcHJvdGVjdGVkIHRvdWNoRGVjaWRlZCA9IGZhbHNlXHJcbiAgcHJvdGVjdGVkIHpvb21Db250cm9sQ29vcmQ6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpXHJcblxyXG4gIHByb3RlY3RlZCBfdGFyZ2V0Q2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSB8IE9ydGhvZ3JhcGhpY0NhbWVyYVxyXG4gIHByb3RlY3RlZCBfY29udGFpbmVyOiBIVE1MRWxlbWVudFxyXG4gIHByb3RlY3RlZCBfbGFzdFRpY2s6IG51bWJlciA9IDBcclxuICBwcm90ZWN0ZWQgX2Jhc2lzVHJhbnNmb3JtOiBNYXRyaXg0ID0gbmV3IE1hdHJpeDQoKVxyXG4gIHByb3RlY3RlZCBfYmFzaXNUcmFuc2Zvcm1JbnY6IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcbiAgcHJvdGVjdGVkIF9yYWRpdXNEZWx0YTogbnVtYmVyID0gMFxyXG5cclxuICBwcm90ZWN0ZWQgd29ybGQ6IFdvcmxkXHJcbiAgcHJvdGVjdGVkIHJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXJcclxuXHJcbiAgcHJvdGVjdGVkIG9yYml0U3BoZXJlOiBNZXNoXHJcbiAgcHJvdGVjdGVkIHBpdm90UG9pbnQ6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJvdGVjdGVkIGxhc3RQaXZvdFBvaW50OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHByb3RlY3RlZCB1c2VQaXZvdGFsID0gZmFsc2VcclxuXHJcbiAgcHJvdGVjdGVkIF9taW5EaXN0OiBudW1iZXJcclxuXHJcbiAgcHVibGljIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRcclxuICB9XHJcbiAgcHVibGljIHNldCBlbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5lbmFibGVJbnRlcmFjdGlvbigpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc2FibGVJbnRlcmFjdGlvbigpXHJcbiAgICAgIHRoaXMub3JiaXRTcGhlcmUudmlzaWJsZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbmFibGVkID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdXAodmFsdWU6IFZlY3RvcjMpIHtcclxuICAgIHRoaXMuX3VwLmNvcHkodmFsdWUpXHJcbiAgICB0aGlzLl9iYXNpc1RyYW5zZm9ybS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihcclxuICAgICAgbmV3IFF1YXRlcm5pb24oKS5zZXRGcm9tVW5pdFZlY3RvcnMobmV3IFZlY3RvcjMoMCwgMSwgMCksIHRoaXMuX3VwKVxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMuX2Jhc2lzVHJhbnNmb3JtSW52LmNvcHkodGhpcy5fYmFzaXNUcmFuc2Zvcm0pXHJcbiAgICB0aGlzLl9iYXNpc1RyYW5zZm9ybUludi5pbnZlcnQoKVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhLFxyXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcclxuICAgIHdvcmxkOiBXb3JsZCxcclxuICAgIHJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXIsXHJcbiAgICBvcHRpb25zOiBSZXF1aXJlZDxTbW9vdGhPcmJpdENvbnRyb2xzT3B0aW9ucz5cclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuX3RhcmdldENhbWVyYSA9IGNhbWVyYVxyXG4gICAgdGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyXHJcbiAgICB0aGlzLndvcmxkID0gd29ybGRcclxuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlclxyXG4gICAgdGhpcy5fb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpXHJcbiAgICB0aGlzLnNldERhbXBlckRlY2F5VGltZSh0aGlzLl9vcHRpb25zLmRhbXBlckRlY2F5KVxyXG5cclxuICAgIGNvbnN0IGJpbGxib2FyZE1hdGVyaWFsID0gbmV3IFNwZWNrbGVCYXNpY01hdGVyaWFsKHsgY29sb3I6IDB4MDQ3ZWZiIH0sIFtcclxuICAgICAgJ0JJTExCT0FSRF9TQ1JFRU4nXHJcbiAgICBdKVxyXG4gICAgYmlsbGJvYXJkTWF0ZXJpYWwub3BhY2l0eSA9IDAuNzVcclxuICAgIGJpbGxib2FyZE1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZVxyXG4gICAgYmlsbGJvYXJkTWF0ZXJpYWwuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcbiAgICBiaWxsYm9hcmRNYXRlcmlhbC50b25lTWFwcGVkID0gZmFsc2VcclxuICAgIGJpbGxib2FyZE1hdGVyaWFsLmRlcHRoVGVzdCA9IGZhbHNlXHJcbiAgICBiaWxsYm9hcmRNYXRlcmlhbC5iaWxsYm9hcmRQaXhlbFNpemUgPSBuZXcgVmVjdG9yMihcclxuICAgICAgMTUgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxcclxuICAgICAgMTUgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgKVxyXG5cclxuICAgIHRoaXMub3JiaXRTcGhlcmUgPSBuZXcgTWVzaChuZXcgU3BoZXJlR2VvbWV0cnkoMC41LCAzMiwgMTYpLCBiaWxsYm9hcmRNYXRlcmlhbClcclxuICAgIHRoaXMub3JiaXRTcGhlcmUubGF5ZXJzLnNldChPYmplY3RMYXllcnMuT1ZFUkxBWSlcclxuICAgIHRoaXMub3JiaXRTcGhlcmUudmlzaWJsZSA9IGZhbHNlXHJcbiAgICB0aGlzLm9yYml0U3BoZXJlLmZydXN0dW1DdWxsZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5yZW5kZXJlci5zY2VuZS5hZGQodGhpcy5vcmJpdFNwaGVyZSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBvcHRpb25zIHRoYXQgYXJlIGN1cnJlbnRseSBjb25maWd1cmVkIGZvciB0aGUgY29udHJvbHMgaW5zdGFuY2UuXHJcbiAgICovXHJcbiAgZ2V0IG9wdGlvbnMoKTogUmVxdWlyZWQ8U21vb3RoT3JiaXRDb250cm9sc09wdGlvbnM+IHtcclxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zXHJcbiAgfVxyXG5cclxuICBzZXQgb3B0aW9ucyh2YWx1ZTogU21vb3RoT3JiaXRDb250cm9sc09wdGlvbnMpIHtcclxuICAgIHRoaXMuYXBwbHlPcHRpb25zKHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgc2V0IHRhcmdldENhbWVyYSh2YWx1ZTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgIC8qKiBXaGVuIHlvdSBkcm9wIG91dCBvZiBXQVNELCB0aGUgcmFkaXVzIGlzIHZlcnkgY2xvc2UgdG8gdGhlIGNhbWVyYVxyXG4gICAgICogIEFuZCBpZiB5b3Ugc3dpdGNoIHRvIG9ydGhvZ3J0YXBoaWMgeW91IHdpbGwgZ2V0IGEgdmV5IGxhcmdlIG9ydGhvZ3JhcGhpYyBzaXplXHJcbiAgICAgKiAgVGhpcyBpcyBhIHdvcmthcm91bmQgd2hlcmUgd2UgdHJ5IHRvIGdldCBhIG1vcmUgcmVhc29uYWJsZSByYWRpdXMsIGJ5IGdldHRpbmdcclxuICAgICAqICB0aGUgY2xvc2VzdCBpbnRlcnNlY3Rpb24gZGlzdGFuY2UgdG8gdGhlIHNjZW5lIGdlb21ldHJ5IGZyb20gdGhlIGNhbWVyYVxyXG4gICAgICovXHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgICAgaWYgKHRoaXMuZ29hbFNwaGVyaWNhbC5yYWRpdXMgPCB0aGlzLl9taW5EaXN0KSB7XHJcbiAgICAgICAgLyoqIEZhbGxiYWNrIHJhZGl1cywgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYWxsb3dlZCByYWRpdXMgcmFuZ2UgKi9cclxuICAgICAgICBsZXQgcmVjb21wdXRlZFJhZGl1cyA9XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubWluaW11bVJhZGl1cyArXHJcbiAgICAgICAgICAodGhpcy5fb3B0aW9ucy5tYXhpbXVtUmFkaXVzIC0gdGhpcy5vcHRpb25zLm1pbmltdW1SYWRpdXMpICogMC41XHJcbiAgICAgICAgY29uc3QgcmF5ID0gbmV3IFJheShcclxuICAgICAgICAgIHRoaXMuX3RhcmdldENhbWVyYS5wb3NpdGlvbixcclxuICAgICAgICAgIHRoaXMuX3RhcmdldENhbWVyYS5nZXRXb3JsZERpcmVjdGlvbihuZXcgVmVjdG9yMygpKVxyXG4gICAgICAgIClcclxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJlbmRlcmVyLmludGVyc2VjdGlvbnMuaW50ZXJzZWN0UmF5KFxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zY2VuZSxcclxuICAgICAgICAgIHRoaXMuX3RhcmdldENhbWVyYSBhcyBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICAgICAgICAgIHJheSxcclxuICAgICAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNILFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmNsaXBwaW5nVm9sdW1lLFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICBmYWxzZVxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJlY29tcHV0ZWRSYWRpdXMgPSByZXNbMF0uZGlzdGFuY2VcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zcGhlcmljYWwucmFkaXVzID0gcmVjb21wdXRlZFJhZGl1c1xyXG4gICAgICAgIHRoaXMuZ29hbFNwaGVyaWNhbC5yYWRpdXMgPSByZWNvbXB1dGVkUmFkaXVzXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90YXJnZXRDYW1lcmEgPSB2YWx1ZVxyXG4gICAgdGhpcy51c2VQaXZvdGFsID0gdGhpcy5fb3B0aW9ucy5vcmJpdEFyb3VuZEN1cnNvclxyXG5cclxuICAgIC8qKiBXZSBtb3ZlIHRoZSBsYXQgcGl2b3QgcG9pbnQgc29td2hlcmUgb3V0c2lkZSBvZiB3b3JsZCBib3VuZHMsIGluIG9yZGVyIHRvIGZvcmNlIGEgcGl2b3RhbCBvcmlnaW4gcmVjb21wdXRlICovXHJcbiAgICB0aGlzLmxhc3RQaXZvdFBvaW50LnNldChcclxuICAgICAgdGhpcy53b3JsZC53b3JsZE9yaWdpbi54ICsgdGhpcy53b3JsZC53b3JsZFNpemUueCxcclxuICAgICAgdGhpcy53b3JsZC53b3JsZE9yaWdpbi55ICsgdGhpcy53b3JsZC53b3JsZFNpemUueSxcclxuICAgICAgdGhpcy53b3JsZC53b3JsZE9yaWdpbi56ICsgdGhpcy53b3JsZC53b3JsZFNpemUuelxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMubW92ZUNhbWVyYSgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG1pbkRpc3QodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbWluRGlzdCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICAvKiogVGhlIGlucHV0IHBvc2l0aW9uIGFuZCB0YXJnZXQgd2lsbCBiZSBpbiBhIGJhc2lzIHdpdGggKDAsMSwwKSBhcyB1cCAqL1xyXG4gIHB1YmxpYyBmcm9tUG9zaXRpb25BbmRUYXJnZXQocG9zaXRpb246IFZlY3RvcjMsIHRhcmdldDogVmVjdG9yMyk6IHZvaWQge1xyXG4gICAgLyoqIFRoaXMgY2hlY2sgaXMgdGFyZ2V0ZWQgZXhjbHVzZXZlbHkgdG93YXJkcyB0aGUgZnJvbnRlbmQgd2hpY2ggY2FsbHMgdGhpcyBtZXRob2QgcG9pbnRsZXNzbHkgZWFjaCBmcmFtZVxyXG4gICAgICogIFdlIGRvbid0IHdhbnQgdG8gbWFrZSBwb2ludGxlc3MgY2FsY3VsYXRpb25zIG1vcmUgdGhhbiB3ZSBhbHJlYWR5IGFyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24oKVxyXG4gICAgY29uc3QgdGFyZ2V0VGFyZ2V0ID0gdGhpcy5nZXRUYXJnZXQoKVxyXG4gICAgY29uc3QgZGVsdGFUYXJnZXQgPSB2ZWN0b3IzLnN1YlZlY3RvcnModGFyZ2V0LCB0YXJnZXRUYXJnZXQpLmxlbmd0aCgpXHJcbiAgICBjb25zdCBkZWx0YVBvc2l0aW9uID0gdmVjdG9yMy5zdWJWZWN0b3JzKHBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvbikubGVuZ3RoKClcclxuICAgIGNvbnN0IGVwc2lsb24gPSAxZS02XHJcbiAgICBpZiAoZGVsdGFQb3NpdGlvbiA8IGVwc2lsb24gJiYgZGVsdGFUYXJnZXQgPCBlcHNpbG9uKSByZXR1cm5cclxuXHJcbiAgICBjb25zdCB2MCA9IG5ldyBWZWN0b3IzKCkuY29weShwb3NpdGlvbilcclxuICAgIGNvbnN0IHYxID0gbmV3IFZlY3RvcjMoKS5jb3B5KHRhcmdldClcclxuICAgIC8qKiBUaHJlZS5qcyBTcGhlcmljYWwgYXNzdW1lcyAoMCwgMSwgMCkgYXMgdXAuLi4gKi9cclxuICAgIHYwLnN1Yih2MSkuYXBwbHlNYXRyaXg0KHRoaXMuX2Jhc2lzVHJhbnNmb3JtSW52KVxyXG4gICAgY29uc3Qgc3BoZXJpY2FsID0gbmV3IFNwaGVyaWNhbCgpXHJcbiAgICBzcGhlcmljYWwuc2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh2MC54LCB2MC55LCB2MC56KVxyXG4gICAgdGhpcy5zZXRPcmJpdChzcGhlcmljYWwudGhldGEsIHNwaGVyaWNhbC5waGksIHNwaGVyaWNhbC5yYWRpdXMpXHJcbiAgICAvKiogVGhyZWUuanMgU3BoZXJpY2FsIGFzc3VtZXMgKDAsIDEsIDApIGFzIHVwLi4uICovXHJcbiAgICB2MS5hcHBseU1hdHJpeDQodGhpcy5fYmFzaXNUcmFuc2Zvcm1JbnYpXHJcbiAgICB0aGlzLnNldFRhcmdldCh2MS54LCB2MS55LCB2MS56KVxyXG4gICAgdGhpcy51c2VQaXZvdGFsID0gZmFsc2VcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmUgdGhlIGNhbWVyYSBpbnN0YW50bHkgaW5zdGVhZCBvZiBhY2NlbGVyYXRpbmcgdG93YXJkIHRoZSBnb2FsXHJcbiAgICogcGFyYW1ldGVycy5cclxuICAgKi9cclxuICBwdWJsaWMganVtcFRvR29hbCgpIHtcclxuICAgIHRoaXMudXBkYXRlKFNFVFRMSU5HX1RJTUUpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZml0VG9TcGhlcmUoc3BoZXJlOiBTcGhlcmUpIHtcclxuICAgIC8qKiBUaGUgdGhyZWUuanMgU3BoZXJlIGhhcyBpdCdzIG9yaWdpbiBpbiBhIENTIHdoZXJlIFkgaXMgdXAgKHByb3BlciB3YXkpICovXHJcbiAgICBjb25zdCBuYXRpdmVPcmlnaW4gPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgIC5jb3B5KHNwaGVyZS5jZW50ZXIpXHJcbiAgICAgIC5hcHBseU1hdHJpeDQodGhpcy5fYmFzaXNUcmFuc2Zvcm1JbnYpXHJcbiAgICB0aGlzLnNldFRhcmdldChuYXRpdmVPcmlnaW4ueCwgbmF0aXZlT3JpZ2luLnksIG5hdGl2ZU9yaWdpbi56KVxyXG5cclxuICAgIHRoaXMuc2V0UmFkaXVzKHNwaGVyZS5yYWRpdXMpXHJcbiAgICB0aGlzLnVzZVBpdm90YWwgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgY3VycmVudCBnb2FsIHBvc2l0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGdldFBvc2l0aW9uKCk6IFZlY3RvcjMge1xyXG4gICAgcmV0dXJuIHRoaXMucG9zaXRpb25Gcm9tU3BoZXJpY2FsKHRoaXMuZ29hbFNwaGVyaWNhbCwgdGhpcy5nb2FsT3JpZ2luKS5hcHBseU1hdHJpeDQoXHJcbiAgICAgIHRoaXMuX2Jhc2lzVHJhbnNmb3JtXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwb2ludCBpbiBtb2RlbCBjb29yZGluYXRlcyB0aGUgbW9kZWwgc2hvdWxkIG9yYml0L3Bpdm90IGFyb3VuZC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0VGFyZ2V0KCk6IFZlY3RvcjMge1xyXG4gICAgcmV0dXJuIHRoaXMuZ29hbE9yaWdpbi5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLl9iYXNpc1RyYW5zZm9ybSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZ29hbCBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDdXJyZW50UG9zaXRpb24oKTogVmVjdG9yMyB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbkZyb21TcGhlcmljYWwodGhpcy5zcGhlcmljYWwsIHRoaXMub3JpZ2luKS5hcHBseU1hdHJpeDQoXHJcbiAgICAgIHRoaXMuX2Jhc2lzVHJhbnNmb3JtXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwb2ludCBpbiBtb2RlbCBjb29yZGluYXRlcyB0aGUgbW9kZWwgc2hvdWxkIG9yYml0L3Bpdm90IGFyb3VuZC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Q3VycmVudFRhcmdldCgpOiBWZWN0b3IzIHtcclxuICAgIHJldHVybiB0aGlzLm9yaWdpbi5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLl9iYXNpc1RyYW5zZm9ybSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1N0YXRpb25hcnkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmdvYWxTcGhlcmljYWwudGhldGEgPT09IHRoaXMuc3BoZXJpY2FsLnRoZXRhICYmXHJcbiAgICAgIHRoaXMuZ29hbFNwaGVyaWNhbC5waGkgPT09IHRoaXMuc3BoZXJpY2FsLnBoaSAmJlxyXG4gICAgICB0aGlzLmdvYWxTcGhlcmljYWwucmFkaXVzID09PSB0aGlzLnNwaGVyaWNhbC5yYWRpdXMgJiZcclxuICAgICAgdGhpcy5nb2FsTG9nRm92ID09PSB0aGlzLmxvZ0ZvdiAmJlxyXG4gICAgICB0aGlzLmdvYWxPcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSAmJlxyXG4gICAgICB0aGlzLnBpdm90UG9pbnQuZXF1YWxzKHRoaXMubGFzdFBpdm90UG9pbnQpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmUgdGhlIF9vcHRpb25zIG9mIHRoZSBjb250cm9scy4gQ29uZmlndXJlZCBfb3B0aW9ucyB3aWxsIGJlXHJcbiAgICogbWVyZ2VkIHdpdGggd2hhdGV2ZXIgX29wdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gY29uZmlndXJlZCBmb3IgdGhpc1xyXG4gICAqIGNvbnRyb2xzIGluc3RhbmNlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhcHBseU9wdGlvbnMoX29wdGlvbnM6IFNtb290aE9yYml0Q29udHJvbHNPcHRpb25zKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIF9vcHRpb25zKVxyXG4gICAgdGhpcy5zZXREYW1wZXJEZWNheVRpbWUodGhpcy5fb3B0aW9ucy5kYW1wZXJEZWNheSlcclxuICAgIC8vIFJlLWV2YWx1YXRlcyBjbGFtcGluZyBiYXNlZCBvbiBwb3RlbnRpYWxseSBuZXcgdmFsdWVzIGZvciBtaW4vbWF4XHJcbiAgICAvLyBwb2xhciwgYXppbXV0aCBhbmQgcmFkaXVzOlxyXG4gICAgdGhpcy5zZXRPcmJpdCgpXHJcbiAgICB0aGlzLnNldEZpZWxkT2ZWaWV3KE1hdGguZXhwKHRoaXMuZ29hbExvZ0ZvdikpXHJcbiAgfVxyXG5cclxuICAvKiogQ29tcHV0ZXMgbWluL21heCByYWRpdXMgdmFsdWVzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHdvcmxkIHNpemUgKi9cclxuICBwcm90ZWN0ZWQgY29tcHV0ZU1pbk1heFJhZGl1cygpIHtcclxuICAgIGlmICh0aGlzLndvcmxkKSB7XHJcbiAgICAgIGNvbnN0IG1heERpc3RhbmNlID0gdGhpcy53b3JsZC5nZXRSZWxhdGl2ZU9mZnNldCgxMClcclxuICAgICAgY29uc3QgbWluRGlzdGFuY2UgPSB0aGlzLndvcmxkLmdldFJlbGF0aXZlT2Zmc2V0KDAuMDEpXHJcbiAgICAgIGlmICghaXNOYU4obWF4RGlzdGFuY2UpICYmICFpc05hTihtaW5EaXN0YW5jZSkpXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCB7XHJcbiAgICAgICAgICBtYXhpbXVtUmFkaXVzOiBtYXhEaXN0YW5jZSxcclxuICAgICAgICAgIG1pbmltdW1SYWRpdXM6IG1pbkRpc3RhbmNlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgYWJzb2x1dGUgb3JiaXRhbCBnb2FsIG9mIHRoZSBjYW1lcmEuIFRoZSBjaGFuZ2Ugd2lsbCBiZVxyXG4gICAqIGFwcGxpZWQgb3ZlciBhIG51bWJlciBvZiBmcmFtZXMgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyZWQgYWNjZWxlcmF0aW9uIGFuZFxyXG4gICAqIGRhbXBlbmluZyBfb3B0aW9ucy5cclxuICAgKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpbnZva2luZyB0aGUgbWV0aG9kIHdpbGwgcmVzdWx0IGluIHRoZSBjYW1lcmEgY2hhbmdpbmdcclxuICAgKiBwb3NpdGlvbiBhbmQvb3Igcm90YXRpb24sIG90aGVyd2lzZSBmYWxzZS5cclxuICAgKi9cclxuICBwdWJsaWMgc2V0T3JiaXQoXHJcbiAgICBnb2FsVGhldGE6IG51bWJlciA9IHRoaXMuZ29hbFNwaGVyaWNhbC50aGV0YSxcclxuICAgIGdvYWxQaGk6IG51bWJlciA9IHRoaXMuZ29hbFNwaGVyaWNhbC5waGksXHJcbiAgICBnb2FsUmFkaXVzOiBudW1iZXIgPSB0aGlzLmdvYWxTcGhlcmljYWwucmFkaXVzXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLmNvbXB1dGVNaW5NYXhSYWRpdXMoKVxyXG4gICAgY29uc3Qge1xyXG4gICAgICBtaW5pbXVtQXppbXV0aGFsQW5nbGUsXHJcbiAgICAgIG1heGltdW1BemltdXRoYWxBbmdsZSxcclxuICAgICAgbWluaW11bVBvbGFyQW5nbGUsXHJcbiAgICAgIG1heGltdW1Qb2xhckFuZ2xlLFxyXG4gICAgICBtaW5pbXVtUmFkaXVzLFxyXG4gICAgICBtYXhpbXVtUmFkaXVzXHJcbiAgICB9ID0gdGhpcy5fb3B0aW9uc1xyXG5cclxuICAgIGNvbnN0IHsgdGhldGEsIHBoaSwgcmFkaXVzIH0gPSB0aGlzLmdvYWxTcGhlcmljYWxcclxuXHJcbiAgICBjb25zdCBuZXh0VGhldGEgPSBjbGFtcChnb2FsVGhldGEsIG1pbmltdW1BemltdXRoYWxBbmdsZSwgbWF4aW11bUF6aW11dGhhbEFuZ2xlKVxyXG4gICAgaWYgKCFpc0Zpbml0ZShtaW5pbXVtQXppbXV0aGFsQW5nbGUpICYmICFpc0Zpbml0ZShtYXhpbXVtQXppbXV0aGFsQW5nbGUpKSB7XHJcbiAgICAgIHRoaXMuc3BoZXJpY2FsLnRoZXRhID1cclxuICAgICAgICB0aGlzLndyYXBBbmdsZSh0aGlzLnNwaGVyaWNhbC50aGV0YSAtIG5leHRUaGV0YSkgKyBuZXh0VGhldGFcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXh0UGhpID0gY2xhbXAoZ29hbFBoaSwgbWluaW11bVBvbGFyQW5nbGUsIG1heGltdW1Qb2xhckFuZ2xlKVxyXG4gICAgY29uc3QgbmV4dFJhZGl1cyA9IGNsYW1wKGdvYWxSYWRpdXMsIG1pbmltdW1SYWRpdXMsIG1heGltdW1SYWRpdXMpXHJcblxyXG4gICAgaWYgKG5leHRUaGV0YSA9PT0gdGhldGEgJiYgbmV4dFBoaSA9PT0gcGhpICYmIG5leHRSYWRpdXMgPT09IHJhZGl1cykge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzRmluaXRlKG5leHRUaGV0YSkgfHwgIWlzRmluaXRlKG5leHRQaGkpIHx8ICFpc0Zpbml0ZShuZXh0UmFkaXVzKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdvYWxTcGhlcmljYWwudGhldGEgPSBuZXh0VGhldGFcclxuICAgIHRoaXMuZ29hbFNwaGVyaWNhbC5waGkgPSBuZXh0UGhpXHJcbiAgICB0aGlzLmdvYWxTcGhlcmljYWwucmFkaXVzID0gbmV4dFJhZGl1c1xyXG4gICAgdGhpcy5nb2FsU3BoZXJpY2FsLm1ha2VTYWZlKClcclxuXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2V0IG9mIHNldE9yYml0KCkgYWJvdmUsIHdoaWNoIG9ubHkgc2V0cyB0aGUgY2FtZXJhJ3MgcmFkaXVzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRSYWRpdXMocmFkaXVzOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ29hbFNwaGVyaWNhbC5yYWRpdXMgPSByYWRpdXNcclxuICAgIHRoaXMuc2V0T3JiaXQoKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZ29hbCBmaWVsZCBvZiB2aWV3IGZvciB0aGUgY2FtZXJhXHJcbiAgICovXHJcbiAgcHVibGljIHNldEZpZWxkT2ZWaWV3KGZvdjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB7IG1pbmltdW1GaWVsZE9mVmlldywgbWF4aW11bUZpZWxkT2ZWaWV3IH0gPSB0aGlzLl9vcHRpb25zXHJcbiAgICBmb3YgPSBjbGFtcChmb3YsIG1pbmltdW1GaWVsZE9mVmlldywgbWF4aW11bUZpZWxkT2ZWaWV3KVxyXG4gICAgdGhpcy5nb2FsTG9nRm92ID0gTWF0aC5sb2coZm92KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc21vb3RoaW5nIGRlY2F5IHRpbWUuXHJcbiAgICovXHJcbiAgcHVibGljIHNldERhbXBlckRlY2F5VGltZShkZWNheU1pbGxpc2Vjb25kczogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRoZXRhRGFtcGVyLnNldERlY2F5VGltZShkZWNheU1pbGxpc2Vjb25kcylcclxuICAgIHRoaXMucGhpRGFtcGVyLnNldERlY2F5VGltZShkZWNheU1pbGxpc2Vjb25kcylcclxuICAgIHRoaXMucmFkaXVzRGFtcGVyLnNldERlY2F5VGltZShkZWNheU1pbGxpc2Vjb25kcylcclxuICAgIHRoaXMuZm92RGFtcGVyLnNldERlY2F5VGltZShkZWNheU1pbGxpc2Vjb25kcylcclxuICAgIHRoaXMudGFyZ2V0RGFtcGVyWC5zZXREZWNheVRpbWUoZGVjYXlNaWxsaXNlY29uZHMpXHJcbiAgICB0aGlzLnRhcmdldERhbXBlclkuc2V0RGVjYXlUaW1lKGRlY2F5TWlsbGlzZWNvbmRzKVxyXG4gICAgdGhpcy50YXJnZXREYW1wZXJaLnNldERlY2F5VGltZShkZWNheU1pbGxpc2Vjb25kcylcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHBvaW50IGluIG1vZGVsIGNvb3JkaW5hdGVzIHRoZSBvYmplY3Qgc2hvdWxkIG9yYml0L3Bpdm90IGFyb3VuZC5cclxuICAgKi9cclxuICBwdWJsaWMgc2V0VGFyZ2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ29hbE9yaWdpbi5zZXQoeCwgeSwgeilcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkanVzdCB0aGUgb3JiaXRhbCBwb3NpdGlvbiBvZiB0aGUgY2FtZXJhIHJlbGF0aXZlIHRvIGl0cyBjdXJyZW50IG9yYml0YWxcclxuICAgKiBwb3NpdGlvbi4gRG9lcyBub3QgbGV0IHRoZSB0aGV0YSBnb2FsIGdldCBtb3JlIHRoYW4gcGkgYWhlYWQgb2YgdGhlIGN1cnJlbnRcclxuICAgKiB0aGV0YSwgd2hpY2ggZW5zdXJlcyBpbnRlcnBvbGF0aW9uIGNvbnRpbnVlcyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBkZWx0YS5cclxuICAgKiBUaGUgZGVsdGFab29tIHBhcmFtZXRlciBhZGp1c3RzIGJvdGggdGhlIGZpZWxkIG9mIHZpZXcgYW5kIHRoZSBvcmJpdCByYWRpdXNcclxuICAgKiBzdWNoIHRoYXQgdGhleSBwcm9ncmVzcyBhY3Jvc3MgdGhlaXIgYWxsb3dlZCByYW5nZXMgaW4gc3luYy5cclxuICAgKi9cclxuICBhZGp1c3RPcmJpdChkZWx0YVRoZXRhOiBudW1iZXIsIGRlbHRhUGhpOiBudW1iZXIsIGRlbHRhWm9vbTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9yYWRpdXNEZWx0YVxyXG4gICAgY29uc3QgeyB0aGV0YSwgcGhpLCByYWRpdXMgfSA9IHRoaXMuZ29hbFNwaGVyaWNhbFxyXG5cclxuICAgIGNvbnN0IGRUaGV0YSA9IHRoaXMuc3BoZXJpY2FsLnRoZXRhIC0gdGhldGFcclxuICAgIGNvbnN0IGRUaGV0YUxpbWl0ID0gTWF0aC5QSSAtIDAuMDAxXHJcbiAgICBjb25zdCBnb2FsVGhldGEgPVxyXG4gICAgICB0aGV0YSAtIGNsYW1wKGRlbHRhVGhldGEsIC1kVGhldGFMaW1pdCAtIGRUaGV0YSwgZFRoZXRhTGltaXQgLSBkVGhldGEpXHJcbiAgICBjb25zdCBnb2FsUGhpID0gcGhpIC0gZGVsdGFQaGlcclxuXHJcbiAgICB0aGlzLnNldE9yYml0KGdvYWxUaGV0YSwgZ29hbFBoaSlcclxuXHJcbiAgICBpZiAoZGVsdGFab29tID09PSAwKSByZXR1cm5cclxuXHJcbiAgICBjb25zdCB0YXNJbnRlcnNlY3QgPSB0cnVlXHJcbiAgICAvLyBDdXJyZW50bHkgZGlzYWJsaW5nIHRoaXNcclxuICAgIC8vIHRoaXMuaW50ZXJzZWN0aW9ucy5pbnRlcnNlY3QoXHJcbiAgICAvLyAgIHRoaXMuc2NlbmUsXHJcbiAgICAvLyAgIHRoaXMuX3RhcmdldENhbWVyYSBhcyBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICAgIC8vICAgdGhpcy56b29tQ29udHJvbENvb3JkLFxyXG4gICAgLy8gICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCxcclxuICAgIC8vICAgZmFsc2UsXHJcbiAgICAvLyAgIHRoaXMud29ybGQud29ybGRCb3gsXHJcbiAgICAvLyAgIHRydWUsXHJcbiAgICAvLyAgIGZhbHNlXHJcbiAgICAvLyApICE9PSBudWxsXHJcblxyXG4gICAgY29uc3Qgem9vbUJhc2lzUmFkaXVzID0gTWF0aC5tYXgocmFkaXVzLCB0aGlzLndvcmxkLmdldFJlbGF0aXZlT2Zmc2V0KDAuMDAxKSlcbiAgICBjb25zdCB3b3JsZFNpemVPZmZzZXQgPSBjbGFtcChcbiAgICAgIHpvb21CYXNpc1JhZGl1cyAqIE1hdGguYWJzKGRlbHRhWm9vbSkgKiBSQURJVVNfWk9PTV9GQUNUT1IsXG4gICAgICAwLFxuICAgICAgdGhpcy53b3JsZC5nZXRSZWxhdGl2ZU9mZnNldChyZWxhdGl2ZU1heFRhcmdldERpc3RhbmNlKVxuICAgIClcbiAgICBjb25zdCB6b29tQW1vdW50ID0gd29ybGRTaXplT2Zmc2V0ICogTWF0aC5zaWduKGRlbHRhWm9vbSlcblxyXG4gICAgY29uc3QgZ29hbFJhZGl1cyA9IHJhZGl1cyArIHpvb21BbW91bnRcclxuICAgIHRoaXMuc2V0T3JiaXQoZ29hbFRoZXRhLCBnb2FsUGhpLCBnb2FsUmFkaXVzKVxyXG5cclxuICAgIHRoaXMuX3JhZGl1c0RlbHRhID0gcmFkaXVzIC0gdGhpcy5nb2FsU3BoZXJpY2FsLnJhZGl1c1xyXG5cclxuICAgIGlmICh0aGlzLl9vcHRpb25zLnpvb21Ub0N1cnNvcikge1xyXG4gICAgICBjb25zdCBkb2xseUFtb3VudCA9IG5ldyBWZWN0b3IzKClcclxuICAgICAgaWYgKGdvYWxSYWRpdXMgPCB0aGlzLl9vcHRpb25zLm1pbmltdW1SYWRpdXMgJiYgdGhpcy5fb3B0aW9ucy5pbmZpbml0ZVpvb20pIHtcclxuICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Q2FtZXJhIGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICAgIGNvbnN0IGRpciA9IG5ldyBWZWN0b3IzKCkuc2V0RnJvbVNwaGVyaWNhbCh0aGlzLnNwaGVyaWNhbCkubm9ybWFsaXplKClcclxuICAgICAgICAgIGRvbGx5QW1vdW50LmNvcHkoZGlyKS5tdWx0aXBseVNjYWxhcih6b29tQW1vdW50KVxyXG4gICAgICAgICAgdGhpcy5fcmFkaXVzRGVsdGEgPSAtem9vbUFtb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjYW1lcmFEaXJlY3Rpb24gPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgICAgLnNldEZyb21TcGhlcmljYWwodGhpcy5zcGhlcmljYWwpXHJcbiAgICAgICAgLm5vcm1hbGl6ZSgpXHJcbiAgICAgICAgLm5lZ2F0ZSgpXHJcbiAgICAgIGNvbnN0IHBsYW5lWCA9IG5ldyBWZWN0b3IzKClcclxuICAgICAgICAuY29weShjYW1lcmFEaXJlY3Rpb24pXHJcbiAgICAgICAgLmNyb3NzKG5ldyBWZWN0b3IzKDAsIDEsIDApKVxyXG4gICAgICAgIC5ub3JtYWxpemUoKVxyXG4gICAgICBpZiAocGxhbmVYLmxlbmd0aFNxKCkgPT09IDApIHBsYW5lWC54ID0gMS4wXHJcbiAgICAgIGNvbnN0IHBsYW5lWSA9IG5ldyBWZWN0b3IzKCkuY3Jvc3NWZWN0b3JzKHBsYW5lWCwgY2FtZXJhRGlyZWN0aW9uKVxyXG4gICAgICBjb25zdCBkaW1zID0ge1xyXG4gICAgICAgIHg6IHRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCxcclxuICAgICAgICB5OiB0aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYXNwZWN0ID0gZGltcy54IC8gZGltcy55XHJcbiAgICAgIGNvbnN0IHdvcmxkVG9TY3JlZW4gPVxyXG4gICAgICAgIGNsYW1wKHRoaXMuZ29hbFNwaGVyaWNhbC5yYWRpdXMsIE1hdGguYWJzKHpvb21BbW91bnQpLCBOdW1iZXIuTUFYX1ZBTFVFKSAqXHJcbiAgICAgICAgTWF0aC50YW4oTWF0aC5leHAodGhpcy5sb2dGb3YpICogTWF0aFV0aWxzLkRFRzJSQUQgKiAwLjUpXHJcbiAgICAgIGNvbnN0IGN1cnNvciA9IG5ldyBWZWN0b3IzKClcclxuICAgICAgICAuY29weSh0aGlzLmdvYWxPcmlnaW4pXHJcbiAgICAgICAgLmFkZChcclxuICAgICAgICAgIHBsYW5lWC5tdWx0aXBseVNjYWxhcihcclxuICAgICAgICAgICAgdGhpcy56b29tQ29udHJvbENvb3JkLnggKiB3b3JsZFRvU2NyZWVuICogYXNwZWN0ICogK3Rhc0ludGVyc2VjdFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgICAuYWRkKFxyXG4gICAgICAgICAgcGxhbmVZLm11bHRpcGx5U2NhbGFyKHRoaXMuem9vbUNvbnRyb2xDb29yZC55ICogd29ybGRUb1NjcmVlbiAqICt0YXNJbnRlcnNlY3QpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hZGQoZG9sbHlBbW91bnQpXHJcbiAgICAgIGNvbnN0IGxlcnBSYXRpbyA9IGNsYW1wKHRoaXMuX3JhZGl1c0RlbHRhIC8gdGhpcy5nb2FsU3BoZXJpY2FsLnJhZGl1cywgLTEsIDEpXHJcbiAgICAgIGNvbnN0IG5ld1RhcmdldEVuZCA9IG5ldyBWZWN0b3IzKCkuY29weSh0aGlzLmdvYWxPcmlnaW4pLmxlcnAoY3Vyc29yLCBsZXJwUmF0aW8pXHJcblxyXG4gICAgICB0aGlzLnNldFRhcmdldChuZXdUYXJnZXRFbmQueCwgbmV3VGFyZ2V0RW5kLnksIG5ld1RhcmdldEVuZC56KVxyXG4gICAgfVxyXG4gICAgLyoqIFdlJ3JlIG5vdCB2YXJ5aW5nIGZvdiBiYXNlZCBvbiB6b29tIGxldmVsIGZvciBub3cgKi9cclxuICAgIC8vIGlmIChkZWx0YVpvb20gIT09IDApIHtcclxuICAgIC8vICAgY29uc3QgZ29hbExvZ0ZvdiA9IHRoaXMuZ29hbExvZ0ZvdiArIGRlbHRhWm9vbVxyXG4gICAgLy8gICB0aGlzLnNldEZpZWxkT2ZWaWV3KE1hdGguZXhwKGdvYWxMb2dGb3YpKVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGNvbnRyb2xzLiBJbiBtb3N0IGNhc2VzLCB0aGlzIHdpbGwgcmVzdWx0IGluIHRoZSBjYW1lcmFcclxuICAgKiBpbnRlcnBvbGF0aW5nIGl0cyBwb3NpdGlvbiBhbmQgcm90YXRpb24gdW50aWwgaXQgbGluZXMgdXAgd2l0aCB0aGVcclxuICAgKiBkZXNpZ25hdGVkIGdvYWwgb3JiaXRhbCBwb3NpdGlvbi4gUmV0dXJucyBmYWxzZSBpZiB0aGUgY2FtZXJhIGRpZCBub3QgbW92ZS5cclxuICAgKlxyXG4gICAqIFRpbWUgYW5kIGRlbHRhIGFyZSBtZWFzdXJlZCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICovXHJcbiAgcHVibGljIHVwZGF0ZShkZWx0YT86IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KClcclxuICAgIGRlbHRhID0gZGVsdGEgIT09IHVuZGVmaW5lZCA/IGRlbHRhIDogbm93IC0gdGhpcy5fbGFzdFRpY2tcclxuICAgIHRoaXMuX2xhc3RUaWNrID0gbm93XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTdGF0aW9uYXJ5KCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb21wdXRlTWluTWF4UmFkaXVzKClcclxuXHJcbiAgICBjb25zdCB7IG1heGltdW1Qb2xhckFuZ2xlIH0gPSB0aGlzLl9vcHRpb25zXHJcblxyXG4gICAgY29uc3QgZFRoZXRhID0gdGhpcy5zcGhlcmljYWwudGhldGEgLSB0aGlzLmdvYWxTcGhlcmljYWwudGhldGFcclxuICAgIGlmIChcclxuICAgICAgTWF0aC5hYnMoZFRoZXRhKSA+IE1hdGguUEkgJiZcclxuICAgICAgIWlzRmluaXRlKHRoaXMuX29wdGlvbnMubWluaW11bUF6aW11dGhhbEFuZ2xlKSAmJlxyXG4gICAgICAhaXNGaW5pdGUodGhpcy5fb3B0aW9ucy5tYXhpbXVtQXppbXV0aGFsQW5nbGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zcGhlcmljYWwudGhldGEgLT0gTWF0aC5zaWduKGRUaGV0YSkgKiAyICogTWF0aC5QSVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3BoZXJpY2FsLnRoZXRhID0gdGhpcy50aGV0YURhbXBlci51cGRhdGUoXHJcbiAgICAgIHRoaXMuc3BoZXJpY2FsLnRoZXRhLFxyXG4gICAgICB0aGlzLmdvYWxTcGhlcmljYWwudGhldGEsXHJcbiAgICAgIGRlbHRhLFxyXG4gICAgICBNYXRoLlBJXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5zcGhlcmljYWwucGhpID0gdGhpcy5waGlEYW1wZXIudXBkYXRlKFxyXG4gICAgICB0aGlzLnNwaGVyaWNhbC5waGksXHJcbiAgICAgIHRoaXMuZ29hbFNwaGVyaWNhbC5waGksXHJcbiAgICAgIGRlbHRhLFxyXG4gICAgICBtYXhpbXVtUG9sYXJBbmdsZVxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IG1pbk1heFJhbmdlID0gdGhpcy5fb3B0aW9ucy5tYXhpbXVtUmFkaXVzIC0gdGhpcy5fb3B0aW9ucy5taW5pbXVtUmFkaXVzXHJcbiAgICBjb25zdCByYWRpdXNOb3JtYWxpc2F0aW9uUmFuZ2UgPSBtaW5NYXhSYW5nZSA8IDEgPyBtaW5NYXhSYW5nZSA6IDFcclxuICAgIHRoaXMuc3BoZXJpY2FsLnJhZGl1cyA9IHRoaXMucmFkaXVzRGFtcGVyLnVwZGF0ZShcclxuICAgICAgdGhpcy5zcGhlcmljYWwucmFkaXVzLFxyXG4gICAgICB0aGlzLmdvYWxTcGhlcmljYWwucmFkaXVzLFxyXG4gICAgICBkZWx0YSxcclxuICAgICAgcmFkaXVzTm9ybWFsaXNhdGlvblJhbmdlXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5sb2dGb3YgPSB0aGlzLmdvYWxMb2dGb3ZcclxuICAgIC8qKiBXZSdyZSBub3QgZWFzaW5nIHRoZSBmb3YgZm9yIG5vdyAqL1xyXG4gICAgLy8gdGhpcy5mb3ZEYW1wZXIudXBkYXRlKFxyXG4gICAgLy8gICB0aGlzLmxvZ0ZvdixcclxuICAgIC8vICAgdGhpcy5nb2FsTG9nRm92LFxyXG4gICAgLy8gICBkZWx0YSxcclxuICAgIC8vICAgMTBcclxuICAgIC8vIClcclxuXHJcbiAgICBsZXQgbm9ybWFsaXphdGlvbiA9IDFcclxuICAgIGlmICh0aGlzLndvcmxkKSB7XHJcbiAgICAgIG5vcm1hbGl6YXRpb24gPSB0aGlzLndvcmxkLndvcmxkQm94LmdldEJvdW5kaW5nU3BoZXJlKG5ldyBTcGhlcmUoKSkucmFkaXVzIC8gMTBcclxuICAgIH1cclxuICAgIGNvbnN0IHggPSB0aGlzLnRhcmdldERhbXBlclgudXBkYXRlKFxyXG4gICAgICB0aGlzLm9yaWdpbi54LFxyXG4gICAgICB0aGlzLmdvYWxPcmlnaW4ueCxcclxuICAgICAgZGVsdGEsXHJcbiAgICAgIG5vcm1hbGl6YXRpb25cclxuICAgIClcclxuICAgIGNvbnN0IHkgPSB0aGlzLnRhcmdldERhbXBlclkudXBkYXRlKFxyXG4gICAgICB0aGlzLm9yaWdpbi55LFxyXG4gICAgICB0aGlzLmdvYWxPcmlnaW4ueSxcclxuICAgICAgZGVsdGEsXHJcbiAgICAgIG5vcm1hbGl6YXRpb25cclxuICAgIClcclxuICAgIGNvbnN0IHogPSB0aGlzLnRhcmdldERhbXBlcloudXBkYXRlKFxyXG4gICAgICB0aGlzLm9yaWdpbi56LFxyXG4gICAgICB0aGlzLmdvYWxPcmlnaW4ueixcclxuICAgICAgZGVsdGEsXHJcbiAgICAgIG5vcm1hbGl6YXRpb25cclxuICAgIClcclxuICAgIHRoaXMub3JpZ2luLnNldCh4LCB5LCB6KVxyXG5cclxuICAgIHJldHVybiB0aGlzLm1vdmVDYW1lcmEoKVxyXG4gIH1cclxuXHJcbiAgLyoqIEZ1bmN0aW9uIGV4cGVjdHMgdGhlIHBvc2l0aW9uIGFyZ3VtZW50IHRvIGJlIGluIGEgQ1Mgd2hlcmUgWSBpcyB1cCAqL1xyXG4gIHByb3RlY3RlZCBwb2xhckZyb21QaXZvdGFsKHBvc2l0aW9uOiBWZWN0b3IzKSB7XHJcbiAgICBjb25zdCBxdWF0ZXJuaW9uID0gdGhpcy5xdWF0ZXJuaW9uRnJvbVNwaGVyaWNhbCh0aGlzLnNwaGVyaWNhbClcclxuICAgIC8qKiBGb3J3YXJkIGRpcmVjdGlvbiAqL1xyXG4gICAgY29uc3QgZGlyID0gbmV3IFZlY3RvcjMoKS5zZXRGcm9tTWF0cml4Q29sdW1uKFxyXG4gICAgICBuZXcgTWF0cml4NCgpLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHF1YXRlcm5pb24pLFxyXG4gICAgICAyXHJcbiAgICApXHJcbiAgICBjb25zdCBjYW1Qb3MgPSBuZXcgVmVjdG9yMygpLmNvcHkocG9zaXRpb24pXHJcblxyXG4gICAgLyoqIFBpdm90IG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkIGluIGEgWSB1cCBDUyAgKi9cclxuICAgIGNvbnN0IHBpdm90UG9pbnQgPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgIC5jb3B5KHRoaXMucGl2b3RQb2ludClcclxuICAgICAgLmFwcGx5TWF0cml4NCh0aGlzLl9iYXNpc1RyYW5zZm9ybUludilcclxuXHJcbiAgICBjb25zdCBjYW1lcmFQaXZvdERpc3QgPSBjYW1Qb3MuZGlzdGFuY2VUbyhwaXZvdFBvaW50KVxyXG4gICAgY29uc3QgY2FtZXJhUGl2b3REaXIgPSBuZXcgVmVjdG9yMygpLmNvcHkoY2FtUG9zKS5zdWIocGl2b3RQb2ludClcclxuICAgIGNhbWVyYVBpdm90RGlyLm5vcm1hbGl6ZSgpXHJcblxyXG4gICAgY29uc3QgZG90ID0gTWF0aC5taW4oTWF0aC5tYXgoZGlyLmRvdChjYW1lcmFQaXZvdERpciksIC0xKSwgMSlcclxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hY29zKGRvdClcclxuICAgIC8qKiBXZSBjb21wdXRlIGEgbmV3IGRpc3RhbmNlZCBiYXNlZCBvbiB0aGUgcGl2b3QgcG9pbnQgKi9cclxuICAgIGNvbnN0IHBvbGFyUmFkaXVzID0gY2FtZXJhUGl2b3REaXN0ICogTWF0aC5jb3MoYW5nbGUpXHJcbiAgICAvKiogV2UgY29tcHV0ZSBhIG5ldyBvcmlnaW4gYmFzZWQgb24gdGhlIHBpdm90IHBvaW50LCBidXQga2VlcGluZyBpdCBhbG9uZyB0aGUgY2FtZXJhJ3MgY3VycmVudCBmb3J3YXJkIGRpcmVjdGlvbiAqL1xyXG4gICAgY29uc3QgcG9sYXJPcmlnaW4gPSBjYW1Qb3Muc3ViKG5ldyBWZWN0b3IzKCkuY29weShkaXIpLm11bHRpcGx5U2NhbGFyKHBvbGFyUmFkaXVzKSlcclxuXHJcbiAgICB0aGlzLmdvYWxPcmlnaW4uY29weShwb2xhck9yaWdpbilcclxuICAgIHRoaXMub3JpZ2luLmNvcHkocG9sYXJPcmlnaW4pXHJcblxyXG4gICAgLyoqIEZvciBvcnRob2dyYXBoaWNhIGNhbWVyYSdzIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSByYWRpdXMgYmVjYXVzZSBpdCB3aWxsIGJyZWFrIHRoZWlyIG9ydGhvZ3JhcGhpYyBzaXplICovXHJcbiAgICBpZiAodGhpcy5fdGFyZ2V0Q2FtZXJhIGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgdGhpcy5nb2FsU3BoZXJpY2FsLnJhZGl1cyA9IHBvbGFyUmFkaXVzXHJcbiAgICAgIHRoaXMuc3BoZXJpY2FsLnJhZGl1cyA9IHBvbGFyUmFkaXVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRnVuY3Rpb24gZXhwZWN0cyB0aGUgb3JpZ2luIGFyZ3VtZW50IHRvIGJlIGluIGEgQ1Mgd2hlcmUgWSBpcyB1cCAqL1xyXG4gIHByb3RlY3RlZCBwb3NpdGlvbkZyb21QaXZvdGFsKG9yaWdpbjogVmVjdG9yMywgcXVhdGVybmlvbjogUXVhdGVybmlvbikge1xyXG4gICAgY29uc3QgcGl2b3RQb2ludCA9IG5ldyBWZWN0b3IzKClcclxuICAgICAgLmNvcHkodGhpcy5waXZvdFBvaW50KVxyXG4gICAgICAuYXBwbHlNYXRyaXg0KHRoaXMuX2Jhc2lzVHJhbnNmb3JtSW52KVxyXG5cclxuICAgIGNvbnN0IHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgcG9zaXRpb24uY29weShvcmlnaW4pXHJcblxyXG4gICAgcG9zaXRpb24uc3ViKHBpdm90UG9pbnQpXHJcbiAgICBwb3NpdGlvbi5hcHBseVF1YXRlcm5pb24ocXVhdGVybmlvbilcclxuICAgIHBvc2l0aW9uLmFkZChwaXZvdFBvaW50KVxyXG5cclxuICAgIHJldHVybiBwb3NpdGlvblxyXG4gIH1cclxuXHJcbiAgLyoqIEZ1bmN0aW9uIGV4cGVjdHMgdGhlIHBpdm90UG9pbnQgYW5kIHBvc2l0aW9uIGFyZ3VtZW50cyB0byBiZSBpbiBhIENTIHdoZXJlIFkgaXMgdXAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0UGl2b3RhbE9yaWdpbihcclxuICAgIHBpdm90UG9pbnQ6IFZlY3RvcjMsXHJcbiAgICBwb3NpdGlvbjogVmVjdG9yMyxcclxuICAgIHF1YXRlcm5pb246IFF1YXRlcm5pb25cclxuICApIHtcclxuICAgIGNvbnN0IHBpdm90YWxPcmlnaW4gPSBuZXcgVmVjdG9yMygpLmNvcHkocG9zaXRpb24pXHJcblxyXG4gICAgcGl2b3RhbE9yaWdpbi5zdWIocGl2b3RQb2ludClcclxuICAgIHBpdm90YWxPcmlnaW4uYXBwbHlRdWF0ZXJuaW9uKG5ldyBRdWF0ZXJuaW9uKCkuY29weShxdWF0ZXJuaW9uKS5pbnZlcnQoKSlcclxuICAgIHBpdm90YWxPcmlnaW4uYWRkKHBpdm90UG9pbnQpXHJcblxyXG4gICAgcmV0dXJuIHBpdm90YWxPcmlnaW5cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtb3ZlQ2FtZXJhKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbGFzdENhbWVyYVBvcyA9IG5ldyBWZWN0b3IzKCkuY29weSh0aGlzLl90YXJnZXRDYW1lcmEucG9zaXRpb24pXHJcbiAgICBjb25zdCBsYXN0Q2FtZXJhUXVhdCA9IG5ldyBRdWF0ZXJuaW9uKCkuY29weSh0aGlzLl90YXJnZXRDYW1lcmEucXVhdGVybmlvbilcclxuXHJcbiAgICB0aGlzLnNwaGVyaWNhbC5tYWtlU2FmZSgpXHJcblxyXG4gICAgLyoqIFdlIGdldCB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgcm90YXRpb24gYmFzZWQgb2ZmIHRoZSBsYXRlc3QgcG9sYXIgcGFyYW1zXHJcbiAgICAgKiAgVGhlIGdyb3VuZCB0cnV0aCBpcyBnb2luZyB0byBhbHdheXMgYmUgdGhlIHBvbGFyIENTIVxyXG4gICAgICovXHJcbiAgICBjb25zdCBxdWF0ZXJuaW9uID0gdGhpcy5xdWF0ZXJuaW9uRnJvbVNwaGVyaWNhbCh0aGlzLnNwaGVyaWNhbClcclxuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25Gcm9tU3BoZXJpY2FsKHRoaXMuc3BoZXJpY2FsLCB0aGlzLm9yaWdpbilcclxuXHJcbiAgICBpZiAodGhpcy51c2VQaXZvdGFsKSB7XHJcbiAgICAgIC8qKiBXZSB0cmFuc2Zvcm0gYm90aCBjdXJyZW50IGFuZCBwcmV2aW91cyBwaXZvdHMgaW4gYSBDUyB3aGVyZSBZIHVzIHVwICovXHJcbiAgICAgIGNvbnN0IHBpdm90UG9pbnQgPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgICAgLmNvcHkodGhpcy5waXZvdFBvaW50KVxyXG4gICAgICAgIC5hcHBseU1hdHJpeDQodGhpcy5fYmFzaXNUcmFuc2Zvcm1JbnYpXHJcbiAgICAgIGNvbnN0IHByZXZQaXZvdFBvaW50ID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgICAgIC5jb3B5KHRoaXMubGFzdFBpdm90UG9pbnQpXHJcbiAgICAgICAgLmFwcGx5TWF0cml4NCh0aGlzLl9iYXNpc1RyYW5zZm9ybUludilcclxuXHJcbiAgICAgIGNvbnN0IGRlbHRhUGl2b3QgPSBwcmV2UGl2b3RQb2ludC5zdWIocGl2b3RQb2ludClcclxuXHJcbiAgICAgIC8qKiBXZSByZWNvbXB1dGUgdGhlIHBpdm90YWwgb3JpZ2luL3Bpdm90YWwgb2Zmc2V0LCBidXQgb25seSB3aGVuIHJlcXVpcmVkISAqL1xyXG4gICAgICBpZiAoZGVsdGFQaXZvdC5sZW5ndGgoKSA+IDApIHtcclxuICAgICAgICB0aGlzLnBpdm90YWxPcmlnaW4uY29weSh0aGlzLmdldFBpdm90YWxPcmlnaW4ocGl2b3RQb2ludCwgcG9zaXRpb24sIHF1YXRlcm5pb24pKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiogV2UgZ2V0IGEgbmV3IHBvc2l0aW9uIGluIHRoZSBwaXZvdGFsIENTICovXHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbkZyb21QaXZvdGFsKHRoaXMucGl2b3RhbE9yaWdpbiwgcXVhdGVybmlvbilcclxuICAgICAgLyoqIFdlIHVwZGF0ZSB0aGUgcG9sYXIgQ1MgYmFzZWQgb2ZmIHRoZSBuZXcgcGl2b3RhbCBjYW1lcmEgcG9zaXRpb24sXHJcbiAgICAgICAqICBlc3NlbnRpYWxseSBjcmVhdGluZyBhIHZpcnR1YWwgcGFpciBwb2xhciBDUyB3aGljaCBjYW4gcmVwcm9kdWNlIHRoZSBwaXZvdGFsIHBvc2l0aW9uICovXHJcbiAgICAgIHRoaXMucG9sYXJGcm9tUGl2b3RhbChwb3NpdGlvbilcclxuICAgICAgLyoqIFVwZGF0ZSB0aGUgbGFzdCBwaXZvdCAqL1xyXG4gICAgICB0aGlzLmxhc3RQaXZvdFBvaW50LmNvcHkodGhpcy5waXZvdFBvaW50KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBXZSB0cmFuc2Zvcm0gYm90aCBwb3NpdGlvbiBhbmQgcXVhdGVybmlvbiBpbiB0aGUgcmVxdWlyZWQgYmFzaXMgKi9cclxuICAgIHBvc2l0aW9uLmFwcGx5UXVhdGVybmlvbihcclxuICAgICAgbmV3IFF1YXRlcm5pb24oKS5zZXRGcm9tUm90YXRpb25NYXRyaXgodGhpcy5fYmFzaXNUcmFuc2Zvcm0pXHJcbiAgICApXHJcbiAgICBxdWF0ZXJuaW9uLnByZW11bHRpcGx5KG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbVJvdGF0aW9uTWF0cml4KHRoaXMuX2Jhc2lzVHJhbnNmb3JtKSlcclxuXHJcbiAgICAvKiogVGhpcyBpcyBhIHRyaWNrIHdlIGRvIGZvciBvcnRvZ3JhcGhpYyBwcm9qZWN0aW9uIHdoaWNoIHN0b3BzIHRoZSBuZWFyIHBsYW5lIGZyb20gY2xpcHBpbmcgaW50byBnZW9tZXRyeVxyXG4gICAgICogIEluIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIHRoZSBjYW1lcmEncyAnZGVwdGgnIGFsb25nIGl0J3MgZm9yd2FyZCBkb2VzIG5vdCBtYXR0ZXIuIFpvb29taW5nIGlzIGFjaGlldmVkIGJ5XHJcbiAgICAgKiAgdmFyeWluZyB0aGUgb3J0aG9ncmFwaGljIHNpemUsIG5vdCBieSBtb3ZpbmcgdGhlIGNhbWVyYS5cclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuX3RhcmdldENhbWVyYSBpbnN0YW5jZW9mIE9ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgICBjb25zdCBjYW1lcmFEaXJlY3Rpb24gPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgICAgLnNldEZyb21TcGhlcmljYWwodGhpcy5zcGhlcmljYWwpXHJcbiAgICAgICAgLmFwcGx5UXVhdGVybmlvbihuZXcgUXVhdGVybmlvbigpLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0aGlzLl9iYXNpc1RyYW5zZm9ybSkpXHJcbiAgICAgICAgLm5vcm1hbGl6ZSgpXHJcbiAgICAgIHBvc2l0aW9uLmFkZChcclxuICAgICAgICBjYW1lcmFEaXJlY3Rpb24ubXVsdGlwbHlTY2FsYXIoXHJcbiAgICAgICAgICB0aGlzLl9vcHRpb25zLm1heGltdW1SYWRpdXMgLVxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubWluaW11bVJhZGl1cyAtXHJcbiAgICAgICAgICAgIHRoaXMuc3BoZXJpY2FsLnJhZGl1c1xyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgLyoqIEFwcGx5IHZhbHVlcyBhbmQgdXBkYXRlIHRyYW5zZm9ybSAqL1xyXG4gICAgdGhpcy5fdGFyZ2V0Q2FtZXJhLnBvc2l0aW9uLmNvcHkocG9zaXRpb24pXHJcbiAgICB0aGlzLl90YXJnZXRDYW1lcmEucXVhdGVybmlvbi5jb3B5KHF1YXRlcm5pb24pXHJcbiAgICB0aGlzLl90YXJnZXRDYW1lcmEudXBkYXRlTWF0cml4V29ybGQodHJ1ZSlcclxuXHJcbiAgICAvKiogRm92IHVwZGF0ZSAqL1xyXG4gICAgaWYgKHRoaXMuX3RhcmdldENhbWVyYSBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhKVxyXG4gICAgICBpZiAodGhpcy5fdGFyZ2V0Q2FtZXJhLmZvdiAhPT0gTWF0aC5leHAodGhpcy5sb2dGb3YpKSB7XHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0Q2FtZXJhLmZvdiA9IE1hdGguZXhwKHRoaXMubG9nRm92KVxyXG4gICAgICAgIHRoaXMuX3RhcmdldENhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KClcclxuICAgICAgfVxyXG5cclxuICAgIC8qKiBDb21wdXRlIHRoZSBjb3JyZWN0IG9ydGhvZ3JhcGhpYyBzaXplIGJhc2VkIG9uIHRoZSBwb2xhciByYWRpdXMgKi9cclxuICAgIGlmICh0aGlzLl90YXJnZXRDYW1lcmEgaW5zdGFuY2VvZiBPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgICAgY29uc3Qgb3J0aG9ncmFwaGljU2l6ZSA9IGNvbXB1dGVPcnRob2dyYXBoaWNTaXplKFxyXG4gICAgICAgIHRoaXMuc3BoZXJpY2FsLnJhZGl1cyxcclxuICAgICAgICBNYXRoLmV4cCh0aGlzLmxvZ0ZvdiksXHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoIC8gdGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodFxyXG4gICAgICApXHJcbiAgICAgIHRoaXMuX3RhcmdldENhbWVyYS56b29tID0gMVxyXG4gICAgICB0aGlzLl90YXJnZXRDYW1lcmEubGVmdCA9IG9ydGhvZ3JhcGhpY1NpemUueCAvIC0yXHJcbiAgICAgIHRoaXMuX3RhcmdldENhbWVyYS5yaWdodCA9IG9ydGhvZ3JhcGhpY1NpemUueCAvIDJcclxuICAgICAgdGhpcy5fdGFyZ2V0Q2FtZXJhLnRvcCA9IG9ydGhvZ3JhcGhpY1NpemUueSAvIDJcclxuICAgICAgdGhpcy5fdGFyZ2V0Q2FtZXJhLmJvdHRvbSA9IG9ydGhvZ3JhcGhpY1NpemUueSAvIC0yXHJcbiAgICAgIHRoaXMuX3RhcmdldENhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KClcclxuICAgIH1cclxuXHJcbiAgICAvKiogVXBkYXRlIHRoZSBkZWJ1ZyBvcmlnaW4gc3BoZXJlICovXHJcbiAgICBjb25zdCBzcGhlcmVQb3MgPVxyXG4gICAgICB0aGlzLl9vcHRpb25zLm9yYml0QXJvdW5kQ3Vyc29yICYmIHRoaXMudXNlUGl2b3RhbFxyXG4gICAgICAgID8gdGhpcy5waXZvdFBvaW50XHJcbiAgICAgICAgOiBuZXcgVmVjdG9yMygpLmNvcHkodGhpcy5vcmlnaW4pLmFwcGx5TWF0cml4NCh0aGlzLl9iYXNpc1RyYW5zZm9ybSlcclxuICAgIHRoaXMub3JiaXRTcGhlcmUucG9zaXRpb24uY29weShzcGhlcmVQb3MpXHJcblxyXG4gICAgLyoqIFdlJ2QgcmF0aGVyIGhhdmUgYSBwYWxwYWJsZSBlcHNpbG9uIGZvciByZWd1bGFyIHNpemVkIHN0cmVhbXMsIGJ1dCBhbHNvXHJcbiAgICAgKiAgY29tcHV0ZSBhIGN1c3RvbSBvbmUgZm9yIG1pY3Jvc2NvcGljIG9uZXNcclxuICAgICAqL1xyXG4gICAgY29uc3QgZXBzaWxvbiA9IE1hdGgubWluKFxyXG4gICAgICBNT1ZFTUVOVF9FUFNJTE9OLFxyXG4gICAgICB0aGlzLndvcmxkLmdldFJlbGF0aXZlT2Zmc2V0KE1PVkVNRU5UX0VQU0lMT04pXHJcbiAgICApXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBsYXN0Q2FtZXJhUG9zLnN1Yih0aGlzLl90YXJnZXRDYW1lcmEucG9zaXRpb24pLmxlbmd0aCgpID4gZXBzaWxvbiB8fFxyXG4gICAgICBsYXN0Q2FtZXJhUXVhdC5hbmdsZVRvKHRoaXMuX3RhcmdldENhbWVyYS5xdWF0ZXJuaW9uKSA+IGVwc2lsb25cclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgLy8gT3J0aG8gaGVpZ2h0IHRvIGRpc3RhbmNlIGZ1bmN0aW9uLiBLZWVwaW5nIGZvciByZWZlcmVuY2VcclxuICBwcml2YXRlIG9ydGhvZ3JhcGhpY0hlaWdodFRvRGlzdGFuY2UoaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIGlmICghKHRoaXMuX3RhcmdldENhbWVyYSBpbnN0YW5jZW9mIE9ydGhvZ3JhcGhpY0NhbWVyYSkpXHJcbiAgICAgIHJldHVybiB0aGlzLnNwaGVyaWNhbC5yYWRpdXNcclxuXHJcbiAgICByZXR1cm4gaGVpZ2h0IC8gKE1hdGgudGFuKE1hdGhVdGlscy5ERUcyUkFEICogTWF0aC5leHAodGhpcy5sb2dGb3YpICogMC41KSAqIDIpXHJcbiAgfSovXHJcblxyXG4gIC8qKiBUaHJlZS5qcyBTcGhlcmljYWwgYXNzdW1lcyAoMCwgMSwgMCkgYXMgdXAuLi4gKi9cclxuICBwcm90ZWN0ZWQgcG9zaXRpb25Gcm9tU3BoZXJpY2FsKHNwaGVyaWNhbDogU3BoZXJpY2FsLCBvcmlnaW4/OiBWZWN0b3IzKSB7XHJcbiAgICBjb25zdCBwb3NpdGlvbjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICAgIHBvc2l0aW9uLnNldEZyb21TcGhlcmljYWwoc3BoZXJpY2FsKVxyXG4gICAgaWYgKG9yaWdpbikgcG9zaXRpb24uYWRkKG9yaWdpbilcclxuXHJcbiAgICByZXR1cm4gcG9zaXRpb25cclxuICB9XHJcblxyXG4gIC8qKiBUaHJlZS5qcyBTcGhlcmljYWwgYXNzdW1lcyAoMCwgMSwgMCkgYXMgdXAuLi4gKi9cclxuICBwcm90ZWN0ZWQgcXVhdGVybmlvbkZyb21TcGhlcmljYWwoc3BoZXJpY2FsOiBTcGhlcmljYWwpIHtcclxuICAgIGNvbnN0IHF1YXRlcm5pb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpXHJcbiAgICBxdWF0ZXJuaW9uLnNldEZyb21FdWxlcihcclxuICAgICAgbmV3IEV1bGVyKHNwaGVyaWNhbC5waGkgLSBNYXRoLlBJIC8gMiwgc3BoZXJpY2FsLnRoZXRhLCAwLCAnWVhaJylcclxuICAgIClcclxuXHJcbiAgICByZXR1cm4gcXVhdGVybmlvblxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVzZXJBZGp1c3RPcmJpdChkZWx0YVRoZXRhOiBudW1iZXIsIGRlbHRhUGhpOiBudW1iZXIsIGRlbHRhWm9vbTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFkanVzdE9yYml0KFxyXG4gICAgICBkZWx0YVRoZXRhICpcclxuICAgICAgICB0aGlzLl9vcHRpb25zLm9yYml0U2Vuc2l0aXZpdHkgKlxyXG4gICAgICAgICt0aGlzLl9vcHRpb25zLmVuYWJsZU9yYml0ICpcclxuICAgICAgICB0aGlzLl9vcHRpb25zLmlucHV0U2Vuc2l0aXZpdHksXHJcbiAgICAgIGRlbHRhUGhpICpcclxuICAgICAgICB0aGlzLl9vcHRpb25zLm9yYml0U2Vuc2l0aXZpdHkgKlxyXG4gICAgICAgICt0aGlzLl9vcHRpb25zLmVuYWJsZU9yYml0ICpcclxuICAgICAgICB0aGlzLl9vcHRpb25zLmlucHV0U2Vuc2l0aXZpdHksXHJcbiAgICAgIGRlbHRhWm9vbSAqXHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucy56b29tU2Vuc2l0aXZpdHkgKlxyXG4gICAgICAgICt0aGlzLl9vcHRpb25zLmVuYWJsZVpvb20gKlxyXG4gICAgICAgIHRoaXMuX29wdGlvbnMuaW5wdXRTZW5zaXRpdml0eVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGVuYWJsZUludGVyYWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQpIHJldHVyblxyXG5cclxuICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25Qb2ludGVyRG93bilcclxuICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgdGhpcy5vblBvaW50ZXJVcClcclxuXHJcbiAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLm9uV2hlZWwpXHJcbiAgICAvLyBUaGlzIGxpdHRsZSBiZWF1dHkgaXMgdG8gd29yayBhcm91bmQgYSBXZWJLaXQgYnVnIHRoYXQgb3RoZXJ3aXNlIG1ha2VzXHJcbiAgICAvLyB0b3VjaCBldmVudHMgcmFuZG9tbHkgbm90IGNhbmNlbGFibGUuXHJcbiAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgKCkgPT4ge30sIHsgcGFzc2l2ZTogZmFsc2UgfSlcclxuICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIHRoaXMub25Db250ZXh0KVxyXG5cclxuICAgIC8vIHRoaXMuZWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZ3JhYidcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBkaXNhYmxlSW50ZXJhY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVyblxyXG5cclxuICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25Qb2ludGVyRG93bilcclxuICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMub25Qb2ludGVyTW92ZSlcclxuICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLm9uUG9pbnRlclVwKVxyXG4gICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLm9uUG9pbnRlclVwKVxyXG4gICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgdGhpcy5vbldoZWVsKVxyXG4gICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgdGhpcy5vbkNvbnRleHQpXHJcblxyXG4gICAgLy8gICBlbGVtZW50LnN0eWxlLmN1cnNvciA9ICcnXHJcbiAgICB0aGlzLnRvdWNoTW9kZSA9IG51bGxcclxuICAgIHRoaXMucG9pbnRlcnMubGVuZ3RoID0gMFxyXG4gIH1cclxuXHJcbiAgLy8gV3JhcHMgdG8gYmV0d2VlbiAtcGkgYW5kIHBpXHJcbiAgcHJvdGVjdGVkIHdyYXBBbmdsZShyYWRpYW5zOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IChyYWRpYW5zICsgTWF0aC5QSSkgLyAoMiAqIE1hdGguUEkpXHJcbiAgICBjb25zdCB3cmFwcGVkID0gbm9ybWFsaXplZCAtIE1hdGguZmxvb3Iobm9ybWFsaXplZClcclxuICAgIHJldHVybiB3cmFwcGVkICogMiAqIE1hdGguUEkgLSBNYXRoLlBJXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcGl4ZWxMZW5ndGhUb1NwaGVyaWNhbEFuZ2xlKHBpeGVsTGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICgyICogTWF0aC5QSSAqIHBpeGVsTGVuZ3RoKSAvIHRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHRcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB0d29Ub3VjaERpc3RhbmNlKHRvdWNoT25lOiBQb2ludGVyLCB0b3VjaFR3bzogUG9pbnRlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IGNsaWVudFg6IHhPbmUsIGNsaWVudFk6IHlPbmUgfSA9IHRvdWNoT25lXHJcbiAgICBjb25zdCB7IGNsaWVudFg6IHhUd28sIGNsaWVudFk6IHlUd28gfSA9IHRvdWNoVHdvXHJcbiAgICBjb25zdCB4RGVsdGEgPSB4VHdvIC0geE9uZVxyXG4gICAgY29uc3QgeURlbHRhID0geVR3byAtIHlPbmVcclxuXHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHhEZWx0YSAqIHhEZWx0YSArIHlEZWx0YSAqIHlEZWx0YSlcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB0b3VjaE1vZGVab29tOiBUb3VjaE1vZGUgPSAoZHg6IG51bWJlciwgZHk6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdG91Y2hEaXN0YW5jZSA9IHRoaXMudHdvVG91Y2hEaXN0YW5jZSh0aGlzLnBvaW50ZXJzWzBdLCB0aGlzLnBvaW50ZXJzWzFdKVxyXG4gICAgY29uc3QgZGVsdGFab29tID1cbiAgICAgIChaT09NX1NFTlNJVElWSVRZICogKHRoaXMubGFzdFNlcGFyYXRpb24gLSB0b3VjaERpc3RhbmNlKSAqIDUwKSAvXG4gICAgICB0aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0XG4gICAgdGhpcy5sYXN0U2VwYXJhdGlvbiA9IHRvdWNoRGlzdGFuY2VcclxuXHJcbiAgICB0aGlzLnVzZXJBZGp1c3RPcmJpdCgwLCAwLCBkZWx0YVpvb20pXHJcblxyXG4gICAgaWYgKHRoaXMucGFuUGVyUGl4ZWwgPiAwKSB7XHJcbiAgICAgIHRoaXMubW92ZVBhbihkeCwgZHkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXZSBpbXBsZW1lbnQgb3VyIG93biB2ZXJzaW9uIG9mIHRoZSBicm93c2VyJ3MgQ1NTIHRvdWNoLWFjdGlvbiwgZW5mb3JjZWQgYnlcclxuICAvLyB0aGlzIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSBpT1MgaW1wbGVtZW50YXRpb24gb2YgcGFuLXkgaXMgYmFkIGFuZCBkb2Vzbid0XHJcbiAgLy8gbWF0Y2ggQW5kcm9pZC4gU3BlY2lmaWNhbGx5LCBldmVuIGlmIGEgdG91Y2ggZ2VzdHVyZSBiZWdpbnMgYnkgcGFubmluZyBYLFxyXG4gIC8vIGlPUyB3aWxsIHN3aXRjaCB0byBzY3JvbGxpbmcgYXMgc29vbiBhcyB0aGUgZ2VzdHVyZSBtb3ZlcyBpbiB0aGUgWSwgcmF0aGVyXHJcbiAgLy8gdGhhbiBzdGF5aW5nIGluIHRoZSBzYW1lIG1vZGUgdW50aWwgdGhlIGVuZCBvZiB0aGUgZ2VzdHVyZS5cclxuICBwcm90ZWN0ZWQgZGlzYWJsZVNjcm9sbCA9IChldmVudDogVG91Y2hFdmVudCkgPT4ge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHRvdWNoTW9kZVJvdGF0ZTogVG91Y2hNb2RlID0gKGR4OiBudW1iZXIsIGR5OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHsgdG91Y2hBY3Rpb24gfSA9IHRoaXMuX29wdGlvbnNcclxuICAgIGlmICghdGhpcy50b3VjaERlY2lkZWQgJiYgdG91Y2hBY3Rpb24gIT09ICdub25lJykge1xyXG4gICAgICB0aGlzLnRvdWNoRGVjaWRlZCA9IHRydWVcclxuICAgICAgY29uc3QgZHhNYWcgPSBNYXRoLmFicyhkeClcclxuICAgICAgY29uc3QgZHlNYWcgPSBNYXRoLmFicyhkeSlcclxuICAgICAgLy8gSWYgbW90aW9uIGlzIG1vc3RseSB2ZXJ0aWNhbCwgYXNzdW1lIHNjcm9sbGluZyBpcyB0aGUgaW50ZW50LlxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKHRvdWNoQWN0aW9uID09PSAncGFuLXknICYmIGR5TWFnID4gZHhNYWcpIHx8XHJcbiAgICAgICAgKHRvdWNoQWN0aW9uID09PSAncGFuLXgnICYmIGR4TWFnID4gZHlNYWcpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudG91Y2hNb2RlID0gbnVsbFxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLmRpc2FibGVTY3JvbGwsIHtcclxuICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5oYW5kbGVTaW5nbGVQb2ludGVyTW92ZShkeCwgZHkpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaGFuZGxlU2luZ2xlUG9pbnRlck1vdmUoZHg6IG51bWJlciwgZHk6IG51bWJlcikge1xyXG4gICAgY29uc3QgZGVsdGFUaGV0YSA9IHRoaXMucGl4ZWxMZW5ndGhUb1NwaGVyaWNhbEFuZ2xlKGR4KVxyXG4gICAgY29uc3QgZGVsdGFQaGkgPSB0aGlzLnBpeGVsTGVuZ3RoVG9TcGhlcmljYWxBbmdsZShkeSlcclxuXHJcbiAgICBpZiAodGhpcy5pc1VzZXJQb2ludGluZyA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5pc1VzZXJQb2ludGluZyA9IHRydWVcclxuICAgICAgdGhpcy5lbWl0KFBvaW50ZXJDaGFuZ2VFdmVudC5Qb2ludGVyQ2hhbmdlU3RhcnQpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51c2VyQWRqdXN0T3JiaXQoZGVsdGFUaGV0YSwgZGVsdGFQaGksIDApXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZVBhbigpIHtcclxuICAgIGNvbnN0IHsgdGhldGEsIHBoaSB9ID0gdGhpcy5zcGhlcmljYWxcclxuICAgIGNvbnN0IHBzaSA9IHRoZXRhIC8vLSB0aGlzLnNjZW5lLnlhd1xyXG4gICAgdGhpcy5wYW5QZXJQaXhlbCA9XHJcbiAgICAgIChQQU5fU0VOU0lUSVZJVFkgKiB0aGlzLl9vcHRpb25zLnBhblNlbnNpdGl2aXR5ICogK3RoaXMuX29wdGlvbnMuZW5hYmxlUGFuKSAvXHJcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHRcclxuICAgIHRoaXMucGFuUHJvamVjdGlvbi5zZXQoXHJcbiAgICAgIC1NYXRoLmNvcyhwc2kpLFxyXG4gICAgICAtTWF0aC5jb3MocGhpKSAqIE1hdGguc2luKHBzaSksXHJcbiAgICAgIDAsXHJcbiAgICAgIDAsXHJcbiAgICAgIE1hdGguc2luKHBoaSksXHJcbiAgICAgIDAsXHJcbiAgICAgIE1hdGguc2luKHBzaSksXHJcbiAgICAgIC1NYXRoLmNvcyhwaGkpICogTWF0aC5jb3MocHNpKSxcclxuICAgICAgMFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1vdmVQYW4oZHg6IG51bWJlciwgZHk6IG51bWJlcikge1xyXG4gICAgY29uc3QgZHh5ID0gdmVjdG9yMy5zZXQoZHgsIGR5LCAwKS5tdWx0aXBseVNjYWxhcih0aGlzLl9vcHRpb25zLmlucHV0U2Vuc2l0aXZpdHkpXHJcbiAgICBsZXQgcmVsYXRpdmVGYWN0b3IgPSB0aGlzLndvcmxkLmdldFJlbGF0aXZlT2Zmc2V0KGZhclJlbGF0aXZlRmFjdG9yUGFuKVxyXG4gICAgaWYgKHRoaXMuX21pbkRpc3QpIHtcclxuICAgICAgaWYgKHRoaXMuX21pbkRpc3QgPCByZWxhdGl2ZUZhY3RvciAqIDAuNSkge1xyXG4gICAgICAgIHJlbGF0aXZlRmFjdG9yID0gdGhpcy53b3JsZC5nZXRSZWxhdGl2ZU9mZnNldChjbG9zZVJlbGF0aXZlRmFjdG9yUGFuKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmFkaXVzRmFjdG9yID0gY2xhbXAoXHJcbiAgICAgIHRoaXMuc3BoZXJpY2FsLnJhZGl1cyxcclxuICAgICAgdGhpcy53b3JsZC5nZXRSZWxhdGl2ZU9mZnNldCgwLjAyNSksXHJcbiAgICAgIE51bWJlci5NQVhfVkFMVUVcclxuICAgIClcclxuICAgIGNvbnN0IG1ldGVyc1BlclBpeGVsID1cclxuICAgICAgTWF0aC5tYXgocmVsYXRpdmVGYWN0b3IsIHJhZGl1c0ZhY3RvcikgKiBNYXRoLmV4cCh0aGlzLmxvZ0ZvdikgKiB0aGlzLnBhblBlclBpeGVsXHJcbiAgICBkeHkubXVsdGlwbHlTY2FsYXIobWV0ZXJzUGVyUGl4ZWwpXHJcblxyXG4gICAgLyoqIFRoaXMgcGFuUHJvamVjdGlvbiBhc3N1bWVzICgwLCAxLCAwKSBhcyB1cC4uLiAqL1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXRUYXJnZXQoKS5hcHBseU1hdHJpeDQodGhpcy5fYmFzaXNUcmFuc2Zvcm1JbnYpXHJcbiAgICB0YXJnZXQuYWRkKGR4eS5hcHBseU1hdHJpeDModGhpcy5wYW5Qcm9qZWN0aW9uKSlcclxuICAgIHRoaXMuc2V0VGFyZ2V0KHRhcmdldC54LCB0YXJnZXQueSwgdGFyZ2V0LnopXHJcbiAgICB0aGlzLnVzZVBpdm90YWwgPSBmYWxzZVxyXG4gICAgdGhpcy5vcmJpdFNwaGVyZS52aXNpYmxlID0gZmFsc2VcclxuICB9XHJcblxyXG4gIC8qKiBCeSBkZWZhdWx0IGhpZGRlbiBvYmplY3RzIGFyZSBpZ25vcmVkIHdoZW4gcGlja2luZyBmb3Igb3JiaXQgYXJvdW5kIGN1cnNvciAqL1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJPcmJpdFRvQ3Vyc29ySGl0cyhoaXQ6IEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbikge1xyXG4gICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLnJlbmRlcmVyLmdldE1hdGVyaWFsKGhpdC5iYXRjaE9iamVjdC5yZW5kZXJWaWV3KVxyXG4gICAgcmV0dXJuIG1hdGVyaWFsPy52aXNpYmxlID8/IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25Qb2ludGVyRG93biA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5vcmJpdEFyb3VuZEN1cnNvcikge1xyXG4gICAgICAvKiogSG9wZSB0aGlzIGlzIG5vdCBzbG93ICovXHJcbiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcclxuICAgICAgY29uc3QgeCA9ICgoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoKSAqIDIgLSAxXHJcbiAgICAgIGNvbnN0IHkgPSAoKGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCkgLyByZWN0LmhlaWdodCkgKiAtMiArIDFcclxuXHJcbiAgICAgIGxldCByZXMgPSB0aGlzLnJlbmRlcmVyLmludGVyc2VjdGlvbnMuaW50ZXJzZWN0KFxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2NlbmUsXHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0Q2FtZXJhIGFzIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gICAgICAgIG5ldyBWZWN0b3IyKHgsIHkpLFxyXG4gICAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNILFxyXG4gICAgICAgIHRydWUsXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jbGlwcGluZ1ZvbHVtZVxyXG4gICAgICApXHJcbiAgICAgIHJlcyA9IHJlcz8uZmlsdGVyKHRoaXMuZmlsdGVyT3JiaXRUb0N1cnNvckhpdHMuYmluZCh0aGlzKSkgPz8gW11cclxuXHJcbiAgICAgIGlmIChyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5waXZvdFBvaW50LmNvcHkocmVzWzBdLnBvaW50KVxyXG4gICAgICAgIHRoaXMudXNlUGl2b3RhbCA9IHRydWVcclxuICAgICAgICB0aGlzLm9yYml0U3BoZXJlLnZpc2libGUgPSB0aGlzLl9vcHRpb25zLnNob3dPcmJpdFBvaW50XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51c2VQaXZvdGFsID0gZmFsc2VcclxuICAgICAgICB0aGlzLm9yYml0U3BoZXJlLnZpc2libGUgPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucG9pbnRlcnMubGVuZ3RoID4gMikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wb2ludGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlKVxyXG4gICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5vblBvaW50ZXJVcClcclxuICAgICAgdGhpcy50b3VjaE1vZGUgPSBudWxsXHJcbiAgICAgIHRoaXMudG91Y2hEZWNpZGVkID0gZmFsc2VcclxuICAgICAgdGhpcy5zdGFydFBvaW50ZXJQb3NpdGlvbi5jbGllbnRYID0gZXZlbnQuY2xpZW50WFxyXG4gICAgICB0aGlzLnN0YXJ0UG9pbnRlclBvc2l0aW9uLmNsaWVudFkgPSBldmVudC5jbGllbnRZXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wb2ludGVycy5wdXNoKHtcclxuICAgICAgY2xpZW50WDogZXZlbnQuY2xpZW50WCxcclxuICAgICAgY2xpZW50WTogZXZlbnQuY2xpZW50WSxcclxuICAgICAgaWQ6IGV2ZW50LnBvaW50ZXJJZFxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmlzVXNlclBvaW50aW5nID0gZmFsc2VcclxuXHJcbiAgICBpZiAoZXZlbnQucG9pbnRlclR5cGUgPT09ICd0b3VjaCcpIHtcclxuICAgICAgdGhpcy5vblRvdWNoQ2hhbmdlKGV2ZW50KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbk1vdXNlRG93bihldmVudClcclxuICAgIH1cclxuXHJcbiAgICAvLyBUTyBET1xyXG4gICAgLy8gICB0aGlzLmRpc3BhdGNoRXZlbnQoeyB0eXBlOiAndXNlci1pbnRlcmFjdGlvbicgfSlcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvblBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLnBvaW50ZXJzLmZpbmQoKHBvaW50ZXIpID0+IHBvaW50ZXIuaWQgPT09IGV2ZW50LnBvaW50ZXJJZClcclxuICAgIGlmICghcG9pbnRlcikge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbiBjYXNlIG5vIG9uZSBnYXZlIHVzIGEgcG9pbnRlcnVwIG9yIHBvaW50ZXJjYW5jZWwgZXZlbnQuXHJcbiAgICBpZiAoZXZlbnQucG9pbnRlclR5cGUgPT09ICdtb3VzZScgJiYgZXZlbnQuYnV0dG9ucyA9PT0gMCkge1xyXG4gICAgICB0aGlzLm9uUG9pbnRlclVwKGV2ZW50KVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBudW1Ub3VjaGVzID0gdGhpcy5wb2ludGVycy5sZW5ndGhcclxuICAgIGNvbnN0IGR4ID0gKGV2ZW50LmNsaWVudFggLSBwb2ludGVyLmNsaWVudFgpIC8gbnVtVG91Y2hlc1xyXG4gICAgY29uc3QgZHkgPSAoZXZlbnQuY2xpZW50WSAtIHBvaW50ZXIuY2xpZW50WSkgLyBudW1Ub3VjaGVzXHJcbiAgICBpZiAoZHggPT09IDAgJiYgZHkgPT09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBwb2ludGVyLmNsaWVudFggPSBldmVudC5jbGllbnRYXHJcbiAgICBwb2ludGVyLmNsaWVudFkgPSBldmVudC5jbGllbnRZXHJcblxyXG4gICAgaWYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSAndG91Y2gnKSB7XHJcbiAgICAgIGlmICh0aGlzLnRvdWNoTW9kZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMudG91Y2hNb2RlKGR4LCBkeSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMucGFuUGVyUGl4ZWwgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5tb3ZlUGFuKGR4LCBkeSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZVBvaW50ZXJNb3ZlKGR4LCBkeSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uUG9pbnRlclVwID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wb2ludGVycy5maW5kSW5kZXgoKHBvaW50ZXIpID0+IHBvaW50ZXIuaWQgPT09IGV2ZW50LnBvaW50ZXJJZClcclxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5wb2ludGVycy5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWx0S2V5IGluZGljYXRlcyBhbiBpbnRlcmFjdGlvbiBwcm9tcHQ7IGRvbid0IHJlc2V0IHJhZGl1cyBpbiB0aGlzIGNhc2VcclxuICAgIC8vIGFzIGl0IHdpbGwgY2F1c2UgdGhlIGNhbWVyYSB0byBkcmlmdC5cclxuICAgIC8vIGlmICh0aGlzLnBhblBlclBpeGVsID4gMCAmJiAhZXZlbnQuYWx0S2V5KSB7XHJcbiAgICAvLyAgIHRoaXMucmVzZXRSYWRpdXMoKVxyXG4gICAgLy8gfVxyXG4gICAgaWYgKHRoaXMucG9pbnRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMub25Qb2ludGVyTW92ZSlcclxuICAgICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25Qb2ludGVyVXApXHJcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLmRpc2FibGVTY3JvbGwpXHJcbiAgICAgIC8vICAgaWYgKHRoaXMuZW5hYmxlUGFuICYmIHRoaXMuZW5hYmxlVGFwKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLnJlY2VudGVyKGV2ZW50KVxyXG4gICAgICAvLyAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy50b3VjaE1vZGUgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5vblRvdWNoQ2hhbmdlKGV2ZW50KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIDsodGhpcy5zY2VuZS5lbGVtZW50IGFzIGFueSlbJHBhbkVsZW1lbnRdLnN0eWxlLm9wYWNpdHkgPSAwXHJcbiAgICAvLyBlbGVtZW50LnN0eWxlLmN1cnNvciA9ICdncmFiJ1xyXG4gICAgdGhpcy5wYW5QZXJQaXhlbCA9IDBcclxuXHJcbiAgICBpZiAodGhpcy5pc1VzZXJQb2ludGluZykge1xyXG4gICAgICB0aGlzLmVtaXQoUG9pbnRlckNoYW5nZUV2ZW50LlBvaW50ZXJDaGFuZ2VFbmQpXHJcbiAgICB9XHJcbiAgICB0aGlzLm9yYml0U3BoZXJlLnZpc2libGUgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uVG91Y2hDaGFuZ2UoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgaWYgKHRoaXMucG9pbnRlcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMudG91Y2hNb2RlID0gdGhpcy50b3VjaE1vZGVSb3RhdGVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5fb3B0aW9ucy5lbmFibGVab29tKSB7XHJcbiAgICAgICAgdGhpcy50b3VjaE1vZGUgPSBudWxsXHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuZGlzYWJsZVNjcm9sbClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRvdWNoTW9kZSA9XHJcbiAgICAgICAgdGhpcy50b3VjaERlY2lkZWQgJiYgdGhpcy50b3VjaE1vZGUgPT09IG51bGwgPyBudWxsIDogdGhpcy50b3VjaE1vZGVab29tXHJcbiAgICAgIHRoaXMudG91Y2hEZWNpZGVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5kaXNhYmxlU2Nyb2xsLCB7XHJcbiAgICAgICAgcGFzc2l2ZTogZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5sYXN0U2VwYXJhdGlvbiA9IHRoaXMudHdvVG91Y2hEaXN0YW5jZSh0aGlzLnBvaW50ZXJzWzBdLCB0aGlzLnBvaW50ZXJzWzFdKVxyXG5cclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuICYmIHRoaXMudG91Y2hNb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUGFuKClcclxuICAgICAgICBpZiAoIWV2ZW50LmFsdEtleSkge1xyXG4gICAgICAgICAgLy8gdXNlciBpbnRlcmFjdGlvbiwgbm90IHByb21wdFxyXG4gICAgICAgICAgLy8gICA7KHRoaXMuc2NlbmUuZWxlbWVudCBhcyBhbnkpWyRwYW5FbGVtZW50XS5zdHlsZS5vcGFjaXR5ID0gMVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLnBhblBlclBpeGVsID0gMFxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmVuYWJsZVBhbiAmJlxyXG4gICAgICAoZXZlbnQuYnV0dG9uID09PSAyIHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVQYW4oKVxyXG4gICAgICB0aGlzLm9yYml0U3BoZXJlLnZpc2libGUgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5lbGVtZW50LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbldoZWVsID0gKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7XHJcbiAgICAvKiogSG9wZSB0aGlzIGlzIG5vdCBzbG93ICovXHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5fY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXHJcbiAgICBjb25zdCB4ID0gKChldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGgpICogMiAtIDFcclxuICAgIGNvbnN0IHkgPSAoKGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCkgLyByZWN0LmhlaWdodCkgKiAtMiArIDFcclxuXHJcbiAgICB0aGlzLnpvb21Db250cm9sQ29vcmQuc2V0KHgsIHkpXHJcblxyXG4gICAgY29uc3QgZGVsdGFab29tID1cbiAgICAgIChldmVudC5kZWx0YVkgKlxuICAgICAgICAoZXZlbnQuZGVsdGFNb2RlID09PSAxID8gMTggOiAxKSAqXG4gICAgICAgIFpPT01fU0VOU0lUSVZJVFkpIC9cbiAgICAgIDYwXG4gICAgdGhpcy51c2VyQWRqdXN0T3JiaXQoMCwgMCwgZGVsdGFab29tKVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG4gICAgdGhpcy51c2VQaXZvdGFsID0gZmFsc2VcclxuICAgIHRoaXMub3JiaXRTcGhlcmUudmlzaWJsZSA9IGZhbHNlXHJcbiAgICAvLyBUTyBET1xyXG4gICAgLy8gdGhpcy5kaXNwYXRjaEV2ZW50KHsgdHlwZTogJ3VzZXItaW50ZXJhY3Rpb24nIH0pXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25Db250ZXh0ID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy5lbmFibGVQYW4pIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChjb25zdCBwb2ludGVyIG9mIHRoaXMucG9pbnRlcnMpIHtcclxuICAgICAgICAvLyBSZXF1aXJlZCBiZWNhdXNlIG9mIGEgY29tbW9uIGJyb3dzZXIgYnVnIHdoZXJlIHRoZSBjb250ZXh0IG1lbnUgbmV2ZXJcclxuICAgICAgICAvLyBmaXJlcyBhIHBvaW50ZXJjYW5jZWwgZXZlbnQuXHJcbiAgICAgICAgdGhpcy5vblBvaW50ZXJVcChcclxuICAgICAgICAgIG5ldyBQb2ludGVyRXZlbnQoJ3BvaW50ZXJjYW5jZWwnLCB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhcnRQb2ludGVyUG9zaXRpb24sXHJcbiAgICAgICAgICAgIHBvaW50ZXJJZDogcG9pbnRlci5pZFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJy4vRXh0ZW5zaW9uLmpzJ1xyXG5pbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgQ2FtZXJhLFxyXG4gIE1hdGhVdGlscyxcclxuICBPcnRob2dyYXBoaWNDYW1lcmEsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgUXVhdGVybmlvbixcclxuICBTcGhlcmUsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnXHJcblxyXG5pbXBvcnQgeyBDYW1lcmFQcm9qZWN0aW9uLCB0eXBlIENhbWVyYUV2ZW50UGF5bG9hZCB9IGZyb20gJy4uL29iamVjdHMvU3BlY2tsZUNhbWVyYS5qcydcclxuaW1wb3J0IHsgQ2FtZXJhRXZlbnQsIHR5cGUgU3BlY2tsZUNhbWVyYSB9IGZyb20gJy4uL29iamVjdHMvU3BlY2tsZUNhbWVyYS5qcydcclxuaW1wb3J0IHsgRmx5Q29udHJvbHMsIEZseUNvbnRyb2xzT3B0aW9ucyB9IGZyb20gJy4vY29udHJvbHMvRmx5Q29udHJvbHMuanMnXHJcbmltcG9ydCB7IFNwZWNrbGVDb250cm9scyB9IGZyb20gJy4vY29udHJvbHMvU3BlY2tsZUNvbnRyb2xzLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4uL3V0aWxzL0xvZ2dlci5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnlUeXBlIH0gZnJvbSAnLi4vYmF0Y2hpbmcvQmF0Y2guanMnXHJcbmltcG9ydCB7IElWaWV3ZXIsIFNwZWNrbGVWaWV3LCBVcGRhdGVGbGFncyB9IGZyb20gJy4uLy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCB7XHJcbiAgU21vb3RoT3JiaXRDb250cm9sc09wdGlvbnMsXHJcbiAgU21vb3RoT3JiaXRDb250cm9sc1xyXG59IGZyb20gJy4vY29udHJvbHMvU21vb3RoT3JiaXRDb250cm9scy5qcydcclxuXHJcbmV4cG9ydCBlbnVtIE5lYXJQbGFuZUNhbGN1bGF0aW9uIHtcclxuICBFTVBJUklDLFxyXG4gIEFDQ1VSQVRFXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENhbm9uaWNhbFZpZXcgPVxyXG4gIHwgJ2Zyb250J1xyXG4gIHwgJ2JhY2snXHJcbiAgfCAndXAnXHJcbiAgfCAndG9wJ1xyXG4gIHwgJ2Rvd24nXHJcbiAgfCAnYm90dG9tJ1xyXG4gIHwgJ3JpZ2h0J1xyXG4gIHwgJ2xlZnQnXHJcbiAgfCAnM2QnXHJcbiAgfCAnM0QnXHJcblxyXG5leHBvcnQgdHlwZSBJbmxpbmVWaWV3ID0ge1xyXG4gIHBvc2l0aW9uOiBWZWN0b3IzXHJcbiAgdGFyZ2V0OiBWZWN0b3IzXHJcbn1cclxuZXhwb3J0IHR5cGUgUG9sYXJWaWV3ID0ge1xyXG4gIGF6aW11dGg6IG51bWJlclxyXG4gIHBvbGFyOiBudW1iZXJcclxuICByYWRpdXM/OiBudW1iZXJcclxuICBvcmlnaW4/OiBWZWN0b3IzXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENhbWVyYUNvbnRyb2xsZXJPcHRpb25zID0gU21vb3RoT3JiaXRDb250cm9sc09wdGlvbnMgJlxyXG4gIEZseUNvbnRyb2xzT3B0aW9ucyAmIHsgbmVhclBsYW5lQ2FsY3VsYXRpb24/OiBOZWFyUGxhbmVDYWxjdWxhdGlvbiB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNQZXJzcGVjdGl2ZUNhbWVyYShjYW1lcmE6IENhbWVyYSk6IGNhbWVyYSBpcyBQZXJzcGVjdGl2ZUNhbWVyYSB7XHJcbiAgcmV0dXJuIChjYW1lcmEgYXMgUGVyc3BlY3RpdmVDYW1lcmEpLmlzUGVyc3BlY3RpdmVDYW1lcmFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT3J0aG9ncmFwaGljQ2FtZXJhKGNhbWVyYTogQ2FtZXJhKTogY2FtZXJhIGlzIE9ydGhvZ3JhcGhpY0NhbWVyYSB7XHJcbiAgcmV0dXJuIChjYW1lcmEgYXMgT3J0aG9ncmFwaGljQ2FtZXJhKS5pc09ydGhvZ3JhcGhpY0NhbWVyYVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU9ydGhvZ3JhcGhpY1NpemUoXHJcbiAgZGlzdGFuY2U6IG51bWJlcixcclxuICBmb3Y6IG51bWJlcixcclxuICBhc3BlY3Q6IG51bWJlclxyXG4pOiBWZWN0b3IyIHtcclxuICBjb25zdCBoZWlnaHQgPSBNYXRoLnRhbihNYXRoVXRpbHMuREVHMlJBRCAqIChmb3YgLyAyKSkgKiAyLjAgKiBkaXN0YW5jZVxyXG4gIGNvbnN0IHdpZHRoID0gaGVpZ2h0ICogYXNwZWN0XHJcbiAgcmV0dXJuIG5ldyBWZWN0b3IyKHdpZHRoLCBoZWlnaHQpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0T3JiaXRDb250cm9sc09wdGlvbnM6IFJlcXVpcmVkPENhbWVyYUNvbnRyb2xsZXJPcHRpb25zPiA9IHtcclxuICBlbmFibGVPcmJpdDogdHJ1ZSxcclxuICBlbmFibGVab29tOiB0cnVlLFxyXG4gIGVuYWJsZVBhbjogdHJ1ZSxcclxuICBvcmJpdFNlbnNpdGl2aXR5OiAxLFxyXG4gIHpvb21TZW5zaXRpdml0eTogMSxcclxuICBwYW5TZW5zaXRpdml0eTogMSxcclxuICBpbnB1dFNlbnNpdGl2aXR5OiAxLFxyXG4gIG1pbmltdW1SYWRpdXM6IDAsXHJcbiAgbWF4aW11bVJhZGl1czogSW5maW5pdHksXHJcbiAgbWluaW11bVBvbGFyQW5nbGU6IDAsXHJcbiAgbWF4aW11bVBvbGFyQW5nbGU6IE1hdGguUEksXHJcbiAgbWluaW11bUF6aW11dGhhbEFuZ2xlOiAtSW5maW5pdHksXHJcbiAgbWF4aW11bUF6aW11dGhhbEFuZ2xlOiBJbmZpbml0eSxcclxuICBtaW5pbXVtRmllbGRPZlZpZXc6IDQwLFxyXG4gIG1heGltdW1GaWVsZE9mVmlldzogNjAsXHJcbiAgdG91Y2hBY3Rpb246ICdub25lJyxcclxuICBpbmZpbml0ZVpvb206IHRydWUsXHJcbiAgem9vbVRvQ3Vyc29yOiB0cnVlLFxyXG4gIG9yYml0QXJvdW5kQ3Vyc29yOiB0cnVlLFxyXG4gIHNob3dPcmJpdFBvaW50OiB0cnVlLFxyXG4gIGxvb2tTcGVlZDogMSxcclxuICBtb3ZlU3BlZWQ6IDEsXHJcbiAgZGFtcGVyRGVjYXk6IDMwLFxyXG4gIGVuYWJsZUxvb2s6IHRydWUsXHJcbiAgcmVsYXRpdmVVcERvd246IGZhbHNlLFxyXG4gIG5lYXJQbGFuZUNhbGN1bGF0aW9uOiBOZWFyUGxhbmVDYWxjdWxhdGlvbi5BQ0NVUkFURVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtZXJhQ29udHJvbGxlciBleHRlbmRzIEV4dGVuc2lvbiBpbXBsZW1lbnRzIFNwZWNrbGVDYW1lcmEge1xyXG4gIHByb3RlY3RlZCBfcmVuZGVyaW5nQ2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSB8IE9ydGhvZ3JhcGhpY0NhbWVyYVxyXG4gIHByb3RlY3RlZCBwZXJzcGVjdGl2ZUNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmFcclxuICBwcm90ZWN0ZWQgb3J0aG9ncmFwaGljQ2FtZXJhOiBPcnRob2dyYXBoaWNDYW1lcmFcclxuICBwcm90ZWN0ZWQgX2xhc3RDYW1lcmFDaGFuZ2VkOiBib29sZWFuID0gZmFsc2VcclxuICBwcm90ZWN0ZWQgX29wdGlvbnM6IFJlcXVpcmVkPENhbWVyYUNvbnRyb2xsZXJPcHRpb25zPiA9IERlZmF1bHRPcmJpdENvbnRyb2xzT3B0aW9uc1xyXG4gIHByb3RlY3RlZCBfYWN0aXZlQ29udHJvbHM6IFNwZWNrbGVDb250cm9sc1xyXG4gIHByb3RlY3RlZCBfb3JiaXRDb250cm9sczogU21vb3RoT3JiaXRDb250cm9sc1xyXG4gIHByb3RlY3RlZCBfZmx5Q29udHJvbHM6IEZseUNvbnRyb2xzXHJcblxyXG4gIGdldCByZW5kZXJpbmdDYW1lcmEoKTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlcmluZ0NhbWVyYVxyXG4gIH1cclxuXHJcbiAgc2V0IHJlbmRlcmluZ0NhbWVyYSh2YWx1ZTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgIHRoaXMuX3JlbmRlcmluZ0NhbWVyYSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlQ29udHJvbHMuZW5hYmxlZFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBlbmFibGVkKHZhbCkge1xyXG4gICAgdGhpcy5jb250cm9scy5lbmFibGVkID0gdmFsXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGZpZWxkT2ZWaWV3KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYS5mb3ZcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZmllbGRPZlZpZXcodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYS5mb3YgPSB2YWx1ZVxyXG4gICAgdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXNwZWN0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYS5hc3BlY3RcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29udHJvbHMoKTogU3BlY2tsZUNvbnRyb2xzIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVDb250cm9sc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcHRpb25zKCk6IFJlcXVpcmVkPENhbWVyYUNvbnRyb2xsZXJPcHRpb25zPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBDYW1lcmFDb250cm9sbGVyT3B0aW9ucykge1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCB2YWx1ZSlcclxuICAgIHRoaXMuX29yYml0Q29udHJvbHMub3B0aW9ucyA9IHZhbHVlXHJcbiAgICB0aGlzLl9mbHlDb250cm9scy5vcHRpb25zID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2aWV3ZXI6IElWaWV3ZXIpIHtcclxuICAgIHN1cGVyKHZpZXdlcilcclxuXHJcbiAgICAvKiogQ3JlYXRlIHRoZSBkZWZhdWx0IHBlcnNwZWN0aXZlIGNhbWVyYSAqL1xyXG4gICAgdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYShcclxuICAgICAgNTUsXHJcbiAgICAgIHdpbmRvdy5pbm5lcldpZHRoIC8gd2luZG93LmlubmVySGVpZ2h0XHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgYXNwZWN0ID1cclxuICAgICAgdGhpcy52aWV3ZXIuZ2V0Q29udGFpbmVyKCkub2Zmc2V0V2lkdGggLyB0aGlzLnZpZXdlci5nZXRDb250YWluZXIoKS5vZmZzZXRIZWlnaHRcclxuXHJcbiAgICAvKiogQ3JlYXRlIHRoZSBkZWZhdWx0IG9ydGhvZ3JhcGhpYyBjYW1lcmEgKi9cclxuICAgIGNvbnN0IGZ1c3RydW1TaXplID0gNTBcclxuICAgIHRoaXMub3J0aG9ncmFwaGljQ2FtZXJhID0gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYShcclxuICAgICAgKC1mdXN0cnVtU2l6ZSAqIGFzcGVjdCkgLyAyLFxyXG4gICAgICAoZnVzdHJ1bVNpemUgKiBhc3BlY3QpIC8gMixcclxuICAgICAgZnVzdHJ1bVNpemUgLyAyLFxyXG4gICAgICAtZnVzdHJ1bVNpemUgLyAyLFxyXG4gICAgICAwLjAwMSxcclxuICAgICAgMTAwMDBcclxuICAgIClcclxuXHJcbiAgICAvKiogUGVyc3BlY3RpdmUgY2FtZXJhIGFzIGRlZmF1bHQgb24gc3RhcnR1cCAqL1xyXG4gICAgdGhpcy5yZW5kZXJpbmdDYW1lcmEgPSB0aGlzLnBlcnNwZWN0aXZlQ2FtZXJhXHJcblxyXG4gICAgdGhpcy5fZmx5Q29udHJvbHMgPSBuZXcgRmx5Q29udHJvbHMoXHJcbiAgICAgIHRoaXMuX3JlbmRlcmluZ0NhbWVyYSxcclxuICAgICAgdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5pbnB1dCxcclxuICAgICAgdGhpcy52aWV3ZXIuV29ybGQsXHJcbiAgICAgIHRoaXMuX29wdGlvbnNcclxuICAgIClcclxuICAgIHRoaXMuX2ZseUNvbnRyb2xzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5fZmx5Q29udHJvbHMuc2V0RGFtcGVyRGVjYXlUaW1lKDMwKVxyXG4gICAgdGhpcy5fZmx5Q29udHJvbHMudXAgPSBuZXcgVmVjdG9yMygwLCAwLCAxKVxyXG5cclxuICAgIHRoaXMuX29yYml0Q29udHJvbHMgPSBuZXcgU21vb3RoT3JiaXRDb250cm9scyhcclxuICAgICAgdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYSxcclxuICAgICAgdGhpcy52aWV3ZXIuZ2V0Q29udGFpbmVyKCksXHJcbiAgICAgIHRoaXMudmlld2VyLldvcmxkLFxyXG4gICAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLFxyXG4gICAgICB0aGlzLl9vcHRpb25zXHJcbiAgICApXHJcbiAgICB0aGlzLl9vcmJpdENvbnRyb2xzLmVuYWJsZWQgPSB0cnVlXHJcblxyXG4gICAgdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5zcGVja2xlQ2FtZXJhID0gdGhpc1xyXG5cclxuICAgIHRoaXMuX2FjdGl2ZUNvbnRyb2xzID0gdGhpcy5fb3JiaXRDb250cm9sc1xyXG5cclxuICAgIHRoaXMuZGVmYXVsdCgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVmYXVsdCgpIHtcclxuICAgIGlmICh0aGlzLl9hY3RpdmVDb250cm9scyBpbnN0YW5jZW9mIFNtb290aE9yYml0Q29udHJvbHMpIHtcclxuICAgICAgdGhpcy5fYWN0aXZlQ29udHJvbHMudXAgPSBuZXcgVmVjdG9yMygwLCAwLCAxKVxyXG4gICAgICB0aGlzLl9hY3RpdmVDb250cm9scy5zZXRPcmJpdCgyLjM1NiwgMC45NTUpXHJcbiAgICAgIHRoaXMuX2FjdGl2ZUNvbnRyb2xzLmp1bXBUb0dvYWwoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uPFQgZXh0ZW5kcyBDYW1lcmFFdmVudD4oXHJcbiAgICBldmVudFR5cGU6IFQsXHJcbiAgICBsaXN0ZW5lcjogKGFyZzogQ2FtZXJhRXZlbnRQYXlsb2FkW1RdKSA9PiB2b2lkXHJcbiAgKTogdm9pZCB7XHJcbiAgICBzdXBlci5vbihldmVudFR5cGUsIGxpc3RlbmVyKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRhcmdldCgpOiBWZWN0b3IzIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVDb250cm9scy5nZXRUYXJnZXQoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBvc2l0aW9uKCk6IFZlY3RvcjMge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUNvbnRyb2xzLmdldFBvc2l0aW9uKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVDb250cm9scygpIHtcclxuICAgIGNvbnN0IG9sZENvbnRyb2xzOiBTcGVja2xlQ29udHJvbHMgPSB0aGlzLl9hY3RpdmVDb250cm9sc1xyXG4gICAgbGV0IG5ld0NvbnRyb2xzOiBTcGVja2xlQ29udHJvbHMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcclxuXHJcbiAgICBpZiAodGhpcy5fYWN0aXZlQ29udHJvbHMgaW5zdGFuY2VvZiBTbW9vdGhPcmJpdENvbnRyb2xzKSB7XHJcbiAgICAgIG5ld0NvbnRyb2xzID0gdGhpcy5fZmx5Q29udHJvbHNcclxuICAgIH0gZWxzZSBpZiAodGhpcy5fYWN0aXZlQ29udHJvbHMgaW5zdGFuY2VvZiBGbHlDb250cm9scykge1xyXG4gICAgICBuZXdDb250cm9scyA9IHRoaXMuX29yYml0Q29udHJvbHNcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5ld0NvbnRyb2xzKSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBjb250cm9scyBmb3VuZCEnKVxyXG5cclxuICAgIG9sZENvbnRyb2xzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgbmV3Q29udHJvbHMuZW5hYmxlZCA9IHRydWVcclxuXHJcbiAgICBuZXdDb250cm9scy5mcm9tUG9zaXRpb25BbmRUYXJnZXQoXHJcbiAgICAgIG9sZENvbnRyb2xzLmdldEN1cnJlbnRQb3NpdGlvbigpLFxyXG4gICAgICBvbGRDb250cm9scy5nZXRDdXJyZW50VGFyZ2V0KClcclxuICAgIClcclxuICAgIG5ld0NvbnRyb2xzLmp1bXBUb0dvYWwoKVxyXG4gICAgdGhpcy5fYWN0aXZlQ29udHJvbHMgPSBuZXdDb250cm9sc1xyXG4gICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcigpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q2FtZXJhVmlldyhcclxuICAgIG9iamVjdElkczogc3RyaW5nW10gfCB1bmRlZmluZWQsXHJcbiAgICB0cmFuc2l0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkLFxyXG4gICAgZml0PzogbnVtYmVyXHJcbiAgKTogdm9pZFxyXG4gIHB1YmxpYyBzZXRDYW1lcmFWaWV3KFxyXG4gICAgdmlldzogQ2Fub25pY2FsVmlldyB8IFNwZWNrbGVWaWV3IHwgSW5saW5lVmlldyB8IFBvbGFyVmlldyxcclxuICAgIHRyYW5zaXRpb246IGJvb2xlYW4gfCB1bmRlZmluZWQsXHJcbiAgICBmaXQ/OiBudW1iZXJcclxuICApOiB2b2lkXHJcbiAgcHVibGljIHNldENhbWVyYVZpZXcoXHJcbiAgICBib3VuZHM6IEJveDMsXHJcbiAgICB0cmFuc2l0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkLFxyXG4gICAgZml0PzogbnVtYmVyXHJcbiAgKTogdm9pZFxyXG4gIHB1YmxpYyBzZXRDYW1lcmFWaWV3KFxyXG4gICAgYXJnMDpcclxuICAgICAgfCBzdHJpbmdbXVxyXG4gICAgICB8IENhbm9uaWNhbFZpZXdcclxuICAgICAgfCBTcGVja2xlVmlld1xyXG4gICAgICB8IElubGluZVZpZXdcclxuICAgICAgfCBQb2xhclZpZXdcclxuICAgICAgfCBCb3gzXHJcbiAgICAgIHwgdW5kZWZpbmVkLFxyXG4gICAgYXJnMSA9IHRydWUsXHJcbiAgICBhcmcyID0gMS4yXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoIWFyZzApIHtcclxuICAgICAgdGhpcy56b29tRXh0ZW50cyhhcmcyLCBhcmcxKVxyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZzApKSB7XHJcbiAgICAgIHRoaXMuem9vbShhcmcwLCBhcmcyLCBhcmcxKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQm94MyhhcmcwKSkge1xyXG4gICAgICB0aGlzLnpvb21Ub0JveChhcmcwLCBhcmcyLCBhcmcxKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRWaWV3KGFyZzAsIGFyZzEpXHJcbiAgICB9XHJcbiAgICB0aGlzLmVtaXQoQ2FtZXJhRXZlbnQuRHluYW1pYylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkVhcmx5VXBkYXRlKF9kZWx0YT86IG51bWJlcikge1xyXG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX2FjdGl2ZUNvbnRyb2xzLnVwZGF0ZShfZGVsdGEpXHJcbiAgICBpZiAoY2hhbmdlZCAhPT0gdGhpcy5fbGFzdENhbWVyYUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5lbWl0KGNoYW5nZWQgPyBDYW1lcmFFdmVudC5EeW5hbWljIDogQ2FtZXJhRXZlbnQuU3RhdGlvbmFyeSlcclxuICAgIH1cclxuICAgIHRoaXMuZW1pdChDYW1lcmFFdmVudC5GcmFtZVVwZGF0ZSwgY2hhbmdlZClcclxuICAgIHRoaXMuX2xhc3RDYW1lcmFDaGFuZ2VkID0gY2hhbmdlZFxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQ2FtZXJhUGxhbmVzKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkxhdGVVcGRhdGUoKTogdm9pZCB7XHJcbiAgICAvKiogQSBzaW1wbGUgd2F5IHRvIG1ha2Ugc3VyZSBhbnkgcG90ZW50aWFsIGNhbWVyYSBtb3ZlbWVudCBpcyBwcm9wYWdhdGVkIGZvcndhcmQgYXMgZHluYW1pYyBlc3BlY2lhbGx5IHRvIHRoZSByZW5kZXJpbmcgcGlwZWxpbmVzXHJcbiAgICAgKiAgSWRlYWxseSwgd2UnZCBuZWVkIHNvbWV0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYXQga2VlcHMgdHJhY2sgb2Ygb25nb2luZyBhbmltYXRpb25zIGFuZCBzdWNoIGFuZCBtYWtlcyBzdXJlIHRoZSBjYW1lciBpcyBkeW5hbWljXHJcbiAgICAgKiAgQnV0IHVudGlsIHdlIG5lZWQgdG8gY29tcGxpY2F0ZSBvdXJzZWx2ZXMsIHRoaXMgd2lsbCBiZSBlbm91Z2hcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuX2xhc3RDYW1lcmFDaGFuZ2VkKSB0aGlzLmVtaXQoQ2FtZXJhRXZlbnQuRHluYW1pYylcclxuXHJcbiAgICB0aGlzLmVtaXQoQ2FtZXJhRXZlbnQuTGF0ZUZyYW1lVXBkYXRlLCB0aGlzLl9sYXN0Q2FtZXJhQ2hhbmdlZClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJlc2l6ZSgpIHtcclxuICAgIGNvbnN0IGFzcGVjdCA9XHJcbiAgICAgIHRoaXMudmlld2VyLmdldENvbnRhaW5lcigpLm9mZnNldFdpZHRoIC8gdGhpcy52aWV3ZXIuZ2V0Q29udGFpbmVyKCkub2Zmc2V0SGVpZ2h0XHJcbiAgICB0aGlzLnBlcnNwZWN0aXZlQ2FtZXJhLmFzcGVjdCA9IGFzcGVjdFxyXG4gICAgdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KClcclxuXHJcbiAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2FjdGl2ZUNvbnRyb2xzXHJcbiAgICAgIC5nZXRQb3NpdGlvbigpXHJcbiAgICAgIC5kaXN0YW5jZVRvKHRoaXMuX2FjdGl2ZUNvbnRyb2xzLmdldFRhcmdldCgpKVxyXG4gICAgY29uc3Qgb3J0aG9ncmFwaGljU2l6ZSA9IGNvbXB1dGVPcnRob2dyYXBoaWNTaXplKFxyXG4gICAgICBkaXN0YW5jZSxcclxuICAgICAgdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYS5mb3YsXHJcbiAgICAgIGFzcGVjdFxyXG4gICAgKVxyXG4gICAgdGhpcy5vcnRob2dyYXBoaWNDYW1lcmEuem9vbSA9IDFcclxuICAgIHRoaXMub3J0aG9ncmFwaGljQ2FtZXJhLmxlZnQgPSBvcnRob2dyYXBoaWNTaXplLnggLyAtMlxyXG4gICAgdGhpcy5vcnRob2dyYXBoaWNDYW1lcmEucmlnaHQgPSBvcnRob2dyYXBoaWNTaXplLnggLyAyXHJcbiAgICB0aGlzLm9ydGhvZ3JhcGhpY0NhbWVyYS50b3AgPSBvcnRob2dyYXBoaWNTaXplLnkgLyAyXHJcbiAgICB0aGlzLm9ydGhvZ3JhcGhpY0NhbWVyYS5ib3R0b20gPSBvcnRob2dyYXBoaWNTaXplLnkgLyAtMlxyXG4gICAgdGhpcy5vcnRob2dyYXBoaWNDYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UGVyc3BlY3RpdmVDYW1lcmFPbigpIHtcclxuICAgIGlmICh0aGlzLl9yZW5kZXJpbmdDYW1lcmEgPT09IHRoaXMucGVyc3BlY3RpdmVDYW1lcmEpIHJldHVyblxyXG4gICAgdGhpcy5yZW5kZXJpbmdDYW1lcmEgPSB0aGlzLnBlcnNwZWN0aXZlQ2FtZXJhXHJcbiAgICB0aGlzLnNldHVwUGVyc3BlY3RpdmVDYW1lcmEoKVxyXG4gICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcihVcGRhdGVGbGFncy5SRU5ERVJfUkVTRVQpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0T3J0aG9DYW1lcmFPbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZW5kZXJpbmdDYW1lcmEgPT09IHRoaXMub3J0aG9ncmFwaGljQ2FtZXJhKSByZXR1cm5cclxuICAgIHRoaXMucmVuZGVyaW5nQ2FtZXJhID0gdGhpcy5vcnRob2dyYXBoaWNDYW1lcmFcclxuICAgIHRoaXMuc2V0dXBPcnRob0NhbWVyYSgpXHJcbiAgICB0aGlzLnZpZXdlci5yZXF1ZXN0UmVuZGVyKFVwZGF0ZUZsYWdzLlJFTkRFUl9SRVNFVClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVDYW1lcmFzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3JlbmRlcmluZ0NhbWVyYSA9PT0gdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYSkgdGhpcy5zZXRPcnRob0NhbWVyYU9uKClcclxuICAgIGVsc2UgdGhpcy5zZXRQZXJzcGVjdGl2ZUNhbWVyYU9uKClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXR1cE9ydGhvQ2FtZXJhKCkge1xyXG4gICAgdGhpcy5jb250cm9scy50YXJnZXRDYW1lcmEgPSB0aGlzLm9ydGhvZ3JhcGhpY0NhbWVyYVxyXG4gICAgdGhpcy5lbmFibGVSb3RhdGlvbnMoKVxyXG4gICAgdGhpcy51cGRhdGVDYW1lcmFQbGFuZXModGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5zY2VuZUJveClcclxuICAgIHRoaXMuZW1pdChDYW1lcmFFdmVudC5Qcm9qZWN0aW9uQ2hhbmdlZCwgQ2FtZXJhUHJvamVjdGlvbi5PUlRIT0dSQVBISUMpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0dXBQZXJzcGVjdGl2ZUNhbWVyYSgpIHtcclxuICAgIHRoaXMuY29udHJvbHMudGFyZ2V0Q2FtZXJhID0gdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYVxyXG4gICAgdGhpcy5lbmFibGVSb3RhdGlvbnMoKVxyXG4gICAgdGhpcy51cGRhdGVDYW1lcmFQbGFuZXModGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5zY2VuZUJveClcclxuICAgIHRoaXMuZW1pdChDYW1lcmFFdmVudC5Qcm9qZWN0aW9uQ2hhbmdlZCwgQ2FtZXJhUHJvamVjdGlvbi5QRVJTUEVDVElWRSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNhYmxlUm90YXRpb25zKCkge1xyXG4gICAgdGhpcy5vcHRpb25zID0geyBlbmFibGVPcmJpdDogZmFsc2UsIGVuYWJsZUxvb2s6IGZhbHNlIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbmFibGVSb3RhdGlvbnMoKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7IGVuYWJsZU9yYml0OiB0cnVlLCBlbmFibGVMb29rOiB0cnVlIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDYW1lcmFQbGFuZXModGFyZ2V0Vm9sdW1lPzogQm94Mywgb2Zmc2V0U2NhbGU6IG51bWJlciA9IDEpIHtcclxuICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKVxyXG4gICAgaWYgKCFyZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEpIHJldHVyblxyXG5cclxuICAgIGlmICghdGFyZ2V0Vm9sdW1lKSB0YXJnZXRWb2x1bWUgPSB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnNjZW5lQm94XHJcbiAgICBsZXQgbmVhclBsYW5lID0gdGhpcy5jb21wdXRlTmVhckNhbWVyYVBsYW5lRW1waXJpYyh0YXJnZXRWb2x1bWUsIG9mZnNldFNjYWxlKVxyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMubmVhclBsYW5lQ2FsY3VsYXRpb24gPT09IE5lYXJQbGFuZUNhbGN1bGF0aW9uLkFDQ1VSQVRFKVxyXG4gICAgICBuZWFyUGxhbmUgPSB0aGlzLmNvbXB1dGVOZWFyQ2FtZXJhUGxhbmVBY2N1cmF0ZShcclxuICAgICAgICB0YXJnZXRWb2x1bWUsXHJcbiAgICAgICAgb2Zmc2V0U2NhbGUsXHJcbiAgICAgICAgbmVhclBsYW5lXHJcbiAgICAgIClcclxuICAgIGlmIChuZWFyUGxhbmUpIHtcclxuICAgICAgcmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhLm5lYXIgPSBuZWFyUGxhbmVcclxuICAgICAgcmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKVxyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVGYXJDYW1lcmFQbGFuZSgpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY29tcHV0ZU5lYXJDYW1lcmFQbGFuZUVtcGlyaWMoXHJcbiAgICB0YXJnZXRWb2x1bWU/OiBCb3gzLFxyXG4gICAgb2Zmc2V0U2NhbGU6IG51bWJlciA9IDFcclxuICApOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0YXJnZXRWb2x1bWUpIHJldHVyblxyXG5cclxuICAgIGlmICh0YXJnZXRWb2x1bWUuaXNFbXB0eSgpKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKCdDYW5ub3Qgc2V0IGNhbWVyYSBwbGFuZXMgZm9yIGVtcHR5IHZvbHVtZScpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNpemUgPSB0YXJnZXRWb2x1bWUuZ2V0U2l6ZShuZXcgVmVjdG9yMygpKVxyXG4gICAgY29uc3QgbWF4U2l6ZSA9IE1hdGgubWF4KHNpemUueCwgc2l6ZS55LCBzaXplLnopXHJcbiAgICBjb25zdCBjYW1Gb3YgPVxyXG4gICAgICB0aGlzLl9yZW5kZXJpbmdDYW1lcmEgPT09IHRoaXMucGVyc3BlY3RpdmVDYW1lcmEgPyB0aGlzLmZpZWxkT2ZWaWV3IDogNTVcclxuICAgIGNvbnN0IGNhbUFzcGVjdCA9XHJcbiAgICAgIHRoaXMuX3JlbmRlcmluZ0NhbWVyYSA9PT0gdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYSA/IHRoaXMuYXNwZWN0IDogMS4yXHJcbiAgICBjb25zdCBmaXRIZWlnaHREaXN0YW5jZSA9IG1heFNpemUgLyAoMiAqIE1hdGguYXRhbigoTWF0aC5QSSAqIGNhbUZvdikgLyAzNjApKVxyXG4gICAgY29uc3QgZml0V2lkdGhEaXN0YW5jZSA9IGZpdEhlaWdodERpc3RhbmNlIC8gY2FtQXNwZWN0XHJcbiAgICBjb25zdCBkaXN0YW5jZSA9IG9mZnNldFNjYWxlICogTWF0aC5tYXgoZml0SGVpZ2h0RGlzdGFuY2UsIGZpdFdpZHRoRGlzdGFuY2UpXHJcblxyXG4gICAgcmV0dXJuIHRoaXMucGVyc3BlY3RpdmVDYW1lcmEgPyBkaXN0YW5jZSAvIDEwMCA6IDAuMDAxXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY29tcHV0ZU5lYXJDYW1lcmFQbGFuZUFjY3VyYXRlKFxyXG4gICAgdGFyZ2V0Vm9sdW1lPzogQm94MyxcclxuICAgIG9mZnNldFNjYWxlOiBudW1iZXIgPSAxLFxyXG4gICAgZmFsbGJhY2s/OiBudW1iZXJcclxuICApOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgbWluRGlzdCA9IHRoaXMuZ2V0Q2xvc2VzdEdlb21ldHJ5RGlzdGFuY2UoZmFsbGJhY2spXHJcbiAgICB0aGlzLl9mbHlDb250cm9scy5taW5EaXN0ID0gbWluRGlzdFxyXG4gICAgdGhpcy5fb3JiaXRDb250cm9scy5taW5EaXN0ID0gbWluRGlzdFxyXG5cclxuICAgIGlmIChtaW5EaXN0ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZU5lYXJDYW1lcmFQbGFuZUVtcGlyaWModGFyZ2V0Vm9sdW1lLCBvZmZzZXRTY2FsZSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjYW1Gb3YgPVxyXG4gICAgICB0aGlzLl9yZW5kZXJpbmdDYW1lcmEgPT09IHRoaXMucGVyc3BlY3RpdmVDYW1lcmEgPyB0aGlzLmZpZWxkT2ZWaWV3IDogNTVcclxuICAgIGNvbnN0IGNhbUFzcGVjdCA9XHJcbiAgICAgIHRoaXMuX3JlbmRlcmluZ0NhbWVyYSA9PT0gdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYSA/IHRoaXMuYXNwZWN0IDogMS4yXHJcbiAgICBjb25zdCBuZWFyUGxhbmUgPVxyXG4gICAgICBNYXRoLm1heChtaW5EaXN0LCAwKSAvXHJcbiAgICAgIE1hdGguc3FydChcclxuICAgICAgICAxICtcclxuICAgICAgICAgIE1hdGgucG93KE1hdGgudGFuKCgoY2FtRm92IC8gMTgwKSAqIE1hdGguUEkpIC8gMiksIDIpICpcclxuICAgICAgICAgICAgKE1hdGgucG93KGNhbUFzcGVjdCwgMikgKyAxKVxyXG4gICAgICApXHJcbiAgICAvLyBjb25zb2xlLmxvZyhtaW5EaXN0LCBuZWFyUGxhbmUpXHJcbiAgICByZXR1cm4gbmVhclBsYW5lXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlRmFyQ2FtZXJhUGxhbmUoKSB7XHJcbiAgICBjb25zdCByZW5kZXJlciA9IHRoaXMudmlld2VyLmdldFJlbmRlcmVyKClcclxuICAgIGlmICghcmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhKSByZXR1cm5cclxuXHJcbiAgICBjb25zdCB2ID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgY29uc3QgYm94ID0gcmVuZGVyZXIuc2NlbmVCb3hcclxuICAgIGNvbnN0IGNhbVBvcyA9IG5ldyBWZWN0b3IzKCkuY29weShyZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEucG9zaXRpb24pXHJcbiAgICBsZXQgZCA9IDBcclxuICAgIHYuc2V0KGJveC5taW4ueCwgYm94Lm1pbi55LCBib3gubWluLnopIC8vIDAwMFxyXG4gICAgZCA9IE1hdGgubWF4KGNhbVBvcy5kaXN0YW5jZVRvKHYpLCBkKVxyXG4gICAgdi5zZXQoYm94Lm1pbi54LCBib3gubWluLnksIGJveC5tYXgueikgLy8gMDAxXHJcbiAgICBkID0gTWF0aC5tYXgoY2FtUG9zLmRpc3RhbmNlVG8odiksIGQpXHJcbiAgICB2LnNldChib3gubWluLngsIGJveC5tYXgueSwgYm94Lm1pbi56KSAvLyAwMTBcclxuICAgIGQgPSBNYXRoLm1heChjYW1Qb3MuZGlzdGFuY2VUbyh2KSwgZClcclxuICAgIHYuc2V0KGJveC5taW4ueCwgYm94Lm1heC55LCBib3gubWF4LnopIC8vIDAxMVxyXG4gICAgZCA9IE1hdGgubWF4KGNhbVBvcy5kaXN0YW5jZVRvKHYpLCBkKVxyXG4gICAgdi5zZXQoYm94Lm1heC54LCBib3gubWluLnksIGJveC5taW4ueikgLy8gMTAwXHJcbiAgICBkID0gTWF0aC5tYXgoY2FtUG9zLmRpc3RhbmNlVG8odiksIGQpXHJcbiAgICB2LnNldChib3gubWF4LngsIGJveC5taW4ueSwgYm94Lm1heC56KSAvLyAxMDFcclxuICAgIGQgPSBNYXRoLm1heChjYW1Qb3MuZGlzdGFuY2VUbyh2KSwgZClcclxuICAgIHYuc2V0KGJveC5tYXgueCwgYm94Lm1heC55LCBib3gubWluLnopIC8vIDExMFxyXG4gICAgZCA9IE1hdGgubWF4KGNhbVBvcy5kaXN0YW5jZVRvKHYpLCBkKVxyXG4gICAgdi5zZXQoYm94Lm1heC54LCBib3gubWF4LnksIGJveC5tYXgueikgLy8gMTExXHJcbiAgICBkID0gTWF0aC5tYXgoY2FtUG9zLmRpc3RhbmNlVG8odiksIGQpXHJcbiAgICByZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEuZmFyID0gZCAqIDJcclxuICAgIHJlbmRlcmVyLnJlbmRlcmluZ0NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRDbG9zZXN0R2VvbWV0cnlEaXN0YW5jZShmYWxsYmFjaz86IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBjYW1lcmFQb3NpdGlvbiA9IHRoaXMuX2FjdGl2ZUNvbnRyb2xzLmdldEN1cnJlbnRQb3NpdGlvbigpXHJcbiAgICBjb25zdCBjYW1lcmFUYXJnZXQgPSB0aGlzLl9hY3RpdmVDb250cm9scy5nZXRDdXJyZW50VGFyZ2V0KClcclxuICAgIGNvbnN0IGNhbWVyYURpciA9IG5ldyBWZWN0b3IzKCkuc3ViVmVjdG9ycyhjYW1lcmFUYXJnZXQsIGNhbWVyYVBvc2l0aW9uKS5ub3JtYWxpemUoKVxyXG5cclxuICAgIGNvbnN0IGJhdGNoZXMgPSB0aGlzLnZpZXdlclxyXG4gICAgICAuZ2V0UmVuZGVyZXIoKVxyXG4gICAgICAuYmF0Y2hlci5nZXRCYXRjaGVzKHVuZGVmaW5lZCwgW0dlb21ldHJ5VHlwZS5NRVNILCBHZW9tZXRyeVR5cGUuVEVYVF0pXHJcbiAgICBsZXQgbWluRGlzdCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxyXG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYXRjaGVzLmxlbmd0aDsgYisrKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhdGNoZXNbYl0ubWVzaC5UQVMuY2xvc2VzdFBvaW50VG9Qb2ludEhhbGZwbGFuZShcclxuICAgICAgICBjYW1lcmFQb3NpdGlvbixcclxuICAgICAgICBjYW1lcmFEaXIsXHJcbiAgICAgICAgZmFsbGJhY2tcclxuICAgICAgKVxyXG4gICAgICBpZiAoIXJlc3VsdCkgY29udGludWVcclxuICAgICAgbWluRGlzdCA9IE1hdGgubWluKG1pbkRpc3QsIHJlc3VsdC5kaXN0YW5jZSlcclxuICAgIH1cclxuICAgIHJldHVybiBtaW5EaXN0XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgem9vbShvYmplY3RJZHM/OiBzdHJpbmdbXSwgZml0PzogbnVtYmVyLCB0cmFuc2l0aW9uPzogYm9vbGVhbikge1xyXG4gICAgaWYgKCFvYmplY3RJZHMpIHtcclxuICAgICAgdGhpcy56b29tRXh0ZW50cyhmaXQsIHRyYW5zaXRpb24pXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy56b29tVG9Cb3godGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5ib3hGcm9tT2JqZWN0cyhvYmplY3RJZHMpLCBmaXQsIHRyYW5zaXRpb24pXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgem9vbUV4dGVudHMoZml0ID0gMS4yLCB0cmFuc2l0aW9uID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkuY2xpcHBpbmdWb2x1bWUuaXNFbXB0eSgpKSB7XHJcbiAgICAgIGNvbnN0IGJveCA9IG5ldyBCb3gzKG5ldyBWZWN0b3IzKC0xLCAtMSwgLTEpLCBuZXcgVmVjdG9yMygxLCAxLCAxKSlcclxuICAgICAgdGhpcy56b29tVG9Cb3goYm94LCBmaXQsIHRyYW5zaXRpb24pXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJveCA9IG5ldyBCb3gzKCkuZnJvbU9CQih0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLmNsaXBwaW5nVm9sdW1lKVxyXG4gICAgLyoqIFRoaXMgaXMgZm9yIHNwZWNpYWwgY2FzZXMgbGlrZSB3aGVuIHRoZSBzdHJlYW0gd2lsbCBvbmx5IGhhdmUgb25lIHBvaW50XHJcbiAgICAgKiAgd2hpY2ggdGhyZWUgd2lsbCBub3QgY29uc2lkZXIgaXQncyBzaXplIHdoZW4gY29tcHV0aW5nIHRoZSBib3VuZGluZyBib3hcclxuICAgICAqICByZXN1bHRpbmcgaW4gYSB6ZXJvIHNpemUgYm91bmRpbmcgYm94LiBUaGF0J3Mgd2h5IHdlIG1ha2Ugc3VyZSB0aGUgYm91bmRpbmdcclxuICAgICAqICBib3ggaXMgbmV2ZXIgemVybyBpbiBzaXplXHJcbiAgICAgKi9cclxuICAgIGlmIChib3gubWluLmVxdWFscyhib3gubWF4KSkge1xyXG4gICAgICBib3guZXhwYW5kQnlWZWN0b3IobmV3IFZlY3RvcjMoMSwgMSwgMSkpXHJcbiAgICB9XHJcbiAgICB0aGlzLnpvb21Ub0JveChib3gsIGZpdCwgdHJhbnNpdGlvbilcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB6b29tVG9Cb3goYm94OiBCb3gzLCBmaXQgPSAxLjIsIHRyYW5zaXRpb24gPSB0cnVlKSB7XHJcbiAgICBpZiAoYm94Lm1heC54ID09PSBJbmZpbml0eSB8fCBib3gubWF4LnggPT09IC1JbmZpbml0eSkge1xyXG4gICAgICBib3ggPSBuZXcgQm94MyhuZXcgVmVjdG9yMygtMSwgLTEsIC0xKSwgbmV3IFZlY3RvcjMoMSwgMSwgMSkpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0U3BoZXJlID0gbmV3IFNwaGVyZSgpXHJcbiAgICBib3guZ2V0Qm91bmRpbmdTcGhlcmUodGFyZ2V0U3BoZXJlKVxyXG4gICAgdGFyZ2V0U3BoZXJlLnJhZGl1cyA9IHRoaXMuZml0VG9SYWRpdXModGFyZ2V0U3BoZXJlLnJhZGl1cykgKiBmaXRcclxuICAgIHRoaXMuX2FjdGl2ZUNvbnRyb2xzLmZpdFRvU3BoZXJlKHRhcmdldFNwaGVyZSlcclxuXHJcbiAgICBpZiAoIXRyYW5zaXRpb24pIHtcclxuICAgICAgdGhpcy5fYWN0aXZlQ29udHJvbHMuanVtcFRvR29hbCgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVDYW1lcmFQbGFuZXMoYm94LCBmaXQpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZml0VG9SYWRpdXMocmFkaXVzOiBudW1iZXIpIHtcclxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NDg0OTk3NVxyXG4gICAgY29uc3QgdkZPViA9IHRoaXMucGVyc3BlY3RpdmVDYW1lcmEuZ2V0RWZmZWN0aXZlRk9WKCkgKiBNYXRoVXRpbHMuREVHMlJBRFxyXG4gICAgY29uc3QgaEZPViA9IE1hdGguYXRhbihNYXRoLnRhbih2Rk9WICogMC41KSAqIHRoaXMucGVyc3BlY3RpdmVDYW1lcmEuYXNwZWN0KSAqIDJcclxuICAgIGNvbnN0IGZvdiA9IDEgPCB0aGlzLnBlcnNwZWN0aXZlQ2FtZXJhLmFzcGVjdCA/IHZGT1YgOiBoRk9WXHJcbiAgICByZXR1cm4gcmFkaXVzIC8gTWF0aC5zaW4oZm92ICogMC41KVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGlzU3BlY2tsZVZpZXcoXHJcbiAgICB2aWV3OiBDYW5vbmljYWxWaWV3IHwgU3BlY2tsZVZpZXcgfCBJbmxpbmVWaWV3IHwgUG9sYXJWaWV3XHJcbiAgKTogdmlldyBpcyBTcGVja2xlVmlldyB7XHJcbiAgICByZXR1cm4gKHZpZXcgYXMgU3BlY2tsZVZpZXcpLm5hbWUgIT09IHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGlzQ2Fub25pY2FsVmlldyhcclxuICAgIHZpZXc6IENhbm9uaWNhbFZpZXcgfCBTcGVja2xlVmlldyB8IElubGluZVZpZXcgfCBQb2xhclZpZXdcclxuICApOiB2aWV3IGlzIENhbm9uaWNhbFZpZXcge1xyXG4gICAgcmV0dXJuIHR5cGVvZiAodmlldyBhcyBDYW5vbmljYWxWaWV3KSA9PT0gJ3N0cmluZydcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc0lubGluZVZpZXcoXHJcbiAgICB2aWV3OiBDYW5vbmljYWxWaWV3IHwgU3BlY2tsZVZpZXcgfCBJbmxpbmVWaWV3IHwgUG9sYXJWaWV3XHJcbiAgKTogdmlldyBpcyBJbmxpbmVWaWV3IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh2aWV3IGFzIElubGluZVZpZXcpLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgKHZpZXcgYXMgSW5saW5lVmlldykudGFyZ2V0ICE9PSB1bmRlZmluZWRcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc1BvbGFyVmlldyhcclxuICAgIHZpZXc6IENhbm9uaWNhbFZpZXcgfCBTcGVja2xlVmlldyB8IElubGluZVZpZXcgfCBQb2xhclZpZXdcclxuICApOiB2aWV3IGlzIFBvbGFyVmlldyB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAodmlldyBhcyBQb2xhclZpZXcpLmF6aW11dGggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAodmlldyBhcyBQb2xhclZpZXcpLnBvbGFyICE9PSB1bmRlZmluZWRcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc0JveDMoXHJcbiAgICB2aWV3OiBDYW5vbmljYWxWaWV3IHwgU3BlY2tsZVZpZXcgfCBJbmxpbmVWaWV3IHwgUG9sYXJWaWV3IHwgQm94M1xyXG4gICk6IHZpZXcgaXMgQm94MyB7XHJcbiAgICByZXR1cm4gdmlldyBpbnN0YW5jZW9mIEJveDNcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRWaWV3KFxyXG4gICAgdmlldzogQ2Fub25pY2FsVmlldyB8IFNwZWNrbGVWaWV3IHwgSW5saW5lVmlldyB8IFBvbGFyVmlldyxcclxuICAgIHRyYW5zaXRpb24gPSB0cnVlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1NwZWNrbGVWaWV3KHZpZXcpKSB7XHJcbiAgICAgIHRoaXMuc2V0Vmlld1NwZWNrbGUodmlldywgdHJhbnNpdGlvbilcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzQ2Fub25pY2FsVmlldyh2aWV3KSkge1xyXG4gICAgICB0aGlzLnNldFZpZXdDYW5vbmljYWwodmlldywgdHJhbnNpdGlvbilcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzSW5saW5lVmlldyh2aWV3KSkge1xyXG4gICAgICB0aGlzLnNldFZpZXdJbmxpbmUodmlldywgdHJhbnNpdGlvbilcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzUG9sYXJWaWV3KHZpZXcpKSB7XHJcbiAgICAgIHRoaXMuc2V0Vmlld1BvbGFyKHZpZXcsIHRyYW5zaXRpb24pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0Vmlld1NwZWNrbGUodmlldzogU3BlY2tsZVZpZXcsIHRyYW5zaXRpb24gPSB0cnVlKSB7XHJcbiAgICB0aGlzLl9hY3RpdmVDb250cm9scy5mcm9tUG9zaXRpb25BbmRUYXJnZXQoXHJcbiAgICAgIG5ldyBWZWN0b3IzKHZpZXcub3JpZ2luLngsIHZpZXcub3JpZ2luLnksIHZpZXcub3JpZ2luLnopLFxyXG4gICAgICBuZXcgVmVjdG9yMyh2aWV3LnRhcmdldC54LCB2aWV3LnRhcmdldC55LCB2aWV3LnRhcmdldC56KVxyXG4gICAgKVxyXG4gICAgaWYgKCF0cmFuc2l0aW9uKSB0aGlzLl9hY3RpdmVDb250cm9scy5qdW1wVG9Hb2FsKClcclxuXHJcbiAgICB0aGlzLmVuYWJsZVJvdGF0aW9ucygpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSb3RhdGVzIGNhbWVyYSB0byBzb21lIGNhbm9uaWNhbCB2aWV3c1xyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gIHNpZGUgICAgICAgQ2FuIGJlIGFueSBvZiBmcm9udCwgYmFjaywgdXAgKHRvcCksIGRvd24gKGJvdHRvbSksIHJpZ2h0LCBsZWZ0LlxyXG4gICAqIEBwYXJhbSAge051bWJlcn0gIGZpdCAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAqIEBwYXJhbSAge0Jvb2xlYW59IHRyYW5zaXRpb24gW2Rlc2NyaXB0aW9uXVxyXG4gICAqIEByZXR1cm4ge1t0eXBlXX0gICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZXRWaWV3Q2Fub25pY2FsKHNpZGU6IHN0cmluZywgdHJhbnNpdGlvbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IHRhcmdldFNwaGVyZSA9IG5ldyBTcGhlcmUoKVxyXG4gICAgdGhpcy52aWV3ZXIuV29ybGQud29ybGRCb3guZ2V0Qm91bmRpbmdTcGhlcmUodGFyZ2V0U3BoZXJlKVxyXG4gICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLmZpdFRvUmFkaXVzKHRhcmdldFNwaGVyZS5yYWRpdXMpXHJcblxyXG4gICAgY29uc3QgY2Fub25pY2FsUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpLmNvcHkoXHJcbiAgICAgIHRoaXMudmlld2VyLldvcmxkLndvcmxkQm94LmdldENlbnRlcihuZXcgVmVjdG9yMygpKVxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IGNhbm9uaWNhbFRhcmdldCA9IG5ldyBWZWN0b3IzKCkuY29weShjYW5vbmljYWxQb3NpdGlvbilcclxuICAgIGNvbnN0IGNvbnRyb2xlckJhc2lzID0gbmV3IFF1YXRlcm5pb24oKS5zZXRGcm9tVW5pdFZlY3RvcnMoXHJcbiAgICAgIG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG4gICAgICB0aGlzLl9hY3RpdmVDb250cm9scy51cFxyXG4gICAgKVxyXG4gICAgc3dpdGNoIChzaWRlKSB7XHJcbiAgICAgIGNhc2UgJ2Zyb250JzpcclxuICAgICAgICB0aGlzLl9hY3RpdmVDb250cm9scy5mcm9tUG9zaXRpb25BbmRUYXJnZXQoXHJcbiAgICAgICAgICBjYW5vbmljYWxQb3NpdGlvbi5hZGQoXHJcbiAgICAgICAgICAgIG5ldyBWZWN0b3IzKDAsIDAsIDEpXHJcbiAgICAgICAgICAgICAgLmFwcGx5UXVhdGVybmlvbihjb250cm9sZXJCYXNpcylcclxuICAgICAgICAgICAgICAubXVsdGlwbHlTY2FsYXIoZGlzdGFuY2UpXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY2Fub25pY2FsVGFyZ2V0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJpbmdDYW1lcmEgPT09IHRoaXMub3J0aG9ncmFwaGljQ2FtZXJhKSB0aGlzLmRpc2FibGVSb3RhdGlvbnMoKVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlICdiYWNrJzpcclxuICAgICAgICB0aGlzLl9hY3RpdmVDb250cm9scy5mcm9tUG9zaXRpb25BbmRUYXJnZXQoXHJcbiAgICAgICAgICBjYW5vbmljYWxQb3NpdGlvbi5hZGQoXHJcbiAgICAgICAgICAgIG5ldyBWZWN0b3IzKDAsIDAsIC0xKVxyXG4gICAgICAgICAgICAgIC5hcHBseVF1YXRlcm5pb24oY29udHJvbGVyQmFzaXMpXHJcbiAgICAgICAgICAgICAgLm11bHRpcGx5U2NhbGFyKGRpc3RhbmNlKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNhbm9uaWNhbFRhcmdldFxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAodGhpcy5fcmVuZGVyaW5nQ2FtZXJhID09PSB0aGlzLm9ydGhvZ3JhcGhpY0NhbWVyYSkgdGhpcy5kaXNhYmxlUm90YXRpb25zKClcclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgY2FzZSAndXAnOlxyXG4gICAgICBjYXNlICd0b3AnOlxyXG4gICAgICAgIHRoaXMuX2FjdGl2ZUNvbnRyb2xzLmZyb21Qb3NpdGlvbkFuZFRhcmdldChcclxuICAgICAgICAgIGNhbm9uaWNhbFBvc2l0aW9uLmFkZChcclxuICAgICAgICAgICAgbmV3IFZlY3RvcjMoMCwgMSwgMClcclxuICAgICAgICAgICAgICAuYXBwbHlRdWF0ZXJuaW9uKGNvbnRyb2xlckJhc2lzKVxyXG4gICAgICAgICAgICAgIC5tdWx0aXBseVNjYWxhcihkaXN0YW5jZSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjYW5vbmljYWxUYXJnZXRcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmluZ0NhbWVyYSA9PT0gdGhpcy5vcnRob2dyYXBoaWNDYW1lcmEpIHRoaXMuZGlzYWJsZVJvdGF0aW9ucygpXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ2Rvd24nOlxyXG4gICAgICBjYXNlICdib3R0b20nOlxyXG4gICAgICAgIHRoaXMuX2FjdGl2ZUNvbnRyb2xzLmZyb21Qb3NpdGlvbkFuZFRhcmdldChcclxuICAgICAgICAgIGNhbm9uaWNhbFBvc2l0aW9uLmFkZChcclxuICAgICAgICAgICAgbmV3IFZlY3RvcjMoMCwgLTEsIDApXHJcbiAgICAgICAgICAgICAgLmFwcGx5UXVhdGVybmlvbihjb250cm9sZXJCYXNpcylcclxuICAgICAgICAgICAgICAubXVsdGlwbHlTY2FsYXIoZGlzdGFuY2UpXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY2Fub25pY2FsVGFyZ2V0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJpbmdDYW1lcmEgPT09IHRoaXMub3J0aG9ncmFwaGljQ2FtZXJhKSB0aGlzLmRpc2FibGVSb3RhdGlvbnMoKVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlQ29udHJvbHMuZnJvbVBvc2l0aW9uQW5kVGFyZ2V0KFxyXG4gICAgICAgICAgY2Fub25pY2FsUG9zaXRpb24uYWRkKFxyXG4gICAgICAgICAgICBuZXcgVmVjdG9yMygxLCAwLCAwKVxyXG4gICAgICAgICAgICAgIC5hcHBseVF1YXRlcm5pb24oY29udHJvbGVyQmFzaXMpXHJcbiAgICAgICAgICAgICAgLm11bHRpcGx5U2NhbGFyKGRpc3RhbmNlKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNhbm9uaWNhbFRhcmdldFxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAodGhpcy5fcmVuZGVyaW5nQ2FtZXJhID09PSB0aGlzLm9ydGhvZ3JhcGhpY0NhbWVyYSkgdGhpcy5kaXNhYmxlUm90YXRpb25zKClcclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgY2FzZSAnbGVmdCc6XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlQ29udHJvbHMuZnJvbVBvc2l0aW9uQW5kVGFyZ2V0KFxyXG4gICAgICAgICAgY2Fub25pY2FsUG9zaXRpb24uYWRkKFxyXG4gICAgICAgICAgICBuZXcgVmVjdG9yMygtMSwgMCwgMClcclxuICAgICAgICAgICAgICAuYXBwbHlRdWF0ZXJuaW9uKGNvbnRyb2xlckJhc2lzKVxyXG4gICAgICAgICAgICAgIC5tdWx0aXBseVNjYWxhcihkaXN0YW5jZSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjYW5vbmljYWxUYXJnZXRcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmluZ0NhbWVyYSA9PT0gdGhpcy5vcnRob2dyYXBoaWNDYW1lcmEpIHRoaXMuZGlzYWJsZVJvdGF0aW9ucygpXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJzNkJzpcclxuICAgICAgICB0aGlzLl9hY3RpdmVDb250cm9scy5mcm9tUG9zaXRpb25BbmRUYXJnZXQoXHJcbiAgICAgICAgICBuZXcgVmVjdG9yMygpLmNvcHkodGhpcy52aWV3ZXIuV29ybGQud29ybGRCb3gubWF4KSxcclxuICAgICAgICAgIGNhbm9uaWNhbFRhcmdldFxyXG4gICAgICAgIClcclxuICAgICAgICB0aGlzLnpvb21FeHRlbnRzKClcclxuICAgICAgICBicmVha1xyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVSb3RhdGlvbnMoKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdHJhbnNpdGlvbikgdGhpcy5fYWN0aXZlQ29udHJvbHMuanVtcFRvR29hbCgpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0Vmlld0lubGluZSh2aWV3OiBJbmxpbmVWaWV3LCB0cmFuc2l0aW9uID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5fYWN0aXZlQ29udHJvbHMuZnJvbVBvc2l0aW9uQW5kVGFyZ2V0KHZpZXcucG9zaXRpb24sIHZpZXcudGFyZ2V0KVxyXG4gICAgaWYgKCF0cmFuc2l0aW9uKSB0aGlzLl9hY3RpdmVDb250cm9scy5qdW1wVG9Hb2FsKClcclxuXHJcbiAgICB0aGlzLmVuYWJsZVJvdGF0aW9ucygpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZpZXdQb2xhcih2aWV3OiBQb2xhclZpZXcsIHRyYW5zaXRpb24gPSB0cnVlKSB7XHJcbiAgICA7KHRoaXMuX2FjdGl2ZUNvbnRyb2xzIGFzIFNtb290aE9yYml0Q29udHJvbHMpLmFkanVzdE9yYml0KFxyXG4gICAgICB2aWV3LmF6aW11dGgsXHJcbiAgICAgIHZpZXcucG9sYXIsXHJcbiAgICAgIHZpZXcucmFkaXVzID8gdmlldy5yYWRpdXMgOiAwXHJcbiAgICApXHJcbiAgICBpZiAoIXRyYW5zaXRpb24pIHRoaXMuX2FjdGl2ZUNvbnRyb2xzLmp1bXBUb0dvYWwoKVxyXG4gICAgdGhpcy5lbmFibGVSb3RhdGlvbnMoKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgU3RhdHNJbXBvcnQgZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xpYnMvc3RhdHMubW9kdWxlLmpzJ1xyXG5cclxuZXhwb3J0IHR5cGUgU3RhdHMgPSBTdGF0c0ltcG9ydC5kZWZhdWx0XHJcblxyXG4vLyBXb3JrYXJvdW5kIGZvciBicm9rZW4gdGhyZWUuanMgdHlwZXNcclxuY29uc3QgU3RhdHMgPSBTdGF0c0ltcG9ydCBhcyB1bmtub3duIGFzICgpID0+IFN0YXRzXHJcbmV4cG9ydCBkZWZhdWx0IFN0YXRzXHJcbiIsImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9FdmVudEVtaXR0ZXIuanMnXHJcblxyXG5pbXBvcnQgeyBDbG9jaywgVGV4dHVyZSB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBBc3NldHMgfSBmcm9tICcuL0Fzc2V0cy5qcydcclxuaW1wb3J0IHsgdHlwZSBPcHRpb25hbCB9IGZyb20gJy4uL2hlbHBlcnMvdHlwZUhlbHBlci5qcydcclxuaW1wb3J0IHtcclxuICBEZWZhdWx0Vmlld2VyUGFyYW1zLFxyXG4gIHR5cGUgSVZpZXdlcixcclxuICB0eXBlIFNwZWNrbGVWaWV3LFxyXG4gIHR5cGUgU3VuTGlnaHRDb25maWd1cmF0aW9uLFxyXG4gIFVwZGF0ZUZsYWdzLFxyXG4gIFZpZXdlckV2ZW50LFxyXG4gIHR5cGUgVmlld2VyUGFyYW1zLFxyXG4gIHR5cGUgVmlld2VyRXZlbnRQYXlsb2FkXHJcbn0gZnJvbSAnLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgV29ybGQgfSBmcm9tICcuL1dvcmxkLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIFRyZWVOb2RlLCBXb3JsZFRyZWUgfSBmcm9tICcuL3RyZWUvV29ybGRUcmVlLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVJlbmRlcmVyIGZyb20gJy4vU3BlY2tsZVJlbmRlcmVyLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIFByb3BlcnR5SW5mbywgUHJvcGVydHlNYW5hZ2VyIH0gZnJvbSAnLi9maWx0ZXJpbmcvUHJvcGVydHlNYW5hZ2VyLmpzJ1xyXG5pbXBvcnQgdHlwZSB7IFF1ZXJ5LCBRdWVyeUFyZ3NSZXN1bHRNYXAgfSBmcm9tICcuL3F1ZXJpZXMvUXVlcnkuanMnXHJcbmltcG9ydCB7IFF1ZXJpZXMgfSBmcm9tICcuL3F1ZXJpZXMvUXVlcmllcy5qcydcclxuaW1wb3J0IHsgdHlwZSBVdGlscyB9IGZyb20gJy4vVXRpbHMuanMnXHJcbmltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJy4vZXh0ZW5zaW9ucy9FeHRlbnNpb24uanMnXHJcbmltcG9ydCBJbnB1dCBmcm9tICcuL2lucHV0L0lucHV0LmpzJ1xyXG5pbXBvcnQgeyBDYW1lcmFDb250cm9sbGVyIH0gZnJvbSAnLi9leHRlbnNpb25zL0NhbWVyYUNvbnRyb2xsZXIuanMnXHJcbmltcG9ydCB7IFNwZWNrbGVUeXBlIH0gZnJvbSAnLi9sb2FkZXJzL0dlb21ldHJ5Q29udmVydGVyLmpzJ1xyXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvTG9hZGVyLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdG9yIH0gZnJvbSAndHlwZS1mZXN0J1xyXG5pbXBvcnQgeyBSZW5kZXJUcmVlIH0gZnJvbSAnLi90cmVlL1JlbmRlclRyZWUuanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi91dGlscy9Mb2dnZXIuanMnXHJcbmltcG9ydCBTdGF0cyBmcm9tICcuL3RocmVlL3N0YXRzLmpzJ1xyXG5pbXBvcnQgeyBUSU1FX01TIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFZpZXdlciBleHRlbmRzIEV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElWaWV3ZXIge1xyXG4gIC8qKiBDb250YWluZXIgYW5kIG9wdGlvbmFsIHN0YXRzIGVsZW1lbnQgKi9cclxuICBwcm90ZWN0ZWQgY29udGFpbmVyOiBIVE1MRWxlbWVudFxyXG4gIHByb3RlY3RlZCBzdGF0czogT3B0aW9uYWw8UmV0dXJuVHlwZTx0eXBlb2YgU3RhdHM+PlxyXG5cclxuICAvKiogVmlld2VyIHBhcmFtcyB1c2VkIGF0IGluaXQgdGltZSAqL1xyXG4gIHByb3RlY3RlZCBzdGFydHVwUGFyYW1zOiBWaWV3ZXJQYXJhbXNcclxuXHJcbiAgLyoqIFZpZXdlciBjb21wb25lbnRzICovXHJcbiAgcHJvdGVjdGVkIHRyZWU6IFdvcmxkVHJlZSA9IG5ldyBXb3JsZFRyZWUoKVxyXG4gIHByb3RlY3RlZCB3b3JsZDogV29ybGQgPSBuZXcgV29ybGQoKVxyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdGhlQXNzZXRzOiBBc3NldHMgPSBuZXcgQXNzZXRzKClcclxuICBwdWJsaWMgc3BlY2tsZVJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXJcclxuICBwcm90ZWN0ZWQgcHJvcGVydHlNYW5hZ2VyOiBQcm9wZXJ0eU1hbmFnZXJcclxuXHJcbiAgLyoqIE1pc2MgbWVtYmVycyAqL1xyXG4gIHByb3RlY3RlZCBjbG9jazogQ2xvY2tcclxuICBwcm90ZWN0ZWQgbG9hZGVyczogeyBbaWQ6IHN0cmluZ106IExvYWRlciB9ID0ge31cclxuXHJcbiAgcHJvdGVjdGVkIGV4dGVuc2lvbnM6IHtcclxuICAgIFtpZDogc3RyaW5nXTogRXh0ZW5zaW9uXHJcbiAgfSA9IHt9XHJcblxyXG4gIC8qKiB2YXJpb3VzIHV0aWxzL2hlbHBlcnMgKi9cclxuICBwcm90ZWN0ZWQgdXRpbHM6IFV0aWxzIHwgdW5kZWZpbmVkXHJcbiAgLyoqIEdldHMgdGhlIFdvcmxkIG9iamVjdC4gQ3VycmVudGx5IGl0J3MgdXNlZCBmb3IgaW5mbyBtb3N0bHkgKi9cclxuICBwdWJsaWMgZ2V0IFdvcmxkKCk6IFdvcmxkIHtcclxuICAgIHJldHVybiB0aGlzLndvcmxkXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IFV0aWxzKCk6IFV0aWxzIHtcclxuICAgIGlmICghdGhpcy51dGlscykge1xyXG4gICAgICB0aGlzLnV0aWxzID0ge1xyXG4gICAgICAgIHNjcmVlblRvTkRDOiB0aGlzLnNwZWNrbGVSZW5kZXJlci5zY3JlZW5Ub05EQy5iaW5kKHRoaXMuc3BlY2tsZVJlbmRlcmVyKSxcclxuICAgICAgICBORENUb1NjcmVlbjogdGhpcy5zcGVja2xlUmVuZGVyZXIuTkRDVG9TY3JlZW4uYmluZCh0aGlzLnNwZWNrbGVSZW5kZXJlcilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudXRpbHNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaW5wdXQoKTogSW5wdXQge1xyXG4gICAgcmV0dXJuIHRoaXMuc3BlY2tsZVJlbmRlcmVyLmlucHV0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHBhcmFtcygpOiBWaWV3ZXJQYXJhbXMge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhcnR1cFBhcmFtc1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb25zdHJ1Y3RvckNoYWluKG9iajogb2JqZWN0KSB7XHJcbiAgICBjb25zdCBjcyA9IFtdXHJcbiAgICBsZXQgcHQgPSBvYmpcclxuICAgIGRvIHtcclxuICAgICAgaWYgKChwdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwdCkpKSBjcy5wdXNoKHB0LmNvbnN0cnVjdG9yLm5hbWUgfHwgbnVsbClcclxuICAgIH0gd2hpbGUgKHB0ICE9PSBudWxsKVxyXG4gICAgcmV0dXJuIGNzXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlRXh0ZW5zaW9uPFQgZXh0ZW5kcyBFeHRlbnNpb24+KHR5cGU6IENvbnN0cnVjdG9yPFQ+KTogVCB7XHJcbiAgICBjb25zdCBleHRlbnNpb25zVG9JbmplY3Q6IEFycmF5PFxyXG4gICAgICBuZXcgKHZpZXdlcjogSVZpZXdlciwgLi4uYXJnczogRXh0ZW5zaW9uW10pID0+IEV4dGVuc2lvblxyXG4gICAgPiA9IHR5cGUucHJvdG90eXBlLmluamVjdFxyXG4gICAgY29uc3QgaW5qZWN0ZWRFeHRlbnNpb25zOiBBcnJheTxFeHRlbnNpb24+ID0gW11cclxuICAgIGV4dGVuc2lvbnNUb0luamVjdC5mb3JFYWNoKFxyXG4gICAgICAodmFsdWU6IG5ldyAodmlld2VyOiBJVmlld2VyLCAuLi5hcmdzOiBFeHRlbnNpb25bXSkgPT4gRXh0ZW5zaW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXh0ZW5zaW9uc1t2YWx1ZS5uYW1lXSkge1xyXG4gICAgICAgICAgaW5qZWN0ZWRFeHRlbnNpb25zLnB1c2godGhpcy5leHRlbnNpb25zW3ZhbHVlLm5hbWVdKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgayBpbiB0aGlzLmV4dGVuc2lvbnMpIHtcclxuICAgICAgICAgIGNvbnN0IHByb3RvdHlwZUNoYWluID0gdGhpcy5nZXRDb25zdHJ1Y3RvckNoYWluKHRoaXMuZXh0ZW5zaW9uc1trXSlcclxuICAgICAgICAgIGlmIChwcm90b3R5cGVDaGFpbi5pbmNsdWRlcyh2YWx1ZS5uYW1lKSkge1xyXG4gICAgICAgICAgICBpbmplY3RlZEV4dGVuc2lvbnMucHVzaCh0aGlzLmV4dGVuc2lvbnNba10pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgZXh0ZW5zaW9uID0gbmV3IHR5cGUodGhpcywgLi4uaW5qZWN0ZWRFeHRlbnNpb25zKVxyXG4gICAgdGhpcy5leHRlbnNpb25zW3R5cGUubmFtZV0gPSBleHRlbnNpb25cclxuICAgIHJldHVybiBleHRlbnNpb25cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRFeHRlbnNpb248VCBleHRlbmRzIEV4dGVuc2lvbj4odHlwZTogQ29uc3RydWN0b3I8VD4pOiBUIHtcclxuICAgIGxldCBleHRlbnNpb25cclxuICAgIGlmICgoZXh0ZW5zaW9uID0gdGhpcy5nZXRFeHRlbnNpb25JbnRlcm5hbCh0eXBlKSkgIT09IG51bGwpIHJldHVybiBleHRlbnNpb25cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgRXh0ZW5zaW9uIG9mIHR5cGUgJHt0eXBlLm5hbWV9LiBJcyBpdCBjcmVhdGVkP2ApXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzRXh0ZW5zaW9uPFQgZXh0ZW5kcyBFeHRlbnNpb24+KHR5cGU6IENvbnN0cnVjdG9yPFQ+KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBleHRlbnNpb24gPSB0aGlzLmdldEV4dGVuc2lvbkludGVybmFsKHR5cGUpXHJcbiAgICByZXR1cm4gZXh0ZW5zaW9uID8gdHJ1ZSA6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV4dGVuc2lvbkludGVybmFsPFQgZXh0ZW5kcyBFeHRlbnNpb24+KHR5cGU6IENvbnN0cnVjdG9yPFQ+KTogVCB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuZXh0ZW5zaW9uc1t0eXBlLm5hbWVdKSByZXR1cm4gdGhpcy5leHRlbnNpb25zW3R5cGUubmFtZV0gYXMgVFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGZvciAoY29uc3QgayBpbiB0aGlzLmV4dGVuc2lvbnMpIHtcclxuICAgICAgICBjb25zdCBwcm90b3R5cGVDaGFpbiA9IHRoaXMuZ2V0Q29uc3RydWN0b3JDaGFpbih0aGlzLmV4dGVuc2lvbnNba10pXHJcbiAgICAgICAgaWYgKHByb3RvdHlwZUNoYWluLmluY2x1ZGVzKHR5cGUubmFtZSkpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbnNba10gYXMgVFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcclxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcbiAgICBwYXJhbXM6IFZpZXdlclBhcmFtcyA9IERlZmF1bHRWaWV3ZXJQYXJhbXNcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICAgIExvZ2dlci51c2VEZWZhdWx0cygpXHJcbiAgICBMb2dnZXIuc2V0TGV2ZWwocGFyYW1zLnZlcmJvc2UgPyBMb2dnZXIuVFJBQ0UgOiBMb2dnZXIuRVJST1IpXHJcblxyXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXIgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbmRlcmVyJylcclxuICAgIGlmIChwYXJhbXMuc2hvd1N0YXRzKSB7XHJcbiAgICAgIHRoaXMuc3RhdHMgPSBTdGF0cygpXHJcbiAgICAgIHRoaXMuY29udGFpbmVyLnByZXBlbmQodGhpcy5zdGF0cy5kb20pXHJcbiAgICAgIHRoaXMuc3RhdHMuZG9tLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJyAvLyBNYWQgQ1NTIHNraWxsc1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkZXJzID0ge31cclxuICAgIHRoaXMuc3RhcnR1cFBhcmFtcyA9IHBhcmFtc1xyXG4gICAgdGhpcy5jbG9jayA9IG5ldyBDbG9jaygpXHJcblxyXG4gICAgdGhpcy5zcGVja2xlUmVuZGVyZXIgPSBuZXcgU3BlY2tsZVJlbmRlcmVyKHRoaXMudHJlZSwgdGhpcylcclxuICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLmNyZWF0ZSh0aGlzLmNvbnRhaW5lcilcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZS5iaW5kKHRoaXMpLCBmYWxzZSlcclxuXHJcbiAgICB0aGlzLnByb3BlcnR5TWFuYWdlciA9IG5ldyBQcm9wZXJ0eU1hbmFnZXIoKVxyXG5cclxuICAgIHRoaXMuZnJhbWUoKVxyXG4gICAgdGhpcy5yZXNpemUoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbnRhaW5lcigpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENhbnZhcygpIHtcclxuICAgIHJldHVybiB0aGlzLnNwZWNrbGVSZW5kZXJlci5yZW5kZXJlci5kb21FbGVtZW50XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zcGVja2xlUmVuZGVyZXJcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNpemUoKSB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoXHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHRcclxuICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KVxyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmV4dGVuc2lvbnMpLmZvckVhY2goKHZhbHVlOiBFeHRlbnNpb24pID0+IHtcclxuICAgICAgdmFsdWUub25SZXNpemUoKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXF1ZXN0UmVuZGVyKGZsYWdzOiBVcGRhdGVGbGFncyA9IFVwZGF0ZUZsYWdzLlJFTkRFUikge1xyXG4gICAgaWYgKGZsYWdzICYgVXBkYXRlRmxhZ3MuUkVOREVSKSB7XHJcbiAgICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLm5lZWRzUmVuZGVyID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKGZsYWdzICYgVXBkYXRlRmxhZ3MuU0hBRE9XUykge1xyXG4gICAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci5zaGFkb3dNYXBOZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIH1cclxuICAgIGlmIChmbGFncyAmIFVwZGF0ZUZsYWdzLkNMSVBQSU5HX1BMQU5FUykge1xyXG4gICAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci51cGRhdGVDbGlwcGluZ1BsYW5lcygpXHJcbiAgICB9XHJcbiAgICBpZiAoZmxhZ3MgJiBVcGRhdGVGbGFncy5SRU5ERVJfUkVTRVQpIHtcclxuICAgICAgdGhpcy5zcGVja2xlUmVuZGVyZXIubmVlZHNSZW5kZXIgPSB0cnVlXHJcbiAgICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLnJlc2V0UGlwZWxpbmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZyYW1lKCkge1xyXG4gICAgdGhpcy51cGRhdGUoKVxyXG4gICAgdGhpcy5yZW5kZXIoKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGRlbHRhID0gdGhpcy5jbG9jay5nZXREZWx0YSgpICogVElNRV9NUy5zZWNvbmRcclxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBPYmplY3QudmFsdWVzKHRoaXMuZXh0ZW5zaW9ucylcclxuICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0OiBFeHRlbnNpb24pID0+IHtcclxuICAgICAgZXh0Lm9uRWFybHlVcGRhdGUoZGVsdGEpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5zcGVja2xlUmVuZGVyZXIudXBkYXRlKGRlbHRhKVxyXG4gICAgZXh0ZW5zaW9ucy5mb3JFYWNoKChleHQ6IEV4dGVuc2lvbikgPT4ge1xyXG4gICAgICBleHQub25MYXRlVXBkYXRlKGRlbHRhKVxyXG4gICAgfSlcclxuICAgIHRoaXMuc3RhdHM/LnVwZGF0ZSgpXHJcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5mcmFtZS5iaW5kKHRoaXMpKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlbmRlcigpIHtcclxuICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLnJlbmRlcigpXHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuZXh0ZW5zaW9ucykuZm9yRWFjaCgoZXh0OiBFeHRlbnNpb24pID0+IHtcclxuICAgICAgZXh0Lm9uUmVuZGVyKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLnN0YXJ0dXBQYXJhbXMuZW52aXJvbm1lbnRTcmMpIHtcclxuICAgICAgQXNzZXRzLmdldEVudmlyb25tZW50KFxyXG4gICAgICAgIHRoaXMuc3RhcnR1cFBhcmFtcy5lbnZpcm9ubWVudFNyYyxcclxuICAgICAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci5yZW5kZXJlclxyXG4gICAgICApXHJcbiAgICAgICAgLnRoZW4oKHZhbHVlOiBUZXh0dXJlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci5pbmRpcmVjdElCTCA9IHZhbHVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKHJlYXNvbikgPT4ge1xyXG4gICAgICAgICAgTG9nZ2VyLmVycm9yKHJlYXNvbilcclxuICAgICAgICAgIExvZ2dlci5lcnJvcignRW52aXJvbm1lbnQgZmFpbGVkIHRvIGxvYWQhJylcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb248VCBleHRlbmRzIFZpZXdlckV2ZW50PihcclxuICAgIGV2ZW50VHlwZTogVCxcclxuICAgIGxpc3RlbmVyOiAoYXJnOiBWaWV3ZXJFdmVudFBheWxvYWRbVF0pID0+IHZvaWRcclxuICApOiB2b2lkIHtcclxuICAgIHN1cGVyLm9uKGV2ZW50VHlwZSwgbGlzdGVuZXIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T2JqZWN0UHJvcGVydGllcyhcclxuICAgIHJlc291cmNlVVJMOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcclxuICAgIGJ5cGFzc0NhY2hlID0gdHJ1ZVxyXG4gICk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5TWFuYWdlci5nZXRQcm9wZXJ0aWVzKHRoaXMudHJlZSwgcmVzb3VyY2VVUkwsIGJ5cGFzc0NhY2hlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGFUcmVlKCk6IHZvaWQge1xyXG4gICAgTG9nZ2VyLmVycm9yKCdEYXRhVHJlZSBoYXMgYmVlbiBkZXByZWNhdGVkISBQbGVhc2UgdXNlIFdvcmxkVHJlZScpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0V29ybGRUcmVlKCk6IFdvcmxkVHJlZSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcXVlcnk8VCBleHRlbmRzIFF1ZXJ5PihxdWVyeTogVCk6IFF1ZXJ5QXJnc1Jlc3VsdE1hcFtUWydvcGVyYXRpb24nXV0gfCBudWxsIHtcclxuICAgIGlmIChRdWVyaWVzLmlzUG9pbnRRdWVyeShxdWVyeSkpIHtcclxuICAgICAgUXVlcmllcy5EZWZhdWx0UG9pbnRRdWVyeVNvbHZlci5zZXRDb250ZXh0KHRoaXMuc3BlY2tsZVJlbmRlcmVyKVxyXG4gICAgICByZXR1cm4gUXVlcmllcy5EZWZhdWx0UG9pbnRRdWVyeVNvbHZlci5zb2x2ZShxdWVyeSlcclxuICAgIH1cclxuICAgIGlmIChRdWVyaWVzLmlzSW50ZXJzZWN0aW9uUXVlcnkocXVlcnkpKSB7XHJcbiAgICAgIFF1ZXJpZXMuRGVmYXVsdEludGVyc2VjdGlvblF1ZXJ5U29sdmVyLnNldENvbnRleHQodGhpcy5zcGVja2xlUmVuZGVyZXIpXHJcbiAgICAgIHJldHVybiBRdWVyaWVzLkRlZmF1bHRJbnRlcnNlY3Rpb25RdWVyeVNvbHZlci5zb2x2ZShxdWVyeSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldExpZ2h0Q29uZmlndXJhdGlvbihjb25maWc6IFN1bkxpZ2h0Q29uZmlndXJhdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zcGVja2xlUmVuZGVyZXIuc2V0U3VuTGlnaHRDb25maWd1cmF0aW9uKGNvbmZpZylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWaWV3cygpOiBTcGVja2xlVmlld1tdIHtcclxuICAgIHJldHVybiB0aGlzLnRyZWVcclxuICAgICAgLmZpbmRBbGwoKG5vZGU6IFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUubW9kZWwucmVuZGVyVmlldz8uc3BlY2tsZVR5cGUgPT09IFNwZWNrbGVUeXBlLlZpZXczRFxyXG4gICAgICB9KVxyXG4gICAgICAubWFwKCh2OiBUcmVlTm9kZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB2Lm1vZGVsLnJhdyBhcyBTcGVja2xlVmlld1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNjcmVlbnNob3QoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAvLyBjb25zdCBzZWN0aW9uQm94VmlzaWJsZSA9IHRoaXMuc2VjdGlvbkJveC5kaXNwbGF5LnZpc2libGVcclxuICAgICAgLy8gaWYgKHNlY3Rpb25Cb3hWaXNpYmxlKSB7XHJcbiAgICAgIC8vICAgdGhpcy5zZWN0aW9uQm94LnZpc2libGUgPSBmYWxzZVxyXG4gICAgICAvLyB9XHJcbiAgICAgIGNvbnN0IHNjcmVlbnNob3QgPSB0aGlzLnNwZWNrbGVSZW5kZXJlci5yZW5kZXJlci5kb21FbGVtZW50LnRvRGF0YVVSTCgnaW1hZ2UvcG5nJylcclxuICAgICAgLy8gaWYgKHNlY3Rpb25Cb3hWaXNpYmxlKSB7XHJcbiAgICAgIC8vICAgdGhpcy5zZWN0aW9uQm94LnZpc2libGUgPSB0cnVlXHJcbiAgICAgIC8vIH1cclxuICAgICAgcmVzb2x2ZShzY3JlZW5zaG90KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9CSkVDVCBMT0FESU5HL1VOTE9BRElOR1xyXG4gICAqL1xyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZE9iamVjdChsb2FkZXI6IExvYWRlciwgem9vbVRvT2JqZWN0ID0gdHJ1ZSkge1xyXG4gICAgaWYgKHpvb21Ub09iamVjdCkge1xyXG4gICAgICB0aGlzLmdldEV4dGVuc2lvbihDYW1lcmFDb250cm9sbGVyKT8uZGVmYXVsdCgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkZXJzW2xvYWRlci5yZXNvdXJjZV0gPSBsb2FkZXJcclxuICAgIGNvbnN0IHRyZWVCdWlsdCA9IGF3YWl0IGxvYWRlci5sb2FkKClcclxuICAgIGlmICh0cmVlQnVpbHQpIHtcclxuICAgICAgY29uc3QgcmVuZGVyVHJlZTogUmVuZGVyVHJlZSB8IG51bGwgPSB0aGlzLnRyZWUuZ2V0UmVuZGVyVHJlZShsb2FkZXIucmVzb3VyY2UpXHJcbiAgICAgIC8qKiBDYXRlcmluZyB0byB0eXBlc2NyaXB0XHJcbiAgICAgICAqICBUaGUgcmVuZGVyIHRyZWUgY2FuJ3QgYmUgbnVsbCwgd2UndmUganVzdCBidWlsdCBpdFxyXG4gICAgICAgKi9cclxuICAgICAgaWYgKCFyZW5kZXJUcmVlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZ2V0IHJlbmRlciB0cmVlICR7bG9hZGVyLnJlc291cmNlfWApXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdDAgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IHN0ZXAgb2YgdGhpcy5zcGVja2xlUmVuZGVyZXIuYWRkUmVuZGVyVHJlZShyZW5kZXJUcmVlKSkge1xyXG4gICAgICAgIHN0ZXBcclxuICAgICAgICBpZiAoem9vbVRvT2JqZWN0KSB7XHJcbiAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSB0aGlzLmdldEV4dGVuc2lvbihDYW1lcmFDb250cm9sbGVyKVxyXG4gICAgICAgICAgaWYgKGV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICBleHRlbnNpb24uc2V0Q2FtZXJhVmlldyhbXSwgZmFsc2UpXHJcbiAgICAgICAgICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLnBpcGVsaW5lLnJlbmRlcigpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIExvZ2dlci5sb2codGhpcy5nZXRSZW5kZXJlcigpLnJlbmRlcmluZ1N0YXRzKVxyXG4gICAgICBMb2dnZXIubG9nKCdBU1lOQyBiYXRjaCBidWlsZCB0aW1lIC0+ICcsIHBlcmZvcm1hbmNlLm5vdygpIC0gdDApXHJcbiAgICAgIHRoaXMucmVxdWVzdFJlbmRlcihVcGRhdGVGbGFncy5SRU5ERVJfUkVTRVQgfCBVcGRhdGVGbGFncy5TSEFET1dTKVxyXG4gICAgICB0aGlzLmVtaXQoVmlld2VyRXZlbnQuTG9hZENvbXBsZXRlLCBsb2FkZXIucmVzb3VyY2UpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZGVyc1tsb2FkZXIucmVzb3VyY2VdKSB0aGlzLmxvYWRlcnNbbG9hZGVyLnJlc291cmNlXS5kaXNwb3NlKClcclxuICAgIGRlbGV0ZSB0aGlzLmxvYWRlcnNbbG9hZGVyLnJlc291cmNlXVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNhbmNlbExvYWQocmVzb3VyY2U6IHN0cmluZywgdW5sb2FkID0gZmFsc2UpIHtcclxuICAgIHRoaXMubG9hZGVyc1tyZXNvdXJjZV0uY2FuY2VsKClcclxuICAgIHRoaXMudHJlZS5nZXRSZW5kZXJUcmVlKHJlc291cmNlKT8uY2FuY2VsQnVpbGQoKVxyXG4gICAgdGhpcy5zcGVja2xlUmVuZGVyZXIuY2FuY2VsUmVuZGVyVHJlZShyZXNvdXJjZSlcclxuICAgIGlmICh1bmxvYWQpIHtcclxuICAgICAgYXdhaXQgdGhpcy51bmxvYWRPYmplY3QocmVzb3VyY2UpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdW5sb2FkT2JqZWN0KHJlc291cmNlOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWUuZmluZFN1YnRyZWUocmVzb3VyY2UpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGVyc1tyZXNvdXJjZV0pIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuY2FuY2VsTG9hZChyZXNvdXJjZSwgdHJ1ZSlcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUgdGhpcy5sb2FkZXJzW3Jlc291cmNlXVxyXG4gICAgICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLnJlbW92ZVJlbmRlclRyZWUocmVzb3VyY2UpXHJcbiAgICAgICAgdGhpcy50cmVlLmdldFJlbmRlclRyZWUocmVzb3VyY2UpPy5wdXJnZSgpXHJcbiAgICAgICAgdGhpcy50cmVlLnB1cmdlKHJlc291cmNlKVxyXG4gICAgICAgIHRoaXMucmVxdWVzdFJlbmRlcihVcGRhdGVGbGFncy5SRU5ERVJfUkVTRVQgfCBVcGRhdGVGbGFncy5TSEFET1dTKVxyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBMb2dnZXIud2FybihgUmVtb3ZlZCBzdWJ0cmVlICR7cmVzb3VyY2V9YClcclxuICAgICAgdGhpcy5lbWl0KFZpZXdlckV2ZW50LlVubG9hZENvbXBsZXRlLCByZXNvdXJjZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1bmxvYWRBbGwoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmxvYWRlcnMpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGVyc1trZXldKSBhd2FpdCB0aGlzLmNhbmNlbExvYWQoa2V5LCBmYWxzZSlcclxuICAgICAgICBkZWxldGUgdGhpcy5sb2FkZXJzW2tleV1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyZWUucm9vdC5jaGlsZHJlbi5mb3JFYWNoKChub2RlOiBUcmVlTm9kZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLnJlbW92ZVJlbmRlclRyZWUobm9kZS5tb2RlbC5pZClcclxuICAgICAgICB0aGlzLnRyZWUuZ2V0UmVuZGVyVHJlZSgpPy5wdXJnZSgpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLnRyZWUucHVyZ2UoKVxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgTG9nZ2VyLndhcm4oYFJlbW92ZWQgYWxsIHN1YnRyZWVzYClcclxuICAgICAgdGhpcy5lbWl0KFZpZXdlckV2ZW50LlVubG9hZEFsbENvbXBsZXRlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRpc3Bvc2UoKSB7XHJcbiAgICAvLyBUT0RPOiBjdXJyZW50bHkgaXQncyBlYXNpZXIgdG8gc2ltcGx5IHJlZnJlc2ggdGhlIHBhZ2UgOilcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBCb3gzLFxyXG4gIENhbWVyYSxcclxuICBNYXRoVXRpbHMsXHJcbiAgT2JqZWN0M0QsXHJcbiAgUGxhbmUsXHJcbiAgUmF5Y2FzdGVyLFxyXG4gIFZlY3RvcjIsXHJcbiAgVmVjdG9yMyxcclxuICB0eXBlIEludGVyc2VjdGlvblxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24gfSBmcm9tICcuLi8uLi9vYmplY3RzL1NwZWNrbGVSYXljYXN0ZXIuanMnXHJcbmltcG9ydCB7IE1lYXN1cmVtZW50RGF0YSwgTWVhc3VyZW1lbnRUeXBlIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL3ZpZXdlci9zdGF0ZSdcclxuXHJcbmV4cG9ydCBlbnVtIE1lYXN1cmVtZW50U3RhdGUge1xyXG4gIEhJRERFTixcclxuICBEQU5HTElOR19TVEFSVCxcclxuICBEQU5HTElOR19FTkQsXHJcbiAgQ09NUExFVEVcclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1lYXN1cmVtZW50IGV4dGVuZHMgT2JqZWN0M0Qge1xyXG4gIHB1YmxpYyBzdGFydFBvaW50OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHB1YmxpYyBlbmRQb2ludDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICBwdWJsaWMgc3RhcnROb3JtYWw6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHVibGljIGVuZE5vcm1hbDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICBwdWJsaWMgc3RhcnRMaW5lTGVuZ3RoOiBudW1iZXJcclxuICBwdWJsaWMgZW5kTGluZUxlbmd0aDogbnVtYmVyXHJcbiAgcHVibGljIHZhbHVlID0gMFxyXG4gIHB1YmxpYyB1bml0cyA9ICdtJ1xyXG4gIHB1YmxpYyBwcmVjaXNpb24gPSAyXHJcbiAgcHVibGljIG1lYXN1cmVtZW50SWQ6IHN0cmluZ1xyXG5cclxuICBwcm90ZWN0ZWQgX3N0YXRlOiBNZWFzdXJlbWVudFN0YXRlID0gTWVhc3VyZW1lbnRTdGF0ZS5ISURERU5cclxuICBwcm90ZWN0ZWQgcmVuZGVyaW5nQ2FtZXJhOiBDYW1lcmEgfCBudWxsXHJcbiAgcHJvdGVjdGVkIHJlbmRlcmluZ1NpemU6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5tZWFzdXJlbWVudElkID0gTWF0aFV0aWxzLmdlbmVyYXRlVVVJRCgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHN0YXRlKHZhbHVlOiBNZWFzdXJlbWVudFN0YXRlKSB7XHJcbiAgICB0aGlzLl9zdGF0ZSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWJzdHJhY3Qgc2V0IGlzVmlzaWJsZSh2YWx1ZTogYm9vbGVhbilcclxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0IG1lYXN1cmVtZW50VHlwZSgpOiBNZWFzdXJlbWVudFR5cGVcclxuXHJcbiAgcHVibGljIGdldCBib3VuZHMoKTogQm94MyB7XHJcbiAgICByZXR1cm4gbmV3IEJveDMoKS5leHBhbmRCeVBvaW50KHRoaXMuc3RhcnRQb2ludCkuZXhwYW5kQnlQb2ludCh0aGlzLmVuZFBvaW50KVxyXG4gIH1cclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIHB1YmxpYyBmcmFtZVVwZGF0ZShjYW1lcmE6IENhbWVyYSB8IG51bGwsIHNpemU6IFZlY3RvcjIsIF9ib3VuZHM/OiBCb3gzKSB7XHJcbiAgICB0aGlzLnJlbmRlcmluZ0NhbWVyYSA9IGNhbWVyYVxyXG4gICAgdGhpcy5yZW5kZXJpbmdTaXplLmNvcHkoc2l6ZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhYnN0cmFjdCB1cGRhdGUoKTogUHJvbWlzZTx2b2lkPlxyXG4gIHB1YmxpYyBhYnN0cmFjdCByYXljYXN0KF9yYXljYXN0ZXI6IFJheWNhc3RlciwgX2ludGVyc2VjdHM6IEFycmF5PEludGVyc2VjdGlvbj4pOiB2b2lkXHJcbiAgcHVibGljIGFic3RyYWN0IGhpZ2hsaWdodChfdmFsdWU6IGJvb2xlYW4pOiB2b2lkXHJcbiAgcHVibGljIGFic3RyYWN0IHVwZGF0ZUNsaXBwaW5nUGxhbmVzKF9wbGFuZXM6IFBsYW5lW10pOiB2b2lkXHJcbiAgcHVibGljIGFic3RyYWN0IGxvY2F0aW9uVXBkYXRlZChcclxuICAgIHBvaW50PzogVmVjdG9yMyxcclxuICAgIG5vcm1hbD86IFZlY3RvcjMsXHJcbiAgICBuZGNTY3JlZW4/OiBWZWN0b3IyXHJcbiAgKTogdm9pZFxyXG4gIHB1YmxpYyBhYnN0cmFjdCBsb2NhdGlvblNlbGVjdGVkKFxyXG4gICAgcG9pbnQ/OiBWZWN0b3IzLFxyXG4gICAgbm9ybWFsPzogVmVjdG9yMyxcclxuICAgIG5kY1NjcmVlbj86IFZlY3RvcjJcclxuICApOiB2b2lkXHJcbiAgcHVibGljIHNuYXA/KFxyXG4gICAgbmRjUG9pbnQ6IFZlY3RvcjIsXHJcbiAgICBpbnRlcnNlY3Rpb246IEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbixcclxuICAgIG91dFBvaW50OiBWZWN0b3IzLFxyXG4gICAgb3V0Tm9ybWFsOiBWZWN0b3IzXHJcbiAgKTogYm9vbGVhblxyXG5cclxuICBwdWJsaWMgdG9NZWFzdXJlbWVudERhdGEoKTogTWVhc3VyZW1lbnREYXRhIHtcclxuICAgIGNvbnN0IG1lYXN1cmVtZW50RGF0YTogTWVhc3VyZW1lbnREYXRhID0ge1xyXG4gICAgICB0eXBlOiB0aGlzLm1lYXN1cmVtZW50VHlwZSxcclxuICAgICAgc3RhcnRQb2ludDogW3RoaXMuc3RhcnRQb2ludC54LCB0aGlzLnN0YXJ0UG9pbnQueSwgdGhpcy5zdGFydFBvaW50LnpdLFxyXG4gICAgICBlbmRQb2ludDogW3RoaXMuZW5kUG9pbnQueCwgdGhpcy5lbmRQb2ludC55LCB0aGlzLmVuZFBvaW50LnpdLFxyXG4gICAgICBzdGFydE5vcm1hbDogW3RoaXMuc3RhcnROb3JtYWwueCwgdGhpcy5zdGFydE5vcm1hbC55LCB0aGlzLnN0YXJ0Tm9ybWFsLnpdLFxyXG4gICAgICBlbmROb3JtYWw6IFt0aGlzLmVuZE5vcm1hbC54LCB0aGlzLmVuZE5vcm1hbC55LCB0aGlzLmVuZE5vcm1hbC56XSxcclxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgIHV1aWQ6IHRoaXMubWVhc3VyZW1lbnRJZFxyXG4gICAgICAvLyB1bml0czogdGhpcy51bml0cywgLy8gV2UgZG9uJ3Qgd3JpdGUgdW5pdHMgcGVyIG1lYXN1cmVtZW50XHJcbiAgICAgIC8vIHByZWNpc2lvbjogdGhpcy5wcmVjaXNpb24gLy8gV2UgZG9uJ3Qgd3JpdGUgcHJlY2lzaW9uIHBlciBtZWFzdXJlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtZWFzdXJlbWVudERhdGFcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmcm9tTWVhc3VyZW1lbnREYXRhKGRhdGE6IE1lYXN1cmVtZW50RGF0YSk6IHZvaWQge1xyXG4gICAgdGhpcy5tZWFzdXJlbWVudElkID0gZGF0YS51dWlkXHJcbiAgICB0aGlzLnN0YXJ0UG9pbnQuc2V0KGRhdGEuc3RhcnRQb2ludFswXSwgZGF0YS5zdGFydFBvaW50WzFdLCBkYXRhLnN0YXJ0UG9pbnRbMl0pXHJcbiAgICB0aGlzLmVuZFBvaW50LnNldChkYXRhLmVuZFBvaW50WzBdLCBkYXRhLmVuZFBvaW50WzFdLCBkYXRhLmVuZFBvaW50WzJdKVxyXG4gICAgdGhpcy5zdGFydE5vcm1hbC5zZXQoZGF0YS5zdGFydE5vcm1hbFswXSwgZGF0YS5zdGFydE5vcm1hbFsxXSwgZGF0YS5zdGFydE5vcm1hbFsyXSlcclxuICAgIHRoaXMuZW5kTm9ybWFsLnNldChkYXRhLmVuZE5vcm1hbFswXSwgZGF0YS5lbmROb3JtYWxbMV0sIGRhdGEuZW5kTm9ybWFsWzJdKVxyXG4gICAgdGhpcy52YWx1ZSA9IGRhdGEudmFsdWVcclxuICAgIC8vIHRoaXMudW5pdHMgPSBkYXRhLnVuaXRzIC8vIFdlIGRvbid0IHJlYWQgdW5pdHMgcGVyIG1lYXN1cmVtZW50XHJcbiAgICAvLyB0aGlzLnByZWNpc2lvbiA9IGRhdGEucHJlY2lzaW9uIC8vIFdlIGRvbid0IHJlYWQgcHJlY2lzaW9uIHBlciBtZWFzdXJlbWVudFxyXG4gICAgdGhpcy5fc3RhdGUgPSBNZWFzdXJlbWVudFN0YXRlLkNPTVBMRVRFXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQm94MyxcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBDb2xvcixcclxuICBEb3VibGVTaWRlLFxyXG4gIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgRnJvbnRTaWRlLFxyXG4gIEludDE2QnVmZmVyQXR0cmlidXRlLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE1hdHJpeDQsXHJcbiAgTWVzaCxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCxcclxuICBSYXljYXN0ZXIsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzLFxyXG4gIFZlY3RvcjQsXHJcbiAgdHlwZSBJbnRlcnNlY3Rpb25cclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgQW5jaG9yWCwgQW5jaG9yWSwgVGV4dCB9IGZyb20gJ3Ryb2lrYS10aHJlZS10ZXh0J1xyXG5pbXBvcnQgU3BlY2tsZUJhc2ljTWF0ZXJpYWwsIHtcclxuICBCaWxsYm9hcmRpbmdUeXBlXHJcbn0gZnJvbSAnLi4vbWF0ZXJpYWxzL1NwZWNrbGVCYXNpY01hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVRleHRNYXRlcmlhbCBmcm9tICcuLi9tYXRlcmlhbHMvU3BlY2tsZVRleHRNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vaW5kZXguanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5pbXBvcnQgeyBVaW50MTZCdWZmZXJBdHRyaWJ1dGUgfSBmcm9tICd0aHJlZSdcclxuXHJcbmNvbnN0IF9tYXQ0MDogTWF0cml4NCA9IG5ldyBNYXRyaXg0KClcclxuY29uc3QgX21hdDQxOiBNYXRyaXg0ID0gbmV3IE1hdHJpeDQoKVxyXG5jb25zdCBfYm94MzogQm94MyA9IG5ldyBCb3gzKClcclxuY29uc3QgX3ZlYzM6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF92ZWM0OiBWZWN0b3I0ID0gbmV3IFZlY3RvcjQoKVxyXG5jb25zdCBxdWFkVmVydHMgPSBbbmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMoKV1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGV4dExhYmVsUGFyYW1zIHtcclxuICB0ZXh0Pzogc3RyaW5nXHJcbiAgZm9udFNpemU/OiBudW1iZXJcclxuICBtYXhXaWR0aD86IG51bWJlclxyXG4gIGFuY2hvclg/OiBBbmNob3JYXHJcbiAgYW5jaG9yWT86IEFuY2hvcllcclxuICBiaWxsYm9hcmQ/OiBCaWxsYm9hcmRpbmdUeXBlIHwgbnVsbFxyXG4gIGJhY2tncm91bmRDb2xvcj86IENvbG9yIHwgbnVsbFxyXG4gIGJhY2tncm91bmRDb3JuZXJSYWRpdXM/OiBudW1iZXJcclxuICBiYWNrZ3JvdW5kTWFyZ2lucz86IFZlY3RvcjJcclxuICB0ZXh0Q29sb3I/OiBDb2xvclxyXG4gIHRleHRPcGFjaXR5PzogbnVtYmVyXHJcbiAgb2JqZWN0TGF5ZXI/OiBPYmplY3RMYXllcnNcclxufVxyXG5cclxuLyoqIFNjcmVlbiAqL1xyXG5leHBvcnQgY29uc3QgRGVmYXVsdFRleHRMYWJlbFBhcmFtczogUmVxdWlyZWQ8VGV4dExhYmVsUGFyYW1zPiA9IHtcclxuICB0ZXh0OiAnVGVzdCBUZXh0JyxcclxuICBmb250U2l6ZTogNDAsXHJcbiAgbWF4V2lkdGg6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcclxuICBhbmNob3JYOiAnbGVmdCcsXHJcbiAgYW5jaG9yWTogJ21pZGRsZScsXHJcbiAgYmlsbGJvYXJkOiAnc2NyZWVuJyxcclxuICBiYWNrZ3JvdW5kQ29sb3I6IG5ldyBDb2xvcigweGZmMDAwMCksXHJcbiAgYmFja2dyb3VuZENvcm5lclJhZGl1czogMC41LFxyXG4gIGJhY2tncm91bmRNYXJnaW5zOiBuZXcgVmVjdG9yMig1MCwgMTApLFxyXG4gIHRleHRDb2xvcjogbmV3IENvbG9yKDB4MDBmZmZmKSxcclxuICB0ZXh0T3BhY2l0eTogMSxcclxuICBvYmplY3RMYXllcjogT2JqZWN0TGF5ZXJzLk9WRVJMQVlcclxufVxyXG5cclxuLy8gLyoqIFdvcmxkIEJpbGxib2FyZCovXHJcbi8vIGV4cG9ydCBjb25zdCBEZWZhdWx0VGV4dExhYmVsUGFyYW1zOiBSZXF1aXJlZDxUZXh0TGFiZWxQYXJhbXM+ID0ge1xyXG4vLyAgIHRleHQ6ICdUZXN0IFRleHQnLFxyXG4vLyAgIGZvbnRTaXplOiAxLFxyXG4vLyAgIG1heFdpZHRoOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbi8vICAgYW5jaG9yWDogJ2xlZnQnLFxyXG4vLyAgIGFuY2hvclk6ICdtaWRkbGUnLFxyXG4vLyAgIGJpbGxib2FyZDogJ3dvcmxkJyxcclxuLy8gICBiYWNrZ3JvdW5kQ29sb3I6IG5ldyBDb2xvcigweGZmMDAwMCksXHJcbi8vICAgYmFja2dyb3VuZENvcm5lclJhZGl1czogMC41LFxyXG4vLyAgIGJhY2tncm91bmRNYXJnaW5zOiBuZXcgVmVjdG9yMigwLjc1LCAwLjEpLFxyXG4vLyAgIHRleHRDb2xvcjogbmV3IENvbG9yKDB4MDBmZmZmKSxcclxuLy8gICB0ZXh0T3BhY2l0eTogMSxcclxuLy8gICBvYmplY3RMYXllcjogT2JqZWN0TGF5ZXJzLk9WRVJMQVlcclxuLy8gfVxyXG5cclxuLy8gLyoqIFdvcmxkICovXHJcbi8vIGV4cG9ydCBjb25zdCBEZWZhdWx0VGV4dExhYmVsUGFyYW1zOiBSZXF1aXJlZDxUZXh0TGFiZWxQYXJhbXM+ID0ge1xyXG4vLyAgIHRleHQ6ICdUZXN0IFRleHQnLFxyXG4vLyAgIGZvbnRTaXplOiAxLFxyXG4vLyAgIG1heFdpZHRoOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXHJcbi8vICAgYW5jaG9yWDogJ2NlbnRlcicsXHJcbi8vICAgYW5jaG9yWTogJ21pZGRsZScsXHJcbi8vICAgYmlsbGJvYXJkOiBudWxsLFxyXG4vLyAgIGJhY2tncm91bmRDb2xvcjogbmV3IENvbG9yKDB4ZmYwMDAwKSxcclxuLy8gICBiYWNrZ3JvdW5kQ29ybmVyUmFkaXVzOiAwLjUsXHJcbi8vICAgYmFja2dyb3VuZE1hcmdpbnM6IG5ldyBWZWN0b3IyKDAuNzUsIDAuMSksXHJcbi8vICAgdGV4dENvbG9yOiBuZXcgQ29sb3IoMHgwMGZmZmYpLFxyXG4vLyAgIHRleHRPcGFjaXR5OiAxLFxyXG4vLyAgIG9iamVjdExheWVyOiBPYmplY3RMYXllcnMuT1ZFUkxBWVxyXG4vLyB9XHJcblxyXG5leHBvcnQgY2xhc3MgVGV4dExhYmVsIGV4dGVuZHMgVGV4dCB7XHJcbiAgLyoqIE5lZWRzIGEgcmF5Y2FzdCB0byBzdGFydCByZW5kZXJpbmcgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IERFQlVHX0JJTExCT0FSRFMgPSBmYWxzZVxyXG5cclxuICBkZWNsYXJlIG1hdGVyaWFsOiBTcGVja2xlVGV4dE1hdGVyaWFsXHJcblxyXG4gIHByaXZhdGUgX2JhY2tncm91bmQ6IE1lc2hcclxuICBwcml2YXRlIF9iYWNrZ3JvdW5kTWF0ZXJpYWw6IFNwZWNrbGVCYXNpY01hdGVyaWFsXHJcbiAgcHJpdmF0ZSBfcGFyYW1zOiBSZXF1aXJlZDxUZXh0TGFiZWxQYXJhbXM+ID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFRleHRMYWJlbFBhcmFtcylcclxuICBwcml2YXRlIF90ZXh0Qm91bmRzOiBCb3gzID0gbmV3IEJveDMoKVxyXG4gIHByaXZhdGUgX2NvbGxpc2lvbk1lc2g6IE1lc2hcclxuICBwdWJsaWMgZ2V0IHRleHRNZXNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYmFja2dyb3VuZE1lc2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0ZXh0Qm91bmRzKCk6IEJveDMge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHRCb3VuZHNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYmFja2dyb3VuZE1hdGVyaWFsKCk6IFNwZWNrbGVCYXNpY01hdGVyaWFsIHtcclxuICAgIHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kTWF0ZXJpYWxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFRleHRMYWJlbFBhcmFtcyA9IERlZmF1bHRUZXh0TGFiZWxQYXJhbXMpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuZGVwdGhPZmZzZXQgPSAtMC4xXHJcblxyXG4gICAgdGhpcy5tYXRlcmlhbCA9IG5ldyBTcGVja2xlVGV4dE1hdGVyaWFsKHt9KS5nZXREZXJpdmVkTWF0ZXJpYWwoKVxyXG4gICAgdGhpcy5tYXRlcmlhbC50b25lTWFwcGVkID0gZmFsc2VcclxuXHJcbiAgICB0aGlzLl9iYWNrZ3JvdW5kTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZUJhc2ljTWF0ZXJpYWwoe30pXHJcbiAgICB0aGlzLl9iYWNrZ3JvdW5kTWF0ZXJpYWwudG9uZU1hcHBlZCA9IGZhbHNlXHJcblxyXG4gICAgdGhpcy5fYmFja2dyb3VuZCA9IG5ldyBNZXNoKHVuZGVmaW5lZCwgdGhpcy5fYmFja2dyb3VuZE1hdGVyaWFsKVxyXG4gICAgLyoqIE90aGVyd2lzZSB0aHJlZS5qcyBsb29zZXMgaXQncyBzaGl0IHdoZW4gcmVuZGVyaW5nIGl0IGJpbGxib2FyZGVkICovXHJcbiAgICB0aGlzLl9iYWNrZ3JvdW5kLmZydXN0dW1DdWxsZWQgPSBmYWxzZVxyXG4gICAgLyoqIE5vIHJheWNhc3RpbmcgZm9yIHRoZSBiYWNrZ3JvdW5kICovXHJcbiAgICB0aGlzLl9iYWNrZ3JvdW5kLnJheWNhc3QgPSAoKSA9PiB7fVxyXG5cclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KClcclxuICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZShcclxuICAgICAgJ3Bvc2l0aW9uJyxcclxuICAgICAgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUobmV3IEFycmF5KDEyKS5maWxsKDApLCAzKVxyXG4gICAgKVxyXG4gICAgZ2VvbWV0cnkuc2V0SW5kZXgoXHJcbiAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxyXG4gICAgICBuZXcgSW50MTZCdWZmZXJBdHRyaWJ1dGUoXHJcbiAgICAgICAgWyBcclxuICAgICAgICAgIDAsIDEsIDIsIC8vIEZpcnN0IHRyaWFuZ2xlOiBib3R0b20tbGVmdCDihpIgYm90dG9tLXJpZ2h0IOKGkiB0b3AtcmlnaHRcclxuICAgICAgICAgIDAsIDIsIDMgLy8gU2Vjb25kIHRyaWFuZ2xlOiBib3R0b20tbGVmdCDihpIgdG9wLXJpZ2h0IOKGkiB0b3AtbGVmdFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgMVxyXG4gICAgICApXHJcbiAgICApXHJcbiAgICB0aGlzLl9jb2xsaXNpb25NZXNoID0gbmV3IE1lc2goXHJcbiAgICAgIGdlb21ldHJ5LFxyXG4gICAgICBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoeyBjb2xvcjogMHgwMGZmMDAsIHdpcmVmcmFtZTogdHJ1ZSB9KVxyXG4gICAgKVxyXG4gICAgdGhpcy5fY29sbGlzaW9uTWVzaC5uYW1lID0gJ1RleHRMYWJlbF9Db2xsaXNpb25fTWVzaCdcclxuICAgIHRoaXMuX2NvbGxpc2lvbk1lc2gucmVuZGVyT3JkZXIgPSAxXHJcbiAgICB0aGlzLl9jb2xsaXNpb25NZXNoLnZpc2libGUgPSB0aGlzLkRFQlVHX0JJTExCT0FSRFNcclxuICAgIHRoaXMuYWRkKHRoaXMuX2NvbGxpc2lvbk1lc2gpXHJcblxyXG4gICAgdGhpcy51cGRhdGVQYXJhbXMocGFyYW1zKS50aGVuKCkuY2F0Y2hcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVQYXJhbXMocGFyYW1zOiBUZXh0TGFiZWxQYXJhbXMsIG9uVXBkYXRlQ29tcGxldGU/OiAoKSA9PiB2b2lkKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuICAgICAgaWYgKHRoaXMubWF0ZXJpYWwgJiYgISh0aGlzLm1hdGVyaWFsIGluc3RhbmNlb2YgU3BlY2tsZVRleHRNYXRlcmlhbCkpIHtcclxuICAgICAgICBjb25zdCBtYXQ6IE1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbFxyXG4gICAgICAgIExvZ2dlci5lcnJvcihcclxuICAgICAgICAgIGBUZXh0TGFiZWwgcmVxdWlyZXMgYSBTcGVja2xlVGV4dE1hdGVyaWFsIGluc3RhbmNlLiBGb3VuZCAke21hdC5jb25zdHJ1Y3Rvci5uYW1lfWBcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKiBBdXRvbWF0aWNhbGx5IHNjYWxlIHdpdGggRFBSICovXHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKVxyXG4gICAgICBpZiAocGFyYW1zLmJpbGxib2FyZCA9PT0gJ3NjcmVlbicpIHtcclxuICAgICAgICBpZiAodHJhbnNmb3JtZWRQYXJhbXMuYmFja2dyb3VuZE1hcmdpbnMpXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFBhcmFtcy5iYWNrZ3JvdW5kTWFyZ2lucy5tdWx0aXBseVNjYWxhcih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbylcclxuICAgICAgICBpZiAodHJhbnNmb3JtZWRQYXJhbXMuZm9udFNpemUpIHtcclxuICAgICAgICAgIHRyYW5zZm9ybWVkUGFyYW1zLmZvbnRTaXplICo9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2lkZSA9IEZyb250U2lkZVxyXG4gICAgICAgIHRoaXMuX2JhY2tncm91bmRNYXRlcmlhbC5zaWRlID0gRnJvbnRTaWRlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC5zaWRlID0gRG91YmxlU2lkZVxyXG4gICAgICAgIHRoaXMuX2JhY2tncm91bmRNYXRlcmlhbC5zaWRlID0gRG91YmxlU2lkZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHJhbnNmb3JtZWRQYXJhbXMudGV4dCkgdGhpcy50ZXh0ID0gdHJhbnNmb3JtZWRQYXJhbXMudGV4dFxyXG4gICAgICBpZiAodHJhbnNmb3JtZWRQYXJhbXMuZm9udFNpemUpIHRoaXMuZm9udFNpemUgPSB0cmFuc2Zvcm1lZFBhcmFtcy5mb250U2l6ZVxyXG4gICAgICBpZiAodHJhbnNmb3JtZWRQYXJhbXMuYW5jaG9yWCkgdGhpcy5hbmNob3JYID0gdHJhbnNmb3JtZWRQYXJhbXMuYW5jaG9yWFxyXG4gICAgICBpZiAodHJhbnNmb3JtZWRQYXJhbXMuYW5jaG9yWSkgdGhpcy5hbmNob3JZID0gdHJhbnNmb3JtZWRQYXJhbXMuYW5jaG9yWVxyXG4gICAgICBpZiAodHJhbnNmb3JtZWRQYXJhbXMubWF4V2lkdGgpIHRoaXMubWF4V2lkdGggPSB0cmFuc2Zvcm1lZFBhcmFtcy5tYXhXaWR0aFxyXG5cclxuICAgICAgaWYgKHRyYW5zZm9ybWVkUGFyYW1zLnRleHRDb2xvciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRyYW5zZm9ybWVkUGFyYW1zLnRleHRDb2xvcilcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0cmFuc2Zvcm1lZFBhcmFtcy50ZXh0T3BhY2l0eSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwub3BhY2l0eSA9IHRyYW5zZm9ybWVkUGFyYW1zLnRleHRPcGFjaXR5XHJcblxyXG4gICAgICBpZiAodHJhbnNmb3JtZWRQYXJhbXMub2JqZWN0TGF5ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMubGF5ZXJzLnNldCh0cmFuc2Zvcm1lZFBhcmFtcy5vYmplY3RMYXllcilcclxuICAgICAgICB0aGlzLl9jb2xsaXNpb25NZXNoLmxheWVycy5zZXQodHJhbnNmb3JtZWRQYXJhbXMub2JqZWN0TGF5ZXIpXHJcbiAgICAgICAgdGhpcy5fYmFja2dyb3VuZC5sYXllcnMuc2V0KHRyYW5zZm9ybWVkUGFyYW1zLm9iamVjdExheWVyKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuX3BhcmFtcywgdHJhbnNmb3JtZWRQYXJhbXMpXHJcblxyXG4gICAgICBpZiAodGhpcy5fbmVlZHNTeW5jKSB7XHJcbiAgICAgICAgdGhpcy5zeW5jKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudGV4dEJvdW5kc1RvQm94KHRoaXMuX3RleHRCb3VuZHMpXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUJhY2tncm91bmQoKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGVCaWxsYm9hcmRpbmcoKVxyXG5cclxuICAgICAgICAgIGlmIChvblVwZGF0ZUNvbXBsZXRlKSBvblVwZGF0ZUNvbXBsZXRlKClcclxuICAgICAgICAgIHJlc29sdmUoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKG9uVXBkYXRlQ29tcGxldGUpIG9uVXBkYXRlQ29tcGxldGUoKVxyXG4gICAgICAgIHJlc29sdmUoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJheWNhc3QocmF5Y2FzdGVyOiBSYXljYXN0ZXIsIGludGVyc2VjdHM6IEFycmF5PEludGVyc2VjdGlvbj4pIHtcclxuICAgIC8qKiBObyBiaWxsYm9hcmRpbmcsIGRlZmF1bHQgcmF5Y2FzdGluZyB3b3JrcyBmaW5lICovXHJcbiAgICBpZiAoIXRoaXMuX3BhcmFtcy5iaWxsYm9hcmQpIHtcclxuICAgICAgc3VwZXIucmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgLyoqIElmIHdlIGhhdmUgYSBiaWxsYm9hcmQsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb2xsaXNpb24gbWVzaCAqL1xyXG4gICAgY29uc3QgdGV4dE1hdHJpeCA9IHRoaXMubWF0cml4V29ybGRcclxuICAgIGNvbnN0IHRleHRNYXRyaXhJbnYgPSBfbWF0NDAuY29weSh0ZXh0TWF0cml4KS5pbnZlcnQoKVxyXG5cclxuICAgIGNvbnN0IGJpbGxib2FyZFBvcyA9IG5ldyBWZWN0b3IzKCkuc2V0KFxyXG4gICAgICB0ZXh0TWF0cml4LmVsZW1lbnRzWzEyXSxcclxuICAgICAgdGV4dE1hdHJpeC5lbGVtZW50c1sxM10sXHJcbiAgICAgIHRleHRNYXRyaXguZWxlbWVudHNbMTRdXHJcbiAgICApXHJcblxyXG4gICAgLyoqIFdvcmxkIHNwYWNlIGJpbGxib2FyZGluZyAqL1xyXG4gICAgaWYgKHRoaXMuX3BhcmFtcy5iaWxsYm9hcmQgPT09ICd3b3JsZCcpIHtcclxuICAgICAgY29uc3QgYm94ID0gbmV3IEJveDMoKS5jb3B5KFxyXG4gICAgICAgIHRoaXMuX3BhcmFtcy5iYWNrZ3JvdW5kQ29sb3IgIT09IG51bGxcclxuICAgICAgICAgID8gKHRoaXMuX2JhY2tncm91bmQuZ2VvbWV0cnkuYm91bmRpbmdCb3ggYXMgQm94MylcclxuICAgICAgICAgIDogdGhpcy5fdGV4dEJvdW5kc1xyXG4gICAgICApXHJcbiAgICAgIGNvbnN0IG1pbiA9IG5ldyBWZWN0b3IzKCkuY29weShib3gubWluKVxyXG4gICAgICBjb25zdCBtYXggPSBuZXcgVmVjdG9yMygpLmNvcHkoYm94Lm1heClcclxuICAgICAgcXVhZFZlcnRzWzBdLnNldChtaW4ueCwgbWluLnksIDApXHJcbiAgICAgIHF1YWRWZXJ0c1sxXS5zZXQobWF4LngsIG1pbi55LCAwKVxyXG4gICAgICBxdWFkVmVydHNbMl0uc2V0KG1heC54LCBtYXgueSwgMClcclxuICAgICAgcXVhZFZlcnRzWzNdLnNldChtaW4ueCwgbWF4LnksIDApXHJcblxyXG4gICAgICBjb25zdCBjYW1lcmFSb3RhdGlvbk1hdHJpeCA9IF9tYXQ0MS5leHRyYWN0Um90YXRpb24ocmF5Y2FzdGVyLmNhbWVyYS5tYXRyaXhXb3JsZClcclxuXHJcbiAgICAgIGNvbnN0IGJpbGxib2FyZE1hdCA9IG5ldyBNYXRyaXg0KCkubWFrZVRyYW5zbGF0aW9uKFxyXG4gICAgICAgIGJpbGxib2FyZFBvcy54LFxyXG4gICAgICAgIGJpbGxib2FyZFBvcy55LFxyXG4gICAgICAgIGJpbGxib2FyZFBvcy56XHJcbiAgICAgIClcclxuICAgICAgYmlsbGJvYXJkTWF0LnByZW11bHRpcGx5KHRleHRNYXRyaXhJbnYpXHJcbiAgICAgIGJpbGxib2FyZE1hdC5tdWx0aXBseShjYW1lcmFSb3RhdGlvbk1hdHJpeClcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVhZFZlcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcXVhZFZlcnRzW2ldLmFwcGx5TWF0cml4NChiaWxsYm9hcmRNYXQpXHJcblxyXG4gICAgICAgIHRoaXMuX2NvbGxpc2lvbk1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5zZXRYWVooXHJcbiAgICAgICAgICBpLFxyXG4gICAgICAgICAgcXVhZFZlcnRzW2ldLngsXHJcbiAgICAgICAgICBxdWFkVmVydHNbaV0ueSxcclxuICAgICAgICAgIHF1YWRWZXJ0c1tpXS56XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNjcmVlbiBzcGFjZSBiaWxsYm9hcmRpbmcgKi9cclxuICAgIGlmICh0aGlzLl9wYXJhbXMuYmlsbGJvYXJkID09PSAnc2NyZWVuJykge1xyXG4gICAgICBjb25zdCBib3ggPSBuZXcgQm94MygpLmNvcHkodGhpcy5fdGV4dEJvdW5kcylcclxuICAgICAgaWYgKGJveC5nZXRTaXplKG5ldyBWZWN0b3IzKCkpLmxlbmd0aCgpID09PSAwKSByZXR1cm5cclxuICAgICAgaWYgKGJveC5pc0luZmluaXRlQm94KCkpIHJldHVyblxyXG5cclxuICAgICAgY29uc3QgbWluID0gbmV3IFZlY3RvcjMoKS5jb3B5KGJveC5taW4pXHJcbiAgICAgIGNvbnN0IG1heCA9IG5ldyBWZWN0b3IzKCkuY29weShib3gubWF4KVxyXG4gICAgICBxdWFkVmVydHNbMF0uc2V0KG1pbi54LCBtaW4ueSwgMClcclxuICAgICAgcXVhZFZlcnRzWzFdLnNldChtYXgueCwgbWluLnksIDApXHJcbiAgICAgIHF1YWRWZXJ0c1syXS5zZXQobWF4LngsIG1heC55LCAwKVxyXG4gICAgICBxdWFkVmVydHNbM10uc2V0KG1pbi54LCBtYXgueSwgMClcclxuXHJcbiAgICAgIGNvbnN0IGJpbGxib2FyZFNpemUgPVxyXG4gICAgICAgIHRoaXMuX3BhcmFtcy5iYWNrZ3JvdW5kQ29sb3IgIT09IG51bGxcclxuICAgICAgICAgID8gdGhpcy5fYmFja2dyb3VuZE1hdGVyaWFsLnVzZXJEYXRhLmJpbGxib2FyZFBpeGVsT2Zmc2V0U2l6ZS52YWx1ZVxyXG4gICAgICAgICAgOiB0aGlzLl9iYWNrZ3JvdW5kTWF0ZXJpYWwudXNlckRhdGEuYmlsbGJvYXJkUGl4ZWxPZmZzZXRTaXplLnZhbHVlXHJcbiAgICAgIGNvbnN0IGludlByb2plY3Rpb24gPSByYXljYXN0ZXIuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlXHJcbiAgICAgIGNvbnN0IGludlZpZXcgPSByYXljYXN0ZXIuY2FtZXJhLm1hdHJpeFdvcmxkXHJcblxyXG4gICAgICBjb25zdCBjbGlwID0gbmV3IFZlY3RvcjQoYmlsbGJvYXJkUG9zLngsIGJpbGxib2FyZFBvcy55LCBiaWxsYm9hcmRQb3MueiwgMS4wKVxyXG4gICAgICAgIC5hcHBseU1hdHJpeDQocmF5Y2FzdGVyLmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpXHJcbiAgICAgICAgLmFwcGx5TWF0cml4NChyYXljYXN0ZXIuY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpXHJcbiAgICAgIGNvbnN0IHBEaXYgPSBjbGlwLndcclxuICAgICAgY2xpcC5tdWx0aXBseVNjYWxhcigxIC8gcERpdilcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVhZFZlcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgX3ZlYzMuY29weShxdWFkVmVydHNbaV0pXHJcbiAgICAgICAgX3ZlYzMubXVsdGlwbHkobmV3IFZlY3RvcjMoYmlsbGJvYXJkU2l6ZS56ICogMiwgYmlsbGJvYXJkU2l6ZS53ICogMiwgMCkpXHJcbiAgICAgICAgX3ZlYzMuYWRkKG5ldyBWZWN0b3IzKGJpbGxib2FyZFNpemUueCAqIDIsIGJpbGxib2FyZFNpemUueSAqIDIsIDApKVxyXG4gICAgICAgIF92ZWM0LnNldChjbGlwLngsIGNsaXAueSwgY2xpcC56LCAxKVxyXG4gICAgICAgIF92ZWM0LmFkZChuZXcgVmVjdG9yNChfdmVjMy54LCBfdmVjMy55LCAwLCAwKSlcclxuICAgICAgICBfdmVjNC5tdWx0aXBseVNjYWxhcihwRGl2KVxyXG4gICAgICAgIF92ZWM0LmFwcGx5TWF0cml4NChpbnZQcm9qZWN0aW9uKVxyXG4gICAgICAgIF92ZWM0LmFwcGx5TWF0cml4NChpbnZWaWV3KVxyXG4gICAgICAgIF92ZWM0LmFwcGx5TWF0cml4NCh0ZXh0TWF0cml4SW52KVxyXG5cclxuICAgICAgICB0aGlzLl9jb2xsaXNpb25NZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uc2V0WFlaKFxyXG4gICAgICAgICAgaSxcclxuICAgICAgICAgIF92ZWM0LngsXHJcbiAgICAgICAgICBfdmVjNC55LFxyXG4gICAgICAgICAgX3ZlYzQuelxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NvbGxpc2lvbk1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHRoaXMuX2NvbGxpc2lvbk1lc2guZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KClcclxuICAgIHRoaXMuX2NvbGxpc2lvbk1lc2guZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKClcclxuXHJcbiAgICAvKiogTm8gbmVlZCB0byBtYW51YWxseSBjYWxsLiBfY29sbGlzaW9uTWVzaCBpcyBhIGNoaWxkIGFuZCB3aWxsIGdldCBhdXRvbWF0aWNhbGx5IHJheWNhc3RlZCAqL1xyXG4gICAgdGhpcy5fY29sbGlzaW9uTWVzaC5yYXljYXN0KHJheWNhc3RlciwgaW50ZXJzZWN0cylcclxuICAgIC8vIHN1cGVyLnJheWNhc3QocmF5Y2FzdGVyLCBpbnRlcnNlY3RzKVxyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgdGhlIGN1cnJlbnQgYm91bmRzIHJlcG9ydGVkIGJ5IHRyb2lrYSB0YWtpbmcgYGZvbnRTaXplYCBpbnRvIGFjY291bnQgKi9cclxuICBwcml2YXRlIHRleHRCb3VuZHNUb0JveCh0YXJnZXQ6IEJveDMgPSBuZXcgQm94MygpKTogQm94MyB7XHJcbiAgICBjb25zdCB7IHRleHRSZW5kZXJJbmZvIH0gPSB0aGlzXHJcbiAgICAvKiogdmlzaWJsZUJvdW5kcyBnZW5lcmFsbHkgaXMgYSBiZXR0ZXIgZml0LCAqaG93ZXZlciogaXQgcmVwb3J0cyBmYXVsdHkgb24gc29tZSBnbHlwaHMgYW5kIG1lc3NlcyB1cCB0aGUgdGV4dCBzaXplICovXHJcbiAgICBjb25zdCBib3VuZHMgPSB0ZXh0UmVuZGVySW5mby52aXNpYmxlQm91bmRzXHJcblxyXG4gICAgY29uc3QgdmVydGljZXMgPSBbXVxyXG4gICAgdmVydGljZXMucHVzaChcclxuICAgICAgYm91bmRzWzBdLFxyXG4gICAgICBib3VuZHNbM10sXHJcbiAgICAgIDAsXHJcbiAgICAgIGJvdW5kc1syXSxcclxuICAgICAgYm91bmRzWzNdLFxyXG4gICAgICAwLFxyXG4gICAgICBib3VuZHNbMF0sXHJcbiAgICAgIGJvdW5kc1sxXSxcclxuICAgICAgMCxcclxuICAgICAgYm91bmRzWzJdLFxyXG4gICAgICBib3VuZHNbMV0sXHJcbiAgICAgIDBcclxuICAgIClcclxuICAgIHRhcmdldC5zZXRGcm9tQXJyYXkodmVydGljZXMpXHJcblxyXG4gICAgcmV0dXJuIHRhcmdldFxyXG4gIH1cclxuXHJcbiAgLyoqIFRleHQncyBibG9ja0JvdW5kcywgdGhlIG9uZSB3ZSdyZSB3b3JraW5nIHdpdGggYm91bmRzLXdpc2UgaXMgbm90IGEgdW5pdCBxdWFkXHJcbiAgICAgIFdoZW4gdXNpbmcgQklMTEJPQVJEX1NDUkVFTiB3ZSBzdG9yZSB0aGUgZGVzaXJlZCBwaXhlbCBzaXplIGluIHRoZSB0ZXh0J3MgYGZvbnRTaXplYCBwcm9wZXJ0eVxyXG4gICAgICBUaGlzIG1ha2VzIHRyb2lrYSBjb21wdXRlIGEgbGFyZ2UgdGV4dCBzaW5jZSBpdCB0aGlua3Mgb3VyIHBpeGVscyBhcmUgd29ybGQgdW5pdHMuXHJcbiAgICAgIFNvIHdlIGRpdmlkZSB0aGUgdGV4dCBib3VuZHMgYnkgdGhlIGZvbnQgc2l6ZSB0byBnZXQgdGhlIHNpemUgb2YgdGhlIHVuaXQgdGV4dCBib3VuZHMsIG9yXHJcbiAgICAgIGFub3RoZXIgd2F5IG9mIHB1dHRpbmcgaXQsIHRvIGNvbXB1dGUgdGhlIHRleHQgYm91bmRzIHZhbHVlIGFzIGlmIGZvbnRTaXplID0gMVxyXG4gICAgICBGcm9tIHRoZSB1bml0IGJveCwgd2UgZ2V0IGl0J3Mgc2l6ZSBhbmQgY29tcHV0ZSBhIHdvcmxkLT5waXhlbCByYXRpbyB3aGljaCB3ZSBzZW5kIHRvIHRoZSBzaGFkZXJcclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZUJpbGxib2FyZGluZygpIHtcclxuICAgIHRoaXMubWF0ZXJpYWwuc2V0QmlsbGJvYXJkaW5nKHRoaXMuX3BhcmFtcy5iaWxsYm9hcmQpXHJcbiAgICB0aGlzLl9iYWNrZ3JvdW5kTWF0ZXJpYWwuc2V0QmlsbGJvYXJkaW5nKHRoaXMuX3BhcmFtcy5iaWxsYm9hcmQpXHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmFtcy5iaWxsYm9hcmQgPT09ICdzY3JlZW4nKSB7XHJcbiAgICAgIC8qKiBHZXQgdGhlIGN1cnJlbnQgYm91bmRzICovXHJcbiAgICAgIGNvbnN0IGJvdW5kcyA9IF9ib3gzLmNvcHkodGhpcy5fdGV4dEJvdW5kcylcclxuICAgICAgLyoqIFRoZSBmb250U2l6ZSBpcyB0aGUgcGl4ZWwgdmFsdWUgc28gd2Ugbm9ybWFsaXplICovXHJcbiAgICAgIGJvdW5kcy5taW4uZGl2aWRlU2NhbGFyKHRoaXMuZm9udFNpemUpXHJcbiAgICAgIGJvdW5kcy5tYXguZGl2aWRlU2NhbGFyKHRoaXMuZm9udFNpemUpXHJcbiAgICAgIC8qKiBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZSBxdWFkIGZvciB0aGUgcGFydGljdWxhciB0ZXh0IHZhbHVlICovXHJcbiAgICAgIGxldCB1bml0U2l6ZSA9IGJvdW5kcy5nZXRTaXplKF92ZWMzKVxyXG4gICAgICAvKiogV2UgbmVlZCB0byBrZWVwIGFzcGVjdCByYXRpbyBmb3IgdGV4dCAqL1xyXG4gICAgICB0aGlzLm1hdGVyaWFsLmJpbGxib2FyZFBpeGVsU2l6ZSA9IG5ldyBWZWN0b3IyKDEgLyB1bml0U2l6ZS55LCAxIC8gdW5pdFNpemUueSlcclxuICAgICAgLyoqIFNhbWUgdGhpbmcgZm9yIGJhY2tncm91bmQgKi9cclxuICAgICAgaWYgKCF0aGlzLl9iYWNrZ3JvdW5kLmdlb21ldHJ5LmJvdW5kaW5nQm94KVxyXG4gICAgICAgIHRoaXMuX2JhY2tncm91bmQuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KClcclxuICAgICAgY29uc3QgYmdCb3VuZHMgPSBuZXcgQm94MygpLmNvcHkodGhpcy5fYmFja2dyb3VuZC5nZW9tZXRyeS5ib3VuZGluZ0JveCBhcyBCb3gzKVxyXG4gICAgICBiZ0JvdW5kcy5taW4uZGl2aWRlU2NhbGFyKHRoaXMuZm9udFNpemUpXHJcbiAgICAgIGJnQm91bmRzLm1heC5kaXZpZGVTY2FsYXIodGhpcy5mb250U2l6ZSlcclxuICAgICAgdW5pdFNpemUgPSBiZ0JvdW5kcy5nZXRTaXplKF92ZWMzKVxyXG5cclxuICAgICAgY29uc3QgbWFyZ2lucyA9IG5ldyBWZWN0b3IyKFxyXG4gICAgICAgIHRoaXMuX3BhcmFtcy5iYWNrZ3JvdW5kTWFyZ2lucz8ueCA/PyAwLFxyXG4gICAgICAgIHRoaXMuX3BhcmFtcy5iYWNrZ3JvdW5kTWFyZ2lucz8ueSA/PyAwXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5fYmFja2dyb3VuZE1hdGVyaWFsLmJpbGxib2FyZFBpeGVsU2l6ZSA9IG5ldyBWZWN0b3IyKFxyXG4gICAgICAgIDEgLyB1bml0U2l6ZS55ICsgKG1hcmdpbnMueCAqICgxIC8gdW5pdFNpemUueCkpIC8gdGhpcy5mb250U2l6ZSxcclxuICAgICAgICAxIC8gdW5pdFNpemUueSArIChtYXJnaW5zLnkgKiAoMSAvIHVuaXRTaXplLnkpKSAvIHRoaXMuZm9udFNpemVcclxuICAgICAgKVxyXG5cclxuICAgICAgY29uc3QgYmlsbGJvYXJkUGl4ZWxPZmZzZXQgPSBuZXcgVmVjdG9yMigwLCAwKVxyXG4gICAgICBzd2l0Y2ggKHRoaXMuYW5jaG9yWCkge1xyXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICAgICAgYmlsbGJvYXJkUGl4ZWxPZmZzZXQueCA9IC1tYXJnaW5zLnggKiAwLjVcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAncmlnaHQnOlxyXG4gICAgICAgICAgYmlsbGJvYXJkUGl4ZWxPZmZzZXQueCA9IG1hcmdpbnMueCAqIDAuNVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoICh0aGlzLmFuY2hvclkpIHtcclxuICAgICAgICBjYXNlICd0b3AnOlxyXG4gICAgICAgICAgYmlsbGJvYXJkUGl4ZWxPZmZzZXQueSA9IC1tYXJnaW5zLnkgKiAwLjVcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgICAgIGJpbGxib2FyZFBpeGVsT2Zmc2V0LnggPSBtYXJnaW5zLnkgKiAwLjVcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fYmFja2dyb3VuZE1hdGVyaWFsLmJpbGxib2FyZFBpeGVsT2Zmc2V0ID0gYmlsbGJvYXJkUGl4ZWxPZmZzZXRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQmFja2dyb3VuZCgpIHtcclxuICAgIGlmICghdGhpcy5fcGFyYW1zLmJhY2tncm91bmRDb2xvcikge1xyXG4gICAgICBpZiAodGhpcy5fYmFja2dyb3VuZCkge1xyXG4gICAgICAgIHRoaXMuX2JhY2tncm91bmQuZ2VvbWV0cnkuZGlzcG9zZSgpXHJcbiAgICAgICAgdGhpcy5yZW1vdmUodGhpcy5fYmFja2dyb3VuZClcclxuICAgICAgfVxyXG4gICAgICByZXR1cm5cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2JhY2tncm91bmQucGFyZW50KSB7XHJcbiAgICAgIHRoaXMuYWRkKHRoaXMuX2JhY2tncm91bmQpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYm94ID0gX2JveDMuY29weSh0aGlzLl90ZXh0Qm91bmRzKVxyXG4gICAgY29uc3Qgb2Zmc2V0ID0gYm94LmdldENlbnRlcihuZXcgVmVjdG9yMygpKVxyXG4gICAgY29uc3QgYm94U2l6ZSA9IGJveC5nZXRTaXplKG5ldyBWZWN0b3IzKCkpXHJcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLmZvbnRTaXplICogKHRoaXMuX3BhcmFtcy5iYWNrZ3JvdW5kQ29ybmVyUmFkaXVzID8/IDApXHJcbiAgICBjb25zdCBtYXJnaW5zID1cclxuICAgICAgdGhpcy5fcGFyYW1zLmJpbGxib2FyZCAhPT0gJ3NjcmVlbidcclxuICAgICAgICA/IHRoaXMuX3BhcmFtcy5iYWNrZ3JvdW5kTWFyZ2lucyA/PyBuZXcgVmVjdG9yMigpXHJcbiAgICAgICAgOiBuZXcgVmVjdG9yMigpXHJcblxyXG4gICAgaWYgKCFib3guaXNJbmZpbml0ZUJveCgpKSB7XHJcbiAgICAgIGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5SZWN0YW5nbGVSb3VuZGVkKFxyXG4gICAgICAgIG9mZnNldCxcclxuICAgICAgICBib3hTaXplLnggKyBtYXJnaW5zLngsXHJcbiAgICAgICAgYm94U2l6ZS55ICsgbWFyZ2lucy55LFxyXG4gICAgICAgIHJhZGl1cyxcclxuICAgICAgICA1XHJcbiAgICAgIClcclxuICAgICAgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KClcclxuICAgICAgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKClcclxuICAgICAgdGhpcy5fYmFja2dyb3VuZC5nZW9tZXRyeSA9IGdlb21ldHJ5XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sb3IgPSBuZXcgQ29sb3IodGhpcy5fcGFyYW1zLmJhY2tncm91bmRDb2xvcikuY29udmVydFNSR0JUb0xpbmVhcigpXHJcbiAgICA7KHRoaXMuX2JhY2tncm91bmQubWF0ZXJpYWwgYXMgU3BlY2tsZUJhc2ljTWF0ZXJpYWwpLmNvbG9yID0gY29sb3JcclxuICB9XHJcblxyXG4gIC8qKiBJbXByb3ZlZCB2ZXJzaW9uIG9mIGh0dHBzOi8vZGlzY291cnNlLnRocmVlanMub3JnL3Qvcm91bmRlZHJlY3RhbmdsZS1zcXVpcmNsZS8yODY0NSBieSB3YXkgb2YgdGhlIHZpYmUgKi9cclxuICBwcml2YXRlIFJlY3RhbmdsZVJvdW5kZWQoXHJcbiAgICBvZmZzZXQ6IFZlY3RvcjMsXHJcbiAgICB3OiBudW1iZXIsXHJcbiAgICBoOiBudW1iZXIsXHJcbiAgICByOiBudW1iZXIsXHJcbiAgICBzOiBudW1iZXIsXHJcbiAgICBpbnNldCA9IGZhbHNlXHJcbiAgKTogQnVmZmVyR2VvbWV0cnkge1xyXG4gICAgY29uc3QgcG9zaXRpb25zOiBudW1iZXJbXSA9IFtdXHJcbiAgICBjb25zdCB1dnM6IG51bWJlcltdID0gW11cclxuICAgIGNvbnN0IGluZGljZXM6IG51bWJlcltdID0gW11cclxuXHJcbiAgICBpZiAoaW5zZXQpIHtcclxuICAgICAgbGV0IG1heEluc2V0ID0gMFxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBzOyBpKyspIHtcclxuICAgICAgICBjb25zdCBhbmdsZSA9IChNYXRoLlBJIC8gMikgKiAoaSAvIChzICsgMSkpXHJcbiAgICAgICAgY29uc3QgeCA9IHIgKiBNYXRoLmNvcyhhbmdsZSlcclxuICAgICAgICBjb25zdCBpbnNldCA9IHIgLSB4XHJcbiAgICAgICAgaWYgKGluc2V0ID4gbWF4SW5zZXQpIG1heEluc2V0ID0gaW5zZXRcclxuICAgICAgfVxyXG4gICAgICB3ICs9IDIgKiBtYXhJbnNldFxyXG4gICAgfVxyXG4gICAgY29uc3QgcmFkaXVzID0gTWF0aC5taW4ociwgdyAvIDIsIGggLyAyKVxyXG4gICAgY29uc3Qgc2VnbWVudHNQZXJDb3JuZXIgPSBzICsgMVxyXG4gICAgY29uc3QgcG9pbnRzUGVyQ29ybmVyID0gc2VnbWVudHNQZXJDb3JuZXIgKyAxXHJcbiAgICBjb25zdCB0b3RhbFBvaW50cyA9IHBvaW50c1BlckNvcm5lciAqIDRcclxuXHJcbiAgICBwb3NpdGlvbnMucHVzaChvZmZzZXQueCwgb2Zmc2V0LnksIDApXHJcbiAgICB1dnMucHVzaCgwLjUsIDAuNSlcclxuXHJcbiAgICBjb25zdCBjb3JuZXJzID0gW1xyXG4gICAgICB7IGN4OiB3IC8gMiAtIHJhZGl1cywgY3k6IGggLyAyIC0gcmFkaXVzLCBhbmdsZVN0YXJ0OiAwIH0sXHJcbiAgICAgIHsgY3g6IC13IC8gMiArIHJhZGl1cywgY3k6IGggLyAyIC0gcmFkaXVzLCBhbmdsZVN0YXJ0OiBNYXRoLlBJIC8gMiB9LFxyXG4gICAgICB7IGN4OiAtdyAvIDIgKyByYWRpdXMsIGN5OiAtaCAvIDIgKyByYWRpdXMsIGFuZ2xlU3RhcnQ6IE1hdGguUEkgfSxcclxuICAgICAgeyBjeDogdyAvIDIgLSByYWRpdXMsIGN5OiAtaCAvIDIgKyByYWRpdXMsIGFuZ2xlU3RhcnQ6ICgzICogTWF0aC5QSSkgLyAyIH1cclxuICAgIF1cclxuXHJcbiAgICBmb3IgKGxldCBjb3JuZXIgPSAwOyBjb3JuZXIgPCA0OyBjb3JuZXIrKykge1xyXG4gICAgICBjb25zdCB7IGN4LCBjeSwgYW5nbGVTdGFydCB9ID0gY29ybmVyc1tjb3JuZXJdXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHNlZ21lbnRzUGVyQ29ybmVyOyBpKyspIHtcclxuICAgICAgICBjb25zdCBhbmdsZSA9IGFuZ2xlU3RhcnQgKyAoTWF0aC5QSSAvIDIpICogKGkgLyBzZWdtZW50c1BlckNvcm5lcilcclxuICAgICAgICBjb25zdCB4ID0gY3ggKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSlcclxuICAgICAgICBjb25zdCB5ID0gY3kgKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSlcclxuXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gob2Zmc2V0LnggKyB4LCBvZmZzZXQueSArIHksIDApXHJcbiAgICAgICAgdXZzLnB1c2goMC41ICsgeCAvIHcsIDAuNSArIHkgLyBoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdG90YWxQb2ludHM7IGkrKykge1xyXG4gICAgICBjb25zdCBuZXh0ID0gaSA8IHRvdGFsUG9pbnRzID8gaSArIDEgOiAxXHJcbiAgICAgIGluZGljZXMucHVzaCgwLCBpLCBuZXh0KVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KClcclxuICAgIGdlb21ldHJ5LnNldEluZGV4KG5ldyBVaW50MTZCdWZmZXJBdHRyaWJ1dGUoaW5kaWNlcywgMSkpXHJcbiAgICBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25zLCAzKSlcclxuICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh1dnMsIDIpKVxyXG4gICAgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KClcclxuXHJcbiAgICByZXR1cm4gZ2VvbWV0cnlcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBDYW1lcmEsXHJcbiAgQ2lyY2xlR2VvbWV0cnksXHJcbiAgQ29sb3IsXHJcbiAgRHluYW1pY0RyYXdVc2FnZSxcclxuICBHcm91cCxcclxuICBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSxcclxuICBNYXRlcmlhbCxcclxuICBNYXRoVXRpbHMsXHJcbiAgTWVzaCxcclxuICBPcnRob2dyYXBoaWNDYW1lcmEsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgUGxhbmUsXHJcbiAgUXVhdGVybmlvbixcclxuICBSYXljYXN0ZXIsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzLFxyXG4gIHR5cGUgSW50ZXJzZWN0aW9uXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IExpbmVTZWdtZW50czIgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbGluZXMvTGluZVNlZ21lbnRzMi5qcydcclxuaW1wb3J0IHsgTGluZVNlZ21lbnRzR2VvbWV0cnkgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbGluZXMvTGluZVNlZ21lbnRzR2VvbWV0cnkuanMnXHJcbmltcG9ydCB7IEdlb21ldHJ5IH0gZnJvbSAnLi4vLi4vY29udmVydGVyL0dlb21ldHJ5LmpzJ1xyXG5pbXBvcnQgU3BlY2tsZUxpbmVNYXRlcmlhbCBmcm9tICcuLi8uLi9tYXRlcmlhbHMvU3BlY2tsZUxpbmVNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgVGV4dExhYmVsLCBUZXh0TGFiZWxQYXJhbXMgfSBmcm9tICcuLi8uLi9vYmplY3RzL1RleHRMYWJlbC5qcydcclxuaW1wb3J0IFNwZWNrbGVCYXNpY01hdGVyaWFsIGZyb20gJy4uLy4uL21hdGVyaWFscy9TcGVja2xlQmFzaWNNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vLi4vSVZpZXdlci5qcydcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGUge1xyXG4gIGRhc2hlZExpbmU/OiBib29sZWFuXHJcbiAgbm9ybWFsSW5kaWNhdG9yUGl4ZWxTaXplPzogbnVtYmVyXHJcbiAgbm9ybWFsSW5kaWNhdG9yQ29sb3I/OiBudW1iZXJcclxuICBub3JtYWxJbmRpY2F0b3JPcGFjaXR5PzogbnVtYmVyXHJcbiAgbGluZUNvbG9yPzogbnVtYmVyXHJcbiAgbGluZU9wYWNpdHk/OiBudW1iZXJcclxuICBwb2ludENvbG9yPzogbnVtYmVyXHJcbiAgcG9pbnRPcGFjaXR5PzogbnVtYmVyXHJcbiAgdGV4dENvbG9yPzogbnVtYmVyXHJcbiAgdGV4dE9wYWNpdHk/OiBudW1iZXJcclxuICB0ZXh0UGl4ZWxIZWlnaHQ/OiBudW1iZXJcclxuICBwb2ludFBpeGVsSGVpZ2h0PzogbnVtYmVyXHJcbn1cclxuY29uc3QgX3ZlYzMwOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuY29uc3QgRGVmYXVsdE1lYXN1cmVtZW50UG9pbnRHaXptb1N0eWxlID0ge1xyXG4gIGRhc2hlZExpbmU6IGZhbHNlLFxyXG4gIG5vcm1hbEluZGljYXRvclBpeGVsU2l6ZTogNDAsXHJcbiAgbm9ybWFsSW5kaWNhdG9yQ29sb3I6IDB4MDQ3ZWZiLFxyXG4gIG5vcm1hbEluZGljYXRvck9wYWNpdHk6IDEsXHJcbiAgbGluZUNvbG9yOiAweDA0N2VmYixcclxuICBsaW5lT3BhY2l0eTogMSxcclxuICBwb2ludENvbG9yOiAweDA0N2VmYixcclxuICBwb2ludE9wYWNpdHk6IDEsXHJcbiAgdGV4dENvbG9yOiAweGZmZmZmZixcclxuICB0ZXh0T3BhY2l0eTogMSxcclxuICB0ZXh0UGl4ZWxIZWlnaHQ6IDExLFxyXG4gIHBvaW50UGl4ZWxIZWlnaHQ6IDVcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1lYXN1cmVtZW50UG9pbnRHaXptbyBleHRlbmRzIEdyb3VwIHtcclxuICBwdWJsaWMgbm9ybWFsSW5kaWNhdG9yOiBMaW5lU2VnbWVudHMyXHJcbiAgcHJpdmF0ZSBub3JtYWxJbmRpY2F0b3JCdWZmZXI6IEZsb2F0NjRBcnJheSA9IG5ldyBGbG9hdDY0QXJyYXkoMjQpXHJcbiAgcHJpdmF0ZSBub3JtYWxJbmRpY2F0b3JOb3JtYWw6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJpdmF0ZSBub3JtYWxJbmRpY2F0b3JUYW5nZW50OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHByaXZhdGUgbm9ybWFsSW5kaWNhdG9yQml0YW5nZW50OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuICBwdWJsaWMgbGluZTogTGluZVNlZ21lbnRzMlxyXG4gIHB1YmxpYyBwb2ludDogTWVzaDxDaXJjbGVHZW9tZXRyeSwgU3BlY2tsZUJhc2ljTWF0ZXJpYWw+XHJcbiAgcHVibGljIHRleHQ6IFRleHRMYWJlbFxyXG5cclxuICBwcml2YXRlIF9zdHlsZTogTWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGUgPSBPYmplY3QuYXNzaWduKFxyXG4gICAge30sXHJcbiAgICBEZWZhdWx0TWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGVcclxuICApXHJcblxyXG4gIHB1YmxpYyBzZXQgc3R5bGUodmFsdWU6IE1lYXN1cmVtZW50UG9pbnRHaXptb1N0eWxlKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3N0eWxlLCB2YWx1ZSlcclxuICAgIHRoaXMudXBkYXRlU3R5bGUoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBoaWdobGlnaHQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLm5vcm1hbEluZGljYXRvci5tYXRlcmlhbC5jb2xvciA9IG5ldyBDb2xvcigweGZmMDAwMClcclxuICAgICAgdGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yID0gbmV3IENvbG9yKDB4ZmYwMDAwKVxyXG4gICAgICB0aGlzLnBvaW50Lm1hdGVyaWFsLmNvbG9yID0gbmV3IENvbG9yKDB4ZmYwMDAwKVxyXG4gICAgICB0aGlzLnRleHQubWF0ZXJpYWwuY29sb3IuY29weShuZXcgQ29sb3IoMHhmZjAwMDApKVxyXG4gICAgfSBlbHNlIHRoaXMudXBkYXRlU3R5bGUoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXROb3JtYWxJbmRpY2F0b3JNYXRlcmlhbCgpIHtcclxuICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFNwZWNrbGVMaW5lTWF0ZXJpYWwoXHJcbiAgICAgIHtcclxuICAgICAgICBjb2xvcjogMHgwNDdlZmIsXHJcbiAgICAgICAgbGluZXdpZHRoOiAxLFxyXG4gICAgICAgIHdvcmxkVW5pdHM6IGZhbHNlLFxyXG4gICAgICAgIHZlcnRleENvbG9yczogZmFsc2UsXHJcbiAgICAgICAgYWxwaGFUb0NvdmVyYWdlOiBmYWxzZSxcclxuICAgICAgICByZXNvbHV0aW9uOiBuZXcgVmVjdG9yMigxLCAxKVxyXG4gICAgICB9LFxyXG4gICAgICBbJ1VTRV9SVEUnXVxyXG4gICAgKVxyXG4gICAgbWF0ZXJpYWwuY29sb3IgPSBuZXcgQ29sb3IodGhpcy5fc3R5bGUubm9ybWFsSW5kaWNhdG9yQ29sb3IpXHJcbiAgICBtYXRlcmlhbC5jb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuICAgIG1hdGVyaWFsLnRvbmVNYXBwZWQgPSBmYWxzZVxyXG4gICAgbWF0ZXJpYWwubGluZXdpZHRoID0gMlxyXG4gICAgbWF0ZXJpYWwud29ybGRVbml0cyA9IGZhbHNlXHJcbiAgICBtYXRlcmlhbC5yZXNvbHV0aW9uID0gbmV3IFZlY3RvcjIoMjU2LCAyNTYpXHJcbiAgICBtYXRlcmlhbC5vcGFjaXR5ID1cclxuICAgICAgdGhpcy5fc3R5bGUubm9ybWFsSW5kaWNhdG9yT3BhY2l0eSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyB0aGlzLl9zdHlsZS5ub3JtYWxJbmRpY2F0b3JPcGFjaXR5XHJcbiAgICAgICAgOiBEZWZhdWx0TWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGUubm9ybWFsSW5kaWNhdG9yT3BhY2l0eVxyXG4gICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBtYXRlcmlhbC5vcGFjaXR5IDwgMVxyXG4gICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gZmFsc2VcclxuICAgIHJldHVybiBtYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMaW5lTWF0ZXJpYWwoKSB7XHJcbiAgICBjb25zdCBsaW5lTWF0ZXJpYWwgPSBuZXcgU3BlY2tsZUxpbmVNYXRlcmlhbChcclxuICAgICAge1xyXG4gICAgICAgIGNvbG9yOiAweDA0N2VmYixcclxuICAgICAgICBsaW5ld2lkdGg6IDEsXHJcbiAgICAgICAgd29ybGRVbml0czogZmFsc2UsXHJcbiAgICAgICAgdmVydGV4Q29sb3JzOiBmYWxzZSxcclxuICAgICAgICBhbHBoYVRvQ292ZXJhZ2U6IGZhbHNlLFxyXG4gICAgICAgIHJlc29sdXRpb246IG5ldyBWZWN0b3IyKDEsIDEpXHJcbiAgICAgIH0sXHJcbiAgICAgIFsnVVNFX1JURScsICdVTklGT1JNX09QQUNJVFknXS5jb25jYXQodGhpcy5fc3R5bGUuZGFzaGVkTGluZSA/IFsnVVNFX0RBU0gnXSA6IFtdKVxyXG4gICAgKVxyXG4gICAgbGluZU1hdGVyaWFsLmNvbG9yID0gbmV3IENvbG9yKHRoaXMuX3N0eWxlLmxpbmVDb2xvcilcclxuICAgIGxpbmVNYXRlcmlhbC5jb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuICAgIGxpbmVNYXRlcmlhbC50b25lTWFwcGVkID0gZmFsc2VcclxuICAgIGlmICh0aGlzLl9zdHlsZS5kYXNoZWRMaW5lKSB7XHJcbiAgICAgIGxpbmVNYXRlcmlhbC5kYXNoU2l6ZSA9IDFcclxuICAgICAgbGluZU1hdGVyaWFsLmdhcFNpemUgPSAxXHJcbiAgICAgIGxpbmVNYXRlcmlhbC5kYXNoU2NhbGUgPSAxMFxyXG4gICAgfVxyXG4gICAgbGluZU1hdGVyaWFsLmxpbmV3aWR0aCA9IDJcclxuICAgIGxpbmVNYXRlcmlhbC53b3JsZFVuaXRzID0gZmFsc2VcclxuICAgIGxpbmVNYXRlcmlhbC5yZXNvbHV0aW9uID0gbmV3IFZlY3RvcjIoMjU2LCAyNTYpXHJcbiAgICBsaW5lTWF0ZXJpYWwub3BhY2l0eSA9XHJcbiAgICAgIHRoaXMuX3N0eWxlLmxpbmVPcGFjaXR5ICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IHRoaXMuX3N0eWxlLmxpbmVPcGFjaXR5XHJcbiAgICAgICAgOiBEZWZhdWx0TWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGUubGluZU9wYWNpdHlcclxuICAgIGxpbmVNYXRlcmlhbC50cmFuc3BhcmVudCA9IGxpbmVNYXRlcmlhbC5vcGFjaXR5IDwgMVxyXG4gICAgbGluZU1hdGVyaWFsLmRlcHRoVGVzdCA9IGZhbHNlXHJcbiAgICByZXR1cm4gbGluZU1hdGVyaWFsXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBvaW50TWF0ZXJpYWwoY29sb3I/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFNwZWNrbGVCYXNpY01hdGVyaWFsKFxyXG4gICAgICB7IGNvbG9yOiBjb2xvciA/IGNvbG9yIDogdGhpcy5fc3R5bGUucG9pbnRDb2xvciB9LFxyXG4gICAgICBbJ0JJTExCT0FSRF9TQ1JFRU4nXVxyXG4gICAgKVxyXG4gICAgbWF0ZXJpYWwub3BhY2l0eSA9XHJcbiAgICAgIHRoaXMuX3N0eWxlLnBvaW50T3BhY2l0eSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyB0aGlzLl9zdHlsZS5wb2ludE9wYWNpdHlcclxuICAgICAgICA6IERlZmF1bHRNZWFzdXJlbWVudFBvaW50R2l6bW9TdHlsZS5wb2ludE9wYWNpdHlcclxuICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gbWF0ZXJpYWwub3BhY2l0eSA8IDFcclxuICAgIG1hdGVyaWFsLmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG4gICAgbWF0ZXJpYWwudG9uZU1hcHBlZCA9IGZhbHNlXHJcbiAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSBmYWxzZVxyXG4gICAgY29uc3QgYmlsbGJvYXJkU2l6ZSA9XHJcbiAgICAgICh0aGlzLl9zdHlsZS5wb2ludFBpeGVsSGVpZ2h0ICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IHRoaXMuX3N0eWxlLnBvaW50UGl4ZWxIZWlnaHRcclxuICAgICAgICA6IERlZmF1bHRNZWFzdXJlbWVudFBvaW50R2l6bW9TdHlsZS5wb2ludFBpeGVsSGVpZ2h0KSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvXHJcbiAgICBtYXRlcmlhbC5iaWxsYm9hcmRQaXhlbFNpemUgPSBuZXcgVmVjdG9yMihiaWxsYm9hcmRTaXplLCBiaWxsYm9hcmRTaXplKVxyXG5cclxuICAgIHJldHVybiBtYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHN0eWxlPzogTWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGUpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMubGF5ZXJzLnNldChPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTKVxyXG5cclxuICAgIGNvbnN0IG5vcm1hbEluZGljYXRvckdlb21ldHJ5ID0gbmV3IExpbmVTZWdtZW50c0dlb21ldHJ5KClcclxuICAgIG5vcm1hbEluZGljYXRvckdlb21ldHJ5LnNldFBvc2l0aW9ucyhcclxuICAgICAgbmV3IEZsb2F0MzJBcnJheSh0aGlzLm5vcm1hbEluZGljYXRvckJ1ZmZlci5sZW5ndGgpXHJcbiAgICApXHJcbiAgICA7KFxyXG4gICAgICBub3JtYWxJbmRpY2F0b3JHZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZVN0YXJ0J10gYXMgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGVcclxuICAgICkuZGF0YS5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKVxyXG5cclxuICAgIEdlb21ldHJ5LnVwZGF0ZVJURUdlb21ldHJ5KG5vcm1hbEluZGljYXRvckdlb21ldHJ5LCB0aGlzLm5vcm1hbEluZGljYXRvckJ1ZmZlcilcclxuXHJcbiAgICB0aGlzLm5vcm1hbEluZGljYXRvciA9IG5ldyBMaW5lU2VnbWVudHMyKG5vcm1hbEluZGljYXRvckdlb21ldHJ5LCB1bmRlZmluZWQpXHJcbiAgICB0aGlzLm5vcm1hbEluZGljYXRvci5jb21wdXRlTGluZURpc3RhbmNlcygpXHJcbiAgICB0aGlzLm5vcm1hbEluZGljYXRvci5uYW1lID0gYHRlc3QtbWVzdXJlbWVudHMtbm9ybWFsLWluZGljYXRvcmBcclxuICAgIHRoaXMubm9ybWFsSW5kaWNhdG9yLmZydXN0dW1DdWxsZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5ub3JtYWxJbmRpY2F0b3IubGF5ZXJzLnNldChPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTKVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBGbG9hdDY0QXJyYXkoMTgpXHJcbiAgICBjb25zdCBsaW5lR2VvbWV0cnkgPSBuZXcgTGluZVNlZ21lbnRzR2VvbWV0cnkoKVxyXG4gICAgbGluZUdlb21ldHJ5LnNldFBvc2l0aW9ucyhuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlcikpXHJcbiAgICA7KFxyXG4gICAgICBsaW5lR2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydCddIGFzIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlXHJcbiAgICApLmRhdGEuc2V0VXNhZ2UoRHluYW1pY0RyYXdVc2FnZSlcclxuXHJcbiAgICBHZW9tZXRyeS51cGRhdGVSVEVHZW9tZXRyeShsaW5lR2VvbWV0cnksIGJ1ZmZlcilcclxuXHJcbiAgICB0aGlzLmxpbmUgPSBuZXcgTGluZVNlZ21lbnRzMihsaW5lR2VvbWV0cnksIHVuZGVmaW5lZClcclxuICAgIHRoaXMubGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpXHJcbiAgICB0aGlzLmxpbmUubmFtZSA9IGB0ZXN0LW1lc3VyZW1lbnRzLWxpbmVgXHJcbiAgICB0aGlzLmxpbmUuZnJ1c3R1bUN1bGxlZCA9IGZhbHNlXHJcbiAgICB0aGlzLmxpbmUucmVuZGVyT3JkZXIgPSAwXHJcbiAgICB0aGlzLmxpbmUubGF5ZXJzLnNldChPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTKVxyXG5cclxuICAgIGNvbnN0IHNwaGVyZUdlb21ldHJ5ID0gbmV3IENpcmNsZUdlb21ldHJ5KDEsIDE2KVxyXG5cclxuICAgIHRoaXMucG9pbnQgPSBuZXcgTWVzaChzcGhlcmVHZW9tZXRyeSlcclxuICAgIHRoaXMucG9pbnQubGF5ZXJzLnNldChPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTKVxyXG4gICAgdGhpcy5wb2ludC52aXNpYmxlID0gZmFsc2VcclxuICAgIHRoaXMucG9pbnQucmVuZGVyT3JkZXIgPSAxXHJcblxyXG4gICAgY29uc3QgcG9pbnQyID0gbmV3IE1lc2goc3BoZXJlR2VvbWV0cnksIHRoaXMuZ2V0UG9pbnRNYXRlcmlhbCgweGZmZmZmZikpXHJcbiAgICBwb2ludDIucmVuZGVyT3JkZXIgPSAyXHJcbiAgICBjb25zdCBwaXhlbFNpemUgPVxyXG4gICAgICAodGhpcy5fc3R5bGUucG9pbnRQaXhlbEhlaWdodCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyB0aGlzLl9zdHlsZS5wb2ludFBpeGVsSGVpZ2h0XHJcbiAgICAgICAgOiBEZWZhdWx0TWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGUucG9pbnRQaXhlbEhlaWdodCkgKlxyXG4gICAgICAgIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIC1cclxuICAgICAgMiAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvXHJcbiAgICBwb2ludDIubWF0ZXJpYWwuYmlsbGJvYXJkUGl4ZWxTaXplID0gbmV3IFZlY3RvcjIocGl4ZWxTaXplLCBwaXhlbFNpemUpXHJcbiAgICBwb2ludDIubGF5ZXJzLnNldChPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTKVxyXG4gICAgdGhpcy5wb2ludC5hZGQocG9pbnQyKVxyXG5cclxuICAgIHRoaXMudGV4dCA9IG5ldyBUZXh0TGFiZWwoe1xyXG4gICAgICB0ZXh0Q29sb3I6IG5ldyBDb2xvcih0aGlzLl9zdHlsZS50ZXh0Q29sb3IpLFxyXG4gICAgICBmb250U2l6ZTpcclxuICAgICAgICB0aGlzLl9zdHlsZS50ZXh0UGl4ZWxIZWlnaHQgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgPyB0aGlzLl9zdHlsZS50ZXh0UGl4ZWxIZWlnaHRcclxuICAgICAgICAgIDogRGVmYXVsdE1lYXN1cmVtZW50UG9pbnRHaXptb1N0eWxlLnRleHRQaXhlbEhlaWdodCxcclxuICAgICAgdGV4dE9wYWNpdHk6XHJcbiAgICAgICAgdGhpcy5fc3R5bGUudGV4dE9wYWNpdHkgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgPyB0aGlzLl9zdHlsZS50ZXh0T3BhY2l0eVxyXG4gICAgICAgICAgOiBEZWZhdWx0TWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGUudGV4dE9wYWNpdHksXHJcbiAgICAgIGJpbGxib2FyZDogJ3NjcmVlbicsXHJcbiAgICAgIGFuY2hvclg6ICdjZW50ZXInLFxyXG4gICAgICBhbmNob3JZOiAnbWlkZGxlJyxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBuZXcgQ29sb3IoMHgwNDdlZmIpLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29ybmVyUmFkaXVzOiAwLjMsXHJcbiAgICAgIGJhY2tncm91bmRNYXJnaW5zOiBuZXcgVmVjdG9yMigzMCwgMTApLFxyXG4gICAgICBvYmplY3RMYXllcjogT2JqZWN0TGF5ZXJzLk1FQVNVUkVNRU5UU1xyXG4gICAgfSlcclxuICAgIHRoaXMudGV4dC5tYXRlcmlhbC5kZXB0aFRlc3QgPSBmYWxzZVxyXG4gICAgdGhpcy50ZXh0LmRlcHRoT2Zmc2V0ID0gLTAuMVxyXG5cclxuICAgIHRoaXMuYWRkKHRoaXMucG9pbnQpXHJcbiAgICB0aGlzLmFkZCh0aGlzLm5vcm1hbEluZGljYXRvcilcclxuICAgIHRoaXMuYWRkKHRoaXMubGluZSlcclxuICAgIHRoaXMuYWRkKHRoaXMudGV4dClcclxuXHJcbiAgICB0aGlzLnN0eWxlID0gc3R5bGUgPyBzdHlsZSA6IERlZmF1bHRNZWFzdXJlbWVudFBvaW50R2l6bW9TdHlsZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGVuYWJsZShcclxuICAgIG5vcm1hbEluZGljYXRvcjogYm9vbGVhbixcclxuICAgIGxpbmU6IGJvb2xlYW4sXHJcbiAgICBwb2ludDogYm9vbGVhbixcclxuICAgIHRleHQ6IGJvb2xlYW5cclxuICApIHtcclxuICAgIHRoaXMubm9ybWFsSW5kaWNhdG9yLnZpc2libGUgPSBub3JtYWxJbmRpY2F0b3JcclxuICAgIHRoaXMubGluZS52aXNpYmxlID0gbGluZVxyXG4gICAgdGhpcy5wb2ludC52aXNpYmxlID0gcG9pbnRcclxuICAgIHRoaXMudGV4dC52aXNpYmxlID0gdGV4dFxyXG4gICAgdGhpcy50ZXh0LnRleHRNZXNoLnZpc2libGUgPSB0ZXh0XHJcbiAgICB0aGlzLmxpbmUubWF0ZXJpYWwudmlzaWJsZSA9IGxpbmVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmcmFtZVVwZGF0ZShjYW1lcmE6IENhbWVyYSwgc2l6ZTogVmVjdG9yMikge1xyXG4gICAgbGV0IGhhbGZTaXplOiBudW1iZXIgPSAwXHJcbiAgICBjb25zdCBwaXhlbFNpemUgPVxyXG4gICAgICB0aGlzLl9zdHlsZS5ub3JtYWxJbmRpY2F0b3JQaXhlbFNpemUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgID8gdGhpcy5fc3R5bGUubm9ybWFsSW5kaWNhdG9yUGl4ZWxTaXplXHJcbiAgICAgICAgOiBEZWZhdWx0TWVhc3VyZW1lbnRQb2ludEdpem1vU3R5bGUubm9ybWFsSW5kaWNhdG9yUGl4ZWxTaXplXHJcbiAgICBpZiAoY2FtZXJhIGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgY29uc3QgZGlzdGFuY2UgPSBjYW1lcmEucG9zaXRpb24uZGlzdGFuY2VUbyh0aGlzLm5vcm1hbEluZGljYXRvci5wb3NpdGlvbilcclxuICAgICAgY29uc3QgZm92ID0gTWF0aFV0aWxzLmRlZ1RvUmFkKGNhbWVyYS5mb3YpXHJcbiAgICAgIGNvbnN0IHNjcmVlbkhlaWdodFdvcmxkID0gMiAqIGRpc3RhbmNlICogTWF0aC50YW4oZm92IC8gMilcclxuICAgICAgY29uc3Qgd29ybGRVbml0c1BlclBpeGVsID0gc2NyZWVuSGVpZ2h0V29ybGQgLyBzaXplLnlcclxuICAgICAgaGFsZlNpemUgPSAocGl4ZWxTaXplICogd29ybGRVbml0c1BlclBpeGVsKSAvIDJcclxuICAgIH0gZWxzZSBpZiAoY2FtZXJhIGluc3RhbmNlb2YgT3J0aG9ncmFwaGljQ2FtZXJhKSB7XHJcbiAgICAgIGNvbnN0IHdvcmxkSGVpZ2h0ID0gY2FtZXJhLnRvcCAtIGNhbWVyYS5ib3R0b21cclxuICAgICAgY29uc3Qgd29ybGRVbml0c1BlclBpeGVsID0gd29ybGRIZWlnaHQgLyBzaXplLnlcclxuICAgICAgaGFsZlNpemUgPSAocGl4ZWxTaXplICogd29ybGRVbml0c1BlclBpeGVsKSAvIDJcclxuICAgIH1cclxuXHJcbiAgICBfdmVjMzBcclxuICAgICAgLmNvcHkodGhpcy5ub3JtYWxJbmRpY2F0b3IucG9zaXRpb24pXHJcbiAgICAgIC5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWxJbmRpY2F0b3JUYW5nZW50LCBoYWxmU2l6ZSlcclxuICAgICAgLmFkZFNjYWxlZFZlY3Rvcih0aGlzLm5vcm1hbEluZGljYXRvckJpdGFuZ2VudCwgLWhhbGZTaXplKVxyXG4gICAgX3ZlYzMwLnRvQXJyYXkodGhpcy5ub3JtYWxJbmRpY2F0b3JCdWZmZXIsIDApXHJcblxyXG4gICAgX3ZlYzMwXHJcbiAgICAgIC5jb3B5KHRoaXMubm9ybWFsSW5kaWNhdG9yLnBvc2l0aW9uKVxyXG4gICAgICAuYWRkU2NhbGVkVmVjdG9yKHRoaXMubm9ybWFsSW5kaWNhdG9yVGFuZ2VudCwgLWhhbGZTaXplKVxyXG4gICAgICAuYWRkU2NhbGVkVmVjdG9yKHRoaXMubm9ybWFsSW5kaWNhdG9yQml0YW5nZW50LCAtaGFsZlNpemUpXHJcbiAgICBfdmVjMzAudG9BcnJheSh0aGlzLm5vcm1hbEluZGljYXRvckJ1ZmZlciwgMylcclxuXHJcbiAgICBfdmVjMzBcclxuICAgICAgLmNvcHkodGhpcy5ub3JtYWxJbmRpY2F0b3IucG9zaXRpb24pXHJcbiAgICAgIC5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWxJbmRpY2F0b3JUYW5nZW50LCAtaGFsZlNpemUpXHJcbiAgICAgIC5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWxJbmRpY2F0b3JCaXRhbmdlbnQsIC1oYWxmU2l6ZSlcclxuICAgIF92ZWMzMC50b0FycmF5KHRoaXMubm9ybWFsSW5kaWNhdG9yQnVmZmVyLCA2KVxyXG5cclxuICAgIF92ZWMzMFxyXG4gICAgICAuY29weSh0aGlzLm5vcm1hbEluZGljYXRvci5wb3NpdGlvbilcclxuICAgICAgLmFkZFNjYWxlZFZlY3Rvcih0aGlzLm5vcm1hbEluZGljYXRvclRhbmdlbnQsIC1oYWxmU2l6ZSlcclxuICAgICAgLmFkZFNjYWxlZFZlY3Rvcih0aGlzLm5vcm1hbEluZGljYXRvckJpdGFuZ2VudCwgaGFsZlNpemUpXHJcbiAgICBfdmVjMzAudG9BcnJheSh0aGlzLm5vcm1hbEluZGljYXRvckJ1ZmZlciwgOSlcclxuXHJcbiAgICBfdmVjMzBcclxuICAgICAgLmNvcHkodGhpcy5ub3JtYWxJbmRpY2F0b3IucG9zaXRpb24pXHJcbiAgICAgIC5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWxJbmRpY2F0b3JUYW5nZW50LCAtaGFsZlNpemUpXHJcbiAgICAgIC5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWxJbmRpY2F0b3JCaXRhbmdlbnQsIGhhbGZTaXplKVxyXG4gICAgX3ZlYzMwLnRvQXJyYXkodGhpcy5ub3JtYWxJbmRpY2F0b3JCdWZmZXIsIDEyKVxyXG5cclxuICAgIF92ZWMzMFxyXG4gICAgICAuY29weSh0aGlzLm5vcm1hbEluZGljYXRvci5wb3NpdGlvbilcclxuICAgICAgLmFkZFNjYWxlZFZlY3Rvcih0aGlzLm5vcm1hbEluZGljYXRvclRhbmdlbnQsIGhhbGZTaXplKVxyXG4gICAgICAuYWRkU2NhbGVkVmVjdG9yKHRoaXMubm9ybWFsSW5kaWNhdG9yQml0YW5nZW50LCBoYWxmU2l6ZSlcclxuICAgIF92ZWMzMC50b0FycmF5KHRoaXMubm9ybWFsSW5kaWNhdG9yQnVmZmVyLCAxNSlcclxuXHJcbiAgICBfdmVjMzBcclxuICAgICAgLmNvcHkodGhpcy5ub3JtYWxJbmRpY2F0b3IucG9zaXRpb24pXHJcbiAgICAgIC5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWxJbmRpY2F0b3JUYW5nZW50LCBoYWxmU2l6ZSlcclxuICAgICAgLmFkZFNjYWxlZFZlY3Rvcih0aGlzLm5vcm1hbEluZGljYXRvckJpdGFuZ2VudCwgaGFsZlNpemUpXHJcbiAgICBfdmVjMzAudG9BcnJheSh0aGlzLm5vcm1hbEluZGljYXRvckJ1ZmZlciwgMTgpXHJcblxyXG4gICAgX3ZlYzMwXHJcbiAgICAgIC5jb3B5KHRoaXMubm9ybWFsSW5kaWNhdG9yLnBvc2l0aW9uKVxyXG4gICAgICAuYWRkU2NhbGVkVmVjdG9yKHRoaXMubm9ybWFsSW5kaWNhdG9yVGFuZ2VudCwgaGFsZlNpemUpXHJcbiAgICAgIC5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWxJbmRpY2F0b3JCaXRhbmdlbnQsIC1oYWxmU2l6ZSlcclxuICAgIF92ZWMzMC50b0FycmF5KHRoaXMubm9ybWFsSW5kaWNhdG9yQnVmZmVyLCAyMSlcclxuXHJcbiAgICBjb25zdCBwb3NBdHRyID0gKFxyXG4gICAgICB0aGlzLm5vcm1hbEluZGljYXRvci5nZW9tZXRyeS5hdHRyaWJ1dGVzW1xyXG4gICAgICAgICdpbnN0YW5jZVN0YXJ0J1xyXG4gICAgICBdIGFzIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlXHJcbiAgICApLmRhdGFcclxuICAgIGNvbnN0IHBvc0F0dHJMb3cgPSAoXHJcbiAgICAgIHRoaXMubm9ybWFsSW5kaWNhdG9yLmdlb21ldHJ5LmF0dHJpYnV0ZXNbXHJcbiAgICAgICAgJ2luc3RhbmNlU3RhcnRMb3cnXHJcbiAgICAgIF0gYXMgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGVcclxuICAgICkuZGF0YVxyXG4gICAgR2VvbWV0cnkuRG91YmxlVG9IaWdoTG93QnVmZmVyKFxyXG4gICAgICB0aGlzLm5vcm1hbEluZGljYXRvckJ1ZmZlcixcclxuICAgICAgcG9zQXR0ckxvdy5hcnJheSBhcyBGbG9hdDMyQXJyYXksXHJcbiAgICAgIHBvc0F0dHIuYXJyYXkgYXMgRmxvYXQzMkFycmF5XHJcbiAgICApXHJcbiAgICBwb3NBdHRyLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgcG9zQXR0ckxvdy5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHRoaXMubm9ybWFsSW5kaWNhdG9yLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpXHJcbiAgICB0aGlzLm5vcm1hbEluZGljYXRvci5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKVxyXG4gICAgdGhpcy5ub3JtYWxJbmRpY2F0b3IuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZU5vcm1hbEluZGljYXRvcihwb3NpdGlvbjogVmVjdG9yMywgbm9ybWFsOiBWZWN0b3IzKSB7XHJcbiAgICB0aGlzLm5vcm1hbEluZGljYXRvci5wb3NpdGlvbi5jb3B5KHBvc2l0aW9uKVxyXG4gICAgdGhpcy5ub3JtYWxJbmRpY2F0b3JOb3JtYWwuY29weShub3JtYWwpXHJcbiAgICBpZiAoTWF0aC5hYnMobm9ybWFsLngpID4gTWF0aC5hYnMobm9ybWFsLnopKSB7XHJcbiAgICAgIHRoaXMubm9ybWFsSW5kaWNhdG9yVGFuZ2VudC5zZXQoLW5vcm1hbC55LCBub3JtYWwueCwgMClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubm9ybWFsSW5kaWNhdG9yVGFuZ2VudC5zZXQoMCwgLW5vcm1hbC56LCBub3JtYWwueSlcclxuICAgIH1cclxuICAgIHRoaXMubm9ybWFsSW5kaWNhdG9yVGFuZ2VudC5ub3JtYWxpemUoKVxyXG4gICAgdGhpcy5ub3JtYWxJbmRpY2F0b3JCaXRhbmdlbnRcclxuICAgICAgLmNyb3NzVmVjdG9ycyh0aGlzLm5vcm1hbEluZGljYXRvck5vcm1hbCwgdGhpcy5ub3JtYWxJbmRpY2F0b3JUYW5nZW50KVxyXG4gICAgICAubm9ybWFsaXplKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVQb2ludChwb3NpdGlvbjogVmVjdG9yMykge1xyXG4gICAgdGhpcy5wb2ludC5wb3NpdGlvbi5jb3B5KHBvc2l0aW9uKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUxpbmUocG9pbnRzOiBWZWN0b3IzW10pIHtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBGbG9hdDY0QXJyYXkocG9pbnRzLmxlbmd0aCAqIDMpXHJcbiAgICBwb2ludHMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgIHZhbHVlLnRvQXJyYXkoYnVmZmVyLCBpbmRleCAqIDMpXHJcbiAgICB9KVxyXG4gICAgY29uc3QgcG9zQXR0ciA9IChcclxuICAgICAgdGhpcy5saW5lLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2luc3RhbmNlU3RhcnQnXSBhcyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZVxyXG4gICAgKS5kYXRhXHJcbiAgICBjb25zdCBwb3NBdHRyTG93ID0gKFxyXG4gICAgICB0aGlzLmxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydExvdyddIGFzIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlXHJcbiAgICApLmRhdGFcclxuICAgIEdlb21ldHJ5LkRvdWJsZVRvSGlnaExvd0J1ZmZlcihcclxuICAgICAgYnVmZmVyLFxyXG4gICAgICBwb3NBdHRyTG93LmFycmF5IGFzIEZsb2F0MzJBcnJheSxcclxuICAgICAgcG9zQXR0ci5hcnJheSBhcyBGbG9hdDMyQXJyYXlcclxuICAgIClcclxuICAgIHBvc0F0dHIubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICBwb3NBdHRyLnVwZGF0ZVJhbmdlID0geyBvZmZzZXQ6IDAsIGNvdW50OiBwb2ludHMubGVuZ3RoICogMyB9XHJcbiAgICBwb3NBdHRyTG93Lm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgcG9zQXR0ckxvdy51cGRhdGVSYW5nZSA9IHsgb2Zmc2V0OiAwLCBjb3VudDogcG9pbnRzLmxlbmd0aCAqIDMgfVxyXG4gICAgdGhpcy5saW5lLnZpc2libGUgPSB0cnVlXHJcbiAgICB0aGlzLmxpbmUuZ2VvbWV0cnkuaW5zdGFuY2VDb3VudCA9IHBvaW50cy5sZW5ndGggLyAyXHJcbiAgICB0aGlzLmxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydCddLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5saW5lLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2luc3RhbmNlRW5kJ10ubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB0aGlzLmxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydExvdyddLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5saW5lLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2luc3RhbmNlRW5kTG93J10ubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB0aGlzLmxpbmUuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KClcclxuICAgIHRoaXMubGluZS5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKVxyXG4gICAgdGhpcy5saW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVUZXh0KFxyXG4gICAgdmFsdWU6IHN0cmluZyxcclxuICAgIHBvc2l0aW9uPzogVmVjdG9yMyxcclxuICAgIHF1YXRlcm5pb24/OiBRdWF0ZXJuaW9uLFxyXG4gICAgc2NhbGU/OiBWZWN0b3IzXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIHRleHQ6IHZhbHVlXHJcbiAgICB9IGFzIFRleHRMYWJlbFBhcmFtc1xyXG5cclxuICAgIGlmIChwb3NpdGlvbikgdGhpcy50ZXh0LnBvc2l0aW9uLmNvcHkocG9zaXRpb24pXHJcbiAgICBpZiAocXVhdGVybmlvbikgdGhpcy50ZXh0LnF1YXRlcm5pb24uY29weShxdWF0ZXJuaW9uKVxyXG4gICAgaWYgKHNjYWxlKSB0aGlzLnRleHQuc2NhbGUuY29weShzY2FsZSlcclxuICAgIHRoaXMudGV4dC51cGRhdGVNYXRyaXhXb3JsZCh0cnVlKVxyXG5cclxuICAgIHJldHVybiB0aGlzLnRleHQudXBkYXRlUGFyYW1zKHBhcmFtcylcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVTdHlsZSgpIHtcclxuICAgIHRoaXMubm9ybWFsSW5kaWNhdG9yLm1hdGVyaWFsID0gdGhpcy5nZXROb3JtYWxJbmRpY2F0b3JNYXRlcmlhbCgpXHJcbiAgICB0aGlzLmxpbmUubWF0ZXJpYWwgPSB0aGlzLmdldExpbmVNYXRlcmlhbCgpXHJcbiAgICB0aGlzLnBvaW50Lm1hdGVyaWFsID0gdGhpcy5nZXRQb2ludE1hdGVyaWFsKClcclxuICAgIHZvaWQgdGhpcy50ZXh0LnVwZGF0ZVBhcmFtcyh7IHRleHRDb2xvcjogbmV3IENvbG9yKHRoaXMuX3N0eWxlLnRleHRDb2xvcikgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyByYXljYXN0KHJheWNhc3RlcjogUmF5Y2FzdGVyLCBpbnRlcnNlY3RzOiBBcnJheTxJbnRlcnNlY3Rpb24+KSB7XHJcbiAgICAvKiogV2UncmUgbm90IHRlc3RpbmcgdGhlIGxpbmUsIHBvaW50cyBhbmQgZGlzYyBiZWNhdXNlIHRlc3RpbmcgdGhlIGxhYmVsIG9ubHlcclxuICAgICAqICB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQuXHJcbiAgICAgKiAgSG93ZXZlciwgSSdsbCBrZWVwIHRoZXNlIGNvbW1lbnRlZCBiZWNhdXNlIHRoaXMgbGFzdCByZXF1ZXN0IGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlXHJcbiAgICAgKiAgYW5kIGFsc28gdG8gZW1waGFzaXplIHRoYXQgcmF5Y2FzdGluZyBhZ2FpbnMgdGhlIGdpem1vIGlzIG5vdCByZXN0cmljdGVkIHRvIHRleHQgb2JqZWN0IG9ubHlcclxuICAgICAqICBhbmQgdGhhdCB3ZSAqZXhwbGljdGx5KiBkbyBub3QgdGVzdCBhbnkgb3RoZXIgY29tcG9uZW50c1xyXG4gICAgICovXHJcbiAgICAvLyB0aGlzLmRpc2MucmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpXHJcbiAgICAvLyB0aGlzLmxpbmUucmF5Y2FzdChyYXljYXN0ZXIsIGludGVyc2VjdHMpXHJcbiAgICAvLyB0aGlzLnBvaW50LnJheWNhc3QocmF5Y2FzdGVyLCBpbnRlcnNlY3RzKVxyXG4gICAgdGhpcy50ZXh0LnJheWNhc3QocmF5Y2FzdGVyLCBpbnRlcnNlY3RzKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUNsaXBwaW5nUGxhbmVzKHBsYW5lczogUGxhbmVbXSkge1xyXG4gICAgOyh0aGlzLm5vcm1hbEluZGljYXRvci5tYXRlcmlhbCBhcyBNYXRlcmlhbCkuY2xpcHBpbmdQbGFuZXMgPSBwbGFuZXNcclxuICAgIDsodGhpcy5wb2ludC5tYXRlcmlhbCBhcyBNYXRlcmlhbCkuY2xpcHBpbmdQbGFuZXMgPSBwbGFuZXNcclxuICAgIDsoKHRoaXMucG9pbnQuY2hpbGRyZW5bMF0gYXMgTWVzaCkubWF0ZXJpYWwgYXMgTWF0ZXJpYWwpLmNsaXBwaW5nUGxhbmVzID0gcGxhbmVzXHJcbiAgICA7KHRoaXMubGluZS5tYXRlcmlhbCBhcyBNYXRlcmlhbCkuY2xpcHBpbmdQbGFuZXMgPSBwbGFuZXNcclxuICAgIGlmICh0aGlzLnRleHQuYmFja2dyb3VuZE1lc2gpIHtcclxuICAgICAgOyh0aGlzLnRleHQuYmFja2dyb3VuZE1lc2gubWF0ZXJpYWwgYXMgTWF0ZXJpYWwpLmNsaXBwaW5nUGxhbmVzID0gcGxhbmVzXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50ZXh0LnRleHRNZXNoKSB7XHJcbiAgICAgIDsodGhpcy50ZXh0LnRleHRNZXNoPy5tYXRlcmlhbCBhcyBNYXRlcmlhbCkuY2xpcHBpbmdQbGFuZXMgPSBwbGFuZXNcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBCb3gzLFxyXG4gIENhbWVyYSxcclxuICBQbGFuZSxcclxuICBSYXljYXN0ZXIsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzLFxyXG4gIHR5cGUgSW50ZXJzZWN0aW9uXHJcbn0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IGdldENvbnZlcnNpb25GYWN0b3IgfSBmcm9tICcuLi8uLi9jb252ZXJ0ZXIvVW5pdHMuanMnXHJcbmltcG9ydCB7IE1lYXN1cmVtZW50LCBNZWFzdXJlbWVudFN0YXRlIH0gZnJvbSAnLi9NZWFzdXJlbWVudC5qcydcclxuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgTWVhc3VyZW1lbnRQb2ludEdpem1vIH0gZnJvbSAnLi9NZWFzdXJlbWVudFBvaW50R2l6bW8uanMnXHJcbmltcG9ydCB7IE1lYXN1cmVtZW50RGF0YSwgTWVhc3VyZW1lbnRUeXBlIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL3ZpZXdlci9zdGF0ZSdcclxuXHJcbmNvbnN0IHZlYzNCdWZmMDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgdmVjM0J1ZmYxOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCB2ZWMzQnVmZjI6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IHZlYzNCdWZmMzogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgdmVjM0J1ZmY0OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCB2ZWMzQnVmZjU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5leHBvcnQgY2xhc3MgUGVycGVuZGljdWxhck1lYXN1cmVtZW50IGV4dGVuZHMgTWVhc3VyZW1lbnQge1xyXG4gIHByaXZhdGUgc3RhcnRHaXptbzogTWVhc3VyZW1lbnRQb2ludEdpem1vIHwgbnVsbCA9IG51bGxcclxuICBwcml2YXRlIGVuZEdpem1vOiBNZWFzdXJlbWVudFBvaW50R2l6bW8gfCBudWxsID0gbnVsbFxyXG4gIHB1YmxpYyBmbGlwU3RhcnROb3JtYWw6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHB1YmxpYyBtaWRQb2ludDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuXHJcbiAgcHVibGljIHNldCBpc1Zpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc3RhcnRHaXptbz8uZW5hYmxlKHZhbHVlLCB2YWx1ZSwgdmFsdWUsIHZhbHVlKVxyXG4gICAgdGhpcy5lbmRHaXptbz8uZW5hYmxlKHZhbHVlLCB2YWx1ZSwgdmFsdWUsIHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBib3VuZHMoKTogQm94MyB7XHJcbiAgICByZXR1cm4gbmV3IEJveDMoKS5leHBhbmRCeVBvaW50KHRoaXMuc3RhcnRQb2ludCkuZXhwYW5kQnlQb2ludCh0aGlzLm1pZFBvaW50KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtZWFzdXJlbWVudFR5cGUoKTogTWVhc3VyZW1lbnRUeXBlIHtcclxuICAgIHJldHVybiBNZWFzdXJlbWVudFR5cGUuUEVSUEVORElDVUxBUlxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy50eXBlID0gJ1BlcnBlbmRpY3VsYXJNZWFzdXJlbWVudCdcclxuICAgIC8qKiBNaWdodCBiZSBoYXJkIHRvIGJlbGlldmUgYnV0IGNhbiBiZSB0cmFjZWQgZG93biB0byBob3cgb3VyIGNhbWVyYSBsaWJyYXJ5IHdvcmtzIChvciBiZXR0ZXIgeWV0IGhvdyBpdCBkb2Vzbid0KSAqL1xyXG4gICAgdGhpcy5zdGFydFBvaW50LnNldChOYU4sIE5hTiwgTmFOKVxyXG5cclxuICAgIHRoaXMuc3RhcnRHaXptbyA9IG5ldyBNZWFzdXJlbWVudFBvaW50R2l6bW8oKVxyXG4gICAgdGhpcy5lbmRHaXptbyA9IG5ldyBNZWFzdXJlbWVudFBvaW50R2l6bW8oeyBkYXNoZWRMaW5lOiB0cnVlLCBsaW5lT3BhY2l0eTogMC4yNSB9KVxyXG4gICAgdGhpcy5zdGFydExpbmVMZW5ndGggPSAwLjI1XHJcbiAgICB0aGlzLmFkZCh0aGlzLnN0YXJ0R2l6bW8pXHJcbiAgICB0aGlzLmFkZCh0aGlzLmVuZEdpem1vKVxyXG4gICAgdGhpcy5sYXllcnMuc2V0KE9iamVjdExheWVycy5NRUFTVVJFTUVOVFMpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZnJhbWVVcGRhdGUoY2FtZXJhOiBDYW1lcmEsIHNpemU6IFZlY3RvcjIsIGJvdW5kczogQm94Mykge1xyXG4gICAgc3VwZXIuZnJhbWVVcGRhdGUoY2FtZXJhLCBzaXplLCBib3VuZHMpXHJcbiAgICB0aGlzLnN0YXJ0R2l6bW8/LmZyYW1lVXBkYXRlKGNhbWVyYSwgc2l6ZSlcclxuICAgIHRoaXMuZW5kR2l6bW8/LmZyYW1lVXBkYXRlKGNhbWVyYSwgc2l6ZSlcclxuICAgIC8qKiBOb3QgYSBmYW4gb2YgdGhpcyBidXQgdGhlIGNhbWVyYSBsaWJyYXJ5IGZhaWxzIHRvIHRlbGwgdXMgd2hlbiB6b29taW5nIGhhcHBlbnNcclxuICAgICAqICBzbyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc2NyZWVuIHNwYWNlIG5vcm1hbCBpbmRpY2F0b3IgZWFjaCBmcmFtZSwgb3RoZXJ3aXNlIGl0XHJcbiAgICAgKiAgd29uJ3QgbG9vayBjb3JyZWN0IHdoaWxlIHpvb21pbmdcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBNZWFzdXJlbWVudFN0YXRlLkRBTkdMSU5HX1NUQVJUKSB7XHJcbiAgICAgIHZvaWQgdGhpcy51cGRhdGUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2F0aW9uVXBkYXRlZChwb2ludDogVmVjdG9yMywgbm9ybWFsOiBWZWN0b3IzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gTWVhc3VyZW1lbnRTdGF0ZS5EQU5HTElOR19TVEFSVCkge1xyXG4gICAgICB0aGlzLnN0YXJ0UG9pbnQuY29weShwb2ludClcclxuICAgICAgdGhpcy5zdGFydE5vcm1hbC5jb3B5KG5vcm1hbClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gTWVhc3VyZW1lbnRTdGF0ZS5EQU5HTElOR19FTkQpIHtcclxuICAgICAgY29uc3QgZGlyID0gbmV3IFZlY3RvcjMoKS5zdWJWZWN0b3JzKHBvaW50LCB0aGlzLnN0YXJ0UG9pbnQpLm5vcm1hbGl6ZSgpXHJcbiAgICAgIGNvbnN0IGRvdCA9IGRpci5kb3QodGhpcy5zdGFydE5vcm1hbClcclxuICAgICAgaWYgKGRvdCA8IDApIHRoaXMuZmxpcFN0YXJ0Tm9ybWFsID0gdHJ1ZVxyXG4gICAgICBlbHNlIHRoaXMuZmxpcFN0YXJ0Tm9ybWFsID0gZmFsc2VcclxuXHJcbiAgICAgIHRoaXMuZW5kUG9pbnQuY29weShwb2ludClcclxuICAgICAgdGhpcy5lbmROb3JtYWwuY29weShub3JtYWwpXHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBsb2NhdGlvblNlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IE1lYXN1cmVtZW50U3RhdGUuREFOR0xJTkdfU1RBUlQpXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBNZWFzdXJlbWVudFN0YXRlLkRBTkdMSU5HX0VORFxyXG4gICAgZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gTWVhc3VyZW1lbnRTdGF0ZS5EQU5HTElOR19FTkQpXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBNZWFzdXJlbWVudFN0YXRlLkNPTVBMRVRFXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHJldDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZFxyXG5cclxuICAgIC8vIE5vdCBzdXJlIHRoaXMgaXMgbmVlZGVkIGFueW1vcmVcclxuICAgIGlmIChpc05hTih0aGlzLnN0YXJ0UG9pbnQubGVuZ3RoKCkpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcclxuICAgIGlmICghdGhpcy5yZW5kZXJpbmdDYW1lcmEpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxyXG5cclxuICAgIHRoaXMuc3RhcnRHaXptbz8udXBkYXRlTm9ybWFsSW5kaWNhdG9yKHRoaXMuc3RhcnRQb2ludCwgdGhpcy5zdGFydE5vcm1hbClcclxuICAgIHRoaXMuc3RhcnRHaXptbz8udXBkYXRlUG9pbnQodGhpcy5zdGFydFBvaW50KVxyXG4gICAgdGhpcy5lbmRHaXptbz8udXBkYXRlTm9ybWFsSW5kaWNhdG9yKHRoaXMuZW5kUG9pbnQsIHRoaXMuZW5kTm9ybWFsKVxyXG5cclxuICAgIHZlYzNCdWZmNS5jb3B5KHRoaXMuc3RhcnROb3JtYWwpXHJcbiAgICBpZiAodGhpcy5mbGlwU3RhcnROb3JtYWwpIHZlYzNCdWZmNS5uZWdhdGUoKVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0RW5kRGlzdCA9IHRoaXMuc3RhcnRQb2ludC5kaXN0YW5jZVRvKHRoaXMuZW5kUG9pbnQpXHJcbiAgICBjb25zdCBlbmRTdGFydERpciA9IHZlYzNCdWZmMC5jb3B5KHRoaXMuc3RhcnRQb2ludCkuc3ViKHRoaXMuZW5kUG9pbnQpLm5vcm1hbGl6ZSgpXHJcbiAgICBsZXQgZG90ID0gdmVjM0J1ZmY1LmRvdChlbmRTdGFydERpcilcclxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hY29zKE1hdGgubWluKE1hdGgubWF4KGRvdCwgLTEpLCAxKSlcclxuICAgIHRoaXMuc3RhcnRMaW5lTGVuZ3RoID0gTWF0aC5hYnMoc3RhcnRFbmREaXN0ICogTWF0aC5jb3MoYW5nbGUpKVxyXG5cclxuICAgIHRoaXMubWlkUG9pbnQuY29weShcclxuICAgICAgdmVjM0J1ZmYwXHJcbiAgICAgICAgLmNvcHkodGhpcy5zdGFydFBvaW50KVxyXG4gICAgICAgIC5hZGQodmVjM0J1ZmYxLmNvcHkodmVjM0J1ZmY1KS5tdWx0aXBseVNjYWxhcih0aGlzLnN0YXJ0TGluZUxlbmd0aCkpXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgdGV4dFBvcyA9IHZlYzNCdWZmMFxyXG4gICAgICAuY29weSh0aGlzLnN0YXJ0UG9pbnQpXHJcbiAgICAgIC5hZGQodGhpcy5taWRQb2ludClcclxuICAgICAgLm11bHRpcGx5U2NhbGFyKDAuNSlcclxuXHJcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IE1lYXN1cmVtZW50U3RhdGUuREFOR0xJTkdfU1RBUlQpIHtcclxuICAgICAgdGhpcy5lbmRHaXptbz8uZW5hYmxlKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gTWVhc3VyZW1lbnRTdGF0ZS5EQU5HTElOR19FTkQpIHtcclxuICAgICAgY29uc3QgZW5kTGluZU5vcm1hbCA9IHZlYzNCdWZmMS5jb3B5KHRoaXMubWlkUG9pbnQpLnN1Yih0aGlzLmVuZFBvaW50KS5ub3JtYWxpemUoKVxyXG5cclxuICAgICAgdGhpcy5lbmRMaW5lTGVuZ3RoID0gdGhpcy5taWRQb2ludC5kaXN0YW5jZVRvKHRoaXMuZW5kUG9pbnQpXHJcblxyXG4gICAgICBkb3QgPSB0aGlzLmVuZE5vcm1hbC5kb3QoZW5kTGluZU5vcm1hbClcclxuICAgICAgY29uc3QgYW5nbGUxID0gTWF0aC5hY29zKE1hdGgubWluKE1hdGgubWF4KGRvdCwgLTEpLCAxKSlcclxuICAgICAgY29uc3QgZGlzdDEgPSB0aGlzLmVuZExpbmVMZW5ndGggKiBNYXRoLmNvcyhhbmdsZTEpXHJcblxyXG4gICAgICBjb25zdCBlbmRMaW5lMyA9IHZlYzNCdWZmMVxyXG4gICAgICAgIC5jb3B5KHRoaXMuZW5kUG9pbnQpXHJcbiAgICAgICAgLmFkZCh2ZWMzQnVmZjIuY29weSh0aGlzLmVuZE5vcm1hbCkubXVsdGlwbHlTY2FsYXIoZGlzdDEpKVxyXG5cclxuICAgICAgY29uc3Qgc3RhcnRMaW5lMCA9IHZlYzNCdWZmMi5jb3B5KHRoaXMuc3RhcnRQb2ludClcclxuICAgICAgY29uc3Qgc3RhcnRMaW5lMSA9IHZlYzNCdWZmM1xyXG4gICAgICAgIC5jb3B5KHRoaXMuc3RhcnRQb2ludClcclxuICAgICAgICAuYWRkKHZlYzNCdWZmNC5jb3B5KHZlYzNCdWZmNSkubXVsdGlwbHlTY2FsYXIodGhpcy5zdGFydExpbmVMZW5ndGgpKVxyXG4gICAgICB0aGlzLnN0YXJ0R2l6bW8/LnVwZGF0ZUxpbmUoW3N0YXJ0TGluZTAsIHN0YXJ0TGluZTFdKVxyXG5cclxuICAgICAgY29uc3QgZW5kTGluZTAgPSB2ZWMzQnVmZjMuY29weSh0aGlzLmVuZFBvaW50KVxyXG5cclxuICAgICAgdGhpcy5lbmRHaXptbz8udXBkYXRlTGluZShbXHJcbiAgICAgICAgZW5kTGluZTAsXHJcbiAgICAgICAgZW5kTGluZTMsXHJcbiAgICAgICAgZW5kTGluZTMsXHJcbiAgICAgICAgdGhpcy5taWRQb2ludCxcclxuICAgICAgICB0aGlzLm1pZFBvaW50LFxyXG4gICAgICAgIGVuZExpbmUwXHJcbiAgICAgIF0pXHJcbiAgICAgIHRoaXMuZW5kR2l6bW8/LnVwZGF0ZVBvaW50KHRoaXMubWlkUG9pbnQpXHJcblxyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5taWRQb2ludC5kaXN0YW5jZVRvKHRoaXMuc3RhcnRQb2ludClcclxuICAgICAgaWYgKHRoaXMuc3RhcnRHaXptbylcclxuICAgICAgICByZXQgPSB0aGlzLnN0YXJ0R2l6bW8udXBkYXRlVGV4dChcclxuICAgICAgICAgIGAkeyh0aGlzLnZhbHVlICogZ2V0Q29udmVyc2lvbkZhY3RvcignbScsIHRoaXMudW5pdHMpKS50b0ZpeGVkKFxyXG4gICAgICAgICAgICB0aGlzLnByZWNpc2lvblxyXG4gICAgICAgICAgKX0gJHt0aGlzLnVuaXRzfWAsXHJcbiAgICAgICAgICB0ZXh0UG9zXHJcbiAgICAgICAgKVxyXG4gICAgICB0aGlzLmVuZEdpem1vPy5lbmFibGUodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSlcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gTWVhc3VyZW1lbnRTdGF0ZS5DT01QTEVURSkge1xyXG4gICAgICB0aGlzLnN0YXJ0R2l6bW8/LnVwZGF0ZUxpbmUoW3RoaXMuc3RhcnRQb2ludCwgdGhpcy5taWRQb2ludF0pXHJcbiAgICAgIHRoaXMuZW5kR2l6bW8/LnVwZGF0ZVBvaW50KHRoaXMubWlkUG9pbnQpXHJcblxyXG4gICAgICByZXQgPSB0aGlzLnN0YXJ0R2l6bW8/LnVwZGF0ZVRleHQoXHJcbiAgICAgICAgYCR7KHRoaXMudmFsdWUgKiBnZXRDb252ZXJzaW9uRmFjdG9yKCdtJywgdGhpcy51bml0cykpLnRvRml4ZWQoXHJcbiAgICAgICAgICB0aGlzLnByZWNpc2lvblxyXG4gICAgICAgICl9ICR7dGhpcy51bml0c31gLFxyXG4gICAgICAgIHRleHRQb3NcclxuICAgICAgKVxyXG4gICAgICB0aGlzLnN0YXJ0R2l6bW8/LmVuYWJsZShmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSlcclxuICAgICAgdGhpcy5lbmRHaXptbz8uZW5hYmxlKGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldCA/PyBQcm9taXNlLnJlc29sdmUoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJheWNhc3QocmF5Y2FzdGVyOiBSYXljYXN0ZXIsIGludGVyc2VjdHM6IEFycmF5PEludGVyc2VjdGlvbj4pIHtcclxuICAgIGNvbnN0IHJlc3VsdHM6IEFycmF5PEludGVyc2VjdGlvbj4gPSBbXVxyXG4gICAgdGhpcy5zdGFydEdpem1vPy5yYXljYXN0KHJheWNhc3RlciwgcmVzdWx0cylcclxuICAgIHRoaXMuZW5kR2l6bW8/LnJheWNhc3QocmF5Y2FzdGVyLCByZXN1bHRzKVxyXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoKSB7XHJcbiAgICAgIGludGVyc2VjdHMucHVzaCh7XHJcbiAgICAgICAgZGlzdGFuY2U6IHJlc3VsdHNbMF0uZGlzdGFuY2UsXHJcbiAgICAgICAgZmFjZTogcmVzdWx0c1swXS5mYWNlLFxyXG4gICAgICAgIGZhY2VJbmRleDogcmVzdWx0c1swXS5mYWNlSW5kZXgsXHJcbiAgICAgICAgb2JqZWN0OiB0aGlzLFxyXG4gICAgICAgIHBvaW50OiByZXN1bHRzWzBdLnBvaW50LFxyXG4gICAgICAgIHV2OiByZXN1bHRzWzBdLnV2XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlnaGxpZ2h0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5zdGFydEdpem1vKSB0aGlzLnN0YXJ0R2l6bW8uaGlnaGxpZ2h0ID0gdmFsdWVcclxuICAgIGlmICh0aGlzLmVuZEdpem1vKSB0aGlzLmVuZEdpem1vLmhpZ2hsaWdodCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2xpcHBpbmdQbGFuZXMocGxhbmVzOiBQbGFuZVtdKSB7XHJcbiAgICBpZiAodGhpcy5zdGFydEdpem1vKSB0aGlzLnN0YXJ0R2l6bW8udXBkYXRlQ2xpcHBpbmdQbGFuZXMocGxhbmVzKVxyXG4gICAgaWYgKHRoaXMuZW5kR2l6bW8pIHRoaXMuZW5kR2l6bW8udXBkYXRlQ2xpcHBpbmdQbGFuZXMocGxhbmVzKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvTWVhc3VyZW1lbnREYXRhKCk6IE1lYXN1cmVtZW50RGF0YSB7XHJcbiAgICBjb25zdCBkYXRhID0gc3VwZXIudG9NZWFzdXJlbWVudERhdGEoKVxyXG4gICAgZGF0YS5pbm5lclBvaW50cyA9IFtbdGhpcy5taWRQb2ludC54LCB0aGlzLm1pZFBvaW50LnksIHRoaXMubWlkUG9pbnQuel1dXHJcbiAgICBpZiAodGhpcy5mbGlwU3RhcnROb3JtYWwpIHtcclxuICAgICAgdmVjM0J1ZmYwLmNvcHkodGhpcy5zdGFydE5vcm1hbClcclxuICAgICAgdmVjM0J1ZmYwLm5lZ2F0ZSgpXHJcbiAgICAgIGRhdGEuc3RhcnROb3JtYWwgPSBbdmVjM0J1ZmYwLngsIHZlYzNCdWZmMC55LCB2ZWMzQnVmZjAuel1cclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZnJvbU1lYXN1cmVtZW50RGF0YShkYXRhOiBNZWFzdXJlbWVudERhdGEpOiB2b2lkIHtcclxuICAgIHN1cGVyLmZyb21NZWFzdXJlbWVudERhdGEoZGF0YSlcclxuICAgIGlmIChkYXRhLmlubmVyUG9pbnRzKVxyXG4gICAgICB0aGlzLm1pZFBvaW50LnNldChcclxuICAgICAgICBkYXRhLmlubmVyUG9pbnRzWzBdWzBdLFxyXG4gICAgICAgIGRhdGEuaW5uZXJQb2ludHNbMF1bMV0sXHJcbiAgICAgICAgZGF0YS5pbm5lclBvaW50c1swXVsyXVxyXG4gICAgICApXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQm94MyxcclxuICBDYW1lcmEsXHJcbiAgUGxhbmUsXHJcbiAgUmF5Y2FzdGVyLFxyXG4gIFZlY3RvcjIsXHJcbiAgVmVjdG9yMyxcclxuICB0eXBlIEludGVyc2VjdGlvblxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBnZXRDb252ZXJzaW9uRmFjdG9yIH0gZnJvbSAnLi4vLi4vY29udmVydGVyL1VuaXRzLmpzJ1xyXG5pbXBvcnQgeyBNZWFzdXJlbWVudCwgTWVhc3VyZW1lbnRTdGF0ZSB9IGZyb20gJy4vTWVhc3VyZW1lbnQuanMnXHJcbmltcG9ydCB7IE9iamVjdExheWVycyB9IGZyb20gJy4uLy4uLy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCB7IE1lYXN1cmVtZW50UG9pbnRHaXptbyB9IGZyb20gJy4vTWVhc3VyZW1lbnRQb2ludEdpem1vLmpzJ1xyXG5pbXBvcnQgeyBNZWFzdXJlbWVudFR5cGUgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQvdmlld2VyL3N0YXRlJ1xyXG5cclxuY29uc3QgdmVjM0J1ZmYwOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuZXhwb3J0IGNsYXNzIFBvaW50VG9Qb2ludE1lYXN1cmVtZW50IGV4dGVuZHMgTWVhc3VyZW1lbnQge1xyXG4gIHByaXZhdGUgc3RhcnRHaXptbzogTWVhc3VyZW1lbnRQb2ludEdpem1vIHwgbnVsbCA9IG51bGxcclxuICBwcml2YXRlIGVuZEdpem1vOiBNZWFzdXJlbWVudFBvaW50R2l6bW8gfCBudWxsID0gbnVsbFxyXG5cclxuICBwdWJsaWMgc2V0IGlzVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zdGFydEdpem1vPy5lbmFibGUodmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpXHJcbiAgICB0aGlzLmVuZEdpem1vPy5lbmFibGUodmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1lYXN1cmVtZW50VHlwZSgpOiBNZWFzdXJlbWVudFR5cGUge1xyXG4gICAgcmV0dXJuIE1lYXN1cmVtZW50VHlwZS5QT0lOVFRPUE9JTlRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMudHlwZSA9ICdQb2ludFRvUG9pbnRNZWFzdXJlbWVudCdcclxuICAgIHRoaXMuc3RhcnRHaXptbyA9IG5ldyBNZWFzdXJlbWVudFBvaW50R2l6bW8oKVxyXG4gICAgdGhpcy5lbmRHaXptbyA9IG5ldyBNZWFzdXJlbWVudFBvaW50R2l6bW8oeyBkYXNoZWRMaW5lOiB0cnVlLCBsaW5lT3BhY2l0eTogMC4yNSB9KVxyXG4gICAgdGhpcy5zdGFydExpbmVMZW5ndGggPSAwXHJcbiAgICB0aGlzLmFkZCh0aGlzLnN0YXJ0R2l6bW8pXHJcbiAgICB0aGlzLmFkZCh0aGlzLmVuZEdpem1vKVxyXG4gICAgdGhpcy5sYXllcnMuc2V0KE9iamVjdExheWVycy5NRUFTVVJFTUVOVFMpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZnJhbWVVcGRhdGUoY2FtZXJhOiBDYW1lcmEsIHNpemU6IFZlY3RvcjIsIGJvdW5kczogQm94Mykge1xyXG4gICAgc3VwZXIuZnJhbWVVcGRhdGUoY2FtZXJhLCBzaXplLCBib3VuZHMpXHJcbiAgICB0aGlzLnN0YXJ0R2l6bW8/LmZyYW1lVXBkYXRlKGNhbWVyYSwgc2l6ZSlcclxuICAgIHRoaXMuZW5kR2l6bW8/LmZyYW1lVXBkYXRlKGNhbWVyYSwgc2l6ZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NhdGlvblVwZGF0ZWQocG9pbnQ6IFZlY3RvcjMsIG5vcm1hbDogVmVjdG9yMyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IE1lYXN1cmVtZW50U3RhdGUuREFOR0xJTkdfU1RBUlQpIHtcclxuICAgICAgdGhpcy5zdGFydFBvaW50LmNvcHkocG9pbnQpXHJcbiAgICAgIHRoaXMuc3RhcnROb3JtYWwuY29weShub3JtYWwpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IE1lYXN1cmVtZW50U3RhdGUuREFOR0xJTkdfRU5EKSB7XHJcbiAgICAgIHRoaXMuZW5kUG9pbnQuY29weShwb2ludClcclxuICAgICAgdGhpcy5lbmROb3JtYWwuY29weShub3JtYWwpXHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBsb2NhdGlvblNlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IE1lYXN1cmVtZW50U3RhdGUuREFOR0xJTkdfU1RBUlQpXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBNZWFzdXJlbWVudFN0YXRlLkRBTkdMSU5HX0VORFxyXG4gICAgZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gTWVhc3VyZW1lbnRTdGF0ZS5EQU5HTElOR19FTkQpXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBNZWFzdXJlbWVudFN0YXRlLkNPTVBMRVRFXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHJldDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZFxyXG4gICAgdGhpcy5zdGFydEdpem1vPy51cGRhdGVOb3JtYWxJbmRpY2F0b3IodGhpcy5zdGFydFBvaW50LCB0aGlzLnN0YXJ0Tm9ybWFsKVxyXG4gICAgdGhpcy5zdGFydEdpem1vPy51cGRhdGVQb2ludCh0aGlzLnN0YXJ0UG9pbnQpXHJcbiAgICB0aGlzLmVuZEdpem1vPy51cGRhdGVOb3JtYWxJbmRpY2F0b3IodGhpcy5lbmRQb2ludCwgdGhpcy5lbmROb3JtYWwpXHJcblxyXG4gICAgdGhpcy5zdGFydExpbmVMZW5ndGggPSB0aGlzLnN0YXJ0UG9pbnQuZGlzdGFuY2VUbyh0aGlzLmVuZFBvaW50KVxyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RhcnRMaW5lTGVuZ3RoXHJcblxyXG4gICAgY29uc3QgdGV4dFBvcyA9IHZlYzNCdWZmMFxyXG4gICAgICAuY29weSh0aGlzLnN0YXJ0UG9pbnQpXHJcbiAgICAgIC5hZGQodGhpcy5lbmRQb2ludClcclxuICAgICAgLm11bHRpcGx5U2NhbGFyKDAuNSlcclxuXHJcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IE1lYXN1cmVtZW50U3RhdGUuREFOR0xJTkdfU1RBUlQpIHtcclxuICAgICAgdGhpcy5zdGFydEdpem1vPy5lbmFibGUodHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKVxyXG4gICAgICB0aGlzLmVuZEdpem1vPy5lbmFibGUoZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IE1lYXN1cmVtZW50U3RhdGUuREFOR0xJTkdfRU5EKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRHaXptbz8uZW5hYmxlKHRydWUsIHRydWUsIHRydWUsIHRydWUpXHJcbiAgICAgIHRoaXMuZW5kR2l6bW8/LmVuYWJsZSh0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpXHJcblxyXG4gICAgICB0aGlzLnN0YXJ0R2l6bW8/LnVwZGF0ZUxpbmUoW3RoaXMuc3RhcnRQb2ludCwgdGhpcy5lbmRQb2ludF0pXHJcbiAgICAgIHRoaXMuZW5kR2l6bW8/LnVwZGF0ZVBvaW50KHRoaXMuZW5kUG9pbnQpXHJcblxyXG4gICAgICByZXQgPSB0aGlzLnN0YXJ0R2l6bW8/LnVwZGF0ZVRleHQoXHJcbiAgICAgICAgYCR7KHRoaXMudmFsdWUgKiBnZXRDb252ZXJzaW9uRmFjdG9yKCdtJywgdGhpcy51bml0cykpLnRvRml4ZWQoXHJcbiAgICAgICAgICB0aGlzLnByZWNpc2lvblxyXG4gICAgICAgICl9ICR7dGhpcy51bml0c31gLFxyXG4gICAgICAgIHRleHRQb3NcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBNZWFzdXJlbWVudFN0YXRlLkNPTVBMRVRFKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRHaXptbz8uZW5hYmxlKGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlKVxyXG4gICAgICB0aGlzLmVuZEdpem1vPy5lbmFibGUoZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSlcclxuXHJcbiAgICAgIHRoaXMuc3RhcnRHaXptbz8udXBkYXRlTGluZShbdGhpcy5zdGFydFBvaW50LCB0aGlzLmVuZFBvaW50XSlcclxuICAgICAgdGhpcy5lbmRHaXptbz8udXBkYXRlUG9pbnQodGhpcy5lbmRQb2ludClcclxuICAgICAgcmV0ID0gdGhpcy5zdGFydEdpem1vPy51cGRhdGVUZXh0KFxyXG4gICAgICAgIGAkeyh0aGlzLnZhbHVlICogZ2V0Q29udmVyc2lvbkZhY3RvcignbScsIHRoaXMudW5pdHMpKS50b0ZpeGVkKFxyXG4gICAgICAgICAgdGhpcy5wcmVjaXNpb25cclxuICAgICAgICApfSAke3RoaXMudW5pdHN9YCxcclxuICAgICAgICB0ZXh0UG9zXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIHJldHVybiByZXQgPz8gUHJvbWlzZS5yZXNvbHZlKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyByYXljYXN0KHJheWNhc3RlcjogUmF5Y2FzdGVyLCBpbnRlcnNlY3RzOiBBcnJheTxJbnRlcnNlY3Rpb24+KSB7XHJcbiAgICBjb25zdCByZXN1bHRzOiBBcnJheTxJbnRlcnNlY3Rpb24+ID0gW11cclxuICAgIHRoaXMuc3RhcnRHaXptbz8ucmF5Y2FzdChyYXljYXN0ZXIsIHJlc3VsdHMpXHJcbiAgICB0aGlzLmVuZEdpem1vPy5yYXljYXN0KHJheWNhc3RlciwgcmVzdWx0cylcclxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCkge1xyXG4gICAgICBpbnRlcnNlY3RzLnB1c2goe1xyXG4gICAgICAgIGRpc3RhbmNlOiByZXN1bHRzWzBdLmRpc3RhbmNlLFxyXG4gICAgICAgIGZhY2U6IHJlc3VsdHNbMF0uZmFjZSxcclxuICAgICAgICBmYWNlSW5kZXg6IHJlc3VsdHNbMF0uZmFjZUluZGV4LFxyXG4gICAgICAgIG9iamVjdDogdGhpcyxcclxuICAgICAgICBwb2ludDogcmVzdWx0c1swXS5wb2ludCxcclxuICAgICAgICB1djogcmVzdWx0c1swXS51dlxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZ2hsaWdodCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuc3RhcnRHaXptbykgdGhpcy5zdGFydEdpem1vLmhpZ2hsaWdodCA9IHZhbHVlXHJcbiAgICBpZiAodGhpcy5lbmRHaXptbykgdGhpcy5lbmRHaXptby5oaWdobGlnaHQgPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUNsaXBwaW5nUGxhbmVzKHBsYW5lczogUGxhbmVbXSkge1xyXG4gICAgaWYgKHRoaXMuc3RhcnRHaXptbykgdGhpcy5zdGFydEdpem1vLnVwZGF0ZUNsaXBwaW5nUGxhbmVzKHBsYW5lcylcclxuICAgIGlmICh0aGlzLmVuZEdpem1vKSB0aGlzLmVuZEdpem1vLnVwZGF0ZUNsaXBwaW5nUGxhbmVzKHBsYW5lcylcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBBbHdheXNTdGVuY2lsRnVuYyxcclxuICBCb3gzLFxyXG4gIEJ1ZmZlckF0dHJpYnV0ZSxcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBDYW1lcmEsXHJcbiAgRG91YmxlU2lkZSxcclxuICBEeW5hbWljRHJhd1VzYWdlLFxyXG4gIEtlZXBTdGVuY2lsT3AsXHJcbiAgTWF0ZXJpYWwsXHJcbiAgTWVzaCxcclxuICBOb3RFcXVhbFN0ZW5jaWxGdW5jLFxyXG4gIE9ydGhvZ3JhcGhpY0NhbWVyYSxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBQbGFuZSxcclxuICBRdWF0ZXJuaW9uLFxyXG4gIFJheWNhc3RlcixcclxuICBSZXBsYWNlU3RlbmNpbE9wLFxyXG4gIFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSxcclxuICBWZWN0b3IyLFxyXG4gIFZlY3RvcjMsXHJcbiAgdHlwZSBJbnRlcnNlY3Rpb25cclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgTWVhc3VyZW1lbnQsIE1lYXN1cmVtZW50U3RhdGUgfSBmcm9tICcuL01lYXN1cmVtZW50LmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyBnZXRDb252ZXJzaW9uRmFjdG9yIH0gZnJvbSAnLi4vLi4vY29udmVydGVyL1VuaXRzLmpzJ1xyXG5pbXBvcnQgeyBHZW9tZXRyeSB9IGZyb20gJy4uLy4uL2NvbnZlcnRlci9HZW9tZXRyeS5qcydcclxuaW1wb3J0IHBvbHlsYWJlbCBmcm9tICdwb2x5bGFiZWwnXHJcbmltcG9ydCBTcGVja2xlQmFzaWNNYXRlcmlhbCBmcm9tICcuLi8uLi9tYXRlcmlhbHMvU3BlY2tsZUJhc2ljTWF0ZXJpYWwuanMnXHJcbmltcG9ydCB7IE1lYXN1cmVtZW50UG9pbnRHaXptbyB9IGZyb20gJy4vTWVhc3VyZW1lbnRQb2ludEdpem1vLmpzJ1xyXG5pbXBvcnQgeyBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24gfSBmcm9tICcuLi8uLi9vYmplY3RzL1NwZWNrbGVSYXljYXN0ZXIuanMnXHJcbmltcG9ydCB7IE1lYXN1cmVtZW50RGF0YSwgTWVhc3VyZW1lbnRUeXBlIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL3ZpZXdlci9zdGF0ZSdcclxuXHJcbmNvbnN0IF92ZWMzMCA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3ZlYzMxID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfdmVjMzIgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5leHBvcnQgY2xhc3MgQXJlYU1lYXN1cmVtZW50IGV4dGVuZHMgTWVhc3VyZW1lbnQge1xyXG4gIC8qKiBXZSBzdG9yZSBhbGwgZ2l6bW9zIGhlcmUgKi9cclxuICBwcml2YXRlIHBvaW50R2l6bW9zOiBNZWFzdXJlbWVudFBvaW50R2l6bW9bXSA9IFtdXHJcblxyXG4gIC8qKiBUaGlzIHN0b3JlcyB0aGUgbGFzdCB0b3VjaGVkIHBvaW50IHBvc2l0aW9uIGFuZCBub3JtYWwgKi9cclxuICBwcml2YXRlIHN1cmZhY2VQb2ludDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICBwcml2YXRlIHN1cmZhY2VOb3JtYWw6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG4gIC8qKiBUaGUgcGxhbmUgcGFyYW1zIGRlZmluZWQgYnkgdGhlIGZpcnN0IHBsYWNlZCBwb2ludFxyXG4gICAqICBXaGVuIHNlcmlhbGl6ZWQgdGhleSB3aWxsIGdvIGluIHRoZSBtZWFzdXJlbWVudHMgc3RhcnRQb2ludCBhbmQgc3RhcnROb3JtYWxcclxuICAgKi9cclxuICBwcml2YXRlIHBsYW5lT3JpZ2luOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHByaXZhdGUgcGxhbmVOb3JtYWw6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG4gIC8qKiBUaGUgbG9jYXRpb24gb2YgdGhlIGFyZWEgdGV4dCBsYWJlbCAqL1xyXG4gIHByaXZhdGUgbGFiZWxQb2ludDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuXHJcbiAgLyoqIFZhcmlvdXMgcG9pbnQgbGlzdC4gQSBiaXQgZXhoYXVzdGl2ZSwgYnV0IHNhZmVyICovXHJcbiAgcHJpdmF0ZSBwb2ludEluZGV4OiBudW1iZXIgPSAwXHJcbiAgLyoqIFRoZSBzZWxlY3RlZCBwb2ludHMgaW4gM0Qgc3BhY2UgKi9cclxuICBwcml2YXRlIHBvaW50czogVmVjdG9yM1tdID0gW11cclxuICAvKiogVGhlIHNlbGVjdGVkIHBvaW50cyBwcm9qZWN0ZWQgb24gdGhlIG1lYXN1cmVtZW50IHBsYW5lICovXHJcbiAgcHJpdmF0ZSBtZWFzdXJlZFBvaW50czogVmVjdG9yM1tdID0gW11cclxuICAvKiogVGhlIHBvaW50cyBkZWZpbmluZyB0aGUgZmlsbCBwb2x5Z29uLiBBbHNvIHByb2plY3RlZCBvbiB0aGUgbWVhc3VyZW1lbnQgcGxhbmUgKi9cclxuICBwcml2YXRlIHBvbHlnb25Qb2ludHM6IFZlY3RvcjNbXSA9IFtdXHJcblxyXG4gIHByaXZhdGUgZmlsbFBvbHlnb246IE1lc2hcclxuICBwcml2YXRlIHNuYXBEaXN0YW5jZTogbnVtYmVyID0gMTBcclxuXHJcbiAgcHVibGljIHNldCBpc1Zpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucG9pbnRHaXptb3MuZm9yRWFjaCgoZ2l6bW86IE1lYXN1cmVtZW50UG9pbnRHaXptbykgPT4ge1xyXG4gICAgICBnaXptby5lbmFibGUodmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBib3VuZHMoKTogQm94MyB7XHJcbiAgICBjb25zdCBib3ggPSBuZXcgQm94MygpXHJcbiAgICB0aGlzLnBvbHlnb25Qb2ludHMuZm9yRWFjaCgocG9pbnQ6IFZlY3RvcjMpID0+IGJveC5leHBhbmRCeVBvaW50KHBvaW50KSlcclxuICAgIHJldHVybiBib3hcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWVhc3VyZW1lbnRUeXBlKCk6IE1lYXN1cmVtZW50VHlwZSB7XHJcbiAgICByZXR1cm4gTWVhc3VyZW1lbnRUeXBlLkFSRUFcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuXHJcbiAgICB0aGlzLnR5cGUgPSAnQXJlYU1lYXN1cmVtZW50J1xyXG4gICAgLyoqIFdlIGNyZWF0ZSB0aGUgaW5pdGlhbCBnaXptbyB3aGljaCB3aWxsIGFsd2F5cyBkaXNwbGF5IHRoZSBhcmVhIHZhbHVlIHRleHQgbGFiZWwqL1xyXG4gICAgY29uc3QgZ2l6bW8gPSBuZXcgTWVhc3VyZW1lbnRQb2ludEdpem1vKClcclxuICAgIC8qKiBUaGUgZ2l6bW8ncyBUZXh0TGFiZWwgd2lsbCB3cml0ZSBgMWAgdG8gdGhlIHN0ZW5jaWwgYnVmZmVyICovXHJcbiAgICBnaXptby50ZXh0LmJhY2tncm91bmRNYXRlcmlhbC5zdGVuY2lsV3JpdGUgPSB0cnVlXHJcbiAgICBnaXptby50ZXh0LmJhY2tncm91bmRNYXRlcmlhbC5kZXB0aFdyaXRlID0gZmFsc2VcclxuICAgIGdpem1vLnRleHQuYmFja2dyb3VuZE1hdGVyaWFsLmRlcHRoVGVzdCA9IGZhbHNlXHJcbiAgICBnaXptby50ZXh0LmJhY2tncm91bmRNYXRlcmlhbC5zdGVuY2lsRnVuYyA9IEFsd2F5c1N0ZW5jaWxGdW5jXHJcbiAgICBnaXptby50ZXh0LmJhY2tncm91bmRNYXRlcmlhbC5zdGVuY2lsUmVmID0gMVxyXG4gICAgZ2l6bW8udGV4dC5iYWNrZ3JvdW5kTWF0ZXJpYWwuc3RlbmNpbFpQYXNzID0gUmVwbGFjZVN0ZW5jaWxPcFxyXG5cclxuICAgIGdpem1vLmVuYWJsZShmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpXHJcbiAgICB0aGlzLnBvaW50R2l6bW9zLnB1c2goZ2l6bW8pXHJcbiAgICB0aGlzLmFkZCh0aGlzLnBvaW50R2l6bW9zWzBdKVxyXG4gICAgdGhpcy5sYXllcnMuc2V0KE9iamVjdExheWVycy5NRUFTVVJFTUVOVFMpXHJcblxyXG4gICAgLyoqIFRoZSBwb2x5Z29uIHdpbGwgYWx3YXlzIGNvbnRhaW4gdGhlIGxhc3QgdG91Y2hlZCBwb2ludCB0byBhbGxvdyByZWFsIHRpbWUgdXBkYXRlcyAqL1xyXG4gICAgdGhpcy5wb2x5Z29uUG9pbnRzLnB1c2gobmV3IFZlY3RvcjMoKSlcclxuICB9XHJcblxyXG4gIC8qKiBGcmFtZSAqL1xyXG4gIHB1YmxpYyBmcmFtZVVwZGF0ZShjYW1lcmE6IENhbWVyYSwgc2l6ZTogVmVjdG9yMiwgYm91bmRzOiBCb3gzKSB7XHJcbiAgICBzdXBlci5mcmFtZVVwZGF0ZShjYW1lcmEsIHNpemUsIGJvdW5kcylcclxuICAgIHRoaXMucG9pbnRHaXptb3MuZm9yRWFjaCgoZ2l6bW86IE1lYXN1cmVtZW50UG9pbnRHaXptbykgPT4ge1xyXG4gICAgICBnaXptby5mcmFtZVVwZGF0ZShjYW1lcmEsIHNpemUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqIENhbGxlZCB3aGVudmVyIHRoZSBsYXN0IHRvdWNoZWQgbG9jYXRpb24gdXBkYXRlcyAqL1xyXG4gIHB1YmxpYyBsb2NhdGlvblVwZGF0ZWQocG9pbnQ6IFZlY3RvcjMsIG5vcm1hbDogVmVjdG9yMykge1xyXG4gICAgdGhpcy5zdXJmYWNlUG9pbnQuY29weShwb2ludClcclxuICAgIHRoaXMuc3VyZmFjZU5vcm1hbC5jb3B5KG5vcm1hbClcclxuXHJcbiAgICAvKiogVXBkYXRlIHRoZSBwb2x5Z29uIGZpcnN0IHBvaW50ICovXHJcbiAgICB0aGlzLnByb2plY3RPblBsYW5lKFxyXG4gICAgICB0aGlzLnN1cmZhY2VQb2ludCxcclxuICAgICAgdGhpcy5wbGFuZU9yaWdpbixcclxuICAgICAgdGhpcy5wbGFuZU5vcm1hbCxcclxuICAgICAgdGhpcy5wb2x5Z29uUG9pbnRzWzBdXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy51cGRhdGVGaWxsUG9seWdvbih0aGlzLnBvbHlnb25Qb2ludHMpXHJcbiAgfVxyXG5cclxuICAvKiogQ2FsbGVkIHdoZW52ZXIgYSBsb2NhdGlvbiBpcyBzZWxlY3RlZCBmb3IgbWVhc3VyaW5nKi9cclxuICBwdWJsaWMgbG9jYXRpb25TZWxlY3RlZCgpIHtcclxuICAgIC8qKiBJZiBmaXJzdCBwb2ludCwgZGV0ZXJtaW5lIHRoZSBtZWFzdXJlbWVudCBwbGFuZSAqL1xyXG4gICAgaWYgKHRoaXMucG9pbnRJbmRleCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnBsYW5lT3JpZ2luLmNvcHkodGhpcy5zdXJmYWNlUG9pbnQpXHJcbiAgICAgIHRoaXMucGxhbmVOb3JtYWwuY29weSh0aGlzLnN1cmZhY2VOb3JtYWwpXHJcbiAgICAgIHRoaXMuc3RhcnRQb2ludC5jb3B5KHRoaXMuc3VyZmFjZVBvaW50KVxyXG4gICAgICB0aGlzLnN0YXJ0Tm9ybWFsLmNvcHkodGhpcy5zdGFydE5vcm1hbClcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZFBvaW50KHRoaXMuc3VyZmFjZVBvaW50KVxyXG4gIH1cclxuXHJcbiAgLyoqIEFkZHMgYSBwb2ludCB0byB0aGUgYXJlYSBtZWFzdXJlbWVudCAqL1xyXG4gIHB1YmxpYyBhZGRQb2ludChwb2ludDogVmVjdG9yMyk6IG51bWJlciB7XHJcbiAgICBjb25zdCBtZWFzdXJlZFBvaW50ID0gbmV3IFZlY3RvcjMoKS5jb3B5KHBvaW50KVxyXG4gICAgaWYgKHRoaXMucG9pbnRJbmRleCA+IDApIHtcclxuICAgICAgbWVhc3VyZWRQb2ludC5jb3B5KHRoaXMucHJvamVjdE9uUGxhbmUocG9pbnQsIHRoaXMucGxhbmVPcmlnaW4sIHRoaXMucGxhbmVOb3JtYWwpKVxyXG4gICAgICAvKiogQ2hlY2sgdG8gc2VlIGlmIGFkZGVkIGxvY2F0aW9uIGNvaW5jaWRlcyB3aXRoIHRoZSBmaXJzdCBvbmUuIElmIHllcywgY2xvc2UgdGhlIG1lYXN1cmVtZW50ICovXHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9GaXJzdCA9IHBvaW50LmRpc3RhbmNlVG8odGhpcy5wb2ludHNbMF0pXHJcbiAgICAgIGlmIChkaXN0YW5jZVRvRmlyc3QgPCAxZS0xMCkge1xyXG4gICAgICAgIHRoaXMuX3N0YXRlID0gTWVhc3VyZW1lbnRTdGF0ZS5DT01QTEVURVxyXG4gICAgICAgIG1lYXN1cmVkUG9pbnQuY29weSh0aGlzLm1lYXN1cmVkUG9pbnRzWzBdKVxyXG4gICAgICAgIHBvaW50LmNvcHkodGhpcy5wb2ludHNbMF0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQWRkIGEgbmV3IGdpem1vICovXHJcbiAgICBjb25zdCBnaXptbyA9IG5ldyBNZWFzdXJlbWVudFBvaW50R2l6bW8oKVxyXG5cclxuICAgIGdpem1vLmVuYWJsZShmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpXHJcbiAgICB0aGlzLnBvaW50R2l6bW9zLnB1c2goZ2l6bW8pXHJcbiAgICB0aGlzLmFkZChnaXptbylcclxuXHJcbiAgICAvKiogUHVzaCB0aGUgcG9pbnRzICovXHJcbiAgICB0aGlzLnBvaW50cy5wdXNoKHBvaW50LmNsb25lKCkpXHJcbiAgICB0aGlzLm1lYXN1cmVkUG9pbnRzLnB1c2gobWVhc3VyZWRQb2ludClcclxuICAgIHRoaXMucG9seWdvblBvaW50cy5wdXNoKG1lYXN1cmVkUG9pbnQpXHJcbiAgICB0aGlzLnBvaW50SW5kZXgrK1xyXG5cclxuICAgIHZvaWQgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgIC8qKiBVcGRhdGUgcG9seWdvbiBhbmQgbGFiZWwgaWYgcmVxdWlyZWQgKi9cclxuICAgIGlmICh0aGlzLnBvaW50cy5sZW5ndGggPj0gMikge1xyXG4gICAgICB0aGlzLnByb2plY3RPblBsYW5lKFxyXG4gICAgICAgIHBvaW50LFxyXG4gICAgICAgIHRoaXMucGxhbmVPcmlnaW4sXHJcbiAgICAgICAgdGhpcy5wbGFuZU5vcm1hbCxcclxuICAgICAgICB0aGlzLnBvbHlnb25Qb2ludHNbMF1cclxuICAgICAgKVxyXG4gICAgICB0aGlzLnVwZGF0ZUZpbGxQb2x5Z29uKHRoaXMucG9seWdvblBvaW50cylcclxuICAgICAgdGhpcy51cGRhdGVMYWJlbExvY2F0aW9uKHRoaXMubWVhc3VyZWRQb2ludHMpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucG9pbnRzLmxlbmd0aFxyXG4gIH1cclxuXHJcbiAgLyoqIFJlbW92ZXMgcG9pbnQgZnJvbSB0aGUgbWVhc3VyZW1lbnQgKi9cclxuICBwdWJsaWMgcmVtb3ZlUG9pbnQoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLnBvaW50SW5kZXggPCAxKSByZXR1cm4gMFxyXG4gICAgdGhpcy5yZW1vdmUodGhpcy5wb2ludEdpem1vcy5wb3AoKSBhcyBNZWFzdXJlbWVudFBvaW50R2l6bW8pXHJcbiAgICB0aGlzLnBvaW50cy5wb3AoKVxyXG4gICAgdGhpcy5tZWFzdXJlZFBvaW50cy5wb3AoKVxyXG4gICAgdGhpcy5wb2x5Z29uUG9pbnRzLnBvcCgpXHJcbiAgICB0aGlzLnBvaW50SW5kZXgtLVxyXG5cclxuICAgIHZvaWQgdGhpcy51cGRhdGUoKVxyXG4gICAgdGhpcy51cGRhdGVGaWxsUG9seWdvbih0aGlzLnBvbHlnb25Qb2ludHMpXHJcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTG9jYXRpb24odGhpcy5tZWFzdXJlZFBvaW50cylcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wb2ludHMubGVuZ3RoXHJcbiAgfVxyXG5cclxuICAvKiogQXV0byBjb21wbGV0ZXMgdGhlIG1lYXN1cmVtZW50IGJ5IGpvaW5pbmcgd2l0aCB0aGUgZmlyc3QgcG9pbnQgKi9cclxuICBwdWJsaWMgYXV0b0ZpbmlzaCgpIHtcclxuICAgIHRoaXMuc3VyZmFjZVBvaW50LmNvcHkodGhpcy5wbGFuZU9yaWdpbilcclxuICAgIHRoaXMuc3VyZmFjZU5vcm1hbC5jb3B5KHRoaXMucGxhbmVOb3JtYWwpXHJcbiAgICB0aGlzLmxvY2F0aW9uU2VsZWN0ZWQoKVxyXG4gIH1cclxuXHJcbiAgLyoqIEFyZWEgbWVhc3VyZW1lbnQncyBjdXN0b20gc25hcCBmdW5jdGlvbi4gV2Ugc25hcCB0byB0aGUgZmlyc3QgcG9pbnQgYnkgZGVzaWduICovXHJcbiAgcHVibGljIHNuYXAoXHJcbiAgICBuZGNQb2ludDogVmVjdG9yMixcclxuICAgIF9pbnRlcnNlY3Rpb246IEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbixcclxuICAgIG91dFBvaW50OiBWZWN0b3IzLFxyXG4gICAgb3V0Tm9ybWFsOiBWZWN0b3IzXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5wb2ludEluZGV4IDwgMikgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgLyoqIEZpcnN0IHBvaW50IE5EQyAqL1xyXG4gICAgY29uc3QgZmlyc3RQb2ludFNTID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgICAuY29weSh0aGlzLnBvaW50c1swXSlcclxuICAgICAgLnByb2plY3QodGhpcy5yZW5kZXJpbmdDYW1lcmEgYXMgUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEpXHJcbiAgICBmaXJzdFBvaW50U1Muc2V0KFxyXG4gICAgICAoZmlyc3RQb2ludFNTLnggKiAwLjUgKyAwLjUpICogdGhpcy5yZW5kZXJpbmdTaXplLngsXHJcbiAgICAgIChmaXJzdFBvaW50U1MueSAqIC0wLjUgKyAwLjUpICogdGhpcy5yZW5kZXJpbmdTaXplLnksXHJcbiAgICAgIDBcclxuICAgIClcclxuICAgIC8qKiBNb3VzZSBwb2ludCBOREMgKi9cclxuICAgIGNvbnN0IG1vdXNlUG9pbnRTUyA9IG5ldyBWZWN0b3IzKFxyXG4gICAgICAobmRjUG9pbnQueCAqIDAuNSArIDAuNSkgKiB0aGlzLnJlbmRlcmluZ1NpemUueCxcclxuICAgICAgKG5kY1BvaW50LnkgKiAtMC41ICsgMC41KSAqIHRoaXMucmVuZGVyaW5nU2l6ZS55LFxyXG4gICAgICAwXHJcbiAgICApXHJcbiAgICBjb25zdCBTU0Rpc3RhbmNlID0gZmlyc3RQb2ludFNTLmRpc3RhbmNlVG8obW91c2VQb2ludFNTKVxyXG5cclxuICAgIC8qKiBJZiBkaXN0YW5jZSBzbWFsbGVyIHRoYW4gdGhyZXNob2xkLCBzbmFwICovXHJcbiAgICBpZiAoU1NEaXN0YW5jZSA8IHRoaXMuc25hcERpc3RhbmNlICogd2luZG93LmRldmljZVBpeGVsUmF0aW8pIHtcclxuICAgICAgb3V0UG9pbnQuY29weSh0aGlzLnBvaW50c1swXSlcclxuICAgICAgb3V0Tm9ybWFsLmNvcHkodGhpcy5wbGFuZU5vcm1hbClcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8qKiBVcGRhdGVzIHRoZSBnaXptbyBjb21wb25lbnRzIGJhc2VkIG9uIGl0J3Mgc3RhdGUgYW5kIHZhbHVlcyAqL1xyXG4gIHB1YmxpYyB1cGRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgcmV0OiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKClcclxuXHJcbiAgICB0aGlzLnBvaW50R2l6bW9zW3RoaXMucG9pbnRJbmRleF0udXBkYXRlTm9ybWFsSW5kaWNhdG9yKFxyXG4gICAgICB0aGlzLnN1cmZhY2VQb2ludCxcclxuICAgICAgdGhpcy5zdXJmYWNlTm9ybWFsXHJcbiAgICApXHJcbiAgICB0aGlzLnBvaW50R2l6bW9zW3RoaXMucG9pbnRJbmRleF0udXBkYXRlUG9pbnQodGhpcy5zdXJmYWNlUG9pbnQpXHJcblxyXG4gICAgaWYgKHRoaXMucG9pbnRJbmRleCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnBvaW50R2l6bW9zW3RoaXMucG9pbnRJbmRleF0uZW5hYmxlKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKVxyXG4gICAgICByZXR1cm4gcmV0XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFBvaW50ID0gdGhpcy5zdXJmYWNlUG9pbnRcclxuICAgIGNvbnN0IHByZXZQb2ludCA9IHRoaXMucG9pbnRzW3RoaXMucG9pbnRJbmRleCAtIDFdXHJcbiAgICB0aGlzLnBvaW50R2l6bW9zW3RoaXMucG9pbnRJbmRleF0udXBkYXRlTGluZShbcHJldlBvaW50LCBjdXJyZW50UG9pbnRdKVxyXG4gICAgdGhpcy5wb2ludEdpem1vc1t0aGlzLnBvaW50SW5kZXhdLmVuYWJsZSh0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSlcclxuICAgIHRoaXMucG9pbnRHaXptb3NbdGhpcy5wb2ludEluZGV4IC0gMV0uZW5hYmxlKGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSlcclxuXHJcbiAgICBpZiAodGhpcy5tZWFzdXJlZFBvaW50cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNob2VsYWNlQXJlYTNEKHRoaXMucG9seWdvblBvaW50cywgdGhpcy5wbGFuZU5vcm1hbClcclxuICAgICAgcmV0ID0gdGhpcy5wb2ludEdpem1vc1swXS51cGRhdGVUZXh0KFxyXG4gICAgICAgIGAkeyh0aGlzLnZhbHVlICogZ2V0Q29udmVyc2lvbkZhY3RvcignbScsIHRoaXMudW5pdHMpKS50b0ZpeGVkKFxyXG4gICAgICAgICAgdGhpcy5wcmVjaXNpb25cclxuICAgICAgICApfSAke3RoaXMudW5pdHN9wrJgLFxyXG4gICAgICAgIHRoaXMubGFiZWxQb2ludFxyXG4gICAgICApXHJcbiAgICAgIHRoaXMucG9pbnRHaXptb3NbMF0uZW5hYmxlKGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gTWVhc3VyZW1lbnRTdGF0ZS5DT01QTEVURSkge1xyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMucG9pbnRzLmxlbmd0aCAtIDE7IGsrKykge1xyXG4gICAgICAgIHRoaXMucG9pbnRHaXptb3Nba10udXBkYXRlUG9pbnQodGhpcy5wb2ludHNba10pXHJcbiAgICAgICAgdGhpcy5wb2ludEdpem1vc1trXS51cGRhdGVMaW5lKFt0aGlzLnBvaW50c1trXSwgdGhpcy5wb2ludHNbayArIDFdXSlcclxuICAgICAgICB0aGlzLnBvaW50R2l6bW9zW2tdLmVuYWJsZShmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucG9pbnRHaXptb3NbdGhpcy5wb2ludHMubGVuZ3RoIC0gMV0udXBkYXRlTGluZShbXHJcbiAgICAgICAgdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoIC0gMV0sXHJcbiAgICAgICAgdGhpcy5wb2ludHNbMF1cclxuICAgICAgXSlcclxuICAgICAgLyoqIFRoZXJlIGlzIGFsd2F5cyBhbiBleHRyYSBnaXptbywgc28gZ2l6bW8gY291bnQgaXMgcG9pbnQgY291bnQgKyAxICovXHJcbiAgICAgIHRoaXMucG9pbnRHaXptb3NbdGhpcy5wb2ludHMubGVuZ3RoXS5lbmFibGUoZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpXHJcbiAgICAgIHRoaXMucG9pbnRHaXptb3NbdGhpcy5wb2ludHMubGVuZ3RoIC0gMV0uZW5hYmxlKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKVxyXG4gICAgICB0aGlzLnBvaW50R2l6bW9zWzBdLmVuYWJsZShmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSlcclxuXHJcbiAgICAgIC8qKiBXZSBmb3JjZSBhIHN5bmMgc28gdGhhdCB3ZSBnZXQgY29ycmVjdCB0aW1pbmcgb24gdGV4dCBmaW5zaGluZyAqL1xyXG4gICAgICB0aGlzLnBvaW50R2l6bW9zWzBdLnRleHQuX25lZWRzU3luYyA9IHRydWVcclxuICAgICAgcmV0ID0gdGhpcy5wb2ludEdpem1vc1swXS51cGRhdGVUZXh0KFxyXG4gICAgICAgIGAkeyh0aGlzLnZhbHVlICogZ2V0Q29udmVyc2lvbkZhY3RvcignbScsIHRoaXMudW5pdHMpKS50b0ZpeGVkKFxyXG4gICAgICAgICAgdGhpcy5wcmVjaXNpb25cclxuICAgICAgICApfSAke3RoaXMudW5pdHN9wrJgLFxyXG4gICAgICAgIHRoaXMubGFiZWxQb2ludFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldFxyXG4gIH1cclxuXHJcbiAgLyoqIFVwZGF0ZXMgdGhlIGFyZWEgbGFiZWwgbG9jYXRpb24gdXNpbmcgdGhlIHBvbHlvbmcncyBwb2xlIG9mIGlubmFjY2Vzc2liaWxpdHlcclxuICAgKiAgV2UgZG8gdGhpcyB0byBhdm9pZCBoYXZpbmcgdGhlIGxhYmVsIG91dHNpZGUgb2YgdGhlIHBvbHlnaW4gaW4gY2FzZSBvZiBjb25jYXZlIHBvbHlnb25zXHJcbiAgICogIEl0IHdvcmtzIGdyZWF0IGZvciBjb25jYXZlIHBvbHlnb25zLCBidXQgbm90IHNvIGdyZWF0IGZvciBjb252ZXggcmVndWxhciBvbmVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbExvY2F0aW9uKHBvaW50czogVmVjdG9yM1tdKSB7XHJcbiAgICAvKiogV2UgcGxhY2UgcG9pbnRzIG9uIHRoZSBYWSBwbGFuZSBzaW5jZSB0aGUgbGlicmFyeSByZXF1aXJlcyB1cyB0byAqL1xyXG4gICAgY29uc3QgcSA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbVVuaXRWZWN0b3JzKFxyXG4gICAgICB0aGlzLnBsYW5lTm9ybWFsLFxyXG4gICAgICBuZXcgVmVjdG9yMygwLCAwLCAxKVxyXG4gICAgKVxyXG4gICAgY29uc3QgaW52USA9IG5ldyBRdWF0ZXJuaW9uKCkuY29weShxKS5pbnZlcnQoKVxyXG4gICAgY29uc3QgdmVjdG9yID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgY29uc3QgZmxhdFBvaW50cyA9IHBvaW50cy5tYXAoKHA6IFZlY3RvcjMpID0+IHtcclxuICAgICAgdmVjdG9yLmNvcHkocClcclxuICAgICAgdmVjdG9yLmFwcGx5UXVhdGVybmlvbihxKVxyXG4gICAgICByZXR1cm4gW3ZlY3Rvci54LCB2ZWN0b3IueV1cclxuICAgIH0pXHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBjb25zdCBwID0gcG9seWxhYmVsKFtmbGF0UG9pbnRzXSwgMC4xKVxyXG5cclxuICAgIHRoaXMubGFiZWxQb2ludC5zZXQocFswXSwgcFsxXSwgdGhpcy5wbGFuZU9yaWdpbi56KVxyXG4gICAgLyoqIFdlIHJvdGF0ZSBiYWNrICovXHJcbiAgICB0aGlzLmxhYmVsUG9pbnQuYXBwbHlRdWF0ZXJuaW9uKGludlEpXHJcbiAgICB0aGlzLnByb2plY3RPblBsYW5lKFxyXG4gICAgICB0aGlzLmxhYmVsUG9pbnQsXHJcbiAgICAgIHRoaXMucGxhbmVPcmlnaW4sXHJcbiAgICAgIHRoaXMucGxhbmVOb3JtYWwsXHJcbiAgICAgIHRoaXMubGFiZWxQb2ludFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqIFVwZGF0ZXMgdGhlIG1lYXN1cmVkIHBvbHlnb24ncyBnZW9tZXRyeSAqL1xyXG4gIHByaXZhdGUgdXBkYXRlRmlsbFBvbHlnb24ocG9pbnRzOiBWZWN0b3IzW10pIHtcclxuICAgIGlmICghdGhpcy5maWxsUG9seWdvbikge1xyXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBTcGVja2xlQmFzaWNNYXRlcmlhbCh7XHJcbiAgICAgICAgY29sb3I6IDB4MDQ3ZWZiLFxyXG4gICAgICAgIHNpZGU6IERvdWJsZVNpZGUsXHJcbiAgICAgICAgb3BhY2l0eTogMC41LFxyXG4gICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICAgIHRvbmVNYXBwZWQ6IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIG1hdGVyaWFsLmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG4gICAgICAvKiogVGhlIHRyYW5zcGFyZW50IGFyZWEgcGxhbmUgd2lsbCBvbmx5IGRyYXcgd2VyZSB0aGUgc3RlbmNpbCBidWZmZXIgaXMgKipOT1QqKiBgMWAsIGVmZmVjdGl2ZWx5IG5vdCBvdmVyZHJhd2luZyB0aGUgdGV4dCBsYWJlbCAqL1xyXG4gICAgICBtYXRlcmlhbC5kZXB0aFdyaXRlID0gZmFsc2VcclxuICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gZmFsc2VcclxuICAgICAgbWF0ZXJpYWwuc3RlbmNpbFdyaXRlID0gdHJ1ZVxyXG4gICAgICBtYXRlcmlhbC5zdGVuY2lsRnVuYyA9IE5vdEVxdWFsU3RlbmNpbEZ1bmNcclxuICAgICAgbWF0ZXJpYWwuc3RlbmNpbFJlZiA9IDFcclxuICAgICAgbWF0ZXJpYWwuc3RlbmNpbFpQYXNzID0gS2VlcFN0ZW5jaWxPcFxyXG5cclxuICAgICAgdGhpcy5maWxsUG9seWdvbiA9IG5ldyBNZXNoKG5ldyBCdWZmZXJHZW9tZXRyeSgpLCBtYXRlcmlhbClcclxuICAgICAgdGhpcy5maWxsUG9seWdvbi5yZW5kZXJPcmRlciA9IDEwMFxyXG4gICAgICB0aGlzLmZpbGxQb2x5Z29uLmZydXN0dW1DdWxsZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLmZpbGxQb2x5Z29uLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLk1FQVNVUkVNRU5UUylcclxuICAgICAgdGhpcy5hZGQodGhpcy5maWxsUG9seWdvbilcclxuICAgIH1cclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5maWxsUG9seWdvbi5nZW9tZXRyeVxyXG4gICAgY29uc3QgcG9zaXRpb24gPSBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJylcclxuICAgIGNvbnN0IGluZGV4ID0gZ2VvbWV0cnkuZ2V0SW5kZXgoKVxyXG5cclxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMykge1xyXG4gICAgICB0aGlzLmZpbGxQb2x5Z29uLnZpc2libGUgPSBmYWxzZVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGxQb2x5Z29uLnZpc2libGUgPSB0cnVlXHJcblxyXG4gICAgY29uc3QgW2F4aXMxLCBheGlzMl0gPSB0aGlzLmNob29zZVByb2plY3Rpb25BeGVzKHRoaXMucGxhbmVOb3JtYWwpXHJcbiAgICBjb25zdCBwcm9qZWN0ZWRQb2ludHMgPSBwb2ludHMubWFwKFxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAocCkgPT4gbmV3IFZlY3RvcjIocFtheGlzMV0sIHBbYXhpczJdKVxyXG4gICAgKVxyXG4gICAgY29uc3QgaW5kaWNlcyA9IEdlb21ldHJ5LnRyaWFuZ3VsYXRlUG9seWdvbihwcm9qZWN0ZWRQb2ludHMpXHJcblxyXG4gICAgaWYgKCFwb3NpdGlvbiB8fCBwb3NpdGlvbi5jb3VudCAhPT0gcG9pbnRzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBidWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAzKVxyXG4gICAgICBwb2ludHMuZm9yRWFjaCgocG9pbnQ6IFZlY3RvcjMsIGluZGV4KSA9PiBwb2ludC50b0FycmF5KGJ1ZmZlciwgaW5kZXggKiAzKSlcclxuICAgICAgY29uc3QgcG9zQXR0cmlidXRlID0gbmV3IEJ1ZmZlckF0dHJpYnV0ZShidWZmZXIsIDMpXHJcbiAgICAgIHBvc0F0dHJpYnV0ZS5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKVxyXG4gICAgICBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgcG9zQXR0cmlidXRlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcG9pbnRzLmZvckVhY2goKHBvaW50OiBWZWN0b3IzLCBpbmRleCkgPT5cclxuICAgICAgICBwb2ludC50b0FycmF5KHBvc2l0aW9uLmFycmF5LCBpbmRleCAqIDMpXHJcbiAgICAgIClcclxuICAgICAgcG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpbmRleCB8fCBpbmRleC5jb3VudCAhPT0gaW5kaWNlcy5sZW5ndGgpIHtcclxuICAgICAgZ2VvbWV0cnkuc2V0SW5kZXgobmV3IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZShpbmRpY2VzLCAxKSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIDsoaW5kZXguYXJyYXkgYXMgVWludDE2QXJyYXkpLnNldChpbmRpY2VzLCAwKVxyXG4gICAgICBpbmRleC5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIH1cclxuICAgIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpXHJcbiAgfVxyXG5cclxuICAvKiogTWVhc3VyZW1lbnQncyBjdXN0b20gcGlja2luZy4gV2UgZG9uJ3QgdGVzdCB0aGUgcG9seWdvbiB3aGVuIGNhc3RpbmcgKi9cclxuICBwdWJsaWMgcmF5Y2FzdChyYXljYXN0ZXI6IFJheWNhc3RlciwgaW50ZXJzZWN0czogQXJyYXk8SW50ZXJzZWN0aW9uPikge1xyXG4gICAgY29uc3QgcmVzdWx0czogQXJyYXk8SW50ZXJzZWN0aW9uPiA9IFtdXHJcbiAgICB0aGlzLnBvaW50R2l6bW9zLmZvckVhY2goKGdpem1vOiBNZWFzdXJlbWVudFBvaW50R2l6bW8pID0+IHtcclxuICAgICAgZ2l6bW8ucmF5Y2FzdChyYXljYXN0ZXIsIHJlc3VsdHMpXHJcbiAgICB9KVxyXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoKSB7XHJcbiAgICAgIGludGVyc2VjdHMucHVzaCh7XHJcbiAgICAgICAgZGlzdGFuY2U6IHJlc3VsdHNbMF0uZGlzdGFuY2UsXHJcbiAgICAgICAgZmFjZTogcmVzdWx0c1swXS5mYWNlLFxyXG4gICAgICAgIGZhY2VJbmRleDogcmVzdWx0c1swXS5mYWNlSW5kZXgsXHJcbiAgICAgICAgb2JqZWN0OiB0aGlzLFxyXG4gICAgICAgIHBvaW50OiByZXN1bHRzWzBdLnBvaW50LFxyXG4gICAgICAgIHV2OiByZXN1bHRzWzBdLnV2XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlnaGxpZ2h0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnBvaW50R2l6bW9zLmZvckVhY2goKGdpem1vOiBNZWFzdXJlbWVudFBvaW50R2l6bW8pID0+IHtcclxuICAgICAgZ2l6bW8uaGlnaGxpZ2h0ID0gdmFsdWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2xpcHBpbmdQbGFuZXMocGxhbmVzOiBQbGFuZVtdKSB7XHJcbiAgICB0aGlzLnBvaW50R2l6bW9zLmZvckVhY2goKGdpem1vOiBNZWFzdXJlbWVudFBvaW50R2l6bW8pID0+IHtcclxuICAgICAgZ2l6bW8udXBkYXRlQ2xpcHBpbmdQbGFuZXMocGxhbmVzKVxyXG4gICAgfSlcclxuICAgIDsodGhpcy5maWxsUG9seWdvbi5tYXRlcmlhbCBhcyBNYXRlcmlhbCkuY2xpcHBpbmdQbGFuZXMgPSBwbGFuZXNcclxuICB9XHJcblxyXG4gIC8qKiBIYWQgdG8gbWFrZSBteSBvd24uIFRocmVlJ3MgSGVzc2Ugbm9ybWFsIGZvcm0gdHJpcHMgbWUgdXAgKi9cclxuICBwcml2YXRlIHByb2plY3RPblBsYW5lKFxyXG4gICAgcG9pbnQ6IFZlY3RvcjMsXHJcbiAgICBwbGFuZU9yaWdpbjogVmVjdG9yMyxcclxuICAgIHBsYW5lTm9ybWFsOiBWZWN0b3IzLFxyXG4gICAgZGVzdGluYXRpb24/OiBWZWN0b3IzXHJcbiAgKSB7XHJcbiAgICBjb25zdCBwID0gX3ZlYzMwLmNvcHkocG9pbnQpXHJcbiAgICBjb25zdCBvID0gX3ZlYzMxLmNvcHkocGxhbmVPcmlnaW4pXHJcbiAgICBjb25zdCBuID0gX3ZlYzMyLmNvcHkocGxhbmVOb3JtYWwpLm5vcm1hbGl6ZSgpXHJcblxyXG4gICAgY29uc3QgdiA9IHAuc3ViKG8pXHJcbiAgICBjb25zdCBkaXN0ID0gdi5kb3QobilcclxuICAgIHJldHVybiAoZGVzdGluYXRpb24gPyBkZXN0aW5hdGlvbiA6IG5ldyBWZWN0b3IzKCkpXHJcbiAgICAgIC5jb3B5KHBvaW50KVxyXG4gICAgICAuc3ViKG4ubXVsdGlwbHlTY2FsYXIoZGlzdCkpXHJcbiAgfVxyXG5cclxuICAvKiogU2VsZWN0cyB0aGUgdmVjdG9yIGNvbXBvbmVudHMgdG8gdXNlIGJhc2VkIG9uIHRoZSBtZWFzdXJlbWVudCBwbGFuZS5cclxuICAgKiAgRG9uJ3QgcmVhbGx5IGxpa2UgaXQsIGJ1dCBpdCB3b3Jrc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hvb3NlUHJvamVjdGlvbkF4ZXMobm9ybWFsOiBWZWN0b3IzKSB7XHJcbiAgICBjb25zdCBhYnNOb3JtYWwgPSBub3JtYWxcclxuICAgICAgLmNsb25lKClcclxuICAgICAgLnNldChNYXRoLmFicyhub3JtYWwueCksIE1hdGguYWJzKG5vcm1hbC55KSwgTWF0aC5hYnMobm9ybWFsLnopKVxyXG5cclxuICAgIGlmIChhYnNOb3JtYWwueiA+PSBhYnNOb3JtYWwueCAmJiBhYnNOb3JtYWwueiA+PSBhYnNOb3JtYWwueSkge1xyXG4gICAgICByZXR1cm4gWyd4JywgJ3knLCAneiddIC8vIFByb2plY3QgdG8gWFkgcGxhbmVcclxuICAgIH0gZWxzZSBpZiAoYWJzTm9ybWFsLnkgPj0gYWJzTm9ybWFsLnggJiYgYWJzTm9ybWFsLnkgPj0gYWJzTm9ybWFsLnopIHtcclxuICAgICAgcmV0dXJuIFsneCcsICd6JywgJ3knXSAvLyBQcm9qZWN0IHRvIFhaIHBsYW5lXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gWyd5JywgJ3onLCAneCddIC8vIFByb2plY3QgdG8gWVogcGxhbmVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBBcmVhIGNhbGN1bGF0aW9uICovXHJcbiAgcHJpdmF0ZSBzaG9lbGFjZUFyZWEocG9pbnRzOiBWZWN0b3IyW10pIHtcclxuICAgIGNvbnN0IG4gPSBwb2ludHMubGVuZ3RoXHJcbiAgICBpZiAobiA8IDMpIHJldHVybiAwIC8vIEF0IGxlYXN0IDMgcG9pbnRzIG5lZWRlZCBmb3IgYSBwb2x5Z29uXHJcblxyXG4gICAgbGV0IGFyZWEgPSAwXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICBjb25zdCBqID0gKGkgKyAxKSAlIG4gLy8gV3JhcCBhcm91bmQgZm9yIHRoZSBsYXN0IHBvaW50XHJcbiAgICAgIGFyZWEgKz0gcG9pbnRzW2ldLnggKiBwb2ludHNbal0ueSAtIHBvaW50c1tqXS54ICogcG9pbnRzW2ldLnlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTWF0aC5hYnMoYXJlYSkgLyAyXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob2VsYWNlQXJlYTNEKHBvaW50czogVmVjdG9yM1tdLCBub3JtYWw6IFZlY3RvcjMpIHtcclxuICAgIGNvbnN0IFtheGlzMSwgYXhpczJdID0gdGhpcy5jaG9vc2VQcm9qZWN0aW9uQXhlcyhub3JtYWwpXHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBjb25zdCBwcm9qZWN0ZWRQb2ludHMgPSBwb2ludHMubWFwKChwKSA9PiBuZXcgVmVjdG9yMihwW2F4aXMxXSwgcFtheGlzMl0pKVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNob2VsYWNlQXJlYShwcm9qZWN0ZWRQb2ludHMpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9NZWFzdXJlbWVudERhdGEoKTogTWVhc3VyZW1lbnREYXRhIHtcclxuICAgIGNvbnN0IGRhdGEgPSBzdXBlci50b01lYXN1cmVtZW50RGF0YSgpXHJcbiAgICBkYXRhLnN0YXJ0UG9pbnQgPSBbdGhpcy5wbGFuZU9yaWdpbi54LCB0aGlzLnBsYW5lT3JpZ2luLnksIHRoaXMucGxhbmVPcmlnaW4uel1cclxuICAgIGRhdGEuc3RhcnROb3JtYWwgPSBbdGhpcy5wbGFuZU5vcm1hbC54LCB0aGlzLnBsYW5lTm9ybWFsLnksIHRoaXMucGxhbmVOb3JtYWwuel1cclxuICAgIGRhdGEuaW5uZXJQb2ludHMgPSB0aGlzLnBvaW50cy5tYXAoKHZhbHVlKSA9PiBbdmFsdWUueCwgdmFsdWUueSwgdmFsdWUuel0pXHJcbiAgICByZXR1cm4gZGF0YVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZyb21NZWFzdXJlbWVudERhdGEoZGF0YTogTWVhc3VyZW1lbnREYXRhKTogdm9pZCB7XHJcbiAgICBzdXBlci5mcm9tTWVhc3VyZW1lbnREYXRhKGRhdGEpXHJcbiAgICB0aGlzLnBsYW5lT3JpZ2luLmZyb21BcnJheShkYXRhLnN0YXJ0UG9pbnQpXHJcbiAgICB0aGlzLnBsYW5lTm9ybWFsLmZyb21BcnJheShkYXRhLnN0YXJ0Tm9ybWFsKVxyXG4gICAgaWYgKGRhdGEuaW5uZXJQb2ludHMpIHtcclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBkYXRhLmlubmVyUG9pbnRzPy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIHRoaXMuYWRkUG9pbnQobmV3IFZlY3RvcjMoKS5mcm9tQXJyYXkoZGF0YS5pbm5lclBvaW50c1trXSkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBCb3gzLFxyXG4gIENhbWVyYSxcclxuICBDb2xvcixcclxuICBNYXRlcmlhbCxcclxuICBNYXRyaXg0LFxyXG4gIE9ydGhvZ3JhcGhpY0NhbWVyYSxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBQbGFuZSxcclxuICBSYXljYXN0ZXIsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzLFxyXG4gIFZlY3RvcjQsXHJcbiAgdHlwZSBJbnRlcnNlY3Rpb25cclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgZ2V0Q29udmVyc2lvbkZhY3RvciB9IGZyb20gJy4uLy4uL2NvbnZlcnRlci9Vbml0cy5qcydcclxuaW1wb3J0IHsgTWVhc3VyZW1lbnQsIE1lYXN1cmVtZW50U3RhdGUgfSBmcm9tICcuL01lYXN1cmVtZW50LmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyBUZXh0TGFiZWwgfSBmcm9tICcuLi8uLi9vYmplY3RzL1RleHRMYWJlbC5qcydcclxuaW1wb3J0IHsgTWVhc3VyZW1lbnRQb2ludEdpem1vIH0gZnJvbSAnLi9NZWFzdXJlbWVudFBvaW50R2l6bW8uanMnXHJcbmltcG9ydCB7IE1lYXN1cmVtZW50VHlwZSB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZC92aWV3ZXIvc3RhdGUnXHJcblxyXG5jb25zdCBfdmVjNDAgPSBuZXcgVmVjdG9yNCgpXHJcbmNvbnN0IF92ZWM0MSA9IG5ldyBWZWN0b3I0KClcclxuY29uc3QgX3ZlYzQyID0gbmV3IFZlY3RvcjQoKVxyXG5jb25zdCBfdmVjNDMgPSBuZXcgVmVjdG9yNCgpXHJcbmNvbnN0IF9tYXQ0MCA9IG5ldyBNYXRyaXg0KClcclxuY29uc3QgX21hdDQxID0gbmV3IE1hdHJpeDQoKVxyXG5cclxuZXhwb3J0IGNsYXNzIFBvaW50TWVhc3VyZW1lbnQgZXh0ZW5kcyBNZWFzdXJlbWVudCB7XHJcbiAgcHJvdGVjdGVkIGdpem1vOiBNZWFzdXJlbWVudFBvaW50R2l6bW9cclxuICBwcm90ZWN0ZWQgeExhYmVsOiBUZXh0TGFiZWxcclxuICBwcm90ZWN0ZWQgeUxhYmVsOiBUZXh0TGFiZWxcclxuICBwcm90ZWN0ZWQgekxhYmVsOiBUZXh0TGFiZWxcclxuICBwcm90ZWN0ZWQgeExhYmVsUG9zaXRpb246IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJvdGVjdGVkIHlMYWJlbFBvc2l0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHByb3RlY3RlZCB6TGFiZWxQb3NpdGlvbjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGl4ZWxzT2ZmWCA9IDUwICogd2luZG93LmRldmljZVBpeGVsUmF0aW9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGl4ZWxzT2ZmWSA9IDI1ICogd2luZG93LmRldmljZVBpeGVsUmF0aW9cclxuXHJcbiAgcHVibGljIHNldCBpc1Zpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZ2l6bW8udmlzaWJsZSA9IHZhbHVlXHJcbiAgICB0aGlzLnhMYWJlbC52aXNpYmxlID0gdmFsdWVcclxuICAgIHRoaXMueUxhYmVsLnZpc2libGUgPSB2YWx1ZVxyXG4gICAgdGhpcy56TGFiZWwudmlzaWJsZSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1lYXN1cmVtZW50VHlwZSgpOiBNZWFzdXJlbWVudFR5cGUge1xyXG4gICAgcmV0dXJuIE1lYXN1cmVtZW50VHlwZS5QT0lOVFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy50eXBlID0gJ1BvaW50TWVhc3VyZW1lbnQnXHJcbiAgICB0aGlzLmdpem1vID0gbmV3IE1lYXN1cmVtZW50UG9pbnRHaXptbygpXHJcbiAgICB0aGlzLmFkZCh0aGlzLmdpem1vKVxyXG5cclxuICAgIHRoaXMueExhYmVsID0gbmV3IFRleHRMYWJlbCh7XHJcbiAgICAgIHRleHQ6ICdzYW1wbGUnLFxyXG4gICAgICB0ZXh0Q29sb3I6IG5ldyBDb2xvcigweGZmZmZmZiksXHJcbiAgICAgIGZvbnRTaXplOiAxMSxcclxuICAgICAgYmlsbGJvYXJkOiAnc2NyZWVuJyxcclxuICAgICAgYW5jaG9yWDogJ2xlZnQnLFxyXG4gICAgICBhbmNob3JZOiAnbWlkZGxlJyxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBuZXcgQ29sb3IoMHhmYjA0MDQpLFxyXG4gICAgICBiYWNrZ3JvdW5kTWFyZ2luczogbmV3IFZlY3RvcjIoMzAsIDEwKSxcclxuICAgICAgYmFja2dyb3VuZENvcm5lclJhZGl1czogMC4zLFxyXG4gICAgICBvYmplY3RMYXllcjogT2JqZWN0TGF5ZXJzLk1FQVNVUkVNRU5UU1xyXG4gICAgfSlcclxuICAgIHRoaXMueExhYmVsLm5hbWUgPSAnWExhYmVsJ1xyXG4gICAgdGhpcy54TGFiZWwubWF0ZXJpYWwuZGVwdGhUZXN0ID0gZmFsc2VcclxuICAgIHRoaXMuYWRkKHRoaXMueExhYmVsKVxyXG5cclxuICAgIHRoaXMueUxhYmVsID0gbmV3IFRleHRMYWJlbCh7XHJcbiAgICAgIHRleHQ6ICdzYW1wbGUnLFxyXG4gICAgICB0ZXh0Q29sb3I6IG5ldyBDb2xvcigweGZmZmZmZiksXHJcbiAgICAgIGZvbnRTaXplOiAxMSxcclxuICAgICAgYW5jaG9yWDogJ2xlZnQnLFxyXG4gICAgICBhbmNob3JZOiAnbWlkZGxlJyxcclxuICAgICAgYmlsbGJvYXJkOiAnc2NyZWVuJyxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBuZXcgQ29sb3IoMHgwM2M5MDMpLFxyXG4gICAgICBiYWNrZ3JvdW5kTWFyZ2luczogbmV3IFZlY3RvcjIoMzAsIDEwKSxcclxuICAgICAgYmFja2dyb3VuZENvcm5lclJhZGl1czogMC4zLFxyXG4gICAgICBvYmplY3RMYXllcjogT2JqZWN0TGF5ZXJzLk1FQVNVUkVNRU5UU1xyXG4gICAgfSlcclxuICAgIHRoaXMueUxhYmVsLm5hbWUgPSAnWUxhYmVsJ1xyXG4gICAgdGhpcy55TGFiZWwubWF0ZXJpYWwuZGVwdGhUZXN0ID0gZmFsc2VcclxuICAgIHRoaXMuYWRkKHRoaXMueUxhYmVsKVxyXG5cclxuICAgIHRoaXMuekxhYmVsID0gbmV3IFRleHRMYWJlbCh7XHJcbiAgICAgIHRleHQ6ICdzYW1wbGUnLFxyXG4gICAgICB0ZXh0Q29sb3I6IG5ldyBDb2xvcigweGZmZmZmZiksXHJcbiAgICAgIGZvbnRTaXplOiAxMSxcclxuICAgICAgYmlsbGJvYXJkOiAnc2NyZWVuJyxcclxuICAgICAgYW5jaG9yWDogJ2xlZnQnLFxyXG4gICAgICBhbmNob3JZOiAnbWlkZGxlJyxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBuZXcgQ29sb3IoMHgwNDdlZmIpLFxyXG4gICAgICBiYWNrZ3JvdW5kTWFyZ2luczogbmV3IFZlY3RvcjIoMzAsIDEwKSxcclxuICAgICAgYmFja2dyb3VuZENvcm5lclJhZGl1czogMC4zLFxyXG4gICAgICBvYmplY3RMYXllcjogT2JqZWN0TGF5ZXJzLk1FQVNVUkVNRU5UU1xyXG4gICAgfSlcclxuICAgIHRoaXMuekxhYmVsLm5hbWUgPSAnWkxhYmVsJ1xyXG4gICAgdGhpcy56TGFiZWwubWF0ZXJpYWwuZGVwdGhUZXN0ID0gZmFsc2VcclxuICAgIHRoaXMuYWRkKHRoaXMuekxhYmVsKVxyXG5cclxuICAgIHRoaXMubGF5ZXJzLnNldChPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZyYW1lVXBkYXRlKGNhbWVyYTogQ2FtZXJhLCBzaXplOiBWZWN0b3IyLCBib3VuZHM6IEJveDMpIHtcclxuICAgIHN1cGVyLmZyYW1lVXBkYXRlKGNhbWVyYSwgc2l6ZSwgYm91bmRzKVxyXG5cclxuICAgIHRoaXMudXBkYXRlTGFiZWxQb3NpdGlvbnMoKVxyXG4gICAgdGhpcy54TGFiZWwucG9zaXRpb24uY29weSh0aGlzLnhMYWJlbFBvc2l0aW9uKVxyXG4gICAgdGhpcy55TGFiZWwucG9zaXRpb24uY29weSh0aGlzLnlMYWJlbFBvc2l0aW9uKVxyXG4gICAgdGhpcy56TGFiZWwucG9zaXRpb24uY29weSh0aGlzLnpMYWJlbFBvc2l0aW9uKVxyXG4gICAgdGhpcy5naXptby5mcmFtZVVwZGF0ZShjYW1lcmEsIHNpemUpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9jYXRpb25VcGRhdGVkKHBvaW50OiBWZWN0b3IzLCBub3JtYWw6IFZlY3RvcjMpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhcnRQb2ludC5jb3B5KHBvaW50KVxyXG4gICAgdGhpcy5zdGFydE5vcm1hbC5jb3B5KG5vcm1hbClcclxuICB9XHJcbiAgcHVibGljIGxvY2F0aW9uU2VsZWN0ZWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gTWVhc3VyZW1lbnRTdGF0ZS5EQU5HTElOR19TVEFSVClcclxuICAgICAgdGhpcy5zdGF0ZSA9IE1lYXN1cmVtZW50U3RhdGUuQ09NUExFVEVcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVMYWJlbFBvc2l0aW9ucygpIHtcclxuICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMucmVuZGVyaW5nQ2FtZXJhIGFzIFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhXHJcbiAgICBpZiAoIWNhbWVyYSkgcmV0dXJuXHJcbiAgICBjb25zdCBuZGNQb3MgPSBfdmVjNDAuc2V0KFxyXG4gICAgICB0aGlzLnN0YXJ0UG9pbnQueCxcclxuICAgICAgdGhpcy5zdGFydFBvaW50LnksXHJcbiAgICAgIHRoaXMuc3RhcnRQb2ludC56LFxyXG4gICAgICAxXHJcbiAgICApXHJcbiAgICBuZGNQb3MuYXBwbHlNYXRyaXg0KGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NChjYW1lcmEucHJvamVjdGlvbk1hdHJpeClcclxuICAgIGNvbnN0IHBlcnNwZWN0aXZlID0gbmRjUG9zLndcclxuICAgIG5kY1Bvcy5tdWx0aXBseVNjYWxhcigxIC8gcGVyc3BlY3RpdmUpXHJcbiAgICBjb25zdCB4T2ZmID0gKHRoaXMucGl4ZWxzT2ZmWCAvIHRoaXMucmVuZGVyaW5nU2l6ZS54KSAqIDJcclxuICAgIGNvbnN0IHlPZmYgPSAodGhpcy5waXhlbHNPZmZZIC8gdGhpcy5yZW5kZXJpbmdTaXplLnkpICogMlxyXG4gICAgY29uc3QgeFBvcyA9IF92ZWM0MS5zZXQobmRjUG9zLnggKyB4T2ZmLCBuZGNQb3MueSArIHlPZmYsIG5kY1Bvcy56LCAxKVxyXG4gICAgY29uc3QgeVBvcyA9IF92ZWM0Mi5zZXQobmRjUG9zLnggKyB4T2ZmLCBuZGNQb3MueSwgbmRjUG9zLnosIDEpXHJcbiAgICBjb25zdCB6UG9zID0gX3ZlYzQzLnNldChuZGNQb3MueCArIHhPZmYsIG5kY1Bvcy55IC0geU9mZiwgbmRjUG9zLnosIDEpXHJcblxyXG4gICAgY29uc3QgaW52UHJvamVjdGlvbiA9IF9tYXQ0MC5jb3B5KGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKVxyXG4gICAgY29uc3QgaW52VmlldyA9IF9tYXQ0MS5jb3B5KGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpLmludmVydCgpXHJcbiAgICB4UG9zLm11bHRpcGx5U2NhbGFyKHBlcnNwZWN0aXZlKVxyXG4gICAgeFBvcy5hcHBseU1hdHJpeDQoaW52UHJvamVjdGlvbilcclxuICAgIHhQb3MuYXBwbHlNYXRyaXg0KGludlZpZXcpXHJcblxyXG4gICAgeVBvcy5tdWx0aXBseVNjYWxhcihwZXJzcGVjdGl2ZSlcclxuICAgIHlQb3MuYXBwbHlNYXRyaXg0KGludlByb2plY3Rpb24pXHJcbiAgICB5UG9zLmFwcGx5TWF0cml4NChpbnZWaWV3KVxyXG5cclxuICAgIHpQb3MubXVsdGlwbHlTY2FsYXIocGVyc3BlY3RpdmUpXHJcbiAgICB6UG9zLmFwcGx5TWF0cml4NChpbnZQcm9qZWN0aW9uKVxyXG4gICAgelBvcy5hcHBseU1hdHJpeDQoaW52VmlldylcclxuXHJcbiAgICB0aGlzLnhMYWJlbFBvc2l0aW9uLnNldCh4UG9zLngsIHhQb3MueSwgeFBvcy56KVxyXG4gICAgdGhpcy55TGFiZWxQb3NpdGlvbi5zZXQoeVBvcy54LCB5UG9zLnksIHlQb3MueilcclxuICAgIHRoaXMuekxhYmVsUG9zaXRpb24uc2V0KHpQb3MueCwgelBvcy55LCB6UG9zLnopXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy54TGFiZWwucG9zaXRpb24uY29weSh0aGlzLnhMYWJlbFBvc2l0aW9uKVxyXG4gICAgdGhpcy55TGFiZWwucG9zaXRpb24uY29weSh0aGlzLnlMYWJlbFBvc2l0aW9uKVxyXG4gICAgdGhpcy56TGFiZWwucG9zaXRpb24uY29weSh0aGlzLnpMYWJlbFBvc2l0aW9uKVxyXG4gICAgY29uc3QgeFAgPSB0aGlzLnhMYWJlbC51cGRhdGVQYXJhbXMoe1xyXG4gICAgICB0ZXh0OiBgWCA6ICR7KHRoaXMuc3RhcnRQb2ludC54ICogZ2V0Q29udmVyc2lvbkZhY3RvcignbScsIHRoaXMudW5pdHMpKS50b0ZpeGVkKFxyXG4gICAgICAgIHRoaXMucHJlY2lzaW9uXHJcbiAgICAgICl9ICR7dGhpcy51bml0c31gXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IHlQID0gdGhpcy55TGFiZWwudXBkYXRlUGFyYW1zKHtcclxuICAgICAgdGV4dDogYFkgOiAkeyh0aGlzLnN0YXJ0UG9pbnQueSAqIGdldENvbnZlcnNpb25GYWN0b3IoJ20nLCB0aGlzLnVuaXRzKSkudG9GaXhlZChcclxuICAgICAgICB0aGlzLnByZWNpc2lvblxyXG4gICAgICApfSAke3RoaXMudW5pdHN9YFxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCB6UCA9IHRoaXMuekxhYmVsLnVwZGF0ZVBhcmFtcyh7XHJcbiAgICAgIHRleHQ6IGBaIDogJHsodGhpcy5zdGFydFBvaW50LnogKiBnZXRDb252ZXJzaW9uRmFjdG9yKCdtJywgdGhpcy51bml0cykpLnRvRml4ZWQoXHJcbiAgICAgICAgdGhpcy5wcmVjaXNpb25cclxuICAgICAgKX0gJHt0aGlzLnVuaXRzfWBcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5naXptby51cGRhdGVOb3JtYWxJbmRpY2F0b3IodGhpcy5zdGFydFBvaW50LCB0aGlzLnN0YXJ0Tm9ybWFsKVxyXG4gICAgdGhpcy5naXptby51cGRhdGVQb2ludCh0aGlzLnN0YXJ0UG9pbnQpXHJcbiAgICB0aGlzLmdpem1vLmVuYWJsZSh0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpXHJcblxyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RhcnRQb2ludC5sZW5ndGgoKVxyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFt4UCwgeVAsIHpQXSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyByYXljYXN0KHJheWNhc3RlcjogUmF5Y2FzdGVyLCBpbnRlcnNlY3RzOiBBcnJheTxJbnRlcnNlY3Rpb24+KSB7XHJcbiAgICBjb25zdCByZXN1bHRzOiBBcnJheTxJbnRlcnNlY3Rpb24+ID0gW11cclxuICAgIHRoaXMuZ2l6bW8ucmF5Y2FzdChyYXljYXN0ZXIsIHJlc3VsdHMpXHJcbiAgICB0aGlzLnhMYWJlbC5yYXljYXN0KHJheWNhc3RlciwgcmVzdWx0cylcclxuICAgIHRoaXMueUxhYmVsLnJheWNhc3QocmF5Y2FzdGVyLCByZXN1bHRzKVxyXG4gICAgdGhpcy56TGFiZWwucmF5Y2FzdChyYXljYXN0ZXIsIHJlc3VsdHMpXHJcbiAgICBpZiAocmVzdWx0cy5sZW5ndGgpIHtcclxuICAgICAgaW50ZXJzZWN0cy5wdXNoKHtcclxuICAgICAgICBkaXN0YW5jZTogcmVzdWx0c1swXS5kaXN0YW5jZSxcclxuICAgICAgICBmYWNlOiByZXN1bHRzWzBdLmZhY2UsXHJcbiAgICAgICAgZmFjZUluZGV4OiByZXN1bHRzWzBdLmZhY2VJbmRleCxcclxuICAgICAgICBvYmplY3Q6IHRoaXMsXHJcbiAgICAgICAgcG9pbnQ6IHJlc3VsdHNbMF0ucG9pbnQsXHJcbiAgICAgICAgdXY6IHJlc3VsdHNbMF0udXZcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWdobGlnaHQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLmdpem1vKSB0aGlzLmdpem1vLmhpZ2hsaWdodCA9IHZhbHVlXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy54TGFiZWwudGV4dE1lc2gubWF0ZXJpYWwuY29sb3IuY29weShuZXcgQ29sb3IoMHhmZjAwMDApKVxyXG4gICAgICB0aGlzLnlMYWJlbC50ZXh0TWVzaC5tYXRlcmlhbC5jb2xvci5jb3B5KG5ldyBDb2xvcigweGZmMDAwMCkpXHJcbiAgICAgIHRoaXMuekxhYmVsLnRleHRNZXNoLm1hdGVyaWFsLmNvbG9yLmNvcHkobmV3IENvbG9yKDB4ZmYwMDAwKSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMueExhYmVsLnRleHRNZXNoLm1hdGVyaWFsLmNvbG9yLmNvcHkobmV3IENvbG9yKDB4ZmZmZmZmKSlcclxuICAgICAgdGhpcy55TGFiZWwudGV4dE1lc2gubWF0ZXJpYWwuY29sb3IuY29weShuZXcgQ29sb3IoMHhmZmZmZmYpKVxyXG4gICAgICB0aGlzLnpMYWJlbC50ZXh0TWVzaC5tYXRlcmlhbC5jb2xvci5jb3B5KG5ldyBDb2xvcigweGZmZmZmZikpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2xpcHBpbmdQbGFuZXMocGxhbmVzOiBQbGFuZVtdKSB7XHJcbiAgICB0aGlzLmdpem1vLnVwZGF0ZUNsaXBwaW5nUGxhbmVzKHBsYW5lcylcclxuICAgIGlmICh0aGlzLnhMYWJlbC5iYWNrZ3JvdW5kTWVzaCkge1xyXG4gICAgICA7KHRoaXMueExhYmVsLmJhY2tncm91bmRNZXNoLm1hdGVyaWFsIGFzIE1hdGVyaWFsKS5jbGlwcGluZ1BsYW5lcyA9IHBsYW5lc1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMueExhYmVsLnRleHRNZXNoKSB7XHJcbiAgICAgIDsodGhpcy54TGFiZWwudGV4dE1lc2g/Lm1hdGVyaWFsIGFzIE1hdGVyaWFsKS5jbGlwcGluZ1BsYW5lcyA9IHBsYW5lc1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnlMYWJlbC5iYWNrZ3JvdW5kTWVzaCkge1xyXG4gICAgICA7KHRoaXMueUxhYmVsLmJhY2tncm91bmRNZXNoLm1hdGVyaWFsIGFzIE1hdGVyaWFsKS5jbGlwcGluZ1BsYW5lcyA9IHBsYW5lc1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMueUxhYmVsLnRleHRNZXNoKSB7XHJcbiAgICAgIDsodGhpcy55TGFiZWwudGV4dE1lc2g/Lm1hdGVyaWFsIGFzIE1hdGVyaWFsKS5jbGlwcGluZ1BsYW5lcyA9IHBsYW5lc1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnpMYWJlbC5iYWNrZ3JvdW5kTWVzaCkge1xyXG4gICAgICA7KHRoaXMuekxhYmVsLmJhY2tncm91bmRNZXNoLm1hdGVyaWFsIGFzIE1hdGVyaWFsKS5jbGlwcGluZ1BsYW5lcyA9IHBsYW5lc1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuekxhYmVsLnRleHRNZXNoKSB7XHJcbiAgICAgIDsodGhpcy56TGFiZWwudGV4dE1lc2g/Lm1hdGVyaWFsIGFzIE1hdGVyaWFsKS5jbGlwcGluZ1BsYW5lcyA9IHBsYW5lc1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgU3BlY2tsZVJlbmRlcmVyIGZyb20gJy4uLy4uL1NwZWNrbGVSZW5kZXJlci5qcydcclxuXHJcbmltcG9ydCB7IHR5cGUgSVZpZXdlciwgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgUGVycGVuZGljdWxhck1lYXN1cmVtZW50IH0gZnJvbSAnLi9QZXJwZW5kaWN1bGFyTWVhc3VyZW1lbnQuanMnXHJcbmltcG9ydCB7IFBsYW5lLCBSYXksIFJheWNhc3RlciwgVmVjdG9yMiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBQb2ludFRvUG9pbnRNZWFzdXJlbWVudCB9IGZyb20gJy4vUG9pbnRUb1BvaW50TWVhc3VyZW1lbnQuanMnXHJcbmltcG9ydCB7IE1lYXN1cmVtZW50LCBNZWFzdXJlbWVudFN0YXRlIH0gZnJvbSAnLi9NZWFzdXJlbWVudC5qcydcclxuaW1wb3J0IHsgRXh0ZW5kZWRNZXNoSW50ZXJzZWN0aW9uIH0gZnJvbSAnLi4vLi4vb2JqZWN0cy9TcGVja2xlUmF5Y2FzdGVyLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZUdob3N0TWF0ZXJpYWwgZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL1NwZWNrbGVHaG9zdE1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBFeHRlbnNpb24gfSBmcm9tICcuLi9FeHRlbnNpb24uanMnXHJcbmltcG9ydCB7IElucHV0RXZlbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9JbnB1dC5qcydcclxuaW1wb3J0IHsgQ2FtZXJhQ29udHJvbGxlciB9IGZyb20gJy4uL0NhbWVyYUNvbnRyb2xsZXIuanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5pbXBvcnQgeyBBcmVhTWVhc3VyZW1lbnQgfSBmcm9tICcuL0FyZWFNZWFzdXJlbWVudC5qcydcclxuaW1wb3J0IHsgUG9pbnRNZWFzdXJlbWVudCB9IGZyb20gJy4vUG9pbnRNZWFzdXJlbWVudC5qcydcclxuaW1wb3J0IHtcclxuICBNZWFzdXJlbWVudERhdGEsXHJcbiAgTWVhc3VyZW1lbnRPcHRpb25zLFxyXG4gIE1lYXN1cmVtZW50VHlwZVxyXG59IGZyb20gJ0BzcGVja2xlL3NoYXJlZC92aWV3ZXIvc3RhdGUnXHJcbmltcG9ydCB7IGRpZmZlcmVuY2VCeSB9IGZyb20gJ2xvZGFzaC1lcydcclxuXHJcbmV4cG9ydCBlbnVtIE1lYXN1cmVtZW50RXZlbnQge1xyXG4gIENvdW50Q2hhbmdlZCA9ICdtZWFzdXJlbWVudC1jb3VudC1jaGFuZ2VkJyxcclxuICBNZWFzdXJlbWVudHNDaGFuZ2VkID0gJ21lYXN1cmVtZW50cy1jaGFuZ2VkJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lYXN1cmVtZW50RXZlbnRQYXlsb2FkIHtcclxuICBbTWVhc3VyZW1lbnRFdmVudC5Db3VudENoYW5nZWRdOiBudW1iZXJcclxuICBbTWVhc3VyZW1lbnRFdmVudC5NZWFzdXJlbWVudHNDaGFuZ2VkXTogTWVhc3VyZW1lbnRbXVxyXG59XHJcblxyXG5jb25zdCBEZWZhdWx0TWVhc3VyZW1lbnRzT3B0aW9ucyA9IHtcclxuICB2aXNpYmxlOiB0cnVlLFxyXG4gIHR5cGU6IE1lYXN1cmVtZW50VHlwZS5QT0lOVCxcclxuICB2ZXJ0ZXhTbmFwOiB0cnVlLFxyXG4gIHVuaXRzOiAnbScsXHJcbiAgcHJlY2lzaW9uOiAyLFxyXG4gIGNoYWluOiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWVhc3VyZW1lbnRzRXh0ZW5zaW9uIGV4dGVuZHMgRXh0ZW5zaW9uIHtcclxuICBwdWJsaWMgZ2V0IGluamVjdCgpIHtcclxuICAgIHJldHVybiBbQ2FtZXJhQ29udHJvbGxlcl1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZW5kZXJlcjogU3BlY2tsZVJlbmRlcmVyXHJcblxyXG4gIHByb3RlY3RlZCBfbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudFtdID0gW11cclxuICBwcm90ZWN0ZWQgX2FjdGl2ZU1lYXN1cmVtZW50OiBNZWFzdXJlbWVudCB8IG51bGwgPSBudWxsXHJcbiAgcHJvdGVjdGVkIF9zZWxlY3RlZE1lYXN1cmVtZW50OiBNZWFzdXJlbWVudCB8IG51bGwgPSBudWxsXHJcbiAgcHJvdGVjdGVkIF9vcHRpb25zOiBNZWFzdXJlbWVudE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0TWVhc3VyZW1lbnRzT3B0aW9ucylcclxuXHJcbiAgcHJpdmF0ZSBfZnJhbWVMb2NrID0gZmFsc2VcclxuICBwcml2YXRlIF9wYXVzZWQgPSBmYWxzZVxyXG4gIHByaXZhdGUgX3NjZW5lSGl0ID0gZmFsc2VcclxuXHJcbiAgcHJvdGVjdGVkIHJheWNhc3RlcjogUmF5Y2FzdGVyXHJcblxyXG4gIHByaXZhdGUgcG9pbnRCdWZmOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gIHByaXZhdGUgbm9ybWFsQnVmZjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKClcclxuICBwcml2YXRlIHNjcmVlbkJ1ZmYwOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoKVxyXG4gIHByaXZhdGUgc2NyZWVuQnVmZjE6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpXHJcblxyXG4gIHB1YmxpYyBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmFibGVkXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZVxyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50KSB7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50LmlzVmlzaWJsZSA9IHZhbHVlXHJcbiAgICAgIHZvaWQgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQudXBkYXRlKClcclxuICAgICAgaWYgKCF2YWx1ZSkgdGhpcy5jYW5jZWxNZWFzdXJlbWVudCgpXHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdlci5yZXF1ZXN0UmVuZGVyKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3B0aW9ucygpOiBNZWFzdXJlbWVudE9wdGlvbnMge1xyXG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3B0aW9ucyhvcHRpb25zOiBNZWFzdXJlbWVudE9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHJlc2V0TWVhc3VyZW1lbnQgPVxyXG4gICAgICB0aGlzLl9vcHRpb25zLnR5cGUgIT09IG9wdGlvbnMudHlwZSAmJlxyXG4gICAgICB0aGlzLl9hY3RpdmVNZWFzdXJlbWVudCAmJlxyXG4gICAgICB0aGlzLl9hY3RpdmVNZWFzdXJlbWVudC5zdGF0ZSA9PT0gTWVhc3VyZW1lbnRTdGF0ZS5EQU5HTElOR19TVEFSVFxyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCBvcHRpb25zKVxyXG4gICAgaWYgKHJlc2V0TWVhc3VyZW1lbnQpIHtcclxuICAgICAgdGhpcy5jYW5jZWxNZWFzdXJlbWVudCgpXHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGx5T3B0aW9ucygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkTWVhc3VyZW1lbnQoKTogTWVhc3VyZW1lbnQgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE1lYXN1cmVtZW50XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZU1lYXN1cmVtZW50KCk6IE1lYXN1cmVtZW50IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWVhc3VyZW1lbnRDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21lYXN1cmVtZW50cy5sZW5ndGhcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWVzdXJlbWVudHMoKTogTWVhc3VyZW1lbnRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWVhc3VyZW1lbnRzXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRNZWFzdXJlbWVudENvdW50Q2hhbmdlZCgpIHtcclxuICAgIHRoaXMuZW1pdChNZWFzdXJlbWVudEV2ZW50LkNvdW50Q2hhbmdlZCwgdGhpcy5fbWVhc3VyZW1lbnRzLmxlbmd0aClcclxuICAgIHRoaXMuZW1pdChNZWFzdXJlbWVudEV2ZW50Lk1lYXN1cmVtZW50c0NoYW5nZWQsIHRoaXMuX21lYXN1cmVtZW50cylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2aWV3ZXI6IElWaWV3ZXIsIHByb3RlY3RlZCBjYW1lcmFQcm92aWRlcjogQ2FtZXJhQ29udHJvbGxlcikge1xyXG4gICAgc3VwZXIodmlld2VyKVxyXG4gICAgdGhpcy5yZW5kZXJlciA9IHZpZXdlci5nZXRSZW5kZXJlcigpXHJcbiAgICB0aGlzLnJheWNhc3RlciA9IG5ldyBSYXljYXN0ZXIoKVxyXG4gICAgdGhpcy5yYXljYXN0ZXIubGF5ZXJzLmVuYWJsZShPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTKVxyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuaW5wdXQub24oSW5wdXRFdmVudC5Qb2ludGVyTW92ZSwgdGhpcy5vblBvaW50ZXJNb3ZlLmJpbmQodGhpcykpXHJcbiAgICB0aGlzLnJlbmRlcmVyLmlucHV0Lm9uKElucHV0RXZlbnQuQ2xpY2ssIHRoaXMub25Qb2ludGVyQ2xpY2suYmluZCh0aGlzKSlcclxuICAgIHRoaXMucmVuZGVyZXIuaW5wdXQub24oSW5wdXRFdmVudC5Eb3VibGVDbGljaywgdGhpcy5vblBvaW50ZXJEb3VibGVDbGljay5iaW5kKHRoaXMpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uPFQgZXh0ZW5kcyBNZWFzdXJlbWVudEV2ZW50PihcclxuICAgIGV2ZW50VHlwZTogVCxcclxuICAgIGxpc3RlbmVyOiAoYXJnOiBNZWFzdXJlbWVudEV2ZW50UGF5bG9hZFtUXSkgPT4gdm9pZFxyXG4gICk6IHZvaWQge1xyXG4gICAgc3VwZXIub24oZXZlbnRUeXBlLCBsaXN0ZW5lcilcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkxhdGVVcGRhdGUoKSB7XHJcbiAgICBjb25zdCBjYW1lcmEgPSB0aGlzLnJlbmRlcmVyLnJlbmRlcmluZ0NhbWVyYVxyXG4gICAgaWYgKCFjYW1lcmEpIHJldHVyblxyXG5cclxuICAgIHRoaXMuX2ZyYW1lTG9jayA9IGZhbHNlXHJcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcmVyLmdldERyYXdpbmdCdWZmZXJTaXplKHRoaXMuc2NyZWVuQnVmZjApXHJcblxyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50KVxyXG4gICAgICB0aGlzLl9lbmFibGVkICYmXHJcbiAgICAgICAgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQuZnJhbWVVcGRhdGUoXHJcbiAgICAgICAgICBjYW1lcmEsXHJcbiAgICAgICAgICB0aGlzLnNjcmVlbkJ1ZmYwLFxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zY2VuZUJveFxyXG4gICAgICAgIClcclxuICAgIHRoaXMuX21lYXN1cmVtZW50cy5mb3JFYWNoKCh2YWx1ZTogTWVhc3VyZW1lbnQpID0+IHtcclxuICAgICAgOyh0aGlzLl9lbmFibGVkIHx8IHZhbHVlIGluc3RhbmNlb2YgUG9pbnRNZWFzdXJlbWVudCkgJiZcclxuICAgICAgICB2YWx1ZS5mcmFtZVVwZGF0ZShjYW1lcmEsIHRoaXMuc2NyZWVuQnVmZjAsIHRoaXMucmVuZGVyZXIuc2NlbmVCb3gpXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuX2VuYWJsZWQgJiYgdGhpcy51cGRhdGVDbGlwcGluZ1BsYW5lcyh0aGlzLnJlbmRlcmVyLmNsaXBwaW5nUGxhbmVzKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVzaXplKCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJlci5nZXREcmF3aW5nQnVmZmVyU2l6ZSh0aGlzLnNjcmVlbkJ1ZmYwKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uUG9pbnRlck1vdmUoZGF0YTogVmVjdG9yMiAmIHsgZXZlbnQ6IEV2ZW50IH0pIHtcclxuICAgIGlmICghdGhpcy5fZW5hYmxlZCB8fCB0aGlzLl9wYXVzZWQpIHJldHVyblxyXG5cclxuICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhXHJcbiAgICBpZiAoIWNhbWVyYSkgcmV0dXJuXHJcblxyXG4gICAgaWYgKHRoaXMuX2ZyYW1lTG9jaykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzdWx0OiBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb25bXSA9XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuaW50ZXJzZWN0aW9ucy5pbnRlcnNlY3QoXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zY2VuZSxcclxuICAgICAgICBjYW1lcmEsXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuY2xpcHBpbmdWb2x1bWVcclxuICAgICAgKSB8fCBbXVxyXG5cclxuICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHZhbHVlOiBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24pID0+IHtcclxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSB2YWx1ZS5vYmplY3QuZ2V0QmF0Y2hPYmplY3RNYXRlcmlhbCh2YWx1ZS5iYXRjaE9iamVjdClcclxuICAgICAgcmV0dXJuIG1hdGVyaWFsICYmICEobWF0ZXJpYWwgaW5zdGFuY2VvZiBTcGVja2xlR2hvc3RNYXRlcmlhbCkgJiYgbWF0ZXJpYWwudmlzaWJsZVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5fc2NlbmVIaXQgPSBmYWxzZVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvaW50QnVmZi5jb3B5KHJlc3VsdFswXS5wb2ludClcclxuICAgIHRoaXMubm9ybWFsQnVmZi5jb3B5KHJlc3VsdFswXS5mYWNlLm5vcm1hbClcclxuXHJcbiAgICBsZXQgdmVydGV4U25hcCA9IHRoaXMuX29wdGlvbnMudmVydGV4U25hcFxyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50ICYmIHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50LnNuYXApXHJcbiAgICAgIHZlcnRleFNuYXAgPSAhdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQuc25hcChcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIHJlc3VsdFswXSxcclxuICAgICAgICB0aGlzLnBvaW50QnVmZixcclxuICAgICAgICB0aGlzLm5vcm1hbEJ1ZmZcclxuICAgICAgKVxyXG4gICAgaWYgKHZlcnRleFNuYXApIHtcclxuICAgICAgdGhpcy5zbmFwKHJlc3VsdFswXSwgdGhpcy5wb2ludEJ1ZmYsIHRoaXMubm9ybWFsQnVmZilcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50KSB7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50ID0gdGhpcy5zdGFydE1lYXN1cmVtZW50KClcclxuICAgICAgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQuaXNWaXNpYmxlID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aXZlTWVhc3VyZW1lbnQ/LmxvY2F0aW9uVXBkYXRlZCh0aGlzLnBvaW50QnVmZiwgdGhpcy5ub3JtYWxCdWZmKVxyXG4gICAgdm9pZCB0aGlzLl9hY3RpdmVNZWFzdXJlbWVudC51cGRhdGUoKS50aGVuKCgpID0+IHtcclxuICAgICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcigpXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuX2ZyYW1lTG9jayA9IHRydWVcclxuICAgIHRoaXMuX3NjZW5lSGl0ID0gdHJ1ZVxyXG4gICAgLy8gY29uc29sZS5sb2coJ1RpbWUgLT4gJywgcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvblBvaW50ZXJDbGljayhcclxuICAgIGRhdGE6IHsgZXZlbnQ6IFBvaW50ZXJFdmVudDsgbXVsdGlTZWxlY3Q6IGJvb2xlYW4gfSAmIFZlY3RvcjJcclxuICApIHtcclxuICAgIGlmICghdGhpcy5fZW5hYmxlZCkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgbWVhc3VyZW1lbnQgPSB0aGlzLnBpY2tNZWFzdXJlbWVudChkYXRhKVxyXG4gICAgaWYgKG1lYXN1cmVtZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0TWVhc3VyZW1lbnQobWVhc3VyZW1lbnQsIHRydWUpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhLmV2ZW50LmJ1dHRvbiA9PT0gMikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQgJiZcclxuICAgICAgICB0aGlzLl9hY3RpdmVNZWFzdXJlbWVudCBpbnN0YW5jZW9mIEFyZWFNZWFzdXJlbWVudFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50LnJlbW92ZVBvaW50KClcclxuICAgICAgICBpZiAoY291bnQgPT09IDApIHRoaXMuY2FuY2VsTWVhc3VyZW1lbnQoKVxyXG4gICAgICB9IGVsc2UgdGhpcy5jYW5jZWxNZWFzdXJlbWVudCgpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUaGlzIHdpbGwgbm90IHdvcmsgZm9yIGlPUyA8IDEzIChwcmUtMjAxOSkgKGFsbGVnZWRseSkgKi9cclxuICAgIC8qKiBCZWNhdXNlIHRoZXJlIGlzIG5vIGhvdmVyaW5nIHdpdGggdG91Y2ggaW5wdXQsIHdlIHNpbXVsYXRlIGEgaG92ZXIgd2hlbiB0YXBwaW5nICAqL1xyXG4gICAgaWYgKGRhdGEuZXZlbnQucG9pbnRlclR5cGUgPT09ICd0b3VjaCcpIHtcclxuICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlKGRhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl9hY3RpdmVNZWFzdXJlbWVudCkgcmV0dXJuXHJcblxyXG4gICAgaWYgKCF0aGlzLl9zY2VuZUhpdCkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQubG9jYXRpb25TZWxlY3RlZCgpXHJcblxyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50LnN0YXRlID09PSBNZWFzdXJlbWVudFN0YXRlLkNPTVBMRVRFKSB7XHJcbiAgICAgIHRoaXMuZmluaXNoTWVhc3VyZW1lbnQoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uUG9pbnRlckRvdWJsZUNsaWNrKFxyXG4gICAgZGF0YTogVmVjdG9yMiAmIHsgZXZlbnQ6IFBvaW50ZXJFdmVudDsgbXVsdGlTZWxlY3Q6IGJvb2xlYW4gfVxyXG4gICkge1xyXG4gICAgY29uc3QgbWVhc3VyZW1lbnQgPSB0aGlzLnBpY2tNZWFzdXJlbWVudChkYXRhKVxyXG4gICAgaWYgKG1lYXN1cmVtZW50KSB7XHJcbiAgICAgIHRoaXMuY2FtZXJhUHJvdmlkZXIuc2V0Q2FtZXJhVmlldyhtZWFzdXJlbWVudC5ib3VuZHMsIHRydWUpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMudHlwZSA9PT0gTWVhc3VyZW1lbnRUeXBlLlBFUlBFTkRJQ1VMQVIpIHtcclxuICAgICAgdGhpcy5hdXRvTGF6ZXJNZWFzdXJlKGRhdGEpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMudHlwZSA9PT0gTWVhc3VyZW1lbnRUeXBlLkFSRUEpIHtcclxuICAgICAgOyh0aGlzLl9hY3RpdmVNZWFzdXJlbWVudCBhcyBBcmVhTWVhc3VyZW1lbnQpLmF1dG9GaW5pc2goKVxyXG4gICAgICB0aGlzLmZpbmlzaE1lYXN1cmVtZW50KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhdXRvTGF6ZXJNZWFzdXJlKGRhdGE6IFZlY3RvcjIpIHtcclxuICAgIGlmICghdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQpIHJldHVyblxyXG4gICAgaWYgKCF0aGlzLnJlbmRlcmVyLnJlbmRlcmluZ0NhbWVyYSkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQuc3RhdGUgPSBNZWFzdXJlbWVudFN0YXRlLkRBTkdMSU5HX1NUQVJUXHJcbiAgICBsZXQgcmVzdWx0OiBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb25bXSA9XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuaW50ZXJzZWN0aW9ucy5pbnRlcnNlY3QoXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zY2VuZSxcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcmluZ0NhbWVyYSxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNILFxyXG4gICAgICAgIHRydWUsXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jbGlwcGluZ1ZvbHVtZVxyXG4gICAgICApIHx8IFtdXHJcblxyXG4gICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigodmFsdWUpID0+IHtcclxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSB2YWx1ZS5vYmplY3QuZ2V0QmF0Y2hPYmplY3RNYXRlcmlhbCh2YWx1ZS5iYXRjaE9iamVjdClcclxuICAgICAgcmV0dXJuIG1hdGVyaWFsICYmICEobWF0ZXJpYWwgaW5zdGFuY2VvZiBTcGVja2xlR2hvc3RNYXRlcmlhbCkgJiYgbWF0ZXJpYWwudmlzaWJsZVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHJldHVyblxyXG5cclxuICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBuZXcgVmVjdG9yMygpLmNvcHkocmVzdWx0WzBdLnBvaW50KVxyXG4gICAgY29uc3Qgc3RhcnROb3JtYWwgPSBuZXcgVmVjdG9yMygpLmNvcHkocmVzdWx0WzBdLmZhY2Uubm9ybWFsKVxyXG5cclxuICAgIGNvbnN0IG9mZnNldFBvaW50ID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgICAuY29weShzdGFydFBvaW50KVxyXG4gICAgICAuYWRkKG5ldyBWZWN0b3IzKCkuY29weShzdGFydE5vcm1hbCkubXVsdGlwbHlTY2FsYXIoMC4wMDAwMDEpKVxyXG4gICAgbGV0IHBlcnBSZXN1bHQ6IEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbltdID1cclxuICAgICAgdGhpcy5yZW5kZXJlci5pbnRlcnNlY3Rpb25zLmludGVyc2VjdFJheShcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNjZW5lLFxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhLFxyXG4gICAgICAgIG5ldyBSYXkob2Zmc2V0UG9pbnQsIHN0YXJ0Tm9ybWFsKSxcclxuICAgICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuY2xpcHBpbmdWb2x1bWVcclxuICAgICAgKSB8fCBbXVxyXG5cclxuICAgIHBlcnBSZXN1bHQgPSBwZXJwUmVzdWx0LmZpbHRlcigodmFsdWU6IEV4dGVuZGVkTWVzaEludGVyc2VjdGlvbikgPT4ge1xyXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHZhbHVlLm9iamVjdC5nZXRCYXRjaE9iamVjdE1hdGVyaWFsKHZhbHVlLmJhdGNoT2JqZWN0KVxyXG4gICAgICByZXR1cm4gbWF0ZXJpYWwgJiYgIShtYXRlcmlhbCBpbnN0YW5jZW9mIFNwZWNrbGVHaG9zdE1hdGVyaWFsKSAmJiBtYXRlcmlhbC52aXNpYmxlXHJcbiAgICB9KVxyXG5cclxuICAgIGlmICghcGVycFJlc3VsdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5mbGFzaE1lYXN1cmVtZW50KClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQuc3RhcnRQb2ludC5jb3B5KHN0YXJ0UG9pbnQpXHJcbiAgICB0aGlzLl9hY3RpdmVNZWFzdXJlbWVudC5zdGFydE5vcm1hbC5jb3B5KHN0YXJ0Tm9ybWFsKVxyXG4gICAgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQuZW5kUG9pbnQuY29weShwZXJwUmVzdWx0WzBdLnBvaW50KVxyXG4gICAgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQuZW5kTm9ybWFsLmNvcHkocGVycFJlc3VsdFswXS5mYWNlLm5vcm1hbClcclxuICAgIHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50LnN0YXRlID0gTWVhc3VyZW1lbnRTdGF0ZS5EQU5HTElOR19FTkRcclxuICAgIHZvaWQgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQudXBkYXRlKCkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMuZmluaXNoTWVhc3VyZW1lbnQoKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzdGFydE1lYXN1cmVtZW50KCk6IE1lYXN1cmVtZW50IHtcclxuICAgIGxldCBtZWFzdXJlbWVudDogTWVhc3VyZW1lbnRcclxuICAgIGlmICh0aGlzLl9vcHRpb25zLnR5cGUgPT09IE1lYXN1cmVtZW50VHlwZS5QRVJQRU5ESUNVTEFSKVxyXG4gICAgICBtZWFzdXJlbWVudCA9IG5ldyBQZXJwZW5kaWN1bGFyTWVhc3VyZW1lbnQoKVxyXG4gICAgZWxzZSBpZiAodGhpcy5fb3B0aW9ucy50eXBlID09PSBNZWFzdXJlbWVudFR5cGUuUE9JTlRUT1BPSU5UKVxyXG4gICAgICBtZWFzdXJlbWVudCA9IG5ldyBQb2ludFRvUG9pbnRNZWFzdXJlbWVudCgpXHJcbiAgICBlbHNlIGlmICh0aGlzLl9vcHRpb25zLnR5cGUgPT09IE1lYXN1cmVtZW50VHlwZS5BUkVBKVxyXG4gICAgICBtZWFzdXJlbWVudCA9IG5ldyBBcmVhTWVhc3VyZW1lbnQoKVxyXG4gICAgZWxzZSBpZiAodGhpcy5fb3B0aW9ucy50eXBlID09PSBNZWFzdXJlbWVudFR5cGUuUE9JTlQpXHJcbiAgICAgIG1lYXN1cmVtZW50ID0gbmV3IFBvaW50TWVhc3VyZW1lbnQoKVxyXG4gICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG1lYXN1cmVtZW50IHR5cGUhJylcclxuXHJcbiAgICBtZWFzdXJlbWVudC5zdGF0ZSA9IE1lYXN1cmVtZW50U3RhdGUuREFOR0xJTkdfU1RBUlRcclxuICAgIG1lYXN1cmVtZW50LnVuaXRzID1cclxuICAgICAgdGhpcy5fb3B0aW9ucy51bml0cyAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyB0aGlzLl9vcHRpb25zLnVuaXRzXHJcbiAgICAgICAgOiBEZWZhdWx0TWVhc3VyZW1lbnRzT3B0aW9ucy51bml0c1xyXG4gICAgbWVhc3VyZW1lbnQucHJlY2lzaW9uID1cclxuICAgICAgdGhpcy5fb3B0aW9ucy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgID8gdGhpcy5fb3B0aW9ucy5wcmVjaXNpb25cclxuICAgICAgICA6IERlZmF1bHRNZWFzdXJlbWVudHNPcHRpb25zLnByZWNpc2lvblxyXG4gICAgbWVhc3VyZW1lbnQuZnJhbWVVcGRhdGUoXHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhLFxyXG4gICAgICB0aGlzLnNjcmVlbkJ1ZmYwLFxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNjZW5lQm94XHJcbiAgICApXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNjZW5lLmFkZChtZWFzdXJlbWVudClcclxuXHJcbiAgICByZXR1cm4gbWVhc3VyZW1lbnRcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjYW5jZWxNZWFzdXJlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLl9hY3RpdmVNZWFzdXJlbWVudCkgdGhpcy5yZW5kZXJlci5zY2VuZS5yZW1vdmUodGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQpXHJcbiAgICB0aGlzLl9hY3RpdmVNZWFzdXJlbWVudCA9IG51bGxcclxuICAgIHRoaXMudmlld2VyLnJlcXVlc3RSZW5kZXIoKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpbmlzaE1lYXN1cmVtZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLl9hY3RpdmVNZWFzdXJlbWVudCkgcmV0dXJuXHJcblxyXG4gICAgdm9pZCB0aGlzLl9hY3RpdmVNZWFzdXJlbWVudC51cGRhdGUoKVxyXG4gICAgdGhpcy5wdXNoTWVhc3VyZW1lbnQodGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQpXHJcblxyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuY2hhaW4pIHtcclxuICAgICAgY29uc3Qgc3RhcnRQb2ludCA9IG5ldyBWZWN0b3IzKClcclxuICAgICAgY29uc3Qgc3RhcnROb3JtYWwgPSBuZXcgVmVjdG9yMygpXHJcbiAgICAgIGxldCBvbGRNZWFzdXJlbWVudFxyXG4gICAgICBzd2l0Y2ggKHRoaXMuX29wdGlvbnMudHlwZSkge1xyXG4gICAgICAgIGNhc2UgTWVhc3VyZW1lbnRUeXBlLlBFUlBFTkRJQ1VMQVI6XHJcbiAgICAgICAgICBvbGRNZWFzdXJlbWVudCA9IHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50IGFzIFBlcnBlbmRpY3VsYXJNZWFzdXJlbWVudFxyXG4gICAgICAgICAgc3RhcnRQb2ludC5jb3B5KG9sZE1lYXN1cmVtZW50Lm1pZFBvaW50KVxyXG4gICAgICAgICAgc3RhcnROb3JtYWwuY29weShvbGRNZWFzdXJlbWVudC5zdGFydE5vcm1hbClcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIG9sZE1lYXN1cmVtZW50ID0gdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnRcclxuICAgICAgICAgIHN0YXJ0UG9pbnQuY29weSh0aGlzLnBvaW50QnVmZilcclxuICAgICAgICAgIHN0YXJ0Tm9ybWFsLmNvcHkodGhpcy5ub3JtYWxCdWZmKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hY3RpdmVNZWFzdXJlbWVudCA9IHRoaXMuc3RhcnRNZWFzdXJlbWVudCgpXHJcbiAgICAgIHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50LmxvY2F0aW9uVXBkYXRlZChzdGFydFBvaW50LCBzdGFydE5vcm1hbClcclxuICAgICAgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQubG9jYXRpb25TZWxlY3RlZCgpXHJcbiAgICB9IGVsc2UgdGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQgPSBudWxsXHJcblxyXG4gICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcigpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHVzaE1lYXN1cmVtZW50KG1lYXN1cmVtZW50OiBNZWFzdXJlbWVudCkge1xyXG4gICAgaWYgKG1lYXN1cmVtZW50LnZhbHVlID4gMCkge1xyXG4gICAgICB0aGlzLl9tZWFzdXJlbWVudHMucHVzaChtZWFzdXJlbWVudClcclxuICAgICAgdGhpcy5lbWl0TWVhc3VyZW1lbnRDb3VudENoYW5nZWQoKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zY2VuZS5yZW1vdmUobWVhc3VyZW1lbnQpXHJcbiAgICAgIExvZ2dlci5lcnJvcignSWdub3JpbmcgemVybyB2YWx1ZSBtZWFzdXJlbWVudCEnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpbmRNZWFzdXJlbWVudEZyb21EYXRhKG1lYXN1cmVtZW50RGF0YTogTWVhc3VyZW1lbnREYXRhKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWVhc3VyZW1lbnRzLmZpbmQoXHJcbiAgICAgIChtZWFzdXJlbWVudCkgPT4gbWVhc3VyZW1lbnQubWVhc3VyZW1lbnRJZCA9PT0gbWVhc3VyZW1lbnREYXRhLnV1aWRcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVNZWFzdXJlbWVudChtZWFzdXJlbWVudERhdGE/OiBNZWFzdXJlbWVudERhdGEpIHtcclxuICAgIGNvbnN0IHRhcmdldE1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnREYXRhXHJcbiAgICAgID8gdGhpcy5maW5kTWVhc3VyZW1lbnRGcm9tRGF0YShtZWFzdXJlbWVudERhdGEpXHJcbiAgICAgIDogdGhpcy5fc2VsZWN0ZWRNZWFzdXJlbWVudFxyXG5cclxuICAgIGlmICh0YXJnZXRNZWFzdXJlbWVudCkge1xyXG4gICAgICB0aGlzLl9tZWFzdXJlbWVudHMuc3BsaWNlKHRoaXMuX21lYXN1cmVtZW50cy5pbmRleE9mKHRhcmdldE1lYXN1cmVtZW50KSwgMSlcclxuICAgICAgdGhpcy5yZW5kZXJlci5zY2VuZS5yZW1vdmUodGFyZ2V0TWVhc3VyZW1lbnQpXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkTWVhc3VyZW1lbnQgPSBudWxsXHJcbiAgICAgIHRoaXMuZW1pdE1lYXN1cmVtZW50Q291bnRDaGFuZ2VkKClcclxuICAgICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcigpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhbmNlbE1lYXN1cmVtZW50KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElkZW1wb3RlbnQgd2F5IG9mIHNldHRpbmcgbWVhc3VyZW1lbnRzXHJcbiAgICovXHJcbiAgcHVibGljIHNldE1lYXN1cmVtZW50cyhtZWFzdXJlbWVudHM6IE1lYXN1cmVtZW50RGF0YVtdKSB7XHJcbiAgICBpZiAoIW1lYXN1cmVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMuX21lYXN1cmVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNsZWFyTWVhc3VyZW1lbnRzKClcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fYWN0aXZlTWVhc3VyZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmNhbmNlbE1lYXN1cmVtZW50KClcclxuICAgICAgfVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50TWVhc3VyZW1lbnRzID0gdGhpcy5fbWVhc3VyZW1lbnRzLm1hcCgobSkgPT4gbS50b01lYXN1cmVtZW50RGF0YSgpKVxyXG4gICAgY29uc3QgcmVtb3ZhYmxlTWVhc3VyZW1lbnRzID0gZGlmZmVyZW5jZUJ5KFxyXG4gICAgICBjdXJyZW50TWVhc3VyZW1lbnRzLFxyXG4gICAgICBtZWFzdXJlbWVudHMsXHJcbiAgICAgIChtKSA9PiBtLnV1aWRcclxuICAgIClcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJlbW92YWJsZU1lYXN1cmVtZW50IG9mIHJlbW92YWJsZU1lYXN1cmVtZW50cykge1xyXG4gICAgICB0aGlzLnJlbW92ZU1lYXN1cmVtZW50KHJlbW92YWJsZU1lYXN1cmVtZW50KVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgbWVhc3VyZW1lbnREYXRhIG9mIG1lYXN1cmVtZW50cykge1xyXG4gICAgICBpZiAoIXRoaXMuZmluZE1lYXN1cmVtZW50RnJvbURhdGEobWVhc3VyZW1lbnREYXRhKSkge1xyXG4gICAgICAgIHRoaXMuYWRkTWVhc3VyZW1lbnQobWVhc3VyZW1lbnREYXRhKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJNZWFzdXJlbWVudHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbW92ZU1lYXN1cmVtZW50KClcclxuICAgIHRoaXMuX21lYXN1cmVtZW50cy5mb3JFYWNoKChtZWFzdXJlbWVudDogTWVhc3VyZW1lbnQpID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zY2VuZS5yZW1vdmUobWVhc3VyZW1lbnQpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5fbWVhc3VyZW1lbnRzID0gW11cclxuICAgIHRoaXMuZW1pdE1lYXN1cmVtZW50Q291bnRDaGFuZ2VkKClcclxuICAgIHRoaXMudmlld2VyLnJlcXVlc3RSZW5kZXIoKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZsYXNoTWVhc3VyZW1lbnQoKSB7XHJcbiAgICBsZXQgZmxhc2hDb3VudCA9IDBcclxuICAgIGNvbnN0IG1heEZsYXNoQ291bnQgPSA1XHJcbiAgICBjb25zdCBoYW5kbGUgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9hY3RpdmVNZWFzdXJlbWVudCkge1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZU1lYXN1cmVtZW50LmhpZ2hsaWdodChCb29sZWFuKGZsYXNoQ291bnQrKyAlIDIpKVxyXG4gICAgICAgIGlmIChmbGFzaENvdW50ID49IG1heEZsYXNoQ291bnQpIHtcclxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaGFuZGxlKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdlci5yZXF1ZXN0UmVuZGVyKClcclxuICAgICAgfVxyXG4gICAgfSwgMTAwKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHBpY2tNZWFzdXJlbWVudChkYXRhOiBWZWN0b3IyKTogTWVhc3VyZW1lbnQgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5yZW5kZXJlci5yZW5kZXJpbmdDYW1lcmEpIHJldHVybiBudWxsXHJcblxyXG4gICAgdGhpcy5fbWVhc3VyZW1lbnRzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgIHZhbHVlLmhpZ2hsaWdodChmYWxzZSlcclxuICAgIH0pXHJcbiAgICB0aGlzLnJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKGRhdGEsIHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhKVxyXG4gICAgY29uc3QgcmVzID0gdGhpcy5yYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0cyh0aGlzLl9tZWFzdXJlbWVudHMsIGZhbHNlKVxyXG4gICAgcmV0dXJuIHJlc1swXT8ub2JqZWN0IGFzIE1lYXN1cmVtZW50XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2VsZWN0TWVhc3VyZW1lbnQobWVhc3VyZW1lbnQ6IE1lYXN1cmVtZW50LCB2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5jYW5jZWxNZWFzdXJlbWVudCgpXHJcbiAgICBtZWFzdXJlbWVudC5oaWdobGlnaHQodmFsdWUpXHJcbiAgICB0aGlzLl9zZWxlY3RlZE1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzbmFwKFxyXG4gICAgaW50ZXJzZWN0aW9uOiBFeHRlbmRlZE1lc2hJbnRlcnNlY3Rpb24sXHJcbiAgICBvdXRQb2ludDogVmVjdG9yMyxcclxuICAgIG91dE5vcm1hbDogVmVjdG9yM1xyXG4gICkge1xyXG4gICAgaWYgKCF0aGlzLnJlbmRlcmVyLnJlbmRlcmluZ0NhbWVyYSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgdjAgPSBpbnRlcnNlY3Rpb24uYmF0Y2hPYmplY3QuYWNjZWxlcmF0aW9uU3RydWN0dXJlXHJcbiAgICAgIC5nZXRWZXJ0ZXhBdEluZGV4KGludGVyc2VjdGlvbi5mYWNlLmEpXHJcbiAgICAgIC5wcm9qZWN0KHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhKVxyXG4gICAgY29uc3QgdjEgPSBpbnRlcnNlY3Rpb24uYmF0Y2hPYmplY3QuYWNjZWxlcmF0aW9uU3RydWN0dXJlXHJcbiAgICAgIC5nZXRWZXJ0ZXhBdEluZGV4KGludGVyc2VjdGlvbi5mYWNlLmIpXHJcbiAgICAgIC5wcm9qZWN0KHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhKVxyXG4gICAgY29uc3QgdjIgPSBpbnRlcnNlY3Rpb24uYmF0Y2hPYmplY3QuYWNjZWxlcmF0aW9uU3RydWN0dXJlXHJcbiAgICAgIC5nZXRWZXJ0ZXhBdEluZGV4KGludGVyc2VjdGlvbi5mYWNlLmMpXHJcbiAgICAgIC5wcm9qZWN0KHRoaXMucmVuZGVyZXIucmVuZGVyaW5nQ2FtZXJhKVxyXG5cclxuICAgIGNvbnN0IHByb2plY3RlZEludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbi5wb2ludC5wcm9qZWN0KFxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcmluZ0NhbWVyYVxyXG4gICAgKVxyXG4gICAgY29uc3QgdHJpID0gW3YwLCB2MSwgdjJdXHJcbiAgICB0cmkuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICByZXR1cm4gcHJvamVjdGVkSW50ZXJzZWN0aW9uLmRpc3RhbmNlVG8oYSkgLSBwcm9qZWN0ZWRJbnRlcnNlY3Rpb24uZGlzdGFuY2VUbyhiKVxyXG4gICAgfSlcclxuICAgIGNvbnN0IGNsb3Nlc3RTY3JlZW4gPSB0aGlzLnJlbmRlcmVyLk5EQ1RvU2NyZWVuKHRyaVswXS54LCB0cmlbMF0ueSlcclxuICAgIGNvbnN0IGludGVyc2VjdGlvblNjcmVlbiA9IHRoaXMucmVuZGVyZXIuTkRDVG9TY3JlZW4oXHJcbiAgICAgIHByb2plY3RlZEludGVyc2VjdGlvbi54LFxyXG4gICAgICBwcm9qZWN0ZWRJbnRlcnNlY3Rpb24ueVxyXG4gICAgKVxyXG4gICAgdGhpcy5zY3JlZW5CdWZmMC5zZXQoY2xvc2VzdFNjcmVlbi54LCBjbG9zZXN0U2NyZWVuLnkpXHJcbiAgICB0aGlzLnNjcmVlbkJ1ZmYxLnNldChpbnRlcnNlY3Rpb25TY3JlZW4ueCwgaW50ZXJzZWN0aW9uU2NyZWVuLnkpXHJcbiAgICBjb25zdCB1bnByb2plY3RlZFBvaW50ID0gdHJpWzBdLnVucHJvamVjdCh0aGlzLnJlbmRlcmVyLnJlbmRlcmluZ0NhbWVyYSlcclxuICAgIGlmICh0aGlzLnNjcmVlbkJ1ZmYwLmRpc3RhbmNlVG8odGhpcy5zY3JlZW5CdWZmMSkgPCAxMCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB7XHJcbiAgICAgIG91dFBvaW50LmNvcHkodW5wcm9qZWN0ZWRQb2ludClcclxuICAgICAgb3V0Tm9ybWFsLmNvcHkoaW50ZXJzZWN0aW9uLmZhY2Uubm9ybWFsKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZUNsaXBwaW5nUGxhbmVzKHBsYW5lczogUGxhbmVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWVhc3VyZW1lbnRzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgIHZhbHVlLnVwZGF0ZUNsaXBwaW5nUGxhbmVzKHBsYW5lcylcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYXBwbHlPcHRpb25zKCkge1xyXG4gICAgY29uc3QgYWxsID0gW3RoaXMuX2FjdGl2ZU1lYXN1cmVtZW50LCAuLi50aGlzLl9tZWFzdXJlbWVudHNdXHJcbiAgICBjb25zdCB1cGRhdGVQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW11cclxuICAgIGFsbC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB2YWx1ZS51bml0cyA9XHJcbiAgICAgICAgICB0aGlzLl9vcHRpb25zLnVuaXRzICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyB0aGlzLl9vcHRpb25zLnVuaXRzXHJcbiAgICAgICAgICAgIDogRGVmYXVsdE1lYXN1cmVtZW50c09wdGlvbnMudW5pdHNcclxuICAgICAgICB2YWx1ZS5wcmVjaXNpb24gPVxyXG4gICAgICAgICAgdGhpcy5fb3B0aW9ucy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHRoaXMuX29wdGlvbnMucHJlY2lzaW9uXHJcbiAgICAgICAgICAgIDogRGVmYXVsdE1lYXN1cmVtZW50c09wdGlvbnMucHJlY2lzaW9uXHJcbiAgICAgICAgdXBkYXRlUHJvbWlzZXMucHVzaCh2YWx1ZS51cGRhdGUoKSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMudmlld2VyXHJcbiAgICAgIC5nZXRSZW5kZXJlcigpXHJcbiAgICAgIC5lbmFibGVMYXllcnMoW09iamVjdExheWVycy5NRUFTVVJFTUVOVFNdLCB0aGlzLl9vcHRpb25zLnZpc2libGUpXHJcblxyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMudmlzaWJsZSkgdGhpcy5yYXljYXN0ZXIubGF5ZXJzLmVuYWJsZShPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTKVxyXG4gICAgZWxzZSB0aGlzLnJheWNhc3Rlci5sYXllcnMuZGlzYWJsZShPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTKVxyXG4gICAgdm9pZCBQcm9taXNlLmFsbCh1cGRhdGVQcm9taXNlcykudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMudmlld2VyLnJlcXVlc3RSZW5kZXIoKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRNZWFzdXJlbWVudChtZWFzdXJlbWVudERhdGE6IE1lYXN1cmVtZW50RGF0YSkge1xyXG4gICAgY29uc3QgY2FjaGVPcHRpb25zID0gdGhpcy5fb3B0aW9uc1xyXG4gICAgdGhpcy5fb3B0aW9ucy50eXBlID0gbWVhc3VyZW1lbnREYXRhLnR5cGVcclxuICAgIHRoaXMuX29wdGlvbnMuY2hhaW4gPSBmYWxzZVxyXG4gICAgdGhpcy5fb3B0aW9ucy52ZXJ0ZXhTbmFwID0gZmFsc2VcclxuXHJcbiAgICBjb25zdCBtZWFzdXJlbWVudCA9IHRoaXMuc3RhcnRNZWFzdXJlbWVudCgpXHJcbiAgICBtZWFzdXJlbWVudC5mcm9tTWVhc3VyZW1lbnREYXRhKG1lYXN1cmVtZW50RGF0YSlcclxuICAgIG1lYXN1cmVtZW50LmlzVmlzaWJsZSA9IHRydWVcclxuICAgIHZvaWQgbWVhc3VyZW1lbnQudXBkYXRlKCkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMudmlld2VyLnJlcXVlc3RSZW5kZXIoKVxyXG4gICAgfSlcclxuICAgIHRoaXMucHVzaE1lYXN1cmVtZW50KG1lYXN1cmVtZW50KVxyXG5cclxuICAgIHRoaXMuX29wdGlvbnMudHlwZSA9IGNhY2hlT3B0aW9ucy50eXBlXHJcbiAgICB0aGlzLl9vcHRpb25zLmNoYWluID0gY2FjaGVPcHRpb25zLmNoYWluXHJcbiAgICB0aGlzLl9vcHRpb25zLnZlcnRleFNuYXAgPSBjYWNoZU9wdGlvbnMudmVydGV4U25hcFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvTWVhc3VyZW1lbnREYXRhKCk6IE1lYXN1cmVtZW50RGF0YVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9tZWFzdXJlbWVudHMubWFwKCh2YWwpID0+IHZhbC50b01lYXN1cmVtZW50RGF0YSgpKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIEV4dGVuZGVkSW50ZXJzZWN0aW9uIH0gZnJvbSAnLi4vb2JqZWN0cy9TcGVja2xlUmF5Y2FzdGVyLmpzJ1xyXG5pbXBvcnQgeyBFeHRlbnNpb24gfSBmcm9tICcuL0V4dGVuc2lvbi5qcydcclxuaW1wb3J0IHsgTm9kZVJlbmRlclZpZXcgfSBmcm9tICcuLi90cmVlL05vZGVSZW5kZXJWaWV3LmpzJ1xyXG5pbXBvcnQgeyBCb3gzLCBDYW1lcmEsIE1hdGVyaWFsLCBWZWN0b3IyLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IElucHV0RXZlbnQgfSBmcm9tICcuLi9pbnB1dC9JbnB1dC5qcydcclxuaW1wb3J0IHsgTWF0aFV0aWxzIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7XHJcbiAgdHlwZSBJVmlld2VyLFxyXG4gIE9iamVjdExheWVycyxcclxuICB0eXBlIFNlbGVjdGlvbkV2ZW50LFxyXG4gIFVwZGF0ZUZsYWdzLFxyXG4gIFZpZXdlckV2ZW50XHJcbn0gZnJvbSAnLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IE1hdGVyaWFscywge1xyXG4gIHR5cGUgRGlzcGxheVN0eWxlLFxyXG4gIHR5cGUgUmVuZGVyTWF0ZXJpYWxcclxufSBmcm9tICcuLi9tYXRlcmlhbHMvTWF0ZXJpYWxzLmpzJ1xyXG5pbXBvcnQgeyBTdGVuY2lsT3V0bGluZVR5cGUgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIE1hdGVyaWFsT3B0aW9ucyB9IGZyb20gJy4uL21hdGVyaWFscy9NYXRlcmlhbE9wdGlvbnMuanMnXHJcbmltcG9ydCB7IHR5cGUgVHJlZU5vZGUgfSBmcm9tICcuLi90cmVlL1dvcmxkVHJlZS5qcydcclxuaW1wb3J0IHsgQ2FtZXJhQ29udHJvbGxlciB9IGZyb20gJy4vQ2FtZXJhQ29udHJvbGxlci5qcydcclxuXHJcbmV4cG9ydCB0eXBlIFdpbmRvd1NlbGVjdGlvbk1vZGlmaWVyS2V5ID0gJ25vbmUnIHwgJ3NoaWZ0JyB8ICdjdHJsJyB8ICdhbHQnIHwgJ21ldGEnXHJcbmV4cG9ydCB0eXBlIFdpbmRvd1NlbGVjdGlvbk1vZGUgPSAnaW50ZXJzZWN0cycgfCAnY29udGFpbnMnXHJcblxyXG5leHBvcnQgZW51bSBTZWxlY3Rpb25FeHRlbnNpb25FdmVudCB7XHJcbiAgU2VsZWN0aW9uQ2hhbmdlZCA9ICdzZWxlY3Rpb24tY2hhbmdlZCdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU2VsZWN0aW9uRXh0ZW5zaW9uRXZlbnRQYXlsb2FkID0ge1xyXG4gIFtTZWxlY3Rpb25FeHRlbnNpb25FdmVudC5TZWxlY3Rpb25DaGFuZ2VkXToge1xyXG4gICAgbm9kZXM6IFRyZWVOb2RlW11cclxuICAgIG9iamVjdHM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PlxyXG4gICAgb2JqZWN0SWRzOiBzdHJpbmdbXVxyXG4gICAgcmVuZGVyVmlld0d1aWRzOiBzdHJpbmdbXVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25FeHRlbnNpb25PcHRpb25zIHtcclxuICBzZWxlY3Rpb25NYXRlcmlhbERhdGE6IFJlbmRlck1hdGVyaWFsICYgRGlzcGxheVN0eWxlICYgTWF0ZXJpYWxPcHRpb25zXHJcbiAgaG92ZXJNYXRlcmlhbERhdGE/OiBSZW5kZXJNYXRlcmlhbCAmIERpc3BsYXlTdHlsZSAmIE1hdGVyaWFsT3B0aW9uc1xyXG4gIHdpbmRvd1NlbGVjdGlvbj86IHtcclxuICAgIGVuYWJsZWQ/OiBib29sZWFuXHJcbiAgICBtb2RpZmllcktleT86IFdpbmRvd1NlbGVjdGlvbk1vZGlmaWVyS2V5XHJcbiAgICBtaW5EcmFnUGl4ZWxzPzogbnVtYmVyXHJcbiAgICBzZWxlY3Rpb25Nb2RlPzogV2luZG93U2VsZWN0aW9uTW9kZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERlZmF1bHRTZWxlY3Rpb25FeHRlbnNpb25PcHRpb25zOiBTZWxlY3Rpb25FeHRlbnNpb25PcHRpb25zID0ge1xyXG4gIHNlbGVjdGlvbk1hdGVyaWFsRGF0YToge1xyXG4gICAgaWQ6IE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgIGNvbG9yOiAweDA0N2VmYixcclxuICAgIGVtaXNzaXZlOiAweDAsXHJcbiAgICBvcGFjaXR5OiAxLFxyXG4gICAgcm91Z2huZXNzOiAxLFxyXG4gICAgbWV0YWxuZXNzOiAwLFxyXG4gICAgdmVydGV4Q29sb3JzOiBmYWxzZSxcclxuICAgIGxpbmVXZWlnaHQ6IDEsXHJcbiAgICBzdGVuY2lsT3V0bGluZXM6IFN0ZW5jaWxPdXRsaW5lVHlwZS5PVkVSTEFZLFxyXG4gICAgcG9pbnRTaXplOiA0XHJcbiAgfSxcclxuICB3aW5kb3dTZWxlY3Rpb246IHtcclxuICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgbW9kaWZpZXJLZXk6ICdhbHQnLFxyXG4gICAgbWluRHJhZ1BpeGVsczogNixcclxuICAgIHNlbGVjdGlvbk1vZGU6ICdjb250YWlucydcclxuICB9XHJcbiAgLy8gaG92ZXJNYXRlcmlhbERhdGE6IHtcclxuICAvLyAgIGlkOiBnZW5lcmF0ZVVVSUQoKSxcclxuICAvLyAgIGNvbG9yOiAweGZmNzM3NyxcclxuICAvLyAgIG9wYWNpdHk6IDEsXHJcbiAgLy8gICByb3VnaG5lc3M6IDEsXHJcbiAgLy8gICBtZXRhbG5lc3M6IDAsXHJcbiAgLy8gICB2ZXJ0ZXhDb2xvcnM6IGZhbHNlLFxyXG4gIC8vICAgbGluZVdlaWdodDogMSxcclxuICAvLyAgIHN0ZW5jaWxPdXRsaW5lczogU3RlbmNpbE91dGxpbmVUeXBlLk9WRVJMQVksXHJcbiAgLy8gICBwb2ludFNpemU6IDRcclxuICAvLyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25FeHRlbnNpb24gZXh0ZW5kcyBFeHRlbnNpb24ge1xyXG4gIHB1YmxpYyBnZXQgaW5qZWN0KCkge1xyXG4gICAgcmV0dXJuIFtDYW1lcmFDb250cm9sbGVyXVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTm9kZXM6IEFycmF5PFRyZWVOb2RlPiA9IFtdXHJcbiAgcHJvdGVjdGVkIHNlbGVjdGlvblJ2czogeyBbaWQ6IHN0cmluZ106IE5vZGVSZW5kZXJWaWV3IH0gPSB7fVxyXG4gIHByb3RlY3RlZCBzZWxlY3Rpb25NYXRlcmlhbHM6IHsgW2lkOiBzdHJpbmddOiBNYXRlcmlhbCB9ID0ge31cclxuICBwcm90ZWN0ZWQgaG92ZXJSdjogTm9kZVJlbmRlclZpZXcgfCBudWxsXHJcbiAgcHJvdGVjdGVkIGhvdmVyTWF0ZXJpYWw6IE1hdGVyaWFsIHwgbnVsbFxyXG4gIHByb3RlY3RlZCBzZWxlY3Rpb25NYXRlcmlhbERhdGE6IFJlbmRlck1hdGVyaWFsICYgRGlzcGxheVN0eWxlICYgTWF0ZXJpYWxPcHRpb25zXHJcbiAgcHJvdGVjdGVkIGhvdmVyTWF0ZXJpYWxEYXRhOiBSZW5kZXJNYXRlcmlhbCAmIERpc3BsYXlTdHlsZSAmIE1hdGVyaWFsT3B0aW9uc1xyXG4gIHByb3RlY3RlZCB0cmFuc3BhcmVudFNlbGVjdGlvbk1hdGVyaWFsRGF0YTogUmVuZGVyTWF0ZXJpYWwgJlxyXG4gICAgRGlzcGxheVN0eWxlICZcclxuICAgIE1hdGVyaWFsT3B0aW9uc1xyXG4gIHByb3RlY3RlZCB0cmFuc3BhcmVudEhvdmVyTWF0ZXJpYWxEYXRhITogUmVuZGVyTWF0ZXJpYWwgJlxyXG4gICAgRGlzcGxheVN0eWxlICZcclxuICAgIE1hdGVyaWFsT3B0aW9uc1xyXG4gIHByb3RlY3RlZCBoaWRkZW5TZWxlY3Rpb25NYXRlcmlhbERhdGEhOiBSZW5kZXJNYXRlcmlhbCAmXHJcbiAgICBEaXNwbGF5U3R5bGUgJlxyXG4gICAgTWF0ZXJpYWxPcHRpb25zXHJcbiAgcHJvdGVjdGVkIHdpbmRvd1NlbGVjdGlvbk9wdGlvbnMhOiBSZXF1aXJlZDxcclxuICAgIE5vbk51bGxhYmxlPFNlbGVjdGlvbkV4dGVuc2lvbk9wdGlvbnNbJ3dpbmRvd1NlbGVjdGlvbiddPlxyXG4gID5cclxuICBwcm90ZWN0ZWQgd2luZG93U2VsZWN0aW9uU3RhcnQ6IFBvaW50ZXJFdmVudCB8IG51bGwgPSBudWxsXHJcbiAgcHJvdGVjdGVkIHdpbmRvd1NlbGVjdGlvbkVuZDogUG9pbnRlckV2ZW50IHwgbnVsbCA9IG51bGxcclxuICBwcm90ZWN0ZWQgd2luZG93U2VsZWN0aW9uRWxlbWVudDogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbFxyXG4gIHByb3RlY3RlZCB3aW5kb3dTZWxlY3Rpb25EcmFnZ2luZyA9IGZhbHNlXHJcbiAgcHJvdGVjdGVkIHN1cHByZXNzTmV4dENsaWNrID0gZmFsc2VcclxuICBwcm90ZWN0ZWQgd2luZG93U2VsZWN0aW9uTGFzdFN0YXRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbCA9IG51bGxcclxuICBwcm90ZWN0ZWQgd2luZG93U2VsZWN0aW9uVG1wUG9pbnQgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJvdGVjdGVkIF9lbmFibGVkID0gdHJ1ZVxyXG4gIHByb3RlY3RlZCBfb3B0aW9ucyE6IFNlbGVjdGlvbkV4dGVuc2lvbk9wdGlvbnNcclxuXHJcbiAgcHVibGljIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogU2VsZWN0aW9uRXh0ZW5zaW9uT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBTZWxlY3Rpb25FeHRlbnNpb25PcHRpb25zKSB7XHJcbiAgICB0aGlzLl9vcHRpb25zID0gdmFsdWVcclxuICAgIHRoaXMuc2VsZWN0aW9uTWF0ZXJpYWxEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLnNlbGVjdGlvbk1hdGVyaWFsRGF0YSlcclxuICAgIHRoaXMud2luZG93U2VsZWN0aW9uT3B0aW9ucyA9IHtcclxuICAgICAgZW5hYmxlZDogdmFsdWUud2luZG93U2VsZWN0aW9uPy5lbmFibGVkID8/IGZhbHNlLFxyXG4gICAgICBtb2RpZmllcktleTogdmFsdWUud2luZG93U2VsZWN0aW9uPy5tb2RpZmllcktleSA/PyAnYWx0JyxcclxuICAgICAgbWluRHJhZ1BpeGVsczogdmFsdWUud2luZG93U2VsZWN0aW9uPy5taW5EcmFnUGl4ZWxzID8/IDYsXHJcbiAgICAgIHNlbGVjdGlvbk1vZGU6IHZhbHVlLndpbmRvd1NlbGVjdGlvbj8uc2VsZWN0aW9uTW9kZSA/PyAnY29udGFpbnMnXHJcbiAgICB9XHJcbiAgICAvKiogVHJhbnNwYXJlbnQgc2VsZWN0aW9uICovXHJcbiAgICB0aGlzLnRyYW5zcGFyZW50U2VsZWN0aW9uTWF0ZXJpYWxEYXRhID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge30sXHJcbiAgICAgIHRoaXMub3B0aW9ucy5zZWxlY3Rpb25NYXRlcmlhbERhdGFcclxuICAgIClcclxuICAgIHRoaXMudHJhbnNwYXJlbnRTZWxlY3Rpb25NYXRlcmlhbERhdGEub3BhY2l0eSA9IDAuNVxyXG4gICAgLyoqIEhpZGRlbiBzZWxlY3Rpb24gKi9cclxuICAgIHRoaXMuaGlkZGVuU2VsZWN0aW9uTWF0ZXJpYWxEYXRhID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge30sXHJcbiAgICAgIHRoaXMub3B0aW9ucy5zZWxlY3Rpb25NYXRlcmlhbERhdGFcclxuICAgIClcclxuICAgIHRoaXMuaGlkZGVuU2VsZWN0aW9uTWF0ZXJpYWxEYXRhLnN0ZW5jaWxPdXRsaW5lcyA9IFN0ZW5jaWxPdXRsaW5lVHlwZS5PVVRMSU5FX09OTFlcclxuXHJcbiAgICAvKiogT3BhcXVlIGhvdmVyICovXHJcbiAgICB0aGlzLmhvdmVyTWF0ZXJpYWxEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLmhvdmVyTWF0ZXJpYWxEYXRhKVxyXG4gICAgLyoqIFRyYW5zcGFyZW50IGhvdmVyICovXHJcbiAgICB0aGlzLnRyYW5zcGFyZW50SG92ZXJNYXRlcmlhbERhdGEgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAgdGhpcy5vcHRpb25zLmhvdmVyTWF0ZXJpYWxEYXRhXHJcbiAgICApXHJcbiAgICB0aGlzLnRyYW5zcGFyZW50SG92ZXJNYXRlcmlhbERhdGEub3BhY2l0eSA9IDAuNVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHZpZXdlcjogSVZpZXdlciwgcHJvdGVjdGVkIGNhbWVyYVByb3ZpZGVyOiBDYW1lcmFDb250cm9sbGVyKSB7XHJcbiAgICBzdXBlcih2aWV3ZXIpXHJcbiAgICB0aGlzLnZpZXdlci5vbihWaWV3ZXJFdmVudC5PYmplY3RDbGlja2VkLCB0aGlzLm9uT2JqZWN0Q2xpY2tlZC5iaW5kKHRoaXMpKVxyXG4gICAgdGhpcy52aWV3ZXIub24oVmlld2VyRXZlbnQuT2JqZWN0RG91YmxlQ2xpY2tlZCwgdGhpcy5vbk9iamVjdERvdWJsZUNsaWNrLmJpbmQodGhpcykpXHJcbiAgICB0aGlzLnZpZXdlclxyXG4gICAgICAuZ2V0UmVuZGVyZXIoKVxyXG4gICAgICAuaW5wdXQub24oSW5wdXRFdmVudC5Qb2ludGVyRG93biwgdGhpcy5vblBvaW50ZXJEb3duLmJpbmQodGhpcykpXHJcbiAgICB0aGlzLnZpZXdlclxyXG4gICAgICAuZ2V0UmVuZGVyZXIoKVxyXG4gICAgICAuaW5wdXQub24oSW5wdXRFdmVudC5Qb2ludGVyTW92ZSwgdGhpcy5vblBvaW50ZXJNb3ZlLmJpbmQodGhpcykpXHJcbiAgICB0aGlzLnZpZXdlclxyXG4gICAgICAuZ2V0UmVuZGVyZXIoKVxyXG4gICAgICAuaW5wdXQub24oSW5wdXRFdmVudC5Qb2ludGVyVXAsIHRoaXMub25Qb2ludGVyVXAuYmluZCh0aGlzKSlcclxuICAgIHRoaXMudmlld2VyXHJcbiAgICAgIC5nZXRSZW5kZXJlcigpXHJcbiAgICAgIC5pbnB1dC5vbihJbnB1dEV2ZW50LlBvaW50ZXJDYW5jZWwsIHRoaXMub25Qb2ludGVyQ2FuY2VsLmJpbmQodGhpcykpXHJcbiAgICB0aGlzLm9wdGlvbnMgPSBEZWZhdWx0U2VsZWN0aW9uRXh0ZW5zaW9uT3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNlbGVjdGVkT2JqZWN0cygpOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2Rlcy5tYXAoKHYpID0+IHYubW9kZWwucmF3KVxyXG4gIH1cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWROb2RlcygpOiBBcnJheTxUcmVlTm9kZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2Rlc1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRPYmplY3RJZHMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2Rlcy5tYXAoKG5vZGUpID0+IG5vZGUubW9kZWwuaWQpXHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFJlbmRlclZpZXdHdWlkcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCByZW5kZXJWaWV3R3VpZHMgPSBuZXcgU2V0PHN0cmluZz4oKVxyXG4gICAgdGhpcy5zZWxlY3RlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgdGhpcy52aWV3ZXJcclxuICAgICAgICAuZ2V0V29ybGRUcmVlKClcclxuICAgICAgICAuZ2V0UmVuZGVyVHJlZSgpXHJcbiAgICAgICAgLmdldFJlbmRlclZpZXdzRm9yTm9kZShub2RlKVxyXG4gICAgICAgIC5mb3JFYWNoKChydikgPT4gcmVuZGVyVmlld0d1aWRzLmFkZChydi5ndWlkKSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gWy4uLnJlbmRlclZpZXdHdWlkc11cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbjxUIGV4dGVuZHMgU2VsZWN0aW9uRXh0ZW5zaW9uRXZlbnQ+KFxyXG4gICAgZXZlbnRUeXBlOiBULFxyXG4gICAgbGlzdGVuZXI6IChhcmc6IFNlbGVjdGlvbkV4dGVuc2lvbkV2ZW50UGF5bG9hZFtUXSkgPT4gdm9pZFxyXG4gICk6IHZvaWQge1xyXG4gICAgc3VwZXIub24oZXZlbnRUeXBlLCBsaXN0ZW5lcilcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RPYmplY3RzKGlkczogQXJyYXk8c3RyaW5nPiwgbXVsdGlTZWxlY3QgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSByZXR1cm5cclxuXHJcbiAgICBpZiAoIW11bHRpU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtdXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlSWRzID0gbmV3IFNldChcclxuICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLm1hcCgobm9kZSkgPT4gdGhpcy5nZXROb2RlU2VsZWN0aW9uS2V5KG5vZGUpKVxyXG4gICAgKVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBpZHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgZm91bmROb2RlcyA9IHRoaXMudmlld2VyLmdldFdvcmxkVHJlZSgpLmZpbmRJZChpZHNba10pXHJcbiAgICAgIGlmIChmb3VuZE5vZGVzKVxyXG4gICAgICAgIGZvdW5kTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGlvbktleSA9IHRoaXMuZ2V0Tm9kZVNlbGVjdGlvbktleShub2RlKVxyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkTm9kZUlkcy5oYXMobm9kZVNlbGVjdGlvbktleSkpIHJldHVyblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLnB1c2gobm9kZSlcclxuICAgICAgICAgIHNlbGVjdGVkTm9kZUlkcy5hZGQobm9kZVNlbGVjdGlvbktleSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXBwbHlTZWxlY3Rpb24oKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNlbGVjdE5vZGVzKG5vZGVzOiBUcmVlTm9kZVtdLCBtdWx0aVNlbGVjdCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVyblxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkTm9kZUlkcyA9IG5ldyBTZXQoXHJcbiAgICAgIChtdWx0aVNlbGVjdCA/IHRoaXMuc2VsZWN0ZWROb2RlcyA6IFtdKS5tYXAoKG5vZGUpID0+XHJcbiAgICAgICAgdGhpcy5nZXROb2RlU2VsZWN0aW9uS2V5KG5vZGUpXHJcbiAgICAgIClcclxuICAgIClcclxuICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IG11bHRpU2VsZWN0ID8gdGhpcy5zZWxlY3RlZE5vZGVzLnNsaWNlKCkgOiBbXVxyXG5cclxuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgY29uc3Qgbm9kZVNlbGVjdGlvbktleSA9IHRoaXMuZ2V0Tm9kZVNlbGVjdGlvbktleShub2RlKVxyXG4gICAgICBpZiAoc2VsZWN0ZWROb2RlSWRzLmhhcyhub2RlU2VsZWN0aW9uS2V5KSkgcmV0dXJuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5wdXNoKG5vZGUpXHJcbiAgICAgIHNlbGVjdGVkTm9kZUlkcy5hZGQobm9kZVNlbGVjdGlvbktleSlcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5hcHBseVNlbGVjdGlvbigpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0Tm9kZVNlbGVjdGlvbktleShub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgcmV0dXJuIGAke25vZGUubW9kZWwuc3VidHJlZUlkfToke25vZGUubW9kZWwuaWR9YFxyXG4gIH1cclxuXHJcbiAgLyoqVE8gRE86IFRoaXMgaXMgcmVkdW5kYW50ICovXHJcbiAgcHVibGljIHVuc2VsZWN0T2JqZWN0cyhpZHM6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fZW5hYmxlZCkgcmV0dXJuXHJcblxyXG4gICAgY29uc3Qgbm9kZXMgPSBbXVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBpZHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgZm91bmROb2RlcyA9IHRoaXMudmlld2VyLmdldFdvcmxkVHJlZSgpLmZpbmRJZChpZHNba10pXHJcbiAgICAgIGlmIChmb3VuZE5vZGVzKSBub2Rlcy5wdXNoKC4uLmZvdW5kTm9kZXMpXHJcbiAgICB9XHJcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKG5vZGVzKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyU2VsZWN0aW9uKG5vZGVzPzogQXJyYXk8VHJlZU5vZGU+KSB7XHJcbiAgICBpZiAoIW5vZGVzKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uKClcclxuICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW11cclxuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZCgpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJ2czogQXJyYXk8Tm9kZVJlbmRlclZpZXc+ID0gW11cclxuICAgIG5vZGVzLmZvckVhY2goKG5vZGU6IFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgIHJ2cy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMudmlld2VyLmdldFdvcmxkVHJlZSgpLmdldFJlbmRlclRyZWUoKS5nZXRSZW5kZXJWaWV3c0Zvck5vZGUobm9kZSlcclxuICAgICAgKVxyXG4gICAgfSlcclxuICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uKHJ2cylcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSB0aGlzLnNlbGVjdGVkTm9kZXMuZmlsdGVyKFxyXG4gICAgICAobm9kZTogVHJlZU5vZGUpID0+ICFub2Rlcy5pbmNsdWRlcyhub2RlKVxyXG4gICAgKVxyXG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZCgpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25PYmplY3RDbGlja2VkKHNlbGVjdGlvbjogU2VsZWN0aW9uRXZlbnQgfCBudWxsKSB7XHJcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVyblxyXG4gICAgaWYgKHRoaXMuc3VwcHJlc3NOZXh0Q2xpY2spIHtcclxuICAgICAgdGhpcy5zdXBwcmVzc05leHRDbGljayA9IGZhbHNlXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChzZWxlY3Rpb24ubXVsdGlwbGUpIHtcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZXMuaW5jbHVkZXMoc2VsZWN0aW9uLmhpdHNbMF0ubm9kZSkpXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLnB1c2goc2VsZWN0aW9uLmhpdHNbMF0ubm9kZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtzZWxlY3Rpb24uaGl0c1swXS5ub2RlXVxyXG4gICAgfVxyXG4gICAgdGhpcy5hcHBseVNlbGVjdGlvbigpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25PYmplY3REb3VibGVDbGljayhzZWxlY3Rpb25JbmZvOiBTZWxlY3Rpb25FdmVudCB8IG51bGwpIHtcclxuICAgIGlmICghdGhpcy5fZW5hYmxlZCkgcmV0dXJuXHJcbiAgICBpZiAodGhpcy53aW5kb3dTZWxlY3Rpb25EcmFnZ2luZykgcmV0dXJuXHJcblxyXG4gICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7XHJcbiAgICAgIHRoaXMuY2FtZXJhUHJvdmlkZXIuc2V0Q2FtZXJhVmlldyhbXSwgdHJ1ZSlcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbWVyYVByb3ZpZGVyLnNldENhbWVyYVZpZXcoXHJcbiAgICAgIFtzZWxlY3Rpb25JbmZvLmhpdHNbMF0ubm9kZS5tb2RlbC5pZCBhcyBzdHJpbmddLFxyXG4gICAgICB0cnVlXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25Qb2ludGVyRG93bihlOiBWZWN0b3IyICYgeyBldmVudDogUG9pbnRlckV2ZW50IH0pIHtcclxuICAgIGlmICghdGhpcy5fZW5hYmxlZCB8fCAhdGhpcy53aW5kb3dTZWxlY3Rpb25PcHRpb25zLmVuYWJsZWQpIHJldHVyblxyXG4gICAgaWYgKGUuZXZlbnQucG9pbnRlclR5cGUgPT09ICdtb3VzZScgJiYgZS5ldmVudC5idXR0b24gIT09IDApIHJldHVyblxyXG4gICAgaWYgKCF0aGlzLmlzV2luZG93U2VsZWN0aW9uTW9kaWZpZXJQcmVzc2VkKGUuZXZlbnQpKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLndpbmRvd1NlbGVjdGlvblN0YXJ0ID0gZS5ldmVudFxyXG4gICAgdGhpcy53aW5kb3dTZWxlY3Rpb25FbmQgPSBlLmV2ZW50XHJcbiAgICB0aGlzLndpbmRvd1NlbGVjdGlvbkRyYWdnaW5nID0gZmFsc2VcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvblBvaW50ZXJNb3ZlKGU6IFZlY3RvcjIgJiB7IGV2ZW50OiBFdmVudCB9KSB7XHJcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVyblxyXG4gICAgaWYgKHRoaXMud2luZG93U2VsZWN0aW9uU3RhcnQgJiYgZS5ldmVudCBpbnN0YW5jZW9mIFBvaW50ZXJFdmVudCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVdpbmRvd1NlbGVjdGlvbihlLmV2ZW50KVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkucmVuZGVyaW5nQ2FtZXJhXHJcbiAgICBpZiAoIWNhbWVyYSkgcmV0dXJuXHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuaG92ZXJNYXRlcmlhbERhdGEpIHJldHVyblxyXG4gICAgY29uc3QgcmVzdWx0ID1cclxuICAgICAgKHRoaXMudmlld2VyXHJcbiAgICAgICAgLmdldFJlbmRlcmVyKClcclxuICAgICAgICAuaW50ZXJzZWN0aW9ucy5pbnRlcnNlY3QoXHJcbiAgICAgICAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnNjZW5lLFxyXG4gICAgICAgICAgY2FtZXJhLFxyXG4gICAgICAgICAgZSxcclxuICAgICAgICAgIFtcclxuICAgICAgICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0gsXHJcbiAgICAgICAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVCxcclxuICAgICAgICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX0xJTkUsXHJcbiAgICAgICAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9URVhUXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgIHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkuY2xpcHBpbmdWb2x1bWVcclxuICAgICAgICApIGFzIEV4dGVuZGVkSW50ZXJzZWN0aW9uW10pIHx8IFtdXHJcblxyXG4gICAgLyogVEVNUE9SQVJZICovXHJcbiAgICBsZXQgcnZNYXRlcmlhbDogW05vZGVSZW5kZXJWaWV3IHwgbnVsbCwgTWF0ZXJpYWwgfCBudWxsXSA9IFtudWxsLCBudWxsXVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCByZXN1bHQubGVuZ3RoOyBrKyspIHtcclxuICAgICAgcnZNYXRlcmlhbCA9IHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkucmVuZGVyVmlld0Zyb21JbnRlcnNlY3Rpb24ocmVzdWx0W2tdKVxyXG4gICAgICBpZiAocnZNYXRlcmlhbCkgYnJlYWtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlIb3Zlcihydk1hdGVyaWFsWzBdKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uUG9pbnRlclVwKGU6IFZlY3RvcjIgJiB7IGV2ZW50OiBQb2ludGVyRXZlbnQgfSkge1xyXG4gICAgaWYgKCF0aGlzLndpbmRvd1NlbGVjdGlvblN0YXJ0KSByZXR1cm5cclxuICAgIHRoaXMudXBkYXRlV2luZG93U2VsZWN0aW9uKGUuZXZlbnQpXHJcblxyXG4gICAgaWYgKHRoaXMud2luZG93U2VsZWN0aW9uRHJhZ2dpbmcpIHtcclxuICAgICAgdGhpcy5zdXBwcmVzc05leHRDbGljayA9IHRydWVcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuZ2V0V2luZG93U2VsZWN0aW9uTm9kZXMoKVxyXG4gICAgICBjb25zdCBzZWxlY3Rpb25NcyA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc2VsZWN0aW9uU3RhcnRcclxuICAgICAgY29uc3QgYXBwbHlTdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXHJcbiAgICAgIHRoaXMuc2VsZWN0Tm9kZXMobm9kZXMsIGUuZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgIHRoaXMubG9nV2luZG93U2VsZWN0aW9uU3RhdHMoe1xyXG4gICAgICAgIC4uLih0aGlzLndpbmRvd1NlbGVjdGlvbkxhc3RTdGF0cyA/PyB7fSksXHJcbiAgICAgICAgc2VsZWN0aW9uTXMsXHJcbiAgICAgICAgYXBwbHlNczogcGVyZm9ybWFuY2Uubm93KCkgLSBhcHBseVN0YXJ0LFxyXG4gICAgICAgIG5vZGVzOiBub2Rlcy5sZW5ndGhcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMuY2xlYXJXaW5kb3dTZWxlY3Rpb24oKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uUG9pbnRlckNhbmNlbCgpIHtcclxuICAgIHRoaXMuY2xlYXJXaW5kb3dTZWxlY3Rpb24oKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGlzV2luZG93U2VsZWN0aW9uTW9kaWZpZXJQcmVzc2VkKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIHN3aXRjaCAodGhpcy53aW5kb3dTZWxlY3Rpb25PcHRpb25zLm1vZGlmaWVyS2V5KSB7XHJcbiAgICAgIGNhc2UgJ25vbmUnOlxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIGNhc2UgJ3NoaWZ0JzpcclxuICAgICAgICByZXR1cm4gZXZlbnQuc2hpZnRLZXlcclxuICAgICAgY2FzZSAnY3RybCc6XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXlcclxuICAgICAgY2FzZSAnYWx0JzpcclxuICAgICAgICByZXR1cm4gZXZlbnQuYWx0S2V5XHJcbiAgICAgIGNhc2UgJ21ldGEnOlxyXG4gICAgICAgIHJldHVybiBldmVudC5tZXRhS2V5XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlV2luZG93U2VsZWN0aW9uKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy53aW5kb3dTZWxlY3Rpb25TdGFydCkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy53aW5kb3dTZWxlY3Rpb25FbmQgPSBldmVudFxyXG4gICAgY29uc3QgZHJhZ0Rpc3RhbmNlID0gTWF0aC5oeXBvdChcclxuICAgICAgZXZlbnQuY2xpZW50WCAtIHRoaXMud2luZG93U2VsZWN0aW9uU3RhcnQuY2xpZW50WCxcclxuICAgICAgZXZlbnQuY2xpZW50WSAtIHRoaXMud2luZG93U2VsZWN0aW9uU3RhcnQuY2xpZW50WVxyXG4gICAgKVxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy53aW5kb3dTZWxlY3Rpb25EcmFnZ2luZyAmJlxyXG4gICAgICBkcmFnRGlzdGFuY2UgPCB0aGlzLndpbmRvd1NlbGVjdGlvbk9wdGlvbnMubWluRHJhZ1BpeGVsc1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud2luZG93U2VsZWN0aW9uRHJhZ2dpbmcgPSB0cnVlXHJcbiAgICB0aGlzLnJlbW92ZUhvdmVyKClcclxuICAgIHRoaXMuZW5zdXJlV2luZG93U2VsZWN0aW9uRWxlbWVudCgpXHJcbiAgICB0aGlzLnVwZGF0ZVdpbmRvd1NlbGVjdGlvbkVsZW1lbnQoKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGVuc3VyZVdpbmRvd1NlbGVjdGlvbkVsZW1lbnQoKSB7XHJcbiAgICBpZiAodGhpcy53aW5kb3dTZWxlY3Rpb25FbGVtZW50KSByZXR1cm5cclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnXHJcbiAgICBlbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSdcclxuICAgIGVsZW1lbnQuc3R5bGUuekluZGV4ID0gJzIxNDc0ODM2NDcnXHJcbiAgICBlbGVtZW50LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgIzA0N2VmYidcclxuICAgIGVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDQsIDEyNiwgMjUxLCAwLjE0KSdcclxuICAgIGVsZW1lbnQuc3R5bGUuYm94U2hhZG93ID0gJzAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNikgaW5zZXQnXHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpXHJcbiAgICB0aGlzLndpbmRvd1NlbGVjdGlvbkVsZW1lbnQgPSBlbGVtZW50XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlV2luZG93U2VsZWN0aW9uRWxlbWVudCgpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMud2luZG93U2VsZWN0aW9uRWxlbWVudCB8fFxyXG4gICAgICAhdGhpcy53aW5kb3dTZWxlY3Rpb25TdGFydCB8fFxyXG4gICAgICAhdGhpcy53aW5kb3dTZWxlY3Rpb25FbmRcclxuICAgICkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMud2luZG93U2VsZWN0aW9uU3RhcnQuY2xpZW50WCxcclxuICAgICAgdGhpcy53aW5kb3dTZWxlY3Rpb25FbmQuY2xpZW50WFxyXG4gICAgKVxyXG4gICAgY29uc3QgdG9wID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMud2luZG93U2VsZWN0aW9uU3RhcnQuY2xpZW50WSxcclxuICAgICAgdGhpcy53aW5kb3dTZWxlY3Rpb25FbmQuY2xpZW50WVxyXG4gICAgKVxyXG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLmFicyhcclxuICAgICAgdGhpcy53aW5kb3dTZWxlY3Rpb25FbmQuY2xpZW50WCAtIHRoaXMud2luZG93U2VsZWN0aW9uU3RhcnQuY2xpZW50WFxyXG4gICAgKVxyXG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5hYnMoXHJcbiAgICAgIHRoaXMud2luZG93U2VsZWN0aW9uRW5kLmNsaWVudFkgLSB0aGlzLndpbmRvd1NlbGVjdGlvblN0YXJ0LmNsaWVudFlcclxuICAgIClcclxuXHJcbiAgICB0aGlzLndpbmRvd1NlbGVjdGlvbkVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXHJcbiAgICB0aGlzLndpbmRvd1NlbGVjdGlvbkVsZW1lbnQuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxyXG4gICAgdGhpcy53aW5kb3dTZWxlY3Rpb25FbGVtZW50LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgXHJcbiAgICB0aGlzLndpbmRvd1NlbGVjdGlvbkVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNsZWFyV2luZG93U2VsZWN0aW9uKCkge1xyXG4gICAgdGhpcy53aW5kb3dTZWxlY3Rpb25TdGFydCA9IG51bGxcclxuICAgIHRoaXMud2luZG93U2VsZWN0aW9uRW5kID0gbnVsbFxyXG4gICAgdGhpcy53aW5kb3dTZWxlY3Rpb25EcmFnZ2luZyA9IGZhbHNlXHJcbiAgICB0aGlzLndpbmRvd1NlbGVjdGlvbkVsZW1lbnQ/LnJlbW92ZSgpXHJcbiAgICB0aGlzLndpbmRvd1NlbGVjdGlvbkVsZW1lbnQgPSBudWxsXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0V2luZG93U2VsZWN0aW9uTm9kZXMoKTogVHJlZU5vZGVbXSB7XHJcbiAgICBpZiAoIXRoaXMud2luZG93U2VsZWN0aW9uU3RhcnQgfHwgIXRoaXMud2luZG93U2VsZWN0aW9uRW5kKSByZXR1cm4gW11cclxuICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkucmVuZGVyaW5nQ2FtZXJhXHJcbiAgICBpZiAoIWNhbWVyYSkgcmV0dXJuIFtdXHJcblxyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZ2V0V2luZG93U2VsZWN0aW9uTmRjUmVjdCgpXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlcyA9IG5ldyBNYXA8c3RyaW5nLCBUcmVlTm9kZT4oKVxyXG4gICAgY29uc3QgcmVzb2x2ZWROb2RlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgVHJlZU5vZGVbXSB8IG51bGw+KClcclxuICAgIGNvbnN0IGJhdGNoZXMgPSB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLmJhdGNoZXIuZ2V0QmF0Y2hlcygpXHJcbiAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG4gICAgbGV0IHNjYW5uZWRCYXRjaGVzID0gMFxyXG4gICAgbGV0IHBydW5lZEJhdGNoZXMgPSAwXHJcbiAgICBsZXQgc2Nhbm5lZFJlbmRlclZpZXdzID0gMFxyXG4gICAgbGV0IG1hdGNoZWRSZW5kZXJWaWV3cyA9IDBcclxuXHJcbiAgICBjYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKVxyXG4gICAgOyhcclxuICAgICAgY2FtZXJhIGFzIENhbWVyYSAmIHsgdXBkYXRlUHJvamVjdGlvbk1hdHJpeD86ICgpID0+IHZvaWQgfVxyXG4gICAgKS51cGRhdGVQcm9qZWN0aW9uTWF0cml4Py4oKVxyXG5cclxuICAgIGZvciAobGV0IGJhdGNoSW5kZXggPSAwOyBiYXRjaEluZGV4IDwgYmF0Y2hlcy5sZW5ndGg7IGJhdGNoSW5kZXgrKykge1xyXG4gICAgICBjb25zdCBiYXRjaCA9IGJhdGNoZXNbYmF0Y2hJbmRleF1cclxuICAgICAgc2Nhbm5lZEJhdGNoZXMrK1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGJhdGNoLmJvdW5kcyAmJlxyXG4gICAgICAgICFiYXRjaC5ib3VuZHMuaXNFbXB0eSgpICYmXHJcbiAgICAgICAgIXRoaXMuYm94SW50ZXJzZWN0c1NlbGVjdGlvblJlY3QoYmF0Y2guYm91bmRzLCBjYW1lcmEsIHJlY3QpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHBydW5lZEJhdGNoZXMrK1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IHJlbmRlclZpZXdJbmRleCA9IDA7XHJcbiAgICAgICAgcmVuZGVyVmlld0luZGV4IDwgYmF0Y2gucmVuZGVyVmlld3MubGVuZ3RoO1xyXG4gICAgICAgIHJlbmRlclZpZXdJbmRleCsrXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IHJlbmRlclZpZXcgPSBiYXRjaC5yZW5kZXJWaWV3c1tyZW5kZXJWaWV3SW5kZXhdXHJcbiAgICAgICAgc2Nhbm5lZFJlbmRlclZpZXdzKytcclxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyVmlld01hdGNoZXNTZWxlY3Rpb25SZWN0KHJlbmRlclZpZXcsIGNhbWVyYSwgcmVjdCkpIGNvbnRpbnVlXHJcbiAgICAgICAgbWF0Y2hlZFJlbmRlclZpZXdzKytcclxuICAgICAgICB0aGlzLmFkZFdpbmRvd1NlbGVjdGlvbkNhbmRpZGF0ZShyZW5kZXJWaWV3LCBzZWxlY3RlZE5vZGVzLCByZXNvbHZlZE5vZGVDYWNoZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud2luZG93U2VsZWN0aW9uTGFzdFN0YXRzID0ge1xyXG4gICAgICBiYXRjaGVzOiBiYXRjaGVzLmxlbmd0aCxcclxuICAgICAgc2Nhbm5lZEJhdGNoZXMsXHJcbiAgICAgIHBydW5lZEJhdGNoZXMsXHJcbiAgICAgIHNjYW5uZWRSZW5kZXJWaWV3cyxcclxuICAgICAgbWF0Y2hlZFJlbmRlclZpZXdzLFxyXG4gICAgICBzZWxlY3RlZE5vZGVzOiBzZWxlY3RlZE5vZGVzLnNpemUsXHJcbiAgICAgIGNvbGxlY3RNczogcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydGVkQXRcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gWy4uLnNlbGVjdGVkTm9kZXMudmFsdWVzKCldXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWRkV2luZG93U2VsZWN0aW9uQ2FuZGlkYXRlKFxyXG4gICAgcnY6IE5vZGVSZW5kZXJWaWV3LFxyXG4gICAgc2VsZWN0ZWROb2RlczogTWFwPHN0cmluZywgVHJlZU5vZGU+LFxyXG4gICAgcmVzb2x2ZWROb2RlQ2FjaGU6IE1hcDxzdHJpbmcsIFRyZWVOb2RlW10gfCBudWxsPlxyXG4gICkge1xyXG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0YWJsZVJlbmRlclZpZXcocnYpKSByZXR1cm5cclxuXHJcbiAgICBjb25zdCByZW5kZXJWaWV3Tm9kZUtleSA9IGAke3J2LnJlbmRlckRhdGEuc3VidHJlZUlkfToke3J2LnJlbmRlckRhdGEuaWR9YFxyXG4gICAgbGV0IG5vZGVzID0gcmVzb2x2ZWROb2RlQ2FjaGUuZ2V0KHJlbmRlclZpZXdOb2RlS2V5KVxyXG4gICAgaWYgKG5vZGVzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgbm9kZXMgPVxyXG4gICAgICAgIHRoaXMudmlld2VyLmdldFdvcmxkVHJlZSgpLmZpbmRJZChydi5yZW5kZXJEYXRhLmlkLCBydi5yZW5kZXJEYXRhLnN1YnRyZWVJZCkgPz9cclxuICAgICAgICBudWxsXHJcbiAgICAgIHJlc29sdmVkTm9kZUNhY2hlLnNldChyZW5kZXJWaWV3Tm9kZUtleSwgbm9kZXMpXHJcbiAgICB9XHJcbiAgICBpZiAoIW5vZGVzKSByZXR1cm5cclxuXHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGxldCBwYXJlbnROb2RlID0gbm9kZVxyXG4gICAgICB3aGlsZSAoIXBhcmVudE5vZGUubW9kZWwuYXRvbWljICYmIHBhcmVudE5vZGUucGFyZW50KSB7XHJcbiAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50XHJcbiAgICAgIH1cclxuICAgICAgc2VsZWN0ZWROb2Rlcy5zZXQodGhpcy5nZXROb2RlU2VsZWN0aW9uS2V5KHBhcmVudE5vZGUpLCBwYXJlbnROb2RlKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRXaW5kb3dTZWxlY3Rpb25OZGNSZWN0KCkge1xyXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnZpZXdlclxyXG4gICAgICAuZ2V0UmVuZGVyZXIoKVxyXG4gICAgICAuc2NyZWVuVG9OREMoXHJcbiAgICAgICAgdGhpcy53aW5kb3dTZWxlY3Rpb25TdGFydCEuY2xpZW50WCxcclxuICAgICAgICB0aGlzLndpbmRvd1NlbGVjdGlvblN0YXJ0IS5jbGllbnRZXHJcbiAgICAgIClcclxuICAgIGNvbnN0IGVuZCA9IHRoaXMudmlld2VyXHJcbiAgICAgIC5nZXRSZW5kZXJlcigpXHJcbiAgICAgIC5zY3JlZW5Ub05EQyh0aGlzLndpbmRvd1NlbGVjdGlvbkVuZCEuY2xpZW50WCwgdGhpcy53aW5kb3dTZWxlY3Rpb25FbmQhLmNsaWVudFkpXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWluWDogTWF0aC5taW4oc3RhcnQueCwgZW5kLngpLFxyXG4gICAgICBtYXhYOiBNYXRoLm1heChzdGFydC54LCBlbmQueCksXHJcbiAgICAgIG1pblk6IE1hdGgubWluKHN0YXJ0LnksIGVuZC55KSxcclxuICAgICAgbWF4WTogTWF0aC5tYXgoc3RhcnQueSwgZW5kLnkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaXNTZWxlY3RhYmxlUmVuZGVyVmlldyhydjogTm9kZVJlbmRlclZpZXcpIHtcclxuICAgIGNvbnN0IG1hdGVyaWFsID0gdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5nZXRNYXRlcmlhbChydilcclxuICAgIGlmICghbWF0ZXJpYWwpIHJldHVybiBmYWxzZVxyXG5cclxuICAgIGNvbnN0IHBpY2tGaWx0ZXIgPVxyXG4gICAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLm9iamVjdFBpY2tDb25maWd1cmF0aW9uLnBpY2tlZE9iamVjdHNGaWx0ZXJcclxuICAgIHJldHVybiBwaWNrRmlsdGVyID8gcGlja0ZpbHRlcihbcnYsIG1hdGVyaWFsXSkgOiB0cnVlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVuZGVyVmlld01hdGNoZXNTZWxlY3Rpb25SZWN0KFxyXG4gICAgcmVuZGVyVmlldzogTm9kZVJlbmRlclZpZXcsXHJcbiAgICBjYW1lcmE6IENhbWVyYSxcclxuICAgIHJlY3Q6IHsgbWluWDogbnVtYmVyOyBtYXhYOiBudW1iZXI7IG1pblk6IG51bWJlcjsgbWF4WTogbnVtYmVyIH1cclxuICApIHtcclxuICAgIGlmICghcmVuZGVyVmlldy5hYWJiIHx8IHJlbmRlclZpZXcuYWFiYi5pc0VtcHR5KCkpIHJldHVybiBmYWxzZVxyXG5cclxuICAgIGlmICh0aGlzLndpbmRvd1NlbGVjdGlvbk9wdGlvbnMuc2VsZWN0aW9uTW9kZSA9PT0gJ2ludGVyc2VjdHMnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmJveEludGVyc2VjdHNTZWxlY3Rpb25SZWN0KHJlbmRlclZpZXcuYWFiYiwgY2FtZXJhLCByZWN0KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmJveENlbnRlckluU2VsZWN0aW9uUmVjdChyZW5kZXJWaWV3LmFhYmIsIGNhbWVyYSwgcmVjdClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBib3hDZW50ZXJJblNlbGVjdGlvblJlY3QoXHJcbiAgICBib3g6IEJveDMsXHJcbiAgICBjYW1lcmE6IENhbWVyYSxcclxuICAgIHJlY3Q6IHsgbWluWDogbnVtYmVyOyBtYXhYOiBudW1iZXI7IG1pblk6IG51bWJlcjsgbWF4WTogbnVtYmVyIH1cclxuICApIHtcclxuICAgIHRoaXMud2luZG93U2VsZWN0aW9uVG1wUG9pbnQuY29weShib3gubWluKS5hZGQoYm94Lm1heCkubXVsdGlwbHlTY2FsYXIoMC41KVxyXG4gICAgcmV0dXJuIHRoaXMucHJvamVjdGVkUG9pbnRJblNlbGVjdGlvblJlY3QoXHJcbiAgICAgIHRoaXMud2luZG93U2VsZWN0aW9uVG1wUG9pbnQsXHJcbiAgICAgIGNhbWVyYSxcclxuICAgICAgcmVjdFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGJveEludGVyc2VjdHNTZWxlY3Rpb25SZWN0KFxyXG4gICAgYm94OiBCb3gzLFxyXG4gICAgY2FtZXJhOiBDYW1lcmEsXHJcbiAgICByZWN0OiB7IG1pblg6IG51bWJlcjsgbWF4WDogbnVtYmVyOyBtaW5ZOiBudW1iZXI7IG1heFk6IG51bWJlciB9XHJcbiAgKSB7XHJcbiAgICBsZXQgbWluWCA9IEluZmluaXR5XHJcbiAgICBsZXQgbWluWSA9IEluZmluaXR5XHJcbiAgICBsZXQgbWF4WCA9IC1JbmZpbml0eVxyXG4gICAgbGV0IG1heFkgPSAtSW5maW5pdHlcclxuICAgIGxldCBwcm9qZWN0ZWQgPSBmYWxzZVxyXG4gICAgY29uc3QgbWluID0gYm94Lm1pblxyXG4gICAgY29uc3QgbWF4ID0gYm94Lm1heFxyXG5cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgODsgaysrKSB7XHJcbiAgICAgIHRoaXMud2luZG93U2VsZWN0aW9uVG1wUG9pbnQuc2V0KFxyXG4gICAgICAgIGsgJiAxID8gbWF4LnggOiBtaW4ueCxcclxuICAgICAgICBrICYgMiA/IG1heC55IDogbWluLnksXHJcbiAgICAgICAgayAmIDQgPyBtYXgueiA6IG1pbi56XHJcbiAgICAgIClcclxuICAgICAgdGhpcy53aW5kb3dTZWxlY3Rpb25UbXBQb2ludC5wcm9qZWN0KGNhbWVyYSlcclxuICAgICAgaWYgKHRoaXMud2luZG93U2VsZWN0aW9uVG1wUG9pbnQueiA8IC0xIHx8IHRoaXMud2luZG93U2VsZWN0aW9uVG1wUG9pbnQueiA+IDEpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBwcm9qZWN0ZWQgPSB0cnVlXHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCB0aGlzLndpbmRvd1NlbGVjdGlvblRtcFBvaW50LngpXHJcbiAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCB0aGlzLndpbmRvd1NlbGVjdGlvblRtcFBvaW50LnkpXHJcbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCB0aGlzLndpbmRvd1NlbGVjdGlvblRtcFBvaW50LngpXHJcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCB0aGlzLndpbmRvd1NlbGVjdGlvblRtcFBvaW50LnkpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFwcm9qZWN0ZWQpIHJldHVybiBmYWxzZVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgbWF4WCA+PSByZWN0Lm1pblggJiYgbWluWCA8PSByZWN0Lm1heFggJiYgbWF4WSA+PSByZWN0Lm1pblkgJiYgbWluWSA8PSByZWN0Lm1heFlcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcm9qZWN0ZWRQb2ludEluU2VsZWN0aW9uUmVjdChcclxuICAgIHBvaW50OiBWZWN0b3IzLFxyXG4gICAgY2FtZXJhOiBDYW1lcmEsXHJcbiAgICByZWN0OiB7IG1pblg6IG51bWJlcjsgbWF4WDogbnVtYmVyOyBtaW5ZOiBudW1iZXI7IG1heFk6IG51bWJlciB9XHJcbiAgKSB7XHJcbiAgICBwb2ludC5wcm9qZWN0KGNhbWVyYSlcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHBvaW50LnogPj0gLTEgJiZcclxuICAgICAgcG9pbnQueiA8PSAxICYmXHJcbiAgICAgIHBvaW50LnggPj0gcmVjdC5taW5YICYmXHJcbiAgICAgIHBvaW50LnggPD0gcmVjdC5tYXhYICYmXHJcbiAgICAgIHBvaW50LnkgPj0gcmVjdC5taW5ZICYmXHJcbiAgICAgIHBvaW50LnkgPD0gcmVjdC5tYXhZXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbG9nV2luZG93U2VsZWN0aW9uU3RhdHMoc3RhdHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4pIHtcclxuICAgIGNvbnN0IHJvdW5kZWRTdGF0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgT2JqZWN0LmVudHJpZXMoc3RhdHMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXHJcbiAgICAgICAga2V5LFxyXG4gICAgICAgIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyBNYXRoLnJvdW5kKHZhbHVlICogMTAwKSAvIDEwMCA6IHZhbHVlXHJcbiAgICAgIF0pXHJcbiAgICApXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgY29uc29sZS5pbmZvKCdbU3BlY2tsZVZpZXdlcl0gd2luZG93IHNlbGVjdGlvbicsIHJvdW5kZWRTdGF0cylcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhcHBseVNlbGVjdGlvbigpIHtcclxuICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uKClcclxuXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMuc2VsZWN0ZWROb2Rlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBydnMgPSB0aGlzLnZpZXdlclxyXG4gICAgICAgIC5nZXRXb3JsZFRyZWUoKVxyXG4gICAgICAgIC5nZXRSZW5kZXJUcmVlKClcclxuICAgICAgICAuZ2V0UmVuZGVyVmlld3NGb3JOb2RlKHRoaXMuc2VsZWN0ZWROb2Rlc1trXSlcclxuICAgICAgcnZzLmZvckVhY2goKHJ2OiBOb2RlUmVuZGVyVmlldykgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25SdnNbcnYuZ3VpZF0pIHRoaXMuc2VsZWN0aW9uUnZzW3J2Lmd1aWRdID0gcnZcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uTWF0ZXJpYWxzW3J2Lmd1aWRdKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1hdGVyaWFsc1tydi5ndWlkXSA9IHRoaXMudmlld2VyXHJcbiAgICAgICAgICAgIC5nZXRSZW5kZXJlcigpXHJcbiAgICAgICAgICAgIC5nZXRNYXRlcmlhbChydikgYXMgTWF0ZXJpYWxcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcnZzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnNlbGVjdGlvblJ2cylcclxuICAgIGNvbnN0IG9wYXF1ZVJ2cyA9IHJ2cy5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1hdGVyaWFsc1t2YWx1ZS5ndWlkXSAmJlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTWF0ZXJpYWxzW3ZhbHVlLmd1aWRdLnZpc2libGUgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1hdGVyaWFsc1t2YWx1ZS5ndWlkXSAmJlxyXG4gICAgICAgICEoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1hdGVyaWFsc1t2YWx1ZS5ndWlkXS50cmFuc3BhcmVudCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25NYXRlcmlhbHNbdmFsdWUuZ3VpZF0ub3BhY2l0eSA8IDFcclxuICAgICAgICApXHJcbiAgICApXHJcbiAgICBjb25zdCB0cmFuc3BhcmVudFJ2cyA9IHJ2cy5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1hdGVyaWFsc1t2YWx1ZS5ndWlkXSAmJlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTWF0ZXJpYWxzW3ZhbHVlLmd1aWRdLnZpc2libGUgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1hdGVyaWFsc1t2YWx1ZS5ndWlkXSAmJlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTWF0ZXJpYWxzW3ZhbHVlLmd1aWRdLnRyYW5zcGFyZW50ICYmXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25NYXRlcmlhbHNbdmFsdWUuZ3VpZF0ub3BhY2l0eSA8IDFcclxuICAgIClcclxuICAgIGNvbnN0IGhpZGRlblJ2cyA9IHJ2cy5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk1hdGVyaWFsc1t2YWx1ZS5ndWlkXSAmJlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTWF0ZXJpYWxzW3ZhbHVlLmd1aWRdLnZpc2libGUgPT09IGZhbHNlXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5zZXRNYXRlcmlhbChvcGFxdWVSdnMsIHRoaXMuc2VsZWN0aW9uTWF0ZXJpYWxEYXRhKVxyXG4gICAgdGhpcy52aWV3ZXJcclxuICAgICAgLmdldFJlbmRlcmVyKClcclxuICAgICAgLnNldE1hdGVyaWFsKHRyYW5zcGFyZW50UnZzLCB0aGlzLnRyYW5zcGFyZW50U2VsZWN0aW9uTWF0ZXJpYWxEYXRhKVxyXG4gICAgdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5zZXRNYXRlcmlhbChoaWRkZW5SdnMsIHRoaXMuaGlkZGVuU2VsZWN0aW9uTWF0ZXJpYWxEYXRhKVxyXG4gICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcihVcGRhdGVGbGFncy5SRU5ERVIgfCBVcGRhdGVGbGFncy5DTElQUElOR19QTEFORVMpXHJcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkKClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBlbWl0U2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IG9iamVjdElkcyA9IHRoaXMuZ2V0U2VsZWN0ZWRPYmplY3RJZHMoKVxyXG4gICAgdGhpcy5lbWl0KFNlbGVjdGlvbkV4dGVuc2lvbkV2ZW50LlNlbGVjdGlvbkNoYW5nZWQsIHtcclxuICAgICAgbm9kZXM6IG9iamVjdElkcy5sZW5ndGggPD0gMTAwMCA/IHRoaXMuc2VsZWN0ZWROb2Rlcy5zbGljZSgpIDogW10sXHJcbiAgICAgIG9iamVjdHM6IG9iamVjdElkcy5sZW5ndGggPD0gMTAwMCA/IHRoaXMuZ2V0U2VsZWN0ZWRPYmplY3RzKCkgOiBbXSxcclxuICAgICAgb2JqZWN0SWRzLFxyXG4gICAgICByZW5kZXJWaWV3R3VpZHM6IE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0aW9uUnZzKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZW1vdmVTZWxlY3Rpb24ocnZzPzogQXJyYXk8Tm9kZVJlbmRlclZpZXc+KSB7XHJcbiAgICB0aGlzLnJlbW92ZUhvdmVyKClcclxuXHJcbiAgICBjb25zdCBtYXRlcmlhbE1hcDogUmVjb3JkPHN0cmluZywgeyBydnM6IE5vZGVSZW5kZXJWaWV3W107IG1hdE5hbWU6IHN0cmluZyB9PiA9IHt9XHJcbiAgICBydnMgPSBydnMgPyBydnMgOiBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0aW9uUnZzKVxyXG4gICAgcnZzLmZvckVhY2goKHJ2OiBOb2RlUmVuZGVyVmlldykgPT4ge1xyXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMuc2VsZWN0aW9uTWF0ZXJpYWxzW3J2Lmd1aWRdXHJcbiAgICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICAgIGlmICghbWF0ZXJpYWxNYXBbbWF0ZXJpYWwudXVpZF0pXHJcbiAgICAgICAgICBtYXRlcmlhbE1hcFttYXRlcmlhbC51dWlkXSA9IHsgcnZzOiBbXSwgbWF0TmFtZTogbWF0ZXJpYWwuY29uc3RydWN0b3IubmFtZSB9XHJcbiAgICAgICAgbWF0ZXJpYWxNYXBbbWF0ZXJpYWwudXVpZF0ucnZzLnB1c2gocnYpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgZm9yIChjb25zdCBrIGluIG1hdGVyaWFsTWFwKSB7XHJcbiAgICAgIHRoaXMudmlld2VyXHJcbiAgICAgICAgLmdldFJlbmRlcmVyKClcclxuICAgICAgICAuc2V0TWF0ZXJpYWwoXHJcbiAgICAgICAgICBtYXRlcmlhbE1hcFtrXS5ydnMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1hdGVyaWFsc1ttYXRlcmlhbE1hcFtrXS5ydnNbMF0uZ3VpZF1cclxuICAgICAgICApXHJcbiAgICAgIG1hdGVyaWFsTWFwW2tdLnJ2cy5mb3JFYWNoKChydjogTm9kZVJlbmRlclZpZXcpID0+IHtcclxuICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3Rpb25SdnNbcnYuZ3VpZF1cclxuICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3Rpb25NYXRlcmlhbHNbcnYuZ3VpZF1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhcHBseUhvdmVyKHJlbmRlclZpZXc6IE5vZGVSZW5kZXJWaWV3IHwgbnVsbCkge1xyXG4gICAgdGhpcy5yZW1vdmVIb3ZlcigpXHJcblxyXG4gICAgaWYgKCFyZW5kZXJWaWV3KSByZXR1cm5cclxuICAgIGlmICh0aGlzLnNlbGVjdGlvblJ2c1tyZW5kZXJWaWV3Lmd1aWRdKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW1vdmVIb3ZlcigpXHJcblxyXG4gICAgdGhpcy5ob3ZlclJ2ID0gcmVuZGVyVmlld1xyXG4gICAgdGhpcy5ob3Zlck1hdGVyaWFsID0gdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5nZXRNYXRlcmlhbCh0aGlzLmhvdmVyUnYpIGFzIE1hdGVyaWFsXHJcbiAgICB0aGlzLnZpZXdlclxyXG4gICAgICAuZ2V0UmVuZGVyZXIoKVxyXG4gICAgICAuc2V0TWF0ZXJpYWwoXHJcbiAgICAgICAgW3JlbmRlclZpZXddLFxyXG4gICAgICAgIE1hdGVyaWFscy5pc1RyYW5zcGFyZW50KHRoaXMuaG92ZXJNYXRlcmlhbClcclxuICAgICAgICAgID8gdGhpcy50cmFuc3BhcmVudEhvdmVyTWF0ZXJpYWxEYXRhXHJcbiAgICAgICAgICA6IHRoaXMuaG92ZXJNYXRlcmlhbERhdGFcclxuICAgICAgKVxyXG5cclxuICAgIHRoaXMudmlld2VyLnJlcXVlc3RSZW5kZXIoKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlbW92ZUhvdmVyKCkge1xyXG4gICAgaWYgKHRoaXMuaG92ZXJSdiAmJiB0aGlzLmhvdmVyTWF0ZXJpYWwpXHJcbiAgICAgIHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkuc2V0TWF0ZXJpYWwoW3RoaXMuaG92ZXJSdl0sIHRoaXMuaG92ZXJNYXRlcmlhbClcclxuICAgIHRoaXMuaG92ZXJSdiA9IG51bGxcclxuICAgIHRoaXMuaG92ZXJNYXRlcmlhbCA9IG51bGxcclxuICAgIHRoaXMudmlld2VyLnJlcXVlc3RSZW5kZXIoKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBFdmVudERpc3BhdGNoZXIgfSBmcm9tICd0aHJlZSdcclxuLyoqXHJcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNvbnRyb2xzLlxyXG4gKlxyXG4gKiBAYWJzdHJhY3RcclxuICogQGF1Z21lbnRzIEV2ZW50RGlzcGF0Y2hlclxyXG4gKi9cclxuY2xhc3MgQ29udHJvbHMgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgY29udHJvbHMgaW5zdGFuY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdDNEfSBvYmplY3QgLSBUaGUgb2JqZWN0IHRoYXQgaXMgbWFuYWdlZCBieSB0aGUgY29udHJvbHMuXHJcbiAgICogQHBhcmFtIHs/SFRNTERPTUVsZW1lbnR9IGRvbUVsZW1lbnQgLSBUaGUgSFRNTCBlbGVtZW50IHVzZWQgZm9yIGV2ZW50IGxpc3RlbmVycy5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvYmplY3QsIGRvbUVsZW1lbnQgPSBudWxsKSB7XHJcbiAgICBzdXBlcigpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb2JqZWN0IHRoYXQgaXMgbWFuYWdlZCBieSB0aGUgY29udHJvbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge09iamVjdDNEfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIEhUTUwgZWxlbWVudCB1c2VkIGZvciBldmVudCBsaXN0ZW5lcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUgez9IVE1MRE9NRWxlbWVudH1cclxuICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAqL1xyXG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9tRWxlbWVudFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgY29udHJvbHMgcmVzcG9uZHMgdG8gdXNlciBpbnB1dCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKi9cclxuICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29udHJvbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IC0xXHJcbiAgICAgKi9cclxuICAgIHRoaXMuc3RhdGUgPSAtMVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBvYmplY3QgZGVmaW5lcyB0aGUga2V5Ym9hcmQgaW5wdXQgb2YgdGhlIGNvbnRyb2xzLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIHRoaXMua2V5cyA9IHt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG9iamVjdCBkZWZpbmVzIHdoYXQgdHlwZSBvZiBhY3Rpb25zIGFyZSBhc3NpZ25lZCB0byB0aGUgYXZhaWxhYmxlIG1vdXNlIGJ1dHRvbnMuXHJcbiAgICAgKiBJdCBkZXBlbmRzIG9uIHRoZSBjb250cm9sIGltcGxlbWVudGF0aW9uIHdoYXQga2luZCBvZiBtb3VzZSBidXR0b25zIGFuZCBhY3Rpb25zIGFyZSBzdXBwb3J0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge3tMRUZUOiA/bnVtYmVyLCBNSURETEU6ID9udW1iZXIsIFJJR0hUOiA/bnVtYmVyfX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5tb3VzZUJ1dHRvbnMgPSB7IExFRlQ6IG51bGwsIE1JRERMRTogbnVsbCwgUklHSFQ6IG51bGwgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBvYmplY3QgZGVmaW5lcyB3aGF0IHR5cGUgb2YgYWN0aW9ucyBhcmUgYXNzaWduZWQgdG8gd2hhdCBraW5kIG9mIHRvdWNoIGludGVyYWN0aW9uLlxyXG4gICAgICogSXQgZGVwZW5kcyBvbiB0aGUgY29udHJvbCBpbXBsZW1lbnRhdGlvbiB3aGF0IGtpbmQgb2YgdG91Y2ggaW50ZXJhY3Rpb24gYW5kIGFjdGlvbnMgYXJlIHN1cHBvcnRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7e09ORTogP251bWJlciwgVFdPOiA/bnVtYmVyfX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50b3VjaGVzID0geyBPTkU6IG51bGwsIFRXTzogbnVsbCB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25uZWN0cyB0aGUgY29udHJvbHMgdG8gdGhlIERPTS4gVGhpcyBtZXRob2QgaGFzIHNvIGNhbGxlZCBcInNpZGUgZWZmZWN0c1wiIHNpbmNlXHJcbiAgICogaXQgYWRkcyB0aGUgbW9kdWxlJ3MgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBET00uXHJcbiAgICovXHJcbiAgY29ubmVjdCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc2Nvbm5lY3RzIHRoZSBjb250cm9scyBmcm9tIHRoZSBET00uXHJcbiAgICovXHJcbiAgZGlzY29ubmVjdCgpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGwgdGhpcyBtZXRob2QgaWYgeW91IG5vIGxvbmdlciB3YW50IHVzZSB0byB0aGUgY29udHJvbHMuIEl0IGZyZWVzIGFsbCBpbnRlcm5hbFxyXG4gICAqIHJlc291cmNlcyBhbmQgcmVtb3ZlcyBhbGwgZXZlbnQgbGlzdGVuZXJzLlxyXG4gICAqL1xyXG4gIGRpc3Bvc2UoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDb250cm9scyBzaG91bGQgaW1wbGVtZW50IHRoaXMgbWV0aG9kIGlmIHRoZXkgaGF2ZSB0byB1cGRhdGUgdGhlaXIgaW50ZXJuYWwgc3RhdGVcclxuICAgKiBwZXIgc2ltdWxhdGlvbiBzdGVwLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YV0gLSBUaGUgdGltZSBkZWx0YSBpbiBzZWNvbmRzLlxyXG4gICAqL1xyXG4gIHVwZGF0ZSgvKiBkZWx0YSAqLykge31cclxufVxyXG5cclxuZXhwb3J0IHsgQ29udHJvbHMgfVxyXG4iLCJpbXBvcnQge1xyXG4gIEJveEdlb21ldHJ5LFxyXG4gIEJ1ZmZlckdlb21ldHJ5LFxyXG4gIEN5bGluZGVyR2VvbWV0cnksXHJcbiAgRG91YmxlU2lkZSxcclxuICBFdWxlcixcclxuICBGbG9hdDMyQnVmZmVyQXR0cmlidXRlLFxyXG4gIExpbmUsXHJcbiAgTGluZUJhc2ljTWF0ZXJpYWwsXHJcbiAgTWF0cml4NCxcclxuICBNZXNoLFxyXG4gIE1lc2hCYXNpY01hdGVyaWFsLFxyXG4gIE9iamVjdDNELFxyXG4gIE9jdGFoZWRyb25HZW9tZXRyeSxcclxuICBQbGFuZUdlb21ldHJ5LFxyXG4gIFF1YXRlcm5pb24sXHJcbiAgUmF5Y2FzdGVyLFxyXG4gIFNwaGVyZUdlb21ldHJ5LFxyXG4gIFRvcnVzR2VvbWV0cnksXHJcbiAgVmVjdG9yM1xyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBDb250cm9scyB9IGZyb20gJy4vQ29udHJvbHMuanMnXHJcbmNvbnN0IF9yYXljYXN0ZXIgPSBuZXcgUmF5Y2FzdGVyKClcclxuXHJcbmNvbnN0IF90ZW1wVmVjdG9yID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfdGVtcFZlY3RvcjIgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF90ZW1wUXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKClcclxuY29uc3QgX3VuaXQgPSB7XHJcbiAgWDogbmV3IFZlY3RvcjMoMSwgMCwgMCksXHJcbiAgWTogbmV3IFZlY3RvcjMoMCwgMSwgMCksXHJcbiAgWjogbmV3IFZlY3RvcjMoMCwgMCwgMSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEZpcmVzIGlmIGFueSB0eXBlIG9mIGNoYW5nZSAob2JqZWN0IG9yIHByb3BlcnR5IGNoYW5nZSkgaXMgcGVyZm9ybWVkLiBQcm9wZXJ0eSBjaGFuZ2VzXHJcbiAqIGFyZSBzZXBhcmF0ZSBldmVudHMgeW91IGNhbiBhZGQgZXZlbnQgbGlzdGVuZXJzIHRvLiBUaGUgZXZlbnQgdHlwZSBpcyBcInByb3BlcnR5bmFtZS1jaGFuZ2VkXCIuXHJcbiAqXHJcbiAqIEBldmVudCBUcmFuc2Zvcm1Db250cm9scyNjaGFuZ2VcclxuICogQHR5cGUge09iamVjdH1cclxuICovXHJcbmNvbnN0IF9jaGFuZ2VFdmVudCA9IHsgdHlwZTogJ2NoYW5nZScgfVxyXG5cclxuLyoqXHJcbiAqIEZpcmVzIGlmIGEgcG9pbnRlciAobW91c2UvdG91Y2gpIGJlY29tZXMgYWN0aXZlLlxyXG4gKlxyXG4gKiBAZXZlbnQgVHJhbnNmb3JtQ29udHJvbHMjbW91c2VEb3duXHJcbiAqIEB0eXBlIHtPYmplY3R9XHJcbiAqL1xyXG5jb25zdCBfbW91c2VEb3duRXZlbnQgPSB7IHR5cGU6ICdtb3VzZURvd24nLCBtb2RlOiBudWxsIH1cclxuXHJcbi8qKlxyXG4gKiBGaXJlcyBpZiBhIHBvaW50ZXIgKG1vdXNlL3RvdWNoKSBpcyBubyBsb25nZXIgYWN0aXZlLlxyXG4gKlxyXG4gKiBAZXZlbnQgVHJhbnNmb3JtQ29udHJvbHMjbW91c2VVcFxyXG4gKiBAdHlwZSB7T2JqZWN0fVxyXG4gKi9cclxuY29uc3QgX21vdXNlVXBFdmVudCA9IHsgdHlwZTogJ21vdXNlVXAnLCBtb2RlOiBudWxsIH1cclxuXHJcbi8qKlxyXG4gKiBGaXJlcyBpZiB0aGUgY29udHJvbGxlZCAzRCBvYmplY3QgaXMgY2hhbmdlZC5cclxuICpcclxuICogQGV2ZW50IFRyYW5zZm9ybUNvbnRyb2xzI29iamVjdENoYW5nZVxyXG4gKiBAdHlwZSB7T2JqZWN0fVxyXG4gKi9cclxuY29uc3QgX29iamVjdENoYW5nZUV2ZW50ID0geyB0eXBlOiAnb2JqZWN0Q2hhbmdlJyB9XHJcblxyXG4vKipcclxuICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byB0cmFuc2Zvcm0gb2JqZWN0cyBpbiAzRCBzcGFjZSBieSBhZGFwdGluZyBhIHNpbWlsYXIgaW50ZXJhY3Rpb24gbW9kZWxcclxuICogb2YgRENDIHRvb2xzIGxpa2UgQmxlbmRlci4gVW5saWtlIG90aGVyIGNvbnRyb2xzLCBpdCBpcyBub3QgaW50ZW5kZWQgdG8gdHJhbnNmb3JtIHRoZSBzY2VuZSdzIGNhbWVyYS5cclxuICpcclxuICogYFRyYW5zZm9ybUNvbnRyb2xzYCBleHBlY3RzIHRoYXQgaXRzIGF0dGFjaGVkIDNEIG9iamVjdCBpcyBwYXJ0IG9mIHRoZSBzY2VuZSBncmFwaC5cclxuICpcclxuICogQGF1Z21lbnRzIENvbnRyb2xzXHJcbiAqL1xyXG5jbGFzcyBUcmFuc2Zvcm1Db250cm9scyBleHRlbmRzIENvbnRyb2xzIHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGNvbnRyb2xzIGluc3RhbmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDYW1lcmF9IGNhbWVyYSAtIFRoZSBjYW1lcmEgb2YgdGhlIHJlbmRlcmVkIHNjZW5lLlxyXG4gICAqIEBwYXJhbSB7P0hUTUxET01FbGVtZW50fSBkb21FbGVtZW50IC0gVGhlIEhUTUwgZWxlbWVudCB1c2VkIGZvciBldmVudCBsaXN0ZW5lcnMuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoY2FtZXJhLCBkb21FbGVtZW50ID0gbnVsbCkge1xyXG4gICAgc3VwZXIodW5kZWZpbmVkLCBkb21FbGVtZW50KVxyXG5cclxuICAgIGNvbnN0IHJvb3QgPSBuZXcgVHJhbnNmb3JtQ29udHJvbHNSb290KHRoaXMpXHJcbiAgICB0aGlzLl9yb290ID0gcm9vdFxyXG5cclxuICAgIGNvbnN0IGdpem1vID0gbmV3IFRyYW5zZm9ybUNvbnRyb2xzR2l6bW8oKVxyXG4gICAgdGhpcy5fZ2l6bW8gPSBnaXptb1xyXG4gICAgcm9vdC5hZGQoZ2l6bW8pXHJcblxyXG4gICAgY29uc3QgcGxhbmUgPSBuZXcgVHJhbnNmb3JtQ29udHJvbHNQbGFuZSgpXHJcbiAgICB0aGlzLl9wbGFuZSA9IHBsYW5lXHJcbiAgICByb290LmFkZChwbGFuZSlcclxuXHJcbiAgICBjb25zdCBzY29wZSA9IHRoaXNcclxuXHJcbiAgICB0aGlzLl9kb05vdFBpY2sgPSBmYWxzZVxyXG5cclxuICAgIC8vIERlZmluZWQgZ2V0dGVyLCBzZXR0ZXIgYW5kIHN0b3JlIGZvciBhIHByb3BlcnR5XHJcbiAgICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShwcm9wTmFtZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgIGxldCBwcm9wVmFsdWUgPSBkZWZhdWx0VmFsdWVcclxuXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzY29wZSwgcHJvcE5hbWUsIHtcclxuICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlICE9PSB1bmRlZmluZWQgPyBwcm9wVmFsdWUgOiBkZWZhdWx0VmFsdWVcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXQodmFsdWUpIHtcclxuICAgICAgICAgIGlmIChwcm9wVmFsdWUgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHByb3BWYWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgIHBsYW5lW3Byb3BOYW1lXSA9IHZhbHVlXHJcbiAgICAgICAgICAgIGdpem1vW3Byb3BOYW1lXSA9IHZhbHVlXHJcblxyXG4gICAgICAgICAgICBzY29wZS5kaXNwYXRjaEV2ZW50KHsgdHlwZTogcHJvcE5hbWUgKyAnLWNoYW5nZWQnLCB2YWx1ZSB9KVxyXG4gICAgICAgICAgICBzY29wZS5kaXNwYXRjaEV2ZW50KF9jaGFuZ2VFdmVudClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBzY29wZVtwcm9wTmFtZV0gPSBkZWZhdWx0VmFsdWVcclxuICAgICAgcGxhbmVbcHJvcE5hbWVdID0gZGVmYXVsdFZhbHVlXHJcbiAgICAgIGdpem1vW3Byb3BOYW1lXSA9IGRlZmF1bHRWYWx1ZVxyXG4gICAgfVxyXG5cclxuICAgIC8vIERlZmluZSBwcm9wZXJ0aWVzIHdpdGggZ2V0dGVycy9zZXR0ZXJcclxuICAgIC8vIFNldHRpbmcgdGhlIGRlZmluZWQgcHJvcGVydHkgd2lsbCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgY2hhbmdlIGV2ZW50XHJcbiAgICAvLyBEZWZpbmVkIHByb3BlcnRpZXMgYXJlIHBhc3NlZCBkb3duIHRvIGdpem1vIGFuZCBwbGFuZVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNhbWVyYSBvZiB0aGUgcmVuZGVyZWQgc2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgVHJhbnNmb3JtQ29udHJvbHMjY2FtZXJhXHJcbiAgICAgKiBAdHlwZSB7Q2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgnY2FtZXJhJywgY2FtZXJhKVxyXG4gICAgZGVmaW5lUHJvcGVydHkoJ29iamVjdCcsIHVuZGVmaW5lZClcclxuICAgIGRlZmluZVByb3BlcnR5KCdlbmFibGVkJywgdHJ1ZSlcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGF4aXMuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgVHJhbnNmb3JtQ29udHJvbHMjYXhpc1xyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkoJ2F4aXMnLCBudWxsKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXhpcy5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBUcmFuc2Zvcm1Db250cm9scyNtb2RlXHJcbiAgICAgKiBAdHlwZSB7KCd0cmFuc2xhdGUnfCdyb3RhdGUnfCdzY2FsZScpfVxyXG4gICAgICogQGRlZmF1bHQgJ3RyYW5zbGF0ZSdcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkoJ21vZGUnLCAndHJhbnNsYXRlJylcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ5IGRlZmF1bHQsIDNEIG9iamVjdHMgYXJlIGNvbnRpbnVvdXNseSB0cmFuc2xhdGVkLiBJZiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkgdG8gYSBudW1lcmljXHJcbiAgICAgKiB2YWx1ZSAod29ybGQgdW5pdHMpLCB5b3UgY2FuIGRlZmluZSBpbiB3aGljaCBzdGVwcyB0aGUgM0Qgb2JqZWN0IHNob3VsZCBiZSB0cmFuc2xhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFRyYW5zZm9ybUNvbnRyb2xzI3RyYW5zbGF0aW9uU25hcFxyXG4gICAgICogQHR5cGUgez9udW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KCd0cmFuc2xhdGlvblNuYXAnLCBudWxsKVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnkgZGVmYXVsdCwgM0Qgb2JqZWN0cyBhcmUgY29udGludW91c2x5IHJvdGF0ZWQuIElmIHlvdSBzZXQgdGhpcyBwcm9wZXJ0eSB0byBhIG51bWVyaWNcclxuICAgICAqIHZhbHVlIChyYWRpYW5zKSwgeW91IGNhbiBkZWZpbmUgaW4gd2hpY2ggc3RlcHMgdGhlIDNEIG9iamVjdCBzaG91bGQgYmUgcm90YXRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBUcmFuc2Zvcm1Db250cm9scyNyb3RhdGlvblNuYXBcclxuICAgICAqIEB0eXBlIHs/bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgncm90YXRpb25TbmFwJywgbnVsbClcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ5IGRlZmF1bHQsIDNEIG9iamVjdHMgYXJlIGNvbnRpbnVvdXNseSBzY2FsZWQuIElmIHlvdSBzZXQgdGhpcyBwcm9wZXJ0eSB0byBhIG51bWVyaWNcclxuICAgICAqIHZhbHVlLCB5b3UgY2FuIGRlZmluZSBpbiB3aGljaCBzdGVwcyB0aGUgM0Qgb2JqZWN0IHNob3VsZCBiZSBzY2FsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgVHJhbnNmb3JtQ29udHJvbHMjc2NhbGVTbmFwXHJcbiAgICAgKiBAdHlwZSB7P251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkoJ3NjYWxlU25hcCcsIG51bGwpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIGluIHdoaWNoIGNvb3JkaW5hdGUgc3BhY2UgdHJhbnNmb3JtYXRpb25zIHNob3VsZCBiZSBwZXJmb3JtZWQuXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgVHJhbnNmb3JtQ29udHJvbHMjc3BhY2VcclxuICAgICAqIEB0eXBlIHsoJ3dvcmxkJ3wnbG9jYWwnKX1cclxuICAgICAqIEBkZWZhdWx0ICd3b3JsZCdcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkoJ3NwYWNlJywgJ3dvcmxkJylcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBoZWxwZXIgVUkgKGF4ZXMvcGxhbmVzKS5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBUcmFuc2Zvcm1Db250cm9scyNzaXplXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgMVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgnc2l6ZScsIDEpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIGRyYWdnaW5nIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFRyYW5zZm9ybUNvbnRyb2xzI2RyYWdnaW5nXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkoJ2RyYWdnaW5nJywgZmFsc2UpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSB4LWF4aXMgaGVscGVyIHNob3VsZCBiZSB2aXNpYmxlIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBUcmFuc2Zvcm1Db250cm9scyNzaG93WFxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KCdzaG93WCcsIHRydWUpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSB5LWF4aXMgaGVscGVyIHNob3VsZCBiZSB2aXNpYmxlIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBUcmFuc2Zvcm1Db250cm9scyNzaG93WVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KCdzaG93WScsIHRydWUpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSB6LWF4aXMgaGVscGVyIHNob3VsZCBiZSB2aXNpYmxlIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBUcmFuc2Zvcm1Db250cm9scyNzaG93WlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KCdzaG93WicsIHRydWUpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWluaW11bSBhbGxvd2VkIFggcG9zaXRpb24gZHVyaW5nIHRyYW5zbGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFRyYW5zZm9ybUNvbnRyb2xzI21pblhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCAtSW5maW5pdHlcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkoJ21pblgnLCAtSW5maW5pdHkpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWF4aW11bSBhbGxvd2VkIFggcG9zaXRpb24gZHVyaW5nIHRyYW5zbGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIFRyYW5zZm9ybUNvbnRyb2xzI21heFhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCBJbmZpbml0eVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgnbWF4WCcsIEluZmluaXR5KVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1pbmltdW0gYWxsb3dlZCB5IHBvc2l0aW9uIGR1cmluZyB0cmFuc2xhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBUcmFuc2Zvcm1Db250cm9scyNtaW5ZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgLUluZmluaXR5XHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KCdtaW5ZJywgLUluZmluaXR5KVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1heGltdW0gYWxsb3dlZCBZIHBvc2l0aW9uIGR1cmluZyB0cmFuc2xhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAbmFtZSBUcmFuc2Zvcm1Db250cm9scyNtYXhZXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQGRlZmF1bHQgSW5maW5pdHlcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkoJ21heFknLCBJbmZpbml0eSlcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtaW5pbXVtIGFsbG93ZWQgeiBwb3NpdGlvbiBkdXJpbmcgdHJhbnNsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgVHJhbnNmb3JtQ29udHJvbHMjbWluWlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IC1JbmZpbml0eVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgnbWluWicsIC1JbmZpbml0eSlcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYXhpbXVtIGFsbG93ZWQgWiBwb3NpdGlvbiBkdXJpbmcgdHJhbnNsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgVHJhbnNmb3JtQ29udHJvbHMjbWF4WlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IEluZmluaXR5XHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KCdtYXhaJywgSW5maW5pdHkpXHJcblxyXG4gICAgLy8gUmV1c2FibGUgdXRpbGl0eSB2YXJpYWJsZXNcclxuXHJcbiAgICBjb25zdCB3b3JsZFBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgY29uc3Qgd29ybGRQb3NpdGlvblN0YXJ0ID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgY29uc3Qgd29ybGRRdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKVxyXG4gICAgY29uc3Qgd29ybGRRdWF0ZXJuaW9uU3RhcnQgPSBuZXcgUXVhdGVybmlvbigpXHJcbiAgICBjb25zdCBjYW1lcmFQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKClcclxuICAgIGNvbnN0IGNhbWVyYVF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpXHJcbiAgICBjb25zdCBwb2ludFN0YXJ0ID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgY29uc3QgcG9pbnRFbmQgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBjb25zdCByb3RhdGlvbkF4aXMgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBjb25zdCByb3RhdGlvbkFuZ2xlID0gMFxyXG4gICAgY29uc3QgZXllID0gbmV3IFZlY3RvcjMoKVxyXG5cclxuICAgIC8vIFRPRE86IHJlbW92ZSBwcm9wZXJ0aWVzIHVudXNlZCBpbiBwbGFuZSBhbmQgZ2l6bW9cclxuXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgnd29ybGRQb3NpdGlvbicsIHdvcmxkUG9zaXRpb24pXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgnd29ybGRQb3NpdGlvblN0YXJ0Jywgd29ybGRQb3NpdGlvblN0YXJ0KVxyXG4gICAgZGVmaW5lUHJvcGVydHkoJ3dvcmxkUXVhdGVybmlvbicsIHdvcmxkUXVhdGVybmlvbilcclxuICAgIGRlZmluZVByb3BlcnR5KCd3b3JsZFF1YXRlcm5pb25TdGFydCcsIHdvcmxkUXVhdGVybmlvblN0YXJ0KVxyXG4gICAgZGVmaW5lUHJvcGVydHkoJ2NhbWVyYVBvc2l0aW9uJywgY2FtZXJhUG9zaXRpb24pXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgnY2FtZXJhUXVhdGVybmlvbicsIGNhbWVyYVF1YXRlcm5pb24pXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgncG9pbnRTdGFydCcsIHBvaW50U3RhcnQpXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgncG9pbnRFbmQnLCBwb2ludEVuZClcclxuICAgIGRlZmluZVByb3BlcnR5KCdyb3RhdGlvbkF4aXMnLCByb3RhdGlvbkF4aXMpXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgncm90YXRpb25BbmdsZScsIHJvdGF0aW9uQW5nbGUpXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSgnZXllJywgZXllKVxyXG5cclxuICAgIHRoaXMuX29mZnNldCA9IG5ldyBWZWN0b3IzKClcclxuICAgIHRoaXMuX3N0YXJ0Tm9ybSA9IG5ldyBWZWN0b3IzKClcclxuICAgIHRoaXMuX2VuZE5vcm0gPSBuZXcgVmVjdG9yMygpXHJcbiAgICB0aGlzLl9jYW1lcmFTY2FsZSA9IG5ldyBWZWN0b3IzKClcclxuXHJcbiAgICB0aGlzLl9wYXJlbnRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKClcclxuICAgIHRoaXMuX3BhcmVudFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpXHJcbiAgICB0aGlzLl9wYXJlbnRRdWF0ZXJuaW9uSW52ID0gbmV3IFF1YXRlcm5pb24oKVxyXG4gICAgdGhpcy5fcGFyZW50U2NhbGUgPSBuZXcgVmVjdG9yMygpXHJcblxyXG4gICAgdGhpcy5fd29ybGRTY2FsZVN0YXJ0ID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgdGhpcy5fd29ybGRRdWF0ZXJuaW9uSW52ID0gbmV3IFF1YXRlcm5pb24oKVxyXG4gICAgdGhpcy5fd29ybGRTY2FsZSA9IG5ldyBWZWN0b3IzKClcclxuXHJcbiAgICB0aGlzLl9wb3NpdGlvblN0YXJ0ID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgdGhpcy5fcXVhdGVybmlvblN0YXJ0ID0gbmV3IFF1YXRlcm5pb24oKVxyXG4gICAgdGhpcy5fc2NhbGVTdGFydCA9IG5ldyBWZWN0b3IzKClcclxuXHJcbiAgICB0aGlzLl9nZXRQb2ludGVyID0gZ2V0UG9pbnRlci5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLl9vblBvaW50ZXJEb3duID0gb25Qb2ludGVyRG93bi5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLl9vblBvaW50ZXJIb3ZlciA9IG9uUG9pbnRlckhvdmVyLmJpbmQodGhpcylcclxuICAgIHRoaXMuX29uUG9pbnRlck1vdmUgPSBvblBvaW50ZXJNb3ZlLmJpbmQodGhpcylcclxuICAgIHRoaXMuX29uUG9pbnRlclVwID0gb25Qb2ludGVyVXAuYmluZCh0aGlzKVxyXG5cclxuICAgIGlmIChkb21FbGVtZW50ICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY29ubmVjdCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25uZWN0KCkge1xyXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5fb25Qb2ludGVyRG93bilcclxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuX29uUG9pbnRlckhvdmVyKVxyXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMuX29uUG9pbnRlclVwKVxyXG5cclxuICAgIHRoaXMuZG9tRWxlbWVudC5zdHlsZS50b3VjaEFjdGlvbiA9ICdub25lJyAvLyBkaXNhYmxlIHRvdWNoIHNjcm9sbFxyXG4gIH1cclxuXHJcbiAgZGlzY29ubmVjdCgpIHtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuX29uUG9pbnRlckRvd24pXHJcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLl9vblBvaW50ZXJIb3ZlcilcclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuX29uUG9pbnRlck1vdmUpXHJcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5fb25Qb2ludGVyVXApXHJcblxyXG4gICAgdGhpcy5kb21FbGVtZW50LnN0eWxlLnRvdWNoQWN0aW9uID0gJ2F1dG8nXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB2aXN1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRyb2xzLiBBZGQgdGhlIGhlbHBlciB0byB5b3VyIHNjZW5lIHRvXHJcbiAgICogdmlzdWFsbHkgdHJhbnNmb3JtIHRoZSBhdHRhY2hlZCAgM0Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7VHJhbnNmb3JtQ29udHJvbHNSb290fSBUaGUgaGVscGVyLlxyXG4gICAqL1xyXG4gIGdldEhlbHBlcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9yb290XHJcbiAgfVxyXG5cclxuICBwb2ludGVySG92ZXIocG9pbnRlcikge1xyXG4gICAgaWYgKHRoaXMuX2RvTm90UGljaykge1xyXG4gICAgICB0aGlzLmF4aXMgPSBudWxsXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZHJhZ2dpbmcgPT09IHRydWUpIHJldHVyblxyXG5cclxuICAgIGlmIChwb2ludGVyICE9PSBudWxsKSBfcmF5Y2FzdGVyLnNldEZyb21DYW1lcmEocG9pbnRlciwgdGhpcy5jYW1lcmEpXHJcblxyXG4gICAgY29uc3QgaW50ZXJzZWN0ID0gaW50ZXJzZWN0T2JqZWN0V2l0aFJheSh0aGlzLl9naXptby5waWNrZXJbdGhpcy5tb2RlXSwgX3JheWNhc3RlcilcclxuXHJcbiAgICBpZiAoaW50ZXJzZWN0KSB7XHJcbiAgICAgIHRoaXMuYXhpcyA9IGludGVyc2VjdC5vYmplY3QubmFtZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5heGlzID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9pbnRlckRvd24ocG9pbnRlcikge1xyXG4gICAgaWYgKHRoaXMuX2RvTm90UGljaykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub2JqZWN0ID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgdGhpcy5kcmFnZ2luZyA9PT0gdHJ1ZSB8fFxyXG4gICAgICAocG9pbnRlciAhPT0gbnVsbCAmJiBwb2ludGVyLmJ1dHRvbiAhPT0gMClcclxuICAgIClcclxuICAgICAgcmV0dXJuXHJcblxyXG4gICAgaWYgKHRoaXMuYXhpcyAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAocG9pbnRlciAhPT0gbnVsbCkgX3JheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHBvaW50ZXIsIHRoaXMuY2FtZXJhKVxyXG5cclxuICAgICAgY29uc3QgcGxhbmVJbnRlcnNlY3QgPSBpbnRlcnNlY3RPYmplY3RXaXRoUmF5KHRoaXMuX3BsYW5lLCBfcmF5Y2FzdGVyLCB0cnVlKVxyXG5cclxuICAgICAgaWYgKHBsYW5lSW50ZXJzZWN0KSB7XHJcbiAgICAgICAgdGhpcy5vYmplY3QudXBkYXRlTWF0cml4V29ybGQoKVxyXG4gICAgICAgIHRoaXMub2JqZWN0LnBhcmVudC51cGRhdGVNYXRyaXhXb3JsZCgpXHJcblxyXG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uU3RhcnQuY29weSh0aGlzLm9iamVjdC5wb3NpdGlvbilcclxuICAgICAgICB0aGlzLl9xdWF0ZXJuaW9uU3RhcnQuY29weSh0aGlzLm9iamVjdC5xdWF0ZXJuaW9uKVxyXG4gICAgICAgIHRoaXMuX3NjYWxlU3RhcnQuY29weSh0aGlzLm9iamVjdC5zY2FsZSlcclxuXHJcbiAgICAgICAgdGhpcy5vYmplY3QubWF0cml4V29ybGQuZGVjb21wb3NlKFxyXG4gICAgICAgICAgdGhpcy53b3JsZFBvc2l0aW9uU3RhcnQsXHJcbiAgICAgICAgICB0aGlzLndvcmxkUXVhdGVybmlvblN0YXJ0LFxyXG4gICAgICAgICAgdGhpcy5fd29ybGRTY2FsZVN0YXJ0XHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICB0aGlzLnBvaW50U3RhcnQuY29weShwbGFuZUludGVyc2VjdC5wb2ludCkuc3ViKHRoaXMud29ybGRQb3NpdGlvblN0YXJ0KVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxyXG4gICAgICBfbW91c2VEb3duRXZlbnQubW9kZSA9IHRoaXMubW9kZVxyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX21vdXNlRG93bkV2ZW50KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9pbnRlck1vdmUocG9pbnRlcikge1xyXG4gICAgaWYgKHRoaXMuX2RvTm90UGljaykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGF4aXMgPSB0aGlzLmF4aXNcclxuICAgIGNvbnN0IG1vZGUgPSB0aGlzLm1vZGVcclxuICAgIGNvbnN0IG9iamVjdCA9IHRoaXMub2JqZWN0XHJcbiAgICBsZXQgc3BhY2UgPSB0aGlzLnNwYWNlXHJcblxyXG4gICAgaWYgKG1vZGUgPT09ICdzY2FsZScpIHtcclxuICAgICAgc3BhY2UgPSAnbG9jYWwnXHJcbiAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICdFJyB8fCBheGlzID09PSAnWFlaRScgfHwgYXhpcyA9PT0gJ1hZWicpIHtcclxuICAgICAgc3BhY2UgPSAnd29ybGQnXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBvYmplY3QgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBheGlzID09PSBudWxsIHx8XHJcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPT09IGZhbHNlIHx8XHJcbiAgICAgIChwb2ludGVyICE9PSBudWxsICYmIHBvaW50ZXIuYnV0dG9uICE9PSAtMSlcclxuICAgIClcclxuICAgICAgcmV0dXJuXHJcblxyXG4gICAgaWYgKHBvaW50ZXIgIT09IG51bGwpIF9yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShwb2ludGVyLCB0aGlzLmNhbWVyYSlcclxuXHJcbiAgICBjb25zdCBwbGFuZUludGVyc2VjdCA9IGludGVyc2VjdE9iamVjdFdpdGhSYXkodGhpcy5fcGxhbmUsIF9yYXljYXN0ZXIsIHRydWUpXHJcblxyXG4gICAgaWYgKCFwbGFuZUludGVyc2VjdCkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5wb2ludEVuZC5jb3B5KHBsYW5lSW50ZXJzZWN0LnBvaW50KS5zdWIodGhpcy53b3JsZFBvc2l0aW9uU3RhcnQpXHJcblxyXG4gICAgaWYgKG1vZGUgPT09ICd0cmFuc2xhdGUnKSB7XHJcbiAgICAgIC8vIEFwcGx5IHRyYW5zbGF0ZVxyXG5cclxuICAgICAgdGhpcy5fb2Zmc2V0LmNvcHkodGhpcy5wb2ludEVuZCkuc3ViKHRoaXMucG9pbnRTdGFydClcclxuXHJcbiAgICAgIGlmIChzcGFjZSA9PT0gJ2xvY2FsJyAmJiBheGlzICE9PSAnWFlaJykge1xyXG4gICAgICAgIHRoaXMuX29mZnNldC5hcHBseVF1YXRlcm5pb24odGhpcy5fd29ybGRRdWF0ZXJuaW9uSW52KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXhpcy5pbmRleE9mKCdYJykgPT09IC0xKSB0aGlzLl9vZmZzZXQueCA9IDBcclxuICAgICAgaWYgKGF4aXMuaW5kZXhPZignWScpID09PSAtMSkgdGhpcy5fb2Zmc2V0LnkgPSAwXHJcbiAgICAgIGlmIChheGlzLmluZGV4T2YoJ1onKSA9PT0gLTEpIHRoaXMuX29mZnNldC56ID0gMFxyXG5cclxuICAgICAgaWYgKHNwYWNlID09PSAnbG9jYWwnICYmIGF4aXMgIT09ICdYWVonKSB7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0LmFwcGx5UXVhdGVybmlvbih0aGlzLl9xdWF0ZXJuaW9uU3RhcnQpLmRpdmlkZSh0aGlzLl9wYXJlbnRTY2FsZSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9vZmZzZXRcclxuICAgICAgICAgIC5hcHBseVF1YXRlcm5pb24odGhpcy5fcGFyZW50UXVhdGVybmlvbkludilcclxuICAgICAgICAgIC5kaXZpZGUodGhpcy5fcGFyZW50U2NhbGUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9iamVjdC5wb3NpdGlvbi5jb3B5KHRoaXMuX29mZnNldCkuYWRkKHRoaXMuX3Bvc2l0aW9uU3RhcnQpXHJcblxyXG4gICAgICAvLyBBcHBseSB0cmFuc2xhdGlvbiBzbmFwXHJcblxyXG4gICAgICBpZiAodGhpcy50cmFuc2xhdGlvblNuYXApIHtcclxuICAgICAgICBpZiAoc3BhY2UgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICAgIG9iamVjdC5wb3NpdGlvbi5hcHBseVF1YXRlcm5pb24oXHJcbiAgICAgICAgICAgIF90ZW1wUXVhdGVybmlvbi5jb3B5KHRoaXMuX3F1YXRlcm5pb25TdGFydCkuaW52ZXJ0KClcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICBpZiAoYXhpcy5zZWFyY2goJ1gnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgb2JqZWN0LnBvc2l0aW9uLnggPVxyXG4gICAgICAgICAgICAgIE1hdGgucm91bmQob2JqZWN0LnBvc2l0aW9uLnggLyB0aGlzLnRyYW5zbGF0aW9uU25hcCkgKlxyXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TbmFwXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGF4aXMuc2VhcmNoKCdZJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC5wb3NpdGlvbi55ID1cclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKG9iamVjdC5wb3NpdGlvbi55IC8gdGhpcy50cmFuc2xhdGlvblNuYXApICpcclxuICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU25hcFxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChheGlzLnNlYXJjaCgnWicpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBvYmplY3QucG9zaXRpb24ueiA9XHJcbiAgICAgICAgICAgICAgTWF0aC5yb3VuZChvYmplY3QucG9zaXRpb24ueiAvIHRoaXMudHJhbnNsYXRpb25TbmFwKSAqXHJcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvblNuYXBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBvYmplY3QucG9zaXRpb24uYXBwbHlRdWF0ZXJuaW9uKHRoaXMuX3F1YXRlcm5pb25TdGFydClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcGFjZSA9PT0gJ3dvcmxkJykge1xyXG4gICAgICAgICAgaWYgKG9iamVjdC5wYXJlbnQpIHtcclxuICAgICAgICAgICAgb2JqZWN0LnBvc2l0aW9uLmFkZChcclxuICAgICAgICAgICAgICBfdGVtcFZlY3Rvci5zZXRGcm9tTWF0cml4UG9zaXRpb24ob2JqZWN0LnBhcmVudC5tYXRyaXhXb3JsZClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChheGlzLnNlYXJjaCgnWCcpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBvYmplY3QucG9zaXRpb24ueCA9XHJcbiAgICAgICAgICAgICAgTWF0aC5yb3VuZChvYmplY3QucG9zaXRpb24ueCAvIHRoaXMudHJhbnNsYXRpb25TbmFwKSAqXHJcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvblNuYXBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoYXhpcy5zZWFyY2goJ1knKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgb2JqZWN0LnBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAgIE1hdGgucm91bmQob2JqZWN0LnBvc2l0aW9uLnkgLyB0aGlzLnRyYW5zbGF0aW9uU25hcCkgKlxyXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TbmFwXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGF4aXMuc2VhcmNoKCdaJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC5wb3NpdGlvbi56ID1cclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKG9iamVjdC5wb3NpdGlvbi56IC8gdGhpcy50cmFuc2xhdGlvblNuYXApICpcclxuICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU25hcFxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChvYmplY3QucGFyZW50KSB7XHJcbiAgICAgICAgICAgIG9iamVjdC5wb3NpdGlvbi5zdWIoXHJcbiAgICAgICAgICAgICAgX3RlbXBWZWN0b3Iuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG9iamVjdC5wYXJlbnQubWF0cml4V29ybGQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9iamVjdC5wb3NpdGlvbi54ID0gTWF0aC5tYXgodGhpcy5taW5YLCBNYXRoLm1pbih0aGlzLm1heFgsIG9iamVjdC5wb3NpdGlvbi54KSlcclxuICAgICAgb2JqZWN0LnBvc2l0aW9uLnkgPSBNYXRoLm1heCh0aGlzLm1pblksIE1hdGgubWluKHRoaXMubWF4WSwgb2JqZWN0LnBvc2l0aW9uLnkpKVxyXG4gICAgICBvYmplY3QucG9zaXRpb24ueiA9IE1hdGgubWF4KHRoaXMubWluWiwgTWF0aC5taW4odGhpcy5tYXhaLCBvYmplY3QucG9zaXRpb24ueikpXHJcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdzY2FsZScpIHtcclxuICAgICAgaWYgKGF4aXMuc2VhcmNoKCdYWVonKSAhPT0gLTEpIHtcclxuICAgICAgICBsZXQgZCA9IHRoaXMucG9pbnRFbmQubGVuZ3RoKCkgLyB0aGlzLnBvaW50U3RhcnQubGVuZ3RoKClcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucG9pbnRFbmQuZG90KHRoaXMucG9pbnRTdGFydCkgPCAwKSBkICo9IC0xXHJcblxyXG4gICAgICAgIF90ZW1wVmVjdG9yMi5zZXQoZCwgZCwgZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBfdGVtcFZlY3Rvci5jb3B5KHRoaXMucG9pbnRTdGFydClcclxuICAgICAgICBfdGVtcFZlY3RvcjIuY29weSh0aGlzLnBvaW50RW5kKVxyXG5cclxuICAgICAgICBfdGVtcFZlY3Rvci5hcHBseVF1YXRlcm5pb24odGhpcy5fd29ybGRRdWF0ZXJuaW9uSW52KVxyXG4gICAgICAgIF90ZW1wVmVjdG9yMi5hcHBseVF1YXRlcm5pb24odGhpcy5fd29ybGRRdWF0ZXJuaW9uSW52KVxyXG5cclxuICAgICAgICAvKiogQ2hhbmdlZCBmcm9tIGRpdmlkZS4gTmVlZCBsaW5lYXIgbW92ZW1lbnQgKi9cclxuICAgICAgICBfdGVtcFZlY3RvcjIuc3ViKF90ZW1wVmVjdG9yKVxyXG5cclxuICAgICAgICBpZiAoYXhpcy5zZWFyY2goJ1gnKSA9PT0gLTEpIHtcclxuICAgICAgICAgIF90ZW1wVmVjdG9yMi54ID0gMFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGF4aXMuc2VhcmNoKCdZJykgPT09IC0xKSB7XHJcbiAgICAgICAgICBfdGVtcFZlY3RvcjIueSA9IDBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChheGlzLnNlYXJjaCgnWicpID09PSAtMSkge1xyXG4gICAgICAgICAgX3RlbXBWZWN0b3IyLnogPSAwXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIEFwcGx5IHNjYWxlXHJcbiAgICAgIC8qKiBDaGFuZ2VkIGZyb20gbXVsdGlwbHkuIE5lZWRzIGxpbmVhciBtb3ZlbWVudC4gQWxzbyBzY2FsZSBpcyBhcHBsaWVkIGJpbGF0ZXJhbGx5LCBzbyB3ZSBkaXZpZGUgYnkgMiAqL1xyXG4gICAgICBvYmplY3Quc2NhbGUuY29weSh0aGlzLl9zY2FsZVN0YXJ0KS5hZGQoX3RlbXBWZWN0b3IyLm11bHRpcGx5U2NhbGFyKDAuNSkpXHJcblxyXG4gICAgICBpZiAodGhpcy5zY2FsZVNuYXApIHtcclxuICAgICAgICBpZiAoYXhpcy5zZWFyY2goJ1gnKSAhPT0gLTEpIHtcclxuICAgICAgICAgIG9iamVjdC5zY2FsZS54ID1cclxuICAgICAgICAgICAgTWF0aC5yb3VuZChvYmplY3Quc2NhbGUueCAvIHRoaXMuc2NhbGVTbmFwKSAqIHRoaXMuc2NhbGVTbmFwIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVTbmFwXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXhpcy5zZWFyY2goJ1knKSAhPT0gLTEpIHtcclxuICAgICAgICAgIG9iamVjdC5zY2FsZS55ID1cclxuICAgICAgICAgICAgTWF0aC5yb3VuZChvYmplY3Quc2NhbGUueSAvIHRoaXMuc2NhbGVTbmFwKSAqIHRoaXMuc2NhbGVTbmFwIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVTbmFwXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXhpcy5zZWFyY2goJ1onKSAhPT0gLTEpIHtcclxuICAgICAgICAgIG9iamVjdC5zY2FsZS56ID1cclxuICAgICAgICAgICAgTWF0aC5yb3VuZChvYmplY3Quc2NhbGUueiAvIHRoaXMuc2NhbGVTbmFwKSAqIHRoaXMuc2NhbGVTbmFwIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbGVTbmFwXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdyb3RhdGUnKSB7XHJcbiAgICAgIHRoaXMuX29mZnNldC5jb3B5KHRoaXMucG9pbnRFbmQpLnN1Yih0aGlzLnBvaW50U3RhcnQpXHJcblxyXG4gICAgICBjb25zdCBST1RBVElPTl9TUEVFRCA9XHJcbiAgICAgICAgMjAgL1xyXG4gICAgICAgIHRoaXMud29ybGRQb3NpdGlvbi5kaXN0YW5jZVRvKFxyXG4gICAgICAgICAgX3RlbXBWZWN0b3Iuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMuY2FtZXJhLm1hdHJpeFdvcmxkKVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgIGxldCBfaW5QbGFuZVJvdGF0aW9uID0gZmFsc2VcclxuXHJcbiAgICAgIGlmIChheGlzID09PSAnWFlaRScpIHtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uQXhpcy5jb3B5KHRoaXMuX29mZnNldCkuY3Jvc3ModGhpcy5leWUpLm5vcm1hbGl6ZSgpXHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbkFuZ2xlID1cclxuICAgICAgICAgIHRoaXMuX29mZnNldC5kb3QoX3RlbXBWZWN0b3IuY29weSh0aGlzLnJvdGF0aW9uQXhpcykuY3Jvc3ModGhpcy5leWUpKSAqXHJcbiAgICAgICAgICBST1RBVElPTl9TUEVFRFxyXG4gICAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICdYJyB8fCBheGlzID09PSAnWScgfHwgYXhpcyA9PT0gJ1onKSB7XHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbkF4aXMuY29weShfdW5pdFtheGlzXSlcclxuXHJcbiAgICAgICAgX3RlbXBWZWN0b3IuY29weShfdW5pdFtheGlzXSlcclxuXHJcbiAgICAgICAgaWYgKHNwYWNlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgICAgICBfdGVtcFZlY3Rvci5hcHBseVF1YXRlcm5pb24odGhpcy53b3JsZFF1YXRlcm5pb24pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfdGVtcFZlY3Rvci5jcm9zcyh0aGlzLmV5ZSlcclxuXHJcbiAgICAgICAgLy8gV2hlbiBfdGVtcFZlY3RvciBpcyAwIGFmdGVyIGNyb3NzIHdpdGggdGhpcy5leWUgdGhlIHZlY3RvcnMgYXJlIHBhcmFsbGVsIGFuZCBzaG91bGQgdXNlIGluLXBsYW5lIHJvdGF0aW9uIGxvZ2ljLlxyXG4gICAgICAgIGlmIChfdGVtcFZlY3Rvci5sZW5ndGgoKSA9PT0gMCkge1xyXG4gICAgICAgICAgX2luUGxhbmVSb3RhdGlvbiA9IHRydWVcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yb3RhdGlvbkFuZ2xlID1cclxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0LmRvdChfdGVtcFZlY3Rvci5ub3JtYWxpemUoKSkgKiBST1RBVElPTl9TUEVFRFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGF4aXMgPT09ICdFJyB8fCBfaW5QbGFuZVJvdGF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbkF4aXMuY29weSh0aGlzLmV5ZSlcclxuICAgICAgICB0aGlzLnJvdGF0aW9uQW5nbGUgPSB0aGlzLnBvaW50RW5kLmFuZ2xlVG8odGhpcy5wb2ludFN0YXJ0KVxyXG5cclxuICAgICAgICB0aGlzLl9zdGFydE5vcm0uY29weSh0aGlzLnBvaW50U3RhcnQpLm5vcm1hbGl6ZSgpXHJcbiAgICAgICAgdGhpcy5fZW5kTm9ybS5jb3B5KHRoaXMucG9pbnRFbmQpLm5vcm1hbGl6ZSgpXHJcblxyXG4gICAgICAgIHRoaXMucm90YXRpb25BbmdsZSAqPVxyXG4gICAgICAgICAgdGhpcy5fZW5kTm9ybS5jcm9zcyh0aGlzLl9zdGFydE5vcm0pLmRvdCh0aGlzLmV5ZSkgPCAwID8gMSA6IC0xXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFwcGx5IHJvdGF0aW9uIHNuYXBcclxuXHJcbiAgICAgIGlmICh0aGlzLnJvdGF0aW9uU25hcClcclxuICAgICAgICB0aGlzLnJvdGF0aW9uQW5nbGUgPVxyXG4gICAgICAgICAgTWF0aC5yb3VuZCh0aGlzLnJvdGF0aW9uQW5nbGUgLyB0aGlzLnJvdGF0aW9uU25hcCkgKiB0aGlzLnJvdGF0aW9uU25hcFxyXG5cclxuICAgICAgLy8gQXBwbHkgcm90YXRlXHJcbiAgICAgIGlmIChzcGFjZSA9PT0gJ2xvY2FsJyAmJiBheGlzICE9PSAnRScgJiYgYXhpcyAhPT0gJ1hZWkUnKSB7XHJcbiAgICAgICAgb2JqZWN0LnF1YXRlcm5pb24uY29weSh0aGlzLl9xdWF0ZXJuaW9uU3RhcnQpXHJcbiAgICAgICAgb2JqZWN0LnF1YXRlcm5pb25cclxuICAgICAgICAgIC5tdWx0aXBseShcclxuICAgICAgICAgICAgX3RlbXBRdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodGhpcy5yb3RhdGlvbkF4aXMsIHRoaXMucm90YXRpb25BbmdsZSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5ub3JtYWxpemUoKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm90YXRpb25BeGlzLmFwcGx5UXVhdGVybmlvbih0aGlzLl9wYXJlbnRRdWF0ZXJuaW9uSW52KVxyXG4gICAgICAgIG9iamVjdC5xdWF0ZXJuaW9uLmNvcHkoXHJcbiAgICAgICAgICBfdGVtcFF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0aGlzLnJvdGF0aW9uQXhpcywgdGhpcy5yb3RhdGlvbkFuZ2xlKVxyXG4gICAgICAgIClcclxuICAgICAgICBvYmplY3QucXVhdGVybmlvbi5tdWx0aXBseSh0aGlzLl9xdWF0ZXJuaW9uU3RhcnQpLm5vcm1hbGl6ZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX2NoYW5nZUV2ZW50KVxyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9vYmplY3RDaGFuZ2VFdmVudClcclxuICB9XHJcblxyXG4gIHBvaW50ZXJVcChwb2ludGVyKSB7XHJcbiAgICBpZiAodGhpcy5fZG9Ob3RQaWNrKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb2ludGVyICE9PSBudWxsICYmIHBvaW50ZXIuYnV0dG9uICE9PSAwKSByZXR1cm5cclxuXHJcbiAgICBpZiAodGhpcy5kcmFnZ2luZyAmJiB0aGlzLmF4aXMgIT09IG51bGwpIHtcclxuICAgICAgX21vdXNlVXBFdmVudC5tb2RlID0gdGhpcy5tb2RlXHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChfbW91c2VVcEV2ZW50KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy5heGlzID0gbnVsbFxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuZGlzY29ubmVjdCgpXHJcblxyXG4gICAgdGhpcy5fcm9vdC5kaXNwb3NlKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIDNEIG9iamVjdCB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBhbmQgZW5zdXJlcyB0aGUgY29udHJvbHMgVUkgaXMgdmlzaWJsZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0M0R9IG9iamVjdCAtICBUaGUgM0Qgb2JqZWN0IHRoYXQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkLlxyXG4gICAqIEByZXR1cm4ge1RyYW5zZm9ybUNvbnRyb2xzfSBBIHJlZmVyZW5jZSB0byB0aGlzIGNvbnRyb2xzLlxyXG4gICAqL1xyXG4gIGF0dGFjaChvYmplY3QpIHtcclxuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0XHJcbiAgICB0aGlzLl9yb290LnZpc2libGUgPSB0cnVlXHJcblxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgdGhlIGN1cnJlbnQgM0Qgb2JqZWN0IGZyb20gdGhlIGNvbnRyb2xzIGFuZCBtYWtlcyB0aGUgaGVscGVyIFVJIGludmlzaWJsZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge1RyYW5zZm9ybUNvbnRyb2xzfSBBIHJlZmVyZW5jZSB0byB0aGlzIGNvbnRyb2xzLlxyXG4gICAqL1xyXG4gIGRldGFjaCgpIHtcclxuICAgIHRoaXMub2JqZWN0ID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLmF4aXMgPSBudWxsXHJcblxyXG4gICAgdGhpcy5fcm9vdC52aXNpYmxlID0gZmFsc2VcclxuXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXRzIHRoZSBvYmplY3QncyBwb3NpdGlvbiwgcm90YXRpb24gYW5kIHNjYWxlIHRvIHdoZW4gdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGJlZ2FuLlxyXG4gICAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVyblxyXG5cclxuICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XHJcbiAgICAgIHRoaXMub2JqZWN0LnBvc2l0aW9uLmNvcHkodGhpcy5fcG9zaXRpb25TdGFydClcclxuICAgICAgdGhpcy5vYmplY3QucXVhdGVybmlvbi5jb3B5KHRoaXMuX3F1YXRlcm5pb25TdGFydClcclxuICAgICAgdGhpcy5vYmplY3Quc2NhbGUuY29weSh0aGlzLl9zY2FsZVN0YXJ0KVxyXG5cclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9jaGFuZ2VFdmVudClcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9vYmplY3RDaGFuZ2VFdmVudClcclxuXHJcbiAgICAgIHRoaXMucG9pbnRTdGFydC5jb3B5KHRoaXMucG9pbnRFbmQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSByYXljYXN0ZXIgdGhhdCBpcyB1c2VkIGZvciB1c2VyIGludGVyYWN0aW9uLiBUaGlzIG9iamVjdCBpcyBzaGFyZWQgYmV0d2VlbiBhbGxcclxuICAgKiBpbnN0YW5jZXMgb2YgYFRyYW5zZm9ybUNvbnRyb2xzYC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtSYXljYXN0ZXJ9IFRoZSBpbnRlcm5hbCByYXljYXN0ZXIuXHJcbiAgICovXHJcbiAgZ2V0UmF5Y2FzdGVyKCkge1xyXG4gICAgcmV0dXJuIF9yYXljYXN0ZXJcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRyYW5zZm9ybWF0aW9uIG1vZGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7J3RyYW5zbGF0ZSd8J3JvdGF0ZSd8J3NjYWxlJ30gVGhlIHRyYW5zZm9ybWF0aW9uIG1vZGUuXHJcbiAgICovXHJcbiAgZ2V0TW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGdpdmVuIHRyYW5zZm9ybWF0aW9uIG1vZGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyd0cmFuc2xhdGUnfCdyb3RhdGUnfCdzY2FsZSd9IG1vZGUgLSBUaGUgdHJhbnNmb3JtYXRpb24gbW9kZSB0byBzZXQuXHJcbiAgICovXHJcbiAgc2V0TW9kZShtb2RlKSB7XHJcbiAgICB0aGlzLm1vZGUgPSBtb2RlXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB0cmFuc2xhdGlvbiBzbmFwLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHs/bnVtYmVyfSB0cmFuc2xhdGlvblNuYXAgLSBUaGUgdHJhbnNsYXRpb24gc25hcCB0byBzZXQuXHJcbiAgICovXHJcbiAgc2V0VHJhbnNsYXRpb25TbmFwKHRyYW5zbGF0aW9uU25hcCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGlvblNuYXAgPSB0cmFuc2xhdGlvblNuYXBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHJvdGF0aW9uIHNuYXAuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gez9udW1iZXJ9IHJvdGF0aW9uU25hcCAtIFRoZSByb3RhdGlvbiBzbmFwIHRvIHNldC5cclxuICAgKi9cclxuICBzZXRSb3RhdGlvblNuYXAocm90YXRpb25TbmFwKSB7XHJcbiAgICB0aGlzLnJvdGF0aW9uU25hcCA9IHJvdGF0aW9uU25hcFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2NhbGUgc25hcC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7P251bWJlcn0gc2NhbGVTbmFwIC0gVGhlIHNjYWxlIHNuYXAgdG8gc2V0LlxyXG4gICAqL1xyXG4gIHNldFNjYWxlU25hcChzY2FsZVNuYXApIHtcclxuICAgIHRoaXMuc2NhbGVTbmFwID0gc2NhbGVTbmFwXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzaXplIG9mIHRoZSBoZWxwZXIgVUkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFRoZSBzaXplIHRvIHNldC5cclxuICAgKi9cclxuICBzZXRTaXplKHNpemUpIHtcclxuICAgIHRoaXMuc2l6ZSA9IHNpemVcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvb3JkaW5hdGUgc3BhY2UgaW4gd2hpY2ggdHJhbnNmb3JtYXRpb25zIGFyZSBhcHBsaWVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsnd29ybGQnfCdsb2NhbCd9IHNwYWNlIC0gVGhlIHNwYWNlIHRvIHNldC5cclxuICAgKi9cclxuICBzZXRTcGFjZShzcGFjZSkge1xyXG4gICAgdGhpcy5zcGFjZSA9IHNwYWNlXHJcbiAgfVxyXG59XHJcblxyXG4vLyBtb3VzZSAvIHRvdWNoIGV2ZW50IGhhbmRsZXJzXHJcblxyXG5mdW5jdGlvbiBnZXRQb2ludGVyKGV2ZW50KSB7XHJcbiAgaWYgKHRoaXMuZG9tRWxlbWVudC5vd25lckRvY3VtZW50LnBvaW50ZXJMb2NrRWxlbWVudCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeDogMCxcclxuICAgICAgeTogMCxcclxuICAgICAgYnV0dG9uOiBldmVudC5idXR0b25cclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHg6ICgoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoKSAqIDIgLSAxLFxyXG4gICAgICB5OiAoLShldmVudC5jbGllbnRZIC0gcmVjdC50b3ApIC8gcmVjdC5oZWlnaHQpICogMiArIDEsXHJcbiAgICAgIGJ1dHRvbjogZXZlbnQuYnV0dG9uXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBvblBvaW50ZXJIb3ZlcihldmVudCkge1xyXG4gIGlmICghdGhpcy5lbmFibGVkKSByZXR1cm5cclxuXHJcbiAgc3dpdGNoIChldmVudC5wb2ludGVyVHlwZSkge1xyXG4gICAgY2FzZSAnbW91c2UnOlxyXG4gICAgY2FzZSAncGVuJzpcclxuICAgICAgdGhpcy5wb2ludGVySG92ZXIodGhpcy5fZ2V0UG9pbnRlcihldmVudCkpXHJcbiAgICAgIGJyZWFrXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBvblBvaW50ZXJEb3duKGV2ZW50KSB7XHJcbiAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVyblxyXG5cclxuICBpZiAoIWRvY3VtZW50LnBvaW50ZXJMb2NrRWxlbWVudCkge1xyXG4gICAgdGhpcy5kb21FbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcclxuICB9XHJcblxyXG4gIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuX29uUG9pbnRlck1vdmUpXHJcblxyXG4gIHRoaXMucG9pbnRlckhvdmVyKHRoaXMuX2dldFBvaW50ZXIoZXZlbnQpKVxyXG4gIHRoaXMucG9pbnRlckRvd24odGhpcy5fZ2V0UG9pbnRlcihldmVudCkpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9uUG9pbnRlck1vdmUoZXZlbnQpIHtcclxuICBpZiAoIXRoaXMuZW5hYmxlZCkgcmV0dXJuXHJcblxyXG4gIHRoaXMucG9pbnRlck1vdmUodGhpcy5fZ2V0UG9pbnRlcihldmVudCkpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9uUG9pbnRlclVwKGV2ZW50KSB7XHJcbiAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVyblxyXG5cclxuICB0aGlzLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcclxuXHJcbiAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5fb25Qb2ludGVyTW92ZSlcclxuXHJcbiAgdGhpcy5wb2ludGVyVXAodGhpcy5fZ2V0UG9pbnRlcihldmVudCkpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnNlY3RPYmplY3RXaXRoUmF5KG9iamVjdCwgcmF5Y2FzdGVyLCBpbmNsdWRlSW52aXNpYmxlKSB7XHJcbiAgY29uc3QgYWxsSW50ZXJzZWN0aW9ucyA9IHJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3Qob2JqZWN0LCB0cnVlKVxyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEludGVyc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmIChhbGxJbnRlcnNlY3Rpb25zW2ldLm9iamVjdC52aXNpYmxlIHx8IGluY2x1ZGVJbnZpc2libGUpIHtcclxuICAgICAgcmV0dXJuIGFsbEludGVyc2VjdGlvbnNbaV1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBmYWxzZVxyXG59XHJcblxyXG4vL1xyXG5cclxuLy8gUmV1c2FibGUgdXRpbGl0eSB2YXJpYWJsZXNcclxuXHJcbmNvbnN0IF90ZW1wRXVsZXIgPSBuZXcgRXVsZXIoKVxyXG5jb25zdCBfYWxpZ25WZWN0b3IgPSBuZXcgVmVjdG9yMygwLCAxLCAwKVxyXG5jb25zdCBfemVyb1ZlY3RvciA9IG5ldyBWZWN0b3IzKDAsIDAsIDApXHJcbmNvbnN0IF9sb29rQXRNYXRyaXggPSBuZXcgTWF0cml4NCgpXHJcbmNvbnN0IF90ZW1wUXVhdGVybmlvbjIgPSBuZXcgUXVhdGVybmlvbigpXHJcbmNvbnN0IF9pZGVudGl0eVF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpXHJcbmNvbnN0IF9kaXJWZWN0b3IgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF90ZW1wTWF0cml4ID0gbmV3IE1hdHJpeDQoKVxyXG5cclxuY29uc3QgX3VuaXRYID0gbmV3IFZlY3RvcjMoMSwgMCwgMClcclxuY29uc3QgX3VuaXRZID0gbmV3IFZlY3RvcjMoMCwgMSwgMClcclxuY29uc3QgX3VuaXRaID0gbmV3IFZlY3RvcjMoMCwgMCwgMSlcclxuXHJcbmNvbnN0IF92MSA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3YyID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfdjMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5jbGFzcyBUcmFuc2Zvcm1Db250cm9sc1Jvb3QgZXh0ZW5kcyBPYmplY3QzRCB7XHJcbiAgY29uc3RydWN0b3IoY29udHJvbHMpIHtcclxuICAgIHN1cGVyKClcclxuXHJcbiAgICB0aGlzLmlzVHJhbnNmb3JtQ29udHJvbHNSb290ID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMuY29udHJvbHMgPSBjb250cm9sc1xyXG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2VcclxuICB9XHJcblxyXG4gIC8vIHVwZGF0ZU1hdHJpeFdvcmxkIHVwZGF0ZXMga2V5IHRyYW5zZm9ybWF0aW9uIHZhcmlhYmxlc1xyXG4gIHVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKSB7XHJcbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMuY29udHJvbHNcclxuXHJcbiAgICBpZiAoY29udHJvbHMub2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29udHJvbHMub2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKClcclxuXHJcbiAgICAgIGlmIChjb250cm9scy5vYmplY3QucGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICdUcmFuc2Zvcm1Db250cm9sczogVGhlIGF0dGFjaGVkIDNEIG9iamVjdCBtdXN0IGJlIGEgcGFydCBvZiB0aGUgc2NlbmUgZ3JhcGguJ1xyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb250cm9scy5vYmplY3QucGFyZW50Lm1hdHJpeFdvcmxkLmRlY29tcG9zZShcclxuICAgICAgICAgIGNvbnRyb2xzLl9wYXJlbnRQb3NpdGlvbixcclxuICAgICAgICAgIGNvbnRyb2xzLl9wYXJlbnRRdWF0ZXJuaW9uLFxyXG4gICAgICAgICAgY29udHJvbHMuX3BhcmVudFNjYWxlXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb250cm9scy5vYmplY3QubWF0cml4V29ybGQuZGVjb21wb3NlKFxyXG4gICAgICAgIGNvbnRyb2xzLndvcmxkUG9zaXRpb24sXHJcbiAgICAgICAgY29udHJvbHMud29ybGRRdWF0ZXJuaW9uLFxyXG4gICAgICAgIGNvbnRyb2xzLl93b3JsZFNjYWxlXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGNvbnRyb2xzLl9wYXJlbnRRdWF0ZXJuaW9uSW52LmNvcHkoY29udHJvbHMuX3BhcmVudFF1YXRlcm5pb24pLmludmVydCgpXHJcbiAgICAgIGNvbnRyb2xzLl93b3JsZFF1YXRlcm5pb25JbnYuY29weShjb250cm9scy53b3JsZFF1YXRlcm5pb24pLmludmVydCgpXHJcbiAgICB9XHJcblxyXG4gICAgY29udHJvbHMuY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKClcclxuICAgIGNvbnRyb2xzLmNhbWVyYS5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoXHJcbiAgICAgIGNvbnRyb2xzLmNhbWVyYVBvc2l0aW9uLFxyXG4gICAgICBjb250cm9scy5jYW1lcmFRdWF0ZXJuaW9uLFxyXG4gICAgICBjb250cm9scy5fY2FtZXJhU2NhbGVcclxuICAgIClcclxuXHJcbiAgICBpZiAoY29udHJvbHMuY2FtZXJhLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSB7XHJcbiAgICAgIGNvbnRyb2xzLmNhbWVyYS5nZXRXb3JsZERpcmVjdGlvbihjb250cm9scy5leWUpLm5lZ2F0ZSgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250cm9scy5leWUuY29weShjb250cm9scy5jYW1lcmFQb3NpdGlvbikuc3ViKGNvbnRyb2xzLndvcmxkUG9zaXRpb24pLm5vcm1hbGl6ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIudXBkYXRlTWF0cml4V29ybGQoZm9yY2UpXHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy50cmF2ZXJzZShmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgaWYgKGNoaWxkLmdlb21ldHJ5KSBjaGlsZC5nZW9tZXRyeS5kaXNwb3NlKClcclxuICAgICAgaWYgKGNoaWxkLm1hdGVyaWFsKSBjaGlsZC5tYXRlcmlhbC5kaXNwb3NlKClcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBUcmFuc2Zvcm1Db250cm9sc0dpem1vIGV4dGVuZHMgT2JqZWN0M0Qge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKVxyXG5cclxuICAgIHRoaXMuaXNUcmFuc2Zvcm1Db250cm9sc0dpem1vID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMudHlwZSA9ICdUcmFuc2Zvcm1Db250cm9sc0dpem1vJ1xyXG5cclxuICAgIC8vIHNoYXJlZCBtYXRlcmlhbHNcclxuXHJcbiAgICBjb25zdCBnaXptb01hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcclxuICAgICAgZGVwdGhUZXN0OiBmYWxzZSxcclxuICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXHJcbiAgICAgIGZvZzogZmFsc2UsXHJcbiAgICAgIHRvbmVNYXBwZWQ6IGZhbHNlLFxyXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZVxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCBnaXptb0xpbmVNYXRlcmlhbCA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCh7XHJcbiAgICAgIGRlcHRoVGVzdDogZmFsc2UsXHJcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxyXG4gICAgICBmb2c6IGZhbHNlLFxyXG4gICAgICB0b25lTWFwcGVkOiBmYWxzZSxcclxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWVcclxuICAgIH0pXHJcblxyXG4gICAgLy8gTWFrZSB1bmlxdWUgbWF0ZXJpYWwgZm9yIGVhY2ggYXhpcy9jb2xvclxyXG5cclxuICAgIGNvbnN0IG1hdEludmlzaWJsZSA9IGdpem1vTWF0ZXJpYWwuY2xvbmUoKVxyXG4gICAgbWF0SW52aXNpYmxlLm9wYWNpdHkgPSAwLjE1XHJcblxyXG4gICAgY29uc3QgbWF0SGVscGVyID0gZ2l6bW9MaW5lTWF0ZXJpYWwuY2xvbmUoKVxyXG4gICAgbWF0SGVscGVyLm9wYWNpdHkgPSAwLjVcclxuXHJcbiAgICBjb25zdCBtYXRSZWQgPSBnaXptb01hdGVyaWFsLmNsb25lKClcclxuICAgIG1hdFJlZC5jb2xvci5zZXRIZXgoMHhmZjAwMDApXHJcblxyXG4gICAgY29uc3QgbWF0R3JlZW4gPSBnaXptb01hdGVyaWFsLmNsb25lKClcclxuICAgIG1hdEdyZWVuLmNvbG9yLnNldEhleCgweDAwZmYwMClcclxuXHJcbiAgICBjb25zdCBtYXRCbHVlID0gZ2l6bW9NYXRlcmlhbC5jbG9uZSgpXHJcbiAgICBtYXRCbHVlLmNvbG9yLnNldEhleCgweDAwMDBmZilcclxuXHJcbiAgICBjb25zdCBtYXRSZWRUcmFuc3BhcmVudCA9IGdpem1vTWF0ZXJpYWwuY2xvbmUoKVxyXG4gICAgbWF0UmVkVHJhbnNwYXJlbnQuY29sb3Iuc2V0SGV4KDB4ZmYwMDAwKVxyXG4gICAgbWF0UmVkVHJhbnNwYXJlbnQub3BhY2l0eSA9IDAuNVxyXG5cclxuICAgIGNvbnN0IG1hdEdyZWVuVHJhbnNwYXJlbnQgPSBnaXptb01hdGVyaWFsLmNsb25lKClcclxuICAgIG1hdEdyZWVuVHJhbnNwYXJlbnQuY29sb3Iuc2V0SGV4KDB4MDBmZjAwKVxyXG4gICAgbWF0R3JlZW5UcmFuc3BhcmVudC5vcGFjaXR5ID0gMC41XHJcblxyXG4gICAgY29uc3QgbWF0Qmx1ZVRyYW5zcGFyZW50ID0gZ2l6bW9NYXRlcmlhbC5jbG9uZSgpXHJcbiAgICBtYXRCbHVlVHJhbnNwYXJlbnQuY29sb3Iuc2V0SGV4KDB4MDAwMGZmKVxyXG4gICAgbWF0Qmx1ZVRyYW5zcGFyZW50Lm9wYWNpdHkgPSAwLjVcclxuXHJcbiAgICBjb25zdCBtYXRXaGl0ZVRyYW5zcGFyZW50ID0gZ2l6bW9NYXRlcmlhbC5jbG9uZSgpXHJcbiAgICBtYXRXaGl0ZVRyYW5zcGFyZW50Lm9wYWNpdHkgPSAwLjI1XHJcblxyXG4gICAgY29uc3QgbWF0WWVsbG93VHJhbnNwYXJlbnQgPSBnaXptb01hdGVyaWFsLmNsb25lKClcclxuICAgIG1hdFllbGxvd1RyYW5zcGFyZW50LmNvbG9yLnNldEhleCgweGZmZmYwMClcclxuICAgIG1hdFllbGxvd1RyYW5zcGFyZW50Lm9wYWNpdHkgPSAwLjI1XHJcblxyXG4gICAgY29uc3QgbWF0WWVsbG93ID0gZ2l6bW9NYXRlcmlhbC5jbG9uZSgpXHJcbiAgICBtYXRZZWxsb3cuY29sb3Iuc2V0SGV4KDB4ZmZmZjAwKVxyXG5cclxuICAgIGNvbnN0IG1hdEdyYXkgPSBnaXptb01hdGVyaWFsLmNsb25lKClcclxuICAgIG1hdEdyYXkuY29sb3Iuc2V0SGV4KDB4Nzg3ODc4KVxyXG5cclxuICAgIC8vIHJldXNhYmxlIGdlb21ldHJ5XHJcblxyXG4gICAgY29uc3QgYXJyb3dHZW9tZXRyeSA9IG5ldyBDeWxpbmRlckdlb21ldHJ5KDAsIDAuMDQsIDAuMSwgMTIpXHJcbiAgICBhcnJvd0dlb21ldHJ5LnRyYW5zbGF0ZSgwLCAwLjA1LCAwKVxyXG5cclxuICAgIGNvbnN0IHNjYWxlSGFuZGxlR2VvbWV0cnkgPSBuZXcgQm94R2VvbWV0cnkoMC4wOCwgMC4wOCwgMC4wOClcclxuICAgIHNjYWxlSGFuZGxlR2VvbWV0cnkudHJhbnNsYXRlKDAsIDAuMDQsIDApXHJcblxyXG4gICAgY29uc3QgbGluZUdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KClcclxuICAgIGxpbmVHZW9tZXRyeS5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICdwb3NpdGlvbicsXHJcbiAgICAgIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKFswLCAwLCAwLCAxLCAwLCAwXSwgMylcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBsaW5lR2VvbWV0cnkyID0gbmV3IEN5bGluZGVyR2VvbWV0cnkoMC4wMDc1LCAwLjAwNzUsIDAuNSwgMylcclxuICAgIGxpbmVHZW9tZXRyeTIudHJhbnNsYXRlKDAsIDAuMjUsIDApXHJcblxyXG4gICAgZnVuY3Rpb24gQ2lyY2xlR2VvbWV0cnkocmFkaXVzLCBhcmMpIHtcclxuICAgICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgVG9ydXNHZW9tZXRyeShyYWRpdXMsIDAuMDA3NSwgMywgNjQsIGFyYyAqIE1hdGguUEkgKiAyKVxyXG4gICAgICBnZW9tZXRyeS5yb3RhdGVZKE1hdGguUEkgLyAyKVxyXG4gICAgICBnZW9tZXRyeS5yb3RhdGVYKE1hdGguUEkgLyAyKVxyXG4gICAgICByZXR1cm4gZ2VvbWV0cnlcclxuICAgIH1cclxuXHJcbiAgICAvLyBTcGVjaWFsIGdlb21ldHJ5IGZvciB0cmFuc2Zvcm0gaGVscGVyLiBJZiBzY2FsZWQgd2l0aCBwb3NpdGlvbiB2ZWN0b3IgaXQgc3BhbnMgZnJvbSBbMCwwLDBdIHRvIHBvc2l0aW9uXHJcblxyXG4gICAgZnVuY3Rpb24gVHJhbnNsYXRlSGVscGVyR2VvbWV0cnkoKSB7XHJcbiAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KClcclxuXHJcbiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZShcclxuICAgICAgICAncG9zaXRpb24nLFxyXG4gICAgICAgIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKFswLCAwLCAwLCAxLCAxLCAxXSwgMylcclxuICAgICAgKVxyXG5cclxuICAgICAgcmV0dXJuIGdlb21ldHJ5XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2l6bW8gZGVmaW5pdGlvbnMgLSBjdXN0b20gaGllcmFyY2h5IGRlZmluaXRpb25zIGZvciBzZXR1cEdpem1vKCkgZnVuY3Rpb25cclxuXHJcbiAgICBjb25zdCBnaXptb1RyYW5zbGF0ZSA9IHtcclxuICAgICAgWDogW1xyXG4gICAgICAgIFtuZXcgTWVzaChhcnJvd0dlb21ldHJ5LCBtYXRSZWQpLCBbMC41LCAwLCAwXSwgWzAsIDAsIC1NYXRoLlBJIC8gMl1dLFxyXG4gICAgICAgIFtuZXcgTWVzaChhcnJvd0dlb21ldHJ5LCBtYXRSZWQpLCBbLTAuNSwgMCwgMF0sIFswLCAwLCBNYXRoLlBJIC8gMl1dLFxyXG4gICAgICAgIFtuZXcgTWVzaChsaW5lR2VvbWV0cnkyLCBtYXRSZWQpLCBbMCwgMCwgMF0sIFswLCAwLCAtTWF0aC5QSSAvIDJdXVxyXG4gICAgICBdLFxyXG4gICAgICBZOiBbXHJcbiAgICAgICAgW25ldyBNZXNoKGFycm93R2VvbWV0cnksIG1hdEdyZWVuKSwgWzAsIDAuNSwgMF1dLFxyXG4gICAgICAgIFtuZXcgTWVzaChhcnJvd0dlb21ldHJ5LCBtYXRHcmVlbiksIFswLCAtMC41LCAwXSwgW01hdGguUEksIDAsIDBdXSxcclxuICAgICAgICBbbmV3IE1lc2gobGluZUdlb21ldHJ5MiwgbWF0R3JlZW4pXVxyXG4gICAgICBdLFxyXG4gICAgICBaOiBbXHJcbiAgICAgICAgW25ldyBNZXNoKGFycm93R2VvbWV0cnksIG1hdEJsdWUpLCBbMCwgMCwgMC41XSwgW01hdGguUEkgLyAyLCAwLCAwXV0sXHJcbiAgICAgICAgW25ldyBNZXNoKGFycm93R2VvbWV0cnksIG1hdEJsdWUpLCBbMCwgMCwgLTAuNV0sIFstTWF0aC5QSSAvIDIsIDAsIDBdXSxcclxuICAgICAgICBbbmV3IE1lc2gobGluZUdlb21ldHJ5MiwgbWF0Qmx1ZSksIG51bGwsIFtNYXRoLlBJIC8gMiwgMCwgMF1dXHJcbiAgICAgIF0sXHJcbiAgICAgIFhZWjogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBNZXNoKG5ldyBPY3RhaGVkcm9uR2VvbWV0cnkoMC4xLCAwKSwgbWF0V2hpdGVUcmFuc3BhcmVudC5jbG9uZSgpKSxcclxuICAgICAgICAgIFswLCAwLCAwXVxyXG4gICAgICAgIF1cclxuICAgICAgXVxyXG4gICAgICAvLyBYWTogW1xyXG4gICAgICAvLyAgIFtcclxuICAgICAgLy8gICAgIG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSgwLjE1LCAwLjE1LCAwLjAxKSwgbWF0Qmx1ZVRyYW5zcGFyZW50LmNsb25lKCkpLFxyXG4gICAgICAvLyAgICAgWzAuMTUsIDAuMTUsIDBdXHJcbiAgICAgIC8vICAgXVxyXG4gICAgICAvLyBdLFxyXG4gICAgICAvLyBZWjogW1xyXG4gICAgICAvLyAgIFtcclxuICAgICAgLy8gICAgIG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSgwLjE1LCAwLjE1LCAwLjAxKSwgbWF0UmVkVHJhbnNwYXJlbnQuY2xvbmUoKSksXHJcbiAgICAgIC8vICAgICBbMCwgMC4xNSwgMC4xNV0sXHJcbiAgICAgIC8vICAgICBbMCwgTWF0aC5QSSAvIDIsIDBdXHJcbiAgICAgIC8vICAgXVxyXG4gICAgICAvLyBdLFxyXG4gICAgICAvLyBYWjogW1xyXG4gICAgICAvLyAgIFtcclxuICAgICAgLy8gICAgIG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSgwLjE1LCAwLjE1LCAwLjAxKSwgbWF0R3JlZW5UcmFuc3BhcmVudC5jbG9uZSgpKSxcclxuICAgICAgLy8gICAgIFswLjE1LCAwLCAwLjE1XSxcclxuICAgICAgLy8gICAgIFstTWF0aC5QSSAvIDIsIDAsIDBdXHJcbiAgICAgIC8vICAgXVxyXG4gICAgICAvLyBdXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGlja2VyVHJhbnNsYXRlID0ge1xyXG4gICAgICBYOiBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IE1lc2gobmV3IEN5bGluZGVyR2VvbWV0cnkoMC4yLCAwLCAwLjYsIDQpLCBtYXRJbnZpc2libGUpLFxyXG4gICAgICAgICAgWzAuMywgMCwgMF0sXHJcbiAgICAgICAgICBbMCwgMCwgLU1hdGguUEkgLyAyXVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IE1lc2gobmV3IEN5bGluZGVyR2VvbWV0cnkoMC4yLCAwLCAwLjYsIDQpLCBtYXRJbnZpc2libGUpLFxyXG4gICAgICAgICAgWy0wLjMsIDAsIDBdLFxyXG4gICAgICAgICAgWzAsIDAsIE1hdGguUEkgLyAyXVxyXG4gICAgICAgIF1cclxuICAgICAgXSxcclxuICAgICAgWTogW1xyXG4gICAgICAgIFtuZXcgTWVzaChuZXcgQ3lsaW5kZXJHZW9tZXRyeSgwLjIsIDAsIDAuNiwgNCksIG1hdEludmlzaWJsZSksIFswLCAwLjMsIDBdXSxcclxuICAgICAgICBbXHJcbiAgICAgICAgICBuZXcgTWVzaChuZXcgQ3lsaW5kZXJHZW9tZXRyeSgwLjIsIDAsIDAuNiwgNCksIG1hdEludmlzaWJsZSksXHJcbiAgICAgICAgICBbMCwgLTAuMywgMF0sXHJcbiAgICAgICAgICBbMCwgMCwgTWF0aC5QSV1cclxuICAgICAgICBdXHJcbiAgICAgIF0sXHJcbiAgICAgIFo6IFtcclxuICAgICAgICBbXHJcbiAgICAgICAgICBuZXcgTWVzaChuZXcgQ3lsaW5kZXJHZW9tZXRyeSgwLjIsIDAsIDAuNiwgNCksIG1hdEludmlzaWJsZSksXHJcbiAgICAgICAgICBbMCwgMCwgMC4zXSxcclxuICAgICAgICAgIFtNYXRoLlBJIC8gMiwgMCwgMF1cclxuICAgICAgICBdLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBNZXNoKG5ldyBDeWxpbmRlckdlb21ldHJ5KDAuMiwgMCwgMC42LCA0KSwgbWF0SW52aXNpYmxlKSxcclxuICAgICAgICAgIFswLCAwLCAtMC4zXSxcclxuICAgICAgICAgIFstTWF0aC5QSSAvIDIsIDAsIDBdXHJcbiAgICAgICAgXVxyXG4gICAgICBdLFxyXG4gICAgICBYWVo6IFtbbmV3IE1lc2gobmV3IE9jdGFoZWRyb25HZW9tZXRyeSgwLjIsIDApLCBtYXRJbnZpc2libGUpXV0sXHJcbiAgICAgIFhZOiBbW25ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSgwLjIsIDAuMiwgMC4wMSksIG1hdEludmlzaWJsZSksIFswLjE1LCAwLjE1LCAwXV1dLFxyXG4gICAgICBZWjogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSgwLjIsIDAuMiwgMC4wMSksIG1hdEludmlzaWJsZSksXHJcbiAgICAgICAgICBbMCwgMC4xNSwgMC4xNV0sXHJcbiAgICAgICAgICBbMCwgTWF0aC5QSSAvIDIsIDBdXHJcbiAgICAgICAgXVxyXG4gICAgICBdLFxyXG4gICAgICBYWjogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSgwLjIsIDAuMiwgMC4wMSksIG1hdEludmlzaWJsZSksXHJcbiAgICAgICAgICBbMC4xNSwgMCwgMC4xNV0sXHJcbiAgICAgICAgICBbLU1hdGguUEkgLyAyLCAwLCAwXVxyXG4gICAgICAgIF1cclxuICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhlbHBlclRyYW5zbGF0ZSA9IHtcclxuICAgICAgU1RBUlQ6IFtcclxuICAgICAgICBbXHJcbiAgICAgICAgICBuZXcgTWVzaChuZXcgT2N0YWhlZHJvbkdlb21ldHJ5KDAuMDEsIDIpLCBtYXRIZWxwZXIpLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ2hlbHBlcidcclxuICAgICAgICBdXHJcbiAgICAgIF0sXHJcbiAgICAgIEVORDogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBNZXNoKG5ldyBPY3RhaGVkcm9uR2VvbWV0cnkoMC4wMSwgMiksIG1hdEhlbHBlciksXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnaGVscGVyJ1xyXG4gICAgICAgIF1cclxuICAgICAgXSxcclxuICAgICAgREVMVEE6IFtcclxuICAgICAgICBbbmV3IExpbmUoVHJhbnNsYXRlSGVscGVyR2VvbWV0cnkoKSwgbWF0SGVscGVyKSwgbnVsbCwgbnVsbCwgbnVsbCwgJ2hlbHBlciddXHJcbiAgICAgIF0sXHJcbiAgICAgIFg6IFtcclxuICAgICAgICBbXHJcbiAgICAgICAgICBuZXcgTGluZShsaW5lR2VvbWV0cnksIG1hdEhlbHBlci5jbG9uZSgpKSxcclxuICAgICAgICAgIFstMWUzLCAwLCAwXSxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBbMWU2LCAxLCAxXSxcclxuICAgICAgICAgICdoZWxwZXInXHJcbiAgICAgICAgXVxyXG4gICAgICBdLFxyXG4gICAgICBZOiBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IExpbmUobGluZUdlb21ldHJ5LCBtYXRIZWxwZXIuY2xvbmUoKSksXHJcbiAgICAgICAgICBbMCwgLTFlMywgMF0sXHJcbiAgICAgICAgICBbMCwgMCwgTWF0aC5QSSAvIDJdLFxyXG4gICAgICAgICAgWzFlNiwgMSwgMV0sXHJcbiAgICAgICAgICAnaGVscGVyJ1xyXG4gICAgICAgIF1cclxuICAgICAgXSxcclxuICAgICAgWjogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBMaW5lKGxpbmVHZW9tZXRyeSwgbWF0SGVscGVyLmNsb25lKCkpLFxyXG4gICAgICAgICAgWzAsIDAsIC0xZTNdLFxyXG4gICAgICAgICAgWzAsIC1NYXRoLlBJIC8gMiwgMF0sXHJcbiAgICAgICAgICBbMWU2LCAxLCAxXSxcclxuICAgICAgICAgICdoZWxwZXInXHJcbiAgICAgICAgXVxyXG4gICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ2l6bW9Sb3RhdGUgPSB7XHJcbiAgICAgIC8vIFhZWkU6IFtbbmV3IE1lc2goQ2lyY2xlR2VvbWV0cnkoMC41LCAxKSwgbWF0R3JheSksIG51bGwsIFswLCBNYXRoLlBJIC8gMiwgMF1dXSxcclxuICAgICAgWDogW1tuZXcgTWVzaChDaXJjbGVHZW9tZXRyeSgwLjUsIDAuNSksIG1hdFJlZCldXSxcclxuICAgICAgWTogW1tuZXcgTWVzaChDaXJjbGVHZW9tZXRyeSgwLjUsIDAuNSksIG1hdEdyZWVuKSwgbnVsbCwgWzAsIDAsIC1NYXRoLlBJIC8gMl1dXSxcclxuICAgICAgWjogW1tuZXcgTWVzaChDaXJjbGVHZW9tZXRyeSgwLjUsIDAuNSksIG1hdEJsdWUpLCBudWxsLCBbMCwgTWF0aC5QSSAvIDIsIDBdXV1cclxuICAgICAgLy8gRTogW1xyXG4gICAgICAvLyAgIFtcclxuICAgICAgLy8gICAgIG5ldyBNZXNoKENpcmNsZUdlb21ldHJ5KDAuNzUsIDEpLCBtYXRZZWxsb3dUcmFuc3BhcmVudCksXHJcbiAgICAgIC8vICAgICBudWxsLFxyXG4gICAgICAvLyAgICAgWzAsIE1hdGguUEkgLyAyLCAwXVxyXG4gICAgICAvLyAgIF1cclxuICAgICAgLy8gXVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhlbHBlclJvdGF0ZSA9IHtcclxuICAgICAgQVhJUzogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBMaW5lKGxpbmVHZW9tZXRyeSwgbWF0SGVscGVyLmNsb25lKCkpLFxyXG4gICAgICAgICAgWy0xZTMsIDAsIDBdLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIFsxZTYsIDEsIDFdLFxyXG4gICAgICAgICAgJ2hlbHBlcidcclxuICAgICAgICBdXHJcbiAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwaWNrZXJSb3RhdGUgPSB7XHJcbiAgICAgIFhZWkU6IFtbbmV3IE1lc2gobmV3IFNwaGVyZUdlb21ldHJ5KDAuMjUsIDEwLCA4KSwgbWF0SW52aXNpYmxlKV1dLFxyXG4gICAgICBYOiBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IE1lc2gobmV3IFRvcnVzR2VvbWV0cnkoMC41LCAwLjEsIDQsIDI0KSwgbWF0SW52aXNpYmxlKSxcclxuICAgICAgICAgIFswLCAwLCAwXSxcclxuICAgICAgICAgIFswLCAtTWF0aC5QSSAvIDIsIC1NYXRoLlBJIC8gMl1cclxuICAgICAgICBdXHJcbiAgICAgIF0sXHJcbiAgICAgIFk6IFtcclxuICAgICAgICBbXHJcbiAgICAgICAgICBuZXcgTWVzaChuZXcgVG9ydXNHZW9tZXRyeSgwLjUsIDAuMSwgNCwgMjQpLCBtYXRJbnZpc2libGUpLFxyXG4gICAgICAgICAgWzAsIDAsIDBdLFxyXG4gICAgICAgICAgW01hdGguUEkgLyAyLCAwLCAwXVxyXG4gICAgICAgIF1cclxuICAgICAgXSxcclxuICAgICAgWjogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBNZXNoKG5ldyBUb3J1c0dlb21ldHJ5KDAuNSwgMC4xLCA0LCAyNCksIG1hdEludmlzaWJsZSksXHJcbiAgICAgICAgICBbMCwgMCwgMF0sXHJcbiAgICAgICAgICBbMCwgMCwgLU1hdGguUEkgLyAyXVxyXG4gICAgICAgIF1cclxuICAgICAgXVxyXG4gICAgICAvLyBFOiBbW25ldyBNZXNoKG5ldyBUb3J1c0dlb21ldHJ5KDAuNzUsIDAuMSwgMiwgMjQpLCBtYXRJbnZpc2libGUpXV1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBnaXptb1NjYWxlID0ge1xyXG4gICAgICBYOiBbXHJcbiAgICAgICAgW25ldyBNZXNoKHNjYWxlSGFuZGxlR2VvbWV0cnksIG1hdFJlZCksIFswLjUsIDAsIDBdLCBbMCwgMCwgLU1hdGguUEkgLyAyXV0sXHJcbiAgICAgICAgW25ldyBNZXNoKGxpbmVHZW9tZXRyeTIsIG1hdFJlZCksIFswLCAwLCAwXSwgWzAsIDAsIC1NYXRoLlBJIC8gMl1dLFxyXG4gICAgICAgIFtuZXcgTWVzaChzY2FsZUhhbmRsZUdlb21ldHJ5LCBtYXRSZWQpLCBbLTAuNSwgMCwgMF0sIFswLCAwLCBNYXRoLlBJIC8gMl1dXHJcbiAgICAgIF0sXHJcbiAgICAgIFk6IFtcclxuICAgICAgICBbbmV3IE1lc2goc2NhbGVIYW5kbGVHZW9tZXRyeSwgbWF0R3JlZW4pLCBbMCwgMC41LCAwXV0sXHJcbiAgICAgICAgW25ldyBNZXNoKGxpbmVHZW9tZXRyeTIsIG1hdEdyZWVuKV0sXHJcbiAgICAgICAgW25ldyBNZXNoKHNjYWxlSGFuZGxlR2VvbWV0cnksIG1hdEdyZWVuKSwgWzAsIC0wLjUsIDBdLCBbMCwgMCwgTWF0aC5QSV1dXHJcbiAgICAgIF0sXHJcbiAgICAgIFo6IFtcclxuICAgICAgICBbbmV3IE1lc2goc2NhbGVIYW5kbGVHZW9tZXRyeSwgbWF0Qmx1ZSksIFswLCAwLCAwLjVdLCBbTWF0aC5QSSAvIDIsIDAsIDBdXSxcclxuICAgICAgICBbbmV3IE1lc2gobGluZUdlb21ldHJ5MiwgbWF0Qmx1ZSksIFswLCAwLCAwXSwgW01hdGguUEkgLyAyLCAwLCAwXV0sXHJcbiAgICAgICAgW25ldyBNZXNoKHNjYWxlSGFuZGxlR2VvbWV0cnksIG1hdEJsdWUpLCBbMCwgMCwgLTAuNV0sIFstTWF0aC5QSSAvIDIsIDAsIDBdXVxyXG4gICAgICBdLFxyXG4gICAgICBYWTogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSgwLjE1LCAwLjE1LCAwLjAxKSwgbWF0Qmx1ZVRyYW5zcGFyZW50KSxcclxuICAgICAgICAgIFswLjE1LCAwLjE1LCAwXVxyXG4gICAgICAgIF1cclxuICAgICAgXSxcclxuICAgICAgWVo6IFtcclxuICAgICAgICBbXHJcbiAgICAgICAgICBuZXcgTWVzaChuZXcgQm94R2VvbWV0cnkoMC4xNSwgMC4xNSwgMC4wMSksIG1hdFJlZFRyYW5zcGFyZW50KSxcclxuICAgICAgICAgIFswLCAwLjE1LCAwLjE1XSxcclxuICAgICAgICAgIFswLCBNYXRoLlBJIC8gMiwgMF1cclxuICAgICAgICBdXHJcbiAgICAgIF0sXHJcbiAgICAgIFhaOiBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IE1lc2gobmV3IEJveEdlb21ldHJ5KDAuMTUsIDAuMTUsIDAuMDEpLCBtYXRHcmVlblRyYW5zcGFyZW50KSxcclxuICAgICAgICAgIFswLjE1LCAwLCAwLjE1XSxcclxuICAgICAgICAgIFstTWF0aC5QSSAvIDIsIDAsIDBdXHJcbiAgICAgICAgXVxyXG4gICAgICBdLFxyXG4gICAgICBYWVo6IFtbbmV3IE1lc2gobmV3IEJveEdlb21ldHJ5KDAuMSwgMC4xLCAwLjEpLCBtYXRXaGl0ZVRyYW5zcGFyZW50LmNsb25lKCkpXV1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwaWNrZXJTY2FsZSA9IHtcclxuICAgICAgWDogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBNZXNoKG5ldyBDeWxpbmRlckdlb21ldHJ5KDAuMiwgMCwgMC42LCA0KSwgbWF0SW52aXNpYmxlKSxcclxuICAgICAgICAgIFswLjMsIDAsIDBdLFxyXG4gICAgICAgICAgWzAsIDAsIC1NYXRoLlBJIC8gMl1cclxuICAgICAgICBdLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBNZXNoKG5ldyBDeWxpbmRlckdlb21ldHJ5KDAuMiwgMCwgMC42LCA0KSwgbWF0SW52aXNpYmxlKSxcclxuICAgICAgICAgIFstMC4zLCAwLCAwXSxcclxuICAgICAgICAgIFswLCAwLCBNYXRoLlBJIC8gMl1cclxuICAgICAgICBdXHJcbiAgICAgIF0sXHJcbiAgICAgIFk6IFtcclxuICAgICAgICBbbmV3IE1lc2gobmV3IEN5bGluZGVyR2VvbWV0cnkoMC4yLCAwLCAwLjYsIDQpLCBtYXRJbnZpc2libGUpLCBbMCwgMC4zLCAwXV0sXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IE1lc2gobmV3IEN5bGluZGVyR2VvbWV0cnkoMC4yLCAwLCAwLjYsIDQpLCBtYXRJbnZpc2libGUpLFxyXG4gICAgICAgICAgWzAsIC0wLjMsIDBdLFxyXG4gICAgICAgICAgWzAsIDAsIE1hdGguUEldXHJcbiAgICAgICAgXVxyXG4gICAgICBdLFxyXG4gICAgICBaOiBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IE1lc2gobmV3IEN5bGluZGVyR2VvbWV0cnkoMC4yLCAwLCAwLjYsIDQpLCBtYXRJbnZpc2libGUpLFxyXG4gICAgICAgICAgWzAsIDAsIDAuM10sXHJcbiAgICAgICAgICBbTWF0aC5QSSAvIDIsIDAsIDBdXHJcbiAgICAgICAgXSxcclxuICAgICAgICBbXHJcbiAgICAgICAgICBuZXcgTWVzaChuZXcgQ3lsaW5kZXJHZW9tZXRyeSgwLjIsIDAsIDAuNiwgNCksIG1hdEludmlzaWJsZSksXHJcbiAgICAgICAgICBbMCwgMCwgLTAuM10sXHJcbiAgICAgICAgICBbLU1hdGguUEkgLyAyLCAwLCAwXVxyXG4gICAgICAgIF1cclxuICAgICAgXSxcclxuICAgICAgWFk6IFtbbmV3IE1lc2gobmV3IEJveEdlb21ldHJ5KDAuMiwgMC4yLCAwLjAxKSwgbWF0SW52aXNpYmxlKSwgWzAuMTUsIDAuMTUsIDBdXV0sXHJcbiAgICAgIFlaOiBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IE1lc2gobmV3IEJveEdlb21ldHJ5KDAuMiwgMC4yLCAwLjAxKSwgbWF0SW52aXNpYmxlKSxcclxuICAgICAgICAgIFswLCAwLjE1LCAwLjE1XSxcclxuICAgICAgICAgIFswLCBNYXRoLlBJIC8gMiwgMF1cclxuICAgICAgICBdXHJcbiAgICAgIF0sXHJcbiAgICAgIFhaOiBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IE1lc2gobmV3IEJveEdlb21ldHJ5KDAuMiwgMC4yLCAwLjAxKSwgbWF0SW52aXNpYmxlKSxcclxuICAgICAgICAgIFswLjE1LCAwLCAwLjE1XSxcclxuICAgICAgICAgIFstTWF0aC5QSSAvIDIsIDAsIDBdXHJcbiAgICAgICAgXVxyXG4gICAgICBdLFxyXG4gICAgICBYWVo6IFtbbmV3IE1lc2gobmV3IEJveEdlb21ldHJ5KDAuMiwgMC4yLCAwLjIpLCBtYXRJbnZpc2libGUpLCBbMCwgMCwgMF1dXVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhlbHBlclNjYWxlID0ge1xyXG4gICAgICBYOiBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgbmV3IExpbmUobGluZUdlb21ldHJ5LCBtYXRIZWxwZXIuY2xvbmUoKSksXHJcbiAgICAgICAgICBbLTFlMywgMCwgMF0sXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgWzFlNiwgMSwgMV0sXHJcbiAgICAgICAgICAnaGVscGVyJ1xyXG4gICAgICAgIF1cclxuICAgICAgXSxcclxuICAgICAgWTogW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgIG5ldyBMaW5lKGxpbmVHZW9tZXRyeSwgbWF0SGVscGVyLmNsb25lKCkpLFxyXG4gICAgICAgICAgWzAsIC0xZTMsIDBdLFxyXG4gICAgICAgICAgWzAsIDAsIE1hdGguUEkgLyAyXSxcclxuICAgICAgICAgIFsxZTYsIDEsIDFdLFxyXG4gICAgICAgICAgJ2hlbHBlcidcclxuICAgICAgICBdXHJcbiAgICAgIF0sXHJcbiAgICAgIFo6IFtcclxuICAgICAgICBbXHJcbiAgICAgICAgICBuZXcgTGluZShsaW5lR2VvbWV0cnksIG1hdEhlbHBlci5jbG9uZSgpKSxcclxuICAgICAgICAgIFswLCAwLCAtMWUzXSxcclxuICAgICAgICAgIFswLCAtTWF0aC5QSSAvIDIsIDBdLFxyXG4gICAgICAgICAgWzFlNiwgMSwgMV0sXHJcbiAgICAgICAgICAnaGVscGVyJ1xyXG4gICAgICAgIF1cclxuICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZXMgYW4gT2JqZWN0M0Qgd2l0aCBnaXptb3MgZGVzY3JpYmVkIGluIGN1c3RvbSBoaWVyYXJjaHkgZGVmaW5pdGlvbi5cclxuXHJcbiAgICBmdW5jdGlvbiBzZXR1cEdpem1vKGdpem1vTWFwKSB7XHJcbiAgICAgIGNvbnN0IGdpem1vID0gbmV3IE9iamVjdDNEKClcclxuXHJcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBnaXptb01hcCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBnaXptb01hcFtuYW1lXS5sZW5ndGg7IGktLTsgKSB7XHJcbiAgICAgICAgICBjb25zdCBvYmplY3QgPSBnaXptb01hcFtuYW1lXVtpXVswXS5jbG9uZSgpXHJcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdpem1vTWFwW25hbWVdW2ldWzFdXHJcbiAgICAgICAgICBjb25zdCByb3RhdGlvbiA9IGdpem1vTWFwW25hbWVdW2ldWzJdXHJcbiAgICAgICAgICBjb25zdCBzY2FsZSA9IGdpem1vTWFwW25hbWVdW2ldWzNdXHJcbiAgICAgICAgICBjb25zdCB0YWcgPSBnaXptb01hcFtuYW1lXVtpXVs0XVxyXG5cclxuICAgICAgICAgIC8vIG5hbWUgYW5kIHRhZyBwcm9wZXJ0aWVzIGFyZSBlc3NlbnRpYWwgZm9yIHBpY2tpbmcgYW5kIHVwZGF0aW5nIGxvZ2ljLlxyXG4gICAgICAgICAgb2JqZWN0Lm5hbWUgPSBuYW1lXHJcbiAgICAgICAgICBvYmplY3QudGFnID0gdGFnXHJcblxyXG4gICAgICAgICAgaWYgKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQocG9zaXRpb25bMF0sIHBvc2l0aW9uWzFdLCBwb3NpdGlvblsyXSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocm90YXRpb24pIHtcclxuICAgICAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnNldChyb3RhdGlvblswXSwgcm90YXRpb25bMV0sIHJvdGF0aW9uWzJdKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChzY2FsZSkge1xyXG4gICAgICAgICAgICBvYmplY3Quc2NhbGUuc2V0KHNjYWxlWzBdLCBzY2FsZVsxXSwgc2NhbGVbMl0pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgb2JqZWN0LnVwZGF0ZU1hdHJpeCgpXHJcblxyXG4gICAgICAgICAgY29uc3QgdGVtcEdlb21ldHJ5ID0gb2JqZWN0Lmdlb21ldHJ5LmNsb25lKClcclxuICAgICAgICAgIHRlbXBHZW9tZXRyeS5hcHBseU1hdHJpeDQob2JqZWN0Lm1hdHJpeClcclxuICAgICAgICAgIG9iamVjdC5nZW9tZXRyeSA9IHRlbXBHZW9tZXRyeVxyXG4gICAgICAgICAgb2JqZWN0LnJlbmRlck9yZGVyID0gSW5maW5pdHlcclxuXHJcbiAgICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KDAsIDAsIDApXHJcbiAgICAgICAgICBvYmplY3Qucm90YXRpb24uc2V0KDAsIDAsIDApXHJcbiAgICAgICAgICBvYmplY3Quc2NhbGUuc2V0KDEsIDEsIDEpXHJcblxyXG4gICAgICAgICAgZ2l6bW8uYWRkKG9iamVjdClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBnaXptb1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdpem1vIGNyZWF0aW9uXHJcblxyXG4gICAgdGhpcy5naXptbyA9IHt9XHJcbiAgICB0aGlzLnBpY2tlciA9IHt9XHJcbiAgICB0aGlzLmhlbHBlciA9IHt9XHJcblxyXG4gICAgdGhpcy5hZGQoKHRoaXMuZ2l6bW9bJ3RyYW5zbGF0ZSddID0gc2V0dXBHaXptbyhnaXptb1RyYW5zbGF0ZSkpKVxyXG4gICAgdGhpcy5hZGQoKHRoaXMuZ2l6bW9bJ3JvdGF0ZSddID0gc2V0dXBHaXptbyhnaXptb1JvdGF0ZSkpKVxyXG4gICAgdGhpcy5hZGQoKHRoaXMuZ2l6bW9bJ3NjYWxlJ10gPSBzZXR1cEdpem1vKGdpem1vU2NhbGUpKSlcclxuICAgIHRoaXMuYWRkKCh0aGlzLnBpY2tlclsndHJhbnNsYXRlJ10gPSBzZXR1cEdpem1vKHBpY2tlclRyYW5zbGF0ZSkpKVxyXG4gICAgdGhpcy5hZGQoKHRoaXMucGlja2VyWydyb3RhdGUnXSA9IHNldHVwR2l6bW8ocGlja2VyUm90YXRlKSkpXHJcbiAgICB0aGlzLmFkZCgodGhpcy5waWNrZXJbJ3NjYWxlJ10gPSBzZXR1cEdpem1vKHBpY2tlclNjYWxlKSkpXHJcbiAgICB0aGlzLmFkZCgodGhpcy5oZWxwZXJbJ3RyYW5zbGF0ZSddID0gc2V0dXBHaXptbyhoZWxwZXJUcmFuc2xhdGUpKSlcclxuICAgIHRoaXMuYWRkKCh0aGlzLmhlbHBlclsncm90YXRlJ10gPSBzZXR1cEdpem1vKGhlbHBlclJvdGF0ZSkpKVxyXG4gICAgdGhpcy5hZGQoKHRoaXMuaGVscGVyWydzY2FsZSddID0gc2V0dXBHaXptbyhoZWxwZXJTY2FsZSkpKVxyXG5cclxuICAgIC8vIFBpY2tlcnMgc2hvdWxkIGJlIGhpZGRlbiBhbHdheXNcclxuXHJcbiAgICB0aGlzLnBpY2tlclsndHJhbnNsYXRlJ10udmlzaWJsZSA9IGZhbHNlXHJcbiAgICB0aGlzLnBpY2tlclsncm90YXRlJ10udmlzaWJsZSA9IGZhbHNlXHJcbiAgICB0aGlzLnBpY2tlclsnc2NhbGUnXS52aXNpYmxlID0gZmFsc2VcclxuICB9XHJcblxyXG4gIC8vIHVwZGF0ZU1hdHJpeFdvcmxkIHdpbGwgdXBkYXRlIHRyYW5zZm9ybWF0aW9ucyBhbmQgYXBwZWFyYW5jZSBvZiBpbmRpdmlkdWFsIGhhbmRsZXNcclxuXHJcbiAgdXBkYXRlTWF0cml4V29ybGQoZm9yY2UpIHtcclxuICAgIGNvbnN0IHNwYWNlID0gdGhpcy5tb2RlID09PSAnc2NhbGUnID8gJ2xvY2FsJyA6IHRoaXMuc3BhY2UgLy8gc2NhbGUgYWx3YXlzIG9yaWVudGVkIHRvIGxvY2FsIHJvdGF0aW9uXHJcblxyXG4gICAgY29uc3QgcXVhdGVybmlvbiA9IHNwYWNlID09PSAnbG9jYWwnID8gdGhpcy53b3JsZFF1YXRlcm5pb24gOiBfaWRlbnRpdHlRdWF0ZXJuaW9uXHJcblxyXG4gICAgLy8gU2hvdyBvbmx5IGdpem1vcyBmb3IgY3VycmVudCB0cmFuc2Zvcm0gbW9kZVxyXG5cclxuICAgIHRoaXMuZ2l6bW9bJ3RyYW5zbGF0ZSddLnZpc2libGUgPSB0aGlzLm1vZGUgPT09ICd0cmFuc2xhdGUnXHJcbiAgICB0aGlzLmdpem1vWydyb3RhdGUnXS52aXNpYmxlID0gdGhpcy5tb2RlID09PSAncm90YXRlJ1xyXG4gICAgdGhpcy5naXptb1snc2NhbGUnXS52aXNpYmxlID0gdGhpcy5tb2RlID09PSAnc2NhbGUnXHJcblxyXG4gICAgdGhpcy5oZWxwZXJbJ3RyYW5zbGF0ZSddLnZpc2libGUgPSB0aGlzLm1vZGUgPT09ICd0cmFuc2xhdGUnXHJcbiAgICB0aGlzLmhlbHBlclsncm90YXRlJ10udmlzaWJsZSA9IHRoaXMubW9kZSA9PT0gJ3JvdGF0ZSdcclxuICAgIHRoaXMuaGVscGVyWydzY2FsZSddLnZpc2libGUgPSB0aGlzLm1vZGUgPT09ICdzY2FsZSdcclxuXHJcbiAgICBsZXQgaGFuZGxlcyA9IFtdXHJcbiAgICBoYW5kbGVzID0gaGFuZGxlcy5jb25jYXQodGhpcy5waWNrZXJbdGhpcy5tb2RlXS5jaGlsZHJlbilcclxuICAgIGhhbmRsZXMgPSBoYW5kbGVzLmNvbmNhdCh0aGlzLmdpem1vW3RoaXMubW9kZV0uY2hpbGRyZW4pXHJcbiAgICBoYW5kbGVzID0gaGFuZGxlcy5jb25jYXQodGhpcy5oZWxwZXJbdGhpcy5tb2RlXS5jaGlsZHJlbilcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaGFuZGxlID0gaGFuZGxlc1tpXVxyXG5cclxuICAgICAgLy8gaGlkZSBhbGlnbmVkIHRvIGNhbWVyYVxyXG5cclxuICAgICAgaGFuZGxlLnZpc2libGUgPSB0cnVlXHJcbiAgICAgIGhhbmRsZS5yb3RhdGlvbi5zZXQoMCwgMCwgMClcclxuICAgICAgaGFuZGxlLnBvc2l0aW9uLmNvcHkodGhpcy53b3JsZFBvc2l0aW9uKVxyXG5cclxuICAgICAgbGV0IGZhY3RvclxyXG5cclxuICAgICAgaWYgKHRoaXMuY2FtZXJhLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSB7XHJcbiAgICAgICAgZmFjdG9yID0gKHRoaXMuY2FtZXJhLnRvcCAtIHRoaXMuY2FtZXJhLmJvdHRvbSkgLyB0aGlzLmNhbWVyYS56b29tXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yID1cclxuICAgICAgICAgIHRoaXMud29ybGRQb3NpdGlvbi5kaXN0YW5jZVRvKHRoaXMuY2FtZXJhUG9zaXRpb24pICpcclxuICAgICAgICAgIE1hdGgubWluKFxyXG4gICAgICAgICAgICAoMS45ICogTWF0aC50YW4oKE1hdGguUEkgKiB0aGlzLmNhbWVyYS5mb3YpIC8gMzYwKSkgLyB0aGlzLmNhbWVyYS56b29tLFxyXG4gICAgICAgICAgICA3XHJcbiAgICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGhhbmRsZS5zY2FsZS5zZXQoMSwgMSwgMSkubXVsdGlwbHlTY2FsYXIoKGZhY3RvciAqIHRoaXMuc2l6ZSkgLyA0KVxyXG5cclxuICAgICAgLy8gVE9ETzogc2ltcGxpZnkgaGVscGVycyBhbmQgY29uc2lkZXIgZGVjb3VwbGluZyBmcm9tIGdpem1vXHJcblxyXG4gICAgICBpZiAoaGFuZGxlLnRhZyA9PT0gJ2hlbHBlcicpIHtcclxuICAgICAgICBoYW5kbGUudmlzaWJsZSA9IGZhbHNlXHJcblxyXG4gICAgICAgIGlmIChoYW5kbGUubmFtZSA9PT0gJ0FYSVMnKSB7XHJcbiAgICAgICAgICBoYW5kbGUudmlzaWJsZSA9ICEhdGhpcy5heGlzXHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuYXhpcyA9PT0gJ1gnKSB7XHJcbiAgICAgICAgICAgIF90ZW1wUXVhdGVybmlvbi5zZXRGcm9tRXVsZXIoX3RlbXBFdWxlci5zZXQoMCwgMCwgMCkpXHJcbiAgICAgICAgICAgIGhhbmRsZS5xdWF0ZXJuaW9uLmNvcHkocXVhdGVybmlvbikubXVsdGlwbHkoX3RlbXBRdWF0ZXJuaW9uKVxyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIE1hdGguYWJzKFxyXG4gICAgICAgICAgICAgICAgX2FsaWduVmVjdG9yLmNvcHkoX3VuaXRYKS5hcHBseVF1YXRlcm5pb24ocXVhdGVybmlvbikuZG90KHRoaXMuZXllKVxyXG4gICAgICAgICAgICAgICkgPiAwLjlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaGFuZGxlLnZpc2libGUgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuYXhpcyA9PT0gJ1knKSB7XHJcbiAgICAgICAgICAgIF90ZW1wUXVhdGVybmlvbi5zZXRGcm9tRXVsZXIoX3RlbXBFdWxlci5zZXQoMCwgMCwgTWF0aC5QSSAvIDIpKVxyXG4gICAgICAgICAgICBoYW5kbGUucXVhdGVybmlvbi5jb3B5KHF1YXRlcm5pb24pLm11bHRpcGx5KF90ZW1wUXVhdGVybmlvbilcclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBNYXRoLmFicyhcclxuICAgICAgICAgICAgICAgIF9hbGlnblZlY3Rvci5jb3B5KF91bml0WSkuYXBwbHlRdWF0ZXJuaW9uKHF1YXRlcm5pb24pLmRvdCh0aGlzLmV5ZSlcclxuICAgICAgICAgICAgICApID4gMC45XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGhhbmRsZS52aXNpYmxlID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmF4aXMgPT09ICdaJykge1xyXG4gICAgICAgICAgICBfdGVtcFF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKF90ZW1wRXVsZXIuc2V0KDAsIE1hdGguUEkgLyAyLCAwKSlcclxuICAgICAgICAgICAgaGFuZGxlLnF1YXRlcm5pb24uY29weShxdWF0ZXJuaW9uKS5tdWx0aXBseShfdGVtcFF1YXRlcm5pb24pXHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgTWF0aC5hYnMoXHJcbiAgICAgICAgICAgICAgICBfYWxpZ25WZWN0b3IuY29weShfdW5pdFopLmFwcGx5UXVhdGVybmlvbihxdWF0ZXJuaW9uKS5kb3QodGhpcy5leWUpXHJcbiAgICAgICAgICAgICAgKSA+IDAuOVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBoYW5kbGUudmlzaWJsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5heGlzID09PSAnWFlaRScpIHtcclxuICAgICAgICAgICAgX3RlbXBRdWF0ZXJuaW9uLnNldEZyb21FdWxlcihfdGVtcEV1bGVyLnNldCgwLCBNYXRoLlBJIC8gMiwgMCkpXHJcbiAgICAgICAgICAgIF9hbGlnblZlY3Rvci5jb3B5KHRoaXMucm90YXRpb25BeGlzKVxyXG4gICAgICAgICAgICBoYW5kbGUucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoXHJcbiAgICAgICAgICAgICAgX2xvb2tBdE1hdHJpeC5sb29rQXQoX3plcm9WZWN0b3IsIF9hbGlnblZlY3RvciwgX3VuaXRZKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGhhbmRsZS5xdWF0ZXJuaW9uLm11bHRpcGx5KF90ZW1wUXVhdGVybmlvbilcclxuICAgICAgICAgICAgaGFuZGxlLnZpc2libGUgPSB0aGlzLmRyYWdnaW5nXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuYXhpcyA9PT0gJ0UnKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZS52aXNpYmxlID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZS5uYW1lID09PSAnU1RBUlQnKSB7XHJcbiAgICAgICAgICBoYW5kbGUucG9zaXRpb24uY29weSh0aGlzLndvcmxkUG9zaXRpb25TdGFydClcclxuICAgICAgICAgIGhhbmRsZS52aXNpYmxlID0gdGhpcy5kcmFnZ2luZ1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlLm5hbWUgPT09ICdFTkQnKSB7XHJcbiAgICAgICAgICBoYW5kbGUucG9zaXRpb24uY29weSh0aGlzLndvcmxkUG9zaXRpb24pXHJcbiAgICAgICAgICBoYW5kbGUudmlzaWJsZSA9IHRoaXMuZHJhZ2dpbmdcclxuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZS5uYW1lID09PSAnREVMVEEnKSB7XHJcbiAgICAgICAgICBoYW5kbGUucG9zaXRpb24uY29weSh0aGlzLndvcmxkUG9zaXRpb25TdGFydClcclxuICAgICAgICAgIGhhbmRsZS5xdWF0ZXJuaW9uLmNvcHkodGhpcy53b3JsZFF1YXRlcm5pb25TdGFydClcclxuICAgICAgICAgIF90ZW1wVmVjdG9yXHJcbiAgICAgICAgICAgIC5zZXQoMWUtMTAsIDFlLTEwLCAxZS0xMClcclxuICAgICAgICAgICAgLmFkZCh0aGlzLndvcmxkUG9zaXRpb25TdGFydClcclxuICAgICAgICAgICAgLnN1Yih0aGlzLndvcmxkUG9zaXRpb24pXHJcbiAgICAgICAgICAgIC5tdWx0aXBseVNjYWxhcigtMSlcclxuICAgICAgICAgIF90ZW1wVmVjdG9yLmFwcGx5UXVhdGVybmlvbih0aGlzLndvcmxkUXVhdGVybmlvblN0YXJ0LmNsb25lKCkuaW52ZXJ0KCkpXHJcbiAgICAgICAgICBoYW5kbGUuc2NhbGUuY29weShfdGVtcFZlY3RvcilcclxuICAgICAgICAgIGhhbmRsZS52aXNpYmxlID0gdGhpcy5kcmFnZ2luZ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBoYW5kbGUucXVhdGVybmlvbi5jb3B5KHF1YXRlcm5pb24pXHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcclxuICAgICAgICAgICAgaGFuZGxlLnBvc2l0aW9uLmNvcHkodGhpcy53b3JsZFBvc2l0aW9uU3RhcnQpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBoYW5kbGUucG9zaXRpb24uY29weSh0aGlzLndvcmxkUG9zaXRpb24pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuYXhpcykge1xyXG4gICAgICAgICAgICBoYW5kbGUudmlzaWJsZSA9IHRoaXMuYXhpcy5zZWFyY2goaGFuZGxlLm5hbWUpICE9PSAtMVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgdXBkYXRpbmcgaGVscGVyLCBza2lwIHJlc3Qgb2YgdGhlIGxvb3BcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBbGlnbiBoYW5kbGVzIHRvIGN1cnJlbnQgbG9jYWwgb3Igd29ybGQgcm90YXRpb25cclxuXHJcbiAgICAgIGhhbmRsZS5xdWF0ZXJuaW9uLmNvcHkocXVhdGVybmlvbilcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICd0cmFuc2xhdGUnIHx8IHRoaXMubW9kZSA9PT0gJ3NjYWxlJykge1xyXG4gICAgICAgIC8vIEhpZGUgdHJhbnNsYXRlIGFuZCBzY2FsZSBheGlzIGZhY2luZyB0aGUgY2FtZXJhXHJcblxyXG4gICAgICAgIGNvbnN0IEFYSVNfSElERV9USFJFU0hPTEQgPSAwLjk5XHJcbiAgICAgICAgY29uc3QgUExBTkVfSElERV9USFJFU0hPTEQgPSAwLjJcclxuXHJcbiAgICAgICAgaWYgKGhhbmRsZS5uYW1lID09PSAnWCcpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgTWF0aC5hYnMoXHJcbiAgICAgICAgICAgICAgX2FsaWduVmVjdG9yLmNvcHkoX3VuaXRYKS5hcHBseVF1YXRlcm5pb24ocXVhdGVybmlvbikuZG90KHRoaXMuZXllKVxyXG4gICAgICAgICAgICApID4gQVhJU19ISURFX1RIUkVTSE9MRFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZS5zY2FsZS5zZXQoMWUtMTAsIDFlLTEwLCAxZS0xMClcclxuICAgICAgICAgICAgaGFuZGxlLnZpc2libGUgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhhbmRsZS5uYW1lID09PSAnWScpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgTWF0aC5hYnMoXHJcbiAgICAgICAgICAgICAgX2FsaWduVmVjdG9yLmNvcHkoX3VuaXRZKS5hcHBseVF1YXRlcm5pb24ocXVhdGVybmlvbikuZG90KHRoaXMuZXllKVxyXG4gICAgICAgICAgICApID4gQVhJU19ISURFX1RIUkVTSE9MRFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZS5zY2FsZS5zZXQoMWUtMTAsIDFlLTEwLCAxZS0xMClcclxuICAgICAgICAgICAgaGFuZGxlLnZpc2libGUgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhhbmRsZS5uYW1lID09PSAnWicpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgTWF0aC5hYnMoXHJcbiAgICAgICAgICAgICAgX2FsaWduVmVjdG9yLmNvcHkoX3VuaXRaKS5hcHBseVF1YXRlcm5pb24ocXVhdGVybmlvbikuZG90KHRoaXMuZXllKVxyXG4gICAgICAgICAgICApID4gQVhJU19ISURFX1RIUkVTSE9MRFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZS5zY2FsZS5zZXQoMWUtMTAsIDFlLTEwLCAxZS0xMClcclxuICAgICAgICAgICAgaGFuZGxlLnZpc2libGUgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhhbmRsZS5uYW1lID09PSAnWFknKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIE1hdGguYWJzKFxyXG4gICAgICAgICAgICAgIF9hbGlnblZlY3Rvci5jb3B5KF91bml0WikuYXBwbHlRdWF0ZXJuaW9uKHF1YXRlcm5pb24pLmRvdCh0aGlzLmV5ZSlcclxuICAgICAgICAgICAgKSA8IFBMQU5FX0hJREVfVEhSRVNIT0xEXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaGFuZGxlLnNjYWxlLnNldCgxZS0xMCwgMWUtMTAsIDFlLTEwKVxyXG4gICAgICAgICAgICBoYW5kbGUudmlzaWJsZSA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFuZGxlLm5hbWUgPT09ICdZWicpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgTWF0aC5hYnMoXHJcbiAgICAgICAgICAgICAgX2FsaWduVmVjdG9yLmNvcHkoX3VuaXRYKS5hcHBseVF1YXRlcm5pb24ocXVhdGVybmlvbikuZG90KHRoaXMuZXllKVxyXG4gICAgICAgICAgICApIDwgUExBTkVfSElERV9USFJFU0hPTERcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBoYW5kbGUuc2NhbGUuc2V0KDFlLTEwLCAxZS0xMCwgMWUtMTApXHJcbiAgICAgICAgICAgIGhhbmRsZS52aXNpYmxlID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYW5kbGUubmFtZSA9PT0gJ1haJykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBNYXRoLmFicyhcclxuICAgICAgICAgICAgICBfYWxpZ25WZWN0b3IuY29weShfdW5pdFkpLmFwcGx5UXVhdGVybmlvbihxdWF0ZXJuaW9uKS5kb3QodGhpcy5leWUpXHJcbiAgICAgICAgICAgICkgPCBQTEFORV9ISURFX1RIUkVTSE9MRFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZS5zY2FsZS5zZXQoMWUtMTAsIDFlLTEwLCAxZS0xMClcclxuICAgICAgICAgICAgaGFuZGxlLnZpc2libGUgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdyb3RhdGUnKSB7XHJcbiAgICAgICAgLy8gQWxpZ24gaGFuZGxlcyB0byBjdXJyZW50IGxvY2FsIG9yIHdvcmxkIHJvdGF0aW9uXHJcblxyXG4gICAgICAgIF90ZW1wUXVhdGVybmlvbjIuY29weShxdWF0ZXJuaW9uKVxyXG4gICAgICAgIF9hbGlnblZlY3RvclxyXG4gICAgICAgICAgLmNvcHkodGhpcy5leWUpXHJcbiAgICAgICAgICAuYXBwbHlRdWF0ZXJuaW9uKF90ZW1wUXVhdGVybmlvbi5jb3B5KHF1YXRlcm5pb24pLmludmVydCgpKVxyXG5cclxuICAgICAgICBpZiAoaGFuZGxlLm5hbWUuc2VhcmNoKCdFJykgIT09IC0xKSB7XHJcbiAgICAgICAgICBoYW5kbGUucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoXHJcbiAgICAgICAgICAgIF9sb29rQXRNYXRyaXgubG9va0F0KHRoaXMuZXllLCBfemVyb1ZlY3RvciwgX3VuaXRZKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhhbmRsZS5uYW1lID09PSAnWCcpIHtcclxuICAgICAgICAgIF90ZW1wUXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKFxyXG4gICAgICAgICAgICBfdW5pdFgsXHJcbiAgICAgICAgICAgIE1hdGguYXRhbjIoLV9hbGlnblZlY3Rvci55LCBfYWxpZ25WZWN0b3IueilcclxuICAgICAgICAgIClcclxuICAgICAgICAgIF90ZW1wUXVhdGVybmlvbi5tdWx0aXBseVF1YXRlcm5pb25zKF90ZW1wUXVhdGVybmlvbjIsIF90ZW1wUXVhdGVybmlvbilcclxuICAgICAgICAgIGhhbmRsZS5xdWF0ZXJuaW9uLmNvcHkoX3RlbXBRdWF0ZXJuaW9uKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhhbmRsZS5uYW1lID09PSAnWScpIHtcclxuICAgICAgICAgIF90ZW1wUXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKFxyXG4gICAgICAgICAgICBfdW5pdFksXHJcbiAgICAgICAgICAgIE1hdGguYXRhbjIoX2FsaWduVmVjdG9yLngsIF9hbGlnblZlY3Rvci56KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgX3RlbXBRdWF0ZXJuaW9uLm11bHRpcGx5UXVhdGVybmlvbnMoX3RlbXBRdWF0ZXJuaW9uMiwgX3RlbXBRdWF0ZXJuaW9uKVxyXG4gICAgICAgICAgaGFuZGxlLnF1YXRlcm5pb24uY29weShfdGVtcFF1YXRlcm5pb24pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFuZGxlLm5hbWUgPT09ICdaJykge1xyXG4gICAgICAgICAgX3RlbXBRdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoXHJcbiAgICAgICAgICAgIF91bml0WixcclxuICAgICAgICAgICAgTWF0aC5hdGFuMihfYWxpZ25WZWN0b3IueSwgX2FsaWduVmVjdG9yLngpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBfdGVtcFF1YXRlcm5pb24ubXVsdGlwbHlRdWF0ZXJuaW9ucyhfdGVtcFF1YXRlcm5pb24yLCBfdGVtcFF1YXRlcm5pb24pXHJcbiAgICAgICAgICBoYW5kbGUucXVhdGVybmlvbi5jb3B5KF90ZW1wUXVhdGVybmlvbilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhpZGUgZGlzYWJsZWQgYXhlc1xyXG4gICAgICBoYW5kbGUudmlzaWJsZSA9IGhhbmRsZS52aXNpYmxlICYmIChoYW5kbGUubmFtZS5pbmRleE9mKCdYJykgPT09IC0xIHx8IHRoaXMuc2hvd1gpXHJcbiAgICAgIGhhbmRsZS52aXNpYmxlID0gaGFuZGxlLnZpc2libGUgJiYgKGhhbmRsZS5uYW1lLmluZGV4T2YoJ1knKSA9PT0gLTEgfHwgdGhpcy5zaG93WSlcclxuICAgICAgaGFuZGxlLnZpc2libGUgPSBoYW5kbGUudmlzaWJsZSAmJiAoaGFuZGxlLm5hbWUuaW5kZXhPZignWicpID09PSAtMSB8fCB0aGlzLnNob3daKVxyXG4gICAgICBoYW5kbGUudmlzaWJsZSA9XHJcbiAgICAgICAgaGFuZGxlLnZpc2libGUgJiZcclxuICAgICAgICAoaGFuZGxlLm5hbWUuaW5kZXhPZignRScpID09PSAtMSB8fCAodGhpcy5zaG93WCAmJiB0aGlzLnNob3dZICYmIHRoaXMuc2hvd1opKVxyXG5cclxuICAgICAgLy8gaGlnaGxpZ2h0IHNlbGVjdGVkIGF4aXNcclxuXHJcbiAgICAgIGhhbmRsZS5tYXRlcmlhbC5fY29sb3IgPSBoYW5kbGUubWF0ZXJpYWwuX2NvbG9yIHx8IGhhbmRsZS5tYXRlcmlhbC5jb2xvci5jbG9uZSgpXHJcbiAgICAgIGhhbmRsZS5tYXRlcmlhbC5fb3BhY2l0eSA9IGhhbmRsZS5tYXRlcmlhbC5fb3BhY2l0eSB8fCBoYW5kbGUubWF0ZXJpYWwub3BhY2l0eVxyXG5cclxuICAgICAgaGFuZGxlLm1hdGVyaWFsLmNvbG9yLmNvcHkoaGFuZGxlLm1hdGVyaWFsLl9jb2xvcilcclxuICAgICAgaGFuZGxlLm1hdGVyaWFsLm9wYWNpdHkgPSBoYW5kbGUubWF0ZXJpYWwuX29wYWNpdHlcclxuXHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZWQgJiYgdGhpcy5heGlzKSB7XHJcbiAgICAgICAgaWYgKGhhbmRsZS5uYW1lID09PSB0aGlzLmF4aXMpIHtcclxuICAgICAgICAgIGhhbmRsZS5tYXRlcmlhbC5jb2xvci5zZXRIZXgoMHhmZmZmMDApXHJcbiAgICAgICAgICBoYW5kbGUubWF0ZXJpYWwub3BhY2l0eSA9IDEuMFxyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLmF4aXMuc3BsaXQoJycpLnNvbWUoZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYW1lID09PSBhXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaGFuZGxlLm1hdGVyaWFsLmNvbG9yLnNldEhleCgweGZmZmYwMClcclxuICAgICAgICAgIGhhbmRsZS5tYXRlcmlhbC5vcGFjaXR5ID0gMS4wXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIudXBkYXRlTWF0cml4V29ybGQoZm9yY2UpXHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG5cclxuY2xhc3MgVHJhbnNmb3JtQ29udHJvbHNQbGFuZSBleHRlbmRzIE1lc2gge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoXHJcbiAgICAgIG5ldyBQbGFuZUdlb21ldHJ5KDEwMDAwMCwgMTAwMDAwLCAyLCAyKSxcclxuICAgICAgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcclxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgICB3aXJlZnJhbWU6IHRydWUsXHJcbiAgICAgICAgc2lkZTogRG91YmxlU2lkZSxcclxuICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICBvcGFjaXR5OiAwLjEsXHJcbiAgICAgICAgdG9uZU1hcHBlZDogZmFsc2VcclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgICB0aGlzLmlzVHJhbnNmb3JtQ29udHJvbHNQbGFuZSA9IHRydWVcclxuXHJcbiAgICB0aGlzLnR5cGUgPSAnVHJhbnNmb3JtQ29udHJvbHNQbGFuZSdcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1hdHJpeFdvcmxkKGZvcmNlKSB7XHJcbiAgICBsZXQgc3BhY2UgPSB0aGlzLnNwYWNlXHJcblxyXG4gICAgdGhpcy5wb3NpdGlvbi5jb3B5KHRoaXMud29ybGRQb3NpdGlvbilcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2NhbGUnKSBzcGFjZSA9ICdsb2NhbCcgLy8gc2NhbGUgYWx3YXlzIG9yaWVudGVkIHRvIGxvY2FsIHJvdGF0aW9uXHJcblxyXG4gICAgX3YxXHJcbiAgICAgIC5jb3B5KF91bml0WClcclxuICAgICAgLmFwcGx5UXVhdGVybmlvbihzcGFjZSA9PT0gJ2xvY2FsJyA/IHRoaXMud29ybGRRdWF0ZXJuaW9uIDogX2lkZW50aXR5UXVhdGVybmlvbilcclxuICAgIF92MlxyXG4gICAgICAuY29weShfdW5pdFkpXHJcbiAgICAgIC5hcHBseVF1YXRlcm5pb24oc3BhY2UgPT09ICdsb2NhbCcgPyB0aGlzLndvcmxkUXVhdGVybmlvbiA6IF9pZGVudGl0eVF1YXRlcm5pb24pXHJcbiAgICBfdjNcclxuICAgICAgLmNvcHkoX3VuaXRaKVxyXG4gICAgICAuYXBwbHlRdWF0ZXJuaW9uKHNwYWNlID09PSAnbG9jYWwnID8gdGhpcy53b3JsZFF1YXRlcm5pb24gOiBfaWRlbnRpdHlRdWF0ZXJuaW9uKVxyXG5cclxuICAgIC8vIEFsaWduIHRoZSBwbGFuZSBmb3IgY3VycmVudCB0cmFuc2Zvcm0gbW9kZSwgYXhpcyBhbmQgc3BhY2UuXHJcblxyXG4gICAgX2FsaWduVmVjdG9yLmNvcHkoX3YyKVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XHJcbiAgICAgIGNhc2UgJ3RyYW5zbGF0ZSc6XHJcbiAgICAgIGNhc2UgJ3NjYWxlJzpcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuYXhpcykge1xyXG4gICAgICAgICAgY2FzZSAnWCc6XHJcbiAgICAgICAgICAgIF9hbGlnblZlY3Rvci5jb3B5KHRoaXMuZXllKS5jcm9zcyhfdjEpXHJcbiAgICAgICAgICAgIF9kaXJWZWN0b3IuY29weShfdjEpLmNyb3NzKF9hbGlnblZlY3RvcilcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGNhc2UgJ1knOlxyXG4gICAgICAgICAgICBfYWxpZ25WZWN0b3IuY29weSh0aGlzLmV5ZSkuY3Jvc3MoX3YyKVxyXG4gICAgICAgICAgICBfZGlyVmVjdG9yLmNvcHkoX3YyKS5jcm9zcyhfYWxpZ25WZWN0b3IpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgICAgX2FsaWduVmVjdG9yLmNvcHkodGhpcy5leWUpLmNyb3NzKF92MylcclxuICAgICAgICAgICAgX2RpclZlY3Rvci5jb3B5KF92MykuY3Jvc3MoX2FsaWduVmVjdG9yKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAnWFknOlxyXG4gICAgICAgICAgICBfZGlyVmVjdG9yLmNvcHkoX3YzKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAnWVonOlxyXG4gICAgICAgICAgICBfZGlyVmVjdG9yLmNvcHkoX3YxKVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAnWFonOlxyXG4gICAgICAgICAgICBfYWxpZ25WZWN0b3IuY29weShfdjMpXHJcbiAgICAgICAgICAgIF9kaXJWZWN0b3IuY29weShfdjIpXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICdYWVonOlxyXG4gICAgICAgICAgY2FzZSAnRSc6XHJcbiAgICAgICAgICAgIF9kaXJWZWN0b3Iuc2V0KDAsIDAsIDApXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdyb3RhdGUnOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3Igcm90YXRlXHJcbiAgICAgICAgX2RpclZlY3Rvci5zZXQoMCwgMCwgMClcclxuICAgIH1cclxuXHJcbiAgICBpZiAoX2RpclZlY3Rvci5sZW5ndGgoKSA9PT0gMCkge1xyXG4gICAgICAvLyBJZiBpbiByb3RhdGUgbW9kZSwgbWFrZSB0aGUgcGxhbmUgcGFyYWxsZWwgdG8gY2FtZXJhXHJcbiAgICAgIHRoaXMucXVhdGVybmlvbi5jb3B5KHRoaXMuY2FtZXJhUXVhdGVybmlvbilcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIF90ZW1wTWF0cml4Lmxvb2tBdChfdGVtcFZlY3Rvci5zZXQoMCwgMCwgMCksIF9kaXJWZWN0b3IsIF9hbGlnblZlY3RvcilcclxuXHJcbiAgICAgIHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoX3RlbXBNYXRyaXgpXHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIudXBkYXRlTWF0cml4V29ybGQoZm9yY2UpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBUcmFuc2Zvcm1Db250cm9scywgVHJhbnNmb3JtQ29udHJvbHNHaXptbywgVHJhbnNmb3JtQ29udHJvbHNQbGFuZSB9XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xyXG5pbXBvcnQge1xyXG4gIEdyb3VwLFxyXG4gIEJveDMsXHJcbiAgQnVmZmVyR2VvbWV0cnksXHJcbiAgTWVzaCxcclxuICBWZWN0b3IzLFxyXG4gIFBsYW5lLFxyXG4gIEJ1ZmZlckF0dHJpYnV0ZSxcclxuICBSYXljYXN0ZXIsXHJcbiAgRG91YmxlU2lkZSxcclxuICBRdWF0ZXJuaW9uLFxyXG4gIE9iamVjdDNELFxyXG4gIE1hdHJpeDQsXHJcbiAgTWF0cml4MyxcclxuICBWZWN0b3IyLFxyXG4gIEludGVyc2VjdGlvbixcclxuICBGYWNlLFxyXG4gIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLFxyXG4gIER5bmFtaWNEcmF3VXNhZ2UsXHJcbiAgQ29sb3IsXHJcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsXHJcbiAgUGxhbmVHZW9tZXRyeSxcclxuICBGbG9hdDMyQnVmZmVyQXR0cmlidXRlLFxyXG4gIFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSxcclxuICBFdWxlclxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBpbnRlcnNlY3RPYmplY3RXaXRoUmF5LCBUcmFuc2Zvcm1Db250cm9scyB9IGZyb20gJy4uL1RyYW5zZm9ybUNvbnRyb2xzLmpzJ1xyXG5pbXBvcnQgeyBPQkIgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbWF0aC9PQkIuanMnXHJcbmltcG9ydCB7IHR5cGUgSVZpZXdlciwgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgQ2FtZXJhQ29udHJvbGxlciB9IGZyb20gJy4uL0NhbWVyYUNvbnRyb2xsZXIuanMnXHJcblxyXG5pbXBvcnQgeyBJbnB1dEV2ZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQvSW5wdXQuanMnXHJcbmltcG9ydCB7IFZlY3RvcjNMaWtlIH0gZnJvbSAnLi4vLi4vYmF0Y2hpbmcvQmF0Y2hPYmplY3QuanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5pbXBvcnQgeyBXb3JsZCB9IGZyb20gJy4uLy4uL1dvcmxkLmpzJ1xyXG5pbXBvcnQgeyBDYW1lcmFFdmVudCB9IGZyb20gJy4uLy4uL29iamVjdHMvU3BlY2tsZUNhbWVyYS5qcydcclxuXHJcbmltcG9ydCB7IExpbmVTZWdtZW50c0dlb21ldHJ5IH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xpbmVzL0xpbmVTZWdtZW50c0dlb21ldHJ5LmpzJ1xyXG5pbXBvcnQgeyBHZW9tZXRyeSB9IGZyb20gJy4uLy4uL2NvbnZlcnRlci9HZW9tZXRyeS5qcydcclxuaW1wb3J0IFNwZWNrbGVMaW5lTWF0ZXJpYWwgZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL1NwZWNrbGVMaW5lTWF0ZXJpYWwuanMnXHJcbmltcG9ydCB7IExpbmVTZWdtZW50czIgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbGluZXMvTGluZVNlZ21lbnRzMi5qcydcclxuaW1wb3J0IFNwZWNrbGVTdGFuZGFyZE1hdGVyaWFsIGZyb20gJy4uLy4uL21hdGVyaWFscy9TcGVja2xlU3RhbmRhcmRNYXRlcmlhbC5qcydcclxuaW1wb3J0IHsgRXh0ZW5zaW9uIH0gZnJvbSAnLi4vRXh0ZW5zaW9uLmpzJ1xyXG5pbXBvcnQgeyBTZWN0aW9uT3V0bGluZXMgfSBmcm9tICcuL1NlY3Rpb25PdXRsaW5lcy5qcydcclxuXHJcbmV4cG9ydCBlbnVtIFNlY3Rpb25Ub29sRXZlbnQge1xyXG4gIERyYWdTdGFydCA9ICdzZWN0aW9uLWJveC1kcmFnLXN0YXJ0JyxcclxuICBEcmFnRW5kID0gJ3NlY3Rpb24tYm94LWRyYWctZW5kJyxcclxuICBVcGRhdGVkID0gJ3NlY3Rpb24tYm94LWNoYW5nZWQnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VjdGlvblRvb2xFdmVudFBheWxvYWQge1xyXG4gIFtTZWN0aW9uVG9vbEV2ZW50LkRyYWdTdGFydF06IHZvaWRcclxuICBbU2VjdGlvblRvb2xFdmVudC5EcmFnRW5kXTogdm9pZFxyXG4gIFtTZWN0aW9uVG9vbEV2ZW50LlVwZGF0ZWRdOiBQbGFuZVtdXHJcbn1cclxuXHJcbi8qKiBCdWZmZXJzICovXHJcbmNvbnN0IF9tYXRyaXg0ID0gbmV3IE1hdHJpeDQoKVxyXG5jb25zdCBfcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKClcclxuY29uc3QgX3ZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF90ZW1wRXVsZXIgPSBuZXcgRXVsZXIoKVxyXG5jb25zdCBfdGVtcFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpXHJcblxyXG5jb25zdCB1bml0Q3ViZSA9IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gIC0xICogMC41LFxyXG4gIC0xICogMC41LFxyXG4gIC0xICogMC41LFxyXG5cclxuICAxICogMC41LFxyXG4gIC0xICogMC41LFxyXG4gIC0xICogMC41LFxyXG5cclxuICAxICogMC41LFxyXG4gIDEgKiAwLjUsXHJcbiAgLTEgKiAwLjUsXHJcblxyXG4gIC0xICogMC41LFxyXG4gIDEgKiAwLjUsXHJcbiAgLTEgKiAwLjUsXHJcblxyXG4gIC0xICogMC41LFxyXG4gIC0xICogMC41LFxyXG4gIDEgKiAwLjUsXHJcblxyXG4gIDEgKiAwLjUsXHJcbiAgLTEgKiAwLjUsXHJcbiAgMSAqIDAuNSxcclxuXHJcbiAgMSAqIDAuNSxcclxuICAxICogMC41LFxyXG4gIDEgKiAwLjUsXHJcblxyXG4gIC0xICogMC41LFxyXG4gIDEgKiAwLjUsXHJcbiAgMSAqIDAuNVxyXG5dKVxyXG5cclxuY29uc3QgdW5pdEN1YmVJbmRpY2VzOiBVaW50MTZBcnJheSA9IG5ldyBVaW50MTZBcnJheShbXHJcbiAgMCwgMSwgMywgMywgMSwgMiwgMSwgNSwgMiwgMiwgNSwgNiwgNSwgNCwgNiwgNiwgNCwgNywgNCwgMCwgNywgNywgMCwgMywgMywgMiwgNywgNywgMixcclxuICA2LCA0LCA1LCAwLCAwLCA1LCAxXHJcbl0pXHJcblxyXG5jb25zdCB1bml0Q3ViZUVkZ2VzOiBudW1iZXJbXSA9IFtcclxuICAvLyBCb3R0b20gRmFjZVxyXG4gIC0wLjUsIC0wLjUsIC0wLjUsIDAuNSwgLTAuNSwgLTAuNSxcclxuXHJcbiAgMC41LCAtMC41LCAtMC41LCAwLjUsIDAuNSwgLTAuNSxcclxuXHJcbiAgMC41LCAwLjUsIC0wLjUsIC0wLjUsIDAuNSwgLTAuNSxcclxuXHJcbiAgLTAuNSwgMC41LCAtMC41LCAtMC41LCAtMC41LCAtMC41LFxyXG5cclxuICAvLyBUb3AgRmFjZVxyXG4gIC0wLjUsIC0wLjUsIDAuNSwgMC41LCAtMC41LCAwLjUsXHJcblxyXG4gIDAuNSwgLTAuNSwgMC41LCAwLjUsIDAuNSwgMC41LFxyXG5cclxuICAwLjUsIDAuNSwgMC41LCAtMC41LCAwLjUsIDAuNSxcclxuXHJcbiAgLTAuNSwgMC41LCAwLjUsIC0wLjUsIC0wLjUsIDAuNSxcclxuXHJcbiAgLy8gU2lkZXNcclxuICAtMC41LCAtMC41LCAtMC41LCAtMC41LCAtMC41LCAwLjUsXHJcblxyXG4gIDAuNSwgLTAuNSwgMC41LCAwLjUsIC0wLjUsIC0wLjUsXHJcblxyXG4gIDAuNSwgMC41LCAwLjUsIDAuNSwgMC41LCAtMC41LFxyXG5cclxuICAtMC41LCAwLjUsIDAuNSwgLTAuNSwgMC41LCAtMC41XHJcbl1cclxuXHJcbmNvbnN0IHNjcmF0Y2hBcnJheTogbnVtYmVyW10gPSBuZXcgQXJyYXkodW5pdEN1YmVFZGdlcy5sZW5ndGgpXHJcbmNvbnN0IHNjcmF0Y2hQbGFuZUFycmF5OiBudW1iZXJbXSA9IG5ldyBBcnJheSgxMilcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWN0aW9uVG9vbCBleHRlbmRzIEV4dGVuc2lvbiB7XHJcbiAgcHVibGljIGdldCBpbmplY3QoKSB7XHJcbiAgICByZXR1cm4gW0NhbWVyYUNvbnRyb2xsZXJdXHJcbiAgfVxyXG5cclxuICAvKiogQ29uZmlndXJhYmxlIHJvdGF0aW9uIHNuYXAgYW5nbGUgaW4gcmFkaWFucy4gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSBzbmFwcGluZyAqL1xyXG4gIHB1YmxpYyByb3RhdGlvblNuYXBBbmdsZTogbnVtYmVyIHwgbnVsbCA9IE1hdGguUEkgLyAxMiAvLyAxNSBkZWdyZWVzIGJ5IGRlZmF1bHRcclxuXHJcbiAgLyoqIE5vdGU6IFJvdGF0aW9uIHNuYXBwaW5nIG9ubHkgYXBwbGllcyB0byBtb3VzZSBpbnRlcmFjdGlvbnMgdmlhIFRyYW5zZm9ybUNvbnRyb2xzLlxyXG4gICAqICBQcm9ncmFtbWF0aWMgY2FsbHMgdG8gc2V0Qm94KCkgd2lsbCBub3QgYXBwbHkgcm90YXRpb24gc25hcHBpbmcuXHJcbiAgICogIEZvciBjb21wbGV0ZSBzbmFwcGluZyBzdXBwb3J0LCBwcm9ncmFtbWF0aWMgcm90YXRpb25zIHdpbGwgbmVlZCB0byBiZSBoYW5kbGVkIHNlcGFyYXRlbHkuXHJcbiAgICovXHJcblxyXG4gIC8qKiBUaGlzIGlzIG91ciBkYXRhIG1vZGVsLiBBbGwgd2UgbmVlZCBpcyBhbiBPQkIgKi9cclxuICBwcm90ZWN0ZWQgb2JiOiBPQkIgPSBuZXcgT0JCKClcclxuXHJcbiAgLyoqIFRoZSBwbGFuZXMgdGhhdCB3aWxsIHNlbmQgb3V0IGFzIGNsaXBwaW5nIHBsYW5lcyAqL1xyXG4gIHByb3RlY3RlZCBwbGFuZXM6IFBsYW5lW10gPSBbXHJcbiAgICBuZXcgUGxhbmUobmV3IFZlY3RvcjMoMSwgMCwgMCksIDAuNSksXHJcbiAgICBuZXcgUGxhbmUobmV3IFZlY3RvcjMoLTEsIDAsIDApLCAwLjUpLFxyXG4gICAgbmV3IFBsYW5lKG5ldyBWZWN0b3IzKDAsIDEsIDApLCAwLjUpLFxyXG4gICAgbmV3IFBsYW5lKG5ldyBWZWN0b3IzKDAsIC0xLCAwKSwgMC41KSxcclxuICAgIG5ldyBQbGFuZShuZXcgVmVjdG9yMygwLCAwLCAxKSwgMC41KSxcclxuICAgIG5ldyBQbGFuZShuZXcgVmVjdG9yMygwLCAwLCAtMSksIDAuNSlcclxuICBdXHJcbiAgLyoqIFRoZSBzaXggcGxhbmVzIG9mIHRoZSB1bml0IGN1YmUgKi9cclxuICBwcm90ZWN0ZWQgbG9jYWxQbGFuZXM6IFBsYW5lW10gPSBbXHJcbiAgICBuZXcgUGxhbmUobmV3IFZlY3RvcjMoMSwgMCwgMCksIDAuNSksXHJcbiAgICBuZXcgUGxhbmUobmV3IFZlY3RvcjMoLTEsIDAsIDApLCAwLjUpLFxyXG4gICAgbmV3IFBsYW5lKG5ldyBWZWN0b3IzKDAsIDEsIDApLCAwLjUpLFxyXG4gICAgbmV3IFBsYW5lKG5ldyBWZWN0b3IzKDAsIC0xLCAwKSwgMC41KSxcclxuICAgIG5ldyBQbGFuZShuZXcgVmVjdG9yMygwLCAwLCAxKSwgMC41KSxcclxuICAgIG5ldyBQbGFuZShuZXcgVmVjdG9yMygwLCAwLCAtMSksIDAuNSlcclxuICBdXHJcblxyXG4gIC8qKiBDb252ZW5pZW5jZSBMVVQgZm9yIHdoZW4gY2xpY2tpbmcgb24gdGhlIGJveCBmYWNlcyAqL1xyXG4gIHByb3RlY3RlZCBjdWJlRmFjZXMgPVxyXG4gICAgLy8gcHJldHRpZXItaWdub3JlXHJcbiAgICB7XHJcbiAgICAnMjU2JzogeyB2ZXJ0czogWzEsIDIsIDUsIDZdLCBheGlzOiAneCcsIG5vcm1hbDogbmV3IFZlY3RvcjMoMSwgMCwgMCkgfSxcclxuICAgICcxNTInOiB7IHZlcnRzOiBbMSwgMiwgNSwgNl0sIGF4aXM6ICd4Jywgbm9ybWFsOiBuZXcgVmVjdG9yMygxLCAwLCAwKSB9LFxyXG4gICAgJzQwNyc6IHsgdmVydHM6IFswLCAzLCA0LCA3XSwgYXhpczogJ3gnLCBub3JtYWw6IG5ldyBWZWN0b3IzKDEsIDAsIDApIH0sXHJcbiAgICAnNzAzJzogeyB2ZXJ0czogWzAsIDMsIDQsIDddLCBheGlzOiAneCcsIG5vcm1hbDogbmV3IFZlY3RvcjMoMSwgMCwgMCkgfSxcclxuICAgICczMjcnOiB7IHZlcnRzOiBbMiwgMywgNiwgN10sIGF4aXM6ICd5Jywgbm9ybWFsOiBuZXcgVmVjdG9yMygwLCAxLCAwKSB9LFxyXG4gICAgJzcyNic6IHsgdmVydHM6IFsyLCAzLCA2LCA3XSwgYXhpczogJ3knLCBub3JtYWw6IG5ldyBWZWN0b3IzKDAsIDEsIDApIH0sXHJcbiAgICAnNDUwJzogeyB2ZXJ0czogWzAsIDEsIDQsIDVdLCBheGlzOiAneScsIG5vcm1hbDogbmV3IFZlY3RvcjMoMCwgMSwgMCkgfSxcclxuICAgICcwNTEnOiB7IHZlcnRzOiBbMCwgMSwgNCwgNV0sIGF4aXM6ICd5Jywgbm9ybWFsOiBuZXcgVmVjdG9yMygwLCAxLCAwKSB9LFxyXG4gICAgJzMxMic6IHsgdmVydHM6IFswLCAxLCAzLCAyXSwgYXhpczogJ3onLCBub3JtYWw6IG5ldyBWZWN0b3IzKDAsIDAsIDEpIH0sXHJcbiAgICAnMDEzJzogeyB2ZXJ0czogWzAsIDEsIDMsIDJdLCBheGlzOiAneicsIG5vcm1hbDogbmV3IFZlY3RvcjMoMCwgMCwgMSkgfSxcclxuICAgICc1NDYnOiB7IHZlcnRzOiBbNCwgNSwgNywgNl0sIGF4aXM6ICd6Jywgbm9ybWFsOiBuZXcgVmVjdG9yMygwLCAwLCAxKSB9LFxyXG4gICAgJzY0Nyc6IHsgdmVydHM6IFs0LCA1LCA3LCA2XSwgYXhpczogJ3onLCBub3JtYWw6IG5ldyBWZWN0b3IzKDAsIDAsIDEpIH1cclxuICB9XHJcblxyXG4gIC8qKiBUaGUgcm9vdCBvYmplY3QgICovXHJcbiAgcHJvdGVjdGVkIGRpc3BsYXk6IEdyb3VwXHJcbiAgLyoqIFdlIG9ubHkgdXNlIHRoaXMgZm9yIGhpdCB0ZXN0aW5nIHRvIHNlbGVjdCBpdCdzIGZhY2VzICovXHJcbiAgcHJvdGVjdGVkIGJveEhpdE1lc2g6IE1lc2hcclxuICAvKiogVGhlIGRpc3BsYXllZCBib3ggYXMgYW4gb3V0bGluZSAqL1xyXG4gIHByb3RlY3RlZCBib3hPdXRsaW5lOiBMaW5lU2VnbWVudHMyXHJcbiAgLyoqIE1lc2ggdGhhdCBnZXRzIHNob3duIGFjcm9zcyBhIGJveCBmYWNlIHdoZW4gaXQgZ2V0cyBzZWxlY3RlZCAqL1xyXG4gIHByb3RlY3RlZCBmYWNlUGxhbmU6IE1lc2hcclxuXHJcbiAgLyoqIEFuY2hvciBvYmplY3RzIGZvciB0aGUgY29udHJvbHMuIE5vdCBkaXNwbGF5YWJsZSAqL1xyXG4gIHByb3RlY3RlZCB0cmFuc2xhdGlvblJvdGF0aW9uQW5jaG9yOiBPYmplY3QzRFxyXG4gIHByb3RlY3RlZCBzY2FsZUFuY2hvcjogT2JqZWN0M0RcclxuXHJcbiAgLyoqIENvbnRyb2xzIGluc3RhbmNlcyAqL1xyXG4gIHByb3RlY3RlZCB0cmFuc2xhdGVDb250cm9sczogVHJhbnNmb3JtQ29udHJvbHNcclxuICBwcm90ZWN0ZWQgcm90YXRlQ29udHJvbHM6IFRyYW5zZm9ybUNvbnRyb2xzXHJcbiAgcHJvdGVjdGVkIHNjYWxlQ29udHJvbHM6IFRyYW5zZm9ybUNvbnRyb2xzXHJcblxyXG4gIC8qKiBTdW0gc3RhdGUgKi9cclxuICBwcm90ZWN0ZWQgbGFzdFNjYWxlOiBWZWN0b3IzIHwgbnVsbFxyXG4gIHByb3RlY3RlZCBsYXN0T2JiVHJhbnNmb3JtOiBNYXRyaXg0ID0gbmV3IE1hdHJpeDQoKVxyXG4gIHByb3RlY3RlZCBkcmFnZ2luZ0ZhY2U6IEZhY2UgfCBudWxsXHJcblxyXG4gIC8qKiBIaXQgdGVzdGluZyByZWxhdGVkICovXHJcbiAgcHJvdGVjdGVkIHJheWNhc3RlcjogUmF5Y2FzdGVyXHJcbiAgcHJvdGVjdGVkIGRyYWdnaW5nID0gZmFsc2VcclxuICBwcm90ZWN0ZWQgc2hpZnRLZXlQcmVzc2VkID0gZmFsc2VcclxuICBwcm90ZWN0ZWQga2V5ZG93bkhhbmRsZXI6IChlOiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkXHJcbiAgcHJvdGVjdGVkIGtleXVwSGFuZGxlcjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWRcclxuICBwcm90ZWN0ZWQgc2VjdGlvbkJveEhpc3Rvcnk6IE9CQltdID0gW11cclxuICBwcm90ZWN0ZWQgY3VycmVudEhpc3RvcnlJbmRleCA9IDBcclxuICBwcm90ZWN0ZWQgbWF4SGlzdG9yeVNpemUgPSAxMDBcclxuXHJcbiAgLyoqIE1hbmFkYXRvcnkgcHJvcGVydHkgZm9yIGFsbCBleHRlbnNpb25zICovXHJcbiAgcHVibGljIGdldCBlbmFibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlXHJcbiAgICB0aGlzLmRpc3BsYXkudmlzaWJsZSA9IHZhbHVlXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVDb250cm9scy5hdHRhY2godGhpcy50cmFuc2xhdGlvblJvdGF0aW9uQW5jaG9yKVxyXG4gICAgICB0aGlzLnJvdGF0ZUNvbnRyb2xzLmF0dGFjaCh0aGlzLnRyYW5zbGF0aW9uUm90YXRpb25BbmNob3IpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLmRldGFjaCgpXHJcbiAgICAgIHRoaXMucm90YXRlQ29udHJvbHMuZGV0YWNoKClcclxuICAgICAgdGhpcy5zY2FsZUNvbnRyb2xzLmRldGFjaCgpXHJcbiAgICAgIHRoaXMuZHJhZ2dpbmdGYWNlID0gbnVsbFxyXG4gICAgICB0aGlzLmZhY2VQbGFuZS52aXNpYmxlID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkucmVuZGVyZXIubG9jYWxDbGlwcGluZ0VuYWJsZWQgPSB2YWx1ZVxyXG4gICAgdGhpcy5lbWl0KFNlY3Rpb25Ub29sRXZlbnQuVXBkYXRlZCwgdGhpcy5wbGFuZXMpXHJcbiAgICB0aGlzLnZpZXdlci5yZXF1ZXN0UmVuZGVyKClcclxuICB9XHJcblxyXG4gIC8qKiBIaWRlcyBhbGwgY29udHJvbHMgYW5kIHRoZSBib3ggb3V0bGluZSBidXQga2VlcHMgdGhlIHNlY3Rpb25zIGVuYWJsZWQgKi9cclxuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5LnZpc2libGVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLmRpc3BsYXkudmlzaWJsZSA9IHZhbHVlXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVDb250cm9scy5hdHRhY2godGhpcy50cmFuc2xhdGlvblJvdGF0aW9uQW5jaG9yKVxyXG4gICAgICB0aGlzLnJvdGF0ZUNvbnRyb2xzLmF0dGFjaCh0aGlzLnRyYW5zbGF0aW9uUm90YXRpb25BbmNob3IpXHJcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nRmFjZSkgdGhpcy5zY2FsZUNvbnRyb2xzLmF0dGFjaCh0aGlzLnNjYWxlQW5jaG9yKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVDb250cm9scy5kZXRhY2goKVxyXG4gICAgICB0aGlzLnJvdGF0ZUNvbnRyb2xzLmRldGFjaCgpXHJcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nRmFjZSkgdGhpcy5zY2FsZUNvbnRyb2xzLmRldGFjaCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogR2V0cyB0aGUgdXAgdG8gZGF0ZSBzZWN0aW9uIHBsYW5lcyAqL1xyXG4gIHB1YmxpYyBnZXQgc2VjdGlvblBsYW5lcygpOiBQbGFuZVtdIHtcclxuICAgIHJldHVybiB0aGlzLnBsYW5lc1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuXHJcbiAgY29uc3RydWN0b3Iodmlld2VyOiBJVmlld2VyLCBwcm90ZWN0ZWQgY2FtZXJhUHJvdmlkZXI6IENhbWVyYUNvbnRyb2xsZXIpIHtcclxuICAgIHN1cGVyKHZpZXdlciwgY2FtZXJhUHJvdmlkZXIpXHJcbiAgICB0aGlzLnZpZXdlciA9IHZpZXdlclxyXG5cclxuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy5kaXNwbGF5ID0gbmV3IEdyb3VwKClcclxuICAgIHRoaXMuZGlzcGxheS5uYW1lID0gJ1NlY3Rpb25Cb3gnXHJcbiAgICB0aGlzLmRpc3BsYXkubGF5ZXJzLnNldChPYmplY3RMYXllcnMuUFJPUFMpXHJcbiAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnNjZW5lLmFkZCh0aGlzLmRpc3BsYXkpXHJcblxyXG4gICAgLyoqIENyZWF0ZSB0aGUgaGl0IGJveC4gSXQgbmV2ZXIgZ2V0cyByZW5kZXJlZCAqL1xyXG4gICAgY29uc3QgYm94R2VvbWV0cnkgPSB0aGlzLmNyZWF0ZUN1YmVHZW9tZXRyeSgpXHJcbiAgICB0aGlzLmJveEhpdE1lc2ggPSBuZXcgTWVzaChcclxuICAgICAgYm94R2VvbWV0cnksXHJcbiAgICAgIG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7XHJcbiAgICAgICAgc2lkZTogRG91YmxlU2lkZSxcclxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgICBkZXB0aFdyaXRlOiBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgdGhpcy5ib3hIaXRNZXNoLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlBST1BTKVxyXG4gICAgdGhpcy5kaXNwbGF5LmFkZCh0aGlzLmJveEhpdE1lc2gpXHJcblxyXG4gICAgLyoqIENyZWF0ZSB0aGUgZGlzcGxheWFibGUgYm94IG91dGxpbmUgKi9cclxuICAgIHRoaXMuYm94T3V0bGluZSA9IHRoaXMuY3JlYXRlT3V0bGluZSgpXHJcbiAgICB0aGlzLmRpc3BsYXkuYWRkKHRoaXMuYm94T3V0bGluZSlcclxuXHJcbiAgICAvKiogQ3JlYXRlIHRoZSBib3ggZmFjZSBoaWdobGlnaHQgbWVzaCAqL1xyXG4gICAgdGhpcy5mYWNlUGxhbmUgPSB0aGlzLmNyZWF0ZUZhY2VQbGFuZSgpXHJcbiAgICB0aGlzLmRpc3BsYXkuYWRkKHRoaXMuZmFjZVBsYW5lKVxyXG5cclxuICAgIC8qKiBDcmVhdGUgdGhlIGFuY2hvcnMgKi9cclxuICAgIHRoaXMudHJhbnNsYXRpb25Sb3RhdGlvbkFuY2hvciA9IG5ldyBPYmplY3QzRCgpXHJcbiAgICB0aGlzLnRyYW5zbGF0aW9uUm90YXRpb25BbmNob3IubmFtZSA9ICdUcmFuc2xhdGlvbkFuY2hvcidcclxuICAgIHRoaXMuZGlzcGxheS5hZGQodGhpcy50cmFuc2xhdGlvblJvdGF0aW9uQW5jaG9yKVxyXG5cclxuICAgIHRoaXMuc2NhbGVBbmNob3IgPSBuZXcgT2JqZWN0M0QoKVxyXG4gICAgdGhpcy5zY2FsZUFuY2hvci5uYW1lID0gJ1NjYWxlQW5jaG9yJ1xyXG4gICAgdGhpcy5kaXNwbGF5LmFkZCh0aGlzLnNjYWxlQW5jaG9yKVxyXG5cclxuICAgIHRoaXMucmF5Y2FzdGVyID0gbmV3IFJheWNhc3RlcigpXHJcbiAgICB0aGlzLnJheWNhc3Rlci5sYXllcnMuc2V0KE9iamVjdExheWVycy5QUk9QUylcclxuXHJcbiAgICAvKiogQ3JlYXRlIHRoZSBjb250cm9scy4gV2UgY3JlYXRlIHRoZW0gb25seSBvbmNlLCBhbmQgYXR0YWNoL2RldGFjaCBhcyBuZWVkZWQgKi9cclxuICAgIHRoaXMuc2V0dXBDb250cm9scygpXHJcblxyXG4gICAgLyoqIFdoZW5ldmVyIHdlIHN3aXRjaCBwcm9qZWN0aW9ucyB3ZSB1cGRhdGUgdGhlIGNvbnRyb2xzIHdpdGggdGhlIG5ldyBjYW1lcmFcclxuICAgICAqICBUaGUgc3BlY2tsZSB2aWV3ZXIgdXNlcyBkaWZmZXJlbnQgY2FtZXJhIGluc3RhbmNlcyBmb3IgaXQncyBkaWZmZXJlbnQgcHJvamVjdGlvbnNcclxuICAgICAqL1xyXG4gICAgdGhpcy5jYW1lcmFQcm92aWRlci5vbihDYW1lcmFFdmVudC5Qcm9qZWN0aW9uQ2hhbmdlZCwgKCkgPT4ge1xyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgdGhpcy50cmFuc2xhdGVDb250cm9scy5jYW1lcmEgPSB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnJlbmRlcmluZ0NhbWVyYVxyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgdGhpcy5yb3RhdGVDb250cm9scy5jYW1lcmEgPSB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnJlbmRlcmluZ0NhbWVyYVxyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgdGhpcy5zY2FsZUNvbnRyb2xzLmNhbWVyYSA9IHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkucmVuZGVyaW5nQ2FtZXJhXHJcbiAgICB9KVxyXG5cclxuICAgIC8qKiBUaGlzIG1pZ2h0IG5vdCBiZSBuZWVkZWQgKi9cclxuICAgIC8vIHRoaXMuY2FtZXJhUHJvdmlkZXIub24oQ2FtZXJhRXZlbnQuRnJhbWVVcGRhdGUsIChkYXRhOiBib29sZWFuKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuYWxsb3dTZWxlY3Rpb24gPSAhZGF0YVxyXG4gICAgLy8gfSlcclxuICAgIC8qKiBIb29rIHVwIHRvIGxlIGNsaWNrICovXHJcbiAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLmlucHV0Lm9uKElucHV0RXZlbnQuQ2xpY2ssIHRoaXMuY2xpY2tIYW5kbGVyLmJpbmQodGhpcykpXHJcblxyXG4gICAgLyoqIEFkZCBrZXlib2FyZCBldmVudCBsaXN0ZW5lcnMgZm9yIHNoaWZ0IGtleSByb3RhdGlvbiBzbmFwcGluZyAqL1xyXG4gICAgdGhpcy5zZXR1cEtleWJvYXJkTGlzdGVuZXJzKClcclxuXHJcbiAgICAvKiogU3RhcnQgb2ZmIGRpc2FibGVkICovXHJcbiAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuXHJcbiAgLyoqIFdlIHVzZSB0aGUgdmlld2VyJ3MgZnJhbWUgdXBkYXRlIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSB0cmFuc2xhdGUgYW5kIHJvdGF0ZSBjb250cm9sc1xyXG4gICAqICBUaGUgY29udHJvbHMgd2VyZSBub3QgbWVhbnQgdG8gYmUgb3ZlcmxheWVkIGFuZCB3b3JraW5nIGluIG11bHRpcGxlIGluc3RhbmNlIHNldHVwc1xyXG4gICAqICBzbyB0aGVpciBpbnB1dCBldmVudHMgb3ZlcmxhcC4gSXQncyBub3QgdGhlIGJlc3Qgc29sdXRpb24gaW4gdGhlIHdvcmxkLCBidXQgaXQncyBvbmVcclxuICAgKiAgdGhhdCByZXF1aXJlcyBsaXR0bGUgdG8gbm8gc291cmNlIGNoYW5nZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBvbkVhcmx5VXBkYXRlKCkge1xyXG4gICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHJldHVyblxyXG5cclxuICAgIC8qKiBUZXN0IHRoZSB0cmFuc2xhdGUgZ2l6bW9zICovXHJcbiAgICBjb25zdCBpbnRlcnNlY3RUcmFuc2xhdGUgPSBpbnRlcnNlY3RPYmplY3RXaXRoUmF5KFxyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgdGhpcy50cmFuc2xhdGVDb250cm9scy5fZ2l6bW8ucGlja2VyWyd0cmFuc2xhdGUnXSxcclxuICAgICAgdGhpcy50cmFuc2xhdGVDb250cm9scy5nZXRSYXljYXN0ZXIoKVxyXG4gICAgKVxyXG5cclxuICAgIC8qKiBUZXN0IHRoZSByb3RhdGUgZ2l6bW9zICovXHJcbiAgICBjb25zdCBpbnRlcnNlY3RSb3RhdGUgPSBpbnRlcnNlY3RPYmplY3RXaXRoUmF5KFxyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgdGhpcy5yb3RhdGVDb250cm9scy5fZ2l6bW8ucGlja2VyWydyb3RhdGUnXSxcclxuICAgICAgdGhpcy5yb3RhdGVDb250cm9scy5nZXRSYXljYXN0ZXIoKVxyXG4gICAgKVxyXG5cclxuICAgIC8qKiBHZXQgdGhlIGRpc3RhbmNlcyBpZiBhbnkgKi9cclxuICAgIGNvbnN0IHRyYW5zbGF0RGlzdGFuY2UgPSBpbnRlcnNlY3RUcmFuc2xhdGVcclxuICAgICAgPyBpbnRlcnNlY3RUcmFuc2xhdGUuZGlzdGFuY2VcclxuICAgICAgOiBOdW1iZXIuTUFYX1ZBTFVFXHJcbiAgICBjb25zdCByb3RhdGVEaXN0YW5jZSA9IGludGVyc2VjdFJvdGF0ZSA/IGludGVyc2VjdFJvdGF0ZS5kaXN0YW5jZSA6IE51bWJlci5NQVhfVkFMVUVcclxuXHJcbiAgICAvKiogRW5hYmxlIHRoZSBjbG9zZXN0LCBkaXNhYmxlIHRoZSBvdGhlclxyXG4gICAgICogIEl0J3Mgbm90IHN0dXBpZCBpZiBpdCB3b3Jrc1xyXG4gICAgICovXHJcbiAgICBpZiAodHJhbnNsYXREaXN0YW5jZSA8PSByb3RhdGVEaXN0YW5jZSkge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLl9kb05vdFBpY2sgPSBmYWxzZVxyXG4gICAgICB0aGlzLnJvdGF0ZUNvbnRyb2xzLl9kb05vdFBpY2sgPSB0cnVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLl9kb05vdFBpY2sgPSB0cnVlXHJcbiAgICAgIHRoaXMucm90YXRlQ29udHJvbHMuX2RvTm90UGljayA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRXhwbGljaXQgZXZlbnRzIGZvciB0aGUgc2VsZWN0aW9uIHRvb2wgKi9cclxuICBwdWJsaWMgb248VCBleHRlbmRzIFNlY3Rpb25Ub29sRXZlbnQ+KFxyXG4gICAgZXZlbnRUeXBlOiBULFxyXG4gICAgbGlzdGVuZXI6IChhcmc6IFNlY3Rpb25Ub29sRXZlbnRQYXlsb2FkW1RdKSA9PiB2b2lkXHJcbiAgKTogdm9pZCB7XHJcbiAgICBzdXBlci5vbihldmVudFR5cGUsIGxpc3RlbmVyKVxyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgdGhlIE9CQiBtb2RlbCAqL1xyXG4gIHB1YmxpYyBnZXRCb3goKTogT0JCIHtcclxuICAgIHJldHVybiB0aGlzLm9iYlxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgT0JCIG1vZGVsIGFuZCB1cGRhdGVzIHRoZSB0b29sIGdpem1vcyBhbmQgYm94XHJcbiAgICogQHBhcmFtIHRhcmdldEJveCBUaGUgYm94IHRvIHNldC4gSXQgYWNjZXB0cyBhbiBhYWJiIGFzIHdlbGxcclxuICAgKiBAcGFyYW0gb2Zmc2V0IE9wdGlvbmFsIG9mZnNldFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRCb3goXHJcbiAgICB0YXJnZXRCb3g6IE9CQiB8IEJveDMgfCB7IG1pbjogVmVjdG9yM0xpa2U7IG1heDogVmVjdG9yM0xpa2UgfSxcclxuICAgIG9mZnNldCA9IDBcclxuICApOiB2b2lkIHtcclxuICAgIC8qKiBJZiBubyBvZmZzZXQgaXMgcHJvdmlkZWQgd2UgYWRkIGEgdGlueSBmYWN0b3IgaW4gb3JkZXIgdG8gYXZvaWQgei1maWdodGluZyAqL1xyXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID09PSAwID8gMC4wMDAxIDogb2Zmc2V0XHJcblxyXG4gICAgaWYgKHRoaXMuaXNPQkIodGFyZ2V0Qm94KSkge1xyXG4gICAgICAvKiogVXNlIHRoZSBvZmZzZXQgYXMgYSByZWxhdGl2ZSB2YWx1ZSAqL1xyXG4gICAgICBjb25zdCBleHBhbmRlZEJveCA9IFdvcmxkLmV4cGFuZEJveFJlbGF0aXZlKHRhcmdldEJveCwgb2Zmc2V0KVxyXG4gICAgICAvKiogQ29weSBvdmVyIHRvIHRoZSBPQkIgbW9kZWwgKi9cclxuICAgICAgdGhpcy5vYmIuY2VudGVyLmNvcHkoZXhwYW5kZWRCb3guY2VudGVyKVxyXG4gICAgICB0aGlzLm9iYi5oYWxmU2l6ZS5jb3B5KGV4cGFuZGVkQm94LmhhbGZTaXplKVxyXG4gICAgICB0aGlzLm9iYi5yb3RhdGlvbi5jb3B5KGV4cGFuZGVkQm94LnJvdGF0aW9uKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQUFCQih0YXJnZXRCb3gpKSB7XHJcbiAgICAgIC8qKiBVc2UgYW4gQUFCQiAqL1xyXG4gICAgICBsZXQgYm94ID0gbmV3IEJveDMoKVxyXG4gICAgICBib3gubWluLmNvcHkodGFyZ2V0Qm94Lm1pbilcclxuICAgICAgYm94Lm1heC5jb3B5KHRhcmdldEJveC5tYXgpXHJcbiAgICAgIC8qKiBEbyBub3QgYWxsb3cgZW1wdHkgYm94ZXMgKi9cclxuICAgICAgaWYgKGJveC5pc0VtcHR5KCkpIGJveCA9IG5ldyBCb3gzKG5ldyBWZWN0b3IzKC0xLCAtMSwgLTEpLCBuZXcgVmVjdG9yMygxLCAxLCAxKSlcclxuICAgICAgLyoqIFVzZSB0aGUgb2Zmc2V0IGFzIGEgcmVsYXRpdmUgdmFsdWUgKi9cclxuICAgICAgYm94ID0gV29ybGQuZXhwYW5kQm94UmVsYXRpdmUodGFyZ2V0Qm94LCBvZmZzZXQpXHJcbiAgICAgIC8qKiBDb3B5IG92ZXIgdG8gdGhlIE9CQiBtb2RlbCB3aXRoIG5vIHJvdGF0aW9uICovXHJcbiAgICAgIHRoaXMub2JiLmNlbnRlci5jb3B5KGJveC5nZXRDZW50ZXIobmV3IFZlY3RvcjMoKSkpXHJcbiAgICAgIHRoaXMub2JiLmhhbGZTaXplLmNvcHkoYm94LmdldFNpemUobmV3IFZlY3RvcjMoKSkubXVsdGlwbHlTY2FsYXIoMC41KSlcclxuICAgICAgdGhpcy5vYmIucm90YXRpb24uaWRlbnRpdHkoKVxyXG4gICAgfSBlbHNlIExvZ2dlci5lcnJvcihgSW5jb3JyZWN0IGFyZ3VtZW50IGZvciBzZXRCb3ggJHt0YXJnZXRCb3h9YClcclxuXHJcbiAgICAvKiogVXBkYXRlIHRoZSB0b29sICovXHJcbiAgICB0aGlzLnVwZGF0ZVBsYW5lcygpXHJcbiAgICB0aGlzLnVwZGF0ZVZpc3VhbCgpXHJcbiAgICB0aGlzLmVtaXQoU2VjdGlvblRvb2xFdmVudC5VcGRhdGVkLCB0aGlzLnBsYW5lcylcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVuYWJsZWQgPSAhdGhpcy5fZW5hYmxlZFxyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgdGhlIHRyYW5zZm9ybWF0aW9uIGRlZmluZWQgYnkgdGhlIE9CQiAqL1xyXG4gIHB1YmxpYyBnZXRPYmJUcmFuc2Zvcm0oKSB7XHJcbiAgICByZXR1cm4gbmV3IE1hdHJpeDQoKS5jb21wb3NlKFxyXG4gICAgICB0aGlzLm9iYi5jZW50ZXIsXHJcbiAgICAgIF9xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChfbWF0cml4NC5zZXRGcm9tTWF0cml4Myh0aGlzLm9iYi5yb3RhdGlvbikpLFxyXG4gICAgICBfdmVjdG9yMy5jb3B5KHRoaXMub2JiLmhhbGZTaXplKS5tdWx0aXBseVNjYWxhcigyKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyB0aGUgY29udHJvbHMgYW5kIGFsbCB0aGVpciBnaXptb3NcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0dXBDb250cm9scygpIHtcclxuICAgIC8qKiBHZXQgdGhlIGN1cnJlbnQgY2FtZXJhICovXHJcbiAgICBjb25zdCBjYW1lcmEgPSB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnJlbmRlcmluZ0NhbWVyYVxyXG4gICAgaWYgKCFjYW1lcmEpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIFNlY3Rpb25Ub29sIGV4dGVuc2lvbi4gTm8gcmVuZGVyaW5nIGNhbWVyYSBmb3VuZCcpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRyYW5zbGF0ZSAqL1xyXG4gICAgdGhpcy50cmFuc2xhdGVDb250cm9scyA9IG5ldyBUcmFuc2Zvcm1Db250cm9scyhcclxuICAgICAgY2FtZXJhLFxyXG4gICAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnJlbmRlcmVyLmRvbUVsZW1lbnRcclxuICAgIClcclxuICAgIC8qKiBMYXllcnMgYXJlIG5vdCByZWN1cnNpdmUgaW4gdGhyZWUuanMuIFdlIG5lZWQgdG8gYXNzaWduIHRoZW0gdG8gYWxsIG9iamVjdHMgKi9cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy50cmFuc2xhdGVDb250cm9scy5fcm9vdC5jaGlsZHJlbi5sZW5ndGg7IGsrKykge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLl9yb290LmNoaWxkcmVuW2tdLnRyYXZlcnNlKChvYmopID0+IHtcclxuICAgICAgICBvYmoubGF5ZXJzLnNldChPYmplY3RMYXllcnMuUFJPUFMpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLmdldFJheWNhc3RlcigpLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlBST1BTKVxyXG4gICAgdGhpcy50cmFuc2xhdGVDb250cm9scy5zZXRTaXplKDAuNzUpXHJcbiAgICB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLnNwYWNlID0gJ2xvY2FsJ1xyXG4gICAgdGhpcy5kaXNwbGF5LmFkZCh0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLl9yb290KVxyXG5cclxuICAgIC8qKiBSb3RhdGUgKi9cclxuICAgIHRoaXMucm90YXRlQ29udHJvbHMgPSBuZXcgVHJhbnNmb3JtQ29udHJvbHMoXHJcbiAgICAgIGNhbWVyYSxcclxuICAgICAgdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5yZW5kZXJlci5kb21FbGVtZW50XHJcbiAgICApXHJcbiAgICAvKiogTGF5ZXJzIGFyZSBub3QgcmVjdXJzaXZlIGluIHRocmVlLmpzLiBXZSBuZWVkIHRvIGFzc2lnbiB0aGVtIHRvIGFsbCBvYmplY3RzICovXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMucm90YXRlQ29udHJvbHMuX3Jvb3QuY2hpbGRyZW4ubGVuZ3RoOyBrKyspIHtcclxuICAgICAgdGhpcy5yb3RhdGVDb250cm9scy5fcm9vdC5jaGlsZHJlbltrXS50cmF2ZXJzZSgob2JqKSA9PiB7XHJcbiAgICAgICAgb2JqLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlBST1BTKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5yb3RhdGVDb250cm9scy5nZXRSYXljYXN0ZXIoKS5sYXllcnMuc2V0KE9iamVjdExheWVycy5QUk9QUylcclxuICAgIHRoaXMucm90YXRlQ29udHJvbHMuc2V0U2l6ZSgwLjUpXHJcbiAgICB0aGlzLnJvdGF0ZUNvbnRyb2xzLm1vZGUgPSAncm90YXRlJ1xyXG4gICAgdGhpcy5yb3RhdGVDb250cm9scy5zcGFjZSA9ICdsb2NhbCdcclxuICAgIHRoaXMuZGlzcGxheS5hZGQodGhpcy5yb3RhdGVDb250cm9scy5fcm9vdClcclxuXHJcbiAgICAvKiogU2NhbGUgKi9cclxuICAgIHRoaXMuc2NhbGVDb250cm9scyA9IG5ldyBUcmFuc2Zvcm1Db250cm9scyhcclxuICAgICAgY2FtZXJhLFxyXG4gICAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnJlbmRlcmVyLmRvbUVsZW1lbnRcclxuICAgIClcclxuICAgIC8qKiBMYXllcnMgYXJlIG5vdCByZWN1cnNpdmUgaW4gdGhyZWUuanMuIFdlIG5lZWQgdG8gYXNzaWduIHRoZW0gdG8gYWxsIG9iamVjdHMgKi9cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhpcy5zY2FsZUNvbnRyb2xzLl9yb290LmNoaWxkcmVuLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIHRoaXMuc2NhbGVDb250cm9scy5fcm9vdC5jaGlsZHJlbltrXS50cmF2ZXJzZSgob2JqKSA9PiB7XHJcbiAgICAgICAgb2JqLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlBST1BTKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5zY2FsZUNvbnRyb2xzLmdldFJheWNhc3RlcigpLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlBST1BTKVxyXG4gICAgdGhpcy5zY2FsZUNvbnRyb2xzLnNldFNpemUoMC41KVxyXG4gICAgdGhpcy5zY2FsZUNvbnRyb2xzLm1vZGUgPSAnc2NhbGUnXHJcbiAgICB0aGlzLnNjYWxlQ29udHJvbHMuX3Jvb3QudmlzaWJsZSA9IGZhbHNlXHJcbiAgICB0aGlzLmRpc3BsYXkuYWRkKHRoaXMuc2NhbGVDb250cm9scy5fcm9vdClcclxuXHJcbiAgICAvKiogSG9vayBpbnRvIHRoZSBjb250cm9scycgZXZlbnRzLiovXHJcbiAgICB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlSGFuZGxlci5iaW5kKHRoaXMpKVxyXG4gICAgdGhpcy50cmFuc2xhdGVDb250cm9scy5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAnZHJhZ2dpbmctY2hhbmdlZCcsXHJcbiAgICAgIHRoaXMuZHJhZ2dpbmdIYW5kbGVyLmJpbmQodGhpcylcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnJvdGF0ZUNvbnRyb2xzLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlSGFuZGxlci5iaW5kKHRoaXMpKVxyXG4gICAgdGhpcy5yb3RhdGVDb250cm9scy5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAnZHJhZ2dpbmctY2hhbmdlZCcsXHJcbiAgICAgIHRoaXMuZHJhZ2dpbmdIYW5kbGVyLmJpbmQodGhpcylcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnNjYWxlQ29udHJvbHMuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2VIYW5kbGVyLmJpbmQodGhpcykpXHJcbiAgICB0aGlzLnNjYWxlQ29udHJvbHMuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgJ2RyYWdnaW5nLWNoYW5nZWQnLFxyXG4gICAgICB0aGlzLmRyYWdnaW5nSGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIE9CQiBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IE9CQlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjcmVhdGVPYmJTdGF0ZSgpOiBPQkIge1xyXG4gICAgcmV0dXJuIG5ldyBPQkIoKS5jb3B5KHRoaXMub2JiKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbGllcyBhbiBPQkIgc3RhdGUgdG8gdGhlIGN1cnJlbnQgT0JCXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFwcGx5T2JiU3RhdGUoc3RhdGU6IE9CQik6IHZvaWQge1xyXG4gICAgdGhpcy5vYmIuY29weShzdGF0ZSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmVzIHRoZSBjdXJyZW50IHNlY3Rpb24gYm94IHN0YXRlIHRvIGhpc3RvcnlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2F2ZVRvSGlzdG9yeSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuY3JlYXRlT2JiU3RhdGUoKVxyXG5cclxuICAgIC8qKiBJZiB3ZSdyZSBub3QgYXQgdGhlIGxhdGVzdCBzdGF0ZSBhbmQgbWFrZSBhIG5ldyBjaGFuZ2UsIHJlbW92ZSBhbGwgZnV0dXJlIHN0YXRlcyAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXggPCB0aGlzLnNlY3Rpb25Cb3hIaXN0b3J5Lmxlbmd0aCAtIDEgJiZcclxuICAgICAgdGhpcy5zZWN0aW9uQm94SGlzdG9yeS5sZW5ndGggPiAxXHJcbiAgICApIHtcclxuICAgICAgLyoqIEtlZXAgdGhlIGluaXRpYWwgc3RhdGUgYW5kIGFsbCBzdGF0ZXMgdXAgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gKi9cclxuICAgICAgdGhpcy5zZWN0aW9uQm94SGlzdG9yeSA9IHRoaXMuc2VjdGlvbkJveEhpc3Rvcnkuc2xpY2UoXHJcbiAgICAgICAgMCxcclxuICAgICAgICB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXggKyAxXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKiogQWRkIGN1cnJlbnQgc3RhdGUgdG8gaGlzdG9yeSAqL1xyXG4gICAgdGhpcy5zZWN0aW9uQm94SGlzdG9yeS5wdXNoKGN1cnJlbnRTdGF0ZSlcclxuICAgIHRoaXMuY3VycmVudEhpc3RvcnlJbmRleCA9IHRoaXMuc2VjdGlvbkJveEhpc3RvcnkubGVuZ3RoIC0gMVxyXG5cclxuICAgIC8qKiBSZW1vdmUgb2xkZXN0IHN0YXRlcyBpZiB3ZSBleGNlZWQgdGhlIGhpc3RvcnkgbGltaXQgKi9cclxuICAgIGlmICh0aGlzLnNlY3Rpb25Cb3hIaXN0b3J5Lmxlbmd0aCA+IHRoaXMubWF4SGlzdG9yeVNpemUpIHtcclxuICAgICAgdGhpcy5zZWN0aW9uQm94SGlzdG9yeS5zaGlmdCgpXHJcbiAgICAgIHRoaXMuY3VycmVudEhpc3RvcnlJbmRleCA9IE1hdGgubWF4KDAsIHRoaXMuY3VycmVudEhpc3RvcnlJbmRleCAtIDEpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHVwIGtleWJvYXJkIGV2ZW50IGxpc3RlbmVycyBmb3Igc2hpZnQga2V5IHJvdGF0aW9uIHNuYXBwaW5nIGFuZCB1bmRvL3JlZG9cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0dXBLZXlib2FyZExpc3RlbmVycygpIHtcclxuICAgIC8qKiBTdG9yZSBzaGlmdCBzdGF0ZSBmb3IgdXNlIGluIGNoYW5nZUhhbmRsZXIgKi9cclxuICAgIHRoaXMuc2hpZnRLZXlQcmVzc2VkID0gZmFsc2VcclxuXHJcbiAgICAvKiogU3RvcmUgcmVmZXJlbmNlcyB0byBldmVudCBsaXN0ZW5lcnMgZm9yIGNsZWFudXAgKi9cclxuICAgIHRoaXMua2V5ZG93bkhhbmRsZXIgPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG4gICAgICBpZiAoZS5zaGlmdEtleSAmJiAhdGhpcy5zaGlmdEtleVByZXNzZWQpIHtcclxuICAgICAgICB0aGlzLnNoaWZ0S2V5UHJlc3NlZCA9IHRydWVcclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqIEhhbmRsZSBDbWQvQ3RybCtaIGZvciBzZWN0aW9uIGJveCB1bmRvICovXHJcbiAgICAgIGlmICgoZS5tZXRhS2V5IHx8IGUuY3RybEtleSkgJiYgZS5rZXkgPT09ICd6JyAmJiAhZS5zaGlmdEtleSkge1xyXG4gICAgICAgIC8qKiBPbmx5IGFsbG93IHVuZG8vcmVkbyB3aGVuIHNlY3Rpb24gYm94IGNvbnRyb2xzIGFyZSB2aXNpYmxlICovXHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnZpc2libGUpIHtcclxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgdGhpcy51bmRvU2VjdGlvbkJveCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiogSGFuZGxlIENtZC9DdHJsK1NoaWZ0K1ogZm9yIHNlY3Rpb24gYm94IHJlZG8gKi9cclxuICAgICAgaWYgKChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSAmJiBlLmtleSA9PT0gJ3onICYmIGUuc2hpZnRLZXkpIHtcclxuICAgICAgICAvKiogT25seSBhbGxvdyB1bmRvL3JlZG8gd2hlbiBzZWN0aW9uIGJveCBjb250cm9scyBhcmUgdmlzaWJsZSAqL1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZWQgJiYgdGhpcy52aXNpYmxlKSB7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgIHRoaXMucmVkb1NlY3Rpb25Cb3goKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMua2V5dXBIYW5kbGVyID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgaWYgKCFlLnNoaWZ0S2V5ICYmIHRoaXMuc2hpZnRLZXlQcmVzc2VkKSB7XHJcbiAgICAgICAgdGhpcy5zaGlmdEtleVByZXNzZWQgPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5pbnB1dC5vbihJbnB1dEV2ZW50LktleURvd24sIHRoaXMua2V5ZG93bkhhbmRsZXIpXHJcbiAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLmlucHV0Lm9uKElucHV0RXZlbnQuS2V5VXAsIHRoaXMua2V5dXBIYW5kbGVyKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbHMsIG91dGxpbmUgYW5kIGhpdGJveCB1cGRhdGUgYmFzZWQgb24gdGhlIE9CQiBtb2RlbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCB1cGRhdGVWaXN1YWwoKSB7XHJcbiAgICAvKiogVXBkYXRlIHRoZSBjb250cm9scyAqL1xyXG4gICAgdGhpcy50cmFuc2xhdGlvblJvdGF0aW9uQW5jaG9yLnBvc2l0aW9uLmNvcHkodGhpcy5vYmIuY2VudGVyKVxyXG4gICAgdGhpcy50cmFuc2xhdGlvblJvdGF0aW9uQW5jaG9yLnF1YXRlcm5pb24uY29weShcclxuICAgICAgbmV3IFF1YXRlcm5pb24oKS5zZXRGcm9tUm90YXRpb25NYXRyaXgoXHJcbiAgICAgICAgbmV3IE1hdHJpeDQoKS5zZXRGcm9tTWF0cml4Myh0aGlzLm9iYi5yb3RhdGlvbilcclxuICAgICAgKVxyXG4gICAgKVxyXG4gICAgdGhpcy5zY2FsZUFuY2hvci5zY2FsZS5jb3B5KHRoaXMub2JiLmhhbGZTaXplKVxyXG5cclxuICAgIC8qKiBVcGRhdGUgdGhlIGhpdCBib3ggKi9cclxuICAgIHRoaXMuYm94SGl0TWVzaC5wb3NpdGlvbi5jb3B5KHRoaXMub2JiLmNlbnRlcilcclxuICAgIHRoaXMuYm94SGl0TWVzaC5zY2FsZS5jb3B5KHRoaXMub2JiLmhhbGZTaXplKVxyXG4gICAgdGhpcy5ib3hIaXRNZXNoLnNjYWxlLm11bHRpcGx5U2NhbGFyKDIpXHJcbiAgICB0aGlzLmJveEhpdE1lc2gucXVhdGVybmlvbi5jb3B5KFxyXG4gICAgICBuZXcgUXVhdGVybmlvbigpLnNldEZyb21Sb3RhdGlvbk1hdHJpeChcclxuICAgICAgICBuZXcgTWF0cml4NCgpLnNldEZyb21NYXRyaXgzKHRoaXMub2JiLnJvdGF0aW9uKVxyXG4gICAgICApXHJcbiAgICApXHJcbiAgICAvKiogVXBkYXRlIHRoZSB2aXNpYmxlIG91dGxpbmUgYm94ICovXHJcbiAgICB0aGlzLnVwZGF0ZU91dGxpbmUoKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlcnMgd2hlbiB0cmFuc2Zvcm0gaW50ZXJhY3Rpb25zIHN0YXJ0L3N0b3BcclxuICAgKiBAcGFyYW0gZXZlbnQgQ29udHJvbHMgZXZlbnRcclxuICAgKi9cclxuICAvL0B0cy1pZ25vcmVcclxuICBwcm90ZWN0ZWQgZHJhZ2dpbmdIYW5kbGVyKGV2ZW50KSB7XHJcbiAgICB0aGlzLmRyYWdnaW5nID0gZXZlbnQudmFsdWVcclxuICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XHJcbiAgICAgIC8qKiBTYXZlIGluaXRpYWwgc3RhdGUgd2hlbiBpbnRlcmFjdGlvbiBzdGFydHMgKGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNoYW5nZSkgKi9cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbkJveEhpc3RvcnkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uQm94SGlzdG9yeS5wdXNoKHRoaXMuY3JlYXRlT2JiU3RhdGUoKSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXggPSAwXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2FtZXJhUHJvdmlkZXIuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMudHJhbnNsYXRlQ29udHJvbHMpIHRoaXMucm90YXRlQ29udHJvbHMuZGV0YWNoKClcclxuICAgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJvdGF0ZUNvbnRyb2xzKSB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLmRldGFjaCgpXHJcbiAgICAgIHRoaXMuZW1pdChTZWN0aW9uVG9vbEV2ZW50LkRyYWdTdGFydClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8qKiBTYXZlIGZpbmFsIHN0YXRlIHdoZW4gaW50ZXJhY3Rpb24gZW5kcyAqL1xyXG4gICAgICB0aGlzLnNhdmVUb0hpc3RvcnkoKVxyXG5cclxuICAgICAgdGhpcy5jYW1lcmFQcm92aWRlci5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzKVxyXG4gICAgICAgIHRoaXMucm90YXRlQ29udHJvbHMuYXR0YWNoKHRoaXMudHJhbnNsYXRpb25Sb3RhdGlvbkFuY2hvcilcclxuICAgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJvdGF0ZUNvbnRyb2xzKVxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlQ29udHJvbHMuYXR0YWNoKHRoaXMudHJhbnNsYXRpb25Sb3RhdGlvbkFuY2hvcilcclxuICAgICAgdGhpcy5lbWl0KFNlY3Rpb25Ub29sRXZlbnQuRHJhZ0VuZClcclxuICAgIH1cclxuICAgIHRoaXMudmlld2VyLnJlcXVlc3RSZW5kZXIoKVxyXG4gIH1cclxuXHJcbiAgLyoqIFRyaWdnZXJzIHdoZW5ldmVyIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSBjb250cm9scyBhbmQgdGhlaXIgZ2l6bW9zXHJcbiAgICogIFRoaXMgaXMgd2hlcmUgdGhlIG1vZGVsIE9CQiBnZXRzIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIGNvbnRyb2xzIGNoYW5nZXMuXHJcbiAgICogIEVhY2ggY29udHJvbCB0eXBlIHdyaXRlcyBpdCdzIGRhdGEgaW4gdGhlIGFuY2hvcidzIG1hdGNoaW5nIHByb3BlcnR5LiBTbzpcclxuICAgKiAgLSBUcmFuc2xhdGUgY29udHJvbCB3cml0ZSB0byBpdCdzIGFuY2hvciAncG9zaXRpb24nXHJcbiAgICogIC0gUm90YXRlIGNvbnRyb2wgd3JpdGVzIHRvIGl0J3MgYW5jaG9yICdxdWF0ZXJuaW9uJ1xyXG4gICAqICAtIFNjYWxlIGNvbnRyb2wgd3JpdGVzIHRvIGl0J3MgYW5jaG9yICdzY2FsZVxyXG4gICAqL1xyXG4gIC8vQHRzLWlnbm9yZVxyXG4gIHByb3RlY3RlZCBjaGFuZ2VIYW5kbGVyKCkge1xyXG4gICAgLyoqIEp1c3QgY29weSBvdmVyIHBvc2l0aW9uLCByb3RhdGlvbiBhbmQgc2NhbGUqL1xyXG4gICAgdGhpcy5vYmIuY2VudGVyLmNvcHkodGhpcy50cmFuc2xhdGlvblJvdGF0aW9uQW5jaG9yLnBvc2l0aW9uKVxyXG5cclxuICAgIC8qKiBBcHBseSByb3RhdGlvbiBzbmFwcGluZyBpZiBzaGlmdCBrZXkgaXMgcHJlc3NlZCAqL1xyXG4gICAgbGV0IHF1YXRlcm5pb24gPSB0aGlzLnRyYW5zbGF0aW9uUm90YXRpb25BbmNob3IucXVhdGVybmlvblxyXG4gICAgaWYgKHRoaXMuc2hpZnRLZXlQcmVzc2VkKSB7XHJcbiAgICAgIHF1YXRlcm5pb24gPSB0aGlzLnNuYXBRdWF0ZXJuaW9uVG9HcmlkKHF1YXRlcm5pb24pXHJcbiAgICAgIC8qKiBVcGRhdGUgdGhlIGFuY2hvcidzIHF1YXRlcm5pb24gdG8ga2VlcCB2aXN1YWwgY29udHJvbHMgaW4gc3luYyAqL1xyXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uUm90YXRpb25BbmNob3IucXVhdGVybmlvbi5jb3B5KHF1YXRlcm5pb24pXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vYmIucm90YXRpb24uY29weShcclxuICAgICAgbmV3IE1hdHJpeDMoKS5zZXRGcm9tTWF0cml4NChuZXcgTWF0cml4NCgpLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHF1YXRlcm5pb24pKVxyXG4gICAgKVxyXG4gICAgdGhpcy5vYmIuaGFsZlNpemUuY29weSh0aGlzLnNjYWxlQW5jaG9yLnNjYWxlKVxyXG5cclxuICAgIC8qKiBJZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBzY2FsZSB3ZSBuZWVkIHRvIGFkanVzdCB0cmFuc2xhdGlvbiBzaW5jZSB3ZSBjYW4gb25seVxyXG4gICAgICogIHB1c2gvcHVsbCBhIHNpbmdsZSBmYWNlIGF0IGEgdGltZS4gU2ltcGx5IGFwcGx5aW5nIGEgc2NhbGUgd2lsbCBiaWxhdGVyYWxseVxyXG4gICAgICogIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBib3hcclxuICAgICAqL1xyXG4gICAgaWYgKCF0aGlzLmxhc3RTY2FsZSkgdGhpcy5sYXN0U2NhbGUgPSBuZXcgVmVjdG9yMygpLmNvcHkodGhpcy5zY2FsZUFuY2hvci5zY2FsZSlcclxuICAgIC8qKiBHZXQgYSBzY2FsZSBkZWx0YSAqL1xyXG4gICAgdGhpcy5sYXN0U2NhbGUuc3ViKHRoaXMuc2NhbGVBbmNob3Iuc2NhbGUpXHJcbiAgICB0aGlzLmxhc3RTY2FsZS5uZWdhdGUoKVxyXG5cclxuICAgIGlmICh0aGlzLmRyYWdnaW5nRmFjZSkge1xyXG4gICAgICAvKiogR2V0IHRoZSBmYWNlIG5vcm1hbCBhbmQgYXBwbHkgdGhlIGN1cnJlbnQgcm90YXRpb24gKi9cclxuICAgICAgY29uc3QgZGlyID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgICAgIC5jb3B5KHRoaXMuZHJhZ2dpbmdGYWNlLm5vcm1hbClcclxuICAgICAgICAuYXBwbHlRdWF0ZXJuaW9uKFxyXG4gICAgICAgICAgbmV3IFF1YXRlcm5pb24oKS5zZXRGcm9tUm90YXRpb25NYXRyaXgoXHJcbiAgICAgICAgICAgIG5ldyBNYXRyaXg0KCkuc2V0RnJvbU1hdHJpeDModGhpcy5vYmIucm90YXRpb24pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5ub3JtYWxpemUoKVxyXG4gICAgICAvKiogQ29tcHV0ZSB0aGUgYW1vdW50IHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBib3ggY2VudGVyICovXHJcbiAgICAgIGNvbnN0IHNjYWxhciA9XHJcbiAgICAgICAgTWF0aC5hYnModGhpcy5kcmFnZ2luZ0ZhY2Uubm9ybWFsLngpICogdGhpcy5sYXN0U2NhbGUueCArXHJcbiAgICAgICAgTWF0aC5hYnModGhpcy5kcmFnZ2luZ0ZhY2Uubm9ybWFsLnkpICogdGhpcy5sYXN0U2NhbGUueSArXHJcbiAgICAgICAgTWF0aC5hYnModGhpcy5kcmFnZ2luZ0ZhY2Uubm9ybWFsLnopICogdGhpcy5sYXN0U2NhbGUuelxyXG5cclxuICAgICAgZGlyLm11bHRpcGx5U2NhbGFyKHNjYWxhcilcclxuICAgICAgLyoqIEFwcGx5IHRoZSBhZGp1c3RtZW50ICovXHJcbiAgICAgIHRoaXMub2JiLmNlbnRlci5zdWIoZGlyKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGFzdFNjYWxlLmNvcHkodGhpcy5zY2FsZUFuY2hvci5zY2FsZSlcclxuXHJcbiAgICAvKiogVXBkYXRlIGV2ZXJ5dGhpbmcgKi9cclxuICAgIHRoaXMudXBkYXRlUGxhbmVzKClcclxuICAgIHRoaXMudXBkYXRlVmlzdWFsKClcclxuICAgIHRoaXMudXBkYXRlRmFjZUNvbnRyb2xzKHRoaXMuZHJhZ2dpbmdGYWNlKVxyXG4gICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcigpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVyIHVzZWQgZm9yIGRldGVjdGluZyB3aGVuIHdlIGNsaWNrIG9uIHRoZSBib3ggZmFjZXNcclxuICAgKiBAcGFyYW0gYXJncyBOREMgcG9pbnRlciBjb29yZHMgKyBvcmlnaW5hbCBldmVudCArIG11bHRpc2VsZWN0XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgY2xpY2tIYW5kbGVyKFxyXG4gICAgYXJnczogVmVjdG9yMiAmIHsgZXZlbnQ6IFBvaW50ZXJFdmVudDsgbXVsdGlTZWxlY3Q6IGJvb2xlYW4gfVxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHJldHVyblxyXG4gICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMudmlzaWJsZSkgcmV0dXJuXHJcblxyXG4gICAgLyoqIFdlIG9ubHkgdGVzdCBhZ2FpbnN0IG91ciBoaXQgYm94IG1lc2ggKi9cclxuICAgIHRoaXMucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoYXJncywgdGhpcy5jYW1lcmFQcm92aWRlci5yZW5kZXJpbmdDYW1lcmEpXHJcbiAgICBsZXQgaW50ZXJzZWN0ZWRPYmplY3RzOiBBcnJheTxJbnRlcnNlY3Rpb24+ID0gW11cclxuXHJcbiAgICBpbnRlcnNlY3RlZE9iamVjdHMgPSB0aGlzLnJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3QodGhpcy5ib3hIaXRNZXNoKVxyXG5cclxuICAgIC8qKiBJZiB3ZSBkaWQgbm90IGhpdCBpdCwgcmVzZXQgaXQgdG8gZGVmYXVsdCAqL1xyXG4gICAgaWYgKCFpbnRlcnNlY3RlZE9iamVjdHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlQ29udHJvbHMuYXR0YWNoKHRoaXMudHJhbnNsYXRpb25Sb3RhdGlvbkFuY2hvcilcclxuICAgICAgdGhpcy5yb3RhdGVDb250cm9scy5hdHRhY2godGhpcy50cmFuc2xhdGlvblJvdGF0aW9uQW5jaG9yKVxyXG4gICAgICB0aGlzLnNjYWxlQ29udHJvbHMuZGV0YWNoKClcclxuICAgICAgdGhpcy5mYWNlUGxhbmUudmlzaWJsZSA9IGZhbHNlXHJcbiAgICAgIHRoaXMuZHJhZ2dpbmdGYWNlID0gbnVsbFxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICAvKiogSWYgd2UgaGF2ZSBhIGhpdCBoaWRlIHRyYW5zbGF0ZSBhbmQgcm90YXRlIGFuZCBzaG93IHNjYWxlIGNvbnRyb2xzICovXHJcbiAgICB0aGlzLmRyYWdnaW5nRmFjZSA9IGludGVyc2VjdGVkT2JqZWN0c1swXS5mYWNlIGFzIEZhY2VcclxuICAgIHRoaXMudHJhbnNsYXRlQ29udHJvbHMuZGV0YWNoKClcclxuICAgIHRoaXMucm90YXRlQ29udHJvbHMuZGV0YWNoKClcclxuICAgIHRoaXMuc2NhbGVDb250cm9scy5hdHRhY2godGhpcy5zY2FsZUFuY2hvcilcclxuICAgIHRoaXMudXBkYXRlRmFjZUNvbnRyb2xzKHRoaXMuZHJhZ2dpbmdGYWNlKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZXMgdGhlIGZpbmFsIGJveCBwbGFuZXMgZnJvbSB0aGUgdW5pdCBjdWJlIHBsYW5lc1xyXG4gICAqIHRyYW5zZm9ybWVkIGFnYWluc3QgdGhlIGN1cnJlbnQgT0JCIG1vZGVsXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZVBsYW5lcygpIHtcclxuICAgIC8qKiBCdWlsZCB0aGUgbWF0cml4ICovXHJcbiAgICBjb25zdCBvYmJNYXRyaXggPSB0aGlzLmdldE9iYlRyYW5zZm9ybSgpXHJcblxyXG4gICAgLyoqIERldGVybWluZSBpZiB0aGVyZSBpcyBhIGNoYW5nZSAqL1xyXG4gICAgbGV0IG9iYkNoYW5nZWQgPSBmYWxzZVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgIGlmIChNYXRoLmFicyhvYmJNYXRyaXguZWxlbWVudHNbaV0gLSB0aGlzLmxhc3RPYmJUcmFuc2Zvcm0uZWxlbWVudHNbaV0pID4gMWUtNikge1xyXG4gICAgICAgIG9iYkNoYW5nZWQgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJZiB0aGVyZSBpcyBubyBjaGFuZ2UgcmV0dXJuICovXHJcbiAgICBpZiAoIW9iYkNoYW5nZWQpIHJldHVyblxyXG5cclxuICAgIC8qKiBDb21wdXRlIGZpbmFsIHBsYW5lcyAqL1xyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmxvY2FsUGxhbmVzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIHRoaXMucGxhbmVzW2tdLmNvcHkodGhpcy5sb2NhbFBsYW5lc1trXSlcclxuICAgICAgdGhpcy5wbGFuZXNba10uYXBwbHlNYXRyaXg0KG9iYk1hdHJpeClcclxuICAgIH1cclxuICAgIC8qKiBTZXQgdGhlIHZpZXdlcidzIGNsaXBwaW5nIHBsYW5lcyBhbmQgbm90aWZ5Ki9cclxuICAgIHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkuY2xpcHBpbmdQbGFuZXMgPSB0aGlzLnBsYW5lc1xyXG4gICAgdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5jbGlwcGluZ1ZvbHVtZSA9IHRoaXMuZ2V0Qm94KClcclxuICAgIHRoaXMuZW1pdChTZWN0aW9uVG9vbEV2ZW50LlVwZGF0ZWQsIHRoaXMucGxhbmVzKVxyXG4gICAgdGhpcy5sYXN0T2JiVHJhbnNmb3JtLmNvcHkob2JiTWF0cml4KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyB0aGUgcGxhbmUgbWVzaCB0aGF0IHdpbGwgYmUgc2hvd24gd2hlbiBzZWxlY3RpbmcgYSBib3ggZmFjZVxyXG4gICAqIEl0J3MgUlRFIGVuYWJsZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgY3JlYXRlRmFjZVBsYW5lKCkge1xyXG4gICAgLyoqIFVuaXQgcGxhbmUgKi9cclxuICAgIGNvbnN0IGZhY2VQbGFuZUdlb21ldHJ5ID0gbmV3IFBsYW5lR2VvbWV0cnkoMSwgMSlcclxuICAgIC8qKiBSVEUgYXR0cmlidXRlcyAqL1xyXG4gICAgR2VvbWV0cnkudXBkYXRlUlRFR2VvbWV0cnkoZmFjZVBsYW5lR2VvbWV0cnksIG5ldyBGbG9hdDMyQXJyYXkoMTIpKVxyXG4gICAgOyhmYWNlUGxhbmVHZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uIGFzIEJ1ZmZlckF0dHJpYnV0ZSkuc2V0VXNhZ2UoXHJcbiAgICAgIER5bmFtaWNEcmF3VXNhZ2VcclxuICAgIClcclxuICAgIDsoZmFjZVBsYW5lR2VvbWV0cnkuYXR0cmlidXRlc1sncG9zaXRpb25fbG93J10gYXMgQnVmZmVyQXR0cmlidXRlKS5zZXRVc2FnZShcclxuICAgICAgRHluYW1pY0RyYXdVc2FnZVxyXG4gICAgKVxyXG4gICAgLyoqIE1ha2UgYSByZWd1bGFyIG1lc2ggICovXHJcbiAgICBjb25zdCBmYWNlUGxhbmUgPSBuZXcgTWVzaChcclxuICAgICAgZmFjZVBsYW5lR2VvbWV0cnksXHJcbiAgICAgIG5ldyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbChcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgIHNpZGU6IERvdWJsZVNpZGUsXHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjEsXHJcbiAgICAgICAgICB3aXJlZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgY29sb3I6IDB4MGE2NmZmLFxyXG4gICAgICAgICAgbWV0YWxuZXNzOiAwLjEsXHJcbiAgICAgICAgICByb3VnaG5lc3M6IDAuNzVcclxuICAgICAgICB9LFxyXG4gICAgICAgIFsnVVNFX1JURSddXHJcbiAgICAgIClcclxuICAgIClcclxuICAgIGZhY2VQbGFuZS5sYXllcnMuc2V0KE9iamVjdExheWVycy5QUk9QUylcclxuICAgIGZhY2VQbGFuZS5yZW5kZXJPcmRlciA9IDUgLy8gVGhpcyBpcyBwcm9iYWJseSBub3QgbmVlZGVkXHJcbiAgICBmYWNlUGxhbmUuZnJ1c3R1bUN1bGxlZCA9IGZhbHNlXHJcblxyXG4gICAgcmV0dXJuIGZhY2VQbGFuZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgc2NhbGUgY29udHJvbCBhbmQgcGxhbmUgbWVzaCB3aGVuIGEgY3ViZSBmYWNlIGlzIHNlbGVjdGVkXHJcbiAgICogQHBhcmFtIGZhY2UgVGhlIGZhY2Ugd2UncmUgcHVsbGluZy9wdXNoaW5nXHJcbiAgICogQHJldHVybnMgdm9pZFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCB1cGRhdGVGYWNlQ29udHJvbHMoZmFjZTogRmFjZSB8IG51bGwpIHtcclxuICAgIGlmICghZmFjZSkgcmV0dXJuXHJcbiAgICBjb25zdCB2ZXJ0aWNlcyA9IHRoaXMuYm94SGl0TWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uXHJcbiAgICAvKiogR2V0IHRoZSBmYWNlIGZyb20gdGhlIExVVCAqL1xyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBjb25zdCBjdWJlRmFjZSA9IHRoaXMuY3ViZUZhY2VzW2Ake2ZhY2UuYX0ke2ZhY2UuYn0ke2ZhY2UuY31gXVxyXG4gICAgLyoqIERpYWdvbmFsIGVuZHBvbmludHMgKi9cclxuICAgIGNvbnN0IHYwID0gbmV3IFZlY3RvcjMoKS5mcm9tQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCBjdWJlRmFjZS52ZXJ0c1swXSlcclxuICAgIGNvbnN0IHYzID0gbmV3IFZlY3RvcjMoKS5mcm9tQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCBjdWJlRmFjZS52ZXJ0c1szXSlcclxuXHJcbiAgICAvKiogTWlkZGxlIHBvaW50IG9mIHRoZSBkaWFnb25hbCAqL1xyXG4gICAgY29uc3QgZmFjZUNlbnRlciA9IG5ldyBWZWN0b3IzKFxyXG4gICAgICAodjAueCArIHYzLngpIC8gMixcclxuICAgICAgKHYwLnkgKyB2My55KSAvIDIsXHJcbiAgICAgICh2MC56ICsgdjMueikgLyAyXHJcbiAgICApXHJcblxyXG4gICAgLyoqIENvbXB1dGUgT0JCIG1hdHJpeCAqL1xyXG4gICAgY29uc3Qgb2JiTWF0cml4ID0gdGhpcy5nZXRPYmJUcmFuc2Zvcm0oKVxyXG5cclxuICAgIC8qKiBBcHBseSBpdCB0byB0aGUgdW5pdCBkaWFnb25hbCBtaWRkbGUgcG9pbnQgYW5kIGZhY2Ugbm9ybWFsICovXHJcbiAgICBmYWNlQ2VudGVyLmFwcGx5TWF0cml4NChvYmJNYXRyaXgpXHJcbiAgICBjb25zdCBmYWNlUXVhdCA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbVVuaXRWZWN0b3JzKFxyXG4gICAgICBuZXcgVmVjdG9yMygpLmNvcHkoY3ViZUZhY2Uubm9ybWFsKS5uZWdhdGUoKSxcclxuICAgICAgZmFjZS5ub3JtYWxcclxuICAgIClcclxuICAgIGZhY2VRdWF0LnByZW11bHRpcGx5KFxyXG4gICAgICBuZXcgUXVhdGVybmlvbigpLnNldEZyb21Sb3RhdGlvbk1hdHJpeChcclxuICAgICAgICBuZXcgTWF0cml4NCgpLnNldEZyb21NYXRyaXgzKHRoaXMub2JiLnJvdGF0aW9uKVxyXG4gICAgICApXHJcbiAgICApXHJcblxyXG4gICAgLyoqIFNldCB0aGUgc2NhbGUgY29udHJvbCdzIGFuY2hvciBwb3NpdGlvbiBhbmQgb3JpZW50YXRpb24gKi9cclxuICAgIHRoaXMuc2NhbGVBbmNob3IucG9zaXRpb24uY29weShmYWNlQ2VudGVyKVxyXG4gICAgdGhpcy5zY2FsZUFuY2hvci5xdWF0ZXJuaW9uLmNvcHkoZmFjZVF1YXQpXHJcbiAgICAvLyB0aGlzLnNjYWxlQW5jaG9yLnNjYWxlLmNvcHkodGhpcy5vYmIuaGFsZlNpemUpXHJcbiAgICAvKiogV2Ugb25seSBzaG93IG9uZSBheGlzIGJhc2VkIG9uIHRoZSBmYWNlIG5vcm1hbCB3ZSdyZSBwdWxsaW5nL3B1c2hpbmcgKi9cclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgdGhpcy5zY2FsZUNvbnRyb2xzLnNob3dYID0gY3ViZUZhY2UuYXhpcyA9PT0gJ3gnXHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIHRoaXMuc2NhbGVDb250cm9scy5zaG93WSA9IGN1YmVGYWNlLmF4aXMgPT09ICd5J1xyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICB0aGlzLnNjYWxlQ29udHJvbHMuc2hvd1ogPSBjdWJlRmFjZS5heGlzID09PSAneidcclxuXHJcbiAgICAvKiogVXBkYXRlIHRoZSBmYWNlIHBsYW5lIGhpZ2hsaWdodCAqL1xyXG4gICAgdGhpcy5mYWNlUGxhbmUudmlzaWJsZSA9IHRydWVcclxuICAgIC8qKiBDb3B5IHRoZSBvdGhlciB0d28gdnJ0aWNlcywgZmlyc3QgdHdvIGFyZSBhdCB0aGUgdG9wICovXHJcbiAgICBjb25zdCB2MSA9IG5ldyBWZWN0b3IzKCkuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgY3ViZUZhY2UudmVydHNbMV0pXHJcbiAgICBjb25zdCB2MiA9IG5ldyBWZWN0b3IzKCkuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgY3ViZUZhY2UudmVydHNbMl0pXHJcblxyXG4gICAgLyoqIFRyYW5zZm9ybSB0aGVtICovXHJcbiAgICB2MC5hcHBseU1hdHJpeDQob2JiTWF0cml4KVxyXG4gICAgdjEuYXBwbHlNYXRyaXg0KG9iYk1hdHJpeClcclxuICAgIHYyLmFwcGx5TWF0cml4NChvYmJNYXRyaXgpXHJcbiAgICB2My5hcHBseU1hdHJpeDQob2JiTWF0cml4KVxyXG5cclxuICAgIC8qKiBDb3B5IHRoZW0gdG8gYSBzY3JhdGNoIGFycmF5LiBXZSBjYW4gYWZmb3JkIHRvIGRvIHRoaXMsIGl0J3Mgb25seSA0IHZlcnRzICovXHJcbiAgICB2MC50b0FycmF5KHNjcmF0Y2hQbGFuZUFycmF5LCAwKVxyXG4gICAgdjEudG9BcnJheShzY3JhdGNoUGxhbmVBcnJheSwgMylcclxuICAgIHYyLnRvQXJyYXkoc2NyYXRjaFBsYW5lQXJyYXksIDYpXHJcbiAgICB2My50b0FycmF5KHNjcmF0Y2hQbGFuZUFycmF5LCA5KVxyXG5cclxuICAgIGNvbnN0IHBvc0F0dHIgPSB0aGlzLmZhY2VQbGFuZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydwb3NpdGlvbiddIGFzIEJ1ZmZlckF0dHJpYnV0ZVxyXG4gICAgLy8gcHJldHRpZXItaWdub3JlXHJcbiAgICBjb25zdCBwb3NBdHRyTG93ID0gdGhpcy5mYWNlUGxhbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1sncG9zaXRpb25fbG93J10gYXMgQnVmZmVyQXR0cmlidXRlXHJcblxyXG4gICAgLyoqIFNwbGl0IHRoZSBwb3NpdGlvbnMgc3RyYWlnaHQgaW4gdGhlIGhpZ2gvbG93IGF0dHJpYnV0ZXMgKi9cclxuICAgIEdlb21ldHJ5LkRvdWJsZVRvSGlnaExvd0J1ZmZlcihcclxuICAgICAgc2NyYXRjaFBsYW5lQXJyYXksXHJcbiAgICAgIHBvc0F0dHJMb3cuYXJyYXkgYXMgRmxvYXQzMkFycmF5LFxyXG4gICAgICBwb3NBdHRyLmFycmF5IGFzIEZsb2F0MzJBcnJheVxyXG4gICAgKVxyXG4gICAgcG9zQXR0ci5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHBvc0F0dHJMb3cubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICAvKiogQ3JlYXRlcyB0aGUgZ2VvbWV0cnkgZm9yIHRoZSB2aXNpYmxlIG91dGxpbmUgb2YgdGhlIHNlY3Rpb24gdG9vbCAqL1xyXG4gIHByb3RlY3RlZCBjcmVhdGVPdXRsaW5lKCkge1xyXG4gICAgLyoqIFdlIHN0YXJ0IGZyb20gdGhlIHVuaXQgY3ViZSdzIGVkZ2VzICovXHJcbiAgICBjb25zdCBidWZmZXIgPSB1bml0Q3ViZUVkZ2VzLnNsaWNlKCkgYXMgdW5rbm93biBhcyBGbG9hdDMyQXJyYXlcclxuXHJcbiAgICAvKiogQ3JlYXRlIHRoZSBsaW5lIHNlZ21lbnRzIGdlb21ldHJ5ICovXHJcbiAgICBjb25zdCBsaW5lR2VvbWV0cnkgPSBuZXcgTGluZVNlZ21lbnRzR2VvbWV0cnkoKVxyXG4gICAgbGluZUdlb21ldHJ5LnNldFBvc2l0aW9ucyhidWZmZXIpXHJcbiAgICA7KFxyXG4gICAgICBsaW5lR2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydCddIGFzIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlXHJcbiAgICApLmRhdGEuc2V0VXNhZ2UoRHluYW1pY0RyYXdVc2FnZSlcclxuXHJcbiAgICAvKiogUlRFIGl0ICovXHJcbiAgICBHZW9tZXRyeS51cGRhdGVSVEVHZW9tZXRyeShsaW5lR2VvbWV0cnksIGJ1ZmZlcilcclxuICAgIC8qKiBMaW5lIG1hdGVyaWFsICovXHJcbiAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBTcGVja2xlTGluZU1hdGVyaWFsKFxyXG4gICAgICB7XHJcbiAgICAgICAgY29sb3I6IDB4MDQ3ZWZiLFxyXG4gICAgICAgIGxpbmV3aWR0aDogMSxcclxuICAgICAgICB3b3JsZFVuaXRzOiBmYWxzZSxcclxuICAgICAgICB2ZXJ0ZXhDb2xvcnM6IGZhbHNlLFxyXG4gICAgICAgIGFscGhhVG9Db3ZlcmFnZTogZmFsc2UsXHJcbiAgICAgICAgcmVzb2x1dGlvbjogbmV3IFZlY3RvcjIoMzIsIDMyKVxyXG4gICAgICB9LFxyXG4gICAgICBbJ1VTRV9SVEUnXVxyXG4gICAgKVxyXG4gICAgbWF0ZXJpYWwuY29sb3IgPSBuZXcgQ29sb3IoMHgwNDdlZmIpXHJcbiAgICBtYXRlcmlhbC5jb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuICAgIG1hdGVyaWFsLmxpbmV3aWR0aCA9IDFcclxuICAgIG1hdGVyaWFsLndvcmxkVW5pdHMgPSBmYWxzZVxyXG4gICAgbWF0ZXJpYWwucmVzb2x1dGlvbiA9IG5ldyBWZWN0b3IyKDMyLCAzMilcclxuICAgIG1hdGVyaWFsLnRvbmVNYXBwZWQgPSBmYWxzZVxyXG5cclxuICAgIC8qKiBDcmVhdGUgdGhlIGRpc3BsYXlhYmxlIG9iamVjdCAqL1xyXG4gICAgY29uc3QgY2xpcE91dGxpbmUgPSBuZXcgTGluZVNlZ21lbnRzMihsaW5lR2VvbWV0cnksIG1hdGVyaWFsKVxyXG4gICAgY2xpcE91dGxpbmUubmFtZSA9IGBvcmllbnRlZC1ib3gtb3V0bGluZWBcclxuICAgIGNsaXBPdXRsaW5lLmZydXN0dW1DdWxsZWQgPSBmYWxzZVxyXG4gICAgY2xpcE91dGxpbmUucmVuZGVyT3JkZXIgPSAxXHJcbiAgICBjbGlwT3V0bGluZS5sYXllcnMuc2V0KE9iamVjdExheWVycy5QUk9QUylcclxuXHJcbiAgICByZXR1cm4gY2xpcE91dGxpbmVcclxuICB9XHJcblxyXG4gIC8qKiBVcGRhdGVzIHRoZSBzZWN0aW9uIHRvb2wgb3V0bGluZSBieSB1cGRhdGluZyBpdCdzIHZlcnRpY2VzXHJcbiAgICogIFdlIGNob3NlIHRvIGRvIGl0IHRoaXMgd2F5IGluIG9yZGVyIGhhdmUgUlRFIHdvcmtpbmdcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgdXBkYXRlT3V0bGluZSgpIHtcclxuICAgIC8qKiBDb21wdXRlIHRoZSBPQkIgbWF0cml4ICovXHJcbiAgICBjb25zdCBvYmJNYXRyaXggPSB0aGlzLmdldE9iYlRyYW5zZm9ybSgpXHJcblxyXG4gICAgLyoqIFRyYW5zZm9ybSB0aGUgdW5pdCBjdWJlIGVkZ2VzIHdpdGggdGhlIE9CQiBtYXRyaXggKi9cclxuICAgIGNvbnN0IHZlYyA9IG5ldyBWZWN0b3IzKClcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdW5pdEN1YmVFZGdlcy5sZW5ndGg7IGsgKz0gMykge1xyXG4gICAgICB2ZWMuZnJvbUFycmF5KHVuaXRDdWJlRWRnZXMsIGspXHJcbiAgICAgIHZlYy5hcHBseU1hdHJpeDQob2JiTWF0cml4KVxyXG4gICAgICBzY3JhdGNoQXJyYXlba10gPSB2ZWMueFxyXG4gICAgICBzY3JhdGNoQXJyYXlbayArIDFdID0gdmVjLnlcclxuICAgICAgc2NyYXRjaEFycmF5W2sgKyAyXSA9IHZlYy56XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNwbGl0IHRoZSByZXN1bHQgaW50byB0aGUgaGlnaC9sb3cgYXR0cmlidXRlIGJ1ZmZlcnMgKi9cclxuICAgIGNvbnN0IHBvc0F0dHIgPSAoXHJcbiAgICAgIHRoaXMuYm94T3V0bGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZVN0YXJ0J10gYXMgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGVcclxuICAgICkuZGF0YVxyXG4gICAgY29uc3QgcG9zQXR0ckxvdyA9IChcclxuICAgICAgdGhpcy5ib3hPdXRsaW5lLmdlb21ldHJ5LmF0dHJpYnV0ZXNbXHJcbiAgICAgICAgJ2luc3RhbmNlU3RhcnRMb3cnXHJcbiAgICAgIF0gYXMgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGVcclxuICAgICkuZGF0YVxyXG4gICAgR2VvbWV0cnkuRG91YmxlVG9IaWdoTG93QnVmZmVyKFxyXG4gICAgICBzY3JhdGNoQXJyYXksXHJcbiAgICAgIHBvc0F0dHJMb3cuYXJyYXkgYXMgRmxvYXQzMkFycmF5LFxyXG4gICAgICBwb3NBdHRyLmFycmF5IGFzIEZsb2F0MzJBcnJheVxyXG4gICAgKVxyXG4gICAgdGhpcy5ib3hPdXRsaW5lLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2luc3RhbmNlU3RhcnQnXS5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHRoaXMuYm94T3V0bGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZUVuZCddLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5ib3hPdXRsaW5lLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2luc3RhbmNlU3RhcnRMb3cnXS5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHRoaXMuYm94T3V0bGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZUVuZExvdyddLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgLyoqIENyZWF0ZXMgYSB1bml0IGN1YmUgZ2VvbWV0cnkgaW5zdGFuY2UqL1xyXG4gIHByb3RlY3RlZCBjcmVhdGVDdWJlR2VvbWV0cnkoKSB7XHJcbiAgICBjb25zdCB2ZXJ0aWNlcyA9IHVuaXRDdWJlLnNsaWNlKClcclxuICAgIGNvbnN0IGluZGV4ZXMgPSB1bml0Q3ViZUluZGljZXMuc2xpY2UoKVxyXG5cclxuICAgIGNvbnN0IGcgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKVxyXG4gICAgZy5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKVxyXG4gICAgZy5zZXRJbmRleChuZXcgVWludDE2QnVmZmVyQXR0cmlidXRlKGluZGV4ZXMsIDEpKVxyXG4gICAgZy5jb21wdXRlQm91bmRpbmdCb3goKVxyXG4gICAgZy5jb21wdXRlVmVydGV4Tm9ybWFscygpXHJcbiAgICByZXR1cm4gZ1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlc3RlcyB0aGUgZ2l6bW9zLiBIb25lc3RseSBub3Qgc3VyZSBpZiBpdCBkb2VzIGFueXRoaW5nIG1lYW5pbmdmdWxsICovXHJcbiAgcHJvdGVjdGVkIHJlc2V0KCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGVDb250cm9scy5yZXNldCgpXHJcbiAgICB0aGlzLnRyYW5zbGF0ZUNvbnRyb2xzLnJlc2V0KClcclxuICAgIHRoaXMuc2NhbGVDb250cm9scy5yZXNldCgpXHJcbiAgfVxyXG5cclxuICAvKiogVHlwZSBndWFyZHMgKi9cclxuICBwcm90ZWN0ZWQgaXNBQUJCKFxyXG4gICAgYm94OiBCb3gzIHwgeyBtaW46IFZlY3RvcjNMaWtlOyBtYXg6IFZlY3RvcjNMaWtlIH0gfCBPQkJcclxuICApOiBib3ggaXMgQm94MyB7XHJcbiAgICByZXR1cm4gYm94IGluc3RhbmNlb2YgQm94MyB8fCAoJ21pbicgaW4gYm94ICYmICdtYXgnIGluIGJveClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc09CQihcclxuICAgIGJveDogQm94MyB8IHsgbWluOiBWZWN0b3IzTGlrZTsgbWF4OiBWZWN0b3IzTGlrZSB9IHwgT0JCXHJcbiAgKTogYm94IGlzIE9CQiB7XHJcbiAgICByZXR1cm4gYm94IGluc3RhbmNlb2YgT0JCXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTbmFwcyBhIHF1YXRlcm5pb24gdG8gdGhlIG5lYXJlc3QgZ3JpZCBiYXNlZCBvbiByb3RhdGlvblNuYXBBbmdsZS5cclxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igcm90YXRpb24gc25hcHBpbmcuXHJcbiAgICogQHBhcmFtIHEgVGhlIHF1YXRlcm5pb24gdG8gc25hcC5cclxuICAgKiBAcmV0dXJucyBUaGUgc25hcHBlZCBxdWF0ZXJuaW9uLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzbmFwUXVhdGVybmlvblRvR3JpZChxOiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcbiAgICAvKiogQ29udmVydCBxdWF0ZXJuaW9uIHRvIEV1bGVyIGFuZ2xlcyB1c2luZyBwb29sZWQgb2JqZWN0ICovXHJcbiAgICBfdGVtcEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKHEpXHJcblxyXG4gICAgLyoqIFNuYXAgZWFjaCBheGlzIHRvIHRoZSBjb25maWd1cmVkIGFuZ2xlIGluY3JlbWVudHMgKi9cclxuICAgIGlmICh0aGlzLnJvdGF0aW9uU25hcEFuZ2xlICE9PSBudWxsKSB7XHJcbiAgICAgIF90ZW1wRXVsZXIueCA9XHJcbiAgICAgICAgTWF0aC5yb3VuZChfdGVtcEV1bGVyLnggLyB0aGlzLnJvdGF0aW9uU25hcEFuZ2xlKSAqIHRoaXMucm90YXRpb25TbmFwQW5nbGVcclxuICAgICAgX3RlbXBFdWxlci55ID1cclxuICAgICAgICBNYXRoLnJvdW5kKF90ZW1wRXVsZXIueSAvIHRoaXMucm90YXRpb25TbmFwQW5nbGUpICogdGhpcy5yb3RhdGlvblNuYXBBbmdsZVxyXG4gICAgICBfdGVtcEV1bGVyLnogPVxyXG4gICAgICAgIE1hdGgucm91bmQoX3RlbXBFdWxlci56IC8gdGhpcy5yb3RhdGlvblNuYXBBbmdsZSkgKiB0aGlzLnJvdGF0aW9uU25hcEFuZ2xlXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENvbnZlcnQgYmFjayB0byBxdWF0ZXJuaW9uIHVzaW5nIHBvb2xlZCBvYmplY3QgKi9cclxuICAgIF90ZW1wUXVhdGVybmlvbi5zZXRGcm9tRXVsZXIoX3RlbXBFdWxlcilcclxuICAgIHJldHVybiBfdGVtcFF1YXRlcm5pb25cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuZG9lcyB0aGUgbGFzdCBzZWN0aW9uIGJveCBjaGFuZ2VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgdW5kb1NlY3Rpb25Cb3goKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50SGlzdG9yeUluZGV4ID4gMCkge1xyXG4gICAgICAvKiogTW92ZSBjdXJzb3IgYmFjayAqL1xyXG4gICAgICB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXgtLVxyXG5cclxuICAgICAgLyoqIEdldCB0aGUgc3RhdGUgYXQgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gKi9cclxuICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHRoaXMuc2VjdGlvbkJveEhpc3RvcnlbdGhpcy5jdXJyZW50SGlzdG9yeUluZGV4XVxyXG5cclxuICAgICAgaWYgKHByZXZpb3VzU3RhdGUpIHtcclxuICAgICAgICAvKiogQXBwbHkgdGhlIHByZXZpb3VzIHN0YXRlICovXHJcbiAgICAgICAgdGhpcy5hcHBseU9iYlN0YXRlKHByZXZpb3VzU3RhdGUpXHJcblxyXG4gICAgICAgIC8qKiBVcGRhdGUgdmlzdWFsIHN0YXRlICovXHJcbiAgICAgICAgdGhpcy51cGRhdGVQbGFuZXMoKVxyXG4gICAgICAgIHRoaXMudXBkYXRlVmlzdWFsKClcclxuICAgICAgICB0aGlzLnVwZGF0ZUZhY2VDb250cm9scyh0aGlzLmRyYWdnaW5nRmFjZSlcclxuXHJcbiAgICAgICAgLyoqIFVwZGF0ZSBzZWN0aW9uIG91dGxpbmVzICovXHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbk91dGxpbmVzID0gdGhpcy52aWV3ZXIuZ2V0RXh0ZW5zaW9uKFNlY3Rpb25PdXRsaW5lcylcclxuICAgICAgICBpZiAoc2VjdGlvbk91dGxpbmVzICYmIHNlY3Rpb25PdXRsaW5lcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICBzZWN0aW9uT3V0bGluZXMucmVxdWVzdFVwZGF0ZSh0cnVlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcigpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZG9lcyB0aGUgbGFzdCB1bmRvbmUgc2VjdGlvbiBib3ggY2hhbmdlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHJlZG9TZWN0aW9uQm94KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEhpc3RvcnlJbmRleCA8IHRoaXMuc2VjdGlvbkJveEhpc3RvcnkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAvKiogTW92ZSBjdXJzb3IgZm9yd2FyZCAqL1xyXG4gICAgICB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXgrK1xyXG5cclxuICAgICAgLyoqIEdldCB0aGUgc3RhdGUgYXQgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gKi9cclxuICAgICAgY29uc3QgbmV4dFN0YXRlID0gdGhpcy5zZWN0aW9uQm94SGlzdG9yeVt0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXhdXHJcbiAgICAgIGlmIChuZXh0U3RhdGUpIHtcclxuICAgICAgICAvKiogQXBwbHkgdGhlIG5leHQgc3RhdGUgKi9cclxuICAgICAgICB0aGlzLmFwcGx5T2JiU3RhdGUobmV4dFN0YXRlKVxyXG5cclxuICAgICAgICAvKiogVXBkYXRlIHZpc3VhbCBzdGF0ZSAqL1xyXG4gICAgICAgIHRoaXMudXBkYXRlUGxhbmVzKClcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc3VhbCgpXHJcbiAgICAgICAgdGhpcy51cGRhdGVGYWNlQ29udHJvbHModGhpcy5kcmFnZ2luZ0ZhY2UpXHJcblxyXG4gICAgICAgIC8qKiBVcGRhdGUgc2VjdGlvbiBvdXRsaW5lcyAqL1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25PdXRsaW5lcyA9IHRoaXMudmlld2VyLmdldEV4dGVuc2lvbihTZWN0aW9uT3V0bGluZXMpXHJcbiAgICAgICAgaWYgKHNlY3Rpb25PdXRsaW5lcyAmJiBzZWN0aW9uT3V0bGluZXMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgc2VjdGlvbk91dGxpbmVzLnJlcXVlc3RVcGRhdGUodHJ1ZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmlld2VyLnJlcXVlc3RSZW5kZXIoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbnVwIG1ldGhvZCB0byByZW1vdmUgZXZlbnQgbGlzdGVuZXJzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMua2V5ZG93bkhhbmRsZXIpIHtcclxuICAgICAgdGhpcy52aWV3ZXJcclxuICAgICAgICAuZ2V0UmVuZGVyZXIoKVxyXG4gICAgICAgIC5pbnB1dC5yZW1vdmVMaXN0ZW5lcihJbnB1dEV2ZW50LktleURvd24sIHRoaXMua2V5ZG93bkhhbmRsZXIpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5rZXl1cEhhbmRsZXIpIHtcclxuICAgICAgdGhpcy52aWV3ZXJcclxuICAgICAgICAuZ2V0UmVuZGVyZXIoKVxyXG4gICAgICAgIC5pbnB1dC5yZW1vdmVMaXN0ZW5lcihJbnB1dEV2ZW50LktleVVwLCB0aGlzLmtleXVwSGFuZGxlcilcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBCb3gzLFxyXG4gIENvbG9yLFxyXG4gIER5bmFtaWNEcmF3VXNhZ2UsXHJcbiAgR3JvdXAsXHJcbiAgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgTGluZTMsXHJcbiAgTWF0ZXJpYWwsXHJcbiAgTWF0cml4NCxcclxuICBQbGFuZSxcclxuICBWZWN0b3IyLFxyXG4gIFZlY3RvcjNcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgTGluZVNlZ21lbnRzMiB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9saW5lcy9MaW5lU2VnbWVudHMyLmpzJ1xyXG5pbXBvcnQgeyBMaW5lU2VnbWVudHNHZW9tZXRyeSB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9saW5lcy9MaW5lU2VnbWVudHNHZW9tZXRyeS5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICcuLi8uLi9jb252ZXJ0ZXIvR2VvbWV0cnkuanMnXHJcbmltcG9ydCBTcGVja2xlR2hvc3RNYXRlcmlhbCBmcm9tICcuLi8uLi9tYXRlcmlhbHMvU3BlY2tsZUdob3N0TWF0ZXJpYWwuanMnXHJcbmltcG9ydCBTcGVja2xlTGluZU1hdGVyaWFsIGZyb20gJy4uLy4uL21hdGVyaWFscy9TcGVja2xlTGluZU1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBFeHRlbnNpb24gfSBmcm9tICcuLi9FeHRlbnNpb24uanMnXHJcbmltcG9ydCB7IFNlY3Rpb25Ub29sLCB0eXBlIElWaWV3ZXIgfSBmcm9tICcuLi8uLi8uLi9pbmRleC5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnlUeXBlIH0gZnJvbSAnLi4vLi4vYmF0Y2hpbmcvQmF0Y2guanMnXHJcbmltcG9ydCB7IE9iamVjdExheWVycyB9IGZyb20gJy4uLy4uLy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCB7IE1lc2hCYXRjaCB9IGZyb20gJy4uLy4uL2JhdGNoaW5nL01lc2hCYXRjaC5qcydcclxuaW1wb3J0IExvZ2dlciBmcm9tICcuLi8uLi91dGlscy9Mb2dnZXIuanMnXHJcbmltcG9ydCB7IFNlY3Rpb25Ub29sRXZlbnQgfSBmcm9tICcuL1NlY3Rpb25Ub29sLmpzJ1xyXG5pbXBvcnQgeyBPQkIgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbWF0aC9PQkIuanMnXHJcblxyXG5leHBvcnQgZW51bSBQbGFuZUlkIHtcclxuICBQT1NJVElWRV9YID0gJ1BPU0lUSVZFX1gnLFxyXG4gIFBPU0lUSVZFX1kgPSAnUE9TSVRJVkVfWScsXHJcbiAgUE9TSVRJVkVfWiA9ICdQT1NJVElWRV9aJyxcclxuICBORUdBVElWRV9YID0gJ05FR0FUSVZFX1gnLFxyXG4gIE5FR0FUSVZFX1kgPSAnTkVHQVRJVkVfWScsXHJcbiAgTkVHQVRJVkVfWiA9ICdORUdBVElWRV9aJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBsYW5lT3V0bGluZSB7XHJcbiAgcmVuZGVyYWJsZTogTGluZVNlZ21lbnRzMlxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2VjdGlvbk91dGxpbmVzIGV4dGVuZHMgRXh0ZW5zaW9uIHtcclxuICBwdWJsaWMgZ2V0IGluamVjdCgpIHtcclxuICAgIHJldHVybiBbU2VjdGlvblRvb2xdXHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE9VVExJTkVfWl9PRkZTRVQgPSAwLjAwMDFcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTklUSUFMX0JVRkZFUl9TSVpFID0gNjAwMDAgLy8gTXVzdCBiZSBhIG11bHRpcGxlIG9mIDZcclxuXHJcbiAgcHJpdmF0ZSB0bXBWZWM6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcbiAgcHJpdmF0ZSB1cDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDEsIDApXHJcbiAgcHJpdmF0ZSBkb3duOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMCwgLTEsIDApXHJcbiAgcHJpdmF0ZSBsZWZ0OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoLTEsIDAsIDApXHJcbiAgcHJpdmF0ZSByaWdodDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDEsIDAsIDApXHJcbiAgcHJpdmF0ZSBmb3J3YXJkOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMCwgMCwgMSlcclxuICBwcml2YXRlIGJhY2s6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygwLCAwLCAtMSlcclxuXHJcbiAgcHJpdmF0ZSBwbGFuZU91dGxpbmVzOiBSZWNvcmQ8c3RyaW5nLCBQbGFuZU91dGxpbmU+ID0ge31cclxuICBwcml2YXRlIGxhc3RTZWN0aW9uUGxhbmVzOiBQbGFuZVtdID0gW11cclxuICBwcml2YXRlIHNlY3Rpb25QbGFuZXNDaGFuZ2VkOiBQbGFuZVtdID0gW11cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHZpZXdlcjogSVZpZXdlciwgcHJvdGVjdGVkIHNlY3Rpb25Qcm92aWRlcjogU2VjdGlvblRvb2wpIHtcclxuICAgIHN1cGVyKHZpZXdlcilcclxuICAgIHRoaXMucGxhbmVPdXRsaW5lc1tQbGFuZUlkLlBPU0lUSVZFX1hdID0gdGhpcy5jcmVhdGVQbGFuZU91dGxpbmUoUGxhbmVJZC5QT1NJVElWRV9YKVxyXG4gICAgdGhpcy5wbGFuZU91dGxpbmVzW1BsYW5lSWQuTkVHQVRJVkVfWF0gPSB0aGlzLmNyZWF0ZVBsYW5lT3V0bGluZShQbGFuZUlkLk5FR0FUSVZFX1gpXHJcbiAgICB0aGlzLnBsYW5lT3V0bGluZXNbUGxhbmVJZC5QT1NJVElWRV9ZXSA9IHRoaXMuY3JlYXRlUGxhbmVPdXRsaW5lKFBsYW5lSWQuUE9TSVRJVkVfWSlcclxuICAgIHRoaXMucGxhbmVPdXRsaW5lc1tQbGFuZUlkLk5FR0FUSVZFX1ldID0gdGhpcy5jcmVhdGVQbGFuZU91dGxpbmUoUGxhbmVJZC5ORUdBVElWRV9ZKVxyXG4gICAgdGhpcy5wbGFuZU91dGxpbmVzW1BsYW5lSWQuTkVHQVRJVkVfWl0gPSB0aGlzLmNyZWF0ZVBsYW5lT3V0bGluZShQbGFuZUlkLk5FR0FUSVZFX1opXHJcbiAgICB0aGlzLnBsYW5lT3V0bGluZXNbUGxhbmVJZC5QT1NJVElWRV9aXSA9IHRoaXMuY3JlYXRlUGxhbmVPdXRsaW5lKFBsYW5lSWQuUE9TSVRJVkVfWilcclxuXHJcbiAgICBjb25zdCBzZWN0aW9uT3V0bGluZXNHcm91cCA9IG5ldyBHcm91cCgpXHJcbiAgICBzZWN0aW9uT3V0bGluZXNHcm91cC5uYW1lID0gJ1NlY3Rpb25Cb3hPdXRsaW5lcydcclxuICAgIHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkuc2NlbmUuYWRkKHNlY3Rpb25PdXRsaW5lc0dyb3VwKVxyXG4gICAgc2VjdGlvbk91dGxpbmVzR3JvdXAuYWRkKHRoaXMuZ2V0UGxhbmVPdXRsaW5lKFBsYW5lSWQuTkVHQVRJVkVfWikucmVuZGVyYWJsZSlcclxuICAgIHNlY3Rpb25PdXRsaW5lc0dyb3VwLmFkZCh0aGlzLmdldFBsYW5lT3V0bGluZShQbGFuZUlkLlBPU0lUSVZFX1opLnJlbmRlcmFibGUpXHJcbiAgICBzZWN0aW9uT3V0bGluZXNHcm91cC5hZGQodGhpcy5nZXRQbGFuZU91dGxpbmUoUGxhbmVJZC5QT1NJVElWRV9YKS5yZW5kZXJhYmxlKVxyXG4gICAgc2VjdGlvbk91dGxpbmVzR3JvdXAuYWRkKHRoaXMuZ2V0UGxhbmVPdXRsaW5lKFBsYW5lSWQuTkVHQVRJVkVfWCkucmVuZGVyYWJsZSlcclxuICAgIHNlY3Rpb25PdXRsaW5lc0dyb3VwLmFkZCh0aGlzLmdldFBsYW5lT3V0bGluZShQbGFuZUlkLlBPU0lUSVZFX1kpLnJlbmRlcmFibGUpXHJcbiAgICBzZWN0aW9uT3V0bGluZXNHcm91cC5hZGQodGhpcy5nZXRQbGFuZU91dGxpbmUoUGxhbmVJZC5ORUdBVElWRV9ZKS5yZW5kZXJhYmxlKVxyXG5cclxuICAgIHRoaXMubGFzdFNlY3Rpb25QbGFuZXMucHVzaChcclxuICAgICAgbmV3IFBsYW5lKCksXHJcbiAgICAgIG5ldyBQbGFuZSgpLFxyXG4gICAgICBuZXcgUGxhbmUoKSxcclxuICAgICAgbmV3IFBsYW5lKCksXHJcbiAgICAgIG5ldyBQbGFuZSgpLFxyXG4gICAgICBuZXcgUGxhbmUoKVxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMuc2VjdGlvblByb3ZpZGVyLm9uKFxyXG4gICAgICBTZWN0aW9uVG9vbEV2ZW50LkRyYWdTdGFydCxcclxuICAgICAgdGhpcy5vblNlY3Rpb25Cb3hEcmFnU3RhcnQuYmluZCh0aGlzKVxyXG4gICAgKVxyXG4gICAgdGhpcy5zZWN0aW9uUHJvdmlkZXIub24oXHJcbiAgICAgIFNlY3Rpb25Ub29sRXZlbnQuRHJhZ0VuZCxcclxuICAgICAgdGhpcy5vblNlY3Rpb25Cb3hEcmFnRW5kLmJpbmQodGhpcylcclxuICAgIClcclxuICAgIHRoaXMuc2VjdGlvblByb3ZpZGVyLm9uKFNlY3Rpb25Ub29sRXZlbnQuVXBkYXRlZCwgdGhpcy5zZWN0aW9uVXBkYXRlZC5iaW5kKHRoaXMpKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQbGFuZU91dGxpbmUocGxhbmVJZDogUGxhbmVJZCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGxhbmVPdXRsaW5lc1twbGFuZUlkXVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlXHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5wbGFuZU91dGxpbmVzKSB7XHJcbiAgICAgIHRoaXMucGxhbmVPdXRsaW5lc1trXS5yZW5kZXJhYmxlLnZpc2libGUgPSB2YWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlY3Rpb25VcGRhdGVkKHBsYW5lczogUGxhbmVbXSkge1xyXG4gICAgaWYgKCF0aGlzLnNlY3Rpb25Qcm92aWRlci5lbmFibGVkKSB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgZm9yIChjb25zdCBwbGFuZSBpbiB0aGlzLnBsYW5lT3V0bGluZXMpIHtcclxuICAgICAgY29uc3QgY2xpcHBpbmdQbGFuZXMgPSBwbGFuZXMuZmlsdGVyKCh2YWx1ZSkgPT4gdGhpcy5nZXRQbGFuZUlkKHZhbHVlKSAhPT0gcGxhbmUpXHJcbiAgICAgIHRoaXMucGxhbmVPdXRsaW5lc1twbGFuZV0ucmVuZGVyYWJsZS5tYXRlcmlhbC5jbGlwcGluZ1BsYW5lcyA9IGNsaXBwaW5nUGxhbmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVxdWVzdFVwZGF0ZShmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNldFNlY3Rpb25QbGFuZUNoYW5nZWQodGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5jbGlwcGluZ1BsYW5lcylcclxuICAgIHRoaXMudXBkYXRlT3V0bGluZXMoXHJcbiAgICAgIGZvcmNlID8gdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5jbGlwcGluZ1BsYW5lcyA6IHRoaXMuc2VjdGlvblBsYW5lc0NoYW5nZWRcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGxhbmVPdXRsaW5lKFxyXG4gICAgYmF0Y2hlczogTWVzaEJhdGNoW10sXHJcbiAgICBfcGxhbmU6IFBsYW5lLFxyXG4gICAgb3V0bGluZU9mZnNldDogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBjb25zdCB0ZW1wVmVjdG9yID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgY29uc3QgdGVtcFZlY3RvcjEgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBjb25zdCB0ZW1wVmVjdG9yMiA9IG5ldyBWZWN0b3IzKClcclxuICAgIGNvbnN0IHRlbXBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgY29uc3QgdGVtcFZlY3RvcjQgPSBuZXcgVmVjdG9yMygpXHJcbiAgICBjb25zdCB0ZW1wTGluZSA9IG5ldyBMaW5lMygpXHJcbiAgICBjb25zdCBwbGFuZUlkID0gdGhpcy5nZXRQbGFuZUlkKF9wbGFuZSlcclxuICAgIGlmICghcGxhbmVJZCkge1xyXG4gICAgICBMb2dnZXIuZXJyb3IoYEludmFsaWQgcGxhbmUhIEFib3J0aW5nIHNlY3Rpb24gb3V0bGluZSB1cGRhdGVgLCBfcGxhbmUubm9ybWFsKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGNsaXBPdXRsaW5lID0gdGhpcy5wbGFuZU91dGxpbmVzW3BsYW5lSWRdLnJlbmRlcmFibGVcclxuICAgIGxldCBpbmRleCA9IDBcclxuICAgIGxldCBwb3NBdHRyID0gKFxyXG4gICAgICBjbGlwT3V0bGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZVN0YXJ0J10gYXMgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGVcclxuICAgICkuZGF0YVxyXG4gICAgLyoqIE5vdCBhIGZhbiBvZiB0aGlzLCBidXQgd2UgaGF2ZSBubyBjaG9pY2UuIFdlIGNhbid0IGtub3cgYmVmb3JlaGFuZCB0aGUgcmVzdWx0aW5nIG51bWJlciBvZiBpbnRlcnNlY3Rpb24gcG9pbnRzICovXHJcbiAgICBjb25zdCBzY3JhdGNoQnVmZmVyID0gbmV3IEFycmF5PG51bWJlcj4oKVxyXG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYXRjaGVzLmxlbmd0aDsgYisrKSB7XHJcbiAgICAgIGNvbnN0IHBsYW5lID0gbmV3IFBsYW5lKCkuY29weShfcGxhbmUpXHJcbiAgICAgIGJhdGNoZXNbYl0ubWVzaC5UQVMuc2hhcGVjYXN0KHtcclxuICAgICAgICBpbnRlcnNlY3RzVEFTOiAoXHJcbiAgICAgICAgICBib3g6IEJveDNcclxuICAgICAgICAgIC8vIGlzTGVhZjogYm9vbGVhbixcclxuICAgICAgICAgIC8vIHNjb3JlOiBudW1iZXIgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAvLyBkZXB0aDogbnVtYmVyLFxyXG4gICAgICAgICAgLy8gbm9kZUluZGV4OiBudW1iZXJcclxuICAgICAgICApID0+IHtcclxuICAgICAgICAgIGNvbnN0IGxvY2FsUGxhbmUgPSBwbGFuZVxyXG4gICAgICAgICAgcmV0dXJuIGxvY2FsUGxhbmUuaW50ZXJzZWN0c0JveChib3gpXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaW50ZXJzZWN0c0JvdW5kczogKGJveCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgbG9jYWxQbGFuZSA9IHBsYW5lXHJcbiAgICAgICAgICByZXR1cm4gbG9jYWxQbGFuZS5pbnRlcnNlY3RzQm94KGJveClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGludGVyc2VjdHNUcmlhbmdsZSh0cmksIF9pLCBfY29udGFpbmVkLCBfZGVwdGgsIGJhdGNoT2JqZWN0KSB7XHJcbiAgICAgICAgICAvKiogQ2F0ZXJpbmcgdG8gdHlwZXNjcmlwdCAqL1xyXG4gICAgICAgICAgLyoqIFdlJ3JlIGludGVyc2VjdGluZyB0aGUgQVMgZm9yIG1lc2hlcy4gVGhlcmUgd2lsbCBhbHdheXMgYmUgYSBiYXRjaE9iamVjdCAqL1xyXG4gICAgICAgICAgaWYgKCFiYXRjaE9iamVjdCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ051bGwgYmF0Y2ggb2JqZWN0IGluIEFTIGludGVyc2VjdGlvbiEnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gY2hlY2sgZWFjaCB0cmlhbmdsZSBlZGdlIHRvIHNlZSBpZiBpdCBpbnRlcnNlY3RzIHdpdGggdGhlIHBsYW5lLiBJZiBzbyB0aGVuXHJcbiAgICAgICAgICAvLyBhZGQgaXQgdG8gdGhlIGxpc3Qgb2Ygc2VnbWVudHMuXHJcbiAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IGJhdGNoZXNbYl0ubWVzaC5nZXRCYXRjaE9iamVjdE1hdGVyaWFsKFxyXG4gICAgICAgICAgICBiYXRjaE9iamVjdFxyXG4gICAgICAgICAgKSBhcyBNYXRlcmlhbFxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBtYXRlcmlhbCBpbnN0YW5jZW9mIFNwZWNrbGVHaG9zdE1hdGVyaWFsIHx8XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnZpc2libGUgPT09IGZhbHNlIHx8XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID09PSBudWxsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHJldHVyblxyXG5cclxuICAgICAgICAgIGNvbnN0IGxvY2FsUGxhbmUgPSBwbGFuZVxyXG4gICAgICAgICAgbGV0IGNvdW50ID0gMFxyXG4gICAgICAgICAgdGVtcExpbmUuc3RhcnQuY29weSh0cmkuYSlcclxuICAgICAgICAgIHRlbXBMaW5lLmVuZC5jb3B5KHRyaS5iKVxyXG4gICAgICAgICAgaWYgKGxvY2FsUGxhbmUuaW50ZXJzZWN0TGluZSh0ZW1wTGluZSwgdGVtcFZlY3RvcikpIHtcclxuICAgICAgICAgICAgdGVtcFZlY3Rvci5hZGQoXHJcbiAgICAgICAgICAgICAgdGVtcFZlY3RvcjQuY29weShwbGFuZS5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC1vdXRsaW5lT2Zmc2V0KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJbaW5kZXggKiAzXSA9IHRlbXBWZWN0b3IueFxyXG4gICAgICAgICAgICBzY3JhdGNoQnVmZmVyW2luZGV4ICogMyArIDFdID0gdGVtcFZlY3Rvci55XHJcbiAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJbaW5kZXggKiAzICsgMl0gPSB0ZW1wVmVjdG9yLnpcclxuICAgICAgICAgICAgaW5kZXgrK1xyXG4gICAgICAgICAgICBjb3VudCsrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0ZW1wTGluZS5zdGFydC5jb3B5KHRyaS5iKVxyXG4gICAgICAgICAgdGVtcExpbmUuZW5kLmNvcHkodHJpLmMpXHJcbiAgICAgICAgICBpZiAobG9jYWxQbGFuZS5pbnRlcnNlY3RMaW5lKHRlbXBMaW5lLCB0ZW1wVmVjdG9yKSkge1xyXG4gICAgICAgICAgICB0ZW1wVmVjdG9yLmFkZChcclxuICAgICAgICAgICAgICB0ZW1wVmVjdG9yNC5jb3B5KHBsYW5lLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLW91dGxpbmVPZmZzZXQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlcltpbmRleCAqIDNdID0gdGVtcFZlY3Rvci54XHJcbiAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJbaW5kZXggKiAzICsgMV0gPSB0ZW1wVmVjdG9yLnlcclxuICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlcltpbmRleCAqIDMgKyAyXSA9IHRlbXBWZWN0b3IuelxyXG4gICAgICAgICAgICBjb3VudCsrXHJcbiAgICAgICAgICAgIGluZGV4KytcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRlbXBMaW5lLnN0YXJ0LmNvcHkodHJpLmMpXHJcbiAgICAgICAgICB0ZW1wTGluZS5lbmQuY29weSh0cmkuYSlcclxuICAgICAgICAgIGlmIChsb2NhbFBsYW5lLmludGVyc2VjdExpbmUodGVtcExpbmUsIHRlbXBWZWN0b3IpKSB7XHJcbiAgICAgICAgICAgIHRlbXBWZWN0b3IuYWRkKFxyXG4gICAgICAgICAgICAgIHRlbXBWZWN0b3I0LmNvcHkocGxhbmUubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtb3V0bGluZU9mZnNldClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBzY3JhdGNoQnVmZmVyW2luZGV4ICogM10gPSB0ZW1wVmVjdG9yLnhcclxuICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlcltpbmRleCAqIDMgKyAxXSA9IHRlbXBWZWN0b3IueVxyXG4gICAgICAgICAgICBzY3JhdGNoQnVmZmVyW2luZGV4ICogMyArIDJdID0gdGVtcFZlY3Rvci56XHJcbiAgICAgICAgICAgIGNvdW50KytcclxuICAgICAgICAgICAgaW5kZXgrK1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gV2hlbiB0aGUgcGxhbmUgcGFzc2VzIHRocm91Z2ggYSB2ZXJ0ZXggYW5kIG9uZSBvZiB0aGUgZWRnZXMgb2YgdGhlIHRyaWFuZ2xlLCB0aGVyZSB3aWxsIGJlIHRocmVlIGludGVyc2VjdGlvbnMsIHR3byBvZiB3aGljaCBtdXN0IGJlIHJlcGVhdGVkXHJcbiAgICAgICAgICBpZiAoY291bnQgPT09IDMpIHtcclxuICAgICAgICAgICAgdGVtcFZlY3RvcjEuc2V0KFxyXG4gICAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJbKGluZGV4IC0gMykgKiAzXSxcclxuICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVyWyhpbmRleCAtIDMpICogMyArIDFdLFxyXG4gICAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJbKGluZGV4IC0gMykgKiAzICsgMl1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB0ZW1wVmVjdG9yMi5zZXQoXHJcbiAgICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlclsoaW5kZXggLSAyKSAqIDNdLFxyXG4gICAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJbKGluZGV4IC0gMikgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlclsoaW5kZXggLSAyKSAqIDMgKyAyXVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHRlbXBWZWN0b3IzLnNldChcclxuICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVyWyhpbmRleCAtIDEpICogM10sXHJcbiAgICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlclsoaW5kZXggLSAxKSAqIDMgKyAxXSxcclxuICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVyWyhpbmRleCAtIDEpICogMyArIDJdXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3QgcG9pbnQgaXMgYSBkdXBsaWNhdGUgaW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgIGlmICh0ZW1wVmVjdG9yMy5lcXVhbHModGVtcFZlY3RvcjEpIHx8IHRlbXBWZWN0b3IzLmVxdWFscyh0ZW1wVmVjdG9yMikpIHtcclxuICAgICAgICAgICAgICBjb3VudC0tXHJcbiAgICAgICAgICAgICAgaW5kZXgtLVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRlbXBWZWN0b3IxLmVxdWFscyh0ZW1wVmVjdG9yMikpIHtcclxuICAgICAgICAgICAgICAvLyBJZiB0aGUgbGFzdCBwb2ludCBpcyBub3QgYSBkdXBsaWNhdGUgaW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgICAgLy8gU2V0IHRoZSBwZW51bHRpbWF0ZSBwb2ludCBhcyBhIGRpc3RpbmN0IHBvaW50IGFuZCBkZWxldGUgdGhlIGxhc3QgcG9pbnRcclxuICAgICAgICAgICAgICB0ZW1wVmVjdG9yMy5zZXQodGVtcFZlY3Rvci54LCB0ZW1wVmVjdG9yLnksIHRlbXBWZWN0b3IueilcclxuICAgICAgICAgICAgICB0ZW1wVmVjdG9yMy5hZGQoXHJcbiAgICAgICAgICAgICAgICB0ZW1wVmVjdG9yNC5jb3B5KHBsYW5lLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLW91dGxpbmVPZmZzZXQpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJbKGluZGV4IC0gMikgKiAzXSA9IHRlbXBWZWN0b3IzLnhcclxuICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVyWyhpbmRleCAtIDIpICogMyArIDFdID0gdGVtcFZlY3RvcjMueVxyXG4gICAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJbKGluZGV4IC0gMikgKiAzICsgMl0gPSB0ZW1wVmVjdG9yMy56XHJcbiAgICAgICAgICAgICAgY291bnQtLVxyXG4gICAgICAgICAgICAgIGluZGV4LS1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gSWYgd2Ugb25seSBpbnRlcnNlY3RlZCB3aXRoIG9uZSBvciB0aHJlZSBzaWRlcyB0aGVuIGp1c3QgcmVtb3ZlIGl0LiBUaGlzIGNvdWxkIGJlIGhhbmRsZWRcclxuICAgICAgICAgIC8vIG1vcmUgZ3JhY2VmdWxseS5cclxuICAgICAgICAgIGlmIChjb3VudCAhPT0gMikge1xyXG4gICAgICAgICAgICBpbmRleCAtPSBjb3VudFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGlmIChzY3JhdGNoQnVmZmVyLmxlbmd0aCA+IHBvc0F0dHIuYXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzaXplR2VvbWV0cnlCdWZmZXIodGhpcy5wbGFuZU91dGxpbmVzW3BsYW5lSWRdLCBzY3JhdGNoQnVmZmVyLmxlbmd0aClcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBSZXNpemVkIG91dGxpbmUgYnVmZmVyIGZyb20gJHtwb3NBdHRyLmFycmF5Lmxlbmd0aH0gdG8gJHtcclxuICAgICAgICAgIHNjcmF0Y2hCdWZmZXIubGVuZ3RoXHJcbiAgICAgICAgfS4gJHtzY3JhdGNoQnVmZmVyLmxlbmd0aCAvIDZ9IGluc3RhbmNlIGNvdW50YFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBwb3NBdHRyID0gKFxyXG4gICAgICBjbGlwT3V0bGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZVN0YXJ0J10gYXMgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGVcclxuICAgICkuZGF0YVxyXG4gICAgY29uc3QgcG9zQXR0ckxvdyA9IChcclxuICAgICAgY2xpcE91dGxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydExvdyddIGFzIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlXHJcbiAgICApLmRhdGFcclxuICAgIEdlb21ldHJ5LkRvdWJsZVRvSGlnaExvd0J1ZmZlcihcclxuICAgICAgc2NyYXRjaEJ1ZmZlcixcclxuICAgICAgcG9zQXR0ckxvdy5hcnJheSBhcyBGbG9hdDMyQXJyYXksXHJcbiAgICAgIHBvc0F0dHIuYXJyYXkgYXMgRmxvYXQzMkFycmF5XHJcbiAgICApXHJcbiAgICAvLyBwb3NBdHRyLnNldChzY3JhdGNoQnVmZmVyLCAwKVxyXG4gICAgcG9zQXR0ci5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIHBvc0F0dHIudXBkYXRlUmFuZ2UgPSB7IG9mZnNldDogMCwgY291bnQ6IGluZGV4ICogMyB9XHJcbiAgICBwb3NBdHRyTG93Lm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgcG9zQXR0ckxvdy51cGRhdGVSYW5nZSA9IHsgb2Zmc2V0OiAwLCBjb3VudDogaW5kZXggKiAzIH1cclxuICAgIGNsaXBPdXRsaW5lLnZpc2libGUgPSB0cnVlXHJcbiAgICBjbGlwT3V0bGluZS5nZW9tZXRyeS5pbnN0YW5jZUNvdW50ID0gaW5kZXggLyAyXHJcbiAgICBjbGlwT3V0bGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZVN0YXJ0J10ubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgICBjbGlwT3V0bGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZUVuZCddLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgY2xpcE91dGxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydExvdyddLm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgY2xpcE91dGxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VFbmRMb3cnXS5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICAgIGNsaXBPdXRsaW5lLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpXHJcbiAgICBjbGlwT3V0bGluZS5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQbGFuZU91dGxpbmUocGxhbmVJZDogc3RyaW5nKTogUGxhbmVPdXRsaW5lIHtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBGbG9hdDY0QXJyYXkoU2VjdGlvbk91dGxpbmVzLklOSVRJQUxfQlVGRkVSX1NJWkUpXHJcbiAgICBjb25zdCBsaW5lR2VvbWV0cnkgPSBuZXcgTGluZVNlZ21lbnRzR2VvbWV0cnkoKVxyXG4gICAgLyoqIFdlIG5lZWQgdG8gcmUtYWxsb2NhdGUsIG90aGVyd2lzZSB0aHJlZS5qcyB3aWxsIGRvIGl0IGFueXdheSAqL1xyXG4gICAgbGluZUdlb21ldHJ5LnNldFBvc2l0aW9ucyhuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlcikpXHJcbiAgICA7KFxyXG4gICAgICBsaW5lR2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydCddIGFzIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlXHJcbiAgICApLmRhdGEuc2V0VXNhZ2UoRHluYW1pY0RyYXdVc2FnZSlcclxuXHJcbiAgICBHZW9tZXRyeS51cGRhdGVSVEVHZW9tZXRyeShsaW5lR2VvbWV0cnksIGJ1ZmZlcilcclxuICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFNwZWNrbGVMaW5lTWF0ZXJpYWwoXHJcbiAgICAgIHtcclxuICAgICAgICBjb2xvcjogMHgwNDdlZmIsXHJcbiAgICAgICAgbGluZXdpZHRoOiAyLFxyXG4gICAgICAgIHdvcmxkVW5pdHM6IGZhbHNlLFxyXG4gICAgICAgIHZlcnRleENvbG9yczogZmFsc2UsXHJcbiAgICAgICAgYWxwaGFUb0NvdmVyYWdlOiBmYWxzZSxcclxuICAgICAgICByZXNvbHV0aW9uOiBuZXcgVmVjdG9yMig5MTksIDg0OClcclxuICAgICAgfSxcclxuICAgICAgWydVU0VfUlRFJ11cclxuICAgIClcclxuICAgIG1hdGVyaWFsLmNvbG9yID0gbmV3IENvbG9yKDB4MDQ3ZWZiKVxyXG4gICAgbWF0ZXJpYWwuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcbiAgICBtYXRlcmlhbC5saW5ld2lkdGggPSAyXHJcbiAgICBtYXRlcmlhbC53b3JsZFVuaXRzID0gZmFsc2VcclxuICAgIG1hdGVyaWFsLnJlc29sdXRpb24gPSBuZXcgVmVjdG9yMigxNTEzLCAxMzA2KVxyXG5cclxuICAgIGNvbnN0IGNsaXBPdXRsaW5lID0gbmV3IExpbmVTZWdtZW50czIobGluZUdlb21ldHJ5LCBtYXRlcmlhbClcclxuICAgIGNsaXBPdXRsaW5lLm5hbWUgPSBgJHtwbGFuZUlkfS1vdXRsaW5lYFxyXG4gICAgY2xpcE91dGxpbmUuZnJ1c3R1bUN1bGxlZCA9IGZhbHNlXHJcbiAgICBjbGlwT3V0bGluZS5yZW5kZXJPcmRlciA9IDFcclxuICAgIGNsaXBPdXRsaW5lLmxheWVycy5zZXQoT2JqZWN0TGF5ZXJzLlBST1BTKVxyXG4gICAgY2xpcE91dGxpbmUudmlzaWJsZSA9IGZhbHNlXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVuZGVyYWJsZTogY2xpcE91dGxpbmVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TZWN0aW9uQm94RHJhZ1N0YXJ0KCkge1xyXG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TZWN0aW9uQm94RHJhZ0VuZCgpIHtcclxuICAgIHRoaXMuc2V0U2VjdGlvblBsYW5lQ2hhbmdlZCh0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLmNsaXBwaW5nUGxhbmVzKVxyXG4gICAgdGhpcy51cGRhdGVPdXRsaW5lcyh0aGlzLnNlY3Rpb25QbGFuZXNDaGFuZ2VkKVxyXG4gICAgLyoqIDIyLjAzLjIwMjU6IFRoaXMgYmVjYW1lIG9ic29sZXRlIG9uY2Ugd2Ugc3dpdGNoZWQgdG8gT3JpZW50ZWRTZWN0aW9uVG9vbCAqL1xyXG4gICAgLy8gY29uc3QgZ2VuZXJhdGUgPSAoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuc2V0U2VjdGlvblBsYW5lQ2hhbmdlZCh0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLmNsaXBwaW5nUGxhbmVzKVxyXG4gICAgLy8gICB0aGlzLnVwZGF0ZU91dGxpbmVzKHRoaXMuc2VjdGlvblBsYW5lc0NoYW5nZWQpXHJcbiAgICAvLyAgIHRoaXMuc2VjdGlvblByb3ZpZGVyLnJlbW92ZUxpc3RlbmVyKFNlY3Rpb25Ub29sRXZlbnQuVXBkYXRlZCwgZ2VuZXJhdGUpXHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLnNlY3Rpb25Qcm92aWRlci5vbihTZWN0aW9uVG9vbEV2ZW50LlVwZGF0ZWQsIGdlbmVyYXRlKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWN0aW9uUGxhbmVDaGFuZ2VkKHBsYW5lczogUGxhbmVbXSkge1xyXG4gICAgdGhpcy5zZWN0aW9uUGxhbmVzQ2hhbmdlZC5sZW5ndGggPSAwXHJcbiAgICBjb25zdCBlcHNpbG9uID0gdGhpcy52aWV3ZXIuV29ybGQuZ2V0UmVsYXRpdmVPZmZzZXQoMC4wMDAxKVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBwbGFuZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIE1hdGguYWJzKHRoaXMubGFzdFNlY3Rpb25QbGFuZXNba10uY29uc3RhbnQgLSBwbGFuZXNba10uY29uc3RhbnQpID4gZXBzaWxvbiB8fFxyXG4gICAgICAgIE1hdGguYWJzKFxyXG4gICAgICAgICAgdGhpcy5sYXN0U2VjdGlvblBsYW5lc1trXS5ub3JtYWwubGVuZ3RoKCkgLSBwbGFuZXNba10ubm9ybWFsLmxlbmd0aCgpXHJcbiAgICAgICAgKSA+IGVwc2lsb25cclxuICAgICAgKVxyXG4gICAgICAgIHRoaXMuc2VjdGlvblBsYW5lc0NoYW5nZWQucHVzaChwbGFuZXNba10pXHJcbiAgICAgIHRoaXMubGFzdFNlY3Rpb25QbGFuZXNba10uY29weShwbGFuZXNba10pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU91dGxpbmVzKHBsYW5lczogUGxhbmVbXSkge1xyXG4gICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG4gICAgY29uc3Qgb3V0bGluZU9mZnNldCA9IHRoaXMudmlld2VyLldvcmxkLmdldFJlbGF0aXZlT2Zmc2V0KFxyXG4gICAgICBTZWN0aW9uT3V0bGluZXMuT1VUTElORV9aX09GRlNFVFxyXG4gICAgKVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBwbGFuZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgdGhpcy51cGRhdGVQbGFuZU91dGxpbmUoXHJcbiAgICAgICAgdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKS5iYXRjaGVyLmdldEJhdGNoZXModW5kZWZpbmVkLCBHZW9tZXRyeVR5cGUuTUVTSCksXHJcbiAgICAgICAgcGxhbmVzW2tdLFxyXG4gICAgICAgIG91dGxpbmVPZmZzZXRcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbmFibGVkID0gdGhpcy5zZWN0aW9uUHJvdmlkZXIuZW5hYmxlZFxyXG4gICAgTG9nZ2VyLndhcm4oJ091dGxpbmUgdGltZTogJywgcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplR2VvbWV0cnlCdWZmZXIob3V0bGluZTogUGxhbmVPdXRsaW5lLCBzaXplOiBudW1iZXIpIHtcclxuICAgIG91dGxpbmUucmVuZGVyYWJsZS5nZW9tZXRyeS5kaXNwb3NlKClcclxuXHJcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUpXHJcbiAgICBvdXRsaW5lLnJlbmRlcmFibGUuZ2VvbWV0cnkgPSBuZXcgTGluZVNlZ21lbnRzR2VvbWV0cnkoKVxyXG4gICAgb3V0bGluZS5yZW5kZXJhYmxlLmdlb21ldHJ5LnNldFBvc2l0aW9ucyhidWZmZXIpXHJcbiAgICA7KFxyXG4gICAgICBvdXRsaW5lLnJlbmRlcmFibGUuZ2VvbWV0cnkuYXR0cmlidXRlc1tcclxuICAgICAgICAnaW5zdGFuY2VTdGFydCdcclxuICAgICAgXSBhcyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZVxyXG4gICAgKS5kYXRhLnNldFVzYWdlKER5bmFtaWNEcmF3VXNhZ2UpXHJcbiAgICBHZW9tZXRyeS51cGRhdGVSVEVHZW9tZXRyeShvdXRsaW5lLnJlbmRlcmFibGUuZ2VvbWV0cnksIGJ1ZmZlcilcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGxhbmVJZChwbGFuZTogUGxhbmUpOiBQbGFuZUlkIHwgdW5kZWZpbmVkIHtcclxuICAgIHRoaXMudG1wVmVjLnNldChwbGFuZS5ub3JtYWwueCwgcGxhbmUubm9ybWFsLnksIHBsYW5lLm5vcm1hbC56KVxyXG4gICAgbGV0IGJveCA9IHRoaXMuc2VjdGlvblByb3ZpZGVyLmdldEJveCgpXHJcbiAgICBpZiAoYm94IGluc3RhbmNlb2YgQm94MykgYm94ID0gbmV3IE9CQigpLmZyb21Cb3gzKGJveClcclxuICAgIGNvbnN0IGludlJvdGF0aW9uID0gbmV3IE1hdHJpeDQoKS5zZXRGcm9tTWF0cml4Myhib3gucm90YXRpb24pLmludmVydCgpXHJcbiAgICB0aGlzLnRtcFZlYy5hcHBseU1hdHJpeDQoaW52Um90YXRpb24pLm5vcm1hbGl6ZSgpXHJcbiAgICB0aGlzLnRtcFZlYy5zZXQoXHJcbiAgICAgIE1hdGgucm91bmQodGhpcy50bXBWZWMueCksXHJcbiAgICAgIE1hdGgucm91bmQodGhpcy50bXBWZWMueSksXHJcbiAgICAgIE1hdGgucm91bmQodGhpcy50bXBWZWMueilcclxuICAgIClcclxuICAgIGlmICh0aGlzLnRtcFZlYy5lcXVhbHModGhpcy5yaWdodCkpIHJldHVybiBQbGFuZUlkLlBPU0lUSVZFX1hcclxuICAgIGlmICh0aGlzLnRtcFZlYy5lcXVhbHModGhpcy5sZWZ0KSkgcmV0dXJuIFBsYW5lSWQuTkVHQVRJVkVfWFxyXG4gICAgaWYgKHRoaXMudG1wVmVjLmVxdWFscyh0aGlzLnVwKSkgcmV0dXJuIFBsYW5lSWQuUE9TSVRJVkVfWVxyXG4gICAgaWYgKHRoaXMudG1wVmVjLmVxdWFscyh0aGlzLmRvd24pKSByZXR1cm4gUGxhbmVJZC5ORUdBVElWRV9ZXHJcbiAgICBpZiAodGhpcy50bXBWZWMuZXF1YWxzKHRoaXMuYmFjaykpIHJldHVybiBQbGFuZUlkLk5FR0FUSVZFX1pcclxuICAgIGlmICh0aGlzLnRtcFZlYy5lcXVhbHModGhpcy5mb3J3YXJkKSkgcmV0dXJuIFBsYW5lSWQuUE9TSVRJVkVfWlxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWRcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHN0YyBmcm9tICdzdHJpbmctdG8tY29sb3InXHJcbmltcG9ydCB7IENvbG9yLCBUZXh0dXJlIH0gZnJvbSAndGhyZWUnXHJcblxyXG5pbXBvcnQgeyBBc3NldHMgfSBmcm9tICcuLi9Bc3NldHMuanMnXHJcbmltcG9ydCBTcGVja2xlUmVuZGVyZXIgZnJvbSAnLi4vU3BlY2tsZVJlbmRlcmVyLmpzJ1xyXG5pbXBvcnQgeyBGaWx0ZXJNYXRlcmlhbFR5cGUgfSBmcm9tICcuLi9tYXRlcmlhbHMvTWF0ZXJpYWxzLmpzJ1xyXG5pbXBvcnQgeyBOb2RlUmVuZGVyVmlldyB9IGZyb20gJy4uL3RyZWUvTm9kZVJlbmRlclZpZXcuanMnXHJcbmltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJy4vRXh0ZW5zaW9uLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIFRyZWVOb2RlLCBXb3JsZFRyZWUgfSBmcm9tICcuLi90cmVlL1dvcmxkVHJlZS5qcydcclxuaW1wb3J0IHsgdHlwZSBJVmlld2VyLCBVcGRhdGVGbGFncywgVmlld2VyRXZlbnQgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgTnVtZXJpY1Byb3BlcnR5SW5mbyxcclxuICBQcm9wZXJ0eUluZm8sXHJcbiAgU3RyaW5nUHJvcGVydHlJbmZvXHJcbn0gZnJvbSAnLi4vZmlsdGVyaW5nL1Byb3BlcnR5TWFuYWdlci5qcydcclxuXHJcbi8qKiBUTyBETzogU2hvdWxkIHJlbW92ZSBzZWxlY3RlZE9iamVjdHMgZW50aXJlbHkqL1xyXG5leHBvcnQgdHlwZSBGaWx0ZXJpbmdTdGF0ZSA9IHtcclxuICBzZWxlY3RlZE9iamVjdHM/OiBzdHJpbmdbXVxyXG4gIGhpZGRlbk9iamVjdHM/OiBzdHJpbmdbXVxyXG4gIGlzb2xhdGVkT2JqZWN0cz86IHN0cmluZ1tdXHJcbiAgY29sb3JHcm91cHM/OiB7XHJcbiAgICB2YWx1ZTogc3RyaW5nXHJcbiAgICBjb2xvcjogc3RyaW5nXHJcbiAgICBpZHM6IHN0cmluZ1tdXHJcbiAgfVtdXHJcbiAgdXNlckNvbG9yR3JvdXBzPzogeyBpZHM6IHN0cmluZ1tdOyBjb2xvcjogc3RyaW5nIH1bXVxyXG4gIGFjdGl2ZVByb3BGaWx0ZXJLZXk/OiBzdHJpbmdcclxuICBwYXNzTWluPzogbnVtYmVyIHwgbnVsbFxyXG4gIHBhc3NNYXg/OiBudW1iZXIgfCBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJpbmdFeHRlbnNpb24gZXh0ZW5kcyBFeHRlbnNpb24ge1xyXG4gIHB1YmxpYyBXVEk6IFdvcmxkVHJlZVxyXG4gIHByaXZhdGUgUmVuZGVyZXI6IFNwZWNrbGVSZW5kZXJlclxyXG4gIHByaXZhdGUgU3RhdGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG5cclxuICBwcml2YXRlIFZpc2liaWxpdHlTdGF0ZSA9IG5ldyBWaXNpYmlsaXR5U3RhdGUoKVxyXG4gIHByaXZhdGUgQ29sb3JTdHJpbmdGaWx0ZXJTdGF0ZTogQ29sb3JTdHJpbmdGaWx0ZXJTdGF0ZSB8IG51bGwgPSBudWxsXHJcbiAgcHJpdmF0ZSBDb2xvck51bWVyaWNGaWx0ZXJTdGF0ZTogQ29sb3JOdW1lcmljRmlsdGVyU3RhdGUgfCBudWxsID0gbnVsbFxyXG4gIHByaXZhdGUgVXNlcnNwYWNlQ29sb3JTdGF0ZTogVXNlcnNwYWNlQ29sb3JTdGF0ZSB8IG51bGwgPSBuZXcgVXNlcnNwYWNlQ29sb3JTdGF0ZSgpXHJcbiAgcHJpdmF0ZSBDdXJyZW50RmlsdGVyaW5nU3RhdGU6IEZpbHRlcmluZ1N0YXRlID0ge30gYXMgRmlsdGVyaW5nU3RhdGVcclxuXHJcbiAgcHVibGljIGdldCBmaWx0ZXJpbmdTdGF0ZSgpOiBGaWx0ZXJpbmdTdGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5DdXJyZW50RmlsdGVyaW5nU3RhdGVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmFibGVkXHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3Iodmlld2VyOiBJVmlld2VyKSB7XHJcbiAgICBzdXBlcih2aWV3ZXIpXHJcbiAgICB0aGlzLldUSSA9IHRoaXMudmlld2VyLmdldFdvcmxkVHJlZSgpXHJcbiAgICB0aGlzLlJlbmRlcmVyID0gdGhpcy52aWV3ZXIuZ2V0UmVuZGVyZXIoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVPYmplY3RzKFxyXG4gICAgb2JqZWN0SWRzOiBzdHJpbmdbXSxcclxuICAgIHN0YXRlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXHJcbiAgICBpbmNsdWRlRGVzY2VuZGFudHMgPSBmYWxzZSxcclxuICAgIGdob3N0ID0gZmFsc2VcclxuICApOiBGaWx0ZXJpbmdTdGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRWaXNpYmlsaXR5U3RhdGUoXHJcbiAgICAgIG9iamVjdElkcyxcclxuICAgICAgc3RhdGVLZXksXHJcbiAgICAgIENvbW1hbmQuSElERSxcclxuICAgICAgaW5jbHVkZURlc2NlbmRhbnRzLFxyXG4gICAgICBnaG9zdFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dPYmplY3RzKFxyXG4gICAgb2JqZWN0SWRzOiBzdHJpbmdbXSxcclxuICAgIHN0YXRlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXHJcbiAgICBpbmNsdWRlRGVzY2VuZGFudHMgPSBmYWxzZVxyXG4gICk6IEZpbHRlcmluZ1N0YXRlIHtcclxuICAgIHJldHVybiB0aGlzLnNldFZpc2liaWxpdHlTdGF0ZShcclxuICAgICAgb2JqZWN0SWRzLFxyXG4gICAgICBzdGF0ZUtleSxcclxuICAgICAgQ29tbWFuZC5TSE9XLFxyXG4gICAgICBpbmNsdWRlRGVzY2VuZGFudHNcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc29sYXRlT2JqZWN0cyhcclxuICAgIG9iamVjdElkczogc3RyaW5nW10sXHJcbiAgICBzdGF0ZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlc2NlbmRhbnRzID0gdHJ1ZSxcclxuICAgIGdob3N0ID0gdHJ1ZVxyXG4gICk6IEZpbHRlcmluZ1N0YXRlIHtcclxuICAgIHJldHVybiB0aGlzLnNldFZpc2liaWxpdHlTdGF0ZShcclxuICAgICAgb2JqZWN0SWRzLFxyXG4gICAgICBzdGF0ZUtleSxcclxuICAgICAgQ29tbWFuZC5JU09MQVRFLFxyXG4gICAgICBpbmNsdWRlRGVzY2VuZGFudHMsXHJcbiAgICAgIGdob3N0XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdW5Jc29sYXRlT2JqZWN0cyhcclxuICAgIG9iamVjdElkczogc3RyaW5nW10sXHJcbiAgICBzdGF0ZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlc2NlbmRhbnRzID0gdHJ1ZSxcclxuICAgIGdob3N0ID0gdHJ1ZVxyXG4gICk6IEZpbHRlcmluZ1N0YXRlIHtcclxuICAgIHJldHVybiB0aGlzLnNldFZpc2liaWxpdHlTdGF0ZShcclxuICAgICAgb2JqZWN0SWRzLFxyXG4gICAgICBzdGF0ZUtleSxcclxuICAgICAgQ29tbWFuZC5VTklTT0xBVEUsXHJcbiAgICAgIGluY2x1ZGVEZXNjZW5kYW50cyxcclxuICAgICAgZ2hvc3RcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmlzaWJpbGl0eVN0YXRlKFxyXG4gICAgb2JqZWN0SWRzOiBzdHJpbmdbXSxcclxuICAgIHN0YXRlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXHJcbiAgICBjb21tYW5kOiBDb21tYW5kLFxyXG4gICAgaW5jbHVkZURlc2NlbmRhbnRzID0gZmFsc2UsXHJcbiAgICBnaG9zdCA9IGZhbHNlXHJcbiAgKTogRmlsdGVyaW5nU3RhdGUge1xyXG4gICAgaWYgKFxyXG4gICAgICBzdGF0ZUtleSAhPT0gdGhpcy5TdGF0ZUtleSB8fFxyXG4gICAgICBNYXRoLmFicyhjb21tYW5kIC0gdGhpcy5WaXNpYmlsaXR5U3RhdGUuY29tbWFuZCkgPiAxXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5WaXNpYmlsaXR5U3RhdGUucmVzZXQoKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuU3RhdGVLZXkgPSBzdGF0ZUtleVxyXG5cclxuICAgIHRoaXMuVmlzaWJpbGl0eVN0YXRlLnJ2cyA9IFtdXHJcbiAgICB0aGlzLlZpc2liaWxpdHlTdGF0ZS5naG9zdCA9IGdob3N0XHJcblxyXG4gICAgaWYgKGluY2x1ZGVEZXNjZW5kYW50cykge1xyXG4gICAgICBvYmplY3RJZHMgPSBbLi4ub2JqZWN0SWRzLCAuLi50aGlzLmdldERlc2NlbmRhbnRJZHMob2JqZWN0SWRzKV1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29tbWFuZCA9PT0gQ29tbWFuZC5TSE9XIHx8IGNvbW1hbmQgPT09IENvbW1hbmQuVU5JU09MQVRFKSB7XHJcbiAgICAgIC8qKiBOb3QgdGhlIG1vc3QgZWxlZ2FudCwgYnV0IGZhc3QgKi9cclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBvYmplY3RJZHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBpZiAodGhpcy5WaXNpYmlsaXR5U3RhdGUuaWRzW29iamVjdElkc1trXV0pXHJcbiAgICAgICAgICBkZWxldGUgdGhpcy5WaXNpYmlsaXR5U3RhdGUuaWRzW29iamVjdElkc1trXV1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21tYW5kID09PSBDb21tYW5kLkhJREUgfHwgY29tbWFuZCA9PT0gQ29tbWFuZC5JU09MQVRFKSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IG9iamVjdElkcy5yZWR1Y2UoXHJcbiAgICAgICAgKGFjYzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGN1cnI6IHN0cmluZykgPT4gKChhY2NbY3Vycl0gPSAxKSwgYWNjKSxcclxuICAgICAgICB7fVxyXG4gICAgICApXHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5WaXNpYmlsaXR5U3RhdGUuaWRzLCByZXMpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZW5hYmxlZCA9IE9iamVjdC5rZXlzKHRoaXMuVmlzaWJpbGl0eVN0YXRlLmlkcykubGVuZ3RoICE9PSAwXHJcbiAgICBpZiAoIWVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5WaXNpYmlsaXR5U3RhdGUuY29tbWFuZCA9IENvbW1hbmQuTk9ORVxyXG4gICAgICByZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKClcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlZpc2liaWxpdHlTdGF0ZS5jb21tYW5kID0gY29tbWFuZFxyXG5cclxuICAgIGlmIChjb21tYW5kID09PSBDb21tYW5kLkhJREUgfHwgY29tbWFuZCA9PT0gQ29tbWFuZC5TSE9XKVxyXG4gICAgICB0aGlzLldUSS53YWxrKHRoaXMudmlzaWJpbGl0eVdhbGsuYmluZCh0aGlzKSlcclxuICAgIGlmIChjb21tYW5kID09PSBDb21tYW5kLklTT0xBVEUgfHwgY29tbWFuZCA9PT0gQ29tbWFuZC5VTklTT0xBVEUpIHtcclxuICAgICAgLy8gdGhpcy5XVEkud2Fsayh0aGlzLmlzb2xhdGlvbldhbGsuYmluZCh0aGlzKSlcclxuICAgICAgY29uc3QgcnZNYXA6IFJlY29yZDxzdHJpbmcsIE5vZGVSZW5kZXJWaWV3PiA9IHt9XHJcbiAgICAgIHRoaXMuV1RJLndhbGsoKG5vZGU6IFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFub2RlLm1vZGVsLmF0b21pYyB8fCB0aGlzLldUSS5pc1Jvb3Qobm9kZSkpIHJldHVybiB0cnVlXHJcbiAgICAgICAgY29uc3QgcnZOb2RlcyA9IHRoaXMuV1RJLmdldFJlbmRlclRyZWUoKS5nZXRSZW5kZXJWaWV3Tm9kZXNGb3JOb2RlKG5vZGUpXHJcbiAgICAgICAgaWYgKCF0aGlzLlZpc2liaWxpdHlTdGF0ZS5pZHNbbm9kZS5tb2RlbC5pZF0pIHtcclxuICAgICAgICAgIHJ2Tm9kZXMuZm9yRWFjaCgocnZOb2RlOiBUcmVlTm9kZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuVmlzaWJpbGl0eVN0YXRlLmlkc1tydk5vZGUubW9kZWwuaWRdKVxyXG4gICAgICAgICAgICAgIHJ2TWFwW3J2Tm9kZS5tb2RlbC5pZF0gPSBydk5vZGUubW9kZWwucmVuZGVyVmlld1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcnZOb2Rlcy5mb3JFYWNoKChydk5vZGU6IFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBydk1hcFtydk5vZGUubW9kZWwuaWRdXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLlZpc2liaWxpdHlTdGF0ZS5ydnMgPSBPYmplY3QudmFsdWVzKHJ2TWFwKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNldEZpbHRlcnMoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2aXNpYmlsaXR5V2Fsayhub2RlOiBUcmVlTm9kZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuVmlzaWJpbGl0eVN0YXRlLmlkc1tub2RlLm1vZGVsLmlkXSkge1xyXG4gICAgICB0aGlzLlZpc2liaWxpdHlTdGF0ZS5ydnMucHVzaChcclxuICAgICAgICAuLi50aGlzLldUSS5nZXRSZW5kZXJUcmVlKCkuZ2V0UmVuZGVyVmlld3NGb3JOb2RlKG5vZGUpXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29sb3JGaWx0ZXIocHJvcDogUHJvcGVydHlJbmZvLCBnaG9zdCA9IHRydWUpOiBGaWx0ZXJpbmdTdGF0ZSB7XHJcbiAgICBpZiAocHJvcC50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICB0aGlzLkNvbG9yU3RyaW5nRmlsdGVyU3RhdGUgPSBudWxsXHJcbiAgICAgIHJldHVybiB0aGlzLnNldE51bWVyaWNDb2xvckZpbHRlcihwcm9wIGFzIE51bWVyaWNQcm9wZXJ0eUluZm8sIGdob3N0KVxyXG4gICAgfVxyXG4gICAgaWYgKHByb3AudHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZSA9IG51bGxcclxuICAgICAgcmV0dXJuIHRoaXMuc2V0U3RyaW5nQ29sb3JGaWx0ZXIocHJvcCBhcyBTdHJpbmdQcm9wZXJ0eUluZm8sIGdob3N0KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TnVtZXJpY0NvbG9yRmlsdGVyKG51bVByb3A6IE51bWVyaWNQcm9wZXJ0eUluZm8sIGdob3N0OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLkNvbG9yTnVtZXJpY0ZpbHRlclN0YXRlID0gbmV3IENvbG9yTnVtZXJpY0ZpbHRlclN0YXRlKClcclxuICAgIHRoaXMuQ29sb3JOdW1lcmljRmlsdGVyU3RhdGUuY3VycmVudFByb3AgPSBudW1Qcm9wXHJcblxyXG4gICAgY29uc3QgcGFzc01pbiA9IG51bVByb3AucGFzc01pbiB8fCBudW1Qcm9wLm1pblxyXG4gICAgY29uc3QgcGFzc01heCA9IG51bVByb3AucGFzc01heCB8fCBudW1Qcm9wLm1heFxyXG5cclxuICAgIC8qKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi4gQnVpbGRpbmcgdGhlIGlkcyBhbmQgdmFsdWVzIGFycmF5IHdhcyBub3Qgc2xvdyBwZXIgc2VcclxuICAgICAqICBidXQgaXQgZm9yY2VkIHVzIHRvIHVzZSBpbmRleE9mIGluc2lkZSB0aGUgd2FsayBmdW5jdGlvbiB3aGljaCB3YXMgSU1NRU5TRUxZIHNsb3dcclxuICAgICAqL1xyXG4gICAgLy8gY29uc3QgbWF0Y2hpbmdJZHMgPSBudW1Qcm9wLnZhbHVlR3JvdXBzXHJcbiAgICAvLyAgIC5maWx0ZXIoKHApID0+IHAudmFsdWUgPj0gcGFzc01pbiAmJiBwLnZhbHVlIDw9IHBhc3NNYXgpXHJcbiAgICAvLyAgIC5tYXAoKHYpID0+IHYuaWQpXHJcblxyXG4gICAgLy8gY29uc3QgbWF0Y2hpbmdWYWx1ZXMgPSBudW1Qcm9wLnZhbHVlR3JvdXBzXHJcbiAgICAvLyAgIC5maWx0ZXIoKHApID0+IHAudmFsdWUgPj0gcGFzc01pbiAmJiBwLnZhbHVlIDw9IHBhc3NNYXgpXHJcbiAgICAvLyAgIC5tYXAoKHYpID0+IHYudmFsdWUpXHJcblxyXG4gICAgLyoqIFRoaXMgaXMgJ3VuLWZ1bmN0aW9uYWxseScgc2xvdyB0byBidWlsZCAqL1xyXG4gICAgLy8gbGV0IG1hdGNoaW5nSWRzID0ge31cclxuICAgIC8vIG1hdGNoaW5nSWRzID0gbnVtUHJvcC52YWx1ZUdyb3Vwcy5yZWR1Y2UoKG9iaiwgaXRlbSkgPT4ge1xyXG4gICAgLy8gICByZXR1cm4ge1xyXG4gICAgLy8gICAgIC4uLm9iaixcclxuICAgIC8vICAgICBbaXRlbVsnaWQnXV06IGl0ZW0udmFsdWVcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSwgbWF0Y2hpbmdJZHMpXHJcblxyXG4gICAgLyoqIFRoaXMgaXMgdmVyeSBmYXN0IHRvIGJ1aWxkLiBJdCBkb2VzIHN1ZmZlciBmcm9tIHRoZSBzYW1lIGlzc3VlIGFzIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvblxyXG4gICAgICogIGFzIGluLCBpZiB0aGVyZSBpcyBhbiBpZCBjbGFzaCAod2hpY2ggd2lsbCBoYXBwZW4gZm9yIGluc3RhbmNlcyksIHRoZSBvbGQgaW1wbGVtZW50YXRpb24ncyBpbmRleE9mXHJcbiAgICAgKiAgd291bGQgcmV0dXJuIHRoZSBmaXJzdCB2YWx1ZS4gSGVyZSB3ZSBjaG9vc2UgdG8gZG8gdGhlIHNhbWVcclxuICAgICAqL1xyXG4gICAgY29uc3QgbWF0Y2hpbmdJZHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBudW1Qcm9wLnZhbHVlR3JvdXBzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGlmIChtYXRjaGluZ0lkc1tudW1Qcm9wLnZhbHVlR3JvdXBzW2tdLmlkXSkge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG51bVByb3AudmFsdWVHcm91cHNba10udmFsdWUgPj0gcGFzc01pbiAmJlxyXG4gICAgICAgIG51bVByb3AudmFsdWVHcm91cHNba10udmFsdWUgPD0gcGFzc01heFxyXG4gICAgICApXHJcbiAgICAgICAgbWF0Y2hpbmdJZHNbbnVtUHJvcC52YWx1ZUdyb3Vwc1trXS5pZF0gPSBudW1Qcm9wLnZhbHVlR3JvdXBzW2tdLnZhbHVlXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm9uTWF0Y2hpbmdSdnM6IE5vZGVSZW5kZXJWaWV3W10gPSBbXVxyXG4gICAgY29uc3QgY29sb3JHcm91cHM6IFZhbHVlR3JvdXBDb2xvckl0ZW1OdW1lcmljUHJvcHNbXSA9IFtdXHJcblxyXG4gICAgdGhpcy5XVEkud2Fsaygobm9kZTogVHJlZU5vZGUpID0+IHtcclxuICAgICAgaWYgKCFub2RlLm1vZGVsLmF0b21pYyB8fCB0aGlzLldUSS5pc1Jvb3Qobm9kZSkgfHwgdGhpcy5XVEkuaXNTdWJ0cmVlUm9vdChub2RlKSlcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG5cclxuICAgICAgY29uc3QgcnZzID0gdGhpcy5XVEkuZ2V0UmVuZGVyVHJlZSgpLmdldFJlbmRlclZpZXdzRm9yTm9kZShub2RlKVxyXG4gICAgICBjb25zdCBpZHggPSBtYXRjaGluZ0lkc1tub2RlLm1vZGVsLnJhdy5pZF1cclxuICAgICAgaWYgKGlkeCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbm9uTWF0Y2hpbmdSdnMucHVzaCguLi5ydnMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29sb3JHcm91cHMucHVzaCh7XHJcbiAgICAgICAgICBydnMsXHJcbiAgICAgICAgICB2YWx1ZTogKGlkeCAtIHBhc3NNaW4pIC8gKHBhc3NNYXggLSBwYXNzTWluKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZS5jb2xvckdyb3VwcyA9IGNvbG9yR3JvdXBzXHJcbiAgICB0aGlzLkNvbG9yTnVtZXJpY0ZpbHRlclN0YXRlLm5vbk1hdGNoaW5nUnZzID0gbm9uTWF0Y2hpbmdSdnNcclxuICAgIHRoaXMuQ29sb3JOdW1lcmljRmlsdGVyU3RhdGUuZ2hvc3QgPSBnaG9zdFxyXG4gICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZS5tYXRjaGluZ0lkcyA9IG1hdGNoaW5nSWRzXHJcbiAgICByZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3RyaW5nQ29sb3JGaWx0ZXIoc3RyaW5nUHJvcDogU3RyaW5nUHJvcGVydHlJbmZvLCBnaG9zdDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlID0gbmV3IENvbG9yU3RyaW5nRmlsdGVyU3RhdGUoKVxyXG4gICAgdGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlLmN1cnJlbnRQcm9wID0gc3RyaW5nUHJvcFxyXG5cclxuICAgIGNvbnN0IHZhbHVlR3JvdXBDb2xvcnM6IFZhbHVlR3JvdXBDb2xvckl0ZW1TdHJpbmdQcm9wc1tdID0gW11cclxuICAgIGZvciAoY29uc3Qgdmcgb2Ygc3RyaW5nUHJvcC52YWx1ZUdyb3Vwcykge1xyXG4gICAgICBjb25zdCBjb2wgPSBzdGModmcudmFsdWUpIC8vIFRPRE86IHNtYXJ0ZXIgd2F5IG5lZWRlZC5cclxuICAgICAgY29uc3QgZW50cnk6IFZhbHVlR3JvdXBDb2xvckl0ZW1TdHJpbmdQcm9wcyA9IHtcclxuICAgICAgICAuLi52ZyxcclxuICAgICAgICBjb2xvcjogbmV3IENvbG9yKGNvbCksXHJcbiAgICAgICAgcnZzOiBbXSxcclxuICAgICAgICBpZE1hcDoge31cclxuICAgICAgfVxyXG4gICAgICAvKiogVGhpcyBpcyB0byBhdm9pZCBpbmRleE9mIGluc2lkZSB0aGUgd2FsayBjYWxsYmFjayB3aGljaCBpcyByaWRpY3Vsb3VzbHkgc2xvdyAqL1xyXG4gICAgICBlbnRyeS5pZE1hcCA9IHt9XHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdmcuaWRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgZW50cnkuaWRNYXBbdmcuaWRzW2tdXSA9IDFcclxuICAgICAgfVxyXG4gICAgICB2YWx1ZUdyb3VwQ29sb3JzLnB1c2goZW50cnkpXHJcbiAgICB9XHJcbiAgICBjb25zdCByYW1wVGV4dHVyZSA9IEFzc2V0cy5nZW5lcmF0ZURpc2NyZWV0UmFtcFRleHR1cmUoXHJcbiAgICAgIHZhbHVlR3JvdXBDb2xvcnMubWFwKCh2KSA9PiB2LmNvbG9yLmdldEhleCgpKVxyXG4gICAgKVxyXG5cclxuICAgIC8vIFRPRE86IG5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGhhbmRsZSB3ZWxsIG5lc3RlZCBlbGVtZW50IGNhdGVnb3JpZXMuIEZvciBleGFtcGxlLFxyXG4gICAgLy8gd2luZG93cyAoZmFtaWx5IGluc3RhbmNlcykgaW5zaWRlIHdhbGxzIGdldCB0aGUgc2FtZSBjb2xvciBhcyB0aGUgd2FsbHMsIGV2ZW4gdGhvdWdoXHJcbiAgICAvLyB0aGV5IGFyZSBpZGVudGlmaWVkIGFzIGEgZGlmZmVyZW50IGNhdGVnb3J5LlxyXG4gICAgLy8gMDcuMDUuMjAyMzogQXR0ZW1wdCBvbiBmaXhpbmcgdGhlIGlzc3VlIGRlc2NyaWJlZCBhYm92ZS4gVGhpcyBmaXhlcyAjMTUyNSwgYnV0IGl0IGRvZXNcclxuICAgIC8vIGFkZCBhIGJpdCBvZiBvdmVyaGVhZC4gTm90IDEwMCUgc3VyZSBpZiBpdCBicmVha3MgYW55dGhpbmcgZWxzZSB0aG8nXHJcbiAgICBjb25zdCBub25NYXRjaGluZ01hcDogUmVjb3JkPHN0cmluZywgTm9kZVJlbmRlclZpZXc+ID0ge31cclxuICAgIHRoaXMuV1RJLndhbGsoKG5vZGU6IFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgIGlmICghbm9kZS5tb2RlbC5hdG9taWMgfHwgdGhpcy5XVEkuaXNSb290KG5vZGUpIHx8IHRoaXMuV1RJLmlzU3VidHJlZVJvb3Qobm9kZSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB2ZyA9IHZhbHVlR3JvdXBDb2xvcnMuZmluZCgodjogVmFsdWVHcm91cENvbG9ySXRlbVN0cmluZ1Byb3BzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHYuaWRNYXBbbm9kZS5tb2RlbC5yYXcuaWRdXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJ2Tm9kZXMgPSB0aGlzLldUSS5nZXRSZW5kZXJUcmVlKCkuZ2V0UmVuZGVyVmlld05vZGVzRm9yTm9kZShub2RlKVxyXG4gICAgICBpZiAoIXZnKSB7XHJcbiAgICAgICAgcnZOb2Rlcy5mb3JFYWNoKFxyXG4gICAgICAgICAgKHJ2Tm9kZSkgPT5cclxuICAgICAgICAgICAgKG5vbk1hdGNoaW5nTWFwW3J2Tm9kZS5tb2RlbC5yZW5kZXJWaWV3LnJlbmRlckRhdGEuaWRdID1cclxuICAgICAgICAgICAgICBydk5vZGUubW9kZWwucmVuZGVyVmlldylcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcnZzOiBBcnJheTxOb2RlUmVuZGVyVmlldz4gPSBbXVxyXG5cclxuICAgICAgcnZOb2Rlcy5mb3JFYWNoKCh2YWx1ZTogVHJlZU5vZGUpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5XVEkuZ2V0UmVuZGVyVHJlZSgpLmdldEF0b21pY1BhcmVudCh2YWx1ZSkgPT09IG5vZGUpIHtcclxuICAgICAgICAgIHJ2cy5wdXNoKHZhbHVlLm1vZGVsLnJlbmRlclZpZXcpXHJcbiAgICAgICAgICAvKiogSW4gc29tZSBjYXNlcywgdGhlIHNhbWUgcnYgZ2V0cyBwdXQgaW4gYm90aCBub24tbWF0Y2hpbmcgYW5kIG1hdGNoaW5nIGxpc3RzIGJlY2F1c2Ugb2YgaXRzIGhpZXJhcmNoeSAqL1xyXG4gICAgICAgICAgZGVsZXRlIG5vbk1hdGNoaW5nTWFwW3ZhbHVlLm1vZGVsLnJlbmRlclZpZXcucmVuZGVyRGF0YS5pZF1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB2Zy5ydnMucHVzaCguLi5ydnMpXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IG5vbk1hdGNoaW5nUnZzOiBOb2RlUmVuZGVyVmlld1tdID0gT2JqZWN0LnZhbHVlcyhub25NYXRjaGluZ01hcClcclxuICAgIC8qKiBEZWxldGluZyB0aGlzIHNpbmNlIHdlJ3JlIG5vdCBnb2luZyB0byB1c2UgaXQgZnVydGhlciAqL1xyXG4gICAgZm9yIChjb25zdCB2ZyBvZiB2YWx1ZUdyb3VwQ29sb3JzKSB7XHJcbiAgICAgIC8qKiBBZGFtYW50IG9uIHRoaXMgb25lICovXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgIGRlbGV0ZSB2Zy5pZE1hcFxyXG4gICAgfVxyXG4gICAgdGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlLmNvbG9yR3JvdXBzID0gdmFsdWVHcm91cENvbG9yc1xyXG4gICAgdGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlLnJhbXBUZXh0dXJlID0gcmFtcFRleHR1cmVcclxuICAgIHRoaXMuQ29sb3JTdHJpbmdGaWx0ZXJTdGF0ZS5ub25NYXRjaGluZ1J2cyA9IG5vbk1hdGNoaW5nUnZzXHJcbiAgICB0aGlzLkNvbG9yU3RyaW5nRmlsdGVyU3RhdGUuZ2hvc3QgPSBnaG9zdFxyXG4gICAgcmV0dXJuIHRoaXMuc2V0RmlsdGVycygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlQ29sb3JGaWx0ZXIoKTogRmlsdGVyaW5nU3RhdGUge1xyXG4gICAgaWYgKHRoaXMuQ29sb3JOdW1lcmljRmlsdGVyU3RhdGUgfHwgdGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlKSB7XHJcbiAgICAgIHRoaXMuQ29sb3JTdHJpbmdGaWx0ZXJTdGF0ZSA9IG51bGxcclxuICAgICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZSA9IG51bGxcclxuICAgICAgcmV0dXJuIHRoaXMuc2V0RmlsdGVycygpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFVzZXJPYmplY3RDb2xvcnMoXHJcbiAgICBncm91cHM6IHsgb2JqZWN0SWRzOiBzdHJpbmdbXTsgY29sb3I6IHN0cmluZyB9W11cclxuICApOiBGaWx0ZXJpbmdTdGF0ZSB7XHJcbiAgICB0aGlzLlVzZXJzcGFjZUNvbG9yU3RhdGUgPSBuZXcgVXNlcnNwYWNlQ29sb3JTdGF0ZSgpXHJcbiAgICAvLyBSZXNldHRpbmcgYW55IG90aGVyIGZpbHRlcmluZyBjb2xvciBvcHMgYXMgdGhleSdyZSBub3QgY29tcGF0aWJsZVxyXG4gICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZSA9IG51bGxcclxuICAgIHRoaXMuQ29sb3JTdHJpbmdGaWx0ZXJTdGF0ZSA9IG51bGxcclxuXHJcbiAgICBjb25zdCBsb2NhbEdyb3Vwczoge1xyXG4gICAgICBvYmplY3RJZHM6IHN0cmluZ1tdXHJcbiAgICAgIGNvbG9yOiBzdHJpbmdcclxuICAgICAgbm9kZXM6IFRyZWVOb2RlW11cclxuICAgICAgcnZzOiBOb2RlUmVuZGVyVmlld1tdXHJcbiAgICB9W10gPSBncm91cHMubWFwKChnKSA9PiB7XHJcbiAgICAgIHJldHVybiB7IC4uLmcsIG5vZGVzOiBbXSwgcnZzOiBbXSB9XHJcbiAgICB9KVxyXG5cclxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgbG9jYWxHcm91cHMpIHtcclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBncm91cC5vYmplY3RJZHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuV1RJLmZpbmRJZChncm91cC5vYmplY3RJZHNba10pXHJcbiAgICAgICAgaWYgKG5vZGVzKSB7XHJcbiAgICAgICAgICBncm91cC5ub2Rlcy5wdXNoKC4uLm5vZGVzKVxyXG4gICAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZTogVHJlZU5vZGUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcnZzTm9kZXMgPSB0aGlzLldUSS5nZXRSZW5kZXJUcmVlKClcclxuICAgICAgICAgICAgICAuZ2V0UmVuZGVyVmlld05vZGVzRm9yTm9kZShub2RlKVxyXG4gICAgICAgICAgICAgIC5tYXAoKHJ2Tm9kZSkgPT4gcnZOb2RlLm1vZGVsLnJlbmRlclZpZXcpXHJcbiAgICAgICAgICAgIGlmIChydnNOb2RlcykgZ3JvdXAucnZzLnB1c2goLi4ucnZzTm9kZXMpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuVXNlcnNwYWNlQ29sb3JTdGF0ZS5ncm91cHMgPSBsb2NhbEdyb3Vwc1xyXG4gICAgY29uc3QgcmFtcFRleHR1cmUgPSBBc3NldHMuZ2VuZXJhdGVEaXNjcmVldFJhbXBUZXh0dXJlKFxyXG4gICAgICBncm91cHMubWFwKChnKSA9PiBuZXcgQ29sb3IoZy5jb2xvcikuZ2V0SGV4KCkpXHJcbiAgICApXHJcbiAgICB0aGlzLlVzZXJzcGFjZUNvbG9yU3RhdGUucmFtcFRleHR1cmUgPSByYW1wVGV4dHVyZVxyXG4gICAgcmV0dXJuIHRoaXMuc2V0RmlsdGVycygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlVXNlck9iamVjdENvbG9ycygpOiBGaWx0ZXJpbmdTdGF0ZSB7XHJcbiAgICB0aGlzLlVzZXJzcGFjZUNvbG9yU3RhdGUgPSBudWxsXHJcbiAgICByZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldEZpbHRlcnMoKTogRmlsdGVyaW5nU3RhdGUgfCBudWxsIHtcclxuICAgIHRoaXMuVmlzaWJpbGl0eVN0YXRlID0gbmV3IFZpc2liaWxpdHlTdGF0ZSgpXHJcbiAgICB0aGlzLkNvbG9yU3RyaW5nRmlsdGVyU3RhdGUgPSBudWxsXHJcbiAgICB0aGlzLkNvbG9yTnVtZXJpY0ZpbHRlclN0YXRlID0gbnVsbFxyXG4gICAgdGhpcy5Vc2Vyc3BhY2VDb2xvclN0YXRlID0gbnVsbFxyXG4gICAgdGhpcy5TdGF0ZUtleSA9IHVuZGVmaW5lZFxyXG4gICAgdGhpcy5SZW5kZXJlci5yZXNldE1hdGVyaWFscygpXHJcbiAgICB0aGlzLkN1cnJlbnRGaWx0ZXJpbmdTdGF0ZSA9IHt9XHJcbiAgICB0aGlzLnZpZXdlci5yZXF1ZXN0UmVuZGVyKFVwZGF0ZUZsYWdzLlJFTkRFUl9SRVNFVCB8IFVwZGF0ZUZsYWdzLlNIQURPV1MpXHJcbiAgICB0aGlzLmVtaXQoVmlld2VyRXZlbnQuRmlsdGVyaW5nU3RhdGVTZXQsIHRoaXMuQ3VycmVudEZpbHRlcmluZ1N0YXRlKVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmlsdGVycygpOiBGaWx0ZXJpbmdTdGF0ZSB7XHJcbiAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnJlc2V0TWF0ZXJpYWxzKClcclxuICAgIHRoaXMuQ3VycmVudEZpbHRlcmluZ1N0YXRlID0ge31cclxuXHJcbiAgICAvLyBTdHJpbmcgYmFzZWQgY29sb3JzXHJcbiAgICBpZiAodGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlKSB7XHJcbiAgICAgIHRoaXMuQ3VycmVudEZpbHRlcmluZ1N0YXRlLmNvbG9yR3JvdXBzID0gW11cclxuICAgICAgbGV0IGsgPSAtMVxyXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuQ29sb3JTdHJpbmdGaWx0ZXJTdGF0ZS5jb2xvckdyb3Vwcykge1xyXG4gICAgICAgIGsrK1xyXG4gICAgICAgIHRoaXMuUmVuZGVyZXIuc2V0TWF0ZXJpYWwoZ3JvdXAucnZzLCB7XHJcbiAgICAgICAgICBmaWx0ZXJUeXBlOiBGaWx0ZXJNYXRlcmlhbFR5cGUuQ09MT1JFRCxcclxuICAgICAgICAgIHJhbXBJbmRleDogayAvIHRoaXMuQ29sb3JTdHJpbmdGaWx0ZXJTdGF0ZS5jb2xvckdyb3Vwcy5sZW5ndGgsXHJcbiAgICAgICAgICByYW1wSW5kZXhDb2xvcjogZ3JvdXAuY29sb3IsXHJcbiAgICAgICAgICByYW1wVGV4dHVyZTogdGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlLnJhbXBUZXh0dXJlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLkN1cnJlbnRGaWx0ZXJpbmdTdGF0ZS5jb2xvckdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgIHZhbHVlOiBncm91cC52YWx1ZSxcclxuICAgICAgICAgIGNvbG9yOiBncm91cC5jb2xvci5nZXRIZXhTdHJpbmcoKSxcclxuICAgICAgICAgIGlkczogZ3JvdXAuaWRzXHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZiAodGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlLmN1cnJlbnRQcm9wKVxyXG4gICAgICAgICAgdGhpcy5DdXJyZW50RmlsdGVyaW5nU3RhdGUuYWN0aXZlUHJvcEZpbHRlcktleSA9XHJcbiAgICAgICAgICAgIHRoaXMuQ29sb3JTdHJpbmdGaWx0ZXJTdGF0ZS5jdXJyZW50UHJvcC5rZXlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gTnVtYmVyIGJhc2VkIGNvbG9yc1xyXG4gICAgaWYgKHRoaXMuQ29sb3JOdW1lcmljRmlsdGVyU3RhdGUpIHtcclxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLkNvbG9yTnVtZXJpY0ZpbHRlclN0YXRlLmNvbG9yR3JvdXBzKSB7XHJcbiAgICAgICAgdGhpcy5SZW5kZXJlci5zZXRNYXRlcmlhbChncm91cC5ydnMsIHtcclxuICAgICAgICAgIGZpbHRlclR5cGU6IEZpbHRlck1hdGVyaWFsVHlwZS5HUkFESUVOVCxcclxuICAgICAgICAgIHJhbXBJbmRleDogZ3JvdXAudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiogVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgcmVxdWlyZWQgYXMgaXQncyBjYWxsZWQgZnVydGhlciBkb3duICovXHJcbiAgICAgIC8vIGNvbnN0IGdob3N0Tm9uTWF0Y2hpbmcgPSB0aGlzLkNvbG9yTnVtZXJpY0ZpbHRlclN0YXRlLm5vbk1hdGNoaW5nUnZzXHJcbiAgICAgIC8vIGlmIChnaG9zdE5vbk1hdGNoaW5nLmxlbmd0aCkge1xyXG4gICAgICAvLyAgIHRoaXMuUmVuZGVyZXIuc2V0TWF0ZXJpYWwoZ2hvc3ROb25NYXRjaGluZywge1xyXG4gICAgICAvLyAgICAgZmlsdGVyVHlwZTogRmlsdGVyTWF0ZXJpYWxUeXBlLkdIT1NUXHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgdGhpcy5DdXJyZW50RmlsdGVyaW5nU3RhdGUuYWN0aXZlUHJvcEZpbHRlcktleSA9XHJcbiAgICAgICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZS5jdXJyZW50UHJvcC5rZXlcclxuICAgICAgdGhpcy5DdXJyZW50RmlsdGVyaW5nU3RhdGUucGFzc01pbiA9XHJcbiAgICAgICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZS5jdXJyZW50UHJvcC5wYXNzTWluIHx8XHJcbiAgICAgICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZS5jdXJyZW50UHJvcC5taW5cclxuICAgICAgdGhpcy5DdXJyZW50RmlsdGVyaW5nU3RhdGUucGFzc01heCA9XHJcbiAgICAgICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZS5jdXJyZW50UHJvcC5wYXNzTWF4IHx8XHJcbiAgICAgICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZS5jdXJyZW50UHJvcC5tYXhcclxuXHJcbiAgICAgIHRoaXMuQ3VycmVudEZpbHRlcmluZ1N0YXRlLmlzb2xhdGVkT2JqZWN0cyA9IE9iamVjdC5rZXlzKFxyXG4gICAgICAgIHRoaXMuQ29sb3JOdW1lcmljRmlsdGVyU3RhdGUubWF0Y2hpbmdJZHNcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlzU2hvd0hpZGUgPVxyXG4gICAgICB0aGlzLlZpc2liaWxpdHlTdGF0ZS5jb21tYW5kID09PSBDb21tYW5kLkhJREUgfHxcclxuICAgICAgdGhpcy5WaXNpYmlsaXR5U3RhdGUuY29tbWFuZCA9PT0gQ29tbWFuZC5TSE9XXHJcbiAgICBjb25zdCBpc0lzb2xhdGUgPVxyXG4gICAgICB0aGlzLlZpc2liaWxpdHlTdGF0ZS5jb21tYW5kID09PSBDb21tYW5kLklTT0xBVEUgfHxcclxuICAgICAgdGhpcy5WaXNpYmlsaXR5U3RhdGUuY29tbWFuZCA9PT0gQ29tbWFuZC5VTklTT0xBVEVcclxuXHJcbiAgICBpZiAoaXNTaG93SGlkZSB8fCBpc0lzb2xhdGUpIHtcclxuICAgICAgdGhpcy5SZW5kZXJlci5zZXRNYXRlcmlhbCh0aGlzLlZpc2liaWxpdHlTdGF0ZS5ydnMsIHtcclxuICAgICAgICBmaWx0ZXJUeXBlOiB0aGlzLlZpc2liaWxpdHlTdGF0ZS5naG9zdFxyXG4gICAgICAgICAgPyBGaWx0ZXJNYXRlcmlhbFR5cGUuR0hPU1RcclxuICAgICAgICAgIDogRmlsdGVyTWF0ZXJpYWxUeXBlLkhJRERFTlxyXG4gICAgICB9KVxyXG5cclxuICAgICAgaWYgKGlzU2hvd0hpZGUpXHJcbiAgICAgICAgdGhpcy5DdXJyZW50RmlsdGVyaW5nU3RhdGUuaGlkZGVuT2JqZWN0cyA9IE9iamVjdC5rZXlzKHRoaXMuVmlzaWJpbGl0eVN0YXRlLmlkcylcclxuICAgICAgaWYgKGlzSXNvbGF0ZSlcclxuICAgICAgICB0aGlzLkN1cnJlbnRGaWx0ZXJpbmdTdGF0ZS5pc29sYXRlZE9iamVjdHMgPSBPYmplY3Qua2V5cyhcclxuICAgICAgICAgIHRoaXMuVmlzaWJpbGl0eVN0YXRlLmlkc1xyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub25NYXRjaGluZ1J2cyA9XHJcbiAgICAgIHRoaXMuQ29sb3JTdHJpbmdGaWx0ZXJTdGF0ZT8ubm9uTWF0Y2hpbmdSdnMgfHxcclxuICAgICAgdGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZT8ubm9uTWF0Y2hpbmdSdnNcclxuXHJcbiAgICBsZXQgZ2hvc3ROb25NYXRjaGluZyA9IGZhbHNlXHJcbiAgICBpZiAodGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlKVxyXG4gICAgICBnaG9zdE5vbk1hdGNoaW5nID0gdGhpcy5Db2xvclN0cmluZ0ZpbHRlclN0YXRlLmdob3N0XHJcbiAgICBpZiAodGhpcy5Db2xvck51bWVyaWNGaWx0ZXJTdGF0ZSlcclxuICAgICAgZ2hvc3ROb25NYXRjaGluZyA9IHRoaXMuQ29sb3JOdW1lcmljRmlsdGVyU3RhdGUuZ2hvc3RcclxuXHJcbiAgICBpZiAobm9uTWF0Y2hpbmdSdnMpIHtcclxuICAgICAgdGhpcy5SZW5kZXJlci5zZXRNYXRlcmlhbChub25NYXRjaGluZ1J2cywge1xyXG4gICAgICAgIGZpbHRlclR5cGU6IGdob3N0Tm9uTWF0Y2hpbmdcclxuICAgICAgICAgID8gRmlsdGVyTWF0ZXJpYWxUeXBlLkdIT1NUXHJcbiAgICAgICAgICA6IEZpbHRlck1hdGVyaWFsVHlwZS5ISURERU4gLy8gVE9ETzogZ2hvc3RcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5Vc2Vyc3BhY2VDb2xvclN0YXRlKSB7XHJcbiAgICAgIHRoaXMuQ3VycmVudEZpbHRlcmluZ1N0YXRlLnVzZXJDb2xvckdyb3VwcyA9IFtdXHJcbiAgICAgIGxldCBtID0gLTFcclxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLlVzZXJzcGFjZUNvbG9yU3RhdGUuZ3JvdXBzKSB7XHJcbiAgICAgICAgbSsrXHJcbiAgICAgICAgdGhpcy5SZW5kZXJlci5zZXRNYXRlcmlhbChncm91cC5ydnMsIHtcclxuICAgICAgICAgIGZpbHRlclR5cGU6IEZpbHRlck1hdGVyaWFsVHlwZS5DT0xPUkVELFxyXG4gICAgICAgICAgcmFtcEluZGV4OiBtIC8gdGhpcy5Vc2Vyc3BhY2VDb2xvclN0YXRlLmdyb3Vwcy5sZW5ndGgsXHJcbiAgICAgICAgICByYW1wSW5kZXhDb2xvcjogbmV3IENvbG9yKGdyb3VwLmNvbG9yKSxcclxuICAgICAgICAgIHJhbXBUZXh0dXJlOiB0aGlzLlVzZXJzcGFjZUNvbG9yU3RhdGUucmFtcFRleHR1cmVcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLkN1cnJlbnRGaWx0ZXJpbmdTdGF0ZS51c2VyQ29sb3JHcm91cHMucHVzaCh7XHJcbiAgICAgICAgICBpZHM6IGdyb3VwLm9iamVjdElkcyxcclxuICAgICAgICAgIGNvbG9yOiBncm91cC5jb2xvciAvLy5nZXRIZXhTdHJpbmcoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlJlbmRlcmVyLnZpZXdlci5yZXF1ZXN0UmVuZGVyKFxyXG4gICAgICBVcGRhdGVGbGFncy5SRU5ERVJfUkVTRVQgfCBVcGRhdGVGbGFncy5TSEFET1dTIHwgVXBkYXRlRmxhZ3MuQ0xJUFBJTkdfUExBTkVTXHJcbiAgICApXHJcbiAgICB0aGlzLmVtaXQoVmlld2VyRXZlbnQuRmlsdGVyaW5nU3RhdGVTZXQsIHRoaXMuQ3VycmVudEZpbHRlcmluZ1N0YXRlKVxyXG4gICAgcmV0dXJuIHRoaXMuQ3VycmVudEZpbHRlcmluZ1N0YXRlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlkQ2FjaGUgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT5cclxuICBwcml2YXRlIGdldERlc2NlbmRhbnRJZHMob2JqZWN0SWRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGFsbElkczogc3RyaW5nW10gPSBbXVxyXG4gICAgY29uc3Qga2V5ID0gb2JqZWN0SWRzLmpvaW4oJywnKVxyXG5cclxuICAgIGlmICh0aGlzLmlkQ2FjaGVba2V5XSAmJiB0aGlzLmlkQ2FjaGVba2V5XS5sZW5ndGgpIHJldHVybiB0aGlzLmlkQ2FjaGVba2V5XVxyXG5cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgb2JqZWN0SWRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5XVEkuZmluZElkKG9iamVjdElkc1trXSlcclxuICAgICAgaWYgKCFub2RlcykgY29udGludWVcclxuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzWzBdXHJcbiAgICAgIGNvbnN0IHN1YnRyZWUgPSBub2RlLmFsbCgobm9kZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBub2RlLm1vZGVsLnJhdyAhPT0gdW5kZWZpbmVkXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IGlkTGlzdCA9IHN1YnRyZWUubWFwKChub2RlKSA9PiBub2RlLm1vZGVsLnJhdy5pZClcclxuICAgICAgYWxsSWRzLnB1c2goLi4uaWRMaXN0KVxyXG4gICAgICB0aGlzLmlkQ2FjaGVbbm9kZS5tb2RlbC5yYXcuaWRdID0gaWRMaXN0XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLldUSS53YWxrKChub2RlOiBUcmVlTm9kZSkgPT4ge1xyXG4gICAgLy8gICBpZiAob2JqZWN0SWRzLmluY2x1ZGVzKG5vZGUubW9kZWwucmF3LmlkKSkge1xyXG4gICAgLy8gICAgIGNvbnN0IHN1YnRyZWUgPSBub2RlLmFsbCgobm9kZSkgPT4ge1xyXG4gICAgLy8gICAgICAgcmV0dXJuIG5vZGUubW9kZWwucmF3ICE9PSB1bmRlZmluZWRcclxuICAgIC8vICAgICB9KVxyXG4gICAgLy8gICAgIGNvbnN0IGlkTGlzdCA9IHN1YnRyZWUubWFwKChub2RlKSA9PiBub2RlLm1vZGVsLnJhdy5pZClcclxuICAgIC8vICAgICBhbGxJZHMucHVzaCguLi5pZExpc3QpXHJcbiAgICAvLyAgICAgdGhpcy5pZENhY2hlW25vZGUubW9kZWwucmF3LmlkXSA9IGlkTGlzdFxyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHJldHVybiB0cnVlXHJcbiAgICAvLyB9KVxyXG5cclxuICAgIHRoaXMuaWRDYWNoZVtrZXldID0gYWxsSWRzXHJcbiAgICByZXR1cm4gYWxsSWRzXHJcbiAgfVxyXG59XHJcblxyXG5lbnVtIENvbW1hbmQge1xyXG4gIEhJREUgPSAxMCxcclxuICBTSE9XID0gMTEsXHJcbiAgSVNPTEFURSA9IDIwLFxyXG4gIFVOSVNPTEFURSA9IDIxLFxyXG4gIE5PTkUgPSAzMFxyXG59XHJcblxyXG5jbGFzcyBWaXNpYmlsaXR5U3RhdGUge1xyXG4gIHB1YmxpYyBjb21tYW5kID0gQ29tbWFuZC5OT05FXHJcbiAgcHVibGljIGdob3N0ID0gdHJ1ZVxyXG4gIHB1YmxpYyBpZHM6IHsgW2lkOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9XHJcbiAgcHVibGljIHJ2czogTm9kZVJlbmRlclZpZXdbXSA9IFtdXHJcblxyXG4gIHB1YmxpYyByZXNldCgpIHtcclxuICAgIHRoaXMuZ2hvc3QgPSB0cnVlXHJcbiAgICB0aGlzLmlkcyA9IHt9XHJcbiAgICB0aGlzLnJ2cyA9IFtdXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBDb2xvclN0cmluZ0ZpbHRlclN0YXRlIHtcclxuICBwdWJsaWMgY3VycmVudFByb3A6IFN0cmluZ1Byb3BlcnR5SW5mbyB8IG51bGxcclxuICBwdWJsaWMgY29sb3JHcm91cHM6IFZhbHVlR3JvdXBDb2xvckl0ZW1TdHJpbmdQcm9wc1tdXHJcbiAgcHVibGljIG5vbk1hdGNoaW5nUnZzOiBOb2RlUmVuZGVyVmlld1tdXHJcbiAgcHVibGljIHJhbXBUZXh0dXJlOiBUZXh0dXJlIHwgdW5kZWZpbmVkXHJcbiAgcHVibGljIGdob3N0ID0gdHJ1ZVxyXG4gIHB1YmxpYyByZXNldCgpIHtcclxuICAgIHRoaXMuY3VycmVudFByb3AgPSBudWxsXHJcbiAgICB0aGlzLmNvbG9yR3JvdXBzID0gW11cclxuICAgIHRoaXMubm9uTWF0Y2hpbmdSdnMgPSBbXVxyXG4gICAgdGhpcy5yYW1wVGV4dHVyZSA9IHVuZGVmaW5lZFxyXG4gIH1cclxufVxyXG5cclxudHlwZSBWYWx1ZUdyb3VwQ29sb3JJdGVtU3RyaW5nUHJvcHMgPSB7XHJcbiAgdmFsdWU6IHN0cmluZ1xyXG4gIGlkczogc3RyaW5nW11cclxuICBjb2xvcjogQ29sb3JcclxuICBydnM6IE5vZGVSZW5kZXJWaWV3W11cclxuICBpZE1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPlxyXG59XHJcblxyXG5jbGFzcyBDb2xvck51bWVyaWNGaWx0ZXJTdGF0ZSB7XHJcbiAgcHVibGljIGN1cnJlbnRQcm9wITogTnVtZXJpY1Byb3BlcnR5SW5mb1xyXG4gIHB1YmxpYyBub25NYXRjaGluZ1J2cyE6IE5vZGVSZW5kZXJWaWV3W11cclxuICBwdWJsaWMgY29sb3JHcm91cHMhOiBWYWx1ZUdyb3VwQ29sb3JJdGVtTnVtZXJpY1Byb3BzW11cclxuICBwdWJsaWMgZ2hvc3QgPSB0cnVlXHJcbiAgcHVibGljIG1hdGNoaW5nSWRzITogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cclxufVxyXG5cclxudHlwZSBWYWx1ZUdyb3VwQ29sb3JJdGVtTnVtZXJpY1Byb3BzID0ge1xyXG4gIHJ2czogTm9kZVJlbmRlclZpZXdbXVxyXG4gIHZhbHVlOiBudW1iZXJcclxufVxyXG5cclxuY2xhc3MgVXNlcnNwYWNlQ29sb3JTdGF0ZSB7XHJcbiAgcHVibGljIGdyb3Vwczoge1xyXG4gICAgb2JqZWN0SWRzOiBzdHJpbmdbXVxyXG4gICAgY29sb3I6IHN0cmluZ1xyXG4gICAgbm9kZXM6IFRyZWVOb2RlW11cclxuICAgIHJ2czogTm9kZVJlbmRlclZpZXdbXVxyXG4gIH1bXSA9IFtdXHJcbiAgcHVibGljIHJhbXBUZXh0dXJlITogVGV4dHVyZVxyXG4gIHB1YmxpYyByZXNldCgpIHtcclxuICAgIHRoaXMuZ3JvdXBzID0gW11cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQm94MywgVmVjdG9yMyB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBFeHRlbnNpb24gfSBmcm9tICcuL0V4dGVuc2lvbi5qcydcclxuaW1wb3J0IHsgVXBkYXRlRmxhZ3MgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5cclxuZXhwb3J0IGVudW0gRXhwbG9kZUV2ZW50IHtcclxuICBGaW5zaGVkID0gJ2V4cGxvZGUtZmluaXNoZWQnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmlld01vZGVFdmVudFBheWxvYWQge1xyXG4gIFtFeHBsb2RlRXZlbnQuRmluc2hlZF06IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEV4cGxvZGVFeHRlbnNpb24gZXh0ZW5kcyBFeHRlbnNpb24ge1xyXG4gIHByb3RlY3RlZCBfZW5hYmxlZDogYm9vbGVhbiA9IHRydWVcclxuXHJcbiAgcHVibGljIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRcclxuICB9XHJcbiAgcHVibGljIHNldCBlbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9lbmFibGVkID0gdmFsdWVcclxuICB9XHJcblxyXG4gIC8qKiBTaW1pbGFyIHRvIFNwZWNrbGVSZW5kZXJlcidzIHZpc2libGVTY2VuZUJveCwgYnV0IHdpdGggc3RhdGljIGJveGVzIGZyb20gcmVuZGVyIHZpZXdzICovXHJcbiAgcHVibGljIGdldCB2aXNpYmxlV29ybGQoKTogQm94MyB7XHJcbiAgICBjb25zdCBib3VuZHM6IEJveDMgPSBuZXcgQm94MygpXHJcbiAgICBjb25zdCBzY3JhdGNoQm94ID0gbmV3IEJveDMoKVxyXG4gICAgY29uc3QgYmF0Y2hlcyA9IHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkuYmF0Y2hlci5nZXRCYXRjaGVzKClcclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgYmF0Y2hlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCBiYXRjaCA9IGJhdGNoZXNba11cclxuICAgICAgY29uc3QgcnZzID0gYmF0Y2gucmVuZGVyVmlld3Muc2xpY2UoKVxyXG4gICAgICBydnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIHJldHVybiBhLmJhdGNoU3RhcnQgLSBiLmJhdGNoU3RhcnRcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGNvbnN0IHZpc2libGVSYW5nZSA9IGJhdGNoLmdldFZpc2libGVSYW5nZSgpXHJcbiAgICAgIGxldCBsbyA9IDAsXHJcbiAgICAgICAgaGkgPSBydnMubGVuZ3RoXHJcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XHJcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxXHJcbiAgICAgICAgaWYgKHJ2c1ttaWRdLmJhdGNoU3RhcnQgPCB2aXNpYmxlUmFuZ2Uub2Zmc2V0KSBsbyA9IG1pZCArIDFcclxuICAgICAgICBlbHNlIGhpID0gbWlkXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHFTdGFydCA9IHZpc2libGVSYW5nZS5vZmZzZXRcclxuICAgICAgY29uc3QgcUVuZCA9IHZpc2libGVSYW5nZS5vZmZzZXQgKyB2aXNpYmxlUmFuZ2UuY291bnRcclxuXHJcbiAgICAgIGZvciAoOyBsbyA8IHJ2cy5sZW5ndGg7IGxvKyspIHtcclxuICAgICAgICBjb25zdCBzID0gcnZzW2xvXVxyXG4gICAgICAgIGlmIChzLmJhdGNoU3RhcnQgPj0gcUVuZCkgYnJlYWtcclxuICAgICAgICBjb25zdCBzRW5kID0gcy5iYXRjaFN0YXJ0ICsgcy5iYXRjaENvdW50XHJcbiAgICAgICAgaWYgKHMuYmF0Y2hTdGFydCA+PSBxU3RhcnQgJiYgc0VuZCA8PSBxRW5kKSB7XHJcbiAgICAgICAgICAvKiogQWxleCAxOC4wMi4yMDI2OiBUaGVyZSBpcyBhbiBpc3N1ZSB3aXRoIHVzaW5nIHRoZSByZW5kZXIgdmlldydzIGFhYmIuXHJcbiAgICAgICAgICAgKiAgSW5zdGFuY2VkIHJlbmRlciB2aWV3cyB3aWxsIGFsd2F5cyBwcm92aWRlIGluY29ycmVjdCBib3VuZHMgdW5sZXNzIHRyYW5zZm9ybWVkXHJcbiAgICAgICAgICAgKiAgV2hpY2ggaXMgd2hhdCB3ZSBhcmUgZG9pbmcgaGVyZSAqL1xyXG4gICAgICAgICAgc2NyYXRjaEJveC5jb3B5KHMuYWFiYilcclxuICAgICAgICAgIHMucmVuZGVyRGF0YS5nZW9tZXRyeS50cmFuc2Zvcm0gJiZcclxuICAgICAgICAgICAgcy5yZW5kZXJEYXRhLmdlb21ldHJ5Lmluc3RhbmNlZCAmJlxyXG4gICAgICAgICAgICBzY3JhdGNoQm94LmFwcGx5TWF0cml4NChzLnJlbmRlckRhdGEuZ2VvbWV0cnkudHJhbnNmb3JtKVxyXG4gICAgICAgICAgYm91bmRzLnVuaW9uKHNjcmF0Y2hCb3gpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYm91bmRzXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGxvZGVUaW1lID0gLTFcclxuICBwcml2YXRlIGV4cGxvZGVSYW5nZSA9IDBcclxuICBwcml2YXRlIGV4cGxvZGVPcmlnaW46IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpXHJcblxyXG4gIHB1YmxpYyBvbkVhcmx5VXBkYXRlKCkge1xyXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSByZXR1cm5cclxuXHJcbiAgICBpZiAodGhpcy5leHBsb2RlVGltZSA+IC0xKSB7XHJcbiAgICAgIHRoaXMuZXhwbG9kZSh0aGlzLmV4cGxvZGVUaW1lLCB0aGlzLmV4cGxvZGVSYW5nZSlcclxuICAgICAgdGhpcy5leHBsb2RlVGltZSA9IC0xXHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXRFeHBsb2RlKHRpbWU6IG51bWJlcikge1xyXG4gICAgY29uc3QgdmlzaWJsZVdvcmxkID0gdGhpcy52aXNpYmxlV29ybGRcclxuICAgIGNvbnN0IHNpemUgPSB2aXNpYmxlV29ybGQuZ2V0U2l6ZShuZXcgVmVjdG9yMygpKVxyXG4gICAgdGhpcy5leHBsb2RlVGltZSA9IHRpbWVcclxuICAgIHRoaXMuZXhwbG9kZVJhbmdlID0gTWF0aC5zcXJ0KHNpemUueCAqIHNpemUueCArIHNpemUueSAqIHNpemUueSArIHNpemUueiAqIHNpemUueilcclxuICAgIHZpc2libGVXb3JsZC5nZXRDZW50ZXIodGhpcy5leHBsb2RlT3JpZ2luKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBsb2RlKHRpbWU6IG51bWJlciwgcmFuZ2U6IG51bWJlcikge1xyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkuZ2V0T2JqZWN0cygpXHJcbiAgICBjb25zdCB2ZWNCdWZmID0gbmV3IFZlY3RvcjMoKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNlbnRlciA9IG9iamVjdHNbaV0uYWFiYi5nZXRDZW50ZXIodmVjQnVmZilcclxuICAgICAgY29uc3QgZGlyID0gY2VudGVyLnN1Yih0aGlzLmV4cGxvZGVPcmlnaW4pXHJcbiAgICAgIGRpci5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aW1lICogcmFuZ2UpXHJcblxyXG4gICAgICBvYmplY3RzW2ldLnRyYW5zZm9ybVRSUyhkaXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdlci5yZXF1ZXN0UmVuZGVyKFVwZGF0ZUZsYWdzLlJFTkRFUl9SRVNFVCB8IFVwZGF0ZUZsYWdzLlNIQURPV1MpXHJcbiAgICB0aGlzLmVtaXQoRXhwbG9kZUV2ZW50LkZpbnNoZWQpXHJcbiAgfVxyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xyXG5pbXBvcnQgeyBNYXRoVXRpbHMsIE1hdHJpeDQgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgdHlwZSBUcmVlTm9kZSwgV29ybGRUcmVlIH0gZnJvbSAnLi4vLi4vdHJlZS9Xb3JsZFRyZWUuanMnXHJcbmltcG9ydCB7IE5vZGVNYXAgfSBmcm9tICcuLi8uLi90cmVlL05vZGVNYXAuanMnXHJcbmltcG9ydCB7IFNwZWNrbGVUeXBlLCB0eXBlIFNwZWNrbGVPYmplY3QgfSBmcm9tICcuLi8uLi8uLi9pbmRleC5qcydcclxuaW1wb3J0IExvZ2dlciBmcm9tICcuLi8uLi91dGlscy9Mb2dnZXIuanMnXHJcbmltcG9ydCB7IE9iamVjdExvYWRlcjIgfSBmcm9tICdAc3BlY2tsZS9vYmplY3Rsb2FkZXIyJ1xyXG5pbXBvcnQgeyBTcGVja2xlVHlwZUFsbFJlbmRlcmFibGVzIH0gZnJvbSAnLi4vR2VvbWV0cnlDb252ZXJ0ZXIuanMnXHJcbmltcG9ydCB7IERhdGFDaHVuayB9IGZyb20gJy4uLy4uLy4uL0lWaWV3ZXIuanMnXHJcblxyXG5leHBvcnQgdHlwZSBDb252ZXJ0ZXJSZXN1bHREZWxlZ2F0ZSA9IChjb3VudDogbnVtYmVyKSA9PiB2b2lkXHJcbmV4cG9ydCB0eXBlIFNwZWNrbGVDb252ZXJ0ZXJOb2RlRGVsZWdhdGUgPVxyXG4gIHwgKChvYmplY3Q6IFNwZWNrbGVPYmplY3QsIG5vZGU6IFRyZWVOb2RlKSA9PiBQcm9taXNlPHZvaWQ+KVxyXG4gIHwgbnVsbFxyXG5cclxuLyoqXHJcbiAqIFV0aWxpdHkgY2xhc3MgcHJvdmlkaW5nIHNvbWUgdG9wIGxldmVsIGNvbnZlcnNpb24gbWV0aG9kcy5cclxuICogV2FybmluZzogSElDIFNWTlQgRFJBQ09ORVMuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcGVja2xlQ29udmVydGVyIHtcclxuICBwcm90ZWN0ZWQgb2JqZWN0TG9hZGVyOiBPYmplY3RMb2FkZXIyXHJcbiAgcHJvdGVjdGVkIGFjdGl2ZVByb21pc2VzOiBudW1iZXJcclxuICBwcm90ZWN0ZWQgbWF4Q2hpbGRyZW5Qcm9taXNlczogbnVtYmVyXHJcbiAgcHJvdGVjdGVkIHNwb29mSURzID0gZmFsc2VcclxuICBwcm90ZWN0ZWQgdHJlZTogV29ybGRUcmVlXHJcbiAgcHJvdGVjdGVkIHN1YnRyZWU6IFRyZWVOb2RlXHJcbiAgcHJvdGVjdGVkIHR5cGVMb29rdXBUYWJsZTogeyBbdHlwZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fVxyXG4gIHByb3RlY3RlZCBpbnN0YW5jZURlZmluaXRpb25Mb29rdXBUYWJsZTogeyBbaWQ6IHN0cmluZ106IFRyZWVOb2RlIH0gPSB7fVxyXG4gIHByb3RlY3RlZCBpbnN0YW5jZWRPYmplY3RzTG9va3VwVGFibGU6IHsgW2lkOiBzdHJpbmddOiBTcGVja2xlT2JqZWN0IH0gPSB7fVxyXG4gIHByb3RlY3RlZCBpbnN0YW5jZVByb3hpZXM6IHsgW2lkOiBzdHJpbmddOiBUcmVlTm9kZSB9ID0ge31cclxuICBwcm90ZWN0ZWQgcmVuZGVyTWF0ZXJpYWxNYXA6IHsgW2lkOiBzdHJpbmddOiBTcGVja2xlT2JqZWN0IH0gPSB7fVxyXG4gIHByb3RlY3RlZCBjb2xvck1hcDogeyBbaWQ6IHN0cmluZ106IFNwZWNrbGVPYmplY3QgfSA9IHt9XHJcbiAgcHJvdGVjdGVkIGluc3RhbmNlQ291bnRlciA9IDBcclxuICBwcm90ZWN0ZWQgZHVwbGljYXRlQ291bnRlciA9IDBcclxuICBwcml2YXRlIHRyYXZlcnNlQ291bnQgPSAwXHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBOb2RlQ29udmVydGVyTWFwcGluZzoge1xyXG4gICAgW25hbWU6IHN0cmluZ106IFNwZWNrbGVDb252ZXJ0ZXJOb2RlRGVsZWdhdGVcclxuICB9ID0ge1xyXG4gICAgVmlldzNEOiB0aGlzLlZpZXczRFRvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgQmxvY2tJbnN0YW5jZTogdGhpcy5CbG9ja0luc3RhbmNlVG9Ob2RlLmJpbmQodGhpcyksXHJcbiAgICBQb2ludGNsb3VkOiB0aGlzLlBvaW50Y2xvdWRUb05vZGUuYmluZCh0aGlzKSxcclxuICAgIEJyZXA6IHRoaXMuQnJlcFRvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgQnJlcFg6IHRoaXMuQnJlcFRvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgRXh0cnVzaW9uWDogdGhpcy5CcmVwVG9Ob2RlLmJpbmQodGhpcyksXHJcbiAgICBTdWJEWDogdGhpcy5CcmVwVG9Ob2RlLmJpbmQodGhpcyksXHJcbiAgICBNZXNoOiB0aGlzLk1lc2hUb05vZGUuYmluZCh0aGlzKSxcclxuICAgIFBvaW50OiB0aGlzLlBvaW50VG9Ob2RlLmJpbmQodGhpcyksXHJcbiAgICBMaW5lOiB0aGlzLkxpbmVUb05vZGUuYmluZCh0aGlzKSxcclxuICAgIFBvbHlsaW5lOiB0aGlzLlBvbHlsaW5lVG9Ob2RlLmJpbmQodGhpcyksXHJcbiAgICBCb3g6IHRoaXMuQm94VG9Ob2RlLmJpbmQodGhpcyksXHJcbiAgICBQb2x5Y3VydmU6IHRoaXMuUG9seWN1cnZlVG9Ob2RlLmJpbmQodGhpcyksXHJcbiAgICBDdXJ2ZTogdGhpcy5DdXJ2ZVRvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgQ2lyY2xlOiB0aGlzLkNpcmNsZVRvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgQXJjOiB0aGlzLkFyY1RvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgRWxsaXBzZTogdGhpcy5FbGxpcHNlVG9Ob2RlLmJpbmQodGhpcyksXHJcbiAgICBSZXZpdEluc3RhbmNlOiB0aGlzLlJldml0SW5zdGFuY2VUb05vZGUuYmluZCh0aGlzKSxcclxuICAgIFRleHQ6IHRoaXMuVGV4dFRvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgRGltZW5zaW9uOiB0aGlzLkRpbWVuc2lvblRvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgSW5zdGFuY2VEZWZpbml0aW9uUHJveHk6IHRoaXMuSW5zdGFuY2VEZWZpbml0aW9uUHJveHlUb05vZGUuYmluZCh0aGlzKSxcclxuICAgIEluc3RhbmNlUHJveHk6IHRoaXMuSW5zdGFuY2VQcm94eVRvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgUmVuZGVyTWF0ZXJpYWxQcm94eTogdGhpcy5SZW5kZXJNYXRlcmlhbFByb3h5VG9Ob2RlLmJpbmQodGhpcyksXHJcbiAgICBDb2xvclByb3h5OiB0aGlzLkNvbG9yUHJveHlUb05vZGUuYmluZCh0aGlzKSxcclxuICAgIFJlZ2lvbjogdGhpcy5SZWdpb25Ub05vZGUuYmluZCh0aGlzKSxcclxuICAgIFBhcmFtZXRlcjogbnVsbFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IElnbm9yZU5vZGVzID0gWydQYXJhbWV0ZXInLCAnUmF3RW5jb2RpbmcnXVxyXG5cclxuICBjb25zdHJ1Y3RvcihvYmplY3RMb2FkZXI6IE9iamVjdExvYWRlcjIsIHRyZWU6IFdvcmxkVHJlZSkge1xyXG4gICAgaWYgKCFvYmplY3RMb2FkZXIpIHtcclxuICAgICAgTG9nZ2VyLndhcm4oXHJcbiAgICAgICAgJ0NvbnZlcnRlciBpbml0aWFsaXplZCB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBvYmplY3QgbG9hZGVyLiBBbnkgb2JqZWN0cyB0aGF0IGluY2x1ZGUgcmVmZXJlbmNlcyB3aWxsIHRocm93IGVycm9ycy4nXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9iamVjdExvYWRlciA9IG9iamVjdExvYWRlclxyXG4gICAgdGhpcy5hY3RpdmVQcm9taXNlcyA9IDBcclxuICAgIHRoaXMubWF4Q2hpbGRyZW5Qcm9taXNlcyA9IDIwMFxyXG4gICAgdGhpcy50cmVlID0gdHJlZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIG9iamVjdCBpcyBjb252ZXJ0aWJsZSAodGhlcmUgaXMgYSBkaXJlY3QgY29udmVyc2lvbiByb3V0aW5lKSwgaXQgd2lsbCBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggdGhlIGNvbnZlcnNpb24gcmVzdWx0LlxyXG4gICAqIElmIHRoZSBvYmplY3QgaXMgbm90IGNvbnZlcnRpYmxlLCBpdCB3aWxsIHJlY3Vyc2l2ZWx5IGl0ZXJhdGUgdGhyb3VnaCBpdCAoYXJyYXlzICYgb2JqZWN0cykgYW5kIGludm9rZSB0aGUgY2FsbGJhY2sgb24gYW55IHBvc2l0aXZlIGNvbnZlcnNpb24gcmVzdWx0LlxyXG4gICAqIEBwYXJhbSAge1t0eXBlXX0gICBvYmogICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIFtkZXNjcmlwdGlvbl1cclxuICAgKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyB0cmF2ZXJzZShcclxuICAgIG9iamVjdFVSTDogc3RyaW5nLFxyXG4gICAgb2JqOiBTcGVja2xlT2JqZWN0LFxyXG4gICAgY2FsbGJhY2s6IENvbnZlcnRlclJlc3VsdERlbGVnYXRlLFxyXG4gICAgbm9kZTogVHJlZU5vZGUgfCBudWxsID0gbnVsbFxyXG4gICkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gRXhpdCBvbiBwcmltaXRpdmVzIChzdHJpbmcsIGludHMsIGJvb2xzLCBiaWdpbnRzLCBldGMuKVxyXG4gICAgICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSByZXR1cm5cclxuICAgICAgaWYgKG9iai5yZWZlcmVuY2VkSWQpIG9iaiA9IGF3YWl0IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShvYmopXHJcblxyXG4gICAgICBjb25zdCBjaGlsZHJlbkNvbnZlcnNpb25Qcm9taXNzZXMgPSBbXVxyXG5cclxuICAgICAgLy8gVHJhdmVyc2UgYXJyYXlzLCBhbmQgZXhpdCBlYXJseSAod2UgZG9uJ3Qgd2FudCB0byBpdGVyYXRlIHRocm91Z2ggbWFueSBudW1iZXJzKVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG9iaikge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50ICE9PSAnb2JqZWN0JykgYnJlYWsgLy8gZXhpdCBlYXJseSBmb3Igbm9uLW9iamVjdCBiYXNlZCBhcnJheXNcclxuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVByb21pc2VzID49IHRoaXMubWF4Q2hpbGRyZW5Qcm9taXNlcykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnRyYXZlcnNlKG9iamVjdFVSTCwgZWxlbWVudCwgY2FsbGJhY2ssIG5vZGUpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZFByb21pc2UgPSB0aGlzLnRyYXZlcnNlKG9iamVjdFVSTCwgZWxlbWVudCwgY2FsbGJhY2ssIG5vZGUpXHJcbiAgICAgICAgICAgIGNoaWxkcmVuQ29udmVyc2lvblByb21pc3Nlcy5wdXNoKGNoaWxkUHJvbWlzZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuQ29udmVyc2lvblByb21pc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVByb21pc2VzICs9IGNoaWxkcmVuQ29udmVyc2lvblByb21pc3Nlcy5sZW5ndGhcclxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNoaWxkcmVuQ29udmVyc2lvblByb21pc3NlcylcclxuICAgICAgICAgIHRoaXMuYWN0aXZlUHJvbWlzZXMgLT0gY2hpbGRyZW5Db252ZXJzaW9uUHJvbWlzc2VzLmxlbmd0aFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqIFRoZXNlIGFyZSBub3QgbmVlZGVkIGFzIG5vZGVzICovXHJcbiAgICAgIGlmICh0aGlzLklnbm9yZU5vZGVzLmluY2x1ZGVzKHRoaXMuZ2V0U3BlY2tsZVR5cGUob2JqKSkpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICAvKiogSWdub3JlIG9iamVjdHMgd2l0aCBubyBpZCAqL1xyXG4gICAgICBpZiAoIW9iai5pZCkgcmV0dXJuXHJcblxyXG4gICAgICBjb25zdCBjaGlsZE5vZGU6IFRyZWVOb2RlID0gdGhpcy50cmVlLnBhcnNlKHtcclxuICAgICAgICBpZDogdGhpcy5nZXROb2RlSWQob2JqKSxcclxuICAgICAgICByYXc6IG9iaixcclxuICAgICAgICBhdG9taWM6IHRydWUsXHJcbiAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIC8qKiBXZSdyZSBhZGRpbmcgYSBwYXJlbnQgZm9yIHRoZSBlbnRpcmUgbW9kZWwgKHN1YnRyZWUpICovXHJcbiAgICAgICAgdGhpcy5zdWJ0cmVlID0gdGhpcy50cmVlLnBhcnNlKHtcclxuICAgICAgICAgIGlkOiBvYmplY3RVUkwsXHJcbiAgICAgICAgICAvKiBIYWNrIHJlcXVpcmVkIGJ5IGZyb250ZW5kKi9cclxuICAgICAgICAgIHJhdzogeyBpZDogb2JqZWN0VVJMLCBjaGlsZHJlbjogW29ial0gfSxcclxuICAgICAgICAgIGF0b21pYzogdHJ1ZSxcclxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy50cmVlLmFkZFN1YnRyZWUodGhpcy5zdWJ0cmVlKVxyXG4gICAgICAgIHRoaXMuYWRkTm9kZShjaGlsZE5vZGUsIHRoaXMuc3VidHJlZSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFkZE5vZGUoY2hpbGROb2RlLCBub2RlKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB3ZSBjYW4gY29udmVydCBpdCwgd2Ugc2hvdWxkIGludm9rZSB0aGUgcmVzcGVjdGl2ZSBjb252ZXJzaW9uIHJvdXRpbmUuXHJcbiAgICAgIGlmICh0aGlzLmRpcmVjdE5vZGVDb252ZXJ0ZXJFeGlzdHMob2JqKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbnZlcnRUb05vZGUob2JqLCBjaGlsZE5vZGUpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBMb2dnZXIud2FybihcclxuICAgICAgICAgICAgYChUcmF2ZXJzaW5nIC0gZGlyZWN0KSBGYWlsZWQgdG8gY29udmVydCAke3RoaXMuZ2V0U3BlY2tsZVR5cGUoXHJcbiAgICAgICAgICAgICAgb2JqXHJcbiAgICAgICAgICAgICl9IHdpdGggaWQ6ICR7b2JqLmlkfWAsXHJcbiAgICAgICAgICAgIGVcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRhcmdldDogU3BlY2tsZU9iamVjdCA9IG9ialxyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIG9iamVjdCBoYXMgYSBkaXNwbGF5IHZhbHVlIG9mIHNvcnRzXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgIGxldCBkaXNwbGF5VmFsdWUgPSB0aGlzLmdldERpc3BsYXlWYWx1ZSh0YXJnZXQpIGFzIGFueVxyXG5cclxuICAgICAgaWYgKGRpc3BsYXlWYWx1ZSkge1xyXG4gICAgICAgIGNoaWxkTm9kZS5tb2RlbC5hdG9taWMgPSB0cnVlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2hpbGROb2RlLm1vZGVsLmF0b21pYyA9IGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkaXNwbGF5VmFsdWUpIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGlzcGxheVZhbHVlKSkge1xyXG4gICAgICAgICAgZGlzcGxheVZhbHVlID0gYXdhaXQgdGhpcy5yZXNvbHZlUmVmZXJlbmNlKGRpc3BsYXlWYWx1ZSlcclxuICAgICAgICAgIGlmICghZGlzcGxheVZhbHVlLnVuaXRzKSBkaXNwbGF5VmFsdWUudW5pdHMgPSBvYmoudW5pdHNcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGU6IFRyZWVOb2RlID0gdGhpcy50cmVlLnBhcnNlKHtcclxuICAgICAgICAgICAgICBpZDogdGhpcy5nZXROb2RlSWQoZGlzcGxheVZhbHVlKSxcclxuICAgICAgICAgICAgICByYXc6IGRpc3BsYXlWYWx1ZSxcclxuICAgICAgICAgICAgICBhdG9taWM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmFkZE5vZGUobmVzdGVkTm9kZSwgY2hpbGROb2RlKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnZlcnRUb05vZGUoZGlzcGxheVZhbHVlLCBuZXN0ZWROb2RlKVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBMb2dnZXIud2FybihcclxuICAgICAgICAgICAgICBgKFRyYXZlcnNpbmcpIEZhaWxlZCB0byBjb252ZXJ0IG9iaiB3aXRoIGlkOiAke29iai5pZH0g4oCUICR7XHJcbiAgICAgICAgICAgICAgICAoZSBhcyBuZXZlcilbJ21lc3NhZ2UnXVxyXG4gICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGRpc3BsYXlWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhd2FpdCB0aGlzLnJlc29sdmVSZWZlcmVuY2UoZWxlbWVudClcclxuICAgICAgICAgICAgaWYgKCF2YWwudW5pdHMpIHZhbC51bml0cyA9IG9iai51bml0c1xyXG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBUcmVlTm9kZSA9IHRoaXMudHJlZS5wYXJzZSh7XHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZ2V0Tm9kZUlkKHZhbCksXHJcbiAgICAgICAgICAgICAgcmF3OiB2YWwsXHJcbiAgICAgICAgICAgICAgYXRvbWljOiBmYWxzZSxcclxuICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5hZGROb2RlKG5lc3RlZE5vZGUsIGNoaWxkTm9kZSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb252ZXJ0VG9Ob2RlKHZhbCwgbmVzdGVkTm9kZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBidWlsdCBlbGVtZW50IGFuZCBoYXMgYSBkaXNwbGF5IHZhbHVlLCBvbmx5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgXCJlbGVtZW50c1wiIHByb3AgaWYgaXQgZXhpc3RzLlxyXG4gICAgICAgIC8qKiAxMC4yNS4yMDIzIFRoaXMgbWlnaHQgYmUgc2VyaW91cyBsZWdhY3kgc3R1ZmYgdGhhdCB3ZSBtaWdodCBub3QgbmVlZCBhbnltb3JlICovXHJcbiAgICAgICAgLyoqIDIyLjExLjIwMjQgV2UgaGF2ZSBqdXN0IGFkZGVkIHN0dWZmIHRvIHRoaXMgc2VyaW91cyBsZWdhY3kgc3R1ZmYgdGhhdCBtaWdodCBub3QgYmUgbmVlZGVkIGFueW1vcmUgKGpva2UncyBvbiB1cywgaXQgaXMgbmVlZGVkKSAqL1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIG9iai5zcGVja2xlX3R5cGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYnVpbHRlbGVtZW50cycpIHx8XHJcbiAgICAgICAgICBvYmouc3BlY2tsZV90eXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ29iamVjdHMuZGF0YScpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuZ2V0RWxlbWVudHNWYWx1ZShvYmopXHJcbiAgICAgICAgICBpZiAoZWxlbWVudHMpIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5Db252ZXJzaW9uUHJvbWlzc2VzLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy50cmF2ZXJzZShvYmplY3RVUkwsIGVsZW1lbnRzIGFzIFNwZWNrbGVPYmplY3QsIGNhbGxiYWNrLCBjaGlsZE5vZGUpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVQcm9taXNlcyArPSBjaGlsZHJlbkNvbnZlcnNpb25Qcm9taXNzZXMubGVuZ3RoXHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNoaWxkcmVuQ29udmVyc2lvblByb21pc3NlcylcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVQcm9taXNlcyAtPSBjaGlsZHJlbkNvbnZlcnNpb25Qcm9taXNzZXMubGVuZ3RoXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBMYXN0IGF0dGVtcHQ6IGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2JqZWN0IGtleXMgYW5kIHNlZSBpZiB3ZSBjYW4gZGlzcGxheSBhbnl0aGluZyFcclxuICAgICAgLy8gdHJhdmVyc2VzIHRoZSBvYmplY3QgaW4gY2FzZSB0aGVyZSdzIGFueSBzdWItb2JqZWN0cyB3ZSBjYW4gY29udmVydC5cclxuICAgICAgZm9yIChjb25zdCBwcm9wIGluIHRhcmdldCkge1xyXG4gICAgICAgIGlmIChwcm9wID09PSAnX19wYXJlbnRzJyB8fCBwcm9wID09PSAnYmJveCcgfHwgcHJvcCA9PT0gJ19fY2xvc3VyZScpIGNvbnRpbnVlXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgWydkaXNwbGF5TWVzaCcsICdAZGlzcGxheU1lc2gnLCAnZGlzcGxheVZhbHVlJywgJ0BkaXNwbGF5VmFsdWUnXS5pbmNsdWRlcyhcclxuICAgICAgICAgICAgcHJvcFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRbcHJvcF0gIT09ICdvYmplY3QnIHx8IHRhcmdldFtwcm9wXSA9PT0gbnVsbCkgY29udGludWVcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlUHJvbWlzZXMgPj0gdGhpcy5tYXhDaGlsZHJlblByb21pc2VzKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYXZlcnNlKFxyXG4gICAgICAgICAgICBvYmplY3RVUkwsXHJcbiAgICAgICAgICAgIHRhcmdldFtwcm9wXSBhcyBTcGVja2xlT2JqZWN0LFxyXG4gICAgICAgICAgICBjYWxsYmFjayxcclxuICAgICAgICAgICAgY2hpbGROb2RlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGNoaWxkUHJvbWlzZSA9IHRoaXMudHJhdmVyc2UoXHJcbiAgICAgICAgICAgIG9iamVjdFVSTCxcclxuICAgICAgICAgICAgdGFyZ2V0W3Byb3BdIGFzIFNwZWNrbGVPYmplY3QsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLFxyXG4gICAgICAgICAgICBjaGlsZE5vZGVcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGNoaWxkcmVuQ29udmVyc2lvblByb21pc3Nlcy5wdXNoKGNoaWxkUHJvbWlzZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoaWxkcmVuQ29udmVyc2lvblByb21pc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVQcm9taXNlcyArPSBjaGlsZHJlbkNvbnZlcnNpb25Qcm9taXNzZXMubGVuZ3RoXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2hpbGRyZW5Db252ZXJzaW9uUHJvbWlzc2VzKVxyXG4gICAgICAgIHRoaXMuYWN0aXZlUHJvbWlzZXMgLT0gY2hpbGRyZW5Db252ZXJzaW9uUHJvbWlzc2VzLmxlbmd0aFxyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBjYWxsYmFjayh0aGlzLnRyYXZlcnNlQ291bnQrKylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Tm9kZUlkKG9iajogU3BlY2tsZU9iamVjdCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5zcG9vZklEcykgcmV0dXJuIE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKVxyXG5cclxuICAgIHJldHVybiBvYmouaWRcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkTm9kZShub2RlOiBUcmVlTm9kZSwgcGFyZW50OiBUcmVlTm9kZSkge1xyXG4gICAgaWYgKHRoaXMudHJlZS5oYXNOb2RlSWQobm9kZS5tb2RlbC5pZCwgcGFyZW50Lm1vZGVsLnN1YnRyZWVJZCkpIHtcclxuICAgICAgbm9kZS5tb2RlbC5pZCA9IHRoaXMuZ2V0RHVwbGljYXRlSWQobm9kZS5tb2RlbC5pZCwgKyt0aGlzLmR1cGxpY2F0ZUNvdW50ZXIpXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyZWUuYWRkTm9kZShub2RlLCBwYXJlbnQpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUYWtlcyBhbiBhcnJheSBjb21wb3NlZCBvZiBjaHVua2VkIHJlZmVyZW5jZXMgYW5kIGRlY2h1bmtzIGl0LlxyXG4gICAqIEBwYXJhbSAge1t0eXBlXX0gYXJyIFtkZXNjcmlwdGlvbl1cclxuICAgKiBAcmV0dXJuIHtbdHlwZV19ICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBkZWNodW5rKGFycjogQXJyYXk8eyByZWZlcmVuY2VkSWQ6IHN0cmluZyB9Pik6IFByb21pc2U8RGF0YUNodW5rW10+IHtcclxuICAgIGlmICghYXJyIHx8IGFyci5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGFyciBhcyB1bmtub3duIGFzIERhdGFDaHVua1tdXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyWzBdKSAmJiAhYXJyWzBdLnJlZmVyZW5jZWRJZCkge1xyXG4gICAgICByZXR1cm4gYXJyIGFzIHVua25vd24gYXMgRGF0YUNodW5rW11cclxuICAgIH1cclxuICAgIC8vIEhhbmRsZXMgcHJlLWNodW5raW5nIG9iamVjdHMsIG9yIGFycnMgdGhhdCBoYXZlIG5vdCBiZWVuIGNodW5rZWRcclxuICAgIGlmICghYXJyWzBdLnJlZmVyZW5jZWRJZCkge1xyXG4gICAgICBpZiAoIShhcnJbMF0gaW5zdGFuY2VvZiBPYmplY3QpKVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGRhdGE6IGFycixcclxuICAgICAgICAgICAgaWQ6IE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgICAgICAgcmVmZXJlbmNlczogMVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF0gYXMgdW5rbm93biBhcyBEYXRhQ2h1bmtbXVxyXG4gICAgICBlbHNlIHJldHVybiBhcnIgYXMgdW5rbm93biBhcyBEYXRhQ2h1bmtbXVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNodW5rZWQ6IERhdGFDaHVua1tdID0gW11cclxuICAgIGZvciAoY29uc3QgcmVmIG9mIGFycikge1xyXG4gICAgICBjb25zdCByZWFsOiBEYXRhQ2h1bmsgPSAoYXdhaXQgdGhpcy5vYmplY3RMb2FkZXIuZ2V0T2JqZWN0KHtcclxuICAgICAgICBpZDogcmVmLnJlZmVyZW5jZWRJZFxyXG4gICAgICB9KSkgYXMgdW5rbm93biBhcyBEYXRhQ2h1bmtcclxuICAgICAgaWYgKHJlYWwucmVmZXJlbmNlcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmVhbC5yZWZlcmVuY2VzID0gMVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlYWwucmVmZXJlbmNlcysrXHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHJlYWwuZGF0YS5sZW5ndGggJiZcclxuICAgICAgICAodHlwZW9mIHJlYWwuZGF0YVswXSAhPT0gJ251bWJlcicgfHwgaXNOYU4ocmVhbC5kYXRhWzBdKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgTG9nZ2VyLmVycm9yKFxyXG4gICAgICAgICAgYENodW5rIGlkICR7cmVhbC5pZH0gbWlnaHQgbm90IGhhdmUgbnVtZXJpYyBnZW9tZXRyeSBkYXRhLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQhYFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBjaHVua2VkLnB1c2gocmVhbClcclxuICAgICAgLy8gYXdhaXQgdGhpcy5hc3luY1BhdXNlKClcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25zdCBkZWNodW5rZWQgPSBbXS5jb25jYXQoLi4uKGNodW5rZWQgYXMgYW55KSlcclxuXHJcbiAgICByZXR1cm4gY2h1bmtlZFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZXMgYW4gb2JqZWN0IHJlZmVyZW5jZSBieSB3YWl0aW5nIGZvciB0aGUgbG9hZGVyIHRvIGxvYWQgaXQgdXAuXHJcbiAgICogQHBhcmFtICB7W3R5cGVdfSBvYmogW2Rlc2NyaXB0aW9uXVxyXG4gICAqIEByZXR1cm4ge1t0eXBlXX0gICAgIFtkZXNjcmlwdGlvbl1cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHJlc29sdmVSZWZlcmVuY2Uob2JqOiBTcGVja2xlT2JqZWN0KTogUHJvbWlzZTxTcGVja2xlT2JqZWN0PiB7XHJcbiAgICBpZiAob2JqLnJlZmVyZW5jZWRJZCkge1xyXG4gICAgICBjb25zdCByZXNvbHZlZE9iaiA9IChhd2FpdCB0aGlzLm9iamVjdExvYWRlci5nZXRPYmplY3Qoe1xyXG4gICAgICAgIGlkOiBvYmoucmVmZXJlbmNlZElkXHJcbiAgICAgIH0pKSBhcyBTcGVja2xlT2JqZWN0XHJcbiAgICAgIC8vIHRoaXMuYXN5bmNQYXVzZSgpXHJcbiAgICAgIHJldHVybiByZXNvbHZlZE9ialxyXG4gICAgfSBlbHNlIHJldHVybiBvYmpcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHNwZWNrbGUgdHlwZSBvZiBhbiBvYmplY3QgaW4gdmFyaW91cyBzY2VuYXJpb3MuXHJcbiAgICogQHBhcmFtICB7W3R5cGVdfSBvYmogW2Rlc2NyaXB0aW9uXVxyXG4gICAqIEByZXR1cm4ge1t0eXBlXX0gICAgIFtkZXNjcmlwdGlvbl1cclxuICAgKi9cclxuICBwcml2YXRlIGdldFNwZWNrbGVUeXBlKG9iajogU3BlY2tsZU9iamVjdCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYXdUeXBlID0gb2JqLnNwZWNrbGVfdHlwZSA/IG9iai5zcGVja2xlX3R5cGUgOiAnQmFzZSdcclxuXHJcbiAgICBjb25zdCBsb29rdXAgPSB0aGlzLnR5cGVMb29rdXBUYWJsZVtyYXdUeXBlXVxyXG4gICAgaWYgKGxvb2t1cCkgcmV0dXJuIGxvb2t1cFxyXG5cclxuICAgIGxldCB0eXBlUmV0ID0gJ0Jhc2UnXHJcbiAgICBjb25zdCB0eXBlQ2hhaW4gPSB0aGlzLmdldFNwZWNrbGVUeXBlQ2hhaW4ob2JqKVxyXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVDaGFpbikge1xyXG4gICAgICBjb25zdCBub2RlQ29udmVydGVyID0gdHlwZSBpbiB0aGlzLk5vZGVDb252ZXJ0ZXJNYXBwaW5nXHJcbiAgICAgIGlmIChub2RlQ29udmVydGVyKSB7XHJcbiAgICAgICAgdHlwZVJldCA9IHR5cGVcclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnR5cGVMb29rdXBUYWJsZVtyYXdUeXBlXSA9IHR5cGVSZXRcclxuICAgIHJldHVybiB0eXBlUmV0XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNwZWNrbGVUeXBlQ2hhaW4ob2JqOiBTcGVja2xlT2JqZWN0KTogc3RyaW5nW10ge1xyXG4gICAgbGV0IHR5cGUgPSBbJ0Jhc2UnXVxyXG4gICAgdHlwZSA9IG9iai5zcGVja2xlX3R5cGUgPyBvYmouc3BlY2tsZV90eXBlLnNwbGl0KCc6JykucmV2ZXJzZSgpIDogdHlwZVxyXG4gICAgdHlwZSA9IHR5cGUubWFwPHN0cmluZz4oKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcuJykucmV2ZXJzZSgpWzBdXHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiB0eXBlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpcmVjdE5vZGVDb252ZXJ0ZXJFeGlzdHMob2JqOiBTcGVja2xlT2JqZWN0KSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRTcGVja2xlVHlwZShvYmopIGluIHRoaXMuTm9kZUNvbnZlcnRlck1hcHBpbmdcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY29udmVydFRvTm9kZShvYmo6IFNwZWNrbGVPYmplY3QsIG5vZGU6IFRyZWVOb2RlKSB7XHJcbiAgICBpZiAob2JqLnJlZmVyZW5jZWRJZCkgb2JqID0gYXdhaXQgdGhpcy5yZXNvbHZlUmVmZXJlbmNlKG9iailcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmRpcmVjdE5vZGVDb252ZXJ0ZXJFeGlzdHMob2JqKSkge1xyXG4gICAgICAgIGNvbnN0IGRlbGVnYXRlID0gdGhpcy5Ob2RlQ29udmVydGVyTWFwcGluZ1t0aGlzLmdldFNwZWNrbGVUeXBlKG9iaildXHJcbiAgICAgICAgaWYgKGRlbGVnYXRlKSByZXR1cm4gYXdhaXQgZGVsZWdhdGUob2JqLCBub2RlKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGAoRGlyZWN0IGNvbnZlcnQpIEZhaWxlZCB0byBjb252ZXJ0IG9iamVjdCB3aXRoIGlkOiAke29iai5pZH1gKVxyXG4gICAgICB0aHJvdyBlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERpc3BsYXlWYWx1ZShvYmo6IFNwZWNrbGVPYmplY3QpIHtcclxuICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9XHJcbiAgICAgIG9ialsnZGlzcGxheVZhbHVlJ10gfHxcclxuICAgICAgb2JqWydAZGlzcGxheVZhbHVlJ10gfHxcclxuICAgICAgb2JqWydkaXNwbGF5TWVzaCddIHx8XHJcbiAgICAgIG9ialsnQGRpc3BsYXlNZXNoJ11cclxuXHJcbiAgICBpZiAoZGlzcGxheVZhbHVlKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRpc3BsYXlWYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZERpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZS5maWx0ZXIoKHYpID0+IHYpXHJcbiAgICAgICAgaWYgKGRpc3BsYXlWYWx1ZS5sZW5ndGggIT09IGZpbHRlcmVkRGlzcGxheVZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgTG9nZ2VyLndhcm4oYE9iamVjdCAke29iai5pZH0gaGFzIG51bGwgZGlzcGxheSB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBpZ25vcmVkYClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRGlzcGxheVZhbHVlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGRpc3BsYXlWYWx1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RWxlbWVudHNWYWx1ZShvYmo6IFNwZWNrbGVPYmplY3QpIHtcclxuICAgIHJldHVybiBvYmpbJ2VsZW1lbnRzJ10gfHwgb2JqWydAZWxlbWVudHMnXVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCbG9ja0RlZmluaXRpb24ob2JqOiBTcGVja2xlT2JqZWN0KSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBvYmpbJ0BibG9ja0RlZmluaXRpb24nXSB8fFxyXG4gICAgICBvYmpbJ2Jsb2NrRGVmaW5pdGlvbiddIHx8XHJcbiAgICAgIG9ialsnZGVmaW5pdGlvbiddIHx8XHJcbiAgICAgIG9ialsnQGRlZmluaXRpb24nXVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCbG9ja0RlZmluaXRpb25HZW9tZXRyeShvYmo6IFNwZWNrbGVPYmplY3QpIHtcclxuICAgIHJldHVybiBvYmpbJ0BnZW9tZXRyeSddIHx8IG9ialsnZ2VvbWV0cnknXVxyXG4gIH1cclxuXHJcbiAgLyoqIFdlJ3JlIHdhc3RpbmcgYSBmZXcgbWlsaXMgaGVyZSwgYnV0IGl0IGlzIHdoYXQgaXQgaXMgKi9cclxuICBwcml2YXRlIGdldENvbXBvdW5kSWQoYmFzZUlkOiBzdHJpbmcsIGNvdW50ZXI6IG51bWJlcikge1xyXG4gICAgY29uc3QgaW5kZXggPSBiYXNlSWQuaW5kZXhPZihOb2RlTWFwLkNPTVBPVU5EX0lEX0NIQVIpXHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIHJldHVybiBiYXNlSWQgKyBOb2RlTWFwLkNPTVBPVU5EX0lEX0NIQVIgKyBjb3VudGVyXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFzZUlkLnN1YnN0cmluZygwLCBpbmRleCkgKyBOb2RlTWFwLkNPTVBPVU5EX0lEX0NIQVIgKyBjb3VudGVyXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldER1cGxpY2F0ZUlkKGJhc2VJZDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gYmFzZUlkLmluZGV4T2YoTm9kZU1hcC5EVVBMSUNBVEVfSURfQ0hBUilcclxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuIGJhc2VJZCArIE5vZGVNYXAuRFVQTElDQVRFX0lEX0NIQVIgKyBjb3VudGVyXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFzZUlkLnN1YnN0cmluZygwLCBpbmRleCkgKyBOb2RlTWFwLkRVUExJQ0FURV9JRF9DSEFSICsgY291bnRlclxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbXB0eVRyYW5zZm9ybURhdGEoaWQ6IHN0cmluZykge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgcmV0dXJuIHsgaWQsIHNwZWNrbGVfdHlwZTogJ1RyYW5zZm9ybScsIHVuaXRzOiAnbScsIG1hdHJpeDogbmV3IEFycmF5KDE2KSB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgIE5PREVTXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBWaWV3M0RUb05vZGUob2JqOiBTcGVja2xlT2JqZWN0LCBfbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgb2JqLm9yaWdpbi51bml0cyA9IG9iai51bml0c1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBvYmoudGFyZ2V0LnVuaXRzID0gb2JqLnVuaXRzXHJcbiAgfVxyXG5cclxuICAvKiogVGhpcyBpcyBvbmx5IHVzZWQgZm9yIEJsb2NrcyB0byBzZWFyY2ggZm9yIGNvbnZlcnRpYmxlIG9iamVjdHMsIHdpdGhvdXQgdXNpbmcgdGhlIG1haW4gJ3RyYXZlcnNlJyBmdW5jdGlvblxyXG4gICAqICBJdCdzIG9ubHkgbG9va2luZyBmb3IgJ2VsZW1lbnRzJyBhbmQgJ2Rpc3BsYXlWYWx1ZXMnXHJcbiAgICogIEkgdGhpbmsgaXQgY2FuIGJlIHVzZWQgZm9yIFJldml0SW5zdGFuY2VzIGFzIHdlbGwgdG8gcmVwbGFjZSBpdCdzIGN1cnJlbnQgbG9va3VwLCBidXQgSSdtIGFmcmFpZCB0byBkbyBpdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgZGlzcGxheWFibGVMb29rdXAoXHJcbiAgICBvYmo6IFNwZWNrbGVPYmplY3QsXHJcbiAgICBub2RlOiBUcmVlTm9kZSxcclxuICAgIGluc3RhbmNlZDogYm9vbGVhblxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuZGlyZWN0Tm9kZUNvbnZlcnRlckV4aXN0cyhvYmopKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuY29udmVydFRvTm9kZShvYmosIG5vZGUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkaXNwbGF5VmFsdWVzID0gdGhpcy5nZXREaXNwbGF5VmFsdWUob2JqKVxyXG4gICAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuZ2V0RWxlbWVudHNWYWx1ZShvYmopXHJcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXHJcbiAgICAgICAgLi4uKGRpc3BsYXlWYWx1ZXMgPyAoZGlzcGxheVZhbHVlcyBhcyBTcGVja2xlT2JqZWN0W10pIDogW10pLFxyXG4gICAgICAgIC4uLihlbGVtZW50cyA/IChlbGVtZW50cyBhcyBTcGVja2xlT2JqZWN0W10pIDogW10pXHJcbiAgICAgIF1cclxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVSZWZlcmVuY2UoZW50cnkpXHJcbiAgICAgICAgY29uc3QgdmFsdWVOb2RlOiBUcmVlTm9kZSA9IHRoaXMudHJlZS5wYXJzZSh7XHJcbiAgICAgICAgICBpZDogdGhpcy5nZXRDb21wb3VuZElkKHZhbHVlLmlkLCB0aGlzLmluc3RhbmNlQ291bnRlcisrKSxcclxuICAgICAgICAgIHJhdzogdmFsdWUsXHJcbiAgICAgICAgICBhdG9taWM6IGZhbHNlLFxyXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgaW5zdGFuY2VkXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5hZGROb2RlKHZhbHVlTm9kZSwgbm9kZSlcclxuICAgICAgICBhd2FpdCB0aGlzLmRpc3BsYXlhYmxlTG9va3VwKHZhbHVlLCB2YWx1ZU5vZGUsIGluc3RhbmNlZClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwYXJzZUluc3RhbmNlRGVmaW5pdGlvbkdlb21ldHJ5KFxyXG4gICAgaW5zdGFuY2VPYmo6IFNwZWNrbGVPYmplY3QsXHJcbiAgICBkZWZHZW9tZXRyeTogU3BlY2tsZU9iamVjdCxcclxuICAgIGluc3RhbmNlTm9kZTogVHJlZU5vZGVcclxuICApIHtcclxuICAgIGNvbnN0IHRyYW5zZm9ybU5vZGVJZCA9IE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKVxyXG4gICAgbGV0IHRyYW5zZm9ybURhdGEgPSBudWxsXHJcbiAgICAvKiogTGVnYWN5IGZvcm0gb2YgVHJhbnNmb3JtICovXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnN0YW5jZU9iai50cmFuc2Zvcm0pKSB7XHJcbiAgICAgIHRyYW5zZm9ybURhdGEgPSB0aGlzLmdldEVtcHR5VHJhbnNmb3JtRGF0YSh0cmFuc2Zvcm1Ob2RlSWQpXHJcbiAgICAgIHRyYW5zZm9ybURhdGEudW5pdHMgPSBpbnN0YW5jZU9iai51bml0cyBhcyBzdHJpbmdcclxuICAgICAgdHJhbnNmb3JtRGF0YS5tYXRyaXggPSBpbnN0YW5jZU9iai50cmFuc2Zvcm1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyYW5zZm9ybURhdGEgPSBpbnN0YW5jZU9iai50cmFuc2Zvcm1cclxuICAgICAgICA/IGluc3RhbmNlT2JqLnRyYW5zZm9ybVxyXG4gICAgICAgIDogdGhpcy5nZXRFbXB0eVRyYW5zZm9ybURhdGEodHJhbnNmb3JtTm9kZUlkKVxyXG4gICAgfVxyXG4gICAgY29uc3QgdHJhbnNmb3JtTm9kZSA9IHRoaXMudHJlZS5wYXJzZSh7XHJcbiAgICAgIGlkOiB0cmFuc2Zvcm1Ob2RlSWQsXHJcbiAgICAgIHJhdzogdHJhbnNmb3JtRGF0YSxcclxuICAgICAgYXRvbWljOiBmYWxzZSxcclxuICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hZGROb2RlKHRyYW5zZm9ybU5vZGUsIGluc3RhbmNlTm9kZSlcclxuXHJcbiAgICBjb25zdCBjaGlsZE5vZGU6IFRyZWVOb2RlID0gdGhpcy50cmVlLnBhcnNlKHtcclxuICAgICAgaWQ6IHRoaXMuZ2V0Q29tcG91bmRJZChkZWZHZW9tZXRyeS5pZCwgdGhpcy5pbnN0YW5jZUNvdW50ZXIrKyksXHJcbiAgICAgIHJhdzogZGVmR2VvbWV0cnksXHJcbiAgICAgIGF0b21pYzogZmFsc2UsXHJcbiAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgaW5zdGFuY2VkOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hZGROb2RlKGNoaWxkTm9kZSwgdHJhbnNmb3JtTm9kZSlcclxuXHJcbiAgICBhd2FpdCB0aGlzLmRpc3BsYXlhYmxlTG9va3VwKGRlZkdlb21ldHJ5LCBjaGlsZE5vZGUsIHRydWUpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHBhcnNlSW5zdGFuY2VFbGVtZW50KFxyXG4gICAgX2luc3RhbmNlT2JqOiBTcGVja2xlT2JqZWN0LFxyXG4gICAgZWxlbWVudE9iajogU3BlY2tsZU9iamVjdCxcclxuICAgIGluc3RhbmNlTm9kZTogVHJlZU5vZGVcclxuICApIHtcclxuICAgIGNvbnN0IGNoaWxkTm9kZTogVHJlZU5vZGUgPSB0aGlzLnRyZWUucGFyc2Uoe1xyXG4gICAgICBpZDogdGhpcy5nZXROb2RlSWQoZWxlbWVudE9iaiksXHJcbiAgICAgIHJhdzogZWxlbWVudE9iaixcclxuICAgICAgYXRvbWljOiBmYWxzZSxcclxuICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICB9KVxyXG4gICAgdGhpcy5hZGROb2RlKGNoaWxkTm9kZSwgaW5zdGFuY2VOb2RlKVxyXG4gICAgYXdhaXQgdGhpcy5kaXNwbGF5YWJsZUxvb2t1cChlbGVtZW50T2JqLCBjaGlsZE5vZGUsIGZhbHNlKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBCbG9ja0luc3RhbmNlVG9Ob2RlKG9iajogU3BlY2tsZU9iamVjdCwgbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIGNvbnN0IGRlZmluaXRpb246IFNwZWNrbGVPYmplY3QgPSBhd2FpdCB0aGlzLnJlc29sdmVSZWZlcmVuY2UoXHJcbiAgICAgIHRoaXMuZ2V0QmxvY2tEZWZpbml0aW9uKG9iaikgYXMgU3BlY2tsZU9iamVjdFxyXG4gICAgKVxyXG4gICAgbm9kZS5tb2RlbC5yYXcuZGVmaW5pdGlvbiA9IGRlZmluaXRpb25cclxuICAgIGZvciAoY29uc3QgZGVmIG9mIHRoaXMuZ2V0QmxvY2tEZWZpbml0aW9uR2VvbWV0cnkoZGVmaW5pdGlvbikgYXMgU3BlY2tsZU9iamVjdFtdKSB7XHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShkZWYpXHJcbiAgICAgIGF3YWl0IHRoaXMucGFyc2VJbnN0YW5jZURlZmluaXRpb25HZW9tZXRyeShvYmosIHJlZiwgbm9kZSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuZ2V0RWxlbWVudHNWYWx1ZShvYmopXHJcbiAgICBpZiAoZWxlbWVudHMpIHtcclxuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzIGFzIFNwZWNrbGVPYmplY3RbXSkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRPYmogPSBhd2FpdCB0aGlzLnJlc29sdmVSZWZlcmVuY2UoZWxlbWVudClcclxuICAgICAgICB2b2lkIHRoaXMucGFyc2VJbnN0YW5jZUVsZW1lbnQob2JqLCBlbGVtZW50T2JqLCBub2RlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIFJldml0SW5zdGFuY2VUb05vZGUob2JqOiBTcGVja2xlT2JqZWN0LCBub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShvYmouZGVmaW5pdGlvbiBhcyBTcGVja2xlT2JqZWN0KVxyXG4gICAgbm9kZS5tb2RlbC5yYXcuZGVmaW5pdGlvbiA9IGRlZmluaXRpb25cclxuICAgIGF3YWl0IHRoaXMucGFyc2VJbnN0YW5jZURlZmluaXRpb25HZW9tZXRyeShvYmosIGRlZmluaXRpb24sIG5vZGUpXHJcblxyXG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmdldEVsZW1lbnRzVmFsdWUob2JqKVxyXG4gICAgaWYgKGVsZW1lbnRzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyBhcyBTcGVja2xlT2JqZWN0W10pIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50T2JqID0gYXdhaXQgdGhpcy5yZXNvbHZlUmVmZXJlbmNlKGVsZW1lbnQpXHJcbiAgICAgICAgdm9pZCB0aGlzLnBhcnNlSW5zdGFuY2VFbGVtZW50KG9iaiwgZWxlbWVudE9iaiwgbm9kZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBJbnN0YW5jZURlZmluaXRpb25Qcm94eVRvTm9kZShvYmo6IFNwZWNrbGVPYmplY3QsIG5vZGU6IFRyZWVOb2RlKSB7XHJcbiAgICBpZiAoIW9iai5hcHBsaWNhdGlvbklkKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGBJbnN0YW5jZSBEZWZpbml0aW9uIFByb3h5ICR7b2JqLmlkfSBoYXMgbm8gYXBwbGljYXRpb25JZGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5pbnN0YW5jZURlZmluaXRpb25Mb29rdXBUYWJsZVtvYmouYXBwbGljYXRpb25JZF0gPSBub2RlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIEluc3RhbmNlUHJveHlUb05vZGUob2JqOiBTcGVja2xlT2JqZWN0LCBub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgaWYgKCFvYmouYXBwbGljYXRpb25JZCkge1xyXG4gICAgICBMb2dnZXIud2FybihgSW5zdGFuY2UgcHJveHkgJHtvYmouaWR9IGhhcyBubyBhcHBsaWNhdGlvbiBpZGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5pbnN0YW5jZVByb3hpZXNbb2JqLmFwcGxpY2F0aW9uSWRdID0gbm9kZVxyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIFJlbmRlck1hdGVyaWFsUHJveHlUb05vZGUob2JqOiBTcGVja2xlT2JqZWN0LCBfbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIGlmICghb2JqLnZhbHVlKSB7XHJcbiAgICAgIExvZ2dlci5lcnJvcihgUmVuZGVyIE1hdGVyaWFsIFByb3h5ICR7b2JqLmlkfSBoYXMgbm8gcmVuZGVyIG1hdGVyaWFsIHZhbHVlIWApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKCFvYmoub2JqZWN0cyB8fCAhQXJyYXkuaXNBcnJheShvYmoub2JqZWN0cykgfHwgb2JqLm9iamVjdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGBSZW5kZXIgTWF0ZXJpYWwgUHJveHkgJHtvYmouaWR9IGhhcyBubyB0YXJnZXQgb2JqZWN0cyFgKVxyXG4gICAgfVxyXG4gICAgY29uc3QgcmVuZGVyTWF0ZXJpYWxWYWx1ZSA9IG9iai52YWx1ZSBhcyBTcGVja2xlT2JqZWN0XHJcbiAgICBjb25zdCB0YXJnZXRPYmplY3RzID0gb2JqLm9iamVjdHMgYXMgW11cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGFyZ2V0T2JqZWN0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBpZiAodGhpcy5yZW5kZXJNYXRlcmlhbE1hcFt0YXJnZXRPYmplY3RzW2tdXSkge1xyXG4gICAgICAgIExvZ2dlci53YXJuKGBPdmVyd3JpdHRpbmcgcmVuZGVyTWF0ZXJpYWwgJHt0YXJnZXRPYmplY3RzW2tdfWApXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXJNYXRlcmlhbE1hcFt0YXJnZXRPYmplY3RzW2tdXSA9IHJlbmRlck1hdGVyaWFsVmFsdWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgQ29sb3JQcm94eVRvTm9kZShvYmo6IFNwZWNrbGVPYmplY3QsIF9ub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgaWYgKCFvYmoudmFsdWUgfHwgdHlwZW9mIG9iai52YWx1ZSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgTG9nZ2VyLmVycm9yKGBDb2xvciAke29iai5pZH0gaGFzIG5vIHZhbHVlLCBvciB2YWx1ZSBpcyBub3QgYSBudW1iZXIhYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoIW9iai5vYmplY3RzIHx8ICFBcnJheS5pc0FycmF5KG9iai5vYmplY3RzKSB8fCBvYmoub2JqZWN0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgTG9nZ2VyLndhcm4oYENvbG9yIFByb3h5ICR7b2JqLmlkfSBoYXMgbm8gdGFyZ2V0IG9iamVjdHMhYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCB0YXJnZXRPYmplY3RzID0gb2JqLm9iamVjdHMgYXMgW11cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGFyZ2V0T2JqZWN0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICBpZiAodGhpcy5jb2xvck1hcFt0YXJnZXRPYmplY3RzW2tdXSkge1xyXG4gICAgICAgIExvZ2dlci53YXJuKGBPdmVyd3JpdHRpbmcgY29sb3IgJHt0YXJnZXRPYmplY3RzW2tdfWApXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb2xvck1hcFt0YXJnZXRPYmplY3RzW2tdXSA9IG9ialxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJbnN0YW5jZVByb3h5RGVmaW5pdGlvbklkKG9iajogU3BlY2tsZU9iamVjdCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKG9iai5EZWZpbml0aW9uSWQgfHwgb2JqLmRlZmluaXRpb25JZCkgYXMgc3RyaW5nXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEluc3RhbmNlUHJveHlUcmFuc2Zvcm0ob2JqOiBTcGVja2xlT2JqZWN0KTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICBpZiAoIShvYmoudHJhbnNmb3JtIHx8IG9iai5UcmFuc2Zvcm0pKSB7XHJcbiAgICAgIHJldHVybiBuZXcgTWF0cml4NCgpLnRvQXJyYXkoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChvYmoudHJhbnNmb3JtIHx8IG9iai5UcmFuc2Zvcm0pIGFzIEFycmF5PG51bWJlcj5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SW5zdGFuY2VQcm94eURlZmluaXRpb25PYmplY3RzKG9iajogU3BlY2tsZU9iamVjdCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIChvYmouT2JqZWN0cyB8fCBvYmoub2JqZWN0cykgYXMgQXJyYXk8c3RyaW5nPlxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVUcmFuc2Zvcm1Ob2RlKG9iajogU3BlY2tsZU9iamVjdCkge1xyXG4gICAgY29uc3QgdHJhbnNmb3JtTm9kZUlkID0gTWF0aFV0aWxzLmdlbmVyYXRlVVVJRCgpXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1EYXRhID0gdGhpcy5nZXRFbXB0eVRyYW5zZm9ybURhdGEodHJhbnNmb3JtTm9kZUlkKVxyXG4gICAgdHJhbnNmb3JtRGF0YS51bml0cyA9IG9iai51bml0cyBhcyBzdHJpbmdcclxuICAgIHRyYW5zZm9ybURhdGEubWF0cml4ID0gdGhpcy5nZXRJbnN0YW5jZVByb3h5VHJhbnNmb3JtKG9iailcclxuICAgIHJldHVybiB0aGlzLnRyZWUucGFyc2Uoe1xyXG4gICAgICBpZDogdHJhbnNmb3JtTm9kZUlkLFxyXG4gICAgICByYXc6IHRyYW5zZm9ybURhdGEsXHJcbiAgICAgIGF0b21pYzogZmFsc2UsXHJcbiAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgQ29udmVydEluc3RhbmNlUHJveHlUb05vZGUob2JqOiBTcGVja2xlT2JqZWN0LCBub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgY29uc3QgZGVmaW5pdGlvbklkID0gdGhpcy5nZXRJbnN0YW5jZVByb3h5RGVmaW5pdGlvbklkKG9iailcclxuICAgIGlmICghZGVmaW5pdGlvbklkKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGBJbnN0YW5jZSBQcm94eSAke29iai5pZH0gaGFzIG5vIGRlZmluaXRpb25JZGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuaW5zdGFuY2VEZWZpbml0aW9uTG9va3VwVGFibGVbZGVmaW5pdGlvbklkXVxyXG4gICAgY29uc3QgdHJhbnNmb3JtTm9kZSA9IHRoaXMuY3JlYXRlVHJhbnNmb3JtTm9kZShvYmopXHJcblxyXG4gICAgdGhpcy5hZGROb2RlKHRyYW5zZm9ybU5vZGUsIG5vZGUpXHJcbiAgICBjb25zdCBvYmplY3RBcHBsaWNhdGlvbklkcyA9IHRoaXMuZ2V0SW5zdGFuY2VQcm94eURlZmluaXRpb25PYmplY3RzKFxyXG4gICAgICBkZWZpbml0aW9uLm1vZGVsLnJhd1xyXG4gICAgKVxyXG4gICAgZm9yIChjb25zdCBvYmplY3RBcHBsaWNhdGlvbklkIG9mIG9iamVjdEFwcGxpY2F0aW9uSWRzKSB7XHJcbiAgICAgIGNvbnN0IHNwZWNrbGVEYXRhID0gdGhpcy5pbnN0YW5jZWRPYmplY3RzTG9va3VwVGFibGVbb2JqZWN0QXBwbGljYXRpb25JZF1cclxuICAgICAgLy8gTk9URTogc2VlIGh0dHBzOi8vbGluZWFyLmFwcC9zcGVja2xlL2lzc3VlL0NOWC0xMTUvdmlld2VyLWhhbmRsZS1ncmFjZWZ1bGx5LWluc3RhbmNlcy13aXRoLWVsZW1lbnRzLXRoYXQtZmFpbGVkLXRvXHJcbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHZpZXdlciBub3QgbG9hZGluZyBhbnl0aGluZyBpZiBhIGluc3RhbmNlIGNvbXBvbmVudCBpcyBtaXNzaW5nIGZyb20gaXRzIGRlZmludGlvbi4gVGhpcyBpcyBhIGxpa2VseSBzY2VuYXJpbyBmcm9tIGNvbm5lY3RvcnM7IGV2ZW4gdGhvdWdoIHdlJ3JlIGd1YXJkaW5nIGFnYWluc3QgaXQgd2UnbGwgbmV2ZXIgYmUgYWJsZSB0byBmdWxseSBlbmZvcmNlIGl0LlxyXG4gICAgICBpZiAoIXNwZWNrbGVEYXRhKSB7XHJcbiAgICAgICAgTG9nZ2VyLndhcm4oXHJcbiAgICAgICAgICBgT2JqZWN0ICR7b2JqZWN0QXBwbGljYXRpb25JZH0gaXMgaXMgbWlzc2luZyBmcm9tIGRlZmluaXRpb24gJHtkZWZpbml0aW9uSWR9LiBTb21lb25lIHByb2JhYmx5IHNlbnQgYW4gaW5zdGFuY2UgY29udGFpbmluZyB1bnNvcHBydGVkIGVsZW1lbnRzIC0gdGhpcyBpcyBvaywgZG8gbm90IHBhbmljLmBcclxuICAgICAgICApXHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbnN0YW5jZWROb2RlID0gdGhpcy50cmVlLnBhcnNlKHtcclxuICAgICAgICBpZDogdGhpcy5nZXRDb21wb3VuZElkKHNwZWNrbGVEYXRhLmlkLCB0aGlzLmluc3RhbmNlQ291bnRlcisrKSxcclxuICAgICAgICByYXc6IHNwZWNrbGVEYXRhLFxyXG4gICAgICAgIGF0b21pYzogZmFsc2UsXHJcbiAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgIGluc3RhbmNlZDogdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmFkZE5vZGUoaW5zdGFuY2VkTm9kZSwgdHJhbnNmb3JtTm9kZSlcclxuICAgICAgLyoqIEFsZXggMTYuMDkuMjAyNTogV2UncmUgYWRkaW5nIHN1cHBvcnQgZm9yIGluc3RhbmNlIHByb3hpZXMgdGhhdCBhcmUgbm90IGRpcmVjdCBkaXNwbGF5YWJsZSB0eXBlcyAqL1xyXG4gICAgICAvLyBhd2FpdCB0aGlzLmNvbnZlcnRUb05vZGUoc3BlY2tsZURhdGEsIGluc3RhbmNlZE5vZGUpXHJcbiAgICAgIGF3YWl0IHRoaXMuZGlzcGxheWFibGVMb29rdXAoc3BlY2tsZURhdGEsIGluc3RhbmNlZE5vZGUsIHRydWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY29udmVydEluc3RhbmNlcygpIHtcclxuICAgIC8qKiB1aCwgb2ggKi9cclxuICAgIHRoaXMuTm9kZUNvbnZlcnRlck1hcHBpbmcuSW5zdGFuY2VQcm94eSA9IHRoaXMuQ29udmVydEluc3RhbmNlUHJveHlUb05vZGUuYmluZCh0aGlzKVxyXG5cclxuICAgIC8qKiBGaW5kIHRoZSBub2RlcyB0aGF0IG5lZWQgdG8gYmUgJ2NvbnN1bWVkJyAqL1xyXG4gICAgY29uc3QgY29uc3VtZUFwcGxpY2F0aW9uSWRzOiB7IFtpZDogc3RyaW5nXTogVHJlZU5vZGUgfCBudWxsIH0gPSB7fVxyXG4gICAgbGV0IGNvbnN1bWVBcHBsaWNhdGlvbklkc0NvdW50ID0gMFxyXG4gICAgZm9yIChjb25zdCBrIGluIHRoaXMuaW5zdGFuY2VEZWZpbml0aW9uTG9va3VwVGFibGUpIHtcclxuICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuaW5zdGFuY2VEZWZpbml0aW9uTG9va3VwVGFibGVba11cclxuICAgICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuZ2V0SW5zdGFuY2VQcm94eURlZmluaXRpb25PYmplY3RzKGRlZmluaXRpb24ubW9kZWwucmF3KVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdW1lQXBwbGljYXRpb25JZHNbb2JqZWN0c1tpXS50b1N0cmluZygpXSA9IG51bGxcclxuICAgICAgICBjb25zdW1lQXBwbGljYXRpb25JZHNDb3VudCsrXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogRG8gYSBzaG9ydCBhc3luYyB3YWxrICovXHJcbiAgICBhd2FpdCB0aGlzLnRyZWUud2Fsa0FzeW5jKChub2RlOiBUcmVlTm9kZSkgPT4ge1xyXG4gICAgICBpZiAoIW5vZGUubW9kZWwucmF3LmFwcGxpY2F0aW9uSWQpIHJldHVybiB0cnVlXHJcbiAgICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBub2RlLm1vZGVsLnJhdy5hcHBsaWNhdGlvbklkLnRvU3RyaW5nKClcclxuICAgICAgaWYgKGNvbnN1bWVBcHBsaWNhdGlvbklkc1thcHBsaWNhdGlvbklkXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3VtZUFwcGxpY2F0aW9uSWRzW2FwcGxpY2F0aW9uSWRdID0gbm9kZVxyXG4gICAgICAgIGNvbnN1bWVBcHBsaWNhdGlvbklkc0NvdW50LS1cclxuICAgICAgfVxyXG4gICAgICAvKiogQnJlYWsgb3V0IHdoZW4gYWxsIGFwcGxpY2F0aW9uSWRzIGFyZSBhY2NvdW50ZWQgZm9yKi9cclxuICAgICAgaWYgKGNvbnN1bWVBcHBsaWNhdGlvbklkc0NvdW50ID09PSAwKSByZXR1cm4gZmFsc2VcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0sIHRoaXMuc3VidHJlZSlcclxuXHJcbiAgICAvKiogQ29uc3VtZSB0aGVtICovXHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gY29uc3VtZUFwcGxpY2F0aW9uSWRzKSB7XHJcbiAgICAgIGNvbnN0IG9iamVjdE5vZGUgPSBjb25zdW1lQXBwbGljYXRpb25JZHNba11cclxuICAgICAgaWYgKCFvYmplY3ROb2RlKSB7XHJcbiAgICAgICAgTG9nZ2VyLmVycm9yKGBDb25zdW1hYmxlIGFwcGxpY2F0aW9uSWQgJHtrfSBjb3VsZCBub3QgYmUgZm91bmRgKVxyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKiBTdG9yZSB0aGUgc3BlY2tsZSBvYmplY3QgZGF0YSAqL1xyXG4gICAgICB0aGlzLmluc3RhbmNlZE9iamVjdHNMb29rdXBUYWJsZVtrXSA9IG9iamVjdE5vZGUubW9kZWwucmF3XHJcbiAgICAgIC8qKiBUaGlzIHBhcnQgaXMgY2F0ZXJpbmcgdG8gY29sb3IgcHJveGllcyBzb3VyY2UgYW5kXHJcbiAgICAgICAqICBJIGhhdGUgdGhpcyB0aGUgbW9zdFxyXG4gICAgICAgKiAgV2Ugc3RvcmUgdGhlIGRlZmluaXRpb24gZ2VvbWV0cnkgKHdoaWNoIGNhbiBiZSBhbiBpbnN0YW5jZSBpZiBuZXN0ZWQpIHBhcmVudCBsYXllciBjb2xvclxyXG4gICAgICAgKiAgV2UgZG8gdGhhdCBiZWNhdXNlIHRoZXNlIGdldCBjb25zdW1lZCwgc28gdGhleSBjYW4gbm8gbG9uZ2VyIGJlIGFjY2Vzc2VkIHZpYSB0aGUgV29ybGRUcmVlXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAoIXRoaXMuaW5zdGFuY2VQcm94aWVzW2tdKSB7XHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZWRPYmplY3RzTG9va3VwVGFibGVba10ucGFyZW50TGF5ZXJBcHBsaWNhdGlvbklkID1cclxuICAgICAgICAgIG9iamVjdE5vZGUucGFyZW50Lm1vZGVsLnJhdy5hcHBsaWNhdGlvbklkXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbklkID0gdGhpcy5pbnN0YW5jZVByb3hpZXNba10ubW9kZWwucmF3LmRlZmluaXRpb25JZFxyXG4gICAgICAgIGNvbnN0IHByb3hpZXMgPSBPYmplY3QudmFsdWVzKHRoaXMuaW5zdGFuY2VQcm94aWVzKVxyXG4gICAgICAgIHByb3hpZXMuZm9yRWFjaCgodmFsdWU6IFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUubW9kZWwucmF3LmRlZmluaXRpb25JZCA9PT0gZGVmaW5pdGlvbklkKSB7XHJcbiAgICAgICAgICAgIHZhbHVlLm1vZGVsLnJhdy5wYXJlbnRMYXllckFwcGxpY2F0aW9uSWQgPVxyXG4gICAgICAgICAgICAgIHZhbHVlLnBhcmVudC5tb2RlbC5yYXcuYXBwbGljYXRpb25JZFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgLyoqIFJlbW92ZSB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgbGlzdCAoaWYgbmVlZGVkKSAqL1xyXG4gICAgICBkZWxldGUgdGhpcy5pbnN0YW5jZVByb3hpZXNba11cclxuICAgICAgLyoqIFJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSB3b3JsZCB0cmVlICovXHJcbiAgICAgIHRoaXMudHJlZS5yZW1vdmVOb2RlKG9iamVjdE5vZGUsIHRydWUpXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvdW50ID0gMFxyXG4gICAgLyoqIFJlbWFpbmluZyBpbnN0YW5jZSBwcm94aWVzIHNob3VsZCBhbGwgYmUgdmFsaWQgKi9cclxuICAgIGZvciAoY29uc3QgayBpbiB0aGlzLmluc3RhbmNlUHJveGllcykge1xyXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5pbnN0YW5jZVByb3hpZXNba11cclxuICAgICAgLyoqIENyZWF0ZSB0aGUgZmluYWwgaW5zdGFuY2VzICovXHJcbiAgICAgIGF3YWl0IHRoaXMuY29udmVydFRvTm9kZShub2RlLm1vZGVsLnJhdywgbm9kZSlcclxuICAgICAgY291bnQrK1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFwcGx5TWF0ZXJpYWxzKCkge1xyXG4gICAgY29uc3QgcmVuZGVyTWF0ZXJpYWxDb3VudCA9IE9iamVjdC5rZXlzKHRoaXMucmVuZGVyTWF0ZXJpYWxNYXApLmxlbmd0aFxyXG4gICAgY29uc3QgY29sb3JDb3VudCA9IE9iamVjdC5rZXlzKHRoaXMuY29sb3JNYXApLmxlbmd0aFxyXG4gICAgaWYgKHJlbmRlck1hdGVyaWFsQ291bnQgPT09IDAgJiYgY29sb3JDb3VudCA9PT0gMCkgcmV0dXJuXHJcblxyXG4gICAgLyoqIERvIGEgc2hvcnQgYXN5bmMgd2FsayAqL1xyXG4gICAgYXdhaXQgdGhpcy50cmVlLndhbGtBc3luYygobm9kZTogVHJlZU5vZGUpID0+IHtcclxuICAgICAgaWYgKCFub2RlLm1vZGVsLnJhdy5hcHBsaWNhdGlvbklkKSByZXR1cm4gdHJ1ZVxyXG4gICAgICBjb25zdCBhcHBsaWNhdGlvbklkID0gbm9kZS5tb2RlbC5yYXcuYXBwbGljYXRpb25JZC50b1N0cmluZygpXHJcbiAgICAgIC8qKiBXaXRoIGluc3RhbmNlcywgcmVuZGVyIG1hdGVyaWFscyBwcm94eSBjYW4gcmVmZXJlbmNlIHBhcmVudHMgb2Ygb3JpZ2luYWwgaW5zdGFuY2VkIGRhdGEuXHJcbiAgICAgICAqICBIb3dldmVyLCBhZnRlciB0aGV5IGFyZSBpbnN0YW5jZWQsIHRoZXkgc29tZXRpbWVzIChvciBtYXliZSBvZnRlbikgZG8gbm90IGhhdmUgdGhlIHNhbWVcclxuICAgICAgICogIHBhcmVudHMgYW55bW9yZSwgc28gdGhleSBjYW4ndCBpbmhlcml0IHRoZSByZW5kZXIgbWF0ZXJpYWxzIG5hdHVyYWxseS5cclxuICAgICAgICpcclxuICAgICAgICogIFRoYXQncyB3aHkgd2UgY2hlY2sgdGhleSBwYXJlbnQgbGF5ZXIgYXBwbGljYXRpb24gaWQgYW5kIHdyaXRlIHRoZSByZW5kZXIgbWF0ZXJpYWwgZGF0YVxyXG4gICAgICAgKiAgaW50byB0aGUgbm9kZSB0aGVtc2VsdmVzLCBzb3J0IG9mIGxpa2UgJ2Jha2luZycgdGhlbSBpbi5cclxuICAgICAgICpcclxuICAgICAgICogIE9uZSBzaWRlLWVmZmVjdCBpcyB0aGF0IHdlIGNhbiBubyBsb25nZXIgYXNzdW1lIHRoYXQgZWFjaCBwcm94eSBpcyBvbmx5IGdldHRpbmcgYXBwbGllZCBvbmNlXHJcbiAgICAgICAqICBzbyB3ZSBjYW5ub3QgZWFybHkgYnJlYWsgb3V0IG9mIHRoZSB3YWxrXHJcbiAgICAgICAqL1xyXG4gICAgICBjb25zdCBwYXJlbnRBcHBsaWNhdGlvbklkID0gbm9kZS5tb2RlbC5yYXcucGFyZW50TGF5ZXJBcHBsaWNhdGlvbklkXHJcblxyXG4gICAgICBpZiAodGhpcy5yZW5kZXJNYXRlcmlhbE1hcFthcHBsaWNhdGlvbklkXSkge1xyXG4gICAgICAgIG5vZGUubW9kZWwucmF3LnJlbmRlck1hdGVyaWFsID0gdGhpcy5yZW5kZXJNYXRlcmlhbE1hcFthcHBsaWNhdGlvbklkXVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucmVuZGVyTWF0ZXJpYWxNYXBbcGFyZW50QXBwbGljYXRpb25JZF0pIHtcclxuICAgICAgICBub2RlLm1vZGVsLnJhdy5yZW5kZXJNYXRlcmlhbCA9IHRoaXMucmVuZGVyTWF0ZXJpYWxNYXBbcGFyZW50QXBwbGljYXRpb25JZF1cclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqIEZvciBub24taW5zdGFuY2VkIG9iamVjdHMganVzdCB1c2UgdGhlIGNvbG9yIGlmIGFueSBpcyBwcmVzZW50ICovXHJcbiAgICAgIGlmICh0aGlzLmNvbG9yTWFwW2FwcGxpY2F0aW9uSWRdICE9PSB1bmRlZmluZWQgJiYgIW5vZGUubW9kZWwuaW5zdGFuY2VkKSB7XHJcbiAgICAgICAgbm9kZS5tb2RlbC5jb2xvciA9IHRoaXMuY29sb3JNYXBbYXBwbGljYXRpb25JZF0udmFsdWVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSwgdGhpcy5zdWJ0cmVlKVxyXG5cclxuICAgIC8qKiBGb3IgaW5zdGFuY2VzLCB3ZSBuZWVkIHNvbWUgYWRkaXRpb25hbCBwYXJzaW5nICovXHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5pbnN0YW5jZVByb3hpZXMpIHtcclxuICAgICAgLyoqIEZpbmQgdGhlIG1heERlcHRoLiBUaGlzIGlzIHdlaXJkIGJlY2F1c2UgdGhlIEluc3RhbmNlUHJveHkncyBgbWF4RGVwdGhgIGlzIG1vcmVcclxuICAgICAgICogIGxpa2UgYW4gYGludmVyc2VNYXhEZXB0aGBcclxuICAgICAgICovXHJcbiAgICAgIGNvbnN0IG1heERlcHRoID0gdGhpcy50cmVlXHJcbiAgICAgICAgLmZpbmRBbGwoXHJcbiAgICAgICAgICAobm9kZTogVHJlZU5vZGUpID0+XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U3BlY2tsZVR5cGUobm9kZS5tb2RlbC5yYXcpID09PSBTcGVja2xlVHlwZS5JbnN0YW5jZVByb3h5LFxyXG4gICAgICAgICAgdGhpcy5pbnN0YW5jZVByb3hpZXNba11cclxuICAgICAgICApXHJcbiAgICAgICAgLnJlZHVjZSgocHJldiwgY3VycmVudCkgPT5cclxuICAgICAgICAgIHByZXYgJiYgcHJldi5tb2RlbC5yYXcubWF4RGVwdGggPiBjdXJyZW50Lm1vZGVsLnJhdy5tYXhEZXB0aCA/IHByZXYgOiBjdXJyZW50XHJcbiAgICAgICAgKS5tb2RlbC5yYXcubWF4RGVwdGhcclxuICAgICAgLyoqIEdldCBhbGwgdGhlIGxlYWYgSW5zdGFuY2VQcm94eSBub2Rlcy4gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIGluc3RhbmNlc1xyXG4gICAgICAgKiAgYnUgd2Ugd2FudCB0aGUgbGVhZiBvbmVzXHJcbiAgICAgICAqL1xyXG4gICAgICBjb25zdCBpbnN0YW5jZVByb3h5Tm9kZXMgPSB0aGlzLnRyZWUuZmluZEFsbChcclxuICAgICAgICAobm9kZTogVHJlZU5vZGUpID0+IG5vZGUubW9kZWwucmF3Lm1heERlcHRoID09PSBtYXhEZXB0aCxcclxuICAgICAgICB0aGlzLmluc3RhbmNlUHJveGllc1trXVxyXG4gICAgICApXHJcbiAgICAgIC8qKiBHbyBvdmVyIHRoZW0gKi9cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnN0YW5jZVByb3h5Tm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvKiogR2V0IHRoZSBjb2xvciBvZiB0aGUgaW5zdGFuY2UuXHJcbiAgICAgICAgICogIE9yIGl0J3MgZGVmaW5pdGlvbiBnZW9tZXRyeSdzIGxheWVyIGNvbG9yICAqL1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlQ29sb3IgPVxyXG4gICAgICAgICAgdGhpcy5jb2xvck1hcFtpbnN0YW5jZVByb3h5Tm9kZXNbaV0ubW9kZWwucmF3LmFwcGxpY2F0aW9uSWRdIHx8XHJcbiAgICAgICAgICB0aGlzLmNvbG9yTWFwW2luc3RhbmNlUHJveHlOb2Rlc1tpXS5tb2RlbC5yYXcucGFyZW50TGF5ZXJBcHBsaWNhdGlvbklkXVxyXG4gICAgICAgIC8qKiBHZXQgdGhlIGdlb21ldHJ5IG5vZGVzICovXHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VkTm9kZXMgPSBpbnN0YW5jZVByb3h5Tm9kZXNbaV0uY2hpbGRyZW5bMF0uY2hpbGRyZW5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluc3RhbmNlZE5vZGVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAvKiogR2V0IHRoZSBnZW9tZXRyeSBkZWZpbml0aW9uJ3MgY29sb3JcclxuICAgICAgICAgICAqICBJbiB0aGUgdmlld2VyIHRoZSBnZW9tZXRyeSBkZWZpbml0aW9uIGlzIHN0b3JlZCBhbmQgc2hhcmVkIGFjcm9zcyBwb3RlbnRpYWwgaW5zdGFuY2VzXHJcbiAgICAgICAgICAgKiAgYXMgdGhlIHNwZWNrbGUgb2JqZWN0IGluIGByYXdgXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGNvbnN0IGdlb21ldHJ5Q29sb3IgPSB0aGlzLmNvbG9yTWFwW2luc3RhbmNlZE5vZGVzW2pdLm1vZGVsLnJhdy5hcHBsaWNhdGlvbklkXVxyXG4gICAgICAgICAgLyoqIEdldCB0aGUgZGVmaW5pdGlvbiBnZW9tZXRyeSdzIGxheWVyIGNvbG9yICovXHJcbiAgICAgICAgICBjb25zdCBnZW9tZXRyeUxheWVyQ29sb3IgPVxyXG4gICAgICAgICAgICB0aGlzLmNvbG9yTWFwW2luc3RhbmNlZE5vZGVzW2pdLm1vZGVsLnJhdy5wYXJlbnRMYXllckFwcGxpY2F0aW9uSWRdXHJcbiAgICAgICAgICAvKiogSWYgZGVmaW5pdGlvbiBnZW9tZXRyeSBoYXMgbm8gY29sb3IsIHVzZSBpdCdzIGxheWVyIGNvbG9yICovXHJcbiAgICAgICAgICBpZiAoIWdlb21ldHJ5Q29sb3IpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2VkTm9kZXNbal0ubW9kZWwuY29sb3IgPSBnZW9tZXRyeUxheWVyQ29sb3I/LnZhbHVlXHJcbiAgICAgICAgICAgIC8qKiBJZiBkZWZpbml0aW9uIGdlb21ldHJ5IGNvbG9yIHNvdXJjZSBpcyBvYmplY3Qgb3IgbGF5ZXIgdXNlIHRoZSBkZWZpbml0aW9uJ3MgY29sb3IgKi9cclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGdlb21ldHJ5Q29sb3Iuc291cmNlID09PSAnb2JqZWN0JyB8fFxyXG4gICAgICAgICAgICBnZW9tZXRyeUNvbG9yLnNvdXJjZSA9PT0gJ2xheWVyJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlZE5vZGVzW2pdLm1vZGVsLmNvbG9yID0gZ2VvbWV0cnlDb2xvci52YWx1ZVxyXG4gICAgICAgICAgICAvKiogSWYgZGVmaW5pdGlvbiBnZW9tZXRyeSBjb2xvciBzb3VyY2UgaXMgYmxvY2ssIHdlIG5lZWQgc29tZSBleHRyYSBzdHVmZiAqL1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChnZW9tZXRyeUNvbG9yLnNvdXJjZSA9PT0gJ2Jsb2NrJykge1xyXG4gICAgICAgICAgICAvKiogSWYgdGhlcmUgaXMgYW4gY29sb3IgZm9yIHRoZSBpbnN0YW5jZSBhbmQgdGhlIHNvdXJjZSBpcyBvYmplY3QganVzdCB1c2UgaXQgKi9cclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlQ29sb3IpIHtcclxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VDb2xvci5zb3VyY2UgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZWROb2Rlc1tqXS5tb2RlbC5jb2xvciA9IGluc3RhbmNlQ29sb3IudmFsdWVcclxuICAgICAgICAgICAgICAgIC8qKiBJZiB0aGVyZSBpcyBhIGNvbG9yIGZvciB0aGUgaW5zdGFuY2UgYW5kIHRoZSBzb3VyY2UgaXMgYmxvY2ssIHNlYXJjaCB1cHdhcmRzICovXHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZUNvbG9yLnNvdXJjZSA9PT0gJ2Jsb2NrJykge1xyXG4gICAgICAgICAgICAgICAgLyoqIEdldCB0aGUgcGFyZW50IGluc3RhbmNlLCBvciBpdHNlbGYgaWYgaXQncyBub3QgbmVzdGVkICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZSA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJlZVxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRBbmNlc3RvcnMoaW5zdGFuY2VQcm94eU5vZGVzW2ldKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlOiBUcmVlTm9kZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTcGVja2xlVHlwZSh2YWx1ZS5tb2RlbC5yYXcpID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTcGVja2xlVHlwZS5JbnN0YW5jZVByb3h5XHJcbiAgICAgICAgICAgICAgICAgICAgKSB8fCBpbnN0YW5jZVByb3h5Tm9kZXNbaV1cclxuICAgICAgICAgICAgICAgIC8qKiBVc2UgdGhlIHBhcmVudCBpbnN0YW5jZSBvciBzZWxmIGluc3RhbmNlIGNvbG9yICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuY29sb3JNYXBbcGFyZW50SW5zdGFuY2UubW9kZWwucmF3LmFwcGxpY2F0aW9uSWRdXHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZWROb2Rlc1tqXS5tb2RlbC5jb2xvciA9IGNvbG9yPy52YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBQb2ludGNsb3VkVG9Ob2RlKG9iajogU3BlY2tsZU9iamVjdCwgbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgbm9kZS5tb2RlbC5yYXcucG9pbnRzID0gYXdhaXQgdGhpcy5kZWNodW5rKG9iai5wb2ludHMpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIG5vZGUubW9kZWwucmF3LmNvbG9ycyA9IGF3YWl0IHRoaXMuZGVjaHVuayhvYmouY29sb3JzKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBCcmVwVG9Ob2RlKG9iajogU3BlY2tsZU9iamVjdCwgbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghb2JqKSByZXR1cm5cclxuXHJcbiAgICAgIGxldCBkaXNwbGF5VmFsdWUgPSB0aGlzLmdldERpc3BsYXlWYWx1ZShvYmopXHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkaXNwbGF5VmFsdWUpKSBkaXNwbGF5VmFsdWUgPSBkaXNwbGF5VmFsdWVbMF0gLy9KdXN0IHRha2UgdGhlIGZpcnN0IGRpc3BsYXkgdmFsdWUgZm9yIG5vdyAobm90IGlkZWFsKVxyXG4gICAgICBpZiAoIWRpc3BsYXlWYWx1ZSkgcmV0dXJuXHJcblxyXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCB0aGlzLnJlc29sdmVSZWZlcmVuY2UoZGlzcGxheVZhbHVlIGFzIFNwZWNrbGVPYmplY3QpXHJcbiAgICAgIGNvbnN0IG5lc3RlZE5vZGU6IFRyZWVOb2RlID0gdGhpcy50cmVlLnBhcnNlKHtcclxuICAgICAgICBpZDogbm9kZS5tb2RlbC5pbnN0YW5jZWRcclxuICAgICAgICAgID8gdGhpcy5nZXRDb21wb3VuZElkKHJlZi5pZCwgdGhpcy5pbnN0YW5jZUNvdW50ZXIrKylcclxuICAgICAgICAgIDogdGhpcy5nZXROb2RlSWQocmVmKSxcclxuICAgICAgICByYXc6IHJlZixcclxuICAgICAgICBhdG9taWM6IGZhbHNlLFxyXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICAuLi4obm9kZS5tb2RlbC5pbnN0YW5jZWQgJiYgeyBpbnN0YW5jZWQ6IG5vZGUubW9kZWwuaW5zdGFuY2VkIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIGF3YWl0IHRoaXMuY29udmVydFRvTm9kZShyZWYsIG5lc3RlZE5vZGUpXHJcbiAgICAgIHRoaXMuYWRkTm9kZShuZXN0ZWROb2RlLCBub2RlKVxyXG5cclxuICAgICAgLy8gZGVsZXRlcyBrbm93biB1bm5lZWRlZCBmaWVsZHNcclxuICAgICAgZGVsZXRlIG9iai5FZGdlc1xyXG4gICAgICBkZWxldGUgb2JqLkZhY2VzXHJcbiAgICAgIGRlbGV0ZSBvYmouTG9vcHNcclxuICAgICAgZGVsZXRlIG9iai5Ucmltc1xyXG4gICAgICBkZWxldGUgb2JqLkN1cnZlMkRcclxuICAgICAgZGVsZXRlIG9iai5DdXJ2ZTNEXHJcbiAgICAgIGRlbGV0ZSBvYmouU3VyZmFjZXNcclxuICAgICAgZGVsZXRlIG9iai5WZXJ0aWNlc1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBMb2dnZXIud2FybihgRmFpbGVkIHRvIGNvbnZlcnQgYnJlcCBpZDogJHtvYmouaWR9YClcclxuICAgICAgdGhyb3cgZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBNZXNoVG9Ob2RlKG9iajogU3BlY2tsZU9iamVjdCwgbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIGlmICghb2JqKSByZXR1cm5cclxuICAgIGlmICghb2JqLnZlcnRpY2VzIHx8IChvYmoudmVydGljZXMgYXMgQXJyYXk8bnVtYmVyPikubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKFxyXG4gICAgICAgIGBPYmplY3QgaWQgJHtvYmouaWR9IG9mIHR5cGUgJHtvYmouc3BlY2tsZV90eXBlfSBoYXMgbm8gdmVydGV4IHBvc2l0aW9uIGRhdGEgYW5kIHdpbGwgYmUgaWdub3JlZGBcclxuICAgICAgKVxyXG4gICAgICBub2RlLm1vZGVsLnJhdy52ZXJ0aWNlcyA9IFtdXHJcbiAgICAgIG5vZGUubW9kZWwucmF3LmZhY2VzID0gW11cclxuICAgICAgbm9kZS5tb2RlbC5yYXcuY29sb3JzID0gW11cclxuICAgICAgbm9kZS5tb2RlbC5yYXcudmVydGV4Tm9ybWFscyA9IFtdXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYgKCFvYmouZmFjZXMgfHwgKG9iai5mYWNlcyBhcyBBcnJheTxudW1iZXI+KS5sZW5ndGggPT09IDApIHtcclxuICAgICAgTG9nZ2VyLndhcm4oXHJcbiAgICAgICAgYE9iamVjdCBpZCAke29iai5pZH0gb2YgdHlwZSAke29iai5zcGVja2xlX3R5cGV9IGhhcyBubyBmYWNlIGRhdGEgYW5kIHdpbGwgYmUgaWdub3JlZGBcclxuICAgICAgKVxyXG4gICAgICBub2RlLm1vZGVsLnJhdy52ZXJ0aWNlcyA9IFtdXHJcbiAgICAgIG5vZGUubW9kZWwucmF3LmZhY2VzID0gW11cclxuICAgICAgbm9kZS5tb2RlbC5yYXcuY29sb3JzID0gW11cclxuICAgICAgbm9kZS5tb2RlbC5yYXcudmVydGV4Tm9ybWFscyA9IFtdXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgbm9kZS5tb2RlbC5yYXcudmVydGljZXMgPSBhd2FpdCB0aGlzLmRlY2h1bmsob2JqLnZlcnRpY2VzKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBub2RlLm1vZGVsLnJhdy5mYWNlcyA9IGF3YWl0IHRoaXMuZGVjaHVuayhvYmouZmFjZXMpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIG5vZGUubW9kZWwucmF3LmNvbG9ycyA9IGF3YWl0IHRoaXMuZGVjaHVuayhvYmouY29sb3JzKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBub2RlLm1vZGVsLnJhdy52ZXJ0ZXhOb3JtYWxzID0gYXdhaXQgdGhpcy5kZWNodW5rKG9iai52ZXJ0ZXhOb3JtYWxzKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBSZWdpb25Ub05vZGUob2JqOiBTcGVja2xlT2JqZWN0LCBub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCFvYmopIHJldHVyblxyXG5cclxuICAgICAgbGV0IGRpc3BsYXlWYWx1ZSA9IHRoaXMuZ2V0RGlzcGxheVZhbHVlKG9iailcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRpc3BsYXlWYWx1ZSkpIGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZVswXSAvL0p1c3QgdGFrZSB0aGUgZmlyc3QgZGlzcGxheSB2YWx1ZSBmb3Igbm93IChub3QgaWRlYWwpXHJcbiAgICAgIGlmICghZGlzcGxheVZhbHVlKSByZXR1cm5cclxuXHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShkaXNwbGF5VmFsdWUgYXMgU3BlY2tsZU9iamVjdClcclxuICAgICAgY29uc3QgbmVzdGVkTm9kZTogVHJlZU5vZGUgPSB0aGlzLnRyZWUucGFyc2Uoe1xyXG4gICAgICAgIGlkOiBub2RlLm1vZGVsLmluc3RhbmNlZFxyXG4gICAgICAgICAgPyB0aGlzLmdldENvbXBvdW5kSWQocmVmLmlkLCB0aGlzLmluc3RhbmNlQ291bnRlcisrKVxyXG4gICAgICAgICAgOiB0aGlzLmdldE5vZGVJZChyZWYpLFxyXG4gICAgICAgIHJhdzogcmVmLFxyXG4gICAgICAgIGF0b21pYzogZmFsc2UsXHJcbiAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgIC4uLihub2RlLm1vZGVsLmluc3RhbmNlZCAmJiB7IGluc3RhbmNlZDogbm9kZS5tb2RlbC5pbnN0YW5jZWQgfSlcclxuICAgICAgfSlcclxuICAgICAgYXdhaXQgdGhpcy5jb252ZXJ0VG9Ob2RlKHJlZiwgbmVzdGVkTm9kZSlcclxuICAgICAgdGhpcy5hZGROb2RlKG5lc3RlZE5vZGUsIG5vZGUpXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKGBGYWlsZWQgdG8gY29udmVydCBSZWdpb24gaWQ6ICR7b2JqLmlkfWApXHJcbiAgICAgIHRocm93IGVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgVGV4dFRvTm9kZShfb2JqOiBTcGVja2xlT2JqZWN0LCBfbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBEaW1lbnNpb25Ub05vZGUob2JqOiBTcGVja2xlT2JqZWN0LCBub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgY29uc3QgZGlzcGxheVZhbHVlcyA9IFsuLi4odGhpcy5nZXREaXNwbGF5VmFsdWUob2JqKSBhcyBTcGVja2xlT2JqZWN0W10pXVxyXG4gICAgZm9yIChjb25zdCBkaXNwbGF5VmFsdWUgb2YgZGlzcGxheVZhbHVlcykge1xyXG4gICAgICBjb25zdCBjaGlsZE5vZGU6IFRyZWVOb2RlID0gdGhpcy50cmVlLnBhcnNlKHtcclxuICAgICAgICBpZDogdGhpcy5nZXROb2RlSWQoZGlzcGxheVZhbHVlKSxcclxuICAgICAgICByYXc6IGRpc3BsYXlWYWx1ZSxcclxuICAgICAgICBhdG9taWM6IGZhbHNlLFxyXG4gICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmFkZE5vZGUoY2hpbGROb2RlLCBub2RlKVxyXG4gICAgICBhd2FpdCB0aGlzLmNvbnZlcnRUb05vZGUoZGlzcGxheVZhbHVlLCBjaGlsZE5vZGUpXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFlPTE9cclxuICAgICAqIC0gRGltZW5zaW9ucyBvZiBhbGwgdHlwZXMgZG8gbm90IGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgdGV4dCBzaXplXHJcbiAgICAgKiAtIFBvc2l0aW9uaW5nIG9mIHRoZSB0ZXh0IGlzIG5vdCBjb25zaXN0ZW50IGFjcm9zcyBkaW1lbnNpb24gdHlwZXNcclxuICAgICAqIC0gQW5ndWxhciBEaW1lbnNpb25zIGFyZSBicm9rZW5cclxuICAgICAqL1xyXG4gICAgY29uc3QgdGV4dE9iaiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcclxuICAgIHRleHRPYmoucGxhbmUgPSB0ZXh0T2JqLlJoaW5vUHJvcHMucGxhbmVcclxuICAgIGNvbnN0IGRlcml2ZWRUeXBlID0gdGhpcy5nZXRTcGVja2xlVHlwZUNoYWluKHRleHRPYmopWzBdXHJcbiAgICBzd2l0Y2ggKGRlcml2ZWRUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ0xlbmd0aERpbWVuc2lvbic6XHJcbiAgICAgICAgdGV4dE9iai5wbGFuZS5vcmlnaW4gPSB0ZXh0T2JqLnBvc2l0aW9uXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnRGlzdGFuY2VEaW1lbnNpb24nOlxyXG4gICAgICAgIHRleHRPYmoucGxhbmUub3JpZ2luID0gdGV4dE9iai50ZXh0UG9zaXRpb25cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdBbmdsZURpbWVuc2lvbic6XHJcbiAgICAgICAgdGV4dE9iai5wbGFuZS5vcmlnaW4gPSB0ZXh0T2JqLnRleHRQb3NpdGlvblxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgICB0ZXh0T2JqWydzcGVja2xlX3R5cGUnXSA9ICdPYmplY3RzLk90aGVyLlRleHQnXHJcbiAgICBjb25zdCB0ZXh0Tm9kZTogVHJlZU5vZGUgPSB0aGlzLnRyZWUucGFyc2Uoe1xyXG4gICAgICBpZDogTWF0aFV0aWxzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICByYXc6IHRleHRPYmosXHJcbiAgICAgIGF0b21pYzogZmFsc2UsXHJcbiAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgfSlcclxuICAgIHRoaXMuYWRkTm9kZSh0ZXh0Tm9kZSwgbm9kZSlcclxuICAgIGF3YWl0IHRoaXMuY29udmVydFRvTm9kZSh0ZXh0T2JqLCB0ZXh0Tm9kZSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgUG9pbnRUb05vZGUoX29iajogU3BlY2tsZU9iamVjdCwgX25vZGU6IFRyZWVOb2RlKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBMaW5lVG9Ob2RlKF9vYmo6IFNwZWNrbGVPYmplY3QsIF9ub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIFBvbHlsaW5lVG9Ob2RlKG9iajogU3BlY2tsZU9iamVjdCwgbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIG5vZGUubW9kZWwucmF3LnZhbHVlID0gYXdhaXQgdGhpcy5kZWNodW5rKFxyXG4gICAgICBvYmoudmFsdWUgYXMgQXJyYXk8eyByZWZlcmVuY2VkSWQ6IHN0cmluZyB9PlxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBCb3hUb05vZGUoX29iajogU3BlY2tsZU9iamVjdCwgX25vZGU6IFRyZWVOb2RlKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgUG9seWN1cnZlVG9Ob2RlKG9iajogU3BlY2tsZU9iamVjdCwgbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIG5vZGUubW9kZWwubmVzdGVkTm9kZXMgPSBbXVxyXG4gICAgZm9yIChcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICBpIDwgKG9iaiBhcyB1bmtub3duIGFzIHsgc2VnbWVudHM6IFNwZWNrbGVPYmplY3RbXSB9KS5zZWdtZW50cy5sZW5ndGg7XHJcbiAgICAgIGkrK1xyXG4gICAgKSB7XHJcbiAgICAgIGxldCBlbGVtZW50ID0gKG9iaiBhcyB1bmtub3duIGFzIHsgc2VnbWVudHM6IFNwZWNrbGVPYmplY3RbXSB9KS5zZWdtZW50c1tpXVxyXG4gICAgICAvKiogTm90IGEgYmlnIGZhbiBvZiB0aGlzLi4uICovXHJcbiAgICAgIGlmICghdGhpcy5kaXJlY3ROb2RlQ29udmVydGVyRXhpc3RzKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IHRoaXMuZ2V0RGlzcGxheVZhbHVlKGVsZW1lbnQpIGFzIFNwZWNrbGVPYmplY3RcclxuICAgICAgICBpZiAoZWxlbWVudC5yZWZlcmVuY2VkSWQpIHtcclxuICAgICAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLnJlc29sdmVSZWZlcmVuY2UoZWxlbWVudClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmVzdGVkTm9kZTogVHJlZU5vZGUgPSB0aGlzLnRyZWUucGFyc2Uoe1xyXG4gICAgICAgIGlkOiB0aGlzLmdldE5vZGVJZChlbGVtZW50KSxcclxuICAgICAgICByYXc6IGVsZW1lbnQsXHJcbiAgICAgICAgYXRvbWljOiBmYWxzZSxcclxuICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgfSlcclxuICAgICAgYXdhaXQgdGhpcy5jb252ZXJ0VG9Ob2RlKGVsZW1lbnQsIG5lc3RlZE5vZGUpXHJcbiAgICAgIC8qKiBXZSdyZSBub3QgYWRkaW5nIHRoZSBzZWdtZW50cyBhcyBjaGlsZHJlbiBzaW5jZSB0aGV5IHNob3VsZG4ndCBleGlzdCBhcyBpbmRpdmlkdWFsIGxpbmUgZWxlbWVudHMgKi9cclxuICAgICAgbm9kZS5tb2RlbC5uZXN0ZWROb2Rlcy5wdXNoKG5lc3RlZE5vZGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIEN1cnZlVG9Ob2RlKG9iajogU3BlY2tsZU9iamVjdCwgbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIGxldCBkaXNwbGF5VmFsdWU6IFNwZWNrbGVPYmplY3QgPSB0aGlzLmdldERpc3BsYXlWYWx1ZShvYmopIGFzIFNwZWNrbGVPYmplY3RcclxuICAgIGlmICghZGlzcGxheVZhbHVlKSB7XHJcbiAgICAgIExvZ2dlci53YXJuKFxyXG4gICAgICAgIGBPYmplY3QgJHtvYmouaWR9IG9mIHR5cGUgJHtvYmouc3BlY2tsZV90eXBlfSBoYXMgbm8gZGlzcGxheSB2YWx1ZSBhbmQgd2lsbCBiZSBpZ25vcmVkYFxyXG4gICAgICApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbm9kZS5tb2RlbC5uZXN0ZWROb2RlcyA9IFtdXHJcbiAgICBkaXNwbGF5VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVSZWZlcmVuY2Uob2JqLmRpc3BsYXlWYWx1ZSBhcyBTcGVja2xlT2JqZWN0KVxyXG4gICAgZGlzcGxheVZhbHVlLnVuaXRzID0gZGlzcGxheVZhbHVlLnVuaXRzIHx8IG9iai51bml0c1xyXG4gICAgY29uc3QgbmVzdGVkTm9kZTogVHJlZU5vZGUgPSB0aGlzLnRyZWUucGFyc2Uoe1xyXG4gICAgICBpZDogdGhpcy5nZXROb2RlSWQoZGlzcGxheVZhbHVlKSxcclxuICAgICAgcmF3OiBkaXNwbGF5VmFsdWUsXHJcbiAgICAgIGF0b21pYzogZmFsc2UsXHJcbiAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgfSlcclxuICAgIGF3YWl0IHRoaXMuY29udmVydFRvTm9kZShkaXNwbGF5VmFsdWUsIG5lc3RlZE5vZGUpXHJcbiAgICAvKiogV2UncmUgbm90IGFkZGluZyB0aGUgc2VnbWVudHMgYXMgY2hpbGRyZW4gc2luY2UgdGhleSBzaG91bGRuJ3QgZXhpc3QgYXMgaW5kaXZpZHVhbCBsaW5lIGVsZW1lbnRzICovXHJcbiAgICBub2RlLm1vZGVsLm5lc3RlZE5vZGVzLnB1c2gobmVzdGVkTm9kZSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgQ2lyY2xlVG9Ob2RlKF9vYmo6IFNwZWNrbGVPYmplY3QsIF9ub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIEFyY1RvTm9kZShfb2JqOiBTcGVja2xlT2JqZWN0LCBfbm9kZTogVHJlZU5vZGUpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBFbGxpcHNlVG9Ob2RlKF9vYmo6IFNwZWNrbGVPYmplY3QsIF9ub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICAvKiogV2Ugc2hvdWxkbid0IG5lZWQgdG8gd29yayB3aXRoIGR1cGxpY2F0ZXMgKi9cclxuICBwdWJsaWMgaGFuZGxlRHVwbGljYXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8qKiBXZSdyZSBnZW5lcmFsbHkgaW50ZXJlc3RlZCBpbiBoYW5kbGluZyByZW5kZXJhYmxlIGR1cGxpY2F0ZXMuIE90aGVyd2lzZSB3ZSdyZSBvdmVyYmxvYXQgZXZlcnl0aGluZyB3aXRoIG1pbGxpb25zIG9mIHBhcmFtZXRlcnMgYW5kIHN1Y2ggKi9cclxuICAgIGNvbnN0IFNwZWNrbGVUeXBlRHVwbGljYWJsZVJlbmRlcmFibGVzOiBTcGVja2xlVHlwZVtdID1cclxuICAgICAgU3BlY2tsZVR5cGVBbGxSZW5kZXJhYmxlcy5zbGljZSgpXHJcbiAgICAvKiogV2UgcmVtb3ZlIFBvaW50IGJlY2F1c2Ugc3BlY2tsZSBkYXRhIGNvbnRhaW5zIHRvbnMgb2YgcG9pbnRzIHRoYXQgYXJlIG5vdCByZWFsbHkgcmVuZGVyYWJsZSAqL1xyXG4gICAgU3BlY2tsZVR5cGVEdXBsaWNhYmxlUmVuZGVyYWJsZXMuc3BsaWNlKFxyXG4gICAgICBTcGVja2xlVHlwZUFsbFJlbmRlcmFibGVzLmluZGV4T2YoU3BlY2tsZVR5cGUuUG9pbnQpLFxyXG4gICAgICAxXHJcbiAgICApXHJcbiAgICBjb25zdCBkdXBsaWNhdGVzID0gdGhpcy50cmVlLmdldFJlbmRlclRyZWUodGhpcy5zdWJ0cmVlLm1vZGVsLmlkKT8uZ2V0RHVwbGljYXRlcygpXHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gZHVwbGljYXRlcykge1xyXG4gICAgICBjb25zdCBiYXNlT2JqZWN0ID0gdGhpcy50cmVlLmZpbmRJZChrKVxyXG4gICAgICBpZiAoIWJhc2VPYmplY3QpIHtcclxuICAgICAgICBMb2dnZXIud2FybihgQmFzZSBkdXBsaWNhdGVkIG9iamVjdCAke2t9IG5vdCBmb3VuZCFgKVxyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc3BlY2tsZVR5cGUgPSB0aGlzLmdldFNwZWNrbGVUeXBlKGJhc2VPYmplY3RbMF0ubW9kZWwucmF3KSBhcyBTcGVja2xlVHlwZVxyXG4gICAgICBpZiAoIVNwZWNrbGVUeXBlRHVwbGljYWJsZVJlbmRlcmFibGVzLmluY2x1ZGVzKHNwZWNrbGVUeXBlKSkgY29udGludWVcclxuXHJcbiAgICAgIGZvciAoY29uc3QgbSBpbiBkdXBsaWNhdGVzW2tdKSB7XHJcbiAgICAgICAgLyoqIE5vcm1hbGx5IHdlJ2Qgb25seSBuZWVkIHRoZSBnZW9tZXRyeSByZWxhdGVkIGRhdGEgY2xvbmVkLCBidXQgdGhpcyBjb3ZlcnMgMTAwJSAqL1xyXG4gICAgICAgIGR1cGxpY2F0ZXNba11bbV0ubW9kZWwucmF3ID0gc3RydWN0dXJlZENsb25lKGR1cGxpY2F0ZXNba11bbV0ubW9kZWwucmF3KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuLi9FdmVudEVtaXR0ZXIuanMnXHJcblxyXG5leHBvcnQgZW51bSBMb2FkZXJFdmVudCB7XHJcbiAgTG9hZFByb2dyZXNzID0gJ2xvYWQtcHJvZ3Jlc3MnLFxyXG4gIExvYWRDYW5jZWxsZWQgPSAnbG9hZC1jYW5jZWxsZWQnLFxyXG4gIExvYWRXYXJuaW5nID0gJ2xvYWQtd2FybmluZycsXHJcbiAgQ29udmVydGVkID0gJ2NvbnZlcnRlZCcsXHJcbiAgVHJhdmVyc2VkID0gJ3RyYXZlcnNlZCdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb2FkZXJFdmVudFBheWxvYWQge1xyXG4gIFtMb2FkZXJFdmVudC5Mb2FkUHJvZ3Jlc3NdOiB7IHByb2dyZXNzOiBudW1iZXI7IGlkOiBzdHJpbmcgfVxyXG4gIFtMb2FkZXJFdmVudC5Db252ZXJ0ZWRdOiB7IGNvdW50OiBudW1iZXIgfVxyXG4gIFtMb2FkZXJFdmVudC5UcmF2ZXJzZWRdOiB7IGNvdW50OiBudW1iZXIgfVxyXG4gIFtMb2FkZXJFdmVudC5Mb2FkQ2FuY2VsbGVkXTogc3RyaW5nXHJcbiAgW0xvYWRlckV2ZW50LkxvYWRXYXJuaW5nXTogeyBtZXNzYWdlOiBzdHJpbmcgfVxyXG59XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTG9hZGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICBwcm90ZWN0ZWQgX3Jlc291cmNlOiBzdHJpbmdcclxuICBwcm90ZWN0ZWQgX3Jlc291cmNlRGF0YTogdW5rbm93blxyXG5cclxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0IHJlc291cmNlKCk6IHN0cmluZ1xyXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXQgZmluaXNoZWQoKTogYm9vbGVhblxyXG5cclxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocmVzb3VyY2U6IHN0cmluZywgcmVzb3VyY2VEYXRhPzogdW5rbm93bikge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZVxyXG4gICAgdGhpcy5fcmVzb3VyY2VEYXRhID0gcmVzb3VyY2VEYXRhXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb248VCBleHRlbmRzIExvYWRlckV2ZW50PihcclxuICAgIGV2ZW50VHlwZTogVCxcclxuICAgIGxpc3RlbmVyOiAoYXJnOiBMb2FkZXJFdmVudFBheWxvYWRbVF0pID0+IHZvaWRcclxuICApOiB2b2lkIHtcclxuICAgIHN1cGVyLm9uKGV2ZW50VHlwZSwgbGlzdGVuZXIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWJzdHJhY3QgbG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+XHJcbiAgcHVibGljIGFic3RyYWN0IGNhbmNlbCgpOiB2b2lkXHJcbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XHJcbiAgICBzdXBlci5kaXNwb3NlKClcclxuICB9XHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXHJcbmltcG9ydCB7IFRyaWFuZ2xlLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnXHJcblxyXG4vKipcclxuICogU2V0IG9mIGZ1bmN0aW9ucyB0byB0cmlhbmd1bGF0ZSBuLWdvbiBmYWNlcyAoaS5lLiBwb2x5Z29uIGZhY2VzIHdpdGggYW4gYXJiaXRyYXJ5IChuKSBudW1iZXIgb2YgdmVydGljZXMpLlxyXG4gKiBUaGlzIGNsYXNzIGlzIGEgSmF2YVNjcmlwdCBwb3J0IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9zcGVja2xlc3lzdGVtcy9zcGVja2xlLXNoYXJwL2Jsb2IvbWFpbi9PYmplY3RzL09iamVjdHMvVXRpbHMvTWVzaFRyaWFuZ3VsYXRpb25IZWxwZXIuY3NcclxuICovXHJcbmNvbnN0IF92ZWMzMCA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3ZlYzMxID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfdmVjMzIgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF92ZWMzMyA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX25vcm1hbCA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3RyaWFuZ2xlID0gbmV3IFRyaWFuZ2xlKClcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc2hUcmlhbmd1bGF0aW9uSGVscGVyIHtcclxuICAvKipcclxuICAgKiBDYWxjdWxhdGVzIHRoZSB0cmlhbmd1bGF0aW9uIG9mIHRoZSBmYWNlIGF0IGdpdmVuIGZhY2VJbmRleC5cclxuICAgKiBAcmVtYXJrcyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIHRoZSBlYXIgY2xpcHBpbmcgbWV0aG9kIHByb3Bvc2VkIGJ5IFwiQ2hyaXN0ZXIgRXJpY3NvbiAoMjAwNSkgPGk+UmVhbC1UaW1lIENvbGxpc2lvbiBEZXRlY3Rpb248L2k+LlxyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSAgIGZhY2VJbmRleCAgICAgIFRoZSBpbmRleCBvZiB0aGUgZmFjZSdzIGNhcmRpbmFsaXR5IGluZGljYXRvciBgbmBcclxuICAgKiBAcGFyYW0ge051bWJlcltdfSAgIGZhY2VzICAgICAgVGhlIGxpc3Qgb2YgZmFjZXMgaW4gdGhlIG1lc2hcclxuICAgKiBAcGFyYW0ge051bWJlcltdfSAgIHZlcnRpY2VzICAgVGhlIGxpc3Qgb2YgdmVydGljZXMgaW4gdGhlIG1lc2hcclxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGZsYXQgbGlzdCBvZiB0cmlhbmdsZSBmYWNlcyAod2l0aG91dCBjYXJkaW5hbGl0eSBpbmRpY2F0b3JzKVxyXG4gICAqL1xyXG4gIHN0YXRpYyB0cmlhbmd1bGF0ZUZhY2UoXHJcbiAgICBmYWNlSW5kZXgsXHJcbiAgICBmYWNlcyxcclxuICAgIHZlcnRpY2VzLFxyXG4gICAgLyoqIFB1cmlzdHMgcm9sbGluZyBvdmVyIGluIHRoZWlyIGdyYXZlcyBiZWNhdXNlIG9mIHRoaXMgKi9cclxuICAgIF9pbm91dF90YXJnZXRBcnJheSxcclxuICAgIF9pbl9vZmZzZXRcclxuICApIHtcclxuICAgIGxldCBuID0gZmFjZXMuZ2V0KGZhY2VJbmRleClcclxuICAgIGlmIChuIDwgMykgbiArPSAzIC8vIDAgLT4gMywgMSAtPiA0XHJcblxyXG4gICAgLy9Db252ZXJ0cyBmcm9tIHJlbGF0aXZlIHRvIGFic29sdXRlIGluZGV4IChyZXR1cm5zIGluZGV4IGluIG1lc2gudmVydGljZXMgbGlzdClcclxuICAgIC8qKiBXaHkgZG9lc24ndCBqYXZhc2NyaXB0IGhhdmUgYSBtZWFucyB0byBpbmxpbmUgZnVuY3Rpb25zPyEgKi9cclxuICAgIGZ1bmN0aW9uIGFzSW5kZXgodikge1xyXG4gICAgICByZXR1cm4gZmFjZUluZGV4ICsgdiArIDFcclxuICAgIH1cclxuXHJcbiAgICAvL0dldHMgdmVydGV4IGZyb20gYSByZWxhdGl2ZSB2ZXJ0IGluZGV4XHJcbiAgICBmdW5jdGlvbiBWKHYsIHRhcmdldCkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGZhY2VzLmdldChhc0luZGV4KHYpKSAqIDNcclxuICAgICAgdGFyZ2V0LnggPSB2ZXJ0aWNlcy5nZXQoaW5kZXgpXHJcbiAgICAgIHRhcmdldC55ID0gdmVydGljZXMuZ2V0KGluZGV4ICsgMSlcclxuICAgICAgdGFyZ2V0LnogPSB2ZXJ0aWNlcy5nZXQoaW5kZXggKyAyKVxyXG4gICAgICByZXR1cm4gdGFyZ2V0XHJcbiAgICB9XHJcblxyXG4gICAgLy9DYWxjdWxhdGUgZmFjZSBub3JtYWwgdXNpbmcgdGhlIE5ld2VsbCBNZXRob2RcclxuICAgIGNvbnN0IGZhY2VOb3JtYWwgPSBfbm9ybWFsXHJcbiAgICBmb3IgKGxldCBpaSA9IG4gLSAxLCBqaiA9IDA7IGpqIDwgbjsgaWkgPSBqaiwgamorKykge1xyXG4gICAgICBjb25zdCBpUG9zID0gVihpaSwgX3ZlYzMwKVxyXG4gICAgICBjb25zdCBqUG9zID0gVihqaiwgX3ZlYzMxKVxyXG4gICAgICBmYWNlTm9ybWFsLnggKz0gKGpQb3MueSAtIGlQb3MueSkgKiAoaVBvcy56ICsgalBvcy56KSAvLyBwcm9qZWN0aW9uIG9uIHl6XHJcbiAgICAgIGZhY2VOb3JtYWwueSArPSAoalBvcy56IC0gaVBvcy56KSAqIChpUG9zLnggKyBqUG9zLngpIC8vIHByb2plY3Rpb24gb24geHpcclxuICAgICAgZmFjZU5vcm1hbC56ICs9IChqUG9zLnggLSBpUG9zLngpICogKGlQb3MueSArIGpQb3MueSkgLy8gcHJvamVjdGlvbiBvbiB4eVxyXG4gICAgfVxyXG4gICAgZmFjZU5vcm1hbC5ub3JtYWxpemUoKVxyXG5cclxuICAgIC8vU2V0IHVwIHByZXZpb3VzIGFuZCBuZXh0IGxpbmtzIHRvIGVmZmVjdGl2ZWx5IGZvcm0gYSBkb3VibGUtbGlua2VkIHZlcnRleCBsaXN0XHJcbiAgICBjb25zdCBwcmV2ID0gW10gLy9uZXcgQXJyYXkobilcclxuICAgIGNvbnN0IG5leHQgPSBbXSAvL25ldyBBcnJheShuKVxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcclxuICAgICAgcHJldltqXSA9IGogLSAxXHJcbiAgICAgIG5leHRbal0gPSBqICsgMVxyXG4gICAgfVxyXG4gICAgcHJldlswXSA9IG4gLSAxXHJcbiAgICBuZXh0W24gLSAxXSA9IDBcclxuXHJcbiAgICAvL1N0YXJ0IGNsaXBwaW5nIGVhcnMgdW50aWwgd2UgYXJlIGxlZnQgd2l0aCBhIHRyaWFuZ2xlXHJcbiAgICBsZXQgaSA9IDBcclxuICAgIGxldCBjb3VudGVyID0gMFxyXG4gICAgbGV0IGxvY2FsT2Zmc2V0ID0gMFxyXG4gICAgd2hpbGUgKG4gPj0gMykge1xyXG4gICAgICBsZXQgaXNFYXIgPSB0cnVlXHJcblxyXG4gICAgICAvL0lmIHdlIGFyZSB0aGUgbGFzdCB0cmlhbmdsZSBvciB3ZSBoYXZlIGV4aGF1c3RlZCBvdXIgdmVydGljZXMsIHRoZSBiZWxvdyBzdGF0ZW1lbnQgd2lsbCBiZSBmYWxzZVxyXG4gICAgICBpZiAobiA+IDMgJiYgY291bnRlciA8IG4pIHtcclxuICAgICAgICBjb25zdCBwcmV2VmVydGV4ID0gVihwcmV2W2ldLCBfdmVjMzApXHJcbiAgICAgICAgY29uc3QgZWFyVmVydGV4ID0gVihpLCBfdmVjMzEpXHJcbiAgICAgICAgY29uc3QgbmV4dFZlcnRleCA9IFYobmV4dFtpXSwgX3ZlYzMyKVxyXG5cclxuICAgICAgICBfdHJpYW5nbGUuYS5jb3B5KHByZXZWZXJ0ZXgpXHJcbiAgICAgICAgX3RyaWFuZ2xlLmIuY29weShlYXJWZXJ0ZXgpXHJcbiAgICAgICAgX3RyaWFuZ2xlLmMuY29weShuZXh0VmVydGV4KVxyXG5cclxuICAgICAgICBpZiAoX3RyaWFuZ2xlLmlzRnJvbnRGYWNpbmcoZmFjZU5vcm1hbCkpIHtcclxuICAgICAgICAgIGxldCBrID0gbmV4dFtuZXh0W2ldXVxyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgaWYgKF90cmlhbmdsZS5jb250YWluc1BvaW50KFYoaywgX3ZlYzMzKSkpIHtcclxuICAgICAgICAgICAgICBpc0VhciA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgayA9IG5leHRba11cclxuICAgICAgICAgIH0gd2hpbGUgKGsgIT09IHByZXZbaV0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlzRWFyID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0Vhcikge1xyXG4gICAgICAgIGNvbnN0IGEgPSBmYWNlcy5nZXQoYXNJbmRleChpKSlcclxuICAgICAgICBjb25zdCBiID0gZmFjZXMuZ2V0KGFzSW5kZXgobmV4dFtpXSkpXHJcbiAgICAgICAgY29uc3QgYyA9IGZhY2VzLmdldChhc0luZGV4KHByZXZbaV0pKVxyXG4gICAgICAgIF9pbm91dF90YXJnZXRBcnJheVtfaW5fb2Zmc2V0ICsgbG9jYWxPZmZzZXRdID0gYVxyXG4gICAgICAgIF9pbm91dF90YXJnZXRBcnJheVtfaW5fb2Zmc2V0ICsgbG9jYWxPZmZzZXQgKyAxXSA9IGJcclxuICAgICAgICBfaW5vdXRfdGFyZ2V0QXJyYXlbX2luX29mZnNldCArIGxvY2FsT2Zmc2V0ICsgMl0gPSBjXHJcbiAgICAgICAgbG9jYWxPZmZzZXQgKz0gM1xyXG5cclxuICAgICAgICBuZXh0W3ByZXZbaV1dID0gbmV4dFtpXVxyXG4gICAgICAgIHByZXZbbmV4dFtpXV0gPSBwcmV2W2ldXHJcbiAgICAgICAgbi0tXHJcbiAgICAgICAgaSA9IHByZXZbaV1cclxuICAgICAgICBjb3VudGVyID0gMFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSBuZXh0W2ldXHJcbiAgICAgICAgY291bnRlcisrXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbG9jYWxPZmZzZXRcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgR2VvbWV0cnksIHR5cGUgR2VvbWV0cnlEYXRhIH0gZnJvbSAnLi4vLi4vY29udmVydGVyL0dlb21ldHJ5LmpzJ1xyXG5pbXBvcnQgTWVzaFRyaWFuZ3VsYXRpb25IZWxwZXIgZnJvbSAnLi4vLi4vY29udmVydGVyL01lc2hUcmlhbmd1bGF0aW9uSGVscGVyLmpzJ1xyXG5pbXBvcnQgeyBnZXRDb252ZXJzaW9uRmFjdG9yIH0gZnJvbSAnLi4vLi4vY29udmVydGVyL1VuaXRzLmpzJ1xyXG5pbXBvcnQgeyB0eXBlIE5vZGVEYXRhIH0gZnJvbSAnLi4vLi4vdHJlZS9Xb3JsZFRyZWUuanMnXHJcbmltcG9ydCB7IEJveDMsIEVsbGlwc2VDdXJ2ZSwgTWF0aFV0aWxzLCBNYXRyaXg0LCBWZWN0b3IyLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IEdlb21ldHJ5Q29udmVydGVyLCBTcGVja2xlVHlwZSB9IGZyb20gJy4uL0dlb21ldHJ5Q29udmVydGVyLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4uLy4uL3V0aWxzL0xvZ2dlci5qcydcclxuaW1wb3J0IHsgRGF0YUNodW5rIH0gZnJvbSAnLi4vLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgQ2h1bmtBcnJheSB9IGZyb20gJy4uLy4uL2NvbnZlcnRlci9WaXJ0dWFsQXJyYXkuanMnXHJcbmNvbnN0IF92ZWMzMCA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3ZlYzMxID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfdmVjMzIgPSBuZXcgVmVjdG9yMygpXHJcbmNvbnN0IF92ZWMzMyA9IG5ldyBWZWN0b3IzKClcclxuY29uc3QgX3ZlYzM0ID0gbmV3IFZlY3RvcjMoKVxyXG5jb25zdCBfdmVjMzUgPSBuZXcgVmVjdG9yMygpXHJcblxyXG5leHBvcnQgY2xhc3MgU3BlY2tsZUdlb21ldHJ5Q29udmVydGVyIGV4dGVuZHMgR2VvbWV0cnlDb252ZXJ0ZXIge1xyXG4gIHB1YmxpYyB0eXBlTG9va3VwVGFibGU6IHsgW3R5cGU6IHN0cmluZ106IFNwZWNrbGVUeXBlIH0gPSB7fVxyXG4gIHB1YmxpYyBzdGF0aWMgYmxvYkNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBBcnJheUJ1ZmZlcj4gPSB7fVxyXG4gIHB1YmxpYyBtZXNoVHJpYW5ndWxhdGlvblRpbWUgPSAwXHJcbiAgcHVibGljIGFjdHVhbFRyaWFuZ3VsYXRlVGltZSA9IDBcclxuICBwdWJsaWMgcHVzaFRpbWUgPSAwXHJcblxyXG4gIHB1YmxpYyBnZXRTcGVja2xlVHlwZShub2RlOiBOb2RlRGF0YSk6IFNwZWNrbGVUeXBlIHtcclxuICAgIGNvbnN0IHJhd1R5cGUgPSBub2RlLnJhdy5zcGVja2xlX3R5cGUgPyBub2RlLnJhdy5zcGVja2xlX3R5cGUgOiAnQmFzZSdcclxuXHJcbiAgICBjb25zdCBsb29rdXAgPSB0aGlzLnR5cGVMb29rdXBUYWJsZVtyYXdUeXBlXVxyXG4gICAgaWYgKGxvb2t1cCkge1xyXG4gICAgICByZXR1cm4gbG9va3VwXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHR5cGVSZXQ6IFNwZWNrbGVUeXBlID0gU3BlY2tsZVR5cGUuVW5rbm93blxyXG4gICAgbGV0IHR5cGVDaGFpbjogc3RyaW5nW10gPSBbXVxyXG4gICAgdHlwZUNoYWluID0gcmF3VHlwZS5zcGxpdCgnOicpLnJldmVyc2UoKVxyXG4gICAgdHlwZUNoYWluID0gdHlwZUNoYWluLm1hcDxzdHJpbmc+KCh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnLicpLnJldmVyc2UoKVswXVxyXG4gICAgfSlcclxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlQ2hhaW4pIHtcclxuICAgICAgaWYgKHR5cGUgaW4gU3BlY2tsZVR5cGUpIHtcclxuICAgICAgICB0eXBlUmV0ID0gdHlwZSBhcyBTcGVja2xlVHlwZVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudHlwZUxvb2t1cFRhYmxlW3Jhd1R5cGVdID0gdHlwZVJldFxyXG4gICAgcmV0dXJuIHR5cGVSZXRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb252ZXJ0Tm9kZVRvR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHwgbnVsbCB7XHJcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRTcGVja2xlVHlwZShub2RlKVxyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLkJsb2NrSW5zdGFuY2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQmxvY2tJbnN0YW5jZVRvR2VvbWV0cnlEYXRhKG5vZGUpXHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuUG9pbnRjbG91ZDpcclxuICAgICAgICByZXR1cm4gdGhpcy5Qb2ludGNsb3VkVG9HZW9tZXRyeURhdGEobm9kZSlcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5CcmVwOlxyXG4gICAgICAgIHJldHVybiB0aGlzLkJyZXBUb0dlb21ldHJ5RGF0YShub2RlKVxyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLk1lc2g6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuTWVzaFRvR2VvbWV0cnlEYXRhKG5vZGUpXHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuQmluYXJ5TWVzaDpcclxuICAgICAgICByZXR1cm4gdGhpcy5CaW5hcnlNZXNoVG9HZW9tZXRyeURhdGEobm9kZSlcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5Qb2ludDpcclxuICAgICAgICByZXR1cm4gdGhpcy5Qb2ludFRvR2VvbWV0cnlEYXRhKG5vZGUpXHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuTGluZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5MaW5lVG9HZW9tZXRyeURhdGEobm9kZSlcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5Qb2x5bGluZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5Qb2x5bGluZVRvR2VvbWV0cnlEYXRhKG5vZGUpXHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuQm94OlxyXG4gICAgICAgIHJldHVybiB0aGlzLkJveFRvR2VvbWV0cnlEYXRhKG5vZGUpXHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuUG9seWN1cnZlOlxyXG4gICAgICAgIHJldHVybiB0aGlzLlBvbHljdXJ2ZVRvR2VvbWV0cnlEYXRhKG5vZGUpXHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuQ3VydmU6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3VydmVUb0dlb21ldHJ5RGF0YShub2RlKVxyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLkNpcmNsZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5DaXJjbGVUb0dlb21ldHJ5RGF0YShub2RlKVxyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLkFyYzpcclxuICAgICAgICByZXR1cm4gdGhpcy5BcmNUb0dlb21ldHJ5RGF0YShub2RlKVxyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLkVsbGlwc2U6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuRWxsaXBzZVRvR2VvbWV0cnlEYXRhKG5vZGUpXHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuVmlldzNEOlxyXG4gICAgICAgIHJldHVybiB0aGlzLlZpZXczRFRvR2VvbWV0cnlEYXRhKG5vZGUpXHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuUmV2aXRJbnN0YW5jZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5SZXZpdEluc3RhbmNlVG9HZW9tZXRyeURhdGEobm9kZSlcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5UZXh0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLlRleHRUb0dlb21ldHJ5RGF0YShub2RlKVxyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLlRyYW5zZm9ybTpcclxuICAgICAgICByZXR1cm4gdGhpcy5UcmFuc2Zvcm1Ub0dlb21ldHJ5RGF0YShub2RlKVxyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLkluc3RhbmNlUHJveHk6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuSW5zdGFuY2VQcm94eVRvR2VvbWV0eURhdGEobm9kZSlcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5SZWdpb246XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuUmVnaW9uR2VvbWV0eURhdGEobm9kZSlcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5Vbmtub3duOlxyXG4gICAgICAgIC8vIGNvbnNvbGUud2FybihgU2tpcHBpbmcgZ2VvbWV0cnkgY29udmVyc2lvbiBmb3IgJHt0eXBlfWApXHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRpc3Bvc2VOb2RlR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogdm9pZCB7XHJcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRTcGVja2xlVHlwZShub2RlKVxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU3BlY2tsZVR5cGUuUG9pbnRjbG91ZDpcclxuICAgICAgICBub2RlLnJhdy52ZXJ0aWNlcyA9IFtdXHJcbiAgICAgICAgbm9kZS5yYXcuY29sb3JzID0gW11cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLk1lc2g6XHJcbiAgICAgICAgLyoqIFJhdyBvYmplY3RzIHdpbGwgbm8gbG9uZ2VyIGhvbGQgcmVmZXJlbmNlcyB0byBjaHVua3MgKi9cclxuICAgICAgICBub2RlLnJhdy52ZXJ0aWNlcyA9IFtdXHJcbiAgICAgICAgbm9kZS5yYXcuZmFjZXMgPSBbXVxyXG4gICAgICAgIG5vZGUucmF3LmNvbG9ycyA9IFtdXHJcbiAgICAgICAgbm9kZS5yYXcubm9ybWFscyA9IFtdXHJcblxyXG4gICAgICAgIC8vIC8qKiBXZSBjYW4gYWxyZWFkeSBkZWxldGUgdGhlc2UgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRoZW0gYWZ0ZXIgdHJpYW5ndWxhdGlvbiAqL1xyXG4gICAgICAgIC8vIG5vZGUucmF3LmZhY2VzLmZvckVhY2goKGM6IERhdGFDaHVuaykgPT4ge1xyXG4gICAgICAgIC8vICAgYy5yZWZlcmVuY2VzLS1cclxuXHJcbiAgICAgICAgLy8gICBpZiAoIWMucmVmZXJlbmNlcykge1xyXG4gICAgICAgIC8vICAgICBMb2dnZXIud2FybihgRGVsZXRpbmcgY2h1bmsgZGF0YSAke2MuaWR9YClcclxuICAgICAgICAvLyAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAgIC8vICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAvLyAgICAgZGVsZXRlIGMuZGF0YVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0pXHJcblxyXG4gICAgICAgIC8qKiBXZSBjYW4gYWxyZWFkeSBkZWxldGUgdGhpcyBiZWNhdXNlIHdlJ3ZlIGNoYW5nZXMgdGhlIGNvbG9ycyB0byBmbG9hdHMgaW4gbGluZWFyIHNwYWNlICovXHJcbiAgICAgICAgbm9kZS5yYXcuY29sb3JzLmZvckVhY2goKGM6IERhdGFDaHVuaykgPT4ge1xyXG4gICAgICAgICAgYy5yZWZlcmVuY2VzLS1cclxuXHJcbiAgICAgICAgICBpZiAoIWMucmVmZXJlbmNlcykge1xyXG4gICAgICAgICAgICBMb2dnZXIud2FybihgRGVsZXRpbmcgY2h1bmsgZGF0YSAke2MuaWR9YClcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgZGVsZXRlIGMuZGF0YVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5Qb2ludDpcclxuICAgICAgICBpZiAobm9kZS5yYXcudmFsdWUpIG5vZGUucmF3LnZhbHVlID0gW11cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGRlbGV0ZSBub2RlLnJhdy54XHJcbiAgICAgICAgICBkZWxldGUgbm9kZS5yYXcueVxyXG4gICAgICAgICAgZGVsZXRlIG5vZGUucmF3LnpcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5MaW5lOlxyXG4gICAgICAgIGlmIChub2RlLnJhdy5zdGFydC52YWx1ZSkgbm9kZS5yYXcuc3RhcnQudmFsdWUgPSBbXVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGVsZXRlIG5vZGUucmF3LnN0YXJ0LnhcclxuICAgICAgICAgIGRlbGV0ZSBub2RlLnJhdy5zdGFydC55XHJcbiAgICAgICAgICBkZWxldGUgbm9kZS5yYXcuc3RhcnQuelxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZS5yYXcuZW5kLnZhbHVlKSBub2RlLnJhdy5lbmQudmFsdWUgPSBbXVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGVsZXRlIG5vZGUucmF3LmVuZC54XHJcbiAgICAgICAgICBkZWxldGUgbm9kZS5yYXcuZW5kLnlcclxuICAgICAgICAgIGRlbGV0ZSBub2RlLnJhdy5lbmQuelxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLlBvbHlsaW5lOlxyXG4gICAgICAgIG5vZGUucmF3LnZhbHVlID0gW11cclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIFZpZXczRFRvR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHtcclxuICAgIGNvbnN0IHZPcmlnaW4gPSB0aGlzLlBvaW50VG9WZWN0b3IzKG5vZGUucmF3Lm9yaWdpbilcclxuICAgIGNvbnN0IHZUYXJnZXQgPSB0aGlzLlBvaW50VG9WZWN0b3IzKG5vZGUucmF3LnRhcmdldClcclxuICAgIG5vZGUucmF3Lm9yaWdpbiA9IHZPcmlnaW5cclxuICAgIG5vZGUucmF3LnRhcmdldCA9IHZUYXJnZXRcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhdHRyaWJ1dGVzOiBudWxsLFxyXG4gICAgICBiYWtlVHJhbnNmb3JtOiBudWxsLFxyXG4gICAgICB0cmFuc2Zvcm06IG51bGxcclxuICAgIH0gYXMgR2VvbWV0cnlEYXRhXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgVHJhbnNmb3JtVG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEge1xyXG4gICAgY29uc3QgY29udmVyc2lvbkZhY3RvciA9IGdldENvbnZlcnNpb25GYWN0b3Iobm9kZS5yYXcudW5pdHMpXHJcbiAgICAvKipcclxuICAgICAqIFNwZWNrbGUgbWF0cmljZXMgYXJlIHJvdyBtYWpvci4gVGhyZWUncyAnZnJvbUFycmF5JyBmdW5jdGlvbiBhc3N1bWVzXHJcbiAgICAgKiB0aGUgbWF0cml4IGlzIGluIGNvbHVtbiBtYWpvci4gVGhhdCdzIHdoeSB3ZSB0cmFuc3Bvc2UgaXQgaGVyZS5cclxuICAgICAqL1xyXG4gICAgLyoqIExlZ2FjeSBcInZhbHVlXCIgKi9cclxuICAgIGNvbnN0IG1hdHJpeERhdGE6IG51bWJlcltdID0gbm9kZS5yYXcudmFsdWUgPyBub2RlLnJhdy52YWx1ZSA6IG5vZGUucmF3Lm1hdHJpeFxyXG5cclxuICAgIGNvbnN0IG1hdHJpeCA9IG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KG1hdHJpeERhdGEpLnRyYW5zcG9zZSgpXHJcbiAgICAvKiogV2UgbmVlZCB0byBzY2FsZSB0aGUgdHJhbnNmb3JtLCBidXQgbm90IHByb3BhZ2F0ZSB0aGUgc2NhbGUgdG93YXJkcyB0aGUgYmxvY2sncyBjaGlsZHJlblxyXG4gICAgICogIFRoZXkgZG8gdGhlIHNjYWxpbmcgb24gdGhlaXIgb3duLiBUaGF0J3Mgd2h5IHdlIG11bHRpcGx5IHdpdGggdGhlIGludmVyc2Ugc2NhbGUgYXQgdGhlIGVuZFxyXG4gICAgICogIE5vdCAxMDAlIHN1cmUgb24gdGhpcyBpZiB0aGUgb3JpZ2luYWwgYmxvY2sgbWF0cml4IGNvbnRhaW50cyBpdCdzIG93biBzY2FsZSArIHJvdGF0aW9uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHRyYW5zZm9ybTogTWF0cml4NCA9IG5ldyBNYXRyaXg0KClcclxuICAgICAgLm1ha2VTY2FsZShjb252ZXJzaW9uRmFjdG9yLCBjb252ZXJzaW9uRmFjdG9yLCBjb252ZXJzaW9uRmFjdG9yKVxyXG4gICAgICAubXVsdGlwbHkobWF0cml4KVxyXG4gICAgICAubXVsdGlwbHkoXHJcbiAgICAgICAgbmV3IE1hdHJpeDQoKS5tYWtlU2NhbGUoXHJcbiAgICAgICAgICAxIC8gY29udmVyc2lvbkZhY3RvcixcclxuICAgICAgICAgIDEgLyBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICAgICAgMSAvIGNvbnZlcnNpb25GYWN0b3JcclxuICAgICAgICApXHJcbiAgICAgIClcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhdHRyaWJ1dGVzOiBudWxsLFxyXG4gICAgICBiYWtlVHJhbnNmb3JtOiBudWxsLFxyXG4gICAgICB0cmFuc2Zvcm1cclxuICAgIH0gYXMgR2VvbWV0cnlEYXRhXHJcbiAgfVxyXG5cclxuICAvKiogQkxPQ0sgSU5TVEFOQ0UgKi9cclxuICBwcm90ZWN0ZWQgQmxvY2tJbnN0YW5jZVRvR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHwgbnVsbCB7XHJcbiAgICBub2RlXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgLyoqIFJFVklUIElOU1RBTkNFICovXHJcbiAgcHJvdGVjdGVkIFJldml0SW5zdGFuY2VUb0dlb21ldHJ5RGF0YShub2RlOiBOb2RlRGF0YSk6IEdlb21ldHJ5RGF0YSB8IG51bGwge1xyXG4gICAgbm9kZVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIC8qKiBEVUkzIElOU1RBTkNFIFBST1hZICovXHJcbiAgcHJvdGVjdGVkIEluc3RhbmNlUHJveHlUb0dlb21ldHlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHwgbnVsbCB7XHJcbiAgICBub2RlXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUE9JTlQgQ0xPVURcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgUG9pbnRjbG91ZFRvR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb252ZXJzaW9uRmFjdG9yID0gZ2V0Q29udmVyc2lvbkZhY3Rvcihub2RlLnJhdy51bml0cylcclxuXHJcbiAgICBjb25zdCB2ZXJ0aWNlcyA9IG5ldyBDaHVua0FycmF5KFxyXG4gICAgICBub2RlLmluc3RhbmNlZCA/IG5vZGUucmF3LnBvaW50cy5zbGljZSgpIDogbm9kZS5yYXcucG9pbnRzXHJcbiAgICApXHJcbiAgICBjb25zdCBjb2xvcnNSYXcgPSBuZXcgQ2h1bmtBcnJheShub2RlLnJhdy5jb2xvcnMpXHJcbiAgICBsZXQgY29sb3JzID0gbnVsbFxyXG5cclxuICAgIGlmIChjb2xvcnNSYXcgJiYgY29sb3JzUmF3Lmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICBpZiAoY29sb3JzUmF3Lmxlbmd0aCAhPT0gdmVydGljZXMubGVuZ3RoIC8gMykge1xyXG4gICAgICAgIExvZ2dlci53YXJuKFxyXG4gICAgICAgICAgYE1lc2ggKGlkICR7bm9kZS5yYXcuaWR9KSBjb2xvdXJzIGFyZSBtaXNtYXRjaGVkIHdpdGggdmVydGljZSBjb3VudHMuIFRoZSBudW1iZXIgb2YgY29sb3VycyBtdXN0IGVxdWFsIHRoZSBudW1iZXIgb2YgdmVydGljZXMuYFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICAvKiogV2Ugd2FudCB0aGUgY29sb3JzIGluIGxpbmVhciBzcGFjZSAqL1xyXG4gICAgICBjb2xvcnMgPSB0aGlzLnVucGFja0NvbG9ycyhjb2xvcnNSYXcsIHRydWUpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgIFBPU0lUSU9OOiB2ZXJ0aWNlcyxcclxuICAgICAgICBDT0xPUjogY29sb3JzXHJcbiAgICAgICAgICA/IG5ldyBDaHVua0FycmF5KFtcclxuICAgICAgICAgICAgICB7IGRhdGE6IGNvbG9ycywgaWQ6IE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKSwgcmVmZXJlbmNlczogMSB9XHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICB9LFxyXG4gICAgICBiYWtlVHJhbnNmb3JtOiBuZXcgTWF0cml4NCgpLm1ha2VTY2FsZShcclxuICAgICAgICBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICAgIGNvbnZlcnNpb25GYWN0b3IsXHJcbiAgICAgICAgY29udmVyc2lvbkZhY3RvclxyXG4gICAgICApLFxyXG4gICAgICB0cmFuc2Zvcm06IG51bGxcclxuICAgIH0gYXMgR2VvbWV0cnlEYXRhXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCUkVQXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIEJyZXBUb0dlb21ldHJ5RGF0YShub2RlOiBOb2RlRGF0YSk6IEdlb21ldHJ5RGF0YSB8IG51bGwge1xyXG4gICAgLyoqIEJyZXBzIGRvbid0IChjdXJyZW50bHkpIGhhdmUgaW5oZXJlbnQgZ2VvbWV0cnlpYyBkZXNjcmlwdGlvbiBpbiB0aGUgdmlld2VyLiBUaGV5IGFyZSByZXBsYWNlZFxyXG4gICAgICogYnkgdGhlaXIgbWVzaCBkaXNwbGF5IHZhbHVlc1xyXG4gICAgICovXHJcbiAgICBub2RlXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUkVHSU9OXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIFJlZ2lvbkdlb21ldHlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHwgbnVsbCB7XHJcbiAgICAvKiogUmVnaW9ucyBkb24ndCAoY3VycmVudGx5KSBoYXZlIGluaGVyZW50IGdlb21ldHJ5aWMgZGVzY3JpcHRpb24gaW4gdGhlIHZpZXdlci4gVGhleSBhcmUgcmVwbGFjZWRcclxuICAgICAqIGJ5IHRoZWlyIGRpc3BsYXkgdmFsdWVzXHJcbiAgICAgKi9cclxuICAgIG5vZGVcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNRVNIXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIE1lc2hUb0dlb21ldHJ5RGF0YShub2RlOiBOb2RlRGF0YSk6IEdlb21ldHJ5RGF0YSB8IG51bGwge1xyXG4gICAgaWYgKCFub2RlLnJhdykgcmV0dXJuIG51bGxcclxuXHJcbiAgICBjb25zdCBjb252ZXJzaW9uRmFjdG9yID0gZ2V0Q29udmVyc2lvbkZhY3Rvcihub2RlLnJhdy51bml0cylcclxuXHJcbiAgICBpZiAoIW5vZGUucmF3LnZlcnRpY2VzKSByZXR1cm4gbnVsbFxyXG4gICAgaWYgKCFub2RlLnJhdy5mYWNlcykgcmV0dXJuIG51bGxcclxuXHJcbiAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXHJcblxyXG4gICAgY29uc3QgdmVydGljZXMgPSBuZXcgQ2h1bmtBcnJheShub2RlLnJhdy52ZXJ0aWNlcylcclxuICAgIGNvbnN0IGZhY2VzID0gbmV3IENodW5rQXJyYXkobm9kZS5yYXcuZmFjZXMpXHJcbiAgICBjb25zdCBjb2xvcnNSYXcgPSB0aGlzLmNodW5rQXJyYXlIYXNEYXRhKG5vZGUucmF3LmNvbG9ycylcclxuICAgICAgPyBuZXcgQ2h1bmtBcnJheShub2RlLnJhdy5jb2xvcnMpXHJcbiAgICAgIDogdW5kZWZpbmVkXHJcbiAgICBsZXQgbm9ybWFscyA9IG5vZGUucmF3LnZlcnRleE5vcm1hbHNcclxuICAgICAgPyBuZXcgQ2h1bmtBcnJheShub2RlLnJhdy52ZXJ0ZXhOb3JtYWxzKVxyXG4gICAgICA6IHVuZGVmaW5lZFxyXG4gICAgbGV0IGNvbG9ycyA9IHVuZGVmaW5lZFxyXG4gICAgbGV0IGsgPSAwXHJcbiAgICBsZXQgdHJpYW5ndWxhdGVkID0gdHJ1ZVxyXG4gICAgbGV0IHRyaWFuZ3VsYXRlZEFycmF5U2l6ZSA9IDBcclxuICAgIHdoaWxlIChrIDwgZmFjZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGNodW5rSW5kZXggPSBmYWNlcy5maW5kQ2h1bmtJbmRleChrKVxyXG4gICAgICBpZiAoZmFjZXMuY2h1bmtBcnJheVtjaHVua0luZGV4XS5wcm9jZXNzZWQpIHtcclxuICAgICAgICBrICs9IGZhY2VzLmNodW5rQXJyYXlbY2h1bmtJbmRleF0uZGF0YS5sZW5ndGhcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBuID0gZmFjZXMuZ2V0KGspXHJcbiAgICAgIGlmIChuIDwgMykgbiArPSAzIC8vIDAgLT4gMywgMSAtPiA0XHJcbiAgICAgIGsgKz0gbiArIDFcclxuXHJcbiAgICAgIGlmIChuID09PSAzKSB7XHJcbiAgICAgICAgdHJpYW5ndWxhdGVkQXJyYXlTaXplICs9IDNcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRyaWFuZ3VsYXRlZEFycmF5U2l6ZSArPSAobiAtIDIpICogM1xyXG4gICAgICAgIHRyaWFuZ3VsYXRlZCA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbmRpY2VzID1cclxuICAgICAgdHJpYW5ndWxhdGVkQXJyYXlTaXplID49IDY1NTM1IHx8IHZlcnRpY2VzLmxlbmd0aCA+PSA2NTUzNVxyXG4gICAgICAgID8gbmV3IFVpbnQzMkFycmF5KHRyaWFuZ3VsYXRlZEFycmF5U2l6ZSlcclxuICAgICAgICA6IG5ldyBVaW50MTZBcnJheSh0cmlhbmd1bGF0ZWRBcnJheVNpemUpXHJcbiAgICBsZXQgaW5kaWNlc09mZnNldCA9IDBcclxuXHJcbiAgICBpZiAodHJpYW5ndWxhdGVkKSB7XHJcbiAgICAgIC8qKiBJZiBhbHJlYWR5IHRyaWFuZ3VsYXRlZCBtb2RmeSB0aGUgZmFjZXMgYXJyYXkgaW4gcGxhY2UgKi9cclxuICAgICAgZmFjZXMuY2h1bmtBcnJheS5mb3JFYWNoKChjaHVuazogRGF0YUNodW5rKSA9PiB7XHJcbiAgICAgICAgaWYgKGNodW5rLnByb2Nlc3NlZCkgcmV0dXJuXHJcblxyXG4gICAgICAgIGxldCB3cml0ZSA9IDBcclxuICAgICAgICBmb3IgKGxldCByZWFkID0gMDsgcmVhZCA8IGNodW5rLmRhdGEubGVuZ3RoOyByZWFkKyspIHtcclxuICAgICAgICAgIGlmIChyZWFkICUgNCAhPT0gMCkge1xyXG4gICAgICAgICAgICBjaHVuay5kYXRhW3dyaXRlKytdID0gY2h1bmsuZGF0YVtyZWFkXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjaHVuay5kYXRhLmxlbmd0aCA9IHdyaXRlXHJcbiAgICAgICAgY2h1bmsucHJvY2Vzc2VkID0gdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgICBmYWNlcy51cGRhdGVPZmZzZXRzKClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGsgPSAwXHJcbiAgICAgIHdoaWxlIChrIDwgZmFjZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgLyoqIFdlIHNraXAgdG8gdGhlIGVuZCBvZiB0cmlhbmd1bGF0ZWQgY2h1bmtzICovXHJcbiAgICAgICAgY29uc3QgY2h1bmtJbmRleCA9IGZhY2VzLmZpbmRDaHVua0luZGV4KGspXHJcbiAgICAgICAgaWYgKGZhY2VzLmNodW5rQXJyYXlbY2h1bmtJbmRleF0ucHJvY2Vzc2VkKSB7XHJcbiAgICAgICAgICBpbmRpY2VzLnNldChmYWNlcy5jaHVua3NbY2h1bmtJbmRleF0sIGspXHJcbiAgICAgICAgICBrICs9IGZhY2VzLmNodW5rQXJyYXlbY2h1bmtJbmRleF0uZGF0YS5sZW5ndGhcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBuID0gZmFjZXMuZ2V0KGspXHJcbiAgICAgICAgaWYgKG4gPCAzKSBuICs9IDMgLy8gMCAtPiAzLCAxIC0+IDRcclxuICAgICAgICBpZiAobiA9PT0gMykge1xyXG4gICAgICAgICAgLy8gVHJpYW5nbGUgZmFjZVxyXG4gICAgICAgICAgaW5kaWNlc1tpbmRpY2VzT2Zmc2V0XSA9IGZhY2VzLmdldChrICsgMSlcclxuICAgICAgICAgIGluZGljZXNbaW5kaWNlc09mZnNldCArIDFdID0gZmFjZXMuZ2V0KGsgKyAyKVxyXG4gICAgICAgICAgaW5kaWNlc1tpbmRpY2VzT2Zmc2V0ICsgMl0gPSBmYWNlcy5nZXQoayArIDMpXHJcbiAgICAgICAgICBpbmRpY2VzT2Zmc2V0ICs9IDNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgc3RhcnQxID0gcGVyZm9ybWFuY2Uubm93KClcclxuICAgICAgICAgIGNvbnN0IGluZGV4Q291bnQgPSBNZXNoVHJpYW5ndWxhdGlvbkhlbHBlci50cmlhbmd1bGF0ZUZhY2UoXHJcbiAgICAgICAgICAgIGssXHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGZhY2VzLFxyXG4gICAgICAgICAgICB2ZXJ0aWNlcyxcclxuICAgICAgICAgICAgaW5kaWNlcywgLy8gaW5vdXRcclxuICAgICAgICAgICAgaW5kaWNlc09mZnNldCAvLyBpblxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaW5kaWNlc09mZnNldCArPSBpbmRleENvdW50XHJcbiAgICAgICAgICB0aGlzLmFjdHVhbFRyaWFuZ3VsYXRlVGltZSArPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0MVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgayArPSBuICsgMVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tZXNoVHJpYW5ndWxhdGlvblRpbWUgKz0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFxyXG5cclxuICAgIGlmIChjb2xvcnNSYXcgJiYgY29sb3JzUmF3Lmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICBpZiAoY29sb3JzUmF3Lmxlbmd0aCAhPT0gdmVydGljZXMubGVuZ3RoIC8gMykge1xyXG4gICAgICAgIExvZ2dlci53YXJuKFxyXG4gICAgICAgICAgYE1lc2ggKGlkICR7bm9kZS5yYXcuaWR9KSBjb2xvdXJzIGFyZSBtaXNtYXRjaGVkIHdpdGggdmVydGljZSBjb3VudHMuIFRoZSBudW1iZXIgb2YgY29sb3VycyBtdXN0IGVxdWFsIHRoZSBudW1iZXIgb2YgdmVydGljZXMuYFxyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIC8qKiBXZSB3YW50IHRoZSBjb2xvcnMgaW4gbGluZWFyIHNwYWNlICovXHJcbiAgICAgICAgY29sb3JzID0gbmV3IENodW5rQXJyYXkoW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpZDogTWF0aFV0aWxzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VzOiAxLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLnVucGFja0NvbG9ycyhjb2xvcnNSYXcsIHRydWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAobm9ybWFscyAmJiBub3JtYWxzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICBpZiAobm9ybWFscy5sZW5ndGggIT09IHZlcnRpY2VzLmxlbmd0aCkge1xyXG4gICAgICAgIExvZ2dlci53YXJuKFxyXG4gICAgICAgICAgYE1lc2ggKGlkICR7bm9kZS5yYXcuaWR9KSBub3JtYWxzIGFyZSBtaXNtYXRjaGVkIHdpdGggdmVydGljZSBjb3VudHMuIFRoZSBudW1iZXIgb2Ygbm9ybWFscyBtdXN0IGVxdWFsIHRoZSBudW1iZXIgb2YgdmVydGljZXMuYFxyXG4gICAgICAgIClcclxuICAgICAgICBub3JtYWxzID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5vcm1hbHMgPSB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgUE9TSVRJT046IHZlcnRpY2VzLFxyXG4gICAgICAgIElOREVYOiB0cmlhbmd1bGF0ZWRcclxuICAgICAgICAgID8gZmFjZXNcclxuICAgICAgICAgIDogbmV3IENodW5rQXJyYXkoW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IGluZGljZXMgYXMgdW5rbm93biBhcyBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgIGlkOiBNYXRoVXRpbHMuZ2VuZXJhdGVVVUlEKCksXHJcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiAxXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAuLi4oY29sb3JzICYmIHsgQ09MT1I6IGNvbG9ycyB9KSxcclxuICAgICAgICAuLi4obm9ybWFscyAmJiB7IE5PUk1BTDogbm9ybWFscyB9KVxyXG4gICAgICB9LFxyXG4gICAgICBiYWtlVHJhbnNmb3JtOiBuZXcgTWF0cml4NCgpLm1ha2VTY2FsZShcclxuICAgICAgICBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICAgIGNvbnZlcnNpb25GYWN0b3IsXHJcbiAgICAgICAgY29udmVyc2lvbkZhY3RvclxyXG4gICAgICApLFxyXG4gICAgICB0cmFuc2Zvcm06IG51bGwsXHJcbiAgICAgIC4uLihub2RlLmluc3RhbmNlZCAmJiB7IGluc3RhbmNlZDogdHJ1ZSB9KVxyXG4gICAgfSBhcyBHZW9tZXRyeURhdGFcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJJTkFSWSBNRVNIXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIEJpbmFyeU1lc2hUb0dlb21ldHJ5RGF0YShub2RlOiBOb2RlRGF0YSk6IEdlb21ldHJ5RGF0YSB8IG51bGwge1xuICAgIGlmICghbm9kZS5yYXcpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBibG9iSWQgPSBgJHtub2RlLnJhdy5ibG9iSWQgfHwgJyd9YFxuICAgIGlmICghYmxvYklkKSB7XG4gICAgICBMb2dnZXIud2FybihgQmluYXJ5IG1lc2ggJHtub2RlLnJhdy5pZH0gaGFzIG5vIGJsb2JJZC4gR2VvbWV0cnkgc2tpcHBlZC5gKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IFNwZWNrbGVHZW9tZXRyeUNvbnZlcnRlci5ibG9iQ2FjaGVbYmxvYklkXVxuICAgIGlmICghYXJyYXlCdWZmZXIpIHtcbiAgICAgIExvZ2dlci53YXJuKGBCbG9iICR7YmxvYklkfSBub3QgcHJlbG9hZGVkLiBHZW9tZXRyeSBza2lwcGVkLmApXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHZlcnRleFN0YXJ0ID0gTnVtYmVyKG5vZGUucmF3LnZlcnRleFN0YXJ0IHx8IDApXG4gICAgY29uc3QgdmVydGV4Q291bnQgPSBOdW1iZXIobm9kZS5yYXcudmVydGV4Q291bnQgfHwgMClcbiAgICBjb25zdCBmYWNlU3RhcnQgPSBOdW1iZXIobm9kZS5yYXcuZmFjZVN0YXJ0IHx8IDApXG4gICAgY29uc3QgZmFjZUNvdW50ID0gTnVtYmVyKG5vZGUucmF3LmZhY2VDb3VudCB8fCAwKVxuXG4gICAgaWYgKCF2ZXJ0ZXhDb3VudCB8fCAhZmFjZUNvdW50KSB7XG4gICAgICBMb2dnZXIud2FybihgQmluYXJ5IG1lc2ggJHtub2RlLnJhdy5pZH0gaGFzIGVtcHR5IHZlcnRleCBvciBmYWNlIHJhbmdlcy5gKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJ0ZXhCeXRlT2Zmc2V0ID0gdmVydGV4U3RhcnQgKiA0XG4gICAgY29uc3QgZmFjZUJ5dGVPZmZzZXQgPSBmYWNlU3RhcnQgKiA0XG4gICAgY29uc3QgdmVydGV4Qnl0ZUxlbmd0aCA9IHZlcnRleENvdW50ICogNFxuICAgIGNvbnN0IGZhY2VCeXRlTGVuZ3RoID0gZmFjZUNvdW50ICogNFxuXG4gICAgaWYgKFxuICAgICAgdmVydGV4Qnl0ZU9mZnNldCA8IDAgfHxcbiAgICAgIGZhY2VCeXRlT2Zmc2V0IDwgMCB8fFxuICAgICAgdmVydGV4Qnl0ZU9mZnNldCArIHZlcnRleEJ5dGVMZW5ndGggPiBhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoIHx8XG4gICAgICBmYWNlQnl0ZU9mZnNldCArIGZhY2VCeXRlTGVuZ3RoID4gYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICkge1xuICAgICAgTG9nZ2VyLndhcm4oYEJpbmFyeSBtZXNoICR7bm9kZS5yYXcuaWR9IHJlZmVyZW5jZXMgZGF0YSBvdXRzaWRlIGJsb2IgJHtibG9iSWR9LmApXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShhcnJheUJ1ZmZlciwgdmVydGV4Qnl0ZU9mZnNldCwgdmVydGV4Q291bnQpXG4gICAgY29uc3QgZmFjZXMzMiA9IG5ldyBVaW50MzJBcnJheShhcnJheUJ1ZmZlciwgZmFjZUJ5dGVPZmZzZXQsIGZhY2VDb3VudClcbiAgICBjb25zdCBmYWNlcyA9IHZlcnRleENvdW50IC8gMyA+PSA2NTUzNSA/IGZhY2VzMzIgOiBVaW50MTZBcnJheS5mcm9tKGZhY2VzMzIpXG4gICAgY29uc3QgY29udmVyc2lvbkZhY3RvciA9IGdldENvbnZlcnNpb25GYWN0b3Iobm9kZS5yYXcudW5pdHMpXG5cbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBQT1NJVElPTjogbmV3IENodW5rQXJyYXkoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGE6IHZlcnRpY2VzIGFzIHVua25vd24gYXMgbnVtYmVyW10sXG4gICAgICAgICAgICBpZDogTWF0aFV0aWxzLmdlbmVyYXRlVVVJRCgpLFxuICAgICAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgICAgIH1cbiAgICAgICAgXSksXG4gICAgICAgIElOREVYOiBuZXcgQ2h1bmtBcnJheShbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGF0YTogZmFjZXMgYXMgdW5rbm93biBhcyBudW1iZXJbXSxcbiAgICAgICAgICAgIGlkOiBNYXRoVXRpbHMuZ2VuZXJhdGVVVUlEKCksXG4gICAgICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICAgICAgfVxuICAgICAgICBdKVxuICAgICAgfSxcbiAgICAgIGJha2VUcmFuc2Zvcm06IG5ldyBNYXRyaXg0KCkubWFrZVNjYWxlKFxuICAgICAgICBjb252ZXJzaW9uRmFjdG9yLFxuICAgICAgICBjb252ZXJzaW9uRmFjdG9yLFxuICAgICAgICBjb252ZXJzaW9uRmFjdG9yXG4gICAgICApLFxuICAgICAgdHJhbnNmb3JtOiBudWxsLFxuICAgICAgLi4uKG5vZGUuaW5zdGFuY2VkICYmIHsgaW5zdGFuY2VkOiB0cnVlIH0pXG4gICAgfSBhcyBHZW9tZXRyeURhdGFcbiAgfVxuXHJcbiAgLyoqXHJcbiAgICogVEVYVFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBUZXh0VG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEgfCBudWxsIHtcclxuICAgIGNvbnN0IGNvbnZlcnNpb25GYWN0b3IgPSBnZXRDb252ZXJzaW9uRmFjdG9yKG5vZGUucmF3LnVuaXRzKVxyXG4gICAgY29uc3QgcGxhbmUgPSBub2RlLnJhdy5wbGFuZSB8fCB7XHJcbiAgICAgIG9yaWdpbjogbm9kZS5yYXcub3JpZ2luLFxyXG4gICAgICB4ZGlyOiBuZXcgVmVjdG9yMygxLCAwLCAwKSxcclxuICAgICAgeWRpcjogbmV3IFZlY3RvcjMoMCwgMSwgMCksXHJcbiAgICAgIG5vcm1hbDogbmV3IFZlY3RvcjMoMCwgMCwgMSlcclxuICAgIH1cclxuICAgIGNvbnN0IGJpbGxib2FyZCA9IG5vZGUucmF3LnNjcmVlbk9yaWVudGVkIHx8IGZhbHNlXHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKHBsYW5lLm9yaWdpbi54LCBwbGFuZS5vcmlnaW4ueSwgcGxhbmUub3JpZ2luLnopXHJcbiAgICBjb25zdCBzY2FsZSA9IG5ldyBNYXRyaXg0KCkubWFrZVNjYWxlKFxyXG4gICAgICBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICBjb252ZXJzaW9uRmFjdG9yXHJcbiAgICApXHJcbiAgICAvKiogV2UgaWdub3JlIHJvdGF0aW9uIGlmIHNjcmVlbiBvcmllbnRlZCAqL1xyXG4gICAgY29uc3QgbWF0ID0gYmlsbGJvYXJkXHJcbiAgICAgID8gbmV3IE1hdHJpeDQoKVxyXG4gICAgICA6IG5ldyBNYXRyaXg0KCkubWFrZUJhc2lzKHBsYW5lLnhkaXIsIHBsYW5lLnlkaXIsIHBsYW5lLm5vcm1hbClcclxuICAgIG1hdC5zZXRQb3NpdGlvbihwb3NpdGlvbilcclxuICAgIG1hdC5wcmVtdWx0aXBseShzY2FsZSlcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGF0dHJpYnV0ZXM6IG51bGwsXHJcbiAgICAgIGJha2VUcmFuc2Zvcm06IG1hdCxcclxuICAgICAgdHJhbnNmb3JtOiBudWxsLFxyXG4gICAgICBtZXRhRGF0YTogbm9kZS5yYXdcclxuICAgIH0gYXMgR2VvbWV0cnlEYXRhXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQT0lOVFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBQb2ludFRvR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb252ZXJzaW9uRmFjdG9yID0gZ2V0Q29udmVyc2lvbkZhY3Rvcihub2RlLnJhdy51bml0cylcclxuICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuUG9pbnRUb0Zsb2F0QXJyYXkoXHJcbiAgICAgIG5vZGUucmF3IGFzIHsgdmFsdWU6IEFycmF5PG51bWJlcj47IHVuaXRzOiBzdHJpbmcgfSAmIHtcclxuICAgICAgICB4OiBudW1iZXJcclxuICAgICAgICB5OiBudW1iZXJcclxuICAgICAgICB6OiBudW1iZXJcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgIFBPU0lUSU9OOiBuZXcgQ2h1bmtBcnJheShbXHJcbiAgICAgICAgICB7IGRhdGE6IHBvaW50cywgaWQ6IE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKSwgcmVmZXJlbmNlczogMSB9XHJcbiAgICAgICAgXSlcclxuICAgICAgfSxcclxuICAgICAgYmFrZVRyYW5zZm9ybTogbmV3IE1hdHJpeDQoKS5tYWtlU2NhbGUoXHJcbiAgICAgICAgY29udmVyc2lvbkZhY3RvcixcclxuICAgICAgICBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICAgIGNvbnZlcnNpb25GYWN0b3JcclxuICAgICAgKSxcclxuICAgICAgdHJhbnNmb3JtOiBudWxsXHJcbiAgICB9IGFzIEdlb21ldHJ5RGF0YVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTElORVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBMaW5lVG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEgfCBudWxsIHtcclxuICAgIGNvbnN0IGNvbnZlcnNpb25GYWN0b3IgPSBnZXRDb252ZXJzaW9uRmFjdG9yKG5vZGUucmF3LnVuaXRzKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgIFBPU0lUSU9OOiBuZXcgQ2h1bmtBcnJheShbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuUG9pbnRUb0Zsb2F0QXJyYXkobm9kZS5yYXcuc3RhcnQpLmNvbmNhdChcclxuICAgICAgICAgICAgICB0aGlzLlBvaW50VG9GbG9hdEFycmF5KG5vZGUucmF3LmVuZClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgaWQ6IE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgICAgICAgcmVmZXJlbmNlczogMVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF0pXHJcbiAgICAgIH0sXHJcbiAgICAgIGJha2VUcmFuc2Zvcm06IG5ldyBNYXRyaXg0KCkubWFrZVNjYWxlKFxyXG4gICAgICAgIGNvbnZlcnNpb25GYWN0b3IsXHJcbiAgICAgICAgY29udmVyc2lvbkZhY3RvcixcclxuICAgICAgICBjb252ZXJzaW9uRmFjdG9yXHJcbiAgICAgICksXHJcbiAgICAgIHRyYW5zZm9ybTogbnVsbFxyXG4gICAgfSBhcyBHZW9tZXRyeURhdGFcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBPTFlMSU5FXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIFBvbHlsaW5lVG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEgfCBudWxsIHtcclxuICAgIGNvbnN0IGNvbnZlcnNpb25GYWN0b3IgPSBnZXRDb252ZXJzaW9uRmFjdG9yKG5vZGUucmF3LnVuaXRzKVxyXG4gICAgY29uc3QgY2h1bmtBcnJheSA9IG5ldyBDaHVua0FycmF5KG5vZGUucmF3LnZhbHVlKVxyXG5cclxuICAgIGxldCBvdXRDaHVuayA9IGNodW5rQXJyYXlcclxuICAgIGlmIChub2RlLnJhdy5jbG9zZWQpIHtcclxuICAgICAgY29uc3QgY29tcGxldGUgPSBuZXcgRmxvYXQzMkFycmF5KGNodW5rQXJyYXkubGVuZ3RoICsgMylcclxuICAgICAgY2h1bmtBcnJheS5jb3B5VG9CdWZmZXIoY29tcGxldGUsIDApXHJcbiAgICAgIGNvbXBsZXRlW2NodW5rQXJyYXkubGVuZ3RoXSA9IGNvbXBsZXRlWzBdXHJcbiAgICAgIGNvbXBsZXRlW2NodW5rQXJyYXkubGVuZ3RoICsgMV0gPSBjb21wbGV0ZVsxXVxyXG4gICAgICBjb21wbGV0ZVtjaHVua0FycmF5Lmxlbmd0aCArIDJdID0gY29tcGxldGVbMl1cclxuICAgICAgb3V0Q2h1bmsgPSBuZXcgQ2h1bmtBcnJheShbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZGF0YTogY29tcGxldGUgYXMgdW5rbm93biBhcyBudW1iZXJbXSxcclxuICAgICAgICAgIGlkOiBNYXRoVXRpbHMuZ2VuZXJhdGVVVUlEKCksXHJcbiAgICAgICAgICByZWZlcmVuY2VzOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICBdKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgIFBPU0lUSU9OOiBvdXRDaHVua1xyXG4gICAgICB9LFxyXG4gICAgICBiYWtlVHJhbnNmb3JtOiBuZXcgTWF0cml4NCgpLm1ha2VTY2FsZShcclxuICAgICAgICBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICAgIGNvbnZlcnNpb25GYWN0b3IsXHJcbiAgICAgICAgY29udmVyc2lvbkZhY3RvclxyXG4gICAgICApLFxyXG4gICAgICB0cmFuc2Zvcm06IG51bGxcclxuICAgIH0gYXMgR2VvbWV0cnlEYXRhXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCT1hcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgQm94VG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEgfCBudWxsIHtcclxuICAgIC8qKlxyXG4gICAgICogUmlnaHQsIHNvIHdlJ3JlIGNoZWF0aW5nIGhlcmUgYSBiaXQuIFdlJ3JlIHVzaW5nIHRocmVlJ3MgYm94IGdlb21ldHJ5XHJcbiAgICAgKiB0byBnZXQgdGhlIHZlcnRpY2VzIGFuZCBpbmRpY2VzLiBOb3JtYWxseSB3ZSBjb3VsZChzaG91bGQpIGRvIHRoYXQgYnkgaGFuZFxyXG4gICAgICogYnV0IGl0J3MgdG9vIGxhdGUgaW4gdGhlIGV2ZW5uaW5nIGF0bS4uLlxyXG4gICAgICovXHJcbiAgICBjb25zdCBjb252ZXJzaW9uRmFjdG9yID0gZ2V0Q29udmVyc2lvbkZhY3Rvcihub2RlLnJhdy51bml0cylcclxuXHJcbiAgICBjb25zdCBUID0gbmV3IE1hdHJpeDQoKVxyXG4gICAgY29uc3QgUiA9IG5ldyBNYXRyaXg0KClcclxuXHJcbiAgICBpZiAobm9kZS5yYXcuYmFzZVBsYW5lKSB7XHJcbiAgICAgIFQuc2V0UG9zaXRpb24odGhpcy5Qb2ludFRvVmVjdG9yMyhub2RlLnJhdy5iYXNlUGxhbmUub3JpZ2luKSlcclxuXHJcbiAgICAgIGNvbnN0IGVwcyA9IDFlLTdcclxuICAgICAgY29uc3QgYlggPSBuZXcgVmVjdG9yMygpLmNvcHkobm9kZS5yYXcuYmFzZVBsYW5lLnhkaXIpXHJcbiAgICAgIGNvbnN0IGJZID0gbmV3IFZlY3RvcjMoKS5jb3B5KG5vZGUucmF3LmJhc2VQbGFuZS55ZGlyKVxyXG4gICAgICBjb25zdCBiWiA9IG5ldyBWZWN0b3IzKCkuY29weShub2RlLnJhdy5iYXNlUGxhbmUubm9ybWFsKVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgTWF0aC5hYnMoYlguZG90KGJZKSkgPCBlcHMgJiZcclxuICAgICAgICBNYXRoLmFicyhiWC5kb3QoYlopKSA8IGVwcyAmJlxyXG4gICAgICAgIE1hdGguYWJzKGJZLmRvdChiWikpIDwgZXBzXHJcbiAgICAgIClcclxuICAgICAgICBSLm1ha2VCYXNpcyhcclxuICAgICAgICAgIG5vZGUucmF3LmJhc2VQbGFuZS54ZGlyLFxyXG4gICAgICAgICAgbm9kZS5yYXcuYmFzZVBsYW5lLnlkaXIsXHJcbiAgICAgICAgICBub2RlLnJhdy5iYXNlUGxhbmUubm9ybWFsXHJcbiAgICAgICAgKVxyXG4gICAgICBlbHNlIExvZ2dlci53YXJuKGBCb3ggJHtub2RlLnJhdy5pZH0gZG9lcyBub3QgaGF2ZSBvcnRob2dvbmFsIGJhc2UgcGxhbmUgdmVjdG9yc2ApXHJcbiAgICB9IGVsc2UgTG9nZ2VyLndhcm4oYEJveCAke25vZGUucmF3LmlkfSBpcyBtaXNzaW5nIGl0J3MgYmFzZSBwbGFuZWApXHJcblxyXG4gICAgY29uc3Qgd2lkdGggPSAobm9kZS5yYXcueFNpemUuZW5kIC0gbm9kZS5yYXcueFNpemUuc3RhcnQpICogY29udmVyc2lvbkZhY3RvclxyXG4gICAgY29uc3QgZGVwdGggPSAobm9kZS5yYXcueVNpemUuZW5kIC0gbm9kZS5yYXcueVNpemUuc3RhcnQpICogY29udmVyc2lvbkZhY3RvclxyXG4gICAgY29uc3QgaGVpZ2h0ID0gKG5vZGUucmF3LnpTaXplLmVuZCAtIG5vZGUucmF3LnpTaXplLnN0YXJ0KSAqIGNvbnZlcnNpb25GYWN0b3JcclxuXHJcbiAgICAvLyBjb25zdCBib3ggPSBuZXcgQm94QnVmZmVyR2VvbWV0cnkod2lkdGgsIGRlcHRoLCBoZWlnaHQsIDEsIDEsIDEpXHJcbiAgICBjb25zdCBib3gzID0gbmV3IEJveDMoXHJcbiAgICAgIG5ldyBWZWN0b3IzKC13aWR0aCAqIDAuNSwgLWRlcHRoICogMC41LCAtaGVpZ2h0ICogMC41KSxcclxuICAgICAgbmV3IFZlY3RvcjMod2lkdGggKiAwLjUsIGRlcHRoICogMC41LCBoZWlnaHQgKiAwLjUpXHJcbiAgICApXHJcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcclxuICAgIGNvbnN0IGVkZ2VzID0gW1xyXG4gICAgICBib3gzLm1pbi54LCBib3gzLm1pbi55LCBib3gzLm1pbi56LCBcclxuICAgICAgYm94My5taW4ueCwgYm94My5tYXgueSwgYm94My5taW4ueixcclxuICAgICAgYm94My5taW4ueCwgYm94My5taW4ueSwgYm94My5tYXgueixcclxuICAgICAgYm94My5taW4ueCwgYm94My5tYXgueSwgYm94My5tYXgueixcclxuICAgICAgYm94My5taW4ueCwgYm94My5taW4ueSwgYm94My5taW4ueixcclxuICAgICAgYm94My5taW4ueCwgYm94My5taW4ueSwgYm94My5tYXgueixcclxuICAgICAgYm94My5taW4ueCwgYm94My5tYXgueSwgYm94My5taW4ueixcclxuICAgICAgYm94My5taW4ueCwgYm94My5tYXgueSwgYm94My5tYXgueixcclxuXHJcbiAgICAgIGJveDMubWF4LngsIGJveDMubWluLnksIGJveDMubWluLnosIFxyXG4gICAgICBib3gzLm1heC54LCBib3gzLm1heC55LCBib3gzLm1pbi56LFxyXG4gICAgICBib3gzLm1heC54LCBib3gzLm1pbi55LCBib3gzLm1heC56LFxyXG4gICAgICBib3gzLm1heC54LCBib3gzLm1heC55LCBib3gzLm1heC56LFxyXG4gICAgICBib3gzLm1heC54LCBib3gzLm1pbi55LCBib3gzLm1pbi56LFxyXG4gICAgICBib3gzLm1heC54LCBib3gzLm1pbi55LCBib3gzLm1heC56LFxyXG4gICAgICBib3gzLm1heC54LCBib3gzLm1heC55LCBib3gzLm1pbi56LFxyXG4gICAgICBib3gzLm1heC54LCBib3gzLm1heC55LCBib3gzLm1heC56LFxyXG5cclxuICAgICAgYm94My5tYXgueCwgYm94My5taW4ueSwgYm94My5tYXgueiwgXHJcbiAgICAgIGJveDMubWluLngsIGJveDMubWluLnksIGJveDMubWF4LnosXHJcbiAgICAgIGJveDMubWF4LngsIGJveDMubWluLnksIGJveDMubWluLnosIFxyXG4gICAgICBib3gzLm1pbi54LCBib3gzLm1pbi55LCBib3gzLm1pbi56LFxyXG4gICAgICBib3gzLm1heC54LCBib3gzLm1heC55LCBib3gzLm1heC56LCBcclxuICAgICAgYm94My5taW4ueCwgYm94My5tYXgueSwgYm94My5tYXgueixcclxuICAgICAgYm94My5tYXgueCwgYm94My5tYXgueSwgYm94My5taW4ueiwgXHJcbiAgICAgIGJveDMubWluLngsIGJveDMubWF4LnksIGJveDMubWluLnosXHJcbiAgICAgIFxyXG4gICAgXVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICBQT1NJVElPTjogbmV3IENodW5rQXJyYXkoW1xyXG4gICAgICAgICAgeyBkYXRhOiBlZGdlcywgaWQ6IE1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKSwgcmVmZXJlbmNlczogMSB9XHJcbiAgICAgICAgXSlcclxuICAgICAgfSxcclxuICAgICAgYmFrZVRyYW5zZm9ybTogbmV3IE1hdHJpeDQoKS5jb3B5KFQpLm11bHRpcGx5KFIpLFxyXG4gICAgICB0cmFuc2Zvcm06IG51bGxcclxuICAgIH0gYXMgR2VvbWV0cnlEYXRhXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQT0xZQ1VSVkVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgUG9seWN1cnZlVG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEgfCBudWxsIHtcclxuICAgIGlmICghbm9kZS5uZXN0ZWROb2RlcyB8fCBub2RlLm5lc3RlZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG4gICAgY29uc3QgYnVmZmVycyA9IFtdXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLm5lc3RlZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBub2RlLm5lc3RlZE5vZGVzW2ldLm1vZGVsXHJcbiAgICAgIGNvbnN0IGNvbnYgPSB0aGlzLmNvbnZlcnROb2RlVG9HZW9tZXRyeURhdGEoZWxlbWVudClcclxuICAgICAgYnVmZmVycy5wdXNoKGNvbnYpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gR2VvbWV0cnkubWVyZ2VHZW9tZXRyeURhdGEoYnVmZmVycyBhcyBHZW9tZXRyeURhdGFbXSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENVUlZFXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIEN1cnZlVG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEgfCBudWxsIHtcclxuICAgIGlmICghbm9kZS5uZXN0ZWROb2RlcyB8fCBub2RlLm5lc3RlZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBvbHlsaW5lR2VvbWV0cnkgPSB0aGlzLlBvbHlsaW5lVG9HZW9tZXRyeURhdGEobm9kZS5uZXN0ZWROb2Rlc1swXS5tb2RlbClcclxuICAgIGlmICghcG9seWxpbmVHZW9tZXRyeSB8fCAhcG9seWxpbmVHZW9tZXRyeS5hdHRyaWJ1dGVzKSByZXR1cm4gbnVsbFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgIFBPU0lUSU9OOiBwb2x5bGluZUdlb21ldHJ5LmF0dHJpYnV0ZXMuUE9TSVRJT05cclxuICAgICAgfSxcclxuICAgICAgYmFrZVRyYW5zZm9ybTogcG9seWxpbmVHZW9tZXRyeS5iYWtlVHJhbnNmb3JtLFxyXG4gICAgICB0cmFuc2Zvcm06IG51bGxcclxuICAgIH0gYXMgR2VvbWV0cnlEYXRhXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDSVJDTEVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgQ2lyY2xlVG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEgfCBudWxsIHtcclxuICAgIGNvbnN0IGNvbnZlcnNpb25GYWN0b3IgPSBnZXRDb252ZXJzaW9uRmFjdG9yKG5vZGUucmF3LnVuaXRzKVxyXG4gICAgY29uc3QgcG9pbnRzID0gdGhpcy5nZXRDaXJjdWxhckN1cnZlUG9pbnRzKFxyXG4gICAgICBub2RlLnJhdy5wbGFuZSxcclxuICAgICAgbm9kZS5yYXcucmFkaXVzICogY29udmVyc2lvbkZhY3RvclxyXG4gICAgKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgIFBPU0lUSU9OOiBuZXcgQ2h1bmtBcnJheShbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGRhdGE6IHBvaW50cyBhcyB1bmtub3duIGFzIG51bWJlcltdLFxyXG4gICAgICAgICAgICBpZDogTWF0aFV0aWxzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VzOiAxXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSlcclxuICAgICAgfSxcclxuICAgICAgYmFrZVRyYW5zZm9ybTogbnVsbCxcclxuICAgICAgdHJhbnNmb3JtOiBudWxsXHJcbiAgICB9IGFzIEdlb21ldHJ5RGF0YVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQVJDXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIEFyY1RvR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHwgbnVsbCB7XHJcbiAgICBjb25zdCBvcmlnaW4gPSBuZXcgVmVjdG9yMyhcclxuICAgICAgbm9kZS5yYXcucGxhbmUub3JpZ2luLngsXHJcbiAgICAgIG5vZGUucmF3LnBsYW5lLm9yaWdpbi55LFxyXG4gICAgICBub2RlLnJhdy5wbGFuZS5vcmlnaW4uelxyXG4gICAgKVxyXG4gICAgY29uc3Qgc3RhcnRQb2ludCA9IG5ldyBWZWN0b3IzKFxyXG4gICAgICBub2RlLnJhdy5zdGFydFBvaW50LngsXHJcbiAgICAgIG5vZGUucmF3LnN0YXJ0UG9pbnQueSxcclxuICAgICAgbm9kZS5yYXcuc3RhcnRQb2ludC56XHJcbiAgICApXHJcbiAgICBjb25zdCBlbmRQb2ludCA9IG5ldyBWZWN0b3IzKFxyXG4gICAgICBub2RlLnJhdy5lbmRQb2ludC54LFxyXG4gICAgICBub2RlLnJhdy5lbmRQb2ludC55LFxyXG4gICAgICBub2RlLnJhdy5lbmRQb2ludC56XHJcbiAgICApXHJcbiAgICBjb25zdCBtaWRQb2ludCA9IG5ldyBWZWN0b3IzKFxyXG4gICAgICBub2RlLnJhdy5taWRQb2ludC54LFxyXG4gICAgICBub2RlLnJhdy5taWRQb2ludC55LFxyXG4gICAgICBub2RlLnJhdy5taWRQb2ludC56XHJcbiAgICApXHJcblxyXG4gICAgLyoqIFRoZSBhcmMncyAnbWlkUG9pbnQnIGlzIG5vdCByZWFsbHkgYSAnbWlkJyBwb2ludC4gSXQncyBqdXN0IGFub3RoZXIgcG9pbnQgYWxvbmcgdGhlIGFyYyBnb2luZyBmcm9tXHJcbiAgICAgKiAgc3RhcnQgcG9pbnQgdG8gdGhlIGVuZCBwb2ludC4gV2UgZ2V0IHRoZSBhcmMncyB3aW5kaW5nIGJ5IHVzaW5nIHRoZSBkaXJlY3Rpb25zIGZyb20gc3RhcnQgYW5kIGVuZFxyXG4gICAgICogIHRvd2FyZHMgdGhlIG1pZCBwb2ludFxyXG4gICAgICovXHJcbiAgICBjb25zdCBkZDAgPSBuZXcgVmVjdG9yMygpLnN1YlZlY3RvcnMoc3RhcnRQb2ludCwgbWlkUG9pbnQpLm5vcm1hbGl6ZSgpXHJcbiAgICBjb25zdCBkZDEgPSBuZXcgVmVjdG9yMygpLnN1YlZlY3RvcnMoZW5kUG9pbnQsIG1pZFBvaW50KS5ub3JtYWxpemUoKVxyXG4gICAgY29uc3QgX2Nsb2Nrd2lzZSA9IGRkMC5kb3QoZGQxKSA+IDBcclxuXHJcbiAgICAvLyBIZXJlIHdlIGNvbXB1dGUgYXJjJ3Mgb3J0aG9ub3JtYWwgYmFzaXMgdmVjdG9ycyB1c2luZyB0aGUgb3JpZ2luIGFuZCB0aGUgdHdvIGVuZCBwb2ludHMuXHJcbiAgICBjb25zdCB2MCA9IG5ldyBWZWN0b3IzKCkuc3ViVmVjdG9ycyhzdGFydFBvaW50LCBvcmlnaW4pXHJcbiAgICB2MC5ub3JtYWxpemUoKVxyXG4gICAgY29uc3QgdjEgPSBuZXcgVmVjdG9yMygpLnN1YlZlY3RvcnMoZW5kUG9pbnQsIG9yaWdpbilcclxuICAgIHYxLm5vcm1hbGl6ZSgpXHJcbiAgICBjb25zdCB2MiA9IG5ldyBWZWN0b3IzKCkuY3Jvc3NWZWN0b3JzKHYwLCB2MSlcclxuICAgIHYyLm5vcm1hbGl6ZSgpXHJcbiAgICAvKiogV2hlbiB0aGUgYXJjIGhhcyBhbiBhbmdsZSBvZiBQSSwgdGhlIGRpcmVjdGlvbnMgZnJvbSBzdGFydCBhbmQgZW5kIHRvIG9yaWdpblxyXG4gICAgICogIGZhY2UgYXdheSBmcm9tIGVhY2ggb3RoZXIsIG1ha2luZyB0aGUgY3Jvc3MgcHJvZHVjdCByZXR1cm4gMCwgYW5kIHdlIGVuZCB1cFxyXG4gICAgICogIHdpdGggYW4gaW5jb3JyZWN0IG9ydGhvbm9ybWFsIGJhc2lzLlxyXG4gICAgICovXHJcbiAgICBpZiAodjIubGVuZ3RoKCkgPT09IDApIHtcclxuICAgICAgLyoqIFdlIGNvbXB1dGUgdGhlIHBsYW5lIG5vcm1hbCB1c2luZyB0aGUgbWlkIHBvaW50IGluc3RlYWQgb2YgdGhlIHN0YXJ0IHBvaW50Ki9cclxuICAgICAgY29uc3Qgdm0gPSBuZXcgVmVjdG9yMygpLnN1YlZlY3RvcnMobWlkUG9pbnQsIG9yaWdpbilcclxuICAgICAgdm0ubm9ybWFsaXplKClcclxuICAgICAgdjIuY29weShuZXcgVmVjdG9yMygpLmNyb3NzVmVjdG9ycyh2MCwgdm0pKVxyXG4gICAgICB2Mi5ub3JtYWxpemUoKVxyXG4gICAgfVxyXG4gICAgY29uc3QgdjMgPSBuZXcgVmVjdG9yMygpLmNyb3NzVmVjdG9ycyh2MiwgdjApXHJcbiAgICB2My5ub3JtYWxpemUoKVxyXG4gICAgLyoqXHJcbiAgICAgKiBXZSBjbGFtcCB0aGUgZG90IHZhbHVlIHRvIFstMSwxXSBzaW5jZSB0aGF0J3MgdGhlIGRvbWFpbiBhY29zIGlzIGRlZmluZWQgb24uIE5vcm1hbGx5IGRvdCB3b24ndCByZXR1cm5cclxuICAgICAqIHZhbHVlcyBvdXRzaWRlIHRoYXQgaW50ZXJ2YWwsIGJ1dCBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uLCB5b3Ugc29tZXRpbWVzIGdldCAtMS4wMDAwMDAwMDA0LCB3aGljaFxyXG4gICAgICogbWFrZXMgYWNvcyByZXR1cm4gTmFOXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGRvdCA9IE1hdGgubWluKE1hdGgubWF4KHYwLmRvdCh2MSksIC0xKSwgMSlcclxuICAgIC8vIFRoaXMgaXMganVzdCB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBwb2ludHMuIFNob3VsZCBiZSBzYW1lIGFzIG9iai5hbmdsZVJhZGlhbnMob3Igc29tZXRoaW5nKVxyXG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmFjb3MoZG90KVxyXG4gICAgY29uc3QgcmFkaXVzID0gbm9kZS5yYXcucmFkaXVzXHJcbiAgICAvLyBXZSBkcmF3IHRoZSBhcmMgaW4gYSBsb2NhbCB1bi1yb3RhdGVkIGNvb3JkaW5hdGUgc3lzdGVtLiBXZSByb3RhdGUgaXQgbGF0ZXIgb24gdmlhIHRyYW5zZm9ybWF0aW9uXHJcbiAgICBjb25zdCBjdXJ2ZSA9IG5ldyBFbGxpcHNlQ3VydmUoXHJcbiAgICAgIDAsXHJcbiAgICAgIDAsIC8vIGF4LCBhWVxyXG4gICAgICByYWRpdXMsXHJcbiAgICAgIHJhZGl1cywgLy8geFJhZGl1cywgeVJhZGl1c1xyXG4gICAgICAwLFxyXG4gICAgICBhbmdsZSwgLy8gYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZVxyXG4gICAgICBfY2xvY2t3aXNlLCAvLyBhQ2xvY2t3aXNlXHJcbiAgICAgIDAgLy8gYVJvdGF0aW9uXHJcbiAgICApXHJcbiAgICAvLyBUaGlzIGp1c3Qgc2FtcGxlcyBwb2ludHMgYWxvbmcgdGhlIGFyYyBjdXJ2ZVxyXG4gICAgY29uc3QgcG9pbnRzID0gY3VydmUuZ2V0UG9pbnRzKDUwKVxyXG5cclxuICAgIGNvbnN0IG1hdHJpeCA9IG5ldyBNYXRyaXg0KClcclxuICAgIC8vIFNjYWxlIGZpcnN0LCBpbiBvcmRlciBmb3IgdGhlIGNvbXBvc2l0aW9uIHRvIHdvcmsgY29ycmVjdGx5XHJcbiAgICBjb25zdCBjb252ZXJzaW9uRmFjdG9yID0gZ2V0Q29udmVyc2lvbkZhY3Rvcihub2RlLnJhdy5wbGFuZS51bml0cylcclxuICAgIC8vIFdlIGRldGVybWluZSB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBsYW5lIHVzaW5nIHRoZSB0aHJlZSBiYXNpcyB2ZWN0b3JzIGNvbXB1dGVkIGFib3ZlXHJcbiAgICBjb25zdCBSID0gbmV3IE1hdHJpeDQoKS5tYWtlQmFzaXModjAsIHYzLCB2MilcclxuICAgIC8vIFdlIHRyYW5zbGF0ZSBpdCB0byB0aGUgY2lyY2xlJ3Mgb3JpZ2luIChjb25zaWRlcmluZyB0aGUgb3JpZ2luJ3Mgc2NhbGluZyBhcyBhc3dlbGwgKVxyXG4gICAgY29uc3QgVCA9IG5ldyBNYXRyaXg0KCkuc2V0UG9zaXRpb24ob3JpZ2luLm11bHRpcGx5U2NhbGFyKGNvbnZlcnNpb25GYWN0b3IpKVxyXG5cclxuICAgIG1hdHJpeC5tdWx0aXBseShUKS5tdWx0aXBseShSKVxyXG5cclxuICAgIC8vIGlmIChzY2FsZSkge1xyXG4gICAgY29uc3QgUyA9IG5ldyBNYXRyaXg0KCkuc2NhbGUoXHJcbiAgICAgIG5ldyBWZWN0b3IzKGNvbnZlcnNpb25GYWN0b3IsIGNvbnZlcnNpb25GYWN0b3IsIGNvbnZlcnNpb25GYWN0b3IpXHJcbiAgICApXHJcbiAgICBtYXRyaXgubXVsdGlwbHkoUylcclxuICAgIC8vIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgUE9TSVRJT046IG5ldyBDaHVua0FycmF5KFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5GbGF0dGVuVmVjdG9yM0FycmF5KHBvaW50cyksXHJcbiAgICAgICAgICAgIGlkOiBNYXRoVXRpbHMuZ2VuZXJhdGVVVUlEKCksXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IDFcclxuICAgICAgICAgIH1cclxuICAgICAgICBdKVxyXG4gICAgICB9LFxyXG4gICAgICBiYWtlVHJhbnNmb3JtOiBtYXRyaXgsXHJcbiAgICAgIHRyYW5zZm9ybTogbnVsbFxyXG4gICAgfSBhcyBHZW9tZXRyeURhdGFcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVMTElQU0VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgRWxsaXBzZVRvR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb252ZXJzaW9uRmFjdG9yID0gZ2V0Q29udmVyc2lvbkZhY3Rvcihub2RlLnJhdy51bml0cylcclxuXHJcbiAgICBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMyhcclxuICAgICAgbm9kZS5yYXcucGxhbmUub3JpZ2luLngsXHJcbiAgICAgIG5vZGUucmF3LnBsYW5lLm9yaWdpbi55LFxyXG4gICAgICBub2RlLnJhdy5wbGFuZS5vcmlnaW4uelxyXG4gICAgKS5tdWx0aXBseVNjYWxhcihjb252ZXJzaW9uRmFjdG9yKVxyXG4gICAgY29uc3QgeEF4aXMgPSBuZXcgVmVjdG9yMyhcclxuICAgICAgbm9kZS5yYXcucGxhbmUueGRpci54LFxyXG4gICAgICBub2RlLnJhdy5wbGFuZS54ZGlyLnksXHJcbiAgICAgIG5vZGUucmF3LnBsYW5lLnhkaXIuelxyXG4gICAgKS5ub3JtYWxpemUoKVxyXG4gICAgY29uc3QgeUF4aXMgPSBuZXcgVmVjdG9yMyhcclxuICAgICAgbm9kZS5yYXcucGxhbmUueWRpci54LFxyXG4gICAgICBub2RlLnJhdy5wbGFuZS55ZGlyLnksXHJcbiAgICAgIG5vZGUucmF3LnBsYW5lLnlkaXIuelxyXG4gICAgKS5ub3JtYWxpemUoKVxyXG5cclxuICAgIGxldCByZXNvbHV0aW9uID0gMiAqIE1hdGguUEkgKiBub2RlLnJhdy5maXJzdFJhZGl1cyAqIGNvbnZlcnNpb25GYWN0b3IgKiAxMFxyXG4gICAgcmVzb2x1dGlvbiA9IHBhcnNlSW50KHJlc29sdXRpb24udG9TdHJpbmcoKSlcclxuICAgIGNvbnN0IHBvaW50cyA9IFtdXHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8PSByZXNvbHV0aW9uOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IHQgPSAoaW5kZXggKiBNYXRoLlBJICogMikgLyByZXNvbHV0aW9uXHJcbiAgICAgIGNvbnN0IHggPSBNYXRoLmNvcyh0KSAqIG5vZGUucmF3LmZpcnN0UmFkaXVzICogY29udmVyc2lvbkZhY3RvclxyXG4gICAgICBjb25zdCB5ID0gTWF0aC5zaW4odCkgKiBub2RlLnJhdy5zZWNvbmRSYWRpdXMgKiBjb252ZXJzaW9uRmFjdG9yXHJcbiAgICAgIGNvbnN0IHhNb3ZlID0gbmV3IFZlY3RvcjMoeEF4aXMueCAqIHgsIHhBeGlzLnkgKiB4LCB4QXhpcy56ICogeClcclxuICAgICAgY29uc3QgeU1vdmUgPSBuZXcgVmVjdG9yMyh5QXhpcy54ICogeSwgeUF4aXMueSAqIHksIHlBeGlzLnogKiB5KVxyXG5cclxuICAgICAgY29uc3QgcHQgPSBuZXcgVmVjdG9yMygpLmFkZFZlY3RvcnMoeE1vdmUsIHlNb3ZlKS5hZGQoY2VudGVyKVxyXG4gICAgICBwb2ludHMucHVzaChwdClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgUE9TSVRJT046IG5ldyBDaHVua0FycmF5KFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5GbGF0dGVuVmVjdG9yM0FycmF5KHBvaW50cyksXHJcbiAgICAgICAgICAgIGlkOiBNYXRoVXRpbHMuZ2VuZXJhdGVVVUlEKCksXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IDFcclxuICAgICAgICAgIH1cclxuICAgICAgICBdKVxyXG4gICAgICB9LFxyXG4gICAgICBiYWtlVHJhbnNmb3JtOiBudWxsLFxyXG4gICAgICB0cmFuc2Zvcm06IG51bGxcclxuICAgIH0gYXMgR2VvbWV0cnlEYXRhXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVVElMU1xyXG4gICAqL1xyXG5cclxuICBwcm90ZWN0ZWQgZ2V0Q2lyY3VsYXJDdXJ2ZVBvaW50cyhcclxuICAgIHBsYW5lOiB7XHJcbiAgICAgIHhkaXI6IHsgdmFsdWU6IEFycmF5PG51bWJlcj47IHVuaXRzOiBzdHJpbmcgfSAmIHtcclxuICAgICAgICB4OiBudW1iZXJcclxuICAgICAgICB5OiBudW1iZXJcclxuICAgICAgICB6OiBudW1iZXJcclxuICAgICAgfVxyXG4gICAgICB5ZGlyOiB7IHZhbHVlOiBBcnJheTxudW1iZXI+OyB1bml0czogc3RyaW5nIH0gJiB7XHJcbiAgICAgICAgeDogbnVtYmVyXHJcbiAgICAgICAgeTogbnVtYmVyXHJcbiAgICAgICAgejogbnVtYmVyXHJcbiAgICAgIH1cclxuICAgICAgb3JpZ2luOiB7IHZhbHVlOiBBcnJheTxudW1iZXI+OyB1bml0czogc3RyaW5nIH0gJiB7XHJcbiAgICAgICAgeDogbnVtYmVyXHJcbiAgICAgICAgeTogbnVtYmVyXHJcbiAgICAgICAgejogbnVtYmVyXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICByYWRpdXM6IG51bWJlcixcclxuICAgIHN0YXJ0QW5nbGUgPSAwLFxyXG4gICAgZW5kQW5nbGUgPSAyICogTWF0aC5QSSxcclxuICAgIHJlc29sdXRpb24gPSAxMjdcclxuICApIHtcclxuICAgIC8vIEdldCBhbGlnbm1lbnQgdmVjdG9yc1xyXG4gICAgY29uc3QgY2VudGVyID0gdGhpcy5Qb2ludFRvVmVjdG9yMyhwbGFuZS5vcmlnaW4sIF92ZWMzMClcclxuICAgIGNvbnN0IHhBeGlzID0gdGhpcy5Qb2ludFRvVmVjdG9yMyhwbGFuZS54ZGlyLCBfdmVjMzEpXHJcbiAgICBjb25zdCB5QXhpcyA9IHRoaXMuUG9pbnRUb1ZlY3RvcjMocGxhbmUueWRpciwgX3ZlYzMyKVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSBwbGFuZSBheGlzIGFyZSB1bml0IGxlbmd0aCEhISFcclxuICAgIHhBeGlzLm5vcm1hbGl6ZSgpXHJcbiAgICB5QXhpcy5ub3JtYWxpemUoKVxyXG5cclxuICAgIC8vIERldGVybWluZSByZXNvbHV0aW9uXHJcbiAgICAvKiogQWxleCAwNy4wOC4yMDI1OiBUaGlzIGNhbiBibG93dXAgZm9yIHZlcnkgbGFyZ2UgY2lyY2xlcywgc28gd2UgdXNlIGEgZml4ZWQgbnVtYmVyIG9mIHNhbXBsZSBwb2ludHMgKi9cclxuICAgIC8vIGxldCByZXNvbHV0aW9uID0gKChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpICogcmFkaXVzKSAvIHJlc1xyXG4gICAgLy8gcmVzb2x1dGlvbiA9IHBhcnNlSW50KHJlc29sdXRpb24udG9TdHJpbmcoKSlcclxuXHJcbiAgICAvKiogTm90IGVjc3RhdGljIGFib3V0IHVzaW5nIEZsb2F0NjQsIGJ1dCBpdCAqbWlnaHQqIGJlIG5lZWRlZC4gU3RpbGwgYmV0dGVyIHRoYW4gbnVtYmVyW10gaW4gYW55IGNhc2UgKi9cclxuICAgIGNvbnN0IHBvaW50cyA9IG5ldyBGbG9hdDY0QXJyYXkoKHJlc29sdXRpb24gKyAxKSAqIDMpXHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8PSByZXNvbHV0aW9uOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IHQgPSBzdGFydEFuZ2xlICsgKGluZGV4ICogKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSkpIC8gcmVzb2x1dGlvblxyXG4gICAgICBjb25zdCB4ID0gTWF0aC5jb3ModCkgKiByYWRpdXNcclxuICAgICAgY29uc3QgeSA9IE1hdGguc2luKHQpICogcmFkaXVzXHJcbiAgICAgIGNvbnN0IHhNb3ZlID0gX3ZlYzMzLnNldCh4QXhpcy54ICogeCwgeEF4aXMueSAqIHgsIHhBeGlzLnogKiB4KVxyXG4gICAgICBjb25zdCB5TW92ZSA9IF92ZWMzNC5zZXQoeUF4aXMueCAqIHksIHlBeGlzLnkgKiB5LCB5QXhpcy56ICogeSlcclxuXHJcbiAgICAgIGNvbnN0IHB0ID0gX3ZlYzM1LmFkZFZlY3RvcnMoeE1vdmUsIHlNb3ZlKS5hZGQoY2VudGVyKVxyXG5cclxuICAgICAgcG9pbnRzW2luZGV4ICogM10gPSBwdC54XHJcbiAgICAgIHBvaW50c1tpbmRleCAqIDMgKyAxXSA9IHB0LnlcclxuICAgICAgcG9pbnRzW2luZGV4ICogMyArIDJdID0gcHQuelxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvaW50c1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIFBvaW50VG9WZWN0b3IzKFxyXG4gICAgb2JqOiB7IHZhbHVlOiBBcnJheTxudW1iZXI+OyB1bml0czogc3RyaW5nIH0gJiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSxcclxuICAgIHRhcmdldD86IFZlY3RvcjMsXHJcbiAgICBzY2FsZSA9IHRydWVcclxuICApIHtcclxuICAgIGNvbnN0IGNvbnZlcnNpb25GYWN0b3IgPSBzY2FsZSA/IGdldENvbnZlcnNpb25GYWN0b3Iob2JqLnVuaXRzKSA6IDFcclxuICAgIGNvbnN0IHYgPSB0YXJnZXQgPyB0YXJnZXQgOiBuZXcgVmVjdG9yMygpXHJcbiAgICBpZiAob2JqLnZhbHVlKSB7XHJcbiAgICAgIC8vIE9sZCBwb2ludCBmb3JtYXQgYmFzZWQgb24gdmFsdWUgbGlzdFxyXG4gICAgICB2LnNldChcclxuICAgICAgICBvYmoudmFsdWVbMF0gKiBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICAgIG9iai52YWx1ZVsxXSAqIGNvbnZlcnNpb25GYWN0b3IsXHJcbiAgICAgICAgb2JqLnZhbHVlWzJdICogY29udmVyc2lvbkZhY3RvclxyXG4gICAgICApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBOZXcgcG9pbnQgZm9ybWF0IGJhc2VkIG9uIGNhcnRlc2lhbiBjb29yZHNcclxuICAgICAgdi5zZXQoXHJcbiAgICAgICAgb2JqLnggKiBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICAgIG9iai55ICogY29udmVyc2lvbkZhY3RvcixcclxuICAgICAgICBvYmoueiAqIGNvbnZlcnNpb25GYWN0b3JcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBQb2ludFRvRmxvYXRBcnJheShcclxuICAgIG9iajogeyB2YWx1ZTogQXJyYXk8bnVtYmVyPjsgdW5pdHM6IHN0cmluZyB9ICYgeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH1cclxuICApIHtcclxuICAgIGlmIChvYmoudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIFtvYmoudmFsdWVbMF0sIG9iai52YWx1ZVsxXSwgb2JqLnZhbHVlWzJdXVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtvYmoueCwgb2JqLnksIG9iai56XVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIEZsYXR0ZW5WZWN0b3IzQXJyYXkoaW5wdXQ6IFZlY3RvcjNbXSB8IFZlY3RvcjJbXSk6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBBcnJheShpbnB1dC5sZW5ndGggKiAzKVxyXG4gICAgY29uc3QgdkJ1ZmY6IEFycmF5PG51bWJlcj4gPSBbXVxyXG4gICAgZm9yIChsZXQgayA9IDAsIGwgPSAwOyBrIDwgaW5wdXQubGVuZ3RoOyBrKyssIGwgKz0gMykge1xyXG4gICAgICBpbnB1dFtrXS50b0FycmF5KHZCdWZmKVxyXG4gICAgICBvdXRwdXRbbF0gPSB2QnVmZlswXVxyXG4gICAgICBvdXRwdXRbbCArIDFdID0gdkJ1ZmZbMV1cclxuICAgICAgb3V0cHV0W2wgKyAyXSA9IHZCdWZmWzJdID8gdkJ1ZmZbMl0gOiAwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdW5wYWNrQ29sb3JzKGludDMyQ29sb3JzOiBDaHVua0FycmF5LCB0b2xpbmVhciA9IGZhbHNlKTogbnVtYmVyW10ge1xyXG4gICAgY29uc3QgY29sb3JzID0gbmV3IEFycmF5PG51bWJlcj4oaW50MzJDb2xvcnMubGVuZ3RoICogMylcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50MzJDb2xvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY29sb3IgPSBpbnQzMkNvbG9ycy5nZXQoaSlcclxuICAgICAgY29uc3QgciA9IChjb2xvciA+PiAxNikgJiAweGZmXHJcbiAgICAgIGNvbnN0IGcgPSAoY29sb3IgPj4gOCkgJiAweGZmXHJcbiAgICAgIGNvbnN0IGIgPSBjb2xvciAmIDB4ZmZcclxuICAgICAgY29sb3JzW2kgKiAzXSA9IHIgLyAyNTVcclxuICAgICAgY29sb3JzW2kgKiAzICsgMV0gPSBnIC8gMjU1XHJcbiAgICAgIGNvbG9yc1tpICogMyArIDJdID0gYiAvIDI1NVxyXG4gICAgICBpZiAodG9saW5lYXIpIHtcclxuICAgICAgICBjb2xvcnNbaSAqIDNdID0gdGhpcy5zcmdiVG9MaW5lYXIoY29sb3JzW2kgKiAzXSlcclxuICAgICAgICBjb2xvcnNbaSAqIDMgKyAxXSA9IHRoaXMuc3JnYlRvTGluZWFyKGNvbG9yc1tpICogMyArIDFdKVxyXG4gICAgICAgIGNvbG9yc1tpICogMyArIDJdID0gdGhpcy5zcmdiVG9MaW5lYXIoY29sb3JzW2kgKiAzICsgMl0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb2xvcnNcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzcmdiVG9MaW5lYXIoeDogbnVtYmVyKSB7XHJcbiAgICBpZiAoeCA8PSAwKSByZXR1cm4gMFxyXG4gICAgZWxzZSBpZiAoeCA+PSAxKSByZXR1cm4gMVxyXG4gICAgZWxzZSBpZiAoeCA8IDAuMDQwNDUpIHJldHVybiB4IC8gMTIuOTJcclxuICAgIGVsc2UgcmV0dXJuIE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNClcclxuICB9XHJcblxyXG4gIC8qKiBDb25uZWN0b3JzIHNlbmQgZW1wdHkgY2h1bmtzIOCyoF/gsqAgKi9cclxuICBwcm90ZWN0ZWQgY2h1bmtBcnJheUhhc0RhdGEoY2h1bmtzOiBBcnJheTxEYXRhQ2h1bms+KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY2h1bmtzICYmIGNodW5rcy5maWx0ZXIoKGM6IERhdGFDaHVuaykgPT4gYy5kYXRhICYmIGMuZGF0YS5sZW5ndGgpLmxlbmd0aCA+IDBcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IFNwZWNrbGVDb252ZXJ0ZXIgZnJvbSAnLi9TcGVja2xlQ29udmVydGVyLmpzJ1xyXG5pbXBvcnQgeyBMb2FkZXIsIExvYWRlckV2ZW50IH0gZnJvbSAnLi4vTG9hZGVyLmpzJ1xyXG5pbXBvcnQgeyBTcGVja2xlR2VvbWV0cnlDb252ZXJ0ZXIgfSBmcm9tICcuL1NwZWNrbGVHZW9tZXRyeUNvbnZlcnRlci5qcydcclxuaW1wb3J0IHsgV29ybGRUcmVlLCB0eXBlIFNwZWNrbGVPYmplY3QgfSBmcm9tICcuLi8uLi8uLi9pbmRleC5qcydcclxuaW1wb3J0IExvZ2dlciBmcm9tICcuLi8uLi91dGlscy9Mb2dnZXIuanMnXHJcbmltcG9ydCB7XHJcbiAgZ2V0RmVhdHVyZUZsYWcsXHJcbiAgT2JqZWN0TG9hZGVyMkZsYWdzLFxyXG4gIE9iamVjdExvYWRlcjIsXHJcbiAgT2JqZWN0TG9hZGVyMkZhY3RvcnksXHJcbiAgT2JqZWN0QXR0cmlidXRlTWFza1xyXG59IGZyb20gJ0BzcGVja2xlL29iamVjdGxvYWRlcjInXHJcbmltcG9ydCB7IFRJTUVfTVMgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQnXHJcblxyXG5jb25zdCBPQkpFQ1RfTE9BRElOR19QUk9HUkVTU19NQVggPSAwLjg1XHJcbmNvbnN0IFBPU1RfUFJPQ0VTU0lOR19QUk9HUkVTUyA9IDAuOVxyXG5jb25zdCBCTE9CX1BSRUxPQURfUFJPR1JFU1NfU1RBUlQgPSAwLjlcclxuY29uc3QgQkxPQl9QUkVMT0FEX1BST0dSRVNTX0VORCA9IDAuOTdcclxuY29uc3QgUkVOREVSX1RSRUVfUFJPR1JFU1NfU1RBUlQgPSAwLjk3XHJcbmNvbnN0IFJFTkRFUl9UUkVFX1BST0dSRVNTX0VORCA9IDAuOTk1XHJcbmNvbnN0IEJMT0JfUFJFTE9BRF9DT05DVVJSRU5DWSA9IDhcclxuY29uc3QgREVGQVVMVF9NQVhfRlVMTF9PQkpFQ1RfTE9BRF9DT1VOVCA9IDI1MF8wMDBcclxuY29uc3QgTUFYX0ZVTExfT0JKRUNUX0xPQURfQ09VTlRfU1RPUkFHRV9LRVkgPVxyXG4gICdTUEVDS0xFX1ZJRVdFUl9NQVhfRlVMTF9PQkpFQ1RfTE9BRF9DT1VOVCdcclxuXHJcbmV4cG9ydCBjbGFzcyBTcGVja2xlTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcclxuICBwcm90ZWN0ZWQgbG9hZGVyOiBPYmplY3RMb2FkZXIyXHJcbiAgcHJvdGVjdGVkIGNvbnZlcnRlcjogU3BlY2tsZUNvbnZlcnRlclxyXG4gIHByb3RlY3RlZCB0cmVlOiBXb3JsZFRyZWVcclxuICBwcm90ZWN0ZWQgaXNDYW5jZWxsZWQgPSBmYWxzZVxyXG4gIHByb3RlY3RlZCBpc0ZpbmlzaGVkID0gZmFsc2VcclxuICBwcm90ZWN0ZWQgbG9nOiAobWVzc2FnZT86IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkXHJcblxyXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBmaW5pc2hlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzRmluaXNoZWRcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgdGFyZ2V0VHJlZTogV29ybGRUcmVlLFxyXG4gICAgcmVzb3VyY2U6IHN0cmluZyxcclxuICAgIGF1dGhUb2tlbj86IHN0cmluZyxcclxuICAgIGVuYWJsZUNhY2hpbmc/OiBib29sZWFuLFxyXG4gICAgcmVzb3VyY2VEYXRhPzogdW5rbm93bixcclxuICAgIGxvZ2dlcj86IChtZXNzYWdlPzogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQsXHJcbiAgICBhdHRyaWJ1dGVNYXNrPzogT2JqZWN0QXR0cmlidXRlTWFzayxcclxuICAgIG9iamVjdFR5cGVNYXNrPzogc3RyaW5nW11cclxuICApIHtcclxuICAgIHN1cGVyKHJlc291cmNlLCByZXNvdXJjZURhdGEpXHJcbiAgICB0aGlzLnRyZWUgPSB0YXJnZXRUcmVlXHJcbiAgICB0aGlzLmxvZyA9IGxvZ2dlciB8fCBMb2dnZXIubG9nXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IHRoaXMuaW5pdE9iamVjdExvYWRlcihcclxuICAgICAgICByZXNvdXJjZSxcclxuICAgICAgICBhdXRoVG9rZW4sXHJcbiAgICAgICAgZW5hYmxlQ2FjaGluZyxcclxuICAgICAgICByZXNvdXJjZURhdGEsXHJcbiAgICAgICAgYXR0cmlidXRlTWFzayxcclxuICAgICAgICBvYmplY3RUeXBlTWFza1xyXG4gICAgICApXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIExvZ2dlci5lcnJvcihlKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbnZlcnRlciA9IG5ldyBTcGVja2xlQ29udmVydGVyKHRoaXMubG9hZGVyLCB0aGlzLnRyZWUpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdE9iamVjdExvYWRlcihcclxuICAgIHJlc291cmNlOiBzdHJpbmcsXHJcbiAgICBhdXRoVG9rZW4/OiBzdHJpbmcsXHJcbiAgICBfZW5hYmxlQ2FjaGluZz86IGJvb2xlYW4sXHJcbiAgICByZXNvdXJjZURhdGE/OiB1bmtub3duLFxyXG4gICAgYXR0cmlidXRlTWFzaz86IE9iamVjdEF0dHJpYnV0ZU1hc2ssXHJcbiAgICBvYmplY3RUeXBlTWFzaz86IHN0cmluZ1tdXHJcbiAgKTogT2JqZWN0TG9hZGVyMiB7XHJcbiAgICByZXNvdXJjZURhdGFcclxuICAgIGxldCB0b2tlbiA9IHVuZGVmaW5lZFxyXG4gICAgdHJ5IHtcclxuICAgICAgdG9rZW4gPSBhdXRoVG9rZW4gfHwgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBdXRoVG9rZW4nKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpXHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gQWNjZXNzaW5nIGxvY2FsU3RvcmFnZSBtYXkgdGhyb3cgd2hlbiBleGVjdXRpbmcgb24gc2FuZGJveGVkIGRvY3VtZW50LCBpZ25vcmUuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0b2tlbikge1xyXG4gICAgICBMb2dnZXIuZXJyb3IoXHJcbiAgICAgICAgJ1ZpZXdlcjogbm8gYXV0aCB0b2tlbiBwcmVzZW50LiBSZXF1ZXN0cyB0byBub24tcHVibGljIHN0cmVhbSBvYmplY3RzIHdpbGwgZmFpbC4nXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlc291cmNlKVxyXG5cclxuICAgIGNvbnN0IHNlZ21lbnRzID0gdXJsLnBhdGhuYW1lLnNwbGl0KCcvJylcclxuICAgIGlmIChcclxuICAgICAgc2VnbWVudHMubGVuZ3RoIDwgNSB8fFxyXG4gICAgICB1cmwucGF0aG5hbWUuaW5kZXhPZignc3RyZWFtcycpID09PSAtMSB8fFxyXG4gICAgICB1cmwucGF0aG5hbWUuaW5kZXhPZignb2JqZWN0cycpID09PSAtMVxyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBvYmplY3QgdXJsIGZvcm1hdC4nKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlcnZlclVybCA9IHVybC5vcmlnaW5cclxuICAgIGNvbnN0IHN0cmVhbUlkID0gc2VnbWVudHNbMl1cclxuICAgIGNvbnN0IG9iamVjdElkID0gc2VnbWVudHNbNF1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0TG9hZGVyMkZhY3RvcnkuY3JlYXRlRnJvbVVybCh7XHJcbiAgICAgIHNlcnZlclVybCxcclxuICAgICAgc3RyZWFtSWQsXHJcbiAgICAgIG9iamVjdElkLFxyXG4gICAgICB0b2tlbixcclxuICAgICAgYXR0cmlidXRlTWFzayxcclxuICAgICAgb2JqZWN0VHlwZU1hc2tcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcclxuICAgIGxldCBwaGFzZVN0YXJ0ID0gc3RhcnRcclxuICAgIGxldCBmaXJzdCA9IHRydWVcclxuICAgIGxldCBkYXRhbG9hZGluZyA9IDBcclxuICAgIGNvbnN0IHRvdGFsID0gYXdhaXQgdGhpcy5sb2FkZXIuZ2V0VG90YWxPYmplY3RDb3VudCgpXHJcbiAgICBjb25zdCBtYXhGdWxsT2JqZWN0TG9hZENvdW50ID0gdGhpcy5nZXRNYXhGdWxsT2JqZWN0TG9hZENvdW50KClcclxuICAgIGlmIChtYXhGdWxsT2JqZWN0TG9hZENvdW50ID4gMCAmJiB0b3RhbCA+IG1heEZ1bGxPYmplY3RMb2FkQ291bnQpIHtcclxuICAgICAgY29uc3QgbWVzc2FnZSA9XHJcbiAgICAgICAgYFZpZXdlciBmdWxsLWxvYWQgZ3VhcmQ6IG9iamVjdCAke1xyXG4gICAgICAgICAgdGhpcy5yZXNvdXJjZVxyXG4gICAgICAgIH0gaGFzICR7dG90YWwudG9Mb2NhbGVTdHJpbmcoKX0gYCArXHJcbiAgICAgICAgYFNwZWNrbGUgb2JqZWN0cywgYWJvdmUgdGhlIHNhZmUgZnVsbC1sb2FkIGxpbWl0IG9mICR7bWF4RnVsbE9iamVjdExvYWRDb3VudC50b0xvY2FsZVN0cmluZygpfS4gYCArXHJcbiAgICAgICAgYFRoZSBtb2RlbCB3YXMgbm90IGxvYWRlZCB0byBhdm9pZCBicm93c2VyIG91dC1vZi1tZW1vcnkuIEdlbmVyYXRlIGEgbGFyZ2UtbW9kZWwgZGVyaXZhdGl2ZSBgICtcclxuICAgICAgICBgb3Igc2V0ICR7TUFYX0ZVTExfT0JKRUNUX0xPQURfQ09VTlRfU1RPUkFHRV9LRVl9PTAgdG8gb3ZlcnJpZGUgbG9jYWxseS5gXHJcblxyXG4gICAgICBMb2dnZXIuZXJyb3IobWVzc2FnZSlcbiAgICAgIHRoaXMuZW1pdChMb2FkZXJFdmVudC5Mb2FkV2FybmluZywgeyBtZXNzYWdlIH0pXG4gICAgICB0aGlzLmVtaXQoTG9hZGVyRXZlbnQuTG9hZFByb2dyZXNzLCB7IHByb2dyZXNzOiAxLCBpZDogdGhpcy5yZXNvdXJjZSB9KVxuICAgICAgdGhpcy5lbWl0KExvYWRlckV2ZW50LkxvYWRDYW5jZWxsZWQsIHRoaXMucmVzb3VyY2UpXG4gICAgICBhd2FpdCB0aGlzLmxvYWRlci5kaXNwb3NlQXN5bmMoKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcbiAgICB9XG5cclxuICAgIGxldCB0cmF2ZXJzYWxzID0gMFxyXG4gICAgbGV0IGZpcnN0T2JqZWN0UHJvbWlzZSA9IG51bGxcclxuICAgIHRoaXMucHJvZ3Jlc3NMaXN0ZW4oKVxyXG5cclxuICAgIExvZ2dlci53YXJuKCdEb3dubG9hZGluZyBvYmplY3QgJywgdGhpcy5yZXNvdXJjZSlcclxuXHJcbiAgICBmb3IgYXdhaXQgKGNvbnN0IG9iaiBvZiB0aGlzLmxvYWRlci5nZXRPYmplY3RJdGVyYXRvcigpKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzQ2FuY2VsbGVkKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KExvYWRlckV2ZW50LkxvYWRDYW5jZWxsZWQsIHRoaXMucmVzb3VyY2UpXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmlyc3QpIHtcclxuICAgICAgICBmaXJzdE9iamVjdFByb21pc2UgPSB0aGlzLmNvbnZlcnRlci50cmF2ZXJzZShcclxuICAgICAgICAgIHRoaXMucmVzb3VyY2UsXHJcbiAgICAgICAgICBvYmogYXMgU3BlY2tsZU9iamVjdCxcclxuICAgICAgICAgIChjb3VudCkgPT4ge1xyXG4gICAgICAgICAgICB0cmF2ZXJzYWxzKytcclxuICAgICAgICAgICAgdGhpcy5lbWl0KExvYWRlckV2ZW50LlRyYXZlcnNlZCwge1xyXG4gICAgICAgICAgICAgIGNvdW50XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGZpcnN0ID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICBkYXRhbG9hZGluZysrXHJcbiAgICAgIHRoaXMuZW1pdChMb2FkZXJFdmVudC5Mb2FkUHJvZ3Jlc3MsIHtcclxuICAgICAgICBwcm9ncmVzczpcclxuICAgICAgICAgIHRvdGFsID4gMFxyXG4gICAgICAgICAgICA/IE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgT0JKRUNUX0xPQURJTkdfUFJPR1JFU1NfTUFYLFxyXG4gICAgICAgICAgICAgICAgKGRhdGFsb2FkaW5nIC8gdG90YWwpICogT0JKRUNUX0xPQURJTkdfUFJPR1JFU1NfTUFYXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IE9CSkVDVF9MT0FESU5HX1BST0dSRVNTX01BWCxcclxuICAgICAgICBpZDogdGhpcy5yZXNvdXJjZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaXJzdE9iamVjdFByb21pc2UpIHtcclxuICAgICAgYXdhaXQgZmlyc3RPYmplY3RQcm9taXNlXHJcbiAgICB9XHJcblxyXG4gICAgTG9nZ2VyLndhcm4oXHJcbiAgICAgIGBGaW5pc2hlZCBsb2FkaW5nL3RyYXZlcnNpbmcgb2JqZWN0ICR7dGhpcy5yZXNvdXJjZX0gaW4gJHtcclxuICAgICAgICAocGVyZm9ybWFuY2Uubm93KCkgLSBwaGFzZVN0YXJ0KSAvIFRJTUVfTVMuc2Vjb25kXHJcbiAgICAgIH0gc2Vjb25kcy4gTG9hZGVkIG9iamVjdHM6ICR7ZGF0YWxvYWRpbmd9LyR7dG90YWx9LiBOb2RlIGNvdW50OiAke1xyXG4gICAgICAgIHRoaXMudHJlZS5ub2RlQ291bnRcclxuICAgICAgfWBcclxuICAgIClcclxuICAgIHBoYXNlU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG5cclxuICAgIExvZ2dlci53YXJuKFxyXG4gICAgICBgRmluaXNoZWQgY29udmVydGluZyBvYmplY3QgJHt0aGlzLnJlc291cmNlfSBpbiAke1xyXG4gICAgICAgIChwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0KSAvIFRJTUVfTVMuc2Vjb25kXHJcbiAgICAgIH0gc2Vjb25kcy4gTm9kZSBjb3VudDogJHt0aGlzLnRyZWUubm9kZUNvdW50fWBcclxuICAgIClcclxuXHJcbiAgICBpZiAodHJhdmVyc2FscyA9PT0gMCkge1xyXG4gICAgICBMb2dnZXIud2FybihgVmlld2VyOiBubyAzZCBvYmplY3RzIGZvdW5kIGluIG9iamVjdCAke3RoaXMucmVzb3VyY2V9YClcclxuICAgICAgdGhpcy5lbWl0KExvYWRlckV2ZW50LkxvYWRXYXJuaW5nLCB7XHJcbiAgICAgICAgbWVzc2FnZTogYE5vIGRpc3BsYXlhYmxlIG9iamVjdHMgZm91bmQgaW4gb2JqZWN0ICR7dGhpcy5yZXNvdXJjZX0uYFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCB0aGlzLmNvbnZlcnRlci5jb252ZXJ0SW5zdGFuY2VzKClcclxuICAgIGF3YWl0IHRoaXMuY29udmVydGVyLmFwcGx5TWF0ZXJpYWxzKClcclxuICAgIGF3YWl0IHRoaXMuY29udmVydGVyLmhhbmRsZUR1cGxpY2F0ZXMoKVxyXG4gICAgdGhpcy5lbWl0KExvYWRlckV2ZW50LkxvYWRQcm9ncmVzcywge1xyXG4gICAgICBwcm9ncmVzczogUE9TVF9QUk9DRVNTSU5HX1BST0dSRVNTLFxyXG4gICAgICBpZDogdGhpcy5yZXNvdXJjZVxyXG4gICAgfSlcclxuICAgIExvZ2dlci53YXJuKFxyXG4gICAgICBgRmluaXNoZWQgcG9zdC1wcm9jZXNzaW5nIG9iamVjdCAke3RoaXMucmVzb3VyY2V9IGluICR7XHJcbiAgICAgICAgKHBlcmZvcm1hbmNlLm5vdygpIC0gcGhhc2VTdGFydCkgLyBUSU1FX01TLnNlY29uZFxyXG4gICAgICB9IHNlY29uZHMuYFxyXG4gICAgKVxyXG4gICAgcGhhc2VTdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpXHJcblxyXG4gICAgYXdhaXQgdGhpcy5wcmVsb2FkQmluYXJ5TWVzaGVzKChsb2FkZWQsIHRvdGFsQmxvYnMpID0+IHtcclxuICAgICAgdGhpcy5lbWl0KExvYWRlckV2ZW50LkxvYWRQcm9ncmVzcywge1xyXG4gICAgICAgIHByb2dyZXNzOlxyXG4gICAgICAgICAgQkxPQl9QUkVMT0FEX1BST0dSRVNTX1NUQVJUICtcclxuICAgICAgICAgIChsb2FkZWQgLyB0b3RhbEJsb2JzKSAqXHJcbiAgICAgICAgICAgIChCTE9CX1BSRUxPQURfUFJPR1JFU1NfRU5EIC0gQkxPQl9QUkVMT0FEX1BST0dSRVNTX1NUQVJUKSxcclxuICAgICAgICBpZDogdGhpcy5yZXNvdXJjZVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICAgIExvZ2dlci53YXJuKFxyXG4gICAgICBgRmluaXNoZWQgcHJlbG9hZGluZyBiaW5hcnkgbWVzaCBibG9icyBmb3IgJHt0aGlzLnJlc291cmNlfSBpbiAke1xyXG4gICAgICAgIChwZXJmb3JtYW5jZS5ub3coKSAtIHBoYXNlU3RhcnQpIC8gVElNRV9NUy5zZWNvbmRcclxuICAgICAgfSBzZWNvbmRzLmBcclxuICAgIClcclxuICAgIHBoYXNlU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG5cclxuICAgIGF3YWl0IHRoaXMubG9hZGVyLmRpc3Bvc2VBc3luYygpXHJcblxyXG4gICAgY29uc3QgdDAgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG4gICAgY29uc3QgZ2VvbWV0cnlDb252ZXJ0ZXIgPSBuZXcgU3BlY2tsZUdlb21ldHJ5Q29udmVydGVyKClcclxuXHJcbiAgICBjb25zdCByZW5kZXJUcmVlID0gdGhpcy50cmVlLmdldFJlbmRlclRyZWUodGhpcy5yZXNvdXJjZSlcclxuICAgIGlmICghcmVuZGVyVHJlZSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcclxuICAgIGNvbnN0IHJlbmRlck5vZGVDb3VudCA9IE1hdGgubWF4KHRoaXMudHJlZS5ub2RlQ291bnQsIDEpXHJcbiAgICBjb25zdCBwID0gcmVuZGVyVHJlZS5idWlsZFJlbmRlclRyZWUoZ2VvbWV0cnlDb252ZXJ0ZXIsIChjb3VudDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHRoaXMuZW1pdChMb2FkZXJFdmVudC5Db252ZXJ0ZWQsIHtcclxuICAgICAgICBjb3VudFxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmVtaXQoTG9hZGVyRXZlbnQuTG9hZFByb2dyZXNzLCB7XHJcbiAgICAgICAgcHJvZ3Jlc3M6IE1hdGgubWluKFxyXG4gICAgICAgICAgUkVOREVSX1RSRUVfUFJPR1JFU1NfRU5ELFxyXG4gICAgICAgICAgUkVOREVSX1RSRUVfUFJPR1JFU1NfU1RBUlQgK1xyXG4gICAgICAgICAgICAoY291bnQgLyByZW5kZXJOb2RlQ291bnQpICpcclxuICAgICAgICAgICAgICAoUkVOREVSX1RSRUVfUFJPR1JFU1NfRU5EIC0gUkVOREVSX1RSRUVfUFJPR1JFU1NfU1RBUlQpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBpZDogdGhpcy5yZXNvdXJjZVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuXHJcbiAgICBMb2dnZXIud2FybihcclxuICAgICAgYEZpbmlzaGVkIHJlbmRlcmluZyBvYmplY3QgLiBOb2RlIGNvdW50OiAke3RoaXMudHJlZS5ub2RlQ291bnR9IFRvdGFsOiAke3RvdGFsfWBcclxuICAgIClcclxuXHJcbiAgICB2b2lkIHAudGhlbigoKSA9PiB7XHJcbiAgICAgIExvZ2dlci5sb2coJ0FTWU5DIFRyZWUgYnVpbGQgdGltZSAtPiAnLCBwZXJmb3JtYW5jZS5ub3coKSAtIHQwKVxyXG4gICAgICBMb2dnZXIubG9nKCdOb2RlIGJ1aWxkIHRpbWUgLT4gJywgcmVuZGVyVHJlZS5idWlsZE5vZGVUaW1lKVxyXG4gICAgICBMb2dnZXIubG9nKCdBcHBseSB0cmFuc2Zvcm0gdGltZSAtPiAnLCByZW5kZXJUcmVlLmFwcGx5VHJhbnNmb3JtVGltZSlcclxuICAgICAgTG9nZ2VyLmxvZygnR2VvbWV0cnkgYnVpbGQgdGltZSAtPiAnLCByZW5kZXJUcmVlLmNvbnZlcnRUaW1lKVxyXG4gICAgICBMb2dnZXIubG9nKCdHZXQgTm9kZSB0aW1lIC0+ICcsIHJlbmRlclRyZWUuZ2V0Tm9kZVRpbWUpXHJcbiAgICAgIExvZ2dlci5sb2coJ090aGVyIHRpbWUgLT4gJywgcmVuZGVyVHJlZS5vdGhlclRpbWUpXHJcbiAgICAgIExvZ2dlci5sb2coJ1RyaWFuZ3VsYXRpb24gdGltZSAtPiAnLCBnZW9tZXRyeUNvbnZlcnRlci5tZXNoVHJpYW5ndWxhdGlvblRpbWUpXHJcbiAgICAgIExvZ2dlci5sb2coXHJcbiAgICAgICAgJ0FDVFVBTCBUcmlhbmd1bGF0aW9uIHRpbWUgLT4gJyxcclxuICAgICAgICBnZW9tZXRyeUNvbnZlcnRlci5hY3R1YWxUcmlhbmd1bGF0ZVRpbWVcclxuICAgICAgKVxyXG4gICAgICBMb2dnZXIubG9nKCdQdXNoIHRpbWUgLT4gJywgZ2VvbWV0cnlDb252ZXJ0ZXIucHVzaFRpbWUpXHJcbiAgICAgIExvZ2dlci53YXJuKFxyXG4gICAgICAgIGBGaW5pc2hlZCBidWlsZGluZyByZW5kZXIgdHJlZSBmb3IgJHt0aGlzLnJlc291cmNlfSBpbiAke1xyXG4gICAgICAgICAgKHBlcmZvcm1hbmNlLm5vdygpIC0gcGhhc2VTdGFydCkgLyBUSU1FX01TLnNlY29uZFxyXG4gICAgICAgIH0gc2Vjb25kcy5gXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5pc0ZpbmlzaGVkID0gdHJ1ZVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gcFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9ncmVzc0xpc3RlbigpOiB2b2lkIHtcclxuICAgIGlmIChnZXRGZWF0dXJlRmxhZyhPYmplY3RMb2FkZXIyRmxhZ3MuREVCVUcsIGZhbHNlKSAhPT0gJ3RydWUnKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhUHJvZ3Jlc3MgPSAwXHJcbiAgICB0aGlzLm9uKExvYWRlckV2ZW50LkxvYWRQcm9ncmVzcywgKGRhdGEpID0+IHtcclxuICAgICAgY29uc3QgcCA9IE1hdGguZmxvb3IoZGF0YS5wcm9ncmVzcyAqIDEwMClcclxuICAgICAgaWYgKHAgPiBkYXRhUHJvZ3Jlc3MpIHtcclxuICAgICAgICBMb2dnZXIubG9nKGBbZGVidWddIExvYWRpbmcgJHtwfSVgKVxyXG4gICAgICAgIGRhdGFQcm9ncmVzcyA9IHBcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMub24oTG9hZGVyRXZlbnQuVHJhdmVyc2VkLCAoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YS5jb3VudCAlIDUwMCA9PT0gMCkge1xyXG4gICAgICAgIExvZ2dlci5sb2coYFtkZWJ1Z10gVHJhdmVyc2VkICR7ZGF0YS5jb3VudH1gKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5vbihMb2FkZXJFdmVudC5Db252ZXJ0ZWQsIChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhLmNvdW50ICUgNTAwID09PSAwKSB7XHJcbiAgICAgICAgTG9nZ2VyLmxvZyhgW2RlYnVnXSBDb252ZXJ0ZWQgJHtkYXRhLmNvdW50fWApXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHByZWxvYWRCaW5hcnlNZXNoZXMoXHJcbiAgICBwcm9ncmVzcz86IChsb2FkZWQ6IG51bWJlciwgdG90YWw6IG51bWJlcikgPT4gdm9pZFxyXG4gICkge1xyXG4gICAgY29uc3QgYmxvYnNUb0ZldGNoID0gbmV3IFNldDxzdHJpbmc+KClcclxuICAgIHRoaXMudHJlZS53YWxrKChub2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzQmluYXJ5TWVzaCA9IGAke25vZGUubW9kZWwucmF3LnNwZWNrbGVfdHlwZSB8fCAnJ31gXHJcbiAgICAgICAgLnNwbGl0KCc6JylcclxuICAgICAgICAuc29tZSgodHlwZSkgPT4gdHlwZS5lbmRzV2l0aCgnQmluYXJ5TWVzaCcpKVxyXG4gICAgICBpZiAoaXNCaW5hcnlNZXNoICYmIG5vZGUubW9kZWwucmF3LmJsb2JJZCkge1xyXG4gICAgICAgIGJsb2JzVG9GZXRjaC5hZGQoYCR7bm9kZS5tb2RlbC5yYXcuYmxvYklkfWApXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKGJsb2JzVG9GZXRjaC5zaXplID4gMCkge1xyXG4gICAgICBMb2dnZXIud2FybihgUHJlbG9hZGluZyAke2Jsb2JzVG9GZXRjaC5zaXplfSBiaW5hcnkgbWVzaCBibG9icy4uLmApXHJcbiAgICAgIGNvbnN0IHNlcnZlclVybCA9IG5ldyBVUkwodGhpcy5yZXNvdXJjZSkub3JpZ2luXHJcbiAgICAgIGxldCB0b2tlbiA9IHVuZGVmaW5lZFxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0F1dGhUb2tlbicpXHJcbiAgICAgIH0gY2F0Y2gge31cclxuXHJcbiAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodGhpcy5yZXNvdXJjZSlcclxuICAgICAgY29uc3Qgc2VnbWVudHMgPSB1cmxPYmoucGF0aG5hbWUuc3BsaXQoJy8nKVxyXG4gICAgICBjb25zdCBzdHJlYW1JZCA9IHNlZ21lbnRzWzJdIC8vIC9zdHJlYW1zL1NUUkVBTV9JRC8uLi5cclxuXHJcbiAgICAgIGNvbnN0IGJsb2JJZHMgPSBbLi4uYmxvYnNUb0ZldGNoXS5maWx0ZXIoXHJcbiAgICAgICAgKGJsb2JJZCkgPT4gIVNwZWNrbGVHZW9tZXRyeUNvbnZlcnRlci5ibG9iQ2FjaGVbYmxvYklkXVxyXG4gICAgICApXHJcbiAgICAgIGlmIChibG9iSWRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHByb2dyZXNzPy4oYmxvYnNUb0ZldGNoLnNpemUsIGJsb2JzVG9GZXRjaC5zaXplKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbG9hZGVkID0gYmxvYnNUb0ZldGNoLnNpemUgLSBibG9iSWRzLmxlbmd0aFxyXG4gICAgICBjb25zdCBmZXRjaEJsb2IgPSBhc3luYyAoYmxvYklkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoU3BlY2tsZUdlb21ldHJ5Q29udmVydGVyLmJsb2JDYWNoZVtibG9iSWRdKSB7XHJcbiAgICAgICAgICBsb2FkZWQrK1xyXG4gICAgICAgICAgcHJvZ3Jlc3M/Lihsb2FkZWQsIGJsb2JzVG9GZXRjaC5zaXplKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBibG9iVXJsID0gYCR7c2VydmVyVXJsfS9hcGkvc3RyZWFtLyR7c3RyZWFtSWR9L2Jsb2IvJHtibG9iSWR9YFxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChibG9iVXJsLCB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHRva2VuID8geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCB9IDogdW5kZWZpbmVkXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgaWYgKHJlcy5vaykge1xyXG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCByZXMuYXJyYXlCdWZmZXIoKVxyXG4gICAgICAgICAgICBTcGVja2xlR2VvbWV0cnlDb252ZXJ0ZXIuYmxvYkNhY2hlW2Jsb2JJZF0gPSBidWZmZXJcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIExvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHByZWxvYWQgYmxvYiAke2Jsb2JJZH06ICR7cmVzLnN0YXR1c1RleHR9YClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBMb2dnZXIuZXJyb3IoYEVycm9yIGZldGNoaW5nIGJsb2IgJHtibG9iSWR9YCwgZSlcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgbG9hZGVkKytcclxuICAgICAgICAgIHByb2dyZXNzPy4obG9hZGVkLCBibG9ic1RvRmV0Y2guc2l6ZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvYklkcy5sZW5ndGg7IGkgKz0gQkxPQl9QUkVMT0FEX0NPTkNVUlJFTkNZKSB7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYmxvYklkcy5zbGljZShpLCBpICsgQkxPQl9QUkVMT0FEX0NPTkNVUlJFTkNZKS5tYXAoZmV0Y2hCbG9iKSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXhGdWxsT2JqZWN0TG9hZENvdW50KCk6IG51bWJlciB7XHJcbiAgICBsZXQgY29uZmlndXJlZFZhbHVlOiB1bmtub3duXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25maWd1cmVkVmFsdWUgPSAoXHJcbiAgICAgICAgZ2xvYmFsVGhpcyBhcyB7IFNQRUNLTEVfVklFV0VSX01BWF9GVUxMX09CSkVDVF9MT0FEX0NPVU5UPzogdW5rbm93biB9XHJcbiAgICAgICkuU1BFQ0tMRV9WSUVXRVJfTUFYX0ZVTExfT0JKRUNUX0xPQURfQ09VTlRcclxuICAgICAgY29uZmlndXJlZFZhbHVlID8/PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShNQVhfRlVMTF9PQkpFQ1RfTE9BRF9DT1VOVF9TVE9SQUdFX0tFWSlcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyBsb2NhbFN0b3JhZ2UvZ2xvYmFsIG92ZXJyaWRlcyBtYXkgYmUgdW5hdmFpbGFibGUgaW4gc29tZSBydW50aW1lcy5cclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGNvbmZpZ3VyZWRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIGNvbmZpZ3VyZWRWYWx1ZSA9PT0gbnVsbCB8fFxyXG4gICAgICBjb25maWd1cmVkVmFsdWUgPT09ICcnXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfTUFYX0ZVTExfT0JKRUNUX0xPQURfQ09VTlRcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBgJHtjb25maWd1cmVkVmFsdWV9YC50cmltKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgaWYgKFsnMCcsICdmYWxzZScsICdvZmYnLCAnZGlzYWJsZWQnXS5pbmNsdWRlcyhub3JtYWxpemVkVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAwXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBOdW1iZXIucGFyc2VJbnQobm9ybWFsaXplZFZhbHVlLCAxMClcclxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkVmFsdWUpICYmIHBhcnNlZFZhbHVlID4gMFxyXG4gICAgICA/IHBhcnNlZFZhbHVlXHJcbiAgICAgIDogREVGQVVMVF9NQVhfRlVMTF9PQkpFQ1RfTE9BRF9DT1VOVFxyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWVcclxuICAgIHRoaXMuaXNGaW5pc2hlZCA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpXHJcbiAgICB2b2lkIHRoaXMubG9hZGVyLmRpc3Bvc2VBc3luYygpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbG9yLCBEb3VibGVTaWRlLCBGcm9udFNpZGUsIE1hdGVyaWFsIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IHR5cGUgVHJlZU5vZGUsIFdvcmxkVHJlZSB9IGZyb20gJy4uL3RyZWUvV29ybGRUcmVlLmpzJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4uL3V0aWxzL0xvZ2dlci5qcydcclxuaW1wb3J0IHsgZ3JvdXBCeSB9IGZyb20gJ2xvZGFzaC1lcydcclxuaW1wb3J0IHsgR2VvbWV0cnlUeXBlIH0gZnJvbSAnLi4vYmF0Y2hpbmcvQmF0Y2guanMnXHJcbmltcG9ydCBTcGVja2xlTGluZU1hdGVyaWFsIGZyb20gJy4uL21hdGVyaWFscy9TcGVja2xlTGluZU1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVBvaW50TWF0ZXJpYWwgZnJvbSAnLi4vbWF0ZXJpYWxzL1NwZWNrbGVQb2ludE1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwgZnJvbSAnLi4vbWF0ZXJpYWxzL1NwZWNrbGVTdGFuZGFyZE1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBOb2RlUmVuZGVyVmlldyB9IGZyb20gJy4uL3RyZWUvTm9kZVJlbmRlclZpZXcuanMnXHJcbmltcG9ydCB7IFVwZGF0ZUZsYWdzLCB0eXBlIElWaWV3ZXIgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyBFeHRlbnNpb24gfSBmcm9tICcuL0V4dGVuc2lvbi5qcydcclxuaW1wb3J0IHsgU3BlY2tsZVR5cGVBbGxSZW5kZXJhYmxlcyB9IGZyb20gJy4uL2xvYWRlcnMvR2VvbWV0cnlDb252ZXJ0ZXIuanMnXHJcbmltcG9ydCB7IFNwZWNrbGVMb2FkZXIgfSBmcm9tICcuLi9sb2FkZXJzL1NwZWNrbGUvU3BlY2tsZUxvYWRlci5qcydcclxuaW1wb3J0IHsgR1Bhc3MgfSBmcm9tICcuLi9waXBlbGluZS9QYXNzZXMvR1Bhc3MuanMnXHJcbmltcG9ydCB7IERlcHRoUGFzcyB9IGZyb20gJy4uL3BpcGVsaW5lL1Bhc3Nlcy9EZXB0aFBhc3MuanMnXHJcblxyXG50eXBlIFNwZWNrbGVNYXRlcmlhbFR5cGUgPVxyXG4gIHwgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWxcclxuICB8IFNwZWNrbGVQb2ludE1hdGVyaWFsXHJcbiAgfCBTcGVja2xlTGluZU1hdGVyaWFsXHJcblxyXG5leHBvcnQgZW51bSBWaXN1YWxEaWZmTW9kZSB7XHJcbiAgUExBSU4sXHJcbiAgQ09MT1JFRFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZSZXN1bHQge1xyXG4gIHVuY2hhbmdlZDogQXJyYXk8VHJlZU5vZGU+XHJcbiAgYWRkZWQ6IEFycmF5PFRyZWVOb2RlPlxyXG4gIHJlbW92ZWQ6IEFycmF5PFRyZWVOb2RlPlxyXG4gIG1vZGlmaWVkOiBBcnJheTxBcnJheTxUcmVlTm9kZT4+XHJcbn1cclxuXHJcbmludGVyZmFjZSBWaXN1YWxEaWZmUmVzdWx0IHtcclxuICB1bmNoYW5nZWQ6IEFycmF5PE5vZGVSZW5kZXJWaWV3PlxyXG4gIGFkZGVkOiBBcnJheTxOb2RlUmVuZGVyVmlldz5cclxuICByZW1vdmVkOiBBcnJheTxOb2RlUmVuZGVyVmlldz5cclxuICBtb2RpZmllZE9sZDogQXJyYXk8Tm9kZVJlbmRlclZpZXc+XHJcbiAgbW9kaWZpZWROZXc6IEFycmF5PE5vZGVSZW5kZXJWaWV3PlxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGlmZkV4dGVuc2lvbiBleHRlbmRzIEV4dGVuc2lvbiB7XHJcbiAgcHVibGljIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdHJlZTogV29ybGRUcmVlXHJcbiAgcHJpdmF0ZSBhZGRlZE1hdGVyaWFsTWVzaDogU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWxcclxuICBwcml2YXRlIGNoYW5nZWROZXdNYXRlcmlhbE1lc2g6IFNwZWNrbGVTdGFuZGFyZE1hdGVyaWFsXHJcbiAgcHJpdmF0ZSBjaGFuZ2VkT2xkTWF0ZXJpYWxNZXNoOiBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbFxyXG4gIHByaXZhdGUgcmVtb3ZlZE1hdGVyaWFsTWVzaDogU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWxcclxuXHJcbiAgcHJpdmF0ZSBhZGRlZE1hdGVyaWFsUG9pbnQ6IFNwZWNrbGVQb2ludE1hdGVyaWFsXHJcbiAgcHJpdmF0ZSBjaGFuZ2VkTmV3TWF0ZXJpYWxQb2ludDogU3BlY2tsZVBvaW50TWF0ZXJpYWxcclxuICBwcml2YXRlIGNoYW5nZWRPbGRNYXRlcmlhbFBvaW50OiBTcGVja2xlUG9pbnRNYXRlcmlhbFxyXG4gIHByaXZhdGUgcmVtb3ZlZE1hdGVyaWFsUG9pbnQ6IFNwZWNrbGVQb2ludE1hdGVyaWFsXHJcblxyXG4gIHByaXZhdGUgYWRkZWRNYXRlcmlhbHM6IEFycmF5PFNwZWNrbGVNYXRlcmlhbFR5cGU+ID0gW11cclxuICBwcml2YXRlIGNoYW5nZWRPbGRNYXRlcmlhbHM6IEFycmF5PFNwZWNrbGVNYXRlcmlhbFR5cGU+ID0gW11cclxuICBwcml2YXRlIGNoYW5nZWROZXdNYXRlcmlhbHM6IEFycmF5PFNwZWNrbGVNYXRlcmlhbFR5cGU+ID0gW11cclxuICBwcml2YXRlIHJlbW92ZWRNYXRlcmlhbHM6IEFycmF5PFNwZWNrbGVNYXRlcmlhbFR5cGU+ID0gW11cclxuXHJcbiAgcHJpdmF0ZSBfbWF0ZXJpYWxHcm91cHM6XHJcbiAgICB8IHtcclxuICAgICAgICBydnM6IE5vZGVSZW5kZXJWaWV3W11cclxuICAgICAgICBtYXRlcmlhbDogU3BlY2tsZU1hdGVyaWFsVHlwZVxyXG4gICAgICB9W11cclxuICAgIHwgbnVsbFxyXG5cclxuICBwcml2YXRlIF92aXN1YWxEaWZmITogVmlzdWFsRGlmZlJlc3VsdFxyXG4gIHByaXZhdGUgX2RpZmZUaW1lID0gLTFcclxuICBwcml2YXRlIF9kaWZmTW9kZTogVmlzdWFsRGlmZk1vZGUgPSBWaXN1YWxEaWZmTW9kZS5DT0xPUkVEXHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2aWV3ZXI6IElWaWV3ZXIpIHtcclxuICAgIHN1cGVyKHZpZXdlcilcclxuICAgIHRoaXMudHJlZSA9IHZpZXdlci5nZXRXb3JsZFRyZWUoKVxyXG5cclxuICAgIHRoaXMuYWRkZWRNYXRlcmlhbE1lc2ggPSBuZXcgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogbmV3IENvbG9yKCcjMDBmZjAwJyksXHJcbiAgICAgIGVtaXNzaXZlOiAweDAsXHJcbiAgICAgIHJvdWdobmVzczogMSxcclxuICAgICAgbWV0YWxuZXNzOiAwLFxyXG4gICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICBzaWRlOiBGcm9udFNpZGVcclxuICAgIH0pXHJcbiAgICB0aGlzLmFkZGVkTWF0ZXJpYWxNZXNoLnZlcnRleENvbG9ycyA9IGZhbHNlXHJcbiAgICB0aGlzLmFkZGVkTWF0ZXJpYWxNZXNoLmRlcHRoV3JpdGUgPSB0cnVlXHJcbiAgICB0aGlzLmFkZGVkTWF0ZXJpYWxNZXNoLnRyYW5zcGFyZW50ID0gdHJ1ZVxyXG4gICAgdGhpcy5hZGRlZE1hdGVyaWFsTWVzaC5jbGlwU2hhZG93cyA9IHRydWVcclxuICAgIHRoaXMuYWRkZWRNYXRlcmlhbE1lc2guY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcbiAgICB0aGlzLmFkZGVkTWF0ZXJpYWxNZXNoLmNsaXBwaW5nUGxhbmVzID0gW11cclxuXHJcbiAgICB0aGlzLmNoYW5nZWROZXdNYXRlcmlhbE1lc2ggPSBuZXcgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogbmV3IENvbG9yKCcjZmZmZjAwJyksXHJcbiAgICAgIGVtaXNzaXZlOiAweDAsXHJcbiAgICAgIHJvdWdobmVzczogMSxcclxuICAgICAgbWV0YWxuZXNzOiAwLFxyXG4gICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICBzaWRlOiBGcm9udFNpZGVcclxuICAgIH0pXHJcbiAgICB0aGlzLmNoYW5nZWROZXdNYXRlcmlhbE1lc2gudmVydGV4Q29sb3JzID0gZmFsc2VcclxuICAgIHRoaXMuY2hhbmdlZE5ld01hdGVyaWFsTWVzaC50cmFuc3BhcmVudCA9IHRydWVcclxuICAgIHRoaXMuY2hhbmdlZE5ld01hdGVyaWFsTWVzaC5kZXB0aFdyaXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5jaGFuZ2VkTmV3TWF0ZXJpYWxNZXNoLmNsaXBTaGFkb3dzID0gdHJ1ZVxyXG4gICAgdGhpcy5jaGFuZ2VkTmV3TWF0ZXJpYWxNZXNoLmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG4gICAgdGhpcy5jaGFuZ2VkTmV3TWF0ZXJpYWxNZXNoLmNsaXBwaW5nUGxhbmVzID0gW11cclxuXHJcbiAgICB0aGlzLmNoYW5nZWRPbGRNYXRlcmlhbE1lc2ggPSBuZXcgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogbmV3IENvbG9yKCcjZmZmZjAwJyksXHJcbiAgICAgIGVtaXNzaXZlOiAweDAsXHJcbiAgICAgIHJvdWdobmVzczogMSxcclxuICAgICAgbWV0YWxuZXNzOiAwLFxyXG4gICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICBzaWRlOiBGcm9udFNpZGVcclxuICAgIH0pXHJcbiAgICB0aGlzLmNoYW5nZWRPbGRNYXRlcmlhbE1lc2gudmVydGV4Q29sb3JzID0gZmFsc2VcclxuICAgIHRoaXMuY2hhbmdlZE9sZE1hdGVyaWFsTWVzaC50cmFuc3BhcmVudCA9IHRydWVcclxuICAgIHRoaXMuY2hhbmdlZE9sZE1hdGVyaWFsTWVzaC5kZXB0aFdyaXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5jaGFuZ2VkT2xkTWF0ZXJpYWxNZXNoLmNsaXBTaGFkb3dzID0gdHJ1ZVxyXG4gICAgdGhpcy5jaGFuZ2VkT2xkTWF0ZXJpYWxNZXNoLmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG4gICAgdGhpcy5jaGFuZ2VkT2xkTWF0ZXJpYWxNZXNoLmNsaXBwaW5nUGxhbmVzID0gW11cclxuXHJcbiAgICB0aGlzLnJlbW92ZWRNYXRlcmlhbE1lc2ggPSBuZXcgU3BlY2tsZVN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogbmV3IENvbG9yKCcjZmYwMDAwJyksXHJcbiAgICAgIGVtaXNzaXZlOiAweDAsXHJcbiAgICAgIHJvdWdobmVzczogMSxcclxuICAgICAgbWV0YWxuZXNzOiAwLFxyXG4gICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICBzaWRlOiBGcm9udFNpZGVcclxuICAgIH0pXHJcbiAgICB0aGlzLnJlbW92ZWRNYXRlcmlhbE1lc2gudmVydGV4Q29sb3JzID0gZmFsc2VcclxuICAgIHRoaXMucmVtb3ZlZE1hdGVyaWFsTWVzaC50cmFuc3BhcmVudCA9IHRydWVcclxuICAgIHRoaXMucmVtb3ZlZE1hdGVyaWFsTWVzaC5kZXB0aFdyaXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5yZW1vdmVkTWF0ZXJpYWxNZXNoLmNsaXBTaGFkb3dzID0gdHJ1ZVxyXG4gICAgdGhpcy5yZW1vdmVkTWF0ZXJpYWxNZXNoLmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG4gICAgdGhpcy5yZW1vdmVkTWF0ZXJpYWxNZXNoLmNsaXBwaW5nUGxhbmVzID0gW11cclxuXHJcbiAgICB0aGlzLmFkZGVkTWF0ZXJpYWxQb2ludCA9IG5ldyBTcGVja2xlUG9pbnRNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiAweDAwZmYwMCxcclxuICAgICAgdmVydGV4Q29sb3JzOiBmYWxzZSxcclxuICAgICAgc2l6ZTogMixcclxuICAgICAgc2l6ZUF0dGVudWF0aW9uOiBmYWxzZVxyXG4gICAgfSlcclxuICAgIHRoaXMuYWRkZWRNYXRlcmlhbFBvaW50LnRyYW5zcGFyZW50ID0gdHJ1ZVxyXG4gICAgdGhpcy5hZGRlZE1hdGVyaWFsUG9pbnQuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcbiAgICB0aGlzLmFkZGVkTWF0ZXJpYWxQb2ludC50b25lTWFwcGVkID0gZmFsc2VcclxuICAgIHRoaXMuYWRkZWRNYXRlcmlhbFBvaW50LmNsaXBwaW5nUGxhbmVzID0gW11cclxuXHJcbiAgICB0aGlzLmNoYW5nZWROZXdNYXRlcmlhbFBvaW50ID0gbmV3IFNwZWNrbGVQb2ludE1hdGVyaWFsKHtcclxuICAgICAgY29sb3I6IDB4ZmZmZjAwLFxyXG4gICAgICB2ZXJ0ZXhDb2xvcnM6IGZhbHNlLFxyXG4gICAgICBzaXplOiAyLFxyXG4gICAgICBzaXplQXR0ZW51YXRpb246IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5jaGFuZ2VkTmV3TWF0ZXJpYWxQb2ludC50cmFuc3BhcmVudCA9IHRydWVcclxuICAgIHRoaXMuY2hhbmdlZE5ld01hdGVyaWFsUG9pbnQuY29sb3IuY29udmVydFNSR0JUb0xpbmVhcigpXHJcbiAgICB0aGlzLmNoYW5nZWROZXdNYXRlcmlhbFBvaW50LnRvbmVNYXBwZWQgPSBmYWxzZVxyXG4gICAgdGhpcy5jaGFuZ2VkTmV3TWF0ZXJpYWxQb2ludC5jbGlwcGluZ1BsYW5lcyA9IFtdXHJcblxyXG4gICAgdGhpcy5jaGFuZ2VkT2xkTWF0ZXJpYWxQb2ludCA9IG5ldyBTcGVja2xlUG9pbnRNYXRlcmlhbCh7XHJcbiAgICAgIGNvbG9yOiAweGZmZmYwMCxcclxuICAgICAgdmVydGV4Q29sb3JzOiBmYWxzZSxcclxuICAgICAgc2l6ZTogMixcclxuICAgICAgc2l6ZUF0dGVudWF0aW9uOiBmYWxzZVxyXG4gICAgfSlcclxuICAgIHRoaXMuY2hhbmdlZE9sZE1hdGVyaWFsUG9pbnQudHJhbnNwYXJlbnQgPSB0cnVlXHJcbiAgICB0aGlzLmNoYW5nZWRPbGRNYXRlcmlhbFBvaW50LmNvbG9yLmNvbnZlcnRTUkdCVG9MaW5lYXIoKVxyXG4gICAgdGhpcy5jaGFuZ2VkT2xkTWF0ZXJpYWxQb2ludC50b25lTWFwcGVkID0gZmFsc2VcclxuICAgIHRoaXMuY2hhbmdlZE9sZE1hdGVyaWFsUG9pbnQuY2xpcHBpbmdQbGFuZXMgPSBbXVxyXG5cclxuICAgIHRoaXMucmVtb3ZlZE1hdGVyaWFsUG9pbnQgPSBuZXcgU3BlY2tsZVBvaW50TWF0ZXJpYWwoe1xyXG4gICAgICBjb2xvcjogMHhmZjAwMDAsXHJcbiAgICAgIHZlcnRleENvbG9yczogZmFsc2UsXHJcbiAgICAgIHNpemU6IDIsXHJcbiAgICAgIHNpemVBdHRlbnVhdGlvbjogZmFsc2VcclxuICAgIH0pXHJcbiAgICB0aGlzLnJlbW92ZWRNYXRlcmlhbFBvaW50LnRyYW5zcGFyZW50ID0gdHJ1ZVxyXG4gICAgdGhpcy5yZW1vdmVkTWF0ZXJpYWxQb2ludC5jb2xvci5jb252ZXJ0U1JHQlRvTGluZWFyKClcclxuICAgIHRoaXMucmVtb3ZlZE1hdGVyaWFsUG9pbnQudG9uZU1hcHBlZCA9IGZhbHNlXHJcbiAgICB0aGlzLnJlbW92ZWRNYXRlcmlhbFBvaW50LmNsaXBwaW5nUGxhbmVzID0gW11cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZHluYW1pY2FsbHlMb2FkZWREaWZmUmVzb3VyY2VzID0gW10gYXMgc3RyaW5nW11cclxuICBwdWJsaWMgYXN5bmMgZGlmZihcclxuICAgIHVybEE6IHN0cmluZyxcclxuICAgIHVybEI6IHN0cmluZyxcclxuICAgIG1vZGU6IFZpc3VhbERpZmZNb2RlLFxyXG4gICAgYXV0aFRva2VuPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxEaWZmUmVzdWx0PiB7XHJcbiAgICBjb25zdCBsb2FkUHJvbWlzZXMgPSBbXVxyXG4gICAgdGhpcy5keW5hbWljYWxseUxvYWRlZERpZmZSZXNvdXJjZXMgPSBbXVxyXG5cclxuICAgIGlmICghdGhpcy50cmVlLmZpbmRJZCh1cmxBKSkge1xyXG4gICAgICBsb2FkUHJvbWlzZXMucHVzaChcclxuICAgICAgICB0aGlzLnZpZXdlci5sb2FkT2JqZWN0KFxyXG4gICAgICAgICAgbmV3IFNwZWNrbGVMb2FkZXIodGhpcy52aWV3ZXIuZ2V0V29ybGRUcmVlKCksIHVybEEsIGF1dGhUb2tlbiksXHJcbiAgICAgICAgICBmYWxzZVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICB0aGlzLmR5bmFtaWNhbGx5TG9hZGVkRGlmZlJlc291cmNlcy5wdXNoKHVybEEpXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMudHJlZS5maW5kSWQodXJsQikpIHtcclxuICAgICAgbG9hZFByb21pc2VzLnB1c2goXHJcbiAgICAgICAgdGhpcy52aWV3ZXIubG9hZE9iamVjdChcclxuICAgICAgICAgIG5ldyBTcGVja2xlTG9hZGVyKHRoaXMudmlld2VyLmdldFdvcmxkVHJlZSgpLCB1cmxCLCBhdXRoVG9rZW4pLFxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5keW5hbWljYWxseUxvYWRlZERpZmZSZXNvdXJjZXMucHVzaCh1cmxCKVxyXG4gICAgfVxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwobG9hZFByb21pc2VzKVxyXG5cclxuICAgIGNvbnN0IGRpZmZSZXN1bHQgPSBhd2FpdCB0aGlzLmdldERpZmYodXJsQSwgdXJsQilcclxuXHJcbiAgICBjb25zdCBkZXB0aFBhc3NlcyA9IHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkucGlwZWxpbmUuZ2V0UGFzcygnREVQVEgnKVxyXG4gICAgZGVwdGhQYXNzZXMuZm9yRWFjaCgodmFsdWU6IEdQYXNzKSA9PiB7XHJcbiAgICAgIDsodmFsdWUgYXMgRGVwdGhQYXNzKS5kZXB0aFNpZGUgPSBGcm9udFNpZGVcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy51cGRhdGVWaXN1YWxEaWZmKDAsIG1vZGUpXHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkaWZmUmVzdWx0KVxyXG4gIH1cclxuXHJcbiAgLyoqIEN1cnJlbnRseSwgdGhlIGRpZmYgZG9lcyBub3Qgc3RvcmUgdGhlIGV4aXN0aW5nIG1hdGVyaWFscy4gV2UgY2FuIGRvIHRoYXQgaWYgd2UgbmVlZCB0byAqL1xyXG4gIHB1YmxpYyBhc3luYyB1bmRpZmYoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBkZXB0aFBhc3NlcyA9IHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkucGlwZWxpbmUuZ2V0UGFzcygnREVQVEgnKVxyXG4gICAgZGVwdGhQYXNzZXMuZm9yRWFjaCgodmFsdWU6IEdQYXNzKSA9PiB7XHJcbiAgICAgIDsodmFsdWUgYXMgRGVwdGhQYXNzKS5kZXB0aFNpZGUgPSBEb3VibGVTaWRlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5yZXNldE1hdGVyaWFsR3JvdXBzKClcclxuICAgIHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkucmVzZXRNYXRlcmlhbHMoKVxyXG5cclxuICAgIGNvbnN0IHVubG9hZFByb21pc2VzID0gW11cclxuICAgIGlmICh0aGlzLmR5bmFtaWNhbGx5TG9hZGVkRGlmZlJlc291cmNlcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgZm9yIChjb25zdCBpZCBvZiB0aGlzLmR5bmFtaWNhbGx5TG9hZGVkRGlmZlJlc291cmNlcylcclxuICAgICAgICB1bmxvYWRQcm9taXNlcy5wdXNoKHRoaXMudmlld2VyLnVubG9hZE9iamVjdChpZCkpXHJcbiAgICB9XHJcbiAgICB0aGlzLmR5bmFtaWNhbGx5TG9hZGVkRGlmZlJlc291cmNlcyA9IFtdXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh1bmxvYWRQcm9taXNlcylcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRJZE1hcHMoXHJcbiAgICBydnM6IEFycmF5PFRyZWVOb2RlPixcclxuICAgIGlkTWFwOiB7IFtpZDogc3RyaW5nXTogeyBub2RlOiBUcmVlTm9kZTsgYXBwbGljYXRpb25JZDogc3RyaW5nIH0gfSxcclxuICAgIGFwcElkTWFwOiB7IFtpZDogc3RyaW5nXTogVHJlZU5vZGUgfVxyXG4gICkge1xyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBydnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgYXRvbWljUnYgPSBydnNba11cclxuICAgICAgY29uc3QgYXBwbGljYXRpb25JZCA9IGF0b21pY1J2Lm1vZGVsLnJhdy5hcHBsaWNhdGlvbklkXHJcbiAgICAgICAgPyBhdG9taWNSdi5tb2RlbC5yYXcuYXBwbGljYXRpb25JZFxyXG4gICAgICAgIDogdGhpcy50cmVlXHJcbiAgICAgICAgICAgIC5nZXRBbmNlc3RvcnMoYXRvbWljUnYpXHJcbiAgICAgICAgICAgIC5maW5kKCh2YWx1ZSkgPT4gdmFsdWUubW9kZWwucmF3LmFwcGxpY2F0aW9uSWQpPy5tb2RlbC5yYXcuYXBwbGljYXRpb25JZFxyXG5cclxuICAgICAgaWRNYXBbYXRvbWljUnYubW9kZWwucmF3LmlkXSA9IHtcclxuICAgICAgICBub2RlOiBhdG9taWNSdixcclxuICAgICAgICBhcHBsaWNhdGlvbklkXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwcGxpY2F0aW9uSWQpIHtcclxuICAgICAgICBhcHBJZE1hcFthcHBsaWNhdGlvbklkXSA9IGF0b21pY1J2XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGlmZih1cmxBOiBzdHJpbmcsIHVybEI6IHN0cmluZyk6IFByb21pc2U8RGlmZlJlc3VsdD4ge1xyXG4gICAgY29uc3QgZGlmZlJlc3VsdCA9IGF3YWl0IHRoaXMuZGlmZkl0ZXJhdGl2ZSh1cmxBLCB1cmxCKVxyXG4gICAgdGhpcy5fdmlzdWFsRGlmZiA9IHRoaXMuZ2V0VmlzdWFsRGlmZlJlc3VsdChkaWZmUmVzdWx0KVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkaWZmUmVzdWx0KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaWZmSXRlcmF0aXZlKHVybEE6IHN0cmluZywgdXJsQjogc3RyaW5nKTogUHJvbWlzZTxEaWZmUmVzdWx0PiB7XHJcbiAgICBjb25zdCBkaWZmUmVzdWx0OiBEaWZmUmVzdWx0ID0ge1xyXG4gICAgICB1bmNoYW5nZWQ6IFtdLFxyXG4gICAgICBhZGRlZDogW10sXHJcbiAgICAgIHJlbW92ZWQ6IFtdLFxyXG4gICAgICBtb2RpZmllZDogW11cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZW5kZXJUcmVlQSA9IHRoaXMudHJlZS5nZXRSZW5kZXJUcmVlKHVybEEpXHJcbiAgICBjb25zdCByZW5kZXJUcmVlQiA9IHRoaXMudHJlZS5nZXRSZW5kZXJUcmVlKHVybEIpXHJcbiAgICBpZiAoIXJlbmRlclRyZWVBKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcclxuICAgICAgICBuZXcgRXJyb3IoYENvdWxkIG5vdCBtYWtlIGRpZmYuIFJlc291cmNlICR7dXJsQX0gY291bGQgbm90IGJlIGZldGNoZWRgKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBpZiAoIXJlbmRlclRyZWVCKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcclxuICAgICAgICBuZXcgRXJyb3IoYENvdWxkIG5vdCBtYWtlIGRpZmYuIFJlc291cmNlICR7dXJsQn0gY291bGQgbm90IGJlIGZldGNoZWRgKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBsZXQgcnZzQTogVHJlZU5vZGVbXSA9IHJlbmRlclRyZWVBLmdldFJlbmRlcmFibGVOb2RlcyguLi5TcGVja2xlVHlwZUFsbFJlbmRlcmFibGVzKVxyXG4gICAgbGV0IHJ2c0I6IFRyZWVOb2RlW10gPSByZW5kZXJUcmVlQi5nZXRSZW5kZXJhYmxlTm9kZXMoLi4uU3BlY2tsZVR5cGVBbGxSZW5kZXJhYmxlcylcclxuXHJcbiAgICBydnNBID0gcnZzQS5tYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHJldHVybiByZW5kZXJUcmVlQS5nZXRBdG9taWNQYXJlbnQodmFsdWUpXHJcbiAgICB9KVxyXG5cclxuICAgIHJ2c0IgPSBydnNCLm1hcCgodmFsdWUpID0+IHtcclxuICAgICAgcmV0dXJuIHJlbmRlclRyZWVCLmdldEF0b21pY1BhcmVudCh2YWx1ZSlcclxuICAgIH0pXHJcblxyXG4gICAgcnZzQSA9IFsuLi5BcnJheS5mcm9tKG5ldyBTZXQocnZzQSkpXVxyXG4gICAgcnZzQiA9IFsuLi5BcnJheS5mcm9tKG5ldyBTZXQocnZzQikpXVxyXG5cclxuICAgIGNvbnN0IGlkTWFwQTogeyBbaWQ6IHN0cmluZ106IHsgbm9kZTogVHJlZU5vZGU7IGFwcGxpY2F0aW9uSWQ6IHN0cmluZyB9IH0gPSB7fVxyXG4gICAgY29uc3QgYXBwSWRNYXBBOiB7IFtpZDogc3RyaW5nXTogVHJlZU5vZGUgfSA9IHt9XHJcbiAgICB0aGlzLmJ1aWxkSWRNYXBzKHJ2c0EsIGlkTWFwQSwgYXBwSWRNYXBBKVxyXG5cclxuICAgIGNvbnN0IGlkTWFwQjogeyBbaWQ6IHN0cmluZ106IHsgbm9kZTogVHJlZU5vZGU7IGFwcGxpY2F0aW9uSWQ6IHN0cmluZyB9IH0gPSB7fVxyXG4gICAgY29uc3QgYXBwSWRNYXBCOiB7IFtpZDogc3RyaW5nXTogVHJlZU5vZGUgfSA9IHt9XHJcbiAgICB0aGlzLmJ1aWxkSWRNYXBzKHJ2c0IsIGlkTWFwQiwgYXBwSWRNYXBCKVxyXG5cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcnZzQi5sZW5ndGg7IGsrKykge1xyXG4gICAgICBjb25zdCByZXMgPSBpZE1hcEFbcnZzQltrXS5tb2RlbC5yYXcuaWRdPy5ub2RlXHJcblxyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgZGlmZlJlc3VsdC51bmNoYW5nZWQucHVzaChyZXMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgYXBwbGljYXRpb25JZCA9IGlkTWFwQltydnNCW2tdLm1vZGVsLnJhdy5pZF0uYXBwbGljYXRpb25JZFxyXG4gICAgICAgIGlmICghYXBwbGljYXRpb25JZCkge1xyXG4gICAgICAgICAgTG9nZ2VyLmVycm9yKFxyXG4gICAgICAgICAgICBgTm8gYXBwbGljYXRpb24gSUQgZm91bmQuIE9iamVjdCBpZDoke3J2c0Jba10ubW9kZWwucmF3LmlkfSBpcyBjb25zaWRlcmVkICdhZGRlZCchYFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgZGlmZlJlc3VsdC5hZGRlZC5wdXNoKHJ2c0Jba10pXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXMyID0gYXBwSWRNYXBBW2FwcGxpY2F0aW9uSWRdXHJcbiAgICAgICAgaWYgKHJlczIpIHtcclxuICAgICAgICAgIGRpZmZSZXN1bHQubW9kaWZpZWQucHVzaChbcmVzMiwgcnZzQltrXV0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRpZmZSZXN1bHQuYWRkZWQucHVzaChydnNCW2tdKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBydnNBLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGlkTWFwQltydnNBW2tdLm1vZGVsLnJhdy5pZF0/Lm5vZGVcclxuICAgICAgaWYgKCFyZXMpIHtcclxuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbklkID0gaWRNYXBBW3J2c0Fba10ubW9kZWwucmF3LmlkXS5hcHBsaWNhdGlvbklkXHJcbiAgICAgICAgaWYgKCFhcHBsaWNhdGlvbklkKSB7XHJcbiAgICAgICAgICBMb2dnZXIuZXJyb3IoXHJcbiAgICAgICAgICAgIGBObyBhcHBsaWNhdGlvbiBJRCBmb3VuZC4gT2JqZWN0IGlkOiR7cnZzQVtrXS5tb2RlbC5yYXcuaWR9IGlzIGNvbnNpZGVyZWQgJ3JlbW92ZWQnIWBcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGRpZmZSZXN1bHQucmVtb3ZlZC5wdXNoKHJ2c0Fba10pXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXMyID0gYXBwSWRNYXBCW2FwcGxpY2F0aW9uSWRdXHJcbiAgICAgICAgaWYgKCFyZXMyKSB7XHJcbiAgICAgICAgICBkaWZmUmVzdWx0LnJlbW92ZWQucHVzaChydnNBW2tdKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkaWZmUmVzdWx0LnVuY2hhbmdlZC5wdXNoKHJlcylcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGlmZlJlc3VsdClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVWaXN1YWxEaWZmKHRpbWU/OiBudW1iZXIsIG1vZGU/OiBWaXN1YWxEaWZmTW9kZSk6IHZvaWQge1xyXG4gICAgaWYgKChtb2RlICE9PSB1bmRlZmluZWQgJiYgbW9kZSAhPT0gdGhpcy5fZGlmZk1vZGUpIHx8ICF0aGlzLl9tYXRlcmlhbEdyb3Vwcykge1xyXG4gICAgICB0aGlzLnJlc2V0TWF0ZXJpYWxHcm91cHMoKVxyXG4gICAgICAvKiogQ2F0ZXJpbmcgdG8gdHlwZXNjcmlwdCAqL1xyXG4gICAgICBpZiAobW9kZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5idWlsZE1hdGVyaWFsR3JvdXBzKG1vZGUpXHJcbiAgICAgICAgdGhpcy5fZGlmZk1vZGUgPSBtb2RlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgbmVlZHNSZW5kZXJSZXNldCA9IGZhbHNlXHJcbiAgICBpZiAodGltZSAhPT0gdW5kZWZpbmVkICYmIHRpbWUgIT09IHRoaXMuX2RpZmZUaW1lKSB7XHJcbiAgICAgIC8qKiBXZSBvbmx5IHdhbnQgdG8gZG8gYSByZXNldCBhdCB0aGUgZWRnZXMgb2YgdGhlIHRpbWUgdmFsdWVcclxuICAgICAgICogIGJlY2F1c2UgdGhhdCdzIHdoZXJlIG1hdGVyaWFscyBiZWNvbWUgdG8vZnJvbSB2aXNpYmxlIGZyb20vdG8gdmlzaWJsZVxyXG4gICAgICAgKi9cclxuICAgICAgbmVlZHNSZW5kZXJSZXNldCA9XHJcbiAgICAgICAgKHRoaXMuX2RpZmZUaW1lID09PSAwKSAhPT0gKHRpbWUgPT09IDApIHx8XHJcbiAgICAgICAgKHRoaXMuX2RpZmZUaW1lID09PSAxKSAhPT0gKHRpbWUgPT09IDEpXHJcbiAgICAgIHRoaXMuc2V0RGlmZlRpbWUodGltZSlcclxuICAgICAgdGhpcy5fZGlmZlRpbWUgPSB0aW1lXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX21hdGVyaWFsR3JvdXBzKVxyXG4gICAgICB0aGlzLl9tYXRlcmlhbEdyb3Vwcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmlld2VyLmdldFJlbmRlcmVyKCkuc2V0TWF0ZXJpYWwodmFsdWUucnZzLCB2YWx1ZS5tYXRlcmlhbClcclxuICAgICAgfSlcclxuICAgIHRoaXMudmlld2VyLnJlcXVlc3RSZW5kZXIoXHJcbiAgICAgIG5lZWRzUmVuZGVyUmVzZXRcclxuICAgICAgICA/IFVwZGF0ZUZsYWdzLlJFTkRFUl9SRVNFVCB8IFVwZGF0ZUZsYWdzLlNIQURPV1NcclxuICAgICAgICA6IFVwZGF0ZUZsYWdzLlJFTkRFUlxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREaWZmVGltZSh0aW1lOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZyb20gPSBNYXRoLm1pbihNYXRoLm1heCgxIC0gdGltZSwgMCksIDEpXHJcbiAgICBjb25zdCB0byA9IE1hdGgubWluKE1hdGgubWF4KHRpbWUsIDApLCAxKVxyXG5cclxuICAgIHRoaXMuYWRkZWRNYXRlcmlhbHMuZm9yRWFjaCgobWF0KSA9PiB7XHJcbiAgICAgIG1hdC5vcGFjaXR5ID1cclxuICAgICAgICAobWF0IGFzIG5ldmVyKVsnY2xhbXBPcGFjaXR5J10gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgPyBNYXRoLm1pbihmcm9tLCAobWF0IGFzIG5ldmVyKVsnY2xhbXBPcGFjaXR5J10pXHJcbiAgICAgICAgICA6IGZyb21cclxuICAgICAgbWF0LmRlcHRoV3JpdGUgPSBmcm9tIDwgMC41ID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgIG1hdC50cmFuc3BhcmVudCA9IG1hdC5vcGFjaXR5IDwgMVxyXG4gICAgICBtYXQudmlzaWJsZSA9IG1hdC5vcGFjaXR5ID09PSAwID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgIG1hdC5uZWVkc0NvcHkgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY2hhbmdlZE9sZE1hdGVyaWFscy5mb3JFYWNoKChtYXQpID0+IHtcclxuICAgICAgbWF0Lm9wYWNpdHkgPVxyXG4gICAgICAgIChtYXQgYXMgbmV2ZXIpWydjbGFtcE9wYWNpdHknXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICA/IE1hdGgubWluKHRvLCAobWF0IGFzIG5ldmVyKVsnY2xhbXBPcGFjaXR5J10pXHJcbiAgICAgICAgICA6IHRvXHJcbiAgICAgIG1hdC5kZXB0aFdyaXRlID0gdG8gPCAwLjUgPyBmYWxzZSA6IHRydWVcclxuICAgICAgbWF0LnRyYW5zcGFyZW50ID0gbWF0Lm9wYWNpdHkgPCAxXHJcbiAgICAgIG1hdC52aXNpYmxlID0gbWF0Lm9wYWNpdHkgPT09IDAgPyBmYWxzZSA6IHRydWVcclxuICAgICAgbWF0Lm5lZWRzQ29weSA9IHRydWVcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5jaGFuZ2VkTmV3TWF0ZXJpYWxzLmZvckVhY2goKG1hdCkgPT4ge1xyXG4gICAgICBtYXQub3BhY2l0eSA9XHJcbiAgICAgICAgKG1hdCBhcyBuZXZlcilbJ2NsYW1wT3BhY2l0eSddICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgID8gTWF0aC5taW4oZnJvbSwgKG1hdCBhcyBuZXZlcilbJ2NsYW1wT3BhY2l0eSddKVxyXG4gICAgICAgICAgOiBmcm9tXHJcbiAgICAgIG1hdC5kZXB0aFdyaXRlID0gZnJvbSA8IDAuNSA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICBtYXQudHJhbnNwYXJlbnQgPSBtYXQub3BhY2l0eSA8IDFcclxuICAgICAgbWF0LnZpc2libGUgPSBtYXQub3BhY2l0eSA9PT0gMCA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICBtYXQubmVlZHNDb3B5ID0gdHJ1ZVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnJlbW92ZWRNYXRlcmlhbHMuZm9yRWFjaCgobWF0KSA9PiB7XHJcbiAgICAgIG1hdC5vcGFjaXR5ID1cclxuICAgICAgICAobWF0IGFzIG5ldmVyKVsnY2xhbXBPcGFjaXR5J10gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgPyBNYXRoLm1pbih0bywgKG1hdCBhcyBuZXZlcilbJ2NsYW1wT3BhY2l0eSddKVxyXG4gICAgICAgICAgOiB0b1xyXG4gICAgICBtYXQuZGVwdGhXcml0ZSA9IHRvIDwgMC41ID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgIG1hdC50cmFuc3BhcmVudCA9IG1hdC5vcGFjaXR5IDwgMVxyXG4gICAgICBtYXQudmlzaWJsZSA9IG1hdC5vcGFjaXR5ID09PSAwID8gZmFsc2UgOiB0cnVlXHJcbiAgICAgIG1hdC5uZWVkc0NvcHkgPSB0cnVlXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZE1hdGVyaWFsR3JvdXBzKG1vZGU6IFZpc3VhbERpZmZNb2RlKSB7XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBWaXN1YWxEaWZmTW9kZS5DT0xPUkVEOlxyXG4gICAgICAgIHRoaXMuX21hdGVyaWFsR3JvdXBzID0gdGhpcy5nZXRDb2xvcmVkTWF0ZXJpYWxHcm91cHModGhpcy5fdmlzdWFsRGlmZilcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIFZpc3VhbERpZmZNb2RlLlBMQUlOOlxyXG4gICAgICAgIHRoaXMuX21hdGVyaWFsR3JvdXBzID0gdGhpcy5nZXRQbGFpbk1hdGVyaWFsR3JvdXBzKHRoaXMuX3Zpc3VhbERpZmYpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBMb2dnZXIuZXJyb3IoYFVuc3VwcG9ydGVkIHZpc3VhbCBkaWZmIG1vZGUgJHttb2RlfWApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0TWF0ZXJpYWxHcm91cHMoKSB7XHJcbiAgICB0aGlzLl9tYXRlcmlhbEdyb3VwcyA9IG51bGxcclxuICAgIHRoaXMuYWRkZWRNYXRlcmlhbHMgPSBbXVxyXG4gICAgdGhpcy5jaGFuZ2VkT2xkTWF0ZXJpYWxzID0gW11cclxuICAgIHRoaXMuY2hhbmdlZE5ld01hdGVyaWFscyA9IFtdXHJcbiAgICB0aGlzLnJlbW92ZWRNYXRlcmlhbHMgPSBbXVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRWaXN1YWxEaWZmUmVzdWx0KGRpZmZSZXN1bHQ6IERpZmZSZXN1bHQpOiBWaXN1YWxEaWZmUmVzdWx0IHtcclxuICAgIGNvbnN0IHJlbmRlclRyZWUgPSB0aGlzLnRyZWUuZ2V0UmVuZGVyVHJlZSgpXHJcblxyXG4gICAgY29uc3QgYWRkZWRSdnMgPSBkaWZmUmVzdWx0LmFkZGVkLmZsYXRNYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHJldHVybiByZW5kZXJUcmVlLmdldFJlbmRlclZpZXdzRm9yTm9kZSh2YWx1ZSlcclxuICAgIH0pXHJcbiAgICBjb25zdCByZW1vdmVkUnZzID0gZGlmZlJlc3VsdC5yZW1vdmVkLmZsYXRNYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHJldHVybiByZW5kZXJUcmVlLmdldFJlbmRlclZpZXdzRm9yTm9kZSh2YWx1ZSlcclxuICAgIH0pXHJcbiAgICBjb25zdCB1bmNoYW5nZWRSdnMgPSBkaWZmUmVzdWx0LnVuY2hhbmdlZC5mbGF0TWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICByZXR1cm4gcmVuZGVyVHJlZS5nZXRSZW5kZXJWaWV3c0Zvck5vZGUodmFsdWUpXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IG1vZGlmaWVkT2xkUnZzID0gZGlmZlJlc3VsdC5tb2RpZmllZFxyXG4gICAgICAuZmxhdE1hcCgodmFsdWUpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyVHJlZS5nZXRSZW5kZXJWaWV3c0Zvck5vZGUodmFsdWVbMF0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICF1bmNoYW5nZWRSdnMuaW5jbHVkZXModmFsdWUpICYmICFyZW1vdmVkUnZzLmluY2x1ZGVzKHZhbHVlKVxyXG4gICAgICB9KVxyXG4gICAgY29uc3QgbW9kaWZpZWROZXdSdnMgPSBkaWZmUmVzdWx0Lm1vZGlmaWVkXHJcbiAgICAgIC5mbGF0TWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJUcmVlLmdldFJlbmRlclZpZXdzRm9yTm9kZSh2YWx1ZVsxXSlcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigodmFsdWUpID0+IHtcclxuICAgICAgICByZXR1cm4gIXVuY2hhbmdlZFJ2cy5pbmNsdWRlcyh2YWx1ZSkgJiYgIWFkZGVkUnZzLmluY2x1ZGVzKHZhbHVlKVxyXG4gICAgICB9KVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHVuY2hhbmdlZDogdW5jaGFuZ2VkUnZzLFxyXG4gICAgICBhZGRlZDogYWRkZWRSdnMsXHJcbiAgICAgIHJlbW92ZWQ6IHJlbW92ZWRSdnMsXHJcbiAgICAgIG1vZGlmaWVkT2xkOiBtb2RpZmllZE9sZFJ2cyxcclxuICAgICAgbW9kaWZpZWROZXc6IG1vZGlmaWVkTmV3UnZzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbG9yZWRNYXRlcmlhbEdyb3Vwcyh2aXN1YWxEaWZmUmVzdWx0OiBWaXN1YWxEaWZmUmVzdWx0KSB7XHJcbiAgICBjb25zdCBncm91cHMgPSBbXHJcbiAgICAgIC8vIE1FU0hFUyAmIExJTkVTXHJcbiAgICAgIC8vIEN1cnJlbnRseSBsaW5lcyB3b3JrIHdpdGggbWVzaCBzcGVjaWZpYyBtYXRlcmlhbHMgZHVlIHRvIGhvdyB0aGUgTGluZUJhdGNoIGlzIGltcGxlbWVudGVkLlxyXG4gICAgICAvLyBXZSBjb3VsZCB1c2Ugc3BlY2lmaWMgbGluZSBtYXRlcmlhbHMsIGJ1dCBpdCB3b24ndCBtYWtlIGEgZGlmZmVyZW5jZSB1bnRpbCB3ZSBlbGV2YXRlIHRoZVxyXG4gICAgICAvLyBMaW5lQmF0Y2ggYSBiaXRcclxuICAgICAge1xyXG4gICAgICAgIHJ2czogdmlzdWFsRGlmZlJlc3VsdC5hZGRlZC5maWx0ZXIoXHJcbiAgICAgICAgICAodmFsdWUpID0+XHJcbiAgICAgICAgICAgIHZhbHVlLmdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLk1FU0ggfHxcclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTElORVxyXG4gICAgICAgICksXHJcbiAgICAgICAgbWF0ZXJpYWw6IHRoaXMuYWRkZWRNYXRlcmlhbE1lc2hcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHJ2czogdmlzdWFsRGlmZlJlc3VsdC5tb2RpZmllZE5ldy5maWx0ZXIoXHJcbiAgICAgICAgICAodmFsdWUpID0+XHJcbiAgICAgICAgICAgIHZhbHVlLmdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLk1FU0ggfHxcclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTElORVxyXG4gICAgICAgICksXHJcbiAgICAgICAgbWF0ZXJpYWw6IHRoaXMuY2hhbmdlZE5ld01hdGVyaWFsTWVzaFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcnZzOiB2aXN1YWxEaWZmUmVzdWx0Lm1vZGlmaWVkT2xkLmZpbHRlcihcclxuICAgICAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTUVTSCB8fFxyXG4gICAgICAgICAgICB2YWx1ZS5nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5MSU5FXHJcbiAgICAgICAgKSxcclxuICAgICAgICBtYXRlcmlhbDogdGhpcy5jaGFuZ2VkT2xkTWF0ZXJpYWxNZXNoXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBydnM6IHZpc3VhbERpZmZSZXN1bHQucmVtb3ZlZC5maWx0ZXIoXHJcbiAgICAgICAgICAodmFsdWUpID0+XHJcbiAgICAgICAgICAgIHZhbHVlLmdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLk1FU0ggfHxcclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTElORVxyXG4gICAgICAgICksXHJcbiAgICAgICAgbWF0ZXJpYWw6IHRoaXMucmVtb3ZlZE1hdGVyaWFsTWVzaFxyXG4gICAgICB9LFxyXG4gICAgICAvL1BPSU5UU1xyXG4gICAgICB7XHJcbiAgICAgICAgcnZzOiB2aXN1YWxEaWZmUmVzdWx0LmFkZGVkLmZpbHRlcihcclxuICAgICAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUE9JTlQgfHxcclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUE9JTlRfQ0xPVURcclxuICAgICAgICApLFxyXG4gICAgICAgIG1hdGVyaWFsOiB0aGlzLmFkZGVkTWF0ZXJpYWxQb2ludFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcnZzOiB2aXN1YWxEaWZmUmVzdWx0Lm1vZGlmaWVkTmV3LmZpbHRlcihcclxuICAgICAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUE9JTlQgfHxcclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUE9JTlRfQ0xPVURcclxuICAgICAgICApLFxyXG4gICAgICAgIG1hdGVyaWFsOiB0aGlzLmNoYW5nZWROZXdNYXRlcmlhbFBvaW50XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBydnM6IHZpc3VhbERpZmZSZXN1bHQubW9kaWZpZWRPbGQuZmlsdGVyKFxyXG4gICAgICAgICAgKHZhbHVlKSA9PlxyXG4gICAgICAgICAgICB2YWx1ZS5nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5QT0lOVCB8fFxyXG4gICAgICAgICAgICB2YWx1ZS5nZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5QT0lOVF9DTE9VRFxyXG4gICAgICAgICksXHJcbiAgICAgICAgbWF0ZXJpYWw6IHRoaXMuY2hhbmdlZE9sZE1hdGVyaWFsUG9pbnRcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHJ2czogdmlzdWFsRGlmZlJlc3VsdC5yZW1vdmVkLmZpbHRlcihcclxuICAgICAgICAgICh2YWx1ZSkgPT5cclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUE9JTlQgfHxcclxuICAgICAgICAgICAgdmFsdWUuZ2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUE9JTlRfQ0xPVURcclxuICAgICAgICApLFxyXG4gICAgICAgIG1hdGVyaWFsOiB0aGlzLnJlbW92ZWRNYXRlcmlhbFBvaW50XHJcbiAgICAgIH1cclxuICAgIF1cclxuICAgIHRoaXMuYWRkZWRNYXRlcmlhbHMucHVzaCh0aGlzLmFkZGVkTWF0ZXJpYWxNZXNoLCB0aGlzLmFkZGVkTWF0ZXJpYWxQb2ludClcclxuICAgIHRoaXMuY2hhbmdlZE9sZE1hdGVyaWFscy5wdXNoKFxyXG4gICAgICB0aGlzLmNoYW5nZWRPbGRNYXRlcmlhbE1lc2gsXHJcbiAgICAgIHRoaXMuY2hhbmdlZE9sZE1hdGVyaWFsUG9pbnRcclxuICAgIClcclxuICAgIHRoaXMuY2hhbmdlZE5ld01hdGVyaWFscy5wdXNoKFxyXG4gICAgICB0aGlzLmNoYW5nZWROZXdNYXRlcmlhbE1lc2gsXHJcbiAgICAgIHRoaXMuY2hhbmdlZE5ld01hdGVyaWFsUG9pbnRcclxuICAgIClcclxuICAgIHRoaXMucmVtb3ZlZE1hdGVyaWFscy5wdXNoKHRoaXMucmVtb3ZlZE1hdGVyaWFsTWVzaCwgdGhpcy5yZW1vdmVkTWF0ZXJpYWxQb2ludClcclxuXHJcbiAgICByZXR1cm4gZ3JvdXBzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLnJ2cy5sZW5ndGggPiAwKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQbGFpbk1hdGVyaWFsR3JvdXBzKHZpc3VhbERpZmZSZXN1bHQ6IFZpc3VhbERpZmZSZXN1bHQpIHtcclxuICAgIGNvbnN0IGFkZGVkID0gdGhpcy5nZXRCYXRjaGVzU3ViZ3JvdXBzKHZpc3VhbERpZmZSZXN1bHQuYWRkZWQpXHJcbiAgICBjb25zdCBjaGFuZ2VkT2xkID0gdGhpcy5nZXRCYXRjaGVzU3ViZ3JvdXBzKHZpc3VhbERpZmZSZXN1bHQubW9kaWZpZWRPbGQpXHJcbiAgICBjb25zdCBjaGFuZ2VkTmV3ID0gdGhpcy5nZXRCYXRjaGVzU3ViZ3JvdXBzKHZpc3VhbERpZmZSZXN1bHQubW9kaWZpZWROZXcpXHJcbiAgICBjb25zdCByZW1vdmVkID0gdGhpcy5nZXRCYXRjaGVzU3ViZ3JvdXBzKHZpc3VhbERpZmZSZXN1bHQucmVtb3ZlZClcclxuICAgIHRoaXMuYWRkZWRNYXRlcmlhbHMgPSBhZGRlZC5tYXAoXHJcbiAgICAgICh2YWx1ZTogeyBydnM6IE5vZGVSZW5kZXJWaWV3W107IG1hdGVyaWFsOiBTcGVja2xlTWF0ZXJpYWxUeXBlIH0pID0+XHJcbiAgICAgICAgdmFsdWUubWF0ZXJpYWxcclxuICAgIClcclxuICAgIHRoaXMuY2hhbmdlZE9sZE1hdGVyaWFscyA9IGNoYW5nZWRPbGQubWFwKFxyXG4gICAgICAodmFsdWU6IHsgcnZzOiBOb2RlUmVuZGVyVmlld1tdOyBtYXRlcmlhbDogU3BlY2tsZU1hdGVyaWFsVHlwZSB9KSA9PlxyXG4gICAgICAgIHZhbHVlLm1hdGVyaWFsXHJcbiAgICApXHJcbiAgICB0aGlzLmNoYW5nZWROZXdNYXRlcmlhbHMgPSBjaGFuZ2VkTmV3Lm1hcChcclxuICAgICAgKHZhbHVlOiB7IHJ2czogTm9kZVJlbmRlclZpZXdbXTsgbWF0ZXJpYWw6IFNwZWNrbGVNYXRlcmlhbFR5cGUgfSkgPT5cclxuICAgICAgICB2YWx1ZS5tYXRlcmlhbFxyXG4gICAgKVxyXG4gICAgdGhpcy5yZW1vdmVkTWF0ZXJpYWxzID0gcmVtb3ZlZC5tYXAoXHJcbiAgICAgICh2YWx1ZTogeyBydnM6IE5vZGVSZW5kZXJWaWV3W107IG1hdGVyaWFsOiBTcGVja2xlTWF0ZXJpYWxUeXBlIH0pID0+XHJcbiAgICAgICAgdmFsdWUubWF0ZXJpYWxcclxuICAgIClcclxuICAgIHJldHVybiBbLi4uYWRkZWQsIC4uLmNoYW5nZWRPbGQsIC4uLmNoYW5nZWROZXcsIC4uLnJlbW92ZWRdXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhdGNoZXNTdWJncm91cHMoc3ViZ3JvdXA6IEFycmF5PE5vZGVSZW5kZXJWaWV3Pik6IHtcclxuICAgIHJ2czogTm9kZVJlbmRlclZpZXdbXVxyXG4gICAgbWF0ZXJpYWw6IFNwZWNrbGVNYXRlcmlhbFR5cGVcclxuICB9W10ge1xyXG4gICAgY29uc3QgZ3JvdXBCYXRjaGVzID0gZ3JvdXBCeShzdWJncm91cCwgJ2JhdGNoSWQnKVxyXG5cclxuICAgIGNvbnN0IG1hdGVyaWFsR3JvdXA6IHtcclxuICAgICAgcnZzOiBOb2RlUmVuZGVyVmlld1tdXHJcbiAgICAgIG1hdGVyaWFsOiBTcGVja2xlTWF0ZXJpYWxUeXBlXHJcbiAgICB9W10gPSBbXVxyXG4gICAgZm9yIChjb25zdCBrIGluIGdyb3VwQmF0Y2hlcykge1xyXG4gICAgICBjb25zdCBtYXRDbG9uZTogU3BlY2tsZU1hdGVyaWFsVHlwZSA9IChcclxuICAgICAgICB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLmdldEJhdGNoTWF0ZXJpYWwoZ3JvdXBCYXRjaGVzW2tdWzBdKSBhcyBNYXRlcmlhbFxyXG4gICAgICApLmNsb25lKCkgYXMgU3BlY2tsZU1hdGVyaWFsVHlwZVxyXG5cclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgOyhtYXRDbG9uZSBhcyBhbnkpWydjbGFtcE9wYWNpdHknXSA9IG1hdENsb25lLm9wYWNpdHlcclxuICAgICAgbWF0Q2xvbmUub3BhY2l0eSA9IDAuNVxyXG4gICAgICBtYXRDbG9uZS50cmFuc3BhcmVudCA9IHRydWVcclxuICAgICAgbWF0ZXJpYWxHcm91cC5wdXNoKHtcclxuICAgICAgICBydnM6IGdyb3VwQmF0Y2hlc1trXSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0Q2xvbmVcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF0ZXJpYWxHcm91cFxyXG4gIH1cclxuXHJcbiAgLyoqIEtlZXBpbmcgdGhpcyBmb3IgcmVmZXJlbmNlICovXHJcbiAgLy8gcHJpdmF0ZSBpbnRlcnNlY3Rpb24obzE6IG9iamVjdCwgbzI6IG9iamVjdCkge1xyXG4gIC8vICAgY29uc3QgW2sxLCBrMl0gPSBbT2JqZWN0LmtleXMobzEpLCBPYmplY3Qua2V5cyhvMildXHJcbiAgLy8gICBjb25zdCBbZmlyc3QsIG5leHRdID0gazEubGVuZ3RoID4gazIubGVuZ3RoID8gW2syLCBvMV0gOiBbazEsIG8yXVxyXG4gIC8vICAgcmV0dXJuIGZpcnN0LmZpbHRlcigoaykgPT4gayBpbiBuZXh0KVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBkaWZmQm9vbGVhbih1cmxBOiBzdHJpbmcsIHVybEI6IHN0cmluZyk6IFByb21pc2U8RGlmZlJlc3VsdD4ge1xyXG4gIC8vICAgY29uc3QgZGlmZlJlc3VsdDogRGlmZlJlc3VsdCA9IHtcclxuICAvLyAgICAgdW5jaGFuZ2VkOiBbXSxcclxuICAvLyAgICAgYWRkZWQ6IFtdLFxyXG4gIC8vICAgICByZW1vdmVkOiBbXSxcclxuICAvLyAgICAgbW9kaWZpZWQ6IFtdXHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgY29uc3QgcmVuZGVyVHJlZUEgPSB0aGlzLnRyZWUhLmdldFJlbmRlclRyZWUodXJsQSlcclxuICAvLyAgIGNvbnN0IHJlbmRlclRyZWVCID0gdGhpcy50cmVlIS5nZXRSZW5kZXJUcmVlKHVybEIpXHJcbiAgLy8gICBpZiAoIXJlbmRlclRyZWVBKSB7XHJcbiAgLy8gICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcclxuICAvLyAgICAgICBgQ291bGQgbm90IG1ha2UgZGlmZi4gUmVzb3VyY2UgJHt1cmxBfSBjb3VsZCBub3QgYmUgZmV0Y2hlZGBcclxuICAvLyAgICAgKVxyXG4gIC8vICAgfVxyXG4gIC8vICAgaWYgKCFyZW5kZXJUcmVlQikge1xyXG4gIC8vICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXHJcbiAgLy8gICAgICAgYENvdWxkIG5vdCBtYWtlIGRpZmYuIFJlc291cmNlICR7dXJsQn0gY291bGQgbm90IGJlIGZldGNoZWRgXHJcbiAgLy8gICAgIClcclxuICAvLyAgIH1cclxuICAvLyAgIGxldCBydnNBOiBUcmVlTm9kZVtdID0gcmVuZGVyVHJlZUEuZ2V0UmVuZGVyYWJsZU5vZGVzKC4uLlNwZWNrbGVUeXBlQWxsUmVuZGVyYWJsZXMpXHJcbiAgLy8gICBsZXQgcnZzQjogVHJlZU5vZGVbXSA9IHJlbmRlclRyZWVCLmdldFJlbmRlcmFibGVOb2RlcyguLi5TcGVja2xlVHlwZUFsbFJlbmRlcmFibGVzKVxyXG5cclxuICAvLyAgIHJ2c0EgPSBydnNBLm1hcCgodmFsdWU6IFRyZWVOb2RlKSA9PiB7XHJcbiAgLy8gICAgIHJldHVybiByZW5kZXJUcmVlQS5nZXRBdG9taWNQYXJlbnQodmFsdWUpXHJcbiAgLy8gICB9KVxyXG5cclxuICAvLyAgIHJ2c0IgPSBydnNCLm1hcCgodmFsdWUpID0+IHtcclxuICAvLyAgICAgcmV0dXJuIHJlbmRlclRyZWVCLmdldEF0b21pY1BhcmVudCh2YWx1ZSlcclxuICAvLyAgIH0pXHJcblxyXG4gIC8vICAgcnZzQSA9IFsuLi5BcnJheS5mcm9tKG5ldyBTZXQocnZzQSkpXVxyXG4gIC8vICAgcnZzQiA9IFsuLi5BcnJheS5mcm9tKG5ldyBTZXQocnZzQikpXVxyXG5cclxuICAvLyAgIGNvbnN0IGlkTWFwQTogeyBbaWQ6IHN0cmluZ106IHsgbm9kZTogVHJlZU5vZGU7IGFwcGxpY2F0aW9uSWQ6IHN0cmluZyB9IH0gPSB7fVxyXG4gIC8vICAgY29uc3QgYXBwSWRNYXBBOiB7IFtpZDogc3RyaW5nXTogVHJlZU5vZGUgfSA9IHt9XHJcbiAgLy8gICB0aGlzLmJ1aWxkSWRNYXBzKHJ2c0EsIGlkTWFwQSwgYXBwSWRNYXBBKVxyXG5cclxuICAvLyAgIGNvbnN0IGlkTWFwQjogeyBbaWQ6IHN0cmluZ106IHsgbm9kZTogVHJlZU5vZGU7IGFwcGxpY2F0aW9uSWQ6IHN0cmluZyB9IH0gPSB7fVxyXG4gIC8vICAgY29uc3QgYXBwSWRNYXBCOiB7IFtpZDogc3RyaW5nXTogVHJlZU5vZGUgfSA9IHt9XHJcbiAgLy8gICB0aGlzLmJ1aWxkSWRNYXBzKHJ2c0IsIGlkTWFwQiwgYXBwSWRNYXBCKVxyXG5cclxuICAvLyAgIC8qKiBHZXQgdGhlIGlkcyB3aGljaCBhcmUgY29tbW9uIGJldHdlZW4gdGhlIHR3byBtYXBzLiBUaGlzIHdpbGwgYmUgb2JqZWN0c1xyXG4gIC8vICAgICogIHdoaWNoIGhhdmUgbm90IGNoYW5nZWRcclxuICAvLyAgICAqL1xyXG4gIC8vICAgY29uc3QgdW5jaGFuZ2VkOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5pbnRlcnNlY3Rpb24oaWRNYXBBLCBpZE1hcEIpXHJcbiAgLy8gICAvKiogV2UgcmVtb3ZlIHRoZSB1bmNoYW5nZWQgb2JqZWN0cyBmcm9tIEIgYW5kIGVuZCB1cCB3aXRoIGNoYW5nZWQgKyBhZGRlZCAqL1xyXG4gIC8vICAgY29uc3QgYWRkZWRNb2RpZmllZCA9IF8ub21pdChpZE1hcEIsIHVuY2hhbmdlZClcclxuICAvLyAgIC8qKiBXZSByZW1vdmUgdGhlIHVuY2hhbmdlZCBvYmplY3RzIGZyb20gQSBhbmQgZW5kIHVwIHdpdGggY2hhbmdlZCArIHJlbW92ZWQgKi9cclxuICAvLyAgIGNvbnN0IHJlbW92ZWRNb2RpZmllZCA9IF8ub21pdChpZE1hcEEsIHVuY2hhbmdlZClcclxuICAvLyAgIC8qKiBXZSByZW1vdmUgdGhlIGNoYW5nZWQgb2JqZWN0cyBmcm9tIEIuIEFuIG9iamVjdCBmcm9tIEIgaXMgY2hhbmdlZCBpZlxyXG4gIC8vICAgICogIGl0J3MgYXBwbGljYXRpb24gSUQgZXhpc3RzIGluIEFcclxuICAvLyAgICAqL1xyXG4gIC8vICAgY29uc3QgYWRkZWQgPSBfLm9taXQoYWRkZWRNb2RpZmllZCwgZnVuY3Rpb24gKHZhbHVlOiB7IGFwcGxpY2F0aW9uSWQ6IHN0cmluZyB9KSB7XHJcbiAgLy8gICAgIHJldHVybiAoXHJcbiAgLy8gICAgICAgdmFsdWUuYXBwbGljYXRpb25JZCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgLy8gICAgICAgYXBwSWRNYXBBW3ZhbHVlLmFwcGxpY2F0aW9uSWRdICE9PSB1bmRlZmluZWRcclxuICAvLyAgICAgKVxyXG4gIC8vICAgfSlcclxuICAvLyAgIC8qKiBXZSByZW1vdmUgdGhlIGNoYW5nZWQgb2JqZWN0cyBmcm9tIEEuIEFuIG9iamVjdCBmcm9tIEEgaXMgY2hhbmdlZCBpZlxyXG4gIC8vICAgICogIGl0J3MgYXBwbGljYXRpb24gSUQgZXhpc3RzIGluIEJcclxuICAvLyAgICAqL1xyXG4gIC8vICAgY29uc3QgcmVtb3ZlZCA9IF8ub21pdChcclxuICAvLyAgICAgcmVtb3ZlZE1vZGlmaWVkLFxyXG4gIC8vICAgICBmdW5jdGlvbiAodmFsdWU6IHsgYXBwbGljYXRpb25JZDogc3RyaW5nIH0pIHtcclxuICAvLyAgICAgICByZXR1cm4gKFxyXG4gIC8vICAgICAgICAgdmFsdWUuYXBwbGljYXRpb25JZCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgLy8gICAgICAgICBhcHBJZE1hcEJbdmFsdWUuYXBwbGljYXRpb25JZF0gIT09IHVuZGVmaW5lZFxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgfVxyXG4gIC8vICAgKVxyXG4gIC8vICAgLyoqIFdlIHJlbW92ZSB0aGUgcmVtb3ZlZCBvYmplY3RzIGZyb20gQSwgbGVhdmluZyB1cyBvbmx5IGNoYW5nZWQgb2JqZWN0cyAqL1xyXG4gIC8vICAgY29uc3QgbW9kaWZpZWRSZW1vdmVkID0gXy5vbWl0KHJlbW92ZWRNb2RpZmllZCwgT2JqZWN0LmtleXMocmVtb3ZlZCkpXHJcbiAgLy8gICAvKiogV2UgcmVtb3ZlIHRoZSByZW1vdmVkIG9iamVjdHMgZnJvbSBCLCBsZWF2aW5nIHVzIG9ubHkgY2hhbmdlZCBvYmplY3RzICovXHJcbiAgLy8gICBjb25zdCBtb2RpZmllZEFkZGVkID0gXy5vbWl0KGFkZGVkTW9kaWZpZWQsIE9iamVjdC5rZXlzKGFkZGVkKSlcclxuXHJcbiAgLy8gICAvKiogV2UgZmlsbCB0aGUgYXJyYXlzIGZyb20gaGVyZSBvbiBvdXQgKi9cclxuICAvLyAgIGNvbnN0IG1vZGlmaWVkT2xkID0gKE9iamVjdC52YWx1ZXMobW9kaWZpZWRSZW1vdmVkKSBhcyB7IG5vZGU6IFRyZWVOb2RlIH1bXSkubWFwKFxyXG4gIC8vICAgICAodmFsdWU6IHsgbm9kZTogVHJlZU5vZGUgfSkgPT4gdmFsdWUubm9kZVxyXG4gIC8vICAgKVxyXG4gIC8vICAgY29uc3QgbW9kaWZpZWROZXcgPSAoT2JqZWN0LnZhbHVlcyhtb2RpZmllZEFkZGVkKSBhcyB7IG5vZGU6IFRyZWVOb2RlIH1bXSkubWFwKFxyXG4gIC8vICAgICAodmFsdWU6IHsgbm9kZTogVHJlZU5vZGUgfSkgPT4gdmFsdWUubm9kZVxyXG4gIC8vICAgKVxyXG4gIC8vICAgZGlmZlJlc3VsdC51bmNoYW5nZWQucHVzaCguLi51bmNoYW5nZWQubWFwKCh2YWx1ZSkgPT4gaWRNYXBBW3ZhbHVlXS5ub2RlKSlcclxuICAvLyAgIGRpZmZSZXN1bHQudW5jaGFuZ2VkLnB1c2goLi4udW5jaGFuZ2VkLm1hcCgodmFsdWUpID0+IGlkTWFwQlt2YWx1ZV0ubm9kZSkpXHJcbiAgLy8gICBkaWZmUmVzdWx0LnJlbW92ZWQucHVzaChcclxuICAvLyAgICAgLi4uKE9iamVjdC52YWx1ZXMocmVtb3ZlZCkgYXMgeyBub2RlOiBUcmVlTm9kZSB9W10pLm1hcChcclxuICAvLyAgICAgICAodmFsdWU6IHsgbm9kZTogVHJlZU5vZGUgfSkgPT4gdmFsdWUubm9kZVxyXG4gIC8vICAgICApXHJcbiAgLy8gICApXHJcbiAgLy8gICBkaWZmUmVzdWx0LmFkZGVkLnB1c2goXHJcbiAgLy8gICAgIC4uLihPYmplY3QudmFsdWVzKGFkZGVkKSBhcyB7IG5vZGU6IFRyZWVOb2RlIH1bXSkubWFwKFxyXG4gIC8vICAgICAgICh2YWx1ZTogeyBub2RlOiBUcmVlTm9kZSB9KSA9PiB2YWx1ZS5ub2RlXHJcbiAgLy8gICAgIClcclxuICAvLyAgIClcclxuXHJcbiAgLy8gICBtb2RpZmllZE9sZC5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAvLyAgICAgdmFsdWVcclxuICAvLyAgICAgZGlmZlJlc3VsdC5tb2RpZmllZC5wdXNoKFttb2RpZmllZE9sZFtpbmRleF0sIG1vZGlmaWVkTmV3W2luZGV4XV0pXHJcbiAgLy8gICB9KVxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkaWZmUmVzdWx0KVxyXG4gIC8vIH1cclxufVxyXG4iLCJpbXBvcnQgeyBNZXNoLCBPYmplY3QzRCwgdHlwZSBNYXRlcmlhbCB9IGZyb20gJ3RocmVlJ1xuaW1wb3J0IHsgdHlwZSBUcmVlTm9kZSwgV29ybGRUcmVlIH0gZnJvbSAnLi4vLi4vdHJlZS9Xb3JsZFRyZWUuanMnXHJcbmltcG9ydCB0eXBlIHsgQ29udmVydGVyUmVzdWx0RGVsZWdhdGUgfSBmcm9tICcuLi9TcGVja2xlL1NwZWNrbGVDb252ZXJ0ZXIuanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5cclxuZXhwb3J0IHR5cGUgT2JqQ29udmVydGVyTm9kZURlbGVnYXRlID1cclxuICB8ICgob2JqZWN0OiBPYmplY3QzRCwgbm9kZTogVHJlZU5vZGUpID0+IFByb21pc2U8dm9pZD4pXHJcbiAgfCBudWxsXHJcblxyXG5leHBvcnQgY2xhc3MgT2JqQ29udmVydGVyIHtcclxuICBwcm90ZWN0ZWQgbGFzdEFzeW5jUGF1c2U6IG51bWJlciA9IDBcclxuICBwcm90ZWN0ZWQgdHJlZTogV29ybGRUcmVlXHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBOb2RlQ29udmVydGVyTWFwcGluZzoge1xyXG4gICAgW25hbWU6IHN0cmluZ106IE9iakNvbnZlcnRlck5vZGVEZWxlZ2F0ZVxyXG4gIH0gPSB7XHJcbiAgICBHcm91cDogdGhpcy5ncm91cFRvTm9kZS5iaW5kKHRoaXMpLFxyXG4gICAgTWVzaDogdGhpcy5NZXNoVG9Ob2RlLmJpbmQodGhpcylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0cmVlOiBXb3JsZFRyZWUpIHtcclxuICAgIHRoaXMudHJlZSA9IHRyZWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBhc3luY1BhdXNlKCkge1xyXG4gICAgLy8gRG9uJ3QgZnJlZXplIHRoZSBVSSB3aGVuIGRvaW5nIGFsbCB0aG9zZSB0cmF2ZXJzYWxzXHJcbiAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMubGFzdEFzeW5jUGF1c2UgPj0gMTAwKSB7XHJcbiAgICAgIHRoaXMubGFzdEFzeW5jUGF1c2UgPSBEYXRlLm5vdygpXHJcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHRyYXZlcnNlKFxyXG4gICAgb2JqZWN0VVJMOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IE9iamVjdDNELFxyXG4gICAgY2FsbGJhY2s6IENvbnZlcnRlclJlc3VsdERlbGVnYXRlLFxyXG4gICAgbm9kZTogVHJlZU5vZGUgfCBudWxsID0gbnVsbFxyXG4gICkge1xyXG4gICAgYXdhaXQgdGhpcy5hc3luY1BhdXNlKClcclxuXHJcbiAgICBjb25zdCBjaGlsZE5vZGU6IFRyZWVOb2RlID0gdGhpcy50cmVlLnBhcnNlKHtcclxuICAgICAgaWQ6ICFub2RlID8gb2JqZWN0VVJMIDogb2JqZWN0LnV1aWQsXHJcbiAgICAgIHJhdzogb2JqZWN0LFxyXG4gICAgICBhdG9taWM6IHRydWUsXHJcbiAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgdGhpcy50cmVlLmFkZFN1YnRyZWUoY2hpbGROb2RlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmVlLmFkZE5vZGUoY2hpbGROb2RlLCBub2RlKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHR5cGUgPSBvYmplY3QudHlwZVxyXG5cclxuICAgIGlmICh0aGlzLmRpcmVjdE5vZGVDb252ZXJ0ZXJFeGlzdHMob2JqZWN0KSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29udmVydFRvTm9kZShvYmplY3QsIGNoaWxkTm9kZSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIExvZ2dlci53YXJuKFxyXG4gICAgICAgICAgYChUcmF2ZXJzaW5nIC0gZGlyZWN0KSBGYWlsZWQgdG8gY29udmVydCAke3R5cGV9IHdpdGggaWQ6ICR7b2JqZWN0LnV1aWR9YCxcclxuICAgICAgICAgIGVcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgb2JqZWN0LmNoaWxkcmVuLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudHJhdmVyc2Uob2JqZWN0VVJMLCBvYmplY3QuY2hpbGRyZW5ba10sIGNhbGxiYWNrLCBjaGlsZE5vZGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpcmVjdE5vZGVDb252ZXJ0ZXJFeGlzdHMob2JqOiBPYmplY3QzRCkge1xyXG4gICAgcmV0dXJuIG9iai50eXBlIGluIHRoaXMuTm9kZUNvbnZlcnRlck1hcHBpbmdcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY29udmVydFRvTm9kZShvYmo6IE9iamVjdDNELCBub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuZGlyZWN0Tm9kZUNvbnZlcnRlckV4aXN0cyhvYmopKSB7XHJcbiAgICAgICAgY29uc3QgZGVsZWdhdGUgPSB0aGlzLk5vZGVDb252ZXJ0ZXJNYXBwaW5nW29iai50eXBlXVxyXG4gICAgICAgIGlmIChkZWxlZ2F0ZSkgcmV0dXJuIGF3YWl0IGRlbGVnYXRlKG9iaiwgbm9kZSlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBMb2dnZXIud2FybihgKERpcmVjdCBjb252ZXJ0KSBGYWlsZWQgdG8gY29udmVydCBvYmplY3Qgd2l0aCBpZDogJHtvYmouaWR9YClcclxuICAgICAgdGhyb3cgZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBNZXNoVG9Ob2RlKF9vYmo6IE9iamVjdDNELCBub2RlOiBUcmVlTm9kZSkge1xyXG4gICAgY29uc3Qgb2JqID0gX29iaiBhcyBNZXNoXHJcbiAgICBpZiAoIW9iaikgcmV0dXJuXHJcbiAgICBpZiAoXHJcbiAgICAgICFvYmouZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbiB8fFxyXG4gICAgICBvYmouZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheS5sZW5ndGggPT09IDBcclxuICAgICkge1xyXG4gICAgICBMb2dnZXIud2FybihcclxuICAgICAgICBgT2JqZWN0IGlkICR7b2JqLmlkfSBvZiB0eXBlICR7b2JqLnR5cGV9IGhhcyBubyB2ZXJ0ZXggcG9zaXRpb24gZGF0YSBhbmQgd2lsbCBiZSBpZ25vcmVkYFxyXG4gICAgICApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIG5vZGUubW9kZWwucmF3LnZlcnRpY2VzID0gb2JqLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXlcbiAgICBub2RlLm1vZGVsLnJhdy5mYWNlcyA9IG9iai5nZW9tZXRyeS5pbmRleD8uYXJyYXlcbiAgICBub2RlLm1vZGVsLnJhdy5jb2xvcnMgPSBvYmouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvcj8uYXJyYXlcbiAgICBub2RlLm1vZGVsLnJhdy5yZW5kZXJNYXRlcmlhbCA9IHRoaXMubWVzaE1hdGVyaWFsVG9SZW5kZXJNYXRlcmlhbChvYmopXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gIH1cblxuICBwcml2YXRlIG1lc2hNYXRlcmlhbFRvUmVuZGVyTWF0ZXJpYWwob2JqOiBNZXNoKSB7XG4gICAgY29uc3QgbWF0ZXJpYWwgPSBBcnJheS5pc0FycmF5KG9iai5tYXRlcmlhbCkgPyBvYmoubWF0ZXJpYWxbMF0gOiBvYmoubWF0ZXJpYWxcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuZ2V0TWF0ZXJpYWxDb2xvcihtYXRlcmlhbClcbiAgICBjb25zdCBvcGFjaXR5ID0gbWF0ZXJpYWw/Lm9wYWNpdHkgPz8gMVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBtYXRlcmlhbD8udXVpZCA/PyBgJHtvYmoudXVpZH06bWF0ZXJpYWxgLFxuICAgICAgc3BlY2tsZV90eXBlOiAnT2JqZWN0cy5PdGhlci5SZW5kZXJNYXRlcmlhbCcsXG4gICAgICBuYW1lOiBtYXRlcmlhbD8ubmFtZSB8fCAnTWF0ZXJpYWwnLFxuICAgICAgZGlmZnVzZTogdGhpcy50b0FyZ2JJbnQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgb3BhY2l0eSksXG4gICAgICBvcGFjaXR5LFxuICAgICAgcm91Z2huZXNzOiAxLFxuICAgICAgbWV0YWxuZXNzOiAwXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXRlcmlhbENvbG9yKG1hdGVyaWFsPzogTWF0ZXJpYWwpIHtcbiAgICBjb25zdCBtYXliZUNvbG9yID0gbWF0ZXJpYWwgYXMgTWF0ZXJpYWwgJiB7XG4gICAgICBjb2xvcj86IHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9XG4gICAgfVxuICAgIHJldHVybiBtYXliZUNvbG9yPy5jb2xvciA/PyB7IHI6IDAuNSwgZzogMC41LCBiOiAwLjUgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b0FyZ2JJbnQocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYTogbnVtYmVyKSB7XG4gICAgY29uc3QgYWxwaGEgPSB0aGlzLnRvQnl0ZShhKVxuICAgIGNvbnN0IHJlZCA9IHRoaXMudG9CeXRlKHIpXG4gICAgY29uc3QgZ3JlZW4gPSB0aGlzLnRvQnl0ZShnKVxuICAgIGNvbnN0IGJsdWUgPSB0aGlzLnRvQnl0ZShiKVxuICAgIHJldHVybiAoYWxwaGEgPDwgMjQpIHwgKHJlZCA8PCAxNikgfCAoZ3JlZW4gPDwgOCkgfCBibHVlXG4gIH1cblxuICBwcml2YXRlIHRvQnl0ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSAqIDI1NSkpKVxuICB9XG5cbiAgcHJpdmF0ZSBncm91cFRvTm9kZShvYmo6IE9iamVjdDNELCBub2RlOiBUcmVlTm9kZSkge1xuICAgIG9ialxyXG4gICAgbm9kZVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IE1hdGhVdGlscywgTWF0cml4NCB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBDaHVua0FycmF5LCB0eXBlIE5vZGVEYXRhIH0gZnJvbSAnLi4vLi4vLi4vaW5kZXguanMnXHJcbmltcG9ydCB7IHR5cGUgR2VvbWV0cnlEYXRhIH0gZnJvbSAnLi4vLi4vY29udmVydGVyL0dlb21ldHJ5LmpzJ1xyXG5pbXBvcnQgeyBHZW9tZXRyeUNvbnZlcnRlciwgU3BlY2tsZVR5cGUgfSBmcm9tICcuLi9HZW9tZXRyeUNvbnZlcnRlci5qcydcclxuaW1wb3J0IHsgbWVyZ2VWZXJ0aWNlcyB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS91dGlscy9CdWZmZXJHZW9tZXRyeVV0aWxzLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIE9iakdlb21ldHJ5Q29udmVydGVyIGV4dGVuZHMgR2VvbWV0cnlDb252ZXJ0ZXIge1xyXG4gIHB1YmxpYyBnZXRTcGVja2xlVHlwZShub2RlOiBOb2RlRGF0YSk6IFNwZWNrbGVUeXBlIHtcclxuICAgIHN3aXRjaCAobm9kZS5yYXcudHlwZSkge1xyXG4gICAgICBjYXNlICdHcm91cCc6XHJcbiAgICAgICAgcmV0dXJuIFNwZWNrbGVUeXBlLkJsb2NrSW5zdGFuY2VcclxuICAgICAgY2FzZSAnTWVzaCc6XHJcbiAgICAgICAgcmV0dXJuIFNwZWNrbGVUeXBlLk1lc2hcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gU3BlY2tsZVR5cGUuVW5rbm93blxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnZlcnROb2RlVG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEgfCBudWxsIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFNwZWNrbGVUeXBlKG5vZGUpXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTcGVja2xlVHlwZS5CbG9ja0luc3RhbmNlOlxyXG4gICAgICAgIHJldHVybiB0aGlzLkJsb2NrSW5zdGFuY2VUb0dlb21ldHJ5RGF0YShub2RlKVxyXG4gICAgICBjYXNlIFNwZWNrbGVUeXBlLk1lc2g6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuTWVzaFRvR2VvbWV0cnlEYXRhKG5vZGUpXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNwb3NlTm9kZUdlb21ldHJ5RGF0YShub2RlOiBOb2RlRGF0YSk6IHZvaWQge1xuICAgIGNvbnN0IHJhdyA9IG5vZGUucmF3IGFzIHtcbiAgICAgIHR5cGU/OiBzdHJpbmdcbiAgICAgIGdlb21ldHJ5PzogeyBkaXNwb3NlPzogKCkgPT4gdm9pZCB9XG4gICAgICBtYXRlcmlhbD86IHVua25vd25cbiAgICAgIGNoaWxkcmVuPzogdW5rbm93bltdXG4gICAgICBjbGVhcj86ICgpID0+IHZvaWRcbiAgICAgIHZlcnRpY2VzPzogdW5rbm93blxuICAgICAgZmFjZXM/OiB1bmtub3duXG4gICAgICBjb2xvcnM/OiB1bmtub3duXG4gICAgICBub3JtYWxzPzogdW5rbm93blxuICAgIH1cblxuICAgIGlmIChyYXcudHlwZSA9PT0gJ01lc2gnKSB7XG4gICAgICByYXcuZ2VvbWV0cnk/LmRpc3Bvc2U/LigpXG4gICAgICBkZWxldGUgcmF3Lmdlb21ldHJ5XG4gICAgICBkZWxldGUgcmF3Lm1hdGVyaWFsXG4gICAgICBkZWxldGUgcmF3LnZlcnRpY2VzXG4gICAgICBkZWxldGUgcmF3LmZhY2VzXG4gICAgICBkZWxldGUgcmF3LmNvbG9yc1xuICAgICAgZGVsZXRlIHJhdy5ub3JtYWxzXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocmF3LnR5cGUgPT09ICdHcm91cCcpIHtcbiAgICAgIHJhdy5jbGVhcj8uKClcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhdy5jaGlsZHJlbikpIHJhdy5jaGlsZHJlbi5sZW5ndGggPSAwXG4gICAgfVxuICB9XG5cclxuICAvKiogQkxPQ0sgSU5TVEFOQ0UgKi9cclxuICBwcm90ZWN0ZWQgQmxvY2tJbnN0YW5jZVRvR2VvbWV0cnlEYXRhKG5vZGU6IE5vZGVEYXRhKTogR2VvbWV0cnlEYXRhIHtcclxuICAgIGNvbnN0IGNvbnZlcnNpb25GYWN0b3IgPSAxXHJcbiAgICBjb25zdCBtYXRyaXggPSBuZXcgTWF0cml4NCgpLmNvcHkobm9kZS5yYXcubWF0cml4V29ybGQpXHJcbiAgICBjb25zdCB0cmFuc2Zvcm06IE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpXHJcbiAgICAgIC5tYWtlU2NhbGUoY29udmVyc2lvbkZhY3RvciwgY29udmVyc2lvbkZhY3RvciwgY29udmVyc2lvbkZhY3RvcilcclxuICAgICAgLm11bHRpcGx5KG1hdHJpeClcclxuICAgICAgLm11bHRpcGx5KFxyXG4gICAgICAgIG5ldyBNYXRyaXg0KCkubWFrZVNjYWxlKFxyXG4gICAgICAgICAgMSAvIGNvbnZlcnNpb25GYWN0b3IsXHJcbiAgICAgICAgICAxIC8gY29udmVyc2lvbkZhY3RvcixcclxuICAgICAgICAgIDEgLyBjb252ZXJzaW9uRmFjdG9yXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYXR0cmlidXRlczogbnVsbCxcclxuICAgICAgYmFrZVRyYW5zZm9ybTogbnVsbCxcclxuICAgICAgdHJhbnNmb3JtXHJcbiAgICB9IGFzIEdlb21ldHJ5RGF0YVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTUVTSFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBNZXNoVG9HZW9tZXRyeURhdGEobm9kZTogTm9kZURhdGEpOiBHZW9tZXRyeURhdGEgfCBudWxsIHtcclxuICAgIGlmICghbm9kZS5yYXcpIHJldHVybiBudWxsXHJcblxyXG4gICAgY29uc3QgY29udmVyc2lvbkZhY3RvciA9IDFcclxuICAgIGlmICghbm9kZS5yYXcuZ2VvbWV0cnkuaW5kZXggfHwgbm9kZS5yYXcuZ2VvbWV0cnkuaW5kZXguYXJyYXkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIG5vZGUucmF3Lmdlb21ldHJ5ID0gbWVyZ2VWZXJ0aWNlcyhub2RlLnJhdy5nZW9tZXRyeSlcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICBQT1NJVElPTjogbmV3IENodW5rQXJyYXkoW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkYXRhOiBub2RlLnJhdy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5LFxyXG4gICAgICAgICAgICBpZDogTWF0aFV0aWxzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VzOiAxXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgSU5ERVg6IG5ldyBDaHVua0FycmF5KFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGF0YTogbm9kZS5yYXcuZ2VvbWV0cnkuaW5kZXguYXJyYXksXHJcbiAgICAgICAgICAgIGlkOiBNYXRoVXRpbHMuZ2VuZXJhdGVVVUlEKCksXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IDFcclxuICAgICAgICAgIH1cclxuICAgICAgICBdKSxcclxuICAgICAgICAuLi4obm9kZS5yYXcuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciAmJiB7XHJcbiAgICAgICAgICBDT0xPUjogbmV3IENodW5rQXJyYXkoW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZGF0YTogbm9kZS5yYXcuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5hcnJheSxcclxuICAgICAgICAgICAgICBpZDogTWF0aFV0aWxzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICAgICAgICAgIHJlZmVyZW5jZXM6IDFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICBiYWtlVHJhbnNmb3JtOiBuZXcgTWF0cml4NCgpLm1ha2VTY2FsZShcclxuICAgICAgICBjb252ZXJzaW9uRmFjdG9yLFxyXG4gICAgICAgIGNvbnZlcnNpb25GYWN0b3IsXHJcbiAgICAgICAgY29udmVyc2lvbkZhY3RvclxyXG4gICAgICApLFxyXG4gICAgICB0cmFuc2Zvcm06IG51bGxcclxuICAgIH0gc2F0aXNmaWVzIEdlb21ldHJ5RGF0YVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1xuICBCdWZmZXJHZW9tZXRyeSxcbiAgQ29sb3IsXG4gIERvdWJsZVNpZGUsXG4gIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUsXG4gIEdyb3VwLFxuICBNYXRyaXg0LFxuICBNZXNoLFxuICBNZXNoQmFzaWNNYXRlcmlhbCxcbiAgVWludDMyQnVmZmVyQXR0cmlidXRlLFxuICBWZWN0b3IzXG59IGZyb20gJ3RocmVlJ1xuaW1wb3J0IHsgV29ybGRUcmVlIH0gZnJvbSAnLi4vLi4vdHJlZS9Xb3JsZFRyZWUuanMnXG5pbXBvcnQgeyBPYmpDb252ZXJ0ZXIgfSBmcm9tICcuLi9PQkovT2JqQ29udmVydGVyLmpzJ1xuaW1wb3J0IHsgT2JqR2VvbWV0cnlDb252ZXJ0ZXIgfSBmcm9tICcuLi9PQkovT2JqR2VvbWV0cnlDb252ZXJ0ZXIuanMnXG5pbXBvcnQgeyBMb2FkZXIsIExvYWRlckV2ZW50IH0gZnJvbSAnLi4vTG9hZGVyLmpzJ1xuaW1wb3J0IExvZ2dlciBmcm9tICcuLi8uLi91dGlscy9Mb2dnZXIuanMnXG5cbnR5cGUgTGFyZ2VNb2RlbE1hbmlmZXN0ID0ge1xuICBib3VuZHM/OiBudW1iZXJbXVxuICB0aWxlczogQXJyYXk8e1xuICAgIGlkPzogc3RyaW5nXG4gICAgYmJveD86IG51bWJlcltdXG4gICAgbG9kczogQXJyYXk8e1xuICAgICAgbGV2ZWw/OiBudW1iZXJcbiAgICAgIHVybDogc3RyaW5nXG4gICAgICBieXRlcz86IG51bWJlclxuICAgICAgbWVzaGVzPzogbnVtYmVyXG4gICAgICB2ZXJ0ZXhDb3VudD86IG51bWJlclxuICAgICAgaW5kZXhDb3VudD86IG51bWJlclxuICAgICAgdHJpYW5nbGVDb3VudD86IG51bWJlclxuICAgIH0+XG4gIH0+XG59XG5cbmNvbnN0IHRpbGVNYWdpYyA9ICdTUEtUSUxFMSdcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbmNvbnN0IERFRkFVTFRfVElMRV9MT0FEX0NPTkNVUlJFTkNZID0gNFxuY29uc3QgVElMRV9MT0FEX0NPTkNVUlJFTkNZX1NUT1JBR0VfS0VZID1cbiAgJ1NQRUNLTEVfVklFV0VSX0xBUkdFX01PREVMX1RJTEVfTE9BRF9DT05DVVJSRU5DWSdcblxudHlwZSBUaWxlTG9kID0gTGFyZ2VNb2RlbE1hbmlmZXN0Wyd0aWxlcyddW251bWJlcl1bJ2xvZHMnXVtudW1iZXJdXG50eXBlIE1hbmlmZXN0VGlsZSA9IExhcmdlTW9kZWxNYW5pZmVzdFsndGlsZXMnXVtudW1iZXJdXG50eXBlIFNlbGVjdGVkVGlsZSA9IHtcbiAgdGlsZTogTWFuaWZlc3RUaWxlXG4gIGxvZDogVGlsZUxvZFxuICBjZW50ZXJEaXN0YW5jZTogbnVtYmVyXG59XG50eXBlIFRpbGVTdHJpbmcgPSB7XG4gIHZhbHVlPzogc3RyaW5nXG4gIHRvdGFsQnl0ZUxlbmd0aDogbnVtYmVyXG59XG5cbmV4cG9ydCBjbGFzcyBMYXJnZU1vZGVsU3RyZWFtaW5nTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHtcbiAgcHJvdGVjdGVkIHRyZWU6IFdvcmxkVHJlZVxuICBwcm90ZWN0ZWQgY29udmVydGVyOiBPYmpDb252ZXJ0ZXJcbiAgcHJvdGVjdGVkIGlzRmluaXNoZWQgPSBmYWxzZVxuICBwcm90ZWN0ZWQgaXNDYW5jZWxsZWQgPSBmYWxzZVxuICBwcml2YXRlIG1hbmlmZXN0OiBMYXJnZU1vZGVsTWFuaWZlc3RcbiAgcHJpdmF0ZSBhcnRpZmFjdEJhc2VVcmw6IHN0cmluZ1xuICBwcml2YXRlIHRva2VuPzogc3RyaW5nXG4gIHByaXZhdGUgYWJvcnRDb250cm9sbGVycyA9IG5ldyBTZXQ8QWJvcnRDb250cm9sbGVyPigpXG4gIHByaXZhdGUgaWZjRWxlbWVudFBhcnRJZHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KClcblxuICBwdWJsaWMgZ2V0IHJlc291cmNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlXG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbmlzaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRmluaXNoZWRcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICB0YXJnZXRUcmVlOiBXb3JsZFRyZWUsXG4gICAgcmVzb3VyY2U6IHN0cmluZyxcbiAgICBtYW5pZmVzdDogTGFyZ2VNb2RlbE1hbmlmZXN0LFxuICAgIGFydGlmYWN0QmFzZVVybDogc3RyaW5nLFxuICAgIHRva2VuPzogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKHJlc291cmNlKVxuICAgIHRoaXMudHJlZSA9IHRhcmdldFRyZWVcbiAgICB0aGlzLmNvbnZlcnRlciA9IG5ldyBPYmpDb252ZXJ0ZXIodGFyZ2V0VHJlZSlcbiAgICB0aGlzLm1hbmlmZXN0ID0gbWFuaWZlc3RcbiAgICB0aGlzLmFydGlmYWN0QmFzZVVybCA9IGFydGlmYWN0QmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpXG4gICAgdGhpcy50b2tlbiA9IHRva2VuXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBncm91cCA9IG5ldyBHcm91cCgpXG4gICAgZ3JvdXAubmFtZSA9IHRoaXMuX3Jlc291cmNlXG5cbiAgICBjb25zdCBzZWxlY3RlZFRpbGVzID0gdGhpcy5zZWxlY3RJbml0aWFsVGlsZXMoKVxuXG4gICAgbGV0IGxvYWRlZFRpbGVzID0gMFxuICAgIGNvbnN0IGNvbmN1cnJlbmN5ID0gdGhpcy5nZXRQb3NpdGl2ZUludGVnZXJTZXR0aW5nKFxuICAgICAgVElMRV9MT0FEX0NPTkNVUlJFTkNZX1NUT1JBR0VfS0VZLFxuICAgICAgREVGQVVMVF9USUxFX0xPQURfQ09OQ1VSUkVOQ1lcbiAgICApXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZFRpbGVzLmxlbmd0aDsgaSArPSBjb25jdXJyZW5jeSkge1xuICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHJldHVybiBmYWxzZVxuICAgICAgY29uc3QgYmF0Y2ggPSBzZWxlY3RlZFRpbGVzLnNsaWNlKGksIGkgKyBjb25jdXJyZW5jeSlcbiAgICAgIGNvbnN0IHRpbGVHcm91cHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgYmF0Y2gubWFwKCh7IGxvZCB9KSA9PlxuICAgICAgICAgIHRoaXMubG9hZFRpbGUobG9kLnVybCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHJldHVybiBudWxsXG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgdGlsZUdyb3VwIG9mIHRpbGVHcm91cHMpIHtcbiAgICAgICAgaWYgKCF0aWxlR3JvdXApIHJldHVybiBmYWxzZVxuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkgcmV0dXJuIGZhbHNlXG4gICAgICAgIGdyb3VwLmFkZCh0aWxlR3JvdXApXG4gICAgICAgIGxvYWRlZFRpbGVzKytcbiAgICAgICAgdGhpcy5lbWl0KExvYWRlckV2ZW50LkxvYWRQcm9ncmVzcywge1xuICAgICAgICAgIGlkOiB0aGlzLl9yZXNvdXJjZSxcbiAgICAgICAgICBwcm9ncmVzczogbG9hZGVkVGlsZXMgLyBNYXRoLm1heChzZWxlY3RlZFRpbGVzLmxlbmd0aCwgMSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkgcmV0dXJuIGZhbHNlXG4gICAgYXdhaXQgdGhpcy5jb252ZXJ0ZXIudHJhdmVyc2UodGhpcy5fcmVzb3VyY2UsIGdyb3VwLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSlcbiAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCByZW5kZXJUcmVlID0gdGhpcy50cmVlLmdldFJlbmRlclRyZWUodGhpcy5fcmVzb3VyY2UpXG4gICAgaWYgKCFyZW5kZXJUcmVlKSB7XG4gICAgICBMb2dnZXIuZXJyb3IoYENvdWxkIG5vdCBnZXQgcmVuZGVyIHRyZWUgZm9yICR7dGhpcy5fcmVzb3VyY2V9YClcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGJ1aWx0ID0gYXdhaXQgcmVuZGVyVHJlZS5idWlsZFJlbmRlclRyZWUobmV3IE9iakdlb21ldHJ5Q29udmVydGVyKCkpXG4gICAgdGhpcy5pc0ZpbmlzaGVkID0gYnVpbHRcbiAgICByZXR1cm4gYnVpbHRcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWVcbiAgICB0aGlzLmFib3J0Q29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4gY29udHJvbGxlci5hYm9ydCgpKVxuICAgIHRoaXMuYWJvcnRDb250cm9sbGVycy5jbGVhcigpXG4gICAgdGhpcy5pc0ZpbmlzaGVkID0gZmFsc2VcbiAgICB0aGlzLmVtaXQoTG9hZGVyRXZlbnQuTG9hZENhbmNlbGxlZCwgdGhpcy5fcmVzb3VyY2UpXG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEluaXRpYWxUaWxlcygpOiBTZWxlY3RlZFRpbGVbXSB7XG4gICAgY29uc3QgbW9kZWxDZW50ZXIgPSB0aGlzLmdldEJvdW5kc0NlbnRlcih0aGlzLm1hbmlmZXN0LmJvdW5kcylcblxuICAgIHJldHVybiB0aGlzLm1hbmlmZXN0LnRpbGVzXG4gICAgICAubWFwKCh0aWxlKTogU2VsZWN0ZWRUaWxlIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IGxvZCA9IHRoaXMuZ2V0TG93ZXN0TG9kKHRpbGUpXG4gICAgICAgIGlmICghbG9kPy51cmwpIHJldHVybiBudWxsXG5cbiAgICAgICAgY29uc3QgY2VudGVyID0gdGhpcy5nZXRCb3VuZHNDZW50ZXIodGlsZS5iYm94KVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRpbGUsXG4gICAgICAgICAgbG9kLFxuICAgICAgICAgIGNlbnRlckRpc3RhbmNlOiBjZW50ZXJcbiAgICAgICAgICAgID8gbW9kZWxDZW50ZXI/LmRpc3RhbmNlVG9TcXVhcmVkKGNlbnRlcikgPz8gMFxuICAgICAgICAgICAgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigodGlsZSk6IHRpbGUgaXMgU2VsZWN0ZWRUaWxlID0+ICEhdGlsZSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLmNlbnRlckRpc3RhbmNlICE9PSBiLmNlbnRlckRpc3RhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIGEuY2VudGVyRGlzdGFuY2UgLSBiLmNlbnRlckRpc3RhbmNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhLmxvZC5ieXRlcyA/PyAwKSAtIChiLmxvZC5ieXRlcyA/PyAwKVxuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG93ZXN0TG9kKHRpbGU6IE1hbmlmZXN0VGlsZSk6IFRpbGVMb2QgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aWxlLmxvZHNcbiAgICAgIC5maWx0ZXIoKGxvZCkgPT4gISFsb2Q/LnVybClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGxldmVsQSA9IGEubGV2ZWwgPz8gMFxuICAgICAgICBjb25zdCBsZXZlbEIgPSBiLmxldmVsID8/IDBcbiAgICAgICAgaWYgKGxldmVsQSAhPT0gbGV2ZWxCKSByZXR1cm4gbGV2ZWxBIC0gbGV2ZWxCXG4gICAgICAgIHJldHVybiAoYS5ieXRlcyA/PyAwKSAtIChiLmJ5dGVzID8/IDApXG4gICAgICB9KVswXVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRCb3VuZHNDZW50ZXIoYm91bmRzPzogbnVtYmVyW10pIHtcbiAgICBpZiAoIWJvdW5kcyB8fCBib3VuZHMubGVuZ3RoIDwgNikgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gbmV3IFZlY3RvcjMoXG4gICAgICAoYm91bmRzWzBdICsgYm91bmRzWzNdKSAvIDIsXG4gICAgICAoYm91bmRzWzFdICsgYm91bmRzWzRdKSAvIDIsXG4gICAgICAoYm91bmRzWzJdICsgYm91bmRzWzVdKSAvIDJcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRUaWxlKHRpbGVVcmw6IHN0cmluZykge1xuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIHRoaXMuYWJvcnRDb250cm9sbGVycy5hZGQoYWJvcnRDb250cm9sbGVyKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHt0aGlzLmFydGlmYWN0QmFzZVVybH0vJHt0aWxlVXJsfWAsIHtcbiAgICAgICAgaGVhZGVyczogdGhpcy50b2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCB9IDogdW5kZWZpbmVkLFxuICAgICAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICB9KVxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCB2aWV3ZXIgZGVyaXZhdGl2ZSB0aWxlICR7dGlsZVVybH1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5wYXJzZVRpbGUoYXdhaXQgcmVzLmFycmF5QnVmZmVyKCksIHRpbGVVcmwpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVycy5kZWxldGUoYWJvcnRDb250cm9sbGVyKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUaWxlKGJ1ZmZlcjogQXJyYXlCdWZmZXIsIHRpbGVVcmw6IHN0cmluZykge1xuICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKVxuICAgIGxldCBvZmZzZXQgPSAwXG4gICAgY29uc3QgbWFnaWMgPSB0ZXh0RGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBvZmZzZXQsIHRpbGVNYWdpYy5sZW5ndGgpKVxuICAgIG9mZnNldCArPSB0aWxlTWFnaWMubGVuZ3RoXG4gICAgaWYgKG1hZ2ljICE9PSB0aWxlTWFnaWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3ZXIgZGVyaXZhdGl2ZSB0aWxlIG1hZ2ljIGluICR7dGlsZVVybH1gKVxuICAgIH1cblxuICAgIGNvbnN0IHZlcnNpb24gPSB2aWV3LmdldEludDMyKG9mZnNldCwgdHJ1ZSlcbiAgICBvZmZzZXQgKz0gNFxuICAgIGlmIChcbiAgICAgIHZlcnNpb24gIT09IDEgJiZcbiAgICAgIHZlcnNpb24gIT09IDIgJiZcbiAgICAgIHZlcnNpb24gIT09IDMgJiZcbiAgICAgIHZlcnNpb24gIT09IDQgJiZcbiAgICAgIHZlcnNpb24gIT09IDVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdmlld2VyIGRlcml2YXRpdmUgdGlsZSB2ZXJzaW9uICR7dmVyc2lvbn1gKVxuICAgIH1cblxuICAgIGNvbnN0IG1lc2hDb3VudCA9IHZpZXcuZ2V0SW50MzIob2Zmc2V0LCB0cnVlKVxuICAgIG9mZnNldCArPSA0XG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgR3JvdXAoKVxuICAgIGdyb3VwLm5hbWUgPSB0aWxlVXJsXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc2hDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBleHByZXNzSWQgPSB2aWV3LmdldEludDMyKG9mZnNldCwgdHJ1ZSlcbiAgICAgIG9mZnNldCArPSA0XG4gICAgICBjb25zdCBtZXNoSWQgPSB2aWV3LmdldEludDMyKG9mZnNldCwgdHJ1ZSlcbiAgICAgIG9mZnNldCArPSA0XG4gICAgICBjb25zdCBpZmNHdWlkID0gdmVyc2lvbiA+PSAyID8gdGhpcy5yZWFkVGlsZVN0cmluZyhidWZmZXIsIHZpZXcsIG9mZnNldCkgOiBudWxsXG4gICAgICBpZiAodmVyc2lvbiA+PSAyKSBvZmZzZXQgKz0gaWZjR3VpZD8udG90YWxCeXRlTGVuZ3RoID8/IDBcbiAgICAgIGNvbnN0IGlmY1R5cGUgPSB2ZXJzaW9uID49IDMgPyB0aGlzLnJlYWRUaWxlU3RyaW5nKGJ1ZmZlciwgdmlldywgb2Zmc2V0KSA6IG51bGxcbiAgICAgIGlmICh2ZXJzaW9uID49IDMpIG9mZnNldCArPSBpZmNUeXBlPy50b3RhbEJ5dGVMZW5ndGggPz8gMFxuICAgICAgY29uc3QgaWZjTmFtZSA9IHZlcnNpb24gPj0gMyA/IHRoaXMucmVhZFRpbGVTdHJpbmcoYnVmZmVyLCB2aWV3LCBvZmZzZXQpIDogbnVsbFxuICAgICAgaWYgKHZlcnNpb24gPj0gMykgb2Zmc2V0ICs9IGlmY05hbWU/LnRvdGFsQnl0ZUxlbmd0aCA/PyAwXG4gICAgICBjb25zdCBpZmNFbGVtZW50QXNzZW1ibHlHdWlkID1cbiAgICAgICAgdmVyc2lvbiA+PSA0ID8gdGhpcy5yZWFkVGlsZVN0cmluZyhidWZmZXIsIHZpZXcsIG9mZnNldCkgOiBudWxsXG4gICAgICBpZiAodmVyc2lvbiA+PSA0KSBvZmZzZXQgKz0gaWZjRWxlbWVudEFzc2VtYmx5R3VpZD8udG90YWxCeXRlTGVuZ3RoID8/IDBcbiAgICAgIGNvbnN0IGlmY0VsZW1lbnRBc3NlbWJseVR5cGUgPVxuICAgICAgICB2ZXJzaW9uID49IDQgPyB0aGlzLnJlYWRUaWxlU3RyaW5nKGJ1ZmZlciwgdmlldywgb2Zmc2V0KSA6IG51bGxcbiAgICAgIGlmICh2ZXJzaW9uID49IDQpIG9mZnNldCArPSBpZmNFbGVtZW50QXNzZW1ibHlUeXBlPy50b3RhbEJ5dGVMZW5ndGggPz8gMFxuICAgICAgY29uc3QgaWZjRWxlbWVudEFzc2VtYmx5TmFtZSA9XG4gICAgICAgIHZlcnNpb24gPj0gNCA/IHRoaXMucmVhZFRpbGVTdHJpbmcoYnVmZmVyLCB2aWV3LCBvZmZzZXQpIDogbnVsbFxuICAgICAgaWYgKHZlcnNpb24gPj0gNCkgb2Zmc2V0ICs9IGlmY0VsZW1lbnRBc3NlbWJseU5hbWU/LnRvdGFsQnl0ZUxlbmd0aCA/PyAwXG4gICAgICBjb25zdCBzb3VyY2VHdWlkID0gdmVyc2lvbiA+PSA1ID8gdGhpcy5yZWFkVGlsZVN0cmluZyhidWZmZXIsIHZpZXcsIG9mZnNldCkgOiBudWxsXG4gICAgICBpZiAodmVyc2lvbiA+PSA1KSBvZmZzZXQgKz0gc291cmNlR3VpZD8udG90YWxCeXRlTGVuZ3RoID8/IDBcbiAgICAgIGNvbnN0IGlmY0VsZW1lbnRBc3NlbWJseVNvdXJjZUd1aWQgPVxuICAgICAgICB2ZXJzaW9uID49IDUgPyB0aGlzLnJlYWRUaWxlU3RyaW5nKGJ1ZmZlciwgdmlldywgb2Zmc2V0KSA6IG51bGxcbiAgICAgIGlmICh2ZXJzaW9uID49IDUpIHtcbiAgICAgICAgb2Zmc2V0ICs9IGlmY0VsZW1lbnRBc3NlbWJseVNvdXJjZUd1aWQ/LnRvdGFsQnl0ZUxlbmd0aCA/PyAwXG4gICAgICB9XG4gICAgICBjb25zdCB2ZXJ0ZXhDb3VudCA9IHZpZXcuZ2V0SW50MzIob2Zmc2V0LCB0cnVlKVxuICAgICAgb2Zmc2V0ICs9IDRcbiAgICAgIGNvbnN0IGluZGV4Q291bnQgPSB2aWV3LmdldEludDMyKG9mZnNldCwgdHJ1ZSlcbiAgICAgIG9mZnNldCArPSA0XG5cbiAgICAgIGNvbnN0IGNvbG9yID0gW1xuICAgICAgICB2aWV3LmdldEZsb2F0MzIob2Zmc2V0LCB0cnVlKSxcbiAgICAgICAgdmlldy5nZXRGbG9hdDMyKG9mZnNldCArIDQsIHRydWUpLFxuICAgICAgICB2aWV3LmdldEZsb2F0MzIob2Zmc2V0ICsgOCwgdHJ1ZSksXG4gICAgICAgIHZpZXcuZ2V0RmxvYXQzMihvZmZzZXQgKyAxMiwgdHJ1ZSlcbiAgICAgIF1cbiAgICAgIG9mZnNldCArPSAxNlxuXG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQXJyYXk8bnVtYmVyPigxNilcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7IGorKykge1xuICAgICAgICB0cmFuc2Zvcm1bal0gPSB2aWV3LmdldEZsb2F0MzIob2Zmc2V0LCB0cnVlKVxuICAgICAgICBvZmZzZXQgKz0gNFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KFxuICAgICAgICBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCB2ZXJ0ZXhDb3VudCAqIDMpXG4gICAgICApXG4gICAgICBvZmZzZXQgKz0gdmVydGV4Q291bnQgKiAzICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UXG4gICAgICBjb25zdCBpbmRpY2VzID0gbmV3IFVpbnQzMkFycmF5KG5ldyBVaW50MzJBcnJheShidWZmZXIsIG9mZnNldCwgaW5kZXhDb3VudCkpXG4gICAgICBvZmZzZXQgKz0gaW5kZXhDb3VudCAqIFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UXG5cbiAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KClcbiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbnMsIDMpKVxuICAgICAgZ2VvbWV0cnkuc2V0SW5kZXgobmV3IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZShpbmRpY2VzLCAxKSlcblxuICAgICAgY29uc3QgbWVzaCA9IG5ldyBNZXNoKFxuICAgICAgICBnZW9tZXRyeSxcbiAgICAgICAgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcbiAgICAgICAgICBjb2xvcjogbmV3IENvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pLFxuICAgICAgICAgIG9wYWNpdHk6IGNvbG9yWzNdLFxuICAgICAgICAgIHRyYW5zcGFyZW50OiBjb2xvclszXSA8IDEsXG4gICAgICAgICAgc2lkZTogRG91YmxlU2lkZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgbWVzaC51dWlkID0gYCR7dGlsZVVybH06JHtleHByZXNzSWR9OiR7bWVzaElkfWBcbiAgICAgIG1lc2gubmFtZSA9IGBQYXJ0ICR7bWVzaElkfWBcbiAgICAgIGNvbnN0IGlmY0VsZW1lbnRHdWlkID0gaWZjRWxlbWVudEFzc2VtYmx5R3VpZD8udmFsdWUgPz8gaWZjR3VpZD8udmFsdWVcbiAgICAgIGNvbnN0IGlmY0VsZW1lbnRTb3VyY2VHdWlkID1cbiAgICAgICAgaWZjRWxlbWVudEFzc2VtYmx5U291cmNlR3VpZD8udmFsdWUgPz8gc291cmNlR3VpZD8udmFsdWVcbiAgICAgIGNvbnN0IGFwcGxpY2F0aW9uR3VpZCA9IGlmY0VsZW1lbnRTb3VyY2VHdWlkID8/IGlmY0VsZW1lbnRHdWlkXG4gICAgICBjb25zdCBpZmNFbGVtZW50VHlwZSA9IGlmY0VsZW1lbnRBc3NlbWJseVR5cGU/LnZhbHVlID8/IGlmY1R5cGU/LnZhbHVlXG4gICAgICBjb25zdCBpZmNFbGVtZW50TmFtZSA9IGlmY0VsZW1lbnRBc3NlbWJseU5hbWU/LnZhbHVlID8/IGlmY05hbWU/LnZhbHVlXG4gICAgICBjb25zdCB0YXJnZXRPYmplY3RJZHMgPSB0aGlzLmdldElmY0VsZW1lbnRQYXJ0SWRzKGFwcGxpY2F0aW9uR3VpZClcbiAgICAgIHRhcmdldE9iamVjdElkcy5wdXNoKG1lc2gudXVpZClcbiAgICAgIG1lc2gudXNlckRhdGEgPSB7XG4gICAgICAgIGlkOiBtZXNoLnV1aWQsXG4gICAgICAgIG5hbWU6IG1lc2gubmFtZSxcbiAgICAgICAgZXhwcmVzc0lkLFxuICAgICAgICBtZXNoSWQsXG4gICAgICAgIGlmY0d1aWQ6IGlmY0d1aWQ/LnZhbHVlLFxuICAgICAgICBpZmNHbG9iYWxJZDogaWZjR3VpZD8udmFsdWUsXG4gICAgICAgIGdsb2JhbElkOiBpZmNHdWlkPy52YWx1ZSxcbiAgICAgICAgc291cmNlR3VpZDogc291cmNlR3VpZD8udmFsdWUsXG4gICAgICAgIGd1aWQ6IGFwcGxpY2F0aW9uR3VpZCxcbiAgICAgICAgYXBwbGljYXRpb25JZDogYXBwbGljYXRpb25HdWlkLFxuICAgICAgICBpZmNUeXBlOiBpZmNUeXBlPy52YWx1ZSxcbiAgICAgICAgaWZjTmFtZTogaWZjTmFtZT8udmFsdWUsXG4gICAgICAgIGlmY0VsZW1lbnRHdWlkLFxuICAgICAgICBpZmNFbGVtZW50U291cmNlR3VpZCxcbiAgICAgICAgaWZjRWxlbWVudFR5cGUsXG4gICAgICAgIGlmY0VsZW1lbnROYW1lLFxuICAgICAgICBpZmNFbGVtZW50QXNzZW1ibHlHdWlkOiBpZmNFbGVtZW50QXNzZW1ibHlHdWlkPy52YWx1ZSxcbiAgICAgICAgaWZjRWxlbWVudEFzc2VtYmx5VHlwZTogaWZjRWxlbWVudEFzc2VtYmx5VHlwZT8udmFsdWUsXG4gICAgICAgIGlmY0VsZW1lbnRBc3NlbWJseU5hbWU6IGlmY0VsZW1lbnRBc3NlbWJseU5hbWU/LnZhbHVlLFxuICAgICAgICBpZmNFbGVtZW50QXNzZW1ibHlTb3VyY2VHdWlkOiBpZmNFbGVtZW50QXNzZW1ibHlTb3VyY2VHdWlkPy52YWx1ZSxcbiAgICAgICAgdGlsZVVybFxuICAgICAgfVxuICAgICAgdGhpcy5zZXRUYXJnZXRPYmplY3RJZHMobWVzaCwgdGFyZ2V0T2JqZWN0SWRzKVxuICAgICAgdGhpcy5zZXRUYXJnZXRPYmplY3RJZHMobWVzaC51c2VyRGF0YSwgdGFyZ2V0T2JqZWN0SWRzKVxuICAgICAgY29uc3QgbWVzaE1ldGFkYXRhID0gbWVzaCBhcyBNZXNoICYge1xuICAgICAgICBhcHBsaWNhdGlvbklkPzogc3RyaW5nXG4gICAgICAgIGlmY0d1aWQ/OiBzdHJpbmdcbiAgICAgICAgaWZjR2xvYmFsSWQ/OiBzdHJpbmdcbiAgICAgICAgc291cmNlR3VpZD86IHN0cmluZ1xuICAgICAgICBndWlkPzogc3RyaW5nXG4gICAgICAgIGlmY1R5cGU/OiBzdHJpbmdcbiAgICAgICAgaWZjTmFtZT86IHN0cmluZ1xuICAgICAgICBpZmNFbGVtZW50R3VpZD86IHN0cmluZ1xuICAgICAgICBpZmNFbGVtZW50U291cmNlR3VpZD86IHN0cmluZ1xuICAgICAgICBpZmNFbGVtZW50VHlwZT86IHN0cmluZ1xuICAgICAgICBpZmNFbGVtZW50TmFtZT86IHN0cmluZ1xuICAgICAgICBpZmNFbGVtZW50QXNzZW1ibHlHdWlkPzogc3RyaW5nXG4gICAgICAgIGlmY0VsZW1lbnRBc3NlbWJseVR5cGU/OiBzdHJpbmdcbiAgICAgICAgaWZjRWxlbWVudEFzc2VtYmx5TmFtZT86IHN0cmluZ1xuICAgICAgICBpZmNFbGVtZW50QXNzZW1ibHlTb3VyY2VHdWlkPzogc3RyaW5nXG4gICAgICAgIGV4cHJlc3NJZD86IG51bWJlclxuICAgICAgICBtZXNoSWQ/OiBudW1iZXJcbiAgICAgIH1cbiAgICAgIG1lc2hNZXRhZGF0YS5hcHBsaWNhdGlvbklkID0gYXBwbGljYXRpb25HdWlkXG4gICAgICBtZXNoTWV0YWRhdGEuaWZjR3VpZCA9IGlmY0d1aWQ/LnZhbHVlXG4gICAgICBtZXNoTWV0YWRhdGEuaWZjR2xvYmFsSWQgPSBpZmNHdWlkPy52YWx1ZVxuICAgICAgbWVzaE1ldGFkYXRhLnNvdXJjZUd1aWQgPSBzb3VyY2VHdWlkPy52YWx1ZVxuICAgICAgbWVzaE1ldGFkYXRhLmd1aWQgPSBhcHBsaWNhdGlvbkd1aWRcbiAgICAgIG1lc2hNZXRhZGF0YS5pZmNUeXBlID0gaWZjVHlwZT8udmFsdWVcbiAgICAgIG1lc2hNZXRhZGF0YS5pZmNOYW1lID0gaWZjTmFtZT8udmFsdWVcbiAgICAgIG1lc2hNZXRhZGF0YS5pZmNFbGVtZW50R3VpZCA9IGlmY0VsZW1lbnRHdWlkXG4gICAgICBtZXNoTWV0YWRhdGEuaWZjRWxlbWVudFNvdXJjZUd1aWQgPSBpZmNFbGVtZW50U291cmNlR3VpZFxuICAgICAgbWVzaE1ldGFkYXRhLmlmY0VsZW1lbnRUeXBlID0gaWZjRWxlbWVudFR5cGVcbiAgICAgIG1lc2hNZXRhZGF0YS5pZmNFbGVtZW50TmFtZSA9IGlmY0VsZW1lbnROYW1lXG4gICAgICBtZXNoTWV0YWRhdGEuaWZjRWxlbWVudEFzc2VtYmx5R3VpZCA9IGlmY0VsZW1lbnRBc3NlbWJseUd1aWQ/LnZhbHVlXG4gICAgICBtZXNoTWV0YWRhdGEuaWZjRWxlbWVudEFzc2VtYmx5VHlwZSA9IGlmY0VsZW1lbnRBc3NlbWJseVR5cGU/LnZhbHVlXG4gICAgICBtZXNoTWV0YWRhdGEuaWZjRWxlbWVudEFzc2VtYmx5TmFtZSA9IGlmY0VsZW1lbnRBc3NlbWJseU5hbWU/LnZhbHVlXG4gICAgICBtZXNoTWV0YWRhdGEuaWZjRWxlbWVudEFzc2VtYmx5U291cmNlR3VpZCA9IGlmY0VsZW1lbnRBc3NlbWJseVNvdXJjZUd1aWQ/LnZhbHVlXG4gICAgICBtZXNoTWV0YWRhdGEuZXhwcmVzc0lkID0gZXhwcmVzc0lkXG4gICAgICBtZXNoTWV0YWRhdGEubWVzaElkID0gbWVzaElkXG4gICAgICBtZXNoLm1hdHJpeC5jb3B5KG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KHRyYW5zZm9ybSkpXG4gICAgICBtZXNoLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZVxuICAgICAgZ3JvdXAuYWRkKG1lc2gpXG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwXG4gIH1cblxuICBwcml2YXRlIGdldElmY0VsZW1lbnRQYXJ0SWRzKGlmY0VsZW1lbnRHdWlkPzogc3RyaW5nKSB7XG4gICAgaWYgKCFpZmNFbGVtZW50R3VpZCkgcmV0dXJuIFtdXG4gICAgbGV0IHBhcnRJZHMgPSB0aGlzLmlmY0VsZW1lbnRQYXJ0SWRzLmdldChpZmNFbGVtZW50R3VpZClcbiAgICBpZiAoIXBhcnRJZHMpIHtcbiAgICAgIHBhcnRJZHMgPSBbXVxuICAgICAgdGhpcy5pZmNFbGVtZW50UGFydElkcy5zZXQoaWZjRWxlbWVudEd1aWQsIHBhcnRJZHMpXG4gICAgfVxuICAgIHJldHVybiBwYXJ0SWRzXG4gIH1cblxuICBwcml2YXRlIHNldFRhcmdldE9iamVjdElkcyhvYmplY3Q6IG9iamVjdCwgdGFyZ2V0T2JqZWN0SWRzOiBzdHJpbmdbXSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsICd0YXJnZXRPYmplY3RJZHMnLCB7XG4gICAgICB2YWx1ZTogdGFyZ2V0T2JqZWN0SWRzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkVGlsZVN0cmluZyhcbiAgICBidWZmZXI6IEFycmF5QnVmZmVyLFxuICAgIHZpZXc6IERhdGFWaWV3LFxuICAgIG9mZnNldDogbnVtYmVyXG4gICk6IFRpbGVTdHJpbmcge1xuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSB2aWV3LmdldEludDMyKG9mZnNldCwgdHJ1ZSlcbiAgICBpZiAoYnl0ZUxlbmd0aCA8PSAwKSByZXR1cm4geyB0b3RhbEJ5dGVMZW5ndGg6IDQgfVxuICAgIGNvbnN0IHZhbHVlID0gdGV4dERlY29kZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgb2Zmc2V0ICsgNCwgYnl0ZUxlbmd0aCkpXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlLFxuICAgICAgdG90YWxCeXRlTGVuZ3RoOiA0ICsgYnl0ZUxlbmd0aCArIHRoaXMuZ2V0Rm91ckJ5dGVQYWRkaW5nKGJ5dGVMZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3VyQnl0ZVBhZGRpbmcoYnl0ZUxlbmd0aDogbnVtYmVyKSB7XG4gICAgcmV0dXJuICg0IC0gKGJ5dGVMZW5ndGggJSA0KSkgJSA0XG4gIH1cblxuICBwcml2YXRlIGdldFBvc2l0aXZlSW50ZWdlclNldHRpbmcoc3RvcmFnZUtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGNvbmZpZ3VyZWRWYWx1ZTogdW5rbm93blxuICAgIHRyeSB7XG4gICAgICBjb25maWd1cmVkVmFsdWUgPSAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbc3RvcmFnZUtleV1cbiAgICAgIGNvbmZpZ3VyZWRWYWx1ZSA/Pz0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGxvY2FsU3RvcmFnZS9nbG9iYWwgb3ZlcnJpZGVzIG1heSBiZSB1bmF2YWlsYWJsZSBpbiBzb21lIHJ1bnRpbWVzLlxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gTnVtYmVyLnBhcnNlSW50KGAke2NvbmZpZ3VyZWRWYWx1ZSA/PyAnJ31gLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZFZhbHVlKSAmJiBwYXJzZWRWYWx1ZSA+IDBcbiAgICAgID8gcGFyc2VkVmFsdWVcbiAgICAgIDogZGVmYXVsdFZhbHVlXG4gIH1cbn1cbiIsImltcG9ydCB7IEdyb3VwIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IExvYWRlciwgTG9hZGVyRXZlbnQgfSBmcm9tICcuLi9Mb2FkZXIuanMnXHJcbmltcG9ydCB7IE9CSkxvYWRlciB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL09CSkxvYWRlci5qcydcclxuaW1wb3J0IHsgT2JqQ29udmVydGVyIH0gZnJvbSAnLi9PYmpDb252ZXJ0ZXIuanMnXHJcbmltcG9ydCB7IE9iakdlb21ldHJ5Q29udmVydGVyIH0gZnJvbSAnLi9PYmpHZW9tZXRyeUNvbnZlcnRlci5qcydcclxuaW1wb3J0IHsgV29ybGRUcmVlIH0gZnJvbSAnLi4vLi4vLi4vaW5kZXguanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIE9iakxvYWRlciBleHRlbmRzIExvYWRlciB7XHJcbiAgcHJvdGVjdGVkIGJhc2VMb2FkZXI6IE9CSkxvYWRlclxyXG4gIHByb3RlY3RlZCBjb252ZXJ0ZXI6IE9iakNvbnZlcnRlclxyXG4gIHByb3RlY3RlZCB0cmVlOiBXb3JsZFRyZWVcclxuICBwcm90ZWN0ZWQgaXNGaW5pc2hlZDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBmaW5pc2hlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzRmluaXNoZWRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0YXJnZXRUcmVlOiBXb3JsZFRyZWUsIHJlc291cmNlOiBzdHJpbmcsIHJlc291cmNlRGF0YT86IHVua25vd24pIHtcclxuICAgIHN1cGVyKHJlc291cmNlLCByZXNvdXJjZURhdGEpXHJcbiAgICB0aGlzLnRyZWUgPSB0YXJnZXRUcmVlXHJcbiAgICB0aGlzLmJhc2VMb2FkZXIgPSBuZXcgT0JKTG9hZGVyKClcclxuICAgIHRoaXMuY29udmVydGVyID0gbmV3IE9iakNvbnZlcnRlcih0aGlzLnRyZWUpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChsb2FkUmVzb2x2ZSwgbG9hZFJlamVjdCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fcmVzb3VyY2VEYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLmJhc2VMb2FkZXIubG9hZChcclxuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2UsXHJcbiAgICAgICAgICAgIChncm91cDogR3JvdXApID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnZlcnRlclxyXG4gICAgICAgICAgICAgICAgLnRyYXZlcnNlKHRoaXMuX3Jlc291cmNlLCBncm91cCwgKCkgPT4ge30pXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxvYWRSZXNvbHZlKClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsb2FkUmVqZWN0KG5ldyBFcnJvcigpKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KExvYWRlckV2ZW50LkxvYWRQcm9ncmVzcywge1xyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IGV2ZW50LmxvYWRlZCAvIChldmVudC50b3RhbCArIDEpLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuX3Jlc291cmNlXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGV2ZW50OiBFcnJvckV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgTG9nZ2VyLmVycm9yKGBMb2FkaW5nIG9iaiAke3RoaXMuX3Jlc291cmNlfSBmYWlsZWQgd2l0aCAke2V2ZW50LmVycm9yfWApXHJcbiAgICAgICAgICAgICAgbG9hZFJlamVjdChuZXcgRXJyb3IoKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlclxyXG4gICAgICAgICAgICAudHJhdmVyc2UoXHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2UsXHJcbiAgICAgICAgICAgICAgdGhpcy5iYXNlTG9hZGVyLnBhcnNlKHRoaXMuX3Jlc291cmNlRGF0YSBhcyBzdHJpbmcpLFxyXG4gICAgICAgICAgICAgICgpID0+IHt9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gbG9hZFJlc29sdmUoKSlcclxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBMb2dnZXIuZXJyb3IoYExvYWRpbmcgb2JqICR7dGhpcy5fcmVzb3VyY2V9IGZhaWxlZCB3aXRoICR7ZXJyfWApXHJcbiAgICAgICAgICAgICAgbG9hZFJlamVjdChuZXcgRXJyb3IoKSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdDAgPSBwZXJmb3JtYW5jZS5ub3coKVxyXG4gICAgICAgICAgY29uc3QgcmVuZGVyVHJlZSA9IHRoaXMudHJlZS5nZXRSZW5kZXJUcmVlKHRoaXMuX3Jlc291cmNlKVxyXG4gICAgICAgICAgaWYgKHJlbmRlclRyZWUpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmVuZGVyVHJlZS5idWlsZFJlbmRlclRyZWUobmV3IE9iakdlb21ldHJ5Q29udmVydGVyKCkpXHJcbiAgICAgICAgICAgIExvZ2dlci5sb2coJ1RyZWUgYnVpbGQgdGltZSAtPiAnLCBwZXJmb3JtYW5jZS5ub3coKSAtIHQwKVxyXG4gICAgICAgICAgICB0aGlzLmlzRmluaXNoZWQgPSB0cnVlXHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgTG9nZ2VyLmVycm9yKGBDb3VsZCBub3QgZ2V0IHJlbmRlciB0cmVlIGZvciAke3RoaXMuX3Jlc291cmNlfWApXHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICBMb2dnZXIuZXJyb3IoYENvdWxkIG5vdCBsb2FkICR7dGhpcy5fcmVzb3VyY2V9YClcclxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoKSlcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLmlzRmluaXNoZWQgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRpc3Bvc2UoKSB7XHJcbiAgICBzdXBlci5kaXNwb3NlKClcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNvbnN0IHNwZWNrbGVWaWV3cG9ydFZlcnQgPSAvKiBnbHNsICovIGBcclxuI2RlZmluZSBVU0VfRU5WTUFQXHJcbiNpbmNsdWRlIDxjb21tb24+XHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICAvLyBUaGUgaGlnaCBjb21wb25lbnQgaXMgc3RvcmVkIGFzIHRoZSBkZWZhdWx0ICdwb3NpdGlvbicgYXR0cmlidXRlIGJ1ZmZlclxyXG4gICAgYXR0cmlidXRlIHZlYzMgcG9zaXRpb25fbG93O1xyXG4gICAgdW5pZm9ybSB2ZWMzIHVWaWV3ZXJfaGlnaDtcclxuICAgIHVuaWZvcm0gdmVjMyB1Vmlld2VyX2xvdztcclxuI2VuZGlmXHJcblxyXG4jaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgIGF0dHJpYnV0ZSBmbG9hdCBvYmpJbmRleDtcclxuXHJcbiAgICAjaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMFxyXG4gICAgICAgICNpZiBfX1ZFUlNJT05fXyA9PSAzMDBcclxuICAgICAgICAgICAgI2RlZmluZSBUUkFOU0ZPUk1fU1RSSURFIDRcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAjZGVmaW5lIFRSQU5TRk9STV9TVFJJREUgNC5cclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0VHJhbnNmb3JtcztcclxuICAgICAgICB1bmlmb3JtIGZsb2F0IG9iakNvdW50O1xyXG4gICAgI2VsaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMVxyXG4gICAgICAgIHVuaWZvcm0gbWF0NCB1VHJhbnNmb3Jtc1tPQkpfQ09VTlRdO1xyXG4gICAgI2VuZGlmXHJcbiNlbmRpZlxyXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcclxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XHJcblxyXG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxyXG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XHJcbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cclxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cclxuXHJcbiNpZmRlZiBVU0VfUlRFXHJcbiAgICBoaWdocCB2ZWM0IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKGluIGhpZ2hwIHZlYzMgcG9zaXRpb25fbG93LCBpbiBoaWdocCB2ZWMzIHBvc2l0aW9uX2hpZ2gsIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19sb3csIGluIGhpZ2hwIHZlYzMgcmVsYXRpdmVUb19oaWdoKXtcclxuICAgICAgICAvKiBcclxuICAgICAgICBTb3VyY2UgaHR0cHM6Ly9naXRodWIuY29tL3ZpcnR1YWxnbG9iZWJvb2svT3Blbkdsb2JlL2Jsb2IvbWFzdGVyL1NvdXJjZS9FeGFtcGxlcy9DaGFwdGVyMDUvSml0dGVyL0dQVVJlbGF0aXZlVG9FeWVEU0ZVTjkwL1NoYWRlcnMvVlMuZ2xzbCBcclxuICAgICAgICBOb3RlIGhlcmUsIHdlJ3JlIHN0b3JpbmcgdGhlIGhpZ2ggcGFydCBvZiB0aGUgcG9zaXRpb24gZW5jb2RpbmcgaW5zaWRlIHRocmVlJ3MgZGVmYXVsdCAncG9zaXRpb24nIGF0dHJpYnV0ZSBidWZmZXIgc28gd2UgYXZvaWQgcmVkdW5kYW5jeSBcclxuICAgICAgICAqL1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdDEgPSBwb3NpdGlvbl9sb3cueHl6IC0gcmVsYXRpdmVUb19sb3cueHl6O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgZSA9IHQxIC0gcG9zaXRpb25fbG93Lnh5ejtcclxuICAgICAgICAvKiogVGhpcyBpcyByZWR1bmFudCwgYnV0IG5lY2Vzc2FyeSBhcyBhIHdvcmthcm91bmQgZm9yIEFwcGxlIHBsYXRmb3JtcyAqL1xyXG4gICAgICAgIGhpZ2hwIGZsb2F0IHggPSBwb3NpdGlvbl9oaWdoLnggLSByZWxhdGl2ZVRvX2hpZ2gueDtcclxuICAgICAgICBoaWdocCBmbG9hdCB5ID0gcG9zaXRpb25faGlnaC55IC0gcmVsYXRpdmVUb19oaWdoLnk7XHJcbiAgICAgICAgaGlnaHAgZmxvYXQgeiA9IHBvc2l0aW9uX2hpZ2gueiAtIHJlbGF0aXZlVG9faGlnaC56O1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdiA9IHZlYzMoeCwgeSwgeik7XHJcbiAgICAgICAgLyoqIEVuZCBvZiByZWR1bmRhbnQgcGFydCAqL1xyXG4gICAgICAgIGhpZ2hwIHZlYzMgdDIgPSAoKC1yZWxhdGl2ZVRvX2xvdyAtIGUpICsgKHBvc2l0aW9uX2xvdy54eXogLSAodDEgLSBlKSkpICsgdjtcclxuICAgICAgICBoaWdocCB2ZWMzIGhpZ2hEaWZmZXJlbmNlID0gdDEgKyB0MjtcclxuICAgICAgICBoaWdocCB2ZWMzIGxvd0RpZmZlcmVuY2UgPSB0MiAtIChoaWdoRGlmZmVyZW5jZS54eXogLSB0MS54eXopO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGhpZ2hwIHZlYzMgcG9zaXRpb24gPSBoaWdoRGlmZmVyZW5jZS54eXogKyBsb3dEaWZmZXJlbmNlLnh5ejtcclxuICAgICAgICByZXR1cm4gdmVjNChwb3NpdGlvbiwgMS4pO1xyXG4gICAgfVxyXG4jZW5kaWZcclxuXHJcbiNpZmRlZiBUUkFOU0ZPUk1fU1RPUkFHRVxyXG4gICAgdm9pZCBvYmplY3RUcmFuc2Zvcm0ob3V0IHZlYzQgcXVhdGVybmlvbiwgb3V0IHZlYzQgcGl2b3RMb3csIG91dCB2ZWM0IHBpdm90SGlnaCwgb3V0IHZlYzQgdHJhbnNsYXRpb24sIG91dCB2ZWM0IHNjYWxlKXtcclxuICAgICAgICAjaWYgVFJBTlNGT1JNX1NUT1JBR0UgPT0gMFxyXG4gICAgICAgICAgICAjaWYgX19WRVJTSU9OX18gPT0gMzAwXHJcbiAgICAgICAgICAgICAgICBpdmVjMiB1diA9IGl2ZWMyKGludChvYmpJbmRleCkgKiBUUkFOU0ZPUk1fU1RSSURFLCAwKTsgXHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYwID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2LCAwICk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYxID0gdGV4ZWxGZXRjaCggdFRyYW5zZm9ybXMsIHV2ICsgaXZlYzIoMSwgMCksIDApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MiA9IHRleGVsRmV0Y2goIHRUcmFuc2Zvcm1zLCB1diArIGl2ZWMyKDIsIDApLCAwKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjMgPSB0ZXhlbEZldGNoKCB0VHJhbnNmb3JtcywgdXYgKyBpdmVjMigzLCAwKSwgMCk7XHJcbiAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uID0gdjA7XHJcbiAgICAgICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodjEueHl6LCAxLik7XHJcbiAgICAgICAgICAgICAgICBwaXZvdEhpZ2ggPSB2ZWM0KHYyLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb24gPSB2ZWM0KHYzLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHYxLncsIHYyLncsIHYzLncsIDEuKTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBvYmpDb3VudCAqIFRSQU5TRk9STV9TVFJJREU7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIGNVdiA9IHZlYzIoMC41L3NpemUsIDAuNSk7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIGRVdiA9IHZlYzIoMS4vc2l6ZSwgMC4pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB2ZWMyIHV2ID0gdmVjMigob2JqSW5kZXggKiBUUkFOU0ZPUk1fU1RSSURFKS9zaXplICsgY1V2LngsIGNVdi55KTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjAgPSB0ZXh0dXJlMkQoIHRUcmFuc2Zvcm1zLCB1dik7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYxID0gdGV4dHVyZTJEKCB0VHJhbnNmb3JtcywgdXYgKyBkVXYpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MiA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2ICsgMi4gKiBkVXYpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MyA9IHRleHR1cmUyRCggdFRyYW5zZm9ybXMsIHV2ICsgMy4gKiBkVXYpO1xyXG4gICAgICAgICAgICAgICAgcXVhdGVybmlvbiA9IHYwO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RMb3cgPSB2ZWM0KHYxLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICAgICAgcGl2b3RIaWdoID0gdmVjNCh2Mi54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gdmVjNCh2My54eXosIDEuKTtcclxuICAgICAgICAgICAgICAgIHNjYWxlID0gdmVjNCh2MS53LCB2Mi53LCB2My53LCAxLik7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbGlmIFRSQU5TRk9STV9TVE9SQUdFID09IDFcclxuICAgICAgICAgICAgbWF0NCB0TWF0cml4ID0gdVRyYW5zZm9ybXNbaW50KG9iakluZGV4KV07XHJcbiAgICAgICAgICAgIHF1YXRlcm5pb24gPSB0TWF0cml4WzBdO1xyXG4gICAgICAgICAgICBwaXZvdExvdyA9IHZlYzQodE1hdHJpeFsxXS54eXosIDEuKTtcclxuICAgICAgICAgICAgcGl2b3RIaWdoID0gdmVjNCh0TWF0cml4WzJdLnh5eiwgMS4pO1xyXG4gICAgICAgICAgICB0cmFuc2xhdGlvbiA9IHZlYzQodE1hdHJpeFszXS54eXosIDEuKTtcclxuICAgICAgICAgICAgc2NhbGUgPSB2ZWM0KHRNYXRyaXhbMV1bM10sIHRNYXRyaXhbMl1bM10sIHRNYXRyaXhbM11bM10sIDEuKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgIH1cclxuXHJcbiAgICB2ZWMzIHJvdGF0ZV92ZXJ0ZXhfcG9zaXRpb24odmVjMyBwb3NpdGlvbiwgdmVjNCBxdWF0KVxyXG4gICAgeyBcclxuICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uKSArIHF1YXQudyAqIHBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQW5vdGhlciB3b3JrYXJvdW5kIGZvciBBcHBsZSdzIHN0dXBpZCBjb21waWxlciAqL1xyXG4gICAgdmVjNCBzYWZlTXVsKHZlYzQgYSwgdmVjNCBiKSB7XHJcbiAgICAgICAgLy8gUHJldmVudHMgY29uc3RhbnQgZm9sZGluZyBhbmQgb3B0aW1pemF0aW9uXHJcbiAgICAgICAgcmV0dXJuIChhICsgdmVjNCgwLjApKSAqIChiICsgdmVjNCgxLjApKSAtIGEgKiB2ZWM0KDEuMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlnaHAgdmVjMyByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShoaWdocCB2ZWM0IHYwLCBoaWdocCB2ZWM0IHYxLCBoaWdocCB2ZWM0IHNjYWxlLCBoaWdocCB2ZWM0IHF1YXQpXHJcbiAgICB7XHJcbiAgICAgICAgLyoqICEhISBXT1JLQVJPVU5EIEZPUiBJbnRlbCBJcmlzWGUgQ0FSRFMgISEhICovXHJcbiAgICAgICAgLyoqIFRoZSBjb2RlIGJlbG93IHdpbGwgbm90IHByb2R1Y2UgY29ycmVjdCByZXN1bHRzIGluIGludGVsIElyaXNYRSBpbnRlZ3JhdGVkIEdQVXMuIFxyXG4gICAgICAgICAqICBUaGUgZ2VvbWV0cnkgd2lsbCB0dXJuIG1hbmdsZWQsIGFsYmVpdCBzdGFibGVcclxuICAgICAgICAgKiAgSSBjYW4ndCBrbm93IGZvciBzdXJlIHdoYXQgaXMgZ29pbmcgb24sIGJ1dCByb3RhdGluZyB0aGUgZGlmZmVyZW5jZSBzZWVtcyB0byBcclxuICAgICAgICAgKiAgZm9yY2UgdGhlIHJlc3VsdCBpbnRvIGEgbG93ZXIgcHJlY2lzaW9uP1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIGhpZ2hwIHZlYzQgcG9zaXRpb24gPSB2MCAtIHYxO1xyXG4gICAgICAgIC8vIHJldHVybiBwb3NpdGlvbi54eXogKyAyLjAgKiBjcm9zcyhxdWF0Lnh5eiwgY3Jvc3MocXVhdC54eXosIHBvc2l0aW9uLnh5eikgKyBxdWF0LncgKiBwb3NpdGlvbi54eXopO1xyXG5cclxuICAgICAgICAvKiogU3VidHJhY3RpbmcgdGhlIHJvdGF0ZWQgdmVjdG9ycyB3b3Jrcy4gKi9cclxuICAgICAgICByZXR1cm4gcm90YXRlX3ZlcnRleF9wb3NpdGlvbihzYWZlTXVsKHYwLCBzY2FsZSkueHl6LCBxdWF0KSAgLSByb3RhdGVfdmVydGV4X3Bvc2l0aW9uKHNhZmVNdWwodjEsIHNjYWxlKS54eXosIHF1YXQpIDtcclxuXHJcbiAgICAgICAgLyoqIEFuIGFsdGVybmF0ZSB3b3JrYXJvdW5kIGlzXHJcbiAgICAgICAgICogaGlnaHAgdmVjMyBwb3NpdGlvbiA9ICh2MC54eXogKiAoMS4gKyAxZS03KSkgLSAodjEueHl6ICogKDEuICsgMWUtNykpO1xyXG4gICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArIDIuMCAqIGNyb3NzKHF1YXQueHl6LCBjcm9zcyhxdWF0Lnh5eiwgcG9zaXRpb24pICsgcXVhdC53ICogcG9zaXRpb24pO1xyXG5cclxuICAgICAgICAgICBIb3dldmVyIEknbSBub3Qgc3VjaCBhIGZhbiBvZiB0aGUgKDEuICsgMWUtNykgcGFydFxyXG4gICAgICAgICAqL1xyXG4gICAgfVxyXG5cclxuI2VuZGlmXHJcblxyXG4jaWYgZGVmaW5lZChCSUxMQk9BUkQpIHx8IGRlZmluZWQoQklMTEJPQVJEX0ZJWEVEKVxyXG4gICAgdW5pZm9ybSB2ZWMzIGJpbGxib2FyZFBvcztcclxuICAgIHVuaWZvcm0gbWF0NCBpbnZQcm9qZWN0aW9uO1xyXG4jZW5kaWZcclxuI2lmZGVmIEJJTExCT0FSRF9GSVhFRFxyXG4gICAgdW5pZm9ybSB2ZWMyIGJpbGxib2FyZFNpemU7XHJcbiNlbmRpZlxyXG52YXJ5aW5nIGZsb2F0IGRvdFZhbHVlO1xyXG5cclxudm9pZCBtYWluKCkge1xyXG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8bW9ycGhjb2xvcl92ZXJ0ZXg+XHJcblx0I2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApXHJcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxyXG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cclxuXHRcdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XHJcblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XHJcbiAgICAgICAgLy8gI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PiAvLyBDT01NRU5URUQgQ0hVTktcclxuICAgICAgICB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xyXG4gICAgICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcyBpcyBpbiBsaWV1IG9mIGEgcGVyLWluc3RhbmNlIG5vcm1hbC1tYXRyaXhcclxuICAgICAgICAgICAgLy8gc2hlYXIgdHJhbnNmb3JtcyBpbiB0aGUgaW5zdGFuY2UgbWF0cml4IGFyZSBub3Qgc3VwcG9ydGVkXHJcbiAgICAgICAgICAgIG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIG5lZ2F0aXZlIHNjYWxpbmcsIHdlIGZsaXAgdGhlIG5vcm1hbCAqL1xyXG4gICAgICAgICAgICBmbG9hdCBzaWduRGV0ID0gc2lnbihkb3QobVswXSwgY3Jvc3MobVsxXSwgbVsyXSkpKTtcclxuICAgICAgICAgICAgLy8gT3B0aW9uYWwgZmFsbGJhY2s6IHRyZWF0IDAgYXMgKzFcclxuICAgICAgICAgICAgc2lnbkRldCA9IHNpZ25EZXQgKyAoMS4wIC0gYWJzKHNpZ25EZXQpKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgKj0gc2lnbkRldDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgICNpZmRlZiBGTElQX1NJREVEXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWZkZWYgVVNFX1RBTkdFTlRcclxuICAgICAgICAgICAgdmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xyXG4gICAgICAgICAgICAjaWZkZWYgRkxJUF9TSURFRFxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG5cdCNlbmRpZlxyXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cclxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxyXG5cdC8vICNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4gQ09NTUVOVEVEIENIVU5LXHJcbiAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICB2ZWM0IHRRdWF0ZXJuaW9uLCB0UGl2b3RMb3csIHRQaXZvdEhpZ2gsIHRUcmFuc2xhdGlvbiwgdFNjYWxlO1xyXG4gICAgICAgIG9iamVjdFRyYW5zZm9ybSh0UXVhdGVybmlvbiwgdFBpdm90TG93LCB0UGl2b3RIaWdoLCB0VHJhbnNsYXRpb24sIHRTY2FsZSk7XHJcbiAgICAjZW5kaWZcclxuICAgICNpZmRlZiBVU0VfUlRFXHJcbiAgICAgICAgdmVjNCBwb3NpdGlvbl9sb3dUID0gdmVjNChwb3NpdGlvbl9sb3csIDEuKTtcclxuICAgICAgICB2ZWM0IHBvc2l0aW9uX2hpZ2hUID0gdmVjNChwb3NpdGlvbiwgMS4pO1xyXG4gICAgICAgIGNvbnN0IHZlYzMgWkVSTzMgPSB2ZWMzKDAuLCAwLiwgMC4pO1xyXG5cclxuICAgICAgICBoaWdocCB2ZWM0IHJ0ZUxvY2FsUG9zaXRpb24gPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihwb3NpdGlvbl9sb3dULnh5eiwgcG9zaXRpb25faGlnaFQueHl6LCB1Vmlld2VyX2xvdywgdVZpZXdlcl9oaWdoKTtcclxuICAgICAgICAjaWZkZWYgVFJBTlNGT1JNX1NUT1JBR0VcclxuICAgICAgICAgICAgaGlnaHAgdmVjNCBydGVQaXZvdCA9IGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKHRQaXZvdExvdy54eXosIHRQaXZvdEhpZ2gueHl6LCB1Vmlld2VyX2xvdywgdVZpZXdlcl9oaWdoKTtcclxuICAgICAgICAgICAgcnRlTG9jYWxQb3NpdGlvbi54eXogPSByb3RhdGVfc2NhbGVkX3ZlcnRleF9wb3NpdGlvbl9kZWx0YShydGVMb2NhbFBvc2l0aW9uLCBydGVQaXZvdCwgdFNjYWxlLCB0UXVhdGVybmlvbikgKyBydGVQaXZvdC54eXogKyB0VHJhbnNsYXRpb24ueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR1xyXG4gICAgICAgICAgICB2ZWM0IGluc3RhbmNlUGl2b3QgPSBjb21wdXRlUmVsYXRpdmVQb3NpdGlvbihaRVJPMywgWkVSTzMsIHVWaWV3ZXJfbG93LCB1Vmlld2VyX2hpZ2gpO1xyXG4gICAgICAgICAgICBydGVMb2NhbFBvc2l0aW9uLnh5eiA9IChtYXQzKGluc3RhbmNlTWF0cml4KSAqIChydGVMb2NhbFBvc2l0aW9uIC0gaW5zdGFuY2VQaXZvdCkueHl6KSArIGluc3RhbmNlUGl2b3QueHl6ICsgaW5zdGFuY2VNYXRyaXhbM10ueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmZGVmIFVTRV9SVEVcclxuICAgICAgICB2ZWM0IG12UG9zaXRpb24gPSBydGVMb2NhbFBvc2l0aW9uO1xyXG4gICAgI2Vsc2VcclxuICAgICAgICB2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XHJcbiAgICAgICAgI2lmZGVmIFRSQU5TRk9STV9TVE9SQUdFXHJcbiAgICAgICAgICAgIG12UG9zaXRpb24ueHl6ID0gcm90YXRlX3NjYWxlZF92ZXJ0ZXhfcG9zaXRpb25fZGVsdGEobXZQb3NpdGlvbiwgdFBpdm90SGlnaCwgdFNjYWxlLCB0UXVhdGVybmlvbikgKyB0UGl2b3RIaWdoLnh5eiArIHRUcmFuc2xhdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXHJcbiAgICAgICAgICAgIG12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XHJcblxyXG4gICAgdk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcclxuICAgIHZWaWV3UG9zaXRpb24gPSAtbXZQb3NpdGlvbi54eXo7XHJcblxyXG4gICAgI2lmIGRlZmluZWQoQklMTEJPQVJEKVxyXG4gICAgICAgIGZsb2F0IGRpdiA9IDEuO1xyXG4gICAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqICh2aWV3TWF0cml4ICogdmVjNChiaWxsYm9hcmRQb3MsIDEuMCkgKyB2ZWM0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIDAuLCAwLjApKTtcclxuICAgICNlbGlmIGRlZmluZWQoQklMTEJPQVJEX0ZJWEVEKVxyXG4gICAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqICh2aWV3TWF0cml4ICogdmVjNChiaWxsYm9hcmRQb3MsIDEuMCkpO1xyXG4gICAgICAgIGZsb2F0IGRpdiA9IGdsX1Bvc2l0aW9uLnc7XHJcbiAgICAgICAgZ2xfUG9zaXRpb24gLz0gZ2xfUG9zaXRpb24udztcclxuICAgICAgICBnbF9Qb3NpdGlvbi54eSArPSBwb3NpdGlvbi54eSAqIGJpbGxib2FyZFNpemU7XHJcbiAgICAjZWxzZVxyXG4gICAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAjZW5kaWZcclxuXHJcblxyXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XHJcblx0Ly8gI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+IENPTU1FTlRFRCBDSFVOS1xyXG4gICAgI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXHJcbiAgICAgICAgI2lmIGRlZmluZWQoQklMTEJPQVJEKSB8fCBkZWZpbmVkKEJJTExCT0FSRF9GSVhFRClcclxuICAgICAgICAgICAgdmVjNCBtb3ZlbFZpZXdQcm9qZWN0aW9uID0gZ2xfUG9zaXRpb24gKiBkaXY7XHJcbiAgICAgICAgICAgIHZDbGlwUG9zaXRpb24gPSAtIChpbnZQcm9qZWN0aW9uICogbW92ZWxWaWV3UHJvamVjdGlvbikueHl6O1xyXG4gICAgICAgICNlbHNlXHJcblx0ICAgICAgICB2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICNlbmRpZlxyXG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XHJcblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XHJcbn1cclxuYFxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZVZpZXdwb3J0RnJhZyA9IC8qIGdsc2wgKi8gYFxyXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcclxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xyXG4jaWZuZGVmIEZMQVRfU0hBREVEXHJcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XHJcbiNlbmRpZlxyXG4jaW5jbHVkZSA8Y29tbW9uPlxyXG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XHJcbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxyXG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cclxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50PlxyXG5cclxudW5pZm9ybSBmbG9hdCBtaW5JbnRlbnNpdHk7XHJcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xyXG5cclxuI2lmZGVmIE1BVENBUF9URVhUVVJFXHJcblx0dW5pZm9ybSBzYW1wbGVyMkQgdE1hdGNhcDtcclxuI2VuZGlmXHJcblxyXG52b2lkIG1haW4oKSB7XHJcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cclxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcclxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxyXG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XHJcblx0Ly8gYWNjdW11bGF0aW9uIChiYWtlZCBpbmRpcmVjdCBsaWdodGluZyBvbmx5KVxyXG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcclxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcclxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5ICogUkVDSVBST0NBTF9QSTtcclxuXHQjZWxzZVxyXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZlYzMoIDEuMCApO1xyXG5cdCNlbmRpZlxyXG5cdC8vIG1vZHVsYXRpb25cclxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XHJcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7XHJcblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xyXG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XHJcblx0Ly8gI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4gQ09NTUVOVEVEIENIVU5LXHJcblx0I2lmZGVmIE9QQVFVRVxyXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSAxLjA7XHJcblx0I2VuZGlmXHJcblxyXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tcmRvb2IvdGhyZWUuanMvcHVsbC8yMjQyNVxyXG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXHJcblx0XHRkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTtcclxuXHQjZW5kaWZcclxuXHJcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcclxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcclxuICAgIHZlYzMgeCA9IG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTtcclxuICAgIHZlYzMgeSA9IGNyb3NzKCB2aWV3RGlyLCB4ICk7XHJcbiAgICB2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XHJcblxyXG5cdHZlYzMgY29sb3IgPSB2ZWMzKDEuMCk7XHJcblx0I2lmZGVmIE1BVENBUF9URVhUVVJFXHJcblx0XHRjb2xvciA9IHRleHR1cmUyRCh0TWF0Y2FwLCB1dikucmdiO1xyXG5cdCNlbHNlXHJcblx0XHRjb2xvciA9IHZlYzMoIG1peCggbWluSW50ZW5zaXR5LCAxLiwgdXYueSApICk7XHJcblx0I2VuZGlmXHJcblxyXG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiwgZGlmZnVzZUNvbG9yLmEpO1xyXG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cclxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxyXG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XHJcblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cclxufVxyXG5gXHJcbiIsImltcG9ydCBTcGVja2xlQmFzaWNNYXRlcmlhbCBmcm9tICcuL1NwZWNrbGVCYXNpY01hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBzcGVja2xlVmlld3BvcnRWZXJ0IH0gZnJvbSAnLi9zaGFkZXJzL3NwZWNrbGUtdmlld3BvcnQtdmVydC5qcydcclxuaW1wb3J0IHsgc3BlY2tsZVZpZXdwb3J0RnJhZyB9IGZyb20gJy4vc2hhZGVycy9zcGVja2xlLXZpZXdwb3J0LWZyYWcuanMnXHJcbmltcG9ydCB7IE1hdGVyaWFsLCBNZXNoQmFzaWNNYXRlcmlhbFBhcmFtZXRlcnMsIFRleHR1cmUgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgVW5pZm9ybXMgfSBmcm9tICcuL1NwZWNrbGVNYXRlcmlhbC5qcydcclxuXHJcbmNsYXNzIFNwZWNrbGVWaWV3cG9ydE1hdGVyaWFsIGV4dGVuZHMgU3BlY2tsZUJhc2ljTWF0ZXJpYWwge1xyXG4gIHByb3RlY3RlZCBnZXQgdmVydGV4UHJvZ3JhbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHNwZWNrbGVWaWV3cG9ydFZlcnRcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgZnJhZ21lbnRQcm9ncmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3BlY2tsZVZpZXdwb3J0RnJhZ1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCB1bmlmb3Jtc0RlZigpOiBVbmlmb3JtcyB7XHJcbiAgICByZXR1cm4geyAuLi5zdXBlci51bmlmb3Jtc0RlZiwgbWluSW50ZW5zaXR5OiAwLjAxLCB0TWF0Y2FwOiBudWxsIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnM6IE1lc2hCYXNpY01hdGVyaWFsUGFyYW1ldGVycywgZGVmaW5lcyA9IFtdKSB7XHJcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBkZWZpbmVzKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBtaW5JbnRlbnNpdHkodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy51c2VyRGF0YS5taW5JbnRlbnNpdHkudmFsdWUgPSB2YWx1ZVxyXG4gICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgbWF0Y2FwVGV4dHVyZSh2YWx1ZTogVGV4dHVyZSB8IG51bGwpIHtcclxuICAgIGlmICghdGhpcy5kZWZpbmVzKSByZXR1cm5cclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5kZWZpbmVzWydNQVRDQVBfVEVYVFVSRSddID0gJydcclxuICAgICAgdGhpcy51c2VyRGF0YS50TWF0Y2FwLnZhbHVlID0gdmFsdWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmRlZmluZXNbJ01BVENBUF9URVhUVVJFJ11cclxuICAgICAgdGhpcy51c2VyRGF0YS50TWF0Y2FwLnZhbHVlID0gbnVsbFxyXG4gICAgfVxyXG4gICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmYXN0Q29weShmcm9tOiBNYXRlcmlhbCwgdG86IE1hdGVyaWFsKSB7XHJcbiAgICBzdXBlci5mYXN0Q29weShmcm9tLCB0bylcclxuICAgIDsodG8gYXMgU3BlY2tsZVZpZXdwb3J0TWF0ZXJpYWwpLnVzZXJEYXRhLnRNYXRjYXAudmFsdWUgPSAoXHJcbiAgICAgIGZyb20gYXMgU3BlY2tsZVZpZXdwb3J0TWF0ZXJpYWxcclxuICAgICkudXNlckRhdGEudE1hdGNhcC52YWx1ZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlY2tsZVZpZXdwb3J0TWF0ZXJpYWxcclxuIiwiaW1wb3J0IHtcclxuICBEb3VibGVTaWRlLFxyXG4gIEZyb250U2lkZSxcclxuICBNYXRlcmlhbCxcclxuICBOb0JsZW5kaW5nLFxyXG4gIE5vcm1hbEJsZW5kaW5nLFxyXG4gIE9ydGhvZ3JhcGhpY0NhbWVyYSxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBTY2VuZSxcclxuICBUZXh0dXJlLFxyXG4gIFdlYkdMUmVuZGVyZXJcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgUGFzc09wdGlvbnMgfSBmcm9tICcuL0dQYXNzLmpzJ1xyXG5pbXBvcnQgU3BlY2tsZVZpZXdwb3J0TWF0ZXJpYWwgZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL1NwZWNrbGVWaWV3cG9ydE1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJy4uLy4uLy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCB7IEFzc2V0cyB9IGZyb20gJy4uLy4uL0Fzc2V0cy5qcydcclxuaW1wb3J0IExvZ2dlciBmcm9tICcuLi8uLi91dGlscy9Mb2dnZXIuanMnXHJcbmltcG9ydCB7IEdlb21ldHJ5UGFzcyB9IGZyb20gJy4vR2VvbWV0cnlQYXNzLmpzJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWaWV3cG9ydFBhc3NPcHRpb25zIGV4dGVuZHMgUGFzc09wdGlvbnMge1xyXG4gIG1pbkludGVuc2l0eT86IG51bWJlclxyXG4gIG1hdGNhcFRleHR1cmU/OiBBc3NldCB8IG51bGxcclxuICBvcGFjaXR5PzogbnVtYmVyXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0Vmlld3BvcnRQYXNzT3B0aW9uczogUmVxdWlyZWQ8Vmlld3BvcnRQYXNzT3B0aW9ucz4gPSB7XHJcbiAgbWluSW50ZW5zaXR5OiAwLjEsXHJcbiAgbWF0Y2FwVGV4dHVyZTogbnVsbCxcclxuICBvcGFjaXR5OiAxXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWaWV3cG9ydFBhc3MgZXh0ZW5kcyBHZW9tZXRyeVBhc3Mge1xyXG4gIHByb3RlY3RlZCB2aWV3cG9ydE1hdGVyaWFsOiBTcGVja2xlVmlld3BvcnRNYXRlcmlhbFxyXG4gIHByb3RlY3RlZCBwZW5kaW5nVGV4dHVyZTogYm9vbGVhblxyXG5cclxuICBwdWJsaWMgX29wdGlvbnM6IFJlcXVpcmVkPFZpZXdwb3J0UGFzc09wdGlvbnM+ID0gT2JqZWN0LmFzc2lnbihcclxuICAgIHt9LFxyXG4gICAgRGVmYXVsdFZpZXdwb3J0UGFzc09wdGlvbnNcclxuICApXHJcblxyXG4gIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdHRU9NRVRSWS1WSUVXUE9SVCdcclxuICB9XHJcblxyXG4gIC8vIGdldCBvdmVycmlkZU1hdGVyaWFsKCk6IE1hdGVyaWFsIHtcclxuICAvLyAgIHJldHVybiB0aGlzLnZpZXdwb3J0TWF0ZXJpYWxcclxuICAvLyB9XHJcblxyXG4gIGdldCBvdmVycmlkZUJhdGNoTWF0ZXJpYWwoKTogTWF0ZXJpYWwge1xyXG4gICAgcmV0dXJuIHRoaXMudmlld3BvcnRNYXRlcmlhbFxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBWaWV3cG9ydFBhc3NPcHRpb25zKSB7XHJcbiAgICBzdXBlci5vcHRpb25zID0gdmFsdWVcclxuICAgIHRoaXMudmlld3BvcnRNYXRlcmlhbC5ibGVuZGluZyA9XHJcbiAgICAgIHRoaXMuX29wdGlvbnMub3BhY2l0eSA8IDEgPyBOb3JtYWxCbGVuZGluZyA6IE5vQmxlbmRpbmdcclxuICAgIHRoaXMudmlld3BvcnRNYXRlcmlhbC5zaWRlID0gdGhpcy5fb3B0aW9ucy5vcGFjaXR5IDwgMSA/IEZyb250U2lkZSA6IERvdWJsZVNpZGVcclxuICAgIHRoaXMudmlld3BvcnRNYXRlcmlhbC50cmFuc3BhcmVudCA9IHRoaXMuX29wdGlvbnMub3BhY2l0eSA8IDEgPyB0cnVlIDogZmFsc2VcclxuICAgIHRoaXMudmlld3BvcnRNYXRlcmlhbC50b25lTWFwcGVkID0gZmFsc2VcclxuICAgIHRoaXMudmlld3BvcnRNYXRlcmlhbC5taW5JbnRlbnNpdHkgPSB0aGlzLl9vcHRpb25zLm1pbkludGVuc2l0eVxyXG4gICAgdGhpcy52aWV3cG9ydE1hdGVyaWFsLm9wYWNpdHkgPSB0aGlzLl9vcHRpb25zLm9wYWNpdHlcclxuICAgIHRoaXMuc2V0TWF0Y2FwVGV4dHVyZSh0aGlzLl9vcHRpb25zLm1hdGNhcFRleHR1cmUpXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKClcclxuXHJcbiAgICB0aGlzLnZpZXdwb3J0TWF0ZXJpYWwgPSBuZXcgU3BlY2tsZVZpZXdwb3J0TWF0ZXJpYWwoe30pXHJcbiAgICB0aGlzLm9wdGlvbnMgPSBEZWZhdWx0Vmlld3BvcnRQYXNzT3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNldE1hdGNhcFRleHR1cmUoYXNzZXQ6IEFzc2V0IHwgbnVsbCkge1xyXG4gICAgaWYgKCFhc3NldCkgcmV0dXJuXHJcbiAgICB0aGlzLnBlbmRpbmdUZXh0dXJlID0gdHJ1ZVxyXG5cclxuICAgIEFzc2V0cy5nZXRUZXh0dXJlKGFzc2V0KVxyXG4gICAgICAudGhlbigodmFsdWU6IFRleHR1cmUpID0+IHtcclxuICAgICAgICB0aGlzLnZpZXdwb3J0TWF0ZXJpYWwubWF0Y2FwVGV4dHVyZSA9IHZhbHVlXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydE1hdGVyaWFsLm5lZWRzQ29weSA9IHRydWVcclxuICAgICAgICB0aGlzLnBlbmRpbmdUZXh0dXJlID0gZmFsc2VcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChyZWFzb24pID0+IHtcclxuICAgICAgICBMb2dnZXIuZXJyb3IoYE1hdGNhcCB0ZXh0dXJlIGZhaWxlZCB0byBsb2FkICR7cmVhc29ufWApXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nVGV4dHVyZSA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyKFxyXG4gICAgcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIsXHJcbiAgICBjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhIHwgT3J0aG9ncmFwaGljQ2FtZXJhIHwgbnVsbCxcclxuICAgIHNjZW5lPzogU2NlbmVcclxuICApOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzdXBlci5yZW5kZXIocmVuZGVyZXIsIGNhbWVyYSwgc2NlbmUpIHx8IHRoaXMucGVuZGluZ1RleHR1cmVcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IFNwZWNrbGVSZW5kZXJlciBmcm9tICcuLi8uLi9TcGVja2xlUmVuZGVyZXIuanMnXHJcbmltcG9ydCB7IEJsZW5kUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9CbGVuZFBhc3MuanMnXHJcbmltcG9ydCB7IERlcHRoUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9EZXB0aFBhc3MuanMnXHJcbmltcG9ydCB7IENsZWFyRmxhZ3MsIE9iamVjdFZpc2liaWxpdHkgfSBmcm9tICcuLi9QYXNzZXMvR1Bhc3MuanMnXHJcbmltcG9ydCB7IE9iamVjdExheWVycyB9IGZyb20gJy4uLy4uLy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCB7IFByb2dyZXNzaXZlQU9QYXNzIH0gZnJvbSAnLi4vUGFzc2VzL1Byb2dyZXNzaXZlQU9QYXNzLmpzJ1xyXG5pbXBvcnQgeyBWaWV3cG9ydFBhc3MgfSBmcm9tICcuLi9QYXNzZXMvVmlld3BvcnRQYXNzLmpzJ1xyXG5pbXBvcnQgeyBQcm9ncmVzc2l2ZVBpcGVsaW5lIH0gZnJvbSAnLi9Qcm9ncmVzc2l2ZVBpcGVsaW5lLmpzJ1xyXG5pbXBvcnQgeyBHZW9tZXRyeVBhc3MgfSBmcm9tICcuLi9QYXNzZXMvR2VvbWV0cnlQYXNzLmpzJ1xyXG5pbXBvcnQgeyBTdGVuY2lsUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9TdGVuY2lsUGFzcy5qcydcclxuaW1wb3J0IHsgU3RlbmNpbE1hc2tQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL1N0ZW5jaWxNYXNrUGFzcy5qcydcclxuaW1wb3J0IHsgRGVmYXVsdFBpcGVsaW5lT3B0aW9ucywgUGlwZWxpbmVPcHRpb25zIH0gZnJvbSAnLi9QaXBlbGluZS5qcydcclxuaW1wb3J0IHsgRWRnZXNQaXBlbGluZSB9IGZyb20gJy4vRWRnZXNQaXBlbGluZS5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBBcmN0aWNWaWV3UGlwZWxpbmUgZXh0ZW5kcyBQcm9ncmVzc2l2ZVBpcGVsaW5lIHtcclxuICBwcm90ZWN0ZWQgYWNjdW11bGF0aW9uRnJhbWVDb3VudDogbnVtYmVyID0gMTZcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBzcGVja2xlUmVuZGVyZXI6IFNwZWNrbGVSZW5kZXJlcixcclxuICAgIG9wdGlvbnM6IFBpcGVsaW5lT3B0aW9ucyA9IERlZmF1bHRQaXBlbGluZU9wdGlvbnNcclxuICApIHtcclxuICAgIHN1cGVyKHNwZWNrbGVSZW5kZXJlcilcclxuXHJcbiAgICBjb25zdCBlZGdlc1BpcGVsaW5lID0gb3B0aW9ucy5lZGdlcyA/IG5ldyBFZGdlc1BpcGVsaW5lKHNwZWNrbGVSZW5kZXJlcikgOiBudWxsXHJcblxyXG4gICAgY29uc3QgZGVwdGhQYXNzID0gIW9wdGlvbnMuZWRnZXMgPyBuZXcgRGVwdGhQYXNzKCkgOiBudWxsXHJcbiAgICBpZiAoZGVwdGhQYXNzKSB7XHJcbiAgICAgIGRlcHRoUGFzcy5zZXRMYXllcnMoW09iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNIXSlcclxuICAgICAgZGVwdGhQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5ERVBUSClcclxuICAgICAgZGVwdGhQYXNzLnNldEppdHRlcih0cnVlKVxyXG4gICAgICBkZXB0aFBhc3Muc2V0Q2xlYXJDb2xvcigweDAwMDAwMCwgMSlcclxuICAgICAgZGVwdGhQYXNzLnNldENsZWFyRmxhZ3MoQ2xlYXJGbGFncy5DT0xPUiB8IENsZWFyRmxhZ3MuREVQVEgpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGVwdGhUZXggPSBvcHRpb25zLmVkZ2VzXHJcbiAgICAgID8gZWRnZXNQaXBlbGluZT8uZGVwdGhQYXNzLmRlcHRoVGV4dHVyZVxyXG4gICAgICA6IGRlcHRoUGFzcz8ub3V0cHV0VGFyZ2V0Py50ZXh0dXJlXHJcblxyXG4gICAgY29uc3QgZGVwdGhTdWJQaXBlbGluZUR5bmFtaWMgPVxyXG4gICAgICAob3B0aW9ucy5lZGdlcyA/IGVkZ2VzUGlwZWxpbmU/LmR5bmFtaWNQYXNzZXMgOiBbXSkgfHwgW11cclxuICAgIGNvbnN0IGRlcHRoU3ViUGlwZWxpbmVQcm9ncmVzc2l2ZSA9XHJcbiAgICAgIChvcHRpb25zLmVkZ2VzXHJcbiAgICAgICAgPyBlZGdlc1BpcGVsaW5lPy5wcm9ncmVzc2l2ZVBhc3Nlc1xyXG4gICAgICAgIDogZGVwdGhQYXNzXHJcbiAgICAgICAgPyBbZGVwdGhQYXNzXVxyXG4gICAgICAgIDogW10pIHx8IFtdXHJcblxyXG4gICAgY29uc3Qgdmlld3BvcnRQYXNzID0gbmV3IFZpZXdwb3J0UGFzcygpXHJcbiAgICB2aWV3cG9ydFBhc3Muc2V0TGF5ZXJzKFtcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5ULFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX0xJTkUsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5UX0NMT1VELFxyXG4gICAgICBPYmplY3RMYXllcnMuUFJPUFNcclxuICAgIF0pXHJcbiAgICB2aWV3cG9ydFBhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5Lk9QQVFVRSlcclxuICAgIHZpZXdwb3J0UGFzcy5vcHRpb25zID0geyBtaW5JbnRlbnNpdHk6IDAuNzUgfVxyXG5cclxuICAgIGNvbnN0IHZpZXdwb3J0VHJhbnNwYXJlbnRQYXNzID0gbmV3IFZpZXdwb3J0UGFzcygpXHJcbiAgICB2aWV3cG9ydFRyYW5zcGFyZW50UGFzcy5zZXRMYXllcnMoW1xyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlQsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNILFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTElORSxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5ULFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfUE9JTlRfQ0xPVUQsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9URVhULFxyXG4gICAgICBPYmplY3RMYXllcnMuU0hBRE9XQ0FUQ0hFUlxyXG4gICAgXSlcclxuICAgIHZpZXdwb3J0VHJhbnNwYXJlbnRQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5UUkFOU1BBUkVOVClcclxuICAgIHZpZXdwb3J0VHJhbnNwYXJlbnRQYXNzLm9wdGlvbnMgPSB7IG1pbkludGVuc2l0eTogMC4yNSwgb3BhY2l0eTogMC41IH1cclxuXHJcbiAgICBjb25zdCBwcm9ncmVzc2l2ZUFPUGFzcyA9IG5ldyBQcm9ncmVzc2l2ZUFPUGFzcygpXHJcbiAgICBwcm9ncmVzc2l2ZUFPUGFzcy5zZXRUZXh0dXJlKCd0RGVwdGgnLCBkZXB0aFRleClcclxuICAgIHByb2dyZXNzaXZlQU9QYXNzLmFjY3VtdWxhdGlvbkZyYW1lcyA9IHRoaXMuYWNjdW11bGF0aW9uRnJhbWVDb3VudFxyXG4gICAgcHJvZ3Jlc3NpdmVBT1Bhc3Mub3B0aW9ucyA9IHtcclxuICAgICAga2VybmVsUmFkaXVzOiAxMDAsXHJcbiAgICAgIGtlcm5lbFNpemU6IDY0XHJcbiAgICB9XHJcbiAgICBwcm9ncmVzc2l2ZUFPUGFzcy5zZXRDbGVhckNvbG9yKDB4ZmZmZmZmLCAxKVxyXG5cclxuICAgIGNvbnN0IGJsZW5kUGFzcyA9IG5ldyBCbGVuZFBhc3MoKVxyXG4gICAgYmxlbmRQYXNzLm9wdGlvbnMgPSB7IGJsZW5kQU86IHRydWUsIGJsZW5kRWRnZXM6IG9wdGlvbnMuZWRnZXMgfVxyXG4gICAgYmxlbmRQYXNzLnNldFRleHR1cmUoJ3RBbycsIHByb2dyZXNzaXZlQU9QYXNzLm91dHB1dFRhcmdldD8udGV4dHVyZSlcclxuICAgIGJsZW5kUGFzcy5zZXRUZXh0dXJlKFxyXG4gICAgICAndEVkZ2VzJyxcclxuICAgICAgb3B0aW9ucy5lZGdlcyA/IGVkZ2VzUGlwZWxpbmU/Lm91dHB1dFRleHR1cmUgOiB1bmRlZmluZWRcclxuICAgIClcclxuICAgIGJsZW5kUGFzcy5hY2N1bXVsYXRpb25GcmFtZXMgPSB0aGlzLmFjY3VtdWxhdGlvbkZyYW1lQ291bnRcclxuXHJcbiAgICBjb25zdCBibGVuZFBhc3NEeW5hbWljID0gbmV3IEJsZW5kUGFzcygpXHJcbiAgICBibGVuZFBhc3NEeW5hbWljLm9wdGlvbnMgPSB7IGJsZW5kQU86IGZhbHNlLCBibGVuZEVkZ2VzOiBvcHRpb25zLmVkZ2VzIH1cclxuICAgIGJsZW5kUGFzc0R5bmFtaWMuc2V0VGV4dHVyZShcclxuICAgICAgJ3RFZGdlcycsXHJcbiAgICAgIG9wdGlvbnMuZWRnZXMgPyBlZGdlc1BpcGVsaW5lPy5vdXRwdXRUZXh0dXJlRHluYW1pYyA6IHVuZGVmaW5lZFxyXG4gICAgKVxyXG4gICAgYmxlbmRQYXNzRHluYW1pYy5hY2N1bXVsYXRpb25GcmFtZXMgPSB0aGlzLmFjY3VtdWxhdGlvbkZyYW1lQ291bnRcclxuXHJcbiAgICBjb25zdCBzdGVuY2lsUGFzcyA9IG5ldyBTdGVuY2lsUGFzcygpXHJcbiAgICBzdGVuY2lsUGFzcy5zZXRWaXNpYmlsaXR5KE9iamVjdFZpc2liaWxpdHkuU1RFTkNJTClcclxuICAgIHN0ZW5jaWxQYXNzLnNldExheWVycyhbT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0hdKVxyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWxNYXNrUGFzcyA9IG5ldyBTdGVuY2lsTWFza1Bhc3MoKVxyXG4gICAgc3RlbmNpbE1hc2tQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5TVEVOQ0lMKVxyXG4gICAgc3RlbmNpbE1hc2tQYXNzLnNldExheWVycyhbT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0hdKVxyXG4gICAgc3RlbmNpbE1hc2tQYXNzLnNldENsZWFyRmxhZ3MoQ2xlYXJGbGFncy5ERVBUSClcclxuXHJcbiAgICBjb25zdCBvdmVybGF5UGFzcyA9IG5ldyBHZW9tZXRyeVBhc3MoKVxyXG4gICAgb3ZlcmxheVBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuT1ZFUkxBWSwgT2JqZWN0TGF5ZXJzLk1FQVNVUkVNRU5UU10pXHJcblxyXG4gICAgdGhpcy5keW5hbWljU3RhZ2UucHVzaChcclxuICAgICAgLi4uZGVwdGhTdWJQaXBlbGluZUR5bmFtaWMsXHJcbiAgICAgIHN0ZW5jaWxQYXNzLFxyXG4gICAgICB2aWV3cG9ydFBhc3MsXHJcbiAgICAgIHZpZXdwb3J0VHJhbnNwYXJlbnRQYXNzLFxyXG4gICAgICAuLi4ob3B0aW9ucy5lZGdlcyA/IFtibGVuZFBhc3NEeW5hbWljXSA6IFtdKSxcclxuICAgICAgc3RlbmNpbE1hc2tQYXNzLFxyXG4gICAgICBvdmVybGF5UGFzc1xyXG4gICAgKVxyXG4gICAgdGhpcy5wcm9ncmVzc2l2ZVN0YWdlLnB1c2goXHJcbiAgICAgIC4uLmRlcHRoU3ViUGlwZWxpbmVQcm9ncmVzc2l2ZSxcclxuICAgICAgc3RlbmNpbFBhc3MsXHJcbiAgICAgIHZpZXdwb3J0UGFzcyxcclxuICAgICAgdmlld3BvcnRUcmFuc3BhcmVudFBhc3MsXHJcbiAgICAgIHN0ZW5jaWxNYXNrUGFzcyxcclxuICAgICAgcHJvZ3Jlc3NpdmVBT1Bhc3MsXHJcbiAgICAgIGJsZW5kUGFzcyxcclxuICAgICAgb3ZlcmxheVBhc3NcclxuICAgIClcclxuICAgIHRoaXMucGFzc3Rocm91Z2hTdGFnZS5wdXNoKFxyXG4gICAgICBzdGVuY2lsUGFzcyxcclxuICAgICAgdmlld3BvcnRQYXNzLFxyXG4gICAgICB2aWV3cG9ydFRyYW5zcGFyZW50UGFzcyxcclxuICAgICAgc3RlbmNpbE1hc2tQYXNzLFxyXG4gICAgICBibGVuZFBhc3MsXHJcbiAgICAgIG92ZXJsYXlQYXNzXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5wYXNzTGlzdCA9IHRoaXMuZHluYW1pY1N0YWdlXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQ29sb3IsXHJcbiAgRG91YmxlU2lkZSxcclxuICBPcnRob2dyYXBoaWNDYW1lcmEsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgUGxhbmUsXHJcbiAgU2NlbmUsXHJcbiAgV2ViR0xSZW5kZXJlclxyXG59IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBCYXNlR1Bhc3MgfSBmcm9tICcuL0dQYXNzLmpzJ1xyXG5pbXBvcnQgeyBXb3JsZFRyZWUgfSBmcm9tICcuLi8uLi90cmVlL1dvcmxkVHJlZS5qcydcclxuaW1wb3J0IHsgQmF0Y2hVcGRhdGVSYW5nZSwgR2VvbWV0cnlUeXBlIH0gZnJvbSAnLi4vLi4vYmF0Y2hpbmcvQmF0Y2guanMnXHJcbmltcG9ydCBTcGVja2xlUmVuZGVyZXIgZnJvbSAnLi4vLi4vU3BlY2tsZVJlbmRlcmVyLmpzJ1xyXG5pbXBvcnQgeyBNZXNoQmF0Y2ggfSBmcm9tICcuLi8uLi9iYXRjaGluZy9NZXNoQmF0Y2guanMnXHJcbmltcG9ydCB7IE5vZGVSZW5kZXJWaWV3IH0gZnJvbSAnLi4vLi4vdHJlZS9Ob2RlUmVuZGVyVmlldy5qcydcclxuaW1wb3J0IHsgTWluaW1hbE1hdGVyaWFsIH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWxzL01hdGVyaWFscy5qcydcclxuaW1wb3J0IFNwZWNrbGVTdGFuZGFyZENvbG9yZWRNYXRlcmlhbCBmcm9tICcuLi8uLi9tYXRlcmlhbHMvU3BlY2tsZVN0YW5kYXJkQ29sb3JlZE1hdGVyaWFsLmpzJ1xyXG5pbXBvcnQgeyBBc3NldHMgfSBmcm9tICcuLi8uLi8uLi9pbmRleC5qcydcclxuaW1wb3J0IFNwZWNrbGVNZXNoIGZyb20gJy4uLy4uL29iamVjdHMvU3BlY2tsZU1lc2guanMnXHJcblxyXG5leHBvcnQgY2xhc3MgU2hhZGVkUGFzcyBleHRlbmRzIEJhc2VHUGFzcyB7XHJcbiAgcHJvdGVjdGVkIHRyZWU6IFdvcmxkVHJlZVxyXG4gIHByb3RlY3RlZCBzcGVja2xlUmVuZGVyZXI6IFNwZWNrbGVSZW5kZXJlclxyXG4gIHByb3RlY3RlZCBtYXRlcmlhbE1hcDoge1xyXG4gICAgW2JhdGNoSUQ6IHN0cmluZ106IFtcclxuICAgICAgYmF0Y2g6IE1lc2hCYXRjaCxcclxuICAgICAgY29sb3JNYXA6IE1hcDxudW1iZXIsIEFycmF5PE5vZGVSZW5kZXJWaWV3Pj4sXHJcbiAgICAgIG1hdGVyaWFsOiBTcGVja2xlU3RhbmRhcmRDb2xvcmVkTWF0ZXJpYWxcclxuICAgIF1cclxuICB9ID0ge31cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHRyZWU6IFdvcmxkVHJlZSwgcmVuZGVyZXI6IFNwZWNrbGVSZW5kZXJlcikge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy50cmVlID0gdHJlZVxyXG4gICAgdGhpcy5zcGVja2xlUmVuZGVyZXIgPSByZW5kZXJlclxyXG4gICAgdGhpcy5idWlsZE1hdGVyaWFscygpXHJcbiAgICB0aGlzLmFwcGx5Q29sb3JJbmRpY2VzKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnU0hBREVEJ1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENsaXBwaW5nUGxhbmVzKHBsYW5lczogUGxhbmVbXSkge1xyXG4gICAgZm9yIChjb25zdCBrIGluIHRoaXMubWF0ZXJpYWxNYXApIHtcclxuICAgICAgdGhpcy5tYXRlcmlhbE1hcFtrXVsyXS5jbGlwcGluZ1BsYW5lcyA9IHBsYW5lc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGJ1aWxkTWF0ZXJpYWxzKCkge1xyXG4gICAgY29uc3QgYmF0Y2hlczogTWVzaEJhdGNoW10gPSB0aGlzLnNwZWNrbGVSZW5kZXJlci5iYXRjaGVyLmdldEJhdGNoZXMoXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgR2VvbWV0cnlUeXBlLk1FU0hcclxuICAgIClcclxuXHJcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGJhdGNoZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgYmF0Y2g6IE1lc2hCYXRjaCA9IGJhdGNoZXNba11cclxuICAgICAgY29uc3QgY29sb3JNYXA6IE1hcDxudW1iZXIsIEFycmF5PE5vZGVSZW5kZXJWaWV3Pj4gPSBuZXcgTWFwKClcclxuICAgICAgY29sb3JNYXAuc2V0KDB4ODg4ODg4LCBbXSlcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmF0Y2gucmVuZGVyVmlld3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBydiA9IGJhdGNoLnJlbmRlclZpZXdzW2ldXHJcbiAgICAgICAgY29uc3QgY29sb3JNYXRlcmlhbDogTWluaW1hbE1hdGVyaWFsIHwgbnVsbCA9IHJ2LnJlbmRlckRhdGEuY29sb3JNYXRlcmlhbFxyXG4gICAgICAgIGlmICghY29sb3JNYXRlcmlhbCkge1xyXG4gICAgICAgICAgY29uc3QgZGVmYXVsdENvbG9yRW50cnkgPSBjb2xvck1hcC5nZXQoMHg4ODg4ODgpXHJcbiAgICAgICAgICBpZiAoZGVmYXVsdENvbG9yRW50cnkpIGRlZmF1bHRDb2xvckVudHJ5LnB1c2gocnYpIC8qKiBUaGlzIGlzIHNvIGR1bWIgKi9cclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbG9yTWFwLmhhcyhjb2xvck1hdGVyaWFsLmNvbG9yKSkgY29sb3JNYXAuc2V0KGNvbG9yTWF0ZXJpYWwuY29sb3IsIFtdKVxyXG4gICAgICAgIGNvbnN0IGVudHJ5ID0gY29sb3JNYXAuZ2V0KGNvbG9yTWF0ZXJpYWwuY29sb3IpXHJcbiAgICAgICAgaWYgKGVudHJ5KSBlbnRyeS5wdXNoKHJ2KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByYW1wVGV4dHVyZSA9IEFzc2V0cy5nZW5lcmF0ZURpc2NyZWV0UmFtcFRleHR1cmUoXHJcbiAgICAgICAgQXJyYXkuZnJvbShjb2xvck1hcC5rZXlzKCkpXHJcbiAgICAgIClcclxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgU3BlY2tsZVN0YW5kYXJkQ29sb3JlZE1hdGVyaWFsKHtcclxuICAgICAgICBzaWRlOiBEb3VibGVTaWRlLFxyXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcclxuICAgICAgICB3aXJlZnJhbWU6IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIG1hdGVyaWFsLmNsaXBTaGFkb3dzID0gdHJ1ZVxyXG4gICAgICBtYXRlcmlhbC5zZXRHcmFkaWVudFRleHR1cmUocmFtcFRleHR1cmUpXHJcblxyXG4gICAgICB0aGlzLm1hdGVyaWFsTWFwW2JhdGNoLmlkXSA9IFtiYXRjaCwgY29sb3JNYXAsIG1hdGVyaWFsXVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5Q29sb3JJbmRpY2VzKCkge1xyXG4gICAgZm9yIChjb25zdCBpdGVtIGluIHRoaXMubWF0ZXJpYWxNYXApIHtcclxuICAgICAgY29uc3QgYmF0Y2ggPSB0aGlzLm1hdGVyaWFsTWFwW2l0ZW1dWzBdXHJcbiAgICAgIGNvbnN0IGNvbG9yTWFwID0gdGhpcy5tYXRlcmlhbE1hcFtpdGVtXVsxXVxyXG5cclxuICAgICAgY29uc3QgdXBkYXRlUmFuZ2VzID0gW11cclxuICAgICAgbGV0IHJhbXBJbmRleCA9IDBcclxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjb2xvck1hcC5lbnRyaWVzKCkpIHtcclxuICAgICAgICBjb25zdCBjb2xvciA9IGVudHJ5WzBdXHJcbiAgICAgICAgdXBkYXRlUmFuZ2VzLnB1c2goXHJcbiAgICAgICAgICAuLi5lbnRyeVsxXS5tYXAoKHZhbHVlOiBOb2RlUmVuZGVyVmlldykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG9mZnNldDogdmFsdWUuYmF0Y2hTdGFydCxcclxuICAgICAgICAgICAgICBjb3VudDogdmFsdWUuYmF0Y2hDb3VudCxcclxuICAgICAgICAgICAgICBtYXRlcmlhbE9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIHJhbXBJbmRleDogcmFtcEluZGV4IC8gY29sb3JNYXAuc2l6ZSxcclxuICAgICAgICAgICAgICAgIHJhbXBJbmRleENvbG9yOiBuZXcgQ29sb3IoY29sb3IpLFxyXG4gICAgICAgICAgICAgICAgcmFtcFdpZHRoOiBlbnRyeVsxXS5sZW5ndGggKiA0XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGFzIEJhdGNoVXBkYXRlUmFuZ2VcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHJhbXBJbmRleCsrXHJcbiAgICAgIH1cclxuICAgICAgYmF0Y2guc2V0QmF0Y2hCdWZmZXJzKHVwZGF0ZVJhbmdlcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZU1hdGVyaWFscygpIHtcclxuICAgIGZvciAoY29uc3QgayBpbiB0aGlzLm1hdGVyaWFsTWFwKSB7XHJcbiAgICAgIGNvbnN0IHR1cGxlID0gdGhpcy5tYXRlcmlhbE1hcFtrXVxyXG4gICAgICA7KHR1cGxlWzBdLnJlbmRlck9iamVjdCBhcyBTcGVja2xlTWVzaCkuc2V0T3ZlcnJpZGVCYXRjaE1hdGVyaWFsKHR1cGxlWzJdKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc3RvcmVNYXRlcmlhbHMoKSB7XHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5tYXRlcmlhbE1hcCkge1xyXG4gICAgICBjb25zdCB0dXBsZSA9IHRoaXMubWF0ZXJpYWxNYXBba11cclxuICAgICAgOyh0dXBsZVswXS5yZW5kZXJPYmplY3QgYXMgU3BlY2tsZU1lc2gpLnJlc3RvcmVCYXRjaE1hdGVyaWFsKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXIoXHJcbiAgICByZW5kZXJlcjogV2ViR0xSZW5kZXJlcixcclxuICAgIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEgfCBPcnRob2dyYXBoaWNDYW1lcmEgfCBudWxsLFxyXG4gICAgc2NlbmU/OiBTY2VuZVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjYW1lcmEgfHwgIXNjZW5lKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB0aGlzLm92ZXJyaWRlTWF0ZXJpYWxzKClcclxuXHJcbiAgICBpZiAodGhpcy5vbkJlZm9yZVJlbmRlcikgdGhpcy5vbkJlZm9yZVJlbmRlcigpXHJcblxyXG4gICAgdGhpcy5hcHBseUxheWVycyhjYW1lcmEpXHJcblxyXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMub3V0cHV0VGFyZ2V0KVxyXG5cclxuICAgIHRoaXMuY2xlYXIocmVuZGVyZXIpXHJcblxyXG4gICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpXHJcbiAgICBpZiAodGhpcy5vbkFmdGVyUmVuZGVyKSB0aGlzLm9uQWZ0ZXJSZW5kZXIoKVxyXG5cclxuICAgIHRoaXMucmVzdG9yZU1hdGVyaWFscygpXHJcblxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCBTcGVja2xlUmVuZGVyZXIgZnJvbSAnLi4vLi4vU3BlY2tsZVJlbmRlcmVyLmpzJ1xyXG5pbXBvcnQgeyBHZW9tZXRyeVBhc3MgfSBmcm9tICcuLi9QYXNzZXMvR2VvbWV0cnlQYXNzLmpzJ1xyXG5pbXBvcnQgeyBQcm9ncmVzc2l2ZVBpcGVsaW5lIH0gZnJvbSAnLi9Qcm9ncmVzc2l2ZVBpcGVsaW5lLmpzJ1xyXG5pbXBvcnQgeyBTaGFkZWRQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL1NoYWRlZFBhc3MuanMnXHJcbmltcG9ydCB7IENsZWFyRmxhZ3MsIE9iamVjdFZpc2liaWxpdHkgfSBmcm9tICcuLi9QYXNzZXMvR1Bhc3MuanMnXHJcbmltcG9ydCB7IFN0ZW5jaWxQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL1N0ZW5jaWxQYXNzLmpzJ1xyXG5pbXBvcnQgeyBTdGVuY2lsTWFza1Bhc3MgfSBmcm9tICcuLi9QYXNzZXMvU3RlbmNpbE1hc2tQYXNzLmpzJ1xyXG5pbXBvcnQgeyBQaXBlbGluZU9wdGlvbnMsIERlZmF1bHRQaXBlbGluZU9wdGlvbnMgfSBmcm9tICcuL1BpcGVsaW5lLmpzJ1xyXG5pbXBvcnQgeyBXb3JsZFRyZWUgfSBmcm9tICcuLi8uLi90cmVlL1dvcmxkVHJlZS5qcydcclxuaW1wb3J0IHsgRWRnZXNQaXBlbGluZSB9IGZyb20gJy4vRWRnZXNQaXBlbGluZS5qcydcclxuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgQmxlbmRQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL0JsZW5kUGFzcy5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBTaGFkZWRWaWV3UGlwZWxpbmUgZXh0ZW5kcyBQcm9ncmVzc2l2ZVBpcGVsaW5lIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHNwZWNrbGVSZW5kZXJlcjogU3BlY2tsZVJlbmRlcmVyLFxyXG4gICAgb3B0aW9uczogUGlwZWxpbmVPcHRpb25zID0gRGVmYXVsdFBpcGVsaW5lT3B0aW9ucyxcclxuICAgIHRyZWU6IFdvcmxkVHJlZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3BlY2tsZVJlbmRlcmVyKVxyXG5cclxuICAgIGNvbnN0IGVkZ2VzUGlwZWxpbmUgPSBvcHRpb25zLmVkZ2VzID8gbmV3IEVkZ2VzUGlwZWxpbmUoc3BlY2tsZVJlbmRlcmVyKSA6IG51bGxcclxuICAgIC8qKiBXZSdsbCBqdXN0IHJlbmRlciBhbGwgb2JqZWN0cyBvdXRsaW5lcywgbm90IGp1c3Qgb3BhcXVlICovXHJcbiAgICAvKiogQWxleCAwMS4wOC4yMDI1OiBJIGRvbid0IHRoaW5rIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuICovXHJcbiAgICAvLyBlZGdlc1BpcGVsaW5lPy5kZXB0aFBhc3Muc2V0VmlzaWJpbGl0eShudWxsKVxyXG4gICAgLy8gZWRnZXNQaXBlbGluZT8uZGVwdGhQYXNzRHluYW1pYy5zZXRWaXNpYmlsaXR5KG51bGwpXHJcblxyXG4gICAgY29uc3QgZGVwdGhTdWJQaXBlbGluZUR5bmFtaWMgPVxyXG4gICAgICAob3B0aW9ucy5lZGdlcyA/IGVkZ2VzUGlwZWxpbmU/LmR5bmFtaWNQYXNzZXMgOiBbXSkgfHwgW11cclxuICAgIGNvbnN0IGRlcHRoU3ViUGlwZWxpbmVQcm9ncmVzc2l2ZSA9XHJcbiAgICAgIChvcHRpb25zLmVkZ2VzID8gZWRnZXNQaXBlbGluZT8ucHJvZ3Jlc3NpdmVQYXNzZXMgOiBbXSkgfHwgW11cclxuXHJcbiAgICBjb25zdCBiYXNpdFBhc3MgPSBuZXcgU2hhZGVkUGFzcyh0cmVlLCBzcGVja2xlUmVuZGVyZXIpXHJcbiAgICBiYXNpdFBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCwgT2JqZWN0TGF5ZXJzLlBST1BTXSlcclxuICAgIGJhc2l0UGFzcy5zZXRDbGVhckNvbG9yKDB4MDAwMDAwLCAwKVxyXG4gICAgYmFzaXRQYXNzLnNldENsZWFyRmxhZ3MoQ2xlYXJGbGFncy5DT0xPUilcclxuICAgIGJhc2l0UGFzcy5vdXRwdXRUYXJnZXQgPSBudWxsXHJcblxyXG4gICAgY29uc3Qgbm9uTWVzaFBhc3MgPSBuZXcgR2VvbWV0cnlQYXNzKClcclxuICAgIG5vbk1lc2hQYXNzLnNldExheWVycyhbXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9MSU5FLFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfUE9JTlQsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVF9DTE9VRCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1RFWFRcclxuICAgIF0pXHJcblxyXG4gICAgY29uc3QgYmxlbmRQYXNzID0gbmV3IEJsZW5kUGFzcygpXHJcbiAgICBibGVuZFBhc3Mub3B0aW9ucyA9IHsgYmxlbmRBTzogZmFsc2UsIGJsZW5kRWRnZXM6IG9wdGlvbnMuZWRnZXMgfVxyXG4gICAgYmxlbmRQYXNzLnNldFRleHR1cmUoXHJcbiAgICAgICd0RWRnZXMnLFxyXG4gICAgICBvcHRpb25zLmVkZ2VzID8gZWRnZXNQaXBlbGluZT8ub3V0cHV0VGV4dHVyZSA6IHVuZGVmaW5lZFxyXG4gICAgKVxyXG4gICAgYmxlbmRQYXNzLmFjY3VtdWxhdGlvbkZyYW1lcyA9IHRoaXMuYWNjdW11bGF0aW9uRnJhbWVDb3VudFxyXG5cclxuICAgIGNvbnN0IGJsZW5kUGFzc0R5bmFtaWMgPSBuZXcgQmxlbmRQYXNzKClcclxuICAgIGJsZW5kUGFzc0R5bmFtaWMub3B0aW9ucyA9IHsgYmxlbmRBTzogZmFsc2UsIGJsZW5kRWRnZXM6IG9wdGlvbnMuZWRnZXMgfVxyXG4gICAgYmxlbmRQYXNzRHluYW1pYy5zZXRUZXh0dXJlKFxyXG4gICAgICAndEVkZ2VzJyxcclxuICAgICAgb3B0aW9ucy5lZGdlcyA/IGVkZ2VzUGlwZWxpbmU/Lm91dHB1dFRleHR1cmVEeW5hbWljIDogdW5kZWZpbmVkXHJcbiAgICApXHJcbiAgICBibGVuZFBhc3NEeW5hbWljLmFjY3VtdWxhdGlvbkZyYW1lcyA9IHRoaXMuYWNjdW11bGF0aW9uRnJhbWVDb3VudFxyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWxQYXNzID0gbmV3IFN0ZW5jaWxQYXNzKClcclxuICAgIHN0ZW5jaWxQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5TVEVOQ0lMKVxyXG4gICAgc3RlbmNpbFBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcblxyXG4gICAgY29uc3Qgc3RlbmNpbE1hc2tQYXNzID0gbmV3IFN0ZW5jaWxNYXNrUGFzcygpXHJcbiAgICBzdGVuY2lsTWFza1Bhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LlNURU5DSUwpXHJcbiAgICBzdGVuY2lsTWFza1Bhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcbiAgICBzdGVuY2lsTWFza1Bhc3Muc2V0Q2xlYXJGbGFncyhDbGVhckZsYWdzLkRFUFRIKVxyXG5cclxuICAgIGNvbnN0IG92ZXJsYXlQYXNzID0gbmV3IEdlb21ldHJ5UGFzcygpXHJcbiAgICBvdmVybGF5UGFzcy5zZXRMYXllcnMoW09iamVjdExheWVycy5PVkVSTEFZLCBPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTXSlcclxuXHJcbiAgICB0aGlzLmR5bmFtaWNTdGFnZS5wdXNoKFxyXG4gICAgICAuLi5kZXB0aFN1YlBpcGVsaW5lRHluYW1pYyxcclxuICAgICAgc3RlbmNpbFBhc3MsXHJcbiAgICAgIGJhc2l0UGFzcyxcclxuICAgICAgbm9uTWVzaFBhc3MsXHJcbiAgICAgIC4uLihvcHRpb25zLmVkZ2VzID8gW2JsZW5kUGFzc0R5bmFtaWNdIDogW10pLFxyXG4gICAgICBzdGVuY2lsTWFza1Bhc3MsXHJcbiAgICAgIG92ZXJsYXlQYXNzXHJcbiAgICApXHJcbiAgICB0aGlzLnByb2dyZXNzaXZlU3RhZ2UucHVzaChcclxuICAgICAgLi4uZGVwdGhTdWJQaXBlbGluZVByb2dyZXNzaXZlLFxyXG4gICAgICBzdGVuY2lsUGFzcyxcclxuICAgICAgYmFzaXRQYXNzLFxyXG4gICAgICBub25NZXNoUGFzcyxcclxuICAgICAgc3RlbmNpbE1hc2tQYXNzLFxyXG4gICAgICBibGVuZFBhc3MsXHJcbiAgICAgIG92ZXJsYXlQYXNzXHJcbiAgICApXHJcbiAgICB0aGlzLnBhc3N0aHJvdWdoU3RhZ2UucHVzaChcclxuICAgICAgc3RlbmNpbFBhc3MsXHJcbiAgICAgIGJhc2l0UGFzcyxcclxuICAgICAgbm9uTWVzaFBhc3MsXHJcbiAgICAgIHN0ZW5jaWxNYXNrUGFzcyxcclxuICAgICAgYmxlbmRQYXNzLFxyXG4gICAgICBvdmVybGF5UGFzc1xyXG4gICAgKVxyXG5cclxuICAgIHRoaXMucGFzc0xpc3QgPSB0aGlzLmR5bmFtaWNTdGFnZVxyXG4gIH1cclxufVxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZUNvcHlPdXRwdXRWZXJ0ID0gYFxyXG4gICAgdmFyeWluZyB2ZWMyIHZVdjtcclxuICAgIHZvaWQgbWFpbigpIHtcclxuICAgICAgICB2VXYgPSB1djtcclxuICAgICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XHJcbiAgICB9YFxyXG4iLCJleHBvcnQgY29uc3Qgc3BlY2tsZUNvcHlPdXRwdXRGcmFnID0gYFxyXG4gICAgdW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xyXG4gICAgdW5pZm9ybSBzYW1wbGVyMkQgdERpZmZ1c2U7XHJcbiAgICB2YXJ5aW5nIHZlYzIgdlV2O1xyXG5cclxuICAgIGNvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuO1xyXG4gICAgY29uc3QgdmVjMyBQYWNrRmFjdG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sIDI1Ni4gKTtcclxuICAgIGNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xyXG5cclxuICAgIGZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XHJcbiAgICAgICAgcmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xyXG4gICAgfVxyXG5cclxuICAgIHZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xyXG4gICAgICAgIHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xyXG4gICAgfVxyXG5cclxuICAgIHZvaWQgbWFpbigpIHtcclxuICAgICAgICB2ZWM0IGluU2FtcGxlID0gdGV4dHVyZTJEKCB0RGlmZnVzZSwgdlV2ICk7XHJcbiAgICAgICAgdmVjMyBvdXRTYW1wbGUgPSBpblNhbXBsZS5yZ2I7XHJcbiAgICAgICAgI2lmIElOUFVUX1RZUEUgPT0gMFxyXG4gICAgICAgICAgICAvKiogXHJcbiAgICAgICAgICAgICAgICBVbi1wcmVtdWx0aXBseSBhbHBoYVxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBpblNhbXBsZS5yZ2IgLz0gaW5TYW1wbGUuYTtcclxuICAgICAgICAgICAgb3V0U2FtcGxlID0gTGluZWFyVG9zUkdCKCBpblNhbXBsZSApLnJnYjtcclxuICAgICAgICAjZWxpZiBJTlBVVF9UWVBFID09IDFcclxuICAgICAgICAgICAgb3V0U2FtcGxlLnJnYiA9IHZlYzModW5wYWNrUkdCQVRvRGVwdGgoaW5TYW1wbGUpKTtcclxuICAgICAgICAjZWxpZiBJTlBVVF9UWVBFID09IDJcclxuICAgICAgICAgICAgb3V0U2FtcGxlLnJnYiA9IHVucGFja1JHQlRvTm9ybWFsKGluU2FtcGxlLnJnYik7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBvdXRTYW1wbGU7XHJcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgPSBpblNhbXBsZS5hO1xyXG4gICAgfWBcclxuIiwiaW1wb3J0IHsgU2hhZGVyTWF0ZXJpYWwsIFRleHR1cmUsIFVuaWZvcm1zVXRpbHMsIFdlYkdMUmVuZGVyZXIgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgQmFzZUdQYXNzLCBQYXNzT3B0aW9ucyB9IGZyb20gJy4vR1Bhc3MuanMnXHJcbmltcG9ydCB7IENvcHlTaGFkZXIgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vc2hhZGVycy9Db3B5U2hhZGVyLmpzJ1xyXG5pbXBvcnQgeyBzcGVja2xlQ29weU91dHB1dFZlcnQgfSBmcm9tICcuLi8uLi9tYXRlcmlhbHMvc2hhZGVycy9zcGVja2xlLWNvcHktb3V0cHV0LXZlcnQuanMnXHJcbmltcG9ydCB7IHNwZWNrbGVDb3B5T3V0cHV0RnJhZyB9IGZyb20gJy4uLy4uL21hdGVyaWFscy9zaGFkZXJzL3NwZWNrbGUtY29weS1vdXRwdXQtZnJhZy5qcydcclxuaW1wb3J0IHsgRnVsbFNjcmVlblF1YWQgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvUGFzcy5qcydcclxuXHJcbmV4cG9ydCBlbnVtIElucHV0VHlwZSB7XHJcbiAgQ29sb3IgPSAwLFxyXG4gIFBhY2tlZERlcHRoID0gMSxcclxuICBOb3JtYWxzID0gMixcclxuICBQYXNzdGhyb3VnaCA9IDNcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXRQYXNzT3B0aW9ucyBleHRlbmRzIFBhc3NPcHRpb25zIHtcclxuICBpbnB1dFR5cGU/OiBJbnB1dFR5cGVcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERlZmF1bHRPdXRwdXRQYXNzT3B0aW9uczogUmVxdWlyZWQ8T3V0cHV0UGFzc09wdGlvbnM+ID0ge1xyXG4gIGlucHV0VHlwZTogSW5wdXRUeXBlLlBhc3N0aHJvdWdoXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPdXRwdXRQYXNzIGV4dGVuZHMgQmFzZUdQYXNzIHtcclxuICBwcml2YXRlIGZzUXVhZDogRnVsbFNjcmVlblF1YWRcclxuICBwdWJsaWMgbWF0ZXJpYWxDb3B5OiBTaGFkZXJNYXRlcmlhbFxyXG5cclxuICBwdWJsaWMgX29wdGlvbnM6IFJlcXVpcmVkPE91dHB1dFBhc3NPcHRpb25zPiA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICB7fSxcclxuICAgIERlZmF1bHRPdXRwdXRQYXNzT3B0aW9uc1xyXG4gIClcclxuXHJcbiAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBPdXRwdXRQYXNzT3B0aW9ucykge1xyXG4gICAgc3VwZXIub3B0aW9ucyA9IHZhbHVlXHJcbiAgICB0aGlzLnNldElucHV0VHlwZSh0aGlzLl9vcHRpb25zLmlucHV0VHlwZSlcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xyXG4gICAgICBkZWZpbmVzOiB7XHJcbiAgICAgICAgSU5QVVRfVFlQRTogdGhpcy5fb3B0aW9ucy5pbnB1dFR5cGVcclxuICAgICAgfSxcclxuICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMuY2xvbmUoQ29weVNoYWRlci51bmlmb3JtcyksXHJcbiAgICAgIHZlcnRleFNoYWRlcjogc3BlY2tsZUNvcHlPdXRwdXRWZXJ0LFxyXG4gICAgICBmcmFnbWVudFNoYWRlcjogc3BlY2tsZUNvcHlPdXRwdXRGcmFnLFxyXG4gICAgICB0cmFuc3BhcmVudDogZmFsc2VcclxuICAgIH0pXHJcbiAgICB0aGlzLm1hdGVyaWFsQ29weS5kZXB0aFdyaXRlID0gZmFsc2VcclxuICAgIHRoaXMubWF0ZXJpYWxDb3B5Lm5lZWRzVXBkYXRlID0gdHJ1ZVxyXG4gICAgdGhpcy5mc1F1YWQgPSBuZXcgRnVsbFNjcmVlblF1YWQodGhpcy5tYXRlcmlhbENvcHkpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0SW5wdXRUeXBlKHR5cGU6IElucHV0VHlwZSkge1xyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkuZGVmaW5lc1snSU5QVVRfVFlQRSddID0gdHlwZVxyXG4gICAgdGhpcy5tYXRlcmlhbENvcHkubmVlZHNVcGRhdGUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VGV4dHVyZSh1TmFtZTogc3RyaW5nLCB0ZXh0dXJlOiBUZXh0dXJlIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLm1hdGVyaWFsQ29weS51bmlmb3Jtc1t1TmFtZV0udmFsdWUgPSB0ZXh0dXJlXHJcbiAgICB0aGlzLm1hdGVyaWFsQ29weS5uZWVkc1VwZGF0ZSA9IHRydWVcclxuICB9XHJcblxyXG4gIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdPVVRQVVQnXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyKHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyKTogYm9vbGVhbiB7XHJcbiAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGhpcy5fb3V0cHV0VGFyZ2V0KVxyXG4gICAgdGhpcy5mc1F1YWQucmVuZGVyKHJlbmRlcmVyKVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgU3BlY2tsZVJlbmRlcmVyIGZyb20gJy4uLy4uL1NwZWNrbGVSZW5kZXJlci5qcydcclxuaW1wb3J0IHsgQ2xlYXJGbGFncywgT2JqZWN0VmlzaWJpbGl0eSB9IGZyb20gJy4uL1Bhc3Nlcy9HUGFzcy5qcydcclxuaW1wb3J0IHsgT2JqZWN0TGF5ZXJzIH0gZnJvbSAnLi4vLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgUHJvZ3Jlc3NpdmVQaXBlbGluZSB9IGZyb20gJy4vUHJvZ3Jlc3NpdmVQaXBlbGluZS5qcydcclxuaW1wb3J0IHsgR2VvbWV0cnlQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL0dlb21ldHJ5UGFzcy5qcydcclxuaW1wb3J0IHsgU3RlbmNpbE1hc2tQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL1N0ZW5jaWxNYXNrUGFzcy5qcydcclxuaW1wb3J0IHsgU3RlbmNpbFBhc3MgfSBmcm9tICcuLi9QYXNzZXMvU3RlbmNpbFBhc3MuanMnXHJcbmltcG9ydCB7IE91dHB1dFBhc3MgfSBmcm9tICcuLi9QYXNzZXMvT3V0cHV0UGFzcy5qcydcclxuaW1wb3J0IFNwZWNrbGVTdGFuZGFyZE1hdGVyaWFsIGZyb20gJy4uLy4uL21hdGVyaWFscy9TcGVja2xlU3RhbmRhcmRNYXRlcmlhbC5qcydcclxuaW1wb3J0IHtcclxuICBEb3VibGVTaWRlLFxyXG4gIE9ydGhvZ3JhcGhpY0NhbWVyYSxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBSZW5kZXJJdGVtLFxyXG4gIFNjZW5lLFxyXG4gIFdlYkdMUmVuZGVyZXJcclxufSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgRWRnZXNQaXBlbGluZSB9IGZyb20gJy4vRWRnZXNQaXBlbGluZS5qcydcclxuaW1wb3J0IHsgRGVmYXVsdFBpcGVsaW5lT3B0aW9ucywgUGlwZWxpbmVPcHRpb25zIH0gZnJvbSAnLi9QaXBlbGluZS5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBQZW5WaWV3UGlwZWxpbmUgZXh0ZW5kcyBQcm9ncmVzc2l2ZVBpcGVsaW5lIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHNwZWNrbGVSZW5kZXJlcjogU3BlY2tsZVJlbmRlcmVyLFxyXG4gICAgb3B0aW9uczogUGlwZWxpbmVPcHRpb25zID0gRGVmYXVsdFBpcGVsaW5lT3B0aW9uc1xyXG4gICkge1xyXG4gICAgb3B0aW9uc1xyXG4gICAgc3VwZXIoc3BlY2tsZVJlbmRlcmVyKVxyXG5cclxuICAgIGNvbnN0IGVkZ2VzUGlwZWxpbmUgPSBuZXcgRWRnZXNQaXBlbGluZShzcGVja2xlUmVuZGVyZXIpXHJcbiAgICBlZGdlc1BpcGVsaW5lLmVkZ2VQYXNzRHluYW1pYy5vdXRwdXRUYXJnZXQgPSBudWxsXHJcbiAgICBlZGdlc1BpcGVsaW5lLmRlcHRoUGFzcy5zZXRWaXNpYmlsaXR5KE9iamVjdFZpc2liaWxpdHkuREVQVEgpXHJcbiAgICBlZGdlc1BpcGVsaW5lLmRlcHRoUGFzc0R5bmFtaWMuc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LkRFUFRIKVxyXG4gICAgZWRnZXNQaXBlbGluZS5lZGdlUGFzcy5vcHRpb25zID0geyBiYWNrZ3JvdW5kQ29sb3I6IDB4MDAwMDAwLCAuLi5vcHRpb25zIH1cclxuICAgIGVkZ2VzUGlwZWxpbmUuZWRnZVBhc3NEeW5hbWljLm9wdGlvbnMgPSB7IGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsIC4uLm9wdGlvbnMgfVxyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWxQYXNzID0gbmV3IFN0ZW5jaWxQYXNzKClcclxuICAgIHN0ZW5jaWxQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5TVEVOQ0lMKVxyXG4gICAgc3RlbmNpbFBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcblxyXG4gICAgLyoqIFdlIGNhbiBhbm9ueW1vdXNseSBleHRlbmQgYSBwYXNzIGFuZCBpbmxpbmUgaXQgKi9cclxuICAgIGNvbnN0IGdlb21ldHJ5UGFzcyA9IG5ldyAoY2xhc3MgZXh0ZW5kcyBHZW9tZXRyeVBhc3Mge1xyXG4gICAgICBwcml2YXRlIGhpZGRlbk1hdGVyaWFsOiBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbFxyXG5cclxuICAgICAgcHVibGljIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnR0VPTUVUUlktSElEREVOJ1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwdWJsaWMgZ2V0IG92ZXJyaWRlQmF0Y2hNYXRlcmlhbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oaWRkZW5NYXRlcmlhbFxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpXHJcbiAgICAgICAgdGhpcy5oaWRkZW5NYXRlcmlhbCA9IG5ldyBTcGVja2xlU3RhbmRhcmRNYXRlcmlhbCh7XHJcbiAgICAgICAgICBzaWRlOiBEb3VibGVTaWRlLFxyXG4gICAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG4gICAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICAgIHdpcmVmcmFtZTogZmFsc2VcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuaGlkZGVuTWF0ZXJpYWwuY29sb3JXcml0ZSA9IGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHB1YmxpYyByZW5kZXIoXHJcbiAgICAgICAgcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIsXHJcbiAgICAgICAgY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYSB8IE9ydGhvZ3JhcGhpY0NhbWVyYSB8IG51bGwsXHJcbiAgICAgICAgc2NlbmU/OiBTY2VuZVxyXG4gICAgICApOiBib29sZWFuIHtcclxuICAgICAgICByZW5kZXJlci5zZXRPcGFxdWVTb3J0KHRoaXMuc29ydE9wYXF1ZSlcclxuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5yZW5kZXIocmVuZGVyZXIsIGNhbWVyYSwgc2NlbmUpXHJcbiAgICAgICAgLy9AdHMtZXhwZWN0LWVycm9yIHNodXQgdXBcclxuICAgICAgICByZW5kZXJlci5zZXRPcGFxdWVTb3J0KG51bGwpXHJcbiAgICAgICAgcmV0dXJuIHJldFxyXG4gICAgICB9XHJcblxyXG4gICAgICBwcm90ZWN0ZWQgc29ydE9wYXF1ZShhOiBSZW5kZXJJdGVtLCBiOiBSZW5kZXJJdGVtKTogbnVtYmVyIHtcclxuICAgICAgICAvKiogV2UgcHJpb3JpdGl6ZSBvbiBtYXRlcmlhbHMgdGhhdCBvbmx5IHdyaXRlIGRlcHRoLCBzbyB0aGF0IG90aGVyIHZpc2libGUgbWF0ZXJpYWxzIGdldCBwcm9wZXJseSBvY2NsdWRlZCAqL1xyXG4gICAgICAgIHJldHVybiArYS5tYXRlcmlhbC5jb2xvcldyaXRlIC0gK2IubWF0ZXJpYWwuY29sb3JXcml0ZVxyXG4gICAgICB9XHJcbiAgICB9KSgpXHJcbiAgICBnZW9tZXRyeVBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCwgT2JqZWN0TGF5ZXJzLlBST1BTXSlcclxuXHJcbiAgICBjb25zdCBzdGVuY2lsTWFza1Bhc3MgPSBuZXcgU3RlbmNpbE1hc2tQYXNzKClcclxuICAgIHN0ZW5jaWxNYXNrUGFzcy5zZXRWaXNpYmlsaXR5KE9iamVjdFZpc2liaWxpdHkuU1RFTkNJTClcclxuICAgIHN0ZW5jaWxNYXNrUGFzcy5zZXRMYXllcnMoW09iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNIXSlcclxuICAgIHN0ZW5jaWxNYXNrUGFzcy5zZXRDbGVhckZsYWdzKENsZWFyRmxhZ3MuREVQVEgpXHJcblxyXG4gICAgY29uc3Qgb3ZlcmxheVBhc3MgPSBuZXcgR2VvbWV0cnlQYXNzKClcclxuICAgIG92ZXJsYXlQYXNzLnNldExheWVycyhbT2JqZWN0TGF5ZXJzLk9WRVJMQVksIE9iamVjdExheWVycy5NRUFTVVJFTUVOVFNdKVxyXG5cclxuICAgIGNvbnN0IG91dHB1dFBhc3MgPSBuZXcgT3V0cHV0UGFzcygpXHJcbiAgICBvdXRwdXRQYXNzLnNldFRleHR1cmUoJ3REaWZmdXNlJywgZWRnZXNQaXBlbGluZS5vdXRwdXRUZXh0dXJlKVxyXG5cclxuICAgIHRoaXMuZHluYW1pY1N0YWdlLnB1c2goXHJcbiAgICAgIC4uLmVkZ2VzUGlwZWxpbmUuZHluYW1pY1Bhc3NlcyxcclxuICAgICAgc3RlbmNpbFBhc3MsXHJcbiAgICAgIGdlb21ldHJ5UGFzcyxcclxuICAgICAgc3RlbmNpbE1hc2tQYXNzLFxyXG4gICAgICBvdmVybGF5UGFzc1xyXG4gICAgKVxyXG5cclxuICAgIHRoaXMucHJvZ3Jlc3NpdmVTdGFnZS5wdXNoKFxyXG4gICAgICAuLi5lZGdlc1BpcGVsaW5lLnByb2dyZXNzaXZlUGFzc2VzLFxyXG4gICAgICBvdXRwdXRQYXNzLFxyXG4gICAgICBzdGVuY2lsUGFzcyxcclxuICAgICAgZ2VvbWV0cnlQYXNzLFxyXG4gICAgICBzdGVuY2lsTWFza1Bhc3MsXHJcbiAgICAgIG92ZXJsYXlQYXNzXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5wYXNzdGhyb3VnaFN0YWdlLnB1c2goXHJcbiAgICAgIG91dHB1dFBhc3MsXHJcbiAgICAgIHN0ZW5jaWxQYXNzLFxyXG4gICAgICBnZW9tZXRyeVBhc3MsXHJcbiAgICAgIHN0ZW5jaWxNYXNrUGFzcyxcclxuICAgICAgb3ZlcmxheVBhc3NcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnBhc3NMaXN0ID0gdGhpcy5keW5hbWljU3RhZ2VcclxuICB9XHJcbn1cclxuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUJBQUFBQVFBQ0FJQUFBRHdmN3pVQUFBQUFYTlNSMElBcnM0YzZRQUFBSVJsV0VsbVRVMEFLZ0FBQUFnQUJRRVNBQU1BQUFBQkFBRUFBQUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBSUFBSWRwQUFRQUFBQUJBQUFBV2dBQUFBQUFEOHhsQUFBNDNnQVB6R1VBQURqZUFBT2dBUUFEQUFBQUFRQUJBQUNnQWdBRUFBQUFBUUFBQkFDZ0F3QUVBQUFBQVFBQUJBQUFBQUFBUXZTbnl3QUFBQWx3U0ZsekFBQUs4QUFBQ3ZBQlFxdzBtQUFBQVZscFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWxoTlVDQkRiM0psSURZdU1DNHdJajRLSUNBZ1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZkR2xtWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTBhV1ptTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFBjbWxsYm5SaGRHbHZiajR4UEM5MGFXWm1Pazl5YVdWdWRHRjBhVzl1UGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ1BDOXlaR1k2VWtSR1BnbzhMM2c2ZUcxd2JXVjBZVDRLR1Y3aEJ3QUFRQUJKUkVGVWVBSHN2WXVhM1VpU3BFY3llYXVxN2w3dDdIN2FSOVZiNkJIMGdKSSthV2EzNjhJa21hbmYzQ0ljam9nQURrNlNyRzd0RElxRjQyRnVidTRJM0FLWGMvTDEvL2EvL3grdmpxZm41K2ZCZVlTOGZ2MTZZTklrK1BuVjg5TktwUEpURXduWUtaVDRyR3hrSnN5SXlpZ0ZYTEYzSWNUdSs2QXFKTE9CS2wzc2daUElqS2NMSTZla3BaRXVHNG1mR0FPVFpwSlRiVVplbGY0L29mWEFXTU9kMThIZVhtWEV0NlJWc05xYlZyZnNYWElBMy9UdGNDRFVacld0T2lNOTIvaVp6RFRNeU8xNXdPL1ZmM3A2R2xORyswRDI2YzJiMTdOclJvb20yMmp1WVl0MUFiT0ViK3UzZ0syZzJOS2xocXR0K0s5ZlBiMFdiSElMaWIzdjRlR0JKa3Nuc25ZUlRYVGFVOSs3d0QzWisvWHJWM2NweWh3VHBLanA2NXMzQkt1TDNHWWVTdHVzUlhremVIN3o2dlc3VjYvZWhGdDFZUVRobWFveENLZWtwNmV2dUdpK2VmUG02ZXNYYS9jUThSSDdLdHhKbitnLzRvaWwxRmorNERibFpyTzh0ckpPMG9DOGZuQXhMa01VcVZQaW16Y2ZZbkpURGsxZXVTSjRTdSs4NENKRVBZMGFIOGsvQXFOSHFyUFpTMzJXbWpxVjV2TDA5Zk9YdDIvZlF2Y0twWjdIeDhmZmZ2dXRDdFJjMjlFL0dQQ1pNT0hZTnJrM1dWKzRSTFhYWkRlRjlxbEZxZjlaTHlpeUhCd3FwUHcxdHNxSGg3ZVcwWmF4YlZSbFl3MnBXVCtSOEZOK3JPWFhXc3QyeGZ6MWMreldlM0pzUEIzcW40REVibXM4ZElRd2FUZWczdGhXSTkwMmkvV3lOVk9OcGNuMXRZRWJzUlZaZ0RXU2ZYSlI1RWh3Q00rbVYyaU53azV2NG9tNG5tek9oQk9rS24rN1FpYXFzZ1paaS9GUG0yNmxEZloxNzh5TXcyM1RXM2ludkZjNHlNMjBJL0I4V1pZNkRsbTZFanhZdjV6ZjkvdEdML1dBUDFTM05UUFJCb1YxaEs5cDJyZmlzREc0ZTFVVFRKbmIvb2czMDZVeGhIaTVEQjV4YXNnSmh4TVFSd2tFTVRnOWNVRCs5ZGRmZFdqK3gwNTFDZStxWkE2Y0VRU1g0SG1pazVEQk5UU1AwczIwTEdCMkdabHhpOWNWdk9TazhtRGNSYTZ4YytDTXVMWWFkV1RQc1FNeU5BZWRFMjkxVmZ1NlFtV2VLRlRhWU05UlY1QkI1R0xUeXQraVA4ZVNlZ1pucEZlNFA2dDU2QjgrdGxLaWNnNzI1WXNHMEV3ZTMrTmlVbFBqNG5ZTUJXREFIdjh4MHhDS0tYUzRMTlZ4azVDbnIxK0pxU1ZWdTJsS084UmY2M0toVElEUU5SWjdZQ0FiMXdBTSt4OGVjc3ozL09IRGU3d2lhZnJxT1UyZlNVTllOVks0L3U4WEFPWXp6NGxBQ0o0ODFuejNqa3NSRFRjZGk5MkxsTlRidCs4WWcxSU1OaUwyeGxMTHU1aGMwTjRCVm0rZ1dOK1UxS1JwV3dZMWNBRzVGM0dMaXlFYlNhYjUrdlZEckoxRlNYVjVpNTYwcXdKZHdibUhydmo4K1hQU1hLZHBxVk9MaHdrZnhEMkowVzNHQTB4YlBSYkIrL2o0S1ZnS1lYcDRpT0crV2cvMEt0ZWhjZFdYWGpZQTYramF6bDBiM1lKeWVKUmxPMXRIcTgzSVNDSTNlakZnQW5NZVhqbEJtQ2ZmVVo2YjNCRm9UVE1SeFE1WTkvRzVEMThuR2ppT25zRWxrcWxtNzV3OXlVY3BrbERWcW4wVUNBZFhkdUFMUWpMMWRXUE9RdXdTUE5JOEoxZHZ0YTBHZ3BHTGZKUmlpUy9WQnFsdjBWOG1yV0FXa0VaNmYwVGVPVXVtK3ljMzNCdC9mcEgvNEF1QUZ5LzJIRGdqOU9ZU2RDOGZ1WTd3RTdVcklUUG5DcEliUkpLdkdCbVZSa2JkUklaVHpKVkFOSy9RWHNZNUtUaGR0WUFoeTNtekJxYmFFSko0R2t2Q0FBNU54eTdCbEwzTFdFcFZzTnBWMlVmLzJYdUFjUEtKMDArVHlJRXliWTk2MnZhU0E1Wk54K2V0bnB1UmwySWtKMEZvRFBXWVVZOXZZamxRUTk0STVQNEVpRUQranljQUVZV2ZDNERGR1ZFNjA4UWxRNmkxc2JqVURLSHlCWDNkeSsrRHQxZXU1OWUvZitMV3NNYU03UTZ4aDNmS0dBWDBhbnhIOTBsUG5IUVpzSjlnQ280RndVQ0t1K0FNZkRIYTZMS2MwU0hBNXdJSlFrWTVGeXdaaGR6cWlDY0d1SVlKdHFvSmttVTNRaFJEcytLdDZ6ZlNabEcwRzE3QmJWa0M4dnJhcUFhekgzY09aTnI0bUx6cTAraUs5Ky9mLy9UVFQwbTB1SnM4SWFGSmJ6Q3hEWGdPUW9nclp6WEZtbkpQYUlsWlhYWlpoeFNrK3ZqeEE0SWdNVDBoSm9QblFlL2VHNkxCWnFYZ21MQ1F5dTVWTWU1SXJoS2pza2hSL0wwL0k0c1lFRnJYcTlXWTVISnRIZGcyRExGaWFvVGVwQzZ1ZnJWeGl0dTYzMDdsTk5ESjlWUExGMU9QMHVKSEpiMkc2SkNCUTlPQkdiVkVIT1g1bk9oS2lQWG4yRVNXSXVtZHk4dGlxbXNwWXJEU0xBdVNodFV1aGlkNU1GQ3JXYXAzVGpSNE0vQ0VlYUtQMnRJN2cwdjlnWGFGVSt1L1lsL1JIRGhEVlY1RzV0bFhpV1FCYzBpNnJoZ3VZTW1jazA1UEk1WngzdzM4eGtWYjF2SGRMZ0NXSGFjRDBzRUJhK2JQeUxMaUpXMEdUNUM3WEZuREVEVTBUUnZBb1psU0dPbEtJNzEzSVVsT1k2aGt3R3ZxekxnRTU4Q0x0UFBBMld2a0NLOUZYaXpBSVlQZzBGeEtIWUVXUEpmTm84TTNKcHJEYS9hNXdway9JMVZoOEE3TjFUSnlsTk1kMHpqWTdRWWdHaGt4aHVxVHJiaXh1dTMwcVUvLytNNDU5MndEWk1hdGY0Sms2UDgrQ1lobWZPZ0NvR2ZndUkvSnFFMW5XYnpNbWV5TllaL3NSRVFJY1RCc1JiWjBTdXJtRTVjVFBRUXZhZjBFSUxpdEpKZUhQc3lZeUV1V3VKN1JEWEVlVldnSTZmRzk1MW1EQTJpNlBENFkxWHA1a21PRHUvOTZFc0Y0T2E2TG5NN0wwOUwyRC9NenZNUHRrOEd2cllFUXk3NTF6aGJWK1J1eXR4eTRZV1YxYkNDZEVCMVNFV3hLNFJxcmwwUkZURnBLbm9WZ1FSakVZOFhvY3VxQjV5RnYzOVdhYmJPTitLcUFDd01RSnEySzZONisrZWd4TnhNME9mcGtrTmJqcHord2RhMFZaZW1DOHV1WEo2NUQzN1JYdHZvaXRJc0J5TzI2d0t1dGJ5MmtNeE5ORzlFeHltZWlhbXZMcUFYTkoxcGR2MzNDMFVWdnlCTFNESFVic2diYTNpUTFhWXVUektiU2thcGpsNnM3NTV2WmtrV2pWNjVjODJRditNMlFaQ1k1a2FHazJweGxNeHdqRmJBOXdiOEMxaFJENEt5d0pCTlZFODBjQ0FNWXpiWmEwK3ZzUzdWMEVWaHpWYndHRHJRaHU2TUd6aEU0eDE1QnNyQnF6SUhwbll1WnlVYXlUb3loSzJhUjFNYzQ5MWJtWGZheXpyYnpUMEoxRVlwenZVTVZ3bWdPeXpMWE1BUWM1QjA3TUtPKzJ3VkFLcjdNT0twN1VKdHBWeEJFa3BhR2xiT1pSbVkwc2gyRzAxSFVSdVd5T2N5Q1E4YWlKL01pUDJtemtZTHBTaVNOMlRVankySm1XaURqQm4xQXkveWJNVE0zMzZvM2x2d1pISkNobVNsbWZFYVNmR1RVa0dyREg1cFdXSUpINGt2OFJPSEVOVXZONUNORU56WGovTVVzeGljYTltOFRqWElOQUNXOGZhdmdITlpON3VWcWxNV0J2STJLcElmNTZkUHY4UzBoOG12QUhjTmYyYUwxbEtTanFhR1lyUGJxamtHcmJWNHhOTFh4V1lnR0lFME16ekVZQXBLTVN4dGRZVVNSaUNpbm56d0kxQWpQeXN4cGg4MDc1Qm8rTWxHUDhIWnBKQ2FUUTV6SVRXdzFYWkl2SmtMV1dlSFk4T2dmRmY1aE4zRWx6UXNQNlZSTnRhZUp3RmlhemRHcTJvQm1nZTlXNVo3Z3FoTExwcnNsOFRTV1VvQjBsUHFTTG81c3FpMFdzSzJnWGtMVGovNExpaXh2TFM3VGZBYnBiNStmMzlHSThiZXVPdUloREdRdUNmaDJBZk1XM2kvWXRFWFIvOEdQN0pUU1ZqaWxrQ0syNzJlOVdxYmVKYTlTV3lRRDNRdzQ5b2FvelUyTDliN1U5dVFseFJzTHBZdFFhZlk5QVREWHFSeCtsQ1N0TFhVb1I1U3l0WG9VcUEwSlJCTVpXNmU1ZlFTS0hudFRxNmV4ZThFdVVtQWlDbkFQRlRESzNpcHBLbnZDSUdLZEtqc3JaeUlMWmpPakVrbnhSSktUc2hVeE9DQkg0SFVGWjYreU03TE1jcEZHYkU2RTFFU0pZMVRYckh3RkdVUlN2Q29iUEZMTGtHcFFzUG1BbGxvS3pzczEwNnJzN0FXQmtEb0RZZkJXS2RzbXpIZ0t6cTRNckp3WDZ4enB6L2k4TEVkSmlhMjF6Vkl6OG1kY0FMVER4cHc4a0xaNEI5NkU1MldlRWNnek9DTW5tck5yQ0Q5cUpwNUdTdFdxWnU4VkpLV1NQQnN6SnhFYkdWTHhHYnlDb1BBZGFZUFVYYzE1V1hKakczU1N1Y1JuY0VaU3djWVJZY0NINW5rczNpVi9TRjFFT0FpMkFVRnlySEIwSUtqNjFSN0NzOGtoQlh0bUd2RzhqMjFFMUExK1JqVnRzQkl5Y2FSbXBFV0RjWnVHK1gxaU5QbjQrRWVNOUlQWjZMcHM4Rkk1eXFOaEJGZ28zU01QSXdPOHBMVWViRGZSNFpaeGJCTFNNK2pBeHkrUDZqb056L1Q4QVpBczNCcm1kckFJcjU5cDhONE9iNTR3Wi9JNzY5UUFyakpjdytzM01ieTBaSnVqMWRMSCtUdkljVktNVStPNzkvcU9BWk1rK2h5REVKVGxDTkJacUNzSGkrbXlVWmZGQ0hPbGp0NjBlR1BHUjBVYVB3cUlQbWhBL2JBemtVeFhWMng2VHd5dlFZWDNXK1plMHJlc3grajJNVFo2cVc4Z2ZNTFMvMXhJOUI1VG4yZ3I0SU1xZFFFZ2piZ3dZM1cweXphK1pzQkRBQ1pXbk44andrYm43ZnUzYkJKZnZuekdEaDJ0VGZwTml0cHVXNGNMMUViQmV0RmMwNzVIdUVqcmNLUnZHNng2UHlOTW1OckFHNFdhdE5JUVorWnJnQzJsaTVHaUNCR1hWVVQ5VGkyUENZQnF4QlFJVFhFU2J6b0Z3WHNRSzVVTXJIYUt6R0R5azJNa214S05hY0NYVFlnMWNNazVJUkEraEdUcUdtWHd5SFdrQUwrS3pEUWpzUUZwcFpqY3dONEVId0pwTG1VSDJoYUlGZE1RQ0hZWWt0dlFpdVBBV3NPUnZ2Rmg3cVFKdWlybU5pcU9QV1NwSE95QkVJaDJranBkQ0tuMHpSNVNiNDRMVmsxNmdYNko0dVU5b2Y2SXBLVDdzUmNBckt3NHZrM0wxUTlUODJMdjErOFUySUU1RU04TXprZ1hXSkJ2dW83VWp2QmEwc3k1Z3N3bDFTamJuck5CVjFjRzJwaGRSOGpRL3pPdExsUm1tV25mQ3psSmthNWEwbEZlNy9CSDNxVlVCYXM5aTlRQ2tqblRaaVRKOXhwTHFRcFdleSt1TlR4N1o4UTB4aDRSM3JhTG9HbnY5VWdyWE1qMVQrNnArd2EwUjIzcy9CcTh5YTBQd0JpVFBlbnQ3bmduVzI4QjhVNS9DL2M2MHFnT0pLSTBPdFBFcWFKcDZEMGk5TUxib0loRzNDbzJlaFBVdjB0azV6Yi84dlV6dy9vWVZqNTRXUmdDMHZ5di8vVi9JWllwaDVLdWdGL29JZGllTkxpYUlVRU16OHhxYzhxRzZXVHBvSW5OMTRwN2o4Wmk5eE9hbmdDRVRSa3dQYjU4L3ZvOHZaclN6NXBkMzFsYUx0YUxyc0Y2aDNZZnlyV2VEcXNqMWRQWkxvYUxTUUJKS3dndkYzeEpXQnViOVBPYmVMa2ZFUW53M290RzZsdWRXVjdjaVpkWXJBMitGZDJtL05Jd1RGWU9CSzFhMU9JT3YwbGNyYmtNbWd6Nm1iTkM2VSt2TzVvRWZYcjhBeGNUc2JnQWtmdjZGVUYzQmtWSjNCdGNxUFVpRmI1TmZ0UkYyNHNZNHRnOGszanJXR1NEcmExRHhmYXVpSXlSd21MQzhXclk1dzNKc0s3azVHaS9oVVc0VTVRK1V3ODBVREZiZVFiYmxjaHFRQ2wyV1J3WGQ0NG9RNTltUHA0bDJDUGtiVlZGUjJRdVIxVWFkbnBUdG9KRG9sUStGNm1hS1FzNHFGVlhDaG9jRktvMzdibVk2c0krRXFtQnk1SWNXR21wbk1iU080TW4rbFZxcm5hV1N2NFY0d1Y1NTR4TGtacDlEcW5lbTdiMVo5cXc0bG9aWmFlYlE3NDc4bzJMdHF6bngxNEFrSEk3TEUzNXRUd1RlQVZZcnFRWm5KRVVmNWtydzIyY2lBek1LODE3MVFiKzBDUmpJTzMwc2lxZ241RTIzNGpNbWwxMmkxa2lPL2RCWXhhZmtRdzljWjBYVUFPcm5jcjNHclBJak94TGFyMjZwTTNaajJqMUFMVGtMTUZaUDJvcjQ0OWd6TEVkOFE3cU9WamRRcnF0TVhCT2pGZ1k0SXJKeEkvb01OZUcrUHo4KysrL1IybzFQV2hpaVJpZE1SQ01FYjBWUWluMGNFRmdQTVdjcWJzWjd1bXRmYVpRRlI4amdBYW1IUVpEcEpZdlJVeDQ5KzR0NDhLUEh6OHlScVFHSmwwQXZIMzMrUXUvVHJNZGxpUWUrczRTdFdnVzFiM2lLd0FrTU4vNk9VZk5GVElQUGdBWEwxd2Z0VmVtektRWUc2YXBOaThPUkkxemZZUlVQY2x2Uzl2N1JDRTV4YVVUclNTbkI5MGxUZ2UzTVd5aERpYVZDSW1CYkpzUGpIVkdkUTNiZ0Rvb0ppMlJYcmZYUkdkWGpaWWltTmhNTUdOT2FtV0g3OEJ3YWhaTnZpMnJiNUtZREMxQ0ZNZ1RBTnZwd2t2STMvNzJOMjcvYy8xSncrdm8wNmRQUENUNDQ0OC9YQ2JKb1BHL3k0UGwvb2t1Q0ZjNGRDRVhrOGg5NG5MdDdYdVdTd2c0QllUSGMyRnFCdGlqb01qYnlkaFcwL1ZXdHhYVUNlNk1GaEppc3BsVVo1OVNNNERGR0JjY1RxK2hoWjBqZTAyRnpNaFN0cW52UCtaYzFiLzBMc0VhZFc1L1M3Vkh5c3VTbG1BcW5IdVRkbUtjSzV4N3oyWHgzclZKbktqaHVsZ0p0R1hlRkwrb2svd2ZaQnpWdWUzOFB5anhYdlptYjdqT2ZaQmF3NXBOd3VFRlFCV3Fka2Ftc1IyYkV0b2JNOEhJVUpPekxITU40Q3hJd2dyQ3IrSTF2TnBFWlRPTnJOMUlybUEzajJoSGVFMHhLQThodGY1azF2QmxBU21TUnNZRzR0TkRPMG5NbktydlFJM09HbjNySEZ6dXoxUTRNYXlUaXdNenlSVTA3V2llSVVxOVg3a09xUVFLblhWMmhGalJBMExJQ2VMbFRkbGtwakc3RWluSzJnNDFrTnRQczBqM08yMXVkRnVGTmFUWUxQalp5dTJ5YXgxN3JlYjVzTlRSOXptUTFiaktveDNtRE13WmRvRXc5U3dlcmZLQ2hYNjg1Y3ZuR0daMUwyUm92bmZjc3lpV3IyRHlDNDI0SUlBemJtTXVSNThZcGtVWmV1YWczOUFzNDYyZVY1L1FHYzhSSzVyZTU5YmI1dzl2SHo1L2Z1UXVNTEtlekhFS2h4TklVNlB6L0szU1NBSG95VFRYMExIaTBzQnJXMTg0ekJlalIvcFQzY1RsQWdQWlBlNldDOERPTUFUZXZtV0pkdnFyMEEwakJlTE1jNVdrTDdveFc4MHdPVE5XTjkyeU5Rc2p6T1VTYlBTMGtLZ0RmV0w1QW9XOU8vMnkxTUtqNzVKcHZ0ZHBXN1N0Yzl1Qm5nY21GbVJ1VzlYVGQvRmkwSmFSditmQUsyRnhNWkVGOE55QTZhOS8vU3MwUUJKNTYrV1pBL2E3dCs4WjYrY1c1VzZFNXRVcmtkaDQzT1JhaEtpNEpsUk9sUmtUTnRzaUFCc25FMDFXdDljNEJ3Y3RsTW9WUHd4M3J5S0ZBdXRIZ1ZyR0NHKzJRMHdENzN6cDRGSnRmWTdCWkR4cHFaa3Vod1IzUFRNaEZTQWRoVlJ4YXczSUlMVnNFampuTW1MK1Vua0oxcWlxbVdRYk9SL3FBYTlJS3RReU1uWm5hQzFvUlF3aFZjMzhBVW5sV3ZsT3VUVmkwNW4wTTEwYVEreWd2NnhoQ0trYzI3TjR5bWJzZ0dTenhocXNTSVl2d1JRNXA2VjNObVlGYzVicE12eWt6dVJZNFVCLzIzUE5QNkJ0VzB2S0RzWlJKVGZySjlDeENHSWNYZ0FNK1U2YUtiZmtMTDB6T0NPcE5ydG1KTWtZSjk3Qk5UUlBSRTZZTldxMjU4QVpjZFFSZnVJOUNTbXVkb0NZYXp0SGlzSklQSEVsMVp5Qk9UU1RQQmlWNW5OZ1JVN0lkaTNKTTNnRk9SRThjVlhsZTBiL1NMS3l2TVNTcnpwT3R3U1h0T1F2UTZyWHRvY2p0cXRndkpLUk54RTVNTVVnWHJmRkdlM281cXZ1dnJZckFVWTJ6L3pLQ3BoaHZKbUlBeE9qZi81ajhYemxFSzVuUnY4UERITlIxWjFpNmNkeVB6RW1rNHFlSVVnK2ttaW85STVYY2VKMWxKNVVMQ2FHYUx6U3d5ai9MZis5NXpmMUgrSU5IMGJQdjJnQUZkY0dLaUVtQlBOQUdTTnM1MVg2TnZ6c0oxU1ZIZmRXOXdOWmw5cHUvM3NoVTdBdGNpeEpzL1BqN0c2N05GY1QrSkZyUWQ5NmZIUXVSQ0NEcmtPVzlXdU5ydWxqdG13ZkpEaFNHYnV4Ni9DR2xFMVdZTWY0NUJVZ0x2WUNNUjV6NWV5ME5IcThvbUk1V3BUSnZKWG1oMDFzTnJ3YTl1ckQrOWpBbENFdVp1TnFObVRaMG5CQnlucmlEYUpvOFowUWplR3RoSEQrZS9YNWtaK1gxZlR1YmJ1aTAvVXNHejBQTml5a09TV3BIT2JhdjJLOWE3L1F6MTdwR2dEWEcycUw1ZlZ5YlVzWDI3WjdEM0RveG9vN3BDSkszRVBTY0ZGSnRtRndudGQwTmFUaU5Vc3FKTmtJelh0RFV1cTZNV2U1SG50VVoxVlk2aS9CR25YZFhrb3RRVFNQOEpOMEx3ZzVVYnZ1V3VaZGd0YzFmd1N6bGxSdDV3TDVFVWt2YWw3TW5yUnZ2UUJJb1crcDcwUmtkczNJc3QrVE5odExmcTAvUXlxSVBlTXpjbE44U1RqWFdYcVg0Rkw4Q0x4TElja25oaE1OOCtTZmw4RnhmMkF1K1FObmFCSXlJRU56cVhrdmVNUmY1akw1S0tSNnF6MUxIU0FhRXl3RGovcXprbWViTEdPaUdIWm9JQk1ERlViaWp2THdoWkVRTjB3WkVyVXgvZk5Udkt2ZHp1THRYQjd2dklqUTg1SENneDZOSnR0REFmMkpYSnRSd2pPLzZJSzQ4bkxUUEw2UHk1ekdiMzk4RWhRVGlBMkVzUm4wY3dFZ1dsUWJYcWZjUmhWUmttWmVUTXVFbnFSVUZyNTRJaEZNV240RFJEWDA4dk16ZWlTK2lXcklJZW1lRFhxQUROa1BsYkFFZ3hCOVVLbEdJL2tFUjRJRnVrNHE0bkhpbGN4OW1CZjJxTktGVmx4ZUVEVlB0Zi9MSnVycmtWaUdPTzhxbzAvQS9UUzhJU0VhZDlPMVhaa1c4N2dlaUY4RWd0S3I5Wk1FL2Nhckx5Yk5aNXRrWW9QbmoyaFNFcE0ybXhpMnl1YUxEb29Yd2dnK3ZpRkNJbld5TGhpKzh0Y252c1NQRGJYdFZwZVdYRVI3dTFmcTlycVJBa0lpVmllV2tyaFArUEt6TGRDNWx3eG1TU2E0R1l1MlBzWU9ybFFtMEFvZ0NSckp1VG4ySmorOU01NDZsWndnZ2RqVlpZVDVERlprVHJTVUF2U1VXV3JxN3RTbnhaTldYYmFYR1pOMkVwZ2NqSmsyeTg3SU1yREtEcllWQUZtb1dXMUdxbjdHRHBvMys2ZUsyR2IrTGF0c0tPQ2tTYzAxMFFuenhhNmFZdG1CUjhwQlh1eTU4R3ZORnpWckdVY1p6L0dYWHdDNHhIUDF3YnNNV1lJRUx2RWxXTWszQ1M3cGlGYWxOdWEwdmdobmJhVklOZm94VTlHSlcrcGxTSXFrc2RUNWxoUTdRYzRyKytWMVhtK2RXY05zdUlERTNUOXVKcGhGcHBHdU5IYkZzRmQwYWlVTUhGTXFvZHF6dHlMRGN0bkZmRkRJWmhwVkpLTW1rSzdjOStha1BNUU96U0hkcE4vb002MGkxYTc2RmNmT3laem9HUlZmUmdFYS9IaXMzeThBR0F2cGhxajZTeFB2SVNqYWN6VjdlTnpSREdHOStvKzJib1l6ZU9hWCtMMEtQSTlZamJZWmRTSGJjdkhCb3dCK3VJVTdvQnBtNmN1ZG5oaFhlUkJHMDRhS2lFbWZNWTRLWmUyd1RIQk15NGNBUXZPV3JSNUZ0TC84SkZnVEg3a1FBYlJaOC9ZL1dDeVV6dXBSbGJuWnhPZ0p3d1pjc2U2Z2EyMnBpQ3V5d1lsOWZVay9XQkFPZXUwSzhFcU9xR1UxVUkweUZ3cXNpWVBxdFdoOVNsdVZheEF0d04zSzJtLzlXOUo2QVhHRkFDUG9kaTBYQ0NoYnIxN1JvUm1UWG16ejlvd3ExNFJzalB6TER2SFc5YmUvL1NmVXNQa0tBZDl2NFhyMTY5ZEhGNkZMd3Y3OVkwZExSMWNEcnBOUnZyNUJJSkxVMjRCZUxTclJnc1JpcVZZTVFtTGVpdWZYVG1VcE5xYmtXMXhCMzJsQy9rZ1RITytjSi9rWmExcmloR1JnZ29tazRGSi9CcTFRdzArUUUxZm1YUnBEb0p1NUlObDA3S0tZSWpwSTJYTUVWaW1ZTTYwalc0S09hTlhZdGkrbEVzUkkwSndhZTRRWUgrWkQ0S0I4N2tWcUlGeEVoaG9jVlpkb2xwMURsb2dEbHk3QU1RVkg4MDRsc0hvN2ZNZm5YUE41TVphZW80NVNEaFU2OElVWEFITmxNNUoxdUkrVVBxRXdIRkpCanBHbXpHcEhDSjJlcmpReXoxM0lrcHpscGRmRzBDU2prSDVuTVF0b2VHdzY2NUJLN2Z1RHNabWZhalZvU1NzS3JVc0xVcU5scDhMb0tLN2t6RVpHcGF0cVZqQ1psV0J3U1p2QkdSbkNLNkhhbVhvQWgyWVc1cDE1OWw3WHNWU2VLRStrVWpPTm1YeUFzSEszOVR0elV0REdURWpFUmpiaFkydmpEMGl6ZUYrZkYveGpBS1Qzb2pVV3hLR3BEUXBqWjRtMlJqc3FUT081NkVvRy9UVGRxOHlaY0pIZzRjMTdyZ0hFam9tbGdZZVg5eTdnTTNFcElIWjhuWlFpL3ZLM3YzbUFKYkJNdmc1QncxSE5FOFA5M2tFdVFJTS9rci9WS3lWaVJkT3Y1Z0MvNWhVT08xSUhHdjlZYWpGanZPOG9tbGFPVWJUcE4rZEtGNEkzbVkxUVRqRkRpS1VHVU0xK3MzamhHcUJlL3dDN2VhUi9oQzlGNHBoWU50R05sRHZHQnFtaktlbDZna1huZE5rcTRxM0NTTnRDNG5GVWNFbW9Dd0MyWkkzQStRcUJWM0ZVeFlwbXZjZGIrdHJTd1dqcWV2ZnA2ZkgzMzMwSnl1KzY4dVlaVERmL3IvLzcvL1RHcEoxRDVLLytpMlhlWnZ5U0dvdkk1czJqTS8xQzFRTWJwRW96Z2JuU3RPOE1oSlc5eDVXTHppOStrc1paTHpaZkxZUEM2NWFQTFoyMkw4aXd1T1dXODRGVHdoczlGZEt3bzJkUksxMnBsdDdxYW9xZFAzTWdHTXdvaDZSc0twZzUwOEFybUlGcFZJVXI5aHdJTW1TaGVVRGI5Zjg5Z2J1bE9OYmYwYXhmYTB0a0Jtc3ZMZlVCcjB4MXdlY0ZyQVhNWHZScnVOUE50RUMwb3k3cllVRU9RcGIwUTNEb2tJRTMxMWtKMWV0aXFqZnMzWll3ZVFWVWtTVmhDYjRzQ2luZDlsZ3FIb0V6ZjBaMnNiaW5ERE5raEtOWlhnT2t5RXpHbFdBYUF6ODNpQ3ZreXJIT0lKdk5ORExka244aW1BcHBMQlhTT3hzMTlaRTM4U1g1SmdqaFhHSDJEb2liZGU2azNzRUdjcTNuWnVxWGtlZU1Sb1lkUG1scERQVlVmSEJsWVpWVGJSTm1KQU1IWThtOERxWmFEYmxpRXdpTmlaR0ZmdFdIUVFjVGQvbzErbWVrL1VVREpkM2Qxdzh4UXZaQVNqMnBvM0NtWldBQ3BwLzZZYzVRM0xMTnJZRk1HK3h6Y3g5NTVaS3FEcEdFWUJMQ0RYNitETUNMUFl5dU5EempmMlZwT1dDR211SmNBeHFBVE1RU3d1M2hIQ09DeGFoQVhodk10MXF4cGQrV2dBUkI4OWttK08zYnEwb2ZVZEpoY2VtVVVhZUlyc3lhZE9VdldPL0xaY2dTM0MxU1VWcWJTUFFVSTZHdXgrSVRmWjI0a0lycERGY2oxTzBISmRIWFJUYXIxcXBmVnBSOEVmYXhFbW92MG12VDVva1NIOG9yS1diYUZMZUphNzcydmVVZ2FQM3JmZnlmZitHN0pTSnFmOUJvWG45eDRQV1h6Ly9sUC85bkZOUVV3RGZoY2JMWFBQTzlBdDZPZTN6OHhMZmp0ZDNFWHpiZ0c4YTBWVjlJNmFPWHlxVkgzOUpjaXp6S0o0THF4RlN0dmh5SVYrREMyWVpCdlU5MmkyS2g4N2tMaUs1b3hDekpiVndWcWMwYVpYSXkwNVVJQklPSkRNMlpzRVFNcGdoTlQ2ak5JSzQ1UzQvWWZjNDBJMG15ZUlLWmF3NWNKcDFwTStMQVZIYnFJeHJlSlhQR3JaTnF5NmdCckNFWmlGRnBMaXlaTktzMzhRd2Z2TmVYYTVBYW11ZDVCL0lMbWtPZFE3ckIrd0o5UWdiTnBjaWN5TWlTbkNDY25Kem9oVThBcW1MYVZ3elN6N1FsYU5yU2RRVk16bXhrQWVsSzVDUXBycGsvSXkrVE90SXhmdTRkTWk3clhJSkhzamZKdFNwMjR4T2RXV29tVjZUYXhNN2hpZmp3Y1pNL0UxSkI2dnRwSnM5SVJpeGRTL0E4SkwzVm1IVm1CSDZBdXgwcWFUZjdKNW5PcXlGNEgzemdZdmdDb2dUY2lZOEJPb01OQmphYXh6aEo0M2tHSDIyUUVqWGdpTUdXeC9yMk1QWkhQNVU5ZEE5aWpHQjBYMStQRkNBd1hpY1FGNEhZZi8zTFg2UVdzUTdYblZqR096cXZTRkJnR3R6SmlKOTlUTDY4VEcvZVBQTFNkVnlCb09RWE9leEtiZEZpWk9WWlhsMlVia1VxMGdXejQ3N1VxYTVRaWhsc0Y3OUIzWXBGNm8wcm56M2Z3RDNTSDJqWmJCMlM3UmNidnI5OU1UdzNrSXQ4MDlhTEhDdDBJQWpybDRNOVJWdS92Vm5Gb1BlTnN4M010UTNGRmlVaC90Zm1yWFhuS1Z4NjRDUnZIN1ZibURkL2JJQzNxODFRK1BUSHJ6enJFc0x2ek9ydkVvVHFzMzRkaUY4YWZYelVlMnhzOEV3aHE2KzV4MlZxakpaOEVScnBlQ3ptcEgydWJUMDJIcTVwdDJXaVRwZGh3M09YR29HNjZzNm1tUmNSMDVobmlnd2ZqQ1NRYU9tcStFek9taDFMcy9JQkI0S1JtNXdselNtcUsrdEpsdzNyejhVa2JhNHFYUmduZ2VlMFdYWkdydXM3VjFXbzl1ek4ycUJsRHlSWWpmUU9LNkp5VWdUdzNyeFY1MTY3NXIwMzlpSy9wamhhdEtWVWtMZjlOemxETjg2YXlheEdMYVBpMSsxdnVnQndsZWZKV05icHNIQVlNWFRNVW44SnB1SzVOMmtZZHpBNTRJNUh0cW9VVW52Q2RmR1RTbVlSa054UVp1K3VwbjFqSmk4Ukw4VHNxbUtEZDJqV3habGRvVE9zWkVYVXFPQm81dkI5dis3VzJrMzlKV0VKWnJyTWZvN01Ja2RJYnZ3em9lYXE5c3c4UmVpaDFxV1ZWbTJMR3hsd0J2VE55NTFzMVNvcFJpZjZ0aUxYQUl5ZTlkSS9RYnJwanhjR0xQNXgzNVMzSlRyZTFnc01qYWhpbU5VMlZOMms5S2k5aWN2TjFENzBpZHA3alpZK2NLY2ZEMjljdjMxNHkwM1UyQVNVQVNsR1dURi80RlBSS3JYTk1aajhLSUtCRjVQcFJBSSt2SDJ2ZlNiNGpMUW9SYlUrZVNEb1FmeGVMVjRCc21hZmI3blVCMUZXbS9PREw3b1NFdHBTeUg4NHFRZmp2NWtST2pOOGVDRXhVNDNFS2poeWpuZ3N6UWcySFMvcTZOVGwyVFRrSGtuZjJsWi9qMU1kOVZLQ05nc21vWTE5c2Y4OW1pZlVmQVdIRkZzN3RnZnpnVW1mUE93S1RrQkdvSmIzMWF2M0h6NEtLYjBVMi9uVHUzZnZZd3RWTkVoTWVzTXR2cDcrd0dNRExtNjVHUGo3My8vT0pjUnZ2MzdoVDArd09WS01Ld21EUEsrZnZ1cnZVWGhpS1cyQVBIL2hNaUJhOGVVQjd4VWtJNUZTZWp2SGltNUJtU3NSaW03NGJFQTBHQXNTZTdhQzJ3UW9TTmNsK3NmTWZkSDlmUGFGRFNqMW5UNXBCVTlzcXlxZ0tsenQ1SStnQzk2V040aHpvbzZNNFVPRm1hWWJHNzhyZE0vK3MzczNmdmNIRXIzV0VUYURzb0lhdWdSN3hIMmZWUXFiNEpwdVJ1NVRQMkRYcERQbDNEdnpsOGdMUkY0UTR0UUVMbXVvUFZrSnNHUDNxTmk1dmRaMzNpSExsYVc0d2prcGFMc0FjTzVjL2pScThBQVNra2dhbFcrYkpaNjlNd0o1QUt0K3lpNUFiK3NSbnZ0aFNobWgyVjFhQWRrY2FEM0x0cEtTWUNPYlpnNU5LM2VSdGppVk00dFU3eEJZVTJ5MC9zd1g5VXBZeHJLZzdXemR5VW5MYnFraVdsTzhneEdRdDRma2J3VUVWSnRWeWpoendxdE81N3RtelRzU1p5bzEyMGcwTTdZRjdJZjQ1SnZnRTE3VjJRS0xlQVZ0NjNSV2V3TTdpbksxTzhGS2EwSTYrV0tPSW9Ic1lsZUlOWGJabSt6MlVXc3hNd3RMVXNORlpRZnNJM2pRM2FKcEZRU2x4WGs1ZWIxR2J6SEhEWDZXZ244eEpPTG5PRFhXK2ZxRnR4Yjgwc0pYZFJNdktyeCthQmNBOFFWY3Y1d0R6aUFHZlkyMlBlQ09iZ0ZuSU1XWUF4eWI5UkNNMTRBUDcvU2xYbDFVTUtMUy9mNzRjWldIaDE5Ky9rV0wwWmROQS9SNEtDRGxQckZjTXVQbGJKWkszTzd5cDREK29nYmRJYTZYVmw4MzVtWC9sTmZ5QmxuelRCdDlyb2d3S3QwMHpYZGJDU0l4Q2d1Y21VU25qV1ZMaWpjbnFhODgrUzVITW1WSU5KTHQwTE1HeSs3RkdValRBSEh3WDJ6cWdMOU9jQ0N3TEFhdTF0RnFhdjI4Y3Uyd0hyN3V6VUxkSjRxdGtwWFhKL2N2TFRiSHdQcHFESDEzZjJOSHBpeGEvUmxJVTZSYlVOQUxSWHE3eUNDcmd0MUtBM0QyVWg1enhTYktDMi9rNHUrUnVZVFBYNzd5SFdJL1Q0REdEc0l2Mlg3ODhPRXpmeDhqSmdvaGxpa3FlLzM0aVorN2ZjZHYzTktGN0dhSTZIc0c3Rjk4YVY1WldWeGRMRk96Zy9oVGUzQUMzV1lnTUYwQXFQc2NJN2Zpc0wyT2ZJcVhTekp4T25FYXlXclJRaXhTV05Cek84UnBQYmtlKzFaQ2hsT1BveEtoYWNIRW05SFdqWWhHZE5FZlV6SjdpY0lUeE81TGJmbzJienF4WUEyTlJkZ1lZYVZVMXhlYUlMYnI0QUJVTjJuSTV1eVlrV3RHcWlCcnN6YWwzNkl3dDd3R0V5bmRzM0V5Tm1rVlNUQ2xRT3JrT3F1MzJzT05ERnoyMXFXcmFyTnR2dkdNNm1BNy9OZW81RlFRdTRmczRDTnlrbTRTa3RuMDJUQURxbXM1T1pOYVhTSEprbUhtd2wyM3d4SXhLUmZmZ1RsMGlKdmJCY0JCMUFZUDhUaG1aR1BmYjgxcU16SW4zUTVhOHJXc1ErRFdiQWU5KzR1N1AySkx1bzg5d3BOMWsxQVhBbkp0cGtnYVBpQU9IRVg1b0JZOXRoUnhHY3Z0ekM2bnNMS1JpbWNCR0h0Y0tmZEk1VGE3RXFvOVVHZlhqRGhkTHNpU2tMTHBUV1BuNnYyNDlpWTFqSmtEbkdBYSs2RFloSE9FeFFsMmZ6N0xxS1J3NkJnVXZCdkFGTG1mdW1USHBJRTdvMlg5a1NsOXVaYTNlbmdwT1dhUERGTDB4M3ZqaG4wTVpSU3MzOXg1dzJCQ0d3eHRSakloekR2Tk9uUUlpc25uSjF6YzZRVEU4RmdmcCt3bkhpam8zaWZlZCs4KzhscS9Md0FvUXc4WllvS0dYcHd2MWJheXBBRDdYWDh4Uk9HZjhqTDNoRjBITkRua0NSQm1LMUs2ZlNLd205c24wSTNkS2JuYkNxQlRGbEpKWEJodFZldzlTM0JQK1dkb3hhRDN1eFN5N0xRZjNRdGF3MFAxKy9hdUttMGpiR3hUQ0FyOUVsY2JJWnV1NTR6SnRWMmg2TjJOZVZ5Zjg2aU1MZDE1WXp0bjVvM20rY01IQnZNUC8ray8vUTNCOW1UZ2o5OS8rKzFYSkw1OFFjd1RYeFhXOTJIZ01MRlY4M3pneTZldjVBSFVuN3VEMWJkeUxXRjhmMGFYTkEvc3VYNlZpT1NSTWZheTRCSXRjWmRxUTVEK0NXUzVlNUZSdUw1Q0kyV0NiUFNjYmVzWEdvN0EzZGdoSmtnaEVtK01HY0dYWnlqemVyTmxDUUt6WFM3cm1CK0VuVGZ3TGJ6VEFsRkpPYzJjc1JoVGUwa1ppTEdJcmU1aXEyK2pKeE5iOUV6NlRveTJBSk9hTnJsZE9ScWhhdTN0d0JQaGw3bUdwYmlaenZ3NWx3T1h2VFJvRGhsbnFidVFvM29PUk56SnUrMm5NdWY2cS9jZllsTVNrMU5qNkV2QTJkZFpVREx1UXBKY2pTdFM4TCtkbGdwcHVJeWhXWE9sQ3lPM3FnVHZYWXFMZ1ZWMnRnZVJvWm44SmI0RU04UkdjazZNR3BLMElUdzVTVGd4a295UnRDUEJnWFBFUDhKcnJpbzE4Tk4xdnQ2dFZtT3JuU0ttNVh6Z3pDTEpuQTM5RkdBNW52aW9IYlJ5NENaQjR3aGsyMVc3K2Uzb2pNWVQyR0s0b29nZ3psWU1EcmpiejU4bzR1dUszUHpYeUtVL1Q0Z2hObjBqWlNiT0d2MGZDRkpxMmxVWEFWQi9lZGUzLzNsNndMTUF2ZGxQeUx1ZmYvNlpzUXQvOHdzazdvYys4UVZKTGh2NENaV21FQ01NbmRPakRWazF4K2cvMWxFVUF5U2FiQ2ExbURzaWxwdW1Qb1Z0STNTQWZ6OFRLK1hmejhMK0E1ZVVEWXlKQW1MdjBHN2lwa2JQZlYvVHVualcxZzhTYjUvSkNCQ0RUelUvUFg2Q3hNVTArOFdIRHgvWTdKLys4aGNlWFAzYnYvMGJISFlRSnBnOEtPRGhtWjRoNkptYUJ2enNXTG9TMXI3R0V3QjlZNTZOWG9xYStBYXhYaXZ5bGJQdTJzZE81VTBqOHVJRWdxNjlyRTRVRTY1TkN5ODhIUnlhSVRvYzF4K1lRdHhNUTZTZ01jYzE0RWtPbG1aZFRjb0dCMDZLSkNHakt1TFlvN2xGcWpleXRIVm5mTWliNEpVc0IvcmJRcUdXK21rTTlkUkVBMmZXejlqWk5jUXVGK1FtWnliTVNOYUFnWmY2anpqMlZ2NU5ldzVaaWh0Y3FwMzA1NUwvZmNHNS91K2lmN0s4Vi9RelhMZnhoaExUWjZHaGVRTGVsVGpKRi9Wbm1wRjJ0T2h5QTIxb3drcmt4T2hpalh5ZE9RUm0wMGJxME1TdTI2V1JJMzRHS3NySDhxQW1Qb2QzVno4alRIem42clN0VzR3UFhwckpIRjArcS9Td3BLV3hqOTNxcVlRZXJjOGx2Z1FkOVFKWERaRzlGYlZscjV4ZG92MzV5YTRkb1VMVDRzeXllL3F1Vld2TFFHM3dsT3h1MStCQ0kzRmgyM3hiSHAza1kwenZPL2ZRdUdISVVPS1J3VGNEQ3IwODhFVmY3WDE2WWp6QmVNT3YyVVFSakZ5MGhYNkpPNGdNTDdEYlA3MTNGRVVvcDZiZ2F3WkZhdnkyb2NiOTdUZDhwTnlHQXVwcU1wb1BoL2VBR0tYUVJFSUp0bTJiMU56cGpCTm5ERVZvUjFNdjhjdU9wR2tvamdGUXZKeWlPN1loR01wVU5BNXhuSjFZRzhPY2h5QURjdHBzblgvSytRL24vNDk3Z08ya0huTHJrdVJHR0tEM0FoK2YyeWJhdGpGdHErQWFxUk9pelM2ZW9ubTM1ZGVFdUFqbmora3h3d3RIQS95M2IvLzYxNzlDcE0zZXlrVTFEd2VZdmo3eXB3YTBXN0hyNEkzS0pLcWRQSzRCMlBpNXdPZkNIc3o3ckY0VzBtNm44cnl2WVhqL0FFQytnTUtwbWFSQjBBRkFkdXdwS243YlBRa05sVGo2NEk4UTdhMDI4SG5aYVE2R3d2bzBrQTJuMU55MDJrQ0F0dFJKM0FWWTdRUzhTVHZLZXpQUVNRZGFyV2R3SFNWeXlPdzlrVnFtbmhWdUloQ0dJalBwYktSYVJoRnIwUFV3djY3bWtKbWY0bk1CQTVMMUpKN0ZKSkxHbkNoZEx6YXVsL3JpRkZjQ2wyWGNlQVZvN3FrcnlMS2FPUkRhREY1QjVzQXJVVE9uNmd6ZWJKNFlYc3drdUxuVWhPTU55K1E2djB1a2lzL3BUcEE1TU1zZWpGcW5CWk13aTh3RUk2ZE1ueWtiOFZ5OGVnZk5JMWZ1d0VlRW9jSWova0M3MkRSdFNMMEVseHd4eTdnMFJoNnR1OHpIcWJOem53RDl2Q0J3T1VBc0VDZmxPTzhEK2IyZEdNcC81czBDN3ZwL2Z0UUZnSDU4VTFFY25uV2FoNmlSaWlhZDlDTU1neUVDdmVTT0VtVTFKZUdYajc5b1pCOC8zcStoVEl6KzR6Nm14amRrSWhxOFRhOTFOZUpzVW0zZktGUlJVZFoyUjFNY3ppSnc0c0pBWkUxUkxLaUxVNmtndmxUd2NwaDJ6NXdPdUI0YUJkMmovaC9jMWdNSEd4SWRxajc5OXNsYnhMZnJ0RzFzRW9yNnR3MmxwM1A5eHR1eThPRWRtYnYyZXNKR0pOZWtHanByVk1STmZWNmE0OFU0RUhZVFhRcDgvZkw0NVRNditqc24zNGZuRjY3ZXhWZHovSTRlVWZFOUhmMkJBWDBmSVBZMVBTalFSWWIvRnJISFcvb2hVUjd5eGU1QmdZRDYrZzJUbEhzM0cvUnVqY3V3REYwSkl4QkhDRnJhSzVvVHZQSEZpTVBHdm44aVhPVFpxRVM4YnJJZ2lSdE1wRGFQMUdhZFJKQzFWRVVNemdqNERNN0lRUHNXZmFTWVVCaXlISUZCMzRVTXNSZUxXZXJQc1VhY2RQWm1NZFdBdGx5V3lzRmUwaXBuSVBUc2xYSmJwTElId2VyNkZqc0syN2JlS2xYN29kZmZOdmhLczIzQ2pPZCtPcmlxK09DNjJIVEdkZ0ZBdzRwWlJ4b3BOeU80RWt3aitkV1l2VmVRcXA5cUo0SHBTdU1vYWlZa2M1azB2VVBnMEt5eDZiSXhOSThFcTBKeUVzd0JVU0tWWXpzVExac0RtT1EwSUtROUcwTzRtdVhZYmU4OFQ1M3FHc0M3bXRkMXpLemkxY2FyWnRsLzA1dEc1bXJJNnFUVmRKTGFqVU9SMHNtZG01OHhXcUJGVmZ1KzFibTJmeVdnc1dQUXJsRjdMRUttNC93YzUyOHRYUXkrNCtWK3ZuNzQvTXdyQjNIL2tjR0JicnJIM3hhS2U5NXg1enR1dytzc21MZlI0dzhWS1p0R0dESDVRTUZWaEdnYTRuT1RVUk9HaHZYeEk1N211RWpYd0svNWUvUnZFZVlvUEQ5OWlZRk9IQmFqWTFrTzNaS01VUWZoYXFvY0NQNm5pd2VaY2FxT3E1YTR3UjhrZFZpUTNZT3VJVHJHaGV6bUZMQnIxMGE3Q0tyUWY5ai9NL1ZBYkVCWEZramJ5SHBET2RoNnZPbUZVMlBvWmlnVkoxaHR6bXk5N0sveEw3UzVyNi90TzNZbDd1Mi8xMWRydFAweDRQZXVDNWRCL2ZzSGZpWHJBd0xneEhFQlFLRDJJTzNnWEVUclJyNU1QYW1MU1NuWlNmU05mL1lKbVpHQ1R3U0RyTm9BbVFmU0RmYXZEWUVNVjNNdzhKajBPNlQ5VWFGQzdVTEt5MnVqSzIvamlnRkJxdTZEOWlZNE5NRkI0S2VJRWVaTXMwNVdZa0p5VXJZZ1NaR1JLUktkcFV4anZsSlROM282Q3N4Rk9BOUhwQll6cTNXa0xmNjVXaVA3MEZrcXJGRlo5Z3oyaUswa0N5YWVSc1pDd081RmJrWXlqeFJNcUxIN2tMWU5HRXo5NUp3WUx1bUVnT3U4cWlsMlY4emduV3M3RWM5K0cwUytiNU1DUEtYc3k3OERnQVJhS1hSa3pKd1pPWkthbVNkSXV0TElrZ1lrbTJrazg3dFVjbE90RXVxWTN0bTNRNGdQQVdZZjlIUmRoR3JYRk5WT1RocE9tdk1rbTFCcE0yZUoxRTE1Q0YveXp6bURONXRwREFYWDdEWGR6TGMzK1V1Q3hhdXIyclAzQ0hFdWUyL00yYWY2dXQ3bG90SHhxdWJmQ3ljazNSZzYzSEsvWC9NK1FPQTFZWTNnK2ZZZ1B5K293eGFUWGlYV1Z4dzFkR0R3RHU3QmRYOHJSMXRpdmhJam9mWkxGQnIwODlJeVkzRVAvYmxCaWFIUlA3KzcvOGRqVmtJNENFa3dOTkRoajZ4R004TEJtUGlCSUJ1Y1RhT3QzRzJmVUlrKzhldFVDeWlHdnBKc01NWmFRUkhndmttYWhqalMrM2MzOVE0WkY3eXVsTkgzNzZ2ZEx5NHZMSFdNZE5uT3pqYWwydUh3ZHYzczYyZ25ZcC9VTm80L3JpOWpaMGI0dzRlUDdGYU00R00wcjB2eGVOdnUrZTA3ZmduM2lSZm00dXYzSWNIdSsrcFpYeG5tMndJZkZVVUkweU4vWEVBN05aZm83TjcreWk5RmFXS2YxUk96ZHVEZ096OWFFSEM0N0NBaHFuMHFtRzBaODAwZkZ2czFSd2JWck9XUEtPYnhJcFAyeFBhbW5JOVdxWkJHaUN0S3k2dU1XOC8wZXBxbW1RYk5yT1NLVkxVbHgxSW44eXdtT1pGM040d2JLakZ6RGt5RmFzeTBXUzJSTkZMaFp2aE11QjRMY3c2ZmF4aG9NMkZHc29iQlNLYU5RWGtnSHpXSnpXM0FuSlROa05SUEpJMmJzY244UWNaYy8zZEpkTExJVi9RZHp2ekdLMERXV2laYmdsZHl6NXlsMUF6T3lDdzFJMFBVMERRZjBCdkswcHVhNTk2azNXdm82QmlUeXVoMi9aenh1WklEcEIzV3E5cGd6NEVEZ2FZS2lFUDU0RnJHbnBMSGVwWUtRNVpzbnBCUFhCbGVqWUUvTkUrWTFZVTlCODdJa2pib1pITUlkelBPbjQwQ1F0UGJpYzYrZmlnUS9XcFhwTlAzZXpsdnQ5dUR1a1dvSC9WblFNQ2QrSGhGR0c2OFBhUVZ5NlJiLy9wUE9uandhZ0o0MHRuZnFPYU00TG5SenlDRTN5MmhTU1J6Sm1MaUplWTJRQ2VXQVVvb3R4bS8vR09RVVFpREhhUEVLMGNkaTJpMElVMHJNeWVyN2tFQytHZEF3OXM3UUc5VEY2N0lFZXZCamUxV1lYaTJtUzltdG5aWVRqMkEvOUg4YzN1QTllWFYrT2VtWFdmakNkbEJNYm5sUjJEYlhGVTYyM1BiNUVxb1JBSVZrUjNCRkpBdlgvVVh3WGlLRm1OcjBXTFhZZHl2eTNUdGFVVEVMNEd5MTdDUE1meW43V3NHREhZcnZqcE1reDhTNVRLQWlUMDlVcUVkMXh6OENtNU1KTlVPcmNPNGFrRW1jbTBIZHFXSnE0aFlnaGk0MDJiWGk2RSt1MzBJNnNxaFhjWjRHV0t4WW9sYUlvS0c2Y2c3NDk4TGNRR3pHdmdTSEFxKzJGeEtMY0dMZ2k2UHVkZEZScUZaN2NHYnJpdUdwUWFGdWVZWnVTSU9KNVd6NWlIamk1VXZGakRRaHV6Mi9zazFEQ1g5VXpVNTdpejJXMEIzbkdzZG1rdlFPalVxYWNNQ20xbFB3RlYvVmhqQ2FlNDQ3QnZiM3JHNWtyTXo0cUEzQzFaTjh6UEs1S0ZaRlFaWGJhYU5rZllRbTcxdlFxV2xuVWF0ODZTd0svektxYklWVDl1ckxGZFQ0blZaYWowRFlXaFdaaW9rSjQyWk5yZ3lGdU9vdGpsa1FOUXMyMC9WdEozS2cydlF3ZnN0U01ZeXdxNVNaR2NMWVVUdS9jVk5DRFFKMFZCZFkyTXVDYndkNlN1RFVQbmdYaUF2MmJnSlg2UHNPUFYvZnZ5RE80aTZpNmpYODdXYlc2ci8vU3Y2SW9SekZ1VlFGVU1OSm03MkR4VktQS2JBT1hDMExkcTBYQllxd2phWGU1eGgwOUo5K2o3c2xncnZSSGRPSkk0Rml6RUhXWVF3UWZPY1dGMjRkSVd1MDFhRTFpck9kcWVTeGpEMUd2WnduR29WT2t4T09vQXZhTkt2eTZoNzliOFgvMGpucU01bDhkOFBaS1hRUCt0VmMyZVdBNUdEL3EvaSsyV25uc1VxRy9xdGhQZ3FXbm9ScHEyU2ZkU0htYUVtTFdvK3FvcUw4QWlMSC9oWFFNdnJwM0M2OTY5djlHckhKK290dTIrL1VHZGY0ekxnNDBmOWJUS3VBZmpEQXN6WnJ5bVNBNEYyL1Q3MXhYeCsvQlRIQVI3Y3hibWVRTEsxSFkydkVzUmU1bjBycnJGZjhiWlIyd0hqOTRWaThYV0I0NjhHMDR4d2xrK0xTRE9QVjI0YXgrNDBGUkpSV3NaUWE0Zyt5cFF1TUpWWW9ncnJ0cm5VNlpwYStFcW9jb2s3dTExTHNFYWxiV2JHem9FbnFWTUVJd094clZhVnErMm81TStwQndYeloxb2l5Y2VZWlN1SVhkYzd6ZVZVNng4SXFWL3hVZ21ycVhrU25FTXFZbHFTcSt6U3JyRkx3Z0NHOG1ManVWZG5rTTJtSy85ZWFzZ2k1Y2twZnZnVGdDdGRmNFdUUFZJTkF2djJJSGlwdzlJYWw3RTZsQytqYXBadnRJLzBqL0NUZEVQSTBIVGdFangzTFVNR2NHaW00TTMrbndObjVHU1IwM1VldGZUTzRJeWsvcEV4aDh3SXNUTjRCWm1UWnBRTnVsY240UGhORHhBMVkraXZmRXk2UzZnaHZNN0VNZmxPUDE1dUZ1cVhRY3Fmai9HaDh5OC8vNktMQTE0NStNd1AvK3ZYQStOYWdKL20xT1NIQTFURnpnTE95T0dudi96c1prUDRDS0hoUUc5US9VQ0p1NTF5dDRpbVVXM2pTNG9rR3RrTDhUK05JWFJaRTJNSk9UUXlpWG5RNmo1c3BsTmdiMU9NRkdnYTNMazIwdHBTNkkrYjJvTC91QVFIeXZmbVBlTGYxWlVIdFp6Qk1jWmJFSTdxWWFOZHNBVXRLejBpSDJnMGVDbTFCQWNkMGtHanhFYU85RnNOdWpTUVA3emFrM0ZwVjljdGR2Yk5nQUZaZHAvb3ZMRGFhYkFndi9IbHY2TFlvNkd4TzNPVnpwNkwxODEvK3gvL0hkdkhCbzRrQnBsLy9QQ2VGQndsZUdRQWdjQjRrZS9OSTk4OW9Laitad3VDcjJjT1VacXFVRkZxQktKSGduN0VvSVZDUjU2WUVEUVNzY0l4b2plMG1HR0xuMFlMTy9nd3pVN25xRWdtbXFPVG5FWnlqTlRtb0drWHRCbGZnamVsSUp3SG5pak1nU0R3MWFrdm5XWk5sSmJndlJsbWtTV0M3TnkzOSthYStYT3VtZk9qRVdwWXBualo4bjZYSlZxSzNMNEFXQzdKREY1QmxqMHlCNTdUa3ArRytVUFRIVzBRZXpBeXhSQTFOS0dkSUxNclpaZUJKOTVaS3BIWnNFN2l5Mll2b0IyWGErcHFEeUk5cWxMR0huREl6Y0FEQXZYc2RveEtxL2F1Z3RWYXFJUWhjR2lhT1lDNzVxNmlKcndqQkdaazRNNDB1RE00SXkzTjlNSEoyaGdoSE50OSt5MFFqd3AwTGllQk9VQ001RFZZOEtBK2J2eUxRSmgrMDFNS2JQeng0ajJqYkwwTnpKY0hPWWZyeGpuUDlPT1dPcUF1Q0RTQUVKblJnOS9zMTRVQlR3cjQ4bTZJUU1zSm1tOEg4dUZLUEtlc0tFM2w3VjBLYUhjUWl3c2V2d1RxNFpFWklKVExMQVV0Wlk3djk1TUVjaDlVRlNhbXgxSTF1RXNaKzZlZHMwVC9rTnFPOHJLdS95SDEvTk1sclZ2VXJyalYrdHBoMnBiWklyMU5SajlubDI0OGphaGoxZFBobmROM0F1MU5nTXpqYmJySXppVjYyOHI3M3FnY3ZNdmJKZm5rNllBQ0k5dGYvL0lMQndSL1c0QzVyZ1IweEdDZmo1ZDUyQ2ZKNnNINjA5Tm5mbVpVRXhyS2lzVmVGdFhvenhuTG9ZYTgvdkV4a1BoU001KzcvUjFKTWdndFV5Q2swZytZMnBzMEc5a3NRVTAyK2VsS2ZhSU1KdUptNGpSeHVUbnJwT0NKa2NxREppRVZxUXBEeHNxY2EwanlVaUhCT2JDNmhrcG1zaEJXWis4dXh5NVRweXpHUUpobFo4NlI4cFhZSldlb2gyWmRpbVVJWU9WVWhYUGJhalBuWE8zRjZlWkVSOGozU29GT1R1VFNsNENQVW9MUDNpdklNbkNaWlZaYjBtWndDQnlheVdlMUhibG1QSkhaU01FalYrSm1aak9OV1dGR2twekd6Qm4wazFDTkduN0ZKcmJTVW1vQXMxa043eGlKWkd3MVp1OU5KQWxwcEtDUjNDRUhRbTFXZXdqUDVoVmoxbmtaUXE0TXJGdG1ncDBRdTJTZzZkSTNBZ1BtZE1lQjNEZ2pBNzdVcXd1QXVLbXZzM3VNL3RHSjI0YzZ1M3YwVHpxZHQ1OTVKWUEvK0FXbzg3NVVZdlRQM09OKzdnSnlCOUhmNkJXQkwrL3lYWUtnYzV6d2EwZVNpcWwySFFvcVh2L2tzODA4YkRYMU40eGlRcTNqYnFzU3UxcG9FSHhZYXE3K2diNlhTOGtrSGxjd2tWZURsdmhmRndaZFR5UzEvd0hUdGxBL0p2bVAxdjh4VmQ5Vy9aOW91ZGp1MkU3N2R0bHNJWFdEak0wekFNSG02NXBEZ3pWeitTb3VsKzc2a1U5Tk1WYVB3NGhJdWhjZ25BdUFod2Z2L2h3Tmd2aUt4MytNOG5sdmlLdHMzdDFqRCtVQ1FOOFM0SHNDWC9TZEFULzg4NjE2UXVMU1FydThidXJySVVSNzJFamc4eHQrWG9nTGRVMHVRMFlzQjVxMmZVZ0I5Q1JxVEQ0eVlJSXpyMDNiNERheTZjQjVYbVBUZXhTMUpEdnF5Rldsa2tPSUs4ZVl3WXBVWnBLSDJOcE1leWFER0t5Y0U5Qms1Z09mOG1aa29Ia1JLbTFBaHVZeTE4d3hyY3FDTE1FNTFvajUrN211aDc5WlpDLzVuVnJ6VXR3bGZMVEl1YnN0bC9wNmlxVSs0T0VUZ0RsZ1JselRVTVNTTm5CZUhEaUxDL0dScWVjd3gxdWU3WFZVNS9zek9iTXhFUFp4YW1YSXdCendtV25FNnpqSmFSenhuU1huNXRjb3V3Smh0dStkOENXWXhxQ1dUWXlCNDJhQ2FXVElRTmpqRkxQVk04ZWFmSVFQeGN3MGtCa2NvaFlwdG9yczFIeldNVks1TTJjWnVBU2JXbDg3bzFUZ2dBM1hTTC9kQlZRUHhxaWQ4NzNHL2R6UjV6eXZzYmxPL0xwNXJoRzF0aWw5OU9NSElYb0I0Tlh6aHcvdnVkbnZlNEdBTWU3bkx2ekRUei9GWCtyVmJmOTJpdzZhc25jSnREakhnekJuMHBWR21mQ0tySndNVjFyV1NFODhUUVVIdlJYbVVDcjFlRDJZOW90Z2tLaWEzVDN2K2NiMzloU3FzV1cxMFgram9ZWExEYWU4TmMrTGlsdkU5TitqbmtHVFVaZG9jbjRINEVqL0NEOUtxWjcra1ZOc1JYY2t1TGYrTzZSUHFVZDF6bHREYklBZWgrR00zVW1rSU1aMkc5Y0FSdkNLRTc3dFV6dGgzdzNiQ0Vndi9RWE13VUMvRTZSd1J1emF6L1FOQWdHNkhualFtMzQwMldHOXAzTWx3R05DaXYvOXR6OThIT0JQZ3BBcDltbXhPS0pJT0piZDg3anUxN3YrS2g3aHlPVVVZQng2WEJ2Wk1KQ0lVcnk4b1JKaEJxUGRGczQrUXR5VEdFd3RvSCtBMUg1T3dneFdwRWVyWE96WnRkZFJUeVpTK1FsV2hRSE1wcFBDbkJHN2pLY1VUZHVWZndWeGhUWEsrdWNGRFB5ak9pc3RTNzJ1L0MzMXp5WFY1WnJ0T1JlYzZ5SU9uMlZyRDFUdkFYK3h1bzhVckhhZzA3YlZtakg1VmREaEZabEQ3a0lPTHdBR2xibnVHU0ZrQm1ka1VIWXphV25NdEhSVll6aG1WRmRWbnZIVVQxY2lHQU00Tk85aU9uWldBQm1LSC9KbXlHeGtBZWs2UVphdUdsanRKZGxnMHFveGJJdnBPdEhCTmRQTytYUElvREEwclhZZHpPeXpjVkZrcHQxRWtwQkdaT2VDVm1OclFFL1liVHVKUWJ6TzYvRk1Yd1AwcDYvOHBSL09KTHEzSDhHY2dGa2puUGpnOU5OZjB3RkZtaThJZ2tPTG4rN1V5ejY4OGNPSm4zdi95RUROVzNwUzBaMUF5YlZodGM2VUZNTW9KZjcxVTN0a2hpYzNieTduZUNVaStRTzlzUVM0eGRjVlNoaHRtWFFlakRZelR4NSs1RUJjeVptaUNIM3V4ZzlOVzVxNkQ5REtUQXBHUzJQcHEvTkZVQ3RqVk1oVW8rT29mYUJ6UkQvRTc5WDVYdnhGMXh6VytHYzQyR0x2VE1NUzNCbnlEY3VzVUdWclcyWnZ1azN0RFk5RlVHRnN3NzU4WnBBZUcyOWphT3VXalBjV2s4QTRVUERTSG5IOGxGRDdkU0JZVmtDYW5ZMHZCM1BZWVBMMVBKdUJyL0IvL3VVblh3RG9Td0NhUk9EaGdPNzBhOUl0ZjhnZTBLc3dYL0FqQ2NvdXFjeXFTTmNhc1lkR2xHWkNlZWdROXhFd1JJN0poZ25ZeVV4dnVvd3dINUFha3JJREoyT0hjR2hEaUptdWJpbVM2VEl3TlRFTXpweWxWQVpXS1JjQWZ3Qm5oUlBreEdYOTYxbE9pandTY2NpMzFHL2xFLzFLbU8yYnZlZittUU9IbW1mQ1JTVDBkMnZ3S0tNRlg1RFhnalh3SkVXbHpZc3dCMTY2QUpqRFhvYk1CUm1aMVdabWNtWWp5ZWtDU1hzMmtsOXBCcE9jbkJOa2RtWFVyRnhkbXpjR08zSGdid080cENIdUEyYzEwbXVqRmxEdHBDV1lScnBtaFNNRXZJYmJya2hxVnJEYWUwSTdRd3pwMkhDWElRTXRwYW94Qjk2SDdDcHF3ck1DRHNDQk93RUtuOEVsa21BMUdNbHlzbTI1TUdQU2xxRFR2VTdTVERxZngrczRRT3pBYmZBYnA3TFlab2h4RGUzQXBDMkovdFc5d1FkK05weEJ2MzdRNThNSEJ2MDZYa1RLbHNtQm5OVzVhNmdmSE9RUENWbE55MFV6Q3hPam45ckRGVFVpeFZPQ3pvUVFIR2J0eDhqanB6ekZERnhpWEl1by9qNnhROFFpTkE2T0dBRXBMeXpKYVROcGZIMEVNUVRhV0NwOG9kRTBHN20xL2xrL2VvZjgyZlVkNWMxTy9yTUwrckg1MkREWUh1cm1jU3RmRzNMZm91MzlXNEsrOWRHZnNaK0o1eUl3dExkRlFRSzE0Y3NUdTBBT0tZVHd2MHZHeFY3blZTUDJhdzNXSlJCMy9ibjI1czlxZ01Ta0F3Ung3T2pjSnVDcW51TkdkK25yd3JnNERuQUVlUFhUSy9aeC9wakFIMy84d1FVQWY5RkRUeFk1MVBEODRNMWJyZ0JnS2xEamZQWmkvYVlRdWlnd0tVRjg0ZUZyREVFQUFFQUFTVVJCVkpoUFR4RFRNQ2ZueG1saW1DYUY0TStHeWN6VFpUdnhERFNTZVpQZ1JEU1RtWngwSmZuY1NJVktXNEpKd09zc0E4MU5hTFdHSkdjNHhnd09VcDJqb0l0a2JTayt2aXBJMHh4by9HZysxM0FrTWl2UHNWYzRReVZMRVRqZnVGeVp4ZnJaVEdQUVQ5ekd2Q0FENGR1YjM1N0NDc3h6b3FyYkZ3Q3doK3BuWkNEYzFmd09hanFreEg0ZVJzMHU4WE52WlhmN1Nra3pKNURhVjdJTGJYTnRJTFUxZUNBck5NdVpEQUdiU0hNbmYrZWRhRnZnaWF0SlRsbm1rS3h6Y3EzclNXV01HbEp0Y3hKSm84WWUyVE41UmpLMU5vMWRtVWVxVzZrY1B6UGlSTGtLelRRUWc1NW5QVlREcVRjR0NzSHdMTTdrZXRzblh0M3hpVnlqYjg3L2pKNmZ2MktYZElxSkp2TllQZzJNOVYvODNNK2JmL25QLzQyRjRZRStOTTcwWkpRUUVvejRHZC9yUE04Slhnb3hndmpLSC92U3kwTnhQbU0wSUhLOFhjQVJWL3VXV3NLWWxKVFM0ek1HS2tZVUVwVkkwekxCYkx5SWt5MjNLMFlsSmlHVW82cGtoVTdQU1ExdDEvYjZhQ0VPelBtbW05QU5ZNjF6R2tTSWE5K3hXb2Zzc08vWitOSDZSN1d5cUMvb295TzFHVDlhcnI1Vnp4SDNJbmVWMy9hbHUzSW93V0tMQUd5cDk4NE90aUdqeHNSMFF1a0gwelhYYnF3Sm0zK3lZd2lOTG04Qmhqcmo5WGdqaU8vNHYzN2diM2c4UDM1KzFFNzU1dUZ0Ly9hdGRtWlNRSXhSdmpJOXZQbncwOGNQSHord3B6OSsrc1FmRm50ODFGMEdaZUlMQ0VyMnpORkRvMytld01YdENaY1hSZWdvQUNkM2VidDBIRnRNcUVuV0hFVnAwaUxiOHJ3MnVBbVJMcFZkbXVBemNrSmV1Vm8zMmxYVlhGSk5OeVBuQldTNks3U2F1Z1pldDc5ZElYTlZxWXRMWFVOUzU0cFJONmZrdjFndEZiN05xQnZnVGFWRy9zYWEzYzl6c20zcm4zM2ZqSkNVTHdHUE8rUlFDbnZjVFNRcUdYc3RBK3N5YkZKOW4wOXZjM1c4THQwV3hkSEN5VGdXZEtNeXNVMnVJWUErYmlTWVJzWW1NaHZtSkQ0M2ZaandQSTZiNmdyemg2Z1oxK0wyUmE3a28vQWhlNGJrZ2JFajIrb1llamliTHJqekpReVNUUnRKZHQ2Y08xYWxjNTVZMWMrNEw2V2tISkVnSGx3Mm5SNG9RaTVBNzdvTXFUV2taaHFXeXVaTW5oR2xhMkdiT2Voc2xGWmtsOUZKcUsxY1ErNW9ueTh0VXVmeFJuenJDam9yRjU5eFBJdWNDeTBYRTJmTldCSTVvQ0lhZzM0WmV0VkhYY1AzQVRWVWY4TVpYaFBmNTlNT1hEcU4zL2QvOC9EbTc3Lyt5bE40ZmFtWC85KzkwM3MrT3BlKy9zS1hldVBYZjJMVXJ5VlFydmlRdklTc3AyWGszSzV4dG03U2EyTFU0SVY5cmI5YlpFdzF5QlVFeExUZUEya0VscUw1Z3VrZytFYlZiRjh1YkFMOW8rblNWSGlrYUVKZEQ3QXJ0eUNhYllqVUhCQ1MzWVhiWnl0dlFLUHBHazhJTlNob2loajRiUUVudk1aV2V3aTNxeTlHSmQ1aEx6V24rSFdTYTdHVDJHVWcrK2M4SW1tdUo1c1o1VnZVTkdkWGNuWmVyOTF6ZnVkVWhiU2Q2TEFlS1NlM0dMSG5MNFhibmdTM1IycW4yMFJpMUZ0SUlib3B0YjJ0QitpTklFMmNIL1Z1a0s2L3RSZElqam1tMjhTek4rdkJuS1oyQ0huMTVva0hneDkvK2dreUR3MzRvakFUandVNCt2ejhWbjlrZ0FrWGt1eG5ZV3R2QndCUzhWR3ppdWZPNHJ2M3loZzBSOUZrOGg4eWd4RWFzUlR4WEpIYkRaS1ZzSTVNTU9PREh5M1FIMHFMVUhteWdOVEVVSlFGeFlzaUlpREpRcU9xZ0Qzcm1tcHRJVWxvN3I2OGlXc3hZM0pTbVIxWjRqNUlCWG1mcFI5bUhSVno1UlNwNVpad1pra2p0d3dqKytSRkxNenNuT2JJNEdoM2hhMndMY3RldC9ha3BiSS9seUZYbElQajFJakZjdmNWVFlwWnZ5MUNmTXhlTmxFOFdVd3FWR1Nwa0dDdmVkUkp3bUQwK3Z2YUd0ejdacGFSbGUvOXJaVzA5TTVJdXBiR3JKOEtHTFp0ZVA2MmJXM0hTeUhGWSsreUNJTXVwWWJPeFdYNFhhNjd5RU9LWmV3TXpranF6QVprOTJ5NHRDbGZESWVxYmQ1N1FkRWxmS2tBV0JJdHNzeFIyZit6YTBheWhObDFnSEJFbWFwM0wweDRVK2owV2REWlI3eno4ZTVjUjNoZmhoMjVnM05YcDJmVUQ4Y3NJcVNrYnF4KzZGbnp1NVM5bm5NaTVMWGJlTnJPZlRWTnJGbmRZZWZuK3pUYTErMytHUHp6Yy83Nk5ROU8wZzhhOXpPNDEwQWVFWjRKeExlQXZ6RFFaMEpCR0wvbHgrOENmWDcrNVpmMnBWNjk1YTlmOU5jZGZpclhhVlgxYS9mM2h3SWpHSkIvMjhLSnNaMlBSUzRIZ2dnWEg5d1RTSnl3NG5VZG9CQnlsazdabU4xcXJJRVF6VTE1N3ozQ281U3QrcDVCaTNrWXNsZXVJYU5udVNDcGZPQlZMNDlDaCszclRFa2NLWHZyT2lIczgwLzkxZDFIK3QwL2ZtYmUwWEhRUHRkUHRZSG1abnFyTnE0bGJzN3NIUkFyVjBIYko1b1FCcEU1ZkVEbTd0WmFuOUZkR0JRUEl3TWRBOXBtRXhwVkNKeXhPYnQ3L0VBb2k4RzVRN244cDcwNVR1Z2J3K0xFTEJZejNpRjYvdUlESERjUjNyM25GYUJYekRuUy9QSDdiMFN6dkhHdzBkR0dJd3BSL0F3WnNJY0k4dXBvbys4SjRCQVlnL3VvdTgxMEl5TjJDdVljekppandUd3dGU20xK0RJelJ6M1ZINWNRNlU0RHB1MFVqMWkzZGk3ak0zbEFXbVNjdGdiWG5BdnlFanpDWi9JU1VRM1JFVEx1bjJaTk5KYmdrZlk1ZWVsZGdrZjZLM3piYUpkU1MzQ2xzOFlJWHpxR1ZkdzVKaE8wMjRUd0xoSHdBNTJ1OTgyZlIvVWZDZDliejQxWGdPYjBWeENLdTBqellzemtYTHpaTlNNbjVKdXVRVzFvM2l4djB0OXRiYlBhRXRGeHVmVFl6Rmw2azVaR3lFeFMwdzR3ODVmNlZqc25aOGFxVU1FamtWbjJCSmxkTmNYU080TkhDTWZiMlRVdnpqbEhJcldtWW5ONlN6V0xlTTRRSDBQZXZvS004N291by9oNFoxYy8ycTJ6WTV3VUdNZEhwUUNjV1hYYzBibFJ3M250d240dkNJTnpLbS8zY3c3KzZlZWZkUDdOczJ3dktXNm5lWXRyQjY4WUYrQldIbjNFR1NoU2FDaXZuKzhFMXZGdzgzYXhSczVtaGh0eFNQV08rSEcvelZIZkZ6bXFqU3gxVlNhdGdyVVNFOUtiZkhPTzhLb3dNQWZYSURoNDUrYkFINW96L3doNWNlQ1I0SUI3YXgvQWJHYjJwQmx4TTczSnQ3SGtEQXE1dXhHU09za1pCSk5UQ1JtVlNhdDNWdmgyQlAwaDZWNno3Wjk3a0piMldBYlljc2RCaG5sY0JZQzg0UTQvakVBUTUvVWVEalZpK3ZtQjdOZlBIRWs0N09oYTRlbUo3eEx3RzZLUGo1ODROREhwVGtSTWZQMUFtYlRUS0IySEwvODlFWnlDKzgyR3FBYS9YaXhrV2J3NHlNb2drNzVNN015dWllTk5QSlFRVVRqMVdDR05BYlFnb0tkS3F3aDJNczFaN3FHNGtwYmhBMko4T2JkeXpZVzkxQnc0TTgxU3BFNERqcWNaQVoremRQcmljMGxlZ2hsODdqMmhFWWkzOW1FZzlITUd5YmlwUHhBRzJjRzdrOTQzaGtDbkpuK3lacWs1cEVkbDBNNllGbmEzK0R0cWI4eEp1K2ZxNTF4a1JXeFhyWFlCa0ltVGtVYXlad1RYRE03SWtuWXVleFN5RkxmVWtlc0lQMG94NEVQNDBIVHFPbDhTQUhNZnJ2ckNhL0NxUHlzL3Vaa2xEYnV5bVVhR25PdFUyaUNWcnFYbWRWbUh6eUpHNXIxbEx1TW9OaXU4dDVpQlArc1BCQ2RhMEhUYzZBUDVjU1ZDdDF0MzFycjl4TmxVTitYNVA0YmR1dU1mdityeitmR1RBalRwN01oZGYvMG90MDRBOFdpeWkrTW1aVzQ4R1BGMFFIOEhsTi85NEowZjhkdHBPVmhablI0RVpGdzc0TVZoanlUQ2xVdm5ZeVZWaXhNNW43R2RHbW1jZG82MGxPZDRJajVhVmd0b01iTTMrbVhoL1k1UTFueVg1bm54UzZtamtDTjhFTGxJeTZqci9Pdk1GTWQ0V1ZSVitIYWJqWHdvb3piYkx0QkhFRzdPbFR0azZWMkN5N0lSU2ZKTU9QZk8vSXFjeXliVHRMcjQ2UXBEdStnZWFTMkg1UDdaUytXNytneXNVWTFkVUoraWNORGdCcjhlTGJZWEtuUkRRY1AvcjA4Ly8venpaNzRiOE9rZFh4Zm1Bc0RIS3o2aGM0OGdyZ1VpaVg1R1RMYzJPQVN4RGVrdmh1a2hnUE8zS2lJcE5sMGFtMWs4SmVCSWwvVzNJblhEZzZYaXVLZkFYbmt6VkhHc2VodWhxWVE5bDhRTU9sYnRtRHF6RmRQaGtUelR6cEhNaGFBTHd3RHNtNmZ5UkhPUk4va2k5YklybUlGcG1IbEVCaC9DRXhrVWFLWUx3MVBseklRckNEb3p6V0F0YkVtYkF3ZGthS1lJUnRwREZydm1PVkluektWM0NjN0t5MHBjK1pLY29Ea25WU1h6eEZnV1dVRnNKaFQwaDhDY3pHMkxWdnM2QXZPdXdCUHlpY3YxMUZ3bjVOazFoeHVabVZlUUtYWTdDbWU0amFGWjZ4OXNhK1k4QTQxa2N6YUdrRWFJMVp3dWpBeE1zQ0xWWHBMM29JYTBxYk4zTlhnUXJPVEtuMmxHWnJ4R1ZiV0x6SUUyTkMwNGd6T3lLcU4zUmZTSlEveEdyRWJ6MGZNR0dXTHI2YmNrZE9PTnMybmNWdnZDejNYRUsvamFKZVB4ZUx5dEg2TnY3cjM1NGJ2ZTU5RXQvM1lPOWs5NWVOQ1BTNUwra3E0dG11M0VtaWVldUNtSDExT0RTZGZmeGRkVEJVMXhkbFloSXVvK25haXR1VHUvV01KZTdpMDJmY3B3aVBPMEJlL253OTVUNXJRaXpQeHo1clcybzR3djRCeUZIT0daK2lZaG1WZU1XVzFHcnVoYzUzeDNmVGFZRTgzWm0rUnhTNHVkTWIxc2FpYXdhQWxpSjNpMHlDWW5qV2JhS1ZXUkk1M3J1TldtSXRsMWN1L1p4UHFPdFNGWTRqVnVYTlpISXdUWm4zRjRJZFRQdlhMSmFOVE4zUDNQRHMyMXdadFhuLzU0NUVqQTl3TSsvdlF6VndROEMvQ3ZCdkdONGRldjlVQkF4NlU0WnIzbHBnVy9Ic2F0ZmhMb2JvTmU2R0hpcmdLeU1KbEhFcTJZU0NJaWY2SlFNRHk5V2VSVlE0Z3VBbHlQN1BEM1V0c3FJNktWS2pWcFNEeW1TQnJ0N3FCaGNCTXh0ZkR0U2xxS21GaTlGY0ZPWm9xYmtEak5PZHhnNVRnSzVneGVWNWdUQ1ltT1hidEsvWE9XdVpncklzdEZtd012MGxvZzdKam1rcnBIbitmZWdVa3p1em9DTjM5THV0Kzdyb3ZmVmNtVzlaNzZhMVMxaDhyZGREM1YxaE9BWVhuU2JibWhlUVRPTkNGc2NBN284NlNsTVFnT09ONFpxZURneldZYVBYUFRtZkdxTnRnWmU0SW5KNVQ3RWFnZmNaYnBVczJkazV4cXBKMzZHYlUwVE11b05ESjhScXBPMHRJWStFUFROTUM2Zml1bjJrbE9jWXlac0tSZENWbXFMZldYWUtaWWVnZXduWTNhZW02aDV1U2NQckd0TjNoME5oS2I5L1ZCRllEditSVS90NmRCL0pmUFh4NC9NL3JYK1ZMVDAvdDM5WGN2OUVzZFhDTndTNDJmN2NmbVQza1N6dEdLMHkwMyt6bWJNdWZIUGJrTThKbVY4bUxham1oNkJZRFRjQnpqb2hST3lhcUNLWTk2R3Q3ekhlRU9nak5CNW93ZUpZY25Eb0lDZlVtUUtxR1VhckdFbTNKSUJtTi9ERFd1TEE1STNpMkRrRnVVblQvNDk0VVFQMmVaa1YyYVZZZ0pOd01IbmRxTTNyNi8rSkQ0bHJ5MWhoOWtuNVRIQmt6U2M4TFN1d3cwMHk0dlM4WXV3V0Y1SzhkVkpiSlVQbHBiR1RYbzMyd1NtQVYzY2lZWmRoN2pPMUNiVUlSeDlNa3dEa2k2NE5kRFJiVEpzS1hnSG9STzJyb0pJQjhoNGpLeWoyTUlUQS9zMytudG9IY2NrWDc5OWUvTTQ0SEFsMWY2alZDT1REd1E0TUNsZC8zaml3WVNpbjhxakFPVUR5Q3VNbzVYcWl0U3VSeE1YU1JFdGUzd0FFVHFXSTV0SVJ6aTR1MDF6Ymh5bFlQTEFHWXpOTnNzUmI0RkpIWVFuMld2SU9oQUc2U3lzTmsxYTFwaHJzY2lWeFNzbWZ4WmFrNTZCVUhuU25iVDVxUWducXJJVWQ3T0hUK0hqcjBpVlVQbWRHT0MwcTdpQmQ2WnM2Q1JHRHZzbU9lTldpVE1tNm4vdk84QXVKcGw5VzFSVjc2bGF3bWU2Sis0cmtnZGNWeXZ2Y25aamsvdS9mMUNRYXNFRmVhZmJ3dHlGZHpIYmNleVRLVFlPTUJWWkZDUXF4d0VVL05HU1BMQ09DRlg0a3hMNyt5NmdoQ2V0RFJTc3hxejkxN2tLbDhyTDg1RHNSYTNxUGpEVzYwa3pwRzc5YUpHbkd2NWFNOEJHRngvK3ZRSGo5cS9hdkQvbVpNcXNmcE5UNzN5c3kwWit1MHgrS3NuL2w0WGY2SlRsd242NlczRy9lOTgxNS9UTVBsOERtYk9lWnJMQVFoYmJWR3lpcFl5eHdmZm9aZkI1R1NjY1FucmRzT3Bwa1k1Mkp3K2x0Z1VqR3RKRzJQOGNEMlpzZkcxTkdXQng2QWYyQjRxT2NwMGt6WVRac1RpUi9oUjZvd2FEeG5oMkszZkxzRUtJMHZ0MEgycjgvNEpQcGYxdTY1YWM5SUFxMjFtSWpYUW9FV1NzR25HdmpuempjenpRUWZDSmhWc21wbGxEdjh1Q1BwYjBtMXIwTXJPSFM0V3l6dmZiaGRVZVJUUjNHNm9LRTRNY1g5ZXRXL2l3dU5nZ0RJZWZLVFdJZW1CbndubDF3VzRXL0gxNlFzNGx3UVAvTkFQTHlnK3ZJbm5sL29qWWt3NkVIRkllLzdNUFFtQ0dmaEhhaFRvSmIwT3hGOHhpUzdzZjFCTURjb0pyNWRIQmFrS0x3WnBvbnkxc3F0ZHNNcnJZQ0xKc1l1NXB5VFhKcmF6WUZoQlNKYzEwM1BBSkZSOGFWOVVtR2xDZHJ2dlZzeWFYTXArV1ozelFwRm9Cbk14ejcwbnRJUDZ5WlZCTWk3cVo4d2dlejE4Q0hUcXNqa3NLamtJeVZwMnh0Q0hjK3lPM1J2WDYrOFI0K2VjYUVacXpOa0ZnQ01yKzZLOURGeUM1NExMa0NYNEFwMWx5Q3graExDQ1oxZlQ3R1A2N2VpU3llSjRRK0IrczAvM0hjWlI5c1M3a1ljNGlYZHdsMmdQM3VEdnlVMW5DZG8zdTJaa1YwMDBrcE5HY296a0RuWkVTUDY1Y1RFOGFWNkJyTDVFck0rSkRnUFFrOVl2RnZNNGs5S2dhVDluTmp5Ly92MS9ZSEJ1NVFqSVNWU2ZURzllOFVVN2FORUlRR2RmT1g3NzdWZGVxMlhRLy9IalI5L3Y1MXpMeElONG5ZeVpHUGJ6azVxSTg5RDk2Um5BK1QxWE9meitCMm00ekpCaTNHT0xOTGcwRk5BWlYrMW9SdmxoeGltcG5ZeTFNSjVVcmhSaUNSMGhGOUdaenNSaGpyZWxhSTR1T1BEK09acjdVaS9WZEJSeWhLZm9FZUd1STBVTXVGSlNxM05ySEZwd1lxUGVFNjdGYmpIbjYzM2pkZXRJZjlBeHpXQzFMVE1qNElBcFV1MldPV0tTWUQ3emlqUm1EMWoyejU2emIxM3BkVWNzT240djFWdVU1NFh0QUo5ZWNYWDFKVkpZM21kTGNGUVh4NGs0UE5uVEY1L2pCci93cTN2K09yZ3dXdGZkREtYKzR4Ti9UK0FWZzM1K1dCaDFuSXp6QVhsaXllR0xGLzU1Rk1rRkFOOFFpQzhKOE15U214MWFFY1JLUERaRmZuaFU0Mys5Q01UelJnNGg4VlVqMnUzQVFVR3FyaDlWWlB2R1JDa2ZUQ3ZySm5LZEpzV1ZwdkdUZVMxRHk2amxpTjZObUJrNWtVclhNcW9tU3VabTNOcUtUc0pQWEp2K0xXc3BzZ1J2S2EzOVZRb2JVdTFubWdZZFhNbHJ1VDhGUGFwenFIeXU1WWZXWHp2S3FjOHVBS2gxRHBncnJyU1pmNFRNT01xQTdxRFplNFFrbmoyYmlFdDFjd25XWmFtRU9TUzlhWEFFck9HWlN3ZSsxUTZaZ1lOeDFFenhnWkI0ZHJzTjA1TGNhZTVQRmRSZFkzRWRUMElMVGR6dGJLYlJVeUJkekg3d25tbEdacHhnd0tQVnQwbHZpeURzUk8wb3hQaXlnTm5sZWpKTFJ1bE5IaTl3WDFKaU9lcnpPbzlGQ05TOWM1YklwOG1uTDV6bk5Pb0c0NnlwaytSbnpxeU0rZU1tR0xIODhDZUxveHRqZk9GTkw5REdsQ1VwN1BuNWYvMXYveTMxNlcrK3BxY21qd3plNnM0OWhEanpSUExnZllremJTaEpNYzYwTWNUbjRVQS9nSUtIaHVheEFrTERpOWZQWkh6QkwvUkVES054ZE00V1ZrTHM3a2kwdHBsemJlM042b0lkTVRNNy9EaFFBYk4zUU1wYTJwRXJyZHE5aXUzVDNxeG5jK3l0UWNUTkFkeEg3T29aWEZ2em9EODNRcmRhUnNaYUhUbjUzQmUyaURoZTNySzNueVRvTGpiOWJ1NCtqL1JyWWNsSkVDVHRsRXRrNWllbkdxTGQ2dFV1QmMrN2k3cW9neExMcEdGWFYrdWZTbllBOHdGVUZaZTdjNGlWcG1LOXZtZVZpa1R4YlFlV2pJNDVPdnhJSXliMXFsdHhJTkp2OVdnUnViR2dONFYwYklsREdDYittT3RpZ0Q4dHdqZUc5VUFBRVd4ZVNlUW5DT0pydTYvKzlmLzVmeHMxK29waklCeCsySk1ERVhTKzlzU3QvVGhPdm9yM0lMLzg5TlBQVWFXa29uUmFxb0huQ1NBcWJ6K0JHOWg4UWVQQUNFNklvMXdieUd5WVUrZkpBZVQ4bmpybTRFMGtEWWVrU0ZVd21PT0VERWtqbzJ3WXQ4S3NZMDZtMjBTMHB0clV3RmdkaGpaYUJ6ZDJqNnFmdFlaUm9mSllOeUdZK292Q0pnNENTOXBlZU9PQUwvU0RQV1N2Q2hsU3dldjJ6ZkJoRVU0cUllbnN6ZkFzeVJsdjVrMytGV1BPNG1MSWdzdVRkYzR1QUs1a3NtN09oeEF5dFgyeE8wQzZPWDZtSzQyUlVkb3paMFlLL1E3enhUcDNCZDVGcHZxWm4wZ2FCd3VwRHIvRjJSRnVrZzhTN1VRR3pvbG1kVlg3dXNMQXpPYXNOaU1uNUhRVm8yMjkxdEU1cW0vUDJvRnBlSXFBdU5uMS9QN3R1Ni9Qdk9yL3lHdXkrbzV2UEIzaWUzSlBYRERFelhndURRZ0tKZWF2K1IxdEhxbHpGdzJRazI3Yzh2ODVmbEpqTzJIWGd3VVhGcjA4RE5sUm9vYjhjZnlFNjBrbjREanJOdzZvOHNWY0l3TEZpdG5WckFPNklSRFNHNGFiQTdpbjNObXFCVlI3S1RNVFpzU0JSemplNm9xdTI2WENhM0IySmM4S2xaQ2FDVzVJT1hHbU42VmVacVQ0bGZBOStYRGRIUXpjS2ZsN1ZYMjdXRXFOWFdOanV2Z0JUUGZTTzRNemdzSUF1aW5sc3JoN3pxN3JjSGt2cnNYTWRYWmFZNkd0SGE2a3lQRExodU5ubFVRdytLZUpnWGZzem15QzJ1SDdSRXZQRGZza3N1dk11UkM1SWZIVVVyY3IrQU9CQXZRRlgrNFFNS2FQQndXKzVhL204Ny84eTc5d0VPUDVKSDlLakVNZlVteFJtblFKb0ZzU2NaVDdoUEh1dy91Ly9QSXpyeGRGMmp3b3hTVUsrZm9CVnVsaUFpSEtVOGNheldRVGNGV2p4bVpVR2c1RU14R01ERTh3a1RUU1ZZMGpyL0hCT3pTdjZHeWNiYTF0V0xWbThTVkN5TERzVmVURVhxb05VbkJPOU8yZFUxaGsxcS9NcFhjSjFxaHpPK3BaZE91d1VJUEllZExxcmJaRkl1TUwrMzhvNDY2bTg3WUxnQ3pMS0VKcHBPaU1MR25tMzBXdU9sY0NsNXlzc3hvejh3cFM2NmwyeHFhUnVXYkVyZ0YzY3dCcmloU3M0U2Y4ZEtXUkNvR3dLVzliYzNJdzJLQnJzNlpMQll6a0RIYmx2TmhWQTJ1aWlqdlI0SjBKaWRUbGN1eFNJUVY5djBxY2Z2QzNpeE9XREkvTzVjcHVCSmF0ajI0MFAyMXV6QWV4SFMvNGhSKys1aHUvOFlPQkh6MmZCZU5VckwrOEk1V1lJc2ZUOHhlTkNmVFZYaDdHeDAvOE1NUGtKS3JUdDRiMU9scHI3cW5aQ1BjcUFpRThhQlRTSmkwaDZXSUlBT1FGRGtNbEEydHBpM0xQMFQ5N1FnZnU1NjJVK01pTzJnS3VXSzRrbVVkTnVtcHdPV1FBOTgyMkNCV3NkbFhRcWdpNkNkdkNsSjdKSW0wa0p6VlBFUGV3Q2NrZkJHdnpDZ2QrMHFoOVhtRlZzSklIdkRaVHNJSi9wczE2SU4xUXhoTE1xbWF2a2FvekkzaG5jRWFTNXBLeXNJR1p6V1hTQkNzTjhKc21iYS9zdXpIZkNYbERhRWNHYzNRTkFETUcvUHJ3MUE4ZHRMeGNLcTl0OE40YlRJWFBJVXZmVzlObGdQcE5id3R4a09QRDF3QkFRdU1sSWg0SWNIWHcvZ04vUUlEWGhmU3JaY3o1QVNGZUl0TFRBeDNLNGxmTCtGWkJQQlJWU2g0VVVFRk0zSVdubkY0aXg4bm1jY2tjRmJWRU1mWE9qT1Z0cnliS2hZeGRHR1l5QnpHZVlBOC9kQ1V6UmF6RGZPbktMSlZmN2N6bzhDeXBjbXpiaFoxRzRoaHhMRGVnK2NDeFl3WkJjQzBydjBKMnVNV1hTWmY2ZzNMbnBNeWhNUVFPdkhPdnl4dEMzS3c5dnlRTVlDOTR0eUZWem5rbDFUdExvV093Q3RvZVZ2Rk11STZRWXM3eW5YOEcxTlhNYWNDWDRCVjhDSnliZFZPMmx6bGdNbWNqZXkxZFI1VW5ZVGFPUXBiaWMvZ1ZCS21aTnVSTlF1YXRVVWZrakxLUnpZR2ZtbWVFZnBDdWVjLzRJVG9RTGlVNkRreTFOR294S1g0QURpY1MwVG1mSmRtYXcxeE4vbTl6aGRDTWYrM0VJOS9UMCs5Ly9Jb0RwKzU2aWVTenIvNnNiMFRFQS9VSTA5Mnh1RS9HZ0o4TEFLWTRIZktMbjArZnYzeldIOHB4aUFaNGlnMDlIY3NKQ21FQTR6UWwxUEdXbVNaa3pyQ3h0TW1NVUpYWVRwSVdFYnFlRkJnRjJFalMwRXk4R1V0WkZiOG5KazBkcThVWS9EdGs5czRod2RsRWJvZlFXNldrSmIvNFIzUEpYNEtPUEhHTjB2djJFSmhOaXEvMTc0TmFLOGxMcjhFcm5KUHdkSGs5WmpPTmMzMmlCc0s4UFF6SUVESjRuWGZnQU42a1pXZk9zZFowbmRZQnFXV2ZnRWxMZmF2bFBHTVRPVFdROGM0VU8vZEcxYmpaeHg5aHZhRnJmUjJIWXJiZlhnQWg1a0poUklXc0R0MFFVUUJQSmg5MERhQ21qa2p0bGdkWEZoenU1STliRWJwaDhlb1ZqeTcxOVBJRGZ4eEFMejh5NTJkRHVSRGduNzVFL080ZFh3WUEvUDMzMzBValZ0OFRSclA5Y3pGMWl5YXB5N09CN1lreU85SjZJSkUwWUhwcFZIbm5aMzhsbUs3S2IybktSMG9Wck9rYmNUM3V2dVQwSW5lVjRIVjJHOHd0N3FpdXM3NllPU0k3TmhXcTRBbUlLOVBkVkVoQ0ZwK0lkWWFrczNJRTFxQzFYZldYSW9UVlhETm5yUnZvdmVTYWFKQzlVbWVHVkhLQ1A4N3dZZzc2Z0hvQ01KUXlVSWVtSlpiZ2tXc21KNUxHWE5tc05wT05NSzlySmNGQllRZ2ZtcEFUbVkwc0wxMkRlQkxTU09hSkFmbkVPN3RPeEdlWGtSVEpYRWJvc1hUTnhoeWIrcWx6anFRM3hSTzVvckNNZW5IZ3JKWUlweXRXd2xGdHBqRzNFUVZ3KzB0OElmRXZESTN2dHpNcFo4TDRrcHkrUmhkLzhJdmU5dmkrS2FDaE00UE9ab1JqK240Lzg0OGZQMWhjYi9rL1ArbmJjdnovNWtIdnBLcFEzYVFuU3F0UGM4YjZFcUdKclhObkdIR2JUMWNGU2hQamZqN2EyUlFMUjdnSUpGVC9qNkFRT1ptVXAwL3RicUJjSGUyMFRubng1NVl4SkdxejJrdjltVkFRS2h5TExONU56NkJYTHVqQUdacGIyR1ROekJrWmdrNEl2WitIaUYwenc3Mm80OUx1dU9OeTdaM2Z2NVcxWFpUMmpsYWpaZ1NwMkd1MG9EQ1hoQ0hka3BNaWxUeUE1RmpHWnNqc05lTGFCbHFDeVVuQ1phT3UzckoxYU45c1I1VkJ5cVFJMDZpZmlZMDhqbFljT25JL2w0UC8xZGFYa3JUUFJOLzZYUi9zdURLT2d4WGpkUDQ4WVJ4NHRCeDlGWWdDcVBYQkh4VFRqNFR5MHFQK0tCaUtEL3pzOGZ0MzNON25Bb0QzZ243NzdUZitxSmkrQ2hVUEtyTUl4WFBqaFpzVWNVNVhHYnA5c1oycUtOSk5YMkRJRjVOeExZTFNiUk5PSXhqcHJXRGx0NlNoVVBrRXVybnA5a1FEYm9WS1MzdHdPZTk1SlJsYmpVRUhWMG9sN1FyaXdLSCtxakM0QnMyaGpNRnJuWUZ6QW1iZU5JYllRWC93RWpVUUVrbkJjMk1XUE9JUGlZYkFjKytnT2NRT1hqY3RPTHVHdFRNVGpwQkI4TVozQUFZMm9rZklqSitRVDF5NVN3eWNRZis4U2V3dzNlUW5ZVGFRU2pCbGx3akhMeDlZQjFvbHA1MUdrbXVpOU02RytVczh3YXA1UlhZSUhKcFZiWENwMlErNTFWWHRXa0NWc24yUk9kQ1dzWVA0WFNFRG1hYVJZYTR2QWNjcERsem5TVDdpdFg2K01JZXBCdi9wZFg4OTcrWXM5ZjdkTzUzVjVQRVBZRkNqK2dzWG16cm5QMzNQamxkODNzVUxQMi81Q1k0NFkrbmlRcWRwYnJReHJ1Zjh3eitONEgwK2pKT1pEd0hoOU1sZHAwcWRxWFJWb05OMyt5ZXk4R2pLN3dyMEljNDJTVitUSkZSaUoxSy84VElQcy9QZGlMbVpCYmhsdXA1a1pWT0xINldrYXphU1hGM1hRVWNOL1BObVRWVHRJUXJYRVhKbHVVYmwzVnFxem1adnVXSVZudE0zOGtMcHo0UGNEM08rb1R4b0EwTElBQTZFdVljSHZwUE80QndvNWxTQWFSWmg3dXdWekhwT3dPU2duMUxWMkFnVlZUbktHZGdjQ0E3b2VRdExraDFkakpmM09WVnRoMjRMQmllK2F4UWVoT0pna3FIdHhubXBUV1lzSms4RDFGVWF2K3Q0cURlQ2lPVlpRZFFLUlRkRnZzUmZHdjdwcDUrNDM4OTNBK0wzZ2o2VE9nNmVldUdubFlHQUpoM3hwS2hyZ25HSFFzMGdGWEJ2UmZTWXZMeUF0Zk83VTU5MnFlNnlJWms4dUV4V1REQnQ1RHdWakxpWnpHd21QMTJWVDk3VUdVS3lwS3BnTzZPcWF3Wm5oUlBreEhXVTVVckl6RUVOTUJmV2hKckNOb1E1Vm9HZE9udXR6RHpGTzNmeE9ZY0g0czNIODEzVW9LbEtZaE9DZENEVndnZHZEVnpHN3JMK21BWTFlRUwrUDc0RDBOYmYwTlYwVUNKcHA1R3VOTktWR3lndVFKcWVtNWtJVGJsNmZJWjNvSDBhbjcySnpFWXFoRXNEeVQyaUZxN2N3ZHljT1VaU3YvS1RuRWJTRWtuanhBVW52V2tNZ2Q3TmpyeEpybEtEYmM2UlFwenB0aTVLY3ZJeGJIdXVFMDhNajlVa3JuZXZCdjI2NGEvbjJ3SVZwRTZPd2J2L0NsZ3NMQy9oeDRHRG0yVzg2c05UY0wzaXI3L2lwUW1YTHd4ODE1K21sVkRtWEtyUlhkd1BpME1jVG0xQlhEKzRabTFRL1pBVUxwMCt1WGlJTVNIT1Jtdk5IcU1xc1FuMUh4M20weXRGRCtMRDBZWVVvRzRHM0Z4cGZ3Y2phdDUwanBxdDNyNmtHVER3d1R2Q2duaFp4TzFneHUwTXZMRlNGOHp6UUtzc09RTjQzdHhWMDBWTCtRdC9aN1ZsM0MzdEFYMm80WUQxRDRibkZXMkVzckora0dxNzRrUm9YaFE1Q2h4eTNVWEwyQ3k3aGcrZ1hkOWhIaWVjT0E2TXg3UUw0dHFFS0l6SXNITFBGNXk5R29ZR1oySHdvZHYraEVtZjdNQWNjcDZlUDMvK3lySHE0WUdYZkVUbXNNYmIvM3daZ044L2lKOE4vWW1mTitDbElKNEd4R1VBOTBxVWsyQms0eGlwUXhML0NQU3hTM2hNU3JTZk9EemlBWk0vL3A1SkxJU2FhV1NFSy9mY29EbllSeTZMcDBLTldycFNhZ2lwVFNkMWhSWnBaZXlQYkM2cEJ0cHU0ZnREdzVJOGd5MjJKRXBPR3BseFNVNHZ4c1dRb2FPNmJGVmEyN04rNVoxN1hWN2xwNTE5UGhTV2hNSG9CV3N6ODJTa3R4YjlrQzZNV3VkTnFSb1l1MEVGWG02VDE2bXJ4STBuQUpVcWUzOVUyY250WFFOejFObTNkenA3bDNMNjRETGhTMkJKTGlCVkRvVXF3MTdLelFhVzJJMjVCNjlXT0VSSlRvZFJKMWU2UFlGV0ZyWVZ3L2FhZUJvaGtXUUxTaTh0TmJxYWpXd201eHhaZWwzNzBtWFoyWlhwYWtrVm5BUFBSWWJZTm9EYjl0Tys0QVZwcVlYRVhmd2k0Vng0dVBWdTJFak1tY1dwTGx4d2FES1h6Q3QrdjU5M1czWFhuM01kNjRpLzZzVjVqblBqMThkUHpFRVlnZk1mTjk1aWV1SWVtTjcxLzhBZjFOVHdINURUR0hmUCtPczZTcUlDVUk0NFh2L253a0QzMVF3d2o5TmtiRHFrSVR2aEZNTC96ZWgvdlZPb0NsU05hS25RTWdVNTJxRnRXdk9UUHE0QjlLM2hHeE5KYms5ejlocHozVHN6WndSbGc3V3lHVGtwWUtsWitZTTk4NCtRN1BPWk1HaHV6Ym9ZRzlxc3BoT2NXTTFzQXhPcEF5WlhQOGpORmR5ai9RbTlDdXlkVXl1WGQvTGNBS2hyaUczRmw4V3J0YzllRXN4Z2hxVDR6S21CTEtyNzU0aVdPbDZlbVRZajFuZWd2S3NWTU1oYXZIZjhlZjk3QlRWUjNhRDM3dDhrL0xFcGJGWjRsSmVlVjlkcFBYZXYxQ2kwTnhNWDZBT1BDRXFtR1JoZllPSjRwaVBpVjBibnVON3d4NFA1S3liOHZxWitDUG56WnhhY3J6bHhHT1FhUU5Nbi9TSVFtZmsvYm9Yb2hnWDUrQWsxL3FBd29QSzNmL291RTZ3QXFWZXQyQ2dBZEtqVUFvaS9UZTdNR1FTeEs2azBEVmF5d2VSVTQ4VFZhVmxKZHA2TzBudjlkZ0VUSWVxL2VTSUVzRWJSWlAyTXlGNTUxcm1KRExYZDVFK0VWZlh0eERUVnIxVTFDUndERjdsM0xjSmQ1T1BTZnBSSForWjFqOTZYMGR2UEVBTjR4d1ZBYm1xc2hxVmNWVTl5TW0xa2N5QVBlRFpub3dhbUY5QjJSUktzSVdIRFVxZFdjclhOTjVMYkhNMWM4QXBDemlaNzVEQndWQmJMZFFNZEptTnMvYkxqRWFlUWptT2kyYnlqd2Q4WjZKSnAxQnI2Y3JsYTU4cU1WbzVVWGFUSHNzcVNabU5iTGdMS1ZMMGM1SXVubWZzVGg4QlU5b2JSbWlVQkErRFVTWElnYlA5YnFlYnNDY0lxa3V3S090Qk00OHpKN3h2amlXUUlONjJzc3lIeGRUZmU1R0VSZkxmZUw3bnFGTWVKN3ZNanVNYjhIcEhyWWNBWFhvRDk4TzZCWC8vOC9GVi9JNVBCK3NlUFAvR1h2RGp6UmI5NTE5YmY3YUl3Vkpuei9NQmRGSWRHa0g1dTQ4c0F2b3ZmQnYvcU84STR2WG9GS29yLzQxd2JhaUxvLzdKNXFsV2FUaFFjYjNyYjZVUUYrZTFma3lKeVAzUDNiQmpFZ0t6WDhEbDZSamFKc0diQ2pDeERaaG9JSldrOEVuMDFFMUlIbXIzeEFrU0RLMTliQzUyN242NGdSRlJhdFMwMkkwUElQbWRyWGF3blk5ZFo1aFdXQVdmRzJBOW4zR25uTlhub3k5ekxZa1UxdmF5NWVGdG5WaVN6TC9zRXIzV0drQUhNWFBDVENaaDJ3NGU2TTNjMzZKcWpNanBGbjBlY0xWMVB0Q0Zha0xMM1NtWlhuZ0JQZWRFZWUyU09LSGRTMGRFOVNROE1zQjBMVU45Z3JORHlCcU02N05UdXBYc0VlU1lTb2Yydng1aHh5Tkt4UFFoZjlkZkIrSXNCYi9rWklJNkgxQU9WNndMKy9aZTNEN3dVeExlQnVSWjRqSXNCLy9wWjlKUi9PVlEvWDBBUXQwS1krQ2toMWc0cFlzV2h5dHVTOFMwcHZqZkZGUVB0Y01kY3BlcGdwdDZMNjRxKzJQSkd0VWxUOVZGcU85alNqc2xnbUUwaFErd3FoTGE5QmJuOVhLcnRubGJGK2FSR2xBL3EvY2ZvS0ozenFRcFdhWjVuMzRiS01GTmZ4MlErNWx6SmpGU2FBeXZIZ20wZVphUjN5RExGNm5mdDJnYXdMN3N5VTBRcCtnTHNRT0Z5TkxCTGFSMXVuYWhvcHF6TlRjOEJaMllsVkxzb3VKcVN1dk91cS9XSThkTlpydWhVRGxHdWFaQ0xmaDR3TmJVOXJ3TGNiY3hERDBiN2Q4Y0ZnTE5wOWE1TFdsU1QwSG5JdVRkRkJ1TmxVVkgrcW9mMjZsVmNPMnNNRmtYcG9TWm9IeTFUalRLY2lJMXNwcmNjT3pjaGFHd0VTVTREUnZSL1o1WmljcU5KY2pQTTZjd2V1UzFJSXVabmVPSVlnTE4rSWV6VVo0V0tWTnNLSGFraW05MjlXN1lyaUd2ZVlyclZZNjJ2T2RzeVhlcXQybXNURGlzODdzcHprbXEzN0hWZEZ3ZHQzdGZYcDg1RE1jVG5XMjVQL0h2aWRqNWF1aVRRbFl5Nmk0c0I5dExIejUvNDRGYVhmOVJUci95LzBXOWc2L1ZZVGNxWmZZdWxTNUk0SndCNjhwMTQvUXFRcVhGanZqMEVVRTJFUk9HeGl4TWltcVkwM0t6emhXdUxDNklaUmEyR0wyd3ppZHJXWEYydUhuRXV1UFF1d2E2M2RkMU1BOG1SeWV4TkJZeWxkd0JyczlxcGN4MzhscENNWmVOSzI4YXlnSUV6Tk9rZk5xRGxkS0MyMkhJYzN2ZXNVZXhBUjdRYTBtbGJOU3Z2RnRMNUc0S2dRUWZPaEJrWlFsUlRUREJyOWc3djlFL0FXc1lSYlZrTTVEbDFSZWdkN2FkYko2MUx5cVFjaDJJRnR3Qml5M0pwVlJhbExTaXRoZGZydjI4Ri9mRmdKVGFmWGxuVVdVTmZCcEJncE5hb1JZZEdkUzgyTGd3bTZnRGt0Z2hiTlhOZUN2SjdRVHdvNEErRW9hNHZVREV5WnZ6K2hxOFRFNnBIcHByNFhsVStEdlVQbkhFTURyVTRNRVppMytSUmFwVXhUT1ExZ2xpNnNCTlBzQnZOcGV3OUJBUCtFTks4SHVBcldFRFB0bFVTc1YxN0t0SEttL3U0c0lHWklTOHdScW5hYWRWR2VtZ3EyZGFOUjZrSC9Wd0JRd2NleVBkTzM2dlBzWHYvM2EyaHlMdmp2eUhnVzFNZkhkTzFtMmxuaWxGRG0xLzlHZEJjSElwTE80MGxtTjQwbHJRWlRHUTJqcVNTZVVRQUR3NnoyL1V2T1YwaE0reU1JY1ROQVhUQUFHWnpNSWJtbHIzWFB4TTJUbHRZSlV5YUdqSE5DUEFTclBoTW1KSEtqMVNhTFduMkxsMUw4SWcva3hQSlExTWlpQUNxNlQ2MG8yOE9yU1dYQ0p5MmZJK0tBYjFQVkQ3RTZOekZ1VWpQdHZsTmF5YTl1d3JFcTZxY2w3QVo0SHVwNWRUdHJ2Z0JETzV5eFUvNzQxSk1uS01vQi81MjVOTElIa1J2N1h2U3AwUmowb1dCYm1IUm9NUitnMG9oOFUrNGV5a05OMTgydnk0eU0yZUVHZ1p3YU5ZaWw2NEU2ZjYwYTFTMUt5SHNTejFUbzFKdENkbzd1MllFNWhJODF6OFBtYk5YdmpmajFFK2pjaExFYUZ0UGhjSSs0ay9FRndMemVuVGx6bnZ1ZGNyS3p5TG13RndRODJHZUlIaVhza2NaWjgxMmJDbFpVdk04OVNDVnpTRnFMdDZFeWdjNW1naS95RHhTQUVkaFgwWS9oc1pTV3g4Q1V6QVpyRXRNdG51WDZEaG1jcHZGaDFaY2o1Ky9jT1RrcmorVHJ3RjRJTUF4OXRPblArSkdDak9QKzduMWdoNC9IOFRReFhLNkJwQVgvVGU4ZDZSa0xidGVLQ0pLeDhzSWgvSUVRQ0FFbDZRN08yVXlEaEFIYnprU01TdVdTWUp1TXUvTHEyc1M4N1drL1doTXhxcGhUdEJTWUcxVWtjbzR3aXNuN1puc0FySThtRE5pMEp4QllTQVAzc3g3MDdnWWVKRzJYSXFoMUpzbGZUdmhlclUzYzkyVTh0S3RkTmdJZDV1ME9YV04xeWc5QVJpU1dYcWRnRDJuUnlmaGpOODNyeDdVUGduSnpXdDJHUm4wazViNGpLUXJqWmt6SXdONTBaejZjOEhwdXVsYUdnYlRSZmRrZjFxZ3VBUk0vSjZtZnliL3hPaGNmU1l0d1JtNTZWcUdmQ040dmJZWEozSmduYXM3ZFB1cDlyTXZEL2dEWHUzVkpsWlF1MDhhRzc5K3ZhNVBCSE5LNHd3REpZU0liZmVmMkx6amxQUHE1NTkrNHR6VVR6L3EybjcyZ2VLVkw0TWFXcE1UVkR0LzZaTmZBRFh1QzRNWXIwVyttS20wdmtlMjhGeDUzMkJja1JvNFE5UEp2d1djWXdma3ZFa0JJcWlEdHk1cVlCU245V1ZPTkhNMnlDNDVKbDlrenJUTWRTUitIckxNZmpQa2lMRHJuVkxaRWI5UWZvalo5b2tMMmxUb2xYaVR1MXpYZ1BNeUxrSHJENjZMbWpkcEpwREN4UXpOVEcyakZwejJNb1g1bW1zWDJCMzJNMUNPeXhOWmFtQkwyZzgrVmFiU3VzMDlFWjlFZmV3aW1pWjNOUFQ2a0d4RzlHL2lsY3ZJd3RHU3J3dnc5UUJjLy9xdi94cmsrTmswL1FCRFRHOTRiVkxYQWRzVWV6UDNha0M4MjJPeDZQRnFqYklqTEIzeXh3TUowV0pUeTRGK0lzN2dwSUNLTEJ1bCtlYmdaYkkzYVRZY0huR3FJa3JkNmJUK1VIeHpEenFoclZtWGloVVpxRk1rSVkyWnVRdzNXQmRxU2JNYWk5ZDZ0WFJDYzBYaU1lbFdacmo3YktRZExCZjBtNFYxeWNVbldZYndCZWt5Vkd1MnZReXRHV3ZJa255aUEzK1dXb3A4Ui9EdVY0Q2NPeGNqalpzMUpkTkdOak53Um5BTjROQ3NoSFNsWWVXaE9ZRFZXKzJrNWZhYzNqVCtQL2JlZFZseUpFbk96TXBMM2JxSHBJd00zLy8xS0N2OHM1eWVya3ZlOWxOVGQ0WEJIWWdUSjZ1S3BJd3NLZ3ZIWEUxTnpkd0JPQkFJUkVRNE5ySU9JUWF1MkRIQzc5NkFvUzJHNndrWXZvM2dNVUxZRVZ5WDRDSjEyVHhpcTZCZDU3WEl3bCthUnpwWE05ZlAwRHJITm1zYkphTVRncTc2UFVtejFvVStreDYzOXNmOWQ1MUd1SlBEOHZXTFB1WmJiMnJUYitaRzlaNUpoeHYvNzk3cFhZSFBlbHVBWCs3VjU5MSsvSkZ6R0Zmd2tpYUdNMUo5TlI1eG5PRjR2MENuS040ZzloOC8yQ09BMDVVdS9XdXBGd1BWUUVHekE1WHh2eGF2NWF2bXNUSUMvNEJlWSsyQ2o2TVgvdEowN0E0K2d4RDdtTFo3OTVEaVhBL1JYVzI3eUk0OGszcVBjc2FzbnhRSi84N29PdHExWHJNd05Pdm92Q1k4M0Y1RFFJeTcvZkNPNzkwWjd4SzRJNGp2NEk3MFltS1BveW50V1NmaHdWeEFCTHNybkJnaEgvR2x1VWZ0cVMwU2hVV1RaaGRaOU9OMWVHSVhJNzFZOEwxNXB4T0ZYZ3h6SmZWc0U0MXJITEQrQ05DY3huMTF3bHNYbUFPLzFvdURMei8rOEZNOVZxazNWelYxNldzTTlORGp2Lzdydi9JZ0VKOE40QTBCdmttSTNWdnZFYng5OS9IekorWktxYUVuR1VVeE4wS29HWEljQlpWTDkrRDFWcTBtVzV3Vm9wcGFJWE1IV0xhQ3hPZGltK2tkQTVwVWFsSGZDa21zdmVDRitCMkEwaGx6c2tkR0NJSEg4QTN2RUhlNENMVkVNMDBNNTdWaG5IWEtDR0l3VXNhZnBCMzlmM3h0UGIyVzdhbHRPL3ZTQ3hmR3V0ZjJaR0Y3Q2lPWDRUdjVwazV2bXRPcmlCY0ZkOEtOdUtyb1BiMnM2akZoRC9tRHlIZ0JRTVhaUWk4cXBuc3gvbmpJSXJVMDBYOEcyV2w3Vk9kMGI3ZkR5ZDRmNzI1QXpvSjNKeGpaMXhYRnNCOWRXMktYWnM5aSs1THdHTnhGRmlUaHdURTYyTzNwOG1FekloYUMwWUF4QnJ2K0xHQnZkbnVSaXNMT3diV0FidTVySm5TNEI3OW1ZYTdXZlEwdUdTNzc2M2wvemt3MSszTU1wNy9vMVl1RE4yOSs1OXQrM243SEZmLzMrbUpQTGZxMGdFNTVkVDdTaFQxYm1vTk1aeWJpc2FUQ09hek9ZakoxQk9JblNpN2hlbnExNEhLem1zM3NtSVdkVis3akdYdXFwZnpuWlVmaVgxeHBabWhnQmt6VURuWk90eFBTd1JxeGVNWXdIdTJ5VWdDQjlNZk5MbUorUjdvZHRRVjgzTncxNzVEb1l5eWF6NFQwOEc1SEtrYjNQckFab25XclAyRC9sUzRxNTJEYjlzRWpaUkd5ZVEvOGdlVmpvWS9KTXdpQzBCd1ZJMWt1RlpJaWcvbE1vQk5aT2VtU0tKck9HRHpHSGhMWGJyeUt2SWNIV2ZyRm5SSHRRc2VoTm9uSFFJRE1oaDdVMFFVeEEweUVwT29BWmFwakdxMG4vQ1hHTkZzdVRiNDFpK3F5bnVlQ2VDWEF3aTBZUGlIdy92MEg3dW1EMThTcXBJVHdFdURyZC9wRllhV3NLVnkvZks0Mi8rbk5CdUhIb3BrWEJjZDZMWkZheUd2eXNxNDhZSWVPWG5MVVhsbURVSjNTbnV4Y0VoK2xsV1ZPbWNPQnQ4Q1NtQU5GZUZjemYyck93U3pkME9CMDhVdnl3cUdaUkU1aFpLZloyOGszK3Rxc2o1YzlFUDRPM2lGMzRyM3ZGdXdqczBjdC9JV3daMThJZTVPUXg1cDd5Q1h5RGFrdmRaNEUvODkvQm9CQzNlZFVuR2FNdUdJc3JxVzVhMDZrcG9pb1RJUHd2dCtlbWo0d2k3bG5tUUxYWGJqa0wyQ2FpN0UwU1JURVNkT00wVGtCWTl5VnVxaUZ0dUM3RGdTQmZlQzJJaGVSTy9HT1h5YTYwOW5KTzBJc1lIQWJXWmVoYlR3TXorWHRNMnJjOCtlRXhJMHBFWHlRWTZuanRTYVNrOWlYcnp5cXd5bUszL0ZsNGVTQmp4TVY3d2p3R1FET01ud2lXQ2NxMysvWFREMy85K1UvTTBkTm5DTFVLd1Q1MjhqNnRwVVNhU0QwUjh3eVM4dkZDL2ptWlptOGx1WUQyVXZtRGo1QUhyaVNkM0RvdW9iK09OVzFvelBjNGJXckFvOTlOTG1RaVozSUI4Z0RWOEl4ZHRvZDZLalg4bnV1MkpjaThUNUloS3YydElYN2Y2QlpXMVdqNXd1SWZldUVrT0oyQkZjQ0Y2K2JFUHBZTFJ3clg0SldOdUVGQlU4Z0xkR0QxS2xuNXdSWk9Na2VncEUwWGVUZEd2S1R6RHNGY0JSU1J1MUJBTWVWMzZ5bkJManFYaThKbWJoMGFQcVluT1R4eUNWMGJ2ejdBOFRTZlBPVmJ3YnkxVCt6Sy9NcDd3UHdOVUc4REpBSURIMUNhM3lISmxKNkw0QVBZNkhOdGI3bVVuVVd4VEZqMURTS2w3OTZBRWx2NjFaeGhWZU1JQlJSMWp2QWVsbFNPNHk3b1BYWGVrZVgxekJRMUExeDZsME52V0NvVGE4cXBGdjlreGFtKzZvQlFWNS9MR3RyanNSb2phYVlQWEI2Yi9FUXVyR0x1SUN1dkNNbzdJR1dYY2gzdEY3RHBmMWs0Sk0wRjh6NnhYNWRGdk5uZ2M5WCsyTEdGNlVnM0lpQVg3ajZ5UFRBOTFma1M0VWVkYkpkeW4xQngwNS9DcHVOSlhCcG1yV0FTM01xdlpBb3RMb1JVSzBhS05TT0EzVGtDMWZHWGJvVHFUVjJ2cEVkYjBFdm1NL0VoaFBqQmRIcGZpMmZ1TXVRNThGWEtiak1YZndiRUllMGRSMHR6Tmg2UUVlOXFyWG5kMDRDWFBmelVJKys1SWNRRGlIZHdJS3FmeFZZTTQ3d2QyLy8yMy85cnlYZ243elJPWUhUbUQ2cHhvUmVaNkQ1VGdBZTdXN1MwbnlsdTFCZUJPcEhkUFJYcTduVTZhcGNCQmhzWnhRQWQyZlNILzg5S1QrbVB1T2w4b1gyREVKSWFER3NzelF2d0RNanJReENrSW85eWp2alJ3RVhLUXkxSWljdy9pNVNkd283RGVTbXpsdmxYZVNaWWhiT056UjlaL1Q1UUk2VlMvTGorcTlHUTBlQW8rSU5naEV3eWtFNkRac2xyZ2ZrY0J3Q2MwR0NkOEU3Y0U5a1pORmN3RDNwUWlDZEVlZDFzMnN1M3REcU1qVXRHWHV1ay91NUJxbGJSbzR5dGxxT05UV0hOOWlVclRsc1RwN3o0b05aNUgzOVlMcCtMYjNtM1NwVE9ueHZNck53M1lIUkxSZy9Xb240Ly95Zi81TW1pM3NFd2g2cjJjaVEwdW10QnRMeFlRRzhxbSs4RzZCQy9ka0FwdUNQdi8vT0M0NjVNQjIvNVowSU5IaXhvZWhTUHd5SjRCYUJCYWRraThaVFNTTFQ5SjhhSDczck1Dc3l6YzVsamRKRDd4ek1KV3hyVXRLdWN3bHVvYmVBdTduSUduVE1IOVR2aVMrbExzRWU5ZGZaMzVENnhSQUlsd1V2STN6SitTdkE5K3lnK2xjN01jV3hZTE5nOUh4THM3c2c5NmFabC96T1hHamg3MFlYeDc0TGpNdjg2SnliMjdWKzliMlRGMzJIUjN4bnhuVk9kRXhFbDRKVGg5RlczR3dlaHRXeVhyYkl6Z2Zad1lUYk1DRzBlTytRam5lYndEU1grbmZOTUhzTlhTRWhkNkFKeXdnQVpuZHlpcmxlTDBTTUx4Y29nSVZyb25jWDZ1eEJ4M1JQaVRtZW0wejFYVC82V1YvZGx0ZkpRNmNtempKY3l2TzRQNEpjNFBNTjF2eXlQYWNsM3BsV1Bmdy9GdCtoZnpzT0o1VUxJb0tQSzk3Q1ZyTUMzRUhXdU9ySjErT0FtZ2NoU1RudEZLNVZPemdud3lJa3QxRzlzOW5YbEZPRkZSWnlaOWdtL05JYk1JYjVhZlp5QXNMcDl0NWNSTnk4Qkh2OW9aWDRrYm5uS251TVNjZlBzV25KMkdsQllpVGdHYVJyZHY2ZEhYR01tKzE0S3JMcjlOaExleUd6TzQ3UnVXUS9EZW9PYUMxTHdVc3plaTVqOHdJY3grOGxad2QzaEN4V3Rxc1hWZ2V5Z0tUZXd4TUZKM1lYNmVIWVhTR0QyVUhIOXZWZVhoS2xzQ2hqSEdBNzlBa0pubkJuMmZFZ1hkYmtIdEoxZWtobmR2N0VxU1F3MWh5M0F2dVVNN2R2amRPY3JPYWdmWG4zL2gzVEx3TkthaFp3Wmt4MkxhcGl3ekhsc29Dei9yZC8remVtNlBvQk1YMVprRGNyVEgvRGN1M1VSSTl2NXFHSml6RGRpNWxYT0hxM2dKSjF1VDlVRVNFUlg5UmNnNkFDNnJGUDlRRVhDcXovK2M5LzZoMktzcDFVdks5ZmYvbm5QMm42eVU4TUZBRHJkY2I0NFBJY0tHOUtmU2FoZHB6WjllbXUxS01oaFNMWm1CUXBkSnB4STVldTZIU0ZIb1hORUxEdXNqMXFsdzB6UnNSZlpmUXNCTHI1dUJMclA1azNnaTlXdFF0MlpOZnAzb2dIWFBvVlFqZEM3dUJpUDZQVFEzWk5JK2g0RTl0Z0Y3WHl4WWVBY1N3cXB2WTAyTStEUytELy91WmxxU21qZTdzZHd2UEdIcjRnUzlQS0FXUHNHYnNyZG95ZEgrVnN5anZ5Z2kvTjZQUVVuVk4yVGZPVEVXK002WG4wOTVJTStHVDlDYThKbFZZcnlkT29ycTYxeURjWG1zejJCWEowMU0wbjNZS1NvYytpNmVmcGVRZFpkK2tWQmtNZkF1WWI2UFFsRlo3ck9STndtNTlQQjdET2xaUnFWdUgxL25lOUU2MkdaSHhxMFVSYi8vUUo0TzBDck9wUnBTemo5S0F6b2EvK0MyMTlNMkhRZWtqWmoxWVU5TUI5NmIwRUVibkVMOEhueVh1NEVNWlZSUitWZDFxM3hXcUZQWENaMmNtWHlLS3dOQjN5SkxqVGR1U3lob0F4OXNBZENYa3h6R1FvajlGY0dOL1V0Q3lIaTZNZjE3T1FDUWwvVndqeWdCWk96bkRweEpMcnNnazVDZyt5UkxQekxjaGc3Z29nZCtraWxTZ3p1ekoyd21NNDhKSnNmZ1REWEJEakQ5YUlQeFBTcGlObFpnQnFiYVBNbWFPZ2kzbEhBZVBOVDEyMGsxYzNQTFFMNldZNy85ek5YRmpqd3RaWExNelBCdVIzQTlENThPRzc5L1hXYTkybSthb0orajIvTzZaSGV2eHVBTW4wSFF5cVc2a3lzeks5TTltRFNyKyt2SUhlYU5abjd1Yy8za240ckY5M3dZOWFuUThVUGxUMGx6T0d2aUxDZGNyRi8vcXlCMlU2RGNRWUluWFJDa1hRQ21oSEZId3hiQW02Q1B4bW5aUG9FNDA5MFJOQksyVVh1VVI2MkU3bzNqL0Y3aW02YlhFUWpCZTN5NTlleVdQQnF2TkVjWjBucURXT3p3QTA4R1JleGwrQ0NldmVib2RnSTY3RlNIUGgwL3dHMTEzSUhYNlpaU2NIZVpXeGRMem4yblhpalN2SWJvU3pHNUN6eEd0a2FZYUdZZGRPMkpGRWRWZTNvMmJtNGtwNE44S0pFZThqQkYrZE1DQ2I1bldhTmdBOXJUTTFjeld2dS80czNOVFhXODFNOWI0SHFVdC8za2JtQ0svNXV4eDZCMEFuSGw0QThFd3FweFp1VnluMkt5OGtkQWQwbmt2R3BTclRlNTJLZktJaFZMZXlXQTZtN0hFS0FkVDVUbis4Q01jckpPZ29wanhqWlZwSFpEdkxpczcyQSsvdTJwRXBjNUZsSWFjWjQvbFlNNThKaEduYUEvTHVTbFJLZW9COGMvZ0R6Y2Q1N2IzTWkwdjczT3oxTXpxZFk5dktZLy9iM1g4QW9iYTdzbmZWblh6WnRXZG9DOGMxV0czUEM3THc3eER3ZEdkWDIxMlhpQU4zVndyYlhkZkllYnVubm12eWVVYnBITnNKVHg4N1luQkJVakFHdStEVmRTbjcxT20yQmlXUGRCV2N5Y3hTbnI5cWI5YkZ0KzZkOE1mUFFqSTE2NmUrZFArRmY5S3RCYU8rZEdIOGJnQVRNZ3V2QWJocjg5dHZXc01pSTBGMTA0VXdabmpGS21QZGtaRllYWi83WFFMSUxFelF6UDhZc0pqYkxVTFRncXdwNW9mditYTFM0MzY1b3lSYnRSRU9EWkJ3MUZqMENzRDExeU5KMEtSZTNheVZabndUdEs0YkhLNVR6YmE0bUFEaHhNQmxqaEUzV1QrcEUrWEZVQkVldHJPakYzZlloM1ZtVjIxQXZaaFIrU1M2K05uUzMwRTRqME1uN1BZdXNuT003T0tGckJOWEY5eERrT29FTjFtbm00dlhxYlB1M2wzY3lDVTU0S1d4UzEzU0RJN2ZBWEJqU1FuNFBMSXpMOE9kcUxzU2FDTk5NOU5rVEdNdlJwb1B4T05hWkJNYm96TUJIK1JkbUpmS2tZMnhSSG4zdHJkellpK0dEN0dkMzJXeEU3VlVGZHBDNkNGeGRjUDdkSkRvOU1BTzJ0NzVDN0kwNzZMdWNJZEhSSU5UcHg0UTdLd1ZYclAvWURidkY3N3ZYeThIOUVVLy9HRXA1bGUreFFjeTA3T1FXaGdCWnZXLy8vM3ZUTzZlMzduNlp4bFR2Sy9VcTEwemdHclJLWVpiU1hYVnJwY1QydGo2YUpwT0FsVUtia2tjc1FvcHBFNkRkU3AwczFoK0tUSUlCLzRheTl1eFIrd0kzaGZCaFhBMHQvazZyaGdQc3IvQVVkZEg5MTlnemh5aHhaaWVsL3RvcGdPL09Wd1YzNC9KNDJJdVkzdFZDWC9BN0p3OWx0SDhRL3ZUcnY2SEVZWnJIS2QvV0FxZGZmQy9XZlZPemRVNlVRYnpqa3oyTzFmWFNaRjM1RVhIc1lBdVkybGFiUWYzb1Y3Q0kyaUZmVjFUNEE1ckMvYTkzcW01djE3ejhyN0xXYVlHandyNE8zU2hjMk5GRisvOEUxd0xmN20yVGxaczM1RUIrVi8vNy8vaTBhRGZmK003MmQ2Ky8vQ0JpUm95aVBoanNtVStKNFBuVWtUVXRCUlR2WkpYM2RiSHR1SDZaMzdkTUNLRVZaRzFqN0hNMmdiSXV3am92ZnRPbDFoNDliOWVETlNMSE8vaEdxTHFoZmRTeFhOK0dNWFFVRlJieW0zeGdZYXpHNG1McXlQWVhkektJWnlNT3ArS2YwTFB6Um9OQlBtci82NFdwOXVMNmR4TDd5WG9LSmZkT3dKK0NmWXMzZDdGSy93MDhoWk0xRTNJN1hnNlBFVXU0WSs5U1dwamlWMjhTL05KOHZvSWtNTllzK3lLQzBMekFXMTM3ZUZCTHNrZGpMMFlhVm9xelJqbkZHemFvK2FkQXptZ2phWFpDWXQ5VHFUV0hydURPK2NCTXNKcnkreTBMbzZkWldjR2VaRVRab3d0NU5oUE91Zk9UamhHNXdSZndLVzVSTVViSXdRanJHM2tPdDdOckQ5LytyMHU4bXRPMTlQL210cDB1QUlRVSsvLzB1Sk5aQzk4dmI4blF3VjQ0dU1Vd2EwajVtdWRZNWpvZGN2SEM4eTNQQnJrZ016c21pU0xWbjJ1azRqVEtqV1NXcXNiNWM2SzZWVTJ6ajl6b2M1RmJrR1dwc2tCWXp3V3dSdG1qRVdxS3l5Y0kxekZNZzc2dzJqc05JMy9lVEZuWis2SXBHL0NIN3VTY0ErL0RMd0VMMk12bVVrWDR5NDJoQmc3ay9GYWh5enNielhJNGtQakdZRlhrUjhMZHFseGJOWUc3Y1hzSTlBMXUwTEhzUkY1SEd1K0IvTUIrWUZyeWZnNDZaME9PSUZIcWUxOGQ0RFZuVkh3TmtRT3Q0NDUzN1plSy9IWDdraExVOW5jNjNLZElXQ01IZ2QzV2F5K2U4djhxYXQvYlFBZXZLa0RIK2FQUC8vTVRSdWUvcS92Wnl2UnVyN21lOWpxNXJ0dTIvTVZEaC9IdDQ1cVFEU25GMUYzWVZnMERmTWVnVng3Wi8yNUFrVWhXdy8zWS9DeVF6ZjROZmVNRVZhWjFZUFIyWWtEVWhna25WRUtyTE1FQW1DVlhiRDZaTzhvNER6L0FKSzBpTWRxQVJjRkZUazFFN09FR0w4RUUvS2ljWm1GRWMxMnZWTllBcGN5RnU5ZTZrN1lFYUlXMmJ0aXpHUzlqUFBqOEV2dkpaaTgzWXU5WkRSaTh1THRnUkFXYi9RdmpTWDJrck8rQUhDT1pUZ01MdkV1NVE2ODlDN2tTOWx3SGl0Y2VpOUJDOXJGd2NTYmdjdDFsdjRhQUFCQUFFbEVRVlFoMWFOaXgwZzlYV2V4UThib05yUTA3MEk2cDVOakw0YTZVRHRRRDd3VEQ3T1RPOWh4aTNRa1RJeGxsK2d1S2txc2piTjNjWTVtT0V0SVozZE90K0drYVNOTkhQcFhCRURqM2JCclhObS9lZlBwOTQrZTBNRVoyOHkzVFBSQ21LM2Y2ZjNjRHgvZWM1T0piL25uUVNFNHpPWWVFQ2E4Y2QxUFVtWjJVSjB2eG11QWF2ckMzZkllS2UyQVl5ZlUrd0pIaTdvUm41dFhqcmxZWkFSTjhBLzlkZjJSZU53MHJYUHViSFdnbGs0QTZNMXVYNUlYdmprR05lQXp4VUxyK0FncDlrS3pheWZ2U0EvY3ZjOGdYY0Y1TDVFNzhBRnV0YjBHNC90Nlp4cGh4L3BUOWlvZmFIdmV2dzZoL2hlVG1yRDMvVlZWUFJDNWNOWFIyek9HRTJQUHZyc2VJTHNMUVlNWVRwMW1rTTdCWHBaOU1IZWRKV1EydmZ1c3A0RHl5a1VscDlGd2dicFU5STRIWjVyN2VRU0tMcGNoNkI5bVBaL0pHVnl6TFVwOGFGaVYxMjBhQ0pCNEZ1akg3My80OHRPWFgzLzc5VC8rK2M5UEh6L3FIc3g3SG5VZWQvcDF5YSs3L240TndHU3VkM3BWTFlYVVA3MHVRQk8xTDNxZkFadEZId1FqMWJ1dnY5ZUhkNnQzWTBXNEZjeVVVazFRUWlsTVl5QkV6VnJxUVZCblAxd0pvYU8yNVZPWFZGdEhETjRoOENQVk9VL3FLT1ZybGt2Wlp3UlNKK1JkNUVYa1JjS2w3SVBDZWoybUxTa1d3dUpOU01aOEp4aEpEWXRnOEcrUU9zZXlBeHpBWHNiaEsrdmx6d0JBVzBxL1JMcHU1M2U3YzdySXdsbWFQZXFQdTN5WU8zc2JxSjVFL2JXckpnYTU5cnhCbmpGTzZtZTFCK0hKRzA2UVM4TlpRbzVoZlBGZU5nRVRaU1BOQnlKeGRYSzN1eXhIeU9KS2VEZkNpYkY3NCtxR3poRDFSU0tBV1loMVhpTjFaMThyZXNzL0NwSlhtMXorSk5LRFBoOTA4dUFzSVBzOUgvTlY4U1p6YnBDcWhMWENycFpQR09PME1XVkZnb0EwSk92TE5Xd2hSU2hQSzJCVzRwQVJXT0I4elNMc0tIank5ZmNRN09pMEgzZ3ZYWmZnWlphRm1XYU1XY0oxaFk5cDZlb0QydUxxelc2N2pGY2hyeUtubTVlanRJTzcrRjJGTHlwM1F1eGQzd2g3VU4reHd2OGpobytSSnhVV3NnL0FwZHFGZy9LVE5PdVl2TlN6YTFyMmNlcEZLdVRnUVpZaWwzVGh1NnBFQlEreTZHaSswbVF5bG9XL05CWGI1Z2NIbXROdGErMElPR0EwUjhyVG4weEVsSlNqYytnRlFjSGlkbWdhTExvTVFXcVlVRTI2YUdLdE5VL3l6WnhhOU92QWRlVk04OU1uL1JRQTAybDljWkMrMG9SRmcvTmU5L1NaclhYTi92YnRyL3I5WU40M3NGTzY2aEMrbW95NXNLOVhGQ1N2YmxLV3gxYUFjbklYSDhNdkE0Z0I0UVZHM2R6WDg2S0lGbEVySlZCSDhxOVNvcUFYREtpT0NxRVJTTE8rQlE2UGFBNW5yWFlock5NMDBwdWRVM2xGdHM2bEM5QkxPQk1ZUlM3aThmNkpSdXFNNWtCbSs1bmFIRElqTHY3dUloZWtna2IyT2VaZ2haeDJWSU1abk11UWVKMW80ZEJjQ0thRkhPOFM2TlIzNUk3djlxVlVFaTM4aTNjQUZvYmxPcmdqOXQ3aFBUYjJKVmt2dWs5SHYraEdaZ2QwREo4NU8rSWt3bG5PWkdQSHVudTdmVERHdkxabkdmcGttR1J6dUx1UTVZaWkvcWFma0RDSDBUaFhsZDhNenFyeVhMdm5XaUtlZGgwZGVUSmtwKzNJVWt4dmh0d05UNXhDNnVOWnVqL1VGc0pwY1Vxd2ppNzhXZmg2Zis3eDgwdVQ0OXp6MWVjRWFkUUMvOFAzNy9tV1QyWjhiN3NLKy9TV2UwNzZhSmt2My9tcmM0YmVKcENoSjF3RjZRU2pvcmpFbndPa0UwT0JYdXNKbzZwSE5KTmQzcloyNTd6ZW5OOEVQRWkzdXg0Z3U0dWU5SW91Q09VT3JpR1lFUWJuY0ltM0kyQzFtZVpseCtTVXpCU2FFZ292TE9ra1dzc3pDTVJPdTdPSDRwbjhBT3c2cHUxSXdqRWVlOE44a25hVmNZNVh0RjQyNWxEZk1GME1oeEgrdThMc0RhRTF1Y1JUWUpCd09oalpuV1lrQkllSEZxTVhDY2ZMSlRpZCtodENqQjRvdTJydllESWFYRngzT2oxcTRlU1FRV3B4MGV5QklvaDlBcGVRWGxYWjYvNndhNTVDSHUwTEhJR29GZU44WS91a29BWkpWQ2YvVTMrcmtKYnJFY2IvY2xad1BWbnB5WnE3N0hxMlJ6eGVJdkNkYko4K01yY3pnZi85WC83bHA1OS8vc2MvL3NGYkFTN0RrM3c5MzRsYVhaUkxUcWxMRlgxbjBUT2ZWWXZLWWE3bU5ZQVcvVjdCQjg0ZG5BdHdzS1lrbjFtcUxOZWpmbWlSTUt1cXY5NS9jRkM5QTBBMDV4RW5yY3lWclBnbmNQanNMZUVnTG05V0xsaTFqdUZwckxNSkIyQ2hWZUNKZDEzRWlYSTBqcnpWcGVydzRYMWd2U3BMMHhrWmpyemQ5OFFnRlAydXpEdTg1V2ptM1hpR2NsbmtrOTdRbmpaZVZ6eXllZ2VBQlN2N2hKdEpDZDZSTzlzSzNXc0ZJeEdQclBHZHp5RTY5K3pCOVM1OWVtMHdKb1VpdVBpcEcwSHZXelJqUUlHcjdsU0NhaDdqeGNFOE5ZNXpEMG5oYXhaenhpMnZRZ0tXa1dzVHB6NEthUHA5dis5NUVVdTE2VWhQSVRVWTVDQlhYN2ZOcDNKZFNSbDhxWTBVWnBkanFGdVZ6R1N2NWZXRUZaY0xDZzRqU0dWaGlNQllvdUJtWHl2WFhKYitBbDhHQmxSM0dpZEtrMUNBSjE2Z3VibG5ObTF1Q2JEV1Y3UnBtYy8ydkhuSGpzQTByRnRLdWhyWFo0QnJvdWZyZmJqbzU5djl2ZFZCa1VCQVgvU3BSWDJoSkYvbDY2VEFPOU9jR1h6UlB6ckswNksyQ05VYkJSVTRScmFHRGFEdVpaVmpJbXAwMjA3cG4wWUFOVzM5dnFpWEx5M21hSS9meUFtdmZnMnB3WjhGdVJrbU1wS1NtUGpCWTNSUXZMbDBBcjNRYWJoY1BiVzVYWDlHSzlIWWNWdFN2RjMyemw1b1hkTTJnWE8vT2dTalppTk5RclMvdGNGOHh2WndkaWxuN0xGM2RhYmdad2doV3puOUNpNmo2cThqN0FUZk43eHZYT3hzSEFoT2tVUWdYU2U0d2FXL2t3bkxtMTFqTzhIajd5V0lPemhHMnlBS25LNm9uZWI1dll4U09EcFlWMzFkUnpZN3g1Q3RaRE9GSEhXeGZlcUNVL1Nxd2dmMC9MbHZvNDZZUDVES24xVXZJNkFOWE5XTm12OXF2a2hldVdwV3FRSXlNc1F4c2JEVmhJU003ZFFMU0JQV25KMk9VUzFjSzJVZnAxODE1L1k4MGtGSW81MGVaem9OR1cvUDZ2dnlpeWk5Vk1JdEZ6M09peWdYNTlvYVd2VGRRZnc4eTN0dXlNajFVVi93OFBYSG4zN21IN08vZmtQNDExKzU4K05QYzlVWDlsRDJlMm55dnk0TW1NelJvdlgyNCtlUHJHbXFodS9lNmNjZ2RTTDQ3aDFPdmNyNG5wdjQvdW9JVGh4c1JEUzFNZDJmb1NRQTB5THFSU2xMaVo4bjAyOFg4TnFCSHhEanpZcVJsK2pxYXUxZHRmbUk5VExPcytydkZOUjQwRklRaWFIVklHZEU1UVYwVGZhYXNJQ0VsWktjS3JoMFdGTjVMU2RCRUJObVY4MFpQUy9xRkJ1ZXdROXZ3dm9MMzJvZFhPd2xVUVVkVWZGMm5kN2xFQ3piYVV1aWFxcWlLM3hnZCtFOTR4NSs5cDdHc3dTTm5QQ0lRR2dGWFhOTUxpS2IrL3A2VERyWnNsT1N3bzUzQUdoNFNXNGJnQXR5MTd4a091dGR5STdUQVIwelp3ZktRbExJTkFZK3lVdFQ4R1RHdUN6eUVjZ3NNL1h6ZCtjdnlOSk00TFZ4VGpCaU8xajJ3TWRBMk4zWFF6dXBweEVoR1JOY3lmdElMY3lsOHNmZWhmeWdlYW5UUVNaWHpXL0g5aHRkcUJjU3RTUHJFUjdOWEJYRjdLbzNiWk1SRUtST0ZmcCtUejZaeGR1NmVPdHRYYjZrazdlQXVmRG5hK00wcDNEaC83Miszdk43Wm5QTHJSTlVuUkowem9OZEM1TTRaNDJLcm9lSW5OcDFPVmg3N2xGUENpdmpEait6SHJhb1l2ZnZZSkFZaWRvUlhBdm81Z0x1dEdoZXVpN0RhKy9Fcy9iaUFmSXFWMHJhbyt3eXZuaDNjRWZTeHlVMmVEZWNheUQwdWZZWTc5VGo5Y3djaU1Hc1pxSjJZMDlxVGgwRk1nK0NsUzkzUWczN3hhWGJudTRaaEl4a1AvS2VZNHludkxNenJXTTN1T1JmZ2dTRFd6bkdvZGlxeXRuUjNrdTFCVXhCQ3g1OVoyYzl1d1pSUVI2S0NYYjZVVzJiZFVWSVlOZ2dpODdDY2ROODUzSkkxRnovcGN0UjRWY1QrdGp6enJpNXZmS0JlR2ErSkEvOVFmem1QeTdKL1lpSTkybS9Wc0dtZi9WdG9lek12bXBuMXVWdVRqbDRZVXJZKy9kOGdhZSt2cGxmN09KbEFCLzlZcDduRThPY1IvUmFRUXNzaVVoQWd6QjNaaEFPRWRiOHI4bDhUUGVhK2EydjUzeTRmL1RaTHhkRWhDNHhIUXZTZGUzMWNwZ1hLT1VFcEM2ZU1OTHZCdFJuRFlqbTVRdkI0ek1KRHFyQ3BLUDB5c2YvM3JWazlBV21TT2ZsS1ZDYWRYMVYwVU9paXBlRC93M1p1NlhvQ1VYWnk2aVIzV3R6NEVqWFZSN1oxWDhOd05yWlN3U2x1N3p1MmFOVVY3NDlTMmQxYjdmTkFjR284WE12ZWlqMkphanh2SFRjOTJ1UlBacDdTZmlPRndBSHNWazMyY1ZZWEV2VEdndTROSk1IL0s0L0NYbGdYT2JxRmZiWUpESVlWeThtZGpkMmZtSjN3NEhCdXc3MkhYN3BXc2pWMUM2eDRFNFJNTWFDdTdtRWg3d2I0Y2NJNXdHeTZJZTVHSXZVMGpRWjhEaHQ2OVhBV0VDWk8yZ3lmMko0R3RlbzZQWktIZlp3YTRybEhkdjZ5N2MzYUNyais1bUoxVXNDdGI2cisvN2k4OTd1RHovcThyL3VYSEpOanpZRXViTFU2d2F1L2pXWDY5YWdUellJcHFxaU8ycGlmOXBmeWxpMHZnMkp5QktlNW00UVlqQ3VYZVNTc1BNamhhRWhWcWRHdjNieUhYS0hkM0ZYMkpuZHRyZnp1emYyQXlNS1hTVGdIamhkdDUwMUlZR1RmLzMzUmRwQ1dKcUhxQTZEN0w4SC9OQmE5MFBJWFYvSDVyYXZ3cm5ENzNKZDhpL0JLT3plSU5NNEZUL0JDTWk0QkIvZ3UrdE93VXpXYlh5T2VvanFyalM3V2tDWUxHN2F0bWJJZDY2T0w0RnVacDBpZTBpeWhCYVJUbHU4cjJxaWs5UXhIaXN3RzFlVUx0N3JkZzlYM3ZYV2JiMUxnSXYzZnJtdDgvUFBQM1BYSGZJdi8veEY3d2JYajNaNUZpSVJzUlhONVRCM2tYU1hSeWNaNGRTakp2LzRRQUh4SWdMVmE0RFBiejV4UGtDTk8xRzRTSStIc3dzQmRRb2l1YnBUNVJ6YkdxdnVZZWtYSjkveTJnRXRIaTU5eTg4VnE2SE96b05TOGV3d2RaYmhoR05ZNjdHM0ZQbCtkRWIyTnFRVldpVTEwTFM0YkVpMURtUU56ZE5MMVV2Y0swS3NuUnFlU2JXVEwvTXV0SVd6ZU1tN0VJS2twRDBrTHBQVDhWMXFFbzZJaGZOWS9BaDdvczVPN2pZcHNvRHJCUUR0RkcwcVNJOVp3TjNia2RnMlVBN2lYRkUybnZWU3cwSk9sSTJ1ZWNrTTRROGFYWHlYaXZmUzVWTERjZk9PR1R4UlBYRHhMczFMNWdOT1VvU3pHenNueUdVNmU2UFR5WmYyd3V6Tlp1c2lmbHdmMWpzeGgwdFdYYVZycGorV212MDlQZkphUUxmODlUMXhXUFZVYUwzWHlpUk9XMEhzKzV3VmVCdVd0Vzc4di92QURJdnIwMmZPRmg4b1cvc2trTU5vTUxYN2F6M0xaS1Y3Tm4ybUsvdUVYSForSHNBM3pndDQwVnlhRHVoZ3QvRWV6VjV0aFIydTFnejR3SERTTGc0NS9OMGI1QWpoSEtGNmpsTkZEKzkyWWczdXJpQXhITktiM1Y0RVUxTG54STRSV3NKdGRNS0NiQzUxZGdPZlFuclNYZUd4OTQ3UEhuMk1mcGY0WS9aZHVqK20rcWRFL3hYZGZiWXc1cHh0WkVZOWkydHBrcURtcTlOK3NuTlNSMXpwclpIZ25XbDdGcGFJa1JIdmRJbUlRa2Y2aFFJMGU4Vjc1YklVTnJNOFVLSE8wMkNTWFM5bEdlR3ZlakdndnpvenFDWlVOT05yMFlmQi92YjN2L1Bocmw5KytZWGZEdU0zQTNnOW9JVkhjZFE3WmRTYTIvNTFrVit6RXhmWnVuTVB6a05BcUhCMXIvODBNc1M5SnlIS3hPa09GVGY1NjhsaHZYWVFvd1IxaTEyV3lxb1pXS1VvMXdCNU40R1BwT2t0QUJIRk1VME12WmtCcWxjRUk2WVVoclRreHdJTnk0R0xEV2hFVWhWdVE2Q0NBSlhGNFFaVGdOd3pDdnZKNWNtUWhhYlVzd3N2SmxwaXpkL0JYZE5JK0h2R1hhUVgwNzJQeFlucTVMdU1Gcm56OXRTTHZZc3ZoRFI3aWc2KzhBNUFwOXBlaE82YXdYZmpVZ2V3bU5yUjd3aVRNeG4xTi9wQmQ2UUh4bXNqelV2T0RqN21QL1pHcmFkMmYzc2dOQzhCWTRDWHJZUGtjZ2x6TjhLUGEwRjJITUlPN3NpaTQrWTlEYzlhdjZBTlRIYmY5Q0RHSE5aajBMakZVNkNDNTFMZkZLZW5lalRiMTVzRHV2WENLOTM2UlJnUUVjZUh0L1FNSm5mOTMzL2crdjg5My9SVEdrdy92QjdRMjdtMWpLdC9UYXRhZE5lZndyQlVIbi9uTFJtOVRwQ0QvLy95eGRtWE5KY2duT2Z4TUx2Qm1QU21rNEpjNGlrcElTOGdESmRHY2gwMXduZUYzcGZkYStRTzc3RXB5Y2Jqd0VWd2FVWnF4KzlrYTRPb3Z3bGhKSHR6c1pOaU1STCtHTCtqSmVwaTlPUDdWdVBGcEU4S28rUEI2ZnhMTUlUZHV5R25uVzN6UnVuQ2VFQmVYRXNUclgwckI0bHhrYklDVWR0ZFJPMzREbDVFbHBhVFlrWWtaZXd1YUF2WW03R2oxcEhLOXRUS1VhbW5rcWE4NVpSQnQwQzBOcDgxNFVhQjlkQ09GdVpxamk3d3J6Ly8vRGQrUEpncmZtaWNDMzc2NmNQMzMvL0FWd245NHgvL3J2TUJOMzArZlZJQW55Mm8yejNFNlpLZFR5QXc0ZXN0WHFUcWRrOHBmdEh6UFNKb3FZOGo2TVBCV25UZVVTeWw2QnlpRXZubmhmUEZOSDM3djhKcnBiN1hiMUh5QkpCZmo0d3lhbm9raDE3TUVGNTdnaytWSGhIT2QyZ3EwMXo2TU1hT0FTdjJNS3FxRGxyTlNNUnBnb2Myc3ozNjZ4QXpvcllFWEdyZWthbWQ4TmJYb3k5ZHR1Y05mZ2srOExxR0RPd1MvdGdiV1J0TDdBTXdnWmNoOFhaanFhUzduckhIMTRCYUpldDBHd21EbDFxTEs4MFlqbHFhWFdwM0NmR3UzWGltaGJ3YjRjYjFJSFU0dXhFZGpQTFduT0lEcmcxRkFpZHRIYVVRWWl4TTQ4Tjc3dS9KMVFvcTNLTnpDdkRHMHJ4VHk5QnMxUzU0a3p6S1RsUzhDL0s0U2RSQ2lNNWlGTzJvdjBWZGdpTWFtcGplRUxLVWpqbFA2RnhxNXVWeC92cGwzL2xGRFREMTNtMHRtcDcxYnNCblpsaXUrSC84OFVkOXd3Ky8xRnNmQkdiNjFlL012UDFPTHdiZXZZT3BxM3VtWWQ3VkhRSWtsRFdtZEl6Nk9na1FzdFFFWEt0VGh5K3VZS1ovSjAvUHc3OVZ3SWx4aVN6ZzBlelRaOGtjcnRZTWFLT3ZuWHRCM05RbXJOZEJHcEJ6SXJuT29KR0NWL0xDWERpTGN2ZnVyaUF4ek0vYStPSk5NMGJQa3RnWHdTVzgrTFhmdEtHQXd5NGNab3dseTlMVWJubTFJQlg0R2FtNU55Zm9QNzN4amNmZG56c3UyZUl4b3U4dHVHeTdUcnNrRUI1T0RFRDMxa2pIazg2Qll0WUJxOHZsZWVUQ0QyMEJqMllGa21Vbk8vVXkzSjBXOFc3Y0ZkazVaU3RuOVc5Y21GWkpsTTcxdHp2REgvN3BhenpnODJQQVRPWS8vUEFqK3JwTTU0aXIzdy9tYXYvVHg5LzVWQUN2RGZSeDNyZDhobGp6UHpSNlA3cjVoVk5BUFZERWE0QjYzbE5YNDVWRXB3ZmQrdEU3dy9WWkFjYkJaeVd1NXltTUowNHBZbFk0RFdJcFF2ZU01cW1qMHBYbUczNjdUTDg0OWtZZkR0YlRTbm9GTWhhVjVDWGo3NllkSFF3VkVOc3VEQlpDRnBCeXZNM3gya1hSRG9Ic0VDZDZjVzJGMEpJdXlKMnhCTjdSd0hmTlp4QUhMcDFLODFMMnlSQm9acktPNE5LZHZVS0hkSDRQanlERzVaSkFlNWQwbHlHQUxxTjcxM2NBRnNiUzdKR0xhMm1hZVFsMmtkQ1cvb1FUaFFmR1RvN3NZdEJjZE5KOFVxVHpZOGVJeUlPOHFXRkc5ZnNDVmQ2WU1zZXhMbHBITWdjc3lhbzVOWTl1THF4TFFnZTlJWUlzNFRSMzE0NWMwcjVOeXVKTTJrcGN5eENYcldyVTFLZDROYS9yTmduZjNnRHEyekJPV1c5dTZtcWRqNFh4RFE1YzlmTmhYeTM4VVB4N3Z0Rk5aNFBTWVVMV2ZGNXpvWjd2ckt0L21wcUZ0ZFJteUhTTW5vNTN2ei9oVEpUaWlnWlg3Ym54SnVQYi83cXdKWDRCbHlia0hZbkM0a296Umc4UEdNTTZhY3JndnprZzNuM2pOWGtIaXpEMjc1NXVFWGV6RXhibDNuekdmaXdZaFJqc0liYURUSVZSL0lMM1pyZHpaajJCYlRNdCtNeXkvbjJHOWhUblQ5eEJaNDNqYVBJMVJRT2ZxV2ZTOVRkai9pSVl3aDZ5SWNmT2RwbGk0MGY3dWg2N2w2aWxlVWhVcDJpMm9SajFFR0phWEVab1JpMUlCQk1WellVY3pVczhYb3d1OVFCM2VaZmtIYlRPYTljcGRWWTFSbWJxcUZsbE1IVFlXbWZRNmxhOW50NnBUd1h6cDZ3M2IzNy8rS2ttZmg3czFPY0J1T2puZmhDek5hZUJkM1hQZ2ttZUZ3a0N2M3orV0RlSm1QaXJFakpvcHVkZi9hbjdRY3F2RFFkQk41NTAzME80SGhDRjV2ZVo2NHpFNldTV0xYcnNDaWNhUkE4WEdkY3BwWjVmMHB2V3ZBNTQrL21yM3BIUW1VZ2NuWWJVWC82dndBbzY2VWYrTUdDU3krdWdPeGhDTjhMdnhxN1d2ZGdvc1BiNDJCWE5oYmswbjZUZGFUNlRkK0hzR1JjQ3VZeWsxRDBrTHBQVDhVdXBaWE10bk1maVN5S2F5ZVhVQzlMNUpuamJrY1VMNE8xbkFFeGRKTklrUHZhZFVSd2xDZ0hOOUgvaTlvcDIrQkx3R21NS2pwaWxhVFJnakxzTUMyRnBFbldIMEl2ZGxTeHgyV0JkQXpLR0tON2laOXhrbkYzUk94bmh4SWg3UjNaWE9ESENpYkc3bmtFU1RqK2FmVEp2ZGJ6LzRLNUZBMUVJczZ2RXFsbVRzRjREME9RanY2emJqalk0bno1L1lZcWZsLzdmOC9BUGpvLzY1SlltWDF6TTNTellUT2g4UE96OWgrOGxVbGYvckRYL3FucmF4eFUvNXdTUTJZMGlqUDVwSnA5TENCT292KzdGQ2FwRzVkcmgwNkZ1OXgyekJ6L2dMSzZsaVVoSFlzZm9XVHI1NlBkWndmd3QvQmljeFhYWFhQQ2UrbFd1cFo3RVBqQjZMb2NQeEgyZVBSOEsybGRtNzdxck1MdFllemZBWUlubVphTHVmV0F2T2k5S2tmV1UrSUgwUTFmZm4vY2FVa2FuUGRTVDB6cEx5Q1ZvTXN4NE1SeTRHSFZWTjk0c1RRcU1aSWtDNExKMFYyVE5zUXY3TW1uWFdRTGo2dUxSZkVZdFNTK2prcTRiWnFiTFBmQ3lqQ1VGemFnNTlrOWZVNXNydVZOTzhYWGNzQXVQWTB5RjFkUDU5ZHdPRXpRbkJXYmpyMy83MjkrNTFlUG5mTkJrZXRlbSt2cmwwOGZmQ09iYmdaajhlUUh3MjI5NlRBZ2FMd3krZnEyUEFvOExkQjhvWE56cm9TRHVDYkVqa1ZNYVh1bjdRWFYyZVBmZCt5OThqb3kzbXJrYnBYOWttOGQvN1I3dWw5ZGM1VE5Qd0FsSWlIZGNYa1I4OTA2dlFQUmxRenh1eE1zQVRua2NyT2VKb3NabjZFTWVzaTFSRWJUcTNoTTRKNEFRWkRUUVpKUk5ZQTJTUkpINlU0elU4S2VvSVhKWnJVR24rTk16UHE2OFVoK2JLVFVrNm45blBlVFNsK0R1MjNKQnF1aFJZYmVCMG95Um50Z29xVG9JWU5SeUpuaG5NamIyWXhvUXo3UVZXUWhweGtpNGtlQXhlaFpBZDNraFJ3U3ZYVEc2am1sMkJWOE1leFBlbWh6Vm83TTlKTXhlSnpaNFJ3aHhsTmVMaTJaZk9pZDJKMkF2ZUpveHpFK1RDZXRTd1hYZUNGNzBOeUpXOWxwZFZVWGlhMDB5YnJmb2hyMlNzcFpWOTJ6MGJJOElYejY4ZTZ1di9mbWl5MzJ1OGdGMXYrZlRwNS8vL2pmZEFYcXZTMzlBSHRXc2EzNXUyOVFFVy9kdkpFN2RQQ0NrVndQMSsxOE1lTjBmcXU1bzZIUEZEMEpabW84RjY2UERvMWRqNnF6YVZmLzE0cWpGVitBSjJ4SGNPMmlrNDdFWHcyZWs1SWkzeXdhTUVXOUhMR0prNEhyaGd6bjZIbU5QZDNaZGhIUkNiQXkyWFcvMkdwSUY0d0hITHUwdHRiaTU4N3RJN05BY1c3aWZ3ZzB3VWxzLy9CamhHUWtlSXdRYjdLVUxjdGxNZVBxMTBFSlljZTNEcjFqUTJWT0FXSC9QRW1TSjByRjJYa3lvVitiRDBVTzZqWHRwR2trdXg0ZlRESHMwcEFiallwK05qV0dwTWh3eTFtZlhNWEtKYllIeWhwL2FqSVN2ZHhwbk1idEJsSm5kdUtSZDZndWNmU0VxQzVyc1Y2a2hockxvZWxmN3NNRzR2QittaWRFeldya2oyQjRkMW9teWNzcXdZYS9wbldtYk9SMkJLVGJ5MUo5eC9OYWZZY1BWSFhjVlA1NzhFYk1Hb2VaMnpnZ3FaaXp5dlAzaHg1OCsvdjdicDNwQWlNOEovUFRUejcvVjd3WDgrNy8vT3k4Sk9HT1Ftc3Q1WkJpQnQrOCtjTnRKUGRMN3hwcEs4YkxIOHFRT2lLcGswVnZJT29sQVkvVDVQb2w2U0VpRFFRMEM1UnlETDJZaFZhWnN2aFZJZnpEQTlZM29mRFpZZFdxWHJSY2VIbzNaQnpxc08xa0tPQzhsTW5ESU9FbVZPUzljNWIrSWJwdk0xY3dBUzlHS1lVLzFRMllNNDFsM2Z1Y0VEeGdrc2MxWTlvVG1tV2JDSTRqSFlFY20vYmJnRUI3RWh0T05GTkRCMkhzTlJucFV0eDhFeHRXTkh0dHpnYk9mY2lIRUdweGRFWVBBOFJtQUx2SEE3dXJRbG1ZUGJDN3RYNjA1V0R0aVd1MzhYZW5Ddm95OTRGM2wzV2xXdTlRRVhPcTVwRm56MGhYUVJwcDdHVUVlY0hDeDhVS0lrZGdZdXl0SWpKQXhuZ2V2eU1jVTBuVzYzWElOY3J3eG9teGs0SFdubi8yVnBoZG1MQWFCZVVtdkJmaS9iclRVTk1iODlwWDNkbXRDZm91TDJ6bG8wdVJYdlpqS2hmTjJMN2Z3YTY3bTBLKzNWald4YW01bHFlZC9aRlFUUjEwYzZVSmZkcTI3WFFoREo2VzhNREROcmxldHlicndkd1RDQWk1Tksremdncmpad2RpN2thUnhwYzRiUkIySks4WVNaWnh0R3NKdVJHZDM3WWoxZ3lkZFJDNk5IZHdWbmtHNlRyY1RhNFAreHRzUndHOWJvdS93cGZsdG1nK2kwR2R4TDBMYmtiaGl3TUZPNEhKQmljdUU4SU5reEJJYkYwYkFSZCtjSlpianV2T3hleFQyeHRkaG41Q2VGNXNscmhTL0tWeVBWYytMemxYcXZaaGpBSGQrbFhPc09pRjFMbUJ2cGlPUnNEY2M0MHN6SUFPUlFBeG92Zm04ZmFtUFh2MDdwUmp6OFpEdTZiRFpyR3hvWFcxVENpdEZjZ210SXJrdVo4Mi84ZnFUam5PM2g0K0NXWWxiUXpUNWpxQi8rWTdQQm56MGg0WTVjWEQ2Z01EWDl1dlV3USsrMTRJNjRmVktWaGwwdHFpM0JjaEpDQlRPSjd4MjhFMHFFWEFvVUx1Ti90VGlrYWRab0NCN2kwVVhkT05mRmV1ZGg4cWlEeUhvRHIxMEZIVzhrTGFJWlZrbmhaRktwT3BEd0ZDdU5wUk8zUW14SDdpc3czckptTmpGdUpTNkJKZkFQOWk4VFBFWXhQc0hreTdobGU2RS9la3BUdW92TmE0ZkFTSXFaZTJHTllQdktlNWNkL2lhN2p6bVM5VFNYR09ybW9XVFpvd2VWUkhIeXB4TFpzQVlDZXRJN0FkR0FtT0ViQ1ROeFZpYWtJTXNkcFE3M3NraExPRFNETTNHQTI5M2Ric1hVUFdPRGR3NXRpL1duOGZULzdyVzErSWprdmx3TEhWN3B1N0tFTXozT3MrSmxjbUliMWJtbmc4Zi9PSWRYbnhjY3pBbEs3YzRub3QxNlQrdS9qVmZhK0ZVVVRPcGtzbW92K0tUdTJ4ZjYxTkg1cnM1UzR3NVhheFhMcEc2aTlzSkMrSm1CMk4zSXlVK3c2ZVlIdHVicWZORXFMTnJhSEdabkdhTWhibmpJWFREYWtGNmxGMGRpVzBqVGZhSDJBK01KVmVhTFZGR1ZGaWt3Z3dTSTdRZFNWU016Z200R005d2xwQTBkUmlrOFlUaFhGNHpoazlFSEpRKzVrWlQrWjFVUW1KRXppRlJBTjg1SmwvaUFXTjA1VU8yN1NkUkMvT2dWWGJ3anRCOElHNlhSOTgyNnlna3NCdUx0L054c1hUeXFHVFRkSlQ1NWx4RVRhbTRZRHJRUmdJWEhUZVhkV0xCbDhBZ0NlbmtBdGs5cjNZejM1cno5SnpnWVNqRVY3cXBlVnp4MDRzNmo4d25hdmhaeUkvWStpcFBydjE1ZkxSdUdOSCs4Y2VmK0dRd1B4akFUZE1hRFB5NkV1ZVcrOXMzbnpsVlZGZElwSWVDeG5zQlZUcG5FUDZ5V2V0NzU5N3lRQ3IzOERsWG9Wem5uNnA0dldybjFLWVlVbmdHUlJDRitrQXpLY2lsUjRyb0VjbjRkTEJjOVNTcSt1bHhXRWRBY3FnQnE1UzJLRVVoM2FqaEdxVGdMZWpDdERpT3JoOXdEK2cwdkU5bTJYVTYwa1djdW1mWmtiOGliNi9uU2Z1eXNDZGpGMW9mZ2NYMVpITjhDTmcxZVgwWnViaVdaZzlaWEV2VHpBVmNtcTlTUyt4dW9ITUozdUU3dVpBeCs5Z2JUb3Bja0RRWGZuQUh6aWJpMHAvTnc0aittVC9nUmZ3QmVWY084a0Q1MGdXNHhQYThsNjRkTkJKOE1lSTlESCtWWjgxbG1vRzFjRi9rSzg5cmF1YlZGM3I2aXAzNWpqY0VORW42VTcyOGdmdlR6ei9yTTE3MXpmMFNZSHBnV2xUUjFkQjhyTTlYRmF4VnpkMjhIdEMwWGhmODQ4d3pvd2drL0poUFhhVElKZGhINDNrYjhaMThDWWEyZU5QY0RVSU03cTRkQ2ZsSlk2K25OR3YwdHJ5WG1vdENTcm9rZDY4RGpkemhuUlBCa0I4WUlWdGgwUWs0RkRnQnR5MFkyWVhXOFBGd1FoQU1kaVM5OHJ4YVFydHlEdXlQY01iV2VxQitkcVd2MVB4TTNuUDBkZXRQbExwTzhJZlFpOFB6VXMvYjhkTDFBR1E4OSs0L1J1Njh3V1AwdkFaM1Y1QmhWSGNEZGdWdmJydFk0enAyZ0tYcHNBSnRKalpOSzdpNXJMZVI5Q2J3dXVidkpTRE5ZMXNOYTFiSVVjckVUazVkd010WGUyOWQwa1BSRis5emJhKzVYYWNEOVl0TDloOS8rcG1YQVh4NWFQMWl3RzkxQjRvSGZyVEY2cDlFbEptZkRYdkROOHU5ODRod0tCUE80Y3dCamNGckNXVWxVNzJKelJjTjFSR2tYeW5PZ3BwdHZiNndKdGYzUTl5M3ZVelhJMEY2N2FBLzlYSkFHYmlsZFhRN21qSFFnWlFtaHBVQmg3R0ZLMlFEZStDdUJySms2WnpMMkpRUjVvN0VGVU8xdGQ0c0llVnQ3dGJacm9EZHErMGlVVERvcUU2NFE2TC9wSkZFVC9MdmFIdHRkOHhMZkx3QWlNOWxXUlF3UmlmRXRoRk9qQkE2RWp2R0VwNm9TM3lKZ3JNakhleGUyMTVudisva2JuY3krTzY2UklvNFZrbmRqZGlkYVp2SllScnI3TmFpNWh3eEtYSEZXSlE3SGpzRzVHNm5nQjI4Wkhad0QxbVEzb3h0WTIrQ0dHVE5vY3k4cVNsWlJ5d0YwNnh2UzY2SE1nSHJia3V0WVlwZm9Yd1NpNmMxK1phZkQ3cjZCMmZ1WlQ1bVV0T2JxUWpWL015ZXdBc0FQNE5ib0NaVnpYdmlLQ0gvNjQvT0RROFcwK1o4UFlnanRzSWZ4RXA4Y2Q4aGQzakNUZWkwMk4zUXFNNmt1MUVGcTZTNHVoMFE0MUtuUnBmaHFrNDV5NVpMQlhmd3FwNDlhVklydkpZZ01SYThOOE9KMGIzWWQ3aHBPNkVobkp2SFJyd1RhVGlEcjJkMkc2SU1OQmRFYUMxMytQU3ZsUWRmakRzZFNoL1ZMd0czelhFMElGZ0gyK0RkNlhlWkpRU1hGUjdFN2lGZGNMSHZ5SmY0SldqQnMrdDZlTTZjVWNnT1BvR01uU0VIVkF4RXUrMGNRWGFEWEtPTytTZWNDZHorUFpnMWgxcnFBQ3VPSm4vZG94Q3NtTlRtbkVCZnlCWVVtblZZaDI5WkIrN2Uya2tmVHNNejhudzFYQVhMcFlsZGhkUUVQN25rNUV5Z2t5L25DSjFNM2tQaWVwMHZBdUxaL1kvNmltaTlnYXgzajFuR2R3VFZyMGpxTzBScnNSU3EzSnZYaW9WempDN0tkUnBoMDBxWG4vaXRWeFNjeTFqWVNweUxJRmFzcnZrSm5EcWdWYWFkS0JTZnNza0dSNWNLMHE5Y0ZNNE5MSjNXVHR1ZFhGYkxtbHdCblpkbXdFS1VMNXhLTkpEd3UxcHNHdzQwYzNHbEdVN1BndmNaL1lqVWlJNmg2em85OVM3b0xKMy9PQzhLblJ6eFhUbXVWdUV3dThMdU5iSWt1cU05ZzMrejFQb0NnR1RSU3ZkMkl6WGR1WUtibWVadVJHcWtyblpvM2R2dGhiQTB3d3krRzg5d0ttb2NpMVo0VVdjaHBKbDBHQTMwSy9wNXVHc3lPQTZKMEpxQlAzTkgxem5rUXphVTVtNGNNVE5wUjdBVHN1RGR0WEFlTnk4REhaSTFSaFptTXV5YW5SWHFxMy91elhEdm4xbk9FNTBJL2lMUG1sSzU4YzlkZjJidHV2WHlodS81MGEwUzNZMnBoMy9HM1JsKzlGRlRPRWRwVGF6ak4xMTZOM0Y1cTh4dDAyYlZ3MlRheDY4eVc2emRYbmU4VWNac2V3amgyNmVNSFhsTUN6OUcrRUZzOUxYTFdnZ0o3TjV3NGcweURFNmdXUE1NWktPdnU1cEVOSFJIeHhPNGc5MjFpc3gwQzk2YkNZK3hwekRDN3RRNUZ1bmtEYUVMWXp2MndOaUxvVlA0N0RJdTBsa3d0T2cveGtOYkFwZG1hSGZHVWYwZDR3WmZCdW91YnpwNEkvUHRNQm4vT3ZGVzF0aTRRWkkzUmx4LzNPaWpHanZHcnIrN2d0aHc5YmJqaXM0RnNyMDZoV08rTjNHa0FJM0llK1lVY0VSRlFjenowc2N3K3FGMGJ4MWxhSTRPaGJNWXlTVTF1S01LV0FKVTVnbm1NVkg5Z0pldnMyRVF3Vm5tNjNkZmVHNzBNeC9nclY4SDQ0UENmR3NRbndmZzQ4Sy8vL0tMYmtwOTVRczYzL0tQc3d6Q09wR1FTVmYrR1c4azlWNmYzZzhBcm84RW9PWm5nVkpraXRmSlJwT25KaCs5QnFqeFJLdmt1TEhGbTk2ait1b0NMWG5JOGZaN3ZjTlFoVWRNeGdJT3dZcUtkMlp4elFyQjFhV0VPTkhtVW82NTdJSFRjL0gza253SlhnUTNpSkJlYXZQSTNMMlhLUzdCSG01Q0Y5K1Z1L2RGdThJUDFsMEJCK1BHMmdOMzVDYjBCTjkrQ05oeWNIY2pBbkVGc2ZGYWZNMXlITFRTMjlVV0pNMFlTMVJ3ak93MEFaV2paVEhldmJGak9LU3Z1eXQyakowNVhicko3V1VpYXpONEdjYzU3NHlmamxzazRsM0VGM3p4anR4YmVQQTcvbzR2aVhvemRveUVnL1FGM0UxTnVWeHIxek0vZFFrbDJKT1ZKdHI2emdmbVlxNytlZE9XTlJZYm10bTJydkNacCt1ekxveTE1bXE5SHFqcmZnbXdBV0RLVXpPZDF2VWJqeTVwVzRzL2w5b1dCSngyVjdzUDBpUy84TmZaSDVBdUNSMjB2U05vUGdiajNZMGVlK2xkQ1RvTmFubE1qbGVuekF6N1RXRElNWXI0Y2hiVEVyVWt3cnU0THZrR0YxZkFVdEMrYzBiVWluanNpWWhzZXlJclgrMjVkTTdFMXIrZDArMlZkOVUrVlg5RnVNTklWTWZnOEQrVEYvNUNTN05MOVl4N2lMM21KenhnUnhJYjQ3RnlhREdLZjJ4Y21yaFlreVZHTkhmRS9GN1NKUkt3NTQzZERaaFdNeGdYdUpjZ01hZ1lsd3RPN0tTZjFBQVRoWEVYZFNtMUt5ZEZkSXpzVENQaFd6L05zOEcyOEFRellVL0hiUW8rZGFHbUYxMllNd0tLVUNwNnhuL0pVcWVEK3U0Z2RkbTk1bU5nYi9qS2lMZHYrYm1BVHdSeXA0aVRDNmVNN3orODE5Zjk4RmtCdmxWYWkwTEFlV2VhYTN3MHYvdUNyYmNIUUdvSThiL25VMmE2QWZYdTdmczM3eUhyTnRaOEI5czFVYk1TYTRuaFRXYVFXd2JzYitvQmJrNWdvaXNaUzMycmtiYmJPTEtBSW1ZRHhDb1ZMc3hJUW9wMkhKakJFM1ZwVkpRODBROXl5US9OM2llelhFb0Y3Q0xPM3JQc0NJRTlKRHF2TmY2Z3lGN1lOd3QrYzJDNnpJVVJJcnhVMWRjanNNUUJQdTNka09kTUZqRDVpNzB6Ry9Gc3NxdnE4RHoyV0x1dFBQU1Z0eEhPemM3cHRuUXVDMjZnK0V1ekVNWDJwWEVHM0pGdTIyMGtSeDJnRWRhNlhtckg1M1MxN28wTXQzK1dkRXZUWVFGajNNck4yanJCVVRtMHppSmprRHZmZHU4RElXbHFYcVRCWnM3T1pzTmYyb0NEQ1pSYkc5WGtEL2ZZTldOeUxjL25xTWJudHpTZHM4ZjZCMXhLVGhPMGZ0bFhUL3gvNEs3L3gxOS9nOEVqUU84LzhNUkZmZWtWMy9GZlVYb05VSTluVXVkU3ZmckkvMHpTOVQxWk5lMTJpanVScmlBd0xualZ3ZE4yWEtKNmN4OGU1VFRhMTVkZ0NJdDNhVUs3UTF4S3ZMdlJVMEFXdjBZbGdUWkN3eXNLSjU3NnEvUFRIQmFKRzVWVlBPM3ZCeWpsUTJqVUxNSmNZc2VZbmdzeXJwM1d3ZTZOYlNQTjZNZllYUTI1S0RXQlY2azFIT3hoY1VVcVJnOS8wWDQrNm81SkI0NCt2Smp2VEVEek9JclByc3VXYTNESVVrK1g2cG9MTGE3Z1FjaG9NRWlhR0IyMEhiQWJpT0FOVXBwc0xMQ3gxK05hdXJhNGVoUGJmQnQyUlR5R0srK2NuaUswR0EvNG5TTmFVZmU4MGQ5Y1kwcU1UamVJTWovaGVJRjZjeUVveE82MkNRNHdrV2ZqVUR6akw3ZDBuaGtscUxacTlDMDJpMldPR3B1R3Mwc2RqK1RVcFQzQkJITEg2UE9uajF5eHYvdmh2YTcyUDM1a0RjNHRKbjVQb0g0NStMZmYrUkFhVjA2Nk02VjYyY01nMU1sRFgwQ0hwZXkrWE5mckJMMEg4TzdEKzNkZitQRVpKWEpmaUIyVmFGS0VwakRKamNwSDdVNDBOVjM1WUhGT05FbVR0RGE0OHBvNWJLdlYyaXZVaGxSOVhxRjVwbW50MmNyZkJBYkJ1QUl2NHkvQnJuUXBkU0pVNDZSemxYMFBlUUhwSXJFeEVoYndBUkxYUStQUWZFaDdoWE92N1JYQjlVTmdxcW51cXRiZjJqblNlUnRwd3REKzVhMCtqZm83OExpV0VEY2RhMzdXY1dIVU1TQU5lKzFTdTVZZEJHRlhEczJFV3FQZ2ZwMmw5TjJSOWUxZ0p0VTJkcmgxdHQ2SjEvYUVjWFE1SkhsREFQRjdnQmdzVnZQeDZSRXVoTU92Wkt1R1dya0xZMjJZOEdrTTNnUkcwMy9TZmZyVkhTMzh3R2NscDVGWm91QTRzUldhVHVvNURQcmhxUVNSemdlZmU1VGs1ZUovUGJ6STVUYzNRMGhSL3hVT0FZQnBsdjRQTnNaOHFvZWZhcUZydkFCQWt5dCtwOE5QODlQdi9IRGpaNzZnN1c4LzgybXRIM0hwdm94dXlmQUZEQjlVMmZpR0gxNHFLQy9YOWZ6UlA1YTVuY0NSOG41ZDVWQkR6YzRlck9uU1h5M3NRQkFxSW44dzVrNTRCSmsrbU9MREdkakpkZUFMSWMwWVhTUWc0eG83aGpPa2VUWm04VlZQWEpmaTh0YitvRDY3L3RhTHhDNUduWWNHUDY1YmZkYzY5Vi9rZXpjejdVVnlhUitEMy9sT0cyUTNabDJ6NDJsYmRJNkRQbHpZbHVnMHJDdmdaemxlQUppV2pZaXZCejVqbjBQcUNCcEg4Q242VER0YzVIdGx5bU04cSt4eDRCK0txK1dTRG5SMHNRN2hBOFdxT2pSdjFCSHBEUjNDVUtuZ2sydU8yQUZPeExIR0QrK2NxZkFHakJGd0ltT2FzdVFFTlhrbGlRYzJyaFNNZ2N1NE9iMDVjWDFicFVQc0RTYzZNQjF1NDloWUZtOHByRWxXR2JNKzlQbHRLdFFVM2g0ZkhjZ1k4M1NIbzEzSCtwNTk4ZzlYT0RaRzlvbTY1bGxGb1cxSHNCYzBVYjNqOGZvczRScW5zRU9PU1UvNE9OUEs1Tk5mczM2MEsrV3hFcUc4NnFQZytlRjcyV1NsWE01U0ZjVk5mMGR6MmMrM2hQSy9jTTVHYno1OStPbm43My8rRzE4UitoLy8rQSsrS1FnVm5WcjQvdEE2dHlIQk9VYm5MQlprT1YvbzFNT3JBcDJDU01HYWgxUjVtZ2hCS05RT29tbVc1dGV2bk01VVhDMnFUK1ZxQUdBNlZwdVdPdG5LVmYvbjMzL1ZSOTcwWVRhdGZOSGhuQm9YMzlnVmZXNDRoUjBiMkoxVm9zTGxxMTIrN3VOVUMwY1BGL1pvU1I2VGt0ZURrU1plcCt5SVFTTWFrNHNsVlE1ZndtLzR2V05qRUZwWGoyRUpHTUVrQjlsQnZMTisxN2tXTnNOaERkY1VVWFBhazNYK201RE83R0NuTDFLbUdld2hqQSszVVBYRVdsV09RUlBhVTU4QjZQbFVFMTFJZjJNVWlaUmpSNXY0S09nc2NkREFpemtRQlk5SUI2bzlSN0JyQkl3Ujc0N0VoVEdQZzFWMmp6S3lKNS80N09GVWJ3cTQvRy82OURkOEdTSEhPRkczckplMHJ2TXdQS21QdksyZUVYcWtPRzNDSTNhbW1QVkRtODRqdG8xd2hyb0MyZGs0MTBIVUFxSjEyVHBGMGE3M1V6RzBkMmtTMWtXLy9ueitDRmVYN2xvYzU3QTNQT3J6L3YwUFB6Q2JmcTlmN2RWa1dpZTVLZ0hBMS9vY240cGsza1VZR1JYajcxQ3JhVlNLZ3BaRnZvSzg3dDRkNmQ3RnJweTNVZ2VaQW85R3N6b2VPd2JFMkl1eE5NMmNQY1dwZE9GME95QUdmSWM4eVVmblV1b1M3SWtxN3VWNkh1dmNlcXNiU2xlZFNWNGxEVkxuMVNBeU1qNGVBa003V0NmaWczemVtMmF1U0FDc1YvOHRkdVJ3RkR2ejdocU03YzlNeE1YZjhZSy9zeWFoWTdMWkQ2NzN2SlY0MFVaVFIxenRTNjUySnozSXU1TkIxT2thclhrQTFrUWh4MEczYThsNENSSURyaUtybHc0eEVsYzNZazgrZ0hiTEVSaWplTDJBcFp0eEJWOFZJdFZHejRrU1FoS2lETHFNU3F1aEdHcXRhNEI3ditEWDRoM0phbk04MWErcE00M0oxOThVMC91eTlPSUIzNzFJckJWWm41RFRWbFhLeGF1eFVlMXQyMHRvYVFxYVMrM093eitDcDZ2LzFTNC8ra0xhNWhtWDEreUZPazZoZVBlV3JTWk1mWlpNV1hoSjhPUFBQL09zS1o4TjRGekZCUmFIM3NkUHZ4T0N6UVVXSnljZVBmMk5rNWdpZFFHdmFDNzNhMmp3K3ByZUx6azRhSUc1aXErVVNzelc5QmdpWUtQcTFHY0tSSzZhS2F2KzhjQVJMTTUvWk5aWmo2ZU9kQmxmZVpWVWREVXJ2MldzYWRDZVdxL21BT2M0SEp4dU5TK0N5ZFVwMkMzWDRybHFaaDV6MzY4b0o0d2FUdTNuR3EzeUVYQ0o0THNwdzl0Qi92c09YaFIybCtXNXF2OFFheG1vbHo4RDBMTzU3a2gwb3c5UThCNXJlM0V0emZDRHg3Z01ELy9TbTlodVpJdGRoZ0NhbkpDK1hSc29ZbGZvTG13M3ZUWXR5cGRHd0I0U3V4c2VaeVBCOXhSQnVySHo0KzB1TG1sb2pvRTY3NzA3M2dQakZWZ09WMXZYU0RwQWFUSlg2Z3FGQmdRdDlhS2dHaTVHdDBIcWlSL21SNzBJNEdWclBiUlByQU5ZdytST0NZdC93bDBIbjJaSnZjMnFpVzB1NUtzSmtUOEQwb0hLSEt3VHkxaDhRVFpiK1d2Q1FZdmp6aURCNGdvU0l3U1FLbmlFaEdBY21wSGdRWGFEMFRMbzRjVld1eGFITDNpQnl2dE1pdEJpcEtRWXV5dklwUkZ3VjRpckc3RTdIekI0TjJLSEhDTXVHNWZqM3puWWUzTUhML1ZOdXdxSHZtNzBrQmUrbWVGMzJtNDMycm9mbXR3SXAyalkxd0VuMXJjMzd2TFdPMmtYc2d1L2I2WUw5aG02SkFlTWthQWR3UlV3eGlXZkNXNHZOY3p1UWdlOEl6MUx0M3ZHQjFHaHhiQklzZ1NQa1N4Qk1QNVNQdUpkMzgxOTdXRnhNZWJITmhrQysyY0hsNUhjTlkwbzVIN1BqbUFNWnovVTZqZ2wxNW53anB0Tm5KWksvSzNQUGx6SzgyN0FQMy81SjdIekZqK1g1YnBuLy9uTFIxNEQ4TVU5VE1xVXczT3RuSS9xSVFFOXM2cXU2WU5xZGVsZVgwK3FKbThiMUxXL0t5RVJJR3NGenNXdWdZK0h0M1ZTNVJQSDlUTUdlRWludDZyclpZek81L3duVkNlSE1TZ1FKaUpNbzFWZFRsNUZOeVQ0RHVKeW5kTXdWMnR3MWdrSkxZeUZjQm5TRlJMNFp4blBsUFFOdVdhL2psQWphUzk1SjM5c25ZeFkrSC9RV0xKYkRiQStIRmtiQ2VpT0ZMWTVyakZrRzJtYTNFT0NYSEtzdVhOQ2pyRnpsbGdUekUvVWJqeUk2Z3FtSmR5dXhIWThOb2IyOTFxYXFYYWFOdExjWFIySkhmNmRFWnlRUk5uMmVpSEV0ZU5CdXRIM3lPQ0xpQ1lZSC9DYWNMU29xWGw0dEFZQnJONXBMUytybXJ5S1hZL3dmUG55U1kvOTRHQ3BLL2doQllnRnd2SXpkMS9xZzFsd2ZCRk1rOXN1L0ZRanN4N1Y2cXEvbUV3L212UUtBdlNFSk1VWEZ1L21uYlFqM1h1eXllWjJqS1VaM01iU2hMd2pBZU1LRWlNdUcwdHowbFRiN3JvR3Q0NHN5b21LWUpCTEkrQWY0U01Tblc3RWpuaU11R0xFRlNNdURDL2ROYkZqNkVBNjRjNXVVb3o4OVk3Uk9Na2pvMnVlSEszUk9mV0NOcFBRUWVxY0E2MXFSa0VkZmRwR2xnTVErcDIrdmJ2ZUhaOURGbktpUWpNU1BCazdzbWY1SzVGbmh5MUQ5S3BpMHZFbFN2akR6QXlJWTRkUjVJQ0xHczI0WW5Ud20vbW9KVFo5V1ZMc0JKQVVINi9CTHRoZHU3MHo3L0x1c1NtVk91SUZSTUhMaCs5LzBHY0M2Z01BYkFpZGcvanMyZnNQZkVWUXZYbE4wR0J5NjRwVEVWOUdRWi9HV0hEL1N5ZEV2VXpRWlg1MWxuY0xPR2Rwa1k4VDNERnVLY0NpckgwR3BCNE9FeUwwNUpCa0NGRVVFdlUrZ3g2bTVleG5wSG9rdXhhTVF4Lys2RzloQ0phZXFuVUFGUTJDeEE4YktaSG54ckowSWVQbHlwWExySXRBSEl1NGtVVmt4UDhGZi9ic0xpQjlmNURUNDFDRVkyQnBPcmFVYjZON1h0c2R1UTM3VXgzckkwQ3B3MWxvTHNhU1BZVGdRV0pjS2l4ZU9JV3M2VUtMc1NlNjFBOXQ5MGJxR1NNNklRZkJDQmpEb0pzZHZDUjN3aDRTYnpmWXNYcXpGOU5UZER6OGdFRmlQSENaODREcFdFMHQzbHZxM29QdDNQdG5yb0VtRDQ2aUNiSE5Xait3cm1kNCtLelZsOCtmdnRhYkJDQXN4UVlZT3dhM1c3Z0hvNXYvMzM5ZmNlV3ZWd1UxWld0cW5DOEFNSFdYUmJobXcxS3JQNmNqTlQwL0craWVnWEdUNUF4ZXRKVHhabGxjYVhhRHZMMFpwUjBNWW82YkFSY2pUY2l4ZHlQZXVCaUYyTjNvZGkrZzIrRkU5dElJK0R6L2oyZDVuS3ZyMjg2NkJ3TDI1aE8yOXNNbEtzckIwY251MXpVNzAvWmpiK2ZmTVVkQm5mcUVIVFh2cnFuMmlkQkJ1VDFJMnZqc3NzNjc0dy95RW5MSHYzUmRndFkvdTY1N2NPYk16bTQxZEZxMzB4RmY0YVdaQXJTOWptK1JYL3hIa3k0anE3Ym1yV0hIT0hqVDZxN1lNU2JyK050ZHNXTWN2TExBamZTZWRudmgwOXk5N2s2azloQWpDK0Z4azVCT2NBcnJkRHU1RExMbXVwK3psV01aWnM1Sy8vcXYvNnFmRFB2MWw5OSsrMDJmR0g3ejNRZFFQdlRMcnd2cllkUmE2dUFINFZ6SXZhcTZQY1hQaC9IT3RYNHFtREZDVXR4V0ZXRms4ZHBsa0pkQVhlbmpncWx2Q0VXK25HL1ZyTGNVOU5FNG9WRDBVZ0FGWGxmclpseXA2VFgyV0dyVHFEaTVpMUpmakRjMjJJaFIrVFBnTkdLdUxhNXVQSEFwejl3bkV3S0MzUk5kMHNML2c4WlN3SXZaVGRpVExnWHZoRVg1UVY2NytucFgrNE9JaStraTZ3c0FmQ2t4N0JpSjNCRzdndTlHWXAwaXpUQ2ZWTGpqWHdvdTVKNDZMaHRwaHJQanZjSmIvcXlqRTZJWm8zdGo3OGJPM3psR2dpY0VvNVljeTJxRkZzT2s3Z3B5Q2U2QjRnZlZEZmdwVUROS2VWak54ZVM2K2g5enFENEhWWmY0VVBRVmFYcGhBSXREaTJtSE9SSDErcURVVzEvOSt3V0FaMHpkQ1NtZXFId3MrTXZuZCs5LzBKVFhGb1NRQVBCNkZwY3FNWlJ1THNFbm9MOEdMMTJkdHM1ZjNlY0tnNlJwWTJrcVpmVW9lSkJ1WE5wTFlCUXdxcDl0SE9hMGZocVpBbzJvdzlYcFJiUG43ZnJnWHY1cS9wK1ZwZXRncHk4TDd1WWwyRU4ydXlNVnptaldvTTZSNzhyWTV2Y29kdkNGYzlsTWlGOXA3NXdRRnRjb2FFRWZOdStrSGdhdFRnN1JGYXAySGUvRFF5S21oSjNtQWk1ZE8va3ZROWI2VTIyTXZ5TDFtdldjZ3pIeDRBVG1rbTlGNXV3SzU0Sy9LM3dyUHh1b0Z4Q1E3SDJnekZtOGRMWWpTMGo2ZUdmMDJHNmJYNGl1aUZQZXdRR2NvdkVhNFBZL2V5NW5JcHFjcXJqYzVuOVVQbnovb1pnNkk5VlBodkZqTmZydE1IV1NjNVQvY1JWT0RvMm5kbXdXWGtQb0d5b2cxVFc5RGw1aHRjOVRnZitSNld6NFVTSkFxcFN0YUozeWRCNVZzRDROd01zRVZJdkRDd1krK3FrYmNCRGxycHR4dlY4RTRTS0pFMFBwWG5lY2RkRmduUllsbFBLS0EzYitUdHVSSGhKdkZ6a2xQamZNUDJOcVhSWm1XbElrNmhrazVGY1p2UmRQWnRscHI4cTRrMTBENnl4dy9welBBQ3pKU0xBZ2FkNjVGanpOR0ZHd2NZa3ZZSm94RmhHYXU4dklqbCtTQTNZK3RwdGV3L0ZlbUdhTWhNZDQ0SUtUeGJST3RtdEhFb0x4d0x1NGxtWVhXUkxCUEE1OVpwWnFDTlF1d0YvKzZJMUpXWE9SQW5iTlV2eXQrVW9jelgxOGpvbkpzWjdrSC9YcXAxVDBjSS91K2V0YlB2VjFCdzdWcU02SjFTTk1VZ2k4QlBHY3hManJuMnR5M2VlMUpsc1Z2Tyt1UjU4VVhuTG4wTFcxVHpSQllpd3h3V09FWUtUanNSZkRwUytnZGE1QmZRQmE0NE8zeHhvaHNCczBkeEVqd1I5d0xsMlhZTlIyWStHencreWNJQ0h2U0Z3MnRPUE4zbDJTOFlaZ08rdG4rT1owWm9WejRoOUR1cm5rRDdnYnlYNW56SkMrNng3YzZUMFFXNDhPajVVNzJuZFNOL1JyV05jbVY4czNpL2Nkb3d2dmVKQVkzOFEvMVk4VUloUWZJNW83Z3F1bjdyYWo3a0tTWWhrbDgrM3Q0bEdPNEk3OGRmd1VtZkxJdFN6bWhKQUJEQTJFZ1E0QmZBa0pjekVVY3RwRUozOFg3UFlndFVrbVlhNU45ZWlzTWhhOE5EbDVjYTBQekpmUjhhMFVIL2thNmw5Ly9lMjNYd0c1ejYrUHU1QkRsL3VjSCt0S1hUM1NXWkUvL0hTQWxqZnY5UEhlcjk5OS9zaDMwSTBwamhEbnd1QkVSeTRqMkxXN2FhNldST0dxczRxaWhSTHZRcWhaajhGV1d1WGxEQXVwL2xscUhTRGFwQ0JRNjlLVGJJRUt2MStxc0F2Q2l6b0x3YmxZTzExa1k5eVg4STJlWGZteXBNZmQzM05Qa2NOakpPMGxiOWMvTVI4T2U5UmVORTZha3cxNDhRN0E5SzUvTGNGNjM4NEM1MDZ6aGoxc1czT2hCSXdSd283Y3VTNlpISUo3OFZIQXVJd3k0ZEsxZ0lndlNHSjN2Q1BkVG9pTnJNMjVIR2U3TGtXZTJYLzJ3TWMxcENTTVl6em52ZitweGw5UFRacEsxRGlXdkI3UW5ZcWFsZDd3dmN0MHJkNHI1YXFlaS9qQjRjdVltUjdydDMxLzhIMFhmaytSaFJjRCtpVUFIb1dVdU1yZzB2LzdkKzlwNnRxaTVtZ2xQdXB6UTIydWZCMDEzU2ZTQkNHSzI5Wmx2bkxWRDJ5SEdybkRHYVE3Vjg5c2pqcmJObkJzak5pSkV1TFhNaTBxdEJnbi9tekVHMk42UmdFZGo3MGJSQm1NSzhpbEVURDhWeGtqWFB2Qk1WQkxBYnVnMkkzdnB0Y2hkL0RTdFRCbmMreHBzM21TTVJnWGU4TEpmZE1JLzdLTUJDMjBBNmVuYWJ6R1FORDc2dVVlKzdMU1RlZFNwN3VmWmdRekxIWTlhRVpoTjFBRGRCZXNIUHZTdU9RYlRMaU5yQjhYMW91L3l4aDlFeHdDK0NSL01EWFYzWWJzSS9NQVdlcTVrMDNISVhoSndUVGRpNFdUcnBtd2VJZkthLzQ4Vm5qZ0hTNmRVUzRPQytyazBScXUzSFY1WFgzaHBNTWpPSnlHYUN1Z0x1a0JPRlY5L2FwZm8rZThWaWMvZmpzWUlpY3NYZ0s4NTJKY1p6NU9mVzk4ZTU1c3VrQW5iV3JENk1OaStSb0QwNDZSWkFPalJRMmEzLzAwN0pzMy9CaU93a3V3UHZqR2F3Z0F2aVZEU1V0SDNHbVExMjhScU50MWFGWnYxaHJHVVpPbzNhajZsOHFQVHNIZityVnJDSG1TZGgzOC82TlBqNERlQWVoamZkN25Uaks0WUFheUhXUXgwbHo0Tkx2TGRrT3VaNnRIVWZOMVBudC9kR1MwVW0wUGIrdEY1OGZ1dVFBNWF1enEzUmRTK2pwS3ZMTk9nMWI5cTNaYjdmb2RNYkVqM2hBUEVMc1dRbStpV1NKZ3gxWkxvZzdHeG5CZWFBRVQwa0Y3cS9zbFRncG1tMXFLcjJsR3R6eHEwYjJPR2pHdHl5RnF6YVBqbVo4dlgrZVhJdFNjVlZmL2l2cnk1ci85NjMrcGZpZ1ZqLzFRSHQveS8vMzcrckxudXB6VmQvKzgwKy8rc3RCaEZjSTJnKzEybVNxcG1qSnFsaXlDR3BuNGpBczZsa3BRL0FOcmxpU3ZsdUFQak1TWkV5WjE2cCtYYVRCcUp3TGVjc0VMdnVwc3JncFNSUDBiZ1FtZlhpVU9pQkg3RGcvQnh0THNVYkhETVpKbU4ycFhlYlpJZEx4WUlUcUFlbEZaZTJqQUdEMWt4TmVmaFZBaVk0czg0M3JBcWFHVjFFUE9xSVV6T2hiallISVA2WU16MlBVSGp2Zm5EdHJ1NFNCcGpyMWhEM2dKdVN4c0QzS3BPejdlZnRybUdVb3p1ZnBTVys0Y3ZPQWMvUFl2aVpnOWpqN1d3WktDTzc5SHhkNE5RZ3hPRjdNTTV0ZzBFencyRm54bmo2czMwd1YyVGsrUzhkcHdoUmF4d2hIU2Rva1U4SUNmOFRTbmg4U09FWjBZM1JVN1JtZ3hkaGRJdkJqdVlMb1piNHh3ZGdSWFFOMzZPU3RYRnMvWWMvZXVYV21odVRuQjgzVkNTWGhWNXhxWmE4RWcrbXpaQnpKNTBReWpoNEwwR1RadVpuRVhuNnQvbnY3LzZhZWZxUGYvK1IvL2cwMU10WnlrT0ovOS92c25YaXp3RmFKMWRLdSt6M3pseGFkUDdNYjYyY3J2Zi9qd1RrOFFnYUJXVWRxOXFVSGl0V0N6WUNwN1hmVG9iWEJmcGRTSGVvbWlxZXNXcXRHSlY0Y0MrdndRV1cySjhUb0JWUjY4MVI1WXNqcHZXZ1JselppazBDNXVOYWRMWGpkWkd5a0JieG9mRWFjdGJ1L0czR05GM0ducTVUd1BZblFiUGw3clA3TitucHdza1gweGR0WTRJcWJDV3A1MTdPMmF0VDhrMjJIMDdYNmdtelhURFVkWERwY1U3TlhhRWZRR2tiKzRkbnNIb05lWFNCdGR0TnNMN1hHekIzYjdjVlQzTGxGMWpIZi91azhzL0tWSjVJS2thVVByYk1ReUJtR0NaNzZ1ZzcwRVB4VzNwWXQzNFMvTng1b1IyWTFkWjBlNk9PV2JNUHR4U0lJYmpJRXZOZ1pMSVpxcW1IYnNaUStXd3oreXFQc1QraVlFUFRlcEx5eFFnSi81NGVGL1BoYWxYWk52L3YvNGtaMlZDYlIrM2t1WFFkNi90ZVovVFcyc1JLNW1QVVBwT3lndzYzcFByb3BDdit6MEpzYllVSE16SGppQnRSalo4ZW0vK2V2VU9HT0UrQ29rNUJpN3BvcXZBdUc0cDdNN3ltNjdHMHNsbDhvQll6akt6VXR3THl5MEY0MDd3aDNlaStsNXY1bHZ3UzUxaVVUZjNydG14N3Zkb2s1NzFNNVpLakZob1QxdXB2NUxZNG05NUR3RFdzZUgvRFA4Tzg2aTA4dkQ3dnF4TzJjQmx5WkpGNlEzc1h2MnBOc05kQXkreU84WkhjV2F4WG52bEUySWwyYnNTK05WZk1nczFtR04vYUNZNHA3NHk0aEZLa3diMFErL0U5S0xEbUtubmhnaGdGRHJvZ1lXcE51Sit0TU4wamxSbFdONW1aeTZhaXlGd09Ha0pob1l6L1RybXFHV0wxLy83Yi8vMnovLytSKy8vUExMSno0WnZyY0lyUUFBUUFCSlJFRlV6Rm10WHRYek9XRGVTOUFMQ1o3T3J4N0Ivdmp4ZDJBdXorRDRLbzFUNTdqblZkZjByUURKazVla25EMmhXVlpYN29YVGhLelJxMnNYR1pKU0tncXZVUWZUMlpQQzFZSHFTZlVJM0V2T0pOSjA2aGlUYy90M1oxNGl4UGRPZGJtZDM3M1lMeElXL3F1YTN5RCtEU0d2S3VrdklvOUhnQjVVaitzdTkrN2FFY2Z1K0k3QUJLeERhMlFNSjBZcWVRWUoyY3E5R1dUUlNUT0dEcUk2S0lUb3NCOU40VlZ3OXhZeVhxa25YWk1LVmpwSGEyMDJ6M0F0SWtzVC9yY2hTNkJtQ2pyWU5uaGtydzNta0psYUJGM3ErN3BmbHNYMUVwYnBwMTRHTUg3OENMcG1OWDFWQVNOWmt5YlQ1dGMzM1A3Z3RnZGZwTUNNd0dPVVhQcnprQTh6SWE4VWZLMnZtV0pNYTVoWVRIMnNiSEFiZzBKcU8xVko4bExZT3I4VUFjZHB1UUZWL3FWckJLdWViUWw0TnNROEk2Zkk3dkxZR3dsK0dTNnY1bkJkNkx1blhsczZkamVtemxGUFVzU1luRkZ3OE1WNDNGeEUwc1RvTmlMUkNkNlJvbDhQbldraHg0ak9OTVptV3ZpTHNwc3pKQzBabDRGbTdFazdrbGlUOTVEZ1M5VHpnVkZvSVJlN1pmTXFvcWVEZlIwZzRnc0xoM0NYZW9GOWR2ZWtYUWRCVHgybVc3OGpaNWxUcSt2Z2NOUmRoU0hIaU5hT1dDM0Z5R2dkNlB4dVd4QUVZeW1qMFNUVW1nNjZSWnoyZVg0MmIwSnNzRTVWaThzVmhKWmV2NHJmUmJDVHdyaVIyS1JZNnVtdWRObGdIOGtFZGo2MjFUcS9JK0I3NEluQWpqMUZ6T3g4N0JwVm5jQmdWVk9DTEcvcm9Sb3V0blhXNDVUM0hiOVg4OFBmM3I3bHkwUDVkcUJmZnZtVnp4RHo3Z0NuTm40NlFPOWQ4MDZCMzhKQ1RLOGkwTkVOV2pnK1JVcW5Lb0ZHaGJqY0tWZXJxM205b25pclo1dTFTNHJna0NFN2QxUDRYei94WWVVdnBIVDNWU3oxRVVDazVQaXJqd2lyT1JidElWN3dHNCt4NEpONC9GMllPSlRrMFlHZzJNNkp3bTZJZWlZYitiWjE5SHY0SmRnSi96bHM3UTE3VjBIY3ZXdmoyREhHSUZqaGt0ejJwN0YxbDRFN1JYbFhMTVlKbnpFQkp6RCtCbzloeDlJRTdFaHNqRzZmWStudHhXamM4MGRKUzY2ejVsT2N5eFNNNXlWK0tKWjE1cHcyV0Z3UVk4ZWdyNXJWNWc2UXljRDY0UEhLcFV0M2lZT3pjSGxmOXBpekFqSWh3dUFmTHd1K2ZOTGtXSk5VZmNlL0JEVENuNW1ldnZJZzBEdCtYWVY3L3g4K2FNL2tKY0hiOW1QVjJwZDBaYzlmVFo2YXdtUUo0Wi9xMENzS21sSVVDV1F1Z3FyVUNUejQ2N2dlUGNuUzdWUGt3SHVxMkRFZ3hZN2h5RFR2akIxZjFTWmovajF5cmN4S1dUUjFiZUduR1plUjRJdnh1TG1JcEluUmJVU2lFN3dqUlY5TDdXRElNYUl6amJFZFRiaWtXYkRMN2tnUHZHVHUrdEMyS0lCMXY5cVJxOEJkcXRjbzJ6cmUvMWZmdWQwelVzMWEwSm44RjdYdWs0NUxEZWZWckhKMFRVRkducW1LYmo1UGZrYnd4TG52d0luMmN1TjFRcTlqSy9zTEVReVI5NGNZeEhSNzZVRmNNZTc0SWNRdzA0TFpDZkV1S2VLcWlYdzRVK1FsZVJHQmZJZkVGUVBCa0ljeHg2UzduTGRGTWJDY0xMbU0xc05tODRLN3BHaHptT3MrL0J0T2R6enc4ek5mRXZTQm42dC95MXNCcE9DOEpnSjN3ejU5WkZWMDNmZ3ZVTmZnNUtKcFRmZ3N2QjRJelpWNHpXc0dVaW9UaXdheS9xOFE3TXdHQlJTMTB1azBycmNyOURoUW5mRHI3Q20raGx3U1kyRVlPWnNyTXdwZ01TWmhEQjE0a0JpRTdQZ09ScmtIMnI0ajQ0M3lIaDRkREhzN0Vqc0tvWFhFNElJazl0TG9sY3k4R3ZOTDhnSk8vZ0svZFBTdTlGZTN4enNBeEZIQlVrU2FNYnA4UUJ0TDA0SlpYd1oyYjhJN3N4TzZIVEtHOXVBNWc4U3dTSnJQR0hjaHI4V1R5NEdzZ3p3d1hpUS9pSTFyS1RXYWQzZ0NZOEI4MFE1aEdNZUJyeDI5THZKdDROZExnb0dvcFFXS1poM05kZnl2MG5neUVnN1BQZkxiWG4vNzI5OTg4NE1iSk14L2ZPTS9NeVJVTDNYVUt4SVZYL2ZYQkljY0M5ZjlIR29pYXhxVGZTeWUzbzcySTRzcEVQZlJxK0lleldXaUkxMFhTL05zaUhOR2V0QndEY0lVZEROUmx3cnVZemk3a2FpNE5IUnpmRTdHT2EvcUt5U0JOcGJtcnYrWUp0bFp3RFBNbmQrUlNIVWo5aXoxZXZDbjEzcGp2WU5CWWlSZ1FkeThCQk5TWFQvdE1MaVdrQ2VScGlsekYxa0l2ZG5KVkxNVzFLbC9tZDJUVWsvTkRDTlp0M3VwZGh2cG5OUzQ2QVMvTkI2UUwxMHIyRHF3dWk3ejNZSVNla2JCSEtkOW5wL04remlFOFlUZ0dtUEgyR3Z2cnRneDRIYzc0UXRJRTFmeWRwcHR1MXpXUW5ZeklYdnZGTnZ1SnpwUlJKb2hqVDI4Q0o1Zkw3d3VyTWJXbDlHNm1VVkkzZGdxUFQ0bVVKZk80Rnp1Ky9MOXYveVgvL3Ezdi8zOTMvLzlmLzNqSC8vZ1pBZWZSWGZONms2OFBwdXJXMXE4NmExWEZBUysxMGNGM2hITG9yY1RkS0pEM0FhVWFuQjlQcjRVQ0FGMXVXQk9ZdlVabUhxUFhRWHAzcGh1ek9tTUxBOU52aUdJbHc5NjZVQS9hMHRRQ1FWZzZtVGFGK29jNmFiUnZkaG53dUZVQjdkTkhQTEJhd29kakwySFdEbmlhU2JFaHN0ZVFEY2QwZ25QSUl2VU40UXNDdjlubSt2WGdLWS9ObnB4dzFWUXZERTZFM3ZISHlBUFhKRU5aekhTWEpqQkZ5UE5GR2trK0dhTW8rTnAvaWdrT202bnVSc0xZY1MzTWV3aGZYK0ZHZGRERVIyRVdaYVFTL3lTRXpBR3NiWjlsZThIL1kwd0ZkYjBxMGtSRXMwUnBkZHNtc0xBK0htdld2U0hDWkY3LzNYUFE5NzY1bVNKTXcvV0JNS0VxTWNsTlJucmRvZis2TXFGdjdyMHp4VytyLzU3ZjJ1V1RDZFBobHowb0dGR3ZHNnd6SjJzNUNIRjNnMEZUMllNQjZhNUc0bUtLOGhoa0wrVXpYbkVQR3BnOEVZOUo3NU9CRm9DeXREZHFCTytOTU5mOEtVWm1oTE1GT1k4WnU3OGprU3FHN0duc3VxZjlvV0IxMHM0RTlEZmdESGlYUkEzTzlqdEdRVTJ4bk1pUjRwWElTSGIyR1VYUW05Mk10V3NCWFhxWDJiZkplV1E3K1hSZEFrZEJIRXozcitzekh2aHV3NXNFWlQ2c002bmhVcjVkV3lGUElwWVJodjJKU0tWMm04dnZjdW1jV2NESnNTR3ZhcXJhZHFPSzdHVXZvQjN6YW1tS2FzdlNDVmt5V0lhQkdkWm1GMmtLMkJYaFB4bFZIVGQwVElTQW05U2craG12MTRNMUdiZ0N5emVmMWNmRG43RFd3SE96Q2xQSnp1b3VoUDI1YnYzWEpXUFB1Qml3Y1BDYXdEV2lPdkVXaThQYUdMQTVkUmE4ZGgxYVYrL0U4Y3p0blNNczJlOXI2QWlhWlVBNHZ6RDZXN3BCWVR5VlJRZktDZ2E3YkdZVkluRWltRTN6VW0wbkFZbklXZVhoMnRnT3djSFlBUmpMNFlEcldLeWtRUW02Wk5HOU1QZkJYdlMwR3kwR283aUY4Ny96YzN4RHNBK0NpbjZRZWQzMTQ1RXgwWUlNVG9CTURzbStDVm4wVW40QS9LbGxQbExWSm94RnYwRlQzTTNFdmdnZXpnSjN4RzdGc0xTZkNiRkpXY0hGK1UwN3d6bUxFMG91b1puYWhwWDlKTEYxZ1lVYkI5clpncytBS0RKcmpZdUJHWUZmV1BDdTNmLzhpLy93aHozKysrL014K0M4SkVBMUVEcW1VV09NdDBSMFJUQ2hLaTNEdlRRdjZZeFM5WEVoRW1tWTBLeXk1T3BkcXRsbWFjS2VUUzFTYXltdUlWMzEvU1J2M2dEbm8yUjNHQmNpUTN5YWdQaDJiTm5Zc2tvV29Vcy9EUUhwNG9EREw0WVN6TlJDNTVtQ0l0eFI5RGVjdCsxaUlRVFpETWVEWDRQSjdESHV0bVJ4K1I0WTFqaDNGUXhaMFNzQjBqR1llZFlQK3NYQ1dIMmpOcUR1dU5wTzRVOUhYRWk5cVJkcWw3UEh6Ti9PZ1huRkgvVjZEcm1KOXowaFhEbjdiVGtXY0c2Z0xMQzZrcE16WEswa3VpS3FaRzR3b2RLWERZOGJnRmJxbXQrTnU4U1FwT0FwZjV3NHQwUm9qb1lCYXZGNVdyU2pHSGNJcmFqMEVjcE5FQzZUSGduSnh4blhKM1FRY3QyQkdZQzVhMnB4b1RnMVh4NWwzTlNDdlN6K2pRNVQvVmNGTTdEUC93c0w2YzIvVmJBZDIvNEFBRGZKWXBkVDhhKzRVdUFPS0VSVm5YcTYxbnFCRGNlNVMrd2Z0d0cwYmE0Qzd5MElER25Sckl6RWlaejN2UkdyNzdvd2RyeElrQzdqc2F5YU1CcTFiaDZwUmNQdGlabmRxN0czK0tFMmJCdmFSNEJMU1JncFR5T0JmQTl2SFBpM1kxa3grajFKTmVyak9qM3FFdXdFLzV6Mkx3QVlFZklqcjdZN3FPOERBZnJNZnZBdDNVRVpqUW1lUkFHcnZBMVJNeTV6S2laYU9ManI3TXZvSnBkbzl5M3pIUHdKUzFnREY4U0trOTEvNnh4Z0pkZWt4KzRUR0JVNEp4SFN4NGp1NnN6ZDY4MTIvb1lvTWZrU3k5Z2t6cVowOFgxdmQ3RTFCOHZkYm12RFRQYi9NMExBODFXbW9EcU1SNGM5Wk9LK3UyVUgzN3dOLzl3NlU4YWdublhsR21MMXdGNmo3TDROVVZ5cjBTZmtkTE9ORXVydjZ3ME1Kb0wxSmFOUE90YWRBcDV1T0EzNVFIeFVFUDdjdElKR0dQS0tua0RUN1VFeHlBSHZZMjd1d0xhaUd0cEJvK1J3RUtVZ2lHU1hSMktrZkUwVXVTaVZudzFGUkNqNEtQWmNWL0RUYktKUi9lbjhvRTBxUVBjYVErUW51c0JMYTdPNzlsdFozM0g3N2czY1pEZDJOUXV0bTg0R0ZFdzZPWUNkdjRTY3NmTTRkQUpSeW1MNGhOTjYwVDJMcUtuNjV3NitnZlFwV3l6ZnFBYzEwTGJkVWdRTXZaQ3NDc2k4UVp4eUU0TFl2MkYzNU5hTTBpWU1Xci8wWHdTelJpTE9CeTJsK2JiNmtob01YWStDRnhQaEV1Sy9rTHI3TktESW1ja0IvNFl6RXR2eXJCUnFROGROL3M2SWgyOGkzb05XYk5iNmRRRXQ2bWZwWXJKWE1nWU9Xb09Gc2h5ZFBSK29ZcE8wOWIxT29oSEZROWtGazZLUC96NEU2NVBIei9TMUcydGQxeXM2ejdYdi8zMy8vNjdQaGI4ejk5Ly9aV0xmamgxaCtzdFB3V205N2IxbW9DYlpmcTFnWG9iNEQxLzRQanpjNERtMDJSQ0x4dTZkcUVxQWNPMU1RTEhDNGtxRDJHOUQxQ1Z5d3RQaGZMb0R3Ly8rTHlnOXdwd3NhWVlqSHhQNkRqck9jdlI5MHA2TkY5cEtmazZtR00zdTFSYXMxZjlkTzJTL0R5NHl6NFhxekVzcG5xeGlRaDhjdkU0N09SWGQrMUJUbHpidi9mTUtOd1M1TEpEcjBmbjlRYzJpVjJUZDVFK3dONi9xOVlqV3pxd0d6QU54cFYrQmptTS9sdGR0WFBFNWFoZUR5NTJXdVBGSlZHMFIvMXNvVklRVFlidVdNK05sZ09salBRclJvV0k3NlYwWk5vNGhtaU9WVnptNzAzajBaSFFyTmhHbW1hNnM3TFB0QUpHVjVlUXBlbURQV0FNNjBjbk9IdUNiYTB4NStZWW8rdzlTTU9vaFhEZTNlU1A3L2FQSXJuTS82emZKOWZKcXI3dUV3QW1DbUR2UDN6NHpGY2hmTkx2Rk9wZUNGLzE4KzQ5endMVnRiNVNnbnZCNERsRlhnVDRqb2hLSlY3LzBOWWZJZncvTjJiSkQ2alFXYkk0KzZMWlRxZ2tWTnJPTUtKVWtqYUJrc3dQY2hpaFRiSUV2SCtDVktraXg5ajVsUU9LYzEwbzd5R1FsR1pXbU5nZHRLdW5HRWpyWUVlc29DTDhsczFNNFZ4bTlpeUY2K2tzRDJZSU1SeTRoTGgrY3g0ekI2ZTIxUE44N3lJOTlWcEE2OWRDNi9YMHFJWmpqdjUyd3FLenVOeDhGZGd5OXVnTGV6N0p0YnJxeEwrQ2JvOGQ2TnI1T3RSendsMU05L0psSnd0dHRHdXV3T1V1SjZRM3NZUDdHWWswTVRyVEtld05KK0c3NGJ3V2VjajNvOUtTWDhTTkxEVllVT3k1VElSakMzTk1ZNnNCZVZ5YmppeUtyaWU1Wjdqd25zdTJrMWlOeXpqUEVNVWNPaUNld1dVNHU0OFQzVVYrVjIvcVdxTzhOZHBqckVwTElSWWRyT1BQQXhla2RaUFBPS0w2alhPYTdnaDhDZGJTdXpuanh0L3VLdmFZZEhFbmZCYnNFc1J5RDN5UkxhR1dTRkZqb3NiMHI5cUx3c0tBdWFxaWtKbVdOSmtseDFZY1NYV21nRk83ODNpYW4vT2lubnI5d3NXOEhyM21sUGR6ZlhxWW53MnVHLzhjbzdydzUwUENYSXVoekw1ZHJ3UjRrK0QzK2tpd051VW52akJEMzZHbll2QlhjdFdvRXFwTHBOQUxBMTNxODA4VHNrN2k5UjZEMzBRbmtBQ3RkY21uUUhvN2l0Y09RQVRoNUJxdkMrb2xwOUtOSENMb2NsSGRycXhLWDZscGxuS0psUjA4aGxNN1VQRzFHQXdIck51RE5KazluVjFCTHFQR0diZXJiUG9LSEZVM25rZTVnRjE1SXNmMVlTRlRaY1FlSTlOMGE2UDE5aFAyTW00enV5SngyY3VHcm1zamJabE9jSk85VHo5RVIyRjgyMHI5SmdEazk5cW84NTlWeEs1L0dNc0NBZDNRRm05dmRrNjNPK2ZTVnUyMXZCalZDZDIrQzI4Y2JhUTBZemh0ZDFuSzY5Qml4THNqUzBpWTNTREtuZFVoUDIzcTZweXlqVnpqTFZEY3BkbkN5OXhXT3gva1lFMXpnclRucFgvdFJzWlpjNG52cTN3bUp4bE1jbnpDaUVuaTB5ZE5lT3hPTlVIQSt2WFhqOHhyUC83MGs3N2xrOGQ5OUdPK2RZRXBRdlk3Nk5xVGVRR2dmMFJMUUF0L1oxRkhtZDlxb1pTTTF4cktlRnA2aUZ3aHhDajZpQUprYk9McVJ1d3VEMWo0clhKNUhaSENEbkx6aXVObVg0L0k2bFRIc2QxTTFHSG9pbEpEdmhOMk5TRlYxMDRPRWlrandYY2p6TVBRcmxBemRZd1VWcnZGOEJvTVFueGJMaFBaL3lwWGtlbHRkVGhsdEVReEl4c0VZd2UvRGVtYUpUc0xXaHovVzVydWdxZUZQZUZqci9sd2Vuakd4R0M4TVphbzRBN3NVVHRDN0RmejB6c3J2Q2llVG0xOGdOSGwzVWlGdUxBOWx3WmNqQ0tNUTVWME02UU9BM3kxSkFVdDIzME5ScEl6b2pDUThMc2gzMXoycU9uUlgzdHRzTzdiSldEblpManc5c1dWWFBZdXJzNS8wWjVSN3ZvNCthV1MwZlYrVHF5dHdKaHlnZ3BzZnRaT1doeDlRYWVhekZlTVFmM21UVDJLVHl6M3lMN3lFL2U4NmMzdjNQUDkxNy8rK2d2dkRQekFMOXpYT1JZNkx4YTQ3ditPSjJUcnRyMEVkUjJ2MDZYSGgxY0NmSUJBMmxjTHUwQXFyQkNpSEZnbFZZaTc3MzFMVlhKSm9qY2d5S1F6ZUgxdW1BOGhIUHAzMitVcS82dXhiTlpYUjg2QVhlRlB2RnlZU2M1L3RWWEdlTzdab1Y2Q1o0ay9yZVd0K1NvNXZSSjFsVXVZOGU2NlkrNmNMaFdkQmZUUllqQWNqR05mSzE5Y0NWK1F6SWtRNG9vUnNDTUJuelNlcE4ybElMd3ZDKzJ4NjQ2ODR3dlNtN0c3MGZlVjRDbUdPeGV5YTNQWVcydTJEbisxekwreXVkQm5rY1ZTcndUNFU2Yld5SkNMeFJ5ZTdlSE94dy8xTmY5TUxBYTUzSzlqeUVTdGRldUM4MkxoR0Ntc0RNMVBaMFJKTnVRcFlCTlh0VVM2Y2tzc25EUjNBNzdCM2JYZ2kzTDRIZTlnN05XWWcyTTgza1huUmJ3VFlwZFJaNjZTTTk3WHdHZXlteHJBaFJha0czZDJORU1JRWlPdWJzVHV0SUFZV1V4WWFIaUR4SEJJYjhZdTQ5anhnbmVkUGR6SXpua1N1YVJGa3oyMzJZZlphenZRdjhEaXdIbVE2N0ZYNVd6aG1VTjZzWGM2SFk4ZG95dlk3cTdZTVI3eDUyWVBPVWFpZGdSWFFCdFRSa0Z4UmFHRDA5c2pUaUdUY0FJdDljQzFFRFNQMWlad2lIY21iTk84WlMvVkJuOXV2Z1R1SVVoMU1PTEczWVFRd3gyK294SFZYYTR6NnlRS2doSHhDWXFsTGpMVlRiVWUyUG1jMHFEbzZsOW55SXBSL290OWZsNUhheVNzd0VsdFhJRy8rWTZmK3Ewb2ZrSllDNmM3M2hkbjBZZUc2MXhXQlhEUzFGVThnWEJVWDBseEIwMW4zRnJlanQvM0hWM0pVQkNDMzN5a1NxMkNkYjVRU2VYeWU3dVM1WlJkWjJFVldFNys4bTFFK3VxTnVVaTdCa3E5Vmt4Yk1nTHVWRHl1aCt3eGRsY1FqTFBPa1dRSkQ2M0gybjdnNnVTRnR1aDNabVF4eGpBV05FTk8zRVgyNUd1Tkoya3Q0dFowR2JmdWx4ejF5UFhWN3JzRTdtbUN4RWpJanVBS2FHTnBkc0ppUjdiakNiYzN6ZDFZbytvQVhrR3JiRVZlMHBMaTBtdWx6cG5hK2h2OGJJeERMa3k4T1dhV3FIMFhUSlNOS0MvTjREYlM3T0dBeVN0N0ZseGtWdFJaRTRUTXNkUXNwRWNUYVNOVnFPejZxbU05djZpUXdwbVNNSGptNS9zZnZuLzNucDhsNXpjQmVLR2daeCtaVDhma3hNUkNRNGpmeTlLYmtaNXQwdkVZaE16aVkwemdXLzlHUEVaWEVqaW5QaE02TGZadUlMS0FENXZxamdrTHpjV2N3SE05Q2V4TStBa0piaVI0aks0Z1VQOGNkQ29wL01XNGE2NnlRL0lZbHNlRVJkYlJEOEM0dXV6TXFiOG1kSnE5UVdJc2VHS25NVWRuYXU3OHliVG5XQzhwTG1uUGNBNUZhcWgvSGJHOTYreWMveXVRdVQvL1gxSE1neUtPemY2QTlMTHI5VEt2am1BMjl0YVA4YUFzcHVYc0t1WXZVV25HUUszYkVROFlJNjZFTEs0MGJkQlZERWYxcXJvT2RuZDFPelNEa1VwSVM0Y0l1WFR3Wkh6THJNdjhkbG9zelhIMXJ5dm1XVjV5UmR4Sng1cFJmVmRrU1dGODRZS2VId0hRTmZyWCtyVGIrL2MvL2ZRenAwdSsvMW9uUlYyN0U4cnlsdHY4bkV4MVFWK3hJSFlvWS8wK0FKZmxlRm1TdWp6anRDdGFMWlNxbHhOYTFFYW40SFFYTWIwR0FEdzZwZXYyTWY1RlZrdnhoVktIeVZZRXM3SkRScG9aMWpoSHh1UmF5T0FnbHpxbHA5WHU3YTR1R0h3eGRnVWpDODNOaC9VZmh3emtPOW1scEoxMm1mY3grS0RneDRIeDZnV0FsNjZGblE1UC8rbHZ5THNSWGx3Z3NXT0VacVBqc2J0QlBiMlo4SURKc2lOeDdWRWhQekI2K0FPYVhTRXN1ZTdxWDJqSkZaM0ZTSE1KWFBDbHVaRFRUTG9ZZC9mK1M1Q1ZYZ0I0cVVtS1cvajZuZ0V2dXRUM2pSSE5HdXhDZGNNRFhqMlM2RzgvK1A2SEh6eUQ2U2toSGtGNys0R1prUVVGYXZCM2ZXb3VZeTdCWFZRY1dIam5uSVhabDlPRTBoMnZzcDFpRHduK2pFSDRMSFZVbGFqRkZYd3hxdW5PSG10WHRUQUJOV1F6NHdPRHdNU0daaVI0aklWQWYzeEtET0V5Y1BHdUlxM0l1R3drTVBpT3hOV04yTS96Q2ZHU2tCalRzMjYrQmUvaEZjczJHaHNhVjFlN3N5OEZINEJkcDJkUHlHS2NDbXErWGFjNS8weVRSRDZXTDBVZmV4WGlpNGpMNENmQXJ0L3R1OURPNmZiTC9MblpIMFJkdWhad3lpamg0bklORzlnalRpRWJVd0pzQzNCTFpiMkRMVmJrblpCWUc1MFFPOGFkUWlmc2dpQXBveHVwbm5CekxtTjcrR0tiNzNHd1NFTWlqNkhMYnM2QUE2b0xibDBXSHgvVXFJZGI1M2d1VW51VGpPYk9seFU2bFNGSWRsNEE4UFFPVi9iL0gzVnZvbTY1alNScFNvcFFLcGVxL3FybS9SOXhscHI2Y3FsTVNhbjV6UTB3T2dIdzNCTWhWWGNQRmVKeG1KdWJPOEFONUZrdVk4MTRjK0g3ZmYwYXhrOC84bUVnL21yd1AvU3RnSG8weHRkenNWbnFCdUNYK2hVTTZlb3FXUS9haVBlMVdPaGNLQWF6bHdTSEtUdjNBRTdIdXNiYkk2RTEvS3RoaTNodVJRcS92Q1ZxY1lQT1JVUlBGM0RSTk9kU0svY1QyWm9MdVFzbU1JYTl5V0tqaDlpTzVoSzRNeGNreWgzZlJYYmFqcUN3QjNiWkY3YlZPbUgwcUk2UmpyKzJyeHNBZUl0b210MGdUVy91NnZIR0ZTVEc3dHFSa0cya3VUTkI0dDJOZUllcmpyZUEzZWoycnJNalJ6NWdYNDVSSnNSRk0zYU1MdElKd2Q5bkhzT3RFNUVZbkJhd09STVlxVFVyRnAwV2VlRi9UaVcxOHRNUlBlK25LY0hhK2NUUkdVM2ZrK090QWY3RUw0SDg4QmtMNXppZUlCUmZweWZldm1UMnJ6MktXRjRBZkhxcngvL1NLOVErNlY4bnFaeXFZdGovbFd0eUh5T0RQeG5CVzIzWG1SUnZQOHNleVQxUXAxcFZvbUljMk1Oanh4Q3ZuWjEzZlJDRFhrT3ZDTWZkMWsrRUt1bUtXc0tmbWkvd3VHdzg1c1Y5Ylc2cVVMVWRpUjFYa0tNQjZDWDhHTk9qVjRPN3F5T05RMVdqc01SYWJlY2J6N29UOXBBdnBWMzhYbERRMmE4Ry9POXF6ZzJkK2hpb09xVUUrTi9EdURiN3I2cm55MlcrTENLN0dXTm9POFpEM1RmOWhidzBVVGdpNEsvek91b1kyNHVrRkRpcE15N3J4NVZjcnFmencza0NFMXZGNk5sOFBXYXFLMkRGOEtsN1g5MWd5dGoyVHlzblVlbkExWktrWmJnald1TnlPbjd2V244T1I4djRYaS92QTVDa1BncjBNOS9hakJvM0FBU3FyRy80akpCK0NvL244THhqb0FsNkNTTUJwc3R1TFU1aDJ5SzQ2bjE2N3dhODhUN2VuRGNuYTkzLzZMTGwvNzdqcDRqR1ZSaTA5VWlGMURzQk5WeUp2aG5PZTRObVkzZUI0T3dwSnZlMmorMjBJREZ1Z2UzOEhId3hDRHptWFdpOXVZZnMyZUh2NER0SVQvU20vYVgxUi9ZMy9nNUFkTjFQbWpIaU1rakZjY1hvSE51N2EwRjZNM1lNNThvNitpSHNSc2h4QlRrYUFUc2ZNTGp0ckhmYUM5Y0xzcU5DaUxHbytlbUZqd0p4bHBOU25Ud3VuR1B3TlBzWDZrY0hLTWdjbi9uUkNSRkE1eUF0ME1nT2lPMDNHTm5LL0FqeVovNFkrdmZmOHovcCtZNXdIZVo0dnVNSEtsSnRQZnZYZy85OCtFY25HQllMbFkwei9ES1c1dDM1WG12VEhPZWc2czZRV0RocHhvQVgyOGJTRENHNHBkTzBVYWRBRFdLYUdBTHZDTTF3Rm9Vd2plOXJhVTAxdkNaME1ONWhNT1p6bUVPdXVJRjJjSTB0M1JEaTdVakFveEd3aDhUZWpTTS9JRWFXWXl6ZTRJdmRtK0dVTVVlbnBPK3VndTc0QmQxekJZL0NGeUVYR2RrMG1ySExOdWR2YWVyWVg0L1RTLysxVjd4N3JBL0RDSDRZM2duZGRnV3ZrZGZlVldHTzhvdW8zWVhJQWlJVEpJWnpyUmtIT2hOWHM0ZDBlNG1OSzhZUW15L0JheHFtb3lBSUZHd1R2U0hpNmdhRUpjcUJlOGpDakhqd3hYQ0hRMXNFbllYMWNRbTVlMTJua2R2WlZidXVwL3VhQVRlYXRsTHhPUmxxTE1aSnVZdU9VWm8wN2NlbWVrWXV0ZHExOVVKZnVJYjZJelI2NUtPRnZGeFZmK0dQQm4vMytkTVBmL2dEdndIRSt3TjFiNkRyS2ROM1NMcldxcVc3RkJiZU8rZWRCSDlreUk0d1MvTzZId0NuMkJwSnBIamxYLzN3Nk93Qy9PS0lCaGY5TWxTb2JRbldKcDRSb3BXaVhvZ3RmNXpER0htSHVMb2FSbHhCTUQ3VU1mbUo5a0toWjludFl6R2R0aE1tMGxtUDlkOUl6OTFjYUc4Mis2aStHUkxhN1IyQW9GOWtlQ0FjMHUwbkVYT09UTUJyQjNtS0wzd1BEeElEWXJkcElzN2VHakJHVDdXRFFXSzg1dHQ3SkNld2U3c2RRamQyd281MFBuWUlNVG9Ca0ozbTZPcTBrdEdBTVc1NndPQzJ6a0Y2TXVFempwN3pqNlhlQktEbEh3V3RGcWNubnZxemNMYmlHUVpuTkw3L1N3cXk2NWREbFl5VEZOOEkrTVFibklCWmFsdkpLMG90dUtZNWdIdVRsZ21sdXZtK0F0Z3lTbU1ITzlMdG50SDQ0azN6TWpnMXF6RjZldUZyMzljeWpreUQrOXFGSmNTZFNyTWJER1VHdmV1a2E1MGMwSUp1N29RRldacXZZNGZYKzgwY2t4Y0tYZTJwSHVPZEdjSGQ5WUsyUnpuOGlPL2cxeUdwTUFZNjJXUUIvMmNhenA5ekM4M1lsSkhxT3RqTDI4UHROVDlxTVJKcnBJZUhzeHV1Qk0ydjV1K2FIVUhmNHVsbTkrNTkrU0srdTJ4QjFvNWwvVHBGS25GNEYxbGlhZTdGbTc5WC9vUXMrbTZ5UGhZSm52STZBWFFQREJJaklTRFlyS05tVGljc0NPODZNNEh1WU0xM1FjYURmeFR4MXZzQXBwVytrS3MyQ01uSWhWRlY2QjZCdFByVmY1Y0VCY1AyZUsxcmFMM3J6ZS9oY1QzOUJNQ25mM2hiNEljZmZzL2xrcDhIWmVHbmdTS3VSUFVranV2bmQ5OStUMHVYenZvem5MaDBqYTVxdWRyU1pDSFFzZUI0ZmN2Qm9CbzB4K3NOVVMvOGVlQzZGN0xna0hVSUE4RVFFRmdqcG1GaEtaMXhXQmt4Nk1LQ2ZHaTRuaVdxRjFsNVI5SVAxWGJDay82U2NRLzhDdVJZNmhGOFgveFhoaWZSWnpxOGp3VWd1MHRJR09hOE5zSTNPU0VmUm5XK2pweDUyTzlHcE9KaW43YmRPd0l5d0tvSjIzdEt3ZU80TlNHQ1JSemRqS3U4WXh3QzJraXpCNWF0VlBIR01DMnVDNi9hcnViazlmSHYzdGcyMG5UYzBreTY3bjBScUdmMzh5UlNuWUNycC92QWxwS2IyYjhtNy96aEVNMVc2MlpBZjdKWEJmdFhoSjNzRy8zSlEvN0NsNzd0VkF0bkpkNEh3R1JMMWNNTGdIcmt6eGI4UnI5NXJEaHN4ZytHVG1UNkg1ZjE5cTdOUEg3Vis1R3lSQitidUVUc0hlc051WFkydTBMQTZMYmpRWVowMVFoNDVIUzhPdkVCTFNJV1R6Tkdza2Y1Y3RVWnYyZUpDelZzcjAwWTlpemJUSytUT3B5cjZNYVBPRWEzZTRYZFhqaExjKy9PRTJFd3RUZG9BMzlBcXdyQ3FaWldIWG15VGJhM2N6cmVwS0NNaTJMSU50aGRnemkyUlFXNGxSUjBENHdyeHNLNW1ubzZPQTZaVHU3bmsrQVltU3QwOEN2c1JUODFZTVR1c3N2aG5LWkxkMGpBSGhoWGx6VVRwQnZZUjdMVkZtL1VyT0Exek41cytucnUwWnEzdkk2S1lJby84dlcwcExJcy9LVzhjTHkvdWFxajRPTEs5alZ1SFpjVXhEcFQ3YmJ6VE5BUjJsMFgvZUdZTDNqaDBGcVlCc0haVDJMUElBMXlyN1BINnF5dUtmVnRNZCtWNEVqU2tLSmdMK3NrVFpTUm12M1hXVjFkcTAvNDZEcGlwN1l5Nm1yNDRsTDFpMVpKNjhLb3Z4TGdlcFJsUmpvTEQvWG45VXVhdlF6MTE1cDZvait5OEVEL2Q3Lzdoa3NrUHdkRVVxNmVIcGEvL2UxdnhJTFRaSUhQb3pTYTNDcHdlZVhtaERVWFVJT01NQXNYWDRjNEtWNEVkZkxVTCs5eEZkZDdDNEFEMzg0WVZUKzFrMDJYZUg2Z2lFdDJMWm94b3ZrVFB4RlVpM2JmN3hnUVJnLzhPdUtjbDNWZlNsYUFSVENDQkF3Q3gzYklpcHpMQW5abUZPQ3F2UHZTQTN1VVdZbnRORnpHV1M5NFJZMGtkdTJhcDVCckJIcmVJOU9FZloxRU5rVFEzamFLdWNBYTdXcmk0cFZGMjZ2c2Y2N3ZBT0RjaXdEYzB4dlpYVHZ5Rkh0VTJNTTcwdTByUE5XVk1UZ1RURWdaRTUwMXhRdlE3ZWtmU2VwRnNZMXpTVFZReDBhV2hnL3NBYm1rNE8yY0NQNGE0ME5aRVZUKzFVM3RLUHhmei81VmxtZi85U3B5bGNyZktHR0gwUzhWZjlKTkl6aE5GazVKUGl0aHAyeGlPS1BvVXozNmRxL1hJdGZ1eUNIQkR3L3J3S2podUtKbStJNU1UOVZ0RWRlUG8rY043OG5ZeWErUjNXdGw0NHMzelc3RTdpVUpuTU1WUW93d2pYak5XREdXdURyWVE0WmRnN2R6ZHVhTk13WldneXE4Tm94ejZVcmk3VFR4RUZ4UFNscks3amdoaXBxTDdSMVpRaWI5MW1XRGlZM1JZNWZBTjExZHFtY3BmQlFmem00Y3M3d1BSdENwOS9WQ3FPYllUdDJsNCs2L2MzblM5NGxpeit6YTRyMUtiZGVhenNFT0diWHdEY1liSXh3SUMvZ2lKSFgyRUVzdFVXYUdGdU8zd2hGRXFoY2Y1RmhQQ3VpR2kxa3E3NFN1YjFudWE1aU5tck92ajZtZHBaTTcwa05zczM0cXlZRjdpUG5kMnpucFVRamQyOEVkdjhVeTVEN1JxVUwyTWExMUNxeUdhOUNocFkvcitCQWpXdDU2d1FFTVhoUUgyMzNmQTFNRG9RcmtSY3Q0a2FFby9YNEdYcTZodkgvT3pGcy9FZnJqajB6Nm9YS3NnV2hlL3RPUGF0YlBhQmhuclNMcTE0R3dVZkFDVWxkblplRktyYXYxL0ExdXBCQ0VodXUrY0RYbUd3cjExNGgxaVVIaVo4MGNpd3d3aG1ERXFFV1dMbFBOWGZhZTVMbjFPdnkxOTFuMTREbEtIY0ZEOEJ2UVVlb0l2aUgyRzFQV0d3RGtsOHBvN2ptUFlLZDFRdXpkU0VoY0N4SThCb1RZR05vUGF4OFRxQ04yTkdFTlp2Tkt2TG9UQlNHMTdBaHd3QmlEM1Y0V1Y1cTdrYUFuVi9Bd01kNEVkOXBBN2dkZ2FER2N5MDBPOGNvNFArM2p6eHVPai9qWHV3T2NBY2FwaEFoR1dBMCtpcWlCRjFsUEJYZ1l3Wk4rL3RoaFBURFFnNGQ2eHFIVG1SYStlNlRaUDBhdE9XRjRhc0padFVxcE5VV1B1ZzI2eUZyZit5UElwNkliam53TEtkSVpnWFl4RXhWRDZoVVlwQXlGM0pISEpnNVhzdWgwTUdycDdBdHlkKzAxQklsbTUrOWc1M2Z2d0ZVUTV0WGY4SFgvTnBkT1lKZUl6bTdjbVNPK2FUNXVpM0IyVGF1RThEckZTTGx0dmgxZkVyRzNMeW5leVJ2WnJoWXdna0dPdE82TjNXTnZObDBMcVl6dXZYditWN1o4d3VtMTdRajFaZGhqcE9qWGZOT09VVDFwVWhnTVAwYlNyWUwzVWY2WWZ4ZTYrQTg2RUlnNGxncnU4TTZKWURlY3MzZHREd2xmNUhKblRpcVhudXhxWFpkWjFSb1FPOHlPR3l5bFFSZ0tJMVluaU5jbERiVWlEWjI2L1VzVUJDOGduUURZT2ZaMkpGRVlEdXdoK3B3UDhEeURZWEhtMDNhZzMvUHc3NXJNcFhINGJ6UEwwRExYTFJqSWFCR0tKTFhSUXRDYW95T2FtK3Q5a3RuOHhMTjhiZ05ZOHo0QW53amlIb0JiTkQvem9WUitZK09mL0VHeHVkU05nV0pGMHpWV0YxbExlVTFXbnRlcGNPcldwenhHYVRCSFFXTU1mYnBqenM5M0ZYaG5ncC90VmxVc1NqWCtSTEZFOUg4Tm1UOHZaQ1JTSktVQW1qSHNjakYyN2VRZ0lTL01oWkRta2dWOFQ3UWpwcjJaSXJtK3lOZ0xPNGJ2dEwxYUk4Zndyd0N2RzRDdUd6dkdVWHIzdmtEaWlvRm10NTJpSTdFL01zWk8zR25kM3BXZmtGNVNGRXp1cmhlSVhZbU5jY1I5RWxnNEw4VE5ESDgzbm1MRERLRWJlRTFnclRNOUUzbWRCalduWjVGUGdBeTVMcEJoMXplS3dQalZBbm41ZVFMK3lGY3R4STJ6VDJVcTJ4OTM1SlEwcHY2QU9sL29CT0gxVmRUWW9oZGd5d1BXVVNNWHZoL0dPMEw4QXFhNUc1MHNyNnV0RWpxNTI2NXZJSFg2VzBWYUFhWk5zaHdhalVsNGtwMzhVbGRSV2hMVkMraTQ3ZEFVTTh0TGlKR0dEMDdIQmJWQTJ4ZFM5VVN3R3l1enVwbkFHS2t3Umx5MUFjYm1EaGhhak80S2lKRWxoQmgyOVdac0cwdXorR0MzWXRKTW9oaTdhMGNnSDhHSXhPaTBtKzI5Sjd5M0JWdkUveHFUWG5BT0dhUDVQNzJFa2IyMnBzcVltL1d4a04rcTBDL1RFWHN2NzBQa05jSGV5Ums5MXhuWWM4YzVnK3lwYzM2Mk1XUG5kSklpNThCZExzK0o3M2k4Ti9FNS91b3Q1UkJZdXpGa0c2eTlKTHdidUx3MUZ5TWhOcktKSXp0RVNGaWZ5eW9DSmVpcHQzNGJ4OU9WR2g3WnBZS0Q1MW5sd1RKV3AyKzgxVjgwTDBmeGtoY0tOc3ZJcTB5NmFESzlyOGw1WFh6L09SNzVjMUUxa3k4SjhPQWZXajI0Ly94amZVOVlXV3B3NmpxcllYTVRpV1FoSEp0RmwyYjFDWkw2WlE2NENiVldSN2lzQzlTMjBNVWZxem9ybktMMEZrSTV1Sm83bDd0dDIxS0Vzd1NKWWJ5N25oQkNMQlVqekdQNEM3Q1hkS1M5VTE3UC90cCtSMjNuSEFzenVOVC9PdnY3M3VzR3dHbGNrKzFGeGE0UTRrMDM0dHFOaGV6bVRnUHhUbnAwTFNMbVBQRmZwSWpPd3FINWtIY2MySjBmWnRTTTFHRW9MSVFZRzdOa1o1ZDd5R0wzWnRSMncvckIzWHlLN1RSc0x4U3QwNjBPY1gxT2NCZzErOWZKemFUcUlXYTFlZVN2OHdGOHprZzhxUGpoZHovdytMOW05dXBkOVZCbkZyd0MrZDFQblRrd2RCZkFHbzdPSUtyVlcxS1c4YkplcjNTM2NndmM2UHRoc3lDOWFYdEhsR09lUGJ2ZHdTTXV3aGJvcU1UZURNYUFBZlZRT0REaGkwSFlSUHlSR3pjRHBwNk94eHN3eUpFUFdGMzNacnF0RTdnYmxCLzlVcGdxS1hnYU9HcFhHYXlEMUJ6NXVMaUpuTmZaYTZQRWk5Q2VPdUJJVXk5SDJzTHNuRDFGa2VzTzlxVmdPYTlTM1h3Q2U1Yk8zTzB3WXd4TlJxQ3g0NjBEdGptbUdjSUV2dkwxUy9YSnU0ZW9tSnF5cElnakxkNFBqWGZDdzFIMiswS0ZPemdvZDI1RTdnS1ByWXQvMTBuQVJRaWtmZnY2VW1scWl3R3gyeTF1bUx0M1FhcVdiUlEyb1NVcXpSaGJ4QWVGd1QvSDFyWEdteUFFak9obmxMclIxZllvcTVsam5hNHZjVzF6QmlGWjlHMWdYYVNZRUFzdlgxMG9tVXUzclRmbjhhNjVwRWVwZFUwbHpFMzhrcWlIOENTcEdjK1VJV2Q5dDRRSCtjV1JYOWsxYTlmSCtyazJjTWJoZlFDdXVXajRiZmI2Q3dGNjVOKzdnNExURVlpVWJ3eUdacjAvWUtST3YrUHRBcnhGVUJFcXNCYTl1MC8ybi9sTFpQckZibjM4aWJjZDlHMkVULy84NWVlNitkSGdEUFo4SWZVbE1VRy83aTdYMmZtZEU5dkdrWXh5RDZlWnFDVGZBOStrT1RBNlgyUzhVOFpYRi9aRmxUeVJiemNBSnUxRmcrK2pzQ0JwN3NicjhJV2ZacUoySks1cGpHUFZ6TDZlQkY3WExuUlp1UnRoZDNWdmNkZlZFcEptREFla2VUZHlyaG15OFM1UmE5Wlc4eE96cEtRZnpXbGNnd2JpaGZNTkUzOVJPVzNVZ2tXTGFIOVpEV3d3UVZqMFMvODZFL0Zibi96SGwzNDU3ekFCNGR0SW5DQmNFbXZPTXJYVWgzK0U4MTRyQjZ5V2NMQkhRUU82WE9IY0RSTWVhVjA4Z1VjUWIvRGRpSGU0cXVhZFpxU3Y5NlNKaXFZNXdUSEcxYWNjWGExek9oNnBEb1o4OUJycy9NbzJCcUhqWlk4UlhuQTNvOStOTDdvQmlFNVgyTUVnTWQ3a2R4cDJGdXQwTmJzNjhpR25DSWZ4U1pZWVhmWUZlS1NGMzQwd1k5aExOZjJRV0x4ZFlmRGJNYmg3LzFzUmFxdHp5ejNKMi9XY3crOWlYOUdpSkE5YWpMTklIK1V6NHozMEMzV1dEZHFMakIyRENyQlp2NGh5bFE3UnpxTWJiRDM2WFpZbkhXaTdlTUJlU1JjMGZ2UUdIRWFwaHg5bHE2M2sxbDljSnNkSUFSMkJKSkhxaFl6YS9UWkR6L2pIbEYwR2ROU1psL2VkdFRTU2cybDNUWjJaTGhmL3RpR3FBSEF0NDZWc3NuUDFkVEZjTVdreSthL3lmbUhTejVNMS9sWVlLZm5IVHdOeExXYjk2ZlB2VWpNSU1qUzlTTHdXREx1c21ZdTRialAwaUYrMCtaRWgzU3BVVVZTaGhldTRiaTMwVHNIUDNHL1FKMzBQb0w2UnJEcjA2U1A5UFFFeUNtMExtclIySEJEWGppL2dNZHlnRlJieG5UK1EyK253a0hvUFBPb0RmdDN5cHY1TzJ4RUtBTnlIN3VzS2M5UjZBK0NzWGtkM2FRYkhlSEoxUEhhTXJtQjdkeGtKSHFNbkJjeCt0L0FYMlI3ZXN3ZVBjZlFHL0pEV0NiWTc4cnFxblFuL1RYQ25EVVR6YXA5a3RHNjAzalNuVGdXY1JDRGRGOFhWeVdYQ2RWZFFNM2JPRi96RVAzTi9say9mMVNjRis1SFAzbHFQSDZDeDFMT1BNY2U5OW1PMlliWmlCdnBnZE5JSHovNHY4YW56Z09nY05pblgyYXFUYlFjcFF5RjNaRzFlaEhsbVhIU2NkQkh4ZHJwaVc1YUFYV2NKcHhua3lEK0N4NUFCVmtHMit6bzZHTjBlVVl6cHZkZmg3SGdKREg2ODRSK05nTy96RTRMaDVSaTd1TUxCWU0vSGF5UjRrS05odGF4NzFGZUFDYkhSMVc0MlJkNnAzWHYzcVBYYXUvTi9LNlNQcHpWM0JCendXT0ZDZmtFN2huZmxIaHM3Um1wYmRlNmovREhmUW5OOThVdm5hdTZFaG1DNkRQTjdWT3h1aEkrUkVJTTBZMXhkbXlBdWxvUmNoQVpDQ0w2ckJZbU9EZFlzQkZvYys0a0poN0h4S1RGOGswdmowb21nRGRZV1g1UVZVRXNKaTFORFVMM0FxajN0Q21tUDdTczdOTXZxRXkrbFFIV0NyQ2E3S0dSQTE3UC9rYSs5V0IvQUowaWFYRXBSc0VpOTZHbDZhTHBvUXFpSGFJYjU1TThmLy9oSHJyYmNFdkFIZzJ0bXIxazdOQmFhSlRZRUt4SFJFdlM4bjZ0eDVWSVRuRlc5TjYrdkZOZW5lZXVOam5ZS2thQlUrRi8zQU9qUU54WnM5VUhQL21tWDIxMFM4VnJnVjdvTHNTVWREVUlGVHVjTDhzS2NFZXZycnJBbjJoRlU5c0JWK3RlMTM5VGZhWHUxTy9KclNydmRBRmg2a1hzZlhBTGQvTEp3SCs3dEFOZzFJNGpoYVNDY2dKMGZNRWE4T3hKWGpPS01Hd3pzMjY0YWtuZWQxcXlTeEgwS0NUNzFSNStyMllUS1BJSWh2ZmFLdGp4VlQrUVlNYVZHSkV2OW9MQnVBSHl5cUxNVEhQV2Rkd2FnNFpLRzNwU3NSeHYxSjM1cjh2ODd2K2RZcHpPZElEaGlQZDNYVVY1Zi9KVVFzV2dsMk9lVkdsbnhMYTRFV2ZCVlJqTURQeHFRbGUva3J6UTN4dzBoek00WU5Mc3Q3K1NZdVJQQ2oyR21tMGV3aTBCZ1VZZHpmcHlHaXZQSmRGMVhaMnVzeDFDbGJJK2NteVpJcERxMXIzRTFyMXNVUTdSdDF0VmN4MlFIZFU5VnFlV2F4cmpSbXMxUmh0UkxmOWFUTEFrOEdGV1E4MTc4QnpDMDhtc1ZKTWJ1Mm1raDN3MktwMHRnWTVSaVJMTkx2UWIzMkIzcENydnlHTzVKNnVIZG52N2Y4dldyOVhQVVcwRUQyczREaTJ4Y3dZM1FYQXozYmNjZENMbTdJQi9ETTBDZGJPYmlpdXhUM2lOZjU5dHk3UHJlb1daVktxOFF1cWtBOHhNVjhiaGlqUDF5QzBuQk41R1oxWUxKUWpPOURoZ2t1UllqVVVtQlVZZXorbkFEcDM1QUNMVjRlR2FyUlFWS1NJemRCWEwwcGxjK2pCY2FJUkJhSU9hNGI5SG0wS21MejdKQ3FTbHlwYkJnMFJBYnhXY1RwREFaTlh5YzY5TkRvb0M1ak9wbnR2bXpPTFdsNVJYbmx4OSsvNGY2T3pvLzR1QjVHMzhwZ0lmemZQNy94My80dDBIMUNWdXUybDZRb2ttb05aME5GNUk4c05lRC8rcEl2VkhQbFpxUFZhcGYrS3ZIZGUydTdCVEVkUjl5OGZVN3BNVHhOc0RuVDkvOVYzMFBBV1hORG5UMi9xU2VxQWN2dW52Vm84QWFBNVJ0ZTYyQmJjalM3TXhqK0JPNEJMN1pmSjI5UkVhZjN4UmNhRWY5RmN6K3NRU2ZtcmVoUEJGMmpGOTE1WjdQZXlQZVZZRnFESmJoY0ZWVU80cExHd1UyUXRTS3o4N2hWeDB6d3hWRFV0NFBMczVaUHhudkJvSzZrWFgyWG9PVTUxV2h0TWZLZkRmQ3gvQ3k0S29OcUE2R2VyMDZDMzhoRjBLRWlQeWZQdG80OG5YMkVIUHdLN2JpcDdqbHBEZ1J1WVZXaU9KbDFCSmpndVhsemIxSjBDdjhFVExIellqQSt1YlQ0SEN1NExNOWF1ZzMvdlg3WDNxMG9FL3VpRjlQQWhoZXpqSi8rdE8vK0F6QU80TUM2dWY4eTZXUEFPbjlRUnBFMXBvVnR4Y1VnVUhDZ3Nka1hSODkwcEllVjB2ZFhKQ0pFMXlEb0JqWlhtNWoyZkRCRFJLRDRERndKUUx1cGdsS2IvSHBMVURwakE5dkplOUliTy8rb1hVam5LaVJqdEZ4Wi9ET3pFN25EdnI4T05iMUFJWktyblA5aUxtWFovQnlOZThGWGgyOHVuWjF2M1hRMVM2QjZZS0xTVFBHd2s4emhLTVJNSHdiU3pNMGpOam1zTGNleWRyaEd6bFJMOERPaVdiMkJ3ZDZQMnRldzFjTkhFR1RPVjVUNXlsV1JXNXFRbWI5Q3dGeDlwODF4VkhFNmFmT0tPYkRsNzJZMXlIOWZOdVo0NmtoNVk3dE1KMGNNSFVFTElXNXk4NGVGOFpTVHhEekVWME14L1lvSTV6SzRvb0k0UWF0NDJiRnFzcDRieW44Q1Fsdnl3cGZOb2ZFZlFiM0dSQ1Z0c3pVaUxPSmRjcGxLWEFZbnRnWnpIb3hVbzlQMS9FYXIvcXZmdUZsTVlqQnVaMUdZZGVLQXBhODhVWE40dUJCWmw5Y3Z6VDVuMnZKcWo1R0taTGQwQzljbG45czZLN1plZGh4TGJpYjNZdHRQbXRHMmZYUWFlTVo4K2hrY0lUVVpVcGJVSHgvemtkUHpXdW5WUkpRQ1RLSjErWHBGem9jSGNHVkdvSStRU1RHR0l4UkVsZFlmb2tJRGVDNUZXcHZ3ZitMZm13YjBNL2gvL25MOTcvL3cvL3h3eC8rNy8vci8vejV4NS8rOFhkOUxaanY0REUxNTByTnpMNitUcXlwWFYyNDlXZDJxSU8vSGZEcDgvY3FvdjdzSm1yYVErRC8rRS9leGhkYWR3a2tSMDI5L3VXYkgzLzZ1WDdPVDdjNlhNM3g4MGNCK1AvMy9Fa2ZHbXJ6aldDcTFwL3o1RWtmdHhnMVFxUFgzaXNJSGgya1orbVhyL3dlendLSDZ6WmdHcktxNUlaR0JLK0hOMGlSKzVCL3FYMGxLczNSMVBoWGtlNUlrakxBakpLWGNKYVVQZEIyd3NPTUxJUkxSL3VIMU1kZUVuWkg1Z2pJU1hDR2R4b3Q2R0IrL0E3QUlVaDcwT3gwZWorTjVxcUtLdjRPbmlUbnNUSHBxLzVkUWQ0Z01ZNjZKKzh4SFBDUWxNUFBvNC9PWXZSMDB4c0ZsWGZueHlValhtL2dSYW8zVFY0UU54SFo4WUJsc0JMSGV4V0cya0kwQzU4dEhmVjZGbFVGcy9aUmJSb3R6bVVFNm9SUXlTaVlzNHhQTnh6MEpjNWJnSFcrcURjRWF5Y3NibjI3VjkvYUxFalpYVW4xR2JsVCtaVkRLNVhkOS9OcTlwVUowcDVrODExbVo0N3VGMU40RE94U1VYMEw3dFFkNzdaVXBvNXhJMTZIT2ZwUUUvVHdiYlFvekdUM2tMU3paTGtpM3BpekYxTTgrbEhleVNES1JGbWNXVERIRUE3YnlIMmR6Q09kQllLbUdjT3VOR09BeDQ1eEJPUGRqU2Z4TUNNWTVJVVI4dEVJYUFVZEhYTmJiTVlZeCtCdGgweXY1MWg3eDBMOUdoQzVwamJtbzlwZC82cm5IbkxZLzVYc1lXbWFENHhmQjMrb2IwS2RiVzZaZGh6RXROMGcwbUNQMm1uMlF1NDZBWGQrWkZPWnlhbjJHR0t5WGVIdnpDQkhQaldHc0JzcExLNVUyTldHUFFjblVTRTcvQ2JpTTBUdDdiMmJoUFFtTmxFQkR6b1BTZXN5UXZUWTV4ZWpDcnU1YWhvOU5pN2VsQnFqUXJUYTY0bkxYdWNLYUg2L0NPMmFuVHhMVmJkak4wT2pVWTgvNkp0K05JY21saCtJSkhWU0NQRkp1TlJHTVdXUDQzL21ycWFuSWFWYXdxV3REUC95cDMvaHp3SHdaUUQrU2dEemZuU1k2L09uQTBDbXdGVXRMbjEwcDRZS0poZHhtcXhCNnQwQVljanp1STk3QVYzamF5RXJ2eldLYVhFcVovRzdCOHdFcXB2MFJWOEpwa2UvNkV1QUtwRUZ2dGJxNk5LbmNtOFlzZzRwOTZ2VkMrWUwxeXZGN2h2UEFGVjJxNmNHdjlPd1IwY1g5TjNtYjFCcVM5VktGZnFtT0JPNHNSMElhR3BEd2toY0pYcXhnZ2Zha2Jnd2p0NEZyT1phVXVmWURoSmpTY1J3ZEJkMkg2QzRYaHZadmp2TjZZekhteHFDeE9qODBIYmpRMzRJdTRIYUVReU9sNFZPMmVDVnViN3Nlc09SVnp0OE02QW1iZjNUd3VqcFBrR1BndlJMLzN6c1I3LzI4K2x6UGVqUXFVRVBML1F5RnM0WFBKK21FYkJVSkpURFJ0NVNabDNwUlBtaXhRbzlKTWhpTEUxQ0JxSWFyaktlYU1aWlp6U0l4dzdTQllOWGxNVGp0WTRSZzBhQ082U0QzZDVDUmcyTC9sMU5SUWI1a05sVGFHQnFHeVVxUmdSdExNMHZwY0hmUTRLc1JtMkRwN3dMbWYxcXIyM2g5R2EzRXhod1NSb2NJMHVQTXRnUjdMRkRsQzh0Ny85cHZxOFc1cDVyY1IyYmU4WWpMZURYSGFjSlg0eW9IY3ZvMjY0SEh2R0FNUkt5SUduR2dJbk4ybVVFNzJBNGcxWmIwY3diYlc3ZUxtTFpMbjRMUWJFSzZJVEN4aXBTTzdpNDByVGhQWTIxbTZ4UmNCYU1OTzIxdUUvM2NBS2F0Z1NhWVBCQjU4cjFKR1U4NFM3cE9BZ2ZNaTN5Vk0rZW92T2RselZMQnNkTjFpdXo1a3U5eUx0NG5TOS80ZHFuejl0b2xIZ2dybXV1TmtXWTNpSWRzWXVRKzZUelhzOHYzK2hQZU9sUDgrcXF5eG9kNXZwWVBQcm5Ld0VzZ0xyeTVoRStWaTBpYTlIN0I5WExhc2lTdS9CdjlQNEIzd3JXVDVEcXMvNytwQkJxbmlOQU00S0JseHVBK21zLytqUVJueEZBbjRYcWFmbTZyMlIxb25iWEtvdVMwWlJMeHRXN2dPRDdjdlFld1QzV3lFNEd3ZVZLd2luRXJiSGVBMi91WDkzNHJmUjdSMTRVNVY1M3duZ0hZSGNFV1l6WnJCMW5LZ0hXZU5LKzhJSzBSKzlMMkx0aDhvNEhnUkE3eGc3YXhkcEdDTlZVVFFzTzBwZmR1eUJMazlnZzFra3pSdlIzNUVYNG9rYWVUbzdVQ3lONWh4Um5EMVE0WExWbUE5WGlvNXlEY3dKNlExREhLUCtMenp0OU5OblBPQXQ4L3Y1M256WDc5MCtWNlp5a1cyVzlQemtXQlpTWmN3RXRNUFlPdWNhQk54dUZmT2xxQ0xhd1FsYk5oZVptQjBmVUtFbHk4WGJ5Q3pDdXhJSUVMRU45dnlPamFiQ3R4OTFSUTI1TTY5eTlmaWYxUmpOaEo0TVlQSzQ3YUFVMlZwZFM4RVFXZkdsK0thMkViMTNvU05SZUcvR21tQjNwTHJ3N0lVZzN4S3ZGNFYyazI1MHpBbHBVdk5jcGNnNW1YRDNxQ2V3WnUvM0UzelYvRGJKbi9EbzFuVnZ1M2FmcE04elhDZjVXVWFraGhwV1hwazVsY3lxVDFEc1MxMWxrY2IvZFBDWUtHR1BzYWFjNlNiVnNTcUlDV2lFNnFldE5KRG9ZQ1psR2l0TFZaSUxLRUR1RzBJYTdHUVFhZGhjSnNuT01IUGtHUThEb2kwZkp5dURYb05Xb2psTHBpTDhzcTBnNnlGUlk5d0NsVTg5b3l2SXFVc0dDNkh5cnR3L0dGTGwzRGJKVGU4MXNXMGE5WGMvNzhmNHJBU0RjQXpBMVowYk9iTjdNbXNIcmM3eHVWbmtqcy9QcVRmNzZpSTQ1dFUxRXdBdFN0d1NqU1ZMZlhTQ0ZWMVArUW1peU9FVHpDbjFZU0ZjbHdKbml0cTBCdzdlaEJMVTh1YXp6Uko3Umx3aldUajZDSjlvb3ozSk9QYVIvOWN2ZWtWK3B2OVRmQzF4eTBZVE1PZ3RrUHZpbG82Z3ZPNEwzQWhFcE5ranVhMlhjWlM3dmRFVGhoVEVURFMwenc1OWVwZTlnYjNaOHNmdEl4UlZEb3B1c3dZNTNmdXdZTC9oUEhJL203clhVaG10NnpqODJnVjNkY0oxdDYwZ2oyMGdOeHBWbzlvRjZsaStGT293eGFxbDNBd1FhNXA1Z2ZIOEFFUWdjMVp4Vy9IdWYzQWFBY0tiNS9Mc2ZkQ2MvSi84NTh2bE1ZTjNoTStwYWxMMFd2eVU2ZHdyaDZOVGEvdnR1dEIzR0p1M3JuZ0x2MHV4SVhEYkl0eUE3R1VJNHNFTXdlTG1tVk1mTEh0M2Y4Skc2NDdwOE5CMjdPckxZcnFlREwwS2dhZkhtMk5mZDVXN09Tc3B6ZFR6TkdNZWs4Y2E0OVJSMDArOUk3SWdId1loOTlIYndpWHpFZTJCc0RQYlMzblJzYW5ocTloU3h4OTdRK3I3cmhHd2o2OVR3UkFoek1aYkF4ZnZmMS9UUnZlc3Y5WmdHbU1FaGhOWXgvSWdmUWVkZFhFdHpydzJrYis2OUtXUitQQ0RNWWN3T3ZNaVNrSjc2Qlg5eEpUekdzVUtKMTZtVjhFN29VUjBYWDh2c2dGc1A2MFVFMW83MDBPWTk2emZDRlFkSTQxaC8rRFlXcHFNNlo5RUozOVdrZWVXZTF1TFN4UDUyalNvQlZub0t4blhaazM2bXZ6eWU1d3BJazB0akRZNmlFQnVUTURWMFdaMXA1cXZTdGQyK2IzcHNGb2kreUVwQmJ6TklGSVQzNUszQlBRQWZCOHFGbUJCc1p1cFNub05wWmk4R0JBNDNEMXpaNjhNK2RFRlRmTDYxVVFLYTBGc0VOUlpvTlBVN3BMV0FRUEFuQ2FxaXEyTmtjU0lJTWJDOUJEa2FjTnpsa0o4UXdwOWNqbzFDRndUY0F3MHV0Qzd5NisxMDlsZEs3VVh1M1RGeVRJVHI5aDBBU0F0N2FVTG9COHpPUHlJZGpHQU12RjRLR2Z0TnZMc0IyZUR1Q3RJNUFWdVVzaXo0SXpMMzVJVy9OSHM0ZG0rR3VlREhaZ0o3VkxPcDVrdUtkNDVhSTFJTEp3SzlLYWxqdTlwYTYreWdFNFNzK25zaXNrVFI2WXlkalBtOTMrL3pKMys0RFFEWGV3SVVJK2VjL25ONkVwdDloRE5iV2FPWk9yejdlQjN3YUx6RFVXQ2x1eWtFV1l5bDZSaURmZjJFai9BNkJTY3Y0TUJuQ1VFd3ZMVXVRc1Y2aHpLSWJacWFocXJmdytSbFM5ZFRLMmNqSk1xMTlHYTNuN3dsQmxFVmVMMGJiK0t2YWZIdStoMkozZmtCdTlGdGs1ZVFuUURpWmVIM3dOanZjTHJhMUw2bENDRjdkdlFYZnBnNzNrTzZ2VE1YNUl2SVMreXZhNmE3anpLY2JWTGV4K3hIbWQvQTBTdXhIQWhHeXNQZUVZT0Q4OUNCRDZLYzdJMzFoeFdHRUtOWEZIQkoxZkJCTjlKd2Radys3a2lYNmw3d3BWbE02ZTlTRVVsSWpMZ1NhQVFDUmk4cFNKZ0xjdVFiWk0xaXZtMnZ2Vm1EajYxTWFrL1RkYlpVQ1NMem9zZmZaZXNQZG5GNXJMVmN1cnhHeWdFZWFLK2pEOWUyT0xVNHFzZFdLZ0ROeklVWERaRHJNcDhJWWk3T1BKNnB1Uy9mTmFFWGpTYnJHak1sY1NLL2tWQksraEk4ai96QitiQlB6ZWN0ckRjQmNKbHZ3M3pJTENBMHlRSUJvMzdNWS9DbFZBdjROTWVybzl5STNZM3dBM1lFdTJ1R2c3RzdQa1FnUkFIYnl5NDFQYi9ONjYvVTc5MTNRVVlzKzc3NDdRYkFZZWxmbWpIaXNySGpPK0pkTFR0Y1UvQnhNbmIzd3IyVCtSNWFRTlJpQkF3U294VEd5dURSWlVaY3I0M3N0anV0NjhRcnNNNEZRaW80aHZtMUhzZVNDR01NTHVkTnFvMUFHSjFnZTBjZ0J3eEhobWI1bnVqWEgvNFFUYmNCWXRjOVFBL0VacGRpOGUwK2Y0SmtuRXA0bkZCMTg1a2Z2Z05rVHRZVm8wLy9wK0F5TkJidXE3S3QzYzR3MzRQVWV1RXE5M1ptb1JLckxNYlNsTFNaV2l2a2lXQThhL2NpelVSRklhNVJCcit3VmhZNFJ2aDZFNmVhQXl5dmtSZHJ1M3FLYUhZd1dRSUdPWW9md2NUaURTRkdCQmZqaTVwUlU0STJPSXZJelVXakJ0U2NNRytjdGcrd2E0Y1Q0NGtNN3VWSlBBcTdNVU92VFJ3RW8vUEhEbHJ1NEQ1TzAwenNoOGhPU0d3MzNxVDFrTi9JN3QxZEpmZGVkM2JmZGtTbUdhUEw3V0NRR09ZdlRTdmI1VkVLSVVZQ01jWklWcUVtM0dpekF6ZlE4YlZPeUNYVjhFWTg5emNWT256SmtxWU4xOEk2U2Z0dUFMaUlHREhJT2xIWUxJa04vbFRNVVFlRmpsc2tZS1FXUTRsYkpVc04zWVdOOTgwVXBzSDM0Q2hITGRGM3M2dE5oRFQ2SjVmWSt2RFBmRGZvOWo3QThPdHN4UldQMzhuUk4yc1JJWWhZSnlKZXRwb1dkQkt0a3pya3kxZVdIcnJyV3dIZjhpU095YjFwZms2SC9lYy8vNWw3QUUvUW9aUE9EK2t0QWtHWGZpM3FURFZWRWh4TFlYQnp3Zi8wd2pjU2VGa2NqcXcvWWdSQ0xFMEo2UkptRHYybG5vSUVLQXBhR1ZmZkp5TEpicXQ5WDQ3ZUkzaVB1MW83R1FTM2F6TnZJbGNVMWg1NGMvL3F4bStsMzBsdTkyTUFBRUFBU1VSQlZEdnlvaWozc1JPdUc0REZ0elFkdzJZbDA5RUY0Um5QbkY2RFBwZllNaHpMbm5LaHRZWGljdFJUaXFtcDE4NnhIY1E3Y0pveGV2aHVoeGJEbktYcDFPTklMc2FSY05OWGg5UGpXK1hWajh1MVozd2gzbDExOUpZT0tOdXZ6aFJsNnVQL1NxbGp0Wlk2UFRrUlc1bURIeHVEUTUycFA1OHlUQTFvZ2dQeWRZQjV6SXRhaC85NTlvOWJKMDFMdERXSjNVSlFuTnV5Tkc4K0doV3lnbSsybDlnMGR5T0pjRkhyQzBKU20xUHJhL1lmSGROZTZMVHdLOTFUMUU3dXlGUFNyclpVMHNNWDE2TFdtMkUrZ1VkOGo5cVJOYkNkdUQ4bXQrMkZqcGQzb21DR0ZtTUtETmNUSHRxZXJydVc4TmZOWFdyaFE5aVJudTdKL3RLb0hMQlBnZ3YrcEc4ZGU1ODBGMithR0FtSmZUUW9CbVpjcmkzTmJ0aVZxaFlqZ1JaMGs3VVZvaFBrYURocUNVbnMwU0Jrci85RGNTZnE2eVdwWFE4WjE3R0ZacjdIQkh0UmU5QlIwREtNSlRYMGU5VE9WSEJibG96Tk04eWpXbWp4SGhHODRPbGRPQmd2QXUzU0ZVRVRjYjNxWXo5MWpXQ1BtN0daWkhPcHJTekZxeFM2OFBtQ29ndXhBeDdLeUQ2dzFPTW1heThscS9jQmFQN2hEMzhneXJONWQyMTIwT05mR1N2ZHhQVWRYNVZVVVFSeUw4RXNBTUFpZUhWUFVPOGtnSkRGTXdUNExOd0QwT1NUUVhVTjE3eENVaHEvTVl1WVErUWF4NXBBR0Rmb29mRStFNEVqK1FnK1pQdi9HZncwaGt1WDl5YjkvS3p2cXRTa2tFYUVvTEtwUVRBMEdHTnZ1UjBQd3hWT2hlK2dOcnhGU2s1cUxjU05yR2VlbVhkaDNsTW9Ta3Z0YWpQRlZvQzhkTVY0MVRLU0xNeW5wdlppcDdtbm1JSXBXU1FHa01NSEkyb1ZxbFZIV3F3K0IzanN3czYzVlBBbU1wSlVkdmRYQjdrWGZ0Ykx2Zlp4N1JzQVRVdjFJOU0xS2E5Yi9KOS80czk5VjZ4K0IyQjgyZzhDbi9uLzRRZjlwYS9aZTV5Nk44REZzVTJLK1V1ZzErd2ZoMGplZitxRVNHdVV1TDVJeFJoU05uektXSW5WRHJtSEJDeWp1blFuM3dtak1JTjhkb21QTVdHVGU5QmE4YU9HNlowY2lGY0hSOVFNanl0NGRaM1dDQWtlaEN5N2JiRGpSNW9JODgwV2t4ZmE2eVloaVlMWnljRnRQSzJYcUNnY2pTT0lzc1c3dDl2MmRrNGRNbERtSnBNNWxvVTg0WXZaZGQ3eDd2d2dDY2ZZd1NBeHpOZVIweVBMM3JFZ1BpN1MzRUlGdk9QTjhiVW92STVkeUM5eXZkWi84bHJmTll5ZTNsTUNMaFhTWE1DSXgwQ0RpMXFVekxmWGFoYUJFTVBrTkx0aFY4Ung2WFErUHUwOUZBb3NZajBqdzFxU0p0eXVhSm9XZmpjVzJ5R2NlNE5iMDZteDA4UXdXSVZxNG1ra2EwdXhoZ2JZY1JDZjJPM3lPaGtkR0Q3ZVNDMmMzalIveGg1MjEwN29nak5rWEJxNjZ5azFVdENXNG8zMDhOZ2VuSVJjZUhVdGhWa1dyNi92Wll5cWZGM2d3cXJ6VXYyWmUzOGZvR0w1bVV6UnVFN1N6S0k3QnRYcHRjSXV3YVZqT0dvcHZnTHdoNEpSZWRWZmRneTg3UForNnYrdi8vcXZianJRRCttWnRmUHBJSWNiUjV0bUVNL2pqZFIzaWYvSk8vK2VIK0lDSndzTEJtOHZvTWFDRjAxenBNYS8rblVROUtzY3ZwOHcvdTVZelVUR3BrbW5VSE1OcnNkckkrYTRObXk3MHJRM25NVzc2N3hXaUZvRmppM3JYRkhlTlVHTzlVVHRIY095SGdmenJUbldUYUxuU2pINHU5MDVpOHRLa0wzWWUvZ1NjSGcyK3BySTNzUU9FdU1PMWlkTTdqRkg1cDN5Mk9xeGphUmppZWJkUzJ0VUc2TkNibDI0dTVya2d4bCtqRTRVZURzbGR1ZXd0OEJmVlU5UFlPV3NaZFI4WDAvZWFYQ2I1enM5dlJXcHM1V2JPblQ1MFYvT2QzWEtVNk1XOWtnT2J4NERZQUJrWHM0ZTVrVjRuVDNVNTRJeUdaMVZlU3crR2hHeHc0a3hOZVlyR2FaNWVIM3lCbzlCc08yK3R1SnJCQyticXRhdUJQTzZjNWd1RTVSa0pKcFZRM2FXZ1QrWEVjSnVXS1N2clJueEdBdnVKdXV0VG5rU0ZhLzVQVkczN2QwNXdTTzRHM0M2MUU0SUVtWmtCMEtWVTZRYlF1OExVclhyanBHUGNnem90bmNrcmhpZDR6d3ZrQmN1eDM2b2NDUkVsbjVCU0xOcnh1N2Vib2Z3UXNINm5mbmFmdEwzbWRuZXJobCtRQ05zcWlBcHJ5TUdPMEtnbXpFV2puSHI0MXJJTC9BbFMySXgrdEx6ZGh3N0xtZDVrZnBENWxJTXpZUTRhWm94VXN4cnhON082VWkzZXlKd21yMUhYUUZYbWpFTUxsR2RpZTFsQ1Vsbk85NlpPOTY5UTdSZWRtYVFHT0h2eU5HbDB5WlhRMzhXU0ZkYldJUjZmUFJqblZsOEVhaGpkNUEwZ042QmZiSUt0UXdQcnpFTE11SnA0dVhDN2NFSjZPczFId0g2MDUvK3hGY0MvdU0vL3VNdmYvbUwzcTMvOUtsbTdmNnd2cTdwaExEMjRpZ2pKYVZzdUpqYzA4UkwyN044MjZ3ejZVOHNOd244VUNsL01aalJVTGkvNTF3SlNuTmRqUjVWR2JFWEV0SGR0VFJmay9IdWZCRHdycm1JZk5qY05UOE0rUXFDc2x6em9xOFFlQ3VFandBeEhQcFg0OEt3akpOcG9ndVhlMEZvQm54aGxMaENGNTJFeEJVanJ0MlEwSlN5VVJ6VnRwQ1haaWZFRGdmRXk0NTAvTWtMSjY0WVE3RzVnblIrdHhNYm8zc2Q3ck1KaEg1YTZUUndoZGMvREk3U09wQjVsNDY1dlNmM1d0YzdBL296djRNc2RRMGpmTmJzQnN6KytkalBkUU9ndnhCU0N6Ni9BNkF6d2Z6QUQ0ZjdmTE1QUHp5T1dyTWR0SzJuV25Qa0hpT1lwV2pHaU11RzhjV2I1Z3VqNjNTUmJ1OHA1TlY1cmVyaFNDbERvellOQ0FGdDI3V3NseVpNRnNEQzUzdW1zOWQyTllLWUNuRElERFM0ck5PMG9kcHFPenEycnlHWTQvVVFMNnpqaXkzL3JOTkdDeHhiTGNodVZQU2xFTUtpYWRydTdjakNpY3RHWDc5bWRtOUVBSi9zenJlOXJIdmdDL0lUVFlmblBmc3Vzc2YyR2w1N083UGJYeGZWRmJxOTk4SUluQ1I2QjRHL1NQVW10dFU2K0ZUR1FrNGx4aGNGTjhNcHpYSEFMa3hmc2kwQ3JSc0pOK2pBa3JvR3djMGVSWS9NWEFiSytBNzJwS1NIUUtHTFlEakcrN29YMFBFbzlGaHNseEhqZFQySVdOKzA2Q2Q4TVV3T3pibVNZdmNhWVoxcVk0U01jZE9aeHhmTXVFejJPbVFUM0FGdmUxY1NuTXNpaWJrOE9HU0dNOVhtcThGMTBsWmhOb3MxMDdoSTFwN05UMWk5aUkzaFpxK25ya1ZLRjVybjRqRDliSjVKUDI4RjRQM3JYLy9LN0p3Lzk0c05ud2l1dGhaa3phSjVnblNZNWV0UC9aRE5tdnlnRUNLUkJZUnNoQkMvWTlDYjMvNzhrOGpxWDkwRGFLTENmRU5wTFppMVp6QkJrYTBDNG44MHd1eEcyQUU3Z24wVTM4bUplbTBrTUliNU5QZGNDK2VvZk9RVWVOR1BuTXY5aG9YQ3d0SU5BRnMvRGh1c0dhOEZKREpJN0NDTDRhYjJvNVl5OXRjWlNkb043TjZNY3NjN0dQdGRZNDdZem5lS25qMUlqRVFaV1pvOTFxNU82SGJDZGNEbytiMFdDSXRoRUlmL21hempUMXRZQ3djdEswNGNmT0MvYklFUjRSYWgvdHk0WnY5TS9UbGZjR3hEcUd4YXNWZm9OTWV4clhWTituVmdDV1l4b2RaMUN0aU9lVWs4TE12czMycHdZeVJ1UWRJc1E4V1lhZnp1bGFmajJPWUh0TEVyR05kSVZVajRpNkNiM2JzUW5sekdCNW1UWi9WaVg0dFFvMjJEQnR2bUZvdWprSUJ1Rmx5UmRZc3lvbXFUZ2RxcjlVUk1VSGVuRzBGcmVoM0JDbW9LRC9WMDJxNFFiMXd4NHJLUlRDWjBHZ1J6c2k3Z0RDWndOeEllVjVCRk1FMGJUL3diUG1NNnVJZFBsamJaMFE2NHhQcG83VkVMWVFuODcyN3U5YnhHMGx0b2V5K09vTHNRbHcxaU1UN3NYYUlXa1FSYVpLa2tVVEhDMXlFNUs0OXhlWDNTcnRvV3pjN1JZVGVaSFVlUTVoSzRnRWthZzRJOEdrdmdvbnowWGlMRlhwcGdSNlFYR2NJMHhoWjJjNEtYVGtkYzRWNVk1N3pwSmNSVjdVYnZSWlNkdXBPZFNOVnpUdFFGZHV4ZEtVQ3gyamphOFF6T2NMK0ZycUQ2blZBMGVNcG1KZWNaWThLTFlyUGJ4akJyMWlUeHlxNTU5bnd3NTR4RDdsdjlhcDkvRHhUamYveVAvOEdrbkNZeisvb2pYMVNwSi9xKzV2SkNVaFppTlRmUWd6enFoNk4vNEJBODBZZGdNak1IM3hJNG5YRmNHT2dUWGtqZEEraHhsajZJOEMwL0MwNks0cFFYZFluTFBSZm5tcTNyMVRUckczMWl2dkEraGV6aVYrSm03YlFnTVVKL0J3azVCbEh1WXd4YzNYYVRkUitLaE50dzZnVjBTSmZDWmdFZkh3RnlJN3cwUVd3SHFhMVdHOWpGd1RBbjI3SU03OHJadkFuZmpTM0ZPQmhLK05wRkVyandDMWVlRUd3c3paM1FrVzczUUpmU0VaakxFdStIZUpqZDhFQTV0dU5QYWpWOWwvTUZPYkdRTmRPSDJwYUs5SjJBME9yamNPUGlEL3grK3Z5SnN3WmY4RTBXNzNDc2ErSFk1emNONmdaQXV5SUNYby85Y2s3bFBYaXBoWXAxekwremxPYVoyRjJ4WXpnbXpTY0QvTzRhVFlOeG9SWmtnTlhYcmIvcVZhSVNZckFPbGVxMnozMTlYUXhXQk90ZkxVdDRPVmY5aXpPQzF1eGRLZ29ZRlBOVXAwTk1qcjdrZGRLK0N1aTJ5UTQ4eW5hQzlwbTVMT1N1RUZlUGZRRjJWOWM1aG5keWJCdHBIZ003NkN3ZklsMndreG5LdWRHdWJSSE56dXlnN1VYek5lRkQ4cHVhZTVZandobmtpQzlsNklRemQvVXp2OUNkWnYwZXV5T0U3b0hITEs5cEw3eEpxcmxYTzVxYzJybDZrVVplQ0VLMnBwbFRnYzlYakwvY2xOZ1lIMnBDTUprOWJZbnFzWGJ0aEIxLzRsaXRhM2FrMjAwaHUzLzNEenVwYVQ4Tlk2UjJnNmlBWFQzZ2JoRGdYTGk2NFhEWDBLT00xMVZ6N01jT2RLeG50ZG1tWll4MzFFdWt6cWJxR3R0WGozblVsdUlZRTE0SWNjTkpJKzY4WGpkUTVvd1lSaVg5aFNmM2ZIUFB2d2ZLdWZmZi8vM2YvLzczdi8vbmYvNi9QLy84VTRWcm9zK1RldGJ3c2Z3MDBMSFlCa2xYOXd4NmZNaWpRQjRMZ2dOeVAyQ0R3SVNBODNNaHVDRFgzb3VUcWI4K0pjREl6cjM4R21SWjIvYXEydFNSR01VYVRGNmN0NE5HNEhmWEhrN0l3b25JYTllYnRGMThyMkhuZFBGZVJtY2VkWmJBTlBzZ0JMU3ltNmhaMEtCdUFOTHV2RzZIVUFZYlR0dk9ZSFBkdm5RRklSemJhU1lrU0RQR2tkQTVDVyswa1QydThHTThrVVBZamFndHNUa2dUWEJnd3Rjb3NYRjY5NzZjUVJianFYbEZ6cUV1WkJ3MXNSTU9ZcHMxUzU3dVk5a0Z3cUpILytYM01aemg1cW1EanRSUC9EMFJiZ0QwNEo4OWlVNXduc0xRR2FKbS9EWjFWcWhsbnErR1RGV2xNZ2lnSERlejlxMUdtdE80eFFJaWZIUTFYUDQwYmN3bXdTUDhqcTk4cHhCSDZSU0NyV1pUam4zaDRsNzhIblVnQS9tUHRraDFGSEJKQ2R1U3pyTjVwM1Y3RFNubFVycnBtNVoxTjJJdnNrZmNuTzVha083Q1RqUEd6bytyRzlocEppVEkwUWpZK1lEQlk0UVFJNjRZTDF4d3NuU2F3U2RreCtFRGpyMW5LajdScHYvdzZoQ09NZ3N1akM3WTdZV1c1anVja0grbFVXZUd0c3ZPVTlhdGhxMWZ4NTR1VWt2enFVNFN3UXc1Qm54czFyZEtDdXhJNThQdFdTN1hoSVBFY0JiWDBHVzdUdXlGMEVYQ2lXQ1FoZVphWmtVK00yc0VubXJBaFZSU0w4eWx1V2ZmRVlla3ZESlV6bEVLdkJjR3gwajRHRmwyNWM2SEZvS05lSGRqSnlkTFhJbFM5Um5XK3QyOFBsd0tySDNNb0ZNRGxTR24zT09GVi81a3JvUy9xNjhJeStmclJja1dhNnljdlNPeGNiR2tCdU1lUmk3M1hMVjVsZ2VCeXozVDkzLzd0My83ai8vNGY3Qlo5SEN3ZGdUSDFscDFScGx3YXVVcnZKbzJxRzU5QjhDZkNNQkF3Wk1FNXlLUVhOalZQU1lkTk5rRXRIZ0V5WDJHTmtkSkQzM3puTXVlQlJsQ2JSOElPYTdkY0oxbXNqNHFtL1BzU3ZUWjJBUER3OVY3WWZ3SUptUTN3cGZSVGpMQjk1QmZnK2dwcnhjU1lOQUJHMTZEM0p0d0FNWmNQNXhTVUhpUUdMVlh5MjhrZUl5NGJLU0Fqai9aaUpUTzJLdktma3hrTDFKUjYwakhiZmQxVis1NDdFalY0SXg2N0kxcmttOERCUmhDak1uVTY1dWdqMUxJWG1qR3NJaVFmK3J1dkk1OHZYQzhJaytDZi80OHpoVGYvOENELy9HZGZRaWUrT3ZUUG1NaUN5Q3NYc1o1VENYZUY3cm54Mk1Yekx1YXBzdDFYT1MrSHp5Y000cFpSZDVkbDRMeHhadG1qQVIwZnJ4SE1QVXMzbG5VS1BpRnlBdlhrM2h3RzB0cVFPUEx1dUJIMTE0R1hUZ3FkOWtlUlZlUC9NNXhEU0FCdTVxOVJ5U0I3eHZSNmNicjhGVDFqdEZsdzdmK2t1VkRzRXU5SnUrSmpIQVlIcE11L0RUcnNKMEgyMHdaN3dRK2Z2MktrQ2ZSdlF2dklLaVp0bFN5Z0wySmJYSUhlMVVkZnlJYjc4eUhTc1lnTDB4ZnNydjRVbEozdWJZWEhUUTVJZWJUeENBcXVCR0RySU5qUWFQUUlERWlGWjN1Nm5abmRqc2NEUERvWUJzeDZHWlZjY09QNGRGSmJNTE43MnU3RXVJVU5GbTYrSTdqaFRQd2FRZTBVVEphUWJQYWdzdkh4MjlRS29VaTFpN2huWENUaFc0ZDd6ZGNRejFPYkI0dWx5cEdmMFJNQ3hmWm5zdFI1YmxXSVhCWlQ0V2pSOFhpKzN0ODVnY1RBdzdmQWNEN3h6LytnVzhHODFWZ2x2cDJMekxxZ0hMNkl6clZteW11Y3ZnYkEyREVJa0lJTG13V0RCQUkySlZ3YkZ5K0xnQk9qK3oxNXdnZ3FIbC9MT2czUDBad2pVV2tMUGkwZGcxNHV4Rnl3STVnZC9Gd1lvVDhwdkVVQ0w3a292bEU3cm1PbkFJdjFwRnp1Yi9LNGdhZ05rRjlyRndXRzFnRjF4N3Awb2V1OWhLWjlRbnlnZFVjRFRMTkVWVU9oVTlHdmRZaGRFT3VSc2pES0xYTFhWWTR0R0tYY2JGcExsRzlHUytGUlNFRUlYTS83aWxFb0dQdjM1SHJZMzVSZmN2WUExeXE2MG5aMXVLT0VENUhUaVhCZVkyekdqVUNySFVFenVPVDE5cWVpc1BXdmZrMVVKSVI5STF1QUQ3L1RuOUhFUGRQM0JEVWUzeThFOENmL0tZU1BaaXVlYi8rcm5uNytLQ2s1QjBMT2VxOGRpSGw4TDZnZFpnendxOXk5ZkVmNk53aW0yc0lOdHdJMndwczJFbXhJMG1uNmh2ZmRrZDZKZURVUDczZVlVYUhDaHhJdHl0UnZRTmFRbkpWU3JWc2JHc3B3dk9veGlqUUh0ZVFkU214VWxBSEFZUnFrVEVFM2E0dWd4Z3ZUS3N6b29LdXhSemFMd3l6RjdVUCtVZk5KRzdoNTQ4U3NTczJ6dWc3U051OER4MnNIT0hGU0QxR2ZOUjByMnVySFQ1bHlnZ25SdHlVUlQyanVFSjNUbGRZYk9zNEpFZnhvdkRVWEhCTC9ZYnJKLzFzbHhUY094WHdDci9PVG1Na3cwbjNPK0pBSTlneFRLWVowSGx6dmcwZW8rdFBjTkM5RjExNTJZVHp1SmhNUjQvMURnYnBSckVsTk11VzRlUFN3MkJ5UW1EV0xuUjFjd2FPVSs3Vm5QRkdSbG0xYzNhazY1YzlIdTMxakk3dFNJOVNTVzNZVTRDajBvd0JQWFlNeU5pN1RrOGQ3MU5HcS9VUTIvdTZTOFViMEVhYUMrRUpIelNkNE92eVBNZGs3aWI0OVRqZDc4RFhkVXBmRG1aS25JNWZlWDF0cUN2MnVFekE4ZzQzNWRoSjNGL1dMTVM2Z0JpQVhNMlpzdi90YjMvajRzNmZCV0JXOE9jLy8rVVBmL2dqcHl3OURCeFBDSW5WMnhCd1VNRHdubDJHSkhtcndJLzJRZXA5QTMyOUdJU21weG4ydW5oQXZqYklXbk1LRlN3YUl6RU9GejA0cGxrL05NNkZUL0lhQ1dkVTYyRXBrZEhCQjhyWHd3ZnhPY2p2aUJJT0xjUHVrRjF6UjNieG5iUDNlZWNzT2hBV3hFMVh1SHMvODhHUHYvL2p2emgvTU50akM4UG1yN3Z5UVRIdkVCWGNUeTdzaDlxS1hyUmJzdFM2TnZrWUNHMVNnMXJUbXJ0bmtlMEtaNGpvZGxyTW41bVJldCtZSXJ5SzdQK203TkN2WUg5cnhrZUljVlZGVEMxalBPcUFwQ2NpaktyMUV2N1pVT0w2Njk2Vk41cnBUNkpVWUMyYzNtekU1VUxjRERoNlBiOGgzeXZwZk9OQmtOYVJSaTRxcUpVNlVJczNzSTVKZnUzbmwzclNYMGM1QktqUW1kVC84MmY5WGk5Ymx1WHpkNTkrNU9kN2YvNkpiLzN5WUlEUEMvTHNIMFFmNytHMy9UOXhrRFAxRjdNeVVvZytNUGl0L3JZNTViZ2lxcGkvQXVRK2F4UXU3OFJVTlA5N1hDald1QXNPWjhQZFBmenltRnpyT3NWSzBVYTVTbExGc0doOEJsOHZTdDBXTnhVdHZIeURZMlpmaTJDYUtPYlNRUTFEdVNScm1DSVpLTFVMbVFSb0ZWVjF5RlhOc1o3S0ZUTDBWVGwvUzJYeWg1eGVoTEVhWFhQV21WdHA3bW9WTU1BS2RSbjFDRVpNalpkU3RxalFPcWhEc3JibzBkdVp0cUdGMlkyQ1QvWE1Za0x1T25WQ1VHaEFYYXYwaXhvWjZ0RXZPTjVSeGI3eHRmZFVMMis0T1UxMmprK29vbDk1c2JOOXl4T1hBdzdoRWIvcjFNalA4YmZVY1ozd0dBdHR4NDFzeDlFUzkyNXoxNStSN1V1S0UrSTFlUnNtODlLcG9WcHBCOURIeHlVWWhjUUdTVjRRZTJPNGpEU0hnYmJPWUZyZ2R5OXRnNnlOczlhUklueTR2TEVWck9YYTk5ejJPbzl2bTRnOFRoZGo5Z1ZsS3RkbkxhWkxCa3RsSDBaaVZjd3N3Z3BUUi9vc1Rsb0NZNldIMUJOUFNVWmd4R1cyaml3T01MWXdJVGxqbDgrSVRBOTFsYUhScVhFek9LSUs4VmJVd0RtTHVxbFRpVHA4MmxqcDcrQzNibzRVSlJWYXdFWE4zNGxWSmRWeGJ6dENyZWQ2bEtMVXlsaTNZOFVLWEpTTjBPT2xCbGN5MHltUkx0QmlhM1Rxbkt1V2FhVnFuQkZpVi9RbTB3NUF5bTgxTDUvZi9aQ0EvNWRnK1dzaWhKREgzT05jdjdLdkJOVXBlN0QxSko1U3YvdjAvZS8wRHNCUGVwRC9EVGFQL24vNDRRL2ZmLy9EZi83bmYzSnZRQkIvL2d0QnBuOThTYUFNZmRDL0h2YnJRejU2T2xqM0NvQ2NBeUZ3R3dEQ2JZQlMxdUlCcWFwKytlbm5uemdFbUYzQVlScHBKaDlEcW9tSmFtQUhZMzdCN0FMclp6MWIvYVEzVXRxSWpZbUNSNnJwd3lIUjdQcllDcFZVSk5kUTlHdFZmRzJMbzllODFhVUVjeE5uTkU4SzJqcEgzTHVhMWVmNnl2S0dKdHZEY2VObGl2VFhDR1lFanQ2QThNMWtiY091ejR4OGpUajdtSDRjUmlnZis5WU5uTjVhWWlnRWFWZldDNmNxM3A0cXBuWksvZE9aUWkvak9lY3MzU0I3YlozZHJuTXVWTHRLVllFZVI1bzA2azB3L3pFNUFiV1lvRlRGSEJrcnAwNG9ieTZFaGZsTzBDaXNmajRuZ1RIa2JadTVpWThzRFVuUVpWemVxNmpMdTFpaldvOGJkK1RhTkZycTlLSnRZVFhXTXRUaUxNSi91Z2VvUWVPUUZjcXBoZC9vWlQ1UGJCMmMrbGxRQWR3QmZQNzBMWCt4UkM2MkdBdFRMemFaakJwaVFZeCtuWU1xczhaZE9pNy9vODB3eVBEZlg4aG8rVEtXT05XelE0V3dkOW9WenNWMDFJd1ZMcnRKZGNLa0ZXY21DMmlnOHpzeWxBdlNTS3FtU3JldDVhS0F1UnV3T1RTd09zYTA0RG9ibzR0Rjhtb2lqeUZUYlJCYnI0ZEFRNTc2MVhIYlBiWWo0R24ycUIyWGdqWkNqVTlxMERkU1hPbWl3M0UzVGladjZwZU1SdkZOdnVxcEpmd0pQT0hhU0lNOHR5UFVVYjN6WGpoZHZaMDZMRXE0anRaYW52TGFlMXoza0c1L3RlQXh5MUM3K25KajdYbTcrK3JkSEpnZzBIeDBkRVNndDl3Y2xpTmkwSUh3dTVGbU9FSnlwSUhXMG1rQWFjYVlKN2xEUFVPaVJTMmFUU1Rja2FLNXRELzB5aU9Dc2VCbVp0ZUNrTmpZZ3pNMUM1Y093MWxxMm43VHh2VG1qSGNBWFNTMjJMVTVraFFqWU1tcUkvRXVpUEE1L3VIRWdMendqUVRzaG0zV2gzcmFEck9FN00wblpGY0c4YklVREFqeXduVXZSMndQa1FKVi93aTl4cjF0T0p5K24xd09FTmVRU3FiSVZRbWlnUDVYQlhMT0pLMDJEYi9zemVTZTZmZ2YvL2duenFWLytjdWYrVGdRai8vNHZKQS8vVXNzMDRNNVQyQVdnYXdmNUt2eUxIQlFZeGtkbURacEM2cTJMRzRZK09BUVh4N2dXYlBhdXRwcGdxSzRPaHNpU1FvMVpiV0ZadlFORjZHb1JlN2VuZHlVcE56SmI3bzY3Y25lbGF2STI3WjRpdDN4bzlwU2VmUnQ3Q0pIWkNHbitWblRmeDJZREQyZzFwb0lqbTFkMjE2TzhjOW1rWXRkRzh4YVVhVGNCWW5yaU1lcnV0a1JLS1lXNDNOclYzVjIzRXhCVmI1M08zeVRWSytJb09CMWQ5eVNOb2Z4SnkvRXVCNE1qK1NsK0VBVFliakdlVm1JT3R2cWgrRHVkOE5SNmxSdGdWcUJqWVZEU3d0VC9ycHI1MzZBalZtUTdnR1k3YlBZUlpNRG52dDREbjU5MUtlZTlOY2h5UWJrVUIxcjdjaHNsRHAyeTZwMkhhOXp4Rlg1RnkwU3ZDOGcxQk44TjZBYnJQVUkzMmxDbW5nTEdmazZzb1MvZHRsYkd3ZFRCU3pycFRrSklyUE01b2h5TlR1T1BxQjNnZTVOdUkzRkZiV08yNDRyQ2hrZUNPWjQzUWhydFI3dVR1NGhIWGU2UldvQjR6V3U4RXF3Ni9Rc0VibWk1aWFJNnpmaFI2UW53bDd3aWFoNmo4OUVITGZ5cjNDeHgwRitnWS82UTIxLzZiSDJHdUU0NnMwOThFMWsxeCt5RC9ISmUvUkhMYlFnOEEzdUNLNkFId1pDZ055bDNGelczbGdtTzNWU3BObEZLQ0VWOW5xd3Zkeko2Z3k0Tlk5WkRIYlhrVy94cnBORUZOVERVMzlYRGdHZGpsdTJlMWVrQnFpSHhJYTUxMk13SEFoZGZNZDl0QWVQSmdaZ1Y4Tm1DV2c3QlpUelVFOUd3d1FuaW8zUks5ekZqWVFXbytlTmJTbUxlMzBVVDVZWTNvS0xPRjB0RVRScU4rYWxudWVwV1orSzBFVGN2eDg2ZDNXNVd2b1VEOFp6ZWduTVRXWVdCQys0ZUNwZnRKOSsvUEVmWFAxNU40Q1BDVEVscU5zREh2RHJDVDAyQW9Rb1VaWEg1TUZTMWlmUVRRaTFhSU5CMFd4Q2I1cHFPZ0lUblI5K0FOSzhBajRncjdMNWh6aFFucUdVbkRNS25xa3JVTVFYeXhJRjB6VTdKTjRYQ25IdFpFdTUvZ2hpZ093dThFWGhIVTVrZXhaTE9aRUpvZlhtWWkvWkYyOXY4ajRPVTBNMnFpcmtuU0p2RVNQVnQvSDVkeCtiNE5yaHFrR0FGOHRoUjlkMlJ6b24rSW1HaVAvcHZBdWgwZzM3SUZMM2puU2d1N0NUb3R1QTN0WGkzWTJGYjltc3c5K1JGNjZRTVVMYkRkRnFVdC81QmFyczhPc2dvT1crYUZydlk1SzF0cHEya0wvcEt3NU52V01nc3diU1VNMC8rSUFnMC8vNnVVOCt4cVBjSHNSNmI0NHR6d2VCOUVPZkxKcjlzMlpmRjYveXU4RVhnMXlHcW54M3NWVFlhUzVHbWpCajcwYTg1WnExdlF5QldlUXA2NjdOdFYxMzJjR1VTNmVzZWtnL1UwUXF4bVBzUGVTQlZqK3VXdjFZS25uZ3IxMU9HUWxmQXRuUTRXeXVxNmRQNGNGZmlDRDdRcmw3aThhNFhQd3JzSGhMT21NTzZBVmNVYlVkMDlRUk5mZlk5L2h6cjZoTVhwMXF1TnplS2RKK1FaWkwxK3Rya3hFVlBvZG03S2gxUWdkajd5RWQ2WFpDM2pTZVltL1Z2NmsxYWNjK0xxQk9VVzFZSExwd0FCZmFUcGc1eCtzZzFDa3M1Qml2cytCZFJpT0JNYTUwYzREaWlnR24yek5rQk1RVnd3UTN2UTdWOVhSbXQ2ZnllWlRDdEpIbXNienUzZXRKb2hnN3YwZnAvRGtubEFuQklJcjFQc2dkakhJTUs3Z1prQ0Zha0VVLzNvaUQySTVJRU1kUzJJTHMvTTY1azBlL0lrNTlDVy9HN1AwOGcwbWtzQXFzZWJiT0hsd2dkQmNRdFJKRFppeUttZ3UySitoVFdnNCs1OE1qUHhBbTVhejVFd0hjQVBENG4wZUI4RDM3aDFZNm52Y3Jxc3Q2dmdGSWVIQVN1ZW54NTlkR0N0QW5ET0N3Y0J2QWhNTDEwQ1RVSWRZZXNkVjN2TTRJR01PZ2s3TDJZdEMwSUwwNWlSZi82TjExQ0hnQ2p3cm1MNjVkNFIza0tMV0R1eFNjdnV3RWtGNmhDZHdBTU55YU8rcGpJOS84ck0vODZKOXVIMmRBR2ZwODJ0Z3dqQTJaOEhxSjdmU0EzYUJaY3laaGRpV3EwNmF0WDUwYzhaT3ZYV3Jha3hiSzBJejRhOE5lN1ZaTmNDbTR1NG80VnFHNW5lYmQrSnAzQUJDc1BmM3FTMCtoN3JjaDFTeS9GazMxYTZIRnF6NDdLR09BdzFVT0J0UmJrNE5RSjJCOTZ1ZlQ3Mzc0Z1RXTGd2U2VuQTVPdHRTOEFZQ254Yk4vR2JyaktLaEExeUQ4Vnl4TGVKcTdRUktEdFI1SmQ1cVFXUksybXJkQTFicUNHNmNUekwrUUdnTTB1czdsM2NVWjNBS1g5UWgzcVcwdEtmM0RyNlVyTDRoZEM1aVExd1pGUlRrNlFSSUxNZ3U1S2dsMjVMc2VyenNobWpHaWsyTGlzckduQnU5TEd6YkJzOVowelZ4a05QWkZ1TlpweG1qMUtIQnBkbVJ4MFp5cEZWanBISzV6MU4xblJMQ0ljN2x6bHBDMU9ZT3UxeVg4Y3BUMTJydVFlL01wOEZaNkQvakk1bFMwYUlJUXRJQ0x6Skd6U3pscXdkMjhnVlMvbFVFc25GUVMvalJ1UFE0elJncmVFU3VuZzFOUTZRSXVPOFBkRmUxaFZQazlkdUJMbEpzZDdMWmpPdEw1U2JFVDFtcG11NGRQVEs4N3pvVUczSDJQZmd6SExrMkRXYi8yaXRiRzF1U0VZT0FuKzQ1VW5BWTJIQ05meE4vNzVmQ1MwalB2eXE4Q01zak9VaE1rajgyeWNVVmtlc2JMWkZLaDdnTHlrMEZEZEJMcXRaTVh3V3Z3NlNrWCszcnpYL0lVeGIwQmZ6MUFNd0I5OUY4UGhiSHJWNENHSUM4WnVuVFc5d00weThWTVFtVHVVc0ROUVExRGM0OTJIaTdidytCUkdkdWxnc2NxMnlJR2ptNmJ0eU9tcFVJYkMzbVBtb2lKWXczWXc2M01lZ0hOM3NubUwrU1p5RnRWb2U4Z2IwcEpyaTNIa3ByL204LzY5U2tWd01TUlRWaTcyakFvZXg0UFkvYnY1cGpqRXVNRnVSaGRHbkIyTFhOV0hZRUx1V2dqanBtcTk0dzdlS2wyL0VLYkZjS2pvYjN1Q25pa3pkSjlYRjRCWmIySUNqT2NJQmdCWXd5dkJyV1ZWVXp2SU1hOTVoeFNmRnJYd3BIR2hpTmV0M0MxOEhWZkd4NXJ6eWpWRVkydS9zb3Z6LzY5VS9vb1pmTjQ2cS9aUDJlbitwaTFDUFhzWDRhT0FqMkU0RVdmU2h4RkM3ak1MN1FrMjVZMGJhUUpKZlp1eEZ1dVMvQWo1dENrSTNTUld4c01oYmlrV2cra0V0aHVIQ1dDcjVCWjNwT052M05NQStIY3lwcWxCN3FBY0dJc3RGdklYU1FoTDR6WGFnUTZkcnhVQjRJc3NiMXBUcFV6Vm50VStOMklmU21NaDEvU0NUZ014cHd0b2NXbjVuR0M5cVlEbmNZOGNjOTJ1VzdiUWhxTC9sQys0Y1c2eXJpRnlLZVlGQ2xBeTh4K0djYkhldVBmRkxxMzJ6ZUoxdmlROHlHaGlYMmwrU0lGNXlKRUZ3TGdqaXkwblFOaEFaL0VGeW1hTEp3RGt6UTZNY3p4dW9IYVp6WndRdk0xZkxQVG5QNjFiSEE0ckYzUHpuZWc4WGd0dnFTSTE1cnBvQldXZFNlZitXMjdMTm5EN3lMZFRpNUE3RlRTZGE3SEc4VStoaWRSRjR4YXdORHVJaHFlTzZLSUlEWllBMmJ3YlhkTzkwTDdrQitwall5U0VrV2NVazdpRnFCNFhidTdtc3NVcUlrL0xWMnV2L251bjF5R0ovUHFNb2c0YlptYzBWays1OE9IL2dIOUVTQWUvek54NE9NQXpBcVlETlJuZmhRTUFaeUxWRlV5dWc4VTRTSmN6VkU5ZGRXWERFTURaK0dqQmlSRkg1eW1yMzJWZ1FlK0hKVzNTNkZqblFzeUJtdkFJSXNkZm1pN0FjZmdUdDVkcEZySUM0ZG1yK3A5c3JON0hZV0F2WVBoUEJYVHlWMnE0MDFrSk1HYkJRaGI3d0N3cGNkRnRXN2ZOT0FDV1dySEZZT054SDVYMjd1bWtYYUxVZkcxSGx1M0lkNC8ySVJnV2pwL2I0cWhENnpyWTJleXRZdzl6NDJ4amxNM0tsWE5WTDdScXJGa05JWjhBZ21kVWJNdjlvSTZVZnhORU5QS2ptMVpkRkFhekxwNUI5WVJUb2cwMTVoS2JwZ3F1citPb2xFcU5pNC8rK2VEZHFqVDFGMUE0YnlBc0hmNnZvRHVjR3ZQY2Y1OS9lRFBuSURXNlVTSEpJdnUxUFVudXgybCtYQXRldHRSWTBGRGJ3Tm9HUytiWGNCSEszU09sT0F4b01XMlVldFp4TlFKWitjSGFlRkQwNGg2WkIxNjV6NVdjWGpURkxNNFFtWkppNkNiVHRkZFJWZkJIWHl5azNIaHB4bWpLd0FhNzZEdHVCYkQvQS9YUGVvb0hyQ25pMnczdXQzSnNtdDdCbnhodUo1WFVzV0lRaWt6cUdQd09UN0tKV1FEQVhReVlWOHZaeld2d0xHUG5GemVlNFlucVdQWXNUUmZnRE5GYWc2d0dyc21TTTRWdTNlTkgrMHhHb3YzS1Z6NEtTSjVGeDJhWFNxMGdEdENpTUZ3Z25TMWhVTVQvaE5vRjJ0dlhaTXRPekZheWh1bTJsb1VzY2dXUGxhcnE4N2wxdHl6aE54ZHlsRjFMYUR4QllSSlFSMTBMR1NEeTlwVndrbklFM1BvMUFCMXNoVkFNTHBPa0tOZ29sS2VFQjNyWXp5N1ZNaWl0Rktkd2lEclZOWHhCVXk0OGNWNzFIZUY0WWVERVRzY0k2d1h2cWl0ZUx3VEVUTXVHOTZDQVYwekp5ZFVTK1BXMC9RSXZwTHFNMERzcGZWOUFQbEF4OFk5bHVRbzFpenVSZGFlUHhqbmZ1Q1BmL3dqTm04Q1pLYU9vVVNjRitlUkJjSGRLWmYrT0lDYnhwbjlRMlltNFJTNFdHcGVBVmcvRDFwREFRaWZXQjVaZnZmNWU3VHB1WGNMQjBxTi81WHJ0ajhVOXJoQ05ubGpoQjF2a0JmR1RuYk5LWS9ZSURFaStFNjRGYnFndzkrSmRjWW5oUmU0VS9RMTd3QXcrb3l6WjY0bzAyUUtLS09FV05VK3BnMVVHMFZVTDd5R0pydjQweWtLTmp1RWJsaFpwdUNOWnRCeUZkSFZ4MTRoSVczYWNadm9acEc5MThqMHNxZ3RUVGlsTTluVnZCcGIwM3dSbGo0NVpvSlhsb25ZUDFnMWpDK1FLM3lTVktSTG5ZZ0xFRk9qU0JwbGtxWGw5dXlmdVg0YytMQ1o5UFBMcXZ3Q0tJY2x2L1RKN0w4Kzk4OG5mN1RVOGNXbTVaRGx4Mm80dCtndzFNYVM2VVU0aTlnRnpxMTVHeFY1MzF1R1ZDTWJlY0pOdkhsZGkwc2E3dG1UT28yQUhUVTdHRUdNYkxkT09JcXdFM1pPdDVjNjdVS1pZZSt1UGVTZXFQcjJVUCtkT2ZyWXhXMHY2NDh5SHNZcUlhT2FxUmdjd0hZM0ZyczNJWWNQN21VaUd2NXBINHhKaitzcXFrZkZ2dkV2cnVCd01HTGYrRFE0SkNiVU9RRzd6aVRxdFpNN2ZuUzlJQy84MTh3azZyUnVId2tCZjBQam1CUjluWVhhWWxvSDc4Z2crK0MrMDRaS3dNYlJ4a0VIbDlkSjJFSFo4NlMxMEk3OGdCWm5uZFNMcStNb2g1a3NyNDBqL3dnaTdWd1IzQ3ZwTG13VGxwRXhaMTlIcllzWUROSU5YTDJlTHJoRURlVzVMK3hNQ0YwNXNnNU1Nd1o0N0JnaXozMWdTVUV6SWFMVmtvd1R1TlVBYU9YZCt3S3hxeXVYN1lkeENDWVVROXV6MXVSVnNob0R2ZEpNYXFNMEFmbFBYazNKUERYSHliOVJ0cE5tRFI0UmMxajdPd0FZZVI4QVdSNzg4MEVkL21RWWZIOW5sNThHSkJvYm8vZWx5cmhHa2lZWE9HYnkxbWRHYjRNUVIxRnRlZldJVVJQK21nMjZ5elFCK0JCU2ZXd0lUVTB2Q1BlaThkRDRqQ1Y1SjZEWEk5Z0piOXBIblNQNHBxQnJZODBnOUpCZGMwYzYvNFg5WWVDSEJJdnJteDlzRmYyTjJPKzRuL3U1OWl5K1FuNzlIUUQ1OWZpZmlhWjZvOTJ4aGw0d2k5d3llT3JzM3FiUDNnUGM5RHkxdUVXdW81UW9ENDhWTEZZVC9acVRqWDNGTy9HM1A5YzdBNmhKMEdGbXpaTjZGN0VVNjhWdzVRRVRFbVEzS2dud09KYWlRRHVnM09sTDJWMjVnR3RGL2J2WENHc1dwYWhkQjVzd05vNjZURVBIQ3ovY3FYQ1pXdk5EdWl6NjFpL0hxcjYzcTkvNzF4dDVvQnpTTElxdGFTanovdC8vUWIvM0R4bUNQKzNEdFA4Ny9qQUhnKzZmRStaZzExZDFGRk5KTWZnNzVhT2U2b1BVMU5lNUVhaWprQTlXTGdNUzJXUHZocVNyNE81U2dnS1ZvMHFiaGw5VkVzTlNvVHdYdVNsY09uTWlMbmRMVWZ2YkZSSytwSnZVaGJzQTF5TWxENGkrV2RGRHFrNFA1Q1Vld1JnT0w1azVzQjdiV1dIMDl4Q244dzFHZEF5YW5OZ1lFeCtzNEJpeHpSbk1JbnBrQjVMK3RwREV4dWdpcFhFYmhIanQ4dUhzMkYyaGs4czdCM3dPMFJDWkwrL29USzVlRno3TmtXQzZPam44Z0kwK3BPeDZ3bytCQVdQMDhOZmdrL2VvWVBJTFY5U2VqQXpPUXVDNFhoQTNqN2tDSm1vaXFLQXpwSHlPTWNjRW5UM3FLY2pNVlo5Z3JSMUlybXZURGIvQnVFVHdTYlhJOFU0MXZjSUpYNWN0NzUzdHhJWFh0QjRWbS9GcDRZZVN6QXlIWnV3WUhZeXlqQ3I3YVJQZ2QvSGRxQ0NWOFZvOFhsOWZpR0xwVVNhd3RvdTFiVGdkNlNIbWRBSkkzbUhUWnA1YkFYelFxczRGZDNOUlV6aFFMWmZobXFJMkNjZFhjNWZ5d296WDJhZndZWVRkNVFUYUNMK2FMbEJyUm92L1BHVEZVZjRZRURUQWNnT1BDZFdRR3BQcytRMWczUVBVM2lYKzJMaEp1bmNLbDczK3FBODJGdzdXVEJ0cUo5YzlBQzcrVGpEemhMLzg1UzkvKzl0Zm1WZVlVOVVncVN4VklhLzZDVUhXQnRXdU9RbE5QbC9NM09USEh6V0JWSXo2T3NvRElDMWQxRHl6RnU0dWZ2ekgzejk5L3A3VTJCSnBSeHk1MGpYbkZUS1hVaDY3ME1TdUpsSUdUUXNoaGdueE52Nmd4SldRMTBaVDhQYnpScjZDVXJDaDZDK1ZYQUhOQ2ptWXIvdHBJbUxPemd3SEl4d01MOW9lbmFIOXFpRlZuQkJnZDRoMXVvb1IreVpTamVteTRPTzY5ajk1WmZES2pxNS9mQjJacHU1TXRQYVhFMUlZdExaUVV2NGhFN3NieGdsU3hYUG5pTVlqY2sva2NFZVZ6T3JlZFpJaXhtdE96YjFIZDVTdWJxbEgwWlROUVBBMGY1djlTNVAvOE9sNDFxN2dxVC9BanovOWlCeUhHTS8rd1oxZEI2ZitjWFQ2S0IzSEtyUGhtaERYeUkyQlRPRVk0RnBuMHIvMnY5ejdpcndCdTIyd0k5MjJ0NmZZdlViMmRWZkdhd0pnREJQb0VQcnU4dFZ4c1RRT3o3aTYwNlZpMitocmVLVHdQOXVzWTZoM2pVQ2dsMTBmZk5ROFUwK3VYdU95WVZmc0dFOTREN2RhTkJNU0JISkEyOUdQanNrOTVNZ01ZZWN2cmg3T1ZtUGpaSzI5Y3Y0em5tYVA2b0xkVHMyTEVVNXdrQVZNc3p6clZuQmdPTy9vd0RsS0hjR2pvSms5NlJMYlhWSDQ5VWJ5THNacjVhVTJ5SFZ3Q0U1ZzV4aHYzbkhacThBUjByd2F6TzdxbXNIRFNXQTN1dTF3a0lCQm9oelpidXplcmhBN2htUFQzSTBJSGwwR1djZFlpakVla2FPM3g0YjVmcUJEdWtpM0Z5OHVleGU4TjdFN1oyOGFXVGdMYUc5ZlEvQ3lCMDZQWHJ1MzIwK3hqZU56ZkJjYjl1VHdXbSsvNjdUbHBZejJrUWVodFNmck9vSlRaNzg5eXF5SUhKcUN0c1Zsc0dadXdOUUNnNmVFdkJ2QUZNSXpEVWZZNjlrRjgzVlBKTExHWUlHdmg1UjZPTWtrVHV2NkoxZGRBMUhTYUdRQlY3bFFtYmZvT2ViNHVuTUlOaXA4d1I2YnZ4WDVpM1QyYXZad2tCM2NBNC9JSG5oRWR2Q29adERrL0RrM052OGdENVcwZ1dWclN5VUJScmVqNk4xb0NNMlhNQ2R3dmNZMURmYUJVVWNodXUrb3ZZZ2QzaE15d2RwbFFhbkloWW1ocUNsUytoUHN1SU9jZmc5SmVEZVVheW9IdDBKZnh4VWozaDJKWURqS2NWK0kwbzFQSFNIMFRaWVhqcGI2bmxBZGJacnUxekhIWVBqd0cyL0dlVU00Z3NPVjQvbjc3OGNOZ0VhU093RGU0OVBWRTdQK0ZCL2Q1SXhUbldWc3E5ZExVVzVxT3N1QzhpRGZ5MzYvVlNtY1NFRnVPankyREpmVUNNZkFnQzZQWnBCZDgzTFJwOUsva0lkRUpwUVVwb2FpcjZ0NXZRTVFsNHFwWVZOTWkxckN1NHVRM3JRTi8wVklYTjFRd0YzS1NNQnVQTm5LWGdPYWt2WjZYc1hPQWpvblVvQURuME0wbW9WMys1N1Vicy84cnZuZkRBb1NRNTRsYVpEZHVIWTR4V25wMlhla3RpcHdiZXJacUNoemQxZjF0cHhkdWR1T2ZBZEpEZ3p6ZFdEV3NvUy9ibmFkMS9aVi9aMlh2SGY0TUhxZDRLaGVHNmRvRXdLRzA0M212VG9PR0E0aXNURUduNjFiNmthV05SN1RndmRLSW9JUkpzYlNwQjF2RDJrRnE1anVPdklCRnp5SjZFSVA3elU3eXQ3dzAxeHFNTG1IS09NVTM2UHdHdHlOVGc0bnRKdTNyanE0dXRmTkRNdU4vekNlUzRqVkFycHB3U09ZWFBhU0VlTUZhQy9ybmRtUmlFeStuYmRkQWxlV1ZJZ3h6N1J5VmpsY1libEd0L2NCaWxNaCtuUG9rQlIxWDhnWHNCZG0wRWlQS0RXRjJJREExSURaUWduL3d1ZUZtRjN3cU5BaGNEQzh4bkF1YTBJemgwZVFsdklqYXEvaDhyZUphMjNXR0VZYXpFWHF5YVdHU0hNU3pVNDB2Nms5Y2FSd1ROMHJLS3NMY0haY01VeDdzVDR5aitDVHlFNEdnWnd4d1E0UzQwbnRDZCt6V0xabjZZbWVkQlljV1pZRjVFN3VRckIxaG14N1ZRWFU1cCtoZnMyNkc5N3d2Y29aTkFZbG1jeDA4OGJSckYxM2dTcEtsV0hxQnFCR0dDSTdHYmNCNWJGLzBPWnBxeFNISUR2S2JFcXcraWxFNGFQUHUxRjZUdjdJU1ZUSmE3VWpUNjRqVStWVlZ4TWx6WnI5UjVwQUZzMzErWmwvM3dBRTRZNEFsTGRLNWxJZWRaOS9uejUvK2w3dnNJMjMyS1JjSC9sbmhadkRUVHV2bHJxL1luQXhwNDdNMGZDVk5jMXNvRWw5ZUMyeDZJblU1Qzg3NEc1WStJZ2JiR3NsYXMyYi9laFNkMGRnanozeXBWakw3Z1VHTkc1N0lENngxMk4rRUcxb00yczltaGVDaGYvY2tlZzdTOC9Wa1U0NzRXRFhSV0lVNDVoWld3ZGR6Vk5KWVg1b3ZDQjRIMXNJSHMwRlRIZU94dXpFSE9IWkhlT1cyZ1ZYcVhIY0t5amt4ZTdOem5tQk45ZllUMEFhcUFOOWtWb0lTeE4rRDdkM1FZNkNSMmJBRDQxYjlSK3kyZFhteWZiSTdSWHVQVnFRVGthdGVhLzVkTExnZmVhSGRSaDJCN2J3VzQ4YkxwR2xLV2pTNDRweDVzK0EwR0pJYmFZd09MUm4xeFpteUJVM1ZwMWpPOGpTZERqclpkeU1BKzc4a2FPOVJMeGhNaHV1VHJUbVFoek5uUkNrRzdCZG1JMEs5cVZxNE81TFFvWjZLd0RYSW1Ja2dvbDlZaTRwTnI2VStEL2hOTVoydkpjeGRjU3RUc253UFlBazV2VUNXd0tVRFlRUUYvLzZrSER5NGs0dTI2VjJuUzdzbFVyYnBvbGl5czVTSHhYV3J3RDkrYzkvcVhzQWdmN1lEMU44RnBvSndXRHhQVURWTkw3NWxyeDRhL0pXdkxtcU1zWW5rZlJVOHh0K3hZVGZKNnpkckQ2SU1vbDZGYmxHd0xhekFDNkdROXpCRDEwbWQ4RWd1MDVjWGJ5RFRoY2tSb29NY2pRVzJ2dFpsc0NqT0tBRkZ5K2czZ0dZcCtpYXFtamYxQzQ2QTlRdWV4NVhhbWxuMGtzdGt5Q0VVV0FOa2lYTmFjUTdSTXkwVjhscWJvbFI4MzZYSWtnRWlZOTdBTzI5QnE5U2k1UEV3MXVLczZUS01ncHdScThkRkxzYnZVZkJXNUkxYVZ3N09VZzNxcWRYa1haZHMzL2FjN1E1d09vWW95MFF1MTdVSXA0bXBicGEyYnFmMXZMNzMvL3dyYjdIby9IVXpUVXpmcDArNmtZYlF3alIvSytYdmtocVlINnBaLy9leElObmZJeG5qOFVtL0FVUzcyNGtkcmltenNKME0rc3l5S2o1ODZJUVRzY05Vam9HTzVaS2xlR20xa2FXTmJpWG90OFNnZTlnaFZ2andWc1o3NEhLY0VkbVBWSWE5bEpHOEJnV09UWEJ0UFFzajAxb0VDZS9oenpwUjJveHdnOXVoSDA0cm00NDZVS21HV1F4ampvTHB6ZTduYndHazVxbWthd0xHQ3RIOWRoNEE4YllYVS9JRXJJMEhkWEJia2N6UnJ5TUQyQ2FPeUhJYTJNWm5OZms5NzNYNXZzb3djVWM2Z1NNbU0wbHhnMHNvcEdPZDN1cldURTdBUVM4aitlT0xJRVJpVkc1UnZGbEh4SVo5eHJxUFhZNGQ3QWhqL1duZUpPOTd0VjB2QWxlRmIwbWRLOWpkcEdPN1B3cjA3VENQeHBtdVY5UkExeVFwZU1RZGpWTFBZa3NJWHVLamxncU5iZ1prQlNESE9PcXB5WTh1bXlMazJLNGVPdHFYaURvMHAzZUZ5c3Z5SkxhbkQ1L01NSTlBTjhINE84QThJRitmNnVReDRqTSswbm5tcTFqT3lucVNTSUU2bExCd1RITXQ3aHN5UUJxemNKYkNQeTFBSDA3SUw4elhsY2VYQm02cGFjUnhJQW15WEd4a2lkSURLRzF2RURLZFEwcDlKMXNzT2Q2b2xVMktTeGs0OHQ2VC9RVnhWaGtVYWFaQWhZQ053QStRZkJBV0xUaFpqUTlsR3BETUQ1T0plYXdqa0VrTmptOGx0SWN1TjFlRUl0MFBtblltRjRYMlJQUmlDZEN6alFXNDZsWkllUHRxb1ZUdVliZ2NIR1F6ZjEySWFmcHFCNWJLV2JZZEllL0c4NWgvRnBqemNXQ1k4YlB6Y0Y4QjhDSUtxNGwyMWdiN050dnZ1ZDJtcy85L081MzlkVUthVEQ3aDhNUlZvOFk2a2pXL0E3RGVIcytEVjFiTzB2Ti9xdFZiODlkKzFNWUw0d1VCbWUzZDJTaDlXYklOcloxNXFzakVZU05jN25vby9ZMFRyQ3pNSk5wK2duSGdxTit4cCt6WkJoVFJsSUVTWmJIdk8yOFZxa09CWGVSY0FDRHozVEdyZzB4OGJHOWUxT1F6Z1JyT2hDREVlOUc3SEJBQW5ZanRwa1hmeVlOb1J1eEwvNjIrYWFMa3hKMEx6NEw5M054N0dGVWY4ZVJPeFdJdlk3bEJuWWMrRXJqWkVGaUdGKzhBVHV0MjEvSGord2V2b25UdTZ1RFMrQkRjKzBzdEUzMklmUUVjL2E2d2tzYjVMVm1RbngrdnNKTFA5NWtHNGpPNTFjdTI2OFJlaFpDak1qR2lNdERrK1pPNkFpMks5LzVwaG1QMStKTGluZ1hNZ3B4OWFSOXJIYkNJcDdBYnZSRXU0THpzazZpenRjcDkyR3FFSDV5UlR4R1hIM2M4TFowbnFzb2U2THVoRnNCY1MyR0V6MkpXRGtoa0dQYjFSRkxoY0FJZTVETjZSMnBuVTJURStjdGc2L0djc1VuNHRwdkxhZzFIYS80SkkwcmlJMWtWMGhibkwwQjZraVI5VFZmTG5iLytxLy8rcmUvL1JkZkMrWWVBSnhiQWtLNEUzQklNVWZmRzhMUHlWQ3RubEVhbkJjUTlYdGtyQWtGdG5NVkRaTys4cWxtL2NYZzRhcElZRWZKdUFaUFFYR1Z3cWhrcERBMDF3dlRzYXc3dVRnS3dOaGRIeUlPdkVwdEY0VmRFUEp4ZWJOT1lwZktGK1FvYnBBVVhtanlqa3Z0WEI1S1JNSDBrWkpybzRMVVpwU0hNUDRmQmkrRkNKdzJOYVVaMEFicnhkV1I3cnBzV1loVFkwMWl4OU5yN2ZUUnRPR1FLN0RRTkdOVVJucHpkZUh1dWpveTlVbFVCZHg3UGIzWGEzUml4TGNqdUFMS2FPTEdXYnVIR0N6d1BkZG56ZmQ2NjVJa1hLQTIxamhsbUVZZ2h5NnpmejdKeDNkL0FjZU9rcU9RdHVheHV1UGpOYk4vdnkyZ2F0YlJyZkdDN1lIVEsxdDUzd2h5dkwrNHFsRmJpcXo0RzlpMjlUR2tnOWplaEFGdG9Mb1lJYmdiVi9NRkU1VlNmMEYyb2s2b0hYaGtCN2NyOWJqWjFocjYxcnpLUHVLTFdqZ1lYbllDK0JFODRndVRacEFqL3dnNkpJRkxreENmMGhmQ1Vlb0lKbEJTNTk3bDJtbERXM0ZHM1Z5TXZ2K1ZrbmVsb1RsM3d4N0w3b0JNaTdoa28xOUtEYThNT3ppUS9qSXI3TmdseStHL0UwQjh1aUJtOFQ0M3IyN2VNcDBiSGdidHBjdVN2QXUrNU8zZWhJVHpHckVYTW9aRHBxRjZiSWRqaFBXTlAyZFJNL0FxSjRGeEdiR0MxWkkwb1BIZTlNazh6TjB3ZWNseXBEMHg2VzBQWDJKZEVxQTU3a1dhZUhkQzkwWTg0ZDI3NTMwUzdManRnY3hOUUxPbjZQeU9ZK09paHZCdG1KL2FUQXNZY2c4UGFGcGZKeU9nYzVuc1poZUozVU1XV2pnbDRra3dxcU1MZ0ZsY1AwMTUxZEhiamoxMXVGTGowenBKSzlDbE1qVlNWSGRKcU1iTnluWVpEQjRYQm92bkEvR3FuSnBnNkFHaXZxUDc4My85MTMrQitNTS9xclpTT0c4SmpJek1TWENpaGtHMzdDbzYzUG40YkZ5bDZaVFNpRlJFNWpha21KOUtWcWlhRlZ3NlY5THV1bk9LK0xBNk1vL2dnOEJTajFpRXMyNUZYc2pSMVpudlozR2lKZlpMOWVFN3BPY2RkM0tHY0YralBWbUtLWFFKcHJrZ00rTGQxNFRIME9EeEhRQk5RcDNVMTdQYVVYenJ4MlJYZjVsaTdQR1Y2VHVlU2JmN1FtMFBSS1J3TFFZTHFWM3Q3aFh2QVVGWnQrQlRhV2p1WkFRbTV3dGVxYVdLUisrcU1IWVo0UGJLMEQ5YS92QVBWUkdsZitvc2svNjZIK0IzUXZuc3ozYzgrYThmMS9yODkzLzhRKzN4ZTZBa1pDL1NjYWlkU1llYWdQd0RyQVBPR2QwUk1kS2xzdHhVbUdxcmRRalR3R1dhOGszd2VqMkNkcGRMSWVhUVJVTXptMld1VFlld2h1bW9oZDlCYzdUSHFEQVhwNU92bW5NOXdrZmlvV2tSUjFVWm1GZWRTTFdrdzlXUUlkSnBQZHgyNThlT2EwR0NINDJBaWJKUkpidGpBRnJNRFAvSkNPNlEzaXlaZFBEU2pMZ0phYTZ4cDJGZk9iTk9TOFViSXlsZUVFS09rYWdkV1hTT3pZUmpQQ2tjWFMvSVIvNE9MZ3E5MlcwQzk2VVJibnZDem53ZmFabzlxSjlKT2k3Ynh4Nk1PUHhlSE0yQVhSYmIrTTBvdHRYdzZpQ2VnckdmRGFmVytzZ0JubUxhdmt0Mm9pcHc0TE9wMThsOHg5QjVZL0t2RkVjUTZzSlVzbHBTSGkzYnRiNitRdnBBR0ZmU0orOHVma1JheG41cHZnYk5VYW10aXp5bExsd0trRnV2cjZkZDBWeGtYK0E5VjZmWlhyeHB4bmdkRWxxTW5jOTExMzJKNnlKckZ3VG1mM1daNVhKTjFFaGZpMWUvREE1YnlyVkdTQTlMNTdoVnRKcmFmeXFIR3ZmRlUzYlhWdE1EalRuVC9jK2Y5Ynlmdng5TVV2NTBBRWhOOGNjVUluM0JnSUJrSVg3MlR6TWRvUzRWSkZxOTMrNlM2dExPTGxxekVUM2xwQU9hMHZBN2cweTc0RmY4RUhrb1hOMUlkalcycGtHdkYyWjNsWDBOUHMwaitRaHVPcjhXK00yeklMalhCUGladllkaFo2TXlnMlNyYXVyTTNNaTdWRVZVSEV3TmpkWnNIc3d5TkVLbHkzcHMvbmtMbTJUWjQ4V3BNY1dscUdyYTloWXVLZDcra1JKSGVRbjdDOEhlc3hRMTl4N1pMQ3BKVGlyaXZ5SkxGb01qQVk1bXhwb1dxeHBrSjdNYUZTN1VoaWkxdUJsUXYwT2FwV3FpNVlJTkQ1M1p0YmlpWUNSTmQ4eHI3ZkJ6djRiZ3hiV1h1TGNNUGRCQ2lEcWd6L2REVk5lMDZGQ24rM2drcGFuLzk5L3o3SjhiZDM3Wi8rZGZmdVpUUU5xY1d2akMvZmpKZjRubmN5L2xxeUVxT2ZmcTZxSk9KbEozTi9DS3FrTEk3ZERLUHNOcVc4MFJrdCtPR0k0UFdINXhRbENkcFQ4UlVXd1BKSldYU2x5akhJWFhacjFIUVF2VDhrbzZPZlRKZGpnWU5TYnU0eFZiSjdMZUpFNUxBaGU3ZksrODB2SW9uTloyU2FTV01JTXZ4dElrS0NGRG9oMmhuUnk3aDR3eHVZdUUrV0I0VHhrbmhPcVRNazlqN0QwdUJvVWFUeE51STJsQ2FCOGE0YnNxcndGMWJQaGlpSzJOWEV2dEsvTE9zdVpSdUEvWGlIQUh0SjhrUklKdVNyYmpTM054bGVJWW42bSt2QjY4TGUxQ1ZqTmVjbzBkOThDYTBEeVBhVVFVT1lkbCtsKzkxaERzQkowN1Rrc2RqbWNYZEtKU3VhTXQwMGVzSzZ0ejkwUXAvNUxxMldKUHc4OVJ5VVhnd0tvQ1RyQkNTanlHYVBQdmU1VCt5Sjd5Smo4RFdML1I0RE9tKy9Pd1RyWHByNlU2UFZrdXNJWXJ5Uzc4UHBJV3J6VmNDWHZjSWdqRUpVSDk5M2plMXQ0bzZtbjRQZEZpbTJPeU10WGlkRzVHWkREblg3QXlwNitqSERWNWRmV21WdXJoMmQrZ1FHQ1NXbzJSczRYTWlTWkJZMWlHWWFyTHdHWERZTmF1WjZRcERpNlc0RWZEaWF3SnVSdjZsWnRhak5zMSs1SDlqVU9XLzloT3JLcW45eEFLUVZSdXJXdVFhMTlsZUFyUWJaNzF4M3IwN2lwYmdhWFBYLzBwN1pHNnhCVHJ6eEo0VnFDUFd5akpMM3g3a0w4b3hPK0kvUDc3ejk5OS92VE5YNy8xN3dJaHovSENqQkVTdHdTRSswTkI5ZjZBNnE5NjNCY0plVk1BS3JYT09VWlVrMzZFVUpNTFFjeEFxWkgzQVVpcUo5UHNvOHhZSUxsNDdRUGFsVmtQS2NtTlJhN1I2d2xOVDlwN1ZGd3h0SnMxSGN0MjVCMlJxSjNJcXBObFZ6YnVkUVVPWnNkM096cTc2NVJkZWZ0eXZRTnd6ZkRtWTJrVXh6NVhnMHNZeUg1MU1jNTZ6MmZYWHRtT05DWW1pV3BmcVZjc2o0U2c2YkVDTFJkVlRlMTU1ckxUc0lOcXIvYUNtNTFPQlk2ajBlR3NLMWRhYTlPT0trVXVHeGU3V1hldnNtNWtkNEtZNFowY05VdEp2ZUVmZ2FOeTNSTFh2NXI5aTFjZDlDL21FbEkzVjNvUG9hNWUzL0tkSGViOXpQZzVPWElhK2VsblJvTWppQzdUZC8zMHAwYWhqMENkUDVUdTZnZ213Rlk3MEVVYUJMUW1ObDd2TzhBbGNzYzFBdngvcTJRV01NRXJ0andqbzRLdXBPSlkyZUN3QVhtM1ZIK1FYT1VaZERwWDZYTk5ZdDE1cGltTmVXVVg2dE9XcFVyQ1NQQkxDbXN1dTNlUGdodGFqSUE3WXUwajNzRlpnbDZOZDIvWkh2L1J6ZTQ5aHV5Q29lMkdSZmU4RVVtNkdIRjF0WUNoeGRoZHp3aEJZL3ZOMThPWTlMeWg3WnE3cXpqWGZwaVFidXhSTzlMNTJEdGhSM3BJOTE3N2JtZWNOSWZmUjhXZC9CV3RYa01QMTZjM254ZEh6Uk9nZU5FSnVIQm80dkxhZkROM3BIc2xQWmNqMDg0WHJvVndiQlo0RzlBSW1zL2F5STR2Z2hCQUhycm1GRDZLd3hrR1FicldhWWdreWJWbHp3aFNKMGZUYWw1VjZUdXoyK1hVeW1DYXU5RUpzV09FL3hxeHQ5WmsxQ1c3dXNNejRiRXY0VElZUVJ1UmpkRUpBV1BFK3hxeE41emRpQTVHdkFGOVNPNzRTalpQQ3ZxTXcrcWRjbDNIRXdjalkyL3dXTEZHNXg1aVdnK2YvbEh6NWtLQVNmbDNlZXJQOXdGKy8vdmYvL1d2ZjlYSGdUUzdVT0M4RXh2N2tqVmRQK1ZoTURuaFdzdzhCcVluS3ZWOVUwTGxyU2tOaWE3NWttWTEveDl6YjZQbHlHMGs0ZXBuSk5sZW45MTkvNmZjZTlacldkSkl1bDlrQUZGWkFJck5rZTE3TGpRQ0U1R1JrUWxVRllsaXM5bWFCYmNoZWgrYW5RZEl2WW1yS2ZaR3NGUmEyeEdmTzlRSEFBQkFBRWxFUVZRNXMwOHBMa1V0VWRkS3pReG5uVXIwd3RVS0dlWk9QaUtxOFQ2Ulhlb1BJSHV1WGFUZEFQaHN1bE9Rb0Rhd0dOTys4OTRibFlpbFJvQ1JIZzJpMDBHdHd4L1lGVVdBWXVxVTBrK3ZMTVArbU5XZDhiSWp2UnVtQlo5UnQ1b0RZcGpaK1pYOW9uUlgrTTA0VE5KUGMvemxZMkpwL09FdlhVTjFQOE0wVkgzZDJFaUUvN21LNmphSHJUOXYvUC93cHo5eFgvNVpsNnltenlWWDE1bTN0L3JoQ2hFS3FrWTRqK3FOZmtrdjJaY3RoTjFJWExub1VwVTI3bjdHTjJpQ0N4U3ZtTDFIaXFFbllsdGVpVWl6OTA0cTVQNERoRDdFNnlZeVZsTUlYdkJOdVNPT1c1QzF2Q3FsYzk2eEsraks2NUJacHB3TDhqVGtyRmhjWFhteFllYk5HdGx0VmZlTWUyem5ITDBHUTdOK3dPQnZHZzZNeURCWS9iazRjWmtaUE1QRjZQeHU5OEEzOFI3U3N5U2NxenIya1dBd0hQaFBtajM4UXp1Q0h6SmZFMXpQem5tdHY4OGlPZ2xjT0F4eHVYYzZNNE1EbWhCdmQzV3dNNDhpSmhOK1pFWUt3eHpUak85SThLVitoL2NDak5CM01HWHd2SVRkWFYwaGR2Z21KeVRpMWc5KzVNY0xtWlpoRE9QcGcyTUFQaFhaYVoxai9ONUxHODRNdVY2K0E0YWZNbm9JM3VBT2liY2JzWS8xV09GRmVLSVdIWmJNc2NicGV6MmQzUEZqb3NUYXE0eWNDci9wZS9Rck93SmpVMDRPRU53Z1BFYlo5dDRmeTVCQU80THNLL2h3UVg3OTl4OS8vN0hlNzlkM0RVSmpmMEpmTndPa3cxUWpMNjIyTG5vL3ppQ3kvSkp2ZmNKSEdTQ1lTKytNcGhIRlVONmFDOUh6SGtBNjRKM3NrTjZIVUViM3lJN1hqbVg0QXJScjc0OEtUenFRY1MzMUx3cnZjUFl5ZG1TUjNRblhEUUErWmVYLzZoZ1ZXOGRBa0wzMVlOdDRYRDVhNlM4K1ZtTEwzanVMQks5aG5kd0ZqUk9FR2xBZloxR1ZhdGx4ZXhkV2ZUSytmZ0l3cDZETFJET280T1JLNWM0YlBHWElBSzI1ZDNCQk1peGpsT0hRWXhTMFlvNHBtR093ZXRWZlY0MnVxTGI3RjZvWnpYcEVxc3VicTQ2TGtFL3BmY3ZuOWI3KytqTi9EcmgrbWFhdTJPLzE2L2k4OTg5ZFZkMEZhQWxaQnk2dE9nVnZhOXJMZmJZVnZ0MHlGSGlJQ1I2alNJeDhJR09NNjJIYi9Sc1gyU0gwcmp6SVlBekI0dG1XOWdqVVVmR2c3ZjdqalZNQjFVRGdNMHRHOWdZdjVBSjdyS0ptbmdRV2ROTXAxb1djUThZOHJvbS9qdXBlQzdxQWlIZURzMmozZG9WNGgxVDUrb3hDT0JsV0doTzB3b0NhVHZDVGdtYWR0aE53N1dDUXhZdVc1VXdJTFVibk8ybDNHVW4vcjNMdE9oM3A5bFBxaFpQaGJlMFMzRmFzWWY5S013VXNvanhoTFVnZjlxaDZmcnVPTExRajBrTWlCZk1KaDROcklXUVl3K2tXRWJ3Tzc5NE9HZzlIUS82dlppbVRBVEpjVXVCS0RUR3M0TjZnKzNGdzUyUjMvbXRrbCtwSVQ5Y0x3TzYwcHhRZFA5b0RyRDBmaTlBNVM3cGsxTFZiY3phWmM2bXYzZ0JyTmJydGNQbzlTNUl1UmcvSFRqMkx3aExWNnJ6T1ZZYzcwRFg0cUVWMm1jTDdkWWJaalZvZnYrQUo1djlxL3FTRFh2dlpKb0QwZWp5THZZZG0wQkx1czh2SDljc3Z2d0R5VmlQdC8vbjlLMzRPVUcrejZrdEhUSzRzbUY1QUhXTHY0L1ZhK3JWL0xWaVZxT216M2pEMStYTWZZU3ZZTFp6OVB2K0xLUjFScCs1ZzFzTmU4QXVrdTdxTkVzTktrUVdVK3NJUlZHMlFzK3JQWVBqTXczYjZYWHlYZlFlSllISmg5SFM3U0ErNTNRQjBpV2FyOUZJWmM3QmlWSmJoSk1jL0Z0ZTBrR09FVndpSGdVM3BTRmNEK1dYb0hDb2pUMzg0aEpnMXVCTFJzU3k0NnEyMTRDTWU0LzF2OW85T2pSUERVNHFoWEExVTdudHpyTEhZTWNETHBvRFJ1bXQ2NVFwdWc3NXVsTWZ1M3dRMitPTFZkSHdaeTNaNStxRVlFZnBUSGR5VWMwSHExcHp2MFdYelh6RytLMkR1ZWdiVjdHV21VWitlR25TZWpHT3FtbHpWSFRHZWZ1R0RQeUNYY2dneHJFWUJSb0xMcUpvaTJ3bURSbERGajJHTnNNZHdTdThLRU9vVVVyVEpTNStoRFVoYXVXb09DVUduM1lQSWd0YzZENTB1c3RDYThyV2VSN0NMbUJDcGJtRDM0YzZNZDNHdHc2WmoxMExZZFRpSmpwdzZqZGZabGZ3WmZISWR4Wi9JTHErZk1IdTRPVlpZK3BBWHpoUGVhWjFqMlhlUUZ3VXNJc3Q2Sm5EUEV0ZlIrRkwrVWVRbDZPVi9TYWxubmc4clljcm14RmhFTzk3WEo3aEJvdEFKb1lPNE9qa2xHVXlJYWM2ZWt2b3doQ2dZQ1RsNDBqbmMvUkhFeFZJZVhUdTRJTXZRVWozajBYWlU3eGNhTGttTnArUlIyNTRMVGtCZXdNS1BXazhSWm5uMTVObmFOZGhEZ3NCZjFobVhSY0J0TDRhSDZaTXhtbkVkdzQ4WkNaRk9TMjNaRkhPTU1zZnBURWhHaHE2bkd6b3BlTm1zclRKdndSZEYzNmcvVmtxWERLQStKR0RNeGxQdjdIaHQwTE9qWUd2aFdHeGNER2wvL2V0ZjhmSnhJRy94elllbWJ5bXNsaFNNeXRiUEJ6Qm9JNlIrYmxHcFNIY2RvQkh1TDM3OHZXNWd1SVZCbW5aYUFRVHgwQk5ZRkFzb2FTRWFtdE1OMi9TbmtOdHBaczVVTzdnZ3BCMFQ0ZDNERGZic0ZvbEMxOFR1ekowVDhwUElRc2p3Y0FPQXI4cjFJZEhLMW5ETWdRY1RqSGNYSlRMc2haYVNkUlJVV1VmNEhFNVorZVNhZDRTNk5SU0dKbDE5R015SXM0QnBMeXhHZFR3d0luc1pPc1BBOGVnZFh5SWs0dWFDRlRZbk1qMTZYTHhIbDhHZFdVanlYRkk3djZmR25xMCs4RjhmNkZFbGMvZHZyNUE1TzYwdy8zRmwxKzZmSDh4eEF4QWFPSGZrdUpnK1YrdzNuMzd3Q29EVENGT2tWcStHTHU3cXIvUDd3c3BTMEwxTjVKcnlSQzVla0JqMjFiT1N6T0JHUEh6cS9VT01xVkFuUmxYMXhCZWVzdTkzRHJqa25RWDBJVFpUR2w3RjY4NmhIdlVRMTFBdUVZTzl0N2ZpRUdDa2xuUXhPbWo3NkFJODRrdElPREc2dmlUbXZIWmprUnFCOFBsdlJnRWFEN0liWWpkK2pTNGtyaGlMWUlZdkFoTzdHd20vakhHY3BHZXc5MEpuUzhnRXJzZTRZbHkrYVQyNWp2Z1JuRXFqemd4dExDRjkyTzBsS3NOM09DSC9BZU5aMzJmRUswazlzOVhWRVJJSWRnZWZPQTdwVEpCT3RyMEloaEFqcVcwRVQrQ09oSW1SQWxSM05TTU83OGh3ejllYUszQXVRaExCdEIya2xuS3NWTURGeUREaHlkaVJIQlh6ZTFTbjlkalllOGdTdmpBekxDT1piN003S25BV0xPdlRhYjJNYmp0ZEVJYUxDRWgwWWdRRXNZSURvNE5JeUVjai9NWEloSzJjWXB3bCtvN3FJSFpQWkVKRVlpaEVud1BLUmFTRUNxd1hIaHhlZ1BEbG1uUHB0blFxMElaN21IcFhzZDVxWktjQm4rR1BQLzc0NXgvK1pKd2ZDMWpFbW9uTk5QRmFGWkY0TWJSRmdUUlhKNVZBcmdPR2cxdUZYM1ZQdzg4TDlMdkNncUhsckhBSXVLRFdna3VxWHIvTWNiTG1WY3d5TkVKL1ZkWTRUclM0ZHJLUkIzSU9FNnhSZVJjMHVDQlBvQ1FlMnA3OVNMemRBQ2pHY1pOYm8zRStaU21uY3p6ZUkyNU9YRFVUSHg1R01pWS94NnlEWFhPZUdqZEpEUlNnMDBOZDNVMXFtdy9JcGwvdmxHc1c0MVJqdndhdXJrNGRLODBDVW9uaHF3OGgwSTUwcWU0dFd3V21iVjU1QXNyUXA5dkc3cC9wQ0ZIUmF2NW0zRExWZ1hMQi9LbzU2dnJoUnB4cmt2MC9sd2VmKzlkUzgzL2RHTlFqcTZKSDl3T3BvZTZvWktpWk1OWHJXY09PbDMzQ24xaWRZSHNpUGEraUMvZDcvL3JCNVoyc0lYTm01aGkwRUl4a0dGY1pGOU0wN2VDcmRSb3VtcitsWWNFVlAzUGRVbk9pOGJQTGU1RmhsdDVhcDI1YXZvaGZLbDNUZHNTZFBlQ1Q4WVRYS2JRZWdpNXUvU0E2cFdxQW9EWGRMelR6ajZENWRmWnFjY3lNMFljTCtFSnRqMHJzYXRSaFhrSEhWeDlYdzRiWlhkM0duV0dNaEJ2WjhSNjFrQmt1NjdNVEZ1U0pIOXFieHJIT04yUGZvYjNROXhRUUNlZERKTFBHU0pUTE1OSUp4cUYxVndlZE9pRU13K3ppSWNRd00xSWZEczBNTFNWMTNCbGR3SkdaN0Z4Q25iWUVPallwRXBXUWlHUDAySVZwZnUrajNJM1lPM1BSRC9Ob0FBYnZVbnJSUzUzMTB3TzhnZ3E4TTNWS0hMM21KK1JvQk16U2dVUWZteGI5b3dHaDgrRW9abGJyY0hPRXo1WjBxUnpQKy9vOFB6dXA3d0VTbSt4Ky9hS0tXYzVZcFo3WDVLRlRoYVVZM2t6MFJoK1lMUWZOV3hSQWZ1V1FJVGNEZkJiSW0vdEVqZXp6d1BGWSt6UVc1SFlQUUUzKytKQlRPNXc2TWZ4K1hYM01BUlpmYWtLcmQzTlowYm5PVmVtdHMwNkgyRjNwUnVqZUZ0b3lOUGNJM21XdTBRdnk3Z0loTWt1RS9RN25TTHNxZUxCMjVZV28zY3plWEdMdk84ZDRSNDcycEdtZlhsdHdKcjMrVy9HalVJRlRyUWJ6Z0FMSzFIWWZvNTRYV054YVgvTW5RVXVzLzZzdFNRSmlMQzRQMzhkM1prZHNkMFQ2MnZCem52dXN4dGFJVW4yWjFiaG1wRTEvM1J2VVBZOHZKL2IrWElUY0JoRHg3YmVmOUkwL3VsSG1HVUZyb0Y4TitQUWRHWHlxS1lIeXNabWV5emRjSG5xbmQ3bkVmV2o5M0EzbENPSTk0Z2FuUzBuMWl3bzgrdDhVQmZUZWZUS0hnNGtFMGFUNEFSR0I5YlUvTlVmUk1FeUxRazlxV2tUZ1k5TWNvdmhxSGhxSHdkS05SRTQzZTBEL2N5VVppanhMUldTeE0reEc3TTRIWFBDTzJENGlGa2xzTnhJRngyMVJBT3ljMkFzdCtQc2lYWm53WlJna2VJemtDcWNqM1U0SVJyZk5NZWcrVWZzd3JzV0k0SUl6ZkhJdDRnN3M1SjJ3STR0K0Q0K2dvL2JlaEgrNjU0STQvK05rT2Z6VFMvWmoyeWRZaUhTU0pacEc0b29SZFdLeDNYZGpJZXpEaENTcUl3RzdFWkVZVHlFaDJBZ3R4b0tISDBJM3VoM21ybUJhK2hnSkFUSFlZd1BhdFJNU2pyRjdseWlHUmpvNVNLUVd4TU85Tno5NG9tSThDZmJzWGFUamtYMWZaQTlQYkhjdHRqbDd1bzdiN29FZnpKR3RzVDc1VTQwcjRINFYxT3VYUHVzTHZyM3VqNkE4OUVTeE1meUJBcllpdk5sUEEySFh3ZDhFQVAvTFgvN0M5d0psRXc4blZ5N0d2RWlWb2ZZazdHcTBzWEh6ZlVVU0ZZZHdiZE1xdHA0NmFpdEVERy8wNnA5YnZRN1hSa1l2eU1kLytpWVZ1NGJnQ0gxNnFLUlB6aFUva28vZ0d2azhKbnhYZUFkNWxuekxNMzRDVU5tckFsYS9qaHZSSEpzYVhYZlZrYno0N2JrQXNCOU8yMnhsaWNLMTlKRXlQZ2phQjZ2cEZMaGlkRXZJN3JaTzRvSEhPVzd2YW5Pczc4ZXNVMHliNk1yb0d0UnJMdHFQalFUM2twU3hXaVdYSFVOdmxWZXNPY2E3M2NueDJyQ3I5OEVCM1hSaDZqOWRGRndTdGZ1dm53Sk13cWlzMXRZM09WeHZiUHIxbXpoODJmODMzL0R6dWMrZmYrVmpRQ1d1endXcFl1N1VkV253ZDhIMEFUNWFIVmI2OFpxTVBQeTZwRGhxL28wY0gvR3NrSVl1dVBjRzQxTHQ3UnlZK0Mxd0MxR01RT21QZmlDbEpkeXBJYzBmVmtRRXBnK0s4M0pRY1RsY1dmVzBvN0R1eFI1RFA4Zy9DQ1lUN3FSKzQ2SDhwZW5WS3JZN0Zleml0ejZhQzhHMXVmZThzRGxNb1dFWVg1QXUyRjNHRlZVMVpMZ2JKcVJYZ0JaSVU2QjFJM1p3RVBHME5GY0xMUWErMkRMYWswREh1OTFEdXIxdzRnb2VaRGZDc1pGaDZnOFNBNUcwZ0Q0dU94NEVJK1RGN3NQTzZUaDIyc0lKYnVQb0RSaGppY3J3UTBLWUdGOUEzcytKSVhRL1VhYjZydXhubmgydkNEdDFEZHVhTWxRWXN4dFZ6VDF6bEcyZzA0M0lHdmNRZ2cyRFBZSHRYU0dJQ1FuVWV4YnRwU2ZlWGZNMVlzRkkyZGhEVXZudUFvblhobXNlekxrc1BkQko5OEFnMGVubEhSVU1MZ1VVZUQ2UXU4Z3NwdkZsK29qZmp1a2UyeEhibVh1dlBPVWQrV0ZtMXRCNG1WN0lvWUZITUVZSHNTRW5ISTZSa0kyRTBBMEg3aUdEVStzeGRIN1hWLzJ6bDhDMVhFZmEyODBySzdsc2VGNjI2VE1wREZwSjFlcmpxOGErbi9mK01mbjJFZlloLy9NLy8xTkQ4dkxSL3ZHemducnhRSW9WMDdaRVd4eDlQUW12c1Z3aktod3lmMWpnRXh1YWI3OTFJdlp2TUwvNTloTWZOWUxHTzVxRksrN3JyL2hEVlNUOFZqY0Y5UTZwSzNFUDRpSXhRTENOS00xc2NVMWdQSnEvZ0MrR1IvNENwaDUwZWlWVldoMkdlNElsSE9lT2RQQ3VxZm0rYnZEZEZwcDJJVGdXOUo4WnZsWjc0WTJMemJ1cVNoSGU5cmFoVFFqaTFOeUo5YWEvOXFOWDZCVlVONHFUZnBoeXNpY0VCRzBKYit2ekVoblp6VGt5QVdlcmk0THYxUFZqdmZkdkZ3QkdwZGZ2TStqTW4wdmlULzd3L2o2WmlLUmdiZ2cwdGRtNDNHcWtIcnltanNGZVY0ZTd0Vm83cjJCRC83QzVuN0k3NHRYUkxZZnlYZ1UwcHFhQnk1eUdDeUk4Q0xhT1VKMEdCaTBPd3pUZkczZzZWNnpUYWpFcWVKSXo2MGlOUkhYSkRydEl0cGQrR1VJY0lUeThWTGlZQ1duR1V0VktudUlyUHNPZVVqL3hnenZRd3hjaTRjZElJSWhiUjdxOWV6c0M4MzN5eUhSYXQ3aTYrRHNnbkwyQUovQ0YrRlBJVWR3NmZ5d2tzVS9oblJCYnExem41d3NrTGd5NER2bWkvcTV3eTdoa3I2dFo5QTBmR25kY1YzeVFHSU5hRDBjd2hNVzdETHQ0RHdrdFJyeFBJU0VjUTU2OEliODI3TjM3eUthcXJ0UDVab0lZek5DQkJudmZDYllYSkRxN1ljMGV0U0JMb21YWXlkMFYyOFpPNnhuRDZXQVBpYjB3bDZGcEhZd2RJMUlZSDdZZTlacHNKaS91dWdMMFdsWXZaOFRVUnVHbW85ZTQ4ZXJ2VjBZcmQwNjNrOWNndlEzamMrdWkzd1ptci83NU0zKzI2emR1QTdnbHdNV3ZIN0tiaDhrZENDNDZZajk5MHY0ZTBLL3A0MDFhNzI1cUt6OTJPek94L3ZxcU5qLzYxQU96MFlSNFo1UTNTRC96M2VpMzkzWm54TzNSdVRxMEk5MXIreDNPQytiNzRZanM1Q095ZzN2Wi95UnkvUTVBa3QyTjhkWklaajdQc2l0ditQMHN1ZHh6dHFGMUYzYkhkWTdVaVZMM0FKeXkydk1Lcko2emdET29SZ01zWE9jUlJNNE1zL1NaK3RxN1MrcnIrdDJSY25EeUtWZDlpR09JbU9iQjdCMDdGQ2JJbzJKbmI5aElCd3RKeVNQRWhFN0d2bHA5WmFmMi8vVjkvNFZyVHcvZ3FjNEY5ekxvM2xvM0FQWGVQMlJvM0M1LzBoMnppOUlhNlc2aE91MlA5VzAvYm5QdGFzUnRjajFPK2NHNUhvNUhjd2VEM0EzSkd1bjlCTzJ0bTVwSmk2djRkQWNGSmhKY2htc1g5eUxETU0yOVhacFZXZXI0cjVxeGd1K3lkc3piZ3hrNkJCRHFpTU9EeEVpS1huTzh1M0hVNmJVUmtxaVFPeGp2RVd3aDR3MlNKMzdIRmNVRWxtVVhNRnBrWTB6UHRhUkdPaUYyRERpMk85SURPeDY3RzdFak5ReXU4VG85Vm54bWRKYWxUMGp3RjhqdWVpZHE0WEF0RzluVmRnVG1FUlFlM1RLZWFIZldHSDBSK2Fqd0JGbzVjMXhvVDk3VVEyRG5ZRGRFWWtZV2c2RXpkdjRDT29TZXRwT0QySnNzREdOM2NmUHRqU0FHRFJwOUJER01sRk40Q0R1ZUtDUjJacngyOWQ3aVBVWENFUUluVnhBTU0xTkFwRG96Zk1CdU96YklZakMwQ0RsNzRFNXpTVllyMitibzQzV1JEbDk2cUl2WFNHcUlBUjU3RnpsR0hjVTd1RVI1blFPbWZwRGVPaDY3RzVCZDZobzFFdkNxTjk3dkVxMmV0aXZjaDNoOHAzNFg3Qk8zcHIyOUIwK0lPWTZpSngvN0VMWWYvaXdRdTM4SXYvenljMjNEcmlpWXRXVm42MFVONC8xSElIM1lnYnVGK2dOaGZzcml0b0ZjN0FrVW9jdEJmOFhJWjR0VHMwT3F6YzIzdWxSbTYxVmhWNkQxN0ZuN0VHSjB4Z0l1d3hmTTd1cjJGeWxBSnBhWnZWQjRoOVBEZDlzS3dhOGJnRUEyT3M5MjcwUHVORUNHVENCOUFUb2RsMlpDd0V2RU8zNTlFRWd4Yk9TOUhMVXdvcHVwSVJ2NVdxODZzYmcvaEh0OVN0NTVjOEtKRFZRZkhlR1VaYkJVSktsU0cwenlLc1UxblJxTjdNYU54TDZtb0R5TVZHTURzYld0TndoT0dlRmcxQ2QvOU9nMmVQVUdkMDIydWdyWGJiZS81SWVQdkErTmR0SjQ4ejk2SnFGL2JoV2R6dk56SDNBWVh2T09HZ25lRGQyVlZRN3p1eXNLUFp5em9ZYnVSK1VtdU5TbFlMdm9TYU1ZdjQ1aTgxUlJ4OVJJNjhlVVhaWHhVV0Z0L1R2dWU0R1pkK2dua1JjZEJZdTRoM3hUbUpmcjlGNUZkbVFVVUpsNmVQRGQ2RWtqRlZxUVRvdjN0Y0d5TGVIdzNSWTFRQkF2cU8ybHp6Q0dWbWUyUGNzTGhLRHU1VUxvUTBzR0Nia2pBVjhZNGNmbzVNWGVoeUFMK08vUVdWSlV6alZ2d0NlakYvYkVNWDVrSGtINDgzeC9MWGw1T1k0WlJMTWYzQkNtOXpxRE5wZk9FSVBkb0tnSWRxT3FYZmtHNlJmbWdpZUxtZll1SVM3WVlQaXVQa01DM1lJY2pTNDFJNjRLZ3dEQnZCYm9Qb3U3UjBIa09pckxWeW9taENhODJtdGtpVnFHQ0NROHh0RFZ3emhZaTR1aGZIUHpZRDVZRVBPWHFER05sdEdCOUFzL2dkMXd4azUyZUZheWt6dm93Tzd0Z2NicFRXT2xZeWNFVndjakdCMTdQVnhBcjBsM1liUGJZUnRSVzV2S3l4dFkxODVyckhrZGM1MC9LU01HQ3JiM1BvbHdtU1pFcHBxWGhjMDZ2NUhJYmNEZi8vNS9wb0c0VG9ZLy8vd1RIK3Noc1JIdHdVYmpRejVmKzFNTXVQeWpBOVhCNTRUNE1ZTFA5anJmQzJPLzh5dS9UY3lib0pCcFUrU2F6aDlERUk5YXQxRmpTSTgzUms5aDF3c0UxeDdZK2NuN0F0d1Yza0VpdUJ1RXUrRzZmZ2VBYVlKU0w5UEY4UElLV1hmTG1wTGJJZzJZK1dBdlhvWUc0NHJSWFRmT2RZZ3ZzZWhXWlJyVjNsbzNBR3lyVlQ4UzlVR3pGSk5naTNzWU8wWkpEZm1BaTVIaE14a0ZXSzkwdlBzWGlhYWZoNDJhSzdDdWpRcjNoUXBJTHViaTZmQjJQNWNXczJWSERLSUxTRisreXlmbitCMEozV0hYbFNaeTNmL29tbk1walBGV3M1SGhoT3V1NTJLWnFyR1lDZThHeW4xb29VS3VFQk1talVjSmVxaUhtYzkzYTdOZnc1M0daUFh5ajl3WGVNT0dRdE5YVk1nWXNyV0dlcHRCdHZVWWw1MnAyUVVGeEs2TFBFcElMY1BvaENFN21YRU5XVVZjVmRYb2hvUzJHTXZ3aFVoYzNZaTk2S3hEYXFNNjJGV2t2ZUZFcEJ1aXpoa2RqWUN2ZGVKOUp5a2MwNVI3Wmg5SWUxSUtSK3d4TFVlTVBtQ011SitRSFU4QjNmaFFoMmNDY3hiQlpYamtSQnpEQnl2SU1UemV4WGlQUE9wY1lwK0dYZk00eHhEc1pYaWtXUitYK2MyUUoxSGRBRyswNjdVcHVCTlowR0Nra3NYSU1TVGhQUXRNMnFJWnBET1RJdVFLVlJkbDJ3dVRReHlkaEhURDNuQjJRK1RsUk9ueHpVNnNzV1VJMkJIYkhkbWpPTTJQOCsxejdEcWR6OHNrTkx6STJraS9Kekt5OUZHMkF2MmlacjVCY3pyQjNxVlUwM3JncmFwWkxRUm50K0dvUmR5QmxuSy9JQmwySTRLc1NpMFJyMmhhSW13ZFpsMHlSdlFDWCtVY3JoZjQxbHg2NC9SdVdSbUcvalVENzlyNTVXQmNmQkRvbDg4LzZaTS9uL1hlSkc5VzRxMFBBdjNLdGlTeHJvR05ULzBTSWkrNDBpWXZyZDcxMTlCa2VrQjdDK1dURWZ4dUE2QW1ZcGR3MFFkek1UTGZvZzBxRDQ1ZHlPWUFoaEJrNFJ1blA1S1hjTk9PQ250NEoyT25wZFNPWUxkRlVERjlHS1lOdkxRRjVLTWpCM1FoTWF6STlUbWp3SjE3UnhTVUZESEd3azBGeWhvdUliWCtYWVZaZ2ZlNWNYNVpWMmVDM3ZzblNrMmZHK01MY2VlNnBPTHlpV0xaRjRabDB6djFVMVJvZDhGUlc3eUxBVG4zQUs3Y1EvZktwUjhYdUZUMTFNQ0ZRZU5CSDZmVHhwVk9vSGExdm5PRHBFdWxIdFN4V2RYOUFJQVZaRjh0QzNOQldqWG9GM0E3dHhwY3RKSU5XS2x2dUpHdFY5WHdOdHpJS0hYeGVpRUFMeHhpbTFkY1U5bkFVQU5FUWJIOE42TnFHSUw0STFhbVBpV204YXhUWVVWQVIvZGJJVTlDWVk0d2Q2cE5RcVQyMkxpVWIvSjNtcEVuVGdLN0VYdVBqU3RHT0xmVXVPZno3QTJ2RmNCSld3T05ObGNJTzdranNjM25Ha25nYml4a2htNDdjMEV5bkJGNjdPQ1RIWDRuQkxUUlhVOTJRam9COFBWdzE0L09rN0VJZmhHTjJEeWhMWUZ2eXZhb1NEM0ZtbUJ2UCs0SmpGb0s2d2FMbDZodUVOVnBYYzA0UFp6Z0dmYW9FUGFRSTkvUEFvdm1JcklVeHBEV0s3ZXljZmYyanFlWWVXa2tKTXczRWZoSjRaQWUrSVFrQzBibjcwTWo5TW1DVFR0R0pSMEUrQm1XZlIzQjdsMmtlZ2l1ZUhzNmJQRG9tMk5rNFM5Um5zSUNIcVVXdGNqbWxIRDJ4SFlEMisxRHprNllvWjRkbzlvZCtNZThiQlgwaVlmWjZzeGhtT25FVUZoNW4zcExYTm45S2VWNjI1NFFmenNRUHdUNGovLzRENzRWOU1mZmZ2ejFjMzB2ZWEzNWVHdS9VcUNEQ0IwSHBPNEJlSUVSd3ViSE5XaFhNeTlNZ3lET1RnOFNjc2NkbThBWUpFcHNuK3dPeXZzUjJWbm9yZDlGRmhDMUIwVHIvT0M2bGJwd0dMNnVIOEtMNXFRTEFmRDZDTkRPS09UMlNnQnkxVGpGSEpnVkVhZnRENnJzY1dnclFwTnZEYm9SZXY0aDc3NVJwaW5tVFhrNGlOSDlKdDZ4KzVkZzFVQ25WbmNMbWdpdEN6Q2MydGVqd2JnV0kwTUNZc2V3U29hTDRTSDlyWEZIVzlWNzkyOFhseTFsMTIyQUpEblI5Ym4vNzc3VCsvMjFBd1VVb1pwbVdDMmdkLzlnSVBzTWEzVWNPbnQrbkRERXJ0VjMrR1NNeHgzc2lPM3FwOXlNRDIweFdzaVlVVWVJcHRxT0xPRVFRQXkyL29ZNFh0NHFTajdaR3RTYkQ4Tnh3OHRyY2ZwQk5zaExWQ1VkaFJXWUlrMitFWW9jS2FXdXRoakxjT0UvZVk5U1QrQVV1UzdQaVRqQzZ5UTcrR0l3RFBLVVpXaE5rZkJqSFBVRGhyWVlHWWJaalNkYlVlM3BxSXNRc2tRWmNmOG1NN1FZWGVTb2YyUUNjdUUvcFg1ZlIweXJ0UDZZc2ZrdjgzM21GZk9HRmRuTWNRa3lZZmQyUERhR21ST1JXQWZ2WHAzdEhZR2NZWXlBa1pyaU9paXh1NVJqai93ZWd1MTJGSm5PNjZVZFdUUHQ4akFnQnpkMk55Qzd0bU9QRjNMblNId2k5anBRK0p3dmhsT2t0eXQ1ZDBLeTQwcGJ3cEhIRlpFWXhBWUhkSGdKdHFuVnk2SzluWjljVnFEdmxZUy9Hd3UvNjlpMlRnUURZcURXdlhZZFV0em1jb1dZbno1U0lMRzdBVzd4aER3eWE3ZWw3d2F0TFErdmNYekVvS1JRcmwrRHZDOWpaSjF1NlozRlNWT1Boald2ekpjdFBqYXRmaGxBQmwvdm80L3MxSjhuOGs0ZDBHcm96Tk9BWCt6bEl6MEFlcUptQytTdFR0UjhVdEJYU0cxU0VQMWRYeWlVa3NybDBUZ29ZOUFlU04xcGVIWmtCNDhjcTc1d3RiVG5MRThLYU9McWRlNVpkZzRoTzYzWHNOaFdDTWdOZ0M4MmZhU2tqcW9JZnFKaExHTVFGTUpSMG9QNi9QUHdYQVRIdEE1aEJiWHVzV0pTVndZSWVsVHcvRGR1ejNReWNBclFTd1IzRlRLZTQwY0tqMWhKM1RpV25rSktzZWFnOTlmZHl0bnNTUUt5aXd4cURUZndoSmlvcUxJdVF6K21LQkM4WEVYQTRnTFFPYzB5NndvWUxpNVJUVkFoVElNNWY4dnYrWDdIWGNDbno3L3B4cnEyK0ZWYjJWdzJDbEJqdlZ5ejZtZXNkd08wakptcC9SbUtoWmM3QUsybW1sYTBBajBVVXRiVjM3MkQ1dFZ1VEltVTBpMlFnZldsSzhKQ2swRHd5UnpWRnM1MDlLV2xYVWN4b3dIRGlxd0dVMFNKeTFkbk1RcFZudU9FVnhSREdWcTFLUWxTYUppTFVjN0J0c2plOTVBa1NtQkhkbVpYNjE2SFA4WHV6RUtXazBGWTEyY2FFVnlNREIzQ2lSb2tScVc0TkRQc1JzZ3g4SGI3U0o3Z1kvMDV3MHRLSnd5R0RxU096RGgvTE9KYzgyaGZMdU9RMjVrODBrN1hHUEl3a1N6Q1VZZmNGejZqZGdRUG9QQ1MzUW5qN0lJd09UYjMvaFk3eVN1NGgrM011VDUzcmxEVTNoSzhSMnFrNHpHZWhUWFQyR2FXZHl4c2Q4Mmx2dlMyV05VVDhSZ1ZjSE1aQ1NHR3crbG4zakhCVHBnSGFIQnc3WHgyTWpXL2hLOXpWRXdkNVptb1RzODdZbzU3ejdUTjkzcGFDcmdZR2ZaRUFYY2pORnhPZXRWV3g4Z2g5dUtLd2hYSUZuUGkzV3UxaEV0Vy93cWVQVS9ESTkxRTVOWlZPL0VLR0FlQzhOdWxjRHlMUm1BcXdaRGtyQkE3cnFQZHZSREMyZkc0aW5VeE16UkJzMjV0MFZtR2piaWFieksxRTZqL2E2SjFhT29BTVJ5YmtCS09XZ3pnYmkvcDdhSVh6b1RxdXo1WjFlemEyZXZ6TlQzZmZjTVhsUCtnQS9YMTF6Lzk0MmVna3RYdkxVS20xZnVacGFFUkd4NStiMEhYVFIxWlFmNXhnYXhxVVBWQmgrdkE4eVRDdmtoUDdmb1djK3FwKzRkYTR2dkpvU1MrYW0zVnFMMXNJVCttTS8xNy9NNlozTVBqa1h3RUQ4RVBFT0Y0bGpwM3pSMTUwQk5zVFJNK2FmVzAvMk10V0ZJOXY5UnZqNHlUdGc3UGVBZmRiMGpYZCt4b24rcDNySk1HbWRMVkd1YUVaK0Q2N1FwQnA2ZytBU1p2L1J1MktpbVhKOHk1UVZtcWpDYUlQM2d0ODl1djZrUHdPZ2tvNTFmZFJWS09kdEtsSXk3dmxIOWlvSXhLSVZ3eWloaWJiQkRqTnB3UmV4bEtvTUtObC85Q0FvWkRPcVlnV3BVcVhBclVCcUl5M2NEZCtNNWVsOCtRWThIcTE5TCt4bjZmajlKQjVrdDIvL3lYUDMvL3cvY1Fmdjc4QzM4RG9LNFY2dFdoOHlmKzlWYjJYQ1VsMXo5dGZKVjc5aXFwRmtHT1cyT0J1Vk9xZXdBOWRWVHhOWVZMVTRIR1Y4TXByRmNjdWpCMXZIVFVWRkdCREtjZnhDNDlTbjlNb1FqMUl6OEo4VlVBbHh5VU9RUHBPWTFZVXdFdk53ZklNc1hTVVhmVk5takQ0MlhnVzhzcXUyc29jdEZJcTR1aGRHNzlGTG1CTTkwQ01sd1ExM09ycW5HTzVQS3IyNk02Mk8yYW9VSm85eWltcExYWlhRb0J6ZGtya29EODlMWGNZaFRScDRsdHJYaWFvKzVKNVh5QlhMRlQ2QVc1VG9lUnQ4dld2SnhGQjlaRmFqclJFdWhVWXdwYjNuSFdCSjg2SGJEeUhkR1NxczFVclFBNzdpNWpuVnl4Z21lRnBnaUlWZDdiMEs2cDA0anRDbzhneng0N2MwZWF5ci9JckNmQWFGMFRvSjVDS2V6eWNzSGZweHlYYVJTOEdhSk04R05qbmlkblpwWXJlVlZrRlpncUx5TlRDSHRjTk5jc1IvQkZ1S0xCNFBFTzBIVEtsUUtXbVk0alZTOG1QREdOUlp0aTg3bndPaEh6dE15cm8vWGhqRlVxWXlqTTNFbEhSZlcrbVFxSFF6M3VJZDZHbFZySXR2dTNsQXVHNEF3eXFJQ21ON1ZHbmZZTlJzMjhJOTJ1a0tFMStGVVB1T1lseWJGMnZHSjZOWlN4SEs0aGYrbUdJVzJzaHM2M3R1Z2w4N3JMeTVGMVF2YXNNN1FCQnlPdWJpek0wQklDb2pyYkNaK1FnRUVTUGhDZGdIWG1hdGw5TnRiNnF4WjBkUXdRMTA1dkxtcnRGL1JSQ2loMTVFZWdDWVBtaGE2ZUwvaE1VbmI1cGF1L1JzcW1CY252di92VGQ1OSsrUFR0UC83MnQ3OXhSTmpUMDdPeGdUYVBNNUtVUVExc0VyN2hJbUN2cHg4VS9QNzE1MS9RWTl2elhWRjEwcUxKTmtBZmd2ajBpWThLa1ZwcTdCaSsrNTVmaVRRTjlWRVBWaTFhcFJxVEg4dFJ4d0w3YXJYQ3JBTElxR3dzeUJpQ2o3bGZNUmZUSWZFc1ErTkhNQ0dMc1pPRHhGaEMva0FXUWp3cE5QTVRnTkxSNUxVVzl6bDNwQWcrbzl3N1AvMFI5Sk9JbkRjMityNENneHVSV0gzOXBRb1pFWFdONmpoeUtpU1pUMUV1ZFYza0lzN2ZvMlZLMVhTSHdJSFN2OVk0NTJwcUVaTGh5YnFmM0VFQWJFbkZEZC9NNXA2YUhWSzRHbVRxbUF5RkdxZitjZCtpQmFtSm1QMFZKNzMrNUI2N2Y3N3hreWRaVG5tR2VxZGZweC9QUXFKalZCbGpqb3pkQ2h6WmV0SkpCaHNoaGRBWm1Yajc1dEJKV0I5SjFKVVpGdU9TN1lqdGlTamJaYXNTUlRYRVNuWGJJRlI1bXJlQ3dYVGsvUmtlOGVkU0RHUEcyYVd6REVUOGRqN1VVL2xWc0tpVG9KVFZ6Tzg5Y0I5R01NWkNzSTc3SGhqYVluU2R4QUlHMzQwdTN0WHFzQTZOaXRLMFBEVXQrbHlLR0VPbkhtNmdGNm42NERGRW42dW9oZlpUNmk1U1NMcGIrSjM4d2xYRTMvVmFYdE1RTTRmS0lwR2ErQ3p0ZWI1ekhTeCtUYVl0VWJuVUhXcWJGZXl1VjFHM3BBL0t4YWtYNjBtWWs3THl5SGdIc3gyQzAwdnE5aTNjZzNkN2tpMzUzbzE4NGxIWWVNNXJqQ05vZjF3eHdMdmRaR1RHRmNPRVpmaUMrU1g4ZFhISVFuZ211Q2RWM2xwU2lLSE5qRUdtTEdLMWdiYk9yblpFVWtDOEdFOWdYY0dWUTdmNktxQzR3L0N3NmxSSklqVGFEUjh2bks1OFNERWdndHlweERPVlZGa0h2QzJMdmVIc0JobzhxMWNaa2d1L3RMT1lGNjYzNVNDTmFkNENDWW1Pd3lVSXUrSFJOM01aaWwvU05oWTFrNlA4d3VqTWJqK0ZkRTYzNGRmNk13bTlHZDlkczB3ZkxBbDM3ejQwSXQ1c21aM2VvS3hHTm14K0dzRDNoUEliQXZYN3dITFZud2NZZjBPQWM4SDNwK01zMFh1ZktPb0dWemR5MWJUcWFqbzZnT3owc0xRNUtDM29mSGxRSFJZZm5PTFdQTXRhTzRKUVhkSFRlR0V1dzFPRXI1RlYvSjNBcUwwZ3YzQWwvQThZT2lTRVZUOUtOekxCbXlzSkZvNVBsL1E3N2E0bWY4c2IrZ0N2Y1ZtU25meTRycTA4UXJQWkM1L1dtSmxnTUJrRXBlK09EWWNtdFFYMzBJR3hxU3BTZ0xQVlNaM3YrNi9QK1pRTG5CdUF6MGc3cW01YWxLaTJzN3BJdnYvVEQvU2MzNEJ3OUt2MHVqYlRkQ2RBdzFXOVozM05QY1c4TUpaQWhxT2FGdU1VTTR0elhXNTdleDhmNElKN2FLbXkyM1Zic3hCNHplaTZYTzk0elZGRWIrdkgzUUlDT2xvekhDUDJFMjVDcStjSzl6TlBhWXdWN2lJT1NZOWhPeG1OR0R6Mkp1ejhrTHZ4Z3R4cG1jNi9rQi9OM1VqcTRXcTNkaCtUWFdMMU8va0owYkd0RTNRbjlDbW5zQ2N3NFNaMC91N3EzazB3QXNOSWVJek9XTUJsdUlnekxNTHRpbjRkVWh1eUc3OW4zL1YzNzc4V09WWkxDaitoTGZYVVRmM0k3OERRK2hEYmVBeGliQWZCU0pZRlhQQW5abEo4SVIrNldpckhybG9HZ28zTENGWnhSK2RLZXF3cmYxRmhRaEsxaCtDS2dyM08xOEdFaDJ3a2ZCdnByZERuYUNUOFBreFVUVnp6WDd3TTRkQVB3bVlZWC9walZNQ29FWVZOVzhvWXVjb2JGN1FYL0pLNTZYVEU5b0pvWGc4cG5CUitOeGltZ0FpR3NDTzdxd3R1ZkQ4ejFGTExwK2RybFRkWFNKK3hHTDh3b0ZkZUwxSHFDVUtrM291Y0N5dWhacWNrZm1zUm0vYmpqM3JQbnA4RFlPdnQvV3B5YU9ycUNhOG0yUklYRFpzbS85ajljK3VvRFg4aHlzaTlCTDErZ3ZDdGY1ZjFkaldoMHh0TUJ4ck1jRGQ2VkxkM1pwRFFkaVN1M1RpU2orQ0hzVVRCWVlJeEVtSWt3OFZZZndsWWJLMzQ3WWdtUmw3K3IyVDFPRlljMjdsVGdVTjh1cG5mTllNWTlEQWdGWXk3dmlTK0czT2ZUWVErOXVOQTl6N0c3bzBzZVF1OHlyWXdZSys4Qno3eEUvakNJSGJjcU5SSGYycFlrRC9yajhtVlY0dHBrVGxybHUzMzc3NzducDk0NlJLNlgybGNFcjRHTWxOVlh2R0ZhTW1EQ1BZeEtJSzZPazg4c3NKa3JJSFRLelg0eTdBakZnM1MrTHEyRjN3WlFxWWlldHB3VGNNSUMxUnYxWXRVQks3M3NpOXB4MTRLOFFpYWFqMXZ4MDNvM3FzZUpieHE4eEowL2xHOFN5bStXcGc5dkx1d3crbjRFLzhKYnpxV0diTEJCenJUQlVkUTA5MTI4SVVxeVA3a0RiSWFkVDYvUzY3VFVlcDZIN0dXdXhsVHVVNVplV1c0N2ZvZHg1NXFyNHloMWNnemNDU0tTREVYOENybVdXZDQ3anFQNEpHbUMyZytSVXpDbFhvaWFCYW9VOS9McUN6Tk81TDJoOWZlenZ5bjdGbjhJdEt6NjRtdzJnNEdNY2REYkl3RlFjQmdPRWJvTzcveURHWkNGbVpDUko3bmM5TEY2RFNuTUtLb3R2am1Cekd6aWVRS1U1MFZPZzVjT0RIdzhuem9DWm9wWkl2cWl4TXlOT05Cb21DUmdkZnBZL0taME5iVElWMTVDWXpMVW5vbWIyVjBiMnBiRkZqSXB6S01oeDhEdk5zOVBQWWcxSWRRV1hRTmE1ZlpMNThPRG5zK0JhWGFYb00xZXk5dnpiY2VieWN0TkVEcmlOWmF3QmpOZVFnSkxjWUxQdTh0c2ljWnpEb2NkYmJWYlVCZFV2cFVRWDA4R3hIVDl0NnVwUE5jQURINDBzL2Fvc2pHNEhlQzZkbkcvL2pqMyszaURVMS9Ja2hEZlkzNUo2aUVPcHdvR3ZzalBtR0VBVWd3UGJWdzE4Q3BRRkttd1ArK2kvajF0ODk4ZUVnZkxBUGs5a0RWYXk0S2RWeUZsTUxvTE1zQWc4aWpZYXFaNWdUcFE4ZlNkL0FZRlU2U1JqQXVJL1FMcCtPZGZFeTB6Q2l4VDhaMUEvREVBSzlNNHduWE5PZWVydlZFdVRnNmd1TUtkc2dTMkllVFFFQ1ozaHFXVnMxS1I1L1JQSDExTnRRUXNocTJKMDlQR3g4QkdzVjdDaFZRbmZrT043b2dHUjY5UFRDMlF4S0lrZDIvclBuR2Z4bjFKd3NVcVpPWHgvYmVmMVgvOVRkOHBTN3pxWitHOFRqUFpVMVI2K0JyUUJmV3ZvRkdialp1ai9veldvMjhiSklvMXVnOXJNTWxlSG92NHdrTTdwQjdJRG1rMzEyclBYYjNNMUZWQmNldFlyVUdETXZtSXVjL2ZUb2ZoR3E5TWtVZVM2VG5DNTkxbG1pQ0tKVEljTmhlK2xrSFR4K0toR3BDNVpMdDRkNkh1YmdVMEhRV3U1eFhsbmgzdy9yQk0rd0s4YjRBWDdpaUdlT0ozQW0yQjdMZFAvU1NFaFhEK2x3R2hlaXczUTJBY2VoalFQQmhtSS9YRWJQYUVkL0JJTE9HSElVQXlyNW8xakIxYXZTc004NFdLN2gvSW5mT1FmTlN1cVd1cUIyNTJKRWxMMDlCSHU0MWhQYnZNRjZrTzVSVXI5Mjl6b1hqb2FkajVTQkVZUWVNQWQ3NUZuL05USWdOK2kvbEowc1VMT0poMU5CVm5hZERFMDQzRmpYUEVkQU5Ka2FmYkdJblpYMDhFTzZuejBKWWhwTExtczlWZ3BNMEtjYlFDSzhRMnhHTWtkalMxdm9zekU2SWZReVBnbWxISFphZkdZL3lpdGRMN1NFOXhZNGZ2ZWpwR0oyT2kwdEs3Mm51dytEU3FSWHVuQ0NkUmlYZ1Qvd2NyNHIxMlRJL3RsRFAzb3JtdGJTK1BQVDFORjFKMHBuc2QrNTdkajdHWEd2dzI5Ly9ybnNBYmdtNEFlQTdndGdJOGRVbWVqMHZJWWRYVmFvZkhYcnI4SnFPVjYvczNBUHcyOFFFMUk0SVVHK2dWbVAzLzN2OUFpVXhDcFNRSDhSSVBUWnd1c1UxQVpHeE8yMUhJQ3lCeTlDRUI1MjNVaVJwRE5UY2pNelJXa25Ic2Z0RTR1cUdiZ0NpK0taaEdyME5LNUNKb2Z1ZTRJVyt3NlZTaXo2aXVGN0dLWUdZbWc3clhaSHR0SW9tblU0VS9SaEl0Zzk4OWFZRDdrYUJOOXcwd3AvNUk3MEpvWUhHanBHTTN2M3pFUjljTkU1Mzhia04wSjBBLytxOWY1VXRtQmtMcVFQRzVVSGpOMTUwVjZBVU9Hc2RHTWpRcHIrTWVaTExLUVFuQWRpZW5sYkhsdGRUdGtKYTg5RGhGMXhxR3Nib3RzSHVJazBIbTEzSHNtWUllT0UxSHlmb3l1VHpzSk45NzFPeHVKbGFMY0FJczZicFkyckZISlhMb1dlTG1za1U5OUM1aWplU2RwcHZNQnczOE5OcU9MRUl6WnNDYk5oclFsd0dRNGpSZGJvTlllY1lHZE0rRklCQUhmSStjU2V1UG9KRHAyaEoycndqWnFHRnVScnpTdXg0dHpjZGlteUhvRTNrRUFYVUNDbXk0TE1ybk4xd1ZQQ0l4RGk2amlBaFQvaVRhK0V2UTljQTZLZUZOMFVjbGI1cmRqdmlZZjRialhvU08rcW5wTXdSMmdJZWgvQ054eURRdHFYd3hvakxCajJ0RTU2WUkvVjhXZzR0QmpyWVN5WDJWcEl4bHlDZEdaRW9XTTJCOUVleXZMbmdpNXJ3eFloK3NhN0ZHWk42aUJWY3IwVFFJZ2pXN1FxOUljNmwwSHRVQWgydVh0V1BGZXRleDlLN1hmeE5zQk93elJ4aDg2R0hoNC9SNXg0ODRERXFNNHJYZ1R0dVpQRnFlRDlEMEFGejB0aUwwVVZNTnNINEVlbGdyOFFoSFZsc2w2Zm5mdXFxWHk3SDFwWkQ5d0E2VXFTbXQ0N3R2Umk4Y2JGMTBVNjkzcmxueitQN0FkNzEvK3RmLzRyTm53amdIZ0NPK2J5QldYczU2ZmNzZVBuaEFPRUJNUmlpakNMaytqQVJtQUloazBldjlMejFOelk5SlZnK2RNMEoyUVpnYjY0bkNFUHN6Z3hoTnh5MWg0QWZ3ZkM3L3BIY2MwRlkrTlp4NEI5d09meGY4RHNBenUxYVU3SFZ4L3hyWU51OWl6YW5NOHVyQThaazNlczRzSTV6S1dWemJQaGZUVHRwV2xHME9tN200TTZ4SDFIbXpWNkVSYlpjQ3o3cDQxamEyd083amRlRXFvMDZhOU52ZEpSOTdmNkwrZnV2MTY4TnFIeXVEVDcyUS9Odi9WSmlQV215R3ZWbnYycjN6N2xPVXNpWmM0MXFjOHdWNjRxOWZpb3VWb3pPVUZLUEJ4cUZob1pqSThOR0dlYmlDajg0TTlEUmRQMjlyektndVNHSFVkWHpPNSthazllaGJlam5JdFFxS1AyY1NBVm1iUlFjeERTdjRxVXB0RWhXYU8vOWQ5d2lSYjBKSHZFajZDUmRJVWpuQit6R01jcGdweDExRnZCTCtRbVBzU3NNbDY2NWNUcnRScUxpRXNMLzh3QWRqWUNPcXRQZ0hDSzAybURPU3NDU2NUZEdUQXZzL0hnVHVDQTczc04zNzVjaU83L3JMOFV3OVBQUE1Xb25CL24zR1UrVnVFN25OYWNqNEF2WWg5aVpacUlNZGhjaUM4MGl4ajlrSnZZUDhKTWF3MG4zT25GUm4vclpGaWF3aTB5cFFXSzhDSUZ6VE5wQmN4WVJEK09DbndKc2RFS3ZwRFBCNDdMdFhoZmxtRFd5cWpBOUJBKzd3UnJNNGRpTTlpeXV4SWhwOUwyOHZlQWdRNmU5UzlLVnJSTWtVZUMwNEI3R0c5eUl2UXZINGZUaGRDTmVSN252QkZJY1k5L2tKM1pvZXZWbmNCSlJIYmNEckUxRDNqb2J3L2R0QUp0K2RtamNGUGdlQUpEMy92MVpJSmoxTmo4WE02WWFWWGgydFl3Nk0vcnVqbGp3UW1hQWlpZUUvZi92MzM3eUs0bG5vaVZpbmF3NW9EcU5iWmRYSWtjam5NV29xajRJQ1dlSlBRNlA1Q040RE84Z1VReVpVWXg0ZHlRdURPMmllak83STkwK2VnR045NTRvRHgzZTdTZkJ6cW5ueFRxaTZwaVhKbFp0ZnVoZlB3VFErK2h1WGJQYmVQc3c5cjhLUnpCU01jREFkVzQycjNnVXcxa0lYSGN1UlN2VVB4Q290MFk0eTdsVStPdy9GNG52QWJ6ZGw5NjhCNUE0NTY1V3BaYW9Oc2ljN1VvblZ2M3p3elUyRTRxYmgxR1lNSS9iZ3Mwc2xiUVJNZTNxdmYzU3JSYk93T2NQYzNER2hlMmNCckUxTk9pZVMxWGY3S21mQlVsSHNRN243RldhQ2ZwUlcwVGRKeFFMS1JNV21sT1V6RWluWUMrZ0xmY1dueUxkTS8yVjNYVVVlU1FxTi9ZeUJPNmd2WjFqd2xFOHRNVllobzd0T2d2eVJmeVF1MGpBR1BFdVJpZDAyelFqK3VaV2ppNC93WjJHaDJmd251QkpzN1BDaWRHOXFjUmVlaHZoN0FpdWhiT1Q5NmdkT2VvOEtUdkZoeUtjZzNVYStqSlN2eUNMdDY2MmkvelJNQk45eTlDMW9TdnQwUGFKQ0hIdGpTNnN0V1dJNXpXeWU1dllJYllMN3JFNzhvSy9rQmt1aUdOM2ZFZDZsbTVIMENFWnduSHJVdkYyRUZySDYyeTVGdHl1OURHbS9CSWJXRVprWXdzcDdSYzZrZWpoTjRXcERDR2Nic1Jlb3F4czc5NHYzb2pFTUdIdkY4SXloQTl5QkhlcElEcy9ycVB4UmZ5NkhHOGxqUXQwSGgyVlhOdENiVHplTzE0dVFLSjF0Ykt0cDJIemJpYjkyT0w4OWh1ZmF1YnZCUHZ0Zjd2OFFhQjZ0MVJiSWs2LzJ1RjdYK2Y5M1lDMGQ2ckdEUUROSDZ6d2RvRGRrKzRBYW5NRnBmWmREMDg2cFJBcEMvWitjUzNEenZ3aSs0WE9DOWVlb3BPeCs5RGtIZGxGRm1UOFFnYjdUaTFyL1JXR1grc0xLS09Gd1hMTzlkZng2QTA1SGZacXRwMEFUamVXSVM0ajZUSEsxdmRkZXFOYjhaeUE5UzVCcVhGeWFLeFhDVUMrTDViVFFBZGV3M3NaSmJZV1VQb2lsK0hxU3VwZVRHcXpJWDF2cm90V1YwUVZQeWNJTWdSNWdGd3JwTS82Vk9OSzRPd0VVejRtd0I4cmNLbnpWM3ZycTNOL3dmZkREMy82NFljZitKNGZEZ083LzAvZjhjazVOUTZOM3JIK2htdEpHeVQ5R3hMeXpubnJSdTU2cjM5YWhMaTJZaXF1bWllaGZucXZkOVBuWE1mS09MQ0hMd2pEVnBFL25qUmkwUyt2RWcyajZ2VndncHBVd2FJQWFzalBFT3VuSEZ6aExLUkFZR2x6S1BDbldnM0Vid2lEWWd1bEtiQjZ2WCtnUVEwdkhLdjRwclgzL29tcVhKZENWNHR0UXhsbm9yZ01rdGZHUWpDWThCamhMem9KWDR3RWJuenQvUFlzTlVYTmVlRXpOT2dnZXl1OFR0MFRmNmhQMTVJcjNnV1BjaGwxOFhMT1hVZGt4R1VkR1BjUVhXSnpZakVXVGg5YXJqT04rTXpmbWZidVVZdkNNbnhmSi9xTFFvWXh3andhRHpTbXhmRzZsb2pZek5RNnkvQkI1MXJ6Slh1dWx3VS9EM1VKblQyUHFFNkdtOVBuWDhxbVlHejM1c1hlRFFnTDMybzdFd1N5czNRdlVFUVdneUhOeGRqdUlrYmNXOVk5aUdseTFVVHUwM1hFWTE5UFN3Uk9Rak9xa3NJRFF0UUhPVEt2WVVEaTljUVNpdUx1MjlQa2ZaYTV0bGtFYUptWHdhdis2YkpVNzYzVEVkdGU1VjFuWndaeGJSa09uVHBlMWtuTmNTM1pvZkZxdkNnd1ZQajlZakVuNFRIMjJEZVJaYjRJRXJqSUd1eUNmWDNzTlFLbkc1WUtpS3NqMkxUd3gxQVhwQ1RoMnNWR1hTNWhuQ3I4WWFVaTZxUUE1T1dpblV5V3FONjVEQkRhczNpTHo4NEhMMC9qOVV6Kyt5Ky8vQXlOM3dmNHIvLzZMMzRad0Z0L2ZoOUFzVkxSdmtNdjhmeUpKLzZxMCsvNkhRQStCNlNpa1B1V0QvZndoYUhhNkxNYjRsRFc1NGg0MS8rNzd6NTk4K3R2Zk9mN2IvVk5vNXJSMS9XekFDUnFNZml0QWRYbU90UDNnbDE1T01yWXptb1BnOFJyaFFqR2lFNlF4SFlrOXBFZkwwWXlHa3c5RFBmWUhZbFVEOFIyd3pzMmlPRXRCcndGWVdpd3V5SzNrRHNuZ1F1bkQwbkdIR2kxSlJnM29JQ3VBbHduaXQ3N1Z4dDl4WmVySzkzc1hrYTNUVEx5aE9mOER5SEdFZzdPRHIrOFpjN09aNS91Q0hSbTAvaHRsV25vRnFhK3lrcGJYajJyMTRsYmw2WW15N1RZUHVyS3VNMUhBM25McGJWaVBQZjh0cVozQzZzb2h3L2ZpNld6cS9lTEhxN2RhNlF6RnlRaEdEbTlobDN2M0JzMG92ZnkrYm1CcHFqMW1YdDluaXAwNTVBczBSUjR3cnRtb3FUSnNpTXpVMWpIdVRvdE9JWnQ5K1lVZGlobTRVRGVrUTdHR3lNMXZFWmVlMVBrQzdXNE1ONVJDMzhuZjVHTDhGMWhSNDVWdlpNb25LTnhUR1RtRjdtK2xQeUNmNnp6ZmJCTy8rdFVKSkJjTDlyN3ltWktTaGZZZS8rZUUwZHRLY0Q2dXRUbnYrUUtZc040N04yN0k2cDl0dGd4OEhSN0VzZGpYREhzV0laSEVYTk96RlY4ak50RG9tTG9TVXZ6bUFzMGpZQXh3Z2tTSXk0YmQveEszNUtPeGVrSVBJN0N6RDlzSXprNm5lQlhkQ3YwUHZrV2NlTTdjNkY5U0lpK0NxNnBSb0VYa2dVSko4WUxRcFROOFhEaEw4UElKdlpMa1o2cmk3eTJXeFRtMkRZa2hKT3B3UGxTcUZVU0xRUWJRV0tBMjZhM0VhVEg4dVltZTNvMjdtejYvL0tYdjdBTnd1NGhJT1BkMGpwMWlOVmVpYTJTdmhHSXpSTWJxQnFYYUxuMGZpckdLSlFaYVkrVkh3NWNsVXZsbzdad2x1RXgrc2dCM1BFZE9RcStBUDk1aFNmeDlWdUFWUDc5Zm81SUVJNnlqYktOcU9jUXVwKzBOWkg1M2JzZ0ROMG1Sd2UwcS9qd3NlSGpBQnZYTmx1bmcvNTFabXdFQjNNYWNYVWp0QjI4WEZ3cGRhK3hDU3FGYWZScDlYd3FuTWJwaU5YNjBoanZ4OVJuZ2ZUYjl2cjE5bTgrOFJkcHh5NGYzZm1zVkV1aHQ1QnZhK0pOOEFTMVZvam9lVllGWFV5WlFzYjFpWm5BWEtoVDVPSlV6RFZzVEhrODdIMEh3ZTh1bmo5Y2hBTGxVblZDUE5SWlZVM1MyUDZSbnFGSll4a0J5czJqRmtiTXVuTW9tMjQwNDcyM1k4U1dlTStJRjZYNko4RWVhSm9DSzVkdUQyd1ltdmFsMy9BdU5jS2IxNlk1M1E0U284ZnVZSkFZRzUrUzFVd0lMVVpjTnNDMUJMZXpSWUJhSG9zaW9GcjVyczRDOWw1b3MzWkNJZWM2RTVjb0l4bnVCb1NBVCtHdk9ZUy9VTmhkdTFvNE1WNVVzb1MvR1JMQkQ0MWRjQTk1aDdOSC9Rc1JDdUFhWHdSZDFZSUg3Q0d4YllTRFlPeHdPbWpiS1JhQ24zUGlnaGw3TVhEUm5BaEQzbnBQZ3dzRjI1ZUxRM1JwaVNuK1JJemR6dis0VW54RnpYZm9TMWNTbGJSUzNGWXZFK2tHNU02OFZUdDFMR2ptSWg2cDRKZFJiejZac1BlaHlUVm5qVTAxQ3htbW0rdkVqaEY3UjdyTDRSSnZpUklTbzRlRVRBeXZUT0xVd2NPQTVudVZBZHJsc3FjK25NeGlrYldDQ2N3RUk4MGh5ekE2U3ZjOEJhSVMvcUVSUW5JNWZOYkRwSFd5MXRFWUZkWkRuYUQxTWpDWkVyQmE3NGVhbkJESEFRMjRUQ1E0QnBzZGZzV1JId1Z3QTBEajdYMUFHaUdPMG5ibzIyOS9yYjhvckExOU5RakFuRVplSHU4RXFJZERKcHUvQmxhdjcvcTBSZjJLTUVlVXZjSnQ2V2VkU3RhYWt6WmdtQXUrREUwQ1RLQnFtVzBuQjRuUkZYb3MrTUlKYzZITmJJZkhvOEtCOTlWWDgxdUFtQWxCbW8rbVVZYjQwN2c5eTFqSUxucVhGU05lRWVZQ21kd0Voeks0MjNUTlE2d3k5TmFDL2lzN2UzM3Yvamt6ZkhLNFlDZWRJanhlQjhNdXNqVGpPbXdKQ1NISU1CU281N2xCYUVZSldxbzRLblkwYXF2YjJYSGZ5aHY3MHZDY0ZNRnN4cnI1ZE9lUzRLVDNScE1UbC9wclZYVVd3NjRIbmV1eXg4ZGRycDhKdUFJVjAzYi9XWUNjTkE2Y3lxTFQ0dlZ3SU1wVEZkUTVIWTZOdlZmaTJZYkNVTllSbkI0WHJ3dDJadEdNM0RTRm11a0VKbWNxVjRodml6UnhvbVlmK1NDWE4rTG0yOUZpQnpDbFJtQ240VXBoRkZuM0g0ZEVvbFhieEE5NFoyS1AycHB4QkVONzdRMHR4c0wzMlJKdkRHZ0wwNGo3MEdJY3ZWM2h5YmJDMUZFNTgrZGJ2aUlLMGZFOUdZVjltSHFLWDJ1YmtMaU1aQmhEZVhXRTFTWjRxNlRocnJHb0Yza00rOFBVdWJBUGtVWlE5aTlxTGZhS080S1hlN08rbEw4SmZBRkFydjcwbThqVWdEY2NHM1k1S25ibklCS3Z3NFhVU1lYeGZnZ3FML2k0YUU2RUlWbTlRT2h0S2N4WmdEaHVDNkxUbkc4NktkOTBqWk92RDdFL25GcjArOVFXMEVQNlhmd0ltb2JMbXVicytsVHNjNVRlcFlySi8zTTQ2cCtJbHViZUJtRk9NK21pWUhxbkdZRUppQjNETm4zSVFRSml1RjJWdDlTWkM1ellRMDNJT0JiTzJQUENEMmg5UjFGSzhJSFlmUzh5NFU4R2VNSVhnK0VTdFF4TkFFeGpQNkJkaUo3c1dxelhzODVkVFFabmZkMjYwMFdrSEZJeUhrMGJDOWtnZncrWTMyM0U1c00vOUh3cEVDSi8vNy8vbzY4TmoxaVdwU2N2L3pNbnBHaHhjUXRReFFLeHc5Slp4SDBhb1A2djMxbXUrd1ZpOVlGcHZhNVVLRFJFSkhveUFOMTZvaUNPV29aUkc1SDE0SERNSklwdDJ0UlhNUTh1VmVpMmM4QUJlejJUZTM0OEt1elU5U2NBWVRqZXc3SjlwV0dPaGd1TGd1aXhZN1FRbWZZZURZT1dFN1dhZFBSZThMVVd3SFAzcngwdWZHK3ZlV0JReC85R0hrSXpkUW9vSFpYcTF2R0pIYXBkeUV0VW43VmQxTmFhUHJZbWhWb2lieXgwMWRWdkFsQUtzOVRIMkw3N3hMZCtjaWNBa0UwOFN6QTJ6N1h0NUp4R3BxNkxzZlVudFdzYmZkdjl5MXliSVlMaXUreUFHRjZnamxqSnlJcytybnNzbzlHNmprNFhIV05ObWVhSjFZTFUwT2dzVllTaXlWZGc5WmN0NjhKRkpWZGh0V0RWOVhtSlVCelRidjNFRGJLU1ZsdjRsMzRsWXVpVzFBeDNPMkEzWW5jKzRJSjNKSzV1eEI0Rno2ZjFwOENGVDVSV3JjNjVKY1RuN2M0M0xmMWUvNU5yVnFnbHFtZDBIWndDOHdSM0lYRkpUZlJ4bW1qWVd0YzBIT1REb1ptakFOMkkrbVFoTG1Vb2MydURvSk5ZNk9WTDBoaUplZ2N4dVRHZEtQVkV6TXQxRFp0MUtLWjVWN1BsV2wzLzFqRjUrM09weXdEcDlZUmdjdWZZRllSU0Y0NFJlbXVHNzlYSjBGN1RscERFZG0vNEFST0ZRZk1HVWNhY2kzT1Y4enBxSGV5dTRFOVQ4MHRKdkRFaVlnV3ZSa0FNOEpCdEJFeUlFWHFIZHhwZzhNVkFldUVYOTZtN3prK1gxUHNsNWxoejV4d0pnSEI2U1V1S1JIV3AzVjZpSUhTazI0bnRvRzB2amdueGh0K0xqUDZUQVc1K043RDNvY0dPOTBCd0tpa094NkoyV3dLdVM4OVBzZnIxRVRLYVYxY3JJalVhNjJEN0NRSHY4MDBCN0k1NDE1K2ZBTWo3MVZmOGdUQXFtSGtrQnFFQ3RjL0JxQjdELzloUFVhY2MvdXlIL3VDVHRrcmpEQ3crSFFyNm93SGVRWG1xcGFuNlh4amRpKzBoL1Q3eExsSkVkYWJoNm5aaVE3TVJoZUE5TUJ5TXJyQnpFbjQwOWl3TDdmRUd3RHpubzRacFhPRkdraUJHR0NMVVdvQ1kzSTNZZHJWdzVsdkhDWVllUit3ODRucUdyUU44L3ZDUEFpckVCeUZEZzdQM0tXRm45Qzh3SlltaEtjaGxNQVpGaHFhQzZxelYzcjUrTDluM0FEcGI2eXd2RmM5QXZ3Y01UcmplKy8ra0g0ZDl5Mit5MUsrS2tncWo5dnBzUExXM3FMWFFJM205TEJpMlhXNDVCQlJjWFRNbldES2QwOVFpaTRHbWhxV2dtRG9RN3BXakRXTVhkcm5BN1hKcUQ0Mm9yLzIwc2pETGFuNkxYeG5sUHVxSVY5bEhqSlFGQlpkQjA0THdjQmNCaWZqMGkrRktSdllaVXBMS0ZhWmxwUzVoS1hYWFlwZlRKVmlwUWlyd0JUTXUrV2lKTndBQVFBQkpSRUZVaDNlUjduSUIzYnNqNy9ESGFYT3Z5ckpQNFMvdzdvcElqQmNWenZYTVFWTlErREVpRlMvWFNMeTdFWDVjUnBiaFRoc0VIVEd2MEpVbDVCaE5UZnM5NHcwTVVjWVJQNElQT3FPZW0rano0S2g4Qko4MTVIa0tHYk45SGZ5R1YwK01kUkw2V2RRUklMUWcyRjNKdUFsMkJZR0duZGpGYTVjNDk0Tjc0Yk9ZZzA2OWhFVXdCa3piRHFGM0N3R2psMmV2RVd6VE5MMTZmdUp4SWZjaGRwZU4xSjdpeURTL1IvVjBQUVM4SjdJckJFZDFnalJuYmJKbjIwTWF3cVFaTWFQSjNoN3RuWndicjBBaEdQUjlCWXdZTkdIeHVuSmNibEhJMEh6VGtnaXY3ZEhYYThZUzRpRjlGSG9JOFNiRUczNm54WTdPWWpBMFp6RVlwamxGaGhoQllzUmJDS1B4bklxNFhZUEpnK05uM2xSb3p6SXNvZXVnTEJ6Mk9iejNUd2kvRE1BTkFMK3pTLy9mLy8zZm4vVmRMdnE0aEl0d2FyWlBmQ2JheGJqSHk3L2EvYk4zcWo4S1Zwc3ViZ0Q0TmxIMmd0NUJPU25oWDMzRkh5VG1yNHdob2xrWmo2QXJkOEc5enBscnpHTG5QNFU4QlpwUHZ4UVEvbzZuTm5PT0Nqdm5OUm52bnNnaDQrOEE5SGlyMDNjUUJZYUFhUjZpQzRLOUd3NjN0OXZoVytIV3oyZUZldWZWUWFPUERvWjMyOXloMXR2SXR5ZUlxVGJBUk4yMDV1RG9OYmk0TW94Uko1a1dCREhYbzE0M0FPTVBrM24zcjlPUFNmSEdwZTljNlFtbzNYOXQvZlZYTTN4c0NQZDBRT3BFMXdXQWkyQzNNWnhMeEpBMnR4OGVyY05DUzZNT244UW1OQUxtUTF3TEliaU52WWNmRU1QMkJHdm1wVGhjNUMvS0dIcFVMTmJSc1hiWnRzNkMrN3cwN1NKb1hKbWM0Rkt1eFovaTVpKzVkdEFJdlpsWEFlaTBsVXdOTU4wdTVxd0d2RmZXYWQzZU9jZkFnRy93dlU3WHF2WjBpNDJhR21nRjJYUXY1bGpZMjBRdXI3V3FEeGlqT1cvaHdmV3IzUE1KaE93amNOUXVsaEJYTlErSFk1TWl4aURiUGZ2dTdZRWRqNDNSanR1VU9CM0IrQ3BnTGxDaGxqZ0s3V0FRbmtsaVJ4empDSGJDQy91ZDJIYzRMMUw4OHk0S3lKT3ExVkxTRWZkQzJkVmpiVHMyWGdRWHZnOVZDSXNCUHpweFdTU3VibUI3U0c5K0FhdUl3U1B6eWJWTTVDcW1MaFpMQWJyYUxoSm1ETHhoV3RiOEVHS1lTYi9JbXQveEVEQlkwcTRmMjN6Nk8rTGhvWjlNSG9lWFF1cHRNeVd4aUh4VDBBWjk5MElUWXdPclRNbnVMaVAwOXpwMXB2U2tER21lN0xCblZhRjFCWkgxM0RXT1VZcUU0M0FUK25DRXpMeDI3WlgzUU12dVNIQmNhWkpxS3dCZU5CNHB5YzVlcmVNMDQwZTFvbVRXa3BodG1SZEQ3OUh4KzlQUmtMa0g0TE5BUC8vMGo1OSsrcG5mQjZnYXhySlBHVDBTUzZzTkVpSVVNNXdGMW5jTk9YS2sxNmtDR1JMNy8zbzc5ZUwzQ28xQzNrRmNDNzRNRXp1a3ZYdzFnTW5qb25rTWgvWSsrVWtoQlhUamZiSi9CMEFmcDZvcmJieldzNFQ4c3lLUE5SazB0ZHU4VHQ1eXM2LzFCdFlIUmIxcGhIa2hSbDBLSCthbElhVGhSRThaM1FGTWV2R2grY2Z0WkZRVjlaV2drMEdCWXh0dFJMbzVUU1pwUG80eVd0N3B1UlZqc0Nya1hLcGlla2lWb2VMZHRQdlhsUFdwSkczMngzRGtRbXVVd3h6NG1sTjlWNVcrN1AvN0g3Nzd6RGZtb2c1UnQ3RmpJcEQ5YnZ5c0RIZGZqbWxuanZKUGNNYjRzWTdkSFhvOXFqL0xBZVYxWUx4MWdma1NjZ0hxNDZYcTYwRFdMRlVtejV1cUFSWk8yeU9rQXErSjVMQkdzQ2JhVWlSOEp1VmpSZWFNRk02aWRHcldZWms1U3RIRVdHWE5ubndYbExJY21QRElPbWpCTTl5TkJNWTEwK294WUl3T21wbVN1cXY0TmZzbVlyNW8wMklSYkZvL2VFODN1R01wNi9oWmM4aFByWlpvRHgvNk0xMWl3SlcwbmhiMnFOQnNUSUxMM05MZjJVVU9Kek83aytab0t0ZUNxeGhmZThOOTg4NFFQOG8xN3IrVHkwZnRHaVppNnR4Y0JRN0VheEUrUm5rcC9oYlNDYS90bWZFMTY5RjdERmMxZXZyOWt2YkI4bTlTalU4TmVsSTl0Ymo4OUxMUTRrM29RTGpxYTBFZkNRa1k1M21PemxvSkNuQjcza0o0OHRjWmxMWW53bldCMitRdVYwa3NReEp1U0ZPN2h4UnpGT0tvSlZZbnVxKythYWcydmZMY1pyMUVpVlBIaGQ0WGIwY1FqRGVMRThRTGx1RkNHTFhXZ3psV0ptRmt6WW5YaE83RkJSamxoWi9BWm9STTViSkxZSUJHMENzZDlYb1NuTFRLVW1BaDRkUmhLcWtabVhTdVJ6cnQzTGJkRWRNMjVKYXJhb1BvMmlJc2cwRDN5enJjU0xjQmZIU0lPNXpudmdTZFc0TGkzczVEcjlKY3E1dHVCai8vL01zUFAraWJ6Zmxqd0d5VytBaVE3SjkrNGk4RFlQQTNqL1Q5N3hUQSs2RmVISzJmcDFiNTlKRWZhbU5mcGM5R3kxWWRrTVJEa0hkTjJUL3hmaXI3c05xTW9RVkpzUldvZ2xQTTJmQ2t6ajZoSkhvaDh0b2JWVTlxMGRsamcvU2lGN3NQclg5RFJyVmV3MW9zRmtLcndhSmMvejdWc25nWldibmFqT3I5WjJnc3FPYXM1Wk01eEgvaldNMXpqbWw0RzRIQm9udFdZMk9oUlBVZmtibzgxRTlCN1pWOWgwYVU5SXRNT0FiSFVJYnk2eERyVGZVcW83NDZzNFJxZTQyaW4vcTFBVVhhL3dhejZwTm9Nbm9pQnJRS1d0L21OWTgrWUl6eGdxZHNUWkE2NjFKaEhwcWIvdW5uV0pvVkNIMzlpZ3FyVXpQVnQxaXg0YWRuNXR3SDg5NC9RNzc1aDA4RDZiWlk1OVhYUXJCcm1iZ3o5b1MwYkdEMExraS8xbEtUSFZQUklxdHMvYWlyakZGajJaTHdJU0NZQ1l5ZE1iNWlxU09RQnkrNGloRGtrS2xReFduZ0lIRmRpcXpDZWF3ZlZnQUlxMHA0TkNoRFRVdy8xTUdWcVg5WFNlV3UvS0tyT2FMcktPU1MwZkc0UGtwVURnRzFuaXV0Q1hZWDl0QXMyU1FWWHNqZW14TTh4b0puQ0tHMzREYVdJY3hjVU5qeGRqdmdOT3Bnam5rb2xSZXBqaGVVV3ZrbTVidm9TUXNmbzg0SEh1YlRuQTFMUkVjQjFZYXU3WFpjaHJ2aG1EM2M5b1hvUEJuWEtxQW5JMk5ldjBTandDaUJPa1BITkMvbFMzQzZYRUxOQytkMTVoUSt1a1JObzNqMTNEQ1FzYm9sYzU5SVZhR3k4TTF3WkJPd3BMamhrMzhEVTFqM2VwMG5Fc3JOdUx6U2M4U3RrSXR3aTZ2QnVRUlVwczQ5cEJib0RyMFlTV01jeUhaQUs2REpVMTY4ZXRHWUxhQlVndGZUdHlpalJELzFPZXFLVmQ3S0hQRnAxQzhQMWtrQ2dlbGN0T1NkQmdkWHIxQ2pWSW4zNlRzYzBBb0tHbTlPeVhSMTRzeDRvVXVycjNjQWkwSTBGK0ljT245YnUrbllIMHZLRjFRdHIrWVBLMHVrVnhLZURhQU5wcGFyNWxoYTVnMzJuRFpNbHVEcTZ3VXUxWlNPQkwycXZVOWVxdERhakRKR3hpMWhUNjUwUG5ZVk95YXFHblE0cmpQSERqMy9vMTVlZWhzajV2Q0FTSXE1M0VUTkdWK2dyT0ltb0ZmUEs3djh0WjczWHBCVitpd3F4VFcxVGlnZGtuZ2x4d1NybnRneElGMlZqalNsNVlsejdpbVI2aDVyY2p1RGkrbFZOVjg5NHprTEhqbEh0QlVENS8veXN1Y2hrZmZwaFdoKzQvSWtVcC9IVVRyTE9pOHY0bXh2K0RaUGhyenhhU1Y2UHFYemo1OSs1aThnQWY3dGIzLzc4Y2NmK2VHQTA3TkgrdVczWDdDNVZlQWE1SWNFOEwvLy9qdTJVR2lUamg4RmNLeEpMZG1LMGc4SHdKVytNbnptcndhd2xlV21RSCtQckNyUlVTS0tvWFp1MWNyV3U5aEZxRFBOanRhYkV3RDEyRDdmNWxEaHRxUFAwS0NqZG52RzNoNU5HMW8zandaZEpFT01YcGc1WXF1cFlMeTFlaDZDc0s2ZitRbEFKcVBsMDlLeU5HeXNjSXpQcTRDcjFXR3VISHRkZW50ZXFEMSsxcWtZblVGVjFxaWdsK2cxS29TNDhVOG5LekgxVUpWVjV5K0NoNnB6Y1J3NTlFa3FkNktWc3RvOFFpMWQ2WWlMNFg4dWJJYk1kVWlJakRGMWNZeDNMN1liQyttbU95aEYxYjlhTVFJNUVuV21xblFKVVRUbjVLZHZwVjNYQUhQVlArMkVycG40K0kyanlDenhxUGxoREF5OTZra29MdWVsWHlhbndCYmpSTFh3S3JLR1ZlMWczaktPcXVTaThyb3BHZWQ5MFlhTnowa0JhNHJRNis1OWhvdHN1M3JSZHBjNC9EY20wdm5EZHBYUjBVclZhaXFpVG8rcGVZaEYzQzJjQ1F4eTkzWk83QmlkR1pFWXBqMlJnMlBFVGl6R0R0NlI2MGdWUG9iaFhFYUoxa0Zpa2RUaXFsR3Q5WFg0dE95bURlL3BZVlhZT0ozUWJZaDFqSFI2emlBWkMwYzFYU0RVYTdJejZzVmpaWkRBKzFFcDVpYTdWU1Z2Z2U4ckorU21iQjJlU1l3ZUVuMVpob1A0Q3YxL1BkWUVPSzB5eDFQKzR5UTdlTmxONm5hd1dMcWVZaGxXRGZDdjEzNmZGZk44MTA1cWhsKzVjdVkwN3lpL0lZUFBFNTVlUE52MDlocnM5RkZPdWwycWFVaThFWFRXemNEQnVxdDFVQzlIRlg0SXNZaFdwQVIzMlQxdzUzVGtQWjIrUE90Y3V0cVlobDY4VlB6aTZzTWp3ZUdkOW9ENGwwaHYrb3JTUm5PMDZPdVYvZDZpcjYzSWsvZFUvMTFtWFlmdXJSVGU4eHhPVWEzbVRKMWlldmlUZlNRdm9KLys2eVdWUE15ZEtUSkpXQXl1WjIzd0dXampOcDNwdW83N1JDaE5tM2p0aTlqby8vRERMNTgvLy9TUGYrRGwvVkUyVktTaTV5K0lnV2dQcjltckFyMXBYTVZVM2pHLzJ0dTZYcEg0UnhUaGRmZkN3ZkU2WFRVOExZdm45OEpycVNmQ0YrSGsrbEFOanQ0QnJwYnFZNHgwUngyRG91cWtkVWg2RHFELzNYNEg0RGg1Z1hVZk9VVkdVai8wT1dReUZYS2o5Y0ZyTDB3UjZvRDFLTzMwZFZ5MTAvWTlnTkxWS2VIQ0xFdnYxbU5CUEZTZ2JBMGJPTHdIa0t6bDVPY1A4U3BRR3FxRXh0Q0diTjc0bDNjMEN2T2EwT05GQVlOMzkybmp4bEhGRk1memxha0cwNU55aUJINnE5QmlmR2szbFJVM2JGL05VeWlKUWtoSUdYU3VyWXFXcmFGQithcU5LUlh6UW9wbWwwTndPYTJONmtYdlhvMXB5VEs5STZrOXByUXlOdGxVZTVVNkZPb2hmS1dhT2pFNldLbEcyVWRDd0JnT2Z4cnVPSWhiejlzUjdLNnBzM0Vpd1lNc1JwVis1c05jeUF2aVllY0VPWUs5bU00OGtsK0R1OVNPSk1YaXFrT3FLZmNHaDNVclpsYmpNcWJDRlJWbVJNS1pSankzbzNPaFpiMGdtL2toQVpvNVB1NFpPcno2cSt6cHpkUWE2MlB6cHZNeC9jaEF3MWR2ZWFrOFpTLzBaVkwydnVaUEtjOHV6K2NwKzhMckhBamhXc0FuL1JlNEM1dXBKWVZORDI0UTIwOFFuZE1uR3h4d0NleFN1Q0lZUXpyemV1OWs2MGN0c1U1eGhXK2xvcmFRZGNCcUxsM04rdGFKWmllNG1FNXdTSG9UR0pyanBIdHZmdkNGejlDdWhaYnNlRis3bHV6UmR4Ujk5QzBWNVM0Ym1zazlKUHlBeDhDandxTG13Q1U4NEp2NlNkU05KNUhnblp6TEtWNVMreVFNYmFrOHRZblp6aVVyOUVQUUZmeVhBWDc1K1dkK0NHQ203ZzNxOTRNeDJESnBMMGJqWGVsNWxLSGg4ckIralZqcHhzNnE4aEtoSHlsb0RuUEhWZEt1b2N6UmdVUTJkamRDRG1oa0g0Skg2c2lKRkViQ1l5UUV3enB4N1VhazRncnlaTUMweThiNEZpQUdIc2UzRGVYcFp3T0VaWjZKNVRoSXJqSlZUNXhDamRqQUtZYmdjZEhLNGxsUEQ4TUJoUkU4Q2VyUk8rMWZzVGpzWXZPRENvVU1mbkV2MjBNcHROVEwwQlYwd29yb2JGY1owclhoVDBoNVBHdlMvcjZRcW4yc1ROVThvaUJ3RnV2RFAzemxmLzJZa3ZMOUNSWTI0ZC93M2xHZDFnS25vYVF1MTZjQ3F2eVVheUp2UGxwdElRZnN1YkNaSDZVa1JmTmlqcDhoWUxsVlVUb01pRTlzMkVZTW8zWjU4YmZaWFhoeFRJeGFqS1N3RUxoZGtpckJXWS9nNFJxQ2loQjdEbTBZZE8veVF1aXVEa1luNEdJOEVZSXZ4akpjMUJnZWtZRHZoTzlrSTE2UlhRR3ZDWXZoNFJHTXlPU01jNmR3MlhjRFlCQ2FXbWpDSXZoc1hFODdDeWREaTNlMWJwc1c4bUprYUpGbCtBSmNYRXZnTWx6SURIZkNqaXkwblFEaTU2aUY2WFQvZitoVFlZcFB3YW41aUppL3VmU1UxVnZYTjdranhSeExaSHlSN2VTRVJ6L1plMVFQNGNvNmNxS0E0VmlNbmRtbHdvVDJsTTRLaTZCRlpvanlUTHZlNnE0M3RzMFpLYWErUytMNVVxOEM5YlNaMU5PbHBYTnNGSERSQW5xNDBLeUdLNElobUovdzRORjM3QkxvcU42SFlEQTZYUis3eThJWnlId0RPMldBWDk3UXBtRnZwQ3pTd2Vpa3FpZkQrTEczTEM2TTNucGVjSWIwTC9UTnNjNFMyMTNZYmp1SFBZRitzRFZ6Rlkya2RhYU04d0ZzUG8yckhQMVBTMVVlQnRrbmhZdE5FZmNBZi83em4vMWxRVVlBYTJjL0ZvRkFXOXB1VlQwR3FMbVE4VkVMaGpRUjlNVkIrbGg3YitDSnNtMHlvSTBPWXUrdE0vRjJOWk5mSUgvQTVSU3A3Y01VSmppSzZtb2xoS1ZzMTJEYXgxOERXcnR3clNaaE9SbHQwck80NnF0WmNUQ0xLOW80R1lZVFJPQmNOUnUzdWVrcDNUSEpwdGk1MDlibjZldllLcVVjczNWWjI5TXpqdEFBbFgwdFlHRXlqRUprTVdRcnVpUnFTREcwd2pWMmxiVVk2dlR6cC9MaVlzakg0RGpGK2ZDUDlVRzRKZkFlRmxYZHlmcXNuZk1DOUIyQzhGcGoxZjFIbThXSnZtV1p6L1VkM0czbkRJNmgrd0V0Qlk4NUd0ZDJmR2JSdlVTUjFRMXd6bTdCaTNEUjdIVkk2VmJaaFU1eFNldE1NWFhvKzJOVVJaNGUrRzRRTWZhK2cvWjI1SVVkRjBhM0kvS0VRK2djMjZOM3pMM09Gem8rdFJZQ3craDNRL092TTJubkwwaWlqTk8vUU9MQ3FIcWc2MVF0ZkQxbkE5NE41U2xFaGx1R01jQmpMMGFHUyt3eVhHajJkdGtnWHdRK2thMTJUSG9FazMzM0xzZ1hEU1A3dnJIb3Z4KzRNbjNPNlNsenRFV1pvWjQ1V3pPaGcrSEVDRDNJMFlDV0N5U0NNSU1iVEN4NGJCc1oya1h2MW1YaEFFYXFabndOWjhUMUdHYWtNSklPZXhHLzhlYzJwWE9za3pKU2M1RFNsNjdmeHFsWWhvWFVPMXpNd0NDSHdsSFdkTzljZXgvTzdqSnlEQWQwaFVuMEloeFgrTHV4NkVEby9FWGZYb01wTDBhOFVRaXlHQXlYdkFteDJ0S0h2eHZSU1FpY25XYUUzb25FcUJyMDhMQStjczA2YmJ2UDlBTWE4WERYTC9seFVseEYrblNwTTZWOFJQUEtpMS9ibE1FdVJTUEpoVEU1Wm1xRDVQZEQyZWp6Tmo5ZkNrVC9qeDkvNUh0Q2ViY1VsNWRJdFB0V0VoMUF2RzRNRVQ4aittTjdhaWk3QU5lVDJoU0wyOHRiMTdJSkpwZG5sTjF4YkxzTVJ1MGR6azd1VVYwMitESExycU81YklVdENFUFRNUHd0UU5mSHVYREl0NjBDbVA3NUlCTjNiNFNrYUlYemIrYlFzT0tDeENqWGZDNmVSNWZkdEpPUG1oaEt5dCtydy9FZGQzN2pxS0JjVDdjbHBWblpTSFVaeHJBcnd5OHk1dndKNHVUVHJRZ1BmTzVmWTgyYURiOXF1QzFGSFF3UWR2LyszVjk5RHI0YUlPZDNMUldtcHFHSGFkUWc4Nmg5dG9UaGEyMi90Rm1XcUJoV1NEb2JTR080bjJTQVVac1JqZXRsWlBiYWhadFROY3R0Y2FNYVZ4TjRGdzgrRFQyMkxOT3VZeXhYOFV5d21qd0ZKcEJ4Q0ExMExWZHYxNGRNRTNhZEpmQnB1T0JKQ2g1WE53b2VSWGE4Qi9aaUprZW54SUlINlVhM2R6N2VuYkNBSGg1cEpUZ3UzdEE2czlzanU4dStuOUYyUldHcjg4WmV5STVhd0F4akxPSVpkdU1kY2pneHVvTHQzWFZFY2wzdlhuU09ZSEoxYjdlZkNramd2OThZQjR1cU1zRTk2ZEY3QkluMUJMdGFtTjF3Rm1nYk9Db3hUZy9UTkJzT2ROODVpN2NIdWhnUXRGSllDRjB3c2wwdFRJeEloYm5VOW9LYzJDMUVZZ1dPOGloMGt1WHdzUHJyVE9zaUxzeXBwOVR0Z0liZ3FDWFdjK2w5cDNYYm5DQU0rM3dadmxaZXZORnhlVllEWEEyOXJxdGxGdGdIMmd5ME4rVFhTVi9YdjFTWU9sTk1ON0RkRmhyZ1VvT1J3YTZISGdLd0REdno1SVZPQ3FKTTVJRk5BaHN6MHZyNmtxc0lrM0pYbkRTUjhUQWNRbnJuWHJhRTlQdVErbjRVaG55ZkNqY0FmREdvN3cwR29YNUs0QTlhT0p3UTcvZ3hQQ01QbmFVNEZFbGxiTktxWEFiMUxVUG1heFlWT05TbWFJcmNEU2hOWEdXL0dFNjlHOGNnUGJHTFduZEZWaWxxUzVOY01jdy82dXlnRWZjOTBjZS9BOURTM0s3NTRLNlZIdlVraUpGazRkdlYrbkZhaVZDbUR0YnRSUElwNG5zQTR1cE1oRkE3VlU1RWg4bFJhK3ErNXcwaVF4d0owbmIralhubjZMZUNjS3ZwSnNTNy8vcjVsSDRDVUJlREdGa0hFV3M2M0hkeUh2UDNMemo1U2xMbkVJaVpkVVpocXVHdFIzODNqcmdaeW13ZnpySE9sL1pPa1NnTnRaYlgrbmZidElud09NcWprb3BTL2VMUXpXMjlTRkdiL0NBWU9sUW5YRExDUndyc0dncVVVVVhLbUxIbUR6VnpwdktVdWhJWlVmamtkTnVhUjFlbjJRNE5JM2FuQll5eEJ4NzVGMDNDYWdzdFNEZkVxL1lPR1k2V29FNytuZDkxc0FlM0dTWjBWNUFPVmdwNUxvWEdzemN1ZWNhMWVQRWIvYkFJOXQ0VWVrREwrNEpKdUs1T3IwY0xNUks4Q3k5Z2hqRkNEaElqTG93RmZEM2MrVUdvMzdLTGdzSDA4Y2FJNnc4YXVvaS9xRjExcHVZOTN1VXRCTUFGU2VEaVdvWUxiZkV5aElCeThCZ09YSVpkellFZDZUcmd4S0tlc21zVXVvekYxWWVXTWljMWRNUHg5QWJqRWo1UExZdFl0aE93eWExK3psMHhiUkdpMEFrcHlTQTl6YkxwUVhwU0V6cTRNS09Ba1dhT2grRjdGb0R4ZGdNOGVaZVEwTHArNTF1ekk3dUN2V1ptSFZ6U3J0OXBTMVZ4ZFFNN3c1NzZoWEw0M1pES3cvb3NwUzdLeS9CSng3aFBMcDV5T0lmOHh0L3Z2Ly9LaGQxRWROWVhHVXpIeFZYUkw2c2hkelZ6MkFqRndNVzJDb1R2Qm9YQ0Y0WnlEK0R0RXh6VDNHZmZEODJDYkxLS01wNXQvR2IvS0ZzbEVNR25qSGcrVVc1TnBNb1lwY3dpNVdzMllhWTU2ZUwxY09uTmRGUmMwUWtTNDhuVmRjTFpqUTkxUW9oaFpZWTJ4cFkwYmh2MnBZK3gwSTVEazNmWEU3NHpnMVFJSFFldE50L2FZSHZEV2M5aW1vUDI0cjN0V1lMRU1IOFpBZ2FKSVdZbGQ5NXdJT2lNNHIxLy9lT0dSUU9SWnh2KytoRVY1eUwzdGZyd1QvMVNDeTRNUU02U0pXcWNiWnkyOWJtYUV2T20rVHBNNHdTZmlkNTVYRTVIaDNUUWRwQzZ3aG1SMUJjSWRxNFUyM1BJb3kra2krQ3FSWENVQ21ZNlhIc0ptbVJwVFR0VkJiRWhSdVBZTHV3UnQxUUs2T0dMYXhsR1BMRW1CTzlTQVNQU2pjN3Nha2Q4QVRzL21rZU93YU1yZ1RZNnA5dmRHenpHSXZMbWtGTTIvL1NyTFhQWTdZQzZ2V3YvNmxBUHBOdm1MSVV0UThyYmtiMW1jNTZZT3c2eWc3dnNndXdoSlRPdmdZVmR3ME1JK01zTGZnL3B3cSs5bmZtRjl1MlE5Y04zc2kvdFhnOTJINXIwRGhLNW5SelhianlSRjN3Wm9nT3lnRHRpV2srNmhMeHd2VkNMU0l5dVkvdkpGUndqZHNJL1JIWUNzUWE3cTl0N1BaMGZab3hkc1BOM3RaMi9JRS9oUGVOUk5qcjJMdjBpMjlVVzEydWRlUGVvWkh6aEN1ZkpTR0V4ZHViaVdvWTcvNDVBMTlPMlFjZU9vWERPajJ3WWJsZU5tYjN2c3JrQjhJNm8vaHpZVi93bXdILys1Myt5WlRJVGpsSjdGODlUVERYMlRqR3lqekluUFFibDZpVkdQd0xRUDkzQUZGTFQwUE1ZcmRmenBiYmlONFYza0NWUnlheVY3RHBMMU92aEVwNWhETUwxM2ZPTVdWc2ZXQzhyYjFBRGVkSHA3UUloUU54S2ExaGVXcjBqL2xSTlJTak9yVjRreEdXb1k4SC9DTFM1Zzg4anFxUGxEOXZvSzViaDY2Ly9pbDQveWFsaVJqa1NsR08yRW5jS1FSNU9weDRoRzdSQnhvVEh4YnYrMnQ4ci9IYTJBZkxldjA0cE5XVEd5akR3UjluNHdBK0NmQkV0Q0djMnA3TDQvaFJhYmU0SklZditjQVYvc0ZxMWpEZlV1YUswR0hXVEFNNkkzbVQ2dGtoSzNKdWRDaTQ1R3lMTU5Ra1N3MHh4S3NSRzZ5RU90VWxnekQ5OUdFOCtqV1RZVzRBNkhWUm1vdzhGMXRDY2NvY1pBL2dTSDU4c0ttcmgwMVZDOVFNUSt4S3UwK2RTY0RFUnJLaXB3MElUNWNEZXE5cFZRYlR3T3puMmJsZ2srT3RoYUJpOUVhV1Z1N2RJR2ZZd1lCazZMKzdJa0ZqSW9ZVnNIaWZQUHQ4aE1SK1drRVU1WGgyUUNua2k0THpJUmZYRjczbmZaNTk1alhkaXVOWjhVRjFVZExybTR1ckY3TFFnbDFSZFpOY1FSa051ZUdXeWZuUUtVeGQ4ZDMySVhGbTBBS05kWUFFZUx1RGtua01XcjRldkZRNGhmV0xOL2ZMSjZlSXQ2VHpzc1NFRURHS1Y0QXpMZFhzYTN3V1hLQWhXNk1aVjMyYUZqS2VuRGpFWk1WaWJjSUtiNldHaXVrSEk3azNlZDR5dXR0dEhmZE9VZDJaM29wcEJPKzJLdHlnUU5jbWFMODFJZW9JQWV5WG1kT1JObStjbFN5M2lYZC9pU1FIVEJYUzg4KytwZWNFYXBmWVVkNDZtWTlrRmYzT1lTc3hIYXU1d2JnS2hwWktVbmV4MlhXRnpuY08wQVcxbFhqR3lRb3RoTUZFWWlaaml4blRTMUROY3JiUGUzaHNMYURRNkNTZk0reXQwdW13eHgrOEFlRUhZTE1INStlZWZlYytVM3dlQTRKOERzS0VpSTdjSG43NzNueEdBcGFSNnFPMGlIeG1xVDFyb1ZSNGFXUWo1bHI4NXdMaFlmR1NiSFJ1bWZ2RlNPdzBxOFpiZ09wbjdpNkRpNWlwaExHV1hVeURaM1M4YzhIQnNCT25NUmRacUlmZ0FYSWZCUW4rMFQ2NFlLSTFkVWRkTW9USHcydDZSSGhqYUF1NURkTHBVSi9oUEVQdXdNWFB0dlBuV0hSMjRzYUNRTTRHOHFkeTlYYzEyODE0aUFidUJuY1laaWQzVjdGSXBkU3RacmtFWXpQb3pFOWljanV6NHFkUDN0U0NwMllMTGNHVGh5cnFPZHQxVnQzR3Y1R2hiODZ3OEEzYnZIV0UwcmdwSDJGdjlkVGJlUTZaMFBiSWM0OGNYOWF6QUFSSzVQWlUwd1Z2Z2pvTXNZQkFpN2JKRXA0V3pFeEsxOEZOSDhEMjJJOUhwaGtVV1dwUmZlQk1TbzBjdDRETHN6Q1VGekoxczhJanZVdjhNc3FmWTFjenhpOGM3L0YwaHlCSytEUFh5OVBCUDE5dmRWU2ZyQVZ4bzd3LzNGTy9IWm9LN3dSelhhWjR1aWozd24wTllyQzlyUEd0OCtNOXZmaXkwSXdqbmhxdWM5YWtWNkhsbEZMQjc5eWtkT1VmUXNVOHU4TjIxSUJuRzZQWHNZSkFZZjVEUGFwNVd3N0pkUEhhTVBlUFJGVnIzMnQ2UmtKZXFPdE1ja0E3YTdraG9IMHFGc0lkYnBFdDF1L083L1Zvd3pCaDdGcnVPaEozY2tTZjdRNmtsY09jM1JDZU5ud1ZxcTRDSGpZcjJLbjZ0dHl1Q0NiU1JJWVJ1aHgrRDdSTTdlRDQ0elE2S25Sak5JV09qTmNNWnBzR3hEZE9Hb3RpcXNTc2pHMFhLNzAzZDhDZWREYVB1ZDllQ1pBZy85cHZHSHdoNVUzbWhmWmpvK2gyQWhkcUgzVDRtNEZoMlRtd00zMTdMbU1zVUkxSWdlcG5relg0ZEhyM0J6QUVzcjZJWmdlcnpOZ1hxdk9FRm1rNVpGY0xKWUtrb1kzUzdlNzNoZVBLYVNWOEN6bTVUUDVTZytjRnVXR1k2U2hjQnJXNTJZWEkzeVJuTWUvKytxVlcxMWFwdUZjeW9Pajd4bjFDRDlQNjZ6ekd2MHYyZ0s3V1ZBMGhSVGpRemlnTlNvR2VRcEtxbkpPd2ZuR0xXb2xkY0VhWkMwY01XV2ovZk1HS1NDaGcxQ0hEMlhvUEJCUTlUeG5qYlY0Yzh0R0dVZE1CRUxVaUdNY0tjQncxZ0U0ZGR6UzVNa1lyV2NTUEJGMk1aV3NUaDNRNXRkeG5waE5nWW5KMTkrRVFPSi9vNzgwdVJhTjZNZVptakZyd25QWUpmbXJxTHZ4QXNXWDM3b1UvMFl1cUFZNHhuQUIxejEra1RnVUVGelc2S1o1RW5MYk9yazNQU3grT01PcXhBWEFreE11cUpiTnhmaXRSelNXbGVwVGF4emJ6UGQzUHZ3RmwybnhlUjBqN1RoK3cxNjdudVFTcThCSHhHTlIyL1dKUzJYZ2Q0ZjBoUEVyb1FKRHNWUm9CZGNveFNMaUZxbnVUeVYzY0U0NDQzODQwQ2lQTFA0b0lMYzJWWGJTc0N3Znh1RU5qQklUSmZCTHNyS1Rwb1BxK2NLb24xNFVmb3FpU2FqSlFnb0d0c2w2Lzh2WjZUZUJiNVVEOThoL2Rlb3ExRjMxaG5kbGR3YUM0REkyQkhySlBVa1UxZ29vSmdKTmRpaEx3SVduWUp0R0FVRm04VVFuZ2h2bkM2RkhZYU5BNnVwNytIUUF2WVE3NklyLzJYTDJOeTFTa2tLU1VkNTR1VnRXTVpINGdvLzN4aHlxd1ZORS95MklWWVlPMTlBL0NuUC8ySm53WmdzNkhTM21MK0pNRnNoaGpsNHZUREZNRWdQVGcvRFBDbkxBUlNDbjgyK0hQOXBXRXEwYk9CZmc0d3p1QTEvN1dxOFhndURMc1JiOGM3K05xTzFFSUxMcU1PZ0FrTU1aaE9qQVR1U0Z3dmpQUFhnRnByOVBXOGlVM3E2bTlMTnM2T2lZbWswMk1zbnhNYnhIYTRqV0xadi9TNkNZRHFTUkxDZ2RTeG5LQ09wYzg5QkVlb2hHM0dzRFBEZDR6VWNTY3pHbzB5K05DL2kvSHBqb09vZnVyWDBkRWIvK3orK2VBL1A4bFN3VDVtTXdHSUd6Q0gxOTZKTUxuNkplQjIxQ0hvT2h3dHhnUzJSNlRBZXI4UEhXUk92R1hvSndDdEdFd2ovc25BY0ExeHFpb3FJU3lFRHd1QUQ0YU44cXZiWkMvd2hlc1dPRVhNcjR6akRzZTBSY2ZERi8xcjErSmw2Tlp6QlFrSUV2c1BHQW1Kc28xbEdGb1pXbThqd1lOc2hnK085RHA1SHhwWnpyYUVQQmk2Yk92NFY1WVpYT1FVMll6VDd0bDV1YklxaXRGVlp4Q2gxUlprR1VJcHBHV2NpTTlWUDBzTXJlbDZHZ1p2c3NqUFNaWTd3eGlKMnBHcE15Zzc0UjNrSk1KOE5XVzNYV1I2L0hneDcvaS9iSFJib0x1cWEvT3pxRDJwTnVEZ3RNQzRPTG84QTNtSUdjUGNpMWFyNFFQbEZ3bzBKM2sxa2llVmdEU3BjVFlHR2VYTkY2QTlQRXhjT3puSWJwaS8xK2w2dm9CZkt3T2ZBNEZhQWtjOVZUbGdUK1JoK2oxanlMaDJieENuNi8zUkpZbHFZWHE0bE5xVHhuWkl3aFBZQ1FFeHpJK1hZK0pUS0xtNkVmSytGTjFsV1hyVEZtTkphbThISTI3TnVMcmhxSlJ0QS9DSXB3d1RPcWZib2NYWStEcGx0RVJxZXJKbStjclVwa0RWc29HcDUzQzJRTnFnaXlPMko1SWlvNDlSVWhlaEkzYWxKNXg5MUYvKzhoY1FiZ1BZZVhXZEhsanBWQjBnYjd5YUJzaFdyZll1NE5wVDZUYzJ2LzVtM2dQZzRWcFF0dFNaMUJFUFlxTVNqU2wwVi9BWTNYdTBGMmFHUndPRlh0TE9XVkpBV0VJV1FvYmpCa0NLdFJCMWVPVzFoUHI1eEpxWWJpU1REYnV1V0hSMEFrbk5vTzBvQUdaaUl0VFRFQ0V1WnBRRXJ1aWFVbHNJM1NmTU9pMW9UdTg3SVFvN0NOTEx3RGJaVEd6T0pEY3N1Y1lQa2x5WGZuMENIQWxrUG4vK3BiN3drNTMvZC83S2YwUm8xbGZQLzdNVnJDaHppbGE3Ly9FNW5BdTJwWVB4c2lGc2Z3eUdaUXNQaURGc0xmbXdDK20yWFZ6VnhGN2hSZmZQNFpXcW91cGgzSDQzaGZJVi94WitSVldjRmVyamQ0UFdRN3BOc3NRNmF1dE5QOU42ckFOQjN0QTBTNXEwbmpIRDhzeWxtSnduOEVyZG1CMWNBdmRocjRHek1iRzdRV3duVzJvWERDMkVJWlduZzNKRVA3UVl6VVZNWGFvNldCOFlQcTBzRWdVYnl4Qk9rTVZld2oxc25Oc2N1c2dTdUxpVzRTWWI0REtlUW1Ec3JnVjVQWFNPaGZNQ1RFM0hrSGd4UGlSMGN0bTM5ZHk4TjZDdW1mbVVkUE9NZ1o5bWV3MUdjQWNNWjNkQjA0dEZaY0FidytvTTk5aVJ1UFFYN3d0K1hEM2Nka1FZMXZOTzllWHJycDI4SUNISGdJQ2RTZGtBQWs4OTNUanlvN1liS21EVFQ4YW83WUhoMkFXemw5SDV4bnR2TWozTk9oRUJDYlA4SWhnTTJjWUNSb2R3WERRajNiQk4zMU1rdGNGNFk0U2NGSGJSMDNad3orc1UwVWtnUnNEb1BKWGhxSVIwdzY0RXZtQjJUcmNYaGJqS3FDTEY4S1ZjMndWOVNwczNaUEVMMW52cDlkZDVhNlpBMS9sWkRBWDNaZEc0elIyekw1Rzk5T3dIL0ZGK2ZnaUEvYi8vKzc4L2ZmNUhSWVlpZzFpSDIyYVQ1cVJWdkNyaGt5UFV5WENlR2V6ZjlBZUdWYm0rRktqT01Da2hwZDQ4NEVRSTNkcE9DQkpqQ3hLQWw3NkxHN0hMZUJUaTZsN3MzajRTdkJhL1I4VWVmd2NnWTR4a3RaR2V5ckhWR3J0MmgydUl6b0xHaXEzWXd0MlhqSTRCMDNZUG9tMzlPRll6WGUyL0diQnN2cjJyUUNLRXVCYlpFN1d4REhmQ2ppUVFseHNJNXdxMmQvOHV5THQvUUx5ajF3K2JiQ3VPNmVnWFVQaDFsa2tBb2NGUlAyc2VReDRLTDhidHZmYnljRDFWb0M2MEQ5cVZvaEVOQXJ6amRWeVl1cWVuV2sxSXpTTFRObExIRHZHMit6ZlQwNXhrWmFjdFpYU3d2QmNuNUlKbTRLYVFrcWF5emhEc09WeG5IZGtRWEdlR1N0ZXlkQnc3d3hnbVB3MFZVRzJoZ1QwaHdaZkFaUmhhR1RvMWpBUVBzaGcrUDYyV3ZrZDFmZ2h2Z2pwTzFTSzRHNU5TQmM5eitnVnRFV1M0azRQczVDZGt3YnRDdDEvUTdFcS9SeTJ4WVdJOGtiOG9aQmNCNFVuNmhVaXY0Wit3NTJIN1dDSm54Sm1hS2ZpSkZGSVFiSU5HK25rYmN2ajJMbng3QThhSU1vYWIxcTJlejNkalVrWmhwZ1hFU0hrZHRMMjcvbC8ydnJWWmx0dzRidDhrUlRMSVVGQmhoeUwwLzMrWHZ0bGhmMURJSkVWeTkrNTFaaVdReUM2Zys4eDlMRWxaeHA3RkpMS3lFdFhvbmhuTTQ1d3JCbEg3V0xNRG1lK0ZLZjBEOVBVV0h2UTRHWEJ6b3Z4QkhTY3lhWDBDVndVWld0bzJHWWFLcGtaWkRtbG9uNlpQSHRqK3dpa0dCbWsrZ1RCNjZ5ZkRMWXhJUncwc3psTGJMSHM5Y3BiTVVUdTB1ZTZteUVUVmd4NU5QZ21LSHAyaktUQnA0SlJrakJ2QUVQbzZIRjVCNWN5M3ovVlFnM0hwMldNaGRYcjJnNnAwQlRtNUJlVm1mNGJjc09uQ3N6a2FmaE1BdjFUNTR3L3Y5SkxBZ2dhNHJhOWlrS0thTWVRN3RsOSsrUTdmQmVJSEZMV2JxdTBjUnlnQ0J6R1BUaWxrNWlMYmhENXh4N0VTd0hwbzNDdzJjd1M3YkdjeThTSHFFTUNXc29yUGtQQ24vZzRBWERSM1Rtd01NSzRTb2xHWndWNE5SV05KK1FvTmdybzArSnNjUEhWemx3a2pLa0ZWZ24zSVZTTTlNUWhoOVRTY3pCMWdzaG8zLzJQM3I1dWFjYzNDNTl1WUNJYmErdXNTYWRlSFNRQTFsbEpYRzIvNGVScisweWNBY3hVWVlCdFRhbkRxWWJqVElxdXZ4UXpOMEk4N0xGTWxRNCs1ME5jZEJuY1NvaGxkZDJDeXV1ZEFYT2ZGbWdFWUhTVlpyQlQzQmtnWldXTnFab2docUNJSkpsbnlLb2FUREtYSTlERmUrdkkzRDA4dDdHVTZxYWZTWWdFcEpYRlcwMlJVT0puZElkT3RUMWtUT0FTQXl5K0hlN3FpUjAyelZhNlZ1NVdacG5RS0FkOWJHU2VldzNuaDhpUlZNMmxtUnRiVjlRcHptZFFKSjdBcndlVGQxZ0prSjg1aDQyZG9YSnluYWNuZFpGM2swcmllVjFKMjU1YlZocGY1ZnByQmNjWjZESy83NTJsU0gzSWV6azRtSXh2TmxUd1lETlczcVk2a2ZkTGtnYlNuM1FCQU9sMURVblhNZXlnWnF1YXF5Q0Z0elNnbFEyQXdwZEl0TXpqcUhkMkIzSm8vWkdLeXAzSTI4eURrQ1pBbUpzMDdKV3RvcE96dG82SDdYUXdHVVZmcmRJRTJrWlRXS0dzbndiUUNjbDZIN2tnYld0QVlETE5aNXFOb1UwQzhNODBCMTFzZWJLWTByTVRkME14UnI2eGpTSW5zYTVlZ1h6SnBzMlE2c0VxMUczSnhpQ1l0QnNEMy92RVdLZ1RZK21ORGo4OEI4QUxnRDMvNEExWkVNbWVwREF6TkNDQ0x5dHEvRWZFWGdibFRvUTR2TGZRZEp0NmJ4bE9Vc21RUFhMV05DOHd6TmxJcGl0WlU2N25ZNUJIWS94aDlzSnBGamtWVFBUSng2TTd6eUQvOURvRHE0RDU3TnF3OUIvTnpGaTBQRnJYaWF4M0hlT3lNVjNwYnIrbXFqNUF3cWkydzlzRks0dmFhMy83SENlTXJOazZ1SDF4ekhPS1hValFYaytkRzNFRCtiY2dMYnFabHlKY3ZTTGQ2NFlFaStBb0VSY3o3R28yaFFTM3MyVlFiZ2Y3ZWZ5MEpRdU1qQzU4bkFtVW9EVU4rMndlMGpvTy9FakN4YkFkZjhsYzdPYUNIRzg1T0xCSWRGQjExODFNd0VOb0hqN1hVQ1kydERSUjFYMkp5cFRPNS91Y1FJV0xaMHF0bVJBU3Nob2hhSU93ZWdxbmlGRFVjUVlWb2dyOEVSNDZMaFU2MlF5UytWays1bThQRlUxbXB0TjZnWnNKb3JNWU9kaE14MlR2TDVBUHpFSEs2Z2NVRjN2TnVNWnVnQmFDTlE4V3psY09aemROSWZhMzFKUFdJZHFIa1djdHo0V2ZLbXRUTURsd1lRb2wzNVN1Q3pFbzNIRXdOUDc3T2REN2llZm12b0Fzd1dER2dmZW1EMlZONHpWL2JybGx4M0RsMEVoYzEwRjFXZDk4U1Q4UWhhYS96bEhqaFZOSjhDQjBoa0VkbUY1dVo5MVE2T0gwdlVTRmRDcFpkQ3JvT3BMbnpFZDk5NGtMcm9YbWRYNDl1SlZodjRISjI1bktrTnl1bWROU3A1eWcrRVJTeUcwTWxNdk13SXpTSVhvdGZxejNtcWlua3RudENZOUxnT09NckRrN01xUXZybUhESFo3WHF3ZXNpbWZXUFphK0o1aXJ3YVpKTGxEME5oeCtoUWd0RXlMS1dYbFB3bldrWVhVdGk4aXh2TjJwNkRmdGRvOWhaSVFhejdjczdJK2ZiZTMwVnBndW96bi9MeDdNL2QyaXJCQkJmWWJjbW1XeDM4K3RSMXhibGVtVWlIUzhBc09rSHdKOEJ4U3NCZkFqd3M1Ly8vQTkvL0NQY1pENVBKVWRseU5QdER3R0EwUmlxYndHaFFMNll3Sk1sTDFFcTBZaEtvTlduRVhSMXpRaGYrMVJkSTdwc1ptRXQ5anlzNmNZUlNka1lEUGVIOUthSktkWmU3MTVqT2VmbHZ3T0FtNXFHQzZNN0NvYkZVTW9WcjVVU2lWK2txTk1OdWhwMzdjeVhoZ244RWc4YkhkanFhcEJnQk1qcXVvRkZQVWZ6b3VGZjlNRnNYMzNEaXdnMC8zQXIvcEkrZnQ1aHhJOTE4QmlHeVZnT3QrdjRmWTY2MTdFQU1Dd2pRSTBHcjBwS2dHUWVFVXVyVGU4b0VrT2VlUEQ2OXhBNEF4ajgvUEQ5WDlEendnSTNHOHhSRlVwQ0EvZnUzUS9vYS9UbHR6LzdEa1d5VVB5dmprWFhPbkpNRlNQVmVERDg5UlRxSUdGUmRRZ2xuM3R1R1pXQk5PalY0TEhBL09vTHJjUlhHQXNGUzE3N1JkYTB3M2t3Vlk3cWd4UWo5SlRwRlZjbEZJT3VqRmx5c2VoS0NDbGpEQTZlRS9LZmFpZ3JITk9ZZ21HcTVGK2dNcEJPVS9CY0FXcjRhdDFZZ01mQlpLYmp6R0FaQ2VnM1dvVVpwYXA2SjlLejJnQ1ZrWXo0dlMrYlMrNXdVSjNoMlhnUGN4YmhaSExHeWV1MkRqZG1xYlhod1NiZzFjd2ZOb1d1QXRDTW1wd1l0MXpING9uUmpIVzBIdFpKSEZOTXBXNzNlY2RydnBoMDJWNm1tS2NqU1dEY2lUenZIYWhEWmdIanJGUWFoL2JzSmxubmtrbS9zbWc1R2hMTVg0Njg0aG1xWW5BSlhxYndHZUZEbEt1YTVyaHRudU9vNjNpUUlxRVNCemR6cDFzellOaHpZY0pEZURxMFc1N2Nlb0FBUDgyYlpCK3VoYi9FYm1hOVVhOVV6WXRGTU9WS1RJSVJibUthMXdwekRldHBtRVJkR25pMmNMcWRDNHlaNUhsME5sa1gvNWo2YXJMT29xYnpYTG44T3ZrT1RRY2VxY2xjSHgrZEN6aUFjUXcwUWE1OEVveFo1b3J4a1hnMkhUbFNWRFBwaGFhb2JxbXBKZ0J1VERSdGs3bGt2aldncXpUVFNzN3M1NmtVWHIxbW45RmJHUVhUcktiQUdtR3MrY2JscFVsdGhRWHcvbWVHUEs5U3NvY3JON2kxampTZnMrQ1d3MW8wUlNzaUFWZXloYlFHVnFiQUlaSHlRYjA2ZDFaeXhxS28vM3Blb2lxb2NyNnNEUXRncGlpTEtWdTFrdTM2Mm1OSmo2M1JuQWc2WERyY2MrR0JaN3dIaFExMXVmSmYzR1Z0VlRSckJFOU1MWTJJS3BINGNBR1c1b3Z4VHlkOThRVitseEl5L2dzQTMzN3ozLzc3Zi91Zi8vTi9ZQWgvVG9IMGFzQ1lRZnNRWUwwTUtQTExiNzdXNW9RcGVGR0JZaUJESmpRd1lKbjFqekhKQ0laVlh0M1dMTGtzR1lVYkd1YlhQZ1N5a1ROdktqb0hWZWNhWElkUzJzRkFlZ3liZFJMSTFYQ1FRNnFWZ1FFQlpzUC9kYnpjb3lJRmVHeWYzbjh4dmdKRW85SUNvQlVjbllhRHhIcnhiUEowVXMvMUczT091V2JtMENQSVZSNnZDQm1FdCt5bkQxMG9LS21LTGVmaHo4S3VCZEdncnJXN3VWc05jOGpibXZweVJCVTFJNEFGUWlPZUx3TlVuS0xwUjB0V3h6LzdneXNWZi9XbjVtRHRBUkN2b3huYmErRHhvNVVvY2V2a3dMNmVoQmpGNEtpUEN3SndKU0pEZW1jaGVzU3NyMEthcSs2c25MQklaSXlacGRFRUxJaU5keWNwRVdVR3hOaWRBOUNRZmNuUUwxQXZMV1lTZVlVb1pFSVpDbXB1MkJHbytOSVNUd0JjVTlUa1phR2gzRnJ2b1RUSzNYdEZzL2NzU1FJM3ZnMTNnWmxkT1VNNFZ2eXdsV1pnTWVvYmorTzMyMWdMTURQQklSQUhMOGxtUUZtWndsTThvOUF5ZEJyTzZYaHZuVE8vZlh1ZGFCM0ZubmxWdmpSRnBRemxOWjMyTzNOSDdzVmNtWnppcGNLdTZhcmtrcGlWVzN3a1g0eGFsc0FyTUU1Nnh2NitNU3IzUS9HODhGaHg4dnRRQ3ZUT0pUT3ZCSkhOUVFJOG11MHBPd014U1Q0YzRYYWRVRDArQmNNUTcwYWgwVVRIM2lVdHNCMXBHWElsMGhQNllpNWtVOW9UZkxZN1hocEZzODljNEF3MXErTmlJcVZWam1FbUp2WmNPWXRKT0FYdWx3UkN0akpJY3M5Tm1hSm1ETzU0bm1URzBLa3FISlNQZE9ESlVEQ3hVdGdIZytFYjdhNmVoN1JNU1h4TlVmSGtOazNlLzd6MDlYeGR4NHduODNWbWVjK1F3L3lJUUpxYXpNNmV6SXlMZ2RYdmZ2ZTcvL04vL2gwZkMzejdMZCs4eGhlRXNIdkU5NjY1dVo4Tk1qVVFBRnBEQVRFNERnd3J5RDFlblNSc1k4aFF6QjZId0Q2ZVI0ZTdxeUtZNzU2VStXVXBaaTJmZWt2blZRVGRxbkl1WTFwSEFWNi9qQjh4SEw1Y3Z3UmNNM1VkSjF1WGJJOXFySUlTSjlOeUZFS2ZCMkE5YXRjSnFNUEVIcHh2OU9PbExHcVllcHk1WnJtdXNPVUR0T3Q0aG1GV0M4ZnpPeEtsMUt1VXl1TXJKTFc2T0VwWEFVeHNXOVNESmoxNjRIb0I4TjMzNzc0SGhwTGgyZXE0ZUF6Sis3UkNwVVBhZ1hobEdUZHg0OXZRbnBsbEVrQU5VWURWMTZ2NktwdWIrY2xMcSswOXNUeGJiMzZBa2srSE5Rdno0VkNQQ0xmUnFtcXMzclZDcHdqUTZsNnNxRk00OFN4ZVlPOGhUcjJHNmx1dVpDYWRsYUFsYXBoa3B1K0p5VmdKb0JQZzB6Q0pzY2laTmViU0RSWnFMdVlrZUd1ZkpCUGJQMGttenNVMC84QTRaT0NzSFJ3MU81bE00bWI0U2dpYXRnNG1ER3hyeG1BUDdVejY3NG5RcDBEcFI5bnVQTVFPQkdpZWFaaDRPUFExQ0tQUEJQMUFtalB1WkdNOE9Xck9VQnMybVE3UWVnOHp5MWhBR2p6YzM1VTNCUEdNQUdXYVlPZ1pXMGk4SEhSZW1sS1QydUZpR3lVaHl5R2x5RFBkTkxXc1Vtd3NzQ2VhejJyYmpLbEpyR0kwdGROZGxlZFNpc1RQcEswc2MxYnpsK2V4UjhvdU5ubWNRajRPQWFobEdkWWd0UE9LN3YxMFdvWmVIL2xnZU13U2FZM3lUUTY3NjgweGVpUWYzSnJld3dZMHZPdjVYaDR1NExwWFFUTWVsT2FSZW5hQVhBME5KYTkvR2VEUCtLdWcrRXdBTHdCRVlyZW1YUFhJUlFPSjZQeDhvZ3g1MzVtcmlxMGxOdkJmNE5zbGJQV21KRXdZeFJEcERaUnFuTjlqU0FJbmF1aSs4VzBJbVpramdFQ1QydERBZWpFWU52SE9PQmRnL1JJd0JwVE80eC9ESXNIenJJMEh3NUVPQ2pXcHQzZ0h6SlR6NFhtdFptU1Vudk1JaHg3bkQ3bEtWMmdJZVAxQWc3bVpCVUY3REZVS1k5VThIS0EyN2JSd1lYeDlvV3VTcExiK3ZLUXdnS1o2ZDdBa2lUZm01NGNwR0FKcmlKZWg5UWEycmg3VU94cjBRTHpLNWpWUG4wR3FmQi8rQWlNTE4xdXpqd0Vrd3RrN0Q2VGFMZ012a2dLWWNPdGZKWEU4Q2lhc29BNWhEamtqV3MxY0w5RTAxcGtwMi9GWlFPRlNWcEdoM2V1Um01eEcxT1ZjZld4bzhlNG16YzQzUmtNYll1aDJkRUQwRmJGTTdHRFB4bHNBVU1lNmhJM3cwT0RCYXJrVWNvcUJCV0EwNzd3ZEVaSjFMOE50RC9WS21VTE5mT2pNbEphYklhWnQ1aUxkWjNyaFdkT1dhT1VPN0xaUFozRnFoQjB5ZU9aMzg2Ylg4Rk5rcWtTUFFuYytubVVIZVNBOHY5ZnptTkU5OXpNeW5zZ0hVclhVRmFmbmc1ck1CMnZnR25aR0RqSkVkQWZLVFQ1TmpET1hudk14WDRJMDBZeU4wWEFQcFQraTdjQnoyQndReXBLeUhvVjJOem0weENiT2VoQkNpZy9Rd3owbFEwcVJadTlWVmM3aXFqSlJNb1h5TURXUmxOSmtWSHBONnFqQlhvemNzcGowYjNyNHBOSzJBR3A3N2gyUERZVEtiajMwYlZMTmFCL3BOY3hjTUE0WlNKYWhURXorbUFLQmpzalJIY2hRVnNLN0JneWVMOFJIRCtaeXNOZzg0U3NwYjY2aDVySk1rK0s5Zi93NkFIYi8vL1p2LzRaTjJpOS8rVXRNQkJJZkFraWdIbGxvQ09uM1ZiVTl3OTZ1dGpkNmZNRUZqeTgxZlYxdjh1TEJnbDlDVWMwNWJ6THBMMDB5bXM2TWh6dVFCbnd6MlpYU1dJOWlkdjlrY0JxUFltdDJNRDRCNEV5MWt3WWducTBHbDJFVnNSZ0lyZC9CdE9GdFJkZmp1OFF6WmZKMWhDRDE3MjBSMUZua3BBcE54OEhQb1cvQkd3TjQySUNHN0NHZk1aUEYxeXRJeGk3TjVtRDFFZ1hYRnQ3N1IwT1JQL3p3N3B2dnNLU0FiT09TcXB2Y091TXF4TFFsc044QVNSb253THc1ZEw1Sk13QWdHNjloMFZ6ekhGb0pVT1hWVy9lMTdNTlRhYk1mNlhXWTg0Z1pHL1B5R01kd01CRnF6TEFhQmNkM2lsUWhMVmVwTFZmbFdBQ2RzWXN4MDNJeEZMUDNkK3RzWlFPYUM2VDVaSkp2T0l0VXlBNGVKbU5iZ0ZxWTljTDZhQ1dUcVIzTGFPZkIxNmt5S1ZEL0lqZmd1dDRzc0JzWTR3SkxmT1ZIcXNtamxVaHA3cFhyRHQ0MEhocDRGZ0NUQmpsZEtwLzV0SG9scTAxM1o3N0xkcVpOdlF0MnBsWDRMSGlPTnF2UE5jU2t1SytsbThwSTBob0Q2ODBjQVdTK0k5c1FTdk1pellDWGp4Z2thNkl4WE04VjYzS1NsUkpMckRzbFladFJqUHlCajFPMEZKY0hrSHBoa3dhYzlUcXZRd0xvSVhDNmNHcVlId0lybjRITklUT1dqMmNVYU9hT2N0YnJ5ZEtNSXRIYjJZekpIVmpzWXVUbTZjUWpFUzAxNWxNSmpReEx6azV1QU01VmFPZVZ1UGNQSmdxNUVzMWlmeFdtb1pWSDBGSlV3NFB5SS9UMlZLN05mYnhZSU9CNlZlQzF3a2lzbnIvNFRtdjZVRit0SGFtRzJQci80aGMvLzlXdmZvVXYvL3pIZi93SDltQjg4OVcvQURucjBPcWhoMkQ2MWZ1WmRLazdkZTF4RVAveXk2L3I1Y200ZjJGdWhKVU9NNE5wekZ0VlNLY1NtR0ZzTWdKV05sRENJZmJ4Wm9vRkNWb3hIaG8wTVlacG5sSGoyMDhBZkhnOFcveWZQNjFKNDJOVFZDVHdBM0RVR3BqUWh3OGYvTW9QZURTY1BDaDUzbW92aWowMFJ1UDBZTnNENVR5M0VHdjI3RTBhS0tvaCsvSXlDUVpUOGhVaC9zVTRYSlNvWW53SXdRZ2FsT3BSYXU3KzhaSVVMMEFScW9MclNHYUhuRG91dlpXT3E0c1g5eUE1OGJqV3FiazJNd2tpY2FrdG9GMzV1R2ZGMWNDb1lRUmdVc05MaVBkV2FOYnVmK2lMVWFMVHFTeERPVkRKbjVwQ2cxblBOQmxDenl1UWZTbVhMRVBHQnRKcFdJbXNCc05rQmw5MWltOTlEcHM0UThBZUdsaGZ3VHJ3UXVZTkpFaVpRd255T2pEdlhETUdhUWpjK0NOemNmTWxZbFludEhpZDNJaDBmMDlua0dMZzVJMTNvQ3p6YVhJbFY3bFgvakxSN21heFFhdXRwYVFzaXpsbXRkelU3ejRmeCt6ek5wODJ6QnJ1eWtNS3pxOGUwSGIvM2VHblkxQ0l5L0FzUjlKMXB0N0tCUEtCN0VqS1IxRmd1VUVwM0ZLT3E5UUtTQk9IWkloUWkzb2loYkwzMUNLdFRNQXFxMmFMSGMwc1lTblJTNXhLWTRXa3lhemt2VVJISUdYck5UWElCTUxvTFRaak1vR3dORW94WTNJSEtOTCt4azRVb3l5VE52RUJta2tBckNINmgwT1RoalU4ZmdKQXIrdFNpSEhOZVJRS3FSZmZzRWtBN1N4MExFNU1nUS9UQUxMWDlmWnNOV2hWNEtPNXNKRW9ER2NzRi8xWkcvNGtwelo1M0d0Y3JvU3N3ZFhtWE5obzZjcy92L25OYjRCLy8vdmZ3eE52djZKUFdjMUNvbmc4dkJUQUFBWFVINXVwQ3JEWlEzblk1R0Z6UXdYMTlUL1RXWEdkNHVGYy9zR011eUVuR1kzbVBMclZqZ3pDS1lPbU1SZzZrVURuc2x5YitDSzdUbDN5NWFQaDNqOTlBcURKMEtOQ0Zibm5nNUZNSWVGa1dvb0ZCaERFY21BbW5BOThRUFFPZndNSUdod1VvcnlNY0ZzTGdkWENHa05YdDVxL3pzMnBrbjMyVlJ1UzZxaHdCVURHdlh2dDRMV3oxMnVBNFk2Y29Wd1RnZEV2L3VJcTFBdFFWQW1HWlZiRFVLWFg2eFpTZFJ5VExHSUtJMlZTZGJzNnVsM2J6bHpqYTVSS1lmUUpqSkdEcGE1K2xZUm92VUVNaGxsb3VNVjNlemppT2JnV1ZyVE9UY1ZIRHF1cFEwalMyRE9hTVVDSWJ0ZGN1azFTd0lKbnNXVUNOakZ2Um1jOGVZVFVXbTRqTVR3S2trLzhQSVhNVTIrTVJDMjlUOEFrV0VEV2I1TUVGdE13QXhpT3kvekt4bkcxUUZvcDlNQTROTUhOWk5jNVNpeGxmNUM5Q3RmaU54N0RPU01qaVhQWStPY1FqYW85WkUxSm4vRXUwZm9FdS8vcjBWUWFwMkhpbzhEa1p3UzZQbTJvR25heU1hblBFTkp6MkdRdDZybk1HeUJSV0JvOVFZaEVuMU1NUVpCaW9ObER0bTBBUTdXak0wTGlZV2lRSldrdTV4N25oVWtXWnAvTWtvK25VMG1hOURMMXRaNW1tL3JNT3M2b3VWS21TVk5zLzFhUGNwTUV0bFh5SXQwNzBXSUFrelp4MUV3Q1lEWExEQjU0YWJLSE9JZDNKbU95S1haV2dvYWRZdERNeFIvSmgxRFRlM2dGTUJqUHdMcW9yajBPT2U1RTJFTFVQeUVNeWliSVQ2eDZzc2RlNjRjZnZzY21EWDhtQ04vL3dZc0JmUCtuM25obG90S2wxeEFocE5RbXZ5NWZidmF3bVVSZDJQcGphL2JqKzNlOFMzRi85eld6K2RmRFNxaDAxWStBRHlTbklLNER0Z3pNc1RWQkd5TEZ6QkZBb0hwa2JrMG1PclNMR3lPbGV1NzIzT0JyL0JGZ1Q5OFoyeUtVRFR5T0VHODdVOEFQQWVxZGVKNFg3Q2p4WlFSRVdDcUhhaXhWWitwUU01eUhMRzRHV1htNElLYlJWSEQzLzQ3N2Z2N3VNVjk3dU0wSkw1Nm9GbHQvdlBURXBoOFhHVDZRd2k4QUlJVmlIQVUzeld3cXVJNU05UmU3T3RqMFFsYndCWFNYYmw3QVExZ2FHNWpjR1lUbW1pUElVbmxjcTJRaTgxcFRDTklIQXJiS3hXbmsrWXhERm01TUkzTm9aWkp6aGxWTVkxSnNoeXBxSFVtbTdOaE1waDlKQ3d3c0U4aSthZTZVS1V0OHRMTEFJR1E0T2Z6aFllTmFyVHRSZmVRemVMRDhIUkFLK0RNVFZ4UWgvOHpMWVRGVFAyNVBCVFNKaG5RNHVYV1NWY1hGbzJRd1I5SXo3VkdIWGdlN0NXZXRZdFMvYm1YbE1YRW5kOFlPSHdmU01MSGN3T3preDAzMGtIV2NaWjkzWit6NUVMTEc0RTVzSHNENExtc1hRSGtsY1NXdmRnMHRaZU5Yd29aMjVjY3hOblk2Z0hGR2o2UUZBQkkwV1J1bWZrdkpoNHQrQi9mamdCOE5BSXp2SG5ra3FINHRjdGJnOGd6MmFJWVN0L29WYW9LbTJjMlRzVGlCQmVsOE45ZFJiREpCdWlXZk9EV0pVNVA0UVlPUTltbXB4L2tHaVYwRUdxQkNoZmtuRGpFY3VBTEM2QVhTUnhoYkxHem9FY1YyQzd1djMvNzJ0M2dab0JjQUZsZjJtQWdrTjNKNGg3ZjJac1QxaGk5N01QeUtCLyt2SHFDK2NsSlZNcC92dm8vK0REemxCRENhY056dWpBSjNmS2Evb3JIK2c4VE9Hcjg1Z1dRY29SWU9QWWJYVmxzRkpQSG9kS2NkRHBDUm1tOTdLR3ZFY0lQWGVQd2FEMmtNMEJWZ25DL0w1bUpwWG9yd3QxcjUzai8reHg5MXFsMC8velU0WGozUzhzLzR1SlZlMVlMRHFQVTVWQlQxODBTeVZUSk91SDRacFFBNGhhb2ZYYnUybEtrWVFuZ0JxazhBK041L0xlQmFSRlQyRmYvMWlXcjhGbE81YzVuclI5ZjllR3RIdVNvU2VnRDBtcVgxNWdVOGhGM1lqaVJFSlhCZnhIQnVzMWlqWW9hU0o0SE9hanlMSlBnL0d0ZHpDSGhuSmtPeDFIakJVNXQ5MHFPQndIbWZnbEpTTzVnTFh4bGk2bDRvejJFdVBudklNVlFUYnIwRkRhaWVUQVNHUmpMMVlwcW1rVlpLZHRmZnlYVHFrWVVITjF5Y1N0L0ZZcElIWGtjZXMrWnhtWjVhM2crVk5SbElPQ25uMXJzeU13ZUYxYU0weHpsUkpWWUs1OC9MZGFqc2JDRExmdFhOaVZqU1BCUURrNTdhQ3lYTlV0cW5RTTZTK0tyaWlXNU1EdSttYUZrUC9uQnJZdm52NU1jeFdlMXhydDEyVDNsYWdxYm1jRnljaDhpSFVENlBMY2tGVzJER3ltdUk5ZFFwWU54aWFjUUx6MU05SG5LaG5IeC9FSGFvRFB0bGIyZk9WMDNPZHB2MDViWkZjd3JvY2lqbEpUbU95L2VJRkNBZFF5Y0NpRWxOdzY1SFl1ZSttU2lmVjZab005WVFoZkZMRnc2VmowY0xOSDVmbjNrMlY4cEU1OHM1SGFaeXJaaWpDU0RUWWFJWGJyMThNaW9HSmdJNGIzaW9sV2YyaUhvaVkyVjV4aWFRREwybU05RGp2RW53bzdtRVNiUmJUd1MremFVUWVBTmpUWlQ2dEdWMHZHOEVpYmN4OVloUm1TRHhGSWZkdUxPb213VkFncVpFQ1lSQnFnRDFUS2tWMXVZTkdBTGdvb214SmlLeGpmeGFmNnpsL1R0K2FmdkhIN0ZQUXhSN0VMeGJDODFYWCtHWGdOL1gyNzFBWCtNckhGa2UwRFlBQUVBQVNVUkJWUGg0Z2ZUOHBRSzVZVjVZeVY4OUdBTkFsMmVBcURSaU1OUlJpSGNJUU0zOEpIanJyRWJlRFRWRlJvMFJVbXNNOTE2dFFRY20rNk9na1U3WitWZVlVUjJueHRaRXV4T2VJZHJpLzdwR3NCNUVpck5uVEhWcWlsWnpHOUpxdHRSekRocjVoZUFVNGJZNGhGSEpLS1lXQnhoL2pnb2ZRdWtUQUY4dWtOTnJsRmJHVE9VaU0xQStkVHM2a2Nsb2xtU08rRm1tYU5PMElXekJpRlF2WnZaYzZ2bHlpUWNDRGFvZHUzK01jRGZHY2VMUThNSUdjYjF2REYwMjJrUERyRHFETkdueEhCbzNHZmlkTVpraDREYTBUT2FPR29oUDJVUEk0bWQ5UnBWeTlHd2tobzNKNlhiUEZyMmJ5TEpwem90T3AyRXlReUtTajUzT0dkZnlHZ3RkSkQxNEdlL0tuYmtrWE0vMW0rS1c2MkVtSnJiZ0R1RFk5YU4xOE5DZzhYYytkenpTbXdPY0g1ZzduNTNYWWJyT28yMUdnY2VqMHU3MUJvTkw2Q2Y2V1JOL3lGbkRNNFVPNWx4VlJPbS9PNy9GSEd6RGMwVEJUSElkeGV2SU5SZ290dzNUc0lVOE5IZ1Fad2c0VXhKTDlncGpFNG4zbENrWVQrdEhnYWFiU284R1NPZGorck1nbzNKc0ppbEluT0pudmxWc2Y0TVU3RllaelVrYmYwdzhUdUhFNXloa2J3cHNKZkNnMTlNOTdoV1h4dnNHZHhUay9aWmZiY0l2c2hoNENnTUVzWW5udnF3YUFMWmUrQTFNL0U0d2R2YVNhVE9tUFJ5dzdweDJCUStNWHB2TTJxblZzeUY0c1BWTHB4WUQ1TlRKQzhzTjJLQnA3dmc5NVVIWlBOdndveFBsczE0QXlHanYyM3c1VEhIakVWSVV2SUNIUjBicE9BUDhEUTJlSko2bmFMeHUrSzh1Y0xPSjExS01jRlBKMDBhYzVoeGZtV3NCR0dtdkQ4QzVlRW1ONjRrM1pLdk5TdVMzUEhGTjRNTEMxaC92L2Z1eWt3Z2hOSlEwbitYckF0SzFOdllWNVZPSFY0VVBjMmFkMmgwdjdSNDFZd0NsTVVEaU5IRUlnUHQrMU1PTnl0aXVGTWtWNS8rc3V4QTE1Vkd2RFRoTkhZVjZPb3pnRUR0S1hVUTFkTzhzTXhMblVCaEtoNHdGZG9FWkszZkdJWnNjbVVaaW1DMXR3ZWNRV0VvRER4dWpSRVd0eWVHUjNFMmNNa0k0ZCtNeDJKRUJ4cGtjWjNSRjdia0RpRXl1aEVKM3ZHVzdZR2MrUXJ5YjdBeHNRYXA1Q3BHNDNIbDV4MDg5eUN5bURhSGszbjJlVnJuWjJjQ3pIUDEzejJUR0ZYTy8xSjZVaDREL28vaTNzVkpjMzk4WmFBdnI2bzc4NnlSOEpFWXZZS1lCQ2F4UkFTS2xiQ0VKc244UUsyU0JESlhiYksyVUpxTVpPanBJa0xZUEtYWVdPT1o2bHFaeDdpNHdvekp5NkN5N09XckdvS1VuTDl3RXRqSnZZRDJBc0hvSm5wazdaV1paWStCaXdKaThBK0pibjhPczB3ZmxLWjZadStoZE1SK3B4NFBSZUdBa29ra05OUXYzR1BVd1hIUkZOUTZOUXEycWtWNDdOT3pXTU5RdkEyQS9sa3B0NVBSaWdGTlgwNzVPSVJONHhLOE5JZWo2QnJnMmx5T2pieXpsNEI0cTRTbS92WVhzTmpZRDF1eGdTajcvN2VVclFKeFlIMVZVanlIYldJVDZDSU54RmtINjJzUTBIc05raEZ2dk15cGJ2Z2JnRXhldmpycEMrR3hZNzZ4ell1Ny8rVG9BSE9yaEIwbjJiN1lPSlMvU0RNRDRaZDlDN0VEd05RQmZCc0FhZXJYSjh4VXJOdjNZK2xOUXIwZFZQM3BjYmZpL0ZrZ1hORGxvN0NLbFZuRGdZVDl1R3VuaEJlZ0U3SW5rT1MvRTBydEhBY0pLTW04eEdEVUsrUG9kZW0xc1NCZEpnalNkR0NMa2RxWTRkcU1WSWJxMGs5ZXRvd0lrcnpVdmZuaFBxNXJDNlhhejNpRVdGbUxPTUp0eGdzUVNtckhQS3lDelV0ODhVNVpZc2lZMm1VcGpnN3VzSTYvbDZMazZnNzVTSzNOcUx1d2txVEJPb1B2RmNlcE1rYUR1SFBSUGg3dGN5ZUIvRkQvUGU1eENFKzNUWVluV0ZGTmtaaExVWEphbUFwWVpIUDEzTW0yTjVkK3NFT1hVODlIcEVJMzZiZldmRlBoSURYUWdPbW92Z3NuRytLaWRmZ1NRSWRHZUJudTZHUU1iaWxFdWNGWmlqWUhUTTBzMUtORSthVVd5enJ1aWJRb3BIVElBRDJ4YloxbGdjRlE2S3BPOXY4dkNSTHM0M2ZhQ2p5bWZ4ZDl6NVJRaWovNGd4UXM0UzBNZEJiRDU0NUVpS3BNbUUrbjBIVFM5ekcyVkFIZ2YzakdsSFZmbTdubVhsVWZSTkRhUnMvdkIxMU94cnRnUjRuV29oNmQ2Yk9OZjRlUWx6WDdlWlpTYkRFSW1zZnNxSVlwaXcyNE5JZXpIZnZHTFh3RC8rYzkvQmxrYTEwSUFVbVBtekN3d2RiZFFpRy85NEFNQWZLSGhQZThyUTY5NW5hdXExcEJJejZqaWFoeGJEb3hobFZsTE42dks2SU00RXh0V3RlblRCQS9EOFZlQW9LQkxPYUc3Tk81ZzlmRFJEM1ZrWFE4U3VmdDhSUjdTcFVRVTFZOUp1ZHV2SmNQZVVGOHY0Ukt2WEZZejE4NFRsVC9MRjhqQ0xoakpVMU1iZlE0QThQMGZEMEZBdzJ1Qldsd2l3NVl5ZmtYN0s3OEF5QlVIMWdzQWxBNFpobWdvRks5WVdMMkdNTXdqS2Y1S0lKWGk2dWd6aHdQa3lwYnNJbWhpeHFwSldTV3dPNUpUdzFjc3Vmc0h6NXE1NThkM2ZsWUlkeFQ2Z0o3SGE5dkZWTlNkNU5relZNdmpYRVdWQXN5cFZjQ2NoUm5WR3RDUS9WVEs2dGliTENkMnplMlpPVWJwVXMxVyszQVZPYlRqSmxPcS9IV2VNd1MxaHdaSjJ0VlJnejFrUnEvanVOYlJCam1aQngrSEJEeWNxYU5tM05FY3VnRHkwSEw2NHE5MUJLbm9KYmZtRUdPK3phdWhvd1pIMlozNGc3THNiTENuSTdTVFo0WlBUS3MxVFJ2S2R0eERadEt1bVpHLzVlMU5WYWk5cm9aNEVwSFMxdytBNjNab1p4Q1M4Z29vZEpaQkk1MklVanhkaWoyZGdLZEkva2ptUk00RjhJd0Ftc2lrVTZRZmQ1SmFCQ3N0OXFRSkZKVTQvYzE3ZGpNTllDakRZOS9FT1pHbXk1N1BxZE50QjUvdTcyTnBRSE9oUjNNOXdGbXRReFJWa3dtZ0M3dmo3V21sR0YxQ2pZU0puTVhiMzZEcFphVXNoQklJbzBmTExBOFRVRFJsUjFEeGkrWW9jOWxIdmNpaFliSGNRbVhaUEhZY0JVanNJdmkzM05kZEZXb2RyTmRIYmtrS2k4ZXVET25Za3RXL0VJeC9JUGd2WW5JNmVjb1F2UVRjclRIQVRSM0ZES0NlbXY0ZHlOcVlNRllRMm5yVTBkS0xaRGJHMmdoaFVFM3pBbW82RDgwMG1mbFVpbXlNRXQzZitPdkoxS3Ezd2ZnRXdFTDR1aVZaSzBFQ1VSNTRYWVVXQ0ZTb2NYMW9qV1pCR0FCdUdzNGVGOFg0YmhKRHkyTmVLTWlxZ2xoS1BhREl4MEtSZXkrWitkcjJyNy81czZMMVJhRHB4cE91M1QrdU0zM3poMWRQTlFESk1GSTZQd1RnRmNXbTIrbkRXNUtySDdrU0tDUzg5eTNxNFJVTWM1SHV1Vlp4dm93TlhBQVp2Y0VmRmZCZVd1M3kzbitkRitpWk12MDl4SHdtbGN1ZTVrcy94SHdvV0dLUmplR2Q4YXFSNXdOWnM5Rk13TDJCUWg0ZXdaRzhTelNQckV4c1E4c01KQWpadXQ2YnhrT0RWeWF5Lzh5NitIT0JjR1lXVjZmSU9ZcldNbEsyQVFzZHVtTXN1QUk5WU1YMGF4YVNKVTZnZWozSktzbVUvWGZtSWZRZ2JsbHRxTVFqZVJmYXhYZk1aVjNXeXRENG1NTFZpWnhkbzVLeWYwV1QrcytGL2JoOU5FUlZkNEk5cEVOSXZUUldKc0RDWVVhSUwrUjhIbkdpTkh0dG1kVm1sTGlST1V3Mys0akVFRUJWQ2FBWDZTR0EyeDdhSGN3Z0MxaVZHTWhLdzZaRVNKVTRKUm1uTkkzRkNYYXg1em9DZTJiaXNmNFVOT3hxRXdpalI3TWVPS3QxaUtKcVVBcTRzRHZlbmxhS2dmNW9JbEppYUJwb0ptbUZrRHdGakswWk0xNWxHWFVLZ0pzRk80REc1SnQ2S0NHLy9MRVdMaUYzMlBZWmJuVk44cDJtZUhtUUdtQWZyREFTOGN1NDJLb0RhT3NsQVhvTTlTOEU0Kzh4UXF5R2JadDNhR0FnODhzREloNFhmbk9BZkpVdHdUdHNlQ3lUajJhUmc1VUE1Q3NtVXVLOXQ3OURNc3dzYTNiZ3JCM3NQcnZtbWJuc1FXV0hCSUJzZHhiUVNOd0V6aFcveThUY1pQRTFHUnBXeHd0VWVqOGxFSERMZ3IwanJ5eTJuQ0p4QlZjVW9SVVZydDRrYkhNekpHZEVVUWsrWnNLM3pkRDBBVk5WZCtrMEYzcVdqYXRLbFhISWx3U09UaUNtODh5TjFvWVJJZHlqWmd3c0EzTkhLcVNvZTVNR1kvWXFFTXN2NWNFZkx4andYNzFzV0xtRjZEQXB1YzNSdWozeXlzc2VDVGtVTmlrN0N4eTF3QXlBOEE0a2R0U2VaaElvWFl3VDI5QzhnYkxrdkpQMmxFOE9uWmhrYzNnek5DNDEzb2xIMngzTTdBQTVKcWRCdjcwVDdQek8yR3NQN1l6RkFoWVlwQUNrMms0bUF3eFpNbTBvUVNQdGJQRGc4SXBHNlcyVzlGUVpqZm5QUG53NDNtUG9kZExMbFNuR0NZRFZjakhOR0dTMFlXc01MQkNUUExDaUJoNmFNY2lReVNNUW1TSGdIS2FWTVlBMUlzMklkMjlaWXp4c2lSNG1BUGF3Slg0dS8yYnJHWS8rSU0xbllYZDhhaElmVFRTMVpRa1VVbGJyYldYZXpHNzR3RGdFa0E3R08zQ0tRNWxyc2tCZHc3WDdNVjlpYlBXNTI3eVNGSnNCRUZhUFVJdGk2SDIvOW14Z3RJUERDd084QVBqMXIzK04zdW0xeWFjSm12ZDQwdk1iLy9YRmorUWhRNHFhWk83TFkzUXR4ZWFlMTBES3pIM0FGdS9nSWVzVFE5L2dEUEFrakYrOXJXWEN0aDZQUkxFdFdITmdkMXc4U3ZSQnJ1aGM1Y1hVQzZTNklvcXJGd3dyT2hFRWZGVlhmNGdINVhCenliOFZWVFhVTkdEd0FZM2t3NjBxcVpWU3FTUHF0WE9kekZLUUx4aUlNQmYreHkxbm5MWkxSc1NLZUl0aTZ2Y0JVQVYrNHhkLzlVZmYvdGNsQWhLTjF5OWVDNVphSHd3UXo0Znlva2NIM2t2QnhHaHRHQkhDakRMdG1qdkVQR2s4UHI5aFAvanJqVjZObENFNjFlQitsRFQ1bVZuSGcwSG5ieGhlUHZYQnlLNm5pVlpLdWJraU5Sc0pMbVlQeUNwNzEzTWt5MndVTElHWWxwVXloNnhzVWZNMk5OaERaZ3dzTmxBb2g3bythdzNHdVlCRzVCcVRZYXRFcmlhV0s2TVZuQjNqcGR6dWVtdGVUVkMvejZxMHVmcVZQSjBlYnBmVkZPM01qTHh4bTRtSm5WYkZ6Z3QzdXlNNHhRdGlBSWRZdDNWUERPZDVwemQxQlRhLzBMemZYWWljSlFOTWYzVkZJNi84ejFOUDFZcUcveUtuN0hQY3hnU2Z3Kzdrc2FiZ2dxM3JkdkhJdW9aT05yY2M3aXpyaEdHVlBJV3h3UnNYeEdrS0xiczlKUW5EVTA3ZFEvY1VTSk9FaVo3MGRMMWxxRXpIK25obERCeHRqSWNHVmhvNFpERFhoTk1sS1p4TUNGVGI1UXhXdE43THExTndYS0lraFpPeEE4QzFqZW0ya2x5dzYrbFhRdk9YN1pGRWFPZDN4cklNSlc2Q0Z0b0xrT0Fvay9pdWJ5bHRlSmRsL29QMFMxd3J2Vlo1MmxuZ000SFZ4Q1dOb1JnTms1U0pOMkJZZnBnaFFVbDRBWUIvRU9EYmI3Lzc0WWQzMzMvL3c3eDNYR1lHNlhueFJYUE1WK1h3Rmp3TUllQ1RLZmVpZU9qaEp3UVYrVnFKczNiZU1oMHBaYStIZGViTGpsYmNXMG92RWxYV0ZETkRzVWxxaEg2SUY2aG45dUU3VmROeGptc0R3RWsvcG4zek5mNHU3dy92a0kzZllNVmZ0ZWVqSTd6NDcyVFZhcUFrSG9qWEFodElNb3lONWRQYWpTL0pRQ3JlUFp5dG5CbFU0UmkxSXBYQzcvMWpWdzBCZncwRGZ6Ny9LLzY1Vm13a2EzYjgwMjNRandXVkcwOEFqTC80a2ptY0FuNklzR0ZJN1FEMWVZSUMxYk42ZnVrZmYvMFYvOTRBLy82UGdqVTdJZE9aendYRkVHWGd4U0lnK2g5Ky9HRjhaZTNMTC9EM1pMRVdjT2QzeVhnb2JIVzU4UGVBMFpCZXR3UnNvb1RwekNXVkNod211c2FIVHJ4NkMrUTRramtwRzBqOGpOZkhwWUNnaGhRQVY5TTNsL2hDSEtIaXhTQTRYcDNMWWNoeHNuVmhjVHhmdmhkbVZ5RmRNQnFxcjJvcW1telZXVXZEandZUXdmOHN1NW9BbVVXRDQ1R05DeEszYkNDVXgwUWRsL3JCeXBrcUNscnZJY096SFdVSWpzbE9RS203WUZyeTF0SDZJR1FOUzhQanNrQ0hXYnhKQk90UUljTWlZQWxxR1lZR04zV1ZEZ1ZQQzFzTjZVek05SWt4dmx4ZEk0OGVZeFpPb1B0MVpUdGRKc05Ib1RJam8rdEVzK0Q2QktPYWNjV1UwdGR6VDFkWS9lVklpdUxSem1OZmVLcDFCK09SNlloaTNwcDArc0ZoSGpJdktiZGVDd09lcmk0K09OUWpobE1tdUN6cHJCRFd0Q3hiKzJpWWF5SVBNZHYxTUdwYTZWUVBFb3ZKTnlqcThmWXFrT1VzZnNoSittajFvREYwcDV0cEdNa24yU2R5cnVjMW4xN01YT201SXVFaWFmV2NSTWVyUmNZUVJ5Y3NvSVBGS2E2SCs4c3BWb1ZEWEQ1TW4yQmV6NXpZNWh6TUptZUhlSWZsN0F5Yk5JTkFrdFR3eVloaWxZRWNEbWJMMnNUUmVWejJCMytaUS9NS21KTnN0MWQvSDR0c3M2L01jYncxbzRwUEJoTGNvMW1QK3JFMDI1d3ZFdVV6bHVvbUJiT2ZCVm9UWk9VbDBjVDJsemhQcnJJMDZjNjNxSHpZMTVMZ3dxTWg5Z2NDZVB5Y1JhNGx3elpyTEJURk1reGJWMzQ5OEhyMGpoWEdPcU85eC9OQ1daZlZ1aDZ1dVJ6bEZJbWwxRkt5ZUNySGVRUTJJenhPcm5MWXIvb2xVQVM3aUR3MCtHRnZoMDBZckdrSUYvNHJORndhYkxkeUJSQkZ3NTBSdXpiOEdxWjh5SHpGM1RuTThZK3kvdWxQZjBiS2Q5Lzk3T2MvZi9mNzMvOGVPenE4WTR0ZVZ2cmlCbDRubEJoL3hPV0xkNWo0L1R2OFVqR2V5ekJqL1hBeGF5K0wzd2Rnd3p2UjlSWXdhVFpNUUIyZmREbHJsUys2eW1CWTlTQ3JwQWl5RlViR09MTkJDa293c0cvbXJEVlZIV2FGSm0xZGdLV1NsT1d5UldFb1VKdnRXamZHQWZnTEVGTUtOUW1HY1o2clorVTFxbkZ4NUdmVE1XTmtvQWg4d0F4ZlVzUEVkd1BKT0V2SnFQenlhNjRxNTV1MU0ydE1HZjZxckV4VjFDS3FqQmh5NG1xOGdMWDduL3QrMExoQVJobnJacHhGRU8vZS9ZQkxCNjg3di9uMkc3MnhEYkl1R05iRVpVWFI4MGZET3Rubk03cG1ZTzRhS1dXTnI4aFJaV1F2b1FVamo1V3RBbVowVmxtaVdsQXp0Snl5NFRGdlFHdkNJWmc1WUhsTnpPaWtTVWcvc3FZUFh0angvazVXY3pOamFaQlZ0RllWUFI5Qm9LMU9FVG9WaVpCZXZVaHdNYUZvdHVrd0JCb2lhTkR3ekxzSVJHYUtaUzNkR29PcFhQVlA1bkNyTEwzUWF1SGNoU0NFNDVHWVR5bGJ5OWwxNU1tVW5QUWs2WUQveHhvTnR6aFBJejRDY1hPWnV0d3VUQ2lmSU9iTnRGa1ZVeEpQQzJySFFSVzF6MnVtWkhHRkxUMlJqN2VCS2lZcnFyVGJidm5iUjlwVDhUb2ltTC9rTHdmYkdqejcreEh5V0lDUDR4cDlxUjduL3NUZ1hBd1cyb2MyVjRDMzE0ZDVyckJsaVdmTmVMVG1Ec09heWROcDRoMk15TWx3aFdoeHJlYW83NlR1YW5OdVJCOTlVQnMvcXRORTNhcnVNcTJHYWJ4V0pyTVNVNmxpNWhyMjZNay9OY0ptMmhEMllEakpkWlhFZzl6MUNMVm04K1Fqa2JzdVBLVlhWT2VSdmM1NDlqeFVOdFFEc081YjlqY28yZXJ1ZUhyVnVxVWdjUk8wa0NiQVUrQW9hNTZDTlhHZ25LaEtWeEo3SFdOcGZXR3Q2RldBa1VJSmpDdkVqdjlmYkRGbWMrN0FjM25YSGJCa2IzU29NbDhWNFA1Wml6QXZrVm9IeklTZmZjV1NBY1pNNk5Id0xTQmNUdmlMUU5yYWNSOWZVVjFqTEhmWnMxb1BZY0JkTUtOOGpPQVBxMkdONHpEbUxVMG9Za052QUxIbThsUDJ5Qmg4SmZGRkR1a1JtaVoxTzdvUjRnMVNmc0kyM3orTUthNHJnaU42cXFDSlpYTk1FYm1INUtBK3FsalFpYzROd0RkMEtLM2RvNVdWREI3RWFHQ0UrSUt3R29hNFRSSzRFa2RuQVY0QTRKTEN0Lzl4SlVualMwcFNuRTQxREFIU3hBS1RSOEV1ZTRXUmxYc0Q1SG9Xa3dEUHpWbE5KaDZrUVFxY0JlQ1dBbU5FalFFa05wTkRLY1VrcjZ6bjN2cFhnTXVBMkxZbUFZVFZXMk5nM2t3RHpLOEczbTFuRUFKcFFRQStVbHdqdktwTklVZHBUbllJanh0MW53aXpnRXNXcENDbm94MmZpK1FBY2RNL0R6ZkxSYlRFTVNPMk5GaUFtczc5empBMDE4SmdXVi9SVVhBa3IzbGo5S0RjUTJBYTJZWXdMUW1YMWNEejdveGtENElIZjJYdEFyczE4K1QvenZGeG9Wenp3eUh2b1FmR0lZUGppaUdxNWdMdVpDa1FScUxKYWJNWStUVHpKck9EUVJyS1FVejZXR3hnWlRJbWo4Q2tuWldiRG9taGQwcmlQU3RsZGtoWnd6bThjN1pQQ3ZhSjBzb3BDZTRFeVd1S2ZhSmRrNHh3eThwaGluTUs0SWZjVjVST04zRFd6aWhrM3NBcEFDSWQyb0hGRHUyMjlScjljbWh5eGpNZnMrcStBMEJjVFVBYk0vWFlyZUdmQnNQZkJkSk9EN3MxTkdnUnJieXg2Y2RRQXU4RHdhQkpLWE1QQlVUaXhRRkEzbU10YzY0bWNwSGkwOFJLZ0lZMXRPZWUxWmd5K01pT2Y4OWVkZ0k4c3RsbVpMd0dHS0c1N2xBcFVmTEUwMkRzdWJtWnFHYU5uVUVYWmlmTWwyQzFlRTVSeU1NR2FGQ2JGVHR3NCtKUE1LWS96akdFL0xDcDN1L25mSE5HZzNaeGlNZnVIdzBYa0tLWXZZQmVPQkg2aXVTOFhKeDFZZFJRcEtwZVdDRzVqVmpjT0dxdU1XM1laSXF5cjVNRmtBMWlETjFucm1VbUpjTzU0WUZGdzRBa3AxaHVqaXVkMFdpTWxzZUtWZ0tHZFR0S0dyWXlqNTdaU3prT0xaaFZodjJkSWtaaTk0MU1Yb2tTTkJPSGRtQUhoenlGd1I3YW1TbldScC8zaTJ5N1hxdmMrQ01KbjVJcE9KekJoTGp1UEhXSEFqa2pxNGJKcklwMlpzV3V5TW9FdXBkSmFEN3pUQUt3emxXTHkxdHlpeGZGQk9hZFFxRWFrTzVXTnVDaDAxNWgwckNxMTJJUGp6Y2RtcUFONVpKazRveDZuWGZCS09XdmUvT2haV1Q5eGlnWlBqa1VnMTZrb3dZK1NoV1F1ZGJzSUxNeXhkUGxqTWJLMmlkUzFyUFBYUzdkNmhNTTJ3cEluMGR0Z2FaRGp5aElhOFFvcWhDd21vY05hT2greXNkWmNDVVdhRHIzYWI1ckVCVzVnMTBNQnJJOG5HUThZeWJ1dGpCSVFlSW05bHgybG1EbmR4TnJFZ0JuMnc5a2ozcHFUT0dvRTVNUmxzd0NBMFFUUzJ4bUIwMmdZWm80WlEvdGpNVUEyakxoQVZHTEJ2RUNyREdHcDBPbVlxWmdneWRuOU5pdDhSc2IzMzZMblJ1K3dhRWF0TXRIRkUwcm81NDd3Mm9WbVY5dHhXNFJ2d29BejNyUGx6dE1maGVvYm9lWXRST1dpenpSVjNDVnJhRjdhQ1Vwc0lwM0ZvQk5nSGU5clQ0WFdQOFFHR2FXS1k4SS84MFZOMmhUdnNsRE1CekhLdEZnWnEyNUpqUHNlZnhaU2RGTm8rSHE2MElaNWpoVFUyMEJBZjUzWDVJaWlweERPT1RxQTZQaGEyUzRubmlWVk1uMVNvQzdmMzFWQXdMbW9PZnVIeThTNnBjV2lxdkN1K0ZPaWluRHNTWjBxeWJnWVdva0VLTUhBOGlrUkkrakVoNHAwMUJaMUxsc1ZTK3FaQXpWT2t4dUhJeUdjckJQZmEySEk0dVhyRkFMOFg0MEZ4bHhwWkZLOGhGUGYrYmVKZHJ0RmNBeXFnbDRlSmZiMTFiSnMrWlRsczRQajNWcTErMlJyUEJoOTcrTHdlZ3g2UmhhMHhUU2g1S2ptaG5qU1NoY3QydjM3MDh3cDVDM2JaWTIzQVhIWEdjSmVHaHhNc1lKMmpvcWREd3ZDczJGWDRkZS9CcDY2bmtJRE9XTU9aVFkwUm9PcTZQdGtkd05UN2JpVm4rZGRQQkgwamtaVFN6QnpqanhjNEYyc215TDgyWDhvUUJsWjdxSEJtbG8wdUFZRmJscnpEU0FvWDFVekdEcXVDeTJSdEZXTnFQekRnaDQ4YW5NQjhhaDNST01welBnVlBIVTRIVE5teklyZDJBSFR3RU5tb1o3MzZJYU5oTm5JYXJRRG80cGtMbU1CdXlaaWJ2dFpOYktPSEdHMWtPQlExbWthM0FCeWNqRVRBT0tJaEVnVzlic3VTVHcwQUM4c2NHZHVBa3lON0ZsQUxMS0lrV0tTV1ZxbEpXZWlaMkYwcm5SNWlHc2k3OThJTUhVK0JsZjhhZ2h4d1J4ZWRzV1djeXBLeHhmOU1mV0g2OEI4SytEL2ZHUGYwQklUVlZCQXdCR1ErRTVIRXBzOC9CdU1UK1k1cWNFK0cwRS9pS29kbmRPTHh0a0R6ZE5MVTlwN0g4RW1DbXNhS0ptZmhLTEIzckZ1U1UrRDI4L0FkQ0thSlVHTGljeWErbUd1UVFZM0lDUk1EMDV4R3J1WWk1aVdmbzRvVkh6WW1sS2tBTG9oZG1EbS93UWtKeS82Y3NQQVNqTzV2UzBoUUJEWEFSNDN4K3ZJNlhSeTBHVVhaWHdoQUVJY3pkYVBHNlFXZVRvWlN1eHNZQnlBeE1xTjRGeEMzbG9nWUZDN1BIL0xLbmc2Rkw1ek10QmVoNWFmVDZqUThmdS84RUhpWW9lL1BsaWljMGEreGdNQWNaelRjUXdxNWkyenVJdEZyQVlRekVOdE9GdTRxdzkxTXl0VENEL0QyRndkSHBjSUhnaGZUeUlXTG5tV3RtMTJxa281NnAvdkVUSFZjdkxoRXZMTzlGSDdQNjlQcGQ1N2dlNy9vSFpRekJ1cElkWG9QVlphekdqaTdtdmtaR3B2NmlDWEQ1RnJtSGtMdEthY0JqT053eWVnSjRGdlRBOWRzWHM1L1I5dW92UjM5OEFCZnZROHVpMFBvNG1nQ3hUcmxseldlY3AzcFZtMGxNa21Gd2hEYTFYNkk1c3NtY2ZUK1FzTXJWYnNyODFzb0lTalBRSkVGVW9nYkgxYWVKb0FtT2xTSytKOXI1Rk5WUVplMi9uSGV4aXpaNEhtTXhlQ1pqZEZpZi82THlMa2RzODVkWjRESk1CenFvY1NtQXNmd3pOQ085OVZxS29jdzBhYnhNTGRnQ05TZXNUSEtNbUJkcXdlVHE2YkVGeGxUQTFPWjBPQWo0YjRVNWFZZk4xYjdlSllrcmhYazBXSmNackFEQjRBWUJQQUw3Ly9pLzQ4emFJU3NDTlhDZzE2VHhOS0FBZkNOVGRoNThNZklXWEoxWEhqN2psWDZoNXovZUM0Y3hhbzhGUVpXUWY4UUVsUTRHamdEcGt4UENrNjVMMllmcklQNWxQeE9OSWRQenlBbTdEaHptYTJBNTdpanp0akFOV2d4TEFlcE5tQkhJaW15VEpxNld1RDM3VGh6OXJzMCtISXZGTDN6aC95aEx3ME5QWkU2ZFpYLzRCVUp1N2ZIMENvSnJSbzJSZWZHZ3dVVzgzZ1NRVFA4ajJ4SjNKR1lIYjBIcUYzSU0zVGlEZVVhYlA4ekprZFpRa3NmVy83djRwdnJaMEZrWThTY25OZUdqWnprQ3M2RjB2Z2FOdkFzME9tWldOeVJrbFU3L3pZdXdqSURlSG5OdVl5UElEd2RpZ3lLRVNlWDNiUVdEdjZZekh6aUVjY1YycE01cyt0WkR6QXpxS24zYi9VY00rSVpuOWNNNjZGNVMyTWtpcm5kd1o2WS84a1V4LzR3ZmxIZ0p6Sk8wR1lJMkJvenNqL2V1QzlGZldYby9kSk03aGZ4WjhYS2k2ZEhuRjh5OXo4RVhzNGVjU3FxUGQxOGRNQjJWNGNaZ015T1E1SFBlMHRhSjJNOVVZRE5WUzBCaUVwbXBNZ0tIMEJwa3V2UVhXN01CS2g1eDFCMW9LRXBXclByT1NmekZxbWNHRG9UVUM2QTMySXRQSFVaRWVacnBKZ1F3SjMvR3BUSTBOSVVpTk1LSVdDSHVZWW9jRUhuSmZVVHJkd0ZtTjhYQUhUZ0ZRZE5lWXNUZ1pQUDlnV005QXVKMTdhL3ltTzBhOHp0ZWRxZ2dPRFR3cGRtZ3lyNVQ2UXo1ZmZJRjNiLy9oSC80QklXenp3R003aDkwZHNMT1U0aTNmMkRmeVpRZzB0Zld2UHhOZldkdzY4Z3ZrWS8rb3BQRkVpNEdzM0k5dzhMTm1LTWVQWnZFd1FWWENHdFJzQzdBekdmMVF6RldEbzlQdXNBVVBJSE9iN0NGazVWeWdRZWhFT21wZ0t3RmVEdGpxOCsrV1hsb05RUmF2MXdNVlJ4Wk9KSm9BZW9GTDhyekM2b3JoMWNaWEF2eEg0L0E2ajBMVk52ZjlmT2FaUHhlYktXdWxMUWVwSmJ0a2Z0cmcyZkF1MnF1dDV4aVFhTHhndGFCUkdIaU0zRk5YeldSb0NSRk1aaCtLU2Y2WnllaHpWczRyblBxOXRqc21aMHpQNW5aTVQzM0QxM1E5T2pSSkRiRitYRUlKRHJKUjNqVlZiK2ZyOFJVUmV1akV5WktQdS9YWXkzdlIvdDYvWDVBc1U2VExZVkVmaUNJZFI4RVdqSWhEbjVyRUIrbG5vdlpaWG1SMjJRZFZsT21KWlFKbUo5UC9PWnJLdnlHdWcvaUE3dlZTOC9BVE40ZUhrSldmUmJPYjdBeG0zRWt3TzduWEpzMnVIRXc5VHRTbkJwZEhqak5qOTZqSHp2dEVEam12TVcwNFplTU5pRXRCOGJCV2owL3pUWXIraU1mamtVRHBLUzUvUHFUY3pEdm1WN1I2UGI3VkdtMEZwUDllYXRiZzZFWmlSdGFERnBPS09QY1BsWCtjdzRQaHNZTFg5YThyYzZKVDF0ajk2ODlyK2pWQUtYbjZhL0VFMG1saEtOR3dxY01iLzhMZTFPRlhnYkY1a3dWZUNaaGZ5UjFSZ3JOV0RYK1hkVzJQYTFQT0tQNUhVdmJ5U0ViWTNxaksyTG1OYVNsSFdhWjhGdnpOWEM4ZUQxWVFiK3l5am5yM2ZKOUFZbGNHSmNYVkhvQjlwR0VPMjZDQnRCM0g2ZUcvQUtEdFppbVdhQzQzY2t3S3FPY21oaTFNOFVrb3RUREh2eDA5ZUorRzRzZUpCSW1wOFNHUlhpQUs0QmZKOGZJUk10YkRmem1BRHpvcWI1cU1Nem8xbkdLR3FwWXF0ZEp2UTlMSlllVEVqZHdlZW9UUWRHd0FUaVZiNzlZN1JPYmFXR3U5ZjNXbGNaQjhhcWdvRVJwczVUWkljbkRuUzBkQ0NZUmlpQmg4UkRkbEc4cEJwS1llT1B4YlNnb3laSDRIbDFuS0dScTFGZ0pweHRqTUhURHZGSm03VDBIVHRGQ0w4azFOYk5GclBlMm1TeDJrVGpFRmlNMnZGZHBoWEJOS1YvS2dPS2p6d3hqZHltRmVpc08xTWhaMm5RYXl2UGF6b2xuTUZDK2ZPUXZ6WnZRQWp0RjJkOE5Rczl0SFEvY1NLR3B4T3N2UStnUjdhR2Vzdnl0QWdqM3hRYitMWVhMVTcyUXlpVjNuSjRJUDlwd242TVY1Y2V4TktVYno3dEVVV3dOZ3BiQkQxbHVRL29wS1BKVzZZMm1udU02QzB5RkxjMjB5WnU2NFZRMUpMaWFPTjMwc1BwS0sya1NhSEk2RHFzY08zZU1WdFFZT3hoZFExbDZUTjBGV2tsTUFLOVI2N1MrT1dTSjErcDk3S0pzQWRkYU1XTTB4THdSTmMvVEgrN3BZQ1lYY3k4MjkrSFowV2htRXpBUFBNcnhMVVFscnFUMUZXeCtaSUlxL2I3MlhQVnppaUJiRFRTME80ZExzQnRaSG9SbXgxd0pwUVlLTGhUVHh6NlJhS1prT1h5UjZUZFFjdkVUSkgwa0tZTUt6eDc1MkY2eXovalVEL0Y0bHp4SCtDUTlNd3pmNjZ5NERIemNvdVhldER3RjBnTUo0UFlDdkFQM1RQLzBUQkgvODR4L3hoMEh4Z1FBQWZqMkE1dVVEdlk0Q1E0SXZmc1NmZktuNWFNOW8vUTBZL3VsM1Bxb2dvbm80aElsOGhKTXhMOXNTanM0eWpGVXRnQXEyT0RXWmF3eWxzSlJ0YUprQkJHclNZMTQwWUc3akhocHlISFZOSWpPVVdIb3pBTVlJSmM0aHpOVThuWlVHRG1WaWtvTm56YmdiNlJpNSszZjdFZi8yUTdXV2hhR3ZDZjMrT1BwWkQyNjUzNzJ1RllPNEtPdHV3dXVnaHN1MURWZGdvaFFrbnZGdWFQNEk1UEJCUGs0QlVCdk80NnF1RWU2TXVLMXYrL0NlZVczSXVoSmp0UE03STJueU85NlpOcDBFejdLTUlyME4zMlIyL2JHR1JuN1E4TTBwNklhVjVtTFhoYzB4VDBzbTZrd2tRd0dWOVoySUFzUWE0bUZXUC9DUnJXNkhqT1p6THVFUjBFMmI1UkliQTlaWlZ3ZkI4dzh1TVZiMTJzOXBMbkl2bEhTWCtrbTV0NlpiNEZNcTNNeis2eEw3TWg0WmtEdmZWczJDSFRRbGh0WTRkR1JFN2lGbjdRRGlwdCtaWXdHeWF1Sm1CUTJldDlxa21iTHJiZHV5Y3FpczdETUtuRk5vT0hzK250UkRUbjJpakdmcSt0SGRYemo3VkFwbk5QR01YaDVzK0JZVUg5bFczeDZOWnAzOU1XcC83Qkx6SnArQ3dwY3I1MkhGc0N3UFRZa3BXQXdPVURObGVNTzd4b3lBaDF0cUozNEtwZWJneGNIVHBVMHBUNmxhYmIwd0hPOTIzUlZ3NVBGTzdwLys5S2QvL01kL3hQdTUrS2VDc2Z2LzlhOS9EVnRzQTZjNThuVDVjR3NJeE5DSVNsTTlnK1Q1YmpDL1A4S2ZmSE01UGVXY1BmT3F0U0xiTUZQK09uajlKbTZiajRjN2kwWkloYUpQVXRnTWdMQjZaQmtrdHNhZ1RiMkxMVGlsWUdWQmp5WTRpYkhkMTBzQmZQOGZwMHhXVU52VDA5WHJSZjd1aUY0TTFHblcrd3FwQmNZeWFHdDg0ZWRsdWtndDJoclBaWHhtRUcySkdyYmVHZ01ubWpIUWpCaXFlU2pRaGxOVnQ3SDd4emoxWE1HTGRBd2FiZk9tYmJ5SEF0bHIzdFpybUZsbUFJVFZRMVBFSURYTXhNUXRKVU5PbEp1SENSckdVSXh0elRTZ1lZaDVWZXZIMHcxTlBRemFVRnQ1cHh1TVUzVzV6QjBrNE1ta0NBOXFkVHRXcVVKelU1NjdCODlJeGNzdHM0d05odjg2VmgvMExYQkpOakZBVVlsVkk1NU4rSVF5WHZIZ1VQbGw4Y2FJSEpvd3NadkI0YmpET1dkSmZKbnVZUEgvcWJVQ1dPcTIybzFwVVdRMmdiMnNUSkRpNUpWbHhpWUdleWl0TEx2ejJjWEpKTFpESXpWMG56T21FaGloeHBoMGxoZ3BtMTZhbG1KREoyWnV3MGNIYXhSTlRlSTJiNGFBUFh2S0dzNWhwaWN2ZkJkTlBpZDk0TlBRS2M4eldpWmI5NWxsOGhYUWFsQktJekUwMDBBYklwM1M2NU8rUGMzdlFJbFN1dDlsWXRxdWFUeGZJVmJQVDNVN25zckdHNUYybktDVTQ4S1FQaG5zOUxTUis5M3Zmb2RYQXRqZFladVgyeitKWmFaTjVERFdBRy81Y3hkWi85YytFcERmT01mM1NuNThWL3ZNc2NtVTUwaTZiaTlucGV2V2RScXMyRjhYclQ4RDZxMENqZ0d2d25ROEtBWjhyaEdaT3J6c1RSb29Pay9kMkpBN0NxQTJaUE14Q3lRWVZUSnZMOU5Ka0xrcEk2NVRCYUJ6Vm1CZ0ZZRVhiMHB2dlpUYS9ldTdRQkQ0MjJQQVhJUjV1cmhCTWphWW1yR2ZpZ21ZRzYwTkZURnBBTjdZb0pQODBHclVrajVOaitIT3lFb2g5WFFvSkt2Uno3TWpoNkVNbVhpbldLQjEwRkNhRVNvcG1ScGoxUGw1NE9ZcERsSnpQWkM3T0ZNY1RaQll6cTh3VnFZWVdBM1JPdkhya3JQZVlHcTVDTVlHazdRRFg1SHV1c1pKd0N2ajFFcXNYZi9ZL2M5MEp1aWw3V1JHdm9jR0orUEY3VEl6SGZqbHg4ek9vek0ybUtweGF6ZU1qYS9nc2dvT0tiOE43MDNHZEI5eHMwL3hFU1kvWGNwUFhkNkgrdU54R0FlTExJSGpnUitqcjVQeVI0OHA5aXd3Q3UxVDcySlpIVXM5K2h3ZFBKRlMydXhISDgyclJNOXVwV2NCd01GSUlMS0l4V2d1aFhiUFkwcTZLUVdNbGNhcXpieUdqcG9YODJiVXNnYU9ocTVxQjIxZVBQeDFaanNXbUdBV1dhRkh5eG93aElQSkZxSzZtbWZSMEdXM3FDWUNLWDJDWFdsTnlrd2FLRkVhOUpvQ1VlRW1hMFBsbWpTNDQ1c0FzbVNNRTZSR1BOYWErMC9tOW1yNWVSYSt0NkxwWis4MUI1RUxxUGozMzMrUFhSeDYvRVVnN083UThESWc5M1dRWVY3bjRwSlFVM3J4UDJKUy9Qa2ZmVFRCS1FncmhYOFhDSUNYaDVxczVvaGVPaWozRGhtMEZQTi9IY0JQVzNoSXN3a25vNGlaRkJqdklMTVFkWnZ6OERaSnJFSXVCRUxwWUN4ZWlVbmFDcUJlOEkxMyttc1cvaVlIdjhVL1hodmN2bUxERy8vK0YzK1JnV3RGWHdRQ2RtMENyUFZ5SFdLR3hyeVpVZ25UeEc0R25qU1pKTTBiSUpwTlBQb0V4NkZJOXpBeFRtRCtIQTZweWdoaXdHZGUvcDRGT2RabnlJSUhVcm5wb0FxYVlSTTA1NHdlUXlrdzloU05rWU9pZXg5aVhQbTgrTUVFcVF3K21yVGNVbDFJUEVoU3R1N1R6T0FGV3BrTUljWUJkLzlEekZCTnF2NDZTNlZRWWNEQmZiTnNCMDV5eU13SGdUM2R6QTdrRE40aE0zZkF4YlFVODYrQW1sQ3JQdVNmNHZiS2pIOEZqUTdxOWY2alMycXIxNWF1UlRWTDArVFVEbVdpeUdTY2tucVRBTS9pVkFyYng2SG1vT0diWk1xTVBVV21BNE52ak1sTU1XNzZITnJuR1NnbCs5UW5iL05XMHE0eDh3RFN4UGdCMk1xYVZ4aUlwWWM0OWNrTFcrYWhOUXJkOWVrc25CTVpPeVFndDRaTjdrQStqY2ZRalAwYjQ2RkJtM1JQdE5KQXMxdHBVRTg4L0pUV0FqRElVdTkwQXljS2lFZnZsZ0xzNHNEalY0SC8vZC8vL1ovLytaK0I5ZjJPMU9UdXNYYUphNHM0UXRqb285VUdVZy9vNHNtZG1uaW1YQnUwVitKdlA5TFhyVVlkZC9XSjE1RkM2cUh4RGl3ZTFuVWpVdWxLTWNhSkFZUGVpUTFZbVVCWVN1TGEvZXZiL3lZSnVQc2ZMd3pNWjJIQWVObmdIVDgwR1VWVmJucG9WYWttQlVRcUVVd0RHcVptWjV4MWxKbTByTTFyM3M1N2lrSktiTDNFSm5FeXh0T0lxUUtEeE4xS204ZDU0cTRxanRMd0Zld1VGZWtVZ2RhM29YSk5HckNPZVM1RWFtaVM0U2tRS0dLZFBwTklsME9DRkl0UGpaazdVcnltZUJhanhpYmJwd2FEYzBMUCtiYTZQTWZCZ09mNHN2dVhZUGE4N1BkWlpuVGM3dk9td09rNzJNMHo4WFc4TzV1eFNXUGFNQ3R4eUNDak52eFFrRzR5Yk15SEd2N1gxT2VpQWVkd3JHcTloY1dydW43cWJvSnJtRDltQW94VnROVU92TTRSV202MnNuOHkvSFpaTlpzQTdJeElhUkMxV01xbWIwT0xaYktuaTVjc2M2VnNqTW5VVzZOb003UXlRZm80eTRsdlJpSFlOV1lld0hFS2t6dXdsVU92TUJCTEQzSHFreGUyVENCSk0zSndTTUNrUVFweTBzVHkzRlBNN01EVDJjZkFvUWJhMEo3aVd4UkRDM2JnRklmcUthZWVtZVlkUVNId0FIcXVBa0NUczNEMm5yR1JtZ3Y3T3V6NDhldS9pT0tOLzkvODVqY0FlbFVnZ1RhRXd1am4vcEE3UmcrSzVHc0FGQ0UrYzJjS0Q0WFIrNzVDY09ZUFZLLzlhS3FmcXIvOUhRQXNVODdwQXhOUXFKRVltc2xjWUlYVXQxd01mZWFjSlI4bG12VHc3RlBzWlNhY0RIemhoOS84WjBOY3ZjM3RMQWFYQlJoOFJRd3lYU0w0NU9peUR2eTRoMmN0U0RCam9ZSWN4anN6QW5YSXdrZE5JelZzdlRVR05qZG9JUXpWamxNalpGNFlQUy9uV1MySE90d2hIQ0h3MmFRM1ExR2M0anZlTW9uZEd5RFJPSUd4bkRWczRpU3RUMkNzeEdkOVRnUmxhM1l3YjcwWmcxZkV4L1E5RVo3anRPaWNlWTRMVUd5ODkzK0p6SFBVU0ErUE16cDZCekxMZUFkMzZUdS81NXFCT0xGeXdUUnlaMXFpOVR2WTYzbUZzYzhyNHYvaW12M3NOT2E2bUx5ZThjQlFqdzNBbHgrVENkTE5WanVJc3pBOGJlSlp3R3drOGxSU1BFU1dWODRyY3pNQ3JxRkZjMmhsaWtWS2hsNmhKSTBWc3NiT1loeHR2SWNXQ0tBM2tFUDJMV3FUMUJpL0dkVkVUZTloSzZPSld5Vk5mR2RpWHNDZWQzemFRcU9tcWZlUTNReG1CbTkzZlVZZjhJT2JzNkN4cklFMlZDVW03ZEI0Q3d3a1NIMHlsZ2w0V0hyY2E4YXp2S1AxU3dJTVhwVWxWMDdkQ1Z2VXc5b1Z2dGZmLy9uREgvN3dxMS85NnJ2dnZnUFpCTjRUU2w5OWZ3M0FUV1J0SXhGTnJCVFVBckRLT2lOcVMvamlhd0M2bnAwK0UzdjVCS0I1ZW8zSXo1ZERBRHhGV01FNlYrNlBEQmFxZnhlQlR2aURUbHlHN0VIcXA3ekhNYmNGYmNOUzZxcytLSWJMbW5OaDZ2bURQRGFmUEphdy9YenpEZjd0YVB3QktCelFlL1RmZnZzTi92b1RzdXJRcGViN3Evd2VHUDd3Rm1iaW8vL1lIME9UN2JKdUdiaS9pRk5WNlZvQlhLYUlIS29WeVdlZ2RkU1VrWmsvSEpZdjM2bXZQd2RSNHB5S2grREdRQTAwSDQ0V1FGRkYySlBnS3VBSGRkRjNsUWZNQmdVUzJjcEl5cUVTcHpxdXlTTkZpV1VpV1BkL1RIUDV3UlF6T3NETTQrekcxaVJwYkFCWjRqM2RQa2NsY3AxdU1GSk96aVZua1UxY0tWb0dYVi9zNS9MS2IvVEh4TFdjK0JTdGZzWmRDdmZNNlVQM09qbjZvQ0JNMXdPaVNkZHBodG5iOGw2aW5PaDZxdVpRRnlFT08zK1kyMDlYK24wa2ZpN3kyZlNEYzMyS1hnVFAwL2ZvaTZhZktPdXovajg5eGxvOVhjYlhDNERpajJ0WG43TkhYZnZyM0syNzhMekRia3o1Vk1ibGNSVVB4VGdtZE11TWp4eDdEV1lBakYzY0pDOHVyUVlOaitSOHNMcWtqNGQ4SHFxZWp4QTlGS1lhOXBKY203T2tPU3FUUE1wU01HYXNtNTMzdkE0WjZESE1UMHc3cU9QRHppb2Y2Z2EyT0tOQmV0b0JZbEl5YlZocmUrUkhldDZNM0RvNSs2WFNyaHdONi9yY0owM1hDOTdLdTBUM0FmUzFMcldYMk1PMWdLcFhseFFXQ2ovQ0tBc1pPU1BkU0NvK2Vtemt0Ty9IbTduWSt2L2xMMy9CWHdUQ1ZsRGkyaGhDT2ZidUlKbFc3VkpPL2VtZm92bDJNa0E5cVhLRFdXcStuWStCcG1aMHRzVEZzV2FUTzVoNWY3MWIvckZMMUlFVjRXcFhZMWwxd0xXV1hDZ2QwTnpXamQraWRmVjEyRHdkWXJMbnQzRXdac2Z0UHF6bUwxTGdLemZ2bU1QOWRQMWVCK2Zoa0d0YXIwcm9FNTZzcVNvVWowb0JPQ2txNTE1Zlp3SzNhbnlGeGxOU2gxWjRuR1o4SG9RaDN1YUhBOTdteDE1ZnlwLzk3THRSQWt5L2VQL0REM3p2SDFkUGZVdTZDcXAxMENMQkMvOU1zSllMUjdGT09LaXFtY2R5YlJxYnRRL0taZEttUnczMXVNQ1FXc25RdmRmdm4rRFhVbkIwdFo1d3dJc1dGSW1YVzVnZUtWK2pKbVF4aGZjSFlJakpjQitHRnpBMW8yelJJektJMnR1RFFRclZKUi9ER3BPYm9DUWxRMVk1SXNMSnFpbExEaUNZYU5zNkFGRGkzVE92UktXdEdpb1A3SXdvemw2SDBIZ1BBUktQcVlmOUlTU0JaWmxMZGJSdDY0eTE1NFdkdVpESDBFdVNKQ1M4VUVQbU9iVHZYMktkd1JHdVU0VnIzWWtGdUJnMG5QUFdnUE55amJsNE9EOHVnMnVYRHNPNUJIYW9GRWJtOVVOTGp1dHlMWjRqTkJVdzY2bVQ2cW1rcUQ2dmMySFFlS0hDYTZFdUtZNTBoZFJFeGp1UTZ6cUVPc0F4MVR6WW1lVjZ4M3FhTjBDaU1RQWVEWWNWNjVydFBlcjBpSUpNbWFKeHE1QUZHUVhKaDBJNTJTOFVrVFhLNExUYU9Hbjk1OVJldzhqdU1EVjJOaWoxc082WmM1YWRSelVuOHBhTEMrOVdzd2RjWkI3Q0xtT1pkZFZEeG9lK2JGV21TRVZsVlNldk9selo5UXlDSklOaDRFUEVKY2tWbXM2VklvM2NnRDN2OE1jajdiWE5aTEk0THM0Rk5LYW9CK1U1eUx6aEZsZWpvemJVS3JtUzVWK3pTTC9LbS9tYVdWbUlWajNzSFZlUmRrc2d6VGlLZVY4ZlZwaDBobkVyY3N4VmZHRjBkZlQxMEhmeFdRWEk1U1A3VmN6SjBJZHB3RFdjU3RlVDBUU0VRSDlIVU91Rzg5WVhVSXdPdjQ1VksrQ0RTV2VRR0dyU0tjRGk4RDNOS2dxaGNXV1diRW91dDV4ZlMzcWg1eUNMQndlMXJqd2FUbzF1dVE1VWpDdEJaYXM4Q1lSbG1DbU45K0VJRE50NXBFaHNlbTdTMWdGY1YydldSTUdYL0VkOG1VM01VdW1EUFUrUllMekhHOGZCQUg1NE9QZ0ZBTzMzOEU4OFFZbjJMLy95TC8vNnIvK0tyU0MrRkFRQkdzamh5YmVudWFQRWY3RG5Eckgya0JUZzk0RHhQTUIvcVFHdkgvVEV4YStPRTdMd0w3bDN4WUMvZGNEM2pqbVRxcWxyWHZ0bVRJUHZDVkpmNjYyZXB2eVhwb3FDQndBTjBiQVo1dU1KM0dvNGpsMjQ5U05kUGxPdmgxK0VBT0RPaXdXaEg5OS94WGUzdjhBZnhoeC9CVWhlbkdaVVBNeVJveVBSL0xObWpkZ3pXbHFENGtqU3JSVFZqK010TGF2aFJHTWRvR1ZoN0hFanU5TEpZZmdVNDI2U3VPWHYrSEk2VFF4Qzg5WVMxb2play93Q0Y0Rkk5TGdzY0g1eEVlQ2xJVFJhd2JHT05heGpvejNKK2NNYTlXQ25VaGtwcE9IMGNha1BBQmtzTHRxd0dpWXRDQjFtTWttQUlXNjRyUytlSll6ckVaVHNjUkFzRnhlU2M2K3phSHFJSWVTWFdHc2FwcXQ1U01INjBWSHpqeXJ5SUpBbGc1bk80YXdVUHBxRHBlS2YrTllBWHJXTTZqV0xlMGtxY2VRNkpEZjFrcmxQMHRqZ0tMT3RvMGV3bTFpMmgzYm1oVm5HcXZob0RUd1JUV3B3OHZlaVVuRVpYRWRIVzdsV2YreXVmaUdwU2xhVTVyZ1dTcEM5TS9yc1NQWGR4NklUMkE5NVowNTVnM3RGVE0wNmxBY3pYZmxud2NORUR5RjRIYU9EWFBjWXlWUmw5WDFCeno1VjZ6eTJUSm5jK1dEK2M3QThIaXlVSCtIdnFwYUcvVnVuK2VxVzYzWG5mZVZuQm4zMHRCOXhQRmJ6eVg0eDh3NnptSVd1bGZET3BSZWllYkRRSUNFWkRIdmlzanlqcWRmYWJFL2ZOUUZ0UGRGNGt1WFlwQUhuS01GZ0pCNDlnM002NHIwcG1uM1RaS2haNVRCbFJ3ZGVDRngrWGp6cWRXa01ySndtQ0tQMFR5eEpWdUlrazNkNjh2cVZVNVZTUFIrWnZPQjhvNFREUVY3dnd2Wi9xQUdoSmpzeXJ2blphby91NXMwS3c2Tm1KM1YrZElqb2VUbngvMzFSS1BRcWNVTmVPWFdMQkRhYlkrbXdhOGUvQ0laUEEvQ3hBTGY0K0plLzZwMXFBTWpvWC9ub0JlVEF1eTAzOWo5K2hmZGV1ZThmYjZTeW1wcXVaRVRLVXE5NWFWczh0MHVGNjJnNEtKNEFjMG8yUXlCLzh0YmZyc2pTN3lhSHBzazBoTjZnNVNhZkdBZXN0bkt4Q2xoRHJQVVY1QkJSL2ZEaEZjc0d4Mm8yd1dqdzlmakw0V3pBT00zWTlHTmVjZmdYSXZBbm9qd1U2YUhCTlBCSkl2RWNQYWFZTkpESmJ0WDh1d3p2VGVFUTFKZFhPdWg1QW95YjNjQm9hZ0VKSEZVbys2YS9DelVmRFRQWGd1TmNWanE2TXc2NUJtbXlWOGk1Q1pvTVF6VzdHWUEzQm1qREYwUFBzbjFxTUh4WG9hYlQ2Yk1EQzlEZHdkUmI0TWFmUHArOXNieHJPektOVklXTmxJMUpnNnY5R3FYQWVBZk5kdVhmbjF5YnBQZ1pQNlJrQ0RpSDhHeERNVWZTQmREaXV1dzdZL0hmRUtpcTEvdFc2dkdnUURZWmhvMXNRK2xGT3JRRDJ6cGt4ZzQyYVJvTU96UDM2elpoM2ZVMDM1UkxzSnRzRE1URlhSYkJoZ2xTbHJ3Y05Hbnl1ejZaMURzcnlhT3R5V1lsQi9zNGFpWVRHOFpReldJRDhNS05TVEx4ZERvWTdqSXd1UFNPdk9lVjBkRG9BZjFha2tKbmZaM1M5RCtLUjYzVE5tZmNRM2F6VmVxVHRISTMrU0RtUVl4UXptaWxnYU1HVHNueWhNZFRHUWJ6QWFFZ0ZyR2VMb3ZNdlo5azJPdmpuZC9mL3ZhMy9tVUE3d2JIQzRDcUJvbXRnVFp6aHlFWVc5UGFjMHF2UENUckhrdk4vVmI1T1lUbzUyMlhmd2VBbGVFRktQb3EwVFB4TU9hWkF6d2VSa21ZSWJCNm9LdWJOZlkzS08wNHJjWkt0NGw0RFhHZUJVeDZ5SmQwL0dZUW0vd05NTVNsb0pPTmM2OEd2ZmhMWDlmUXZLcGt3MTVYMGhvL01ydjRPYkg1NzdNdkFWOHE0V3pvNVBDMDFGejhtQXBrblNabWE3cmhNNCtJMHRuS2hBT1EvQ21mR1N4K01pM0VXVUx2cUFCNkFWa1pGNjFTMytpVllyM25BcU5qdHNBaEFmTUpFbHNHVXMyTVFlT25zT3VUYjdsZW41Tm1YSloxS0xVT09KdmFISVRhaGpxTEhvYmtBTWNwandnU1NYck9DSDBjUEZZQ0V2Y3loM2JndVJ6YW1ZZlFMdDRacHd0NGFDV0F5UjFrMUNsSG1hTUMxanp6VGRhR0QxWkhwZWQ2amxyMjl3OThJTzNoR3BVL014QWd0MmswYkR6dlpmV21MMWRqM2lQQTlDbW9va1R0SldkZFd2VzB0SnpybmljVFBtRFBnSTlVc3pUL01lczg2aVdlVDJjUW1QUmgwbjNlQVczb3cyOUE2VWU5ZmRKWnBPWjFGb1pvSGphZ29Yc29QYWx3NnMzc1FKVzNIckpNdjNPV3pKNTNKaTV5OTNFdVFEVy8yV3dBbXFmV3A3cmNRRkhBR0U4S2U4c0tiL3A2L0srczhVQmFpZU9xenNwcFdrM2tIUEhXOVNlWTA0MEwya1A1Wjdwd3MyMUR6U0lUNTNxNmpEclJvT2xSTDVpMGtvOU5NckV3RDlCbDEvMEp5d3B1K1lEazIvUDRjbEV0dW1hMFFEczl2T2VMaGxjQ2F0QmdRN2hzNjE0R0piTFFJeVFUOVpDaEFmTi9ubVNjM1BYSVUzcXdxMGlJcWpxK0xNbUhGQ2JQZXl1ZFl0aDRSWCtLL3ZJVklGWEFZOFAvZFlSYU5VMHNScHBucHJKcmNhU3JubXRVUnlqN2RMYW5jL2E1UEtQTUpjQTVub0EwbHA0M3JGeTNsMTdYUG1JNDVYQkRBZHI2UTRRUGcvemlUNFc1UEFCVkJlQ21ZakNVajRhSkZVckdtaU5JcTJPdXlaWmVKZkFhdEtBQWh2d3dpOUh4dndZOGFqU1M1RG1Vb2NBSUZRK3NKaG13d1l3c2h4WU5UMnNwOXZsTmZZaEhQWTZpa0l3Q0syUVF5aFZ5OUVWd2xDVUpyRmJUOFNBTVpzU3oreERGb1A3RlBDV09xOHgrQkQ3WWhpWFNwd1FYOXdxTUpaTm9tbHhXZjRZK3k2MkxGR2hEVEdGRzA3VmhJeDAxY0pGaWNHOTFhQWRON0NIQUx0NlpsQ24zcVBtVWtIS2J3elBwR2l3RGczVjRNTEh5VGJDYnY1bHlGTno1dU01ajFnT1p4eWlacGtqRE54bWJMSENkMHJ5blNIK1F2bjgxcFczQVV6WlBoM2g4a3hLUHlkWWtrSDVQZWRIZjZlbGdFbVhZWjVCVm1FbFhvdWhCUDQ5RktaWXAwVU1EODFvQlpZRVVhRDE0eTRUdDh3eGNaeHA2bGdic25GbEhNb3RKZ1F6TkpMaXJFeHJKQkZ3bkRoak1HbFpZaFIzMVdYUEQ5a21RV0xPQTJVbVg3U2pBWFJuU1dBbFpZcyt5ZzJQaUxqTmovYzQ0bEZNRFE0bTZML3I2enJNMis0eFdZODE0RzVSS0VaY2VVWHo1QjEvOXdLOEgvUDczdndmR1ZoQzUzTHQvYzlrU1E0bldYZ09Zd2JwVU9kUjRYcnhZNEp2Si9QQ256UzBOWDB0QXIwTnc3L29Vc3NiOFR3Uyt5ZEtCVVNPN09KNDZ5SFVraUdwUTJoSlhhUnFxYnRlYVZpWVQ0UGpSa2ttZmZRb3dic3lxd2J4MWhBZng0enUrbzIvS2MyRGJoQUI0N1BqeFd5Qm9rcUZYTWE2SG9Hb3pMeUNsUXNCanFFc3podWFMZStpNHdBNWZaamM3UVpXRDllZExTU3R4TkhyTFA0NEFRdjdhSXF5cDVGYnhjaEFzZmhMbFBRZVZzZ2FGSUJBemIxZGNkV0ZzVFdJVk9YTnBJbGxtSlU2QmNOT253SmRsa3NBYXRrVE44bkdrY3ErMnZNQTJ6elBqVTJzSEo4Smtrb2Zkd2d5RmZFS0ViRHU1Y1N2ZTBSTFdIWFpWMXpJK2FlaENESGd0eDF5THIzbmFVSE9iTk1pYUd1bmhEcEJsTWgyU3Q4REF5bGNZaVZPWitEaFI4OGNqejI3eTBVeWJQUXZ3dkFLZXQvRi96ME1jM1Y3MlRtb1JVcGthWTRFMnhPR2IwVkpnQ0pCdVhxS21OQTl3Q2RVWmJqNFkrcjRwOHlab0psTStLdkdRZDYvVEpXUlBnTjNacFNMa2RNL1k5QjVhTEVZbTh2ZDBTUUxuN001NlNMSFBNMUFsclQ5T2x6NnBoemlIeGpKQmo3YVRZaHdxMVZJZWVXbkdJYzlIK0RHOGJ2dVVmdEZMVUZrdFJUTDFybE1IS3g5aEZ5d1N2WDNNQUtEdGZIT3oxU3ZUcFZqbU5jbm9NcnJYS1JFMEQ0bTdtL1JLcWQwUTBySHJXZC9qMEFFT1FkMWxuQUlTbTM3OHE2OWdBUFNPTURhRWVnYzU1NElKU01qUXpPc1EwUE9PenQ5QjVTc05ZSFNROGRVQy9rQU1maytBVDRUWWU0M2phc0J1OURqZG84VnpzL2RUdHZGeUpLZHdOVWttaGtBYTlTMkVZWXZleWJ5bUJsWStBRThIVFdzS2Nkczd2L3dqZ1paUXZkN3BSNDgydnYxVE42NWhtTXp6M1hoRWswbmNFalY4SUN2RVMwaFhpUHE2YUhndDZTZkpJYXZMSE1kU1B6eW1xb0didkJKb3dsRWtRaFZkdzZtbnpDRURrd3pQcGloR0JqUENXK2NDR0lzM2N4eG1yakdBY1V2UFVHb2FQc3FrVVhtcHp5bVUyTktQd3dkbGhvQjVldXBNNmpYYlBLMVV4ZFM4QnN6VWVXUlFKSHM4dkEzSjRFYnNTaUlXT2N1ZlpDbGp4dUh6dVc0dTFWYTUvQTRhaW80Zk1JMFVjODBkRmUza3praWF2UEVPZHJHUDNXSXpEK0ttYWNNN0s4Z3lCSnpENDNSdmFuYkJ6clR5L2laRFZmVjYzNG84SGhUSUpzT3drVzBvdlVpSGRtQmJoOHpZd1NaTmd5SGJkamNjaWJpWmQ5Z3BiTjRjN3FFN3BxWmFEaDRteU56a05aR1NremUySUIxU24wcUxqOERrTWNWa1RpVFNqSWU3bFVMbUJWSVBSbVNDSnNoaEdpYVdDUmkxNWpicGRWbUMyZWRWbG5PbDhkRDZ6RFZPc1gyU1RHeEJlamFCaGtuZU1idmJNK05vbWorVGV6UnpzekQrZ1IyTTY3bEVXWXJpeVFiRCtVcUFrY3lTVWlTejU4dGcvQm9BZmhzWW53TmdONGdvZG9MYU1Ub2RBSXhlR09SdVUzenQvb2VFYjhxV21ETCtiaXIvQktXSm9jZE5VZTZMNkIwTU92V1RqWG5ZYUpxU3BkZmM2aFZ5Vk1NV1V2UklPdjFGWUJNQkQvZDBoTlFVQWdZWVZHMzkxeEN2eVVya3V5WmU3ZUYwcWdranJ0TVBnQ3VqNUoremU4dVRWMG43cVNvR2VjSHQyUVZsOHREWklLdlM1MWpzQ0RHaU1seU1nWVE1VE95b1NQUnV1K2NESTUrOWgxdVNiYWlReUdQSXVSazFOckFNNEVpK0tOQ2QzT0tqMVU3cVRRQWNKL2ZENlBtRHk3SmVzNDNlL0tFOHBzY3E4ZU9jYVVVd3F4RW84MG1WekZmSVlsOUc3WGhiWGxiVlFocStLWGd6Nit6UTd5NjhGNHlYV0I4WThqMXZ2a0liRlozbnJlQkQ2SGc0SURNbHNmUmdkdkxPNnY5NS9yZ2ErL3Jzekw0eXIyajJMRE5LUnk5Z0htQm5NdHF3OG5HQjlmdW03c2owcXZ0WlhMcTN6Tlc2bGVHaHdaU0hkVjN4TlRQMlVZZ3paSUF4cTZueHpPVXRtQ1BaTkJwYUtlRGhCL2xrbGhKenJvYjNpU3l3ajRGREFDWU5NaXFzMEM2NDQ5UDJpTytzY3VwZFk2dGphTStGYkZmZWtabiswVGluUzN4bmVLZTU0K0dERUs3WDJQM3ptODdpSzRST3o3RjNjNDRybWJMMytGUHZQMkFmaUM4Q29RRmdpRFJ0SmlFWTA5VzJFbEdGRkUyTXpiNmV6Um1xeng5R2xIOStoc2wxRndQSDVuUU5kMllYVkxwTWZwSitmQUdHUjRqalFMbnp6ZytzVlZDdHFteVFjOFB0QXdDUFBiUTFBTUxNTFIrK2JzUHlvT0VvNml4QWdJZWEybm5YNHhBOWVWYlFiTXYwMlJUYWVwNFlOdmhpNjg4SjJQZ1NySHhvWFIvREtGRjcvMisvK3c2Zi91RFZIa0xnb2NlUll1aXpEcUNtaDhhb0F3dmdBQUJBQUVsRVFWVHkrUGdPVThBdGUzdUJCMWFSNkRVcG1YbjlLWHJoNTNtQkJEL1lEbzdORC9rdnZ2N3FhNjdqVE1mNjFwLy9MQzNPQVlieVFzK1h2R3ZBZXhLczZwU29BTWNBWmtuSkVXUDk1ajBRNlh3eEtVVUF5VlpKT3RyS1hlTHBIN0p4RlBKekFVTkFmYjFrQnlCZUZRSmpQQzZ5dXZNNFpaSFNNOXIvVEVkcHdyTWdPdkpvbFRnd2hqcW5GZkVzR3JGbjZiekJMSkZPaW0xYWpiRzBDckh2aFEzL29YWUpBRGhsdzIxbHkyRk9kZUhuMzZXb09TS3hhcFdTN3JPZXl4Y0cwbWdLeU9VNnBDWjVZSVdVbU9tWjB0elNRVEpjd2JxRU1FeXJWSzRENTRNTTZ4dEtXVlJ2elFEV3hFSjRpZ1R5ZUtoZmd1eXpOdlBQRHNjVTV5WjQ5ckhTNzNHWWVRWW9BSUxkZkdlZWZUNDBxbm5mekxJTTlTUjJva2t3V2JONFoyVm96MjJ5OUpUWTZRNzVlZEJ1dU1Dd2xoRDRrbU5JeXp0ckcvY041eUErc1ozM3VTQTVraGNlLzhwTzNXRllRS3dWTkhZT01KNVBwV3g2RHhPb1REa2tmOGVvdHJ1b0hXU2JZbU5wMElPQlQ2WVlXNU9DQjFMVFdTQm5rZXJoZ3dac2pZYldtQWV6bEhVYUhRS2ZXTGxpNUZ3TW56QXk1QlNScmRmOU9vdnhMRTFKemZhMGtoT2wzbFhwU296aFVPME1BaUMxd3hOV0pjQlozc2lmSkZKU1lDVjJaVllDOU9ud05NWi9Cd2thN0R2d1hqc0YwbnpKdlNEQzNBR0MwZTVPSWZqSUZpR3NHNzc4Z3lGMi83Lzg1UzhSK3RPZi9vUjNoRkVOeEJoQ2d3YXN4aEEzVGR6bGl1Zk5qKy94VHduQUJCQ2hyNzdHUDZ2Rmt3Y0dJL3cxVjliRyt4OVIvVmJBV2dxNElVc1RvY2RRUFVpRmlzSGZxc2V4a1ZHVU4ycVZXM0NFWUkyWjZwRm1YRDlUaW9nUFNzZUZncEVGR2Irb2RHaXE3QkNZcCswWWVpQ2I0WEVvRW5XMUg1WmZQOG1Ed1pDTklYVDltQkdSQUQyaWFpVW4xRGtEd01xaThXeWRHa0luK3NNNG1Yd1dLNTZ5cmFGRW5IZzFubEhXVE4yWXQwRE9ibXpRTEI5NGhTd3drRU1PZDJ4R3dFT1htbVZrTlBubmlSamxHZU9Wclo4NmdRZHNRUU9wdndtcGhKcnEvdks0MUY5bmFGeldvekFWYWF0VnNDZ2V4TlpFNGk3dUtJMXJTS0JEVjFabzBtWW01blN2NFBUNEpIeFpsaHVuMUNTbUhNVitTRk42TnprNXZLSTU1ZjFVM04rOEhoU3cxN0F6UDlYeGY0anZRMVVmRjdxYi9FVzNsUEVlVjd1dWVkZWpOKytxMVR4UnBwZ1UyRU03NDVRdHBEdk11by9uNDF0aVBkWnQ2ZU5KNU41L1JQWkVwd0FvbXByRVVpYlQ5RzFvdzMyS1l5akpuTVhwdTM4TGFVZ1p6eHoyY2gyTUI5K0tYckNOM2dLek1KNnZ2WjRaWFM2TmFVT2JySVM0NUhaeHlsN0hSNThqZWZSTVpXS0pqd3pJNU9kN2pueFR5RTFQZlg1V1RMMDFJUFg3bjlyNEFlTmJRSGdsQUVGdUJiMXAzRTBRa3BzMUhPbzNFT3BaU255OUVjMlhCL1dXTkY2dWpDemx2dFp6Zit1ZituTFJHcG9mNERYSFZLMk5MMnBVWUFlTmQ3NlU3Z0hjckRGb0lhMHBTQXNBZEI1TktzVUNPMGlBSHZwYWtZd01RMWxSTUp0OGNKcjlacjhZVktMR0FxSjVYbkRHZDJEWDdJeHpGZHA3Q3dBeWV1VHRYNDlMZFpXTUxMNEc0R09Vbm5obThkQ3J5UnpZWUVhNllPZXpzSFJ3aFNiRmFPaW8welBxRkFQcndZamM5ZFpreUdSbUhRVkhjczg2R2NiZHNkLy9ScWlXMXJMaGNUVWZWMm5GaEtVSHdYOEJZMi9qRXR4Q3NMMDY0MDdFVDNQU0FRUDlKUGtpUHZodk16WXIxN01ES2MxbjRwRjgwR2N1c05NYjhERDFKZzB5K2pmSHg2cDJFa3dqeFJ6N1R6d29lWDZpeVdkTWIvVmdlR2ZlUXJ3allIZFFQL3c4ZE9JRWk2L3JLaDAwYi9hZVY2U0c5WGtvemZrSVVXMmxESUkzSUQzS2RKTUNleWdUZDNFeVZpWklEREdHalJFcEgwV2JRT1ErVWNxRXpSd25TcCtqUHFlUVF6S1o0b2tlU09WYTBGTFMzNkdXVW1jVTd4dGkwUkRoQ1RiUU1FbUhES3dScy9WMWRXcks2dS9MR0JkUENvVFI3eUFzRjVSc2phOFhwUGpVMkRaVGdGT1RRL01BeHBtN2s4a3dweFlvVSt3L1E3eVQ4UmtQTzU2cWhEeWZBSEVuMXVaMm1FZy9zNFlsM2dqR1cvc1lZRnVJTnRnNEltMGV3YzlkNU9GV1dRZ1ExSmEvdmt3emxQVmVNMTREL0lnMy9PdGpDYjBlWUZTSjJSL0pGSHgyUEQ3UnVKdll2SUVxYUVPUVlIYlM0b3hhcHBPaGtFa0FQUlpqc1hodTY3czk2c1VucWQyLzNzNzNtL3AwcUluVlk2Z1FPRndYZUttSDMvekFhejVlRjlWVTVONGphRkxZVEE1TlFteThBMW5kOGNmY3V4UnY3K0FtUS9RZ2NlSExwMUNONnhDQTFHWjBqcSszcnVGSzI3UFJZK2dpTlc0bU9VemN4REpKZ2JGQzBGdVQ0STUveUhLS3dZTVlJY2lhOG80OCtxRHVlckxnWTBMOVFEVSswU3U5SGdYOFdQQzArK2YxcnpudSsvSEVGSUkzVTBMN050eVhvdVZZMEFDR1pweGk1Z2hNN25vemQrQWg5eUYwNS9iWDVJL2xOUkxETjVuUFdIT2I2ek02djI1VlIzdzRhanRJNEdHQ1MvMTFKNnA3SmU5TjliQjVBUXFCNThQc3ZGOCttNmMvc0JKbExoOExhRDZiS3B3alJOZzhOQkR2ME4zUXZKUnRDRGZ4QXFsSnBza3dGQ00zRDAyS3llR2JzNlNnSmJxcXRKV205YnZnV0dGbXBibXhnR1U3U0FId0hPSVdWd1ovYWwwdnZja2xtQnNYN2tqeGRZN3FEWklFZGcyYWE4NEltczBrZ0hIeXdnNFpNTG5TbVZhWDJSMXcxSG9CRHkwNGdtYXJZU1BUeW9JamllakdyMFZBcUZwdDlQbWtPdTVFeUJwM1hHMkxwb2tFNnJFbkZNQUxBRFM4OFk5dEliNFpEaDRObTBZd0VnQzNKZ0ZJVGxSTlJ5RThIalhxbFlDVlU4WmJpWlg3Z0hlbG1PU2QvdEhnOGtkUHN5Wk00K08zZTVFOFppdGRqVWtBWVdYNW5JaEhxbXpWcHpPd1NUa29SWnBrcGhYS01DVFFjbGQ5dGRueXQ2enFuMTdueFZCLytRZlRlQzdNNkVsZFRBSkVkY1lrczlnZ3JaVG9rRUh5amZTMU9uM1c5YUdzNUZGNC9jVlBQbS9wS0dhVVMxZk82dm5xZHhKYTFuSElSYTRqMG5CS3FWeDRUaThOK2pMeWFLNGhiMWNyR1QxRWVTaUFZd05RRDRHanhnWVprcFY2OFEyYkJKZ3pyNlNrakEyZ1Mzem5iTHNQRmZQQjM4bWNpeFBPeHlmRmVNWlRFM0xDRWJwZUZ5S1RZMkhYdVZadWMveW80WDdncjlqc1dXWWVRRHBmWkhuQUtaclk0a21NVy9NN3NOSWhNMzlsc0Jmd0NvTWlkOW5ybGQvbDR1RlVKbmVDMTZmNElPWGRkRm1QOGU2TWRFVU44aWdRQW8vN1Rqb1VRY2JBdG1UcW5tWlBod3hhaVBKNmpodjMwRmhHTVl3WHFlbjgrTC9QcmltbTdGS3paMGZVYmdLWkJjYTJxVlFOR1JLRFBrazd5OVBEdEZVb3MyUjF4eWlLSG9MMFNiMzQ3RFdMR1EyYkNZWVFKR245blhsTGNhNEFlalI3Y29DSDJEa0ZoeFhWZ1dpSTNzTUdQSlFtY3hXeUFFQnVybDlESllwc2duUlF1bVZwd2xCY2tBalowMEJXOGsvOEpyT0w3YW5jSEZvTUFGNlZTSFprTEVBVTkwbStvVDZ2bnpwQWJIY29tU3RISnh3YnJQRUc4bFc1cmpwOEV3UzdmUHp1cjh6MWU2SC8rMy85THd5eGsxVFVPM2dWaVNFQXNwU0NiL20vLzVLL0d3QU8wdzJTMTBBOXcrTWJRZmpkMTNKYkthTTAzcmd3RHVKYUtzUEJnUGF3VkV2cDRhZUF5d3NBSGtBdTRja1ltbkY1UmhRa0dnZ0RCOEhvT0JYYVo4Z1U0RXdVRnVtK2FUQkV3NGxCQTlEMWpWM1g1WHpVV3VNYzRBOS9VbFpEVkFYQ1BYTDNoWFl4Q1ZLV1dKcFhHTHVWK0RLdjByTlAyem81K2dQL09BdHJzdzY5R3ErcGVRYjUxa0lkS1VrRktpUUJkVlBwS2JReXlwSkF2UVVDSHNLZ1ZucTZYLzB0YzVabTNQdGRJRTA2ZEdZV2I5NGdzK3dNWUlGQmtpMHJOZGZRdWtSVGszaXpIU216WlBsVkh4ZDhzQXZxdmpaZXNVM2FkOEFCY0svRkI2RG9wK0N6MzdhamU4dGZsL1JhS092TGgzeUF1a3l0aU5NMFpZeTlVb0ExQ2ZKK2JUNW1lOGs1OVQ4UmJyVzFvU1o5bmZ3c1JlN1Q3Y3hubVNoTitCaitWa01abHFra0Q1RnF4c0IrWk1vZklGTXNVUG9la2hXaWR5SHo5VWk3WkU3VXZKcElwRklzYU1Nc2FROTVPaFdzd3RKMlRSVEhtd0pqZ1BRM0JyQm11Y1UyeFZNcktuMm1TOUFZWnozb1ZWTDJtc0tNaHVodGtxR2RkQTFLdEFCREpOcW5BWWxUZ0NjN0QrOXlOWmR5OTE1MTJ0bVZpRTl6K1V0Z24xMmZBa2VkYTJCbkEzdGE4OENvdkNiQUVEUGVrVTR4a05KREF6c2s4My9KZTd0bVdYS3JhSGpHTTg4VC9qYkdSRUJ3d2YvL1Vkd1FBUmRjY0VGZ1krT0hHZDdNbFZJcWEwbFYzZnVjTThhT3QyYVBPcFVyVnk1SlZkMnQvdGo3SklZQVhiYmE1dk1zWUdOOWVRMGdTUnZQU0p4YlVIbXFoVkppZExFbnhNc0FmQ3NFSHdMZytIOS81QzhISzlkaWRIVW9VYmxnc0oza05ySXVEQnVDOXhPeVNHVU5pM3AxSUN4L1lJQVo1UzMwWm9TelRlVm40dlhzaXdMMkVrNUdZN0pBb01tYTNtTHdDbVhyS0VERlYzV0h6R2VpeUF5WmtSRmY5RzJYSnBqYS8vTXYvK2pBK3VwQVYvNEFrK090dW00QkhnN3BVN0F6anU3bXV6ZzFUZ1FRenhjdVFwUEJKUEFqcm1Kci9FcDNTQ2J1U3Z6UVB1alRPYkhNbFhoc205aURzZGdDV3ptVWpHUU91V3Rnc1lGRGU5WlJJLzFES0EwZnhOYzcrSjUwWU1aRHd1R2VzY1FZR01jV3UvL0JMTWxub2QxdFo2NEZjQkdDME5YWVFlTXJjVXlQczdnNUhrTE9zS1lCZDYwRTJNbWRTZjJmR0I4SHM1Tmc3a2lGc3Yzb0ZKcXpyRDVxOHNQcDIzamFhTFB1WGVpT1IyNkdFaXNFeG9jTE5VWmRSelBSWk5PMHJtWE9iVXgyRThQbjJEV2ZoVVE2aEVUakJNWVdnRWt5ZVZWUGdaVEpwTDVGMWJWSktvMFYzYnZpYldqQlhlbmR4OVhUWkpmWk9ZRmxKcHRiQ29TelNoTm55SW5XSEptV2d1N09PQkZBMGZlWjV1YkU1dU51QW1ObjVRQWNOVkEwdTJEd1ZFR21ybkM4QnJBVnlSL1YzekFFaWtNQ0VISnJMYjc1ZzQyK29uZ0JvRDhLaEw4SXBGOEcwR3NBcFVDakxhSzNtdDR4RG9aYnlNdVgrNUhDcjJsZ3dQZ2ZJNStIY0hHSEJxb0QrME5TNjkvQlJaVXhWbTZnNncxbUZpYmd1bzlCalBIdEF4V3o4MHhsRXRZSExXM29odHZhdE9BV1haa2l0MVpzZmdvaGxwa2w0U2k0eURPanVyVmVmUGxWUDkvek55MXFvREFTcUI3ZzJESFhuL3RVUkcvL2N6eGw4cU52OUlaNWpiR0dWNm12RzExQVN4ZDFRVElhVE92T3BRMkZVakpuV3M5Q0dDNlhzZjVuNDBPQ0taczA3aGdROCs3Qmp6eHEyUm5DYWNYZ3FuRE5sZzMrdjR4RUZqWTBtTlpVNjM2WW9jUldCc2t4enk0eHg3SVl3V1JZaEtyckFlb3dWbkM0RnVSMkNxY0h4bkR3VGNYRVIyRWoweXJ3R01SOUpXaHpvQ3RWYUZ6UGN5UzZSWUtpQlppKzBpN0tkTTVBeW8wTnBCemR4dDdWbWpLOUJEM1hiU3NXQTFyNjBveHU0aUZHbWFVTmc0L0F0RTA4UGVaVVp2OUwzMzUwQW53QTRUaXZlV2NHWTczSzF1RHYrS1g0czBaMXBzWmp0UWVhcDQ4clZJL2tNNW9UVGp6ajlTaHhUVG1FYXZYSmIwcDZ0cUs0ZFBMcWFWRzVuOGcxUEVjTmxEVnJ1Y2RMWWh2U2lncHBNRllhZE4xMUtTd3pnQjRZYmF0NFI2Wk1Kc01LenpuMXk1b3BrUGt6TTlKajNNbGNTcFFtbzA0NnkrcnRRbW1hSUUwbTV1TWJoanE3OWlZNGsxeTBrdkZwdTA1WmRRZEdaRWJwd0EwQis3dFZNc0ptV3ZkbCtsRUEwb2VkelRSZ2dVRVRITHNmRWg4ZFFHSjFhcFVJeCtOaTN1dnJidVBjcXNqZVhocnY5K3VyLzlnSDR2ampILytJMDRyakp6Lyt5Ui8vNjQvLzlWLy9oUmNBNEpXTGRBQkU1Vk5DTnRYRnZoWlJuclhhNHdLUExJd0wyMDdJYUZKaDNOYUhTRlRtQ3hnRW53L1ZldFo4V3BTL0M0dE16UGFiK3REaWY3N0QxNXFBTVlmYVNYRzhCSGgxQXhrblUzdHdaV2s1VkJpTHBhbG15eERXQjMvTUZBVm9oZnYvajc1R0pmeXJ5MWdUdXRGVEtkaStVOEZDOVZnK1gxQ3hMdXZqd0I5VjVUQ2d3WkQ0YWdDMjMrRXJYRU9xQitzYVc4bHFYampOL0ROUFAvbUpUam5UVWFCbXZURHM1amRtS3BOOUNjblBFTkptRko4blVPQjFrQlVHS3NrYVE2M2JLbFFYRGQwNUFFNGZlbDFkWUFZWWhZZEdQRUxLV0J0dUJEQ0d5Z0dFRTlaR2Y4NFVnNlJYL1ZSNnZmekJpUGtDZ0w4dkQzRkpwVUVVUExBdVhKYXZyTldJc20wdFFvM3lzZ0lYUFRybG8xVGExMEdON0NzcXpXb2xnZ0FBSzhkQjFTRittckMraklybi9aQ0xPUVpUbzZ0MUpsT0tCQXVyUUNXU0xKTnFsYk5taVN2UHZJRkVTblNWUlFKTkE5eURBSjJvYTZnU2VTOWpaS2FWeHIzbE1PUExSQXd2ZU01eFZpb1dveVZKRy94UC82S05VQ1JLVk15TWdWS21jL2RQbWZDMDFLMzlaK2thVWEyM0dBczhOQUdjOUxYVWlVZVk4Mkp1RGtETHBGbVhiQWptT3JSYW84UjBHRk9iNG5GR1hPNE9lR3pUNXlJOGtxVllmNldYMTNkT3BMcHlpUkVEUW9ienNKWmxWTHBoWWgyR1VEZTRrMS82SCt4NHZoL011MTZhYnlUZkxkMDhRWnhGekZHbmI1eEVUWEVxVnpGNHpoUThvUEJaeURHSHN1NTB3RDBWWjRYUFNkQ251YnYwV2ViYXZ2RzVTUWQ4akNmSDI3VFMwd2pJT2NKeGJUTjNucklJNFpsNk9Xa2lpdXAzdzRUSGNsaDRITVNzMkZZQURqTEpJU1ZwVjh2U1FhUVppZFZGV3d0UE0wQzNXU2o1eE9XenN0REZNNy9NYXg2Y3NVcmpOdkVreFYxQ1UrYlZncllMNElaaFNGbmpJZlRzT0tPcUswQmRIUmFncDAza3NLN0JxUjRZeWJLRm5tdDBPbDh4M3pGVGpSWXAxMkZ6QkRhbjRidytBU28wMXEybWM1bmRUSlRoQ0pXQjd6NlFqTVBWUFg0RWl1VDhxcFNHSVpKQjhUVTJ3TUhQVVIxVzFScXE1NEYwR0htRnVKT1pqekhZeG5DTGlIME9kNG40d1YvZzUvU3BxRE9yb2NvSkRIYTVhUEZuZ05EaXovbUQvLzYvdi92UnQxLy80aGUvd09zQjdCdlI0dDhKL3YzdmY0K1RxUE9vWEc1bWRYeUZYeFdBUGJxSXNCVDJWWERFZ3dZb1lMRDF3SXQvc29Bait2NS80UDhOMzZmbVNlRUxqTXBoQXo5WkZDQ2pXdGxLSThZQ2tFNUhDSjRweS9RajVoQ2RRSzlTWVhBRUhCSVlqcDB0U1ZJK25Bam1CbU1lU0lMWm5FL2R5Z1VEeDVhZjF1VmJvb3UvQ2sxbkRJQ0V1bWhya0tDRyt5eXdSbEthK2djYWFsK01MbmZBVDBjTmdVUGxUMjIxN1RyU3ZPNjFLaWgrK2VucXAxcUtZVktYS1MvL2lxUHJBd1J3RmF3ZGZGVVdLUys5dVpLTUZwWUY2bm9xNEZPSU0wT2ZNcVJDdUlxYzUxR3ZOeERuaTRpSnVWRDZ3ZGcwRExmU1RLVVNIUnpna0RWOUtpUlBqWEcxY3phTDRXVkFMUmdldTYzNGJGT1RPRFhDRDFHRVBHMEEvc3cxVmJjV2VMYzBnM1FLK1RKdy9JdzdCTzhXOG5wb1dYRk0yWTRGUlBaUTcxOXo3bnBqWHBwZFBhSTFKcnRUbGR6QTh3NlZJZFM4RENxVzg2MlQyTWFjNlMzazdwMm0rTnZCT0YzZ3pnVFJQWFJsTGlXYTdkYjlrSGpML25MRWRRb2Y5TTBUL296Zk04N0JyTHZmekVVMEJaUFc3VnZyNlhRT3RwNFRuMGZ0S0dvQSs3QVArVzJnWUFhSHB3QTk4eGJnTThMOUR4OHZXQU1UR1Q5SFprYWxQRlRQSWMxeGdPUFJ1bUtleVQxYVRnZXJja1BqaDJ2T1lwK0N4cStaWmp2bjFkT2I0WnN5T1RkeGtvbW5URFA3TXUzZHVzbGQwV3gzSHN4TFFZNzF1YUtWdTZ3eHJldkVIWHlPOGk2M0xuMCtMN0pjblNRcDR5bW1YM3ZONm5vZmd0RjRJb1VNeDI5Kzh4dDhJK2puUC84NWR2OTREWUJmQ043bkpZYmJVTDRlbUM4SkNJaHg3MlE3UlhXdnJacjFUWmptQnFYRWFtZlNURy9xNnFZeTQzZDhhaEt2RGZGRDVoNENJMUxnQVV1Z2tscGN0T282aTEwdlZtSGJEZzFlMHVFbjJiSGlZOTFsNkZaWmV0R01OLzV4S0ZXbFBRRHJrMGtNQWJvWWJ2dmhDN2VOSExNcVV3M0EvZytnbFpPU1JlY3FPZGVNZ1VNQUl0RW1FTFluTDNOZTZUV3BHaTY3ODhCN1VmTVRoVVhPSUc5VlJTRHh6bmc4cS9ScGhJcW1PSzB5OTZocEFuV3p0ZHRMOHFWVk9oakQzeWQ5QVMyVVJXTzFLeDZ2c1VaRjNheDd1aDdUNnZGdFBzSFBKNTRUaWNmQXd5RnlDMUc4a1lmMEp5cG1URm5yUG1RZWxTWU43TEF6NzVmN2hOeGppZ2ZUd0lQNElkUk03cnE3QTVoR3R1NmQxWmZpLzhUbDNobDJEZ2s0dThkMGF3d3MyeG1FN2d4ZmlwdEFYYm0xa0FkZ0lKbTdCbGVlZCtFN3E2c1N3bjUvYndKM0RWUlVYYlFDSnRWdHBLTUFURmdQaW95bzIwaWxPS3B1S3B2ZVhRUG5Oa2JkdlhYRnJDV1RGRHVhdHM1Tk1yRUZNc3l1OFozZUtSSWNaUmxLUVdJVjJobjc3eU94Mk1DYU81Qks0d1RHNlFEUy9BNmdOSmxad2kzVXVxbkprREJhQXp1Yk5KUGdkNy83SFFUNGxRRHMrLy9qUC80REd6a3cyajJtVEF6YStXa0FONmQ0SWVEUEJ0Qk52YkFHWTk0bUVtZUtHWk1mQWk3eEVseSt0d04xbGdIV0lkN1lwbWFHcm03U0JIaThHbkxPQk5BT2lGdCtaTVBhK3NIZVBoNjR3UEpEcXl3eFgyOWg4Y3YrWnRpSVlzWDFBZ0FBRHZyTUJXN281c0hxY1NEa250Q0ZpYWhsTzlDQWQvN0lIUDAxd3RTYkVYam9JcXRwc0VnYU9QZjgyR2Z5V0w4YXdjNjhIMVpvTmJ1Vll1YWRDQ0JzdDFRcXF0WUM2ZmVzeVVpK1dpVzY3MjRDNDJlWm9oQS82L2ZvU3B3RnhrV0NSZVhMcS9xL1F1V3RJUHRBalNFNTNzZFFBdHA1dnlqaTQ0M1NOeE85Vk9CWXR0Q0xHa04vR0xtdXA1cVVQTVphSWVQK2gwdFVVYTFWRmgvcFNlM20xNmg3Ky9BUXN1RU9YaVk2eFVxQkIzNFBnZG5KWnVqdUxuNkhjZm9QQk40Zi8rMEE3aStHZnAzUTRxem1YV3RjdlVOUVROeTU1dFdvWVdqcDJ1RFpMWk5taGFMbGRxbGVERC9xMUNIYk5IOWc5aFNMT1liN3cxRURhYStHdVFKOVdiU0FjNEtyMHAyaG5RVXNTMkFON01RM3htU09WbVJMU2FVeGdISHFoUjFxSUpYTW53c3IwTnJXVFdmN0pMakQ2UU9OWlovR3k4RnRtZ2c3SkdBQmdERkNEYXRyUGtINkNHZmJmQnl5b1JtQkkyL1NvSW5ORzloMlp4QnFwTHNHbVE1U3ZGcW5GejFDcVU4Qk1MYUkyREdpL2ZXdmY0MS9Nd3AvRzFUZklYZEtndHJqalUwcmNJYUF0UU9jdk82emxKaFBvRnd6a3BsOENTUlFWcHFZVjBoZENBd3Vmd1kwMVlrendjdWFwTEJiaDJBaWpIMTZmUlZrbkFXYzB0cnQxemcwbWhnVHpqaXl4bEhMVlE5cUhGR1JlajB3WG0yTkFyT1FLd0tnR0U2ay81NnJSejRHTVcra3hGQXNFRk10bXJGWUpWOWRvSnZqOHZpT0FhZnRUUXBwRGNjQ1o0a2YwUnFMUXhLck93U2FoVHJjNTQram5zeUlLYTdkdi9ESXFwdGlJTGlzZzJWZW4rbk5hZEl0MnVFR0tzZ05WNWpQdU1pOXRGUEpVU3RhVW5lVnVGcFZuK0xGQyszUm5jbWNGblhYR2pNQ1BzMEFJMVRMTFg2S2k0SkY3ZkluYWNzdkRsUnVGclg5dWhCRWJRSXJPeGpLZmVSbUdzaFNYaUs0WHBkbHJkaElyem9YalppNlhKaytRUi9nMW0vakdia2xjOGhKTjB3T2ZBN1ZaOW5Kd2R6NGhIU0p6NHZmSEZwWFJrZnlVbU5WYWZTbmRQZHlPL1BTOTdLVUw5VjhzRVhHWVlud1FJcHNYZ1h6bVdJM3cvRDI2RVlPY3o3OG9OTFZyZnZIV0RhZmNXR2tBelNhcjhqWjY0WFNTcHBtb29IZGhXaFhoN05TYVhPQkRDa3JtU1p1Z2xRaTVHNW1nZmRrQWF3NVc5V1psVWFKdHBLL0hGcnJVQVBwSUI5WGQ5ZFd5a1dMWXlmRk9DUkFhY3hhWFRIUXEzc3NaRTFHNy9TN3h1a05vT3VSWnhhd3pCMVZWNjJVd0FZZmlrSjhuR3lhN09hdVpTQjk2MmFpUXdMdU9oR2dqYVNsN3dLWTRFQWEyc3lWcHhsMTVZWS9BZlRiMy83Mkp6LzVDWDRCNEcvLzltLy8rWi8vR2E4SDhJR0FOUVpNcjZ1QXQrTjZHTmMvTkdCWWVoem8rYTdCTXpIMU16Nm41aFRwSXl2ZFZwYVJsV1lBanFRRUNBbGMvZ29RMlhxRUhjRnhReVZDak01RHVMalJLR0ptQ3VmU2NOczVOZ0ZXYWlINEdJdlZtVXNBREduNStFcy8rRTJCT1lMNkJoVS9BZEJuTGZNVEFKZGI1bDk5aGEwL0RqRllXUzB1MmpXTmlwbEhUOWdwVWpaUzBadVdRMjgrWm5RNW9OV1BIZTc4d2VjaFd6QUxWTmpsTE9ZMFNvYmY3Y1dGczdvemR6a0F6YU5TeG5WV0JxdUJSSjBHMUhVTGtMZ014NUlLUzRCeldWMjJOU0xRbys0SkRJZm03TXpwdVdSTktjRzkvbksrZGxtNkdldFVvb3YzQitrL0x5bnhGeE9FNm0zSEM4bWN5OTJoaU05c05JZzVGSnVONjMzeEh2eVNUSFFJYmVQZUNDWVBjaFdaam5IclJJTUlUb2VnTERPSTRCbGF1UU1uS0dSQjQ5MEZTRTNpRERVK1E3YmFOUTRkd1ZGL0pJL3BIeUxmdEgxVDlxSFNOK0xIYTJpZUZENU4xSUdCR1lQd09CdXBMaTV2cHNWVjN0THRrT2xWaDgwdWZpQ1ZaWitXNjNGSzFxSWlqNkZVcGdrS09aVGd6a3E1eW9KbWdMRkFvNnZCanlwemx5TnpweVBYV0tIQnpOTjRHUmhIczg1WFdpRmdwZmt4cWhteVJvQmVkZmF6UFpJUU9DVUZKdVhnRUlBTzgrZ20zcU1qb1c1MjVaMytUcG42MUFqdmJkT3JpMVpuMEYwa2V2MXQyMENhTjF1N2xjOHdiK2xaUzNvTEhBSkkwcmdCZEtGMDBZY3NpR1N1Rk56QmtVVThOMk9qV3lJYnFseTJpT05ySTNqTEgxLzd3VDhJZ0M0K0JNRHJBYVRnWlFDNkVnTU1FN3dYamQvdnJic0d5NUducXNwSmd5K2hiTDgvVUdPekdnbk0wVTFPQkxnOEZabnhzVk9xRW1OOVp1bjFDRUREYTY0R2pGWUFBb0VQL3c1QU9jdzdkN21rWTBiRko0TXh0V0Y1YmpiUnlOaXRzNGdLM01EVXVtRGZYMUgrNWpBRmFtMHhCOE5RSFg0QmdKT0tqd0p3S0xTUElabkVzR2xkT1I5SmloWG15REJVanZ2bHo5aEJqc1J4QS8rOXhNNUlMZDV0QXFkZ1lNVDRNMEUxUm1CMml4UithQzBUY0ZHbG1IVFhBb0ZkQUtYSkpsWW9vNlhsTXU1QWEydCtYK3BqYUNNMUJMYXV2cWdUbW1kNTd2Nm5Sbnd6QWNrL3NWUlZwNUMzdzJSY3FobjVOQ3lqemU3NmFoYzkxdVZ5dnZmamNjNUJ0WW0wN2xRZGJvL0tuVFJqa0Y0Z01mNlhQOGRmMFRtU3RuSTB5OTNoNDlna2ZnamR1VFYrZHdDemt5M3JCKzMrS2F2N2pEd0RueS9JZ0xON1RKUUdxMVJyQ2NrNmRrYXlwUWowVXR6V1NucVJ4MXg3dDBUekFDMGtuMFpLZnlUVG9RbmNOZERqZ2g0azIwTWx1bzFQZ1VOSndzMThPV01zWXdlamlsRjNURE41UjQ4Z2xXMzZHV3E1R2RMSzdBSXdKdVhjL0pXWUllTmo0b1BlSVNVZTAwSHFzRmpsUUpwSnJLaGJoZmF1ZVFOcjdrQXFqUk1ZcHdOSTh6dUEwbVJtQ2JkUTYxb0RQa1BDeGEwbHNuaXZZZ2E3UlB6dUwzYU0yUHJqOTRELzVtLytCdDhDMHI4TXNLZlhKaFN2R2JpdjFEdlMzUGw5aDdlbnVRWFVCYTlkNjhpdEp5OWdSRXN3Z0xwaXBCeTRBaGVtY2grWU5KSHN1UjB2QVBhMHhxaWJKTEM3aVZIUFhTbThLOUdTK0t6Z2ZYenNTS0R4NC9GSTFKYWZ2eGlBMVpNSFVUbHphUUV5Wlo4aGNrRFducCtiZmh3cUtzRDBPUGIwbllGOEoyOFlUb2ZxbXBmd1hXdUhqL2pmM2x0c1lnQi9ZSTJkWXlEQ0h5TGs0UEF6QWhydDJCSjZSQXRZSmdyZHhpenBLTEZHdUN1VEVUYXpnM1IreHM2RkxQRmRWbW9TNy9wcmxIK2laNnplQk5tdHBSNkM0c2VhU3pPVTljdld3TENxajZOQ0QvaWhZK2gxc3llYnY0VHVyc1lEajd6NDRTY1owVFZlUEFkL1Vwekl2RXRkRi9tOEJOWWN4bG5YOE10ZElCS1BHcE5aMk9XU2ZNYkhsQ041NTdPTGo4eE8zaG4rR2ZEdlhnOTE1WEM4ZCtlMzhUNXJqVmNYMFYwZzVzMDEwU0tqM2U3VXVOdkM0ekt2WklDejI1VFhybnpHaUZUcE9MeGo2RWdlMHg5SW14amtDTzhtWXY0NDJUdXluRG1XcUhVWjJoMHZrYUpIalVtRDlEVnBrTkdYNWhDOFRMd3p2T05mR2o0STl2SGNpVHZQNi9icDZQb243VzNzZlpQM2xWbnNaVllUWkZmWWpJSDk5ZGMvc2Z2L3QzLzdON3lEL0ljLy9FRmZCOExXMFJvQk1YaXBBSkF0aENGVzFzcEZ5STlYMmlMdUcwVXpLSFE4WStIZkJzV3VvZythREkxL0J3Q1VKb2dWcVlOWFBIOFpkOXFwRHNtNUVKV3lHZ2tjZFNJZWhrSGkzd0hBOS9IeER3RFFBYnNJckJnM1FPVldPV3lxWEJYa0duSEhyN1ZrUmNSeGtNRmFqMTZOQkNjSjV3emxzTjJIdWI2dEJSS25rTVhxMXdEUUlsa2F0T2lpYlVlUmFNYUJLTkJzQndobVpNdFdiVVU1U0l4RGllZ29aZnJRTTQ5MVhWUTVoU3dlTlU2aG9helpTUSttNmRIRllPWW5VQmdMWG03aFgxL0FCMUw4WStSWWtmcCtFRGR2U0dXNlRNdG13SGxENXlVZ1c4U250elM4SHZJRXR3RXVVbGE4NW8xZUxuWGlveGlrTlM2WFpHWlpDWEl1TWEvUHkxR3JXTXc2cGRJZ0hkVThmbmFMcWlXc3FlRUZtZDZZWno2aXZNbFJzZStqUlZtM3FORktWN1lMRXBWaGxkRkw3aW92Q2RxY28wbUJ5MHkzNjNtSUY2K1oxZ0JtaVRrWGpYUFpaOUhFUzFGb3Btdlp4aWxJZlFxTW00bTdUZ1FRaVJSampWdThsYzU5Q1RKbEg4azdURHA0R0ZuWG84WERYZU9QK3RRQTcyTm9nbVBYNi9QZ2NPT01GY1VWMUUvOXNZcElQZ3lkd2prR3g3T29jU3BGSmpPcXpDSU8zYVh6U1dldW04VmdjdjNGeStINmtadEh1Z0JrNGNNblFjVE1lQmdyWVVNV0l5STltSmFZVmFRMzR4UVoyNDJBcXorR2wyQWJ3aUxTM0NrS3U1c0FJVmNVajlha1F3YXIwa3pNa0IxQVpoVjNrMVNWTEpmbXdrakVBUXdaRHVGZEJzWXlBQ2l0YWJ4TW5xMmNTOXY2a3lmd0t4ODRlN25HZzFPVkk2bVFLcWRZekxGaVpYR294MmdPSTdHeVdpc0JmQUFjY3BiOEhYMFdPK3NsUUtHWEdoWWRaNFNEaXk1VDdhQVJ5azJZeXErK3dwdjkwR0JMaVEwa3RwcjRJaEM2K0V3QS96U1kwaUhUVmhOUkhMakxRS0JERHBDUm56dFNQRTdqWHhwUUZoUHIvbzZvRGlRQ29GVXVXaHgrYkFHMnN6RERjODB6Y2RqRkEwTDZLOFVhSmNxWmZ4K3pCUlJPMHJpSnpTZVF4a29BRk9DbzV6dlBtQzVlTlBVVUV3Q1hsMUFRMG9NUHhKV0ZzMVNmQ295RU9ndjZjS0JFODk5MmJuTjJGOENsY2d6QTFwam5GUUcrbnNCNE1ZMXUzV3pOUTNSMzNySVhZYkdBdTBzeFVRb3NNNWdxekl0UUxSWVRaNks2TlMxZWoveUhxdlJ2blRubENOSTVjWXJmNSsrVWNzdG80cXlWT0RXSlU1UDRxSG1QM0hiLzZUdXhMZ1pleW5YeFRQcDBDYTNkdjFYdkExM0wreFc5TS9Ua3FFNlRQSEh2ajZFcHo2V2JxQTNrelFITVZWMW1tWmg0S2E3b0hZMHkzbGU2d2tQS1E4anBMOEVYTVdsVmZnalBhNGwzcndkazdlZlhWbmZqeElPK05YY0F1WGV5UFhSbFpENUs0Q0gwNkhQa056TEhtWmlqdmhhOVpmaGdYWHVGTm94TVQ2d0Z3V084OUh2b3VmU2JlbFVadGE1TC9lQndETm5xR0JXWnJmV3QrakVkbXVUZndjMzJydHliZkpQdFhRenArblN4SkRuYXhRWjZLWUMyL1B1MUZ4NER5dXJCOEJnNmtydTVtSmZpbHdMNFFLTTk0VjJWNTFvcTBRcnAzV1FsQ3VQYi8vaVRvUGdvUU50NjZIRmNLNkxybjNFUGhjQjMxU2tIZ1NmN2thdW9mVUo4ZnJCcWVpYzI4Q0JEYUJkekw5Z0MyUlhPVmhaSGpVbnJBWVN4WkhyWnBITGkxWUxSVjM1NEx1dkhxMXNDN3ZhNWk2ck9hR3RmVmUvTmNFcHd0amtLNGUxLy84WUd6ZXNRUUtzRDNJUjFHYmt6Z1FSTXJWcTFqYXRoUEhZaDNwM05HTXdpNC9hT1I3aUYwTTNEUGlBbFRtQmNJV285YVlldzh2V21EMmVKYUUyV1JmTm96alNhaDJVZ2dDYzlzSmprUzNCWnhrcGFUT3RpMmJkMGVwZzBhS1hkRmJETW9BbnV1Zzk2aHJCbzh5Y2R4a0x3Mmh3SEdQMU1ZdDV5L2R1eFZ1T05xdzY1VWFZNXJhNDgxWjhqcnFIejM0REdZd0ErbHB2QVV5S3pEVzVaM2lEUDlBN3cwNmU1R2cwOGhLUjB6ZjI4N0F6RUpnM3NvR2pqM1RWSXZmQkRhQmMvcE93K1lCclp1bmYrNy9EbGpWVmN4ODZzMkpkRDdSUS9keitoN0Q2TG5ZRXRTSmtyNnE1QzJUVWpVbnJsdHBCSjhka1ZicllXSFBtZGJLVm5PdS9MbUUxTmFEMVdKS1BRWkpobjh3U0pwV2xNUzJ4UmRIV3d3TFhFemlmVHhKVTlSZ2labzhZR1V1NENNd21NVlZvbUlIWFk4NDZmd3JWMFp0S2hrZWcyd3lad1hTdWJQcnNwUHVwVHJFTEp0UFEya3FiUFJDdlRvUWxhMTI3bWQyQ04vWGZnTElTTWQrQkVoOFMwcm1VSlVtTnNnRjArTVBhVFNBSEdhd0JnZkJxQVR3YkFZeE9LRmdlaWFMblB4UHVCOWRVS3ZrR3RuOXFwSGh0a2djL0JHRXN2Z1hNeEFPa3p5MHJuS3N0ZGk0L0FwUFRqRTRBeXJjSFYzQlNUZEc4ZHJTek9SNW9qd0F6NGxaaGFOVFExb1psWFM4RmMvY2ludkt4UWp3VktvMjcxK0s0L3pnTC9yeE5USWI0WTBBc0FrQXBSTlErUjZnRzNMdmlkSVZrSmFBM2swRnBGUmFaUE1pdzVEL0JhR1N6RDVIZ0xYbDBsdXN0UXJaaWk3Qm9Wc0RKQURvckpyRmdIMDFWSVhXREUrUWxWcGpBbVphbEcxN2xKV3JsSG04eEs4dzIwaW9xYU5IRFd6aUJrMHVCQi82YW1sbWE5SnZGS1picElMaWF1Wnd4alZnVXdIdHhoOTY5SUpjL0VEOTYreU9VWXBvVERucmhWZVFnMTVkN1ZORDFaQXlpOVVEdGdkSG81bXVRTXJ0dVVtVFZwc0lmQXRLaTZXSXdDSGdoVHJUVFlEZmZRcnZrYzVzSGZ0Z0p2S3QrVU5YTjBQeUh4c3BxNzQ0RTVYcFJIY25oalZIcjh0NW5HbVdRd3ROTGpuQVg1c0Jja2JNOWZBUXEzVVZNTW44dmlBQ2szQXdYM2RQQk5ZNlhISTAwOVQ2NHBTRGFyak9kaTNyTTVFbGh5aVlCM0lMZVo2SEdTZmw4dmsxWUNYUnhaMFZVVU92cERMNzYxc3JKRGdqM0Y0Z3lwcUJsMFpmTE0yeXBsbjRCVnQ3azFIMnNzMnhtbHRNUmoxMHFidkErc3RBbUFTWU03OHNnakMzeXV1V1JvY2VRSlJmZFlvb1JzZGlzd2VoU3d2eHhJNjdLZkY3OU1JSnNaTEMxc2dOMmpkdjlnc1B2WGF3Qm84Q0hBZi83bmYrcUxRQkNBbDF0YUlRVzgweUVBSTVsd2ZiOExGems1Skxxb3NKVUd1Z05MWml0VmRPNE9rRzdTVmdrUXhTSG04bWRBbGJtQ21zQjRLT21UVVg1WjBjdU95WXdpOGZhL1MyQUZSZ3FHb3A5eVpIcTVZVEVGYVYyQ3VoMGtUbm14ZkpXbTVkTXB3Zm56YWdLMFErTUJxY0dqVFN4eVp5eCtCMmpucHdKbzZWWlZ6WlBVRDY2QWNtd1YxWFdiVWVBODZGNEhiSENyNFJFVUxvYmhDaExnZ0Vhdk9wUXlTTjNVZUtTWkJHK0hPVUN4cnJKQ1JXVlhlQ1RPc1lGczgwMlpzZnlkcTY2ak8vaE12UTJQUGp2WjlMMnJCTTNUeVVkd3Uvcy9xdDhrOThJYk0rdWVSejVQMXB2MVBpUnpSWU5NTjJtUVVlTTltb3p4RHQ1MHNFemd6dWVPUjlZN0lWZXgyRXc2VER6dTJ0SWNVekw5R1g5bStwMzVuUzBmZmU1eVRydzIzS2ZJa2NQbFBldzFBRDVUeEFGeVl4Qm1pdmdjdHBWQkR2OWRyQ0luLzJWdWpjckoxbFZBZ29HNk1SSXJWKzFkbFZUYS9Bb3V1dzNvYlhXVmNReGt4bW9CZTMwV1VEbU91TVlzd003c3psVVN0eExMZk1nVXkySE1MTllXMzlycFB4YVc0eHdWRHluSGtJcXFkYmtrbFlWVzVxbE1tVXNuNlN3NVowZ1RFV05zWUtXWW5aZHoydTZhWk81OEd1K1VkNEFINmNFNHkwd0M2Vk1qSmpVdDZ1NE85dHlYL2pEQmxSZXlkYzBIbVFMaVZscVhJcmJ5QU5oWTRzOEI0VzhCNFY4R3dLRU5KMUlBSkFQV09RS2psTWJYZTZ2Yy9QQlZBejl3djF4bTZPcVF5ZXlWcHg2K3F1Vzg2cEJNQXhhWjVTeXoyQm83T3dUd3VaOEFwQmV3NTJBd0JqUWZOY3h6MEhxOHFjMDk0aG5TN3A5UEJtRFg3cjg2SXVzM2hwRUZmNVZBaTlYSEp6WDRYS2E0c1Y0YW9UVUE0K1FyVUsyaktZNzRoNkJlVTQ0MkRQZXlER0xVQ0dqQWFvdms0RDBxUi9GYVFpUXpJMHM0MjVXTGhhV1doNWNMREY0R21HZW9WaXZOSzZPeTVwVzNQQ2ZUTkJCSVk5N0FQSURxSm1NWmdQa2lxUzNtQWpaOVR1WEQrbG9ZV2w1TGp5SkhVckVXMGdXWHl5cUd6c05zM2V6TWluMGkwaUpjbHVMbzFJWU5qUm1EWStMbmtMdHpNc1lHdDdYbS9LaWNXR0l6Qm1seUpDRzQ4SGhJbXZjWDhqZkhYU2o1eEtNSzNTNGpiaHBWTzVJdlF4SzhiSGZ6blhscDhrTUt0RDZYVlZLNW03T2h2MVN4enBUM3NCNWtuZEw1NURMdW5QU1hJWjljNXVFU1NTcm9WYm9MTlI3Nnhzd2l2TjVhU09aSjNqRitITEZZU3BpTHNYa0NSZTFwQUQ1bDA0RTBzR1VHUnoxSTg2a1VpVlpXMDN5Y3FhTy9Cck8zOXQvQm5SaEtIRmxhREZvUFVya1BmQW8rR1NzeDAxVnhaOGJZNm5yY284a0ltMm5kbktObjU2SllGQWwwUnByQU1pK2RxNlF5U1dPRE95VjRhd3l5NGpIUlNnT25FTVQ5OXk0ZEd1UTY2bXV2c3Z0MWprMDhEb1N3bWNTN3llb2lCUnRML0RrZ2RQRmlBRjFFY2FCclo1QXlGT2t1aHNpdkNmRmkxQkNRTVI0Qm5LdUFXMGtablo1T2dTYXpvTXd1b21hT3dDVU0rdThBcURaYUE1bTZWYWFpaVN0akxJRjRwV0I4L1BYZjJ2WkpneGFjc1UyQzBWS3Q3LzNMeWdJQU16Z05XZ0lBYlAzeFc5dDZBUUNCZUxRR3F1V1F1b282bE9ReDFKVFhyczRIaHNlZnV1cEc2NjVDczBXMkpydHNzbWhpS05ETnd6a2dNMnBNZ0plY2thTVU2ZmxSZ0R6NUxYQ1lLM2lvSW9NUnJodFhsSU5iYWZhbytMMlY4b0V2d1ZqUHVXaHJTWGRHYTI1ZVlDY25zMWUrTUhmRHcwbkROK1JUT2pyOVpLYmtCOEplbk9ZdnZwSGpUbUVXRTlRY0RmYVFtUzhDVk81bzlSQWErbHBlTExWL2RPZEgxOENoSTVreTRPd3ljWjYraDVFOGhJNlRBbmxNMlVrd08zbm4rVkYrTjkrWmozcitJSHE4eC9HUm4vMGs3b3l2Qk54dDI2elZSWnR6U2MweDFFamt2c080eEM2K2N6Z3FKVzRoZE1Xb2Jab2tOUXlxYTlacVAxbWY2YzNaM1dhdWJrYUZ6ZWZBZ05YTnFKaGphM0hxRzBaWEI4VFNxNTEwUDVzdGVpZDd5VU9RNVJJZmM1dWdkZTNtM01icytsUUtTOU1TTFVzSEsxdWl4VEt4YkFjUGlUWnhsdHhhU2taYjZOaDlJRnVvT2FPTC9TUTAyR29DNjVVQVBnVDQyYzkrNWxjRkVBRExKN2VtRjh3L2Jia0lpUGtVVTMvKy91V2pYS1V5V2NOUW9ZYVBwRkpTbVl5eEJOOWlKNDRYR3ZXRHg0TjZBa1RKeStNaHF5Qk43TkNRNDVGMllreFdpSC8wVTR0TEIzalVmTURVY3kzcjRrQTFCTmp3S0UyOXpZOU9oWXBXcUtCR2lSaEIvVWtodk9wYW92cnlGbjgvQTRmcXpOZ29XMTJOYW13bFlzSWF4TXpnN2JZWUdkemtOYkZVREF3WEdRbFVxekhVaFRZR0lnazZZM2pUZm8yV2RtSzVmYUh1K3V5RnNKa0JJQisrSzZSUldVbFBkTXBRb1VOYmR3YWR3VkZsTUVQTDlMSVpBOXdzOEdMTlk5R0k1cmptMnN5NUJEK1hZRTZDVmVaaGJNb0FFbUZyeU14Y3l4YVlvZW05eEdZTTdHTm1uSlI1OTVCdERSMXdUY0Y2cjRPWkFnZmxWWERwcWNxc2VRaVo4alROL0JEZy9TcTVnSW5mR3hVZmxJK3JtdWxwbTFpYU80Ym5aYnNTYkhzS2pWTldvWGRQMys1eng5VGpKVzNmOU1jemwwZjd3NEIzNThneGYzZ0VPcTBmemNPUTlsRjFabDR5NUxHWWZES0tRK3VmcEJtRGtCL2cwVE1OTTBmaU1jOFBUTGVQK2VpZkk2a0hCeFl3YWVEeFhCbUlMMHQwalRLcE1lNGFRTVBuSmhodGk0eXZUZENpRHVtem5aR0xZQmRibGhVYm1hRzl4QjdOS3NBK0o2a0U3OUUzdmxWM2wxYmJ4WlpSWVd2RzZsOFZqbDdwRC9Ua2tPYTc1OUE4amphekVuc29YamN6QUZEbWVWZW9wYmR1cGdmRzh2c01EQnBYMm42WkZZUE5Cc1hZa2lodEpPUEtWQUoyVDJXR2gwd1FITUQzLzRNOVBZQU83Q3B4Q09QTFAzZ0JvRjBsc0dVeE5rTDVUSUJiTHprWHBxSzRQUndZQ0FyVmNGWjBQQkhWMkpBdkM4aGd4RmJIeExOUDFyaUIwVVZLYWRCK2kzKzRqSHRvdEZpbytvVW52RUxCeXNqR2E4V3ZMbzI3TGpsRXNUUmN4dm9ocU9reGE1Ym5FSkgxemJlSUtiVmFqaDcvV0ZySm1PelBBcGpKYjF6eGovckRrSjdzc2dvT0FBcXFORy9IV1FmUEtBaDhSb092LzlTQWNjNzRDUTVZakNFUDZvcmpMZVk0UDVxQWh0MXlyNWxYdkJvOW9lcmhUTlZWcm9LMWpsb3FPb3g5U2JtaERCeFpIRXBzMWJrSVZic0M5UWRXS3NUTGwzeEpKWjdLNGhDZlIvMGRWYXdveDgxRHY3RTdNNVU3QW9NY0ZjZEFHT05nWmpGaGR3R21mZ3dHREk0cHEwU2wxNERITUJFMk9jRmlabnFwZUtIaEg0TkFGUjB5QnpiQTJocFBGVzlON3NEUkdlS0E1MEdNcTJPR0VnOVpoVmFLbGRPQnQwbnE0c2VsQ1ZhYXV0ZldKVmdYNS9JYXFZalh3bklrdkdER3dmdEJYWFBzZTBua3VsUlRQWjVRM1FVWW80SkxaZWNnN1J0NmV1cC9qVlY2bjNHUHdENE1qWjhZajJ2TmhEbU1PWjQ1bDNZcWRhK0JXTUFET3pJWkZSNVZPQkFPbjQ4YlduOFB6UUNTd3FXQlZEbFRiK3NKaG8vUEFkMDVOL01EYUw3dCtwd25GdnFjYjZVb1laYVp0N1lWNGE3WFp3cHBDR3lCQjJoQmdsbjk2M3I4UkZJdUI0VTdJMytiN0FLSEF1Z0NQa3l0MTVzNWg2RlVxRldmY2p4VStvbkdITUd0dmxRZXZHVjgvTmVGSGpaWUZaTjRpRlRFRExvaWs1bVg4eGE2cm9GUzROaldZUTBzaGpIcURtWVpRWHdwdmFYQUhzK0VwcHZZWFlONnNPS2N4SGo2MjlWaFM4MWdEQU9aSS9FVnNOTExOWUFtaDd2aVBCZGU0WkZTQXVHOTViQkNrSjRqdlFTWjJQUXBreHNZSm1FOGMyeEhYaktHNXFHenczL1dhREs2dlR0cjR1ZkU4ZmhET2JvRzZPcU1aSXRSNFJtZXNtZ3JrODJZRHA4NExxY214UTYxTFBDeVlCdEhqdE56TVpCUTNXd2JqMjZOdWFaVXNacnBHS1N3VXBLSG9Va0Erd05ESmtaWW9ja2dPRS9DUWdqeW9CS0x5UDBxN2lrWWdFOTMvYmx6cG5MNXNIR0V1SlNvVlFCZGFQSDJmTjBOWll5TlBvRCtGcEQyL2ZpM2dYLy8rOTlqcjRsSEdQeXJVOTk4VzIrNGpPR1VNLzhsaC9wck45OXpKSGpUTXo4bytPNnI3N3h6d3huaGp3WmMrMVVOYVRBYy9WZjRSd1EwS2VxUVdaOUxBT2lWeVpodlBTdHBoOHgvYVVEbm90WVdnNGRZVE0wSUdLYUFHQ1RCdDN5TXdEOFhWV1JSdkV3UWRocUdnZnc2QkJCRVB0ZXNVbkdqdk5sS3EzYWs0alJjKzBvdTZ4RmhVVDI3OE95VTE2d3h1Nnd6alZZUkRCVSsvQ0lRNC9yUjRLV3gvMG9aTTJMZW5OMUlwa1hTTXh5NVY4anhNSGNjQTZybXVNZk5XTHRWR1E2NEVJZlA3SnBHanI5b0JuRnhJY2dYSkRFbFVPNHA2NXBiUmVrN2pvd2FBd3piVU02TXFzcHhIV0xKTlVIcnlvMG5pZE9ZZzZuYlZCcFB5VHBWeW1rOHlEMmxWb3h5blFBTHJ1TGgxRTZTL1prL2p5TTVnNzcxZVRBRGdPc0QyVExZQktESmlYZjB2V3BWaEFaVkFMMUxtczBrcTJVdldEcEpuV0FnUlhSejlDTmRodEVaWmo2cEtGMVVMbnZJYitGNytyRldKYjVPY2pNZWhyeC9BTTVaemR1MVhtYmdNQmNUVVBSS25QNFhPYjM3TVBhVW1kcHZVNW5ZdWlQcGFJS3A3SU5KelJmQzQxRzZ1ZVd5Wk9pT1QwM0hQbGs5c1BYNThJc2paNzB3ci9vaDJCSWZDU3ptUnhPMS9pTnJEV0dWMGVOTTJwSVpJMXdKKzVoM3hxWnRuTzRhbExLZVg5WlNyRnFJaG5uamIxZkE1ZzI0NitFbHVJczJ2blZyaEdza2lsclR1aEpqYitLNktVZ3NRVExDeWU4WWpLMVRMK1ZSbjZFbU9EcVlOTEJETXNKbVdoY3BMV1NURENYNWdHMzFvR21oOFlpb3hhb1dGL3E2OG9OblloTW9Pdm5oYkEzVjdIaFVsZzlsM0dCTHM0b3lqUys5Y0hVb0JTMGZta2poWnRud3ZkcjVHa0JtWGw1czk3SHZ4ejRiL3k3WTczNzN1OHFtUjc0bVYwcTBySU5oMkdUcWtRaHVmRnJMcHgyTURJTzVIdXBUT244Z1ExcTJJMmR0bmxtQk5sSW1BSy9kTXZlYzBMQWRhNlNWeXZXcVJCcGxDRmhkOEMwa1ptODFkUE55b0VuOTZMV0VTQmthWjVmNmJTUVdZRVh3R2d1SFY5bXZrNkJwQjVldjF2NGRYb3VMdGdaUXl6clRjSlZ2VC8yTTNmazdOQTNXclZMY3QwTUNZSFZ4NG9UVjJyWXVwcUhCUUNWbXZ6NG5JS2hEZW1ISmdIVTlVSHF6T1B2WW9pN05KSEM2bWFNc3hjS3R6WFE3SElFVFcwcUtyVEhZeFE1OURHelh3RmlJemVXT3g1VlYyc3VsdFdYLytSSXZWeklGeGp2d0RCMENZN3dENmMwN1BiT1NmTkR2c2pzVGxHc1ZzNXM0UGUvNDFPd1lXZThucHJMeUxwZmJ6clJ5dTBETWg5cm0rY1c3ZDROcGhkcGMwSDBXSU5wU3BOOFR6U3VrckNZenVZT1dyaTVhS3h2amJ0Tkk3MmhMUjFjaGcxVEtxZ21rbEkvRlZ0b25CVWtlM1ZxNjlNNTZQNXFKZTdwSzd3UElySXp1RGcvS0ZMc1F5SS95K3dEc0lKQXR4STRhZ3hHWmJkb0tOMGJpM2NSTUE5YWJOM09zMjZMT01yQUF6SDdjUmMwYlpPNU9takc0MHpkQjZ5cExaSWFTMFZ2c2VnRUFQVUJ1VnJPdTk2c1NaTXQ5N3p6TWkxQVc4QkZZdklQcHgxdEZ4YVJQNG96eUJZQmlhbVh4M0ZiR3lKTFhVN3ZtdXdZM0t0WmY4bkd1YkZVNlN6UXNnVnVjSVd6M3NmdEg2elBYUU91cTRwRkU2SVlmbzFCdXRURXhzOEVkZlVUdUlURDc0Y0ZFQ0hQRXEwWTh5dk9CUHZqVkZWdFJpakVpeUNRV1ZsYnl4ZkRGcUVJRzZpYXBVR3ZkVFNDTTNDU3JoOHA4TFY1NzN3c3dxVkRKV0J4U0hEdElzaVJ1THJZdWRQSkhjTHdXZlF1NFFvRXhzckdKSHpHUWt5ZFQzWnJ5bFM4MWVCeHFDOTQwYVdoSmtTOXl1WHh6QVVjaXgvTHV6eXp4SWlFV2RreXlGd1U5aDdFRERNemttdDJOSHNyM3hYSiswTHZjQUdPaHgzeGpYdXVLMHRvaHhPalFyL0ZuTFE1MHprTCs3bFprSnZkQkxMY3RjaURzZVlqRndxcmlzYzNFNTRHbDhzOEVlMFk1SHBEdUhtZVVBaWwzbVJpM05nVEk5S01neFRzK3BvaTAyQnFBSklXYkdLU1pCdHlWNWs2WnRraHhOL1dKVXlQc1FnbVVrbTJMSXBUUmhpdDRFYlIwZERORlhUTUo2REpYS2JNZWVMc3BVY3FQWXBqSVIyMldzMVVUWkRlelVnOWVvV05yMHNCMUcxQTNTYVVrczJ0YTFDbWZCcHFieSsxdURnRTRhdEtNZ1dVNzQ1RFNVNkFRR0pGcXNkM0hMd0RndTBEWUNPSnpBUHcyTUhpOUpKQ0REU0VBZGdzQUdRNEFITnBtQ0dkYlR5c2p5NFlOU0crclREZFdpcm9lUnZQSkx2OE02RlR6bzRwNGZiTG1nTld1UUxVMWgxSmUxZWw2d2twQlpJS1JyaTVhTGsyRnJWa2hCbkk4QzJQalgrLytqMysrQVRLZXR6cktibHdvSU1yajBoeEpPWVJPTm9QQWtDcEw1Q1dFQXEwR2xWUGlXZ0t0SzNlUytKL3RHamE3TlNrNFZYQjBpZWU3K3hKUUtZVmkxUVhqZEw1Q0VqbXRpcGhGZFExV1NPTnhPMlF6UkpNTFhrTzY4alJJTVN1d0dtaXVTNFhtQWxITHcrUUVWUHVRbTdyR0NmSUVUUWRuRTVoY0lPS1hZcE0zeVN0VUhjNURoOGJmWjFHeGh4RGkrRW9pMitrb04vUzYxVVpRT2FxdlljejBlZXMxbVlRbWpzVGhQOGMvcmFiT2ZCRVM5eUVoTlAxWGlBemNNYVE2d2FGWnpDeHlZVDZxbDhsRGxrTXU5enlZaXd3dmhEbW42N3lvYUV6clVwRjFFMmVvOFE3eEFiQ09YU0IrYjNjbG1HbHpHY3llZTJSMnc2UHNTSDQwOTZONnI4K3hPc2lhK3pvcFRiWkhOWUJtdTh2czAwSktWMVFtWXE1M0gyZGZnSXZlbWFRdGNNb3lsTHpIMElEMFVpS1VJSlhtSC9RSTNhVWdQVU5RaXRsYiszc3dzdDJWWUNSK0taQ1ZCMkI5QWxsSkEreHlkM3dxNVNPbFd3M1BzbWYrV000a1RJeFZ5MTJGYko3S3hCS1lRVmNPQnVnQ1F5Q2xXOHZNQ0RTK2RTMis0OVBFbWlPUU1nY0dHVWd4ZHludjYyRmxFK1BHUUdMRHJKNTZiTHV4NzhjL0JJYmRKcjRMOUt0Zi9Rb00vbWt3L0VWUURGWlowT3VBbTB0QWh2ZW13ZURndFBCMGp1YXI4WnVRa24yTlh4djQraHM5ZWFiRDlPTnRwUThDR0lrNExEQldGWFVsVXlJWUFWa0pvK1g3dnJqUllUdVJ4OWFreEVoc2pIaTMwM3RjZWU3aXl6OUtIS1hyWmcxRjNUbnRvWW11aStKbG1iNzg0NG9BWG80am1WSGhiSlZpeHFWdHBkK0JhQnUxZVNyMGhjdlpteVBKaXZacHBMc0F3Z0pxa1pWZDRiR21Nd1RGbEdtcmo1T2JTU1JETTBJd0dieVNsc25LMVpncGsvamFta3dnbkNtVHdlM2xVQmxSMGdNYk5ONlpGalRnYmlwTkhvQjFid0NmMXdsMEJzWjVtS1NNU0lMeHo5WGV1LzhyUFhhWnlCMC90YUdMYm4xYnF6YnhlaHhScUpuMExtYnRpZmZZNjM2OXlQQTBObEN2UXVjODQ4UzVvZ0ZLSlZabE16czQ2dC9Kc21iM05DUE51YTA1WHVZVnM3N3dOek5xVlZyWFJjRm5xSFVoeTZpekJGcW81YlpveXoxMlB5SGw2UE8vU09ZVTJvSmdWRHNqc2czNEtKTW0vVE9ycDhUVjR2dC9YamJBNHdmS2VYU1RPZUJqVVlrejVQUUdVbW05UUNvMUNvc3RNRy9nMERzQVdaWUpvOXVZMUxTb2lxYWdZUWxzS0dCTkFpdVBKVVRhUitLV2J2TVA4YTJjU3hqWXpmNUtTVUViVDRhY2xUNFdHTWdCWFRFV0oyallLUUtPMnNHOFF3bmVqMXI1VWVmUDE2ZER3K2lLVWF0QllqZUkzVHhlQU9BdkF2MzR4ei9HU3dJd0h2OE90SHVNRnA4RDFFY0IrQlhrMkRuVHBINjVuNjhCcHFFQmJNbk80K0VUQUE5QVdpZWEzOEhsOXlSYUdDNnljR3ZnQWkzbG9UdkhqMzhPV2ErQ1RIQXJnd01QaG1oZHdxQ0NpMjhhbkFPOEFIQmRuUzFwOHN3MXdSNFNzL05LbEdIaDJ1SmpmeGJuWFJ1eWF2RjRSOVhSNTBqSzM5VWJrQlZJSGVpeVBINVBwZHBKYzZPdndtQ0lPUUMrdEtzdTIzckNjYWdJRGJTZWlxQXNBL3o1Z1pWRk1nN2tvSGRzazVSR0JaVHRxSUF0VzllOEhJNWRweGhZOWc3eklIYm9KY0FMK1BtV3ZLNkFjUjF3ZFhpZ3F4L2g0bnJUZC84Nk1iaCtwc2xJbUlWbVY3ZXp3aEJyUUcrMmVkWDJVWDFXZjE5LzJTVnZ2QVBYZGdpTThRNTI4Nk9EeVFkOTA3U3VTNE1IenU2RE1rTVBLUSt5S3RVdWg1UmZjSmJZRTNmbWtud3pMMlc5M3piUEw5NjlHMGtyMUNhTDdyTUEwWllpL1o1b1hpRmxwV3d5TUR6ODhKRjc4dk1oZ2c4ZFJhNUJUcFBGdEJGbVJZZE03a0REbHRLdFNUT3FlK1JGcG1DdnNqUE95aEwydC83SUtPcldvSW1URjFhdHhHWkFtaGVaSVdBZDBwVDJjZ29jVFpPWmRMNkVFTFhZd0NtT0t1UTJsU1lsenE1OGtrbDhyQ0tCNnpiZ3FIa3p1ek1Za1JidndBS0U5cU5GM2QxQjV1N1JuVG5xUVZvcFFldWFCSjhoWWJUWVpPS3ZBT0h0Wm9hLy9oci9IQmorWFRBY1dVNVkrOVZzMjVhZE1sNWMzUFNQZDVOSEp2OHcwZDFyZ0NGSjM4TGlXOVJkQTJpQmxXMFNZSHcyWVZ2RkpEVTJzSXVaTzJVS0xwakRHQnQ5OGJxZm9VMXpEMVJrUzFHaVNMLzliNldqYndLY3pxT3k4ZVZmbytlWld4bGozMDlLUHlzazFIeDZlTHMwTFVCaXkzWFhZSWpYRkdyVFdGLzk1M01MemZueW9NWkxONzB3R0ZuNmkxRzQ1UGkzcGFTeG4zTEh5aUJ0Qk9iTmxlRnpHNmF2ZHE0RFYyTmpadjY4VFovRU05N3Z0K2JmQk9tWitNMzBreXhQZEswcjFxNTBjd2VmZ3QzZ3NQc3ZrYXdRblo3amRqaU1FeEJ2eCsvV1IrWXk2enBOZVlKZTRhUGxJaS9taS9ZS0xMQmRDU3VFZS83K1V5UGRlSmJBUlRVV1l4WGMwTlJ3RVo5S3I3dXR4ak9NWnZyeVBUSkhjdVd3OU8xUUgwTHA4RWs0MXJaUHNJZjJZWURaeVU4YXhpY245VUhlWHFWalM5MFhPY2VmK0VNRFVpSmFnY3hOSnZIVXZCai85WUprMG00Q3BwRm1ER2E1eTYyekJOeTF5UHd4ZENSYnJyc04yQm44N2lNeStkUTdaUmRrbFl3NkpRWEd6ZHo4UTFZei81d1VXeG00N3M1a29UZGxhZUtVOUlHZ2FZNnlUTm54N3JCcmt0bjE3ekRwa0hqUHplaU8zOVFmWlM5SnZQR1A3Ly9nN1diVXhaNFRmd2tVLythc1hnQjRzN29QQ1l6MnBWY05ldU92Y05ZakY0UEs5V1lTRjA4TUpRQUFRQUJKUkVGVXZCL1VGS1ZveWd6U3Z4eUdUd3JrZk5meTF4cndBZ1ZoTFFHTDFCZU0wQ3FIejg2Y0JudU00VjlHV0NHeVNMUllLWWUyL2tFMFRRazVTRkZSK1lMWHIwaU1FdlVwU2I1c0VvOHNIQnhEalJDbkJHY0NIOGVBcEdNYzBLT25RalZ3amtoWlJOZERQUFNpQlVDeXl4MElBYndZUjR1dHNoMzVYanhWK2lvK1VabklBUzNCRkJQWHFJcGVmODhWTkNaUzc5RHpLemhqSXFENDk3QlhqNkVxSmg4NDZRZUpxTUFPL2RIQVlmaWdoeC9Pam1iOEUwbnpEZjU2cDc4Mi9aVXlkdjhjSCtZeS85QnNHWllqblhtWVVWZk1ER3BiTm1jN0ZWcmIyUnUzOGxHNlE0MTA5K2lna3lJSENSYkRhZk1ZZzY1THBRaGVBV01LbzE4M3BYTTVSM2FtUXByZ1pacWowRGpUSXlUeW9tUCsydjNQa1VCeVVYRWlkZDQ5RWdDNERiN1V5aDFUbnVWVHo1UjVZc1RQTGo1a29GbVIza216T3dXQWwyN3A1YkUwRUtPNld1V093ZEJuaU51TjlBZHlaaWh2WmMrVFJmK1p4Z2NmM2VYbWdHUFlVMVMzVVk1RDIyVjNUT00xcjBabTl3NXJOREdNeS9EMmpncUpoMmQyUVdhVlBmZktqTXNwVWdhVHNobEZJVHo0bytjMW5vOTR3V1RpSFU2SE8wM3liWUlST293Mm9nM3VreDJDOU5mWWRnWlNreDYvR1VSTnRxb1BYYTlqK3NncW1ic2hwY1lEU1BMOUlTR0w0cnI0NVlDdXdmcytHc1o0dnE0MUdjNjFldklSSTNOUFZ1V3lSY2dhNDJRa3RvTUEydjFRVnVhbXhqNG1QUXd3eXBvYVhVSm9RUnZqMVBQc1QyYmE0T3ppNlhUbkt4bjZxVnUzWGpmWHZWYW4wbU56T1pjMmtHTXFFN2NvdXJaU3lGMWtpZGsxYVNnTVRlclZUU3RqZWNwNkZSQjdiWHRLalFka3F3Z0d4eldWUFkwSG9hWlBwVU1ndFo4cE16N1E0VC9seW1xV2lDSFBvakpST1lpaHhDLytZcmVwRkh3VThJYy8vQUg3VC9oLzk5MS9ZeGY5MDUvKzlMZS8vZTB2ZnZFTENQQlpBYzQ3Y2wzZGw0RnN3VU0yU3NEOEsveFRBNXdhZUs0SEx6Rk9pTFgwMVNERTVrS0poNVo1cGNFdkdDTUs3VlF4VjRkR08zczBiTWY1SzBBUU9RZEEzVVphY01jdndmeHJQMUJhVEtBcWphdzB5Mndpa0h6Tk5zNWNTTFZZUVJBZXlRZGU2YldGeDJwb1FiZzU4NkhkdmRvN24yTlJrUmtDZHJjQmQxM1hBQ0VNWndyNGlLVnJnRjhsMFErajNOOGpaUTVjR3BJNkZMTE01Z0RUbVZ6aTFEVDhwdXd6czFUbFdLdGRFS2xKM0Fid2tlNWN5TXBST1Z3REJVWm9MRGRPQmxmZCtyWDdWN2w1NVVpVHlzdHdQQ09EUy9qREhZL25kZWF4NHNNeTZtR3JwcHlUdXNYUXp5VzYxYVRiZUZ4OFBmREw1YXBIenZUWjhkVEF1cTlQbTIvcnZqR1dqMGwrYUgrTUprcndtU082WTZnNzg3RTVmTHBhaS8vV3hiQ2ZxU3k3VDRIem5CZW9sZTh3RU84eU85eEY5NVEzbVhka2U5Rmpsa21ESExaeGk3YXVaRWZTRGdaTjFycVFKU09jakgwYXVOUGM4VXAvM3ovMXJUUzZkMVdlK2IxNlkxcDNMNVFDNFRhMmx3THJqK2wzRlozMUp0ak5keWF0Y3RnN2IrYlpCTEpkc0ROMmV3Q2ZsaVhEdi83cnY4YkxBTHdld080Zkh3alVyd1h6UVZYUjNLOG1JNzVhUHRaQnJlOENnU0dKVFgvOStNblJueGpVZ3g1VHhEUyt1bU9pOUxrNU1uVDVDaEQwaUdYWTJNQ2VqWEVYSURFY2Ezb1hFaDJ2VURPa3JvWXVJQ3lOR2F3dlhpcnA4RnBEQTZ6RG5pS3phd3lsTVlBTFhRRVhrYSt0TGpzNTVtbjNocmI1dEM2bE1iQTJQSFdkNG1neWNsQmJBdXlDOE1QRFoxaU02bWhsRVZWZExjcFlHcng3V3FtYjV4Q1hLeHNMbG8rcEtqUE1KNWtwaytQdHpwdlp3WWYwVGorVzI2TTdvM0tZNm9kK1ZNNHAxZFY1R0dlRGF5Zkk4NE96d1cvMTFJOERUTkwxUTlRUFp2bW5aTU9uUG9mQ3E0cjZrWE5Wd3RUYTdGcDNWZUJya2cvOHJNVHRWTHJFRHBCbDBnNW1kdkJGOUNwazg3MnVtYjNjbm1WeEM3V3VaYnVubUtadjNVd1gzZ1ZnR3RtWUZ2MjB1aDVKTXpmL2x3aU9jeEdaaTdiTGRzMitxaTNyblpUZHhBelNjNFYzdDUxeHJoT2xFWitrc0VwWWs2VEZEU2pGcExzN3NNYkFHakRDYUExTVN1K1F1MDJ3ODdKcWZQTlI5S1ZWbWpqRklBdVpCR2g4NjBvcE10dmtqMjRRMyttVEY3YUR1dzA4cERoM0I1bWxxRzJiK0k3UHJOM05KazQzY0NqQkh0MloxQU0vQ0Zxb2RlVnpSNExQRVBhSzJQVGpGNEx4Qmo4T3ZCSUFnN2YvVXlORDhEcnd6d2ZVRDM4Vk5vL2FlZE5FcEFHNjZTQnNCc0FtSnNVNEpGN2RocUg4RVd0V1ZjY2szVjNNcEJmSWxxaXVlV1dwSzB4QkliUVRzcDlZWFNycnlLZ1k3UDcxK1F1NmRWSXVKNmFkZ05hVmd4S05BVnowQ2k0VGxGNjdOKy9oN085SGNUTlpCZVR4a0FhaFlUNUY2anJhQkd2YWVJOS92dmV2L1gwcDBaQW5yamFCQ1BEOHFZUFJPR1lHeVF3WkcwVFNSWm1KRmhmQWVxNmZLanU2eGxlUUZYcUpVNVd6dVl0ZXpTbkdlWHp6aCtYcXgyQjI0Y09ENnlYb1YyZnNzc29NVEJsdk84bjAwM0hIUTh2MzBPUEFDdGNpQjdWQkpIem9CK1BjRjIwT2ZreHRDbEJzdlNUMlNBdzhsbVNNZC9CcGV2czRIY0NrZ2FMWExxYURnNVBDak9ha0R0MHA0T0xENFdyeUZsT0ZWdk9PaVdvNTU1MlVwbWxkV3drZzJwaTlLNGU5M1pYUHpPN3dhY3h6RlVSaGU5U29uRU5aL1lHMFRKcG1Bckl1RzlMdm1CeGxUaXkzaTVXWmgwU0ZtRGJIWUp4TVZwRnRNbmRLOHlsMnVxTFdaTmVrRWgwQ0VHNG1samtxeG56VHAwdzRtY3h5b3NnV2F0RTBlWW52NnRvVEFoM0pKRVlVWFRNN2tLQzE3dTdBRGc3UmZkNHBraFJXMUMzSTVJV1RTYVh3US9RaGZmZHBia2RiYUhhK01lNEt1TnY4YlpXQ1RHbTh1L2pGQUx3R3dCWWFmeFJJdnhtTUZydFQrYVBGWmxMN1NZRnM4UnBBZ3ZHTVV6a1NUSjZVMGl1NEd2dEk0RzRER1RXV2kyd3Zud0NJa2tXS2xDa21zZlRtNzBEYUVsZUJzVENGK1NkQjYwZC9Ja21jV3BjekNjYnYvZU0wK0V5QVY5ZU1nVUt0UlhkblVFWDhRK3ZkZi9yempmV3hUeHFwSU1qTlE5M1dJdGdZZFJzL1BaWjRvZm8wUURiZS9kZXZDNkEyek1abkJRV01MelhEYXZGWlVZTnBiUXFRNXE1a01oTHBhQUV0NzlwUTZ0SkhXeDVqcHpYdUQ4T1ZLVGJKUXNsUFFYMURrNG0wc3MrTitkSlkvQVpvUTFqZFVaYkQ0cGp2anN0aVRaRkpneGs1M1BJemdBTjl1MG9uN2Z2Y1lVUHY1TG5zSmc3aTFDUldqcGtkUUdEU0JjdzBnSzRaTzV2Wmdjek5PNlV1Z0VOZER5Q1VnR3UrNXBzbitKMlIrS0hkVThBa21WZ2xHdFBxTXZsMFAvVVlXdFQ4bTZEc1A5QzhhZnRGWkRrMUQxSE83aDQxTytueEtIRXpFY0VIRml5MmZ2SWhaU2YzQWJ6RG9JeGwrNUFReW9FWk8wc2crV1NlK1RlakdrTnJjOHd0SkZ1M2ltYXQxSVBQcnJHemRyQTdPOHNoQTRRVU5TUHd3RnV3QTFrZFd4c3FpdHhrbkdJZ1FXdmQzY0ZkSXBSNVBNc3lxaXd3SXRHOUErSWRkZUw3NEtpMFlRUG9tbkdpR1lIc0drdnNGSUFtTmlPUWlkZ3VZcnZ2M3dZR0JvUGRhZHRHb2lzR2JiM2Zyai8rd3pmNy9ScGdGTVdEUlIwYUQxcHFabXNTWXNrc2RsZnY1aWZ2TEpEQ0dlVW5BQTY0a2hUaVUyMXNVNlZZMlhoSGxZZ1dqMHhzYXlRbS9XSkFZRGRKQnBQSEVxUEZJVjdZWFpCaUJKd3JRYlpPdDhZQVl6Tk9vSksxMXljY2JrQ1lWSXpIS1hja2VCMHltYjExdTh3WE55cDZaSE4vWDY4K1NsWlpXaHkwZkJrYTJXVFluVjhFb2lEQ2drakpMR0czak1XQkZQY1NtelNJNkdHaElqb3lKc081VHR6QnpsZnlXQjVIOXpIc0lXdWVBV2JybjZtYzVkQVhITHQvZEVab0t2UDJFbHFMbUpLcWRTV3FkMG1GU0lXNDRhaUtvM3VERDM2UGxFN1d4Uk9GVk1zVkEvU3A1RkliNzhCamNBaU04UTZPZXBFVzc1b01KVll0TVdnOUhhMGh1c2xjdTBoZDUwT1pyaXR3SkpzbXU2eGY5UnFaM1laM1BRUkhVb2tzRUNWYVY3a2k5N2FWL2wvdjdpTTBrMlBiU1RIUEdrUmI0bk8zOUxjcHlIVzU1aU5lcERYbE5vUW1uUWlRV2RsMVlncEVtdG03WXVRdm1kc2tXeUg3aUhlMHVTWC9uT0tpQ1ZxNlFpQjEyREJUVEVMVDhGRW1VdUpQdzdiTmltbVYvRjRJak1rN0lMNjE3dTRBMVUwKzREWnlkM2NnTi9IR0QyQjNBSk5EY3JjQmFDUkxCekhtZHlDeCtXUFhoaWxMYkFGQThzSm9CYlJGeFBkUUlNTy9DNGJkUDNqOERvQytFU1FUYlhHQnZkZTlBME9QWHgwdUpIT2J5RUhkUm1ZSnliS0VFMlhva1Buekp3Q3FZVkdDUFNSR0JhVGNzUmpNaldCOHpXazljUjRkb0tSNEhzSzErR3owSVF0STRDbnBqN3ppVTJBbFFPTmRhd2ZPVXFWVnJ3TGxzOTZTYmJiS0JabkhNaXgyNzRKMm9xTUE1SmVSUG1haVV0d1FWSUljM0k0a0N1ZjNnc2FieUNPZFNReU5YdzR1aitMaTBmT1pWRlFWbTlKZEFBdDJrRkduN0RJeDVxMThNLzFabjlFM3NLN1BkWlUrdi9jL0RVT1BCWmxzZmJLMFFzRlBCY1RyUWhOSmZWMFV1QVYrOVROZW5DekQ5MUZiY0hkM1VFUHk4RWVGWFdibWkramJSR3h1a0lKR3R1NFhVV3BTRDg1WnhYalhnMmxrWTFyMG8zVmJlalAzd1A0U3dYRXVqVlFYYlU2d2FSUnE1REhsU0Q0N3l6WVRkd1lPRDZUOXBaRllaTE8xVDZZWTd5RFRsU3VOZVlQblhNbmNHamdMak1qMFQyYm5NeXFjclowek1jbWpPRDEzY1RLNzdURVhwQTdvQWV3Z3ZMZVNXV21CZ1gyU01aa0EyTjBtVnVpaDNmVmk5cFE3WHNyME9TcE5HdXdsd096Um5jbUt4eFE3Nzdudk1NM2ZibmdCZ0Q4TmhCWmZCRUtyM1NQZVZZZWc3U1RWUmV1akpPUDk5MEhpbDMrLy93Ny9Xd09RVnE1cjBrb3g2dTdZZWdCamlMOVZ2N1lPRTg3YnJJMkxsd1BoTVcvVmlUMTZFZG5VbHFiKzBhcWFLc2RHSCsxQ3ltYVVxREF5djYvdkFLWEZqbkcydFB0SFNPblMxRm1Fdlg3MnZLRXF3VGxhYytUb0FIellUbVJOU1VFUzBPSW1NalJsaktYa21LUFNiRWZBcUE2bXpuNWhxaEVhYmF3MHlPZ2h6a083K1JyQ0lNQU5IZ2ovWGhqTnVLZkhUdzExdEZXQ2hpaFZtSytqNmk4YzZZMWtrZks4eFNNOHA2QzVUUEp5cXhJWDZyRlQrbFRzVTgvb3dKbVYrQ0F0NmgzTlhXN3hHdFhkMkhnaWVPRDJJdWxaNkV0NlVTbTNXdkhUTGdJRmNRS0RvdlpoWGxONlZ5cWNGcnlJSDh4WHhrUnZpekV1RHUycW40TmRFd1R6WWpCWGh6bU82KzBibWxINnFrVFBRMXFPTlNaL1RoSTh4WWZSNWtQV1VoY3EvMHZLdkRTYWNIWDNJZDB4cnJzTDJqaVgrd0Z4cHZFWW1JbzJjb1VPS3pZQ3A4V3MrY0xuTml2ckRmejBCTFRMeHlBeENTOUlqaWRKTFZReVVHYmlMdUM0OFhlWjZ5LzN1WGFtdUZhemJjNldBVFFsUHNOdHpPNmZidER2SnNjVUZWWDdVcEJpNEtOZVpJWVN2MU1JZXNqYWZGMzZ6bi9uMzZ4MUxKUmp4bWg4ZFNhZi9sY2VWNmN1dWRIeXpqT3VXREt6ZTlHVUc1K0lvWndDY005NkNqS2xKVjdURDNXUGVucldhSEpJc3BydEdKaTcrSHBCbTdKeTBlYndyTitBbG1MWWJxTXFzNDgxdWJhWHpGR3A3bERZSGFHN3ptL3RodkpVSmc0WC9QbE8vaGw5L0NiQWIzN3ptMy85MTMvRnl3RDlxZEE2ZDJ2eDFPV3ByN01Qb0FPMlZZcTlzUlJZOHEveE9RQyt4MTBYV3cwUHFpaEtDTDJHNUpBWWhkQ2FwM29lTERNdXYzRWQ2dDhCK0s2R3hSaGVlMkErS01lL1c0SWRPVE41SmRhTmJMemRMUkpCaWJTT2MzcGF6Qm9pZjlPQjF0cjlGeWdqcGlPaTd5RFZ3aURaMnRMTnNWSlhYNjdDMTYzd0NRdTYrc0FGL3k3RFdCZ3VrQjRaRnhGTG9DanI4YS9wSThEUjhvckVBV2UwSmRibHZpNTZ2bHRlMDZ1b25wY0UrZTc3M0ZKWExwZU1kclU2TERmS0ZGazVWVXdlbzJXaXZzMkV2TnJOazhGb0toOEc3TXFKVjBWWjhRbWdScXZ2UVpFdERmL1MvNWdhSkFqV08vMEkvK2ovOERrSm9obEZObVk4ZjAyRkMxNkw4QjE5ZU9pRGhZS0l6VlBBTWlYSXRuS1J4Wk1sZnFSZGJ6TEtXZW1ZS2JOUGR1QVpLb2JENHpISmkzNk1XZFdwekdIa1VKTlBHZmcwWktFNlBISDBycEx4QWxhcUZkVXc1N1V6VW1qdCswdGwxSklWTytaRjVZU2xHQjNjWEFZbVIxRHo4YldlMml0M0ZHVUdKMU1HWXdCWGE5YWR1eE1JTkVjcEU4OWNEWE9zenhqTVBBczExS3JIdTBFRloxMm4rMXlEV2Y1WGZjNFNHdWZLdndhY0pJMUE3b05wWThDOE8wT3ZNV0E2akdrQndvMStZTXA2ZURjTnVzZmhWVHBqYVFnU0RFTlJSWXcyWkJUTTQ2SXBNcGxhVkxKSnV0dEk4MHk0SG5kS1hROFJkY0dWSDFHUUI4R1Nkb1JsdVR5ZTlQaWhqL1UvbE5EMTArVSt5ejNBa3lYdU9uaGNQdDl0MmtXTUMzbm1Jb0JIVFIxaGFJSWxacHhrWFNFNFUvWHNFQ1llUTVpTVBEQnJ0bFUrQ1pvR3lhV0JmQ1ZjcHFsRVhNd0cxTmR6T0R4QXFxVm51UTdaREltL1RtaHk4eFlUVVphSTh1UkVCQlRWWk1IZ1VHaG05OUZhRHlXd3VoWUw0UHJNd1NlR1lNNW9UUTNNOGRCZ01GSUpxdUlZZHRNZmgxRzF1RlhEcWNYYnM2a0JSbFQrNWhmZ0tSakQwMml6cmRJckdqNHkxSmxtcTZ5bUg4NnFYdWR4WEJ5MUNPTktXQjZWN1FaOEMyVzNNQ1pjajRsYXFER2ttdTV3aVdVc3pWd0hoRDFORjd3RGMrbEdsVHZaNU9mbFhaZWlGcCtoK29WYWdobzVCNllPdXB5REZ0blBTSXpoWUpDM09LdnpMSUJUaFRyVGlLMFM3UEQraEJRV3FlY2l2RjJQVFNuKzhnOTJwSC8vOTMvL1QvLzBUL3BTRU9JNGFuMWd3Q0xBT0xBdEE2NjMrSEVkQVNLb2Z6RmdhRWhCL1AxM2VBWEE0ZjNvR3cwUmZCN3JlU1R1WmRpSmExdUlRaENqVldtMCtuUkNETG9Bd3Q5T3hOc3NvSHllUms2Vys4OElDN0xWSERKUlBtanJjYkRTY1IrbWdpVndUTEY2NlBJSDkzT0ZRakNGOHhiajF0QkJjSU5iYVdCbUhMZUpneVpraU9rV1hiV29DeWNzekpBeXBXWlAvWVdjQmlNZjEwc3hhdEdSZktwd3UwWklqWjRlY0lNRE02aVd0WGhuUnE2ZmNFcXEwWllXNG1GMTZYTFEvT0grM2lQaE5Nbmk4dUVQd1lnNlYyNmNtR1pIUWZYWXNwWU82Q2M4M0ZhVVdjK3lTNmFLS0dYaWkrQ213eElmMWQ5WWZRNWRkNE1heHp1RGdZYnI5MEk2TnZDYlZtbjlCS2kvTEIwSEdQVnFndXEydVNvdGt0ZDUxMGxjSVdYYWZYVGpldmpBU1craitFajNvMVUrUjU5TDlvNFA5TDRvYnhicXNwN2wrWUxCMnRpcUhsdWdON0VXN2ppOEk3bHlBazFsVmNCbGM2aVE2b2t2WTUva2k5dFB5WGxoK1puaGZDbzdXZkdSUnM5VE1mWkZ6cFFqTTRPOE4rM1BaVHVwRTVIS25ZSG5TcnllSzR0eEFwZkdnOWhBYWhKdndrRllZM0JVUGtlZEFobHdUdFloZ3pldHJIOEd6YTExbmZzdWorc0I3NTFwaDFnWXo2eWF6cnFtZUlKSW9zV2ZjK2RGNGpJVHFGeTJNNEtuNjNYWk5FSHJJc1hWVi9wMjFTbkxnZ1M3WVVhQkljRFp5c2VHNXRhNlNuayt2eXFSaVluYkFOeE5UV0lMR2dnTlh4UHRDeVc5WkhVbWh3RXd4T01wbTJpZGpxSEFtZWFEQTg4cWxnY2JjYnpsaiswb2R0ajRwOEYrK2N0Zi92dS8vM3UrQmhoWmNUTXVtSGxmd0JnUWpFVUQ1TGF3WHZweWwzdTRnTUl0WVRuUlN2T1NNdzNxMFV5dHVnNnQzd0dRVVlyUyttWFVpWmtGVXJ3Qm9zTGlqN1lwdGh0R2pHWEZRdU1UQXh3QU9OSUVTcy9xaUJYRllzOExtcWZRQisvQTgwV2tiUTBrUzM4d3JidXNkQjdjbndCNnBhaTFBN3A4dE1BT3ZuYi9qa3JnN2dEVFhGMjBPblE5OHRVRis3Z3N5N0hlaTVKQXJjWmlURmtjVnFxMEk5YUxVVmJMYlNuWnRkSWduWGRzbWNHdStRUi9tL3dwQWE2cjkzLzJ1N3BQandFbmZ0MEUxSFJ3L2kvWDgvTWNueGZXdVpZWjdDRXpBTHNzb3pkNHZRWjJ1b0ZUSmpNdWMvR1RQTlIxQ0VyakhXeitJQzRsVXVCMGtlanEzbE1nejgrcStKQ08wTWkzcU1CT2ZyTC8xWGoxc3NUUnZBbFc1cWVnRDF5V0g3YS9yUG83MmJ6WUhnNWJXR01HUU9RenMwZVJ0Wk1YaHA4ejZDR2J6MDM2RVZPUDQ0dnhxSGJQaStHMW9rSXQ1UlAwY2tpZnhIdVZYWithekUyY0dnL3lXWEJYeU9rQXU0UElqL0wyUkdMbXV0dElseGFmVVljU0dLY3lNUVRXREZ6WER5NGJYUzE1emVUbDVPdktwRUVtWnZxYlR5bHRhaDd0RGpUZ3U5YjZGQnpKTWZFM3J2TmpPc2c3UGtzM25DbkcySlRxZHdBQThEa0EvaVZnN0V1eFFVV3Vkbzl0RDJsUDhIZEgwN2o3Q1FBbGxDV2dpbURjSFg4RlNBR3hyWXhKQXdzYWc2NlByQ0ZTRFBBZWNwYVYxZ0Rvd0lyckJZQTA2UG9GZ0U4R2xNSm1ES2FOdDBuNzA5SWEyQklYU2hQN0p3RE9yb1loTW5rekJxV3NEM3J3R3NBdlRPWXM2cm1BSTdCK0Frd2RId3hoaTU4SDdybTUrODhRN3VrWExVM25JUjE2QUpNYldNek9XNmFzRkNnRXh1UU9sSlVteWZ4QStsYnVMNkxyODJIQVllOVg3bmt5QjkzRjUzckc3WEZjZjBVZHNoakFwRUZHWCtMS3dsQ3hNNFAyQXBKVTZGZ3U2eVpXYVRNN1NEZUp4WGdrSGs5alltQnIraTduUXVscGJIQ1VOUkxkbHd3TW04WWxqdUJabkZIZzdLcVF5UGZiR2dOUDYyZis0QlI4aVo5MkQrZ3JwSGtsNjVtYU5BTWdNcG5FNzZSWUErRGNuUlNUbzc4VEQyV01MZDJBbFhnblEvUkI3OUJSNXFpQlpRWU9DVFMrZGFGSlJ0aE02Nlk0UTAyLzE3VWdIZTV3T2tzRFJtU21ORWJkMXJyYmdIM0E2MGdtOFl6emxBR2oxV0ZzTUNPOEZma1FXcHFabGltSlozemMydFBnS05nZHJOK0JIUkRhb3p1ejY2MUI2QjFzbWNTWm9sQmpWQkg3VW16TGNQenNaei9EQ3dCMHdhdVZ3TExrdFp2TjFtTG5IcU9XTmFDczFzcEJveEwyR0w0Rml5TytlRElHcmF0SlJsTk5yaGpPelljMVpnQkFZcGtVY2d0Z0xJMFl0M0tRSnQyQXRmc1hDV2NkNkFLNGRWUWdXOG5JWUtkZE45VzZFYm5taFRHTWw4WGNsNjgzS1pHd3JKeGR3THlCNHVxaTlTRVRkRFdhdVhFSHdabzRTbEF2REdhNTVDWGpPS0Jrd3kvNVRKTWE5ZlNSUU9WY2xPUzBSUjZ3dXNFdlFaQVNqbFo4VW1ZTWpsR1FGdXpBS1E3OVFIb1grck1GNDhSZ3VXS0k0K0lOQmhmbnBUYzZJSkYzQ1BINkFGMFJPWStsRm9QcllRZlhBcytuNXFyOWNPL1pQS095VHNaNEJ4NkhRMkNNRTlUc0xWOGFVeGFiTVRpR2R2Sjk1dVZnVUhwMzgzZ2EySlZneHBlR041OG1IdDAyb0ZiZzFHMCtKOGxiM1BGSjRhM01xNGpqeVh2VU5hb3FsekhQdDlCTTVraDJFb3dGanFKSUkxdFhvM2dnWmNXQngvQ2xWeWh6emQrQm5MUUgvQUNzdHlZWllGY0hidU1SQTBIbUpwWlZNc0ptV3RlR1NtenB6anBHbFlzMkIyeUhOM21QUi9xOWF4NG55eE8zekF4a0htMENwMXZwWElReXFpN2FaNEdqbm5XV00zbHdxN09HT1Rna2tJYUptd3pkZHdxbDV6SEZKdWx2OGdFMFBickh5U1lQdDd2NVF1WmF4akRFYjZKaUN3MkEzd0RHYndQalcwQy8vZTF2VllodVZWUUEyRjBJcEZFTGg5UkFwbHI0SFZueGFpRnVzcks4TkRLMGcvUWFvU3NhakcvVW9DOHFuY3dZSEtNbWFURVBrSUJxSjhmYjVKVm8wckxVS0FybTIyLzVCNHZReFh3MEpXQzgzcElKV3BIdW1raytjU2hyVlBxRjV6bHNuTGNxdlM3OW05eXdLU2daV2g4YUNicVNpaGZKUWRkdjZHTDQ5VE5tUVpKcVJvZVNYUkRhMzJ2Zlh5MS9pWmhmOUMvYkVaMllvY0tqb1VFTm83WHFWb0hSV0FBZzNIS2xheUZyaHNzczUyNEs5dHlNT21XWG1ma0V2VzBGeGlscDdGTTNQNmQ1MG4xbXpBTXpvT0c2R0ovdHBXdHFkSXVaaithNWpMSXpZNUJsZHRLTVFlby9oSGNITXp1QXMwbFhNYk9EVDlBcnhWWjdGVE1HUjNFajBYM0pxTFJ0RFZxaVpJMmsrLzFocXowWFNSbHQrRG5heEg4bTNidGxlQjZlc3l3ejQwWFlHWWhOTnJ6N2lMSGV0cG00ay9aSklKTTB6Q2l3Zlk3QXBMUE1QQURiV3JPblcrT1FBRkl5UzloTTZ4NU5MTFpoSytHczNjMmhQVGR0SHpIK29VazgyZkpIMyt3VWFGMkVCak5QUVE3RytBNTRuQmFZeVpFajZzTUNNRWVjaWNJUHNnZUIvSnZBWFhzK2dCeWhaTTN6SWZjVDlFaFJsc0E3T0Vmb3NSbllSMWJZV09POWFld1Y4ZWVBc0VmRjE0SHdPOEUvL2VsUEVRV3BJMVBBWkdoS3pzcU1lZ2N2TWowVEkrcXVjSnJzMGY0N0FDM1pYWUhNYjB3THFZdld3UG9rOXloa2pWUWlWbG1oK3BobGZITXBYd0FnbWlkcHg4bklzMXIramd2Zjl1U3Zkc3kxNDE5S0FjK1J6azhNcUcwT3JSdWVGMmdaZ0hBQzJ3YXAzZjhxeDJIaGpqMTIvNHlLNGY0ZXY1S0Uxd0M0blZGdCt2bnJCUFZXci94bG50V0ZQVkNIY2p3WlRYMktyWEdpR2Fmc1lOZGsrdWZvNjJ5T2wxUEE5WkpvZFZ1MGhxSGxmTE5GQnRmK0J6MHdTQjBHNk9LdDJ1eE9TVTJ0TGxJSytET3U1K3RNUlVKTWtNZkRVa1BtcUZQTUdEaDAxR2YwRHR0cUIwNXhLS3VZTlBnaStpeVJocTBLdW1JTUxONGQzdEVvWFo3TjZraSsxS1FnY2JydEEydE1pdFBrTHhScmRzYzJaMlRCVGo0ekw2TnkzbVhnZDlLTXgyUFFRdTRDTkN1Rmp1UkRhTmVMU2Q1NEJ4NkdRNnAxNU84MExjVmRtNGhSK201eXB6ZVBsR1BXTFQrK0tjRW5DejRoODR5Tko0N3NpcC9NT0IwcWxDMlNYVDFCMDFpV3ZQV2FTK3VLek5ZQ2d6MnEwRkdRNGgyM1JEdnNZTTlOeHZxWHBBVHY2TzgwZDN5V2JqaFRHbFpYdTM5OUNMQTJrODBGVjh6Y1p3cWd6VU55TUFMWTk3ZXR2OFNiNnlLVW15MWl5c3BXQ1pmZm8xVlk2dVUza1J6VlN6emphMkptRXRpOE9jakswYU16VXJEWGx3WnJyZVZHVjBCdDFub2JhNVg5TVRqeitHSmd0THB2cjN2cFM5dUg4WGlRQnVrV0pIWnhxTWgzR0lhZ0hrNkVhNCtIclQ1Mi9PUHIvbUFZcXQyL01ITDU0RVFTQno4RUlMNDVvdTZZWmpHYXVHeEc2MGU2SzZCdm1yak9rWFIwQjE5UWo4bC82T2M2b3pIM1d4THh0dzlkUzIvTEthd3p4ekZVN292QlVGTm5mYzczYnZkUHR4ek1PNnVkbXNSMzAzbEhzK2QrTk91SDF2TVV4RDF1SDNCamRqR1luV3haZDkwOThjanM1SjNoWi9KL3NrS2ZPYzQ5SFNNL0hydlNqUFR1Q29EOEVMT2I3QXdNZDlzamVaVGREZXpvSUhHMjZaazROWW5mMGFUK2lQODBKcTVpY0J3TXlEdkJHenlmQUZLVzJLRWorVHlZbGlKeEkxdlg1Vks4YTFwZENaNWxMZHE2clc3emYranVQaExmOFdtVm1zU3BTWHpVSEVsa05iNTEwN2FKb2NRR0hTME8vQkl3dmdYMCs5Ly8vdWMvLzNsTHVldHF1NnVkcmJIRUlvRWRiWUtENTl5Y1NIa1FYQ25JdnNXZkxzTGUrcnZ2L2x2VEFOQ3JYRm5vVDVYT0xENFVGai9xRkY1ZjlGZksxRUJadndvOVhpTFRBMnNralZ1OXVGRkxSUjJJUW9sUjRSVVZRbGhUL0Y0Ri9zd3FHRHNBUXd1bHZ1TUNqSkRic2prM2t0VWYvTUhXQ2EvaU5SWmFNWVMvUnNxM2pkRzlHSTZzcWxJWWpYYnFmQjlBQTVPR2dmMm9OUlY5SHRaZzZZWURQWW54VjJBMTB5cWlyL3JVaHA0ajUzdi9qTmJ1bjBvbUZzOG9mMm91ZEp0MncxV0VlY2ZKNlBVUHJYaVdhekFEYUdCRlVoY0NkaFMxaGxRZGpVK0JzUUV5bW42NGJEZmpmRjE1a2VtbXM1dk1OWU85V3FDZFhzd1NjTGZOMWJnYzg4VzZ5RkdyeUNtZHQzTjJsL1Rvb0JBWG5rTmFLUkcvUUFuclhvYWE2TlVGekhQT1kwNmNzSWpSZUNsMkFNVk9ha21uMjd5M2hOTG1VamFIMW5VSjgwNFhZLzdZZGJxeW1pYWp6Y2RWUGdSc2tsbEhVb0k5OU1Ec0laaHNaTjJScjFmb3BzblJ2WVYxTmt0YTEweWhabnZYNVNWNkt0TDBKOGxuY2JmKzgwKzNOZmVZWTR1Y3UzZitkNU50L2tnWDAzZ1UyNWtrbmFoaGVSak8yaGxQUUNFcExYTjBHbDdlNDVza2R5M0djRUM2SzRwMzEwQTgycnRhUnlWSW1jOFNJUGlJTk1WK2RDTEF3MWpwUjFzVit4bVFUOGs0NXF2NUdKdjRxRUpleXZLOE5FYytuZFBIR0FLNzJNSGdFcHFQd0lxNmxWV21HRnVUdzNCRlIrSGc4eWczdDlBQTJ4RDRFdzR0ZlQ4QmJ4anRkVFY0VDJIMzhLU2t3Y1ptRisrMnkyZU9FbG1XMlhQSmJwQnJJUVZPNm1iNldHYytIdk1hcGF6dU1tT0o1aVlRMitrZi8vakgrQjJBZi9pSGYvakhmL3hIN0YzeDFTQjhLUWhiV1hqeTM2MnFQL01LakFNT21xWW5DeElEVktncS9BZ1BiK2pDQkpwaVdCQ0RBUVpRcXprcEZ3TWNEOURvNnhJdEpkTmxYZi9VMTdoMnNYOGVJbmw4cEgwbnNXblFOV093MTlTc0lBREExNnJRNWxXKzZ6L0lZTzc2d2NyaUQvV3ViTzI2M3RsN0tVZmpWR3VYMXIzakxidlU1Nm5pejRqeTluS2FaNWVmRCtEaVFWUHYvMklTbElFRTRKdkFaV0lmWlpYZ0N6Y3ZuVjhLT05hYW8wYVcrQlBHK2ducDNEQy8velBHOUg2QzNucWY1OE1uNWdhTVJYaGo1dU44ODMxOUhCb1BUQUh5bUh4eVh3SWYxem5KeE84VS9LZ2VucCtRb3BGOFF1STdLZTlvSHBZQzZidkRPMHp6TEpzUE5DMzkyTjJIY1pUOUpaRHREbklZOGo3Wm5UbWtUVXBMUDN1ODNSbVIwdUQreXlmMm13ZUV4aU9sM3VWUjZtaWYvU0VxKzB2S2tXdyt6akk0WnFXdmxObG0xT2tQQXV0ZDFNQWgreVRJYU9OM2g1MVIrczRuWXl6ZzdwN2JCSzNiaHRmU20yMUdkeDg4OEk5TkFKLzRCMDZtTmdUYUZwemJKbTVkRGxVanFQWXdnSWhTSEUvbDE4am83WUlqODdLUXpmZDBoM2J3dmkxeW0zUHI3dWFOd1J2V3YvclZyL0NaQUw2N3J0MC93TjArMXB0aEE3bTVxK3JvNm1pMU9xbW4vYTNsbTl0QnFqdStWd05IdUdUVmJsb0NhendDTTNkQVBvNnFrTHJadXJTVmVwV0RGd0JZT0x3QWNrV0RqNTZTU3VRLzQ0cjNEYnhuY2pudi9tVzdtNE01a2g0UFFCTlV4c3BTVktURmZFWEkwZWl0dmpDYjN3S3l5UUI0SVVmRXUyb1ZSRmN2RGZHN0FmWHZVc3d1TlNWVkxmdTR0SXNoWk94b2tzcVZ4cnlCVTlJa2NTck5IMGxGOTlBRDQ1Q0JTL3l2ZzdHc3Z0eGVBcHl3R0RSUGNEMnk4eEtKSXpWVTZHN2RSUHhBWU9SNFpRekM3QVYweWc2VWFYNDMya003TSsrSm5FVU5lRTRudXVZOUk5ZEtRK01kSFBVZ3JRd0I0R1V3V2QwNE5FdzkrWUNiSjZEYzJTL0dvT2gzMDQ5VjdQQTU0SjN4ZkliL09xRjVycjhZOXZXZlQyNTE4V0N4dHg5UUdNK0xRNmNwUlVlbWtibU1pZVVqSmxPQXVadXY1Y0d3cnNQWDg4R0Y1QU45UFR6czVzOURkVFNyZzdSUDhpWWxVRzRUdEpDaWQ1bzkydEpiQ2ZzQUNPOXRPaGlYZktUSU0wT05jZGRBVlo2NzF1d0FpU0lkTW1QUG5ja1VKeDVKbVhSTnNhbTN6RW9YVFVheXU5YUdmQUtxaDZ5bXRNRG1UZUN1MHcyY0FrWmtBaWNta0N3Wm16VFNYYWNZT09UY1l5aGxWb3EwUG9HeHhXTHdBdURYdi80MXRwZm80Z1VBV3IzTjd3Mm5QTkhObzVIcVpndnhTMDNxalpXWXRZVEhDd0Q3MnQyWlI2YnBteGpkWGFCNmFpVkk3QlNRV2tFQmZHaUNoZE1MQVBGN3JROHhlTmNmenBuQ2JuMWJTYThCSEVJNVZWUXIzdGdBUExBT2E3SnJnWUEwVmhZNTNnT3Fad1NtWW54eWNJcytLUWo1U1JCMy94SkxCN2wyL3dYd1ZES2VGV0V1cTcxbzFWMGJGTmlKRVpEZVpLWm5xR0huQXVob2lTQ2ZVNDc2aHl6cnJUSHpIdEJTdmFlbDZuTGx2SlhHRS9QMlQ3TnYzYXFuRlpUbkdNQ2xJKzdMN1A3M0NiWjFkamVCc2RQRm1FOEFYQzlVNjBUd0t1WVBMM0MrZWgxNGdlbG9oMG53ZmlDOEEvTU9tYmtCV1BmeFU2N0VCZ3FocTRMdzNHMGJneXBtREZ5Nk1TbVd4c3JzZmluY3FxT2JUT3QrYXRHMW5ybXdXc1BXV3ZBbVlIcGRMYTNWTmJPM210SGV0cW5sSWloMFhJcGRsajZ1c3BNWHBoNGYrTEJlZHJvM3EyM01KVXZYMzZUMmthaTY0bzdlZ1JRanhkM1VKMDZOOExHUVVscnI3a3RnWnl2TkdHUW94d0JlSVpFWmVoTXJ2V3pHWXdzUzNkMkJvdFk0UGZtTXBnQzhRd0o3YTMwSDgwTWtYVUsrWmdUY3hSeU1NNVE0cnozaXVzYXk1U2pqVUFqRSs2QzV0VVIwelR6YmVoUktjZFlkTU8vRUJsS1FPR1ZIWG1TR2dMR3J4TjVWMzEySEF6YXhlRWRiTzAvdlA5MU5BSnpkckc0ZXBMRkF5dTV3cGdEcnVMd0FFTlh5ZHhLTU5BK2dtYmdydDlZaWFpdGhkTEdJZU8rZlgxMnExWlNEVmxrdEdBTkYzMit6blBiOWFFM0N0dTRWK0FVRHZoT3oyMEtRaHdVbXdSZ0RTSkNNY01ucU8vMHhGeXl1b3BpN3BqOFNPUnFNaTc4QmpIOElES1M2TkVjSVB6T3ZRb2p5aDNnR3FyZTY0cGxlaDVRN0h1Rk4wNVJPTjNncGFNcWozcG9kUUc5U3VaL1l6bjNudmwzWW1FK3M4S1hTeHBYMHdrNzdyWXVvRm1yd3ZGRGUvcEhMY1oxTkdtUkprd0t0QzZXWlZxTHhMWnFKVmhwSW5Kbzl2VEhPTmRqVGxlSTJsU1lGOWhDWW5id1RnOS9GWlhBNTgyS09iUnZQaDdwWitrTkZNL0ZERlQ5ZmZGeUVCL0t1NHQxOG0zNmZhVXZNMHM3ZFNUUFdDSURmbVowOGlpMHpTQ3VUQ1lRYmsxMDRvSnVNY0hFYzZqT1FvTFh1Tm1CbjhBb2wwM0RyV2c5ZVIzbU00U1VqUHFQSkpKOVp3M1NlSFhTdE5CQjViSlVPcFJPZEpkSUNhM1lmaHhyWWxhMUswNlBianBjT05qUkloMHdIYjAyQzFCanZRTFpPdkhQYlpXOHE3ZHhBNjZhL1F5SXpsRXpqc1VYVGh3QjQreC83V0pqb2N3QnZNcVhucG5NZVlBUUYzRVV1RHVuMUphS1p3WDI0VXlSNGFHMWlEWEsvM2ZQQndGWUZDMXRQWU9ZVm9BRTFaUVNnd3c2VDRDMTk0OUFrdWNtdGhVTUUyS01YY0RmeVBnWlZGNzVJNisvOWc4SXJFRzZweDVIbGpEMFNBQjFRQTdpZDJlTmh5RjBMcG5qTWJwam9aclpJWnY3WS9aT3RmYjgzOS9yYWo0c1NZRUUxZElwclNMbkVJajJZMWpVdmtGSGpIVGpMb1padTN1Q1k0cWlCWmMwUVhXc01zSTc3NWRRY3RpNnY5bzM4Y3lUR09XMUQ2Mk1mOXppcHZES2FJeHhvMGxPYVkzU3JwRTBTR0Z1ZGpMR0JaUUtOZDlmZ0tBTnB3UTR5cXZRM21TYmJuY0g0dW5MVUpRU08vSkc4MCsvaWQ1aDNodEUweCs1ZXk3S0gwSWMwRmorQWQybzlwTDhNUGZzajZoTXRLK21UM0Jrb25XZ2cwdU94UTB0SEYzY3lSNTJWekoyL3hRRFN1M29DUndGMFZNMUxTakxRdU5zQVFpZ0U4cUZjaHFSc3JVMGFVRjM1SzVTTTYyWjFDSEE0cEs1YXlGcklpZURmd1FjZmZoS28wNldQQkZXYXdqbnJ3ZFNRNXNEbUE2Nktsb084cDJBdXFVS2VqdlZpVkNVMXZuS2FVb09CWHZ3b05tL3V4SGY2bVRmY010MGhBWmN6U0FGSWRUMUJkSzBVa0NibjJ4dzB0WlpsalhrekNWeWlyWSt6VWdDTTA2TjA0bldLQis4c2hCSXJCWHRYL0FJQVBnSEFid0FEWTArTGcvK1lWVmw2Z3JiMWtBQ015MWwrYk1XanpYSTV0dEtQUlY1cGhTUkxVbTdqbDRDenBFUmdHcmt6VUZyekFQYXF6Y3E1VW1LbEFMQnEyUGNqaEM1QW1nanZVOW8xejR6dVA2Y0ZHN3VvTEFHYzNlTVltcUF5VnBhaUlwSHU3bWFGRVYyeVl2ZVB0Ly9YZS85MDRHdUhwV2RuSGY5Ly9CMEFyZ1cvT2ZMdXovTVY4cjhWMVN5eU9wakRVWThtRk9mUG5EdS9LRmFZTHg0cHdLdjZzODNCZVZLNG1nUjMwUGlac1c2ZFltcG5IQUpvVVhkMzRDeUhNdDJrd1ZHZktidkF1UW1NclJmWWVUQ05OR09RSm5maUIwMkdQZ2NmeC9NNWhuOE91WnJVM3I0Y1d6c1IwdStrbk5QTmpFQkxjZFNHeVRReE5Cbk5sR05JQXN1eW03aFZjUW56WXJLN2V5cWFtc1RRb3l2bXJwV21PVXZjUW5jTzRCVktFekhaS3BxZXFYZlU0TTd6S3NCanJuYi9IV2lYcUJhYWt1SEJVNjhaeG9OYmxvQnQ2NnBRVGlGeDZwMElJS3pXRHEyYnVkSTh0R21ZUGs1NUtXaEtkTk1uMHhYYUdUdTBYUE5wYU5MQVVRT0hBRnE1RERXYzZjWUpqSGRiaFBBaHdGLzkxVjhKYURmcnJhODJ2VzdOdzhla0I2TXFqVmRLSmxwL0JESlJhOEczL0lPWTMvTlhZMkdrdDhOSDdBTmJCVnpydXhxa0RvTkp6RnZOWi9iV3JhYUU5Y0tCM1Q5R0RIQXJYbmxBaDVGZ1pEVzQ4Wm5HUmM3UUlZVVhTQjBVYjRveEg1a2lYZ1hHeHdWRmFobGhNR3JOVzVweFN4Wkg2MUxCSGIyMmNKajNWMTkvVXc4MnJJSGY4Z2NQNUJHZk5uUU1Sa0U2NHR3bTQ0RVp4SUE0d25FeWxlUFdGanRnRVhwY0RPc2ppdUhzbEtrc2RUVXgySldlK2xpdkpSaSs1NXN4MjBwTXAwZjFPVGpaWmhOam1ncmRRdGVrNC9xNXpiam04OXpXTVc4ejNKMHJWbVJUczN0WnF4SDNtYTBrcjd4QnBZMktnMnpPSTdqZlpMbkV1eEpNQ09DUFNuVWZ1MHFwMll0ejRFeTVhdGtMenowNG1EdE44R2Z6bzM5bGNTU1JmbHZhZ1YyOE14YlB5ZTRMRVpMUGczbnk1YVR4K1BIMmNYaWZYdnZPMW5YZnRQNnd6eHRyaVF0U3c4anJESVhlR2R0enltNWkvUjU2Y3dYdVpHbVkrS2h2Z3RaRnlrdEdnaVpyM1ZhNnBWaHN3T3UvbmpENVlGQmZUQ2dIblVJK01ZTE0wTVk0aWdsY3N1cWVOUmg1aHMrNFJKSUp2Q2JSeHI4Q2M3bHdjdUdGeXVPS2lvSyt4ampGdXQ1U2s1Z1dPTWFnYWttc3Z6NnpReFZMVjFuWHhsRUR4M2VtaFI0RVVPN1JPeWI1eENyWG1OWXRqUmNDUGVKMmFtWjNSRXZBZTI1YTRiejRmZ2ZCM1FGM3VQSEltbmZxNEZGTDcvZmozd1Q0NVM5L2liOEtpdDlpeGE4RWdQeUd2OXgyT2RxamlvZXFBWCtOWDAvOW12OEdyZzVGZ1ExbTVNVXQzS0JRSzZud3Q5Ly92Ly8rV245S21iK2l3TDBUQWhobytvRm5jbDEyMy9QM1pka1ZDVnFnL3NJUWt3UldWT2FWZ0J6LzRJMTltNkRvMUJQaG5YOHMxdit0WC8rbHJFWUY4WmdEUjFMbkQyNmd4aW1xeWh6TStBdXBNS0x0Y05ZSkJIRTV0RlBuSHdPdGJ4bWhMVC9hODE1WlJTNEpVNEVJcDRrVmtTVzM3THpDME9YYnJzWFNISWp2dmxJa0V1UGdCcjlDL05iKzEvdzdyM2g1ZzVjNGxQSGlRUHNOL3FZLzhQL2daVSs5M3cvcjB1RGk0VC95VllVcGxKV2NWMXNGcXdLcW9WTXJnY1hnTUxBK1kwSjhUWVUrU1lvRWFweWpMMTNGQVhGK1ppWWRtU0FHUHFYazlHdTloNmRTYkNzM0dXVTZpOVZoUS9Xa1llcytRTjJOaTVocFFVNmpjUVh5bFpTa0hOWVlQTmJ1ZXVqRmdvVXJ1STljRStTL2pGSHl6V29NcWY0bENmcFFUeVZMY3ZuSnpma0lIeTh5M2ZYVzJDWGxDV0QyNUFNTVV6RVYzNmN6R0huSUIzWkswWklZWHdIODVrUEJYSHg1dVlhdGxjamhYcFZrWmkydUJJZm91YXdrb2RXZkpzd3RCemE4ZCtONnEvUWlIVnFnL0tjUGx0aVJCV2QwK0M0SkFwUm55c0pEdmVZeXJpcWNtbVpvSmIyV08rbDJIaHZUeEV4QUVUc2N4dEw5SytWMU13dnA1QS85Sk5sTnZOdnQwWjNaczk1a1RyTjhNWjQzbmJHVzhhZ3drdktNQ0NNUTA3a3NVU3NFbVZPWVZlRUxNeWRqMGljVERJTlQwSnlsVDdFRVpscHBSWjBWWUJoTDM3SWtnOElBVDByRHFtNDhlYjRUSjBiRHJoUXdFbUJVNWFEZWFxY3Rib2NUQmdBYmRITWtSNUxWUmdHbkc5Q0Q4VmwzZ3NFalduVlVxTGVWT3dSTTRHRFlKbDlkQnRPSEJlZmpUNGxYdWEwN1FuZ2k1MU5HSFpweW02eElDd1R1MmhycXV1UndNZU0zUzdGSWVIcGg2TnBpc0NCVmU0ekE4OWtLMk5tRE5BT3RCNWxnODFpRXl0b0tnVG1Rb1VGSWlEdW5HcU1HRDFKUGxXdlI1cVRLcFA1dSszcnE1YlE0VHR5VzM2eGI1R0JZNXpKc2xhdkZXY09najdKcUpXZVVoaGdxckw3ekV2TFpQRHJEUENlTGl0ang0NThEd3o4TGdPUHYvdTd2L3VWZi9nVUEveXpBLzN6SDUxT0ljWEJrYzJXMDVVYkxqUm5laTY4REdnN2crKytVZ0gwaTlNeXJMV3Z0YXREaFQxMld2SUc2WEpVeDlVekRST3FuTU4vMTU0eS8vMVlHSkpWSDF6VTdjRnBUQW0vbHBheFd1MmZCU1N0OW10U3RUUFNYUjJtdkh5Uk1WUUxNSFZ0Z01OOS9od2NkanV0WUd2eGN3MWw1dVF4clRXcE9EWGZtQVozd0R1aFpkZnJMaWFPdjZKZ0dGcGhNc2Vrc0I0aHdqOVg5bGVleUxCQ2FCNEo2R1FDQ0x3REtDVEorNTJlZVBYaFRQdXZpVnFYSjFDRjdqc0hVK0hTaXdzcVZWTStGdzAzSmFKazJwaU5adGlWdTBkWmQ4cE40UmUvUW5uV1p5MHhicytOcWNBeTY0ZnpyQU0wNzcrak5tNkdkM1EvZnJud1V3bG5wUjFSYzBpNTY2TytPOTJKcXBjK3NQdU05WDJkODU1TzVhdWkvbjVkTlA0YnhyRlJXYUY0UDJJVWl5OXdGbkFXdVVPQ2dzWUJtcTFQS2l6L0RkZThUQzJrdWZaZWUrcG51K0pGMDlPTkZJdlVFcTF3ZitLc3huSXgrQUU0UFNwOXZmRHNkUENqY0g4ank4OTJ1T2taM0VvL2RCNU85N01ic1ZoN0RROGdhZ0YxMlpLRFVDUGRvdWowYjdybGlkdjdvbzBJcHZrbS9MRlBxMjFDemU1UWwrUTQrR2xaaVJvaUxIQnU3N2RUeml4VWdzMkxQUDUyNGFYdE90SnZNbTZHak5ta0NkU1ZMOFZIMlFON2wzdkZaMTdaSDhaR3NsTmlmMXFWUno4UGpJcm5QK3YvSWU3Y2wyWlhqV0pDa2RDU0tORDdNTVYzTTlQOS9Oak5tZXB5aksybVN5UEVJejNRNElqS3pVTjI5MWw2Ynd1NmQ3ZW5oNFJGSW9GQ282dXBlb3hxdjJOY2xmamFCZkpCSXYvM0xVRE1hMzkrODF1TVQ3TGpqeHk4QTRKNGVMd1orODV2Zi9PRVBmOUNyYVBqeGxBamowelhuZHZKSEcvT1JHMjhmMjZZM3ZtVkxKYzF6eFBtSklOOGZweTNHL0lmQVFKdlZEU29rd0hDWkttZkprOVFJSUZ6Y0dNTGFZUVBtcXlKMEQ1bVBLbmNBTEZFRTlDOGtwZ2R6aFFDNHVSNE0zVHlrMVpWU21nNkc2ZnlXTC94d3g0L0hkZC80a2lBOEVLT1ZHNVlFeWxMSXR6SGllUE1MSkhreDR0MTJoMHYxcFd5cElhbFFCN0pTQ0l4d0IwdDlwSEJIRlg0ZjlGT2xNeTlkOVFyaGRyUXlMVjdTdmN3L0NQSWtrNE5XNXBEQjBQM0VHWEtsQzB5ZkxETW4rRjRFWmRvRlRKVk13Q3dEZGw1TUIwdTlHeXJsSmZuU3loMldZdFFxNWNRSXlLUW9hVWh5S1hhOVl4b3VVMVRyTGRETmQrbkxvcy9UZDdiZmpYL1ovM2xmbHRGT0xwbENZbG9ZTElLWURONEVaSHloSkM2Sm5DcXFSREZuUFV1NHVCdEtVMlNGWjlSSENlaXAwWGtuUGJkanovSW9lWTBNU2V4VDEzVGVQUlU5a0NvQkFCbVZ4QjRTUTBFWmZmb3lhMm5GTEI5N0p3K2pTaXlGZXJvckZTMWttVXBHVUtLYU9oRDIzRTZLRVlDZVdJeUFXMzBWeHUvNzRvNGZMd0JRQlgvL0J5OEF3T0NWd1BLK0ZFWEY4elpqTjU3Ym80bVAxSGVHUEhxTEh6ZG9VeCtGd1pRaEFpWkwzS2VTMFVlNTh2RmNGNE5IVC96SHY1Z2JMZWJQUkZRRkRMR0FRZ1VVWjBYRmR4OTZ5cmxNWFM4TlNPRkxENVRiak1ha3BKT1o5L3JqdlgrWVJVcGVQYkRqK1QyWmRPTkFIenFMb1p0Q2pKWXBOVHRsNTVmcGhmVHBFc3UyVkM4OGMwWEtTa3dIMElpODlGekJITWVLSy9ZK0tLY0tIcWZ5MU0wOVhjV1hJdUFYb1hwZlhaTHF0RHBzN3Y2MUdnTFZhTXlSZjcwbTdDOEZqUmtKWjhObFZLU0FtaW1NcGgwc1U3b01ERGZwQ1VEdUFQaWU0bnBoT2J4azZDazlnYVlsM2NXdWxGNGtFa3Z1RTBicERwNGtkbzA3RkZ3YUs5RXZuTEtyNStPNTlMbHRqN0tpdTNVR1VVK2grTU95a3RpbnUyYWtCT2c5a0pTR1BZdnNlbFU1cDlCSG83TEVlQWxhT1VOOTRTVVEyTG1KbDgrU0VVbERUa3RST1lqMzZoNHRidTVaUXB6S3A0T2lMMWFLRmg5TXVVSFBsRDVLTUxYWGR4ZUxKZWxaWXJvZURFbWxlMkxIUllacFNkZFU0R0FpallEN2Q1S004NDQ5OXdzeFN1RG1RUi9wd1R2YStJdEFlQUdBRXVDeEViQWkrM0dlMk1kbGJ5NVF1cHdWN2JsYWdmSFBFMEFxMFJLTHBLbkVMT2FrS3oxS2pVWjNvSXdNVmlwdWZJK2J1aitxSWxpYU9lamxTZENuWUxqQkJJRGo1SzRRZmpTanBaelJlRHNmYi9oaXc4REUxSURnbnZKNm5XT29oZ1ppTEVWTTR3Y0NvY3pnTllEaGRsR0dFTElaUzF5TUVndmc5RERDODNuS1M3RUU4QlR1UVAwb3ROVmpaWFVBbEpZZytsNkVtTEFkOFNqR1YyYU81RGlXZDUreElwOTdVeDhtdzZlMzdVeVdsbElMMG9FbkZkekZZRVJTTEVhOEEwWGw3SXdyaTF2Ukw1V3VFWmJQRHV6NFhnSktrY29pZzVHQVBKV0Y2ZWs3R1UxNit0SkJZdGM3M2xWeERmQmhZNGxsSVpHdU9XQldPUWgrOEZEcEgxTnYrQnlGc2dpV0RFbTNmVmVtcmxpTzAzUHBycEdlb2RMRFVzK2VwZjlBaW15WnE5R2RvZUZHMGpYZ2kxSlJoWlNsVUdHS2tsT01BdFJyS2lBZk1RREVxc1dwUmdFWGxCU0ZCQTVaQ0NsSzRGa1pQQzJSVWp3TG1KdWlBdUNKT3pPVDRudVBsaXhNeVNpTGpNZ09xTnp4SlZxbW5pVXNUV0hBZDRiaWMwaWE1d0MzL3ZoRlZ2d2xVTnpRb2lodS9YLzN1OStWOTdLWGJycERkZ0NscHN6U25hMm1FakJVUnVrRnVCVGpKd0NsRllpNHFiQURsU3haUGtXNlpCMDc0MW5BV0RXTUVLQS92aEtRMkE4ZXNUUEZSMU9sRS9nSXpjRkg1Z0wwTENrZVZRZ2djRHhDODFHYUgrbmh4L1BCWTJtd2N5SElCa0xLS1ZQeWhqOXYvWG4zSDJFcENUU05XRWJCbEUwOFFlanVTazRMV1V6S1ZHS0JJdkNwTkFLS0hoaUZBSEx0SXNuZzhCRGpBSHA5cVJaQldOM3Yya0ZNZndSZWZObHJnT295VGVSV0tqK2FqdmFxOS9CRWRGUkpnU3AyYTYxR0Q0bVJSa0FoZ0VKcTJnR3p4TXRFaklCQzNkOURKYXIwRHBTbEVCbE5PL0FVUlV1V05PS0xFanlZSlZseU5WMktDNm1wZ05JZExLTkwwck02UmtyUEtpU25mYVJiVCs5VlBzYjBpbVRlZFh2bzR6dlNDNTJqYU1rRjdIQnBzcFNWUGVxSk8wUHhPd2VWd3dVMGY1VXMzckVnd09pTXlIaExBNXA1R2VxQVY4Z3dUSTFBOEh4SHhFb010L2pJNmxXWFdBMTRhWkppTHBERnVEdDl4TzVyVC90U2lGRWlBTEVTeVhDa25nTHhyaVNXb0lRVWRZSElIU2dtekJWWmdEc0xDMGhjVERTVkFJQ2I1MDd1RmhMcEppSUJkancxSmFxcEEyQk41ZXlrb2dMRnZQRExybllhOE5xV2lXcnBYWUQ3VE56NjYwUHNlQUdBandQaGw0RGhneEEzOTV4Y2ZKZUc2UXE1bmhvcEhYaElHS0J2MlBmeDV6Vlp0U3ZFQ3hSTjRjdVVZcERjTUoxdzdLUUVzdVVMQUt4WE5KYy9Da0FLRHhJMEFGS2VBYks2Z0dRSnlWUEFFMGxpMUlZb01FY0N4Mkp3eXhidkNJZHk5SndPK2FjODR3b1hHNWo4TjMzalJqL3YrSE1jbi93SkVuU09ZOUFIVURDbkEwZE9YZW5NVHVtOCszUytNS1Y2aVI2c29rUDhJUTdzZHo1cmREQ2ZTb2FHdCt3cTE0RktLeVRHUVN5V25RNDhKTGNWZEhWaW5DVGxQSmtNaks2di9JWHdtT2JSdnA0THlXUzBXc2MrM3JuU25vSkZObFpEWVFQbjNUZmhPSFdkQWU3cG5XSEtTMzRwNkdSaHl0UmJVa2pBbyt5cWpLNVVhRW0rdEZJNlFUY0JVMGd4QW03eVhGelNTeUk3NzZUWGVvNmYrNVN1dnJhTjV3MS9XUG15Ly9OUzlHaG51Q2FsdzVkMXFaZGIwWE9xYUJGN0xXcEdlbDVCOEZ5UlR4ZUwrL3U0VE9YVloyaHdiWm9YTi9JK0ZlTWduOHF1TE9wZDRDWGNUZGhCU2N4UTdKeDJxbUR1ZUkrUzEwaUJ4RDUxVGVjN0F6M0pNcnJTUXlwYWdFOWREOHlwRnlvTWN6VXkya2NKWk9YZ1lWU2xsZXNNVGJ5ME0wb2gyYWZpQ1lxenBnNkVQVmZrQWFoNjE3alZWMkZVd1Uwc1BzMk9tM2hzZURHQTN3VEFEd0g2VFVXdnlEc05LbjJrc2ppSWxGSkF6cDFSS081RWw0N09kMEZuNU9pSkJlODA0bUdMbGNLSUpRT3BGd0FTT0lnRGlTdlBmanMzdWM5N0VkRUpKSjBZZ1FqbHk1YThYT2hHTHE2dllQU0ZhYVRrRndCZkErUjMvbzNPNjNVQ2hIbXBEbFY0ekUwVkJXYms5dDJqamlraTAvbWJCVnN0MUR0VFZibjJYd3V4QjNnQjlFNlJoVGJ5N1R6NXJKMVZrSlZBQkZITHlzMDUyZnpUVzBNeG1EaUo4UkozdklUZ2E0TUk1Y2s5K1psQzBqeHYrL2J5Q0ZydkYvUXN4MURjOXV2S3VGRFJYd0ZEcm5Gc2tnSFAwWmY2SitsRlU2WmVvb2M2NC9xQ3V4aE1KMHZXYnRvVGwwd251MkhYZEtabi9iak1mR0ROaDRnOU9Gcm81Zm44WkRmN2NuVUdQa3Z5WGYrWEpoSUFDS3RLTWxpRmE1TW0xTzNTMmhsa091bFlwaVJMcUV3cEJ1azhzVE9TcVc2UEtrU3hqMTFjR0orZWNZOTJ4a3VycTRPTUlSK1hEaVNMck50T0pwOHM0c3h1cC91R3ljTit2UnJzaVJSMFhnd0VMelVTUHdHUDNXSnQ1bzV6blQ0eWZ0N2haVldVd0IwLzNzN0dpTHRadkJMQXg0SDBFNEJkT201WmRkY3E3RXhKWk9pbFFGbFNpb2xmVE1ZRTdhSkx2R2tlSDNYQXZ6MFFmNDRVSEU2cmNjM01FQzhsUE0va01ON1UxN3pVZ0FrWWJPa2ZnT1hBODIxK0FJUzRXUGhkYWZ6YmFXQ3dYbEJLQUFZYlN4RFFKeGo0eGVtSVc2UGhmSUdJanR0d1FHaENrUnN3dGptTDc1d21mUTB1SUphTUwwNHVhYUxVT0JlTENHdDhpNy8zSHdnd1Z4WUJXUEROZnBEWHUvNHpKUThBM2l4R0xFeHl5ajVqbWcwTHNMY3lNa3FsNnluREFrcEFIRXNLYWk1TEFic3BsbmlHTHBBbHROZ3NHT2RKS20vSGNlWU96Y052dFBMY2FINGVSSm9NRFNiWkNNVzNRMzRzNXVZdVpDRXdQQVlEVE1WMWhnMkdpNEQ3K05GR25KRVNaNDFoU0RZV24rSTRGaFNPVGlhaHhwZzl6ZUk3ZDltWnV6Z2l3elJGeEowcHN0U3VoMTZ4NjZoUkoyRStUK0FpWHJvVlVqNGRGR1V4NTFRYXBaUFhWRURwUitZNjRGMzJ6RUdxQ3REcWVEemFFVHBVQ2YxOU80Z2xmRmZUcTVEWitleDROZkFRckgzbWc2S2I5RDVkczNhYkNrU1g2U0o3T2xOd29LU0JHV1dkUVVpa3JNUW8wV1hBM1BpOEEwdzl4dTRnaGhlcG1Ycjd6blFvNmNBcEZNejFLRWtYTUFXOGszU25ZUWtWL2JLb3JKUXJ4dlh5QnhCbWFZMUxYbTZVVVlOUjVRclBualVxNm5xWlVFWk5HVm1pa0ljcCs2UnprWlZ5V1RRT1dINDhGVm84L01IRlJZQ2g5UmhYRlNUeDJPSGtHUWVSZjFWU0tmREl0Vmxic1RIbTFuRTJ6VzV5RmkycGtQUVJ3ZzFuWHR4VVY3S0l6U3hFUXp1dmJ3TGhzTm5PbWtNVWk1enJqRGVnYnc4TmtGbHFmV1hvWGFBRVB2T0QyMXE4bzQzSExBQkcvR0ZRL0Nvdy9uVXczT1hpWHduNHQzLzdON3drd0YwdU50engwZ1NKbUVLTVJCUUZCaWloYUhGZW8zeGZRRXBKZ1krOVNURGo3V1IzV2VxV1pNOXlCdGlueFFFaDdLUjJBenVwL1N4SzdWWGhyMm1jYTQrK3h2TE16TmZPVThudjFKK3pNb282L01xek9Gb0RQY2lSSGtTOHFSOFBnQm1KRXo2M3BDSVhNd3p6c1lqSjdlMS9kWmN5aXNVSnhJTkhHNVdZQ2lpVTRDYmV5KzVKYmZYelBLeUhKTW1SdUtsZWJEODFSUW1zM1RnQTZSVFRMOXBrSlJER2RmRllMTmxWaUxrWUErUTNYSTN6TzhieHBkTWFqTEFCbHZoMjQ2cHZxL2JrT0JaTm1aclpHcDcxSG5XODl0cWM5b2ZFUTJoWG92QWZkdWlKblNtMWZQcVcyQlBQR0xiTDdaejFQeWZLeGZIOTdReWlJRjJ6Wkhaa1NkUzBleXIwRXBUY01rVjZaM2FlVWdwSStZUlJMUmM3bGh2QkIwSk1VV0lIcFlSYThvcktLbEhYTEVNaVN4dE05UEdsSU1UWFd4Q2V1c2FqNStVenlaM0Vhd1Ivd2lsVER6M0hDNU4xbXk5WVgvbWQ5SWxtbC90TmVid0F3SDB2WGh2Zzd2K3YvL3F2Ly8zZi94MVRmdTU5VjVkMzBlVmV1a3lWdStTTGd6UUExeThCWTRKTlJnSk9PcVlnY2xxV2s4UkxEUThTZnpLQUYwRFkvTEE1VmpOZkF0elo4YnZtekMwT3NZSjROYzJ2dkc3aXJmNXd4Z1UvMy9wUGpDUnNFT1dJSVJNdzVBR0ltTExpbGpDeXg2MC9Bakc5YjZISVRkRTU1WVg3L3VBZUwrNHZrbmZLOHlrcFdxQVBUWHpzdkpnT1pnLzFxVTZHU2prd1QwTFNFSXlWeGlSWFUyU1I1YUkyUDE4QUFFQUFTVVJCVlBSYUJMdXJQcE54SkxrSllJb2o1OU1wU2Q3YXVIaWhCNkJjNUZGSVh3K3lpK1M4ZHlXSzNPaStIeWszWFVhWHBMSThLdHpCVXIvc1I3bEtjZGt5NnNvbFhtWjFFa3doTlJXUWYwam5JNDFrWjhBWGpkSWZnayttZTVVdnRITGJIZVpxOUhHbjMvSGRnY3hPWC9pbEdLUmtYZUNNWTZhUXdmalN3VFVRZHlzNU1IcVl1a0MyQkdWS3BkZVNiS2xrVWRjdjI5aVppRmVIc21KSS90M1dCWXAyc2pCbFd2d1JsWUJnTjZwaWNmQ3A1NEwzS2JGTU5PMUFHams0OEtqalhrdk9sUG5VeFc2eXcxM3Zicy85ejFtZjhVRnVOOS90empmbC9SNFlMWEZEUmR6ci8vclh2OFpOZjM3S0ptN3E4QjQvb3VVT3VkdzIrOVF4ZHdIcEJEVHBJNklpQzFpL284d0VTS1ZtZ2ZQbzRreGRESEtnR0ZNc0JFYmMvZmVmQUdqSGxQVjVzUFFrdVF5aEluaHV2VHA0SjNmVHVKdlhKMytHR2IvbGE0QjRaWkF2RHBMTGVuRmN3bzJxdlB2UDF3dFJMZmkyaVNUUWxQZTFtVEh1N1piWXlNdmFUSUxVdEFQbEtFUkdVd2ZDSlV0OEFaaUtLYlp5RUloMXhPMHg5elZaRUNBbEVBQzFZQlhlQUtVSWhEQnVrdC9ZbUl0eG1Jd2pzM2JvZC8raHN4MWNwNTFZMVhzQzFzYzlEa2xiVlRFZHNCM3g2azVNQjlDSWxON0JNaXBTUUNsTHBwUFVkeDVNSVEvTUlhUitBSW9obVllayt3anY2cEx2b3hJN1dGcDFHWm51M05OM3VUOENyLzY5bWI0TGhjSFU5UVUvOFpUR3JUcTVaRmpPRThGUTZaMUlVSUNVQWpLa3N1aHA3czdTRitCS04zSGJqbmRaTlBmUlBaMFhsZ0NNc0ZkMHBRUVN1N0xnTW1VS1NHNXlvSDhoTVpYQVErSUZKS05QbWJyTVErU1ZzZ3VWOUM1elFmZWszbm5YeTYwTEZGb0NrVW9zdGhLY0FhTGNrRTZIU2J6NC9wYjRoZGNNRjA5TThac0ErUEFQNG5nWmdBOEM0UWNDWVBBYVlHWmMzM24zakxsdW94WGptK1lTaUtkNE9Zb3M0dXNmQXZOQXg3MFlHTWxLbENHU0xvTmVKUGFCRzBpOEhzS0cxYUhZVjQzWUdSWDlESEJETHdHc0RmN0V2VkRud1ZDbWRBQXNVUEFaNGc3T0tIWTI5amMzeDZESFV2Q3Z0VjJlZktXUUNXcHNHRXl5OUFuYUdZb0xRNnRDTGhORmR0Qk5hTGhVcWxhSmxxazh4Y3V6TURKY0FvaHZxekJGUWViZDd6STZWZlc3eEFKVjhXQmVjL05oQkRMNDZ5RTFqTlozL3crcWZKVkU2OWNCUzNTK015K1Y2bGE1WUlRZEFHc3FXekZMSU5MMUlKYzg2KzVDZEZocVNFcFFRREY4N2hCZDNrOWhNcnZ4WmQwdWVHSkZUY2w5TXQyWjcvaWQ1MDYvNDkvMWtSNkd3Z1FzNGFSclNwVFRsK1JER1lvV0t6SnFyQUJPWFhNUXdObVZhc2xUZW5XUEVoY1RKMVdDUUVyeHpvanN3R1gwbDJFSk9VK2xCRXRBRGJLNFNZUHBFcE1zWXBxNFhnSW5DOWJVQWJCUDJZYVRuZkdvNTVJWDQ0a2xKSTE0QXFiMHNVZWRjWk5lVkV3Qm1pTGQ4VXRuaVR2d1RncW1HS08yWmQyUzlZRXAvT25NUXJqWHh3OEI4T0VmM092eUZ3UHd4amZ1aE9WTVBhZCt0MHdNWGlTQXNoeVFMNk9tQU5xUWRmc0lFRjI4QS9jbDltVGdJaEFqV1FIU293cGZBT0NHbCsvOVU4bnEzb05qcFg4ZXdQYnMzS09ac2NpaTBrZTBoNlVCd3crR1JJNjJmS21qMlFYR0s0TDRoa3c0S0tTZGpkRCs0Y0dveEFMT0N3dElWcHlYQW9rOUt1eEEyRk93YjV3cUtpQlpFVGkvRTd0R0dPS2RQcHFvWjY3eVhvTDRkSDdtUHhtckcvY2Y0MWlJakFzTE1LM2MvUTh2bHEzRzMybGVsbFRURHRRUVF0eklBQmVBcVVqUEtyS2lLVk0zNlNHUHFvUUE5RW9SWURRajViQXN1ajM0UDNUb3NpZU1kcUdEbnQ0MUR4bFlTVW5iUGtyd1p3QjhmN1U3UzdKSFhlYXI1RXJYZ0pkTW1rNFdUWEdRdmpza2MxMnA4a2pXS1Vqbk5SVXBCdGM5Si8weVdIaWxPRSs4R3pmbXNRZDlmMFY2aUxnenVRalg0REpnVG1sSWZCZ2w5Z1pBY25QeXBTRlNpb1lNU0c0U1RPTDZMdVZPSThHVlk4dDRpQzRObC9xbE04bXVCN01rM1FTNGFNcVVnaVZaNm5aTktkUnJkY0ZYTVd5R0l6N3FndGNBZk9NZjk3MzRIUUQ4S0lBaDNUeWpybTZiZDVpQzNpRk4ra2dmNmhrbE16NENKR3JuV0RJbDY0bGd1TEVBUnpCS0ljQjlQMTRBZ01jcThOUC93SDdZSEpmY1QwN2QyZkc3dHN6ZE9TU1BJVFk2QjRqZkIwanFQc1N2QUFURHd6RmkzZytveTZSWnVOSXhqWnh4RS9FMFZ3bnhBSVVzVXhjb0pFQ2ZPb1huL01yWE90Y1VmR0VPblhpbzQxTFVCYkdPZVRLT0JmWFlhOHpUK0hvR2pTZXQvRXJUSlgrWnZsVnhmZmQvbVgxWGRGaFA5TEdNTGtrMTdWSGhEcFo2a1Y1YXVjdW95S1ZNMFFLVzRrNkM2U1N0T3AvYTI0blFHZVQyeE5MYmVmckpkRGYvUWl1MzNXR3VSaDkzK2gzZkhjanM5SVZmaWtGSzFnVmlDRnlNTEVYcDhFVGpTdFV0b0ZkcEFoQnhYY3JlTDFDbUZBUVoxNTJiYktrY212akRkc09mak9jQ005bzF6Z3RMWmd6YzBjell1TE5sbHhsN1NUNFh1SkxZUjVUenFZc1ZHdTNPYjEydnJBT1kyZkc5eXp6cStGQ0xNbG5KMWhtMzZ0ak51MXRudXI1cm5qRFBmZUQyZkhkWStudU82QTF2LytNRkFHNTY4VUVnalBnVVVMbnZWVC9nc1dGS3dKRlI4bElXb0N6bWNoUlpBTzQ0OVFBVEtJYWM0cjNzL0NyQlArR1Boc1lqdlgrUlY2OENOTkJ4MnIwQUtIVys2VlROTEtzd2VtbHNuZktXUGE2YTh5c05jQUdiRnpQeVdCNmtqN3o4ZlFDdUpqOEl4SGVEVlNWVFJ5TnhkYTJYMFJGcTM4SWVKdHBjQU5LbndwMm5ydk5LQVdoUjdmNFd6SVVLbTVidTNtdkJ5NVRMQWlzYis0RFZpSy9EdS9YNEUyUlllWTdqQUY0dUE1WDlTWFljeGt2YkNJU2loZHdTWEowc1hpM2dnMit6MjNTS1laNHJ3K1Qyelh1NkJaNU1WcjAreVV0Tk9RcGx1clI1cVhrcCtKZ3RzdWdjNngvSGVYc2lIRUx6c09oc1d2ajBCeGJxanRJOU5uYkdEK0VDendkTGhMSzlPR3ZpendDc0xyTjNjcnV6Y1FWYWZmVjlkS1lzVGl6bWU5dW56cmYzU2oxVEw1WTdINjE0NjZHOCt3RGxFOFlOeXdVbmp6OVc0UHBhTVBIYllmbUE1OU1yL3VSYlkzQTV1RFRUclZ1eDBJMXY3N3R4a2NyNXlla0l4ZU9tSHVmTytHS2ZvMTRSZUNsMmtsaU1nRmM4NHJIYXQzWElSU05UK0NVWnh6SFc0RHB3WlcxNzFKbnU2ZEdkclRROXZhUkl5WFY0c2tSbmphSUNXdUhPS0NUd1VpT0JnSExqbVhKK2pkOXluRlB4QWlISWJlRnpPUTRramZzMTFVWHdZT2NjOExDNUgvRkJQRUpzaGsvcnVCUEdoMy8rN3UvK0RnRHZmZU92Z2tKVWJvK0xZNG5HRkg5WHZtVkpKbEI4K2hUL1VObC80UmR4OHlrSFRjUkhrWERSeDl2enRNQ1lnTjlSOHBjc2ZOV09aUXNlVzRpeUxUeHdZQkwzTmJtVnF1REE4R05QS0VRTU1peHlBNFB2R2dGT1d5NHFTczNjQUtrZllENmNRRTRtdytQUVpWMVZSNFErMHczRW4rSnBBQzdwR2xsOHFvak9RY1pxWlR3MVVOTWNYUHhwLzNpSDVKZS9pajhFaXcwd0dJQXgvUldXRzY5L21JNDhSTElLbGk5ZU1rUXo0K3VQK2l0QTJvdXNNd1k1UklYOG1qTHNjcXd3dHFodVlEc05nOWlOSVRBUUpyU3duOVdNUHBGVWxiTWNreFQ5QmM0UkhTUGF4Y2h5UEk1NVF4ek1zRUE3ZWM2RUxETWlOSU5hcUlqa21UV09RU3E1TjRRYzgyUWRSQlRLTzBQTXd4bi84L2hsWE5XSG10K3lGVllmWFdXSytxRU54dG56ZEp3Tnk0MkNTRVNsRVdWSFl6V3M0R1QwaXlXejAzbEpIRlhVOCt4SFMwMkFSMHNvUi84SlpuOVJEUzNOeEpqS2pUeEhDWW80RW5LVFFHQkdUdDhwVnNweXF2em5wZUdqdlhCUG80ZXJSMVdJUUdJQkUvQUV2QWpXUTRkWXphTFBwYTZQeHl0ekhoZG5nRWYvemEzS29qQysvSGlhWkQ2Q2pBcFlPbFIweHhmL3ZZeE8wYy9vWDlZTnVJbmpKbHdROCtGYlE3SCtiWXRPdHQyRS9qcFhydHlhNEIwQ2U2R1FobzEvb2plTWJwcjBFOE11cjNNbTVOeHUvVXZQeHp1bnlBSmdybmRpbWZFc3pPZU9VTWFUc2dWak1RWWpjQXRiNTN3ZVljWHNid2puKzFveHRTZ2F1eFlCb2F5YmUvN0g4ZFEyenRPMFlXL2h3SDdvelRHZXY0aXk3Qnk0djc3WEdlSGxMZFlrS3lZWWdmZ21Zem5pUGdSdFpRT01SNFRwZlVSb1htL0RTbTZSbVFkQ0k0UGhrQ0VJOEwwWWVoYjFHTWZ4WllKWS9MbkdlZHJRUkc2NVpxbU90dXZ4SFFIN2xoMkdyQ3dncHFaNkN1V0RCRGtjMnBCK2FPSXdqVnBhcUVua1ljZ2dzdUFlSXpnc1JGeFphLy9EeGI0TlBkUnp6eklMSzVkUCtwaU0ybEU1MWpNdnpMLzhJMXZ5TGlKL2lPTVlaaWNqanZlL295UkpqS1lNbmw0aW9jWDU5dDkvd3YxMjFJbVRDWC80TVQ0SEU3dERHUUMyb0hJREtRWS9PZ0NuNlMvKys0OXhreG1kUnk1NHJWSk0wdzdEM1AxNHpRQUpia05CNGNZMGJzUCs5QXY4NndQb1NsK1JoUTFsQ0RqYUZQelFURm5ZZFhFWXdEKytJWHE1eVFydDRqWVl0Nys4TTQ3dUljM1IzVHJqMFlrdi84bnN2dWNqMG9MaEgyZlhvSHE1WEsvWkdKdE03ZHlybVprazl6YU9SMXdYaHl0SnhPTzh3MTRQT3M0YzNaMlA4dndXbGdncWp5eW0xNFkrdFNVYlVUQysxTW5mMmt2QlpkSVIxRXJvSUVyTW5BSTRGWGxRcHNGdFg2Ymw4cnRiWnZWWTF2dEI1TU51Wk5QNWhmOFZOaWVRdDJLem5VSmV1Vk5RdmxNL3N5aVBjVEpGWHFjUFpmZTBsMDFkY3ZnZjFPY3pwRVRMOUtyUjBFdmxTMEd4ZkZlUDlIUEtJY3JRVWdDU2R4eHFMMlhYUVJkUGNEdFY3N0dsUDY0VmZzRzhaOXhtU2hlNGhkK2ZITS9EY1FiWnptNExISDBpNjZzYTNuYlFBbkhsZmI2OUV1T1k2aGpCbFU4bnpnUnB4NUdWdWRjdlpXcXpPSlNwUEl2aFRMOE93akp4eWhiZkgrcFhzcXNvZkNVUThHSWdNVlh6MUN5VnpEb0s1aU1TQjQ3SGJqVmVSKzBlTGZ5WW1zWUZ4RjJEdW1lWm9sZXVTaVI0Zy9kMWJIaTNoanYrd2ZLR3BLYy9ZVnAzMzV6QVdZWGxuRS95Z0xHNHEvTmpoTEloeHk4N1pJV1hza3ZBdDBQd3hqOCsvSU4vOS9hZi8vbWZjUU9NRndPLzRvM05KYXdJanc0c01sbkhZRGd0Wk0zZnpPTlZEekt4ZFlHVGpwbHkxaGROU1djVSs1TnZoZU5wN3RveGhEZ1YyUXQ5aGxuYUxrbDFFdVZpZWFMSnBSSmsyMktubGx1NHhYMUQzVTJJNlUrd3JFWERjSGkxeVkxQ2VaYThIVjlrUDg3MGgyb1lCNnpjVEl6eitNZFpyMVVuMGZieGl3OUkzNWUrN0oxQktaRGlPNkJnMWRIZ2xNSzVwZzZBZmVyS0hlOFZwWGxKdXJPTHhYY3JaNEI5aXF6SmpMZHczTE1vVFR4VVhiQkpYMXpHWGZtajRmTisvV2pkN3ZxWlIvYUs3NWl5djVRNUtVWkFwbVI4Q3V5NUphUXBRVkZxV2dDbmZUeTdLVnJjd0R2VGJSV1Zjc2M0cjNJRUh1clltWktvS1RWOWRIOUVENEllSXFNU2JnVzhpNzdMeTMrWjZFVzdnSXlQY3V1SlBiMklsOU9TVmFaSWNZYlltYVhuejUza0c5LzhHNkI0SlJBdkFQS3ZBUEVtR1NPQmR0T25HYnd1OG4ycXJCMWdDajB4NW84OTdsckY3blRNR0hKZWpHZUpkR1ZKaHdaSG1nZGJ1Zkh6dVBsaXdIT1hwQXZleFc1STdBemN5aFR6K01xTjkrNzVnZzJxMkZROTN0R1BqL3J3N2w4Z2Mva1RwblNlV1NOM1RxK2l6aENMVVMwQmhJQjlaSWdNWDdzVThWMXdxeXZsdHdIWHVmdXUvMkVGM3JWeXZRNmVBS05sNmlrWFh1ME5FaC9sWGk0L0JGb3U3enlGcmc0UFRBOGh6VWxoQjhDYXFveVRpZ3JRbGxNcEZlMmd0S0VxQk5KMy9oQXFZa3gzNGxJbFpUaHZ4dGU4cmx3TVF2bUEzZ3BLaW90N1Z5OFo5TFBjem9sTU9Xdk8wZTdRbWJQRE9icmNxUU81Y3p1a2xJWmRTYmZPZ0JmcEZZdlZJZVJLWUJreWhRekp3bkRLa0JLTHh2bUNYenBMc0N5a2FMRmxQNTVDQmpJcUdSSVdLQ21hTWwwamVXVVJsTkducm5lZW1GR1pnK1IyeUlMQTljUk9ldTRIOE02S1BBMDFndHp4MERCMEVFampoaUk5MFRIRnpoQ0xLVk1acXNxZkU4REhlSERUanhFN2hjKy80RThBY2U5MEQxeDIxbm5pTGdDL0RPMlVMc1pIZ0U2YlM0VUpORVUrTUk2aTg4Q3g1VThYeWoxbzBIbTJsYmYvNWNCb0dUSDkyZzNsc0MwOXljOG92dVBuTStPdURnRDM5Ykcza1RuU01Rc2lQL2tUSUtmM0lWNFNqRmM4a1lvWlh5U0VpajBReER4L1BoRHU5eTE2U0RGSFp2V3hSek9KTGNmS1kwdGpmSTlwNm04Z0ZEL1kxbmZxYXhxTU5aMUhFWTVqZVM1bUhKdFdMUGdwYnNHZk42R2xMa0JUN0o1d0I5eDU4Vm9MTVIyVUZBbVVDeUJTUUtRelNuRlN1QUJOZTFZUGRjMlo0VlVPbXJlc3p2b1M3YzZkVVpQdmd1ZFdaK1h1RVZUNmtZbEFFZXltTzMrdC95N3hJYi9yUi80U2lJRnpKOFVnU3VWZ2NnZHV6TDJ6R3ByUG52U2hTU210bEIxUUJhUjdMbmd5ZlZTb0FLNi9tN0FsbGdDdkVvT2ZUQ2xSOUlwaXNSaFNYWVhjWEZHSkNTaCtHSVdZV1hJdXRXVGVCUWgxRWd4TEYxdjVLRXJseDNqdEk5MldiWncxcWl1WmdFSkxjNDlTZ0ZIN1FoTlpsV25vNDVuMk9yNTBVRHFtaSswbVg4Ui9jQXJ2Y2VPKzkvZS8vejFlQnVCWGdmRXBJUHdsVVBiTUE5Zjc1NEl3cXNYUnFrTHZaRTkzUmxZQXhIL0piemVYKzRjYVUzbXR1dlF6WlhIZm42R28yOFJCY3VQUFFiQUtreGlYSGswSnNKK0Z1VSt2eHU3OGFlYWVCV1BxVExqazdUaWJRQ2pxalpaR1kwTWZlZU9kL3J5NUgvZjNzVmU1NmU0ZjBmaE5scm1sWDB3SU1CTDRmYWxJZ2lGSUJ3L1JoTkdwclBmOU9DWXBxK3UySktmSlQvbGRPNlVtT3FQUVIwQmRpZGQzLzFHbFpZRTduNmtmNmUyNzUyaHRCWENtc2d0OEk2bFFCMXlFem91aElFYXp2VTEzUEVTMlhlbFR6NkI0YWNVVW9HbEpMRHlpWWdTNitZN3BLVHVsRjNLTkxxSEZhamN0dkt5K0JmaVNXbDlpOHZtOTI3U0JIL1N1SHVweFZsdzFlWXlDd2NVMTZYN1V4Q0RPV3AxQnlFa1dLR0wxQ1NVdzlVNHlTN2tTRk9BeVlGa0prL0ZSb1pLcnFadVFWRHFtM29CNGtKN1ZlWStXUWg2eXhGQjVhSmtsQVFBRWFzTjgrRVFaMllxK3RKSlNQa3huWWlmSmVQUmp1R2Z0bURQdlVYV0xuU0t2MFVPT2U3b3pTZ2U0ZGp5OWNiY1RWVmpIUjBneHZUUDJ5SFBMbndmR2pzYys1WisveDZlQS9pbzMvR1BBK0ZWZ3JRazEzQitlVVIyTG9adW5NRlRHY2hBMS9VNi9BNkJ1VkJnZDR6VUErM1lTWjBKOFdHYU9jZjA5ZmNuNEtWaXUxSktFbzNnQmNIazZ4dE1DVDhzb25CMXpoRkpiM3VqZjd2WEI4TE5ETW9jNEhGYTFGS0tBbWtLV3FTdVhuaElRN05LTDdNZVpmdXVHZFhFUjBMNzdhU2hTb09zVit0a0JMWExzVko3bzhYS1VaL3djT3dNQlNQRWRVRkI4ZktvVWtwbzY0TU9KUzNyMW1RK2lNb1ZHakE1Qlo1YXlyaStKbUJhbStIU0JHQUZWS2JtY3VyOWp6eUkrUjd2K3gyRis5TTdIbzNxZTlINnlHbzZUbmcrVmVGcUlEZnRWZG8yTWs1MVJZZzh0R2VxajNuM3pLb29VVXRNT2tFTFNSL2tRS0t0TXhTK0JHeGFNcVROdTIvbERNeFQzOUpKU3BwN2x1WTdWaG9CTWxPNmhKNlFjVkVoWkhnSzU0eVZiQ21RTDBBVmtmSlJiVCt6cFJieWNscXd5UllvenhNNTB6M2VmWjkvVjk0cGZ5K0NtRjIvODQxOEQwT2YrOFVNQWZCWUlWWFFiWENxUzF3akFUYkl5RlYvQXpJdnZDaTErQjBDeERqeXpSdy9NTGhFOEZnSWJCVk5XTDdqajhtclgzSEZqTXBoRDVYWG9mSkl0YzVEQ2UzZU9PbG5qdGdkYi9sVlF0OVZUUWI0d0NFbTg5NTluZklUeWh3blVJRXVKQldSa0RHR3gycFN5Q2o3aVB1L3dxTXdIUldNaGtmMnN6MHYvckNEMDQwczN1UUlLNGRHWmVHM0pxd3pHY2JtNUxOZjZyMkpIdVMreTJ5MHY5K3ZseUZmekwyVVFGR1daMG1GSitvNnFXd0pOWGZOSi9IMDhVZVZjNkJ6OTVENStPUDN6WFgzZTRkQTh6Ti9hZGxaNWM3OTJLaWtRdldRZ1dNbzZTYXZPbjVrZUxTMHRHNUFHNlVzSEp4MUhJcTUxbTAxS0FZa3Y1bFh1ZFFYT3EvVEg3Z1JVVGtCbG5TRVdVNlpJVWFpbjk1RHJsMUdadU5MSkQvQksyVlhjOFM4VDJWaEpMMU5xWG80dnMzWUNQc0Q0QlBGd2ZObk1keGJnWHA4dkFQalBnV0g4bTcvNUcrenZ2UFZkdDdPTTN1K1oxNGs3RnJsTXg3OERFSjlKZ2c2QXIwdlFYL3hCK3R3b0F1UWhpWEgrZVYrR3d1WitDVWlHSk9TeHhiOE9NRVU1alFUOFEyaHg0NSsvL2d5UzVmSm5Bb0NYSXhLVlFrMGZtZTVqMFNDa3FIZENtVUxLU3ZtVlFnRnU5R09oOHRNN1NzVGYrSTlva29oZWdtbkJlMExzQS83Y2FlQVF4NVlPQ2VhK2c1bThHcmtCUlFWdTRROU50QnJNcHJPT3ZVOVZ0QVBranYyeEhzQjBwWmhJeVIzdmpFSmhOaFpubkE4OEdZS2Y2WUhtcVJYWXpweWNibDlWTXhyNmFEMzg4WjFPQVdaNEJoZjdNaVZqMzYrVjVBdEVoYWRYV05sMjdYanFvNUd4SUpmbzB0aitUcG44UmdHSkJXamtpd1pHMFFLV1U5VEFQMXJCU2tWQTh4VTUrdG5VNVEvV1E4UGM0cUFwL1lzc3JaWGJ3VWppV1RPdHRGQ0xmUy8rcGFpbUF0TlRSSHBtaFI2NlJITm44VDEzWVVSNlNtZmlrdEsyTG11U2JZbWlmTmVLZjkvOWpheFNiMDUzRGp0KzV0WHYxOUd0a2NVYzR1dHhlbyt2NjRhN0g3RXJwL2hvU3A4eXZkSTZlclVETUpSYlpPY1RZbjYvbmhuWHpXZXRtbTZrV24ycFFWSXZ3YXpyN0p4OWNyM1lNNTd0Q29DUmRvY095K3BUZzc5U2toN1o5bkJPakZzS2NuaXdReHdqNS9PZkdjalpOZlQrR2N2Y2VneVdMVjFlcjlCc1Bocmo0MWVNcHk2cnNCK09FSHNpOWR3UjhaeEtLWTM3T1BZR25tQVdXdHIyb21MT3ptcCtwMmZETWxGMUxFZVE4NTd3NHFkVXpnTFFaQWFmZDJJOXljeU02enRUbE1pQXBzeGlSWVFFQURHVlRJQjZUVlVHZDd6NDNEcys4NE1UQTFISXdQenQzLzd0Ly90Ly96L0FJSlZJb0RaNHE2eW5BK2FxRTBUQktMM2tVZ2JTTitnalJaM3RBRVFJcFpnUHNVdkkwRFZmSVdwUVdDYkFhSlQ3d3d5MnRjcitPTWVLYitVenBTV2k4M2p2SDFZYzQ0cVV1OE8zOXVNWXp0ZExvMXhHNVJNQzZpTWNQckhGYTRtQkdUVU5GVytNcDl4by85RVg5MkwyTi9meGpTNitYcnA0Sno2dTgvZXZ1S2ZTMXdkNlFPNDR1Z080UndSUEc1ZUxDeHk2MUdzTlQ1bUhtUGJtSlRpWXpGQTVOOWlxeHVVYjdZckM0OFA3VXVyT2RzYjNjMVRpaHpMcEFWNm11TUF4VGNBc1NTL3hMcjRiamxQcVRyNWgrVHp4dWZKbCtaZFdFTHkxdmF6NDh4SnczOVV6cHNJZExLTkxzdWMrWk56TjhTN2ROWTZsWDVLS09uaXVWRlpQTVNZK0dvNm4zT3NhYjFmRkJUK3ZBT1lRZFh4SzdNeWhFNGFLdUV5VkxyQXNzY3ZhOGN2U3BZU21BR2NmVnhiY0U4VUlsQlJOWHdxa1hBS2s2K25tSlZnNi9DRGtKOWNCYjc3RG9kd3RkOC9kTGJmNERyUStQUVRtOWdKQUN1UTRkZ3Z3SGlKT2Jnd1NFNUNsSWNXNCs4ZHJJTHdBNEdzQTdLUzJrdnY1S1p4bElpeWdrRUFMUlhyZTk0L1hBTG9ROGZNOCthQUxEUklqTjMvQk4yZFlXSExKMHlSL1VKRGlYK1dkNHFJM2RVSlBueEpIRmJlZU95aitsc0wyN2RxWmNydUMzdi9tWUw1QnVZK2FUOTdxM3BTUG1WdURQOEprTEJKVzFib0J2cjFiYXlIQWlONzFFY2Q2ZERLNG4zNGJwd2NheVlPMmVPSmM4WWNWZ0JNOWwwQTdMQTJaTXQzSnhDK3paTktCRWhVNk1BOUR0TUpJNEZsa011TG56clV5RWsrUXAwaDUwT1VoaVl0SGVPUmgyRENJRm8zcko1Nmx2dTY3Ny9oeVoxM3dzQ3g5UGo4K0xDZlpycUlFRDRGOFhBOVNVOGNpQlpiUkpZbVVIYjhNdlNWZU91eWFsTE1EWVdYUlUvd09pUGZFTTJhS2o5U0xrV2NIN0VxakVyc1NUQ0U1OVZIcE5Dd2hwVlBtWW1lV2ZMR1Nmc2NYZ2FaTGN5ZVhUWmIwbmI3bkZxWk00ZU1NOFJobnFBdld6U3pacnlPOWpkTDJreUlsL1VrS05MZ3h4Z2VCOE9rZzNpR1RBVjY2Z2RjbTVSS0E3QnR5UWRJQllMd0FJTXVBUmdCdWlrNWk1TXNMUEIwMXVySmd2UUJnT25hU20yUmZDNG81cHZBZkpmTWJwOHVpSWM0UDdtUE5tRGhsTkluM1Q3a0ZQNjcrazhuY0daOC8yYmw4Umh2VDhQWmRuak05dm1lRkdNdkdrRWhOQzlBVVN1RU82Q05ldG4rdUlCWTA3OHJxeWlhNTNHc3FNZW9yWkV1VFpmNTNKSmZIVVcyWHQvODFGVmltczMyRk9vQkE1SEpmUzFSVEI4Q2F5aVFhRzQreXE0U1lRMTFwSEFqTHZ6QmxLcGtYS2hwTW5TblRUT1IxQXFmTCtJcnJSSnhTRndPOFpEcFpzdFJocjZ2UXU4QjNwK2VlbzEzLzVRejM5UG00YStDNUE1WHlVYUlZQVlRYyt4Ujg4YUZTR2dIeFpNUVhvT215b3FJZFBOU3JEZWtGZHA2ZFB6RHVUNW1QcXZWU2hpd2xGb0JjWjRoSk9xOFNJc2w0ZXNFKzdiYUtBanpFVkVvc3p4M3ZnblBiZEpCZXdQbnVVT3J1cHVEZHNQaVVLY1M0bmtlS2ZWMVBQVWE2UUtXL0cwRGI3UHhROGFYZ2tNdDdacndBOEQrSkNUMXZqejFSREZNNFV1Q01ZNldEWEhyR1grRkViTGtEekpFRlFTRnpHais1U0hCcFl4b1ZyOTJRQUxYd0dvRC9GTUtWTUZEbU1MUEZOc1Ixa1MwQzN5bkhTNWtMZ0xtaG16eERZOGFzQVBtU0FHUGlDR0hMNTNCOGp3LzJjQnV5L0Fndm1FalBRSjd2UXpQeVprTWh5d2hYWWRMamUwU2ZiYTdzV0V3SHRPKzhtR2YxZnphcVdOQmM2NmNyeS9PaDc5K2JKdDNnV3pBNmFnN0czYWJWWTlRMURBNStLclZFQkhWcUorZlNTaVQ4aGtPbWlDL2c4cC9PRVBUSGhiTEMxcFRhQlZ5SE9qLzNLYjd2b3VKZDdQckNsMUJQSjFOMllTY3I1ZzlsdWJSYXVlSFJjNHY1YnRvVHdmaGxmSmZvZkRkaGRNZDc3cmZBcUZzWEtNdG92eDRXZFJ2bWtvRzVXNUVVZzZrd0N4VUJTREVDYWltWWZMSldSUUVtYWxxcUxLTndlMHV2TnR5TjVNNUt2T2NLTStxalFtN3JBaGwyRWd5eXloNjVudEdTeUVMSTZrcUVKQzR5OFV3c3poTExnWXhHcEFPelZaRUFicXVwQkl3V1hxUmtFaFEzOFZLNjRPRFRFd3ZqUGdxNW9XTldMMHlaVXZPVGowKzZjZzJ4TTMwWGRINHlwSE1BSHdIQ0ZuOFBORGRFbHo1S0orQW9NVDVUZzF0ckpLcXU5R0lLaUY5RUlOVUJlSkFIbmlHTklaMmJ5ckFiMEdDQTJSK24wbHpnNnZ6aVBvWjhGZVN3SkJVbE9HaXVFTy8rc2RUNTZYL3NXNkM1WFliejdwK1J3ZlAxd3lXYXRCMjJGcndSVnhzM09wWlhCTEVZZ1NMUUZBQWFiaVNCQzNEeG54TytWdTNWWGxHSnNhZDA1cFhadDQzM3d5ZUdoY3UwZEhPTDR2emVmT0hsUkFrcHNZTjEzYnR6TWRSMGdObWx6Q2R4bmZ3S0VXanFTcEVkUUFaU1BMTTBGWkNid0RuVW8yQ1dwQXhWdXNneTc5SHA5a1JKelhMMFRvb1ZwaDRGWGpvY3lKTCs0ZW1oeERMMG9VTDNjN1NjOGZuam1sd1B5azduanhhcXRJRldDNlBwTXJRa2FjNUVDUUNFdTZkQ0RvUmRMN0tEWGxHSkFyc3N6NlhHeDU0dUJnQktic1FNT1FNc21hSVNNMXA0a2U1VFVoaWkwdldTeWJOb3VvREt3aXU5Z0RJdHBVdVVVNDFMY1lsNnQwdTlDNUJicG1KazJ4blpTdU5NTjVUc2V3SzB3ZTFoVVlpaDVNZ1V4eTlOZU12TXo4WGdVMEM0aWVlYjR6RGhoK1M3QTFPYzV4MDFlUitwVWRTbndPQ2YvZzZBV3hDN2w2SWVvb0JseUdNbnNaSHhOVUtVQXFWOEZmQXF3Z0tsQ3ZoZHFDZ3hsVEtUeHQwL1pjbmNCdVBqMC85NnRXRDg0Z2xBSlNqejBkM0JjMHJnc282N1oyYzg2eHgxNVo4TnhwRll2TlVNOHVlOGg3dmpXUGd5UGUreHhCMG9VU0V4QklVdjA0ZGlaUWtvOFFtekZKZEVUTWtJZU5ZdUpNME9NTkdqQi84aTgrbjN3ZDd0d3o1Zk5rYWZ6NDh2Q3hYQnJtS1IyWFI5OTQ4bmZYN3B4WEZPY1pHQVBqWVVJbGlPUGRvWkpiNFZla3Q4N3JOWWFlcEFXTjNTVS93T2lQZkVNMmFLajlUdkdIWWl6VkpHY3FsMGtpYUZLWVp1SmF6RWtydmppNmRrTzE2Q3BmK2hqV1hJM1lSNzZaNWJtREl0dlJYRE1pMWl0VEVBYnA4ZWY4M0hZdlU0ekV2blpYcElaT2hkUGJONEE0eVBBR0VEeGdzQStHQXJMd0FvNDYyeVk1aG9LckJyMWRPaHdVZUE0b1pINmdqanYvaGJuMG5HMVd4YzBaTDY1UjhqeGg4ZE1pc3FocWo5SklHSnVEWCs3Mm5BdmFLWXJ3U0l3UVBFQnVXRUpENC9YdWJEYTFHamFTaGx2K1Z1RVAyTkZ2a1VrRk9Tb2NlRkh3V2lScWhHTFdDZzNPS3ZsR0dtQks3U0NNNXY2WVBKVExyNGVLVXhaeSsraDNMVUQrVTVjVVJOLzhMOWh3bVg1U2pUbDIwV2ZVenJxb2VIeTNvOFZocFhwWFd4TGwvckxsWkdBdDRCeVJHS0U0bGJBUytteDdPb25pcjB1anZ5WjEvcjJyT2wvcjA2UTJIbXQyZzhUbWJKK1Qza0ltZXFQRmpPL0VpTWNmQ2VQckhaMzFLZVRQQ0FuRmUrV1NodGRUMk1oblVLWkNYZmhTY2xwSG1XaUdKUjVwbFkzZytCOXVTaFBtVnZKVVh2VHhQZVAzRHB2RXdybC9teGY2ODd3VHJyV0wrektIR0FJaEVWWmo4SHEwczhheHpFbExqQThUU28zMTNqdU9ycVBINWZaYTZBTHhld3BnTTBaYzJkQXVwalBIVENrQXNDWDBWSHJndlUrMFhHKzNIakNBcVV1dVFWTGRPbCtFYm04Vlc2ZWlDNDhibmY4M1Fvd2hmVG04OWQrengwVU40dEg4MWV1ODJWZjJUM0U0bFdlOEVuZXovWG5qWVhKMmc3d0NENTZSM2NGZU9oeFB2K1VoYzhHSmJodzgxSDhDN29VeVhLaE14ZjR2R0M1N0Mvd04reno2U3NnRHA4U0tEWjZEYWU0ZkxVeEJ4L2J6UXRSaXRJbWc5YUdvNkhVLzY1NkhqbXd3ODA4Tm1tUC96aEQvZzNqL0hLNXJlLyt4MytBV1RzSWZQWkRVYUNNTXRDNGNVSFE3akhiQXB3dFJ5bENkQWY5N3pzZitUa1Z2aThjWWxkaUozazF6U2NHVkdMYjlMamMveXg3M01hbDZ2NDdELyt3NXFOcjEvOThpL2lqNlhQZnhBQUdQbzh4bjhLWlRZYlBjU0hoV0pQY2cvalJSUldIVXorK3dCWklhcEVMcmFzQ2UydHoyd1RrVERoQmxzMkI0QmFJTGswMFNVbWVjYXdsV3M2VXE5OVpnckZNL2hOdjEvOWx6SzVPN0VBRG1JNVRHZW54L1N4dUNzdGFRdWhoK0VoNjE1OCtNekNOMXQwRVVlamJXbStDa3hsbGdnQjl4cWdGd1dqdjc4T1dVNGpoWjBQZlQ2VGhXdFd1MHpJNTZobWFCTGkreVp6cE5PQkZ6bmd1SERsVXBQNTd6LytOMUxKOEt6RkZPblhDL3VNY3M4ei9hb1VXVHBxbzZmY3FmRUFTU29lOTdtUFZob0JuTS95Ukp3TlhDQ2FTRktMTU04WUZsVFo3R2I0STJmNEJCdjVHWjNtT1prY0kxY0lpVU05SWlQRUpzSFZlUG1Ud2NPOGVGeFpXTktGeWF6Rjd5ckJuWDZwOSt6YWZjWms2RXBHWXEzc0ViTlhqbFNjdU0wa2lMckRFa0cvaWgwTExSSzRibklWU0g3UjBuSWQ0dWpsRTZEU0wyQWVYSkJSMFQ3aGlaNlhiWWlFZ0sxZnpOeDUyZDlDNDhudzZnS0lWWmExbHFRbjAxd3lBYmNGdm5xWWV6U1ZmT0NNWmljNUtwUXAyVmt4UExIelpVek54V2ZweFE3S3VZSll6Y1hKRUd4MlhzWXM5MGRlTWRCSk5uTTkrMENjRFZ3ODA0c00wL1FaZzZZRGpPc1BacFJoRkJqMm1aazh6cVE4LzFNYzYwQ0ZMMVE4QU84OG5lVlA4YXhTU3NRVS83dWg2MlVDalRuazVMNmJLVmdNV2pTdUZSVE9NQUZWRk1VZFpleDVtdnRvMVVGSHp4eGhGNU1aSGpoaUNia3lDTThUTmJYUkF5VHNKSExUOE9vaFJacW1CL05peERNdm1QRFAwelhQcjluQ2ZEek9lZXBSUE9ieGZ6bFNaTUovN2hGd1RILzF5Ly82ci8vRWZmTC8vdC8vMS8vNVAvL2Y3MzczdTMvNWwzLzU3VzkvKzcvK1YveTF6TXhDZDlsRnBOSVpleFJCUE9GR2pKV3lLQVhJaXR2c3VkSGtlbmFHS0gzaUJVQmMwbGRiQ2thOUdSOE5ZNm95QldnS0NXUW9pWDlaREo5dHd0My9YLy8xWCtlL01uYjk0c0cwL2RSMzd2eGNnck5WdEhUZjF2dWVHb1c0MTllKzUxR0xxVjRuUUs4MnJBYWdUQ0NKaGNZNWd6RmVHOFQ2ZVBUZTEzcUdsQ3Zydk12bjZOcitCMk56dVhnZXpjN2FndUY4SzN2YUpETzNmOCtiallPK2hMajY5NGJDRkR5MjhSZ01sSE1NY2F4bWtrZ0dOUldnZnFhMjc5eE5sdkxnb2l3V3hGMkpiOHd0N202Qjc5bDFLalZsUmF5b3dFdUJsQUJQeE5nUnliUlRBbUdTamtPVEN4YVl3SXRSWnVQbVFuaVZZN2FxTjdPYmNpMURHOTZyN1l2Y1BOR3hDM1NaZFFHTXh4T2hwQk80YkhMOFhzK29WRlpTS2Q3NzNuUEt0elpUVUw4ajRkMGM3NmphOVRsT0JIOEIwd1dWaVdmQlJRbnN1dzRCVTdnYWhheHVtM2wzazdDRXlsUXlnRU5Jc3FJcDB5Y21TcGtnanRmRXFuTURIblVzRVVrZkZTcmdSWHJjSE5makFnZDNMZ0tmdXF6VTlhbW5PRTk4aStZRE1rOXBOTVpiSnAzaFBNOXZmTXA1RWJyeDZielFUMzZFNWhUNys0djVENldCdTFXY2JaRDNNVXhtVkliWG1YL2JMMGkvYU10S3ZyUHdWWFhXR05Ic1RkRmIrV1Z2U2NiZDgxdGJIQUxVMTlkSTVyeXZEOExYRXFsUUhFTHVoS2hYQUcrTDR5WVpJKzc3Zi8vNzM2TjVqR0Q4bGgza0s1czR4NTdJNEVOWi9UT2dLckM4a08zY3dXTlRyZ0JJdmdEQUNJd1hBSGdab0YyUzdETmd1YmRPQXZzVXRjcVUxVVVLcUNzd3V3MUgzMjhhSUtNLzljSXFRWUdjeFJmbU9kOE5PN00wLzZsSUxORHpyMmh5Y1ZwOXY5NVhaL1Y4MGVDN3Nld28zekw0cXY2WGh4V2srQTZXVFRtcEZKRlBHSWdoNjByeUw2MDhVVmhBNlFRNy9oQTlwUFRRZ1ZGSW9QVFdwNjUwRENXbTNFb1d5TUtjcDhXa3B4ZUJTcDl0RmUyR0N2MjhBTmVoajErNEYzMnB1L2xTQTNLcDdDU1pvdGUwZzZWK1NaWmNUQXVETEdjeVB0cDJudVlhRlZvV2RaTEtuVjY4eXdyMjZjNVpQaTRBZG43cGN4WVVOMDZYdGwzWm5UK3A2ZjB2TzFIZHJsZklPeW1raDRoTEZaRWZCdDdZcG5wNDU2TW5YaFhZZlhxZE1wUW1YMzhENFgxK2VHZExJdDcreHk4QTRONzRILzdoSCtDUHZ3cUtFVXlSbFJzU1RMVkp1V01nUUVnajlmRTdCMFJNRXlid2FTcHZWeTZteUVFcFpNUUQ0TDRmcjJZb0FPWUtTdjlWb0J3WXIrSVk1UTVLTmdNQk5qOTNNSTIwKzFhWXNpUFF5czFEemhQTGxXZTNDNURvVStHbDRiS2NLMzhJN012NnNxSGJHYmRXODB5YksvT1crOXJRMlpWNUxiSHNjVW02ODhmdzNNM3JySEFmUloxMHZCUjA4c0RzUXM0TGQ0Qm1TQ3FrOWdxanFRTmhaY253RElvZWgxVldIVWlzRUpreWxReGdHVnFTQjZ1RHZwVG9TakxsMU93eTc5bnhjMlhweEUwK2o2T05iL1RJeWViZy81NzlLelg4ZUluZ3ZzdStrMmNHNmNYS0Y3T0V5bFJLOFIyNEJsam5Qd0Y3TzJReEhRTGwrdTZBVkM2VlpWU1VZRG5LdVFNMTZZbVFGVnN4TGhQdXRtUThDeGlicjRaS2dOL2hFZ3FMM0tCSFVsa29SSklmVllaVWVtVE1XektGRG5wdmxjNHF4MjQ1MHNweFlYckkzWHJVR1dKbmFQNWtYR2E1WVJQRUZRN3JtcnNaOS8xemZ5OXM1Sk1XSG1sYUc1R1Y1S1AwbHlMc0JUNG5EeG51ay9IUkhmd29BQitXZ1Q5dm14RUZMaVlrUzhpbndFeGhMcWNpR1JyL0RnRDJoZk1TMWxUZ29VeDYzdnBqL00xdmZvTy9jb3I5d1k3MVZ6YTAvZkNvMWVuQVBSRXRncGpPNTh3TTFsVW15YXdoeUc5SWdsVFJFT1FYQVhtVWRzQk9RbkRjSUFqektTTWdxVHhGd1FnTGlIUkd1WDhlZ0NlWTcyQXlQSmJ6aUQ3YTFSZUhneDR3OTFwdWZIdVpPQU5MY2dZLy9sMDlDTkNyVEo4VVVFb0Jtc0pFdUlOU1Y0SmxsdnB4V1hFb0dpa2JHQWMzK2NBSGtKN2orQmFmTXFXUHpodEZTMWVhVXMvcFM3RUwrbmw3TnFIZXkxRmZSaSt4TXl3cFBuMmUzaDh0UGZmbTdKTlA0SDBWZE5TYldsZUNUdXU1VmpSMlY5ZDlvUEVwUFRwSksxY2VtRVBJZTF4V1lRbUZPb0JESVRFRjZiMlZ2WEFCYzhsdzhUMXg4c09ONG1WRlpNbnEzTFBMaE5rd3BnNndFeEk4OFkvKzh5YXlaM0VGT0RJSzdMSmxxSkJLK1hZOG5WVklyWXBYU014QlUzYlFsY3RRRjZqS1ErQzI3dVp0RjU3T251aU1KNUwva3RITExmdjVUQlYrVWdZL0I4Q3QvNjkvL2V2LytJLy93SzB5VG1DZXczUW1MZ3hDWUNoQVYzMUtCaHB1MUZDUHNmNklnV28zUXByVUhkQ1VQSlZGajFjenVOM255d0M4eE1FZUZrSDNmSmRodDJYSGFPS2tZeS9SZVRFQzBBK01ULzNqTDVsaWN0L0lZSXl2dVVGQ0tEQWp3MERUSjZDWXNMNFNHWFdOWThsK2R1QmF6V3k5VEhIdWc3N3Y2ZWwwZmI3N1BFdmRHVXorSnRDdEJkN28zeWowOHpVdDFHYlZqQUFWbW5aUUxlYThLOFZBUWl5bUE2K3JxSk96VG53dmdyZGs4aWttbW5hd1REbkllajlkTE9ZZzdpRXdKWEV3OTlObHJhRmRqa3VCcnFJOXVxMXJuZ2U0TkZ6cW55dDcrajczQXcrZU4xSlE5Nzc4dmJVN3MzbjZnNDBPQVJMa1draWYwcmNrS3RlVjBnaW9KekVGWUFxTm05Q1pUQkhUVFNrZWxZbVRzdlVVS2VtR1VTbGtOSFhBTERKbFZLZ0RORkRFdS8zQ0UzQ0lWK093elplTDFBU1RuK0ZkbWlOS0hzQTNKNVdvejl3SG93TmhKK2FOTjdzYmY5ZER4ZDAwK1RqVHhMTUJGd0NMRkpEQUdlTE9TRXp3Uk9ZbUpmM0o5Snp1RFN5VlRnb0xQR25nb2VaYmVMSTBiNHd4NHYxeC9CSncvSHJ2TDM0QmpESE8xYnphWUtTWVIxL05hQ3F4eTRDbEpPL2oyNzhENE1rNkN3R0Vpd0E4N3BqeGtTYnNFbDdUNEpVQVhnOHN4Wjc0SEd0UlBNVkpZSjlDVnFaTVhKS1hHRXMvZnRrNmprRTQ0cGQ0NXgvMDBNUFdUWWhET1ErYll4WjlWTnFsaVdXSW1lT3pXN1A1R1JEdlBWWG5EbjBnNWJBUTV4TjFlYU8vSkE4bEhvYjZnVWFpbjFFU0NMeDA3c29uVEtuclZUemRNVFZrbkhmc0dubDJnVUlBeStpU1hKb3ZIWlRlZ1pkZVlxWFF1VStkb1VObmluTVJZT3FNWXhrV01oTG1KYWlZOStselpjLzlDWmg0dE1mdFZ2L0NIaSsvdnJESlhOY1gxNXVsWnJuSVN4TGRkbDVNQjl3NzhiNnpTMUwraUVxd0JCa2ZPN3NVTEV0TDJUdGh5RWMxNDhCdFhRek1xY1JpeVBkUlNnZDhWbmVHV09ZS09RTlNQREZIMXd5YzV5Wk9ScDJrSjR6RG5VWUxuejFQc2FkQTY5TWlLTk1pMXRRZHNuZ01oU3hUeVQ0R3ZMR2w4MEZ3MEgrc21VT1d0M0dRdlJYaXZ3R010OGl4NFQ0WnJ3UndxNHlmQmhRVHZ5RVJGcUFZVTI3S3hSU1lvMGdBN01qMUU0QWVkdW5NZjNHOTh4UWFvZ1kyL2xBRGU0VmQ0dDhDY3VWWFlSU0NGY2NQZTVaMHJGejhMVS9iYndpd2dRZm5RQlV6YmdrS1RBREJoT3Z2THdVbDdhaVBZLzh0dHhmNzRxWGZrRjVwL2x2V2ZoeHN2L0lsOHBYeEdNMSt6T3JLSFNST1kxOWVmZWFRdWROaHBLM3YvcGYyVjZFTEZiY3JzRUxlMVNxKzVUNmNTTWVlVHFiejBJc1VXTGIxVnZRczdrMisxTDhVZU05dmlYc3pMNjJlK3o5WGV0RURmc3Z3a1JnbjlPT1QvMXFyOXg0R214MWFtcnpaREt4M3U3bDd1cVMrUkVHK1pEYTdFWFJQMzRsWFN0L253SGp5MFRWdGRqVTBHZHA1QjcveVArbDNzYk1Qb3o0V0gwOWZ5bHhRY2pGVkN1K0ovRXg1bWFoMytvc3RiaExtWW5wa3ZIZnJGUEcyME5ybjZjcHZiYlBxSWJvUDRkendGZXE3OHJTM1JlYjh2TllxZEIybTFjS09ERy9iOGRMd00rUTNOVWRqOE1jZnlzZnRNVzZTY1ljTUJoaXZCRjcyN0k5bG1MaGVvVUw2ZEx3QVFLWW5NeE1qTnFvWmpjOUFUS1lBQ01Tb0FCaHNlQ21EbHpWODQ1OGZkWXBpMmF1QXArQkpnMUdSQlNpMzhLaUZrSThTZUFvRkNnbEFFeC92R1MrVllCVkhKZjdrZi93dHB0aHlQbTc5Y1d3UXhPck1Id3lFRnJueDdRN29UNTZqS2dvb3l2d3hwcHMwYkR0ZWpYaVZxUUU3Nm1aQ2lHSTFnczBuNFZpWlRBMlFraml5aVFjejZNMHo5c3dLMzRuajBwRHZiSXhVK3FaNVhqUHlWQW54Qk5nRjJvUFVZUnI2OUpqT3dZVTQxT3lmcW5CeXpXQ0hPR2F4UHJGbjEwWjl1bDNraGU3MzdFdnpTOHltY3M0aXJyODdqU1FlTHptNEhxU21Ba1ZaZUUwRnluNkJKME9CWkFMd2Q4R2hoeUpUWStEaEprTmhNZklrYytZVkJTRG1LQk1Id1BFd25GdFhTbndJVWNPOW9KUEVlcVlqYy9IelNEa3pjL21kNHpqelVuYWRoYmRhVi92eDRGbHRib0w0V3VUcklCUFUxUTFLYjFVeUJ6dlpscjhlWGRjT3V1RkxUT2VkZno3a3E4ZGVYSlV2NTdCYUwrZ21zNGo1b0lCV05nQWlOeDR2YUtYTHN5ZVVLbVhhOVpQQlF4Vi9mNi8rTVVTazh6TUdraEhrMVJVUThicFQzaVF3Qk5BSk1FY2F1dmtvUTllUXBKV0xIYk5FR1NXUTdaS1JQOU9oa1EvMVNpOUs2U25EMUFBeHhodmdJaytsb2xIVHE4VDhmcGNDQm9MUDhIUlkybllTWW02ejFjV1VJUk5vZDdUTHlDSU9NSlU5cXNSeHJZT1NENzhKY0I3R3Z5ZkRqVDduY1dwdktZVjB0K1hhT2duTXg0TFhoUU0xYVRXT2pxcTRFakpNeXhqS2VabnhLR2ptMHNwS3hOL3NSd2diQUc3OThRTUJBSDVrQmpMZmNEdU5EUzhTU05JVFlqd2paUHA0YkdZTDE2TllBbWlRaUNoTU1GNC9BYUFSeGc5c01FVVdSbTUwVUg5NnJrSlVvUTlVZVN1Rk83bE1PWVRVSHBzUHBYM09KNVl0QXpmYllNZWpZUjUwUDN0dTJqSjUyWW5yTC9GWVJROXVjSjY2bTlpWDBHaWwzbkNmZlhPMXhrME5NZlhPM3gyZTcyM2s0ZDhWdVJZcWpYVFczVzA1eS82dmE1bExGblc5WVpjQ0wrLysrZXFvS0o5TXl5NjhUUGxHK3FXdGs0NWZOdW1Da2xpbXJuUWNqeTlmNkR3ZW1Uc08xb1Z2aCtvKzBhUFVyUk1qSFdmTHcyWmE5aUI2ZW1jZ1haTHlWRlJBb1IxNHJ0dzVmQWYrQTAxK0lPVTc3TWk1QkhvdWw1MGxBeE9lYjBWOE5uOFN0WEp4UG5mL0pablBZN2NIaTJwdDlJcGY0TGtTT1JJTFhFYUdldFFaWWpGNHo2V3Nxa0t5RkFPQVl5RCtERElMRXVqNUpVeUEzZUVkbmtmUGxwK05ha2VXUm9mb3k5QVVjSEYySTNkOEY4VzV4d1ZSZDFJU2lBL0FpclB1TGJTYkZIR1o3ckplOG1jZlJzK2FseVdXQXR3cTQwNGRaeTkrR29CUHpmenJ2LzZyeTNoVzQxV0I3cWc5MmpIMXpvUHhLZkQxT3dDTVlTU1FUdE9NTEFZcEJaU0NOY0liLzN5elhGR1F3dDhUZUYxaU1UNFZxZDdBYUl0YlYzemhHbU43TVhEZTdpbkxnWXVkQno2RXFEd0lEcUZTNVFlWnZqendPbk91aHZPTXU2YjVsTG1RbVNJejZvbHU4UnNzVmc5eTRWeS80c2pIamVuNHdwUmZXUW5rQjdkM2oyL1JhOXBCYjZocnhGQmNwdDFoeVhnV3NUUExsRkpPK2dEakJJcDF6c2ZmdGVaYS9Ic29INjNwS0orVC8rYnhpRnh1M25CbkVBWHBtaDAreTg3UnBhZW5BUHVVWFpIczQ5THRHNUdscXlkVlBwQnl0dTByY0dhS0c4V2RMQXltdmZObExoT2ZpSmZweThUZXpMS0tjanVRZzBKZ2hCMElLNFZLOFIxUUtWNkpaSndITGxNM1o2Z0l5c1BQb3lya0FQcWxEd3RKMlgwS1U2Wk1YSkx5L0NyQUtsN0xNYXAwZ1VwTEthQ1FFaDBvNnZxRHYvUTc0RDdTaUJSUXlLL3pPOHluaHZrRVlhbHZRdCt2VlNmWEkrSk40N1VjdC82b2dnMEFMd0Q0VHdGZ0tqVnVUaERDbEcvMjgxNkZOekNPcFFjUVQ4Q1FZL3VCdE9kTkRLbHlKaGZmeFlzRWs4M0g0QzlROEFLQVUxYmwvbkJVN3ZjRUtsMDZFWTltZ1B2R0pzRXpyQ252UWZLRlFSeXFFTmltcVlBU0M4TmNrRXZlTEc4bEtPNHBydi9SY0Z4ejkxODR0L0FsQVp2djU5dHhwK0tZNU05azF6ZUlkdUdBRFUvTWNaNC9LM2V6emRkOXllUnJnR3Q2dlV0MGJQWWVqTU4vUDRVUTc0eVNVbjQ3NWFoWHlnNlFWMVNHQklYWFZJQlZ5dWk1UmVsVHlrb3VCVXVabEprWVIwb3lCOElwaTBFTHFaQ0FOQVNkRnlQZ0taMEU4NFRzc3NKMEU2L2I4VG05Ukh2NmQyTSt1Vi9mcmM5U2lBdFltdStyMmhuNGxDdzZMMG1LZStqQUtFU2dxZm9ISTdLRFhUTmRLWVpOeWw5QUFvRmlMaDVBMk5PWHBBdUFxU2xLa1FDeHBReGp2RUZuSTZmT0NLc0tRZWJkdUxEVmRXVFZocUlDNnZabTlGMG02a0hBeTRvVTZORVM4aW14bURLRjFUSWswbXM1N2o1dUpXdys0OTJmUEN3M2JNL3M4WXhzS1Y3d2hKY3AzdUZTY0hKOEZ1T25mYUFGd0YwK05yMEdjQVB3K09nT2IxbkU2KzZJWU56UTJEY3BBVndNSEI4YjhqQ3hjalU5YU9pQXpnQ3dPcnJkajUzSVR5YVZKU3ZUN3Z4VnpNTkNMZ1BtbElCajlKT0lvMGlBMFNxK0MxdjNGRnl5RENsZHdxVU1VVStVUnFDa2Evcm5BWFJheHRMeTdmVS8vZ24vdmpueFlVdzFjdUlyZnVFZ3dYYU1lL1N4cWVJa0huMkgvYlZsdFd2Nk9hU2pMM0QyazB6QTlTSUZQaG5kK1RoUHZHTjZWQzBwUlVBaEFKRUM1NmhrQXRKM2hpSHhBcDZ5SkNXUVE1RmhXaGdvbmNuNDdZVHlhUEZYbFNYL0pDb042NWJ4WVB0dTZNdjM2MGtEWlhjMGZaSzcxTUNoOE12OUtyS3VnVW5SdUcwUGRRZHBDaWhUdC9XaWtybkFTZUVPbEtJUUdVMEZDcTlFQUdrRUZOMHg1RFVDY0pNYnBvNUxWQ0VWSW1EV0xscjRwZGpyeWxOS010OWhYRmIwM2lRUTBONTFSaUYyN2o3T0VCZkczU1JZa29vQ1NDQWdzakErbFFQSlBrcndGamo0cUxyQVc4NEhNZS83Y1JNQ0FCbCtCd0FqL2g0b0dOeEZZMFJGRmNWVW16ekphQ29ncFFRQzBNUlBBRENuV2tESlM4QjhqZFRrM1g0MEtrRGUreForV0doWi9TSEp4V0pGMVJWNU5pbFpPRDFEajdjUjhwTS9OQUhCVmNOVWQ1SHlwME9wMGtucUlSTmdpcFRPTys0cHBkYlBic3JUeWRzZWpCWTNZenB6R0cxam5JRjVaTWFJOC9ING93QXZlRDBRYnV4K1V1OEk5c3AzSXpyV0FtY0h5UVNvTDFPWmtQY1JJWWtkQ0h1dVNBSWZ6M1hkUkJqQUhZcTVvZ1NLS2gyTXlBUG8rcDI0ODU0clRBQ3g5TThaS0V2aXpvU3kzZWpObkExZCtTM3dya1B3WHE0MDZTSGlMdWpNUGV2MmVQZkgvZ2JmczkrWmxYMVJ3OFdqTjd4anlCZmJMb1ovMTVTaXBSbnBkMjR1S0xtOW5ETTlzYVJMUUw1RXkxUmlBUWlJeFFCd1U0Z21taUphTUFYaUJicU1vYUtYakx4R0Z5ODFMbkFzaHk4SFhvVzRNNlhvUzFrWHlNSE5RWllwWlo2K0ZNaXRBRTljaGw3NnYxV3VsUERwMmVmUXA1dThpMkhMMnh1QStEM2YvRTFmZnRvSEdDSHdtSEtFT2NXc0FzeE5SU2R4NDExRC9NYnZBQ3hMcWg3YW9vQyttT0xEUC9ncGhrZ3BmeXJBRHBmVmx5R1EybkNtSXhGVHBnY2dUa0w4MHR3VHUrQ2I1dlp5UHppRGs2ZDA2S2NzUTUxNWtsSTB1K2xMY3lXT1UwSHpid0Jlbmh1bFp0RnIya0ZKeExScnhGQmNwdDFoeVhnV3NUUExsRkpPZW9FaTZDWkZ1ZFJMVTRDbWJndVNXeWVkQVlhc01NdnBXWGFPdmpUc3JiSXg4bVZjdW4wajhwUDd0ZXFLbDR2SHJ3SHlzbDFXNER3dFJTbnVaR0V3N1R1N3pHWGlFL0V5ZlpuWW0xbFdVVzRIY2xBSWpMQURZYVZRS2I0REtzVXJrWXp6d0dWS2N5OXhFRWlzRWd2d0o3d0pHdS9oY2VUUGxuZk0rTWt6bG1KK3ZnaUFYL3FVa1ppdThkQVNMOXA3UUhFRitqb290UXRLQ0ZOUGZ4SjEvY0ZmVmp2Z1B0S0lGRkRvQ2ZoTVArN3ZQc3RPbHFRN1BNZjRONzl3d3d3OUFPN3k5VUVnL0NZQS9qQW9lUDRjUURkSUFzc1NpaEpnNUVheFkvNFZJRnhBY1VMdU5wNnI5UVdIdkFDd0VQekpoYXl4RCtnYkcvdW1tT3NGRFZOSTNrZGUwTy9jY1liSDVPMFB4Ui9GQ3FJVGJTQnovL0hrOEN0K1pBUXZ0TUJrSzdDUHRja2IvckZFU0pRUFJHTjFMcXFqc0w5bGhTVElVY1F5UWdaUFZFelN6Y21BL21YKzJPWXFmQVZtVG9nU3oyK2NmTE14bCtxTDNIRjYzTllLTy9LR1BkWGMrYkVFczY4eUpaMG5iQjRlemltcVBVeUwrVDBQMHB5TTcxLzArUjgwb04zdkhZdHhrT2RqWGFNMHFXUzJlaVAzc3JKN1k3clRkNzR6M1RFMCtRalQ2WDVsK1I0eVU0d1pwZDU3czVpZ2xiajhyK2hFK2FETEI5OWdXSkFsZW5FeXZwcmV6RFM5amlhWnlNb0RKc0huZ2RkMVBDcCtkYmwzR3ZibGVTY3Z0WDFmdWtVL0x0U3NlVCs2M2Fzem9ROG5QbWNwRHZJbEkvRXJNSjYrVUtkNFptSmZ3TUdZZnExSndTamVHejUyRllZYmY5VVNpQ1ZhZGI2b0FDVitJRnNDTDlNcGNKbGp1aFdtVEZWeHgwdXdCSmFGRStKUi81YXl0UHptNUFjYVlNb2g4UkRpL2tnZzhHUS9LVDZrV0dnc3ZqR2pRbWRtYWFTc0x3WlRjUHVlVDBoK2lNY2ZMb2VJSmZhRkxoL1VjNHNyc0VlNDc4ZTlQdjRBS0RiOGlVL2NUdU5UUU1DLytjMXY4UFkvb25pSVljUHROQnJBQmlkTWkxOUtydHNuVEtsMFdTSC9jcDdRekkxUjFrbGhob2MzSGFJcU91REVSeWh4eDQ5RzJSK202SmdDL01oQ1N2RFpmREM1Qy9nK3JjZjhFcXQxZ3QwMHJIaVp6bkhjT2RlVlVRdTN2eU9lYlNBalB0d1RoNWNmOFlrLy9QOFgrRmtMZXNXWmd4ZGpHUnFOd1RqM0lzNnBTSWkvU2g3dkg0VFZlRmNnNytBMVRSMlN3T1l1L0FuRklNMkNQTGVRUE16REJXc05BUTBOUkE0aXY4S3h3R2ZoUXc4bXZ2TGlHOStpaXlqQmtaYkEyTEd3elJwRUtnYXhRZ0Y0dWt3eVVoSkxSbkViczUxaURiUGNCL1pEcTJEd1JzczRJWElQbXhlVmtUMjNRTEhyZzFFelltYktTUGhsUEovbVVsOGVFY0pSRzRyN054b2lwbVZoWEhvdDRNd0wvMWo3MlZMdzJLK3hicXdTNDNET1A4Sk5uT05vZ3d3eUhXUVBxRHpTQldicCtqMzArZWdjSnBsUEVYNWhZanBmKzRaRnc3OWVrWUlzQVRSclhhbnpxakdZS2VEcElSbkJOU3BybkROaG5RMzQvZzZHL0lqT2ZpUk9FT240MzVTVENZOHNHd2RoUEZLR01rdVJISm9JNFAvWW1EU3F4WDVmL2htRkRrdzhMc2ZqYTByam9ZY3R6YWN5aUpUanVDc3lqbmpHeG5DMTRXeTNzbWhKbWRwcVdHUXltTHNyNHB1RFhTY3NqRXNXejdHY2xyMVo5VGFYSFRFZW81Vm9jSHl3WDhjNGp2SllnSEhVN3NrUnhQbHpKOCt6M29PZE9aRXFBVXRqRDY5TGs1V1NiSnlJbVlqSGJsNDNGc3N5cTR6dXJ2VHJkSlBUclExTVdCWXBDVTY3aTU3Tm1iVnFNOVI0UDNTZXpPVmYzTXFVN3JqK3Q0cHgxQW9wUmxVS29CdGxQdkoySThXeCt3QmNEVDd0MElTNXcrRXZvaCtjTFJIS2d3YytNRnNLaTVqR29vd200eHlpSmhLeVJCbXZhR1RSRFlnK3ZMcU02Ymkwc1BZOFpURmp6MWwyWUx2djRnRWFlOGZXRHFPSG9pb2VBRGtTK3dobDdGdU8yc2ZyNkY2aHpCK3lOSmlEWHQyeDZLU3Y3enFzQXJpZmlSSzV3QmpaQUloWTk3SEJ6SHNPZGpKVGNtY1l6Wkh0dzJvc1dpYlVCY3hhb1ltampUdnM0UW9EWDVCYkt2d1FCWVh6NXFveDljSHpFRElKZkR2RE0zSU5lSzhjOTh5UTRWTXpPTlpST3Y4Y0VINHM4Qi8vOFI4WWNYZU4xd040a1FDZ0J4SFBDaWp6UnBSRm8rMzBCVDEyQlFEcmpOdHorT0NCa0hmcGNTTUdFajhCaUQyUEJmL2N4cWJwd1o4R1lKZFFMLytoQnpZMCt2dGNuVytTbmZ2UDIzZzB5ZVdJVlkySmJjdGxvZ0xqOVpWWnVMSkhLSEs0K3pFbWQxMEMrcW96Q1luemh2S3lqVWFRaXNNVzZORVdEYnk1SWVVYit0OGI0bGxlR2x5U1JYT2E1ZzY4WWFLV1Zyc2RheTJCVjkzeHJ2a281Z0ZXV1FINENRK1EwbkZTUFNqSHM2c0lDMW1tVVRSUDVNNjdqMGNkdStZbExvbGxla2gvcVZ3S1JBcXdCTmQyalBjckFBUTZCTUJ4cFozelluTG85cjNRZHlqeFhrTTM5WU85dHN2ZExmV3JKdGNSOG1ibTNWU3RNZzlYNVhkemVNNG4xQ0h4S3FDcUlBclhsSjA1N2gwZ1ZVdlZhcGUyNG5zdSsrek5GNmFZZFo4aTBOU1ZqaVVRS05FeWxld3RjRFRCWTJiY0g5dXpHVWhzSllTMUovKzhlRGpZRnozN1NNMm9tTzdLeXRrd2tRRFJFNCt6ZkI0NEtqVVhXSjcvQUFCQUFFbEVRVlFHbUZHUjRBYStoM0J5TGpSWkdId054U0xqL1VadTkvaDFrbHVTVnZONGRNWkRocG84K2UvV3R6YTRJMVlqbTNudTMzZXFNYXhlZW9pNlhMb2N1UVRmZThSdTRsNzZ0Ny85TFc3OWVmVDFKdnV5bFhtR1hDdnNNa1N4d1ZNa3B1TjNBRVNkQVJJZ0NKdmNYRndZdkw2SWx4aXptSUNuL0lTWS9YaFh3R1ZUZTRYSGxDR0JQaTBoV1JWUVpKdzZ1Y1FvejVVRktKaU14bEx1NFZUcEw4RkR3NE1NcDgwaGlsQVJsTk9NdVhkTjNuREVkVzZBV0tQdDE2ait4b3NxWHA1YVF2eGs1djR2Ymk1YlBlL3NPYXFUd1lHdzU0SVUzd0dWNGoxUldGRUJoUUJJK3Fqb1FTK05ITVQwck00d1Mzd0gzVmIrQkVweHBVZ0F4eVdYS1JJVXc4THZ4QzV6TExkQ2xpbGxQODc0ZzdmM1ZRdUYzVHp2YVk4dW1VSmlXaGcwM0JudVJXcHhGUXNCTnQ4MU1RSWVGUzVaNGdrOEt1eEEyQk03V1pneTlWemdIajB6akVwVHBoOHd0SHRCM3Y4OUdjdE9mTC9weS8zdEFqV25SU05UcGs2V2tFK0p4WlFwVEJUcWhpWGtncDVZbUY3STAzZFJOMWxXcDRuR0p6NFNmemVBdXdpOEFPQzlCTzZvOFVvQXBmbkdQNER1ZkJ4UTdOSFNMUVZNZWYwQ2dEcVp1aGREWXJpQ0l0R2xQZ2hVTkpyK2hFRG5oQjk0NEw3MUpxRWhTWEVYRktiTDVBQWxzVE9lWG5KMTdTKzhwL3pJdUo5SUw1bVhBdXp2MVBDR2Zsekg4NDc4ZkUyUHBkSTc3bHJiRnd0WTd2N3RMVTYwb1Z5NFBUVlV6aDdvOU9pQVNUdStSTXRVV1lYbnRJd1UrN2dVRkN1VjZJa0t5ZWZBOUJDeW5CUjJBS3hwcjhKUVNoYkh5aE1kcys0dWQrbm02VjN3a3VrQzdjdERRSWMrUGt6dk1saDE4am5UT3lIejNNR1ZuOGwxbndNKzcrOFZuUmVBWlV1WExDdmhRdEpsWkRSNlMwb1g4Q2h4Q1pVcE5HQzRGVDFJdVRudTVEa3F2WU9Tb21rSHlDSlpRcHBLOE1UZk5TVnhHcDZmSUVxMCtQMWswOW44N1FLb2JnNVJoYlFhblZHSWhoUXNaVThxeXEzN0tMUXMxUFZnU0twdVR5d0NueEw3cUFaMnNsTG9lMDdaMGgvKzhBZDhsSWEzTjJEd0V3Q00ySG9udlBmUTZMY2lFTk9CbytlZVhnQklYYnc4MzYyZHp4OEFESE8yNjAwNzlxenZnNzI2OXdhc0RaMFFDeWdFUUxKM3F4U0dsRktVM1lHTVpHZUJpeDByL2NjSC9ZelN5YWJteVdDdDQya1MxK0gyandDQUtTUlBjemtBZEZ1UEJvNlAyeTAyUk1wOWZrM2szTzcrQjVGbWVvQUtyTk0veXBianJxa0FqY3Uwa0NXcTZSUGdWdFFyQ3lIaERoUXRJVTBsV0FLUXpuUHFqSHdFcU5HVUFLT0FCSGhrOHdzbmpyNld6SWkyVTRTZTZvcU5PZW00UjlXSkhLQi9raUw5KytEYVUrM3lFVndYUnRWaWs4dFJtaytDcGJsSU55ZnB6RmRoT011cVZ4bk56T3NWcjFyeEtkSzhmR2tFSTlMZGhBdndvaDdxRFNoYVVqUVZvRkxURHA1YklWZnBzblZTVVFISmxzQmxqb3Q0T1FYcEtjUStNa3VqaTBYK3lHRFpzTytnQkFMWUhSZjBxUmp0ZU5HTDN5bGRJTTNTUkYwSkZEMnRQTm9aZHk1S1RRWE8vbTRsNVJLd2pjK1BpMXNObytTdnh2QTJPdTZsOFZsNk1RREVFaGNBUHpKbVBCandUZ0x6cndBVmg1aktwY1FLcnltQU9zUG5sdkNxQlNQSStTNXMyTER2Yy9lbDNKZFBkOVdENzlkM3NFYXFtVUttNm5wdW9LeG9RRkpXK04yMDhQSUVmeDNNMmRCU1BJUGY5anQzMjBldnAwVVpBSzFQQ21jR2xLWHpCV2w3aTJqUncrRkdwcmlia1BIR2lLT1g3cGl4eFNvSGI5M2tySndkdVhPaFFVWCtGZ2NtSUxuVEhNTm1NaDJFcHFodG1zMW1EK2FsUFJDSUFyQ1p6VG5BV2M2b1JrWmR3MUJoTkZXaUE0OEtDMGg1WmhpVnBvTmxZeUNsM0JXU1FNQ3puSXpsNFFMUDFaTW53VTFzc1NXL0pKVzBqQzdKWHZvZ2svOFQ4S1pQTG8wOUNtWTYrU2NGajVyMmNscnFldGJPZ1BPem1SbjdpdS93OUt0SEtWR2lLRWhCVDNHR01qQzkrU0xqSHZRcTJqT0ZCSlJDUUVORkJTUXJGU1hvb0tSSVFCNWpZVFIxUVBHdTZFdXJwWUQrWGdYK21xcXh6c2p0eHdlOStjNlV2YUNneVBETTVESkZCV3IwRi9pakx3amVIZ1hRT0VNYzQ3d3llTlFOaVMvOS9VT3p4YlpQWmZYWS83YXp4ZkJzSXZGTG1icjZQQ2lQQ3hqaTFoOGovaFlRWGduZzh6OTRNWUNwUGdLazNnREE4N1FIME9hR3dOaW9sT0QwRXdDSkJKQy94Q0lGU3BreWxleW5CZDRWTVVadDZrMk1BRU9ZU2dPZ0tXVWUybUdsVU1DcGsrL2lYYUZ2eE9kSmx6ZE1PQytlZkdHVjdxMzRHWFdQckdkeEN0dEpTSkV6OE9jWEhnM0NPNURwaTc3ak53amlGY0Q0d25SK0lRUGt5SVB0UVBIUWk3OExNSWpvQVVUOFZrQllQZjQ2aS9rWWg1c0RQME91Nm1Ebnlka0JaZUtWNVVCUmdSNWxxQWpLZEZlcnlNb1VXWjBoS2I2RFhSWjdLTkdlRGtia0xxVUxxT3g4ZU0xRElJMHpqcGNDOWZEamdmbTRpQWZBeTlQN2pmYm5BK3BweXJ2NnA3NTNYUnpJKzZIMCtETFV5YkM0bTNRR3RrV2pRaElMUEFsSmMzQ214dXNLT3hCZWVpb3EwRzA5Y1JjdDZaQTVReXltVEl0NFYySXBvL2dISDEvdWJ4ZG9qN1JvWk1yVXlSS0t2K0tGcDhMOHdvK3VBRGdLYUJyTS9ZTEFxWS9sY3FGYUFzdUdHZDFwZGxGWUtVVkEvaDA4OGVsWjM1cmg1LzUvL2V0ZjQvMTBmS0tlNzZyckJZRHVmQVRVRHhodDBqTXFIbUQ3RXdBM0tzdkhmQWtJMENoa0NLR1lSbnhpNlMvL012NWw0eDl0SzN2RTlnb1p1L05GZlJmbjVxbzZBcEFNbkxuT2ord2QzOHkvS1JHUGVQelBaMktPWGsrTVFFWVh1K05aT0grMFl2R21BcTQvOStkT0Z6RFJtT3Q5dFh0UnIzRGgxTno2dWJLQTJsdVN3YVg4a3FWWlRsVzZHbExzS2NJZFhNMFpLaXRna1FwUFN2U2xlcGwzRWxmamNSUU9LY3RRSWNzMFR2TjdTNjNzSUNMeG1iaVVLTk9sZjlHVUtWTFdUSGJlUThzU1R2YVVIYU1YbFYzZ2hpL3hMaDBQbkplNWQ4RWIrbWNIOW02L09SMWVXdTEyOE9iK1J1KzN2UE1FcGZzeUxzbXpENk5NNU80VTJ3OTdldDFpVXFhdUxQaTVzaVQyNmRucUhJWGJYdkQ2QU85emU1cy9BK1l6dTNQSW5TR3NKNyt3RkZ6YkdPTktQSzRiSWdtV29aSExySms3OU5NMmxub1dEYnpjSUFBL1MxY0owdzhtaDVCN3ZmUng4VmRoN0JUcXVodmJ3TzAwN3Z2eGU4QUlBZUNmQ09BTnRpdUo2VUFUTFpHQTlJVzVmYlJJUmdEVXlRNVQzMlRuS2Z3RkJiVElIMXNnbEVCSCtwYWt2UlZRV013T2dGZElXUTRrSU5BSURmYUN1UnpCeEU5VjRtVnNiRklxS29Bb2NqbmlTSUhubEFLT01nK3ZweHY2dWY1Y2tqeHBwYW1iZVV2Z3FlSFBoakJGbEFLT1RIUzg5SlEvby9RQlJxSXprazNiRkU2VytobUtzOW5yRHBYOTFHOUU3UmJrMGs4eW1OdmpZdVdwUXVnZ0UrbERQTHU3dmw5Vnh1cGRqNzFicVhiM1Q0dlVqTE42bE1zQWVFejVLUFlTanE4bU5raGlBazNUK2RiZGFNWWVYZ3dQa2RZaEQyTDRtRkxGWlN1Z2tBTzFVUUNuUHNJSGlaTEp4Qm5YaHhqLzhUWGVmYng4SmwvY2lxZW1BcUhuOFpndGVVaFlZRmFNSlhReWZHenpFTERXMVhuSkM4bHBJU1VtOEdqZysySDNhRWs4VEhsY0RvS0hJWDZ3N2FIWVpRL2JodXkrdThOamVYNkdXS3N2a0JtK3YyN3AyTnQ3aVV1aSt5TzNSTHNiOVpJcEhZejIxMGs0WU1xZytGTEllVldVSDZNK0JlNGtQY0Y3TGVHZUlyMHFBakM5bUx2QWZNWVRsa2N6UFFpQzlCa1hVakZZSnVITTVYV0diaUhPTEQ3Y3RhS0Q5Rm9kc3pmdTh1emhldGJyK25lWnE1dDdwdXBpVCtKclBPV05mWWs5U3A1SmVGYzFBVlI4bTRuVHlKSS9zVFAzZ2pFYmFkT3JDOGpBcEFCWEtnclNjV2oyL2JBeGpuUUxuS2MvQVVid2hibFdLYVBVS0QwTDNsb3RBcnE1bm9hZTZGSHg3Z05TUHQ1a0pzYnlnNlJBSUVNTFhqSUtNSFpHSVFEYzd1UHpQL2hWNEwvLys3L0hQdzBHZ0J0czNHbVhRbEN5TVk1eWdEbjl3Y3pQNUVlcjJPQ01tOGJ4RTRDU3B2d096a3I0OXBUdnpIeWdoNGNwUllacFlUNjZwM3BVQ3B5Y3VNUStRcDJYaThnQzc2RkhqbGFOdWZUUnlIZ0pKUWtPRlJTaDhEQ3luVzFUT0x2S2tnWno5K2NaV0dUcWNHdTlibXJJV2ZlMkcvUHV2N2RVbkRKTFYyRVlCdUZaamt2dVR6NWRMcU82T2tjbE80RGlVS1pJN016QmphSG5LVkMrZFQ2RVBnNGdUOEo3Nmp3NXN2bzlkRDgvei8wdm04KzZ3M01wa0tlaUFncWRBVTdDdmVBUTJpZjlUQ0x2THRUbmQydWVLWEZ1SDVmOVJhbVg2UzhGTHdya28rOWxoMTdGY1RjL1IwM1A4KzBhZGZ1ZXp5WVE0Z0U0Ym1qSXpPbVZNcFdYZUdxc3p0ZkR0eDhwT0JuZXpqbTJmVmhraGc2Q28vRXRLQk9CVzlnbUJ3RkRMd1ZtVmg4eWgxeGtmY0RmYS8wc01QWVJiL3pqUVlxYmZ2eGlMVjREb08yWGo5bmxyaUVMYmd6SjRmb2RBRkVDeGFYelpNVERuUjhFS29rK1ZRZE9mZ2wreXhsaTZqbnVHdWlhcFY2a3dNN3drM3djdlRjdkozbzJlbEw2TFhFWXpydmtuYm5PamFWZ0dTMWszTUhoM2lWZUJzUjlscjRLUTAxV3lZVDRPVU9BNWRmOHhYUkVzUTNuY05DMjN5OStzaDlOY2tNV3Rwa2JEakhORFoyWDIwK0ZWT2ViZ3NQWjIwOVVaMHBpbWFKbkYzTVhuT242aDd0WkV1WHBRTmc5UVlydjROeHcwZU1LbVJkSkhNVDQ0dFJIOGpOMFBXTGtvOGJBRkxKTTJSakprT2EyU3k5UnlUNE54cDVxdjE2QlR4ZjhqZ1pZdE85WUxVcVZlcnNHZERSZGZ4Q1h2ZWhLR1VyWm1XaHZzeURpQmVTenpDcXlNdlVVaFFyUTFBdWRNVk44TFBvUGVMNDYyOHVqb3hUOHlhYmFVd0Z2UmFTQW9zNFFPeU9aZ3k3cktXSUVkZzVMZ1lzN1pvcVBSZU9oRC9nWHQrOHc5U2JQZHdYNEVBMXUvWEZmRFJrK0NJUXBjajJkM2RJRUl3RklhVWlLNXhRQ010Y0xBRkxTdWEvVUpQdVVqTi85WjVQajRzWlcxQkRFanVYNWVmQWx0akRwUGs3MjZPYzdmKzZBTmVXZDVaUHh1YTBybnpnUGphZHRzRTQ0eHZzSlZoaklMZ2FYWCt4dmZvRWwwQWlta0p6eW1zNDdkVjNmN2FZL3J1bUt3azJiNmpxSktIaHNyQ3Z4Qkh5R2dBWXZPYlI1aVNDUnpwaUFwTjhJK0ZsSzdBeUx2c3NVbnpLRkp4aVNaYWRJOWxFeVpUMEJwWG1seUEzQVNlRU9sS0tRTTUxa0ZQd014V0cxNmNoK3dqQnhKTnkvZVRveFJrcks5SjczZ2RrNExUK1ErWTFTeWtQdlJaVjkrNzZHTk9uTUMvTmpXQWZDUVh5VWsvK0FmTDc0NTBXU2YvZFRvMTlkNCsrQnppTzdiRkpSZ2RKVTRjc1VZakVkcU9MT1V5a3VXSklTZUZUNENmQm1xUGRSL2p0WkVidzV4V24wMXRlYjlsOG4xMHE2NVhLaFhGa0VaUW9yaVQwa3N0Y1NjOUFjUWw2UlZyM3VJZDNGNnNSOXVuK1IvWVRUNVg0ZDdncHdVNDBYQUdpWXZ3Q0FGd0FRVTg4UklRSHVWNWxxWjhFclJJQXhQZ0tFYjZVdE1OaGs1NWo2TWxJSkUzOE5JRElmWFRFN0hEbUtQelo2ODA5S1NDOHdlc044WG80VDRscDlQVFpLYjY0c29mOVIwM2pDSG1kSzdMZWV2d1hHYXZBYzQrY2E4OVRTQW9iQmpybjh3Z1l5ejZMemttU29wR3lxM0R6RExZOTZFV04zQm5QYjNhdU8xY3JmV2g2UjhabVNtS241QkZxZkNqUWZEcC82MXBmckNZT1NSVmFtUmNDb2E1eHhYSGJHUTU1ZVpLV2NUMHRXbVM2VnJuSE1vb1hSVklBeWM0N3pSVnVYbVZLcUFFVlpwaExNeTNEVjM3d2VUTHIvZzZTZlJuSmJVTFd3K3FIY3ZGcEx0QVhmZWZkUmpwZUwzbEFQc1RmWHUwYVlvRXpoTDRhMU1BVll1a2xKVFplSmNlVzQ3cTFzV1ZHQ0FoQ1ZENVZsWk5USGw0SmlxS2xBY2Zpem1mb09FbmNHTzl2Snp2aWFLQ3JRb3ZIR0ZnNStIbHhlNm1LY0RHRDhtQlRSeVhoVVpNandmMjQzL2I0dVpQRWc4bkU2WEx2NU1sMHBQdzVZOXJ4ckQ1L1UxNGFQQUdINy9lOS96d2NhVTdoRVNpOVQ4QlNMNTFROXhFOFdKSkxMQVZCZkJETFZDd0FVVUEySWdVdktWMDNwN1A2T2U1VWVCZFBKbmdoR01vSkltL3ZsZUpuN1A0M0VLY0d6UWpzZWMvelRYWE1yVWRBaDBQMU95cDR3VEp5dXIwMUtpVjFkR3JJQm5ydjlESjU4MjZsTVN3Y2ExTThqbFI5SDVNVVJKaC83MHE2ZmdFNVVpWGFNODQ2WldKZ3lsYmxBRVhEYVIrbExsWkoramtyY2dmd1ZBaVBjQWFQaWxTNStGM0lsY1ZlQ0thUlBNM2dKZGxQeEQwRnY3S1BNdTJmcG0zV3VCOU9iaVJzNTEyY1QvSWIwb1M1Q3ZYQWhsK25VU05tQmJCVWlVNmFTSGFKS0VWQldZVFR0b0tkSW94QUF5VDVLczh3cTBiTkc0cDh2OFBYaFhwUmQ3Z0x0N0ZLcHFMc1ZFMDljaHJwQXRxNTMyVUZRWkdXcXhFUERyam1udS9LNzRkSVM3dzh3N2hxQUhqZjl1cS9HTHdTRDRhL3pJc1VUaFFXNlFDRUNqTmRIZ0VwczE1RHpjbUVsZElaR1hkQngyZjh1K0REemxqUEUxSFBjRmUyYXBYNUo3anovUi9FNnFaWjd2WXgyRWt3aHl4VG1LUm1Qb25oMnhUc0hlRjdaZkhsVWpYVlBodmhjelZHRlFwd2xSK0g1QUk0M0wrMUZUanFBR2wrdjcvc2ovNjJ2NkloOTl2SEoyYXRUVndBK0piRk1KZkNLaDNTWG5YRXBKRThId200RlVud0hVSXBVbHBnQ01PWG15c25GZC9IRnRvUVlYWkxGZ1JxTTNFcFUweDVWNkRzQ25telBUMUcwdGowL3YwUGJXTFR2VU9WUVl0ZkE4bWdleEtWRVYzYkR6c0NrSkdyYWdWZnNVVEdVbGFrWFVxZ0FUYjNRR1RQRng2TC9nR2R4K0xsTXRhY0MzcmxJQVVXZElYWkdNZ2RkMWxQRUNPd2NsZ0lYZDh3VUg0dkdReC93TDI0LzFCUjNHWG9CZ0I4Ri9NM2YvQTEyRUM4QVNwTzhlOGxia3NYMTFua3FrVTVRL3gwQWhWbkFwenVzVnRBWk5rMExPSVNLOG50T3NWcnNlSUJ0KzlHVUJjc3FqMmw4L25OdXBQYnJJYjlSZWVZOStjNUdmSlFid1F5bE55YjhRenIrNTNUeWR4MHBHOUVzbkovUkdTMU1rekdsTXljak1TZU9MNmtRVHB2cjBEZnRMYXFjQjRCbjQrV2NLZjVCL0xQekxycjgrRUhVdWgvSTNJOTRqZEcyY1NhQVY0bVF6VVZReWhLd3ptWFIzQXVSUnd0T0pTTzh5OHJVeFB2dWxLaFB6ejR2QzlHcW14U21UQi9hN3N6Smp6RWZBbytVdDdReDZZMFZxN1RuR1g0N0NwbllHUnlxRzdtcUdkeW9PMC9IN3JaTDNQTzd1anQrNy9RNEVpZml0TmNKZjhpR3hpOUFkK1UwdXJPSDJWY3NXdGd2T3g4SHFKV1BhOFY5dzBNdEx3WEJsaWorL25ObDdwOGRRcFVpdUh1L01YdHU5Vno1UnZtVTVsTGNra3F0TW9VVVQ2bTdGYUM0cDl3Sy9BK1l2RnlIbDBza2djQm5sdTFsUDNsWWJ5ZDJyOXNadGZRQmYrV2VBUzYzOWRGN1R2ajJVWHowSHk4QThHc0EyUEFDQUw4SERNQ3llRnhnS1VvTGVRbU5TMVo4MmRXRFROeUhJQ0VUeWNRTEFPaXd3WjBZSXpBWUZDZ2JRbmlQMzhsTURTVzYvS3UvK2l2OGpnSTZkaXNJWkV1TXFiYk9LUFI1ME0zSnNILzQ0d2NXWUxBa09PNS9BUlQvNkYxOFlVTVVwd0piaHo3RTNCR3NBRmo4QzYrL3dvdXd3Y01nZi8wTGMveHAxYjlBV21pdk1Rekh6MFlRNEcrSzhhVkMzbGdpUFFwRlJocG0zVFN3WHVLWVpiZlpWTXB2ZzVvc0lNMXV5dk9FblN3MXhSazdGUXZEUmpNaG1KWlp5T0tQS0ROa2ppa3hlZWxGTW1WT0ZSK0Y0YWNlM0hPRTV6ZDFOZjc1d3VSeHhHWWMzMmRqY2NRdkhxY0tKMk9NYjRxeU1oZEZKMHlRMmJQNmlpSjhyUkp0ekxOcjdCSE9JSmJqdzN2ZVQ4VDVrd1pJWVovcENXN1lCcC9OY0lRYjUxSHNPa2dvTng3YUZoMnRwaklHejNYOFJIQnJ3aHRLREFmVkxjQVRWVWg2aVJuU1ZNQjVKK2RpWnQyNWdDRVdqc2RnSGtFdTVEeVlNaEh3RXNRWWNUVkEzdHc1MFh2R3prOTM5dU1JbHpJZDdWNzJXeVRQY1RwTlllOHdJMFUxMVhrT1hCTkQ2VFBYNk1hdlNLNHRGNWJqVEZHZms0anZXSnRzeUUvZEVjKzZ3OEp5NzZhcGZSd2R6dnkyVzRqRlhtWENTZDl5MER6MVBBcWVxMjVGa3ZFcHNHUW96aEFZNTUyVWhwM2VwL1hNcEU4cVk1ZytBYnhiNGJJdnl4U1NQU1VLek90VjRsRU8yUGZhZG8yM0pXTkJzemRlTU5zU2o4NXhQa1NETlArZUk2OHpLRHdYY0R3Vi9uSDhQVHIwRXNIOHV2YWEwOGxmYmV1Z0NPejNCUVVqa2FQNXkyMElMRVF6Q3BRcndGYkhpRWR3cVBrOEZVZDB5SzVrVWpabUorTXdEVm1jUy9sQ2J2cUVaanozNlk5blFIdTV6dDI1TmFQcXdZNW5ScVpnT256QU04UXhUb2JaQkVUeHhXVGM0cVpKN0I3NWFjanpscW80bVNZUFpoTkM1T25HZStPaVJnazc1NjhnU0x6Wmp3Lzk0OVlhRy80UkFOejkvK00vL3VNLy9kTS8vZWQvL2lkdXR2bFpJSHJpRGdFbklUQysrd29FLzZ0ZmdXZVZ5ejFSL1FsQUNaZXAreUtFL3JCUmd3Sm9EbE1BYkNoWmNyL3pWSTJkNitKdWJ1ekErRGJrT0UxQVJQVE9iMndoanhNcnRQSEF2K2VjTzRobzVPWW1NSW5iOXc4NGoxYllrTGNGckdrSHQ3S255YTNoNVJuV3lGdkt5ZnVLTFZPQ2JPYnhXQzdIaUNkdEllV3RmUmZUQVI0NlNrLzllQTJRQjY0WTNGcGxETmNRaVFvb1V4eVRZR1k1UmNFSlg0SzVxN2VTY1M1SjIzZWxMczVDRVUyY0hLS1pWNEtscmNpWDZSSUlLUGNBbm9oZDQzaG4rMUlEUVYrc3pwRzVINmxkemNKL0tDazhQcHdZeVgwWGdveklidHNFeHgxRXpkcW9VUmZLR2tRemZCUkhiTEhlbC9rNWV1bWVJZlpSdTNtV2UxRDU3a2kySkJWMThFUjUxOFN0dkJad1d2bnBFWGhxeEhjQWxTdnA1T1pLR2NwVTlCUW14bmp2YzgxSVRYRlBrU0FNMllKR0FHR0VoY1Y3OHZmQ3kxM281SlA5WGJiY3JTUTdoS0E1UjJYeUxvRHR1eWxmcHVjUi96SzduOGJJNzJGNGc0MGxKVUJEd0hnbG9FWEdXdk5yOUpxM0UwN0d3UUNaNDl1MzZhaXFicTZTZVlEQkt6cHFmOTl2NnVkY2xqS01BdEJyeWx5R2hIMTZOaS9SV09XNDZvelRNQTdEZ0RveEJVcnFidnF1ZnVmelRmajJORk9xSUg3clArWjNacEZ3RjVTVW5sNEVOQ3l5SnhydmhPbDVOSFY3Y3RzUkhOWjVaRDN2VTloN2RpelRKYW1vZ1Z1cjR2MzhKOW5QYzJlS3Zremg0T0tsNFZuUURjOG1jZ01RWmtwSjdOSE9JRVdrUUhFcmZKblNZVWxlUG5sRGpCTUo3OWJFMWNDK3dCU1N6SEwweE8rR3I3MzRYZ2lMbE9zMDZqbnVMWnlqWGY4VE1zdFdseVNhZkl0L0tGN0tRSXJ2NE5BSlYxSXB2ckJMMGdWTFBMUDR6Z3N1WDdjdjNtNFVjanpKZnZsVmVObmZPK1RjbDhnUkp0QlVmcDNwV1JJVExLM2Nwd2pLMVAwUGhxV29LMHVvK3hmQnQ1Z2U5dmRibFB0dW50Z3ZiT1AySTIvNjhUNDczbDdISjI3UUErKzNxY0dVTW96YzFDU21IWlBjdmdEd0hGcVRjUjVZRzM0ZWdiYlFDa1lDWWhYK2RnQ0ZaRTdzVEFscFNsRDBtSkpCVkVBcFlnUVV1b080V3ZGWitjN1AyVGdjSDc1bnZGME5WOWZCN3lmQWk3Nzg2ZHRWOGNqRUN2Q2NtV3N4R0o5MmpKUk9pbGxHTzlucnNoWDVBRWdqb0dneS92TktSUWhPSFJicHl5bHFEZE1KTUNXcDBOR2tOM05qZEFJTEZMZkNseW5FemhDTEtkTWlaaUdKbDFPbUZFMGhGUlVvVm9Wbk9qVStTaWFncURPT2FWVVlrc29WS0xLNExPUW1BUk9yckdsYy80V1l6ZlJ4VjZJcnllejBuK0hoclBSZXBUQXVWdGFQQTBxM2FLd3pKTmx6MlowaVZyUUQ3WEpKY2ZOU1FpWTd2Z2llV0MxVFJCTDRXRXB6bW1QOGhBRVh2LzFOUDY1cy9tV3BQeExFem5KL2wwMHgxRWVKUGRkbEZDZ3E4UCt6OTI1YmtodEhzcWhJYWtTTnBObnplUGIvZjlzK2ExN21aWjgxTXhKSnNYbk0zU0lNQnZjQUVwbVZXVjNkYkxBWTZXRnVidTV4QVJKNXFXcmdKN1F1NjRIZEswU0c4MDhTT1UyeEx6Sk95bmhSeG5lUXhkTTliNmVaaTc4QThPYy8veGtnM3ZWbmk0SHowNER5L3Z2UnJZSndHTGUvQWdRU2pqNVU0blNoQXIwQUFKTXJRUUx0SHY0c2hQcWVaV2s3ZURPMWsyWEx1QldPdWRxZXQ1Ymt1QW5BdDlGdXNKYWhIdzRjZzVqZld0bnF5ejJ6bTdUOUxzTDIySG0zeUxXbG5VWjNDWGZ2TnEvTEZCVkVhR3h2TDBiaU1xd21QdGtZRUNaUEVMYkR4VEsyWWtyRXJhNVN5NGcwczNnWkt4bVVnYlJzM1QvSzQwaDl2Q1IxL0lnajBYTkNFU3hkaUp5SGUxVkxjZ2NsMkEycWxaQk9FN0xrRSt5Y0ludEVZNkR2a290U0trYkdNbERlOXplVzlXQVg4dWVCZXBhQzBuR3YyeVIwUklGSHhqS0VKeS9iRW9nVHNDQlh1c2hTQXBuWFFTRXlwT3poc2s4TUJNcExFWFJoS0oyOE1rUVRweUJpeXJoSmNLYmJERVFMRUsweWt1Tk0yVElVKys0RzF4MHRmNkx3ckVGdHdjUHBaY3Z1UnVycytPSklwQ01seWduRmRkUWx6a0J2Z1M4M2YrY0x3ZHVCdENNMmQvdXlIbkUydHFCbkdPZEpuNUhoL1RUNEFvQTM5M2dCZ0R2dHYvM3RiLy81bi84SkJNT0VGNlh3aFFGZUVGd3NDK2NhVDdlekFKRWt5aGp2QWtFUmZDMENuQ0ZvK1lxazhCWDRDZ05sdUN5NlJHVEFLNXN1NXkvdFRwUENrajlCdnhZY24wSzZVTXl3TC9xUlMxK0dzQVRGdWJrOThHd3BNZzBQNmVMaDNZZDBEblEyRVpQZndIM0t2Y0p5elZKbC85RXo5Mkw4QnRLZHh6N2RDQzYxc1NzUXVkb1BQNEFhSDBQSkM3bStwUWs2VGx0STZTNUZSR2JGcFZ0Q2ltRHBPbGs2TW83MGwxRWtINFZJVThZNS8wU25LS0I3RTRGYTRSenBlMVh2WnVjSVdvT1M4MlBMaTIyTThmNkttZFhqZktLSzExMlJMZytQN2JaT2g1dEdqMzA3c3F5d2pNS3pGTmQ1dU1neUlOVkRpcGZwSEZRQkRzcDJBN2E2UFVvdUdheW50QXdrcHpPTHJCUGtldFM0Ky9wOGI2TGxCeGNPeXA3R2xxRlBpSHlhQkJseXdSQW9RMTVIYUhkRTVPdUdSR1I0N0JKMHdyUHNkMHYwcklKdjZ1QlpYb1BpdlQ1QzhBdkJ3SFdQRFJzSGNCRWtTeHhkaWNnRkE5NnpGd0JPbFMxRnBjUXJFaHpvc2lBeFlTeXpPdUc1OXNWMHBLR1Z3VkxaWlVuRjl1NjFtbmRYbG53V0JGTEJCNTRkcjJYL2JDeHRqNk1LY0UvdlAvZ1dHMzRjY1JzaStZV2kzYndoaFdkeG0wblRYME5LUFoyVHVYWlJIdEt6VE8rNDFmYTF6ZnQrNEZRNzFKd0toNCtlMU8wdElFNTcvOWs4YzdQdHNwZjk1dnVma1gyZk8xTDRwUXNGSnk4Rnp3bGQ4RnhFYWpCa00yUVpDRkEwR1JmNWpPMVJCVUczSUo3MFpxNWxiRXJXeHFYZXpTNzc1MmJlZS9rUUxEUEFZU3RSOFFxbmNlNGRuQkp6cS92QUVHNUpocitYMmhIcEhMbVcrQkxzR1pjMGdNSzcwVVZVSVEyRk9MNEVuYkMwRlNYRGFVdHdFdTU1aGZxaTFaMmw4Q0k4Nyt6alFpMmJocnJ6TW82TnNRWEwwbmhseUFXRFlIRjV0eEJLVndyUzdBUzVpdUZaNUxvZXJwQzNHMTdKWnluZzdVTllLbUFzZU9ybkcveTR6VVlYTmc3OGd3QzY2eTczQnVqeW9HQ3hBVTUvM0JzY3ZnQUFhVmtRNCtYQ2F3NjgvWS9mU0NnTEFKeUhtSzh6UFBVVHMzVFpqcHltaXduRVhTQnZCRmZuOVduMFYrVDB2UlEyL2hKbFRvdmFqc2oxckhuanBpK1RpbElxY3J6dEN6TzdETi9Kek9XR2l6K3J1RE1zTkgzR3hDVzRkNDJYSHpsZDNHeithVUI2NHhWWGZPVU1Qemc0bjNmdVpKV3dHVGNWYmhJMnJRTnJxYkFFbHdMT2RIdEpCamc0bktYMlBOd1ZnSFR3U0x6Z1BYQ0pkTERvZkpZdXR0REZueXlQWjhIRjlteEFiNStOc2ZrdjEwLytXVTF2OFBYaGRFVHl4Vlc2b3JtUm5Oek5qcHA5UllUMG04eWJCT2c0eDIycmFHMlNmRS9JeGMwbTJqcnZrOUJ0Q1M0TUljZzN4M3VpYytLUzhuSmM1NEhMRUlFbnNTY3VoYi9Pd08ra3ZrNzhmWlE1Z1hodkhlbHd4NCtiYmR6OTQyK0E0bHRBUC83NEkrNnhnWU5EMnY3ZTRIYUI0TWZ2QURBTVdsQ0JqV1NTUTFlSFo0SU5QcGlvQmpZTS9sWXlBNmxKTlN3QlFibmtkUVAyK2VFaXNIa2dCSVphR2tSTzFCU0xvWEdEWUN4aDU0RkEyUGlmWGJSRVlKRGpXZWhWTG5TL3oxdXMrT09pNk15eGs1QzV0c3NCYWxjZ05hVlBQTXJJSTVReU8wclRrak5FN1dDU2I5SWpSdzRIZ3hLZm94cGQ0YVJOa2ZDbXJRWmx5S1lhaHJraFpubnhnTldOVFphMCtXZ3hSak0wMTJoT2hmQmR1SHRuUGNyb1RJSjdaRWdLVkdESkJYeHE4Mlk2ZGdoSzloY1JjU01lYU15emNvR2tPYXBHblhtb2hXWnE1R0xOSWtJa2hJZUxPcHlhU1FFL1lpMWJWQkVMRkZrWU1iZzVsaDBDUitpdjJoR1RJeUlIeUZMQlFiZWxjRzZVRUhUQlYwWVpGUEZxSlN0T055UWxseEEzeG5OR1RGdk9UNVFRaDAvV3poWC9MTWc0WExtTWhZeEIyRjhXWm5SOTVQQXJlcm52eFNEb2pXcEtLNTJpTDhMZTRQVE5TVFFmZGJySS9sU09TNjZDWUhkK1I4Ui9xWEdVMXd1K1dRQkVuTysyOUFVU3dmTXpaQVhDWkJidVZycnlqQTg4UTJERUZrVklTVWNDY1JLSTRCU2cvamIxbVlZZ1JVWXhWc2tPbnl2RkVJbFRIOVYwS1hJa0FnSlQ0RjgvZ2dzQmJCWEw4eFRvSmhXTXVON2w0NFo3bC9hKzVTalZobVFTVUVDSWxJa05wLytBT3VnTW1sN2llYVp6TEJFMEwyZ3djSEFzTE5jR0hncUlBMkV6NHAzYUlHYlU1Z0xDNzl5VDc2MWlkeUNyeXBZRmpPS2gvQ21mVE13VkJQeXJSZk9QeXNQalI1UTNEN2VqK3RoNFkrb29rb1J0UGdrbURiejQ5MjJBeFB6a0FFZEpLUi9NQkVzYm1aT0EwWVhOZjdvcURZNlgza3cwNWkyZDBXU3EwZU8wbzhQTk5sQjdvSUpDWVBBQUJZWVJ6MHdYcDQxWXBsYkxlR2txaEV6Y1hjUEFmVDlhdkF3QUdhOEUvdXUvL2d1ZkEvelAvL3dQUHhrQXlOY0pLQXUzNVZnNGlQQjJrZUxVcENBUUdEakdDd0RsSS9WbXkyQW1RSEg4TU1LajdoWDAySy9EampkY2MrL3hkTWk3TUYxTTNqTEVvZnNXaWM4VmkwdFhYQnZ5d0JhNnNra0crNmtWVytydEhEWXdrcFh1ek0vcVJ4U2VqSFVCQWdGTHJIYnk1eFpRLzdheGxYU1RtNVBqTTRSWWROa3Ftbk11V2VlTGMzZ0YzQml4ajlleDR0d2tpTGswZW5oSEdIaUVMMlVmRGxtcVhVemRhUVBoZzFZamN3RERmbHVtZXhyNEpQa2JPNkNYaSt2Z0tuV2ZINFQ2UEN3SlhmNXJRbno0R3RjS0hQZFN5ZW1UUzZUalFWK3BLVlVTMENBMG84ZTlGUDI2S3lVaFFWd1BiZ295V3JUWVA2bnZOMnJrakgzQ3d0bVN2R3daazFJV3FMQWgrWUlIMWFkVkVNSkNEWWZuM2hQbTJnaTIrVHk5ZElqVzUrR21heEJXOWQrTTdlbVdTRHpKNXQzL2tSYzRMNHgrZVhSN0dVandJdTFFNFNPN01EcmMvZU9PSDY4RXNCd29GUzBlTkdvWXhEV0tqc0ExdmdMa1lVRFZWVEFONFRCNDRCVUdEeEJVUjRuNjNYYjVwWXU4NEcxemdFWGlUK0xYVHZjdGVseHI4bjBnMkMvL0tZbEtOd3BvWCtMdkNPNXUrSlBqdUhmSTIrQ3ZXTnlXenV3SXZBQUhKODZkOVRScXNNV0lsekVqWk5OWjN2MTdHZTlsYzF4emRDTXJucjN6SjdyRnRhaXJuOGpsVW9JWVJ3cS9kQXVaK1R4OFNTRHR2RDBTRVM1RE9vN0lMZ2E2UWhpb3Jnd0p5amgzeVJ2YnpRN2djaG44UVUwVzMydCsreENLWmhjc0JFeFFSejdvck4xVFZoODRSM3Frc2VRdlF3cFQzVzRzdzcwQWhSQlV0eHNldGJRVnN2UUdtQmN1ZkxBK3JtQzhqaDIyaHpKUGN1VEY4N1NrV3VvK01jZXJVY3NReTVGQ0ZxY1luZVlpSUhlQ0ZNU1VJVmNKTEFUdjBoWlN1dEp4WmRoOENsYkxwMm52SG5GY3g2TWNkNXVham54QXV4VEpjWjNVaWZmNDhTMGd2dE5QTWw0TWFBa1VLRmtaY3NFQVAzNTUxeUhad21IUVpyc2tvSTZlbXdtdTNIQkk4NnN3ZkQ3eDhqeS8wNUYzWGJoSHpGdi84VDVxdVJXNE9IYmNqR3Fxc1NLdzJWNE12MG1UV2pjWUN4eUdhZ2diLzdlWG15UVByenBCM3NiZHBZeDR3MlJzSjdFd0ZTOUN6eFVjckVzdUNXbDhyOUtIRnF2SDVXTFZpTUh3RVRUV01PS21EaUJmZW1WK2Z3TmxvRnkySmZzUzNEZ2FsNHpObDFiQlN4Y1VSMmdMS2QxQ1ppS1I1UzFSVG1BSW1jSzdJU254SFNsOGRVbFdWNFpFaU1TRTJtWW9VU0xERUUwbmdCQ25mWEM3MUZ5NmkrSXhRYmNPRjNHYmNSMEJ2Z1J2NWZtSWZnNGtyaXJ6NkFnOEFKM1RFUkdLb2U2VTM2Wk9MamR3T1JQelNoYVNwZUN4Q3FmWE9XNlhrTkpOSnYvMWxmSE9lbHhudHlKUkxYOFF4OHAzOVJlMVozUkQzK3UvYVlzZ1k2a2dMdzExbmV3dUoyaGNBbVhJMVhYY0pXOEo1QTJNUUJsTHZuc3BMb1NHdXNQTHhkdFdNMkF1cnBZWUJtMjJESFNiaUZwM3dXYVhCbHVsVU1nSE1WZ3Fwa2oxQVBHdWNCai8vT2MvOVFrQWJyL3B3aGZFbmNOd3lnSjNBN0pVM3YwN0FHSU1PZlRuMnNqQTZ3eTg1Yzk0ZlByQUR5RDRTUVNpS09xdEYvUTdzSEYxNEwxWFRFWnU3M2dORU9icWhteGI2bnVtQm11QkdXYkxPTGZ2VVZwenBkWU5CY2psQ0d3dXZjQnV4THZwK2NHeFhMenRWbmRuSEYvTWp4TEZiUFBJclZ0cDdZekNRR285cThBeVh1L3l2ci9jL2VmS1ppbnpxNVd6cktjL2NzQmxLd0VFd3ZacVJzNVZuYkc1cG82N1RmV0NsQzQ0anRBV1VycUY3TlVyeERrT2l1eWc3RzRzK2VjZ3ZVZFN3bStLRkdicEt2eGVJL2J6NnJoWC8xREg1RU56ZGcvMXk4YWN0VW4vTURDWjNkdVJLZmtGUDJKUW1oQU9nOE4wY0E0OEpuU0ZiM2VsVW1PSWR6MFFPbkpwN29SMFE0VlJKQWhhL2hsL0ZLWFl1Q3JOTFVxeVFxWkdmZXkwMHhEdVNMVDhnWm9RdCtXdDZjNzd5OVFBUTNxT1N3cE9sbDBNZFJHVnRxTERrRmVHdXdYSzZGNjZSSkFoOFk3SVJiWHhsSnJQa3hqajdydGJjMm9IaUlCRXpqZzU4YWtUTTRZamd1eGc5NlNGaXdkanorM0ozUjQ5YWtNL2pJWHlzQ0kzeStFdE43Lzl6eEhodHJ6SEVuSGNiV1NKVnd5QTFMb0J1eDlJVEJCVklpVXF3SUdYQVlWNVpRd2w1R3ZwNmszbFBCVnlWUE91MUJDYzI4OFlNTmZ1R1VvN2pTNExwSUFkZ1VUaDdFVFZ3Zk5HL1BQQitmU0JLVG41VWNpalJxL25xT3pDVkxjYnJJVTZYTVR0UGloOWZEWjR0T1RINHJhdE5lTTdjcmJsbGljc1FNZHBDeWxkNUpWcjFsQ1JjOEtSNEJIZU01N295eVdqaDZ2c0V4ZkNYZUVvaERSbkVxR3k0eWU1WFB5ajJXVUlENVNuQ1ZHc2EzWXZhRTVRMUYzR1U2NjZkMlc4U0g1Z3ZIMDJPc0xzd21XVXFoeVg3UVpzZFJYcm9MekZZRmNnWW84UXlaNFlybk5DZTZuTGE3aHBKeUUrdXpoOW5oTmhGTzZ5R2d0QmIrRnlabkVWNzFLSG9Jc29xcXNWQlRHRkYrUkVBY3lUSjFaNXllRlRyZmowZWhkSU9SaFN3QytsZXo0MGpnTDMzcmdWLyt0Zi84cTM0OUhpV0E2UWFweVFyanhpNUJEN1NBdHB1SzVVaEszRTUrdTlGUHdHUGpZRFdxL0h3cTlIbFVTbEN4MXVBeGZzaUh0aDQySjQvYWZFM3V6MjdCMkJDTUFyVXVTSUxJTTRSZ0VrcnUzMXlCZUJGWHhCZjc3WXpQbU1TblkvOE81L3hudGh0d3JwSnpJUmozT2s4RXNYVVU2bVNFRksxeE9kMkNWSzNXNUlSQzRnc291QnJoQUYwampDWGEyRTBLVkFHUklzU0EvL2FBZ0tmbnZOUlNFbHR6T3BlTXNjdm1ucTltZEVPVUZLOStMNThzUUZXZzY4NjRzbW8zQTZYaEIxdXdFcGdVV1czZUpWdHh2TGNBY1Y0bUMzTDlKNjRFdVJvNnIyK082SmhpNFJaTXc2ZCsvK0Z2TGsxTWRPSzdLZElBa3haY2dGd3dNTHdidE9LMUZVQTRFY0Y2Zk5wMVMwT29CMzIwRjRwZU5NZ2NWd2ZuRjkyQzdIZFZJZTV2TWYvL2pIWC83eUYzQkFSaGYzNFhwM3ZnU2V6QUMrQXNSN2hoS3lkVlVLcHgzdjl5TVp2bldFZ3dhb1NLeVhBVnRrYkNBVTU4RDcyYmlVcjI3TnRoc2tQQkhnZzZyNWlWWGNLdm5sUGgzakQ2aXo2SGh1d0lnNG5JaDB1bzlyanZud2N4eWZrWmloWEFKWCtCQTJkMVV2NVFqdnpKdklFNlZtTHAvYmlaMCtZaDIzaFd5ZnZvVTNqMjVNVC9GSDl4MVhsS2s0YW00OFZhck42cFdHTjdkY2J1YjBNR0NBc1duSGVXTkNRYzdBMmhLVU42cEpoZUFkSEoyQWNDa2dpRGFqaFROcWpIT1Zvc3ZPL0s0M3NWSG4xcFdWT3VxRklVVEd6cDByc0hZbDc4UzEwL2xDT2pIMzJ3a1RSYzhCY25HZU1Jd3BlRlZxdmNCWG96OGNEOFBIaGRITE1tU0hPMGUya1lYdGpCTUNYUGk3a2p2MnZsTmpnM3MyL1pVUCtrNSsxOW1uWW05SFdLaXRZdTdFbUVJdERObFFraTE4M0NwczMzSVJKZWs3UE9kbVdiYlBXaVBzRmVNVW0zL3VNNjd4cWlSb3BQWWhOODFPcVFoRHpnT3ZlYjFDRlVpd3ROZzlKR3g0M0JYRXJncWNkajR1N3VhbWR6ZVFDVkp3UFQvZzdHSSthMmVPTkw1WmcrbmQxUkkzSkhwZm56V1BjU0hxNTU5Kyt0dGYvL0xicDEvem4xSENuNlBHWC9EL0ZkL0drWUtHV1dYRndMOHRnS2Y3Ny9PL0JQRmJCTGo2eEEwOWpoa2ZMeThBb3JSb3YvdnVsMTkraHV0UGY4TGYvL3lYWEJ2OEthTDQraEdPWkViTEZPVFAzcFlXcnhaQTN2cG1LWmJHVVlzSUtvQWdqdHNneEMxNytMWWZiQWNBeUl6YytYc01HRzcrR2RwUHYzMlBQNlkwUW5MejRYZHRnL3dENXZlNzczOUF3YUdVU1dIUlNQR1lsdEVIR3FFYVY0d2VFUXprS3djdWRnWUVHOTRNd2RxSGpBUWhnb1hQUUo0TWtUaTZNZVpSQ2VOdnRwcWxibmhzNXRvQTd5cFE3bzdJMVEyU2dWTVQzUmh6emlGQWVYc2dFYzUyOXlwUVVvTVRVeDRIdS9JS0FhNUtncHU4VGhNaWZoaEpWcE9MbDN0cWpHTWtEY0xJZ2VYblYrWWlGRmk4TE9YWVUydG1JUmpoUkFabHpsTGlhQVl0T2JTSDdENXdsaEhPMk1SNEdDMFU4dmtMQ2dtSENQMzVsNDZDRitTb1l0eUZESGVpUnczbWxqUUdNNzVVcTFpUmlTaEVoS1hCcUNEanVYQS9oK1RqSDVUZVNwMmltQWljdUJ3VTdCaFVzbVdFWG9LTWpWMnozem5FbVVLdGc4T21icW9OMmtRZ3VPQkxhOUt3THNMY3dHQzkrN0R0Kzk5RnZMWUxlRjQ2czZTeWpoNTd4YjZTOTRoRC9UR2lnNEVkeGVLeXVpenZRR2FjMkQza1VIOHRmNmpUbFlIZ2xQUjYzSVlyVHVIY1ZNUlppVGpoV29wT2NCQ1NOaFJpMStjMnU3RFhrQzRVZVBuQXMxSEl4bVVORHlFaUJaaXBHZlVteUIyK1k4U2VWMENjaWF3Uk55Q2FBVVlObklMejBrVHdZcnVKVDVFTVpJMm9BUVlyQ1J1dVdRdEhnZkVHUGNvZDM0RE82RlV6ZGRJWGs0Q2ZpQm1aTWt2WXpCYU80V0xheks1SzBwMnhMQUNCZXdOemdWZHNVZHd1Nzc3cnFjRThPYmk0SU1qSWVnQ01rcFJGOHhPK0dOUVlUK0F4VFFMaEROY25UZ0pnKzRsOUU5OEdEa0x3OHBqMm1HaGdRS2d2UWlLTGh1UVpBZ0xLR2ZIT3R0RTV2TmxNMU5RMmdpekxGZGhOWlFYU21PWEZqVGNRcU1WRFRtR1VIbEI1UlI0YklHamY0ZDhGKytHLy8vdS8vdnpuSDMvNjZSKzQ5Y2ROZUU0aXpwMDRLVlVZU3VMOXRwRFFud2QvQ1poSmdlTUFEVlBQbG9qYVdGZ2tScTJZVk9URER3NjRnZno2SzUrQVFRaWFZdEp3L2Izbk0vUmk2RjRmaXVNUGFvbEM1WXNUQ3dPTjhZaHdvZDdRT0ltZ216clF6MVhlVWloUjBQSTY2d2hMdzlya0pGTmozVjdoZUdUaGwyN1dVcE9DQTl3djBDNTRhT2Y0Y2VMZkhFSW9hQzBPNVdLblNtcG81OE9JY0ZzaUFsTS9laVpDRmltRDJMeFNtZ2FJSjdXZXVLYkFteDVaNXUwc09WSHhHZ0FCakpIQi9CMFVBa0szQ1hMKzRVVUZiRFVhTFkwUU55UW9nNExpQ0tjTzlDTkZsSC9wV0JJOTNPMVFoUER0V2R4U2wvRFNKVzhKYmhKZm5EVnU5ajVFM2JFUFhqeS9EOGt2OTlBU1BKbkdqWTl0ekl0dERCZi93NU5Pbk1qQ3QzMnJPQmxLMHFJMmhVNVdWQnFZaHkzWDN1VTlwN250bkdrZm5Xd3NCYTJNR2ZHU3h6SHlXOVZ1dVdNSmpvK1ZUbzBBaHpmRXh6S1hQSGdhRlcrVmR6anBPaUZJNUtaeFN3UzNTOWdtVzFVM0JVR29zNU14Uy9CSVRSbExGQ2FaTnlraUhDbGN3Wjhpc2twVVg3SG43U25tRUpPTkJZN242MVhVSC9EUGI2R2t2LzdsTC8vZi8vMi9ZY2UveHJ2N296NktBZzFIeU5rQkJEMTl2aENlcEFWS1gwQjVzTXNXMy96Qmh3UENHY0t2QXcyMlBaU1U1bmtQOHlTN3UyQjc5ejBxdXpOSFdRNUZIK0VpWERHT1JEb09wSU5NMGZIazdpNEVCZWtoUjlYaWZMajRFNmZML2dWelNYcFVMZkJsUFV2d3FFN0hIdzUwa2JmWXZxVnBPN0pVN3JRZVVwRFNwV3pYT2NKN3VDTkxIU2RvRkFDRmQ4T3pLOFFOaFFnOFFlU1NvYWh1WE9IMHFGY2dxR1I1dkNMWE44Mm56d0RXempWTEZ5NGh4VkQzWXJqVFhOWnRhYzZpY0owLyswbWFDSkZCQ3RISll5QnhvUi9lenBuY1p6NWlXdkhEVDlXN1RVVHR6Y1JlczJ3YTZsTEV1MHZDelZ4TGdtUmxPRTJnREhrZG9lMklhRGNOUHZHaDFZRVEyR3dGT2lMQ1RmRkNrSnJqUlZrdWt0VjlvNkVzYjlSNU9KdzM0Zmhqb1BnYUR0K0YvL25ubi9uSGVGaWJLM2RFM3UwRmdFZ3lRSEtiTWJqWEI0ak53UU8yZlZsb3lNSUZpKzJBUHRORHFZUTFmNlphSGt6Ymw0QkNTNXlndDBkWmV6aVFBcGJ1T204c2RSd1pIZWU1SHdzRlBSSHdadDI2L1Vra3JyeFYwdVdIWFZLWExraFhFTklXNmdrdEJyS25pdENOUGZGZGU5ZlBRV2Yyc3daRmQ0S1BSRjRaeGVzNGJTR2x5MXp5VnAzWkYwSEc5TVJqQWRWMVE3WUMrVjZMOEc1c3pIbnZRd1JNa1c4aHB6dStuUU5VN3EwcStXWXNaNkRQR0pFbEdlQzkvQ09kWitHOTJvNndiR1VFZ1hZeFNsZjhRaTdkWlpSQUU0bjl6RnQ4YndFS053UHpyTkR4bHFRMDZhSklLVVl4VHplVTNaV1hJQWduVDBiTEVJSGRDTFVjcWx4Q3ZKS0x0b3NvcE91WEZJVlF1azUyRjIxbDZZYWVBZWxpdDRCd0ZVUmRHVjNaRWFmUlJpdERxUVY2N0FOMlVYNUE0YmtodU9uSHJUZzBjZnVOZnhDQXcyU1JudWptOExjWEFBenpjWFliSENTT1AvNy93dy84NjUvbzhtQzROb2NNcitZOWJSVkFRMTNWMEJHNVBvTGhrODk2SnFJdmFJMDdDZnZLVnIyM1NOZmhhQ2dJdDR4aXMrdGVhdTJSM2Z2eitQcG1lYnNleUFibXJYamMxczhmQVBoUnR4Z3FBQm1YQit0UlZlQUljWHRKQUVoTmhUaWk4RzQ0MyszT0ZPSzB6MkpmM08yZDVnaHRJYVdMY1MxZEFwMmdTZWplSTJUZzhSYmg5bzZkdjNYbitMYVI0bXZLOFowLy9NaGd0NERoYlVNb05YdHRIQUtRQW5iRVJQaldTV1FxUDlpTXF4K0VibHVhR2M5Ylp1L3RlZFEzNzZ0bm9LL0ljcCtVTXNBNVF1U1NBYWJiSGlqY0RkbGtva3VFcmFzSmthWVFHWEo1b052SmpNMmNZK0xkLzlqYjRZcXpjZE5ZeW03dXAxcWV5KzE3azNpczI5SWhlT0lTODdyaGFsMWZYaGxRUHFFcHIvZ3k1SktDSTdMNWxJZFdCMXl5M1NDdTFnM1lGdzhLZ2d5RElUU0VPM2hSODV4V0VwMlRYK2ZGRy8rNDlVZUxOLzcvL2QvL0hjc0V1NHlhMlIyVXpWR2czWDFuU0NnaWFaY0JBTVE5SlM5S2FVY2pUdDlZY24wRVExc1pCb3VHZ2VNRDFMYk5vUmVEdVZWNXRHZTdYZWduRXN4dXU5clNaZ2hjTW1palZlb1RCTGRmQ0x4SnBrSUs0bDRmRWVzUTBQckJOMlU3VHFSTHhYSnFPbTBDTjRVOUNINFhBYUw1REwwWkVzelREU1BtbHU3eldWeEJYOGNZMUxWNlBBb1JwVnNRZWlXT0tlVkpGY1ordWc3eFBhM1hLSjFVeUYrY29iaU5KempaZFVPQjBuUkV0Z3pSYURndXV4dWRMQjJSSjJJVlQrandNWmFMYzFZcFRYWVFZb3QrNFljR0xPTmtRSmlISzdRVGhYUFhrZnk3elRNTDhIUkEyTzJHeGlKWFIwNWNuZHdSaFJlRFhRY1I2MldqSzYrdTBSUGhwc1ZWRnlISythNEdLdWtGUDFCQjBaa0QzQ2tKbExGelgrNmdZc3hXL1AyWGVJYmliTWYwd2VhWDMxTnB1Snd3NTE5UklJN0FYREt1d1dnWjZDMWxKWklHeWZFNkxvcWhIckRaSFU4OGlVU3F4TUhpRUZJd0dtNFl0Z0tQRENmN1RDb2NCcllUS3hONHBIWVRsNEtNbXlFdkpiQU12QURBSndCSWhEZmk4NnY0OVQxOXVNaEVpMWxpVjlPMWV3R2djc3NJc3pzdU90S0NvUy8vK0ljQUVvR2hOQTYrbTgzUkx0TzVDN1ozbC94WGd0eWZaeGt3MWJQQ1dELzh6eDhzckVvUFIrS0wxdDViSVUyY2lKbmljZ1dJWStMc0VVRTdLeUdBdnlFMWpkeGIwY21EKzZTUVF6TzhNV1FiVkFZY05RaTRQVU1qdUE0aHM4RG5aYUNyMU00WDZJVXNRU2NjMlE4SEhnbmVpL3VRYVR1eVZPdTBIbEtRMmszZHJzTjBIUWZpU3dDYUE1MVBRdDhPb1RPVnV1SFphWmRXSWNKUEVMbGtLS29iVnpnOTZoWElVU1hZcUs5STk3Qm0yUTgzZGU3bDN4VDhtQVFzbjY5VTZhSm1JY1ZRMThjbHNCdE9jMW0zYjBhZGlOQWxoZWptdldGOEJEQzNJcjA0b1lVVXdhZDN2UjYzNzAza3NiSnBxRXRON3k0SkYxUFBWMHc4aTdjYmVwdTk0WUtnd0drc1hIaDZwTGR6NWpPeG90eWdQWllNQzZjRGVXR3pGVWdrSE5OMWNieUZOblJtQ3MvbHpFNXo3d1AyRzh0K0lHTUorZVdYWC9BMUhKU0JBNzhKZ0MzRXR0RGdKUUpDY2JGYlh3QW9nTzdzN2lKeHJ3OHAzdkdqQlFIU05KU0F5WTVTaXZiTnVIY0djTGJ6SFhFc0NWZkZqVkRMNVpBTEFGOTVFNGx1a09LUXNkbnRqdDg1R1ZRREkzWnNzRGlYcjYzNERKRGlUV05aaDBYaFJmNUlIZThyZkFLOVZ0SnI2NGdKdnNXOFBBOXZTZkw4MkRwakxjTk5BaU5pOHRQYXRYYjEyZUdXNVlyK2tyTUVUUmptdHVXUzdOZkV6VFZEV0dEMExpalBvQlg1cnZCTmFHOGRpZVNWZVU4ZHZUNmlKVTNndlh3RlhqYTJHYldRRlhoMHNiS3dEMjYrY0RLeEU0NFhmVDB0M0R3UEJFTHVycWdqOGhIT2N0UExQeWl5bmpjUS9PUmREL0lOYU96QnUyWjFiRnBVeTRKcGhHMGozY0NraVFuV3VMZk9ra2tMY0haZEpMRnJ6ZXBNaWtpV1pJVWxhSnJGWlo1aGdqRCtqTTdsV2VyRnhCTWlCcGx0U2NHUlYzRGVzeGI4cEJ2aStSVFRUeEFneXl3bmFsK0VDMisrLytsUGYrSXZBYlBGU3dKOExSOS9vNmZYZnpJSHV4Y0FFTTJWR2pNV2N6ZGVuMUV6RmhmSmZ2enhUei8rK0NOZWYvQVRBTFo0RGFERWlOTGU0c0xBSldObzJUMkJleGtyS1Rja1c2U2NjOU5HYklTelBXRFBVZU1SNzNESGl4eU1FUkVjWTNqam15RGI1VGdFODRnQTIyOUhPRTk1S3FERjB4N2kvUWRpVkNUSUx1eFltS3c5czQwR0daVkl4a2JJSjFWK0RwYXBVaU55amxVbXlFQUhvYUF1YkNrTERBUWQrM2hoU3pvdHJ5MnhtTHROYXM0VmtOeDdXNVlwTUt0VWYxYkNlYTVTT1JWUmxzV1JneldrUmduaFBNTVZlTlpEd29abm1McFRKdENwUEdheUxIMk1mU3hqU3F3YXpzL0lPSGVSZDkybWdDT3dTMWRWcmJJUkc5VVdRcnh3bWdXNGkzOVVtSWpuY283YnpuSGJPYksxaUQ1MThES1FrOE9XSVc2N0NQa0huTjE0WGNIdHFjYVRiS3oyaXBEUFpHMmlWSUNNS1JpUGUzQlhqOU1XZG5BWEYvVFFYTEFEYXFVTkhzYXlqTGlYcnhNTGc5cVBheW1QZ25aNUxXU0hqK0E0WWJ5aUJjY1VHTFRnSEpUeUlMd2Z3UlJaeldkK3Z2bkNlbUxzcTd5c2lUUERUZXZMN2Zhc3ZwNWl3QlZPempMcXlOWEpVb01CTDF0bEh6cnhDMlBicFRvNWNRZVNYZ1NGc1UwK2V2d0Jta2JJVGp0Q2dqNWE3S0pCejR0d012UDVPbEZlbHFjR3d6SzJOUnhGcU9ZUThJQVZHT0VzYis1V1Z0c0VLbkJPNDBXNHp4Z1FQait5RWhlVklBemFiTVZVbHdoSEJKQlpBSGFFK2d5VWw2QmFldEg2QVMrN010Q1ZUUU10RDdwb3N4am1vdTBjaVl6SXpGSUNYVTIyaks3bUNHd3hhWGpYRWVFcVdBZ0ZiN1lsME1WTDdGQ2VHNHhlaGVNTy9POS8venZ1K0xFeDhPMS8vQm9Bdmd2RVRZSkFIR0FpaEMwTXVHQ3pDeSs2eWJMZkFVQWZQS0pNdG13cDRabHdXNHlENGZRdUF5K0NKd3AwblJBdXByaUxobkhkekVqT0ZXWlB2VjNndXE4aDgxbi84SnJWYTBoa2UyM1dKTjhJNUNWNGF2VHM4SFJ3aVV5TnhXT1pvakVKbklPK09yaEQzNTh6U09laVBmdDQ1bkRTaVQzWDRJVHk0VjI3Q1RtdDl1V2pQVG01anM1MzFVUmowT1l3SkRpOHd0T1FGejNaRXN3WHQrck55UDJqb3Zid1czdEhzbVgzUHA3bStwb3p4eTMrVWNHN0NzZGMzdExheFh5c3p2RnVXQXdLNUFYNk9RYUUxZEhPY1h0WnkwMUNpZXI4anBTUVZaZFRoZmJCT1hzbzZiNFF2SHVsNUN5RVhkcmtHaDdQSFFFS0VwdGdDeGhNZWJ1dXV4Uit2T255cXFXVlpZQmFUc2pKdEp5NEpOSU5UMGZia2M3L0lFZ3BzblJSNVBsWU92K0RqSXRsNFAxK3JDWU92QkdQTitVQndzaVhCUGpIZVJlSGhnTURVV0xjZld1SVZ4dkl4SGlKdWlKY3BhdGs5eHJVOGJZb1BDdFJrWDJncTZud1dJSkxGMmdYOFVZRHdBOXErR1pKWEZPSTZNSmtoQ2hIQ3QxUXRYSVJLVjJLRkJEZGlXd1h4RklKU3dKb2VHU3dXQ1ljN1JRYzNkaW4rVXJWU1NYV1E3aXZDOEZqbjJ0NzZ1Y3F2NC9hRTArZmkxTG5OSHE5TGZNUTN6NmN4eFdweVYxY2taYmgxSmVyRzB2QlRoTUN2dHNLLzlLTnIzSlFYK0tpOUlYb2lNYlZYU2VJWERLZzQvYVF4UjMwL0luZkIvc3VmeXRzajRpdzl3NjFxZWszeHlyNWtqRVZMcEdkdEYxTkhEMjI3K1VmSzczVm95SExjRVdDM3JyM3B1M1BhN1E3QWhHQWZnaWhjVFBMaXdnbzZVUlpYaGxPTG1EcE92T3oyM2dMbnZmaGZBR0Exd0IvL2V0ZjhVYjhTV0VZVGgvUmVPZStoSFdlQ1BqUUFRZXlZbnNoSDFxUS9mTUZNV0Z3Q3pweTBWYWdEQThrdUhRNTdlbTJwZ1dHN0pLbDRPb1dvM2VCOElDZ0c5SUhLRnVHUUJseXdjamI3Z0M2VjBnM3FBQmNMaUlMbmZoRU91N1FSU0FuUTBjalZ3YzdvbkJGd1lqTGJyNzFBbVA1STY5SFFkeTdiak92STlmdEl2c1dxZXRKbjh2MEUrY3RwMUtQZGVWZXM3eFhEQS8zUk53QWNkM0p6U0JqMlMyN3BaQkxDTHhJeWhaR0w5SkJsZGRwanNnbUg5MDRrS1A5SE94czVma29Ca2ZnMVhURXZkL3M1ODRBWnB1Q3hWQlg2WHhkNUpVaFdsRkRWNXh1S0dydndwVjI5NE1hczh3QjBoYXk3NGFrMUtSLzNYaExMTE9VcThSSjkzcFZMMkl1QjB2d3hJVmlsdDVTcEQrMTBTNnRQOWs1bVRvRlVWZEdTZmVLcm5MSldOWldVcE9zRUJtZ3VWMmlQbThYZCtDNEQyZDV1UDNHcmZpLy9kdS80YmNDanFvNkdzajRIUUM0Y1ZvZWtWd1VIT2JUcXcwZ09MVER1dUhoVjJ3cVNNZERCTXB3NzR0c2pBN0t6RWg3WE43bUxhYUtDUzh2YnpZaGlOWDgwUEF1K09xVytoM2ZBc2Y5OERiaGl0bzRXWU53TjdvbXZBSmxLR1NKd0tzaGs5bHBya0NiSWVQcHEwMmQrTVBnQk1iRUM5aFdBVkRKaUM1QWpIdm9NOGhXWVJMTVAyb3daS1M2OGRDbHNwZ2JVUi9FUFZiQmRraFp5b3QxZWxUWDdDTGlIeG5DUFZhZ0RIaGx5MkNJdW03SWxxd2pzbVdJVmpUUkZhY2JpanB5VGR5L2M2QWdHcmJYNVpsZk9CWncwK0RtdkVtN1NaZ0YzeUJlcE4xUStlYStad1l3NTdvRXlZQkF4MTIxZUV2WHc0dE5rUk0rWGQ1NmlBTFBaUmx5dlQxS2QxM2h5MkwyYVJ3emdHSGdvb0xQVnZCMEppUEJNY0FKaWhNNEx6Wm81MVVINytQaGlSQWk4WFNZT0cxdmhZY0MvbldmWU9adkFXWTd3Z01ZSWpKQUhGKzFZcnJVRHpYY2M0YktjdzZrbzVDTTBoVit4ZkNheEhmdzg5cGNmZDZLdytiZE9QOXBzS1BDTUFvTkJDR2t4UXNBb09qU0o4YVJTdVlZZDU5VVFVc0RJZDA0MGpuQ3BlQUVndDY2OTZWMlRrNmVGSFkzV1RLS1E1emRBc0xWa2VUZlBnVThzTnNkOFZ6aDNiOW1XUEpaT1FQUitpcUFYeERTbk5NREdRVWNCNWtUMmFsTmtNU2FONjRhYzZlU0FmN01DM01uQlVJQ1k3eml3NGlRNEk1TlBoV1NNazZFdE85cHJKSjd3ajRNZHpjSmoxYjFzSWdDWlhnSkJMMlZ0L01MVFFRWlc4QjB1Z0FBUUFCSlJFRlVqQzFkZ0VKazNNeHlGTlVWSk9VaEU4eTlPRHQ4M0c5eitmSjVjMEVYNGFweFhtRlg0Y25WY1NIM0NpcnczSGowZER4WDNidzN4N1ZSWlQxai9pWDJGQU9Udnh5SWNEZVFzWkM1ZHM0aFFZaUtkRVQyenNnTHF4QUZGcU1RU3JlUVp4ZnpmcllkWElSMnRqUDZxM3UwTVk0ZEdVamNpTE03N3VKNEw4YzI1MkI0WWEvQUlTV1J1VlUyV1NKb2VjeDVsU3laNGV6cmxXRGRmbE5oNXR6NmoxdE01UEVzaVBjSXdFVW9ocm9sVnQwbFFkN1BaZURXSDZtNUpmaGRvUC8rNy8vR0Y0SHd3Y0N5Skl4aU9aREZkNGFXUElueWR3Q1ltRXpZOHRMb1NDRmM3RkxIMnhMNHJFUkY5b0Z1ekc3dU5ZOGwwbkZ5RW8rWDUza2VqTE1vTityMjVmN1dqVmY2ZVBFZDl3WFp3aWkydWlKZzd5Tko1cWtHY1hjVnBoT2tJdzRRSDIrTXBDRUVKMDQrZXY1YkFZZGp6L2MxS3JQRW9ydWZ3S2dCaHhkV3V1NTZpLzBpMmJlVWRGZnNFMCtmVFNvM0pMZGxiOHUveFZ2ZS8vRXpmUk8wSVRub3RsR0dlZVFWTHNOakNjclZEWkhsQWlLN0crNVY3RmRnYUtSUEhrdWV0YnJtM0RTZW5QMExsT3NMMFJFTnE3dE9FTGxrUU1kdHljcWcxemx1aytiSTVNT3p1MXduazBqSGxXMHpYSE5EdjJwTFErYS93MVBHT2ljV0o5Q05KU3VCN1Byekd1MkNDSVNoQTdINTFCeExCbkNwL0E3Z2VXcDVaWGhKRHJydG5BOWlZNG54R2dDMy9taGg0eE1BL0ZydzMvNzJ0L1B5K3FENGNnR3JGWHNsRHhrVDJCN2pidlhQZi80emx4bGFPTFFSd1hKN0MzcklPcGVpOTV4em5CWjdzNzFraVN0UXZITWNFN0dZQU8zbXVJR09Jei8vUWdIbzhnY1B3NEJPekZNNG90MytLSTFFUW1BZThVWk8wQzRjWmJaTHhLbDNtWG9JSEFVZTRTWHZVYmVISjdLamR3N2NTM0FYZHJQRENUMmUxbGhyVytaQ1ArK1c1TFBhMkRqRmxWMXVxNVhuczJFWSsrSmwvNzRjakVYRE9ScmFpUENaM0lzYzlucElSenlZM2lWbkNYb3M3U3MwY0dLb3NUSEcrYUlwa0FFMTJrS08rU0hpWG5TSDdqYTNyTzYwblRHbnBQZHk1ckJ6VUJjejVpVFllSGxSUEEyKytiVUF6VDBYNDBOTkVFZG1GWjRPOVJIbkhDNVdBUmVmRTRVa3hOdUVPRzZTU1R0cWo4UGpRbnBleHBYc1YwU09hdHZqZkRMbHRLRGxEeWdkQ1JEby9VdEZxWDNhcC9WWUVWcG1rZUZEcURZdTUvazB4TnR1QmpiTy9JcEgzdU80ZC9KakdYbmpvcVRwaW90aThJczMzbmVMdVNONWhnUVgvKzhtTlFMZi9XQlMxSkhWc0FCdldTZkxHamhDc203UkFCUkVVZUtNZGJvK3Z0M1V6TW1pM0NZeTY5NlFadkVYQUhEZi85TlBQK0ZsQUEvOE1kRC84My8rMzhZTmdCTlNYRGp2L3ZqOUQ4ZzJFdnBLWmNDb2xqZExlSlVCQTY4em9JWklhTEdWYU13WHFZSk9EWkc3SVhHNXFLU3VESDc1aVYyMFBEeDhZdkVZSlgrUEhlMFRqcW94N2svZmYvZkRwejk4d2xudy9XOFladEFnOHVuWFR6LzhFWC95S1BaQi9rUWdERHprUURlZHZIZUlHcUVRRDJFRUUzT1c5NENJNGJVNFpmQnZWV1dTZURyY1Z4T0JjVWxOaVd4WU5wREV4OTJicGxvR3VMUmJHeW9BMFU0RjFMQWh0T2tpQnkwUFJVMWcyMFpaVmNENGU3S3lGUVdrZ09ybUcvYlNHeldqTHdKc0RqK1FxRHIvbnpNaUdvZEpJZFpKRVh4ZVFCQXFJaE5SRndaSnVSaURYamdhT3hONUNqQjltODhibHRnM3JCWnRLTE4rWGtSWXpHd2pWeXdDT2JGUmtoeEZ3VWdQL2JzMkFrYWM0Vk9UZ2FrelVsT0plNHg0aE1mR3prUWhGYWxHdWt5Yk5EVG94SXNFakRwMkx4bm9neHlkVVdjQ3NyZlpIdXJCVHNwc0VRdVhXdmxoY0pLVHZXc3lYU0F5dUJBaHdvSHY2SGQwcUVObFNnMWtEall6YWxBeHB1V3hMTVBBWFdETUhiYkdUTEVVM0lGeDF1OEFkVWExNmovYjBJVHZoUE55MWE1WVNWblZHZnQ2MncxSm0vTnhwQThTbjNWM2VhMHpCYmdsMEl0Sk5mK2hPV2ZzWEw2R1I1M0xvZVhDVE0zWXdCbUo4WUs5Q3FqQ283OVd6elBpSUdLRE9ZZmNJYk9BY1NxeGk2ZXh2RkdMMmtBRFdNaXB4Y3JISEViZ1Z2NEd4dk5tanRGMW9KcWFpNVpWeXBzRmhHNWUvejFqMkZRMkR1ckU5UWZQbU4vaCtaaUVlSWpjcVpCakNSeTlXUDFvOFJOVG54c3VCYmZCN210R0hOZ1JoV3NoUjhzQ09KK3dZUkFKYWord3hzZ1VBcUVqOFJreXZRaU1tK1Q5NUtRYW1EaTJhYllVT1J6a0gxSDBnR3dVTjBNSC9kNktGSXdERGwzeXV1RTI5VHVpdk15VmhPV1lWTXZDd0dmQ1E0ZVRtV09KMmVWN3JPR2JjNWd6R2RPZVlHbWh3d3AzQkFtbHJJYVFFdXRKMjNQUTA4enZiQ2prdXYvaGgrL3hiNlZsTFhQYm5HeWVLSWU1czQxbHp1RXJaR1FQZGVqSHpQU0RPTDZLajF0ZnRQaEtEamo0OGc5ZUV2empILytBOS92djQxOEk1dThENElVQitUQUE2bmNHWWpCNTRCTUFMNm1tUXpCby9MNFIvc1JRbnBZN0R0VjMwSWZ1WUxBSDR4MzNoS2grRXJoY3N4ZU9UNy9oOVJJbUpFYWRMU2o2QVlHMmpCREEvWEcrbGhoUjhQbUI3UlhMM0g5QUFzaVdYaUVKWjBQTnRmTEdxcGJ6M1NadmljQlZGdHBwYnArTDRCYlpuMTVtWlRGU25taWVKWkNZNU1uS1I4L2xOa2xBZHV4OVo4RlBnaVk2ZWx6Y0diaHpWZkl1VjV6SkFISW9NenE3d2RxUFlYTy92NFZxVkhiczRZUGFSc0h4N0JWOGhYakJTL0RCa2ZxNmU0NmxUZkpkSVV1ZEpjZ0JTTHlQWnhBc1dKek5LTHQya2puZHA1dDBVaDk5Vk9WRjRQelVLT1JiM2VYU0w0SjBkZXMrelZWM3ZRTFI4RFB2MWZyUEs1Rm0wcVQ1emlNN3J4RXYrSEdXcTdadUlKemdjT1V6VzZjRllpNFJGSDZqaklmY1YyWVNsZmhQNUxrUzlsQTlER0k2Mk1wTGU5a3laTkhpUExWMUtRUW80eWh0NllxUTNGVnpyQi9zYys5Szc1R1FwYzc3Z1RsbjEvY0Q1dVE2T2VZdzF1aXVpQmk2QjNCUm56SWhVWHgrTDRqdnllTGxBWjhMOEVvQUxyd0FXR2JaZm1QQU53UnN2VlpRR0JTcFFsMjI4djVPRE43USt4SnE0THkzeFo1NDQ4eHdJU1hMZFpGbThaSW1VSWFISy9ZRTlFRFlZSllvZ280UEdrVjd5SHpXY1IyRWpDaTdRM0xFN1NrOHpoSHBrT05ldVFpcUJYUHBXdUpMVUZKZnB4SDcrSkZMMlBYWldNNy85ZkRPWEFvS2xORURsOGc1djN0UEVMbGtMRFAremtEdXJuRUt2MmJzdDhYOWl2R3NHbzQxYjlkenJZWjdkY1FQWTk2czB4NzNtdGlaTEZ1R0tuRkV0aHRpcG5pOWVSWFRhVSt4eC90eUdFY01KZDRsVG9QWHJZRG9TT01MYXpocFBuVnVQM2N3WFBleWFiMjdKTENHVG50dWJaOUZyUTlLU0o4S3VUNUxxZGVUb3M2Ly9PVXZQLzMwTXo4ZjRFY0VBTEd2aWdoQUhBRGozd0hnZ1E0TThRZ2lrZ2Z2L3ZGeEE3cml5RmlDOG40MFl6RUFsTGdOZlZldno4bHdUS2JtVFFFaXl4aTVjbUxGRHhBaWNUV0xnK0UwMUhXdzJCZVprdW9HQll1c2c3QVYxWEYzd1ZhWE5sdEZDWnhJakh4K0VKeXp3TG13Rmw3K3pKQjRYTXFTb0JTRnM0eFNDQXdzQkVLSXFPMGljbjFkQmljZlk2b3pZRWgzM1o0RFhnMzhtdUIyajNmK09iUEVlaUJjaXUxR0NXUzMwNER3S0h5QUYvWEpMT0d2Nkk1QzI4TXJjajJzbVZjL2JyUFh0VGVxNnlmNGpZQ0gzRnFIakg3ZFlBK1ZjNGVHZDIrTXdmUnRLYVFiaUJGWUprTjROeFFsVjRsOWZoZkQzVis3eHF1RnV6TWR6bXJxdS9kdTZZc0JUNTgwYnZ2bDVuZlFiWllxaElhNlBwQWw2SVF2eGU0RGNZUzJJeDl3WEdYbi9LLy85YjkrL1BGSGdDaWJsY1BHdDROWU9VSGlSTFpQQUp4Qld5b004REJtOVpZaFgwcWJ6MHhic2V6RzVhTTRrcUtCYzd6QWdJaElyMXpEbXdzdzVpZmZzOEIxT2E1WEdZdDJmRHlUQ0VHUVE1Ylg3N3dyZFUwU25TQ21hUFNLSTlrakE3aGl5ZW1JQ0pDRlY0U3RtK0RXemZxQkNkbUhqRGtRb2V1TEg1ejhEd1lPTWwwV29MclNpWFhwc3pjbk5vUmtCNDMwYmRxbEU4emZ5WkZ6WUZ1ZjB6S1dPeFpoZVZZY1RJNVBJRzFIZXREU3V3UTlWb1FyaGdmS1Bna2tweEJLRnh3aHhTN2g3RDY5MWM2L3FPelZYZ2s1MHRkMTc0ckk1K1gwSVNTQy9heTl2UlY0Ny94c2tSL0d3aEE0NUoyeEg2eGNxRnAyTnpRbXVUb2lGdzExWFZsUmJ6YldxL1ptV1Fnc05zT3g3T29ick1mc214NmZ0SnZreHdnNkMyaW82MnJGMVRtT3VPMGlYN1JkQmxXNkgzWm9mdXF4Wm43engrc0hCd2VHQUJBR1dod2NFYnFIZnc4RVFvekJkNEVRZ0JZSGZ0V2d6QVdsQy9oRmRNc3pHYnZMdHhEZ29sY1R4NW54WWNha3pta1ZUaEF0d3RrV0Y3czlzT05MRHNFVGw5TEJFRTJHdkk2NHphaHpCRjRuc090SUVjSHJJTTdubU5XY25KamVhZEJHTnlwT2tIVm1iN3RZTDdzQWc0d0cwZmpkbkRUVUxVamlRM0FFMml3eDZlK2c1Unh4MWpUY09YSEw4MEdzWStQZXl3TDUzaDVyanp2djh4VG4zaTVlK09yS0tDR095KzVHaVdMWDkvKzV2UXcvQjFIRDhqaVBlcEUzenVYUGRPaU1adjU1dVJqbisvV2lHSGpTWHBkNkJ5YVd2bVFSMGcwd0JTcEtTREhRRmRMSko0aGN6emJ1WHNwVkFSU1psenQvd2xqYks0MkhNSjlNMm80OEpGbURkQXJJRU1NUnR3dkJYYkM5SythWGEzQTRQaWkzT2E2T2ZMVHgrclpCdFgvLys5OXhsKzVsdzlaOXUrTWN5UFlDd0gyd3FVc1FOcjc5ejljV0NLUExFMyswU2JsWVQ3bFlzbHZ1ZWNTaGdRbUpPY2szQXVUYXBiTjdWc2REOXRyYkI2RnZSeWJja09JbFVhQU1DWFFFTG9FeXhLZTM0T2p5RUcwQ283RGlsUWh3RDhHZlQrVzNlL3pxS29TRzM2Wmowb3J5emJ4S3h4cThLOXVyT2dmbC9Zb01yTWkyS051NHNKdkwxdDk4ajF0UHYwb3NCUVhLdUZqeE9iOTdUeEM1WlBRYTFsZU16cHZJdmZ3Wjk3dDY1SDQrYTNIUnlUMi8ydlpQbmFxVHBYOXFudHRpWG9uc2JraElMaUN5dTBHKzhHVzR3Q2NaWE5raXhpZmdseTlveWZyY0xxZlJKOVB0NStiaVU1NC84Ym1OWEoyZ0FwenB0Z2hmb3VFREtXTXZYVTNPQngrbXlzYTlPdjlJS042eXg0N0NBVVBGZzBZbWtmb1ZvQ1dQaXZnRkFMd0crUFRwVjNGa0lJZUxDdi80Um5tS1pSYzNRakI0TzRSeDZlczZHM216ZGtPTVNXanZ3WWd4eE5YUHN5Ny9FdGw5RnpKazRZU2pkVEd6ZHliNU82aDFMbkNpeUVMejlOM0xKQ1VFSUtKS0lKbGJPMTkvQ3VraWNzR29YbFBIS3dpZnBhMUx6bXJpcTVwbittcHRUZ1FtQllaTjN5UGpIUW8rN2RkbDdvb2l1WWQwNUx5QXdpL2RIbnVUMEVPRTNEVzVuRXF1alJTZWI5eFIwOHRyZVdoMHk2b2NkUHVoREJlQzNySXJMc2hmcGFBTVhNR3VzbkcyMzhNL0o1OTdyNWNrSnE5SDZrNkRveXRqUkRlZnRzZllzeHNCYnBRdUZkaE83WnVQb2xQWU5ib2RhZ3E0S2YzZWhQTjljdUk5Y2IzM0dKNmQ3d3NhR2s0M2pONExodjJ2Ly9xdnVQK0hnWThDOEt2QWVDWEE3L0ljemRNZi9hUkZHQTVTOGFLQnZ6b0FGZnp0ZitCZ0VoR0hUQ3FneFZIU2RFUUV1a1NRSWNKMVExSXdhRE5XWFlFd09CQ0pSeGR6bVBNNGFPaUJoaStReEovN3haQkFnUjhHL3N1LzZFa281Z2tXTUh5S2dvSHpWUVBBN3hITHIxWmxlS1JpMG1nL3hUZGc0ayt6YldDOFNzc1NRZ1EvNnRMSWZqaVNBM2Q4YUJOZHRycFhIdi9PUU1BNWd0R0dDQTdTWWlDUllFUGtTaVB3N1dDUzBkODZLUUtVT2prNVV6TUh4WUNSSlR2a0RId01KU3E1Y3NRVWoyTXJBWURycHoxb3Uxd2M2WXlmVVJLRXlwUk9wdEdENDdMU21IT0x2UkdZbDBGT1ExQVJNOEpUdDU5a3pRaU9wR0JmaXpLQlU1UGlObEt3WXlSWk5nMzBKNUpqZEQzV0l5U0dOS1p1R09tSytsZE14c1dJNEVkSEJoM2VVaGEwMEkweUdCV0dhRWVUNDZsZEp3T0h6cHlCVWt4UVBGeTVwczYyNGtMRW9ZRndHRWZlUW42NEszMm11NmtqUHBsYjFPSEhQdHM4NzhYWGVORm5DTGRQMjBSN3ZkYTd5aC96WE9QSC9GZDQ5T042c2h6QlBPbkFXNDdsUUMrMkMxMzVnRkErSFZUNk51SFZzKzRmMVhCRngyTjl0TXZZSlVnRnVHQTR3VzNXdlcwZlpBSWZLQ2Npbm9iaXVXNjB5WTd3dUVzZnJFSUlMOE1sbFdzUk5GNENnc0EvcTUwZjZxUW1oVGZ6UGlzeUlZSmJMc3VMSVdSaFowS0ZVR2JKSWtOOVhtcFNOcDdxTVp4b2s2YVdCbjQ1TU9EMERoZHpqUUV6Q2xBYTgzR29aVGVpM0NoZHZSbGNPSkgxNE9Eb3VBU2dJUEI0dkR4M2NuMnpRa1ZKRytHd2hiTXJyd3dTNlBWV2hEY2EwdTlHVnlhbk00bDBQaENOcXh0TFBzRVR3UjVWcGdXeE9INysrV2U4QU1CM2ZuRGZEd0lNdkNUNG4vLzVILzM5SG5DQWF4c2NmZ0pBSGtjQ0xSNmxDSEFLOHZHN2NjRXFWY2NsYVhlZ3l4OHNZNTYrUEJVQjV0N0ZSU01DTUkwOEUzQUhyMjlTVGFXTWlGY0M4OThOSUJsaFpIZ3IxNjZJZWFZUkxKeVplbHdaV1UxZkRvOXl1MmgyMTVFZ0E3MGRBNTdYYUxubVJBZ1l4aEZlZVB1U1lqYjN5STVlWEVxeHFHM1dPVjF6UFZLdjZKUnVVcVM5SytCcjZYQ2ZZNHd3ZGlQdFcrdDR5QlE1OW45b3oyN1VKNVhlTXlFbk1rOXdvUkpzMUFlRnhuQ1g0VXN3OGl6bmFBbnlYdkN1MmtMbk1ITlg0dlY1dzI5UHhSM2ltK3hsNjdYcWw4c1FjVmZQbTdhS0pOL1htUHNLQStGUFBCT2dCSHNlbHl2eHNYc21XVkdIK0t2SEUxWE5iUm4yM04vRlp0ZTlDQ3FjN3AzVEU3TGptRkd6UHgrUDhPbi85dmhGemtBNXFmUHIvbU5YWU1YNVBJVzc5ekkydWM1ZUFDQ0dtd2J4K0JZUXRTamtkcEYrU25lcFQ5QmRibC9QaTJzSFppZ215VTRmdTZEd1huT2hoOW1JZjhvSzArcVJrMGl4NHMxUEErSjEwamlWZWZIaTV3QXBoYVhScVUrbFVMQlhWdWhHcFJOUlY3U0NFTzllaU1nbFFhY3BCY3NnbnpaY1lDcUtZTVFHaWIwaFBqb0hEemtQTStDSVUwZTY4VmdEK3IyZXpRWDVxYURJS0hVUEN0bFdiVTlRTEF5UkhmeUs3TFlpWTEwNU4xL1JRTjg4bExLTHFOZkJqcnc1ODVrQTBtbi9uL0dlNFl2cjVEMEgzelM1SjJKM1diNHJjRGtKUy9BdTJmdkloeE4wNThRZFpyMnVrOHhzK2c0UjBvM0R6Ty91eU9jTFpPV1EwZkpuMWhHOThSWStQWk0vQ1IvN2tUdlQ5K2NSNHVOdy9sdHdqLzFtSDgyQXpvNGp3Z2ZFVVRQL2VXQnNGUng0c3grSTZnVGkzYk1YQUJrZTV4NWZBS0FGSWlFYXJsVmNEM2VsNllac3lOSjI1TEZjNDFxdHljR3ZxTWEvZGh6OUhHbk1WTTdYSnAvZElDQTI3My9EcFdteDJNQkhoV0RpdnlFMWt1RUJQM2tGcTNQS3BBeFh1cDVDdWR3ZzM5dW9JeXQwR2hHMEpWZFE3V0FJQUdXbnNsSENIRU5LbmtMaTB0d09RQnVoZVFrdzE2U3hONlFtR1BYUTNwTm5KZE1MbmtKNmtSdGlsVWhaeFNpUnBJeitWWnFjYlc3UG1DUU8zTnV2Y3RqWEIrVTd3VzNOMVhXcFp6RlJCcytGWndrdWRYaktMRStjSlRoRkZwZUM2WHJhWXgvK0VqbXQ4MW5GTE1aclQ4RzdMTDNJblh2UldZZ3ZXQUdSdWVQN1BwSGRqUVBCendMemFYWTNDdFNSNndpdzRpOHU4WkYwWEdKdlVhU3Z1N3NjMTFnS1dMcEh0SnU0Q044TXpVQS9GNFNJOHdFTkZJbXFzREh3TFgyOFdmL25QLzhaTnI2OUR4QXRiQnprcUhnZ3NBOWZBSkJIRWlJOW1IWkhKUDBXUTdMZGdLekF0NlR3V0QwZmNJTGl0cjdORktjV3ViZEFrRUREVmNnd2VCTk9QS25vS3VTbzh1QzRjb3FRSENubTh6cU4wb1Y0UVp3bVY2Y1JRY3NVUzRNZ1doNVFvOEZCZVZjMkNQTFNHTUgyY1BNZHdhRTJweTVlWisxVG05allENTVyZk1GMExpSmNERmRoQ2xlVUNNVWcweFZVaVVTK1ppUDN2WDI5YlJ2cjcyc2VjdHg5eUZlUWJjcWViVEc3OWpEa08vS1duSDEwa1NJVjk5ZTh0eVI1U2l6bVlMdk1VdkVVK1dEbDN6a0h5M1dCUmg4eWhjR25xeHNnQ0x5emluZWpjMlhyK21aNmdFdjgzdG9rUWtGMmFWUEtjU0FrWE0yeVhCZUJNb3FjNDdKbFJCRzU1N1BkdmZJM2ZMY2xIQys1dm5YTERPaWs2RVpoZnNZdWFtTjJyS3pxQkVJYnJ3SG9SVmVmQUpBSlhBYnMrdDBnaHBHRUZ2RTRCQkpSbDY1Q2tQY3B4cEg0RWY3MnBPVWozSGhKTVA2aS9PN014NlRFU1JYL1JzSU94L1Vob0htZ0hwakxxb1JQN25oa2lFREdrc3pXTlF2aU5MbU8rQ0l2RFE5bkRkNjZGN1ozUFoySG1JMEpPZnpCWjFiNUMwOGliUE5wQ3NOazZwS2RQb0V5RkY0UWRkMkFyZTVSb1BBdnpWaHZ5UDBvT1A4RDh6UDlkYWZldm9BUDJqc2EvaEgrbG1Ic3Jyd3JvVmNrWGVYNXVGZzVTZk9zcmR1N2NEN3VZRjVUbVRaSk41UlFMaUVmeHFpcm1ZVXR3WWRMNXJYdVl2dElGdTVBYjR0SzM2SkFIS1I5aEZ6SFM5NXYzZVVNZk9EVG9kYnJwY0xtMyt6QlRUOFBmdnVmTFNLMVQyVGNmZ0hBTU1naFJtR2V0VmIwalA1U242QzczSDVHMnFtQk8vNDhORjd2Q3VUVGMzbkJnRG4ycCsxQmptdEw0T2pxbU1ucUl3Z09rUy9FdTJRS1VSZGsyY1ZMRjcyaXVRRmJoMktCdUUxQ1FhU3A4S1hCcUtOV0lTSUlnVUdRQ096dWNrTHhMcVBFS1dyQ3o2TUs3UXZwY3Q1MnM1ZVZBK25nRnpLbWR5L1Ryenl3dlh1akZuemdkL25ueW9MY2tmcEdaVis4ZTNrV0w4RXZmcWgzRHFCdkVpSGR1RlA3Ry8zQkdlRE85UDE1aEhnQzU3OEY5OWh2OXRFTTZPdzRJbncwWEYvVXh4MDdhdU90djQraTdCOThCWWozcS9XNUh6eUVLUkpkSEhtTDRQZTNyeDIrc2lPTjI4L05tbDlLaVVIbEFFZWlCR05PeGhkNkpna2NyMlRNUmY2MUg4VG5sNElRRlI4YkJBM3UvSW51bU9kOTdUbXBZREo5UEhMYTU2cnN1dnZVcFJMcUxrR2xYSG9GRGlOdnJGblJDRFJrakZlS3F0TVFtbEJyV0FEN3o1TXFSY1hJRVVoRVdXYlZJMFBzTkxySTNoKzlLNXdWamFkQWVGWkRYdzg1OG4yVUl5YnpuaXJCNTBLTytkOHR4SE1HUldXMUk1Rk5MeEI1SDBpNUZJVE9FYjVjMlpHM0QvOEl3UVo3b05ZYWtqV3FVUGM2aUJvZVRJY2lYY2dUTE8yN3gvUkl3RjBWTGNzVXVKZ1dxTjlkbFBTK2N1UGVqUlRQYzArYkVpaFJqTWE1TVBkSTN5bm5VYjFXOHJ0T1p3cTVOOFh1REl2bm5WU1NJZDBUNDVTY054Y29pblc1QVVYdkp2RWt5eE5jZWVNenMzcHVscUtDVk90ZE0vK0VBcTlMWERrWFVEMUdjdGNZOHZsVXd6OHBoOW9nWEpWbndmZ2RnTjkrKytYNytHdXlNZjk1UjRudHc0eTdkTEdwOEpmOStlZmpnenNQc0dEaXBRTmVReUQrVDMvNkUvK0dLTURyMWV4U1dRY3ByWGRvSXBlWU5CdzVERE5IQ1VkWGlMR0dpVlVKTC81RGRmRUdIV2JnRXhyOHhmNGNkRHkvNHUvL0tCQmRIT3h5cGovOUdyOXEvZHNmZnYwZUM0REhQK0RMUVZBSTBkREZFYXBVUUt1ZlAzejM2ZnU4d3lVbE5UZG5nTVlObS8rR1FNQlpEOG9vQmx3RTFZYkl3VkZqNC9LVVJZN0JSUmc1c1oxU09SN21BYW9SSSsvMHpDajFwOEZOTlh2amNhVElIa1dFeENyTXZBS0ZaRVFXekRySkRUUkFsR01oZ2FETGFRbEtIa3BIWE40akhBczd4d3l4MkNoYkNzeGRMTXFZaEtHUVdjaFJDcVlHdUVDd2NWaG52bWdNVGdwK3J6ODF5K0ZtYTlsQ01qT0dBd1BYcDM3TXBYYlVpRXBqUThiQk50TUNuYk9XUXdzdmZpMGUvMkV6NXhnR09ieHdSWTlJdERZVkFta00yaVFNYjRoTTFWeXBUTVE1aEJxQzRvaUNNMG0ydVQvei9GS0s1TXdvOEVIUEl3elFReWV6YURPa01qVXpkdkw1dXAxL2lKc1hoTkZTYnhiRVhtdVZsNlhQS2pxdklTdUFteWM5bzd6Q01zTE9jNWgzeDlJc1lRZmlqYUl0aFdSdE9CWVpzN2FiQi9HTjlGWnpsK0NtMkk3ZEI3SWhRd2tUMUxDU2hKS2NBYnVrRmRaQmR3YXNKN0FGbmRQZVByMXgrc2FwR1NjT1c1WVExK0hFMFpVQm0veGxpTUkzd3paREdVaHc1bDZrUFpFb2d6VXdTOXE4R0JGSHk1OTRqS2lzVTFIVENGZzYwMEJLL3FPblUyRks1VDdueWtNZ2RHM1VNQzhlR0JTK05CRjVJY0lCem5vMmhVaVFZMFFiZnpZUTd3L201TTlhSXBhMUJ5OFBDcXFsc1haeDBERmhPWk14RkEwNTRqQUZHVWd3RVB4UEhBNmMrZEU1TGo3SlcrT0xDRlJkTVNEbGVBd3NwdmJpTVdaU0kyVVkzNzJHVFhFYXRCMFJRZUhPb1ozUEZhbUtWR01tWmpmaXAwM0RybTVLbEl6ZHdIZXVHUDdZMHNEbDB0NXdJMWVHS3hDcUlPZGloUzFhZE1aeGFScVZFVUVRaVJ2WFhPSC8vYi8vbi8vNGovL0FONEx3WWlCeGpqQ2xjNEVpNDIvamw0QVJZZTdraER0THhELzkrK2tUYmlmaXkwSUpWbWJTdjl4bURBZGY1Ky9QRExrZlluVTVnNXlUUGxUTUZIK2dsU2ZBdURUc21aRHBlTXg4NUtVclc4NDdZcGxPNG51MTZCWEJYcWNJTW9wSXh3T1pxUWQ1ZjRZWGhUdTdNZHZycExuZnBBWU9iTDdvd2dJTWZER0JJVGZXUmNZcUJSV1kra29CcXFRWXNUcGY5cEdiR2tPNFl5UnovdWZBNDdrbmR2b2RFalAwR1krMW5HZG9wc1ljejhzUzNGRXBhOGlMOUIxTHhhZ24xRCtuWWxteDY3dTlKSDhza0JlV1h0UFJ0YjB6dnlZRW96NmFrSGNmNW1vam5lN0MxU1dNSW1qNWcwRzR3VEc1OTJtalhFNGp5cys3LzZkbFdRbVZBYUtMQXk4ODRubVd0bHIwNDhKOVkxYVQvcFltYnJyMUE2RlNCbDJKUnluMHZpWGZFMkxIaWZCUUxYZE81ME01TGc4Umk0NlhUemp3ci9laVJaZTNiMGNDTi80S0VNSlNJaHJNMFpnbUV3Tml2Vy9tWWdZNGRkMlJPR0MrYUZ0TW93SmhnQmFUSHlkdi9INTNJdU1WZ21pZVFtQXhQSkI4RWtRVENPUGE0cTQzTkJONVNiUjUrN2tzWXhCc1J5VU5nNTYzK0hQZ2ttV0ZLbDRHQ0xTRndBQVljempWaUJDa0lGMWlTb1JlNTdndFFhYzlidWQ3WWR3TmFMVXQ0cUthaDF5UHAzZ2trdWxWRGt0NSs1TUpaS0U1eDNhcHNIdkpMOVcvVlBFYlNLK2VuMXFhVHFqcStMQjl2bmZjeXp2WUp2c2RiR0h6K3JCQjQ1bnpNR0pqbXZYeXV5dkw5VVNURjhZbkNqNUQ2bUFKbnlFOU5aaENMUXkzeVNKSUhJaU04U3c4cGVKUnp5bTB0WFVLN2lHdnMvVmtwK3lKdkM3aDE2Q3NFNkViWDhUd1VEYnE1QXNBdkd2UHZ3RjZVdm5oQ3dCdUdzaEJoYUpTWWRkQjJOcGtvbjF4aG9hc3lvSFk3ZWgyZXZ2WW5Zd2JUSkRRK214d2NoeGh5SnkwL081UVBObGc1Y1lQWFpPQXgxalVVSWl2SkNWMWxvWGVwRzEzdHgxRU9HbWJWQmFoN2lheTNYUHV4cHRwV1hocGVYMHNZS1NyVVBhcG83emlpSzlFUXNEeEtJVTREb0pyeW9iaHNVNlRQa0Z2cWJ3a3lDVXBJVEIrTndkdnU3REUzTGR2R2ZmMmhIcE5aYjJ2am1QdjBRL3RlL1dQTXovSGMwLzk5MmYwVGE1b2dVSStwdkgwcGZLVCttTU8rZWxWWWEweDZxZkwzaU80ekE2UXVOcHVJSW5UU0xnbmMzQVZSU2wyYVZPcTROdlRZZ1RuMVBrRXd2WXVKY2hjNGlLODFQZ0FxL3pTOFQwb3ptbnhGa0thcTI0OG1PWWR3MUF6djYyRG5ELysrT1BQUC8vOHozL0d2d1p3ZEp5OUFJRFdEei9FdndITXZ5cWFHM3Q3THhhS0lLZzlTdkRGNFR4TE9UUVVqNjVzalVWVFFUSngwSUtjTWJCaDhBY1MwY3RXb0dqTEZFektsZ1MwUXo4aXgzWEhRT3J4NGlYbUFMT1dNUkFXVEVRNlZKWWFEQjVPa3oyZE54NlpxSk95L0YzOTVEaWZ1U2F5ZlFJd2tVMVZUQmowWXFZNWJKRENteGZvWmdBWXJtU04xUUZaT0EyMUxEdlVFR2dIa2dibmQzdGc2Ty94b2ZMdmRuN2ZiK0RZeHYzOGVrYjZWNzhuUGk1NnJkUWovTWJaT2k4amd6YS9ZRjNsajgvNkcvcFY2RFAxV2IrdmVFZXVsZWJ6VE50YmFLQmJFQmZtV3dtNHlPL0JyUS9IOVNuZHFiamlzMnpPbU0rYmJCbklkY1YrVmtrbk9pODdxVTl5ZmhtdTVjd0VtQnR2NmYwaUJvYU5oK0o1eDQ1L0RneWZBUHo2cTM0YlpER0NHeThBb01WUEFIeERRd2I0UXV4TGhqaHhHZ0hIbThQY2hsNUdYVUpHYk40amJqRTVWMlE2Q0RMVWlNaFFkaHJDbWRkRmdHQUJZZzNLUGVzU3RKdGdTc1dON0R3Q21YZXhrU0t1dDJOeFM4RXpvandpWUZPVGJ5UlNmeHFSSXNjK2dGbkpqcStDb1p6YXFtUkhtOWRaZ0NTRWQxSUpraDlKYzFEZFFCa3pZcXdJbWJOZWxibTcwWmRPb2YzT3VseDNyQ2VNc1dkK1p6UHdWUTJYcDh4emgvVFJ0c1hGRy9yZjFRbitpblUvMmtYNy9UQXU3a0htdFdSWVd5ZjU2UEtIUEhyVkZpTWtYbnB3Q0xGRExFM3AwZ1B3Q0xmUWw1aStwclN6ZlVtdUwxVFVwaVdlM0xGU2ZTQkgrSjZKd0tOTktFMForOUJuOS9EbEgwanl5ei81RjRGeUI4NDd1cDd0OEFXQXFCQ2dLQkJNaDNBYUhTbUVyNktyeFpPQlliazlSeG5UY3pUamxROWV6bDdzdk9VMENvY0JYWER3RzBYNFpXd0tCWWgzdTNQak1weDhiMmRaOFNpY1VuSUpoNGd1YmZST1FOdzdETWd1MlN5Zlh0Y1hYMkFnK3FiSjFCS05BTWtBelJoVWd1NkN3MmpiQ2U4WllTc0VmTGVwNndodFIwYnVyL2JCMTlRdUJURDFPVUM4Z2tRM3B5RHdPUmRDM0J0T01TYnovSkg2aXBPc1pJcXhlNW8rbC83bTNVNlFyM1F1NXZ2TmJYaDY1MCtlUkxTOUJIOVZCaTkzR0pLTWx3NFBzMmxYRUpvRndLem54TStyaUxsZld0cFZjYnpEbEZTMHVQRExCaGEySWNPTDV4TjRPajd6aFE1alp6czliMzdVYzluTS9rNnIvT2JDUDZlQVRvUnVISlJWOWdDNzRxb3JRNjZYR0xoWDUxZUE4TTQvWGdDZ2k5WEhGM2wwRDEreUhyNEF3UGhCUmJBaXkwY0JKQlM1cjZ5TDBlZWYvUnJEWWhkemttTmZyR2plbkZTYy9Jd2RVd3JOS2NJbm1OMjBUWmVTN2w0ZWpKS3lCZ1F6ZmxPWk9JSUhtQmNwTHBiVGdqQmZ6bTNNaVRCM3FXUVV0SHVvZzkwNVc0ZUpjSXM5UFBQR2ZVZHNJT21xMXNtOXdwdklFY0Z4dHozZDc5TG1ZbTE3cDAyQ0NITlp4M05rSXk2QUU5a0ZlMEpLTklIRHh6djFJWHhueEdIbUw4VEIwd29iM3VzRldCRDNmdUgyYnFTM3huTDNoc0QydVN2QnJRTGU1SS9ub3crM24vR0tYRE1rZzhORXR5QnZHdjdUZzhmaTRobXFTUXVKNXc3enhuaXlIeWVVTzR5em1SOTY5RnVaWDQxMThVSjNrZllScGdXbDh1QjlPMXZjdXVzMnZoUzVld0dBUFJyYk5HOE4rUUlDcnlIdzZvRUlkT0ZGcTY1ckVhZkw4V0s3QWwwOVVDbGNyWU1GS1RyeXd1RGhhcVVxZGNHRXpVbUFFYTk1MG9lV1AvQUZCN08wZjhvY1VlbGFuc1ZTaHFGSkNDTXZlWkVSc2Z5QkZrajVkMWRwV2k3d3NCejhVdGRXMUxqR1pLbXFsT0F5YjRMSU9WYlREZjdsemFHRWg4bXhHc0pKMmZUdnZtRm0rR0lhQUdHSWZzVEFieHpqZWlxaVVzdzRLZzdkbTNJemFqejJlcWlQRjFwZ3dNNEs4VGh1aVdqMGxyTTkyMjEraUhDWWltSnVUbnR2NlFWNWxOZ2U2QkxCRmNBbERwQTRFZGxOYkFBa3FDV0tFamlmV2NwdUJwQ21hSTUvRm1DV2pUSllTVzlaMGxFbHdudGdJdXNWcnNYTU1xVFdEZW9EZHlOK2hXUk92QmZBOE9rWmxIVXBQZE1GaExrd0NuRFpNaWpHZFJDdXNqZi84YWhkVThwYjRGVUw1WTFMRmlOaWgrak12Q3B5SDgrSGVaTHJ4SFU5bjBRODZUSmN6T0xGWW8zMW10TnlMbldvdzZXY0lwYmxZRHUwdlRoM2NqaTRUTDQ3TE85dXk4MjBlR3FJbFZWSThwVmpNL0FVU2Fra2oydUNiSlZOVG03dDJEODg2S1VycjdjTEhOeW9QNm5Cek5PQnhoSlB0VkVlNVVCTE1DVXVOMXcxRDRTTk10UlNDVjBjU3VHMlVoRlV0eWlycTMwaXZoRHFxd3NDYkxad3lXYWd2TXBJQXpnS0RaR2NUWktsS1hMQjJaWDNZWU02VW9NUjl2aHNKQXJpS0lqVGZqaFhENHhjOCtDUWlUZysvYU1TZFpjY2VXbXdZQ29UWVpSeXlTaUJwWHVrQU5wUkdReEJxNHk0MThlQmY3enJwNTkrd3IvaTlmUFB2OERnYndXb05pWGF2UUR3YW5CaTZ5Q09HQ0JIZFhqc2lhM0VKNXdycm1mcFhNbFZPSmdCWkdkYlhPZ09mTC9oc01GamoyY2diYmJZbGVNZC9TNlVDR2ViZzUwWjhSZ0ZNSUkyV25RN3lEcnA2bEhBQmJwQlpWY3JDQVBSaWtQQ0NVNUMzaytPeWhYU0RSVVRMblQyaVJLb3FTMEU1alkvRkQ5Rm9oNFNPbzNoSWh4MWIrSWlGS21la2JQRG1qQzltcXlkd1FGbXUxM1lQTWN6YldaQS9saUhZK0dIQ3ptWExRa2Z5SEtYZnFhN25HUmJubExtUTExc2hoNFhNNzZBT3pFUTFIUEV4VllxK3JhNTFtcEw5R1FITFBsM1ZIOFF2NGY3K1BRQ3FidjJvZXhkWSsySGVTMW1aTnVIcmtyNGdGamZIcGVMeE9Sd2ZrNWFjYUJLV3BGM1FuRjkwRzQ1bXo1b2xkL0tzaG5vbTd3alJuK1QrVHJsODdLUUYzZi80T0JlSFcvZnc4Q3p5dXFKWmNnY3ZnQ2dIM0l3dkIxeER6MVE1NkhRQ0xwWnhodjFsNFdWVzdUZVZWUmt4ejFaL0JydDRnYVVnWXVyUmp3eHgxOENoVTU2WWNaVE5kZXM0L2dOYjJZa2cyVFIxSVZYTnBYWmhTMHliVExKa1ZmZG13amZLWGVheDhJdVI1Ujl2QjlaRzBJNE9oaDhPbVZYWGhJMEVCbUlTeHYwM2ZERmR6eHR2S0RGMllLZzdSVWQ4TWc3VjBRdXhzS2x3OVVFMGhCWmhoTUtLSjM2OFV2T2cxZmlJckJIWUVGZjBjV216dTA5RnlTU1o1NDMzKzdreGc4cEdCU1RwSGVITFY4bXY5SkV4UHp3M2FOaHE3c3oxTG1pL2pRT2xySnJ4ZnFxK081ZVY3cEdFYTJOMUpWZWhuQlFpNkU5bW5FbmxVTVZJdU5SN1hYY1hiSThTUTZYWUozaHM2Szh2ajFhUWw0V3hxV0FFN1ZzQVNaT1owMDJ2UnNPMlFUWC9JMzNERXM1V0FhNzBjNVRVamhkVzg1SjJKQnYxdWVkZ2FQTmZJU3pXbnJQT1JmSDVTS3kzWUNPdGcxeGVTK211RW1ESUY4RDhGMy9IMzc0NXgvKzhNdFIxT0VMQUZTSkEwTDh3anJpb2N2alNPc2NSK3c1NGR5N0RDZm9ybzZjeTE3MFlpcklwRDY2TU5nV2hRRGpYbW5jejhTWWsveUhUM0VYZ2lpNWdNZlhlZENtRkNjNDZSVGYvbjBBNWhxU3N4TGxuVjRCWVJTUTNTWG9ZWjBBcjhaT1p1RWs2SmZMU04yakdJdVdYbldMd1Z4SEhGWGlLV0I3bEwrYWtvdDVRU05pN2ZnZEQ3cEFjOE9qV0tjbklpSWNtdDB1aU1TQnUwMmFRTzBaS200dE4xSzJCT3N6a29SZVlpQWIwcko5Vm9KWGorQmVmYzdyczBiM2lBNzNHQ0psNUp4ZmxMcGR2NThVRjBYZlJydDNDZTdPZG52TWQwdHVydzN2Q3NWN0czbU8zQkdrNjhZZE1jK2c5bTNBU216WFhVeHozL3EyeFVKNFVjZ3VudWJpbVE1MHRpOHA1a1NVODRCV0I4ajVibEVBR1loV2RqZ24yTzN1T3VEZ1NZVGMxUHJXWEo4QjM4KzBIWkdPUUJseXdRand6Z1dRVGplRzRNRU5tL2hITkMvc3VnMVp2UGVQRmlHNGU0Ky9BdnJyci8vODV6LzVhVURYT1h3QlVLaHowOSs0Z1N0UjdMSWFkM1hFdlNjMkE0L2FvM1FuZ2hkY2NaS3ZDajQ4VStmVEFOWWdmbkFBaWRkUjQxbzI4RWdkd3ZxRjRQR1VIL3pqVFpPWHhRZ04zVkRZeWdoZzNpTUc0L1FnR1pSaWJIS3JjSkJiYllnWVFTRVZGWjFwNURWMEpaM1lVSmlDZ1prWXZZSE5GS3pIOHNZL2djNDVDVEJwSTJyT0RIRnZrV0tROHhYYWlPSnZmOHdvM2hId2ErN0lEajdickRyTDlGeUpza2grNDFKa0dSekZVaWVLbVFxRm9IQVpaTDVUeTg4QllrbEdoWE41MUVVaHRtQ1h5dkxZS3dHdjFyOVN3NnM0V0ZaS3kzaEZKbTZxVnloM3pYdFg5eFVLWGZNYmdoblFOcER4UHRQQ04vZnpLb0xkWGs1bmRnWHlmQkFJdzIzV1M1QTRFQmxQSGsxY2NxRWVyZGNRZHA2dEFsV0RFQmx5eVpDTEJ2QzNuekVRK1QwZWVxN1V4Uk1JSm9KZGJmSmk5S2g3NTY0SUlseUlwRHBDMXhHdXdIc04zUFR6cS91ODlVYzNkdXk4bytocWh5OEE4UEVCRG1vaGpDb25RbDJhU0FrcDNhT29tM2pYNmNoTmtjY0lSeE5LUE83MThmbmxmQ0puQ3RSV0VPQVQxQ2NBZVJzNnB4cUVJYmlUd21WaTNIMlc0cWZhRG5hUXRpTk9MVGk2TEVDY0kwUUU4VHZUT2VPM3FoMHlXN05FRVZ4cE9RbWt5SXV1c3NBZ0xvUmVCY3BMcExaNXdYWHlVbWRFZmZydHV4L0d6SWhHd3dheHExbDRUd0hYQ1NpWDA2ZzJpc0hHT0Q2eGxmZlpCblpnYlBCb3Z4MVBuUUVzSy9Wa1BGRWV1OVJsdFdrZGZHSzY5NUdLZDFZZXlYUTk2Q3ZmNU5vVk1oNlp6bnRpYkVLeENzdUZLS0M2NUxOTG00a0xmazgxOTNONTkrOW5qZHYzNi9VSURyRGozNUE3WnNEM3Mrd1Q0dzdwQlJXM1pQRlVucDZ4ZkVMMnhnaFdKUXV4dDBHNDQ4ZDlPL1I1d01idkFhTTBmQWl3Rkk2LzhMTThHTTlQRTZaYVBDN0pGOEduaEorSW5MZ3VWdGhwYzEycmh6aGFIV0lBa1UyREhOZ2l5eUI0UXBOTFRPcExVd1RoaGNtdWV6dENOWExrVmRjUmdRcWhBUTZQMHAzdzlPS3JVQWMvOGY3eS9CbWNuRWtsY2ltQVNpZWpnT29xa0VocFJSTmVFSVVYUTN6aENqeEI0Q3EwcnRQRFN3Z0pTMUN4cnpMaTdoK0hiM0xZM24xVjVxOVlkN21VUy9EaFNjRGw4UlZYeUlmcitVeUJkMjNVdThpZmFVQnZTL3VadGtSZTZOOVcrYXVqajg0K1BrbmhHVXJQVmtmR3Q0dmlxOWVvNkI5dDVpT2M0ZlNlYzBvaTYrNHVFUzRpMjR6eHh1VXo4bG9KWmlJWDlpMWVCdUNBalcvKzRNQnR2RkYySmo4QjJJMkIvaXg2Z2UraUwzVDhGWVBiQ2hWWURIWWRkR1RZR08xOE0xaUNqeGtwZEJTS0tZMDgvTkZ5ZG5iU3ZqOTZieFRlRXFzUmhaRmU1a0JQTHVEUkhaRjR5eXUvdHU1a2w2WGRXd3BPbklKb21YUzAwUThFelZibnZNL2VrQjBueU9Qd01rTEdYS0xNY1UxZzk4aVFYYUx3YnpwbEF0V1ZzWlBMamx3eW5CTmd6SFNrS0FUOUxvRmNRY0RuRi9pbDRRc3ZnNm5HUmRUMGppNHJtTC81dlMxMDRqc09tYk9scHRlWjVQaGdXaUt5R2NTdXZBRG41OWNSNG5pNklzaEJUQTUrcVIxenN5TW5JOUNnZjMwSGhwVWovTndqdzBMbkhIK0lZdTZjak1lM1JveDJINzBiLzk0RjdzNTdaNVhYNkMzbGNWaGVUTjZocE9NSzN1REJoVGUzM0gwUzhiekpHZkoyYUFnU0NZNEVFVWJuSWx0WjB0SmRCT3lodUZpOTZJajV5ZXNoOVIrWXJndUZvZnpEcWJrUWZwTVNmNmNrTXZBSGRHWlRhL2dMcDVKbGptMWdLVytVZFdsdHIremtOZWNOYzc4V3ZMa2FTWGhMYk1tQXQveUI4UHMvdXZYSDd3TE1aYTRUK01mOE5EK3VXYnBodyswTmZoQXovd2crWFBGRm9yellnb2hxcXdxOEhVUWRnOGU5dGE5MDQ2YzN1bzBHY0Z4UzkxN0hJMFhXRTl3c2JwOW45RmdoMmh6VXlLUkJZWER4SWlsR0dRUEJFWCtQQldpOGlvcXpBQWhtS1A5SVMzWnphSkZQeHB5ZmVFa1Nud2psMkFFTzZ3L2pyNlE3UDBlTTM5am1CSmpZRUVaUzFwTXVsQU5kL3RVYUF2Q3lzRnlTSEQ1RkZNaHd0Rk1janhUZkRJcVFna0FjOE0yUWlPc0lRZU8wbFl1NDlZSFoyYkV4ODF2bEVTTFpMSlJrajFEOTFGZDNHRG5qNjlSTE5INDFBMG56aTFXWW0yRUFTanREY2s1bUhwVEhQVGxua2c1d3hvdHM5YUVhVTVjamlLajUvQnBnRGhPZXRCVVI1RmsvUEx2Vmo0b2lNRFhucVJKSXZpQ2hQbVZaV01RblA0ZXdOZndkRExnaVZXNmNOTVlxYjd4aGpScHlFTFBhK0xOSk1heVV6MTlrRHd0SXZPVVEwNU82Q3FIQkNsV25KWXI1bi9Vc0RIa25aK01UOFJia2tnaGVISlp1bUVzd2ZEbVVTY3JIako1OHpqL3d6U0I1a1dPb2JBOVIrc0doR3JOK2pnTFVNMVV3ZzVHUnM3empBQzVEVTBRMGRid3VJRG9ydXhjYUsxQUNjS0t3T1ZZTlRQNWp3K2Rlcko1THlNbnNpQ01kR3VQQ1BsSE5XK1Z6dWpBNXlSUnR4aDA5eHVWdGpud3NEWkdkZ21RaEkvWmUwbVIyRGs3bnlsdUZCZ2VuSkFVeWNndjA3cmdhWk1GYitidTh5ODdSL09NS21mY2NNZlNSTVNlR2ZEeXRVazFlY3JMTkxSQU9VSGp4V2YvbGNjd25TZnZDWXQveUVwY3pDeFdPSG1lclZvYWc4SkZST2l2WjRVVFNUM0dYa0xWRmt6VmtPK1NTdU5uUUhoZDVPR0pVS3B1R1d0Ykp1UWVZTWhGZ2hNQ0l1RUVtRWJTS1hlTFF6YnNORktpZkNFMnlXcm9DeDliaGFKR1hnakJvZXh2VVBNaTVyODM3SlEvaEVLaFBaWHJuME1aNmFXYkFuSzV0eGhBeWRNWmN4aWhEYzI2YnRJbGs4V01TSXBWU0s2OGp5a1Z2VGt4TWpuUG9VbXN1YlU0NXd3QUI5NStpMGVBQXhWTmUwZVNpTVFud1J6MzhJaEErQjhEcGdKdGUvQUFPWHhhYjA0Tno1VHQ4QWpDV2RpOFhjOHBMQktoNzE1MjllVWVETUJkeWUra0NnVC95TXNUeHFKM29uVVdCanBuZ0NKZWgwNHNFaHprbXh3VzJ5Vng1QjFNdWpRalZjTDREWVdHNVVDNmQ5cWZ2OEplRCtPYnhEQWtjNUlpUGFGY1lVRVl5MXhCbkNNaTgxbWdxVWlmcDB6V1plQnhrdXJPOEhaSk1JUmdqaWFXTmk0cEx6ZXV5QXNuUFVjUmd3bThTbWpwaXBUdkdtRDY1aXFGdVY2RExXOHU4bVowQUJBY1lHQVdNYlN4NXVTMHo3MFhtTUczcHR5UVl0dWtZN3ViZ3pKMUE1YTA5d21OZTQxQjIyaHU0RVRBb2JKSHdvRTJEUWRFWlIxQ21lYUhtR2ZaK2o4dVpYSUo1c3RmQ0RwaVAwREJQdnBtcnhPaVRjb0c0akw4M0x0ZXpLYm1LMjQxWUFaTHZDcWtTY3pkVi9EbjlLTTB6dU4weTRLUmV6MDlqRGlEWVVvU3huQWlCTUVRK1Vud3JmbGNPVlhaUDFqNkVlQzhnRkNESEg5bTRySTI3LzVJQloxbEIyTDBMandrZnFhdFluTVVWdTd2UGEvd0wxK3hnRXU0dTlEaGd2dllzUzRNQXp2OE96L3RsdkE0NGxudUtKMjRKUEh1SzVuMENjRHpSNUI1SVFwUUM0OVVGWFJvVm4rdFo2M21BTWNjZHdqbi9EZDc0OGcvQ2NidlBkeVRSNVY4QlNrMU84cERubVhYNDNTQzhnT0EzaDhBajlRMWxmYmhRSHhGdFIrNHR0OGM2VW14MWFhakxwQTdDWGg1Z0FtZEx3aksyRU1TVUlRSU5pcWdsRGUwVlJMUWVwWEEzU092SXdQR1FuOGF3eFdqeGc1T2VQNzBiMTRONWZYZGwyRXh4WW1Ub21FelZRNzVIRmFRd1N4ZGs4aW51OWhKaHVHamtFSFNiQktlSlErUElkWVF2dzUxTXV5TTluVGk0Ym4rZ24vMElWV1NwWHpnTTJSN3F1QWd5blBrN3MzSGliTmVIYVRzeXpsbWR2T2ZHWTdQbnEzTlRvYXpheGRnU2RUUEw2d2k5NEk2VTdOZlB4eEo0cGVzelE5c1JLcHdqN2wzWnNjZnlaUU0zMjAwN2NxNTBEbkVuczJBcHdLVkRybS9HKzgvQTlwNWE1aTdkZDZobm1SR2c4RzZnS29GZUlVRjN1ZTNNQjJ4c1Y2anAxaDBLc1BHdkFoOUpuYjBBWUZsZjJRbUE0ZlM1RUNpRG5OTHRnVUFLcDNTbEE5eGR0S1BsSjFPcDB3a2xZeER5QlRHTXNHZDJkcjJsaTRoc0daMTU1T3A0UjZDMkJEMkxiREIxQkpnMytrSmc1TjI4QThPbWdoemVoUTI4SUFJWkltODNHQ3NGRHhUWk9kMG1yUWNTRVg5cEFOVGg2UVRDa0k3QUt3akpuU2xCdWs0SVNzY1FNR04xOXUvQVJIak9mOEdUK0xtYmVhNXJqREpZV2VrV3NIalY3WVlDNWZyY0kvOWMrZWVNUDVTZnV3djcvZnFQM3hybWlSSWZlUmV3cUhYQ0lkOHVSbGpaQnhhM255K1ltRG5NTUNqYjI0dno5MEJKRjVYdm9pM0xjSkIyUWJ5cmRBQWJIdnVocnhxWGRZOUxaa3pzMXA5V3ltKzdsTGtJeWtWd1JvekhKVmc0MzdyUG5ZRitaK3dJYlVlZW03Mm9LWkVNRXRUdGhoVGtFbEppQy81d0Y3Zjd5SVc5eWw4RGdNNlBQLzc0dDcvOURjYXloc00vQXdvMkRnaWhQUXArdU1yUEc2aEJvWXh1TzNKU0oybE9saTJqNkxOTHpXMXU0LzRwbmhOaXVwUEI1NGQ0RFplWEtZRDhpY0JZa2ZpSUo4SVpsbWcwS1FCdzcwTHNENmduQ1ZzVG5BWnU3bU9yQjZMb1VmYU1BbWVhOVJGMWVOcjhWa2x3VkF3aW5ZQmUvZ1NIc2h0enpGWU1UVlc1UWRrbEloY05LWkJjMmlVSElBNHhZYXV3OU14bVRyeVhRYWJITWh3SXcwQlkycUtSMEZzUGQyL0hpYWhWUmhseWVld0FzVUpaWDY1bWxob3ZTM1BsWWpmTU1SZUp6OVlkOVdob01yeWlBcW9yZytUU0JjanRxdlZLSkRJNndsaTJoK2VHazc0QSsrb3FZOGJ1R3MxYjV1ZFNMaVRJaXZwU3J1cXN4VitMMmlreDRVeWJMcDR2TzliZG5VdUREZFV5aEtOdXdlK3Vod0dxaW9hNlVjZmNDVEljL0l3MksxZnI1UW44WnJ6ekRPRDZxWVdnblcxVVlkMnhhWjM4MGpxVlNBYlRsYTZLWEJvT012eTVMWXFSSUd3Y2VsVWduQVptK1BBRmdGT3A0c2hYWUhON1lXaDlMTGJ6dW5ORFFGTTQ3V3hCaUgyWklqRnpETkNOKyt6bW5Yb29qQTloeEo5UzhTdVZKRzl0a0hZZ09CazR6b3FObVphODZNbVdJZEFSS2dDQlFlVnpaRWV5TEl6cUxWK2lETndTSU9OdVlDMVN3NlJIb1N4ZUJlUDFiNzVxaUNVSU1KOTFxcEV2dDRaci93OStrZWt0NWh0ZFRzZUdReHdKdUFINHhNYnFwektaS0NMcXlabWNHdHVlOFlIUVMyU0pZN3hMRGtCMzBmWldhbUs2VjdFeXdHOEVyeXR0TUhKV3hnVjQrak13L2dyQks0K1M4elRWV1AvY0NVYU04cms5NW1EUjVhakZVbGVHWEVzeXdMNUFIdkplTm9iR3ZYZ2w0VDJUZVVQdktWSXMvcWFVRTRiTk5iMVJJOTF6ZW5iWG9vTkl5dnJLZG1RZjZyVU5EeEl5YXVHN1k3RzJQSGNNZGd1NlpPWFZFMHhXNnZYQ1ZuY1llTmlHeHN0Z0p2SHkzQTVkbzZrZ2dDZjRYQzdSVXdUWHd3MFlGbldPOEVaZkZ5UGFzaVI1dnhtdm5nRi93bUl1SXA2M0krNTloYTJNTWp5TGc3TGRBRm43aXJpOHJuUFRSdFNTZ3pmKzRjS0I3L0RuYndEL2huOEJnTDhZQUQ1d1ptZUw3dGtMQUpEQVFGaThHNTJIRUhhLzNOWUhRdHVSZThlMWo0MkxveU51MDVVTE1lN2I4TUtBcThLcFptcUU1S1dWYTR5V1AxZy9MRVM0cUptMGlLQ0NEQWttSWVvcEJDSm9YYWNWQUg4RXhvUHRXdGdFWi9iUWIrQVdTTzlzODNlQTlYdGdVenk4VTI0eTUyUEs5ekljZ2MyQm9GWjgvbzlJVlhqRklKOEt6RXBiQ0F6bnVGY2NCVG96NnRuSHdpdUVkaG1JZERydWVVa3JiU2xHM2lOY0JCcGRIMGljK1JqQy9QZmJKTVdoUlpHdzRxNkIxNHFBby8rcVkzeldNREl3ajdmTXV5R3d0bnBVUEZucXVnR1habDZEQUVHNGt6dFRJWi9OaUxGSHRTODdsdUlFbDY2WEZUS0Z1VHF6ZDkranIreEpwQmI5aEVOWFR2L2k1bFFiY1gvZnlsZW9FWFR4NklPOU9JUXIrdlAxTXRheEw2aEFLSTJGRG42ZUdoU243WWpqWG9CenptMStvRGc0V2NKbW93NW1ONXhUZWE1WnFuS3lGd2tiTGgzc0ZzSzM3dnZNQUs2MFdBamxLbDNocnpPV0dYbjlaMkVpeUVBeGJxczJndTV5VzdUSERFZ2hVQ1hCeHQyL1hnQjB6Y01YQUpDZ2xscGZnQzcwcFNBYTE2c0t4amIxKzlxWmhubVgyUjJVRFdPRytpTnViMk9CdVdPNE5PaDZsRndDblNBdGVkMlExNVVKQ3FFYVdrY0lGb1NCcmQzR3BkVGxDVEMzY01iRm5TVU9FT3Y3M3ljSXp3QVdJK1dkUWJWc2lXL3RURlFRZERja0s0SitSK0FKY09xaitNa0N1aTFUMnF0UGVQYWNpRGs0NXZCWndnSHBHSjdoeDR5VnAwUnArSVp2aTdzU2VBcDJWd3JjYnNVdGhGVjR1NGJyNU1JczNkdVpucys0YTNLZWxaNUpTK3JvUHJRN2k4Nk5JakhuaFVIRXp6c25MTDFYRnU0S0p4SkZQZXR4QTZYUEttWTVYdUN3aitwZlVKOE03VitobklyYlFCYTh3N0VsOThqcnVMODhBcjZjMW9KcitsM0hpenZDQytjS3pVTysyZTgvQXpoSDNuT1pycWU3em56NnBQSE4rcnpuajFzbS9pMGZ0SC8vKzkrWGMvVkgxZ29mREZTRFNQejVId1RnUUpjZ0RCTFExVmRXdlBURWw2Zm4rcWtYZklYVEZ0SU5NVzhhaUdXNEc0Z1NLSnVHNHhRdmM0UXUvaFlTUVpBNUNXREM0RVJMUVVibzVHVEdDUFBKS1Z6empoQjJ3VkZjaEtRbVd2aVpUcCs2eUJVa0hQbmRDd25hYzgyOEd0ZHZvY1JIUWhHWGdWbFJaQW1RblJBZE5RREUzNUdLTnNXQ2s4ZWVuQUV6ZkdZbGNXczVpcTAvVmdIMEdvRWNnYzRkR04xSnliZVg4eTE5RjBvN2k1eTg2Y1Z2LzJYSTdGOTRaTjdTSW83enI2cGthTjJCdVB5eW5qSnY2R0owMldUbzNDY3h5N1pEYUJPRXA0dHNCTHp2bmsrTHJqQVdjMjREZEpsWEthaTVDMEVXK3lyVTVvcWx5U3ZEZU9HSmVZbS9EQjJDM0J1WUJmekRhQm5MS2RLMGtFQXdSNHY4WThiZ0VrNURMWmtrME42M1VJanM0c3ZHaFFzMnlFS1VBcThBd3BYSmc1SEhNRFFXY3VDYVpJWklNNElLeDNYU1RzNjRrT0k4RXJZWldBdjdOSFhEb1oyVHd4YTRESzZ2TTFtU0VBNUU0OUpuTlNJVVE4b1RSOEhUbkhrVGlmbHE1Tnhjc1FnelpQektCNGlDd0JteGVDalZ6ckNqeDRnNDhpMXhmc1ZPTHBSeEk2T1BWbUhIUnRIZmlEYmVEUXdyNnVlc3BMVk5GWDJJbTVzeDJWSFBmVU9PTURzd1hwOTh0OFZhZ3ZKMnd6VkxMTHRiaS9IZ1A4N0cxc2FtY2hHbFNDNjNDb0xpZ012YjdEaytiTktjU2ZzaXJzQ1FzNlNlWFM2QTVlQlkwQklIVXdodDRFdlErZUs0SVZzNlFvcUJycExDeG9FUUdoK3FSVlU4VkpVdXpxclpaeExnWGVPQ3VIUm9xMHZEQ1hFeGFud2dCQlhJQXREMXdnUUNQemtZQWtFWkoyUzVWQUFSeEpad0NTcEV6SUtVTGdQekQvL0hyd0l6RWU1YmZ2bmxsMTkvL2ZRdi8vSW4yTUFSaFp2OFA4Sk5CdnFvQUQ0ZVJmUmJkemtEbURvdTI5TDdBQ2hCR1M1QzhPQmJROXM3eXBQRzJ1ck5GZ1JCb0t6Mm5BeDYxWlVCbkRZRHFaRElkZzFpM2tZZ01KTE9TK2dBZ1VKWElmd0cvL1o4R0hlWGNRb0hZVC9WRzJmdjJ1SHpvcHlVeFVyNVJIbnh5Vi9QcDA5K0NVY1VKc1IxWUM5Qm44bWoyb0RmUHVMMURsTHNrcDVFbGRwS0dRcjBjUWtjUm1TTHBTUUhZRXc0MWpEZGFITXg0MFZKNGpIbmRJM3d4SWtJOTY3YkRBbUVTei9hTFJjOFF3U3VhYnNDN0xGMTlwdEh4ZHhyYU5RS3pQMDdxaUFJanJ6Vk9QWlU1b2Z0anlITWtlQnh2QVpReFlEb2pYWTNOYUljRy9meVhlbHM1cDMzT2p0bVk2L2VFUGhqejB3V1oycjJ0c2ZyWTduQjVCK04ySVREUXNnOEw1Vi9HQ3lzYTNaa1NFcGdud0piSVA2Ynh6NmNPRnIrZ0NTRWRzR255cmZIYnpQd09XWmduaXpQekEzTi9VbnhOUEdsTXY0UUVHNzNmLzc1RjE2aGtCb0hYcGlOTC9jek9TSnhmSHNCY0w0VW1EZ1EyQmFtZzI0N2JZa1Q5RllwQ3NpTFpyenZtbGRQR1ZsUmdFUm1PNjZrUUhGUWt3WkxTbmd4SE1mRko2aHVxdUh0WUJ6YjM5Mmp6ZXdzUnZZc09DT3lHRDNaQUlKYVBEWGluZWEwV1Y2QUhFRzJtU2N5WU9pMHh6T0l1bGtPWTZrSm0vbG9sSlpNZ1c3SXBrNXB1K1lSUVRvMFJDdUcwMkQzTHNFVFhDNHFxOHRBZ2V5cUZTNURMaGdFdlFXSUZkSENEVElZYzNmTlZkNXRpVlFhTzFhMk5nWU5kVW53TGpWbjRLNnFvMnFKbzZwNDlSZ1ZqNS80VjBqVGxvRXViU0dsSzRKRURFR2VIUHgrMDNwVjNXWkF4NzhjSkhmQW5OSjkyVHhkQjhaOW9wUDBwZ0hKbXdkM1dxY2Q0WjM1YmdoTGlubmFwL1N1MjN2V3BaNlBHclozRVQvZU9yRjV4Mm1sTTZzYnVLcGV5Y29zSlJjREJTNDVBSmM0WWcveCtHZUQ0ZHl1SHVnS1dlRGhIV3B2SE11VjhHK2NMM1FHY0tQTHlvOE00UzhkNEV1emRQRTRrZktmQm9PQiszd1F4bGVBT0VpZWhDOGQ4QmNuampuQk5Qbk1zS3RXVXdjRXR2anNGb1RlWFVoS2R6VndCTHBtMG9kTEhBcDZ5OWk4Vm83WGVCUFpZc24zTEN1Rk5YOHl4L085eENjZVViSlpNN29POGlLOUlTREY3NXFPT1p5eHZDTmdhK0Y2Qnl0dnZEYVJET3RUQkJnZ2FNdVdoWldvV2NCNFpDeDE1S0thdXQwQXdiOUNJQkV3VlF6c2t0cGQ5QXJ4akdISHJhamV6TnZ5T3dpYjZUYjNuQTFIWURQS1l3dEJIRHpKaWd3UTVYSFo0bkdtQStMZ3ppWS81V2lHMS9uWmhSUUYwWkl3T0dSMmZzUEh2a20xUGk0TlFmSkhISll6aTlKcVBoRUFBRUFBU1VSQlZQSUpSNFpSV28vMXFNM08rVkVYVWJLN29WRjMxMmREY0Q4YkpTL0xCdGp3ZHZ2N2NPVjlybUxPVTY2N0hzN3l4c0FvYWR1dGNacEFNRDdGM0svbEtQc055Y3FRRDdxeElzb2N0U25qdEFWS2dZYTNGdFRXTjY4YklDaTgyK2RTSHVpeHdFZTErUkMwdmNHcUtqNExsS3dNOG85YTBXUWNNYi9oWDhjTTREemxXbDh4bmp0a1pYeXVyS3VWRlBoYlFQamFEKzcrK1lRREw4bnhTOENrWWk1NEpHbjN5WURyL2c1dFRJdm1xdzhmWHM2aFhNNm43UzFwanNSU01BVVhKMWZFd2NndVFxNmNVaFJEc2lvRzBtYVB0WGJrM09iZUVLZDBJVDcrUE15c0hNd3hWeDJCRC9XbFZveHVEaVRNY0VVNy9WTWtrYmxYTjI5cVJNTmNpZ29rZllGcjFUTG5oc3laM0JDRUpKaGx6TFhlMDFJMUd4c1hRYzU1YXN6WWpSMnpqMFNxY0dsSEpXT2tPME1nVXlqUkVuZXY4anQ0THNJUThXVTRYaFRFZ1FFYWg2YXhNTkJCSWk0b1JGSkNDcTBRMlBXMjhLVUREcGZBRWRpczAwRkhxQ3d2akpUWlJRMWs3TGpnOWloWEdMYmRFQWUvTUhoNmhGWnhYTy9lakx4Sk9NbVZzZU0xUUtIQjlSYmxvUmJ2NmRaSm1Za001K1RESVdPU0ZvaGNNSHlWSGU4NjlDNS81ODBEdTAwcFR3UmtPVFVFbDY0dTY4aUIzcUFzdlV0UW1wc1hlOUxMU2h0ZXpIMXZFVDV1S0ZLSUl0YkNISU1MeTJ6bUZWSzZMOEtacGJkS0o2Tnp2aUZmNVF6Z0pEMVpkSHJQT2ZkT2k2dTlUaitWUjJuS0V0LzQveU4rS3lBKzVjT29jZUJWd2U0VGdIc0g4NDJQU2NUOGNoN00zcTU2OHZwY0dSTXJFZXVoUmFJTGJXTGovVjJCZURaSzErQXIwQTFQUk5ranIzRFJGTHRFNEdWMjBzQXBDTG9lU0VMaEpCanpvNEhBUHVxYUowd0pKaDZONmlrdTRFQThoUkRpM2xKWjVHSW9GMmw0ZVZ4eU9RRTJFeFd3ZEtrZ3BtZDBjUkZLZU1lRmRNTmo2ZldXWGtWNTEyaXVFVFpjK2J1NG5HR1VQSGFDNzg4dXhVQWZZRUVzNHppbnVraHlDRzl0MUdQYlF6cjRsVnUvbXlTK2hhMFd5em5TdVZtek5CSGlsUWp2QnBrZC8vQklETEFkUzdDeHJnQzVsYzZKKzZuYnBkNjd6bVd1ZUhmNzhFSUFpa0ZJbElSS3lyWlpoUi9xWHg4SW1jcFZBa3VYTlFBa2YrRWR0WThIRGtSdGhvZHJqakhOSE95dzdJSGlhR21ZWnpQcDZnVGhNWnRLbUI4OEluandsL2grUnFXenBUeTE3dVdmaW4xemZqRXpnTk9CU3kvRFMxK0NUcmpMcHBwcnVuMlgxSkxzYXNyRjN3YkdHRFZNdXVvNy9VRHgzU0QrQ2FDbCtqZVFNOGkyekVhQ3ZDek5pMVJoNk9LMXg0L1ZoczVNR3E4V2NJanZ4dVJFQVc2ekswUWhUbk53eVFkQkJ3amlISUZPU1BwbzhJSUhJVUtXNGZKaUhHYkhvSEFRa2FGdU9oY0U0cUF4cExkeUZhTXpoY0NRemFqZUpYS2tLWDZuSWNTajJGVXJ2aEFaMGlUaVRMZkZoeUZjUnZIRzE0aHp6bmNFZnFQQjFvSmV2cHBWOWdsdUcxS3VudHIxWVh0WEpTVTRYSjFBeEhIVjQ2RFg0TFk0SzUzMXJsTzRZb1hRV0xZZ0YvNlM5ZzFjenNESjFKMjRsbEt2QUhHKzZCWjBxeWZQRitHV2QzZDlNL3lxdWFYSWM5bTdTd2tReE9sR2hJejMvNWZSQTJSZ3RyWCt0ZWE4enNCTEFsdlBjWWgveXZuRUs1WjhhYVVXRjZXWXp6MGVRUDdSdUs3dnVkdyt5dXVjYi9iWE53TzQwZVdnamd6aEx4MzdTN080T0d4MnNlRnh3T1o5UHY0S0VBYUl1UWdvRC93QnhQQ0I5TktSUDBVODZzN3FPUVowdWFwdTBGVmE4UjMzV0Nsd3NrQTdQMDVvUjY3RTR3NE0wMDV4MmgzeDFQSFZsdGsvNGh2T2RkeFNLQkdtaW5tVkRzWVVydSsxaTJQaE0zN0dGTTZFNDlGZEdxcEdUZWJBcytOODJNQ2NMRVFHRmRRcVhFWjNDWEdEZkk5eVJEYmZWWTZDdVhhcWNIYWpXdG56ejJ0aWF3SlhGQXdPbVFidGpJcUszRVVwSWZSR0YzbHpOOHp0RTRITHcwZTBKQkRVQUgyMk56NVNJbDFlS0Rad3Y3akFjYytOOElzWlhhZmJOK3JKZ1BORU9Xbmpob3dUeU1sa0xpTDdsaEg3K1UvMkNKOUw0em9ZTkNnaVRQRUNFRWJjZHBZUklyS2U4eEgwMlI5R3pSeFMzQ0pxRU5zb0JlMnEzZnc3K0xpemxobjhQbnNTT25HSms4YmRGZTNENyt1aHFsaFpEcXBsQmdEUGRCZmwwNGxJYm9ncnlPM3BUWEV4ZHNaeXVuYUNVOFREVmxHc0U1NWhESDYra0poZ1lHbURZelVuRmZnMmloRXN2dlduNlpvVGU0VHZzVzRmNlR2bmQyVEhPaTdYNXl1Y0F6NXorY0E2NHQ3SDdEZ0hNckszZ04xNy83d2pncW95Um8zNEswQS8vL3p6ZDkvOTQ3ZmYvcEZmOHNkYnlmRTAvY2Y1ZS8vb3hOOEh5TjMvQTUvRldXUStNNkdKWXRnT3lXc1BKVkFLTWlSN3ppeGUxQWtrMjdpeTBNNmRDalB3TEpZRVZiN2RCNFBEOG9OdFE2UHRJOFBkSG1lVW9IS0JLVnREU0U1TVBWM29pa1BsaG1OSzhXY09zbjdlV21WZGNadWwyWjUzWFFDam1GaXdVVHhMOGpheTJCM0diNy9oSHdHSTMvV2VvQWRDS2tKeklNT1FGRnpDQjVpelJENFJjRGpMaW5JREkyVTNzdWM4b00zMGFKaDRvd1BTZDBtZG40eWhzN0ZQclhOMkRxcFExUDMvMlh2YjVWaHk1Rmh3K2tNbU0vM2NlL2Y5SDFLMkpwTTAzYk1lNFlDbkl3S1psVVVXZWRpbm1jTkJPVHc4UEFMSXJLb3NrczJUM1kyOUplWW1VQkFNMW9SVEVDY2d6djR4WmtmZ3hpV0JLVERrR1BIZjNDY09qbCtVT2VadnpvQ2ZvWEhacE8wWXlvVkVObnJLYzR2RWdHMGNzdVNKeThnVWw2M00rS3Yvc1paOHZVQlUxekN5WWtsNUVLZFBuSG1aZU50bkdGbnlGQWhEYXhzOHpiRlgwcnRoUm5jKytIdjhtVUpCZUtvOUFwMy9hQU9mWGc1L0ZUb0Q0TlhqN0pCdFk1ZU81Nmt2Qk05R0ZKUTRIZUxja1hFZUpBL2VIOG5FK3MxNFpPZVp5TWZ4K2srOEg1a3dZdWpHaSthM3FrR01sOHFZeGdtSGVKUmRYZzBISFF1YThWa3kxNVNWbG5JemZQcDRwbVlUaW5JYTljZUZNUXpMRkt6MkxSVmNqR3hHVnBNZGZEZGtiTFUxZlR3bmxvTU9vY2YxdGtTaU9Wd245WVNtUnY2bGdUS1ZIL1VlUmNFb2x5Zm5rTTNUQ2YwaG5oM2t5V2JPeUhBWjlUNVNKSjhqTks3eDhBVkpucTNFeXhXdnAzaGs0VEdlOE1jS29BdHBkcjVrVGg3ZTQ5OHp5YnJhUTdiQmJ0UEExcDRzbDBrOThleXRYRCtoUmtoNllwRnBkZ2d3N1VxS3Fhd2pUdGk2SjF4Wnlyaml5TGFweU9yMG9ybHFPUkQyWmtBR3I2ZWp0bEZidEcwSnNzeGk3akZ1eGU4aGRTSmc0bGp0QVhSL2tleFRnc0s3aVN2Sks0cjAvYk5kdml0QVEvVVZZeFgwR2F2bnUwOWNoemlnd1loL0JPQy8vL3UvLytkLy9oc3piUGtmZi93VHl2aXZBdElpcjd1VVp2NW1JM3FscjhPZ2UyNFRnV00wV1VpMjdScGhpajNscVkzQUxzOXpQeXl4bzJCOHpPck9zTnBSeDB6aXRHVzZiSU9KQk5xbkZ3ZGxDY3dncEpIRXhsbzBWRnZ5RGZ4Wnl1S1A5dk9lSWd2SE1IY3NNQTkxbTlOTWlCNlBUWmhDNlRlaE16MTVpd0krc1ovSHBjSitjaXdrcHNGSU1ESDVFVTJOeWVLNzVqbUZldHlEU2c4cVFqWXlsRnlFNHIvYVN3cDNZV0dUYXZ3dHk3RzNjZU1SdkVmbE9NaDA3N0s4Mm1aaDF0dU50cDhNUng2T3hqOWdxRmRXQjF0UGtoakhlbWRkcGVQWEFpSmtKMnVjbmN4a1Z1NVplS1E0UGdNRW81UElweHluNGdGMmV6TzJmMnh4aW1ZaTlnVmRqZDNKQ0ljZForRVBnL1Z1ZmxNb2IxQ25qbzl6cjBidm15UlF4eXF4M0RWam4zRHB0cWI4cU8xYXU5ak91Tkx0ZW5ka1hncTd3Qk5iTnZySURTOVcyS2g1NnFUcVY5K3hrTG14aDAweXgvU1FKdUo5Qmo1VGNEYXU3a08rOG5rZGdEcmltZUJUK1Vmbk5HM2hhS21SMEhZK201ZmxBYzc0US9FRDBXNXAwYzZXdnpxWnIxcURUaUlNZ2ZsRjdDUDViWmV2NnVTTlB2SGVkN3djdmRIa0pXbHpLNDhuREd3bk9TcjQvbUkzTVgxbVQ4UE1GOHUxWStUQlgrMkJnRk9JK1FGZzFNYURBZ2YxVXlDdW1lUGJGc1J0eGY0dy9jeHdXOExGTGdDR1d6anlGc0ZHbGpsR2hyTDJtZHRGWXlycUlFcm5jbVFvUmxhRmNaNGg1THFHVTJlQVhlTllJUUEvek9TZ1MrSVJXUDB4WXdoNnJJNGpHS1UzQnFIWWg2S1hmK0hQZktDbkNSTmxLQjhCYndBeThRblFQRG9aOSs1WkM1SmpGUklmWGVXL0xDc2xCTVZmVTRheXpXV3hMaWorT1YzRUZHUzVZNzFjQlgwMFF0bDVwWE5SMUNpRmVwQmt0a0RrV1paeXBRVFFvV2dCbUVKejNUQUVKU3NaZktjZmljZC9UT1ZXQ1BGUTRpUU92akI5dXJ2dFBsVEhTOFRCdlJtTjU4N014NmJndWJHUVhOMFV4R015aXdaY3ZLamxsbUpyWW5yekNPRURjVy9ncG5mS1lQNU1QNUhERGE1RjltM2tLMG1Wdm5XK0wzSFBiWnZycFBBWkVNK0NQaVUreHJaRENERmFtaVhmNUhFSjRTaGlUSjEwN01yT08zTUh1OXMzL292dWdONVEwRCt4TTF4VVovNmlpNzFvV3hjOEZnc1pwZzZJUGYyMy8vUC8vSitjeHo4UUFJQWZDdnoyVy96U2lLUUp4bFNrV3hCdlEyZ0IzNUNNY2Q3b2RJQjBrajZLRlBEb2lxTytHQUJoOHBvS1hPdVZkZWp6RlF0VEhoSUlnSGRQeHd5SmNaQ1luWStUNUQ1U0ZuTExuMWNaYjNpOEdIQTlyQUJtWkJZQTB2Z0k1WmVBVW1yV1BNbmdJOFF2STlNMkxva2pLazFldUQyRnlralFHbU5pUitGcFBvdnUxOHRObUpyajRvRnIyVzJaSHdDU3JBNkdaQi9aSFhucmRFRHhBdElrbzU2amtsbzlBYkdiK1ozN1JZeGRuZWFIVzVLSElhY2EwWU5Lck9UcHRaMHBxTVA5UUhxQ0hJTmRlVTdQUmxxdCt4Q3pZa0xCaFltbkNIZTlRZ0t6ME9tK1lVOXNXN1NyQkxBNVdvM0pPT1EyNTZ0TUw5WlR2MzFjdDdkSmZIVXQrRTVpdWZ1UGJyRUhXSUs1enFldFVSQ0ZJcVZCSSt2MjE1SGxoZ2UrdDJPSEhtaWUyWVhzazNtMWxnaFc0c3N0MFRiVmp6ZGJoTmRQRysvYVA3VndGNnQ3SjN0M2lpYmd1VHRHa1ZOMmhQajVjUEpoTFBIRW94cjRiQ2JHcGo4MEE2MGFrcDRsR1lEempxVUJlY1pMODA2dzlYK25wNmZ2L2ZVa2MrbEw4WGpPMy9YVTVYWTM0VW5kbFg5L0pRVERIZEtMZ01DVGRWOHJ2MXFGVjZMdXJqb3ovVG9waThVZHZnNW9HWTMvU05SMXdENzFidjZpMkhma0RVdllwaGV5VEZGRmpBUGlNcFpweVVYVUJlemZHY2ZNRlVPQVhvcW5USW9TVXpJdUVDT2dLcUdlUjBrQlRjYkZYU01aYlhwS2ZDODgzeUxqT1pDM0Vab0trTWRJeHF0a1VuZy9CQlNVOFdHV08zTUpad3lzZEZDRHFVQUppUWNnNWtpWlkwOE02VndwemN2MGdwUnplaXdYakVJRUdtVk9BSDRBdnMzYnllS3AyWTRnK2NYelcwWk5IUWdYd3d1ZlhrVW1Ba3FQWDNsWnQvRlltdFo0QUYzblNCcUpjNHU0amZGZGxlMmhmZHRHallUUGgzNnhGRXRZMlJYMmJzRmd5ZG1iUzh2ZGY5d2ZZcFB2ZjdtWDR5d1hXNnFqTXdyOVNMRCt3T1JCSi9mRVdPa0RId3QzY2Q4b2FRVGNRSmpSblFaUGwyekorZ2N6eVBFcGJ2Uzg4c2RDakZmQkFKMmZ0aU5LamNaZzUvTlJTZ0dGVWpYYnpvbHJHUDBlZjVvZDZEZXhZZ1QrMG92RktyWUhGOFZRV1dCK2MvODMvQmFRSng2L0FvVG5BNzRMZ2pDT24rQzVrY3RaZm5lQ1RObVU2Mm5jSCtEQVh5TER3Vy9Xek05TGZPa0xRVElEakg4V0s3UHlWUWw1WHRlN1NoektSa1lLK0t5NUNJSWt6emJXTWFRZXhXUzhjK1JuUEhrS3BHQlVtZXVhS2ROcW1vUnN1QjJOSVJnTHg5RkRrMEZRSmJBcTdKdmVCTUJ6cFdrQmp4RVorbVFMcVNsVE9GS3ZVSHhQdk8yRGVnRFFXWXYwZFE4ak9KbkRmRzRPU3ZCWDdBTU1td05RanhHaG94bkRNbVRVWmNyMWRDL0JpcW9MV1poTWN5amp3a2cyNEd4UGF4RlpOVlRtenFmSFloSmRUYXVhT0VQa2tZYjBhTy9YSE9mbVFEWDQyYW96d0R4OGRjSUlNZGVCc05zQ1gvajBxRXdFcU9HVzV0YkdhVlVueEJJWGdHa2VjZFhsT1JuTllJWVY1RjB5RElMRS8zTWFjb2t5YTF4Rm1SSlJIYnloMXZUbHdOdFl6ZlBKR0IvUTh0azBZNmtIbDlIanFjeHd2ZnV2OFdseS9YamUwcEVYcCthWVhhSDN5TGpJSy9kdHpHNkx0M0VqMFIyS1hQVTR0OXFTZG5BckMzSmRnOHVFRGVUbjFiand4Nm1jQUNVSE9abndEWXhIbm9zQStGOTh5eVpRUnJVd0tCMkhKSTl3bU1jV2sreWhNMzZhWmJ0bS9wQ1g0QnY4ZFhkQUw5UmFBbDk0L2ZwQnFNdWsvNnNEcnBlcjBES3hmTno5WS9yNzc3L3ozd1BXTW84UEFNb0JLUHNsOVY4WFlFWGNEdCtnTzh2Qnl4WmZvcmduU3Q4YjV1c2VycS9pclAwc1BkQUVZbmU3SU9tTGJ6WEt4eE5adERQeUx3QlQrVEJFQmlNUFdBRm95Wk1lbHdkNWRlc3BKVXMrc1pubVNjeEVyK0thYlZHUkJLN1hteS9JczlVcGhIVDg4cmFtMHBPUnVmaGtFQng3b3NUd09XNTVzVXJNanZ0ZyttaVV1WUJDQ1k3RXFKUmVYVG1ZRUl5TExjUzZDMGYxL0hNRHBZM0l5cytvVFBjUmhYeEtIUDNFcDRsbEo2bU15THluQnlBWkRDN08vQXhBd2NHbkNhYUZnVG1ZVFovbXFaUkkzdlZKRTRTMlB0NC9jZHFNUVZHbEMzQmRtQ3ByQzZqSENHSDhQNGJvSkI2Q0FVQWVtYmdOOHB1eUNDeEhtY0lsVWhmSjZ5YnBpNHFsS0FxUVFYZExLRmVpbjJtTUVEV3gzTEJiOUcvb0ZPczl5VHI0MHRXcVAyUXJQMmZIamVoa3poOWp2YkdvelhIV3d6enZtNVJucWJNU2QzeTJ1VTRLbndIeExPZFQ0aGl4MmNzVndrc2JrVGdpTVY2TzlaVlBnMFUvbG5Mb0IzSHdJb2FoNWhOMDNwazdlRHA5UC82RmQ0Q3YvRndBc1RQTy80VVhlYTkxdlFUMWk1OGg4TkxFQjRDWTRKbWJMSEJNZjRyRDEvbWVCV0U3dUNNRWptUDM1dGNvRWErQjlZYXBWMWR2Q1dwOGpiTGcxUEIyZ0NjcnVSRzJrK3JNa1N5QndGd1h6djF4MGgyekpwbDg0VDVrQ0lrUm1EM0c0ODRIbHhvbFdDQ0F1OTFoMG5XMHFpMmlJVU80dVlXeGZneWpZaW9VVERhbWJZbDNLRXlNM0dmTnhIZzd5Nk0wc0ozNm9pZ29zdUYxd3hDU2ZlNDhPMWdqT21mekRwQVlwRTdIQkZKRzhVbjJmY2dic25IYVpCc3BheTI2N1R1Y25mY2Q2UG9MeGtPTzJVd1ppNkJNSVFZVFM1Z1hKTk9EYkV6WGtPbWVhY0xyZy9zeFhIT3I1blZ6Y2t2cENVekRtUGRUMjRna0x3Q3RBRnZGK3Z6dTkraC9WeExSZk80eDFoeDNLUnVPZWRmWmExY2JrMEl0YmxwRUVjMkx1ZEJ6Vll0SDBieHZtaFgwbW1KZVdLYk5BcElwVjZOcGlyNU1LYndtTTRvWHhLYnF6ZEFPK3dKdGpIR3BNRzFKenU5VldZK3B4L3pNc1BHekdld0dOOFJCR2xVK3lLeUlrVjhxdCtVLzd0eG1GOS9ERDl3QlBGbDRBUVZvVDZnZjJOakhsZWJyZzY4WEM4ZUIzLzRuQ1VDRzAvZ0FBQXBqL293Z01QNGpZUHlrQUNLUXNpTVFBM0I5akVTSStLeHJhdmRIVVA0dVZIVW50eGh1RU5PVGdxMGhRdEpRMEtjcmY5d1pGME1sc2h5bUVJeHgyMkt1Y1pGRlN2UkRzaVNCTE15WWptOGxIZ3Voa3IrNHBlWUZ1Z243WkZIbWtvR3laNGtSb0NHbmJxNkdGUkxqem5xOURkblpHczMzVC8xREZYbG5ocXpTczh3emlXOUd4MExZREZJdUFCMjhXOVpYRnFkUmV2NHlHRHJITk5ZeW5jTWtkUWRwbW9oRyt2SG5mZkNQN2FXOEQrTzgweDl1dE4zdUZhUmhhejBRWXhSZ201S0JWMG1HUm0veitVN0JESEhHT2x6WjJNa1VFQitHNFp5WGRKYUkzdUU2cmJnT2pRU0lIbjkzMzN0V256T2RQcUJIQXlqaCtxeDRER3p2bUNlYW5pbzlyaVh0TVZUNFZ4QkR5eXJyQ0hvMG94NWkwNDcrSXpFMCtUQy9VWDUwa2p1TWYvUWp3MVNPVGpEaGl6QkRXcktVRjRDTG1rdWJIYXBWeTVSR0hCaThicUNjaGFJOVBqV3REWkRVK0VlQ3d5YlFmSjRtVHBNUlA5WTRpTjFEYWFCTFRCREJNdTE2TVl2eTJQdGpvNmlFek5ZN3NtTWZBbHJhaU15elBLZDZYTXFKM1oyT0ViUi9MOExrODFsdkZOczc5VGNsNEhGT3NmMmI5b2VhYm9kbmZEdGs1QjRPazBGSVNvREFjVnNlRjNyZ0dJLy9EQ1l2b2VPSGdZaVdJdzJZZFl6UTBHcUE4TStQRmpFU1J5U3R3aUN2clRITjV4MyszWlg1REJ2UjFCNjVZenBXeHl0L3ZtU0ZZeTVraUc0L1hHZnh4TUVNTXRZdGpFSmVrSjZqejNuOWtQVFJVKzdna29zcEdjOVZVWklVcEhBUm4vRnVCY3pGVWx4Q1B0V2VpRVFLTzlFSU14b3FWTVNjOXFoa1o0TFNubFVjcVhwOXBwS0NZdHVuN3FNU0F0UVhLMHpsUTNUTUZUZ0hNQytHMU9KMS9wLy8vQ2R1OHJHUWYvLzNmLyt2Ly9xdmYvdTNmOE0vRGpCdTlQT0pObDRCUzMvbnRiNWN4UGZ1NWMxeFo5MjJNeDRsZnFnNXpuR2V1ZU5rNXhRbXdSRGp0U2xYS0U4QjFSWFRnV3VJcGZGUTJjT3VVUzZBTGpYUFFncERzZ1hvUHAzWnlzSXFYL0dQamFMdjNKOFVrRHJHYnU0TThUVXppNHduaFZ0ajJSNlZ6NW10aStXakxESDNnWEtQcXlXVHhYZXIzaHMxaFhlSGlmbitHdkxKZFBzbHBETWxnSVNLZGZybTN6eDFBZXdpaFcvcFdUandrWkluSmFmTVV1Z3dtZUloa01uc0JJU3lCRkFWTnpGK01ZZk1GcjdiQVNSRkVZVVNaTnJLazNwcWhHKzY1MjdjeSt6cnRienc4WU4zY01sNkNDdFlwcms0WjFhUG1KMUZJM2EwRkxPLzNIRzF0TGFZdDYzMXFSSzN4TXNaUEpwYWNrTXpRbzNQVTY3VnVadGpDdnd6d0pJeWI2eVRaQW1NM1VCSkE3aUNMLzVTZUVpa0FEdlI5Q0hBNnBlVlAwdzRFZUFWNDdxeGs3d3ZTdjlNYS9taVcveUpiWTIzVVh5bkxmL2pYcHhjZnBnQkQ2YitOd0NmMk5pN1NwVTM2VEo5bC9VdUdidW1FbzZwN2N6T1k5d2lMT0o0Q1Y1ZTRqeEs3QXdzZVBjcDBnR0tvc2t0b3hDQjJxTllLZUNCR2ZYMVNnOGdubUpPbVZWQ1c1OXJEVDI5U241UGlrNHhsbFpWL1FCNFNjOGJSeXE5TVRIcUlhTDVKZ0NHVVpaZ1BaZFJrTjVES1gzcGlybUtFbWdxLzJGSWRZNlRHVCtxeXhzbk5CZGZERTFCVE9sendidUFEaXFsbHB6M0RqMVgzNkVIdWEzclBRVE9INUt3bGdveFVRMFU0REp2dzNrMzlIVFhnL2NVWWZDbDg4SW9jZTVyUE5tVlhwb3ZmTjV6UU1JejRvVjRjekhPRkVyZzJGb3hkRGJHVGRSWjdHbStPa1Z6eHkxUVJMRzYxUlZUY0lXVWhMeEhIWWRzZVhWVDNnYU14R3hwRTM0TkJmZlR0ZXdxaEg3SGYyMXVlNzRLV2FaY1VDRTVMU1NVemdDM1V3WXVYMWZUVkdJQjN6eVNDZ2xjYUJoeVpUSHgzSS9BZUJhaklrZjUrM1Fya1BMTGdyNmxYN2JWejI5TTU3ZUR6Mi9tb2lMYTg2aDNTNHdSSHdBb2l3OEFSTWdCd0FFS28xdDhIY3pHdkwzRXl5dTBSMS9TT1ovcXhjcEp4OW80a2o2ZU92Q2xNbDlRbU80alhtdGpSWHJUeXBjZVdJR0V1WU9DV1U0eVRvdUdlNlVtbFVJZ2YrVTZEOHgwanpLbGhJcVBOQzdyNU1qSzk1cnhPLzNjQ3FRSkdOYk9CNWR2MnJIMitlZndDNkFnRzhBUUI4cjViampKa0FRbEZIYzQ4M1JFeGZUUm1LSHhsM1pCcGhncU5ydGN0MUNxUkx4N3JzOUJHWkpQcTNrTmFKbHhxelV2Q1FPUmdvSXpPcnJsemhnUEdYZEpKcEdGeWJ6TWtJakRPem5ERUVYUkhMblV3V1MrUWk3YjRDd25uck96WEVZeFNyQ3ZDOFU4MFFEU0M4VE80emQ2Mm5tRXJlK0RGajRTNFJWdUxKNFB1Vkc1ZmJIRkVjZ2pkZU5LRXpOTlNHeEdKZytMVFh5aEZwbld1RWlPU1o1clpzUnU1Q3FPYVBRL2x1YWtjS1NrUmt3RlQzV2V5ZlNzUHJ2UWhYS2JQc25vS2Z0aWM1T094ODU0OUM1R1k2OHh1bHR3MWJXVDJFL3J3a2hmQUtjaVVXU0QxMi9QSENueDdOY0pBb3lEMXhJdnlaeXVmYTh6Q1FROExsTEFvNStBL1FWQlBaQlVDRzA0L29TdTNsTkNxM0NUTGVtQ3Z4WFcyZXpnSys4RHVrVjd1dW5Ici9mamQ0SDQwd0R3di8yLy8vZi9waUtlcnZ6dGYzd0UwSHFZakpFQXZJQTBXMEFaalRBcVM0QlpRNGFIK1I3cGdOaEhOckF3K1pkUHlKZFJZdGNMQXdnclVTbGk4amQ4OFlxTy91SUw3NGtKNG8zUHBpTUVTZXhqcnNYTjVWYjhZMy9pYmc4UEdPUEJ4ekpsU0ovUE1NMjhTQUdZc3c3aWxUZWxDYUxVeW9UTFlOSXdNRk9XNlV3c29VVVRPeEpmZE5qNk1EMGtjWXhhbmVUYXBsVmYxQ21EMTZ6enJSaFpGT1NJQnFLTnVUOFFIRjBSK3hoSzAzdklFb2RKTXFHV0RFQ3lDVUxBSTVtQTZuOEU1b040QUdLTVdBQXhFOFV6U1NGR3k5ZzFGQnhaY1hIbWlpbWR0YnhLd1dXcWlnSXUySklVc0tDTEhaOUZaZWdDSjJWK0JyQmNiYWxYbFA2Ukd5dkhHQ25MNWlXSklhOTZYZ3VJaHlSZVRQd3JOajIrSWpZT2IyQnlwNDlkM0JrbXgrZWQvTUl0MnlnNlN1UFRRZng2dDVQUXpKSUVtb0oyUEZSc24rTk12UE80c1dyK1c4MUQ4Nk9qdmlHZFdVN0FRKzhoT0ZzdUd0NSs3ZlZ2dVBmcUtROFpDUXo0Ny9USEptY0lnelpjcTRnWUx4dEZCNWhyaXJRODBrWU9FUWJORFN0QTA2bFIxa2h4QVIybVVyTW5RTGpQYnA5SVN5a3ZtTTFsQTB0LzZqN3IrNUg2N2U2cG9FZUZqeE1nM1NsNDYxYWVHcFlBL1orbzhrenpwZFptK3BMVGVyK2xwMWU3YVhsY2l2b0FBQW4rRWlnV3dsOEUwdjFrNlBqdC81Y3NjdGZKQzdqZW16UEV6cnlnNUxUQTgwRlBDWEkrSFRoZjFJaDloTDZMeFJTbGl6MGt2QVVnL2FBSm1TeU8vendMcit3Z0F1aUxERWFGaVB0VWZBblJsbEhaZHJLbnUwYWVJbVhWdDdvd1dGSmxjbjFZRXhiSzk5d0NPQjFrS0k2ekl6ZVNjd01QZ2RlaTJNY1M5UkN0eUhoRnBreG1hVVloQXM5ZG5HMlpXcG9BZDRDN0FmS01MekxxMlpYcXppYkhiaXc5MkpVdkdkdlcyUFZTYmtQM28wam5zVTBSV1FCU3lEZ1FsbGdNZ0RDaUVoQmtLQlYyUVdaQ1BPOVNyZ0ZUUk1nSFB2MHFlVEo0Qk5qSEkxWEVSOGV6WjZiRVZaSi9SbFlPcXlIYmVtdHpNdDJERDdJZEs3dlk3QjU2NGtialdBdjZ2LzkxcEwwVDRRUzV3M3ErUnFSckdHajhlS2ZJcTJPNVN2MmlKY1lXTVgweHlkZGUvSzR4WWxrQ3dRQSthdHA3S0RKWE11UXBuV0gwZzhidDNZVklnUStxL2dtMjJFL2YwaytvK0ZjczhmVlBORThpKzhTb0R3RDRDUUEyWEQ4QjJQK2JYMS8vQ2lnbm9FeGZma241aGpobW9jNXNHNkRNeFk2TEZVS01jdXpSenJnK2t2T0FyQVBtTXFTUnBNUStKYmtOTWIyRVJOSkVVOGpFaUhUbWpKVEdIWVFMd0h0U3ZIUG5kelRqSGFnQkNxakJ2L0lXLzlBYnZnV0wxaEtRRWVrOE1HcXhIRWMyNW94akxrZWppMGxDckVPTVFBbUpCeURtdzFqSS9BNHUxNnNkS05Felhyc0VnYjVrNVNhRmxDSDRvNnZvREVSbGtxNkR5NFM1ZHBrd1IxSHhaT1JZcHBSNWxqTXljU0RzV1c3ci9CMjMwT0JpeXUrbUE4ZHNIbTQ3dWZVeExyNVBQZEJTNzJwbDJOS0hOWmJQUkt6N283N3M4dFoxZmdic1hIM3FXWGhuc2ZWOERiTkNsaWxGSUowblR1NDQzUzVBRnFhMmU4RDVNOUpKeG1zQ2Z1RjR2cnIyL1ZRSk5URGF0WWVpNmNxdHdBeGVESFZUNWI1K0I3SVZ1UGhyWW00amUzUDhOYnY5NUs1MGZqdjQ1RTZlTFllR2VlQ21IN25BT0xrWWlYL1BQKzhHaGgvMGZ3T0xDWTZoeUdwOGhpZTgrK095c005RFlCTHZmV1JqNzNXNW5hK3R1SjJCTGNxYnp0a29kNkNNMnBiOGpZUEgzcjBOTVFKd0lXNU0rSXNVOEtwR1JtdDQzWjd0U3pWYWJpRXRaWlBWeE5FR0hOMjhNOW5BOFpzODdNQTZWRXNiOEdhMzdrL0dlY2ZicnJvQU1pZUpuZG1zb2IxUG51bnY4SGMwZlMzS3dpc0RUcGFtNnJZekVjSzV2ZnpaOXo0cmRxaWViaFVpS0lJeWpjcm1RT3pNMXFTUTB2TUpnRlh6eXRaMVA0bjVHaGdWOFpJYWEwWjVSbytuTStqbFNaVGZGSVUwWG9TUEE2eHNEL1o0U2gzY0RqM1FhVVc3M0VmYy9yTkhyT3BCMVVmR1YzSHMyRlg0VlRHc1ludnNpKy9aclVHUVQ4alAramoxZm1zQVY4TERWR213Z0xoeXpoT082TTVWUGgya2M3aUhOMForQ1JPVUVkTjJ5TGxGU0xDdE1xcFhnRFVVSDFzeVVSSE14QlM4N2d1ZXZCZk5YRWZaNjFjZVkybVhyK2V2YWQ3MzMzZTduNEtvdDU2QTEzVHdScGZuejI4OEE5NVk3RjdhV1V2Z0ZjSlBBL0QzUU9HSGp3Uy8vL0huUDMvNzlWZjg5ajlZWHNwNFY4TlZIZklzR1NDUTNxaXVGakNUUW8vLzUzSWpFYy8xbUU0QVBEK09BT0t3Ri83NDNkaW9aMFZaT3V2R1V6V25iQzV5RHhTemVVeVRFY1dVekt6TEVzYzQ4K0lSKzBBeE1JR21sRWt3ZDh4ZkJZS2pucktoeWYreWdveEt4R3J5aG9DTDBzZ3FNT0crY1kyd2pWMzhOYzdjRUJnNDZ4Q1NVblF3bVJzbHdqZVBBTFRKYlJuc2VCajdtRFBIOFNJKzB5SW90MVJtS05Cc2o4LzFxRG1aWmErWU5FUFpHSW9kRGVhMXRKUlFMd013ZDJZY3BYRnhJOFRGRG1uNC9PdTMzWG54Tm1Zemh4V2pyaEhqNGkxSkFUc3A0bm1hOEtoVzBTbDY1aFlGVGs4Q1lvU1cvOGg0aWlHVW1EaDhjUEQ2bnpLWjYzUzR1UndjQ0I4bHRCQStaOVcvbGdsbTlqT2FpVlpHaC8vQ3kwM01wb1o5VHM5TnVSREhnWkJIeVpReGRHRjlYRytSQW5QOWV2NHNORFlaM3drWlRPWkVjamprdm1WbkVaMnZEL0g4blU5U1gzWGVKTWVTYytIVGtDenRzb2MwenVaaXVuNHlZQ3hHZkdzbWV1YTJISFFnMzlVUlNXbmdZeFVabWE4a1E4WUhiaDh3KzV3eExBckViRlJzZnBQSS9nT3hFZURaWTVOVEc0OWo3VTRaMXJZUG1ibnNTbzhYWklXVWJwWUJKU2k4cHJOT2FFWE9IVDRZN1I2MjZPcGUyQ3dTeGhYUnR3TFVhV1A0bDhpclNjeTNKSGllc2xPM1psV1VaMVB4OFphVHA5N0g2RWZYQXpwYk5CR1FXREs4M3M2cytDaVpmUGFPcTRoV2VCSkZ0eUhMVWNESitObFp6TnNZU2ZzanFtVmtHWG5lNGJPQ2VFdUFHS2M3UTlFcWpvSG42N0JINHplbjJUZEUxbFhtMWNFRkhWZDExblVaTytreTlrTitxd2Q1eHN1VEdzcDZDVEx4NWhLYnlZdHVVV1hpd1Z0TDNNSkZqSWtYT3ZZVEczais3SUtNTHNpZC9tRDIvcVVFcGt5bmhSeThkTUdzVlNyT3Vzc1Y2TFg0dW8xTzV3TFZYZ0RXWFFFYWl5SnFDWml0Qm1zOFNEWWZhODRyalFJZnA4UzUwVUFKaFZzZXVBSElmL0lydkhFeHgwOEEvdnhIL0pBT1ZiSVFhZzBMdWtLb1Byek9GbE81RFRtSlRuejYxZkRiMjhQV1JYSmUxSG5WYXAxOFo4QktnOGtReG5FdDJEWE55NEliNG5oc1VieE80VHV5Wi9jS29WSldnbkh5NG5uR1BiZUdRcHlsdCt0Rk9nUm5vY0pmaUtNbjZ5cHFWb1pFNlZ5Tnp1dVBXV3ZEZlYwSEEzMTZjSTNBUjBqZXk1VStHdEFHanJic29ZY0tVNmFXdWtESkFCVHdMWlZBVVFBbkhTdmtKTERuQ2hjTmlsS3A2bVdxODBVSHBydkpob2NucnpmdTh6d0xvOFE4RWFHSlV3U3o0L1pPYmJpdG1nZVFXRmdNZ2FZVUlBUGYwQWlIMnN4NEVpMVhCVHJKQzJXME1SdUw5SW5OQmlSK2dRemF3ZkVCeWhURGY1NkNtWXM1TkdTOXo5bGMxTmtjc1owYmVwcU5za094VjI3VHQrUlpmdkJqbmR1OHZ6YUoxYTNiYU1zNURaaG13SGpTUFNQdkRoL0o0Sks3dG84bjQyNEJjYTFtcGdCbXhPRzRYWEdRTFlDY1J6MWtuVThiSG14STZhT3RwOFRmTmIyL005ZktzK2daLzZEcE9QUFA3ZElEUXc4UDg5ZnNLMTZIMzdiR250Z1pkbjNDUDlYL3Nwa25ocjVIVCtPdEorNzdzVGs0OEY4QVk0elBzWGgrOGxZeStkR1c0NmNyN3hKUWczUUhPL25yT2RSVjZZZnU5NVVQclNqQWZoYmdpWXFDZE95YU5ZVDdEVHdkOFUwSUFGZ2ZJSDdQMktaVGdPcExBNm9DVUhBU01EbHNXWUxPR3Fkei91NThGdlc2a2psNXBPQ0dLUTh1a0ExMHhwZk1LSlhhbHA1U0dPcExscWR2Y1NHM0pyaWFIMzVoQytPaXo5RkJ3ZDBuOW41bWVkVEpvdEZVR2pLY2Fpd2twOTZQbEt3cmZhNGpMaUhmWVc2VTlzZjN1V01sU3M5ME9WOERSZS80ZEdkUEZ5WlFxMnFzTUs0WGxoaE1IaURpQU9ZNDZQWGhJclFLWTliRThhd0gzWldmeGJEMEQyemdzeGI2Z2pyWXBhZStuaXVKYTZOY0hvVXBVVFV6Zjh2MzZFMk1BV1RIblFFUFdoVkRURHNEdlpQRVBycmhjSjhwbmxoQ212N0VvQy8vYk45YzZaaWIwNWxyL2lmZTBuNFgxeGt1LzR6MzZGYXpKWi9hMG11SDYrakRRajBkaks0cllmZ2MveEFZUGlMMHRJZVZuaFY4UWdtMTVMVWNTM0FCbnRVWEsreDFkeUJaUWpsZHNzRmd6blNKQmZJRlBWNXR1eit5bEN0Qm1pMXUwa2pQOHRNd3Z0MUlEWG1NQ0NtcmgwNThsbVpvSWtPWTlBVnVDODJ1anBZS3c5N2todWFGR2ZMU3ZTNmlKQlZTa3c2V2FPNlA2bDZrUjJqK3pnUXdidVBZRzUwWFR5dm12REErT3FraXRIUURvUDhobXh0TGphZXdBdis2Qy9tOHJjd1BOR0cwZ0pINGE1ejNZaEtsODlqeThmT3YvSGRHZWlLU1JHSWpvbWE3cmdxakVreGszY1VucVNJN3F1U3QyRFpLSzlrNlFLaTBRZkhXSnhNalE2dk85UEhIRlpEQ1hJeFFCbTRNTmJqeDhwL3NVVHpTSXcvL2h4WEhzTW1qVENjZHNwdkgwZDZSa0Q4T1BxYkQ3YjZucGY1TjRYYXZ0dVJ1LzUvWnRIRlJaWXBqZWt3R2o3VzZHQWZxUnFSNklTTmUwd0F6VFNTeXBCVHVqTXdKUE4yWkl2djVwbWM3NHh2aUd1MUFJY3YwVENiKzV3TjhpY2E2T2hDcGtDOWZwTUEyS2hPUFBvVzdQeGc2OFBSSkVIeDcydDZ2UlZ0ZEVyVGx5SDhLZ0FMYzlzZDlQNDVBOHpNQXdQMUtkNVR3dnlON29XWmJjVXVxS0tPdWNTelpOZENPUTBiY0dZVm9KWUdBbHhBcGNCYVZnQUFqQWNzUkp4ZHZCZ1FheGNUMzlISFp6UytjdGpoenVBdWNvSWZFVU5hbm5sc2FPT29DelIwcndKdGtTQ1pTRG9admM5bDhhWnM5ZEJJT01uR1FOSll5OWtvaE1veHE3REtGQ0R6THNjc0tqMmxub0JmUHFFOEwwNjlucFRPcjZIMWFCSjZvbm90KzhMaVJ4UzNqT21MS3IwMG8wMmpGS3ZTUnVVaTF0QTFSUm8xU0hsb3B5NEduczlhRlQ5d3R4dy9EdEdvOVgvQ1VHZnR3WEh0eCt2QkRzT09ickxOdU1CbmlGY3lDZWZuTloySnVZQmlDeGRmMGpDcjU0MEQrbUMxc1J2S3RoeUxHelZ4andxZVF0NnkvUlhkMklDNnczZGM4djNFNStaYzhkYW1UOFFzVmpLSUNaNG5iZEJjWExFT3Y2Rmg2Z0MxUDBzZWlMQ0UzL0ptd2IwNVpzb2Q4eWM0TEMyZ2J5Wnp4YnZqellkMnpGYUFwbGd5czZSa2c3MUZoYmhxbWhibTVtY29Ta09FWnVPbmNaVjRDMXdOKyt4L0h2Ly83djRQSGtmOE53RXpDL09YMy9XZnJRYTFaOW1NZnZaRGpYdFdqeERtKzVaMFBHNDFjaml6a0dNeUZRRW9BS0wwckpvcDBwV1RLS29CWm5nSkdCN3VOS2Q2TTdNd2N2S1FUYkVOT0FvZmYzQXBnTWdFeU1LWXBBQUZwaE9hblhnSlF5a3JKMUVUQ2VIZUJ3TmNWNXJ2UzJwQk1IWU1TT1ZlMzd0bjFGeklaSGdEL2dRMnZkblRHcjl6bVhCbC80UnhYUy95M1ZpRXpnYVlNWWN4T1FDc0xOMnVSQzE3cEE0REsyMCtJRmVKQ09OV1lQY1VteDY5c3hSSCtpQTRRSnlVWm5hYTU3V2Y4TDcvOGhyV3pWbGhaSWtoTzF6SHFVcmtGdmRDSlQyNGdZbGFGTTdYaGRUTTArbEVLQVF4NlA5NkcreEJQQjN6akg4dEJOdTFqNUdZNEZVRmQ3Vk1ZcHl0T2YvN3EzTXozSjJNS3B5YVVPc1p1anpuT0hnK1hTTnZCa09lRGNvZU1zV25ZYzI4d3Z2QWI4citkSko1c3V6T0Y2K3BpTDU2S3VuMWNydVpicG96UTNFc0FjOG9Sc2lRMkhVcGdSUUtLRjNDQlNBR1AvcFNZSy9YMU90YVNPd25HU2VJenB2Tnkvc2tBWDJkOHZWZ2d5SHd2TzlZYXpIeG1DVitBSTlPUTlNWTlCK1Vnd1B3eWZjNDAxWERBbzlZSVRBWWdidmQvL3gwaC9sTUE0TUhrM2NQY2tYUllrc204WjFUNUR0NWplejhYZFZYNllkWjk1VU1yQ25RbUJEelJTY2V1QVM0aFRSMEErN1JVbDBuWE1KVFo4WUl1SUV4R0kvZ1NJdU1rTVhra0NnUk9veUp3amNRRW82RnB3a1RwNVpPdWF5SGJOOWNyaGY0bDVDUkRXd0ZsWitPUm1IZFVlVk9JM3VMTHNhWWlBWVNwNzFsRjQxUG1ramtiV1ZSWm5xS1FpaXBhR0UwRnFNU0dKQmdiYyt4RDhIR2tZSndtRXlPQysrWmxmOFJrYWtUSllCUmdpb2NLRGdIdXJLMnVNSUF3MjgxNTlDQVRCOEplWFRpQjFnNG5MbWZzZzNMNTNmcGtSeUdFc21BOElqL0c2RGNlY05RYjh1QVlHb0lnY0VnblFQN09xQlNCa2JVcmRNZndXL09ST3hBWHg3dzhXS2N3SlJwbmRYN0ZyLzlOREtDcFFFYkhNekd2dytONUp4ZGMyL1B5VHEvMSthV1dBTmlKOStONEsyQzZRcHIreEtEc2lkYnVQSEZuZkZzOGVvZDN6VStHKzExY1o3amtNOTZqcmhFV2VQUFdYVHRjUng4VzdlbjQ1ajZ1RUJ5NDZVY1VBQ1lBNHdNQTU2QkNzcjYrUEN6MkxiaTVBOXpZdXIzMmlzeFhaMzg1ZHV5djNXZTQ2eThZaEVwVXZRRUlsOVYxUHJWeFBlbWdSa29CZnZNSkk3OXd0UWtMaUNUUVNtdXJyWGtvbDNlbXpDeE1tYkxoMHExVzRZQWFOTWxESzVvRVNpODdJRDdmT1BkWjV5bEhkdEg0MURFUytoVE05cEE3b3A3SUtSbmhpeVhUUjhxY0hvYk9PMjVaWTkra0tVQlROc1owalI3ZENuajlsSXRIRjlVbU9xM2xMTEQzQjh0ck43ejhDb3daL3A4andQRzFYT3I1RzlSaTRoTkMrTVdsRElDc3dQV1FyUVZ3bzFmdjRDMTZEVGU1dXhMWEp0L1J0KzNBbTgvYXJweGZxNGp6NHVIVnhTdEtWMXFaU3JOekhaeWJUNHdYMVBFN2FURDByejAvM1dmNm5OdmpSY2hVUHkxOGF2bFBpWC9hTGJPRjlSdGZDeDdmQzNleTRHdUhJbjdKdEZRczB6ZVhLRDZjNG9JcGZ3VW8vaU5neFBLWEQ2S1dkUE9uMEE4YW9MNkx5R1BrTmFxcGxFcnNRSm83b0tUM1FuZE1vQ25QcFdJckU4Z1VFdWxnL0ZIenVaUHFSMW1EbVRuNTN3N095WHhFbGVQWHNWZ3g3OVdRbS9walY5VzI5SG5mRU91aFdaU2JlTnJIWXRVUG81cktNR3ExUkRrOEJWYXJma096TjRzc2ZNc3Ezc2JtVTlmYlp0TGNITy9mTDkzaytSc2QrRzVXK0hEdDJnRmMrY3dkWTlvR1pTN2NVbzZ4SjdqWHlxaXN1ck9IWnFlMjU3Tkt1TTJES1pnSnpNanhxSzY2UDBYSzlRN2RrM3dmVlVNT2kySHVjNXlJOUdJb1REclBiWnAyeFczUzg0Uk9OL1pEdDlEb1JFLy93b3dwWlhORUhsdnl6VmxQSTVzYmk0QVkyejlLNThveVBlb1AwdG9JZG51b0FGeUhIdWNVUDEzOWc3dEZLNHpvQ2t6OGY2YW9TaHByNHlRQjRKY0tMNXFNaXBGbWdDeFh5WHR6Rk1YQmtSbUIwZlZwTWFyV1VjdGM2VG9yc3JoeFhBOHVCREtlVmcvMk5jcXRoNWdvWGtvM0ZKYk1kMEhSVS9DY0dqWkl3S1p1MHc1U3pXenI0cnhBUUEzSFZSWSs0anNvVVFpaUliNHVyU1A1Y2cya01sdWRZdWJ5czRmY2xNdFY4V3g2bjZOaVVzUStxa2tuTys0eWFzUVRlQ0tZbHh6dUNjd3BuY3RpR1hKQnFIUDNNUEt5NUpUcGp0VXFQWXV6b2dBU0FNc1dHTjhBSmlOYkFvM080MlJGWDNhQk1SZmpzNGZXcGNaUTZMcC9sS0RHUWFsTFc1QmFWeEZ3cXRWaHFoU1M2b2RLK2x4a0ljUkVhdEt0M2xRVURaVm5vOXJ3TEM4QnZ2VHNERzFOc0x4K3lnZnI0dS8vNEQ4QStKLy8rUi8rZDhBWWo3OENSS1B2OGIwN2tFK1loeVk0TVhiT0RxeEVGNGdrdUFoQmNCRzlHUm92OGRZaGJKZlgvVFUwMmx2SnhXUU5iWnZzdllIQk95TS9VUFhvS0RvZlRIRHZCTXpFZUVUR2VvVGIvT3M5aW9BOFB0MkJ6VVZwV3dqcUdQZVhZU0Fld0RGREQ4a3pCK2UzV1A0bHl1YVhKZkFjelVWRmt4UGIzb0k3cnRVem5OZmdlSEhYUlE0L1B6d1hmSm02OGlsODR0Tk84S2twVDg1Yis5R0o1TnZtY1dIcDVqVXVDSHpYTkxkbDFJb0xvamE0ektkdWFUcHZzREtUUHlySVlLUnQxVXZxOVlTbGx3YXVFMTRieGM3Z0pMcm4yU1hrbXI4eXR2TzNMTU0zWVdDbnBPVjJsVTFqTko0T2RrR2NhU1FHdUxoOFRnb2RUVzM5M1p3WTQ0VlNtbTl3c1FQUGJ1Q3orb3ZTWHpuVVh6MjgyeEl0VTFjU1UvQlExaFBGM01tOW81SGhtd0dxOUZ4Y0ZkOGZBUHEyZkN5RFRkK2VERlF0SVUwZCtNMkMrT3g0ODBLYzExWUVWUkVwS1Q2R0V2TDdYb25USnhLTDJCbGc2cWxSYndTSFZlWlFYR3lWcmx6SkJLUUJ3OFBGempqUHJKbFJINmwwUFJSbDZzNTRKdkhKRk9NOG13ZmpVZURjYjBVQkhNTmdNUFRCbUNjZ05EaFQrdkdFWlcxNXRpSG42Tllia3psZUJmaERsZnkySWZaL0ZJSy9NU1I1ZG43NWphN3dXeTZBS0pGSDRmT1hyTUpOR3pnRjQ3Y05GWkpnT3NXalNBR1JZZ2cwbFNEeTU2Rm9nc0dXeERLRlNGblQ1bUE4dENTdXY4S1JvVi9qcE00bldwekcyTUt4alFnSUg1N3hQYmJsVXdGQ2tZTnRWQ3NCY25iY01kS0tZNFJIV1pVSzdxbUQxVGd5MGZGVFZtOFhZOVZJNWc2ODNlV0haSTRUY0xkMnlrL08xdHg0MzRkNGpxN2VIdlhJdUg3aWlzR3Y2RVJFU29FenN2dTQ4dG1vbC9QY3Z5RitkaXRjNzFoYlYwaWZPajdUaS8vaGdHOEtMMnlqR0pacEtlUlJ4NUp0U1VYdkFEa0llTmFXZE1HYk1aeVJxNHVCVTduaHh3THhydng5Zk1JTzZCeW9GaGlSSFZBbVhsbUZsd0JBaDhSZ3BCZFd0SWZ5RGVuNFZVNU0rWVVyU0VEWUdTZUJPU1hRT1BSNU9iSVp0UVRnR0kwVmhsSFhDR3M1bnVLa2NBZG9xUnh1S3l3QU1WT2NLUTczcHpJUlVLNHoxN2hIeFJCb0NuUGhEbGdhUEErS3NWaE1TK0tVN1BteVAweW5RN0dLaXZQNjlCTEI1OUgxY3B1U1kwVVBHYzkxN0xWa0FuQ21jVDV3ZktDS3IvemtrM3NTdnhYdDZVRlN3RTlIaVpYRmFGeFlzTUNSNGpGZ2lrOEEyTkxqcTB6bmZ6TkFBZEs0LzI1eUc0OCtiK3MvVmxqZXE1NHRodlR0OGF6UDAvcmpWUGxwTzhGd3h4bmZmY1Y1VE43OThDdVJPcjk1c1N4WGkxb3RWMUZjV3ZoZkdqa2dabmxxZUEzN2lDYnljc1h2RlFUdzZieVlWVGFBU2d0NG1HUWZYZlB6WWQ4S1gvdlpTaS8wUFFTVFRvb1JLTEt6MHAvUDQwbXFvc1RPS0hRZlhLZVhxS1lDS0VUc3pQM3FYZGw5eEFqMHJEY3o4T1RoRG1Cd0pXQUV5VXRDK1BzRGdHL1V4Mkk5R3dXOG5raUJiVlNrWkFTYVFnQmNEbVlWa3RNZThoSWw1WTY0YURBOU0xSElVMGdXUm1UcFdUSUNqUGsyRnlVSnJrZGx3UmJZUjRiSUtPUkFXQnFtUER1VzlES2xHOGd6ZnR0R0Y0c0pvN2xZQjBuSEp2QlFDRk5oZ2FKeFBuQnVQc1lDK1BMRGtWR2FNNTJlVzRha0JIMjZ6WUp0Y2U2SlcwRWh3eVYzN0xRQjNKYmgvZ3FiRnlCdjBlS2ZRVGd1UXZ5OUZkeUR6ZS9lY3BNUHoySmVwbDQwY1ByQzJ2aGhPSmpvNDZrdjVxMG13ZEZrdVA2UUI3NUwvWkRTUDd4b3VRemljckdMMEhGcHRZUWlMUk03UUNKRERZenI1K0tUQUVPOER1V3ZUbVJMeGdVbDVBS2wvMHpBMTM1bnNRLzFFRkRqYnAzUkhxYWN6MjV4WHd2d2FlNVBkc2MzZTBWS3lTSWpzZ002Yi9rdGViTVQyY3FrTXdvSlBHVitSOXlkeFFEZ1B4bkZnV3ZqK3dQQW5jMThtVVpQVkFmQ0tnTkdaQUVacWM5bmFoaVNYbTRBRDBOUGliMkVuRVU2STZ3ZWNGK0I3MlB4cjdKd2RJYjRZTEl0bXRDQmZYcXREVFBldjhiZnVWTVYyUGF2aUxaRC9vZ0lGNkNwYTVyVEtjSDByY21XTEZWYzR6VUtYNlpTaWhkZ0NGTWVLamVKc1V1WU1uVEd5NmNENWJvNVpVVXNraW1hQWpqamhpZWFwZTBUemZDY3pzZjFNSmtqcnpFUWp3MDVSTWtVbm9ueEdRQVgvN2lUeTBMQW1PTWlQTW91YXpUYkNlTXpRRG1Zak5FQnA5Y2pmRHlyMlA2QXFkNmxXQnRUSGorZ2xjdVNjUlpmY1Z3V0dVSFVrWXcxTlFVb1haUVFQekRxTmRBQk1jWURSS0dvNVJWbFNMS0VmTm9GaWdyUXpaVWxwSEkvR1hoMm1WM3ZqR1BmVXQ4MDF6aDJ6VmZEZUxLL3Y2VmlvcWtEWUUxVnNUQ2NGbExpKzJEcklGTGd2dUZOWlhjbWd4SC9IQmcrQUFCOGZ3QzR1Wmt2azEwOEZVdEkwdzdZamZqU0hIaUZCSlNTd1RFb1VhUVlBSkpLN0NFSU9sbjAxQXlybE9NcG5tOUwvRjdwK0Q0eEdaUlVhREN6d09JelNUeVdIc1E0NzloU0I1U3poN1lwbmV5TW15VG1lK3FEa2Q5UjQ1anZ3VENPZDJaaUg3ZDhWenBEckZFaFo0REY1NlpHNmZnRjRuR0RlTGNmNkhCd0V3aVNXSmgxaTJKbnZEUXJPa01zcGt3OVhaclpOcXl4aEhHb0g4N0xGT1FVUDlmUHJCVnJwR2N5TVRNR2NCejhjVUgreENCK1VMQit4UThLeHBVL3QzSG1YVCtPSFo2bHI4V0t2aTFMNlI4QzhMYUU0ME9zLzRLbTg0cmF0MzRXQmM5UTN0ekhGY1dMU3BlV013b0ZXQSthZ0JQd3VFaUJIdDJHWFBiM3djOXVoZXNkYThjSzZWUEhaM3J4UHh5ODZ2a3VId0V1clV6TGVqM3FXTEl0cWVnRlVHSUhucVdva3kvQmNLYTVyZ2N5K1FPQStBRHcvUjhCdjJTZjMyS0NVOEp6RTMrbzRjRERpcS9GZWtVV0dPR21od05DTkpSbU1EM0U5d09FcDg5SW1TLzA3c05MQjR5QXhHR0FYM3RZMzYzSHV2STdtd3hwcGVDd0VEUzZUekhmbVlMSHRxNXNzbjkySFNuemw2UmhobHJhTjRJK1pqdERGdEc1SVJWYmJ5ZFE5MUk5dmcvTk5SYjlYbHhFYjUvT0xZaHpnUlBIS2V3bUQ3Q0d4djBveEpDRUtyZG81RTFzUEU0WVo4dUY0WXNsenJHdXcyVVdHOVdNZVFEcHc3U3pFUllLcVVDc1BvL0J6T3ZCeFlidDBwL0thUVVmd0JobE5TRzYwK2FNY21EQ2RtcXpoZGpxbVRLSStUQ0x6SGsrRHF0dGJCRXVrNUcxY09lVHZEck93ejBTM1R6WlVUZjVKT1prSzdaMG5xOU5YMCt1bCtkOTQ1UFVOcXJkakt2b0xMUHgzVXFNUUNiQk1oYThrczF1RVVEUFBTcGptZEp6YWZsaGxVM2gxMU8xejVQbHNERGZ4Rkp5a2NkUVpqeTd4Z3Y5TnJRbFI2OW5WK245UFl4dlZDeW43SDdxWXlYTVk2UEdQdUxGTDljeXBwa3VUUERpVHZCNjIzZVA1RGJVVnZSY1AxQmpHYmp2M2hSdDFpSzRjazRkU3lBQS83d3ZndjBpMUZxME5INzdIOVA0bDRIeDhHditVcERyNWxtUitRS2dYT2JyUkZHYU0waFNJWkRDRG9RbElDTWVnSmpqV3ZtWXNiUTJBbUl4SGJOV3NVMDl2eDAzYmJsb2pybkZUSkV6Tm8wTUVveWM2Zm1vNnFINWszOVpFbG0vSXNGMVNBL0JML3piSUlCancrVlBNV1dlMkxDK0E3cWNNdDFBMDBHMmMzRlJYU1R3dmxEY244U3p0b2pCME9jb09WY0hLVkwyYnExMWxFMHU1TmxNK0xHci9EdnJBM056MkFsdWFmbkhPaW56Qm9ZZ0c1NllKWTl1TXl1TGpvWkJ4QUtURC9FRXdmQkp3QkhmUE1ZY2paWnhGSmdPV3ZoSW5odkxMSWdsWUNJWmlVVktpWkNpWGgya1R3ZTJ5em16dUwzdUduZ0o1WGZRd1dBbll6TzVrTmljY1M2Y1o1VlVqUjBUSTdKME5jdmhrWERZYXA3dG9QejRXV1UyTXFXNTlXVEUwNFhwYURkZTIvSXFDbDgyallkWXhUSlY1Q2dVOGJJVnVhaTVBMUV4OWlFYUc5Vm5hRExjcFhsMTRZeGtKOXowdVEveDlNejBhQWhrVG84ZnpQNkovYytFdVVDdUF5OGQrSGNHWmwyZ09PaEFuSE11OGlDZVFML2t1cGpBcm9EblRuSUZqOTNpb3lDMG8rWEhlaWxVOFNFenQwWENBWXFEcG1kNjdIMjF5UGw1N3h2OXpmV3FHYSs0SlNVWVVWNXhrOTJtaUFUQUJjZituWnpaY2ZHUUYwQUlERW0rL25ITUZGNWRjVHFuQkF5bStvcnNWSTZ4WEgzSW1vVk9ONVdsMDJSYzI4NlFmKzJZVCtLbGJTMkJvU21nWnF3cDFrSWROb2pQMmRsV05KeFJnTWpKZHk3Q0tUa2VRNU5IQ0ZNT01IZnBrRGtxZW9oTGxPbHlLM3J4eUxvSUlTb2Z2bXJwNU00TmliTHVGdk41YUFrRmNMcU1lS21MLzNKSzE4WnkzcVdrTVdXT3p4b1FINTlmUmtJK2xDbTRPRjF4TmtmS2VGTHdxWEhzTGQ4WFFoa2Jqa2NDb0prNHl1d2Zobm0rRnVKSDdYdlIzSE5FdVhBQ2l1bVExWU1RWUhSbzR2V1c1a2ZuRE5FUTkvMS8vUEhuYjcvaCsvNi8vTy8vL24rLy9ocm8rempkQVoxbVZ4UnlOM1g1RmVaWm1qOEJDR1U5Yi9IeXNmQ0hZRjZDUzRGR251a1Budmw1M1pTcnFpeHRDc2VsejZsODdvaUx3NzJVMDJjTDNDNGN0aUUyb0RFMW1nWG9XWjFSQWtNUEJkSmZnR0pTcGozeG9ZQXBKN0xZMHBOUUwvVUVNMytnTUU0WlM5d29WRit6V29xdXN0Rk11VkRQVzh4blQ3K0NobDhQd0draFN5ZGxPcDZ2ZkF2aEU3VzJjcmdoOXgveDMxMzlpWEV1bzVTYmJZMC9DYnA0emRJd2hJeDNkbk8vemNaM3l2SGk5WG1UK2ZyMVpFVytYWG5TbG5IQlY4RDU5dnZrcnQrUXg1VXpaZk14bjcvbmE0NnJaVVlqUFErQkdSbVB4aXRwa2FSZ0h3cmRlWVF1a1U3TjdHUngvNkVUVzN2dGc2RlZzRDZkMTR4VkdURXNHZ21kWjk1TCtET1R0Ylczei9DcU5rdHc3Y2NPeEFMblo4aHRBVVl2TkNNVU4rbkRYT1h5TzZKZU1YRU0rSDljVEJlMkQ2T2wyOWJub3d0NnlUOCt1aXowT3ZGdUgvNEVRUDN3b3dKM0FRdWVKMksxdGxsZWIvdjNvYW1DWlBtYWIwVXovbmQrNVA2V1hTNVQ3azhublJIdVFOdXJrSmd6NXdzZUpqemNCSXhQei9CTVhjU2Q3QXdNU1hibisySW9tZTdBOFZFbDM4bDR6YUl3QUVlL2lnOStycVpZZVMyRlNONGNsU1hnaVNSOVZOVDFXNEdVQks1WGFFdVdxR3NjUThacEljL0tRWGFtdk1PZmFjN0tYYmZIckI4eWJoZmlxOWdLUkFwNDgveHZET1ovYVRET0N3UmQzQm56bVZlNUorWVRBNFRKTnJZZWZTUEdEY0h0cjNIYjk2WktlQmNzZVdBNldUUm4wL2Zrbm5tK2plOW5Ga3duWmI0TmJVbWtrUGVvc0FOZ0hrb2hFTW5xbUJhQlR3djJGT0t0UUtFdkNIeTl4S1hKUXBhcGk5M3FFM2p2eExHWGZqUG1rODZmZW81aDY0SVNZdEdIZ20xdm51VStMdTdsT3JQVmIyVmIwdE92OFRaOVM5TEhRNDVWcFpCbEt0bDd3UGNIZ1AzdStiTklXRUE1bldHbzgySTYyS1owR1JtTU9zN2FnRUFoQjB4MEJyaTZJUlhmMFl6L0loUVBlVWRoakpPaG9XNk9VanRQMGhsZ2tHUWNFRXVmSUpwbFVZNXNpUVc5dmNGajRia2VyY3RCZU0wRHFnbmprVk1mR1MweUo3Y2hDbVI0cGxldVZ5eWs1eFpiejFLbzZPWG1BcEVDSGdWMi9zMllpWjYrZFM0Q2RySWxTNU44SGZTeENONHo3UTJBNGRGdHdZdDBURktNUVBENU0rbDhDaWcxQURTRlRFYlBRR2xZOFhodUhzK0Y5RU5XUG81aG1qajNIbHh2eWg5NVBhdGYvTFp2ZUZ0eVNjc0paRHc4Qk1hbm40ejd1VGhqZEJJRjFPcEZDc1ZLU1dXODB1YkZ0Ynpra2hUdmdDRytSRXRXQkl4T3pmTGl5VDdWZzdjdC9BVkJiOWliWkZRYUFXaUVpMGJwSDgxN0lUVWo4dVZBenlBQkwwSFNSNDhDSzB1QUFrOHBJUmZJcld1MkRFanhaMEM4ek44QVpOS0IzQkRxVVRHUUVUdWpYSUhycUdUM3dmY0hnR1d2L09ucVR5ZmhEcER2V1l2ZERKSHN1V0I0ZUpZWWdKNG9FaUVxTlo2WmVFclBValI4NHA0KzdxSHhQaGx2bFlrNWtuR1NUT2publhqbTUwZUh2TVVuVDFJYWtSM3dIVVg2Q1h4WnNXVE5pWjBwb1Z6Qm9kZlVFOC9TblhjOVN5Z3E0SHpYTTZvR0hDaFVTSmpRaHdMSFNoRXBvSkRjU3NpbnhENTZPaDFjcnlqSU01NGFSUVhvcG5Fcm85aFRLUE54K3dxNEpUM3JLYXdHQkppK2JROGtlWlZ3UmlHQmxQR2FqSEh3K2J6S2Fmd25BWGJFa3hGZitPbHYvRDUzZnNVL1BaYi9JSlNla254V3hwaUhOeUJteE43OUVQOU54Uk5mT0RQNzQ2d1JxRDNFWkdlQWk2WkV5L1FwY2NsOXc1U2J2eDNkclo4alJFRkswd1dkT1V0eFplSng5NitYWEw2MG5yemVvb2ZqaXhveFpkb2JjQWFsZlZvd3BsL2s4RDZKMVppbUhVZ0RvS2hqSnorVTkwS092Y04zNHUyVGlLU1BxaUs5Z0VJQW5uSWhrTExua25FZkZ4ZFBUZThBci9VVWZ0YTg2N2NYdmRsZ0FBQkFBRWxFUVZSTGdFeEs5dE9acC9vczR1OFBBR05EdHM4Y0o0VUwwQlJHd0pwMlFFRTVBVDVWaXNqTzBBUjhEM1ZTbWg1U0NSbVM0ZHN2OVVxWHhuMG1sdlo0OTNJOWJROVJJZ2tjRUV0UEVPODl1UDNCMzZQVUhaQUI4UVBFR1loUElIa3FGdERldXVKTkRvZUtPdllleURzekd4dXYrejJ4Q0RCMWt4TGRwcnRlMkpXRnBLY0xuQ2tObk1ua3VkVVh3d3NOTGlGK1lkbHhPYzNQaytLZHZJNTZpakFzK1pyb0k5dDcxYWl0RUtDenBnSmU4WnBrZEdyd0dGY2cwZ2VUbTVMVCtCUisyQUtIRnNmeTJXQXloeElNbEVxTTZVY2M0YXBUY1JNODEwZC9oenRqZUFFOGRMOGp5LzE4WW5oWTlFS3dQVFZiVWlZOXlsNjdRTW9wNEdPY3Rza29hVjU3dWdnelFnZU9sRHBlR2RnTzU4UFVURnpjVFVyS0Q1bHV1eUxwWStuTnM0UTc4T1VEUy9CQ3ZuZ1daMDdmTS9wemg3Z3paLzZ1OXl6cHUwQXlBWWhkMXFkaXRnQ2s4NXlXc2ZpWDZQVVV1VXgzbVpndEVLbVV3bkRxcEdObHZRUjhmd0E0dHBIUHBmS01LbE9xTyttTWNBY3FwdENab1pRWEFwZ1VINGc3VTZ4a21Obng4bjNHZ0tlbWVKYkVhVERFbXJwdEp4VVZZQlhWeWlxOEdlTGJESWpsVzFuNTNoT2hnOGRuZy96MmxXNzNCUlpaYW1aNmFXMC85YTY2Z2xFZnBWRWltSzFBU2dMWEs3UWxTOVExamlIanRKQm41U0E3VTk3aTMzcTdqeTVQYnlmMXplL2phdFhxUHdwc0YrdWI1Z0xIcmluTlVUYkZlT1RsT2s0UWYraVdLUXpON1BuWklLL1lTWjdjZU0ycituaGVPTFBETXZ4YW9ML25nZW5remFiZmszdXp4RTNaUFB1SFBFNzI1YWUxSHUwTTdjaGpKQUM1QlJtdm1rSXF0emhvS2dGTGMvVG9WdURpcjRiWnZJK2xRMStkNHlMRDlNemtnM2h2eG5GdjdBME1uM1QrMUhNTVF4ZVVFTXM5Rkd5NzhpejNjWEV2MTVtdGZpdmJrcDUramJmcFc1SStIbktzS2s0Nmx1RDk0UHNEd0g0UC9WbmtlSzkraHIxMjY5SENZUHFRV2RvWnQ4VHgxbzl2amkrM3ZobGF5QXpqcHRudm0zblRjTUxFSzkyZGZvb0dIWW9SVU50aTRzNG5iM1FVRXBCR1RBZlViSldGTE5OdTVjeUZyV1RURUZ0OGRVelpxYVlJeXZRMHpiWjMwVnplWnl6S3QwL1FZNno2WHF0MWY1YXJNYTlQUC85NVBTeWRmZERMb3RkNHRCeDhPam0rSng1UHNEbDFQTWpZbDhVN0p0aXVaYVZVa0pyaVdEazMxdk1EcjAvTTFNOEdVSFRUZzBXbiswLzRpQXVqWHh1ZCtaQ1Z4d25kZi8zclQveFIxeVcwWlp4MHpOek9uUEg5T1hpSDJlNUpUeXl5aDRLaS8xTFRPODEzVFdkKzRLSSt1Wm1McHhKREZ3THNVb21XNlV1MnNYaVdxWHJvL0J1cTN6RnhqV09WSTdrTlVYTVJrc216SVA0TUtDNGQvTFZwakRpWUQ3RCtLdVpkVzdVb2NEZHo2dGlEMGdYRWR6QlQ3ejdTQVdxWUE3TUVRUnMzbnFNbGZ5UGVxSUpTOHg0dkpKdkJibnNuSlpjYW1wUjBLVjBqcTdpeHlEOFZlR1ROVTN3d3NFalNHTjVZeEdoa2ROaVp1RE81UEE2SFdScnlRYzdOaC9VWjQrdFNuUzJKYVBZZEtyZ2RtNUJYT1AxSmxsRzJEa1kvVGlXT3Y0QVN6NDA1a2t3R2tMc1J0MWdIZzI5c0I2MFE4WmlHcklhNEd4SGd0bkRmNXVaWFBoZWRCZE5yN3FUTG9wbGg5WS80WFNyRXByT0Zja1hKTTFkdFNYUEJqeENNZncxLzMzeXNJNWNTdjhFQ0s0VFliZEtoUkpKQzlvY3RHVi9HNk9UeWtJQWcxV0grbm1OWW5aVE9sUjcyS1I3TFNUYXc3d2IreFpXa1JncTJLcy8vdUVpbVVUb29uK3l4TlpHUys0WkFtdUZEeC94M0VtS2VoN2FDU2sxblBNNEZNQzh1a1Z1dzVxckNWcnVRU0p4OUx2ek5pZGVWajhpemRjbGNLYzZVZElYRWsrbTVVbmJnNHUwRktvR2luWUV0eWFISkV5T1ppbmFtSkVJQWg4VnFUcUhVTXVVRFJsaFdEb0RQRHJyaEE0MXNxWFREczF6eVhwMVpmWVJTcERzejF4Mmt2QUN5VWdNRUhCSFZXcndXb3FYUWxuR3J0MkcxQnlCOGJVV1pOT3kva0lvU2xDaVhWaGFvNm56Q1l5b0dKbnpkRUVQZzVzNlU2cGwrNjJWRWpVMW5ub1Z4TGp6YXk1R0JSdVdLbm9LZXVPMVd1ZERUVTdZT2VxNllVazUxQmFTVWYzRjJKZnRSQ2dFRXloVlE2TTg4b1BuZi8vMWYvSU1BLy9FZi8vR2YvL21mMy84T1FObkQvZFIzZHEvWXNjOW0zZEYzRFJnVUwrZGI3ZkR0NUU1Vyt1QUNVbXFBYmVKYUs2cDNtVnkyb1MzSkZJVUErRTk2d1QwcTVyaDAxM2g4akYxN094cVRyUnJyYlZPelZYb1dscnRPanlxRnorblNjaEZjMURvTDdmamFUNm5TcHJVbGV1NmNJL1VPUHpYMVlwajhNTkgwd3RhN2RiM3p3ZzhGVW40TWVHN244eDRlS1dYL3lYUyt0aHgzV3NGaDZIVmxRa0hOZmRXY0hkeHh3ek94ZDZuRThqd1Z2MXVhQmYrQ0VKZG82Ym96RUd6SmtyaWRQa3BrOWRxRDl0blNpekttTFJwY3RqRU1RMUF1NTIyWEo2VDVueWpPYWVaZU9GeUU2SG9odUFpcG96c2FpYi9CWDNjSHpsK3NQblZOOFlyYVhreHVkb0E3ZnViQ0JBZW0rRGp3MjIrL2ZmOEswTTBOREJsMzBNK0JZemZxdkpnTzVGd2NwQ1NQS1JtQm9pOVRpa1dlWlcxbFR2WkVNcW5SbXdGbW0xOGN5bmVMZllpL3VxQmZZUEIwSi9GMkUvY1J1TE5mQWFjYWgyQ3VObnVyNSt1Q25IbmprVXBNQkZ6Z1BzNmY0YTR2dGwwZ3E2Szg0S0hzNHM3QWdlUTJSUCt6MEpZSGVaTjNHWEZuTGhhb3pxWDVLNEpjTWk1b2ZzVzVJSk9QL1QvejVmUHJXQ2crQTJSdWJNYkJEdFNaUTVMK2k2QXpoL29FWlQ1dTl4NS81VThrUXJhVVBMRzlRL045eTVXZDhlaW40VHg5cDlWNnRETkk3aVNZUW5hbUo1YVVOQVlYLyttVXZ2eVYxa2xoZ0pLaTBJYTN1MzlXYnozVXpia3BxMm5yZkZ0RnBJQ1NuQ0VXVTZaSVVZanBSZUJSNGFJcGRTVjd5RXZ3RFg3VUR1Q0ZCYVU1L3FnZXp1cSt1U3UrV3VLK24wRGo5d2VBczYwZWZIL3FJZ0RTZVdKblpPcWtjQWRiUFFzcFZJQk14SU1wSkJtT2xJbFJGc0FGS1prMEFDSXpzLzd5bUN0ZDdEd2RHQ1V2UnVTb2ttRmd5UWhjSnR4RFcxdnBGYVUvcDA0NlpwWnJnTGRrMGZoVWVvSDcwWXR5N2taOHphaW95MGgyWnN1WEtwaU9BLytkaVczTFpNYzE0MU5nS1lsNVR6dXdtVWpHVGpSMUI0VytOc0NTMFRVL0tzYzYyRzB1aEx1eGZBYUlhTXJ0L28xUEJNcEdPazF5SklOeC8xVnY0T3p1elV3ZXdMMzFMSWwzVG54UkF5TzkweFR3b01aSkdDWW5rUjlBNDh6ZzhNSSt6ZUFTaGRJRlRPeXl6dHhQbEtlQi9BNDl0aTIvNGdQa3hBQmw2cUVlbFhnQldhbXZpdzMwY2F2Y2tqMzNqR0g2MXFTUVpRcERaNGc3NDNVOUt0NUpZUUhLTkJXNDVtWCtEVDUvQi9RNkkvRDVQYkFpWHphOWVtYzhlb1p4MWVIQWQvMEpNRkw1L1FIZ2JNY09ucHVsTFZPZzgyQklRdE9CazhYRVEwcWtKaHpuMlZLV1FvWEI5RUxzb1RDZGgweEFJSjlmZkp2UUZFQnZIQ0pEUHcrYXpkbnhPSXNjU3NRazdvQlIxNGh4SUFFY0NxOXBLZTFLeDlJN0VLWVNVekVDeFNRbCs4Rk5wTmltdTlJRmQvaXRjMCtFckRzN1F4OW5yazFjaVl1RVA0M0JLQkQzZzNQS0g5cVVFTW5JemN1TW8xK0JBeU9lSHpEWW9VWnZUK1FYQjdObmYxN3dTbzdYYUdzZXp6czhKZi9FeUUyWUk2Y0xHVm5qM2hzTys2LzU4VU5SSy9WdStBbnZsMjk3LzN2M3lxckJlbzZPRnpUcVNoUWttRUoyaHJKUzZiNnNsSDVZVGdJSHZSd1oxMndMVVNCWldjVjIrb2FVNHFOeUFoQjBXNC9Tb1RCbDZwcnVwaEl1YzdLNGFTcHdsa2orZS93aU84QlhzMDk0VFh1NDN2ZjNnR3V2WEg0cyt2MEI0T0htaDBCN0oxRFNuQmZ1UUZrS2JjMDl5aFF4QXVJTDQ0YkVFRWhEekpFT3JobXl2RGZJYjFQRzkzcjBSU2J1d0VUT043YXR2MnF4a0tZRXJLdVFBSzFjczJWSUtvdHV6SktlcEVJK0ZRYlE0WWtpQ1ZST3dBVmJzaVJpMnYyVktIQWhPMHZ2dWQ1YmFjUEZrbDA3ZTRxVUFEemNmM0x4V0hoTmxTVk5hVU5UZ0tHWkZ5VHVmVVV5MUUxUzhwY1kwSHY3Zm44OHRYQWdORGFRVXozUGNxb2hOYms1ZkVweWZ4UytBT2J2aFM0eUhvVDZmWGxuM0lMUlBycm1BaVB4SXZySklkdk1QSFBMdWRzd2FNOVQyQzJZTFZuVzBtV2Q2ZjRYemdvSnFKOVMycWNTQzJ5alRqcFdsb0JIYjJMbUZnZWZGa0dab29xTFdWU01nRGZqSkxCUFhTYm5MaUJ6bnkrMjM5T1Azb0h0Qzh1Vy9PaE9pajlmS2d2NTFOUlhRVGVNM3g4QW50akQvdXp0ejJUYWRWNU1CMGdScVc3QUZGS01nSXVGQ2JhYXJlR1dsQnQ5cmpWbkZZdUpwdElEeUptRlBEU2pjWU9qWDEwUUVFbkdlWVVBL011VndtcUFwWGNOZUNRd1U3YUpWWnJ6cmkrNVhTQ2Zvcnpnb2V6aXpzQ0I1RFpFLzdQUWxnZDVoeTh5cG5paVl6V3A5VjQzVm1SL29hbTJSU0N2V0t5QVJMMDdMN3QwZjZYbVA1STZjOS90b2RMZmJCNks3d2o0anVYS3puajAwL0QxR2RsR083bGxDb2xwWWJER3dwUXBCWVhFdEREZFI3dFhsR1VxR1FHajF4clZlaWdyNW1XNlRSY3BvQ3huaU1XVXFUb3N1VVhQYUNFMVBjdDl5RXZ3RFg3VUR2QzE2K1d2WUM5WnprdTZjcFBmNDA5NDRWMG12cUhDcitObnluaDVHWDk2enQrR3Z0QjNYbDZ5cFE5TThKVDIvWHFnem5Ec1orNm14cVJqZnd2QTk5TFQzUGQzaXZSWWduS1JJQUZmZWtxcnVNMXR6R1k1V21ONFp6a3hLakw4N1FOai9DQUF2MUM2OXFORUFYZUlabXcvUjZveGlxNnV3NE9lN3V5WUlsL3lEWDJ1T0J2b1Z1cjhBcnd0QzRadlR0dzFnMVZ3d3dpRXFmWG9vVU1zZEhQemxkTUJsWVduTmRNUmltaGFVU1lzbnZxTmNoanhBUmRmL0tHRDlhS04vL3A3UGxPaVRMd29XUzFXOUJFaVRpRmU3T3RrdEpQMHpJalU2NnpxOHN4OC9CbUhkWUZZVFZ2eTBZWWFRNTNZbjFyT1gyNWkrMktEMXFQTzEyaWRiUlpQQTI3OGpjM1I2dElxT3FvMVR1Yng4b0FGcnQ5QmY2NzdFK2QzMEdmTkI0OFRkK0c4alhheU0rblpuU3V6UzN6YzFVWERDdTJjRmR5cytscC9aSjRncE91YU9aRThwdC9XdzNYV2RWUTliV1ZiRWluUDhxcnlnOERIUC8vNGdvVXJseGU0ajdGZnVXNk9NVUUvWS9JSkc0TEw4dXg4dmJuNnNxQjFNVnFZUUsveXRwYXdDaHg1dDRaSC9PUVo2OEw0cjk5LytRZitjUGMvOUI4SDU0c3ZuNDN6dE16bkpqOE1JRHRmb2ljTHAvVWU4R3hhK0w2d2EwYnBBTVFjbzUvc0laY1had3M4UnhsU2c2bDRhcFRvUUxqN3NDSkh5dnA0OW5SUkZsSjBnSXkzdkRnd2JsTWJPWVZhbER1VExBeExIT1QrVFNzS2NTK3pIKzRWNFJ6SHpRVWJubVRjY3NRaGYvVlFPcFFnZnYrYjE0eGU5d1ZnUkR3Wm1YdlhjSWJETU1uYlErQVU1RjhPTllleGZUTTVVaWJPcnJIdlpUbWtZL2xjbEFBRCtBVnR0QWpickRnWEVyL2ludm9VY1N2WjNtKy94bWNtNGo3UzA4Zm9KOXhsTlBDZi80alBjbkYzWnlPMHYvM3lHNlFvbnViY2hNaGxyZWt5N094aXk4aVFqUjNJbElFUjVpWVAzWnptYm9TYitZZUVZbzhTczdIWlh1VGwxd0YraVQvdnhIUit1T1J2eFlSc1pnR3pxOHpGYjZDaE5rKzNRUGdORWcrWXNRb3cvcnVueVNROVl0UU0yZURpQVYxSE94R0lFcm5id1l6MUZpc1hlQXFOTU9KZ0NwV1k1bCsyamVxREQ4bjJRRkUyR2RYeklLTnBpVW9WL3hJREpybVFLQU9rbi9RaUVQbGppeUlscnJkY1lOSTRHL0VZZ1huTWV1TjdRV2sxdWFrcGo2TjBzTEJDc1ZHMnlISzZXSTNlY3VlTE9QckVZYTN4ZFVkbnhJcU9WSVV3WjlTWklUcDVnREpUMk41b2NsZGk3dlBPSi9kKzVGcThNblkyUWpXcm5CYVZsZnZQckFqU2NEQzJZMHljUzVQTkJseHJlclF6cks1eE5ET3VOZTd0V0trMDZFTjQ2RGV0RGFwWEpJUFJrK0JEeGcxN3J1cXFCd0VQVGZJb29hTHV6d1pZTjZRcGg0QU1veG9MN3o3ZUovN3pUYWE0QUF5bmZaVC9mVkNjczNwVVdKNTFoOTNqNjFQYTRpdytRTDdpWEFrV2RiNUFqZXM3MXo1ZkszNzViZnlaeTdBaW1lTndqbGZCYk5pQVpObkdLQk52c2ZrT0F6MzNYNlBBc0lvbjJyaVNPNkNkbEFkWWxuTmpBdXVwa2drNUZWMzU4U1lmeStWTDVFekgzL3o4NDQ4L2NLdVAwQjkvL0JOVGZBYUlud0NrQUtNS0FTR2JKL2dncDgvZjl4RWJ6VTIzazdMdUJxK2R1YUY0UExiUG52OGlKK0JXcjFidm1MRlBHc1NwVEhzbkgzbXpyMDFYL3YzMVlsTDh5eFJpTUJqMU1iTHM0YWsrci84ZXBXRTdIWE5IWjNNbGtkTkNUbTA4S3RTVkNybSs0RFBOR1YvU1l4b3IyT3o4UmhsaXFDR3VxOTZMQjV1ZlhoSm5xZkcyQkV5WE1uS0tmY0ZXbHhEOWd1UzFmYUtwV1ZNR0hxMWpaM0lWNFVMRFBsN3Nub2VJQzlQZEJwUFZYQno4Mk0vekpLNzBOSDRuTUY2Z0tVWEJzMlhuSjZQeGZKbSswbkpUSjcxNzVQWmlmK2VKSGFMZ2d6TUh3UWxVaGpreGpiUUlUOGx3dS9HZ2Q2SGl1azBkOXBKRzJTZ3FZcHYxb1NTdXp3LzFYOHh4UWQ0dmR5RStRbTNuSXZUb3VLTnhqMmYxbnZzMmZGR1JvWWVDYmQyTExPZ1ZGZGlhbkpGbldjL3laLzRmd3VOWmYzbjk4eTM0dW5UWERDWmVVdUw1M1FVbmhvOHYzWlBFTDBHemV4L1JsaTlKV09EVmZjTjRPWjMyS3gydkx2VnorRzJmbkNSOVBGdXNwd3Qzb0hTRnlKUXBTRENGN0F4bDh0eUNONXVVUkpqamd1SlgzRm5nRHFsTm5WUTZBVVlDOWt3c2hpVDdWK2dpS3IzRXpqaEpYbFllS21TcHpxbHNOWFhnYm5kNDE3d0o0MWxkdi9nRFB2TEVrem10ME52V1ZqREhCU1hrQXVCdHRQRFNPQ0R1akhMejR5emk4ZU5MSDhzT3pNWEc3VlR4bEJXQURsVVVjdzJrRjRDK0Y3bzIrWTUrNzREdmdGOUx6bS94aGZoKzZFS0pvaVdxYVFmYkRsOUZzcHlLbmpYV1pXcEF1UUlLeWEyRWZFcnNqS2NMZDlrWnd4UTN2SU5WNkFzQzNNR3JLMkpuRkxvR2IwNjh0ajJMYXM4N09FdjUrZmp2RHdDUHp5bXZEMTBsMndSRkx3QVNGWldKbUE2b0FhOVF6M0tteURKditTUlptREtGMVIyR3NsSVhpV2NNUTNMRzY0U3dzc1RJdkRCVUZyMUlBL0Z6VWswTDFuUUY0Njh1eW55TmdvNWprbzdCeFdGUkVzY1lhdHNaQmJia2lCNGJLZms1Q1BQVHIzNS9yTG9FUHBZYVJibU5idE9WaUJRWE9DODNrT1FGUElzaGlxZXMzdmRyalFKWmRzamN3WDNVZ01vNWM0M1BQSjEzZk8zMkhmM2VBZTdBVTlmTWhmZ3NCTDZFTkhVUW92YVM1YVNpQlhBcThsV24xUTE3Q1kvMmlsMHZqUklGRkFJUUtkQ2pERWtnb1BRaUtBNnVWd2prR1MvTmx3Sm5kL25pQmRpMjMrSTdMb3NxV1NYNmtxbjJ1WU9YK1A5VlRMNC9BTnc2VTJkWENYa2ZZZGZGWWxUTUdlRU90bnFTRUV2L2xLd2tiazBLV1ZKUTdvenhSR2xFaXFGRDhWRjAxY2ZOWEJiVVhkMWdSQnBBWTRpT1UwQWZqVHVBUDY4ZTN5UG0zMW5IeUM4eTg0K3Y0MmNhRWhBdlArV0liMzNrenoxOFROdjR3VWhwSm9tcklSTHhiZXViWDFkT1M4eTNkQW5rNUU1VUdrOFhLWUFvOFIyR1ZsSUNFSE9rVlhMeHFjaERIVy9GOUZldXBoSmZNOWRSTlZaa1B2MzdZTHhuditUNCsreVlWdG92SkY3ZUVqallpcW5maHBqYkRjVjBVRklrS0cwVTJUYnE1SHZ3UlE4TUZZR21BcWplbFI3ZEN0U3psQUlLS2RHQlJ3dnZEcy9pWXZzRHAzaXlxenF4TXd3NTM2UFFkTUZXcGtJZkIveEVmRnlWTCtqOC9RSGdpWlBDcThUSGtxekxTRUFDTVIxQUk5TDFoY1MwTURjVEtldTVYa3RZb091ai9Qck5JVElhbWR1bjRFbTZnR1JoUks1NmZKTiszUDNES2MyQ0VibUM1WVVlUHZJOEFZY1BuVFgyUW1EWU1FZWFiNWtTMGxUQXM5NkQ5VWxqQzdBWHpudmI3RVQ5Q0VCVFFtSWMwSXBqMXl2cXRoSTdDUnp2SkRoTnMxVUNaeWpBNklVS0xwNXBDUzZPMG93emFrbWFPK0Q5RG5lcWZHditEanRRcmlWTUMzTzlDUklMVUI4dTg2V1BRRDRaT1o0VTBrc0FvQlNCclV3cGxQbW8wR3VCK2hGd2YyK2dDSHpxTXFZcktnRCtvYXdMMUl6N3FFUW5XZVVwWGlWK09QRGJkellEaG1UcGpXUWZKZHRtS2ZweFlMdnpIMWZ1Q3pwL2Z3QjRjRksybHdoSkg4OWNQRjI0QTZVclJLWk1RWUlwWkdjb2srY2RjTitrVkhmellxS3BVZ1RVb1RSa0tKQk1ZS3NYNlFCWVUzY0Q1dFNqaGNuVU1hVDhlSnVrVW5xWmVJcHdGek4weGl2eFdSQjN4aWRIYjVYTXc1U2VxQXJldjh1S0FOTnR0UERRWkRONEhEL1M4UTkxOE9DWGsvR2ptRHpvNzZQTUMxbDRUMWVJNUoyUjVxNTBwcGQyNVRmKzNvSHJIZkJyNlZySjZKbitqRWRXQ1pWcEtWcWltZ29VL1FkTldjNkxPdGFpdWt6OVNDK2dVRWtYNzhvTForbTNQajJ4MjlMaER1KzF2aHIyTzNpLzBYK3F6emNuUGxWRll1MjVnRUovSC9EOUFlRHh1ZWIxY1gyVjlHaG5yaXVkNmMvNGE3ZHQxSzJBZlVyOUhhWTQzMHlSREVCWVZoZE15bzhiOFcyZlRQZFJ6bDFmYXZuMHpNRTF4Um5UczZ4ZXV1YzJwcTYwQ1RiRTNkOFh5bDhyWXY3MWlyekdoZko2NFc0Q2ZPYUR6d0Q4Z2tJNFBoak1ud3dzSkhqOEdkQjJ5Rnpna05oUEFBNnlvWkY0VDR6c1RhSG0rZk1TZms2dThjKzdCejk2WlcrNEFzOVNDbCttWE9oTmNpdDd6MVpkRzE1SEx6cS9idW1PYlRHL240TEVNL0d6L1BVcXZrTFVQeGlnbnpMZE1wL1Q5bmFydCtUbjlQT2pxdnlPVTRJL01mc25mZy9pWC9pem9PTzNsakhucjNnaGlnRGVjZ21peTNoenZuWDBrKzFwakVxekJVWGo2Y0lsOFU2S2NzK0FYUWR4dDNIaENTV2lHdkhVTHYxc1MwaFRvbFozZWFxUTl5d3BSWXBSdzhIay8vRnQwNjBNU21ZcEtpWk5NTVJoenRpTjJCQXdTaEZJYlF4a09pOEJBQjNjeDZxNEVIODNQYWVzYUhWaGdVQlVTWEpjbGVuaXRvdVhUVnpqbUo1cEUrWUM0Q243ODg4L2t1Y3llZmZEcEhFWmNBSjU3Z0NTMENlN0F6SGFoSVkrQUxrSThUUlo5c2Q3U1AweVJEVFByMlFDaTI1T0ZPMEFFcEM1dXRoYkhHeFlKRU1hR2VWSS9jMlJwU2xHT2gwNGdsUzVyVnQwOWtmdTdkaFVxY1kxR2ZTOFdnQi9pUXNvZjcrSUJYUUpUVEJzNHRTRUExNEllWlo2Rytvd2JGTWtSbE14YXF1QXNNM3JRWnZBNjdqSW5wMnlXMlNwQVFGd0YyNUtkSTNsVGpyV3UvSFpLR2ZHZXg0UDIzeWFYMWhScVZWb1Z5OVM3b1RlNDlOejd6Q2xxNUtpcVFEMVpWcE15aFI3SmYwRk9EWS84Nm4wM0dMN2t1bFpQOXU2SWdWS0QzVERTTUFvY1JuTEZNcWU0cVNpSFVoV1BlTTlLbzdTQmhueGlHSTV1UFdpakNNWDZId1lwVldNK2RyaCt2ZGdWR0U2bkZVM21Pdy9IdWV0VHBjeEJUeDdvNkJQeFF1a2ZseVd3RG1OSUp2QlZFVUh6alVyL1NFb1B0MWZEZ3psL2gvN1VLS1lVc2F1TUtVL1pUSlhWZ2RuL1hSbFoxVFVDeEdMQWVDL0E5TWJVenFjbGZWN0wvUE5mUFFPWVBmOTlHekxkUTNQMlh5U2JwTk95ZTdtMG0wMFNWZHQ4UGFtUU0rZXVrWTQya2NSMm0xTGJ5cE42a3pmK2M1TWorV1IzY2FZSjBVckt1Q1E1ZXNoNUJTSWR5QWNya3UxeDVPMERRTTM0ZFFaNHNkMlA1ZUM1NVJiMnMvdmlDNVBMbkRIUHdSV0JHV0tyUUtUNzNiTHkvckZGdExCQlozeDZEZiszb0cveWc3RWMrRUhIUTlMU3lEd3NOUDdTbGt4NVNMeGJTSDVkeUJEZ2E3NVVZemZQdjZvSG41STNTOTRMbDY0RDkrL0F2VEN6UXdyWFM0ZGVGUlZJWk9TcEJnQmlidkRIWTFzM2FmZzBrT0pZbG9FcW92L0ZqZitaVi9jT00yditDV05aQVFVOHR2V2JzaWk0Z1VLNzcxUjQ2TkhnYTlOb2grOHplRTdLZWc1UWNHRkhES3IwVXVESVVtVkw5bnk5dkFwOGZTZiszN3M4aVd6ci93aldXNlhiOW9aazEzTzg1VG5Sdi85QUUra3BnSkl1WFFiQy9mcTJvdENkaDhwTzFCdUIxMzh6WHp2d05mY0FWMjliMml2UDErNlcySEtGRVdkSVhabTIxV1hsWlF1a0krVUFncDVNeGZSYllnbUh1cllHUy82cFhEOXB0NlhhdTZsemZ3bFRzZjdtL3orQVBEU3F5Yk5kRlk2VURHRnlKU3BaQUE5QkthUWQ1aGlkU2VsYU1xVWhyeG5SY2g3ZGx4Q1pVb1RrZ29aNEovb2NiL1lFQjFNVnhnOHNVQVBLWVVhakZoQytVS05XTmNNQ2VCbm9jSFBEendDdXZkMkpqNy92T21RMngzd3BncGZLdW5xaGo0di8vRm5tb0R6SzVyZm5sK2QwQUtrQjgvREdjZUlZaXJHUWRMSElDVXBUbjMwWElrRkRxTnY5TDBEWDI4SDNuK2h1Z094bURMRjZoWFNUaFNtVENsekh3a0VaTnNaVmVrK3pram1oVVFXcFZlUnBpY1c1bUhXVmlEL1R3Ti9uL3YrTzZmMTA3Yjl1cEN1alE2dUV6MzYvUUhBZCtObFdLZEVqbUk2b0FhOFFzcFNxRENZZG5FYUxEZWRENWszbVBRVU5Ya1I4djRsRTFDME03blM0Ni9FNUMzZ2NjdkliL1JpNUZmdXlyRURkSk5ubWFaeldObDNpeGZNV2g1Vm56UDNJRlRsb05MYXA5KzQ3UUJQMW1iYisrYm5pY0RaT241SGxudnVPeS9zd0dVRlkrcU10MGNlaklDd3AzaFU2U0lGRlBvRzN6dnd4WGRBRjIwSHozWXVCeVU2UXl5bVRKR2lVRS92SWRkZlJFc1ZWNWJRbWVHRmpIMjZ3TEZIaVRWU2hxbUFRbWVrQ3o0Tys2MC9zVE1mVi9jSE91c1VDUHpBWnM1S3E3Y096bEsyL1BjSGdPMjJ2SXpVNllHamNBZXFkeFlDcjFBWGkvRXFJbnV1Vy9Vb1RWd2pLNEk3b2FJcFZSUVZPQyt4M0tQcmRoeUFlQjNqaHBLZTd1eDR0NFJSUXVicEVaODZUcGpqVktxY2c0Slo4YU5HM2tKL2xQdUgrK1lPanlwKzR2b3BDMUhlL2J1TW1XQjRoQ1FQQjhUYkVhVHp3MlgrSElCUkNoRFNWSUJrSHlVUTJLWXIrZzIrZCtDTDdJQXUxQTdlMDZIY2FGS21JSjBoRmxPbUx2YVE5TjZuU0lGbm95WFJwOFNkOFE1VnptVWtINlozZ2R3K0UvVDcvcC80TThEMk5IWHlNL2YvVHEwM2QvajlBZURPOWo2aDBabm9BQzRpNVFpbWtHSUVYQ3hNMERYZ2k2R1VKZGVuMnhRWEZLeTZBaEtJRWZEUUZvT0VtS0VPQ2k4SHozTFNzZHhJbHFtVXpqc3VnaDRpNHp5d1QrWHdjZURPYndwUkU3OUU4d1dQOVJldTlNdFh1Q2IwcTFuRXZmZXkxWm82SUJZREUyY2NGMzlQS1ZsRjJhZks3YUNMdjVudkhmaWFPNkNyOXczdE1kY2RITk93TUdVS2pUUEV6bXk3NnJLUzBnWHlrVkpBSVcvbUlyb04wY1JESFR2alJiOFUvb2x2L2NzKy95Vk94L3VieEY4Qnl2OWtNRmFQdTRONDg4MURZQkwrK0tHM0VaZVZ2WXMzNHFlYWY3SVpiR1g4eWF5MmpUaFA0MlAwdm1tVTZaWEVDQ0FaVHZHZnE1Ym5vZnhsVDRaL2NERCsrMXdlaTVPMEhReTkyMGJkK2FjdGxSQ0NUZWVLM3dKZXBTUkUwZVhQSHNVQ2tqdis1aWEyYmpLaDVSTFBScVFqNUZHcnpvaUN3N1pseERrbysxL2FMdFBEY1MzZCtaTDQ4MC9qcVlKdG1OZm55WUtQRGMrTEFRbmFPbVE0SGxPZW9OMXBPcXl5VnBtcS9obC9KbmlvWjV0RHhvN2xOWmNBWW9sd1Z4YktjcGFYYStmdjRjc3Q5NW9ReHZSU2Y2L2tYdVcxdXVMRHl2WlNQeU9EN1NzN3FPa1pBSDk5U255ZmlnbW1rNG0vbDhDRGozT1dIQ1o0S3BTQVR6dEdYbVROZEU2UGNickJWNzhpV01ReG5USVBwZVVSR3RQK01IUEQ1cnlUSlk4cGxyaEVkNVBxUERaSlVzWTM3VXZ4QVBEbVJBWUV5SEdnYVBEM0x3WlZSbzRzM0pjQ01Jb0c4NFlDcXZSeWdHYlVjWmpmT0hmU2w0WDVJa2VJN3JsZ1JRbTBFRTBINFBsU2VBdEtrK09VWlpsWmkyNDVXeXorOWZzL2Z2a3pmN0R1c1RoLzQrOW54NjFtaEZCajNJbWxWWkI1YlM0Z3JXVWtNQ3JPOTJNYVZwSzVVV1BldFk1NlE4Z0h6K1d5blZta2R2S2d5ZjV6WGRrV2U4dGlNOG1XQXoyT0NHQ3g0dy9SRDlud21VbjlFZHMwL2p3dmkySTlYRlJLNGNmU2xxaGVqQXNZL0dqRElyT3pnK29hU3h5dnc5VG8xUVRXMFJTdmlzTXBrRjVBWjhvUTVaUTUwUmdPTVBuSll1ZENSWTQ4VGRUSDZGVjl6eEh6NlRqN3lvNXlpR2NiUThpcGovREdYeURLTVpVMHNURk4waVhQRG1yKytrdis4eGVoQ2Yvb01Bc0Ztb2VkOUx6MWoyK25xMGljN2tqNVIveTVTV0pGVXhUTzZUUkswUC9YWDFFMzNXTGRLQXc2cnRKZnpTU3k4R3pJL3VNdks0M2xwM0o4R0lQaVZ5UXJ4RnBoeGVReS91c2Z2ODdyT1Z6U21hT2FpWXozSExFM2NmaXk2U2VlMFJoenNYaUlyNXdQUUp3anR5WkdUR1BIOWorMHpEMU13N21yS2NkK3h1WnlkUm9ST2pZS2JHNXM2TURxSTIxc3ozSEpBVWVZNW5NTVppeVhJSzl1ZGhpRnd6Rk54b2tPKzdoQjRVNUVhT1JyWFdwKzFJdk9zeThJaHo0SjdvTWlFWjNDc1psemVpUUd5bU9VUndxbStML21DVmxQNmRFSUJDckY2WEI2L0tBOFNLM09TT3hNZHh5YWVWMFZnZm9Vb0tCTWxmVitmdXZReWM2Z2gwNktFVkNyTHdGM2R0Z0wrZmx5Zm92ajJzNi9XNDhxNkorMXVKQjRIVHV1M0pFZCtrSGlBdVp1cUNBaTRWQkdaaXByQXNqR2pmNWs4QmhXZkg4QkxsWnAzTWw0eFZhYlJNZDhuaTh3UnJMaHdXUUVUS3lMUG56UW1LL2FvNGJJc3BtMkxXTzVxTHg1dW5COWEzTHg1SFM0WkVNdXlPZlF6bmw2cHBpbk1WKzRzSnZ6M3lWWWZMUmxNL0Y0SEZmQlFWeWlPRXRiQWZla2pLRzhLTDB6bW5LZElGMkJZNWtseWQ5ZnNPUnlhbndUTWhFRSt1ZkwrN2lrZVdHWGtWVkNUSXRZUjU3TzhTeFFGOW9OZ3JUSkYwN3FaM2JvQzROV1FlYXFJaGZSYUQ0L3dTSHl4eDkvZ0l1MDFDQ0FJTVQ1RTRBUlFEZ1ZRMFpsWm53UHQzY2dONC9YVnB5UU9jVmpuTXZiTmtQSXMyaFpjYjNZTkNDdkE1NytFb3FhVVJRald4cHhYaFpWZkRrZm5kalRPeHVKaS82cEkzMldqRzMvbzl3aXZEZUpGN25ZSXEyWkRkWXhueDZwNHY3Y013L2ZNTisydHlXamJ0WTY3V2VOcW8rdG02SnZBN3BJQk9UVEdZVStEdVI1S21lR1U5UXMvR0QyN0d4UlVZTHd2enoybS93dzdjU1RibHZQSk1kSEY5eTd0TjNPZnIwdXI4K3Jsd3hYcTZHNE9wZW41RlkxNWFoYTQzbVB3TjJqS3ZBVWhma3hteTUzSG5kcHJNTHhnVWQyOVVEejg0Wng4WHpOeFpYR3lyVDNmQ0c0Q3VINmkvZTk5U0t3NitZSXRYMjZzRVY3L21tYzNWN3J5NHBNRE1nblI1SGNtcG9QOUZxRHdDMlQyNks0NzZNMVJ0VVE0eDNjOXB6Q3VEMkFrNTJiR2ZtaGowLzFveTJwTGErblNkRlR2UlFGM084RzkybmN6SlBTaXpFMGVGdnhic0RnMjMyYm03MFFrY2EvR3ZaOXZHSUg3cHdocjFQMFpYcWhSQWppcmk5TVNvNkxvVVMzSmlYRmV5QytFRHpsZitIRHhucHBNYVZRbVpaMFJydEdiaE5nbzZDSy8rcTNmeFYrNjFiSU1wMVY4ajFNa3dTdXZJUFg3S3VaMzJJU08zT1ZHWGVROFJxMTFXL0p4UTJ2T0xlL1B2K2R3amZaMnhZdmdDaXhNMG9SS2FDUUVzbHNCUmVoQzcyWGVCditVUE8zdGZTZGRiMERYK1NVcVkwTzBMOUlyY1VaWWpGbDJ0TmRvQ3c1dS80aVdrSStKZmJSemVYZkJXZk1SZm8ySkpLR21uNkRMN3NEMnpPMUpUOXVDUS9MZFVGblNudmZId0RLaHR5ZGFtYzcyRnAwbVJqcU1TMk1mTFo4SnlOLy9WNlJUek40ZkNSUVVWVzVDZHpUVTU3MUx6NWxDbWNhaWk5QVV5bzFDblJCQ2FVQVE5ejMrMTIrTTQySHgvSnU1MVVpdGtiSmNDektNcFhtakhlciszaDd2KzczOTBXZ3FRQnF1WjZsUFhxL21SK2kxSDUyd0g3RXF6MHl6Z05yZWdiRVg5aEtjd0c4RGNsRXZoL0E4eU5zMzkvWXQwUGZnUzk3cHM0YUszeVpZb0hPRUhlbTd3T1pycGRTSmdJS0FZZ1U4S2dMaEYxSjdPTlp1bWRKMHhPN3JETksvd1pmYWdkMHBnUSt0RDFVNllWRVhvVFVsY1JpSEh4L0FQRGRlQTVyOXp2WUduV1pHT25GQ0RDRWFXSEFkK2FNN1A3T2JIMGs2T0JDMzBOZ09rblB3bXNxVUdUaUNYd3NTdlZjVXNTN1hocVE3bm5HSy9laG9CZ3FzUURKcm5sRzN6YnFsbDNBZmZ3V3Z3aDg2akpQLytKWXA4a0JzS2JzdnpQZ1hTTjhCM2l1OUw1UklpK0E2MStMVmZTMXR0OXVyOW9CbktCeWpqcnpxbHIzZlVwTFRDVHBJY2V1VWFFdVFNaDlpa0JUZ2FLL3FPSXBGdzFBMXBXZDZZV2tJZkJSVFhyV1Z1OEM0dS94Qys1QU9YZWYyZUZGYVlRVVpVdGxldEhuOXdlQWk4MTVITHEvMFdjbkprNWQrN1k5bVl3czM3Ty93NkNRRzc0aFpidHM5MlFKTXMvNm4vbVUvZW15YlZjaTcraXA4VkhwcGZwRDNzc0pDeURkcTV6eEt1b0NsUWE1NVNWNENQcjlPaGora2hPK3F4OFhWaHNaMVVpQmxPSXZ3TU91M2ltNEtOMURxblc5a3ozYUdWcWQ4UjUxamJBRDRkNmVRZ0xTdkJQQXNIaDI1cDBsdnRNL2JnZkt1ZnU0UWhmTzZzR0JNQktKeFpTcEJGNmlpRDBrZmZkUmlQb3UyTnFleVNRdXRqVDNFb1Y1bUNpQmdCeWNJWFpHc20vd2RYWkFKMGpnMDNwVFJRR1VKaFlqd0s0d0xjeTIyKzhQQU50dGVacThzOWR1V3ZSbGVxRkVDT0tpTDlPdWVTam9LZDREY1ZSdG4xVVVLdnF0bU9uYmtOSkxDZkhiUWwzc0RMRXp4YzJuWjdMQ2wrbk5ycll5a081MkIzdkQxM2o3bmZ2OFQ3angrLzBQdnZJdkljQUFMdzVWdVNWZGhydndqenZTdkxiazFUc3UvZmdtbzg4eUxReWpYZU95NjZncmdjdnhNTGZvM3ovZFZueS83YmZEaCs3QVZ6aHI2cUVEckYyazlzRVpZakZsMnROZG9DdzV1LzRpV2tJK0pmYlJ6ZVhmQldmTVJmbzJKSktHbW42REw3c0Qyek8xSlQ5dUNXOG85ekRsK3dQQWU4L1h3eTB1QmM3MFozeEpQNXNpdlRzNDQvak01RDM4eS8yTFlabStyZFU3Sm1lYUxiOGw3L1IybG5qRzMvRzhxZkh2bE90Ny9DVEw5RUxwSWVHYkRieFRwbkozZ0dwZGIreDFWQ1lBWFVtbTg1NVZFaCtLaTc1WXZXZDZwL1I3L0w5elg3c0RQOW41dWw1T2orTGpmdm5URFBHWHJVK2UrU0hlSGQyMnFMcWdNeVhGcHhJTGVKVDRJdFRGMzh6WDM0RlBPNkhiUXZmSjY1M0Vud0hkSHl3UXZ6UEFQMU80L0cyNThTNm9LQ3hjanlsREJQc0N5VUpHRGNHRjhsVWhMa2NqYlV0MXJpVkQrVnF6TG1lc2RQNEZrMjB1eUpEaEQ1Y1JISCsxUFZ6TlB3VGJIa2hlakRLUmc1eWRjWHpoMWtOYi95NFQ4MnloclQ5TnRsWmJVdFVkdURNd0VwMkJzcERNcFg4UEZSNS9GTjAxNnFxVFpMeXhnaVVBUUloOWFnUlRlS1oza2oxZ0ZQQmNadDBaUGQyeDZwTGtGUCtPQVlFcjhjZS8wYlV6U2hId1RyUURLdUZScEZDZ0VYc0VISnRsMjhXVWJWR0dOTTVVRVFGb0xxb1hKZU1DWVFHWk9HQlVocGhtZENSUmlSSHpVU0lYVnZTSWpZVDFnWW5PSVpGV1RuYUdNdGV3RXpEaG1UMkk2V0wrR1Z4UHA2YjNNelg3L3BFVjE4bzRtVk83WXhnN3ExSWN5aFM1U0NUWlEwZlZGWm1TMTFxRWpSenFMY00rVjcvblpyUXQ1bVg2bkdPcXU2MDhCU0RjWXBEYWYrNm55eTZha1V5QVlrNTlWT2t0R1ZrSThHcmhVeVlKWGtJK2VycGpyNnRhSkJWeS9hZzFOd1JUTW1jalRYU3h1ZlBEa0l2cER5WkJQSGRXWmt6VkJpdVd1b3h1UTE0TFdJbmJLaFN3QjNjRC9qUC9mUUMxUVExZVBkekhvME13bDZOUXNZV01TZ2s0MVNqZ2drNHlDdjdzOEhSZ1Rpa205aEU4K2xSVVBTY1RMeEZLVjBnTXMyNk9URmRwdmlFd1Y2UlB1eTNPQzF2bENJRW5Ba05BaHJuZlB3SG9lL2hqR0Q4cjcremdoVmIzTzNsaDBSZGE5ZjVmYm41aGVCSHFqZDFodG9aYjhvN2JCMm53c25YL2l6M2NYSUxMSEplRlhJU0swcWVlNWRnMXhJeGVhM3FXNTU1RjM4LzNyc0IwOG1haG5wak1jbnJ4bnVKL0xHczkrYWQxb3FmYmQvK25MdCtCbCs1QVB5T3czNUozeWpMeE92MW10TXM2ODdBbHB2VEV6aFNyQzBFSmxXbnhlWFo2eCsxQ3c5Q0ZBUDFjUjU5dCtBMzZIOTdBRzNxK1NQbWM1Ynl3eXZjSGdJdXorVlZDZnI2QmZZb1dPME9TM1RQYVIwVUpOSGEzemtqOEVDRDNvY1lGWFMrbUEwOThGc3N0dnFPWlgvRlA3ZUpmRVo1VGdjSXo4VWkzd2s0NnBxUXpUL0hiOUVLV3FiWDJTZkM1azUxTmxSUmZBckV6V29hVFo1aGlSRjBBa2t3aEpWWUpLc3ZvVVliY2g5Z1o2WjBVN21DcnZ5WVZGWUN0bkVWZWd3dDlENFg3azgvcjYrcUlQdlRzZ3M0OHJQSjNFR3hQVFNmRmRNQmRFcTlOSStPODQ1TFZReEM0UXhINDFHV3FmZ0V1OUxJVmNKOU9GcXN1S0t0d3R6TmNQT1hnK2xLb1RGMTVnYjNRMXVHaDRNS2NvYTN0dzZ5YkFtL3Zac3FYa24zRTVyam5SK3pQOXdlQUwzUUo0UVR6SEtNbkFmYVhrZU5tcVVTcEwyUkpPVnZuVmxhc3puSUxmMmIxQmpkUEVlNmdOUEJ3S29laWRQNGg3b0xDbENscW5USDMrYTJKcjhLdG5DLzR1SVpLNEVWVCtOLy84cHJYL1N1Szd6WjdGckdpQ2hXbVRFdVdSeDBYTjRhNm9QTmdTTUtoQXlkTENROHhVZWxVWWxvWU9SUndVNmFzTk43c0xRUmJxeTBwdDZmQUc2emVrUEpVUzM5Rk1mYWtiQXVuSWp2UU1oVWlvMmtIRUpBc0lVMGxLT1lsUzFIWHU0a0VubGdFWmNvVTF6dHpZYmoxa1I1QUFvRWU5YnFTQ2NoRWpPdnBwcERNTzZPUWcydVpGOW9xdDZUOFBaM2t0VjZKOThITERlK1hmcFh5UTVmd2NlYmZId0JlZFFHODBRZW50cHhkTVFLeWRtV1BRdVlDWmQwQlBYSHIzNjI2ckROM0dsTURIZHhKNzQwVlJyWnlJK084VWtDZThkTEk1NHlSZzRCU3lEekxzeEN5emhJbDhKWTZ2djh2OWI1QjJjdGRNMlU1RUR2RGxmb0l3WitRekg5c1dQZ01xTHJiT2tuTUVvNmR1ZFlyQ3VCWndoMG9SU0hQRlVtQWtXQ2JKYktEa3RVRm5WR0tBRFdZRmdaOFo3cmhRK1paaytoajl5SHdZYUdmVzFEMkpEY3BQczZKNzhDanZqbGJKUVVLU2U4TWNXZXVDN20rMjE1RXZaeGtBaXJhR1lWVXpobnBDVFIxRFJOZDRETFppaFRvSWRsS1E2Q3BCTW90d1BXZTVZbUZwNE1uRms5TlBmR09Yb24zZ2R0NnVmc09QMWFKbmt2YlpmckM5bDd1L1AwQjRJVm41KzFXY1FXZHZLdWQ4U3pXbzJGMFl1WDlkVmxub0w5alJWbFJkcmZPZUQ5ZVMxWUNVblpHb1llQXVlNXd4dENxSzcyRW90MUVNbW02b1RRQVJhWlE1NTBSRnBDVk0zSkxnUCtTNlVPLzFtcFB6cnh0eDdLWlpDd0IxM2hlNXNkeU5EVlF2NlU5SFdSNWJMNkhoQVdPaEhtK1BPUzRLN2VNVWdRZ2MreFoxeUZYRmdkTUMrTmkyaFpCWm94N3g3T1FUQ1FXY3hNd3NmdGZweGY5dGZodkc3M1lKUThKT3hEVzdvSFpraElBZElISWk1QTB0S0xTOWNJZWNzeEVqVVV2L3N6ZmVXQ2xiL0UyNnFTeVNKWlFxYldkeXNHald4OEtpcjZRZDlxNE5pK0dtcjRRYkJ2WWtpOHMra0tyMGlxbWhYbC9MUnE2cmVOMytuOS9BSGpuQm41R3VwOXZZSitpZkdkSXNqTkcrNmdvZ2NidTFobUpId0xrUHRTNG9PdkZkT0NKejJLNUtSRk1KeEV0UERWblNuY1RKdGltMEw4b3QvcHRlaUhMZEd1YjVISFQvT0xQQS9rUERaelhQWTFzT3lmWlF1UHVYNTNyZHArZkNzUUgrRmYrMWFEMUlvUWhqOTROZUNjNTlkR2p3TVhuV3FsY3lwaE9Va3pYaUhHOWt4MlhydTRrOWdaazIwTnY4SmZiR2VpZVJka0ZuU2twZjg4cHRxVXZ2Sk5pT21DNmVMbVJjZDV4eWVvaENOeWhDSHpxTWxXL0FCZDYyUXE0VHllTFZSZVVWYmpiR1M2ZWNuQjlLVlNtcnJ6QVhtanI4RkJ3WWM3UTF2WmgxazJCdDNjejVVdkpQbUp6M1BNajl1ZjB6NENlNyt6bTllVmMvQW1ScjliUGRzbTRhOEhCVVFKTWwrWnhndlhIbXlRaVVBZ0o4UWVwaWxQMzNqS0xhZnhCU3hENFJ1cFNkT2xvU2RoTjJNZklVWk91WE1sbzM2TnZ3NnZuMnp3K01PdTZ2YlBvNU9zSm1QelM4Q1NmM2N6Yy8xcGhjYjQ3MlpwRU84KzJ0QlNjNjFwSVRDYlBQK240VkFtSXQ3M0tjNmsxQ3kwa0p3eGRDRFk1UitmYjRJYTg5citPcGwyZTRtcXNIZERXaVJsZ09rdFFMV3dicVNuS01oM3ArQkFXYU42VjdrVkhxZkYzU0EvaXh5T3NnRXRvcldnTEZRSHphSVhTQm9CZUpnVm95b1F5WFZ4eWtnS2NSSStnRjUrWHFDdUZJNFU1cStHUmExRmY2eUdRMXdvdUJCZWgxU09lczg2VTZjMFFaUmU1N25NSHA1VnZ4dEZuaFA1LzlyNXRTNUpieC9XNDdUVnJubWYrL3lmblpTN2Jsd01TRWdTUmlzaW9TN2ZiZHNldXJZUkFFS1FVa1pHWlZkWGxMVkw5UHFXTkp5YTlTYlh5SWoxKzRaSXJHcy9tU0xUTFlNUDNxMVhKSGJ4b1FPSzRPalg1VHNCWDdlbk41amhEdk53NFlvOEUxbjZGSzk3K1JmQ3RId0Q4dEMvRER5Sy9OS092L1BQNXZBL0ZlOU44enZOTktoZXpMV24rM1ZQSUpJNi8ycHAvdDVYTTBQUGUwZjZlSzVwSGhIL1hISjFrS2pMbTIrS3g0bmdZYnVuQVZ5b3d2SFlGOHUzNTJJL1FyeU04MTJ4S25OejFtMVloQWhxSmhMUmJNLzlML1BkY3Q0UHQ2Ky9GSXFhblgvNGRkL2JzblRNOUdLODQyTERiaW5QUjhyU1VrUDMreCs5TWxCdVZXVG9pU3FUTTBrbkVDSkt5RHVKYzVybnJncFgvRExFMFJoNnNHeGRucG1Qa1YvRDVKUUM5WlBHM2hUSVFKZ0R6S3YzcFM4emkvek05cy9pOFhNL2hjQTYzWUxvNExyYjhGTWNPc29MNkczWHpRa1ZrUE9GamMxQ1MxL2tFMFVUc215cGdQbkI2SHZWeEhpTXFxekNKLzhFSlBCNUdMdmc4T0ozUm9KTEpQcWtZekp6WW8xdTVNM0dVekFNeU1Vb1JrSjhZaVJIcXBEUEtMY0Exd093a3g5aEFSVE1ybXNTRzRhQ01lbXFDNFgwdm83SUtOWE4yTnpwRWRQTEovUEhUK084enpPcDR6TDNKdjlRWkV6OWRtWndXaVlibjJFdzZ4TjJEenFnRHArdzJRblBMeHhvMWxWMkNQL0l5SDJlbmhHSTZTczVJQ3VQSmswY0pUdEY0NUJiZGF5RGxIeXd2dVMrenBwN2JGK3N0Unpwd0gzeDFQOFYvcHNya3gwS0xuRm93VVNrMzBiSkx6Wml1cStVUTNLSndVMmZjSzQ3SWk5QU1kc0JPTkxLT1pPUEVaM3E0WFB1dzBMRWNzM3hrRlk3cTA4a2U4blMxb1pSaVVxYVFrY25MSTdhOE84anFKWUFWL3JvNlpmQ2hGY2VvTXEvbm8wOXY3Q2h6VDhjVWQ1TUxKdVFNdVFBWVBHMXB1TWJ4V2pTeUZuOUdjZFVnSWlzQlBRM0JrQnhqVkk2ZUJzdDhPY1RMU3p4Sk5JNnNlZm1wRm5sT1hRTnJud3E3UHVzUEdmQmJEcTVYdVFMMDRIUWJaZTc3THpLNzBya1lXNE1vdTlXSkU2TkVBdXhUM3Y5NUtjWklDd0M4di8zdHQ5L29nRCtrOGZNdlAvLzY2NjlRMUhlSHhmRTBwZnNwOHIxeU90bHNzRXg3MXhSY3laeDNmT1ZqUEU1SCtVSlE1Mmc5YlN6bG96QTZ4Qm5UVjE1TStmUlJKNnZFUExVS1ZiQW5SdWU1QXk0TEpzbGxhMmhXTU9xdkJXUE5uM2Y0UmswY1d6UnhWSEtzeW9PTVQxTnJTMTFKM0poNGY1NHBNZkxQdCt2dnVHdnFBcEprdXNDVkU2dkgycnczUTlFVFpsZm1ZdWZsbG0rWnQ2ZFVaVVlMYTR0MnR4RW1lUng3aDI5MU9ObzY2U1VjU3lOU1FLRVRXSXNkK3JsZGVZSWk0OEpuSmk1OXNaK0NRbDlQNFJUWFROeUM2aGVMOUZTOSsrK2h3bHlzb3FnK1B0VjJQQUVmTC9kUmg1dHRZZWdvRUFrZ3JGWUt3MmtoS1Q2Uzhua0lia3h1UWpDL2lkNkVIbmIxWGNuS2NzcjB5VmIwbEw3QStjMjZKMWYrZWtMVCtZbC9yL2dYWkI1dFRudmpoRThGV091V1M2YnhiOTJTOGIzQ2RUNHVEUElFdFc4UFg0ai9xdlQ5VmVoUngxb3R5Q3RlR29JaUsxTm93aWpQclJJN1E5bVZZVWwzTVhFUnlGK0F6aDhjUzVWajZRK1crQTdUdWVyajJya0Q2dmxxdHd0ZnJEZ3RHamtyU3NaekZSSjVCSkxKd1psZUNGRUtlc2dkS0tPU0dGRUt5cGowZUlXV3N6UUZTQ0JuQ2ZRaFJKOU14T0JKeGk4eDhSOTJ5TU43NjR5cVNDWkdkWmwxUHpMTE5VK1lVc0pMeTBvK0FncVZkT2R2UWtlZmtudEtSeDRPZnV4Y3UxMFluWWdFM1RVWUdubXNNSmg2dE9EN2FCRy9hZHFkUzJOdmN2dDBjVyttTXloYVZxR3BBRFdjaWhTUUE1aE9LZ3BBVEkyVVBoVkpaV2Fzd2FOSGdjZ2JwWmM3Nm8rNWhWdzlmU3RVMmxiblh0K2I3SHBYM21CUGRFT2xnSFNlV0V5Wklrc2hkeUR1b2FOZWlYOWowUGV0TDFiYkplQ2FJK21DaitPMy9nclF4eXYrT1E3WVN2NmNpK1UxRlFCUDdNeU5XTXZvZW9Ya0thYUx3YUJ5NlExNi9yQ0d3Tk5UTEdJOEZaWGUvU1c5Q1VuekVCeXRqdVJEdys5VHBoVUpzRTlOQmRTL015OHhCUmlScmpNSWZPUkZTamtTcDU2SnRHSUltSWV1cFh4TEZmWEVUTW5HTU5vMUVEdlpaWW9xUlAvUjZ2eEJzMlJwdUs3aElsTTU2SmRQL0xCNC9OZk9VNDlnL0l6MU9DS3JlOUtLbmt5a2pJeHc5enlHNk5aOXhKUXNUUjBRNC9PTGR3VUg4Qkd5YmVjeXlhdmgwTXlyU0lBYWhZS2YvZ3dOLzdtMzBoZlFES01ya0Y2ZFRFbWMwN0dLT1QwL2ptWXk2SmhxTDllalo4ZTNzOTM1Q2ZQMk9wK1pVVG9zVTFRU0EwRHNvd1FrMlptd2c0N0pPQzgzQjhKWFNna0FkQlN4ZUlLYnFFSlFFbmVtdVAwcDA5NlZHR3ZiN251bkxrMTVXS3gyNEpRYW5LZFRveDZVa3N6V2hqUXYwN3RBdG45N29GM3lsWW9VOEtqd1Y5bzMyT3JsUXczOGJUOEFjTFhZMHc2NDBVZitTQjVOb0FUdnI0Sms5Q29iVnZuclBmSlUzWkxvL3RUNFdOSXB4bmdvbldsc3c2Tnk2MVlLdlFRbGQxYlo4bEt6TVgrRFNWbTRWbFQ0TXFVTUpFQS9GK1NwWVhReTY5M1N6b2NKUzB6bHNIVlNLVWN4bE9uT2NheUR5akd4TjVwaUFMcWJTTXBjQUF6U3U2S1lKREVia1ZKa1laaENjK0E0dUFsNFdtRVJlSGJOaEhqa1c5Sjl6SlFZeHRMdFhLaUhBckxJMm1wVzF4aGVkaUNYTFlBVExrRFRxWWw4a1FMQnpqNVpEdE1iY3hkSFpoNXdRdzVnc1IzaEV4OHBwME9sR2V5R1RDeXlrOU1McmpUd3B1a0w2N2VFNyt2U3FXamVZdi81MnQ2TW1DY0FEZDNJRkpXR0M5QlVRTXA3d0hUWENNdUtRRk1KU3E0TFN1aHFTdDc5anlaSy8yYWd0K0ZNNHJnWGxYN0krUGhTVUV3MEZUZzZpT3d5WjRnN2czUW41ZlpQQTJWL3RDZFB3TlZlSFcrOCtVR3RYaTEwS0QzSTloMy9Ca0M1M3pzNDdpOUk4VnBBWVRnOWtrZ3BmR2NrNk9DcUlrMmtsNHpneUI5SkpTb3FJS3ZDS09VbFFHTEpmY0s4dFAwK0JWeXByOWVaem1NVlIvS0c1OEtSeFVTTzJvMms0OG5zVWRjVUFaVVNNMXBHYXZnT2tTUGM4ZVc0TUQzayttTlVBa1pkSTRhQTNmb2FuU0V1SXhKdk5BZ3h5dEgzQkZoVGo0b25vT2JoU0puY2lvT21janN5YWhoQW1Fb3lJZ3VReG0yRm1hdXB3QlV2QVVHWGljRXAwQmZQdGFZRndJcFpmVlNWVXRlbnlOSlUxVzhZaFQ0SXZLNnNqcVNpM3hqMFpzUVVnQ21aQWtpaTdSSWxJNUxyWXE1SUI4UkhIK2JLNFdhcWRCZkwyYU9kN015eGtNc2tPSktLZmt0UU9pbFRkU0plZ0NGTys2akVLNWtMUE4zMVhTT210T0ZaeDVBUy95RkFtL0FjU1BuMXRvZ2xNT0w0TzM4QXdBNWloVGY3NkZISFNnRjV4Vk56akI3cnB0UFdUR2VPaVNyVWF6blQzY1FJME9xbWlnUTN3SXRTOXJuK042WC94QkJYZlZ3N3VuSys3OFp4bDQ2R3luVkQrWXVVekVNZVZVV0JFWTJuQXlEK0RFQjhFV3NVS0lLdVBLYUxsQTlBK1hLckVaclBVTy9mTVplZ2tTR01CT0FKTkwxaVhFQk5TY1NVVEhFUUNmNys2TW9uRER4ZFJ1eU1Dd3JQZm83a2ZlZ21oWW5IZEx5LzU3WGpKN1l6SGtYSzhVQURwWWZDbEdneHVZOFc4WnVtM2JrMDlpYTNUeGYzWmpxRG9tVVZtZ3BRdzJraDJiTkNOMUVwSlNZakh1Q1lMcGxIaTdob2JwU2xlcGwyMnk1UXJXOEplaHRrdkFkbnV0NlZOOWdUM1ZBcElKMG5GbE9teUZMSUhZaDc2S2hYNHQ4WTlIM3JpOVYyQ2JqbVNMcmc0L2h2L2dIZ2FvT09PMHV5aHpyVGJaOW9ldFlOQThQdStZUzU4ZncrUXVXN2hDK25mMXJYZmJmWnloWC8xa2JkNXdtK3JuNStuNTAzNnZGR254Z2pidDdhY1dLTkFrV0FxWWVJNzBrNmVKWThQUlFtMlZrK1FyNCtJWGZzRFBVYUdmS3hHNEs1Y25EZWNmRi82S0NzSzNCZlFsbEZwcW1BbEFCSDBnWHZ4c1c1bkVkTjBjSEYxM3NxbDZMRjRqNWF4RythZHVjajA4azNWZm5HWW5aYmVpNVR0QVJHcElDM1NyS0V5bFErblhjcnlncnpmSHBqZmhQNllOSG43VDFSM3ZmNXNOVnVVcGd5UFRaMnI3bVBQdW56cGNPeHE3OGwrYWF0ZUpQNCtYWVYyMTgwQitDQjM2M05QNHAvZkRIRzc3dytyN1dVL0kybDQrOHRMWkVoZEFJeDlSd3RXQ0hFb0NCemNKL1ZvMklFVktZekNnbEl3ODdCQjVoL2d4WlRDdGlocGtydlFJWUtUWWZ4bHg4bGtLZVVIVWlzVUdjUVlzOEVWQjVsTW5FdzJ4aFh5SndPeWZUaE9jSXNMaU43dnhmZk5Nei9hNk1TNUY4ZXB4VlNIRXlIdUU2OEZpOVBNTTVUN04wV1RIMjJOQzc3bTVSanlIdWdPUm4rOXlXOEhQbWp5ZGdDVjAvYy9SbkJINkRHVGdYR3lDOWViTGtEUWVQLzJPalVoUFFMdGd2Rlk5UEtHQ2J6WUJRei92MW1LUmxIdEt5TEFrV2w5eXFNSW9TREdDT3h5b2tIQU9uVGpqMkwvWWdSVUZZdnBEWUVLR2F1aitEZFVDSHd5aFVwUnFVUlNxeHhyTXM5Y1dMOCtwY3pORkRUVS9ya2huMHAxMFBPcUNXQXdkdTVxTkhScHRPckU3S3FmbFhsd241VzM3elhCTFpYaGhDcDZFcG82Q2E5YVJmaHpuVG9uWFJtNVUvVXEzY0dXaWVKeFFnVUdmYlRRNGlLRWU5QU9LdkZHWjNNdWdpTlZIUUFpbWZLaXNJR1dUajZibkFQUGJGajVqb1B4cWZDQWtWQUI0NjloNTUxcGN4Y054dVlEcGdVcXpLVlFNQUZnNXluekVQY0pRaW80UkpJUWphajR6N0p4TlJzRzg0c21uQXNUSmxLcVU0STJBT2pZc3hRZVFPNHJlT3F5N2tMYkNGampmRnRnN3c5OWhIWklnbU8vdThqMFJYOTJkNm4rOE9jSmJ5S2lwYWVWVjFBNmM1Y1lYUERydG9zb2Ryd2dLeSs2VThBVk5WYitUNnh0K3I0cWx2WE9MN1N2K1M3Q1JnbkhiL0Q3V1hLVnhPMEsvU21VdjUyK2szOFR3azkyZmtyelpFL2tsaWE4OFNkdVpGNUNqRmVpYmhqN3VOTVQvR28xNExTRDN4TzROVDFZSlJDWEtKSFVocFBGeGtBTDVEN3FDbUFNR1R4TlErdlJVNk13TlJ1TzEvSUlpNVRpTUU0S1N4QWpXd0xrRXpnSGZyaStjR3BkMUtzYmtKRitXTmFkdUI5VzVkWnVLclgxK0hYNmpKS25rckhQZGNaeDhWWkpnSmxSWnIycFJXbVRKSFlHYm05QkRlNUpWU21INno3c3JFdUtBMlU2WDAvRlBjVXIxS2laZXJLZTN5ZmVCKzlkLzRSZmZjTytGdDU0T1BSelhHeXl2bnk2VGY2QU9BbGU0dmZGWFBUNmpGMEpMa2lEemxHRkZNeUF0b0VNUUlLdlFUMFBNcHVRcTR2c21NUFJlUHAveWo4ZkIrb1BJNHlLZEhDWTJQRkNJTWhTU0RzQXNkRkpyMERZU1l5eFRFWmpucmY3NlN3bDNZSDhVZVM2UWd4eWhFa0FON2MrNXNTWVFmQzBNWlgyb1hYM01EdXI1QUQ0WHM5Wld5UEl4Z25pWk03bjBHRmxONkJURHprV0NZRXg2bUgzb3F0MXZvSEpOeGhiRGozZkd5NHZUY05KajZRdmUxQUxaVlRKc25ub3hLL01XQ0hYclF6aUlJc0dwODZMc29TNmxFeXpqc2pIc0F4YmQvS3BNZFlTTWxWU0R4S09QYUZGRXpaVVZ6SU12VlZIRU9sVUpreTVSMkp4YWRNMzIzcmljZXVYZ3BLSjV4NmxqUEF2WW96SmJGTWorbjAvekYrY0Fmd1h2K0REbGZwMy9yUGdPS2krWHFMdVZya0U3NDN4dXViM1NyYWdjeXBqNS9JNWhPcEpKTEU2TXUvY1hOYlR4Ri9OTHdpbWFWeWJ0SXhGK0pGcjVtZS9VOWhqcHRKc296WUVXeW02MTJBS0thbWlTazNmK2ZIZGNYOWRVTzVsUkRUU2U2aFVTSUZ1ck1zZ0hheUFUSjNJOXZndDkwNTJoc2JKTmJjcnVkL2pIenkzbXhnOGg0RlJ2ZEZKMUtBQXVpQ09UMGZmVzlWU0FCWjJsVTU5aVVwcEFBQVFBQkpSRUZVS09xQUdLUDBZa2h5eXVoazF2bGxJYVY0VjZwYlZpSE5kRnU3UklhSndKeGlkQ2JwTmRCdHpSMk55MkJRcys0NHEvaG9oY0NOTTlQdS9MM1d4RVZmcGxQMWwzbnMvZDh3Q2hGb3F0VW1nMjJQbmRmUnhVb0VFSWFldURNS0ZYQ2xkd2UxUVZCQzdxRFFrVHltTzZsMGtJNWRjd3lKZkd0ZE9uOXdqS0s4QzVwUjc2U3NxRXd0TldCUGZ5bVFZWURaai91NGc4UWk3NWtySDZYL0FKKzFBN2pmOW5QeHhQd3E2NnQvQUVCaHZraDA4S1R2YjZtNTc3QkhPK1BkUmpTZmFwSXhXcVpLQVE5OGZFSDFsSlJ0SDZLT2lVb0pvR2Y4dUhkRU9yT3krdmFLSXJFY2JqcE1qZUwvQ01CdDhjM3BqRFpDTW1rWTR2N3JMUENrcCtid1B0SnpxWVNKays2cDBnNjJjdk1YVXNmN3VMdzIxRWxtalhmdDhVb1I3NTdIMUVQQThUdnJzNDBNalNHL0dVeDhtWnVYT2E5QWFQQmY5ZnFDNVNCSGJRaTRjOGVVSGNVazQ4cE9hMmtjd0pEYjJBRjVqUkFnc2N2QWtNUklaOG40SmsxVFJsTldVNVFiM3k2M0t0bDQrRUpBYkNiaitYdlVTeHlWOGhoV3NjZnRTUC9HRGdLSkxDSEJzTElOVWVnSVN2cFJjMFdxMXBYZ2UrYVB6WGRTVEFHYWNvMWxDckl6VG5xVTJFZFhDdmNVaFc3QnVqNGgweUUzcnl0U01vS3VrVklBU3BmMXFSaDZhbHF5RkoyQzhWUzZrWG5LUjdDWElDNXVUZUF2MDZGVmxvQTd0SFFQdmtqdmhzRzBPMGFSbFdtdDkyUCs0UjA0M3ZOdnRoMzZlRUxhcGVJWWljd2x3UGpWUHdDd1BMdEN2UUtpMCsvcDZCMkNRWU56VjBldlI1bVdkcU5udnRLSG5UMG9KS0FVQUxXQnFFK0JiNWhqU0ZiMFA0NmxCMnFPNURIOTcwcjZEaEJmamRnQmhEQml0eDlySXFWY1M0VXBodHBuVnRGVU1tZjhudTVkcWNRbXZwNUFmL2EzbE9McDVhaktlMVY5a1N1cjZGbFhkUS9LK2U1V25UaHdIeFVWVUJRTWNGbHZrVkVna2luWFdXdnJaQzZndWdLaHRrc0krR1lWcVkxQkdqSHZBMXI0U3MrR0R2eFNHT0xMa1JFUElmMGZpcjgzV1cvK3pLenZ4bzRWZEJrQ1RpYm1GYkdsTk0zSUl0OUhKaXZyQ0R6TDI1RDRpUWtUanludVh3Ulh6dVRwV2JBN0NBdTRJVWtiNnpWYXNsVG8zVUNHQXJmOTFEcmVhbkZ3SCtBU3RVU0dYcSswT01qVGVjZWxBVTUvakorNEEvNnl3cDNYNjB1cGttZDN1emxBb0pNRjRLOHl6UDN4YndES0hxNzlxZ0hiU2c5cGY1MGt2Zzh4aXBGQTZXSUVQQ1I4Qk1YS05UY2hseFhjZTREZ2ZWYkYrVzh3ZmI0UFhVa0dJNEYybGRPa3h6TzVNMFhNcVZLa0x6THkvKy8zK0xYNHVGUGdIZndKaUpTR3lxTG45QS84RFNMNDJ1Z3lkK2dZREhzZWpjM3JpaVFhekI1alJwQkVwR2pxV0dJbmdYa29SVElBNGl1Z0tCeW9FZU9BbUJvcFdkU25kQkFqQnpGTUtUSkYzNkZYQ2owL09LcVRBSG5aNFBTVmMwckd4eWk2TnU5cEM3NFZ5aUg1ZkZUaU53YTkrYzZnSlpEZVdKaytEL1ZFTXAybnAzZ0F4ejM2aEhsaW9pb3dkRXovNDBqWlVWeklNdldlajZGak9aRk1lVWVpSEk3ZzNiYWVlT3pxcGVCaFA5MWNqQUNzdkZ5Zmlqa1cvVUYrWkFldTN2Ry85UFRUZHhUL0VqZnh2Slh6eG8zYkVwbDMzTGlQQmY2NkpQWk8rKzc0YWtYVTVPN2xheVMvdlNsMW5nb1prc2Fyd1B3ZXBYUnZBTWV1anVTdDZUamhzNlY0WldwOXJxMlFqSnAxd2F3YU1OeGUzbGJrSHJFUnRTTnduMVdpOFNzdWJpUXNnQVJoL243VTQyNXhZbWR5S2N0cDMzeG5pSjBwSmhrcVhFeExpazhkUzBuU1I1b09zUzFYNlFKdUFvdy9HeXJHd2UrLzRWZDNjaHUxbDZHT0wvQmVldURmMXlYazBUd1ZJTlkzSjhaMU5Sa1ZoU1lxN09aZ2NHUUlFYll5dGl2SVlPSnFVRUFhL2FwYlhDNU1USUFhYklhai9KWEljcGk2Z0RLRllwb1h5cWJKL29NZTNZd2sxemhtT0pKV1FtVG1zclNnMkpCVUR1YW5QL0Mvcko1c04xeXhJY2dIRGRra1p0TldnUUZZNW1SYmxXRkNEa3Q0Zk1DNWFEdFRCRjk1aW41cVN6dlRvb1VvVXlUUE5ZNzltUXNRUDRtbG5Nenk2bUpvYmtnUEhiRklBazFuNmUzUm9taXByQ09VSmhqWUdYa1Zza3dsSzRiT1A4SGRkakxvUExaMFRwK1lIVFhEcDhUVzJkb0R2Wnd4c1prNXpWMkZCVjJhbDZWczdwRVJGMWo2WkdReFArSDdQODNJc3Fzbi9neDN5SmtTTnRPdi90aldQTjRDejl2MkZvY1hXaFQ0NmpXMEwraUZHMVNBZG8zTit0Unh5YUw0cldQK09XbjhwZmg2MURNNzQ3L0VuM0RBS3gvK09uaGNHbnp0U0FZWUx5MjhYUExWRGlsSnpOZkxjWjNGMWFaWEMyRUJoV2JGOFFnQmtHUUNEQ09MQWdkWFZ1NzhSTU82R04zY1RZaHBGVHRDNVdENWtOZlZoTHdCanRMWWpkU3ZhMEV5QUt3Nlg3Qm5uN3dBWWgrb212ektLYUhZcUxSV09VbFhycmxGZXRTTVpjaEtLUUFacWs4U0taZW41NHlzUVkzV3h5ejN5MTRTMkV1eU1lVDd5WFhld1l6ZVJucDlvRjFsNTFxUUd4c3lyeFowOGpOK04zMjB3SnBqUkNoayt3aGJ0UGNsZjUwOTNoRnlvK2FZUmVHUG5Nd0ZtT2tnNFp0MVp6V3FvNU1WQXZjekZ6eWpkTWpaWVlBaE91b0JMcENqSExod0Yyc3JwUFFvY1c3SDJQOXhsblZCOG9tY0kyVklvZWJHc0pUd1ZvRVpwVWxwYnloamYvUEFuSHJySndKRzRsUVZremczSTN2OFE0SThMVU9HN3ZIblNkTWozZWZWQWszK1c0WElIVVVuSU9VOHNlK0RVcklaL1JCMXVRMkJYVWlqeXp5N1hBSnNPeEE1UTVFWFYxUnVRZ2VLZWlpdm9IVlBWbW1JWWFibWMvcFR2aUdRWko0TDZQQlRuZGdUclM3YWlDTTZZVmREUEh0YnVha2J3ODg4ZlU0bHhnSWJCd0wwa1Q5cGI3bVArMkJkL0FjdHZnTGFnbUhJVzJEb3kxUnppcEdieStuUXp6WG01by8xU3Q4OW5jRVdZU3EzSXloV1BuVXNINURrVmFoTXBSU1lBbHhPZU43RnBVSm04a0dJSko0TTZDV1czdE03amh6TDZsT2xZR3Z4ZE1scEg1R1hsMjQ4NmhvT2tPZjZjT0daN1R4TkYrWldjYTB1K296WGxlakVTemdPeldxQXIrMU1pUVV6YWdJUm8yZDFpQUF3RXZoNkh6RGZpZUJIdEpBR24xdXo4ZzJwSDRFVmpNOEEzTW5nc2tJOEhwUzVDdjUzWTB3NVVxSU5IUEhFTVFEdmNmRkVFS0VSWFlXaWRHYW9Cd0krcTlJeTcrcUJSaFphQ3cxRzFNdi8zajFqYll4MlVvbkhiRzlVV21SWVp0b0FZZXZST0YzeE0vQ3NGZjAvQU1QUG1veUxrYVhWQnFOWlZRM01SdTRldFp6dGtvWTU5dkRMbDU5Ly9mWFhuMytPVy9KdjhmMjdMeGpyVHdEdXpQK01HQnJubnFLNDQ2dGVYbXBlQ3VUc1NzY1NGSkNhdUpUaXFwaHRyK3UwcU44N0RjTTNYUktsMEdXdU9yMVVGS2ZyUm1UbEdVSEd6cnpub0tGc0JkSXlEQmZ6cGdKeGM3WmN0ZmJrZEV0OEQ5Q1BtcVB0YTNNbXNEVmhyZEw1aTlxOVJHY3VVZ2RkOUp3VzhzWkJTZ0dLeXhTa004UWFFZlc3WkRqZ05qWnY3cEx4L25EMFFRYmZrTVV1OG1WazNFMGdEM1BRREFWT0tvVnh6K21HQ09sUVZFQWhBSkVDNEk0Q2thRmNWMHJRWU9MaDhoOWJyeHRqeUtaK3JPL2N3NUJKVTdwS216SnNiV2VzdEduWGQwbkZ0R2QzemZmS2pQM0hHdUlTaVNPWWljbG9IS0c1M3BtcitBR1lCbkJtemkwelp1V0N0SE0zcjVBVmY4SFFVODVsS3BzaUVBK2drRWo3SU1RbHhHZ3lRR2Y0YkhNbW5Fdy9qQXRUcGlYRlMyUVRGeWRwZUhzSktHc3p1NnJPb2xiZU4ycmdhaDd2QlY2WEdBc000ZG9pdHh3Q3A2NHhiT0pLNVRiZ0xTb2J1TllyY3F3UzczSDVEalZiQzNGOHRJaGV5M0ZNTDVwOUtoTUF0cnZIWTNiRmQrVzNadGk5cjRFZEZBYlRqWm1mV0VRaWk3aVBiMS9TelhZaHBDOGEyemQ0M2w3cFBSbHZ2MFFPVlk0bVIxTEpIaFYySUt3VWdFNktFWGlvZDluUnVRdEtDVXdMVTFMK3BsUGNleDUveFJiY1BBSE9POFJkL1VwN0crZXN0Wi9mTk5pV1JXYndlVHZBdlFCZnVIZHJKTFB4ZWQ5ZzV4elBLelJXc2dMY3BHQ2Z3Z2xUWjRoWklTTjNRMG52UHM1UTdDbk9PRllXYXlza1FBR25SYU9ReEFBNlBBcVNVeCt2eU9JZ253SXdkWVpZak13RlFwMHY1MlNJeFRpcEZBZkFuSWJMZkY5Q1hFWXBDVFJTcGlsQVozcTBtR1BxbW0rSmU3ZWQ0YUpLVnpjOVg0V08vSkZrcmZzUW94Z0ZsT1dNWXkyQnBLWUFuU0VwM29Fd0hjcFVidVExU3VhTXlKNGxHYXQwZ1pnaTBMUURMOGRvWjNxV0sxM3ZHQnBPQyttNTBwRFU2SW5IZENtUHdOT0xvTGlWcWNSWFBBVWVkZXpwemhNN0krVVBjTE1EL21HZXNzN2NwSDlLNkt2L0ZTQmNGbHhWQnpjTG9OaEhpcnVKR0xtQkliNnAyN09RSWxKQW5oNFZLWm1BUWwwdlRRZWVWYkRFaGY5blRmbVdYbS9zQmJBTEpmVDJkLzlsSno5L3cvTjdKN2dVdTdNWWdXeG1LWGYreGZYSmhSeFRTQ3AwQlZ3bXpHOTM5WlNyZllPeWhEVFZKcnpVM0tYTWI1OUlBMEJuQng1MXJCNUlybVZ5VHZONXNtcDBGb0tKMG5IYmtLZjAzZytVNGlNcnI0ZDRuRlVveUVqWXVwaUZ3SnoxMlViWEw4TldBaUVjdEFXZ2MzS1hnNm92QmFoNVYxL2tHeEZ0bnlkZDZiV1dZbldsZnlrN0poNUpXcFZRbVJhTm9oUGdFU2UzUG1WbWREUmJwbURGZEtBb1EwVlFTRzlQeXVMZ0dtS05TT0ZsWEZKazFjR1ZrcDdVOS9FcWVuS0wrNmQ0VDNSU2pZa3NXVmVDWXNpcGt6MVJHaS9oc2wydzlWOWtaWHBiMTE4bTF3V0RGSms0RUZZenJteUYvQWJvR1Qvd294M1FzNllENUpOVTZKSGpLeEhPTHd5aDRvblc2ZjdxSHdCWVVyVUw2RzJyVVE4NUtYd0RtUHRTNEwxZHBjUmZUWmt2bWJycXhXQTd1U0lCL01RUG16eklORVViViticWtJTGp5SFEzUE1yK3J1VFl1Nis4UEo0SUh6KzNvRTYwZ1B4M2hwY1lScndNOEkxYTRCU1A4Y2lUN0tNbkFrTkFzNzFvcU1qME1YUEdMUWt5WElmUUVDZ0xRRWVQaWlHUUVvQnVQbnIwSmI1SjlENVJWOVBpNlE2T0tST2pyR0lGQVVJaXBTZkRFRWJ5QWlXTGZCRkx3NzFtMUgydTlPQnhLRjBwSWdIUVhvanlNRGlwZktTREtLMEluMThHYVpjQkdGNmQwZ3Q0TFpFQVYzeXA2eW1maTQ4TmRQS0dPWWEwUDRyZWdGelIyTTh1NDNyRmw2bjRBamdWNlZrZ2p6dzA0bStBV3ltRitxdVJNbys2aWZQRXoyMkx6NTQrTGtiM2w3T0RndW5wcEd3VlV2VEt2QWlZS0IrQmw0YjNBdmtJN0hYSGZVa2szVUk4bi9CS0ZGaWFSTTRMQzFDczhZcVg0QWNvTzZBN2N3R2FRdSs0cEw5amluUEUwOFFSRGdEZjRnTUFLMkV4RDV0R1cxeTVSanBnTENaVXVyOFkxaXJUbzdKb05CV2dsZWVLY1JKNit3ZWZJWG5vNEc1WHVGdGRLYjl6UG4rRGNyNkgrQTU2alE5c3ZEQnRCRG4rTVo5SVhid09GTVZDQ3A2eStSaEw1VW5zSTdkaDhuemE4MUpIOXZna2dQdDJQaDNPZkRxc0RsenNHQzJ3bGthL3JtWUQ1MmNmbjNyU0M4REtFNC9PMUNpazU3VVNGU0tnd0xFejRNdjBTdWt5WVFLTXlGSURJOHFQTi9OT3BTajlWVmNPRU1ERHA0NUxWeXlINnlTenhoS2dIM3hjUVZ0TExMZWk3ZHY1eW1WUjZVdUtlTmJWRk9EbVVKUFNkQVloa0dwRFNnZU1Pbk9QN1hmSzc0VWpxa1U5VWs5UnozckNJRnN5QVZydVU4enUzOVpIVkJySElnWG9YNm9vV2dDbmZmUVN4THBtNUtCQ1lnVHVRNzJjRWp0UUo1NVYvQkZpOUNobXFBam9rT1I2UXNsV1BsZU1lOHI1S0k3b3ZEOUlvQlFCaFFCSTNvU2tVWmFuT0phQVFKNENFamp6eE9IRzhDcTk4MTVVbmZ3QXZnUEh1NldlakZKMlJxSFBCZXVQUEh5dTc1WGJwMXdpUjVNanFUWThLdXhBV0NrQUlnVVU3Y3k5WG9rRXgzVFhRRkEwblhIOVh3VG4zUmx2YWg5L2ZkVjE4VldhKzF4Mis3UHF4ZytRMmo4Q3lEOU5nSGVDNjR0TS9rV0VyZkpWYjg0NzNwSlBFeTJ6QThqZFNyZ29NU1hqSTB1UjRUMk9vMXFJbkh4WFZJQlBTd09jS3N0TE9Fa3NjUWxwMm1VSzBaa08vTVJWeG5oem5sKzVnb0VuZWQ2MDNYUGRTVHBmR3B0dGhGQWhZVEFpaFF2ajAzRFpmVGgxRFgzS21IbGJBMktVZThXUTkyZ3hMdzZtSDg5SXRQeVZ2dkFCSXo5akxQL081SWJoTDl1a0p1NVk0N2hxKzAzOGxSZzE3a09NWWlTUTNwblphYlZpU2grbEozQXJpbGxGV0RJbGRrOHhBaTUyS3drRVdNNzF3Z1NlTHJHbjMrdVZVbVRIYWJlOXFWNGNwQlJ3Z1RzZkJTN3UyTk5MdExpVnFjUlhQQVVlZGV6cHpoTTdJK1VQY0xNRDVTVVN5czdjcEg5SzZCdjlCQUM5NHZwNHZyd3I4Ulh2ZTFFMFplcktncStWZkZrS3VXc2NtOVVTRnowMUYxbG04QmVEZUlYY2xuelRmdXIwaXRvQlV4ZXZuNmZmZUo1Q2RIZ3k4anQxVUE1eGZuOG5jUHU1QUFXSU9CaFoyVVBCTVNYRk05N1BlMmZTWjd2R3lOencyRkpXT1dwT0pWdys3Q0VENms5UFQzYzgwaDQvd0prbGxGSGNPTzBqOWVMalF0di9FcWdFQU9wZmVqS2NRZ0RnTXVaeWxPWTRCZWtDNHM3Y0dNb0JXY0JxbFNsdVZSaUVrUEJjWDlJNXhkanJrcEhnQ2tCV3FsOHAzOFJmVkVjdHJQYmdkS0d2TzZQTUsvM1JYRmtFa2FzZTRuVEZVUTBubjdGVVJPUEJWdVVJYmcrdWNieUpiaWM5aTR6emptbldHUlU1aHB4MHJLd0NqaHFTT1k1dDdUSm5UQi8yWlNyR1MzczYrYzdjNjB2Vys5SmhjcDk0TDhoY1hYblJVWEVyMDFETTR5WTBKZld4cEpScFZjOTV5clltWitUSDQ5TWR3QjMxWnJmdm8wOXIzT3BRblhmMStBQkF4SkdCSE1mRnAyNG1RREJ1YzlRVGtIRTh4WnNNQWgweUtlRExsL0ZEQ2ZxckNoUExGR1FwVFFGSUtRVlVXcUNFeW5USy9FNS9XQTZ6eHRqZUNydW5zRURwMzZleit2blJIYWg0d2h5OWZBT0x3RDJMYkU0UG01TlhCLzdvYlAzaEV0MzRJMzVnT2pnbzFUbnRNakVRQUt2SjRiOWV1bm1UdWgvSG40bUVGZExwd0RIZUEwU1RZMlF6WkNqbU1wM0pmb29lTFFiREZKcHdKT21NWTY0UlRQckhHcm5Tem84M0hSZXJqTVJ3Q2UvNFphZjRqeDVnMDJLYW5nUGd3YzhYUWhUY2pEVGwvZ0JQTUJhTFJEWE01alZGaUFmWFV1cDIyWlRIWXpTR0g2bHdzUjVJckZ4V3hJaHY5bUxFd1JBQWhNU3hIM21RSk5aNEpMdi90QnA1RXNpbkE1d0Q5dE5DY1hZT1IvWXMvdGdZb2xjOFdsTHVCVGp2NW4xaVdUaWNpLzZxSC9Wd0xYalpzRHdDbExwYjdIWnlUS3drZXBrL2xkTTJVWU9weEI3aS9ZMlZKZkErU1hySXhZVXZVeTJvbXpqaldDa0UyUFlTeGJRejNsTEJSWXpva1hIU2NXbUFJWmFRbGFhRmNSOGxDbERNcThkSnVva2hLTk5qSVpHZWNvKzlGcFZhTDBNWXliejBvVUE5Q0hpaVNBQmhDSElUdGhPdExGMnIwSmZlTUpXSlFOSE1MRHpHUVZ0cVBGM2xLTU9vS01XalI0VW5ZSlN6YVJLemljZk5RZWtDVEhIekdRSTNGZzJHQWpJVU9LTkNFakJLYzR3dWp2UjRjWTlYVkNaS0RERC9ld2lqdEVLMG1yM0p1TzRQYTZYdDByd0pxUVFBRGpUQWRMN2dnc0VVK052OUJPQk4zVitKZlNWWG11ZDhjU3ZUOU1FMlllZGlzM1FSY1N2SGRQS2FsdXJ1NmJqSU1MMlBGbjBYSHhsazZjUVhoeWZUN29tc25jUzZmZWtMNHdJcnBmT1NpNTE4MHhFMjUzZEdiN0s1RXJQL04zZDFaZGQ0L0Y0M25ueEorNGh0MUZheEJVakVOSmNJOHExOEM1V2tzdWROSGs2VExFRFRvWmxuTUhqSDAwRjZyRERiNDZteWV3MEw0WUlSNk8zNTVVUXNwa3l6amJ5UjJlbVMrRmhpM3ZRWWpORThLN25tVStiTVErejlPR1k2R0d5L2VBRTNQNUlTM0VjbEF6Z3FqNlJuSGZHZWRYYzJsYjZuaUY0QWdqWFowQlcvaVQ0NDZkWFBUSnd1SEtzbHlRVFVTV0hLbExJaktZZUg0Q01tSmJkTXJ4cTRrWG1JMkpsdWVJdzZlVFJ4d1pXbk5CMG9SU0V4RGhnOWFvNGtjZ3RmcGwzZzVWN2k3bFpTSkJDUW9ETUszWUNlMVptYmRJYXVVc2hmUmU5elh4YjlJWGkrQS80cS9MMS9BTURsNHUxcWtWZDhGMGdwQUkxanBRaDRWRzl6bkpSU1FORW5lb21WZmdWdWxEMEVCajRQdDZ1TEo3UDEwcXRzNFgxU3hOTlFXN0tySDgyUW0yK2FMdCsyd2dVYWxvaVI2SkgzMXhmaGZMeTlIMlVBOEd1dGNaN2M0SW54RmlYKzA4Zng1bnY3b0RvcjA0M2ozWUxMdWFPMGtKejZXQndWaW83bjk5MkxCdE1iVzRxTDRENUZSYmtoRW9NSFZodWFlZ2tuQSsrZkdNQW8zYk9JQzBNeHlPSlpITzZ5ZUJMbi90QUhNM1RsbmFqUXNZMUNjcXFkd2RUYjA5U3pIQ3RSelNRejNoQzcxUlRFaHROQmpCc0tTeVptZ0l0TDlkNnRtanllSDIyZms2elQ5WjN4am5yME9kT1ZjTzZrTThUT2VETUZTOWJCc1JEVEpTNXVtaFlCcDMxME42VjBXUWtoYTJmaUd0cVpOZTJoaDR4azNnL0k1OGROb3JxbFc1bUNkT2JHNTloTTBjdXFnMk82U1BNNTdEQ2JsS2V5QnUvemljMXdXK0NNLzNqOFdqdWcyMi85UFkydlZmQ3hyeTZnRHVnaC9xV2xsQjBvVjZGaVRoNlhPUUJHL3dMRkw1TEFEb29oYk1HSTdFQ2RGS1g0ekI2dnVDSUo1T2I4a1lUZzZOUEZYWGJQRkllajJOdWJiMHgzN21LR1plUHR6L092QzVzL2s4NGx4TGNRUCtzcjNxVG1Ud05naUVQUFpGL2trYVNBV1M0VzFxa1VRTWh4VVRKVUJKb3FLc2JkbkJRUGtvY3pqbWM4RmdHTWtRZHhIeEYxVXVKQ1lpcUdZUGpPaDR5Znk3RkVUNWVQaCtqampLY1RzNmJTUlNyclBrVWxpb040K1pQaDlHcnNtdnduczBFcnBXaktOR1IrOTN5SjVmdVZRZStUREVhdlhFaE5IVkRmbVhzZVVhUm9QQUk2ZUtnek5KRkdVekkrTGJsZS9TaVRKeE9sY1FETTZmM29EbGRLTDBlTm1HT0t5QUk4U3o1cW9JZ3h2V0xjcDJDNmFaVERsWXdDNlFrOHl4bVhsY1F5OWF6dWhtalhpN2tDSC9meHJtNTZPQllxdVp6K0dEOXJCL0RHd044YkFIK1BQd0hBbGNFdUhYQUx2SHRlUU03MGJaS0RRbUk2b0dibmc5c1p2SUtOby9OZ2J2Uk1LMWxNOFZWMHBucU8rdkZ3THpiaGdLcXUwRU9ITGhNajRKNWxSVDZkN3dnbzEzNWVnZTMxV0NVK0MzeVcrNVdQVnZYeGhuMFBIY09aVXg5dnltMi9raFRKcWMyUnY2R08rUUQ0N0RXdmY1emxValJra3hRZ2lSRmlrUUk5QlNFWFU2a1JJWTl5aXZGS0lKN1ZQUmNocG5NVlVsSkRUelJONE0wejY4aTdKdzJIejF3K3B0NUpzWkxueUlydjljZW1lVmFjaXJtVDZ0bVhVRTJ5SWtqeUJCaVpJckpNSlN0QWhTWnZmK200N1NjMXczbEdyNTRYMC9EcG83YjZhY0l6M2RGMmtYbjkwMm1SdTNQanR4VmJkUEJpQ09ZK2pUczV2Q1c0cVN0TkIzSlFTUDJTOFZHaFV1c3FWK1lPaEpHbFJBR1A0aklrZnpWUzdORTlmV3lPeko4REtZc2hwbUp1UUdrcGs3Wm0zSjlSdVhtdVpBSkYxcWRpQUhRb1hVQWhnQ1FQVyswYVlxVUx1SVprSDExVGZNcTAyR29xNEZaZXlQa2YrT003Z052eWNjKy94dzhBV0MxNjFVdFVYL3g5dE91TG9kSWRNS3NVZFFGRFlxZ3ZVNVVXN3dEUjdpK2ZFa1hpQlRQdU8yNTFMVjd2SjFnSVl4ZVRkTU1iR1VKRkNRYUhWbm8xQlcrSmZOY1pIUFVYWUhzMW5jcS8zQ1BYNkdOWnVJZUFENnUyclZ2TDcyUm5scHFJcFNxNzVqcVBBb2dKQzZ5RUdjMVFWWUtFRWwwSjlFVDUwOXhIaXNVb2w0WjlwRUI4Y1pZYkFON3EwNWFhWktMSi9BZ0F3R3RWZ0ttaFN1UjhuQy92RU5XaEFSUHErZDVkREU4dGVRa0lxRkU2Z1VpVktKNlNRY21EcFlFOVZFaE41NHBtOHY0b21hekV5Tjhaa0p4S3YvdXRXY2xhZ1crRlNnTmx5aTdtditoZHowZkpCTlN2TWFHMzZUQnpja2JyczNIeXc3Vk1oMUZlV3U0MjFJZWkxYWNZY3VxajIwb3MwQXNwSkhCMFVLS2kxUHVvVUFjdWMwemx6c1N6R0R4REJCcDd5Sm5kWnptQVorakdoeUhLK3FoRWx3RVgyOEs0ajBLZUl1ekt4R3NUV0pFalFyemdsT2pSVXNJOWp6THBIMFpmR2E3YlpqSDhNZjJVSFRqZWs3L1REd0JhY0Z5eStZSktwa3dsNjBES0RpQVcyUk92b205TnVkSGZoRW8vTjhvZUFvUDA0M1k5RkdmNjFrSlAzTUw3cElqUC9lRFBPRWFabVhrTFJuRGN6MmZLWCt3UmkrQTZmQ3hib05DTHBmckpGU2JROUgzYlU4NGRUZUlNdG1jZmxWZDZ5Q01ycjBOcEJHU3JicnNZR3VyN3lIUUpOQzJNSjNwSXRVUVdKaGU3emxldTN0L3JvekUrdjliNXlsclJDSXNTWU9RQ1NTb1V1anpFT01qdjljY3J0M0toNWZhVDlIRVl6UWRsVFNJZVFXTFVWak5VU0U0WktxTW5UaGsvSUEyaFd6bEdlT3BQbjJVejI4MzN1dWVuZ0F4MzhTZk11dk5pY0o1ekQxRm1rYTFtRDNYR2szcjBPZE9WeDk1Y1J1eU1OMU93WkIwY0N6SGRTeWpSblVWMnBUT2xoSWNjeTVta1p5VVRUODhTMHJTSGpveklsamplV3pzUDhaT0RLY2ZFUXBZcHpKMGhkdWErZXRFclVlQStYVkh6T2V3d1pVZFBrTWRudFJsdUMxVEZIK0JyN0FEdXZicjkvakx2Nkh4SkcrWHlueFBHelcrVzM2S1RmUHJJWkZrSUlGKzRBMXdSN0pLaEtzaW8rbnZZQ2k2NFhIcmszZGdxbXJhMUNFMVVzVXpGQzdqQXNRUUN4K2lKckpzaGh3U0tialA5ZHNjbTNyVmI2SHB5YW1tb2IwS3BxSnQ1WGVTZGtYekgrbFdyK0lVRHJCMHNRTEkzTmFNc0xCK1lYOElCNWxOM2hiRGszS3cxUW9NVFVjaVl4b2N2eU00dDlYTUhLZjZTNXZpUElxZWREOVMzck0yL1JNdlUzWWlMb0V5aENZYi93ZTI0U2NYVFdSZjJOczNOOE9aM3F3eTM4dGd6eU1hYjdoYTlJdVFzMEpVOUpDWkJadUROZnZibEs0by9RNGwvNXIwZnlnWHRtRk9NOHlLSk5BZ0tRekkxK1hudCtub29pWEZxNTIwWklSN09PSjd4TnozeXlqeGVuMGZ5VGVZSE1UZkhBNTFCOUVneXE0ZTQzKzVweXZPRlo0S2U5NElwRFpUcE1ibHJPbk5NSkhrajdxSE91UE14U3RKSFR3SDIwTzRRVjZpTDkyaEV4QlNnS2ROOVNveHgzbW05d3VhcHdFclBkc2FVcmUzakZsTCtZN0NieFcxL3ZxTXJqZkhDaTNqMzd1VEcvTUZYazN4WGlPUTBPTm1zdmZVU1lYVzY2ck9FenBmQWFKdDNKL2NSUm4ydDRRaElqdEEweG5UajV4UzJRNWxBV1B4ZDFtbGQ2dk03QlA2NndQWit3YXNMZnRDSjExVDhjQ2hmVFBIcWt5ODUrZmVQc2ZqeG5qbmZPMkRHcXdCR3ZFUWNhTUZiR1o3bkM3MmJiRm43YTVpY0JTaSsyZi9peGtTUTh5cVcwd1phVnV6S3BwaU5xWE5FZ1pIb0RGUEVVT0ErRElsUlhmRmk2SStSelB5ejFKSHF0a3hVR3hHT0E0M2gzY080cXV0S0loNmRwM0lPdGtNekZBS3ZGVldtdkd6UENrMVhYRS9VSWtRdTM3a0ZHY1JzWU1xWDMyQldwZTF0alR6VlNJSkltdmViS0loc2pzR25GUlRCeE51OFVZRVB3Y3ZDZ0pPNEdOSXczcEFoblVkcWc5aEJtYzdnZk5UNW1vUWVJM0Y2RDV5eDRBUUdUaDMxWlN4L1gzOUcwWDZzSUgzV0RuQ0trZHN5TmlwMzd3dC9ZaE5wZVpIbjJVUStHMWdrenlQK093TXBrS0dBWHo4aW8vMXBDRksySWNnbVVoQTRoWG4rdm95LzdrOURIek5wWE04cUJ4QnU0NGlGWndpUHdIaDI0KzZIVytDNEh2alJJdTZIY1lXc3A0WmpPcVJmdUVWajZVbXNjZ1QwMlVQajhrUW8vcE1HSXgyUDhNSFZGVzZobjREVHdUR1NSZkYzcHVORVpucGtac09TNlF5MjlGaitJTEhBY2JJbVkycURveVV3cklpUFZjQXNUZG55dEswWURuYXJHRXcrZUlyemNTYU94eFYvRkYrVFdMTWZ2WTNLWkR1Vm5NdnNWbDBKelNTamR1SzR1bWJ1QUdJSU5LWHNhaXBlZ0ZjQ3p3NUk4YlAwYUVhOGdBUUNKYVNwZ0pSSEFKSUg5VE5yckgxT1F5SjhBdmhQTXVOWVdkTGtkVGl1bDdtZDJNeWxsTE5TMGlvR01DVHhqR091anlISUoyQnE0Z29tU1A1RkNkcXlCTzl0d3lRS3NEZGRCbEFKajdaSDR0d1R1bTJlVUNnS3RLNW5JSFNOR3pBS2hTU0N2STlCaEZuVXgxb1lIWHQrNVJ6NVkwZWlBSDBBNXBHMWNsSTdYUDNNU3RtRENpSEpjZnlYSGVOZFFMNjRqTTZqblA4ZGZkZno1c00yeVB2WXpGT1kvdG9vUFRWbzRtTXNNMjZyMjlIV1BxTDA4WDYydERkTzVtOGJSbHJlMU1jdTRmMmJMNSt1WUZqOVZDVDZMM3RDOFcrLy9hYi9DQURBdi83MXIvanZBRUN1VjUxSWpTdEVMd3l4YVhuRnpMTzZ6dnVwOU9UVUg5TXd6dndEaUpxWjZLTklnZXJBS3laejZ4bExOL1dRc3pId0JXK09RUjV0blIrWjl1RE9qaWs1TW1ISXM1cm5SbGl1TDdPZ2hDWjhWc3VSM1JPRFhZZldGOVJSWE1pWXRoTDBLOG9nTjN1cTdrWXNJRFovUDJFSDJ3dVByaXhNR3F1bnVMTmpxem1hSlFUVXhKMG4wWmlLbjJMeElJZ2RUTlhkSTdMMjFkNkozeE43b3p0WDhUUUphdHpncm40Q3dIWjFDaVlZRzJYYnZqR1REekpUdGxWUGswVVc1bW5yeXlDUW1iQVp0VFJlZVBpVVRObFdRWWxYUUR5cnNLeWU0SW9LWkRlcHloWW1qNktZWXhhWGJGcXRPd2ErSTVPWDhicnBReFV5Q05NRUk1NVVVWFQwVGhaMnl5UlN4cUVvT1B0SHZUTmNIbWVIZ3c2Yk5CZ1ZpM3BPK1NUWFBrejZ5ZU5vNzRuMGc1clk3YkdEdyttQ1FYUjFsWnFOd2NRUzEwYlRkT281ZXpFZXhVZHlGcTJHRWd0Y0taVkpwZlFDRWx5Qm9pelRZOTJ1a1RsREx3WFUyeTZYVTJNUldlK2dsc2hubkV0QzBNZ2hlRzNQaThIOUtsWURBbEowcG9TNkFCMnhLVFJkb2pHTmQzT0k4MG1iMDFEZExXTkYrZkpvbjF2VURNRlNsb0JOaTZaTUljeGUyUGs2bGY2TVU2MjV6Q0RrNDJUd3FWYTBLek1lTWlxVlFxVkk4YlFTTDBDZnY4cUlXekhlN3VNQXdLSDkrZVIvQXdCZnVIOWtVK1RRQVczRkg2dDRWTGdENVNva3BsUTVDanJwRERCTWJ2YUJncUk1Wm5XeTU0cUJJWENwbTlGRlN1d3lrbUkwQlJESmJlSG92R00yZ0JGWk1sRmlNcndWMVN2RXhUSVVvTzJ4RTVwVDZhT0t1cUNRTTRSYkkvdEJ6K3hjNTI3d3FVejhzV3Y3Mk1EM1QrcEVPR0RiUENuTzgvN29QS0lRbDlPbkZQcHc2bVBabHFQZU5TNXdIK2VsWHdKN1k2ZE8vQmFQdGlGR3FJQytRSmxMS2NiVCticEREWHhObkdXem5Nd1JoNTRhVTNyV0tES2lzM1U2SU1ibTJRQ2xZbzVUa3E0SDFnNG9TaUNyMHB0a0VvaDVBV2IvSnhtZmpLZkltN2o0YUtJeXkzTzJPcGd4eFEzQnJwQ2lZZG1kaEhPY01uVTBvNE1vMHlMcjBSdEdJUUc0Q1F1SUpPT2pRa2NBVWdleW1BaW1BeWVWOGdUUXlzZVNkYXhGalVLWVhqbDAzck9Xejd5ckYzMlpxaEFUVjdyTnovNVQwQTFuNVB6byt1Nk1uQ0RqN1gxY2J6bXU2L25zdUxQZHN6Tjd4bmwyekRxU3lsYzBRVzFiVWVnZEsxMmdSTXYwS2gweUtUdWd1WGpWK3R1QVdQdzhQdmtEZ1BZSS9ub1JFdmtRS05jQmNvdGhMSUdPK1FSMnNaUWlWVHFabUNra1FFMlozaWl2OUVjZXR1UXhlbnVGbEV3YUNHNUlsOUdLNHNKM3Nuc3VKbC96TUlWSlNTVEpsbFNpYUR3cVBYdFRoOHd0VVUwN1VQcE5TSFdwa1ZLNVI1Qm5KVmZLNzZIbXZTaStUNEtMaXZjbEg0OFcvd0R5YWpQQlkvVzhUblE5Z0pHK0FFNDFoakIzcnppVUxOOWdoVlJGakd6VnlSWGp1VzZPbFNDRkkxdGlWRmhneTNyYlpEMnRScm1SUHZoNFNZOERHelBXRVMzbHdlcjhvVEREV2lBejh2ZjlFczd6d2tTTU10a3hpa3F5QWVsSEU3c0RwY2RRVDl4ODN6dVI3WHNOUmw1czVWenkwYk9UbllGSEljdTBDNXlSV0tCSFBlUlJZSjlLZGdYSVg0MjA4bWphbjBzb3hDeWZDcXNOYWU3TmxlamdtRUtCKzg4UzgzU2FSWkZaWk1BaUtOUHB2SW1sSWRDMGlKbmowYU5BWkhkVGlGWjk5SlJTaU9JdWtDekJ1Si9JV2RFajA5MGc2eW1EekxPaHFBQ2R5MVRsUE9vYVlRRlhsblJOaTdpazNFZWZpRlhvTHdTd2FoN29tYjlleGVtbmZRQ0FIVjhQT25qSE5zbkVjMFVLTUtwcEIwcFhDSXl3QXlyMWtrWVp4cXRGSVZkUjVoNFpHYXFXbkpubEFqZWsyMEV6bjd4cXJHZzRWYm4wV2FlR1VZeWxibWNnY0JQWHE3UklwRXVzRWdUWndDb244cUdKYksrQWVLOHJVc0NqQmM4ZERmcUp2cVRmVDkzOFhua2YvU3lmdzZ2bGZlRTlxdjBCUU1SUElobjJDVjZDQXBnRmN1U21QNmN4NXBUcEZJQllVZnVvTHdjSk1uVU1IaVVGQms3eUhGbDZNNWdpRldLSzJzaGNjakdTWC9PM0lLeWd1S1ZmckJzODl6UWZvMU1wclNLVVVNV24weTM2TzViRzN4WU5RU1NuNFZWck05Zi9TZEdtcFlPYkRHYWVPQTl0bVhaVkZQNzFsRmZQYTkzN0ZYUGhtME1uQjdQMzAyVndlVWhLOWdTb09ZazdvNUNBTjlOSk1qNWU2Wi93NmtmaVh0RTF4S2taZDRiU2lRa0NOcmVSVldTY252VERvZmtjbkdWU2ZQcTBNR1VKWlRyRjhVelVvWDRFRkFKd0I4ZlNLRXRBb1dPNlJ5VWdLWWNDTkRYOXRnVGp3MG42R3hDNlMrVjJwNUxKVVo4MjU0cWV1TXN1L2IwRVUvYkVWY2lqZjFHTS9jR0JlemdQWXZ4RzBLZDlBTUMrMFBRSTNyMXI4cVNEcGdLRlZ5RUpkakRpSXFWM2NJeUtGRkNLTTQ0aHdCUWpObDFZVXdBY0ZBQVVqUmpYQkRuZnNyaXpORFRCVkF6bHBjcUtwcktVWmdta2dGY1ZnY3dZUTJvV3daUTFOOVJEWWdSTXZxNGxrQkk4QWQxRVdSNHErSW1tcFB4RHB0Z1pYSnBZckxaSWdDUkdYU2Y2MXdMU2RDQXJoT0NLS1E0NjNJeVU1Uzl2UkRNNjVFK21USTh5YWpSS0E4QnVNR3BGaW9JSlFUNmRuU3dNTlJSTGRnUXFJWUN5MlFEcjExcHBFc2JaQWp1TnUwRTBFSzNoL3lNUkUzV2xUc1I0TTBreTBlbUthVUtINkhiK096bVpsd1FwZzQvZVB1RTQ5djlCMzZObkljdVVGVHRwRE03Q09EdFhZdkRTWHdIeExxYWhNNUpkQWZKWEk2MDhHdWQzWHVRQ3JLdXBBMkYxZGNVa3Y4enA2YzVNOUhSNWR0a01iWVlsbDFsVHFkbllmSWw3WFlXVVU1Z3lMU1dLWVptNjJFT09WWmZBUThRblFUelRTalNuM0tMelJra3ZJQlBtM2plZ3JBN1VJVU5kVUJoTnZhSk1BQ0NJcDFhN09NWGNKQjVEU25RZ3JOS2RVZWd2QlBDODFqOEFRTnRhMUdkK0FLRHYxYXZDdzgxQ1ozVG9nQTdpajRZZUZlNUF1UXBkbVJkQmtWMUZJZk45S0RKTWl3RFRUcElweWlJckdreTlMbTN6clF0Z0hFWHZwQkpWUW00QzBrdE1ScVBuZ25SWmhtTGwrZ3pUczhDb2xvQ1RTbkZBcFk4ZXZVL3ZWWndwUHYrMEtVOFd6aG5Qb3dOdVJlSHpuV0Y4RngrOHRoRUFZakhrRmFWUG1mWjlMb0l5aGQ0WlloK0w0UXExOTZjSW9kY2xzUGRETk5GQ1dMUTR6dzJKSmVPZ21OaEg4cm12Mnd0emxzWlFuNmZaei9ZTi9tRHlBME5hTVFVVnhsYXJWaXhuUDNabXIyNUtMb1FFUFNhejN0RTdMOXNwd3hJeUd3OHJ3d29jWVczMktQb0VVdDNLNjh6c3ZYY04wby9rbGUyVm1IeVAzak05UzNvQmRkakZDaDJCbHNDb0REdndkTTk2aWIwbDJYcVdTQUZGblNGMmhyTE9uelh6QmJMb3l4U2U1M1QxOUVyUURTMzFBRjNmUzQ5KzVyMGlCYytmYVZHdWUzYm0wRmFqamxsSFVxbUtKcWh0SzNwc1VpWTNVVGtJbEN6eEhWQXAzaFAvNmpoZkxQN0Fyd0RoTHdMOSt1dXZHRC81QThCWDJpQ2NETDJ1cUVTY29mblVCWG5VU056QnZkNmpqcnNQbVpjYUNLRDBWWFFHZ3FPUGszREIwOFdaMHBLSCtCc1ZZRXJwWXlGUGxHY2h5NVErVDh4bGlGOVBHTDlodjZoTEZPWDRSOStqUnNybXZXS1pPSitZVGZaV0w4dDg5VUJyTVNxS0JCQys1eVh6RkpHZUt3d2dEQ1hmWVRGRmZFcldzRVV6Z1ZsTElWUTJXWmtVbENqSUU3T2V4SXgyamNybDk3alg3QjNveGh3aHR1SnRkTDFIdVNLTWVsNkhTUjVrbEM3QWFFeHgwdGQrQWNVa3N2TVYzUXdqQTlOMEdQOUJBR0JRN0RmSGdXWE9GRTQxUnRiaFdFMTRrTGFkb1lmYWcyQzZEcDg5OFZqUlhaL2lpK2FmcGt2WEd6bzZkN0l6OER5U3E5YmNHakVFSmF0TVpYdkZIMDJVNWFCZ0pvcWtmNjhpR2NFcndmbjZPWmtzNVN2UHlINmlLVlUwL1VndVRWNDZ2QlNvbVNlZ3VKWHAwZUZHMDBQT09ENDYzNUNlNi9ncTVZbW01QjVUam1SSnhQU0o3SWxHem04U0srczdCRnhJL1BIb1AvN2dXMytNK0V1Z1AvL25mLzVIeHY3Z0h3akNIdUpwdXA2cFdFcSt5WTVYb0ZnVzMxS3VGengvSmVDeXlZd3hYN3JrNXVLT1BkR3RnSy9Fdkp0amxLQ0E0aGxMbTRyNXVISlZTQ0V4UnlEUzlTQjVmTXFsMDUyRHlUT0VWZk1MQzRnM0RYT2FJTDV6QllDREg1SE9QbXgwanRTVWs2WEVFYVdkTmx6cXlVREdZN3FPN1JXZHB3RHZZL0l4M01ZWEJFd2h5SkdoK2JZTTRid0l0ZXBZSUMvTE9TYXhmTXlLM3FNWnlWQXphbVRwUHZJTStua0Vsb3hnK000SFJhM0U2Q2ZyQkU0TkJoeXhEenhtbExNRC8rWEx6OUJJRDUxd3p4V1R3SGM3YnBIY040UzRrOXBQRjg5by9lQ3QzY2dHeHJLSm8zVmNoUEZmRWNHMWh5cThDQU1rSHVWNHdyT0hDT1RlcjFPUUhyRkxhT0E4MnNuS2hpa2IremdaOWhJamp2UVpKWWpEblh6MEVRZlhoVDZ2OUpSeEhHSTg1TUYwUUdsa2NtS2lueUhBdzJodkxuYmNabGRlb25oL2p5VDgzNnJNRkNwT3k1em1vV0NpcFdmYWFWQVd4TktMUEdVRTF3Vms1RkFTdTc0SXluUnRyZ1d3QlcvMTczb3k2cWNMUmtIc2NEMDdzV3h2YlBZenVHNUZ4bm5oQWpSbDlhdXBlQUlmdFU5RlV3eTVjSXdFWFZ3OGQwRjhMczByYzF5aTgwTGxGS1hXcFV2c2JoMGpBYVR6WkRJM2RyV0Zvb1I0QU9HbTNOSVpUZkU1eFFRanNUT3FKYUNpUXh5cFczc3lpYXAyY1BORmxLbjQ2bzhOeWRmNTVNZWVTNE9zd05IRGRzeGJ4VVppVWhPREdScUZDQ1FXRUkvbENndElKb0FRRHpCT2Nzb1JnZ0tvbkUwZEN0M3ZHOVBwNmM0cTVHUVhlNkl3Yy9zb2dZRDM1bmdLdEt5eHJwTm1hSzlDOC80ekxmT2NzamY4L2cvQUw3LzhndmY5WlA3bmYvN241NTkveHB1RDl4eTBlRS9tZFE0OTMrZDhuM1VmN1IxOVBYMTNQaktkN0UzK0tjeTdHNXVKdUVUMWtoRDQ2bXUra01UdGErYStYdkY2RGwxb3UxVzhTMzNYMGEzZWFuUGxjT1NQWksvWVpXSVNjTU43M21Ba25ncWNyTHFwWUhoTXpjb04vdUo4WldRcGdZS0p2ZCt1Z1huZUI4bHBJVDNsSnBTeVVYR1VXN1B0b21KdkdnVW94MVNIREp3QmxySUFUQm1WUmc1VGljZllCWTVUcGoxQmVnWnpNS3VWd3ZCTVhHSWdrT0lkSzRXa05NNXZSbk1WSWtzSytDdi9XRmRjRS9VTC81RGc4T1dyVmJGcllIdHpMZW9SYXliK1BjT2NzaDlOQSt6SGNkVXU4WXdpN3Z1RHhLSTVNcDFVbGdBMVBnVnpRekxLVVZrQ3g2aVR3Q2FPUzlHbVJSaFRSbythUXBhcGNnK210N1pGMzIyTDRINzZNdjFld09nVGpkcTRGMHYyUG5BMFA1TDBaK2hHOExLTmtucy92WEVyaWQ1ZXh6YytieFdycnNCTDh5N3dYTWRkK2JLOUorbkZWcDhaQ0RUOTZLOEFvUlY1bFpMMzAyTWlGNlpRQi9KVVNBeEI0Y3NVbW1SQ3E1Q0FrNkhJUTlFT0VCYzUxUHZETWRwSk1NZzdidU1UOFUyNjJubTNUMCtrNTNQK1NnbWZZK2hJWGhYdDRtREdPNnJoVDAxWFpnUFlkcnpRKzlzcHg1Qm9Tc0JHMWxoc3l4UTZ2TThadjhXVTN4ZkhXUjdmWmpianlyRHMxTE1GckVxeUFIbkJiR0E2VTRZeGJQSzdQV1F3cFQ3QTlkTzJoOERJQ2tDSCtKNUNUZUU1ZFJJWTFyRW4yVThaWWFJUWNHcXhHZWNUUVlIcmxVSWZGNUNKY3ZGeE5PNWdQbm9pTUE0SUNOZ0RzVWhNeWRPSGVpbmRuSWxyakIrQThDTVd6dTY0VHJBamNVM0dsbys2cFRmUWFSNzFQWlNKREkwS29aaTlEU29mMUp0SU10U1RwRE93QTB5bDZTa1V1d1p5R09RSWVqdVl2bEV2SnBmbi9TTHZoWDQyTUdTNTRTdGxSbldDV0tRTGxKNG5ES293bWppVFpFVUxUcDBVTGtCVEpubzZzS0lDTGlpazlJWFhWT0RHUkJvSHZGQTlTN1dPUUtSTW1QdGtaSXFQSmF0NEZtV1p6azdXT1ozTWNpMkdSVkFNeTdTSWwrazhkMTN2bW82N1BwaXQvWFZWZVBWTURCMUE0RDNGbFN3YW10SGt2RHN4TUVjS3BtYXkrZGhEWXE3MXRTR2tLS3NEMWhPL2xkOTdLRXFsQUFoN3V2TVNFR2hhUEQwZHVNaU9qRks2dU90ZFEreU1yQjRDM3IwMXd1cjlId0NRckJlRGgrV0xUQTRDRXR3d0NnSEVTK1U4eEU5aWUvU29jQWZLVVFpTWNBZGRMdzFEbUFLVWpTb2FLWXRNL0VNSDZxL0doNTFFYjNtSFVKTUM2c2Y3VkxRQVRkVVBHT0FyOHd2OXVGc3AyZ0U4U1phUXBsMndHS0JZTEsraVBqSzZOUEVtUEE4Mzc4eld6MC81R1dDK3haUzQvOEVjaGpTV0V2RkJnaWJ6Y3BMQXl6bUdGYVlZUnlKUEcxYVppMUJJRlFWb29pbEJJVFVsd0JpeWVXV1VxS3cyTVJ0RFRFdWJ1OVRUUnlKUzBrcytXcHBLRU1paFRNVUQwSWtDK29BQ3p3RDVtMUZXN2dCTXEwSzZ6K3daUDVNRmpmK1B1MWlXanVjSGVGSXFRWUJ4MnNaUGJrV21ZYVJJZ0tpM3dTeVBraW1qQk1oRmlGUDVPSW5vY1VyRDNZZG5ySlM2bWI1Vm4xdlkvT1pXN1lIYzIwbXROWUlweXdGQldmb0krNlZSU0U1ZHNKME91R2xiT2xEMEpzUitabGRSU0dJbm5ZZkFOY0pKajFhZExMbHVleUVybTdCYWNqMnhqM1RXNkNISFJhQnBBVDJGak11Y0tmb3lSWmFMYVZLWU1pMHAzZEJOcnFJeWNZRUtDUlRaUGwyblEvb092Qm1sRjVMVE10S3FHMjdNYUdHa0tuUzBjbEpLZ1dPVXBEUWRsQ3pkQjY2VVYzd3BKRnZwQytPODhBMVFPc0JMbVFUSzZveENSNEQ3RzI5eFpSei9CZ0EzL0ovekh3R2dHWnhCaW9aUnZCaU01TGdyOG82WXJ4QXVFeVlZNDhvTU0ya2NpeFJnWFUwRmVoYnZZUmlwY1dVWEp4UGV2RVI3aXRJN2tKdENZbzdBU1dBZW52dVNlU0tHaVdRQ3hUbFBGTGt4Rm1YVll4N3ZQN2hKQzdoTTBlSDRxSTFwT0Y5WmtTdWZHMkR5U3ozU2l3T25WeU5MS3lxZ2xzajRkR2p5NG5tdWh3T2FkaDloQWJqeGNJYlllV0NSQU1RT0pPaWhuV0hTR3Bub0dzVWloTEx6SzU1dXhtQktadkg1empVYXphTTdINW9NOC94RjZqYWErZFRFWXh5dzkxRlRnajFFbTlFVVE5bGRPdGlsRGpLa3ArUHFidHY1NnA5dUlnR0VzUUorOFNNeGhQelBlR1ZIdFZ0bStaaDY3Y093VGNIcjc4dDQyeWlIVmZNTEhiQWxaMkpQa2llWkpTaUx0WlZwVUpVTWcrZEhHaDdrM3JPSHgwNDVsZmhLTCtHTjRDYkU5QzZZREg3RzludTVqbVpvVk9iVVNXRUh3bW9Zd0VsaGdxdHBhVml5RzE0YWdTc3gzZ3ZvRFpiYTh5eGhBVnE1SVVPdkJPTkhXNUx4cXVLYkVaVjJjeThoWHVuRzhQSU9vblJTcGhJb3R6UGRIKzR1T3dtMnVqY0M5MUVQT0FNTEo2d09nNVFxT3BKR1FPWmtKcytuMS9xNTR1UVBEaU9VR1pKWjFXMlo1Rk9HaElPL0Nkd2pzTXdGWENGUzRCZ2xLWTFBNFpWN0pYQ2VXRXdIY2dQbzBjNmt6Sk5XMXNiT3lUaGJjK3FQL0RjQStLVi8vRHRnL2xQZy8vdS8vNFBnbmY4R2dOYnEyQ3U5RmN1RW9FemhKcWJnWHNpVkxoWXZvRnhuaER0NGgxNG1ubHRJVEsrWW01QU1BVXE2aDRqZjUzTnYyNk9kVWZVT3Vsak1FWWpVNmw0eVhWRGF3UFJLb3lwWGdJbWU3cmdYdXFybFdlNTU1Q1ZRdEFBSnZCeEk4UVZvZFNtSlZ3bUJGVW91WDhQaU5wMTNhbENJNDVZZG93Q215UnhNNkV4UDlYQlBVdFkxTDAyNndCazNKT2FTTlI1SlJYbmYxTlJCVDd4bEVJelh2TmkwK0tzTWNVdzlIbU1QNDZHQjVPdUw1ZHgyeUVjbzdPeElwM0ZlU0pPaFA1aDRmNTlmcUtvdk1RQWtnOG56am93c3VrM0Z1Q2JNdi9KaEM5M2dWVm1KS0RoT0grYTZRMDhwemhDUUllaTVpTHFHQXBkUjRCb1p1b3dDWnp4UjZjb3RvSWhkTDArUlpIenE2Y1RGMzAyWUtCTk5sU2pHTlNKZDVvTE9rK2thTWZlQ1lsaW02a2R1aGVsNktWVlhnQ0ZQS1NFWGRCOHhSMWtoM2RteFRGNjJVWlJYL3ZDaGxRdkVkT0F5WUJjSVU4T295QTZLbGJLWWVJeDJFekhNOHVuUndjMHBLSWx5NktEcnFaSHlhSzZzSzRCME9wVHhuUjhBNkhKVjdBbC9kUERtWUNLTmdKd0xVNlpYc3FPbjV6cW1pWmdPM0UwVkhTamxub1NzS0RVVmtFTkk5NWZWemtnc1VGTEE5NnpPVUNhVFB2VVE4YkZRbDEySndYY0hwZmZRUGNPb2o3SzZhYUJvN3FlbGdUSkZyak5YbmJqR3l4VmVVd0JpanFyaVpDam1kWElEdkJ5eHhER045eVR4WGorZDRnMGZ2emdWcjJnQzJtUzJ6YU9ibkhLa1NOaER3ajBxWnRVd3BFUnhZSGlBQVNBL3VYZ1VYM0RSZEVQcUMwODNXVW5qakhCdTdPRTlud1FkNU9aakpmNFpJRnFRVWcyUWlWaEdmU3BHSkFDUGxJOEJESkVEWVptVWxPN2pnaWVZRG4xOGt2c21UV24xT0FWSnp4SUZTVVlDWjY3RXNwSllESDNjcllRNFphSkNBbDVSVnNWTnZLeU9idkprMUUyQU9lVW9wYVpQZ0lwS1RKOG5JMU44TEZrSU1VcWVXRXlaUXFPUWZBcFRwaVdsR0pZcHhkMUJKbDJ2Tm82ZzY3dTVNOElDS2wzOFhTQU55Ukppb2tnQkdZcnBRTTRTSHhtU1BWME0wOHYweGxOS2dYZlVSUzRQRlNyVHE2NGdVMG9CeDFBaGZVcnNUREY4T1hVSFl2d2JBTHlvWHgxc25RSjhvK2dnZzh2VkQyMFA2cDE2WCs1OTFvdG9mQmNMSjBRckNZRC8zMmZ0WGNmc3VmNjVzbGNoODNFSG51SllkbndQcnh5ZEdZTDd1ajNhbVZMSkJZNkxUTlBVWU1iejg1YkxqR3U2R1hFUjJCOThWTVVuSUw5ZmV2bVVMZzVQZFNYdGRscTJya3laS2xKZ1dVWlBzVFVYMThNU0R2UnNEVllvL3BXelRadGhFaElJdU01Sng5Q3duVUo2N281NUVZRFRrcmM0TDRNMThodnpVT2N6aFZVd2VvNmVSTTZMcEZMdE5ZQTI0dTA3ZnR0bi9LT09lUjJpaHNRcXR6UGJFbWlTU3EyUkRpTWJBcURTR0JqeUZJMkZ6Zlh0NVZZL3prTzc2cDE2WmdtcjYzS1d2UmxuS3plU0hqcFY4R1d1akdsL2prNmRSeDB6M2hud1JtN2RUSDZRT1MwQy9NclFkakJsSnE3UVpFcjZka0s2UC9PUHZFaUJLekVFdkpwV04yUEpxRDRhb0FLQ0FqVDEzSUs3WmpMamhNMXB5ZXRiVVFScmV1ZVFpeGlDVVRDWGhXeE9mVnlXRzdydzN6U2MzQ2dSOGxMQWs0aC9TRGJTODJGTW9zSHpwYVZFM0c5eUZaRVJaUHc4Ynp1VzBzcHRpbjNpZWtZNnMyZThuS21sMldSa2tOeE9jVGZ5MG82bC9DQXBud0s2YldjOHhhT09YZVA0cGVaS2NIaUxsNzdTRTJqNlMxd1MrRE1sK2I0WUxCQzJITUNNZEhxOHc0cnBpT3pNWGQramdzNWVERVlXWlppNHVNdEtEUWtFaWdCVGhlaGNTb1NlUzAzbHFBNDhuMFVoMEpIclh2OGhLdkZXQlp3dkFWTTFRSG1abXNjTHFQNmhBNWFiR3pwMnU1MGZUNkdkbEx3OHdWQm9DUmVhUFlCUlkreEtHb0hZem5vRVEwSDhkOEFTenlWTnFTY2xqbHJ6TG5BeVZ3SUFjWXhwdTZZS3BWdjA0QUxvVUFLL2hoSDgvQ2pyV0cxN2wzblBQWlF3alVmSFFtZDBQT3FjaWllRDM5SWp3MzY2VFBvYmdDVW9LaCtTdkpTRXA1SjFScXRNb1lQK3NUTDJDY3pVRDN0Tko0anRaZTI4c1dCWFM4clltYW1QMzRIQlNZaXA3MWxVeWhMeHl5bTVtRHc3SVkwdURzZFVqWkNXTUg2eGZyYWhmdWlUTjROeDlwRVp1eEQxeHUzTEFYNy9Cd0puV0NuYVFhdThlTklVR25EY3Q5Q25UdUQzdUVKeHQvMDlaTWdLSEF6K1REUEcvSzhvck9wTXpRUkEvdXY4K0RkYTVKRUpNTWZnd2pMSkZHUzNjOG9UVE41R1poc3hJVmZCWFpwY1BFYUhVV2gwRWV1YUlwRXB5OTZ5b1VpYmgyc201NCt3clcrSUdWWVZWeWNlTzF6NEtOK1AvVG5lNDJSOFVWaXhaTWNlUkU2QUphdzltWHN6UERTZGdJK2p4RGgzT0Nmbzg0dWJwR0RzRFhCcy9zaGMzVkhQa0RTenFaR3krRHlIclFSMlAvOXIzbXgzTnNsYTRZd2pIVlVyeXVkUHBQS215R2dLUThhTVhNN0ErUXR2YVVPblRNOHlhblFDUERLS0V6RDZaRDhjOTAwSUpZK3BHYmtnSnpNVnc0M054ZTBmZ1RHSjV5TVhPQmpsRUtUcFZPY096bTdYbmNGVDhrSUtZcTVsTE1vWngvRG5OYUJ4WEJJUVpZdmhNL2N6dk1hekQ3RUlSM1NPZktLUndZcDVraEpBRW9mRVEyT01vaW04RTd0eUdNN25pL3k3aWJLZzRmMEUvVlB2b1Z6VW9Qa1F5OHRqVEhscWsrSDkyYVBBa0ZIcFBCbWxTakQ1VWFSTTZVQlBkK3Y0aVZKRkpiWXpPSjVjWGVQM0paNWZTdy9JYTZTUW5FS1BBLzhSQUJ6Ly91Ly8vbC8vOVYvNFZ3SDZMd0ZuNG5EZytqR0NKQ2FRNXVqL0xVanNDTlp3WDhrMWpqMXIzWm5BWWhLZXZ0NmhaYVVyazgzd1FXT3UvOXI0MlBPUmJKM0VvbDhxbDRBWFNITTVFcEUxLzdPK3krRW9UZEkxY2Q4YnAxNFhnQU5pWjJEaEpIQk1wODhJeFgyeE5lQjFNMlZkZGJuY2tadDVIWU1HT2ZsOGM4Skpxek9JVW83c2tVVEllV0VDVFNuRE9IZU1scEViNU5pSHNhaVpoUjYzY3puNWthdUhZVEtmaGwwV2duM0JKWVZXVEhSaHQxSlJCK2svOHBqQ2tkOVFyMHFlak94Vy9nSVF1d056WXlQbTA5a0JvMkpXb2JrR2hRVGs3d0FkK1VaTGpQZGRZMVAzNnJ6azVuVzd5b1pubnVLNGhwR1piWlRyR2VhUWxjdGdzMmdUOVZNaW0xVjhhcGhQaXJsODZCYzVreU5Mei9ra3M2T2JsbUpOdWJKcGNmc0lOWXBtU3RQTlMxU0JYTUxZS1dLRkNyQm9iQ0NQSk9la1BWcFViNDc1akxNTm1sbm1UeW8wSWdsNDZtWkdQQWFQODV4M3JOUjRrT2wzakZJSzBIU1UyRHhpY2l0QU95KzJTT2tCNXJrVjJhcTFpcEd6OWpBVDF6Uzdpd1oyUXhjY0s2aktVTzdwbHlsUXI5WFdvb2VzMXUxQjB5bCtzNTh0cVJ5QlJtczRsbURUN3BkTW5DYVpEYzNMckpjQ0ZYdXB2QkNvcFFGMkdjaDZLaUZRem4zMUlpeFQ1UkxjUjRzWVU5Y0xDM1M5cWh3MVI3S2J1TXl4Szl0dEwyNjJFdk8xQUIrV2NKQjgrbThBWk9IRi9peDhiT1pJc3NOajZFaHFSUjRWN3FEcnBWSHB3b0R2akh6ZUJHNThia0xQUzNTVEcwWWhBazI5WENmRkNMeER6MXc1bENrTUZhSzVDeHg3NllLUERxNXhRZkVzVTJTNW1DWmlCQ1FEdzZPWEV3OUF2UmhOSFRobWloZ21pcnpoRlFJZzVxaGNXaWtVb25sUTR5UHU4SGhMb3k5OGcxeVlBSXhJdmh4czZla3NSbUFXakVlUWhSZkRxRFNVYWVvQW1NZExLOGpvZjFSNkNSbEtLZUFoa1E2RWV6bUVlTGdKY1IrbmRyMnFpbkdUYm9Vb3lLSXBVd3J3VXNOWEd5VHdpOHg1ek5QTmsrNWp1U280Ylc4UCt2b0d3MjZ2R3I2S1NpK0JHUHFTTDFFUFNROE5aUnpGNTFzY3ZFS0R3SHVkQlRnVk13VDhabnRPNklEUmdiQ3FaRHhPMHhWNG1hTEVvMGsrT1NGWm5hUFU2SFluWTBVNGJaT2t4a2VGUXJtK1J2T3FmdFVQQkVXanBURkZpVDU5aUl0em1jTEVHV0l4WlZyRWJLQ0lTMWZ1SUdYUjNFOUxWcGtpMXhsaU1XWHFZbWxLOVN1ZXNodkQ1ejR5S2JYSzlON3dTbnpQZTFUWUFiQlBmZFc5SHlsTHlLZFBORGRWR01LN2Z4eXd3amYrOFhNQWZBYkE5T2YvK0kvL1FCaWZHL0ROMlJURU15OXYxRUVTZ1k4blo4aldCd3hCQVlpSnhVUmFIbUUwb3c0Y0srdElLdHJCYU5UOG56dmtFaUhQRy9DY2pCTHhQYm54clRVWnFqb1lrY1FjSlJCUTlKNjVqN3I1amZJbWRHempwQjlDaFFTOEIyRG5oUVhPNHJqR2hyOGNQRVc0Z3hzOXhFWFBxWThsZmVyeGpjdzQrWmp5S0RKT0VSSXY0Q1N4aHlhVC9uT3ZybEk2Zjg4Y3UvTHF3T1dZL1l6RlhrWm5RSHFCR2RuT08waHZOVFZqeVFwMWdCUm1oWDQrdzBReUpBSDVNYzFKWk0yNmpqM0YrU0l1SVU2N3BydTVaa1o1UVk5cm1tU09ZUEE0K0Zoa0hnenh2WmlpL0NVbGFrUlM3MlFKemF3UU1wUWp2WGszVS9WcGRuN2N2Z2VrS2dKS0tneW5SMUlwZkdhdGFhS1Nza2V4bjF6Q1RsL091TWE3bFpiWFRra0xYeXJNNk5iTUpEZXRTQUdFaVoxaGpwZ25RR1ZjelA2ZEtkZmRmeG9BQUVBQVNVUkJWTTZxVG5DalpNakhZMFdSeFpsOFhtcnI3ZU9MY2xEblczNHZxcFJqSVh4SzFOTkhBcVYwQUhGV1dDMmQyNllvSGErYWNaNmxSemxkUS9ORTk4YU1FYXhYeGFYL3pIREJLRDFEZk14RnhGczZUSDJjMGNVN1EzeGtXaFdhandYM0V0MGt6M0RVeFNHM0Rpall4N0VRa1ptRjBvc3ZEWFRienRCTnZNd2RsS2ltSFNEcmhsVEl6WW1Qb1NQWmM1MjVUN0VMMDE4VThxVUl0OTA4K05jLy8vdS8veHRXSU80K0FHQ3hVUERwRnlEdDUrdjFLSURtVWpPYUpCWVR5WGt3dlBqMTByalNGWFZQa1FJZVJUS211TndVN2NEMVBVcUdmYzcxSWlQYmpzZEE4N0dDd3ZlcHlqSFVCV0NrRVpENG5pbFJUUVhrNDFWRVV0YkZjN2toVkJTQWx3dlRuWDlnYVBzV01PNE9kSkNQbUNNUTJmWHU0NWdwemhUTWFjb3dSRDlrQkVnZVJ5ZVo1Y3lHK2Y0UTFGNGlpVzBUVkozS01sS3ZMQlVWM3htSnBSbk05bVkwdUprYnQyNmJVajdWT1p2S0daclhpdmdKbHM5a1ZHV0JXWXMzbWJ2ZGdBbDl3bmQrSjJLbWI0bUZETGtkTkRFaTRKR1VSbEVCVHdISjErQ014c1V0bWQ2Z0d6T3VmcXlDcExKQXFLS1owSEI3ZzA2WkVtVSswN1h6bStHTTlzZjRiUjRleldxSjk5QTRYd2lMRjFCT1oxd3YyU2VCeThVZVhpL3RuUitxUzhDR05WVmpWd3owQ2dtNG9VZ0JlbXFhZ0ZmMGFrUFJremc1NjU5aVR4RVd1UEx4WE1mUUsxZkFTZUUzWlhVclR3ZldmaGJsMktCY1JrbEpMcnAxUHNseFBSU2VVL1d2ZEFJZnBYU055UHl0czdWTDBDZ2trOEtVYVVsaDFEWENBbkpXYm9aNC8vRmc0SkxGcWNneTdYcGp1SlByVWcvM1BPUTJpVkdVbXdOU2dnSktkVVYxRDl3RmE0RTdQOHUxcDRPWFptOHE0Y0R5eGdxTy91N202U1BuZXBtbHRQUUNjaE56QlVwamtJRTUzMkRUNHVwdWlCUWMvL3JYdjZEQ0J3Q00rR2NBOXg4QTZCZUd5UHh6UHdCa0svN0NHUVR1RHRGWUhoMkFKcW1RbUFKZ0lZMVM2UHV5UkJhdjZTUzlpcGhDbHJwWE12SVM5K2xOU0o2dUlYWm15dUludUZkUjZaK0FhWGpZbkp0MFpOMUVqeUdTSmVRa01LYzBKNTVqdERreEhzZlZMdUFwcmp4aUY0ZERtRzJiNmJidVFGNE1nTENuRkptbTFDdUZVMFVGUWlCcEFvWG0wMmlFalM4WjYreFFTcVgwdWQ1TEV4ZFBIT0tKOFRqS09TTXNwY0JOU0JxQWNxaUsrTUtVcVdRQVhqSDRuL0lOT200VCtSdmFjVXNpUUNoeGFCUUt2Uzh3TUQ4cXRJb3JGQTU1N0tXSGo0ZUFtdytaOVRwS3ZZM0RaelE3MjFPZlVHNmgvTWdBQmdLT0VtanFqTDVoQkpKSDczQkc1bVAwOFBTcnY1QlBsL29ZcjZOeElzWng4d0pzb1ZnVER5TW5sWS9pYjRBU2JqUTlWTEpDTVB2dllqSElJdlpSWkFkWHNsS2RVMVZaQUFGY0V2TTB2QURZemxSUzVxUEtBVGlmSjJDOUFaWC9WVCs4Y29wTW5yMksrM2hkNTJ2V3ZJYUt2a3lSbGN4VXB3czFNaXhUOHQybjYyZmlNUGVVR1lva3gyN3VXQm8zbVFJK3JpVkl6QURHd3F3blRDb1VGVkJpeVoxWGtNZUJ0d1V5SnFzT1BKblJyaEZUM0R4WFdPSTNnZUxzdWNJcUFRRHk2cTdvZW1KbjNHVGlhclcvYXZ3Ly9BUUF6UC8rNy85Q0QzRDQ5dEkwMmg1ZlZkM0VYM3R5Yk9aSXNwTmo2RWlxYzQ4S2QzRFVpd1JBaXJMRWQwYWhONEVibjV2UTh4TGQ1SVpSaUVCVEx5ZFNRTkhPSUNSUzRLaG5WSm95ZFIrbXU4Q3h6RHVRdVR1NHpBWEZzMHlSNWVKaTZDRlBkS3k2RWlzS1FNd3F4TW1OTzdPd2gwaVNVVDhpQ2J4b1VYb3R4NUoxSUxkOCs1Qy9ISnkvMXAzL0hkVTF4YWVuK0NWai9HR1krVXZmYWthZXJIaFZsM3FLbFVLU1BTaWthTEZ5M21zcFhRSUh3SnhxVEdLUTZVT0RlSE5qQjhqNVpuMyt3amVpcVErVkEySXhIaVZHU0ZIaU1zSXVQdTd6ZlNWZWF1UE5mVXo5SzE2Q0xUUW1vOGxvRlY5TytoUjgvUFovSGlvOWliYzlLdjE5QU1XWXFLcnlJZU5SaFFDNm5xVDAwamhUTk1VRTA1ZFpkSk1QVTU1a3lWd09NamtDa1d4U1dhcEl4cU1La2ZRcDNRcWpFcklTSTZXSGlEVlMwNVdkTHhwVmtkV1I4ZWdWTHM1bFdteExZMlZheEt3b1F3SHZ4QjJPQWhjZmNja3FVNlE0UXl5bVRJdVk1U1ErVGtscTdJWWxkRFVGcjBJeUVjT3NNcFhWZmJSa2xhbE15R01rQUg4RUdWODNuSnZTcmxTVkRsU2xoenJUeGZwMGdWQzg2Zi9DUC9ZWnFhOC9BSFM3WHZLYk1VK2FjWTNqcXlhTHBreXZzcTU0cEhlSEo4eVY0VDNmblcvMHo4WFBsY2R5VEg5aTRockhSMXVRVHpUSDNIY25IdDIrS3NsV3ZlRXJoaHR5akNxOUEyWnA5TFZJN0NSeENXRmFHRE9jN3hubjIwUzhFZlQzaGNURzlHcFBtZDdEM20zdHhJcXVsa1FDOEV2dmFBbXVTSFY1MzhZZVZkMm90Ui9vZG56YWljODhwME5XQU1RY3FTMjRUOEdVQTRuNHRqTCtCaEhHNDFjSllWcVluaTZCYjJNdWRwME9EeGsrcmZuREhKWXNqNFdTMmtJbW96NmpjVkowY1BjNDlkeFBZWjRZZWllOWFIZUFScVJBTnhGVHdFMUtDWlhwVmQwdWMyV3BmalV0SnB3ZXlZY09raFVUOEoyUitBbDRtZjRSUWM5OXdqeHBXNXB1cUJEQVc2TlgraXVldFhxME05N1Z5OFlrdnZjcDBUSTlWdWthMWZyVGdYclRad0F3NDFlQWNDcnhjOWY0eXU4QjhaNEhIWTc0T1VFZThYMGdIUE1PS2pzdWJHaHlBanhJM05xRkUyaXFMQUtOTGlEdURNUWlCVVIyUmlFSHhHZ1UrdEh1L0cyTkllTktyZTBsdEFZZzVzRm91TWt2QTUwQkxZM0FjSm1oSzE0eUFza0VKTGhuU2xUVHVSVmhJL0lHSTFTdWhNaTBYSmtFQ1BkeEFaV3NUYlk3eUUyYWpCL3FGczhvTmwvVW1hdHhXdVZsbjIxTmh0NGpzYVNYVHVRbVhtQ0d3bTNpV0x4WDZieEhJOU1PaEJqMVVYSDFLWUFRTUtjY1E0eHZBR1FPVFJMNkVLZEdZbXJDSWcrR0FKVndZYUlyYUFQZU5uQk9JWWczbmpFK09LS0wvUm1hSm1OTHM4ZXQvMlRvRzUxUW5ITTFoc1V5SWtIOFdrdDhKWThreGdHUUwrekFiRWNKNzhyckJwOG04VDQ3UDJrZ0dtdktJNWxZSDZkdVM2YU04Y05idXpXVmFEZFJJVmRtYmZ3SENGaDBiUXMwY3dlR2t3ekJXMitlRWpoREFKTlBjVDd0amFUWHhSaHJtdGtYa28wK3JtdFQyQ1k3SDVlSHpZSEpCTkJYcmpZYmlyYm1uZ1NPbjJ3czJVZ0paYmpFWWQ3ckxJTlVLRUY2WkpLSGlLVmNvYmhzWnQwTzBueDBOWlBuWTZsYnB5aWhJeHl5ZitXTzBId0tjRzBjSXpUN0IxU0tPNGprRTExVGdlRS8wL2ZjS0xBenE3SWNISER2UFlYK3pqajJLTEJiYVNveW1GeUdPeWphZ1QxWldDZEdKeDFuakp0MEVGUHBlbUJWWkFJWUhDdDVyK1g4RFRZSFdoMzIzK3NTajNHMkw4RVd0ZXNxK1hVcWVaWmJWclFwQjRBNFp1dUNBaTZtaWlFSkRFUzhSTVYwWUlsUlgxUEhSeElDMStUNUdRTjRUVDNYOW44cmxFNTNBODlXZkhzL0Q5WEY3SmRmZnNGdi8rTy9Nb1JmQWNMZi84R3ZBUDNidi8wYjhOMVBBTHludTdJejlrUmZOR1U2bmJaSDF6amVSRFp4aldPVGJOQTFqamRSVHU2ajFIY05tRTUyODhMMGxMVFJ4Vi9rajZiZDgxRmFFMTM1WFBITllDT2VaeDJWUjNJcmNKcDRGdkVUUms1WEtSSVF1TXo5ZTlRWk4vR3NvOXVWd0UyQVhlWlQ4UUpLQk9Pa1kyckVDQ2pYU3pncFBGUGl6U0hlOVBJUGZYTGtML3VVa2FGaVN4T01CSXBxbXN5b0taSkEwMlBXeUdrUG5zWGdrWEZTbUdDOWZFMXo4SU9jNy80Um1kUVFsZWxNalVlR2xnQjNpUGtWZjMwenZ4c3Zwb0gxWG1FNVRQY3JScnpBekdodFozdlpCWHRaNCt5eGRaUWZ1cTZqVmEvU1Y2QTJpZXNOYldMQTB1M3Jnb25QYlBoaVA4UmxSR2d4ODNSNE03V0JqSW1NVnRvNUtzeWFScTN0eTlzV051Q05CRmJkRWhDZkgyd2ViazUyQXMvWnYwQnM4ZW5hUXhVVlVnT0Y0WFNTNi9xVVhtQlhpajZEYVhpT2tuMnBnZUJHdzlDTlFMVnZOQzlETjRLSHExQWJWK0NtUkE5MXhtMnZvbGU4NXo3RWJ1WDRaZm9UOFJOTkwxU3l5cFQ2STltdFBvdFJPZnorRHp6eGtZRE0vRWZBOFZ6K2c3OGF4RHNNQzBQSFozbUFmREw2TXpLajRVVkhqUUtSekhEYXVUS0pNWmdrR0UwRmp1U0taZ091Y1N6WkVjemxySDg1c1dSandVTkNYbEdVOENxY09sT1VIbnFUK0xOOEhoYWRHekxrcWk3UWZjaFE0REpoQjdqc2ZDbzNnTTZMVWRTWlFqSWtBUUF4eHdzeGlpSXlTcnZlTVFYeWNiMUkxeStjN3graUFKOEk5a3dSeVZBWnkzUVo3cTNTeE1YcWh5Rk5GOGlBRzA0bEh2bG1acnZnNDgzU0xQb1FIR1VpdDlLeElmSG1TdVRxYzM5U1N6Qk9HT3htVjFjcEtha1hsY1FlQlNrZTNSQmZqYXJyUUZnKzdxOW9rdm1UaEsxS2JEaitEck9ucEErMkFPSzFPWnZQYVg5NEF1a3p4ZU5zUm9YREZ4WjcrQjZRcjhMM1FjN1RQSWlqWURoa2NYVndUSGNTWHJ3SU4vTFY1T2l2Rnp4bGR3YWg1MlFSbDhReGpTZExQRjk0bkRWV05KOWIwR0lGZUQwTzRFeWZoaEtLR0VMdC9zSWJ5SGZ5VWlvRVJ1UUI1SVpTckpRT0lqRS9Ma1JYcy84Snd0OTVXMWZubGM1UUxORjhzaHNRZVJ6Ym1FRnVDTjNXV1ZCVW9Dd052R3lMaHRPcW54MDUzeDI2cmVzVjlVVEhSVkJDc3pFK3h0Z0ZaSngzUEIyMmpXcUNXQ3JQWFF2UllJeUswazVURjVIc29ja3Y3YTVoRDF1ZmtPNmFsZHREVWpxWUYrUTVVY290ZkNvcVpRZk1GZTlXUjlJRndzK1ZTT0dGaVh2dnVQMU9Gekw4dy8vNGp3RHd2d01BRWlBK0FHU05QL0svQTVEL05ZQnBOTkxuSzAzZW5VY05obGpHeDJoaTZnSFVrT3M3OXF3U25SN0xWbUtGY0drSWQ5RDFZZ1RRcHhLTnpQWnRPUWdwU253L2RjK1graUwycWVPMytsRGZIY1FJVEdmN1B1U2twQkdZa2JWdkNnbEFJeXpBUkUwTEtOT2pnelN5SWlQZXA4SUM4a3dtRnN1UHRpNlFNOFVNT2VtOG91NHdNWVJ4NXlvYXQ1cEtQbGNZR1hxRUdIV0hvY2dIUll1QXZLSUNJYk5tWkpVQzlMbHVza3BSVzR1Wnp3Z3YycU9GNGJTUHZLRndqN0RzQWJJellvWEFCYzVENXBOWU83d3pvLzBidlllRUNUQVN3TE1BVFRNU20xbzBLZGlxTThVWEtKUCs3bis5TDA4UEtuMHNGY2VxMDUxWTVpTjBlc0Q3UTN5OFVLU2thQ293bFNDMnBTWHZqRHlqSWZ5L2YySERPam1aZUhWKzhwVjFJWHh4OUJmUjl6RW9vMFFCMVE2R1g2SVNGQ1duUnE0My9mbW1CRnNuQnZreE5RWjVZNzBkUUUxU29haC9vWmVtcDhRUEVQSW9talNMVUVzNWZucFI1UkVkcTRBQnYrcG5CaTB6cm95eEZYbVp0WEtqQVRiWitsbTdkOVcvRWp0UUNrTmxPdlR6QTFoUDk2eVppM1hWaGd0RDVkU0hoK09ZNzRmcHd4eUg5QjBvV2tLYVNoQkc4NWhSYkNiTzFxZ3lnNGR5S3lSa1hZR2JoaFp1SkRWU3N2UzhmaU54RDUwWkx3RDlUUXFWWFNBSGhhNlVSUUJaWWNxMEMrNlpuczVPcmthZXA3Zzd6L3N6bFdUd0FRQlR2T25INy85Z0JBbi83U2NBeUlxdi9ZVEgrUSs3ZUcwT0l5dk9tWStxOXhKQXNKdEZoalBDQWhLSW1iMXR1WXAydlpnQzVxSzJiN2FOMjJEc3lZaDNFSVh6dUFxSm44SjRkTkt4aDY3NHQvcElmMlBvb1ZncTc3NXoxWFNRUnFBN0t5UUFEZkZnNWthTEYxREtwczhhSmNRVVhMdXVkT3lleW5YU01OckRla0hFNFNhT1MwalREandyOFhwL2hXa3kyOW1IZzB4S2xGTVhFQmU5Qzl6QjB6MlJuM1prWWdDN01MWlVlZ0c1UFFIbXVTMjJ0NWZNVnZmRzMyMTdZemZNVGFpM2xCZkU0VXJ3NnRZa3YzMGVsN1ZaOFNvWEtaQ041QnZmcXNjNzhmbDBTMENISUM5L0FoREJKVXRyM0xyM1dtUlpkb3FOQTZ5ZnVPSms4QW1SSDhhQVVVY01uVENTZHdCWlJsYzZ4WU5sN05FNHFqM1NoaWg2ZVhMMFY5UE93S2VRWmNwQ0lnV3NnZEZQRDRucFFIVVZLb1hjdjc5QlYzb0YrUk1BZVFvVWMvRUFlV1lqVHVnaHoxSlU3OCtLOG1ycUpxcFNnTXlEWjBLT3pwTXVWVUkvRjNBS1JlektSSHBwV0lMakZzMm11bzhubW41N0JoZ2Z4bVhxdFo3NWg3bE1CT2pqb1NOVFNwUnBwak52UHJWemMxWGxDSFJ4SGl1U1BCWENxVGx1MUZyZ3NaeXFDSFNaUWdDS2t0UzBBMlV4MUFWaXV1MUR4bVYwaXh2K3ZzbHE0d25nRHNZTHc3d2JNNHNNblBFZkFNWmJmLzVYd0JBQ3Z6NEFZSFB3SzBEeGM0QThGZGtIM3hEUWJyeHowQnNJNW10VXBjNm9MZGNRRjNHWmFobFBnT2MrMTgvZVJqdWV5QkJmMkp5blZNekl6TjE4R1hxVCtLYkVtM3drQnBDbkFLT2FqbFVuSzlJVGk3NU1sWElHN3I0M2M5YlRmVmRPTGg2WmhaSEFtV2Y0N2ljQVVTQkwwTnpIenBOcEk0aDhSWnBQU1BYWmxOdldlSzJlZ2x3ZGlyNU1HUUpsSmxBNitwdzlyb3NFRWdrNnVJOFdQYWVuTVd4b1pWRXdnMVFWTXdTM0dpczRZaFpWRm5tT0lNVVRySEh1UWlnU2MxUjZJNGVzRlBVc1lZQjRnYlFTWTVuenhTK1ZHR0w1T2VZN3VGazdtYm53YVRLRHlkc0hpWTNYWkFlOE5HUE1nLzV6Rm85YnhTUXlDanJPRGc0QkxtUXlJOHFMZjQ2Wk1BZExuTlRiSDFsR3hZNEdmRUV0b1U3ZU16ZlJMWVFYNzN6OTluS2JBSHZSWHVBbDZJQSs0ak43WEJJaWIwQ2t6MzZLN0dvYUdYbkx5dFJ4YVhTeEdLdnc3TjFWYkJHUzRxREpiclZYbktmV05jdzlwcy9RVEpzbEpKNkM4VmhzU3o5bFNwUG9iOWx2UGwyZjRjTmJ1bEtYenZUcUlVVlAvc09jdVM4ZEpPdFZuTEZDWE9xcUl0a1ZtT2UyWGd5bE42V3JKVzVyNGZQaTNiYTdDSkR1akxCQXFXdmxWbUlSMzZRbzNWT0VPempxbi9oREl6ZVp2QVRqYk1YdGVkdTBKT0lrNHQwL1Jud0FvR0Q5aDhCUURTbjRpbjhHWUZkNDZzSXJRSG8rK1FBdzlPa1R0V2ZqaEVhTVFHRTBGWkNoZ0llaTd6eWNGQ2JRVkE0RXM3ZjF2VS9wWmVybTd1TlcxRGp6VW5ranZna1ZXOVlWS1VEZWZRclRsUlRQRFJseXlRU0tUNW02VE5nQnJqK2ZLaDJnODJJVWRhYVFERWtBUU94alM4bHJaNzV0Y3FWalpwRUI5cWxJMXh2ZTNsVWJUNXV4Wk9lSjMxSmk5T01wdy8yNHBSbnppaFRuY3loZjNhNmZUZXFOdFdhaW5panIyam41YjdJaXdMUXgrT1o2cE16UUVHVFI4U3JUVXJZUzNxUXdVOUlrQmprNEw5SUZTaEU1d1ZiVWZhWWdVaGUvL1FRQU5PWmptYUVieXdXVElid016Qi9MMEVFanQ0RFQ1WjhuTUgyc1lzNmxaSFNPZWRPZkV6NFdwU3BtbEl2MWhrZWhZeFpTbUxCWGlGblJTNUF2ZStQOGlyd0IyTDlqaWZTcGVaM3NESEtjZE95aE00K2JtOVU4YXk3OEtiNUtjVmNzdUl1VnVJSDUrYkhycjlZU3lseERUemt5ZW92R3FHeXZwbHBJY1N0Nnl1S3p3cndkRFNicnFZcmNMSXJ1MXh2V0lqRFozVm1HVFAwSUwyYWVZMS9DaWxySlFycitZTHNYTFlKaXhTSnpNMkxXQmFYY2pZWnVKMEVzbFZXNnY3SThzVHgxUGF2M1E0ZkpMei9QNGkxa1owTFpHZVdYa0tZQ1Yra3VvRnRoeXRSOUZCSzQ2c2V6cFBrVXdBc1R0OVp5ZDhXVVhlRzNnUENtSHg4QThPZUF3SUQvcFJTT3Z6K05ud0xFZ1ZPSk5PNy92T1NMdWsxcDJ1aU5lS2w1S1lDZGF4eHZsV3ppbWczbit1WjljbXhnNU1YQzQ3WGFYbDhzdXB6THpwVHJmK2xRRkpOeVlyeVRKYjFGWDk5bksvK09EcmY4ZmNMbW4zcytWKzUxRHJPalZmUVRmMDRSRC9teHhNOXc0c1hIdGJBK3VxREFsV0U1eGVQNnlvNlk0b21PMmJRelJWK214eDQ4L1Nqd0tpNFdqaTNKRjkwSjFpVXREVTNjNmxqTDlZNlY3cVRqNHNiUUhIK2ZPeHluRFhqMkdTOVVlK2ZiT1pycDIwazhkWUlUMzY2RCtaWkNwWmxZZWk1dEg2YXFOMEU0NUQxbVhGMjUyYXZWL0Eyak5aMXZodkJuVndqeHJ6RG5raWN3WjhEWmNNQVoyUjVoanBvcEc0S1l0MFR0clh6WUZaUUM3anRKZUs3cnB3aDhHamo2SUZkYVBUdFFHdTNmeGFtS0pnY3k3MFdPV0R3Y3lSdStoUExNUkszaVU2WkYwS05GZ0dreUdQQ2Z4cHYva1lpNXBpMDlTV2NjcDAzMGRpUVpqVHVkdHF1WG1OSFUxUE83RXRPclRJYy9QOERZaVJqOGZJaXMrU0ZuY3RhU3FCM01maGJicTNkbXFSK2dzUmx6QjhhRlIzWnVsTWo3V3RmUjJKZU1YbTlRdG5wMEVDbHdXQlp1T1dNSkFjYmhxM0FjejBtSnBsYVh4OHd1ajNmVlRmcEU1aHEyNHZ1Q3FLYU9WUVQvVEYxWXdEMlA1RkZ3VktxNm9nWDByanB6azlLN3Y2OTRGWTJpZWVDdFB6NEQ0T0EvQ2ZpRnJ4RFlwZDkveDc4RC92TGw1NS94MHZMN2I3OUNnYjhoaDg3aXlSaXZOdUVNZ0xzUFV6SVU3Y21hQW94K0lQci8yWHYvTFVsMjQyWlE5NWYyK0wrVjlMMy8yL2tOYkIvSmtxNFdFU0JCTUlMTXlwNjVzbngyTjg5TUZvaEFJSUxNckt5czd1cHVEaU0zbThEUVNSOEN5NXhaYi9iSEZKWmdVZHFxcUR6WkQvcUw2Y1Z2dzdEVlJyZVI5anY4Mlp2OHBrZzBIWVhtZElaSnJNcnFPYTViT3pOa3BubGdGQkxvVTN2REtQMGowQ3JkbEwzY1RUa1cwOWFIVE5IVGtDY1Z0V0tPZXF6N0ZBUmd3L0RFK1ZtY3ZRRXBCYm9lNllqaUFvRjlXcTBieXZBZlpLandqdzNIQ1pJZjRrajlZYWR5SXdZOWZzMzZaVHZXM1U3Q1MyS2hTMUd1d3pRZlQwK3RMUmV3cE1Bd21jM1lOTmNwZUlMcEJ3M0dCVHBBVkRMS2ZseEczTjNBVDRjaFQ4MnQ4Nkg1TlM5aXJCVUhjcDVDNDVBbk02VHhrUGNkNDRxM2FOVFYrVU9yRlJ0ZkxoblhqdkRQR0Y1aHFWR2hrYUpBaktIQkZRTy80elJVbVFBVUp6WmZtY01ybWtZb1QzNEV4aDAvemtkY3NsRU5WK24xQklIOHg1L1NCa3JrUlRNYzRnUWVWY2hySDRZNXFDZGUxT1ZjSXA2YlFEaURHVStLQkVPU1JZbnoyWjE5amg2R1pMa29CeUF1bmJGZnIrY1o1V3NRQXF3NE05WWN1VHFUZjNnY1plUHVlWFp3UFBjS3FhRUFhL2pRY0t3M204dnByMzU4T0hGY3pkakxaTmJMaTNuR2FhK2lXUGc1T2dESUdGMmF5U2hFSUlIeDBRK0d4dFFTVTBBbGU0ODkrUmxOaTBrcU9rRm16YWVoRHVRR0dPVWU2NWxkc2JYWjRHb01KMEFLY0lJRTBBMmZtcG5wbXRvRTJhWkhnVGtjRTVoVFFJSjRiOE54bklkREZtMWtpT3NUWnBhdWlTNmUwZHdqWmVSeU9Na1FZeE5wL3BzaEY0SGlxUitPOU5VVHJDaVZzb1BvQjBvbjRhTmNlbUpQQUJrK1JBNHNBUk1aSmVraDRSVHdPTzdkcmxXZDZ4S1h3SGtFSjBBVk5VQ2dZVXdnbXlnOGFja01oTHFKcXo4MVkxM1dLVHFQUlR4SmVmTThtZXloN0ZSVUZTVlFBeWpCK1lMQnBpTUJUSEhjcVBEaW1WUENrbktUd00zeHB3RHdZd0JNeEJzQS9IR0E3VHNBbnBNaWxjTW95dWpTU1l1K2p4YjMwNlZyZm5QbSs0dGlacm1jbkcvc3NieXhqdGtyY1VKZkVNNWppYW5OTlVKSGRSMk9ERkptRWJyVi9UR3JwRUR6MGFmNjd1TmVaWSsvSGQxOEZwK3IvTkZ1NlhPOTE5QXlqNlRGQjVSTXdEVThzcjdYS2U0SFhRS2MvK1VNS0xZY09vbnJ3RHhlVEYwbmpHeFRrTkc4NHpxWVBKNU9YbzZ6QXdNdzY2NmxDREpuY0V3NTY3T3ZyK2c1elZYVWJidlAwTTJIbTBDOEFES0lzUWRtRlRGZWRIckhvNmVMMzhuUi8wNUtXeDBnUTNtVnkxR0l4VEN6dTAwbXNxR0pPZVJSeGl1SGZnVlF1TVVCU3dIUEFkemxtRGxOcGhWTDhWSVdPTktuT0p4MFpCTHdYalVoWDdQTE8ycGU4QkhTMnE1SmlXVHpXWGk0V3lqcGg1ZU42SzVzZWZzOCs4eitNVGpvVnRwamNNa2E0dUk0L2NEMGtCTDNVQnlyd2F6bFRtWU9JNW80WlhPcWFkY1owQ0lUck9IZWdCWWZ5L0hCVTRaMDBGRGc2Tnc2VWNYNTdRaWxaYy9zMXJpNUxFSHhWbS9yc3ltSHBuY0ZwWlBDQXI0QVFaN3EzUGphQm8rbUhOckpsa1U5NllDcGVWYXVhTnpqMVRJcmVyRGZxSnR5OE9NR1V2UFpjajhPYnVhZStLQmg2RUVBbnhMTlllMjJqak9yaytFMk95dTJrejQvdmhFdkRXcmd5bHljVkxqd1h4emViTFp5ZG9Kdi9GNkxEZk5WU1h1UVAvM3BUMzhLSlo0bitDRmd2UEx3SzUvN0RRY1NaazdPZGw3TFZFSUNNRlFTc0tHeHp5eEZtVnVHU2lmdlVlRU9sT1dnK0N2cnhydUFHSHQwUHVhYUQzRTh4cGcyZVlhUm1YejNHZEw1NElMMEcwZnR4cnRtZXNUalRWOTRwblR5enJTejJXcmRzMVpyUmNPaGs4SWRhRjRqaE5mVFhKNnVKUFBNdStZWnMrNkRaaGFLeGVFTldSZDc4MU0vRGxNWHUyQkZ4N2x3emZJUzNuUGhOUlFZSlRDZTkzTUtPUkJXZTBpWXAvWTY1U3k2dGFwMGdUVzFlUlk1QTltRFVxRWpFS2xtT29BRy9jWCtWTjMxMWxYb2JiamhkRnE3a0UxL3N2SXN3ODk4K3ZTNnVuM3gwRENQMk9vV0pDNVFrUG5MaHRYZDFnSGlDRTJPaG9QTUFVNTB1cFVTWnJpdGpQTjA2NHlxQk1ESG1QWU40NndZQmRmcjY2N1pSK2xRYlhaSkd4WG5NcVRjU2NlSWFpaWdDaDhaQ1FRaU4xNTUrVmhCQmcrazYyVWxjTXVpd0dWSHBRUUZsS0huSHZzaEtabWxLM0pZVEpOdHg1Vzg3NzJvcWdUQS8zbit5TzBxenNWL3NHV2k5cW5rTzVQVi9CN2QrTkxBVWJscjBudzhLNGVWQkFRYXdrMVlRQ1VVM1VOaHpUUE9lY2QwS0V3WmVwV0taL05aS0k0R2M0OE9IcHJQZytySDY0OVkrWFNnV2hJWG9CVHlHam80dHVFQzk4UmNFYklaajJEb08rdVpjMWwycm83NEhQQm5BbDNkKy9BS2hDdnYvcW9rWDN6Vkh4dStEd0FHVGVMYjJ0c2JBUGptTHdLS2JIZEl3eWdhNVA3ZWdOWVNhSmppNFJHWmtVc0hqcEthNUJqa2c4dUlHUlh1NENZQS94dUlZWkV0eDRNRDRQeFgrS0ZtVDliQUpPTFJOWTQ5ZE9PLzZpTjlNU1RmeVpoc1BnbEtTRU1CT1FOMFVrd0hydS9SamJHemUrT3RJdmtTVlFtUDNyREV6eUNqbUNuV1o4eTNHOUxCZVhrNlNheVFBVHpaeC9lT1hBOEJONUZ5QUM4czRPSWlRUHNlOVJSaEI2bVBTeEJKaGNROEFJaWxKK2o3M2t4SmNYK0t2OFR3NnFtNnhSekR6cWdsaGlRNFY4OGJaYVZJQTZCRWdTT1owZlYxZllwbnluZ2htY013WUlsZy9KVkI1U3BOZWQyYllaelAyRFlteDhwaHlBWENBa1U4aDdEZXU1eUJ2SmhpTHVVZnd5c2xYM281WE9UMFNLYlRNM3g4VE1NdDBobUVPOWtadVhqSWNmZFJkSUI1bjFCNWEyQVBZYlpyd25zbzJubGdTdlM5TW56bnhpemxrdGJRZ1RBMHdnbmlpTzlNMkRoRDdJd0VDcFZvRVdnb1VQUmxDRmxYa2l6ODh3MGlVOVNrSERxdkJsd3p6T2NibUQxVWozdDNjTWF4ZkdiejR4cENqWlJsaUN5RnpHRzFJWElENmQwVFhlT0Zqa29UNEZTSjFLT3M4Tkk0QU80ZEJ6bnBEdGpxamZlaU1kZmJVM2lzTWMyMnZaekZkb1loZHU3OTA5Vzk3UllwazNCRnprM21BcWlDM3dMMDMvLzkzM2dEQUV6WitEV2dzY0Q0MWpQZkFNU25XdGVYL1pBdlI5NGRZaWhUQWpFRUdvN2NGUFVRbzNUUTNtWEZoeHFSQWlVWFE0VTZ1SmxRV2ZTWUp4ak5WaENBSzlqY2dsZ0pERnMva3poMCtLWFF0NG1ScFNsMEJ6TGV2SXNkdi9GeGpYSUZGTzJNUWdUSGZwQ2x4QnNnWDZKT09wNjE0bEFyUmRpVXI3NERvRVFCY3hqK3FnSkFISHVkYXNpY25heW9rUW5EaWxHSkJRcXZZVnl3NXBwMjBOUDlVdkJHLzFGRGdXU2xvcUl1Z0laYkp6OHpiYkt3VWhYWk92T01SeXQ2bURmY3BaTXlWS0ViUUUvTE1qRWQ4ak14STFJOTg1WEJ5U0JtUDh6QlpVcTJFYlFxNUpPcHBSRmltcUpLRkhBM2tNNmI4L1FoNWZ1OXNSbkpkNy8xQmlqYVMvazJsNUZ5NHFiYjViSDZoNndzMUpGeDhxYS84VkVqTndxR3pKcFhvZ0Rrd2dKdWNoTlE3Q25DQWg5OXBDUW9RNVV1dklaM2YwWmlYNXpGZE9CS0x5RzhBR3pIU2JkV0w0ck5jczhnaFd1M2JFK25LNlBTdVBPeVNDU05nQXZNSjUrSjYrbDRuWUxTdStHTlNaN1c2dzNZMGNmNmlYZ1ppbEh1QnVhVHEyZDVJcU5iNGw1b0Ntd3Rwc0I5NUREMWE4WEVVS09oZ0hLN29UUWRLRXNodENnc1VGN0tleGFacFpmQ0FDOFBkcEVZcnI0b0w5OEE0UHFNci8zemp3RGd4d0JRRjUvL0I3bmVBR0FTS0owL0lsd3Y1aGlUaXBlUHkzY0EyRFpsd0VPZmdPMU9CMi8rOW9JMDArM2xxamlyQkZjUVVmaU9mYlpTR0E3WnBISS9BdldhOXRkdXpZZGZ2bzJWWkFxQXRnZm0yMExkK2NHbmk4VUFLTkdXUE9MR2F6Rkdua0pqbkErRjFQQU5lQ2pIZEptd29vWTNVTEo4NlBoWXQzaE9QUllFVDRHeExKT01sWEc5OHdvNTZlSjlMamh6ZUFwdEphZzVXbm02YkoxVUZvR09vdmZ6U2IvT1p5OGhmQU5lUWhyMWMyT2NsN2dEbHprdWMvRWhaV1d2M01LellvbTZHekdYaHZpNEx3NWxpSlJrUG53SFlEcVBvemRNb3ZiWXlHUXo4L1puaHZUWVM0OVEraWdhSk9yWWhRQWhTTko4QUdISzBpQUUvQ2N5YjhYaVMyVDk5c25zMVNBTDgvNHQzZ3kzVjBlZHZDT0Y0OHE2WDhQeUZIREprYVRnRmpyeW5SU3pnWGtsMmNpc2QySEdBbnRMVW9JVTdrQlJocnBBakpRT0hMdnl5RVBnR3VMSnhMazE4Ym5oWFQ4MFRnSnoyS3NIbnlkRUVkeUdjUEJOTXBERXprZ3BVa0FoQXVlSm5aRlk1QVRST3A4QWt3bXRZK2ErWVR4eDZ2bGM0ZjdnUEdVc1VnV01kczFTeithZEFmYkVZM3FTT2ZmOVNwR2pjYllvOFFHb3JqUmtOQlFvdkJJQnBCRTRSa0dPZFp3OWIvcTF4cDY5NFUyL1JjWkExMVVGNmVyZUw5OEFvQlkydkFmZ1h3RUQvdVdYWDJDNy9oQlkvTmd5ZmlZQW53ckN4NEJVTUFGZUFMQUI1dDNQdUVGeENhTmtwakwxa1RJdTljNHJkd1pGaEI0RDM3dXRRZ1NRY28za1UwQWQwbXY2RjdjWlhOV2pGWWhQK2k0bW80cVJPS1l1YllCQ2FpaEF0UThkeTZ1UUdncEkyWXMrTUtlV1Y4L2QvQ05EZ2N1RU8xQmpJelRQN3E0azg4d1hUVEV2VVF3TDQzcUdjTHJwdHdPNWVFWmpvWWk1ZDRjakpybFNlTUxOazJUeGs2bjZuVmVKRGxZLzg2clZOV0JFTHYxc1NTRUh3cVlmQ1dCSWNsK1VKWFNNaWp3Q2tjVmYvQUR6aElhTVN1NkxUQ0VCQ1p3QnFXMzQ0RDVWbEIwT2NrTno0UlVOY2J2dU1hb3ZaM0xvS1hHUG5FZHprV21pZmhadkRZZ2t5UDA2eGhqNloxb1poU0hGMmVZbUZpTkJ6Q1UzTW5UalFWaVorU29iZmFyWGtUUUs0ZlVwUXBhUUw3SlU3em43YU5wY0g4UFp0akprNUVncWlkR2pCcVR6anBHdW9ZQTh2YTVIaFFXVVFrYTh3SzFRMFh2Rk55bnlMK0EydlBlcHlHRkJpcHNhSSs5N3VoejBDTXkzam9yZXhNNjcyREUxcHF6M294SXd5M01kU3diZ3lsMlQ1dk8wZDFuSm90dWVHNXd6SlQxVHdwclBnSzVNd2RoNU5GTzJaNDByQzNhZE4xQU1tYlVMaXBPR2N6bVNrRThIaUl0VXNvTVMxVkRnNXVBQ0dwSkJad0JiZnhrT3NyUGV5cWRXUnhXNldTSmQzWHZlSWswUkxydTV6ZkY0UkV2WjFROTRBNENQL2dQakRRRGVEd1J5YWFoT1grTjN6UnNNa3pleTc5ZGdMV0k1OGpBUVArd2hEUEc3emFmZytGMzJsMVcvVlludjlFRjZkK2pNbDZmM21QRFIvNk9nMk4vME41N3BqQjQxSWdXOG9wT09wVG1TSmVvYXg5NmI0NjVCOUVnNkQwSFhQREFwcjgvbFp6MmJWRkdKQ1RTa3dJY2xVUTdpQzFNTVplVkFXTG5PdUxNRWhlUVFXU1d4TTNSd21lTnUyNk9kVVJaRExoQjJJS3hteUlqdndLK0plci9CdWhEejJHUFBmL2lkZE1MTzNQamhnNGY5blJKNUx6MllPSWRUSFFuamFqMjc0UEQ5SlZ5V1p6QnRWeFJNSjFmNDhmbmxpV2tUMDlDbXFBTmh5Qnd6UzR4QWR4TWpJTEVBUW82ZmxUMHF4a0V4TEVNcGJ6d0VDaFdnb1V3Y2VGUllnTW95WkswYjJYa3Y1L2hCaWRCRDFFM1lUR0UwZkRCNUNEMTd5cHl5WjUvM1ZtN2I4Y2NxejRWNmVtZDZVVEZGWElhVWZSdDV6RkxkQitkdjBKU1U3eHl5OC9pcDM1OSt3b2QvQVBBMkFXUjhCd0FVbm85L3o5OFArc3N2UC8rTVB4SVd2K3gvZmprejNzdmtOVGZBdkNUUGR1QkNlQVFqaHZ5VVNZTVV4ejRFcjVEQXJMYXlGQXExYlYwcGM2aDZWQ1NCT1NYTVBrbVdYQ2tMbjhQck4wbVFKVDJCR0FFWGRKTE1qYi9sdnRkN2Y1N2xHRlUwRkZEcHduQW9VdUJtc3VuM3Q3ZktCUkNXVDJkNDBtTlBRRUhabDJGMzJ3V0liNi9yR0wvWmFPSktkY1hleHY1dTNoM2dwbHlDN3QvNS9MSnhDSDFlbmtoczVlSTI3NkZReVhWYllBNVZUa0NOU1VBZjhjVldRK3B2V1V4M3plMW9TU09yQkRqOThlaFBnblduVW5qT0pXNTg1NlltUVFoL0ZUQ1hCbUU4Rng4K3ZETU9jb1NESVI3NzdONXJlODhqYTU0MmFRZ3VONUFZMnowNjJCRGdQejZ3RWZ2WVltbm00blFnRFVIdWtUb3FwR0ZnRVBqS0U5TnpIRldpUkpaQktNaXhaVElEeXpSMUlqbGEwWUdtUTMwY1pWS0ZXTXZiaUM0UVE0QTlONlZoU094QUdDSEhISUloS1ZEY0dFMFM1dUV2NWcxNDBETmRKaCtWRXJ4SmdWZ25DYkJ0NDR2b1lPVFRPNUcraDhpNHVYeVFKZDZCQk1YdE9DeU5MVTBlMnpXYy9ZTmhyV09vVEVUS2t6amFqNmRoTzR0azRzQW42RHd4b2hSd0Q1TDNkRWVsS2lMcWpYWHhrVkVKbnYwYVNueGhVRXJuOCsxYks5dlZXSVlGcUg4SGJBWW5SQkZ6V0ZwUzRsSHNwSlRoT3o1eDV2SEFsNXBEVmtxVGxlMFFoZmQyTEpTRnVzRGNvbFltVEVLdjhPT0pBSjZHdUxUKzVTOS93UjQvQ1FBR0FHOER5dTkrRG1YcG93enA5VS9kLzg5WExOTlJBenlCNGpDMGY4ZXZlSUVzVm1VbzU4SmorQkI2SSs3cFlEclpyUjZZNzB3L09uL1Y4NzNlbFk2UGJaQ1VqRUJEUkIzTHdXVkhRVkdXWVU5NVpyeWNyQWlVS0FCZWVnQmlGenNqdDA2U3VmR3E4dUNnVUJjN1UwcVVvWnQ0RnZrdWRvWllUQmtXTjhsVVVVd0JHSExyeWx0WEg1VXd2T1Y2clM0VDR5V1k0cUhDS0NSd3F3NmVWek8vcG5tV3NNRFJhczR2Z3B3cURaSGxpUnc2UTdkNGRXdGZkTXBRdkFqTzE3NnAvY3JqcWRiS1p6OXJuRTh1VC9rb1lLNm5nQ25ENGwrR1hVeEd2SUFuRW50SVdBQWFZQi8yckNQejFaU3VwKzJ6dVdkMUxJWkFRem1MRWVnaE1jL2dteDBlRWhucUFuWHlVU0Nsd0lNYk5NL1JOd0lWdW9GU29neC9reEszMHY5ZjRIVVRmNXZzR3dFT0NtNzljZDhQRTc1YkFJanZBR1J5ZkZrR1kzeG5BRDhIUE44empGTW5CZkh1TWQ1QzdpMm84QkZRSE5mcGRKU0dIYmlUUWtVcG5tSU5IMEJScXBaU3hEd0FpZm1pcFNITmo0a2pOS1h6c2RBeDlOQU5qN1JkL0pEN1VlK0ZidUwwVjNBQUpRcElJVWJnSWVRYTRROWdubTFkaGtJdlNjcktYcmxzV0ZIeFlsUm9NbU9LR0U1bWRPbER4KzVBdmhTVkFOZHFQdldVN25xVFBjM2RVK1NqM1BHVW5NOXdGL2V1a3NFellIMUhxK2cxRkZpRjdDbXZhQWRlVkxrUHBHdTZHeG5zQ2NLbnRhRVFRVWh6bTBYWDEwUkFUN0lDOHRqSDZ1UkFZb1VBUkFvd3l1RkdYbXJ4TXptbXQwNnlzRXhNNHkyd2g1R2xnTExZdjRZQ25GU3VIcmhJVjhpeFNBR1ZHTEo0QjREMCtBZVlnOENwRDJadStmb0NtVkV6eENWZTBzWERMK2hEcU4rQ3pLeE5MQm42RVo3S2VPemtlOGFWanBjdGVtbnpQU3FOSFAyTEVaQnRaeFJ5QUt6aHg1Um5RZmU1NlRWZENRaktVSWJSNHJ1alFGbXNUcHl0NjhESk9kamNDcU5oQnpQai9FaTlzcnE1UWc4QVdlYVR6NGpzMzB2MmRJOEtTM1puZUpLUEFsWlhHVjhBeC9UdDJYVXhPeWFPdzNaSWFjdHgwUHhycU9qc203NEQ4TExkdnBpOHpKWVZXZmZyOE1XMWVnL3JyTUF2LzhIdkFPVmZBdVpIZ0NDM053RDVROEQ4T3dCMFZHYmE4dmRVRlBQMXFzRE9xTVNlZ0oxZ1AvcWVMM0tNcG1yc2p1bU1LZVJaSWp1NFpVbjUwc2YxZVZuWjEzWE94VU9jcWV0a0lsRGFLN3ozUnVXenZxY1hoeUlvd3lMT1d2RTkrZ2RaQ1drb3dJYmRXU0VCUlR1amtBTmg2UW5LVURJQVlWZmVNTVVldmFTRGpudU9XMTEzY0h6MFA1VGdYUkFDOHltVHNENTlWSjNSSWhicFFDbDZNaDZ6SkZQdVBNMkQ4QmxKV1VEWE9FTmJaMHA2cWFLaFFOR1hvV1FBeEhoNlBwUlRPc1hRNXIrUkd3OHpuYmp2NGE4U0pTcHpBUXJLRUNTWXVJellOalc0WC9JbjQ3aTBqS2psa0FuQ1BzWkR2N3lNK3pYSnlsanpzMkpFNllPMmRLb3JLZ0Fac1RPMGRrWTNmQm1LNVowTVczSUdoYTgzOU5tVFRaaVZnc0QveGpONjJ2dUwydkNZRFIySElIdktUZWxpWlFrOFpCMURTblRBNXlNWjhSL3JkdjAvTCtXamM1NEQ0NUQ1RkpUb3BMQlBRU1JTRGxueExqTFBERHV5SlVXSjRtK2dXNmtpVFh6dllzZWVva0pPVHBOOFV2Q1pNVTg4Nlk5QTVIU0l4MDVPWmp6cDV0Q1R2b2FQRGtIdWkxOWtaYmlYbk5QZTJiaWkvVy9kb3JQL3FUY0E0MktiUytFckF0NkhjZEhleG1QdG9NTGRQejRDaEc4Q0FQTU5BSUM5QWNDSEwvT2ovL2d0UUhnYnNCK3F0SXhDN2R1eHM3cmFjTUJPc0NlcEVKcHk3RVBuaGI4RU9HT2x5THd6Q3BVVUtRVW9jSDBKY2NpWmN0WWZVeDdjUFBRbG4yOFRlemsxZjV3Zy9UM2sySDJLVXJJSDRPa21vOU02WVJneXdXaFpqSHc2VTBJUzNBQjUyNCt2ME5QSCtHalNoNDRWY2lDOEs4ZnJvcE9Pa2VVYlF6Zm1tTGg5dFdCbVFvbm51OXgyZ0pZT0lhYnV5bUZIc3U4UlB1by84c3E2RlpYZ1VIUmVvRlNsaThHSVJJK3NVbXB4dUY4Vmt6Ti9UekZEMHJIUE92VjBwWklIM3JJb1d5OHZDZ25FYTg5ZVBRN1Y2VzQ0YjRTMmVhMkpMSWNoZ01rUHVQNno2M2pBeTBVT1VXeDZDQWx3ZGt6YTlyZ2hRRllrMXRaR0NRUjBvd1pxWUFYTkxMaWRIOHhPV3NZWnpudVVjOVQ3TWNWcU1ra2ZPa1pRUXdFbmFUbENhRnh6WjhEU1hXbFdZN0ppSG9EWExiTGI4SllpdlFTZFVjaUJNUFdhcnRJbmY1MlhPeWdMcFBpWElEUE9SNGVobzQ5Q016cHVqWjdiZm83UzB6VnpYdmtFcy9OejhvZTJGWEszMldSdzdqODFmSnhQNDZraCs4MTdMMVNmNUdtNkNmSU1LTTJuYW5XMWQzTGpkOVcvWWhTZHJTdjAxb0V1bFJ2N3hRR2VFbkdCTlM5VUJCT2tnMm5MRVBlVGkwZXVOdjcrRjk0RDRDTkFFT0RuZm1rU2J3Q2d5Sm5FcDREZ2pEY0E4WFBBZXFhR1E5U05QdHE3QzdxRVluYnBJR3laUER0T0lzbXBKNk1zSHpwSkxHYUFXSDBXV1dBNFRCNURhckJYVFNFQnJ4c3BVeXBBd2FjUVZldUc2V09XK3p0bTRnUHpFUHBZRklKYitsak5hU0daUUdtczhOMlpBcGNKZDZEMEVZcHUxbUs2WGxncHowQlJKaXJkd1RIa1pKNFVjWW56TERnZnpUMlJnc0prM3A0YjUraWdYYXh5OUtGQ3BDdExhSGpOQnlpbi9XRUtVelVlcCsyaWxSMCswNmtBRG05N2VubUtZNCsrNUo5bGlJNXI2RHpoaTE1RGxFNDhsc2Y1TmY4andxdTE4VDFSaklESjExRlFuNGlhc3I2OFdHaGQ4VVN5ay8zU3JXbzY4bUlLZ00xWUx2cWs3U0toQm8rdkRTa3RCVEVTWUdnTmZ4Zy9TREQ0ZkdCN28xVUd4Sy9yK2FwaUVrQmQ3NE9tNkNpOUxBS1NXSG5kVVlWUjI0N3BUanBXdHBQQ0FwU1Y0VEczS0pVQ2dLZWREM3Q2ajNibXdiOFlLdmZiVXBRdWtEN3J5NHZPQ3d0QUxDeEFFdWNZR2VjakZQK3VoMWhpZ2V4blZlRlFleTh4c1lJTHlHMXE4Rmg3S0l5R3l5VW1peEdlZy9Gd0ZFaGNvaHAySUtzTXhYT0ZyVWtwZ2N6ZkE1a3NrTWtjOW4xeFZsYnl4K2N4SWplK21QMExocm1hNS83bXkrTjNkVFhPb2VtaDZ5cnFDaVBJNFdCUStMSmdlQU9Bei8rTW4vM0ZkVHhiSE44QlFBcHUvK01OQUQ0VlpHOEFjSVRRUkVyejNxU1pxNDhqWUNmWU15cE5OTDJ2MEcwb25xQU02UlArYVRoQUgyYmF5SVhJcXNzdzJOeklGTDRNSVJRamtObHh0NW9WbHNCdDMyTXFzWjkrZy9DaDQ0LzZOK0lzSjZldDRuTjZqNHJwSUt0d2tkYnN1aXlZb1RySWppYWRMTFljWWs4d1pwaUxURWE4RHczSEN6QTNrTWJYRGozRXJncERzdTFCNUl0QWxva0Nxb2VJblF6aUJSUzlNZVRMeWVsaU9Xd0FnOU43c0tCblAyNGlQTXJOaWJoZWlTUTFWTzZEMkRYQ0JXQW9CZ2VtK0N0RUVOTGNwbXdlNERrNzhueXRncEM5cmYxOEEzQUk3UTRyWmZKYnluUVdTY0M3QVdLRjJCTHZjMFFPMEJzTTU4b3FpMTJ0WWJZeHIvbEl5OFFrcGVFSmlrZ0hJVTkraEh6T3dQT3VhQlRsdzA1T1RSand1VUNWRFJrU2dhRXhVNzNmVzB3MkhqZXhaSnlkaGtyNEhzWnpIZE04bU9oOTYyZUZaZ2RNdFBTaEZ5T0FqQ1llakVJQ3lucVRvaXdBeHpJUktVWkFJUUtmcnBlV3ZnTTV1QjVrM3lBSVRaNnpBWElUa0w0d0dncEkrUXlvVjFZWklyZUVuSEZuUzhTN212NWtQZmg0dXJESzNSbStheHBYQTZ1cmpDK0FZL3JoYkc2V3g4VER0RWZpNkxiWi9PdUo2S3graVdZMi9WdDByY1hVdFplZ2VHL2YxY2UxMnNKWWFxMDJQdnpEdndFTUUyMC9aNzlaS0RPSG1oZHluSGdSanBNbVhnS3dCMi91WTY3M0I2UkgzbDF3aTJURno1WHloZW5tY2VYaCs5bjZtdjBjb0hIczQwSzA5ZWMxaGJlMU9jNzZTRDQzY1l5KzlJbER0clVkNDVoT21wWlFpbWZzV0RYV0lkNFVYWUlIK3IzK2pmS202WHhuME55UlZOT00rbDRoQWs5MzdGSG5KMTVueFdTR2NSbm1nUm5MdTdBdk9QSGN4NG1maDZMNHFHM3hBdDZxWkFXNDJMRmtJZ1VVY2xDaUdncEFESXg5T2FOY1FFTmp1REJNeWNtUFozKzgxcVlQeUlGcGZ2U1hyVWZqL0dmZ2NxcFlHOVJGTFNDV3RnYldtWlpraUtPWjBPSS9JSTV5L00yV2FEalBqb0d0THVTWVQzd2RKN0kxdGFnRmxWYU1pVWt1RGJzS0hVdUVBVFplK2VQWlMwK3kyTyt5b01GZ3J5cGlJc2FOSmRlb1dLWm5SbVBTT2V1NW56a2c4MXNVT2Vhc2dxaEdDaXZQUUpqUEJQYk1vT09RcU52czVxaTVrU3VYQ25kckRIcXhDbFkzbGQxcUdveEhGemhtK0NQelVRQ2ZvdEZRb0d0R2Mva2dXUUxNZGF5K2VCY0wzNkkzSG9rSXpRTXJtNjM1VS94MzgrbVNLVE4vS2NuZ0hOdTl5NURWWTg5L0taNmFlQkx4SUF0UU9iUGluRjZNbnczazk5S2gzSmt5ektSL3pTNDYyZnN2dlpXaFBjSDN0TkgrT2x1K2JUN01QMXAvbTJIUCttZWI0OVNiSlhpYVlJRUhXSXRrYmNYTHhCUm90UUdJOWJPL3l2anAvL3lmUHlHR0wvN25hWVhYaWQvOWlJOTgvdmdqZmxrYnJ1YVdFSDhEZFh1cmtSNSt4UWZCNFVaYTFzYlBGZ3JwdzJmTTZOTE11OHhnSmxaTEFGdzJUR21sc0FjVGo2YnlNNi9RNDE5NXg2UGNJMGh5MkVrd2k4empPRmNwK1UyMURVWXIyMnNxT05jNG52TDF5S2cwQWt1eHU1RlBHVnExZnpFaDBEL21xaTQrbWJFKzNWeE1CMnFBSVFuQUMrOEFSV016L1dDeVQ1eTVFVXpKMkpseTBmSWtsVStLZFdPRUtBWGNRK1BEaVVISDgyc084ZGg3VzlGVnU2SEkzSE9qNGt5ZDhqQnZzMlBGM01mMU5qNjNFV2RwbnE5SFFETDI0UmFMSmNCRklIUGVuL1J1UWl3ZlRlcnM5a1dXNXZUa1BtY1pMcHhHN0xtTXVlZlE5dkVyZmVKRWpZV042WE5mU05CZ01OSDRsL2VZWUdBeUdQSnpINkVzRUx0c2d6THlER1VrRDFBZ2d0eno0L0RZL3lOTmZ2Z0JkK3RLbVQ3ODJBd2JpRVBMYmF4elhLZUhaK3Bqa0tIUVVUTlRyQzc3ekQyV1lNeVJJQXp3MWlJODJ6NUkvSStIRUNmQWJwNXZPS1B5WDRxaUd3SXJoaHo5eTNUdVJwOWhSZGNWNDNyTXBBam5XNXB3ajMvOGp4Y25nQmptSTBQN2ZqbnVDQW0yWVhiajM4NURFbnlRZXlBSzdsdGhmSGpETVBBUS9jQzR0UTg5d3VOQnh2blFUNE1PVkZFaE1RWGtNWnh6bjZkRUxFVjBPYzZRQXJoSXNjL1ZlZ2JaUDN5Z2lrM0FoMDVTdC9ielBJU0doWmJKdUE3UWFlejFmSmZuQnNJM0pxc1p6YjQ0MDNId1FVNCtiT25nZXhiTGZ2Z2NpSk16WGJGdUtyaVo1Sis3WUo3NEgvQjdHSmY2Z2lVb0RaVGhzYzg1aThQNlA5c1dOL2F0SzZxRG1QaDkwK0dRQkxlWmJmM0g0cWNtV21WdjNDdXhXeW5rSU04M0p4WStHdUtPTnc5ZHZKN3FkUk1nM2lqbXpKUUZrTThLUFdQZ3pLT2ZtVHdiVjdXQmxNNXhHUmI1OUlCcXJHb3NGcSs1N0lZSll3a1pBN1dPcnd6eCtSLzhEV0Rzd3d0Ly93dS82L1BISC9FTmdaOXBGNmQ0YWhIRGJ3cjlHZU5jZ1ZpQ2lPaGR5QmpMOXdoZzRvZUg3eVdPeXZma1dBQkxRQlhjeTRNZnk2UkRMVUR4UHR4SE1UY3d4YnowYnpWZndpZ1NTemdQWUtaNVplR3Qvckh1a1h6Wmg4dSswNmVuZzRIL05rV3Y5eHE3cytNd0tBY21QVjNqT0lKYTE2WUVVY1ZOUTRGa1pUZ2RNbTN1SkNaUmhsTzFIbDBnN09CMzhTbThjZWJvRkJKSW94Q0l5V2ZvR29vWGdCbHg3c1BBeS9FVUZlUFJrT2FtcUVEaGh5NmRIY084cEpSb0gwb3ZBQTN4RzBhR0JKa3l2bkR1NlpKMTV5ZzNiblRLODFkSjIvcnJGUFVGVDZuT3hVMFBHVFl1TzE1VDV2cDdyZFNQcjluSHNaTStTc1JvSGNFY2llRXZNTVdjK01TRWxuSUowam1LZ3VGWklUQk9FcVpFb1RoMlZFYTUzK0hlaEovKzM1K1NYTUFva0ZzWlRubzlzamVNQlJncncwbGlBam1YWlFERVNlRVZLMTZYTWQ0NzJxUmxnTXhqb1NJTHoxeEQ1enR6bENubHFHZDBDK1ZzZ3VHMGxEL0JGc0trVzJNUWd1eThNNDRQUFNTMU5QbTBIY2QrdHVHUG9iVHJ2b1lDTGlZZW9UeFVnWE1Ud01neG80dTBsVWtmeFFPSUdXQS9HNDYyeTNrNkhXVWtTNGk5N0VXMjVoSGlQM3BqcFhpZkdFV3QzTHFqbW53cFZJWXpkVHcrUjZQV1hPU1NxTkNENEpiUytkK0lzUVA4MnZGOS8xOXl6eXRLYlFLMXJpYlhRRFg1MXZHOTlNRVJwOWk1SVh6MEg3ZjcrQlFRZi95WHJ6dll4M2NBNkJNTGl2Ly9pSjhSamkvOHgxZjdBV2tYVGNUQW52Yk11akhpQ2NyUU8xZW9HOTVDSDNrWE9GYmRRc2F5K2RSeTBvT0phMTFkVXpMaUM1QmFQT282OW1IaFBYVHN0dWpMVUNueWNZRmpLVitTa2duUVFXdFRlRFZRUUR5WFpvNUEwVXpuc1pDU0NWejFjY295ZXl5NFVnaktVRDZLRm9GNFV4NzhUN0xaeHp6MFJhTkNjaWJvZkdlMmxHekh6WlBZcG05UkxEN2pzWmZ6SXhqNm9ua2V5bHd5dW1nbzRMeVR4SDNQRjFIeFNoR3psd2E5emlMWFNPWWdtK0hYRkd5Wmt1WE8zWXcrck9STm53N1RQSHVUSjFLSS9YSlVvL3ZsU0ZGTDlMNEdsa3dsbmhuMElTVUI5S01ySG9CaHZDWStpZkhvL3ZIS2N0bDZxRERvb3pEaEZINzB4SjcvTGdWTzlGejlHanNVT2xWL2x2V29HQUV2WEVnTkJTUU94bTVFS0RqTHJHMFhDQXZBbkZpTUh5c2pBYm5nNjNDUXVmRnN1MmlDdlBoUW4vRW85TWIyS0tQUG9lN1ZjNTBPS3VyT05IUmJNYVZLRFBHR2RVNHdUVFRkeGJzZ05XTmhaZXZncGJqSTNFRWxVb04zOVNpM3BreWwwZ1dLUTVHVm9iSUFuaVp6TkEyeTluTVZ0c0EzRm13K2k3QUowUHhEaWRlOWYvQlpIUlJrRFpWSUR2MUtDeUtIcXljVVpWMStCd0J2QUg3T2pVNFEvL1NuUC8yUml0am5QOXo3eDd1RTczc0RNRnRacnhCcVZFQk5FUFNoSzRuRmpPRjh5U3k4cWpzby9rb2h2MFhYQXVMY0hJT2lIdzNZN1lVY0xEczRKUXBRbVNIQ2RVOXNvV0x6N0ZQRmFSN2txZWhWck9vOTBYMTI3RW0xbkpRQ1ZHdllnVW9ySk9ZSVJJYSt2UUhZb2hqWWd0QmZWUVNrY2NHTTV0dnhlUk1HY3ZKajRoejZQbXNlb3VSVnkwRlBjYVlvY1N6VkEyVkZzT2V1cTRteVNyZUZ4K3NtL2pVeVhCOUloVmg5NzJFbEZsN2lucjRZZThhUlZNaUhqbUZiTk03VW91Ry9QVUdZaTh0ak4zR2ZIdTFNMWhybWlHSmxwWEVyc09wS2dFcGRqbHd2a3ppNjhUWHp3MUVtSmFYbWFFdzB3NWE0VjJtQ1lXb252d1NST0YvNjNWQUNBQW1HMjlUMzBNNUUyYkljYTdnUVhUL3NJUzl0OUlRdThQVjhvNWZHclc3NEtCWko0TGsrQmZFQXdrZ1JmZ09hUHE2aFBiRjBJb0h6VGdwdklPNlFZeU9wa0pzb3VzQzhxL1lzNVJaUWhqSXB2QTFaZk5zclNwWkQ3cjEvenhrcCtSMHIwMU8raEVNMkNRMEZ2T0pVMWNlYldId0gwNEw5aks0bzYySm5oS2REUElJVVg4QzRTcmo2TTY2cjlERkRSVDhxdnk2SVpyN2cvNjczTHhqV2pxOHJpaXR0dWRqbUVBMk5LYWdvd1ovLy9HZThBZmpsbDEvdzlYMHkwUC8waHovODN4aHdqSG5qMzdlOUFZQ0R1bkVnakhrSkN6akppZDlDNGgzRVhPZVlqM04wcnRYTFFjZTYyb2VEY1Q2UXVmdDRYZVc1a3M1aUJKSS9MSm82OFNvaWxTN0FVQm1XM09mb3pjRk5pb09HYmYzV3lydXQ5Q1J2enBTNVdMZ0RtU2prRlJVbGNJMXdBUno2M2cwblQyNmI1Z3pGOFhkOFNsK2FZWlFQekhLbTRLTUFwUGdiRUorRzlXcXlSOWVreE92NEdyTk5vZkNvY21SRStyeEFpcjhCOFNXUlEwVUpibnQyNVZHNXlXRXljUk9zclVVVkNhRG9BL0FFeVVoK0xGVDBEMVlqRkVjckx1SWNldnE5MW5ZMEtaUFlIVEJiMlBicjRhYVpMWW9jcnl6SnY4SFRRSy9CNkVYdHpHQVFKQmx0Z2luc2o5NURqNUxaTmVPbWRTZHJxcUlDVXBEcFBBU2RGQ093K2NTN3BqRlpDb3BNd3c1VVRpRXhPMURCMFI3MXlpcWdESGVycmRYaE85LzRsY1Rub1d3cEsySkZXYUpIYjN3cTQ2ekdkc3pxSk5VNjRTUVlKdlBvY0JoUGw5eUtySkFscXFFRDRlbThIUjJRRWhUQTRTVFp6K0VOM2hRY2ZKNjdyVkgxOXdVd1Z1bGx4c2RXWC9wY1pGc3pxblVSNndoZjQ1OGRNdlVpMDRsVy9YV0JaUUREeWFEL05RWFljc05OUDk0QUFPTWJBRWpoWHdOQXluZ0RNT3kvNHcyQStpakFoN1BGNElRRlhQa1NJemUyVk0vSDRWeUdOTVJlUEJrc2NHSEFPK2t2ZUo2dUxBZWpFMXJ2enBLNVNjRjlTS2MzdWE3cFdiOEpjeWtSYnhvdm9TaXJrQUNiT1lhazZlQ1ZIa2NyajhFeFhRNktpaEZnNkxiSHFSSDIreGRCWFl3Z3RtZUdVVmNTKzc0N0tLcjBvVkVnUVludVFTNU9YRk1razBCTUE5Q3Y0NnNvRXpsMDByRnJIZ29wQktCMGdSb2RUL2RRVXNPOWNwMHNJV25jazFoS3RCQUxsSnVSazJvZFN0TkJNWkVBL01CekxzczlRMnlnNjROUmN6TkhNb0FNampjQTRvZndVbXZhek1lVWVaSGx3MmRXQ2hjNTgvUllRbmpKVVFoQVF3RkZMd3pTTjRmUUIwR1MwU2FRYVFPOVNwTUVZYkpsYnVROGdwdHljM0x4RnJpazNQU0Z4MEVRNDBCWXpYZEdJUWZDVXgvWDBJbFhMY2lrZE9CWVdVY3lvdmxtU2pJQjZLOHBDTmgzQUpSeUEvcXRQcHNnWHFQR2NTU0kvU0R5aXI1SHM1MlJva1NTV24vbkhYdHV0UDdpZUhtS3JEcHdHWEhmMzdKbWJqeHlybEoyazlTczA5NkhKYXNNUTNtMCswREdLcjNjVkxHRGx3NmZaT1BrbHovMGptdjZZKzlQaWRYbzI4ZjdKUmNOclo3VUFINEFBSDhGREVOOHVvZVY4SllBSUQ0Q3hERmM4QU1BbUNzdUFQajR6NDgvNFdlK3dOSHJ0LzhaZ09tOHJxUnFnd0I3YVVyb0l3K0JOQUt5N2M0NGF6ZFpUcG9NRnNFVHZST2xGS0FFOGIyaVFnS3E4c3lVcUlZQ0wzMGVaTDFiWjBvaDNWY1UvcGdDRFU1QktRVzYrQ0VFOFZVZnB5emo0NERLaDZBTWgzUWVmVVNMZ01OOXYveWRWMHRPRWpQaHhpdVJRQ2tkRk9Xd3pRYzNKeitpdVJ3V3hlS3ZlQzloeWlHVHZvaHZRNjhMTE5rYnZvaVZUdDZqd0J4eWYxUjJRV2Q2Vi9FQ3Bqa3puTFBnbGJTVW0vRjZzaFUrTGNlNnAwTmdBTDVZeWxNeXZ4d3BPc0I4ODhrU0pacUpqS3c5TmF5bEVudmk2TWR6cENTQWZuUTFHNkREN3VNR2RwNDl2b0xxSlVySnpneVhlWDgyTkRFWlRnaDcvbFAyWjdCMXRzdTlOQ052R0ZkMlBhSWlCVlQyeG5SKytuRGl3N1BMeUlnWG1PbFJ1Wk5pZktXTkJCeDFsVTVHZkFkRkdZV3hUWitpdncwakk0KzFCT214TGNKaWdzYmh4YXRNZ0ZuZThQRWFBQUJBQUVsRVFWUXFtTlJnaDIxRWs5ek9oV01KNW5EdkFqQWNpZ3d3MzZ0TXZhYTcxbHo2cVZrTFM4YjNSYXhRNGN0UU1nSkdjeCt2djF3TjF5aGR3S1BDSmFxaEFKUlBrNUZSQmR0UnFNSEhzWmQrRkw0TnpuTW05RFQvVU9MU2U4L3F6TnVlSG5XNkFrOFZHaG85cVgrQS8velAvOFNQQVVETXovOEk0RlovYk15SEZOOGR3RGJ0ZnB2SDMyVHk3MDNlS3o5T0QxYmRyVE5hUFRlOHlhQjVDTG5EMGRZRjMrL3pKUWN2WGZBYkgycmVLejlPWHoyODhZVDRvNndJeXJBNE1DcE5HVktzcUZvVjMwTmdSRHB3N0Q3Q0ZFaDI1S1c1eVVxV2hueWx6Q3RqWEZ3RXlKZG9HUlp4R2NxQmZJODZYNkpsV09wT1o1dkVQUHFhL2cyQVY0ajVHZ3Bzdm5QUW93K01RZ0NPcDlsNDdLR1VqOWRaUlpYRnFQT3VoNHdoQ1JRVjB6V0ZjUWZQVWcvU0U3Z0d1R3pLRWkrbXAzdm8yN0NxSElFOEZSVURRTklaWVlTRUhTaEZRTkhPSVBUWlo5ekxYc3ZKdndBNUM1ektyZHNaeVFSb1dJYTNLaWZ6dyt5S1d4a1dFMGFsNmVEV0laUVNxMkdSUFNTTmcyZlpjOVI5anZobCtyT3NSenZUcTNkTlljcVFEdS9KWHZIL1ozNnJGY0M5KzdPVkRoTitCeWkrQ1NBOTNnWmdRMjU4Qklnc2J2cHg4NC9mRG9yaHIzLy8rKy8vcjkvakp3YndiaUNWK0RXbzYxMEJyajB5VW5rd3ZqbFB6Q2l3Z0hpSkdkVVFTbUVCa2VFVGY1cCsvVzE2RDBsUG9OQnhDSElUWkZreTZtQU04WkNiL0RHU3A4UnVLSUZreXNVRlAvRzRtcnZTOFd1M1lWeHl5UlpTUXdISnhBQm9VM1RVbUE5ejluTmNWbklPNFNPRnNFQUpPUy9jQWJKSUtrUWZEUVhrMzRFMEJHV29Fak14djRMZVhuejFOS09NUSt5eHlkQkR4Q1UwUzlTWHlkSVlaR0swcGplcnducy9NdkhHc3VXWW5rQjhCd3dFL3lVZWpQZ2Q0RWFJdCtZVmhHdFllUlNZYnF2SzdwYlBENXc2a1JqNzJHSlBrOFF4dExrQWJneUgwamdBNWlZTmhyTnRnTmltNURkNzlGcGpRdG4venE4cGxBNXpFV3FVYmNNbTI0MFpaTlltMDB5MlF0VFppckVjRm5TQVBCT0k0OURsOTRjeDVNcjRYbm9DVmFHR0tjSkZ6T2lSWkIrckc1YU95WEJDMlBOZnp6NHp4eDVBbHMyU1djaUlSd2lmeDNnRWkwWkRnZUlnUG81c0hsMGU0NWc1aHhQd0daRXRZTTNpdlRwUEdHZE1nenBETmdGS2pmNDc4TTRWWmFzY09pbGNBQS9sUjcwRWZUVjVhaFhiMFJ0V1l5WVVBYktZeUlheEp3TlpVZEtLcE85SFloYkFyUkpsdm1kbHBVemJtTEhJWVpJUFU3Q2REeUtWNWFCTVFXN2t1WmVERjUxa1RGcFpCSjN4aWpPeFRrRlpwY3BjL2pXcG80TkkrWlN1T0pTc0F6WEpFSHdlTkVXc29ZQnllVjNSOEFiRTQ5alN4QmdRaDgxbitsRjh5RytVR3pJSVc5d1BZNjh0NytyakpnVGZBZUR2L3BjTk5PRDVxNk5GVnVBMUhGZWRqZUZyb3cweTlDRFkxTzhHdjYzYnU1ci9yMUo5YVFHNytNZ2NTYTFhanlwRThGSHdySCtUL2tienBwbmlVNGJlWncrSkVaRCtKU09aZ0J6ZU5BK05KenBXK2tkU0FvRmlTeXNuWGFsQ042QkVadlZjSmhhWjNLVHY0SmlpeEFJNDFGNXVSVmI0cm9kQUdnZkNuaUx5Q0VDS1IxWWZrcVNobERjZzNyT1k2NHlxRkQxNTdmbkNRdzFKV2JrYk1XVkZVRWlhT0NubVM4Q3IzS3E3NWt2bTNwNmJPUDZxUnZvRXVKOWYvK0tGMW9iRUl2TmxPTzd2OVM5Zm1kZVF2RWlCVzdkN0owTUZVcndTSDVpVTF6dUVvdWZ3U0tKRTRWbjBTTG9ZZ3E2NWtjK2VqRDdzUzZFeWZKL1kyM2kyZW83Q0RZSUhEVU1QQXUvOGpleWpCb0lIRFVNUEF1L25pRC9tSGdYZlgvZWhHWmpUM3pXZDhlaVhzRnZGL1gzL3U3ZTczVTkvL09NZmVHY2ZtZkdlSU9QLytNY3Z2OFFQQzg5UENBVUpHWlhFUWRtbUVEakhHcEpVcUFPYWlWY2llZTBsQUlpTFdYYnNaUEhwb1NLUU04QVFjeEV5a0Y5QkNmVFJCd0xtamYwWXJjVDBleHBPZzYxY3ozSlpqNExwZ2s2NjVvWjdWaThYaytWTHg1enZRYk1mSTdmMTBwN292SEFIc2hxaGZIRVVlUVFpbWRJOXhVaHBJSDhZWm43bDFwV21XZXN2d1RjQXB0d1NSeFJWN1hDN1dGZ0NNUjFJSTdCcGVDdlJEcUxFUnlDU1Zwc2hZdGEyc0RTRkFiOUNzdzB4Qk0vN1lvaWhHQWZBbUN2K3VWdEljeXNWSngyUFI3MzRCdWIxWmM2bENIaC9wSEtLZGdZaGJUTWExM0dRenkxTmNXUWZsTm1ZbktrWlhaMzBjTURMQnpkbGxTRjRNSXAyMEtQSklHWExDaktJSk9kQ2RyY2pNK1NuTm5yMTVmREZLaXV4b1Y1RlRBRThLSVdFM3dOempQTGlmQTRkM1NDZEgyUlhyV082UnlWd1V0aUIxcEtrUW5DUWlZTmdaeitWbi8xL05ISEJzYTZjcFJTSUJ1WUdrdjNyakN3eW5wcFRqa2QrWU5LSWhNaFNZZ2RVaTYvSmM5Yk9kN0V6eExsbisrTWdHTC9PcTZPdHU3bUEySDM0MnRqMXptejZTUGh5UDcwSE1Tb2tnSkJqS1FVOHFoOGlWOVRUWFVsQk8rTG5XajF4cEordVJWNzZBZnMxWExKeTNRQ1Awdmh5REQ0Q2hKQTI4TVRYTndBLy9md1Q3cWI0K1o5d3owYVJFemlUQ2JSWDZNZ3d5cElVU0M5UWVBeExxQWpDamRQSUFNV2VJdHdCcldJL1p5UW14R09XeWVHN3FGUFRRUnFzTlNFYSs1YkZFakxwUXc4NTlpck02b3pySGIvUlU2TXNnVnV1Vi9lbEtva2FDbXlKbjliblpaWmtBZVliZ09kQ1N1RUVOWFRnMkdYUk5lODk5djZMdmd5UC9SeEpKdmI5VGF6MTl4UTJmRXBaSDBsNjJ5R2VJdlA1NENuQ3F0SVpoZTc5Uk1RVHFRUWpVb0JLckwyWUVPVlJ1TzNwZGl1aEtBRk40am8zajZ3RURMa01XS1NBNjNIWkZTK1FnbkhFUVBwY2xBdFErQzBkTVN2TnJCU0ViUVl4ZzFXYWdobGFQY1BEY29kS0xhWFBFS3Y2NklveCtTYnd5WG9rRFBkWE9BMTdpSWtTREo5SWJ5VVh5V2dUZUJNRng2ZGlZcXVGaW13T1g4cW0vR3JiZlRwejdFb3lBWmVKUElNMjJiTXN1MmZvUWFDNjBtVGVtcko0Z1o2Q3hWZlVRY2RrZEdoZElOc0tjT3JQaEpHdThhZTYxUXJqM0VwZDlTOGVLc2Q3MW5pV3VhYUxQYnFuTCtjM1dROCt0SjNQK3Zxc25OSHh5RnFxK0FZc2h6WGo0SlJMUVJrbWlZU3Y5VU9yNTcwWEVuWWc3RDVCenZNSFBEVlNuc0hqZkdYaVZZUmxLT1pMUUZmbWxoWHJLWE44a2g4Ly92dVh2L3dsYitialMvclU4NXNEMXpjQStDMUE4UWNCNGdjRnNDVHhpcUpNNUR2MjhwMFhBMERzKzI3RktEMGRxNHBJZ0RoMzVuZyticjExVWd3Tk1iZkNnSGVTcXlYTk14aml0TzVLVmhUZmh4NXlER1VaZmltM2k4a2NiVlZJNEZrOHpxWXBLbGthZHVEVkVjWDUyalZpSk82TVFnVHo5TVpvTFpxeWJxRHprWDl3eUs4QXpmZUV5cnFJdjlCQXIwVnpsU2hBdzU1STVpSmdwNk94aTJZY1VrWmpuOWZFTlJ3ZThTQ0hEa3EwQzRwaEY4aGhVK1lCQmtPeWFEQThNczRUYXkrZnlkUmZ6dU1DNHM0Z1Y2VEFORnlQSlpUcnVxSXlDWDQrcjVReXdEejN0clE1U01ONTA3ZTNwTmNEVlpsSlVVbFYyQkwyWWxhVVQ2MjR4NkpxR3V5UG5vaElGeGZtZVRpV1lhOEljbWFoRS83Ym0zZ1lXZS9UNUVHdFFrK2FiNGlWMG1Vb1EvRnZBTEs2REJUZERxR1RQbGV6cGh5ZGFWaHNOWHhJOFg1Y2Ywd0o4ZVU3QU1vVmNPZWJHOFVmVTI1V1drLzV5eXFBdFpvQzdPSVUzalFZejAzOEpPSlJwTUJ6bERJWE8yYnVaTmpNcWpMNVVVSEQ5NEJLNmJVQ2k3RVphU0lXeFV2L0YvcVJ3eEdZN1lpTDZZQ0t5bHN6RU5Sb1o4WVZhaW05TWFVN1dlcjIwRXVtWEdsbkZocjZJWDVnTjMrUkR4ckFiLy9FM1QvZUJrRFBEY29KZjdpK0FjQ3ZBdjBwN3Yvamh3UTREZVFBWU0vOFdlL3dTQTBEd3A0SXpHRzNFdDlEM1pDTHI1UU9aS0pRTWVFUUIzMFRwQzhabHVnKzBqc1kvYVNwODZ6Q3ZmZys5SkJqS010UWh1SUZibUlYS0ozQVF6ZXNGQmNrT2I0cktnR0FhNFFGSkhDRzZXTGVBUGs0Y0IrWnVFQWt3Zk93Si9JdTZNU1BNK1ZvMi9WZ2pxVDZVVlRNRWR6T3o3UmZKV2J1MTk5bDRXam1hNWo2SVppR3E0UUxoRjBtMGdHd2I5SVh3Q0gyL2xURkVCdlNiM3VGdk1TUnBBTkM4TStYZ0pFaC9nRzR1V1FpeFFnZ05MQk9wbFF2d2M3TEtoTG5zU0M1VW5LY2k0UCtOWU8xT0c0aVhOS0R6OUlyM3p2aHFUWmovYld0dTRucFl2VUEwS1BHb0Y1Y1lZeFpSeWhuR2dKMys0QjM3V1o3eXZ3b09DVTljZDFRVEFjd2VrbDJXVER6emVBNW1tMldVQXp6UUJmKzFzbVJWNjZpWXZ4UWlnVG9tSXdPbHd0a1cwRzhPd1dISXJ5dEhEZVh4a1RVTmJLVmxaZ09vT0dtMENUbVljcXZsakNhZTNZeUpsR3lOSFFnWEoxenJHZ0hpSk1zSVExVFFOYzh3SVM1OTBUWG0yUkFSUVZjQTFMSEN6eEg0c3BRZ2p3NmJyTWxLbjFUbkFaU2RpQzVRbVEwRklpclowNWlNVW8yc0tLNWxtczROVGVtODhnNGt1bUUxK3ZwMkI1MWRkMGo0NVRUR3dCOCtSK2YvNEVHZW02T3IyOEE4Q1RDR3dDOEEwQnoySkNKTkFFTzk4SnJWS0ljK3A0ZE1PRW9Qb1lLaVVRdGp1QWJVSHc0M0VqNXhyazVCc1c1REpFT2h0S3huOTFOZXRSNUdIcklNYzFIL3VrQll0YzdsdnhJTXVvaHg0aVc0VUVQaWhmVU9kK0RKa051SlN6QUxPekpPQy9jUWRYamFPWHFkNldZa2lLK2c2TEVFRk9GZlQ4bHBFek5XclRpcWFIclJSYkFvZS9kdklnOVJITUpWRXRNQjlJSWJKcThxSk1SRDZYRVJ5Q3lKTXBCb0NneExBeVVTenpQSlRFRXR6M2RpaUhKNGtBTnptVk0xOTJLZzZ6RWk1R2hRbUoyRU9jb0dMNVlNdVFDNTJtMU5Jek5EdmRDdlBERURGSS9xbEF6OCtyVXVqTDBjNUVUYnQzR1BhVkZhVTRtWHloVUp5SmdLT0MrREQzVXhTTWFEczBraUNRNTQySjBIMUtPZmUra004dm1pMVZXWWtPOWlwZ09rTjFKTVlwMlJxR29iNGVBeW1kOUxPdjhNdllIWlRwTDg4YmMrK242YkhZY2E5bEd5dXpIQmNIUDlkbkU2MlAzNjBZZkZ0a3NEdVFBdGlwMEdrc3RLNEVSemdlUVBCZEdsN01CYWZMaW9SRUF5emtUR0Q3WXlIWlFlQTU5cnhTUnp3eWp1V2Y3NDRRMmZwMXA4Z1NRcllCSGhkMkh0MHRkNzh5bWo0UXY5NlBTQXZMdkFCcVIwanZ3NlArMm53SGcvWXgzSzh5cnJvWUVQSzF3OTQ5SjhVTStlQU9BdndGTWpCUnVFQlBnSjMzSEFjQkRucEp4ZTRQVFBIN1IxVGd1V0w3ZjRTK0U0ZE5EU05PcFh3cjdFTFhoTG9iRFFpcjZQUUROekxhdk5yZTY0aDlteERtTW1jeEpiYVJPWGdQdkZra05QOVNYWmdHMGpZRXZMNGFheTlKOUJUMmtQNFNzUWxrU1JzYXk1U0J3bkZCeFZrVC83MnpwYzloL1RQOG82RDA4cE93aDNMZk45OE1UaEZ2T2F4eVhPZlZRNmxsMG1iWE1DOUN3dCtvTW5xZW8xczhIYURxWlQwcThKczMrSjRDNGJOSTg4MTMya1pGQUFDV0luWG11cTVTUE1nbDZDWlVUK0hVK0Y3dllLMHF2WTh0VFFpZkdLcW96UktmRVhIT1k0QWpSbG5vZXJ6aWc0T0UxbFNwZG1NaEtCd3JpSEJ4TTNIWXc0aWxRVTRsZkRpRWVBR21vU0ladEV2ZDkrbThIUzVvSTVVWm1qc0laR0tTWURvNVJrcU1mNXNnRWJEUWQ3REczbHhnR1NNTEN4b0RHbmo2WVBYZTlDTzc4ZFJRdWw3bWVXNVc0QWVrRnZHb254UWpFOHNRbEtEWW42U05tZ1NLa2Jzc2RsRktLMWN6d2NwWXlsNzZrdTRtSHVDUzZKL01RRm5rTjU5TEZiT01rMlE3bGtwMG00cVhWL0JIUVo1YXk2cnZhYTB2c0V1L0grU04yc2VOTmpDUE1TbjBQSFVqbjUwVmdjemdOZXJrM3pNbnBNOWVkZTg3UWNDNE0rN3pFRjJESG8xUXBRMVVzcmk0Yklic1FDWlowRFFHNmc2SnFWb3lEdkhsNGxyZzhNR3J4a2d0TWdEMUJsZWI0WjB5QWNRRDh3NDMrWERGY0tuL0Fyd0g2M2EvNFdZRGY0ZE5BTVA4aDNsZHNQbmZyWWNQWEljcDhYNHprUTU1RDEwaXdsYzl6RzVXVUJkQ1ZSNTlSWXJjYnlsd1RSdVlyN0ZoTnliMGlTTGlSMFY4bDhLTFRLdGJFK1RTZjZ5M3JCQzVqRmh2VzdBU1lSejFKenkxWmU1RXhLbGF1ZVFnTldaNHZKNWxPZ0RWQk5KYktPSWVJMWZZTWJUeGswSGVOMGdXb29SNTdiRFQwWFBJMFpNUEtZb2g3SmtwUVFZaDRnOFdqcVJOakRmbWNDbDIwUWRmUCsyd01icUZVOHdRUHlaRmxlblpMdlhJTi9PN0hmRFVBQTAxV1BEeGZ2QnlWemh6TkpmTUdlcFl6ckU2bWR5SkRUMEh2UCtKM0UrVENqdjNqK3NiS3pMdUJMQkZtdWNBQnNBbFBnTlhZZmpNeTJ1Q00yRThaSWo5czUwcTZZZHF2RXRNL0hpTWh0d1hDSkU0cTM5UXdTTWN4SnpLaFZrNTBIb05vbUovYkhOR3hra0V5TWU3K0l6VzNoVGljTVZUTW9reko5bi9OUHhIUCtZN2tYQnhVUkQ5ckxlUHNSUnpwMkU4L0psejNTNWFsT0MyUWVmKzZla1F3eVRCT0RVSk1xTTVuOW5mNUFyZjhrQlhDVlgzYURBYUh4ZFpxQnVPUnMzT0dHUEpqYVpVUW1MbXhlazR5SFV3SG8vSDVGWEhQRXQ1QmRCTnptRzE5QU9QOVVWVGVmVWF6SkJXYVUrRDVHZDNwbkZHb3BjUlp6NGxrYUZ6ZWM1bUpzL3JNaDBaSFFBQkI2aFBBYkd1WTlreGJ5YWNaaGZjLzF0ODhwWmg3MWhkMjRETHhvYytlUEJyTS9pelk5TE9sSXptbnhrYldmdk9IUTdRUExsYTA3MFhPL1BoMCtNUkQ3eG81RVBTUW1DTFFzQWhrQ0Y2aERsem1PSk5XbnpodjlLUkFDQmhpTWxLU1pCUjdmQ21jT2JRRkk5RFAxVERCRFZ3dVp1RGNLQnRaZk9wbHlXQmkxYjErSlBpVlFiWFNhZTJNcitrU3BRK0VxQkZsWG03SXdzZjlmL25sRjN6czUrZWZmOGF2LzBjaWhuN2N3VUNHRFNCKzEyZHNVUVhqb0hqTmk4cDRjbVQ1Q0E0QUVXV2h6RTFnRWh2L2hkWkwvdnZodDlYQWpMZ0VENFU0Tjk5RDdCTVduZ0M5QUw3dmFPWTlOSEVKdmVsZnFjL2k1NmhNSHNDRHd4NktTenp2Y2J2YnJ1enhZRnpqV09vanFXZ0hIL1VTVERBT0daNFE4L3dobzBNWmdORThHOVl3cXcrWnBZTWVHdVJOenpYVFdYZjA3c04rbm5rMDIxaUdMSE9wcTdtTXpqTVg1Q2phclp4NUxrb2w5cG9hTURaa1lkOUpaNHB6cG8xY2w5Rk5ETE5pL3lQdk5yWkQ0Q3RnMktZYUZWNnRmOGgyY1k0T081L0l3dlA0alZjU1grNjVQdVA3cnZOaXBWeUFrVDJ6OGxZR2F6RHU3N1VhMlEyZmQzeGpNRTZKTU1oYytOQ1dlM1d2NFFKNE5jMDNZSXZKeHFLVDFjNVlTV2hBNzIzSWV3SEtOQjZUbW03ZytRb2ZGWE9aZEp3eWNjaVYvZ2I0TGNPb0x0TzU3UE1xejhDaFNtbWJkVU45MEs2bWV0WWJKbHg5UVF3djZ4MlpIbENMZW0xdWFxcGc4bHNES3FYb2pla0NLUWxjSUN4UXhCcDJnVEV4aFRMY21SZzF4bE1RM0RaejIzZ05KTER6S0lJb0V5ZHRZV2Vhc2laeGZid3A1NXVYUE8vaUtLOTNVTVVySGM1OTNNeUxBNGNmeFE4Q2hoNEVLTkdqblRrMmRzenRTbmR6VENWV0VHU2NIRHhGYkU5U3ZJTlFuN2JwdEYwUzNQeVV0SEc0MlliK2ZOZzJZUXhVRHBkYy9ORmZmT1lIN3dUQTR5TkFITGFNSVBDWGdQUHZBT0JyLy9GZVNUZG4wU2NzN00vc2dnaVNid0IwV1JkQXlEZng4K1VwWGdsSWNpK3hoZ0lNM1liaUJZcVY4NDY3Ylk5V0s4eDNpdWJqOXBMV1NUSEZDc05qcUpCbEtCT2x1OEN4bElYMG9XUHBCUlFWNktITytObnBpVGVjRHV1dTFHVUlhZGlCb2dxSldRQm5aellrelJ1dzBxMEJrRi9sZTYxd01NK3pJRHRXS01zZTF1R0JWNjdBVFF5QmpoZWhFWkdrNFFUanhXc091NkF5UlZtR0t2SE1JMW9FSE43MnhUYVM1MFJ4ellwcjZCeDJVSEl4RkhNRUdSODd1TjNNY1RtKzE0cUR3T2pRNUZsQzAyTVcxRXJaWlBIMTNiRmxJblk2d2pNd2Eza2laU04zcG5qdUVRZTUyMHRXQTN2UjFjb2Q4UVdNTGJGSU1pQm1tOHpkWHFDdmRudWJtMHl2bE01MmNqS3JBZGRyNGh1WmcyUHA2VGJrWlVnVzVKanFOQ1hoTk44cnpuaDFjNlU4YndCODkwK1NHZXVXd20xN2lxSU9oRlhGUWNmU0YxQ0dudmdRZ3N5VkhITFBMT1Y2eUZNa0tFQkRpWjFwSlhBdThIMXJSS1FFRUdhS0VzVjNJQWVHY3M4Ny91RmgvQWRHVmtPWEQ3ZjBvNWlKVE5sTWJPQ0dYVGx0TVlYSU9RcGtwaWdXVk5pQnNGS1dKNzlzN3dFemNicVljRmhJMXovZ1l4Ykl6anR6dXFxYzN6OFdwVXdJY01lUHYvdUxQWWI0QVFDOEI4QVEzU0xMTnpBZjNnQkF6YjhGcHFsKzlRMEFsaG9tck8xN2RFWmVwQU5nYmc4YWhhWjJmMDJkYkpHVklWU2RFUmxQM3htZWo1dStrMkptL2FXL2hXNjhIQWdvKzVKWUU1R1Ywbm1pYU5nRkR5RVh4NkcxVFZrQ0NoYUd3MEpDTE9ZQlhHWHpEWUFFTWhGekJDS2xGeWdoOFFXVTRjcWFkMHdVU0NiQkRqQjlFR1B6RkNVV1VJYkk5S3crRkZPQWZNUlBIemlDUzlzZFNPa0E0a2lVTWxKek8vRXFPbXZoY2VUS2g0eDRYSTlnRjBQZmQvTnNBTHJzbm9NdGF6U1ZQckp5SU14YTFITy9NYnZERmtxMW1BVFJ6NXpoNk1lZGhaVUZCcmpjRnpKS0Vuc1g1M3hsczBJVTc4cngxdWhvTGd1bERERFdVdkVCbkZZS1lvNUxEaTlCbGVUdC91d3BOUnFFRm9XTW5LSGk4bUxZcTNjR05sYnJoV2trZkpEMUt1dWVQczZPOFcrUThRWXZQOE5BWU43eUVWRHd4amd2dklQMUpXVHlpc2JNNXR1VERoUlZpTTFvS0pEVEcxWWtMYlR4bW80RGlRc29RMDhCUmxRQ0Rpa1FLZEFUaS9JNFZGYnp5YnZiZkc0b0pGQ3NDbCtpR0ZLdzc2bGFid05rOGdCa2RRUWk1Y0FhNHZ0UXlnRDdaQ1YyUVAzY0k1STVwdGdNalEvNGVCSm1mRHdEWlNMN3haaW5TQUUzTWVFM1F0a0t1RkVuL1lMSnRheXJrL2t1bzZHc0VNSWQvKzkvLzN2c2dmRlpJSHh4Lzh0dkFKQ0pEZDhCUUNZQUZoNWxBb3pIMFZXR2ZFWURGNTVEN0FtVW9HRUhSZE1GWW01SzhRQkZYSVkzQVNZSkphYzZIemVyVG9wUmRURUNQWFJyUU1vaWVMWmlsalFDY25QRzhjY3FSUkNHNjVNd01lSW1UNEVad2VxOTBkU3pTejRkd003SlozOVgzbHFWcGppUHZ2TkJHZ0YzYzVLbmtFZUJOMEYyUEpseDhackRUZW1KRXJqemtTeFpjL21IODZlVTZJZlBlT3dMVU1nQmZJL0t3bVBvV1hKZUpPOTY1NTU2UkdPYnBMSUNXSHNTa0VSVTArd0FtazUyeG1YQXRrRWJCeG1NWi9GMWlvd0VLZUVsZEJNam0xT1FnL3pKSEtld1ppMTFBQjNoVlFJc3hSU3FTcExqM1lWSWFzcCtSWmY5SnJuUW0rWTQwT3NXbytQR2QydDMzUHI0SEdhVzY0NzJUK1EwMlRSSGNsTThEOTUxWkZYR1BSTmNqWXdhR2dxb3NwZ09kZzNpYkloZlo4VlJJb0RxQUpnN2I3SE9EZEJ3MmthR3NBTmhDWUt4eGFGQWUrazdrRU1VczYwcnhVQWxMUENlUklxeU9yQVdWaFdaVXorejhtbGh6NDNKRHc4TkJSZ293Nk41YXJaYmYyWXB0NE5pTHNIb3hoYnRJNlBjQ25BcHl4UEk5OTFOV1JrYUMxUlNwRm5BVGlDZVNoWUtweldjSi9GMnptVXhhWTU2a1pTNU9MTy90bE82Z1BJN294QUFyN2U1THArL0F3QXJ1bUhQSHdERDEvN3hCZ0I3V09HUEFHQ1BEL1BRRnM3YXdGeS9BeENpU0lzM0FFaG1nZUJpNFJrRTJGNWpZankzeko2REtTUDVFRkpDMFlBWDAwSEpra0E4QVhtUDNyREtZUVdnNGVrNUgxY25raDBCaTc0TVVhd1NudFY5dm8xeGN6a0lLQ3JBVUJsMmtvc0R2aWg5NkJoUDByR2dsZ0xCT3NHTWQxdVpDQ2pxak1nakVPa3B3aDFBcnhTQ3JpRno1ZWNOV1pFVjJ5Z1RFNDkvMnR6VE1RWEZzQWh1UXp4OVN5anJnbHVGaGJPZndSdDVWQzZTaHRxeld4OTJLeko5ejZ3akwwT1BOakt1ZXBoeDdnOFRqMWhPbkhzTkgvU2JCc2FSSHY3bXczSWJMMEU0ei9mTUtwcmNwYjFJV0s5N3Q1UlVjY2ZxeTIyRVpwK21aUFBMSENIMzc4UElIZllCZlJ0enpzVjAvZzNtYzM4b2FUUmZ2M1BxOFpJVEdyN21tK09XYVB4N2VIVFlTVlJ0aFM4RnFHT25UTk1lSzhza21HOTJycDYySVpraXlVbmlDckV4TTZYcms0bWlzOTY2NDhkUlRCTFJBaVFlOTFLcWxUNmpKNUVDaWpvajBnRlBJTXF3SjREQU5VNGUrY3pibW5tVGtrVldvWThweDlJaVBkMnhxcVFTdS9pRzMxRWdVb0M1R2hiQTRiNW54dUdVS0xuWlRLeVllR1llbVNQWkUrWGcrblhpV25qdmVaN1pTL0NGL3VQNkV6ZWgrYmFaVDZsa29vZEpDb1I0YnIxL01RSmhNcDh0TXk4ZWo2UUxqbGhaQXBKMVJpRUJYSXF6L2M5dkFKaENUOXlyLy8zdjhYUGVBUGpDUC80S0dMOFBRTFB3dEEyeStVUEFLbXNBK2IvK0dzZUcxdHpyKzljbS9BeVJpN29QdWlJb3c0ZkVXMmgwYTBVN2M4djlWL0cveWF4djYveHNmb3NlRiswb1BwTEhsWlRTZ1N2RmZ5UXAyUFh4a3NaRjZDRDFjUjRxbE0vdWNYTEtCNERPMDJjSnhMOFZ6ek9RZWpyTEZtN0FiNjIrSW1hSm5HazA3M1h6Si90clhUNDUxZGdFNDdjR3BjTmFWYmFkNW90a1NseWU1L0xhSWtjR0Y3VllxVkNDMFFYVTlDR2dqKytQZk9URVROa1MyNGdSWGc5bWxRcVFvdU1pRFgwVWNnRE1JZmJVSnpISXJCNW5Eb0VNQlpSVml0SkV4MGdBUERFY2xVS3hQSG1tY3NpUXV3RkxxVVJhWVNoellpakp5RTNERzZCbjdQTThINGF6S0cyWDVoRXhkMHhuS3BNY1QwWnlzOFJHVHZuYngybXk5SGNHaFE2MXRFVExJaEdrOHhtL1JlS21oQnZQY1MyK3lhMkhJVXBtSEJRWXd3QW5OTUZ3eXdmS2pzdy84RnRmMGt6bUF0QVRPeVBTZ2VPZW9uUUIxenVHUU9kWUVXdllBUnlLeVkwaHI3MnN4QUNRUElZVWRTRGNVMjVXeHZPUWpVUHZEbzVSZ2h0SThRVncyUFk2Titaek9ZMk91YlBJcW5Wa2xJdW9ZNG9MVTRZUGhrZGxrbU1LUjRFTVBTb3NjR3oxU0NwRlFDVzZucHFqMHJPTytKZ0ZzdlBPK0ZXRi9QRmk0aFU5blJoN2ZOVWU5LzBBK0FFQTdMRzVzNmRmM3dBZ0I4Y2Y3d0FDNUtsQThHMXZBTHhrd2JmbWJueEovNTdoNnhMejJ2MnEySmZFMWZGMVM1RjRGQi9KV3VZK1JqcUM1WFRwbnAyNVc1NzdQT3JmMkxyR2NSaStXUHN0WmJ6T0hudEp2L3N6SjZydFVRMEZxTUgrcSt2cER0SEh2cFdvaGdLUUEyTmY2dUxKWEJoUFlaWUxjbm00Um53bGM4T3hkcWpEbEFrR3o5dVVTVVl2K0ovYlp1VUNZdDlMUDlOWDdreGNqSXRubEJYcmtRSmJKcjZZYkZQdkdkUTFiK0I4Y1lLSnI4NGMxcG1McnhJQ294dDdVT2dCcURkcHlLQ3cra0ZvdWc1UVEvT1ZoQ2JGYWg3QjlRYUpiakxoTUtyTUcvMWppdlRxUjh4czcvQW9zY2M2U1NhUHp4SjIyWXE5UU1mMFJwYWE5RDJTRWRLUmVLaWZKWGhJaHJ3VkhVOWhONEdtcjZjbk92WkVZUmM0cGdETWtUeW1LMFhSSXlOREFnMGg3b3lzWENiU1FSZVF3ZnIwa0JJZlF0SVU4S1dVTGc2bW5TbGRocUpIc2pTajRWRk1VaUdCaHl4cEJDUjI4TlhvczU3T0Q1cXZobzU2SngzN3ZCeTd4ckZydmdmL016eDdQemovY2RPT1h3REtYd0dFN3dEd0djR1BBSFU5L2hMd0g0TWRyeC9qWW9SUC9qQU5sNmo0QUZDTVF3VVNsN2ZZNTlZQmVkdmpnaFVqS3FXWFFNd0RrRmcrejhEMVVzS2ZtNklZRWd1VVVPaURpaldScGdORk16UVdzTXZFaEdWdXpnQnI2OUgzREpUd29kNzNuU1Nqb2wzd3NxaS9JVHlhRlBLYnp3ZE56UTJGT3pqcWZVM2lDUmxMRlllc1B6bGxLQjhIRDNvbERtRFBGemg4MnNiNTgwbjJLcTVPaWxxOEEyR0lpYkUvbkVtN2x5UUNTbmNBakJYelJaT2VvTy8zT212a2lUM0xveU1uZnY4OTVvRkk3SmRSSUEwM2dHT1FoNEVmamg4LzBrQXlMNU9EZ1NYZFZOVE5qeVFFY09BNjVIcEVuVnlYT0V1QW1kVnpvM3JXWnRiQTBXZDJPaE50Um1tYktkNlZTcEJrOHJCWUppdkRpODRVeVlOUXcveHJUV3hQK1gwaUNoRVVQY2o0Z2xPdTBWUmlSRTV6SFZOTDRlR0dlQ1NlNWg3T2MyUDZIRjBmTFdQVHhPL01HMGNUL1l4L3Z2NmIrakRBNFk1RG52NnJLd3E5VHpCYVJnQ0ZPb0NTcEVMcHhxc2NqWmVWTktlVUVIZStwRWhENjZMM25pa0lKaGRLaVRKMEIwV1BaRW1SV0x5QVFnU2Q3NHluQUhNckUxR1dBR1g2VWltR0NvMFRZemk5V2xLbDAwUldoYWRsK28rVHg1V3pZRHcrK3lnSzRKc1NhWVhRa1hHU0dseFRYVHpJMlFiMUxrai83WnNBSGoybVowcnNYRW55alo2SlVqS3g3SFhRbmUvbEVJV1NHNVhkVmxrZWN1enB3RjR4QjFqNWNZZzlTaXh6Wm9IRWZULzI0UEcxZi93WXdILzkxMy9oSndId2R3RHlIaDZSdFRIbFp4RGVUZUtvUjZGMzgvMFk1ckQ5SHA4SGg0Y1FLajVIN3kxeDZjY0J1TXRxcEpjN01rajduZ1hwbnJXUFQrUHZkL2hVNFNuZXEzZW01N3ZHY1ZlU29lYU4waDIrcWxkdVR4UWpJREhBa1pTZ1JNdndKaU12c1VEaFBSMjRuSXJJQ2tHeXhjRVRTeFpDRWd0STcxRW5YK0tqb2VjV0FTYVFsNXZZWVRhbFZXUEdSU2xtdkM1UTU2eGhHVldWTlM1cnBYcHBMQkttK1UxSi9qbnF0c0pLRVdBSVE5WVY3MENUSmFrUVVvUnZ3Rk1DWDFMVTRUT0F3eENNUlkxUmt0djk2eVNIdGc4Vk1KdmdsditPcWZlb0hENENaT21BeXFjd01qbVc0UGs1Wno2MFhkbVpvKzFWeGdLNVh4cFZ0ZWpSbHVSS25DSm5ISC9VZC9HMHJJOGZsUjhGY0N5YU1xd2wyMWg2QVpjY1NRb3l0RTdEQjZVYkh2SDczR2ZsYzlSTHU5S3hheHhMSS9BKzZzbzNlSnl3ODRxaEV4bTVKYlJXMzA2RDV3N1p3Rkh6ME51enZrVDc4SGJSZUtoNEMrRkdId3VERWduaUFnV0E3YWJmUGdLRU5HeGNSdlZFa3E5Y3dQNFYzNXRwNXlOeHZ2ajE2RGN3N3czZks3K2hqWThwWGgwWSt1TTZ1SXllWGR3WktIdml4NWFLNFBzZGl1R2I0Y2VpRWdpNGJTZkZDQlE5aGdydHdJVkxjOWY3VldYcDRZa1VIbHo2RHladkUvZUs0WERSVnhNcHorYjJuRkpSUDhGNlhmaGd1NGtSUXJxeXFPUnRvbEtvd1o2YitEZDFaOUphTnpkUjFFbHZCcngvaXNsTFN5WVNZbThKUTRUb0xGN2l3bEJNc21ReHhRUThtanIwQzVSYW1SSTdYa0pWR2hRS0ZWc1ZwUW42THMyRTBVeVVRNHJYRjNSOFVzaW5aNmtWS1hrV2VUKzdZYnJPV21NRjU1QnVvWi9udWVlcWdXSFJIc28wRVIrTXlvaUpXT1R6NlRjVG4xNVdwaWF5dERucFdJSUNualdNZnB4bThmUmhlVUVOUTd2QWpPb2JFL0hlVldkUUpjbElGdkRTWjk0YXVIdXVCbHdqTERCTG5QVnFCbnFsZENBVDZRdFFpdk5IVWdLUENyOEJkS0JTZXRrQ0hFa0pQQ3JzUUZoV3p0Q0hUTzdIbVhIVE5MMGFDV0ErZzMvMlViSmszWUVhNXlWVytnTndzYkFEdXpDRWpZZG82d3pFWENBbmUzVkZlK2hMVFBmcHpMTWg5TjkyTVZFaEFEeUQ4UjgrL0c3QXMyRjhCQ2dVbVpmZmJNVlBFTWNpTXcwUnZvSEFrRGNidU5BUE5EVVNIK2ZHTE5jby9VZ3FLa0JiSHhMNzNrdVQ1eExjY28rbFpTSm5uajNZazdsbFNTOEhnbWZlTlVwVW9RY0dvUWRaRHozcldlaVk5U3JSWHErT0pvVjhQaCs4R1U4VTdrQk5LaVRHQVozRkRIRWM0UFdVazROQTFhZUxvZzRjcDJvZUk5NjF6R2xmWmZPWVR1Rk1YenhQeHNITFo2czF4U1N4bDB6Z1JwNzU3QVl6NEJXQmV5aHpUb01jUTl4Zjd2d1lpcDlXNkNuK1pUM2xja2gvN2wwRFBNak02akl4QWt6ZmJxWnNOYUtjRFgxeFJ0MUxWRXFCTUlveThmR0dDaUtXaTZJUW1kelRZZmx3VFpvQVYrYmdXbFFrd3N1a3B4dVROdU1zSXMzY0xMQjBSemVGSlk3WEdkdmtxM1FCVTUzaFprV2paVDZPWVdpMmduenQzNm1UL1diZUJNOVJ5SjhGNytmWUtsY0NoWHd5RDBNdDlaNHhERVVLcUZKaE5IUWdyQ3dBa000THZ3Rk1wNXYwTjVJeWp6cFdPb0N3VW03S28wQ2tmQW9vUTVuZmVCcTJhQjZyK2FrWUZaWGJFVGpwS1NlZTU4STRJMVJkV1oxaDZNWS9SSlZDVUlhcnR6bFpsOTF3bHNNWEp1SlJoc1FhT3VBVEJQdEZwa1drSkZoOG1tSmRDa1B6bVJTUEVvZ2s0M3VGWG9LYnA1ZWo1bllCSVovSE5iNjV5czNGd0wxRE1QbER1L0d6dTdqN3g4OEI0MmNBa0FzeE5nRU53YXlmQVVBeVAyMlp1cFdEai8vbmU0REloK0tyYndDUXhOb3NqLzFYQVZPNDF6U2NkTU1iLzZZSDVhb0tseDc3aDNSVnB3WkxWQmpheXFFTUM2OWN5clQvS0pOQVFMbmY3SGxNTFA1eDZ6TzNFaUxkU0p3UEkwRWhnSS9yNXVKWmNCd1hoY0FMZDFENkNjR3BrNE1zS1JrZXExeXpaZzJsQzV4OGVCMDd6T3NrRHRuTlRYd0JaU2pid212SXF3ZjJVaEtrWUN5ZnhBQ0pKVDZBRlBnRXBkRjB5UEN6KzY1Y0FsWXhLNWtJb00wdE44YTJNUmRFQVR3QTVqeHlpa3hEcmt6M3NWS3JCRW5sT2hnSDN2b1o0bnhRRkNObVlVK3loUGhxS21lYWxMMmltVHQ4UkJheGhueUdlam1GQUdMZGJmdm9adHJ0TlpqK2NHTTVQT2Eva0J1SjBhMFJOeDU0V2gxQ1ljUWxPd2Zmc211K3VycTlTK1c2M1hvby9MNENvNEJyaER0UU93eDF3V1RzSFZmbVRENEd3aDBvcXBBWUI4QStkTEh6cVRvcmJ5bmlPNkJiNThYMGNyY1U4TW9TdUl2ajhPcWRxL1FDVEhSUE1RU3VKUFk5bmhNdTZDbHljNWs3aUJkNFNFSElaY0lDSWNnbkpwbStsem5CVE9TVFlKaFBjdE02S2V6QThXNitYVGNrZzhheFVvNFhBeWpYRTN6cmF3M2tWb0NHWHRISm16UDRYSmZ6RzRCVmVFNkVudnl0UGZ5SkZQNEpNQ2h4QTArejhKd2JIZUlqUUwwYlZBWUpKYU11WU5xWDltNGxUNEl2K1Vnc1EyZUF1NmVVQWtyNUh3QmUxREZLWThpR0JkUlBaNmd2c3p2S1pQSUdkQWN3cGNvYm42OXFWTVdCbTRnL2tqMjZNN3FhalBNQks0MUpTY01obkJPTUNvcXFvcGdPTXZlOFVGME1Cbm8yVUlEN0tCR2tlT1dLQk5qbnNtNkRqbnl0TzlZbVRlWTdjNzArUVJ5bGt5Y1pERkFXU2F0SXpQYllVZXlQUEVsRkJVdzhmR2dJbS9ES1h4VktSb2RKSVlSRlRqQ3lNdmZjWjFZY3F6UnJoVnhycTVVbmcva3dxa1RQWWlFSmhzODh3VEE4WnFrVzB6WDAwdXRBcGtnK0k0VVA1ZzlDczNKRExoY1pKbm4vemtjMG54ZGV1dFNsZys5ZDNQbVA2WjVTTUhzYi92bVFETkNzdVVpa2tweWg0dFdHbWpoWFEwTUpPNlBRQTlEYWZsdDZPbk1LUEpPRG9CV2ZkUDFva3BteWxlVk1PaWcwbHVpNXd4TFZzSU5aYVBTSm9aZ2pFQmxXMGN1Nlo1VTVXR3dhZGtDQmE4aDBwWmlTSXI2RGJ1dE0wWmVobE9LOUxxWWJ4ekVQaFFRQ3lsVUtBUVVmWlNYZDlmOE1uMXM1MVIzZy9oMEFPVkNwUlBGczIvZXVJUyttQS9mcDBjNDhGS0xZOXk3dXVKdUxVVmRpQk9pRG9TNmJ1cDRvSzErT2VzSEJGQ3V3c3NKTlA3NEp3RnQvdHkxZTJ3OEhRS2ROT3RSZ0dZUkVmaFhRNGF0WlhmOE5QdCtRMHV0K2xUa1dCVmw0RFFWVUtLVHpSWUJrWjhBWGpkTGZnKzkzZUY5THlsdlJ6bmNHSmlJRnBqTmZYWENpYnY5eUlSR0NLdmdGNGk5bWJKc2JDbmVnSEE4UmR3WmlKNWtMaGlUMzFDUVhYWElvSUkxNFYwcW1LQmtmYmc3OFhTdHpINjlTK1E4ZnI0L2Z0K0o4cmxUeGR5dVZPSktLMHNIM04zM1hQQ2daT2dwQUZwN05GSkpESjRVZEFQdVFUWXFoY3lFelkyWDE2a3luckRzNEx5d1RNdGlMRVZDSTBjNlR3WjdBWmM3SXA1Tmt4Rk9Kb1JnSFNUL3R2QkIxRHd4Q044Mnh4czJxbU1pMm04aWhBSGZvV1Y5aERsY3FYYjR3M1p6eDFNUlhBN2QvaWdxNElPY0YvZHJLVE10dzZSSWRveVFWQW5CTUJ6RVlFb3NSOEZvZ3hYY2dFMDl4ckpTUHBBU2VJaXpRWlNYRUlmWUUwZ04wNWhhVlVxQ2trL2Nvclc2OHAzdldUWC9qYno2czNxUHdvWlZDSFBwZXVjOUFQckp5MEhPbEIzRE1yTUxjckNUci9sOWl1azlubmcyL3FwZWJFblVEenpjQUdBSmdrN0tBbjBkbVhDWGkyc3E3Zk94eE01QjduZENwZ0dTN25oUzM0eEFKNDZwOURIOGJpYmJacXFjZlNRbWVvNUx0Z00xanIybDNnQXlTMk5lWnZpLzZYcmwzK0M4ZWZjc1pzWlpMUytlemlNWEU2OWs4dmxpWXc3SDJoTlF2elJ0OVNTOE9QZHFaaHlySGtFZ0JlZTRNUHBJeDVpSVE3ZG5UVXlmalJrS1VwK0hJNGltWmlWeko0SlU1YSsrbEp4dnJQM3VJTzR1MXRsUWdpbUx6QUkwc3BVZ3o2azZyNWY1MXRKdlB1WmxQdHFSelpnUndFZU9pZUtzWDVacWp6cjI5cUJXYk1LMUdNeElMVUxVTjh4c3E0RWMvY3g1NDN3VlNTZ2V6RktOeEhROXBiSkdNMzBVNXAwYXYzTTl2R3FkckNvS21ZRlJSQ1FTRUhRQkh6dmF0czQyaG1IdFlTNDhzYll4cTZJRDZ6c3paalVpWElaQmsxRVNEbktQN0pDNDJvejJFdUZ4SDIyYnlsb0RiUEFxclVFbVdvUEErTEYyVklaUTRUL0M5Zk14TkljMVRBRExpMU9DTGRqR1Mzc3NKbHloL28ydEVtK2xTS2pTQlFnSmhvTU16WlNvcXNEU2lMcUFveS9DWTlGR1R2ODExUGpXbUJiTHd4TXJjQ0FrRXRxSG1WQVNlTXArTDAzbytac29jek1kQk1pY3FaVUJsVkhyajFlRjBlZkY0ckk2OEcrK1cwZ2dveXRjakRSOE1EN2s2VlRLL0N4N2NuaXZ5NnZxUWJndnNUb0dQYlJUUkc0MVNKQ2JvbHlQd2RxMjRuVDd5NngzR2haRW0rQ0RRMGwxUXZBSEllbGgrckVOZ0lQd3hZV3cvL3ZBVHJnWDRQZ0plUm9HeDVTMEVueGpMTDFPODZSWEtWeDNZOGdtbS9XM0JnNDluM3Z3dXZJeklhT2hnOWgvY1VlWWt4TXdGU2V6QWJRM0hndHB3d0dJbEg0WjdVVExPRjg5anlLc1VmUmxLcVhuMVRrckt4NkczQkZzT1ZRanBZSERhck5XWkdvYW1ZS3Z6SS82MnJHMDYzTWJGZVRKTHd6dlduOVZaMnR1SUJtYlJqQTU5WnExelNZWnlHRm1SSGUzTGs0Yk9FQTk5dGdMR040VkFPcWJtVjU3MU9SQUVHQlhudlhYY25mTTdiQ0ZDVzFNd2djOUlVWmJRRkx3NlNRcFVONWNlWlpLUU00K2ZSQVppTmZNajRuUjJmemhyNkNDWGN6VFBudWVTNG5FY0xIY0RqZ2xuS0I5RGs4eDJua0NBZ2pTa2dGT1RsWmt3TXVLWWExelpOTm1zZ1ZoUXJEdFhQcGxZbkt3VjZRNjhhTVRtSmcwSU5rTXc0KzB4ai9Kd202Y3VSUFRwVmVRSlNWVElZNWZpSDhaOVFrNU9FK1RoVWxVb3d4UFNIMk8rM09pSmZTem9EeEZJT0tMczVOaFB1T1VkRTg4ZzdFUEc1RHh0QUVNemptQlE3andLdEFmWGNJSnhlTUlrZTA0M0RGa2g5N0pJZ1VZR2ZvMzNmb2NOelIzWU82WGV1Q0FTUmo5NUtNbElKZ0dBQy9hMmw4b1RIU3RkWklBZjhyZGd6VlZWU0haaUhPUXpJR1l0TXZRWWFDa21nSWgvMzRDR2szYXRqcW1PTW43dFlKajdjVTl2cnZQU3MrWjBablJ2YVhhNEdodHRIc1IrY3lPOWdHcUpFVkFJQU9keTh1UGdjTDVVY2s1VHJGbEFEMDdEc1FqR1JGU2VPR1hqTHpIUFRUMElJRExMalRuR1UzV1NIYmc0OFdqQWVWWnpwbVBYc0FvMXpvK3NYSnVCbzluWkovajVURjhBSzhNRm1pR2RGY01obytFeWZSS3NLWXRuSit4Tit3UnhVWkJzMmlBaWszVlFvdGRRckpCYkFmZWgzaTB3eXFjd3l2bjV4aEJ6OVJ4blMycE1lakFrdVZkdUFmeUNPMGtwYy9WK3hTVjlWUEhaY29YSFZSRXpqTC8vaFNmdmp6LzkvTGUvNHBNL1AvMzd2Ly83di8zYnYvMzR3NDkvLzl2ZmNldU9WSHdmQUxLNGdPUFY0S2Y0cVFBVThsOERPZzl0ZG9Fd1hodkMrSWY0VnNEY3RsZmxNb2ZMTUZZL040RkpiSStxUGc3WUZud2NZQnBvNzFIeW5VR3MxRHdHZVRMdGRpek5QWnZYWEhaaG5yaTNWdi81czZqTmZCeC9mMHZkNGNpZ2s3SXNVNFpWdlM2bStwOWlFcUhmR1FrMzRCckhtOGdHMUx4Uld0TG5UbVE0d1RpVDJ5azMrSGs1NDRvaDZYRHlnMFFQWlVuQmdJMTNiRE5rSlVMT3RvMDhMSDRwVjRaMGVML3Y2WjJaWFhHYTBmdk9yR3JLRlVBc3B4c2FKMWRPSWd2bENyVWxoY0FkVEYrY29ncW9zdkxQK2lLbW8vdFkrcGo3citNMkliUnhsYzdIckJ3VGRrT1M2eTU5WGlmcEg3MmlaZWJ2b2VTR2xScjROa0NyNDU1dGVHZ3c3Q2tEbzc4NDdzYU9uTEVnN3NDa1BFKzZmaHlncHY5TXNMRjliY1BmbWVLaTVTcjhjZGlYd21Vcm11OEIrQ1RvMHhORGtPOEd2ekRsVmNWcUYvSjVpTHlib1BBUFNpdCtodDJxdUIwRnhTczFPSC8wUmpwdWpNSW5kV1VsUTJ6UkxoT3pnWG51cHVYWWVXK09JeHgzLytSNEY1c2xQWG5pRkkxb05abWFsNDhsdlF4aFF1YkdTK0RsdWxpeVk4aHpIWCsvK0hBY3ZjQTgzRHUzalc0OWtEOUdSUXBzamw4WThLc2VueE5VU0w4RkNOY2xrTnlZenlzVjlnUWsvUTNBVm9ZaTdPTjl3M3h0aU04U1hiNnlzaVgvaXdhWXJWcjlKN1Z3SzFINE12Um1Ia0l1KzIzeGM5R0g2RVBvWllmZEFReHliMGVxNkhNWXBjUUxPQm1LMHlheGdLdVNkT0pjUlFyb2dXWFZnU3Mxd1M2akQ4VFV1SUFPemorS2NjS1BmbWdpcTF1ZjQyVnNQbE9rWjVWV2R4MnBvaXpOZTdxWDVuUzRwNE44UEhURG5pSU1jZXR6WXlCUUZZQTMrdEtBYXJHUW9tNnJIbmpMNEVvV1ZWMEFNYktTdm9URWV4YnJobkplaXVVRE1tWTQxd1JnRW1OTkJwT0pQUlNadVIxREpORVNBQnR6WnFiR0l6WFBqRWVGVlhjd2M0TEpjMllSbWNQRnlPRUVJSWZ5SUw3ZVVwMWNadDE5SlZPcHc1U0ZScklXNFJpOVZBamFUVnpXK2M0d1hhWGRMY1RqN0FoWExRZjRDT1hXUWVFNUxIdGxpU2RUZUEwL0FnbGtDQUJTZkFkVWl2ZkVoOUNEbmhYZDV5YnV2SmdPSHBycG9VeXZKeWs5ZmE4bVZVNE1RQ2ZmTUVlSG5sajhKU2lBUSswVmJWVmlzc2VvbENXcW9RTmhaYm50YzlSVGhJOHB0eWpGdnBmeU53RncxaVhsMlpDLyt4LzZuMzhlZitRWGljb0ZZSk15dWI0QmtJTEorTzdDdzA4U1NQeXZBbG9nZ2QrOGsrS3M0UTVXV2ZBWWFPbFhJRS8zRzM5TDhmUnZ3NlVmdFUwM1JRVlVoWXlHM3dCS0xWWDBSZWdhMVZXb0F6V2owQnVtaTVIVlNURUNYekwzTE1jeVlWSHNzUTVGb0tGQUVUT0xwTklwTGltK3lFY1Q2SXViYkFHSXNXY1ZnbURuVlZ2Vm5jbjRXRkx2aHp5VjNwaDNMZ3labTN1V1BCMUliNEIzekZDdCsxZXZDeVczS1ZnSGdnejJVeEtQN0tjQUNxUjBmNUxPVUl6OUxWUjhNR1E2QWFOYlQ5bU5ESFdYcDFaSFJjdFJLTGsxUXhVYUtmbEFzVkk4OUp0Z3paZHVvODNSMldvNlpSZ3U1ckg2VlZiS1BacXNZTW5xcTFHV2pucVN5K1dFaWpNa1BiZHJKQk9ReGdIdXJiQVF2SjEwdmplaUtFTWFDaFJlRGk0UUJuRGNjM3UwRzBxakVFQWhOZXpnbUhXVGlmY3M0UkxWc0lQdlNVR3VET25Eb2UvbDc0S0NaZElUU3dpSllvb0poMlYvTTNRVDF6aDJxOElyM1lGd1NkVFZTZ0lCS2pVVWtJTXpqaUc0RFF2ZmxXS29mTjZyazI4QWROWWw1ZFlZYnRTaCtkdmYvaGFmMk04TlEyeEZENGJSbi83d2h6L2tBSUw0c0JvREtwYXF1SmlDNTRhMVlxYkU0SVVWNm1ES1JtUU9SeCt6bjRneTVBN09DQXRJS1VhZ3V6RWtRUWRLUVFqTmFTbkVxNXd6MCtmd1JtMkdudVlsamN3TG82SEFUVWxlTW9HYnZnZzBGTGdsZ24vV0hLUGplRS9Ub3RGUVlBcEhMZWVGSGR5T2wydm9HVXgwTTA1dklHa2NpeFJZNlltY0YzNERqbFVlektXWE9acm5FNGRNM3l0RklPY2MwNWFKd0lrY1QzWjNob3liRW04QS9FTUlKb3oydlVJT0F1TkRqUE9Bb1RNZU9RRWNUVElPb01mVzIwZ09ibG9LQVdZY1V5NVdVWFVMamJIVkZTT2dsc1FJSEVNa1VTcEFOSHZac3BtRHcwenhFTFd6L1l2aHQ5SjhKajVuZDgxb1p2WWtRUUt3TS9Ec08yUW5zZTRnUGppY3c3NTZVblN5TXhJL0E4MjN5endrTEZEMDVQT1lyNCtWUUZQMFpVZ1RrUUkzWG9JT3ZpM2xvdzl0YitiUDBaTjVySkIvU2xET0VzdVRqUGdPd3VwMGRva1VrS2VuWkpUUDBuVzc5cERpSWVFT1ZLS0h4TEFmRFRmQWMyak9hd3RsMm8waDczdDFzZ09NOGlpMEVtbS9sbFNGeUpkb0dVb3NvS3lQakFRQ0gzT3A3SHNscXIxeVpiRGg4ZGJ4Y0tWWENzcXhvc3dCL3ZhMytOV2ZmLzd6bitNSEFuSkpvUWNERElBTkd1ekJZQS95K2dhQUNhSE8wenBTTXkyZUwzTURRenZ0WitUd09NVWpOSWZoZ0kzM01STVBrc09NTG9hSklqVkpNY3dxTXBMUzlLZ1kxN0FxOW9vSzNBeVRQeDdMTVlYaTRNTWJWa3NPU2dNYUVyalZNY3YxTG5aY0VrdW9SR240V1JOZmsxMUhzMmNwS2xBMHpnc0wzTVF1RUg0RFlPZ3lQUzhLejdvaWxTTG1DSmdsTVlCamo5NTRQQjhadXUxcjNYejYzdDIyeVdZdXUrajhkajRYdzk2TTJ2RFFrWlRWTVlvKzhwcFUrMkdYeXQxQnRKck1BaFFVa2laVHZFb1VYZ0lIWFNObXlhTDM2RUhiM3Fmb0FBd2RyMis2QkxOL0RTT3J2V1FNbjJub05YZ3VZSzgyUEtvZWJ0RWkvb1loWitlSll5N2xnYTlrcWR1V3p6TjNuTTdEWll2TSs0eU5mRGM0cmtNaGI4UEM5NEo5S2FqcHZCZ0J1UlVtMTJwOUNxaEVOWFFnWER6RkY2QWg5TVMrRituQWNVLzNLTEFQSlFZUXBzWmxqaVVUY0QzT2p6Z2R1RXp6eENqS01sUTZnVWVGSFFncjBSbmhDYUlWTmpJWjVRVVFLWEFqbWVheVowYktDdklqcGw2RlBzNG9SU1FaMzVlUVRCS3M1N1JiS2NVQkU0dXNrTTlSaXJVdjRqS0VqTXlOTDRJaTlpRnh1UTdZOEhqVG1HZkRwMXNtNytHdmYvczdQUC9qUC80REpMOGJBTUFxL0FnUHNEYUVQbjhFQ0NKczZKNFQ0UEIvNXg0ZFltNy9qTjQrT2hkQkdYcExEeUdYL2JiNHVlaEQ5Q0gwc3NQdUFBYTVmcVJjNHhpeUhFWXA4UUpPaHNJMjE1RHVESGlSNkdqMk04NGZZeUJjNUo0MXpqZjVzSlpySEVzR1FDV0xIdmtqV2R3d0E1enZWTjcySldWODEyTStVMG9WOUxNejYwanR2SlpyVlVlaHVZWnJZVGxON3IxRDV4K3dpa29EQnJqMU9VcEw3K0NOWHY0ODFqejYremtRRWpFR3hoY1FmZTUwRTVPSjQ0aVhFS2REOGlIRTZZUjR2NzR4SGRhcTVZWWtCN04vRjFoNkZsVlc1OEV3dXJuTmpoV2R4RGcwR1BhUU5BNVVlcEJ6Z3NtdlJadkR4YmhKdzVCRGVSQi85ZVVoZmNieUVyTVdWd05ZcE5aSElZKzJEZ2Vockp1QXZLb0l1QjRrZkJRU2dDWkNMazBNRWh2cERncmZzb05RbHFKa0NxOWhCekpSU0ZZQ0NDbmFBV1hpbFNWd0RCM0o1eFJFUzFZWnVrQWhBWnFYb1NwNjdzVDFpREhYOTBvLzJuYnlEU1BQMlVZUVBaR2srQnNnMzZOaE9yZU14bVFsbTVIdHNVUTFGTGc1dUlDT3pqamU2dVhnWlpTeXZ1K0czOFBBMzY4cUQxYVFZZnZyWC8vNis5Ly9IaklPc2IrbFhOOEFLSWZnZVRsdTd2OWovUHNGK3M2V2VxSE9zTVNOZjJqZ0cxSWUzRXJvMmZ3NVdxeitaNFlQTFQyRVNtK3VkRHhrN1E3Qk5ZNkgvdm84V21VUFdTdFkwYk80UkRVVVNEdjBCT0xsQldKTlFDa0NhbTVuNHZjR2pZdkFCRkR5dG5kY0phYXJsR0VGa3Z4cHY1UVpIVU5UdW9BNDl2VjN5QjVtcmVZRkx2TVMzWUNkRlE4bUVjcVBKSTJ2SU5yaTBCRU5BK2hDQ293eHA5aHQxY1JES0J6bWdRWndjdzZER1JYQ3IyaUNtdHZRNTExamREVmZJZVFENFRqb2UwVWFRSGFNZ3ZTUVRHYlo5ZWlGeEVZdTI0N0ovUy9hMksxV0NaMnBmNUhTOE5ka2lKL1Q0Skdmby9YSUcvZHpORDB6eEFYaHIvVlp1WUZZVi8xNGNKS2IrZkowNlFXL0ZCOWxJZ1d5eURpMFNWNnFVamZmb2p5SlpzemRITTk0Zlh5alFjNno3RGxhUytiWVV4d2Z4U1FmWk1kUUljdXdGSHFPRnZGRFAvSVI4TnlYWkpHVjRadnF0NkxkNmcwRHR5NjdrUS90UGFjdzhlTWVuYlJMeWlFSkgvM25CMzc0OVg0TWtZVU4zdzJBR29BekFtRHlUMy84NHgrRG1rODJZR3lSZ1MxZVRwQXp5c0F4ZjdCZ1hadGRyRjR5VDZNS2tFS0tNb2xWWlpaZGlkUXdzV1JCQk1ZM01Tcms1UXBHb2hoaE1yNm5pSUl1RXlNZ3o4MWsxZ0xweWh0V3JndEVFaHhEaGRSUW9KaTh0Q3JwWlFpVHpoeEozYUFVdllZQ3ZiRmJxUENxNjd4d0J5eDBPMkUyL1h3dWVHOFNxTzRSaVB3MnZiSXVBSFEwNTNzTTg5azJ6bDhNc2ZuSkhNTjVXZ3FJSEZZLzRxWWo3enRDV1VFOG1YRk55WDJhNVMrVkZ4bTNveEhONS96QTBpdDNwRStmb2JkRXBnYy9yeDZvOEhIVFVtaHFEbUNsRFZiQWM4K2ZKRGpidThOUXpBV01kTTdVbUJ2WjNka01lVFhHcnFZNERoMFhnZStJeU0rV2VHRFp3Y3l3NDhzRFA4VkRBTGRrWm03UzBwUTIxS0VFZFBFbWlRdkR4TEpmTGU0b0RnTzIrZUJaY1pCd21KeTZZM2RKL0kyN3FKaGJtZldWUEh6QlBiVHlZYUtuOTVBempuRzR0RFR5UVdQZUcvWGM4N2ppaWFkSkpBQTlJd2tZM1RXd1p4YkY0NzRoaXk2K3VHRTRUUUk0bnQzR0dRZXNTWDBFUmFEaDBRUWtiM1JZVG1JQlpaRkJOOUhuWXo4MVpjNUtudjhQZSsrMkpUdHlKR2VUN0o0WjZVSnIvWkxlL3hWMU1UcVNUVFovaXpEZ2c4RTlnRVJXMWQ2OXlXbXdpYkl3TnpmM0NCd1NtWFhZZ0tKMEQ1QUpoTmQ5amgvYjNzNjNvamZmOTVLVnpTY0RQaDdtR1pMNndpLzg1NWtDajYxTjREVk1uTkZYMlBIRktaR0ptL21tSFY5NnVRZ09tRk5MWEdRYTJzcEEyRnZLeE1qaHlrVFJORWtmVEVwdUdTS3JZUHpEZndmbkxPMjFsZk5IdzltMnhOdlAvd2pwaWQyODlDTXc5NTZMM3g0SWIzL1gzN0dqMUZ5VTZYamFVYlhyTS9jNWxuc1JMNWxDbG1GeCtOaXdlNHBaa2gvemY1TFZ5ejNKZXFqNXB1WVBlM2dpZTk3blMrVkx3Yktma2xXR1BTVUZpYnZTVEdvU1A5RTNqUzdzeFgvenFscnd1L2k0NVRYRGc1aTk2ZkY5ODNubE9XUmQwNW05aDlyZXZmSWNYZlRmVjFLTVNlODFzUVJnSml3bVNUQWdIYTZ5ck1rVUs1OHdTLzhzQkU0ZzUyNk9vRVRMVURJejZkQVpaTFpGM0lHVlJlK3NkL2R1NDkyc2wzcG05eEJndU94SEpJSUJ0cWYvcDllQ3NzOG5kazFzVVVvY0ozTTJVUHB4YzlwZi9lZmZFOHhvdW9HTHJma2xTY29TZUxWSUJIVHhUYWlMWVpaWlNTWW02eDdjcDJRMDhRYzhTM29aM2h0bXRDU1dZU3FGcjZKWGZFbC9NaXhXWlZnY0hrYnZaZlpNVGVKU2tlR1ZCaDVBaXNDU1RJRnhrWlZoMTk4d1BkZU05dHIwd3ovNlM2RGE4bG05UEs3bmNQd0kwQmpQdHpqS3A3QkpoZ0xUdi80UWFnbytnMlZPVzI2RFlkcW16RHhNQjVuNEJOL1VWVHIrdDNXZjFMblRsQ3AzMHRiU3ZmaWZJSHExT0oyL1lRZ1pNTXoxRWVtaFQwS1VrenhPVkZLNkNRd0FzVUFuWVFCRnIyRTJreVpPV1NaaWNoV0ZCNURpRXY0c05rdExxWkFZcHl3VDB3VGM5VDMzSllNQU56ZWp2UmhqTkxPMEhxb1VHbkQydklGQ2VvS1RIQjhKNW54TnBtRDZuRTREU2cvM3Vaa1J6TVFjQ25jTkpGbGkyS1RYUEJ4eUxqS3NmTHlVUWtoNFJQY1YySWJURkxja1NjU3pNek43bEVCalJudElBS0VuWUxhcGpvYzJ6U2NXdThWZldWbTJFSSt6NFozTlBmUVZLQXpEOUM2NUNuV202ODFZU1hRZmJqUGFoOFJQNElpT0YvWlJ0WGdlZ2xQZUdPZ3RnWmNJRGFDWWtHcEJ5b1FaRmxDR01vRXBHUDhsVDFZSFRvUlBuMlVJWlFma0VsbzZpQ3dDWlBBZG9ERlk3c2txMGM1M0psTkt0QXl0Tk5sRG5iL1MzRlRNa0hCeEtNTWk2QTNZcldlVlJNdll2NnRQdHllNTcvYTV2R25RcllFOCthRUpRdGxNS2FwSC81RXlOK2w3Q1RQYU8zSDhDTkQwSGZjSkFTYzdjM3djb2IvOG8vL3YzMEhRTnc0RUp6SHVFZ1lNcDgraXBIbjIwK3drdzMvWGJIZHA4enU1ZllVRUtBQUdrR1VtZVhBSHpqcjRPVDZHYmgzclJkM2pzWUNzNHFsaENkMHpiNG03MVpQMG5pV21rTVduREl0NFpsY0hrNXpOeGFFTXcxQkxpdDhHVWd3R2JJWDJ0T1RCZ0NzeGdoUFlPem1SMHdKR0krUE9FRW9BZnFKSFU0Q0h1Y2UyQU5ZZkhpdVlCSnFNOERLZEJ3QUFRQUJKUkVGVWhzbGtsU3VNSGdHZ2g0YjdYTFRVbUptUjAvVmlEVkdHTUEzTUgra1ozOGc0Z1hHakc5L2NHTGU5REgxNGZZYlZ2bVZYNWpvai9qbTVpN2Rqb1R0MTVtN1BkMTdEdlFlK2JzcjlPRmJlOS8zSnBtZVh3WHhUc00xbGZ2RkxGT1U4K1cwSllOOEYrOVB3dTNtcHo0VktuRzlQVHZ5ZXZDVDM0UGJWczBaWkZtRU9PZUFqeFlJaXM1ZkkrWFpXWjRaYUd5ZDZCK2E5N3l0Y2JCbDI4TElUdDBSajZKUFBLSHl2QmRNMXhRRWxnQlNCc1RwYXl6bHRCSUFwT0MxMTVsNUZTUWRrVmlFWjdtQTdBdnN3VXhjSEdsa0h6b1EvR2UyRGpDYmU0Nk5penQ4anVESlVWZ2tsWTA4RWxKakFzejdTaVhiOVBLR0pid0RaRGNpY0p6STBtU2dNRDBpeWlPOURpbktaOThRUjlibTVmeUIxcFhjbjJtdHgvdmJyMy8zWnY1N1Z0VG5GVmRpTEY5YW1oSi8rKzMvLzc3TzJEblFlNi9IelE5dkp1QjJkb1ZLT2ZzVmc1bzdkVE54MkRBRVpUWng1Rm1mS3hJY3pJZlVLN2tEK0pnbFJzZk5vT3FoWisvaTFjcC9WbFJLZVZuZnY3V3NLVWxONHNnclBFSUF5M1NDTHJBd3RTekx4RThQdXNERyszZTdIeXlUN1VrWDhYTmR4WnBaUURzRUNuenhQU3FGMGRwUDdjVDc2UVVOdVp3Z2xBRC9Sb3pFb3cySjFGUjB5L1g5ZlRHUXdIZmltZ1BJS21ML2FGOXVVRVVyU21GQUNud3BpRExSUEJwTHpabnU0VjhMY2NONko3VGdXbm1FSFNreHlWTnczK0owWVh6dlptUzVEQTdDbnlnM211RUVPZWlOUkdKVFM1eFRidXZtY3dwNjZmUzNWUzNTODRMUnRTVGJWSmJFNWppY3p3ZUxmbVNzZko1YjBLVjcxZk9YU2VSWUVZTTArMUZjdDlHbXQ5OURKckpQMzY3Wkg1NHpDZnVjUGN4akFFZE9DN3RNSFpGUmhEV1cvakVJQ3lPMk1RNTJmektoQ0NJQmI1aEx0SUUweWQ2bEVjSTdPcGJ4WXo3TnlHSWlCN0lZV21DK3lNaXlhaUk1VzlrTjBXcUxRYkR4TUIxZitVaUsyWnBhcmw0azFtM0l1em4zV1NYOTlaREZKd0dSditybHBNa05waXh1Z1J6dlR4VEFHeXhTVHVTOWlUS3pwMTM1bm5LSzE1OXhFWTFBNjBYQnVmL2p6WDM3aDUvNmw5TGE1ellHd3Z2cTlnVksyN3dEb3JxVUJqVW9ockxjU0lpY2NVVzBpOVV2R2FlcVVaSnlMVlFjMnRBeXhTZHhLVnNpMkJYbkNwQnQ2a2VBRW1oMURxcHR4U2FLQTlNZVdLS0RJVUpvdmU3STZLTXJpODJHOWJVblBLa2ttTHFVZk9teXkvWlF1aHRkMWowaFBNWFBGSzVQUU5kRGg5WDhXajZNOXhTdFNqMTRqdm0zWG5vdTZ5dm1NL21XdUJWZXlnNS9yZnd6MytjRFVQdmY1SWlqQXd4dnlyVkFSMTJhODhMT2xvMjUyR0tHUjY1TXRQa0d4d1diVDVpNVAzUnZuK1RBa0xwRUFQRU9qbUo1VWtXbklWc2d5dE93NVdmVEhuWG9QSEhVOVpjYjdMREtGdWlhMWh5SHZDWVA0QzhIVzV3LzVCcUN2aVNaK0luT1ZTMml1MFVsOHNXcCtuVVhwNFVrN1QvSUYvK0RaNitTejYyMmwvWFlsN1U4Q2xCQUE0OUFaaFpJRUYxQ0dHQm9RTFh5UG9rd0FKajBaOEE1OHZ6aTFYUXJ0eXFxQjc0VktpR0VDOENsOU8rM25qYVVkQlNuWFdWaE1ZQTNLRGl5SHoyeElRTG1kSEh6VVdqcEFPb1hFRG5TaFNBeC9sYmhyVG1LeUFDWGRRNklkRkQyQ3d1dDZKQVNRSm5HbUZMNE1wZVFDMzdQTzk0Nk5YZndTc0hQVFVIamYvdkMvLy9mL3lUY0FmTmp2TEJYVlpsS01zdTUrQjZCM3BJU3RzZmxGWG9YSjZCT3NkSmtVcFQyVHAwclh3M1JRYkY4T1hhWFVaWWkvZlJpZXdjc2lMd1M0dmRETjhGdmlKNFkvdU9acXZwMi9ZUWhONEg4aGIvdFZlTitKdEFpYzVqcjZ3ajRIQnFuLy9yUStZM2ROalZJdTF4WVNRTFF6czU5eDNaVVNLQTBZWXBXZ1JNdlFKZXhmc256QkswU0tnRFF3OEptNHhGYW1QckZUbmpDcGxGNURWc1lZa3dTRWJ2VUt5bEIrZnBuQmVRTWpQTThIN3oxd0Q5Z0thTXZHR0FyWWVTaWE1b1lrNU9aS0xnME0zdElvNUNpSjVBN2hmdS9GZ2ZaZ3B1cjBvaXVObzRCaHRXOUxjZysrL3JyMVA3OWtEek5UN0JaL1pXVFpRbHhmYkY0YXRSUE1HV1doR0tZZnF3VFpHVUlDT2QvRTFreG11NzMwNkpWUDJ0NW5VY1ZMaEJpQUlHdmhuekpoaGdXVUllbGxBWkhkRnlVOXdWV0srUnRsS1lxK3B4QWlCVURJV2ZBZFdBbWZpZUNyYU9jN2c0bkFWVFI1NDJUczBQa3J6Wk9LNlpuNndtZUoza0FScDA4bUppKzhEQzFKRW9rQ0NIVkRhN3F5TTg0dDUzdzZnNVZiditGN01SRjcrdWQvY0JiUVJnUENPQnZNTndCYW1VTFAxdys5VWRBM0FmNHdQaExUSmhPOUhUbnkwN2RsM3hNeXFRWG5DNnF6amhMM0xqZlJzV3JSNm8zeUE2RWI4NXZRQndvOVNYbXI0bHZpSjlVL29OR0JmM21BVzU5SHh2Ymd0UmVPSVpwNmF1M2F4VmNWRXR2S1ZlVlpjRHdLVjEyTU15VnhTRTV3MXp6cWg4dzlDMkl4bDZyUk9zVUtaVFR4NXNpaXp2RlpFQzUxRFI4dDBkSDBNK1RxMnF2L2NuV2ZHeHQyTUVQUDAvQStuZFBIOXBNTVpveEpIMTV6V3pKL0dEOG1LZi9OTjg1R3NucXJJNVQ5endaUGpBUlkvWHBNMWxYK09CajlieTcveUIxL3FJbDNzRnZkNlJEM3dKbDZXb29wTkRNODlydWxHUVZoYkpVTVBnTEl3QjNNVXM5M2MwcGpZdnBQbS9mUDA2MDhIWmRJL3BqYk9COWt3bVEzdy8wVGN3MDVYaE5Fd1JFNlZzbUJ6a3lIdTk3Y2dGb1l5dmtYdlU4MUJ1c21mYVQzNExnUUY3YWROR05wN3FmeGNNTmxpKzYyV0dXV2NOSGpNUGs1aStFYVBYdHF3L2FJbnJOU2ZPOC9uY2Z1bk5MTUpmajFjSm9KYzhla0R1cU1YZ29rUHpRK1Q4cUtuSWRUUEkvZG5QNjUybWwwMko3b2JYQWZKZU9wTENaQmJnSFJ1U05NYkF4ZkZkS1VoLzZWek03Yi9vazROWWxQUmpGWWFwWWtTUmxOak9BcndQd1QyKzBHZ3JQcXVqUmcvb1QrK0NFZGFid25SRmFDbjNVN21VZHM3TGpCS1dkN0o2Ry9KRG92ZFlXMDZXb1pQeFgwNjYvam13anpzR2swN1BTdGhKOStzdS9HaEp2NWZiKzlIWkViakVBTVQ1M3NtaFJzMkNtVVEzbDJTL3BUT0RvYzU2dUhrSURaejF5VFdlM01idzJRcm5IeG9VWG1aWUFQd0VxR3FZZkVIMXNBZW92TEVCbWdDTW9RV1FGZE5sNm5MTnJYMENPZFVaa3J6VGFMWXkxSFBLZG12ZXhFWWpvRkkwZWxKNy9sZ3cybWJLaGs2Uk01QlhhMmlmYVp3b3djM1gzSU9NNk5uVG9tNEpaMmZueHR6cVBuZVdVY1dkWlBka0h1bDFFTnVjL05LNVpDYitpM3V2dlBydWlJbU5IZXo4SEp1TG83ZHcrNzU2OEM1bU0vRHFJRlplOGhVYWRNODlFUEIzRjZEam9FVThYT0Q4UjF1b1FyMEMxcmVzNDVSdkIwOTVtOEdVNURsb0xPdlN6U2txdS9tVUkwdkFla2Z3RkNpQ0ZoMENTWW1jZTVQVUt6TnVhRDBlTkZYRXAvMHlQTmZnakdzbnJ6b2syZTBpTjFWeWJwbHBLeG9Sa2F2aElNMjFsWHlxNXhPMmdZYm1EUDJGZDQ3OS9oODZqbUxzYkxoQ1c1U041cTdtdFlwdlByMytSekhQMDlPcGFIV1kvQmVZWE5pRVJ6V1hnR3VrenRyTWhqVWtRSDJJODdwTXVwRGIrK0YxNW5sNUxVdFBrYVBmTmQwL1VxcDFwbmZqKzJzeFdpWHVaOW45UFpXcDRtSTNkM0ErTi9jdDdTOXVybjlDMGwzc0hWS2U5VmhnMVlBQXpmR1VJemVhODE1NGE0Z0gxNEVxZlBMcGlXdDFaREVUMG5sc24yaG1lZXBmWThuSDNxNWo1OEVQc1lZYXQ3ejNqWjJKWlNRUjJGY2Znc0M3RTRiNTdqZHZpbVlEdmNsSkNPcmdCT0hqT1lXNHJON1B2aHhtVVlEYmlyVXkwcGx6Nmw2TzY4N2lvZGxvbGM5Yk14emx0Y0RSWm43NmJYZ20yUzBNd1QrNWUvL3ZYZi91M2YvdktYditoUC8vemJmL3BQLytOLy9BLzlEckNPeC9oUjViSHA2ZjF2K3VKWGpmbFIwWFFhbnhrSnlQWlhmUWRnTXkvdGVEaFVFVkQ5di83NnEzNExRT3lmOUxIVFhtZXZFTkk3Nkdrd21RSFV5MmgwcjZaMW5NTTdseWVhdS95dmlIMVZEMS9sOHhWeitxREhKNmZRMDhXb2xRK2RXdHNVdWlkemkxQ2U0TVFYWUV1WjhraGZLRTBOemZhTDlPUEdjWE0rbjZNYStWbzRPWjgxcDFBWnBESnhrV2w0SCszNkI0eFdoK3Y2Z2R5U09BTFpVdUpOT0U4SmVFQldPcEd6RnhoQTZndnVHakhTNU9Ickdrd3lsTmlDSldOemhYb1Zud2phNDY4YnBEc3BKMGxKNzRWb1lGVmxCSm1nclpJUnhoOHdjbmJlMlBzYm42Vno1azRjWjBPTFBTZW9kVTZ4K1VkS3lKQ3B6VmRZR1k5WDVwM2NqdEZKTm10bkp6MTZidS8xYUxyRitiQWRnaE1qbDEwMm41Zm14NGhwblMwbFAvQWZ4MThDOVJtWHk1UUwxN0ZOTm42bWt6dHF6ZTR5Uy9vVWIrbG5aWHArWG4vME0zMFpIcVdOcnZkbDBjcHduVGNlaTFYcTZ1aHdtTmJablgxVWREdjZOVHR6RTFmZDlUaXlja2FlNEZoUkhjQTUxK01SLzlxTXVZOUViV0Z1NHJTL2o1NmtjL0JRMzJXZGtaL0kvVEx2cFJiTTBtU2hlMERORmQxV2Uxd2Y4ek1GOHZTSUwxSy9xNnYvZnZubHIvcVBrRUhSbDZpRzQwZUEzdG8wdDNHWTkrMWxnVjE0K1ZWMlM1UENsNkh0VHExY1Z2Z2VnV1Y3S256Rjk1NmVLM3Z1UHdmam8xbE9ocklzVHpTNUdpVmRvY0l3TElEaFE3ZHJmUnBjVmorSjlrSHhaSmhBMnJKaVloRHNUcFc1RVJBQ1lQSVFPREhUaFpYclB1RVAyWHpSU0w2SUNkRUFUSUtlTmZUempwbXlaUnNTcHNaV01JNmExRjZiUWdic09Rb1pNaWFVaVlXa0sybEt5SlVnOGFUUUtiUy9OQ056aHpra1VjNm4zQ205Wnh6RmdXN0Y5SkNqS1lZcDVLeXNuWmExTHV3ZVV2Q0F2d21pWjMwcWtmUFZ4QjNLRlRCcEpydE5aZklGVXd2K0pZT2dBNW1ZSkFSVFFBcWVsMDRUc2hJVTJ6SzhTa2NHd0xNemFiS01wZ0NmQk11c0pVbFdSc0VKSnVZQmJwekJSSmNtS1VBSklBVkFxQU5yNEVsNUFrcFdHY29oR2VOa2JrcDNXZlpUb21XSThxdjRtejU3aUtJSndOSWJKMFBEZ0I0MTAyOFVwQ1NRT0c4eUN1bGJlV2IrK3RlL3B2bVZJYnpGUDJ1Y2FWbHNpYVgzNXFoeXRlbUdxRDhQdXRSZmtTUHIvRzVHak5Zd3VhSmhDTGd5LzU1OGFXWU9SMzE0d011dW5pdGZXdjBtQXZXdnV1V3d2dHRKWDRSdWU4UE0wT25Vc3JnM0JpL2duaE5JbjhNK0thSk1FQVpBS04yU0JFZUtYaTAwcWkxWkNVK2lBQ1JnR1UwU25DbmdEdEMvQXZ2ajU2N0RTZ1M0QUEwVjFRb0R1dGloM2ZVa3ZzbXlUekZITDdBNjdpY1NzVXVYSWYxa29hNTBsbmxPSkVnWTNBaHBub1ZFakVZTVdPS3hsSE96a2xBWlNnSnpsWUlQSm1iS1hsR3NESXBnT2J6dzNENHRYcWE4UlY3NkR4ZG0vSmJsdG1JamYwN1pKVFJsRDgxcm42dVJHaGNqNnVIRHZYMGtCcEJZR0ErVEJDZEliQ3VZTW9RM1lKak5RQUtLaVlkbFg4UWxwVWM3b3hSSUFGVUt3ekFCbUt5bFo1R1Y0WFhLNmRGL1dhS1FPRjhCODBRelBkc3dqd3lBcHZ0Y01WbGlhdXBOcVFtU0dKanFIVmdLWHpQbnVFUVpKc2c3RDN3eGh4Y0FaOFZDNWhEY2dSd2cwKzBKZnBsb1FaOGR2K3dyZ1g1OCt1ZWZmOVlQQXYzMDAwLzZoOEI2WGFlbkNacnRyd0RKeFdIcUdhQURpQitmMHV4NjhTUHhRM2RVVEFCeVMremhWa0pmSWxwa00vaGRkMnBBOVhKTkp6TklldXVndDRqR29XbHlzdTBwUHhUVEcrN011dzJYTldGbGNyVkY5a0l6Y2NqdkhYcTBNNlVvQWdHRnNwTmtVbVpOUnZFMFFCQmdpK2lMNnV5OEFiZmRBWWlxbHh6Q3p6YnBjOU5zN3ZPeE1wVXVsRDYybmZxc2E1eU1KSVVjU2F6RGREaDJuUi9yTTJkS2FEQnpoVHZBS01YN0txMnp0QVRLNm5wYndlTnNzZmF5SlNwZ1FkYktGT3UxUitrb3cxamh6ZW9xQlI0M0p5eEx1MG5YMnZiN2V3YVhYdFoxQ1Fuc2ZEUjBNaHFEN3E4a1BKRXZTYUpMc0JjdndadGV0TGhGZkRlODlYL0hhQzZDS3gyZTA4RHI0TGs3QkNPOWx5NlpOREYvTjRFOWRoVGRtZlJKRG1VRjh3STFTU2dUaFF2UHNBUEVQUVJqYzRZSndEU1FETGlEVCtxN0ljeE50eVZVaGpnQWxrMUNDdHdvZXlqMVh4Vzk5M0dyMXFBc3creksrbnVtK0hUeFVnQ1pKWFRad1JmQU1QV3oxa1lnQURqQUVGRDRMZi84cFlnSlh2RUlBRVZaaHNoOE8xZTAzREhNaU5RVHYwTy8vUEtMc294VG5CaGJBNWxzUHdJa2tUdXcycmlvUGRRM0d2NmdUL3ZQLzhiWVc3Zm10UFUweEFDTXRjKytTNVFtVTVPMjN4bG5leTdkbVp1V0pGWTA1L0pXK28zemR3djFLYnhidWt4NWFWZzBMckVrRmJwM3VNbktBMkdmcS9OdGFRSUpZQ2tLd3pEQXB0MTcyQjYxL2FTMnQ3R2RLaUluYzJpS1lIcjU4VGZQTGwzcHhVRnJkUkxNV2NOcy9qcEQ1MzhLSnNQUXBNMW41ZjJpWm5ZYk83OFUwa1B0aDkzK3lHNk0wbEdiU0lNWW9GQ0t1dytHQnJieWZwbVlWWkFaMkx3NGFBaWZYWW4zY09qM0IzUkkraXk1UTZ4dDF4ZERCdy9idlRRTXRsYm1YaUhMNW5Qc3VIbDM4UTJqWEVmVDh6bDJPbjJlRTkzUm1XTjBHMFJsY092L2hoRnJKZHN5YTVld3dDRVlpWVhKQldCQ2UwNTB6MzJQak5CTHhvS1VnVzhBL2dKZFJwVFFTd1psQjg2RjcxWTlKRTBuWVFCWUxmVTNVUnc2SU11aExvQzVLbG9TVTBZdXdPWEtjTmtEbWlXQUxMbnBiMDBxRTZjeThkU011MzJrYjY4SWc1a1FudzVzZFU0ZjNKVVNYaHA1ajV2VmtHK2JvamtVVzVoeXFhZWJ4VGFDQjJ3RjVwZmhHYTlLR1JKMlNpYWlMMHFHS1lhOEIwN2hkZ0hRQTdtZXhoWDk4NS8vckc4TENCTUM0SnlNRFQvMk93REtMUXRMaWJlQnJMSXQ4Z3RmaHBZdFNSeStBM2pad0VzQlRUNVhrdkpQQnJRQ21sR2VER05OVHRmN2RyR2xSaWszUzlkRGhXRllBTU5jWkVnQTBjNWtZK1BHdUQzSmNiOGFZTVZqV2VkRmlRUlM3ODZMUkpSSGJLTE93M1JRY2w4TnR6Y1krOVMyYVNyTGZlNzhOdmRSYmg3aXJCdmk3U21xekRIRnUrMTI4bVJvdExyZnVKRTlBVzZnV0dVUENnM3pmU05VZUErUHFQUjc0a0ZPUmtOeWo5Q3VQNWc5ZmE4OHZqcTZwVis4WVZCMFlYSVdZeVZBTTVESkpLYTZRUEpPN0l6TkN5OXlicWRWM2NuOTYyMXdGMzNEcis2WlpYUWxrVXljcFZESVpETG9IZlh3YXQvWDV5V0RBQ0R6Z2VjdHgyUU56ZkpMTWh0TGdma256TDFEOGVtR0VuUVNCbkJmcGNqS01IT1g1YTVJRXRNUUROalR0M3UrK1l6YXB6QU1BWlRyQUUwSFMvUHVzR1J3dXpKSmdYRXlWMW5pdXl3YnVJckNheWwxRzJDWXVZa1JQTkVqVGdmakRJRUIwblNjekwxaGx2Q05vdXNMSTNNcmZYdFJsTzhBQ1BoemVhY2dZNWdsYVBMdE53Q3FvUTB2L3lpU2pzbTd2d05RSnFiaG5GdW5ENGJKSDlRUGczcHZuZmxobXYxV2pYeUxLY3RUN1hLK3VmVmU2TXhzTjl4OW5oNG1PZkI0WlJ3UFFJdkhDaGM5ZSs1bTU2K3BTYnlwbXZkQ2s0WjdqeTlrbWJKZE9Idm1PY1RvTGNOUFpxMVdGTXNUVUZjYTYyZUFmSHh2bXR4Q01jc2phMDhmMWxNUUlSRmJ6bjY0T2U3aXNVTnpQQ1c3MFd6SjNaWlRzY3ZNNUQ1TnhQc3pLNXJjbFBRU0M4SktGb2MwSDRhcmE4U2FUT3d5TXpvR1RNcU1jbUdLZnhkZ2V4VktOelJ1NzhmZk16dGFIY3grWGVjcVNhRFFTOFkrS08yUCtYTlFFc3ZReld4dWYvY2JzM21HN1oxUC9YN09KWm1mcUU2K0tMZWhVOTc2KzBJeHQ5NXRCUGV1NTFudHdkZnFpMXNaOWs3RW5EVDdCVHlVdVhUY1Q1Wms4ejE1N3RHSDVGSzJleXkrWHVrNzM1bUYzUzMxeE9HSlJrV1dzdjJzblpmYnVSUHBpWTcwRmsxaWFaNkN4RXZ4a3N5c2I0Y3BMYUI3ampmOUpzRHlkd0N1MmxEdVQvL3R2LzUvU3BiQ0ZrZ3BZR2JUakVPaXZ5UzdMYXhJdlJtUVlDbTJKeUU3NEEvWW5MZlBvdVE4ekx0WURDUWdsU1l6UkRUSnhQUW1rTHg3RTVNbkU2UUJlMVNBSytXU3o2d3JyTVFNdmVWamNYZkFFSUN5aTI4WXBlZG1wWmgwVzZaZmtTVGFwQmpoRExDK0RJUEVZQU9iN2VoUS8rbGtHL3VlRHRNQm5ST0NXUUxJMUlzcy9JanFmMXViUnhUWm9PWW01UkR2ZUFuOEx0MnlLZDkyZWFwaklnZGZ5RXNya1NnTDhMRHZuWks4R0M0M1YvRmVHc3VjQW5uVkp6Y0lLWDJuS01Ea0hySzUxa3BBZDZvRXZvMTVHYmZGekI0SzF2QURHMU56cnJvYXpGRnQwTlpvdnQ0MjVUN1MxOW4yV0QwMmEzSi9GRHFiUytNc2l3L1pISTlWbXN1WW1za2Q1VHdjc3JrSkZCTUVBQW5CQnVRV3ZnMXI0a2x3R3p3cEx3Zk0rRkt4RE9TTTV2VEhLbCt0QTN3SG1CUHlxNm5hdXY5di9QTTdVek5QNFhsRzZQc3RvNG50UC9CNGR6TC9NdnNXR29IeC8vRmxQeTdsY0pqUGZSSFA3QzM5SkpQeFBOOU81RlNieVVSN3dnc1lHM2hCekZoWmNxOUl5N1NYZ3pZYzBDZGpzV1JrT1RHSHhtUVpITVB0ejlBUDFVRUs3V3NMUDVtam54U2dBUkFkRDdEelA0NmpqNnlHQXQ3UDQ3dkpmR3lkam9sc3ZTVy80ZFhKc010UGh4aHlCY1lDaHZreFRmVldscGQwMmdNUXVnSlhWdUlkQXFRbmpjM3ovblNzVTJhSHE5SlhQT1lXZEVOYXdpRTFrUGRnbTkwNHEzMkZWYmwvMzFlZnYrdWhYei84OCsvLy91L0NMcTJYY2tWemRzSWl0ZG5GUTJFMWR2a2RBSW1XZmN0bC9FTURzY2xvL0wzenVBQnFzMTgwVmo4cWUyLzJSSFB2OEI4dCtza1Y2K2xpdElZdmo5U1BzYzQ2bmVaZDRrUGQ5TG5mMjNUOUUyYnAyUk9MckF2RVdOTkQ0cGRrOGV5eSt5eEh1Nll3WmVncVdXc3BlSG1DN1ZrdjdoaFpTRGkzM1NHNXk0VjZLSlpNaHlHYm44UlJvdnM4WkdTUnRvZGpJTmU2a2kyam5leU1LaFRTdzlKUzBVUmZCeVR4b0NhNjc3bUlyNGUrQk42NDVLbXJ4c0QyaHdFVW5qYUtRSHhuRUhjZzhXZEluUmVaUHQwT3BneFRLZndxT3Y5ZHFXZmZCOGhaSkM0Vjk2S1ZKZ1ZnUlJtU2RzVWpBTndvYTJnOG5vL0xsMXlCcVRtWU1remxMaTdjWWxqckxpUUg5WmI0U05zNlA0Z1AreHdXRXozM2VhbDhLVkRCb2lsREJGZDhhZjUrMkUzdTlaK1BYbFhVai83cmlWOVJieTRrWE81Ukx4dTRmQU5RTW92MVZuWitLY3J2TUN6TnVPS1MvQTdOL0Y1Q0s2OUZLR2RlT1J4UE5HK3Q1QlAvRzhPZWZ0VS9Tb0JzRTdzS1RBZExmZmJtbEQxUmI3eTN4ZXhnZiszeDY4M1lkODNPREI5dG10Zk9aTTFUN2d3Y012U0FYbmRuUmdYTDlyMWVKSStYUTVmY3A3Wll0eFFnTTZrOURJQlFKcVl5QmNxU2g0OHNEb0JsMWt3NVRtWVBwY3pUbzJpbytGeDg1V0NySHIxaUZvM05nMDVMQmJBVVc2SDVoWXdTVlpCWjk2bkJ2Q3ZMUkxjUisrMEgxb1BaNE1paTBSNytab3k3WldVRTNFa3lLaTZTdFdLWXBIMFVRcll4OVZvNXpZUXMySTh4YmdtVERvcHRHWlowUjR0bVNaYkVYaGNHdHc3U1pCbTFDU0U4TXpFeFNnSHdWVlltM21neTFGT1dWYnJzb1FsdUE0eGJYTjBRRUNoTUdVcldtU1U1WlhlbjdKVVBmQWZMUW5SK0ZjVW5sV0NpQUVKWGhqZDg1ajZYbGF4dk1mVE5SSHQ5THErWjhobi84MXAzYndEa0sxUHZQVzE5L2o0WFZQL3cyUGJ0QnZHamljdjc5dk5PSGluZHo5Nk1IMkpPZDE2SHRCOWQvYjQ5VzRGNVREKzdZaHdhYW5iYkp3enBMOEhTN2VxNDAxNEhMblRqZHBXaVJFS0pJUUhNQlFaQWFEajhXcDlXTXpvRSsvWG9xOUtUeFNxQkhzSXpxcERTV1p4VVF1SmZpc0k3Sy9kRnVZWG1NemNsaXNaRG9nVm9tSHIxWmdhZ09SUUg5TVhxaGtmWk5aZ0xsSlZ4Q0xLMG12b01XVzltekczL3g2RUZrUjJ6aTZKYmRLNUhtbHkxUVdNV0xQZFVWQlJQcjNqMmtOSDBLWnJuTWl1emV0b0dQaDM5NEUvSEl2a0huaWY1SEN5cTNLK2VxckJjQUZteElBQ1QyanVGOXB4bEhnMURnZnNObjVRbG1SaU5TRjh0UkFIV2xDR0pWOUdsSHZJSmtMTmx1YWZ1RXdjMFBlc0pRenJBV1F3TkdPSXBBTmxCTWNrc01GbEZEQyt3ZkpzNytQM0cyTUdObTBMb04zeCtMTXJvZXo1V1grOXhCcVEyU1hBQ2NNMmExeTVSZ0Q4ZEtNUDVaSG9ZT0hwb1pvUWg0RWdJdEl3dXlVajZ0ckRjaUxqRHFLb2E0NDZVZkcvbzhnMEErWm5qQ1h1djl3QisyM0ZmSU5PL0JIdHVzcm9CWDFMb245dkVCekdQWFdmZVhRR09TQ1oyc2hmcW1uUzR4ODl6VVo3QnlaNlEyVElVQ2ROQlJqSHRzc0l3SkNVQlVjQmJVWWw5SWZ0QXB3a1k4Sll6dGcvVGtTMEJmUnJReVkwNE5XUjF2V1h3bVZYV3hCcnQwdzI5eFJwYWtKb2VJb28rTlR4K0ppbWx0K0pmSHVDV0tTYTNSTngzdytWWHBVZ3Y3ZmovZkU5RjNTdTkrS0t4U2RGMzh0VGVyamE1ajQ2dnBjUVJFRnBON1U1L1N2YkFGaXVqaGZpZ21OUUdqdS9SMVRjR3luRkxtUUlwNElrZmJaOGZ5STZTRXgyeVBmQ1NRWEFEYkxZVVFPNEY2MEZmNU00cE9ESFR3UURsSmw2V1FBRElMRWhBTnlIVVFSZWJlYUtjbWpIVkszSG54VUNXMHZBZHZHd3BlN2dTWTRzWXhvQWhnbnRBZENiZW5yVVBsa2h1M21pamc0VmdmdEFzcGNzRFVCWmVQeU5UYm01VUlhVUFEMi8yT0FCdXhOOHVwT3JlOUxOQStoY0E5THUvL29rZy9mUy9peXBxb0J1Tzd6bkxaaTdmQUpDTUVjeThpVzFud09HKzExdVcrVHpwTnNwTVJKcnA0UE1WL3lNNExGZjFyWW16OHM1YUdoWU55bkkwMzZxYjRxVi9Dc0JkT1J2ZXppTExKck85VGk4VE1lbGdwZGVURnEvNlZ5QTFsNmUweStXZWNvRGVFbnBwdE9BYUdwQWlrT1NOZzlQenFIV3hpdXpPMjZUdXA2L2k3aWV0ZG9kVHcyNVNGRkZTWUFRZ0Fjdm9Va21LZ0xPWUxJeDRrMmE4SmtWczh5UXRscWxuNjFCNm11a3BmdXJ0YmNBb2hVN0E2ZFl4UGM5SmJxY0VNanRuYitqUkNIU3lKejZYN2M1YTkyM2xkeWErcmlMWlowaXZvQzFXUmhjWlRLb0RaYkFJQU50NFNJcVZEdVhCRXZPay82WG1uaVFLY0hVcXduZVFmWkxWRXp0elpkVU5yY3g5MFhTcnpwU1VNbHpxSVMyK1NpR0svZ3lPVzVDVURwMEZ3d0RHYm1Wb2tuMkpNZ1RjbUtBQlhObUtUNDB4VEFjM1BvUTZ1UExwUEF3bWhXSFlRVW5wQWpFNlRyclVIVUpRRWpYc0lUUUZvQVFVd1pjUHJ3cnAzcUpORC8xNjlOZUdUT1JiUFd5L0Y3ek11ZkZ5UGUyOUxkTy9IYW1pM1h4SmR0bnZ6SmV2UUQ4SCtySG9HclhSWlIvdWJlbC80MVpLbDJIMlJnaVFVVW9RUFFOZmplTlJlRDRaYTdqNHo5SDlwRDRleU01V2xEcUJya25HT0psTWhqZkpzSVBNNnRqNnVYZnpkWTVNSDdDdmc4ekdFb1hEeWY2cUUzalVuYkV0ZkFmVXhhUXp5dkpXTkNLVE1lNUtHeGF4WllWTXQrNXp4YVNKTlRkN1NxQ2h2U3NmcDZCZnlycnRjMWs2RytOV1FGZmU2MHY2aDRkVUViQUpqSVpKWmduelJLM3N3MlF5SFN4QjBaanBKQ211bFVQamtsSUVWMUY0QVA1bTRCbkNQS2xMRzhvaTBXQVN4NW9YTjBkSktkRzA3VGl6RW5mbGxhMzRaZUtWd3hYL2xnbGl3RlViS1hEcHdwVGhoMzJZRjZBNzJ4eStnNnZxTHowUmRMQ3Nna3hSQkpBQ1N6SUZ4ZzlsUGZGckdUMmZxeE4vOEMrc3ovNzk4VC9QN1UvNlBIMEh3Sy9iV29mNTM5R3RyMExaNmVNWnZXTVlRSnZpK3k4ZkRIaklQNG5rdEYzMjNVaGxtVjZQbW5tcHlWYkJBR3lEdWV3SGNZQzN4SkgzMjhHWEsvYUIxdllUSkZaeG5qbmw4TDBzcmRVOFdleXRQUFRmNWNmWFduRzRqLytQUXVYZE04TWRUTTF1NWJheU9mQU9kTDMwMzRoMWZtMWpkNzMvK2pDcnl3cFRodmRGRmUzNnp1d200NjZrbGJ3VzdNTHhWY3V6SCtHNXlQMG93QWlNUTNTY0RtT1ZkUnZpcUFYZUQ4QklXV3czdmFtS29zckIxdms5eFV3WGQwWU9QYjJRVTNENk9HWk9aelRpQm9wK1RSNWE0Z2ZvalUxbXkrbFJWOVErbDhLeUpOOUtUS3Vqc3dQcCtNN2pyS0xiMXlNMmlwNUdIeGpJWUY2VWk5Ujc3eEdORTB5alRhL3BlMUtBOUM1a0dlNGVtWEZnaVkvQlJQZE1qNVowRFo5b25zdm1Jb3oxbkxaelFXckxZNzEzd3hCWXB0UXh4K0MzRHRmTUlSNk93NVp0bjlkTU5MdVgyRVlVMG5qUEhWbmJqNU5NMWVTM0txdmVwaWhLYk4yNnd0MStiMit0T2FMeUhuWDVVNk43bzZNUXBFdzJmaVRxT2duVmlJMlpzbW5rNGR3Zmx4ZUNTN0FuYm9KOWVKcitaWElFOXNTZ0xtQlJsdUV5NlY3am1aZU9sVklZTzV2dklWYnp2dGF5dlc5SCtsTi83ZlVqUU5wVWFQeDl6djAxZEp2Ui9LTCt4V3ZQUkVSN3FQM1BnNTIzTUdYcjNjVFlqeGZ2a1RvbVBDOERMY29reEkxZkxmejVwNS8wdG1PKzh4Q2hzbU9vdndRcWpkZEkrU281cXA3T3hlSFp0NktaVTlnYWtGZ21UcEhNV0piVGVkQkVyZkYrbCswdHo2NVF4bHpzZysyaFR3Zi9mVk14Ym9CdU1jelN4enFkV1kyaS8xcW9hUWRSQ3BWaFQwSGczTjRlRFRpM0M5SVROMlF3a3BsTXhrVzdNeHA4c2dwV2hUd05lU0tZZFZrN0FYa3lkSXFZK1hmcDlnNDViZmVlTGZNdDB5Y1dENVRGN1R6Y1RzTDkvbG5LRHRlejNuVkUva0YvcWN1bnNJcE96WlpyM1BiemQwVG5SYmQ1N3FmOTVqaS9zS3BvQURLMFVocmpCSmFsd0ZhampiaFVNYkV5czVhTTlXTy9INnhqaGZjMjFKWmx1UTVpZkRuTE5rRldISnBaZFV2Zm4vaVhlcFBhcDBQTzBTYUs1ckxNTmthTy9wK0NOSEhLa2hINWNKTS82N3hQWi9ZNjhzZnRGNTh0T2xyYUJGVWZ2MHk4SFhJbFk0YlJHY2lFQnBCbkVsR1hrNmFrbUJtNVhtV2gxWFowdXg4K3FZYlZTZ3luNXFaaXFMcFMwK3drdVUvQjJydE9oK2xmMk9vK013NldaYWR6ZTArSWc3SjF2WG5HdW5IejJaT09yL2ZMSzEwUjZDV1k1QXlOUmRzckFrbzZQTUJXR3NJWXJQYkRESDBCSXphckZ4OTQ5RVhBTUpWSk9qR2pXRjJGVXJDMHNtQ2NwYk5uQUlZNjRITkNpL21tb2ZIRzZMbElicnVuTXljelhEa3pObkZ3WnVCcEp2a3RPcDVScHBQQlBQTTJtU29FT1FzZUoyYk1hd0ZkY1hNZUUrZFFEc2h3RG42ZGNVR21OUEhjMGJtcE10ejk5eW5zVlNRdVNxZVArY3l0TE4wMjNPc3oxR2NxZWdrZWJyckI2dll5WEljRDF3c05iQmZqbnJueDBrN2tJWHVidUpQY0wzdE93V2FiMUFvakc0VjhjUGU3alVMYTFMK2UrUC9sWC83bGYvN1AveW1nZnczZ2YvMnYvL1ZmL3N0LzBXODlzUGt0d1d6SmJ3KzJENWhtODVyWStHOStCMkIvYUZDbXFzMDF0TTNZVC9WY2hQMGs1aDhsOFo4aDlmcnV4MlUvQW5UeE5oaUhKN1ljZ2dFaGZBQ2RSbklaWW9CZ24wd3NLcUxmR3VnazhLSDVyUnY1ZnZXLzZaU0xlUm51azlTcHNUNFpMdlRLVStTdEl4Vm4zNno2Vm5xS0UrLzlqMjZlbkRaRlZvYTRHVGg2cFlFSGtDNUdHQjZBSUtPUXlBQ0VYb0pNU1p5SitRR1IzNjZjb3ZPTlhETENTNW40WEdvZTVaMTdxcjZWUEE2OUZpWnpSNG5yQTNjVGNpMzJVZ29YWjZKTDBGTTZvOFJDZWpocXpmL1p1V2dXNWNiei82L3pOV2dWWEhEdlUrdkx0NjZKWDNOWnFEZ2N4ekhLMnBvYVl2TVBtVFI1amxuZW5uSVRRcnpVTEVsU2JzRnBUYWJQeGlUdURvN2VhM3FXR0tWNHRXOXlsNkVsV1VvODBaU1VtK0YwdTRrL0NuM001RHJyZEx5dU9zaDFTRHp1ZGhmYnNtSWh5N0E0WlRUeEpsUGo1K0lMVFhFY3Q2QzZLYXVUVlRUSDg5ZUlGNUZSMXgvQnZOL1B3dTVEbEM0Qi9mcXZVL1d0QUwwSGNDL25qalpya1lVM2MvNFJvSGkzc1d5cDNPT2swVUpvZTdpYVM4L2ZTVlpnckdTOEdZUC9ad0psamhwcWRwbzFnTWwyUnFHU2p2aGJBR3Fkd2FrVW9ld05VaURWOEpCcnB0Mnk3T056Z3hTQTNjcVFFZ0lseExDRHpPclkrdHdYalVLYWNEK0huVUluREVtSFNhQm9UbG1od21CNER4Uk5nWWU1cDZobFBtYk1JdXM2eTR3d0dpY1c1b29VN3kyZHUyZEdVeStzdWtYUGNMTysrTUo2Ym9ibktXUlNxWTQvVTRaUlZpZFB6SDRSYk9UNW9qZ1ZIVlpKZkQvTWRPaGN0WE1SaEJXQ1lXaVNmWGFNR0xJemhBcXdzcEI5V0dSbEtEMU1CM2FEeDl4TThvbnZzNHBKRWVQVFFWRjJuNUxDc0NRV1h0RW56RkpHRDE4RjNBbjlMRUZlSEVWUEc0Vy84Tm12T3RMR1VzUmdRbklKZElaUUFtUWRXQWFmV2VBU0xVUEpPck9UNHdheGpDNTVsQjFJZjdVaFRvSEpaY2l5WldoSnB1MEhzRHkxNlo3emw3LzhSWHM1NktlQTlOMkErVzJOOFQxVWt6aHJhRVo3SmNJTC9Fd2cyWHRzQ3llcXBEN2owUThGM2FmOEhyMWFBUjlJb3JtMmtGZmdMZkdWeWZmbmU5c3NBb0N1bG1LaVh3dVd0WHllVTJoMk9FYTBDa2dTdlFHYURzanFJWmdiRTRWNmg1QTRBSXFWaCt3dDYzc0VtWjZ5RkZBTG9DaVlyRXpSRk1TTFNkQ3p6QlJaSm5vcHNwYkYyck9oRjVQS20yVzBFZ2VVdGpKUDZSd2FJNU1tOFJHTmU3SUZOeVdVSlkwejByRFhOWlA3UFc5d05CekZEeTNSZzRxakEvbFE1bkpaSFljRSszZTdGeDI1VUlxL0VhWkpLcHJSVU9DWTcraDFlMHRBaUZ6MVZ0TGQ3WkcrZDQ5c0o1NSt6VnJLS1VPWThuNnF5QmgyZ0VNSk1VU3dCQ0tYUE9rQ3h0N2ZpNmZaeWZDR1dZYW9RbFFBc29PVWZSN2pqeFZNQnpwM0psa08zVWp0UEV3SHJuWG1NVG5tdnRzZW9XVEEwK2VVTlJMMnpkRjlkTWl1ZUpRSml0Z2hTQUFwaFdIWXdWVUsvQkxnY3hQbElIWHhFMmJwZkVQS0UxczllL3NOZ0JoaHZRSDQ1YTkvNVE1emYyT1pOdU0yZS9vT0FJV1ZMTVd3MFB6T0w4eld1QWtYL3RNZlQ3Kzdoc252NE9FS2VESHpnRzJMdjhwZmlpWE05RlhlRDhkZHpiRlBVSzFmaVQ4L3ExNnVNNlVCbXVtQWZnaDFocEFCdzZ3Q0NiQlBHUmJ5RzBWdCs1WTVZb0JucDczdkxRYnUzeUdmd09nRmloaG1xYmNWNlI0VzhtVlV6VW5qeDAvNndZcExiSmVNU0NITDBMbExFaE5IcjRhOWhEMVZXSUFzWk1sc3l0VVhGWlhTTS9WK3BUcTQwcVFETmpsRUV6VXlIcHBEYXNNZ05uaitaY2NlL3pUellMWmxzZ3labXNGeVQzLzc2aDVuaUVLZGhDSFI0SXAvS0N2cFpWaEs5T2c5NHlpYUR1UVBDZTRNb1h1UVVXRnY2U2FHSVdBWEhxR1NpTElEY3I4RTJELzMzWlllU2lqNWRFZytVd3JQOEF5MnAxYVQ1OUF3Z3ltWVFnZ0FoREtsUkJrbUFPT1FETGlEb3U4Q21HeUpyQ3VRV2RhSTBUM0RmSTh1emJ1c00xY04zUEQwWUtCUC9mV1RQL3JMUHg3cUovNlh1YjU5S1FTUTNsaGd2QUh3UVBzOXNBSDdJclZBZW5nQnZmUDRWYjhROWZ2MjZSWFlGLytSRVlmZ2tmcEhGZDFNdVllKzZaUzdPUTEwb09XRVpHbGhDdEJRR2w5RVhmeUV3UkN4UUNFWkpwQ3MxNFZNWmJuR2ZhVm5iaGYzWnRBNHhOQkFlNWRPSGhOWFJHQ2dmWXBwc3Nod0ZzOUdvaG1HQ1JUS09XcG9LMUtLZ0dobUZaSmg1aVpwYysrUEdjVlRxY1UzSlp4YlBLVXZUQllxR0xITFJ2RWkzSWJvTTl4Sk1SS1VOaDdLZG1mMThyS2RYZnV4cnhmMmJ0Nlc1UkF3RkRqbStPbzdBTEk2eEh1clZDbXJ0TWZmK0hybDBIbVlCR0JLZGthaFFwWmhGeFFHL1JLWUpFUW56MDJLOHNvQm5sb2RkQTNNWndDRjBnUVMwS01aU3R5VllwWUNTQUM1N3pMVzV6Nkw0aVlBTHJYZ083QVN2aVJtSVVKWEpJSjBBM2VBdmdQRWw2SFY3VzZadFNTNzdRMGpoN3laZVBqLy90Ly9jNHFHZWh1Z0ozRU5SNjNabUVQTzB0Nmdsemg5QjJDSTV1dDAxNFdkU216ZGlCeUQyNVFycTkvNXZnSmF5YXZqMU1YL0hJeFBIczBhd0x3Nm85RDNYQ0pxblFFTkRrQW9NYVJBcXVFaDE4enZ2d1BnRzlsOGhHS0p2SmkrUUpKOHlYaTFTV0h4QVJrUzFqSGpNcHlqSVlRUk5wbk1rbHptRHE5OVM1L0VpaTl6VTFNRURIZnZ4VmNhUHNUeFVsRVNscldrNlNhZGVTNHJSVFh2NjQ2YTlrc0oxcVJNSjRmQ3VTeXFyNkZKOXRsVUVWdXZQWjRwTHBoK0N0K0hXYVZud1hSZ0szaWN6U1NmK0Q2cm1CUXhQaDBVWmZjcEtReUxzdk1TaU13MXY5Smc5WTJBNjFLOUE3ZEs5YUsvNGwvNm5CTzNqLzlOa252V01Mb0VKSFp3NVp4ZVpDVXBEQTlJd1NUdit1OVpNQjJrOHhVZVdYdEJPK0RUVTVhaEpkbHpYekx5OFRtTW9kNEE2Rk4vRGJYOTY3LytxNzRiWUJNTjgyeS9jcFpNb2Z6RFFGZktPOTR1ZDRyZlkrK3N3RnZyK1piNG5TNitvVlk5OTdZNzh3MDd1TForM0ladUNYb1VrTkVBVC81N1IzemNCSzg3M1NMTGhwTk1QSEplTlR2K1VzMVpNMmVwSHdWYy9PZFFDZ2FPbS9nY3JYZTFzY2k2Q2FVWE1rQkdqWmVoSkJNZjZmcGJOUG93UlgvYUlQNFRVOGpCek9ONkpNWXNyc2o3bEdXMGtCb21remlMZGp6emZJaTJvSm5sM29xYkZQeTdScUZPZGdhSEh3cW96K3huMmZhU1hNN2FaQm91bVNKNFBzeHVFejkzc0pKY3dKWER2YUJIWVFwZzJBdmRoTHE0OUY4RXNzSU5VRFE1ZktKSi9VUGNiVHNqcXlXWkpicWdNMWMrUlZtR1dlWEs0WVl2NlF6dnE3d2xTNnZFbUFEdW84aHV3Qk9IcjlMY3RIRVQwaU8rZmdUSVAvYWpUdmdPd0UzS012VFRmL3R2LzFVQnZlaVBUVzhkaE1kci9maW9ZNzZObUk4RDgyTVozeGYxVHc5THAxRCt5SkhFUC8rOC9TaVNiSlRqMWZFYmxNSHNIK3dBUnJuWU9sK1lISUxseXMrTW1tUy85ejlxaEg1TWxLSHJ1MVhqRXZKTVM0Z1M1cGZSSG1yT3B6WVVaY3RjNFd4UFE4bFNVSWIzZ2k3dWVzemZFanZyWVVxWDNUQTNJVnJOV1JROVF3QlpuVWtmWkpDcG4vaDBMcG5aOTNwZnJlanhueTRYRC9kRWZSM1JuZWV3aml0TG02c0ROTXpMRFI3UW0zUUl3UVptVFluSHRTeHFGaHI3QUFjNUpIK2FvVG1SSVIrejJIdmVTREhpWk9qN2c5UHBKd0VZRGN3U2lQUm0vWDJXbE9WSzJiTVhYNjFNUXpFbXgzUmlTdzEwa0JKNzNtTmRFTHdMenMrY2kyeTNsM3Y5dXl1cG8vbytpeVBvVU9lbFVPc3plckk2TWlmQ09ma2xtUUxocnVsTVNabkhVRzlDeDFaQ2svdUNuY3lMczRlMlRneXpibHZzZnNRN1dKYjRFbEpkUGZFNVpMdmV6TUhIOWJJa1ZlV2U3MUV6eWRPcXlPUVRXelBqMjlReUNqWmdTQllsQ3JoUlp1Z2x0Z0RaY2tqcEloUHZLWEdHb0FTa0llbU85cXpPTEgwZ0JmQXY1aGtDQXhEZkFJbTlVU0tId3VSZVlRbTZwak9adnAvT281U1ZxUi9zNnM1elJaSUxtQWJIdldzY3Z2M3U2TVhYM3NEOEhuVGVzUytHUitBWk9xWEhuUFV4djM3VVI5RS8vL25QZWlUUWV3QU45UWRBNWFyaGJHdyt2czhtdFJQcHpRS0tld3JLM2I0RFFPQWxzSFBLMUkyM0pJM0ZkL0pqekJkYWZheUJUMmIxL3E4VzdaT0Z2aXE5Ti94Vnp2LzBQcDlZdW5FL1dhWXZ5WmNyK2JHc3MrMXhpN05iOSt6TTJhR09sdm9sbVprcFNKd2E0eEl0US9TZDMyOVhtdkwybjVoSkhveEN3ZWhvYmV2VDNTZ2tjQi85Z0ZLRzZla2grMkpZbEJsOWlUTVhjU2RkR29HQW1mdzJ5dmdleXQvSG4vbS8razlaMjJydTZXbjRWYmkzaW5PZmwwS1FBT3ZMRU9VVlR4VXJ1eXdGbjhFZmRsNG1KcG40ZVljbGl5SGd5dXFsNENyeGh2OFduamZsUGhQcXJYYkcvbGQ4aTc2NFdUMzIyYVoxcjJmdVMxa2h5NURjSy9CTjllK2FYelg1TVQ2ckMzdm9SM1lldi9VR1FQOElnSjdnWVNUVFVCV3RmRmo2OURzQVQzTGs3b1lRandabmJWcHhFMi8xZ2RzTlVCVjdKcmpSZnlDRTg4dmNvdFJRS1N4T3p2MG1SSlhpQnYramdSKy96OUxoemVJVCtzSkZMdFUvNlZ6Y0dIWkFJVUl3QnZBQThjWXdaV2lCOW5reTM3aGRoZkMzWVhGVGxCSTBZS3VpdkVwUFdkYXlTZTU3Tkt0YktjWWZXaFJiUnlGMzFYWkhJbGZBbWwxd3JCNk14YWY5K1ovOVFrbTVremdHVjByelYra1pGVjUrU0pPNVNEcVpqUHBLWnczSE4yaUgrMWJCWXR4aUhodlU0MGxaL0J0eFQzL0M2UE14eTlJNVoyRStHZWxGMG55R3pCT2xnVzVpUm9LU1Rzcm5BU1c2VlEvQmRPQjArTzUydzVTc01sUWlUQUZsbU1xQ1hSMjloNm5wb2E2QkFTeXpsaVFwM3dhTTgzUFczVTdVNTFWNlZtZkdSZmxxNjdQdXpKVUh5ZzZjQXI5MHlDajRERTc5RTVJYnVBTnFFYnJTMzF5ZTVDWlkzazhvMXdHNUpVVGRJdERRRXg1Z2ZxSXZvQWQ5L2drd2s5cUwxN1ovVjNMWTQrbGFpdmFpYjd3QmNBMTlRMkg4NjJpeDNNYnFTVCtIWkkwWTErNGxTd2Z2RHVjTVQyZkF1dzR2OWU2NXJOMHlxeXRwRDlBVHIwTGRyZWQrWjJiWjBwTDh6bzNkbCtzZGl1R0VmSEprNy8yZlJLbjRSTncxcEFPc0tVT1JNQjNjcDZCUEU2Y1V4c3JVSXdOa0ZOekJVcC9sU0xraXJ4emdEZEpuYVNXQmVNNktMV3RubkdJeVQ1ak0ybEtHejJHVmlTR285MktIY205bk0xUk1Nc1VEajVyYkp2MVNDWm1DTkpjSHc5MXMrMHF1eG1nNkNZTkcraUNGOVpILzJJYWd2UUxOeUxHakh4d2NTL05EL1NHMGRCWUo3MW9NYWNDTW9sdG9mOCttNFVIdUxYVVRNNHJqRExNblBmcEsrbzA2TlZwOGhoMWdRc2dNUTRCNDQ5eW51Q3N4SnhlbW14QXlXTHBCQXNpQ0FSU2Z3aXNLQXlodThCMmcvRGJnZU1LWnBiZWhjZTVqRmtmS1RsNHluazd1OTVRNkcydVNUU1lka3IvU1o1V2lMOE9sTWpXSlhRNm1nM1N6T0ptaVo0alNZdmdiUUFvYW1JZGdtY2lOUWxGdGV0TFdULzZZMUY0UDVOcHJVd252RFFwVEdoZ0pNK1h5RFlEQ0tyYXBaRDB2bUprVHJ6eTdxOXRTS3p1eHRhSmVYUWIrcTRCNyt5cTM3dlBjLzBvcFhyYkw2VitsU0g4VDZrMStDNmEzM1prZm9jK1hjNzlheWVWMFhycTlGRkN1ZzVlNVM4RzlEMUhsZ2hQWU0wOC9SUWVaSHhGRXJ2VTRlTWdlL2dsUUZyS1hEbEpLb3o0N1NCOE1rYVd6c1NlYnlqTDlJckIvNXByaEJvZmVHdTBiczcyeGRLSmxSVk9HV0ozQWRtUzIxMnpQTWQxTzRqbEFJMzl3a2JtMHlCU0FhWXo1UGtrdm5tVm9oeVJWamtMcGp5WkpZZHBMcTBLV2xQZUdNVnYxMEozTmxQWkVNZ3RDS0FGMFlrYkRJcllBSy9TZkIxUk1xMEh1ODBVQWtESXhpWkNBbDBybldrOVdHZHFrUklzelVSdG1sQkRBbWpJa01YT1RMRmtsbmVFTjZHNWZ5N2cwRGNnOGNkWktIbHdBdysvcGswVnBHQkxnRU1NT2VtN080aHZwcjdxaW1hMkhlYmVtaHlkWjZWQnc4ZGxLaEVqUDBpYjE5SzkvLzB1ZnRoTWtWMC9nZnBGM0tHOCtZSVhBQXBkdkFLeEx1elJWU2J0bzcvTHVUeHFISEVYbTNNL3NzVHFEejFpZWNtV3JzZHQyWURMSEMveEpmUjdRMHBrZUkwSUFhNmI1S0FjZ3R6T0V2aHZvUFR4aHZsdDdEd3VwNXp5Z21YVVRTdGxiR004T252c29WeWROYVh1USs4bTVOSWRjRnVyUmU4YlJLdzM4RGFBTk5HTEFDYXhNcHMvZERKcWwrYjEvOTdRSnZNeUh3NzdJanBwRTR4S3J4SkdyalQ0OTlMNmJaRFN4bFdLV0ZWTXBUS3RrSVNDOWg2eWhUMHpJVFVBNmhvb1drcUZDeUlJY0t4UERZVS8xTWJqZHBDeTV0L0pud2UxWWpUYVc1c3YyRUFQOFlPMWhUekdqaGlnQkE1bk1zOWFIQ3NPYmxCdE5oc0FKd1Bnblk1eDd5MUxUbWFKSERDZ3A4SUJsTXlLNzRFcjVrditZRzdaZkJlYU1UaDhFNUJ5TmMrKzZhRHBnWG9RSzAza0VDY0JkYndaK0NTRGw0KzFsbG1SWFdSbEtUZUtzOGx5L3lOcU94b2gwZit0TFZwSWZ3MWxJTndvTllmd2RnUG1zdjVINnpXQnB0T21tcHZ1cks1b1o1R29qZXZjR1lKVzRjZTVHTHRrVytDYnhNeUg1ZXo1bjhCbkxtb3R6RGJ3YWUrNHNpUHQwMG4yb3pPaFZuZDg0L3VIMSthMzZ2bDk4ZFpWSDZ2Tk5mdTM2RkRlR0hkQTVJVE5sS0RJWlk1Z3l0Rmo3dmtRbHhiVzg3eUVZR3hZM1JWMENtUm1UOW1TZm11SmpEUUpTRXZTb2E2V1ZHRDhpUXU3RWFSMTI4dlJXemFRVEU2dUhYWi90Qk41L25zUlV5UTNkQ2FZbjNVb0JuMlJtcHIvdy9raWNrc1ZraTF1YU9CT25WSFlTNWxUdlBMRERFK1U1Ny9Xby84eHVkcXQ4Riswa0xXVklZZzI5ejlyZHhJdzBwTU5rNGlmeGxXZm5ZVHB3RC9CdnRWU3l5bEJXTUIyVXVnZ3lpMll5ZXBPSXZtZ0tyMkUzdkNKNzdwY3p5MlplVnVsWm5YbHBJa0hQNnN5VkQ4b09uQUsvZE1nb0dOQlRNZ1FHZkZKZmZCZ0MwbjlKcHNENFNzWnRRYkxVSkxiR054dytjTThTRXFOSnc5UVVyRGNBN1MyQ1h4RDJsNFg5RjdrMm5XcjRKVnQ3MVJoL0UzQjgyMkZqY1ZmQU9waHZCbHIvMTVVMEo2bjNtWjEwa0dwYnplOHhnOXdyTW9iYktoektrWEhPSGN6ejdUTzV6NnU4cFZ5MnRDVGZzdjJtWXJVbi96aUNvOW9QM25NdXlEaEZkZTB3QlU0d2d6S2NVM1Y2VFRrcnNaM2lQSjhURDd0ZFlLRFJXRkZmem1WVnAvTFI3dUg2RjFrWnVwSW1rdHRTa3dMamUxbEc4VThTRTRIeklzeUh2MjNSdHJKZUx0OWxOcnhGN3I3TTB6YnZQTnNkNWpLSDR6c1Y2bFpmejcyZFR2dmxkTVpoSFllY1NVZTFidGdaeVU5M3l6MDl5Tk5wMURyY0Urclg1WFNxNkVOak95dVZ0VnJXdWxvdUpZN1ErVyt3YnVSK1JGak5ibEtVR3I2MWFUSGQ3Wk1zSzhjMDk0YWU1K0ovbGRMNXptQnlBOTdLZWlMdUdoaEE3K2NtSlBGOXRMc2R6RGhneCtnTFViYVUrRWtKZGVTbUJwZ1h0YklLeGdlbE5ld3RJR29mTG5iU3J3QjEzeEw4ZmZ6MjZickkwbkJKYnAzdkU4OEdwTmYxb3IreXVXbjBaYS9XclhUckhPUzg2bnMwYlovamNiNm9oM09DdXZGL294MlZtemR0dlFISW4vNVhhQ3pOZmdzNkc1eEcwbGptdmQ4QWpQNjMzeVdRajVaNXY0T1BPWTQxMEs4ZWVMcHp4cnIvelI3bmJ3T1BkdVdsbjFENjgxOSswZDk1KzVkLytSZEYvL0xMTHlycjcxT001akRjQVUyNWo5SEJ2aTBaazdzRVE2L1YyTHV6YVNPenY2czA0aDJNRW1NNmV5MDhhVzlYSGt1cGVTdEJTbmVZQUxIQmRGTW54MFNLb0F4ZDNiWUsyZG1raG9XM29QQjlLS1pzdEMwZVQrRmxvWktMSnZrbG1ZS0NLVW9pakpRbTd4a011L2pHZ1N3MEFpcGtrMlV6S1NCZFNtZGxrL2dBTUNUeENiQW5KV2JLOXZTL24wWSt3eFhaVHZLQlJrc3MzVWh5OWJnRXBucFhrcklyN2RuMzQ4cXcrVEFkNmY2NjlUSzczYWp4em4rOS9mRVA4NDhFakpiMjFSN0NlZEdaSEtONW1jalh6MUtyZFhEUytkS2JQdnRrdDBQcFhFV1NUOE5oMURhTFRZUDNOUjgwWkVuRmVlZTNPOE0rSEYrbElaMzJVdEN3Vm5VVVIxelNHUjZKMmV0a3BWRjZjV0I0Sko3UnZMTVBhbEZpMG1mNUVENWdmTFFYMHBaYmlXempaZk0xT2NicEUvUzJ3bDZySlc4U1FiNGFlK1lPOVZWdzRqejNGNHVaL2N4TFlhSHAvU1FqUEs2WFFxMkd1Vzc2cytHSFpGeVIyM25qQzNCNm5oa0VFeHo2OHhCUENhekovYkFOL1ZEc3RpUWFIT3U4QzZ4RXY2Mi9PNStUMzBLQkVRL1BXS0JVWG41aWVyNk9zQUlNeTNrZk5LTS9aRXVWd2V4THVxM25QdHo0cy9sSVBHLzIxTjdnSER5TkVFenQ4SVhKOXBJLzVlOERuNSthMDB3Zmk3WDd5Q2FIQjcrbm5yNDZhejlvMjZMUDZSNjk3YzVINHA1MWFQZ3p5bDdYYlQ4T1k5eFhwNjljMUdIM3RQc3l0Q1JmNk1jRDlxbUtpNHQwb2hvd05pajlsS0ZUY3UvbjBpNGJidk1DWndXR1pqUXpQbC8vODUvLzhwLy84My8rdi8vMy82cjAvL2svMnV2RlYzMXB0UDBHc0EySHlTU3lvcnZWWHBlQWYzT0FOdzhDL2hHZ3JYU21CUjRyb0k4OHh0dUN5WTdLUjNpOEVkS0kwTVNqOWUrMTZXaU5sWmpsam9tTXRkaVAyUXk1UWNHNXJxYXFackt4MnlkUlNneEZGTjBTNXVxNEtMWEM2M3ZCTnZHUEYvNUNxNDgzOFcweS80bW45cVVMNWd0cWVUNHZ5ZjJLMlpzbzYxeUd1K3IwdFdqS1VGSzlCdnZTMXAzbnVNYjEwc3R3NytKZ2xEYkpnOWsxaWh4a3pLblh6UzdQMGZEYVJmTnVzQTllZjQySlRMSDg5WlhabmNzTlJSSEFqTmpjbGlrWW9oSFl1bC9lRER0NWJtejRkTWJ1cTMzdnFxZzhyMEpxV0RydmdyZVlxelk2djJTeUh3UUM2bEloZlpuUTY4cnFqZ1p6Rm5QWlRzeFE3RnVjaVRzMWp0UkkyaHdQK29SR0d4ZmI4OUNOOHNMN1JEOVBmNjUwZ2RRblBwV2ZnL3VvSkYzUUdXeDdxRE9Jdno5NDJJelBEUGJPeXRNbG1STS9wMFNpUm9rWjZzd1VmMzkrZm1aeEhrNlRFdS9xOVlpcksvVDBIUUM4enVCZFo3TDlCcklzMGVHMlB6aUxHWXM1VjFQdjRmVzNmcnpYYndDTEt4MlMvbVR4OHhha3JsNy9Ec0JJbVBjVUFmY0U0MW1aMWw1OTZDMkZ0ai85VkNiSTlMOHRHS3NXbGVkd2pPRmg2QU1HNEpDR0FuTnFhQWRJMlpXbXlKeFBZZ2NXZk5NOVJhblNtKytNeEQwUmh3N2VFdmYwNzhQOFF6VDVmWmJpQzZ2a3F2cER1K09wT2k1SlZUejRXVDRUNlVla3NTOUFhN1FmTnpnL1krMFBwZzVsb205RVhMa0lFcUJQMlNDUGp4TG1LRzRDcy9nZ2E4cmdGaHV5Uld4RmRYK3BJTUhGMW9KQ1l0K2puVUZNQ1lFMFhLWjAwa3k2Rll6bnZSSlpTWDkzZUZXRms3Rk1RVU9YTnNnb0dJMmFnVFRPWExkcWNhYVVMR1FHbjl5N256U0JBV1JVR0Q0QjY1TUNKNllNQmhJOWpBRkRCQW5zd3o3RmtFdjlVdmtaY3BuckhqNFd5djUvYzF5bVVJYlAyOHRFY0FmUERhM0VnVVNZRHFTQi9ISjlkODV5eXlnOWZBQXNEWk1VMWhPMVByblhiL3JxdXdmK0E2QWkrdzNIMWMxN1gvcEpFdnppRFlCMExwWTl5ZGU4Z1E2SEswbXpiNE9naHFQZmRLKzZMamZCVVFvZVNveHc5Z1lEU0RIS2JtWFpEZDhMUlpQYk94TnFmU0hvRTVINUZja0UzVUNYZFNaYlZUUWQ3c1daK0oxeDZWUFZmOWhXdi9QS1BDaW5jNVVIZ3czb010cFA1Z1JqVmZOOFdLNXowVEFFMEJKTUFyOE5FQ09aYWhrWXUxd2hpekxiSTVRVmpaSGhiNzZua1BzbGdISnU0R3FvbVZNdU5ZbXpZZVBpaVVOR2hURVJMaWtzUzhxU3RGWGYyL09Kc3VkbXJXWDBEWEo3c2Fyem9vUTZWS3Z1VThBbm02TU9DVE1MSnZVOGhVTHBJMXcyT3hkeXZ0VHVFMmd4aU14OWlTMUFCc0JOUUNSOEJ4YWt2akJPSVJGbFlSaWV3T284eHlFTGtVVzBNNmxIZGtWYThOd2tEYjhuZG9lNXo4NnovNG1QKzRaa0xib3hWenpPQ0JLY3JCOHZRVHJnWDdMUmlBZDNRQmFoRCtodGdnTmdhUTc1QWRDZFpkSkp2UUg0K2VlZi9hYy8vZTkvU2NPUHVBdHpPekpnRDA5dllyekJ2SGdEZ0U1cHd2cS8vbk9MWml3QWo4Ly81emNzNFB0ODhQeGF3RUlBMHIrUVpYaXZWSlFKQ2l1M015bTRkN3RTWnRZSDhMS3IwcWVHZmVJOWNTbTdhYWs3OUNvMzZkOHRSRmVBNzFiNkg3bVE3K3JlYXg0SFdMNEhrSUxsQlNUcHBWQm9lTzJ2N2lnVFdJQlNvRHlORmR0VVlwNmt5NW1Sb0dqR2VIOVhNK0Rzc0d1NnlVajgwbTFaZ29tNEZPMXBtTXRJSXdpSUt0UkpNUWlJZHM4bkdrb3ZnUjJ5eEZKMlJkTEFsYUR3VjRYMFU3VldXb0N0aG5Rb2tGRndhbXhTVXZMOGxDQjliSkpad2trNnhQNGlwQXJqd25teTJXSHBVMEpvQkxpOGsremxpSlpRNGN0UTRpc0d2Z0NHRkVvRzNNRzlmaGsxK2NLS24vS1B1WkNDN1hjRHk5S0Y5QkN5RE5VcW9kSjI0WHNpK3FLRWZ3bEk3RUM1a1BqQWRQQWxlaGZxNWpDOUU1aTN3TnB3L3hHZzBvYUdlcTdXM3Q4SDhHMW5XVTRoYjh1b1NRdmN3Tk0zQUdUcW1GeFp5MUhmMy9lbUdsZXlyK1ZIelhnSnRIbVN3bTRHMERXbHBhSWttbnhpQ1RUVVhwT2U0SGhOamRCcFFVbzZKVDRKOWphT1drOFlOMWtPV1UrODcrMGJ6ZWkrNkx0Um1nUzg2L0M3UGxmZ2FobmhBY29TMWo1UHM4SHNOd3FVQUtlVWk5Yy8vaWdTTndOM1paNFV5dG1URkl2dFQ2SkJjVXROQ2x6Q3pIS2ZQa3RCSWRNdys4UW5KNlZjTFNVcGFKYWVHVjJtSUNBNi9PZkJFaWgxWVZLVHBQQnlzMkdXdUpFdFExOUMzc3lMRGdXWU5ldHNFbzJiWVdpZ3hSSVlaK3ZxNC93QUFFQUFTVVJCVlBsY04wRjh6TXpJc2JaSk92VDUvVjUvNFpRaHNBRkRwekVFRkQ3ZHUwUEprdmdKMHowZk10MjhWK3dhTThjcjVTeUdET0FlR042QTdQWTdZM2VWKzlJMi9kQy9tQ3Y5Rlk4SklOMGdQd1BTRU53QkpRaUpBWGZ3WEs4TDlpWTlxK0Q1RnRqTWZZL1lNMDNtcVVnUGtxaWw4YW42SC8rb2ovL0ZHNXUzZ1VqZlo1SjBDSjRoak1Hak53RGtjR3ZUWXR0eEx6azZVQi9hMU45UGY3ajZDeUVrZlJPZzZ2dmp4UENmdzdHcThEQ1U3NHhENGdXT2ljY1NaMjVxaEhFRHBOaHVoQUJvdmgzb3RjU29IQk1VN296SjFOeDMyS3ZjNjMrVDZEOUVrNy9KeW55bWFGL1Z6dGcvK1hFS1hsOVpDdXJjUXk4Z1BYODFxRnhOYVU3S3REOGV3a2l4T0UvczZhMW1McThJQzBqWjlEWmE3Vkd1Z2dzT1F4SmhyQzROaUVSQVN2RzlTbm11cDBxbUxPdENsaDQ4SlAxZUpqSEtwYzl6OHFyUTFYY0FjRmFpZW5DNm13RTdKS1VaQVFRRldHTWZoM3FXbUNROS9QQ2VsdElCRXZBOEttWEpZZ2dvR3ZORXk3Q0kzUW5pNWRCazd0RURTdlNLVDVud1E1bXpsdUtYb1ZMeHR4MldLWlRoODk0eUVReDQ3bE9VM1FHbUErVkM0Z1BUd1Z0NjBuRytUMC9aQi9ETGNoTDRGd0IwRzlGUEFXbXZid0xvTDIxU1N3THVNQWJhRzZBcElLT1AzZ0NVL0tzaGs4bWVyc1JmeTMrK29wdlBwVkdIM2JZelZ4TjVvbnlpdWZLLzRaZTJTL0xHNUdPaDcxUGxZNzJWckgrZ1Zrdm5QOVJ3dFl4OGx1RzMzLzJwRHNHWXl2aEx1OXNiOXhNL3A5a2M5aDlTMExzQlorMkEzRWdaZjFMMXVJcExxeG9xdXBlZTFVSzhqYzlNY1VEemhlQyt4REthWkdKM2RjOG9LbGt1UW1jazZDWlhwSXVXL1RLOWFPNkg3dXBlODRFb2pkay8xMEZ1Zzh5UGxObzZrRTdwbHltMkxZVklCN2dmaGp2UXdSckg2K1ZHT29BVU0xZTgzaUQxa0hLZmt5NjAxSmNlR0JiUWN6dFRValJjYWo1Sjlpby9PTlBuMjVrblUraFpoU2xEZTRvOFh5NVBTaDJhcGVjUmJ1aGI2MTB3cXlSdTdYd3JRdmNLUGZUcmJZQitBMWcxMUlOK0FjQS9FWFJUOHVvT1UvanhCbUE2Nmc4Ti9Xa2dmYTloLy92OUdtbHpEYWZOMTlpTmNTanQ5TDdrMTcvOXF1OVQvTzNYdi83YnYvMmJPaDdmcmRoN1JBOXdwSlRZNWErL3BrKzIwVE5uOUwzNzVwVWhQRURsRWxOOVNSSTFTQTNyVUVKTUV5QkJKaGE5aDJqNGhwRVlTcERlbVNzM2xOa0dWVEIwZXRaQ2c0TTFUaWtrNlJobXVSUVhRU1oyR1F4WmdQU25WZHlXZ053T2x2b2xtUzBKeTZvd3lvS2swTkxxTFhKcFZVcTdMbnY4bDdtS2tpNmMvejZBZWZ0Z1lyMnRkRTF1WU41bjBDTVdzeXhLRm9DVUU5RHoyL3htSkQ0SlRrb1A1cHVLWlJ1SWU1UlFBc3VTdWNjNXpTZTVWN2V6SjducXBNZ1kwZ2FNeExuSUNNd2pFOGlRSjVzTVNvZXU5bGV5dExyS2ZjTHpGL1FrdGljVk5RUWZWc2Y3ekcyQzBxeVZXdFV0YmY5NnVMeU5GcDBNRHprL01sK21KMW5tTHV1TjJmOVFQR0xBS0w5ZnAwbkNKeEJtU05hU21jTGpoTVI1eTVyaGRMRCtLcXNjbWpKTnpERjU3cnhWalBYSFRTRHJ3aXNGYk1DUUJyNFJ5RUtVbnFjT1QyUjNsWm5PMGtlWkNOSmxrdHUvTzBIUkZDencvSXhtZTl1d245b3pkd3dHNEpjdTFQamdqdjU3RC9kRlV5K2N6U2pSakg2STNUeFdCaWtlVGN6MFphZ29OVXpaNXIvUEZQRXc5SS8zVEhQYTg0TytucVgvL2QvL1hZL1crbTNnZi8zWGY5VTdBVEd5VFdjOXdDdkxpZWFGQldDVUlteEQ4UUpLZWZzN0FEWmxDVTRUWUhDZWM5RGZDakxQWllFWlhVYmVKcGVGbHVUYjF1OGs5SXBMNWgzTGs3YTduY0svRC81RHJzQ0RzMkw4RWVWOEQ2QjE4bWNJdmczRnNtMzMzM0dEcjF0aFBJUWNZTHd1Ykhmd0U1K2hxWkYwZktZNStlMVdXS3BkVGVxS2Q3cWlBbnNQeGZJalF4dGVaV2FoVFhueEFpYUgzbmxucmdyWlBNc3REWjFleEwyS0JWZTFsbndwdmRSOEZWa2FaZ2h3b1RJVWVjL2NSNjg4djJwU2JxKzdxYXNreTlDaDBYbUs1a3pQeEdKa3E2VWg2b3dtUmxCQWFoSVhtWWNwU0p6Unppc3Fzc3gzNlg5UExwMno5SDM2anhrdGt5ckRxNTRmeXE3U3pkK1o2R2lkenVKN3A5ZlJ1MXF2VHY2ZTJ4bDFzQ1JmZHpZVnl0VXp1dlorYWhmMjlqRDlpZXpSR3dCdXl2TnFPZDVTTEF0WXJLYTE4UU9YUytXM0lFZlJ1S2JuTU1iNzhXQkc2a0VhN1pOWk50YXRVbllmVGVWWDRWN3g0VVFlTnREOWJ4TGZFdC80L0I3Nk1WZWdIOTkrc29uUmhhVHJxSWMwS1pGNWlWa2p0UUtLOWxBeVBSMEcyeXhhU0JXM20vbFV5c2RXMnBlSzhBNDVxOGdneFg5eTY5WFQ4S3BuYVVqTVpybyszUktUaFkraW5ZVEpYS2RreURpdFV2OFpuRlUrNCtNSENEckVscmtVNEZxU2lmYytHV0ZJQVovL2tJVE1PTEdYTnY4bCs5bkN5ZWtsWTBIS3dBWGNLRThsOS9PbjZ5WERNMU1nQVVRN1Uwd1FBTzV6SFVVTTZGazloRWFnUkJsMjBNWHA4K05nZDA3Lzk0MGhTOENURnVTVlNSZDA1bVV1S1lCbEN0RUVYSVpLZ1NlOU00UU11cUF6UytmaWs4T2xnL3JVUHdHbXovNzFIa0JZbTFLOHo5eDNlWElmdlFGQTdkcFhqV1pVN1dyNzZVOC9aZTQzeGVxcXJ3c1ZTN1FNa1hYUWxXS1FaY1hKMy9WQTFsZUIzcHVjbCtUSEtyNWxOYWUvT0RVL1Z2cjNyQjlwQlh4akgzdWQrK2R6L2pTY1BjL1AyMWZuNGVJTTJhL1pmcWJCRkpBbURoVkdQYWhEc3J5TURCTTR4SFNHejNGbGorQXBaSFc4V2hEZEk1LzZPcXF2dHF5Q3BwTXcxbmlJZm1WY09jUllTWkZ1VGtnWkdLOWVOOTJRM1lEdWFmRzdQamNsRkxxYWw2b1EyanJaVDNnTmljb0JuR0J6bmkvU1hlK1c4UGZ3YXI5VnIyR2RKT3Z6cEFpWDZZVmtlQUs3dmNsVGFLOVJRanU5cmVwVlZETGNFaWRwcTg1YzZWRjJZS3RNdkdGNkNFT0hqdUc4RnpJRTRGRDFNV3ZFZ0pMMUd3NlhMWm5zKzk1bnBvTVRjSmxBeWdUY1FTOWhwaXRobGlsRUMyQ1lXWVAwYTkzT2RsbG5wTzNrSlhQMjMrdXNIV1R5cHorT2Yvekxid0JjU00vVjRyV2U1QnFZNlNIejJtdFRWRnNtWHI0QmtCcmRLZVBpZFZGaVc4L0VXZWRjQ2JldkJWRjBNMmFHbm9LR0JWalhFNjhhdTNLUW50QlY3cGZ6cGVKeUZrWHpWZzhsZCtsL1kxalNiNVMvaC80aFZtRGNFdWVkZ0NNTGNQL25NK1M0YVNoYWxPaFA5NVk5dzAvZnB4Q2YzQWY0MDd4RFU3UUQ2czZRYjEzSG81djhTYUVmZzM2WHNOTFIzS05NOHBNNEo1NVcyUU1ha2R5VGw4MFFKeVU5RTZNVTJhMDZzNVIxa3JycG4zV3ZNSWxGOEs1UFNUK0djK0g2dkdBS1VLSkxpd2NVa2hSNXA2enJsWWo0YU9uclVGK2xsNHdGS1FQZmdOSnlWNmJBVVRRS2dUc2djUXZ0TngvelhkK1pvc1R3WTd5eUtGRWNDdCtWeVNBRzJPMEgzTHZEM0pjbW1RSUFnUmpmMFFrWk1KU3lNSVFBdUwwRTc2WjBQVXdCRE4zdzFXV2JNbmZiR1R1Y290eSt6ZTZ4SElIMXhLOWZBdGJRUFdnSU5oRFA1aXlHQnVqVm16Wkk0Y3MzQURicWV5VXI3WVlmZ2orTUgxb2FqWDYvYndDTWp1YmNqdFk4MWVSaEVIV0dVQUprQUtKaWhEVnJtRzhOZXNVbnpQT3VsbTVYRTF5S3YvT0NQSi9hNzhvM1YyQ2MxZk05d0JyZ0ZwcjlIY09NOWROakdpNCt3TENWOUhtbWxhRnpyUnozbVYyY1FGR0hKckRXZHdaUFlmTlh5aGJiTDk3QnpJOTdDV1VuaUFVc3VJcW04am1tYUUraDBFbXozM0JLTTh0aDkxd3lKVmNhS3RKRGtqWnhxT1NTdUN6MEFUSWIrRUI2U2FFOWJPbS9BSDVrU0h5ZnFVbFNWRVZZSjVhVURwblJ2aGNxTFpXaFBRc3ArL2xmbzgvRU1yZVRNQ2V3WHhZbUNaMHJIQ2VHK0JzbDZRRDBDZEk4bGVaaEFPaGhPdWdhR0lDeS9MSk5PaUZBQ1pXaFpHWjh4SjJGQm5EbEJ2K0RBQm9HNUl4TUVyb0JUQWROK2hBVktJSWxrM3JqbnRVMXlWenA0VHRRdXNuY3YvVEVCMlZuQ0MxQjNpaWNxd2RwQWYvMHY0QUVhQUMyMG5CWnJzZ1FDeng2QTBDK3JoYi90eXlUODVIZ3BTYjFuOFNxUlpOcDFYbDNsZUxPcEFPNFd4RVN1SSttOHF0d3I5Z25ZdVpqRmJ2L2pjOWI0aHVmMzBNLzVncjA0K3RUcTF4SFBQcG9GaVdVUTBWSkJ6RHh6bGpmSGNSSWJENnpDcWxxVjBvWHpWemFjRkh0MDU4aFVZRXYyVnhsYWVYMkZFcE42Um1OSFVwMGFadktOTWVxbDBzZm9sa3JjWW8vaitucXMxYnpQUjRtMkhvNkdoWmdwWG1pSXNFSmZQNFRKV1JHKzdKb1lyNTJVOFZpMkJrSmtqVHVUSkV4WENxWFJic3pKa3Q5a2xRQmxHanl5MEpYdGV4RE9nQi9HQUNoQkNYS3NBTmxRYWJEajRiZDVNTldrU1h3dTZrbjh5V0xSZWdNb1FKUUFvcWdESkVCcmdUd1Y4cDdRYy9xREE0RlNNbnE2UzVCb243NHh6Ly9vNy9oby9jQXZCa1lINitmTis0dFNVTWF5RllicEpRM2J3QjBLNmwzazJrOUd6MWFIRGU5bytSNGYvREhYLzgyeW93L3VLYmgwdU5JK0R3NkZSZzFvNTF3cDVWMU9KUUg5TnhPQmViRm5DdDRxQ2Q2dzcxay9vTVB5NG4xRHo2YjM2ejllYkp4RWlVQXF6Zmp6aEFDb05uQXZDWTl1MjVTc3BZQzUxN3V5OFdDVHFmSGNEOWZuSU04TStnQjVid3FROG1TU1R3ZDVoVEdIV3VBV2MyVE9tSFhjaSt6emRNdFVwNFc3TEpUTkVQZkdyZlpuZWJlcTZlK3pPSmU3S2hUeWlFajhTYWFkZEUvQkZkOVhyWHgwRFpsTjUxTFJ2T0Fra3NuQ0FBK3QzTHY4d3dIbEREdkE5bWZUa2djWkE0MmVNa3NCTTI4YTBxVk1yelJMME5KSmg2MnE3a1dUUm5TekJXUDRCNzA5STN4MGQyVHUyeVBMTDQrRUs4bXZIRDZPRlZQa1Z1bjNuQm51b0ZLdUVvUmUrVUtXZEx2b3hJdkJTSzVLcDhZV3IrMEt1bkw0VEt4ay9OeVBKOHVPcVBYQjJCbjlVY3hWSEx1VGYzMUYvMEt3Ri8xSTBCNitsZkVWZnBrTzBQbnl4RGt6MEl5OVRiK2pxaittT2pvUVlSZnJZWDFwLzNHOXlEbTVUam00NWZzL1lYYmIxYkd6L3dvVzI5UzVsdVRJVlBHbi8veXk3Lzh0TDNIMEFSR3JkbVgzUDc0OTZHZmJ0c2F6UktqcUVFSldUeXp4MjRmV3V2RGIrOVJOd1FENzl0V2FCK2V2cGFpR3JxRXA1M1NqWjlsOWpib1IvK3FrUjQzdGs2VWhVRDQ4SFNMay9GeHRYOFJKMW5hYzZqdjB5SFRVMmxOTVdTWS9hUURnbVc2bEtXMDlVV2NzbUpJaC9BMzFSRjNRSG9wWGRycmlZVkp2ZkhHNkxyWUxnMGR2MzNXQUxrWXovMXhIaFQzaStFNDJlWWZycWM2NENMamJacmpJaUJ6bHN2SG5YSTcwTmZUVmVNc3FwSnUyWmh2bk51WnV3bk9WODN3bVg5M1hEOThrK0xCWjltSnJhSGkwT3liU001YmQraTk0clBnOCtPZ1NtdHh0dWNla3RrYitmaFhleTd6czlCUmV2OTc3V1doMXQwdmZTZlp6Vk9yNkgxalJBRTJaSmh1d2xtdWhEd2NoM28xaC9IaldmdjIwbVFYcnI3dTU3TTd4Q3FId3NjczlrdjdSTzRUU1hLenNsRlczcG5EMDFIOWpUdzFjMHdyYzI3d1pjSis1UjI1L2VUZmV6azBRa2tPZDE5dVNsWjNjMi8xSmd0U1luSjFnSXc1VWdabGYwVDNkbUZHbFNpdDBYQkUxb0FGN0FYbU5zK2dJUWJza2ZpNm00MERhWnBDWm5LVnQ5QlV0azllZXhVWWdDcjRPa3BtbE4zYkdQeSsxU3V1bmphN3psOFZWWHZzVFI1ek9ZczFVbWcrb0l6NWFlVlJqcU93SDlsQlRxeTJjQjU1KzFyWng5NFdHTTlGbTNPY3EzOEs2Umt5eUhOb1creWptWE10bTFOdXE3VnJTbU1wRnFablpBQjhCRnhhZll3MW1ZR04yWStRaDA0NTc3Zm14Nlc4d2MxdFRuY2pyOUpaVVFubXM3ZTk5WEttUDlqL2R6MzM2OWxmbi8yTDFVUTBITEo1eFBXdVFFQ3ZldDRrVU1oUmk4Vjc3aUp0cWxQWFlwL0R3Z3JkZndmQWlXUC94ei9waVYxZng4a3ovYlR6ZjRNY2l0a2lySUFlaFVlRnVReHV4YkxuZStaem03SlZ2OVY4S25oVG9IU1kxL0VIU2hZM095ekpLL011WGpKWDZaL2hlNkhQdVAxSHpmWGRjOXg0OXhYb1FCR1RoR0E2UUZOQWRSaTMvSEVUNFk2NTZmdGhGVFBLY092UzRNMnRlOHFna0dXWUZaYWhUb3BSMXV4VHI1RTB6RHJrWkRkN1RBRFVEYmREdlB1aitpYmdxaGtYTzBVMTQyTitJOTdiTGkxYVVFZ044OFhqNmxndnpaY2svdmZSSWJ1NTIrNHVNcmxxYVpjOC9WcXN5dEF1a0lCMDd5UlhqcHJNMlJTbFFvTkpSZnBlNEt1Snk2b2MrOG1jWERxajhFT3l5NUpKN0pLZE9iV3lEN29NQnJCcng5Y2tFNmVtck1NNWhNbnBPcGxXSjRhc0ZxcXlKbkNUVldiREZJTUJVN000SWFhQWpuNTdrUDBrVm1manU2M2p5M1lkTXhtZm5XTTRiOHRUOUdKWG5KZnExQ1JlaWtYZWEwWjA5bjh2dXpJM243a1A1cXA2WTFYOGRLNG5lcVhyQS9mUjZHam1qLzc0WDFnWC90VzFmOS9QZmZUbURjQTZVVTJNenVJVmdyWU1HRXJqdHhwaXZLMGRiMW5QWEJLQTVYc1B0OGtSN09scUtlS0hQMHBBeXE3d1crSXJFL0Z2K1N6Rm5SUWo1ekxmcXg2NjJNeVYvajhjcjNmQVl6WDNlWGRBbE5DdS9RZjZtbWRSUHlVMGtSUjRxSDA1eDRvbXAzOFRRb1ltQVZFQmVKTWFDcWlINU1FR2FFcUtoN2t2eXBmNnpMM0J0dTJDc25SRnNHd0dEWjZldS9rMFJFQUtJR1dRQWxueEt0MjVHY1V0U2RzU3dqekxIWGdjdzhzTkUveGhMblBPZ1o1b0JoOE5oYjBubFdFQ1JaMUZDb3dUeFdzMk9JdWN4SW14OG12M3JwS2V6NWxVZ2dGTUlaa3N0TVFXWjByaVRJRUhPRnFHSWp0ajBzZXVaRW1jdktORlU0YmR2ek5LS1dRWlVzaDhSc0VGbEdFdmdlZUh3WGpQNmFzTU1NcE12N2FubnlHWk45aGs2Q0ZKWWIvMFFRS1dlc2dFUFVYUlNRN3ZIdTFNeW5vMEdlTmszRWxuekMvM1U3eCt5VThmNFhaREVMUE5TSi9LNjVsNS90S3ZqOFFmOUFiQVQ5Rk9kQzQ0cmR5Vm1FNHVHemI1NGcyQXZIVFF4MzcvUmJvcnI2dzZzOVRrT0YrOHoraWtyMnkyaGVoNmV5cXRoNVplcW1KbEI5YTdqZUoybjNKZmFCbDlTUzdiVUZacERJYnAyTG1uaXk4YWxPbHA4bXEvZExnU3d5K2JJZm83K0lkWWdhdEQzL2wrdUcrWW14RExzdFFzVDFvcHJ5NVZoOUlLbkZrdWlnazlBRW9vMjdDaGxDTEJKSDRNM1B1VVprb0plaHNtKzJzUWhrUkxsb2ZJU3JSWExJeUdtVnVpZGpOWkNpVlppcjRjdW1JNlpBOHYweVVndDFqbFVGaXl6WG0rRUROTUlEY3JDM0FiV1doN01kK3IyOW5rdS85VzV0YVZhOFMrODVNWnI4Q2gybDVla3hHK3lCMHFRb0JPT3BUN2tUbTN6TnE1NDJ0R3dSMlFRQWhHQU5KZzdrL1BpTUZ2ZWFRc2ZaSTBmcUl2R29ZM1FPYU9vbmxZdXN1ZU0xcWEwd254TFBPcXc4N0RkS0JTSXZmNzA3UEMreEk1dCtSUUlubElBTkdIVEYrZm5vaW5BWUlHVHROMTFIdnVEM0lRNDJHRzlBTS8ydnowcjZnM2kwVXl6RTVFZWdqSTZCSmZ2Z0dRaGJ2SnRFRmV2Qk1vSloydXBSeTl6bDlmc004eHcvbHVNczBUc3lKSjRsQnFkVTFSNGdZZ3BUQmxpS3dES1VWbUo1UFpEbVRYM3pPOTdvWC84Y3pSU3ZkbVRvd2E2RlZ1dXVvTkxNVmQxcGxsNHUva0Q3VUMvYWd0bVR6cjNMOWtoYnhKZkNpV2MvZThZdkNrYm1ka2FCSU56UnNVYyt1MWgzZGlFU2ZwMElmM0ZGbzZVQWlabU1SazVhdVhCZVNpU1lCSmtzSWxTekl6MUMyQ2tyNHN2U1JMNHYzanlTT0g2cmdlRjZzY0NudDJKcFdmczc1UzlwU1JHS2VRZmR4Tk9wdDV1Q2Z4U3I4OExwMjhZcEkzN294S1F3S3luMHhNbklubzB3SGN3VU05TW9NYkh3bUlrZ1VENktGbG9tVTlLOFVaQlhlUUtiYjljZlowbTAxQ0RuQjY0ajJ0OEVrMnB3UnpOVUVFSFpCQzZMSWxwQk9rbmtnbllRd1lrbUxBaC9jYUxqV1FBQ2RxbU5leWY5QmZUL3lLbXRlVDgxLys4aGZoM0Z4RklYMnZ3RDVsYnpFbUpkcUhsMjhBYkRFTzZMd2J6djJSYm5MWDVJdk8wQ2hxcVNhcEtXbWdkcDFTcG0zWmN1LzF3aW8xYjVrVWgyN2JHZFY2WHVKZGNVNGs4VlViMHBRcE9LdDMyQjJlTU5sRHg3MUsxNGpwaFpheS80Qmt2VFplTGNHNytsZCtING5uUVU4c3IrV0JMaHFYWEpJM0RncmxlVTU2QVJvV1pmRzBQbVZnaDlDbmp6VmkyTnhNOHJTWEpQcUhBSk9pdi9ja0syVmdva3ZQcTZqRm1KVGNITW9oWllrbHMzK1NxYy9xMWlTVFZaNWdxbnpHeElWS00ra3NiUDlCemd0U1EvUUErYVR5U05sbkFzTkZiY2FKRzBsc3ovcllWM2VWdVpPUisxR2dhOXhKWmhtajdJQVVRb1V4bjFIOGsweU13eEk0dmVodmxCbHlidGwzcTV1VUlpNURFcE5mWXNnYjRENWZDc3AwdnZYUS9kQ1ZwOHl3QXd0S1Y1TDVvWENwTDJJUDc1VkV5WVVCRUJMb3BKbmtCNTVkUWdMU0tuRVhKQU1HbEZ4dUNQNlZYTXRFQ3VpSGYrWWJnUEhrck0xVEVGQklteG52MDFPTU41RUN6a3BCd1hkdkFJclVRNW1xdkREdVprejJGTDBCMEF4R3l6TXJUTHAyd1NqTGhVck1idnNialJKY0RJdFBHU29CcG9PRjNVNGgzb25QZm4zTGNDbnVwQmkxbGN2WU5mUzlGSmQweEwrRCt4VTRYbnZ2ZFh0VWV0OGxkK0o3ZjEyZUdNdFRJazhuZGRrMUpvdU0rU3dMRVRWQWt5QTE4T2dGVkJFZUlONVllMnRLaW9lNUwwcUZ6QWhjVFNyVHJ6QW1SWER2Mlp2SjlJemlqeUZNcG9DUndSZ29peEFPWWhLakpOY3BhT0FGdWx0R0QzeDl6ZUFnTVNXU1BFeXVrUlBKNmo1aUZQVWVHNFlKRkUybFFtWXlhMXpSOFNyVk5ZaS9FTGhLR2o1aHBKY3NsV0NBTmV5enhBMTJlcG9nTGlSREFFb0RlRUFLUlBxSUZER2FublhGZEY0bW5TeE1HWmE2R1FWM1VKcEhnTnYzQkZuZE9CazZTVkxZcjJKSm9qUzRDZDBJWnRicEZSSWZRQmJxSkF4QWV1TmtibnBJLzhRei9kUWIwZTU4RHVtazNYcncyYXNQK1AyN3YzcDQvdWtuY2NOMi9Dak4vTE0vd2pJMGljK0h3WXMzQUNvVHorMlhWYWJzdUhPN09VOWJmUXNZZTMvcGNodHdicG0yeUxpN3J2T25abkZncnZoMGVhS3gvcmt5L1IvaUcvT2IwRVB6TDVUOU1NMzRjSmVEWGtnUGo1UDJuWFZRTHVZZHlNbmtGcG8xbGpMWFBJbjMzSGZhK1FiYWw0ZFNnakhQOCtYWHN6cHowK3h6OFVzbEFvR1hmU0x1dlMxRFNkcS9KMTR4WmNXdVpFdSsxMDIzclpQOVJFdngwdTBsYWNORmlablpvNktYcEF0OWkzNm82QkpQOXA1T2IrWWxnd0JBdVdRU1d5Qkcxd2xpZ2E3SjZEMGVicmRiRjN5U3lmVEV5eTZLb0F4SldmS1FnSHM5VVFObnpmMXB0UlVWT2ZsVFJtZXNQSW4yd1JOeDE1aTU0bmZ2OGJWck12b1BoSmNUV1pMdlRpcE5FbC81cENieGxSNytMVEZaQnBrNzhlSlVsREp2cWhwS3FVMC9CU1JlRDh4Njd2ZW1rSi83TFhDSnZsZTBHSGJORlRQZUFDaFpONmp4VXpxamxhRVVWaHNDMDNyOCtJNGVhZndnUDhMbkNVaGowbnQ1bVJtbWN2akQrQ2tnR1hwNnd1TEhEenp0OThTWDNlTmZuTE1vSmk2YUlaanNTZ0w0RkJkTVJldGRoWDZLdUF5TDJPWElwVHFNUzJodkJnRzgvZEVqNkhvcnk3NG5Ga0VPcjhRVVRmRmJHR2RsMmUyKy82dG85OW5icUpmY3pvK3Z1QW5NNnVPVVQwSEhUSG12T0lqMFVZcW9QYnBoTTV2MUhrVTJMTmJiRmI5V3U3UmplQUt1Y3U0RlpXckhMMjJkN3pJMjhVOUluQXpQZHdONndIYko0SkRMS0NWREFUVGloUjFDSUVhYlV3QldlcGh1WWtnVW4xdnk2WU5tU1JJRlVCVG1IbVRkVkJhZklpdkRrUmluMWlLYTFoTS8wYlNrQlpGOXlwUGgyLzRYbCtNSERFbWhYVEh1SndGUjJrN1Fidy9PdFhrcXpjaU5FdWxzbkJwUDlOMWZBc2F6QUJjVkNaZ0NGUkZSMS9RbGc2Q0RMS0ZvRjVpNTM3djVyaW5tbHJHL3FuV1ZsZjZZcFBnRyt5aVR4ZUUyUXljSUJFZ3BVZmdDa0FGd001TThHUENrRXd3RGpKUEJMMkhjS3FhblQ1SytqOVNBTElnbjVlRndybWZneUdIaVlYQUhsL29rRTZjUml3Tnc5RXEvak42TG5ZSy9WN0tRR3VyQmZTNUd1UjdIY0R4cHp4dVJUVFFTNHhRL0orc1BnZW81V1ZFOUovLzAwODkrWnY3NTUvRnZkZ25MZVR3Lzc1dkkzSlRGVUppaGdLc0lLRjJhelhiMytTWmYzWXFzUnlQbnpqNVF6dzczaVU4MDl3NWZHUDJxWnBZK1MvSUR6Yi9sODViNEE4MThPc1VQMExuSDBxU0hDSFMvRS9aZEQrVU44Si90eHFvRDVXSStmR2FCTG9PcCtwSHpqYmN2UDRocG1OanpFQ09nVzhITnRKWlpKZVdsVHplaGdXN1ZtZDdrMG5CSjNreXRoRHlMUXZiU1hmQ1ErWEwvKy9sZVJkMUdYK1RDUEp6VXgyUzlOM2NsdHg1eWljNHZHWW1aQ0FMQWxkV3lycktzLy94K2FkWEpKd3hUNkYyUkRrak5rcFNnODUyNTkwRVBTSDNIVjdJcnZqaDBtWm5udkF3bDFubENDcURVWWxqMDhCMjh0T29wWW5RTG5xOUh5K0NhdkRrN24vZndYT2ttbHZva0U2LzdQclAzK2hJdHc3UFRvOUZMaHk0d283MmU3LzN6UC9NdHhIWUsrVzZqcURaMXdNM25VVGUzb3NzZkFlTEVIU1Z2WDd4UnVqTzN1SFc1ZnhTa3llZ05oOTU1NkYySUJCcU9iemQ4ZEpORFg0SWwrZEVLWDVaSFZ3QmJheWhRWmxFMDJjUk5LR1dZRitldStURHo0M1R5NFNsOE9QSG1icmowZkZlL05QbDJaQjdLeEtxb29mYmxMQ3FhYkN4RHkxeUxVNWJwd2ozME1aK0hWamFYT09mWXljN1l2eVJxV0RZU0M1L2xTbWc1dlBKWmlnZDVlNisrekxvTnVBZDNUajlNQk1ZZThCb1NndXpNYmVValNPSkIzYUxzbHVxWklVUHgzb3N2d09XS0NScnJ0VWRRZ0F0SnY5MEI0cUNrczJWZnNxY1VwU2M0M1lHS1JvSWJoaEFnOVVuQ1B5Rm5WOGR1bVhLRWQ0UU1vQWo0REU0UEZvVHNWSWE3L2ZqNmdkQXl4U1NoSy9DU1gvWkdWa2J2bXk5S3Z3Y281TTN3U3Ivc1JPVDJXL094bnFrVVBoMmVsU3oxOTFNcnlwdFpPTlQxVDVpSFBVeXJNYm51bVkzbFBVYzg5dzJ5OVBUL3l5Ky9hQzhHc1dWNmJMYk1ROUlad2dnVXBaamxkdmtHWUtrV1NhTVcwT0pTUHpvYlo5QjQ0dGNiQUQzOWE5dE00cDY0ekYyU1hoUTdlTm93NkIvT0hQM1hnbG45OVA2RWZnQlV2R0Z1UXN0MDZmTTg2T2xrZGZDV1dPbWxWamRNNWwzenpQMHg4ZWxGOWNkczhWVlhIRUdBTXZxUkVxUEpMcytycFZnbTNOOGx5RVE2Nm9rWjZpbHYrU0JPTUxxYWR4dVhkamtLUWNKSVlMSXpXS0d4Vzk5bmJvOTJoalpLNkt0OGl1M3pJUTJVRHZzUzJSTVppZUs3R0ZudDVPTHFTcmVhc2hwbnhWN0xidUlGaUpKaTNtMXovcWVZWnBZcHRGTms1aW05VGZSaXZwaThCZHhQcGp4aHBDOHloaS9CbFFCKzJjd3lpaktqNEE2c1gvS1FTOCtieEJJaVhRQlBRRWFYQWlrNTNDa29pY3NRVlFCa0ZZWmhCNlFrNEJhZDVCSS9PVGZ2aXhLVlA3Z0RxaE15dzdBRFV0STV5ZUtRSWR3Z2I1Z2VJcXVEaDJMTHVEL1lSMFB4ZWs3VzA3OGVtRVhxYVZrdndPSzFhYWlvTnBFZWtpVXdKVU9ERWczQStySi85QVpBVmJjYWNSVE5LRVRKdEJaSmxvQTJUVW1iZi94SXd4Uy9oWlZMUmIrSk9EUFBUKyszeXI0bnBxV2Uxa05pSk12amhBYUF6MUxzOUdVb2JURVJXSXJ0a3pKdzZhU25vMXlDa3I3VS9GT1M0eE1QVHNrT05HZVRlMmovK3MwWGd5TUNjTWt5RkNsbXRCbnYyTkVBbHUzZVJBa0JxRjVxYVZnMFdhdUhZQUIyY0JhelVCUWZrMCtZcFJVK0NkSXQrU3RNWTBYd3JvK09VM0h3OEYwZitpR3hyRklaWnRFZTZrenFUL2c0TENmNjNVR3A2Q0VtbnBUSUJLUWtyNVNseGxZOVJieEpKM28yMmllWkd2dDhmczloY3QzZDhGak5GT3pSYldvTU14YzlZQm05SXJzblBrc0FTV0l5WUFBeWcrVEJIWkIxRllMdnlwdENDcEZvVUlaZDBOM01GTDc3SUh0WkNPVzNBMWZ0d1ZOYWpHOU1oQURTSk00VTR3OUVNUUZnVWdCREtRZWVYVUlDOEZtQ2h6TGxjbSt4ejd3dEtIczgwMnJURTdMZUFHaXpVZ3doa1lxYWR5NE9raVVqN0g2R1l3c1Y1ZVViQUdYYVpleXZYWkM1a2xPT3p1SzNtTWZqLy93V3hzdWVTb3NlTXFXTWluUnJFNHhWQUtUc044SExodDNKc3NrbDZSbHBYeGJ0WGZPckZiang2U2xkZk5YenN1MmUza3Y4em56ckZWZ2VoWEljeTlBdExVbUZpbUdSRVFVd1FSaEFEM1htU216bDhqSlJDTjdweVFqZmVQWkVjckVTMHpjU1MrZytxNGcxdlBMcFNqTlgvcC94Y1c1eDluQnAyMFBrTHZWWGMva01YM3FnQVR6VmljaWNHaW5KOCt4dUVrMnV0cTNFcEJ2RFZFTEtaM3MyUHg3UkxmelVIbGRjUHNtUWZnV3VlRGR3RSsyaGtsS0dSVitXK2p6ZjdVbWdPQ3lISkFwUW91Qk1UQTI1SmdrbDROem9uaW1qeEkwZURYVTd3TE9IdnB5aEZzQWxOUFFES1R5QUhwSUJKd0MzbEx1RGk3Z0EzRHFRMG1RUHdSUzNNa1RXUVZFeWxOSW5NSXlBU0cxNjBOZGVVZit3akdVek11NFVHcHBKREdOU1lyc2xMMmE1WGI0QldLcVRsTHNyVWNiRDFJQXQ1ZzBBS1FqZUFpclVIWmJrVzdiZlFuelZsZGVxek9KS3JNWnVRcjN0dDhROS9aNTV5L3d0OFgzZDM2TmZ2Z0kzUjBjaGxmdlkrZGx6S1FUb2MrbWhqL25JK2FHVmUyQ09MbGRtZlVPUzJPZmlIcGI4ZlZaUG9ZRWVXalBYSDlhczlROVk5K0RPRXl1MXQ4Y0VDY0drUHNrSExTd0szV2N0dTgwVXRTZU45MHRlWkRGQlhLYVdmTTVMdks2aVpPVHAzRUptQXgvRHRpVjNINDZybUcwbklSYXJtaHJqemlnL1NZWlB5S1AyUkNXRmFPRVpBaWlhZ0hSQTZ0OVM0bkNUbGVaZ2d6Sk1FMEl1d2JBazNqZEFWakhKckcrS1N3TzA4Yy82T3dCWEZ5enJNTUhwemNtVDlaZXRIYnozeC96QzRoM1NHd0g1aU5IRHM0Qi8vc2NDKzBzbTRMMkJvaW13N0dvLzNnRDQ3ZHFWWXZENnU0Zm90bStTM01tSnFmdi9uN3gzN1pFa1I1SUU4MWxibncvN3dON2hkbkhBL3YvL05zQmd1aXU3S3ZPRUZLT1ltS3FTVHZONFpIYVBkYldGVUZSVVZFbDd1SG1FUnlRNlIzZEl4Kzh2Zk1mWmNSaGRia3pTUHdUVnhHTDdsZWFoOGVzSStzOUtNTVhRVWh2MmlaL0hpZldhOVBxQ2JVd3dRUWFZeSsvUUxHWjZEUVdyTUd5OVdSc2hHb1pzL0NUTHlWSTBtZU9aZXozMW5PZGszVVpSZ1RLYUUxMldNZHh3S21JdjJ3Vm82VzJwc3MwL0czTTlQZnE4K2dscXA4RWdyOVBOaVhIcVdKM2x4ZjNZSVRyVzQ5S25KSlZmUmpNSkJpbDVLUjR5S3ZRRVlOR2NHSXBtd1NZejgxK2toOUsrVUk2RFF3NnhkSFlMaWNkd2N2S0U5RHAzd25wTGppa25VemQ1M0J4TzM1QWVoamhyZ2srN0d2Wk9wN1BHaXhFckJwdE1ycGxGTklUQ0VIWEJsTWNyS3g4MlNUZktQTjJ4VERvNXZUMlhLZGxaYnV0UTZWYVNidmhRNE9MY3dEcDlIYzNPRHhuZXk4c0Z6U1NyODgva0xaeHhmYXZQYkRKTFZBb0VqbWQ2NS9Ia3lhSGZXb2pqbmhQMjVNZmxmQktPcnk1amhPdUMvV1BmdjhmZld0Q00yb2RrN0hNK2FMeC80TC85VVg1ZzVQYjNBL3EyQmNyNWY2eHg5Q0RQVWJuKytnVUhUT3ZTL1Q5OXdDTjczekJzdjNXTWZ3R2cveU5rclhqL0d6NU02SkZqTXBEanQzMng5U2Q4Uk1iMjRmdW56M2dIOHhIdlg1QU10eisrZmZ2dDY5Y3ZYejdqQTAzUXQwVHN4LzJDREt2SGZYZ1FPY0pnMnhMMFJONTBqdG53b0hmdnhxeWNSeVUwVGFVREpZSUVac2dOWGR5Y1dvSld0QkcrU2V5a1k1VnowbkNiN25HRUIxdW1HQm5rUjVvSkxreVlZQmlPbXNmWE5rOHU5QWhBSDV3eGRKS0cxTWdjMlo3bG1NWnk4QlJsR1luSnhvTTRXcHQ5UFZKQzJEeGI1R2c0cm4xSWFzT1lpSlJ4WGpuUUhIbDR6b04wb3NJOFUrTTh4eUszSUd3Rk1BUStPdGNweVN1bUwxTVREOGREMW9mRVIwU0tvZVJYVHRPVmcwRVRUYUw3Q2pVK3JhRnNYTWIwbHpNRklNVlFVT1pDUS8wc0MvelJEOVpoYkJRSC8wQmlpSzNRVFA2Y0dYK0FPeXFjWHlmTGVRb2k0dUdNN0hUY3ZzdFNiYUh6U2hJNXpGY1UwNTFSaUlDaExGTmQ1WXB4aDVKMGdkS2RkQndjZ2g3RFEvRHBQT2Q1aW9KdmdLZEQzK3ZVN1RUaVBGSFBTNm1sbkd2alhZQ0ZPTWJpbUJuSHkyeFN1MS9DYlNLSkRJVE5IWldQNGtZZThnVXpDNUgzcUhBQXJsUUk2OGJuRzNRZ2dhSk9ha2FLWmtDTmVCK0tGSkNoeTRBcHlMSXA4K080d3h5M3VXNEg4VGdmZUtwZ3pRVlVtWW1YbzlmVExvWXlNaUNIZGovSHBsREhqSjdtSTZvR2p1Y1JQamo4K05BK1g1NjNma3EzYXdUcDJrUFdIZ0dweGhlaXZzY2ZyMmVocHUvdmU3di84ZjB4bVZEVERjN3JqdjRndXhOTitjcDFZQmIwL1ptaWRqb3cvME11aHFBMU4xNFUzUENRdFJmbmR1MXJydzRPQVZiQVhpbmtNRHpQbzlrWnhYV001SGVFOEN1K1FQUnMzeHh2RUJzZThiL2pqLy84L2U5Ly8vYnRHOFo0UXNZZUh3akNQNkQxNTUvdEJ3UDk2UnUvL3N0bGJ5bjRQNnpHZWpSL0VQZ0ZZdXhiK1BxN3dpM2NpMkZlUHJYK0VTQTBlVTZFeXJFL25sNk9ROThMWHJTOXl6akprY3lzZHVENVgrUDVwc0s3bHJwTlp0eW1qVHhoYnJKVkZudWN1NmUrK1UwTkZ5Rnp1TURObFBGaW9seDFlRER0bER2UHFoRFZVT0QwT1U3VWF3UmRRV0dHMGplNkQ2NEpuYnoyMEZUam1FZ3MwRDNPZGNid0VtcmxMOXNsT3NRbGVhYjVvdVhlb0N2SllYNzZQSVhRbTlvVGtCT1p6RXZ3MHdGNlUzc1JwSFdUQUczWDJGUHlPWTlveXp4T1lIY0FuYzZGcG0xYjViTTRiNWxVN0g4MW42TEZUdkdxbkVVelA5WXpSMzRKcGx6MjNITXB3d1JjeVpWeEJvS2NlSGZhbXc1WlZ2YmoxZTF5T001Mlk5cmtldjl4amo3QlEzRmRoemJud0hqVlp6R240OW1aNlEzSFM1V3lMSjd4QzVNeWxNbFFLd3loejF2UWhHSFdsNHhuT1pZNGsySUVGbUtHc2xJcG13TEkzTVJ4c05MUU5ZNGxlQUtFVy96Q29WOFg4OWNBZTNuZ3lRZm5kZ2wweDNXMzYyaHVpWHBXOGJjd1V1cnNKL0M5TkF0Zy9SekxZOHdpcjRYNks2ZnFIMko5dzRnUDduREQxaC8zVHpmZVVyRHZvZkt3bE9UaG9QVFQ4Y09IQjc4RDBITGFiZXJZVUhqQWRyL3pvZmdTc0RaQ1NNSEdIeWtBME9SOEdDNlROMGhhTFlRUEJZdGNEOGxIZ0ZFTUFiUW1taTlJaFY3RDUxZ3gxaW9OU2Fxb2dNUmlCQlRhQkVqMENXNW0zWkp0bHRpVTNTcjluMGZzcXdlTWlldXdjc2lsQ0NGZkgzZVlpWS8wOU9tSUozM0diVWV0dnE1UG1GR1llNGg2Nlg4eHpJbGpVbHJuc0JRSVpZMUlaWEZaZG5JUHQvTVZocWtQOWw3SSs1bFd2SG4rcUg4VWdxZktDVHVBMkFVK2xFOGdrWDV6eG5TSysyelRHWGhmN0xNTVJpVTU0eW4yRk9FTVpLSVErdzVEeVJqVlhqS0JIQ0pqZ3ZPeFJDUUFENS9TWjBBcEVtUm1IWnJwQXgrRzlCUXBzRm5ycmw2Mjd3blVaQVpxUXlFeVlTalpER1I5WnBCYmtqUFB6Qy9TRjZIZzR6Y0tZdjc2TC85T0puOVFobjhHR0liWlU3a0NNSGNjYWkyR0Q5NEFNQlBXN1ViU3I2Slc1bnJMWXVHeXk2dXdtVUdHdVgzLytBSHo5TFpvN3N4ek9QdGtSczRJQWE4WExtdkVDTGloVmlQWWxtSldMME16bjF6TEdSbzY4NFNQMGgyZ1NaOFJlOGJhdWVZbHVGd0VHT2FpemtDUUUxL1N4cjlrcmk4UnNDK2doOWFMR1JLMVVNR0IvRXpNRXQ3QUwraVRaMFJHVXdNb3A2QzVBSGlLODdmeDVmbnRjZlpOK1liaDlTYnA4OUlpWkZLTU5LaTBJRjMydUNkVHlCT2NURVFDaUxTa0JtY2g1aXBMTWdKR1dVdEtBZG8yOTlHTTY4bGpML0tKKytlWks3c0VzdVlXazhXc0lENERUVW9oTVNXZ29ZY3k0MWFNWmlZN2RFMTdWWktZUUVNUDBWYjdoVWFoOHBFbU8waGZsaXVqVHRJd00rNldvNWxaNjFubGZmYnF6WUdlSGtTV3pheWpPYVhVaXhUSWlUdE1tVjZTRDkzOEpvT25mLzc1Zi85RCtSRGd3ei8wa1JqRGdIMjRMZ29sV3FVZWUyeXJOd0FJNHpMQ1h0TWpFQ1BBbm1UTkpqamtDNUtVSVBIOC85ZUhIM3dEY0doR0ZjaldFOGhSRmUyZ3hlVUo2SDdnbGU2RnlEc2ptUUE5TlhRd0M1VzJNekVNWjZIU2h3MlVLU1ZKZit6TGFjNVNXRVg3M01sbW9od2VnbXhZRm9WUG1FaE9mRmpyWDFzd1d6Y3MzRFEwVnBVQ3JvK3Y4MktSY3loWDBZSm44U0wwczN3V1RhSmJSZG1lK2hmd2RSTzVBRE9mNnpkd0Z3Wkg2THpIUGRadUtUZ1JiMDlUVzVBN0dwYVAvdmNuc0ZOTEdwOHoraTk1YUR6RWFVSXBRQUgySkduaVVSY0FhMGlzb2t5NU5XT20wR2U5NzBwNG4vWmxiaUI5V0dLU2kxQ1k3RXkvNmVBeXpqY2JYaXRlSGlHVUx1Q0w1cVRqbVdiTnkwSGcybGpMOXBBUHhRczBkZCtjRWM1Z3lDOGxGakxwZndwUVk2Z3U3RUJZN1EzbWNueFRWRVN6YmFkK2w0L2NzOWFwMjBZeVVVWm40dU14b2xtcEZBTGRBU1RHUi8vMUJzREZzTUxtZW1FQjZCMTcra084ZWdOdytJN25adlRSbUw2aXFIY01CNkNZWkZsVktkRDBmdy9nTWl1bUlQVEVUSlRsd0hzUUx4SU04SzFhaTVUczc0VkNsUmY2OUZxeVAwNjFYQ0l3U2xDckFnd3R1bEt1bERQem9IeHVXSGFTeVIzbXVRYitsYkx5S21sMkNPWGpTRDAwQ2dXWkRBWGNFTGMrZjh1TmtOSUZxRmU2d05YbmJFQjZ0dlRXUG1vRHdHdk4ra1NqbmlKTXZZWVBnUmI4b2ZJNXdkUDlUQ2R1SndsYWtyOE9rL3JVMUtSQktKQWFLbXNmeUhaaEFnMmpBdlJuTGtJQ3FrdUdRd3JrQUZJNDVDcExBaG1Td1ZBYXZBaUpsT3lGUU9idWs4a1prM2sxckZBR1dTT21CQ0RGWnpjeGxIRmZrakp4NVl5VXhxMGN1eUR3R282bklXblBvM2xTSFNsRmZHQTBGSkFTSUpOaUJGNmk5OXgzdzdsek1MeUJLaVRBcnNMd1lhdFpMMGJnb1VrV2hOd3h2UDMwMzYvMytQQUpON3dCNE1kKzZLeTdCMGtNeWJDeE1GUzNYZFBNODZZVStuQVAyWU0zQUZCQU9tWjdzWjN4RjFFYTBJcS9sZ0ZNazhscmFFcWVFN1RLOFJtZmxadk16QkE4SExRbUFESlVTQXpBc3o3SGlyR1dETE9iaWdxNG1PbGx5RHRYU2dDNVhCQzhmTGhaWWxQMjhuNytKUjE4OVJ4anNoaHl5ck5UbXVkSnlGS2luMFcwd2pjT0RuQzlORzc3ak50UktQRzZQanJjb2VjOFh5bi94VUNlT0NjWWxoMmtNeGlHUkRGQkdXUWNRbVBmc0c2amg1dFhkMC9ITkRsSzNEeC9sSXRDY0ZBNVlRY1F1OENId0VjRHBpRlp2MklqZG1lVHVTZDE4bUkvbDNuZWdWMHNUS0FocE1JQ21mU1FSNDlLWmlKbUxRdUdFdk13MFdTbThSSUIzMHJKWXJVUmJETy9tU3VaZ0R0blVveEExSjhQSmg1NUQ2eVdCSExWV1dqR1p3Y3kwZ3U0c2lSZHNNYUw5RVZvN1ltUEFPSFU1ZG1MUFg0VkdGWjQrc2NldzFtdWh4elA5SmwvL0FZQU9iRHViMFF1ZDBCNUlibzU3VGFaZnFubkdhM25xVnBQZzlLL0pEZExJQmZLc09oUEdQNXFQdnZURDNQZlRIeUpyRnpla254SmxYKzkzTVVTZVFnWWM3OTdXTjNoSlV2M2kvaVVpMENTczN1dFBzTmFlWWxMNlBMOGRvbVVnNXZ5MHFPUlBBM3laTm1ubnlTWlFYcE9MTWxTMXNwdmI3bDZacmJObW5EZGtrZUZCWEtoTWxTU09iZGtrRnZ5Z1N4bCt5VGNOc1ZaNW96ajBPSERvZWM2TGhNbDZDQStNSUhzL0NVMU01ZHdIeXcwaXhCU1F6UU1jNkdROHRiNnNvRlhJT1BDbjVibGpFcnl6RW5MK1BDN0F3OE5ZYjZqOFI3ZUF1ZjdKN3JTcC8rQitVZUI5QXNBb1FkUGR4eGtPOE12cUlTSGUzOGk3NDdvb2Q5b1JnQWtpTDR2YmtEZ2M2Z3hIejdpNy8yekR3emJyTG90M3R2Z0w1NysvdnZ2WDc1OFFmVy8vdndIbzI0Q3JFU0FvNS81bkxyZzdFM3BJVU0rRkdBb0FDVXdCUTVLaDVCVmFtaklrR3c1WkxvTHlKZU1RZ0pLZjhUTXI4aWVtWDIwUG1YRFdkL2VHYVlqUlptTGc1dmFYZ0IxQW8yc25HUXVRaUFsbUJtNmhpWmk2TUFxRElIQjVsWXVkbDZZaVRUQlhub0pYZ2pjbitaazJLZXdaQ3luV1FSKzBZeXNna1lPWGpGb01HOHVXeEJESmdaQVhhWDBrd2hWbEhMOHdCaUc0OVhnQ05uaDB0OTNsMTBVSXpEMEljUy9WczF1VlZRK0JCN1Z2SUptTnB4NXp2UjMrZGZxNTY3UDNUNm4rdk1XM2lSYUxsL3puRHVMYWhieVVXNElhU2dCQVJKRExwUmlabG5CWkRia1hLOHpubWtqdnk0OW92ZzYvcm1CWVRCQ1k5eS9aakl3UG5Rc0Y1SWVFczRBV1VHZk5XS3lXRVVWRXNDaDhVUlhDcGVDUU02RytmMVhVS29UbGd2UjJWQzhnSHljMFJRQU9GT1BFbWRHVmc2RXBhZGhXTUQrRDlIeTVhemZjOXZKajFRZVBqOS9PMjZyTTI2c1RYVnVzTVZBdFloQjRha1F0MXp3L0JFeFAySGVvLzI4MWJVeFFIQ1FwNW8vbks4djN5SmJvUjdxMzlFR2ZiYVVuVDNhcEgyalRHSS9INHhzN2JLUXNoRHQyL2ZmZnZzS3N2L0Jmdnk5L3k4QS8vN3YvODV2K1VNQXdMbTBQLzcvSGQyMkliZjIvTnczTkMrTUZFUkJBMkRQdi80L010cFhwakJLekJKY2djT1JnWGZZZTBQb2dHMnAzWGRvNEMxSytPS3UvYk95WkRJWmJMT2daREw1MENjSTNtMklWc3VORFNEMGJwM01LcXE5ZCtqa3RlYWJmVW9tazdmbStNSjAxWHFKVDg0RmswblYyZ0dlN3BpNXpmM2RUOHVkdGw5WFU4NHhrMjB0cnF1UkdUUVdOQ1hqL1FlVG5CN0VQbndhaHlwaENOdVNJWWs5Z2FwbnBuU1FmZ2VFRWlGbEVTMURtY3lNU3BTaFRLNlpISlUvZ1FzY0I1bUcwZ2prVUhZV2s3T1VEckNJTGtMdW9FS1puREVQbllNZ0RHZTI0ck9lVE9hVjhpYWdQLzIvaWZQeXdEMVhjV2R4cEJGUUxUem84by9mQU9BcEhCczAyUFJVTEdVRzFMZ3lNOHB5bVVnQkZ1Vnc5eU5BZWg4aGx4SjRZWlNCUnN3eHovRWlnYWQvYnRSRVdUOTRKRGNYcU96bjNVZzFLY0RTR0hLQ29ST1h6VFJJY2RuQ2dhSFg4Z21GZkxqb3gyVVA4Uk0rVDZROGJHTXRtSzJuT25Hd3RubzZxaEk3RHFVNGsyRGdwaXVPemtFbWpZQWF5QXhDU2hlUUxjQzZscHgzZkhKMU1RS2xJVWxwQkNRK21PdDNzRUNxK1p6Q2h1WHdKdUR1TzkvalRyM2JDeWVWMVpvMVF0SmswaGtwbmN5NWVSbGQ0MWhkaVdRSjk1ZUdBRXBHQmNRRElFUXJkOGdNbExOMHVsRkFIS3hVSGRFUUNucVU0TEc5ZTRUcHcvM3dPR3BwNkpxZ1ZLZ1VCMUpEZ1pEdXZMQUF4TVJpQkJRcVFhaWlJWUZNQklJZ3lCVE4rc0NFSVJJenMzQmI2TE9QbUF3V0pTU1d4b0ZIaFMvZ2VuKzRoTnlvWTBWVDVOVUlsTGgyMUp5ZnFLdVVESjR6WE14UUpWeFRraTRnNWtNL01ONEpJQVgvK2k4MnlYREhvRTl3OHpzSnNUT2VMdXdndUhubzhSc0E5ZVJwbTlnTHV3OHdudjd4TXc1cy9PUVREQ21tREhzeUFwc1YzMDJtYmxWUmpJQ0hPQkV3aUFwTHNPWVIzVTlaK04veThkNGM1OWw1ZEI4LzRUT2IybjdSSjVSbDBaSjh3bnlSc2xraXlEQ0VaemhiZ29aRk01bHpwUkZRdzZVWVp6Y3UzRHAwK2RldlQwMHRYanlyWGU4TTZrZGdzMVV1MGFaWTVnQTV4YU0vSFhNOTk5c0lwNG9TM1VlYVRJcVJCZzRMVWpKcG9IZFNUd01TS09xOWlhUk1RMVVIVTRjbTUwOHRiaVhQQzBvdGdWVkZrV0phVXQvS1VDNDA1UGUreWp6VXVnNmh1cnkvQ01PcitOSkFxWnpwSmM0QUtabk1qTmRXdENSejFCbkgzdTJNZDQyWFcvT0lyZzFEK2tLc2tFQnB2amIwM0puU05ZNnA5ejJqYTQzclh3V3JuTUJMYk4xRU9JUDlFc3IxbEU0ZVQ2cmtnOHlIdWovZ29SZHZBL3dOQUdTSVNvQWhOM2c2NzlqYllLTFNQUVFmSHdLRGNlWDBEUUJGTVR1WVhZZElrWHN1Zk5XMmlmRTlBTURuVDdydEh5cjVoS3ozSDg0bWNxelBkVFc5dlRBRitqQ0xzcEp4UWVuV2JjOUlOa0dzYStLU3FtalplZWx6bGtsb1VTSnBWOFJEbnlDNDIrZXE5bllzOU9CNWk1REw5bkdlWUdhQ1d4YnNNRENCTEo5dkpVa3g5a0UvRTVmbVpWZmwyWWgwYmJNUzJXMmRjc3RuSm1hSmRWUnRsSUJ0bDZHYXZIVUxoa1Y5M2RmZVlCZjk2Rmk3SnBCaHlESUxjbUYxdEdqenBZOVNaS3UyeFVBamZQaU1MN01RYlVQV1dneEw2Wm5PSWlTZGNSN1lReTdtWEczR3pMdXhsN1BibHZsU01ocUdNMUl5QVptVGNYN0dJRVV5QVpFNUt6ZWpyQXhDUDdvQXBKVEFnYUlDaU00d0UwZjBlR05adW9rYzRvdm4xVWZhQnFSM0xCSUF4OWVIbnB4NU1aSTVJN3dENVBDbUlIZnlYRG41S0YxTUJ0TGNBbGVmMWRQL1ExdThFOEF2QVBEOWdJdFJRbFY0WFdOUEFKbUFZNUZOTjNrSmtDZHJjVGg5QTBBUnpQd3RSQi9XOXl2WXRkTGpOQldnai9iZ01RT2M3eFFjYjRZK1hmNVZZSWtCYU92TXI0YTVqbTFlYVpzMTc3eGpHTWhOUUs2ZE9XOEVYbkVpYnVmSzNaRGJxclEzSmhMTzlha2dSUVZtL1ZUYXhzMm1NT3R6NW5PWFI1OWVRbTJMeitCdWlZZDZsWGlvaENDTHdZQVBzd0FWbUtBcHJVQnkyNmt5dEVWTENHVUhPUU40YjJzZlpURWwyT2E1UXg4MDhpOUR3U0hraHFoYi9Wek14dlo3S0JlYzZiSnlUU0ExUklwa0MxSWE2Q1Z6MGp1blFORXdkQWRoaVlOUHlUTXJoRUtWY29oRXozSU5zRUxrMlVrZ05mUStiMkUzUjZJUERRTmVidEpoeUlyN1pDaWtodVdRZ1ZJVUV1TWdXMlhHSFhLVVROWUVKZ3huV2ZJUGdwQWVoa0VjVERBTStqQjBnVUlFR3NvejhCSUl1RnZJOHBEMHdWQXBidzFDQTArWHl6Nk51VDZYU2ZOY0ZhVm5JRU9HOGdWT0JudDgreDk3eVBBZGNPeUJzVEVkQUl3MjNHYkFNOXBFZlZNaGpCUVZXUUlZdXBKRE1BQVAzZ0RRcmxYaWZlMTZOeW1Mc1MzVjRKREY2TU1zckFLZS92bHJBUGpWWnhWQ29od0NLTXY5SXFUYUR2MXdIZUlpWEVWQmc2RGNCSzRaYlpSRHIrV1RhNG5KUlJXNkJaN3dlU0xsVmt0WlBGdFBkWkpCTm5tT2tmT3Q5RElyazJCZ3EzTVNlS0VweFNHOWRBQkpIbnV2UlRJd1RkcTMzSWw0QUdRdCtpbERvWkEwQXZUSC9tQ3VyeGdnNVZDbVhCNnY1UFdLNEc2QjZ3dmV3MFk0cVN6VHJCSEtFeTlKV1MxeUgycXlJRlRIMFAxRDU3T29UQVNVbUJuT3pxdGtEUmtvSlpNbWgyaVl4VHkyZDQ4d2ZIeFRYWkFxN1FMaU1wVEpHWk41bG5OZVdFQXRpUkZReUFFd044a0VScVI5eldSbU5tVWhNUXhadENSTC94bForc2hXZ0RMZjUxQm1abm9wQlZ4SnJKQ0FhMERxOUhiK0ZYRXJrZXpLWnBMcVFpZ2xBK2hFWG5LZUhaUnVDMUpyQ0lBblhqejZvaksvL1k4c1JkVU9TR3dZNWhBMTRNdlE0QzkzRkZySlBJQXYrUGQ1Mm45dHcxN0g0Z0F0MkFONHo0S1dYQkdNN2czeHg2VmcrT0g3WDk5L2ZNR1hIeC9ndjNCb2MyaHZRaGFTV1dobE84dDVDVjhlT1pEaGdHVm1WdFNWZlJXd0RKcVVnR2NIOGhpNmo2dnY0dUR6OUNrUmZPNjI4WjlFZjNlVjd1cTFqRWdFZnZvc05SL0E2bXcvVDlxbWZkaG4zYy85TzFEdGs2NUg5WC9jNzg3eEVvVkxiYWw5TW9nUysvZTkxK3NucjF0bU1DT1E0WndweVN6TGJvTTU1cHRUYmkzZ2NMdXN5QXRmd2NxV01xbkRWWVNxNWJvMXJ5RG1ORWs2RHN3aUpNT3NRYWdrUzE1S2dWS1d5MjNxYzJMbGYxNHRic3Zjek1oeklZaFo5aGlpQTkzUyt5Q0tEN3JIK3cyV2hacmNocWVQa1ZLV3dOUDNCVWZXNVpvb3N4djVzTVEwODJXQlY2ekxzMEhUaGJQd3JNZnpXQnlLTTZNM2RnNTdIRU5rY04rSXN2bFc5M2krYmQvMXg4OEFvT1FiZ1BHSE1QbktDeDkraDZ2dGV3cDJqZXo3WGpDOVJvTmx0TytQOWx0QzhVUU5LMjdOay8rMU53RDg2Nko0WC9McDQ2Y2ZlQmh2ajVrZlA3Uy83NDd6c1RXTGJrQ0RnejM2Z2tlWUovUmdzQkVjUlhvTDdkOEJBQmhaMExRNkh6OWkvdUN4SE4vKy9CTS9GUG42dGYxdDFCYnRUc0RRMEpCdWlKRThodU5MdjZlUGdUVjIvRXloZDhycVEzVDR3QndNcXhBTVFTT0ZaNERwakZJdlE1Q09nNE5DQWhSd0NPeHVIQ0trbHRxQjZEY2JNTTdUUkRJTyt6RWU4TnFWbDNNZng4bXRXVG1KRmZTaEt0SGNyUmdpTDFrSmdxRlN3Qk1IUVRCaFVTa0Zna3pEMGkxa1pZMEVBRGtxY3dCWFlnZ3hHZGRRZHZqbzkySDZPZGowbEk1VEVpZDhKd2ZOeTlMc0NuOXJFbjlXbUZySmpycWRWYmZ5STRPOXl4UWxZR2dZSG8wRnpmZlJ2M3lvczlmVGNlYVAweHNPdkxxVjBqejdaYnZvSjRTOE4vZGh0MEVNZS8rcjZVZHU3NmZkTVB0MnVlSHdWbmxFbnZ6Q1RydzNOMnFyTkVvN1A4TjBtMFgzK2ZXNndVY05xNklZUlBPa01sUExtalgrM3pZLyt0ZGxyOC9HbzJjZXIrNHduUHFnTzVKQk05N3RDTGV2NGpXdmtwUU1VWjhhLzVIN1puVGRWREhZMWxmTE5YZG5oRmRTeXR5L0xXRmZqU3ZaaEdJRVJwWExtdldyamZvUjcxOHJQaVNPNi91b2RkejNjcUlZR0JON1M0cUtGRlBwY1ZqYm4xWkVDQWZJVWdDUGxSYm84emgybVNTVCtmTDRkbG1iL3VVczdkNWlUcERhc3hNZU42RFdwK29LSEkyT2tIaUJrT1hUVjI0blc1ZHQ4NzJHQXUweG84K28venNTWHFYbDlrMlhBS0lzaDMxN291MVJwcEEvRXVaZjVMOERZSk5sOGc0VjhmTFpGN1RGK1U4TkhFcDI2U1NZUHVjUmFWWEdXWU9sZ1BGNVJuV1Q5dHJWbm96eFpaejcwTkNmNGpGQ012OXJKbmdBaGk4ZWdOc3pjUHZML1hnZTVrbmJWdytlN1dVRk5INDNGcS9XTkd5SjJJN214NWRPdEg1N3FIV0N4SDVvMlhyVGN3NldDL0w4cjcwQlFNWCtsTkZuMHEzSHFyV3Nabzh1Y1dqSFluUml1a01PU25KZmltaDRGT3ZQTjMvaHVaOXZESTRFU3RxQVZ2SUp3NE9QeTlKWDRCS2pBdnZUV1o0WjFGV3k3aEh6V2o2aHpqamQycVQ2dVhMT1B3eTdvQjBMZDBCWEdHWlN6THJ0ZGRRTGxkVmRVRnFWcEdlOUcvNFZPaWw3aU9UbDhFNldaMGN6VXFOLzUwdHlaUGpYVmltZmgvMm0wMlRYMFBQWDQzWS9aMjlsU2ttZU9XK01VUDJOSzd5Q2ZibEVtZHhrMEpCdU5Xek9FeDBybWxNWWVyalBia3FaaFVvK2syQkNWMkJBWVdwK1JKVUlVdmhoRHhKazBJdGsrbUJ5ZE1IazBQQTliaFpkVU53NFpqelNjeWd6bzByNzZsSEhybkhzR3NmU2RGS2pCakxqNFRKYWtzMnFaL3J4bFgrWjR1U1JPNjUzRDdFZk1GaHJ5SW9WcCtMUlhPUXo1UEZyTGhvVUR3VXYxSWYwdHhqbUtTeldFdzF3MmRsSnY0Q1BFOFo4RGdOaklNZVRNWG51dzBuaFo5MGxoS2Q5K09EUkgrL1l1eUhTTC82alN2ZHZUMjR0R202WTdIYnNULzh1aTg5NzdZNDB6anJWR3JrZmRuOEhnQmF0QUJwYlB0L0xHdUpqWnFLdWdPK0V3R0V0K0dZSS95NHgzS2xpbFd0R0c4MzRySHlDZVhWekdRcXdLd3dCZEd4OHFSVHkva002UXBtUnM3dFJpWDBnS1diMGlaRFNIWlF0bGFTeTFsSEozZ2ZNbXBueGI5clZ1cWlpQUxNMi9MQlNCa1pBV1psQkNLU25TMXlDVWx5U1picklSY29pcEhTQmhYZ1JVcnJBTGJHeU5nSE1YUm1HSHZvcG1QM29IRkI3WXRCVjBDd1loSEtpay9JdlRVaG1CMmV5QnN5TVpHaTJWelB1bnlkTGMreURqTWRWcE54bStsa2J0M2l2b2tJNFJHN2lHc2VtUDErU1BGRTRaSWwzQnllRlEySVl6dElsRTVnWmtvY3NMTHNuT3BaUEFOSUlTQURtc3BvOVVIRXRFUGd3bENkQmlHcm9RUFBLNXZzbXFpdG5NUTVDVk1NTVBPdmRjRzVEakhwd1JqaURySmRHSVlDU1hQQ2U2eGcrZU9qRjR5NysrQTgyaG5CazVTOEFFcHNFTWhIcERNa2NrbVlCdHQ0QU1COEYrT09VQnZiZUF5Q3haNTByeUM2WlRsdGdQUDJEeDlLQTZTRkdqajBZSUNhUzh2U0w5UFVHVDVjb3UyWC9aU2d2U0ppak9pSFFVSE5kMkVvREVCTERrQUxzUXo5Wk5sT0NEeUV5SkhYNHltNmhrV0JtSXJmWEJXR0NvVDFGQlY2M2VuYkxoZGdTbGJkV2lZa2hoY05abFNCRzBSa1RISEl0NUFhTkp1dmlvRkZJb013aTZacTM5bEViQWJDSFFPNUtzSW5tQUFCQUFFbEVRVlFQbGU3cnZKK2VsVExNb1Z1TXpoTmtlVy95RnlsR3lzd2dKRktKSXAwQnlRMzZ3TlBCeVIwR2J0bEtKUUJvU0N2eUtwRkpNZExRbjRud09zQ1lyMlJNWE5SUzRocW9nWmtzQ3pLajNCenF6REVManpwR3VvWUM5RndQVmJjVUJ6SllJWm9aSnhsMWpUQ0FjS2pDNFlLY2hZTGhqbytuT1BZUzRMbjZFaEJvV0JaU1ZNQmx3TTRMT3hEMlJKQjg1SE1IS1FsODc3bHZoRU4xYnl4Z05uQlg3MjMzM1BQcGZHYm9LU1hXVFlCUlBPN2lILy9DSHY1ODZKVXp1NFdlS2R5WG5pQjc5SGhQMmhMNnpZZjdFUzIrM3hmY1B2L1gvL1ovTlRYK1piTCswWHljS1gwSW9sc2Z0NEpXRE9QdTNpaVZDWGJrTFhwK2NBaHpNNzdsY1FpZUlheEYrK1dBRmptVm51SzRxWWJEK0JFS3VXUHZZdUxNbkE0OVNZSU1MdFpwSUwxSEF1bkRHVWE2aDN5NHd3ZU5wNnV4b05Fd0EwOUhGTWZJbVd3b2h4d3FtYXpmOUdlaTBzUFFUUllhdGlTQlp5MUNybGRLYUVBYUFTbTNRTDhBbExzQTF1ZTRTa21sdlV5OEFVdS9KTGhZZ1V5S0VYaEtqQ3Y5eUFzK0dncklIeUNUWWdTbzExRGdPUi9QY2x6YXVtQ0dlVUhOb3I4SW4yZTN3NkQ1TEN2SkxBdE1HSEpaTnNrc0V5UGc2endueHpuNmFGNzlKZlA0cm52cHBuTHJxR1FaYko0MlE0YU8yRlJ6R3VRSzU0cWU2QTVCbVVOaUhBZ3IzUm5oRERiMWxDM1NJVkJVbmpOeXhwY09kQXVoTU15R0xtam4yZmlBYitubTZVck1nTGt1enN3c0svSG4rZU9Ha3NuWm8wNHVjSjd2UWx5R3ZBM2hESlNyRUJqaEMralh1akVRbnBmL2pEZUpTaDFBVnpvQkhQRDAvKzNiTi93Y0FBeEpOb01RdGxhdmZ6Y2NPMGFicVA4S0FkOHQ5R0ZyaVNEdFc5MldjSHc5bXUreTR4ZGptY0xQM1R6K0NRQzkwRmtEN1ZjQ0dsQ2pCTDFZc1dNbGFDUmpMb2JOelRZd3JTSDhzc0ZuL1J5Z0NWeEpFMDlzek5YSExHOUQxY3JndHRjNHZieGJtY2hmakVBSWhXR1d1UUFZQXEvNGtGRzZnMkNDSVgwRXZBUklibklZeEpIbFl2bEFRK3pSR1NuRE53V2gvMWw3b2VFM2Frbk5DS2hRMlppaUpjZ21rdVZRNlYrU05ObHhrT2FXai93QndyTC9SQjh0M1hPQW5TdFh3ekJCQ2U0Q0dkNU5ESHIySXplMUp3YjZvQkVESUprU1JXWW1KR2FCTS9RSlRFbXlCMWVDNFRDSDFKNDNrMG5OeTJVaWNmOVZ1VkNpSE1MazdxWmFJVEhVVmJUVWl4U1Ezb0ZIZHpCeVhVWXJNUUtCVjBVSkJCUUN5S1FZZ1NBajc5RWd5RU13VG9aY2hpNVB4S094L3RyYmsyM242WTY5aE9RdWNDeUJaMGtnSUJrWm5BOEtaUkRFZWFnVWhzSXc2Qm1kYVNSK1JaQnJpY2tBZFVXcUJ6RXpJSDZTY25sOGxVWUE2Ym9rUWVwdzZOdi9KRHV2cE5Zbm1HUHI3eXFBaC9LVWtmR3haSmdyc2FJWWFpNk9LWGo4Qm9BNlpRcW9RQWtnQTE5ZUZVRlBKY2oyQnVESGo2LzlEVURQalROaFlsalo0UGJDNGF1Ynp3eDVTTFNZV2dST0hIdG5TRDVrT1BkY1ViVW9DRzVaWDhwRUxrQnBWWkl5V1VjbGV4OHdhMmJHdjJsWDY2S0tBcFJ0NUxNRk1wRFVlelF6VU1xL05BOWtLUzdKa0JpR2k1UkZLSmhndUJBdlFyZDhzdmd1ZzA0OEpRdzk5Rk53V0NpMXR6NXpLTXNhVEVIa3dvcXkwa1RwWEkyc0FROHl5R1lrVFdiN21UbjA3azlaSnZQYkFCWEt6aktSNWptUWZUb3pQY2VDWGtOT1VNUFF6SXlIYkJGYVJKVWw0QlV6S1VaZ3BxZkFaWTQ5eTdFMEFvcUN1YXhtRDFSY0M5emlnMWhEQWZWQVVQS0IxRENEUlh1bGYra1FXbnJQNFU0LzB2aGtuUXdOS3lUZ2dwSjBaeGRuN0RjTmZQc2ZuLzZIWWZ2QVMvdHpRT2RkaTFWeUxVOTNyRUlrc2NlVzB5VnpJTm54UXdHUHpURGNHZXFGMm02bXpMenFLVXNBNHViVjNmQWVZSkdiUS85RURGWkFpNkMyTTZPUXdFUE5RNEdzMXNCOUhPZXNSWFFSeWo0ejVsVk1adVpyUHBRT3czWHVHMFdmNndGWk9URXp0M3BlcEM5Q3VjUkN2QWo5bWo1bytOYkdXU0FsVCtkVm1Gdk5MTVJvaHRIUVZlNThoNkZidHNxNVFhUGgwODNJSVFPdm52MHpBd2RQa1dFbU15UHh6TVFGTDhlNWdjeW9pb2VBZmNodXlRU2VJWnJra014THNLTjNqZVBTRUtSckhGTmZNcG1jbVpmOGZ2cENHVUpoNk0yWG9kRFlqa1lwUVJ5R1IrbitaMG1WY3BEcDlsWG1ocXhYR1phRlNuTFdLdmlGUGpjNUU4OTRPVURBeDFveEFIajY1MU51ZitZOUhxRmxKZUJSVDg4NGxORFFIUndIQi96ZG5mWXY4cUl3MnRMZkNJZm9NTUsvQnpBT2RudkpzbWQrVldMVDJJUGhYalhBNEEvOC85bi8zS2tlN3BuSUxEZHBEWUJ0NzQzYTF6YjgrUEhMbC9ZekNxemE1OCtmejY3VVh2dXp1Y2RMcWF4VWZRSGdUemVCa0E2ZURBV3lDakx4bTBDMm16NHVVNnVxSlVaTjVwN0p1SS9TQXdnYXRxb1NMblpsS0EyWkdLWFFTa01CK2pES0xETHVEN0dHR2NqS2dhd2M0RHgzamRzNnJ4SWt3OUNWQWZOMEJjbnBDTkRCTzluM1pBbDNtREhrUFVxc3VoS1FVWk9COTk0OFZ6eEpaYTFCcmlMOUNPSHI1ZnBGSVRFU2F3WFVCa00rVkpaSU1ka25NQmhtc1RUL1hHQTJFUzFMbU02TWw0eUdMcHN4U0pGTWJZaEJOQ2ZPeU16TEVLSE5UYVdWQzBhNE5Na2RTcC9kc2dOTzVSMlpKOHJmU1dENUJINm1uOGpRMFhGOVFlQzVNeXdmRjRnVVVGU0FJUTBGUW9yenhMNkhXQUlCa2M3TXlybUcySm1RSmVjMUx4bVhVZ3ZxenVNMjFweWNkK2NaN3luU0NOQkJqMDh1ZHZQQUs1MUFRNWM1Q1Y1WGgwQW5qNDlrQSt0VXdtZkJrZHZUK3hOaCs3MkZCdnB2RExmbDZhRmlIWnBKdFhsRjVsS1ZmWFJkSUVSTTRGbGV3WjJkMzhlczR1dVAzRjdPbm9hVEhmUjQ5TVdqYlA5Y1Myc1ZHNTYwLy9qakR3QStqV0NJVmFjYm54L3dsTnVGdkUwZFdXRE9wZStGcU9sN0hMWGpYb0dXc0tHaTk5SnpHd0dBdnp1S3VoMjBmNDBZVzlOTHdUUU1BK04ySlo3cEF4K0dwUlZJTEFUYWdwajZOcWR4cEJFRm5pVSs1Sms3YzhnOG1FdytyUEs2Z3R4QXlXUXl0UEZRQUQwMSs4b25TcWhLeUgySFlaNFhtRXorbEU3V1JWL2VaT2xRa3JOT3NyaGtNamt6Zk1qdldKV2FrcHlWeStLU3llVE04RitWenl1UUdjdzlrMkFDbVpreWtTc1p4TUdLaVlGVVN1RExLaEt6bklyNmNFRktwbG8wekhzcDVhYVVFSHJoa0tXRFNVbXFrMzN4TEdYTkk1b25teGx2dzZPT1hiUEdzNndadjNBclUwcXlOTmxYbHVtQjNISGIwYmd0OWNvU2dBYlloOHlha1h5SGtQVmVhNEZEWWhpV2lUdWFNbkZOdnR3V2o5Y29BUjlzZkpyRmt5MitrVTJzNmhSUUl4S0FUNzhDR3JybVZmRDVPd0NiTlNCanU5aHZkb0FVYkRNeFFtNkZkMFhROHAwUWVMNHh5cm5zSWZOaVNnRUxLUlFBbzZGVmFlajhVSk1GbVlGVnRnMTFGeE1wRGRYZXBrOW9RT25lbXpRQ2k2NFVrcFYzNGozTHpVRklmNHVoOXlCLzlhQzJBYnh6S1o4RHdUOVhrWUJBUXk4WFNCOENRK2tOWndZQ1QzSG5nQmV5SE5vcEpJMkFLbllHTjBjUkRZRFVYSVF6VUk1Q1loYWdGR2NTREV6VUJnMUpMc3hES0tRcityTjgxRUFBRC92UlJQS3lLRmNhbUdkWlNlWmNNZXd3ZTVMZjlKK0pWYVgwRjdtUVVaTUZZSERleUlFTmFKLzFDSW1VVEdBV212RktGT2hLZE5ST1ptNmU2emhGejJ0U01zeExlUGlkWDU4TElUOGtobUVXc0NSazNvK3lCTlJaWU1KUXNsbWhHYi92VXlwQkx2b3ZVOWhxRG9uSm9Hdyt5OGpNZU5hVmxXUXpQZ3VVcTVUTTVLek1lRllaZGY5TnZQYnAwZk5hMlBTa0RFK3dTTzhPeHowQlQ3YjRCUUFjZDJ6VU1LN25hUEk5M2dTU1VSejRFTTE2WmozY2YvN3YvLzIvb2c4VXhGdVdWcU5uSEEwMlY3dC85R0dqYkdQR3lEc0M1M0JNMVRJYVBBVVdhR1RycFAwVWcyOEFFTlFLZWdveDkvMjF1dkE4SmpJYThIVFdkQk13TG5CTWNSQzRnd1JCazAzRVpDQ1RXVWk4bE90eTBnc3djVFlNdk13REg0YVMwWHhkd2pWS0RJWWNPZ21zWVFZekgvRUN5aFVENEpzTHdITW9Nb01kVGM0S1RCaTJmdnFKVy9DanBhWVoyNUMxbklGSHJIL041QTdqYmtFZmhpeTJRMG9qTUJvOW4vZ1ZFbEFuem9nY0R1MXJFRGl6Q01raGE5eEJzbjFRR3U2bnY3cnloZjJVNlR2a2pnYVRsVXhBSzBDR0x3U3VwQ0RyWFpPanp6SHV5YnBoTDF1QklNaERLald2TEpneGx4ZGdFNVZXZ1F4RFpsOUoySytlOVpIaWVzY2VtdkZWUlhMblB1U0dsQkRWVUFCNnh5RmRaYVFSMkF5ZDc2aDZ3a2d2Rm0yRW1rNVlnT1UwQk1EU2M4L1FJc3RERWdmU25ha1JvNVRBY0ZpU2JnNkJhNFFGZ3RpcnV3YXpSY2pQNTB1MHA0a1JvQnYybVZGb0J5amRRZnVsM0V2eTRuS3d4ZzB5VzI4QThEVExEOXZnVDM5aU94Nnp4M01weFdpQVB6SEFQZUhjMmsyeDVXS1BOV3E3dmlHRm9QRU5uenlIOU96UnN5ME1NVEg0SVlweWZmaWpmYlNlYndEd21JOUsySTVrZnNHK2VnUEF3aTNZTzVEV3dRaTFEcTRMZXFxR3huelFZMnZ1ZURmU2N2dmhRR01FVEZIaTRkV25HVWhOWGJ3QXN6UWswREJFanhMOVM5QXNsTW9LS1JwbWtGT2t5YUhNTE1TTEVId1VGYUM1aGdLQlZ3OXU0cVJ3Y0NBdlVrQStnZEV3Z3pLbDlGZHVpSEtZU2VxVmxRRlNIbXFVSmJHQVFzRkV0OE1nWUlkSzE3QmRvc29aTFZuMFBMNXJVdVVrRXlPUVF3c0dJVTkwSEVJK2xHd0JXRlFDRG1la1pBTFNQOGNvL2VjQzNnL2ZvWWVkVlVJYlFSYUc3SE9mWE9nWElmZDNuTnVibVlTc2thZ1hrNVpIamRiZlUvaEtOM3U5WTFFNWFGZ0MrWmZSQlhsTnhLaG9aNU1zWlY1YUFnR1BFdWVRR0FmQ2NuQkdXRUN5WEVXYURKUTFDODE0SkNLVWwxSmNpSWtQN1FVKzlOUE9NL3QzQUdaaU5xUGNQSFJHSmdJZWxZbWlBY3lHVEF6UmgyNmVoZHpqdXVwckp5dG9oQmNnMXhLekF4NDZEMEY3YnA1c2Rsc3dTUEY0WkQyK3ZZVnYvK1BwSHcvY2VzYUdmOThnYjhtNGpWdzNQUGUzcDNHUWJkKy9PWC9nenNnSEl5WktERER3MlJZMG1FaCtBL0NGcHN3WmFhMGpOQ2V5Qk4yeGFRUmNoblE1RTZEai9rc1BoNHBreUcway8wR0EvbThEMDl4dGlkMDhSd01qY1FkdFhpd2RnSVlxQVVDbERJTkd5aUNUSGlDa2hDRUYyTHNETkdRRU1PUzJZTzZHVkJHSnhBUmhpTHBpWmoxUWc3MDhxZFRlSFlRemtQNHRnTXJSSEVPQTBIRFF2RzRiTWhkdy8weUtFVkRub2UySFBoQ0VGSGdHY3NFc1FpcWROUWlCREhWZDc2R3NGSk1CVGNBRHVBa3JabEw2aCtMc21SbTZ2ZHVlRGV5WG0rbkQzTzhhZXJwS0xFaHBVRWl5QlNtTk4wWTlROG9OdzVrL2ZXUWIwaGwxZjJkbW5yazBsTUVFdzNaZXBrMmRJT0lwRTNuS0g4U08zalJITDhZTW8vRzFESlhreURqNjU5Q1ZNd3lsaDBKaUNJV2g1eTVDOUN6RklTc01sZWk1VGhMbnJNd29LNFEwRkpncHhRTmtNYU9aRjVPQkRCVnlaNUVFWVpoelhTQXNRekQ5am54MjdocTZsWXllVWhtVkpnTzFwS0xPdkFTckZrMDA3RUFOM3FoQUIxejEyUEE1ZHY3VHY3Tjh5andLcHIwVjdGdm5qd3U1OFhaSDdjTkx5RTEyOEt2OURnQmEwYXFwTUVuc3NmblR2d1FBQ0lWRXJCZkVlTU9BalFMcG9ZUmV3d1VvbFN5a1VBQ011cjhFS3BRMUNMa3NDeklUVXZKUTVjcFFObFFEQXU1QUhFSmhLSTFYbEVaQXRwbFJxQVRRZytmYUtqZURNdmUxU08rQm5tcEFKYkpHb2VkQUxnRWZyeUlCZ1laZUxwQStCSVl5bkxTQllVWFh1TGxqZDNhK2RDaExoeXJTQ01pMk03aWNSVFFBVWc3Q0dTaEhJVEVMVUlvekNRWW1hZ09Zek1JNWh6emRvMDlZZWJydysvaG9GaW9uQnAyUWRLWWtkM0tsMFFSbEcwSzVxQVJLa2NtT3VFeGZrS3dTbkRuRWVaTjdZRFBaVUl5NmRUQ0x6bmpQdFlyb3FKM00ydGJwT1NyR1p5MDNBY25FQ0N4QzBNeWk0Z1ZreUN6MG81Q0FhNGhES0F4ZGZ5dTBMeTZWSUJmOWx5bmxkRUJLbklGSE5kTXNJN1BKU3hZTXhRdElzRzZEc3B5Vm1SMGZMN3FEeXlwSzdOSHI2NU5pandBZVlpSEJFeXhlNFBBMGl6Y0FZUGhBQzE1MSsybHdlUEVTdzE1QVJRYlhpR3YwY25VakpHZmxyc0dYai9qd0R6N3oxNmVwdWZZUG83WEVpejNIRWsyTTBRRmJSTHhyangvMDRNOFRJZEQreEUrZlE5MW9leHo0K09NN2Z2ZVhjVG5GWWw0bGRYbUlMNXJUQUNYaXRNNWdRbVVmMlRrenlla2dLbVhycCtLeng2UFYzL1Zwem5zVmN3OVR4ZzJCb1F2SGorUTAvMmNFWm4yR3psL1NtaS9MMnFjMTAzNEdkbDVCTS8yT1pwWXJ2alFwU2FVOEFQMmZOWUVtck43VTAwN25xZVpCeVNLOHNGcUVDcVAvOUZSZUxqQllGVCsrbVlFZ0o1WmtLZU9xTDBLbDFZeWM4ZGtmRE1RK3RaR0xyK2MyRW91YmRqK2R3MXZhTS9GQTE2dGJmOFk2Nlo0bk9KR1JmN3plWGNrUkhGOUgxQzdJZmhCSHZCMVFZUUl4QWhLSUVWQm9EWGIwMUpUS2tsVEZSZlJXNkpaWTFRV1lYcHFBN0g5SlU5b0dwQlJRK0hLMHhDWmdpUzJEQjFLSHN4NjJ3MjNpNi9BMFNYd3F6djdQVG5zejU1Qlczb05qdWgzTXFOV1hoRnl1dHNYZ2tiU1phU2s0YUUzaEFUbzJQSFhFb3pNdHpuVTZ0WmptK1BRL252emJkN1RCZlA3OFJjZEM2K0EzSE1mb3JnLzFtVENNTHVzMjJqK0xiaUQwZkRINTh1WHpwMzk4K3dOdlRRRFFFeDYrVVFZUDRGZFpjMlplZjR4dmE0Um1ZTmIrNnhqL1hrUkx0THNiTVA2cVozdnU3NmNjOUoreEpPMHY5K1B4L3ZnSHY3ank3SnZUKy9Pdkg1OC9mVWI1UC83eDU1Y2ZIL0MzVkdId2p6Ly93aTlWak9tMXlscUxvNnU0TkdqM25HZnY1TWp1TkVJdEtwTWVrLzRBMStnb0hyTk9mc3lGNlhLVDRHU0dzb1d3WmxLd1Q5Yk51TXN3OGVQM05EUXAxM2ZEeTFHUXVRT2ZHckV6cmhSV09UQ2hvaGdBbC9sUS9nc0FmYmxwS1J6SXAwenhxTEtDa2hwR3NlZlFFNE9lUStxQm9XUVdtVm1pZUFJTjRhQkUrdVJ5RkdTZXpJaTI4eW83TUZxV2MwTWx6cFRqU20xSnVKQWxFOURKVEtiZkZWcEQwRXZUY0RNNGVIdzlRbENOeThMRlhVcjVVWEZNVnBFR21PSWhtWWdVdzB3TkpRQVBMRjZBZ2pDa2lVcHJtSUg3NTJobTV2cXhRTmNjTGJ2VGZTSk83T0RhWDVrc05Gc0h5U1Fnb3lGZVVjRFk4TGpka1JFdkh3ZmhFSGdvSjJaRytsbW85RThraVBNV1RjOHI0UXVJMC84dmZHSlhwVXZnaHVndHV2Y2MxencweVFLbDgvV3VENzNQNCtZajJYRGdCWGwwbEtKRFpWK0RSa01CYWpVVWtBY1o1MmNNVWlRVEVKa1poUndBYTFPS1FBNDUwOWNGeTNpdXBCSUZxSjhOeFF0QVQ4eDlzeDcyaHdiblZMOUJ0Vk9sbjNrSGo4U2hQWmx4YXM2WU5nWDZERGNNMmZQUnlUVjZuQXBkMHp3SHlEd3I4bkYxVkdmRHpWL013QzNVK3ZkeVZ6eVVaOFBkQmttdHlHR0lUOEQzVm9ZL2twcUtVd0xaSGpYN1FBSys1Y1p2MTNZbDlXMGxLV2htSDQvZk9PM0dYV0QvM3RReGJsK3dGcHJ1b2NWMHVNRU5BSS8rMzc3OThiZS8vUTAvQWNBek5yYitsMEFiYUc4TGpqOTVmLzdLYXplbFFWc1pMbmFiN3pnblNHS3YrMnBuamlQWXA5QXdNMXVQWTE0OWhVMWkzLzZqK1JmSSs2OFpVOXdMdFdtTmd0MUxhemRFdDc0ZUI2TlhiZjJNLzRCYjh6Skg0QWlEN0Ezd3BhT2ZkY2NNdTZUTDdEVzdaVjJIa2xXQVZtMS9kVmFKQzhqTzdiVHRyVmZtNG1TeVptQi9QbnhRQ2diQUQ2RXNuZ0RaL3dtVGh5bnZVK1ZoRzY4dTJKL1h2ckpzTXFTSFlaa1N5Q2RTM0NHbmc0RUFOMWlYM2NMWjgxWTZ4YmRNSG9vZkNrS0gwSVBKRitPTUQra3ZIL1pDNVNHSUpGdWFWVnhHbzFXZWNyanBZWmpXNUdJeUJQMWVPZXVwdW0vbmhjME0vRUNHQmpLanNoN0ticGtwL2VVV2dKdWpyM2JGVE02WmtOaXE5SWs4V0tPVXhvYWQ5aDVDbEFldWRkVTNSUU9QSUVQOXNhQkpwZXg1Vzd0Wnlvd3ZxeXpFWlJOMzlUSmhZcG1leWN5VXpkTzhGS3R1QUVIc0p3TXhCUzQ3TmUwb0h1ZmJvaCtGV21ML0ZBWjdPSDM2cWRoa1BaRDNyai82SVdYbmlidU5ZUHpxczJCTVB3RXJpOHB6QUR3WkhwQmZjRm9EWEc0OW8yYXVoUWl6RGdzYlFqemVOSnhQcE1OcDl2VlkvVzdUTFBzZDZmRG00elVlOGZtOWZ6enhJNHFoZmcxWDdlaytCdUI0ekF5RzZ0YzdFUmxuTHhPcU1SeTFaRVhROXZHWGdMMkNzRmxjN2d1cTFGYXZsM0dsMGdPQXBoMjJjUWRpVklsWUtia0JZTW13Y2lCbDBxTWFuWUJaNTNpSnNsaE1DV0RXdTE2YVdsQW00c0FFazg0YzZ4WkNubld0ZXh4TEo3TXowcjBCNFF4eUlXa1l3aERBeXdYejdDRG1QVUZ1ZTlhemxBSTdmYzdFemd0bm9CSUtMUmlHc2xJcCt5Q2JnRUc2TDQ0WUFmY1BEdElJU0R3WUVRMG9YWUJoaWNWbmNER3FCa3J4WUNBeFpGUlRKbFBLb01sNnBJT2M4YkwxSGhaWVBndk5FNkZYdDVXaFQxQWtPZ1F1UXlLNytGajhJUFlKMGxOWkRHV1NES0pTcmpVaHF2UzcvdDZxWTdVQlV1WWxDUUY0YWR3RXErTXBsOUE0YjUwazFndStlenFtakF6OWM5UnRQZXJZZlZ3ZmNFNlI0TGtRMGoxUk9JT3lVSmFKS2ZVaVExM3hJVDBNSlNQSVVURVpLRmVoQmVQKzFQTTVpdWVESEFTZ0o4Nk1xcmluazU0eTA4ejB5czNBVXpLbVBtY0ZSc1BzQUFaUlhTQ2xRQ1I5Z2xzWVVseVM4Z0hRVlJ5QWYvb2ZJUXcvZldxZlpJRWhONURZL1BsV2J1QlpRb0REOWI0VWx5UjlQdjgvLy9OLzhOOG4wMmRzU25VZzgxRDNNZzgxUEk0R01POXA3VU5XeHlRUUEzMG9TSkxDNmtEU1lsaWR0a0R0QmdyTXZQRzFqVVNPMEtIaE1PK2x6OERkRkhVSEp4MjdKdUFzQzB5ZlM1djBxRTRNMVFGb09JYW5mZkFaNlUyZ2tJREl6Q2prSUdBTW4yWkNyaHJJUUNVVUVuTVhzS2hua1pHelFGQ0tGNUFKbWV0NTJJNmFCSTV6dXNzUUxYM29SUjkzODF5UGRzeno1S1M5dE5oTUJzYUhqbmxtd3VkS25zUEE0K2FXeGM1Yzlmd1JhdUYybGJWNWlCRm9iTjhXVEFpRkliSURFNFpad0lvTFhvSmJnSGU4S2lVZTM2QkppZVBtZXRYbGVZMzRBLzhoaXd0RlhyWUNnVmY2ak45SkRCcFlaU2FRTG5BYyt0bnNxc3dTdWZCZmhKUmVIckIwV0NXL0FNbFFTUGlpc0VFUWhLRUpEL2hRQUoxclp0aGxybkdlSlVQVUJRb0plSlRwemtnbVFFMFlLdEZ6RjZTZVhVcDlOaGVUUWVuQTBtdXhvbGo5OWtjZ3gxRTQrY0Y0Q1VSNWE1NlZZUHloQ2RPRGlVaWx6MEN1Z2x5SkgvcEVKZVprMXcraldwRG1qUDlodkxQeFJ5bkRUWVVFU2cvMzVzV3VQUkx4eVo4Ly92Z0Q0TXVYOXVkMjhBYUF2d1lBQmhzWWlQbkRBWUM4VWNDOW9oaHFjeElZUFBjMHAwdzhTTDdUQUNDSkovLzJFd0FPWk9wcDJVZ01zbVRVQ3ZlalNGSldYYUJSYjY3WEhxc0doMnUwajFRQ0FEOEJ3RTlOOEZzQmlLaWNnSk0wWW00NUl3a1lsWWxBZG1PSzlrRXAza0VvN1NtVWdRRUlNb1ZLSHRFZEgya3lvSC93eVRJd3BaSWtvOTdoRGlQRFZ3ZGwvOTRlS2txaktRVEJyS3ZaMU54VDVnSnljMGJZUWVuakpLMlFBb0NlQ1VqbXZVOUtLUzVUYVpHbGpOR0xlSHhFR1hkU3I2SzdLbS9BUjJpY1BoY0hsZXlnREdVU0RPUmVVWXlBakJjTVE3TFMwSE56RlViSk04VVRuZmRjZVM2QSt5eGttNkY5dDMxbEx1M3pSZFNuVEZzdzhyK0tjYzVjL0NEemRNVGtRSjE4dkZBbU15TXIrbkIvYmNZakRhdVQ3T1pNVEJ2ak1uMEUyMWNJMWo2OFhNWkY0Nm5Ic2x5b3lTQ1VDRU5QbW9WbVBIT2ZpQ3BGd051WTJVcWNnZElWQWlPY1FhbjNGQWtFWkxKbWNGdkt4eXZuem1xNVV0aUJuelBpM1kwazkzem9Zc01TTDBDZVdoYXJWZzZKZVZoeFVVaWhVSWptb1lURUpRL1M3eTdTQ0NoOURhanYrOE5QRGdKckIwUjVOOUE5QVl5Ky9lOGhxOVVzRlhMZ0p0U0E0ZFp5WG5XTEh3RkNmNmlrRXNDTEpXQlVtZ3prSXlDTkdBQW5IYU4wKzZGSjYrSDh6VmNJa09KOXNrUHl0UFdvRndwUnlRUWtGaU9nWEFDdnBaU1pBQTQ1UmJZQ0lUMW5aUVlwT1QzMEprRUdPWjA5YUs4VU1XVUtaT0M5YnBub0pxK0ZjNkd5bWRBZWhqbHgwVklXTHhpRkJCYmxwQkdnR1B0YjY0bjBuUEtRWVMwVzhnYkloM1FYQTRmTjBvL1h4OXlTVWt3czdnQWhkTXNraTkwdFIxWGJaU0lCWmlrejNuUHZZbnJlelhKOWQ0Z1AzQkxjOVErbkgzekU1T21EbVVWTHNicVNyYmNYckNnT3BJYUlLdGRKWnVVUUdNa1VWUnR5azRZKzVWN3BMblpTMlAyREZUVEhCUk1DeTJGT2NzWnh0bGxFRWRKY0ZyTHNTY1pUZGpDeVhCWk1QT1I0Sm5PTjQ2RG5FSHRxc2xJaEtVdG1SaklyMklhaDV5cEVvQ0Y5RnNvZWFsY2xmcFcwaS9Xb2Rqd2c0WklkNlFMdCtLcUVRRTl2dTMxR3lneEtINWFnT084WjFiNzBWTlN0UkNwbHdTZ2tvS3dHMmlLMTdVS1NlclRuVmFOcmh5YjQ5aisreFE1TUhyYjRCanoyM01namhBME1nZXBnT0JLTDJ3UDFFanVnbXpQREozREhzUDFnZ3NVQTRKdFZwV09RUVlOK3kvU2d4TkRGTW5mUXpZNDgvQUFBN3dHK2YyNi9Ra0dxVHo2N3R1clNGT0VybGNWaVNvQnNONWZtNm5xT3NnQk1Oc0dhWVZwbGlPVzJmUzd0b1pBbkNtZWdqaFVTUXdBZXdPZU9ZU2t1eWVEMmRzTlFQUXk5WjRVRUZsMDkxTGhBT0FPVlVHakJNSlNWU3RrSDJRUU0wdjJBaWhHUS95SzlGT1BNNk03bmJTUTcwRnpwYUNlYzZyTVVkU1ZRS2dPcFFsNFgyRmNBUThrSVhFQm14Z2NmVmxuczViUFFQQkY2ZFZzWmFvSmtmQ2lNaG5PMHo2TGQzeGgxY1E4ZHU1QklNV09lRW1RY1FqYlRRSkJEdEgyWTZ6MHdKZSt6dVRQdVFGNUYzZXE4VHB6dHVOUUgxVnJEcUxwYWlEM2tXT1ZLVWxHQW1XREdMMUpvNjRuQ0FsNzY1WHAzSzB0a01qTUxFNGtGWEp6N0x4bmxFb3hoLzloS3Y4WWFJd0FMWVQzeGQwYS9kT3M5RExlVDIyRk85ZlVFVUs2QUt4ZVllbVZsd0Z6eHBSV2l4NU5pR1RhU1BzRXRESGNxVXFNTGpVTTh1T0xwSHhzK1dvL25mZ3poREl5SFdaVUFqODNUWVJKOEZDMTVSc3M5cXp6TU9oK3NTeGVWbjBXOUFEQTNGMnUyVGk0d0hCZ2xRRHEzbkFJK2s2L0x2S1RFUzNKOUZuZDlYcWhIZW5iWVliem45OFM1TjFhZjhkN2JqbWJtdHA4N2MvQk9nTzhhaHZTWnd3dHRrWjRkTW5NMDA2N2QrcXJzTmpFMDh3bDhHUHJFRjZHMURJazUxeG5IQzZ2bWNtZHpLOGN6RDlmTU1ISm5vWmZ6dDh3WDRrVUlUWmJSVEpaTUlERWtJekJiQk1vOG1obVBPczdtWkxTWE9Dc1ZBcEErQU5ka3ZPUEpMTm5LSk9SaXFGQUdRYndqVUVwMkZpT1FEUU5US2t1U2lXVW9rR0VZS3E2SHlBM3BnY25SYkJnMFdTQW1LTU1RTWp6MTQvanBQejVkY3VoWWpKd0ZnbWNZU2thd2prSlRDaklabURCYytKVEtrZ3lkN3d5eno2d1R1WG1LbmwwWmJkKzViaDlnYjUveWh3eWJubWtoY0RGQ2dkRVFNaWtKS0dhSmwrKy9vRG40ZWdkdGFKLzM5VkNveDlCbzZQTGdEaVY1TFFGczhmdThuVzF2MFhvVWRVOUx4REdBbmhRQlNLemozLy8rMSsrLy84NTNTNDMvK0VHL1ZLRzNVS2RSWDF4V3AyY0lhY2hvMWtnZ2tEVmoxb2RFQXZDT0dSWWp3d3hrbU1XenVXUVR6L1VzWVFEWHdHRTl6QUlXRFZtNUUxVXNIVHhkU2lkbHFLZzZGeE9jblZlNk5JdzZyMUFnZmVndEJYOFBlVXF3OVN4Z1pEbkRSREVBZGtHMGEwUlZkRG1rV3VjZnlFSklLVW9raVgxbUFva2hOclVROUJ3Nk9STjNtN2dMaVFpVGFhOU1ZNW9xcldSbDdZU3lXQXdNNlNBbUc3S29CRGtsQzZSaDZDMzJzejRuUEdnL2c4Nk9lSitjUlU5ZGhaakZsUUhXRXNsTkRMSmRITXc4bEhNelU3cTVpZnd6S1RkcENMeFYrUU9JbnlVR0h3NnpHQzl5czFCMnFBOVYwdVVxUVVKQmxvR1p6U3VMZzJjWXp2U1p6d3lzUkFyUVgwTUIxUTBNaHlMTG9SZVNUeWprR3JsbGpkSmRFNDdYSlRTdU95ZDNiVWR1MEx0VmlUUHBETnpDRUNlRG1BQm1RemVSeGtuSFdTQ0dRRU5remJiWkdRdDlEeDNQbVVkNlA4UEg4K1JwNlRNRnErcCtCS2x4WmNQOUcxanFVK0MwdmlJS2tJaE5oWUQvN2QvK0RmdmZmdnNOSko1Z1c3Zy95dUoxbk5qM3RJUVZTTzVWcE12YVB4UkFjL1VEWGxrQUhES2RmRTlzTzBZSjlMU3M0ZVhwZ1psMzkvVEtXYXFkUTJDVUpWREtSR0xodE5ZZ2hiVWlVanBZUjZsOExZM1h2WU9QQXhsU2NsZGdNdmt3S3dnd1hKdmthS3Q2dlVObHoxZGhIbGJKZ3N6a1RuWTBPZXNsVEs2NHlXVFowMjFrS3pDWjNQREhQWFAvdjZsZkx0M2I4UnR5a1p1ekpNcWhUY1psanVsY01rNDZWak8vUGtEYm9YTXlpMzJZRkpVZ2c4K01vVXhaY2d2TXBwdlNDWUtKeUNERE1QdG5EV1gwRFB0Uy9BUVpiQjhPVlFKSzRRem9BejdMbkhHY1RWNlJLUXVWWk5tek9na3BZU2paRHBqbHp2Z2RUMmh5T3BpU0RJWkJFNFpCekdHcGNkS3hVa295K0dkTkVKVERNc3RKeDZXRGsvdmlvQXhEOTl6QlRIK2hDUjVmK1FSTEh6eGhBK0RULzdtQlhJaUpRVm1TYjZTQmJmc2RBRzRvakJZZmxxZHNKSjI1ZUtSbmVqblBnN3pleWxncjYyRjZ0bkcwMUg4YkdLdmIzd25oa1JsWlNnU1FsWUE2VkpSTUdKYmtqa2IrTHdOOCtnL3ZBWTRoNy96blVsaWxzc05iYzRGWWE1V0JvcW9aS21LWU5SSy9FSVJhY011TVNvUlFHRklHVXZvMUNPbGhpRnd4R1hoMFZrVlpGR01manE4THNpWkVzOEFaaVBmOXM3Z3p2TExPMVZNREFpaUJUZW41cExWUTBZL1N3enFRZDJjeEFuSit5RURnL2t4a0ZyQ0hRR1piK2I4Y2VPbVh1ejNuc05uRFloMXlTSjYrbUNENWphcXM5ODV6ZE1ZZ0svalRSeVFUU3hrMUVuZ0RRUjlDdDRhdjVSOThOTVFzaEdlTnVjQXg5QnBxeFdZbWQzazVLekV6VDRUY1JKZ2dER0V1WmxFb2F5ak9mR2IyYmN2Y1RDNFloUVJtZlM2Nm1vV0M1MHdHWHNvTW1DVmVKZ0locEtFRFlXVUJnQlNmQVpYaVBYRWZsK2tsdWZiRWRjUmJITDVEelkvNzQzUC8rTk9mNGZxU2MrQnBUbEloQUdMZnI5c0lVU2FXNWlMWjB2Rkx3QndnVFkwR1J4OUtKdUJSTDlBRk1jZ3M3SEV6Vnl6WFBXWDltUUxyaXcxdkFGcGkvL09nQUEzM0RlbkM4aFFJVVEwRm9IVE1JZmJCTTJqay96SndMc0x3dVRDWXZiVnhlUlRMSGRJaDlLbWhRSkNKQnhnOXhBVUJ6NmcxVTJpVS9oendUcnlRM0NRUUF4QklEUVZjSExBMEdWQUpIc0NieVVveE10OWg1Ty9tSU11SzdneWNVd0xqK2hBcS9hbXAybTQvc21SWEdZUk9XdnI0MHhPaDZLSWZoa0pYSE1wZlEvbkkzMFBxY0NGVG9qUncyQ1Nad29vNVJZYS9KdkNGVW9jbGlhaG1GeGJINSs2NXJxZTVtRndMSWVWS0prYlZNNE9RU0NXS3pJeXNTZzNJaDV2S1BWUlM0RDE0U3VuRHUrMTV6L1dFaE9YQWx3Y05LUXhEa0dUVVR4Q0VZYW9XaVprKzhHR1lld3NDRFFWeUNoaEZkMERwRUVqNXVEazFDd1pIQ3E4RzRYZzlhV1V2dGFFM3RaRTdVYTBNZHJKYzg1eTU2dEpLd3d5OEZxSlpJR1ptRlJ3V1F3ODlnZGxKMzE4ZXZYYXNjSDNobVJTUHBram5oZy84ZlB2MmpkK3FkZ2RFT1VRS053d2QrSkJZZXdDYUE0UnRtTzEyRGowZENJNmZBSWoxV0tqa1ErZzVId0ZFaFFWSWVpSXhCRjF6UmpEa0FMWTkxQmFya1dQVnNNUllXYnpIb2xMVlQ0dU9tQTRvUUVIUUt5ckFGT3pWeVNaRC96ZmRlNU9oa0VJQ0ZHQUlvTGtvS2lDWk5NRVp3eURlU2NrbWR4a1ZKUWhEZFNWZVhRRm9Mb29LTE5xUUpnTmxLYVJ5cWhVWUtRbXdoOERGSmVPQ1lNaGgyS3VLK0d6cm9YMy83S05hRHRibWlHYWZoeW5NQ3EzT2ZNZ2p4ZldaRkNPbG1Kem9UR2lHV1M2UUQ1UXYzMTdYTGZmai9vNnhmbGtjR09oOTRvaktRYndZUkVsMjVuak5vMkVwVnFLaWQveHA3QlV2VExaU3VVUDM2SXQzOVVqYjRqUC91ejZzbGQyY2NhemVBcmtlS3VzaENENVpId1JoU0wxSWdWcyt6Q3B6QXhtR2krcEJHWVloY2RHdEp6cFdTa25Pb3FWWXBJRFNBVVFLTUxvZUtsR3lES1Nob2ZhbDhtNlUrcG1WK0t2dDVhNlNOUkkvQk1wdDRQR05zUERqZFkwOU5wamdHUlUvQWNEZTN3Q0F4NFprN1BVN1FreWhJekFBOXdTQllickVXZW5wbERranZVSUU0T08vQThDMDlDNDNKTFloa3RtV0FFVWFDcEJ2WWl6Q2VOQkhsUHdadFRHamZiMWFGV3dJOGowQVFwNkprSXNoY3daRGx5c1VaRE1OWkZSaXY5WjA0V3Z1dkZYcjRiak9Rek5zRHlrRTZzTk5oQVVrQXhBcHdDaUdBRjdPeGRTOHluNVd5TXVwTjRLY0lrR1p0ZWpURXlrcnpSRmFMSVZNSEhoUjhTQWRjL2pRUEFqZ0VCajZzTU83L3NqMUxhZUhpUy9FbUp5aThoRmdDRU1BM0EwSE9LOXBNbkxRZE1RSTVKQ2FsSWtZWklWYVlaZ0ZtY2twYXVhZGdTWjRyWXRWUFJmL0dpcEdFNU5EV1M1ZFdBRTVsR0lZUWFDUXhLRVZDanlhVThUUUUvdk1PSm5keUhpV3QrRjY1Ky9pVy80OFZPc0R0bTVzRVEzekRjb3d2RHRONllOUEdGTG01QTVHbHN0OE9PTm4vU2czSklwWFlzbk15Qm4vUkpWRmlrSUF3bXA0TUxoejhrbXMzVUk3S1VCdGZXc2Q2Zks3QUk4S094QldtalBDQXBTRllTQkRWTU1NeXFJaU53RnRaYjZabFdWMHdCTS9IbEQ1dC8vTG0wQ1h0V09CS0FVRXdoNGl6clZLaGo0TTBRMjEzRmFoVEw3SDd3RE1taVlmRG9CYVI3UzEyeDhVaUJIaVc2dityd0pjVHVzd2JmZDBRL2lFb1hxZ1F6bGNrQXk5MFo2elNJMjFhdVVzMkVZSWhhRTBBSG5SeENncXZiY0JNdmRHNWF2c2M4K1pVYUVRQ2tQS1NsSU9Eb0l5REtFVWs0RkgzWFBHd3dFaFg5akdYTjdleG5WV1VmblhKdDIyREhrNU5zWWVTakdtZTIzbm5MNGFJRkQ2ancvZjhRanFWYzVRbmkvRUg0Ni9iK0FwYnE1MEowTlJoYktZREFUeUR4b01GVnJicXNwTGdQcDVpY2tMY3pkN0NBdUZva3BjaExTWVhkUE9IMlVwRlBxZnViayttMlRHTzh5NVpKUVZlbkI5Q04wYXZwWi84TkZ3UFF1MktqR0dqblAwMXRUVzRseW9yUDZ3aCtEalEyRUFySU1QWjcxSkkwRm1aaTNObE5EblVHRENjTCtFRWpPWW1PQVAxN1MvQklxdHB4elBSZUZkSmQxNkRMc3pxQ29UODNPbVVnck1Vc2lQZmpRcXJMS0dhcFJRbFF6a2lORDVGQ2gyRDhqVzVaMjhiWWtzUFAxanc5TXBQdjJQbndEd2IxVFMyUXQxWmVIUGkxcTNJQURpOGJVZEwrUmlBMkFJMkRUUmt5RTJJQm1ISXVtR053QXdQZjZ6bTNXck5EYkg0R0I0WG50RE0vK0tiRyt2UCtJWWNSekNvQXAyL1ltaXZjSDY4UDNIbC9hREJETUkwbzJoMW02aDNkRXMwdDh5aExtM0k3TGY0UzNsckhPWUlPUW4xcTBlWnJhQjMyODFKUHJ3T1pOWjFveC9ydUpETndqZ25OZFo1U3FIbHJLNXpmeER4ZXdXNnM1OWN1b1dFL3hEanFJQ0V1d3dFR2VaSE82Q1Y3UjZWUHFKRzkxeGY1ZzVvM2tMUGVGL1pwZnJrTWl6SHc4NXB1TU9BMlVwQXg5TzRGSVdOT2RNNWdnKzgyQVI2U1YyVS9yU2hMZlloV2ViaStoclF4cHBhbUtVNFVCUkFZOCtqYlBiZ3JrVlVrdktJdEJRQW9CQWh1Rk1pYU9WbFhQbThjTlB6czI5bFl4M3VNWldBbERubThCNXZseDlqb3ZSVXE3eFBscEhpNFRyQXBicEx5UlZWQk9ESWJFWWFRSm94N2RUV3Azckkra2gvOUgrUVdWWm1qYlkyUkRmM0VBS3A0WUxFS0IvL09mNzE2Ky80YzJBQ1F1b0M1YXhNQ3dTQm9VVzFTWC9HUzlmQWNmSWNERng2M1B3WUw3Z00vWDRENy9DZ0UvWTREcWc2UGg3L2RmajJodEFYTXMwT3VMWEg5OFI2MXYvcmcvaHg0OS8ranIwZDZxMGFEM0FxVC9MdDJPSi82T0hqeDh3cFZaZzNCVWJ4bC8rYWJFRzBPZmZ2MzM3K3VVTC9zQXF1RCsrL2VPM3IrMkhHTHdFMnR6NmV3VVd0LzFvclZGd09yYnVPZ2JqNjFtNm0ybzQ0cGRjUlVzclR3a0NKYnJHOFVUQWliUjlFR2dGRUNLbUcyVmNscUU1NnJBbENBQzZqQ3ZqYTNVbzhVWGxCQmlUQ1lZK1I4aUM4dlF5cFRRQ3NnMk1wODh3VXNaY0NvbGFsU1kwWE9UWXhCbDkyQlhONVN3OUdYYm9oYWlYdWI2WkEwYTVybTlZQnhqSHFoK3VoK1ZrTmNCNUZUaVRmZG92OVVwN25FQ3RCVnludlpPMjQzYjROREZzanB4aGZwNGJDSW5FRHhnK2ZKTDdNTHArbFppZUdDN01neGhPWWdSbzcyMWtRMmhVVG5vQ0RXbW96M1I2RkZpZWdUOE9XR0luZXF6VjhST1NsRkVTT0NoWXozNW9ybkh6UDZPZFpNcFZiU05vd3RJaEtFYTJZaEFsMlpsNFBZNWJVT3ZCTVF1T3M0YWp6ZjJEODZkMDhXNUg2V2Q4bU90dStQc1VaY1h5b0lDRWZ2LzdXZTFRcFRVaWsvbEpHdy9vRi9xVTZZSGtjamtKaHNNUWttWUJNQjlHRDgzbHZaSlBWdmNOZ3VNcWFEK3ZiTnN4dEVLZTJ6QVgzajhkTFhHUWFqbzlLNTVYbDI2dm1USVV1TWJQa1VyZy9HSHJTT21uQnpYaitXa3NEa085RmV5Z2JkQ3JDR2NncFVKbkh3T3BIeENPUjd3bUZkMEViUmJ0TWIzUG8rZHc3a3hYZSsxcHRtK053YlBzZGVQbGhpWXBveFI3Zmg2MW03U1JWNEVCWGJDcytEWTBDL1cvK2ROK0paVWt2dmYvOTcvL0hWSHdrQjlueTJXZDIydG1Vek9uQStEV3dMakg5c2pSY0ZPMnJzNUxvMFU1bHg5NGNCKy92dHZub3h5c0RXZkUzRFprSysyRnZKVUVvejNBK1JFZ09vZTl5ZytlU3pORzg2OUtiT0JzNlVobzdmWjU5eTgvY0l6NndVQ3J4MFNvWStzUWFrcGNMOXhpLytwTDl2RlRXMnVQTitPeG1rZXg2c3RDc3dobHAxdmluUDRVY3l3UkRxdk9CL081TEdEbnhSQ2NhMmxaV0xUamo3MzB4VlNLU3c2OFArVjlaVkhtRWJVd1g0VGt1cU9oZUY5NXkzekg5ckVHQjNOMXJJcHJJWHVDUWVmVnVkUW5WSjh2dGZQdzhaNGNhNFZLc3ZCRVFtNVlMaGtzeERtMHlhREtkSEY2ZTVOalVNOHg5L3djZytadkpzWit1a01rTnoxdkxWMitVL0dNWTYwYzlSNDR5N0QrbG5JdXdtWkx0TXBpTDNvWHY4Q3RYM3AzNjVrZXBXMVV3SWVDSXVkWnFxeVZ5Y3g0UVVVRkZNME1RaVc1NE9VRzBKNDZMdC9mT0JmelJEMWhWc1hkaEJmaWg2RlNrTW5Cb0UxMUtvQ0xXaGhOTmR4T0V6NWNZYjZQenBtdVB4M2VRcSsxZWdMczM3TXdCNGo1b044bTFZcUJhQWJmNHh2MWcyK1N0cDNUNTVqN3ZoUUk2UnVtUC9ERWp3Ly9nT2VuLy90ZnFXbWZCY0o5aHVzMlZnOFAzNS82eVhZOHhFT0FEYmJjZTVYTVhLTEk0QndHMjF5R0Q2Zk1DSGxoWlRrNGZ3a1lWVWV2VERuMk0vNGlza0hXWjhia1o1V092T2RUQlFjc05QYWcwQ1F3bHJpL0EydExmNnpvS1c4YWlzbUY0WUkwandLK2xrOWgvVXBVN2xCTUJxd3AvaVV0ckUwODZoZ1ZNY1JlWjBnNGFneDVZNTR1N0dBbUZpOHhHUTB6VU1vTUtDVUxGQkpRT1FDZHlUTWd3NUF1WGlBSU1KUy9OQUF1S3pVdW9KNCtXU3hHWUZiSWZSYWF6WkRMaUVQUEMxSWhnUFU1eGtsbFdaNXNabGpGYXpuekhGWS9TcytNUXZ2Z2xnbkV2bWlza2tsNlppWDBpNUNpQU1pbGtoaDdicGtjek9YbW42dGtabGpHbG9haDRsdEFrMVc2bUpBdlFlSURzVHVjR1c3bXZ6QTlWTWx1T3d4TWdrekRIZUE5U0U4eURMMlFRZ0t6RlBrSDVWcGZpdGNwaU02eUFoK0c2dzVMMjlKQnBNRGFXVEtCVGIxazd3WnloeWdkeUQ0ODd6enIzbmlCNnpLbkZaNUk4Uk1BUEpUKzlodWVxRC9oelVEL09VQXJSQUgwYmNPM3V2Ry85dC94b0N1QW9pVm11bHBxbXZZS2YyNmVkYkpYTitjRC92eS8vOS8vbS85dUdkL0hJSndkbmVtNGVFeDNEV3VBd2NadUFWUjQ0QllWU1hDZFdnaTJ4ckJwUmREd1ovd0VnTzl0aHhVRVNuTk1jc0U4RnlwcjdWaEpJMUJhaVJUWTFBZVpoclk4NTRGV0ZGVTZibXZvWkI2V2pKTkt6d0F5VjRhaDlPUmRxWkNBb3M3TURLVVIyQ3d4TTF5azc0VGNOclFVaGxCbTVpZ3h6dmNnOENHeE0xNzY4QmxmZ3F6ZHNmb1dlVHVUUXFqVWc4d3lNUG4rOERDOTlHR1c5anVhV1VzeUlRaFdZUmpFYnozVTNlL3BRdnNPZWFZN0RCcmJsR2tLV2EvUWh0dnhvbEdhbENUTkZ5R3Z2b05mWm9YcmExekRHOFhDNFF2RERZTUhraGNhbHVtWlhEQUtDYUJqWVFGT0l3eTdNazR3YTl5UWExOXE1aVhpYzRyU0JXSVROb1VRZW5tS0hEcG9weE9BbjVQaWUrbWorV3ZXcFNtRm5CVXBvR2htRUJJcElQM1RvRjBubU5wMmZwdnFVSTgyc0RndG42c3dTTk8xWUxFTm14YkMydnFHNTM0OC9lc3AydGRmL25oWS9ZU1BzSC9HQjE3Yjl5dzhuWWJIUjJyTm5IeXJaMXRPUkJDOWdaZUtHZzJib0c5b2hqS0I5dnZLV2MxTThPcWVGdGc3UTVudmxTTEFLSWZZdXpoakNLVHdRa2EzSkF3UnhWc3ViQi9hUjREYUJvWXlBWkxZZTNxM3pkZkc0Vm1KSDRTUXdxMDdYMnFOeUN0L3pZVXlnNUlndzhSOXFKNXQwUjcwbWF0a0p0ZDFacWNsNnJIM2JwV1lBWlRjRkJyRXVRSUtaWkRGemdDSE5zakFKNGRzSlhVV3k2d0JWYit3WXhDaVljajBvYjErSFJkTlNNRVF1ckovNVljVThpV0pVRGE4NjVNZEd0UDd6MFZyY1ovUkl1UXRBZWZwUHlScFRoOGRVOWtDNU9vZUZYWWZrVThBVGVGVkRMTkpadGdrNmpLa0JzRHZNSlI1bGhJQnhNUEtNVUo1bzhBN1RBeE1qanpKWkl0QVNUS0JJWW1sekcwc21OVFBRdnZLb2MyR1o3SVovMXlYMmUyRmpOSm5BQ3MvQ1kwVG9zOUVHczRyREVHQzRiT2dKaTVDSUljeXN4RGZDbVZuTWpNVDhRRm9HQTM3OGlpYVFkVDNjWmFKMmRSTDlsT0F1dTNnT0VOSTJ2NXk1dVErdTdMZGNIRHVjWU1HRC9aLys5dmYrQzkvZ1lRR0Q2ZjRLMEI0T3UzNjAyYms0T3ZwMEFhMitkQXhKV0FhT1Q3NzNYRGZCREJ5bklmVSsvNzRDQkRTdUhuVFlDRE5qT2NIakJUcUw2Qi9aTXA5UEl0VnlLRGVRb2FRb2xoZnZQSDZqcmRVd3dzaE5leWU0b2Z3S0ZGcTZPOGh6d3A4RnVkYVNuOWRVSlpHQ2U4d2F5RG9IWjY5cUdHQk0xYWg3RGxqbU8zOWdBbFZ3dEFMaGxBWXVwVkNCTmdqT3FzYnhGNlJXQUlOczV0Q29ZcjRuUlFWeXVDaER3VjVMNnNRY3Q0eFpCaGlIeVlTTk82bWtBQ2orejRoVWVZemg5eWVLdWEyZzVpZUtrRzlrM0lRS1FaWlpVdWh1aEpWNVMxQXJwS1p1M1UzSFNEek5VRVZKanE1WUVLSVE3WXE3RlkraTVDcjBnQktrWW5JekhnaU1EYzZ1SGhFYm54VnV2cTVrZHlsY3JpYlNQM0Q5SWVDVVBldTN0UEwzRTFTc2d4UUlwTUxacll5ZGNybEFhd29OSFB6cnFqeGZhNFZmQ1JRRnBuTVErQ2tZK1VLOU9obFNsa3ZSa0Rwb1JaNXlRUmVvdmZjOThGcXU0TmpjVVI2RHlYcEFtSmM3THJlOFJUS1QvOS8vZm9WYndiKzhZOC9vVUZVVmxSS0x6Y3dKTG5QdkpnQXlpeG95UHU3MmVBY2ZEaHN2d1NjZGVoZUpJQW1VMW9FTXVzem94U0ZDTERQN3dFNjE1ckVXak1SR0MzeFBRQStWalhlQ01tMVhURE9oaUYxSlhsYVZLaE1LY2txK3oyNDNJeVlETmlRK0pmMHR6WlpSQkZDWFI1UUFyV2hrQmdBdHhKMk1CT0xsNWlNaGhrb1pRYVVrZ1d6RUhpSWVYSktrNEVNRlJLekJ1NFBaWmtlTktWTUdnSFZGU1BnSWIvdTZJeDlKZ096Y0ZBb0F6U1FmVXFTdVdYRENMa0pOVTZLY1JKNDhKZVhXL0RjUm5TTUgzMzFIbHliZlRMaitrMTh5d1RpM0Y0bTZlbEtWY2toNzlPalNwRlBacEE3U0RSMk9ya1AyY3hJSFVMRFVQSEhRQjFDcW5RbjNVSUNKM3RpSUI0TTVUOHpmSkEvd2k5TUh6YkgxK3lXR1VnekdSZ05NMUE2UTFvSGRpQjlPVlJ1Q1pqaUlURUV3WHhCcmtPbHozTXB3U29NNmVuN0xtaVhTcW5NcEJpQjVPYkVhVHZUaCtOMVNYN0x3YXdmcjlrMU41NXlNUmRzeU1MR3YveURJUjVIc2NkN0FMekN0KzlONC9NcGZXdlNzWUhvOEh6RndWQ2R6TEI4TnBWWnI4UU05QTMwSEhvcHcvbjRyTnpSZWNmU1lIR0ZBYWdCQ1NETVZRNUt6eExlMGV5SWIvbkk4STFBMlV4SmhnWktUVW1HUkE1TDVTWUpXVlptSnRmZDBTaHJSN3pRaEZBWXFnckFJa1FaQkZtVEdmZThoYnY5NVVvcHUzcFljZFBuWVcrYlBnLzc4VUlMOFNKRWh5ellZY28xOUpiK3FYRmVnWWZUZVNJbGU3b0pzQThoRGt5SVpnSDlTMWtvblRVU0xFTFN6QUJ5Y3pySnZKK1pQTWYvckxwbHQyVXpRY2tGeWFRejhoRW9vMDZXdUV3dmxVN2V5bHFJRnlFdjUzZy9aYTNNMGN4NFhXTFhPTTdLbCt0bm51L0oreHdkYi9iQWgwK0lDZkRwZjVnQTgvdlI3YVArOXExcWVTcEx6QTdJV1ptaFQrRERjRkhyL0N0QUVHRW1uTXdpUWZXa0JHQ3VaNUU4K1A2WkowVkx2YUpZUWZUaFQvWXNCQWF6Nm0rd1FCeFBQUGdsaHEvNFJlRCtPU0M4NjRLQXYzd05UQUJicm9WV1JMbXFtSUhFQ0VrdmtveUdPWDJXSWpma1FrTUhpUkhOakp1WEZYTzZxc2pRVFloTHEwREtPZkRCTmtUWHc1Q2JtOWtzeWtUdFE5R3lpc1FBcklJc0FoL0tDcVN3Z0hLOVJEQlJJZGw2bGllU2QzTXBuWFFmQ0xTdE5jb0NvSkpNKzJValhqM2pJbklmTEEzOG5lSGY4SlZKcnE1Q0RIRW8yVVBRLzY3enRhTDFvRTZ5YlJraUdjUWFlb3B3YU50NUptWUdLVTRHaDNKSXN0elRTazJXbW9mazArbFBKNklsNUpicjRLUmpwdmhjV0Qxb0pQRG9wRStjcnNkcmdiTHVnb256QXh2MXZKaytsNTNmQXZTUzhuY1NtSytNZ2NSdzVqL2pzOFBUVEM2eHc4eDZEcm16WVY2SFF6bE9CdzVuNlpvc0JPMGNHamRENTRsRHlJZU9sU2pBcUdzeWswdGt2UXdCWmc3VTRKelJQSkxQOFdJWGZ1bFpNb0d5aXFJWmxIcVJBRHlUbVZpbXUxZ0NrTno2cE1aQkhhUi85UlJoQVNuSllNOGxPcjVjbHZUNENRa2I1aDdwUGFYdDhQQ0pwMG84YmVMY3d4TW1HR2o0Mk5tZVd2dUdJVDc4enl4RXRUR0tmV2MwT2tBangwSjV5cUJiWXdkUEVBMWFrMTE4Qk1LUUxFamxVWXg5L1JFZzZkNEJvQW52akJWSktoVG1JeDdpL3NhZy9Tb0dTQXlwSlBibWc0T0hNaTdGSlpsem5Ya2l4ZE4vV2J3L3I2d3NHY3cwSDdMOTZaZWV3YkRVNUxvdWM1eWJXVWV6L2gyWVdVc1gvcndKVER1NjZJZXFKRWZ3ZUdYU21tZHh5YlIwK3htbzNBUnkxazVJbWljQUtpSkxFd0hPRE1tczJTbVhaMVQ2NzFoSlF3Y05Yd1c4UlorenhyeFdYbzB3T3hmVGNKT0IyQTlaYUNaVVVYU1JJczE3Z2xtZmQzdDRMWjljTnp0bkJsbVp6RXd3WHdoQ0tBekxjZ2ZabmhxZTJYSUpkOG5SekZBLzQ5M3RydEp6OS8yZnEzTFgzM3Zid2EvbzM2MGVIRysvM2tOcFBtVGltODdRNEgwQUFENy80MU9BWHU4dTNBY2FEUEZ0Y0FLYys1NUZIUFFTZEw3UVM3Qk9EeklNV1VqbExqOEJ5R3E1aDdXWUtjV3pBTElBK0UzRUJzYUw2NDRiOWNwU0p3QzBKZE9QeC9HM2pNQmpBNDhzUm9OWTVFTUFIemRaNnhmaVJXanQrYk9pNVFLaW1iQWFtcGNBRzg3cDR1VlFhbVkrNGpPQXMwaFd5WHNYQUVPZ05vTFlsZnVoaDhwY05ETXdDZFhEa0FMc3ZYbjZnUEllUW1JWUxuemNtYkxBZUJYNUFManNhS2xMZDByTE00dDNRdElJTEh5ZzhTaXdzaHh3T295V1V4TlpPcFNrKzdNTjdPWEQ2Q3d4eUVxclFMN1dNQzhDbkVGNlN3ODFzM214U1ZrRldXbXJlZVhvakVHS1NyQjVtYndRaElaZjZKYlQ3L3JmMWVlS0wyZHlEODh4NkdRblVRMW5NVU16M3YyaENUY0NFUUlxSlBCY3lPdlNhdCtuVklMRTZhMVFCKzNsUU15MTRlT1ZRdEVNcnZwamxHVmlTcjNJVndTNTRpM3pKOUk5aGZlUS9tMys5dUVVQUx3QndEZjcvK00vL3FPVGwxNlFpQTBwdmxFQkpnQU1SZTdnSnJiejFYUHBIRXhJVWlheGcvSHZDZmZPUEFDTWFRUlRaeFR5R3NDdW9ZbXNydUJpZ0ZEUDNVOC9ldU9QWTVET0k4SHFMRVJQbGZIR1JBb29jWk9CM3YyVkxyRHdVZWlYQldGMjZITXhyektreGNsV25IWG1aejVTWnFBRlZHakJsSFhMUkNqWnY2SUM4Z2NBS2FYNEdha0ZvVktHR1VoUW1tZWZJTnRwUUVWWkMvdWN0Y01vTWZSQTIxeUYrakFGaVV1VHV5bWg3ZEJEaUxMMGJFOXg2R3JtSURIZHdqQ1hnS0JjaDZ3c21lQ3Y0VXM4WjRXQ0oyczV1Y1BNek1HN2xjdDhVbzZwNlF3dXdQTWFsTVk5UmM2cW1Kc1gvMFd4cHJQWjMxMzlwcTFrMlQ4ekVHK1NwV3lXemg1Q1NoanVhNEl5K0dnb1FEMzJtY2xrMWl5WVJjaWRLWk00QXhjRGM4c3lNUkE0Zms1L2xIbWxMN21mRnhwM3crTXAvSllWSGkrUmk2ZFUzRVlBOEhjL3NlRTlBTjRKMEFkazN3NVh5TEJoUU5BSGw3cmtjdytCeDVBYWdUSkZaSkNGb1dRQ3h4c0FqUjB3R2JNU0NjWkdvaStnYTg0VXhqSkpjMFRoUDR0NmFkV2dXQ25RNEQwQXRtQW9ad2N5bVFFMjQxSDJJSE82WWE4R1FvakQ3T09lL3hRNFQ1eHo5L242Uk1LVWMzckpaTGZnd3hLWkZCTUFoa2h4MjVJSkFnNWxWYzZMMGRJdFZNUXdXNVdKb1c2WjVhM1NlYlBjMmp6M3M5ODJsTDZwRUVsdmVMT0szTFFDQWd6SlI4QlRnTDBvaHA0K1M1SERETWlURHBTRnlZWmNLUVdDUUo3Z29mRmhVSEk0ODVsRjEvcXl4RU95N0RPVExPMHpldGpNZWpGbDVUN0NpcUwvVElwQmRGMWxQWDMzV1N0L2J2UnVuM2YxRDJkWEdtYnlMclBRVDBMSEE1T2lBcHhDR0dwZU14NkNXNkVzRnBOQnJpNU4yYTJpQW5Jd2Zia0NqV3haUi9ESWN4L2hERlJGb2NPdEIwUUMrRldwck9lQTI5SkJ6QzFEWm5tdTQ0V1Z5L0FHQUErWitLUTUvc1kvL3U0bnZ2ZVBOd0RBb2JHZTBwYVk2NkE5UVBzSVVQdjIvV1dKS0tESkRNdU5zaXgyeHArOEY0YXlPdDhBU0EzZ013OURaUzdBSWlXSG5BbVlKWEl6UVlZRHd3OW02Y2N4U0lFRzZSa3Mydlp5VEplWVBRUlMraGtQUVJtUzdhOFB0SUJxOWJtbDBEb0V3OUl0YUZRYXdFUENEaDZLS1VBS1FPNHFXRW5nV2NBaGZaT2h6RDFWanY1UCs4d1NXVXRWR3JpK0FpaTBhS0EwbHo1SDRRa3lUSFBHTE1SbFNET2FHWUxueHZReHVwdzVJak5BbGpwM2gwQnFLQWNYaTh6QS9SRmxWbmJMaVlIeGNvN3ZXbmx1S09GV1paOGdYY1Awa2d6T0dxcTZmRHhkVWVrSktPNVJuR21YazAwcE1rUUtTY3NLZnF1aCs2eDA3eFhUQkRjTHp2UXpmdE4ySWN2T21VSDZQdW0xbENYQTZHd29YaUM2OVFmaU1sbzZLejJrcklmSWtrQmc3ZThwUVJrY3N0SVppUVU4U21kbkpCUHc2S1plc3FlQnFqdTR2bm5aOGxZNjFCMWZIbTZ6QmE1M3BpaVJkd0R0QWZDTmYvenhIK3gvLy8xMzdHa0N2YWU0SG9JMkhQK0FGeG9KZFJGdGdyUk42SXV1VElTaTVMdGhLNlRvOGVuNWkyVWFRSzI1cFdCTnNBQ3lXdTY0UjlQa0NUZXZFZEx4MFAvWFgzL3laekY4QTZBcXpHSVA3ckNEYjJVdHhJdlFUaHZ2cjBIREtNckR4K3FaQVQrYlZ4Q1hzcUFwM2FTUlF3WmxvbnIyS1lnRWNGNmVDNnQxaU03YXV5RkpNQUNoYUdBd0RJbGhTRUhJb2pPc3dXc0xpV0VJR2JQdTlpTi9nYU82VFMwNDc1YSt2bEdYdjBEMlVTaUR0ZGlqd0RrZERGWkdvY1VxU1pOTkZpR0tLY2ptMllyOWxMeGJMUVF2Q1pWOWV0c3d6eHFTa2kxV1F4cjVzRnVsdUlBaEYzZzB0NUZOeExpVnNMdUpYSUMxVzA1OGEvKzcvZVFPWDg3a0huWVkxSDFheHA1eitwcjNpc2dOTndJUkFuVHovWE1ocjB1M2ZaOVNDUkxubFVJZFhGNE8xTE9Icm5wSkxrQWFzTUlDRjJrZkxFSlovQVR6UXY5YjZiNmszbXIvdE04UGZLOFpQd0VBNzk5dXhqQ1hnSTgyQ0lncEE1YnpEbWE2VWpLWW1iaFNHZ2ZuVHdDOGhoVEtCNU5ucUtoeWcrYkkwaFUyQUw0TlFsbFBjUUFBUUFCSlJFRlVPZURwMFlxQ3hUazlYb2JCNE45VHBvSUx4b0dhUVRuOFB2YVB2OW9mWWVVL3ZkeE1xb05Ca3RHejVFM1V5dG1SOCt4RnlHVS9BK2VWTHJ2UUdTbFF5aUxKSXg2V0phOUdab0xScGcrekhyckpmRjlacHF6VHkyaEp5anlEbVg3R1o0ZDNZOHFXU3ZLSmxwN3dLVk5LVXYyc281SVJaSEZpNHNVQ2dYS0RHNGZoU2lrMW02UnFTWi9hVStUVkFJdUdXZVM2bWNrZGxGWXVjeFBIMUhURzVlMDFPRFNHY0VsZTBwWURwQy9qdThIWDh0bXROM1R2VmpjWGVvNUI0eUdSQjZBa09jdkxFY0pEUlA4N2pNMW5MRUxBNXhDWHI0dGNuNDY3R2hBdytRRVhvVnZpSFI5cUttWEZZWjU5c3ZqRTlNczdLUXRrMnpkaXdoSHpvZkFCMmxOcnZFWFB1MUkySkk3N3l2MzRnVDhBaXBNQ1QvLzRkak9lL25HcndiQ2ZKbncyYm9YNjR5RkJxbnMrOHlLRWJPd3ZWZGpZOVE3MjQ5UEgrRTkxdWU5VjNBeDJHQmJpSHA5aStvTERpZm4wWitqdkdPSXREb2JoR0lkaFdZa2tsZEp6cmdpQlFYTW5QNTdVRzYrKysrZWt3QnluNlk4UFdHWXNFdGNKYkd1YWE5eXR2bi80OFNlYS8vcjE0MS9mdi8zNTEvY1BILy9MZi9udDA1ZlArRHV0Ly9qK0Y5YnVTLzhWRGJnaEY5V3g4YSswQXJDbFpwZzJqN2EvbXo0MjhtTjArYXJRMFdRUHlnZEFQTEVZYWk1ZWs0RWNHQStKR2dwMEdWOFI5YnBJY003b1dxcnhOdDNpWkxycXp4R1h0NmRIYzdhTnJnU1lwdWw0dzluSG82cEhONGFZRXR3OGl5RXl6c3VOd0VOcUE2SGdIOFNoTHFOZTBSbGdWVkVpQmRqbkxJV1VxQ3o1bkhlVm9jNEhvSWw1N1hRajdMS1BtRnhyR0xldmtLbTA4eVYyc2JKVVNJeHlHU0x2TXZjUnp5d1B5ZWNLOG5xMDIwaXVQZ3d2b1hITE9hL2Zxem1zNE0vNzB6WHlhTVNKek5wUWRwZ3YrTXhJRERmY3hqbDg2S3lzTlFoOXpxcm5jak5sS0JmOHl5akpyT3pNTTRzZnF2ejZReTBtMTFuRHB6dmZkMWdyODNIM2c2WDJza2xtSU03a2VKaEg4TGlRcWRIOUxLVzBKOTJEdkY3NlVncmd3dFYzR011Mk0zbm1YcnQxM2ljU2VJVXlyeENMY2krWmdFY2RVeUNaQURRRGE4MWEzb1plaVlXK1VjTUVJSndHbytMcDRPVVVwWU9HRG9SVkJRd3U5VS9YWTRwbzNycXkzUlk0WVp3UXZFZU1QVU1jdGM2aEg2K1FmS0xubTRZbVFMUS82dk8rK2duUHh2ejAvOWV2WC9HUS9PZWY3ZCtld2lrS2FlK08rdjRuNmZrZ2hUMzhXNHZZc1JBbWdDUnN0RytERnU5YjU0K0tJUEFFMjJ4Ny9pRVlTNjBzZ3VadVBoUnp6OGFBQVlnSnVMLzhCTURUM2dpalN6WXg4OGNzdXFBZmd6N29hOWU2eFJ3NURVNFZlMnk0Z1B0S3R0WEMrNEgyenpQMG53VkFqWlhEdjhyUW8vM3RMNXp4UDY0Mjk5TW1Sc0NXM2t1UGNQRVY5ZEZWRWZocFZKdkRUbGM3bXZlZnhLS3JSV2pXNXlKbEVjcHVXVnd5U0h6SnlaQTljeWM3ekd2NXpHcTl4Qis1WVpVeUE4R3RFa2xjWG84bDJhYUlqc0pSWTQ4dGxxTHNscUVuOXVWa0Z6NHFKekFUUXhCbVVTcG5QaUdYTXBHYjVtWEZrdHczWEN0RG42eTFUaW43K2FWSVRrcHpDYjE1TklSZVBud1Y4Mnl5eWZTWDM4dTNPSlNvVjJhQjJmcUFaNWFVSitnWHRsWko1bUtVNjh4RFhQb3c2MVpvWDJ6S2MzTFdaeU83QmplOWR0OHp2YW11MERXT3Fjb01iWFdMNE5BdHl4UVg3R0JOaitMZ3lTajJrbzBIdm4zdmx1MjJlS0RFdXdBODAvWFAvbnhEQ0kvK3NLT20rNnZhOGNMaGl3RGxHRUoyckgvdmhuVE9aYXVENS9NdHVkTnFqRi84OWZZYmdONzE1U0grbU1mMVdnTHBpNGcrTXpOcm5vYUl0Z1hyRDlQSFd2ZFhabWFSeDc2OUFlZ2JOTmo2NzJTMG85VU9VaCsydDJPZkxqNnp1anM4U3NDdjlUWUFzekFFQ0NGcEJGUWlNOWxUNGxjRXFpdmc1b0gwSVRDVW5DQlRNZ05lS1FKQm5MTXk0ejZPNWNrVU9ydGd3ZXlFcEFsQWRaM1BKTHZ5SllJK3lIWTBaWldaVHpiTWpMY3g4eW1MTWhGN245Unovam1MREt4blZmTFZwQ2IzKzFGS0FFZjF3STZaNW01ZHFGeHZ3d1VMWE9hS3pJa3FzZERrTERKS2tjbE1tZmt5VnlUMHdHN3JvZXkyWUdTeWRwQ01wV21JYzBkWkUwRTd1N0NWTW9hNGw4REpuNGc1blhWWDYraTYrVm11bG5FbUNMWUxXUmtLWkJqU2ZKTXNaYlAySk03Z1ZsSDV5MGZNd3VlSjBNd2ZWck5ReVpma29wKzcrbUNsOUFBMHBENWtPYm1QZ3llSFRuWjgzQUh1VmtRdXJ3VmRFZml6UC9pWHY4RGoyUklrQzNFUGM0a0ZmQ0lpQ1JRNitlN1FYd3dWakFjNjVKNjZEVFRML2Z4Ly9yLy9wWC9QakhQREQ1Rm42bDRJQzRyNFpWbkJpd2xBUXpVSkpwTVc5V21mVmRBYm4wQzlGakM3aGFHT0JLM2FiMnlBK3Q0L1g0UWZwWXczYlN5OWFDRDQweTNyeFFoUXFUMTVqd29Ib0dISTFiQUVJVXREQVdiNWdXTElCY0lDeUhJOFRNNERzWWdxSkpEZEZCSmdDVmNxSktDb00wd1VRNkJoR1NVcE53ZTNRbGtzcHZRc3lkQ3FhL1pEVWdxc081Rk1RUG8xazZQZWNEWUplZzBGamhRL1FZZUxhNFFGcUFyREdkbGw1OWs3S2p6NFdwb3JaeDJsTE55T0Zyazdia3FmMlphQ1c4NXltSUhTVGFUQUxIM04zMG8zY1h0TkNKdEZqMGhtUWdxR081cWM5Um9NVHM3SDU2ZU9PL29VOXVvbDZZTG44RVBiMmJwNW9tTzFrY25NUUl4WGZUL0cwZ2pRTUF3WFpCbks2UXZtVm9qbHNNOVpaU2NMc2d5VnRpSVR3TWxEbThzK3ljNXVGZktFUUlZaGxHSUVsQzVHUUtFZG9KZUxrTzVENHI1dkY1Y05qd291RGljd0VoREZCaDRibi9VQjhKeUo1MlQ4OFI5Zy91My8vbUhMMHgvV3JnY21BeUE4YmpNSEo3NjV0TzNjdDl6ZUxQZTA2c1N4WTY3ellsd216S2pldW5DSVR6VGQvZ2xBY01SS09jTWgzQVVROWFIcmxSZ0FtK3ZrTVgxa2djVGdMR1pyaVNoNFZ1bEhCZUxqWDJlZ1ZjdlZpUk9LN1EzWlFLbGRoS0QzcUhBQUdFTHBIVXBRVnJ4Rmx1WXFwMElDQ00xU1dMZU1zbm1aVUNPOVQ0M2tyRXIyQ2JrcTRUNGhTeUZXS2FPYWhZQ3l4QWprMElMeG9wS1ZaT2xmZHJ2MllUUzdsVVZsQlgxZVcwU2RwT2RyK1pjK1hrS2xSWUpSbnlTRFJrT1paNGFoc0EreUVQVUdzck9pQ0sxOWdpMkdPZGVackpkL2tJV2hFc0dYS1NLbFhBUDNaNjRZdHlJSlJ0RzFiWTRHOHl3UW83cFdDM2ZPOHpVaFcyVkdicjg0bUhWdWM3K2NTM2VuNHo2ZVd5Mnl4eU9lK1pSOEpqT0RBaUw3b1QyZkFXTHRNWlorRU8zckpwbGxtWEczRU5WUVFEMklFYmdWdWl0V2xRV1FKOEJDcHRCYXoyZ1FhNWhCV2RSTGJHSTVTeTlHSUlmQU1KbzFFbE5EQVM0RVBPaGpqdzBNLy9nUEhpLzVETjJmTTF1ZTNLajB2ZHVDeDVDUCtKM0hxZDJlWjV1K3Y0amdod3BkUU9GNCt1Y0ZrSjVkRDVFWEdIZ1djdDd4ODI4QVdCRmVXZ0pPd0llanEvWXlTVjVBb1FCS0FjaG1ic3V0TEJ3UEhBeVlVd09BeDJreUxZV2YzcW9TNWJBSm1tODN6SHFFV0IwaDRRdzh1amJKMFZkaDFKSzdpUlJnTkF3OUJUaEV3M0F0OW1oSURFTXZwTkQvejk0WGFMbHRIRUZhc3EzOHhiMTc5LzkvNXlTT0hVdTZtaW1nVU9qdUdReEk3a3BLZ2pqWW11cnE2cDRCeUFXNEpFV0FQYUphZG5xU0RMeVVBaFJqRDBhblRjaktHbWVDdUhRT0dneFZUbFlqa2p6MllZSk1MSDFHb2R3YmxkaVhQaVU1U2JuckgvcjBjclNpUU1jRjRGYUppVml6bUlDUTdpMEorMEVST2ZFY2hVS3RVaGI4TlJUSVdRcTlVWi8wRCtZK3pDMU5tT3cyRXBmemNuRzJ1a3p4OU84S3EzTjA1YmhzOGxKUVpwVmtzQXJEbkxKeTNFdVRRSVloQzVIc1YwRmI1U3dMVEJpZWZQcXZERERTQ0d6dUZwb3d0MEtoaElZQ2N6ZkpCS2dmRGNVTEpQOTJLYVZvQmtuZmlDd1RJLzJsVENrQ25ydUlRMjRZeWlUd1lTalpDT0NzMW9hTFNXeDQ3UjhtSkptMWUrckNYUmtOVUNNS3c1M2NybHNnb2E3emNNYm5DdkNkUDBkSC9Pekxuclh4WVhpb0YxQXJaNDJ4LzlzM0FOMGlYdlNqK3I0Y1I2T1h6S2huZG9sMHRidmh6c2lXd0c4QWhISEEycjhNME4rcXhkN29JTU5SNlV0KzZ5VHAyRXpvWEdJQjVXVUdvWkpVeWpNZ08yY21OK0FhWUFoOEFUT1RIZFN6eEFJNUpDYjRJQ1V2N0VoTVhpa3V1d3hsOFNRbGx5aW41aXNHdDZ3aEdXVHFKRmRSU3dESXlvYVptWlM0RkdkQlpsYjhjeFlaM05adklKMWRrNFB1eTVXZEovMGd4RTFGZCtMMHMvU1VZaDZWckFTcXF5bUlLZldMc2pMM0xmcjBmb1JSZlQ2THNqMlFjcmhNbDFLMXlDaFJnc3dveFNzQys2WXNKNzhoRHJNck8zbW01MUZ1WHNheXRNaVJEd1U1K2hnRHQ1VkVkU1dnckFuSTRnbnpURWc5eUVTZ0RKVWtVbTd4SS9ISTU2NmVVMUNXZ1B5ZG9WaDdoSFMraVZ3SHdabERKenUyYStyeDBubFJ0S1FORG5qdEh4cytBQUFOdmlRVEY1a2dzV0hJSHhBelhWa0FDSWxIbE5qM2pkejRwbXhiZDJsZmhJbXQrYmNTWGRWLzdpYmI0T2FQM2Y1NHlxVkIvSkxSbTdhRlhKV0tXS2N1QlV4MEdUQTNocmo2d0ZwbE1TUXh4RDBBU1NTS2RCbXRIdDdES3J0bEp2dlBOZk5vZHJ2THVML2prYytLaHJsQmlXRmdJTXRNcnJ1aVVkWkVQQWtwUFlCSnlpUVVUTUlRaVRsM2hYbk1KMlRsWVcrSHp5eEg4SUYranVReld2US9KMjJqMElhR0FtWFcyNUZlRjlpSEtKcVpXNTBFdDNudXVqaDNSV2EwbjlmbE5DODFEd3VlbjVkS1p5dE9XUUtDaDljaCtMekRzSnlSNnVhb1FzK0RiSDUzM2FqM1RqS0RhRm5JczRoWFpLVi90aG94S3lXVW04VXJJV2tDS04xS01pUnl1S0owamVQU0VLUnJISS8wbWIvTXVoUmt6d2x6NlhZcG9Ea3ZGNEVCa0lMTFNGejk0N3Yvc1FmSk53V1ZWa3AwSHllSnRlZmxQbGE2TS9pb2F2dWwzTDZ0UnBmOEI2TGxzM3R2Umw2My93S2d6QkhRNnJDZWhnSklEQ0V3aWdyUW4wUG9jU1N3YjkvdkEycmZvQUdQZXpJNGd0czA3Zk8rN2I0TmZ3WDQ5WmRmZjhhL0V2Q2hmWUVyQkRoKzJLc2MyL0JtSExjRzBoY0NOdEkydWpITDZOWmp0T3Boa1FETTlTejM4YWp6MUdmR2ZUSjJ2WHAyVWltcXE2Z1lhVVlnSzFWTEthNVJDVVVCU2xJK0FCUUVtWGo1UXlBU3R1U1pKWTNxeWkySHBIR1FmY2pJUitJUm8wSVNrQWs4b3M0UUswVlZYRU5TREliVU82UEVSWkJ6eVhnbm1jbm0wSGdLQk51ckhOdkxIOGZ6UUpUMWg2ME0zU2ZNVG9uc1J5a3ZBU3R6WktHVjZpdHV3VWREZ1hKZU9kcWVKS3N0SzdNcWFQSUtnd21hYktLc0VMcE1EUHJ6RUtmVFFkQXFGRnIwSDhtQzIxSHNqWkg2RVdEQk1GenNZajNMbFk1SDYrQ2FlVE4wa0Y1QVdTUEdYNjZRUnVBeW5ZS2dIdzNGQzhnZlFLU0FvbVJHdk9jeXhaV09jelNVMEJEQUU0VW53Rk1va3ppSFZBZ0h6bVhpQ1JRU2tKVXpJUXZEMFJuRkVIUGxJTERTRE1TN1BuYXVvcnRnVzhPZTBTL0I4VzN5K09hWS9RTUF1UFRIbTMrdzRZdi8wUml1TUpuSWZYZkRybTArSTBUMWZNc1FvaUNCMnhYc3NZSHAzMUtKSDNoK2J2L21CWDdQOWZQZFZZZitRSzNreWFxRk11TWtHNUFGeGZWdkJZbmVEYlRaOUcyOUl1UkJIQmhNV0FlTUlUQWhCY09TekxJSlV6cXNrOEc1VEZ6WHJLVFRiYTZjUjBNLzgrSElhc1EvNWpiUG1rZHpKeVdUeVdDYkJTWGpwT1BnaHFGSEhXZmxMU1pibFV3bUY2dE1FaWVoYkQ0Ukt5VEE5RHdFazdkY3EyU1lHRUlnQTdNK3pJYVpHYms5VTNmaytRQ2YyOGhNdGwzUjVLekFaQk13Z2N4TU1QbUJobUZxRDNTZVZ5TXpwVzBvemF6bjk2aFZOaERLVVJZYXl4b0pKaUZwQkc2SlF4WnljM3BtbEhVSkZuT3pMRE9vVlpMcVlSNlZUSUQ2bFN6WE9KYVZ3RHhLMllwR2hnQjM5WjRyckt0SFhJdTN5L0dmZnNMYnlMSEJYQ0dLVlM2SEtBaDZEaFBKNi9YMnZuK0V0bi90d2k5cDIrMkF1bnNRaEtMWjVmVi9BY2cxSmd6NzA0Sm1wUVJ0aWZycjhWb2lydjU4aVhBRGdFUDRjNy9Ob25sNXpOUkFqakxrNjVnWk9PZkVQQmRucEJjb295UlhOSjZlY2VrZzJUd3FHVUJXZ2dGL2QzMUtIei9XcXBXVkRHR1A3Zm02OU1FK0Y4cFRtNGdub1ltUHNqTEkvVWpqSWNjUWxMV0NoajZaSE9XcXJvTndzRHcwOHM4YU1ia1pEd0hyUUh1VHloSmdGaldlSmJkTFVPWm1Vc3lsWVNsZ3VpWlZhZ0w1a29yQjgrRmg3bi9VbnM5UkdpZnY5cEJMd3lHVHFoWDg3NVllK1FUYnR4NitwSTBWazZ3aGMzZmRSZ3NTL01PUVdabk1qUHVYMFpKRVZ1YkZaS0FxQ29raEVDOGdnUmdCaFFSeTZBRkdLUm1nMEpuY3JwNUU1azRVSXRCUXl1VHBrYU9jc3pEaCtaUGR4R1RnRHNKWkprYWFod0dheFBieEl6NDkydDdvajVmL3NlRWFrdmNEYnF1aTBJUHZlYm95UFlTTVVyQ3p1bUp0U2J6Nnh6dFk4R0sxZnh5dXZmZGtUK0JQV1ozcDJXZ2w1VnZlQUtBL3JhUG1vYVk5UkdYYlM5Y1hQV3NRQjhtL0RRQjgrZHB1QVBBQmF4N0NIbXBGV1VYQVhMY3pXRzB3bEpWZ0VITFpDck8zZHpxNE1oZklzbXllTldDNGpjU0llc01ZcXFMQVp0Ri9QT0NqOUp5YkdXL0FzWnBoaWc5SC9YdGRha1paOUF3K1RGZUszTHdySjhsai83eFBzTW85ZU1PS0NvUjBEQmNaeW5MLzd0ek5MbmJlWHBDT3JNcVVRSElJUXgxTm12c1FXQ1drVndwQUowK1BOWnJzSVkwS0lFTmZJcExPRkptZFV2cElBRjRhVHFSVXNwYVVwZVk5U1YrQmxhNWNvM1Z6OG03ejV3WFpudXBwSWxzVnl1YlM1RkRKVEt4Sy9jdkp1dzNuQmtxSGtneTVybkVjWkE4TXMxdko4TmU5LzlJdlphR0JpV1lsRkRSaDZMVldRa0dqb1lBTU00T1FTSUdSbm9Jc285NTU0UXhHNXJjNkNSVlpSYlVtSmJ5S1pIT1FiZWY2VVZRUGM0RCszVEVmK05aLzNBQ2dCRWhzQU5qY2dUd1lBdTNKVU9rYU1IREExV2tuc1cvWHBmc2ZBTXg1aDVBQllrOHI3VE9qa01DS0J1SnZlUVBndllhVlJhaE5mbDhJRFVGcU1mcFN0czhHeUVlQWJsQUNRTkEvUHFDOHBtS3VBK1VTU0NCKzh6enF0OGlLakluMHNmWmJMa2d5OGhHZ3VRUk05NVRBREVLblg1RDA5QjZjWWVtQlR6d0xLV1lQb1pOQXpzdDVBd0dYUGl0MXBjbEFucU1RZUdoR1BTdGQ0R0dmWElnTW5FZWVMRHFLaXZmZWdIMHVMREZudkFGWlhRSlZGMkNLS2dySWlnejZFd01RMHNsZ3I1N2RoK0xOSjJsb3EwUU9ML2R5VTlFNU16TDBySkZHdlVFc0hNVFpKek1ocFJ3K2xwV3QyS2ZjMUxhWVVRcDQxeWd4NitjTVRaUmVlam9aM0pRWStORndZalZLZVF2K0pXMDhac0tzdStzMldnVHZ3YkgwejVBNVY0ekFyVUk1YTU2TzZBTXBaZGJJSi9OaUhQQjRpY2x0S3lSUXRzRkVhVExJenU0anZXVEJzQndHY1I2T2JMTnl4R0I5YUlJOTE4cjN1R1Rzci82M2wvL3BvSW9FRlBmZk9lMzNGNGJhT0dRV3lBekFnVytYL3R6MjEvcTNFdnRyLzh6bG5pYnVMQ2FEa0RMUCttWTNBT2hTYStvdEJqSU9iYnJ1UU95TVBIRUlQMy9lVnR5eWowc05sRkFpZ0RTdGRQb1FNTVhTQUxCRFR4eVJ5c29tVEtGSmlJWmhhUzROQUFUZXpJaGhNNjZVczRCSFJ6NnVZV0ptd0R2cDNaSVhBeVczQ1pORFNBbGtHRktBZldpRERNU2pFSGh1MGdqc2tlTUVtSVN5T05oS0lENnNURGFIRW1TWWtRK0RsVXBrcXhWRzZiSUY4SEl5RVZBS0dFMW5sT1ZpWVlucEdZYnc5RnBCUXhPUjdybUkzVHk0K2NRWDNlU2czSlhlSkZaNkFJdlZnODlpVnBhRk5WbVpnalRlZzhoY1lzN1FaRS9ISS9kNENPeGtNL0JhYnVnYTUwZDQ1RFBTdjV5LzIzQm9vRXdIZVRtdmtCaUdvY3JkWVhZcm1mYThqQU84dTJmTkh0bWVoRFVrV05kbjVZakpQR3FKRkFpZHVDYUV5cFJNWGpJVXVFejRESTRybk5EVldkYmFCSVB6SlBNK0JVVkZpaEZRaUo0K2RFWjZnYURrVUZFSGwrZHphUlZJbUdERGk4YTQrc2YzZnZLYmY4QkF4bHJZWXlQVHBQdDd5enMrWGV1RG9ibENaUHJWZjN0MndzWVBCRk1IMjZiWHViNE5OaE5aRVV6MnNQVm9HSHFJK0p2ZEFMQTgrOXNtbjd2Ym44ZTU2RmdpNkRVL0hRblBRNXh1TGRvL3lZRS9BZUJkUUx6ZmdyTE1Za29aWmNqS2JxZUNNMldpZHlXY3EyY211NjFvVktJRXBZT1U4NmhrQUZrSkJyeXZSbVp5WXVsREU0VUlOQXh0Y1BoOFhkbm1RbUFRRFNWQ2swb1hXUFNSZmdTeWo1VHpFR1RlTTRhbFBwTmdRaTRaMVhYd3dEcDRlc0M1R1FsQ1Z6NVVsZ0N6WENPZlJjQmNpTFdHbVVGVTVLS3R5NVNyRWg2ZFlDVk9OS1BRS1BkdUQvU25tK2V1K09lc1ViY1RQcHVvOU4xK0psVVVrcm1ZYndXZTcyVEZvZFNBOUxWOVpnV0NmeGpTT1pPWjhSN0thRW1XL2xJS3VIbVpJb0ZTQkZaQ1dmTU1vOUlDY0JNK2crM3FTV1N1cXhDQmhsSzZ1VWpKQkJTaW51ZFBqb3JKd0IyRXMweU1OSGNCSEk3WDR6OTgrUHo1QzY3K3NiV1BqL1ovREJndklyT0thbUU2MmxBT21Ic0NOYUNoZzM0UDBHOGR3T0pYTHE1WWVlRy92L2JmclpvSGxPMVhjdC9rc0JQWFAxZFM3dDRBNlBMN3V2eGpDamF0aGFaSld5Z2NKSHdaS0o2SnpMZXQzajZrUmlNQTNHSmgvNlU5RnI1K3hsYzc0Wk1BWFkzaFpHbm0wZDEvNmVmRXlrT09SNzRyR3VXVzRuWHlBUitsdkJhZ1p4aVduVjhXR21XTitFdERFNngzcGRQVHNoT2N0K1JSeDdRQmd4VUs1M01wQzVyVVJVbGM5NTlybFVaT0hpbG1mNUF1M1hHSWhpRlVZTEQzT1dabU4ycy9HWFZHdUJsVloxMDJ0UGFWdllHSnY2VFFlTVBpUzdCaXlFVDJYNW9FY3RKL1VQcFEvdDYvU0ZmQ24yMzdOTmNuY3JJNlh2bHB0SlZ1UmFnMDBsT2Z4K1hrU3R1N0s3cXFmMnpSdk1YZ0VJYXVkTHdvODVSMVhKcG5zbVQ4ak1vVmM0bzBJUlNHbEFVeURHVzFBbkt1R0lFVkgybk9XWHk1ODNRV1VUQmZIN3FkclZUaEFuaVc0ejJOelJ3UEdXa0VkdVVEUHcvYnhXUjBzNTZ6dGY0VjMvK0RyLy8vakJLOGh1VHZsdDQvSmRoamdkdDdlS1RaRjV4TTNMUGJQVzM3UGNXUHREYmJKZzhicUtQeDNUeG9YakQ4QmRWYkEvMGZJdVowTURkT2VHQmZORHRRenVqMnFlZitQSTU5dTlIcEpZSGJkNkcyaldmMnNRUWJ5eDk5anhRdUtFYkEzSHFrZGRnKysvdmh5eSs0Z2Z2NDhmTm4vRU51K0RESFQ1OCtmZnJhNytvK2Z2alkzeHJVYnV6d3I3dmhQZy82bnR0MmV5OGRkNVp6UGgrR3VBN000ajJibFBEdkJ0c09QQmhHR1JKbUNEb3h6T0VRMlBXYm5mMElVUTZScE4rYjhyR2tCcUVNcFNXWXBBVE5YbTVySGxFc3I5SUpXRWlKU2lHRFczQ0ZCT1FnSmdDWlNFbkdLenJEZEdma2dCQ3dmQVFrMkpuamdDNzRRTHlkSjI2dVdleWUyOEVWRDRDUVVnVFVwSlZ1L2Rodzh5QkRIMUppUkdZR0laRzl0Nk4vWlFVMzd4TWgzRzlUMEhpN00rR0xITjJ6eFkvWFBIU0M3cVdsb1kvMmJFeFJERnVKL1pDSmx6NHpDazBBbmhFVTFWS0FLZDBnTGM1YTVWOEI5L1JhVjNtemVQbkxaSlRRcG1yekhjbE9mSDlWUll4bHgrZkQ1dDNPZmhacGU5OTg3czc3T3JqR2VkZWp5Rm5XZ3M2Y3hiZW4yODdvR3h1YStYa3VQMCtrcjlEK2tKa25LbnAyYUhSbUpINFZlRzJKN0ZZeWJYWDZGdWJJNDF1bWhQbEtRNkNoWkdJRUdQTGhYZXpkZW01Mm5qT2U2OWl6T3ErSFhnTllISkRoZ1NtWkFoblFsdW5FMm1leEdHaUkrMzUveWJvOXEyOFBlUjRzeUxwemZqUkpwdE80TWZJUGdHNGcyYWVpdU41UXR3NGc0K3F3RFBWYlZsOGpSSEh0d2NzUDhQam5vMzc3K3o5Ky8vMTNYQlBpeWhDMjNmbjRyR24zdys1amY2YkZ6d2F3d1oraC9zYWUweFE2L3hPK1dxZ3RRcHRiYTVEdi8ya2pEQnVqU0YrbzVnWm5lalk5TjFydG94a1pOQmdpbCtuY2s4RmZBRkNZL3pYRy9zc09yMmZRaWc1aGNLOUNiYW5hT3JVRmE5K2ZpcnNGRE52cXBZMlQzUDV5MDM5cFFZc2J1NTgvdGlmb2ZsRGJpdkRBYzVnOElvRldhWXZBdU8yVzVjcm9jaFVOK3JuVnVqajRoR0h3NFhCRlV5WStRSzdVV3RHTU9zKzVZQ0RXQVYzcnVTV2RMNEZ3K2xVKy9UVHRaeXVpSEJRVmNsZUZxRk1EWlQvMytVcENleUFjNTZkOFNyTG9LUGZZSGxydC8rcC8wSU5LRlNDa2hDRVNTZ2I4NkxpTTlLenRXVkJPZktnUCs3NmEvWENHZ0EyOWdkUHFtT1lkSUdjWENxMzA3eW50bU9NVGFVNU5NVThGVnBrS3QrQmtmY3IrZzZjdk5mWGw4VzBQU2J1TmhFay84c0hzc1NFZVVBOGsxam43bEUvUm5YeWd5cGJ5dk1QanRlOW41bTR6QTFjbkhhdGdKbGNZcGErRGJIdVpPMG1aaEdSN1UzTTZuV0NTMHpNenFUVVJLOHRCMHJNZjBLUG5pY0J2UTlPVGthd0JpNTZ3ZDNJTHk1QlBIUmoydTRDUC8vam5QL2xhY0hoS29ibVR3TGgrMUMvSExiUWREZnhvYlpOc3V2NDgwdmJ0R3ZMR1U2NVBhaXZoMUY3aXpOMFkzWDBMMEEzclcxTE1UWWRFaVprTURJWnRwYXRUVGJkMGNPdXFKc09oeGF2OTdkdEIrNlU4TkRURURRQTFLaDBBOVlHY0Q4dVVUSXJKWU82UHFGSmNXWkl1RUpZeWc2d1JFNEJ5eVdNSU1GL000S0NockRLWWFCZ2ExWlVWWktYR0JhN0o0czYwSyt3Y1lxTFBldE9jSCtrZ1hhUE9NOGxRc0ZWNkJxVmVaQVp5VUFnTXNIZlNtTWExVFR4bEpIMWZHaXJyVXVrbEtCNFZnaWREQktHRVFxbzQ4cEhnR3dMMEZ2clB6WHh2L2FPZi9hVEl6WlpNTFI5Tm5QYUtobW9ocW5valhvSW53UGE3Zk0yaCtDMVdKb1o1bFpwTDhobVRaM0l2RzFzVWxEMEVjajVrb2FBQmVZdkpZdlgvUU9odVN0Q0hZVG5CVWxNcXk2VVlrWFRJUGlxWGdWSVV5dW5yREpUclBsVGlpU0trc0J5ZlFDWlBWY2lDeGpjbTRoLzk3VzhlYVJIMkk2V2NtY1VoOWxRU05IeCtQYUtKSmUxaWpNOWNDNFBKRThreWM5cXlBcU5oeU0xRGx2djJOd0RsekgwYWszWGhBZWJjZUp3a2RsTDRNNjcwOGM4NjlBTWdFaW5ZT0ZUZEVWaFh3bUVpOXBCd0Jtd0RQSUFhOWxZOXBKN2xJeWI3aUhFM2tOa3dNeXUyUWJNNHpKM242bUlFWk83cGppVUF5UHpFSjR0bGxVT2xEL1Mrd2xrVFdwSnRCa0hKVHJyaDZlek5KVEpESyt5OXQ5TGZxcHpFdVQweTRwbElUK3k5VU5aUTVocWxCNkJjbFF2bXRHTFdpbUh3WHhtaU5HUTBKMTdKa3NhN2Npc0ovaHZBZk4zbXk2SmNyS1FyeFdNQmZaR2ZXVS8zWFBBNVBSS3ovcVpiTm9oWFNGQTg3MW1VZVV1cWJEaVFIT0poTm5xVUJmMW9IYktNTXhNdk1PZmRQNlRNUTdSMXpTS2pLZ0pNRE1PSlcxbFUrakthemNWa01IT3dhMTRsVGtxWEd1bm4wZkJJZDNGL2ZwRE5DU2lMTC93akM5Zjl1RGpFOS85QWgvZi9nQWZKVFdJQTM2REVrSHVDL2VyL2VCNW9yekVmRy8vZ2V2MmFDREs4M1RCVTNWSXpGeXRLOE0xdUFGZ2U2NnM1a09HOE0rK01wMERQRU5LbEFlRHhneEw0cU5YZTQvWFhMejkveEx1N0VNTHhabFJpT1R0UWVnQ3VFVlk1TWhnQ3NMZVE3a3JISWRHZFpVV1FRNGs1RmllRlRtZFlhQ0FNa1F0R0RnNDRLUXFFWGZBWURnMkVvWHVHRVB2MFRrckdCWFFMUGlxUjB6MjA0cE1kNW93NnlXQlVXa29YQUh0N3VTZ0VsNG1lUmV3bDZDK1RKbWgvNUR3ZWNXcEFKTk9iOHR4ZTJZeHFPVkN1UE1sSTQwVkZyb0Q2Rk8rWktpcWZ6Q2cwQnpreDlEOVBmMjMwVm1tdXoyU1ZxdDVxdVk1UlNQSEZHZldtWEFpSXBmUlFjSDVvQ1A5N2VlcGtrcmFpbWFRejlLVEprK21YN2EwSXloNENpYUZPSUlPSC9UcDV1VzZsVmNnS0dnMEYxSmtZZ1J3YU1Vb1JnTkl4RXp2VFR0QkJTUFlOVUROUzRvR2pVQVl5VWtpR0Nad2VNSzZueVlSUkNFQTRsQTZQZDBVRmZDSWlNK0FsSDhUWWdISDFqMHYvZi8zclgxQmlpQTE4YUtOck56MStRT243TnNTN2d4dmZucFMyZU5mMFlXTTYzU1BXRU1nODJXeXVqR2FVTnBFQ2xJUmh5RVAwbTkwQWVDdm9JeXhCWmlEZ1pCZ2lidGNiUlB2NUxWc2FNc3R6Y1FQdzhRTSsrdHpjc0NkUVZnbWtjVkFxUWVMb1FOYkJjWnlZNk9sNy85dWs1Q1lObVd3MVVvTFA0dTdXTWdhaDFtSFhuRUJMcUZMSVQvYXltbWhHSWVWbXdCVHdBUHZSUHRrbzVjVGExTUFIVGVrV05PNm1VQWRIWk4xSERrck91V1J5dDg3SXB3T1pGWWVZV2RqN29vMkt1c2JMc1lBYW04c285blIxU3hKN2QxaHNScmJaV1E2NUVMTzhuUHVNTUh4MHdlRWErcWljaHg3RDN2QUREbVdiN0x6c2YxU2krbTB5MHI2U0wvdFhBVVYxK0h5NUZKWGVaU0pmQVc2dFpTdW9Uc3JxdWZQTWxJa1Q4bm1IaWZuTFEyVzNtU1NEMWZmSG5UY3pTcm1ya1Q0Yk1qVGlFVjBKQlUwWWxpV2tFY2kxOWxDOGNNcktza1NXN1liSHBNUmtzVE9TZFhDNjVtRnAzMHNzVWt3RzFJZ3ZoL0p4Z0hNbVpIbVVtT2NWOXRnZ3htVWgzdnlER3dCODhqZGMvVU9BbEM0ODdUYWYvaTdmRm9Da1VieWk2MmZ1ZnZiMmREbzBOWlRNMWI1bDJ4YUdpcFI4U1RJbGhEQWt3ejAxMy9nR0FLM3dVQW40YkZlTzRxV0dBdXg1Vy9jWlgrL1V2aURvQTcvaGxXdUJQd1VRcUhvQVNKOExnaDdETWlXVFlqTElub0ZSaXZNbDZRSmhLVFBJR2pGekFDc0k3cTRWUFhNYllsUTBNOHIxdXFVTXBHdUFzMHdhQWZwVHpJZDNHUXBUM2pUbmh6cklJQ3Q3VU1VUVZYb0dTbEZJVEFteURBeVUzbDVqOEw5eno1UUZKWVpCVmpJZ1M1NmVzVFRWMVY1NkZTVWdqNHdWSzlkVVJkNkRVLytUWXByVVJQT2VJZlRUVHBRYld5MGZyWDlZRTY4bW5ITVp5dnlOTmw4a1ZaTnp2MFhaMjVtOHBJRjVlNWZSc29kQVl1Z24wSG0wVmNqa0xTYUwxZmxyUTZWYklNT1FuUVF5RE5VdFFCa3F5ZEpaVnA0aUxDQ1pRQWlGSVdRclRDbGppWnl1MG56VUI4Rk9TbFVBWGVqajZoL2Yrbzg5VFBaRS9QTlJiZU1RZS9vRGNKUGRka0hmWG9ubWZ5Q2FTZjlUQUZRTm55L3ZsWG9DRUlVcElIeVpPUkdFVUI2eTNEUGZZbmVhd0ZzTVF0TmFvTUJ6R0VpSjBaZ3dOVGl1Zkw4WGhqZ0pJQUR6RnYwLzdLbUc2UkNHYmpzSnVlelNKNHNYR1RTUWU4ak1vdHU2ckpmMVh3MHROZGZOVENpeDZCT3k4bkRSNTdJZk9hOHJsVElDcFZWSmxnNVFUc1NURU4wdUJXWFJSYkkwTDhsRnd4WFpDLzFmYUxYUytRK2h3WnJNbDJVVUhmSFB6THExY21kYnFRVy9GZGxjOHhLVGVZazNqWmI5bDZUYUtLT1pYR0VtbmtpbkEvZFNPbmdzNUE3RUV4K0pWelFUdHpLOUpGWFJRYWtzU1dYTm81S3RnRXNyWGZVQkNNczVNd3JCR1ZGYy9nSHczLzNGUlNCZUZJWUFqQzRSTVd5K2RnbFAzRG51RHN1TzJrTjdmejJmdHhQNEtyMzJsWlg4UjZqMkc0T21EYlBMVmJyaHR2TW9xY3hJdng3NitmLzkzLytEK2VQdWh6bGNoZENaZkZjQWZMaUZMbmU2L1hRZmlYZHdSTDJOUGRwU3lUZWZ6b0pwZUQ5VXJtenFuU2ZHTWU3SHQxM3g4Nk1lekdVMDd6MDZ3c2hpMGJZM2kvTm9hNUppcWFRaDBKQ0NNRlJXTUFuRGMxWS9JMDk5TlJ2WEVQdStLZmJObGVUQWFOdFYyMC93Ukx5emtqNkFQS1FoZWV6bEl5YVFMaGpoa0VJclA2bUN3SDBrbHQ2aWJVbkZVMmxSYi80NEhWekFGT3d6U1FaN2dxdzg4K2lpdjFBdlhXOHM5SWFnbUhONlM4dk1ZZFl2VlByTEdjZEV5cFREWkQ4QlpIS0Vka3JOWEZqdCt0SFA0QnlHTk4vL0RjZVJ4NG52MHoweG80RlBJV2pZUmhiazlwQW9NdXVEN2ZMd2RLVG1XVjI2UG1sK0tkUmRmLzA2blBkeUhkVmFTWm9aaFY0RXNEakgrcnlxM0RQSEdybmNYalRCYUFQelNEMDNEb3RXK21lU0RGcGgra2pncldVTm9wa01UQmdxSmZNS2xVV3pua3ptM1NkSE04TnlKZCtQVlhzODVpaVpFZStlRTQySFJvYTAydmQ0R2J0RFByTXNuRXVqRWp6dU9ua0F1TzJGaXA5dXRjdmJKVDR3UWg0RmlaZUFmLzMxVndDODdlZTMzMzdEKzMrQThkRlF0Qzh4RWxHR2U3MWhSTTRNZFg5OGJJQjBFL01Tbjc4R0VmMFovK1lVd2kyQ0x3MDkvcElnWjg2ays5RGsyQ1BFdGtreFJUZzQwQWZSQURqa3BGQUZReTBGcnZ5LzhWdUEyRnpZWXc1cU1ZUTRMQVVsbWRPMW9BQzQyMEVXdDNsRitrQURjZlpjWkZiU2d5WU12ZEFrNURMaUZmR0s1clZ1NnhYempKeDVINTlleGNzT2NkbFBTWTRzSnVKSmFPVG1mRTRIQThIa3hDNVRnbDRtQWlxYUdZV2VCS0d4TUlRNVM1ZFZ5aEIvZVhFZnNzSjhGYVdQUjhsZzc2U2FDYVI4L2djdVY2QmMwckNlK1hCYzJsNEo4SVMvblJHNWdaUjcvZHVCSGFiRVo0azNzbjIycmY0WURNY29lT2JPblFFT2o4ZEVOTDlGc3BSNVB4TkJEbVZHVnBlaFVwREp6SnhMMUZkS2s2eHp1a1lGY0JQSGhmUTdwdEE1bThkSktBQ01xMy9zK1U0UVhCYnpYNE50bXVVM2cwRGM1NzJkbmh6dWozK1FqV2pmQ2RyKzNhQkc3NkhyeGRxZHI1WFBLNzdIR3dETkNndkJZelpoRkFMZ3dubEtkbWdYL1hzT0RqOGc3KzA4YTQ4WFB5RlRGUUtLbU80TWVJbURVY21YNU1Ra2VQcXd0QXBrR0RJZEpJRlBoS1F6MEpUcDNvTnJKQmFRVW93QVF4Z0NyQmRWdXNDaVR5akVJWE5EZFpEWlBHdFVkeFNpNEZJV2FubFd4bG5NaVhnUFlnVGNoNlF6RGU5ZmFaeFRwSThsK3ROaXFZL0tmbnhMSlNxN09IWmxZNlM3TXJ0UkcyUm1zQXF6c3pPTzVUZ2lWeG9PSmhyT3dmWnJaeTU2TG9wSmJjOFJxejQzNVFOYkxscGVVcldUVjNYZ2RKYytQUkZwOGw3dTdLaGZMeWRhZllyTmpFTGZFTHlxSzE4ZmVUckpPU3FrS1dkbUhzcjZ6TUFoa0dFNGFtWlN1blI0d0dlUzhrQUpwUWhNcG9EUW9telVaRTVYdWZjSCtlemlCTkVrKzZRQWUyeTQ2TWZiWHZEeVB6WmNFMklJVGZzWVFPKzdaNXdlK0VoQnBLZHVPdzE3UnR2WmEvOWR3dzhEOE9xL3BaOE1sVVZuRFRPUVFBRHRDVXVmR1lVbTREdTlBY0JrZE13SXdod2tBTzh6VnhiMVlhVXc3RXhMQWNDQlp6cS9GVFNVa0FNMWlpS1JqTUE1ZERvMlFZTWh1ODNnYkJJbjVYTXNsVEprZEs4cmJRTlpFNXFST2lpWmk3MjN3UkpLS2NHNkQ1eHBtRXVVekVROENhbkpvQWxEeWtDeXRBRDRqbVd6UFlFT205OHZvR1VJNE5PaFlTYWxEMkx4T1dVK0JTYjYzaWZsZk1CdVMweUJHaE1wUmc0aDVGYlVnR0dXUU00VjQ4QnJxUW9FY2pQeGRrR1dxNXRtRmVZK1BWT2RoUFo4Q0gzdVJJbnU5ai9zSytDTDVzdWx0UlVweHRPZndPMzg0WFcvTyt0T0lEbnpFaUxSUnFoVjQxYmhNN21yTlY2aDh6NjFiazQ2VnNHSHlZY1Q1NlVSWFhlbVZha2YrVXhTWHVWVGxyZzBsMENBUG5MRE1WWG9ETGJuVzllL0VPdGNDcDdxUVR5WndDTmREdnplVDN6OEZ3eHZBTnFydy8xT1FDWUVURkdpU0RFQW5IYi9pV2NBdk9rZkJOWUl1OTJNNFB6MHNPZHRtakFFU3lienUra3dNUWhHdysvMEJnRHRZczQ4ZUFSaHVBdTJlV21CQ0pBWXNzcjU4d1lBZTRKU1E1S0dwU0NIMUxiMHJoR2VBQ1FxcWdZQWZCSGNmQnJhcnJHQ2o0YStZdklFUUFQWU15bytkQ1grRW9URU1QVDBIQUlEZ1hjaWpZQTdFT2RRNlVPeEZrRStZZ0tBb1BUSk1yVUJ3T2lJb1dmcG9Gb0NOR0VLZW5Gbjl6bkxUZzE0U09uMFYyZ0QrdzJNb3FWZW5iY3NlNEp6Y1ltOVhKNmdSd09HV0lZZXluMTZGSGlVR0dTVFllaFRGWkdpbHB3Y0ZRMmRoQlExTU9KVlMwb0M2TzBJaEdBNXZDSHZVdjFDSzkzZWx0VGtOSDB4S0V6U21WZDE4eGJPciszelZXNnY4dEhoQUhEUDBVcTZoa2NOVERnMUU5R0VnUXhEV1JGbzd6TEhRVDhKWmF1Sk9JZHkrZ3B6eXlmTUpmdkxEUURIeFljU0M0Um9HRUxXbVcvNTVLQldCZEJTNytwNFp1YnB4OG5pOVg2OUI0UTNBQkRqWDRiYTU5S3l3b2FRTXh5Mi9jNXZBZzc3YjgrdXh6aWN5MGRMU0dFV2dmWklGSFlCWjZSUWtJbGZCTi9kRFFEblUwNFNJUjNPQUxSQTBwQUpQcjRvREdHUHEzK2NDbmdqa0VjelZzVXlsQThEOUU2VzZkSmtnQ281eFdVUXVMKzZrc2FaSUhhTnNJQVNBVElKSnJpNVhsaUpHVkF6OFZHSzNBQktranoyaTBzeDhtRXpwWS9xZGdESnRvbmZpWU1IQ3YzUTM4a0pVNGFZVzRhd05uTm45SU5FT1Z5S2ZVYWhJb2RoZ3E1UklSYVZWU2pxUTJtWU1ncTVqRXJzSmZZZUZGV0taRGtrVFF2MVFYeXE3cVE3TkdXMW51eWh5OXZPVTBKNzFNaEVLZjhEb3hVSUM2aWx2bHpra2VFdHZpeDN5MEZpV1ltNUJVYnBJLzZXK1d2RmFpa2ZJeThrV1VraW1oK1BtY3NNM0ZiSW9ORlFRRjFseGt1RXFJWUN3U2Z6N2hiRWsxQ3hPamJ4WEVWTUFCcm0wbDQ5eTZnZjhYSjdIOEF6RGMxdzY4L0J4MlcwemtORThjNGZ2UGFQYXorU0FDRFZKRW5zZlVQVWg4RFU4K3AvdzZwMlhQM2pvd0ROR1hxVlVDNnp3ajVITTdPWFU3M2dzVHI4N200QXZIRmZNazFZaXlnbFZ5Znd6TTJoemtDN0hXd0FmaERrOGdhQTVhQ25wNnFMQndpaGlUZ29rWHRMSEtxSFlXa1Z5RENrQTBnQ2I0K2tNOUNVNmFNMkpCYVFNak1NZ1FkWUwvcXdUMGhrWGZZUXFvUE00cXhSLzZNUUJaZXlVTXV6TXM1aVRzUjdFQ01nSHpBa3hXemcvQmVBN0FhWnlNMWg3V21PWXVRS3FIUm1GTW9BWWpXQTZDZzN5TExQSlpPZHlhZ29nSGNpM3NuY1JyWU5uYWhLNE1zaEhqTmVydFE4U2FLZjdUbGkxZWltZkdxYmwwdnRhT0ppcGs0M2duSkdqc3lkWFBGU29vdEwwZ1h2ajEvVmtxOFBQWjNSdk1weUpZbVVrbDhrczJ5RmVXR2Z0TXBGSi94SVBGb0s1M051Wmx6UE5rcG1FaW85cGY5V0FHY2FHK3Y3ZG9tY3o3MS8vT01mZlBrZnIvMURBQXh4a0dHSURRSUMraEJqenlIZjk3K1g0Qk13My8zVGhEaG44ZGNCaW5kTnZHUlhGSUs4amFLWkozUDNpSHluTndDWXpNcE0ybHJ1aDYybFlJaEYvL0FCZDNNSUZTYjlsMUU3SnJhMVgyaXQySWxrZktkNm1xVUFzajB1dWlJZys0a2hvc2xjRTRhSHp0Q0todktKMGtLWVJORS9IRXhqNWI4UlJET283R3RWZG5qWjh3TStaVXBaSFEyMjVXa24xN2ExODJZNzVBZTVCOGtjZkdxK1RUbVJlL2I0NXlsbC85dmlpUnpudHNqVy85RllKMGM1aDZ3c1VaTDA4aEF3eUgydHRsb3VDT1dwRDJSMnlBSXd5WGF5enNmc1NxdExzdVUzKzdhbHVxUlArell2KzVYQTJHaXlXL1JrOEw5QnZjNHJpLy9ZMnZIbzVGUDNNVGRtelkvNHhQbmh4SWxuQ08ybmM2RHZEZk9pZ2NHRHhaZXhuSXVUMEtNWlBrU1pIcHJJSk4vQzRUSTNGRitTaWdaUWlrc3lKSWJoQXluQmdjTlgrWlRtdWNSbE9SUHN2eHI3czF6eXYzRm04YUFuaDNZQ0ZXUi83aTE1Uk5yWGI1NDNOSXdQQU9CVXhJYy9zZUhsZjl3QVlJaFhnZHVkUUJmelJQWFQ5ZXpSem1TMTBpR3Y5UFk1NGd1QSt2UDhQbTdaMGdjckg1b3JNN1pmOE9DNXpqU3NybGVidlpXTDFaRENyTDV2dGdEdEJnQysyalRralJHSDJKL2JBbEZ2OEdGQUFFUFBKVDloc0doSWdZd1Q1cjR1MWxuY2dkRVRlMnhJQnZQeDU1L3hyaDc2Tk5YZTFRWnRaZUNQRGZ3ZmYvNkp3NCt6Z1VOWXRVUnNBaHoyM2dBbEkrQWV2SjZBeE5EQWg4Qnk3VjhVMWF3N3VkMHRxRHF6Tkd5eXByVnR2OEZ3WHJXYTYvRVVpcXhEWlpvVHI4WWFlNXpoSncwR2ZhUGJ2bEJuL1RsM3o3ajZ5WmxPY2hVNnJVbnYwNW1yT2tWOFV2cnNqRm0zS1plZEpINFRxeDZzbUhoYTJoNG03MjJjNjhxamdjM25RM3VTVWNCelNjcEIzZTVYLzgxQmlXT3dQYmlVcml3eEFwdkpsODJXdkpyYlFDOTZwT3poYkF2bWtPMzlnWkVTSEFXWlFVZ2tNbm8ydENnV3BreG1iNkxya0JoRW5ZNjFXTG9WK3NMUGUxSFZDZ01wS3JDSEVldS9qVktOUWRuMkhIM2tHc3Bkc3BhZWY3d040SkYvczB6Tk5MTGE5bC92Vld6STZSbHVxRGdGdHVOMTRqQmcvMXBQVFVkTTFvaUpYbmZHOGxmRk85blgyamV5VmVHNy9zdm5naXFNenMvQ0NkVEh3ZG5HUG90dXZ4UUprUEc0NE5udmxOS2ZEVlg0Rk5yN0RhU0dBaFQ2MEhHT0JpYUxYUkNpWVFpbEdBR211NGt6Y3g3UjRPTkRZUUNzcHc5VklwQWFsblhiOCtsWGZMRktQd0k2RFBJNkF4NDdQSDg2TFg4Qi93V0g1MEx3cDRROVdZOVRFSlQwL1g1Ti8vVXJydTV3VFl2cis5OS8veDN2LzhHb3ArQk80TSt1Yks2NEVjRE53T2tsZjE1UDlyOFNRSUFVYlJ6Q0IrbmRvZFhGTDVsZEFBREphVU1OL2NYZ0ZCZ1Aydk41TjJLSkpxUnZkdThNcW0vTmRNKzltVTcyUUJQb054UnVnVlJhbVdJZUFDOHh1Vk1YYzlGdnBiYjZQQWJZNDU5ZUVON095UGFqblU3dFVLZXQzUUorL0lqbDVoMUZ6MjJyMTBBU3Y1S1FPNEdHckJHR0lFZU04eDEvN2JlZzU0UWs2bFg2T2VhaHJjeVpEd0pxVG12SlJldVdUKzJlOThrT0pkUG1rQjlJMW52TzZzRzJGT2ZGYVU3TVN6enBzRytQd2VPRFFUMjFIYS9XVEYvU3pjeXlCa3p1RUF6UzZubDl4WU8vbHpaandscS95M0tWUGNKSFdXNXVpNWVKQjVsNk9VSnRoYmtnS3RXWVkxQ2hsS0lDTFRYTlVkSEthOHFwVUR0Z1ZaK3NWWWFteHFjZ1ozc3g1MVBHYVpDcm44SWMzSEovWU1GdStSZjluYWc4bzVJNTVkZ2dpeTM0WTBOTTdma0owT0lGUnR1eldIeG90QWVMbmlpWDJ3MVBMdTBnN2liRWN2STF5QXVTR1NWT3dHTlpFOFBIUW1VYm5RekxjOXUrZEtiTEpEUXVnNk96ZEFiQlhNZHg3SGFLVk0vaG15QzNpbWRna0xpbTd5ZGRnNTgvZjhFTC8zLzhnZXYvMy91L0E0RGM0NktSUnNqQ3huc0FNQnhpMzdvOVh5cllFUE50VTZhWVB1VVN0R3RMeU1wWVR6UFBOcVpwS1MvSlNXbm8rUjl0Tld3M0FONDNMWjdmd3pNZmtrWGJrRmhhaVJSd2M1QVlLaVRncFBROHRQd3pFRzRUTWVUV0JPZERycFFNa01LaU9aU1ppVGlFd2hCV1lMRDNXbVFDeWFJaFBReXBXVlFPNnJiSGoyOHFJU0IvQUIySTNMOHpVQ3BkSVBod0tES2t1NE9Vc0FJT3lrdi9Na3Qxc3lFWXBqQ1UwenZEVG1oejdKVUlrUHVrb2RSeUZsQUlJRGhzbXYwdXhaV0x1S3pDM0RJVUdnaFZGR1V1b3BxdkdKREVDbzFNbkplems4VHU1bFdrYkVkbHNFbXZaamEzcm5mbllEQUp1VkwrSnhLRDgrTkwwV3liR1loQnFtSGwvdEFnejZpY2VKZ2pOWUY4aStHN0ZWcHMvbFkvUFA4bmo0TEZvaTViT1RyUTV6NTM1dlFBMk1tb0o0L084UUpINkY4cHVTc3lwV0FVeW1JeEFsN290VDV5M21zVlYxbDdLQzZSY3N1V2NwWVk2QjJYNmFXR3luS2ZEVXZaOHlRSzRRbVFGL1I0VndnMnZOUUxXNURZQUNoZ1ArU3dQLzBSWUwrWVZCWVQyWnNTT1RUTlJrZ3NJT1ZiQVBaRDUxQVJRekxjUXdOdy9BVkEzVFJWdUt4VGJBRWcxNXRZeURoSnlsejJvN1V1UWFqclU0QitIMjUvL2doVktNQWU1d2Z1QWJCNXhWTi8rMENlR2V5UzAwL0p5R0lJd0o1Vks0Q2dkTHZnSm1WMkNFcXZ5d1prcTVBWWdKek9FdExrTERFQ0xzNGRNbHFLRVlKK0VuSm5pc1VBSURGMFc1SWpmMXFwWVhjR2xqUFRQWnBEODA1R1VhOUMvMUk1Q3JFeE5RUFpQSjArby8zNk9uaEZGcFduaDlnZTFwSFIwSzBQTitYdWtrMmNZVVV4eXMzTTduZnZwemVHVFB6TkVCT2d1V3E1WXdpRnF4TlhQb0JSVWZOaWVtZ1BaTm5WQTdYa2YyOEs5OVN0Mzh2ZThxeGJXbG9LK1R5ekFzL2txb0VKZUpYL3Ezd21yZDRLcVo5dy9pK2FLRjM2ekRBMDRoSE5vVXRHQW9GNUE1SUpoSzR3ZllVeXlPYlNCQjhwQVlLbURBWE5hQmg0V1Rrdm5FR3BGMWtDbVpUUmgwbXRNL3k5QkM3MzhiNXVYTkRqRlY2OC9JOXYva0dKVDU4K2VTR204RVRGbmh0U1hBTVNRNFlJdEpkTVVURUNUTmR3RGlqbUxHNGx5bFpaYnFVb0FIajZiMjk1WjB5c1N4ZHhycFNaUmF1UlRPMHRBdnBnbnRMTFdReWo0SEhSajFNRU53REVIT0tQUnBQM2JDblhnVXBrQUJsSWxGYW9KeDYvdXR6SFpkQXI1TG5CeldXdUJ3NUtSUVhjbHFVVkVxQUd3K0NHWWRESWJSSjYzaWM3ckRDamxrWlR5SjZjSFhuZ3NGejBwMFpSa2FQRE9xbWVVOXhXaFZnaWlFZWtaeTNpeFhYd2lubFNKY01HdEl6ZUQ0dUM4WG5sVHNiTVlSYXNORHdVT0kzN2dIdm5IWWMrOFdqR0EwSnUzaWV6Y20vdUppd0hNUUFyL1pUK0lITW43dnpENFRDajlWbFRxZm1Hb2ZnUnVMdU1kLzN2NmtkOWp2aGIvaXZuMjZqUWlHY0RXc2JMZmtwQkpnUERJZnBmK1F0QXlGWG5JeDZDSE1wTTZTTlpCdFNMVjdwQUdTcEpwSXo0SEpKU1lGSlJtZ3lZSlY0bUUzQkxQUEc1RExFUXpqb0M3SEhwajNmLy8vSEhIN2l5eC90L2NHUEFFSzc2cE1HVE9WSzBvUXBDR0FLUUpOQWVnSnRyZG1WN01KSGZWZTFuaS9yWU1DT0tBL1JMTFZPc1FYZFFSaWJKSEg4QjZQVmU4MnVEVnFwOUMvQmdNRVZOWTBoKzdxd3A4TENWS2RtQllwd1dBRGdidUdFSUpiWjU4OHlkYTBLMFRNa2tHQ1I2QTVtQm9FeGtWZ3ZaR3dpeWtvMWxXeWt6MEZ3VWNnYllHL1pReVVQd3ZNK0tBelNodDh5RVppaFFsb1pndEdtZHdRQkxNNW9zWk5DRXFCZ0NtcmdtTSs2amRIWTFGek9SeXJ0N3RrVC9rT3NoNFFDVVVuYUlhT0RMSVdTMHBWNlk1aUZGbm94aXI1YkVQQUJDRmY4TEFOejZSeXhPcmx2UjdXSytVcHprNThIRjA4OGhSbGZ6MVdEYlI0SlFlMlNzYnYxUnRDcCt1UzZzUFB3blREbGZrR0dWTHBzc2ZTNnozbC93dmZXcGZzS0RidjRiVlZsYXdFc21DNWhiOGlVNTBTTlVwcFRrM0tlTXJ2dVV5azYyNTRneXVsaVJ1VGhNTXNtQVZybVFsQktNUUZabVpwVHIvT2p4Q3plZmdsTHdZajk0WE83ajVYKzh2SXVyTzc2MDc5V1pTMmRFc2FrS0FERkllWkxCc0lQdENiVHA5bzFLakVaQVZnSVVLeVVrU3JZT1pPZ3p6ZWt2L2d3QXFyS2VRQzc1RWtiK0FtNEwwb2M4d0ZxSW5JSVFvd3p4N3dEOVRQaUlld0szR21Ha2g2SWpKZmlKT0lUQ2tMbllleTFvV010Sk1pRTlES2xaVkxLS2wrZ01adTAydzZrcFhVQnBtVUVJcE5kNlFKd2RjcUZGRGFxdk44UG1sVklXeGZ5NkFMdlRSakdvVzQyVkpVTERtOFp1Q0UrRkZ3YTVpcExLRU1qUWcvUUFpb1pjRHFVTVVmRUVNbkcrSktVSFlGZWgwQ2JZbzI2WWM4R0VkQTdMK1laUWU4TlF0UVhEVFlMVEpEekE5dHhnQ3pvekpNdXVkcHNmN3llbUdXYVVKMDdHNTVZWmo3NFF2MXVoeFo1djljTmZKTnV2azhVQ1Z6STJFQTVaVHNwOTdzenBBYk9UOFFFSVE0VFFlZjRMQUVPaG9uelFtSERRekJNbFZycUFRZ0k1TkdGeVNENEN1NlpvZmc4VlM2UjBBTWxJYXBoQkZrK1kwOUdpZGJWWGxTcjRPQWRiYnJMQSszLzZCMy8vd0I3SHVuLzI5d051QXlEVE9RbUFyVi8zODZMdjlPSXZRekFFa0sxamttQzRqWlNJS3YydGdUcGhNNWdzQVh0UUp3REhYd0M4SnltYy9FNHdldU44MUErWnpBZUJoaVhBT1FFZXh4L211QUhBSHZlTytEcFJmQzlVcVJjSjVRUExkV1RoMFBRVDQyQmszY0dJUDZ2YWFFVzVvc25PRHpBb2hLeXdNZzlVWC9SNXdKbVR1dXVmQzVISlBwa0p5NWl0WERDUHVyTEVaZldKSi9YWmFuUUVzMVZtNkRiaXZkWmNNNGxPUXFQcWx5bmVXTUR6M0VtVW9mYVFhTmNveFZhUzBMM2ZMNDJpcVlMQ1JFYXRGbXBROTlTUEpOUjFmeEQyN25MK0lOT0tiZkw4Qi92TWZDZTVvMURKTyttWVRZc1JpSk9weGxsTXhwOC9zeVk3WlUxbWNsWm1jbFpta0ZXUzJZM01MZkhJNUc3UmlZK0hzTTVsZTNqdEgyLzcrZWMvLzRtTHV2Ymh6djJkM3JqU1V6cHl1Zkh5bjVoUllKRFlTd3dRaG9ISlVjOWR3WERRWEo1M20xZjhCWlc0VVFlTWtyZ2FYaXdNUFJPcDF4QmtjR0FJcEd0eWMzNWdxSFQ5aVBFZWdDR2pEd0EzM3ZPMTc1enR4MUp0SUVvOUJINSs0SFNCQmtjZVB2aitLQzRJVHdVYWV1Y3lBYW4rU1lJSjY2REVQYXNSMU96dkgyZ3R5YWVIMjI3YitwZElJWGRrQzlrUjNSMlo2eWxxRDZHdCt0bVRKcEpKazYzSWhMM1h5aW5CTnVUbUlmWHVtUjNFSUQxMEt3WkFzdXptVE9oQklRRUtOSVF0TU0xRmVqbGc1OTFmTFFYTnhFMVd5Z1VRNmVZblhId1Y1aW1lQi9LWHVib2FoV2dDdlZxU0VxSGdveXRjMlRLOUhPYjJ4TWdXakpXcjE4UUVNdGdBUXRzeldvd2NBaUNWb3p3TVBkVkRkSjc3ZXk3d3ZKMGNEZjNJUVcwRS83dkRrVS91aE00amZsejNlbm5jVTgrVGVlSmxBNTQ3N3VIOUlxUDFSQWU1MWN5OFg2TlBWOXFiUHgzZlBQMWR0dFh6b1dPR002TTJ5MUFtN3pKQkg0YTVLd2lrRVlETWNSNldQaVNUZUxzMkRZWVNCNzNMSEZOUEp2T000bUNOUWhBZzJscXBuajVEbHZzd1NkVTFEQ24wNy9iYjkrSXpSWWw0Z1IvWGJ4anl6ZjNBZUdhQUNZYjRSMy94eFo5Lys5dmY4UEkvUGdrQUJsSDZjNCtpRUhNRHhnWWZBdTR4UkJSaVhnZVN4QkJiTDlwT2FXWUI1STJobGxVdlQ4dWdQd0J0QVpRRmhqejIyaGpWRUFBeWtVeFJGRVA0Y3loYkR1dS9BQ2p6dXdKaFZvLzFodmxQZkJEQ3BuWEV1WUovU1FLRnRId1VURXA3T21WZ0FPUTV5UjJGc2llVTYyU3daV0taWGlvRHVUak0vbUNRK3o3cnNOaGtrT1dlSlJpRmZGSWp6Y1FrcDVRTUhCNWJ0K3ltWnU2Q1Yxbk5mUkQxeVdaeHlYaEttQmNOQXprYW92YmlPbnVmeU1wZHFjUWtKTTA3Z09FNnRQVmUzYWk5azdIcS9DcmQ2YmowY3lrNEQ5Y2g2UGJoNHZtd3k0Yy83OWJOUnM4N1pNOXZ6bUJTdnNLVE9VNUNLN01vMHpPWm1ZbDVLUzdKWUJJMFlVaHhTUWFmbGVHNno3cHlwYTQwMlRZekVKZWtUQ2FBaWJnUXg0bWtGMnA1d1lZaEx2MGhZSlQzQnBCaHlMZDVBM09ESGhzeGFnRjRSUTJoS1htU2trbVRHWVhtNElIRUIxTFF3dzl6QTFDZUg1bkVLb0QwdFhDR1IxV00wc25nZE9GUllUcWk3UVlBWHhEMHNkMGdJZ1FHMi96SVVZWTlUU1FlSmFwV3FSZXA5UE9aS2ZzSW9CODVRMHEzckJFak96RUNER0VJZ0daMmNEeGd4QWpJRFFDa0pzVmg5OW51eXNyUUpOMURqa01WaEhJem1hRk02MFpEdFVTOXFvaVh1VUpsZGRkTHlkd1FtamZHM0JXTmxPNGZadUdkUEl6emZHVlZodFFER25Qc1dZNjlmL0JNS1VsbDdlQjBzdTNrSXovTFB2a0pZTnBCRUZwU0dXOFlLZUtmQWFOYWw4MDhVL1E3ekMyUGkwZzFuQm1Gdm4rdzB2eUs1bkttUERWZmM0SU9pMjMyT29ITHpvMXN2MWxzdVBtV1RMUGVmeVVONi9kQVRnZTlUcTZMNVprQk94VFA0WVFjaFVxSGtWaFZRbFlZS2gySFNhRU01RFlDU3BFZ013aVZwRkljdEg1c3JFVDJ5U0V2NVhHSnoyLytnUnlmQk1BZWwzUFlNd3FBRkd3Y2NrOEdlMFdKTVlTek1JZlVZTytBdzVKUnFBU2FTQmtOcEhmQ2tCZ0NEVU0wK0dENHc5d0FxSFd0RkVFNE1KSVJZQ0VrSVBDekJ4b0tLSVpBZitJQmd5SGUrdFBlQmZTaFhmMXpUVUZpQyt2TDlMQmZsQ2tMZWxXWmsvTm9yaXRHd0IzQ1hISWJZZ1RPNlcyVW5jK2E0L2FBWXV5OXJ0SUZQRDJMTHhrSWNyY2t2VzRwQzRsaGlCUnU1SUhkRUNTSEFydjh5SEs5ckZiSTNNa0tneEtqWmtKdmwwTXZGendWRWg4QUJTeWh5VFp5UHpVa1VGVDl5RW9NUUVtNjRERU0yL0FVRVh3VVo1OHU5cGFDakExM3EzM0N3ZmZWUXphUUYvUFZkVFkvemZlTi9DOXQxWUJQV2VSbCtrand2TVBJZWM3bnVwbVpPM3puVVU3SER4WWJEdE1NUTJneTQyU0lobUZaWWtUbVhERUN6UFVHSmt5VzNmSjVsWGp1b3loQkdPWXBhTDRCS05INVRLNHc3cEF4SGJEbkMveThsTWVGSEsvKytkWi9rSHI1SDloZjZzVVpDQVlibkV2UnFwMEFBRUFBU1VSQlZJRzFhY2lLckFJWkFEZGdpSEUrZWt1ZGNlSzRQRUJXanA2azZkeDJQWERwNEpyZ3RqTDh3VzRBc0FTY2xRQ0dZVjI0VWo1NVc3dnRkbmFrb1MzWHRPRitWbjM4c0wwRlNFVkRSYS9sZUZGV3ByRFcwWWxFZlFISWsxTlhHRVorZjgrM09oR1FuMHhDcmc5ZFBIRUlEU2lyVENsSnBJRFBQbG1jWlptaFc1aklMWms2WVJhR3Z0RTVHR0lvSGlBTWtkNlpiUyszWUVKZXVaTHQ2YWVMeUp3N1pQRFBrTytQSVBlOHhMNkdNaGRRT3BqUmxLR1JpZmZnVDU4VUtDbzljbk10a3RJb1M4MTA0UGJuU0RXQ1dvWWg3djYzK2xSaXlBcitvK0ZLUDU0YjlLZ2VHQmUvQTliMGwydmRPMlJ1TzFwaDcrRmJyWWIzNEQxZjRzWEVSZG04SEpmKzhRTXdkOStpbS8zb1lGRmwweW1lNjd5T0taMXV1QXhsOGhheklzNmxWN0t5eG4xQ2RCOWVMRTViaGI3dCtyZ200dWV5eldXd3BJb0tCRnZ3SzB3cGsyY0c4S1F0OXJpbXh4NG5GUy9sY2JtUEd3QnNQTTBZaFFPai9JUW5ob2h5STNZR1BJYStrY0dlaFJBS1dHTHdLYnNGZXlJdUorc05VUWFZakgxNEpJcW5GZloxbWU2aWtHeHBIdlkvMGcyQVppSVFKcU9oVHg0WWVqSllZUTZwVkVnQzhocFNnSk1KWUwvaE96bW9vb0J5WlFXQWRBa0NnRDRJbkNFT0FneGRFd3daelJXUlFwSWdESFBXcElSeUo2V0RwblFMR25mTG9aRURzbnl5V1phWlBGa3l3UXBEYkdWNkRwVXlrdGo3eXRNVFRFNVpZWlRPSHJSWEZXZUF3K0w0VU1wTGtCdFRTcTZMMEloazFxaUhVQ1VNYVl1OXAyY05TMmhQZ1laendDZmM4TFNiVTBMUk1JUStGR1hET3psOEtzaUZIbUF1bTRtZWw3TzFoTVgxc1l4M2hTdHozNC9DdXphR1lzL1hmZDdodmVjOHJaY1BGdVdqYVpaOFNaWStwVEtUbVlGYlNaWlZTckhTTTZESlBFc2FBZm1JS1IwWUxjVmxTRW9CK1dkR29RQzY4dlNjVXVabU1qUEJlVFJVSXEvUThHVExsLy81TG45ZThWUGp6OE1TZytRR2Z3Y2NZdSs1N0FFeVJUdmU1dXM4bGV0N3pTS2tCSDVTZ2lIb0NlU0RZVEJSQ09DSHVRRW81d0FTRzJjWXBzMUpoaENPbSt1QkpkT2lOTWUrdFZNRWVweE5YOW9YZytLREk5am1xMGtUWkFONFAyUlV3Z0ZsRUxnZWdzREl3Zjl0TC9jaERsblpSeklQS1V1QU10ZUlJV0EvZUNEczRMaXNFU09nWERCNW1vaUNMTVVNS1IwZ08zaFVPTXZ1K2djOWgvSUgwRVNDRWlFd2lqSWxNN0xLb1VWRDcyRlNKZmpUWE5VRlFzUGlWMEFvNFNsbGlEMndvdnBSQXg2RlZYWUlBbXE4cU9GNElDeDBEejdRcHdwNHc4Q2pmd3BBZW9INEVwQUNkdm9aZDhCV1pQeWl3Nkg3OFJIWEZ2UFFmTVg0NUVSSzV0SHZIS3Y1U1o4cm1razZRL3gxdVAxU3ZGUS9LRGo5Y3B5MHpSQi8zMlZaeVhUcjdWZlN2THVjRHYwNlNmT3NuekFLQ2FqREZlWlY0cEZQN2dGS2tIaThLQ1FnazB0UXBtUXlNN2Vja1k2ck5acnd0WDk4OWhlQUYyeDgrUjhUMFZ6d2tRQU93MjBBbmtWUUZ5SHQyUWFjWVlVOU5vYW93WkRQc2h4U3pIMWdtT2lDRlF5VC9HQU16cUhjUEpxTC9qQTNBTG4xQjlhMHJjNVhmTkwzdUZwMVc2NGRiTEYxakZmOVAvejErVXYvTjZQeHQ0T3ZIOXYxUDk0cmhuZ3oyVjN5TVhMWFZid1hQZlJnTUdCWHhoN3Q1eFRKUE9SWWdydWdiR1ozdnJFQ1U1OVJVeGYrZXh1bjlKSThLUzRHcldneTJZOTVFV3AyU2Q5SW5ITjlUOXoyMkJxNVQrc3daV3dUMkFDd09obGF1Zk5mRk1zR3prYVBqeWJtT1JRWURGSFlUMll5ZWl3Ry9lTmRuakxiMHZabFhscmpKdDdhT3JuNFlMSFBMTXVNMjc0Y3YzTzVZZi90TllKaE1BUzJvMVVlcXlCTnc4bDhFVXJ5VmVLWjNOVWFVOTN6RFR3KytXbGpEd2ZSeitSZzBmYVlkZnVOWGN3Z1U0MXBKMXVNWkdhOTgwbHVEbVZtcFZET3lveDhpdERYTCtFMVFXcndHQUxJanlTdVR1R2pHanZZTktYSmRvRzBTL1h6TEM2clpESXo4cnNMWUlYWGF2SEYvM2p6RHpDKzl4TjdiUERocng3Y0RPQ2luNThKSmtrZSt3N2FzclhUS0cySTBxb0wyMDdEcm1kSzNpY2pYRWRtTGpMZFAvVUJOZ3I3T1BPWktSTkJ0anNoM2lweFByalI0UnVrWk1IbFV6NjdWeFJnRXhEc1EyWFZMY3R1RE9odytQVEphNGc4SE1pV2ZYN0FTNkFPV1dFZnNwMTIzOWFWQkpUUWpKZit3Qi9hdC85Ly9nbi9GaGlVWDM3NmlubnlTei80WmlDY1NmREV4MEE2RGNseGt0R09URFBxbmU4Tk1GanZsYUl3c2tCNmJxdlRqd0ZKRERmUVdlcFp0TGtwMmszb1R6MzNLclFJM0tHbmJHZDhuMzBqekhZNzhpR1V6MkZMT1o2K1JmWjdyYTA3a3V5QmxNbDRZbTdLL0NQa2xvbEJReE9WNjFHTjJrd3hrSThxa3FRT1VaeG84bUZLSDRJOEhoa1RIOW1Pd09oKzFodGpNODFoUHgreUc1NEVRSG9XTldURUgxWm1vU2k0TE9Ec1hPUE94MjNRbmt1bCs5REJzMVFvMjFLbS9aZmlsNkNDUEFxbmd6ajZsaDR2eE40VysxUXhnSjZJODhhNURmdDhSN1U4emZYT2o3QjdqalFyUE9wVzdSZG5EdHcyNVg2bUQxS1BzdTE0NFA5bGdVTjFRdjBMR2phRy92bTRlTUpsRHk0R0h1bFgxdE56UjNyWGhOTHo0V0lpSHZGem54QzlzL1loOVhyWWp1L2VUMzBhSFI3NjlYR2F3VEhyZlZxQjhmNlAwUGs0T3ErQ2l5UmxXWXpqeTBNY1FxTmg0TkhHQ29NU0xzTWF0UG51UytraDBDMjZoelROZHVIVG51Y2J3YWhyaEFtYVEzWDMxYktUTXgzYmZ0OUN0NlFEcVlwN1V2ekpWUVZMOEtVM0JJeU5MKzNUQVh0YzFvUEJ2L25GdC83ek5Yc2wwcGQvRTlBZkIyQ2lQd0pRc0YxVnRyVTVUaVcrRndSN2N2MlNyL1VENXVlZjIydm9FcmUyK3VLUzBiQkwrc29mandBV1BPMU4zM2gwMEs0NXV5SDNqZXhOYUNod01xb0dVRkxNUFNRQTEzOEJnRWpUMjJ4eC9Qc0o1Rlg2eGFZVEhSOXJtRUk3VWZqdklmd2NSY0diYWgxaU5YVzBpSXZjWHJRVngvL3g5Tk1lTVAxSS9QWDVNekRQSVI0WTNDTjB2elpQWlBYRWhUa1hOV2NVMWgvT004WDd4czc5aE1ZMEZGQnpZSkFhNXdJR2lzY21tTjFVREdBZWRlWHp1S3pGcTMvdVd3bWJlMWlkTUdRL0JXa096YTk3WXUybzUzNitub3k2ZmdXWHN3dUoxSXlVck90SG1ReWVONXlFWjFhR1FqNmNpL2xRUEYxQmVQS09ZUko2MkNQSHo2eVpsejR5ejRoWlorNTZsS3RmNTd6ditUL3FSOCtHS3hQSGVRejk2V3dlK2U1OFBnb3JoZmJzTi93WjJnakRad3FYVmpYWm4xZDFDTHhvcVhmQkcrR3lHZFM2ZkFCQ2szdk9qTnFlaEtTWmdESzlKR1V5ajBJMkVVeEM4cThBbmo2M1Z6amdVRDF3VHV2ZEJ4dGpGVjBqZklES3R1akZETGRvWmhBb3ljSXVVUzF4LzAwSHJJMUNYTGp6dFgvOGkyQmdlRmxQalp4d2puRURzOE0yT1dEdCt6T1FNaHJvVWF3R0YyUmJscDFzaWFqaUNSajJLSmR0dTJlQURUVW5xYWYxUXBNb3RYRDJjcjNRMldWdEpKOTJBNUJkQWlQMWlqbkZTcGtBdVVramhsMzVWRVBJaDQ1aGhhRVNCVUF5aFAxMktIYVpwd0I3aWp2emRwTSt1QWRnRlZpTjlKNzdNSWE1OWZ1SWpSd0MwSkNtR0FKbytsNVVJUyt2ZElFMUgweG5XekV2Z2R5UkQ1cENVT1loS3lkU3FiMXNCV1FGRU54Y0F4d0VuUWtacDdhVm5zSHovV1FIWjBLckdMSi9hVGJRbmtKMStzY2dzMFlDVFlwcFlTalNUYVJ4QUVFb2dXaEp1a3dhZ3FBWENkNDNuamZiMmVPQkhhdkV5R0VYdHAvcUlaQXlHV2xjdjRKUnlEMlpVcEtYYnNwaTg0VitzanBKM1k5VFlqc3g5RitJMW81M1dGYlBpM2JINDVYYStXcXNWRnAwV0pTdFZQeHVOZVVjQXprZit0U0NFcUhNdUo1WUdnRnBNbE42bHJKZ0xzL25IWEk1TVBueDZ6TGhETHl4RWl0RjBjeVVrNUorQmNBVGozSHN0VEVMSkRhODd4Ly82Qy9mbW9HaEczTFlSSU1OWWtROFJjNlpGSU1VZElKaHlBVVpHS1ZRejZGcmlKMVJpdnpuR3RkbkxPY0FpcjhBU09FdUlOVjZFSGdvcEhBb1FRYlN6ME9RYWFIVmhzd0puSmViL0FVUUNzZTVIMEhGTjlBZEd1YjVCRUJQL1BHb09mQXZSMkQzTTdKSjMzTEQ3RkQwc1FyS0RZQXI1clpCNE9WS01RUklMME8wbGFGYkVlZFE2Y01TU3VmQjhwNFJBaW1tTW1uWnZjOE50Qjk5eTI2QmNlYzlaVHNRNmw4QUFzZlNnMVo3MUdEZis0blBIVlh6VVZOV0daSGc3MjY1QnptRTJXa29NRktLSjJBSjRMQXNQa1NVTWllOVVHa1NDbDBPYzRtVkZHOXAxT2ZZcDM0VSs5UktUNUtoZEs2U1o1U1puUFYyREt1Ny8yUDlaQjk2K3BPaU5KZXI1UDBRS3plSGJqSFpKek8zREV2eHVpZVU3Um5rdTk5VzJpdzFnUXhEekZ1TWdCWmpoWEVISlFvRWh6QWN5Y1FENUpSYnpJbzRWNWxrS1FSUVAxVjU5MVgvdWR3aTQ4YVRoekFhNHdZOVpGVGloWCsrOVIrdi9mTXQvdERRa0lJdVBON3d3eUgzbEVGUHBXY1JoejFsM0N0TFE0aEp1aHRJRE5WU01PUlFlbGM2V1diUkdmdTUrU2kzZlFaQU1XQU5DZHhVSWVwZEFEeFU5c01RQkhEd2REZGtpRzZlNWRqMXFwc0ZsSVU5WlAyTis2ZG5SWmdvUFFDK1hheS9DYXc1UVFrRyswK2ZQbUhoSUc3dmt0dFB0VkRMaHlzYTF3TTM4LzFrY2hCa0swTlVwMXNXajBKc09HU054SlAyU2grMlVicGxNanRjTXRsRUU4K2hrWnVhQlBCMWtFTUdveXBTU2lDUVEyQnl4WkpCVy9JQmNDdWFlTFRoMDFrZmd6NldsUUNqdE5WcUtDcmdKc0RpbWNpb3ArOS9HbTBSaVNualBwRFp4eGxQYklaOVBKazBPM0VIOVJhc2ZCaGFZcWdrUFV1eVRIcklHMkJqYzZaMFcyeW16SjJUY0M3WDA1dWNPQXl5SnhrWElUZFVEMDVlNU8vaFVZbzhkK0gyYzZSL1RCYXlNRnp4ZDgyb3oreE14bk5IbXZma1IvMlhmV1l5TTJHYVFSQ0dRZXdUTDVVUUJONkhJeHlxdUN5RTFFRFc1TklTbDZIc0lDWURXU2trcGdSWnRzS1VmWmIrbVlRL040VDRmbjBPOGRaLzNBUGdMT0tiZjNDUkJnR0cyQVE0NU42ZDRVQ1pBSWV1RVdab044RjFyeUluSUFkNElxQXNEbDJxa0dRZW5XQlBaRzQyOTNUb2M4cjJGd0FHY2o3NFRMSVlyVWNDTCt3NDZNTlFTdkVDQ0JGckw3R0FpMFVLSUNwTW9LbkprMHdmTmdsQXg0MUdOakhmQzRROWJpU2FabTlNYmpSL2ZnOURWSVJQQmcrYnk4b2RTcEtDSEFLREVCdHpFK0FzbGtBaEFZWkt0NkNSTWhUTnVXU2tCd2dwQ21XK0xFbzk5aUVhaGk1UXFBTVpiTDh3Y2wzUFBkU3BJbVhZdXdOS3RCUTdzY200cGdsczIxS01jZWlKc2hLUUVveVV3Z1JoaUpUQWt6bXNxaG5KbkRKNUtrczhRQkFIelh3SVp3cGtJaVluU29NUVpjNlFGRFB5MlF0R2UwOFVwaWpYR3BtN2FjN3k2UHZqMEhNWUh2MXNCK1FnNWdnK1dpNzNGRGxQdjR5NnA0c3YvVU5pR01ycTBrZEtCOWt0TTlCekxjc1ZMZlZlNGp2RVpjOGwyZVkrZXFRTlFrRWZobHdOa1FKaGxVYThaQklJQkdjcEFZSm1vbHdYeXpPRGtRbnJocjNTeFdlbU5DeGxNaGtCWnVGTXhvZUFxZUVEQnp6ZStvL0xmYno4RDR6M1p1TUd3RXRRaG4zWXZCQkNHanIyUWhtRGNYRXVDb0ZJQUJjemw0enZXVVY3Wm5raU1EM0xMRmZLcEFUeXVmNE1nS1NsMFlqMFZ0UnhBTXdkK1k5NFpMbDVhSUFoRkZJdFZSRmd5SDJjRWFiZTd6SmhqZzBDYkRqdGNLN2hQenQ1MnZHR2dJa3YyVDl2S0ljTXZFTkVNZVRzQ0JSVlNBeUEzSndrai8zWUIrdXpQU3A4b2JMYmV0R2M2eTJOb3BmK1daQVp6bGNUVWEwTTFKSkNZZ2d1emFYUERqbVhqRklPWU8rVk9raEQyVnpCRUFwRHlsaFhJUWNRTUFxZ0ZmTXNKNVZJZ1hLaHlTWmlKQmFZWEFCQkV5b3l5MG41RUxDUUN5WjlodHhidzJ5TDlKSzh0RlVXUUMwZTBLVzRQMGVVa2VQZ2x1Rmg5Vko5azVTNUg1cWJIaStXcTZXSGZSY2RKUHQrNXY3d2xDZUptcVkwSTRicmtLT1hpUktVUUlZQ2ttVUdvWFZ5WFZ4NnNvMGNLcG44K0hXWnNJRG1lQW5LbEV4bVp1U000emdTZzBjVUczSjU2WSt2L1FIZ3Q3TWdpazJYYlZKbWdIUW5NVVJpNklkVkZPS1FXY0s5NEpZb012ajQwRFcwOG1pSlEwcXBtWk4wZ0NhQTRqTUEyUWc1cDZVSnE4U2hrYTJHRFM4Tm8vODU0VElLK2FrOW0rVFphUnUxOXZvV3Nrb3h6aXE4MlArbC9VV3BuVlhJeFlaRTNBRGcrNEJneEM5aUoxazZmSWVrSm82MnZUM3dnZkZvaVdrVnN0N081d0ZudHIzWTU3ci91dktaZFh1eVNsbDZUcTVYWEZlR2lpdUowQ0FybjFleVdqR1J1QVJsaVZJNUlVc1Rrb09zMHlOdW9HbFBhR0h1SStYM3owOVhZN1g5b1lrdDV6T0xOdkovNENpTXJNcXAzaElIaDVWY2FLYS9pb1BsTnh1dXQxa3FuWFFjNXBOREswd3d1UnhtVDZTVTVNZ3FpeWRNRG8xc0ozeHBBbEpmMi9wQWJrZ3BTd1NORC9IUUsxUDBrRVFVMS8xODl6OUlYdlNEZ1FtL3BnV1lZdXdKNU05aHA0OW5rRktqbEJGQWx2Y3BaeWVabS8yRG1FTlBEQ2xsRDlCNFNxa1prYjhnRXd1SGxjSWVHTmU2L0RyVmtLQStqdFhhejJsbnRxenpjNDVtNVkzS2tLM2JNRlErUFhJa2c0aUozSHNPR1U0SG1FTWt0dHo5ZXBkRDdQR3YvSDcrM1A2bzFLSzc1ejVzREJZRURvcGl5RndBeW5qYXNRcVl2SVVRcmJKc2tkRjBFbWdHVHJMUXZKejBvVHA1a1BOMFphMzd5Qm5BelltemovUVNpL0hxaW9vVWsvWFNPQWg2Wm1FdlBvc1pwWkl5WVNWMlp2c1Y3QnAzVzhmQkFiNXFqNlZoSmFhMGxXeWlwSVkrT3MrRG16b0JjRDFsWUNSUUloa0pBT1lNQk5uWlUrUXNwVE9sVWlTZGxaaDVoRVM2clJJOW12djBGTWRLZDNLT1ZVaTVZbkppUGw3ZTJ5UXhXOTFpMU5za2EwVXpmK1VvbXdkUERmbTBMSDJldUpUVWhPRWtjYTR2ZlVDcWdWS2djcGRnbEY3eS9YbW4rUDJNS3FYK3N2cTZRUE5kVHltVm96NUhQTS8vWUpYRm1VRktKak1qNXpLVVNUSWpYbTRFa2drRVFaQnhpS1dlNjEwR3BXNElCUnQ1MEZ0Tk1QV3BreGJLR3loOU5zZnBENTB3Qk5qalVQSm80ckhNRWhqaTlWWmUxdU15RlFDdncrSUdBRVh4YjM0aHl1ck14WjYzQVFEWVlFS2Z1QnI5c1VrTjlvaHFDZ0RpNVV5Tnk0UVpZZ283Wnkzc2xaVUIwOFdyRUxQRXkycmt4a1JQOXhUeW1WbjZDNENuT1VaejJkY0ZHVCtRa2syY3lZWmNzbEZqamQ5dkEraUQwMEtuamp2UE1hb2dxLzBkQVA5QWNQOVdVREtzUHM5OVBvcFpYQlpxR3YrSTVianFpdHM0KzRpOHFjL2NQRWN6ZzBaTGtoTVloVXErSkkrRjZLaHJBaGVIMmFka2tIWjV1S1Axd3Rock9XWXFtT0NSTlVIZ3d5d3VtZkJnWk5FdzJaem9oWWl6Qm96ZklPV1Vsek81aC9VU09iZTMzNDc3S0xSdUxtVzJVdWcvRzJneE1VM2l4Zm5lRXBlZXp6dVV0ajhvK2Y2cmtTdG1Cb3Raa3V1TFhLYVg1TWlUNGpJRnBKNFNTOEhJMC9sUjRvajNYTWRabnhucEp5RnBBa0FLbi9UQWM5WTAwUjZYVytCeDZZWHYvY1NHeXpBdERvR0dkTURRR2RtQ0xOc1RIN0pDbnh4S0hLSWpYbGxCcitFOEViS1ZydVJXQW5kNDZnYUEzWEFSM2RTcmFva3ZKK1paR2ROZmJpeU5QWmdjWW5wdXFhWDM5NkF6aEQzdkJYQks0VzdTaS9yRlR4ZWR6aFg0NExZQmZ5N0JXZGorS2U3OVQwN3U4RDdZcDc5Tnhnb3JTaTRNVFhoYVJ2ZEJDbVJnQkpTVkdZUlVRb0Q2WGF6c0JvTEdZeFk2WG9iZ1FXRjdORVNLdXZVb3JYUVFwZWxGVzlDWTJwOE8rLzdRN016MlUzMEt1Q0NRWVVobEpzRWdaQjBlbHFVNFhPWk8wZytqSGJuaEpORmxUQldUd2U1ZC9Nd2x5RURxODVXbkxNUklyNUFBUSs2RFVDUHRobDhhQUZlS2x4dHpwY21DeklRVXQxckJwU0VUSjZIU0dYcDFIZ1NUVUZDK2RzZ3B2Tlp6NHFaeXZnNGlsWmdaaFY0QzNOL3hwZmt0OGFYYmp5dDRjaDF5ZW1hd09KbWNNRG1VbDFjYUFXa3lVelpBZlJDSFlabVlOZXN5RnAzc3MzbG1sRDRKU1ZNQ0pHTERJeGNiTVdVWTRrUEE3ZExyNjFkYyt2Lzk3My9IQlJoSS9EVUFqRFJnZ01PZVEvRVNrMEZVQXRjNEh3U3FLTDJMUlVMR1JFOUhWQUppMzBQcDVnemxkRThSempKbk1yNTlBMEFMN3k4ejZnWUFVUmVUd1Q2UW5qTEIyVTNpU1VnYWdGYTN0OFMyc2NjR0Vudko5bUUvalhwS2p4NkN6YWVIOEhlbmRodlFQNEdPRzRud3B4OTV2aHpzVFI3R1lnVFlaNWdhU0U2WlFQbkltb1JvNHM1TVZOYWlEOWJzVmovZDluZzhZNmhIK3Q1QSt5blBQWHBCdW93K3llRTQzQlIzd2ZZc2c1UnlLV2ppb1k1Wm9lM3pjcFZXSTNMZGdZV2dQMjE3KzVvc29rSFpHejdtZmtvL3oxcktESmhGWjYwSlNNZWI4LzY0b3pob2NwL09iQTduSDJwR3RMZEJrc3lJOXhKQmc2Rkg0UllFWWxROWdlSGFVaGxLdUQ4eFphR05WS1ZvVEJvdjRaNFNqQUJQbi8wa0dxa2luMHRrNXNpNTYzNnhuTWZwN1NzMmErQm81U2tVU3N5SFQxWDZMcFBEZk5YamlKZmdWYUFzbE1rVkJpMUpKc0ErdzNCQ2prS2xReFpuV1dhUWxjbk11S3lNc25yWWw4cVNaT0lrNU03K3FIUWU2UWd4Q3N5WCtmRStIbnpwT2w2cnhhZCs4VzkrNGMwL3VPTGl0Lzd6ZlVGS2tSVWR5RStpMGdzd1VVTUN1V0hZY1h2MkdTbTVBaWtsV0xaaGRnRGpDeWlCUU9GU1VkSm5RUG50R3dDbXdjNzdxMG9mbk1RQ1Irdys0a3pLNnU1UFRER0tRTjgyb1AwdkFCZ2gyZ1Z0MzhQSEx4Ky9RR3lhTHFhQjl1MGJwL0RtbjYvNGhIRDdsd0V3d3ZiV053Q3MzdHZlMW01bjJoQ1lJUUdTMkllVUxHdjV0cm1EMGR0VGpMc2hPaEtYSVlqQnU0UFNCYndpTWJPVU9CcEtBQ0JOSnIwNm90Z2sxc3FBZEZrWGJHZEk0amNsTkVxWGhzNGFxdGFjb2N3MVlMU3BrRFBBSTcxa0JEbmRCUjRWemdBcElwVU9CdGpiSUVPQnNBUmlsT1VPd0ZJR0J3N0xmYzZDckNSTDNodWdQeG5IdWF2TVVCLzJRUmFpS2hGa2FrQzhtTkpCSkdSTUVWQUpBTGxKL3pCWTcrZmhFbVhpU2wydFFIRHdYTWRCZG1zNHF1VW16OVM2bGN0bnErMDV5enQ0ZTN5cnowazdqL25rckJVR2JTeksySEFXbHc0UGlDYytJN2YxWnFRVW9PZGtuNVVUcGd3OS9GUUROemZFSmRhZi8vNDN2dlVmMy9zSmpMZit3eG12d0hyelhndllOOGd3cEppQTBad3VtWXM5M1ZQRXU5dklvVFNrMkdlcTlBeEM2WEtvTEVXZEFXYXRCMjhBWUVvNzcxaVZNbEE5Z2F5NXhjaEhnT2tZRXFBeGhueXZFb3FDWVlvU3BVR2s0ZjJDaGltZGFNK291TkR2M3dHS2RXeVl6T0pxUVB5U1RTMjVtOGdHN0RNQTRsME1EQjc3YXZyRGF5Wm1oWlM3UG92OTBKWTlzNkl6WmY4U2VJZUIxSkRPSTMvSzNNZjFpT2FReUE0T3VYaFJZSURkWWNLVUllUjdPdHh5RlpVTElCaUdSSThxbElFOEZTTGo2U1ZEUVF2dEQxakFuRFVpVytKNUt4dHdjOGlEUmdZbFg1S1RGT2dSRFlkRGVnSEtOSFRndVhJVG9IS1NmdGNLK2tVM2QzNEd2M001dFJyVzhOYkVuKzg1VkErR1lhaWUvV1FRK1VJd3F2dkNFcVhWVzlmTi9wbEJZNW5NVENuVHBJSStEQ2tUS1RCS1Y2MnNaRWpudzBnZ1o0SXNBNE5ucUsvcFUvWlo2Vlk1bWhsMldOWXR4ZTRmc1BTWUx6Q0hQbmN3ZU9FZkd4THg4ai91QWZEeUsyNEE4SGNBeWVqSklmYmF3QU43UllhYzk0b3VKdSs1anFtVUd3MDlSUUwzOTdwMGc4eXpza0JNa0RGZGU1YlRNQUJGQVI2L0FhQ3BPcFpwS0taR3BReUN4U0g5NVlZc01RTFppa1c1RDFGYUtVUVRhTHlFcDBncHNsMzM0M3phN3pSd0l1Szh4Qmtwd2RzQk5LbUdXU1V6NEFNWmh0N2VLQVFlTXMzZGl5cDB4OGUxc1QyUGxmMTRSY2RJNUJCZ3BjTWdVOTNnS1Q0REtMMFFCSm5KNUlxR1dkaTd2eElGSU9BR0p0d0dkT0tVdm11TG4yNllFOGtneldXcXl3NFZFaWpLN0JRTnc5UVlGSmsxRU1pYzBkM3Y5RE1uS2t1NnJHR281RDA5Q3pJREswOVIwVVdRRGNuUUZuc3QwYVhocEkxSjZOTDJHWUhtOG96SmVxN0thZEhFdUVsSnV1Qko3UDZPTDIxdmlTL2RmbHpCYUIxMFdPZFRLOU16ZVl2SjR0eUROQUxTWkFhaGtzeDhscTB3MmFka1FGNXV1UnhTU25MQ2V4VWN4ektkdkVJYzRvcnI5My85emcvKzRvcWZWLzhnQVhRK01JVU1TUEVvZWd1N21BMDdBK3k5MGR3RktnY1orUkNWZ09iYXU3UElrZGdGeFBNcUhpVis5Z2FBbldrdGNrT1pHYzB3SzEvQ2VEbGNLM0hhYkZnaGtpeEhjZ3ZoMjZQYWkramIvS1NuRWl5K2Q2cGpSRDU4eHVkVC92M1gzLzcyTjI5N3Y5K2t6Q092d2VnQnBadFh1N1hmOGRqNzBBODBuT3JtdVdzdXMzYmg4WFBxYzZ6R2xUTWVac2RuL09udUtZNFZCZkQrcDUwVVYyeWxweHNlayt4bmhrSTVFWTEwOFg0V05QMnB0OTNxRU93TWZnWnlHeFlPYlRtRHVCV3FOcHdoYjNpREdsWWdETlZQeVpla1VoNEdzTVZLNkJqUnA1RjlnVEoveVN4MlF2OHNEdjVaTUdIZ3VaNitLTWFUeHVCVXFSckJXWlpmUXF5RWdidFJvNzJpRXJLSHczYlN0Nk03RkxUNGVORnVkRFdyTUl5NXYyTW1aR1pvOUFNR3ZvZlpsVDFrTWpPVDljN2l6Rmo2OU5UY2RkM0JsZlVEQURJWE1Uc3p1K3Z4VXgxQ0hCNHVwZWVSZVg1c3ljY0ZKZW1DYTJ3WDB6N3o5cVdlL2JtQUw2cjJ3VmU4K2VmZi9ZTy9lUGtmVDRaNDFSWCtlQ05RMTNwMmU4NXZXMy95MzJIOFJjQi8xOGs3ZEl1ZVhUdy9rc2UrZDlkV2xBeDlISU1KdzVMeEJpamd4QU8va3B0VDVzd3ZhTi8vZzVyRGxSTkwxajdKVWVzU2p3U1pQLys1Qm4xaE5XVlRIQmpHc2s5UGJKazQzdjMzMSthQzQ2Zk9BYkFoRjlzRytwQnY3K21yMHV3UmFqOElPbTVwSFREM1gzLzhnWHZUVDU4K2dVUXVQaCtBQk1ScFN5VkdjS0QrdzhlZnU5L3V1UThRQmR6MHZSTkd5T3lxbzU5ZWhNWXRUNExtWWh2U0EyUEJCcG5wMVYxQXZzbjJkZkJveHNrbjNqY2pwVTkwTzVwdTIzUHJDMWFFZXJRVkJQQ3MzTU1sa3gyY29ia1lBQmlDekl3S1ViTVBzYUxESlpmNUxqNFdWaVpaSXpGOFI5R1F2cWVnN2UyZlVpZkRpZXpSOWxQemtzQ2pqcVZVTFk4U0J3MjdSVWdwL2k0MXNBaHRNN0ovbldPendqTHlzY1J4Mzh0SG5DbzJaajlMczB5ZEtKRWdLMTJRbzJnNVdPME5ISTlCZCtEelNVaUJRSXhLaVBGMFJaMTA3RmtVay9GRXgzV1h1Nk83a2RPcDdDYTcvUHJuUEt1ZHo5Y2VoNkxyOWFSMzhFQmU2S0Y3bHMzdDd2MnkxL1dHTXI4eHhVV2Q1ejJGdXplZlg2TlA3b2VLZk1USmovVFJkeCtQOUcvdFArcVcvZVN1TWdNSGtPcXpGT1FxTG5QY2xlMmtOaklNK2JTM1dXWm5NZHREdzI3Wnl3Y0xPbGN0QVpwZ2oxLy8rNnVXM3BMaUp6TDR6NTF6cmNPMFFsemhML3psdUZkU2liOCtiKy9xd1JNbW5mLzF4Ny93d2QvUGVPdDF2L1FIcWVkU0FOMGtzQlI4c1BGTjJ2MzNSbnVXQUxOVjIvK0pnTmdYMnVqRnNNUFc5UHN6TXpIMUNPMkpvQm1odU8zOU55eGorMzVQT2w2b2xjOFdNdWZ0TjhMK0d3eUNyUVNsTzc4MTJidGw1T1NKMHJzU2hzRUV5cSsvOU4rcC9Ya1g0YWJZOXgyKy93NzkraXEwZHRqNHNlZ1BOdFdkbXg4OVE1VXc3RFhhQW5INWN2R3RLK3IyY0N1Qmp3ZmdINmpyWnlRd1ByZmVIOStBYmV2SHFSK0hQWVU4OTRvNk9jZWU0dmpJNGpIVldFTUJEMjF0YmxSdEtQMHlPUHRzaGJFQVhNT3pUV3dMdVdmQjB1aGNzYVdVRFBpcWg2VVNJODlnV05WdC9yc3N6cGZuNTdtRHFEa3ZYWXllYzl2WnQ5Y0trVzh3ckZaamV3cFROOUFBMXowall0T2xrb25aV1lhM1FQYVo5ZE90UnltMzZyNUtQR3FtWGs4OExsNVZlTUdIS3prWDN1b0g1OEw1akpoN2YwZlJsYVc0MVc1cDJCNUo5ZjNSMEx2MEdhcS92MER1UHpQenJoZjFpN0xURTFaVitPelRYNkRrYVYySjIxVnN5UnRKdzdQdEZpYVpIY0NQbmgvTXVQME85YUhqU2NobEFkUE9UZVdEQzZlLytyL2p5emZ6NENPL2YvejVKeTZyMENjM1dYSElSR0R3ZXY5UDAvUVY0NVN4cHdCMFhvU210VmFvbEw1WldUcUhldnJzTXE2aHJoZzFSS2tOZHdlbVdxWE5OaS9HWG1UcDU4bVFHZXpxakxjcUNQVVYrL3FHN3dlWXQ2MlZMWUhJYkJKQ0dnYWdvVHVVSkFRNjdWd01MRDJBWTRiSUlKZnBFbUNJdjB6eGoxTWlCYnhFSm1ubG1oR2VLRDNrR0ZZWWtoR1FmMmFvcDRCWldaeXpNdU0rY2loQnFGSnFNbGxtWmJKc2pHNmxPSVJjNHpqMGswTmdNaG5NWlpMRm1ZRllob3ptdlF3RFVDSjVKczQxSHMzcEhnWE9ob0VKRG1XS1BMTlkraHdTazRFTVZ3RFM1YkNpVjB1TFl1cURPQmZOVEVnWkRSOU96SWJsT3BUK0pQTmVucVdWb3Y5VjRMOTVLZklaTW1kR0o4WW95L1hVa0hFOFlzQkRKb2VjNGlIaEFOeUJvVnMrV1J5WTdPOE5qS0l5a2FBRUl0MVRzOGprWldpVVV2SmVIUy96NDNWOVhrUmhqL2Y5NHhhQUwva3JGNWRQMnBETDlOUFZ2NlFHbUdMRUNkS0VHdjVWQVdHUUlVdDFBWmd2NE1OQW5pcjFBWDNFU3krUVEySUFKQlB3cUxDaUJCcEM4SUxQQUtqTVhZQSt0TndDTWxGVURJQW13RU9pckF3b0RyeVR0S1VQTUpVa0tTT3B4YUpTaGtwUklwVFlNUFRUZFA4ajFPbHBCZFZVeUExSnlsQWFCNGlpU21Bd0pLbW9BRUkwOUN4RkJXUllpdWxmaGtMZEZaK0pCcUZjUlhvSG9mTXlLMmlZWHBKbFhTblB3THZZbmhwT1ZKK0NyL2JkdW13bU9LQUg4RTZDQWVWTWFFUERrQnVHTEpmTnlVRE1FaG5RUDd2UmNOS1lyT2dnbnpJbCtIT29GSGNBenM1Z2pnZGJVRStId1dwdW95V2FXcDZDTkF4VERrV1JNSzk3Y3V3REdXYXJMSjc0dXc5a1lTaXJ4ZllXWmJKOWZ6RHM4TEd6Wnp5QllhRnh5bHRFUm0zb1FJZWlJMzJRdlh6NFFOMlZsS3dKekdnWWVNeFhqSUFXWWNKTVFrcDM4dzJmL3dJQUV4MnZiQ2lmbFZEUWFFaC9EZVVwTUFsSnN3S0NENGE0QjhBZVg2eUNiLzNIaHNzcVRUWWJRc2xMZjkwQXFITUM3TFhsZERIUThMY3FBTWcydEVVbUl6RUJsUjd5RkVWRGx1dUprWlhKd0dCSWhtSU9mYzl5YXNDckV3Zm1XOTRBekdjU290NjNKZ3lTdjk0N0tKNnF4UXZJVmd3WFMwc21BUUZrS2ljbEdUbHdpQ2dBOTdvSHdLY09RTFhQSGt5dlEraXNRbk1nc1lEclJRb3dHb1pLQVEvczA4UndKSjZFRm4yeUxETmVoVkV3ZWN1Skt3eDhJQXZ6bFhrSWhhSG5La1NnSWEwd0JBaFZna1pGM1Zia1hRY2xFdVIwTXBMbFpzb1VudVNjaUZJRTF0MUNTcTRGcTZDUnVZZVk2Q0dQaXA5WVVWUDZJT1NIN05MRXl4Rjd1cUlUa0V1d3NicytaUWszcDIwcFd5SGRTdm9WejZ6SmpBd2ZBY1d6L2lNMm81eFhkWXNEbXEwYTg4YjlqK1kxNG5PVEkrV2NmNVhQcU1xS2Y2bFpKMVc2VEdGVUlZRXpmMXc4Z0E4YStaZWhJTWJRdlhMVTNSd0hKVU1scVN5UE9nNjVreENWaTA5aXBRK3VvUEJaU3I3Mi8vdnZ2Mk9JK3dIWXV0Z3hhbUVMVi8vUWcyUXp4RjExTUFvNThCUm1hUytaTkFUQk5neVpSYVY2NWxDR0xLRW9oOXBMNWxtT1E3cUhITXRIenQvNEJrQU5vVXRPWG9BaGRlOUx3KzRESTMzZ1pkaUJDcDRBVTdoWFJRTHVGY3JtYnVSUllKeTErSXc2L2dnQVRhOGVuK3c3dVJtb2hCdU9NTVJxVElCVlBLWExEa0paQjdXakhBS0RJTTEzMWZZeml5WElvZElua3lPR3ZQd0YxQmdFd295T3JGd21qWUNjTTRNUVNLVUxCNUFUSjh3a3BFNUNYZkk1MGZVQno4V0lhbEpLWENTemMyYmc2VzVaTUdGR0lYL3pKalhzSEpoemNZRFRWL05hQkVxWExRQ2N2VmEyMGpKS0ppYUlLZkJvWnBBQzBqWEJaRElNaWFXNXAxUGdqR1B2SVNqRDBMTW0rTEdzaWVFbzlHNkZSZzBFUHZRVGhrSDh3TEEwNU8rYitGdG42bDc2SU1QUGhLbkJpNE9qZmtabFNqMUk5cCtqSTBienpRS1dIdkdJbHFHU3ZDdk9wYk10bWN5cmxrSU9MdWNiU2lzMzhCeXU3MGMrNEhINWhKZi84ZVlmdlB6UEwvMEVpYTAwMTZVL29wb0xNWDRIZ0hHeWRDQUpuMUFnSkliaFZxTC9vbEVJVFFybldqbVVtWnpGUXVLVlFzQmxFU21aUUFoaHlKUnZkZ09nRGtxQXZrZEhXbnJPVGNNQU5OUVNBSUFjT1lkakppVjlOSFEzWDNSZ0RyMUtld2NiVGdYY0EvelMvcGpGM0E2RzV3ZWlyT1dGU2p4UnprUHNzTGR4ZXFnMEpuMWdkR1NsZEFFMW1SbUVSajdLSWxpVXJXUmxxOXlZTkFKeUZuTUdXMXlrOUFJNUJBWlJQNnpTQ0hoNkZnY0dReVVDaENjc1dhMEFabnR2YnA0ZFZKZWhNR1F1OW00WUdseE1vVU1XcXk2Qjd5WE93R1dYR09uUVRLYVFIWEpLMWppakRrVm1oOHhJUEFjNU1aZWJPeWhhSnRKZkdvS1NST2pXTWdiUC85VGhhSzMrVStmcjgzclYzRmQ4WE9PWS9XUUd2Sk9PZlFwQmRobTY1ZFBGeFl2OWVoeE4zQ2FOS1dzRmhCbHBxRnd4QkNNK3lDNkg3b1A1NHRJZnIvM2pIL25peFQzVHdYT1RHNGU2QWNBUVB0Z2YrdjRzSk1hak1oR2dEQnBzSURIa3hxRmtER252SUdBTWZZUGJmS2k2TGdNT2lZeUtCQmgxNkxuVUt3dWhiM1lEd0FtRXZYY1dRaHhlQ2x3R2NWNFVDWElJVFBDblEvRGhrT25VeTBvTzBpaUV1dG1IelR5NVYxSDRPS1l0RzJDZktwUmxDbzNBcTN6Y3YyeWpKRDJyeEk5bHVkV0tROWQ0MGd2d1N0MG55M2dKWUxoZG5nK2V3dXFabWZOUDlxejBVSmY5S3dwQUpzeElBa1J2M1NDTmZHUTRBU2kxbnI0b3Z0bCtQTEtUYmhkRG9jL2NUMlpLNTBWWm1mc081TGk5VzZmUHNOUDFFMk5vOGIvQW5SVVlIOUNoaTZjNFpvSVlnV3lVUXhNbWg3SmhZSkJ5dW40OGh4OHdsRUhPSmFQek5ndVUreFlBZFhFRGdHLzl4NVU5WHY1SENmeEJRTTJ3SW9mWVk0T3NiS1BGVWdCenFlaW1BOCtadWtha25FYnBXZkNTZGJzczUzVkhGVXVUNFExQXFVYVprYnM2Q0FBK1NxRW5HWkd1QjZtNkFsVG1MREpJcDVLNXNnMkFROTNUS1lwMFlRQmlHdnJlbTJSRm5JNGtsUUtnVHZEYXZ6RCtqUFhYdi8vRVB4QUdocWZwMXkrZlc2WCtzUlhzWmE0VWxzRGVvNVJSRTFJMFpBbzBsdGk2NGpEa2V0WWx6cm5PcUp5VHBlY3gyeDR1RTBWQ2toKzlMQ0dOS29wcFdlbFBQVm1XTmQ0d29qUWtVTHBySEVzTU1uY3lUL2RjZXNwQmlXSWdJQW1HaXhtVzFMc1NobFpXSUptYUdabExRd2RWQk5qTE1oTDNVc2FBamIwWjlTRGJDNGQwUXNnQkZUUXZsUUFvMThlenJMVUREdklPQVZId3VjeHlnV1BOT2hqR2V1ZnhSQ3h6T1o5VGI0eG9sV3VweE1ScnJwbEhKN1pIcUR5NlIzZ1Y1ZGt4ODFWdjBoL05kTVN2OXYyb2JsVDNMaitxNytzNTh2VGNGWTNyUjdqMHlXUm1ZRmlTS3BTam1jR3NBOGwxY0ZKTUZxdVdBOHJjWWRScTBOQkVwSUNiQTdPZklCYWZzeklURERWMEphdDRMY3B3UmZUbnYvOE5KYTd5RWNYci9lRHhEM3ZoTzM5QWdzRUdEZmE0cHNKRkYyVGdzU205UzlvT1RNUmtLTjMzVk5KQldYdXcvYVFKQVhtVmN6MHhCZGk3SVlhNlBnd3k2ak1wUm9CS3Y3RlJHd3hoRDRaNjdBbkVJRXFHTXFhQWdRQWJQMUNCNGVrR2dHSFBaTnBiN0ZYcnRlYTNiSU00RE5VWTFrczRhOFFJU093QUo0UWZTNFNnZDhFRW80RjFjZlo1TXAyRzJZVEw4a2hqNWJ4TGN2OUhUN3dLNjJxYXVUR0Y3b0tKMVNTMFVpV25sd3lzZkthTHpzZlphUWtyUHJrSEdLeVRxbGFtS1BvOGNIL2cwakRQdHltWEgyS2w1elBrcU05TFQ1L3NwZmp0Qk96ZlZ6WE1LQXhmMWNuSTFqdDVwdGJJZitoWlBpOE4xZjhMeEJXNHZlQm5neWZUWVpZZE1sUEt2SkV5eFFValhDYVc1THBEbVY2UzhweEhJU3NGbWN5TVNoRGNmWnp5SFQ2d3hZWmNYTitEd1F2L2VQTVAzdm9QVDVDTUF1TUtDbGdWV1F0N2dSRFNrSUN5akNWendaeFU5TjJBVDN5bGFEbVhuTmh1QUJhbE9mbEpCblU1S3djUGU4cWtkTWpSekpTSlRqSkZlNFRLL2tsaUR5VTErSW43VnpDNDhRSkpYdWxlWW9UUGJzY3ZKZGFTSWRNbERtNlpMeGxrdWFGS0NMaHRjSkJHUUdJeWoxMlRaVGZabGdCNm53STAyU0V6bE9YRXdIakZVQ2dNSjhxeXBkekFZcE5laURnblppYVh5ejZCR1UxUVBLdUVMQTU5R2RXTWdGSXlneEJJVDVkWW9CUjBxK1BCSXZFTEFidk5odk51cy80eEpzK2EvWGoxekhpdGVmK2ozRkdXTzg5eGRzak0zT0cvTTNwcmxYaXRkRnd4dmZ1UzNlcjJMYnJMRFdRR2RVdFMvWlRSVEdaR0RnTFNDT1NRR0lDSFpUVEo2YVduVjN3eU1WdU5HUFNHTXhQWFJiLzgraXV1N1BtU09aNjQ4STZKMzM3N0RYdGdYQzloYThwKzNlODNBSWhpQTBPQVBRcHhyNG8rZEN5QlVoajFSMHJRYXlqZ0ptK0hPZkdSZjI1bXhNQkhJUUhZbnY0Q01DcnpkanhhbWMvd3NuUjIwUFRvTEVFSG01OUlqRWVZUzZiMktQTTljN0VQeXExRy85RkNYYUEvQ2VHVS9mamhWTlQxd3F5TGNwbVpoTEtZRERzRUZoZ3BnMTR5Z1JVSGFRU1VQZ0pRRnFIMHRjZlUrTEtBWWU0aWVTbFRKNVd5TlVsZVV4TmdiMlV6Q2dWUE5oL0k3REJpMEFxZFIvdlFHOHRoN3hWSDVxNWhvak9MV2Q1WW1VTFA5VDVIYjhtQWowd0V2SHJBYkNhUUR3eDlUVHg5NUQvUzU5d1ZKYkpZS0lqekNvejY4Ym9qckZ4VUVaWTRNd3F0ZzVlWXJKZGJWNzU5WXhjUDRmVld2eXRsWHJmTXZHbkRaYmxNamhnOW9FWUNiMzZxT1k1dmxza2toeklETWNqRHJpZG5HUm4xejZ4Um9ad2U5S05FOFk4QjFzV2VmWEtQMS82eDRiVi9YUDIzeTZTUEgzSDF6NUQwTEFkU0cyVEFhb004aG9FTWpBK2xuQUQ2UzhEaHQ5MnJHUWQrUU1WenNscHRiL3U0QVhDMUs5NEhvN3EzZnF1b2NnV1lycUVEbkJlNUVBUklJVSt4TTJwR0lTMWxtVUlaRFhjTTRYR0IrL0huK2dNcktpU2dRbUlFY29nbDJEbGxYYk5sU0M4Z0s0Qk1nZ0h2YnRKbmNlbEEvY1JIaGt6MzRZYVBOV3VFbXFHbk04QmxvZHpxb295R3JCaE1OTXdBV2R4R0lmQVFhQ0pCdkNYM0gzSVFtWFBKU0ZDQ25BWFpYWE52Mkl0bW43SUhKMGNwdFBWQ1paOXVsYkhNSFp4UG9pMHBGTXBXaXd6Ynp1Szcvbm42STJmV0N2NmFyenJKaGdvNW1GY0p0Ykk0TTI2K2doY2Rockx5Nks0VS9qNDB3M205Y1h2dlhQZXkzS1hnMW5wa3R4VUdKVnptbU5WWG1HQ2l0blB1eUxOMHlPbVo4Y1FjWFdIY2dlMnRNT0c1U0lrandFNjQ1d3Y4ZUhrVVE3em41KzkvL3p1di92bVJBRGp3bFZOYzVVT0FEYlcwOGRLZlE5WUNGbWc4QnZ2emcwSVNPSEN0bEFKUU9tYmkrK3d4WlJYeUhvUUQwTERNRWluUVBuaUJnZElBR2dabmhhVitJVUFWemkyREI2cU1UTVM3cDVNanpGTU5XUUpRMGlRZkVtazhKUEdXMWs5bENyNThhTzltODVZbW1DbXE3a3JWblpCbE9rbGt1VzBqeDE4REdtcU5iTjJ3N0VxbFBUckJYdGR6V1NpM3NjS2duTnV5ZWs1MFdkQ0hJWlhZKy9SbEtNQkNjN0UwbExraFE2RTBoc2N6aENXSHhKQkZjK3l6TEpOeXpTWWpINldVb1BTaE1vZkFJS1ErT2N5MkxpQnV5djB4bS9Valp1US8wcXR1RUR6bXc2eVJwNWZJeXN4QUQzTEZ6WjJKUFpITzVPWG1aRTVmWkxKSlprTGRSZWVSYk9RLzBoZmZRakNVL2ljRWJxL1BZTkt2T2srZTc2ZDB5R1JnNWtOT09taEtjcTdKMGM2Y1h1YlBHaFRLWkdiS2ZraG1oekk5azVtUklZR09lK0NWU0tBOWJnRCs2cC91eFh1QjhNRmZmUE1QSEQ1OStnU0JObHdzNlQ2Qi90aHJVeUV3d09SRk9xQUF0aVE1Wk1yQjRCOXU5Wno5VjQvRUN0SW44eEs4QkN4V3lXMWtCdjJBMVBUWjN1a3pBRG44a2ptTVRGUXVnMUhLaEpkSnFTbWpKVGxLRHp4eXdlandCT0RpSG1yL1RqVUFOdHpSNGdZQTZYUnc1UVFqc2RTRFIxWUlUY1NYeW13b1JrQjk1a0xTQ0xpNDRTZXV5VUx6Y3M1ZzBwakV1VU9FeXNSSjNhQVBROVVhT1lOMzg1d09KbWhLSzVCaHk0bVpRVXF1R0h3NHZKUkp3Q3JaeEtmSnV0aURwTjZqbWFIZU5kbGZEWGlvVytrRzNDTXZ3K3cyMjgyN3pmckhtRHhyOXVQVk0rTzFKdjByNUc3TVZjaXRidUhza0psYmh2OGw0bHVyeEV1WmNFSHpuZ3QxcTl1M2FLeHNJSk9aOFdiS2FDWXo0eWJFMGdoSWt4bUVGc2xTSnVmZ2N5a09ldm1zSkVwY0FuY2c1cDVYLy9nTEFDNzBzZUZpaVg4SDhHY2VZakhsVUVVVnBUK0daSUlBUS9MYyt5TWw2Slg0VFFCbWdYNjRWODhPMUZYWmRra2lCWWJIVzRCa2NRVjhsYWg5MjEreFYvM0VPRmRLYkJoZThoSnd1VEUzL2tjZWJ2aGpsVHdGbE9WQUJ3d3ZSZmIvK3ZYVzE1KytmUDNwNSs3YWx6S3ZwM3RFREU5UXFPc0JGUklabURDVURHQVNjdGtJSXgyaHkzNU82ZFdNNlhPUzlZSFBjOVJxeVpkazlsOW51dUVoSC9rN2o0bWkvMnE2aDA5QVNBZHp1WjZxY3NzODFCb05aWjRGazFBV083TTRMMDhwOEhRMWMyK1UreWtrejVKRUZJOXVhVlpBT0ZJcktaZWFQSkZKeXFLWTZ6L3htWVJDaWRLcUpQdnBQekllSFFIbzd4MkNVWUhYOE9obDB1bVROUjZhNkkyazI1M2ZUaGd2QU8vdG8rSGdQSUZOVkk2ZFZ5TzlWclROSkY2VVczWGNtNnhNNG9uU05aRzhMTlRhM1E5d2R6aG5mTUJiWXZid0hpbGtLYVNjTE02TVdvaHJ0OXYrZi9iZWhkMTE0MGdTdEdTTjNlNmUzdi8vSStlYnRqMldkN2F0eDBaV29BS0J6S3dpeU1OemRTMEx1Z0t6SWlNanN3b1BGa0NRNTEydlNJMnBQNzdKQ3dPemY5d2F4UStBNGdLQStyZ013QUlRWGl4UkZhWmU0ODBSWjEwWTU3UC84L1lvejhiQkdUU0V3TkFDTDNVY2tRMERaS1JoeUxHZUV5M1hzUkRBeVpPYVZMV0l3N3hKODBDRytQb1FaNjhuRlFSdDdUeVJpSURaSS9JdlA2cEtLQVo3RFBSVTlGZmVoejRUUUJEa0lYdDBpVTJMdWR5Nkh0NnpDRzBTbFVXQ2haOW01UVJpRzFVRXhMaU80WmlJeHdJa1ZaS2FnelczTFh3MkxjTnVCeTkxaU1jNktMSEVManQzUjlLWUhaOXpqWXZiK0VyN2YvL2poeDkrL0FtZmMyRjN4eWNDbzlnUlBBTEpSNXMxcExYMTVmQlVCSTRLUWhDZ1pObE00cU41Yk1mT0ZaZ1VtSUtqNFdSUG5jaWdQVkIzb1pIcnB4RWhUWTFLMXBsajdyczNzeXUyRm4vTmRtM05UQWpYV0tYdUVGOWxZZDdZR2VibVVEZ3lxU3FCUWxTbkk5Zmlvb1hBZmhjeGFxVXd4cFg1L2llRUJnSTVraldIYXlxSzlXRHRDQXR4aExFVkdlbXVteFRmbEw4dThZRGFPTTZ1Y0pNeFZkaU9FdDU0b09PVlRObmpGREdieHl1TzY0U3dxVnhKU2pocDhqb3VFQnpIMlhRdlJlNnZvWmJDMVV5Skhtb3FrRXk4SDllUVI1cDVVMWFGZ1lEV2JxdHdMbE1zSXhaSm5vYkxNd0ZEWVZuUDAvcDl3RXIvOG5SSUgzcEI5OE96eUhKemUwV2loY0lTeHpGM3FXODJWam9yUHVQV1VlSDNjOWVDZVJtZWx0T0JlRWVZZFordlo3OW15SW1JaGFPSlhoblZCV1FxeUJrSWNvYmlWRDA1RlZFY2RsN1dPams4bk05WTZIRStjKzBTeTR0ZUxxNDNHS1U4TXFCY1hRQTVsZWZaQTAwWVFHTDUvYmZmLy8zdjMzLy9QWC8yNThnNytWUWppQlQ0YUNBdUQ4YUR5Z0F4K2Z2Mm16Z3RoNW5XR0NiUUFNN3pObE9UQ1RLVXNjWWk1RENHSSt6aEYwM0RmdklCamJ6SVFTbXR4UkdTakpuOGhKbW9DenkySEVMZ1pTRElHTGtSSEY2NlJoTWUxTjFzQXNSaUJMREFtTEVoK1BGUEFJNXhQTHZ5K2RZWWlBZDV3UmxEYzlBNHZqZExTL3JjRjRiZ21UVDJrREhXR083ejMwaXFjQnBIRERiZXVMOFltd2diNDNlLyt3RnZwZmd6MTlnZTQ0a2dWaHZlN2hCUzVkVUxCTjVSbmxpM2pDb1ZZZHpmanIzT2RGcGtUTWhTNm4wOTlKcnUwcnpQZEFsVWxPc1poM0lDZFR5ZmhsVFEwMk9iQ2NwR0hib1dRUmp5UGhMTDRtcFhUYmsrWnFDSDJweXI2b0NUY3hodkxLYVZTaUNhTC9ReGlVQmhwWFAwLzNxc3ZaSnlWbGxUVDgrbnY3YXBXL0NGVWg3cWdMQ1YxWjYyWlIxT2tQZHFkMFIrdFJ3T3phY08wTmlZbjVyaFBWdW4zZXQ4WDIwSkpmZlQrMXM3UHZmenFpb1pLb25JV09meEYxa09JUXFISWU4RzdBUExJVXdhUnljZHdQbWQxSk4xTnFVNDlVUXNmdWNIYTl6NkJCYzNRci8vKy9mLzMzLy9OMERRcUF3REM3eHEwc0E2S3ZrNWJ2eUhkMzRDUUpoSVhnOG13TFNFVkhFeEtaaFFqZ1RYUllnTStLUE1vbk9OKzhJdFZIZk9mOVJIR2JXYUZ5NEFxc2c3RWRhcWpRSHBpaEIwempzckdGcEk2dnFyRVN4NDh3a0RkWGpWaGNOQXBXS24vK25ISC9FcFFGekdqdXM1TUVrV3gvWHBVbUh1QWg5ZVIwU1cxTVpJc1ZXTkNOWTV4WEZWZWg2dXlwSTBuNnBINlZacUl1UjZ4dkhZNWxyVlU4bUJqSDRwTzlONUxybGN0a3ExTklLVlhCSFBTNjhFWHpiWUM2aWw3Z2lweGlhWHlPSUFnZTNpRlFHaEJrcmhwckZTV09FcjJadDgwRllLTFo1a0dlN0RnaWpuVkVKRjJrUUVYV3BGbzJEeXRpQTRYcW80RGlwdkVyelpsR2JoWTV5Ym9hNnBTK0F0WUozM1Z2aXZobFRIWVNJK3cvbmx1enVyZWxCSm9xWG1nK0RocmlFVnFUcUprNXJPZjZPcmxhcGdSYndlMnBWVGtScmxTRG93VTFOcW1QbncyUjRnNFBBUGZ1R3hIOXo3NXlNK21BSUJKeDlya0JXTGRIQmhDUVpuLzlOUUpjVFpGRWRlS215OFlycU84MTNCeWMycFN1NjNHcld3Vm43UW9xaDJFR3JJVjNjQndCSlJ2VzkrOWNkQjluQy9BYXBPSFFKbGhKSDBlUzVNWjhRajc5aVB5U2N5ZEE0dWNLY3hCVURpdWhqQTM3YU95K0h2amgrN2hRa0N5UW94Y2ZkY1pnOGl3M0QrU0hlSlNnM1dBMUNHQ0t6RTFWcWE4eXNaWGdkckZvWExZRjQxWlh4cVBiVXdJVmRENVRRalJwLzRKM1ZZd1BIcW80Rm1KVmRhUlpMeWE4MHBlMGFybUdFRUxvU2tHWEk1SUZaZzdTbEVIS3lCRldIZXVpWVRhd2h5N1J4SHlIUnZ0WjFmdmZjUjVsSWZVeE02RDVGYUNVTldOU2pYUS9Ha2s1cFYzd25LNHFEYk5mdzM1Sk5HQU1OK2VZZDRVNXFYVlY4T2ZGUGhJZU0xdU0wVUZVbXBLMkdMbkdjL3A3bTl5U3VhREJWekJ3SDVEdTBPSjBtbGtOUlVrVzdvdENDd0lzb0NGelN4WUdhUCtRL3VmdUlIZi9DVC8vSEpBQi9zR1Nya3dLUVVtaTRPTUpiaEhhOXlIa1lMT29tRVJFdk55Z2VTT0d5ZXhYbk11KzJVdWhhVEVvb3ZJeEc4K1pWZUFLaVR2Z2NRVEloM3htMTBQakhSNUJUTWFjbXVVWlZBaEV3T01ZUnBZRCtaU2JJaEhUQkp4aHJrK0JMTXVPUEZxd0ozTVVTQ1VwQmhlWVhsU2R2cFdGZ1NrZUhFQ2dJQmdYVTZFM1lscjhBVXFDYkYxYXhHVGZHdWVxcU9jcm5Ca3J6N204Q1g2MWRHS1RDTG1nOE5yM0JESG9sTy95cXZxN0VTUnhCL0ovQW1qZnJkWGVDbzgvQ0dlVmxTQWFTbElqMmc1V08zZG83YnE3emtlS0xFVEluQUoyRVZVcjFlUnJMdmk2L1NKVUUxWFprbDBVVWRSNGhYUkZKdk1aYjZYK1pOdVBSaFdVOWhmdVhBVjlLUmw4dllCOG9ybzJ5T3l3N1UwdTZERXE4aEZTSDVQbDZaZHhCa3FiUVZXSEhGK2duRWJmYWlJcFJpT05hWTkyUFNEeEQzL3RIOE81Lzd4eVBRdjQvbkgveXNBcHROcmhFeWdGakZwd1IyamliT0F0SWFyb1NvU2RlR1FPYUdzSEVweTd1TWxDczFQNTdsNjcwQTBHYlFMaWdFUmdMYmdjQmdrWGFITEFVT2NRMnBRMC85SzM3c2R3aVhqZ3lrRUJsRzJLTkNYQVR6SzRuWXY3SFUxT3h2OEVmSGFiQmdraDJwSERMVGVoVkltZ3V1bUsvVjAvWXUxY1ltbVR3OWYxNDlLVFdTcGx6ZTNKQnJJTWlJWlM5Y3BDSmdwbkFpVk1ENmpVdk5YaEdrUy9WVXpoMms2aERCMmdla0Jha1AxMzVoblZxRDdNckE3UlpTVnFJdjhVRzZ6QWhta05NbWRyNVdxZE5YQnBNdWhHdzA5OTRram1hUzJ0UkRseXVzYkRGZFhLQ2lLaUxYYjhiTEk5Q09hdXlaeTRuTks2bHFsb3E4b3Z2NU1XMmRBTFd2dG9SOVhXMUlBbE9UZ2dCWGVSTmZUUmtxYVNMWXlQa01ORjNpOXZPZlNrTkFBbE5UOVNjOE5jL0U1VlFEbC9ydU5ObVV3aHJ6SEV4dlFNYjNmWEVCZ0YvOWo4aHZ2NEVEcjFnb0pWdktRQmhJVFRHVndoSGFZbnBINEtJWGErSnNpcHdFMVhURFF4ei9BdmJOMU9vYWpJY2hYOTBGQUN0T213MkQ2d2lhb0NYa3ZSc2c2YS9Ha1RTdDQvUThiNUN6UE9tNFFuenNOZXJIR2dzNkY1OER6TDBjZ1NDd084Tjc5R3dqQ0pjekVTRHluV0Zwd3g4S1JvckZkd0JhUVZTU05EZTFzWDRSN2dneUJNTTVqZk90Y2hQZWt0a3ZaWWVSRkZLVHpGYUtYYTc4bGd5ZE5FUUtKTjlMZXMzZTFKTmNTcjFKVkRtczAzdFJFUWpXd0UyVzFyVlNXT0d0eVAxSzJJc3E0ajJ0WGlFTVQyUXZ0UklxSXJWcXVGVDFFcUZnOHJZZ09GN3FwcEpWZU1wU20rdkFaZ0tVNnFscTk1RjEzdnNhdndabUhZZUpuS2ZOcjZHZnM2b0h0U1JhYWo0SUh1NGFVcEdxa3ppcDZmdzN1bHFwQ2xiRTY2RmRPUlh4S0Q4dEVLOUlWWVltWmppY3hPTzVmeno1ZzA4REVQaDdmQm93cm5hWUZBZ1doS3NKbTFGeWtlRHJXa2Ixa2xPWlNPUmsyazZHTFZCR0lueVo1czNzbzBkUkVidm1JOW5XbVgvQXFDVjluZURORVdIeEhBaXViM1pIK2pJOFVDQU5yR21JbzJZeVVBTVdUUEd4QmhuN045YU9zQ21kbTBhSWxydWRGVWxxRzhMR2xVVGFKc0tyUWtWV3NSVy9HVnNEaVVRMXo0OFBZbXVVcDloN1gyTjYxT2ZaZHlwUG5OUmtiUzM0V3RuM3BlNHpYNnZrdFNpdkNyWTNWMk5WT1NuMWtHbFdpZFkyWGR4dEZWTkI2VENsbWpCYXhBbS8yVjlnQkxnVlByNytBcVgrVWlrd09NK21yaUV0VWtGUHRQRys1bkx4dlYzMVc2U0NTYllTT0VGUE5EVTF0eEd5TWpEangxUUhDMjcvNDk0L0V1RlpJQ3hBSU1LRk5seDhJQUpTd0xXbU1wbWVoUnhISHRvSThaN1dMRldoWmdGU3dScjRGdVNwUk9wYU5Xb3h4eWNBb0hJQkk1TEZmM2VYVWR3NW9Hd3FHTEt5M1FDTnJzRS9QQ0xMQzRkQUQ5L2dwTGtzMWFDRGZTM3VMNDJTSkFzdkNkSThYVVByYkY1M1IwUXhGd01IN1p2NDl2cDhzNlFzY0JsZ0twZEZSVWs0UW5CVmdIQWVHRUM0Z0krRlpCSmcrMEt2STdRVmhhYmI3bFVVY2xXT3ZGV2hKb1ZDVlNibzVKYm1pWlNMNEZTTmxtTEZFZUlwWnVDdGVsWmtyeHcyOUFjU21zeEZFRTB5cVROcEI0ZWcxbVFxbkxGc2lsTU5qMXA1aWJ1VVYrVmU0U3hWdTdESEtrc0NVMU0wYVRxeUlvTkRWNDJDQytBUnFNb2tPZ3djQWttWk9nS1R1TzgvcmlRK2s5TEZQZWJZYjV4OXRkdllRMkhXMy9idUtuTnBrWDkyLytJOEcwcU5jUUNxSm13ZkIrR2JNall1S2JzbWkxaEZyWEJHZlh5OTFIKzR0VDZlK3htRlpaM1BpSHhKN3MyQ2I5SlUrWXF2UFZOTUdpdCtvcVZtamVKeDhaQm1CT3hBNXo1VUJjRjA4STR0Y1pGbHlDVURBMUs5RlJFL0dZbXBKc2RaVFVRUlNlTWpnZ3pxa3p6bU56RStveG1qcE9zQkV2STBFWC9rOUtkNUFoL2poblJjOEZlUEVJNHYvdjd0YjMvRE5RQ24vakhSSHptZ2Rnaml4LzdIZ25xQThKS0F4Y1BHL0UzYmlueGZreFpGZGhNOE1Fa21nYmFROEhYdk9DMElCWXBnUkZEVXVmZlFNYjFzYlJSV0JBOXhHL3pVcElLdkU0SERDQUlOZURrNEtKdFJYOTBqUU42WnQ5anE4ekFhU1I4eWtoV1MyQnhFaldueUp2MHFJa1FHRkdKN3pFa0RCWEhBd05BVzRnYWpTeUNidnE1Vk1iRGJxejF1WjFmTkhYdnRhM1ZhY0szeFRzLzkxQzFUb0F3VmR4TVJIMFlOY2E5czBHUi9obkduakRzYzFmWVVXVkV5TnYxdGxRVjY0TERQcTNTSmZ6RkRWU2xqaThnTG94TGNlOU4rS0FMQ1RhbDNsWFEvM1c5TWpua2RoOWhtditUdVhDdjZKMER1NytvdHN3WHZkSnUrMXZlbEFBQkFBRWxFUVZTQmJUaEF6QUVvMGhMdTZGZU9TN205U2xRNVZmTTVKTDdWR1AyQ01oZlltTFJnU2c4RHovMWp3ZlFHRndPZzhjSUFYd0pXQ29UNDFFaERKTUxLWU9ES3U4ZVY1U01pK3hRYnI3SnZPSi9xT2tmL1U5TjhKZUljYnExaDBFWjV5UmllMDZ2NnNaZkE1bHFnd2htbEpna0NIUWRJYjVMaVVZRXJZK0tNaGEwbURjUzJoa0NLYTExeElBbXNTSnVGbWlMTDhGeEoyWFZFKzZDUlVxZ01HZEt2aU5lejBsRTRqVXByY1VVNXZ5MUF6RGNhKzZSdEdTa2tkY3E5eWZXUnNsMjJWbFdSVlM3WEFXZmZYSW04Z0h1aVdtMUNuTXhjaWJBdklJV24yT1IxcWRkY3J1RDJSczFwL3pvMk4wUmQveE9OQUl0UEJkY2V0YlFVOWVXYnRhcUtvQ3FBTjJ0cm1TMUl3WTFya3hkUkh1ajJSK3JjWktUTEUwVUZZN21UMFdjdjVGZUVPRFU1c1hGOVhBQmd3V00vbVAzSEYzL0hYSXZ6SEZ3WVNBMGhjSEZORHRja1VKWnI5OExlTHdwSk5Nb204QXMzMjlwYThQTUsrL1YvQXNDeDQ3QmlINE9Cbll4ckRhdEFJVEMwTHpwSW5HckNGYzZ6alpva1VJY2hUQzBSWGl4TGh6aU9EUmpnODhpQkFjU0xTU0tNa29pOFFtaFFnV1hJVmNtVkprUkdEWDlLeDhOaHA1TGtmV2dzNm9tNHArcFo2SnhYYUY2aHlOVmd3VFgxSG1lMVdETUxaUm5pYTYvQjhaUk9WWkdUdkFDRlZNTzlTcEVFeWNGNlZZOENFMVBwU0VpeXlhdFlWM05iL0dSUVZzelVGTDR5T0ZsWVRSbTh5MVFXb2pKYTVkYmJnZ3l2NHNDVkN6WUpMWm1nWEI0bDBEa3JPOVVBV2tWV3NZNTdxWTZ2N0hsalpPWC9LUDVzUFIvTjkrNTQxTC9hUHorU3lsU1A4OTVIMURheGx1akNXdUVYMHJwUnd5dXlqcjRjVUtUVjhJbjBUK3pvUUp1MEpwdTczUGFNbS8xL0ZZTHc2cm9EdGxGTjNRYXBtNGFGU1Ntc1VUL1d3d0EzOWlYY3pjVHkxNy8rRlNEK0FEQm1OWGphR1FobS8zZ1E2SWNmNDdkQjZ4TEJjNkVYTFJpQlZYWkJ4RkpVb1FTdzk3WWg3d0pWb1FUdklDSy95L2lYdUFEQXlHTG53NURSME5vSFVhUFBmWmV1WTQrYis3ZnpuZWJLeUVFWE05S0ZOWnVwRWhjVWgwd2NKUHFLREk0WlhnTlFtVXdWbkVUMlhpa29Tb1VKZVZhQmdUZDFLbzJJWjcvYUQ0NTNoTGREVVJNOTFhOGFQcEE0d2JtT3NpLzR4eW1HUFJLWkNsaDc1VldCVVlyMXB0czFrSWdIcGtSc2pucUNOWXpMT0Nja05SbEMvWGFkMG9FREJDSTBGRUtFemVvVnJUVlVValZjc0kxOURhd1ZFdkYwNnJpcWFyMENuUTlRVGRndXpxWjdxYUMxMHNtZ2l5SU1USUxVbEVJeUZKS1NWcEVVK0MvZS9HY2NuenMxMytIYzJmVHYwbEd1VnJDQ0Zaa0tPQ2xkTHFsYXBrQVpETjgzWjRwNFRVeDNQZlJXZ3RSa1NIQ1BWQy9GMDJFdU5Sa2JBalc1NXExOVJJR1BLVDZtTWJqcmowZi84ZHcvWi8rWStvTURGeGJZb0hsSmFHSmhPS1k5dE5rODE3QzJpMGZKOWdpQUxZNUtXdHhqUDI3WEZIZVFqK2R0RmY0bExnRFE4em5Fc1hOeE0ydTNtNjdMK0pCejdJblR3NUNXenhRdmZBS2dNbWFTNHhVSENROFBIQ2NVeDdxU1dTZGRYcGhLbFhIb1RoRW4xM0RsU2pTS0tLazBaVlJYTFdBdkxxbjdSazJxMk9wcTZ5Ry9raXV1OEdxMFNaT21vcVFNb3gxa3FUa3pnUjZiRWlWbThxWW15RUtxUVNuZ25pN3BwK2FHTFAwVXdxYThWR2c1QU5PSUtWMktTazFYU3dydTJ0dlEzTVM2bDltZC9CQ3BCQy9tcG5nVklaS2t2TG14cTFwTHJpa203WEpoT2NIbDY5QzVUTWlXVkRxZTRUNlErcHJjN1hpT0kvRE5WYmFKUHA3amsyUlRZVFhMSFNTSmVQT3BjQ2U3VFVFaUZZY1hvRTRMTGNGTHF2WW1SQzRaSHA3QTFIUm1zbFZ0d3RHa2lOWS8vM1MrVFdEMmp4Lzl4QVVBRms1amVPOGZkemIvK01jL1lvYnovLzdmLy91SFA4YjNBU2dMQTR2bS9Xd3FJNXF5SHhvaTAxQjV3cFh4b2RSN0NYY0tTSnozRnBEVS9yVytBOERPYzN5eDV1SWdiSUJjdStFMitWb25FVEdkVUczU2hNUFEwU2hCSENFNFlMREFSUkJyMFZwRElKWFZsS0dNUUJKWUVhOUtnVkptZUkycXlFWW55YjdjVkZJWmtxcklwcDVFUmxNNmJnaVhRVzlxQ2t4NGFycnlSMnlYaGUxTnlGYUVvREtLWDQzS0VmS0NJWDNFMXFvcXNrcmhPcFJ5WnZLNjY0TzJLOWRxRStKazVrMEVnSld6cWpERmJnSmZjMjN5cmx5LzRmK2tJNUQySmZhQ1lGMS9iWDJzeFZjRU5RTzhYM2tsVjBScUc5Y21MNkk4MEcwcDc0MU55TW9Gbkl1VVUxTjROVFFia2NzUjZBaW5qVWtMQ2JoOWlkLzd4M1AvdVBjUFJFOHg0RXJBYllYRElFMXJJbFREbXN6VTlQQnFrMHlkNUpVcjRWK3lxVTU1MGhaMHdudnQ3K0xqTC84SCtYT2J0cm13Slp6eHhHVlpLL2Nsd2FqVkxyNDlOVndZZXU3RU1rQ2dyYTBDQW0zZjlVOWF5SThmRzUwSGhzTHhGRC9URVRsQ3htOW13VFBVa0oyWEg2QmdDZkNISDNGQmphL1c0M3YwMzhLSFA0U040NG82dms3RnVDdTIxZGhFNElUb3F3dFRKSVdQYXliQis5VXQ2NEhFTTcxYzZsekhhdmFVMHJFcEozSWFYcnk4RHE3c3A4Z3JFZUlMcVdaRUZzeTkvSFBlVFlxTjYwNk9WYmh3R05JNUxVSFhVNWpCZDAwbHVodndETS9GMlpGMG1GeDY5N0hqK3BtNndHMTJwTDJDbDdwbjBqc091K2V5dE51M3pRWGRVYy85aUZibXpXQmJUUXZpTGVCZHVjYzRYTlRteUZ6QWQ2V1R6clA3Z3dKZk1KN0tWY2tWVVEwYkZ6aDc3MDBSMGR3b3l1ZkdHcTZ6cWFpTWp4T2ovOHc3TmNjWjV0enBKQ1JEZ2hzRHQvK3hRQW9MSmlwNDhnZjMvbUhqNFI5Y0JpQVFzMzhzZE1INDl6Lzk2Zi83eDM4elJjU004d3V1RDJDaUZDSktkOUJtT3poMmtwOHdaMURSR25xQ1QyT0ZuNHhmem5wVGJXbWplVk0yalBpSEM0RHhNNVQ0dFNhTVA4ZDBJTEM3Y1dDRmFlaFA1dHdrdGlkTkhib2U5aENSVTJUbUh3b0FNMzdzSXBBODZoRkJ5SlNJVjNwUks0eXo0b2tmM2xtdEIzck5ib09qSnNLcG9FUkk0MW13VzlORjJxQnpsTWE4ZnJTRHdIcHdGY0hmbDhXQmhHOEE0MDhFL1B3ekRoZ0lqb3pIOE9KcUd5SDh5SXl5cWdmNFhJNmZ6ZzNYRVRjOThlbzFFdDhoUE9JOHkzRmhVMllocmtJK0syUkdLZWdRRnVMRlJYMXo2N2U0ZzZkQzdOR0hSNkFRMDdSb0wzZkFNYkpjWnRkSUNjRmh3V0NTTU1aVjJxVEhLOEdCSEtXZyt4RjdYWVRNd1luUUswV3RqTS9ZMmRWQkhPREpITDJPSm5heTRlY250T2RGTEdDTUZseTR2c1JhZTVHcXRjS1cyMklvWDFhenRrUHc0c3VOeUs2dG84RGZqWStTbTlHWW4xbXlRaFVzVlJWTTR6STZnOFFVUEhZVUpTTzJaTGVjaFYyOVI1WnU0NExJS0pYa29RQlhtcURKMjhhNkRzbENjRGFRTFJFaGlZem1xZ2FPajN0SEpRQXdQczBRYVF0NnJwZnNSbnlsZzQxYkRxa1ZOL0IyUUhZQjg0alljOXg3WjN0ZCtLdnVYdkZEbHNkcU4vNnU2Ylp2UWNmZG5qV2ZLU2Zpck5mdDk2cWxPcEo0YWlieXBwa0dDanBFSkRpTmZwUVNlWlVJTk9wTXRVd2MrSEhTMm5JOGtKcFJtRUxzZUR3TER2ZDRZL1BPanZlenVXUHBjQm9sak1oWU9aK3ppRysvaVQvcEJSZWU1NEgzSHovOEE5TjZHSmlsQU1TOEg5LzZ4UnFuSXl4d0VZZUxIeEhna2dCa1BDQ0UwOVU0aW84bmYwYWl5RDBLb1hFVUFGZFlvN0I0NVh2YkxCaFpSdFJKVmhNR2wxQ1lDNnNGUG9FSXJJdkdFN1RxQlFMQ3JPZ3lTdVRYcUJWQ0dhd3JBVmtxV0pGWlhxMHprS0dQSUl3Uy9nb3RmbVFTQ0dTL2JiNERBSloxYXNxZXJ6V0IrUjdFbnN5TmhSdmRtd0xvWXYvUkMreStHN0t5VEE0MjFtVmVQZ2pIRmh5YTJwcGhISWZGSUQwYUZxYUtxRGxBRnltNlEzTCt3eDRWazV3eExSOWhsNDZReHloTXN1SERvY09yQ09oN01lZ2FSd05rdDJmRzQzWGpTc3lIell2VTJkdXpqRkNZZUxhanE3czZ3MjBMY2xuck1BbXExMFJic01hMnlLVkhMVU0xUjcvWU4vVXdOUmxQc0NuZTVSZDVwWHh5SzNNTURNYjg1SmlWVURWaHhCUTNEcHhGcEVScVJya2VHalcyUlZETUxBTURwU0tUdk9PUVVVaWlYWnFnb2MzUmY3QU5MbkhMUnMzTEZBcW9CTGsrYm55cStGUGwyYmcrRlhlWG5FYjFZZGhURzVkN2t1OVAwbjgycndJL1l0emNQNisxdGVXL1hzVlYvSFdkWHlUeWl4WHZpZHhXcjIrQ0xVMGllMk1SZTNkL1FEaHVXZUY4V3dPRVZkZXFKRXlnTWVkR0lHVHhsRExuMDd3WStINHNtT2pqUVg4UTRBSUJNMzZYVWthQW9UTGF5RTZieklIRnU0SU1LU3lHUXY3VEVKTWlkTVJRTk1Od1JyMWd2VjJRTmJTeUxmaEN6UWc1TDV0ZWk2OVJieW51b1FnMklSWms1enFWa1VCdlFqbUpFMGxnRW1RemNkcW13R3BJRXk1NjNZQTNnZUtqZmh4T1dIQXNDVlFzRU8rZzJ5S3ZqRW9Ha3NDS3BJd3JjZUZKa0hnTEttUmxlREZ1aTU5azczRGFlcEtPT01LVG9XWmxybW9UVTRTOWdSUXBDL2dKR1pUbXVCQ2VVaWhjaGhNU21Kck9ySFlsQTJsQmp4V0hSbDJETEpGcVVFbzR5ZDVzRVVZOVhFTW5TZDBKMlhCY2JXaGZack1KY2ZKTlRkQmN4RzBwRUt4ckVvQ0wrWnZ4aTR6QUJ6ZEIzYkpFVnR2WHZlSjhwSWFQeEtJQTFyTmFhNHVJSU9RdFJpMitJaXd5cFdNOUZVeklwcGtTcFNZRENjcFZEZW5MSllUR21FV0U2ZE9KNlFKSXMxbGpOb0lMQU56WGg4R3ZLZko2QUhmOThkdy9IdjVCUmlCWWsra1NQczlSWGhreit6SjM3WXNFRVV0YjZVUUd6Z3JoY2xETWp4Z3A2V3RTRUVrNnFRblpRVm1PekF0NTQrTWI2bnJ3QjlNZ1hFUHNzay9aTEd5dkErL3hRSVp0MUJTU21xemhZWVVrVkpvUUdMVTdCSjNEN0VJUUludVFqMmZkVk9RQUw4SndNUVFIRW9MSEpmSkpxSHo0R0hLU3BxVmlKaEN2S3pBcFY5cEVUckdKeE1qQWRnVjNLU0J4aEs4TWlpUnZGYW01N2lDUVRWSnF5bUJxTlpPQkpnaWwxOCtOQTBWU0g3MnBwQUlYZVpzdEc4eTUyN1k2TEg2NER2bEVDNFZySDFWR05WSXNDUldzbWtTcW9KQXE0aTdaTWlwL2xjSTNuOExkcUZMeVVqTXBKRENGNzcxU3BwRmlrMWZOcEFtY2lBaU9wR3FkUTd1cVZZNEx0dDc3NE1ONjdrdTloVm1IN2kyeU4wVStMM3RWcmdpS2JNR1hpLytJMmlycFoyaW1YRzBLZ1RJVVZSRzRXbEFoYmxTbUk3S0hjVTYwcnZpcEoveUVwaldPTlY3aDUrdjhjSTFIWERtL3FpSThUbkZIRWd0c2YvSUhDSC94RTg4SVlkSUNMejRab0FLamtKOEcxbmc3Y2xDNE9MUFk4Um9Qcm5TbFRoRkpNVXBrNE1tbHBveExvdHVOR2s1RXFXOHFKWjNVcEVnTDN0UmYwYzVIZ0tqK2NnNEVlcCtwNDhpcWdqM3VzbTZuS0NXU0FZTGI1QU5oWVdpMkZWWndoU1I5eVRJcG1qVTdrM29OcUlJNkhpNGJMaTZTd3JOQU9KNFF4R3RaWlZIU0dYSDBYUVRYckdSRVhhc0ttWmRwQ3BSeHFXcDhDbmxCeHJZZ1diZ01WYjRpZ0FtWGFBcXNJQldjK1JDUmlBenFwNmFTdHNVOHpNSW9yRkVieVM1SU81WHRUUkpXSlNWOFdjeDFWL1NvVlVndHNpMFZZS3JXeFNYU2d2S3VESTlpbmM0Y3lISEZRMitxeE1uMzdaclVaZHRFZDBKWVFBcjNRQkNTZDFOekNuUW1SVHlkZTJsN2o0QnMxR3JzMTR5TXZ1YzV4QnNMOXJGOUtOdFB2aFpoVHlsTEkyMUg0Y21vNGdsSnpSVCtzUGx5K00zQW03U3VUbXlFWm4rb2doTTUzcklwTmNGVCtEWGtqTDhXazlUVWxHR0JZU1k4TlowOGRveW00d2QrZk1ITkl3NmJtcUNOeVgvOHFEL205MWh3MXgvUC9tQ05KMzl3UFlEWlB6NFp3RVJGVC84ekhvRmMwSnhXREdsTWErTHA3TUF3Qmx5VE00ZGswT0MwbTFCQm16b3d1QkNjcmZNVnVBL0lpbllHUEcrOVJiTVZhY0huQzh3UjV3VUFQTWlCQWVJNkUyKzBXZUlIaHpoRTVqWm1Uc3FtL0o1RnRneVEzYTVOcVhsbmxZaGdjaVZCS0RoQmdza1FKeGxvRG1ZZThJbm4ra0ZHQWZEaXFKc1B6VkhoVE1nS3BhQVFHbGduMTBQRUZXQnpxVm1BdDZENG5yY2xzMnZrcHpXVlc5Qmwyd0phMlFyV1dPZklsdUhGZkFSRUxLUktML0ptWmJxVWFNWjZMY2NlY29GR0k4V0tNSEMxRGtOa0dYU2taZzZ6TnBob2xYNjFpSVhOUGZ3Q2xZYktTQWFUaXA2YWpudGh3bVdzQWtId1FOS0VwQ2JJSzhRVEtWeWdESVRMKzFCS1VUQVVCZHRGeEtHYW1pdmpxYVFya1Jmd20rVzlvTXlRL3VpYTIrdGwyYzhPL0x4aGFaVmI4T1UrdmxjdGxmR3A0c2hWOVlYSWFHa3Q2Q0dwSTdXWnlHcktVTWhkWkV6NDV5bUNzLy9MdWZwd3JRNFNHdzB3ZVFIQWU1R3c4ZkFQWnYrYzd0TUZtNC8rNDh1K3VFS1llWStxMGRRQ3FOcnFYVExBSk9JaDRzanJITm9hSlFaMklhSE1jWkYzR3V0QkdZeVVkMFk5L1ZwMVdrUjllVHJCTlNBdUFHcUNLK2U1RnRRK1hsd1Y4U0tocnlaLzFpU1ZtQXJ3SmdQM1NGSmpNNVhrVGRYajRpSzBCalJaQTcwZUNKZENhTE1Bcm5Gb2pROEE0dWs2UnJrWDlncFBORFlyV1ZXSlg1R1BaM2xXSVJYRFppM3NUbmRXcVZOc2FwNFo1eWNZSW9ReGJwK3JTS2JBZXA2cERvOUNFclBkanM2aGpYQVlUaDZDRjJMbHRMRzFrb29nTUlHcGVVbGNHcFVNQkt4Uy8rWEVLZzZOcXNxN0F4UlJDaG5rZXl4c1pFMUpVeGtsU3c5UXRrcjE3SUVpeFBtSjZkNkg0azVPT3B1bXk5Sk81QllFSjQxd2l2cXQrU1ZIWUxXTjd0U3dqNjNlRmJMWmpmZGxWTUU5UDNudmg1UDVjcDBwYjJxcURCbE9BSmp5cm1nZXRiZVRRbW95bG5ubGtsR1Y1WnAxSHJQYzJkUVo4bnhHOUhBZHhKQ2tpTll3TVB2SHd0ay9MZ0RBd2FRZm53blF4WXNCMml3Sm1yNEFaRE1aSkxkcjhJVkxpdUhDM1JBZlpkQVdJc1A1Zkl0eTVMQXRyM3M1UEsyVTArN1lyVWdDVS9PTzdKNFRqNVNEOFhiZGZkWTczbFNTNm9SQmV5V0NMYjF5YmZCV000R3B1VkZMcmpZUVlNS0pKSkJTZE1IbTBjVStQdHZUbHQrQ3FmNWQwd1o3STNXNGpMelQvSUFQaVk1Y0puSUhNZnBoMXFqS0lSSXB4NUlJd0I0aWxYQm9YVjhTVFUyeTFLU2gwSXB2RUVRbGIyM2U0ZFNvRGJLcWZ4UHlGcGVHS0JrZkVXOEhwd1dWWmU4VjdiN0I3aVQrZlRBRm92bjJDbXVLMzVETkNIemUrSCtlc3JyekJWSXcxeWNsdWlON2g2TUJ1V25jMFNTblpTWXdOWEZNanpLd0xpZjhjM1lOU3ZGYTlaajBvNFg3K3BqbDQxRWYvTTB2UFBNREc3a3dSYUVMYTl6N0IvTVBmL2lEaFo2bVpqWHRuT2ZrZFJaanRlNG9nU2tGYkkyRGd4NFlIY2I5NjlIem0ydW1jSkhYYkpTVUFsZEZKdG9IbStjalFNb0hBMWQxR3F3MlFTMlhORWExWG9DdUNkdHBDdFJPNTJTSWV4T0JXSTRRL0hHczRVVlRJQkRZTENuWnNYRnh3L1owaW5VMVdFZXNEK3FSYnVaVlUyRkFDRWJNdkt4eVVMaG9SSEFSQm9OTXJiRUpBSEs2VHk4MWdRUEV3WWJqQ2pZT09helZjWVFyTmNWNU5CS2tEdFpZaE1CbVBSVnhHamtST1dOUFpONFVoK3VjUTg0UmxpeGRHbm5oUS9LeWZaVmlDSTV0TU1OU0ZHUHIrcU05bW4yazh0blRLT2pJaGtxQXN4N1p6K1p0OU1mK3R1bW1pbEhxbzZENU12QTUraE5jdlE3eVpZUVRVK21FSjZRdGxhQXpSUk5JUkxqMDNTRFptZnhsWHVFdzZKV3NET2lNYlhVY1hKVGRwNHVRY3cvMlFzN2paVVVnRzk2SEtTNjYxNGJFSlVJazlSRkJJbHdGanZxOWpNcFVsaFRyelJXbnFqSHFXYjduK3BMMnFITWV3eDlJdk9ydkJ5UXZvVlcvSXBlQVJlUE85dG9yVTJIUFdTUS80WWZoRHduU0luTlYxVTBkMGZqZUszRVpJZ0NSRFdOeGVqZzVVcURSQnJUZ0RNVE9lZTZmaWFubXh0amtIZTh0aDdoMmpCaUJjWTVFb01CWkEvNzYwSGVZUW1nV2dieFlNUGNBazFNUlRQSHg1QThSS01BTEhBWkN3T0VqUVBEeTB3QkdZYTJGMWFLcDdMU2hreEF5S3dnbTFSaENtZ3V1UWlTNE1hZ0RndGVUK0RWdklyUk5LU2R2d3BPNG1rNXpPNm1wQ1E1aXVjRG1ndVo1QVNEcXI5eUlQZTMyQXZKNU1ENkl3cGhpUUIrUWhodE0wcHhPa0FxeXhVeXkzSkJhTzgxcmtBM0RPVkJyRWVDSmx2S3VtbFZOekpWcmhUTVFYaGdxWms5V3JtUzBVUzJZQXRWc3lRVGRGWFkzcE5LQjRYekhQMmhYV1NEM05VZDRwcmRnSnMxMkxXQjZicjF1cWgydU9GS1lZcXdiVFhvYngxdWhVVXlqcUYyMDhVM0lLM1NiZmlyZjBabDY4ZnB5UGF0QUYwOTJyVGtSM3RoY2xmZnMrTHl4cEs5QmFqVXNYME50RDJ0NFkvRVBwVllFMzMrY00remRDVlBrWVJ4djNPcXl2RUllR3ZkRDdqTWZKcjBTMk4vb1N3eEw4MzFmRXJEbTMrcUsrNHdvQm5ONlRPVmhJQW8zOVhFWEVsTi9QUGtEQXk3Tyt6bk9QdHBLRFZENHREV2VOSHg5dnZ1akRCT0pQMlhGSnRXa0tjNW5HRzJXRnZ5TTdORDhwRnkvbmdzQURCQVBtUGVPbE10S244Y0FtNzY5U1U0Rk9KaENuQ2x4Q29wSkRwdFlSM1BNOEhSUlRqNXBXSXNKSERZUFM5cmtrRThFNndvNlFqVkhXcWtWQ0p3dXJKT0ljTHFZS05FRWtsd1ZnTzhYS055SjJ0QTJMcVJ1dlMyNHJ6TjVxd0lRY0x3dkEwSHZqcm1ndTVKYTI2d3BuTGIzT3JPMWEvaW90cTMvUExtN0ZQbENLSWgxK3lmTTVCVmZSa1RNNjIyQTBid09vNWl2R1ZXd0lzeXJEZlNRUUQ3V0hpSjdYeWZFeWF5R1pQY0tyZGZWV3NJS1pHZFgzdnY0U3VmbXNOeFBsSmlydkluMnFjMVByZUZUeFRFc2I5UjNLYmM1K0JWSkcrVWhJZkc5K0RhMkJhdUlJd3FSNFY3WU9sZFZncENyY2ZlMm95ZmFIaldjWGgrVGJMKzFqMGQ5T05ISGt6OHdjTzhmVC81Z0RXVk1NNmhaMTh3TFhDNGF3dEZwMkFhbVpqZ25tYTlPUHBBZ3pjblBKRi9lV1V6L0RIblplcWhXQ1VKa0tIdEY1S0x4a0pENDk1dS9uZ3NBalpRT2ovdWpzR2RpOUtucEJrSzhxYVR0cG5JbUFrWDJ2Q2xRR2NYeEtOcThCaUNCSDdIQlZpN25rd01rWlFGZVFRWTY4dzZTcEJqQ2VwU2RodFpLSVRKY3N1VVZIeTZCb3NucmhtZ1MzQ010VFlJcEw2U0lhSTFiRXRRWFU0WkU5aW1jUmhzS01MeHNLaVJFZ1cxR2VXVlVHaFB4Zk8vaWJRSFNjYU5scmtCUEFSSFNYTTF0ZVJFRm0rK093NGlUdTR5cXc4RFJxZlBnbFRLOWF0NHhVdGtweEN1aGl5azhLaVY5TnFRS3BoclVsTEliOHNxZ29KcXRVZXQzcEEzNURYenZDTnpaVEp1TW0vRHFxc2hHK1k3cmpZSjdxYjBYcFRyQmJVMjRVM2ZFS2NZeHJSU2VBbGZOcC9pVkxPUnFIQ2MzSlpWWHlNYndZNWsyN3ZJUC9qSDdoNDFuZUtESmUveVliNERHVzRwLy9ldGZBZUtTZ0FoQlhoNGdTc3B1VkhzZ01aNXlqZXlYbFZ3MDJtWUNML0dkdVBpSmViUDVRcmhDWkRCWGF0WUNLcUVpTmVvK3Nyd0FXS1Y1YWcrN1g4ZEhtQ29KTmNOZVZYNmt1RndXbm1rbGNrSm1VZG1Bd3hSZURUSnFNYXhRNlNwQldWWXU1WUlJRmh4MVdPc1NIT0VlQ0ZkcUpnS2FpY01DS2dna3hkNUhGT2l5REdjNlg3TmdlUi9XNzdHMFBZc1FHQStsRkNpamhudGhpUWF5a0dFY2J6dzFMMlhyMnBtdUppYXpKeHE5U2kxeWE0akdDcDBqbDBBZ3NxdmhaWkRwQ1BncndVU3J5alB2K1hhTGtBQUhJRmtacmpCakhXc3F1YmcvM0dEUzFLKzJQS1ZxdlMyNEQ1Rlh4bDRFTkJCRTNoZ1BkUlM3RWt3REl2NjdqRlhlcFg1MC9GYmZsd3JEOFhUZVRvNTFyS3FwS1NyU3FWNncxZmducWRTOFNJekdRMElOU2NqTENqVVFpUHBWdlNrdm15MXRncXN0Y0I0bWt4bGlibS9FNmJwSkVIbUlYK3FwNlVCK0NKS2dVVUlJYkp3NytXK21pOU9wY1M3N0l4WHdGVVBNOHZFNUFFSndNUUF5bXZ6RlR4QkNjeXdVckpNUU9Pa1N6Ukc0MUNRdHJlV1ZJVFhHSmp5RmsrUGdRNzZUVy90WmhRMS80MnBUQTN3aFpDVkZmSGtCc0EvN2FyMGFvUFlJK1hqWjBFL0tRcXJoNlZRWVFCNDVTUWU0Yzl5V0RzQTRucTZuUDM0T3dFOEEwaEhJRkZ5NzRCMUVkU283RGNTNkZHbFlPMGg5QmM2cTQvd0NXMTRQRVJsR0tpODFSZkNRYXRjb0JYcmVTaE1pUStJRE9idVA1dEVkZmpYMU9naEtKOFB6U2pNWmk2U1g0YVVnMVZpRFJHcTRYRzRvYWhqdTBlQmZ3RldqcHJ1RFFNMEwySXZUeTNHZTd5YUJ1WUlQTEF0b05SWFNldmZnU3RaVGUxVlNZNkJvcVlia1paUnpLb0dJOUpPaFJGVktTQXJaTjJzQmUvNXYzcmVNUU5yS3MzbE1wOTZTUWlKVFhNRDdqWWNwSGhKWVU2S2xKamdWcVoxeHpyQXZFKzdFRjFtR0UxcHdUM2dZc2duZnhMWXVnRHdocE5NQ1VnUnllZnEvbWYyRHB0ay9KaGhZY0NXQTUvN3g1QS9DUTJGODJaZVBDWWxBbkNrR0syakpJRWNnQ0ZyWUVYZVJUSUpzR2NCcCt3Z1FjWTVvU3RRYVl4VDhLRHZ0cEViQitabEpLNWJmdFoxVTFkeGI3V2Y1VmFGRi91a3ZBSHlydHozOElJaHgxeDdwaG5EWEIrZzQrR2lDd0RVTVYxQ2dlMlhUQUo4aEZJRVdidmhqTFJxOHZBRGdoM0ZvNGhvQUM4VkJVemdNUmRGTGw0TjNPSWl0dEJXNFNsUnhGZ05jOWFUeTJxVFUyYXh2Um0xbzFVWEUxNm1BR3BJSUQ1dFZBUWlpTkRpd0I0SnRldTVVa3EzaGNzblljL1plaWF5TUdnNEU1RnIvUnNGZEZBeVIrYlJWNzNXMHMyc1pIZXNKckFwV0JISUExZmRLY0M5ekowNGxyRW9Vc3hvc1l4VzR4MTF0ejB4ZUJDWmszOVFvSmRwS1o4VlA0UzgzVjNsZkZud2g4Rk5yK0ZSeGR2WmRLVnpIN2Z0WmF0UitjNGd2dy9rdDZJUnFLMFJHNG96NXdvRWxqcG95eUV2TkpIaHQ4aFBVYzVZN0R4OGVwTWVoU2tHdThaaVBaaFNZK3ZNM2Z6RFp3SFJmMlNFeWRRSkRJSkc2aHBjZ2pXQXZGaGNVUlNBTlg0T0Q1bVlvRkN1MWhZR3JvblBTRDFYU1F0d0NwaHF3bUpTWjV6QW40ZlFJa1hINkhsa3ZoRHlTUFB4ZjVRVUF4N01aMVZHMGNCazMrMHJhS2lyaGF2ck9NQk54ZTJDOTJlRW1ONzhxS2tTVVpiRG80aHJmcVpFNGp5aFFqbXYyYjQ3NVBYQUl4TCtmZi83aHgvZ2EvcGdmQlJUaTJubFRtbHpScFQwa0x4TTF1QUZTVU5TS3lFV2pFb2hnRFlLckVWRjREWlRMalJRbGx5c0xURWFib2dWVFlEUlIvcGh6dDRtS0NQZWU2SEtFbG1Fa2J1dVRmNFBNT0lRYytxTk5CWk9zcHRQWm9TWklrSXdxZENCdHFTMVlKQ0ErenJmeEswcDE2Y0ZXR1dDS0IwSnBPTkxHYWhWUytCZHVzdjVhcDhyNFNNMk1aUW9KRHVNOHlWenhQR0lrSjg1bk5Mc2kzNXpuK2diL1FEenZWUS9vWDUxN1A1NTc3MXM2OHdWUzNLbXpsa0hrOGo1NUZScUVPQVhKdVBxZmJ0VWFGaEpOMHJZR2dPVzB4Mm9QWVFqeEhNbzEwS1BwMXhuQkJSeW55U1BNWG5CN0VYTjlUQzB3OWYvNzMvL092L2FGTHdIakN3Qmc4ZG9BWnkyZXVPSmVKQ2MxV0VNTTh4WDhTanR5alg4andYVWFiWW0yWmh5RkkwVXVrbmxUTEVGM3VXM2sydCtLR1AwZFpxMkVTTE1oWjdvYU1qMXZlSTIvejh6bHBoaklaS2FLVTFOcUZYZEVhdExVeE5kZE5RUUlDWHo0d2dtVW1tV3FrTU9vQjB4bWpMYXl4NjQzRjRFQWVOOTllczVYVmtLbTg4a0FJZ0s3Z0RVV2VtV2dHWWZQdU9qa3ZqOWQ2UFczZnB4R0NnekZpTWRYQWVKbnVzWTNkZmg1SEFZenJncCtPbjY2QzAwUUlZWGlnVWVXTWt3c2hlbmNPd3M0UTRSSXh4RW13aHFMZEJLQlhxN0ZRWk0wSXRXdWZOZXB0aXRzWXIwQTBEeUs5cWs4cnErdzBmQWZvbzQ5TU01eU1iemNGc2Y2S25wdG5YcHVJWmUyaWZLdUEvczhMamhzN2tTRGZPeHIyaWl4LzR5ZW5FRk1wNzN5ZEJSTGhiV2xFaFFIMFpYMk02OW1vNHBaMmNnU2pVQlE4M0drRDVoamc0TW9XbFYvY0xRNkJxZGxwblNLV2VIcWhReUdrSTkxaXp0SXBoQWxFcUk2VmN3TEJ0U2s3RlVKZE0wSmNxRGNjN0ZaNGR3K2w4MTA0VDNUOEY0L0U1ZTVzd3NaYi9WZktWMUhZODd3WEh0VjV4elZxdlpnbzZTQWxYNmlQV3l1ZEZiNFE4RkV1S1B6a0FPQ3R1OURjaW9BVFE5Wmp6K0lPcFRPYmJGNjVFUDFKUDI2K3pDNzQ5ZDZsT3N3NlBVNmFVK2RZMHBOTnNCWnlURURaL2ZwSFRQeDZCY000akh0SHd1K1NEaHU2c2YzZlFHTTMvbUpwMzN3YzUrd01lLy84NS8vakdzQU5LRVBuRmNGdWdCQTNsaCs5L08zdjhlY0g4dFl4ZlFqR2lQRHlCU3RjNG5UTzc5MXpDTEdtblNNTTNnQUJwdnJRNGZ4ZEVYT3NVRkZIaHF4b2lzMDhPWXkvZ3RyTENUVEZqaWJQM09hcENhTXdaOGpSWWVOOHlUTWlNVXI2b0VPMTA0aGNpMkpHWU1GTHdrZUFqdnhoWUNjbUI0ZXM4SHhaeHpJUWZPci9BUWc5ZUJHa3lON2cvZ0s1YUg0UTBMS1N2Nk1PbTkrWW1mVjlxTWQ2Mk5YSGpzNjl1Q0JVUERZMUhPdllpelcySU54TVJDenBKL3hwN25uVVQ4UENjUnk5ZzhEWkpTUnlsT3o5YmFnUW00YVZhUkZvTFlwNzJhdVNxdTV3R25CR2t1a0pSTjAxN0FSY1l3d05zaWo3c1RXRm4rVjNYQ1NZMU1uWlM5RE5WdWc5NWZsK1c0Zys5akZQTkR0Tmt1dEJDRUpkQkU0b2RQMFdsVU1BM3Z6RUJFcWpZcklkVEZxdFJmM3ZjWktaSVhmVTczRmVtOEtxSTB4dnp0NnQwcjhha2lqZDE5Tk5lT28vb3FxK1djdTVZTmI5b1BoWStRZW5CWGJyVzE1TCtHR1F6c2ZqRmR2SkU4SXRRRHlZQjdsQldzWXNhYWk2Wm81MlVINzV2akpmMHp4SVlZcFB0Yi85bS8vQnRmMzMzK1BlLys0YWZqSFAvNFJORDd4anltRVR1a2plU2hFRFZoSEJwcm4vZjZEUERqaHhzVGpxSzJkZi9CVWY2eWpENU05UGxtQXdPMGxpaGtMakRFcUtudWloLzlnUmVHRGQ0RnpZNGc4cG5uWU5hOTdQdGZlNS8yVlhBQmdDTkZQN29pdkRlZHFtT0xBdWlIK1duWkVLYkFXTDVjWDRLQjZDdEE1a01LQ0F4V2Z3T0ZxUUM2QXRGMEVJTU9sNXNiZUsrYWUxbm9yQ0lUbFNWWkdKY3YxbW5GVDhDRnRSWGdXdjltTGxTekNxd3NJOE0zR1hTV3RVaXZtL2J4SlU3WFJrTDZhaVUrQ3ZONHBnUktSTVk3ZDQ3MW9veUQrVFlNWnZZWlZZTzFGamEzSVNnMTRGVXprUkZpSkUwK3hxMmJTWE5HK0tuelZ3VHRiN1oraUl4OHNjalUrSDVUOWVQaStNUGU2cmJ3dGVOTXJHb3lxVXhIbjM3U1RTR3E2eU1ibDVYVTBudmJHbVgrWWM1OS84RVpQV1V6MHVjVHQ0ZSsrdy9kOWNRR0E2d0g4QkJBUVBQMFBMMzhPQ0h3b280Q3BIODE0UWlIdTFCeVhCM1JOM1BzM1I3amN1aExKWXM5M01ZTGtxTzlEWHpQOVEyQXlqOUVnT2tFbGVjVndFYmMzS1NydGxjVFB4enpNKyt1NUFNRGdvTGZhSjU0ZnF3Y1JIRXJwcHlhell5M0NYcTdkTUI2YkNNbkZKamlPS3lOQUhLVkQ0ZWQvL083bjcrSVJ2amdnaVlzbUE3alNVVkJOY080Z2xlYWExY3ZVaWJNQlZ3b011Yk8rMDR2SzJlUk54Yk9aMWhFK2l0dVA1NTM2eFdtTHBEZVZ0QUhsZ3NIYVV1ek1RdUtEZFlxVnVQY2E0TlE4ejlTQnpCdEE5SG9teWNxUXR5Snl0UWJGdlI0aUhma3N6NzNpUzBTSWFEVUxYQ3RRT2d5dmFwS0Y0ZVJXME1tVkFFUUsrMFRTOFJDQVZWUE0xNHliWlVoYzlRdjVaWTFuNjMraDJwcWlJaS9JZnBtUUYwcXRJVUMwM1pOMzM2eDlUSHdRS2xLamhEeEZWcFNNR240SFFYaWlwV2JvVHdpbkxielg2R3lLOTNzNDhiOEdNQjdIRHlUV013am1zUURCdEI0M0RUSGpCNFRQQWJEbTdKOWYrY1V6UHpEd0ZCQU1mQlFBR3dUcVlJMHNzY1FzZ3puRHdBSU9EZHBvWWhsUjRZSjVQb3cwMnFJcGRzREhLc0R4aHNxTTdrcTJkSVFQaEVtRnZXSlVaVmVwM29vNC8vUHNtM24vNlM4QTBFL3VoUnhLZHR1Uk5NU3JjZG1FdUVKTmR6TlFJa2tCT0JFdlRKb09namx1NllhU1JLb1I3bkdNRFpGdmZvZy83ZkY3Zk5VRDF3RGhHRThIUVFpQldBSVpDek1LUVZOMlN3Q1lRa1JUWUNYY1FhZ3NFY3BxcmNJb0pmeWhRVUdGaS85c1NSdStTa0t1bENnMWtWMWtWVEtNeSsyS3ErdlNrcUFNdWltYlJzODVsU0JFaGpJTlpGbVNaNm14RUFIb0hGWG9JQU92R2RVNkZhcFV5cGgwamx6alpid3Z4cTdlY3M1a3cvTGFrb3ROaVpDWnlnQ25JZ1NUY2t0ck0yN0NLMTlab0M5Yk5DWlZrOHJlbEkzWVdtRU5GLzlabzliMnJNS2UvOW42Kyt6Vis4R2hleGora0ZCTGFwRjM2YlRpQUcvcUoxcHFKdkc5TjVIWnZCOXluOWttQWlpRmFpaEVyanVJeURUT2QvRnhDUUFGSXZZa0M3NXBaU3psR01ZaGdvbkJUL0VWUW1DNDhZL1pBdTc2LysxdmY4TkVuek1IZU1HRUN4Y0FmQW9JVFo0bHNNWVN0Ry9qb1grZGI0bGpmVTNvclhCUkJ3YVozVHBDa282aXdtZExvdEhUZ2haMHk2d2lRRkRHSmtVTnVaWHB3NlQ3ZWYvcEx3QXdWdXl0dG9TUWRoaWQxaElTdUJLWFRpVWtoZHIwelNNZDB1QUN3alVRR0Zpa0FFdlRNZUNNbFVHK0MrS3g2UjkvK3ZtYkgvTmY2aVpINGRLL3hIWVBrS3hDdkVnWGdUS2E3aVhDVWxOZXB5bVJqQTFacmp0R0ZVUlVCVmVJcHdCSE5WZWJDdGlFREttQ0x2WFFydUZDWkVqa0lWSUpIcXRPQ1d5TktuSUhnUlJvTlFWamF5S1JaVGluQloxQVcrSTFieUtMbVhCdlVzU1p0RjM4RGdKTjBEektzeVM3Q2laQ2JibzR3NTB6a2ZQMDRsN1pMaUx3eXh1ejJydVpWNlA2ck03ZGZKL0oreHBxL3BJMWVDNjNPY1pFdEgwclliOHBudUkvUlc3elNxRWEzaDNGaXRaNkFZb2dnOHp4UGhNVGhISHZINU9EZ0k5UjRpSE9xY1AxY0pjSURIelRGL3cvL2VsUG1NcmpzWi8vODMvK0QrNzNZOFlQRUROK1hBREF4aWNETUlEajQ0S1pGLzZZL1dQTitRcnpSck5NWUVhSUtoaTM4OVdpTDZLaVVJWlBRN09ld0wxbVpSblJaeFNiTTF5dE1CZ2lrWXR2M1ZBOXBPeWJ5dUo2citWMWhUdDJLa3lWclByN2E3Z0E0TGlnNTZ0T3ZqWndqT0lGM2tQeGg0Um5hOEJocG0xNUdrT2xkbE9FTmd1aytLZThjZTBPWmlKRExTRXVzdmVLdWFlMTNnb0NnYUFYSTQ0TVpmeWdjVk53Uld0eGdyNnVSYmFCbGJaQ051SFZCUVE2YVR4WHlvNVhLZmNtdTVMYnZGNEdGTVNoNFpwQ1VvaWlZTGlMZkVWZHBOZ1liMFUwUlhNRkQ3bGpVK1NPQXBpSlZtTXJzcW1oQ203SWNLM0VpZTlqNVgwMnFRSi9RZU9wRHY2Q2RUNU0vVWtkK1NUWmg5MTVTTmdYNWw2M0pkdUNONzJpd2FnNlJPeGM0dlM3ZHBKTlRWZlp1R3A1ckFxbkdrNm44VU9COHljVDhJemxPRnZHYXhqblZIcjJrWWw0cHg4ekJJajdrei9NaFVCTThiR3d3dENaWnphNnNNWVNDVVlKV2c4alFFeENHSXMxd1RBRTJTbDllTWs1M1FUUGRyRXFZU0xlNHl4YlpHNEJVem5JYmpPNElpMk41TTlldDhWNDBsL1BCWUQzNmpOc0RPWCttSHhJcUZVaHhBOE1FcmpObUlzMjEvREcxZkU0OERhVmdPeGVITFRqeDBIam96MjRkQTFRODlieVZnaHJTTjRXRkdmdkZXMWpmRnhoSTA1WG02SUZKWlc4cVNuYUc0MDNwdGhJYlZ5djlRV0NDTlNlVEJHQ0x1akl1MnE0bVpwbHBBcFZXeTNtRG9Md1NwT21HeXpTRWRxcmVpcVRDSFZTVktwaGxXdWxDVHdwYkpnM1hjL1drSHIwTU10Sy8xbWRWYUtWL29yL0d2NWxzcnhXMno3cXRjcjNVZTUxbTVWVUpGWFlFbG93Qlg1U2M1TjY0K3FLd2FrMXBnYWNUL05ud3MvOS9Kd0FrOVlKL081M3VFWDRILy94SDVnZTRNYi9YLy82VjB3UCtDQVFMZ1pnWUVFWVBnZkFwd1RnNERzQS9MVlFaUEVsRWh6WElJMHhpbVIybi9uMzlUZ3F6U1A0T3NOeDV0NU9PbnZ5RzcxZmM5Nm5Md0NlM0RXYllXeUhBeUNVNmFvRWVxbkZBcHlqa2dRNkgxRWl3SllyZ1NxVUl1NzF2S0xGeEpxZkRnZ2E0amh5aU1zTFFXb2E4VFJ4T0lISlJTajRQT1NtSjBZR1MzeWJGMytDWUh6SEZ5N3dzUVpPUXhmb2pEb3FnVmNxdzRBeWt1S0tuNEZZQTJacUdCSlJNWExCWUFnTWhRZ1I2SWpiVlVjaVVxNThSdTFqRmU3a0YreFZkdGJwWHJlcjEvdUYzWUdWTUFScjkzcVIwaFNoSXVBTFpLeklhTUpPWHRkM1d6UVBKK0hxUXZGSC9jbnJhaTV5RFErV0VOak9QQlRtR3dhYklGZU9JMVJ6NU5CWnZoeHZOdHpIdlpnMmdoZkdsVllSaEtzTWVZVzA0Z0pCVTRqQTFxQ2dreXZpZ1dSV0RoRXkzZmJZTDJsN2p6NGo3eWZwYytpd2J2VlgrS3FEbXcxQmZhd1RKelZYeXNKWGZLL2ZPVzVMNUkzR1RYM1JXS2VhcXFRaWNxMk10c3N0Q0lVNytvcUZJVDROTlYxS29BeVZLbVMrRlI4ZXd5L25ZZUY0OUdhY1lvL1Q2Smo5KzExL2xNYnBRZHlBano5aThFM01OM2lXNDNzOVpnS1l6Zi9QLy9rL0FmN2xMMy9CYy84d01Fa0FEYk4vL3VBUDAybXVBajdza0o0THBHRGlFaVNVQTBSelBCU2tIazRET0V3d1lqM0dPZWpqRXdZYXdNYS9DQUFTTDlmM0lNUERSdzd5TW55R2hBdGxVK0FBeHhDeUx3T0IrTG5oSW1Db2dTVVJHZlRXOVVNQ1FrWVo3RWdJcE9ZZVdjM0hRbWdzbXdJOFVhVVJlZm9DWU9iOWwzdkZlSEhYVWM4ckFoZUhOVEY5U3loOGIwaGNCdmpRNFdtQVdaSUNzMHpLdVJOSENJb2ZWdzd4WjhMR25QVGJjZUVSbWtPV1VqaGtrMlpxTW9XRExRSkNXNkVIdG5hcmxxVFl3UVMyYXMrQ250MXQ2dHpNV3dPOWpMM1htYkJiY2d1bVFHKzIvQlprMU1ibHNwOWtJN3NyLzdMRnBFcThLWnY3NGI3TzF0dUNrbjFvSUx6bCtISFJwbGdGSnJVYXkwRFhUeUdmMnJ4WjlzTWFQcS8rWnl0OGx2K3dhNjhSYnBaeGsvWmFEU25LYzdrdFdndksrK1VOMVNORE5ieUdNTHpHU2xhbm5ZRWM5LzdqUFQ3bXRNUmlQZmQybml2Q0RjMllvNCsvQmNTcFA2YnkvLzd2L3c0UVUzLzloUy9lNE9kdkFRMjVXTEVlYWs3bHdMT045blVpTWM1VlVSWm4veEV6RnpJVEg4NktIT0QxdENlYWpDbDhWS3ZtTDJoNGJXNnJwQXBXUk9UM0d2OFNGd0FZVFQrV2F2UG1tS1pBUkZXRW9BU1JGd3RvUWxhR1N5RkVPZ3duZ253S2x5WmNoM2Nlb3VTRVlGUUlOTHFQNVNmOGRiMmZ2L25oeHgrKytlbWJPTGJ4bk9CMUdoRW5Fa3RObmN3cDNTRkI5YWhDR0hDMXVIT1NYVU5hL1VSck9hNWNDUlZKQmJjRWFzS1YrdVZrZW9tTVRSQmJUU0hFcWVNaUF6L3VXTkRyVVVLU0lWbmlGSGRaaXREcmVBcE1zbW9tV3Fzdk1veEtxSWp6M1NiVEVRcW1zaE5oMHp6ZUxPeW91VmtNYUo1MGswS3VmY2plSzVHVjhYSjRDa1J6bGFMaUpEODdEbFhuWHdGNWFtQXhJSGY0ZHpnZkhOc3ZrT0xaQ3ZjbDdiM1A1bkwrQzhvSTBkSGg0YkpsSUJIdGluZ05ianZUY2JlWm5iZnQ4R2F2WXZBd3Z0M0w0eUYvSHZpNHFZenBQcWI0V0dQMmp3V2ErRk5mbVAwRDVMMThJRkNEaTFjTFNzb1VXRmNqUWhDRUp5TkdMSnJXWmM1YnVEN3JwQ3lsbEtJMVdvNkRxb2ZoU28yU1drR0JMa0pRaUJ2YUhBS2w4QkdqVld2QmoyVFp4UDVxTHdBd2lOcG02RC9IdENLYm9XbGRTYllxKzhaRE92SnB0SUlzaVRUR3RvaDA0amhHdytZMGxHV1VVcENBZFV6N2NTanlIMGcvL29oUEFJRGpFd0FxeFhvK3pqUkV4aVdEbmRxa0tRTzB0b0FLSW9TRnRTNEpKdU9tZmxVbWt0VFlaQUZWK2FGSURhRmdEUVF1c2d5Q1dLT0FHdUswbFd3YlJjRjlDTDJKNlJ1aVptOEZWd1ZJMzQzVk9EdW50WmxsNWZLeVc4NEdmS3ArNmRRb3VWWUdRbFJuRGIrRHJKU0IxL0NXWEdsRUtubUZrK2tka1YxRlhrYjIyYXZzWjlSUXM3eUFwSTZrcGdSVi80b2dKbzFFUzgxRWZxRlpCU3Z5Z3F4Q1hsUGJSKzI5U3Yyc1VXVXJzdEpNVERXckFZVVdkSHhrT2U0V3JUSUs1eDQxZnQ0VGQvak9XWFhnTVV2Z1F1dG9Sd0hmeEU4QzRtbCt6UFh4bkEvdS9lTnpBRHozajUvOUFZNEZ2L0FEQmZ3TllLemhBaktsNGhXZ0ZtL1NoaHY4bUd5TUd3MWpqWGM5T1BGb2NjdzM1dUpYQW5ITzFBSUM3RWs3WGl0U2FlS3NCamxwcnByUTRXQkpzQnFLbFV0SU12YUUxdHVDU2ZhTnpVKy9BRmoxUjl2cGpaMUpVa3p0aVlCNE0vSGJaaXNDWnRKSnlveVNZQ0lMZDBNS3lhQlVxeUNYUWx4UU5tbG9Rb1FMYkJ6bk9GYkg5Zi94TUYrNjFnY1ROSStWVFNuM3dzYUNFT2NRNUhyamFna3BlOHZaZ0hTMTYvdktDdDhVTDVka2s2R3pTV1dxZmhocDNFVDJHaEtOaVJBcUhSZHhoY2s4eEJLTnN1UVVGOHVQUUJjOGhMWXZWWEJGVCtVeEY5YWxtRUFxZVNVYk9pYnliUDJVZlJpVkNDeFBsU2R2bEhROXJJUXdYVjFMaXE0cVdFT0FQS1N4akRhMmdxNzJWR0NWRXBMNkpmeXpqV2ZyMzlmNXJGcmxWNFFqNEhtZDQvWWJ4MHF5TXQ0bzdsTDM5Y25VT053UDlIUVA3U1NibWcvRFJmQkEyaFVCV2FBTUtiaDNEMnBNeHJYQ2ZBT0ltUFI3L3p4N0kxVXNRejlXbVByakFnQnYvWmdBNEs0L0Z5Q1V4WnFUZmpVWmkwZ2dXaEtIT00rMzRLTTVNN0tHYzA0UCtYRjlFaEZSOFBpc2d1Rk1BUkNHRnRMVWhERVFCeHJrNHU0YUxGS2Vxa21YY0JsN1hJTFZvSUlQWnVLa0ZQQldKSVY4dlBucEZ3QWZML0dEQ2hoRURUcWsyR3pCVGFMRXB3N1dTZGtSaExCSkEvWm1vYjVucWNvSXgxRWNuS3NROVhGQU1zUURSU1JuS0VRME9INXh6dzhCRDg1Vkhjd1VxNmJVV29SbFZKZEtxc1lxcElvNHdqSVNVc1VUNHYyaUsyVlBCSGxsU0pDSVJGaEpEUWRlWTEwa2RhRWx0K0JLaEdSNEh5cURxYklyZjZVdmZHTWs1Y29jdTl2NTlxQ2F3YVR0eFV1dDZ0eEI3b1MzU1RmaUtHOGZVcjF0MTFZcGFqaVJGVi9EVlFNWnNnK1hMR2lTQXJoU0UvK3pqWnRsUHl6RE8vV1F2Q0hVZXZaRHRPSnZVdEJWQXgrR1BFVzRxWCtUOWxUcURWbnBaRGk1QloxUTdUdmIvVm5aeWhkU0RaUkVVQzRWYWNoNUpxVFhYQWRkSFlIQkdRWWNCOGpvY1VyRkovOGo0SGk3aDg2UXdzZi9QL0xlSCs3eFkrci9YLy8xWDVqNjQ3Zi9NUWZBaFFGQzhBcy9VTVAwQURhK0FjemJncEZyTG5YcXp3TGdoekd5eE5wdWRKeWRJbWZVU3pCRUVZUkFMTlBMVm01T3dxazJrWU9QRjJabE82bWRwR21CVEU1bFZtUUd4ZXZlNjB6YWlaK2FyV0RsVk5tM0lMLytDd0NPcis4WmFlQnVqalZvVmFTQzJxdVlOK1ZxbXl4QVpUQ0w2ekFLaE5qM3I0ZlpBTUxEQTFVVnR1RWtTeDhoT1BqUnhJS2pHaUw0WHdjOGsySU5yMncyV1loQUVod0V3cVlNa1I4YU5XU2pMN1hLa1l0R0pWUUVUSURxU0NYSUswTlpSSmFMQ01ZdURRVnhCaW9YVXlQLzJMeFN2ZFJ6b210TFpUaGxCWHAyNTIvc1ZzcjVsVkFSNTd0TnBpT3dBWHFkTFNlRnFEa0dYNjB3YmhhVGtsNGtGbzE5eU42N2tEemhsOE5USUpxbjZDT0w1RFQ0M253azhDL2tmMnBnTVM1MytIYzRIeHppTDVEaWhRbzNWVzFjTHlUeWtHZVZuZTgyTk5XVUlkQVJnVjZHMjRuc3Jua1k0bzRnM3pMaXVBNHdudkdKT2NMNHBZL2pZSWRPU0kxakh5dSsxMlAyaitmKytjQVAzdlNETUJRNHYxY3U0TXlGTlJiTi9tRWZHVWVVbWlNVFI0QXo5WWlTR2cxSDZJNzFsYlp2VmgwZzdJSTZNaFh1bnZISVYzOGhPQlhDb0t5RHJPSFp0VFFabUpvYjhObEVOL200QU1BQXRmOVdDcXNCWGVGNTg2OTBQeFZQbTVDYldSdjFabW9YVVVnRkthNU4rMW91NkV0SENwaWd4eWlQZzVrZ1drZ1V1WVlMMDNrR0tod0dLY05BVUJBWUFYc2MrRGo0OGRlLzhZMGZ5TWVmRURrNEkrRGpLNmhGZWU5ZWppS3Z5cCtVcTYxOWt5dTUxSlRSQ2c2UUE3VTZsSTQ0MDJsdVA0TUVBaFlZUHZJVk9lVEtDNWdLNUE2bEpybE9LTkZQQWEvc0dBOUc1NW9mcFlML1F2M3Y2K08xSUdzOWxlSXBzaVU1elRFU1o1TldDOEtWUml5SC9STzNieDFpNnQrZEhUUTJqUUp1R0tzeDk5REtxWWp6WDdEZkx2aENEVFhrcWFyeXArRlZibTZZL1ZhL25UVE9KU2xKaWxWekdBZlpiWVpQMnFrMkVEL3hOdWM1c0Jsd3JJK2p0REpQbHFmbVQxTC82VS8vanAvei84dGYvb3hiL3ZnT0FPckJ6MzFpamQ4RjBlY0EvRU8vSVBpTW45bDhqU2lkS0dDTXF3OU94T09OYWR4UkJCekZqQ2FyaW91V2VkTS9QUGpmbHRRY0htQXpGTzJPd2FUSFdtcTRvem02UHdHSWVPYUFEK2xSZkxRakpGNzdoWDI1K3B6T0tpLytMdVJDK0dVYitMVlhmRlNFUG1CcllWdXlHQXphK1dkb1MzM2VZWGUyT0RZQTlCK01DemVTajlSbHM0MGs4dElRQVlaY1hrMnl4WS9acnBiUllTSVNPZHh6TFBRVkdDcE0rTnpWb2dBSmpsL1hJbE1aVCtXWldpN0V5VXNOTklra2taT0p1L1hqU3o3b052UlFiY3ppUnpES3dHTjljUzAvRm1CNDVlRFB6RkdwOUdHQWdLdC9Ydi9qY09WdiszSnpSU1IxaHpoWFIwK25YSUJ6UkVZdUFqNGVnZERGdk5IdWxyMFhFYTMrSFdYUFZrV0VnS2FSa2MzWXRyWUVwcVprOFZRbVJEQmdVL3cwUW55TUpGMkhnbzJ0UWxnRzFnZm5pR044akxiU2lVbWo0dGplY0IwWmpjMXRadnJIdGcrRjlwY1VTcDBVTzJxZXlxZmdSUEFxY0dCNWJ5SFJLM2NiOTZCTTZUU3RuSXYrNVhnLzZjc1I4OXFZMXhFVE9FeXZ6VzI2UGJaVkEraWNHdVVacXo2OEtkdzVkQkZ4WEpvRDdNZGZsVEJRV1ZvZENYWkdPWWtjcEZYZUZaNjFWWkk3QkM3cS9HYjhKZ0pHRFVGTllmTmtaaVZPbHBUaGd5MTlHS25pR2VGMUhiYWk1S3VJWEc2STVtVTQ0UVhiZS9Fd1hIbFZ5VDdrRG0zUGVlalZORksxalExeGJBNXVCWjBXRGpXK2RRcWRmY0IyMzZlYlJOTEF6UnNaYjZKWGpsb3dVSmQybUdObnFRckhUamtkNU0wV2J0dVBmWk5UYkVpeUFEVEgzd0U0a28yaXNJTHp2Ly94SXliMEdCbjh5RDlxdzh3ZWs0Vi8vUENQZi91M1AzMy9QVzc5L3gwZi9tTnl6MGNBWU9EMkgycjg2ZWNmZi85ZFpQcnA1M2dFQ0YvYzFjLzlqMGNFb0Rmci85MVA0MjNoYUk2S29xYjRQOTd5amo4b0pQNVJZY3d6RWZMVEtGc1RqZWtzcnpOOGJEWjZPUTZGZVF6VUxBZjZYTkNKQ3pkbXVVRWE2OG5HcVVBbTNVZk1HTkRvbE03U0IzTFI3QnFRR1NVZDIxMUpXZWNsU1JkZXNmc2hsVWxFcWJHNXNXRFRJOHRuUHdMRWdkUG8xbjcxQ0NwbXViMzdnMmhiVGd2ZTJOeTExSXF3M2hYK3NEY2V5RU1oOW1IdVh4RThkOU56THo3ZW9qeFFOYlRwSUlZZEFud2M1NkU0M3RWd0txM1hBRzE0QlVOaG5pem9IZlVlaDEvTHJ5Q1FKTkp5YXE2VzlqTFk2cmZnSnNWRHZoRzBMOG80aEhGNmJRWWtzelpWOEYzbVdPTXQ0VlFiSWhma2tBbEhuM2ZtdVhwVE5hbkptQmFjY3V2WDJORXhURDFocDJsajJ3Y0xyVXdtUEFkSzFFOHphZzJiVkUrUlhXZjBhemRvSUw4czdva2djMjF1V3N0NmFpV2ovdTV3Mk1pSGl5azJKV1VYQTJabDhsYkQ1eEc1Q0ZhYjBCWk1uRjlyYzk5M2VUbktjL0Nid1lETHZjT09JQmg0Y1pjMldOMGhsYTVKY0lVcXN5TFhDQy9oNnVsYUtwTEY4N1F6NzZLR3M4Z2RRQ29Eai9YaklSL3djUzhmNyt5dzhacy8vL21mLzgrZi8vd1hQUFl6dmdmOGsrYjB1RHdZOTZsWUVKU09LdkFHenZkd2Z5ZG5TYkZXclpjVEJmQzQ5WjhHMmM2Zlo5Z0F6MlkzSG9HQnhwSkF6Ym96eGxXQ1AzQjFaTExTcXdjZHJqSzhLV1RTemhGcFJQcVlyeEw5N0F1QTF6dXRyZjY2UkJjWit4eDIwYm1MZ3hMSXg1WmFha1U4dzk2N1ozb3NiYXdSd2g3QlptZlFwTmZWM0NZUmE5Ny9CeC9mKzRIOXh6LytnWWN1YnAxQ0NuczNEcWFwZWh6eVBsN0tLM0VoTXVTU0FaYzBCYlpHRmFrSUFpVklieXZsR2ZjaU5WejYxYlZIUEJGRmlDREs2NkhJSUp4NjVKL3RZYlZnNGp4c2JrVGdRbmhiVzRzemx3UmxDSzlSaWVOTTJoOWNyL1JycDlwRUNBZCtrOXdxQ0t5VlZQR0tJTHdHU3ZPK3NSRmgwcmRJM1JmNUlQUE9RTFdjKzNuSGlGM29BemxQc1BReEM5Y1g5dTNHUjJKdko5a1Jhd0VWU2ZFdG9RVlRZRzN1by9iZXF2WVVrc1QzemIxeWlpVzVnaFhaeXhidjhWYnU4NVJ4ZGpxbW5xMCszczB4cmNmVUgwLzdnSXl2L0lLR0cvOTQyZ2VnZjE0QkwrNEgvL3k3NHhNTTBKZ0lPSlp4SXNScjNGRUhiU0RqM0JoM0J5K1ZJbkFVZEtJa08ya2d4MXUvdkRLY21XeHdEdm5rS00wN2FpWG9YeGQ0MndYQWF0eHRwdjMwS04vZjZzOUt2MTI1Q25KQTBsNHJtb3libFR1ZjlsakhvY2dVYkZJTk5nemc4aW9MWGZRbU12aFljT0pBTkdnNDJrSGcwUXhjZ1pKeVkwTll1WUNIUGs4MnJ0WFpWYVNHVnlRcFZjSUcyYmdrV3pseUpRTk05bFFHQ0xKbE9FZ0Z1R0NrVVhJK2FTK3ZKY1ZFeXFXbUROWHZ1Ynd3TW9ISUVIT1BLRVhpcTNuSGdFaGJqTWNtanJ1cS9SUzVoZ3RoNzd3MnVLcDRwVlZFbXNsd1psSjJGNk9JSklWTk13bHVtRi9HVmV2NWVCKzk4bGJOTng4SlhDdndBTXVoS29JYktkWmR2NVN0a21Uc0s3bEpxeUkxa0loR3VCS3F5R3RJVlhiRTdiMytpbG54TzBqS2hUZGN6dXZuUEpxbk5YdzBHMko0VEFkOGpoV2ZvamtlYVJzcW5vNFhBRUF3M2NlOWY3eWJZK3FQMi8vamJUMyt3dGY0VktFNUVRMmx5SUQveHl3QWsvNzVQTTJBVXNHekdZVkZoY2NqU2V6RTRVUWNLc0VhbExHZVhRQmlSTHFHenZtdUp4Q0dkM0RtdmJ5NitNWHgxb1pLZXF2cUx5UDJ0Z3VBZDVXZk5qUEhlclBoVnh0akU4SlNIeXJ2ZTFUREozS0pBNWdxRVNMakVqQWI4aWFEemJSR0VMSUVPTTRPdEtmUytRcUNHbDRWY1NCWXhtK0VmWU5UQnNDNDRoL0tpcUxCWS9iVUdpaGk4ZW9wRkFWWGk0T3djU21jUnF0L1AxeHFOYVFxaXlQRHcyRjdkeGd1UW11QXJ5d3l3SlMrRElKWTF4UjdwTTFiUVNXcUJzbkFVL1lOTHBGTklybXFNaEVSWUFpUmNmR09CbmMveDRkOWpyQmNxNHcra2lKWEErRml0dlhVRUNFS0pPSlNRbURjcEVrMkdSNnV6c29RV2NYTHFDNGhiclQ2VG5qWnJwWGNsMEtzRjhiQUJDNzFqNzBITDVmOUtBa210WDF0bmd2MlJiZEVQdktYZ0U4R1hxam5Uc2dkRG5ybU5MZlphU0Q3d2F4ak15S09vRTJzaEdVb1k5VmNJUjdyTnZpemVYbVRuT0JLNzhBVk05NnVvNFgvMFJmTy9nZUp6NnlMR0JqRmxRSlRmTjM3eDhYQS8vN2YveHRQQWVGUmZ4QWdpNzBkYis4aVI0cHpiaEJtdUk4bmhNN1ovMGdkSzNnZmJoZ0owckQxY2ZBYTR0a1BmZmQ2WHRrckl3V3l1U0xmeHpsV1NRMU5IOFA3YWg5bnBrb2srR3c5bjM0Qk1BcTk3S21zZFZNbysrYUV6eHZvRHlyWDhMYjQxZVloV2Q1a1NOd05IT21Ld2tFb2w4Y1NKRTFrRW54VWFUc05DRzRZeE5lTXYrRlh0K1BhZnh6dnpSYTBqT2VaRmdvVWxPRjU0ZktrN2pLMWkxbnJyd2dDRW5pUktJMVVHLzB0Q0ZjdGVBV1dQQ2NnY1JueUNaRkJWMm9DQklLMTl6U1E4OFF0eVFlR2xOMVFEUFdaQzZDTWhLc01FdFNVRG1NcnJxVE9wSzFjMVNVRW5ITnZFMnJEVXZVWjRaVXNOQTY1eW5URWN1N01WZElrZGFmYVRacWFSZVNrVEthOE1DYXlQN1Fqd3FWbWxDdnRiV3l1Wm91bGNkaExwQnJZeERxSmVKMFBCUk9CL2ZLRDZVREdQVmNwRS9UWWlyaFhka3RyUVlha3J1MTE1SDNXMkJTd2tub2hwSlZLT3Z0bXEvQXltSEpScHdWcmlwYVd3TlJzOVZzT21OcnVjMWVNTitPQXh6RjBlSG5JMmxGRk5WL2pmUnkvNkk5SlBDNEQ4SWQrOGZBUExnbit4Ly80amxjRmMzTFBoQ0ZuZVdHZUM1aVJCeldNZjh3WmlkQThDdEFKSktKQW5XcU1rNWNwbXRrL1QraUlQZlFRdjFwT3NZWXhzZ2N1b3lGOURFTEhKUzdqWTVLL2NQU25Yd0M4M0QrTUwzZm9seFhhd05oczNYY0FYczdWMXRtQ3FtZnZGUTFHWlRwQ3V5SU1wRTRjd09NSTh3N0NSaFFJTUxDQVF6TFcvSlBkZUVvUVFmaDFJSncxdm9zZkF2aVdzMi9QaUFBQVFBQkpSRUZVdng0aldzUkdJOEt4cGhxOUF6a3JUeTdsZFp5QjdWcHE4bFlFTG9CU0Z0T05sRzR2NG9HMHBWOWRlMFNKcEVBRVVha2tJSU56Nmlua2hLeW5EajVydDhvVVlYbHRiU0JVWEZHdHExVnJzNVA1YkVkYS9rcS9yYkFxMUpwYndScFlrUnJZaWlNdzFWWURxL2hEWkNQQ01qNmk4REQyN1lSMjZPcTRJVzhDNzFjeVJ1eEMxeGo2aU5GMjVCSnpvL0dSMkJ2eWp5bTFnSW9rbFpiUWdpbXdOdmRSZTI5VmV3cEo0cWtKcVlxczlGdG1CU3V5RWpRYzc2cnhCajFtLytPbk9NYjdOYXJqa3ovajNUZmU4alJwWmhhdFllQzlHMS8yL2V0Zi80cUhmL0JWWUh5cWp5WVBEZEpnczZtODg4TGd3TU9MOS80anRVWW1KbVlUMDdFV1ZOU3NlcURwNHJUSCtuaW5oczFPSGoxS2szczJ4NXF4UjlkVWEyZUFTVExXNUhlczM3QnpCTTZaMzRuOVpqMDVBdHpuVXRCOU1BVStiR29YRjlOenVVMUM0dXZnVjdnTXVIRFdBQjlmRXNMbmhsamlLOEp4VlRCdUE0aDNHdW1vUFIwUHJTOThmQ0pkelhnSDJYU2tobS9JY0NWK2FyYXhkemh0NEFmQlZkNFZyblFnVk01RHBCSWsrSnJ4ZHNIWHlrRFVGNmhrazZKMXRlQytneStFN0FYZjVVVmh0YmFLM0U5M003YlNnRlR3ZnQ2dm5GbTdOcnJyODcyN1BhaFNkeU0vekh1WStpRkJKYlRNQ3JaSUJTVTdESTRxdm1ZYkJxYkplRWZXRXRneDZwQTVMSWF6eWZWLy9NZC80TWIvLy9wZi93dnY0TEI1TVFBYmx3R3cwMFEvUWl5THZGQkhYaWJVT241bkhEL2tHZXNvYmVCeG5SRGwybno5MnFQY2d1eFI4K2lOeE4wSVRaQ3VCV1NocmkzeHp2a2l4bEZWOEdla2tQaVhOSnBQQU5BM0xLbkQ3NnFwbFVXNlovVVYwZ3BDTFJIVXhCZmd4NlYxVGloQ2RveGpyR1paSWJITDJpSWE5R2t6a2RMaG1CUmRaQ0V5eE5mUlQ1ZndZWHlEd3pKdTNZK0ZycGk3ajd2akVwY0JGNWxBdUtESkdUOGVBTVF0Ly9FNFVQeWhnQisvKy9GLy9CNS9Nb0pmUlFvdXhMa01rZFJwcXNZYW5MTnh0VGF1S3pGYWtYcTlVTW81SzNIbkpEMkZWTTVHdjVJaEt5bWxBQzJKcUFtRElrSVl4U1pzOTlMbFNjT2VZNndRNWEySTFHREFLNmtWVTFJMFJGTWdjSUpTQnVJMkE4VnZGY2hwMXdvTTJabXJaU1pRZ1RVakVCNTNjaW1XU01XbEp1YmVjQVhHRXFHTnRSTWc1UndxVjZSbWxBakpsZEFpaUJKZnhvYnBsU3RqNHJjNkFNY0o0SEpHWW1ETFQ1cHRVNEZlQ1VGSFBGWWhBUjYxNE9Xd3lGU3NqSVJmUk9aKzZPQUluSWNpZzh2YStjVjVBZTR6TDJHajRiR3BPeUk3UjJCcmtFa2RqNnBJR3k3UVl3bFdSR1FSTGh0cERqdTh5TTZ4ZmpEaVNYRTBOM21odXZHNjJJWjVWVGdLSktqMUxOOGxlU0tOSHNNYjAya3NNUzlIZTV3dTRreC9sQmZ2OHhFS0tIN3FCMFM4RWVPR0hlN3hZNHFQM3dERjFKODRUblM4OFk5NWZ3VGc3ekxOSVl0WmYwZ0dnRS82cVJmSmZvcGJmbEhDL0RWUHZmMnFhME10aEpCNXJDbUtOUTMyNVZpTEFNbVFqYWdMclVVQVlsRkdOdjI4TFJHNE9Ka2hra0lZdUY4anBNYTZQbTJzYVVCdEdrZEhodjVwanhweUh6ZUZUYlY5bWFkWEJaL1FLQWw0ZFFIQitHQmhGcXl4c05sY0FMamlyODlHeitjdStrVG5FSVZCOUlBV0FlSEs4b2pZWTVMSXhUMjNYd0kzVFJjY2RxVEFUc2NzV0R0Qk9nVHBGVWdETGw0L2hNejQ3STlrbkZsZ2pKUFJPSUxESFF1T1JuNVBXT0UwdEc2ejBMdHhLZnhsNHdYeHAwTDI1TmJiZ3BzT1BzdHZwZDRpMGlyZkFkdnNMWGhIN1dWT3pRaGtyMVpEOXZ6cXJRb3BhU1ZVRVNBcFNod2VnbFdrUlJBMUQ5a1FXR2xLUEJsVk14SGE1ck5aV3BHbndMYk9aOHRvUldvWnJlek4yS3IyZVVoYjV3dnBXcDBXYk1Ydk14VytEd2x2ZHhDZlV6QUpUU05DTnU1QjJ5ZWRTdjNySnBhdURRR0tkb1R5VHZxNHV4Nk9rVzUwZGlxdzUxakhqUXc4M29NMUh1N0hwUHcvLy9NLzhUTWVtUDN6MDN0T2wxa3U5Q084akFEd2VNcm5lRXNmVTRocEl4QWhJOWtSTm1sb0JzTFpQL1gzYThqTVdPL3BQcWp4U3NSOUFGZTQweloyRzc3aDMzZDlubkpiUTV1dUJSbSt2QURZeExTSmovMms5ZjBxUUF4STZpT0hLSUdwcjRsVFJTcC9MMGgrMVFIQ1k1UnJpcmpVOUtlRTBYUVh3aEdGSlFTeDhET0IyZnp1MitQVFF4REFRMndZOHpzQWpFb0pXakJ4UHRoc1U3VGdhNGxhcVJhVS90NExtZ2pWa01pemhxUThzQVdkOEtuMkY4dU9SRzFIeGk3TXZmU3luNU84S1cvamFoTlZrQ1d4Z09wdGtSZVMxcEI5WG5yYjdCV3M0cFhUSW0yV2w5V1Fnb0krbUJVaHJYTGFDdStEYlY5UytPVHc3SnVjMFp5RTA5WFdmN3BmdFdxaVY1VjJjVTlsYWNrdHFKUjdyMmozalZZd2dhbTVGMC9rMUdRc1FPeU5yU3VKYTZlRndYMG9Ibi9SM2pUZWFXY0k5T0k5RjgyaEgxL3poWUhMQUlSK1B4WiswemQ0TnUxbU9EZ0FaYU9aYmd3elA5ZDhuQUJzWFJFUW41VWQ5VTF3Rm5qTUtJNHNKMnBXRFRGbm1Db3k0V3BTWWFXendoWHVSa3V1WUVMcTJMb203UlFDOEE1U2RWNUdhcm9rdGJ3QVNMemZtaGdCakdiZEx4T29FWGVtUUlwZ0xTOWRhbFlDa00yaTdEQ09FOGRrdStiRW12MlByZ2dmdmNPOUFOdzJRQ3lXUUVhcFFIQkhBV2NLa0g4Zkh3ekdoMGx3eFJxZkZ4NW5JcDJ1bE8wd0tKWFJPUWpJVWwwUGthU0pKa0tTVk9MYzBaUklpbjJvWHdrUEVhVzRHbWVacmtENzlFMEwzZlplZThpazhIM2lsVUdXd24yakZuQUh1YS8vTE5PejAwNEtUcWd1SDl2a3ZkbUUva3FrVGQyQysxeHRpaFc0bDFwNVc3V1d6UHJsR29GcUhlZTkxWUNjdklWVnkyQTZGMHdGU09sZ25yTXFlYkxobXJEOXlHbkZIWVFkWjZKSHl6M1dJNVdydjJvQzhaRzUwbDl2MVVRYnJVcHVFZFZadlJ2eDZocmh4eFpvTjRUMFpWQWtOYXV5a01wMFJQWXd6Z21EY09pb3M4bU81a2dUYjY1emlVRGN1Qi92a255M0hlK2NaQno2dVBlUFpmelMvNS94d004Zi92QUhQUDhEQVVScG1YcDRsWHJNL3JuRWswSEhFaDhIQk9uY2tXSEdqalJ3cmtIMnI0OGVod2dlRDREMG9FV0tZVVJhR2JUWjVOcXlCUFBPSXJWcU1GejRVMm9pMS9DS2tMd3Bmb1Q0bWVNeUNKdGNjbjNjV0pYdHltKzdBRmdsTy9jaVQvcytlNTFYZS9tSGtrSGZOelBUT1FMMXhHRytGbFFweVp1YTFCVFpEZXhUekQ1Q3dxTllHTkUwZHEyVFRvWWtMNlVvb3FmL2d6bFM2S29BVVRqWDRKa3kvUFh3OFA1NGZvY0JDcTVKS1dZa0h2eXhRN1F1TXUrdjcwaFZUdEt2QkNFeUZQSVFBY0c3aHNCOXlMTjhWZUxHUGdXWmxlTUtiN2Z2OSt2WjFGQnVEK3cwN0VsV1FTdWFDcFpCQlFhdW9sS1dWZE0xcTJCRm9PTWhyV3dpUEJRaHdhVW00aWVNMHkvOVpNeW9rK2xXNnlYb1k5alNYR2RqVnpXUUFicCtEWCtZY2NxZW9RZGlKOVJXSklGb3R2dW5kSk0vTlVYN29DRlpHVWx3aGUrSEVTS3J3S1RmTW10c1FsS3phbjRRa2I2TVZaMnJjZkRBR2l0dk5kcktVNVk0Rk9kRE9zTTFHOGV3YzgrQ2RoaGMvL0RqRC9pT0w1cC8rY3RmL3ZhM3Z5RUt2LzdKcC85aGMxRnFOQkUzcGdtWU5zVGJ0eGJzNXJSSjVydTB2akFBRi9ISk9VOGFjU1VRNVlSbnZKQVliWVhRM1hvUDl1MlhWdGFqUlhDd3RTdnpJU0lDQmw5Mks1N0FTcTVJQ3ZsZzg2YisyeTRBUGxqdUZ3dVBjVG4zM2pNdEQ2ZXpiUmFIMGdrckJFRisrZ2ROVWF1UURjRkt1SmlTZFlNTUlLbHpTZCtGR0M0Q1hCRWQ1d1VZT0taNXVobVNFQjBkRzU4TjRBOEY0RHREdi9zR3p3TWRNWWRxa21MVEt3TENablY1WVUvWjBsUlVGYThja1duVUVCRnFiQ1VUMlVqVkVPa3JLZzBVY0VjU3Z6YWZyYk1xdkJkcHU5eUM3ODJiMUZKR05zWHhFUlpUaG1ncFN2amVhTVVac2twUlExWXB3THd2NHJKZUFPeFYxNmpQUUhDU1VhdXFPck84Z3l1Ukd2c0NVdFZtdW5UK3l4MGtiWnpjZUg0N2txdURjTkZPVmMzQUEwNU5vZ0htRS9CRnBvMjZNTjdSOEN4dWYwUzcxV25CTmt2TGROQnRLaHpJWWp6RGU5bUFSOXE4K2EyYUNCbHV6K1UydUtscDBZMlp5R3JLYUdJbVZQY3hJS2lPL3c0V08zTjBNMTdtSndCbm5iZ1poOS80eDNQLytEdGZ6TXMxN3V1SDRCZzkxVE9CZUdjWlM5ejlod0ZscnBrWDR6Unk0UVh6Z0NPOTNmSm5XY0U1b3VMbEJNTXhGOG5TQ0Y3ODY4a3o2TUdyd3QxQUg5VlVQQkQxWFNDTlJFN055cWtFS2ovc1NnMkVlQXVtQ2w5dVZ2R0tTSHg1QWJDSlViQWJxNEYyemorMWpRRkpmZVFRSlREMU1YR3FTT1h2QmNuZjZEQ2phUG9vVUltY1FOQXk4dGRSOEtmQzR6ZC91Q2lRcHdLY0hYNkNoWThNY2ZQL0cxd0o1SU1aVVFoUkZqUmxuMUp2dGRvVUxmaGEybGFxQmFXLzk0SW1RalVrOHF3aEtROXNRU2Q4cXYzRnNpUFJwaVAwMXYxd1U5N0d0VW5rcnBxVWlIT1MvVUxTR3RMbTliNC9MRU5WVlhHNTlrYWI0bVUxNUtKZzdZVWpwRG5TbHJHdnZIcnZpRXhPUGhsS2JSSUVORDA2ZlIrd2FxSVBpQzFEbjhyU2tsdFErZlplMGU0YnJXQUNVM012bnNpcHlWaUFmbHJ5UFRPSlR4Y3ZVYzVUR1o3Q0g3c1VaUTZjb3NCaC9PT0grS1YvUFBTUHgzNHdtOGVWQUVCOENPQmYvMFV1Z0hPdUgyL0hXRWJ6bVAySGR6elNBNk1XaGdxSUlncjFnUVBEYVFNUElOQkJIWVNMRkJDQ0NsV3UrWlhuS1VsdDhTWWMrbkY5ZmFTbWtacmlDaGV5TVZweUMyNUVXbGNWV1NFYWpWYm5QcGowVTdQcUxDOEFLdlVsQkZ2cnNoKzhKUEx1b0xhaUZudytNMGM4YlU3ZkRMQ1ROeVY1U0VoOE5XT3N4OEVaQ21QY296bmN4M29jUE16ZVpzRU5CdndKTU16K2NYWkFIQjhFb2o3NFNnUUZQaEVFN0x2di9zQzg5RktjYS9GWEJtZ3V1Nkxkd2Q4aXRSSFp1TzZVUjg1RGtVRTQ5Ujd5VCtxMFhnaVpvVi91OVpjcXNzM2JnbDltTE5yVVYvQTg2RXBKN25JYnhOMjVEUHBYS1RSVCtOWC9mS3VrT1BXUi9GMkh2TldsSHAySjRDMWxCRGI3cWhDVHdiMS90dnk4bElmTFpZTk9JY25GOXlidFZHbnFsOW9tcnJnSmZPeTE2L0xIRkQ4bmVsK25lOXRSTzRxQ1R6ZW9CNFNaS2dhVUlYbTdnSERWOGl5M2UzbElqTmlyWEpHZ3ZwT1d0dTB3empGSndFZlBsQm9Hb1AvNnIvL0Nod0Q0QmpDbS9qaXlNUFhIMnQrNEVSaEVDSHp6TTM3Q0E3ODZQZzdCYi9IN29UZ1VlVHlBZ0hmOHdmUGRtNGRxVkJUSGJCd2MvQmVqRENUQXVzVFU0MWljTUd5KzNRY2hTbnAxaVNKbTZxNkMwRjNoeXVrRXQwbVFmc3NYT0F5UGR2c3M4c3IvdWxyang5M0hnSEtUek12RVRaV1hUb3FISWFzYmRTQVhmaDFaS2loV2hwUXJJaGNNQ2U1cENybFVJOVIwREFzei9tN0FkV0VpNVVVRjd1ZitUNitYQkVSTnhRS1JEUkVSWUZlRkl3ditLTyt4UkFTWlV6eEs0UmQ0Z3d4eGZHZVhCelpEQWcxbExEUVlQd1dqR1B6QlFQekNNT2YzNUVRTWE1c2RCUTJCT1BlaVM3ajM4TjN2djhWdkQ0T0RLQ3p3OG13Q2hJbU9jTHlNUmFBYnFHSDZNeTNocTZZclVOa1JSaW1qUk1SWmhTU21LeURXbTJLNmxCUGNCbG1wWFNmdGJYUEltelBha1NXMlEyU1d1R1FGSmtUTUNCc0xFSEdxRjVRS1Z1VFFLaTlTZGc5QUt1QXI1WTVYRzU4WW53cnhEbDkybENNbTd6K0VVNTJLZHB3Z2tXcTNPcXBUZ2tLU0FZTG5TbW9LWDNDaTc3WERnTWJQN3g2cDBKemhISVJvTW16aWNXektWb1ZUdWg4NjBhN0dzVXZPMkxPR0swMHQ3Y0tCckdzUWYxZU1rcHBPT21JT25jbU03Tk9tQy9wSENoTUoxK3pZS0hKUWdNeTduMEhnVDYrSE5UV0ROWWQ2b0pEbVZDbGF2bHhyb0dmVUZzVWM5VGovV1p0OXdYazlKU0tlUUlnN2tzWWhlZHRLRU9JS0xhY0ZVMVJxMWhBOTlGSTdnbEc3dnZjZTR4Z0RXbytac1hYNUk5ZklJb0tNbExyRkFZNHlqajNscW5NSUtCQWxqUDNud05NZ1M4SngzSWJISCtuQ29hb1pQTHpjT2ZDZE8rSkErRzZMSjMvd3A3N1FCSTRjK0FRQTNmcnA1eDlqRk9JeEc1UWE0NE1CcElHSkFBamYvaDQvRmhRMy9ubVBML1NqVThjOEIwMHNVSWcxMkZEQWQvMUdEeENFVjhTTlZuVHRYT2FCZ1FrQjZrY2NYRVBwWEhGWXhwb2RPcUpaQnZtRW1CcTJoWVFuOFBnQmtpaFBGWTVVakpzY3RtYVNpT2tXeDJVakJaTW0yVTVnWUtPbW1Rb0kyazA2Qnc5OVJjOXVPc2ZUa1MrdkRIRXF3anBFb0VFYTFrbnd0VThBbWs2bWZGOVBVMzErdmFTMnV5MW8rd0xTM1VtOTUxU3ZkaUM2c0VhaUNVYjY0L2lJN0lIUDR5VXVERGdDQ0xEYUNaNDB0S1U4d3VjaHdlQ3hudW5RK0JtZkdJeU04WmM0c0Z6cllRRTh4Wnc1S1d0NlFXdEJjQ2pvNUkvWU5jdEgxSjZOM1dRL1hlYzRoVHhuOTdGRnhqbkpSK09ZK004aVRvV0pyRjRyRTRqSTFTdVhHeDdpK01yMnlsZWNGcjhrT3N0c3VVK0F0WnRNdEtyelVzWVRlWHBxelY1NWs0TWQ0bjYzRC9LTXJhb0p1YS9Nd092ZW1jUitnU2JyYjNzQnNLazJqaHJNamRvSTFEOG1iVGdmMWQxZzdBQVh3ZENJQTlNMkQ4KzI5OGNoOUM0QzkwUFhUTzliYy9hT2xIYThzNm4rSmhlelZGQ0lqRlNQQkJQdXpWV3NjNFlkUFFLNWFucFhHZFZxdHJFbHl3TmdLR09EblVQYTVxb3FmSCs4N0RxMmF6b093UjkraUR0NEVNR2JxVXZoQmovdTlHUHFqMnNEM0hURFQvMWdqWi9tQTNqU1RpME9US3pIb00xeHdsUVhNL2o0aC8wMjJDUFZNRERiSHp0emhIeXI0NE9LOEp6U1o3cXBPck5FcjNpOWNYS0dkWE9nVWxSdHN0Q2pwdXEyVVpXenIxenVZM3lPZHRmSm5TdEdyeDBaMC8rZzZmVzcvVUZaaGNjRkFIV3hmdGQya3ZvTEJvdnhTaXJ5ck94SHVoYlp4MHhhU1ZtUG1udmpUbXB4M0pDc1FDSWFHZUNPc0VtdlFzUUJVeUJzME9naWVObzh1L0d5d2RZUndtUWpsaVpFOEc2SzA5VVA4VUJRL0kxeExEZ2Y4WVlFMXpNb1hwbEZzWjVhWUtJUmYyR3REdGJZamF1U0s1TENZd3l1WFVNemNWeEVMZ1o2N0lITWdhN0RSV1VQY2VYV1ZycmtKYjd5SmpLYTk1azFsZ2dVWUtST0RhU1BJTjk5UUlhRVl4K3lhMG1TZzh0TEZmNmEwYW9sTURXWkNDREdyRTJhK0lONUdWNHB2S1Vqbm82NTJxb3E2SUh3ZXAydFRndFMxanN5ZFNoNDJWaEpJVFc5UXJoY2MrUGFpMWhnM0R0Rkx3MlJlUjlVeUhQR3BrZ0pyVGlyb1dqNUxhZ1V5VmlSVjNnS1h6VnZoanROZGpWV1dZVFhrSXFBTEJBMmRxMDRkTHQ5TEZ6WHQyOGx3dnNtWEpyOUowSFFNUFhudDM3aG9vaWtKQUtCOGNsSjVCL2VXSVhtdVBjL2RsRnhEME1pMWREK1BGeTJHOGZsaE01T3hBOHZjTjBOUkFLVm1yT3UyOTV4c0N4UkgxTUpGVW1STGFFRlUrQmJtbDhzMGI3YTVoT0FyNkV5MVBEc0hyRHZaeFhjODVQM2ZqaEh6NHNua2dSVGM2L3ZYaDVMMUJUdTZaSXltcVF4cFBVYUdPTmVweHdqYWJCb1lJM2xhQThMcHkzY21RQ0NDd0FrNHZucjRBUXZueG1KcVA1Qk9WYUlXcFhxdEljMnM3ZFNIMHhSbFRmSXhzVXVWSUxqc0dzWEdGSmRyVlFDMGFRZ0RYcVRWQXJ4ZW1veDlONWNLN3Y0S2tCSU5lNXdhaFNSVmF3NlVrdnlRTkdlMVFmZlkxbUdJeUNrMUdyS1dDVWxYalZINEJGMFUyU1ZRdUhKUU5ORFV0TmRzc254dnRlb2lpaGNScXZER1FoY3JzK1FxZ2tFOXl6T1NjczhMeUdXWkQwTUFJVVpmdW12NFNLb1FDS1pmN28vMDVyVkhqbXNxU25hcGVDanZ6WVdLeVJWYmNySms1dVZLVVJHanRtMkdWVTM5Q3JJczhpdXhpcWN1UGhPSStndXQ1MDVxajEzaVUzeFZBQkJITHlyU2hZMzEyRGpyajltLy9pOWY5ampodHQzNlVhYlluSDZRUmw0SytZV0hxcng5M3VBb1JxamViRUg3dDY1ZzV4ZFFBQkVVY0NnQlU0K2RjZnhCZUJZVlA4bHpUTU5DSkVlaXJBdWhTeUZGTFZpdElUWnFWWFFlL0NhdWlMS3RIR0o4eEhqT3laSWFWTHpJd2xXVWcvM0RBWStwSzFxcStFVldjVzIrRlBoSUw5V3VRSmxzSmluc2lORTRUUVlEbnhUMWVCZ2RYbkRRQk1oQ1pTK3ZEQjREWUFMQUh3aENlY21JRmlZenRjQzNXQWZ0ZmFNakpYcm9RRlo1MGhLQnIyVVRXUVBmR2duUWZDcnBqZ3lKRXN5bXF4QlRUL0JaZGNNVnRtS0V0S1dRVkFjUnFFcG80MXk3OHdjZlpTT3dLZU1KTXZtSFFVd2VmSnYzd0krVWhXRVYrRWIxOE9hV2E4clAwU1VUc2FkTENYRnBUdE0rbENuRWxSRE5VaDJaYmRkU3JWSnhMMVZwM29Uc3RKaEFaNE94NVppdmJ5dzQwNzl4Y3ZtU3J6cURNR0xnamh2TWJ6Z080S3BPeldrRmR6MHQvTHZJTXFieUdyS1dER0ZUd09IK3l2N2MwMDBCZU4xN3hXejBvUlVRMUVydzdjUk9WVUVITkxvb2cweW12aWhUMHo5K1dWZnZNL3FVd0tsRXhsSXFKeExVTkNhNjNPL0RjZFk2SVZaalVUZ0pVV2k0Y01GSG0wOHF1QWxBV3Yxa1RxdnJlK3JrZmt3aTlQdVZPaDhFMjlHMHJ5Tm1YVFVsTkhFZkNaMCtRUUFSYWdPR1NuNzlRWlFjcjYvaVRMdWJKNVY0ZytHVjluN2doekFoOFZMc0RWUWdDdUFnNFVnRExrSXBtckZCSjRJQ3ZRUWdEalhLaXFGS0ttSDhJekNad3J4Q1VCY0ErRDdRSHpLa0ZMSHUyek0yVUtlT2ZpNDRaeDFqYlNoNmhrSk91SjVOM1lORkNKRDRVVFVmTlpBZUsyd0JhRmNzelBkQ2s4aExzc1Fock9BS3JKQ0ZDVkJaN3E5S284Y2V1K3YwMEFwKzBPRjE5TGRrZldTMUhFWlV2aGdBUWozUkpCdFU0Z2p2Z3hWc2pKV3pCVyswcW40UmdHdXl0OGpyZHE3ZEpqNmZvcVdDUkhXbzgyaEhnRmZkWGp0VWZTWE0xSXhxY2s2SEtTdC9ycExSVmRRaUF5UmFVZ1F6UlZuNzNKQktyaW1lOTF1Y3dGa2JPdjFjTm1WT1pIemJYY2lDcm9ZeU1pM2FxS3ArRlVzYUhKaGlnK2Jud05nNm84TEFEei9Bd0p1c1dFTkhFMWNDWmordVllQ2dIQXN4enZ3dUxFRVRDVkNHUncwdVc0TmtjV1JIRjB4NzUvWDB2R3hBTlR3WGVITG8wRkJWTGdFWHpEdWlGUk9SV3BxY0RUbTFmdDV5TTNhV01BblZmanIvdzdBQjdkdWJLVHVPd0EzdDhlZDdPSzRvZDFPSUJFMFlTQTdGelNKNEhRQW5MWmlrN0gza2d3T2xPdWE0blJkWk1kaER6eHlqeThCeCs4bS9mRERPUFhFT1Fnd2xpRFlPNEdua0JvNUlEdmlUZUVQRGVxM3RJMnI1ZS9CV2pQNG14UnlwVUEySTljOGg2dmpZb29qMTc2MlRTV1FnZ2pYRDBVMk9uZGl5VkV2RkhJZ3ZIRWtkQnIwenRieGVyL2dGTmcyMjVJNHRtOVBWRGRaU3BHYUxMZ0Y3L1RsZm1DclZrRVhoRjBKTnhIR2FwQnIxRW84RGVEVTRlVHltTXBRTFNta3BtZUVLOG5LbTF4N0VVWDlzc2FtU0JXMjRxVCs3dmtyRVVXNXNTRnZYSzdRMmpkam5TWmJScXZjZ2dyWkdBalU3aVREUVZlV0RrSG4wMFVFYit0NDdBZDMvVEhYeDFkK1FlYTlmMTRWa09PeFNnRlF5M2hUT2FZTmVIZjExT0lJQk9JbCthR2Vadjlqdm44a3BHdW9ZUlFDVkM4b0tQMGo0SmtYRm9rSUdQSGhYYmN3aTNzcVVyMnFLcFRIYVcwZjVRb2Z0SjlOcEFvL21EZUZuMWVFY2p4Ym1RSS8xVUJWN1hJbktRTHYwRDZKODk3c1V1UCttdlphN2REcUN4Q0NEUFIxNHJSTWNwUlU0VEM0NEhERWc0cVk5TVBBYjVoaHlvL21jYnJpaHdJemZSeTRjUUJmRmpvdjBKc2FuNlNzVWZJeWE2NktPRjkyUTVzRDFMaG0yTXJWNGkwNGxTNXZCaStBQ25uWlFIbnRrZ1RKU2VDZFppc084R0hzSGM1REVSSHVxTjNodUdEbDMwR2tjTk5JbXFrSkVTQVZsSGpydlE4KzFCR2hOVGFGa2YrUUFOcUdzM0cxOVh3ZVdDc0JVc0hQSzZCVjNoU3djYlZTQUY4SWtWUWIyNElLa2JHaGJWd014N3VrZElRQTNBZlN5M3Y4L0xsUElJakM3QjlydksveVlnQS8vWG5SSDJjMUlHa1pVM0tVRWYvMmVWVXFGSTVxNDAwNzdLTTlHWHdqQnhoMytBWjQwR1lnaVV3M0tUUDRwZGUzaUtUTW42R1pVclROKzNuQkZGbEdxL2thZVA0ZEFNUnphM0ZYcTNKelc4YjNTRVFXalY0MWFiUVZUNTFqajJxYlNRZk5WdDlweXRVeTVWVklTMU9peEZkekZTWFphakNrQnE3d3FxRHNjUEZPUHd5Q0VPR2lLQkRvMHRyRFJWc1l4MFpCQ0dTeHhrTG16QlBuR05nRTRjVTlmalZabTBDY3ArRGlkNVg0VVFBK3prUXdGUmdsZlFrNkRxL0VRVWhraG16V0h1czA0RWxLaVJMdVVSc1hhTW9sbWhDSjBPVzR5T0xFd1hXTUxvZEtHL3JTZlc0QmhLL3VpRkJRR1dzaWxoRUtjMnRhRFkvTlZaUVN5WEN0Sm1wMjFtbXdHeWJBY0doNElrSlpuQy9RQ2NIdUZnVXl5cHV3OTFJa0swVHlIaWdGcDZWY0NBUkNVQ0lFUGNwdDBpb3k4Q2diTGdxU1F5U0pKOURWR0Z1enJIQ1BaUlNaenZmc2JudXMyODVaMk5ISG1nSUlkV1Fzd3MvOUIrZXV1SXRwZXlNVWh2SUoxZG9lNnEveXJ2Q2FJaUdqcENhYXVKTUhnbkc0a0RjRk03YnFNRjdLTW9pVER6dmhiQ2F3MGxxRXluT05EaHg3OGczeUVYUW5MNm1KbVpxVlU4ZnpTRGxmTkNBV2U5a0dUTUVOQVJzRzN4ekJSNU5QOVdDaUR3UFAvT0QyUC9aTS9Ia3ZNc0hoKzd1dUJPS0V5TGZvK0F3ZVNqRWhwMllVRUUvZDR1VjRFdzlqZUFNYTcreGNReHlCd2I4dTlCSzcyS05ERWxYOTRPQ1JKZVFVbVFiMHNVaGJYaUZ1a0VtT000VXJMNktjNENJclczeXZoMlM1UEZiZ2dyKzhvYWxBVjVNTnRVU29DTWpncEx3cFNvTEpjRFdHVUVmaGJHTERYYjREa0ZUZTBueTVEeW03U2s5NEdxRGszVFJyWVJ2eXgxMDFIWHYwV3YxVlRSVlN0bTB5cXNZS3dhR0ZlcWdna0ZMUmpQTkozTytYQzN3bnN5OVlZeUdPc3hYdVZhQ0pYUTBMd2NneEZpZ0RFWDU0Uno3NDhZcDFBcjNKd3Q2eVRvbHFhaUp2eWVVaTkvT2k0d3V5NjhXSW9hMVJxaUVYOXJxUmRFaDhTdTBwOHJxUUI1NHZrK1ZCRVZ2My9Rb3JFd2cySnVXSHZjMVVuRld3VUY0SFhxaW5UZmFVVHR1akNrcFRScHNhb01lR1BVZWIvT0ZkaGI0Rmo2UDFMVXZiMHdINmZPazRQN3dsNDE1a1hjOGxycVZkR0tNQm1zNXAxZnNhVWxOWEJNb3QrRnBHajJLUDhONUhFRytVVElTYituakgvUDc3N3pIMXh6VUFwL3ZlZDluazY2bis4WHMvc2ExQkVHZUluODA0bTR6M2NhK0VJUWxaZ1lFenhWZ25XbHhBenp1Ry96OTc3Nkl0dDQwa2E5dVczTEpuM3Y4aHo5OXJ6ZnludTMyM3BQTWxBZ2dtRXlDTFZmdWlyVzdUTWlzUkdSbVpBRW53VXBjdFFYVlR0dGI3MmpiUHpOeDhiODg2NnNYYnEvUkdSUzkrQTBCK0RaYjIxeHZsdks0N0RvWjBZL3JTeWErTXcwMk9hNVpodm8yNUYzTE5PSWk3UHpqdEU0SmpUSFRxMkRoTkFoQkU2ekE0NE1jeGorMkpUT2tnZ0xEd3hDTGVDbmozVG1vd1plUWFzTUZaQkpvcEthMEJSY2pnRmJzRUxzWFJ5YlFqenBWMFMwNFdOMkVHVC9MT0xpR281V0hKTkd4Y1J0VE0yUlVyd2xJbmc2Wlo0WW5HdllMd2RkSGsvZ3B3azNwQWN2T0pGYjVFK0ZHRndtY3Z5RjFsSENua1lUblhsSGZGcjVXSWVjVFBDcmtMYy9ZWnlYemIwR2JObyt3Y0ZncTBlSHNES1ZZV3NRdm1zWTVrdXBxTFdSbDFmRmFjRjhkR3AzWUZEL0FzKzh5WmtSSi9rd0IveVZtQ1JkeE55TjVrQm1kajFwd1JvbVp3UnBhME9lUFRFVklydXpyb1ovK0FldEovcytNUVl1RXJ1T01kQUZjVmNDeGpUMkQzYkc4REJOUmNnOUJZWTVYQTNmNk1TanZmOTNjTWhnSmhuM204RjlyajlEMlVGc2VVWENsRjUrWkJjUGdiTk9iSzMyQ1JGMHQ2alJzQWxjS29hUU9mVjNZMHVGZGl6NVdYM290VkxXTWZBMHRHOXpkM3NIQktJb1hBTjIwMkhDTHkzRlE2U3cwQ21uMnFjRDE5QW1tVFp0ampmWEtPZGs2am1oN1FZU0dFQ1lqTC9hRVcwd0VnQ0FacjNHRzN0d2o5OEFNQ0M0UWNoYTFZWExMdG5SRzd6bzA1TU9mTmR0WTV3alBueEM3aE5DSG56dElzSEtrVk1BZktGczNEWnREaURzRVFLTVM0RkVvQjhnSmFSNFNDMEx5NTVFU1duYUsyN1Q2NXpvQXNEby9tMHdzK3kvY0VYeWxWU2dWMC9UTGtYZVlzZ1V1T1FjczZhUjRsMDQ2TUVsNW9jNUV6ZitZVUVacFhPRGtxWjJteHU5MDdNMC9FbGRTajBadHQ4cE10SFI5ZlJmYTBxVW54bFBLU3pseS84eXhCZTQrTW0xR0ZVSnFTdlE0ZWxXR2RzcjNPK1hqbjFETnlrVFlDSDV5dlNxbGMyWE1xWkVGV1YrMFlOSG4yencwQUN6MkZ3d0xPVXNKekUyWmZZczd1U3dzSnV6RmpQZXh1cUpuWDBqUXRwZGl5aDdmTnROeG9aRUtMYW84RkcwclROY3ZJc3RuR201dEV6L3lVNk11YnBkclMvUEwxSFZSQW5kNGlvcWp5WjdzQnVESVFjeEVIMWI0Z3JEcnpXTXpJbGZTSC9kME9sa09aNVRnc3dWbkNOQm1zNGZnb2txSGUyUmJIVFBqWXBlbEVpaFZIWUVhd21hMVlzK0JsRmNZNFNVcFRWL2E4anlrREVBNVRHMThKVU1DNzlqRkZwallVTkFPR1hKc0lJQ3RLcVNYWUVxMm5DZEh5MmlFWnpMWVNHYUdKbmFPV1NDWTQ5cUt4Rkx5WkZFSXBWWWlTdWg2Slo5Q0lPQklSNktoWjNGRzRIQ2paRThRRUc4dEU5czVHemp0N0M2SmpTK3RTSk0xbDZ0emxvdmFpeldVeFpDejFRRFBpRUJ0emhYTE51SkVtR0sxbTdDWUhjVTdFTFpLTndsZHpKaGk1eVRlekdMTnlJWGlnd0VlV1RuR3NPVWJFY0xPOEEyQzgwR1lkSXozbEYzb3BCYnNLbHpjVGxvajVWaWpHSEZVSWMzTVpNb05Ya0NUT0FiSzFGSHV6ZUFMbUxFdHdwczNJTW5DcjZTRkxYU0FYNXpzV3pvUDgxQThmKytFR0FCY0xJR3VmSDJrNkQzaXlZMHJSd2gvNmttRnZNd0l6Z3MzOEtTU3ZSY2pNSElLZHlkaHE5aWhUajQzTTcxR3BLc2ZOTkx1K3VESFhCcUtUMFJldjdXSUJVZkM0ME5KKy9tdzNBRWNWS0tXOUhzVGxZV2JhYkRpd3VPN1ZVWGlwcW1pK1JMTmtkSGR5L1lWelZJWmlDVFIvUm5Lc21kQllTa1l4RFVKd3JFQWh0akhNWWI1aGhtS3ljZ2l1SWNBM2dEY1krODgvUC83NXpaL3ZtY2hDSUxMRVMxdXlKb0thKzBSUVhtd1hZTkdIalp3dWkyUTgyOCtTdlFndU5lR0FNeVN1eW9nTnVkUnNaSFByRURrRVE1bzJMSkp6V2NpQkJhRnB2amdtMkhDaVRNWSs0aVBwMkx1TXVVaUZnN3ZJdXdSZmdqd1hlWVFvTzVXNy9zSlUwMFdXcG5IMm5hemd6VkhHeEJ3SG5oc3ovNmdBNmN6OEkvMXpuUndsWnU3SWlOMjIrRUMydUJseGhSaFc2K0pqYjB4UjI3RURXN0ZFSmNLVzZ3dGF5M3BtY0VhV05WK2s1ZGdTVXBwaXp1Q01aTTBjNVMwRmVETnFKbHhCbHNwejRGemhBd2l5OUVobk9teXUvcm4wNThmK2VTNEd5S0ppVEhNS2o0T004WkVmV3V5ZGJSVlVUNm95WWgzK1dQcityR1plTisrMkd2d2VRcFBUUFEydE45N0t5b09XZElKYW1vcGVnaXZoTDRhVkN0WGNMbkMrV0YxM0pGYk51U1BZTDM0RFFJRjlzTkwxNEIxVnZ4aVZxdkp1K21KNU51RXI0M0NGSTBYVm4vbEM4TnJBMWd6aXRhdkpISVhJbGNja2l3c0hFYWdRdnZEUFovdmpGMENuU2ZtN2QvRURVL2tJaVJZL0dQcVo5d0ZpSHFISk5DZEJ2UnNnT3V0MlU3RWxDdld4NEhVQkEzdmtWYmtzdFpRdEhOSXNhZGZUTDhObmNKbFhXVTVjdVMrUWN4TjdEaXlDSXBSQWNTeEZjNmFKOC9EYWdrVWhKODB1K094VTlqcmNDR1RBM016aGI4UStxbEQ0N0FXNXEvSWpoVHdzMHN4SVRqRjdUMnF3SzZ2TkNyTitSckFKeVFyRnErYVNNK2NTa2hXRTZCMkE4VG5IYlgrMk9FYXBZWmt4Szc5QmUzUmYxM3k5d0FHZTFUdHpoSlF4eVJKelNQYktYbktXNEJ4cmhaTWFIRFZyemdqa2krQ1M1bHhQTVZCbTRVekhHK044NEVlLzlJK2cvc2lYS29SQWwxazRVY2I3NTJuUEZBNmlXd1UxcDcxYVd6L1dla2pYTHVCNWFOMlBNcUt5SnJZWHVXaWFvMU4xL09XdkJsSWJScmtaZ055L3kyeWhwSkN3YmpvTDdXelB6RGVGZkVXbDNoeTN4MjRBZERhNmVFN1NYbml6a2k5QVlFTnFQNzZSTzNjMDJ6ZkNMcm0xTTVVeVRncTdpeTlaMW9vcUJWMlVVakZaeElFWU1TL0VoVDIvL2hWTHBJaHA1VnUrOGN2c3hnSW9QaDVkdS9IWGdqL3oyWis0ZVlqNWk2VVQyb1NJQkQ0MGdIa00wbHpQTU9pcXpaVm9LSEp0UjRqdzUxclBHUjlRM29rd051MEkyNEhqRERmM1YrbU9jTHhGUndqckVpS2Q4L1VzZGM2LzZhV2p2YnRwcDFKVW5XVUdvZUpONFdhaTV5VXN4MkVKT20veVlocSthWXk5NFNaeEVPYnhHWjU0bmIzdEF0cVUyL1BueGVvdjBweDRHQlM0ZFptQk90cExyUjg5K3J4OUNtTG9iSy9JV1NmZVRZbnBqT2orR3EyMnhEWnBXbHRrV0FIZnRYUzV1Mkx1SWJmdDlZSkpQTEF1YWtic3V0ODRITStuWk5uSGpnM0tKdDd2NzQxV2hxNDBjNGNPU3VVUXlheGhjK0w4OVBIVDczL0diMzJ5Y0tMa2pQbGZmL3N2YmdhZzVOMllNdlNyLzRDcVhHZE1jVGdEaHo2N1pYaWp2Tkc3V21yalE5bVZreE9OMG5KMnlGQmlrVmZ0bGl1U2NTYjNQUUFjdkdUdm5CYmdRSXZMTU81d0UrUlNMMm9meWhaeXpCY3lWSjc3a3FzWVd5R3czQXNHNTRzc0ZKbExjZzN2dVltTExSbC93Sm1KcnEzajZ4MXRZdzVXM3hoOUoraGRHTHZFSUkzWGZScXk4cFhRYlFUMjNvZ3B3MWNJYmg3UkNtNUJqcWhSMGVHcnhSMDFVN2ZTbTI5T1YwTGFNZGdQUXVudlQ1bmJZTWpicm5MYmVPOG5DdTc2VWU0S3lSWGpHZHRIYWNmdTFNNThrRldlalZrQmdqaGFpOG1hcFNzT2c2WTQyUkN0MFlNZlZjQnYvL2hrVC9TVTNXTFV4bWY5K1Uva0NNUkZwMklYaTVtaS8rMHdacEQyVm9DKzdSUytkbE9CTUZ1UWlZOGZEb3I5RXJBTkNIamtHUXY0TVB1cktpd2d6Wm1aa1d4THdZZ0ZqUlR4SmI2QnFWcVhhSVZPeTV6UkkrY1ZlUk5zN1ozWDQ1RUdvdzlYZDRWajVJcDRKU3lhVFhqeWpoTkdHUmFUaTdFcmJPekFoYk5ycHBxWHVBWEQrTXdlOUs3M3liMXVZZkh6MDJQWitoWFhidHM4SUp5RWpWb1Q1dzV1Q2tPVFZ3aGRZVXltTk9kNUp1dWs2SVVwcGh6TzZIQVo1cGdndm5HYXhXVUN1R25pdU5tVHRsTjR2bXExVkQrTXQwRnRFZTFjSWF4SnpXTW80VzF0d1ExcVZxbWtlTStiKzlpeFBkZXlwUU9RZXMzNW1GTTZxTzRQS1dMMFlteGpVb3V3Zm1BSy84elUxdmJISUhpWk5aTnJyaVIwQTExNEhIZkxtNGpaWlBQRktMV3RtRTVBVzZiOUdPYlFiaGVDbWdXRU9uZFpIQTNYek0vOTJRL2RWdHVpbWdabHRiRTV3ckhIZDAyOHNRWGIwalFLWHh0Um0zRGJrTjNTdWR4aE1zWjgyRnBiemFrdm1uREN4Zi85L0Q1RVZBbHJIdjN6aVg4Kzg4T3pmNXo4UUI0UHZIaDdYRytHRDNxdm5NNXFQc2ZRTXBydDZqL1kwUkZjWVdrOTl1WFdCRy8xd0FwaTMya2h4dDdORXZQcWRyMEJFTS9rUWtkNVk1OW4wY1Y2Rk44dVFscmtOL0dHZnN1b0ZPZ0lkeVdobjVaQkRpaktvcUpScWxpQklLaTYydTdsa09oZVc0d000T3gxSm9PUVpTbGxITzhKemZuVUJUZHR1TlJBVXE3UU5HbHZsTlF0RHU2NnpuMW9ia1htM0dYSnVpOFlZK2NKNDdGM0FISytjNXZxZDBOeHpuNWxyd2NsNTEyQ21YRGJYdlo0Q1I3dEMvc2N0MHRDdkIzL2VSK1N4dTNZeG51VTFuLzhTL3NwNjNpNEg3VzAwMlRmNzhQWjlOa3Z1ZHJuU2kwNFFZdTNBYUlSVVcwU1laY01YQXZUMEhmdjR1QnBRd2VHU0l0cnMwYXpNeWpYMFhwbWdrQzI1bEZnd1o5THA4ZytTelBYbG0ySnovM05uR3p2K2V2U3BMYjJyZEI3eDNtbDBlZVM1WkdVUWU4bGNXcEpEc3krNTYzVWRib1hmUjZOSEpINzNuYnNuZXF6OUhRVXNDa1B4SVZzTGtQRm1FS0t2elg3NGRWZGFiUVc1SmJTZVcyWWVSNXQyck1iaTd4NUcxM0pwNjAyZGFudkRpaDRNR1hNK2pOeUpTOTc1S0w2UzVGbnBDaXkxYnhYbi9wM3FwR2R5OTVwQnIxSm13aDNsWkdqYjl0em5RV3B6WkNzVzRENkt0UXp5NVByNzdaazIxN0VGdDBJY2EzY3hMeURoZS9iYi8vbmYvNkhad2Z4K0VBWFpQeDlYODZHOFQ3QTkwVG5JajJmWUhocEdwRW1UcW5UdEFadHF5QjYwczYvbXZ6d2hkSDl2T0RuMG43VXJKTnNlSU1ZYTVueG9wTTdCaWdWaWtDcmE3VVEyMEc3c2pCYW9iMWJNdUFzTzhiTE42N2xiUU4xclJnRTd4NmNybnc5TG8vY29xeTgxZVIrNlJ1QVJSRjNRZG9NK1hpNEsvd21PYlpLbThZeWN3bG13a1ZiT3VxQzFqbVhrSE1wS1J4eHpyMk9Lb25tblVETVFuTzR2U3BlU1VVMklwRHBqQjJRdlRWM2svQkc3b2U1QnRzRVFyQ2xwdTgvd1FkaHdZakhDWHh6K0hRUlV3cW54RjdWa29sSXdXZFpJelp5dXFLdzVHVCtDOW01RE5ld0JGV0FPTm1leHlFajFueWgrb3RzTGkrWFVXZzBjeC90YmFCYmJRZVl6emFiUHl6cnlHQU5lSjVhWGpIM1luZTBITzVjYytxWmN6TUJJVGZLaXhQd2R0cVlrODRwWE1ic21wRzd5SFA0cXlGengxUGwyeGg2TU9kQlU2a3A2dFZxcjRtV05TekJHdG5hVjVpRHMrMDVoQTR3VkxMZFZCZUk4Q2V1NTBRV25GMHowc2dIRjFpN3ptMnF0bVlEZlI5TTJrUDRqdHp2di8vQkovZzV1L0ZIdmlEdzFOOFAvdUdBOCtFZnBPSnVvTTAyS2xKcmliQ2VGMElBWFlQc0djazB2SDc2WnY0bTBRVEJlWnZlUzV5Q1UxVldVN2liTHNPR0NlZUl4TTBweGl4U0NDL1VmUGE4enk3NDlJNXI1Ti9jRFlCSEt1OFpCcTkzK3p4a0ZzOElXUWd2eVBYVW1WbDBTak16ejIwSGhySGRjdmNwZ0ZKTlFDZmJKN0x1NEVVK05OUnlMaUZLZ1IyVFJmc2tScGxUV2xRdmxSY3JZTWpPUlNKQ1UydWVTK2o1Q1RSelhJYVEwa1RmektVeFp4Uk5LWEtQd0kvSVM5ZXNFT0hMSXU0SEpYNFVsOHMyMHlPRFVXb3J6U3lMSzZ2aG1za3pKeXM4aTYya2QwbTVLaHNxUG5lbnk1N3VKT0pvMEJRN0l5cXNxN1dHK0hjVnZDUTcxekxGREJhUkVvNTNSaTZHRkZwSUJiUWRpZEVZQjJZZTVHQTl1bGp3VVlFbnhaRjkyUkdQb1Fsem5UUHlwRkllRFo3THVJSWNaWnRqWVY0SExic01zZmN4WTlac3lHNy9kTFVINU1jeUs2b21TbHJNK2pwV3Z1VzM3emlYc1ZBQW4vWG5BejljL2ZQaG53OGZQdWpoRjFFWTdIVXMvdndQWkJZUXZNMnpmV3hEVGVHcVFEUWhyTE5oMnh3alIwYSsrbmN1aW9HZmx5d0k3cWJMUGlGbmZxWmwyNElHaGN5Vm1QQXN4bEhlaDhWbndZZWxjdUNCTENmNnpGcmIza1lZYis0R3dDWFR3NWZiMkxPNEJqUm5uQkhYZHBjaEhZZGNsSVdtWXBZR2FyWFVzZUhGVnhZbHpVeHNDN29rak15Zm8wVEk5WWdQWWxBY1BzZ1loUXhjcGx3a3dXanpXY3lHTGtNS21nMTVVdEwrWG5EOEZGcG94TGVCK3cxUGhFUjhmM1BXQlN2Y1RYRWE4WEFWVWdlWGdMT3I2R2ZSbVl4M0NlYW9jMXZwWnM1UndXSXVrMHFLUUhzdExqVTNFY242NXVjeWxtQW1uTnM1VjJibXZCbC96SGFSTnRCUjZweG9XVXcvZ01ZVGNTbmtXQ1B6NktsYThLWHlsYjQ0Y0JaMzVlWWdhSEFwcmxLWHJpUHdzUkNyNWRvTVBtQ2M5K3NCd1h0RDFCR1gwWnA5dXRBUXJRaTNreWhxd1J2emRuRzVnSUtmTk9jVVY1QzdCQ0ZmMFlUaittZitTY2JycmlLYm12ME1NQ05adkhsaDZsLzIzTFFQTnRnV0Y5ODVRRm1YWW4vODhTZlgrcHpVdU83L3YvLzNIei8vL0hON0srQURqOHM0QmNWM0FlS0RQeDhacmxqYWgrK2wxRnJ0Yk5tZXJEVjNkQzBiVVgrY0gyTXh2N1UyeEM0Wjdid1hFZUw3TzdpOTJlV1ZKTktKbVFhekk4MVRiWkh0bXB0eUtWZW0zYlFmQ0xtcGVZWHd4THh6K0l5b2pETENWMnE3bDVOVDJINjdOd0IwajhGeW9mZjI5aVpmVzZMb1B6MmpCT2ZOL0VBaUY3TXp4aE00Zys2cGtwWkU5dzZqWlcyZ2dDWk5GdHZ1cGx5NUJ2SDBzMlgyK3NhMFhkbkhBdzhwT0pBbWM2R2JNc0RndC9rMGFrQ2tCZTVZbzZvT3R1WmlqaVpZektIY0o4RVFIYk5oY1hYRjl1SndHMWZJV2VHbDdkSVIxeWxqOXFvZWo0bjVGL3Nsd2V1ZGNxTHJJWVhaRlJiYmRrZDBSMnpJWFpxN21IMURYU09kUTJ4WXloR2k1ZWJNc2ZlSzRld21DNkY1MXhqT09oWThNa28zajJqQ20zNi9SRGhudnFqWGcvUEVMR1ZzeTFBb2k3ZTFqWnpVbkF3K3UzMnh2MHZhRWp5cXNKQkxVMUV6V0pEU0pLb2hpMk80alA5UlZVczhaOG4yc3NpWnNOUThCVy9XdngwWGZPeUhwLzcvK01jL2VPclBiMXJRNUl4R1o3Rlp4OW10TFZTbDVWdCs4NEtsbldwalRCcXByMFZ0SUNaRjROUjZlSHJlQ0J5TGJDUGhHTjU4OVE4QkxkV1dRNmlxUlZUQklkK3ZEZHpNaHBQZUJET2gyRXVSd25tSjVoUHp6dUVOMllieEpXbyswZFIyaEdCRDVEZDlBMENKR3NkUzlFay83M1doWDhSbjVGN05KWC91aUpCeFBiOE1ha2U0cjUwbnltT2wwdCtldWdsbUcwRGVNaVk1czVJcUNscWV3Z3JOVGFzMThkNHBLNGhtRHJjQlRJNnNJZkIyNUhmZnY0K2FZaERhUzB4SDJpdjZzYVRoa1ZxYkZaMjJHazJrNzFIeWdiaU1vZENqbG1SODBKYXVtK0cxbXBkcHUwZkl1MDZEUnB4Y0NNM2pmcGtieHF5d2N6OWZveVFxd3p2bmdUOXpHcmh4UTNPYy9EYjB3SkpnaEl4WjZJRFk5eWd4anpnMzhaTElhcmxUaFhOVEV3SWhVckJnaWVJU0l5TlhVaHhKWlIzYlIrVGNMNU8vb0RGM2ZGUWVNNC9Ic0JncWVEQ2psZTB2MVoxbERVdHdXZUVWNXVBc2RoNXBEc0tXWVVZMjN4T3NFOW5aTlNOUHlMd0w5WTRoMUlrK2Z2enpYMjBCLytHSEg3Z0I0T3pHTFFGOEw3amd4L012elU3dHN0OWVEQWp4UGQyMjlPWTJqeDNoZlY2SzJJMHNlNXZUN0lwUC9zU05TVitVeTcwUUtuQmVpd1ludTBvVDE0eGsvdEorSUdTcGN5LzQ3SG1mWGZEZUhvblBsbklsMm1wdjdnWkE5WG5QVTkyQUJiblpmL2V6TUdlZFdYeEdpc2piYVM1TFhZSzVaZ1lCVGthS0xZV3NJMzRaUFVCdUFBRDE4QjZEcVVWTXhXb3Q4UnliY2FjR0ZLNm5JN3hWK3UxMzcwRG1jS1NNMjl1UXMwNDUwZEtZTlplMEkxQzlPNmpxS09nT1BJOWVEaXNac3l2YnVYZkxVak01MjB0eVZzdmtMMnRmcWVvbTU3eS9OOE9mT0FLei9selBqRHdsNlZKdExzTXB4SGNUWTZtUUNTOXF6L1VvM2NYajRtSnRkdzNJUmMzWHBCMk4wbHpEekp5Uk9lcExJU2UxemE0WmVjYXkyZC9RMTFxSnRQNzczLy9PS1pKUEFaR0xzeVFmQklLanovcUxEQ2dtemVBMGtiREh2N2hhNXlocjZ3aHBaMWczNVZCc28vVFZFUks1MmczR2pneVdydjd6U1ZUMVFMWmc3cDFCQ0xrWEdWZWlKVUtpL0lYR1hGTE9XUENYYnM2bFBqSGpzd3NlRDg2bDYyUzJsRXU2ZEFOZ05vbTFtZk9JekVqMkZ0dFNKMUd6YTBhSzdGT2FTM0hYZVZPNWhFZGdQb0J1eGpkQ0VRRXJpT3NwZUdtS0JvZ2hseTdOSFc3RGRWbEJSaUdveVZvNmpyS1I5YUV4azJodU1nNFlPR2h6ZlA3RVh6UVVKZVlVRmttSjd4ckFzZlZXZ1A0MnVpWk5RSmhhdXdZTXZSR2hLT3RuZ215bnU4czFrMEZVS2tiV0ZEZ2poYllVZkF4MEdRNFhrdCtaVVQybHRxTm13WE5mbENLck9Tbkd6TXhleVJveE9lTUdzMW9HSTd6dlgxYnF4dGlQTkxYMUNTN0hPaEZHMy8rU1JvQnRUNHc5ZUJ3N3lSOG5ield0S2NOaXhuUFViSnR2VjBGS0U1cnJXYVpZZ2hiSHlJSkhaSEd5TjBkWnJZeGI1bVRiL0pMOUhGZjJJNTFjbTNRS1VwclhkVzVWbGYzYllENm12OU5xRGVtVTR2SE0rbGVRb3E4UXR0b2NXNWh1cXBMTUwwaDJMZXVVVktGWi84Z3czME5od3k3SEdyRlJYRWU0YVpzeEpvNE5PYk0rdjN2SEgrV05ONmhoTWNkcW1pWGR4NDk5ZnRCNWlnLzgvUE9mLytRVC83cjBsNlRJZVR4VnB4Q3RNNGNvUUM4U29TbURkUXNQZjNFWkFaZTlSQUJaZVBZL3BFS1FHd0YybUg0UncxL3VhVTF3RnF0bEEzdHVRa1pacnFPMUJPbnZFVStFRXA1bHMyMWFBZDIwSWVaUms2UXN4V3Z4MmJqQ3ZDSjRwSE9FbytsaU1rZjdqMTAyTWtlZ2tFczNBRmI1eTVoSGdISE1HMk1tWEVHZVJjU0pwT1oxeHJOZHlvWnY3MndzdlZsQjZSdzQ4MFhJK0J3dXIvQllmLzZHN3hKZ3ZHT3k4MVYrKzFiQXhtbHpYRHlvZ0JEcElhNlBqZkFkSDlzbkxuZnFvckdVV29JWEJaOUlPMGxkWEtWSlhoRFc4MWE3d254aTJRK0VxODVjclVUVWl5UEI0blhYYk9UQUpRamhDTSt4czAzVURCYmtYTGw0andSOVpNMkQ0M1JGeXZqU2FJbk9ab3hsMU1QZ1hGdnA2VXg0T05jeThFWDFiNHFYemk0ckxLQkNXTTk3R05qUmJqRFRqZGdvaVY2ME9TY1Zjb0N6UTc3c1B2bkhIL0hwSFM2enlwV1duMC94OFI1KzdZY2JBTTVjZi92YkI0MCtJU3dNbE5ZYXNkYUZYcTF4K0RvUG93K285Y2tJTzlDY2pHUmJoSWJFMW05R2U1elNTdWpOUm1vUFFjS0s0cThOcHpkSDF6bTlsbEFsZjYzZndnamNmUU9nRGV6dFRSOW01QzEwN0RWcllBVHlnRHlXK2pFUkQvNHlYTjY1SHFyRkplL0Z5cG1KekxRaEJmU0YwR3p6Vjh3WjVtZHlFTVpmYkFWdi9PMzBaRFhoRU1JWGovdmpOVjdhVnc3d0lxNHZHVHNFRnh6dUZmanp3eGhlaEpzR0RwS2JaaTZObWJ3VWRLeVZSUU0zZ3IyTXpRVHJQTjBvdVZ5UGxaMTNadUlDTkdGWitSRm8vVmMyY3JWS0xhUjBYRTMybGFYWE5idjcyY0RyS0F4SkNWSGdqRmh3YVlpL2RDMUJGMU84MXNuRkZJNmI1MFVlcGNqaGNhU2x4ZGtUZHR1Y3k1aVJvbktUVVBqUDNuUlBUOGJabkh1em4vUnVxYmtFbmZUSWU0UTdNQnVabkcwNHFibWJiM1A0RSsyVW9pdk5pQndaYnpZbGJWVU43NGJzQytPS2V3L1FLcnY0NXYvTTcvbXc5Vm1RWmRIYjBmajVOWDlPU1Z6MzYxYytzYmtsZ053K3pzcURxU2lKSmJUNzZRd3pKNWEzSjZhaFMvOUFSNVNNclphbTZLYTg1dGlJTk9OeVBJd29wQWZwVWIvcXdSVWVsc08rTzFVWWp0cWhLWmZ3cGxvb2Z6WGYwQWpjZlFQZzdhbzl3RjA1MnRKdGJ6ZnIzOWFJQStmSlhiMGlFdVBjRHVDY0xzRHgwWVVpRXE2eDVKQ0J4VEcveEUyd0lTbklOckpMSXFIV1VBeVcvTUVKOElEaVJxSy9XeW9wWjhkcFFZR3hqcDRSOFpFZkErci9ZbXI4N3R0MzhiaC9vOFdrSFc4Q2NIOFJFYU1HR2RDS2VHNkt3MXBxeFhVRUZwb1RZV1NYd2pOWUJFdFRPcysxUGhFdnJ0ekVwZ3NEMldvUmt2dUNMZkpHK3RLV0I3OFU1dUpWNE56c08wMTdTZDMzT01UT2FjMXNTRERudlRJR3BZRHprSnhPaVhMNGxkVG0xL0RSWHhjZ3BqV056NFkxWjlkRkJJVXJpYkxhU2NqMXlyUGd1ZDAwRi9QSlVkUUQzWkZVMlM3V1VhZHl1aVZ5d25mc0hHaFhOazVvczJ0R3N0UUR0Z1hMZ0ZqS0JCdDJOV003aWRBODRPd2p4dmxpUTlIbzIzekRaSEZaejY5Mmp1dCthb3lGTFBxQmY2Nys5Y1AvUFB1SHoyMEFKenh4V0lQQTFLSW1pSXpCNGFURzcyckUxWCtjNWRJSk1kdU95a2EyVFY0YmJZVEtoVDdKUW1HYURRQlBGdnJpRk5DTzdCT0Z2MXhmZGdRZXZBSHd4bVlQK0xJZGVPbnNlWitlYytYdWk1bVJtVDhqUk9VUWl4emxOYmtFU3RsZ05uQXBxb0F1eHJpUkU4TmtETlBRVnpPdTJEV1Z0SDROTUhZUzQ1Z09MSWI1TXV4RlgzTXVoaFllcmtpVEpvYkFNQ0ttcHdPMFRyYkZaNDFYNGFabEY3YVhFZzVlQW5OVHRtS3RiTkNJeGFXMnhEUG5MdnVvSG9zb1hhbktVY1ZRbEN0MGxIQ2FSNjZTenMyWE0wb3hjNm1rWnY4bzNTLzFXQ1FiY0lpU1lEWVU2MFRueXBGOW1qTm54UFZJVFZGV1Z2YnNNdi9JS0dRM3hhZUFHWm1sR0RlWTdSQ1RNdzdrSFRESDNFSVVYcktmQnhGaS9oeCtYcys1ZDVXWFhCM09zUzZnaEdST2NaMDNGWmhsWjZtYnlFeHcwdUlxVGRPeWtUbEg5c2xrbnFVZXNITkd3aythZTFmZldudndnZnpyRUQ0QzlPbHorMVRxdS9kOE9ZM3JlNjd5T1RmOTR4Ly81R0cvbnZkemsvRGRkOXdueENuci9Ycyt2aHFMNmdtb0xUcC9nYlBGdmRBa2x2M05pTWlpc2RhQ2Q1Z1ZzY3NHRE5rN1pKeW11MkI3NGVvL2M3cjB0UmNIMnVqS1U2bFpyMDBmR2ZqUHRjdTRwWUZJMDIxQ244dDgvQVpBRlZDMzl1em5LdWpyMG5tVzdtdmI1Mkc4S0h0RUU1Njl0akdXRzg1NExpTnZpNElYZnRiM0RndklZd3dDMjdJOVVoSFpDc29DSjZlVHR6Rmo2bFJJNDdDS1daUVpGbjZqUlkrYThUbjJ4ZERwZkVVMVYyZzMxMjZPQTVGMzZScXlFY3N5Y3dSYTN4d01nNG9DTVRnajhuWjhiQ0NCVDF3N2wrdXhvRnpHTXhOYmVBTzdUYUE1RW5Hc1hSbHhvdGMzU3AwcW9JQzVLYnZ2ZisyRmpnak1ocnFwUHVLMTRRN09pRjAyY2w0SjJyVTBYRWIyS3J1bGxGY0VnNW1mN1ZKa2Z6OXhiTndzbGFObSsyYWlPZVFFVVk4Z25Nam0ya1F6VXBvbmlSNXd1U1NuTzZremM2N2tLdUp1bHRnbG5zRnNLeFlrcGtKR3RHaTFRVDZxYzlZaDJxQ05TZkw1Z2FOY3dwZGVRUFZyNlgyV0VwVkNEK2l4Zi8vOXQvSDNmWC9sbXA1ZitlU2t4K21KT3dHOGZvcVA3WVV5UFBnWVdzVEU5bk4vN0dYQkJjOU4yVE95eTBnajdSQTloSksyb3BacDE2QXo1cVNpenNoYTRpLzBpNDdBM1RjQTJxN3N6UzU3UnV6NlR6RG9maDZOaDd2OG1JNEhmeGx1RUlPbDFDYmtZdkdtRlIyTFlJaVRDZGxtbDRHUXE4aGUyYzVDcVNEeGZPWFBqL3dVUWVCdGo0dFBEN1VQQmYzeGUvd2hsV0MwS2JPWmhQQnJESCtRb2lXS2VzQkxyNWRnNGJnNWswRlVXK1pnRjZab1MyWXVxVVJaOCtsR1VYWTlVbllOeGpPQ25jTm5qa1NFT3hBd1J6MjlDM2NwdU1pYlVURFpoQ3I3S0FyY0JCc29ZMmVYRUdlVW12Z0dUNHlqN0VjaFRsMElkK1U5SngrbGNFWUkyOVEvMEJYV2ZVZWpvWkRzblpFaDMxOW53a25lRXZzc3pibUFXZmJoa2s3RWw1cEwwUFVjZVk5d0IyWWprN01OeDgyOEJYUHNFMjNyWjUwbG1JdmhBSjA1UXA2cnpuaEMzMzVyZ2t2OFgzL2g2diszUC83NGd6Y0IyaTFCLzlDT001SlV0aDc4VTZyS1lKME5OVkVRZ2VkWTBTbWQ4RGg5dFZQWU5tWGhHMHYrR0k4RjVWU3oySUR0ODdlNzAySmtWMkdMSTN0a21sNnRIK0d0d3J6T2RPSHpkc21jdit3dk5RSjMzd0FjRmFyTlBIdi9Felk4ZmQ5MWN6NURlbHhPWE9hY0dqSE83UUkzc3dKczc5OVJSaTJtOFlSakJuTWdNbTZ0ZC93bUxwSEFTNjRRSnhPVkpGSEtwZE1mNHdQNnZJWTNKcmUwdUNSaHVWUzVGR092alBabWEvOUI1ZTBlSUh5eExWcGhyak9YbytpTVlQZDZuRm9rclpkZ0p0aFduVWZkeWJUTXVhNXZoWXZHc2g3Rnpra2ZReTVXOHZvMDlaMjhzU2VrOU1iQnNoM01kb05LZ09nZUVCdVcyU0hqVnNGZWRQUDIzZkJtNVdLS2E5VjBNZHFab1d4SU5FYTEyT1AwdmUzUEs4R09iVjI0Uk05S3ZZQUdlZDdMWUNaam43aHVlb3ZVamViV3FSdkVPOXhvd2w2TjgxcWtNZS9aeURGbGJsTExMaVIvWjZxcUxXeHZiZDY3Tis0bXRJbHNXTGYyTHFvNzM4UTVIdkxjbXlBd2JwYTEwU0s3ZUFNWGlZN3duUFhFWG83UWJzcllCMy84ODA5T055VDk3ZGZmZnZuNUY2NythZjc0d3crOEk0MzkrMisvOFVpS3R3TGV2ZjhlRGpjR3JMMW9ML0xaQ21HUXNuQ0I3djBCbHptSWxKRnJnYjA0TWZlVlZsZmlJQnYvdENoRklDMWRKRHBib2lRdlEzT1Rza3ZHSUJRNE44L1RaV2Ezcndmc2FsMG9mUzNRc2g4WnpQWjluWHIvTFdlcmRtMFcyeDg3MXUyU2JhRVRJMzlqOTJoUmVSOXFlOENpdnN4UnFobHhDWWdVNzRVZEs2SkxGTWdjS0lSN2RLZTd5MUNLTFZFNi9lZGMwdGRBYkdTK3RGb082NUc3SHU0RDV6dEZoRXM1Nnd4L3ZQZDFoMHNBQUVBQVNVUkJWT2E4NXNodzB4d2Jjcmtwd2JHNWVkQWVIN2taSW5MU203NWxGWVVYQTRnZHBTUnF2K1BKenNXWGREL3VieEJDQ2pMVG9rVFZCR2tqOXVtNzltVmZnMDJXVlNSaWlQNzgrT2s3UXRzL25zM3c4Y252di84K0l0dUNCalJQdUsyMFNLSk9qVW9EOGRMMDNUbzBWTURzZG9yTkZYWFdKYkswSWpwL2pESTgvNGpSUW1xL1pTVTZENmJ3WlhpdXd6MDEwNTNLQnFObEF1R0tNbUxEeXAvWXZLczZ4NTdTZDA3M1dJL1QxaUZOZEs3VHVXYkRaTHM4UHNQVk53YzdpRGxIaGp1TG9aNFdKSFoxbGsrN0lVS05yVHVQVEdTSkkrRGdnRDhxUW1HUktJWnVHN2QrdGk1aFVRN2NkZmJDYmMwNFJ2YmJTeW1XQ20wWTJ0dHhYUW9XMFcwUWVtVWx0WDcxS3pobDZmVGhHZWtFOXlObWdMdlExc0ZBSHZEdWhQWU55KzdoeU1QL3ZkckpKeUJWMHNjL3d0cklIRVIwbUg2RytoZ0VvWnI1ait0cHJIMEkwSTZmdmFrT09LbWxiRnVnRkNEc3BCckxpSTBlM1BQMjdXVXdHL3VNWW03OEpCaEZwNlkwVk15eUpDZkp2UTF3VSs4YVRkbjB0R2x3c0pVVTd3bUJnbG1veEFhMm12R1IvKzgvL1BUVFQveHRYNTVBY2NMNThPRUhBdi80NDg5dnYrSDd2dDkrLy81N0tLVGlQZ0djS0JKUUQ2NXlHdEw1VGlteUs5TG1DclVYZmVhODBOOGZTUDBJay9lL0kwdnFOSnJnaW12a1BoNk4xanlwbUVaSXdTTnlrTGM5WDdJSVMwS0Jzck1yNDlqV1VXQnF4cGhFMmFHMzIySlNFM01vVzNWSFhVK3pJZGlYR0hrbEh1dmg2YSt6Zmg2NGhUZkZQOFdiWkxycGtabGtVMy9vUmRxdVNXVEhTZmphUkVRNnJIa0hJQS9SaVpBM2trWjFMWDBkSmJmN3JDalZkRjNoYlRMdjdVWHdWNlB1bjh1Y3V6a1AzY3g1VnFUWDUrM1ZqQUF4Mmc3cGZhT25kWWM4R2xIek4rM2h4bjczeVpvbVMwVk43ZkFqVVJ3QXpkNTJubmFuZ0dqN3A1OWNhTWVKWmxnVlNZaWJJRkllcVNPd3BPN2RHQy9LT0ZyOWRRa1dEczJScFhwY3cxSHFpL3BWOTJudFpkSVpOR0tqcEQzQ29SMjVqdkNpZkZkVCs5cjJTTzJ1NEZ2a1huQTdoWG1IZDlDTTRJb3o5ZExoc0lWeFZ3QmtjaXdHZVI1ZUVKanJFMHBUbUd1SmdGaDJKVWxIRHRaeklydUtjYlRuRjlyYmI2WXU5L0duNWdTZTlXQU02Um5uaXUrbVR0bE1SZE5lR3lZSW1YRUllc0ppNXRJZ2NMK2h0MHF6WnJhbE01RGR6clpNOFJTdy9WQlBDTGhJR1h5YW55ZjZMRFRqMFZMOCtNOG55SC8vLy83T0M3WEZ6UUFIQWpmL1hKMjNJNEpDbzFiOXhoMjlabmoybFNHbHhlbmNGRkZkQmxUVHhsNW0xMm9oSlkvNnNnU1I3QS9haXJqWVk4eDNLV2lJWEVJcTZUbmE1eWw2a1NNUjVOcko0ZEpyM3lKNzhLOVdIb0ZuK3doUUZyMW9hMk1mN1hNWFJkNElMZmJGZXJ3Zm5nT1c1QWM2OGx3Nko2bGJpcDFmM2R4Mzl2d3dqT2xEZkF3dXhQV214MTRoVW9CQVVESWJidG9yRjNPeFhPQmFtS0EvZmRNbTYvYXRBRjN4NDRLbWh6SFlXVGJib3NITW9QU2Q1Y2oxQUsyRTBGeUtxNnJzS2wzSU9oZnRwYVppbFVncENxMDBjNjRqbDNReTAvWkppQ3VaT1ROaVFReDVDOUwyeTkzT09kTnlpSFhLbUl1VFFTRld3NWk5UmJrMEhWdndrMmJPY2pOY2hGelZqRGhYVmpaNDA3aFpBNXVGUFR2VzA5SU85SVQzNHg3ZUJ1YXE1dUpuWkVyeWVrQXVkWmxWMVM1ZHJ3QWVaVC9DVmRLSjk4UjFzVHNuQ3RtVjdadFZpYkR0U2dlbFpJTDBkWmhvTFlRZjlLVEpkVC9uRVF6dUJFRDRoQTgvOS9tKy9jQS9JRXg5eUljOCtYUlRhb1paRnZnZ1hxdk1YRWwyelV6eGhlZmpKV2R4RFlPbW9NaGJrSnk5ay9ZdlMvNmU4anl0bkNqYlVoZkMrWHgyWlVJdUpaamJkSkk5TDI1Ny9ITW1hamtxUHROZTAvNlNOd0RxSnlPeUhLelhIQVZ5UGJCaGZNUVdJMWVPUzhxbG13SlBPbjVlajlWczVLVFpQdGZKVE5rV0xJWjAxSjFjZHJOM0Ixbk9tUG5HUGY4dXZaUmhKclp6QWRvR1o4SlYwMnVNUGp1MDUvMmF1Q1Zsc3Zxb0ZBcHNTTlF2cGtEbkVxZ291OVJrUFNOSG9FTnNPSHZPRytHRDRkUWxTMmtPK24ydmlGamZrVmEydHlGMWNNeVhVZXBuSUUyd0RvakVNWnkzSSs3dzdHcFI1a3ZXT3M2eU5BcXROQW1aRWVtNE95V3ZRczY5Y09Zb3llYjFuSHBHTWo5cmlwbVJ6TVJ1aE1VbWN3Z0Uyem4ycHJMSTBOSVdDMndDT2pLeUZIck91ZGxaWkFSdTRrYWcyVlp3RHR6a1h0NVMzbHpNUUxiY0E5bU9pTTMzV3RZOFBuTlZtWk50MVhnRk9lL05lVWJIem9uc3NuR0ZZL0lWZzB0OGR1SENKQXVmOFBudzRRTWZLT1VTbjgvOC9Qenp6OXdEc0dmL3dNZjkyN1Y3UEc5cUgvTHhpWVlvRnFSWWE4ZUlkZnVIc1Z4S1hqY2hZMnR0TUJ0MnRWemh5ZnBpbWlOdkE0TWxyMHFWemJvMFRac05rWTFiNFluR3VhQzlHTjVhQnVmVWRrSCtrb2ZmWE5rYlE3NzhEUUFERWh1MW5sYmUyRGl0eW5IWjJSQXhkOGUyZGtvM2U4ZFh5bGV3bkRSclhvazk1K3lWZzZ2S1hYOHpPS3ppeUdJUzFBUXFMNGlLS2MxUUdRc3VPQ0xJV05ZdlF0TWZrZWtWTDRzRGJRUy80U0NlbWpHWTBJa0d6RkZEYndQeGlpYVgrSU1XcjBva21qa1lHUkd0SUNMUDZ5S29EMFUyaGM0ZE9ydDVyTi9xekhLWGtacDN0VVZHNnUzMFlNUjVqblJFS0Y1QUlSaVNvbWxOdSt3MTN4eVE4eVdMd0tUcEUwWXl6elhDSzNMSkN6aVhuYlV5SWVPeVhZbGRWMHFhSzNrc0tpZE4vZG85SlBOK3RVd1I5WjllUUNUWjlRQzZoaFBqdkwremR5bTFySC9KRkpnclA2RVZGMWxLWU11N0ErK3RwS1M0Mkx5WXhUUWIxaTlJYWQ1TEV6OFB6bDV3bTgwUzNzR0VJTE1FWGM1VERVNE5mTFJIR2FuV0JmLzNmLzgzSUgvWlYxZi9uRDY0R2VEcS80L2YvOUF2K1N1eDN5THdlY3JGTnpFK0hCVDNBTXNsK2phT0puZkR5R3lJWXp3MVkzL3pVbVRCRXpOc1Y1aHQwMFQyK2dnMzRXbEdURDQ5UlpvY1FWemt6dHZHY3M2WStYaDd5T0FsNFFIOTlUcEc0SFZ1QUJhYmdOM1MyNWhpeGw0S09FcjdHbDdMbnVlU2ovRFcwMjNuVm5OTWNZNE9JdzlPZG1qbkx0NldMck9lYXQ5WC84aFdxaHB3ZjFYbGFraC9SdkJtRVFpWlUxeFpxdWVBd2R1eWJSL2lyeEF6dWZjSkd2Zll3N1IvU2FwUGplTUpVTTdWQlVjOXhkWERoeWJrSThRNlI0YVVGVjQ0c3l1WE1XY3M0VmVhaUZqVGdnWWJFZ05XT0ZsNUtyTHYzZzZCTEdWSDVaQThEK1FRazJXNHBJS1haa2xrN3hGdXdwRXg1elVpUThxNThoazVFVDl5emJqenpxNk10T3piSmxNeElpeUxoT0NMZnRFVW9uVld0bDFtNk15VW5STTVxaGptNVBETUFUY240N0xQdlRQL0puSlV4c1hBVXFyVUNuaFQ2a1VKUngwc2VHbFMwb3k0VGx6bmZWVHNDY2ZpTml5dTFJcGRlalB6VVpzZmpHaC9WbVo4U2N6cGVON1BEL3p6c1I4TXNyY2YrUCtXdi9MYmR2NTRDTTNKaFlXODhXZkErRVAxWWJlSDAwaU1CUytmZWRXcFoyRHhHbmc2ZDVTbVhUWWdhSmtSY0VBdm9wWGh3aXRhVk5oK1NMc1FGS1cxeUlPZlBTOWlrMDdmZXMvWkdWNU5NczE3bU5lbFprWUIwUmxuK2N6NnkrNGo4QW8zQU5xVWl4SFhJYkRmRjlsWVgrVW1pejExZis4eUl4NkNFNWM1VjR6bjBqbkoxVktFWDcyYisramp5eTRacFRhYXl5ekNSWFpJbHRJa2E4U1ZTTTJCYW43K0xyNW9qQzFjVDJWWTAyeHY5ZGFUR2M5eVl0cHU5Nkp3SkM1RGdsNVR3QkkzUWNaRldvNVMxNWJpcytzQi9ad0xlNm1aT1VwUmFLVlorRFRuK3FXVG1iYVAxREtlYlFYT2lBVXg1QzJJcHA0OEFaazJGM3lVNVNURUxvd2p3VnhTdGgyYndYTTdaN2taTGtLdWFrWmkvMmUzajhkd1YrdGZEdVo1MmRlOXVZTkU1ZVpjL0l4Y1QvVHN6RnpxVWx6VkxsMnZBTjdNdmlRc1FWVjc0cnJlblNPUmhOZXpLdUx5NWgxN256SHZvWHZQcW9VYVVpeWNhRmh6c3VCaFA4cy8vL2xQUHZ4RGt4TUh6LzV4QWY3NisyLzg0cWRPZVNEb1FlQWdnaGNYK2l5ZyswV0lQRjRITXkxRTBNcHJON09SSXNJVXZ4azliU0hzT1QxRkd6MkdhQnNsMVp0RzFWTkJIeG5MaXVQbTB3MkthRjN2U3U0UjdXekxMVVIxejk1bFNOZjlFaS9MQ3VuV2w2amxMT2NyM0FDY3BaOTgyMzQ1dVY0V09OaGdoMGw5TUJCbys0Z05vZWpmakNyOG9ud3ozUHdqblpzMWx4VHdjNGhrUVd3b296aEJiYmREV3JzWUhlNFZiTzZTemlIU2Q1TllNWXVJUU5hZjlCRkJIV2o4TmhzUFBMaTYrZno1eCsvZlIwaWJieFRMbWxic2NLTVh6bkxSYUFyMWtGNkNOd1VkWmNNaEJTbE4wNTVvSUl2Q1lyUUQ3ZG9ucWJ2citQQ2RZNFd3TG5sbnBLZHZML0ptNUxyOWxGaXlFRjdHSjZjKzkyYW1wQXB5c1hsWEZpVTZxVGtJSTNGUk5qNzg5UlYraFVhN1NBMzR4dXRTOEtiVU11cEdwcFg3ZkpSV0ViZXhtOFhmbG5nT3hza1FQZWE2dDZqbE9CeWxQc0x2U1hxNFo4NGk3V2MwWTk3VGt5YXU4dm5ZRDkvMFpRSGg2aDhYb0FnLy92Z2pid0pvVjZGT2wvcnUvWHR1QThERHRmOG4yVGt2c1VFZVU2N3NtWGFFbTlrSXRiOFdOMjBrYXFlOFNMM2RSNmxlOThVaE4xT2IrUlNqbG41TGE2NXFScVFCenZqTy9icVY0VC9MMzY2S3hqQnBzSmpZbHp2UTh3N012UnZtYURPN3FpSlltcVpsSTNOdTZ1ZkFZaC9GZ2l1RmpSeW9xSElBNUpKTVBnZUhkMXltdGJDamtxelpzNmV6ZUVHR2JMOG85RVFHTHBmV2lzS3JabnNnRW4xUzArbG94cExlT1pYTGZIUWt4WHB3TnhHNUNMSGhYd0Z5Q3JtWXNoV3VOU0FMNVhsQ1YwZndram9TcE5uUVVzVkF3UWg4YkNOcVpzUXVoMXd4b282aExFTlJVZ094TElhWmNJckx1VExISUlaMU1saHd4WXBBVVFvWmdYMG9XckY3amVFeGVsUmJTV2QreGxWRFZoQnRsSkdEd3M0MVY5OW9IOFVPLzlYWG5DdWVuNDlGdUxKa3p2RDNxKzF5eU51TE1VZk5pUGp1aXczaGpiL2JXekkvazJmbEdVbWFNaGNWWnYzWmxxYnoydWh5RjE1eVZkbWVjMld4bVhuT3o3Rlg3S3l2VGdsSlUwWEltR2FqaUQ4d0lGbTJxSjAzY3czWnpvSkhlS216Tk9lOG1ZQ21aVzJVa0lkeEo1SXg2d2poajNQNVhFTnFSd0Z5UnFDcHovendzUjhNUUQzMVY1RWlBL0swbjVzQ0JMMUlpcWJlWVlZcE5hZHdvb0lZTDRaT1Q4cWIxNllWblhZREUzL1NoQnJFaCtuRlpCRlV0a0E0OW9LcmFXUW9VRTcvK3orWkl6WFdXcHlhcG5VeUNPNm1DVDA0dlpnanZwa3lzbGNJYThDTUo3RXRZd1p2Mms1cVpzaytFOHpFc0hkWkZWdklCQnM1L01pK2kxeEVISXVoblZPMTBXU25mV3Z2QUpUaS8ycSs5UkZnWjJJbWFldVlVTmpEdEhzeFdSNlZMc0tSTitQZWR3WG1acmJ4V2pQamdNSzFiak40VFBkYTR1bk9OOS84MlQ3aUtRVml0U3hyYUdKOW9zU0dtV20yVDF6bUhCdG82aTBNVTV5bEc3NGlqOG1rc1p6UmhvT2Z4WkNzMTJqU2Q1b3luR0pHY0NuS0hCdUZmRVE3VWJEVWF4cHpuVXVFa281Mmo2TnFOU0RGMjBEdkFNWFptM01CYTk0YVpUc2VPTWJ1ZmFXR0lwRkx5dU5nVzBaVFh1OUxSZkNrS1pFVHdrWFhjK2xjVFBlbWFDL2E5NzM0alozNXJtSHg3cVFvSlpvVGlNWXZlTWJsenZ1NDRPSGhFUXM0SndJUXJ2ajExSjhuL1p3andIVTE3MktrME5hN0s4NkU5K05kQ0lFMlZpTEdObVBtYjc2OU5TZk4vcHM2SnN5R2RLeVBJVHZyNzdkbTlqekZuamRhcjJXSWRzS281MkRPR3V6ZGExeWM3SUNUeGxFZEp5RmZ1K3MvK2dhQS9lbGxkdWpGWGpIMjNlcDZ0UUpxNGp2YmVheWEzYy9jZmRvZGx3dE1xUkoydjJ3WTEvRm9RUnNRYk50UUZFMFpYdWRFcEJDaEZDT3lDOERRL0s1NW4xa2VnNlg5Z2JJb1NremR1a2pRZWVWaW5SSGJyaXBuUFBJV2NtbkdXOGxqREhGdFk5VjQwZ1RFWUUwOStrMDZGMlpEc3FWWmNsMXZvbU55cEI1TkdibW5kaGswSWdYak5KdHIyM1pXemh6bmZTTUdOWmZ5MU1FQ1BySGFNV2gxdDMrNnJPb2MrdEpiWkJsYkdFTDM3a051RkFKNURFamZjMXB6QitxWWJzeCs2Q0dhOHU1U0RMVWQrRVlhcWJNdlh0RzhGWVRjSEo4NVVMVWU0ZkpLOXB5ejdQTWNrcERGL3JZVWFlQTI4MlRPc3Ivb3R1K0FlVGZiTHNULzl2M2ZDUC9VdnJHTHdSL1dqZm4vM1hjODh2LzF0OS8wWlY5d25SUVFUOVhtdFByVnU0NUEwMEo3bUJzaUVtM0gyNVpSbWhKeFhuc2RMb0xXU1NFZlg1MkxOeEUyQVlGcTI1WkJYb2RnYUZHM1hKS05UWEd5cm5EMlFkdjRaSndDMU53YjY1MGhCMlliZHFoSWFabG5EM1orbG5qVWR0bDdnWDIrdmUrTHRQNXRid0FPTmtBTWN0NUhSY3ZJRjlrTVgwVlN4b3FCMGxvRjI5WUF1b25CVWpvbER1djVJQzVrbXJBRU9ncTFUT1BDdlNnNXhFenAwTVFsUGdiWDk2eGw4SFlBTndGNW1oTk9TTndZakhYT0MrZ0ZzbDNZd2d2aXBxTk9qSkRnYXd4TktnYzZVVEhneEExRCt3YW5DZ0J4SlVway9DVHZpU3VIWitWU25oUm1NQ081SG15N25BSkRZRTRFMHdUYmt2cFNhOWVaQzFpQ21YRGRMdDIvR1pqSDU0anM4cko0c3psTzV5Tnkyem9JNXBBVGZWemVwbzVxeUVJLzZjaXJkWjAwRW0xdEh0V1dLOG1SOS9KemJMYlJ5U2trQzlLTTgvNW1tVXRqdXd2WU40NjZrMWt6eDRnTjg5MnA3REpvMmwxR2xtcHoyMko4TXVlS3VFcHlsQTFpMlllMEc0bWpOVS82ZWNDdkIvOTZINERtejcvOHpxOThjbE1nSEtiSUlaSW0waXd1dXhIN0J5cGtLekRidVJmMkdoU2lSRjdibTQyWnFTeVprMjN6TTJnN2UyVWJ3Y2hMQzZuSG80Y0NwalZmd1JqcFNMclllVTRLdUlzdDlWZnQyRW5wcitKNmN6Y0FiVXN2Tm9IM3ZLY1BpM2FtTERoMnI2ZHJ2em1GbzY3bDdqOVFOTEs2NG0zNmNaUWhLTTNtMnAwZDVWVWw0Z2hoTFJDakxCSXBvR1BCSVlqRG1pWXVOYzBSTGdYYk5xREZHNzcwZ3VkQTMyNi82UWF1T3dTOVY4QmFkd0xXVVNJMWxaZTFaWTBZZEQwZ2Vja2hHYmQ5bEVpQ2hIZWpCWmhzd3pveWp2QkN1OUpVM3N4MFg3SkxZRVljc25kdEYvMWJwOXk3ZEpxUmxITlo3WFVNc3VmVXkySXlSNFJTbTg1RzUrZWtaV0RSb1RrWGNETVF3dFNGeFV5clhMUGFqT1NxcEZ4U1pJSmxweHBtMWdJNXo3NEllSGxJSlpYdXBCMTJWOEZSL1RsOEYzQ3JVUVJMOHlqYU5CdG1DbkU5R0RQSDVKdkdIRHVRdzEzdXB1WUZBdDlZNHZCaTNiaHAvZXR2dnpDVHYvOCszdlZsVnVlNS83Lys5YTlmZnYwMVBnZVUvckl2UmFwT3VxOFJNR0pGdWREQjBCb0RyM0FaalJ3cnU0U29XV3lER003dVdCdDR0UmpaMXhhcUVMeU85a0F3cEJ5RHM0R2FFSVFRdS9zWHdlMW5qampSejRua2ZlbTF1dlBTV2Y2VDlWL25CbUI1eWx1Q09tUmZZNHV3YjQxRDRqWFMvWHZrbUFkTmg2aEdNbzhuTTZPN0RPN0FtSC9iSEpUSlptWWpLd3ZQSWZLYUwzMW5BVmRTRUJhYVBPTVJXVTNaUEQ3bnk4SGNBZkRPcjkvOHhjREw3WUhTNlU2Z3lmU2RVM2pXeVlVUks5ZE1VOUxyYXhSeUZnS05aQU1ZbXRQSlVKWWNic0wxQW1CbWhSem9BZ0NYR1UvU0ZaZWJHRW9ueE1wSE5lUjZYc0YybmM0VnlQaVN0TUNaWS9LNTRTNW4yaElVSVEvVVU4Ym5LSVUxandpNXpteUx2dzgvM0Q4SnRQNHdYdThVTUplZGtZczJaYnV6RjBPZVRodGpkWi9TU2RUU1JiK1dlTTU2TCtFbVA0dWYyRVZIbTBDN1RsKzNhZDhLYllLUGlWMlgvcXhSNEswQTNRQW9uS25lc3oxTUNGNmtBNjFkOFcrWC9qN040V0tCWmtNS0FvVjdqZUhGVVVJeWYzYUJDSVJNYlJiSnNTYllzTGVFWkFLMkZ2ZElLZG9JYkhuZ2JJMFh0cHdyRzZVTEwxekN2Ny84Szl3QTFOMzBkRkFoditvZTltcjdrM2ZpMnYzcE1LNkV0OUdtZm85VnMyT21BeWxyRlF2SWdpMkNEVFdaUGkwMWQ4NkJjakVmaWF4WTIxYXdRU0EyRTMzL2lBK05OcllTWk9aV1UydkV3U2tSTXA4SlVvWGtJanp3TnRFTDlDbEJPR3NWaG81dElWN252QVlmTXl5VkRlWHRTTlBGTnBpck12NVk5dk1vRlFDblpNeUlPWll5V2E0eG5IMVhHZURyVFFJdTdLSkJoZTZDUXVhYVo4NUZjZE9rK2V5VG9Rc2IrcEZ3T1VGbmdxdGlJNVcrYjY2OWxST3hpYVZHN0ZMV29JMjlXTFF1NXAwRFh3R2g3RmNyYng0aUlUY0xtQU05TWljdXlaNFFMRktNWlVnRG4rZlFSbXJaWmNDU1FKVXd0L05NaCt0K1B2UERtbXI1MjE1LysvQWhmdXNmUmxzQW9ZVkMyMUVIM0JNMUdPODcvcmhYMkkzSmZ0azdUa2piUzl2Uk5NQTR0cUNhMGkwZ3hPMndJWjZhckcyQTI1WkJPS0RXWGIyOW1KWkIyODNiQ214UXFRRnZJM1E2WHBKb2JRVU1jY0szV3JKQzloL3g0U3lGMEJHZWpTejR4dTJEY2VpZGVqdkZjd1BBT091ZnRzWFlXMnVONEgyTFZNL1gzSTdkNjJCWGZyMXVhVnlWTDl1dW9JRHpKaW9FQno2UGdmbzZaWnZhWWlMekdHS3prSlkxb05hdWdva1RCNVBLdHNmWnR6ZTJYMWRFckVsUmhMTUVkMnkxWFdXNmNCOGY0ekdmTW5qWTA1N3Y5TmxlMlFMbjd3UHd4eUFKK2ZpSkQ5UnpMOEE5UU16dC9lZmU0dWFBVXdSVkErcnJBdU5BMkZXc3ptWm9SckozYWRNWGlveXhhMk80Y1JqSjF1aWQ5Y25EUmhzY1JaVzhwYmxwWHJOeUpVZ3RnMG9LYmFrY21LTXltZTVJczVBemg5alN6R3BmM3I3blZ5Wmk1MytCWlJvZnNqalJpWEZIS1gwejNSR3hVYlhYc0lsdDJDZFpxaDJHUFZlTnN1ZGNEWHR1M3RnRTZzZjZNRm5tZkxqalM3VWo4Q1JMY1drOFo3QWdLWkYzc0lSTnBzTnRGTW9EMjFGU0RzU0kvZjVicHNyRjdzUWY5dUtuZmxqSSsrSERCeTcwbVdsLy92bm43Ny8vMjhkMlRnQnAzd2lMNTBTNDJGZmI3aXJWL2hsUnpnb0J0ck5NT0U0UFozUmFQYjJqSnN0dzArT1FFZHVaakswbGpXSE10VmFRQVdjZ1FSLzI3cFZlRkkrVXRXWUFZTFAySUpTaDNtazkzbGpYOXJqZUlqS255TGFwTXpoZm93Y25qZklXTXF6a3RQQ2hBWG5FSFhKZXo4RmJZQ1NMNjV2MHIrOE1VeFczNjE3dEtFUmRIeURJOFMvdDRyMktzaXZQaEtuYXE0Q1VzMkMyUzE2THpualJrY2hNazRKVHhEVnhXNWI4R1l3TDBqYWMyeVV5N2E3QlJ0eXB1Vm9NWnpRNEkzWmhES2toM1hZU1FwUmhlTGRmUlVpWm96NmVyR1ExcnA3VjFPTjJ3bGx5QVhIaHV5VjFkazFESWVnNlJNdXhVaGFuNjhUdlBNUStEVTNMUjAzbi9NNUQrMndTb0tKeW5jSGtvMEx0bCtEYStZQkxmbjFMT0xxSmt5K1JmUnUvSDdkOVp3QVJTOW1nYTFGTVd4czBvcnhsVGJxRzdBZWxrR2lPc2lXck5HWUJPcWtNdVRwNXFnZHZwbGtuRzdsKzR6TzRJV05EZzJUeDB1eFNneUZ2NW1BN1hUWXlQcUt6ZjJkTFlpMDBpRXVSbkdVUXQxZlhpYkoyUzBUYVRXMGF6N3kvYnFIeGp0TUlTbWlZdXdCWGRWNkpKVXhUSUVsc21DUER6R1V6azEwRG9Helc1VGpOL0dJdkU2RlE4QkhWdTMvZ0hhejJtZ3ZUeGNyT1BYRm03MHNncWZMRkhwZHJmamg3U2xFMWpsMkxZZ2h1azBHSVRJV0pQMGRWcEdWa3ErbGZyOGRsVElkdjM3N2tyVUl0ZEFrU2s3ZHZLVlZOZDZUTnhQR1ZMYjdTU3htYXdKbk8rWVVmSHZueitCOSsrOHhQVktMNXZMM2Z5N3UrZlo5a2p2LzQ4VS8xQkFYNFpjSEYwNkhXNVhaeDM2aHdlUFVKRHJ1WDFJSlQvWDBFV25pY1FUeFdMU1JrSktWbVdkTnNIZHlDeEc5SGVuTkdYcWNJUkUzdVZycTdYVlpCVVVrS3hBdU5SU0FHV2NDaUdWTmFGMng0bDlISXFDRThld2wzYW94V2JnenZua050L1BoZUYvUWVVVGc5UldjTnJkVEhiU3hHWjgwZGh1cmZobVdaWXBDam9nVWhaUXhtYWthL1ZpR0l1TFlpbUpxai95MTl3bDFPR05iWm9UWHBUa3JNSk5pOTdLSnNWblp5WEhTaWZmSDltMWY0Q0JEMWJCdWdkT09vU1lGSFBUOEsrUXMvSDRGNVNHY0VoZGcxVm9zMkI4NXB1eXgydmxsZ1JJWDRNZ0ZnVG0xT2dDTnBaQm83UnNrcWZUM1h3TFdUR2lGelZZR00vbzRLbzRPUm5aZDJKOURWR28xekJXRHp4WjBDV2J6TTRoS0VZRmNvcDZaeFpXc3VzbzFKTjd1UGJVM2MrS1dzcEtibmRITTlwdDFsbEJRNU5zYUtEbVFvMll2dXgxbG90ejhzT0UxaFdmd1JPZVc4YlQ0bTRpaDExazNuQTdHOU43YjlZWTgvYzJzdTZkNEVzOEp4cCtacG9XZkxleUNRRkFyNDVNS09odnBlNFRmTlB4bjhaNng3bVdVR1o0UWFsdUJ6MUJiYnQrMHoyNFptK3RVbHZ2Y2xaZWRDL3ozWDllL2U2ZEtmcTMrKzVTWHlFSW1LaUdMaGFScFJpTTZWaTFEV2U0Vis2aGd6ZXErTkVFMkJ6ZGpLSHJRZUJRZUV2QzFGZ1BvWHhjV3k5VlMxU1UyK3ZFNnkyOFFDZWZSb00wZzJkQ01uZHN0b3V4dkJpV2YvZmVIV0pxZHJVVDJSUklxM0VWaHQ5YytFZ1VqbkNuTkVQUEs2RGN1VjZLTnFsamdqd0REZGsyQXBjMTdYQXlFWEJWSCsvRG8zQU9jRnJiMGEzTFh2aGRFdm1QcEZlemIzYTBadUZrQUlIUFo3TWRXY28weVlYVVp5OXF3ejIySjZqWUwwdlpiTHloaEZSRTh1VFpDWGNNNGlWc3VHcisvaFFJWVdhdzc0SU1YOEtMSmMyQkxFMENMQ2FHM2Vna053NE94eStJbEJsQlJ5ZU5GMEV4M3pwYW1vVERqSnBmQnpRdmFXWEFvblY4WmRRREdzazJzVEI1ZkJHWEhnWTRZRmo4Skw2dHpFSnR6SVV1R20vakxxTVZDNVZNOVIzaU04UjgwOUltb0dsMFZhUC9NTkxrT3VnRGNMZUhvS2xaSEx2bExZQzNHZXF6djNsamZudllLY1o3bm5ncWtyelZ2QnovSlZUNitxZmErWGR3QjQ1TStsUHgvNDRYNkFxWnY3Z1ZLMkJKblBlY04zZXdNOVRTd1F4SkdoTmRVWUxMWUtsZGV1MlREQmZDbDdMZno2ZWhha1JvWFQ1ZVRWd3pFOGNlWWE2VENDSzVwQUVYYWpHcFMrV05ERzhNUnJVK0MxWHh0azExLzJZeU13ai9PTVhGUW1VSnUxYmFaWUVmaDJid0FvemhWZjdPRlRhQ1dYUnFmTUdrL1JmeU94cFp0VWRiR25vc0gzUHFRZTNUdEVwUUJudC83UlFDMEpWcU9NUnFnZjRIT1VqVnd3b0hGM3pZWTB1WFBnRklJZHR3cnRIb0F4eTMySGdFaDRqeGNsemJuTVBYR1pjMjVJUVJ5bEFNbTVUTEFYOHBJd0p6TE5Jak1uSTBIVFdhV2hpa0lFdzluVkhGR0JaNXB3a2JIbHdqQmlNQ09LZW16dDdGZkNDemszc2QyWFk2bSs4eHdUbnVSUlBVaDRjSXpjcFZ2Nk5jZG13dXlkRVpmaHdtYk9DVEtuRzhoSjBCdHl1ZnNYYS9JbzNSdDRVZjhLTGFmT05ySDc1bTQrdktKOG5lTnhjSWdRemNrcWd6V2dGcDczYyszUE4zMzUrNzVjOS9ORlg4M001UUZRRDJ3ZDRYS1ZXUFR6bWlnM3BWd0k5cW93TmMxSlJwLzNFaEtKVkxOQTZXdXR3c0R2V3B5OVJHVTF6OHBLMVBwSHIvdkZlajUvNmVGZWk5MG1xNk1VeG0za0dnRGJDV0hUeWQ2LzdIdEhZRG5JZDRrVWhTOTJBMURxU0gySVBjYUxhSGsvdHV2WmpUblhjWkhQbnZ5bEJJODZWWVlVV2tHT0NpcUNWNGFvS0JjRkVsM0p2aFNaaXJ6ZGk1SkxUWlVrdFp4SXB3MFEzUVp3VHZpZVg0NXJQeFlCR1Z4TFByc2dwU1dyZ1lndk1LK0xTODFNdU11bW5pSkl1RFh0QmN6MnpSU1FiM0pNRU5sSmxjdHI4RDNoMi9hVnN4WTlUaE9OWTcxZWZ5NUI0aGtaTjJWYlZHVFVxTyt3WFdNdWN1ZE9EWS9BU04wSEpEZXg5MTFMOGNPMHpnQWVmTTJWTHlXYzZKeHBXaEhKL2NKMUpFSjRZUmFkM0x6T3pGR3lIVnNxYWZVdmRzNUNtd1V2SWtmamN6SGN0TWZxbWJQUGlGSWM2ZC9MWjFOTHNBV09BOUxkYVBOR2E4bkZEaytyanY5UlVxaEhkYVlNWjZiRC9RNnROSm1CV1ppbS8vZC8vL2R6Zkt2M213OS8rNEdyZi9pOENjREN6WUIwNDNjZXh0S3Mza2VZV2lTb0MySVFOVzJjZEUxTWFZc3ZlN2xXTHEwVjZCUTA1eXhIZ3I2c2IxbWkyamsyNitNbnBQMkw1QzFxdDRvTnlpZWo0b091bTNmSmxLeUNDMEhOWlNXN1pQYzNTcUw3QmI3V2lDZDJYT0dzODBhaCtjVnVBRTYyZzJvdGhlYm1TZXpUWFdXTW5pNzRGaFRtVGkwSCtVcXAyaEFLaDMrMFhaaEFaMWUrWWlzbEhRazJrVzNLZG9XdVg4WlE2MU5hVHAxdGhROXl0T3lWRG9pODVrRFlsdllPQUM1Tm9IRGJiQmtud0hnbnVjVXlhL1ovd2RJU0FySTJyTHQ2QVRNKy9QZTlXb2VNMmJhS1FaRE1NYUVZcnR5NGtLeGpWemFLdUtPTUN5RkVZNFBnekpHZ2Nlczc5bVlaRGxrYXMvS1Nsc0VTa2l2QlZqMEdjK0N3eDA0eDJvKzlucWJva2hlS09Vd3VmUTl2U1dlY2VMa0t3Ym96TXlPbVhUZEtZZGNEdnk3bVBKNHo4aEk5V21ZQkxIaHFidnR6QXArcnRENXRJbGQyR3k3b1FWaTQ3dWY2bnMvOHhBZCsvdmlERzRQMzcvaHB0N2l3K1dQOExSYytBMFM4eWtPeEczRzB4bU4rRnVuTGR0TkpoZE0wa3UzTXp3VGhqZGxQRGRuckc0d3NEaUdQWVZKb01xZXJISmlJcEZZR2ZZcFZucmdISUpVYUkwdHZOaEIzMzZ6TjIrM01KOTBJckpzbTQ4enROQTlxazk1ZjY5c2o0Q0c5VGIyVDhSWnZBTlNGTDdqZmZNSFVkMjYrTytqTFRpM0JjMUZDSVBpUVZuTU9BV2N4VFNFTjJiaUZJTWNTeEFXK1JRNUxaTG5DNW9wOC9KcVFVck1XWjBUMFY0WGc1ZnpoY0F3V2hZaW5wcVJBZUxJVVB3VFVGbVp3R2F5eE9QSGtGQ0ZDdTYxejRaYXl2Z3pqcUdXZHUrd1NlMFZUbkJKNGt0U2FKeHk3SUJkbEljYmpuTk11LzZINVYzUmtXTVFLeG8xRWREMk5PYTRiK2JSV2ZhdjJVUWVGTzdWcEdjRjIxMWJhZ1Rud2lGQnc2eGY4U2pQWC9GamVySkF6Z2w4c3pIbk5ONUlGYlp0bVpHbmNMT0E4eTFKekNWNnNaeG43ak9CemRjY2xYUlNjYVRPQzVoSjBycjF4N3hFWjBmTlc0QWFBS1pmUCtmQ1pIeTNjQm9EODE0OC93bWRhd0dZaGtHOExpQXlvcGRmRFJNdXo4UGJSVFdoZWxJNm1hRFp5VTJCZVo2OFVNbUtSYkdDN0tYSWV4dXpLdHBocDdaT3NUamg5ZUZOSUhLcWNySHkrOHU5R0pKRnV1b0FVdm1NWnQ1SGREWHhrKzJhUnYrdzhBdk00Qy9HV3l1UnptMEJGWVdpQi8zWnZBTTQ3ODlKZUJ1aUJJWDdwcXA2b3YrelVFcnlaNkdhVUNHWE5qRnRHMVRvMlNtcndKV0tkUFNHZWN6QUR5Y3Rhc3VZNFNwcmczQUJnaTJBYWlHSk5vOGxDa3g4SkZVZ2lGazR0TEJqQ2xicFgzSzcrdVRkQWk1QXNMZ1hXYUM1eEV5NGE1eUk1aTNwUitKbHdrbEd4SjRUWmRhUnNQSWJtZEJ6TXRMaktxRjJ3KzM1alRuR2tNVE92SUVkcUw0Ry9SRDJ6SnBVdndaTWUzY3Mva2ZwUGN6RjB6OTdsWTgwNjMrYlVjOVFSVWc3UExNSytzMi9lYUMybGVON1AxYisrNmNzY3pnek1yL3R6clE5T2s0VnArY01QUHhETGpRRy9BMHFUTkxsYVhOU2hwemk0YUdxUnJacEFjdE4yeG1XakxNT2NwVUxtWUx0Sk9Bc2hyQTBXS1FtV3RhSUUycFlJRi9wRENrMDY2SC94NXJ3V0VWalRMQ0kwRzc0bEhHb2JraTFMemRzMzYrZVF2K3d2UGdMYkRRQWJ5Y3Yxc3J6ZkVFdVUxam5jaEF3K1lGdFpnbTV5cUMvVlRDamVpL1VzYVVzdzY5OGttSnpMVTlTTUxOVm1tcEJNem5ZY2pXbEtiMXNwcXNnY2c4R052M1ZTSjJpUUdjeVZ1RjgyeEoralFISWd0cHMySElYUkhsZnM2cEhYWkdlVWtYRnNrYzJSTjFUSGJNdVpRMTZEV1FkUUlwWlZvSnJzZXpSNXprUUlweDlzSWRvbnhlSEdnRi9HVnhZaFV2QitDK2dGblJ4TEU1ZnFLV3ZqTmdwQldReWVOSThVaEpmQUkwSGhiS2RaclNpb0NVM0dzb21hZE9ZYXJHOVpJUjVQVjFoaUhXakNZMGJKbTJWTFh3NzAxeHYwZ0x3N1R1SGtkQmREb0xubW81Q2JPQXBLblF0d2YwOVN6SHpseXZqTjdFdkM2QlE3M1RZL1dIWjRhNmdKeFpIN1VseWxtUldPc3VRUThhOHdjOVM5OXJIK3RyL3RPUjNmZzZRRjJNWlRaUVEwZ2FQQ1RWK0krcHRIYVRDN1dHNWFsbGxVVDFKQU9KWlowMlFCeDBhdENQNzk3MzhYd3RRS0RVMmllQ3NBdzRoaUNRZGhqYXZKZEtrV0hnK01WSTljNGtqRWRtT0t0UjJBR2NTbkdzaWlwYWdwV0NGNURibnJqcGNjS0tZOE0zTkV4R3Z4S3BDdVliQ1dNWFQ2OWRJNHNVUUJyV2JwWUt2cHdxSWl4WG9Oa2pOaUM4bk1aRWU0K0FtMDJOb29URFZaVDdYc3duTlZPOGRvbUhCRGFQQmYrdlY1eXpoUmM4ZnBFVWNLVEJEVzJ3M0FTM2YxMzE0L0QvR3pkRlliNlFHcFhXQTllRS8xN2lGZjZhOHJ3U0F4azR1TTB5STJaeVBmVTlNSXpWbXdLVFZYSzYrUXpCelI5VlVLaGFsdzFzSjVIRVdZYkNaY1NWQzZhRHJrOElxZ3RkT0k0eWFHWlRPNHRPZllKZTBtS0oxYzJITXBuNmIyeHJWaGVpRHpEcU16NXI1T2g0UmhsNWdBeURTcHZxVjI3TkdZdXo4OE4xNEpkRVpSSDVhNmtXbnZmcFd0czAvWlduUHZYcWVTb3l6bGdzRGxIZlBuUFczckpsSHoxcHlSTFdCdk9YdUdqeXJKbkZldzV6Sm1oSU9sZ2JzaG1wR25WQ3RwcDNZbVByWFBvM28reE0rVnRINjZoOWJ2di8zR0JTd0lDMGxCOVB1ZVhPam5pOXBVVDcrc0djZCtUQ0J0QmdqSzJJN2t4SXhGZ1RMSzJsNXhNdk1JVWFlS0RtUkwyY2dLSG9vTVhyYWpDL01Hb21jdXcwbHRaUEVNb3FNbEU5Nk9uVXQ5TzFXOWhVcWVNakpmL1EzQVV6cC8xOGJqMkRqaG4zdFBBczlkOU81RStjUjc0anJQZUsvM2FQeGR0Z2hxWXZOVWdoVDIyckNPa1hzcktYd0VrWktzeFhOcThZOWNwUXpUTU9UeUdrTUxMazVVK2N3VVhRMStQTkJxWm44ZUkxc0Z5S1cxRU9VQ2NTNFp3bk5VUm9UZlhMc1NNek9TYlJQdU1sQTRPazV5dGZ0RURORjJtaHpwK3VsWmNqa1d3Z3JjOGVHMGtGMHRMZzFYdGtmRzJDMUxJcnRPakgxZk90SDZKNEVYWGJta1phNkxPbmZSNWtRWnlmWmRzaVpMd2MyYlJoNkVURzQ2L2VBeWZpSis0bEk0aEpKTElRVjBMa2NadWNJMythV051Yjh6UWcxNzBJZVNEcC9ldkt2VXZXQVBSYWpodTZQU3N0Ky8vMTZWL1BuSG45QVljRDdTdzgwQUgrM25pcC9QOXJEbU9RdTNBWGh4T1ZDR016STUyTWFGRG9zNHNzdmFMcEc5bnZHTVpCcUNjMFlsYlptMy9WTWdzWmt2MmJ3MnplQXBQMjhnN2IyeFRndURFRG41SDlDYTJUalZ6OFNGTGMyc2JCdGpOVmVIaURoc0t5azZaSkhnTXRUU3JmZXV5eHBmQjdFTWw1djNic2Q2RkgwZHZYL2RLdWN4QlhsNHhPK3RYWWxjQTAzYlNObHJ3L3BDZE5nYmZIWWpGM01pUG9yWnpUNXo3SXdjYVE3QjR0OE5UdmFaajNFOXk2eEFyQlRLV3MvNDRVTVF4eGtCYmVPQ0NlSjNDWElLMlhBVUloMXNJY1lkWW9LUmk4WjVvQkloNWJJdnlwN1RsdldUUkZIRlcyb296UnlDclczaDdDcDdoRENZOVJ3elhCRmhleDlsc2FzR09zODdYRTZzQ3JQNFNTNTN4K0huUnBhZG1TZUpJRHZYdWNncyt4TElNeGF6N1BVU1ZFZWNPdmZyaEo5cHoyVXZheWppTTJlRkVMUzdoSm81UmZhdUptcDhLY29oM25PWUZublV6NnpJOU1nVlA3UjNYT04vLzMxYyt2Lyt1ejdyejBkNklIei9QZThXdk1lT1FuVjEyZVNHSGRQN3NQc001aXdZTEhwR2cwR2MxakptcEFudk9FSWM2UERNQk5UU3dONVpTZ0xVR3R3Vldpb3J5Tlk2TXpNKzdOMHBsYzdwQ2wvbmwxd0lkZ3ZaNnZIY3UwK2s4K05PZHVRNmZKVjRXMjhiOTVDdFlSL0VVZGhHTDBocGJyeGt3U2tEMWFMb3hYMGRTWkpmZ1hsbFpNNjc4UjkzQTNBMFpHWHY4YWdWL0x4SlZDRlk1OGc0cXFmd29WbFpJVzdDdE5kR0NaK2JFcG54TkRudm5PYm52Tm5lc1hXRUY2ZzFpNDRMbnFVRzg3NERHSjB4c2V6U0Q3VUtpbDZDU25PT0ZhSzF5THFzWjAyVHRjNHg4Um5NOWowenNwb3NwdXZJVXRoNHpjU1F1QkNGZ09TbWRlNDFpckthRXJGK0JxL29NL0tPUGVLZjF6OTdWWU5sYzBsTGNNckxjSFVzeDJhYWRFcWlUTGhvbytDU0xvWmNwNzJvK0VrWlpWalVGTitkeldDUk9uSTU5aUsvMEZLVG5hNGY4WGs3SnNMT1BLb0hVaTVKdEl4QUFDeUl3RjJDMU1qOGs3d3A0bkh6dXY3TTNDUDlhTm1EanhlMmorU2R2bTE3aFdzY203d3ovT2ZIUHo3L0dSLzkvL0REMy9Ed3BQL25uMy82My8vOS96V3JNUEpjK2tzTlY5a1FybFlHWGd6V2VZbHMrMFZxWUhLVjllek5pTW5GS0dwdHRvLzlFOXhGU3Vkb0xRVjVMNFpJWDJ0Nmc0S1dkbWpFK09GcVVwKzVRZUFFRmVMd2dLSzBXR1MwdGpaSkg1T05JZDYwSnBFd1pZUnZ4SGdXbWIydHlLNXJMOFljQlRpeVRYV01FVmJnR2ErRjNpUXNFcndsYUs1L1JuSzllVEF6L2g5M0E1QTdmNitkQnpIYjBwbVJlL1V6WDVzemEzWmtrR2htNzREajRNZTJTMDE3YlpoZzVGNURDamQxbGdVWUpCeDdGakhCUmlsdkRoRkIvT3lWclNjaTVnQUtMNWZqRU1DUGtqWnZIMkZMalNrcGVzSENMUUFJcjRoOCt2WWJmcTJhNlRkblZ3cVlVc0FvNmVRQ3RNdkdIQ0t5OEx3dW10bVZiU3Zid0pzMUwrcGt6WnYybkN0bnlkbVJraXVESm1kUVNWZmtyVHNPTEJWSzU4aGJ5S1ZKYkE1OGlsUlJucHM1bHhMTm5CZENuTm9HaWE3VWtBZm5LYlVkNVJwSFgyaUxvNHpIL0g2OU1oZVR3K1U5UVpiNkovdzUzU3NqSndYblNtYmEzS25NZjlqMmppR0ROYy8xWmV2SFBlT24vWC8vblNmOS9YT1Q3U3V0Rk1PTXpkb3pxZ3NlUnI5eVJhb3NsQXFpdFEzVm41dXlUVjRhQmd1WnBoQ3RSMG1SQk51Z2pFQkhTVGF5eStFMldzUzhpaUQrSHd0MjdhbGordFYvMVBPSlAvVTF6a0tSWDFuYSt2QVlzVTQyUnQ0K3RtaUhYQnRxNldOTFhHQ096WGJ4bG1abW50c1BCNTdMdm5FdkkveEF4Ny82RzRDalBtdUhlOFp0ZGk1NDduMjRESHAzb256aVBYRTlYRXdPZEZVbjR5K1htRXRhQmkxSWxvem5wRmRzeGJKR01HczZOaE1NaXRraTRpaHk0R1RFSE1lZi9KSUk5amFCZnNzWGY0bnRFT2NvZlBGbU4vOS9HOSs3MTNzQ0JPclVOZDk0TkxYdEdDYTFLM0c2VXZDTW0zQmtxRWM1Y09yajFyc2prUk1jdGZGUWFjZktHWEhrTXVEVExBUUhaNlpBWjVoRGlxdWN4N0pVWVphU25QMktrV1ZMaFZmQ3p6bWxqM091OC9DSHZYTWlqNWlOVXR0ZHVTeHlNZW9vVjlQWkxqaFFPMWMrOGxvZmdtM1ZwcEFNemlJWnVjSy8yT3VuMDNKaFZwdkJoR3dIVFFJZGV0VTRpTzF6Z3diVFE0b0JYOS8wNWJQKy8vclh2N2o2QjJHdS9QSEhINWxMbVMwMVljS0V4cG8zQVZUS0lsRzcvdFY4QzBkWmtOcEtKOTBJbG5kekRjdDREMitYczNJV1Z3WngyWnNMTTJpalJOR2NYVXNGQlk0MUcrdTdPTW5Fb2pVZGpaUFFFT3dkcGRuVWFMcnI4Zkg3TWxrM3pyWURqQ3hYWHlsQ05VYzFiV2xJV0VhRUc3bitIWUJad1ZJMldycXR5OGIvL1F6dkczbFlERjd2Nzl1OEFmQW10SkY3Vk1ESDk5Y3NlbTZmait5NTkxejVwdmQ4bno3eG5yaHVKcDBKRDZocFdBaEVEVnRHbTREcUpzUEYvRDRJT1huWjF0bTFzS1hiTTdaTXpwdGRKaURCZkJsMXRwbUxaRDFmK3ZzQTZvV1NlY0xNb091UXJOWjBCMDRzL0kydytDUEJuL256Qkp5VDJzZGM0d1QyNlhPY3dQQzNkVmd4ZzhkM0ExaDVyTHEyYURRazN0RVdYaEM3bm1LMHFqVmdJZFBINUlyaW1QZG5yczQwcGRyV3I1Nm9KQzBLUzI4R205UTJQbXBhSk9jZDV6em4zYUxnbDhDbGdzR0hESVp6Rzl1YkNxVmY0Z1BtSHQwVWVTSENHeWhqMnpmZlFERXZOTXlYWkxXZlRGVDJ0TjNPTm1nenVFUFFHY3hKY2dGc1d5RTVsMkR5RDFON011dWYyOEtIL3ZId2JrQThLUG4ydS9qS2J4eWdzU2lDbVhWZjNhN3lvRFd5VjBROXZHODQ2U2gyTjFjSU5FY1p6V3pHZHB4bUdxNVMwdkRtdm5TN2JRanM3SEtTOW9ocGpJd0thRks2RUkrUWRuTGJtdkU0S3BJemh2cHAxSHJKYnVrbkdFZlZGc2x0RHhuZEw0UTdtaWkwVHUxQ05CUTc2QVVhOFpDdkx1TU9NL0RabTlublhvVnZBNVVqWmRQcnA0eGUzQUE0UGh1MjU1Uk9uR09QYU9jNjh6Wmo3MHhTMlE1NDRqTjhjTFpCbkFoSjdOUlVuWE40ekRheDlCUW0ySkQ3NFhYVDNlcnZPbkdCbVBzK0VhWjh5M0VHL1B4Ti9Uc0pxbnpKenk3WjdxYU5FbWpjRlFrcE5Md0pqNjVwMW9JbUprMElXbnd6Z0F0RVU3cjBSY0RXYzNTQmFSMERwYUdMMkxRenhWdkpEWUdBd2FJb1hyQ1JUU0pSeVhMRVd4eXk0VlNJQTR1SW1HaC8rdlJSVXZ4QkFBcGp6Y01ydkhwQXhRMEJ0dFR3czJDcnYwTmhHNWJtQ2pnYjZGT09RT0dzV2JoWE1TaUVkYnZGVURtQlpZSTdJcktiNjRFUWFhOGdyQTArd2x1V3dZM1gvVEFIRXAyTjE3WTB0Mkpkd0NZMUI0K3RRSENuSllVa0tYTzMzbVJIVlEwaGJkNXJobXhLNUZ5cWtDMjUweDJOckQrd0NDMzZ5YlUyVjUzZU1hZEV1ejE1UjEwMTFJdVZKN0NWdCs5K0NqRmhLcU5MbXREYjQrV0lUODVCMmIxZTBWbHlTaUp6bHJoQWM2akF0QXp1S2p0bzNNcy9rSGtXT0RiWnFLY2ZiWnBxWm5XT3g3NEI5b2Z3Y3FzMHJYcCtHWnE3aUQ3ZE5jMlBmL3pKVk1pRC9QZnY0cnU4di96TTMrbjZsZXQraHBybDNYZjlnMENmK0Nid054K1pJWFVLVnYyakZ6R1RRQ1pYWHRQVTJ3Z1pETHUxQlRwRWRWS1lDODBFSnhJZkR0N1dYOU5EUVAxeVlCdm1JQVM1VlJla3NTUmFyM040dHRlV055SlRBV29HSnlzbzVydDNlQVBtZnkwMEM3UGRNb2tlRkNrcmtkT1pBMEZVMW1abTBMaEExbHBHZ2o0Zk9sWjhPQ0tNZFd3LzdJWVdWMUFVSG9RUmFBUm56aWk4N00rT3draUJvWHp2UW5oT2w4TzFWNmdqR1FkUjBzaStjOUJvdlI2ZHN0TUZHMm5HRkwxM3E2VUtaUi9veEhoR01lMTBndUhsYmI0RHNPcGx3NmhiZlJpTTJBVEQvazk4M1kvR2swYmdHYVdPNnpqWm9kbEJlNXkzOGlncE5qcWczUGF1c29RK3o5QkhZR2pLMXErUERwRjRsRC9za0FrYTgwcXpnaC92QVBSU0F3OXkwT0xxZHBRUjdUWTlqVng0Umdma2E3dm01Ky80Qldzb29kYWx3b3AyZEtTdEZSajNCUHdJQmpjcVFZL3l2QVErM2lHUmkzVlBVbk9PM0wzc25idTkzN3BETnZiS2l2SmEyU3RuWUNwbTd3MzlGYjVuamRiTTNMcldPRE5oaE43eE9vc29DeU5zbFliMERXM3dZVVA2VS9qWWFwUGpBT2psemZXYnYzTGRtOFZpTjQxdHVBcjFvTCtMZzZJRXJwclBXZjlxZkZZNXZ4QjJORzdQVjA0L0hwOVBNQ3RwU3kyMkZ4L2I0ZUJpNHRJaFJqZTUxdWVTbmwvMjhjLzgvL1RUVHp6MDU5SWZEMS93RlRNZmtrdy9tdWMwU25tc01qbmJGSmVidG1YWWE4T2x6NFRjVDNraHR4L1o2VUZ0OHRCNXhESUVaYnRyV0R4ckh0anJRMnlwTUVBeWJsR01FbmdlcTcyWHRQTG05VUV0WXpDTGUrUXQ4RGJ0ejl1clVxTzlHS2dWN1JJMmRUbWlWT2ZTZFVtMGtZNDZLNFhEUG1qbjJLYzVsOXB6MVdLekhtWlk4ZS9HdnJJYkFQcjN4TTE1TWtJK1ptYmpKT3FpeTVvWCtWZG96Nmo1c0pUMjZSeCt2cGVMbVRrWjhjWUYxRkxHUVlRY1hnaTVtY21jaXVSQ05odkNBU0d6NERKQk5xQXJDWGQ3WXQzNG5UbXVJZGNIS21mQWtiRHpwYThMK3FZejNnMW9uLzZKR3RwblhpTlZXNmd3RjFrcVRETS9ucm9vVjJpdUZtVmZlZTdBamxKY0Z6OVN1S09JUFhXWmVwbGxCbHZzSmpjVDhEVk9IMUlSdG9CaEhZMzU4Ti85bXBPVzRHV1JTMDRCYVQ1VzUwa3hjNHF2Q1BsNis2Vjk0T1pRWDZHdEo0c0Q2VGFQZFYvZWw3aWdKeGRlRnR5NGVEWWZQL1A1M2J2ZmYvMU4xLzEyQlR6bTU1SUhUcGxZMVFYeGxaRzFEQ1hLYStPU1ZiT0E1aDhaT1NwUHBlRFpwY0tFNUhTekxlUXBhMmV4Z1pvM3JvMmpGQ2JZZ0ptbEZIZ1RNUUdkYkIvbC9WSTR0ZVdlWGkvRG5ib2VzbVErbDg1Uy9DbmcxM2NEUUc4ZjNwd25JK1g5WXpaT29wN3VjcnFMVXQ2VDdnMDgwbC9xR0x3NDFCZHByZ0Y5ZDBTZ201YWFPWVZwdGRtd2lHVUx4eDIwWWZFY2dwZEZhaGc4L3VGc3hQc0ErVFJBWUdQRmVTckhqb3p0cm1HYWdISklLTGV2SXJRVFpIeXB5MTZNZUhMMjhhUGUycVpKaWwwVzByWjNPUVNLb0pKY0QyQXZwcjNtY0xreU1zcSs4V3BONXgwQjIvV0RpeG11czljVDhwVWlTN2hEWkpDNDFKbTduRGhSb1dOZDdoWEVaQm5XTFBqOXpmVjRXdDhkR1FqYmVHenUrNU5kajVqSDVIb3N6Rkh0SExTdTM5MmNBMjRpZDVWNkYvbG02cmRET0I3d3A5Ym9FY1BRWm1KdE1HODRydWI1YVo5ZmZ2cVpaLy9NYWR3a2ZQandRYmNLTkYySFlsbkhmbHltMm5FZys0YkJHVzIwSUZwOTRwV3Ntbko1SGE2aFh3amhha3ZXd1I3MG1FL1UwQm91aGtxZUE0V0lZL3Rod3htelFrNmQ4U083OEl0bWFVcGtDUlo5eTlxQWNDV3c2RHpRSkl1U0tsMUpxbWF1Nmp4RkNUOG5uM3VmVWVvODBRUGVyK1lHZ0VITUcrL2V6WG52ME9SYzk4YStOSCt1RGVTeG5Xd3BWZXEvT05RWGFSWlg2bHgydHFIcG10ajhlNDJpcG5BTlZPNTFLY011aDJPWXd3ZUF1UHB2N3dMSEZVeDI2UVFtTUplcXAxeENyRWxUbXF5MVFJditmdnJFUFFEWDh6QkZIdjU0bGthVXdHekVTVkxYZSsxQ0VjSzQyby8yc0xkQXA3YVVFWXg1aVFKbU5DSHlXNDJtYlZqRm0rSVdabzZkQTRVc3doclVPcTRMaHQwVnMvbEZNS3U1WUxxNnRDV2lnVEFCc0NIcjRjazAxL0NBUVoxWnF2U2kxZEFMeUxUcmlmSTRYSWtxV1VwNXM4S1JmdEdaQXk4aVIvb0t6MW5PbVNXZCszVlhWQkY1U3ZQZXZCZjVOMmszQ1ZPbnR1dHNqYmJXSHovR2hNYm4vT0V6ZC9FNUg1WS8vL2pqNTU5Ky90djMzL1BiUHVETW1memlKelFXNTgyRzltelczbzdaeU9tdTRLbzhSNEVvUlE0WGpYVm1Ga0oyaWVteUhUNGJGcGxkMTVGemtXVVpPV1JKS05rejM2NENsaWEwSzhwV2V5RmpycW9rZ25DbHpwczZSZmFrK1l4U0oxa2VkbjAxTndEMFVFT1p0MS9ibkEvM2ZSR1l4UmZ1TndDVkNrdnplb0Z6NEVDMjY2ZnJhbWEyTGRLdlNBeWVHQ1JkSGlFQ3JhYmF0TFpyS1R0NnNYVEdMcFF6bXB5VmM2VDVTc3E3MFZ6OXQrKzUzcEN5aU5OSndiZ05DRjY0eHVjNW1NNklyQ09FLzlrZ01IcEFYTjhEeEVicWR5Qmg4WC9mYlB2eGRGSUpST0I0aEFWaXUydmY4K0tLSk9JbUdYcXVrU2pxYy9tckZMbU1FbHVhcStpS0VUSUxRcHJxM0EyRlZVcHNib3BUOUIxWURGVmVRSnF6NE13cHlEd0lSWHpmTlhhR3NiTWtvUWZ5cHVqTnZGbk1SbTNXOCtZdDRqVFA5ZWRxWndVaE0zTkdqbUtmZ0I5ZWpwd2VNY3VFZlFKWStnRFZuU1B2bzNnLzFyd1ZiUEJCZjY3ditVMVBydnU1eXVmSGZPSVJ5ZWR2K1B1KzdURktiTGh2NHh1c01aMSsrcmg5a3poMVBDandxQzJNL1pycFVUVUhLWGtMcmJnY1lwcVEzRlJJWVE2d3piVDdkREE5dHRCZWJyY1pOYmprR0JhbjN0Qmt6U0hKdVRibmtDdklXdXZMb2FxNXJXUFB5YU1rVjBaeW1VZWRQZUxuMkdJdnBSN1FLYkxQMi95YWJnRFVjNGIxaFFiUnNqYWVjYXpudlVIaVQ4bjFsTmpTdFllbDFLOGNQaU01bDVoNU5JeGtFVUxnc0FBSzF4cGNCcTRzbSsybHkrRmlTbm5KekZMWW1hT3IvL2tkQUdnK0laRkl1YlIyT2trWnpMSzRJb2FsV2ZFbVEvc0hSN2NCdkVoSDY3akUwM215ZmRPT1Z2Yktsbjc3MXUvV0JYaDUxQkFwWmN3Nk54RlZNdXRjRjU4VmhOeE1mVVJZcGo3Sk1oZHY1VGtLVjlZWHdYd2JKNXJtM0dYa3BDVndXZVNTVTBDYWo5VjVVc3ljNGl0Q3ZsQy84a0g1NEdocEgxZ0YxOG5oMXQ1UytTdk5EV3Z6M2lKRWY4enJsMTkrNFI2QVMzOTJzL2dPQUY4QmZ2K2UyNEZmZi9zTmhBLy92RzlmRllDZ3FtSTlMcSsxWjJyS3dsWXpHeFJoMExZcU15N0Q1YnBwSXliUDlwaEZzMmpEb3p1REVETmtxNmhObGVNMzBRU3g5ckRibGl1WDRleTNSdDdFaFpGbGNidTUxSFF4V1VnaExsZ3U2MlROT2NwSTVodk1SdGEvU2M2QlQ3VEpsVk1YdFhOdkllZm13MTBvZ2FXWlUzeForK3U3QVhpaDhWcnVQUTE4aHRuNXBPYWpQU04vZENTSEgvRXpaMmRyQnQxQnRiSDFmVEdUVi9LTHRsMEozZFNpZE1adlppZnFuQU5CYXBrNTZ4c3hyUm1INnJvQnNISU9sNEoxNVBJTkF6aUkxbFRPRm1pUHhEN3lPMFNBMExUd3c5Z0taRzBEZnJzMWFHZXMxbTNyNkM1RlF3RWZISnYveSs1Z2w1Z1ByNTlMWjFuQUErSkhJVXM4ZzlnTWtvYkx4V1NDd0JreCtkeG8rdWVVNGwzdnozTUJNMUtFbnJmNXhIVEg0eERqUDVkYXRzaE1PRUh1S3ZVdThrblN5NjcxOXIwY2ZoL3hlTml6em1MOHN6dmJZMTRaanlTRzcvLzhuLy9ESm1QdVl1TGlRaCtZMUN6OGRWK1EvL3J2LzhibUpvRmZBTVdsS1E2RUMxdldzYTMxcjRYUkRLUmQ5V1liUkdCWk4zaTdSTFpYZUc2R2JDUUZpeTYzTEx1K0YyUnNxdkU2Rkh2Tm81bGZvMU50YVZKaENYRlQzaWV1Y3dFWGxRdXROS2xuUnA1WTVFdUhVN0JIZTg1MTdwMzVJRi9kQ0N4N2NRN0dEUUIzNXZIbk5zWTNFVzJjUng2TnpzazJtQVZua1N2aFUxUTdndHVSTnJubW5IV3Fna0ZTQjlxV01ZN2ZybU9halpMZzZNSzkwRzQyai9SejRCVU91M0U1bnpLNUlwTEhXVWdvdDYrVDVoUzJuVXVCYmtMSVVqTi9TZERZaWl5cElxSW1hODROME5oRnNWbXNGbThvdDBOVTRheGxtQ1BEdUhTVTBSeXJDYzlyOFRPVExjdTVnbysxV2xsR2psSTZjQldUWGJKZFQ0N05aUExpa3BjMVNWa2dhSTBCUVh5dG9iUXQwRE1DYW9IdmpEWnc4VzQ3bXgvRG9ISVpFZTYxY0hFQWJaaGdZOVk1SWk5ekZYTGgyRnR3c3BjS1RYQ0lLNVNSOFFQeTdpS2doTHVaZFF3ZUdVNTBSTGlDbDR5bGlRSkkyN0M3K3VmVU16Sm5uOFhGeWJHWmsvR3NsamtaUDdMSGpsbjkycC9uTEZsLzlob3g3UWd4WGhJN3NPRFAxNnl6c1pSZktPOVJOOTBkcHBlUEgvbWQvcGc5UE5WbzhoRUhCWEFYYVVFSzV0TStQUEpud2VCVC9uTGxqalRrTXhjYkxGSndDcjFMQUNFdnFvRWpIQU44dDI0OGljaGxid2J0T2dKYlg4YnhFamNnZldKOEZ6L2Z2RjhheTMzSDU2NFJsZTBjbHZrWk45K2dVcnNBNDB1RDhNeW5LUVF3NHprV1FtNFdXMTdGeWpVak9TUjdzL0lSbnBXdEx6Q0hsK0lkbFl4ZVJZNXlZYVk1aFYwUEdNc1VkK21VZW9pZGtic0VUWFp0RW5RVFkwNEJ3bjRvVHQ0aHdmOTZCOEJEdWpNOG9EdjByMGJiZzh2Z3NCc1Y1Qm5IU2NwYUt4RnI5TFhHd0NWY2hsTm5RdUdMSTRLVkplVnc0VzVpd09kT2lVdHlCMUlIZGxhUWlBbUt5aUt6ckwyS1VsT3lHZkVKRWdWd3U1cmhWa1F6ejhQUkxaT2EwZ1RFMDI3MndsUk1Oa1R6ZWlkcTlFc2JMdGlGZ05qR21BblplODFtbTI0NzJBanBWd2FqbVY5M0JXU0g3ZWVveW1KUE5kNVVNVS90ekduODNOTWxnc2FYMnR1cForN0JFcHhwVDBIbzd6SkwvQjBTL2hEdnUzNzVDeWRvOGZ2OTc3a05ZSWxtdTU1Z2h1R1Z6L2p6SUYrZjllZXlIbG1lK0gvNDhFTm50aEtiZ0xvWmFubW9iZXU2aEtZWFFyRVZocUZtV1RmNXZoSlpSNm40MmV2QUFyWjZBcHRUWk9aU01CT3UyekdBVDE1S1BhWDVnUHhTWVFrK0lMNE1zVGpHczR6Sk1zdGY0UGtJdk9rYmdOZmZNNTYrSTNxM0x1UCtkT1VpK0FXYjgzYVprVnhlOWg2TlQrWm51NHlidzIxQU5nZkRKeEtKZ0xCa3dXSWYxWFlZTlFuNmxKTkRzSVh6cXo2a2x5dkFNZGt0NjFkdDRoVG1mQU1nQlU3RFJKbWNFbTI5Ymw1cEN5eXVyU21wVHUxYTVRMGtPWiswMWpnOExLRzYxUDJIUlJTNHFrVGJqVTBXbEpTbDQvdU11NkhMTGhXWkZZeGttdTJVeU5nalJzdXl1OFpTM3FKK1I2Z0pBQUExSzBsRVFWUVBXSkJIa3FXWW85NDliNWFVOEtvNTkzUTVJRmZsQnUrb3Y4Ti8vWFczWHoyZjdPMEMyRFJPMThlRW1lb1RPMGJFZ2dqRS91NWIva0JoUFBqZ00vdWFjSmlPZnYzbFY3N1l5eS82ODhZb1RkSGI1dFpmVWNUcytuSlp6WlUxY20vbGVUc2kyMkltQm9EV011d3lMaVI3YmR0d2xLUkdzeDhMMExTQXExcWFac29lSVZkZjUxNmZSMTdKY3NReGpzRU4yRkVpMDB5NGdwaDhibHlVbW1uSUNyVHJ3RGljY3M4TCs4dTdISUUzZHdQQVZzL0hqSGFDakN5NzhiemdLNmQ3M3VKZlI2MXNKcEtXTFZVSXhmdHdrZEloWE9jaHRwUTJsdGJnVEh4d1RKTmg3ekt2eVptV2JSTUlCOStkc1VmSE9WTm9ac3JyK05VZy9vaHZ1dTZQY0oxZ1J5bEdTa2JqZ3hpdmdLV0RnQWhxa2ExQTNUQUk4UnB1eTdLWVExR0FWaGFETGFvNDE4MFRwdFdJRkMwalJlNUl4eUVRYkM5amo3em5aT2RWdUpzbEtqVVp6TFB4bE1MTllpNGtTam5IWHJlRFVnTzFrbkV1WTBhU3dCY3pXMVdMOFh4S1FmTm9vRlpBamNaVHNqdzk5aVZxdUtrcGdtbk1xL0dqUE8yQ25ybExDL3NTQk8xUnVGaDQ1UC9ycjcvKy9zZWZQUC9uNHdYeGRkNzM3eUV3TzdGQThQeXNvYmErZDBzWnl5Wmd3UkV4S0pjSmNtbndEYzVHSnRpYlpZc3R2dGNLeVlGMnlYQUhDNzVzb3BQNUo3SnplQ0huWnJiblFDR0ZVNXBMenBIVUZYeldueEYwWnRESWJGekplNU5qMlp2TWYyL0NtN3NCWUxpMWJSNCtRaDdiWURtZEZBYXl1REI2SU1YUkRqZXlQQ0Q1SWlGSGRlN0hKRnJ6WmhMb0hzMkVwYmo0U3hlQ2VPM0tCclpjckwzQTUvUkRrL01XQkJZUUZneEEyYXl6YmZEcGhySjRqU0RwYWVZZFNONDVGeVdKNk5weUhHQ2NtRWNYTUdURDBkdnVHRDVWWTZEUE9kaFpObjRyYVhuQkd0VzJTaUhMWUIzWHRzcGtyU2NZVXBLNFpKenJNZFVjdmhSSE5xYzd5WktsWEZzT2wvNUtJUVpwaFhkTUJSeUg3MmduT3ZlNjVnRkI0YWliMThXUE9uSTB6a2Y4bzR5N28rV0lkQUV2UFZVWnBjakN1YUQ2Z3BSN0IrcUpwU2hkVHRyc3o4d2pHTjkrRjAvOXVhWm5NcUhKcFBydS9UcysyUjhYL2Z5Y2Yvc0VQNFBKejNqKzhPNERqemxZUE9HQU0xa1JraXZNSXkvYmF4dndzOTJiWTRmQVZiem1MdzJEaW5Jekd4d1EvSFZpSGIvcWZsdEQyWllXSGowY1JwN09OOW9WeTVVTXRTMW91SGhkNjhkR21WeEdabU9UUHJZY2xTbExNQk11Mmt1ZEpaZ0ZSWmhwTTVLai9ySWZIb0czZUFPZ3pyREo1NlB4NFg1ZUQvd2lTYStYOTF6TW95UHF2UHZ6UnBGT2ppcktjOGhkWGJEYTBpQnZ3VG54Q01rbDVZekdaVUEya21tV0JWd1NUSjY5MXBTSW1sblFzVEpRU0NIOUMzWjJZZUExQVRMTDhGSmJuR2psamZOMGZEQzMzd3dJWjYwUXZCaThoYThUbmhUeUdpK3hRaVJJbXZqODd6Z3haL0xEZHM3eWdFZ0pwNG1JeXk3TkUvMlpLY1FoMGpUb0ZDWmNOT1pFRndPZmhVYjJVdm5GZXR6eFVrWlJLOTQzMVp4N2VvSWM5ZmVvUjg4MURpMnZEcnJ0eXUvZVlvNktQTUhuRlBTSUNyaU81OWtKMS8xK29zOUgvRm5BdWU3bjZsOFgraENDSDh2Mmw4dWxtZGU0cVNHdk9WN2R4TEN0VXRWMFNERUtXU0htT05aSU52UllKQ09ObnlmZWZpSlEvZVk3QkR5bkFMKytPTkJHamswZzVyWWJaRTZ4WjlxTWxKRFNuUGxMUktOUlltODJsMUlsS25PT3NtUk9DZityK1N3ajhIWnZBT2dlbS85b3ozaVd6cCtJUEp6M2FKZDlXUENreUMvaVdtNlVKZWp5c3RmamMzRkF6TGZhTXRDMDh0YXpvdkNLNEZnTTIrZks5bHBLaHNOdG1PbDA3TUs2VkZmMnJLQW8xaTZzR2JIRHQxT2tUd01OaUVpK3ZpdHZIQmhEaXMvc3hqMEFwUGoySG0vQjY5MlA4VGtvcThTeHhEazd4T0txbmxZekpCTnJtZ0s5RGdOSGt4QVpaQXQ0Z3FWY0R3dk14UWg1UVBDa2tqbkxYZm9sL0dhRnp6aTIycjZ1dGxRaUhQQzVNbHJRR2JQeHZGbXk4a1Y3N3VrOElFSXVDb3IyUU1pQlBoZlEyMkUxWkRma0lPb2lISE5KM01WUEM0bThhV1N3Ymo4Q0Z3OVF1UHpsY2wrWC9oZzhPK0F6UDBGb1A5N1BtbkJBYmdyYXZBUzkzdzgwTUw0UG9IbDRTa3NvRVVFT0YydXNabmNrc0szdjhxditUTU1lQTlYNWpyTFI1THNVb0hDdHM4czZOZ296Nmh3TEhDc003TWFyK1VleUpqUWhXbHYzczdUTEF5eWNpRWxqS0thUXJHQjc2U3BnYVRyMnBqRUh6Z2dpSjZCZFN5T1B3ODFpL2lMY0hJRTNmUU9nSGVVMU4vbHI1cnE1YmQ0c2dTTnpIcWdsNkM2Y2UwMjdic3dGS0paVGtWeXNaWUJqY0VKaXJUbEZ6OEtiTjg1QTI0K2Zwc2xYVENuby9CbDIrMHkvUUFJeG1oMVRkbHhYYi9OYUlDancwZ2poWXBHbWJOYTRRRVN3WVc4eFJDdHFKR2o5N1IrOVJaS24vQXdBYWxydzZqMEJtZ2h5Z3YvMGtSLzhKV2t2SmhueHJEOW9iYTB1ZFpWeEFSRmdXOEJ6SlFPTzE4VzFSbllQbTNDVk5JRDZlcVRQdFlPb0xxWkcwcjRsbmtQT0s3SDNxSjZqSHF0M0h0NmM4Y0ErNjlCQnlPdkRiRjcrM1ZYcXhUM2k5ZnR5SmVOZFBiMGlXRGpqbTBNRmZzWm0rNW5nV2UrNzZGay9Cam1rdEx0eTVjOEV3Z1g2eDArZmYvMzF0NTkrK29ucmZ1WVEzZzE0Ly8zZk9BUlljT2tRREY0OFVvaUhEdHdrNEVJUkhVMDRhZ3JKMmVNZGd4WVAwNHRvTlBkTW10cmZYRjRRTWkzYk9UYlR4REd6TkRrWGxFUFlUQW1XWnNseXM2a3U1YVJMd1FHMkx2dUlTUU1pSFh2bXZFTWh4c2VEZjBLenk0RkdubWFvMHF4UmtYM0d2dHVVbXZlY3JJWmRCWnQ3Q1piQXY1cDFCT0t2QytXaDk5NXpzZ0V5WDNvZ0oveWE4ODYybEhQU2JHdHYyQ1ByQk9Ma1E4aFJOamg2TWczN3VmcUZ6cFpsRkpqMWkvZmV2Q1Y4Wk5oTmx6Tm5Sbzd5RnFacEdSY29aQ2JNaUlvMDdwcWxvRFduSCtNejB5NGI0aFByQlJjMjcxd1Rya1UzQTRDYzdOclR0emdCMGhTelM3WG1rSTNKcFUxVTMzQzZRRVRrc05JY1BjajlJbmpqREVkSFdqMjJtOFkyZWYzNUp6L0RONjdGSTFlY1poRm9KNnBvTzdBOStGY3VLUEdUZkNNUC9WV1J2S0VmTnp0SzBkYmY4UHZXVGlZcEhSSGNLS1J3UEEzKy9PbmROLzBqUTBMY1g4WXc4MjNITlVGcmRBVTdKa01FZW9ISHNtWXRFU3FQYmRhV29sLzQ5dkswc1FkWWVtKzB3RXp4OEhTZXBmWnhUMnFWYXRHS0M2K3g3TDBkMzRPeFN3OTZ2TnBySTN1eHpUZEJ5R3IvVmVoT2Y2aXgrK2tJcUtNMENMZGZWWURyMlFlUWRLMDh5cTVWNWQwK1N3MSt4bmIyUVFFN3ptaXNTeHJlcDd6U25YMlhSeXJYZjFKbmRtbE8weXpoV0dZU0h0S3I2Ylc5TFZ5VEEvdFAvOVYvWGZUelVSKzhYUGIvK09OLzBUMG16N0YveHZ6RE12b2NCeGVDMWhRdWpzSG1GNGZiZy9kOWZ2Uk8yeWFyOWhnbW9yY285Z1RkSDBVU25ZaGIzalpFTVRIdTl0MUdDS2t1SW05a2JWRGlxanBWcW5YRURGcmZBR3Bta2prRlZMUHdhWEltUWl0d2o1YW8rMllQN0QyTEYxVVFWanh4Nm92QUlLZWU0R3RKeERHM1VMcUN0dHJSOFNKU0w2WkhMRjRRRWVlQTJUZFlqdHgybG9ZU21CQytiVUxQdHNwejRHeTM3TnRwYmlhOEhITFFYK2JWZVB1OWVHY2tGYVl0R1VDT0lpUnhOak50M3cwc3NUc0hvemxKQ2ZHbEVmellPZHVPOU5iZkFTaDllNTdtdGdsQ0wwWm5qemhMak5GNnU1anlkUnQwY041ZDd1clNyS0FkeXlKTHd2V2tNQzNvS0NQT3NqUXlUVFlLRmlFRWtNM2J0N0NHWWt5dm1TWnhhTnBOZ245NTNQS2U1WG93K2dWOXFsc1o4d0V2Ukd2VmhiMDN0czNuRHZacXh5elFRbkRHRW4zOXpBUzZEV2tESTRJenZBS0Y5UFUzVWFlUGdRRGI1cEFoUG12M01RWlQ1ZHJYRE5Xd3gvNWZlK2U2Sk10dEpPbFphVVNSa3MzTys3K2dUR2I2SVROS1MycE11OUorZ0NjOHZRSkFWbFZmRHZ2d2RCcUpDbmg0ZUFTUU4yUjJkWi9zSFhzZ29iMGRYNWdJa21zSWJPelpoQ2I3dHJhbHpCVHpESENyZjBRdVFhc3V2VXZ3T3NUZU5LNTFrcm15ZFJLZ2NSNUNLOXFKelV5UTAvMXFhNmVtQS9qVjhnaTgvU0V4VmJXZWtPWFFFc3d4OW0vak5HRUlXcXpqL2UxdjJ2djQ5dERjMGVZRzdmZCtBUDdZUDMrOUI0Q3YrdkRYUEZuNi8veVAvL212Ly9yZjdWRzBmVXVudGUwVlNWdmp0TkN4UFRRaFhtR2c3NjFOWnR2N1RRSFE3VkErUCtWdEJFN2lJNkVQdVp0cUxJSWV4SzZxdHZGN3QvRVp4YWtlbGhPRnpwSFByT1FZdkRCYVd0VUJ5ZVZ2QWtxeTgyTGJRc2ZRKzdpYVVyOWhuZUtINW1KbzVDOUQ3aFdWYkp1YVZuQkpXcm9qd3VVUDROZisyZWVCK2IvWkJRT2NCNytkLzgxOHpncHZqSHlURHdCOURzdnBvWGxkZ204ODVSOU1qaVB2bGFQV3NYc2hNcWVZa1p5VjRrM2x1N2xNRmxPeTJHenRaWGkvRFppakc0VlBTamd1UXlmMHlXeVg0Tk1Malc1NkhYaHRXQ1FmeHdsQlNpNjlXYWZMSmx3R2ZBeHhsb2J5dXNiK3B2YW9CU1VGMHZJZElOc1kydUJoaUMxeEpRVmhOYUdMdWdocThiSTV4RWJqczBub21UYlZGQ2Vab3Z5TTVBdTV1L0t6a21lbHJaa2laWURMTG9sMkliUG1RSmoreFI2WWRTUStvcDRkMDNuRTNvMHNRN3ZML3lRd0EyVy91SXZoWFZsc1hWSVVLeGN0RHdhOFk4WEZoWVZBeDRMd212OXZmL3NiZjlpSEwvQVFCZUg3NzcvbllZRGxQbDR4VWVDeXlXYngzZDZ4c2dpNmptRzNsSDJURFNDQ3J6YzRPK0p4eVdqSGNQZTBsZXdSTzY1amROc0FlMWpUN3BxdGJTdmtCczh0UStqMHcxVTRTNWZBNGlKdjRsL003aU5xdzNOR2pYRjVzbWZOcnl4NFpEblNscTZMR1ViYlE3dVNSdXc1Z1IwNXUwT2tmclo5SFFPdjdvL1UvMXJxOUp4OW93OEFQaXRzTUNOcGU0SytCWU9qOXU3WWQwZTJBNjlGWnE4RWQrSDJKaUgza1FoMzk0NXBHTHFIK1U0ZzVlM2xxa3NUNVFMbVhPbTlvQ2xRbFVDVG9WWXVnM09LYThRRmxNdGpGN3c1bmxWZWV4TG9pZ1RtQnNhUCs1MXJrTnN0Vm54Y0FzMHhnbzVBRytiTWlGMnpJZjBTQWxpUU9mRDF5REwxSzJWenVqeUVHVXlFakhNbEppeEZsaUhMeXEyRE42WEczbHNHM1FIUnROUWRhaC9hNCtSWkxldFA3MDV6eDgvWTE5aTd2Sy9SbkdQblVaUzhKb0RMcGpWSE5uL3BrdVc0cjM3NnBkNGZmL3dSYjF2YTk1VXhYall1a2YvODUvL3RyLy9iU1ExQm0yeVZaL0c1bXk3WnREYmd5eDZCK3N3MTdWam94NDhvRDlMMFlkbVdvRzlRK0JSUlJ1bWFjTzBWallHYkw4MUgycUw4U01pRG5MWWpSQjFqSEJYZUVhQWtoOTZoYnR5ZVJ2c3ZORWQxNXFaeHJ2V0g1b2trRDV1YUI2ZDV4bUMzWTBseWtmcGkzWTlRdzdPRFBlLzZ6MFordlh5ZkR6WVlTOXAwdlMvSGFmZjFEbmRkT1FQTUlXdThpYXpETHRIVW5BVm5CTEc3SVM1SmhrUXVxb0JXT0psWDl6azQzUFphTzExL2xDWDFNN3dVckM3dG5OUUtzNkRJa3FYTldKUFRLeWtLRnRuS01zUTBLSVVNTDVyVUNsa2dyY09abVNLSWk5dXAvaXY2N3NxUVR0TWN2K0VIYm1WelNwUzY1WWFSSldWZ1VWdEtMVUVFcDUxOEVsTjJFSTgxeEVucTF2QVcrS3ByOFl3dDRMSjd3U2VmUXN3cFhmWnQvMjlSV01rMUdPdnhEdS84ZVI0eitGU0dsV2QyUDRJT3VCMGdaWDlQQWJ1OXRRdjBQQlNsSGIvUVh0emQ1WDJ4NEVWZzV1STh6YTV0RE5rTVhNdjkxdi9Ydjc3NzNYZjl5eUQvL21mNzgvM3Q3M2pxYjNwaVFPTXJRTC85cnYxa2dHLzVzK0hpR1VDVjZBcUpCdDZTMUtYaVlsTlh4ckticmlVQkJTVktLV3pJNERMa2NtdE5ERy8yWmdoZWRXMmsxeUhwdlNDb0hrZk5SdEdaQ2RlSXdnZm5QRGZiYzFvZlNCWndTeDVCMHllMGpKcjhWMEJKVWJwWGtYdmZneUx6cmdkNU1IYWYvTDA4SDdhdzZ3Ri9jdzhBN2FnNlQ2czJPUzgrTjY1bjl1TjdkY2ptOEY5d0VCTnlvVkM4ek1uZHBIT0laMUt4N3U0TTFXT3l1clFnQXRVMi9OLy84YS8rUzQxSU9VcEdFU2ZFK0JrK1NPa2RXUDEwZUhWRVg4b0FrR1VuWXRBUkJibnVTZ3FPd21XNDIrNzlZK04rTDVNUDFoQTZZY3pNc3dlYTlBN3czLzlpc1VDQ2pxL3YzQzQreXJpNXJDc1JDc2tFTEVoNlgyd3ZjNzFZclFTZU14WmpLYUM3aW5YWGd6VUNRV0FpZ09xYTMzVnVwazdLblhtWUUvazRKTXk4TnVhTUlMZWFwMEJ4emJFbjlTWFdlVmErSlBwK3pIWm1kdU85TC9rTVE5T1ZFWW1rN1FkNERGYjJsTmU4L2E5NThpMGd6bTVXL0hyM3I2Zy8vUEdQckNuYkk4RS8vd2xDRkJ2UEEvcHQzN2JjakVOTGFoNXlHckt2VzZReVJNUEprQnhnd1V1Z3UxUnJIVURqTnF6SjZBQ1RieGU0Wm1PT01zZUdkTnk5TUI1UnV3amZ1VlFxVTJrQ2lNZGwwTWJCNy8xUjBobHIybE9HSjJFSVBoWGR5TThHT3VOMXBoeHNNcDlObDdFUDJuTUtrRjA5TzgxWlpEQzNsNkJCZU5Ybk4vY0E0Tmw2ZGc4NThGZG12T0JnTFRPZ1kzYzNuMHY5SldqWjJhc1VKanhpelBXQXNFbUt0bTFjanZpYm1QMVcxeDRIRHNLNS9nWndycmp3Tm96b1crLzlhNnY1TnFUanR1bjJyWWlEdFdwN0JjU21vZm9rS0Z3S29wa3NCZHB6UE9LTmxsdCtTOUEzUldFZS82YmE0UEFKeVA4R3JPWkUwcUVyc25HSExJMlpaZ1h6RDZROHZ0djlSb2F5ekdKdDRDL2Q1ckdnVkVDNm1jSmx6S0NRT2Z5NnVsdWR4dTBJTXV3cDc4WlRJL2tuR2hhQmR6bWlsMUlCSDQrTmhCZm1jdGNzd1F1UmorWFNwTGttZDIwdytacC90VEMxN3VjRVpLMnZGVHl1Ly9QM3Y0MXYrdlF2d2YrdmcvYVAvL2tISVJCKzg5dmpSd3Ivajc4UXpMOEM5dHYyaHdHVkZ5OGJOb2dNaFJSYlhiZnBsWTZpWk05ZUlTV0ZBL3NDOTZ6SFVrNW41b1dSNGtuelNHZUNYUzZZUUlNcFlodW1OaU52YUtETTdtS0hhUzU2OTQ2OE9OYzEzNUVZUTg1MEVremtyb2dJTHdoUklCbGZIUHRnYlMrbTljTE82K2VIclhNM3dHLzNBY0RIVmhwZjNmN2I3ZGMzeDNjejg4ajFoZGladGdSZHRyMXozaGx4MUd3NHJ3VFZ4V2JqMWtMTDEwMzVNaEFHZHozOTlZd2hvclA2UExjN3ZsMVZOS25MamRUaXFBWlg0cUJVS0dRNFZPc1FHK0RjNlNreGxTVW9UaEduUk9NS2NWSWJXam80MEw4YkFNRWNlOU93TXNiTW5KR014VjVHRmM0N2RkOGp0V1lqUnowalpkUjNDUnArVnB2MjllVE00Z081anZ2NDN2VjVwOUc5WC9XNVo5OHZpNVJ6TEY3WnF3QmFiYnpMMXdVTjQrOS8venQvdjU5WVRsNWUvZmZ2OXJPdy8wK1lTS0hBeHVVUGdycTB1T2kySDkrdFZ2OG5ZVnpseEc4aEN1VGoxckFMUTVzSXhUWm9ZOUJQNVF3eGJUWWNlRzE0Z0NuckVJLzBBckZyWjZpMmttaEhmaHh2c21QK0g0OTZFNmJHNGpsL2dlWWMrOVFzZWIvc1puWFdmMEdSMzJCSXV5aG9ZL0FZbnVneUY3dDVGMDJCSmVSbFhhUVVXRElLRjJnT1RGMnZMZ3BRaU5Wc0tFdEtMUXVlQ1VWaEdiVUVaNmxFMGlaOGwyV0hsM0FYa1B3ZEovSGtXK1NpSG5Nc01pdk15RjNCWlloeXllVjBMbUJwOUJkSXpVTVVJUm5GWFpDbE15L0EyaGRkaHRkNXVZOFNsZnl1ejhIWmpzK3NRUnpVT3FFMlZyQWhodmxJU1UwNHIvRmtKQ2hFQ3VBWTltTHJoQkV1SnExdjhOaU4zTThUeHN1YXdMRnB0RFhCT1BWc0VNczNnNlhaRXQxdXd0M2l4RTRkdVpSRlhwRFpTRkFoYmtzc3VHdTJqc2d6MHlLUEdDRjdmTFhna1NnNHBZeTdVVTVrWnFtOEVOQXZCQUtUay9iZGVqWlNOMCs1R3RGZDJUTHd3dmZvYk53bG1MazBOdUhIK2JnTVdZS2w3Q1Vud1dmNUdmdWd6ZEE4T3RKcEhjOWJmTUxwYXBNdFFSQTRvZ2toSEw3K2hEOG5MQVF1SStMMEIvaW1yeFBaaVJRb1dmanVZdmhvZ054Yy9OOHppdE9RdmpXMHY1aWdKOUF1STdPUkhMeXVKeFd3M2UzWldrVkNNTFNWN29DM24wcjBTTlFqekZJMldabHRXdW5iQzVMMk1uc2gwSjFwaDJ3TURrUWIveHd6U2JERGVXUGV1dWlkMTdkTWZSTVRuV1U5NFQvTTJ5eXpmNEhvRHFoNXczMVh3ZFdhbWNic1hhUU15TEdCUFdTV1FCNm9OZmZHVlluSGRTdkticXA3U29HdS81YlB0QlJnM1MzWlRUS080UlMyTWI3MW53QjRwajZOOTVzQkgzQ1pZZ2ttNFF2WXg4bkZOWGNrYzFYY1A0WHB0UEhKNDd2amlHaVhlS0xZakR4aW1LOXdRcFRDRHdZbTJFaFpRSmVVdUVFUlNxeThqazFqRmxHc0JaT0FiUnlhbUNLa1hVSktkeFJUNEZkMTBYeThnRmRsK3VMQmJ6aTBsQnA3NFR4Ni9Vb2xod2dZRTl0T2doUlJOL25ESnVoVUhxQStkL2d0NjlmUzB6em5hRFF6ZXVESHk4YTV6OGFyQjlvLy92R1BMTm0xNGRKcW5wYXY2Y3NHaE1rZjhmejU1NS81aWo4Z0NQcXMrTEVScDBzNFVrb3FMN1lNT0ZuTWFjY09zNG1STnVUU1BjTzcxZW5IL3IzTFZHelNJcHdyODlDNXpWR09Ib2ZQMStmYnVIZnBPZnRyMUY4ZzRuMzZtcnd2aU0xUzA3NlFnbGFxZlREd1F2UFRkVDBEajh6dzV3UEE5UngrZXUvTWdBNnlQTGRuQkFuQTVFaDBDZHFGTVlmSSs1WnQvMHRBbVVpM0hQNTBua0Q5YW9DTFlUMHozMk15dk5TbTJTaWd1b295UWJPaEczWUIzU1hRdGd5V0RidnNFSnpDUnI2QkFMU2FLN1NhalhUQjEyWkJkYlgrd0Y1cW9tQTFHNUxsVFdWNlVYQzZDK09DdGl2Z1F1MDFyaktjMTBqZGpYV3U2K0ZmNkRqUVVqb2U1a1cvRUtRaWhON05BV01SY3phcEYvdlUrcHVRQ3Q5TFVmbnYzZmZZSDB5VTlTdFdMU3Q0WE40NGo5alE1Qy8wODJ6QWN2K0hIMzdJbndweWZlQmxQMUY4eVVjL3BZVFBvaDliSWdxSHBnY0p4K2FKMzJ1dU80WHdobzhUOE9pT0EwRGRiTHZJMFJSeWx6bjBpNnUvc1Q0T3F1NDZqcWlSdkVWMXUrSEg2bisrNEVidVExK2NIckNrSDdRNU1KQm5UV25PeWt1ZGE5cTFGMEVJZWNvOGUvZ3RTM29FZEdIRmNGZTFXWXI3a2UxaWFCZFBsZGZqc0VROTNzMlNGQVV5cFh0Yzc1dGdmajRBZkJPNytiMEhPWjlwT2h2ejlKc1JxbktndkNCenlMc1dyM1M2Q0xrR0Y0YVgyMG44eHgzbVdPTm1uUytyTU5OSndiTkJGMzEzWldlV2lHMW1rZ3ROZFE0cEJycTk0SnFwN0tsVEVKZ21veXh4R1dZS0xDSnp0ei93bk10S3lVTFRPa1o4NTVyRGx3aDhzaTlkWHgzb0NhRnlEeXJCTWlKekNxN3U5VXhhTmtWdVEzUkRQWlpZcGpsd1R0cFhMWXNsbVdQbmtDVnlrV0xKZjFaL0tmSWVZQm1JdnBJSDZDZC9LbWZqSndDY0FscSs4eUtmUmI5Vy9MUjRLWXhXNXdpeEVHQmlzTEh1cDRWQTI0U21FNkVnN2g3R0VGY0t6MENobGE3SnhoMG9JL0dlUWJVMXB3cmtoeFlPRVVJTHhQc05PVTYzZUQ3SCsyQ2xqOGsvWVd5ZEN5UHJ1YUR0WEE2WDRlNlNQM3RCdEkvZ3o5NmxpSmg1SWtsQmM3VUxlWFBjMWRwd2lvRzBuV1l3akFPa1lJK2QwUWZoVmViSWZvaVU3cXVrdjhMZ3g0Zi9pejBBUEY3aWw1bi9YVDM5OHZKbFN2Z1FXWGJ6Y0xjNEJjYTUzU0lBWndROHdaSnhEcm1iK2pXRTlzYWlyZXI3bFNndlJ3M3Nsekl1WFA2dlo4SkQvUS9XbVNPOXFOT1R3RTA5UTlKMitKeGFpRVhNeExnbE02UnprT25TaUJTWU5raldrTGJKeWFmK1pURmFyQ2drNit5Q05MNDlIT1VaY1lpUXZpbzRTN0lVWHR0bnpjL2ZIa3RlWmI5b00ra0Y3YTdySXE5VEpNZGdVVTVPY2RGVjFJNWp6U1JNSWN6eklaeTBPWmNRYXhiQ0k3RVpzdE5KemlQMkx1K3oranVkWFEwN1BqaXBkZFpnYUVORUwvVi8rdWtuVnZ5cy92VmxIc2c2ajhTSHBzY0dXamFsc0NDUEJOQUlYSlpFSXVFeXp1NzRhbERCSVorY0Vic0VUY3U4cWtwOFJVTVRNMXVGQ01udzJkWmd6YmYrekN6SUkrS0VwSDVSS04xcndlSzk3aGJsMG0wbHhmMjBTQlh5eGp0TzNjSysxOTJvSFdIcFRUdFZjejdoWkRkcGIySm5EV20vaWZnSEY1bkhPeU01aEYvc0FTQ0wrQnJ0M2JTKzY1SDk4U2VLYVNrem9JbWF3WUxrMEdhUjlMNng3ZFgvcEtzS1ZiOUs0Z0xjTHNKMVZUMUZCc0NOT1hxbktWbjFpNjB1MmRtVTl3enJGcmdSMzR2RlRDbHhMTkpkclhiSHBwR0JraHJlNW1tbG5FbFBCV1BoYmVNbHBvWEZwb1dMWEc0eCt2eWNxMy9yMkpBRzNTSW9QRnVGSkUzSU9WbkJUbHJBSDlIMFZHVE5Ca3ZGK1V0K3hVWFgrOHRTUEFDSGZVNVZBZDN0SXVmK2NvcGRQZjNwMmF6VFNNRVRmWWwxYzVoWndDTTFJbU9mZDYxVHdsL2M5WFZnTGdCRWkzWEVvZkVLbjFYN1gvN3lGN3FlVlU0ZkhnbGdhazBQaHcydlkrbmlvc3VtS0tRd1pDTUZuc1c3MndLNlM2MU9YVEVQSkM1M2lSUk9wb0RtdklYV3J3UEh1U3kxV1ZNaEQ3WXBZcWxkN0YzQ0xuQ0pXdzJqalBlYWo5ZXhaaDdJNXNEdCtnOWxzZUJiR1M1MU5wU0MydXphSllXUVV6VDROOGZrTHZZcGZDZy9GZlRySkQ4eUZaOFBBTC9PZmYvRlJxV0RiRDYzRTZFWWFIZVJySG1XVGU4YjJubVNVS0c3dm1HcmVMVXMvcm1yNnE4R3VZWXlMdU15TEZqd1hUZjUyRmtTSWM1bG8rdmNYNUJKQ25KcUZuRjV1NkR2VDYyQS9zaERpaVBMOFNGZWxOVEMrWWw5Vy8vZjNPQkZaSUdpb2RGcWEveStpZUFXREp2NWwyRzhWY3RYZytLdldFQm8xZlhONUVhN1hldFk0VDBNRjFERTM2TUc1YnBVNWg5dVkwTFd0OVVNSE5QR3ZsM01JV01wdVR6TW5OckNLVE53M2JYZ05jM2VMTjVnUCtMb3JjY2J0RFIzNUNXdWVTcUhmRk43V2YyTVFnTnh5N2Y4a1dMRnJ6Zjl2T3pYKzM0OUV0Q0t5ZW5BYi9xcUJTVHE5Ny8vUFdXMDU0RCt3RUJYRHdDQTBOaFVJV1JWM3c2TDNIbmRQaEEraHFzdjBOc0EyUVRhOVJyRHNmMnJQamRuYU1taTFIZGJvaHhvZ3pHMmY5eHh0WW1USGlIUDdzZFV3RVpFT2dXZnU5ZTBheTlxMU5rR05uYVQrTDFkajNjdTRHV0lDeXZHS09jNGF6eU5vOEJGTmltWXVXQzhEbktGcjVQNXRxSy85Z2NBanIvM1BRRytyY1BoUFVmTCtWbE8va1NXVjRja3ZGZHB0NGVQSzVTaHFrZ3RvMzM1SitwUWVYSTVNUHpkM0Z3UnVVTmJsdGd6MFlnL2tCRU9SelRhUVdtZjZvN3dkamtlOWF4LzhoQ0VsdFJxUTZGcGhxM3IrM0dWeDJXK2pSWVFHK09pWkx3cGpyL2pSM2xlcWNEcHZ3VE01NW5DWWpsUUV4aTh4S0ZsRFR5Vk9mQTBWdGpwL1Jvc2pkSERwK1FjOVR3Q2ZVVnF4aDJZVW9YbWlUVytSUENteU5oTjY3bmVWWnNLVG5kaDdIUjJsLzluOVhlcGU5NmJNMjdIdk1aWmlFT2dLbS9xL3ZXdmYyWDFyMFU4dVRnMWVOUC8zWGZmUWFQTFdZTVhndzBFNy9mZmZ3OElYLzkwTjRnZUJ1aEtFQ1lHT0J0SmVUb1FUcHVHN2F5blUyNW9lQVdpTm52MUtzU2MyU0RrRm1TQUNLNFBGZXZmR08xaWNnT29jOVpEaGVUb2RTTE81Q3pZV3lnclNYc2IwQjAzQmJYeDhHOG05aXBuQ1NFcWJ5ZDY3VldVZG1zN0RQcU9VRkl1QnZKbTNwdmlkaW1md0tXOVZ0VmhHV0ljcGVkeEV2aWRxMVl5WDJiUGN5aEU4L1l5elllampwMTh5ODk5Y3V2NUlyMTVRcFpwRnc4QTAwNXRnUS9LelRtZTN3RnQ0bnFValZTZHAzVkdHdDhIckF4M2Q3OGt0S3N6ajJkeHhpWFJra2Q1emR1d2RUMmV3RjJpUTJWOG1EK0E0eE44VnBnUlJ4VWRNd3R1L3U0Q3V1TmIwQW95eklkZ0RvWXUzRWFTVmhTS2pyMk9OWEpobUh6ZU1BcDdlWHVCVTNianNiZkhiNlQxdXc0czYzTkxMc0t0Mis5ZVBsQThXRHpjTU9ncS9EUmF6UEVPSzhrTkhUZTJVaGM1ME05QmpKSU9vblg2cmZmOHUvNHRWV3llSDhLbG9KWUxPb05veDd5cTlkSGYvenBTQ0RTVE1vYi9uQmx4UEVhNk9zWlVHRFpHMlJTU2JUdTMyaURiajE5SU1XcHJZMno5TnAvSGpaL3U2VDNtTXBVT1d4eUhMeGlYa0pKZWhGdi9VdVowV3ZDRXV2VXMzb044eEJVeHpkV050MDFtSE9zM1BtbU5ZNHRLK2lIVm1vRlZmZmQzWlp0UWpHZjVJL3hZRDQxdWZzNURhVjcvdzdmWTNrZmRPQTRiYkJXamR2a1ZxYXpXSXNxdGNBamFPSzB3V3Q3Zi9NYVhWdDd4ODI5MThaZDhXTnp6NWw2RnNsby9GUGpITi9vU1g5MXNFWksrSGljTy92Z2xZSFdWamhZbXEvOVdSdCsveGtYeitTNGNzQnNhZTZ1bzhCVWxQRjA2Sm9iM21ITlNaNFZXdzhCRlk4VFpCUTZkSXp0ZC9jU3ZSelVuZkcxRytvV2huZWZnLzhIRHptMUJGbFNzdW8xNWJOcnA5WkFPd3VBZEllZjh5S0gzRHYwM2xidG1QNWRhaGQxOVRNZllhNGZXOU9HeGRBOGxtWEZZRU5nT1dSMmZnOVQzNHhuQXJpWjE5QzExR09oVWFPcVA4bkcwcTBQYnpoazd6cHB4L0ZDVi9CcXgycjR2ZXB3YUZZK2RSdmkzWmxTeTRIZ3Nsb1hrRUhsdnl6dEZISHRDM2RvOXdCU2F1K0k3S2Jqc25PYjBPdERHcVBPWU91UEQyTzZ2V1Jaa042NWxGbmJpNGdGZ0pQNEZQM2R6c1N4cE8wSDl1cmNNZVRlUXd2Zmx2RnZXdHhTZWo2cVhxZnRZdENDSG9HMTc3NHJQVEluc0R2UzdncThtSE04QVErZlkzLy81MitPWGQxVVliZCs0UHF6ZmlJd0xhSk01cDRWTys2c1hUYk9jQTIwWkhoY1ZYZGY2bnpCdEN0b2dXR3BnNTZmQ2s1RDhXL0YySFJGVGlVYnNxWVlsd2hSNHcxbDJKSzVBUFFCSURVRnRkRFUvN29yUTFaaUZZODVUcDd0YVNXYzk1eERPdVlRZ3Bta1NFZmhnYXhINDFua3c5djFwejEyQXlpSGs4bktNQnBFK3A5TG9pNHljdDl4cnk3eVhHZGJqVGYwTTUzMTZkdFAyV29IWXZoM3JGUTdSbzkrUGVZNU1GNHpCbGlLOHZNK3ViVmI4clB2MU5SNUFvbGo2US83cDU1OFJCMUZyZmpHVVpUZi9XWVBzZ2ZENHp2WG5xSENBTGJ0L1VwU1BCeXJNcWNWM2xIRVpLcmlQL21aS3hjOEhwNDRjbk02djlaUzhtVWh2MW9XZ0k1VjVydXk2MlJraHBLb0UzSWJYaUdRNjcxQ3E1SWJuQTNUbm1ZUnhNelZENVFXZnZTcGRrOXNOeU4yeFFqOGsyNkhVMDkrT3NYbGJXQ3UxdTUrb1FQeUxjVFFYNmVaNW01UEFtUXViYVJmSUkxbW04R1h4Uy9EWnlabFNmVzNBdXo4QXZHaUhmVzJ6K0ZudmFnYTA2M1ZwbUM4UWoxOExyTE5LVXJFdmZMeTVOaTFZR2FhM1BzQlczdktpVXVwMGw4dVNiWSt0UzUxWFdGTElKZHcwakhRbGJ0dmlNRzNMcTlpU1N5NHpaLzNaNVZ4cE9GQjUxVUxRYTFGRXBHTkREd2JxR3JTUnltazdpMERub2t0c010TjIxQVVuK1IvQmRzMmxtT3NoYUVKS3lMSXIvVlNia1dYZ2cyQ3F5VlpnWm54UTZpbGE1c3BBY0ZKN0U0MldqWmZaV3ZURDU1MDlHK3Q0dmVIR3F4QmNHTFRnSExyaVFHUERCa0ZCaG1nRTB1V1JBSU9vYk5YVjljU3lHUE1tcWNSVmpIQzExb0dXdUtLRWROY0JVRXVBeHlrRHdxWWl4YU5WTi9YdHdvQy9hVStXT09yYmRwWmhWSjB6ZmxpT0hjQ2R6NkVzMmpIR283Ty9TdHdSZmRLOXEvbTJ0bE5VZkxlNzhEUGduUzNxVkExcGtITlpHS0RISlR1UlphV3p6b3dzQXovQnAyYmczUjhBbnFybWsvenJtNEZ5M3ZwQ3dFanZYZ1Z5TnA0aVorRGIyaDVPR1loeHBlTytDSUZYaGR6ZWo5WDZ2ZzdINmw2WEVhZHIzSm1RTmRpbWNDV2J0ZUhQYnNUV1NMbHU5VzlpQ1lBak5ldFkzRWpWN1gzVDdDMElYWXZEeVFjRGNEWUYvdTUzWExMYWpBb3hibG1NVkxaZDlEUFF0c21wSnR1YzR0cUY3UGdsL010M1ZmQ0Q1V25Tc3NpM0dtOHB3TjIzMHMrYTAzWWlnWmtPTzdzaXNLQm5wYzV2Nk9xSmxDL282enY2WmlLb0RUN0duLy84WjZjekIwVFBBSHhmbnlzRHRyN0V6N2VBZmpkK1lwQmtDMW9LNUxEN0E0TzdOdkRLcHZYV3dTTU8wSndEYWgvSHhjVHl5TWdyUHZac0ZNS1M0d2NERlJPY2VqbDBZVGtEdGpGTVVGNjVkbFdKYzlHbWNsUjFEak5qblNYQmQ3VXZNdG9sdzkxM3JlZEN2TThrZStlNDNxb2U3UysxR1dzdklQWWdZQ1JyYS8vaWc5MVc5cFU3UGg4QXZ2SWRPTXJmblNIOUxCMmtYKzR6eTh1U2hJL0x3WjM2SURzMkJlK0VYYnAzT2s2MGk4NWlraU5CdGZ6RWxiZC85dTQwZDNqV2RnaU8yK0hRakJ0M2h5U1ZnY0IwbmNLR0ZFcFhaTGwyaE1lOXlTd2wyV1hjaGtweWEzeUV0RnNPb0RkdzdPRTlQbWNFUVdtYWFVN2lCazJUSVk2OHlTKzBGM2VmMWJ5dWN5Nmo4RWxYa0RsRVNBNTh4M2taUGhjQTh1dzhQTXRYVWtWbHF5ZDJFRDE1TWlJeFdmM2o0cnM2clB2MTFoK0VqWCtvaTVZWC9Ed2I2Ti9sMWN0Ky9mNHVzV3dFeXFERml5YXRrb0tneG5iODhtam5hUm94Y3o2WFhZRjJwWUd0elVPd0dyaFR1QXg3MDBobTR0aHlCUUhzZkNBM1FROEFTWmF0dkVXelNYU05ndS9Jb3JrR1I4MklYZGZHSExoSEhsdXhYdWQ3M3F0NlhKV041NVhlSm1JY1AyMzFyMklHc2poNnZSL05ITWI5WXQ1cHBCdlptK0x2Ri9mMU16NGZBTjU0SDI0T3JEZk84bjV5dS9wOURyOCt0VktrSUVoMk0wVnh1YndkUDJQZjI4N2FzaDV3TnJMekFOQitSNjIvVklNQW1EU1hGK0I1ZDVHQ09USVNWRlJidUxUYjV4bFlRdWppM2FVMk9aVU5ZaFJjVWlMTVNXZkVVcW16cEJVdytZaklTOHRmUDFkVkVMeUJsQVdIK0NLb0Jtd1piajFuNlNwbG1Jd0JyWGhuSlBsUDJWbkRVNEVQa2owaDVndlpIVGVsSHNnRnNjN0xqS0pXdWkvVHpLaXlwK3p5K3Q0RUdhem00VkFHaTNLT0pXMTBXYkpqZS9WUGwrVSsyNS8rOUNlOG92V1ZmUHZUbkNCc0NMS1JpRTJHbEhGaGdOQVNlSFRIQ3dKMTFVSW9tM0VkeENhZmVCZFBYTGJTRlJyaUJYRlhlZDB0aHJxMHd6aUdNN29IamdnRExGTFpWVlZDMUJvcGhwVGhnRHNMWGVNS0wxMkJ5eGFtVXZRUW1ucFplQVJaS3I4Sk9HZVg3QTdmSmZVMG10QU9PMjVGMDNoTmVJSFJkOHJOTWRDUzNPNHBrRXdxcjhvRGw3RkxuWUhpeklqd2E1MmQvdVA0TDVYMzhRcGZ4bnozQjRCZjY4UzliTHEvbmFnOElaZkhBR0J5TG1aRzRVK1JMOVRlMWpYWFZnYkw0b0FyYnk5ZTR6MUd2UndPcjdiQmk0SUtUbEN4SFdrdnd5RmdMd1Z4U1hBcHV3U2xwcVMwdnBGTDMyV3d1SkV0WFB5TE10SmxFV2VSa1ZJN1FhM2FlK1ZRanVVcmd2d2hQc2wydXpXNFpTK056Q1ZOaFNqdnNzMlFKZUZMZ3J0aXJrZlI1NjJ1ZUpabFN6L1ZabVFaK0NEbytwWEMzUWZEWDB6TFJFcE55NmJqV1F0NmlXdjV6ckwrNTU5LzVvOTFzdWdubHRPWmh3SDQvLzNmL3czTlMzd01IaUVnME9MRnBTVStObnk2NE1UU1ZRRVloUEJGSU9TVVRsR3lzeTI0dXJTemtUcnlncGlXWHVzWGIrYzNad2tIOFhXZ3VSdEJuOExiYVVpSW9ySVZhWjd6SS9pNE1MWmVjdEsrcXdCQkdjVjhwQTMrR01ZSUM5ZUEzdWZ6bFlrOFJhL1VlZkhnS0VDcDA1RGFkVWw0RmVJaExHdVlSV1prR2ZnSlBqVUQ3LzRBOEZRMW4rUmY1UXpvVlA5MW5NQWFSYmw0TFljR2g5Zi80d0dnN2RqV0g5ZE5YZzR1OW5YelZuZ1d6eHBzWTBpOHBSMDNSU1B5R3Nkd0pjcVhVVUxVU2gvYmhwam1HQWNwTG5Oa0xKbGFXRGk3Rld3VUVmanBrazNMaG43WkhBdXVCWm5TMFlXUEY4TWNJZTVlR0k1UzBndm1CM1NWbWhuLzZrQmNGOTdJZmQ1bXQrZGtkbDBqS2ZoaWtlc1U2Zlh3ZFR5UVVVbFo2SXZHdXB6WC9IeXhoNDBGT2pRUVhCQTRsekZZeW9Qeis3dmlLOXl0bHZ0eTBTb1dRNnQvdW9TcmkzSjdsb2pqZVo0S3lWb053NGxrdTJ1bURVVzVhNmJWaW1zSThua2NFUm5DVHl3VU9JbzhqeHJUTUdRN1JkUHFCOHlJdWpualpsb2lzaVZvRVhYbkxITmdRVkJ3bEEybU13L253TS9vSlhpNnYyR3JUMmtiZjg3dGJqNllSdTFFRXpyaTNxZnh5OHhBZXdCZ1QyakQxcjZrVy9iVzNlb0l1Y3Q1SzhLRHRTVk41U1ZTaXJsTGdKOWpuS1VPNzNsaExCbU9ib29BelRycnNFQ0xBcDRaQ2ZxTmFlYXplUjE0SXhmMXo0U1NvblNMenJQZE9aMFVkbGwyL0YzZUhWKzdkK2ZOR3NTaEhoOFJJRnFBWmxMODRHYTFxRFBpSkVydDdCOVdDM1JKY0VTalpSRmpza0VqVHRyQ3U0QUxFem1adG1XSW9NVVFpQlV3Y0xGSk1LTVNTZHNjb2lRbEE5dUcrT3JTbG5EVHFCK1hOc25pc3RlSURWeUVhQk5Oc2JKcFpZanZWamhNRVBIMXhsZmtEQkhINlREa05aNWs2MHZXWkhlVE1BY21ZdjBVa1k1cGhaTVhibk15WTlvN1FtcG1PcytQQ0xSU3lPTkhpRnIyQ0J4dG1YZG5zNFlXbWJXMW96Q2tveWlVdmFPeDhkSlNBQ0JMK1o5KzRrOXgvcXlWdXRmckJPSlZrYlJTaG95QlN5SXlTbXVDY0poczJPQ2FDbWtDZ3RBcW96aGtoS2xOdG5BUUcvcXRBbkVNSmtGZ3VncFpMcktyZ0tYWEloaXlvY0hQUkFyVWc4SGc2RkxVUENLTDA5dmpsR0ZlRFNabktCeE9kODB4QWdNdzU4cUNHRWw3QkYrRzdFUlNVSFlyYnd4NkdWVkFkNWZqbXZXTm1DOWsxam5xNlIraklrYzNvNGNjMTArSG16RWpkc25JQWlBUC9uRTZqKzQ1Ly9EWkVzY0dzV3kzMjRrcDBDNkhtRGtieVZGZ0l2Q2pleHg0Z2N4NkwwZFNOdTNIRlJXMUcvNU8wL3lTYU1lZmNTR2ZQd0VvRS9qWmZiTVo0QWpiSGFadmx1TkRDbm5nV2xybEFvdDdsMHJtUm83Qi9JaDhoTFNQZHZXUzYvSEJFU2V5QlgyRDlDNlFZYWI0Ujk3SVpINWdDek4xSkNLRUJVMjY1cVR5THJOSXB5UmJnb1Z6MFNXUjY3R05vVTNWWmtsNmc0dlhVVEtTUXpvSXRJQmF6OGsyanBHYnlHcUZFNWhka3czYXdLWFVNOGZJemtBa1k1ZWFCY3p1VW5aSHlFUVp5SEVvVnhLd3RmQk5OUkY0czQ2aEtMVjAyY1JIV1NGdVdic0Rpa1ByRUszYVhZbnhIMy84VVMvNEVRUmtrNllNODIyNFFoc3puN3ptU3ljUnV4UllYT29hM0JsM2NXVXhMWk5pQzMrZ2JRZk1rdWI1TDhycU1qbUttcjNnOGdibm5DNzRZMkpQc0VoNWRncys1L3BvU0J0NzFQUUwxbDhxaWFLZU50OThGSzIyZnZ5TUkrSHBrajREWGp3RG53OEFMNTY2ejhCakJ1WXJnazVwM0RhK3RjazZCNTcva2szTWdnajV6N0tBOUp2aGNjdG8zYkg1M3BtWHlFNDRPZUpDRU1jTEdpTWlISG03dUZLSXJ4Wk9NYktNVVU3N0xMaGtML0NNSllYRFpUaXBjU1BXVENUVlpNdGJ5aEJvRjB5TEpDZ0ZwYmFDUVJBMno2ZHhETG1FbEJhWGtLeEJJYlF1WTRrbzBHMlNEZTRNNXhXQldDRVdLVjNSWnJEbzdOSXQ4WXhsM3B3YXNsMStjTEpYTHVFQ2VXV093ZEtUMW56UnJQT0hQL3dCV1FqYVhBK3hCUExPbm8wVnY3cHcrQ3M5WHZvandnWklLeEYxVmFkd1dtdktFS0lRSVdtWDhVSklCVEVMdjRna0orMmtXY0dHdkxSR2hxSDYyeGdacFVDMUpqZlBjYmpLYUNFRE9ZUnpGQWQwZkp6SE9TRmxjaVNTTGNKZCsyQjIvcmtMaHZLaHllVDEyR01INFpYVW9EM3hlYmYrSjdSV1ZCYzJHeXY2RjhWY0VsblRWaEV6Y2xGY0lmZHVQVUdXNGZ2NVArbEYvSFI4V3U4MkE1OFBBTzgydGQrR2NEbHBTNWM1RUhMMy9KOER2Njc1bTRkcHhIZXpISkZ1ZzBMT0syaTg2VHhjNDAyenVtaVdtWFFXQ0hJbFFiYWl4SVJtdzE2Slo0dExVUWt1YmRNa095K0FURmlHQzFSc1ZpNEVyMEVqUzUyN3RFSlFuUWF0eVhvUjBEaEpZYXAxTVhTOTRUV09BUzZwMlJCZTJndWFheWdoY3hlbWRSVGxMbVRySkNpUlI1Q1NiZzVKcWRsTGRtM1E4R0tMTDBPdG90U2FRSmVOZGI4TVdnTHR0YUdWUFMwYis0N0ZQUnRlODdIWmxCMlFueGp3UXg0MlBWRkFKcEFXUklXVlZqb0NyU08xd3BRWHFZS3JxK1BFZ2FjczF1cVlXWUl0dk12SmE0NVN1RFUrakdNMnlOUC91emxFaDlRUjNXczVDQmFjQnpXVTJ4NnhiWDRhdDE0T2dPYlVYSW1XOWkwWi93bllzcUh3ajltV0lrdjNTOVo4bmZyYW0zWE96STRjWjVhWU15Y1ZpdDNKeC9GUVhKL2RMellENjZ2ZUYwdi85U2JhSCt2MTZxa3g1bVh1STR4NlYvOXI2dHhwTWw1Y3IxRitmTVl1YW5oYzVNWE1lWmp0aGpyK3FSVEphaDVZV0RwTHYrbjIzdTJmYVlNNUQwZEltY3c1Yjk2ejhiSXBYZUl1QUVNTDRrU3dpU3FKVE5qaGlqSU5ZeDdGTENzMUY2a29pUmk4eU9oMEpsdEJTTWJLOW9Jc1haRHBhck1tWFd3V2w2a0pVNXRwR0FOcm40b1NXRGpadGMxK0lXckp0eFJlMnlMUGZBbENNMEdJdXphRUx4Vm1qc25YeHB3WFJKczE2VEpZelQ5Z2JoSVhRUWNxTmt3NHVJeHJ5UTdCSEZ6YVhKNUNKQzRGMlNMb3h3S0VBUElrd0MvNFNncXZBa1dEWUVFTUh6TUpZaGNhaUVRc2haRzJDVTFubkpnN1FzVmJ6Rm1rdlJwTGQ1NWVNMFdqbFNIYTNPSmw1eVErRDIxb0hqUGo2NWlWWnlNRnNhVlpsQjFsOGtCdWRzRUF6ZnBZeGx6ZURpbkRmNDlockZPUDZaeTlGelYwOG9qc1BJZlB4b1VPcmpKd3drSFVPdENhUmo2TmQ1cUJ6d2VBZDVyWWIwNjJuTFRxNXRrK0kxOXlqa3A1VG4yc2k5MGZSbFkrc1BhNTB6R25Eck1ucUtEWnhSZy9vd2ZXWmRIK1VnK0NRcXdzdzN3dGFBRFpMS1d1eE0xVVZ5NHowN3UwU3ozbW9DUEJncmhiakJ4RkJrcEg1RnZPZW8reGNNa1FBdW4yd01hM3kyV3p0Tk4vT0pVRlErczl5R3d3WmFobDBUbG81NjRSelRoZDFvaHNHTXcvclZ3eTFPSTFIOE1jOGVscUU4YzEwRlhsZUQyRTVNak8xbnlCQktZWGUwWjJZQVo2b1p4Z0JoWlpsdGRVd2diT2hvRUNHN1lWN0FXRXoxU3o4YjBkdmRFWFRiSFlUV3RzZFBYbUhpOWJuL3MyK1d4K1lDUFhvTGNWekE4Ly9ORHp0d1pjSVNTbHEwU2xSV3FKRUdzOE9kcjd1QVRTeWpBNVhkaFdNZTNheUdxdW1jcm84a1dtYkVmSkxraU9xNVUzaHFrb3g5b1lXVnBkQ1JhK2FLZ3g2eERkTFZIQ1UwZkl4MmxMYlJySjBZNjVOZ2ZEKzNjNTB2Y2JsMnRRaXRhbHlsRk44VjZVTVpnajhuWXZPM0RRREZUREIxSjFkRUc4S0loelYycFdlRVBrbDgzK2hnTjVVT3J6QWVEQmlmcWtiV2ZnNHB6eFdiME4vcFU2UEhCUGpxOXhScTZIYmxwZUZtVXJzQk9PV3ltMjlLMnBjSXNJTHh5cFpWdkM2Y3ByL0VGRDlTUTVLMW1XSWJKcG1WZGdSL2hoQ3NSajFLblB0NFdGQjduZDhQeUdVb0w5TnRnWGtmK2lMVkw5RHRudTRzMlJLL1VqZHR6Z25SZGNMclZPalNHa0piaU5TdG5paGVubG8xS0FzRGtkQnJJZ3RHeUoyMTd5RlZnNFJVR0JCWFRJWFlQQVdVR0lXZzFOeTI1YS9mSnV5b3JHMGg4d0E3SFpqS01qS1VDWStuT2NYcjRMRko5V1pQTkJ5R3VjY01ybVVRR1IzVmVBUENGRXFWcVBWRjFhdXpCNGxwaHhJeVk3UkM1M1o4T3hkaG5KV0h1TE1hbytnelFpMDA1SHR6eGVlbkJNSzhaMWw5alVjWmRqdHVEVzZjbXZHZ0loSy96eEtDdHVRaEEwNVZXRzlXZmpWYnB2RWV5U0VFdGIya0xLZnRtbExlRzkrNUlaSERwMS9nZSt5LytKdi9FTWZENEF2UEdFZm10eTh4a3J4QmNVdXJZdkptZldFZm1SMkF2Wlg5Q2xnWHMyeWp4NFhHWGc3aGFDdTdzUldWOEtMSHFXek5SM0NNeWliOXBTWkFiTmwwNVJLM3lSelNsZGtRRk5DQVR6WmtGY2xPZXVkV3cwaVNHT2NSdkNtM3YrSWFjVGc2REZwZWJUZkdwVGVZa1FKbEFwcENMRXVBM25rSUlYam5TMWlZQzlEUEdTMXpybUYwUmRpeFJCdW9WQTErQXNkZUVTZVNhUU9rRzZyT2FaVDVWRWF3TUZiSzNYTmVIZGVYNWxTQVRDRlVJM2xiTUEvMTEvbU9JcmhJVytOQlZMdU5JcGRtNFZCYzBHSE5sU0tHMHFtSWFoNGRnTHNxdmNIQmt6clJDdXBSU2VsVmhXcnRUZjJjNllJV2xiMDRZemdzanViWnZHekdKbEc4WGJvNDRReDlwdzFNYzN5cmcrZnNGemhic2g3UEJaNFJwNUs1M3JMSi9lbklIL0Q3MXBlRm1FdVdnQ0FBQUFBRWxGVGtTdVFtQ0NcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCBTcGVja2xlUmVuZGVyZXIgZnJvbSAnLi4vLi4vU3BlY2tsZVJlbmRlcmVyLmpzJ1xyXG5pbXBvcnQgeyBCbGVuZFBhc3MgfSBmcm9tICcuLi9QYXNzZXMvQmxlbmRQYXNzLmpzJ1xyXG5pbXBvcnQgeyBBc3NldFR5cGUsIE9iamVjdExheWVycyB9IGZyb20gJy4uLy4uLy4uL0lWaWV3ZXIuanMnXHJcbmltcG9ydCB7IFByb2dyZXNzaXZlUGlwZWxpbmUgfSBmcm9tICcuL1Byb2dyZXNzaXZlUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IEdlb21ldHJ5UGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9HZW9tZXRyeVBhc3MuanMnXHJcbmltcG9ydCB7IENsZWFyRmxhZ3MsIE9iamVjdFZpc2liaWxpdHkgfSBmcm9tICcuLi9QYXNzZXMvR1Bhc3MuanMnXHJcbmltcG9ydCB7IFN0ZW5jaWxNYXNrUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9TdGVuY2lsTWFza1Bhc3MuanMnXHJcbmltcG9ydCB7IFN0ZW5jaWxQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL1N0ZW5jaWxQYXNzLmpzJ1xyXG5pbXBvcnQgeyBWaWV3cG9ydFBhc3MgfSBmcm9tICcuLi9QYXNzZXMvVmlld3BvcnRQYXNzLmpzJ1xyXG5pbXBvcnQgZGVmYXVsdE1hdGNhcCBmcm9tICcuLi8uLi8uLi9hc3NldHMvbWF0Y2FwLnBuZydcclxuaW1wb3J0IHsgRGVmYXVsdFBpcGVsaW5lT3B0aW9ucywgUGlwZWxpbmVPcHRpb25zIH0gZnJvbSAnLi9QaXBlbGluZS5qcydcclxuaW1wb3J0IHsgRWRnZXNQaXBlbGluZSB9IGZyb20gJy4vRWRnZXNQaXBlbGluZS5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBTb2xpZFZpZXdQaXBlbGluZSBleHRlbmRzIFByb2dyZXNzaXZlUGlwZWxpbmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgc3BlY2tsZVJlbmRlcmVyOiBTcGVja2xlUmVuZGVyZXIsXHJcbiAgICBvcHRpb25zOiBQaXBlbGluZU9wdGlvbnMgPSBEZWZhdWx0UGlwZWxpbmVPcHRpb25zXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzcGVja2xlUmVuZGVyZXIpXHJcblxyXG4gICAgY29uc3Qgdmlld3BvcnRQYXNzID0gbmV3IFZpZXdwb3J0UGFzcygpXHJcbiAgICB2aWV3cG9ydFBhc3Muc2V0TGF5ZXJzKFtcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5ULFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX0xJTkUsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5UX0NMT1VELFxyXG4gICAgICBPYmplY3RMYXllcnMuUFJPUFNcclxuICAgIF0pXHJcbiAgICB2aWV3cG9ydFBhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5Lk9QQVFVRSlcclxuICAgIHZpZXdwb3J0UGFzcy5vcHRpb25zID0ge1xyXG4gICAgICBtYXRjYXBUZXh0dXJlOiB7XHJcbiAgICAgICAgaWQ6ICdkZWZhdWx0TWF0Y2FwJyxcclxuICAgICAgICBzcmM6IGRlZmF1bHRNYXRjYXAsXHJcbiAgICAgICAgdHlwZTogQXNzZXRUeXBlLlRFWFRVUkVfOEJQUFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgdmlld3BvcnRUcmFuc3BhcmVudFBhc3MgPSBuZXcgVmlld3BvcnRQYXNzKClcclxuICAgIHZpZXdwb3J0VHJhbnNwYXJlbnRQYXNzLnNldExheWVycyhbXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0gsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9MSU5FLFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfUE9JTlQsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVF9DTE9VRCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1RFWFRcclxuICAgIF0pXHJcbiAgICB2aWV3cG9ydFRyYW5zcGFyZW50UGFzcy5zZXRWaXNpYmlsaXR5KE9iamVjdFZpc2liaWxpdHkuVFJBTlNQQVJFTlQpXHJcbiAgICB2aWV3cG9ydFRyYW5zcGFyZW50UGFzcy5vcHRpb25zID0ge1xyXG4gICAgICBvcGFjaXR5OiAwLjUsXHJcbiAgICAgIG1hdGNhcFRleHR1cmU6IHtcclxuICAgICAgICBpZDogJ2RlZmF1bHRNYXRjYXAnLFxyXG4gICAgICAgIHNyYzogZGVmYXVsdE1hdGNhcCxcclxuICAgICAgICB0eXBlOiBBc3NldFR5cGUuVEVYVFVSRV84QlBQXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzaGFkb3djYXRjaGVyUGFzcyA9IG5ldyBHZW9tZXRyeVBhc3MoKVxyXG4gICAgc2hhZG93Y2F0Y2hlclBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU0hBRE9XQ0FUQ0hFUl0pXHJcblxyXG4gICAgY29uc3QgcG9zdEJsZW5kR2VvbWV0cnlQYXNzID0gbmV3IEdlb21ldHJ5UGFzcygpXHJcbiAgICBwb3N0QmxlbmRHZW9tZXRyeVBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuUFJPUFNdKVxyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWxQYXNzID0gbmV3IFN0ZW5jaWxQYXNzKClcclxuICAgIHN0ZW5jaWxQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5TVEVOQ0lMKVxyXG4gICAgc3RlbmNpbFBhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcblxyXG4gICAgY29uc3Qgc3RlbmNpbE1hc2tQYXNzID0gbmV3IFN0ZW5jaWxNYXNrUGFzcygpXHJcbiAgICBzdGVuY2lsTWFza1Bhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LlNURU5DSUwpXHJcbiAgICBzdGVuY2lsTWFza1Bhc3Muc2V0TGF5ZXJzKFtPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSF0pXHJcbiAgICBzdGVuY2lsTWFza1Bhc3Muc2V0Q2xlYXJGbGFncyhDbGVhckZsYWdzLkRFUFRIKVxyXG5cclxuICAgIGNvbnN0IG92ZXJsYXlQYXNzID0gbmV3IEdlb21ldHJ5UGFzcygpXHJcbiAgICBvdmVybGF5UGFzcy5zZXRMYXllcnMoW09iamVjdExheWVycy5PVkVSTEFZLCBPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTXSlcclxuXHJcbiAgICBjb25zdCBlZGdlc1BpcGVsaW5lID0gb3B0aW9ucy5lZGdlcyA/IG5ldyBFZGdlc1BpcGVsaW5lKHNwZWNrbGVSZW5kZXJlcikgOiBudWxsXHJcbiAgICBsZXQgYmxlbmRQYXNzID0gbnVsbFxyXG4gICAgbGV0IGJsZW5kUGFzc0R5bmFtaWMgPSBudWxsXHJcbiAgICBpZiAoZWRnZXNQaXBlbGluZSkge1xyXG4gICAgICBibGVuZFBhc3MgPSBuZXcgQmxlbmRQYXNzKClcclxuICAgICAgYmxlbmRQYXNzLm9wdGlvbnMgPSB7IGJsZW5kQU86IGZhbHNlLCBibGVuZEVkZ2VzOiB0cnVlIH1cclxuICAgICAgYmxlbmRQYXNzLnNldFRleHR1cmUoJ3RFZGdlcycsIGVkZ2VzUGlwZWxpbmUub3V0cHV0VGV4dHVyZSlcclxuICAgICAgYmxlbmRQYXNzLmFjY3VtdWxhdGlvbkZyYW1lcyA9IHRoaXMuYWNjdW11bGF0aW9uRnJhbWVDb3VudFxyXG5cclxuICAgICAgYmxlbmRQYXNzRHluYW1pYyA9IG5ldyBCbGVuZFBhc3MoKVxyXG4gICAgICBibGVuZFBhc3NEeW5hbWljLm9wdGlvbnMgPSB7IGJsZW5kQU86IGZhbHNlLCBibGVuZEVkZ2VzOiB0cnVlIH1cclxuICAgICAgYmxlbmRQYXNzRHluYW1pYy5zZXRUZXh0dXJlKCd0RWRnZXMnLCBlZGdlc1BpcGVsaW5lLm91dHB1dFRleHR1cmVEeW5hbWljKVxyXG4gICAgICBibGVuZFBhc3NEeW5hbWljLmFjY3VtdWxhdGlvbkZyYW1lcyA9IHRoaXMuYWNjdW11bGF0aW9uRnJhbWVDb3VudFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRlcHRoU3ViUGlwZWxpbmVEeW5hbWljID1cclxuICAgICAgKG9wdGlvbnMuZWRnZXMgPyBlZGdlc1BpcGVsaW5lPy5keW5hbWljUGFzc2VzIDogW10pIHx8IFtdXHJcbiAgICBjb25zdCBkZXB0aFN1YlBpcGVsaW5lUHJvZ3Jlc3NpdmUgPVxyXG4gICAgICAob3B0aW9ucy5lZGdlcyA/IGVkZ2VzUGlwZWxpbmU/LnByb2dyZXNzaXZlUGFzc2VzIDogW10pIHx8IFtdXHJcbiAgICBjb25zdCBibGVuZFN1YnBpcGVsaW5lRHluYW1pYyA9IG9wdGlvbnMuZWRnZXNcclxuICAgICAgPyBibGVuZFBhc3NEeW5hbWljXHJcbiAgICAgICAgPyBbYmxlbmRQYXNzRHluYW1pY11cclxuICAgICAgICA6IFtdXHJcbiAgICAgIDogW11cclxuICAgIGNvbnN0IGJsZW5kU3VicGlwZWxpbmVQcm9ncmVzc2l2ZSA9IG9wdGlvbnMuZWRnZXNcclxuICAgICAgPyBibGVuZFBhc3NcclxuICAgICAgICA/IFtibGVuZFBhc3NdXHJcbiAgICAgICAgOiBbXVxyXG4gICAgICA6IFtdXHJcblxyXG4gICAgdGhpcy5keW5hbWljU3RhZ2UucHVzaChcclxuICAgICAgLi4uZGVwdGhTdWJQaXBlbGluZUR5bmFtaWMsXHJcbiAgICAgIHN0ZW5jaWxQYXNzLFxyXG4gICAgICBzaGFkb3djYXRjaGVyUGFzcyxcclxuICAgICAgdmlld3BvcnRQYXNzLFxyXG4gICAgICB2aWV3cG9ydFRyYW5zcGFyZW50UGFzcyxcclxuICAgICAgLi4uYmxlbmRTdWJwaXBlbGluZUR5bmFtaWMsXHJcbiAgICAgIHBvc3RCbGVuZEdlb21ldHJ5UGFzcyxcclxuICAgICAgc3RlbmNpbE1hc2tQYXNzLFxyXG4gICAgICBvdmVybGF5UGFzc1xyXG4gICAgKVxyXG4gICAgdGhpcy5wcm9ncmVzc2l2ZVN0YWdlLnB1c2goXHJcbiAgICAgIC4uLmRlcHRoU3ViUGlwZWxpbmVQcm9ncmVzc2l2ZSxcclxuICAgICAgc3RlbmNpbFBhc3MsXHJcbiAgICAgIHNoYWRvd2NhdGNoZXJQYXNzLFxyXG4gICAgICB2aWV3cG9ydFBhc3MsXHJcbiAgICAgIHZpZXdwb3J0VHJhbnNwYXJlbnRQYXNzLFxyXG4gICAgICAuLi5ibGVuZFN1YnBpcGVsaW5lUHJvZ3Jlc3NpdmUsXHJcbiAgICAgIHBvc3RCbGVuZEdlb21ldHJ5UGFzcyxcclxuICAgICAgc3RlbmNpbE1hc2tQYXNzLFxyXG4gICAgICBvdmVybGF5UGFzc1xyXG4gICAgKVxyXG4gICAgdGhpcy5wYXNzdGhyb3VnaFN0YWdlLnB1c2goXHJcbiAgICAgIHN0ZW5jaWxQYXNzLFxyXG4gICAgICBzaGFkb3djYXRjaGVyUGFzcyxcclxuICAgICAgdmlld3BvcnRQYXNzLFxyXG4gICAgICB2aWV3cG9ydFRyYW5zcGFyZW50UGFzcyxcclxuICAgICAgLi4uYmxlbmRTdWJwaXBlbGluZVByb2dyZXNzaXZlLFxyXG4gICAgICBzdGVuY2lsTWFza1Bhc3MsXHJcbiAgICAgIHBvc3RCbGVuZEdlb21ldHJ5UGFzcyxcclxuICAgICAgb3ZlcmxheVBhc3NcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnBhc3NMaXN0ID0gdGhpcy5keW5hbWljU3RhZ2VcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSVZpZXdlciwgVXBkYXRlRmxhZ3MsIFZpZXdlckV2ZW50IH0gZnJvbSAnLi4vLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgU2hhZGVkUGFzcyB9IGZyb20gJy4uL3BpcGVsaW5lL1Bhc3Nlcy9TaGFkZWRQYXNzLmpzJ1xyXG5pbXBvcnQgeyBHUGFzcyB9IGZyb20gJy4uL3BpcGVsaW5lL1Bhc3Nlcy9HUGFzcy5qcydcclxuaW1wb3J0IHsgQXJjdGljVmlld1BpcGVsaW5lIH0gZnJvbSAnLi4vcGlwZWxpbmUvUGlwZWxpbmVzL0FyY3RpY1ZpZXdQaXBlbGluZS5qcydcclxuaW1wb3J0IHsgU2hhZGVkVmlld1BpcGVsaW5lIH0gZnJvbSAnLi4vcGlwZWxpbmUvUGlwZWxpbmVzL1NoYWRlZFZpZXdQaXBlbGluZS5qcydcclxuaW1wb3J0IHsgRGVmYXVsdFBpcGVsaW5lIH0gZnJvbSAnLi4vcGlwZWxpbmUvUGlwZWxpbmVzL0RlZmF1bHRQaXBlbGluZS5qcydcclxuaW1wb3J0IHsgUGVuVmlld1BpcGVsaW5lIH0gZnJvbSAnLi4vcGlwZWxpbmUvUGlwZWxpbmVzL1BlblZpZXdQaXBlbGluZS5qcydcclxuaW1wb3J0IHsgU29saWRWaWV3UGlwZWxpbmUgfSBmcm9tICcuLi9waXBlbGluZS9QaXBlbGluZXMvU29saWRWaWV3UGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJy4vRXh0ZW5zaW9uLmpzJ1xyXG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHRlbnNpb24sIEZpbHRlcmluZ1N0YXRlIH0gZnJvbSAnLi9GaWx0ZXJpbmdFeHRlbnNpb24uanMnXHJcbmltcG9ydCB7XHJcbiAgRGVmYXVsdFBpcGVsaW5lT3B0aW9ucyxcclxuICBQaXBlbGluZU9wdGlvbnNcclxufSBmcm9tICcuLi9waXBlbGluZS9QaXBlbGluZXMvUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7XHJcbiAgRGVmYXVsdEVkZ2VzUGlwZWxpbmVPcHRpb25zLFxyXG4gIEVkZ2VzUGlwZWxpbmVPcHRpb25zXHJcbn0gZnJvbSAnLi4vcGlwZWxpbmUvUGlwZWxpbmVzL0VkZ2VzUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IERlZmF1bHRFZGdlc1Bhc3NPcHRpb25zIH0gZnJvbSAnLi4vcGlwZWxpbmUvUGFzc2VzL0VkZ2VzUGFzcy5qcydcclxuXHJcbmV4cG9ydCBlbnVtIFZpZXdNb2RlIHtcclxuICBERUZBVUxULFxyXG4gIFNPTElELFxyXG4gIFBFTixcclxuICBBUkNUSUMsXHJcbiAgU0hBREVEXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFZpZXdNb2RlRXZlbnQge1xyXG4gIENoYW5nZWQgPSAndmlldy1tb2RlLWNoYW5nZWQnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmlld01vZGVFdmVudFBheWxvYWQge1xyXG4gIFtWaWV3TW9kZUV2ZW50LkNoYW5nZWRdOiBWaWV3TW9kZVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBWaWV3TW9kZU9wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMgJiBFZGdlc1BpcGVsaW5lT3B0aW9uc1xyXG5cclxuZXhwb3J0IGNsYXNzIFZpZXdNb2RlcyBleHRlbmRzIEV4dGVuc2lvbiB7XHJcbiAgcHVibGljIGdldCBpbmplY3QoKSB7XHJcbiAgICByZXR1cm4gW0ZpbHRlcmluZ0V4dGVuc2lvbl1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfdmlld01vZGVPcHRpb25zOiBSZXF1aXJlZDxWaWV3TW9kZU9wdGlvbnM+ID0gT2JqZWN0LmFzc2lnbihcclxuICAgIHt9LFxyXG4gICAgRGVmYXVsdFBpcGVsaW5lT3B0aW9ucyxcclxuICAgIERlZmF1bHRFZGdlc1BpcGVsaW5lT3B0aW9uc1xyXG4gIClcclxuICBwdWJsaWMgZ2V0IHZpZXdNb2RlT3B0aW9ucygpOiBWaWV3TW9kZU9wdGlvbnMge1xyXG4gICAgcmV0dXJuIHRoaXMudmlld01vZGVPcHRpb25zXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX3ZpZXdNb2RlOiBWaWV3TW9kZVxyXG4gIHB1YmxpYyBnZXQgdmlld01vZGUoKTogVmlld01vZGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdNb2RlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICB2aWV3ZXI6IElWaWV3ZXIsXHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyaW5nRXh0ZW5zaW9uOiBGaWx0ZXJpbmdFeHRlbnNpb25cclxuICApIHtcclxuICAgIHN1cGVyKHZpZXdlcilcclxuICAgIC8qKiBOb3QgYSBzdXBlciBmYW4gb2YgdGhpcywgYnV0IGl0IGF2b2lkcyB1cyBjYWNoaW5nIGFub3RoZXIgc2V0IG9mIHBlciB2ZXJ0ZXggY29sb3IgaW5kaWNlcyAqL1xyXG4gICAgaWYgKGZpbHRlcmluZ0V4dGVuc2lvbilcclxuICAgICAgZmlsdGVyaW5nRXh0ZW5zaW9uLm9uKFZpZXdlckV2ZW50LkZpbHRlcmluZ1N0YXRlU2V0LCAoYXJnOiBGaWx0ZXJpbmdTdGF0ZSkgPT4ge1xyXG4gICAgICAgIC8qKiBJZiBubyB0ZXh0dXJlIGNvbG9yZWQgZmlsdGVycyBhcmUgcHJlc2VudCAqL1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICghYXJnLmNvbG9yR3JvdXBzIHx8ICFhcmcuY29sb3JHcm91cHMubGVuZ3RoKSAmJlxyXG4gICAgICAgICAgKCFhcmcudXNlckNvbG9yR3JvdXBzIHx8ICFhcmcudXNlckNvbG9yR3JvdXBzLmxlbmd0aClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIC8qKiBJZiBhbnkgc2hhZGVkIHBhc3MgZXhpc3RzLCBzZXQgaXQncyByZXF1aXJlZCBjb2xvciBpbmRpY2VzICovXHJcbiAgICAgICAgICB0aGlzLnZpZXdlclxyXG4gICAgICAgICAgICAuZ2V0UmVuZGVyZXIoKVxyXG4gICAgICAgICAgICAucGlwZWxpbmUuZ2V0UGFzcygnU0hBREVEJylcclxuICAgICAgICAgICAgLmZvckVhY2goKHBhc3M6IEdQYXNzKSA9PiB7XHJcbiAgICAgICAgICAgICAgOyhwYXNzIGFzIFNoYWRlZFBhc3MpLmFwcGx5Q29sb3JJbmRpY2VzKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB0aGlzLnZpZXdlci5vbihWaWV3ZXJFdmVudC5Mb2FkQ29tcGxldGUsICgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3TW9kZU9wdGlvbnModGhpcy5fdmlld01vZGVPcHRpb25zKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbjxUIGV4dGVuZHMgVmlld01vZGVFdmVudD4oXHJcbiAgICBldmVudFR5cGU6IFQsXHJcbiAgICBsaXN0ZW5lcjogKGFyZzogVmlld01vZGVFdmVudFBheWxvYWRbVF0pID0+IHZvaWRcclxuICApOiB2b2lkIHtcclxuICAgIHN1cGVyLm9uKGV2ZW50VHlwZSwgbGlzdGVuZXIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Vmlld01vZGUodmlld01vZGU6IFZpZXdNb2RlLCBvcHRpb25zPzogVmlld01vZGVPcHRpb25zKSB7XHJcbiAgICAvKiogRWRnZXMgb24vb2ZmIHJlcXVpcmUgcGlwZWxpbmUgcmVidWlsZCAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB2aWV3TW9kZSAhPT0gdGhpcy5fdmlld01vZGUgfHxcclxuICAgICAgKG9wdGlvbnMgJiYgb3B0aW9ucy5lZGdlcyAhPT0gdGhpcy5fdmlld01vZGVPcHRpb25zLmVkZ2VzKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX3ZpZXdNb2RlID0gdmlld01vZGVcclxuICAgICAgdGhpcy51cGRhdGVWaWV3TW9kZXModmlld01vZGUsIG9wdGlvbnMpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZpZXdNb2RlT3B0aW9ucyhvcHRpb25zKVxyXG4gICAgfVxyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl92aWV3TW9kZU9wdGlvbnMsIG9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlVmlld01vZGVzKHZpZXdNb2RlOiBWaWV3TW9kZSwgb3B0aW9ucz86IFZpZXdNb2RlT3B0aW9ucykge1xyXG4gICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpXHJcbiAgICBzd2l0Y2ggKHZpZXdNb2RlKSB7XHJcbiAgICAgIGNhc2UgVmlld01vZGUuREVGQVVMVDpcclxuICAgICAgICByZW5kZXJlci5waXBlbGluZSA9IG5ldyBEZWZhdWx0UGlwZWxpbmUocmVuZGVyZXIsIG9wdGlvbnMpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSBWaWV3TW9kZS5QRU46XHJcbiAgICAgICAgcmVuZGVyZXIucGlwZWxpbmUgPSBuZXcgUGVuVmlld1BpcGVsaW5lKHJlbmRlcmVyLCBvcHRpb25zKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgVmlld01vZGUuU09MSUQ6XHJcbiAgICAgICAgcmVuZGVyZXIucGlwZWxpbmUgPSBuZXcgU29saWRWaWV3UGlwZWxpbmUocmVuZGVyZXIsIG9wdGlvbnMpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSBWaWV3TW9kZS5BUkNUSUM6XHJcbiAgICAgICAgcmVuZGVyZXIucGlwZWxpbmUgPSBuZXcgQXJjdGljVmlld1BpcGVsaW5lKHJlbmRlcmVyLCBvcHRpb25zKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgVmlld01vZGUuU0hBREVEOlxyXG4gICAgICAgIHJlbmRlcmVyLnBpcGVsaW5lID0gbmV3IFNoYWRlZFZpZXdQaXBlbGluZShcclxuICAgICAgICAgIHJlbmRlcmVyLFxyXG4gICAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICAgIHRoaXMudmlld2VyLmdldFdvcmxkVHJlZSgpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXdNb2RlT3B0aW9ucyhvcHRpb25zKVxyXG4gICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcihVcGRhdGVGbGFncy5SRU5ERVJfUkVTRVQpXHJcbiAgICB0aGlzLmVtaXQoVmlld01vZGVFdmVudC5DaGFuZ2VkLCB2aWV3TW9kZSlcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVWaWV3TW9kZU9wdGlvbnMob3B0aW9ucz86IFZpZXdNb2RlT3B0aW9ucykge1xyXG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm5cclxuICAgIGNvbnN0IHJlbGF0aXZlRGVwdGhCaWFzID0gdGhpcy52aWV3ZXIuV29ybGQuZ2V0UmVsYXRpdmVPZmZzZXQoXHJcbiAgICAgIERlZmF1bHRFZGdlc1Bhc3NPcHRpb25zLmRlcHRoQmlhc1xyXG4gICAgKVxyXG4gICAgY29uc3QgZWRnZXNQYXNzZXMgPSB0aGlzLnZpZXdlci5nZXRSZW5kZXJlcigpLnBpcGVsaW5lLmdldFBhc3MoJ0VER0VTJylcclxuICAgIGVkZ2VzUGFzc2VzLmZvckVhY2goKHBhc3M6IEdQYXNzKSA9PiB7XHJcbiAgICAgIHBhc3Mub3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgZGVwdGhCaWFzOiByZWxhdGl2ZURlcHRoQmlhcyB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy52aWV3ZXIucmVxdWVzdFJlbmRlcihVcGRhdGVGbGFncy5SRU5ERVJfUkVTRVQpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFBlcnNwZWN0aXZlQ2FtZXJhIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IElWaWV3ZXIgfSBmcm9tICcuLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyBDYW1lcmFDb250cm9sbGVyIH0gZnJvbSAnLi9DYW1lcmFDb250cm9sbGVyLmpzJ1xyXG5pbXBvcnQgeyBJbnB1dEV2ZW50IH0gZnJvbSAnLi4vaW5wdXQvSW5wdXQuanMnXHJcbnR5cGUgTW92ZVR5cGUgPSAnZm9yd2FyZCcgfCAnYmFjaycgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ3VwJyB8ICdkb3duJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEh5YnJpZENhbWVyYUNvbnRyb2xsZXIgZXh0ZW5kcyBDYW1lcmFDb250cm9sbGVyIHtcclxuICBwcm90ZWN0ZWQga2V5TWFwOiBSZWNvcmQ8TW92ZVR5cGUsIGJvb2xlYW4+ID0ge1xyXG4gICAgZm9yd2FyZDogZmFsc2UsXHJcbiAgICBiYWNrOiBmYWxzZSxcclxuICAgIGxlZnQ6IGZhbHNlLFxyXG4gICAgcmlnaHQ6IGZhbHNlLFxyXG4gICAgdXA6IGZhbHNlLFxyXG4gICAgZG93bjogZmFsc2VcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjb250ZXh0TWVudVRyaWdnZXJlZCA9IGZhbHNlXHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2aWV3ZXI6IElWaWV3ZXIpIHtcclxuICAgIHN1cGVyKHZpZXdlcilcclxuICAgIHZpZXdlci5nZXRSZW5kZXJlcigpLmlucHV0Lm9uKElucHV0RXZlbnQuS2V5VXAsIHRoaXMub25LZXlVcC5iaW5kKHRoaXMpKVxyXG4gICAgdmlld2VyLmdldFJlbmRlcmVyKCkuaW5wdXQub24oSW5wdXRFdmVudC5LZXlEb3duLCB0aGlzLm9uS2V5RG93bi5iaW5kKHRoaXMpKVxyXG4gICAgdmlld2VyLmdldFJlbmRlcmVyKCkuaW5wdXQub24oSW5wdXRFdmVudC5Db250ZXh0TWVudSwgdGhpcy5vbkNvbnRleHRNZW51LmJpbmQodGhpcykpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FYXJseVVwZGF0ZShfZGVsdGE/OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHN1cGVyLm9uRWFybHlVcGRhdGUoX2RlbHRhKVxyXG4gICAgLyoqIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21ldGltZXMgd2hpbGUgaG9sZGluZyBhIGtld3kgZG93biB5b3UgZ2V0IGFuIGV4dHJhXHJcbiAgICAgKiAga2V5IGRvd24gZXZlbnQgKiphZnRlcioqIHRoZSBjb250ZXh0IG1lbnUgZXZlbnQsIGxvY2tpbmcgaXQgaW4gcGxhY2VcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnVUcmlnZ2VyZWQpIHtcclxuICAgICAgdGhpcy5jYW5jZWxNb3ZlKClcclxuICAgICAgdGhpcy5jb250ZXh0TWVudVRyaWdnZXJlZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgIGNhc2UgJ0tleVcnOlxyXG4gICAgICAgIHRoaXMua2V5TWFwLmZvcndhcmQgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XHJcbiAgICAgIGNhc2UgJ0tleUEnOlxyXG4gICAgICAgIHRoaXMua2V5TWFwLmxlZnQgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgIGNhc2UgJ0tleVMnOlxyXG4gICAgICAgIHRoaXMua2V5TWFwLmJhY2sgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICBjYXNlICdLZXlEJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5yaWdodCA9IHRydWVcclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgY2FzZSAnUGFnZVVwJzpcclxuICAgICAgY2FzZSAnS2V5RSc6XHJcbiAgICAgICAgdGhpcy5rZXlNYXAudXAgPSB0cnVlXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcclxuICAgICAgY2FzZSAnS2V5USc6XHJcbiAgICAgICAgdGhpcy5rZXlNYXAuZG93biA9IHRydWVcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5fZmx5Q29udHJvbHMuZW5hYmxlZCAmJlxyXG4gICAgICB0aGlzLl9yZW5kZXJpbmdDYW1lcmEgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSAmJlxyXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMua2V5TWFwKS5zb21lKCh2KSA9PiB2ID09PSB0cnVlKVxyXG4gICAgKVxyXG4gICAgICB0aGlzLnRvZ2dsZUNvbnRyb2xzKClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgIGNhc2UgJ0tleVcnOlxyXG4gICAgICAgIHRoaXMua2V5TWFwLmZvcndhcmQgPSBmYWxzZVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxyXG4gICAgICBjYXNlICdLZXlBJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5sZWZ0ID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgY2FzZSAnS2V5Uyc6XHJcbiAgICAgICAgdGhpcy5rZXlNYXAuYmFjayA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICBjYXNlICdLZXlEJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5yaWdodCA9IGZhbHNlXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XHJcbiAgICAgIGNhc2UgJ0tleUUnOlxyXG4gICAgICAgIHRoaXMua2V5TWFwLnVwID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgY2FzZSAnUGFnZURvd24nOlxyXG4gICAgICBjYXNlICdLZXlRJzpcclxuICAgICAgICB0aGlzLmtleU1hcC5kb3duID0gZmFsc2VcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9mbHlDb250cm9scy5lbmFibGVkICYmXHJcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5rZXlNYXApLmV2ZXJ5KCh2KSA9PiB2ID09PSBmYWxzZSlcclxuICAgIClcclxuICAgICAgdGhpcy50b2dnbGVDb250cm9scygpXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25Db250ZXh0TWVudSgpIHtcclxuICAgIHRoaXMuY29udGV4dE1lbnVUcmlnZ2VyZWQgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY2FuY2VsTW92ZSgpIHtcclxuICAgIHRoaXMua2V5TWFwLmJhY2sgPSBmYWxzZVxyXG4gICAgdGhpcy5rZXlNYXAuZm9yd2FyZCA9IGZhbHNlXHJcbiAgICB0aGlzLmtleU1hcC5kb3duID0gZmFsc2VcclxuICAgIHRoaXMua2V5TWFwLnVwID0gZmFsc2VcclxuICAgIHRoaXMua2V5TWFwLmxlZnQgPSBmYWxzZVxyXG4gICAgdGhpcy5rZXlNYXAucmlnaHQgPSBmYWxzZVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9mbHlDb250cm9scy5lbmFibGVkICYmXHJcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5rZXlNYXApLmV2ZXJ5KCh2KSA9PiB2ID09PSBmYWxzZSlcclxuICAgIClcclxuICAgICAgdGhpcy50b2dnbGVDb250cm9scygpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJveDMsIE1hdGhVdGlscywgTWF0cml4MywgVmVjdG9yMiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQge1xyXG4gIEZpbHRlcmluZ0V4dGVuc2lvbixcclxuICB0eXBlIEZpbHRlcmluZ1N0YXRlXHJcbn0gZnJvbSAnLi9leHRlbnNpb25zL0ZpbHRlcmluZ0V4dGVuc2lvbi5qcydcclxuaW1wb3J0IHtcclxuICB0eXBlIElubGluZVZpZXcsXHJcbiAgdHlwZSBQb2xhclZpZXcsXHJcbiAgdHlwZSBDYW5vbmljYWxWaWV3LFxyXG4gIENhbWVyYUNvbnRyb2xsZXJcclxufSBmcm9tICcuL2V4dGVuc2lvbnMvQ2FtZXJhQ29udHJvbGxlci5qcydcclxuaW1wb3J0IHsgU3BlY2tsZVR5cGUgfSBmcm9tICcuL2xvYWRlcnMvR2VvbWV0cnlDb252ZXJ0ZXIuanMnXHJcbmltcG9ydCB7IFF1ZXJpZXMgfSBmcm9tICcuL3F1ZXJpZXMvUXVlcmllcy5qcydcclxuaW1wb3J0IHR5cGUgeyBRdWVyeSwgUXVlcnlBcmdzUmVzdWx0TWFwLCBRdWVyeVJlc3VsdCB9IGZyb20gJy4vcXVlcmllcy9RdWVyeS5qcydcclxuaW1wb3J0IHtcclxuICBTZWxlY3Rpb25FeHRlbnNpb24sXHJcbiAgdHlwZSBTZWxlY3Rpb25FeHRlbnNpb25PcHRpb25zXHJcbn0gZnJvbSAnLi9leHRlbnNpb25zL1NlbGVjdGlvbkV4dGVuc2lvbi5qcydcclxuaW1wb3J0IHtcclxuICBEZWZhdWx0Vmlld2VyUGFyYW1zLFxyXG4gIHR5cGUgSVZpZXdlcixcclxuICB0eXBlIFNlbGVjdGlvbkV2ZW50LFxyXG4gIHR5cGUgU3BlY2tsZVZpZXcsXHJcbiAgdHlwZSBTdW5MaWdodENvbmZpZ3VyYXRpb24sXHJcbiAgdHlwZSBWaWV3ZXJQYXJhbXMsXHJcbiAgU3RlbmNpbE91dGxpbmVUeXBlLFxyXG4gIFVwZGF0ZUZsYWdzLFxyXG4gIFZpZXdlckV2ZW50XHJcbn0gZnJvbSAnLi4vSVZpZXdlci5qcydcclxuaW1wb3J0IHsgVmlld2VyIH0gZnJvbSAnLi9WaWV3ZXIuanMnXHJcbmltcG9ydCB7IFNlY3Rpb25PdXRsaW5lcyB9IGZyb20gJy4vZXh0ZW5zaW9ucy9zZWN0aW9ucy9TZWN0aW9uT3V0bGluZXMuanMnXHJcbmltcG9ydCB7IHR5cGUgVHJlZU5vZGUsIFdvcmxkVHJlZSB9IGZyb20gJy4vdHJlZS9Xb3JsZFRyZWUuanMnXHJcbmltcG9ydCB7IE1lYXN1cmVtZW50c0V4dGVuc2lvbiB9IGZyb20gJy4vZXh0ZW5zaW9ucy9tZWFzdXJlbWVudHMvTWVhc3VyZW1lbnRzRXh0ZW5zaW9uLmpzJ1xyXG5pbXBvcnQgeyBFeHBsb2RlRXh0ZW5zaW9uIH0gZnJvbSAnLi9leHRlbnNpb25zL0V4cGxvZGVFeHRlbnNpb24uanMnXHJcbmltcG9ydCB7XHJcbiAgRGlmZkV4dGVuc2lvbixcclxuICB0eXBlIERpZmZSZXN1bHQsXHJcbiAgVmlzdWFsRGlmZk1vZGVcclxufSBmcm9tICcuL2V4dGVuc2lvbnMvRGlmZkV4dGVuc2lvbi5qcydcclxuaW1wb3J0IHsgdHlwZSBQcm9wZXJ0eUluZm8gfSBmcm9tICcuL2ZpbHRlcmluZy9Qcm9wZXJ0eU1hbmFnZXIuanMnXHJcbmltcG9ydCB7IEJhdGNoT2JqZWN0IH0gZnJvbSAnLi9iYXRjaGluZy9CYXRjaE9iamVjdC5qcydcclxuaW1wb3J0IHsgU3BlY2tsZUxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9TcGVja2xlL1NwZWNrbGVMb2FkZXIuanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi91dGlscy9Mb2dnZXIuanMnXHJcbmltcG9ydCB7IFZpZXdNb2RlcyB9IGZyb20gJy4vZXh0ZW5zaW9ucy9WaWV3TW9kZXMuanMnXHJcbmltcG9ydCB7IEh5YnJpZENhbWVyYUNvbnRyb2xsZXIgfSBmcm9tICcuL2V4dGVuc2lvbnMvSHlicmlkQ2FtZXJhQ29udHJvbGxlci5qcydcclxuaW1wb3J0IHsgU2VjdGlvblRvb2wgfSBmcm9tICcuL2V4dGVuc2lvbnMvc2VjdGlvbnMvU2VjdGlvblRvb2wuanMnXHJcbmltcG9ydCB7IE9CQiB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9tYXRoL09CQi5qcydcclxuaW1wb3J0IHsgU3BlY2tsZVZpZXdlciB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgTWVhc3VyZW1lbnRPcHRpb25zIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL3ZpZXdlci9zdGF0ZSdcclxuXHJcbmNsYXNzIExlZ2FjeVNlbGVjdGlvbkV4dGVuc2lvbiBleHRlbmRzIFNlbGVjdGlvbkV4dGVuc2lvbiB7XHJcbiAgLyoqIEZFMiAnbWFudWFsbHknIHNlbGVjdHMgb2JqZWN0cyBwb24gaXQncyBvd24sIHNvIHdlJ3JlIGRpc2FibGluZyB0aGUgZXh0ZW5zaW9uJ3MgZXZlbnQgaGFuZGxlclxyXG4gICAqIE5vdGU6IEZFMiBzaG91bGRuJ3QgZG8gdGhhdCwgdW5sZXNzIGl0IHBsYW5zIG9uIHByb3Blcmx5IGV4dGVuZGluZyB0aGUgU2VsZWN0aW9uRXh0ZW5zaW9uLCBidXQgd2UncmUgZG9pbmcgaXQgbGlrZSB0aGlzXHJcbiAgICogZm9yIG5vdyBpbiBvcmRlciB0byByZWR1Y2UgdGhlIGltcGFjdCBvbiB0aGUgRkUncyBjb2RlYmFzZSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIG5ldyB2aWV3ZXIgQVBJXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uT2JqZWN0Q2xpY2tlZChzZWxlY3Rpb246IFNlbGVjdGlvbkV2ZW50KSB7XHJcbiAgICBzZWxlY3Rpb25cclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIEhpZ2hsaWdodEV4dGVuc2lvbiBleHRlbmRzIFNlbGVjdGlvbkV4dGVuc2lvbiB7XHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHZpZXdlcjogSVZpZXdlciwgcHJvdGVjdGVkIGNhbWVyYVByb3ZpZGVyOiBDYW1lcmFDb250cm9sbGVyKSB7XHJcbiAgICBzdXBlcih2aWV3ZXIsIGNhbWVyYVByb3ZpZGVyKVxyXG4gICAgY29uc3QgaGlnaGxpZ2h0TWF0ZXJpYWxEYXRhOiBTZWxlY3Rpb25FeHRlbnNpb25PcHRpb25zID0ge1xyXG4gICAgICBzZWxlY3Rpb25NYXRlcmlhbERhdGE6IHtcclxuICAgICAgICBpZDogTWF0aFV0aWxzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICAgIGNvbG9yOiAweDA0Y2JmYixcclxuICAgICAgICBlbWlzc2l2ZTogMHgwLFxyXG4gICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgcm91Z2huZXNzOiAxLFxyXG4gICAgICAgIG1ldGFsbmVzczogMCxcclxuICAgICAgICB2ZXJ0ZXhDb2xvcnM6IGZhbHNlLFxyXG4gICAgICAgIGxpbmVXZWlnaHQ6IDEsXHJcbiAgICAgICAgc3RlbmNpbE91dGxpbmVzOiBTdGVuY2lsT3V0bGluZVR5cGUuT1ZFUkxBWSxcclxuICAgICAgICBwb2ludFNpemU6IDRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0gaGlnaGxpZ2h0TWF0ZXJpYWxEYXRhXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdW5zZWxlY3RPYmplY3RzKGlkczogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSByZXR1cm5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZE5vZGVzLmxlbmd0aCkgcmV0dXJuXHJcblxyXG4gICAgY29uc3Qgbm9kZXMgPSBbXVxyXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBpZHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgY29uc3QgZm91bmROb2RlcyA9IHRoaXMudmlld2VyLmdldFdvcmxkVHJlZSgpLmZpbmRJZChpZHNba10pXHJcbiAgICAgIGlmIChmb3VuZE5vZGVzKSBub2Rlcy5wdXNoKC4uLmZvdW5kTm9kZXMpXHJcbiAgICB9XHJcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKFxyXG4gICAgICBub2Rlcy5maWx0ZXIoKG5vZGU6IFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2Rlcy5pbmNsdWRlcyhub2RlKVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqIERpc2FibGUgZGVmYXVsdCBldmVudHMgKi9cclxuICBwcm90ZWN0ZWQgb25PYmplY3RDbGlja2VkKHNlbGVjdGlvbjogU2VsZWN0aW9uRXZlbnQpIHtcclxuICAgIHNlbGVjdGlvblxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uT2JqZWN0RG91YmxlQ2xpY2soc2VsZWN0aW9uOiBTZWxlY3Rpb25FdmVudCkge1xyXG4gICAgc2VsZWN0aW9uXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25Qb2ludGVyTW92ZShlOiBWZWN0b3IyKSB7XHJcbiAgICBlXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGVnYWN5Vmlld2VyIGV4dGVuZHMgVmlld2VyIHtcclxuICBwcml2YXRlIGNhbWVyYUNvbnRyb2xsZXI6IENhbWVyYUNvbnRyb2xsZXJcclxuICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uRXh0ZW5zaW9uXHJcbiAgcHJpdmF0ZSBzZWN0aW9uczogU2VjdGlvblRvb2xcclxuICBwcml2YXRlIG1lYXN1cmVtZW50czogTWVhc3VyZW1lbnRzRXh0ZW5zaW9uXHJcbiAgcHJpdmF0ZSBmaWx0ZXJpbmc6IEZpbHRlcmluZ0V4dGVuc2lvblxyXG4gIHByaXZhdGUgZXhwbG9kZUV4dGVuc2lvbjogRXhwbG9kZUV4dGVuc2lvblxyXG4gIHByaXZhdGUgZGlmZkV4dGVuc2lvbjogRGlmZkV4dGVuc2lvblxyXG4gIHByaXZhdGUgaGlnaGxpZ2h0RXh0ZW5zaW9uOiBIaWdobGlnaHRFeHRlbnNpb25cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcclxuICAgIHBhcmFtczogVmlld2VyUGFyYW1zID0gRGVmYXVsdFZpZXdlclBhcmFtc1xyXG4gICkge1xyXG4gICAgc3VwZXIoY29udGFpbmVyLCBwYXJhbXMpXHJcbiAgICB0aGlzLmNhbWVyYUNvbnRyb2xsZXIgPSB0aGlzLmNyZWF0ZUV4dGVuc2lvbihIeWJyaWRDYW1lcmFDb250cm9sbGVyKVxyXG4gICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLmNyZWF0ZUV4dGVuc2lvbihMZWdhY3lTZWxlY3Rpb25FeHRlbnNpb24pXHJcbiAgICB0aGlzLnNlY3Rpb25zID0gdGhpcy5jcmVhdGVFeHRlbnNpb24oU2VjdGlvblRvb2wpXHJcbiAgICB0aGlzLmNyZWF0ZUV4dGVuc2lvbihTZWN0aW9uT3V0bGluZXMpXHJcbiAgICB0aGlzLm1lYXN1cmVtZW50cyA9IHRoaXMuY3JlYXRlRXh0ZW5zaW9uKE1lYXN1cmVtZW50c0V4dGVuc2lvbilcclxuICAgIHRoaXMuZmlsdGVyaW5nID0gdGhpcy5jcmVhdGVFeHRlbnNpb24oRmlsdGVyaW5nRXh0ZW5zaW9uKVxyXG4gICAgdGhpcy5leHBsb2RlRXh0ZW5zaW9uID0gdGhpcy5jcmVhdGVFeHRlbnNpb24oRXhwbG9kZUV4dGVuc2lvbilcclxuICAgIHRoaXMuZGlmZkV4dGVuc2lvbiA9IHRoaXMuY3JlYXRlRXh0ZW5zaW9uKERpZmZFeHRlbnNpb24pXHJcbiAgICB0aGlzLmhpZ2hsaWdodEV4dGVuc2lvbiA9IHRoaXMuY3JlYXRlRXh0ZW5zaW9uKEhpZ2hsaWdodEV4dGVuc2lvbilcclxuICAgIHRoaXMuY3JlYXRlRXh0ZW5zaW9uKFZpZXdNb2RlcylcclxuXHJcbiAgICAvKiogV29ya2Fyb3VuZCBzbyB0aGF0IHRoZSBmcm9udGVuZCBjb21tZW50cyBnZXQgc2VjdGlvbiBvdXRsaW5lcyB3aGVuIGNvbW1lbnQgdGhhdCBoYXMgc2VjdGlvbnMgbmVlZHMgdG8gc2hvdyBhdCBzdGFydHVwICovXHJcbiAgICB0aGlzLm9uKFZpZXdlckV2ZW50LkxvYWRDb21wbGV0ZSwgKCkgPT4ge1xyXG4gICAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuZ2V0RXh0ZW5zaW9uKFNlY3Rpb25Ub29sKVxyXG4gICAgICBjb25zdCBzZWN0aW9uT3V0bGluZXMgPSB0aGlzLmdldEV4dGVuc2lvbihTZWN0aW9uT3V0bGluZXMpXHJcbiAgICAgIGlmIChzZWN0aW9ucz8uZW5hYmxlZCAmJiBzZWN0aW9uT3V0bGluZXMpIHNlY3Rpb25PdXRsaW5lcy5yZXF1ZXN0VXBkYXRlKHRydWUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCBzdXBlci5pbml0KClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJlcigpIHtcclxuICAgIHJldHVybiB0aGlzLnNwZWNrbGVSZW5kZXJlclxyXG4gIH1cclxuXHJcbiAgLyoqIFNFQ1RJT04gQk9YICovXHJcbiAgcHVibGljIHNldFNlY3Rpb25Cb3goXHJcbiAgICBib3hEYXRhPzogU3BlY2tsZVZpZXdlci5WaWV3ZXJTdGF0ZS5TZWN0aW9uQm94RGF0YSxcclxuICAgIG9mZnNldD86IG51bWJlclxyXG4gICkge1xyXG4gICAgbGV0IGJveDogQm94MyB8IE9CQlxyXG4gICAgaWYgKCFib3hEYXRhKSB7XHJcbiAgICAgIGJveCA9IHRoaXMuc3BlY2tsZVJlbmRlcmVyLnNjZW5lQm94XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBib3ggPSBuZXcgT0JCKClcclxuICAgICAgYm94Lm1pbiA9IG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KGJveERhdGEubWluKVxyXG4gICAgICBib3gubWF4ID0gbmV3IFZlY3RvcjMoKS5mcm9tQXJyYXkoYm94RGF0YS5tYXgpXHJcbiAgICAgIGJveC5yb3RhdGlvbiA9XHJcbiAgICAgICAgYm94RGF0YS5yb3RhdGlvbiAmJiBib3hEYXRhLnJvdGF0aW9uLmxlbmd0aFxyXG4gICAgICAgICAgPyBuZXcgTWF0cml4MygpLmZyb21BcnJheShib3hEYXRhLnJvdGF0aW9uKVxyXG4gICAgICAgICAgOiBuZXcgTWF0cml4MygpLmlkZW50aXR5KClcclxuICAgIH1cclxuICAgIHRoaXMuc2VjdGlvbnMuc2V0Qm94KGJveCwgb2Zmc2V0KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEN1cnJlbnRTZWN0aW9uQm94KCk6IFNwZWNrbGVWaWV3ZXIuVmlld2VyU3RhdGUuU2VjdGlvbkJveERhdGEge1xyXG4gICAgY29uc3QgYm94ID0gdGhpcy5zZWN0aW9ucy5nZXRCb3goKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWluOiBib3gubWluLnRvQXJyYXkoKSxcclxuICAgICAgbWF4OiBib3gubWF4LnRvQXJyYXkoKSxcclxuICAgICAgLi4uKGJveCBpbnN0YW5jZW9mIE9CQiAmJiB7IHJvdGF0aW9uOiBib3gucm90YXRpb24udG9BcnJheSgpIH0pXHJcbiAgICB9IGFzIFNwZWNrbGVWaWV3ZXIuVmlld2VyU3RhdGUuU2VjdGlvbkJveERhdGFcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVTZWN0aW9uQm94KCkge1xyXG4gICAgdGhpcy5zZWN0aW9ucy50b2dnbGUoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlY3Rpb25Cb3hPZmYoKSB7XHJcbiAgICB0aGlzLnNlY3Rpb25zLmVuYWJsZWQgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlY3Rpb25Cb3hPbigpIHtcclxuICAgIHRoaXMuc2VjdGlvbnMuZW5hYmxlZCA9IHRydWVcclxuICB9XHJcblxyXG4gIC8qKiBGSUxURVJJTkcgKi9cclxuICBwdWJsaWMgc2VsZWN0T2JqZWN0cyhvYmplY3RJZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxGaWx0ZXJpbmdTdGF0ZT4ge1xyXG4gICAgaWYgKG9iamVjdElkcy5sZW5ndGgpIHRoaXMuaGlnaGxpZ2h0RXh0ZW5zaW9uLnVuc2VsZWN0T2JqZWN0cyhvYmplY3RJZHMpXHJcblxyXG4gICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0T2JqZWN0cyhvYmplY3RJZHMpXHJcbiAgICBpZiAoIXRoaXMuZmlsdGVyaW5nLmZpbHRlcmluZ1N0YXRlLnNlbGVjdGVkT2JqZWN0cylcclxuICAgICAgdGhpcy5maWx0ZXJpbmcuZmlsdGVyaW5nU3RhdGUuc2VsZWN0ZWRPYmplY3RzID0gW11cclxuICAgIHRoaXMuZmlsdGVyaW5nLmZpbHRlcmluZ1N0YXRlLnNlbGVjdGVkT2JqZWN0cy5wdXNoKFxyXG4gICAgICAuLi50aGlzLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE9iamVjdHMoKS5tYXAoKG9iaikgPT4gb2JqLmlkIGFzIHN0cmluZylcclxuICAgIClcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5maWx0ZXJpbmcuZmlsdGVyaW5nU3RhdGUpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRTZWxlY3Rpb24oKTogUHJvbWlzZTxGaWx0ZXJpbmdTdGF0ZT4ge1xyXG4gICAgdGhpcy5oaWdobGlnaHRFeHRlbnNpb24uY2xlYXJTZWxlY3Rpb24oKVxyXG4gICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyaW5nLmZpbHRlcmluZ1N0YXRlLnNlbGVjdGVkT2JqZWN0cylcclxuICAgICAgdGhpcy5maWx0ZXJpbmcuZmlsdGVyaW5nU3RhdGUuc2VsZWN0ZWRPYmplY3RzLmxlbmd0aCA9IDBcclxuICAgIHRoaXMucmVxdWVzdFJlbmRlcihVcGRhdGVGbGFncy5SRU5ERVIgfCBVcGRhdGVGbGFncy5TSEFET1dTKVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmZpbHRlcmluZy5maWx0ZXJpbmdTdGF0ZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWRlT2JqZWN0cyhcclxuICAgIG9iamVjdElkczogc3RyaW5nW10sXHJcbiAgICBzdGF0ZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlc2NlbmRhbnRzID0gZmFsc2UsXHJcbiAgICBnaG9zdCA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTxGaWx0ZXJpbmdTdGF0ZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZpbHRlcmluZ1N0YXRlPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IHRoaXMucHJlc2VydmVTZWxlY3Rpb25IaWdobGlnaHRGaWx0ZXIoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZy5oaWRlT2JqZWN0cyhcclxuICAgICAgICAgIG9iamVjdElkcyxcclxuICAgICAgICAgIHN0YXRlS2V5LFxyXG4gICAgICAgICAgaW5jbHVkZURlc2NlbmRhbnRzLFxyXG4gICAgICAgICAgZ2hvc3RcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICAgIHJlc29sdmUoZmlsdGVyaW5nU3RhdGUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dPYmplY3RzKFxyXG4gICAgb2JqZWN0SWRzOiBzdHJpbmdbXSxcclxuICAgIHN0YXRlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXHJcbiAgICBpbmNsdWRlRGVzY2VuZGFudHMgPSBmYWxzZVxyXG4gICk6IFByb21pc2U8RmlsdGVyaW5nU3RhdGU+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxGaWx0ZXJpbmdTdGF0ZT4oKHJlc29sdmUpID0+IHtcclxuICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSB0aGlzLnByZXNlcnZlU2VsZWN0aW9uSGlnaGxpZ2h0RmlsdGVyKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJpbmcuc2hvd09iamVjdHMob2JqZWN0SWRzLCBzdGF0ZUtleSwgaW5jbHVkZURlc2NlbmRhbnRzKVxyXG4gICAgICB9KVxyXG4gICAgICByZXNvbHZlKGZpbHRlcmluZ1N0YXRlKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc29sYXRlT2JqZWN0cyhcclxuICAgIG9iamVjdElkczogc3RyaW5nW10sXHJcbiAgICBzdGF0ZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlc2NlbmRhbnRzID0gZmFsc2UsXHJcbiAgICBnaG9zdCA9IHRydWVcclxuICApOiBQcm9taXNlPEZpbHRlcmluZ1N0YXRlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8RmlsdGVyaW5nU3RhdGU+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlID0gdGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbkhpZ2hsaWdodEZpbHRlcigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nLmlzb2xhdGVPYmplY3RzKFxyXG4gICAgICAgICAgb2JqZWN0SWRzLFxyXG4gICAgICAgICAgc3RhdGVLZXksXHJcbiAgICAgICAgICBpbmNsdWRlRGVzY2VuZGFudHMsXHJcbiAgICAgICAgICBnaG9zdFxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgICAgcmVzb2x2ZShmaWx0ZXJpbmdTdGF0ZSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdW5Jc29sYXRlT2JqZWN0cyhcclxuICAgIG9iamVjdElkczogc3RyaW5nW10sXHJcbiAgICBzdGF0ZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlc2NlbmRhbnRzID0gZmFsc2VcclxuICApOiBQcm9taXNlPEZpbHRlcmluZ1N0YXRlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8RmlsdGVyaW5nU3RhdGU+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlID0gdGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbkhpZ2hsaWdodEZpbHRlcigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nLnVuSXNvbGF0ZU9iamVjdHMob2JqZWN0SWRzLCBzdGF0ZUtleSwgaW5jbHVkZURlc2NlbmRhbnRzKVxyXG4gICAgICB9KVxyXG4gICAgICByZXNvbHZlKGZpbHRlcmluZ1N0YXRlKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWdobGlnaHRPYmplY3RzKG9iamVjdElkczogc3RyaW5nW10pOiBQcm9taXNlPEZpbHRlcmluZ1N0YXRlPiB7XHJcbiAgICBpZiAoIW9iamVjdElkcy5sZW5ndGgpIHRoaXMuaGlnaGxpZ2h0RXh0ZW5zaW9uLmNsZWFyU2VsZWN0aW9uKClcclxuICAgIGVsc2UgdGhpcy5oaWdobGlnaHRFeHRlbnNpb24uc2VsZWN0T2JqZWN0cyhvYmplY3RJZHMpXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZmlsdGVyaW5nLmZpbHRlcmluZ1N0YXRlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0SGlnaGxpZ2h0KCk6IFByb21pc2U8RmlsdGVyaW5nU3RhdGU+IHtcclxuICAgIHRoaXMuaGlnaGxpZ2h0RXh0ZW5zaW9uLmNsZWFyU2VsZWN0aW9uKClcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5maWx0ZXJpbmcuZmlsdGVyaW5nU3RhdGUpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29sb3JGaWx0ZXIocHJvcGVydHk6IFByb3BlcnR5SW5mbywgZ2hvc3QgPSB0cnVlKTogUHJvbWlzZTxGaWx0ZXJpbmdTdGF0ZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZpbHRlcmluZ1N0YXRlPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IHRoaXMucHJlc2VydmVTZWxlY3Rpb25IaWdobGlnaHRGaWx0ZXIoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZy5zZXRDb2xvckZpbHRlcihwcm9wZXJ0eSwgZ2hvc3QpXHJcbiAgICAgIH0pXHJcbiAgICAgIHJlc29sdmUoZmlsdGVyaW5nU3RhdGUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUNvbG9yRmlsdGVyKCk6IFByb21pc2U8RmlsdGVyaW5nU3RhdGU+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxGaWx0ZXJpbmdTdGF0ZT4oKHJlc29sdmUpID0+IHtcclxuICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSB0aGlzLnByZXNlcnZlU2VsZWN0aW9uSGlnaGxpZ2h0RmlsdGVyKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJpbmcucmVtb3ZlQ29sb3JGaWx0ZXIoKVxyXG4gICAgICB9KVxyXG4gICAgICByZXNvbHZlKGZpbHRlcmluZ1N0YXRlKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVc2VyT2JqZWN0Q29sb3JzKFxyXG4gICAgZ3JvdXBzOiB7IG9iamVjdElkczogc3RyaW5nW107IGNvbG9yOiBzdHJpbmcgfVtdXHJcbiAgKTogUHJvbWlzZTxGaWx0ZXJpbmdTdGF0ZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZpbHRlcmluZ1N0YXRlPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IHRoaXMucHJlc2VydmVTZWxlY3Rpb25IaWdobGlnaHRGaWx0ZXIoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZy5zZXRVc2VyT2JqZWN0Q29sb3JzKGdyb3VwcylcclxuICAgICAgfSlcclxuICAgICAgcmVzb2x2ZShmaWx0ZXJpbmdTdGF0ZSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRGaWx0ZXJzKCk6IFByb21pc2U8RmlsdGVyaW5nU3RhdGUgfCBudWxsPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8RmlsdGVyaW5nU3RhdGU+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlID0gdGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbkhpZ2hsaWdodEZpbHRlcigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nLnJlc2V0RmlsdGVycygpXHJcbiAgICAgIH0pXHJcbiAgICAgIHJlc29sdmUoZmlsdGVyaW5nU3RhdGUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVzZXJ2ZVNlbGVjdGlvbkhpZ2hsaWdodEZpbHRlcihcclxuICAgIGZpbHRlckZuOiAoKSA9PiBGaWx0ZXJpbmdTdGF0ZSB8IG51bGxcclxuICApOiBGaWx0ZXJpbmdTdGF0ZSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZE9iamVjdHMgPSB0aGlzLnNlbGVjdGlvblxyXG4gICAgICAuZ2V0U2VsZWN0ZWRPYmplY3RzKClcclxuICAgICAgLm1hcCgob2JqKSA9PiBvYmouaWQpIGFzIHN0cmluZ1tdXHJcbiAgICBjb25zdCBoaWdoTGlnaHRlZE9iamVjdHMgPSB0aGlzLmhpZ2hsaWdodEV4dGVuc2lvblxyXG4gICAgICAuZ2V0U2VsZWN0ZWRPYmplY3RzKClcclxuICAgICAgLm1hcCgob2JqKSA9PiBvYmouaWQpIGFzIHN0cmluZ1tdXHJcbiAgICBpZiAoc2VsZWN0ZWRPYmplY3RzLmxlbmd0aCkgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKVxyXG4gICAgaWYgKGhpZ2hMaWdodGVkT2JqZWN0cy5sZW5ndGgpXHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0RXh0ZW5zaW9uLnVuc2VsZWN0T2JqZWN0cyhoaWdoTGlnaHRlZE9iamVjdHMpXHJcbiAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IGZpbHRlckZuKClcclxuICAgIGlmIChmaWx0ZXJpbmdTdGF0ZSkge1xyXG4gICAgICBpZiAoIWZpbHRlcmluZ1N0YXRlLnNlbGVjdGVkT2JqZWN0cylcclxuICAgICAgICBmaWx0ZXJpbmdTdGF0ZS5zZWxlY3RlZE9iamVjdHMgPSBzZWxlY3RlZE9iamVjdHNcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdE9iamVjdHMoZmlsdGVyaW5nU3RhdGUuc2VsZWN0ZWRPYmplY3RzKVxyXG4gICAgfVxyXG4gICAgaWYgKGhpZ2hMaWdodGVkT2JqZWN0cy5sZW5ndGgpXHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0RXh0ZW5zaW9uLnNlbGVjdE9iamVjdHMoaGlnaExpZ2h0ZWRPYmplY3RzKVxyXG4gICAgcmV0dXJuIGZpbHRlcmluZ1N0YXRlIHx8IHRoaXMuZmlsdGVyaW5nLmZpbHRlcmluZ1N0YXRlXHJcbiAgfVxyXG5cclxuICAvKiogVFJFRSAqL1xyXG4gIHB1YmxpYyBnZXREYXRhVHJlZSgpOiB2b2lkIHtcclxuICAgIExvZ2dlci5lcnJvcignRGF0YVRyZWUgaXMgb2Jzb2xldGUsIHBsZWFzZSB1c2UgV29ybGRUcmVlIGluc3RlYWQnKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFdvcmxkVHJlZSgpOiBXb3JsZFRyZWUge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZVxyXG4gIH1cclxuXHJcbiAgLyoqIFFVRVJJRVMgKi9cclxuICBwdWJsaWMgcXVlcnk8VCBleHRlbmRzIFF1ZXJ5PihxdWVyeTogVCk6IFF1ZXJ5QXJnc1Jlc3VsdE1hcFtUWydvcGVyYXRpb24nXV0ge1xyXG4gICAgaWYgKFF1ZXJpZXMuaXNQb2ludFF1ZXJ5KHF1ZXJ5KSkge1xyXG4gICAgICBRdWVyaWVzLkRlZmF1bHRQb2ludFF1ZXJ5U29sdmVyLnNldENvbnRleHQodGhpcy5zcGVja2xlUmVuZGVyZXIpXHJcbiAgICAgIHJldHVybiBRdWVyaWVzLkRlZmF1bHRQb2ludFF1ZXJ5U29sdmVyLnNvbHZlKHF1ZXJ5KVxyXG4gICAgfVxyXG4gICAgaWYgKFF1ZXJpZXMuaXNJbnRlcnNlY3Rpb25RdWVyeShxdWVyeSkpIHtcclxuICAgICAgUXVlcmllcy5EZWZhdWx0SW50ZXJzZWN0aW9uUXVlcnlTb2x2ZXIuc2V0Q29udGV4dCh0aGlzLnNwZWNrbGVSZW5kZXJlcilcclxuICAgICAgcmV0dXJuIFF1ZXJpZXMuRGVmYXVsdEludGVyc2VjdGlvblF1ZXJ5U29sdmVyLnNvbHZlKHF1ZXJ5KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIHB1YmxpYyBxdWVyeUFzeW5jKHF1ZXJ5OiBRdWVyeSk6IFByb21pc2U8UXVlcnlSZXN1bHQ+IHwgbnVsbCB7XHJcbiAgICAvL1RPIERPXHJcbiAgICBxdWVyeVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIC8qKiBDQU1FUkEgKi9cclxuICBwdWJsaWMgem9vbShvYmplY3RJZHM/OiBzdHJpbmdbXSwgZml0PzogbnVtYmVyLCB0cmFuc2l0aW9uPzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5jYW1lcmFDb250cm9sbGVyLnNldENhbWVyYVZpZXcob2JqZWN0SWRzLCB0cmFuc2l0aW9uLCBmaXQpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0T3J0aG9DYW1lcmFPbigpIHtcclxuICAgIHRoaXMuY2FtZXJhQ29udHJvbGxlci5zZXRPcnRob0NhbWVyYU9uKClcclxuICAgIHRoaXMuc3BlY2tsZVJlbmRlcmVyLnJlc2V0UGlwZWxpbmUoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFBlcnNwZWN0aXZlQ2FtZXJhT24oKSB7XHJcbiAgICB0aGlzLmNhbWVyYUNvbnRyb2xsZXIuc2V0UGVyc3BlY3RpdmVDYW1lcmFPbigpXHJcbiAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci5yZXNldFBpcGVsaW5lKClcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVDYW1lcmFQcm9qZWN0aW9uKCkge1xyXG4gICAgdGhpcy5jYW1lcmFDb250cm9sbGVyLnRvZ2dsZUNhbWVyYXMoKVxyXG4gICAgdGhpcy5zcGVja2xlUmVuZGVyZXIucmVzZXRQaXBlbGluZSgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TGlnaHRDb25maWd1cmF0aW9uKGNvbmZpZzogU3VuTGlnaHRDb25maWd1cmF0aW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNwZWNrbGVSZW5kZXJlci5zZXRTdW5MaWdodENvbmZpZ3VyYXRpb24oY29uZmlnKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFZpZXdzKCk6IFNwZWNrbGVWaWV3W10ge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZVxyXG4gICAgICAuZmluZEFsbCgobm9kZTogVHJlZU5vZGUpID0+IHtcclxuICAgICAgICByZXR1cm4gbm9kZS5tb2RlbC5yZW5kZXJWaWV3Py5zcGVja2xlVHlwZSA9PT0gU3BlY2tsZVR5cGUuVmlldzNEXHJcbiAgICAgIH0pXHJcbiAgICAgIC5tYXAoKHY6IFRyZWVOb2RlKSA9PiB2Lm1vZGVsLnJhdylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaWV3KFxyXG4gICAgdmlldzogQ2Fub25pY2FsVmlldyB8IFNwZWNrbGVWaWV3IHwgSW5saW5lVmlldyB8IFBvbGFyVmlldyxcclxuICAgIHRyYW5zaXRpb24gPSB0cnVlXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbWVyYUNvbnRyb2xsZXIuc2V0Q2FtZXJhVmlldyh2aWV3LCB0cmFuc2l0aW9uKVxyXG4gIH1cclxuXHJcbiAgLyoqIE1JU0MgKi9cclxuICBwdWJsaWMgc2NyZWVuc2hvdCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjcmVlbnNob3QgPSB0aGlzLnNwZWNrbGVSZW5kZXJlci5yZW5kZXJlci5kb21FbGVtZW50LnRvRGF0YVVSTCgnaW1hZ2UvcG5nJylcclxuICAgICAgcmVzb2x2ZShzY3JlZW5zaG90KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBsb2RlKHRpbWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5leHBsb2RlRXh0ZW5zaW9uLnNldEV4cGxvZGUodGltZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPYmplY3RzKGlkOiBzdHJpbmcpOiBCYXRjaE9iamVjdFtdIHtcclxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlLmZpbmRJZChpZClcclxuICAgIGNvbnN0IG9iamVjdHM6IEJhdGNoT2JqZWN0W10gPSBbXVxyXG4gICAgaWYgKG5vZGVzKSB7XHJcbiAgICAgIG5vZGVzLmZvckVhY2goKG5vZGU6IFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKG5vZGUubW9kZWwucmVuZGVyVmlldylcclxuICAgICAgICAgIG9iamVjdHMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5zcGVja2xlUmVuZGVyZXIuZ2V0T2JqZWN0KG5vZGUubW9kZWwucmVuZGVyVmlldykgYXMgQmF0Y2hPYmplY3RcclxuICAgICAgICAgIClcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiBvYmplY3RzXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPQkpFQ1QgTE9BRElORy9VTkxPQURJTkdcclxuICAgKi9cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRPYmplY3RBc3luYyhcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcclxuICAgIGVuYWJsZUNhY2hpbmcgPSB0cnVlLFxyXG4gICAgem9vbVRvT2JqZWN0ID0gdHJ1ZVxyXG4gICkge1xyXG4gICAgY29uc3QgbG9hZGVyID0gbmV3IFNwZWNrbGVMb2FkZXIodGhpcy50cmVlLCB1cmwsIHRva2VuLCBlbmFibGVDYWNoaW5nKVxyXG4gICAgcmV0dXJuIHRoaXMubG9hZE9iamVjdChsb2FkZXIsIHpvb21Ub09iamVjdClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkaWZmKFxyXG4gICAgdXJsQTogc3RyaW5nLFxyXG4gICAgdXJsQjogc3RyaW5nLFxyXG4gICAgbW9kZTogVmlzdWFsRGlmZk1vZGUsXHJcbiAgICBhdXRoVG9rZW4/OiBzdHJpbmdcclxuICApOiBQcm9taXNlPERpZmZSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmRpZmZFeHRlbnNpb24uZGlmZih1cmxBLCB1cmxCLCBtb2RlLCBhdXRoVG9rZW4pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdW5kaWZmKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlmZkV4dGVuc2lvbi51bmRpZmYoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERpZmZUaW1lKF9kaWZmUmVzdWx0OiBEaWZmUmVzdWx0LCB0aW1lOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZGlmZkV4dGVuc2lvbi51cGRhdGVWaXN1YWxEaWZmKHRpbWUpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlzdWFsRGlmZk1vZGUoX2RpZmZSZXN1bHQ6IERpZmZSZXN1bHQsIG1vZGU6IFZpc3VhbERpZmZNb2RlKSB7XHJcbiAgICB0aGlzLmRpZmZFeHRlbnNpb24udXBkYXRlVmlzdWFsRGlmZih1bmRlZmluZWQsIG1vZGUpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW5hYmxlTWVhc3VyZW1lbnRzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVtZW50cy5lbmFibGVkID0gdmFsdWVcclxuICAgIHRoaXMuc2VsZWN0aW9uLmVuYWJsZWQgPSAhdmFsdWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNZWFzdXJlbWVudE9wdGlvbnMob3B0aW9uczogTWVhc3VyZW1lbnRPcHRpb25zKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVtZW50cy5vcHRpb25zID0gb3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZU1lYXN1cmVtZW50KCkge1xyXG4gICAgdGhpcy5tZWFzdXJlbWVudHMucmVtb3ZlTWVhc3VyZW1lbnQoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRpc3Bvc2UoKSB7XHJcbiAgICAvLyBUT0RPOiBjdXJyZW50bHkgaXQncyBlYXNpZXIgdG8gc2ltcGx5IHJlZnJlc2ggdGhlIHBhZ2UgOilcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IFNwZWNrbGVSZW5kZXJlciBmcm9tICcuLi8uLi9TcGVja2xlUmVuZGVyZXIuanMnXHJcbmltcG9ydCB7IEJsZW5kUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9CbGVuZFBhc3MuanMnXHJcbmltcG9ydCB7IEdlb21ldHJ5UGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9HZW9tZXRyeVBhc3MuanMnXHJcbmltcG9ydCB7IERlcHRoUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9EZXB0aFBhc3MuanMnXHJcbmltcG9ydCB7IE91dHB1dFBhc3MsIElucHV0VHlwZSB9IGZyb20gJy4uL1Bhc3Nlcy9PdXRwdXRQYXNzLmpzJ1xyXG5pbXBvcnQgeyBDbGVhckZsYWdzLCBPYmplY3RWaXNpYmlsaXR5IH0gZnJvbSAnLi4vUGFzc2VzL0dQYXNzLmpzJ1xyXG5pbXBvcnQgeyBQcm9ncmVzc2l2ZUFPUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9Qcm9ncmVzc2l2ZUFPUGFzcy5qcydcclxuaW1wb3J0IHsgVEFBUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9UQUFQYXNzLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMYXllcnMgfSBmcm9tICcuLi8uLi8uLi9JVmlld2VyLmpzJ1xyXG5pbXBvcnQgeyBQcm9ncmVzc2l2ZVBpcGVsaW5lIH0gZnJvbSAnLi9Qcm9ncmVzc2l2ZVBpcGVsaW5lLmpzJ1xyXG5pbXBvcnQgeyBTdGVuY2lsUGFzcyB9IGZyb20gJy4uL1Bhc3Nlcy9TdGVuY2lsUGFzcy5qcydcclxuaW1wb3J0IHsgU3RlbmNpbE1hc2tQYXNzIH0gZnJvbSAnLi4vUGFzc2VzL1N0ZW5jaWxNYXNrUGFzcy5qcydcclxuaW1wb3J0IHsgRGVmYXVsdFBpcGVsaW5lT3B0aW9ucywgUGlwZWxpbmUsIFBpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vUGlwZWxpbmUuanMnXHJcbmltcG9ydCB7IExpbmVhckZpbHRlciB9IGZyb20gJ3RocmVlJ1xyXG5pbXBvcnQgeyBFZGdlc1BpcGVsaW5lIH0gZnJvbSAnLi9FZGdlc1BpcGVsaW5lLmpzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFRBQVBpcGVsaW5lIGV4dGVuZHMgUHJvZ3Jlc3NpdmVQaXBlbGluZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBzcGVja2xlUmVuZGVyZXI6IFNwZWNrbGVSZW5kZXJlcixcclxuICAgIG9wdGlvbnM6IFBpcGVsaW5lT3B0aW9ucyA9IERlZmF1bHRQaXBlbGluZU9wdGlvbnNcclxuICApIHtcclxuICAgIHN1cGVyKHNwZWNrbGVSZW5kZXJlcilcclxuXHJcbiAgICBjb25zdCBlZGdlc1BpcGVsaW5lID0gb3B0aW9ucy5lZGdlcyA/IG5ldyBFZGdlc1BpcGVsaW5lKHNwZWNrbGVSZW5kZXJlcikgOiBudWxsXHJcblxyXG4gICAgY29uc3QgZGVwdGhQYXNzID0gIW9wdGlvbnMuZWRnZXMgPyBuZXcgRGVwdGhQYXNzKCkgOiBudWxsXHJcbiAgICBpZiAoZGVwdGhQYXNzKSB7XHJcbiAgICAgIGRlcHRoUGFzcy5zZXRMYXllcnMoW09iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNIXSlcclxuICAgICAgZGVwdGhQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5ERVBUSClcclxuICAgICAgZGVwdGhQYXNzLnNldEppdHRlcih0cnVlKVxyXG4gICAgICBkZXB0aFBhc3Muc2V0Q2xlYXJDb2xvcigweDAwMDAwMCwgMSlcclxuICAgICAgZGVwdGhQYXNzLnNldENsZWFyRmxhZ3MoQ2xlYXJGbGFncy5DT0xPUiB8IENsZWFyRmxhZ3MuREVQVEgpXHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXB0aFRleCA9IG9wdGlvbnMuZWRnZXNcclxuICAgICAgPyBlZGdlc1BpcGVsaW5lPy5kZXB0aFBhc3MuZGVwdGhUZXh0dXJlXHJcbiAgICAgIDogZGVwdGhQYXNzPy5vdXRwdXRUYXJnZXQ/LnRleHR1cmVcclxuXHJcbiAgICBjb25zdCBvcGFxdWVDb2xvclBhc3MgPSBuZXcgR2VvbWV0cnlQYXNzKClcclxuICAgIG9wYXF1ZUNvbG9yUGFzcy5zZXRMYXllcnMoW1xyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlQsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNILFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTElORSxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5ULFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfUE9JTlRfQ0xPVUQsXHJcbiAgICAgIE9iamVjdExheWVycy5QUk9QU1xyXG4gICAgXSlcclxuICAgIG9wYXF1ZUNvbG9yUGFzcy5zZXRWaXNpYmlsaXR5KE9iamVjdFZpc2liaWxpdHkuT1BBUVVFKVxyXG5cclxuICAgIGNvbnN0IHRyYW5zcGFyZW50Q29sb3JQYXNzID0gbmV3IEdlb21ldHJ5UGFzcygpXHJcbiAgICB0cmFuc3BhcmVudENvbG9yUGFzcy5zZXRMYXllcnMoW1xyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlQsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNILFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTElORSxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5ULFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfUE9JTlRfQ0xPVUQsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9URVhULFxyXG4gICAgICBPYmplY3RMYXllcnMuU0hBRE9XQ0FUQ0hFUlxyXG4gICAgXSlcclxuICAgIHRyYW5zcGFyZW50Q29sb3JQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5UUkFOU1BBUkVOVClcclxuXHJcbiAgICBjb25zdCBibGVuZFBhc3NEeW5hbWljID0gbmV3IEJsZW5kUGFzcygpXHJcbiAgICBibGVuZFBhc3NEeW5hbWljLm9wdGlvbnMgPSB7IGJsZW5kQU86IGZhbHNlLCBibGVuZEVkZ2VzOiBvcHRpb25zLmVkZ2VzIH1cclxuICAgIGJsZW5kUGFzc0R5bmFtaWMuc2V0VGV4dHVyZShcclxuICAgICAgJ3RFZGdlcycsXHJcbiAgICAgIG9wdGlvbnMuZWRnZXMgPyBlZGdlc1BpcGVsaW5lPy5vdXRwdXRUZXh0dXJlRHluYW1pYyA6IHVuZGVmaW5lZFxyXG4gICAgKVxyXG4gICAgYmxlbmRQYXNzRHluYW1pYy5hY2N1bXVsYXRpb25GcmFtZXMgPSB0aGlzLmFjY3VtdWxhdGlvbkZyYW1lQ291bnRcclxuXHJcbiAgICBjb25zdCBkZXB0aFN1YlBpcGVsaW5lRHluYW1pYyA9XHJcbiAgICAgIChvcHRpb25zLmVkZ2VzID8gZWRnZXNQaXBlbGluZT8uZHluYW1pY1Bhc3NlcyA6IFtdKSB8fCBbXVxyXG5cclxuICAgIGNvbnN0IHByb2dyZXNzaXZlQU9QYXNzID0gbmV3IFByb2dyZXNzaXZlQU9QYXNzKClcclxuICAgIHByb2dyZXNzaXZlQU9QYXNzLnNldFRleHR1cmUoJ3REZXB0aCcsIGRlcHRoVGV4KVxyXG4gICAgcHJvZ3Jlc3NpdmVBT1Bhc3MuYWNjdW11bGF0aW9uRnJhbWVzID0gdGhpcy5hY2N1bXVsYXRpb25GcmFtZUNvdW50XHJcbiAgICBwcm9ncmVzc2l2ZUFPUGFzcy5zZXRDbGVhckNvbG9yKDB4ZmZmZmZmLCAxKVxyXG5cclxuICAgIGNvbnN0IGJsZW5kUGFzcyA9IG5ldyBCbGVuZFBhc3MoKVxyXG4gICAgYmxlbmRQYXNzLm9wdGlvbnMgPSB7IGJsZW5kQU86IHRydWUsIGJsZW5kRWRnZXM6IGZhbHNlIH1cclxuICAgIGJsZW5kUGFzcy5zZXRUZXh0dXJlKCd0QW8nLCBwcm9ncmVzc2l2ZUFPUGFzcy5vdXRwdXRUYXJnZXQ/LnRleHR1cmUpXHJcbiAgICBibGVuZFBhc3MuYWNjdW11bGF0aW9uRnJhbWVzID0gdGhpcy5hY2N1bXVsYXRpb25GcmFtZUNvdW50XHJcblxyXG4gICAgY29uc3QgcmVuZGVyVGFyZ2V0ID0gUGlwZWxpbmUuY3JlYXRlUmVuZGVyVGFyZ2V0KHtcclxuICAgICAgbWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXHJcbiAgICAgIG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyXHJcbiAgICB9KVxyXG4gICAgY29uc3Qgaml0dGVyT3BhcXVlUGFzcyA9IG5ldyBHZW9tZXRyeVBhc3MoKVxyXG4gICAgaml0dGVyT3BhcXVlUGFzcy5zZXRMYXllcnMoW1xyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlQsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNILFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTElORSxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5ULFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfUE9JTlRfQ0xPVUQsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9URVhUXHJcbiAgICBdKVxyXG4gICAgaml0dGVyT3BhcXVlUGFzcy5zZXRWaXNpYmlsaXR5KE9iamVjdFZpc2liaWxpdHkuT1BBUVVFKVxyXG4gICAgaml0dGVyT3BhcXVlUGFzcy5zZXRKaXR0ZXIodHJ1ZSlcclxuICAgIGppdHRlck9wYXF1ZVBhc3Mub3V0cHV0VGFyZ2V0ID0gcmVuZGVyVGFyZ2V0XHJcblxyXG4gICAgY29uc3Qgaml0dGVyVHJhbnNwYXJlbnRQYXNzID0gbmV3IEdlb21ldHJ5UGFzcygpXHJcbiAgICBqaXR0ZXJUcmFuc3BhcmVudFBhc3Muc2V0TGF5ZXJzKFtcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5ULFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfTUVTSCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX0xJTkUsXHJcbiAgICAgIE9iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9QT0lOVCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX1BPSU5UX0NMT1VELFxyXG4gICAgICBPYmplY3RMYXllcnMuU1RSRUFNX0NPTlRFTlRfVEVYVCxcclxuICAgICAgT2JqZWN0TGF5ZXJzLlNIQURPV0NBVENIRVJcclxuICAgIF0pXHJcbiAgICBqaXR0ZXJUcmFuc3BhcmVudFBhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LlRSQU5TUEFSRU5UKVxyXG4gICAgaml0dGVyVHJhbnNwYXJlbnRQYXNzLnNldEppdHRlcih0cnVlKVxyXG4gICAgaml0dGVyVHJhbnNwYXJlbnRQYXNzLm91dHB1dFRhcmdldCA9IHJlbmRlclRhcmdldFxyXG5cclxuICAgIGNvbnN0IGJsZW5kRWRnZXNQYXNzID0gbmV3IEJsZW5kUGFzcygpXHJcbiAgICBibGVuZEVkZ2VzUGFzcy5vcHRpb25zID0geyBibGVuZEFPOiBmYWxzZSwgYmxlbmRFZGdlczogb3B0aW9ucy5lZGdlcyB9XHJcbiAgICBibGVuZEVkZ2VzUGFzcy5zZXRUZXh0dXJlKFxyXG4gICAgICAndEVkZ2VzJyxcclxuICAgICAgb3B0aW9ucy5lZGdlcyA/IGVkZ2VzUGlwZWxpbmU/LmVkZ2VQYXNzLm91dHB1dFRhcmdldD8udGV4dHVyZSA6IHVuZGVmaW5lZFxyXG4gICAgKVxyXG4gICAgYmxlbmRFZGdlc1Bhc3MuYWNjdW11bGF0aW9uRnJhbWVzID0gdGhpcy5hY2N1bXVsYXRpb25GcmFtZUNvdW50XHJcbiAgICBibGVuZEVkZ2VzUGFzcy5vdXRwdXRUYXJnZXQgPSByZW5kZXJUYXJnZXRcclxuXHJcbiAgICBjb25zdCB0YWFQYXNzID0gbmV3IFRBQVBhc3MoKVxyXG4gICAgdGFhUGFzcy5pbnB1dFRleHR1cmUgPSByZW5kZXJUYXJnZXQudGV4dHVyZVxyXG4gICAgdGFhUGFzcy5hY2N1bXVsYXRpb25GcmFtZXMgPSB0aGlzLmFjY3VtdWxhdGlvbkZyYW1lQ291bnRcclxuXHJcbiAgICBjb25zdCBvdXRwdXRQYXNzID0gbmV3IE91dHB1dFBhc3MoKVxyXG4gICAgb3V0cHV0UGFzcy5zZXRUZXh0dXJlKCd0RGlmZnVzZScsIHRhYVBhc3Mub3V0cHV0VGFyZ2V0Py50ZXh0dXJlKVxyXG4gICAgb3V0cHV0UGFzcy5vcHRpb25zID0geyBpbnB1dFR5cGU6IElucHV0VHlwZS5Db2xvciB9XHJcblxyXG4gICAgY29uc3Qgc3RlbmNpbFBhc3MgPSBuZXcgU3RlbmNpbFBhc3MoKVxyXG4gICAgc3RlbmNpbFBhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LlNURU5DSUwpXHJcbiAgICBzdGVuY2lsUGFzcy5zZXRMYXllcnMoW09iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNIXSlcclxuICAgIHN0ZW5jaWxQYXNzLnNldENsZWFyQ29sb3IoMHgwMDAwMDAsIDApXHJcbiAgICBzdGVuY2lsUGFzcy5zZXRDbGVhckZsYWdzKENsZWFyRmxhZ3MuQ09MT1IgfCBDbGVhckZsYWdzLkRFUFRIIHwgQ2xlYXJGbGFncy5TVEVOQ0lMKVxyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWxNYXNrUGFzcyA9IG5ldyBTdGVuY2lsTWFza1Bhc3MoKVxyXG4gICAgc3RlbmNpbE1hc2tQYXNzLnNldFZpc2liaWxpdHkoT2JqZWN0VmlzaWJpbGl0eS5TVEVOQ0lMKVxyXG4gICAgc3RlbmNpbE1hc2tQYXNzLnNldExheWVycyhbT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0hdKVxyXG4gICAgc3RlbmNpbE1hc2tQYXNzLnNldENsZWFyRmxhZ3MoQ2xlYXJGbGFncy5ERVBUSClcclxuXHJcbiAgICBjb25zdCBqaXR0ZXJlZFN0ZW5jaWxQYXNzID0gbmV3IFN0ZW5jaWxQYXNzKClcclxuICAgIGppdHRlcmVkU3RlbmNpbFBhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LlNURU5DSUwpXHJcbiAgICBqaXR0ZXJlZFN0ZW5jaWxQYXNzLnNldExheWVycyhbT2JqZWN0TGF5ZXJzLlNUUkVBTV9DT05URU5UX01FU0hdKVxyXG4gICAgaml0dGVyZWRTdGVuY2lsUGFzcy5zZXRDbGVhckNvbG9yKDB4MDAwMDAwLCAwKVxyXG4gICAgaml0dGVyZWRTdGVuY2lsUGFzcy5zZXRDbGVhckZsYWdzKFxyXG4gICAgICBDbGVhckZsYWdzLkNPTE9SIHwgQ2xlYXJGbGFncy5ERVBUSCB8IENsZWFyRmxhZ3MuU1RFTkNJTFxyXG4gICAgKVxyXG4gICAgaml0dGVyZWRTdGVuY2lsUGFzcy5vdXRwdXRUYXJnZXQgPSByZW5kZXJUYXJnZXRcclxuXHJcbiAgICBjb25zdCBqaXR0ZXJlZFN0ZW5jaWxNYXNrUGFzcyA9IG5ldyBTdGVuY2lsTWFza1Bhc3MoKVxyXG4gICAgaml0dGVyZWRTdGVuY2lsTWFza1Bhc3Muc2V0VmlzaWJpbGl0eShPYmplY3RWaXNpYmlsaXR5LlNURU5DSUwpXHJcbiAgICBqaXR0ZXJlZFN0ZW5jaWxNYXNrUGFzcy5zZXRMYXllcnMoW09iamVjdExheWVycy5TVFJFQU1fQ09OVEVOVF9NRVNIXSlcclxuICAgIGppdHRlcmVkU3RlbmNpbE1hc2tQYXNzLnNldENsZWFyRmxhZ3MoQ2xlYXJGbGFncy5ERVBUSClcclxuICAgIGppdHRlcmVkU3RlbmNpbE1hc2tQYXNzLm91dHB1dFRhcmdldCA9IHJlbmRlclRhcmdldFxyXG5cclxuICAgIGNvbnN0IG92ZXJsYXlQYXNzID0gbmV3IEdlb21ldHJ5UGFzcygpXHJcbiAgICBvdmVybGF5UGFzcy5zZXRMYXllcnMoW09iamVjdExheWVycy5PVkVSTEFZLCBPYmplY3RMYXllcnMuTUVBU1VSRU1FTlRTXSlcclxuXHJcbiAgICBjb25zdCBkZXB0aFN1YlBpcGVsaW5lUHJvZ3Jlc3NpdmUgPSBvcHRpb25zLmVkZ2VzXHJcbiAgICAgID8gW2VkZ2VzUGlwZWxpbmU/LmRlcHRoUGFzcywgZWRnZXNQaXBlbGluZT8uZWRnZVBhc3NdXHJcbiAgICAgIDogZGVwdGhQYXNzXHJcbiAgICAgID8gW2RlcHRoUGFzc11cclxuICAgICAgOiBbXVxyXG5cclxuICAgIHRoaXMuZHluYW1pY1N0YWdlLnB1c2goXHJcbiAgICAgIC4uLmRlcHRoU3ViUGlwZWxpbmVEeW5hbWljLFxyXG4gICAgICBzdGVuY2lsUGFzcyxcclxuICAgICAgb3BhcXVlQ29sb3JQYXNzLFxyXG4gICAgICB0cmFuc3BhcmVudENvbG9yUGFzcyxcclxuICAgICAgLi4uKG9wdGlvbnMuZWRnZXMgPyBbYmxlbmRQYXNzRHluYW1pY10gOiBbXSksXHJcbiAgICAgIHN0ZW5jaWxNYXNrUGFzcyxcclxuICAgICAgb3ZlcmxheVBhc3NcclxuICAgIClcclxuICAgIHRoaXMucHJvZ3Jlc3NpdmVTdGFnZS5wdXNoKFxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XHJcbiAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAuLi5kZXB0aFN1YlBpcGVsaW5lUHJvZ3Jlc3NpdmUsXHJcbiAgICAgIGppdHRlcmVkU3RlbmNpbFBhc3MsXHJcbiAgICAgIGppdHRlck9wYXF1ZVBhc3MsXHJcbiAgICAgIGppdHRlclRyYW5zcGFyZW50UGFzcyxcclxuICAgICAgaml0dGVyZWRTdGVuY2lsTWFza1Bhc3MsXHJcbiAgICAgIC4uLihvcHRpb25zLmVkZ2VzID8gW2JsZW5kRWRnZXNQYXNzXSA6IFtdKSxcclxuICAgICAgdGFhUGFzcyxcclxuICAgICAgb3V0cHV0UGFzcyxcclxuICAgICAgcHJvZ3Jlc3NpdmVBT1Bhc3MsXHJcbiAgICAgIGJsZW5kUGFzcyxcclxuICAgICAgb3ZlcmxheVBhc3NcclxuICAgIClcclxuICAgIHRoaXMucGFzc3Rocm91Z2hTdGFnZS5wdXNoKG91dHB1dFBhc3MsIGJsZW5kUGFzcywgb3ZlcmxheVBhc3MpXHJcblxyXG4gICAgdGhpcy5wYXNzTGlzdCA9IHRoaXMuZHluYW1pY1N0YWdlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgLyoqIFRoZSBUQUEgcGlwZWxpbmUgY2Fubm90IGJlIHNvZnQgcmVzZXQgY3VycmVudGx5LCBzbyB3ZSBoYXJkIHJlc2V0IGl0IGluc3RlYWQgYXMgYSB0ZW1wb3JhcnkgbW1lYXN1cmUgKi9cclxuICAgIGNvbnN0IGlzUGFzc3Rocm91Z2ggPSB0aGlzLnBhc3NMaXN0ID09PSB0aGlzLnBhc3N0aHJvdWdoU3RhZ2VcclxuICAgIGNvbnN0IHJldCA9IHN1cGVyLnJlbmRlcigpXHJcbiAgICBpZiAoaXNQYXNzdGhyb3VnaCkge1xyXG4gICAgICB0aGlzLnJlc2V0KClcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiByZXRcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgU3BlY2tsZUxvYWRlciB9IGZyb20gJy4vU3BlY2tsZUxvYWRlci5qcydcclxuaW1wb3J0IHsgV29ybGRUcmVlIH0gZnJvbSAnLi4vLi4vdHJlZS9Xb3JsZFRyZWUuanMnXHJcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vLi4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5pbXBvcnQgeyBPYmplY3RMb2FkZXIyLCBPYmplY3RMb2FkZXIyRmFjdG9yeSB9IGZyb20gJ0BzcGVja2xlL29iamVjdGxvYWRlcjInXHJcblxyXG5leHBvcnQgY2xhc3MgU3BlY2tsZU9mZmxpbmVMb2FkZXIgZXh0ZW5kcyBTcGVja2xlTG9hZGVyIHtcclxuICBjb25zdHJ1Y3Rvcih0YXJnZXRUcmVlOiBXb3JsZFRyZWUsIHJlc291cmNlRGF0YTogdW5rbm93biwgcmVzb3VyY2VJZD86IHN0cmluZykge1xyXG4gICAgc3VwZXIodGFyZ2V0VHJlZSwgcmVzb3VyY2VJZCB8fCAnJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlc291cmNlRGF0YSlcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbml0T2JqZWN0TG9hZGVyKFxyXG4gICAgX3Jlc291cmNlOiBzdHJpbmcsXHJcbiAgICBfYXV0aFRva2VuPzogc3RyaW5nLFxyXG4gICAgX2VuYWJsZUNhY2hpbmc/OiBib29sZWFuLFxyXG4gICAgcmVzb3VyY2VEYXRhPzogdW5rbm93blxyXG4gICk6IE9iamVjdExvYWRlcjIge1xyXG4gICAgX3Jlc291cmNlXHJcbiAgICBfYXV0aFRva2VuXHJcbiAgICBfZW5hYmxlQ2FjaGluZ1xyXG4gICAgcmVzb3VyY2VEYXRhXHJcbiAgICAvKiogVE8gRE86IEltcGxlbWVudCBlaXRoZXIgYXMgcGFydCBvZiBPYmplY3RMb2FkZXIyIGVpdGhlciBzZXBhcmF0ZSAqL1xyXG4gICAgcmV0dXJuIE9iamVjdExvYWRlcjJGYWN0b3J5LmNyZWF0ZUZyb21PYmplY3RzKFtdKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCByb290T2JqZWN0ID0gYXdhaXQgdGhpcy5sb2FkZXIuZ2V0Um9vdE9iamVjdCgpXHJcbiAgICBpZiAoIXJvb3RPYmplY3QgJiYgdGhpcy5fcmVzb3VyY2UpIHtcclxuICAgICAgTG9nZ2VyLmVycm9yKCdObyByb290IGlkIHNldCEnKVxyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIC8qKiBJZiBub3QgaWQgaXMgcHJvdmlkZWQsIHdlIG1ha2Ugb25lIHVwIGJhc2VkIG9uIHRoZSByb290IG9iamVjdCBpZCAqL1xyXG4gICAgdGhpcy5fcmVzb3VyY2UgPVxyXG4gICAgICB0aGlzLl9yZXNvdXJjZSB8fCBgL2pzb24vJHsocm9vdE9iamVjdD8uYmFzZUlkIGFzIHN0cmluZykgPz8gJ3VubmFtZWQnfWBcclxuICAgIHJldHVybiBzdXBlci5sb2FkKClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUGVyc3BlY3RpdmVDYW1lcmEgfSBmcm9tICd0aHJlZSdcclxuaW1wb3J0IHsgRXh0ZW5zaW9uIH0gZnJvbSAnLi9leHRlbnNpb25zL0V4dGVuc2lvbi5qcydcclxuaW1wb3J0IHsgVmlld2VyIH0gZnJvbSAnLi9WaWV3ZXIuanMnXHJcbmltcG9ydCB7IFZpZXdlckV2ZW50IH0gZnJvbSAnLi4vSVZpZXdlci5qcydcclxuXHJcbmV4cG9ydCBjbGFzcyBXZWJYclZpZXdlciBleHRlbmRzIFZpZXdlciB7XHJcbiAgcHVibGljIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCBzdXBlci5pbml0KClcclxuICAgIC8qKiBFbmFibGUgYXV0byBjbGVhcmluZyAqL1xyXG4gICAgdGhpcy5nZXRSZW5kZXJlcigpLnJlbmRlcmVyLmF1dG9DbGVhciA9IHRydWVcclxuICAgIHRoaXMuZ2V0UmVuZGVyZXIoKS5yZW5kZXJlci5hdXRvQ2xlYXJDb2xvciA9IHRydWVcclxuICAgIHRoaXMuZ2V0UmVuZGVyZXIoKS5yZW5kZXJlci5hdXRvQ2xlYXJEZXB0aCA9IHRydWVcclxuICAgIHRoaXMuZ2V0UmVuZGVyZXIoKS5yZW5kZXJlci5hdXRvQ2xlYXJTdGVuY2lsID0gdHJ1ZVxyXG5cclxuICAgIC8qKiBFbmFibGUgV2ViWHIgKi9cclxuICAgIHRoaXMuZ2V0UmVuZGVyZXIoKS5yZW5kZXJlci54ci5lbmFibGVkID0gdHJ1ZVxyXG4gICAgLyoqIFNldCB0aGUgYW5pbWF0aW9uIGxvb3AgdG8gb3VycyAqL1xyXG4gICAgdGhpcy5nZXRSZW5kZXJlcigpLnJlbmRlcmVyLnNldEFuaW1hdGlvbkxvb3AodGhpcy54cldyYXBwZWRSZW5kZXIuYmluZCh0aGlzKSlcclxuXHJcbiAgICAvKiogV2hlbmV2ZXIgd2UgbG9hZCBzb21ldGhpbmcsIGVuYWJsZSBhbGwgbGF5ZXJzIHNvIGl0IGFsd2F5cyBnZXRzIHJlbmRlcmVkICovXHJcbiAgICB0aGlzLm9uKFZpZXdlckV2ZW50LkxvYWRDb21wbGV0ZSwgKCkgPT4ge1xyXG4gICAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5nZXRSZW5kZXJlcigpLmJhdGNoZXIuYmF0Y2hlcylcclxuICAgICAgICB0aGlzLmdldFJlbmRlcmVyKCkuYmF0Y2hlci5iYXRjaGVzW2tdLnJlbmRlck9iamVjdC5sYXllcnMuZW5hYmxlQWxsKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKiogT3ZlcnJpZGUgdGhlIHJlbmRlciBmdW5jdGlvbiBhbiBkb24ndCBjYWxsIFNwZWNrbGVSZW5kZXJlJ3MgcmVuZGVyICovXHJcbiAgcHJvdGVjdGVkIHJlbmRlcigpIHtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5leHRlbnNpb25zKS5mb3JFYWNoKChleHQ6IEV4dGVuc2lvbikgPT4ge1xyXG4gICAgICBleHQub25SZW5kZXIoKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKiBSZW5kZXJpbmcgaXMgbm93IGRvbmUgb24gdGhyZWUncyBXZWJYciBsb29wXHJcbiAgICogIFdlIGFsc28ganVzdCByZW5kZXIgcGxhaW5seSwgbm8gcGlwZWxpbmVzLCBmb3Igc2ltcGxpY2l0eVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCB4cldyYXBwZWRSZW5kZXIoKSB7XHJcbiAgICBjb25zdCByZW5kZXJlciA9IHRoaXMuZ2V0UmVuZGVyZXIoKS5yZW5kZXJlclxyXG4gICAgY29uc3QgY2FtZXJhID0gdGhpcy5nZXRSZW5kZXJlcigpLnJlbmRlcmluZ0NhbWVyYSBhcyBQZXJzcGVjdGl2ZUNhbWVyYVxyXG4gICAgY29uc3Qgc3RvcmVMYXllcnMgPSBjYW1lcmEubGF5ZXJzLm1hc2tcclxuICAgIGNhbWVyYS5sYXllcnMuZW5hYmxlQWxsKClcclxuICAgIHJlbmRlcmVyLnJlbmRlcih0aGlzLmdldFJlbmRlcmVyKCkuc2NlbmUsIGNhbWVyYSlcclxuICAgIGNhbWVyYS5sYXllcnMuc2V0KHN0b3JlTGF5ZXJzKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBTcGVja2xlVmlld2VyIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4vdXRpbHMvTG9nZ2VyLmpzJ1xyXG5cclxuaW50ZXJmYWNlIFJlZmVyZW5jZWRPYmplY3RVcmwge1xyXG4gIG9yaWdpbjogc3RyaW5nXHJcbiAgcHJvamVjdElkOiBzdHJpbmdcclxufVxyXG5cclxuaW50ZXJmYWNlIENvbW1pdFJlZmVyZW5jZWRPYmplY3RVcmwge1xyXG4gIG9yaWdpbjogc3RyaW5nXHJcbiAgc3RyZWFtSWQ6IHN0cmluZ1xyXG4gIGNvbW1pdElkOiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlc291cmNlVXJscyhcclxuICB1cmw6IHN0cmluZyxcclxuICBhdXRoVG9rZW4/OiBzdHJpbmdcclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gIC8qKiBJJ20gdXAgZm9yIGEgYmV0dGVyIHdheSBvZiBkb2luZyB0aGlzICovXHJcbiAgaWYgKHVybC5pbmNsdWRlcygnc3RyZWFtcycpKSByZXR1cm4gZ2V0T2xkUmVzb3VyY2VVcmxzKHVybCwgYXV0aFRva2VuKVxyXG4gIHJldHVybiBnZXROZXdSZXNvdXJjZVVybHModXJsLCBhdXRoVG9rZW4pXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldE9sZFJlc291cmNlVXJscyh1cmw6IHN0cmluZywgYXV0aFRva2VuPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKVxyXG4gIGNvbnN0IHN0cmVhbUlkID0gdXJsLnNwbGl0KCcvc3RyZWFtcy8nKVsxXS5zdWJzdHJpbmcoMCwgMTApXHJcblxyXG4gIGNvbnN0IG9ianNVcmxzID0gW11cclxuICAvLyBzdXBwb3J0cyBjb21taXQgYmFzZWQgdXJsc1xyXG4gIGlmICh1cmwuaW5jbHVkZXMoJ2NvbW1pdHMnKSkge1xyXG4gICAgY29uc3QgY29tbWl0SWQgPSB1cmwuc3BsaXQoJy9jb21taXRzLycpWzFdLnN1YnN0cmluZygwLCAxMClcclxuICAgIGNvbnN0IG9ialVybCA9IGF3YWl0IGdldENvbW1pdFJlZmVyZW5jZWRPYmplY3RVcmwoXHJcbiAgICAgIHtcclxuICAgICAgICBvcmlnaW46IHBhcnNlZC5vcmlnaW4sXHJcbiAgICAgICAgc3RyZWFtSWQsXHJcbiAgICAgICAgY29tbWl0SWRcclxuICAgICAgfSxcclxuICAgICAgYXV0aFRva2VuXHJcbiAgICApXHJcbiAgICBvYmpzVXJscy5wdXNoKG9ialVybClcclxuICB9XHJcblxyXG4gIC8vIG9iamVjdCBiYXNlZCB1cmxzXHJcbiAgaWYgKHVybC5pbmNsdWRlcygnb2JqZWN0cycpKSBvYmpzVXJscy5wdXNoKHVybClcclxuXHJcbiAgLy8gc3VwcG9ydHMgdXJscyB0aGF0IGluY2x1ZGUgb3ZlcmxheSBxdWVyaWVzXHJcbiAgLy8gZS5nLiwgaHR0cHM6Ly9zcGVja2xlLnh5ei9zdHJlYW1zL2E2MzJlN2E3ODQvb2JqZWN0cy80NTdjNDVmZWZmYTZmOTU0NTcyZTVlODZmYjZkNGYyNT9vdmVybGF5PWNmOGRjNzYyNDcsZjVhZGMxZDk5MWIzZGNlYjRiNWFkNmI1MGY5MTlhMGVcclxuICBpZiAodXJsLmluY2x1ZGVzKCdvdmVybGF5PScpKSB7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcnNlZC5zZWFyY2gpXHJcbiAgICBjb25zdCByZXNJZHMgPSBzZWFyY2hQYXJhbXMuZ2V0KCdvdmVybGF5Jyk/LnNwbGl0KCcsJylcclxuICAgIGlmIChyZXNJZHMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3IgKGNvbnN0IHJlc0lkIG9mIHJlc0lkcykge1xyXG4gICAgICAgIGlmIChyZXNJZC5sZW5ndGggPT09IDEwKSB7XHJcbiAgICAgICAgICBvYmpzVXJscy5wdXNoKFxyXG4gICAgICAgICAgICBhd2FpdCBnZXRDb21taXRSZWZlcmVuY2VkT2JqZWN0VXJsKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9yaWdpbjogcGFyc2VkLm9yaWdpbixcclxuICAgICAgICAgICAgICAgIHN0cmVhbUlkLFxyXG4gICAgICAgICAgICAgICAgY29tbWl0SWQ6IHJlc0lkXHJcbiAgICAgICAgICAgICAgfSBhcyBDb21taXRSZWZlcmVuY2VkT2JqZWN0VXJsLFxyXG4gICAgICAgICAgICAgIGF1dGhUb2tlblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9ianNVcmxzLnB1c2goYCR7cGFyc2VkLm9yaWdpbn0vc3RyZWFtcy8ke3N0cmVhbUlkfS9vYmplY3RzLyR7cmVzSWR9YClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBvYmpzVXJsc1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRDb21taXRSZWZlcmVuY2VkT2JqZWN0VXJsKFxyXG4gIHJlZjogQ29tbWl0UmVmZXJlbmNlZE9iamVjdFVybCxcclxuICBhdXRoVG9rZW4/OiBzdHJpbmdcclxuKSB7XHJcbiAgY29uc3QgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogc3RyaW5nOyBBdXRob3JpemF0aW9uOiBzdHJpbmcgfSA9IHtcclxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICBBdXRob3JpemF0aW9uOiAnJ1xyXG4gIH1cclxuICBpZiAoYXV0aFRva2VuKSB7XHJcbiAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7YXV0aFRva2VufWBcclxuICB9XHJcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7cmVmLm9yaWdpbn0vZ3JhcGhxbGAsIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgaGVhZGVycyxcclxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgcXVlcnk6IGBcclxuICAgICAgICAgIHF1ZXJ5IFN0cmVhbSgkc3RyZWFtSWQ6IFN0cmluZyEsICRjb21taXRJZDogU3RyaW5nISkge1xyXG4gICAgICAgICAgICBzdHJlYW0oaWQ6ICRzdHJlYW1JZCkge1xyXG4gICAgICAgICAgICAgIGNvbW1pdChpZDogJGNvbW1pdElkKSB7XHJcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VkT2JqZWN0XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgYCxcclxuICAgICAgdmFyaWFibGVzOiB7IHN0cmVhbUlkOiByZWYuc3RyZWFtSWQsIGNvbW1pdElkOiByZWYuY29tbWl0SWQgfVxyXG4gICAgfSlcclxuICB9KVxyXG5cclxuICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHJlcy5qc29uKClcclxuICByZXR1cm4gYCR7cmVmLm9yaWdpbn0vc3RyZWFtcy8ke3JlZi5zdHJlYW1JZH0vb2JqZWN0cy8ke2RhdGEuc3RyZWFtLmNvbW1pdC5yZWZlcmVuY2VkT2JqZWN0fWBcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0TmV3UmVzb3VyY2VVcmxzKHVybDogc3RyaW5nLCBhdXRoVG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTChkZWNvZGVVUkkodXJsKSlcclxuICBjb25zdCBwYXJhbXMgPSBwYXJzZWQuaHJlZi5tYXRjaCgvW14vXSskLylcclxuICBpZiAoIXBhcmFtcykge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignTm8gbW9kZWwgb3Igb2JqZWN0IGlkcyBzcGVjaWZpZWQnKSlcclxuICB9XHJcblxyXG4gIGNvbnN0IHByb2plY3RJZCA9IHBhcnNlZC5ocmVmLnNwbGl0KCcvcHJvamVjdHMvJylbMV0uc3Vic3RyaW5nKDAsIDEwKVxyXG4gIGNvbnN0IGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6IHN0cmluZzsgQXV0aG9yaXphdGlvbjogc3RyaW5nIH0gPSB7XHJcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgQXV0aG9yaXphdGlvbjogJydcclxuICB9XHJcblxyXG4gIGlmIChhdXRoVG9rZW4pIHtcclxuICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHthdXRoVG9rZW59YFxyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVmOiBSZWZlcmVuY2VkT2JqZWN0VXJsID0ge1xyXG4gICAgb3JpZ2luOiBwYXJzZWQub3JpZ2luLFxyXG4gICAgcHJvamVjdElkXHJcbiAgfVxyXG5cclxuICBjb25zdCByZXNvdXJjZXMgPSBTcGVja2xlVmlld2VyLlZpZXdlclJvdXRlLnBhcnNlVXJsUGFyYW1ldGVycyhcclxuICAgIGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXNbMF0pXHJcbiAgKVxyXG5cclxuICBjb25zdCBwcm9taXNlcyA9IFtdXHJcbiAgZm9yIChsZXQgayA9IDA7IGsgPCByZXNvdXJjZXMubGVuZ3RoOyBrKyspIHtcclxuICAgIGNvbnN0IHJlc291cmNlOiBTcGVja2xlVmlld2VyLlZpZXdlclJvdXRlLlZpZXdlclJlc291cmNlID0gcmVzb3VyY2VzW2tdXHJcblxyXG4gICAgaWYgKFNwZWNrbGVWaWV3ZXIuVmlld2VyUm91dGUuaXNPYmplY3RSZXNvdXJjZShyZXNvdXJjZSkpIHtcclxuICAgICAgcHJvbWlzZXMucHVzaChvYmplY3RSZXNvdXJjZVRvVXJsKHJlZiwgcmVzb3VyY2UpKVxyXG4gICAgfSBlbHNlIGlmIChTcGVja2xlVmlld2VyLlZpZXdlclJvdXRlLmlzTW9kZWxSZXNvdXJjZShyZXNvdXJjZSkpIHtcclxuICAgICAgcHJvbWlzZXMucHVzaChtb2RlbFJlc291cmNlVG9VcmwoaGVhZGVycywgcmVmLCByZXNvdXJjZSkpXHJcbiAgICB9IGVsc2UgaWYgKFNwZWNrbGVWaWV3ZXIuVmlld2VyUm91dGUuaXNBbGxNb2RlbHNSZXNvdXJjZShyZXNvdXJjZSkpIHtcclxuICAgICAgcHJvbWlzZXMucHVzaChtb2RlbEFsbFJlc291cmNlVG9VcmwoaGVhZGVycywgcmVmKSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXHJcbiAgICByZXR1cm4gcmVzdWx0cy5mbGF0TWFwKCh2YWwpID0+IChBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiBbdmFsXSkpXHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgTG9nZ2VyLmVycm9yKGUpXHJcbiAgICByZXR1cm4gW11cclxuICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIG9iamVjdFJlc291cmNlVG9VcmwoXHJcbiAgcmVmOiBSZWZlcmVuY2VkT2JqZWN0VXJsLFxyXG4gIHJlc291cmNlOiBTcGVja2xlVmlld2VyLlZpZXdlclJvdXRlLlZpZXdlck9iamVjdFJlc291cmNlXHJcbik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcclxuICAgIGAke3JlZi5vcmlnaW59L3N0cmVhbXMvJHtyZWYucHJvamVjdElkfS9vYmplY3RzLyR7cmVzb3VyY2UudG9TdHJpbmcoKX1gXHJcbiAgKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBtb2RlbFJlc291cmNlVG9VcmwoXHJcbiAgaGVhZGVyczoge1xyXG4gICAgJ0NvbnRlbnQtVHlwZSc6IHN0cmluZ1xyXG4gICAgQXV0aG9yaXphdGlvbjogc3RyaW5nXHJcbiAgfSxcclxuICByZWY6IFJlZmVyZW5jZWRPYmplY3RVcmwsXHJcbiAgcmVzb3VyY2U6IFNwZWNrbGVWaWV3ZXIuVmlld2VyUm91dGUuVmlld2VyTW9kZWxSZXNvdXJjZVxyXG4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIHJldHVybiByZXNvdXJjZS52ZXJzaW9uSWRcclxuICAgID8gcnVuTW9kZWxWZXJzaW9uUXVlcnkoaGVhZGVycywgcmVmLCByZXNvdXJjZSlcclxuICAgIDogcnVuTW9kZWxMYXN0VmVyc2lvblF1ZXJ5KGhlYWRlcnMsIHJlZiwgcmVzb3VyY2UpXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIG1vZGVsQWxsUmVzb3VyY2VUb1VybChcclxuICBoZWFkZXJzOiB7XHJcbiAgICAnQ29udGVudC1UeXBlJzogc3RyaW5nXHJcbiAgICBBdXRob3JpemF0aW9uOiBzdHJpbmdcclxuICB9LFxyXG4gIHJlZjogUmVmZXJlbmNlZE9iamVjdFVybFxyXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgcmV0dXJuIHJ1bkFsbE1vZGVsc1F1ZXJ5KGhlYWRlcnMsIHJlZilcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcnVuTW9kZWxMYXN0VmVyc2lvblF1ZXJ5KFxyXG4gIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6IHN0cmluZzsgQXV0aG9yaXphdGlvbjogc3RyaW5nIH0sXHJcbiAgcmVmOiBSZWZlcmVuY2VkT2JqZWN0VXJsLFxyXG4gIHJlc291cmNlOiBTcGVja2xlVmlld2VyLlZpZXdlclJvdXRlLlZpZXdlck1vZGVsUmVzb3VyY2VcclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtyZWYub3JpZ2lufS9ncmFwaHFsYCwge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICBoZWFkZXJzLFxyXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICBxdWVyeTogYFxyXG4gICAgICAgICAgcXVlcnkgVmlld2VyVXJsSGVscGVyTW9kZWxMYXN0VmVyc2lvbigkbW9kZWxJZDogU3RyaW5nISwgJHByb2plY3RJZDogU3RyaW5nISkge1xyXG4gICAgICAgICAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XHJcbiAgICAgICAgICAgICAgbW9kZWwoaWQ6ICRtb2RlbElkKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9ucyhsaW1pdDogMSkge1xyXG4gICAgICAgICAgICAgICAgICBpdGVtcyB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZE9iamVjdFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgYCxcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgcHJvamVjdElkOiByZWYucHJvamVjdElkLFxyXG4gICAgICAgIG1vZGVsSWQ6IHJlc291cmNlLm1vZGVsSWRcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9KVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2UocmVzKVxyXG4gICAgcmV0dXJuIGAke3JlZi5vcmlnaW59L3N0cmVhbXMvJHtyZWYucHJvamVjdElkfS9vYmplY3RzLyR7ZGF0YS5wcm9qZWN0Lm1vZGVsLnZlcnNpb25zLml0ZW1zWzBdLnJlZmVyZW5jZWRPYmplY3R9YFxyXG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcclxuICAgICAgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDb3VsZCBub3QgZ2V0IG9iamVjdCBVUkxzIGZvciBwcm9qZWN0ICR7cmVmLnByb2plY3RJZH0gYW5kIG1vZGVsICR7XHJcbiAgICAgICAgICByZXNvdXJjZS5tb2RlbElkXHJcbiAgICAgICAgfS4gRXJyb3I6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZX1gXHJcbiAgICAgIClcclxuICAgIClcclxuICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJ1bk1vZGVsVmVyc2lvblF1ZXJ5KFxyXG4gIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6IHN0cmluZzsgQXV0aG9yaXphdGlvbjogc3RyaW5nIH0sXHJcbiAgcmVmOiBSZWZlcmVuY2VkT2JqZWN0VXJsLFxyXG4gIHJlc291cmNlOiBTcGVja2xlVmlld2VyLlZpZXdlclJvdXRlLlZpZXdlck1vZGVsUmVzb3VyY2VcclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtyZWYub3JpZ2lufS9ncmFwaHFsYCwge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICBoZWFkZXJzLFxyXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICBxdWVyeTogYFxyXG4gICAgICAgICAgcXVlcnkgVmlld2VyVXJsSGVscGVyTW9kZWxWZXJzaW9uKCRtb2RlbElkOiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmchLCAkdmVyc2lvbklkOiBTdHJpbmchKSB7XHJcbiAgICAgICAgICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcclxuICAgICAgICAgICAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcclxuICAgICAgICAgICAgICAgIHZlcnNpb24oaWQ6ICR2ZXJzaW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZE9iamVjdFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIGAsXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIHByb2plY3RJZDogcmVmLnByb2plY3RJZCxcclxuICAgICAgICBtb2RlbElkOiByZXNvdXJjZS5tb2RlbElkLFxyXG4gICAgICAgIHZlcnNpb25JZDogcmVzb3VyY2UudmVyc2lvbklkXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfSlcclxuICB0cnkge1xyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlKHJlcylcclxuICAgIHJldHVybiBgJHtyZWYub3JpZ2lufS9zdHJlYW1zLyR7cmVmLnByb2plY3RJZH0vb2JqZWN0cy8ke2RhdGEucHJvamVjdC5tb2RlbC52ZXJzaW9uLnJlZmVyZW5jZWRPYmplY3R9YFxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcclxuICAgICAgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDb3VsZCBub3QgZ2V0IG9iamVjdCBVUkxzIGZvciBwcm9qZWN0ICR7cmVmLnByb2plY3RJZH0gYW5kIG1vZGVsICR7XHJcbiAgICAgICAgICByZXNvdXJjZS5tb2RlbElkXHJcbiAgICAgICAgfS4gRXJyb3I6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZX1gXHJcbiAgICAgIClcclxuICAgIClcclxuICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJ1bkFsbE1vZGVsc1F1ZXJ5KFxyXG4gIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6IHN0cmluZzsgQXV0aG9yaXphdGlvbjogc3RyaW5nIH0sXHJcbiAgcmVmOiBSZWZlcmVuY2VkT2JqZWN0VXJsXHJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtyZWYub3JpZ2lufS9ncmFwaHFsYCwge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICBoZWFkZXJzLFxyXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICBxdWVyeTogYFxyXG4gICAgICAgICBxdWVyeSBWaWV3ZXJVcmxIZWxwZXJBbGxNb2RlbCgkcHJvamVjdElkOiBTdHJpbmchKSB7XHJcbiAgICAgICAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XHJcbiAgICAgICAgICAgIG1vZGVscyB7XHJcbiAgICAgICAgICAgICAgaXRlbXMge1xyXG4gICAgICAgICAgICAgICAgdmVyc2lvbnMobGltaXQ6IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWRPYmplY3RcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBgLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBwcm9qZWN0SWQ6IHJlZi5wcm9qZWN0SWRcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9KVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2UocmVzKVxyXG4gICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXVxyXG4gICAgZGF0YS5wcm9qZWN0Lm1vZGVscy5pdGVtcy5mb3JFYWNoKFxyXG4gICAgICAoZWxlbWVudDogeyB2ZXJzaW9uczogeyBpdGVtczogeyByZWZlcmVuY2VkT2JqZWN0OiBzdHJpbmcgfVtdIH0gfSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LnZlcnNpb25zLml0ZW1zLmxlbmd0aClcclxuICAgICAgICAgIHVybHMucHVzaChcclxuICAgICAgICAgICAgYCR7cmVmLm9yaWdpbn0vc3RyZWFtcy8ke3JlZi5wcm9qZWN0SWR9L29iamVjdHMvJHtlbGVtZW50LnZlcnNpb25zLml0ZW1zWzBdLnJlZmVyZW5jZWRPYmplY3R9YFxyXG4gICAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgICByZXR1cm4gdXJsc1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcclxuICAgICAgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDb3VsZCBub3QgZ2V0IG9iamVjdCBVUkxzIGZvciBwcm9qZWN0ICR7cmVmLnByb2plY3RJZH0uIEVycm9yOiAke1xyXG4gICAgICAgICAgZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZVxyXG4gICAgICAgIH1gXHJcbiAgICAgIClcclxuICAgIClcclxuICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlKHJlczogUmVzcG9uc2UpIHtcclxuICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHJlcy5qc29uKClcclxuICBpZiAoIWRhdGEpIHRocm93IG5ldyBFcnJvcihgUXVlcnkgZmFpbGVkYClcclxuXHJcbiAgaWYgKCFkYXRhLnByb2plY3QpIHRocm93IG5ldyBFcnJvcignUHJvamVjdCBub3QgZm91bmQnKVxyXG5cclxuICBpZiAoIWRhdGEucHJvamVjdC5tb2RlbCAmJiAhZGF0YS5wcm9qZWN0Lm1vZGVscykgdGhyb3cgbmV3IEVycm9yKCdNb2RlbChzKSBub3QgZm91bmQnKVxyXG5cclxuICByZXR1cm4gZGF0YVxyXG59XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvdmlld2VyL2Rpc3QvaW5kZXguanMifQ==