@kkcompany/player 1.15.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +197 -0
- package/core.js +2345 -0
- package/index.d.ts +87 -0
- package/index.esm.js +1916 -0
- package/index.js +14152 -0
- package/modules.d.ts +87 -0
- package/modules.js +8470 -0
- package/package.json +52 -0
- package/plugins.d.ts +5 -0
- package/plugins.js +8046 -0
- package/react.d.ts +148 -0
- package/react.js +9872 -0
package/index.esm.js
ADDED
|
@@ -0,0 +1,1916 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import ReactDom, { createPortal } from 'react-dom';
|
|
3
|
+
import React, { forwardRef, createContext, useRef, useState, useEffect, useMemo, useContext, useReducer, cloneElement, useLayoutEffect } from 'react';
|
|
4
|
+
import useDimensions from 'react-cool-dimensions';
|
|
5
|
+
import { ResizeObserver } from '@juggle/resize-observer';
|
|
6
|
+
import UAParser from 'ua-parser-js';
|
|
7
|
+
import require$$0 from 'react-is';
|
|
8
|
+
import { jsx as jsx$1, jsxs as jsxs$1, Fragment } from 'react/jsx-runtime';
|
|
9
|
+
import 'core-js/proposals/relative-indexing-method';
|
|
10
|
+
import { keyframes, ClassNames, css } from '@emotion/react';
|
|
11
|
+
import { jsxs, jsx, Fragment as Fragment$1 } from '@emotion/react/jsx-runtime';
|
|
12
|
+
import useOnclickOutside from 'react-cool-onclickoutside';
|
|
13
|
+
import axios from 'axios';
|
|
14
|
+
import 'mitt';
|
|
15
|
+
import 'dlv';
|
|
16
|
+
|
|
17
|
+
const handleError=async({nativeEvent:event},{reload,displayError})=>{var _event$target;console.warn(event);if(event.defaultPrevented){return;}const{code,name,data,message}=event.error||{};const lastPlayedTime=(_event$target=event.target)===null||_event$target===void 0?void 0:_event$target.currentTime;const playing=await new Promise(resolve=>{event.target.addEventListener('timeupdate',()=>{var _event$target2;return(// eslint-disable-next-line no-unsafe-optional-chaining
|
|
18
|
+
resolve(Math.abs(((_event$target2=event.target)===null||_event$target2===void 0?void 0:_event$target2.currentTime)-lastPlayedTime)>0.01));});setTimeout(resolve,3000);});if(playing){console.warn('ignore error since player is still playing',event);return;}if([code,name,data,message].every(it=>typeof it==='undefined')){console.warn('force reload to workaround shaka-player issue, see BL-1147 for details');reload();}else {displayError({code,name,data,message});}};const LanguageCode$1={EN:'en',JA:'ja',ZHTW:'zh-TW'};const ItemType$1={VIDEOS:'videos',LIVES:'lives'};/* eslint-disable no-plusplus */const parser$1=new UAParser();function getOS$1(){return parser$1.getOS();}function getDevice$1(){const device=parser$1.getDevice();const osName=getOS$1().name;if(device.type===undefined&&osName==='Android')device.type='tablet';return device;}function needNativeHls(){// Don't let Android phones play HLS, even if some of them report supported
|
|
19
|
+
// This covers Samsung & OPPO special cases
|
|
20
|
+
const isAndroid=/android|X11|Linux/i.test(navigator.userAgent);// canPlayType isn't reliable across all iOS verion / device combinations, so also check user agent
|
|
21
|
+
const isSafari=/^((?!chrome|android|X11|Linux).)*(safari|iPad|iPhone|Version)/i.test(navigator.userAgent);if(isSafari){return 'maybe';}const isFirefox=/firefox/i.test(navigator.userAgent);const isEdge=/edg/i.test(navigator.userAgent);const isChrome=/chrome/i.test(navigator.userAgent)&&!isEdge;if(isAndroid||isFirefox||isEdge||isChrome){return "";}// ref: https://stackoverflow.com/a/12905122/4578017
|
|
22
|
+
// none of our supported browsers other than Safari response to this
|
|
23
|
+
return document.createElement('video').canPlayType('application/vnd.apple.mpegURL');}const isDesktop$1=()=>!getDevice$1().type;// TODO solve lint error:
|
|
24
|
+
// navigator.maxTouchPoints() is not supported in Safari 11, iOS Safari 11.0-11.2 compat/compat
|
|
25
|
+
const isIOS=()=>/iPad|iPhone|iPod/.test(navigator.platform)||navigator.platform==='MacIntel'&&navigator.maxTouchPoints>1;// IE is no loger supported, so no special queries for it
|
|
26
|
+
const havePointer=()=>{if(havePointer.memo){return havePointer.memo;}havePointer.memo=typeof window!=='undefined'&&['(hover: hover) and (pointer: fine)','not all and (any-pointer: coarse)'].every(query=>window.matchMedia(query).matches);return havePointer.memo;};const multiRef=(...refs)=>element=>{if(element){refs.forEach(ref=>{if(ref&&'current'in ref){// eslint-disable-next-line no-param-reassign
|
|
27
|
+
ref.current=element;}else {ref===null||ref===void 0?void 0:ref(element);}});}};const on=(target,name,handler)=>{target.addEventListener(name,handler);return ()=>target.removeEventListener(name,handler);};const once=(target,name,handler)=>{const oneTime=(...args)=>{handler(...args);target.removeEventListener(name,oneTime);};target.addEventListener(name,oneTime);return ()=>target.removeEventListener(name,oneTime);};const waitFor=(check,handler)=>{const checkInterval=setInterval(()=>{if(check()){clearInterval(check);handler();}},50);return ()=>clearInterval(checkInterval);};const vendors={change:['fullscreenchange','webkitfullscreenchange','MSFullscreenChange'],element:['fullscreenElement','webkitFullscreenElement','msFullscreenElement'],request:['requestFullscreen','webkitRequestFullScreen','msRequestFullscreen'],exit:['exitFullscreen','webkitExitFullscreen','msExitFullscreen']};const getName=(object,nameList)=>nameList.find(name=>name in object);const onViewModeChange=(video,onChange)=>{const vendorElementName=getName(document,vendors.element);if(vendorElementName){onChange(document[vendorElementName]?'fullscreen':'inline');return vendors.change.map(name=>on(document,name,()=>onChange(document[vendorElementName]?'fullscreen':'inline')));}onChange(video.webkitDisplayingFullscreen?'fullscreen':'inline');const registered=[on(video,'webkitbeginfullscreen',()=>onChange('fullscreen')),on(video,'webkitendfullscreen',()=>onChange('inline'))];return ()=>{registered.forEach(removeListener=>removeListener());};};const toggleFullscreen=container=>{const vendorRequestFn=container[getName(container,vendors.request)];if(vendorRequestFn){const action=document[getName(document,vendors.element)]?'exit':'request';const target=action==='request'?container:document;return target===null||target===void 0?void 0:target[getName(target,vendors[action])]();}const target=container.querySelector('video');return target.webkitDisplayingFullscreen?target.webkitExitFullScreen():target.webkitEnterFullScreen();};/*
|
|
28
|
+
Rules:
|
|
29
|
+
1 Set `true` immediately in first time (For loadstart event)
|
|
30
|
+
2. Set `true` to waiting lazily but update waiting to `false` immediately
|
|
31
|
+
*/const useLazyWaiting=waiting=>{const[first,setFirst]=useState(true);const[state,dispatch]=useState(waiting);const timer=useRef();useEffect(()=>{clearTimeout(timer.current);if(waiting&&!first){timer.current=setTimeout(()=>{dispatch(waiting);},1000);}else {dispatch(waiting);setFirst(false);}return ()=>clearTimeout(timer.current);},[waiting]);return state;};const useAutoHide=({hideTimeMs=3000,pinned,tapToHide,onHide}={})=>{const timer=useRef();const[mode,setMode]=useState('hidden');const interact=()=>{if(mode!=='shown'){setMode('shown');}clearTimeout(timer.current);if(!pinned){timer.current=setTimeout(()=>setMode('hidden'),hideTimeMs);}};const hide=()=>{clearTimeout(timer.current);setMode('hidden');onHide===null||onHide===void 0?void 0:onHide();};useEffect(()=>{if(mode==='shown'){interact();}},[hideTimeMs]);useEffect(()=>{if(pinned){setMode('shown');clearTimeout(timer.current);}else {interact();}},[pinned]);useEffect(()=>()=>{clearTimeout(timer.current);},[]);return {mode,show:interact,hide,onClick:event=>{if(mode==='hidden'){interact();}else if(tapToHide&&event.target.tagName!=='BUTTON'){// hide if tapping on elsewhere
|
|
32
|
+
hide();}},onMouseMove:()=>{// In mobile web, emulated clicks generate extra mouse move events
|
|
33
|
+
if(!('ontouchstart'in window)){interact();}}};};var propTypes$1={exports:{}};/*
|
|
34
|
+
object-assign
|
|
35
|
+
(c) Sindre Sorhus
|
|
36
|
+
@license MIT
|
|
37
|
+
*/ /* eslint-disable no-unused-vars */var getOwnPropertySymbols$1=Object.getOwnPropertySymbols;var hasOwnProperty$1=Object.prototype.hasOwnProperty;var propIsEnumerable$1=Object.prototype.propertyIsEnumerable;function toObject$1(val){if(val===null||val===undefined){throw new TypeError('Object.assign cannot be called with null or undefined');}return Object(val);}function shouldUseNative$1(){try{if(!Object.assign){return false;}// Detect buggy property enumeration order in older V8 versions.
|
|
38
|
+
// https://bugs.chromium.org/p/v8/issues/detail?id=4118
|
|
39
|
+
var test1=new String('abc');// eslint-disable-line no-new-wrappers
|
|
40
|
+
test1[5]='de';if(Object.getOwnPropertyNames(test1)[0]==='5'){return false;}// https://bugs.chromium.org/p/v8/issues/detail?id=3056
|
|
41
|
+
var test2={};for(var i=0;i<10;i++){test2['_'+String.fromCharCode(i)]=i;}var order2=Object.getOwnPropertyNames(test2).map(function(n){return test2[n];});if(order2.join('')!=='0123456789'){return false;}// https://bugs.chromium.org/p/v8/issues/detail?id=3056
|
|
42
|
+
var test3={};'abcdefghijklmnopqrst'.split('').forEach(function(letter){test3[letter]=letter;});if(Object.keys(Object.assign({},test3)).join('')!=='abcdefghijklmnopqrst'){return false;}return true;}catch(err){// We don't expect any of the above to throw, but better to be safe.
|
|
43
|
+
return false;}}var objectAssign$1=shouldUseNative$1()?Object.assign:function(target,source){var from;var to=toObject$1(target);var symbols;for(var s=1;s<arguments.length;s++){from=Object(arguments[s]);for(var key in from){if(hasOwnProperty$1.call(from,key)){to[key]=from[key];}}if(getOwnPropertySymbols$1){symbols=getOwnPropertySymbols$1(from);for(var i=0;i<symbols.length;i++){if(propIsEnumerable$1.call(from,symbols[i])){to[symbols[i]]=from[symbols[i]];}}}}return to;};/**
|
|
44
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
45
|
+
*
|
|
46
|
+
* This source code is licensed under the MIT license found in the
|
|
47
|
+
* LICENSE file in the root directory of this source tree.
|
|
48
|
+
*/var ReactPropTypesSecret$3$1='SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';var ReactPropTypesSecret_1$1=ReactPropTypesSecret$3$1;/**
|
|
49
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
50
|
+
*
|
|
51
|
+
* This source code is licensed under the MIT license found in the
|
|
52
|
+
* LICENSE file in the root directory of this source tree.
|
|
53
|
+
*/var printWarning$1$1=function(){};if(process.env.NODE_ENV!=='production'){var ReactPropTypesSecret$2$1=ReactPropTypesSecret_1$1;var loggedTypeFailures$1={};var has$1$1=Function.call.bind(Object.prototype.hasOwnProperty);printWarning$1$1=function(text){var message='Warning: '+text;if(typeof console!=='undefined'){console.error(message);}try{// --- Welcome to debugging React ---
|
|
54
|
+
// This error was thrown as a convenience so that you can use this stack
|
|
55
|
+
// to find the callsite that caused this warning to fire.
|
|
56
|
+
throw new Error(message);}catch(x){}};}/**
|
|
57
|
+
* Assert that the values match with the type specs.
|
|
58
|
+
* Error messages are memorized and will only be shown once.
|
|
59
|
+
*
|
|
60
|
+
* @param {object} typeSpecs Map of name to a ReactPropType
|
|
61
|
+
* @param {object} values Runtime values that need to be type-checked
|
|
62
|
+
* @param {string} location e.g. "prop", "context", "child context"
|
|
63
|
+
* @param {string} componentName Name of the component for error messages.
|
|
64
|
+
* @param {?Function} getStack Returns the component stack.
|
|
65
|
+
* @private
|
|
66
|
+
*/function checkPropTypes$1$1(typeSpecs,values,location,componentName,getStack){if(process.env.NODE_ENV!=='production'){for(var typeSpecName in typeSpecs){if(has$1$1(typeSpecs,typeSpecName)){var error;// Prop type validation may throw. In case they do, we don't want to
|
|
67
|
+
// fail the render phase where it didn't fail before. So we log it.
|
|
68
|
+
// After these have been cleaned up, we'll let them throw.
|
|
69
|
+
try{// This is intentionally an invariant that gets caught. It's the same
|
|
70
|
+
// behavior as without this statement except with a better message.
|
|
71
|
+
if(typeof typeSpecs[typeSpecName]!=='function'){var err=Error((componentName||'React class')+': '+location+' type `'+typeSpecName+'` is invalid; '+'it must be a function, usually from the `prop-types` package, but received `'+typeof typeSpecs[typeSpecName]+'`.');err.name='Invariant Violation';throw err;}error=typeSpecs[typeSpecName](values,typeSpecName,componentName,location,null,ReactPropTypesSecret$2$1);}catch(ex){error=ex;}if(error&&!(error instanceof Error)){printWarning$1$1((componentName||'React class')+': type specification of '+location+' `'+typeSpecName+'` is invalid; the type checker '+'function must return `null` or an `Error` but returned a '+typeof error+'. '+'You may have forgotten to pass an argument to the type checker '+'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and '+'shape all require an argument).');}if(error instanceof Error&&!(error.message in loggedTypeFailures$1)){// Only monitor this failure once because there tends to be a lot of the
|
|
72
|
+
// same error.
|
|
73
|
+
loggedTypeFailures$1[error.message]=true;var stack=getStack?getStack():'';printWarning$1$1('Failed '+location+' type: '+error.message+(stack!=null?stack:''));}}}}}/**
|
|
74
|
+
* Resets warning cache when testing.
|
|
75
|
+
*
|
|
76
|
+
* @private
|
|
77
|
+
*/checkPropTypes$1$1.resetWarningCache=function(){if(process.env.NODE_ENV!=='production'){loggedTypeFailures$1={};}};var checkPropTypes_1$1=checkPropTypes$1$1;/**
|
|
78
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
79
|
+
*
|
|
80
|
+
* This source code is licensed under the MIT license found in the
|
|
81
|
+
* LICENSE file in the root directory of this source tree.
|
|
82
|
+
*/var ReactIs$1$1=require$$0;var assign$1=objectAssign$1;var ReactPropTypesSecret$1$1=ReactPropTypesSecret_1$1;var checkPropTypes$2=checkPropTypes_1$1;var has$2=Function.call.bind(Object.prototype.hasOwnProperty);var printWarning$2=function(){};if(process.env.NODE_ENV!=='production'){printWarning$2=function(text){var message='Warning: '+text;if(typeof console!=='undefined'){console.error(message);}try{// --- Welcome to debugging React ---
|
|
83
|
+
// This error was thrown as a convenience so that you can use this stack
|
|
84
|
+
// to find the callsite that caused this warning to fire.
|
|
85
|
+
throw new Error(message);}catch(x){}};}function emptyFunctionThatReturnsNull$1(){return null;}var factoryWithTypeCheckers$1=function(isValidElement,throwOnDirectAccess){/* global Symbol */var ITERATOR_SYMBOL=typeof Symbol==='function'&&Symbol.iterator;var FAUX_ITERATOR_SYMBOL='@@iterator';// Before Symbol spec.
|
|
86
|
+
/**
|
|
87
|
+
* Returns the iterator method function contained on the iterable object.
|
|
88
|
+
*
|
|
89
|
+
* Be sure to invoke the function with the iterable as context:
|
|
90
|
+
*
|
|
91
|
+
* var iteratorFn = getIteratorFn(myIterable);
|
|
92
|
+
* if (iteratorFn) {
|
|
93
|
+
* var iterator = iteratorFn.call(myIterable);
|
|
94
|
+
* ...
|
|
95
|
+
* }
|
|
96
|
+
*
|
|
97
|
+
* @param {?object} maybeIterable
|
|
98
|
+
* @return {?function}
|
|
99
|
+
*/function getIteratorFn(maybeIterable){var iteratorFn=maybeIterable&&(ITERATOR_SYMBOL&&maybeIterable[ITERATOR_SYMBOL]||maybeIterable[FAUX_ITERATOR_SYMBOL]);if(typeof iteratorFn==='function'){return iteratorFn;}}/**
|
|
100
|
+
* Collection of methods that allow declaration and validation of props that are
|
|
101
|
+
* supplied to React components. Example usage:
|
|
102
|
+
*
|
|
103
|
+
* var Props = require('ReactPropTypes');
|
|
104
|
+
* var MyArticle = React.createClass({
|
|
105
|
+
* propTypes: {
|
|
106
|
+
* // An optional string prop named "description".
|
|
107
|
+
* description: Props.string,
|
|
108
|
+
*
|
|
109
|
+
* // A required enum prop named "category".
|
|
110
|
+
* category: Props.oneOf(['News','Photos']).isRequired,
|
|
111
|
+
*
|
|
112
|
+
* // A prop named "dialog" that requires an instance of Dialog.
|
|
113
|
+
* dialog: Props.instanceOf(Dialog).isRequired
|
|
114
|
+
* },
|
|
115
|
+
* render: function() { ... }
|
|
116
|
+
* });
|
|
117
|
+
*
|
|
118
|
+
* A more formal specification of how these methods are used:
|
|
119
|
+
*
|
|
120
|
+
* type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
|
|
121
|
+
* decl := ReactPropTypes.{type}(.isRequired)?
|
|
122
|
+
*
|
|
123
|
+
* Each and every declaration produces a function with the same signature. This
|
|
124
|
+
* allows the creation of custom validation functions. For example:
|
|
125
|
+
*
|
|
126
|
+
* var MyLink = React.createClass({
|
|
127
|
+
* propTypes: {
|
|
128
|
+
* // An optional string or URI prop named "href".
|
|
129
|
+
* href: function(props, propName, componentName) {
|
|
130
|
+
* var propValue = props[propName];
|
|
131
|
+
* if (propValue != null && typeof propValue !== 'string' &&
|
|
132
|
+
* !(propValue instanceof URI)) {
|
|
133
|
+
* return new Error(
|
|
134
|
+
* 'Expected a string or an URI for ' + propName + ' in ' +
|
|
135
|
+
* componentName
|
|
136
|
+
* );
|
|
137
|
+
* }
|
|
138
|
+
* }
|
|
139
|
+
* },
|
|
140
|
+
* render: function() {...}
|
|
141
|
+
* });
|
|
142
|
+
*
|
|
143
|
+
* @internal
|
|
144
|
+
*/var ANONYMOUS='<<anonymous>>';// Important!
|
|
145
|
+
// Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
|
|
146
|
+
var ReactPropTypes={array:createPrimitiveTypeChecker('array'),bool:createPrimitiveTypeChecker('boolean'),func:createPrimitiveTypeChecker('function'),number:createPrimitiveTypeChecker('number'),object:createPrimitiveTypeChecker('object'),string:createPrimitiveTypeChecker('string'),symbol:createPrimitiveTypeChecker('symbol'),any:createAnyTypeChecker(),arrayOf:createArrayOfTypeChecker,element:createElementTypeChecker(),elementType:createElementTypeTypeChecker(),instanceOf:createInstanceTypeChecker,node:createNodeChecker(),objectOf:createObjectOfTypeChecker,oneOf:createEnumTypeChecker,oneOfType:createUnionTypeChecker,shape:createShapeTypeChecker,exact:createStrictShapeTypeChecker};/**
|
|
147
|
+
* inlined Object.is polyfill to avoid requiring consumers ship their own
|
|
148
|
+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
|
|
149
|
+
*/ /*eslint-disable no-self-compare*/function is(x,y){// SameValue algorithm
|
|
150
|
+
if(x===y){// Steps 1-5, 7-10
|
|
151
|
+
// Steps 6.b-6.e: +0 != -0
|
|
152
|
+
return x!==0||1/x===1/y;}else {// Step 6.a: NaN == NaN
|
|
153
|
+
return x!==x&&y!==y;}}/*eslint-enable no-self-compare*/ /**
|
|
154
|
+
* We use an Error-like object for backward compatibility as people may call
|
|
155
|
+
* PropTypes directly and inspect their output. However, we don't use real
|
|
156
|
+
* Errors anymore. We don't inspect their stack anyway, and creating them
|
|
157
|
+
* is prohibitively expensive if they are created too often, such as what
|
|
158
|
+
* happens in oneOfType() for any type before the one that matched.
|
|
159
|
+
*/function PropTypeError(message){this.message=message;this.stack='';}// Make `instanceof Error` still work for returned errors.
|
|
160
|
+
PropTypeError.prototype=Error.prototype;function createChainableTypeChecker(validate){if(process.env.NODE_ENV!=='production'){var manualPropTypeCallCache={};var manualPropTypeWarningCount=0;}function checkType(isRequired,props,propName,componentName,location,propFullName,secret){componentName=componentName||ANONYMOUS;propFullName=propFullName||propName;if(secret!==ReactPropTypesSecret$1$1){if(throwOnDirectAccess){// New behavior only for users of `prop-types` package
|
|
161
|
+
var err=new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. '+'Use `PropTypes.checkPropTypes()` to call them. '+'Read more at http://fb.me/use-check-prop-types');err.name='Invariant Violation';throw err;}else if(process.env.NODE_ENV!=='production'&&typeof console!=='undefined'){// Old behavior for people using React.PropTypes
|
|
162
|
+
var cacheKey=componentName+':'+propName;if(!manualPropTypeCallCache[cacheKey]&&// Avoid spamming the console because they are often not actionable except for lib authors
|
|
163
|
+
manualPropTypeWarningCount<3){printWarning$2('You are manually calling a React.PropTypes validation '+'function for the `'+propFullName+'` prop on `'+componentName+'`. This is deprecated '+'and will throw in the standalone `prop-types` package. '+'You may be seeing this warning due to a third-party PropTypes '+'library. See https://fb.me/react-warning-dont-call-proptypes '+'for details.');manualPropTypeCallCache[cacheKey]=true;manualPropTypeWarningCount++;}}}if(props[propName]==null){if(isRequired){if(props[propName]===null){return new PropTypeError('The '+location+' `'+propFullName+'` is marked as required '+('in `'+componentName+'`, but its value is `null`.'));}return new PropTypeError('The '+location+' `'+propFullName+'` is marked as required in '+('`'+componentName+'`, but its value is `undefined`.'));}return null;}else {return validate(props,propName,componentName,location,propFullName);}}var chainedCheckType=checkType.bind(null,false);chainedCheckType.isRequired=checkType.bind(null,true);return chainedCheckType;}function createPrimitiveTypeChecker(expectedType){function validate(props,propName,componentName,location,propFullName,secret){var propValue=props[propName];var propType=getPropType(propValue);if(propType!==expectedType){// `propValue` being instance of, say, date/regexp, pass the 'object'
|
|
164
|
+
// check, but we can offer a more precise error message here rather than
|
|
165
|
+
// 'of type `object`'.
|
|
166
|
+
var preciseType=getPreciseType(propValue);return new PropTypeError('Invalid '+location+' `'+propFullName+'` of type '+('`'+preciseType+'` supplied to `'+componentName+'`, expected ')+('`'+expectedType+'`.'));}return null;}return createChainableTypeChecker(validate);}function createAnyTypeChecker(){return createChainableTypeChecker(emptyFunctionThatReturnsNull$1);}function createArrayOfTypeChecker(typeChecker){function validate(props,propName,componentName,location,propFullName){if(typeof typeChecker!=='function'){return new PropTypeError('Property `'+propFullName+'` of component `'+componentName+'` has invalid PropType notation inside arrayOf.');}var propValue=props[propName];if(!Array.isArray(propValue)){var propType=getPropType(propValue);return new PropTypeError('Invalid '+location+' `'+propFullName+'` of type '+('`'+propType+'` supplied to `'+componentName+'`, expected an array.'));}for(var i=0;i<propValue.length;i++){var error=typeChecker(propValue,i,componentName,location,propFullName+'['+i+']',ReactPropTypesSecret$1$1);if(error instanceof Error){return error;}}return null;}return createChainableTypeChecker(validate);}function createElementTypeChecker(){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];if(!isValidElement(propValue)){var propType=getPropType(propValue);return new PropTypeError('Invalid '+location+' `'+propFullName+'` of type '+('`'+propType+'` supplied to `'+componentName+'`, expected a single ReactElement.'));}return null;}return createChainableTypeChecker(validate);}function createElementTypeTypeChecker(){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];if(!ReactIs$1$1.isValidElementType(propValue)){var propType=getPropType(propValue);return new PropTypeError('Invalid '+location+' `'+propFullName+'` of type '+('`'+propType+'` supplied to `'+componentName+'`, expected a single ReactElement type.'));}return null;}return createChainableTypeChecker(validate);}function createInstanceTypeChecker(expectedClass){function validate(props,propName,componentName,location,propFullName){if(!(props[propName]instanceof expectedClass)){var expectedClassName=expectedClass.name||ANONYMOUS;var actualClassName=getClassName(props[propName]);return new PropTypeError('Invalid '+location+' `'+propFullName+'` of type '+('`'+actualClassName+'` supplied to `'+componentName+'`, expected ')+('instance of `'+expectedClassName+'`.'));}return null;}return createChainableTypeChecker(validate);}function createEnumTypeChecker(expectedValues){if(!Array.isArray(expectedValues)){if(process.env.NODE_ENV!=='production'){if(arguments.length>1){printWarning$2('Invalid arguments supplied to oneOf, expected an array, got '+arguments.length+' arguments. '+'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).');}else {printWarning$2('Invalid argument supplied to oneOf, expected an array.');}}return emptyFunctionThatReturnsNull$1;}function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];for(var i=0;i<expectedValues.length;i++){if(is(propValue,expectedValues[i])){return null;}}var valuesString=JSON.stringify(expectedValues,function replacer(key,value){var type=getPreciseType(value);if(type==='symbol'){return String(value);}return value;});return new PropTypeError('Invalid '+location+' `'+propFullName+'` of value `'+String(propValue)+'` '+('supplied to `'+componentName+'`, expected one of '+valuesString+'.'));}return createChainableTypeChecker(validate);}function createObjectOfTypeChecker(typeChecker){function validate(props,propName,componentName,location,propFullName){if(typeof typeChecker!=='function'){return new PropTypeError('Property `'+propFullName+'` of component `'+componentName+'` has invalid PropType notation inside objectOf.');}var propValue=props[propName];var propType=getPropType(propValue);if(propType!=='object'){return new PropTypeError('Invalid '+location+' `'+propFullName+'` of type '+('`'+propType+'` supplied to `'+componentName+'`, expected an object.'));}for(var key in propValue){if(has$2(propValue,key)){var error=typeChecker(propValue,key,componentName,location,propFullName+'.'+key,ReactPropTypesSecret$1$1);if(error instanceof Error){return error;}}}return null;}return createChainableTypeChecker(validate);}function createUnionTypeChecker(arrayOfTypeCheckers){if(!Array.isArray(arrayOfTypeCheckers)){process.env.NODE_ENV!=='production'?printWarning$2('Invalid argument supplied to oneOfType, expected an instance of array.'):void 0;return emptyFunctionThatReturnsNull$1;}for(var i=0;i<arrayOfTypeCheckers.length;i++){var checker=arrayOfTypeCheckers[i];if(typeof checker!=='function'){printWarning$2('Invalid argument supplied to oneOfType. Expected an array of check functions, but '+'received '+getPostfixForTypeWarning(checker)+' at index '+i+'.');return emptyFunctionThatReturnsNull$1;}}function validate(props,propName,componentName,location,propFullName){for(var i=0;i<arrayOfTypeCheckers.length;i++){var checker=arrayOfTypeCheckers[i];if(checker(props,propName,componentName,location,propFullName,ReactPropTypesSecret$1$1)==null){return null;}}return new PropTypeError('Invalid '+location+' `'+propFullName+'` supplied to '+('`'+componentName+'`.'));}return createChainableTypeChecker(validate);}function createNodeChecker(){function validate(props,propName,componentName,location,propFullName){if(!isNode(props[propName])){return new PropTypeError('Invalid '+location+' `'+propFullName+'` supplied to '+('`'+componentName+'`, expected a ReactNode.'));}return null;}return createChainableTypeChecker(validate);}function createShapeTypeChecker(shapeTypes){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];var propType=getPropType(propValue);if(propType!=='object'){return new PropTypeError('Invalid '+location+' `'+propFullName+'` of type `'+propType+'` '+('supplied to `'+componentName+'`, expected `object`.'));}for(var key in shapeTypes){var checker=shapeTypes[key];if(!checker){continue;}var error=checker(propValue,key,componentName,location,propFullName+'.'+key,ReactPropTypesSecret$1$1);if(error){return error;}}return null;}return createChainableTypeChecker(validate);}function createStrictShapeTypeChecker(shapeTypes){function validate(props,propName,componentName,location,propFullName){var propValue=props[propName];var propType=getPropType(propValue);if(propType!=='object'){return new PropTypeError('Invalid '+location+' `'+propFullName+'` of type `'+propType+'` '+('supplied to `'+componentName+'`, expected `object`.'));}// We need to check all keys in case some are required but missing from
|
|
167
|
+
// props.
|
|
168
|
+
var allKeys=assign$1({},props[propName],shapeTypes);for(var key in allKeys){var checker=shapeTypes[key];if(!checker){return new PropTypeError('Invalid '+location+' `'+propFullName+'` key `'+key+'` supplied to `'+componentName+'`.'+'\nBad object: '+JSON.stringify(props[propName],null,' ')+'\nValid keys: '+JSON.stringify(Object.keys(shapeTypes),null,' '));}var error=checker(propValue,key,componentName,location,propFullName+'.'+key,ReactPropTypesSecret$1$1);if(error){return error;}}return null;}return createChainableTypeChecker(validate);}function isNode(propValue){switch(typeof propValue){case'number':case'string':case'undefined':return true;case'boolean':return !propValue;case'object':if(Array.isArray(propValue)){return propValue.every(isNode);}if(propValue===null||isValidElement(propValue)){return true;}var iteratorFn=getIteratorFn(propValue);if(iteratorFn){var iterator=iteratorFn.call(propValue);var step;if(iteratorFn!==propValue.entries){while(!(step=iterator.next()).done){if(!isNode(step.value)){return false;}}}else {// Iterator will provide entry [k,v] tuples rather than values.
|
|
169
|
+
while(!(step=iterator.next()).done){var entry=step.value;if(entry){if(!isNode(entry[1])){return false;}}}}}else {return false;}return true;default:return false;}}function isSymbol(propType,propValue){// Native Symbol.
|
|
170
|
+
if(propType==='symbol'){return true;}// falsy value can't be a Symbol
|
|
171
|
+
if(!propValue){return false;}// 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
|
|
172
|
+
if(propValue['@@toStringTag']==='Symbol'){return true;}// Fallback for non-spec compliant Symbols which are polyfilled.
|
|
173
|
+
if(typeof Symbol==='function'&&propValue instanceof Symbol){return true;}return false;}// Equivalent of `typeof` but with special handling for array and regexp.
|
|
174
|
+
function getPropType(propValue){var propType=typeof propValue;if(Array.isArray(propValue)){return 'array';}if(propValue instanceof RegExp){// Old webkits (at least until Android 4.0) return 'function' rather than
|
|
175
|
+
// 'object' for typeof a RegExp. We'll normalize this here so that /bla/
|
|
176
|
+
// passes PropTypes.object.
|
|
177
|
+
return 'object';}if(isSymbol(propType,propValue)){return 'symbol';}return propType;}// This handles more types than `getPropType`. Only used for error messages.
|
|
178
|
+
// See `createPrimitiveTypeChecker`.
|
|
179
|
+
function getPreciseType(propValue){if(typeof propValue==='undefined'||propValue===null){return ''+propValue;}var propType=getPropType(propValue);if(propType==='object'){if(propValue instanceof Date){return 'date';}else if(propValue instanceof RegExp){return 'regexp';}}return propType;}// Returns a string that is postfixed to a warning about an invalid type.
|
|
180
|
+
// For example, "undefined" or "of type array"
|
|
181
|
+
function getPostfixForTypeWarning(value){var type=getPreciseType(value);switch(type){case'array':case'object':return 'an '+type;case'boolean':case'date':case'regexp':return 'a '+type;default:return type;}}// Returns class name of the object, if any.
|
|
182
|
+
function getClassName(propValue){if(!propValue.constructor||!propValue.constructor.name){return ANONYMOUS;}return propValue.constructor.name;}ReactPropTypes.checkPropTypes=checkPropTypes$2;ReactPropTypes.resetWarningCache=checkPropTypes$2.resetWarningCache;ReactPropTypes.PropTypes=ReactPropTypes;return ReactPropTypes;};/**
|
|
183
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
184
|
+
*
|
|
185
|
+
* This source code is licensed under the MIT license found in the
|
|
186
|
+
* LICENSE file in the root directory of this source tree.
|
|
187
|
+
*/var ReactPropTypesSecret$4=ReactPropTypesSecret_1$1;function emptyFunction$1(){}function emptyFunctionWithReset$1(){}emptyFunctionWithReset$1.resetWarningCache=emptyFunction$1;var factoryWithThrowingShims$1=function(){function shim(props,propName,componentName,location,propFullName,secret){if(secret===ReactPropTypesSecret$4){// It is still safe when called from React.
|
|
188
|
+
return;}var err=new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. '+'Use PropTypes.checkPropTypes() to call them. '+'Read more at http://fb.me/use-check-prop-types');err.name='Invariant Violation';throw err;}shim.isRequired=shim;function getShim(){return shim;}// Important!
|
|
189
|
+
// Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
|
|
190
|
+
var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,elementType:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim,checkPropTypes:emptyFunctionWithReset$1,resetWarningCache:emptyFunction$1};ReactPropTypes.PropTypes=ReactPropTypes;return ReactPropTypes;};/**
|
|
191
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
192
|
+
*
|
|
193
|
+
* This source code is licensed under the MIT license found in the
|
|
194
|
+
* LICENSE file in the root directory of this source tree.
|
|
195
|
+
*/if(process.env.NODE_ENV!=='production'){var ReactIs$2=require$$0;// By explicitly using `prop-types` you are opting into new development behavior.
|
|
196
|
+
// http://fb.me/prop-types-in-prod
|
|
197
|
+
var throwOnDirectAccess$1=true;propTypes$1.exports=factoryWithTypeCheckers$1(ReactIs$2.isElement,throwOnDirectAccess$1);}else {// By explicitly using `prop-types` you are opting into new production behavior.
|
|
198
|
+
// http://fb.me/prop-types-in-prod
|
|
199
|
+
propTypes$1.exports=factoryWithThrowingShims$1();}var PropTypes$1=propTypes$1.exports;var en={"KKS.YES":"Yes","KKS.NO":"No","KKS.OK":"OK","KKS.CANCEL":"Cancel","KKS.TRYAGAIN":"Try again","KKS.LEAVE":"Leave","KKS.BACK":"Back","KKS.DELETE":"Delete","KKS.PLAY.WITH.QUALITY":"Play this quality","KKS.QUALITY":"Quality","KKS.SUBTITLES":"Subtitles","KKS.AUDIO":"Audio","KKS.SETTING.OFF":"off","KKS.SETTING":"Setting","KKS.SETTING.CONFLICT":"Setting conflict","KKS.CONFLICT.MESSAGE":"The video quality is higher than auto quality default setting","KKS.SETTING.AUTO":"Auto","KKS.SETTING.AUTOPLAY":"Autoplay","KKS.SETTING.VERSION":"Version","KKS.SETTING.SUBTITLE":"Subtitle","KKS.SETTING.DUBBED":"Dubbed","KKS.SETTING.SPEED":"Speed","KKS.PROGRAM.TITLE":"Can’t play program","KKS.PROGRAM.MESSAGE":"No response or this program is not on air","KKS.AUTOPLAY.NEXT.EPISODE":"Auto-play next episode","KKS.ENDROLL.COUNTDOWN":"Next: in {timeLeft} seconds","KKS.SSAI.LEARN.MORE":"Learn more","KKS.SSAI.SKIP.AD":"Skip","KKS.SSAI.SECONDS":"seconds","KKS.PLAYER.PLAY":"Play","KKS.PLAYER.PAUSE":"Pause","KKS.PLAYER.REPLAY":"Replay","KKS.PLAYER.REWIND":"Rewind","KKS.PLAYER.PREVIOUS":"Previous Video","KKS.PLAYER.NEXT":"Next Video","KKS.PLAYER.FORWARD":"Forward","KKS.PLAYER.MUTE":"Mute","KKS.PLAYER.UNMUTE":"Unmute","KKS.PLAYER.FULLSCREEN":"Full Screen","KKS.PLAYER.FULLSCREEN.EXIT":"Exit Full Screen","KKS.PLAYER.CAST":"Chromecast","KKS.PLAYER.CAST.DISCONNECT":"Stop casting","KKS.PLAYER.PLAY.NEXT":"Play next video","KKS.PLAYER.EXIT":"Leave","KKS.PLAYER.PLAYING":"Playing","KKS.PROGRAM.ENDED":"The live event has ended.\nClick OK to back to previous page.","KKS.CASTING":"You are casting via Chromecast","KKS.CAST.CONNTECTED":"[{CHROMECAST}] is connected. Now you can cast on it","KKS.CAST.STATUS":"[{VIDEO}] is casting on [{CHROMECAST}]","KKS.ERROR":"Something went wrong. Please try again later.({code})","KKS.ERROR.PLAYCRAFT.401":"Please login to play this video.({CODE})","KKS.ERROR.PLAYCRAFT.404":"This video does not exist.({CODE})","KKS.ERROR.PLAYCRAFT.429":"The user has sent too many requests in a given amount of time.({CODE})","KKS.ERROR.PLAYCRAFT.503":"Service maintenance is in progress. Please try again later.({CODE})","KKS.ERROR.PLAYCRAFT.1000":"You do not have valid permission to play this content.({CODE})","KKS.ERROR.PLAYCRAFT.1001":"Sorry, download of this video is not permitted.({CODE})","KKS.ERROR.PLAYCRAFT.1002":"You have reached the maximum number of simultaneously playback device. Please quit playback on other devices and try again.({CODE})","KKS.ERROR.PLAYCRAFT.1003":"Sorry, the service is not available in your location.({CODE})","KKS.ERROR.PLAYCRAFT.1004":"You have reached maximum allowed download limit. Please remove some downloaded video to proceed.({CODE})","KKS.ERROR.NETWORK_ERROR":"There is something wrong with your internet connection. Please kindly check and try again.({code})","KKS.ERROR.DRM_RESTRICTED_OUTPUT":"External display is not allowed in current DRM policy, please unplug external display and try again.({code}/{name})","KKS.ERROR.DEVICE_IS_NOT_SUPPORTED":"This device is not supported. Please use {allowDevices} to enjoy this video.","KKS.ERROR.OS_IS_NOT_SUPPORTED":"This os is not supported. Please use {allowOSs} to enjoy this video.","KKS.ERROR.PLEASE_UPGRADE_OS":"This os version is too low. Please upgrade to version {minVersion} or higher.","KKS.ERROR.BROWSER_IS_NOT_SUPPORTED":"This browser is not supported. Please use {allowBrowsers} to enjoy this video.","KKS.ERROR.PLEASE_UPGRADE_BROWSER":"This browser version is too low. Please upgrade to version {minVersion} or higher."};var ja={"KKS.YES":"はい","KKS.NO":"いいえ","KKS.OK":"OK","KKS.CANCEL":"キャンセル","KKS.TRYAGAIN":"再生を再開する","KKS.LEAVE":"戻る","KKS.BACK":"戻る","KKS.DELETE":"削除","KKS.PLAY.WITH.QUALITY":"この画質で再生されます","KKS.QUALITY":"映像品質","KKS.AUDIO":"音声","KKS.SETTING.OFF":"オフ","KKS.SUBTITLES":"字幕","KKS.SETTING":"再生設定","KKS.SETTING.CONFLICT":"ご視聴する動画は、デフォルト画質設定に一致しません。","KKS.CONFLICT.MESSAGE":"このビデオの画質がデフォルト設定より高いです。","KKS.SETTING.AUTO":"自動","KKS.SETTING.AUTOPLAY":"自動再生","KKS.SETTING.VERSION":"字幕・吹替","KKS.SETTING.SUBTITLE":"字幕","KKS.SETTING.DUBBED":"吹替","KKS.SETTING.SPEED":"スピード","KKS.AUTOPLAY.NEXT.EPISODE":"次のエピソードを自動で再生する。","KKS.PROGRAM.TITLE":"番組を再生できません。","KKS.PROGRAM.MESSAGE":"反応が有りません。もしくは、この番組はオンエアされていません。","KKS.ENDROLL.COUNTDOWN":"{timeLeft} 秒後に再生します","KKS.SSAI.LEARN.MORE":"もっと見る","KKS.SSAI.SKIP.AD":"スキップ","KKS.SSAI.SECONDS":"秒","KKS.PLAYER.PLAY":"再生","KKS.PLAYER.PAUSE":"一時停止","KKS.PLAYER.REPLAY":"再生","KKS.PLAYER.REWIND":"巻戻し","KKS.PLAYER.PREVIOUS":"前話","KKS.PLAYER.NEXT":"次話","KKS.PLAYER.FORWARD":"早送り","KKS.PLAYER.MUTE":"ミュート","KKS.PLAYER.UNMUTE":"ミュート解除","KKS.PLAYER.FULLSCREEN":"全画面","KKS.PLAYER.FULLSCREEN.EXIT":"全画面終了","KKS.PLAYER.CAST":"クロームキャスト","KKS.PLAYER.CAST.DISCONNECT":"クロームキャスト解除","KKS.PLAYER.PLAY.NEXT":"次話再生","KKS.PROGRAM.ENDED":"このライブイベントはすでに終了しました。\nOKをクリックして前のページに戻ってください。","KKS.PLAYER.EXIT":"終了","KKS.PLAYER.PLAYING":"放送中","KKS.CASTING":"クロームキャストによって画面が表示されています","KKS.CAST.CONNTECTED":"[{CHROMECAST}] に接続しました。今からキャストできます。","KKS.CAST.STATUS":"[{VIDEO}]は [{CHROMECAST}]にキャストしています。","KKS.ERROR":"システムエラーが発生しました。({code})","KKS.ERROR.PLAYCRAFT.401":"作品を視聴するには、ログインが必要です。({CODE})","KKS.ERROR.PLAYCRAFT.404":"ご指定の作品は見つかりませんでした。({CODE})","KKS.ERROR.PLAYCRAFT.429":"The user has sent too many requests in a given amount of time.({CODE})","KKS.ERROR.PLAYCRAFT.503":"現在システムメンテナンス中のためご利用いただけません。しばらく経ってから再度ご利用ください。({CODE})","KKS.ERROR.PLAYCRAFT.1000":"この動画を視聴する権限がありません。({CODE})","KKS.ERROR.PLAYCRAFT.1001":"ご指定の作品はダウンロードできません。({CODE})","KKS.ERROR.PLAYCRAFT.1002":"同時に利用できる上限に達したため、現在ご利用いただけません。別のデバイスでの利用が終了後にご利用をお試しください。({CODE})","KKS.ERROR.PLAYCRAFT.1003":"お客さまがご利用の地域ではご指定の作品は再生できません。({CODE})","KKS.ERROR.PLAYCRAFT.1004":"ダウンロードできる上限数に達しました。\nご利用いただくためにはダウンロード済みの作品を削除してからお試しください。({CODE})","KKS.ERROR.NETWORK_ERROR":"インターネットに接続できませんでした。設定を確認してください。({code})","KKS.ERROR.DRM_RESTRICTED_OUTPUT":"一部外部出力についてはご利用いただけません。({code}/{name})","KKS.ERROR.DEVICE_IS_NOT_SUPPORTED":"お使いのデバイスに対応していません。{allowDevices} でこの作品を見てください。","KKS.ERROR.OS_IS_NOT_SUPPORTED":"お使いのOSに対応していません。 {allowOSs} でこの作品を見てください。","KKS.ERROR.PLEASE_UPGRADE_OS":"お使いのOSが古いです。{minVersion} 以上にアップグレード してください。","KKS.ERROR.BROWSER_IS_NOT_SUPPORTED":"お使いのブラウザに対応していません。 {allowBrowsers} でこの作品を見てください。","KKS.ERROR.PLEASE_UPGRADE_BROWSER":"お使いのブラウザが古いです。 {minVersion} 以上にアップグレード してください。"};var zhTW={"KKS.YES":"是","KKS.NO":"否","KKS.OK":"OK","KKS.CANCEL":"取消","KKS.TRYAGAIN":"請再試一次","KKS.LEAVE":"離開","KKS.BACK":"返回","KKS.DELETE":"刪除","KKS.PLAY.WITH.QUALITY":"播放此畫質","KKS.QUALITY":"畫質","KKS.SUBTITLES":"字幕","KKS.AUDIO":"音訊","KKS.SETTING.OFF":"關閉","KKS.SETTING":"設定","KKS.SETTING.CONFLICT":"找不到此播放畫質","KKS.CONFLICT.MESSAGE":"這部影片可選擇高於事先設定之畫質","KKS.SETTING.AUTO":"自動","KKS.SETTING.AUTOPLAY":"自動播放","KKS.SETTING.VERSION":"Version","KKS.SETTING.SUBTITLE":"字幕","KKS.SETTING.DUBBED":"配音","KKS.SETTING.SPEED":"播放速度","KKS.AUTOPLAY.NEXT.EPISODE":"自動播放下一話","KKS.PROGRAM.TITLE":"此節目已播放完畢","KKS.PROGRAM.MESSAGE":"此節目已播放完畢","KKS.ENDROLL.COUNTDOWN":"下一話將於 {timeLeft} 秒後播放","KKS.SSAI.LEARN.MORE":"看更多","KKS.SSAI.SKIP.AD":"略過廣告","KKS.SSAI.SECONDS":"秒","KKS.PLAYER.PLAY":"播放","KKS.PLAYER.PAUSE":"暫停","KKS.PLAYER.REPLAY":"重播","KKS.PLAYER.REWIND":"前十秒","KKS.PLAYER.PREVIOUS":"上一集","KKS.PLAYER.NEXT":"下一集","KKS.PLAYER.FORWARD":"後十秒","KKS.PLAYER.MUTE":"靜音","KKS.PLAYER.UNMUTE":"解除靜音","KKS.PLAYER.FULLSCREEN":"全螢幕","KKS.PLAYER.FULLSCREEN.EXIT":"離開全螢幕","KKS.PLAYER.CAST":"Chromecast","KKS.PLAYER.CAST.DISCONNECT":"停止投放","KKS.PLAYER.PLAY.NEXT":"播放下一集","KKS.PROGRAM.ENDED":"直播已結束。\n按ok鍵回到前一頁。","KKS.PLAYER.EXIT":"離開","KKS.PLAYER.PLAYING":"播放中","KKS.CASTING":"透過Chromecast播放中。","KKS.CAST.CONNTECTED":"[{CHROMECAST}]已連結。現在可以開始投放。","KKS.CAST.STATUS":"[{VIDEO}]正在[{CHROMECAST}]上播放。","KKS.ERROR":"系統發生錯誤。請稍後再嘗試。({code})","KKS.ERROR.PLAYCRAFT.401":"請登入再播放。({CODE})","KKS.ERROR.PLAYCRAFT.404":"此影片不存在。({CODE})","KKS.ERROR.PLAYCRAFT.503":"系統正在維護中,請稍後再嘗試。({CODE})","KKS.ERROR.PLAYCRAFT.1000":"您沒有播放此影片的權限。({CODE})","KKS.ERROR.PLAYCRAFT.1001":"您沒有下載此影片的權限。({CODE})","KKS.ERROR.PLAYCRAFT.1002":"您超過同時播放上限。請關閉其他播放器後再嘗試播放。({CODE})","KKS.ERROR.PLAYCRAFT.1003":"您所在地區無法播放此影片。({CODE})","KKS.ERROR.PLAYCRAFT.1004":"您已經超過下載影片上線。請移除已下載影片後再嘗試。({CODE})","KKS.ERROR.NETWORK_ERROR":"網路連線發生錯誤,請稍後再嘗試。({code})","KKS.ERROR.DRM_RESTRICTED_OUTPUT":"此影片無法在外接螢幕上播放。請拔除外接螢幕再試一次。","KKS.ERROR.DEVICE_IS_NOT_SUPPORTED":"此裝置並不支援。請用{allowDevices}再試一次","KKS.ERROR.OS_IS_NOT_SUPPORTED":"此OS 並不支援。請用{allowOSs}再試一次。","KKS.ERROR.PLEASE_UPGRADE_OS":"此OS 並不支援。請升版到{miniVersion}以上。","KKS.ERROR.BROWSER_IS_NOT_SUPPORTED":"此瀏覽器並不支援。請使用{allowBrowsers}。","KKS.ERROR.PLEASE_UPGRADE_BROWSER":"此瀏覽器並不支援。請升版到{minVersion}以上。"};var LANGS={en,ja,'zh-tw':zhTW};const ID=PropTypes$1.oneOfType([PropTypes$1.number,PropTypes$1.string]);const LanguageCode=PropTypes$1.oneOf(Object.values(LanguageCode$1));const SupportEnvironmentItem=PropTypes$1.shape({device:PropTypes$1.shape({type:PropTypes$1.string}),os:PropTypes$1.shape({name:PropTypes$1.string,version:PropTypes$1.string}),browser:PropTypes$1.shape({name:PropTypes$1.string,version:PropTypes$1.string})});const ItemType=PropTypes$1.oneOf(Object.values(ItemType$1));const VideoInfo=PropTypes$1.shape({contentId:ID,contentType:ItemType,licenseId:ID});const TextCode=PropTypes$1.oneOf(Array.from(new Set(Object.entries(LANGS).reduce((res,langItem)=>res.concat(Object.keys(langItem[1])),[]))));var Types={LanguageCode,SupportEnvironmentItem,VideoInfo,TextCode,ItemType};({code:Types.TextCode,property:PropTypes$1.object,defaultValue:Types.TextCode,wrap:PropTypes$1.elementType});const context=/*#__PURE__*/React.createContext();const IntlProvider=({locale=LanguageCode$1.EN,messages={},children})=>{const translations=Object.assign({},LANGS[locale.toLowerCase()],messages);const formatMessage=(descriptor='',values)=>(translations[(descriptor===null||descriptor===void 0?void 0:descriptor.id)||descriptor]||'').replace(/{(\S+?)}/gi,(substring,name)=>{var _values$name;return [].concat((_values$name=values[name])!==null&&_values$name!==void 0?_values$name:substring).join(', ');})||descriptor.defaultMessage||descriptor.id||'';const intl={formatMessage,translate:formatMessage,getMessage:formatMessage};return/*#__PURE__*/jsx$1(context.Provider,{value:intl,children:children});};IntlProvider.propTypes={locale:Types.LanguageCode,messages:PropTypes$1.object,children:PropTypes$1.node};const useIntl=()=>useContext(context);const FormattedMessage=({id,defaultMessage,values})=>{const intl=useIntl();return intl.formatMessage({id,defaultMessage},values);};/* eslint-disable no-param-reassign */const VideoSourceTypeMap={'application/dash+xml':{sourceKeyName:'dash',extension:'mpd'},'application/x-mpegurl':{sourceKeyName:'hls',extension:'m3u8'}};const mimeTypes={hls:'application/x-mpegurl',dash:'application/dash+xml'};const getExtensionByType=srcType=>{var _VideoSourceTypeMap$s;return (_VideoSourceTypeMap$s=VideoSourceTypeMap[srcType])===null||_VideoSourceTypeMap$s===void 0?void 0:_VideoSourceTypeMap$s.extension;};const isStringSourceWithProperExtension=(url,srcType)=>{if(typeof url==='string'){const extension=url.split('.').at(-1);// eslint-disable-next-line eqeqeq
|
|
200
|
+
if(extension==getExtensionByType(srcType))return true;}return false;};const matchType=(source,manifestType)=>{var _source$type,_source$type2;return ((_source$type=source.type)===null||_source$type===void 0?void 0:_source$type.includes(manifestType))||((_source$type2=source.type)===null||_source$type2===void 0?void 0:_source$type2.toLowerCase())===mimeTypes[manifestType]||isStringSourceWithProperExtension(source.src||source,manifestType);};const getDrmOptions$1=fallbackDrm=>{if(!(fallbackDrm!==null&&fallbackDrm!==void 0&&fallbackDrm.url)){return;}const drmOptions={licenseUri:fallbackDrm.url,headers:fallbackDrm.headers};return {widevine:drmOptions,fairplay:{...drmOptions,certificateUri:`${fallbackDrm.url}/fairplay_cert`,...fallbackDrm.fairplay},playready:drmOptions};};/**
|
|
201
|
+
* @typedef {{src: string, type: string}} SourceObject
|
|
202
|
+
* @typedef {{hls: string, dash: string}} SourceObjectAlt backward compatiable form
|
|
203
|
+
*
|
|
204
|
+
* @param {SourceObject[]|SourceObject|SourceObjectAlt|string} sourceOptions
|
|
205
|
+
* @param {{preferManifestType?: ('dash'|'hls')}} options
|
|
206
|
+
* @return {{src: string, type: string, drm: Object}}
|
|
207
|
+
*/const getSource=(sourceOptions,{preferManifestType,fallbackDrm}={})=>{if(sourceOptions.dash||sourceOptions.hls){const{dash,hls}=sourceOptions;return getSource([hls&&{src:hls,type:mimeTypes.hls},dash&&{src:dash,type:mimeTypes.dash}].filter(Boolean),{preferManifestType,fallbackDrm});}if(!Array.isArray(sourceOptions)){return getSource([sourceOptions],{preferManifestType,fallbackDrm});}if(fallbackDrm){return getSource(sourceOptions.map(option=>({...(option.src?option:{src:option}),drm:getDrmOptions$1(fallbackDrm)})),{preferManifestType});}const matched=sourceOptions.find(source=>!preferManifestType||matchType(source,preferManifestType));const selected=matched||sourceOptions[0];if(!selected){return;}const type=matched&&preferManifestType==='hls'&&mimeTypes.hls;return {...(selected.src?selected:{src:selected}),type};};function convertToSeconds(timeString){const[hours,minutes,seconds]=timeString.split(':').map(parseFloat);return hours*3600+minutes*60+seconds;}function getPopoverPosition(rect,target,boundary){const rectX=rect.x||rect.left;const boundaryX=boundary.x||boundary.left;const maxLeft=boundary.width-rect.width;const targetCenter=(target.left+target.right)/2-boundaryX;const center=rectX+rect.width/2-boundaryX;const alignLeft=rectX+(targetCenter-center)-boundaryX;return {left:Math.max(0,Math.min(alignLeft,maxLeft)),top:target.top-rect.height};}// eslint-disable-next-line consistent-return
|
|
208
|
+
const nearest=(items,diff)=>{if(!items.length){return;}return items.reduce((a,b)=>Math.abs(diff(a))>Math.abs(diff(b))?b:a,items[0]);};/* eslint-disable no-param-reassign */const keySystems={widevine:'com.widevine.alpha',fairplay:'com.apple.fps.1_0',playready:'com.microsoft.playready'};const getDrmOptions=source=>{const drm=source.drm&&Object.entries(source.drm).reduce((result,[keySystemId,options])=>{const uri=typeof options==='string'?options:options.licenseUri;if(uri){const keySystemName=keySystems[keySystemId]||keySystemId;result.servers[keySystemName]=uri;if(options.certificateUri){result.advanced[keySystemName]={serverCertificateUri:options.certificateUri};}}return result;},{servers:{},advanced:{}});const extensions=source.drm&&Object.entries(source.drm).reduce((result,[keySystemId,options])=>{const keySystemName=keySystems[keySystemId]||keySystemId;if(options.headers||options.certificateHeaders){result[keySystemName]={headers:options.headers,...(options.certificateHeaders&&{certificateHeaders:options.certificateHeaders})};}return result;},{});return [drm,{drm:extensions}];};const FairplayKeySystem={prepareContentId:contentUri=>{const uriParts=contentUri.split('://');const contentId=uriParts[1]||'';return uriParts[0].slice(-3).toLowerCase()==='skd'?contentId:'';},prepareCertificate:cert=>new Uint8Array(cert),prepareMessage:(keyMessageEvent,keySession)=>{const spc=encodeURIComponent(keyMessageEvent.messageBase64Encoded);const assetId=encodeURIComponent(keySession.contentId);return `spc=${spc}&asset_id=${assetId}`;},prepareLicense:license=>{if(license.substr(0,5)==='<ckc>'&&license.substr(-6)==='</ckc>'){return license.slice(5,-6);}return license;}};const defaultCertificateUrl=url=>`${url===null||url===void 0?void 0:url.replace(/\/$/,'')}/fairplay_cert`;const timeoutError=()=>new Error('request timeout');/**
|
|
209
|
+
* @param {URL|RequestInfo} url
|
|
210
|
+
* @param {RequestInit} options
|
|
211
|
+
* @param {{responseType: 'json'|'text'}}
|
|
212
|
+
*/const retryRequest=(url,options={},{responseType='json',timeout=6,retryTimes=6}={})=>new Promise((resolve,reject)=>{setTimeout(()=>reject(timeoutError()),timeout*1000);fetch(url,options).then(response=>{var _response$responseTyp;return resolve(((_response$responseTyp=response[responseType])===null||_response$responseTyp===void 0?void 0:_response$responseTyp.call(response))||response);}).catch(reject);}).catch(error=>{console.log(error);if(retryTimes>0){return retryRequest(url,options,{timeout,retryTimes:retryTimes-1});}return error;});const matchAll=(input,pattern)=>{const flags=[pattern.global&&'g',pattern.ignoreCase&&'i',pattern.multiline&&'m'].filter(Boolean).join('');const clone=new RegExp(pattern,flags);return Array.from(function*(){let matched=true;while(1){matched=clone.exec(input);if(!matched){return;}yield matched;}}());};const meetRestriction=(quality,{minHeight,maxHeight}={})=>!(quality.height<minHeight||quality.height>maxHeight);const getHlsQualityOptions=async hlsUrl=>{const manifest=await retryRequest(hlsUrl,{},{responseType:'text'});const resolutionList=matchAll(manifest,/RESOLUTION=\d+x(\d+)/g);return Array.from(new Set(resolutionList.map(([,height])=>({height:+height})))).sort((a,b)=>b.height-a.height);};const selectRestrictedQuality=(availableQualities,{suggested,restrictions})=>{if(meetRestriction(suggested,restrictions)){return suggested.id;}const allowed=availableQualities.filter(quality=>meetRestriction(quality,restrictions));return (nearest(allowed,item=>item.height-suggested.height)||suggested).id;};// for unit test
|
|
213
|
+
/* eslint-disable no-param-reassign */const SHAKA_LIVE_DURATION=4294967296;const isLiveDuration=duration=>duration>=SHAKA_LIVE_DURATION;// There's always a gap between playback head & live edge,
|
|
214
|
+
// when the gap is small enough, we consider it is on edge.
|
|
215
|
+
// The magic number 10s comes from observation of YouTube
|
|
216
|
+
const LIVE_EDGE_GAP=10;const isEnded=media=>isLiveDuration(media.initialDuration)&&media.initialDuration-media.currentTime<1&&media.ended;// When donwload bandwidth is low, Safari may report time update while buffering, ignore it.
|
|
217
|
+
const isBuffered=media=>Array.from({length:media.buffered.length},(_,index)=>({start:media.buffered.start(index),end:media.buffered.end(index)})).some(// in Safari buffered is clipped to integer
|
|
218
|
+
range=>range.start<=media.currentTime&&media.currentTime<=range.end+1);const getLiveTime=(media,{player})=>{var _player$seekRange;const now=Date.now()/1000;const currentOffset=media.currentTime-media.defaultLiveOffset-now;const{start,end}=(player===null||player===void 0?void 0:(_player$seekRange=player.seekRange)===null||_player$seekRange===void 0?void 0:_player$seekRange.call(player))||{};const seekDuration=Math.min(end-start-LIVE_EDGE_GAP/2,media.seekDurationDiff+now);return {streamType:'live',startTime:-seekDuration,currentTime:currentOffset<-LIVE_EDGE_GAP?currentOffset:0,duration:seekDuration>5*LIVE_EDGE_GAP?seekDuration:0};};const getMediaTime=(media,plugins=[],player={})=>{const{duration,...data}=Object.assign(isLiveDuration(media.initialDuration)?getLiveTime(media,{player,plugins}):{currentTime:media.currentTime,bufferTime:Math.max(...Array.from({length:media.buffered.length},(_,index)=>media.buffered.end(index))),duration:media.initialDuration// monkey patched, duration may change for DASH playback
|
|
219
|
+
},...plugins.map(plugin=>{var _plugin$getPlaybackSt2;return (_plugin$getPlaybackSt2=plugin.getPlaybackStatus)===null||_plugin$getPlaybackSt2===void 0?void 0:_plugin$getPlaybackSt2.call(plugin);}));return {...data,...((isLiveDuration(media.initialDuration)||Math.abs(media.duration-media.initialDuration)<0.5)&&{duration})};};const HAVE_METADATA=1;const subscribePlaybackState=(media,updateState)=>{const lastUpdate={state:'',time:0};const updateIfChanged=(event,state)=>{// Safari may report abnormal currentTime, safe to ignore
|
|
220
|
+
if(media.currentTime>1e13){return;}lastUpdate.time=media.currentTime;lastUpdate.eventTime=Date.now();if(state!==lastUpdate.state){lastUpdate.state=state;lastUpdate.batched=media.webkitDisplayingFullscreen;if(!lastUpdate.batched){updateState(event,state);}}};const updateBufferingState=event=>{if(!media.paused&&!media.ended){updateIfChanged(event,'buffering');}};const updatePlaybackTime=event=>{if(!media.paused&&isBuffered(media)&&media.currentTime-lastUpdate.time>0.01){updateIfChanged(event,'playing');}};const updateEnd=event=>{if(isEnded(media)){updateIfChanged(event,'ended');return true;}};const registered=[on(media,'error',event=>updateIfChanged(event,'error')),on(media,'waiting',updateBufferingState),on(media,'loadstart',event=>updateIfChanged(event,'loading')),on(media,'loadedmetadata',event=>setTimeout(()=>{if(!(media.readyState>HAVE_METADATA)){updateIfChanged(event,'paused');}},1500)),on(media,'loadeddata',event=>setTimeout(()=>{if(!event.defaultPrevented){updateIfChanged(event,'paused');}},1)),on(media,'canplay',event=>{if(media.paused&&(lastUpdate.state!=='loading'||isIOS())){updateIfChanged(event,'paused');}updatePlaybackTime(event);}),on(media,'pause',event=>{if(lastUpdate.wasPausedBeforeExit){console.debug('Ignore pause from iOS exit fullscreen, but keep paused (user was paused before exit)');updateState(event,'paused');return;}// If pause happens shortly after exit fullscreen, it's likely Safari's auto-pause
|
|
221
|
+
if(Date.now()-lastUpdate.endFullscreenAt<5*500){lastUpdate.endFullscreenAt=0;media.play();console.debug('Ignore pause from iOS exit fullscreen');return;}if(!updateEnd(event)){updateIfChanged(event,'paused');}}),on(media,'seeking',updateBufferingState),on(media,'seeked',event=>{if(lastUpdate.state==='loading'){updateIfChanged(event,'paused');}}),on(media,'timeupdate',updatePlaybackTime),on(media,'ended',updateEnd),on(media,'webkitendfullscreen',event=>{const exitFullscreenTime=Date.now();lastUpdate.endFullscreenAt=exitFullscreenTime;// Track if user was paused before exit
|
|
222
|
+
lastUpdate.wasPausedBeforeExit=lastUpdate.state==='paused';// webkitDisplayingFullscreen is still true at the moment, can sync bake to target state
|
|
223
|
+
// if paused by native exit fullscreen button, should resume playing
|
|
224
|
+
// Only resume if pause happened very recently (iOS auto-pause), not if user paused before exit
|
|
225
|
+
if(lastUpdate.state==='paused'&&!lastUpdate.wasPausedBeforeExit&&exitFullscreenTime-lastUpdate.eventTime<500){waitFor(()=>!media.webkitDisplayingFullscreen,()=>updateState(event,'playing'));}else {// sync back current playback state in fullscreen
|
|
226
|
+
updateState(event,lastUpdate.state);}})];return ()=>registered.forEach(off=>off());};const tryPatchHlsVideoQualities=async(player,hlsUrl)=>{if(/(^data)|(mp4$)/.test(hlsUrl)){return;}// filtered manifest comes with data URI and should be ignored
|
|
227
|
+
const videoQualities=await getHlsQualityOptions(hlsUrl).catch(e=>{console.warn('Failed to get HLS video qualities',e);});if(videoQualities){player.getAvailableVideoQualities=()=>videoQualities;}};const load=async(media,{player,startTime,plugins=[],drm},source)=>{const preferManifestType=needNativeHls()?'hls':'dash';const preferred=getSource(source,{preferManifestType,fallbackDrm:drm});// There's no use case that changing DRM options without changing manifest URL, just skip
|
|
228
|
+
if(player.lastSrc===(preferred===null||preferred===void 0?void 0:preferred.src)){console.info('src is unchanged, skip load',preferred.src);return;}player.lastSrc=preferred===null||preferred===void 0?void 0:preferred.src;// playlog v2 depends on this event
|
|
229
|
+
media.dispatchEvent(new Event('loadstart'));const merged=await plugins.reduce(async(loadChain,plugin)=>{var _plugin$load;const currentSource=await loadChain;const overrides=await((_plugin$load=plugin.load)===null||_plugin$load===void 0?void 0:_plugin$load.call(plugin,currentSource,{video:media,player,source:currentSource,startTime,streamFormat:preferManifestType,reload:async()=>{// Bitmovin unexpectedly restores muted state, so save to restore
|
|
230
|
+
const restoreMuted=player.isMuted&&{muted:player.isMuted()};player.lastSrc='';await load(media,{player,startTime,plugins,drm},source);if(restoreMuted){player[restoreMuted.muted?'mute':'unmute']();}}}));return overrides?{...currentSource,...(overrides.url&&{src:overrides.url}),...(overrides.startTime>=0&&{startTime:overrides.startTime})}:currentSource;},{...preferred,startTime});media.addEventListener('durationchange',()=>{// media duration may change when playing VOD to live or SSAI streams, save it here for convenience
|
|
231
|
+
media.initialDuration=media.duration;},{once:true});media.seekDurationDiff=-Infinity;once(media,'loadeddata',()=>{const seekToStart=(delay=1)=>{if(merged.startTime>0||merged.startTime<0){// Safari may glitch if seek immediately, so wait a little bit
|
|
232
|
+
setTimeout(()=>seek(media,{player,plugins},merged.startTime),delay);}};if(player.isLive()){player.shouldPlayFromEdge=player.isLive()&&!(merged.startTime<0);once(media,'timeupdate',()=>{player.shouldPlayFromEdge=false;const{start,end}=player.seekRange();media.defaultLiveOffset=media.currentTime-Date.now()/1000;media.seekDurationDiff=end-start-Date.now()/1000-LIVE_EDGE_GAP/2;seekToStart();});}else {seekToStart();}});const[drmOptions,extensions]=getDrmOptions(preferred);player.configure({drm:drmOptions});player.configureExtensions(extensions);let loadStartTime;if(merged.type!=='application/x-mpegurl'){loadStartTime=merged.startTime;}else if(merged.startTime>0){once(media,'loadeddata',event=>{event.preventDefault();setTimeout(()=>{media.currentTime=merged.startTime;},66);});}if(merged.type==='application/x-mpegurl'){await tryPatchHlsVideoQualities(player,merged.src);}player.lastSeek=0;player.reload=()=>player.unload().then(()=>player.load(merged.src,loadStartTime,merged.type));return player.unload().then(()=>player.load(merged.src,loadStartTime,merged.type)).catch(error=>{media.dispatchEvent(Object.assign(new CustomEvent('error'),{error}));});};const waitMediaReady=media=>media.readyState>=HAVE_METADATA||new Promise(resolve=>{media.addEventListener('loadedmetadata',resolve,{once:true});});const seek=async(media,{player,plugins=[]},time,issuer)=>{if(media.readyState<HAVE_METADATA){await new Promise(resolve=>{media.addEventListener('loadeddata',resolve,{once:true});});}// TODO skip seeking to too near point, consider SSAI cases
|
|
233
|
+
const seekPlugin=plugins.find(plugin=>typeof plugin.handleSeek==='function'&&plugin.isActive());const seekInternal=seekTime=>{var _player$isLive,_player$seek;// seeking to end video may cause Shaka glich, so move back a little
|
|
234
|
+
if(seekTime<=media.duration+7&&seekTime>=media.duration-1.0){return seekInternal(media.duration-1.1);}player.shouldPlayFromEdge=false;const seekOrigin=(_player$isLive=player.isLive)!==null&&_player$isLive!==void 0&&_player$isLive.call(player)?media.defaultLiveOffset+Date.now()/1000:0;// when playing in Bitmovin, must call player.seek to sync internal time
|
|
235
|
+
(_player$seek=player.seek)===null||_player$seek===void 0?void 0:_player$seek.call(player,seekTime,issuer);// player.seek sets time after adding segments,
|
|
236
|
+
// set again to reflect instantly
|
|
237
|
+
if(Math.abs(seekTime)<=LIVE_EDGE_GAP&&seekOrigin!==0){player.lastSeek=0;player.goToLive();}else {player.lastSeek=seekTime;media.currentTime=seekTime+seekOrigin;}once(media,'seeked',()=>{// when seeking to the end it may result in a few seconds earlier
|
|
238
|
+
if(Math.abs(seekTime+seekOrigin-media.currentTime)>0.5){media.currentTime=seekTime+seekOrigin;}});};if(seekPlugin){seekPlugin.handleSeek(time,seekInternal);}else {seekInternal(time);}};const toggleMute$1=media=>{media.muted=!media.muted;if(!media.muted){media.volume=Math.max(media.volume,0.05);}};const setVolume$1=(media,{player},level)=>{const capped=Math.max(0,Math.min(level,1));media.muted=capped<=0;// to keep volume for unmute
|
|
239
|
+
if(capped>0){var _player$setVolume;player===null||player===void 0?void 0:(_player$setVolume=player.setVolume)===null||_player$setVolume===void 0?void 0:_player$setVolume.call(player,capped*100);media.volume=capped;}if(capped<=0){var _player$mute;player===null||player===void 0?void 0:(_player$mute=player.mute)===null||_player$mute===void 0?void 0:_player$mute.call(player);}};const syncPlaybackState=async(media,{player,plugins=[]},target)=>{if(media.webkitDisplayingFullscreen||media.paused===(target==='paused')){return;// iOS fullscreen is native UI only, no need to sync
|
|
240
|
+
}if(target==='paused'){return media.pause();}// wait until the media is ready for play() calls
|
|
241
|
+
await waitMediaReady(media);if(isEnded(media)){seek(media,{player},0);}if(media.paused){var _player$play;const onResumePlugin=plugins.find(p=>{var _p$isActive;return p.onResume&&((_p$isActive=p.isActive)===null||_p$isActive===void 0?void 0:_p$isActive.call(p));});if(onResumePlugin){onResumePlugin.onResume();}else if(player.isLive()&&player.lastSeek>-LIVE_EDGE_GAP){player.goToLive();}(_player$play=player.play)===null||_player$play===void 0?void 0:_player$play.call(player).catch(error=>console.warn(error));return media.play().catch(error=>{console.log('autoplay blocked',error);return Promise.reject(error);});}};const setPlaybackRate=(media,{player},rate)=>{var _player$setPlaybackSp;if(!rate)return;player===null||player===void 0?void 0:(_player$setPlaybackSp=player.setPlaybackSpeed)===null||_player$setPlaybackSp===void 0?void 0:_player$setPlaybackSp.call(player,rate);media.playbackRate=rate;};const setQuality=(_,{player},restrictions)=>{var _player$setAdaptation,_player$setQuality;// For Bitmovin
|
|
242
|
+
(_player$setAdaptation=player.setAdaptationHandler)===null||_player$setAdaptation===void 0?void 0:_player$setAdaptation.call(player,({availableQualities,suggested})=>selectRestrictedQuality(availableQualities,{suggested,restrictions}));// For Shaka
|
|
243
|
+
(_player$setQuality=player.setQuality)===null||_player$setQuality===void 0?void 0:_player$setQuality.call(player,restrictions);};const getSubtitles=(_,{player})=>{var _player$getSubtitles;if(!player)return [];// For missing tag CLOSED-CAPTIONS=NONE in .m3u8
|
|
244
|
+
const filterHandler=track=>track.value!=='unknown'&&track.label;return (player===null||player===void 0?void 0:(_player$getSubtitles=player.getSubtitles())===null||_player$getSubtitles===void 0?void 0:_player$getSubtitles.filter(filterHandler))||[];};const subscribeSubtitles=(_,{player},updateSubtitles)=>{var _player$on,_player$on2;const handleEnter=event=>{const{text,start,end,subtitleId:id}=event;updateSubtitles({id,text,start,end});};const handleExit=()=>updateSubtitles({text:''});(_player$on=player.on)===null||_player$on===void 0?void 0:_player$on.call(player,'cueenter',handleEnter);(_player$on2=player.on)===null||_player$on2===void 0?void 0:_player$on2.call(player,'cueexit',handleExit);return ()=>{var _player$off,_player$off2;updateSubtitles({text:''});(_player$off=player.off)===null||_player$off===void 0?void 0:_player$off.call(player,'cueenter',handleEnter);(_player$off2=player.off)===null||_player$off2===void 0?void 0:_player$off2.call(player,'cueeexit',handleExit);};};const getAudio=(_,{player})=>{var _player$getAudio;return player===null||player===void 0?void 0:(_player$getAudio=player.getAudio())===null||_player$getAudio===void 0?void 0:_player$getAudio.lang;};const getAudioList=(_,{player})=>{if(!player)return [];return player.getAudioList();};const blurPause=(media,pause)=>{const handleVisibilitychange=async()=>{let shouldPause=true;pause();setTimeout(()=>{shouldPause=false;},50);media.addEventListener('play',()=>{if(shouldPause){pause();}},{once:true});};document.addEventListener('visibilitychange',handleVisibilitychange);return ()=>document.removeEventListener('visibilitychange',handleVisibilitychange);};var icon={pause:'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMSA2QzkuODk1NDMgNiA5IDYuODk1NDMgOSA4VjQwQzkgNDEuMTA0NiA5Ljg5NTQzIDQyIDExIDQySDE3QzE4LjEwNDYgNDIgMTkgNDEuMTA0NiAxOSA0MFY4QzE5IDYuODk1NDMgMTguMTA0NiA2IDE3IDZIMTFaTTMxIDZDMjkuODk1NCA2IDI5IDYuODk1NDMgMjkgOFY0MEMyOSA0MS4xMDQ2IDI5Ljg5NTQgNDIgMzEgNDJIMzdDMzguMTA0NiA0MiAzOSA0MS4xMDQ2IDM5IDQwVjhDMzkgNi44OTU0MyAzOC4xMDQ2IDYgMzcgNkgzMVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=',play:'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCA4LjUxMzQ3QzEwIDYuOTYzIDExLjY4NzkgNi4wMDIxOSAxMy4wMjExIDYuNzkzNzZMMzkuMTAzNiAyMi4yODAzQzQwLjQwODkgMjMuMDU1MyA0MC40MDg5IDI0Ljk0NDcgMzkuMTAzNiAyNS43MTk3TDEzLjAyMTEgNDEuMjA2MkMxMS42ODc5IDQxLjk5NzggMTAgNDEuMDM3IDEwIDM5LjQ4NjVWOC41MTM0N1oiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=',replay:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCI+PGRlZnM+PGZpbHRlciBpZD0iYSIgaGVpZ2h0PSIxNTAlIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjMiLz48ZmVPZmZzZXQgZHg9IjIiIGR5PSIyIiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuNyIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBmaWx0ZXI9InVybCgjYSkiPjxwYXRoIGQ9Ik00MC41IDl2OC45YTI1LjYgMjUuNiAwIDEgMS0yNS42IDI0LjVINnYxLjFBMzQuNSAzNC41IDAgMSAwIDQwLjUgOXoiLz48cGF0aCBkPSJNNDAgMHYyN0wyMCAxMy41eiIvPjwvZz48L3N2Zz4=',back:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz48ZyBmaWxsPSdub25lJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnPjxwYXRoIGQ9J00wIDBoMzZ2MzZIMHonIG9wYWNpdHk9Jy41Jy8+PHBhdGggc3Ryb2tlPScjRkZGJyBzdHJva2Utd2lkdGg9JzQnIGQ9J00yMCAyTDQgMThsMTYgMTZNNSAxOGgzMC4wMDcnLz48L2c+PC9zdmc+Cg==',forward10:'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQyLjExODYgMjQuMzU1MkM0MC44MDgyIDI0LjM1NTIgMzkuNzM2MiAyNS40MjczIDM5LjczNjIgMjYuNzM3NkMzOS43MzYyIDM1LjI3ODUgMzIuNzkxNCA0Mi4yMjMzIDI0LjI1MDUgNDIuMjIzM0MxNS43MDk1IDQyLjIyMzMgOC43NjQ4MiAzNS4yNzg1IDguNzY0ODIgMjYuNzM3NkM4Ljc2NDgyIDE4LjE5NjcgMTUuMDc4MiAxMS45MTkgMjMuMDU5MyAxMS4zMTE1VjE0LjM2MUMyMy4wNTkzIDE1LjgxNDMgMjQuNjkxMiAxNi42NiAyNS44NzA1IDE1LjgyNjJMMzQuMDg5OCAxMC4wMzY5QzM1LjEwMjQgOS4zMjIxOSAzNS4xMDI0IDcuODMzMTggMzQuMDg5OCA3LjExODQ2TDI1Ljg3MDUgMS4zMjkyQzI0LjY5MTIgMC40OTUzNTcgMjMuMDU5MyAxLjM0MTExIDIzLjA1OTMgMi43OTQzOFY2LjU1ODU5QzEyLjQ0NTYgNy4xNzgwMiA0IDE1Ljk4MSA0IDI2Ljc0OTVDNCAzNy41MTggMTMuMDg4OSA0NyAyNC4yNTA1IDQ3QzM1LjQxMjEgNDcgNDQuNTAxIDM3LjkxMTEgNDQuNTAxIDI2Ljc0OTVDNDQuNTAxIDI1LjQzOTIgNDMuNDI4OSAyNC4zNjcxIDQyLjExODYgMjQuMzY3MVYyNC4zNTUyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE4LjQ5NjkgMzQuMTk0NUgxOC45NDk2QzE5LjYwNDcgMzQuMTk0NSAyMC4xNDA4IDMzLjY1ODUgMjAuMTQwOCAzMy4wMDMzVjIwLjk2MDJDMjAuMTQwOCAyMC4zMDUxIDE5LjYwNDcgMTkuNzY5IDE4Ljk0OTYgMTkuNzY5SDE4LjU1NjVDMTguMzA2MyAxOS43NjkgMTguMDU2MiAxOS44NTI0IDE3Ljg1MzcgMTkuOTk1NEwxNC40ODI1IDIyLjQ0OTNDMTQuMjIwNSAyMi42Mzk4IDE0LjA1MzcgMjIuOTI1NyAxNC4wMDYxIDIzLjIzNTRDMTMuOTU4NCAyMy41NTcxIDE0LjA0MTggMjMuODc4NyAxNC4yMzI0IDI0LjEyODlMMTQuNTA2NCAyNC40ODYyQzE0Ljg5OTUgMjUuMDEwMyAxNS42MzggMjUuMTE3NiAxNi4xNjIxIDI0LjcyNDVMMTcuMzA1NyAyMy44Nzg3VjMyLjk5MTRDMTcuMzA1NyAzMy42NDY2IDE3Ljg0MTcgMzQuMTgyNiAxOC40OTY5IDM0LjE4MjZWMzQuMTk0NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yOC40NDM1IDE5LjY4NTdDMjcuMTY5IDE5LjY4NTcgMjYuMTIwNyAyMC4wNjY5IDI1LjMzNDUgMjAuODA1NEMyNC42MDc5IDIxLjQ4NDQgMjQuMDgzNyAyMi40MTM1IDIzLjc4NTkgMjMuNTQ1MkMyMy41MjM5IDI0LjU1NzcgMjMuMzgwOSAyNS43MjUxIDIzLjM4MDkgMjcuMDExNkMyMy4zODA5IDI5LjM5NCAyMy43NzQgMzEuMTMzMSAyNC41NzIxIDMyLjM2MDFDMjUuNDUzNiAzMy42OTQyIDI2Ljc4NzggMzQuNDA5IDI4LjQzMTYgMzQuNDA5QzMwLjA3NTUgMzQuNDA5IDMxLjQ5MyAzMy42ODIzIDMyLjMzODggMzIuMjg4NkMzMy4wODkyIDMxLjA2MTcgMzMuNDU4NSAyOS4zMzQ0IDMzLjQ1ODUgMjcuMDExNkMzMy40NTg1IDI1LjcwMTMgMzMuMzM5NCAyNC41MzM5IDMzLjEwMTIgMjMuNTMzM0MzMi44MjcyIDIyLjM4OTcgMzIuMzI2OSAyMS40NzI1IDMxLjYwMDIgMjAuNzkzNUMzMC44MjYgMjAuMDY2OSAyOS43NjU4IDE5LjY5NzYgMjguNDU1NSAxOS42OTc2TDI4LjQ0MzUgMTkuNjg1N1pNMjkuOTU2NCAzMC43NjM5QzI5LjczIDMxLjE1NyAyOS4zNzI3IDMxLjU3MzkgMjguNDE5NyAzMS41NzM5QzI3LjcxNjkgMzEuNTczOSAyNy4yNjQyIDMxLjMyMzcgMjYuOTA2OSAzMC43NDAxQzI2LjU5NzIgMzAuMjI3OCAyNi4yMjc5IDI5LjE2NzcgMjYuMjI3OSAyNy4wMTE2QzI2LjIyNzkgMjYuMDExIDI2LjMyMzIgMjUuMTE3NiAyNi41MDE5IDI0LjM1NTJDMjYuNjU2NyAyMy43MjM5IDI2LjkwNjkgMjMuMjM1NSAyNy4yNDA0IDIyLjkxMzhDMjcuNTAyNSAyMi42NTE4IDI3Ljg5NTYgMjIuNTIwNyAyOC40NDM1IDIyLjUyMDdDMjguOTkxNSAyMi41MjA3IDI5LjQwODQgMjIuNjM5OSAyOS42NzA1IDIyLjg5QzI5Ljk4MDIgMjMuMTk5NyAzMC4yMTg0IDIzLjY2NDMgMzAuMzQ5NSAyNC4yODM3QzMwLjUxNjIgMjUuMDQ2MSAzMC42MTE1IDI1Ljk2MzMgMzAuNjExNSAyNy4wMTE2QzMwLjYxMTUgMjkuMTY3NyAzMC4yNjYxIDMwLjIzOTcgMjkuOTY4MyAzMC43NjM5SDI5Ljk1NjRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K',rewind10:'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI1LjQ0NzIgNi41NjAwM1YyLjc5NDg1QzI1LjQ0NzIgMS4zNDEyIDIzLjgxNDkgMC40OTUyMjYgMjIuNjM1MyAxLjMyOTI5TDE0LjQxMzggNy4xMjAwNEMxMy40MDEgNy44MzQ5NSAxMy40MDEgOS4zMjQzNCAxNC40MTM4IDEwLjAzOTNMMjIuNjM1MyAxNS44M0MyMy44MTQ5IDE2LjY2NDEgMjUuNDQ3MiAxNS44MTgxIDI1LjQ0NzIgMTQuMzY0NFYxMS4zMTQyQzMzLjQzMDQgMTEuOTIxOCAzOS43NDU0IDE4LjYwNjIgMzkuNzQ1NCAyNi43NDQzQzM5Ljc0NTQgMzUuMjg3NCAzMi43OTg5IDQyLjIzMzkgMjQuMjU1NyA0Mi4yMzM5QzE1LjcxMjYgNDIuMjMzOSA4Ljc2NjA1IDM1LjI4NzQgOC43NjYwNSAyNi43NDQzQzguNzY2MDUgMjUuNDMzNiA3LjY5MzY5IDI0LjM2MTIgNi4zODMwMyAyNC4zNjEyQzUuMDcyMzYgMjQuMzYxMiA0IDI1LjQzMzYgNCAyNi43NDQzQzQgMzcuOTA4OCAxMy4wOTEyIDQ3IDI0LjI1NTcgNDdDMzUuNDIwMiA0NyA0NC41MTE1IDM3LjkwODggNDQuNTExNSAyNi43NDQzQzQ0LjUxMTUgMTUuNTc5OCAzNi4wNjM2IDcuMTY3NyAyNS40NDcyIDYuNTQ4MTJWNi41NjAwM1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xOC41MDA3IDM0LjIxNUgxOC45NTM1QzE5LjYwODggMzQuMjE1IDIwLjE0NSAzMy42Nzg4IDIwLjE0NSAzMy4wMjM1VjIwLjk3NzNDMjAuMTQ1IDIwLjMyMTkgMTkuNjA4OCAxOS43ODU4IDE4Ljk1MzUgMTkuNzg1OEgxOC41NjAzQzE4LjMxMDEgMTkuNzg1OCAxOC4wNTk4IDE5Ljg2OTIgMTcuODU3MyAyMC4wMTIyTDE0LjQ4NTMgMjIuNDY2N0MxNC4yMjMyIDIyLjY1NzMgMTQuMDU2NCAyMi45NDMzIDE0LjAwODcgMjMuMjUzMUMxMy45NjEgMjMuNTc0OCAxNC4wNDQ0IDIzLjg5NjUgMTQuMjM1MSAyNC4xNDY3TDE0LjUwOTEgMjQuNTA0MkMxNC45MDIzIDI1LjAyODQgMTUuNjQxMSAyNS4xMzU3IDE2LjE2NTMgMjQuNzQyNUwxNy4zMDkyIDIzLjg5NjVWMzMuMDExNkMxNy4zMDkyIDMzLjY2NjkgMTcuODQ1NCAzNC4yMDMxIDE4LjUwMDcgMzQuMjAzMVYzNC4yMTVaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjguNDM4IDM0LjQyOTVDMzAuMTUzOCAzNC40Mjk1IDMxLjUwMDIgMzMuNzAyNyAzMi4zNDYyIDMyLjMwODdDMzMuMDk2OCAzMS4wODE0IDMzLjQ2NjIgMjkuMzUzNyAzMy40NjYyIDI3LjAzMDJDMzMuNDY2MiAyNS43MTk2IDMzLjM0NyAyNC41NTE5IDMzLjEwODcgMjMuNTUxQzMyLjgzNDcgMjIuNDA3MiAzMi4zMzQyIDIxLjQ4OTcgMzEuNjA3NCAyMC44MTA1QzMwLjgzMjkgMjAuMDgzNyAyOS43NzI1IDE5LjcxNDQgMjguNDYxOCAxOS43MTQ0QzI3LjE1MTIgMTkuNzE0NCAyNi4xMzg0IDIwLjA5NTYgMjUuMzUyIDIwLjgzNDRDMjQuNjI1MSAyMS41MTM1IDI0LjEwMDkgMjIuNDQyOSAyMy44MDMgMjMuNTc0OUMyMy41NDA5IDI0LjU4NzYgMjMuMzk3OSAyNS43NTUzIDIzLjM5NzkgMjcuMDQyMkMyMy4zOTc5IDI5LjQyNTIgMjMuNzkxMSAzMS4xNjQ4IDI0LjU4OTQgMzIuMzkyMUMyNS40NzExIDMzLjcyNjYgMjYuODA1NiAzNC40NDE1IDI4LjQ0OTkgMzQuNDQxNUwyOC40MzggMzQuNDI5NVpNMjYuNTE5NyAyNC4zODUxQzI2LjY3NDUgMjMuNzUzNiAyNi45MjQ4IDIzLjI2NTEgMjcuMjU4NCAyMi45NDM0QzI3LjUyMDUgMjIuNjgxMiAyNy45MTM3IDIyLjU1MDIgMjguNDYxOCAyMi41NTAyQzI5LjAwOTkgMjIuNTUwMiAyOS40MjY5IDIyLjY2OTMgMjkuNjg5MSAyMi45MTk1QzI5Ljk5ODkgMjMuMjI5MyAzMC4yMzcyIDIzLjY5NCAzMC4zNjgyIDI0LjMxMzZDMzAuNTM1MSAyNS4wNzYyIDMwLjYzMDQgMjUuOTkzNiAzMC42MzA0IDI3LjA0MjJDMzAuNjMwNCAyOS4xOTg4IDMwLjI4NDggMzAuMjcxMiAyOS45ODcgMzAuNzk1NEMyOS43NjA2IDMxLjE4ODYgMjkuNDAzMSAzMS42MDU3IDI4LjQ0OTkgMzEuNjA1N0MyNy43NDY5IDMxLjYwNTcgMjcuMjk0MSAzMS4zNTU0IDI2LjkzNjcgMzAuNzcxNkMyNi42MjY5IDMwLjI1OTIgMjYuMjU3NSAyOS4xOTg4IDI2LjI1NzUgMjcuMDQyMkMyNi4yNTc1IDI2LjA0MTMgMjYuMzUyOCAyNS4xNDc3IDI2LjUzMTYgMjQuMzg1MUgyNi41MTk3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==',volumeHigh:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTIxLjgwOCAxYTE2LjI2NSAxNi4yNjUgMCAwIDEgNi43NzcgMy4yMTkgMTYuOTEgMTYuOTEgMCAwIDEgNC42OTIgNS44MDJBMTYuOTYgMTYuOTYgMCAwIDEgMzUgMTcuNTQ3YzAgMi42Ni0uNTc0IDUuMTY4LTEuNzIzIDcuNTI1YTE2LjkxIDE2LjkxIDAgMCAxLTQuNjkyIDUuODAzIDE2LjI2NSAxNi4yNjUgMCAwIDEtNi43NzcgMy4yMTh2LTMuODk4YTEyLjQ1NiAxMi40NTYgMCAwIDAgNC44NS0yLjYzIDEzLjE2OCAxMy4xNjggMCAwIDAgMy4zMzMtNC40NjUgMTMuMTA5IDEzLjEwOSAwIDAgMCAxLjIwMS01LjU1M2MwLTEuOTY1LS40LTMuODE2LTEuMjAxLTUuNTU0YTEzLjE2OCAxMy4xNjggMCAwIDAtMy4zMzItNC40NjUgMTIuNDU2IDEyLjQ1NiAwIDAgMC00Ljg1MS0yLjYzVjF6Jy8+IDxwYXRoIGZpbGw9JyNGRkYnIGQ9J00yNi41MjMgMTcuNTQ3YzAgMS42NjItLjQyMyAzLjE2NS0xLjI3IDQuNTFhOC40NTMgOC40NTMgMCAwIDEtMy40NDUgMy4xMDZWOS45M2MxLjQ1LjcyNSAyLjYgMS43NiAzLjQ0NSAzLjEwNS44NDcgMS4zNDUgMS4yNyAyLjg0OCAxLjI3IDQuNTF6TTEgMTEuODhoNy41MjVMMTggMi40MDV2MzAuMjgzbC05LjQ3NS05LjQ3NUgxeicvPiA8L2c+IDwvc3ZnPg==',volumeLow:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTI2LjUyMyAxNy41NDdjMCAxLjY2Mi0uNDIzIDMuMTY1LTEuMjcgNC41MWE4LjQ1MyA4LjQ1MyAwIDAgMS0zLjQ0NSAzLjEwNlY5LjkzYzEuNDUuNzI1IDIuNiAxLjc2IDMuNDQ1IDMuMTA1Ljg0NyAxLjM0NSAxLjI3IDIuODQ4IDEuMjcgNC41MXpNMSAxMS44OGg3LjUyNUwxOCAyLjQwNXYzMC4yODNsLTkuNDc1LTkuNDc1SDF6Jy8+IDwvZz4gPC9zdmc+',mute:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTEgMTEuODhoNy41MjVMMTggMi40MDV2MzAuMjgzbC05LjQ3NS05LjQ3NUgxeicvPiA8ZyBmaWxsLXJ1bGU9J25vbnplcm8nPiA8cGF0aCBkPSdNMjAgMTFoMTR2MTRIMjB6Jy8+IDxwYXRoIGZpbGw9JyNGRkYnIGQ9J00zMS45NCAxMC45NGwyLjEyIDIuMTItMTIgMTItMi4xMi0yLjEyeicvPiA8cGF0aCBmaWxsPScjRkZGJyBkPSdNMTkuOTQgMTMuMDZsMi4xMi0yLjEyIDEyIDEyLTIuMTIgMi4xMnonLz4gPC9nPiA8L2c+IDwvc3ZnPg==',setting:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjgnLz4gPHBhdGggZmlsbD0nI0ZGRicgZmlsbC1ydWxlPSdub256ZXJvJyBkPSdNMjMuMzA4IDMxLjQ3M2wtLjI2MyAyLjI3QTEuNDM0IDEuNDM0IDAgMCAxIDIxLjYxMSAzNWgtNy4yMjJjLS43MzQgMC0xLjM1MS0uNTQtMS40MzQtMS4yNTdsLS4yNjMtMi4yN2ExNS4xMzQgMTUuMTM0IDAgMCAxLTQuMDA3LTIuMTlsLTIuMDU0Ljg3N2ExLjQ1NyAxLjQ1NyAwIDAgMS0xLjgyNi0uNTlsLTMuNjExLTYuMTRhMS40IDEuNCAwIDAgMSAuMzkxLTEuODQ3bDEuNjM3LTEuMTg3YTEzLjk0MiAxMy45NDIgMCAwIDEgMC00Ljc5MmwtMS42MzctMS4xODdhMS40IDEuNCAwIDAgMS0uMzkxLTEuODQ4bDMuNjEtNi4xMzhhMS40NTcgMS40NTcgMCAwIDEgMS44MjctLjU5bDIuMDU0Ljg3NmExNS4xMzQgMTUuMTM0IDAgMCAxIDQuMDA3LTIuMTlsLjI2My0yLjI3Yy4wODMtLjcxNi43LTEuMjU3IDEuNDM0LTEuMjU3aDcuMjIyYy43MzQgMCAxLjM1MS41NCAxLjQzNCAxLjI1N2wuMjYzIDIuMjdhMTUuMTM0IDE1LjEzNCAwIDAgMSA0LjAwNyAyLjE5bDIuMDU0LS44NzdhMS40NTcgMS40NTcgMCAwIDEgMS44MjYuNTlsMy42MTEgNi4xNGExLjQgMS40IDAgMCAxLS4zOTEgMS44NDdsLTEuNjM3IDEuMTg3YTEzLjk0MyAxMy45NDMgMCAwIDEgMCA0Ljc5MmwxLjYzNyAxLjE4N2ExLjQgMS40IDAgMCAxIC4zOTEgMS44NDhsLTMuNjEgNi4xMzhhMS40NTcgMS40NTcgMCAwIDEtMS44MjcuNTlsLTIuMDU0LS44NzZhMTUuMTM0IDE1LjEzNCAwIDAgMS00LjAwNyAyLjE5ek0xOCAyNmE4IDggMCAxIDAgMC0xNiA4IDggMCAwIDAgMCAxNnonLz4gPC9nPiA8L3N2Zz4=',check:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDIwIDIwJz48cGF0aCBmaWxsPScjRkZGJyBmaWxsLXJ1bGU9J25vbnplcm8nIGQ9J00yLjkwMiA5LjI2MWExLjA4NyAxLjA4NyAwIDAgMC0xLjU3NiAwIDEuMTgzIDEuMTgzIDAgMCAwIDAgMS42MzJsNS41NzEgNS43NjljLjQzNS40NSAxLjE0LjQ1IDEuNTc2IDBsMTEuMi0xMS42OTJhMS4xODMgMS4xODMgMCAwIDAgMC0xLjYzMiAxLjA4NyAxLjA4NyAwIDAgMC0xLjU3NSAwTDcuNjg1IDE0LjIxNCAyLjkwMiA5LjI2MXonLz48L3N2Zz4K',enterFullScreen:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTMwIDMwdi05aDR2MTNIMjF2LTRoOXptNC0yNHY5aC00VjZoLTlWMmgxM3Y0ek02IDMwaDl2NEgyVjIxaDR2OXpNNiAyaDl2NEg2djlIMlYyaDR6Jy8+IDwvZz4gPC9zdmc+',leaveFullScreen:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTExIDJoNHYxM2gtNHonLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTIgMTFoMTN2NEgyek0xMSAzNGg0VjIxaC00eicvPiA8cGF0aCBmaWxsPScjRkZGJyBkPSdNMiAyNWgxM3YtNEgyek0zNCAxMXY0SDIxdi00eicvPiA8cGF0aCBmaWxsPScjRkZGJyBkPSdNMjUgMnYxM2gtNFYyek0zNCAyNXYtNEgyMXY0eicvPiA8cGF0aCBmaWxsPScjRkZGJyBkPSdNMjUgMzRWMjFoLTR2MTN6Jy8+IDwvZz4gPC9zdmc+',previousEpisode:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiI+PGRlZnM+PGZpbHRlciBpZD0iYSIgaGVpZ2h0PSIxNTAlIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjMiLz48ZmVPZmZzZXQgZHg9IjIiIGR5PSIyIiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuNyIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMiAzMlY0TDExIDE4em0tMjEgMFY0SDR2Mjh6Ii8+PC9nPjwvc3ZnPg==',nextEpisode:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiI+PGRlZnM+PGZpbHRlciBpZD0iYSIgaGVpZ2h0PSIxNTAlIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjMiLz48ZmVPZmZzZXQgZHg9IjIiIGR5PSIyIiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuNyIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik00IDMyVjRsMjEgMTR6bTIxIDBWNGg3djI4eiIvPjwvZz48L3N2Zz4=',pauseCircle:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAAAXNSR0IArs4c6QAAH/ZJREFUeAHtnX2wHWV9x2/MC0kgECCEQBIngTAEhPENUiNxhCnEUFH5w8LI6IgxUsVO0wqttaO1LVNrq7amIziDMYzWwYE6U1QoGFQCBOIgdmR8gSjQlCRwgQjhxQRyCen3e+89N+eee1727Nk9++w+n9/MN7tnX559fp/n3G9293l2z6QBAgLpCByi3Y6TjpSOkGaPqjZfm07X8ql1mlY37+WOoTrtq5v38pek3dJzDdPasme0fFB6WSIg0BWBSV1tzcYxEfB343hpgWSjm98wnaPPIcUuVeYJaWfDdPvo5wOaEhAYRwADHIcj2g+zlPmSUZ2kqXWiNFOqQuxREo9Ivx3Vw5paL0hExAQwwPga35egp0ivH9XJms6TYgxfOm+VHhjVg5r6EpyIhAAGWP2G9r25mtl5eqpUu/dW/ey7y9D3HH8t1QzRU99rJCpKAAOsXsNOUUo2urdKZ0m+tCXSE/Cl8j3SvZIN8RWJqAgBDLAaDelL2OWSDe9M6VCJyJ7A71XkTyUb4hbJl9BEiQlggOVtvEWq+nnSH0qc5QlCAeGzwx9Jt0vbJKJkBDDAcjXYQlXXprdSwvTCajub4UbJZuihN0QJCGCA4TfSsariKsnGtzT86lJDEXhIshHeJj0pEYESwADDbBh3ZKyQLpTcmfEaiSgfgVdVZXee3CRtluhAEYSQAgMMqTVGnrp4j6r0Lim0Jy3CIlW+2vhJle9L35V2lK/61awxBlh8u/rs7mzpvdIyiag+gfuU4nekTZLPEomCCGCABYHXYadL75YukRZIRHwEfCZ4vfQ96aX40i8+Ywyw/23gS9uLJJ/xHd7/w3PEAAk8rzr5jPBGyZfKRJ8IYIB9Aq3DLJY+IJ0vTZUICDQSGNKCW6VvStskImcCGGDOgFX8a6WPSB7KAm9BIDoS8Ku7PITma9JjHbdmg9QE+INMja7jjsdrizXSO6XJHbdmAwhMJLBfi26R1kuPT1zNkl4JYIC9Epy4vwcur5Y8nGXKxNUsgUDXBDx+0MNnNkgMrO4aX+sdMMDWbLpdc5h28KWuOzi4x9ctPbZPQsD3CN1R4kvjF5PswDbtCWCA7fkkWevLWz+x8TFpdpId2AYCPRLYrf2/KvkJE18mEykJYIApwY3udoamV0pLeiuGvSGQisDD2uuL0v2p9mYneiVTfgc8cHmtdE7K/dkNAlkSuEOFrZM8sJroggBngF3A0qbu1PiQ5E4O7vMJAhEMAd8fdCfJdZI7TYgEBDDABJBGNzld089IJyTfhS0h0HcCj+qIV0m/6PuRS3hADLBzo83UJpdLF0vw6syLLYon4IHUN0jXSHuKr064NWCAbvu2OUur/116i4T5tWfF2nAI+Lt6muTHLv9P2i4RTQjwR90EihZ5TN8nJX+BCAiUncCtSuCfJcYONrQkZ4ANQPTxDdLV0hsnrmIJBEpJ4CTV+h3Sg9JgKTPIqdIY4EGw7uG9TPpbiddUHeTCXDUIzFIaF0j+m/+59KoUfWCAI18Bj+v7ssQbW6L/k6g0AN/yepPke9oePO33EEYdGODI/4r/pm/B/Ki/CSQfE4G5StYv63ha+k1MiTfmGrMBThOMT0kflRjU3PjN4HPVCfg7f7ZkM/yJFOUzxbEa4Dw1+Fekt0kEBGImsFTJ+6dXt0jR9RLHaIDL1NDu5V0oERCAwMDAMYLwR9JD0s6YgMRmgJeqcT8rzYipkckVAgkITNc2HvfqZ4rdSxxFxGKAbtzPSTzOFsXXmiRTEnAvsa+Q/Hq3u6XKv1QhBgM8Wg15jeSGJSAAgc4EFmuT5dJd0t7Om5d3i6oboN/ccq3kBiUgAIHkBHxf8DzJPcTPJt+tXFtW2QDPVFO4s+OocjUJtYVAMAT8TLzvC/5KquSv0lXVAP3Iz+cl3/sjIACB9AQ8XnaVNChVbtB0FQ3wMjXUFdJrJAICEOidgP+Wzh4t5me9FxdOCVUzwE8I7aXh4KUmEKgUgTcrG18We9B0JaIqBuj/of5GuqgSrUISEAiXgH8awh0k90h+83SpowoG6NdY/b30rlK3BJWHQHkInKKq+kmqu6RSv1ar7AboB7rd2XGuREAAAv0j4MHS1h1SaU2wzAboHt5/lVZIBAQg0H8Ci3TI10k2wVI+NVJWA/SZ35ckj1YnIACB4gj4UtiXxD+USncmWEYD9D0/X/byKitBICAQAAGboC+HfyyVygTLZoDu7XWHx7kSAQEIhENgkaqyQNoklaZ3uGwG6KEu9PYKAgGBAAn4LHCOdHeAdWtapTIZoAc5M86vaTOyEALBEPD9wNIMli6LAfrxtkuDaWIqAgEItCPgwdKOn41Mwv23DAboFxv42V4CAhAoDwE/Nve4FPQLFEI3QL/Syj2+7vwgIACBchHwGN0HJBthkDEpyFqNVOoETTZIvp9AQAAC5STgX5pbLT0aYvVDNcCjBesbkn++koAABMpNYFDV/6D0u9DSCPHS0o+4fVnC/EL7tlAfCKQj4L9l/037bzuoCPEe4OdEiB8wCuprQmUg0DMBv0JrkXR7zyVlWEBoBnipcvNPVxIQgED1CCxWSvukYH53OCQD9FnfZ6VQ70uqagQEINAjgTO0v3uGd/ZYTia7h2I2vkfwLWl2JllRCAQgEDKB3arc+yV3jhQaIXSCTBOBL0iYX6FfBQ4Ogb4R8N+6/+b9t19ohHAJ/CkR4NVWhX4NODgE+k7AnSIe7nZX349cd8CiDdBvdvloXX2YhQAE4iGwVKk+IRX2uFyR9wD97rBvSzMkAgIQiJPAXqX9PmlHEekXdQY4Rcl+WZpfRNIcEwIQCIaAf97iNOlmqe9vky7KAP9Eya6SCAhAAAJzRxHc328URfQCv0FJfqjfiXI8CEAgaAKrVTt7Q1+j3/cA/WYX3/c7rq9ZcjAIQKAMBNwh4vuBfoNMX6Lfl8CfUVZv7EtmHAQCECgbgVmq8LGSf2e4L9HPS2C/HPH8vmTFQSAAgbISsEfYK/oS/boEnqlsbpR4xVVfmpWDQKDUBPyInH8AbU/eWfTrEvjPlchb8k6G8iEAgUoQcF+BT5ruzTubflwCn64k7OYEBCAAgaQE7Bn2jlwj70tgD3i+Xjoh1ywoHAIQqCIB/47IJdIreSWX9yXwh1Xx8/KqPOVCAAKVJnCkstsv/U9eWeZ5Buhnff9T8qMuBAQgAIE0BIa00x9LuTwrnOc9wLWqNOaXpsnZBwIQqBGwh9hLcom8DNCvvT4nlxpTKAQgEBsBe4k9JfPIwwB9X/HKzGtKgRCAQMwE7CmZ91nkYYAXqqJLYm4pcocABDInYE+xt2QaWXeCeADjTdLsTGtJYRCAAAQGBnYLgk3wxaxgZH1K+XFVbFlWlaMcCEAAAnUEpmvenSI/qVvW02yWZ4B+i4PP/uj57alJ2BkCEGhDwMNifBb4ZJttEq/K8h6gBz1jfonRsyEEIJCCgD3GXpNJZGWAx6s2786kRhQCAQhAoD0Be409p+fIygA/opr4uV8CAhCAQN4E7DX2nJ4jCwN8rWrxzp5rQgEQgAAEkhOw59h7eoosDPAy1SCLcnpKhJ0hAIGoCNhz7D09Ra/GtVhHf0dPNWBnCEAAAukI2HvsQamjVwP8gI6c5VCa1ImwIwQgEB0Be489KHX0YoBzdFR+5Cg1enaEAAQyIGAPshelil4M0K+sZtxfKuzsBAEIZETAHpT6JzfSGqAfSXlvRglQDAQgAIFeCNiL7EldR1oDfI+OdHjXR2MHCEAAAtkTsBfZk7qONAboffxDJQQEIACBUAjYk7r2s6530EHOkeaHkjX1gAAEICAC9iR7U1eRxgC599cVYjaGAAT6RKBrb+r2+V3/0tuZfUqGw7QgMGPGjElr166ds2LFisPmzZs3dZKixaapF+/fv//A9u3b923cuPH59evXP6PPqcsqYsfJkycPrFmz5qiVK1cevnDhwmn6nDmjA4rBwcGhzZs3v7hu3bpde/fuPVBErhxzjIC9yR61Y2xJh5luvxR/qvIu7VAmq3MkMHXq1IEbbrhh0cknn5yq1ytN1e68884XLr/88p1p9i1qn2uuuWb+29/+9ln9Ov7WrVtfuvjii7cNDfl1dUSBBK7Tsa9OevxuLoF9tnhB0oLZLh8Cq1evPqqf5ucsbCSrVq3yzx2UIlzXfpqfobhN3DalAFTtSr5L6SW+su3GAFeo4DnVZhd+dsuWLZtZRC2XL19eyHHT5FpUXYtqmzSMKryPPcpelSi6MUC/hpoomMDcuXMLefrmmGOOKeS4aXAXVdei2iYNo4rvk9irkhqgf+/jrRWHRnoQgEA1CNir7FkdI6kB+oHjpNt2PCgbQAACEMiRgL0q0YtakpraeTlWlqIhAAEIZE3g3CQFJjHAhSro5CSFsQ0EIACBQAgsVT3sXW0jiQGubFsCKyEAAQiESaCjdyUxQC5/w2xcagUBCLQn0NG7OhngIpW/pP0xWAsBCEAgSAL2rkXtatbJADs6aLvCWQcBCECgYAJtPayTASbqSSk4QQ4PAQhAoBWBth7WzgDnqcQTW5XKcghAAAIlIGAPs5c1jXYGuLzpHiyEAAQgUC4CLb2snQGeVa4cqS0EIACBpgRaelkrA5yiYnjxaVOWLIQABEpGwF5mT5sQrQzw9dry0AlbswACEIBA+QjYy+xpE6KVAfLmlwmoWAABCJSYQFNPa2WALa+ZSwyAqkMAAvESaOppzQxwthgtiZcTmUMAAhUkYE+zt42LZgbY9Fp53F58gAAEIFA+AhO8DQMsXyNSYwhAIB0BDDAdN/aCAAQqQKCjAU5TkqdWIFFSgAAEINBIwN5mjxuLxkvgU7Rm6thaZiAAAQhUh4C9zR43Fo0GOOEUcWxLZiAAAQiUn8A4j8MAy9+gZAABCCQn0NYA/UMiBAQgAIGqEhjncfVngLOUcaIfE64qGfKCAAQqT8AeZ68bjnoD5OmPGhWmEIBAlQmMeV29AZ5U5YzJDQIQgMAogTGvqzfAMVcEEwQgAIEKExjzunoDHHPFCidOahCAAATGvK5mgJPEhB9A4osBAQjEQMBeZ88bqBng8Zqf6QUEBCAAgYoTsNfZ88YMcEHFEyY9CEAAAvUEhj2vdgZ4XP0a5iEAAQhUnMCw59UMcH7FkyU9CEAAAvUEhj2vZoCcAdajYR4CEKg6Ac4Aq97C5AcBCLQkwBlgSzSsgAAEqk5g7AzwEGU6p+rZkh8EIACBOgL2vEN8D5D7f3VUmIUABKIhcJwN8Mho0iVRCEAAAgcJHGkDPOLgZ+YgAAEIREPgCBvghF9LjyZ9EoUABGImMBsDjLn5yR0CcRPAAONuf7KHQNQEhg2Qe4BRfwdIHgLREuAeYLRNT+IQgABngHwHIACBaAkMnwFOjzZ9EocABGImMN29wNNiJkDuEIBAtASm2QCnRJs+iUMAAjETmMIZYMzNT+4QiJvA8Bng1LgZkD0EIBApgak+A8QAI2190oZA5AQwwMi/AKQPgZgJYIAxtz65QyByAsMGGDkD0ocABGIl4HuAQ7EmT94QgEDUBIYwwKjbn+QhEDUBDDDq5id5CMRNYNgA98XNgOwhAIFICezjEjjSlidtCEBggEtgvgQQgEC0BDDAaJuexCEAgWEDfAkOEIAABCIksNf3AHdHmDgpQwACEHjOBvgcHCAAAQhESGDYADkDjLDlSRkCEBjYzRkg3wIIQCBWApwBxtry5A0BCIycAXIJzDcBAhCIkQCXwDG2OjlDAALDBIYvgZ8FBgQgAIEICTzjTpAnIkyclCEAAQgM2gBflnbBAgIQgEBEBOx5L9sAHZwFjnDgXwhAIA4Cw55XM8CdceRMlhCAAASGCQx7Xs0AOQPkWwEBCMREgDPAmFqbXCEAgXEEOAMch4MPEIBATATGnQFujylzcoUABKInMOx59fcA90SPBAAQgEAMBOx1484AD2jBIzFkTo4QgED0BOx19ryB2hmg53/rfwgIQAACFScw5nUYYMVbmvQgAIEJBJoa4MMTNmMBBCAAgeoRGPO6+jPAsYXVy5eMIAABCIwRGPO6egN8QasHxzZhBgIQgED1CNjj7HXDUW+AXrB1ZDH/QgACEKgkgXEe12iAD1QyZZKCAAQgMEJgnMdhgHwtIACBmAi0NcAHRWIoJhrkCgEIREPA3maPG4vGM8B9WvPrsbXMQAACEKgOAXubPW4sGg3QK8adIo5tyQwEIACBchOY4G0YYLkblNpDAALJCWCAyVmxJQQgUDECiQxwt5IeGyldMQCkAwEIxEnAnmZvGxfNLoG9wT3jtuIDBCAAgXITaOpprQzw3nLnSu0hAAEIjCPQ1NNaGaCvlX8/bnc+QAACECgnAXvZhPt/TqWVAb6idT/1BgQEIACBkhOwl9nTJkQrA/SGTa+ZJ5TAAghAAAJhE2jpZe0McEvYOVE7CEAAAokItPSydgbo92YxHCYRXzaCAAQCJWAPa/me03YG6Hx+FGhSVAsCEIBAEgJtPayTAd6e5AhsAwEIQCBQAm09rJMBblNSXAYH2rJUCwIQaEvA3rWt3RadDND7bmxXAOsgAAEIBEqgo3clMcC2p5CBJk61IAABCHT0riQGuF0cH4IlBCAAgRIRsGfZu9pGEgN0AT9sWworIQABCIRFoOPZn6ub1ABv1bavhpUftYEABCDQlIC96ramaxoWJjXAJ7Vf07cpNJTHRwhAAAJFE7BX2bM6RlIDdEE3dSyNDXIn8NRTTw3lfpAmB3j66acLOW6TqnRcVFRdi2qbjkDi2yCxV3VjgJvFcVd8LMPK+L777ttTRI22bNlSyHHT5FpUXYtqmzSMKryPPcpelSi6McBXVOL3E5XKRrkR2LBhwzNbt259KbcDNCn4zjvvfOG22257scmqIBe5rq5zPyvnNnHb9POYHKspAXuUvSpRTEq01cGNFmg28enlwd2Yy5LAjBkzJq1du3bOihUrDps3b97USYosy3dZ+/fvP7B9+/Z9GzdufH79+vXP6HPWh8i1vMmTJw+sWbPmqJUrVx6+cOHCafqcOaMDisHBwaHNmze/uG7dul179+49kGtSFJ6EwIXaaEeSDb1Nmi/FNdpvWdIDsB0EIACBPhG4T8e5vJtjdXMJXCv3O7UZphCAAAQCItC1N6UxwE1KOPEpZkBwqAoEIFBdAvakTd2ml8YAPcjw+m4PxPYQgAAEciRgT+r6YY00Bugcvic97xkCAhCAQMEE7EX2pK4jrQF6GEbX19td144dIAABCHQmYC9KNTQsrQG6SjdKpXk6wBUmIACByhGwB9mLUkUvBrhLR/RLEggIQAACRRGwB9mLUkUvBugDflNi8Gcq9OwEAQj0SMDeYw9KHb0a4DYd+Qepj86OEIAABNIT8CuvtqXfPfn7ANsd41qtLNdzUu2yYR0EIFAGAvacr/Va0V7PAH38x6Rbeq0I+0MAAhDogoA9x97TU2RhgK7AeinxGxh6qjE7QwACsROw19hzeo6sDPBx1eS7PdeGAiAAAQh0JmCvsef0HFkZoCuyQWJcYM9NQgEQgEAbAvYYe00mkaUB+h38qQckZpINhUAAAlUnYI9J9HsfSUCkeR9gu3IP00q/MHV2u41YBwEIQCAFgd3axy88zezt5FmeATofV+yrniEgAAEIZEzA3pKZ+bluWRugy/QZ4MOeISAAAQhkRMCeYm/JNPIwQA9Q/GKmtaQwCEAgdgL2lMwfuMjDAN1Q90t3eIaAAAQg0CMBe4k9JfPIywBd0XUSw2IybzIKhEBUBOwh9pJcYnIupY4U6re02mDPyPEYFA0BCFSbgJ/42JRXilkPg2ms5xQt8Lv6T2hcwWcIQAACHQg8qvWXSK902C716jwvgV0pV/wqiXcGmgYBAQgkJWDPsHfkZn6uSJ6XwC7f8ZR0hHSaPxAQgAAEEhC4QdtkPuyl8bh5XwLXjjdTM36EZV5tAVMIQAACLQgMavlF0p4W6zNbnPclcK2iTuTztQ9MIQABCLQh8E9al7v5+fj9uASu5fmYZhZIJ9UWMIUABCDQQOC/9fmbDcty+9ivS+BaAodp5tvScbUFTCEAAQiMEnhC0/dJmT7v245uP88AXY990oPSBVK/zVeHJCAAgUAJvKp6fULylWLfot8G6MR8g9PHfZM/EBCAAARE4OvSzf0m0a9OkMa81mvBLxsX8hkCEIiSgL3AntD3KPIy1B0ivh84o+9Zc0AIQCAUAntVEd/321FEhYq4BK7l6WeFn5bOri1gCgEIREfgH5VxLm96SUKySAN0/X4jzZWW+gMBAQhERcBPehRy6VujXOQlcK0O0zTjG6Cn1BYwhQAEKk/Ao0E+LHlkSGERggE6eT8i9y1ptj8QEIBApQnsVnbvlzwipNAo+hK4lrwHPj4knS+FYsq1ujGFAASyI+DxfldIW7MrMn1JoRigM9gp+e2vy/yBgAAEKkngamV1SyiZhWSAZvJzaYm02B8ICECgUgR+rGy+EFJGoRmg2dwtLZeO8QcCAhCoBAF3evhRt1dCyibU+21HC9I3JN4fGNK3hbpAIB0Bd3Z8UPpdut3z26uoR+E6ZWRQfya5c4SAAATKS8B/w/5bDs78jDTES2DXy/Gs9CtplRSqUatqBAQg0IKAL3f/QvLfcZARsgEa2OOST5/PlggIQKBcBP5B1d0UcpVDN0Cz8+NyjjePTPgXAhAoAYFrVUe/7CToKIMBGuDPJL9N+nR/ICAAgaAJ+LfAvxJ0DUcrVxYDdHW3SB4awzPDpkFAIEwC/6Vq/UuYVZtYqzIZoGt/j7RQ8mBpAgIQCIvAbarOVZJ/1LwUUTYDNNi7JBvgIomAAATCILBJ1fi0tD+M6iSrRdkM0Fn5Yeo7pNOkBRIBAQgUS+AnOvxfSkE95ZEESRkN0HnZBP1c4akSJigIBAQKIuB78za/Qt/rlzb3shqg8/X/NrdLXA6bBgGB/hPYpEP+lVRK8zOuMhug6187E/RZIB0jJkJAoD8E3OHxacknIqWNshugwdsEN0lzJIbICAIBgZwJeKjLVVKpOjyaMamCATov9w7fLTFY2jQICORHwIOcPc6vNENd2qGoigHWcvQNWQePzY1w4F8IZEnAj7eV4gmPpElXzQCdtx+be1xaIfEWGUEgINAjAd/n84sNgn+2t9s8q2iAZvAb6QHpbGmaREAAAukI+H1+fqXVpnS7h71XVQ3Q1H0W6KdG3ib53iABAQh0R8CvovuoFOz7/LpLZ+LWVTZAZ+uXqv5AOkPyixQICEAgGQH/hofNzycSlY2qG6Abbq90q7RIWiwREIBAewJ+yso/YPRC+83KvzYGA3Qr+SaunxrxiHWfDU6SCAhAYDwBj6m9WvJPV5Z6gPP4tFp/isUAawT8u8PuHDlLml5byBQCEBjYLQZXSLfExCI2A3Tb7pQ2Sm+UuC8oCET0BHy/72PS1thIxGiAbmN37ft/uqOlpRIBgVgJ3KTEPyk9FyOAWA3Qbe3nGD1M5gnpD6SpEgGBWAjsVaKfk9ZLpX+mN22jxWyANWYeNO0OEr9gdW5tIVMIVJjAL5Xbx6X7K5xjotQwwBFMz2tys+Te4TeMTjUhIFApAu7l3SD9neROj+gDAzz4FfCXw/8j/lQ6U5olERCoCgHf6vHYPv9H7+86IQIY4MSvwaAWfV86Vjpp4mqWQKB0BG5Vjf0872Olq3nOFWZAcHvAK7T6r6V57TdjLQSCJOD/zD8vbQ6ydgFUijPA9o3g/zE9TGCm9DqJ/zAEgQiegF9WeqPk3+t4JPjaFlhB/qCTwz9dm35GOiH5LmwJgb4TeFRHvEr6Rd+PXMIDYoDdNZrHCl4qrZYYNygIRDAEhlQT9/BeJ0XxHG8W5DHAdBQXaLe10jnpdmcvCGRK4A6Vtk7akWmpERSGAfbWyGdo9yslfpKzN47snY7Aw9rti1L0A5rT4eOmflpu9fu5I+lCyQ+Tz65fwTwEciLgQcxfldxBF+1jbFmw5QwwC4ojZRymyUekiyTuD44w4d9sCfg+n3t3vya9mG3RcZaGAWbf7h5A/WHp3dKU7IunxAgJuFPje9LXpScjzD+3lDHA3NAOHK+ifUb4Tuk1+R2GkitMwI+s+bVtPuOr9G9zFNWGGGD+5F+rQ1wmvUOCd/68q3AED2T2j3ldK3kwPpETAf4gcwLbpNjFWvYB6XyJe4RNALFowPf4/Nzuf0j/C4/8CWCA+TNuPMIcLXBHyXulwxtX8jlKAn4d23ckd3DsipJAQUljgAWB12GnS++RLpHmS0R8BHYq5eul70ovxZd+8RljgMW3gTtIzpF8Ruj3EBLVJ+B3TvqMz09wuKODKIgABlgQ+BaH9SN2HlR9geRLZaI6BHxpe7Pkwcs8shZIu2KAgTREQzU8fnCFZDN8q8QwGkEoYfjs7l7JprdZ8ng+IiACGGBAjdGiKh5Y7Z7j86STW2zD4rAI+Pd1b5fco8vA5bDaZlxtMMBxOIL/sFA1XCnZDJcEX9u4Kviw0rXpbZS2x5V6ebPFAMvbdotUdRvhudKJEtF/Ao/okD+UbHzbJKJkBDDAkjVYi+r6N0uWS2dJ7kk+VCKyJ/B7Feke3HukLZJ/c4MoMQEMsMSN16Lq7kB5veTOExsil8qC0EP40taG586MByQ6MgShKoEBVqUlW+cxW6tsiDWdqvmprTePes2Qsv+1ZKOraXfURCqePAZY8QZukt40LTtFqhniUs27pznGcA/tQ1LN7B7U/L4YQcSaMwYYa8uPz3uWPvpS+aS6qTtWZkpViD1Kwh0Wv5V8SVubvqB5ImICGGDEjd8hdX83jpcWSMdJ8xumoT2p4ictnpB2Nkx36PPjkl8xRUBgHAEMcBwOPnRB4BBta2M8UjpC8r3GmmqfPfVLH3zZ7c4ZT33/sV76OPwaKN9/q8mXoe5s8NQvCXhO8r242tTztc/Pat7G97JEQKArAv8PbhPYR9DGPDYAAAAASUVORK5CYII=',playCircle:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAAAXNSR0IArs4c6QAAKuFJREFUeAHtnQl4FdXdxhOWsEMCYU2QkKBiZeunYql8LVpwpUqrrY9W60LVVp+n1qVaW6tfS0FxQ6xARQSh7EVZFT9EpVbFKlitqFCp5ZMtCQkk7AQI3/sGbsx275177yxnZt7/87zcZWbO8juXN3PmnDmTnqYQgeQINMNhXaEsqB2UeUKR95HX5vi+aQ1l1HjP7xmHa6iixnt+fxAqg8rrvEa+24nvC6FDkEIEEiKQntDe2jlMBPjb6AblQjS6nDqv2fhsUpSgMNuhrXVeN5/4fAyvChGoRUAGWAtHaD+0Qc17ndDJeKUKoJZQEGI/KvFv6PMT2ohXag+kCDEBGWD4Gp9d0NOg/id0Kl67QGEMdp03QB+d0Gd4ZRdcERICMsDgNzSvzUXMjq9fgyLX3oJf+8RqyGuOn0IRQ+QrrzUqAkpABhi8hm2CKtHovgmdA7Frq0ieALvKb0PvQDTEI5AiIARkgMFoSHZhB0E0vLOgVpDCfgL7kOT7EA1xNcQutMLHBGSA/m28PBR9GPQdSGd5gOBB8OzwNehVaBOk8BkBGaC/Gqw7ikvTOx+S6ZnVdjTDFRDNkFNvFD4gIAM0v5E6o4gXQjS+3uYXVyUEgfUQjfAVqAhSGEpABmhmw3AgYzA0AuJgRiNI4T8ClSgyB08WQW9BGkABBJNCBmhSaxy/6+IyFOm7kGl3WphFyn+l4Z0qS6HF0Bb/FT+YJZYBet+uPLsbAl0BDYQUwSfwHqq4AFoF8SxR4REBGaBH4JFtc+hS6GooF1KEjwDPBGdDS6CD4au+9zWWAbrfBuza/hDiGV9b97NXjgYS2I0y8YxwPsSussIlAjJAl0Ajm57QtdBFUFNIIQJ1CRzGF8uhGdAmSOEwARmgw4CR/EnQTRCnsog3ICjiEuDSXZxC8yz0Zdy9tUPSBPQfMml0cQ/shj1+Al0CNY67t3YQgfoEjuKrl6Ap0Lb6m/VNqgRkgKkSrH88Jy7fCHE6S5P6m/WNCCRMgPMHOX1mKqSJ1Qnji36ADDA6m0S3tMYB7OpygEPX+BKlp/2tEOA1Qg6UsGu818oB2ic2ARlgbD5WtrJ7yzs2fgZlWjlA+4hAigTKcPwkiHeYsJusSJKADDBJcCcOOxOvd0O9UktGR4tAUgQ24qjHoDVJHa2DNCqZ5G+AE5dvh85N8ngdJgJ2EngDiY2HOLFakQABnQEmAAu7clDjBoiDHLrOBwgKYwjw+iAHSaZBHDRRWCAgA7QA6cQuffH6Wyjf+iHaUwRcJ/AFchwFfex6zj7MUAYYv9FaYpdboSsh8YrPS3t4T4ATqedBE6H93hfH3BJogm7stjkHm5+CvgHJ/GKz0lZzCPC32gfibZf/B22GFA0Q0H/qBqDgK87puxfiD0ghAn4nsBwVGAtp7mCdltQZYB0g+DgAmgB9vf4mfSMCviRwMkp9AfQZVOjLGjhUaBngV2A5wnsz9ACkZaq+4qJ3wSDQBtUYDvH//IdQJRT6kAEe/wlwXt+TkFZsCf1/iUAD4CWv/4J4TZuTp7kOYahDBnj8r+I4/ApyQv1LUOXDRKATKsvFOnZA/wpTxevWNcwGmAEY90E/hTSpue4vQ5+DToC/+SEQzfBdKJT3FIfVALugwZ+G/htSiECYCfRG5fno1dVQ6EaJw2iAA9HQHOXtDilEQATS0joCwsXQemhrmICEzQCvR+M+CLUIUyOrriJggUBz7MN5r7ynmKPEoYiwGCAbdwyk29lC8bNWJZMkwFFi9pC4vNvfoMAvqhAGA+yAhpwIsWEVIiAC8Qn0xC6DoDehA/F39+8eQTdArtwyGWKDKkRABKwT4HXBYRBHiHdZP8xfewbZAM9CU3Cwo72/mkSlFQFjCPCeeF4X/AQK5FPpgmqAvOXnYYjX/hQiIALJE+B82QuhQihwk6aDaIA3o6HughpBChEQgdQJ8P/SkBPJrE09OXNSCJoB3gm015uDVyURgUAROAO1YbeYk6YDEUExQP6F+jX0w0C0iiohAuYS4KMhOEDyNsSVp30dQTBALmP1O+i7vm4JFV4E/EPgNBSVd1K9Cfl6WS2/GyBv6OZgx1BIIQIi4B4BTpam3oB8a4J+NkCO8D4BDYYUIiAC7hPIQ5anQzRBX9414lcD5Jnf4xBnqytEQAS8I8CuMLvEKyHfnQn60QB5zY/dXi1lBQgKETCAAE2Q3eHXIV+ZoN8MkKO9HPAYCilEQATMIZCHouRCqyDfjA77zQA51UWjvYCgEAEDCfAsMBv6m4Fla7BIfjJATnLWPL8Gm1FfioAxBHg90DeTpf1igLy97XpjmlgFEQERiEWAk6UZa4+/mPuvHwyQCxvw3l6FCIiAfwjwtrltkNELKJhugFzSiiO+HPxQiIAI+IsA5+h+BNEIjYx0I0t1vFD5eJkK8XqCQgREwJ8E+KS5G6EvTCy+qQbYAbCmQ3x8pUIERMDfBApR/OugUtOqYWLXkre4PQnJ/Ez7tag8IpAcAf5f5v9p/t82Kky8BjgGhPQAI6N+JiqMCKRMgEto5UGvppySjQmYZoDXo258dKVCBEQgeAR6okoVkDHPHTbJAHnW9yBk6nVJFE0hAiKQIoEzcTxHhremmI4th5tiNrxGMBPKtKVWSkQERMBkAmUo3DUQB0c8DRMGQTJA4FFI5ufpT0GZi4BrBPh/nf/n+X/f0zChC3wfCGhpK09/BspcBFwnwEERTnd70/Wca2TotQFyZZef1iiP3oqACISHQG9UdTvk2e1yXl4D5Nphc6AWkEIERCCcBA6g2ldBW7yovldngE1Q2SehHC8qrTxFQASMIcDHW/SBlkGurybtlQHegspeCClEQAREoNMJBGvcRuHFKPAAVPIGtyuq/ERABIwmcCNKR29wNdy+BsiVXXjdr6urtVRmIiACfiDAARFeD+QKMq6E213g36JWX3elZspEBETAbwTaoMCdIT5n2JVwswvMxREvcqVWykQERMCvBOgR9ApXwq0ucEvUZj6kJa5caVZlIgK+JsBb5PgAtP1O18KtLvAvUJFvOF0ZpS8CIhAIAhwr4EnTO07Xxo0ucF9Ugm6uEAEREAGrBOgZ9A5Hw+kuMCc8z4byHa2FEhcBEQgiAT5H5GroiFOVc7oLPBIFH+ZU4ZWuCIhAoAlkoXZHoQ+cqqWTZ4C81/cvEG91UYiACIhAMgQO46AfQI7cK+zkNcDbUWiZXzJNrmNEQAQiBOgh9BJHwikD5LLX5zpSYiUqAiIQNgL0EnqK7eGEAfK64t22l1QJioAIhJkAPcX2MQvbE0Qhvw9dFuaW8rLuffv2bXbBBRe06dWrV0ZZWdnRvXv3ur7EkJf1V96BJdAeNSuBPrOzhnYPgnAC4yIo085CKi1rBEaNGtX5+9//PkfOquLo0aNpr732WvkTTzyxY/PmzY5NJYjkp1cRcJhAGdIfAe21Kx+7zwBvQ8EG2lU4pWOdwPe+9702t912W6eaRzRq1CitoKCg+Q9+8IOsZs2apf3jH/84SFNUiIBPCTRHuTko8q5d5bfzGiBXcdAdH3a1TILpwACjnnXD/NJvueWWjsuWLes5dOjQVgkmrd1FwCQC9Bh6jS1hpwGORIk07cWWZkk8EVzz41/HmJGTk5Mxfvz47pMmTcrp0aOH2iomLW00lAB/t/QaW8Kua4DdUJoXId76pvCAwLp163qnp1tvzoqKimN//vOfSydMmFB66NChYx4UWVmKQLIEeD2bg63bkk0gcpxdZ4A3IUGZX4SqB6+JmB+Ll5GRkT5y5Mjsl156KX/YsGHqFnvQZsoyaQL0GnpOymH9lCF6Vidh0wLILjONnpO2RCXwySef9I660cKG1atX7x09enTRf/7zH956pBAB0wlwetcV0JepFNQO07oZBbAjnVTqoWNTJDBo0KDWCxcuzL/rrruyW7RoYccfxhRLpMNFICYBeg69J6VI1bh6IvcLUiqBDjaGQNOmTdNvvPHGqm7xhRdeyDmdChEwmQC9hx6UdKRqgNciZ50tJI3fzAM7d+7c9PHHH8+dNm1ad8wj1Gixmc2kUh33HnpQ0pGKAWYjVz3kKGn05h84cODAVi+++GL+Pffck92yZUv9oTO/ycJYQnoQvSipSMUAOSFRZwdJYffPQU2aNEm/7rrr2C0uGD58uLrF/mm6sJSUHpT0DRjJ/lXnpNuXobZhoWx6PVMdBbZav7Vr1+7jaPGGDRsqrB6j/UTAYQK7kf7F0MFE80n2DJCrvcj8EqUdgP3POOOMVvPnz8+/7777OrZq1SrZP6ABIKEqGESAXpTUClTJGCCP4YNKFCElgG5x2jXXXNPh5ZdfLhgxYkSbkGJQtc0iQE9K2M8SPgCZnAvlmFV3lcYLAtnZ2U3QHc6ZPXv2Sb17987wogzKUwROEKAn0ZsSimQMkLOvFSJQTaB///4t582bl3///fd3atu2bTK/qeq09EYEUiCQsDcl+mPlk97OSqGAOjSgBNgtvuqqq9qjW5x/+eWX6/pwQNvZ8GrRm+hRliNRA+RqrAoRiEogKyurye9///tuc+fOPalPnz7Nou6oDSLgDIGEBkMSGcXjCgzLoKQnHTpTX6VKAm5Ng0mENlefxkTqnePGjSspLy/Xs0kSgad9kyVQggOHQ5YeAZHIGeBgJCrzS7ZZQnhc48aN07AcP7vFBVdeeaW6xSH8DXhQZXoUvcpSJGKA6v5aQqqd6hLIzMxs/MADD3TD/MEe/fr1U7e4LiB9tpuAZa+y2gXmGvxLoUQM0+5KKb0YBEzsAjdU3MrKyjQsu7WLT6rDYzvVLW4Ikr5LlQB/V9+FiuIlZNXQeMOx1X3j5antISbAJ9VhlDhr+fLlBVdffXW7RFeyDjE6Vd06AXqVpYVarJraMOt5a08RiE8A8wUb/+Y3v+m6YMGCvAEDBsR9oFP8FLWHCNQiMLTWpygfrBhgdxx7apTj9bUIpEQAd5A0nzlzZt6YMWO6tG/f3u7nVKdUNh3sawJ8RAS9K2ZYMcDzY6agjSKQIgF2gy+77LJMTqK+9tprMzl6rBABGwjE9S4rBqjurw0toSTiE2jTpk3jX/3qV13YLT7zzDPVLY6PTHvEJhDXu+IZYB7S7xU7D20VAXsJnHLKKc2nT5+e98gjj3TBggs6HbQXb5hSo3flxapwPAOM66CxEtc2EUiFwCWXXJLJlaivv/56dYtTARnuY2N6WDwDtDSSEm6+qr2TBFq3bt3ol7/8ZRfcUpd39tlnt3AyL6UdSAIxPSyWAXYBjoJAIlGlfEegV69ezadOndrjscce69qpUyd1i33Xgp4VmB5GL2swYhngoAaP0Jci4CGBiy66qN2yZcsKRo4cmcUluBQiYIFAVC+LZYDnWEhYu4iA6wTwLJJGd955Z+dFixb1HDRokLrFrreA7zKM6mXRDJB/WrXwqe/aOVwF7tmzZ7MpU6b0ePLJJ7sidDoYruZPpLb0sgZ/H9EMsD8OaJVIDtpXBLwiMGzYsHZLlizJv+WWW7KaNm3qVTGUr7kE6GX0tHoRzQC/WW9PfSECBhNo2bJlo5///OedFy9e3PNb3/pWS4OLqqJ5Q6BBT4tmgFH7zN6UXbmKgDUCPXr0aDZp0qSTnnrqqW6IBrs91lLSXgEj0KCnNWSAmah4r4BVXtUJGYHvfOc7bZcuXVpw6623tle3OGSN33B16Wn0tlrRkAE22FeudZQ+iIAPCDRv3jz9tttu6wQjzB8yZIi6xT5oM4eLWM/bZIAOE1fy3hPo3r17xoQJE06aOHFiTm5urrrF3jeJVyWQAXpFXvl6T+Db3/52G4wWF2CwpENGRobVx0F4X3CVwC4CcQ0wAzl9za7clI4ImEagWbNm6Zgu0xF3k/QcOnSopnqZ1kDOlofeRo+rjrpd4NOwRROpqvHoTVAJ5OTkZIwfP777M888k4ORY/3mg9rQtevFdqbHVUddA6x3ili9p96IQAAJDB48uA1uqcu/4447OvDsMIBVVJVqE6jlcTLA2nD0KYQEeD3wJz/5SUesPZh/wQUXtA4hgjBVOaYB8kEiChEIJQHcT9wUzyvOxf3FubjPWN3iYP4KanlczTPANqgvH4CuEIFQE8AKM63x8Pb8u+++O7tFixbqFgfr10CPo9dVRU0D1N0fESp6DT0B3D2SfsMNN2SzW4w1CNUtDtYvotrrahrgycGqo2ojAqkT6Ny5c1OsQp07bdq07gUFBeoWp47UhBSqva6mAVa7ogklVBlEwCQCAwcObIXnkuTfe++9HbHyjLrFJjVO4mWp9rqaBljtiomnpyNEIPgEsAR/+o9//OMOfFLd8OHDq68jBb/mgathtddFDJB/0fQApMC1syrkBAE8lKnJ2LFjc2bMmNH91FNPrXVngRP5KU3bCdDrqs7iIwbYDV9otQzbOSvBIBM444wzWs2fPz//17/+dUc8p0TdYv80Nr2OnpcWMcBc/5RdJRUBcwjwyXQ/+tGPOrz88ssFI0aMULfYnKaJV5Iqz4sYYNd4e2u7CIhAdALZ2dlNRo8enTN79uyTevfurW5xdFSmbKnyvIgB5phSKpVDBPxMoH///i3nzZuX/8ADD3Rq27Zt5P+Xn6sU1LJXeV6kgXQGGNRmVr1cJ8Bu8ZVXXtke3eL8K664oq3rBVCGVgjoDNAKJe0jAskSyMrKavK73/2u29y5c0/q06dPs2TT0XGOENAZoCNYlagI1CHQt2/flrg22BNm2Lldu3aRXledvfTRZQLVZ4D8y5TtcubKTgRCRaBx48Zp6A5ncbQY3eN26emaNePxD4Ce14x/jXT9z+OWUPbhIZCZmdkYAyRdMVDSo1+/fuoWe9v0XWmAWd6WQbmLQPgInH766S1mzZrVE1NnOsMU1S325ieQRfDtvMlbuYpAuAk0atQoDZOns5YvX16AydTqFrv/c6i6IFvvaenul0M5ikB4CWC+YGPcTtd1wYIFeQMGDGgeXhKu17zq1FsG6Dp3ZSgC9QngDpLmM2fOzHvooYe6tG/fvnH9PfSNzQRkgDYDVXIikBIBjg5feumlmZxEjaW3Mjl6rHCMQJUB6hqgY3yVsAgkR6BNmzaNsfhqF3aLzzrrLHWLk8MY7yhdA4xHSNtFwEsCp5xySvPnn38+79FHH+2CBRd0OmhvY+gM0F6eSk0EnCFw8cUXZ3IlajyoSd1i+xBXnQHq9No+oEpJBBwj0Lp160Z4VGcXPLKz59lnn93CsYzCk3BzzgPU2mXhaXDVNAAE8HS6ZlOnTu0xbty4rlieX93i5Ns0gwbYJPnjdaQIiIBXBM4///x2y5YtK7j55puzuASXImECTXQGmDAzHSAC5hDAs0ga3X777Z0XL17cc9CgQeoWJ9Y0VWeAethzYtC0twgYRyAvL6/ZlClTetx///0dNXfQcvM05RmgDNAyL+0oAmYTuOqqqzo8+OCDnc0upTGlkwEa0xQqiAjYRODyyy/P0j3FlmDKAC1h0k4i4DMC5513XmufFdmL4lYZoBcZK08REAER8JwArwEe9rwUKoAIiICtBF5//fW9tiYYzMQOywCD2bCqVYgJvPjii7s+/PDDgyFGYLXqhzl7UmeAVnFpPxEwnMCcOXNKsZ7gDsOLaUrxqgywwpTSqBwiIALJEdi0adOhMWPGFL799tsHkkshlEdV6AwwlO2uSgeFwL59+yqnTZtW8uyzz+48cuRIUKrlVj3UBXaLtPIRAbsJrFy5cjfO+ooQR+1OOyTpyQBD0tCqZoAIfPHFF1Xd3dWrV6u7m1q7VhmgRotSg6ijRcAVAuzu4n7fHVgKa5e6u7YgP8BrgGW2JKVEREAEHCOwYsWKcnR3i3fs2KHurn2Uy2mA5falp5REQATsJLBx48aDf/jDHwrff/999dTsBHs8rSoD1Bmg/WCVogikRGDPnj2VkydP3jF9+vRdR4/qpC8lmNEPLtMZYHQ42iICrhM4duxY2vLly8vGjh27o6SkRM7nbAvoDNBZvkpdBKwT2LBhw8HRo0cXrl27Vt1d69hS2bPqDFBd4FQQ6lgRSJHA7t27j/7pT3/aMWPGjDKeASpcI6AusGuolZEI1CFAs1u6dGnZI488Urxr167KOpv10XkCVV3gXc7noxxEQARqEli/fv2BUaNGFWnVlppUXH+/k4Mg213PVhmKQEgJlJeXH504cWLxrFmzytXd9fxHUEgDPASVQNmeF0cFEIGAEqisrExbsmTJLnR3d8AE1d31vp3peYdogAyeBcoAq1DoHxGwl8C6desOcDLzxx9/zJMNhRkEqnq+EQPcijL1NaNcKoUIBIMABjaOPv3008Vz587V3VbmNSk9Ly1igLoOaF4DqUQ+JcA7NxYuXLjriSeeUHfX3DasdwZoblFVMhHwCYF//vOf+zm6++mnn6q7a3ab6QzQ7PZR6fxEoLS09MhTTz1VvGDBgt1+KneIy1rrDHBziEGo6iKQNAGuy/fCCy/sRHe3ZO/evRrdTZqk6wdWeV7Na4D7UYSWrhdDGYqATwl88MEH+zm6i3t49WAxf7Uhva7WGSBvQPw3pJFgfzWkSusBASxKemT8+PFFGOjY40H2yjJ1AvS6qpuuI2eATPJzSAZIEgoRaIAAu7t/+ctfStnd3b9/v1YtaICRT76i11VFXQOMfK9XERCBGgTWrFmzj6O7WKFZ3d0aXHz6tkED3OjTyqjYIuAYgeLi4iPjxo0rwm1s6u46Rtn1hKu9ruYZYPWXrhdHGYqAYQTQ3T02Z86cnZjaou6uYW1jQ3Gqva6mAfIvXCHUxYYMlIQI+JbAe++9x+5uIZ6/e9i3lVDBoxGgx1Wfzdc0QB6wAZIBkoQidAQKCwsPP/roo0WvvPLK3tBVPjwVpsdVR10D/Ahbvl29VW9EIAQEKioqjs2ePbsUCxeUHjhwQKO7wW5zelx1NGSA1Rv1RgSCTmD16tV7MZm5aNOmTeruBr2xj9cvpgF+hn34Q2gaDhaqZVgJbNu2jd3dwhUrVuwLK4MQ1pveRo+rjrpngJzj9CnUv3oPvRGBABE4dOjQsZkzZ5ZOmDChlO8DVDVVJT4BeluteZx1DZBJ8BRRBkgSikAReOutt/awu7t58+YjgaqYKmOVQK3uLw+KZoBWE9R+ImA8gS1btlSMHTu26PXXX1d31/jWcrSAMkBH8SpxowgcPHjw2PTp00smTZpUeviwxjiMahxvCmPJAMtQNs6U7uVNGZWrCKRO4K9//eue0aNHF23dulXd3dRxBiEFehq9rVY01AXmDm9DMsBaqPTBDwS+/PLLioceeqjwzTff5JpvChGIEKCn1YtoBvgO9ryu3t76QgQMJYAJzJXTpk0rmTx58k51dw1tJG+LRU+rF9EMkH1lXjBuVe8IfSEChhF47bXXduOsr3j79u3q7hrWNoYUh15W7/ofyxbNAPlDeh8aAilEwEgCuHvjEIyvCNNb1N01soWMKRS9rME/jtEMkCVnn3kI3yhEwCQC+/btq3zuuedKoJ1cpVkhAnEINHj9j8fEMsDVcRLVZhFwncCrr77K7m4R4qjrmStDvxKI6mWxDJDrZm2Eevm11ip3cAhgbb5DmNZS+O677x4ITq1UExcI0MPoZQ1GLAPkAa9BMsAG0elLNwjwWbvPPvvsjueff36XurtuEA9cHvSwqBHPAF/FkbdEPVobRMBBAliYtPzhhx8uxmMo1d11kHPAk6aHRY14BrgJR6obHBWfNjhBAE9eO4hFCwrff//9g06krzRDQ4DetSlWbeMZII9dAakbHIuittlCYM+ePZXPPPNM8YwZM8qOHtVJny1Qw50IvStmWDFAnkLeGjMVbRSBFAgcO3Ysbfny5WVYsWVHSUmJnC8Fljq0FoGY3V/uacUAN2O/9VBvHqAQATsJbNiw4SBHd9euXavurp1glRY9i94VM6wYIBNYCckAY6LUxkQI7N69++jEiRN3YHXmMp4BKkTAZgJxz/6Yn1UDXI592Q1uxIMUIpAsAZrdkiVLyvA8juJdu3ZVJpuOjhOBGAT4u3olxvbqTVYNsAhHcDWFwdVH6o0IJEjg008/PcA1+j788EN1dxNkp90TIkCvomfFDasGyIQWQTLAuEi1Q10C5eXlR/HM3eI5c+aUq7tbl44+O0CAXmUpEjHAt5BiCZRtKWXtFHoClZWVaYsWLdr12GOP7YAJqrsb+l+EKwDoUfQqS5GIAR5BikuhGyylrJ1CTWDdunUHOJn5448/PhRqEKq82wToUfQqS5GIATLBxZAM0BLacO6EgY0jf/zjH4vnzZu3O5wEVGuPCdCjLEeiBrgFKb8HDbScg3YMBQHeubFw4cKdjz/+eAmmuKi7G4pWN66S9CZ6lOVI1ACZ8AJIBmgZcfB3/Oijj/aju1uEUV51d4Pf3CbXkN6UUCRjgKuQA102N6GctHPgCJSWlh4ZP3588QsvvKDubuBa13cVoietSrTUyRgguzezoXsSzUz7B4MA1+VbsGDBznHjxpVwvb5g1Eq18DkBelLCv8VkDJCclkA/hdrygyI8BD744AN2dwtxD29FeGqtmhpOgD0QelLCkawBciY/+9s3JpyjDvAlASxKeuTJJ58swry+Pb6sgAodZAL0oqTuLkrWAAlzPnQt1JQfFMEkwO4uprSUwvxK9u/fr1ULgtnMfq7VYRSeXpRUpGKAJciRiyRcmlTOOsh4AmvWrNk3atSoIqzQrO6u8a0V2gLSg+hFSUUqBsgMZ0DfhdL5QREMAsXFxYcxn69o2bJle4NRI9UioATYI6EHJR2pGuAm5Py/0IVJl0AHGkMA3d1js2bNKsXCBaXq7hrTLCpIdAJc8mpT9M3xt6RqgMxhMjQMaswPCn8S+Pvf/76Xk5nx/F1eU1GIgOkE+OiEZ1MtpB0G+CUK8RKka4GptoYHxxcWFh7G4qRFeASlurse8FeWSROg59B7Ugo7DJAFmAJdDNmVHtNUJECA6+ylp1u/FFtRUXEMy9GXYln60gMHDmh0NwHW2tVzAlzthZ6TcthlWNtQEq7CcHnKJVICSRHgMzbatWtn6TLEO++8s5crM2/atEnd3aRo6yCPCdBr6DkpR6OUU/gqgal4q/9QX/Fw9R0fJh4vw23bth3+xS9+sfmmm27aIvOLR0vbDSVAj6HX2BKWzhgs5rQP+/HWuH4W99du9hI4dt5555F/vTh06NCxadOmldxxxx3bPv/8c83pq0dIX/iIwFyUdaVd5bXTAFmmddAIqDk/KNwjsH79+orc3NzGvXv3bhHJlWv0rVy5svz222/fsmLFin38rBABHxMoQ9m5CIttf8StXzW3To3XAe+zvrv2tJNAv379mg0YMKAFV2lZvXr1/u3bt/OCsUIEgkDgIVTiBTsr4oQB8qxyFtTLzoIqLREQgVAT2Ija/wiytRtj5yBIpHVYwMciH/QqAiIgAjYQoKfYan4skxMGyHTXQG/wjUIEREAEUiRAL6Gn2B5OGSALOh7StBjbm0wJikCoCNBD6CWOhN2jwDULyVVaabBn1vxS70VABEQgAQK842NVAvsntKsTgyA1C8A7TbhWf37NL/VeBERABCwQ+AL7XA05NpPByS4w68eCj4J0rylpKERABKwSoGfQOxwzPxbEyS4w02cUQ+2gPvygEAEREAELBOZhn0UW9ktpF6e7wJHCtcQbrtvfJfKFXkVABEQgCoFCfP9DaH+U7bZ97XQXOFJQVuThyAe9ioAIiEAMArzjw3HzY/5udIEj9fwSb3KhkyNf6FUEREAE6hB4GZ9n1PnOsY9udYEjFWiNN3OgrpEv9CoCIiACJwhsx+tVkGurk7t5Bsg6chWHz6DhkNvmiywVIiAChhKoRLnuhNhTdC3cNkBWjBc4me9/8YNCBERABEDgOWiZ2yTcGgSpW68p+IJrBypEQAREgF5AT3A9vOyGckCE1wOrF/B0vfbKUAREwGsCB1AAXvfb4kVBvOgCR+rJe4V3QEMiX+hVBEQgdARGo8aOrPRihaSXBsjy/QvqBPXmB4UIiECoCPBOD0+6vhHKXnaBI2XIwBteAD0t8oVeRUAEAk+As0FGQrY93yMZYiYYIMvNW+RmQpn8oBABEQg0AT7c6BqIM0I8Da+7wJHKc+LjeugiyBRTjpRNryIgAvYR4Hy/u6AN9iWZfEqmGCBrsBXi6q8D+UEhAiIQSAITUKuXTKmZSQZIJh9CfJpcT35QiIAIBIrA66jNoybVyDQDJJu/QYOgjvygEAERCAQBDnrwVrcjJtXG1OttHQBpOqT1A036tagsIpAcAQ52XAeVJne4c0d5dStcvBoR1M8hDo4oREAE/EuA/4f5f9k48yNSE7vALBdjF/QJdCFkqlGjaAoREIEoBNjdvQPi/2Mjw2QDJLBtEE+fh0AKERABfxH4PYq7yuQim26AZMfb5RhnHH/RvyIgAj4gMBll5GInRocfDJAA10JcTbovPyhEQASMJsBngT9tdAlPFM4vBsjiroY4NUb3DJOGQgTMJLAQxXrEzKLVL5WfDJClfxvqDnGytEIERMAsAq+gOKMgPtTcF+E3AyTYNyEaYB6kEAERMIPAKhTjfuioGcWxVgq/GSBrxZup34D6QLmQQgREwFsC7yL7X0JG3eVhBYkfDZD1ognyvsKvQTJBQFCIgEcEeG2e5ufpun7J1t2vBsj68q/Nq5C6w6ShEAH3CaxClvdAvjQ/4vKzAbL8kTNBngVqYIREFCLgDgEOeNwP8UTEt+F3AyR4muAqKBvSFBlAUIiAwwQ41WUU5KsBj4aYBMEAWS+ODv8N0mRp0lCIgHMEOMmZ8/x8M9UlFoqgGGCkjrwgy9Btc8c56F8RsJMAb2/zxR0eVisdNANkvXnb3DZoMKRVZABBIQIpEuB1Pi5sYPy9vYnWM4gGSAb/gj6ChkAZkEIERCA5AlzPj0tarUrucLOPCqoBkjrPAnnXyH9DvDaoEAERSIwAl6L7KWTsen6JVaf+3kE2QNaWi6r+L3QmxIUUFCIgAtYI8BkeND+eSAQ2gm6AbLgD0HIoD+oJKURABGIT4F1WfIDRnti7+X9rGAyQrcSLuLxrhDPWeTaYDilEQARqE+Cc2gkQH13p6wnOtasV/VNYDDBCgM8d5uDIOVDzyJd6FQERSCsDg7ugl8LEImwGyLbdCq2Avg7puiAgKEJPgNf7fgZtCBuJMBog25hD+/xL1wHqDSlEIKwEFqHi90LlYQQQVgNkW/M+Rk6T2Q6dDTWFFCIQFgIHUNEx0BTI9/f0JttoYTbACDNOmuYACRdY7RT5Uq8iEGAC61C326A1Aa6jparJAI9j2o2XZRBHhweceMWLQgQCRYCjvFOh/4E46BH6kAF+9RPgj4N/Ed+HzoLaQAoRCAoBXurh3D7+oedvXQECMsD6P4NCfLUU6gydXH+zvhEB3xFYjhLzft4vfVdyhwusCcGxAQ/G5l9BXWLvpq0iYCQB/jF/GHrLyNIZUCidAcZuBP7F5DSBltDpkP5gAILCeAJcrHQ+xOd1/Nv40npYQP2Htg6/L3b9LZRv/RDtKQKuE/gCOY6CPnY9Zx9mKANMrNE4V/B66EZI8wYBQWEMgcMoCUd4p0GhuI/XDvIywOQo5uKw26FzkztcR4mArQTeQGrjoS22phqCxGSAqTXymTj8bkiP5EyNo45OjsBGHPYYFPoJzcnh00X9ZLnVPI4DSSMg3kyeWXOD3ouAQwQ4iXkSxAG60N7GZgdbnQHaQfF4Gq3xchP0Q0jXB48z0b/2EuB1Po7uPgvttTfpcKYmA7S/3TmBeiR0KdTE/uSVYggJcFBjCfQcVBTC+jtWZRmgY2jTuiFpnhFeAjVyLhulHGACvGWNy7bxjC/Qz+bwqg1lgM6TPwlZ3AxdAIm387yDkAMnMvNhXpMhTsZXOERA/yEdAttAsj3x3bXQRZCuETYASF+l8Rof79v9M/Qf8XCegAzQecZ1c8jGFxwouQJqW3ejPoeSAJdjWwBxgKMklAQ8qrQM0CPwyLY5dBl0NZQDKcJHYCuqPBtaDB0MX/W9r7EM0Ps24ADJuRDPCLkOoSL4BLjmJM/4eAcHBzoUHhGQAXoEPkq2vMWOk6qHQ+wqK4JDgF3bZRAnL+uWNUPaVQZoSEPUKQbnDw6GaIbfhDSNBhB8GDy7ewei6b0FcT6fwiACMkCDGiNKUTixmiPHw6BTo+yjr80iwOfrvgpxRFcTl81qm1qlkQHWwmH8h+4o4fkQzbCX8aUNVwE3oro0vRXQ5nBV3b+1lQH6t+3yUHQa4VCoAFK4T+DfyHIlROPbBCl8RkAG6LMGi1JcPrNkEHQOxJHkVpDCfgL7kCRHcN+GVkN85obCxwRkgD5uvChF5wBKf4iDJzREdZUBIYVg15aGx8GMjyANZABCUEIGGJSWjF6PTGyiIUb0NbxvGn33UG85jNp/CtHoIioLNZGAV14GGPAGbqB6GfjuNChiiL3xniPNYQyO0K6HImb3Gd5XhBFEWOssAwxry9eudxt8ZFf55BqvHFhpCQUh9qMSHLD4HGKXNvK6B+8VISYgAwxx48epOn8b3aBcqCuUU+fVtDtVeKfFdmhrndct+LwN4hJTChGoRUAGWAuHPiRAoBn2pTFmQe0gXmuMKPKZr1z0gd1uDs7wldcfawofq5aB4vW3iNgN5WADX7lIQDnEa3GRV76PfN6F9zS+Q5BCBBIi8P+5sCed3tfddQAAAABJRU5ErkJggg==',playCircleBorder:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSIzMCIgY3k9IjMwIiByPSIyOSIgc3Ryb2tlPSIjRkZGIiBzdHJva2Utd2lkdGg9IjIiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNMjIgMTcuMTJ2MjYuM2ExIDEgMCAwMDEuNTQuODRsMjAuNy0xMy4xNWExIDEgMCAwMDAtMS42OWwtMjAuNy0xMy4xNWExIDEgMCAwMC0xLjU0Ljg1eiIvPjwvZz48L3N2Zz4=',arrowTop:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMCAwdjE2aDE2VjB6IiBvcGFjaXR5PSIuNSIvPjxwYXRoIGZpbGw9IiNDQ0MiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIuNTcgMTAuMjdhLjgzLjgzIDAgMDEtMS4xNC0xLjJsNi01LjY4Yy4zMi0uMy44Mi0uMyAxLjE0IDBsNiA1LjY3YS44My44MyAwIDExLTEuMTQgMS4yMUw4IDUuMTVsLTUuNDMgNS4xMnoiLz48L2c+PC9zdmc+',close:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTI5LjY1IDQuMDVhMS4yIDEuMiAwIDEwLTEuNy0xLjdsLTI1LjYgMjUuNmExLjIgMS4yIDAgMDAxLjcgMS43bDI1LjYtMjUuNnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMi4zNSA0LjA1YTEuMiAxLjIgMCAxMTEuNy0xLjdsMjUuNiAyNS42YTEuMiAxLjIgMCAwMS0xLjcgMS43TDIuMzUgNC4wNXoiLz48L3N2Zz4=',castNotConnected:'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6bTAtNHYyYTUgNSAwIDAxNSA1aDJhNyA3IDAgMDAtNy03em0wLTR2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEwem0yMC03SDNhMiAyIDAgMDAtMiAydjNoMlY1aDE4djE0aC03djJoN2EyIDIgMCAwMDItMlY1YTIgMiAwIDAwLTItMnoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6Ii8+PC9nPjwvc3ZnPg==',castConnected:'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6bTAtNHYyYTUgNSAwIDAxNSA1aDJhNyA3IDAgMDAtNy03em0xOC03SDV2MS42M0ExMy4wMyAxMy4wMyAwIDAxMTMuMzcgMTdIMTlWN3pNMSAxMHYyYTkgOSAwIDAxOSA5aDJBMTEgMTEgMCAwMDEgMTB6bTIwLTdIM2EyIDIgMCAwMC0yIDJ2M2gyVjVoMTh2MTRoLTd2Mmg3YTIgMiAwIDAwMi0yVjVhMiAyIDAgMDAtMi0yeiIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiLz48L2c+PC9zdmc+',castConntecting0:'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTR2MmE1IDUgMCAwMTUgNWgyYTcgNyAwIDAwLTctN3oiIG9wYWNpdHk9Ii4zIiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTB2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEweiIgb3BhY2l0eT0iLjMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjEgM0gzYTIgMiAwIDAwLTIgMnYzaDJWNWgxOHYxNGgtN3YyaDdhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJ6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIvPjwvZz48L3N2Zz4=',castConntecting1:'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6IiBvcGFjaXR5PSIuMyIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0xIDE0djJhNSA1IDAgMDE1IDVoMmE3IDcgMCAwMC03LTd6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTB2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEweiIgb3BhY2l0eT0iLjMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjEgM0gzYTIgMiAwIDAwLTIgMnYzaDJWNWgxOHYxNGgtN3YyaDdhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJ6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIvPjwvZz48L3N2Zz4=',castConntecting2:'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6TTEgMTR2MmE1IDUgMCAwMTUgNWgyYTcgNyAwIDAwLTctN3oiIG9wYWNpdHk9Ii4zIiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTB2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEweiIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0yMSAzSDNhMiAyIDAgMDAtMiAydjNoMlY1aDE4djE0aC03djJoN2EyIDIgMCAwMDItMlY1YTIgMiAwIDAwLTItMnoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6Ii8+PC9nPjwvc3ZnPg==',warning:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc4MCcgaGVpZ2h0PSc4MCcgdmlld0JveD0nMCAwIDgwIDgwJz48cGF0aCBmaWxsPScjRkZGJyBmaWxsLXJ1bGU9J25vbnplcm8nIGQ9J003OS40MDkgNzAuMDQ0TDQ0LjUxNCA0LjY2MUE1LjAyMyA1LjAyMyAwIDAgMCA0MC4wODMgMmgtLjAwNWE1LjAyNCA1LjAyNCAwIDAgMC00LjQzMSAyLjY1NkwuNTk3IDcwLjAzOUE1LjAzNyA1LjAzNyAwIDAgMCAuNzExIDc1YTUuMDQyIDUuMDQyIDAgMCAwIDQuMzE1IDIuNDQ0aDY5Ljk0YzEuNzcxIDAgMy40MDYtLjkyNiA0LjMxNi0yLjQ0NWE1LjAyOSA1LjAyOSAwIDAgMCAuMTI2LTQuOTU0em0tMzkuMzMxLTIuNjZhNS4wMzEgNS4wMzEgMCAwIDEtNS4wMy01LjAzIDUuMDMxIDUuMDMxIDAgMCAxIDUuMDMtNS4wMyA1LjAzNSA1LjAzNSAwIDAgMSA1LjAzIDUuMDMgNS4wMzEgNS4wMzEgMCAwIDEtNS4wMyA1LjAzem01LjAzNC0yMC4wMzhhNS4wMzEgNS4wMzEgMCAwIDEtNS4wMjkgNS4wMyA1LjAyOCA1LjAyOCAwIDAgMS01LjAzLTUuMDNWMjcuMjI4YTUuMDMxIDUuMDMxIDAgMCAxIDUuMDMtNS4wMyA1LjAzNSA1LjAzNSAwIDAgMSA1LjAzIDUuMDN2MjAuMTE4eicvPjwvc3ZnPgo=',cancel:'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNic+PGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz48cGF0aCBkPSdNMCAwaDM2djM2SDB6JyBvcGFjaXR5PScuNScvPjxwYXRoIGQ9J00zMS41MzMgNC45MDNMNC40NjcgMzAuNjQ1bTI3LjA2Ni40NTJMNC45MzMgNC45MDMnIGZpbGwtcnVsZT0nbm9uemVybycgc3Ryb2tlPScjRkZGJyBzdHJva2Utd2lkdGg9JzQnLz48L2c+PC9zdmc+'};const Icon=function({type,...others}){return jsx("div",{css:/*#__PURE__*/ /*#__PURE__*/css({width:'1.5em',height:'1.5em',backgroundPosition:'center',backgroundSize:'cover',backgroundImage:`url(${icon[type]})`,pointerEvents:'none',touchAction:'none'},process.env.NODE_ENV==="production"?"":";label:Icon;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkljb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT00iLCJmaWxlIjoiSWNvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBpY29uIGZyb20gJ3N0eWxlL2ljb24nXG5cbmNvbnN0IEljb24gPSBmdW5jdGlvbiAoe3R5cGUsIC4uLm90aGVyc30pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e3tcbiAgICAgICAgd2lkdGg6ICcxLjVlbScsXG4gICAgICAgIGhlaWdodDogJzEuNWVtJyxcbiAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2ljb25bdHlwZV19KWAsXG4gICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgdG91Y2hBY3Rpb246ICdub25lJyxcbiAgICAgIH19XG4gICAgICBhcmlhLWxhYmVsPXt0eXBlfVxuICAgICAgey4uLm90aGVyc31cbiAgICAvPlxuICApXG59XG5cbkljb24ucHJvcFR5cGVzID0ge1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uXG4iXX0= */",process.env.NODE_ENV==="production"?"":";label:css;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlYWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW80RXNCIiwiZmlsZSI6InJlYWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlQ29udGV4dCwgY2xvbmVFbGVtZW50LCBjcmVhdGVDb250ZXh0LCB1c2VSZWR1Y2VyLCB1c2VMYXlvdXRFZmZlY3QsIGZvcndhcmRSZWYsIHVzZU1lbW8sIHVzZUltcGVyYXRpdmVIYW5kbGUsIEZyYWdtZW50IGFzIEZyYWdtZW50JDIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRGltZW5zaW9ucyBmcm9tICdyZWFjdC1jb29sLWRpbWVuc2lvbnMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICdAanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlcic7XG5pbXBvcnQgVUFQYXJzZXIgZnJvbSAndWEtcGFyc2VyLWpzJztcbmltcG9ydCByZXF1aXJlJCQwIGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCB7IGpzeCwganN4cyBhcyBqc3hzJDEsIEZyYWdtZW50IGFzIEZyYWdtZW50JDEgfSBmcm9tICdyZWFjdC9qc3gtcnVudGltZSc7XG5pbXBvcnQgJ2NvcmUtanMvcHJvcG9zYWxzL3JlbGF0aXZlLWluZGV4aW5nLW1ldGhvZCc7XG5pbXBvcnQgeyBjc3MsIENsYXNzTmFtZXMsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBqc3gkMSwganN4cywgRnJhZ21lbnQgfSBmcm9tICdAZW1vdGlvbi9yZWFjdC9qc3gtcnVudGltZSc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHVzZU9uY2xpY2tPdXRzaWRlIGZyb20gJ3JlYWN0LWNvb2wtb25jbGlja291dHNpZGUnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBtaXR0IGZyb20gJ21pdHQnO1xuaW1wb3J0IF9nZXQgZnJvbSAnZGx2JztcblxuY29uc3QgaGFuZGxlRXJyb3IgPSBhc3luYyAoe1xuICBuYXRpdmVFdmVudDogZXZlbnRcbn0sIHtcbiAgcmVsb2FkLFxuICBkaXNwbGF5RXJyb3Jcbn0pID0+IHtcbiAgdmFyIF9ldmVudCR0YXJnZXQ7XG5cbiAgY29uc29sZS53YXJuKGV2ZW50KTtcblxuICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBjb2RlLFxuICAgIG5hbWUsXG4gICAgZGF0YSxcbiAgICBtZXNzYWdlXG4gIH0gPSBldmVudC5lcnJvciB8fCB7fTtcbiAgY29uc3QgbGFzdFBsYXllZFRpbWUgPSAoX2V2ZW50JHRhcmdldCA9IGV2ZW50LnRhcmdldCkgPT09IG51bGwgfHwgX2V2ZW50JHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V2ZW50JHRhcmdldC5jdXJyZW50VGltZTtcbiAgY29uc3QgcGxheWluZyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGV2ZW50LnRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgKCkgPT4ge1xuICAgICAgdmFyIF9ldmVudCR0YXJnZXQyO1xuXG4gICAgICByZXR1cm4gKC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnNhZmUtb3B0aW9uYWwtY2hhaW5pbmdcbiAgICAgICAgcmVzb2x2ZShNYXRoLmFicygoKF9ldmVudCR0YXJnZXQyID0gZXZlbnQudGFyZ2V0KSA9PT0gbnVsbCB8fCBfZXZlbnQkdGFyZ2V0MiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V2ZW50JHRhcmdldDIuY3VycmVudFRpbWUpIC0gbGFzdFBsYXllZFRpbWUpID4gMC4wMSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAzMDAwKTtcbiAgfSk7XG5cbiAgaWYgKHBsYXlpbmcpIHtcbiAgICBjb25zb2xlLndhcm4oJ2lnbm9yZSBlcnJvciBzaW5jZSBwbGF5ZXIgaXMgc3RpbGwgcGxheWluZycsIGV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoW2NvZGUsIG5hbWUsIGRhdGEsIG1lc3NhZ2VdLmV2ZXJ5KGl0ID0+IHR5cGVvZiBpdCA9PT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgY29uc29sZS53YXJuKCdmb3JjZSByZWxvYWQgdG8gd29ya2Fyb3VuZCBzaGFrYS1wbGF5ZXIgaXNzdWUsIHNlZSBCTC0xMTQ3IGZvciBkZXRhaWxzJyk7XG4gICAgcmVsb2FkKCk7XG4gIH0gZWxzZSB7XG4gICAgZGlzcGxheUVycm9yKHtcbiAgICAgIGNvZGUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIG1lc3NhZ2VcbiAgICB9KTtcbiAgfVxufTtcblxuY29uc3QgTGFuZ3VhZ2VDb2RlJDEgPSB7XG4gIEVOOiAnZW4nLFxuICBKQTogJ2phJyxcbiAgWkhUVzogJ3poLVRXJ1xufTtcbmNvbnN0IFNlZWtPcmlnaW4gPSB7XG4gIFNUQVJUOiAnU1RBUlQnLFxuICBDVVJSRU5UOiAnQ1VSUkVOVCdcbn07XG5jb25zdCBDYXN0U3RhdGUgPSB7XG4gIE5PX0RFVklDRVNfQVZBSUxBQkxFOiAnTk9fREVWSUNFU19BVkFJTEFCTEUnLFxuICBDT05ORUNURUQ6ICdDT05ORUNURUQnLFxuICBDT05ORUNUSU5HOiAnQ09OTkVDVElORycsXG4gIE5PVF9DT05ORUNURUQ6ICdOT1RfQ09OTkVDVEVEJ1xufTtcbmNvbnN0IEl0ZW1UeXBlJDEgPSB7XG4gIFZJREVPUzogJ3ZpZGVvcycsXG4gIExJVkVTOiAnbGl2ZXMnXG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuY29uc3QgcGFyc2VyID0gbmV3IFVBUGFyc2VyKCk7XG5mdW5jdGlvbiBnZXRPUygpIHtcbiAgcmV0dXJuIHBhcnNlci5nZXRPUygpO1xufVxuZnVuY3Rpb24gZ2V0RGV2aWNlKCkge1xuICBjb25zdCBkZXZpY2UgPSBwYXJzZXIuZ2V0RGV2aWNlKCk7XG4gIGNvbnN0IG9zTmFtZSA9IGdldE9TKCkubmFtZTtcbiAgaWYgKGRldmljZS50eXBlID09PSB1bmRlZmluZWQgJiYgb3NOYW1lID09PSAnQW5kcm9pZCcpIGRldmljZS50eXBlID0gJ3RhYmxldCc7XG4gIHJldHVybiBkZXZpY2U7XG59XG5mdW5jdGlvbiBuZWVkTmF0aXZlSGxzKCkge1xuICAvLyBEb24ndCBsZXQgQW5kcm9pZCBwaG9uZXMgcGxheSBITFMsIGV2ZW4gaWYgc29tZSBvZiB0aGVtIHJlcG9ydCBzdXBwb3J0ZWRcbiAgLy8gVGhpcyBjb3ZlcnMgU2Ftc3VuZyAmIE9QUE8gc3BlY2lhbCBjYXNlc1xuICBjb25zdCBpc0FuZHJvaWQgPSAvYW5kcm9pZHxYMTF8TGludXgvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOyAvLyBjYW5QbGF5VHlwZSBpc24ndCByZWxpYWJsZSBhY3Jvc3MgYWxsIGlPUyB2ZXJpb24gLyBkZXZpY2UgY29tYmluYXRpb25zLCBzbyBhbHNvIGNoZWNrIHVzZXIgYWdlbnRcblxuICBjb25zdCBpc1NhZmFyaSA9IC9eKCg/IWNocm9tZXxhbmRyb2lkfFgxMXxMaW51eCkuKSooc2FmYXJpfGlQYWR8aVBob25lfFZlcnNpb24pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuICBpZiAoaXNTYWZhcmkpIHtcbiAgICByZXR1cm4gJ21heWJlJztcbiAgfVxuXG4gIGNvbnN0IGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgY29uc3QgaXNFZGdlID0gL2VkZy9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIGNvbnN0IGlzQ2hyb21lID0gL2Nocm9tZS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIWlzRWRnZTtcblxuICBpZiAoaXNBbmRyb2lkIHx8IGlzRmlyZWZveCB8fCBpc0VkZ2UgfHwgaXNDaHJvbWUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfSAvLyByZWY6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xMjkwNTEyMi80NTc4MDE3XG4gIC8vIG5vbmUgb2Ygb3VyIHN1cHBvcnRlZCBicm93c2VycyBvdGhlciB0aGFuIFNhZmFyaSByZXNwb25zZSB0byB0aGlzXG5cblxuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKS5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWdVUkwnKTtcbn1cblxuY29uc3QgaXNEZXNrdG9wID0gKCkgPT4gIWdldERldmljZSgpLnR5cGU7IC8vIFRPRE8gc29sdmUgbGludCBlcnJvcjpcbi8vIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cygpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU2FmYXJpIDExLCBpT1MgU2FmYXJpIDExLjAtMTEuMiAgY29tcGF0L2NvbXBhdFxuXG5cbmNvbnN0IGlzSU9TID0gKCkgPT4gL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdNYWNJbnRlbCcgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMTtcbi8vIElFIGlzIG5vIGxvZ2VyIHN1cHBvcnRlZCwgc28gbm8gc3BlY2lhbCBxdWVyaWVzIGZvciBpdFxuXG5cbmNvbnN0IGhhdmVQb2ludGVyID0gKCkgPT4ge1xuICBpZiAoaGF2ZVBvaW50ZXIubWVtbykge1xuICAgIHJldHVybiBoYXZlUG9pbnRlci5tZW1vO1xuICB9XG5cbiAgaGF2ZVBvaW50ZXIubWVtbyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIFsnKGhvdmVyOiBob3ZlcikgYW5kIChwb2ludGVyOiBmaW5lKScsICdub3QgYWxsIGFuZCAoYW55LXBvaW50ZXI6IGNvYXJzZSknXS5ldmVyeShxdWVyeSA9PiB3aW5kb3cubWF0Y2hNZWRpYShxdWVyeSkubWF0Y2hlcyk7XG4gIHJldHVybiBoYXZlUG9pbnRlci5tZW1vO1xufTtcblxuY29uc3QgbXVsdGlSZWYgPSAoLi4ucmVmcykgPT4gZWxlbWVudCA9PiB7XG4gIGlmIChlbGVtZW50KSB7XG4gICAgcmVmcy5mb3JFYWNoKHJlZiA9PiB7XG4gICAgICBpZiAocmVmICYmICdjdXJyZW50JyBpbiByZWYpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZiA9PT0gbnVsbCB8fCByZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZihlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufTtcblxuY29uc3Qgb24gPSAodGFyZ2V0LCBuYW1lLCBoYW5kbGVyKSA9PiB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGhhbmRsZXIpO1xuICByZXR1cm4gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgaGFuZGxlcik7XG59O1xuXG5jb25zdCBvbmNlID0gKHRhcmdldCwgbmFtZSwgaGFuZGxlcikgPT4ge1xuICBjb25zdCBvbmVUaW1lID0gKC4uLmFyZ3MpID0+IHtcbiAgICBoYW5kbGVyKC4uLmFyZ3MpO1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIG9uZVRpbWUpO1xuICB9O1xuXG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIG9uZVRpbWUpO1xuICByZXR1cm4gKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgb25lVGltZSk7XG59O1xuXG5jb25zdCB3YWl0Rm9yID0gKGNoZWNrLCBoYW5kbGVyKSA9PiB7XG4gIGNvbnN0IGNoZWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgaWYgKGNoZWNrKCkpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2spO1xuICAgICAgaGFuZGxlcigpO1xuICAgIH1cbiAgfSwgNTApO1xuICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChjaGVja0ludGVydmFsKTtcbn07XG5cbmNvbnN0IHZlbmRvcnMgPSB7XG4gIGNoYW5nZTogWydmdWxsc2NyZWVuY2hhbmdlJywgJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCAnTVNGdWxsc2NyZWVuQ2hhbmdlJ10sXG4gIGVsZW1lbnQ6IFsnZnVsbHNjcmVlbkVsZW1lbnQnLCAnd2Via2l0RnVsbHNjcmVlbkVsZW1lbnQnLCAnbXNGdWxsc2NyZWVuRWxlbWVudCddLFxuICByZXF1ZXN0OiBbJ3JlcXVlc3RGdWxsc2NyZWVuJywgJ3dlYmtpdFJlcXVlc3RGdWxsU2NyZWVuJywgJ21zUmVxdWVzdEZ1bGxzY3JlZW4nXSxcbiAgZXhpdDogWydleGl0RnVsbHNjcmVlbicsICd3ZWJraXRFeGl0RnVsbHNjcmVlbicsICdtc0V4aXRGdWxsc2NyZWVuJ11cbn07XG5cbmNvbnN0IGdldE5hbWUgPSAob2JqZWN0LCBuYW1lTGlzdCkgPT4gbmFtZUxpc3QuZmluZChuYW1lID0+IG5hbWUgaW4gb2JqZWN0KTtcblxuY29uc3Qgb25WaWV3TW9kZUNoYW5nZSA9ICh2aWRlbywgb25DaGFuZ2UpID0+IHtcbiAgY29uc3QgdmVuZG9yRWxlbWVudE5hbWUgPSBnZXROYW1lKGRvY3VtZW50LCB2ZW5kb3JzLmVsZW1lbnQpO1xuXG4gIGlmICh2ZW5kb3JFbGVtZW50TmFtZSkge1xuICAgIG9uQ2hhbmdlKGRvY3VtZW50W3ZlbmRvckVsZW1lbnROYW1lXSA/ICdmdWxsc2NyZWVuJyA6ICdpbmxpbmUnKTtcbiAgICByZXR1cm4gdmVuZG9ycy5jaGFuZ2UubWFwKG5hbWUgPT4gb24oZG9jdW1lbnQsIG5hbWUsICgpID0+IG9uQ2hhbmdlKGRvY3VtZW50W3ZlbmRvckVsZW1lbnROYW1lXSA/ICdmdWxsc2NyZWVuJyA6ICdpbmxpbmUnKSkpO1xuICB9XG5cbiAgb25DaGFuZ2UodmlkZW8ud2Via2l0RGlzcGxheWluZ0Z1bGxzY3JlZW4gPyAnZnVsbHNjcmVlbicgOiAnaW5saW5lJyk7XG4gIGNvbnN0IHJlZ2lzdGVyZWQgPSBbb24odmlkZW8sICd3ZWJraXRiZWdpbmZ1bGxzY3JlZW4nLCAoKSA9PiBvbkNoYW5nZSgnZnVsbHNjcmVlbicpKSwgb24odmlkZW8sICd3ZWJraXRlbmRmdWxsc2NyZWVuJywgKCkgPT4gb25DaGFuZ2UoJ2lubGluZScpKV07XG4gIHJldHVybiAoKSA9PiB7XG4gICAgcmVnaXN0ZXJlZC5mb3JFYWNoKHJlbW92ZUxpc3RlbmVyID0+IHJlbW92ZUxpc3RlbmVyKCkpO1xuICB9O1xufTtcblxuY29uc3QgdG9nZ2xlRnVsbHNjcmVlbiA9IGNvbnRhaW5lciA9PiB7XG4gIGNvbnN0IHZlbmRvclJlcXVlc3RGbiA9IGNvbnRhaW5lcltnZXROYW1lKGNvbnRhaW5lciwgdmVuZG9ycy5yZXF1ZXN0KV07XG5cbiAgaWYgKHZlbmRvclJlcXVlc3RGbikge1xuICAgIGNvbnN0IGFjdGlvbiA9IGRvY3VtZW50W2dldE5hbWUoZG9jdW1lbnQsIHZlbmRvcnMuZWxlbWVudCldID8gJ2V4aXQnIDogJ3JlcXVlc3QnO1xuICAgIGNvbnN0IHRhcmdldCA9IGFjdGlvbiA9PT0gJ3JlcXVlc3QnID8gY29udGFpbmVyIDogZG9jdW1lbnQ7XG4gICAgcmV0dXJuIHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldFtnZXROYW1lKHRhcmdldCwgdmVuZG9yc1thY3Rpb25dKV0oKTtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCd2aWRlbycpO1xuICByZXR1cm4gdGFyZ2V0LndlYmtpdERpc3BsYXlpbmdGdWxsc2NyZWVuID8gdGFyZ2V0LndlYmtpdEV4aXRGdWxsU2NyZWVuKCkgOiB0YXJnZXQud2Via2l0RW50ZXJGdWxsU2NyZWVuKCk7XG59O1xuXG4vKlxuICBSdWxlczpcbiAgICAxICBTZXQgYHRydWVgIGltbWVkaWF0ZWx5IGluIGZpcnN0IHRpbWUgKEZvciBsb2Fkc3RhcnQgZXZlbnQpXG4gICAgMi4gU2V0IGB0cnVlYCB0byB3YWl0aW5nIGxhemlseSBidXQgdXBkYXRlIHdhaXRpbmcgdG8gYGZhbHNlYCBpbW1lZGlhdGVseVxuKi9cblxuY29uc3QgdXNlTGF6eVdhaXRpbmcgPSB3YWl0aW5nID0+IHtcbiAgY29uc3QgW2ZpcnN0LCBzZXRGaXJzdF0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VTdGF0ZSh3YWl0aW5nKTtcbiAgY29uc3QgdGltZXIgPSB1c2VSZWYoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG5cbiAgICBpZiAod2FpdGluZyAmJiAhZmlyc3QpIHtcbiAgICAgIHRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2god2FpdGluZyk7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGF0Y2god2FpdGluZyk7XG4gICAgICBzZXRGaXJzdChmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lci5jdXJyZW50KTtcbiAgfSwgW3dhaXRpbmddKTtcbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuY29uc3QgdXNlQXV0b0hpZGUgPSAoe1xuICBoaWRlVGltZU1zID0gMzAwMCxcbiAgcGlubmVkLFxuICB0YXBUb0hpZGUsXG4gIG9uSGlkZVxufSA9IHt9KSA9PiB7XG4gIGNvbnN0IHRpbWVyID0gdXNlUmVmKCk7XG4gIGNvbnN0IFttb2RlLCBzZXRNb2RlXSA9IHVzZVN0YXRlKCdoaWRkZW4nKTtcblxuICBjb25zdCBpbnRlcmFjdCA9ICgpID0+IHtcbiAgICBpZiAobW9kZSAhPT0gJ3Nob3duJykge1xuICAgICAgc2V0TW9kZSgnc2hvd24nKTtcbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG5cbiAgICBpZiAoIXBpbm5lZCkge1xuICAgICAgdGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4gc2V0TW9kZSgnaGlkZGVuJyksIGhpZGVUaW1lTXMpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoaWRlID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lci5jdXJyZW50KTtcbiAgICBzZXRNb2RlKCdoaWRkZW4nKTtcbiAgICBvbkhpZGUgPT09IG51bGwgfHwgb25IaWRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkhpZGUoKTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RlID09PSAnc2hvd24nKSB7XG4gICAgICBpbnRlcmFjdCgpO1xuICAgIH1cbiAgfSwgW2hpZGVUaW1lTXNdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGlubmVkKSB7XG4gICAgICBzZXRNb2RlKCdzaG93bicpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyLmN1cnJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnRlcmFjdCgpO1xuICAgIH1cbiAgfSwgW3Bpbm5lZF0pO1xuICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lci5jdXJyZW50KTtcbiAgfSwgW10pO1xuICByZXR1cm4ge1xuICAgIG1vZGUsXG4gICAgc2hvdzogaW50ZXJhY3QsXG4gICAgaGlkZSxcbiAgICBvbkNsaWNrOiBldmVudCA9PiB7XG4gICAgICBpZiAobW9kZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgaW50ZXJhY3QoKTtcbiAgICAgIH0gZWxzZSBpZiAodGFwVG9IaWRlICYmIGV2ZW50LnRhcmdldC50YWdOYW1lICE9PSAnQlVUVE9OJykge1xuICAgICAgICAvLyBoaWRlIGlmIHRhcHBpbmcgb24gZWxzZXdoZXJlXG4gICAgICAgIGhpZGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uTW91c2VNb3ZlOiAoKSA9PiB7XG4gICAgICAvLyBJbiBtb2JpbGUgd2ViLCBlbXVsYXRlZCBjbGlja3MgZ2VuZXJhdGUgZXh0cmEgbW91c2UgbW92ZSBldmVudHNcbiAgICAgIGlmICghKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdykpIHtcbiAgICAgICAgaW50ZXJhY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG52YXIgcHJvcFR5cGVzID0ge2V4cG9ydHM6IHt9fTtcblxuLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG52YXIgb2JqZWN0QXNzaWduID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQkMyA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldF8xID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQkMztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcHJpbnRXYXJuaW5nJDEgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQkMiA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0XzE7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyQxID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gIHByaW50V2FybmluZyQxID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyQxKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzJDEodHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQkMik7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyQxKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nJDEoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcyQxLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn07XG5cbnZhciBjaGVja1Byb3BUeXBlc18xID0gY2hlY2tQcm9wVHlwZXMkMTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgUmVhY3RJcyQxID0gcmVxdWlyZSQkMDtcbnZhciBhc3NpZ24gPSBvYmplY3RBc3NpZ247XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCQxID0gUmVhY3RQcm9wVHlwZXNTZWNyZXRfMTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzXzE7XG5cbnZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCQxKSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0JDEpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzJDEuaXNWYWxpZEVsZW1lbnRUeXBlKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50IHR5cGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XG4gICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIGFyZ3VtZW50cy4gJyArXG4gICAgICAgICAgICAnQSBjb21tb24gbWlzdGFrZSBpcyB0byB3cml0ZSBvbmVPZih4LCB5LCB6KSBpbnN0ZWFkIG9mIG9uZU9mKFt4LCB5LCB6XSkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMsIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIFN0cmluZyhwcm9wVmFsdWUpICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChoYXMocHJvcFZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0JDEpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCQxKSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQkMSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxuICAgICAgLy8gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXG4gICAgICAgICAgICAnXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xuICAgICAgICAgICAgJ1xcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCQxKTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5WzFdKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7XG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cbiAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBmYWxzeSB2YWx1ZSBjYW4ndCBiZSBhIFN5bWJvbFxuICAgIGlmICghcHJvcFZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBjaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZTtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBSZWFjdFByb3BUeXBlc1NlY3JldF8xO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbnZhciBmYWN0b3J5V2l0aFRocm93aW5nU2hpbXMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfSAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfSAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlJCQwO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgcHJvcFR5cGVzLmV4cG9ydHMgPSBmYWN0b3J5V2l0aFR5cGVDaGVja2VycyhSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHByb3BUeXBlcy5leHBvcnRzID0gZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zKCk7XG59XG5cbnZhciBQcm9wVHlwZXMgPSBwcm9wVHlwZXMuZXhwb3J0cztcblxudmFyIGVuID0ge1xuXHRcIktLUy5ZRVNcIjogXCJZZXNcIixcblx0XCJLS1MuTk9cIjogXCJOb1wiLFxuXHRcIktLUy5PS1wiOiBcIk9LXCIsXG5cdFwiS0tTLkNBTkNFTFwiOiBcIkNhbmNlbFwiLFxuXHRcIktLUy5UUllBR0FJTlwiOiBcIlRyeSBhZ2FpblwiLFxuXHRcIktLUy5MRUFWRVwiOiBcIkxlYXZlXCIsXG5cdFwiS0tTLkJBQ0tcIjogXCJCYWNrXCIsXG5cdFwiS0tTLkRFTEVURVwiOiBcIkRlbGV0ZVwiLFxuXHRcIktLUy5QTEFZLldJVEguUVVBTElUWVwiOiBcIlBsYXkgdGhpcyBxdWFsaXR5XCIsXG5cdFwiS0tTLlFVQUxJVFlcIjogXCJRdWFsaXR5XCIsXG5cdFwiS0tTLlNVQlRJVExFU1wiOiBcIlN1YnRpdGxlc1wiLFxuXHRcIktLUy5BVURJT1wiOiBcIkF1ZGlvXCIsXG5cdFwiS0tTLlNFVFRJTkcuT0ZGXCI6IFwib2ZmXCIsXG5cdFwiS0tTLlNFVFRJTkdcIjogXCJTZXR0aW5nXCIsXG5cdFwiS0tTLlNFVFRJTkcuQ09ORkxJQ1RcIjogXCJTZXR0aW5nIGNvbmZsaWN0XCIsXG5cdFwiS0tTLkNPTkZMSUNULk1FU1NBR0VcIjogXCJUaGUgdmlkZW8gcXVhbGl0eSBpcyBoaWdoZXIgdGhhbiBhdXRvIHF1YWxpdHkgZGVmYXVsdCBzZXR0aW5nXCIsXG5cdFwiS0tTLlNFVFRJTkcuQVVUT1wiOiBcIkF1dG9cIixcblx0XCJLS1MuU0VUVElORy5BVVRPUExBWVwiOiBcIkF1dG9wbGF5XCIsXG5cdFwiS0tTLlNFVFRJTkcuVkVSU0lPTlwiOiBcIlZlcnNpb25cIixcblx0XCJLS1MuU0VUVElORy5TVUJUSVRMRVwiOiBcIlN1YnRpdGxlXCIsXG5cdFwiS0tTLlNFVFRJTkcuRFVCQkVEXCI6IFwiRHViYmVkXCIsXG5cdFwiS0tTLlNFVFRJTkcuU1BFRURcIjogXCJTcGVlZFwiLFxuXHRcIktLUy5QUk9HUkFNLlRJVExFXCI6IFwiQ2Fu4oCZdCBwbGF5IHByb2dyYW1cIixcblx0XCJLS1MuUFJPR1JBTS5NRVNTQUdFXCI6IFwiTm8gcmVzcG9uc2Ugb3IgdGhpcyBwcm9ncmFtIGlzIG5vdCBvbiBhaXJcIixcblx0XCJLS1MuQVVUT1BMQVkuTkVYVC5FUElTT0RFXCI6IFwiQXV0by1wbGF5IG5leHQgZXBpc29kZVwiLFxuXHRcIktLUy5FTkRST0xMLkNPVU5URE9XTlwiOiBcIk5leHQ6IGluIHt0aW1lTGVmdH0gc2Vjb25kc1wiLFxuXHRcIktLUy5TU0FJLkxFQVJOLk1PUkVcIjogXCJMZWFybiBtb3JlXCIsXG5cdFwiS0tTLlNTQUkuU0tJUC5BRFwiOiBcIlNraXBcIixcblx0XCJLS1MuU1NBSS5TRUNPTkRTXCI6IFwic2Vjb25kc1wiLFxuXHRcIktLUy5QTEFZRVIuUExBWVwiOiBcIlBsYXlcIixcblx0XCJLS1MuUExBWUVSLlBBVVNFXCI6IFwiUGF1c2VcIixcblx0XCJLS1MuUExBWUVSLlJFUExBWVwiOiBcIlJlcGxheVwiLFxuXHRcIktLUy5QTEFZRVIuUkVXSU5EXCI6IFwiUmV3aW5kXCIsXG5cdFwiS0tTLlBMQVlFUi5QUkVWSU9VU1wiOiBcIlByZXZpb3VzIFZpZGVvXCIsXG5cdFwiS0tTLlBMQVlFUi5ORVhUXCI6IFwiTmV4dCBWaWRlb1wiLFxuXHRcIktLUy5QTEFZRVIuRk9SV0FSRFwiOiBcIkZvcndhcmRcIixcblx0XCJLS1MuUExBWUVSLk1VVEVcIjogXCJNdXRlXCIsXG5cdFwiS0tTLlBMQVlFUi5VTk1VVEVcIjogXCJVbm11dGVcIixcblx0XCJLS1MuUExBWUVSLkZVTExTQ1JFRU5cIjogXCJGdWxsIFNjcmVlblwiLFxuXHRcIktLUy5QTEFZRVIuRlVMTFNDUkVFTi5FWElUXCI6IFwiRXhpdCBGdWxsIFNjcmVlblwiLFxuXHRcIktLUy5QTEFZRVIuQ0FTVFwiOiBcIkNocm9tZWNhc3RcIixcblx0XCJLS1MuUExBWUVSLkNBU1QuRElTQ09OTkVDVFwiOiBcIlN0b3AgY2FzdGluZ1wiLFxuXHRcIktLUy5QTEFZRVIuUExBWS5ORVhUXCI6IFwiUGxheSBuZXh0IHZpZGVvXCIsXG5cdFwiS0tTLlBMQVlFUi5FWElUXCI6IFwiTGVhdmVcIixcblx0XCJLS1MuUExBWUVSLlBMQVlJTkdcIjogXCJQbGF5aW5nXCIsXG5cdFwiS0tTLlBST0dSQU0uRU5ERURcIjogXCJUaGUgbGl2ZSBldmVudCBoYXMgZW5kZWQuXFxuQ2xpY2sgT0sgdG8gYmFjayB0byBwcmV2aW91cyBwYWdlLlwiLFxuXHRcIktLUy5DQVNUSU5HXCI6IFwiWW91IGFyZSBjYXN0aW5nIHZpYSBDaHJvbWVjYXN0XCIsXG5cdFwiS0tTLkNBU1QuQ09OTlRFQ1RFRFwiOiBcIlt7Q0hST01FQ0FTVH1dIGlzIGNvbm5lY3RlZC4gTm93IHlvdSBjYW4gY2FzdCBvbiBpdFwiLFxuXHRcIktLUy5DQVNULlNUQVRVU1wiOiBcIlt7VklERU99XSBpcyBjYXN0aW5nIG9uIFt7Q0hST01FQ0FTVH1dXCIsXG5cdFwiS0tTLkVSUk9SXCI6IFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuKHtjb2RlfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjQwMVwiOiBcIlBsZWFzZSBsb2dpbiB0byBwbGF5IHRoaXMgdmlkZW8uKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjQwNFwiOiBcIlRoaXMgdmlkZW8gZG9lcyBub3QgZXhpc3QuKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjQyOVwiOiBcIlRoZSB1c2VyIGhhcyBzZW50IHRvbyBtYW55IHJlcXVlc3RzIGluIGEgZ2l2ZW4gYW1vdW50IG9mIHRpbWUuKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjUwM1wiOiBcIlNlcnZpY2UgbWFpbnRlbmFuY2UgaXMgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjEwMDBcIjogXCJZb3UgZG8gbm90IGhhdmUgdmFsaWQgcGVybWlzc2lvbiB0byBwbGF5IHRoaXMgY29udGVudC4oe0NPREV9KVwiLFxuXHRcIktLUy5FUlJPUi5QTEFZQ1JBRlQuMTAwMVwiOiBcIlNvcnJ5LCBkb3dubG9hZCBvZiB0aGlzIHZpZGVvIGlzIG5vdCBwZXJtaXR0ZWQuKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjEwMDJcIjogXCJZb3UgaGF2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXNseSBwbGF5YmFjayBkZXZpY2UuIFBsZWFzZSBxdWl0IHBsYXliYWNrIG9uIG90aGVyIGRldmljZXMgYW5kIHRyeSBhZ2Fpbi4oe0NPREV9KVwiLFxuXHRcIktLUy5FUlJPUi5QTEFZQ1JBRlQuMTAwM1wiOiBcIlNvcnJ5LCB0aGUgc2VydmljZSBpcyBub3QgYXZhaWxhYmxlIGluIHlvdXIgbG9jYXRpb24uKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjEwMDRcIjogXCJZb3UgaGF2ZSByZWFjaGVkIG1heGltdW0gYWxsb3dlZCBkb3dubG9hZCBsaW1pdC4gUGxlYXNlIHJlbW92ZSBzb21lIGRvd25sb2FkZWQgdmlkZW8gdG8gcHJvY2VlZC4oe0NPREV9KVwiLFxuXHRcIktLUy5FUlJPUi5ORVRXT1JLX0VSUk9SXCI6IFwiVGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIHdpdGggeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLiBQbGVhc2Uga2luZGx5IGNoZWNrIGFuZCB0cnkgYWdhaW4uKHtjb2RlfSlcIixcblx0XCJLS1MuRVJST1IuRFJNX1JFU1RSSUNURURfT1VUUFVUXCI6IFwiRXh0ZXJuYWwgZGlzcGxheSBpcyBub3QgYWxsb3dlZCBpbiBjdXJyZW50IERSTSBwb2xpY3ksIHBsZWFzZSB1bnBsdWcgZXh0ZXJuYWwgZGlzcGxheSBhbmQgdHJ5IGFnYWluLih7Y29kZX0ve25hbWV9KVwiLFxuXHRcIktLUy5FUlJPUi5ERVZJQ0VfSVNfTk9UX1NVUFBPUlRFRFwiOiBcIlRoaXMgZGV2aWNlIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2Uge2FsbG93RGV2aWNlc30gdG8gZW5qb3kgdGhpcyB2aWRlby5cIixcblx0XCJLS1MuRVJST1IuT1NfSVNfTk9UX1NVUFBPUlRFRFwiOiBcIlRoaXMgb3MgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSB7YWxsb3dPU3N9IHRvIGVuam95IHRoaXMgdmlkZW8uXCIsXG5cdFwiS0tTLkVSUk9SLlBMRUFTRV9VUEdSQURFX09TXCI6IFwiVGhpcyBvcyB2ZXJzaW9uIGlzIHRvbyBsb3cuIFBsZWFzZSB1cGdyYWRlIHRvIHZlcnNpb24ge21pblZlcnNpb259IG9yIGhpZ2hlci5cIixcblx0XCJLS1MuRVJST1IuQlJPV1NFUl9JU19OT1RfU1VQUE9SVEVEXCI6IFwiVGhpcyBicm93c2VyIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2Uge2FsbG93QnJvd3NlcnN9IHRvIGVuam95IHRoaXMgdmlkZW8uXCIsXG5cdFwiS0tTLkVSUk9SLlBMRUFTRV9VUEdSQURFX0JST1dTRVJcIjogXCJUaGlzIGJyb3dzZXIgdmVyc2lvbiBpcyB0b28gbG93LiBQbGVhc2UgdXBncmFkZSB0byB2ZXJzaW9uIHttaW5WZXJzaW9ufSBvciBoaWdoZXIuXCJcbn07XG5cbnZhciBqYSA9IHtcblx0XCJLS1MuWUVTXCI6IFwi44Gv44GEXCIsXG5cdFwiS0tTLk5PXCI6IFwi44GE44GE44GIXCIsXG5cdFwiS0tTLk9LXCI6IFwiT0tcIixcblx0XCJLS1MuQ0FOQ0VMXCI6IFwi44Kt44Oj44Oz44K744OrXCIsXG5cdFwiS0tTLlRSWUFHQUlOXCI6IFwi5YaN55Sf44KS5YaN6ZaL44GZ44KLXCIsXG5cdFwiS0tTLkxFQVZFXCI6IFwi5oi744KLXCIsXG5cdFwiS0tTLkJBQ0tcIjogXCLmiLvjgotcIixcblx0XCJLS1MuREVMRVRFXCI6IFwi5YmK6ZmkXCIsXG5cdFwiS0tTLlBMQVkuV0lUSC5RVUFMSVRZXCI6IFwi44GT44Gu55S76LOq44Gn5YaN55Sf44GV44KM44G+44GZXCIsXG5cdFwiS0tTLlFVQUxJVFlcIjogXCLmmKDlg4/lk4Hos6pcIixcblx0XCJLS1MuQVVESU9cIjogXCLpn7Plo7BcIixcblx0XCJLS1MuU0VUVElORy5PRkZcIjogXCLjgqrjg5VcIixcblx0XCJLS1MuU1VCVElUTEVTXCI6IFwi5a2X5bmVXCIsXG5cdFwiS0tTLlNFVFRJTkdcIjogXCLlho3nlJ/oqK3lrppcIixcblx0XCJLS1MuU0VUVElORy5DT05GTElDVFwiOiBcIuOBlOimluiBtOOBmeOCi+WLleeUu+OBr+OAgeODh+ODleOCqeODq+ODiOeUu+izquioreWumuOBq+S4gOiHtOOBl+OBvuOBm+OCk+OAglwiLFxuXHRcIktLUy5DT05GTElDVC5NRVNTQUdFXCI6IFwi44GT44Gu44OT44OH44Kq44Gu55S76LOq44GM44OH44OV44Kp44Or44OI6Kit5a6a44KI44KK6auY44GE44Gn44GZ44CCXCIsXG5cdFwiS0tTLlNFVFRJTkcuQVVUT1wiOiBcIuiHquWLlVwiLFxuXHRcIktLUy5TRVRUSU5HLkFVVE9QTEFZXCI6IFwi6Ieq5YuV5YaN55SfXCIsXG5cdFwiS0tTLlNFVFRJTkcuVkVSU0lPTlwiOiBcIuWtl+W5leODu+WQueabv1wiLFxuXHRcIktLUy5TRVRUSU5HLlNVQlRJVExFXCI6IFwi5a2X5bmVXCIsXG5cdFwiS0tTLlNFVFRJTkcuRFVCQkVEXCI6IFwi5ZC55pu/XCIsXG5cdFwiS0tTLlNFVFRJTkcuU1BFRURcIjogXCLjgrnjg5Tjg7zjg4lcIixcblx0XCJLS1MuQVVUT1BMQVkuTkVYVC5FUElTT0RFXCI6IFwi5qyh44Gu44Ko44OU44K944O844OJ44KS6Ieq5YuV44Gn5YaN55Sf44GZ44KL44CCXCIsXG5cdFwiS0tTLlBST0dSQU0uVElUTEVcIjogXCLnlarntYTjgpLlho3nlJ/jgafjgY3jgb7jgZvjgpPjgIJcIixcblx0XCJLS1MuUFJPR1JBTS5NRVNTQUdFXCI6IFwi5Y+N5b+c44GM5pyJ44KK44G+44Gb44KT44CC44KC44GX44GP44Gv44CB44GT44Gu55Wq57WE44Gv44Kq44Oz44Ko44Ki44GV44KM44Gm44GE44G+44Gb44KT44CCXCIsXG5cdFwiS0tTLkVORFJPTEwuQ09VTlRET1dOXCI6IFwie3RpbWVMZWZ0fSDnp5Llvozjgavlho3nlJ/jgZfjgb7jgZlcIixcblx0XCJLS1MuU1NBSS5MRUFSTi5NT1JFXCI6IFwi44KC44Gj44Go6KaL44KLXCIsXG5cdFwiS0tTLlNTQUkuU0tJUC5BRFwiOiBcIuOCueOCreODg+ODl1wiLFxuXHRcIktLUy5TU0FJLlNFQ09ORFNcIjogXCLnp5JcIixcblx0XCJLS1MuUExBWUVSLlBMQVlcIjogXCLlho3nlJ9cIixcblx0XCJLS1MuUExBWUVSLlBBVVNFXCI6IFwi5LiA5pmC5YGc5q2iXCIsXG5cdFwiS0tTLlBMQVlFUi5SRVBMQVlcIjogXCLlho3nlJ9cIixcblx0XCJLS1MuUExBWUVSLlJFV0lORFwiOiBcIuW3u+aIu+OBl1wiLFxuXHRcIktLUy5QTEFZRVIuUFJFVklPVVNcIjogXCLliY3oqbFcIixcblx0XCJLS1MuUExBWUVSLk5FWFRcIjogXCLmrKHoqbFcIixcblx0XCJLS1MuUExBWUVSLkZPUldBUkRcIjogXCLml6npgIHjgopcIixcblx0XCJLS1MuUExBWUVSLk1VVEVcIjogXCLjg5/jg6Xjg7zjg4hcIixcblx0XCJLS1MuUExBWUVSLlVOTVVURVwiOiBcIuODn+ODpeODvOODiOino+mZpFwiLFxuXHRcIktLUy5QTEFZRVIuRlVMTFNDUkVFTlwiOiBcIuWFqOeUu+mdolwiLFxuXHRcIktLUy5QTEFZRVIuRlVMTFNDUkVFTi5FWElUXCI6IFwi5YWo55S76Z2i57WC5LqGXCIsXG5cdFwiS0tTLlBMQVlFUi5DQVNUXCI6IFwi44Kv44Ot44O844Og44Kt44Oj44K544OIXCIsXG5cdFwiS0tTLlBMQVlFUi5DQVNULkRJU0NPTk5FQ1RcIjogXCLjgq/jg63jg7zjg6Djgq3jg6Pjgrnjg4jop6PpmaRcIixcblx0XCJLS1MuUExBWUVSLlBMQVkuTkVYVFwiOiBcIuasoeipseWGjeeUn1wiLFxuXHRcIktLUy5QUk9HUkFNLkVOREVEXCI6IFwi44GT44Gu44Op44Kk44OW44Kk44OZ44Oz44OI44Gv44GZ44Gn44Gr57WC5LqG44GX44G+44GX44Gf44CCXFxuT0vjgpLjgq/jg6rjg4Pjgq/jgZfjgabliY3jga7jg5rjg7zjgrjjgavmiLvjgaPjgabjgY/jgaDjgZXjgYTjgIJcIixcblx0XCJLS1MuUExBWUVSLkVYSVRcIjogXCLntYLkuoZcIixcblx0XCJLS1MuUExBWUVSLlBMQVlJTkdcIjogXCLmlL7pgIHkuK1cIixcblx0XCJLS1MuQ0FTVElOR1wiOiBcIuOCr+ODreODvOODoOOCreODo+OCueODiOOBq+OCiOOBo+OBpueUu+mdouOBjOihqOekuuOBleOCjOOBpuOBhOOBvuOBmVwiLFxuXHRcIktLUy5DQVNULkNPTk5URUNURURcIjogXCJbe0NIUk9NRUNBU1R9XSDjgavmjqXntprjgZfjgb7jgZfjgZ/jgILku4rjgYvjgonjgq3jg6Pjgrnjg4jjgafjgY3jgb7jgZnjgIJcIixcblx0XCJLS1MuQ0FTVC5TVEFUVVNcIjogXCJbe1ZJREVPfV3jga8gW3tDSFJPTUVDQVNUfV3jgavjgq3jg6Pjgrnjg4jjgZfjgabjgYTjgb7jgZnjgIJcIixcblx0XCJLS1MuRVJST1JcIjogXCLjgrfjgrnjg4bjg6Djgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgIIoe2NvZGV9KVwiLFxuXHRcIktLUy5FUlJPUi5QTEFZQ1JBRlQuNDAxXCI6IFwi5L2c5ZOB44KS6KaW6IG044GZ44KL44Gr44Gv44CB44Ot44Kw44Kk44Oz44GM5b+F6KaB44Gn44GZ44CCKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjQwNFwiOiBcIuOBlOaMh+WumuOBruS9nOWTgeOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAgih7Q09ERX0pXCIsXG5cdFwiS0tTLkVSUk9SLlBMQVlDUkFGVC40MjlcIjogXCJUaGUgdXNlciBoYXMgc2VudCB0b28gbWFueSByZXF1ZXN0cyBpbiBhIGdpdmVuIGFtb3VudCBvZiB0aW1lLih7Q09ERX0pXCIsXG5cdFwiS0tTLkVSUk9SLlBMQVlDUkFGVC41MDNcIjogXCLnj77lnKjjgrfjgrnjg4bjg6Djg6Hjg7Pjg4bjg4rjg7PjgrnkuK3jga7jgZ/jgoHjgZTliKnnlKjjgYTjgZ/jgaDjgZHjgb7jgZvjgpPjgILjgZfjgbDjgonjgY/ntYzjgaPjgabjgYvjgonlho3luqbjgZTliKnnlKjjgY/jgaDjgZXjgYTjgIIoe0NPREV9KVwiLFxuXHRcIktLUy5FUlJPUi5QTEFZQ1JBRlQuMTAwMFwiOiBcIuOBk+OBruWLleeUu+OCkuimluiBtOOBmeOCi+aoqemZkOOBjOOBguOCiuOBvuOBm+OCk+OAgih7Q09ERX0pXCIsXG5cdFwiS0tTLkVSUk9SLlBMQVlDUkFGVC4xMDAxXCI6IFwi44GU5oyH5a6a44Gu5L2c5ZOB44Gv44OA44Km44Oz44Ot44O844OJ44Gn44GN44G+44Gb44KT44CCKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjEwMDJcIjogXCLlkIzmmYLjgavliKnnlKjjgafjgY3jgovkuIrpmZDjgavpgZTjgZfjgZ/jgZ/jgoHjgIHnj77lnKjjgZTliKnnlKjjgYTjgZ/jgaDjgZHjgb7jgZvjgpPjgILliKXjga7jg4fjg5DjgqTjgrnjgafjga7liKnnlKjjgYzntYLkuoblvozjgavjgZTliKnnlKjjgpLjgYroqabjgZfjgY/jgaDjgZXjgYTjgIIoe0NPREV9KVwiLFxuXHRcIktLUy5FUlJPUi5QTEFZQ1JBRlQuMTAwM1wiOiBcIuOBiuWuouOBleOBvuOBjOOBlOWIqeeUqOOBruWcsOWfn+OBp+OBr+OBlOaMh+WumuOBruS9nOWTgeOBr+WGjeeUn+OBp+OBjeOBvuOBm+OCk+OAgih7Q09ERX0pXCIsXG5cdFwiS0tTLkVSUk9SLlBMQVlDUkFGVC4xMDA0XCI6IFwi44OA44Km44Oz44Ot44O844OJ44Gn44GN44KL5LiK6ZmQ5pWw44Gr6YGU44GX44G+44GX44Gf44CCXFxu44GU5Yip55So44GE44Gf44Gg44GP44Gf44KB44Gr44Gv44OA44Km44Oz44Ot44O844OJ5riI44G/44Gu5L2c5ZOB44KS5YmK6Zmk44GX44Gm44GL44KJ44GK6Kmm44GX44GP44Gg44GV44GE44CCKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuTkVUV09SS19FUlJPUlwiOiBcIuOCpOODs+OCv+ODvOODjeODg+ODiOOBq+aOpee2muOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn+OAguioreWumuOCkueiuuiqjeOBl+OBpuOBj+OBoOOBleOBhOOAgih7Y29kZX0pXCIsXG5cdFwiS0tTLkVSUk9SLkRSTV9SRVNUUklDVEVEX09VVFBVVFwiOiBcIuS4gOmDqOWklumDqOWHuuWKm+OBq+OBpOOBhOOBpuOBr+OBlOWIqeeUqOOBhOOBn+OBoOOBkeOBvuOBm+OCk+OAgih7Y29kZX0ve25hbWV9KVwiLFxuXHRcIktLUy5FUlJPUi5ERVZJQ0VfSVNfTk9UX1NVUFBPUlRFRFwiOiBcIuOBiuS9v+OBhOOBruODh+ODkOOCpOOCueOBq+WvvuW/nOOBl+OBpuOBhOOBvuOBm+OCk+OAgnthbGxvd0RldmljZXN9IOOBp+OBk+OBruS9nOWTgeOCkuimi+OBpuOBj+OBoOOBleOBhOOAglwiLFxuXHRcIktLUy5FUlJPUi5PU19JU19OT1RfU1VQUE9SVEVEXCI6IFwi44GK5L2/44GE44GuT1Pjgavlr77lv5zjgZfjgabjgYTjgb7jgZvjgpPjgIIge2FsbG93T1NzfSDjgafjgZPjga7kvZzlk4HjgpLopovjgabjgY/jgaDjgZXjgYTjgIJcIixcblx0XCJLS1MuRVJST1IuUExFQVNFX1VQR1JBREVfT1NcIjogXCLjgYrkvb/jgYTjga5PU+OBjOWPpOOBhOOBp+OBmeOAgnttaW5WZXJzaW9ufSDku6XkuIrjgavjgqLjg4Pjg5fjgrDjg6zjg7zjg4kg44GX44Gm44GP44Gg44GV44GE44CCXCIsXG5cdFwiS0tTLkVSUk9SLkJST1dTRVJfSVNfTk9UX1NVUFBPUlRFRFwiOiBcIuOBiuS9v+OBhOOBruODluODqeOCpuOCtuOBq+WvvuW/nOOBl+OBpuOBhOOBvuOBm+OCk+OAgiB7YWxsb3dCcm93c2Vyc30g44Gn44GT44Gu5L2c5ZOB44KS6KaL44Gm44GP44Gg44GV44GE44CCXCIsXG5cdFwiS0tTLkVSUk9SLlBMRUFTRV9VUEdSQURFX0JST1dTRVJcIjogXCLjgYrkvb/jgYTjga7jg5bjg6njgqbjgrbjgYzlj6TjgYTjgafjgZnjgIIge21pblZlcnNpb259IOS7peS4iuOBq+OCouODg+ODl+OCsOODrOODvOODiSDjgZfjgabjgY/jgaDjgZXjgYTjgIJcIlxufTtcblxudmFyIHpoVFcgPSB7XG5cdFwiS0tTLllFU1wiOiBcIuaYr1wiLFxuXHRcIktLUy5OT1wiOiBcIuWQplwiLFxuXHRcIktLUy5PS1wiOiBcIu+8r++8q1wiLFxuXHRcIktLUy5DQU5DRUxcIjogXCLlj5bmtohcIixcblx0XCJLS1MuVFJZQUdBSU5cIjogXCLoq4vlho3oqabkuIDmrKFcIixcblx0XCJLS1MuTEVBVkVcIjogXCLpm6LplotcIixcblx0XCJLS1MuQkFDS1wiOiBcIui/lOWbnlwiLFxuXHRcIktLUy5ERUxFVEVcIjogXCLliKrpmaRcIixcblx0XCJLS1MuUExBWS5XSVRILlFVQUxJVFlcIjogXCLmkq3mlL7mraTnlavos6pcIixcblx0XCJLS1MuUVVBTElUWVwiOiBcIueVq+izqlwiLFxuXHRcIktLUy5TVUJUSVRMRVNcIjogXCLlrZfluZVcIixcblx0XCJLS1MuQVVESU9cIjogXCLpn7PoqIpcIixcblx0XCJLS1MuU0VUVElORy5PRkZcIjogXCLpl5zplolcIixcblx0XCJLS1MuU0VUVElOR1wiOiBcIuioreWumlwiLFxuXHRcIktLUy5TRVRUSU5HLkNPTkZMSUNUXCI6IFwi5om+5LiN5Yiw5q2k5pKt5pS+55Wr6LOqXCIsXG5cdFwiS0tTLkNPTkZMSUNULk1FU1NBR0VcIjogXCLpgJnpg6jlvbHniYflj6/pgbjmk4fpq5jmlrzkuovlhYjoqK3lrprkuYvnlavos6pcIixcblx0XCJLS1MuU0VUVElORy5BVVRPXCI6IFwi6Ieq5YuVXCIsXG5cdFwiS0tTLlNFVFRJTkcuQVVUT1BMQVlcIjogXCLoh6rli5Xmkq3mlL5cIixcblx0XCJLS1MuU0VUVElORy5WRVJTSU9OXCI6IFwiVmVyc2lvblwiLFxuXHRcIktLUy5TRVRUSU5HLlNVQlRJVExFXCI6IFwi5a2X5bmVXCIsXG5cdFwiS0tTLlNFVFRJTkcuRFVCQkVEXCI6IFwi6YWN6Z+zXCIsXG5cdFwiS0tTLlNFVFRJTkcuU1BFRURcIjogXCLmkq3mlL7pgJ/luqZcIixcblx0XCJLS1MuQVVUT1BMQVkuTkVYVC5FUElTT0RFXCI6IFwi6Ieq5YuV5pKt5pS+5LiL5LiA6KmxXCIsXG5cdFwiS0tTLlBST0dSQU0uVElUTEVcIjogXCLmraTnr4Dnm67lt7Lmkq3mlL7lroznlaJcIixcblx0XCJLS1MuUFJPR1JBTS5NRVNTQUdFXCI6IFwi5q2k56+A55uu5bey5pKt5pS+5a6M55WiXCIsXG5cdFwiS0tTLkVORFJPTEwuQ09VTlRET1dOXCI6IFwi5LiL5LiA6Kmx5bCH5pa8IHt0aW1lTGVmdH0g56eS5b6M5pKt5pS+XCIsXG5cdFwiS0tTLlNTQUkuTEVBUk4uTU9SRVwiOiBcIueci+abtOWkmlwiLFxuXHRcIktLUy5TU0FJLlNLSVAuQURcIjogXCLnlaXpgY7lu6PlkYpcIixcblx0XCJLS1MuU1NBSS5TRUNPTkRTXCI6IFwi56eSXCIsXG5cdFwiS0tTLlBMQVlFUi5QTEFZXCI6IFwi5pKt5pS+XCIsXG5cdFwiS0tTLlBMQVlFUi5QQVVTRVwiOiBcIuaaq+WBnFwiLFxuXHRcIktLUy5QTEFZRVIuUkVQTEFZXCI6IFwi6YeN5pKtXCIsXG5cdFwiS0tTLlBMQVlFUi5SRVdJTkRcIjogXCLliY3ljYHnp5JcIixcblx0XCJLS1MuUExBWUVSLlBSRVZJT1VTXCI6IFwi5LiK5LiA6ZuGXCIsXG5cdFwiS0tTLlBMQVlFUi5ORVhUXCI6IFwi5LiL5LiA6ZuGXCIsXG5cdFwiS0tTLlBMQVlFUi5GT1JXQVJEXCI6IFwi5b6M5Y2B56eSXCIsXG5cdFwiS0tTLlBMQVlFUi5NVVRFXCI6IFwi6Z2c6Z+zXCIsXG5cdFwiS0tTLlBMQVlFUi5VTk1VVEVcIjogXCLop6PpmaTpnZzpn7NcIixcblx0XCJLS1MuUExBWUVSLkZVTExTQ1JFRU5cIjogXCLlhajonqLluZVcIixcblx0XCJLS1MuUExBWUVSLkZVTExTQ1JFRU4uRVhJVFwiOiBcIumboumWi+WFqOieouW5lVwiLFxuXHRcIktLUy5QTEFZRVIuQ0FTVFwiOiBcIkNocm9tZWNhc3RcIixcblx0XCJLS1MuUExBWUVSLkNBU1QuRElTQ09OTkVDVFwiOiBcIuWBnOatouaKleaUvlwiLFxuXHRcIktLUy5QTEFZRVIuUExBWS5ORVhUXCI6IFwi5pKt5pS+5LiL5LiA6ZuGXCIsXG5cdFwiS0tTLlBST0dSQU0uRU5ERURcIjogXCLnm7Tmkq3lt7LntZDmnZ/jgIJcXG7mjIlva+mNteWbnuWIsOWJjeS4gOmggeOAglwiLFxuXHRcIktLUy5QTEFZRVIuRVhJVFwiOiBcIumboumWi1wiLFxuXHRcIktLUy5QTEFZRVIuUExBWUlOR1wiOiBcIuaSreaUvuS4rVwiLFxuXHRcIktLUy5DQVNUSU5HXCI6IFwi6YCP6YGOQ2hyb21lY2FzdOaSreaUvuS4reOAglwiLFxuXHRcIktLUy5DQVNULkNPTk5URUNURURcIjogXCJbe0NIUk9NRUNBU1R9XeW3sumAo+e1kOOAguePvuWcqOWPr+S7pemWi+Wni+aKleaUvuOAglwiLFxuXHRcIktLUy5DQVNULlNUQVRVU1wiOiBcIlt7VklERU99Xeato+WcqFt7Q0hST01FQ0FTVH1d5LiK5pKt5pS+44CCXCIsXG5cdFwiS0tTLkVSUk9SXCI6IFwi57O757Wx55m855Sf6Yyv6Kqk44CC6KuL56iN5b6M5YaN5ZiX6Kmm44CCKHtjb2RlfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjQwMVwiOiBcIuiri+eZu+WFpeWGjeaSreaUvuOAgih7Q09ERX0pXCIsXG5cdFwiS0tTLkVSUk9SLlBMQVlDUkFGVC40MDRcIjogXCLmraTlvbHniYfkuI3lrZjlnKjjgIIoe0NPREV9KVwiLFxuXHRcIktLUy5FUlJPUi5QTEFZQ1JBRlQuNTAzXCI6IFwi57O757Wx5q2j5Zyo57at6K235Lit77yM6KuL56iN5b6M5YaN5ZiX6Kmm44CCKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjEwMDBcIjogXCLmgqjmspLmnInmkq3mlL7mraTlvbHniYfnmoTmrIrpmZDjgIIoe0NPREV9KVwiLFxuXHRcIktLUy5FUlJPUi5QTEFZQ1JBRlQuMTAwMVwiOiBcIuaCqOaykuacieS4i+i8ieatpOW9seeJh+eahOasiumZkOOAgih7Q09ERX0pXCIsXG5cdFwiS0tTLkVSUk9SLlBMQVlDUkFGVC4xMDAyXCI6IFwi5oKo6LaF6YGO5ZCM5pmC5pKt5pS+5LiK6ZmQ44CC6KuL6Zec6ZaJ5YW25LuW5pKt5pS+5Zmo5b6M5YaN5ZiX6Kmm5pKt5pS+44CCKHtDT0RFfSlcIixcblx0XCJLS1MuRVJST1IuUExBWUNSQUZULjEwMDNcIjogXCLmgqjmiYDlnKjlnLDljYDnhKHms5Xmkq3mlL7mraTlvbHniYfjgIIoe0NPREV9KVwiLFxuXHRcIktLUy5FUlJPUi5QTEFZQ1JBRlQuMTAwNFwiOiBcIuaCqOW3sue2k+i2hemBjuS4i+i8ieW9seeJh+S4iue3muOAguiri+enu+mZpOW3suS4i+i8ieW9seeJh+W+jOWGjeWYl+ippuOAgih7Q09ERX0pXCIsXG5cdFwiS0tTLkVSUk9SLk5FVFdPUktfRVJST1JcIjogXCLntrLot6/pgKPnt5rnmbznlJ/pjK/oqqTvvIzoq4vnqI3lvozlho3lmJfoqabjgIIoe2NvZGV9KVwiLFxuXHRcIktLUy5FUlJPUi5EUk1fUkVTVFJJQ1RFRF9PVVRQVVRcIjogXCLmraTlvbHniYfnhKHms5XlnKjlpJbmjqXonqLluZXkuIrmkq3mlL7jgILoq4vmi5TpmaTlpJbmjqXonqLluZXlho3oqabkuIDmrKHjgIJcIixcblx0XCJLS1MuRVJST1IuREVWSUNFX0lTX05PVF9TVVBQT1JURURcIjogXCLmraToo53nva7kuKbkuI3mlK/mj7TjgILoq4vnlKh7YWxsb3dEZXZpY2VzfeWGjeippuS4gOasoVwiLFxuXHRcIktLUy5FUlJPUi5PU19JU19OT1RfU1VQUE9SVEVEXCI6IFwi5q2kT1Mg5Lim5LiN5pSv5o+044CC6KuL55Soe2FsbG93T1NzfeWGjeippuS4gOasoeOAglwiLFxuXHRcIktLUy5FUlJPUi5QTEVBU0VfVVBHUkFERV9PU1wiOiBcIuatpE9TIOS4puS4jeaUr+aPtOOAguiri+WNh+eJiOWIsHttaW5pVmVyc2lvbn3ku6XkuIrjgIJcIixcblx0XCJLS1MuRVJST1IuQlJPV1NFUl9JU19OT1RfU1VQUE9SVEVEXCI6IFwi5q2k54CP6Ka95Zmo5Lim5LiN5pSv5o+044CC6KuL5L2/55Soe2FsbG93QnJvd3NlcnN944CCXCIsXG5cdFwiS0tTLkVSUk9SLlBMRUFTRV9VUEdSQURFX0JST1dTRVJcIjogXCLmraTngI/opr3lmajkuKbkuI3mlK/mj7TjgILoq4vljYfniYjliLB7bWluVmVyc2lvbn3ku6XkuIrjgIJcIlxufTtcblxudmFyIExBTkdTID0ge1xuICBlbixcbiAgamEsXG4gICd6aC10dyc6IHpoVFdcbn07XG5cbmNvbnN0IElEID0gUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pO1xuY29uc3QgTGFuZ3VhZ2VDb2RlID0gUHJvcFR5cGVzLm9uZU9mKE9iamVjdC52YWx1ZXMoTGFuZ3VhZ2VDb2RlJDEpKTtcbmNvbnN0IFN1cHBvcnRFbnZpcm9ubWVudEl0ZW0gPSBQcm9wVHlwZXMuc2hhcGUoe1xuICBkZXZpY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgb3M6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2ZXJzaW9uOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBicm93c2VyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdmVyc2lvbjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KVxufSk7XG5jb25zdCBJdGVtVHlwZSA9IFByb3BUeXBlcy5vbmVPZihPYmplY3QudmFsdWVzKEl0ZW1UeXBlJDEpKTtcbmNvbnN0IFZpZGVvSW5mbyA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIGNvbnRlbnRJZDogSUQsXG4gIGNvbnRlbnRUeXBlOiBJdGVtVHlwZSxcbiAgbGljZW5zZUlkOiBJRFxufSk7XG5jb25zdCBUZXh0Q29kZSA9IFByb3BUeXBlcy5vbmVPZihBcnJheS5mcm9tKG5ldyBTZXQoT2JqZWN0LmVudHJpZXMoTEFOR1MpLnJlZHVjZSgocmVzLCBsYW5nSXRlbSkgPT4gcmVzLmNvbmNhdChPYmplY3Qua2V5cyhsYW5nSXRlbVsxXSkpLCBbXSkpKSk7XG52YXIgVHlwZXMgPSB7XG4gIExhbmd1YWdlQ29kZSxcbiAgU3VwcG9ydEVudmlyb25tZW50SXRlbSxcbiAgVmlkZW9JbmZvLFxuICBUZXh0Q29kZSxcbiAgSXRlbVR5cGVcbn07XG5cbmNvbnN0IE1lc3NhZ2UgPSAoe1xuICBjb2RlLFxuICBwcm9wZXJ0eSxcbiAgZGVmYXVsdFZhbHVlLFxuICB3cmFwOiBXcmFwID0gJ3NwYW4nXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBnZXRNZXNzYWdlLFxuICAgIHRyYW5zbGF0ZVxuICB9ID0gdXNlQ29udGV4dChjb250ZXh0KTtcbiAgY29uc3QgbWVzc2FnZSA9IGdldE1lc3NhZ2UoY29kZSwgcHJvcGVydHkpIHx8IHRyYW5zbGF0ZShkZWZhdWx0VmFsdWUpO1xuICByZXR1cm4gV3JhcCA/IC8qI19fUFVSRV9fKi9qc3goV3JhcCwge1xuICAgIGNoaWxkcmVuOiBtZXNzYWdlXG4gIH0pIDogbWVzc2FnZTtcbn07XG5cbk1lc3NhZ2UucHJvcFR5cGVzID0ge1xuICBjb2RlOiBUeXBlcy5UZXh0Q29kZSxcbiAgcHJvcGVydHk6IFByb3BUeXBlcy5vYmplY3QsXG4gIGRlZmF1bHRWYWx1ZTogVHlwZXMuVGV4dENvZGUsXG4gIHdyYXA6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxufTtcblxuY29uc3QgY29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5cbmNvbnN0IEludGxQcm92aWRlciA9ICh7XG4gIGxvY2FsZSA9IExhbmd1YWdlQ29kZSQxLkVOLFxuICBtZXNzYWdlcyA9IHt9LFxuICBjaGlsZHJlblxufSkgPT4ge1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBMQU5HU1tsb2NhbGUudG9Mb3dlckNhc2UoKV0sIG1lc3NhZ2VzKTtcblxuICBjb25zdCBmb3JtYXRNZXNzYWdlID0gKGRlc2NyaXB0b3IgPSAnJywgdmFsdWVzKSA9PiAodHJhbnNsYXRpb25zWyhkZXNjcmlwdG9yID09PSBudWxsIHx8IGRlc2NyaXB0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlc2NyaXB0b3IuaWQpIHx8IGRlc2NyaXB0b3JdIHx8ICcnKS5yZXBsYWNlKC97KFxcUys/KX0vZ2ksIChzdWJzdHJpbmcsIG5hbWUpID0+IHtcbiAgICB2YXIgX3ZhbHVlcyRuYW1lO1xuXG4gICAgcmV0dXJuIFtdLmNvbmNhdCgoX3ZhbHVlcyRuYW1lID0gdmFsdWVzW25hbWVdKSAhPT0gbnVsbCAmJiBfdmFsdWVzJG5hbWUgIT09IHZvaWQgMCA/IF92YWx1ZXMkbmFtZSA6IHN1YnN0cmluZykuam9pbignLCAnKTtcbiAgfSkgfHwgZGVzY3JpcHRvci5kZWZhdWx0TWVzc2FnZSB8fCBkZXNjcmlwdG9yLmlkIHx8ICcnO1xuXG4gIGNvbnN0IGludGwgPSB7XG4gICAgZm9ybWF0TWVzc2FnZSxcbiAgICB0cmFuc2xhdGU6IGZvcm1hdE1lc3NhZ2UsXG4gICAgZ2V0TWVzc2FnZTogZm9ybWF0TWVzc2FnZVxuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL2pzeChjb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGludGwsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pO1xufTtcblxuSW50bFByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgbG9jYWxlOiBUeXBlcy5MYW5ndWFnZUNvZGUsXG4gIG1lc3NhZ2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cbmNvbnN0IHVzZUludGwgPSAoKSA9PiB1c2VDb250ZXh0KGNvbnRleHQpO1xuXG5jb25zdCBGb3JtYXR0ZWRNZXNzYWdlID0gKHtcbiAgaWQsXG4gIGRlZmF1bHRNZXNzYWdlLFxuICB2YWx1ZXNcbn0pID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgcmV0dXJuIGludGwuZm9ybWF0TWVzc2FnZSh7XG4gICAgaWQsXG4gICAgZGVmYXVsdE1lc3NhZ2VcbiAgfSwgdmFsdWVzKTtcbn07XG5cbnZhciBJMThuID0ge1xuICBDb250ZXh0OiBjb250ZXh0LFxuICBNZXNzYWdlXG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuY29uc3QgVmlkZW9Tb3VyY2VUeXBlTWFwID0ge1xuICAnYXBwbGljYXRpb24vZGFzaCt4bWwnOiB7XG4gICAgc291cmNlS2V5TmFtZTogJ2Rhc2gnLFxuICAgIGV4dGVuc2lvbjogJ21wZCdcbiAgfSxcbiAgJ2FwcGxpY2F0aW9uL3gtbXBlZ3VybCc6IHtcbiAgICBzb3VyY2VLZXlOYW1lOiAnaGxzJyxcbiAgICBleHRlbnNpb246ICdtM3U4J1xuICB9XG59O1xuY29uc3QgbWltZVR5cGVzID0ge1xuICBobHM6ICdhcHBsaWNhdGlvbi94LW1wZWd1cmwnLFxuICBkYXNoOiAnYXBwbGljYXRpb24vZGFzaCt4bWwnXG59O1xuXG5jb25zdCBnZXRFeHRlbnNpb25CeVR5cGUgPSBzcmNUeXBlID0+IHtcbiAgdmFyIF9WaWRlb1NvdXJjZVR5cGVNYXAkcztcblxuICByZXR1cm4gKF9WaWRlb1NvdXJjZVR5cGVNYXAkcyA9IFZpZGVvU291cmNlVHlwZU1hcFtzcmNUeXBlXSkgPT09IG51bGwgfHwgX1ZpZGVvU291cmNlVHlwZU1hcCRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfVmlkZW9Tb3VyY2VUeXBlTWFwJHMuZXh0ZW5zaW9uO1xufTtcblxuY29uc3QgaXNTdHJpbmdTb3VyY2VXaXRoUHJvcGVyRXh0ZW5zaW9uID0gKHVybCwgc3JjVHlwZSkgPT4ge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBleHRlbnNpb24gPSB1cmwuc3BsaXQoJy4nKS5hdCgtMSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblxuICAgIGlmIChleHRlbnNpb24gPT0gZ2V0RXh0ZW5zaW9uQnlUeXBlKHNyY1R5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IG1hdGNoVHlwZSA9IChzb3VyY2UsIG1hbmlmZXN0VHlwZSkgPT4ge1xuICB2YXIgX3NvdXJjZSR0eXBlLCBfc291cmNlJHR5cGUyO1xuXG4gIHJldHVybiAoKF9zb3VyY2UkdHlwZSA9IHNvdXJjZS50eXBlKSA9PT0gbnVsbCB8fCBfc291cmNlJHR5cGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zb3VyY2UkdHlwZS5pbmNsdWRlcyhtYW5pZmVzdFR5cGUpKSB8fCAoKF9zb3VyY2UkdHlwZTIgPSBzb3VyY2UudHlwZSkgPT09IG51bGwgfHwgX3NvdXJjZSR0eXBlMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NvdXJjZSR0eXBlMi50b0xvd2VyQ2FzZSgpKSA9PT0gbWltZVR5cGVzW21hbmlmZXN0VHlwZV0gfHwgaXNTdHJpbmdTb3VyY2VXaXRoUHJvcGVyRXh0ZW5zaW9uKHNvdXJjZS5zcmMgfHwgc291cmNlLCBtYW5pZmVzdFR5cGUpO1xufTtcblxuY29uc3QgZ2V0RHJtT3B0aW9ucyQxID0gZmFsbGJhY2tEcm0gPT4ge1xuICBpZiAoIShmYWxsYmFja0RybSAhPT0gbnVsbCAmJiBmYWxsYmFja0RybSAhPT0gdm9pZCAwICYmIGZhbGxiYWNrRHJtLnVybCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBkcm1PcHRpb25zID0ge1xuICAgIGxpY2Vuc2VVcmk6IGZhbGxiYWNrRHJtLnVybCxcbiAgICBoZWFkZXJzOiBmYWxsYmFja0RybS5oZWFkZXJzXG4gIH07XG4gIHJldHVybiB7XG4gICAgd2lkZXZpbmU6IGRybU9wdGlvbnMsXG4gICAgZmFpcnBsYXk6IHsgLi4uZHJtT3B0aW9ucyxcbiAgICAgIGNlcnRpZmljYXRlVXJpOiBgJHtmYWxsYmFja0RybS51cmx9L2ZhaXJwbGF5X2NlcnRgLFxuICAgICAgLi4uZmFsbGJhY2tEcm0uZmFpcnBsYXlcbiAgICB9LFxuICAgIHBsYXlyZWFkeTogZHJtT3B0aW9uc1xuICB9O1xufTtcbi8qKlxuICogQHR5cGVkZWYge3tzcmM6IHN0cmluZywgdHlwZTogc3RyaW5nfX0gU291cmNlT2JqZWN0XG4gKiBAdHlwZWRlZiB7e2hsczogc3RyaW5nLCBkYXNoOiBzdHJpbmd9fSBTb3VyY2VPYmplY3RBbHQgYmFja3dhcmQgY29tcGF0aWFibGUgZm9ybVxuICpcbiAqIEBwYXJhbSB7U291cmNlT2JqZWN0W118U291cmNlT2JqZWN0fFNvdXJjZU9iamVjdEFsdHxzdHJpbmd9IHNvdXJjZU9wdGlvbnNcbiAqIEBwYXJhbSB7e3ByZWZlck1hbmlmZXN0VHlwZT86ICgnZGFzaCd8J2hscycpfX0gb3B0aW9uc1xuICogQHJldHVybiB7e3NyYzogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGRybTogT2JqZWN0fX1cbiAqL1xuXG5cbmNvbnN0IGdldFNvdXJjZSA9IChzb3VyY2VPcHRpb25zLCB7XG4gIHByZWZlck1hbmlmZXN0VHlwZSxcbiAgZmFsbGJhY2tEcm1cbn0gPSB7fSkgPT4ge1xuICBpZiAoc291cmNlT3B0aW9ucy5kYXNoIHx8IHNvdXJjZU9wdGlvbnMuaGxzKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGFzaCxcbiAgICAgIGhsc1xuICAgIH0gPSBzb3VyY2VPcHRpb25zO1xuICAgIHJldHVybiBnZXRTb3VyY2UoW2hscyAmJiB7XG4gICAgICBzcmM6IGhscyxcbiAgICAgIHR5cGU6IG1pbWVUeXBlcy5obHNcbiAgICB9LCBkYXNoICYmIHtcbiAgICAgIHNyYzogZGFzaCxcbiAgICAgIHR5cGU6IG1pbWVUeXBlcy5kYXNoXG4gICAgfV0uZmlsdGVyKEJvb2xlYW4pLCB7XG4gICAgICBwcmVmZXJNYW5pZmVzdFR5cGUsXG4gICAgICBmYWxsYmFja0RybVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHNvdXJjZU9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZShbc291cmNlT3B0aW9uc10sIHtcbiAgICAgIHByZWZlck1hbmlmZXN0VHlwZSxcbiAgICAgIGZhbGxiYWNrRHJtXG4gICAgfSk7XG4gIH1cblxuICBpZiAoZmFsbGJhY2tEcm0pIHtcbiAgICByZXR1cm4gZ2V0U291cmNlKHNvdXJjZU9wdGlvbnMubWFwKG9wdGlvbiA9PiAoeyAuLi4ob3B0aW9uLnNyYyA/IG9wdGlvbiA6IHtcbiAgICAgICAgc3JjOiBvcHRpb25cbiAgICAgIH0pLFxuICAgICAgZHJtOiBnZXREcm1PcHRpb25zJDEoZmFsbGJhY2tEcm0pXG4gICAgfSkpLCB7XG4gICAgICBwcmVmZXJNYW5pZmVzdFR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZWQgPSBzb3VyY2VPcHRpb25zLmZpbmQoc291cmNlID0+ICFwcmVmZXJNYW5pZmVzdFR5cGUgfHwgbWF0Y2hUeXBlKHNvdXJjZSwgcHJlZmVyTWFuaWZlc3RUeXBlKSk7XG4gIGNvbnN0IHNlbGVjdGVkID0gbWF0Y2hlZCB8fCBzb3VyY2VPcHRpb25zWzBdO1xuXG4gIGlmICghc2VsZWN0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0eXBlID0gbWF0Y2hlZCAmJiBwcmVmZXJNYW5pZmVzdFR5cGUgPT09ICdobHMnICYmIG1pbWVUeXBlcy5obHM7XG4gIHJldHVybiB7IC4uLihzZWxlY3RlZC5zcmMgPyBzZWxlY3RlZCA6IHtcbiAgICAgIHNyYzogc2VsZWN0ZWRcbiAgICB9KSxcbiAgICB0eXBlXG4gIH07XG59O1xuXG5mdW5jdGlvbiBjb252ZXJ0VG9TZWNvbmRzKHRpbWVTdHJpbmcpIHtcbiAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IHRpbWVTdHJpbmcuc3BsaXQoJzonKS5tYXAocGFyc2VGbG9hdCk7XG4gIHJldHVybiBob3VycyAqIDM2MDAgKyBtaW51dGVzICogNjAgKyBzZWNvbmRzO1xufVxuZnVuY3Rpb24gZ2V0UG9wb3ZlclBvc2l0aW9uKHJlY3QsIHRhcmdldCwgYm91bmRhcnkpIHtcbiAgY29uc3QgcmVjdFggPSByZWN0LnggfHwgcmVjdC5sZWZ0O1xuICBjb25zdCBib3VuZGFyeVggPSBib3VuZGFyeS54IHx8IGJvdW5kYXJ5LmxlZnQ7XG4gIGNvbnN0IG1heExlZnQgPSBib3VuZGFyeS53aWR0aCAtIHJlY3Qud2lkdGg7XG4gIGNvbnN0IHRhcmdldENlbnRlciA9ICh0YXJnZXQubGVmdCArIHRhcmdldC5yaWdodCkgLyAyIC0gYm91bmRhcnlYO1xuICBjb25zdCBjZW50ZXIgPSByZWN0WCArIHJlY3Qud2lkdGggLyAyIC0gYm91bmRhcnlYO1xuICBjb25zdCBhbGlnbkxlZnQgPSByZWN0WCArICh0YXJnZXRDZW50ZXIgLSBjZW50ZXIpIC0gYm91bmRhcnlYO1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IE1hdGgubWF4KDAsIE1hdGgubWluKGFsaWduTGVmdCwgbWF4TGVmdCkpLFxuICAgIHRvcDogdGFyZ2V0LnRvcCAtIHJlY3QuaGVpZ2h0XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXG5jb25zdCBuZWFyZXN0ID0gKGl0ZW1zLCBkaWZmKSA9PiB7XG4gIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5hYnMoZGlmZihhKSkgPiBNYXRoLmFicyhkaWZmKGIpKSA/IGIgOiBhLCBpdGVtc1swXSk7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuY29uc3Qga2V5U3lzdGVtcyA9IHtcbiAgd2lkZXZpbmU6ICdjb20ud2lkZXZpbmUuYWxwaGEnLFxuICBmYWlycGxheTogJ2NvbS5hcHBsZS5mcHMuMV8wJyxcbiAgcGxheXJlYWR5OiAnY29tLm1pY3Jvc29mdC5wbGF5cmVhZHknXG59O1xuXG5jb25zdCBnZXREcm1PcHRpb25zID0gc291cmNlID0+IHtcbiAgY29uc3QgZHJtID0gc291cmNlLmRybSAmJiBPYmplY3QuZW50cmllcyhzb3VyY2UuZHJtKS5yZWR1Y2UoKHJlc3VsdCwgW2tleVN5c3RlbUlkLCBvcHRpb25zXSkgPT4ge1xuICAgIGNvbnN0IHVyaSA9IHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJyA/IG9wdGlvbnMgOiBvcHRpb25zLmxpY2Vuc2VVcmk7XG5cbiAgICBpZiAodXJpKSB7XG4gICAgICBjb25zdCBrZXlTeXN0ZW1OYW1lID0ga2V5U3lzdGVtc1trZXlTeXN0ZW1JZF0gfHwga2V5U3lzdGVtSWQ7XG4gICAgICByZXN1bHQuc2VydmVyc1trZXlTeXN0ZW1OYW1lXSA9IHVyaTtcblxuICAgICAgaWYgKG9wdGlvbnMuY2VydGlmaWNhdGVVcmkpIHtcbiAgICAgICAgcmVzdWx0LmFkdmFuY2VkW2tleVN5c3RlbU5hbWVdID0ge1xuICAgICAgICAgIHNlcnZlckNlcnRpZmljYXRlVXJpOiBvcHRpb25zLmNlcnRpZmljYXRlVXJpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge1xuICAgIHNlcnZlcnM6IHt9LFxuICAgIGFkdmFuY2VkOiB7fVxuICB9KTtcbiAgY29uc3QgZXh0ZW5zaW9ucyA9IHNvdXJjZS5kcm0gJiYgT2JqZWN0LmVudHJpZXMoc291cmNlLmRybSkucmVkdWNlKChyZXN1bHQsIFtrZXlTeXN0ZW1JZCwgb3B0aW9uc10pID0+IHtcbiAgICBjb25zdCBrZXlTeXN0ZW1OYW1lID0ga2V5U3lzdGVtc1trZXlTeXN0ZW1JZF0gfHwga2V5U3lzdGVtSWQ7XG5cbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8IG9wdGlvbnMuY2VydGlmaWNhdGVIZWFkZXJzKSB7XG4gICAgICByZXN1bHRba2V5U3lzdGVtTmFtZV0gPSB7XG4gICAgICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgLi4uKG9wdGlvbnMuY2VydGlmaWNhdGVIZWFkZXJzICYmIHtcbiAgICAgICAgICBjZXJ0aWZpY2F0ZUhlYWRlcnM6IG9wdGlvbnMuY2VydGlmaWNhdGVIZWFkZXJzXG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIFtkcm0sIHtcbiAgICBkcm06IGV4dGVuc2lvbnNcbiAgfV07XG59O1xuXG5jb25zdCBGYWlycGxheUtleVN5c3RlbSA9IHtcbiAgcHJlcGFyZUNvbnRlbnRJZDogY29udGVudFVyaSA9PiB7XG4gICAgY29uc3QgdXJpUGFydHMgPSBjb250ZW50VXJpLnNwbGl0KCc6Ly8nKTtcbiAgICBjb25zdCBjb250ZW50SWQgPSB1cmlQYXJ0c1sxXSB8fCAnJztcbiAgICByZXR1cm4gdXJpUGFydHNbMF0uc2xpY2UoLTMpLnRvTG93ZXJDYXNlKCkgPT09ICdza2QnID8gY29udGVudElkIDogJyc7XG4gIH0sXG4gIHByZXBhcmVDZXJ0aWZpY2F0ZTogY2VydCA9PiBuZXcgVWludDhBcnJheShjZXJ0KSxcbiAgcHJlcGFyZU1lc3NhZ2U6IChrZXlNZXNzYWdlRXZlbnQsIGtleVNlc3Npb24pID0+IHtcbiAgICBjb25zdCBzcGMgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5TWVzc2FnZUV2ZW50Lm1lc3NhZ2VCYXNlNjRFbmNvZGVkKTtcbiAgICBjb25zdCBhc3NldElkID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleVNlc3Npb24uY29udGVudElkKTtcbiAgICByZXR1cm4gYHNwYz0ke3NwY30mYXNzZXRfaWQ9JHthc3NldElkfWA7XG4gIH0sXG4gIHByZXBhcmVMaWNlbnNlOiBsaWNlbnNlID0+IHtcbiAgICBpZiAobGljZW5zZS5zdWJzdHIoMCwgNSkgPT09ICc8Y2tjPicgJiYgbGljZW5zZS5zdWJzdHIoLTYpID09PSAnPC9ja2M+Jykge1xuICAgICAgcmV0dXJuIGxpY2Vuc2Uuc2xpY2UoNSwgLTYpO1xuICAgIH1cblxuICAgIHJldHVybiBsaWNlbnNlO1xuICB9XG59O1xuXG5jb25zdCBkZWZhdWx0Q2VydGlmaWNhdGVVcmwgPSB1cmwgPT4gYCR7dXJsID09PSBudWxsIHx8IHVybCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdXJsLnJlcGxhY2UoL1xcLyQvLCAnJyl9L2ZhaXJwbGF5X2NlcnRgO1xuXG5jb25zdCB0aW1lb3V0RXJyb3IgPSAoKSA9PiBuZXcgRXJyb3IoJ3JlcXVlc3QgdGltZW91dCcpO1xuLyoqXG4gKiBAcGFyYW0ge1VSTHxSZXF1ZXN0SW5mb30gdXJsIFxuICogQHBhcmFtIHtSZXF1ZXN0SW5pdH0gb3B0aW9ucyBcbiAqIEBwYXJhbSB7e3Jlc3BvbnNlVHlwZTogJ2pzb24nfCd0ZXh0J319XG4gKi9cblxuXG5jb25zdCByZXRyeVJlcXVlc3QgPSAodXJsLCBvcHRpb25zID0ge30sIHtcbiAgcmVzcG9uc2VUeXBlID0gJ2pzb24nLFxuICB0aW1lb3V0ID0gNixcbiAgcmV0cnlUaW1lcyA9IDZcbn0gPSB7fSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdCh0aW1lb3V0RXJyb3IoKSksIHRpbWVvdXQgKiAxMDAwKTtcbiAgZmV0Y2godXJsLCBvcHRpb25zKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICB2YXIgX3Jlc3BvbnNlJHJlc3BvbnNlVHlwO1xuXG4gICAgcmV0dXJuIHJlc29sdmUoKChfcmVzcG9uc2UkcmVzcG9uc2VUeXAgPSByZXNwb25zZVtyZXNwb25zZVR5cGVdKSA9PT0gbnVsbCB8fCBfcmVzcG9uc2UkcmVzcG9uc2VUeXAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9yZXNwb25zZSRyZXNwb25zZVR5cC5jYWxsKHJlc3BvbnNlKSkgfHwgcmVzcG9uc2UpO1xuICB9KS5jYXRjaChyZWplY3QpO1xufSkuY2F0Y2goZXJyb3IgPT4ge1xuICBjb25zb2xlLmxvZyhlcnJvcik7XG5cbiAgaWYgKHJldHJ5VGltZXMgPiAwKSB7XG4gICAgcmV0dXJuIHJldHJ5UmVxdWVzdCh1cmwsIG9wdGlvbnMsIHtcbiAgICAgIHRpbWVvdXQsXG4gICAgICByZXRyeVRpbWVzOiByZXRyeVRpbWVzIC0gMVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yO1xufSk7XG5cbmNvbnN0IG1hdGNoQWxsID0gKGlucHV0LCBwYXR0ZXJuKSA9PiB7XG4gIGNvbnN0IGZsYWdzID0gW3BhdHRlcm4uZ2xvYmFsICYmICdnJywgcGF0dGVybi5pZ25vcmVDYXNlICYmICdpJywgcGF0dGVybi5tdWx0aWxpbmUgJiYgJ20nXS5maWx0ZXIoQm9vbGVhbikuam9pbignJyk7XG4gIGNvbnN0IGNsb25lID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gIHJldHVybiBBcnJheS5mcm9tKGZ1bmN0aW9uKiAoKSB7XG4gICAgbGV0IG1hdGNoZWQgPSB0cnVlO1xuXG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIG1hdGNoZWQgPSBjbG9uZS5leGVjKGlucHV0KTtcblxuICAgICAgaWYgKCFtYXRjaGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgeWllbGQgbWF0Y2hlZDtcbiAgICB9XG4gIH0oKSk7XG59O1xuXG5jb25zdCBtZWV0UmVzdHJpY3Rpb24gPSAocXVhbGl0eSwge1xuICBtaW5IZWlnaHQsXG4gIG1heEhlaWdodFxufSA9IHt9KSA9PiAhKHF1YWxpdHkuaGVpZ2h0IDwgbWluSGVpZ2h0IHx8IHF1YWxpdHkuaGVpZ2h0ID4gbWF4SGVpZ2h0KTtcblxuY29uc3QgZ2V0SGxzUXVhbGl0eU9wdGlvbnMgPSBhc3luYyBobHNVcmwgPT4ge1xuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHJldHJ5UmVxdWVzdChobHNVcmwsIHt9LCB7XG4gICAgcmVzcG9uc2VUeXBlOiAndGV4dCdcbiAgfSk7XG4gIGNvbnN0IHJlc29sdXRpb25MaXN0ID0gbWF0Y2hBbGwobWFuaWZlc3QsIC9SRVNPTFVUSU9OPVxcZCt4KFxcZCspL2cpO1xuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KHJlc29sdXRpb25MaXN0Lm1hcCgoWywgaGVpZ2h0XSkgPT4gKHtcbiAgICBoZWlnaHQ6ICtoZWlnaHRcbiAgfSkpKSkuc29ydCgoYSwgYikgPT4gYi5oZWlnaHQgLSBhLmhlaWdodCk7XG59O1xuXG5jb25zdCBzZWxlY3RSZXN0cmljdGVkUXVhbGl0eSA9IChhdmFpbGFibGVRdWFsaXRpZXMsIHtcbiAgc3VnZ2VzdGVkLFxuICByZXN0cmljdGlvbnNcbn0pID0+IHtcbiAgaWYgKG1lZXRSZXN0cmljdGlvbihzdWdnZXN0ZWQsIHJlc3RyaWN0aW9ucykpIHtcbiAgICByZXR1cm4gc3VnZ2VzdGVkLmlkO1xuICB9XG5cbiAgY29uc3QgYWxsb3dlZCA9IGF2YWlsYWJsZVF1YWxpdGllcy5maWx0ZXIocXVhbGl0eSA9PiBtZWV0UmVzdHJpY3Rpb24ocXVhbGl0eSwgcmVzdHJpY3Rpb25zKSk7XG4gIHJldHVybiAobmVhcmVzdChhbGxvd2VkLCBpdGVtID0+IGl0ZW0uaGVpZ2h0IC0gc3VnZ2VzdGVkLmhlaWdodCkgfHwgc3VnZ2VzdGVkKS5pZDtcbn07XG4gLy8gZm9yIHVuaXQgdGVzdFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuXG5jb25zdCBTSEFLQV9MSVZFX0RVUkFUSU9OID0gNDI5NDk2NzI5NjtcblxuY29uc3QgaXNMaXZlRHVyYXRpb24gPSBkdXJhdGlvbiA9PiBkdXJhdGlvbiA+PSBTSEFLQV9MSVZFX0RVUkFUSU9OOyAvLyBUaGVyZSdzIGFsd2F5cyBhIGdhcCBiZXR3ZWVuIHBsYXliYWNrIGhlYWQgJiBsaXZlIGVkZ2UsXG4vLyB3aGVuIHRoZSBnYXAgaXMgc21hbGwgZW5vdWdoLCB3ZSBjb25zaWRlciBpdCBpcyBvbiBlZGdlLlxuLy8gVGhlIG1hZ2ljIG51bWJlciAxMHMgY29tZXMgZnJvbSBvYnNlcnZhdGlvbiBvZiBZb3VUdWJlXG5cblxuY29uc3QgTElWRV9FREdFX0dBUCA9IDEwO1xuXG5jb25zdCBnZXRNZWRpYUVsZW1lbnRTdGF0ZSA9IChtZWRpYSwgcGx1Z2lucyA9IFtdKSA9PiB7XG4gIGNvbnN0IG92ZXJyaWRlcyA9IHBsdWdpbnMubWFwKHBsdWdpbiA9PiB7XG4gICAgdmFyIF9wbHVnaW4kZ2V0UGxheWJhY2tTdDtcblxuICAgIHJldHVybiAoX3BsdWdpbiRnZXRQbGF5YmFja1N0ID0gcGx1Z2luLmdldFBsYXliYWNrU3RhdHVzKSA9PT0gbnVsbCB8fCBfcGx1Z2luJGdldFBsYXliYWNrU3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wbHVnaW4kZ2V0UGxheWJhY2tTdC5jYWxsKHBsdWdpbik7XG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7XG4gICAgcGF1c2VkOiBtZWRpYS5wYXVzZWQsXG4gICAgZW5kZWQ6IG1lZGlhLmVuZGVkLFxuICAgIGN1cnJlbnRUaW1lOiBtZWRpYS5jdXJyZW50VGltZSxcbiAgICBkdXJhdGlvbjogbWVkaWEuZHVyYXRpb25cbiAgfSwgLi4ub3ZlcnJpZGVzKTtcbn07XG5cbmNvbnN0IHN1YnNjcmliZU1lZGlhU3RhdGUgPSAobWVkaWEsIHVwZGF0ZVN0YXRlLCBwbHVnaW5zID0gW10pID0+IHtcbiAgbGV0IHN0YXRlID0ge1xuICAgIHBsYXliYWNrU3RhdGU6ICdpbml0JyxcbiAgICB3YWl0aW5nOiBmYWxzZSxcbiAgICAuLi5nZXRNZWRpYUVsZW1lbnRTdGF0ZShtZWRpYSwgcGx1Z2lucylcbiAgfTtcblxuICBjb25zdCBzeW5jU3RhdGUgPSB1cGRhdGUgPT4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudFN0YXRlID0gZ2V0TWVkaWFFbGVtZW50U3RhdGUobWVkaWEsIHBsdWdpbnMpOyAvLyB3aGVuIHBsYXlpbmcgU1NBSSBzdHJlYW0sXG4gICAgLy8gc29tZXRpbWVzIGR1cmF0aW9uIGNoYW5nZXMgdG8gd3JvbmcgdmFsdWUgd2hlbiBwbGF5aW5nIGFuIGFkXG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSBzdGF0ZS5kdXJhdGlvbiA+IDAgPyB7XG4gICAgICBkdXJhdGlvbjogc3RhdGUuZHVyYXRpb25cbiAgICB9IDoge307XG4gICAgc3RhdGUgPSB7IC4uLnN0YXRlLFxuICAgICAgLi4udmlkZW9FbGVtZW50U3RhdGUsXG4gICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAuLi51cGRhdGVcbiAgICB9OyAvLyBUT0RPIGNvbnNpZGVyIHNoYWxsb3cgZXF1YWw/XG5cbiAgICB1cGRhdGVTdGF0ZShzdGF0ZSk7XG4gIH07XG5cbiAgY29uc3QgcmVnaXN0ZXJlZCA9IFtvbihtZWRpYSwgJ2Vycm9yJywgKCkgPT4gc3luY1N0YXRlKHtcbiAgICBwbGF5YmFja1N0YXRlOiAnZXJyb3InXG4gIH0pKSwgb24obWVkaWEsICd3YWl0aW5nJywgKCkgPT4gc3luY1N0YXRlKHtcbiAgICBwbGF5YmFja1N0YXRlOiAnYnVmZmVyaW5nJ1xuICB9KSksIG9uKG1lZGlhLCAnbG9hZHN0YXJ0JywgKCkgPT4gc3luY1N0YXRlKHtcbiAgICBzZWVrRW5hYmxlZDogZmFsc2UsXG4gICAgZHVyYXRpb246IDAsXG4gICAgcGxheWJhY2tTdGF0ZTogJ2xvYWRpbmcnLFxuICAgIHdhaXRpbmc6IHRydWVcbiAgfSkpLCBvbihtZWRpYSwgJ3BsYXknLCBzeW5jU3RhdGUsIHN5bmNTdGF0ZSh7XG4gICAgcGF1c2VkOiBmYWxzZVxuICB9KSksIG9uKG1lZGlhLCAncGF1c2UnLCAoKSA9PiBzeW5jU3RhdGUoe1xuICAgIHBsYXliYWNrU3RhdGU6ICdwYXVzZWQnXG4gIH0pKSwgb24obWVkaWEsICdzZWVraW5nJywgKCkgPT4gc3luY1N0YXRlKHtcbiAgICBwbGF5YmFja1N0YXRlOiAnYnVmZmVyaW5nJ1xuICB9KSksIG9uKG1lZGlhLCAndGltZXVwZGF0ZScsICgpID0+IHN5bmNTdGF0ZSghbWVkaWEucGF1c2VkICYmIHtcbiAgICBwbGF5YmFja1N0YXRlOiAncGxheWluZydcbiAgfSkpLCBvbihtZWRpYSwgJ2VuZGVkJywgKCkgPT4gc3luY1N0YXRlKHtcbiAgICBwbGF5YmFja1N0YXRlOiAnZW5kZWQnXG4gIH0pKSwgb24obWVkaWEsICdkdXJhdGlvbmNoYW5nZScsICgpID0+IHtcbiAgICBzeW5jU3RhdGUoe1xuICAgICAgc2Vla0VuYWJsZWQ6IGlzTGl2ZUR1cmF0aW9uKG1lZGlhLmR1cmF0aW9uKVxuICAgIH0pO1xuICB9KV07XG4gIHN5bmNTdGF0ZSgpO1xuICByZXR1cm4gKCkgPT4gcmVnaXN0ZXJlZC5mb3JFYWNoKG9mZiA9PiBvZmYoKSk7XG59O1xuXG5jb25zdCBpc0VuZGVkID0gbWVkaWEgPT4gaXNMaXZlRHVyYXRpb24obWVkaWEuaW5pdGlhbER1cmF0aW9uKSAmJiBtZWRpYS5pbml0aWFsRHVyYXRpb24gLSBtZWRpYS5jdXJyZW50VGltZSA8IDEgJiYgbWVkaWEuZW5kZWQ7IC8vIFdoZW4gZG9ud2xvYWQgYmFuZHdpZHRoIGlzIGxvdywgU2FmYXJpIG1heSByZXBvcnQgdGltZSB1cGRhdGUgd2hpbGUgYnVmZmVyaW5nLCBpZ25vcmUgaXQuXG5cblxuY29uc3QgaXNCdWZmZXJlZCA9IG1lZGlhID0+IEFycmF5LmZyb20oe1xuICBsZW5ndGg6IG1lZGlhLmJ1ZmZlcmVkLmxlbmd0aFxufSwgKF8sIGluZGV4KSA9PiAoe1xuICBzdGFydDogbWVkaWEuYnVmZmVyZWQuc3RhcnQoaW5kZXgpLFxuICBlbmQ6IG1lZGlhLmJ1ZmZlcmVkLmVuZChpbmRleClcbn0pKS5zb21lKCAvLyBpbiBTYWZhcmkgYnVmZmVyZWQgaXMgY2xpcHBlZCB0byBpbnRlZ2VyXG5yYW5nZSA9PiByYW5nZS5zdGFydCA8PSBtZWRpYS5jdXJyZW50VGltZSAmJiBtZWRpYS5jdXJyZW50VGltZSA8PSByYW5nZS5lbmQgKyAxKTtcblxuY29uc3QgZ2V0TGl2ZVRpbWUgPSAobWVkaWEsIHtcbiAgcGxheWVyXG59KSA9PiB7XG4gIHZhciBfcGxheWVyJHNlZWtSYW5nZTtcblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgY29uc3QgY3VycmVudE9mZnNldCA9IG1lZGlhLmN1cnJlbnRUaW1lIC0gbWVkaWEuZGVmYXVsdExpdmVPZmZzZXQgLSBub3c7XG4gIGNvbnN0IHtcbiAgICBzdGFydCxcbiAgICBlbmRcbiAgfSA9IChwbGF5ZXIgPT09IG51bGwgfHwgcGxheWVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BsYXllciRzZWVrUmFuZ2UgPSBwbGF5ZXIuc2Vla1JhbmdlKSA9PT0gbnVsbCB8fCBfcGxheWVyJHNlZWtSYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllciRzZWVrUmFuZ2UuY2FsbChwbGF5ZXIpKSB8fCB7fTtcbiAgY29uc3Qgc2Vla0R1cmF0aW9uID0gTWF0aC5taW4oZW5kIC0gc3RhcnQgLSBMSVZFX0VER0VfR0FQIC8gMiwgbWVkaWEuc2Vla0R1cmF0aW9uRGlmZiArIG5vdyk7XG4gIHJldHVybiB7XG4gICAgc3RyZWFtVHlwZTogJ2xpdmUnLFxuICAgIHN0YXJ0VGltZTogLXNlZWtEdXJhdGlvbixcbiAgICBjdXJyZW50VGltZTogY3VycmVudE9mZnNldCA8IC1MSVZFX0VER0VfR0FQID8gY3VycmVudE9mZnNldCA6IDAsXG4gICAgZHVyYXRpb246IHNlZWtEdXJhdGlvbiA+IDUgKiBMSVZFX0VER0VfR0FQID8gc2Vla0R1cmF0aW9uIDogMFxuICB9O1xufTtcblxuY29uc3QgZ2V0TWVkaWFUaW1lID0gKG1lZGlhLCBwbHVnaW5zID0gW10sIHBsYXllciA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkdXJhdGlvbixcbiAgICAuLi5kYXRhXG4gIH0gPSBPYmplY3QuYXNzaWduKGlzTGl2ZUR1cmF0aW9uKG1lZGlhLmluaXRpYWxEdXJhdGlvbikgPyBnZXRMaXZlVGltZShtZWRpYSwge1xuICAgIHBsYXllcixcbiAgICBwbHVnaW5zXG4gIH0pIDoge1xuICAgIGN1cnJlbnRUaW1lOiBtZWRpYS5jdXJyZW50VGltZSxcbiAgICBidWZmZXJUaW1lOiBNYXRoLm1heCguLi5BcnJheS5mcm9tKHtcbiAgICAgIGxlbmd0aDogbWVkaWEuYnVmZmVyZWQubGVuZ3RoXG4gICAgfSwgKF8sIGluZGV4KSA9PiBtZWRpYS5idWZmZXJlZC5lbmQoaW5kZXgpKSksXG4gICAgZHVyYXRpb246IG1lZGlhLmluaXRpYWxEdXJhdGlvbiAvLyBtb25rZXkgcGF0Y2hlZCwgZHVyYXRpb24gbWF5IGNoYW5nZSBmb3IgREFTSCBwbGF5YmFja1xuXG4gIH0sIC4uLnBsdWdpbnMubWFwKHBsdWdpbiA9PiB7XG4gICAgdmFyIF9wbHVnaW4kZ2V0UGxheWJhY2tTdDI7XG5cbiAgICByZXR1cm4gKF9wbHVnaW4kZ2V0UGxheWJhY2tTdDIgPSBwbHVnaW4uZ2V0UGxheWJhY2tTdGF0dXMpID09PSBudWxsIHx8IF9wbHVnaW4kZ2V0UGxheWJhY2tTdDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wbHVnaW4kZ2V0UGxheWJhY2tTdDIuY2FsbChwbHVnaW4pO1xuICB9KSk7XG4gIHJldHVybiB7IC4uLmRhdGEsXG4gICAgLi4uKChpc0xpdmVEdXJhdGlvbihtZWRpYS5pbml0aWFsRHVyYXRpb24pIHx8IE1hdGguYWJzKG1lZGlhLmR1cmF0aW9uIC0gbWVkaWEuaW5pdGlhbER1cmF0aW9uKSA8IDAuNSkgJiYge1xuICAgICAgZHVyYXRpb25cbiAgICB9KVxuICB9O1xufTtcblxuY29uc3QgSEFWRV9NRVRBREFUQSA9IDE7XG5cbmNvbnN0IHN1YnNjcmliZVBsYXliYWNrU3RhdGUgPSAobWVkaWEsIHVwZGF0ZVN0YXRlKSA9PiB7XG4gIGNvbnN0IGxhc3RVcGRhdGUgPSB7XG4gICAgc3RhdGU6ICcnLFxuICAgIHRpbWU6IDBcbiAgfTtcblxuICBjb25zdCB1cGRhdGVJZkNoYW5nZWQgPSAoZXZlbnQsIHN0YXRlKSA9PiB7XG4gICAgLy8gU2FmYXJpIG1heSByZXBvcnQgYWJub3JtYWwgY3VycmVudFRpbWUsIHNhZmUgdG8gaWdub3JlXG4gICAgaWYgKG1lZGlhLmN1cnJlbnRUaW1lID4gMWUxMykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxhc3RVcGRhdGUudGltZSA9IG1lZGlhLmN1cnJlbnRUaW1lO1xuICAgIGxhc3RVcGRhdGUuZXZlbnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChzdGF0ZSAhPT0gbGFzdFVwZGF0ZS5zdGF0ZSkge1xuICAgICAgbGFzdFVwZGF0ZS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgbGFzdFVwZGF0ZS5iYXRjaGVkID0gbWVkaWEud2Via2l0RGlzcGxheWluZ0Z1bGxzY3JlZW47XG5cbiAgICAgIGlmICghbGFzdFVwZGF0ZS5iYXRjaGVkKSB7XG4gICAgICAgIHVwZGF0ZVN0YXRlKGV2ZW50LCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUJ1ZmZlcmluZ1N0YXRlID0gZXZlbnQgPT4ge1xuICAgIGlmICghbWVkaWEucGF1c2VkICYmICFtZWRpYS5lbmRlZCkge1xuICAgICAgdXBkYXRlSWZDaGFuZ2VkKGV2ZW50LCAnYnVmZmVyaW5nJyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVBsYXliYWNrVGltZSA9IGV2ZW50ID0+IHtcbiAgICBpZiAoIW1lZGlhLnBhdXNlZCAmJiBpc0J1ZmZlcmVkKG1lZGlhKSAmJiBtZWRpYS5jdXJyZW50VGltZSAtIGxhc3RVcGRhdGUudGltZSA+IDAuMDEpIHtcbiAgICAgIHVwZGF0ZUlmQ2hhbmdlZChldmVudCwgJ3BsYXlpbmcnKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlRW5kID0gZXZlbnQgPT4ge1xuICAgIGlmIChpc0VuZGVkKG1lZGlhKSkge1xuICAgICAgdXBkYXRlSWZDaGFuZ2VkKGV2ZW50LCAnZW5kZWQnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZWdpc3RlcmVkID0gW29uKG1lZGlhLCAnZXJyb3InLCBldmVudCA9PiB1cGRhdGVJZkNoYW5nZWQoZXZlbnQsICdlcnJvcicpKSwgb24obWVkaWEsICd3YWl0aW5nJywgdXBkYXRlQnVmZmVyaW5nU3RhdGUpLCBvbihtZWRpYSwgJ2xvYWRzdGFydCcsIGV2ZW50ID0+IHVwZGF0ZUlmQ2hhbmdlZChldmVudCwgJ2xvYWRpbmcnKSksIG9uKG1lZGlhLCAnbG9hZGVkbWV0YWRhdGEnLCBldmVudCA9PiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIShtZWRpYS5yZWFkeVN0YXRlID4gSEFWRV9NRVRBREFUQSkpIHtcbiAgICAgIHVwZGF0ZUlmQ2hhbmdlZChldmVudCwgJ3BhdXNlZCcpO1xuICAgIH1cbiAgfSwgMTUwMCkpLCBvbihtZWRpYSwgJ2xvYWRlZGRhdGEnLCBldmVudCA9PiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHVwZGF0ZUlmQ2hhbmdlZChldmVudCwgJ3BhdXNlZCcpO1xuICAgIH1cbiAgfSwgMSkpLCBvbihtZWRpYSwgJ2NhbnBsYXknLCBldmVudCA9PiB7XG4gICAgaWYgKG1lZGlhLnBhdXNlZCAmJiAobGFzdFVwZGF0ZS5zdGF0ZSAhPT0gJ2xvYWRpbmcnIHx8IGlzSU9TKCkpKSB7XG4gICAgICB1cGRhdGVJZkNoYW5nZWQoZXZlbnQsICdwYXVzZWQnKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQbGF5YmFja1RpbWUoZXZlbnQpO1xuICB9KSwgb24obWVkaWEsICdwYXVzZScsIGV2ZW50ID0+IHtcbiAgICBpZiAobGFzdFVwZGF0ZS53YXNQYXVzZWRCZWZvcmVFeGl0KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdJZ25vcmUgcGF1c2UgZnJvbSBpT1MgZXhpdCBmdWxsc2NyZWVuLCBidXQga2VlcCBwYXVzZWQgKHVzZXIgd2FzIHBhdXNlZCBiZWZvcmUgZXhpdCknKTtcbiAgICAgIHVwZGF0ZVN0YXRlKGV2ZW50LCAncGF1c2VkJyk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiBwYXVzZSBoYXBwZW5zIHNob3J0bHkgYWZ0ZXIgZXhpdCBmdWxsc2NyZWVuLCBpdCdzIGxpa2VseSBTYWZhcmkncyBhdXRvLXBhdXNlXG5cblxuICAgIGlmIChEYXRlLm5vdygpIC0gbGFzdFVwZGF0ZS5lbmRGdWxsc2NyZWVuQXQgPCA1ICogNTAwKSB7XG4gICAgICBsYXN0VXBkYXRlLmVuZEZ1bGxzY3JlZW5BdCA9IDA7XG4gICAgICBtZWRpYS5wbGF5KCk7XG4gICAgICBjb25zb2xlLmRlYnVnKCdJZ25vcmUgcGF1c2UgZnJvbSBpT1MgZXhpdCBmdWxsc2NyZWVuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVFbmQoZXZlbnQpKSB7XG4gICAgICB1cGRhdGVJZkNoYW5nZWQoZXZlbnQsICdwYXVzZWQnKTtcbiAgICB9XG4gIH0pLCBvbihtZWRpYSwgJ3NlZWtpbmcnLCB1cGRhdGVCdWZmZXJpbmdTdGF0ZSksIG9uKG1lZGlhLCAnc2Vla2VkJywgZXZlbnQgPT4ge1xuICAgIGlmIChsYXN0VXBkYXRlLnN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAgIHVwZGF0ZUlmQ2hhbmdlZChldmVudCwgJ3BhdXNlZCcpO1xuICAgIH1cbiAgfSksIG9uKG1lZGlhLCAndGltZXVwZGF0ZScsIHVwZGF0ZVBsYXliYWNrVGltZSksIG9uKG1lZGlhLCAnZW5kZWQnLCB1cGRhdGVFbmQpLCBvbihtZWRpYSwgJ3dlYmtpdGVuZGZ1bGxzY3JlZW4nLCBldmVudCA9PiB7XG4gICAgY29uc3QgZXhpdEZ1bGxzY3JlZW5UaW1lID0gRGF0ZS5ub3coKTtcbiAgICBsYXN0VXBkYXRlLmVuZEZ1bGxzY3JlZW5BdCA9IGV4aXRGdWxsc2NyZWVuVGltZTsgLy8gVHJhY2sgaWYgdXNlciB3YXMgcGF1c2VkIGJlZm9yZSBleGl0XG5cbiAgICBsYXN0VXBkYXRlLndhc1BhdXNlZEJlZm9yZUV4aXQgPSBsYXN0VXBkYXRlLnN0YXRlID09PSAncGF1c2VkJzsgLy8gd2Via2l0RGlzcGxheWluZ0Z1bGxzY3JlZW4gaXMgc3RpbGwgdHJ1ZSBhdCB0aGUgbW9tZW50LCBjYW4gc3luYyBiYWtlIHRvIHRhcmdldCBzdGF0ZVxuICAgIC8vIGlmIHBhdXNlZCBieSBuYXRpdmUgZXhpdCBmdWxsc2NyZWVuIGJ1dHRvbiwgc2hvdWxkIHJlc3VtZSBwbGF5aW5nXG4gICAgLy8gT25seSByZXN1bWUgaWYgcGF1c2UgaGFwcGVuZWQgdmVyeSByZWNlbnRseSAoaU9TIGF1dG8tcGF1c2UpLCBub3QgaWYgdXNlciBwYXVzZWQgYmVmb3JlIGV4aXRcblxuICAgIGlmIChsYXN0VXBkYXRlLnN0YXRlID09PSAncGF1c2VkJyAmJiAhbGFzdFVwZGF0ZS53YXNQYXVzZWRCZWZvcmVFeGl0ICYmIGV4aXRGdWxsc2NyZWVuVGltZSAtIGxhc3RVcGRhdGUuZXZlbnRUaW1lIDwgNTAwKSB7XG4gICAgICB3YWl0Rm9yKCgpID0+ICFtZWRpYS53ZWJraXREaXNwbGF5aW5nRnVsbHNjcmVlbiwgKCkgPT4gdXBkYXRlU3RhdGUoZXZlbnQsICdwbGF5aW5nJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzeW5jIGJhY2sgY3VycmVudCBwbGF5YmFjayBzdGF0ZSBpbiBmdWxsc2NyZWVuXG4gICAgICB1cGRhdGVTdGF0ZShldmVudCwgbGFzdFVwZGF0ZS5zdGF0ZSk7XG4gICAgfVxuICB9KV07XG4gIHJldHVybiAoKSA9PiByZWdpc3RlcmVkLmZvckVhY2gob2ZmID0+IG9mZigpKTtcbn07XG5cbmNvbnN0IHRyeVBhdGNoSGxzVmlkZW9RdWFsaXRpZXMgPSBhc3luYyAocGxheWVyLCBobHNVcmwpID0+IHtcbiAgaWYgKC8oXmRhdGEpfChtcDQkKS8udGVzdChobHNVcmwpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGZpbHRlcmVkIG1hbmlmZXN0IGNvbWVzIHdpdGggZGF0YSBVUkkgYW5kIHNob3VsZCBiZSBpZ25vcmVkXG5cblxuICBjb25zdCB2aWRlb1F1YWxpdGllcyA9IGF3YWl0IGdldEhsc1F1YWxpdHlPcHRpb25zKGhsc1VybCkuY2F0Y2goZSA9PiB7XG4gICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZ2V0IEhMUyB2aWRlbyBxdWFsaXRpZXMnLCBlKTtcbiAgfSk7XG5cbiAgaWYgKHZpZGVvUXVhbGl0aWVzKSB7XG4gICAgcGxheWVyLmdldEF2YWlsYWJsZVZpZGVvUXVhbGl0aWVzID0gKCkgPT4gdmlkZW9RdWFsaXRpZXM7XG4gIH1cbn07XG5cbmNvbnN0IGxvYWQgPSBhc3luYyAobWVkaWEsIHtcbiAgcGxheWVyLFxuICBzdGFydFRpbWUsXG4gIHBsdWdpbnMgPSBbXSxcbiAgZHJtXG59LCBzb3VyY2UpID0+IHtcbiAgY29uc3QgcHJlZmVyTWFuaWZlc3RUeXBlID0gbmVlZE5hdGl2ZUhscygpID8gJ2hscycgOiAnZGFzaCc7XG4gIGNvbnN0IHByZWZlcnJlZCA9IGdldFNvdXJjZShzb3VyY2UsIHtcbiAgICBwcmVmZXJNYW5pZmVzdFR5cGUsXG4gICAgZmFsbGJhY2tEcm06IGRybVxuICB9KTsgLy8gVGhlcmUncyBubyB1c2UgY2FzZSB0aGF0IGNoYW5naW5nIERSTSBvcHRpb25zIHdpdGhvdXQgY2hhbmdpbmcgbWFuaWZlc3QgVVJMLCBqdXN0IHNraXBcblxuICBpZiAocGxheWVyLmxhc3RTcmMgPT09IChwcmVmZXJyZWQgPT09IG51bGwgfHwgcHJlZmVycmVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcmVmZXJyZWQuc3JjKSkge1xuICAgIGNvbnNvbGUuaW5mbygnc3JjIGlzIHVuY2hhbmdlZCwgc2tpcCBsb2FkJywgcHJlZmVycmVkLnNyYyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcGxheWVyLmxhc3RTcmMgPSBwcmVmZXJyZWQgPT09IG51bGwgfHwgcHJlZmVycmVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcmVmZXJyZWQuc3JjOyAvLyBwbGF5bG9nIHYyIGRlcGVuZHMgb24gdGhpcyBldmVudFxuXG4gIG1lZGlhLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdsb2Fkc3RhcnQnKSk7XG4gIGNvbnN0IG1lcmdlZCA9IGF3YWl0IHBsdWdpbnMucmVkdWNlKGFzeW5jIChsb2FkQ2hhaW4sIHBsdWdpbikgPT4ge1xuICAgIHZhciBfcGx1Z2luJGxvYWQ7XG5cbiAgICBjb25zdCBjdXJyZW50U291cmNlID0gYXdhaXQgbG9hZENoYWluO1xuICAgIGNvbnN0IG92ZXJyaWRlcyA9IGF3YWl0ICgoX3BsdWdpbiRsb2FkID0gcGx1Z2luLmxvYWQpID09PSBudWxsIHx8IF9wbHVnaW4kbG9hZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsdWdpbiRsb2FkLmNhbGwocGx1Z2luLCBjdXJyZW50U291cmNlLCB7XG4gICAgICB2aWRlbzogbWVkaWEsXG4gICAgICBwbGF5ZXIsXG4gICAgICBzb3VyY2U6IGN1cnJlbnRTb3VyY2UsXG4gICAgICBzdGFydFRpbWUsXG4gICAgICBzdHJlYW1Gb3JtYXQ6IHByZWZlck1hbmlmZXN0VHlwZSxcbiAgICAgIHJlbG9hZDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBCaXRtb3ZpbiB1bmV4cGVjdGVkbHkgcmVzdG9yZXMgbXV0ZWQgc3RhdGUsIHNvIHNhdmUgdG8gcmVzdG9yZVxuICAgICAgICBjb25zdCByZXN0b3JlTXV0ZWQgPSBwbGF5ZXIuaXNNdXRlZCAmJiB7XG4gICAgICAgICAgbXV0ZWQ6IHBsYXllci5pc011dGVkKClcbiAgICAgICAgfTtcbiAgICAgICAgcGxheWVyLmxhc3RTcmMgPSAnJztcbiAgICAgICAgYXdhaXQgbG9hZChtZWRpYSwge1xuICAgICAgICAgIHBsYXllcixcbiAgICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgICBkcm1cbiAgICAgICAgfSwgc291cmNlKTtcblxuICAgICAgICBpZiAocmVzdG9yZU11dGVkKSB7XG4gICAgICAgICAgcGxheWVyW3Jlc3RvcmVNdXRlZC5tdXRlZCA/ICdtdXRlJyA6ICd1bm11dGUnXSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuICAgIHJldHVybiBvdmVycmlkZXMgPyB7IC4uLmN1cnJlbnRTb3VyY2UsXG4gICAgICAuLi4ob3ZlcnJpZGVzLnVybCAmJiB7XG4gICAgICAgIHNyYzogb3ZlcnJpZGVzLnVybFxuICAgICAgfSksXG4gICAgICAuLi4ob3ZlcnJpZGVzLnN0YXJ0VGltZSA+PSAwICYmIHtcbiAgICAgICAgc3RhcnRUaW1lOiBvdmVycmlkZXMuc3RhcnRUaW1lXG4gICAgICB9KVxuICAgIH0gOiBjdXJyZW50U291cmNlO1xuICB9LCB7IC4uLnByZWZlcnJlZCxcbiAgICBzdGFydFRpbWVcbiAgfSk7XG4gIG1lZGlhLmFkZEV2ZW50TGlzdGVuZXIoJ2R1cmF0aW9uY2hhbmdlJywgKCkgPT4ge1xuICAgIC8vIG1lZGlhIGR1cmF0aW9uIG1heSBjaGFuZ2Ugd2hlbiBwbGF5aW5nIFZPRCB0byBsaXZlIG9yIFNTQUkgc3RyZWFtcywgc2F2ZSBpdCBoZXJlIGZvciBjb252ZW5pZW5jZVxuICAgIG1lZGlhLmluaXRpYWxEdXJhdGlvbiA9IG1lZGlhLmR1cmF0aW9uO1xuICB9LCB7XG4gICAgb25jZTogdHJ1ZVxuICB9KTtcbiAgbWVkaWEuc2Vla0R1cmF0aW9uRGlmZiA9IC1JbmZpbml0eTtcbiAgb25jZShtZWRpYSwgJ2xvYWRlZGRhdGEnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vla1RvU3RhcnQgPSAoZGVsYXkgPSAxKSA9PiB7XG4gICAgICBpZiAobWVyZ2VkLnN0YXJ0VGltZSA+IDAgfHwgbWVyZ2VkLnN0YXJ0VGltZSA8IDApIHtcbiAgICAgICAgLy8gU2FmYXJpIG1heSBnbGl0Y2ggaWYgc2VlayBpbW1lZGlhdGVseSwgc28gd2FpdCBhIGxpdHRsZSBiaXRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBzZWVrKG1lZGlhLCB7XG4gICAgICAgICAgcGxheWVyLFxuICAgICAgICAgIHBsdWdpbnNcbiAgICAgICAgfSwgbWVyZ2VkLnN0YXJ0VGltZSksIGRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHBsYXllci5pc0xpdmUoKSkge1xuICAgICAgcGxheWVyLnNob3VsZFBsYXlGcm9tRWRnZSA9IHBsYXllci5pc0xpdmUoKSAmJiAhKG1lcmdlZC5zdGFydFRpbWUgPCAwKTtcbiAgICAgIG9uY2UobWVkaWEsICd0aW1ldXBkYXRlJywgKCkgPT4ge1xuICAgICAgICBwbGF5ZXIuc2hvdWxkUGxheUZyb21FZGdlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBlbmRcbiAgICAgICAgfSA9IHBsYXllci5zZWVrUmFuZ2UoKTtcbiAgICAgICAgbWVkaWEuZGVmYXVsdExpdmVPZmZzZXQgPSBtZWRpYS5jdXJyZW50VGltZSAtIERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgICBtZWRpYS5zZWVrRHVyYXRpb25EaWZmID0gZW5kIC0gc3RhcnQgLSBEYXRlLm5vdygpIC8gMTAwMCAtIExJVkVfRURHRV9HQVAgLyAyO1xuICAgICAgICBzZWVrVG9TdGFydCgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZWtUb1N0YXJ0KCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgW2RybU9wdGlvbnMsIGV4dGVuc2lvbnNdID0gZ2V0RHJtT3B0aW9ucyhwcmVmZXJyZWQpO1xuICBwbGF5ZXIuY29uZmlndXJlKHtcbiAgICBkcm06IGRybU9wdGlvbnNcbiAgfSk7XG4gIHBsYXllci5jb25maWd1cmVFeHRlbnNpb25zKGV4dGVuc2lvbnMpO1xuICBsZXQgbG9hZFN0YXJ0VGltZTtcblxuICBpZiAobWVyZ2VkLnR5cGUgIT09ICdhcHBsaWNhdGlvbi94LW1wZWd1cmwnKSB7XG4gICAgbG9hZFN0YXJ0VGltZSA9IG1lcmdlZC5zdGFydFRpbWU7XG4gIH0gZWxzZSBpZiAobWVyZ2VkLnN0YXJ0VGltZSA+IDApIHtcbiAgICBvbmNlKG1lZGlhLCAnbG9hZGVkZGF0YScsIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbWVkaWEuY3VycmVudFRpbWUgPSBtZXJnZWQuc3RhcnRUaW1lO1xuICAgICAgfSwgNjYpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKG1lcmdlZC50eXBlID09PSAnYXBwbGljYXRpb24veC1tcGVndXJsJykge1xuICAgIGF3YWl0IHRyeVBhdGNoSGxzVmlkZW9RdWFsaXRpZXMocGxheWVyLCBtZXJnZWQuc3JjKTtcbiAgfVxuXG4gIHBsYXllci5sYXN0U2VlayA9IDA7XG5cbiAgcGxheWVyLnJlbG9hZCA9ICgpID0+IHBsYXllci51bmxvYWQoKS50aGVuKCgpID0+IHBsYXllci5sb2FkKG1lcmdlZC5zcmMsIGxvYWRTdGFydFRpbWUsIG1lcmdlZC50eXBlKSk7XG5cbiAgcmV0dXJuIHBsYXllci51bmxvYWQoKS50aGVuKCgpID0+IHBsYXllci5sb2FkKG1lcmdlZC5zcmMsIGxvYWRTdGFydFRpbWUsIG1lcmdlZC50eXBlKSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgIG1lZGlhLmRpc3BhdGNoRXZlbnQoT2JqZWN0LmFzc2lnbihuZXcgQ3VzdG9tRXZlbnQoJ2Vycm9yJyksIHtcbiAgICAgIGVycm9yXG4gICAgfSkpO1xuICB9KTtcbn07XG5cbmNvbnN0IHdhaXRNZWRpYVJlYWR5ID0gbWVkaWEgPT4gbWVkaWEucmVhZHlTdGF0ZSA+PSBIQVZFX01FVEFEQVRBIHx8IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICBtZWRpYS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHJlc29sdmUsIHtcbiAgICBvbmNlOiB0cnVlXG4gIH0pO1xufSk7XG5cbmNvbnN0IHNlZWsgPSBhc3luYyAobWVkaWEsIHtcbiAgcGxheWVyLFxuICBwbHVnaW5zID0gW11cbn0sIHRpbWUsIGlzc3VlcikgPT4ge1xuICBpZiAobWVkaWEucmVhZHlTdGF0ZSA8IEhBVkVfTUVUQURBVEEpIHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIG1lZGlhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCByZXNvbHZlLCB7XG4gICAgICAgIG9uY2U6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IC8vIFRPRE8gc2tpcCBzZWVraW5nIHRvIHRvbyBuZWFyIHBvaW50LCBjb25zaWRlciBTU0FJIGNhc2VzXG5cblxuICBjb25zdCBzZWVrUGx1Z2luID0gcGx1Z2lucy5maW5kKHBsdWdpbiA9PiB0eXBlb2YgcGx1Z2luLmhhbmRsZVNlZWsgPT09ICdmdW5jdGlvbicgJiYgcGx1Z2luLmlzQWN0aXZlKCkpO1xuXG4gIGNvbnN0IHNlZWtJbnRlcm5hbCA9IHNlZWtUaW1lID0+IHtcbiAgICB2YXIgX3BsYXllciRpc0xpdmUsIF9wbGF5ZXIkc2VlaztcblxuICAgIC8vIHNlZWtpbmcgdG8gZW5kIHZpZGVvIG1heSBjYXVzZSBTaGFrYSBnbGljaCwgc28gbW92ZSBiYWNrIGEgbGl0dGxlXG4gICAgaWYgKHNlZWtUaW1lIDw9IG1lZGlhLmR1cmF0aW9uICsgNyAmJiBzZWVrVGltZSA+PSBtZWRpYS5kdXJhdGlvbiAtIDEuMCkge1xuICAgICAgcmV0dXJuIHNlZWtJbnRlcm5hbChtZWRpYS5kdXJhdGlvbiAtIDEuMSk7XG4gICAgfVxuXG4gICAgcGxheWVyLnNob3VsZFBsYXlGcm9tRWRnZSA9IGZhbHNlO1xuICAgIGNvbnN0IHNlZWtPcmlnaW4gPSAoX3BsYXllciRpc0xpdmUgPSBwbGF5ZXIuaXNMaXZlKSAhPT0gbnVsbCAmJiBfcGxheWVyJGlzTGl2ZSAhPT0gdm9pZCAwICYmIF9wbGF5ZXIkaXNMaXZlLmNhbGwocGxheWVyKSA/IG1lZGlhLmRlZmF1bHRMaXZlT2Zmc2V0ICsgRGF0ZS5ub3coKSAvIDEwMDAgOiAwOyAvLyB3aGVuIHBsYXlpbmcgaW4gQml0bW92aW4sIG11c3QgY2FsbCBwbGF5ZXIuc2VlayB0byBzeW5jIGludGVybmFsIHRpbWVcblxuICAgIChfcGxheWVyJHNlZWsgPSBwbGF5ZXIuc2VlaykgPT09IG51bGwgfHwgX3BsYXllciRzZWVrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGxheWVyJHNlZWsuY2FsbChwbGF5ZXIsIHNlZWtUaW1lLCBpc3N1ZXIpOyAvLyBwbGF5ZXIuc2VlayBzZXRzIHRpbWUgYWZ0ZXIgYWRkaW5nIHNlZ21lbnRzLFxuICAgIC8vIHNldCBhZ2FpbiB0byByZWZsZWN0IGluc3RhbnRseVxuXG4gICAgaWYgKE1hdGguYWJzKHNlZWtUaW1lKSA8PSBMSVZFX0VER0VfR0FQICYmIHNlZWtPcmlnaW4gIT09IDApIHtcbiAgICAgIHBsYXllci5sYXN0U2VlayA9IDA7XG4gICAgICBwbGF5ZXIuZ29Ub0xpdmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGxheWVyLmxhc3RTZWVrID0gc2Vla1RpbWU7XG4gICAgICBtZWRpYS5jdXJyZW50VGltZSA9IHNlZWtUaW1lICsgc2Vla09yaWdpbjtcbiAgICB9XG5cbiAgICBvbmNlKG1lZGlhLCAnc2Vla2VkJywgKCkgPT4ge1xuICAgICAgLy8gd2hlbiBzZWVraW5nIHRvIHRoZSBlbmQgaXQgbWF5IHJlc3VsdCBpbiBhIGZldyBzZWNvbmRzIGVhcmxpZXJcbiAgICAgIGlmIChNYXRoLmFicyhzZWVrVGltZSArIHNlZWtPcmlnaW4gLSBtZWRpYS5jdXJyZW50VGltZSkgPiAwLjUpIHtcbiAgICAgICAgbWVkaWEuY3VycmVudFRpbWUgPSBzZWVrVGltZSArIHNlZWtPcmlnaW47XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKHNlZWtQbHVnaW4pIHtcbiAgICBzZWVrUGx1Z2luLmhhbmRsZVNlZWsodGltZSwgc2Vla0ludGVybmFsKTtcbiAgfSBlbHNlIHtcbiAgICBzZWVrSW50ZXJuYWwodGltZSk7XG4gIH1cbn07XG5cbmNvbnN0IHRvZ2dsZU11dGUgPSBtZWRpYSA9PiB7XG4gIG1lZGlhLm11dGVkID0gIW1lZGlhLm11dGVkO1xuXG4gIGlmICghbWVkaWEubXV0ZWQpIHtcbiAgICBtZWRpYS52b2x1bWUgPSBNYXRoLm1heChtZWRpYS52b2x1bWUsIDAuMDUpO1xuICB9XG59O1xuXG5jb25zdCBzZXRWb2x1bWUgPSAobWVkaWEsIHtcbiAgcGxheWVyXG59LCBsZXZlbCkgPT4ge1xuICBjb25zdCBjYXBwZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihsZXZlbCwgMSkpO1xuICBtZWRpYS5tdXRlZCA9IGNhcHBlZCA8PSAwOyAvLyB0byBrZWVwIHZvbHVtZSBmb3IgdW5tdXRlXG5cbiAgaWYgKGNhcHBlZCA+IDApIHtcbiAgICB2YXIgX3BsYXllciRzZXRWb2x1bWU7XG5cbiAgICBwbGF5ZXIgPT09IG51bGwgfHwgcGxheWVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BsYXllciRzZXRWb2x1bWUgPSBwbGF5ZXIuc2V0Vm9sdW1lKSA9PT0gbnVsbCB8fCBfcGxheWVyJHNldFZvbHVtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllciRzZXRWb2x1bWUuY2FsbChwbGF5ZXIsIGNhcHBlZCAqIDEwMCk7XG4gICAgbWVkaWEudm9sdW1lID0gY2FwcGVkO1xuICB9XG5cbiAgaWYgKGNhcHBlZCA8PSAwKSB7XG4gICAgdmFyIF9wbGF5ZXIkbXV0ZTtcblxuICAgIHBsYXllciA9PT0gbnVsbCB8fCBwbGF5ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfcGxheWVyJG11dGUgPSBwbGF5ZXIubXV0ZSkgPT09IG51bGwgfHwgX3BsYXllciRtdXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGxheWVyJG11dGUuY2FsbChwbGF5ZXIpO1xuICB9XG59O1xuXG5jb25zdCBzeW5jUGxheWJhY2tTdGF0ZSA9IGFzeW5jIChtZWRpYSwge1xuICBwbGF5ZXIsXG4gIHBsdWdpbnMgPSBbXVxufSwgdGFyZ2V0KSA9PiB7XG4gIGlmIChtZWRpYS53ZWJraXREaXNwbGF5aW5nRnVsbHNjcmVlbiB8fCBtZWRpYS5wYXVzZWQgPT09ICh0YXJnZXQgPT09ICdwYXVzZWQnKSkge1xuICAgIHJldHVybjsgLy8gaU9TIGZ1bGxzY3JlZW4gaXMgbmF0aXZlIFVJIG9ubHksIG5vIG5lZWQgdG8gc3luY1xuICB9XG5cbiAgaWYgKHRhcmdldCA9PT0gJ3BhdXNlZCcpIHtcbiAgICByZXR1cm4gbWVkaWEucGF1c2UoKTtcbiAgfSAvLyB3YWl0IHVudGlsIHRoZSBtZWRpYSBpcyByZWFkeSBmb3IgcGxheSgpIGNhbGxzXG5cblxuICBhd2FpdCB3YWl0TWVkaWFSZWFkeShtZWRpYSk7XG5cbiAgaWYgKGlzRW5kZWQobWVkaWEpKSB7XG4gICAgc2VlayhtZWRpYSwge1xuICAgICAgcGxheWVyXG4gICAgfSwgMCk7XG4gIH1cblxuICBpZiAobWVkaWEucGF1c2VkKSB7XG4gICAgdmFyIF9wbGF5ZXIkcGxheTtcblxuICAgIGNvbnN0IG9uUmVzdW1lUGx1Z2luID0gcGx1Z2lucy5maW5kKHAgPT4ge1xuICAgICAgdmFyIF9wJGlzQWN0aXZlO1xuXG4gICAgICByZXR1cm4gcC5vblJlc3VtZSAmJiAoKF9wJGlzQWN0aXZlID0gcC5pc0FjdGl2ZSkgPT09IG51bGwgfHwgX3AkaXNBY3RpdmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wJGlzQWN0aXZlLmNhbGwocCkpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9uUmVzdW1lUGx1Z2luKSB7XG4gICAgICBvblJlc3VtZVBsdWdpbi5vblJlc3VtZSgpO1xuICAgIH0gZWxzZSBpZiAocGxheWVyLmlzTGl2ZSgpICYmIHBsYXllci5sYXN0U2VlayA+IC1MSVZFX0VER0VfR0FQKSB7XG4gICAgICBwbGF5ZXIuZ29Ub0xpdmUoKTtcbiAgICB9XG5cbiAgICAoX3BsYXllciRwbGF5ID0gcGxheWVyLnBsYXkpID09PSBudWxsIHx8IF9wbGF5ZXIkcGxheSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllciRwbGF5LmNhbGwocGxheWVyKS5jYXRjaChlcnJvciA9PiBjb25zb2xlLndhcm4oZXJyb3IpKTtcbiAgICByZXR1cm4gbWVkaWEucGxheSgpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdhdXRvcGxheSBibG9ja2VkJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9KTtcbiAgfVxufTtcblxuY29uc3Qgc2V0UGxheWJhY2tSYXRlID0gKG1lZGlhLCB7XG4gIHBsYXllclxufSwgcmF0ZSkgPT4ge1xuICB2YXIgX3BsYXllciRzZXRQbGF5YmFja1NwO1xuXG4gIGlmICghcmF0ZSkgcmV0dXJuO1xuICBwbGF5ZXIgPT09IG51bGwgfHwgcGxheWVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BsYXllciRzZXRQbGF5YmFja1NwID0gcGxheWVyLnNldFBsYXliYWNrU3BlZWQpID09PSBudWxsIHx8IF9wbGF5ZXIkc2V0UGxheWJhY2tTcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllciRzZXRQbGF5YmFja1NwLmNhbGwocGxheWVyLCByYXRlKTtcbiAgbWVkaWEucGxheWJhY2tSYXRlID0gcmF0ZTtcbn07XG5cbmNvbnN0IHNldFF1YWxpdHkgPSAoXywge1xuICBwbGF5ZXJcbn0sIHJlc3RyaWN0aW9ucykgPT4ge1xuICB2YXIgX3BsYXllciRzZXRBZGFwdGF0aW9uLCBfcGxheWVyJHNldFF1YWxpdHk7XG5cbiAgLy8gRm9yIEJpdG1vdmluXG4gIChfcGxheWVyJHNldEFkYXB0YXRpb24gPSBwbGF5ZXIuc2V0QWRhcHRhdGlvbkhhbmRsZXIpID09PSBudWxsIHx8IF9wbGF5ZXIkc2V0QWRhcHRhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllciRzZXRBZGFwdGF0aW9uLmNhbGwocGxheWVyLCAoe1xuICAgIGF2YWlsYWJsZVF1YWxpdGllcyxcbiAgICBzdWdnZXN0ZWRcbiAgfSkgPT4gc2VsZWN0UmVzdHJpY3RlZFF1YWxpdHkoYXZhaWxhYmxlUXVhbGl0aWVzLCB7XG4gICAgc3VnZ2VzdGVkLFxuICAgIHJlc3RyaWN0aW9uc1xuICB9KSk7IC8vIEZvciBTaGFrYVxuXG4gIChfcGxheWVyJHNldFF1YWxpdHkgPSBwbGF5ZXIuc2V0UXVhbGl0eSkgPT09IG51bGwgfHwgX3BsYXllciRzZXRRdWFsaXR5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGxheWVyJHNldFF1YWxpdHkuY2FsbChwbGF5ZXIsIHJlc3RyaWN0aW9ucyk7XG59O1xuXG5jb25zdCBnZXRTdWJ0aXRsZXMgPSAoXywge1xuICBwbGF5ZXJcbn0pID0+IHtcbiAgdmFyIF9wbGF5ZXIkZ2V0U3VidGl0bGVzO1xuXG4gIGlmICghcGxheWVyKSByZXR1cm4gW107IC8vIEZvciBtaXNzaW5nIHRhZyBDTE9TRUQtQ0FQVElPTlM9Tk9ORSBpbiAubTN1OFxuXG4gIGNvbnN0IGZpbHRlckhhbmRsZXIgPSB0cmFjayA9PiB0cmFjay52YWx1ZSAhPT0gJ3Vua25vd24nICYmIHRyYWNrLmxhYmVsO1xuXG4gIHJldHVybiAocGxheWVyID09PSBudWxsIHx8IHBsYXllciA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9wbGF5ZXIkZ2V0U3VidGl0bGVzID0gcGxheWVyLmdldFN1YnRpdGxlcygpKSA9PT0gbnVsbCB8fCBfcGxheWVyJGdldFN1YnRpdGxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllciRnZXRTdWJ0aXRsZXMuZmlsdGVyKGZpbHRlckhhbmRsZXIpKSB8fCBbXTtcbn07XG5cbmNvbnN0IHN1YnNjcmliZVN1YnRpdGxlcyA9IChfLCB7XG4gIHBsYXllclxufSwgdXBkYXRlU3VidGl0bGVzKSA9PiB7XG4gIHZhciBfcGxheWVyJG9uLCBfcGxheWVyJG9uMjtcblxuICBjb25zdCBoYW5kbGVFbnRlciA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB0ZXh0LFxuICAgICAgc3RhcnQsXG4gICAgICBlbmQsXG4gICAgICBzdWJ0aXRsZUlkOiBpZFxuICAgIH0gPSBldmVudDtcbiAgICB1cGRhdGVTdWJ0aXRsZXMoe1xuICAgICAgaWQsXG4gICAgICB0ZXh0LFxuICAgICAgc3RhcnQsXG4gICAgICBlbmRcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVFeGl0ID0gKCkgPT4gdXBkYXRlU3VidGl0bGVzKHtcbiAgICB0ZXh0OiAnJ1xuICB9KTtcblxuICAoX3BsYXllciRvbiA9IHBsYXllci5vbikgPT09IG51bGwgfHwgX3BsYXllciRvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllciRvbi5jYWxsKHBsYXllciwgJ2N1ZWVudGVyJywgaGFuZGxlRW50ZXIpO1xuICAoX3BsYXllciRvbjIgPSBwbGF5ZXIub24pID09PSBudWxsIHx8IF9wbGF5ZXIkb24yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGxheWVyJG9uMi5jYWxsKHBsYXllciwgJ2N1ZWV4aXQnLCBoYW5kbGVFeGl0KTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICB2YXIgX3BsYXllciRvZmYsIF9wbGF5ZXIkb2ZmMjtcblxuICAgIHVwZGF0ZVN1YnRpdGxlcyh7XG4gICAgICB0ZXh0OiAnJ1xuICAgIH0pO1xuICAgIChfcGxheWVyJG9mZiA9IHBsYXllci5vZmYpID09PSBudWxsIHx8IF9wbGF5ZXIkb2ZmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGxheWVyJG9mZi5jYWxsKHBsYXllciwgJ2N1ZWVudGVyJywgaGFuZGxlRW50ZXIpO1xuICAgIChfcGxheWVyJG9mZjIgPSBwbGF5ZXIub2ZmKSA9PT0gbnVsbCB8fCBfcGxheWVyJG9mZjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wbGF5ZXIkb2ZmMi5jYWxsKHBsYXllciwgJ2N1ZWVleGl0JywgaGFuZGxlRXhpdCk7XG4gIH07XG59O1xuXG5jb25zdCBnZXRBdWRpbyA9IChfLCB7XG4gIHBsYXllclxufSkgPT4ge1xuICB2YXIgX3BsYXllciRnZXRBdWRpbztcblxuICByZXR1cm4gcGxheWVyID09PSBudWxsIHx8IHBsYXllciA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9wbGF5ZXIkZ2V0QXVkaW8gPSBwbGF5ZXIuZ2V0QXVkaW8oKSkgPT09IG51bGwgfHwgX3BsYXllciRnZXRBdWRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllciRnZXRBdWRpby5sYW5nO1xufTtcblxuY29uc3QgZ2V0QXVkaW9MaXN0ID0gKF8sIHtcbiAgcGxheWVyXG59KSA9PiB7XG4gIGlmICghcGxheWVyKSByZXR1cm4gW107XG4gIHJldHVybiBwbGF5ZXIuZ2V0QXVkaW9MaXN0KCk7XG59O1xuXG5jb25zdCBibHVyUGF1c2UgPSAobWVkaWEsIHBhdXNlKSA9PiB7XG4gIGNvbnN0IGhhbmRsZVZpc2liaWxpdHljaGFuZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHNob3VsZFBhdXNlID0gdHJ1ZTtcbiAgICBwYXVzZSgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2hvdWxkUGF1c2UgPSBmYWxzZTtcbiAgICB9LCA1MCk7XG4gICAgbWVkaWEuYWRkRXZlbnRMaXN0ZW5lcigncGxheScsICgpID0+IHtcbiAgICAgIGlmIChzaG91bGRQYXVzZSkge1xuICAgICAgICBwYXVzZSgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIG9uY2U6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgaGFuZGxlVmlzaWJpbGl0eWNoYW5nZSk7XG4gIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgaGFuZGxlVmlzaWJpbGl0eWNoYW5nZSk7XG59O1xuXG52YXIgaWNvbiA9IHtcbiAgcGF1c2U6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlORGdpSUdobGFXZG9kRDBpTkRnaUlIWnBaWGRDYjNnOUlqQWdNQ0EwT0NBME9DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2dabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJqYkdsd0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdROUlrMHhNU0EyUXprdU9EazFORE1nTmlBNUlEWXVPRGsxTkRNZ09TQTRWalF3UXprZ05ERXVNVEEwTmlBNUxqZzVOVFF6SURReUlERXhJRFF5U0RFM1F6RTRMakV3TkRZZ05ESWdNVGtnTkRFdU1UQTBOaUF4T1NBME1GWTRRekU1SURZdU9EazFORE1nTVRndU1UQTBOaUEySURFM0lEWklNVEZhVFRNeElEWkRNamt1T0RrMU5DQTJJREk1SURZdU9EazFORE1nTWprZ09GWTBNRU15T1NBME1TNHhNRFEySURJNUxqZzVOVFFnTkRJZ016RWdOREpJTXpkRE16Z3VNVEEwTmlBME1pQXpPU0EwTVM0eE1EUTJJRE01SURRd1ZqaERNemtnTmk0NE9UVTBNeUF6T0M0eE1EUTJJRFlnTXpjZ05rZ3pNVm9pSUdacGJHdzlJbmRvYVhSbElpOCtDand2YzNablBnbz0nLFxuICBwbGF5OiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTkRnaUlHaGxhV2RvZEQwaU5EZ2lJSFpwWlhkQ2IzZzlJakFnTUNBME9DQTBPQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB4TUNBNExqVXhNelEzUXpFd0lEWXVPVFl6SURFeExqWTROemtnTmk0d01ESXhPU0F4TXk0d01qRXhJRFl1Tnprek56Wk1Nemt1TVRBek5pQXlNaTR5T0RBelF6UXdMalF3T0RrZ01qTXVNRFUxTXlBME1DNDBNRGc1SURJMExqazBORGNnTXprdU1UQXpOaUF5TlM0M01UazNUREV6TGpBeU1URWdOREV1TWpBMk1rTXhNUzQyT0RjNUlEUXhMams1TnpnZ01UQWdOREV1TURNM0lERXdJRE01TGpRNE5qVldPQzQxTVRNME4xb2lJR1pwYkd3OUluZG9hWFJsSWk4K0Nqd3ZjM1puUGdvPScsXG4gIHJlcGxheTogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJNE1DSWdhR1ZwWjJoMFBTSTRNQ0krUEdSbFpuTStQR1pwYkhSbGNpQnBaRDBpWVNJZ2FHVnBaMmgwUFNJeE5UQWxJajQ4Wm1WSFlYVnpjMmxoYmtKc2RYSWdhVzQ5SWxOdmRYSmpaVUZzY0doaElpQnpkR1JFWlhacFlYUnBiMjQ5SWpNaUx6NDhabVZQWm1aelpYUWdaSGc5SWpJaUlHUjVQU0l5SWlCeVpYTjFiSFE5SW05bVpuTmxkR0pzZFhJaUx6NDhabVZEYjIxd2IyNWxiblJVY21GdWMyWmxjajQ4Wm1WR2RXNWpRU0IwZVhCbFBTSnNhVzVsWVhJaUlITnNiM0JsUFNJdU55SXZQand2Wm1WRGIyMXdiMjVsYm5SVWNtRnVjMlpsY2o0OFptVk5aWEpuWlQ0OFptVk5aWEpuWlU1dlpHVXZQanhtWlUxbGNtZGxUbTlrWlNCcGJqMGlVMjkxY21ObFIzSmhjR2hwWXlJdlBqd3ZabVZOWlhKblpUNDhMMlpwYkhSbGNqNDhMMlJsWm5NK1BHY2dabWxzYkQwaUkwWkdSaUlnWm1sc2JDMXlkV3hsUFNKdWIyNTZaWEp2SWlCbWFXeDBaWEk5SW5WeWJDZ2pZU2tpUGp4d1lYUm9JR1E5SWswME1DNDFJRGwyT0M0NVlUSTFMallnTWpVdU5pQXdJREVnTVMweU5TNDJJREkwTGpWSU5uWXhMakZCTXpRdU5TQXpOQzQxSURBZ01TQXdJRFF3TGpVZ09Yb2lMejQ4Y0dGMGFDQmtQU0pOTkRBZ01IWXlOMHd5TUNBeE15NDFlaUl2UGp3dlp6NDhMM04yWno0PScsXG4gIGJhY2s6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MG5hSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY25JSGRwWkhSb1BTY3pOaWNnYUdWcFoyaDBQU2N6TmljZ2RtbGxkMEp2ZUQwbk1DQXdJRE0ySURNMkp6NDhaeUJtYVd4c1BTZHViMjVsSnlCbWFXeHNMWEoxYkdVOUoyVjJaVzV2WkdRblBqeHdZWFJvSUdROUowMHdJREJvTXpaMk16WklNSG9uSUc5d1lXTnBkSGs5Snk0MUp5OCtQSEJoZEdnZ2MzUnliMnRsUFNjalJrWkdKeUJ6ZEhKdmEyVXRkMmxrZEdnOUp6UW5JR1E5SjAweU1DQXlURFFnTVRoc01UWWdNVFpOTlNBeE9HZ3pNQzR3TURjbkx6NDhMMmMrUEM5emRtYytDZz09JyxcbiAgZm9yd2FyZDEwOiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTkRnaUlHaGxhV2RvZEQwaU5EZ2lJSFpwWlhkQ2IzZzlJakFnTUNBME9DQTBPQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWkQwaVRUUXlMakV4T0RZZ01qUXVNelUxTWtNME1DNDRNRGd5SURJMExqTTFOVElnTXprdU56TTJNaUF5TlM0ME1qY3pJRE01TGpjek5qSWdNall1TnpNM05rTXpPUzQzTXpZeUlETTFMakkzT0RVZ016SXVOemt4TkNBME1pNHlNak16SURJMExqSTFNRFVnTkRJdU1qSXpNME14TlM0M01EazFJRFF5TGpJeU16TWdPQzQzTmpRNE1pQXpOUzR5TnpnMUlEZ3VOelkwT0RJZ01qWXVOek0zTmtNNExqYzJORGd5SURFNExqRTVOamNnTVRVdU1EYzRNaUF4TVM0NU1Ua2dNak11TURVNU15QXhNUzR6TVRFMVZqRTBMak0yTVVNeU15NHdOVGt6SURFMUxqZ3hORE1nTWpRdU5qa3hNaUF4Tmk0Mk5pQXlOUzQ0TnpBMUlERTFMamd5TmpKTU16UXVNRGc1T0NBeE1DNHdNelk1UXpNMUxqRXdNalFnT1M0ek1qSXhPU0F6TlM0eE1ESTBJRGN1T0RNek1UZ2dNelF1TURnNU9DQTNMakV4T0RRMlRESTFMamczTURVZ01TNHpNamt5UXpJMExqWTVNVElnTUM0ME9UVXpOVGNnTWpNdU1EVTVNeUF4TGpNME1URXhJREl6TGpBMU9UTWdNaTQzT1RRek9GWTJMalUxT0RVNVF6RXlMalEwTlRZZ055NHhOemd3TWlBMElERTFMams0TVNBMElESTJMamMwT1RWRE5DQXpOeTQxTVRnZ01UTXVNRGc0T1NBME55QXlOQzR5TlRBMUlEUTNRek0xTGpReE1qRWdORGNnTkRRdU5UQXhJRE0zTGpreE1URWdORFF1TlRBeElESTJMamMwT1RWRE5EUXVOVEF4SURJMUxqUXpPVElnTkRNdU5ESTRPU0F5TkM0ek5qY3hJRFF5TGpFeE9EWWdNalF1TXpZM01WWXlOQzR6TlRVeVdpSWdabWxzYkQwaWQyaHBkR1VpTHo0S1BIQmhkR2dnWkQwaVRURTRMalE1TmprZ016UXVNVGswTlVneE9DNDVORGsyUXpFNUxqWXdORGNnTXpRdU1UazBOU0F5TUM0eE5EQTRJRE16TGpZMU9EVWdNakF1TVRRd09DQXpNeTR3TURNelZqSXdMamsyTURKRE1qQXVNVFF3T0NBeU1DNHpNRFV4SURFNUxqWXdORGNnTVRrdU56WTVJREU0TGprME9UWWdNVGt1TnpZNVNERTRMalUxTmpWRE1UZ3VNekEyTXlBeE9TNDNOamtnTVRndU1EVTJNaUF4T1M0NE5USTBJREUzTGpnMU16Y2dNVGt1T1RrMU5Fd3hOQzQwT0RJMUlESXlMalEwT1RORE1UUXVNakl3TlNBeU1pNDJNems0SURFMExqQTFNemNnTWpJdU9USTFOeUF4TkM0d01EWXhJREl6TGpJek5UUkRNVE11T1RVNE5DQXlNeTQxTlRjeElERTBMakEwTVRnZ01qTXVPRGM0TnlBeE5DNHlNekkwSURJMExqRXlPRGxNTVRRdU5UQTJOQ0F5TkM0ME9EWXlRekUwTGpnNU9UVWdNalV1TURFd015QXhOUzQyTXpnZ01qVXVNVEUzTmlBeE5pNHhOakl4SURJMExqY3lORFZNTVRjdU16QTFOeUF5TXk0NE56ZzNWak15TGprNU1UUkRNVGN1TXpBMU55QXpNeTQyTkRZMklERTNMamcwTVRjZ016UXVNVGd5TmlBeE9DNDBPVFk1SURNMExqRTRNalpXTXpRdU1UazBOVm9pSUdacGJHdzlJbmRvYVhSbElpOCtDanh3WVhSb0lHUTlJazB5T0M0ME5ETTFJREU1TGpZNE5UZERNamN1TVRZNUlERTVMalk0TlRjZ01qWXVNVEl3TnlBeU1DNHdOalk1SURJMUxqTXpORFVnTWpBdU9EQTFORU15TkM0Mk1EYzVJREl4TGpRNE5EUWdNalF1TURnek55QXlNaTQwTVRNMUlESXpMamM0TlRrZ01qTXVOVFExTWtNeU15NDFNak01SURJMExqVTFOemNnTWpNdU16Z3dPU0F5TlM0M01qVXhJREl6TGpNNE1Ea2dNamN1TURFeE5rTXlNeTR6T0RBNUlESTVMak01TkNBeU15NDNOelFnTXpFdU1UTXpNU0F5TkM0MU56SXhJRE15TGpNMk1ERkRNalV1TkRVek5pQXpNeTQyT1RReUlESTJMamM0TnpnZ016UXVOREE1SURJNExqUXpNVFlnTXpRdU5EQTVRek13TGpBM05UVWdNelF1TkRBNUlETXhMalE1TXlBek15NDJPREl6SURNeUxqTXpPRGdnTXpJdU1qZzROa016TXk0d09Ea3lJRE14TGpBMk1UY2dNek11TkRVNE5TQXlPUzR6TXpRMElETXpMalExT0RVZ01qY3VNREV4TmtNek15NDBOVGcxSURJMUxqY3dNVE1nTXpNdU16TTVOQ0F5TkM0MU16TTVJRE16TGpFd01USWdNak11TlRNek0wTXpNaTQ0TWpjeUlESXlMak00T1RjZ016SXVNekkyT1NBeU1TNDBOekkxSURNeExqWXdNRElnTWpBdU56a3pOVU16TUM0NE1qWWdNakF1TURZMk9TQXlPUzQzTmpVNElERTVMalk1TnpZZ01qZ3VORFUxTlNBeE9TNDJPVGMyVERJNExqUTBNelVnTVRrdU5qZzFOMXBOTWprdU9UVTJOQ0F6TUM0M05qTTVRekk1TGpjeklETXhMakUxTnlBeU9TNHpOekkzSURNeExqVTNNemtnTWpndU5ERTVOeUF6TVM0MU56TTVRekkzTGpjeE5qa2dNekV1TlRjek9TQXlOeTR5TmpReUlETXhMak15TXpjZ01qWXVPVEEyT1NBek1DNDNOREF4UXpJMkxqVTVOeklnTXpBdU1qSTNPQ0F5Tmk0eU1qYzVJREk1TGpFMk56Y2dNall1TWpJM09TQXlOeTR3TVRFMlF6STJMakl5TnprZ01qWXVNREV4SURJMkxqTXlNeklnTWpVdU1URTNOaUF5Tmk0MU1ERTVJREkwTGpNMU5USkRNall1TmpVMk55QXlNeTQzTWpNNUlESTJMamt3TmprZ01qTXVNak0xTlNBeU55NHlOREEwSURJeUxqa3hNemhETWpjdU5UQXlOU0F5TWk0Mk5URTRJREkzTGpnNU5UWWdNakl1TlRJd055QXlPQzQwTkRNMUlESXlMalV5TURkRE1qZ3VPVGt4TlNBeU1pNDFNakEzSURJNUxqUXdPRFFnTWpJdU5qTTVPU0F5T1M0Mk56QTFJREl5TGpnNVF6STVMams0TURJZ01qTXVNVGs1TnlBek1DNHlNVGcwSURJekxqWTJORE1nTXpBdU16UTVOU0F5TkM0eU9ETTNRek13TGpVeE5qSWdNalV1TURRMk1TQXpNQzQyTVRFMUlESTFMamsyTXpNZ016QXVOakV4TlNBeU55NHdNVEUyUXpNd0xqWXhNVFVnTWprdU1UWTNOeUF6TUM0eU5qWXhJRE13TGpJek9UY2dNamt1T1RZNE15QXpNQzQzTmpNNVNESTVMamsxTmpSYUlpQm1hV3hzUFNKM2FHbDBaU0l2UGdvOEwzTjJaejRLJyxcbiAgcmV3aW5kMTA6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlORGdpSUdobGFXZG9kRDBpTkRnaUlIWnBaWGRDYjNnOUlqQWdNQ0EwT0NBME9DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2daRDBpVFRJMUxqUTBOeklnTmk0MU5qQXdNMVl5TGpjNU5EZzFRekkxTGpRME56SWdNUzR6TkRFeUlESXpMamd4TkRrZ01DNDBPVFV5TWpZZ01qSXVOak0xTXlBeExqTXlPVEk1VERFMExqUXhNemdnTnk0eE1qQXdORU14TXk0ME1ERWdOeTQ0TXpRNU5TQXhNeTQwTURFZ09TNHpNalF6TkNBeE5DNDBNVE00SURFd0xqQXpPVE5NTWpJdU5qTTFNeUF4TlM0NE0wTXlNeTQ0TVRRNUlERTJMalkyTkRFZ01qVXVORFEzTWlBeE5TNDRNVGd4SURJMUxqUTBOeklnTVRRdU16WTBORll4TVM0ek1UUXlRek16TGpRek1EUWdNVEV1T1RJeE9DQXpPUzQzTkRVMElERTRMall3TmpJZ016a3VOelExTkNBeU5pNDNORFF6UXpNNUxqYzBOVFFnTXpVdU1qZzNOQ0F6TWk0M09UZzVJRFF5TGpJek16a2dNalF1TWpVMU55QTBNaTR5TXpNNVF6RTFMamN4TWpZZ05ESXVNak16T1NBNExqYzJOakExSURNMUxqSTROelFnT0M0M05qWXdOU0F5Tmk0M05EUXpRemd1TnpZMk1EVWdNalV1TkRNek5pQTNMalk1TXpZNUlESTBMak0yTVRJZ05pNHpPRE13TXlBeU5DNHpOakV5UXpVdU1EY3lNellnTWpRdU16WXhNaUEwSURJMUxqUXpNellnTkNBeU5pNDNORFF6UXpRZ016Y3VPVEE0T0NBeE15NHdPVEV5SURRM0lESTBMakkxTlRjZ05EZERNelV1TkRJd01pQTBOeUEwTkM0MU1URTFJRE0zTGprd09EZ2dORFF1TlRFeE5TQXlOaTQzTkRRelF6UTBMalV4TVRVZ01UVXVOVGM1T0NBek5pNHdOak0ySURjdU1UWTNOeUF5TlM0ME5EY3lJRFl1TlRRNE1USldOaTQxTmpBd00xb2lJR1pwYkd3OUluZG9hWFJsSWk4K0NqeHdZWFJvSUdROUlrMHhPQzQxTURBM0lETTBMakl4TlVneE9DNDVOVE0xUXpFNUxqWXdPRGdnTXpRdU1qRTFJREl3TGpFME5TQXpNeTQyTnpnNElESXdMakUwTlNBek15NHdNak0xVmpJd0xqazNOek5ETWpBdU1UUTFJREl3TGpNeU1Ua2dNVGt1TmpBNE9DQXhPUzQzT0RVNElERTRMamsxTXpVZ01Ua3VOemcxT0VneE9DNDFOakF6UXpFNExqTXhNREVnTVRrdU56ZzFPQ0F4T0M0d05UazRJREU1TGpnMk9USWdNVGN1T0RVM015QXlNQzR3TVRJeVRERTBMalE0TlRNZ01qSXVORFkyTjBNeE5DNHlNak15SURJeUxqWTFOek1nTVRRdU1EVTJOQ0F5TWk0NU5ETXpJREUwTGpBd09EY2dNak11TWpVek1VTXhNeTQ1TmpFZ01qTXVOVGMwT0NBeE5DNHdORFEwSURJekxqZzVOalVnTVRRdU1qTTFNU0F5TkM0eE5EWTNUREUwTGpVd09URWdNalF1TlRBME1rTXhOQzQ1TURJeklESTFMakF5T0RRZ01UVXVOalF4TVNBeU5TNHhNelUzSURFMkxqRTJOVE1nTWpRdU56UXlOVXd4Tnk0ek1Ea3lJREl6TGpnNU5qVldNek11TURFeE5rTXhOeTR6TURreUlETXpMalkyTmprZ01UY3VPRFExTkNBek5DNHlNRE14SURFNExqVXdNRGNnTXpRdU1qQXpNVll6TkM0eU1UVmFJaUJtYVd4c1BTSjNhR2wwWlNJdlBnbzhjR0YwYUNCa1BTSk5Namd1TkRNNElETTBMalF5T1RWRE16QXVNVFV6T0NBek5DNDBNamsxSURNeExqVXdNRElnTXpNdU56QXlOeUF6TWk0ek5EWXlJRE15TGpNd09EZERNek11TURrMk9DQXpNUzR3T0RFMElETXpMalEyTmpJZ01qa3VNelV6TnlBek15NDBOall5SURJM0xqQXpNREpETXpNdU5EWTJNaUF5TlM0M01UazJJRE16TGpNME55QXlOQzQxTlRFNUlETXpMakV3T0RjZ01qTXVOVFV4UXpNeUxqZ3pORGNnTWpJdU5EQTNNaUF6TWk0ek16UXlJREl4TGpRNE9UY2dNekV1TmpBM05DQXlNQzQ0TVRBMVF6TXdMamd6TWprZ01qQXVNRGd6TnlBeU9TNDNOekkxSURFNUxqY3hORFFnTWpndU5EWXhPQ0F4T1M0M01UUTBRekkzTGpFMU1USWdNVGt1TnpFME5DQXlOaTR4TXpnMElESXdMakE1TlRZZ01qVXVNelV5SURJd0xqZ3pORFJETWpRdU5qSTFNU0F5TVM0MU1UTTFJREkwTGpFd01Ea2dNakl1TkRReU9TQXlNeTQ0TURNZ01qTXVOVGMwT1VNeU15NDFOREE1SURJMExqVTROellnTWpNdU16azNPU0F5TlM0M05UVXpJREl6TGpNNU56a2dNamN1TURReU1rTXlNeTR6T1RjNUlESTVMalF5TlRJZ01qTXVOemt4TVNBek1TNHhOalE0SURJMExqVTRPVFFnTXpJdU16a3lNVU15TlM0ME56RXhJRE16TGpjeU5qWWdNall1T0RBMU5pQXpOQzQwTkRFMUlESTRMalEwT1RrZ016UXVORFF4TlV3eU9DNDBNemdnTXpRdU5ESTVOVnBOTWpZdU5URTVOeUF5TkM0ek9EVXhRekkyTGpZM05EVWdNak11TnpVek5pQXlOaTQ1TWpRNElESXpMakkyTlRFZ01qY3VNalU0TkNBeU1pNDVORE0wUXpJM0xqVXlNRFVnTWpJdU5qZ3hNaUF5Tnk0NU1UTTNJREl5TGpVMU1ESWdNamd1TkRZeE9DQXlNaTQxTlRBeVF6STVMakF3T1RrZ01qSXVOVFV3TWlBeU9TNDBNalk1SURJeUxqWTJPVE1nTWprdU5qZzVNU0F5TWk0NU1UazFRekk1TGprNU9Ea2dNak11TWpJNU15QXpNQzR5TXpjeUlESXpMalk1TkNBek1DNHpOamd5SURJMExqTXhNelpETXpBdU5UTTFNU0F5TlM0d056WXlJRE13TGpZek1EUWdNalV1T1Rrek5pQXpNQzQyTXpBMElESTNMakEwTWpKRE16QXVOak13TkNBeU9TNHhPVGc0SURNd0xqSTRORGdnTXpBdU1qY3hNaUF5T1M0NU9EY2dNekF1TnprMU5FTXlPUzQzTmpBMklETXhMakU0T0RZZ01qa3VOREF6TVNBek1TNDJNRFUzSURJNExqUTBPVGtnTXpFdU5qQTFOME15Tnk0M05EWTVJRE14TGpZd05UY2dNamN1TWprME1TQXpNUzR6TlRVMElESTJMamt6TmpjZ016QXVOemN4TmtNeU5pNDJNalk1SURNd0xqSTFPVElnTWpZdU1qVTNOU0F5T1M0eE9UZzRJREkyTGpJMU56VWdNamN1TURReU1rTXlOaTR5TlRjMUlESTJMakEwTVRNZ01qWXVNelV5T0NBeU5TNHhORGMzSURJMkxqVXpNVFlnTWpRdU16ZzFNVWd5Tmk0MU1UazNXaUlnWm1sc2JEMGlkMmhwZEdVaUx6NEtQQzl6ZG1jK0NnPT0nLFxuICB2b2x1bWVIaWdoOiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBuYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNuSUhkcFpIUm9QU2N6TmljZ2FHVnBaMmgwUFNjek5pY2dkbWxsZDBKdmVEMG5NQ0F3SURNMklETTJKejRnUEdjZ1ptbHNiRDBuYm05dVpTY2dabWxzYkMxeWRXeGxQU2RsZG1WdWIyUmtKejRnUEhCaGRHZ2daRDBuVFRBZ01HZ3pObll6Tmtnd2VpY2diM0JoWTJsMGVUMG5MalVuTHo0Z1BIQmhkR2dnWm1sc2JEMG5JMFpHUmljZ1pEMG5UVEl4TGpnd09DQXhZVEUyTGpJMk5TQXhOaTR5TmpVZ01DQXdJREVnTmk0M056Y2dNeTR5TVRrZ01UWXVPVEVnTVRZdU9URWdNQ0F3SURFZ05DNDJPVElnTlM0NE1ESkJNVFl1T1RZZ01UWXVPVFlnTUNBd0lERWdNelVnTVRjdU5UUTNZekFnTWk0Mk5pMHVOVGMwSURVdU1UWTRMVEV1TnpJeklEY3VOVEkxWVRFMkxqa3hJREUyTGpreElEQWdNQ0F4TFRRdU5qa3lJRFV1T0RBeklERTJMakkyTlNBeE5pNHlOalVnTUNBd0lERXROaTQzTnpjZ015NHlNVGgyTFRNdU9EazRZVEV5TGpRMU5pQXhNaTQwTlRZZ01DQXdJREFnTkM0NE5TMHlMall6SURFekxqRTJPQ0F4TXk0eE5qZ2dNQ0F3SURBZ015NHpNek10TkM0ME5qVWdNVE11TVRBNUlERXpMakV3T1NBd0lEQWdNQ0F4TGpJd01TMDFMalUxTTJNd0xURXVPVFkxTFM0MExUTXVPREUyTFRFdU1qQXhMVFV1TlRVMFlURXpMakUyT0NBeE15NHhOamdnTUNBd0lEQXRNeTR6TXpJdE5DNDBOalVnTVRJdU5EVTJJREV5TGpRMU5pQXdJREFnTUMwMExqZzFNUzB5TGpZelZqRjZKeTgrSUR4d1lYUm9JR1pwYkd3OUp5TkdSa1luSUdROUowMHlOaTQxTWpNZ01UY3VOVFEzWXpBZ01TNDJOakl0TGpReU15QXpMakUyTlMweExqSTNJRFF1TlRGaE9DNDBOVE1nT0M0ME5UTWdNQ0F3SURFdE15NDBORFVnTXk0eE1EWldPUzQ1TTJNeExqUTFMamN5TlNBeUxqWWdNUzQzTmlBekxqUTBOU0F6TGpFd05TNDRORGNnTVM0ek5EVWdNUzR5TnlBeUxqZzBPQ0F4TGpJM0lEUXVOVEY2VFRFZ01URXVPRGhvTnk0MU1qVk1NVGdnTWk0ME1EVjJNekF1TWpnemJDMDVMalEzTlMwNUxqUTNOVWd4ZWljdlBpQThMMmMrSUR3dmMzWm5QZz09JyxcbiAgdm9sdW1lTG93OiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBuYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNuSUhkcFpIUm9QU2N6TmljZ2FHVnBaMmgwUFNjek5pY2dkbWxsZDBKdmVEMG5NQ0F3SURNMklETTJKejRnUEdjZ1ptbHNiRDBuYm05dVpTY2dabWxzYkMxeWRXeGxQU2RsZG1WdWIyUmtKejRnUEhCaGRHZ2daRDBuVFRBZ01HZ3pObll6Tmtnd2VpY2diM0JoWTJsMGVUMG5MalVuTHo0Z1BIQmhkR2dnWm1sc2JEMG5JMFpHUmljZ1pEMG5UVEkyTGpVeU15QXhOeTQxTkRkak1DQXhMalkyTWkwdU5ESXpJRE11TVRZMUxURXVNamNnTkM0MU1XRTRMalExTXlBNExqUTFNeUF3SURBZ01TMHpMalEwTlNBekxqRXdObFk1TGprell6RXVORFV1TnpJMUlESXVOaUF4TGpjMklETXVORFExSURNdU1UQTFMamcwTnlBeExqTTBOU0F4TGpJM0lESXVPRFE0SURFdU1qY2dOQzQxTVhwTk1TQXhNUzQ0T0dnM0xqVXlOVXd4T0NBeUxqUXdOWFl6TUM0eU9ETnNMVGt1TkRjMUxUa3VORGMxU0RGNkp5OCtJRHd2Wno0Z1BDOXpkbWMrJyxcbiAgbXV0ZTogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owbmFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jbklIZHBaSFJvUFNjek5pY2dhR1ZwWjJoMFBTY3pOaWNnZG1sbGQwSnZlRDBuTUNBd0lETTJJRE0ySno0Z1BHY2dabWxzYkQwbmJtOXVaU2NnWm1sc2JDMXlkV3hsUFNkbGRtVnViMlJrSno0Z1BIQmhkR2dnWkQwblRUQWdNR2d6Tm5Zek5rZ3dlaWNnYjNCaFkybDBlVDBuTGpVbkx6NGdQSEJoZEdnZ1ptbHNiRDBuSTBaR1JpY2daRDBuVFRFZ01URXVPRGhvTnk0MU1qVk1NVGdnTWk0ME1EVjJNekF1TWpnemJDMDVMalEzTlMwNUxqUTNOVWd4ZWljdlBpQThaeUJtYVd4c0xYSjFiR1U5SjI1dmJucGxjbThuUGlBOGNHRjBhQ0JrUFNkTk1qQWdNVEZvTVRSMk1UUklNakI2Snk4K0lEeHdZWFJvSUdacGJHdzlKeU5HUmtZbklHUTlKMDB6TVM0NU5DQXhNQzQ1Tkd3eUxqRXlJREl1TVRJdE1USWdNVEl0TWk0eE1pMHlMakV5ZWljdlBpQThjR0YwYUNCbWFXeHNQU2NqUmtaR0p5QmtQU2ROTVRrdU9UUWdNVE11TURac01pNHhNaTB5TGpFeUlERXlJREV5TFRJdU1USWdNaTR4TW5vbkx6NGdQQzluUGlBOEwyYytJRHd2YzNablBnPT0nLFxuICBzZXR0aW5nOiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBuYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNuSUhkcFpIUm9QU2N6TmljZ2FHVnBaMmgwUFNjek5pY2dkbWxsZDBKdmVEMG5NQ0F3SURNMklETTJKejRnUEdjZ1ptbHNiRDBuYm05dVpTY2dabWxzYkMxeWRXeGxQU2RsZG1WdWIyUmtKejRnUEhCaGRHZ2daRDBuVFRBZ01HZ3pObll6Tmtnd2VpY2diM0JoWTJsMGVUMG5MamduTHo0Z1BIQmhkR2dnWm1sc2JEMG5JMFpHUmljZ1ptbHNiQzF5ZFd4bFBTZHViMjU2WlhKdkp5QmtQU2ROTWpNdU16QTRJRE14TGpRM00yd3RMakkyTXlBeUxqSTNRVEV1TkRNMElERXVORE0wSURBZ01DQXhJREl4TGpZeE1TQXpOV2d0Tnk0eU1qSmpMUzQzTXpRZ01DMHhMak0xTVMwdU5UUXRNUzQwTXpRdE1TNHlOVGRzTFM0eU5qTXRNaTR5TjJFeE5TNHhNelFnTVRVdU1UTTBJREFnTUNBeExUUXVNREEzTFRJdU1UbHNMVEl1TURVMExqZzNOMkV4TGpRMU55QXhMalExTnlBd0lEQWdNUzB4TGpneU5pMHVOVGxzTFRNdU5qRXhMVFl1TVRSaE1TNDBJREV1TkNBd0lEQWdNU0F1TXpreExURXVPRFEzYkRFdU5qTTNMVEV1TVRnM1lURXpMamswTWlBeE15NDVORElnTUNBd0lERWdNQzAwTGpjNU1td3RNUzQyTXpjdE1TNHhPRGRoTVM0MElERXVOQ0F3SURBZ01TMHVNemt4TFRFdU9EUTRiRE11TmpFdE5pNHhNemhoTVM0ME5UY2dNUzQwTlRjZ01DQXdJREVnTVM0NE1qY3RMalU1YkRJdU1EVTBMamczTm1FeE5TNHhNelFnTVRVdU1UTTBJREFnTUNBeElEUXVNREEzTFRJdU1UbHNMakkyTXkweUxqSTNZeTR3T0RNdExqY3hOaTQzTFRFdU1qVTNJREV1TkRNMExURXVNalUzYURjdU1qSXlZeTQzTXpRZ01DQXhMak0xTVM0MU5DQXhMalF6TkNBeExqSTFOMnd1TWpZeklESXVNamRoTVRVdU1UTTBJREUxTGpFek5DQXdJREFnTVNBMExqQXdOeUF5TGpFNWJESXVNRFUwTFM0NE56ZGhNUzQwTlRjZ01TNDBOVGNnTUNBd0lERWdNUzQ0TWpZdU5UbHNNeTQyTVRFZ05pNHhOR0V4TGpRZ01TNDBJREFnTUNBeExTNHpPVEVnTVM0NE5EZHNMVEV1TmpNM0lERXVNVGczWVRFekxqazBNeUF4TXk0NU5ETWdNQ0F3SURFZ01DQTBMamM1TW13eExqWXpOeUF4TGpFNE4yRXhMalFnTVM0MElEQWdNQ0F4SUM0ek9URWdNUzQ0TkRoc0xUTXVOakVnTmk0eE16aGhNUzQwTlRjZ01TNDBOVGNnTUNBd0lERXRNUzQ0TWpjdU5UbHNMVEl1TURVMExTNDROelpoTVRVdU1UTTBJREUxTGpFek5DQXdJREFnTVMwMExqQXdOeUF5TGpFNWVrMHhPQ0F5Tm1FNElEZ2dNQ0F4SURBZ01DMHhOaUE0SURnZ01DQXdJREFnTUNBeE5ub25MejRnUEM5blBpQThMM04yWno0PScsXG4gIGNoZWNrOiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBuYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNuSUhkcFpIUm9QU2N5TUNjZ2FHVnBaMmgwUFNjeU1DY2dkbWxsZDBKdmVEMG5NQ0F3SURJd0lESXdKejQ4Y0dGMGFDQm1hV3hzUFNjalJrWkdKeUJtYVd4c0xYSjFiR1U5SjI1dmJucGxjbThuSUdROUowMHlMamt3TWlBNUxqSTJNV0V4TGpBNE55QXhMakE0TnlBd0lEQWdNQzB4TGpVM05pQXdJREV1TVRneklERXVNVGd6SURBZ01DQXdJREFnTVM0Mk16SnNOUzQxTnpFZ05TNDNOamxqTGpRek5TNDBOU0F4TGpFMExqUTFJREV1TlRjMklEQnNNVEV1TWkweE1TNDJPVEpoTVM0eE9ETWdNUzR4T0RNZ01DQXdJREFnTUMweExqWXpNaUF4TGpBNE55QXhMakE0TnlBd0lEQWdNQzB4TGpVM05TQXdURGN1TmpnMUlERTBMakl4TkNBeUxqa3dNaUE1TGpJMk1Yb25MejQ4TDNOMlp6NEsnLFxuICBlbnRlckZ1bGxTY3JlZW46ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MG5hSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY25JSGRwWkhSb1BTY3pOaWNnYUdWcFoyaDBQU2N6TmljZ2RtbGxkMEp2ZUQwbk1DQXdJRE0ySURNMkp6NGdQR2NnWm1sc2JEMG5ibTl1WlNjZ1ptbHNiQzF5ZFd4bFBTZGxkbVZ1YjJSa0p6NGdQSEJoZEdnZ1pEMG5UVEFnTUdnek5uWXpOa2d3ZWljZ2IzQmhZMmwwZVQwbkxqVW5MejRnUEhCaGRHZ2dabWxzYkQwbkkwWkdSaWNnWkQwblRUTXdJRE13ZGkwNWFEUjJNVE5JTWpGMkxUUm9PWHB0TkMweU5IWTVhQzAwVmpab0xUbFdNbWd4TTNZMGVrMDJJRE13YURsMk5FZ3lWakl4YURSMk9YcE5OaUF5YURsMk5FZzJkamxJTWxZeWFEUjZKeTgrSUR3dlp6NGdQQzl6ZG1jKycsXG4gIGxlYXZlRnVsbFNjcmVlbjogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owbmFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jbklIZHBaSFJvUFNjek5pY2dhR1ZwWjJoMFBTY3pOaWNnZG1sbGQwSnZlRDBuTUNBd0lETTJJRE0ySno0Z1BHY2dabWxzYkQwbmJtOXVaU2NnWm1sc2JDMXlkV3hsUFNkbGRtVnViMlJrSno0Z1BIQmhkR2dnWkQwblRUQWdNR2d6Tm5Zek5rZ3dlaWNnYjNCaFkybDBlVDBuTGpVbkx6NGdQSEJoZEdnZ1ptbHNiRDBuSTBaR1JpY2daRDBuVFRFeElESm9OSFl4TTJndE5Ib25MejRnUEhCaGRHZ2dabWxzYkQwbkkwWkdSaWNnWkQwblRUSWdNVEZvTVROMk5FZ3llazB4TVNBek5HZzBWakl4YUMwMGVpY3ZQaUE4Y0dGMGFDQm1hV3hzUFNjalJrWkdKeUJrUFNkTk1pQXlOV2d4TTNZdE5FZ3llazB6TkNBeE1YWTBTREl4ZGkwMGVpY3ZQaUE4Y0dGMGFDQm1hV3hzUFNjalJrWkdKeUJrUFNkTk1qVWdNbll4TTJndE5GWXllazB6TkNBeU5YWXRORWd5TVhZMGVpY3ZQaUE4Y0dGMGFDQm1hV3hzUFNjalJrWkdKeUJrUFNkTk1qVWdNelJXTWpGb0xUUjJNVE42Snk4K0lEd3ZaejRnUEM5emRtYysnLFxuICBwcmV2aW91c0VwaXNvZGU6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSGRwWkhSb1BTSXpOaUlnYUdWcFoyaDBQU0l6TmlJK1BHUmxabk0rUEdacGJIUmxjaUJwWkQwaVlTSWdhR1ZwWjJoMFBTSXhOVEFsSWo0OFptVkhZWFZ6YzJsaGJrSnNkWElnYVc0OUlsTnZkWEpqWlVGc2NHaGhJaUJ6ZEdSRVpYWnBZWFJwYjI0OUlqTWlMejQ4Wm1WUFptWnpaWFFnWkhnOUlqSWlJR1I1UFNJeUlpQnlaWE4xYkhROUltOW1abk5sZEdKc2RYSWlMejQ4Wm1WRGIyMXdiMjVsYm5SVWNtRnVjMlpsY2o0OFptVkdkVzVqUVNCMGVYQmxQU0pzYVc1bFlYSWlJSE5zYjNCbFBTSXVOeUl2UGp3dlptVkRiMjF3YjI1bGJuUlVjbUZ1YzJabGNqNDhabVZOWlhKblpUNDhabVZOWlhKblpVNXZaR1V2UGp4bVpVMWxjbWRsVG05a1pTQnBiajBpVTI5MWNtTmxSM0poY0docFl5SXZQand2Wm1WTlpYSm5aVDQ4TDJacGJIUmxjajQ4TDJSbFpuTStQR2NnWm1sc2JEMGlibTl1WlNJZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQm1hV3gwWlhJOUluVnliQ2dqWVNraVBqeHdZWFJvSUdacGJHdzlJaU5HUmtZaUlHUTlJazB6TWlBek1sWTBUREV4SURFNGVtMHRNakVnTUZZMFNEUjJNamg2SWk4K1BDOW5Qand2YzNablBnPT0nLFxuICBuZXh0RXBpc29kZTogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJek5pSWdhR1ZwWjJoMFBTSXpOaUkrUEdSbFpuTStQR1pwYkhSbGNpQnBaRDBpWVNJZ2FHVnBaMmgwUFNJeE5UQWxJajQ4Wm1WSFlYVnpjMmxoYmtKc2RYSWdhVzQ5SWxOdmRYSmpaVUZzY0doaElpQnpkR1JFWlhacFlYUnBiMjQ5SWpNaUx6NDhabVZQWm1aelpYUWdaSGc5SWpJaUlHUjVQU0l5SWlCeVpYTjFiSFE5SW05bVpuTmxkR0pzZFhJaUx6NDhabVZEYjIxd2IyNWxiblJVY21GdWMyWmxjajQ4Wm1WR2RXNWpRU0IwZVhCbFBTSnNhVzVsWVhJaUlITnNiM0JsUFNJdU55SXZQand2Wm1WRGIyMXdiMjVsYm5SVWNtRnVjMlpsY2o0OFptVk5aWEpuWlQ0OFptVk5aWEpuWlU1dlpHVXZQanhtWlUxbGNtZGxUbTlrWlNCcGJqMGlVMjkxY21ObFIzSmhjR2hwWXlJdlBqd3ZabVZOWlhKblpUNDhMMlpwYkhSbGNqNDhMMlJsWm5NK1BHY2dabWxzYkQwaWJtOXVaU0lnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCbWFXeDBaWEk5SW5WeWJDZ2pZU2tpUGp4d1lYUm9JR1pwYkd3OUlpTkdSa1lpSUdROUlrMDBJRE15VmpSc01qRWdNVFI2YlRJeElEQldOR2czZGpJNGVpSXZQand2Wno0OEwzTjJaejQ9JyxcbiAgcGF1c2VDaXJjbGU6ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVVBQUFBRkFDQVlBQUFETmtLV3FBQUFBQVhOU1IwSUFyczRjNlFBQUgvWkpSRUZVZUFIdG5YMndIV1Y5eDIvTUMwa2dFQ0NFUUJJbmdUQUVoUEVOVWlOeGhDbkVVRkg1dzhMSTZJZ3hVc1ZPMHdxdHRhTzFMVk5ycTdhbUl6aURNWXpXd1lFNlUxUW9HRlFDQk9JZ2RtUjhnU2pRbENSd2dRamh4UVJ5Q2VuM2UrODlOK2VlZTE3MjdOazkrK3crbjkvTU43dG5YNTU5ZnAvbjNHOTI5M2wyejZRQkFnTHBDQnlpM1k2VGpwU09rR2FQcWpaZm0wN1g4cWwxbWxZMzcrV09vVHJ0cTV2MzhwZWszZEp6RGRQYXNtZTBmRkI2V1NJZzBCV0JTVjF0emNZeEVmQjM0M2hwZ1dTam05OHduYVBQSWNVdVZlWUphV2ZEZFB2bzV3T2FFaEFZUndBREhJY2oyZyt6bFBtU1VaMmtxWFdpTkZPcVF1eFJFbzlJdngzVnc1cGFMMGhFeEFRd3dQZ2EzNWVncDBpdkg5WEptczZUWWd4Zk9tK1ZIaGpWZzVyNkVweUloQUFHV1AyRzlyMjVtdGw1ZXFwVXUvZFcvZXk3eTlEM0hIOHQxUXpSVTk5ckpDcEtBQU9zWHNOT1VVbzJ1cmRLWjBtK3RDWFNFL0NsOGozU3ZaSU44UldKcUFnQkRMQWFEZWxMMk9XU0RlOU02VkNKeUo3QTcxWGtUeVViNGhiSmw5QkVpUWxnZ09WdHZFV3Erbm5TSDBxYzVRbENBZUd6d3g5SnQwdmJKS0prQkREQWNqWFlRbFhYcHJkU3d2VENhanViNFViSlp1aWhOMFFKQ0dDQTRUZlNzYXJpS3NuR3R6VDg2bEpERVhoSXNoSGVKajBwRVlFU3dBRERiQmgzWkt5UUxwVGNtZkVhaVNnZmdWZFZaWGVlM0NSdGx1aEFFWVNRQWdNTXFUVkducnA0ajZyMExpbTBKeTNDSWxXKzJ2aEpsZTlMMzVWMmxLLzYxYXd4QmxoOHUvcnM3bXpwdmRJeWlhZytnZnVVNG5la1RaTFBFb21DQ0dDQUJZSFhZYWRMNzVZdWtSWklSSHdFZkNaNHZmUTk2YVg0MGk4K1l3eXcvMjNnUzl1TEpKL3hIZDcvdzNQRUFBazhyenI1alBCR3laZktSSjhJWUlCOUFxM0RMSlkrSUowdlRaVUlDRFFTR05LQ1c2VnZTdHNrSW1jQ0dHRE9nRlg4YTZXUFNCN0tBbTlCSURvUzhLdTdQSVRtYTlKakhiZG1nOVFFK0lOTWphN2pqc2RyaXpYU082WEpIYmRtQXdoTUpMQmZpMjZSMWt1UFQxek5rbDRKWUlDOUVweTR2d2N1cjVZOG5HWEt4TlVzZ1VEWEJEeCswTU5uTmtnTXJPNGFYK3NkTU1EV2JMcGRjNWgyOEtXdU96aTR4OWN0UGJaUFFzRDNDTjFSNGt2akY1UHN3RGJ0Q1dDQTdma2tXZXZMV3oreDhURnBkcElkMkFZQ1BSTFlyZjIvS3ZrSkUxOG1FeWtKWUlBcHdZM3Vkb2FtVjBwTGVpdUd2U0dRaXNERDJ1dUwwdjJwOW1ZbmVpVlRmZ2M4Y0htdGRFN0svZGtOQWxrU3VFT0ZyWk04c0pyb2dnQm5nRjNBMHFidTFQaVE1RTRPN3ZNSkFoRU1BZDhmZENmSmRaSTdUWWdFQkREQUJKQkdOemxkMDg5SUp5VGZoUzBoMEhjQ2orcUlWMG0vNlB1UlMzaEFETEJ6bzgzVUpwZExGMHZ3NnN5TExZb240SUhVTjBqWFNIdUtyMDY0TldDQWJ2dTJPVXVyLzExNmk0VDV0V2ZGMm5BSStMdDZtdVRITHY5UDJpNFJUUWp3UjkwRWloWjVUTjhuSlgrQkNBaVVuY0N0U3VDZkpjWU9OclFrWjRBTlFQVHhEZExWMGhzbnJtSUpCRXBKNENUVitoM1NnOUpnS1RQSXFkSVk0RUd3N3VHOVRQcGJpZGRVSGVUQ1hEVUl6RklhRjBqK20vKzU5S29VZldDQUkxOEJqK3Y3c3NRYlc2TC9rNmcwQU4veWVwUGtlOW9lUE8zM0VFWWRHT0RJLzRyL3BtL0IvS2kvQ1NRZkU0RzVTdFl2NjNoYStrMU1pVGZtR3JNQlRoT01UMGtmbFJqVTNQak40SFBWQ2ZnN2Y3WmtNL3lKRk9VenhiRWE0RHcxK0Zla3Qwa0VCR0ltc0ZUSis2ZFh0MGpSOVJMSGFJREwxTkR1NVYwb0VSQ0F3TURBTVlMd1I5SkQwczZZZ01SbWdKZXFjVDhyellpcGtja1ZBZ2tJVE5jMkh2ZnFaNHJkU3h4RnhHS0FidHpQU1R6T0ZzWFhtaVJURW5BdnNhK1EvSHEzdTZYS3YxUWhCZ004V2cxNWplU0dKU0FBZ2M0RUZtdVQ1ZEpkMHQ3T201ZDNpNm9ib04vY2NxM2tCaVVnQUlIa0JIeGY4RHpKUGNUUEp0K3RYRnRXMlFEUFZGTzRzK09vY2pVSnRZVkFNQVQ4VEx6dkMvNUtxdVN2MGxYVkFQM0l6K2NsMy9zaklBQ0I5QVE4WG5hVk5DaFZidEIwRlEzd01qWFVGZEpySkFJQ0VPaWRnUCtXemg0dDVtZTlGeGRPQ1ZVendFOEk3YVhoNEtVbUVLZ1VnVGNyRzE4V2U5QjBKYUlxQnVqL29mNUd1cWdTclVJU0VBaVhnSDhhd2gwazkwaCs4M1Nwb3dvRzZOZFkvYjMwcmxLM0JKV0hRSGtJbktLcStrbXF1NlJTdjFhcjdBYm9CN3JkMlhHdVJFQUFBdjBqNE1IUzFoMVNhVTJ3ekFib0h0NS9sVlpJQkFRZzBIOENpM1RJMTBrMndWSStOVkpXQS9TWjM1Y2tqMVluSUFDQjRnajRVdGlYeEQrVVNuY21XRVlEOUQwL1gvYnlLaXRCSUNBUUFBR2JvQytIZnl5VnlnVExab0R1N1hXSHg3a1NBUUVJaEVOZ2thcXlRTm9rbGFaM3VHd0c2S0V1OVBZS0FnR0JBQW40TEhDT2RIZUFkV3RhcFRJWm9BYzVNODZ2YVRPeUVBTEJFUEQ5d05JTWxpNkxBZnJ4dGt1RGFXSXFBZ0VJdENQZ3dkS09uNDFNd3YyM0RBYm9GeHY0MlY0Q0FoQW9Ed0UvTnZlNEZQUUxGRUkzUUwvU3lqMis3dndnSUFDQmNoSHdHTjBISkJ0aGtERXB5RnFOVk9vRVRUWkl2cDlBUUFBQzVTVGdYNXBiTFQwYVl2VkROY0NqQmVzYmtuKytrb0FBQk1wTllGRFYvNkQwdTlEU0NQSFMwbys0ZlZuQy9FTDd0bEFmQ0tRajRMOWwvMDM3Ynp1b0NQRWU0T2RFaUI4d0N1cHJRbVVnMERNQnYwSnJrWFI3enlWbFdFQm9CbmlwY3ZOUFZ4SVFnRUQxQ0N4V1N2dWtZSDUzT0NRRDlGbmZaNlZRNzB1cWFnUUVJTkFqZ1RPMHYzdUdkL1pZVGlhN2gySTJ2a2Z3TFdsMkpsbFJDQVFnRURLQjNhcmMreVYzamhRYUlYU0NUQk9CTDBpWVg2RmZCUTRPZ2I0UjhOKzYvK2I5dDE5b2hIQUovQ2tSNE5WV2hYNE5PRGdFK2s3QW5TSWU3blpYMzQ5Y2Q4Q2lEZEJ2ZHZsb1hYMlloUUFFNGlHd1ZLaytJUlgydUZ5Ujl3RDk3ckJ2U3pNa0FnSVFpSlBBWHFYOVBtbEhFZWtYZFFZNFJjbCtXWnBmUk5JY0V3SVFDSWFBZjk3aU5PbG1xZTl2a3k3S0FQOUV5YTZTQ0FoQUFBSnpSeEhjMzI4VVJmUUN2MEZKZnFqZmlYSThDRUFnYUFLclZUdDdRMStqMy9jQS9XWVgzL2M3cnE5WmNqQUlRS0FNQk53aDR2dUJmb05NWDZMZmw4Q2ZVVlp2N0V0bUhBUUNFQ2diZ1ZtcThMR1NmMmU0TDlIUFMyQy9IUEg4dm1URlFTQUFnYklTc0VmWUsvb1MvYm9FbnFsc2JwUjR4VlZmbXBXRFFLRFVCUHlJbkg4QWJVL2VXZlRyRXZqUGxjaGI4azZHOGlFQWdVb1FjRitCVDVydXpUdWJmbHdDbjY0azdPWUVCQ0FBZ2FRRTdCbjJqbHdqNzB0Z0QzaStYam9oMXl3b0hBSVFxQ0lCLzQ3SUpkSXJlU1dYOXlYd2gxWHg4L0txUE9WQ0FBS1ZKbkNrc3Rzdi9VOWVXZVo1QnVobmZmOVQ4cU11QkFRZ0FJRTBCSWEwMHg5THVUd3JuT2M5d0xXcU5PYVhwc25aQndJUXFCR3doOWhMY29tOEROQ3Z2VDRubHhwVEtBUWdFQnNCZTRrOUpmUEl3d0I5WC9IS3pHdEtnUkNBUU13RTdDbVo5MW5rWVlBWHFxSkxZbTRwY29jQUJESW5ZRSt4dDJRYVdYZUNlQURqVGRMc1RHdEpZUkNBQUFRR0JuWUxnazN3eGF4Z1pIMUsrWEZWYkZsV2xhTWNDRUFBQW5VRXBtdmVuU0kvcVZ2VzAyeVdaNEIraTRQUC91ajU3YWxKMkJrQ0VHaER3TU5pZkJiNFpKdHRFcS9LOGg2Z0J6MWpmb25Sc3lFRUlKQ0NnRDNHWHBOSlpHV0F4NnMyNzg2a1JoUUNBUWhBb0QwQmU0MDlwK2ZJeWdBL29wcjR1VjhDQWhDQVFONEU3RFgybko0akN3TjhyV3J4enA1clFnRVFnQUFFa2hPdzU5aDdlb29zRFBBeTFTQ0xjbnBLaEowaEFJR29DTmh6N0QwOVJhL0d0VmhIZjBkUE5XQm5DRUFBQXVrSTJIdnNRYW1qVndQOGdJNmM1VkNhMUltd0l3UWdFQjBCZTQ4OUtIWDBZb0J6ZEZSKzVDZzFlbmFFQUFReUlHQVBzaGVsaWw0TTBLK3NadHhmS3V6c0JBRUlaRVRBSHBUNkp6ZlNHcUFmU1hsdlJnbFFEQVFnQUlGZUNOaUw3RWxkUjFvRGZJK09kSGpYUjJNSENFQUFBdGtUc0JmWms3cU9OQWJvZmZ4REpRUUVJQUNCVUFqWWs3cjJzNjUzMEVIT2tlYUhralgxZ0FBRUlDQUM5aVI3VTFlUnhnQzU5OWNWWWphR0FBVDZSS0JyYityMitWMy8wdHVaZlVxR3c3UWdNR1BHakVscjE2NmRzMkxGaXNQbXpaczNkWktpeGFhcEYrL2Z2Ly9BOXUzYjkyM2N1UEg1OWV2WFA2UFBxY3NxWXNmSmt5Y1ByRm16NXFpVksxY2V2bkRod21uNm5EbWpBNHJCd2NHaHpaczN2N2h1M2JwZGUvZnVQVkJFcmh4empJQzl5UjYxWTJ4Smg1bHV2eFIvcXZJdTdWQW1xM01rTUhYcTFJRWJicmhoMGNrbm41eXExeXROMWU2ODg4NFhMci84OHAxcDlpMXFuMnV1dVdiKzI5Lys5bG45T3Y3V3JWdGZ1dmppaTdjTkRmbDFkVVNCQks3VHNhOU9ldnh1TG9GOXRuaEIwb0xaTGg4Q3ExZXZQcXFmNXVjc2JDU3JWcTN5engyVUlselhmcHFmb2JoTjNEYWxBRlR0U3I1TDZTVytzdTNHQUZlbzREblZaaGQrZHN1V0xadFpSQzJYTDE5ZXlISFQ1RnBVWFl0cW16U01LcnlQUGNwZWxTaTZNVUMvaHBvb21NRGN1WE1MZWZybW1HT09LZVM0YVhBWFZkZWkyaVlObzRydms5aXJraHFnZisvanJSV0hSbm9RZ0VBMUNOaXI3RmtkSTZrQitvSGpwTnQyUENnYlFBQUNFTWlSZ0wwcTBZdGFrcHJhZVRsV2xxSWhBQUVJWkUzZzNDUUZKakhBaFNybzVDU0ZzUTBFSUFDQlFBZ3NWVDNzWFcwamlRR3ViRnNDS3lFQUFRaUVTYUNqZHlVeFFDNS93MnhjYWdVQkNMUW4wTkc3T2huZ0lwVy9wUDB4V0FzQkNFQWdTQUwycmtYdGF0YkpBRHM2YUx2Q1dRY0JDRUNnWUFKdFBheVRBU2JxU1NrNFFRNFBBUWhBb0JXQnRoN1d6Z0RucWNRVFc1WEtjZ2hBQUFJbElHQVBzNWMxalhZR3VMenBIaXlFQUFRZ1VDNENMYjJzblFHZVZhNGNxUzBFSUFDQnBnUmFlbGtyQTV5aVluanhhVk9XTElRQUJFcEd3RjVtVDVzUXJRenc5ZHJ5MEFsYnN3QUNFSUJBK1FqWXkreHBFNktWQWZMbWx3bW9XQUFCQ0pTWVFGTlBhMldBTGErWlN3eUFxa01BQXZFU2FPcHB6UXh3dGhndGlaY1RtVU1BQWhVa1lFK3p0NDJMWmdiWTlGcDUzRjU4Z0FBRUlGQStBaE84RFFNc1h5TlNZd2hBSUIwQkREQWROL2FDQUFRcVFLQ2pBVTVUa3FkV0lGRlNnQUFFSU5CSXdONW1qeHVMeGt2Z1U3Um02dGhhWmlBQUFRaFVoNEM5elI0M0ZvMEdPT0VVY1d4TFppQUFBUWlVbjhBNGo4TUF5OStnWkFBQkNDUW4wTllBL1VNaUJBUWdBSUdxRWhqbmNmVm5nTE9VY2FJZkU2NHFHZktDQUFRcVQ4QWVaNjhiam5vRDVPbVBHaFdtRUlCQWxRbU1lVjI5QVo1VTVZekpEUUlRZ01Bb2dUR3ZxemZBTVZjRUV3UWdBSUVLRXhqenVub0RISFBGQ2lkT2FoQ0FBQVRHdks1bWdKUEVoQjlBNG9zQkFRakVRTUJlWjg4YnFCbmc4WnFmNlFVRUJDQUFnWW9Uc05mWjg4WU1jRUhGRXlZOUNFQUFBdlVFaGoydmRnWjRYUDBhNWlFQUFRaFVuTUN3NTlVTWNIN0ZreVU5Q0VBQUF2VUVoajJ2Wm9DY0FkYWpZUjRDRUtnNkFjNEFxOTdDNUFjQkNMUWt3QmxnU3pTc2dBQUVxazVnN0F6d0VHVTZwK3Jaa2g4RUlBQ0JPZ0wydkVOOEQ1RDdmM1ZVbUlVQUJLSWhjSndOOE1obzBpVlJDRUFBQWdjSkhHa0RQT0xnWitZZ0FBRUlSRVBnQ0J2Z2hGOUxqeVo5RW9VQUJHSW1NQnNEakxuNXlSMENjUlBBQU9OdWY3S0hRTlFFaGcyUWU0QlJmd2RJSGdMUkV1QWVZTFJOVCtJUWdBQm5nSHdISUFDQmFBa01ud0ZPanpaOUVvY0FCR0ltTU4yOXdOTmlKa0R1RUlCQXRBU20yUUNuUkpzK2lVTUFBakVUbU1JWllNek5UKzRRaUp2QThCbmcxTGdaa0QwRUlCQXBnYWsrQThRQUkyMTkwb1pBNUFRd3dNaS9BS1FQZ1pnSllJQXh0ejY1UXlCeUFzTUdHRGtEMG9jQUJHSWw0SHVBUTdFbVQ5NFFnRURVQklZd3dLamJuK1FoRURVQkRERHE1aWQ1Q01STllOZ0E5OFhOZ093aEFJRklDZXpqRWpqU2xpZHRDRUJnZ0V0Z3ZnUVFnRUMwQkREQWFKdWV4Q0VBZ1dFRGZBa09FSUFBQkNJa3NOZjNBSGRIbURncFF3QUNFSGpPQnZnY0hDQUFBUWhFU0dEWUFEa0RqTERsU1JrQ0VCall6UmtnM3dJSVFDQldBcHdCeHRyeTVBMEJDSXljQVhJSnpEY0JBaENJa1FDWHdERzJPamxEQUFMREJJWXZnWjhGQmdRZ0FJRUlDVHpqVHBBbklreWNsQ0VBQVFnTTJnQmZsbmJCQWdJUWdFQkVCT3g1TDlzQUhad0ZqbkRnWHdoQUlBNEN3NTVYTThDZGNlUk1saENBQUFTR0NReDdYczBBT1FQa1d3RUJDTVJFZ0RQQW1GcWJYQ0VBZ1hFRU9BTWNoNE1QRUlCQVRBVEduUUZ1anlsemNvVUFCS0luTU94NTlmY0E5MFNQQkFBUWdFQU1CT3gxNDg0QUQyakJJekZrVG80UWdFRDBCT3gxOXJ5QjJobWc1My9yZndnSVFBQUNGU2N3NW5VWVlNVmJtdlFnQUlFSkJKb2E0TU1UTm1NQkJDQUFnZW9SR1BPNitqUEFzWVhWeTVlTUlBQUJDSXdSR1BPNmVnTjhRYXNIeHpaaEJnSVFnRUQxQ05qajdIWERVVytBWHJCMVpESC9RZ0FDRUtna2dYRWUxMmlBRDFReVpaS0NBQVFnTUVKZ25NZGhnSHd0SUFDQm1BaTBOY0FIUldJb0pocmtDZ0VJUkVQQTNtYVBHNHZHTThCOVd2UHJzYlhNUUFBQ0VLZ09BWHViUFc0c0dnM1FLOGFkSW81dHlRd0VJQUNCY2hPWTRHMFlZTGtibE5wREFBTEpDV0NBeVZteEpRUWdVREVDaVF4d3Q1SWVHeWxkTVFDa0F3RUl4RW5Bbm1adkd4Zk5Mb0c5d1QzanR1SURCQ0FBZ1hJVGFPcHByUXp3M25MblN1MGhBQUVJakNQUTFOTmFHYUN2bFg4L2JuYytRQUFDRUNnbkFYdlpoUHQvVHFXVkFiNmlkVC8xQmdRRUlBQ0JraE93bDluVEprUXJBL1NHVGErWko1VEFBZ2hBQUFKaEUyanBaZTBNY0V2WU9WRTdDRUFBQW9rSXRQU3lkZ2JvOTJZeEhDWVJYemFDQUFRQ0pXQVBhL21lMDNZRzZIeCtGR2hTVkFzQ0VJQkFFZ0p0UGF5VEFkNmU1QWhzQXdFSVFDQlFBbTA5ckpNQmJsTlNYQVlIMnJKVUN3SVFhRXZBM3JXdDNSYWRETkQ3Ym14WEFPc2dBQUVJQkVxZ28zY2xNY0MycDVDQkprNjFJQUFCQ0hUMHJpUUd1RjBjSDRJbEJDQUFnUklSc0dmWnU5cEdFZ04wQVQ5c1d3b3JJUUFCQ0lSRm9PUFpuNnViMUFCdjFiYXZocFVmdFlFQUJDRFFsSUM5NnJhbWF4b1dKalhBSjdWZjA3Y3BOSlRIUndoQUFBSkZFN0JYMmJNNlJsSURkRUUzZFN5TkRYSW44TlJUVHczbGZwQW1CM2o2NmFjTE9XNlRxblJjVkZSZGkycWJqa0RpMnlDeFYzVmpnSnZGY1ZkOExNUEsrTDc3N3R0VFJJMjJiTmxTeUhIVDVGcFVYWXRxbXpTTUtyeVBQY3BlbFNpNk1jQlhWT0wzRTVYS1Jya1IyTEJod3pOYnQyNTlLYmNETkNuNHpqdnZmT0cyMjI1N3NjbXFJQmU1cnE1elB5dm5ObkhiOVBPWUhLc3BBWHVVdlNwUlRFcTAxY0dORm1nMjhlbmx3ZDJZeTVMQWpCa3pKcTFkdTNiT2loVXJEcHMzYjk3VVNZb3N5M2RaKy9mdlA3QjkrL1o5R3pkdWZINzkrdlhQNkhQV2g4aTF2TW1USncrc1diUG1xSlVyVng2K2NPSENhZnFjT2FNRGlzSEJ3YUhObXplL3VHN2R1bDE3OSs0OWtHdFNGSjZFd0lYYWFFZVNEYjFObWkvRk5kcHZXZElEc0IwRUlBQ0JQaEc0VDhlNXZKdGpkWE1KWEN2M083VVpwaENBQUFRQ0l0QzFONlV4d0UxS09QRXBaa0J3cUFvRUlGQmRBdmFrVGQybWw4WUFQY2p3K200UHhQWVFnQUFFY2lSZ1QrcjZZWTAwQnVnY3ZpYzk3eGtDQWhDQVFNRUU3RVgycEs0anJRRjZHRWJYMTl0ZDE0NGRJQUFCQ0hRbVlDOUtOVFFzclFHNlNqZEtwWGs2d0JVbUlBQ0J5aEd3QjltTFVrVXZCcmhMUi9STEVnZ0lRQUFDUlJHd0I5bUxVa1V2QnVnRGZsTmk4R2NxOU93RUFRajBTTURlWXc5S0hiMGE0RFlkK1FlcGo4Nk9FSUFBQk5JVDhDdXZ0cVhmUGZuN0FOc2Q0MXF0TE5kelV1MnlZUjBFSUZBR0F2YWNyL1ZhMFY3UEFIMzh4NlJiZXEwSSswTUFBaERvZ29BOXg5N1RVMlJoZ0s3QWVpbnhHeGg2cWpFN1F3QUNzUk93MTloemVvNnNEUEJ4MWVTN1BkZUdBaUFBQVFoMEptQ3ZzZWYwSEZrWm9DdXlRV0pjWU05TlFnRVFnRUFiQXZZWWUwMG1rYVVCK2gzOHFRY2tacElOaFVBQUFsVW5ZSTlKOUhzZlNVQ2tlUjlndTNJUDAwcS9NSFYydTQxWUJ3RUlRQ0FGZ2QzYXh5ODh6ZXp0NUZtZUFUb2ZWK3lybmlFZ0FBRUlaRXpBM3BLWitibHVXUnVneS9RWjRNT2VJU0FBQVFoa1JNQ2VZbS9KTlBJd1FBOVEvR0ttdGFRd0NFQWdkZ0wybE13ZnVNakRBTjFROTB0M2VJYUFBQVFnMENNQmU0azlKZlBJeXdCZDBYVVN3Mkl5YnpJS2hFQlVCT3doOXBKY1luSXVwWTRVNnJlMDJtRFB5UEVZRkEwQkNGU2JnSi80MkpSWGlsa1BnMm1zNXhRdDhMdjZUMmhjd1djSVFBQUNIUWc4cXZXWFNLOTAyQzcxNmp3dmdWMHBWL3dxaVhjR21nWUJBUWdrSldEUHNIZmtabjZ1U0o2WHdDN2Y4WlIwaEhTYVB4QVFnQUFFRWhDNFFkdGtQdXlsOGJoNVh3TFhqamRUTTM2RVpWNXRBVk1JUUFBQ0xRZ01hdmxGMHA0VzZ6TmJuUGNsY0syaVR1VHp0UTlNSVFBQkNMUWg4RTlhbDd2NStmajl1QVN1NWZtWVpoWklKOVVXTUlVQUJDRFFRT0MvOWZtYkRjdHkrOWl2UytCYUFvZHA1dHZTY2JVRlRDRUFBUWlNRW5oQzAvZEptVDd2MjQ1dVA4OEFYWTk5MG9QU0JWSy96VmVISkNBQWdVQUp2S3A2ZlVMeWxXTGZvdDhHNk1SOGc5UEhmWk0vRUJDQUFBUkU0T3ZTemYwbTBhOU9rTWE4MW12Qkx4c1g4aGtDRUlpU2dMM0FudEQzS1BJeTFCMGl2aDg0bys5WmMwQUlRQ0FVQW50VkVkLzMyMUZFaFlxNEJLN2w2V2VGbjViT3JpMWdDZ0VJUkVmZ0g1VnhMbTk2U1VLeVNBTjAvWDRqelpXVytnTUJBUWhFUmNCUGVoUnk2VnVqWE9RbGNLME8welRqRzZDbjFCWXdoUUFFS2svQW8wRStMSGxrU0dFUmdnRTZlVDhpOXkxcHRqOFFFSUJBcFFuc1ZuYnZsendpcE5BbytoSzRscndIUGo0a25TK0ZZc3ExdWpHRkFBU3lJK0R4ZmxkSVc3TXJNbjFKb1JpZ005Z3ArZTJ2eS95QmdBQUVLa25nYW1WMVN5aVpoV1NBWnZKemFZbTAyQjhJQ0VDZ1VnUityR3krRUZKR29SbWcyZHd0TFplTzhRY0NBaENvQkFGM2V2aFJ0MWRDeWliVSsyMUhDOUkzSk40ZkdOSzNoYnBBSUIwQmQzWjhVUHBkdXQzejI2dW9SK0U2WldSUWZ5YTVjNFNBQUFUS1M4Qi93LzViRHM3OGpEVEVTMkRYeS9HczlDdHBsUlNxVWF0cUJBUWcwSUtBTDNmL1F2TGZjWkFSc2dFYTJPT1NUNS9QbGdnSVFLQmNCUDVCMWQwVWNwVkROMEN6OCtOeWpqZVBUUGdYQWhBb0FZRnJWVWUvN0NUb0tJTUJHdURQSkw5TituUi9JQ0FBZ2FBSitMZkF2eEowRFVjclZ4WURkSFczU0I0YXd6UERwa0ZBSUV3Qy82VnEvVXVZVlp0WXF6SVpvR3QvajdSUThtQnBBZ0lRQ0l2QWJhck9WWkovMUx3VVVUWUROTmk3SkJ2Z0lvbUFBQVRDSUxCSjFmaTB0RCtNNmlTclJka00wRm41WWVvN3BOT2tCUklCQVFnVVMrQW5PdnhmU2tFOTVaRUVTUmtOMEhuWkJQMWM0YWtTSmlnSUJBUUtJdUI3OHphL1F0L3JsemIzc2hxZzgvWC9OcmRMWEE2YkJnR0IvaFBZcEVQK2xWUks4ek91TWh1ZzYxODdFL1JaSUIwakprSkFvRDhFM09IeGFja25JcVdOc2h1Z3dkc0VOMGx6SkliSUNBSUJnWndKZUtqTFZWS3BPanlhTWFtQ0FUb3Y5dzdmTFRGWTJqUUlDT1JId0lPY1BjNnZORU5kMnFHb2lnSFdjdlFOV1FlUHpZMXc0RjhJWkVuQWo3ZVY0Z21QcEVsWHpRQ2R0eCtiZTF4YUlmRVdHVUVnSU5BakFkL244NHNOZ24rMnQ5czhxMmlBWnZBYjZRSHBiR21hUkVBQUF1a0krSDErZnFYVnBuUzdoNzFYVlEzUTFIMFc2S2RHM2liNTNpQUJBUWgwUjhDdm92dW9GT3o3L0xwTForTFdWVFpBWit1WHF2NUFPa1B5aXhRSUNFQWdHUUgvaG9mTnp5Y1NsWTJxRzZBYmJxOTBxN1JJV2l3UkVJQkFld0oreXNvL1lQUkMrODNLdnpZR0EzUXIrU2F1bnhyeGlIV2ZEVTZTQ0FoQVlEd0JqNm05V3ZKUFY1WjZnUFA0dEZwL2lzVUFhd1Q4dThQdUhEbExtbDVieUJRQ0VCallMUVpYU0xmRXhDSTJBM1RiN3BRMlNtK1V1QzhvQ0VUMEJIeS83MlBTMXRoSXhHaUFibU4zN2Z0L3VxT2xwUklCZ1ZnSjNLVEVQeWs5RnlPQVdBM1FiZTNuR0QxTTVnbnBENlNwRWdHQldBanNWYUtmazlaTHBYK21OMjJqeFd5QU5XWWVOTzBPRXI5Z2RXNXRJVk1JVkpqQUw1WGJ4Nlg3SzV4am90UXd3QkZNejJ0eXMrVGU0VGVNVGpVaElGQXBBdTdsM1NEOW5lUk9qK2dEQXp6NEZmQ1h3LzhqL2xRNlU1b2xFUkNvQ2dIZjZ2SFlQdjlINys4NklRSVk0TVN2d2FBV2ZWODZWanBwNG1xV1FLQjBCRzVWamYwODcyT2xxM25PRldaQWNIdkFLN1Q2cjZWNTdUZGpMUVNDSk9EL3pEOHZiUTZ5ZGdGVWlqUEE5bzNnL3pFOVRHQ205RHFKL3pBRWdRaWVnRjlXZXFQazMrdDRKUGphRmxoQi9xQ1R3ejlkbTM1R09pSDVMbXdKZ2I0VGVGUkh2RXI2UmQrUFhNSURZb0RkTlpySENsNHFyWllZTnlnSVJEQUVobFFUOS9CZUowWHhIRzhXNURIQWRCUVhhTGUxMGpucGRtY3ZDR1JLNEE2VnRrN2FrV21wRVJTR0FmYld5R2RvOXlzbGZwS3pONDdzblk3QXc5cnRpMUwwQTVyVDRlT21mbHB1OWZ1NUkrbEN5UStUejY1ZndUd0VjaUxnUWN4ZmxkeEJGKzFqYkZtdzVRd3dDNG9qWlJ5bXlVZWtpeVR1RDQ0dzRkOXNDZmcrbjN0M3Z5YTltRzNSY1phR0FXYmY3aDVBL1dIcDNkS1U3SXVueEFnSnVGUGplOUxYcFNjanpEKzNsREhBM05BT0hLK2lmVWI0VHVrMStSMkdraXRNd0krcytiVnRQdU9yOUc5ekZOV0dHR0QrNUYrclExd212VU9DZC82OHEzQUVEMlQyajNsZEsza3dQcEVUQWY0Z2N3TGJwTmpGV3ZZQjZYeUplNFJOQUxGb3dQZjQvTnp1ZjBqL0M0LzhDV0NBK1ROdVBNSWNMWEJIeVh1bHd4dFg4amxLQW40ZDIzY2tkM0RzaXBKQVFVbGpnQVdCMTJHblMrK1JMcEhtUzBSOEJIWXE1ZXVsNzBvdnhaZCs4UmxqZ01XM2dUdEl6cEY4UnVqM0VCTFZKK0IzVHZxTXowOXd1S09ES0lnQUJsZ1ErQmFIOVNOMkhsUjlnZVJMWmFJNkJIeHBlN1Brd2NzOHNoWkl1MktBZ1RSRVF6VThmbkNGWkROOHE4UXdHa0VvWWZqczdsN0pwcmRaOG5nK0lpQUNHR0JBamRHaUtoNVk3WjdqODZTVFcyekQ0ckFJK1BkMWI1ZmNvOHZBNWJEYVpseHRNTUJ4T0lML3NGQTFYQ25aREpjRVg5dTRLdml3MHJYcGJaUzJ4NVY2ZWJQRkFNdmJkb3RVZFJ2aHVkS0pFdEYvQW8vb2tEK1ViSHpiSktKa0JEREFralZZaStyNk4wdVdTMmRKN2trK1ZDS3lKL0I3RmVrZTNIdWtMWkovYzRNb01RRU1zTVNOMTZMcTdrQjV2ZVRPRXhzaWw4cUMwRVA0MHRhRzU4Nk1CeVE2TWdTaEtvRUJWcVVsVytjeFc2dHNpRFdkcXZtcHJUZVBlczJRc3YrMVpLT3JhWGZVUkNxZVBBWlk4UVp1a3Q0MExUdEZxaG5pVXMyN3B6bkdjQS90UTFMTjdCN1UvTDRZUWNTYU13WVlhOHVQejN1V1B2cFMrYVM2cVR0V1prcFZpRDFLd2gwV3Y1VjhTVnVidnFCNUltSUNHR0RFamQ4aGRYODNqcGNXU01kSjh4dW1vVDJwNGljdG5wQjJOa3gzNlBQamtsOHhSVUJnSEFFTWNCd09QblJCNEJCdGEyTThVanBDOHIzR21tcWZQZlZMSDN6WjdjNFpUMzMvc1Y3Nk9Qd2FLTjkvcThtWG9lNXM4TlF2Q1hoTzhyMjQydFR6dGMvUGF0N0c5N0pFUUtBckF2OFBiaFBZUjlER1BEWUFBQUFBU1VWT1JLNUNZSUk9JyxcbiAgcGxheUNpcmNsZTogJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVUFBQUFGQUNBWUFBQUROa0tXcUFBQUFBWE5TUjBJQXJzNGM2UUFBS3VGSlJFRlVlQUh0blFsNEZkWGR4aE9Xc0VNQ1lVMlFrS0JpWmV1bllxbDhMVnB3cFVxcnJZOVc2MExWVnArbjFxVmFXNnRmUzBGeFE2eEFSUVNoN0VWWkZUOUVwVmJGS2xpdHFGQ3A1Wk10Q1FrazdBUUkzL3NHYnN4Mjc1MTc3eXhuWnQ3Lzg3emNaV2JPOGp1WE4zUG1uRG1UbnFZUWdlUUlOTU5oWGFFc3FCMlVlVUtSOTVIWDV2aSthUTFsMUhqUDd4bUhhNmlpeG50K2Z4QXFnOHJydkVhKzI0bnZDNkZEa0VJRUVpS1FudERlMmpsTUJQamI2QWJsUWpTNm5EcXYyZmhzVXBTZ01OdWhyWFZlTjUvNGZBeXZDaEdvUlVBR1dBdEhhRCswUWMxN25kREplS1VLb0paUUVHSS9LdkZ2NlBNVDJvaFhhZytrQ0RFQkdXRDRHcDlkME5PZy9pZDBLbDY3UUdFTWRwMDNRQitkMEdkNFpSZGNFUklDTXNEZ056U3Z6VVhNanE5Zmd5TFgzb0pmKzhScXlHdU9uMElSUStRcnJ6VXFBa3BBQmhpOGhtMkNLdEhvdmdtZEE3RnJxMGllQUx2S2IwUHZRRFRFSTVBaUlBUmtnTUZvU0haaEIwRTB2TE9nVnBEQ2ZnTDdrT1Q3RUExeE5jUXV0TUxIQkdTQS9tMjhQQlI5R1BRZFNHZDVnT0JCOE96d05laFZhQk9rOEJrQkdhQy9HcXc3aWt2VE94K1M2Wm5WZGpUREZSRE5rRk52RkQ0Z0lBTTB2NUU2bzRnWFFqUyszdVlYVnlVRWdmVVFqZkFWcUFoU0dFcEFCbWhtdzNBZ1l6QTBBdUpnUmlOSTRUOENsU2d5QjA4V1FXOUJHa0FCQkpOQ0JtaFNheHkvNitJeUZPbTdrR2wzV3BoRnluK2w0WjBxUzZIRjBCYi9GVCtZSlpZQmV0K3VQTHNiQWwwQkRZUVV3U2Z3SHFxNEFGb0Y4U3hSNFJFQkdhQkg0SkZ0YytoUzZHb29GMUtFandEUEJHZERTNkNENGF1Kzl6V1dBYnJmQnV6YS9oRGlHVjliOTdOWGpnWVMySTB5OFl4d1BzU3Vzc0lsQWpKQWwwQWptNTdRdGRCRlVGTklJUUoxQ1J6R0Y4dWhHZEFtU09Fd0FSbWd3NENSL0VuUVRSQ25zb2czSUNqaUV1RFNYWnhDOHl6MFpkeTl0VVBTQlBRZk1tbDBjUS9zaGoxK0FsMENOWTY3dDNZUWdmb0VqdUtybDZBcDBMYjZtL1ZOcWdSa2dLa1NySDg4Snk3ZkNIRTZTNVA2bS9XTkNDUk1nUE1IT1gxbUtxU0oxUW5qaTM2QUREQTZtMFMzdE1ZQjdPcHlnRVBYK0JLbHAvMnRFT0ExUWc2VXNHdTgxOG9CMmljMkFSbGdiRDVXdHJKN3l6czJmZ1psV2psQSs0aEFpZ1RLY1B3a2lIZVlzSnVzU0pLQUREQkpjQ2NPT3hPdmQwTzlVa3RHUjR0QVVnUTI0cWpIb0RWSkhhMkROQ3FaNUcrQUU1ZHZoODVOOG5nZEpnSjJFbmdEaVkySE9MRmFrUUFCblFFbUFBdTdjbERqQm9pREhMck9Cd2dLWXdqdytpQUhTYVpCSERSUldDQWdBN1FBNmNRdWZmSDZXeWpmK2lIYVV3UmNKL0FGY2h3RmZleDZ6ajdNVUFZWXY5RmFZcGRib1NzaDhZclBTM3Q0VDRBVHFlZEJFNkg5M2hmSDNCSm9nbTdzdGprSG01K0N2Z0hKL0dLejBsWnpDUEMzMmdmaWJaZi9CMjJHRkEwUTBIL3FCcURnSzg3cHV4ZmlEMGdoQW40bnNCd1ZHQXRwN21DZGx0UVpZQjBnK0RnQW1nQjl2ZjRtZlNNQ3ZpUndNa3A5QWZRWlZPakxHamhVYUJuZ1YyQTV3bnN6OUFDa1phcSs0cUozd1NEUUJ0VVlEdkgvL0lkUUpSVDZrQUVlL3dsd1h0K1RrRlpzQ2YxL2lVQUQ0Q1d2LzRKNFRadVRwN2tPWWFoREJuajhyK0k0L0FweVF2MUxVT1hEUktBVEtzdkZPblpBL3dwVHhldldOY3dHbUFFWTkwRS9oVFNwdWU0dlE1K0RUb0MvK1NFUXpmQmRLSlQzRklmVkFMdWd3WitHL2h0U2lFQ1lDZlJHNWZubzFkVlE2RWFKdzJpQUE5SFFIT1h0RGlsRVFBVFMwam9Dd3NYUWVtaHJtSUNFelFDdlIrTStDTFVJVXlPcnJpSmdnVUJ6N01ONXI3eW5tS1BFb1lpd0dDQWJkd3lrMjlsQzhiTldKWk1rd0ZGaTlwQzR2TnZmb01BdnFoQUdBK3lBaHB3SXNXRVZJaUFDOFFuMHhDNkRvRGVoQS9GMzkrOGVRVGRBcnR3eUdXS0RLa1JBQkt3VDRIWEJZUkJIaUhkWlA4eGZld2JaQU05Q1UzQ3dvNzIvbWtTbEZRRmpDUENlZUY0WC9BUUs1RlBwZ21xQXZPWG5ZWWpYL2hRaUlBTEpFK0I4MlF1aFFpaHdrNmFEYUlBM282SHVnaHBCQ2hFUWdkUUo4UC9Ta0JQSnJFMDlPWE5TQ0pvQjNnbTAxNXVEVnlVUmdVQVJPQU8xWWJlWWs2WURFVUV4UVA2RitqWDB3MEMwaWlvaEF1WVM0S01oT0VEeU5zU1ZwMzBkUVRCQUxtUDFPK2k3dm00SkZWNEUvRVBnTkJTVmQxSzlDZmw2V1MyL0d5QnY2T1pneDFCSUlRSWk0QjRCVHBhbTNvQjhhNEorTmtDTzhENEJEWVlVSWlBQzdoUElRNWFuUXpSQlg5NDE0bGNENUpuZjR4Qm5xeXRFUUFTOEk4Q3VNTHZFS3lIZm5RbjYwUUI1elkvZFhpMWxCUWdLRVRDQUFFMlEzZUhYSVYrWm9OOE1rS085SFBBWUNpbEVRQVRNSVpDSG91UkNxeURmakE3N3pRQTUxVVdqdllDZ0VBRURDZkFzTUJ2Nm00RmxhN0JJZmpKQVRuTFdQTDhHbTFGZmlvQXhCSGc5MERlVHBmMWlnTHk5N1hwam1sZ0ZFUUVSaUVXQWs2VVphNCsvbVB1dkh3eVFDeHZ3M2w2RkNJaUFmd2p3dHJsdGtORUxLSmh1Z0Z6U2lpTytIUHhRaUlBSStJc0E1K2grQk5FSWpZeDBJMHQxdkZENWVKa0s4WHFDUWdSRXdKOEUrS1M1RzZFdlRDeStxUWJZQWJDbVEzeDhwVUlFUk1EZkJBcFIvT3VnVXRPcVlXTFhrcmU0UFFuSi9Fejd0YWc4SXBBY0FmNWY1djlwL3Q4MktreThCamdHaFBRQUk2TitKaXFNQ0tSTWdFdG81VUd2cHB5U2pRbVlab0RYbzI1OGRLVkNCRVFnZUFSNm9rb1ZrREhQSFRiSkFIblc5eUJrNm5WSkZFMGhBaUtRSW9FemNUeEhocmVtbUk0dGg1dGlOcnhHTUJQS3RLVldTa1FFUk1Ca0FtVW8zRFVRQjBjOERSTUdRVEpBNEZGSTV1ZnBUMEdaaTRCckJQaC9uZi9uK1gvZjB6Q2hDM3dmQ0docEswOS9Cc3BjQkZ3bndFRVJUbmQ3MC9XY2EyVG90UUZ5WlplZjFpaVAzb3FBQ0lTSFFHOVVkVHZrMmUxeVhsNEQ1TnBoYzZBV2tFSUVSQ0NjQkE2ZzJsZEJXN3lvdmxkbmdFMVEyU2VoSEM4cXJUeEZRQVNNSWNESFcvU0Jsa0d1cnlidGxRSGVnc3BlQ0NsRVFBUkVvTk1KQkd2Y1J1SEZLUEFBVlBJR3R5dXEvRVJBQkl3bWNDTktSMjl3TmR5K0JzaVZYWGpkcjZ1cnRWUm1JaUFDZmlEQUFSRmVEK1FLTXE2RTIxM2czNkpXWDNlbFpzcEVCRVRBYndUYW9NQ2RJVDVuMkpWd3N3dk14UkV2Y3FWV3lrUUVSTUN2Qk9nUjlBcFh3cTB1Y0V2VVpqNmtKYTVjYVZabElnSytKc0JiNVBnQXRQMU8xOEt0THZBdlVKRnZPRjBacFM4Q0loQUlBaHdyNEVuVE8wN1h4bzB1Y0Y5VWdtNnVFQUVSRUFHckJPZ1o5QTVIdytrdU1DYzh6NGJ5SGEyRkVoY0JFUWdpQVQ1SDVHcm9pRk9WYzdvTFBCSUZIK1pVNFpXdUNJaEFvQWxrb1haSG9RK2NxcVdUWjRDODEvY3ZFRzkxVVlpQUNJaEFNZ1FPNDZBZlFJN2NLK3prTmNEYlVXaVpYekpOcm1ORVFBUWlCT2doOUJKSHdpa0Q1TExYNXpwU1lpVXFBaUlRTmdMMEVucUs3ZUdFQWZLNjR0MjJsMVFKaW9BSWhKa0FQY1gyTVF2YkUwUWh2dzlkRnVhVzhyTHVmZnYyYlhiQkJSZTA2ZFdyVjBaWldkblJ2WHYzdXI3RWtKZjFWOTZCSmRBZU5TdUJQck96aG5ZUGduQUM0eUlvMDg1Q0tpMXJCRWFOR3RYNSs5Ly9Qa2ZPcXVMbzBhTnByNzMyV3ZrVFR6eXhZL1Btelk1TkpZamtwMWNSY0poQUdkSWZBZTIxS3grN3p3QnZROEVHMmxVNHBXT2R3UGUrOTcwMnQ5MTJXNmVhUnpScTFDaXRvS0NnK1E5KzhJT3NaczJhcGYzakgvODRTRk5VaUlCUENUUkh1VGtvOHE1ZDViZnpHaUJYY2RBZEgzYTFUSUxwd0FDam5uWEQvTkp2dWVXV2pzdVdMZXM1ZE9qUVZna21yZDFGd0NRQzlCaDZqUzFocHdHT1JJazA3Y1dXWmtrOEVWeno0MS9IbUpHVGs1TXhmdno0N3BNbVRjcnAwYU9IMmlvbUxXMDBsQUIvdC9RYVc4S3VhNERkVUpvWElkNzZwdkNBd0xwMTYzcW5wMXR2em9xS2ltTi8vdk9mU3lkTW1GQjY2TkNoWXg0VVdWbUtRTElFZUQyYmc2M2JrazBnY3B4ZFo0QTNJVUdaWDRTcUI2K0ptQitMbDVHUmtUNXk1TWpzbDE1NktYL1lzR0hxRm52UVpzb3lhUUwwR25wT3ltSDlsQ0Y2VmlkaDB3TElMak9ObnBPMlJDWHd5U2VmOUk2NjBjS0cxYXRYN3gwOWVuVFJmLzd6SDk1NnBCQUIwd2x3ZXRjVjBKZXBGTlFPMDdvWkJiQWpuVlRxb1dOVEpEQm8wS0RXQ3hjdXpML3JycnV5VzdSb1ljY2Z4aFJMcE1ORklDWUJlZzY5SjZWSTFiaDZJdmNMVWlxQkRqYUdRTk9tVGROdnZQSEdxbTd4aFJkZXlEbWRDaEV3bVFDOWh4NlVkS1JxZ05jaVo1MHRKSTNmekFNN2QrN2M5UEhISDgrZE5tMWFkOHdqMUdpeG1jMmtVaDMzSG5wUTBwR0tBV1lqVnoza0tHbjA1aDg0Y09EQVZpKysrR0wrUGZmY2s5MnlaVXY5b1RPL3ljSllRbm9RdlNpcFNNVUFPU0ZSWndkSllmZlBRVTJhTkVtLzdycnIyQzB1R0Q1OHVMckYvbW02c0pTVUhwVDBEUmpKL2xYbnBOdVhvYlpob1d4NlBWTWRCYlphdjdWcjErN2phUEdHRFJzcXJCNmovVVRBWVFLN2tmN0YwTUZFODBuMkRKQ3J2Y2o4RXFVZGdQM1BPT09NVnZQbno4Ky83Nzc3T3JacTFTclpQNkFCSUtFcUdFU0FYcFRVQ2xUSkdDQ1A0WU5LRkNFbGdHNXgyalhYWE5QaDVaZGZMaGd4WWtTYmtHSlF0YzBpUUU5SzJNOFNQZ0NabkF2bG1GVjNsY1lMQXRuWjJVM1FIYzZaUFh2MlNiMTc5ODd3b2d6S1V3Uk9FS0FuMFpzU2ltUU1rTE92RlNKUVRhQi8vLzR0NTgyYmwzLy8vZmQzYXR1MmJUSy9xZXEwOUVZRVVpQ1FzRGNsK21QbGs5N09TcUdBT2pTZ0JOZ3R2dXFxcTlxalc1eC8rZVdYNi9wd1FOdlo4R3JSbStoUmxpTlJBK1JxckFvUmlFb2dLeXVyeWU5Ly8vdHVjK2ZPUGFsUG56N05vdTZvRFNMZ0RJR0VCa01TR2NYakNnekxvS1FuSFRwVFg2VktBbTVOZzBtRU5sZWZ4a1RxbmVQR2pTc3BMeS9YczBrU2dhZDlreVZRZ2dPSFE1WWVBWkhJR2VCZ0pDcnpTN1paUW5oYzQ4YU4wN0FjUDd2RkJWZGVlYVc2eFNIOERYaFFaWG9VdmNwU0pHS0E2djVhUXFxZDZoTEl6TXhzL01BREQzVEQvTUVlL2ZyMVU3ZTRMaUI5dHB1QVphK3kyZ1htR3Z4TG9VUU0wKzVLS2IwWUJFenNBamRVM01yS3lqUXN1N1dMVDZyRFl6dlZMVzRJa3I1TGxRQi9WOStGaXVJbFpOWFFlTU94MVgzajVhbnRJU2JBSjlWaGxEaHIrZkxsQlZkZmZYVzdSRmV5RGpFNlZkMDZBWHFWcFlWYXJKcmFNT3Q1YTA4UmlFOEE4d1ViLytZM3YrbTZZTUdDdkFFREJzUjlvRlA4RkxXSENOUWlNTFRXcHlnZnJCaGdkeHg3YXBUajliVUlwRVFBZDVBMG56bHpadDZZTVdPNnRHL2YzdTduVktkVU5oM3Nhd0o4UkFTOUsyWllNY0R6WTZhZ2pTS1FJZ0YyZ3krNzdMSk1UcUsrOXRwck16bDZyQkFCR3dqRTlTNHJCcWp1cncwdG9TVGlFMmpUcGszalgvM3FWMTNZTFQ3enpEUFZMWTZQVEh2RUpoRFh1K0laWUI3Uzd4VTdEMjBWQVhzSm5ITEtLYzJuVDUrZTk4Z2pqM1RCZ2dzNkhiUVhiNWhTbzNmbHhhcHdQQU9NNjZDeEV0YzJFVWlGd0NXWFhKTEpsYWl2di81NmRZdFRBUm51WTJONldEd0R0RFNTRW02K3FyMlRCRnEzYnQzb2w3LzhaUmZjVXBkMzl0bG50M0F5TDZVZFNBSXhQU3lXQVhZQmpvSkFJbEdsZkVlZ1Y2OWV6YWRPbmRyanNjY2U2OXFwVXlkMWkzM1hncDRWbUI1R0wyc3dZaG5nb0FhUDBKY2k0Q0dCaXk2NnFOMnlaY3NLUm80Y21jVWx1QlFpWUlGQVZDK0xaWURuV0VoWXU0aUE2d1R3TEpKR2Q5NTVaK2RGaXhiMUhEUm9rTHJGcnJlQTd6S002bVhSREpCL1dyWHdxZS9hT1Z3Rjd0bXpaN01wVTZiMGVQTEpKN3NpZERvWXJ1WlBwTGIwc2daL0g5RU1zRDhPYUpWSUR0cFhCTHdpTUd6WXNIWkxsaXpKditXV1c3S2FObTNxVlRHVXI3a0U2R1gwdEhvUnpRQy9XVzlQZlNFQ0JoTm8yYkpsbzUvLy9PZWRGeTllM1BOYjMvcFdTNE9McXFKNVE2QkJUNHRtZ0ZIN3pONlVYYm1LZ0RVQ1BYcjBhRFpwMHFTVG5ucnFxVzZJQnJzOTFsTFNYZ0VqMEtDbk5XU0FtYWg0cjRCVlh0VUpHWUh2Zk9jN2JaY3VYVnB3NjYyM3RsZTNPR1NOMzNCMTZXbjB0bHJSa0FFMjJGZXVkWlEraUlBUENEUnYzano5dHR0dTZ3UWp6Qjh5WklpNnhUNW9NNGVMV00vYlpJQU9FMWZ5M2hQbzNyMTd4b1FKRTA2YU9IRmlUbTV1cnJyRjNqZUpWeVdRQVhwRlh2bDZUK0RiMy81Mkc0d1dGMkN3cEVOR1JvYlZ4MEY0WDNDVndDNENjUTB3QXpsOXphN2NsSTRJbUVhZ1diTm02Wmd1MHhGM2svUWNPblNvcG5xWjFrRE9sb2ZlUm8rcmpycGQ0Tk93UlJPcHF2SG9UVkFKNU9Ua1pJd2ZQNzc3TTg4OGs0T1JZLzNtZzlyUXRldkZkcWJIVlVkZEE2eDNpbGk5cDk2SVFBQUpEQjQ4dUExdXFjdS80NDQ3T3ZEc01JQlZWSlZxRTZqbGNUTEEybkQwS1lRRWVEM3dKei81U1Vlc1BaaC93UVVYdEE0aGdqQlZPYVlCOGtFaUNoRUlKUUhjVDl3VXp5dk94ZjNGdWJqUFdOM2lZUDRLYW5sY3pUUEFOcWd2SDRDdUVJRlFFOEFLTTYzeDhQYjh1KysrTzd0Rml4YnFGZ2ZyMTBDUG85ZFZSVTBEMU4wZkVTcDZEVDBCM0QyU2ZzTU5OMlN6VzR3MUNOVXREdFl2b3RycmFocmd5Y0dxbzJvakFxa1Q2Tnk1YzFPc1FwMDdiZHEwN2dVRkJlb1dwNDdVaEJTcXZhNm1BVmE3b2drbFZCbEV3Q1FDQXdjT2JJWG5rdVRmZSsrOUhiSHlqTHJGSmpWTzRtV3A5cnFhQmxqdGlvbW5weU5FSVBnRXNBUi8rbzkvL09NT2ZGTGQ4T0hEcTY4akJiL21nYXRodGRkRkRKQi8wZlFBcE1DMXN5cmtCQUU4bEtuSjJMRmpjMmJNbU5IOTFGTlByWFZuZ1JQNUtVM2JDZERycXM3aUl3YllEVjlvdFF6Yk9TdkJJQk00NDR3eldzMmZQei8vMTcvK2RVYzhwMFRkWXY4ME5yMk9ucGNXTWNCYy81UmRKUlVCY3dqd3lYUS8rdEdQT3J6ODhzc0ZJMGFNVUxmWW5LYUpWNUlxejRzWVlOZDRlMnU3Q0loQWRBTFoyZGxOUm84ZW5UTjc5dXlUZXZmdXJXNXhkRlNtYktueXZJZ0I1cGhTS3BWREJQeE1vSC8vL2kzbnpadVgvOEFERDNScTI3WnQ1UCtYbjZzVTFMSlhlVjZrZ1hRR0dOUm1WcjFjSjhCdThaVlhYdGtlM2VMOEs2NjRvcTNyQlZDR1Znam9ETkFLSmUwakFza1N5TXJLYXZLNzMvMnUyOXk1YzAvcTA2ZFBzMlRUMFhHT0VOQVpvQ05ZbGFnSTFDSFF0Mi9mbHJnMjJCTm0yTGxkdTNhUlhsZWR2ZlRSWlFMVlo0RDh5NVR0Y3ViS1RnUkNSYUJ4NDhacDZBNW5jYlFZM2VOMjZlbWFOZVB4RDRDZTE0eC9qWFQ5eitPV1VQYmhJWkNabWRrWUF5UmRNVkRTbzErL2Z1b1dlOXYwWFdtQVdkNldRYm1MUVBnSW5INzY2UzFtelpyVkUxTm5Pc01VMVMzMjVpZVFSZkR0dk1sYnVZcEF1QWswYXRRb0RaT25zNVl2WDE2QXlkVHFGcnYvYzZpNklGdnZhZW51bDBNNWlrQjRDV0MrWUdQY1R0ZDF3WUlGZVFNR0RHZ2VYaEt1MTd6cTFGc0c2RHAzWlNnQzlRbmdEcExtTTJmT3pIdm9vWWU2dEcvZnZuSDlQZlNOelFSa2dEWURWWElpa0JJQmpnNWZldW1sbVp4RWphVzNNamw2ckhDTVFKVUI2aHFnWTN5VnNBZ2tSNkJObXphTnNmaHFGM2FMenpyckxIV0xrOE1ZN3loZEE0eEhTTnRGd0VzQ3A1eHlTdlBubjM4Kzc5RkhIKzJDQlJkME9taHZZK2dNMEY2ZVNrMEVuQ0Z3OGNVWFozSWxhanlvU2QxaSt4QlhuUUhxOU5vK29FcEpCQndqMExwMTYwWjRWR2NYUExLejU5bG5uOTNDc1l6Q2szQnp6Z1BVMm1YaGFYRFZOQUFFOEhTNlpsT25UdTB4YnR5NHJsaWVYOTNpNU5zMGd3YllKUG5qZGFRSWlJQlhCTTQvLy94Mnk1WXRLN2o1NXB1enVBU1hJbUVDVFhRR21EQXpIU0FDNWhEQXMwZ2EzWDc3N1owWEwxN2NjOUNnUWVvV0o5WTBWV2VBZXRoell0QzB0d2dZUnlBdkw2L1psQ2xUZXR4Ly8vMGROWGZRY3ZNMDVSbWdETkF5TCswb0FtWVR1T3FxcXpvOCtPQ0RuYzB1cFRHbGt3RWEweFFxaUFqWVJPRHl5eS9QMGozRmxtREtBQzFoMGs0aTRETUM1NTEzWG11ZkZkbUw0bFlab0JjWkswOFJFQUVSOEp3QXJ3RWU5cndVS29BSWlJQ3RCRjUvL2ZXOXRpWVl6TVFPeXdDRDJiQ3FWWWdKdlBqaWk3cysvUEREZ3lGR1lMWHFoemw3VW1lQVZuRnBQeEV3bk1DY09YTktzWjdnRHNPTGFVcnhxZ3l3d3BUU3FCd2lJQUxKRWRpMGFkT2hNV1BHRkw3OTl0c0hra3NobEVkVjZBd3dsTzJ1U2dlRndMNTkreXFuVFp0Vzh1eXp6KzQ4Y3VSSVVLcmxWajNVQlhhTHRQSVJBYnNKckZ5NWNqZk8rb29RUisxT095VHB5UUJEMHRDcVpvQUlmUEhGRjFYZDNkV3JWNnU3bTFxN1ZobWdSb3RTZzZpalJjQVZBdXp1NG43ZkhWZ0thNWU2dTdZZ1A4QnJnR1cySktWRVJFQUVIQ093WXNXS2NuUjNpM2ZzMktIdXJuMlV5Mm1BNWZhbHA1UkVRQVRzSkxCeDQ4YURmL2pESHdyZmYvOTk5ZFRzQkhzOHJTb0QxQm1nL1dDVm9naWtSR0RQbmoyVmt5ZFAzakY5K3ZSZFI0L3FwQzhsbU5FUEx0TVpZSFE0MmlJQ3JoTTRkdXhZMnZMbHk4dkdqaDI3bzZTa1JNN25iQXZvRE5CWnZrcGRCS3dUMkxCaHc4SFJvMGNYcmwyN1Z0MWQ2OWhTMmJQcURGQmQ0RlFRNmxnUlNKSEE3dDI3ai83cFQzL2FNV1BHakRLZUFTcGNJNkF1c0d1b2xaRUkxQ0ZBczF1NmRHblpJNDg4VXJ4cjE2N0tPcHYxMFhrQ1ZWM2dYYzdub3h4RVFBUnFFbGkvZnYyQlVhTkdGV25WbHBwVVhIKy9rNE1nMjEzUFZobUtRRWdKbEplWEg1MDRjV0x4ckZtenl0WGQ5ZnhIVUVnRFBBU1ZRTm1lRjBjRkVJR0FFcWlzckV4YnNtVEpMblIzZDhBRTFkMzF2cDNwZVlkb2dBeWVCY29BcTFEb0h4R3dsOEM2ZGVzT2NETHp4eDkvekpNTmhSa0VxbnErRVFQY2lqTDFOYU5jS29VSUJJTUFCamFPUHYzMDA4Vno1ODdWM1ZibU5TazlMeTFpZ0xvT2FGNERxVVErSmNBN054WXVYTGpyaVNlZVVIZlgzRGFzZHdab2JsRlZNaEh3Q1lGLy92T2Yrem02Kyttbm42cTdhM2FiNlF6UTdQWlI2ZnhFb0xTMDlNaFRUejFWdkdEQmd0MStLbmVJeTFyckRIQnppRUdvNmlLUU5BR3V5L2ZDQ3kvc1JIZTNaTy9ldlJyZFRacWs2d2RXZVY3TmE0RDdVWVNXcmhkREdZcUFUd2w4OE1FSCt6bTZpM3Q0OVdBeGY3VWh2YTdXR1NCdlFQdzNwSkZnZnpXa1N1c0JBU3hLZW1UOCtQRkZHT2pZNDBIMnlqSjFBdlM2cXB1dUkyZUFUUEp6U0FaSUVnb1JhSUFBdTd0LytjdGZTdG5kM2I5L3YxWXRhSUNSVDc2aTExVkZYUU9NZks5WEVSQ0JHZ1RXckZtemo2TzdXS0ZaM2QwYVhIejZ0a0VEM09qVHlxallJdUFZZ2VMaTRpUGp4bzByd20xczZ1NDZSdG4xaEt1OXJ1WVpZUFdYcmhkSEdZcUFZUVRRM1QwMlo4NmNuWmphb3U2dVlXMWpRM0dxdmE2bUFmSXZYQ0hVeFlZTWxJUUkrSmJBZSsrOXgrNXVJWjYvZTlpM2xWREJveEdneDFXZnpkYzBRQjZ3QVpJQmtvUWlkQVFLQ3dzUFAvcm9vMFd2dlBMSzN0QlZQandWcHNkVlIxMEQvQWhidmwyOVZXOUVJQVFFS2lvcWpzMmVQYnNVQ3hlVUhqaHdRS083d1c1emVseDFOR1NBMVJ2MVJnU0NUbUQxNnRWN01abTVhTk9tVGVydUJyMnhqOWN2cGdGK2huMzRRMmdhRGhhcVpWZ0piTnUyamQzZHdoVXJWdXdMSzRNUTFwdmVSbytyanJwbmdKemo5Q25VdjNvUHZSR0JBQkU0ZE9qUXNaa3paNVpPbURDaGxPOERWRFZWSlQ0QmVsdXRlWngxRFpCSjhCUlJCa2dTaWtBUmVPdXR0L2F3dTd0NTgrWWpnYXFZS21PVlFLM3VMdytLWm9CV0U5UitJbUE4Z1MxYnRsU01IVHUyNlBYWFgxZDMxL2pXY3JTQU1rQkg4U3B4b3dnY1BIancyUFRwMDBzbVRacFVldml3eGppTWFoeHZDbVBKQU10UU5zNlU3dVZOR1pXckNLUk80SzkvL2V1ZTBhTkhGMjNkdWxYZDNkUnhCaUVGZWhxOXJWWTAxQVhtRG05RE1zQmFxUFRCRHdTKy9QTExpb2NlZXFqd3pUZmY1SnB2Q2hHSUVLQ24xWXRvQnZnTzlyeXUzdDc2UWdRTUpZQUp6SlhUcGswcm1UeDU4azUxZHcxdEpHK0xSVStyRjlFTWtIMWxYakJ1VmU4SWZTRUNoaEY0N2JYWGR1T3NyM2o3OXUzcTdocldOb1lVaDE1Vzcvb2Z5eGJOQVBsRGVoOGFBaWxFd0VnQ3VIdmpFSXl2Q05OYjFOMDFzb1dNS1JTOXJNRS9qdEVNa0NWbm4za0kzeWhFd0NRQysvYnRxM3p1dWVkS29KMWNwVmtoQW5FSU5IajlqOGZFTXNEVmNSTFZaaEZ3bmNDcnI3N0s3bTRSNHFqcm1TdER2eEtJNm1XeERKRHJabTJFZXZtMTFpcDNjQWhnYmI1RG1OWlMrTzY3N3g0SVRxMVVFeGNJME1Qb1pRMUdMQVBrQWE5Qk1zQUcwZWxMTndqd1didlBQdnZzanVlZmYzNlh1cnR1RUE5Y0h2U3dxQkhQQUYvRmtiZEVQVm9iUk1CQkFsaVl0UHpoaHg4dXhtTW8xZDExa0hQQWs2YUhSWTE0QnJnSlI2b2JIQldmTmpoQkFFOWVPNGhGQ3dyZmYvLzlnMDZrcnpSRFE0RGV0U2xXYmVNWklJOWRBYWtiSEl1aXR0bENZTStlUFpYUFBQTk04WXdaTThxT0h0VkpueTFRdzUwSXZTdG1XREZBbmtMZUdqTVZiUlNCRkFnY08zWXNiZm55NVdWWXNXVkhTVW1KbkM4RmxqcTBGb0dZM1YvdWFjVUFOMk8vOVZCdkhxQVFBVHNKYk5pdzRTQkhkOWV1WGF2dXJwMWdsUlk5aTk0Vk02d1lJQk5ZQ2NrQVk2TFV4a1FJN042OSsrakVpUk4zWUhYbU1wNEJLa1RBWmdKeHovNlluMVVEWEk1OTJRMXV4SU1VSXBBc0FacmRraVZMeXZBOGp1SmR1M1pWSnB1T2poT0JHQVQ0dTNvbHh2YnFUVllOc0FoSGNEV0Z3ZFZINm8wSUpFamcwMDgvUGNBMStqNzg4RU4xZHhOa3A5MFRJa0N2b21mRkRhc0d5SVFXUVRMQXVFaTFRMTBDNWVYbFIvSE0zZUk1YythVXE3dGJsNDQrTzBDQVhtVXBFakhBdDVCaUNaUnRLV1h0RkhvQ2xaV1ZhWXNXTGRyMTJHT1A3WUFKcXJzYitsK0VLd0RvVWZRcVM1R0lBUjVCaWt1aEd5eWxySjFDVFdEZHVuVUhPSm41NDQ4L1BoUnFFS3E4MndUb1VmUXFTNUdJQVRMQnhaQU0wQkxhY082RWdZMGpmL3pqSDR2bnpadTNPNXdFVkd1UENkQ2pMRWVpQnJnRktiOEhEYlNjZzNZTUJRSGV1YkZ3NGNLZGp6LytlQW1tdUtpN0c0cFdONjZTOUNaNmxPVkkxQUNaOEFKSUJtZ1pjZkIzL09pamovYWp1MXVFVVY1MWQ0UGYzQ2JYa042VVVDUmpnS3VRQTEwMk42R2N0SFBnQ0pTV2xoNFpQMzU4OFFzdnZLRHVidUJhMTNjVm9pZXRTclRVeVJnZ3V6ZXpvWHNTelV6N0I0TUExK1Zic0dEQnpuSGp4cFZ3dmI1ZzFFcTE4RGtCZWxMQ3Y4VmtESkNjbGtBL2hkcnlneUk4QkQ3NDRBTjJkd3R4RDI5RmVHcXRtaHBPZ0QwUWVsTENrYXdCY2lZLys5czNKcHlqRHZBbEFTeEtldVRKSjU4c3dyeStQYjZzZ0FvZFpBTDBvcVR1TGtyV0FBbHpQblF0MUpRZkZNRWt3TzR1cHJTVXd2eEs5dS9mcjFVTGd0bk1mcTdWWVJTZVhwUlVwR0tBSmNpUml5UmNtbFRPT3NoNEFtdldyTmszYXRTb0lxelFyTzZ1OGEwVjJnTFNnK2hGU1VVcUJzZ01aMERmaGRMNVFSRU1Bc1hGeFljeG42OW8yYkpsZTROUkk5VWlvQVRZSTZFSEpSMnBHdUFtNVB5LzBJVkpsMEFIR2tNQTNkMWpzMmJOS3NYQ0JhWHE3aHJUTENwSWRBSmM4bXBUOU0zeHQ2UnFnTXhoTWpRTWFzd1BDbjhTK1B2Zi83NlhrNW54L0YxZVUxR0lnT2tFK09pRVoxTXRwQjBHK0NVSzhSS2thNEdwdG9ZSHh4Y1dGaDdHNHFSRmVBU2x1cnNlOEZlV1NST2c1OUI3VWdvN0RKQUZtQUpkRE5tVkh0TlVKRUNBNit5bHAxdS9GRnRSVVhFTXk5R1hZbG42MGdNSERtaDBOd0hXMnRWekFsenRoWjZUY3RobFdOdFFFcTdDY0huS0pWSUNTUkhnTXpiYXRXdG42VExFTysrOHM1Y3JNMi9hdEVuZDNhUm82eUNQQ2RCcjZEa3BSNk9VVS9ncWdhbDRxLzlRWC9GdzlSMGZKaDR2dzIzYnRoMyt4Uzkrc2ZtbW0yN2FJdk9MUjB2YkRTVkFqNkhYMkJLV3poZ3M1clFQKy9IV3VINFc5OWR1OWhJNGR0NTU1NUYvdlRoMDZOQ3hhZE9tbGR4eHh4M2JQdi84YzgzcHEwZElYL2lJd0Z5VWRhVmQ1YlhUQUZtbWRkQUlxRGsvS053anNINzkrb3JjM056R3ZYdjNiaEhKbFd2MHJWeTVzdnoyMjIvZnNtTEZpbjM4ckJBQkh4TW9ROW01Q0l0dGY4U3RYelczVG8zWEFlK3p2cnYydEpOQXYzNzltZzBZTUtBRlYybFp2WHIxL3UzYnQvT0NzVUlFZ2tEZ0lWVGlCVHNyNG9RQjhxeHlGdFRMem9JcUxSRVFnVkFUMklqYS93aXl0UnRqNXlCSXBIVll3TWNpSC9RcUFpSWdBallRb0tmWWFuNHNreE1HeUhUWFFHL3dqVUlFUkVBRVVpUkFMNkduMkI1T0dTQUxPaDdTdEJqYm0wd0ppa0NvQ05CRDZDV09oTjJqd0RVTHlWVmFhYkJuMXZ4UzcwVkFCRVFnQVFLODQyTlZBdnNudEtzVGd5QTFDOEE3VGJoV2YzN05ML1ZlQkVSQUJDd1ErQUw3WEEwNU5wUEJ5UzR3NjhlQ2o0SjByeWxwS0VSQUJLd1NvR2ZRT3h3elB4YkV5UzR3MDJjVVErMmdQdnlnRUFFUkVBRUxCT1pobjBVVzlrdHBGNmU3d0pIQ3RjUWJydHZmSmZLRlhrVkFCRVFnQ29GQ2ZQOURhSCtVN2JaOTdYUVhPRkpRVnVUaHlBZTlpb0FJaUVBTUFyemp3M0h6WS81dWRJRWo5ZndTYjNLaGt5TmY2RlVFUkVBRTZoQjRHWjluMVBuT3NZOXVkWUVqRldpTk4zT2dycEV2OUNvQ0lpQUNKd2hzeCt0VmtHdXJrN3Q1QnNnNmNoV0h6NkRoa052bWl5d1ZJaUFDaGhLb1JMbnVoTmhUZEMzY05rQldqQmM0bWU5LzhZTkNCRVJBQkVEZ09XaVoyeVRjR2dTcFc2OHArSUpyQnlwRVFBUkVnRjVBVDNBOXZPeUdja0NFMXdPckYvQjB2ZmJLVUFSRXdHc0NCMUFBWHZmYjRrVkJ2T2dDUitySmU0VjNRRU1pWCtoVkJFUWdkQVJHbzhhT3JQUmloYVNYQnNqeS9RdnFCUFhtQjRVSWlFQ29DUEJPRDArNnZoSEtYbmFCSTJYSXdCdGVBRDB0OG9WZVJVQUVBaytBczBGR1FyWTkzeU1aWWlZWUlNdk5XK1JtUXBuOG9CQUJFUWcwQVQ3YzZCcUlNMEk4RGErN3dKSEtjK0xqZXVnaXlCUlRqcFJOcnlJZ0F2WVI0SHkvdTZBTjlpV1pmRXFtR0NCcnNCWGk2cThEK1VFaEFpSVFTQUlUVUt1WFRLbVpTUVpJSmg5Q2ZKcGNUMzVRaUlBSUJJckE2NmpOb3liVnlEUURKSnUvUVlPZ2p2eWdFQUVSQ0FRQkRucndWcmNqSnRYRzFPdHRIUUJwT3FUMUEwMzZ0YWdzSXBBY0FRNTJYQWVWSm5lNGMwZDVkU3RjdkJvUjFNOGhEbzRvUkVBRS9FdUEvNGY1ZjlrNDh5TlNFN3ZBTEJkakYvUUpkQ0ZrcWxHamFBb1JFSUVvQk5qZHZRUGkvMk1qdzJRREpMQnRFRStmaDBBS0VSQUJmeEg0UFlxN3l1UWltMjZBWk1mYjVSaG5ISC9SdnlJZ0FqNGdNQmxsNUdJblJvY2ZESkFBMTBKY1Rib3ZQeWhFUUFTTUpzQm5nVDl0ZEFsUEZNNHZCc2ppcm9ZNE5VYjNESk9HUWdUTUpMQVF4WHJFektMVkw1V2ZESkNsZnh2cURuR3l0RUlFUk1Bc0FxK2dPS01nUHRUY0YrRTNBeVRZTnlFYVlCNmtFQUVSTUlQQUtoVGpmdWlvR2NXeFZncS9HU0JyeFp1cDM0RDZRTG1RUWdSRXdGc0M3eUw3WDBKRzNlVmhCWWtmRFpEMW9nbnl2c0t2UVRKQlFGQ0lnRWNFZUcyZTV1ZnB1bjdKMXQydkJzajY4cS9OcTVDNnc2U2hFQUgzQ2F4Q2x2ZEF2alEvNHZLekFiTDhrVE5CbmdWcVlJUkVGQ0xnRGdFT2VOd1A4VVRFdCtGM0F5UjRtdUFxS0J2U0ZCbEFVSWlBd3dRNDFXVVU1S3NCajRhWUJNRUFXUytPRHY4TjBtUnAwbENJZ0hNRU9NbVo4L3g4TTlVbEZvcWdHR0NranJ3Z3k5QnRjOGM1NkY4UnNKTUFiMi96eFIwZVZpc2ROQU5rdlhuYjNEWm9NS1JWWkFCQklRSXBFdUIxUGk1c1lQeTl2WW5XTTRnR1NBYi9najZDaGtBWmtFSUVSQ0E1QWx6UGowdGFyVXJ1Y0xPUENxb0JranJQQW5uWHlIOUR2RGFvRUFFUlNJd0FsNkw3S1dUc2VuNkpWYWYrM2tFMlFOYVdpNnIrTDNRbXhJVVVGQ0lnQXRZSThCa2VORCtlU0FRMmdtNkFiTGdEMEhJb0Qrb0pLVVJBQkdJVDRGMVdmSURSbnRpNytYOXJHQXlRcmNTTHVMeHJoRFBXZVRhWURpbEVRQVJxRStDYzJna1FIMTNwNnduT3Rhc1YvVk5ZRERCQ2dNOGQ1dURJT1ZEenlKZDZGUUVSU0NzRGc3dWdsOExFSW13R3lMYmRDcTJBdmc3cHVpQWdLRUpQZ05mN2ZnWnRDQnVKTUJvZzI1aEQrL3hMMXdIcURTbEVJS3dFRnFIaTkwTGxZUVFRVmdOa1cvTStSazZUMlE2ZERUV0ZGQ0lRRmdJSFVORXgwQlRJOS9mMEp0dG9ZVGJBQ0ROT211WUFDUmRZN1JUNVVxOGlFR0FDNjFDMzI2QTFBYTZqcGFySkFJOWoybzJYWlJCSGh3ZWNlTVdMUWdRQ1JZQ2p2Rk9oLzRFNDZCSDZrQUYrOVJQZ2o0Ti9FZCtIem9MYVFBb1JDQW9CWHVyaDNENytvZWR2WFFFQ01zRDZQNE5DZkxVVTZneWRYSCt6dmhFQjN4RllqaEx6ZnQ0dmZWZHlod3VzQ2NHeEFRL0c1bDlCWFdMdnBxMGlZQ1FCL2pGL0dIckx5TklaVUNpZEFjWnVCUDdGNURTQmx0RHBrUDVnQUlMQ2VBSmNySFEreE9kMS9OdjQwbnBZUVAySHRnNi9MM2I5TFpSdi9SRHRLUUt1RS9nQ09ZNkNQblk5Wng5bUtBTk1yTkU0Vi9CNjZFWkk4d1lCUVdFTWdjTW9DVWQ0cDBHaHVJL1hEdkl5d09RbzV1S3cyNkZ6a3p0Y1I0bUFyUVRlUUdyam9TMjJwaHFDeEdTQXFUWHltVGo4YmtpUDVFeU5vNDVPanNCR0hQWVlGUG9KemNuaDAwWDlaTG5WUEk0RFNTTWcza3llV1hPRDNvdUFRd1E0aVhrU3hBRzYwTjdHWmdkYm5RSGFRZkY0R3EzeGNoUDBRMGpYQjQ4ejBiLzJFdUIxUG83dVBndnR0VGZwY0tZbUE3Uy8zVG1CZWlSMEtkVEUvdVNWWWdnSmNGQmpDZlFjVkJUQytqdFdaUm1nWTJqVHVpRnBuaEZlQWpWeUxodWxIR0FDdkdXTnk3YnhqQy9Reitid3FnMWxnTTZUUHdsWjNBeGRBSW0zODd5RGtBTW5Ndk5oWHBNaFRzWlhPRVJBL3lFZEF0dEFzajN4M2JYUVJaQ3VFVFlBU0YrbDhSb2Y3OXY5TS9RZjhYQ2VnQXpRZWNaMWM4akdGeHdvdVFKcVczZWpQb2VTQUpkald3QnhnS01rbEFROHFyUU0wQ1B3eUxZNWRCbDBOWlFES2NKSFlDdXFQQnRhREIwTVgvVzlyN0VNMFBzMjRBREp1UkRQQ0xrT29TTDRCTGptSk0vNGVBY0hCem9VSGhHUUFYb0VQa3Eydk1XT2s2cUhRK3dxSzRKRGdGM2JaUkFuTCt1V05VUGFWUVpvU0VQVUtRYm5EdzZHYUliZmhEU05CaEI4R0R5N2V3ZWk2YjBGY1Q2ZndpQUNNa0NER2lOS1VUaXhtaVBIdzZCVG8reWpyODBpd09mcnZncHhSRmNUbDgxcW0xcWxrUUhXd21IOGgrNG80ZmtRemJDWDhhVU5Wd0Uzb3JvMHZSWFE1bkJWM2IrMWxRSDZ0KzN5VUhRYTRWQ29BRks0VCtEZnlISWxST1BiQkNsOFJrQUc2TE1HaTFKY1ByTmtFSFFPeEpIa1ZwRENmZ0w3a0NSSGNOK0dWa044NW9iQ3h3UmtnRDV1dkNoRjV3QktmNGlESnpSRWRaVUJJWVZnMTVhR3g4R01qeUFOWkFCQ1VFSUdHSlNXakY2UFRHeWlJVWIwTmJ4dkduMzNVRzg1ak5wL0N0SG9JaW9MTlpHQVYxNEdHUEFHYnFCNkdmanVOQ2hpaUwzeG5pUE5ZUXlPMEs2SEltYjNHZDVYaEJGRVdPc3NBd3hyeTlldWR4dDhaRmY1NUJxdkhGaHBDUVVoOXFNU0hMRDRIR0tYTnZLNkIrOFZJU1lnQXd4eDQ4ZXBPbjhiM2FCY3FDdVVVK2ZWdER0VmVLZkZkbWhybmRjdCtMd040aEpUQ2hHb1JVQUdXQXVIUGlSQW9CbjJwVEZtUWUwZ1htdU1LUEtacjF6MGdkMXVEczd3bGRjZmF3b2ZxNWFCNHZXM2lOZ041V0FEWDdsSVFEbkVhM0dSVjc2UGZONkY5elMrUTVCQ0JCSWk4UCs1c0NlZDN0ZmRkUUFBQUFCSlJVNUVya0pnZ2c9PScsXG4gIHBsYXlDaXJjbGVCb3JkZXI6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSGRwWkhSb1BTSTJNQ0lnYUdWcFoyaDBQU0kyTUNJK1BHY2dabWxzYkQwaWJtOXVaU0lnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWo0OFkybHlZMnhsSUdONFBTSXpNQ0lnWTNrOUlqTXdJaUJ5UFNJeU9TSWdjM1J5YjJ0bFBTSWpSa1pHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpTHo0OGNHRjBhQ0JtYVd4c1BTSWpSa1pHSWlCa1BTSk5NaklnTVRjdU1USjJNall1TTJFeElERWdNQ0F3TURFdU5UUXVPRFJzTWpBdU55MHhNeTR4TldFeElERWdNQ0F3TURBdE1TNDJPV3d0TWpBdU55MHhNeTR4TldFeElERWdNQ0F3TUMweExqVTBMamcxZWlJdlBqd3ZaejQ4TDNOMlp6ND0nLFxuICBhcnJvd1RvcDogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJeE5pSWdhR1ZwWjJoMFBTSXhOaUkrUEdjZ1ptbHNiRDBpYm05dVpTSWdabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJajQ4Y0dGMGFDQmtQU0pOTUNBd2RqRTJhREUyVmpCNklpQnZjR0ZqYVhSNVBTSXVOU0l2UGp4d1lYUm9JR1pwYkd3OUlpTkRRME1pSUdacGJHd3RjblZzWlQwaWJtOXVlbVZ5YnlJZ1pEMGlUVEl1TlRjZ01UQXVNamRoTGpnekxqZ3pJREFnTURFdE1TNHhOQzB4TGpKc05pMDFMalk0WXk0ek1pMHVNeTQ0TWkwdU15QXhMakUwSURCc05pQTFMalkzWVM0NE15NDRNeUF3SURFeExURXVNVFFnTVM0eU1VdzRJRFV1TVRWc0xUVXVORE1nTlM0eE1ub2lMejQ4TDJjK1BDOXpkbWMrJyxcbiAgY2xvc2U6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSGRwWkhSb1BTSXpNaUlnYUdWcFoyaDBQU0l6TWlJK1BIQmhkR2dnWm1sc2JEMGlJMlptWmlJZ1pEMGlUVEk1TGpZMUlEUXVNRFZoTVM0eUlERXVNaUF3SURFd0xURXVOeTB4TGpkc0xUSTFMallnTWpVdU5tRXhMaklnTVM0eUlEQWdNREF4TGpjZ01TNDNiREkxTGpZdE1qVXVObm9pTHo0OGNHRjBhQ0JtYVd4c1BTSWpabVptSWlCa1BTSk5NaTR6TlNBMExqQTFZVEV1TWlBeExqSWdNQ0F4TVRFdU55MHhMamRzTWpVdU5pQXlOUzQyWVRFdU1pQXhMaklnTUNBd01TMHhMamNnTVM0M1RESXVNelVnTkM0d05Yb2lMejQ4TDNOMlp6ND0nLFxuICBjYXN0Tm90Q29ubmVjdGVkOiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpZaUlHaGxhV2RvZEQwaU16WWlJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajQ4WnlCbWFXeHNQU0p1YjI1bElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlQanh3WVhSb0lHUTlJazB4SURFNGRqTm9NMkV6SURNZ01DQXdNQzB6TFRONmJUQXROSFl5WVRVZ05TQXdJREF4TlNBMWFESmhOeUEzSURBZ01EQXROeTAzZW0wd0xUUjJNbUU1SURrZ01DQXdNVGtnT1dneVFURXhJREV4SURBZ01EQXhJREV3ZW0weU1DMDNTRE5oTWlBeUlEQWdNREF0TWlBeWRqTm9NbFkxYURFNGRqRTBhQzAzZGpKb04yRXlJRElnTUNBd01ESXRNbFkxWVRJZ01pQXdJREF3TFRJdE1ub2lJR1pwYkd3OUlpTXdNREFpTHo0OGNHRjBhQ0JrUFNKTk1DQXdhREkwZGpJMFNEQjZJaTgrUEM5blBqd3ZjM1puUGc9PScsXG4gIGNhc3RDb25uZWN0ZWQ6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNellpSUdobGFXZG9kRDBpTXpZaUlIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNDhaeUJtYVd4c1BTSnViMjVsSWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaVBqeHdZWFJvSUdROUlrMHhJREU0ZGpOb00yRXpJRE1nTUNBd01DMHpMVE42YlRBdE5IWXlZVFVnTlNBd0lEQXhOU0ExYURKaE55QTNJREFnTURBdE55MDNlbTB4T0MwM1NEVjJNUzQyTTBFeE15NHdNeUF4TXk0d015QXdJREF4TVRNdU16Y2dNVGRJTVRsV04zcE5NU0F4TUhZeVlUa2dPU0F3SURBeE9TQTVhREpCTVRFZ01URWdNQ0F3TURFZ01UQjZiVEl3TFRkSU0yRXlJRElnTUNBd01DMHlJREoyTTJneVZqVm9NVGgyTVRSb0xUZDJNbWczWVRJZ01pQXdJREF3TWkweVZqVmhNaUF5SURBZ01EQXRNaTB5ZWlJZ1ptbHNiRDBpSXpBd01DSXZQanh3WVhSb0lHUTlJazB3SURCb01qUjJNalJJTUhvaUx6NDhMMmMrUEM5emRtYysnLFxuICBjYXN0Q29ubnRlY3RpbmcwOiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpZaUlHaGxhV2RvZEQwaU16WWlJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajQ4WnlCbWFXeHNQU0p1YjI1bElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlQanh3WVhSb0lHUTlJazB4SURFNGRqTm9NMkV6SURNZ01DQXdNQzB6TFRONklpQm1hV3hzUFNJak1EQXdJaTgrUEhCaGRHZ2daRDBpVFRFZ01UUjJNbUUxSURVZ01DQXdNVFVnTldneVlUY2dOeUF3SURBd0xUY3ROM29pSUc5d1lXTnBkSGs5SWk0eklpQm1hV3hzUFNJak1EQXdJaTgrUEhCaGRHZ2daRDBpVFRFZ01UQjJNbUU1SURrZ01DQXdNVGtnT1dneVFURXhJREV4SURBZ01EQXhJREV3ZWlJZ2IzQmhZMmwwZVQwaUxqTWlJR1pwYkd3OUlpTXdNREFpTHo0OGNHRjBhQ0JrUFNKTk1qRWdNMGd6WVRJZ01pQXdJREF3TFRJZ01uWXphREpXTldneE9IWXhOR2d0TjNZeWFEZGhNaUF5SURBZ01EQXlMVEpXTldFeUlESWdNQ0F3TUMweUxUSjZJaUJtYVd4c1BTSWpNREF3SWk4K1BIQmhkR2dnWkQwaVRUQWdNR2d5TkhZeU5FZ3dlaUl2UGp3dlp6NDhMM04yWno0PScsXG4gIGNhc3RDb25udGVjdGluZzE6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNellpSUdobGFXZG9kRDBpTXpZaUlIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNDhaeUJtYVd4c1BTSnViMjVsSWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaVBqeHdZWFJvSUdROUlrMHhJREU0ZGpOb00yRXpJRE1nTUNBd01DMHpMVE42SWlCdmNHRmphWFI1UFNJdU15SWdabWxzYkQwaUl6QXdNQ0l2UGp4d1lYUm9JR1E5SWsweElERTBkakpoTlNBMUlEQWdNREUxSURWb01tRTNJRGNnTUNBd01DMDNMVGQ2SWlCbWFXeHNQU0lqTURBd0lpOCtQSEJoZEdnZ1pEMGlUVEVnTVRCMk1tRTVJRGtnTUNBd01Ua2dPV2d5UVRFeElERXhJREFnTURBeElERXdlaUlnYjNCaFkybDBlVDBpTGpNaUlHWnBiR3c5SWlNd01EQWlMejQ4Y0dGMGFDQmtQU0pOTWpFZ00wZ3pZVElnTWlBd0lEQXdMVElnTW5ZemFESldOV2d4T0hZeE5HZ3ROM1l5YURkaE1pQXlJREFnTURBeUxUSldOV0V5SURJZ01DQXdNQzB5TFRKNklpQm1hV3hzUFNJak1EQXdJaTgrUEhCaGRHZ2daRDBpVFRBZ01HZ3lOSFl5TkVnd2VpSXZQand2Wno0OEwzTjJaejQ9JyxcbiAgY2FzdENvbm50ZWN0aW5nMjogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU16WWlJR2hsYVdkb2REMGlNellpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0OFp5Qm1hV3hzUFNKdWIyNWxJaUJtYVd4c0xYSjFiR1U5SW1WMlpXNXZaR1FpUGp4d1lYUm9JR1E5SWsweElERTRkak5vTTJFeklETWdNQ0F3TUMwekxUTjZUVEVnTVRSMk1tRTFJRFVnTUNBd01UVWdOV2d5WVRjZ055QXdJREF3TFRjdE4zb2lJRzl3WVdOcGRIazlJaTR6SWlCbWFXeHNQU0lqTURBd0lpOCtQSEJoZEdnZ1pEMGlUVEVnTVRCMk1tRTVJRGtnTUNBd01Ua2dPV2d5UVRFeElERXhJREFnTURBeElERXdlaUlnWm1sc2JEMGlJekF3TUNJdlBqeHdZWFJvSUdROUlrMHlNU0F6U0ROaE1pQXlJREFnTURBdE1pQXlkak5vTWxZMWFERTRkakUwYUMwM2RqSm9OMkV5SURJZ01DQXdNREl0TWxZMVlUSWdNaUF3SURBd0xUSXRNbm9pSUdacGJHdzlJaU13TURBaUx6NDhjR0YwYUNCa1BTSk5NQ0F3YURJMGRqSTBTREI2SWk4K1BDOW5Qand2YzNablBnPT0nLFxuICB3YXJuaW5nOiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBuYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNuSUhkcFpIUm9QU2M0TUNjZ2FHVnBaMmgwUFNjNE1DY2dkbWxsZDBKdmVEMG5NQ0F3SURnd0lEZ3dKejQ4Y0dGMGFDQm1hV3hzUFNjalJrWkdKeUJtYVd4c0xYSjFiR1U5SjI1dmJucGxjbThuSUdROUowMDNPUzQwTURrZ056QXVNRFEwVERRMExqVXhOQ0EwTGpZMk1VRTFMakF5TXlBMUxqQXlNeUF3SURBZ01DQTBNQzR3T0RNZ01tZ3RMakF3TldFMUxqQXlOQ0ExTGpBeU5DQXdJREFnTUMwMExqUXpNU0F5TGpZMU5rd3VOVGszSURjd0xqQXpPVUUxTGpBek55QTFMakF6TnlBd0lEQWdNQ0F1TnpFeElEYzFZVFV1TURReUlEVXVNRFF5SURBZ01DQXdJRFF1TXpFMUlESXVORFEwYURZNUxqazBZekV1TnpjeElEQWdNeTQwTURZdExqa3lOaUEwTGpNeE5pMHlMalEwTldFMUxqQXlPU0ExTGpBeU9TQXdJREFnTUNBdU1USTJMVFF1T1RVMGVtMHRNemt1TXpNeExUSXVOalpoTlM0d016RWdOUzR3TXpFZ01DQXdJREV0TlM0d015MDFMakF6SURVdU1ETXhJRFV1TURNeElEQWdNQ0F4SURVdU1ETXROUzR3TXlBMUxqQXpOU0ExTGpBek5TQXdJREFnTVNBMUxqQXpJRFV1TURNZ05TNHdNekVnTlM0d016RWdNQ0F3SURFdE5TNHdNeUExTGpBemVtMDFMakF6TkMweU1DNHdNemhoTlM0d016RWdOUzR3TXpFZ01DQXdJREV0TlM0d01qa2dOUzR3TXlBMUxqQXlPQ0ExTGpBeU9DQXdJREFnTVMwMUxqQXpMVFV1TUROV01qY3VNakk0WVRVdU1ETXhJRFV1TURNeElEQWdNQ0F4SURVdU1ETXROUzR3TXlBMUxqQXpOU0ExTGpBek5TQXdJREFnTVNBMUxqQXpJRFV1TUROMk1qQXVNVEU0ZWljdlBqd3ZjM1puUGdvPScsXG4gIGNhbmNlbDogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owbmFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jbklIZHBaSFJvUFNjek5pY2dhR1ZwWjJoMFBTY3pOaWMrUEdjZ1ptbHNiRDBuYm05dVpTY2dabWxzYkMxeWRXeGxQU2RsZG1WdWIyUmtKejQ4Y0dGMGFDQmtQU2ROTUNBd2FETTJkak0yU0RCNkp5QnZjR0ZqYVhSNVBTY3VOU2N2UGp4d1lYUm9JR1E5SjAwek1TNDFNek1nTkM0NU1ETk1OQzQwTmpjZ016QXVOalExYlRJM0xqQTJOaTQwTlRKTU5DNDVNek1nTkM0NU1ETW5JR1pwYkd3dGNuVnNaVDBuYm05dWVtVnlieWNnYzNSeWIydGxQU2NqUmtaR0p5QnpkSEp2YTJVdGQybGtkR2c5SnpRbkx6NDhMMmMrUEM5emRtYysnXG59O1xuXG5jb25zdCBJY29uID0gZnVuY3Rpb24gKHtcbiAgdHlwZSxcbiAgLi4ub3RoZXJzXG59KSB7XG4gIHJldHVybiBqc3gkMShcImRpdlwiLCB7XG4gICAgY3NzOiAvKiNfX1BVUkVfXyovY3NzKHtcbiAgICAgIHdpZHRoOiAnMS41ZW0nLFxuICAgICAgaGVpZ2h0OiAnMS41ZW0nLFxuICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgIGJhY2tncm91bmRTaXplOiAnY292ZXInLFxuICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7aWNvblt0eXBlXX0pYCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgIHRvdWNoQWN0aW9uOiAnbm9uZSdcbiAgICB9LCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6SWNvbjtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtsamIyNHVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCVDAwaUxDSm1hV3hsSWpvaVNXTnZiaTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFJRUJxYzNoSmJYQnZjblJUYjNWeVkyVWdRR1Z0YjNScGIyNHZjbVZoWTNRZ0tpOWNibWx0Y0c5eWRDQlFjbTl3Vkhsd1pYTWdabkp2YlNBbmNISnZjQzEwZVhCbGN5ZGNibWx0Y0c5eWRDQnBZMjl1SUdaeWIyMGdKM04wZVd4bEwybGpiMjRuWEc1Y2JtTnZibk4wSUVsamIyNGdQU0JtZFc1amRHbHZiaUFvZTNSNWNHVXNJQzR1TG05MGFHVnljMzBwSUh0Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNBOFpHbDJYRzRnSUNBZ0lDQmpjM005ZTN0Y2JpQWdJQ0FnSUNBZ2QybGtkR2c2SUNjeExqVmxiU2NzWEc0Z0lDQWdJQ0FnSUdobGFXZG9kRG9nSnpFdU5XVnRKeXhjYmlBZ0lDQWdJQ0FnWW1GamEyZHliM1Z1WkZCdmMybDBhVzl1T2lBblkyVnVkR1Z5Snl4Y2JpQWdJQ0FnSUNBZ1ltRmphMmR5YjNWdVpGTnBlbVU2SUNkamIzWmxjaWNzWEc0Z0lDQWdJQ0FnSUdKaFkydG5jbTkxYm1SSmJXRm5aVG9nWUhWeWJDZ2tlMmxqYjI1YmRIbHdaVjE5S1dBc1hHNGdJQ0FnSUNBZ0lIQnZhVzUwWlhKRmRtVnVkSE02SUNkdWIyNWxKeXhjYmlBZ0lDQWdJQ0FnZEc5MVkyaEJZM1JwYjI0NklDZHViMjVsSnl4Y2JpQWdJQ0FnSUgxOVhHNGdJQ0FnSUNCaGNtbGhMV3hoWW1Wc1BYdDBlWEJsZlZ4dUlDQWdJQ0FnZXk0dUxtOTBhR1Z5YzMxY2JpQWdJQ0F2UGx4dUlDQXBYRzU5WEc1Y2JrbGpiMjR1Y0hKdmNGUjVjR1Z6SUQwZ2UxeHVJQ0IwZVhCbE9pQlFjbTl3Vkhsd1pYTXVjM1J5YVc1bkxGeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JKWTI5dVhHNGlYWDA9ICovXCIpLFxuICAgIFwiYXJpYS1sYWJlbFwiOiB0eXBlLFxuICAgIC4uLm90aGVyc1xuICB9KTtcbn07XG5cbkljb24ucHJvcFR5cGVzID0ge1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5jb25zdCBzdHlsZXMkMSA9IHtcbiAgLy8gVE9ETyBrZWVwIG9ubHkgbmVjZXNzYXJ5XG4gIGJvcmRlcjogJ25vbmUnLFxuICBvdXRsaW5lOiAnbm9uZScsXG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICBwYWRkaW5nOiAwLFxuICBmbGV4U2hyaW5rOiAwLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgJz4gc3Bhbic6IHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH1cbn07XG5jb25zdCB2YXJpYW50cyA9IHtcbiAgb3V0bGluZWQ6IHtcbiAgICB3aWR0aDogJzhlbScsXG4gICAgaGVpZ2h0OiAnMmVtJyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2ZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgY29sb3I6ICdpbmhlcml0JyxcbiAgICBvcGFjaXR5OiAwLjhcbiAgfVxufTtcbmNvbnN0IHRvb2x0aXBTdHlsZSA9IHtcbiAgekluZGV4OiA3LFxuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgcGFkZGluZzogJzhweCAxMnB4JyxcbiAgYm9yZGVyUmFkaXVzOiA0LFxuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICBjb2xvcjogJ3doaXRlJyxcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSg1MSwgNTEsIDUxLCAwLjYyNSknXG59O1xuXG5jb25zdCBpc092ZXJmbG93aW5nJDEgPSBlbGVtZW50ID0+IGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoO1xuXG5jb25zdCBUb29sdGlwJDEgPSAoe1xuICB0aXRsZSxcbiAgYm90dG9tID0gJzBweCcsXG4gIG92ZXJmbG93T25seSxcbiAgZGlzYWJsZWQsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJcbn0pID0+IHtcbiAgY29uc3QgdG9vbHRpcFJlZiA9IHVzZVJlZigpO1xuICBjb25zdCBib3hlcyA9IHVzZVJlZigpO1xuICBjb25zdCBkZWZhdWx0Q29udGFpbmVyID0gdXNlUmVmKCk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Bvc2l0aW9uLCBzZXRQb3NpdGlvbl0gPSB1c2VTdGF0ZSgoKSA9PiAoe1xuICAgIGxlZnQ6ICcxMDAlJ1xuICB9KSk7XG4gIGNvbnN0IGNoaWxkUHJvcHMgPSB7XG4gICAgb25Nb3VzZUVudGVyOiBldmVudCA9PiB7XG4gICAgICBpZiAoIW92ZXJmbG93T25seSB8fCBpc092ZXJmbG93aW5nJDEoZXZlbnQuY3VycmVudFRhcmdldCkpIHtcbiAgICAgICAgYm94ZXMuY3VycmVudCA9IFtldmVudC5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXTtcbiAgICAgICAgZGVmYXVsdENvbnRhaW5lci5jdXJyZW50ID0gZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQgfHwgZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZTogKCkgPT4ge1xuICAgICAgc2V0UG9zaXRpb24oe1xuICAgICAgICBsZWZ0OiAnMTAwJSdcbiAgICAgIH0pO1xuICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgfVxuICB9O1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgfVxuICB9LCBbZGlzYWJsZWRdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSBnZXRQb3BvdmVyUG9zaXRpb24odG9vbHRpcFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCAuLi5ib3hlcy5jdXJyZW50KTtcbiAgICAgIHRhcmdldFBvc2l0aW9uLmxlZnQgIT09IHBvc2l0aW9uLmxlZnQgJiYgc2V0UG9zaXRpb24odGFyZ2V0UG9zaXRpb24pO1xuICAgIH1cbiAgfSwgW29wZW4sIHBvc2l0aW9uLmxlZnRdKTtcbiAgcmV0dXJuICF0aXRsZSB8fCAhaXNEZXNrdG9wKCkgfHwgIWhhdmVQb2ludGVyKCkgPyBjaGlsZHJlbiA6IGpzeHMoRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGNoaWxkUHJvcHMpLCBvcGVuICYmIC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwoanN4JDEoXCJkaXZcIiwge1xuICAgICAgc3R5bGU6IHsgLi4udG9vbHRpcFN0eWxlLFxuICAgICAgICAuLi5wb3NpdGlvbixcbiAgICAgICAgdG9wOiBgY2FsYygke3Bvc2l0aW9uLnRvcH1weCAtICR7Ym90dG9tfSlgXG4gICAgICB9LFxuICAgICAgcmVmOiB0b29sdGlwUmVmLFxuICAgICAgY2hpbGRyZW46IGpzeCQxKEZvcm1hdHRlZE1lc3NhZ2UsIHtcbiAgICAgICAgaWQ6IHRpdGxlXG4gICAgICB9KVxuICAgIH0pLCBjb250YWluZXIgfHwgZGVmYXVsdENvbnRhaW5lci5jdXJyZW50KV1cbiAgfSk7XG59O1xuXG5jb25zdCBCdXR0b24gPSAoe1xuICBzdGFydEljb24sXG4gIHZhcmlhbnQsXG4gIHN0eWxlLFxuICB0aXRsZSxcbiAgY2hpbGRyZW4sXG4gIC4uLnJlc3Rcbn0pID0+IGpzeCQxKFRvb2x0aXAkMSwge1xuICB0aXRsZTogdGl0bGUsXG4gIGJvdHRvbTogXCIzZW1cIixcbiAgZGlzYWJsZWQ6IHJlc3QuZGlzYWJsZWQsXG4gIGNoaWxkcmVuOiBqc3hzKFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGNzczogW3N0eWxlcyQxLCB2YXJpYW50c1t2YXJpYW50XSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkJ1dHRvbjtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW1KMWRIUnZibk11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQk5FZ3dRaUlzSW1acGJHVWlPaUppZFhSMGIyNXpMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ2NtVmhZM1F2Y0hKdmNDMTBlWEJsY3lBcUwxeHVMeW9nUUdwemVFbHRjRzl5ZEZOdmRYSmpaU0JBWlcxdmRHbHZiaTl5WldGamRDQXFMMXh1YVcxd2IzSjBJSHQxYzJWVGRHRjBaU3dnZFhObFJXWm1aV04wTENCMWMyVlNaV1lzSUdOc2IyNWxSV3hsYldWdWRIMGdabkp2YlNBbmNtVmhZM1FuWEc1cGJYQnZjblFnZTJOeVpXRjBaVkJ2Y25SaGJIMGdabkp2YlNBbmNtVmhZM1F0Wkc5dEoxeHVhVzF3YjNKMElGQnliM0JVZVhCbGN5Qm1jbTl0SUNkd2NtOXdMWFI1Y0dWekoxeHVYRzVwYlhCdmNuUWdlMmRsZEZCdmNHOTJaWEpRYjNOcGRHbHZibjBnWm5KdmJTQW5kWFJwYkM5cGJtUmxlQ2RjYm1sdGNHOXlkQ0I3YUdGMlpWQnZhVzUwWlhJc0lHbHpSR1Z6YTNSdmNIMGdabkp2YlNBbmRYUnBiQzlsYm5acGNtOXViV1Z1ZENkY2JtbHRjRzl5ZENCN1JtOXliV0YwZEdWa1RXVnpjMkZuWlN3Z2RYTmxTVzUwYkgwZ1puSnZiU0FuWTI5dWRHVjRkQzlKTVRodUoxeHVhVzF3YjNKMElFbGpiMjRnWm5KdmJTQW5MaTlKWTI5dUoxeHVYRzVqYjI1emRDQnpkSGxzWlhNZ1BTQjdYRzRnSUM4dklGUlBSRThnYTJWbGNDQnZibXg1SUc1bFkyVnpjMkZ5ZVZ4dUlDQmliM0prWlhJNklDZHViMjVsSnl4Y2JpQWdiM1YwYkdsdVpUb2dKMjV2Ym1VbkxGeHVJQ0JqZFhKemIzSTZJQ2R3YjJsdWRHVnlKeXhjYmlBZ2NHRmtaR2x1WnpvZ01DeGNiaUFnWm14bGVGTm9jbWx1YXpvZ01DeGNiaUFnWW1GamEyZHliM1Z1WkVOdmJHOXlPaUFuZEhKaGJuTndZWEpsYm5RbkxGeHVJQ0IxYzJWeVUyVnNaV04wT2lBbmJtOXVaU2NzWEc0Z0lDYytJSE53WVc0bk9pQjdYRzRnSUNBZ2QybGtkR2c2SUNjeE1EQWxKeXhjYmlBZ0lDQm9aV2xuYUhRNklDY3hNREFsSnl4Y2JpQWdmU3hjYm4xY2JseHVZMjl1YzNRZ2RtRnlhV0Z1ZEhNZ1BTQjdYRzRnSUc5MWRHeHBibVZrT2lCN1hHNGdJQ0FnZDJsa2RHZzZJQ2M0WlcwbkxGeHVJQ0FnSUdobGFXZG9kRG9nSnpKbGJTY3NYRzRnSUNBZ1ltOXlaR1Z5T2lBbk1YQjRJSE52Ykdsa0lDTm1abVluTEZ4dUlDQWdJR0p2Y21SbGNsSmhaR2wxY3pvZ0p6UndlQ2NzWEc0Z0lDQWdZbUZqYTJkeWIzVnVaRG9nSjI1dmJtVW5MRnh1SUNBZ0lHTnZiRzl5T2lBbmFXNW9aWEpwZENjc1hHNGdJQ0FnYjNCaFkybDBlVG9nTUM0NExGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQjBiMjlzZEdsd1UzUjViR1VnUFNCN1hHNGdJSHBKYm1SbGVEb2dOeXhjYmlBZ2NHOXphWFJwYjI0NklDZG1hWGhsWkNjc1hHNGdJSEJoWkdScGJtYzZJQ2M0Y0hnZ01USndlQ2NzWEc0Z0lHSnZjbVJsY2xKaFpHbDFjem9nTkN4Y2JpQWdkR1Y0ZEVGc2FXZHVPaUFuWTJWdWRHVnlKeXhjYmlBZ1kyOXNiM0k2SUNkM2FHbDBaU2NzWEc0Z0lHSmhZMnRuY205MWJtUkRiMnh2Y2pvZ0ozSm5ZbUVvTlRFc0lEVXhMQ0ExTVN3Z01DNDJNalVwSnl4Y2JuMWNibHh1WTI5dWMzUWdhWE5QZG1WeVpteHZkMmx1WnlBOUlHVnNaVzFsYm5RZ1BUNGdaV3hsYldWdWRDNXpZM0p2Ykd4WGFXUjBhQ0ErSUdWc1pXMWxiblF1WTJ4cFpXNTBWMmxrZEdoY2JseHVZMjl1YzNRZ1ZHOXZiSFJwY0NBOUlDaDdYRzRnSUhScGRHeGxMRnh1SUNCaWIzUjBiMjBnUFNBbk1IQjRKeXhjYmlBZ2IzWmxjbVpzYjNkUGJteDVMRnh1SUNCa2FYTmhZbXhsWkN4Y2JpQWdZMmhwYkdSeVpXNHNYRzRnSUdOdmJuUmhhVzVsY2l4Y2JuMHBJRDArSUh0Y2JpQWdZMjl1YzNRZ2RHOXZiSFJwY0ZKbFppQTlJSFZ6WlZKbFppZ3BYRzRnSUdOdmJuTjBJR0p2ZUdWeklEMGdkWE5sVW1WbUtDbGNiaUFnWTI5dWMzUWdaR1ZtWVhWc2RFTnZiblJoYVc1bGNpQTlJSFZ6WlZKbFppZ3BYRzRnSUdOdmJuTjBJRnR2Y0dWdUxDQnpaWFJQY0dWdVhTQTlJSFZ6WlZOMFlYUmxLR1poYkhObEtWeHVJQ0JqYjI1emRDQmJjRzl6YVhScGIyNHNJSE5sZEZCdmMybDBhVzl1WFNBOUlIVnpaVk4wWVhSbEtDZ3BJRDArSUNoN2JHVm1kRG9nSnpFd01DVW5mU2twWEc1Y2JpQWdZMjl1YzNRZ1kyaHBiR1JRY205d2N5QTlJSHRjYmlBZ0lDQnZiazF2ZFhObFJXNTBaWEk2SUdWMlpXNTBJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hiM1psY21ac2IzZFBibXg1SUh4OElHbHpUM1psY21ac2IzZHBibWNvWlhabGJuUXVZM1Z5Y21WdWRGUmhjbWRsZENrcElIdGNiaUFnSUNBZ0lDQWdZbTk0WlhNdVkzVnljbVZ1ZENBOUlGdGNiaUFnSUNBZ0lDQWdJQ0JsZG1WdWRDNWpkWEp5Wlc1MFZHRnlaMlYwTG1kbGRFSnZkVzVrYVc1blEyeHBaVzUwVW1WamRDZ3BMRnh1SUNBZ0lDQWdJQ0FnSUdSdlkzVnRaVzUwTG1KdlpIa3VaMlYwUW05MWJtUnBibWREYkdsbGJuUlNaV04wS0Nrc1hHNGdJQ0FnSUNBZ0lGMWNiaUFnSUNBZ0lDQWdaR1ZtWVhWc2RFTnZiblJoYVc1bGNpNWpkWEp5Wlc1MElEMWNiaUFnSUNBZ0lDQWdJQ0JrYjJOMWJXVnVkQzVtZFd4c2MyTnlaV1Z1Uld4bGJXVnVkQ0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lHUnZZM1Z0Wlc1MExuZGxZbXRwZEVaMWJHeHpZM0psWlc1RmJHVnRaVzUwSUh4OFhHNGdJQ0FnSUNBZ0lDQWdaRzlqZFcxbGJuUXVZbTlrZVZ4dUlDQWdJQ0FnSUNCelpYUlBjR1Z1S0hSeWRXVXBYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTeGNiaUFnSUNCdmJrMXZkWE5sVEdWaGRtVTZJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lITmxkRkJ2YzJsMGFXOXVLSHRzWldaME9pQW5NVEF3SlNkOUtWeHVJQ0FnSUNBZ2MyVjBUM0JsYmlobVlXeHpaU2xjYmlBZ0lDQjlMRnh1SUNCOVhHNGdJSFZ6WlVWbVptVmpkQ2dvS1NBOVBpQjdYRzRnSUNBZ2FXWWdLR1JwYzJGaWJHVmtLU0I3WEc0Z0lDQWdJQ0J6WlhSUGNHVnVLR1poYkhObEtWeHVJQ0FnSUgxY2JpQWdmU3dnVzJScGMyRmliR1ZrWFNsY2JseHVJQ0IxYzJWRlptWmxZM1FvS0NrZ1BUNGdlMXh1SUNBZ0lHbG1JQ2h2Y0dWdUtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCMFlYSm5aWFJRYjNOcGRHbHZiaUE5SUdkbGRGQnZjRzkyWlhKUWIzTnBkR2x2YmloY2JpQWdJQ0FnSUNBZ2RHOXZiSFJwY0ZKbFppNWpkWEp5Wlc1MExtZGxkRUp2ZFc1a2FXNW5RMnhwWlc1MFVtVmpkQ2dwTEZ4dUlDQWdJQ0FnSUNBdUxpNWliM2hsY3k1amRYSnlaVzUwWEc0Z0lDQWdJQ0FwWEc0Z0lDQWdJQ0IwWVhKblpYUlFiM05wZEdsdmJpNXNaV1owSUNFOVBTQndiM05wZEdsdmJpNXNaV1owSUNZbUlITmxkRkJ2YzJsMGFXOXVLSFJoY21kbGRGQnZjMmwwYVc5dUtWeHVJQ0FnSUgxY2JpQWdmU3dnVzI5d1pXNHNJSEJ2YzJsMGFXOXVMbXhsWm5SZEtWeHVYRzRnSUhKbGRIVnliaUFoZEdsMGJHVWdmSHdnSVdselJHVnphM1J2Y0NncElIeDhJQ0ZvWVhabFVHOXBiblJsY2lncElEOGdLRnh1SUNBZ0lHTm9hV3hrY21WdVhHNGdJQ2tnT2lBb1hHNGdJQ0FnUEQ1Y2JpQWdJQ0FnSUh0amJHOXVaVVZzWlcxbGJuUW9ZMmhwYkdSeVpXNHNJR05vYVd4a1VISnZjSE1wZlZ4dUlDQWdJQ0FnZTI5d1pXNGdKaVpjYmlBZ0lDQWdJQ0FnWTNKbFlYUmxVRzl5ZEdGc0tGeHVJQ0FnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQWdJSE4wZVd4bFBYdDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDNHVMblJ2YjJ4MGFYQlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTGk0dWNHOXphWFJwYjI0c1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhSdmNEb2dZR05oYkdNb0pIdHdiM05wZEdsdmJpNTBiM0I5Y0hnZ0xTQWtlMkp2ZEhSdmJYMHBZQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpXWTllM1J2YjJ4MGFYQlNaV1o5WEc0Z0lDQWdJQ0FnSUNBZ1BseHVJQ0FnSUNBZ0lDQWdJQ0FnUEVadmNtMWhkSFJsWkUxbGMzTmhaMlVnYVdROWUzUnBkR3hsZlNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2WkdsMlBpeGNiaUFnSUNBZ0lDQWdJQ0JqYjI1MFlXbHVaWElnZkh3Z1pHVm1ZWFZzZEVOdmJuUmhhVzVsY2k1amRYSnlaVzUwWEc0Z0lDQWdJQ0FnSUNsOVhHNGdJQ0FnUEM4K1hHNGdJQ2xjYm4xY2JseHVZMjl1YzNRZ1FuVjBkRzl1SUQwZ0tIdHpkR0Z5ZEVsamIyNHNJSFpoY21saGJuUXNJSE4wZVd4bExDQjBhWFJzWlN3Z1kyaHBiR1J5Wlc0c0lDNHVMbkpsYzNSOUtTQTlQaUFvWEc0Z0lEeFViMjlzZEdsd0lIUnBkR3hsUFh0MGFYUnNaWDBnWW05MGRHOXRQVndpTTJWdFhDSWdaR2x6WVdKc1pXUTllM0psYzNRdVpHbHpZV0pzWldSOVBseHVJQ0FnSUR4aWRYUjBiMjRnZEhsd1pUMWNJbUoxZEhSdmJsd2lJR056Y3oxN1czTjBlV3hsY3l3Z2RtRnlhV0Z1ZEhOYmRtRnlhV0Z1ZEYxZGZTQnpkSGxzWlQxN2MzUjViR1VnZkh3Z2UzMTlJSHN1TGk1eVpYTjBmVDVjYmlBZ0lDQWdJSHQwZVhCbGIyWWdjM1JoY25SSlkyOXVJRDA5UFNBbmMzUnlhVzVuSnlBL0lEeEpZMjl1SUhSNWNHVTllM04wWVhKMFNXTnZibjBnTHo0Z09pQnpkR0Z5ZEVsamIyNTlYRzRnSUNBZ0lDQjdZMmhwYkdSeVpXNTlYRzRnSUNBZ1BDOWlkWFIwYjI0K1hHNGdJRHd2Vkc5dmJIUnBjRDVjYmlsY2JseHVRblYwZEc5dUxuQnliM0JVZVhCbGN5QTlJSHRjYmlBZ2MzUmhjblJKWTI5dU9pQlFjbTl3Vkhsd1pYTXVibTlrWlN4Y2JpQWdZMmhwYkdSeVpXNDZJRkJ5YjNCVWVYQmxjeTV1YjJSbExGeHVmVnh1WEc1amIyNXpkQ0JRYkdGNVFuVjBkRzl1SUQwZ0tIdHdiR0Y1WW1GamExTjBZWFJsTENCbGJtUmxaQ3dnYUdsa1pHVnVMQ0J2YmtOc2FXTnJMQ0F1TGk1eVpYTjBmU2tnUFQ0Z0tGeHVJQ0E4UW5WMGRHOXVYRzRnSUNBZ2MzUjViR1U5ZTJocFpHUmxiaUFtSmlCN2IzQmhZMmwwZVRvZ01IMTlYRzRnSUNBZ2MzUmhjblJKWTI5dVBYdGNiaUFnSUNBZ0lHVnVaR1ZrSUQ4Z0ozSmxjR3hoZVNjZ09pQndiR0Y1WW1GamExTjBZWFJsSUQwOVBTQW5jR3hoZVdsdVp5Y2dQeUFuY0dGMWMyVW5JRG9nSjNCc1lYa25YRzRnSUNBZ2ZWeHVJQ0FnSUhScGRHeGxQWHRnUzB0VExsQk1RVmxGVWk0a2UxeHVJQ0FnSUNBZ1pXNWtaV1FnUHlBblVrVlFURUZaSnlBNklIQnNZWGxpWVdOclUzUmhkR1VnUFQwOUlDZHdiR0Y1YVc1bkp5QS9JQ2RRUVZWVFJTY2dPaUFuVUV4QldTZGNiaUFnSUNCOVlIMWNiaUFnSUNCdmJrTnNhV05yUFh0dmJrTnNhV05yZlZ4dUlDQWdJSHN1TGk1eVpYTjBmVnh1SUNBdlBseHVLVnh1WEc1UWJHRjVRblYwZEc5dUxuQnliM0JVZVhCbGN5QTlJSHRjYmlBZ1pXNWtaV1E2SUZCeWIzQlVlWEJsY3k1aWIyOXNMRnh1SUNCdmJrTnNhV05yT2lCUWNtOXdWSGx3WlhNdVpuVnVZeXhjYm4xY2JseHVZMjl1YzNRZ1JuVnNiSE5qY21WbGJrSjFkSFJ2YmlBOUlDaDdkbWxsZDAxdlpHVXNJRzl1UTJ4cFkydDlLU0E5UGlCN1hHNGdJR052Ym5OMElHbGpiMjRnUFNCMmFXVjNUVzlrWlNBOVBUMGdKMloxYkd4elkzSmxaVzRuSUQ4Z0oyeGxZWFpsUm5Wc2JGTmpjbVZsYmljZ09pQW5aVzUwWlhKR2RXeHNVMk55WldWdUoxeHVJQ0JqYjI1emRDQjBaWGgwSUQwZ2RYTmxTVzUwYkNncExtWnZjbTFoZEUxbGMzTmhaMlVvWEc0Z0lDQWdkbWxsZDAxdlpHVWdQVDA5SUNkbWRXeHNjMk55WldWdUoxeHVJQ0FnSUNBZ1B5QW5TMHRUTGxCTVFWbEZVaTVHVlV4TVUwTlNSVVZPTGtWWVNWUW5YRzRnSUNBZ0lDQTZJQ2RMUzFNdVVFeEJXVVZTTGtaVlRFeFRRMUpGUlU0blhHNGdJQ2xjYmx4dUlDQnlaWFIxY200Z1BFSjFkSFJ2YmlCemRHRnlkRWxqYjI0OWUybGpiMjU5SUhScGRHeGxQWHQwWlhoMGZTQnZia05zYVdOclBYdHZia05zYVdOcmZTQXZQbHh1ZlZ4dVhHNWpiMjV6ZENCemEybHdVM1I1YkdWeklEMGdlMXh1SUNCa2FYTndiR0Y1T2lBblpteGxlQ2NzWEc0Z0lHRnNhV2R1U1hSbGJYTTZJQ2RqWlc1MFpYSW5MRnh1SUNCd1lXUmthVzVuT2lBbk1DNDFjbVZ0Snl4Y2JpQWdZbTl5WkdWeU9pQW5NWEI0SUhOdmJHbGtJQ05tWm1ZbkxGeHVJQ0JqYjJ4dmNqb2dKeU5tWm1ZbkxGeHVJQ0JpWVdOclozSnZkVzVrT2lBbmNtZGlZU2d3TENBd0xDQXdMQ0F3TGpRcEp5eGNiaUFnWm05dWRGTnBlbVU2SUNjeU5IQjRKeXhjYmlBZ2IzQmhZMmwwZVRvZ01DNDRMRnh1SUNBbkpqcGthWE5oWW14bFpDYzZJSHRjYmlBZ0lDQnZjR0ZqYVhSNU9pQXdMalVzWEc0Z0lIMHNYRzRnSUNjK0lHUnBkaWM2SUh0Y2JpQWdJQ0J0WVhKbmFXNU1aV1owT2lBbk1DNDFjbVZ0Snl4Y2JpQWdJQ0IzYVdSMGFEb2dKekV1TlhKbGJTY3NYRzRnSUNBZ2FHVnBaMmgwT2lBbk1TNDFjbVZ0Snl4Y2JpQWdmU3hjYm4xY2JseHVZMjl1YzNRZ1UydHBjRUoxZEhSdmJpQTlJQ2g3ZDJGcGRGUnBiV1VzSUc5dVEyeHBZMnQ5S1NBOVBpQW9YRzRnSUR4aWRYUjBiMjVjYmlBZ0lDQjBlWEJsUFZ3aVluVjBkRzl1WENKY2JpQWdJQ0JqYzNNOWUzTnJhWEJUZEhsc1pYTjlYRzRnSUNBZ1pHbHpZV0pzWldROWUzZGhhWFJVYVcxbElENGdNSDFjYmlBZ0lDQnZia05zYVdOclBYdHZia05zYVdOcmZWeHVJQ0ErWEc0Z0lDQWdlM2RoYVhSVWFXMWxJRDRnTUNBL0lDaGNiaUFnSUNBZ0lEdytYRzRnSUNBZ0lDQWdJSHROWVhSb0xtTmxhV3dvZDJGcGRGUnBiV1VwZlNBOFJtOXliV0YwZEdWa1RXVnpjMkZuWlNCcFpEMWNJa3RMVXk1VFUwRkpMbE5GUTA5T1JGTmNJaUF2UGx4dUlDQWdJQ0FnUEM4K1hHNGdJQ0FnS1NBNklDaGNiaUFnSUNBZ0lEeEdiM0p0WVhSMFpXUk5aWE56WVdkbElHbGtQVndpUzB0VExsTlRRVWt1VTB0SlVDNUJSRndpSUM4K1hHNGdJQ0FnS1gxY2JpQWdJQ0E4U1dOdmJpQjBlWEJsUFZ3aWJtVjRkRVZ3YVhOdlpHVmNJaUF2UGx4dUlDQThMMkoxZEhSdmJqNWNiaWxjYmx4dVpYaHdiM0owSUh0Q2RYUjBiMjRzSUZCc1lYbENkWFIwYjI0c0lFWjFiR3h6WTNKbFpXNUNkWFIwYjI0c0lGTnJhWEJDZFhSMGIyNTlYRzRpWFgwPSAqL1wiXSxcbiAgICBzdHlsZTogc3R5bGUgfHwge30sXG4gICAgLi4ucmVzdCxcbiAgICBjaGlsZHJlbjogW3R5cGVvZiBzdGFydEljb24gPT09ICdzdHJpbmcnID8ganN4JDEoSWNvbiwge1xuICAgICAgdHlwZTogc3RhcnRJY29uXG4gICAgfSkgOiBzdGFydEljb24sIGNoaWxkcmVuXVxuICB9KVxufSk7XG5cbkJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIHN0YXJ0SWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZVxufTtcblxuY29uc3QgUGxheUJ1dHRvbiQxID0gKHtcbiAgcGxheWJhY2tTdGF0ZSxcbiAgZW5kZWQsXG4gIGhpZGRlbixcbiAgb25DbGljayxcbiAgLi4ucmVzdFxufSkgPT4ganN4JDEoQnV0dG9uLCB7XG4gIHN0eWxlOiBoaWRkZW4gJiYge1xuICAgIG9wYWNpdHk6IDBcbiAgfSxcbiAgc3RhcnRJY29uOiBlbmRlZCA/ICdyZXBsYXknIDogcGxheWJhY2tTdGF0ZSA9PT0gJ3BsYXlpbmcnID8gJ3BhdXNlJyA6ICdwbGF5JyxcbiAgdGl0bGU6IGBLS1MuUExBWUVSLiR7ZW5kZWQgPyAnUkVQTEFZJyA6IHBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJyA/ICdQQVVTRScgOiAnUExBWSd9YCxcbiAgb25DbGljazogb25DbGljayxcbiAgLi4ucmVzdFxufSk7XG5cblBsYXlCdXR0b24kMS5wcm9wVHlwZXMgPSB7XG4gIGVuZGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmNvbnN0IEZ1bGxzY3JlZW5CdXR0b24gPSAoe1xuICB2aWV3TW9kZSxcbiAgb25DbGlja1xufSkgPT4ge1xuICBjb25zdCBpY29uID0gdmlld01vZGUgPT09ICdmdWxsc2NyZWVuJyA/ICdsZWF2ZUZ1bGxTY3JlZW4nIDogJ2VudGVyRnVsbFNjcmVlbic7XG4gIGNvbnN0IHRleHQgPSB1c2VJbnRsKCkuZm9ybWF0TWVzc2FnZSh2aWV3TW9kZSA9PT0gJ2Z1bGxzY3JlZW4nID8gJ0tLUy5QTEFZRVIuRlVMTFNDUkVFTi5FWElUJyA6ICdLS1MuUExBWUVSLkZVTExTQ1JFRU4nKTtcbiAgcmV0dXJuIGpzeCQxKEJ1dHRvbiwge1xuICAgIHN0YXJ0SWNvbjogaWNvbixcbiAgICB0aXRsZTogdGV4dCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0pO1xufTtcblxuY29uc3Qgc2tpcFN0eWxlcyA9IHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcGFkZGluZzogJzAuNXJlbScsXG4gIGJvcmRlcjogJzFweCBzb2xpZCAjZmZmJyxcbiAgY29sb3I6ICcjZmZmJyxcbiAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC40KScsXG4gIGZvbnRTaXplOiAnMjRweCcsXG4gIG9wYWNpdHk6IDAuOCxcbiAgJyY6ZGlzYWJsZWQnOiB7XG4gICAgb3BhY2l0eTogMC41XG4gIH0sXG4gICc+IGRpdic6IHtcbiAgICBtYXJnaW5MZWZ0OiAnMC41cmVtJyxcbiAgICB3aWR0aDogJzEuNXJlbScsXG4gICAgaGVpZ2h0OiAnMS41cmVtJ1xuICB9XG59O1xuXG5jb25zdCBTa2lwQnV0dG9uID0gKHtcbiAgd2FpdFRpbWUsXG4gIG9uQ2xpY2tcbn0pID0+IGpzeHMoXCJidXR0b25cIiwge1xuICB0eXBlOiBcImJ1dHRvblwiLFxuICBjc3M6IHNraXBTdHlsZXMsXG4gIGRpc2FibGVkOiB3YWl0VGltZSA+IDAsXG4gIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gIGNoaWxkcmVuOiBbd2FpdFRpbWUgPiAwID8ganN4cyhGcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbTWF0aC5jZWlsKHdhaXRUaW1lKSwgXCIgXCIsIGpzeCQxKEZvcm1hdHRlZE1lc3NhZ2UsIHtcbiAgICAgIGlkOiBcIktLUy5TU0FJLlNFQ09ORFNcIlxuICAgIH0pXVxuICB9KSA6IGpzeCQxKEZvcm1hdHRlZE1lc3NhZ2UsIHtcbiAgICBpZDogXCJLS1MuU1NBSS5TS0lQLkFEXCJcbiAgfSksIGpzeCQxKEljb24sIHtcbiAgICB0eXBlOiBcIm5leHRFcGlzb2RlXCJcbiAgfSldXG59KTtcblxuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmNvbnN0IGJhY2tkcm9wU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDEsXG4gIHRvcDogMCxcbiAgbGVmdDogMCxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4V3JhcDogJ3dyYXAnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwKScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwMCUpJyxcbiAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQtY29sb3IgMC41cyBlYXNlLCB0cmFuc2Zvcm0gMHMgMC41cydcbn07XG5jb25zdCBiYWNrZHJvcE9wZW5TdHlsZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjYpJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsXG4gIHRyYW5zaXRpb246ICdiYWNrZ3JvdW5kLWNvbG9yIDAuNXMgZWFzZScsXG4gICd+IC5vdmVybGF5LWJhY2tkcm9wJzoge1xuICAgIGRpc3BsYXk6ICdub25lJ1xuICB9XG59OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuXG5jb25zdCBCYWNrZHJvcCA9ICh7XG4gIG9wZW4sXG4gIGNoaWxkcmVuLFxuICBvbkNsaWNrLFxuICAuLi5yZXN0XG59KSA9PiBqc3gkMShcImRpdlwiLCB7XG4gIGNzczogW2JhY2tkcm9wU3R5bGUsIG9wZW4gJiYgYmFja2Ryb3BPcGVuU3R5bGUsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIjtsYWJlbDpCYWNrZHJvcDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtKaFkydGtjbTl3TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXZERTU0lzSW1acGJHVWlPaUpDWVdOclpISnZjQzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFJR1Z6YkdsdWRDMWthWE5oWW14bElHcHplQzFoTVRGNUwyNXZMWE4wWVhScFl5MWxiR1Z0Wlc1MExXbHVkR1Z5WVdOMGFXOXVjeUFxTDF4dUx5b2dRR3B6ZUVsdGNHOXlkRk52ZFhKalpTQkFaVzF2ZEdsdmJpOXlaV0ZqZENBcUwxeHVYRzVqYjI1emRDQmlZV05yWkhKdmNGTjBlV3hsSUQwZ2UxeHVJQ0J3YjNOcGRHbHZiam9nSjJGaWMyOXNkWFJsSnl4Y2JpQWdla2x1WkdWNE9pQXhMRnh1SUNCMGIzQTZJREFzWEc0Z0lHeGxablE2SURBc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWm14bGVGZHlZWEE2SUNkM2NtRndKeXhjYmlBZ1lXeHBaMjVKZEdWdGN6b2dKMk5sYm5SbGNpY3NYRzRnSUdGc2FXZHVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUdwMWMzUnBabmxEYjI1MFpXNTBPaUFuWTJWdWRHVnlKeXhjYmlBZ2FHVnBaMmgwT2lBbk1UQXdKU2NzWEc0Z0lIZHBaSFJvT2lBbk1UQXdKU2NzWEc0Z0lHSmhZMnRuY205MWJtUkRiMnh2Y2pvZ0ozSm5ZbUVvTUN3Z01Dd2dNQ3dnTUNrbkxGeHVJQ0IwY21GdWMyWnZjbTA2SUNkMGNtRnVjMnhoZEdWWktDMHhNREFsS1Njc1hHNGdJSFJ5WVc1emFYUnBiMjQ2SUNkaVlXTnJaM0p2ZFc1a0xXTnZiRzl5SURBdU5YTWdaV0Z6WlN3Z2RISmhibk5tYjNKdElEQnpJREF1TlhNbkxGeHVmVnh1WEc1amIyNXpkQ0JpWVdOclpISnZjRTl3Wlc1VGRIbHNaU0E5SUh0Y2JpQWdZbUZqYTJkeWIzVnVaRU52Ykc5eU9pQW5jbWRpWVNnd0xDQXdMQ0F3TENBd0xqWXBKeXhjYmlBZ2RISmhibk5tYjNKdE9pQW5kSEpoYm5Oc1lYUmxXU2d3S1Njc1hHNGdJSFJ5WVc1emFYUnBiMjQ2SUNkaVlXTnJaM0p2ZFc1a0xXTnZiRzl5SURBdU5YTWdaV0Z6WlNjc1hHNGdJQ2QrSUM1dmRtVnliR0Y1TFdKaFkydGtjbTl3SnpvZ2UxeHVJQ0FnSUdScGMzQnNZWGs2SUNkdWIyNWxKeXhjYmlBZ2ZTeGNibjFjYmx4dUx5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElISmxZV04wTDNCeWIzQXRkSGx3WlhOY2JtTnZibk4wSUVKaFkydGtjbTl3SUQwZ0tIdHZjR1Z1TENCamFHbHNaSEpsYml3Z2IyNURiR2xqYXl3Z0xpNHVjbVZ6ZEgwcElEMCtJQ2hjYmlBZ1BHUnBkbHh1SUNBZ0lHTnpjejE3VzJKaFkydGtjbTl3VTNSNWJHVXNJRzl3Wlc0Z0ppWWdZbUZqYTJSeWIzQlBjR1Z1VTNSNWJHVmRmVnh1SUNBZ0lHTnNZWE56VG1GdFpUMWNJbTkyWlhKc1lYa3RZbUZqYTJSeWIzQmNJbHh1SUNBZ0lHOXVRMnhwWTJzOWUyVjJaVzUwSUQwK0lIdGNiaUFnSUNBZ0lHbG1JQ2hsZG1WdWRDNTBZWEpuWlhRZ1BUMDlJR1YyWlc1MExtTjFjbkpsYm5SVVlYSm5aWFFwSUh0Y2JpQWdJQ0FnSUNBZ2IyNURiR2xqYXo4dUtDbGNiaUFnSUNBZ0lIMWNiaUFnSUNCOWZWeHVJQ0FnSUhzdUxpNXlaWE4wZlZ4dUlDQStYRzRnSUNBZ2UyOXdaVzRnSmlZZ1kyaHBiR1J5Wlc1OVhHNGdJRHd2WkdsMlBseHVLVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JDWVdOclpISnZjRnh1SWwxOSAqL1wiXSxcbiAgY2xhc3NOYW1lOiBcIm92ZXJsYXktYmFja2Ryb3BcIixcbiAgb25DbGljazogZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DbGljaygpO1xuICAgIH1cbiAgfSxcbiAgLi4ucmVzdCxcbiAgY2hpbGRyZW46IG9wZW4gJiYgY2hpbGRyZW5cbn0pO1xuXG4vKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5jb25zdCBpY29uU3R5bGUkMSA9IHtcbiAgd2lkdGg6ICc3OHB4JyxcbiAgaGVpZ2h0OiAnNzhweCdcbn07XG5jb25zdCBzdHlsZSQ5ID0ge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgZmxleDogJzEwMCUnLFxuICBtYXJnaW46ICcxcmVtIDAnLFxuICBwYWRkaW5nOiAnMCAxLjVyZW0nLFxuICB0ZXh0QWxpZ246ICdjZW50ZXInXG59O1xuXG5jb25zdCBFcnJvciQxID0gKHtcbiAgZXJyb3IsXG4gIG9uQmFja1xufSkgPT4ge1xuICBjb25zdCBpbnRsID0gdXNlSW50bCgpO1xuICBjb25zdCB2YWx1ZXMgPSB7XG4gICAgQ09ERTogZXJyb3IuY29kZSB8fCAwLFxuICAgIGNvZGU6IGVycm9yLmNvZGUgfHwgMCxcbiAgICAuLi5lcnJvci5kYXRhXG4gIH07XG4gIHJldHVybiBqc3hzKEJhY2tkcm9wLCB7XG4gICAgb3BlbjogdHJ1ZSxcbiAgICBjaGlsZHJlbjogW2pzeCQxKEljb24sIHtcbiAgICAgIHR5cGU6IFwid2FybmluZ1wiLFxuICAgICAgc3R5bGU6IGljb25TdHlsZSQxXG4gICAgfSksIGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgIGNzczogc3R5bGUkOSxcbiAgICAgIGNoaWxkcmVuOiBbZXJyb3IubmFtZSA9PT0gJ1BsYXljcmFmdEFwaUVycm9yJyA/IGBLS1MuRVJST1IuUExBWUNSQUZULiR7ZXJyb3IuY29kZX1gIDogYEtLUy5FUlJPUi4ke2Vycm9yLmNvZGV9YCwgYEtLUy5FUlJPUi4ke2Vycm9yLm5hbWV9YCwgZXJyb3IubWVzc2FnZSwgZXJyb3IubmFtZSwgYEtLUy5FUlJPUmBdLnJlZHVjZVJpZ2h0KChsYXN0LCBpZCkgPT4gaW50bC5mb3JtYXRNZXNzYWdlKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGRlZmF1bHRNZXNzYWdlOiBsYXN0XG4gICAgICB9LCB2YWx1ZXMpLCAnJylcbiAgICB9KSwgb25CYWNrICYmIGpzeCQxKEJ1dHRvbiwge1xuICAgICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxuICAgICAgb25DbGljazogb25CYWNrLFxuICAgICAgY2hpbGRyZW46IGpzeCQxKEZvcm1hdHRlZE1lc3NhZ2UsIHtcbiAgICAgICAgaWQ6IFwiS0tTLkJBQ0tcIlxuICAgICAgfSlcbiAgICB9KV1cbiAgfSk7XG59O1xuXG5FcnJvciQxLnByb3BUeXBlcyA9IHtcbiAgZXJyb3I6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uQmFjazogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3Byb3AtdHlwZXMgKi9cbmNvbnN0IGV4dGVuc2lvbkNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCgpO1xuXG5jb25zdCBTbG90UHJvdmlkZXIgPSAoe1xuICBzbG90UmVmLFxuICBjaGlsZHJlblxufSkgPT4ge1xuICBjb25zdCBbc2xvdHMsIHNldFNsb3RzXSA9IHVzZVN0YXRlKCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2xvdHMoc2xvdFJlZi5jdXJyZW50KTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL2pzeChleHRlbnNpb25Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHNsb3RzLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KTtcbn07XG5cbmNvbnN0IEZ1bmN0aW9uQmFyRXh0ZW5zaW9uID0gKHtcbiAgY2hpbGRyZW5cbn0pID0+IHtcbiAgY29uc3Qgc2xvdHMgPSB1c2VDb250ZXh0KGV4dGVuc2lvbkNvbnRleHQpO1xuICByZXR1cm4gc2xvdHMgIT09IG51bGwgJiYgc2xvdHMgIT09IHZvaWQgMCAmJiBzbG90cy5mdW5jdGlvbkJhciA/IC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIHNsb3RzLmZ1bmN0aW9uQmFyKSA6ICcnO1xufTtcblxuY29uc3QgSW5mb0JhckV4dGVuc2lvbiA9ICh7XG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIGNvbnN0IHNsb3RzID0gdXNlQ29udGV4dChleHRlbnNpb25Db250ZXh0KTtcbiAgcmV0dXJuIHNsb3RzICE9PSBudWxsICYmIHNsb3RzICE9PSB2b2lkIDAgJiYgc2xvdHMuaW5mb0JhciA/IC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIHNsb3RzLmluZm9CYXIpIDogJyc7XG59O1xuXG5jb25zdCBUaXRsZUJhckV4dGVuc2lvbiA9ICh7XG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIGNvbnN0IHNsb3RzID0gdXNlQ29udGV4dChleHRlbnNpb25Db250ZXh0KTtcbiAgcmV0dXJuIHNsb3RzICE9PSBudWxsICYmIHNsb3RzICE9PSB2b2lkIDAgJiYgc2xvdHMudGl0bGVCYXIgPyAvKiNfX1BVUkVfXyovY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBzbG90cy50aXRsZUJhcikgOiAnJztcbn07XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDYoKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuY29uc3QgZXhwYW5kID0ge1xuICBtYXJnaW46IDAsXG4gIGZsZXg6ICcxJ1xufTtcbmNvbnN0IGhpZGRlbiA9IHtcbiAgZGlzcGxheTogJ25vbmUnXG59O1xuY29uc3QgY29udGFpbmVyU3R5bGUkMSA9IHtcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIGNvbG9yOiAnd2hpdGUnLFxuICAvLyBwcmV2ZW50IGFuaW1hdGlvbiBnbGljaChhZnRlcmltYWdlKSBvZiBkZXNjZW5kYW50IGVsZW1lbnRzXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIGgxOiB7XG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRTaXplOiAnMWVtJyxcbiAgICBsaW5lSGVpZ2h0OiAnMS41ZW0nXG4gIH0sXG4gICdhLCBhOmxpbmssIGE6dmlzaXRlZCc6IHtcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgJz4gKic6IHtcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICAgIH1cbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzk2JyAvLyBoZWlnaHQgNTRcblxufTtcbmNvbnN0IHZpZGVvQ29udGFpbmVyU3R5bGUgPSB7XG4gICc+IGRpdjpmaXJzdC1vZi10eXBlJzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogJy0xJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH1cbn07XG5jb25zdCBkcm9wID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoXG4gICAgMGRlZyxcbiAgICByZ2JhKDAsMCwwLDAuNSkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWBcbn07XG5jb25zdCBkcm9wVG9wID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoXG4gICAgMGRlZyxcbiAgICByZ2JhKDAsMCwwLDApIDAsXG4gICAgcmdiYSgwLDAsMCwwKSA4cmVtIGNhbGMoMTAwJSAtIDhyZW0pLFxuICAgIHJnYmEoMCwwLDAsMC41KSAxMDAlXG4gIClgXG59O1xuY29uc3QgcmVzcG9uc2l2ZVN0eWxlcyA9IHtcbiAgZGVza3RvcDoge1xuICAgIGZvbnRTaXplOiAnMjRweCdcbiAgfSAvLyBhZGQgaWYgbmVjZXNzYXJ5OiBiaWctZGVza3RvcFxuXG59O1xuY29uc3Qgcm93U3R5bGUgPSB7XG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB3aWR0aDogJzEwMCUnLFxuICBwYWRkaW5nOiAnY2FsYygyZW0gLSAxNnB4KScsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxuICAnPiBidXR0b246bm90KDpkaXNhYmxlZCkgfiBidXR0b246bm90KDpkaXNhYmxlZCksIGRpdiB+IGJ1dHRvbjpsYXN0LW9mLXR5cGUnOiB7XG4gICAgbWFyZ2luTGVmdDogJzAuNXJlbSdcbiAgfSxcbiAgJz4gYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5SaWdodDogJzAuNXJlbSdcbiAgfVxufTtcbi8qIFxuICBIaW50OlxuICAgIGRpc3BsYXlTdHlsZXMgc3BlY2lmaWNpdHkgaXMgaGlnaGVyIHRoZW4gY29udHJvbHNTdHlsZVxuICAgIE5lZWQgdG8gcGF5IGF0dGVudGlvbiB3aGVuIHdlIHJldmlzZSB0aGVzZSBzdHlsZXMuXG4qL1xuXG5jb25zdCBkaXNwbGF5U3R5bGVzID0ge1xuICBoaWRkZW46IHtcbiAgICAnPiBkaXY6bm90KC5waW5uZWQpLCA+IGJ1dHRvbjpub3QoLnBpbm5lZCksID4gaDE6bm90KC5waW5uZWQpJzoge1xuICAgICAgekluZGV4OiAtMixcbiAgICAgIG9wYWNpdHk6IDAsXG4gICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjhzIGVhc2Utb3V0LCB6LWluZGV4IDBzIDAuOHMnXG4gICAgfVxuICB9LFxuICBzaG93bjoge1xuICAgICc+IGRpdjpub3QoLnBpbm5lZCksID4gYnV0dG9uOm5vdCgucGlubmVkKSwgPiBoMTpub3QoLnBpbm5lZCknOiB7XG4gICAgICB6SW5kZXg6IDEsXG4gICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjNzIGVhc2Utb3V0LCB6LWluZGV4IDBzIDBzJ1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IGNvbnRyb2xzRGlzcGxheVN0eWxlcyA9IHtcbiAgaGlkZGVuOiB7IC4uLmRpc3BsYXlTdHlsZXMuaGlkZGVuLFxuICAgICd+IGRpdjpub3QoLnBpbm5lZCknOiBkaXNwbGF5U3R5bGVzLmhpZGRlblxuICB9LFxuICBzaG93bjogeyAuLi5kaXNwbGF5U3R5bGVzLnNob3duLFxuICAgICd+IGRpdic6IGRpc3BsYXlTdHlsZXMuc2hvd25cbiAgfVxufTtcbmNvbnN0IGNvbnRyb2xzU3R5bGUgPSB7XG4gIG1hcmdpblRvcDogJ2F1dG8nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAnMicsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICc+IGJ1dHRvbic6IHtcbiAgICBtYXJnaW46ICcxZW0nLFxuICAgIHdpZHRoOiAnMS43NWVtJyxcbiAgICBoZWlnaHQ6ICcxLjc1ZW0nLFxuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgICcmOmRpc2FibGVkJzoge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICAgIH0sXG4gICAgJyYucGxheS1idXR0b24nOiB7XG4gICAgICB3aWR0aDogJzNlbScsXG4gICAgICBoZWlnaHQ6ICczZW0nXG4gICAgfVxuICB9XG59O1xuY29uc3QgYm90dG9tU3BhY2UgPSB7XG4gICdAbWVkaWEgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogJzJlbSdcbiAgfSxcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogJzEuM2VtJ1xuICB9XG59O1xuY29uc3QgZnVuY3Rpb25CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIGJ1dHRvbjoge1xuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgbWFyZ2luTGVmdDogJzAuNzVlbSdcbiAgfVxufTtcbmNvbnN0IGluZm9CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbSdcbn07XG5jb25zdCB0ZXh0RWxsaXBzaXMgPSB7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJ1xufTtcbmNvbnN0IGluZm9TdHlsZSA9IHtcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgaDE6IHtcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICAuLi50ZXh0RWxsaXBzaXMsXG4gICAgJz4gZGl2JzogdGV4dEVsbGlwc2lzXG4gIH0sXG4gICdidXR0b24gKyBoMSc6IHtcbiAgICBtYXJnaW5MZWZ0OiAnMWVtJ1xuICB9XG59O1xuY29uc3QgYmFja1N0eWxlID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAwLFxuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAnfiBkaXYnOiB7XG4gICAgekluZGV4OiAwXG4gIH1cbn07XG5jb25zdCBza2lwU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAnOXJlbScsXG4gIHRleHRBbGlnbjogJ3JpZ2h0JyxcbiAgYnV0dG9uOiB7XG4gICAgd2lkdGg6ICdhdXRvJyxcbiAgICBoZWlnaHQ6ICdhdXRvJ1xuICB9XG59O1xuY29uc3QgZGVrc3RvcFN0eWxlID0ge1xuICAnPiBkaXYnOiB7XG4gICAgJz4gYnV0dG9uOm5vdCg6ZGlzYWJsZWQpIH4gYnV0dG9uOm5vdCg6ZGlzYWJsZWQpLCA+IGJ1dHRvbjpsYXN0LW9mLXR5cGUnOiB7XG4gICAgICBtYXJnaW5MZWZ0OiAnMC43NWVtJ1xuICAgIH0sXG4gICAgJz4gYnV0dG9uOmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgICBtYXJnaW5MZWZ0OiAnMCdcbiAgICB9XG4gIH0sXG4gICctLXRodW1ibmFpbC13aWR0aCc6ICcyODgnIC8vIGhlaWdodCAxNjJcblxufTtcbmNvbnN0IGRlc2t0b3BDb250cm9scyA9IHtcbiAgZmxleFdyYXA6ICd3cmFwJyxcbiAgJz4gZGl2OmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgZmxleDogJzEwMCUnLFxuICAgIG1hcmdpbkJvdHRvbTogJzAuODhlbSdcbiAgfSxcbiAgJz4gYnV0dG9uW2Rpc2FibGVkXSc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZSdcbiAgfVxufTtcbmNvbnN0IGFkQ29udGFpbmVyU3R5bGUgPSB7XG4gIGZsZXhHcm93OiAxLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgJz4gaWZyYW1lJzoge1xuICAgIHBvaW50ZXJFdmVudHM6ICdhdXRvJ1xuICB9LFxuICBidXR0b246IHtcbiAgICBwb2ludGVyRXZlbnRzOiAnYXV0bydcbiAgfVxufTtcblxuY29uc3QgQ29udHJvbHNCbG9jayA9ICh7XG4gIG9yZGVyID0gJ21vYmlsZScsXG4gIHBsYXlCdXR0b24sXG4gIHJld2luZEJ1dHRvbiA9ICcnLFxuICBmb3J3YXJkQnV0dG9uID0gJycsXG4gIHByZXZpb3VzRXBpc29kZUJ1dHRvbiA9ICcnLFxuICBuZXh0RXBpc29kZUJ1dHRvbiA9ICcnXG59KSA9PiBvcmRlciA9PT0gJ2Rlc2t0b3AnID8ganN4cyhGcmFnbWVudCwge1xuICBjaGlsZHJlbjogW3ByZXZpb3VzRXBpc29kZUJ1dHRvbiwgcGxheUJ1dHRvbiwgbmV4dEVwaXNvZGVCdXR0b24sIHJld2luZEJ1dHRvbiwgZm9yd2FyZEJ1dHRvbl1cbn0pIDoganN4cyhGcmFnbWVudCwge1xuICBjaGlsZHJlbjogW3Jld2luZEJ1dHRvbiwgcHJldmlvdXNFcGlzb2RlQnV0dG9uLCBwbGF5QnV0dG9uLCBuZXh0RXBpc29kZUJ1dHRvbiwgZm9yd2FyZEJ1dHRvbl1cbn0pO1xuXG52YXIgX3JlZiQ2ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFuOGQ1bG1cIixcbiAgc3R5bGVzOiBcImZsZXg6MTt0ZXh0LXNoYWRvdzoycHggMnB4IDFweCAjMDAwXCJcbn0gOiB7XG4gIG5hbWU6IFwiMWl1c25xbC1EZWZhdWx0TGF5b3V0XCIsXG4gIHN0eWxlczogXCJmbGV4OjE7dGV4dC1zaGFkb3c6MnB4IDJweCAxcHggIzAwMDtsYWJlbDpEZWZhdWx0TGF5b3V0O1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtSbFptRjFiSFJNWVhsdmRYUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCYlZsWklpd2labWxzWlNJNklrUmxabUYxYkhSTVlYbHZkWFF1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUJBYW5ONFNXMXdiM0owVTI5MWNtTmxJRUJsYlc5MGFXOXVMM0psWVdOMElDb3ZYRzR2S2lCbGMyeHBiblF0WkdsellXSnNaU0J5WldGamRDOXdjbTl3TFhSNWNHVnpJQ292WEc1cGJYQnZjblFnZTNWelpWSmxabjBnWm5KdmJTQW5jbVZoWTNRblhHNXBiWEJ2Y25RZ2UxTnNiM1JRY205MmFXUmxjbjBnWm5KdmJTQW5MaTkxYVVWNGRHVnVjMmx2Ym5NblhHNWNibU52Ym5OMElHVjRjR0Z1WkNBOUlIdGNiaUFnYldGeVoybHVPaUF3TEZ4dUlDQm1iR1Y0T2lBbk1TY3NYRzU5WEc1Y2JtTnZibk4wSUdocFpHUmxiaUE5SUh0a2FYTndiR0Y1T2lBbmJtOXVaU2Q5WEc1Y2JtTnZibk4wSUdOdmJuUmhhVzVsY2xOMGVXeGxJRDBnZTF4dUlDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQm9aV2xuYUhRNklDY3hNREFsSnl4Y2JpQWdZbTk0VTJsNmFXNW5PaUFuWW05eVpHVnlMV0p2ZUNjc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWm14bGVFUnBjbVZqZEdsdmJqb2dKMk52YkhWdGJpY3NYRzRnSUc5MlpYSm1iRzkzT2lBbmFHbGtaR1Z1Snl4Y2JpQWdZMjlzYjNJNklDZDNhR2wwWlNjc1hHNGdJQzh2SUhCeVpYWmxiblFnWVc1cGJXRjBhVzl1SUdkc2FXTm9LR0ZtZEdWeWFXMWhaMlVwSUc5bUlHUmxjMk5sYm1SaGJuUWdaV3hsYldWdWRITmNiaUFnZEhKaGJuTm1iM0p0T2lBbmRISmhibk5zWVhSbFdDZ3dLU2NzWEc0Z0lIVnpaWEpUWld4bFkzUTZJQ2R1YjI1bEp5eGNiaUFnYURFNklIdGNiaUFnSUNCdFlYSm5hVzQ2SURBc1hHNGdJQ0FnWm05dWRGTnBlbVU2SUNjeFpXMG5MRnh1SUNBZ0lHeHBibVZJWldsbmFIUTZJQ2N4TGpWbGJTY3NYRzRnSUgwc1hHNGdJQ2RoTENCaE9teHBibXNzSUdFNmRtbHphWFJsWkNjNklIdGNiaUFnSUNCamIyeHZjam9nSnlObVptWW5MRnh1SUNBZ0lHOXdZV05wZEhrNklEQXVPQ3hjYmlBZ0lDQjBaWGgwUkdWamIzSmhkR2x2YmpvZ0oyNXZibVVuTEZ4dUlDQjlMRnh1SUNCaWRYUjBiMjQ2SUh0Y2JpQWdJQ0JtYjI1MFUybDZaVG9nSjJsdWFHVnlhWFFuTEZ4dUlDQWdJQ2MrSUNvbk9pQjdYRzRnSUNBZ0lDQndiMmx1ZEdWeVJYWmxiblJ6T2lBbmJtOXVaU2NzWEc0Z0lDQWdmU3hjYmlBZ2ZTeGNiaUFnSnkwdGRHaDFiV0p1WVdsc0xYZHBaSFJvSnpvZ0p6azJKeXdnTHk4Z2FHVnBaMmgwSURVMFhHNTlYRzVjYm1OdmJuTjBJSFpwWkdWdlEyOXVkR0ZwYm1WeVUzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRqcG1hWEp6ZEMxdlppMTBlWEJsSnpvZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUhwSmJtUmxlRG9nSnkweEp5eGNiaUFnSUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNBZ0lHaGxhV2RvZERvZ0p6RXdNQ1VuTEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCa2NtOXdJRDBnZTF4dUlDQmlZV05yWjNKdmRXNWtTVzFoWjJVNklHQnNhVzVsWVhJdFozSmhaR2xsYm5Rb1hHNGdJQ0FnTUdSbFp5eGNiaUFnSUNCeVoySmhLREFzTUN3d0xEQXVOU2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUdSeWIzQlViM0FnUFNCN1hHNGdJR0poWTJ0bmNtOTFibVJKYldGblpUb2dZR3hwYm1WaGNpMW5jbUZrYVdWdWRDaGNiaUFnSUNBd1pHVm5MRnh1SUNBZ0lISm5ZbUVvTUN3d0xEQXNNQ2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUhKbGMzQnZibk5wZG1WVGRIbHNaWE1nUFNCN1hHNGdJR1JsYzJ0MGIzQTZJSHRjYmlBZ0lDQm1iMjUwVTJsNlpUb2dKekkwY0hnbkxGeHVJQ0I5TENBdkx5QmhaR1FnYVdZZ2JtVmpaWE56WVhKNU9pQmlhV2N0WkdWemEzUnZjRnh1ZlZ4dVhHNWpiMjV6ZENCeWIzZFRkSGxzWlNBOUlIdGNiaUFnWW05NFUybDZhVzVuT2lBblltOXlaR1Z5TFdKdmVDY3NYRzRnSUhkcFpIUm9PaUFuTVRBd0pTY3NYRzRnSUhCaFpHUnBibWM2SUNkallXeGpLREpsYlNBdElERTJjSGdwSnl4Y2JpQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0JoYkdsbmJrbDBaVzF6T2lBblkyVnVkR1Z5Snl4Y2JpQWdhblZ6ZEdsbWVVTnZiblJsYm5RNklDZG1iR1Y0TFdWdVpDY3NYRzRnSUNjK0lHSjFkSFJ2YmpwdWIzUW9PbVJwYzJGaWJHVmtLU0IrSUdKMWRIUnZianB1YjNRb09tUnBjMkZpYkdWa0tTd2daR2wySUg0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZYRzRnSUNBZ2UxeHVJQ0FnSUNBZ2JXRnlaMmx1VEdWbWREb2dKekF1TlhKbGJTY3NYRzRnSUNBZ2ZTeGNiaUFnSno0Z1luVjBkRzl1T201dmRDZzZiR0Z6ZEMxdlppMTBlWEJsS1NjNklIdGNiaUFnSUNCdFlYSm5hVzVTYVdkb2REb2dKekF1TlhKbGJTY3NYRzRnSUgwc1hHNTlYRzVjYmk4cUlGeHVJQ0JJYVc1ME9seHVJQ0FnSUdScGMzQnNZWGxUZEhsc1pYTWdjM0JsWTJsbWFXTnBkSGtnYVhNZ2FHbG5hR1Z5SUhSb1pXNGdZMjl1ZEhKdmJITlRkSGxzWlZ4dUlDQWdJRTVsWldRZ2RHOGdjR0Y1SUdGMGRHVnVkR2x2YmlCM2FHVnVJSGRsSUhKbGRtbHpaU0IwYUdWelpTQnpkSGxzWlhNdVhHNHFMMXh1WTI5dWMzUWdaR2x6Y0d4aGVWTjBlV3hsY3lBOUlIdGNiaUFnYUdsa1pHVnVPaUI3WEc0Z0lDQWdKejRnWkdsMk9tNXZkQ2d1Y0dsdWJtVmtLU3dnUGlCaWRYUjBiMjQ2Ym05MEtDNXdhVzV1WldRcExDQStJR2d4T201dmRDZ3VjR2x1Ym1Wa0tTYzZJSHRjYmlBZ0lDQWdJSHBKYm1SbGVEb2dMVElzWEc0Z0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnZEhKaGJuTnBkR2x2YmpvZ0oyOXdZV05wZEhrZ01DNDRjeUJsWVhObExXOTFkQ3dnZWkxcGJtUmxlQ0F3Y3lBd0xqaHpKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J6YUc5M2Jqb2dlMXh1SUNBZ0lDYytJR1JwZGpwdWIzUW9MbkJwYm01bFpDa3NJRDRnWW5WMGRHOXVPbTV2ZENndWNHbHVibVZrS1N3Z1BpQm9NVHB1YjNRb0xuQnBibTVsWkNrbk9pQjdYRzRnSUNBZ0lDQjZTVzVrWlhnNklERXNYRzRnSUNBZ0lDQjBjbUZ1YzJsMGFXOXVPaUFuYjNCaFkybDBlU0F3TGpOeklHVmhjMlV0YjNWMExDQjZMV2x1WkdWNElEQnpJREJ6Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCamIyNTBjbTlzYzBScGMzQnNZWGxUZEhsc1pYTWdQU0I3WEc0Z0lHaHBaR1JsYmpvZ2UxeHVJQ0FnSUM0dUxtUnBjM0JzWVhsVGRIbHNaWE11YUdsa1pHVnVMRnh1SUNBZ0lDZCtJR1JwZGpwdWIzUW9MbkJwYm01bFpDa25PaUJrYVhOd2JHRjVVM1I1YkdWekxtaHBaR1JsYml4Y2JpQWdmU3hjYmlBZ2MyaHZkMjQ2SUh0Y2JpQWdJQ0F1TGk1a2FYTndiR0Y1VTNSNWJHVnpMbk5vYjNkdUxGeHVJQ0FnSUNkK0lHUnBkaWM2SUdScGMzQnNZWGxUZEhsc1pYTXVjMmh2ZDI0c1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHTnZiblJ5YjJ4elUzUjViR1VnUFNCN1hHNGdJRzFoY21kcGJsUnZjRG9nSjJGMWRHOG5MRnh1SUNCd2IzTnBkR2x2YmpvZ0oyRmljMjlzZFhSbEp5eGNiaUFnZWtsdVpHVjRPaUFuTWljc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWVd4cFoyNUpkR1Z0Y3pvZ0oyTmxiblJsY2ljc1hHNGdJQ2MrSUdKMWRIUnZiaWM2SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJQ2N4WlcwbkxGeHVJQ0FnSUhkcFpIUm9PaUFuTVM0M05XVnRKeXhjYmlBZ0lDQm9aV2xuYUhRNklDY3hMamMxWlcwbkxGeHVJQ0FnSUNjdGQyVmlhMmwwTFhSaGNDMW9hV2RvYkdsbmFIUXRZMjlzYjNJbk9pQW5kSEpoYm5Od1lYSmxiblFuTEZ4dUlDQWdJQ2NtT21ScGMyRmliR1ZrSnpvZ2UxeHVJQ0FnSUNBZ2IzQmhZMmwwZVRvZ01DeGNiaUFnSUNBZ0lIQnZhVzUwWlhKRmRtVnVkSE02SUNkdWIyNWxKeXhjYmlBZ0lDQjlMRnh1SUNBZ0lDY21MbkJzWVhrdFluVjBkRzl1SnpvZ2UxeHVJQ0FnSUNBZ2QybGtkR2c2SUNjelpXMG5MRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NMlZ0Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCaWIzUjBiMjFUY0dGalpTQTlJSHRjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJSEJ2Y25SeVlXbDBLU2M2SUh0Y2JpQWdJQ0J3WVdSa2FXNW5RbTkwZEc5dE9pQW5NbVZ0Snl4Y2JpQWdmU3hjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJR3hoYm1SelkyRndaU2tuT2lCN1hHNGdJQ0FnY0dGa1pHbHVaMEp2ZEhSdmJUb2dKekV1TTJWdEp5eGNiaUFnZlN4Y2JuMWNibHh1WTI5dWMzUWdablZ1WTNScGIyNUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNGdJR0oxZEhSdmJqb2dlMXh1SUNBZ0lDY3RkMlZpYTJsMExYUmhjQzFvYVdkb2JHbG5hSFF0WTI5c2IzSW5PaUFuZEhKaGJuTndZWEpsYm5RbkxGeHVJQ0FnSUdScGMzQnNZWGs2SUNkaWJHOWpheWNzWEc0Z0lDQWdiV0Z5WjJsdVRHVm1kRG9nSnpBdU56VmxiU2NzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUdsdVptOUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNTlYRzVjYm1OdmJuTjBJSFJsZUhSRmJHeHBjSE5wY3lBOUlIdGNiaUFnYjNabGNtWnNiM2M2SUNkb2FXUmtaVzRuTEZ4dUlDQjNhR2wwWlZOd1lXTmxPaUFuYm05M2NtRndKeXhjYmlBZ2RHVjRkRTkyWlhKbWJHOTNPaUFuWld4c2FYQnphWE1uTEZ4dWZWeHVYRzVqYjI1emRDQnBibVp2VTNSNWJHVWdQU0I3WEc0Z0lHOTJaWEptYkc5M09pQW5kbWx6YVdKc1pTY3NYRzRnSUdneE9pQjdYRzRnSUNBZ1ptOXVkRmRsYVdkb2REb2dKelV3TUNjc1hHNGdJQ0FnTGk0dWRHVjRkRVZzYkdsd2MybHpMRnh1SUNBZ0lDYytJR1JwZGljNklIUmxlSFJGYkd4cGNITnBjeXhjYmlBZ2ZTeGNiaUFnSjJKMWRIUnZiaUFySUdneEp6b2dlMXh1SUNBZ0lHMWhjbWRwYmt4bFpuUTZJQ2N4WlcwbkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmlZV05yVTNSNWJHVWdQU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNCNlNXNWtaWGc2SURBc1hHNGdJSGRwWkhSb09pQW5NVEF3SlNjc1hHNGdJR2hsYVdkb2REb2dKekV3TUNVbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUNkK0lHUnBkaWM2SUh0Y2JpQWdJQ0I2U1c1a1pYZzZJREFzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUhOcmFYQlRkSGxzWlNBOUlIdGNiaUFnY0c5emFYUnBiMjQ2SUNkaFluTnZiSFYwWlNjc1hHNGdJSEpwWjJoME9pQXdMRnh1SUNCaWIzUjBiMjA2SUNjNWNtVnRKeXhjYmlBZ2RHVjRkRUZzYVdkdU9pQW5jbWxuYUhRbkxGeHVJQ0JpZFhSMGIyNDZJSHRjYmlBZ0lDQjNhV1IwYURvZ0oyRjFkRzhuTEZ4dUlDQWdJR2hsYVdkb2REb2dKMkYxZEc4bkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmtaV3R6ZEc5d1UzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRpYzZJSHRjYmlBZ0lDQW5QaUJpZFhSMGIyNDZibTkwS0Rwa2FYTmhZbXhsWkNrZ2ZpQmlkWFIwYjI0NmJtOTBLRHBrYVhOaFlteGxaQ2tzSUQ0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQWdJRzFoY21kcGJreGxablE2SUNjd0xqYzFaVzBuTEZ4dUlDQWdJSDBzWEc0Z0lDQWdKejRnWW5WMGRHOXVPbVpwY25OMExXOW1MWFI1Y0dVbk9pQjdYRzRnSUNBZ0lDQnRZWEpuYVc1TVpXWjBPaUFuTUNjc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYmlBZ0p5MHRkR2gxYldKdVlXbHNMWGRwWkhSb0p6b2dKekk0T0Njc0lDOHZJR2hsYVdkb2RDQXhOakpjYm4xY2JseHVZMjl1YzNRZ1pHVnphM1J2Y0VOdmJuUnliMnh6SUQwZ2UxeHVJQ0JtYkdWNFYzSmhjRG9nSjNkeVlYQW5MRnh1SUNBblBpQmthWFk2Wm1seWMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQm1iR1Y0T2lBbk1UQXdKU2NzWEc0Z0lDQWdiV0Z5WjJsdVFtOTBkRzl0T2lBbk1DNDRPR1Z0Snl4Y2JpQWdmU3hjYmlBZ0p6NGdZblYwZEc5dVcyUnBjMkZpYkdWa1hTYzZJSHRjYmlBZ0lDQmthWE53YkdGNU9pQW5ibTl1WlNjc1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHRmtRMjl1ZEdGcGJtVnlVM1I1YkdVZ1BTQjdYRzRnSUdac1pYaEhjbTkzT2lBeExGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUhCdmFXNTBaWEpGZG1WdWRITTZJQ2R1YjI1bEp5eGNiaUFnSno0Z2FXWnlZVzFsSnpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc0Z0lHSjFkSFJ2YmpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc1OVhHNWNibU52Ym5OMElFTnZiblJ5YjJ4elFteHZZMnNnUFNBb2UxeHVJQ0J2Y21SbGNpQTlJQ2R0YjJKcGJHVW5MRnh1SUNCd2JHRjVRblYwZEc5dUxGeHVJQ0J5WlhkcGJtUkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ1ptOXlkMkZ5WkVKMWRIUnZiaUE5SUNjbkxGeHVJQ0J3Y21WMmFXOTFjMFZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ2JtVjRkRVZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYm4wcElEMCtYRzRnSUc5eVpHVnlJRDA5UFNBblpHVnphM1J2Y0NjZ1B5QW9YRzRnSUNBZ1BENWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0eVpYZHBibVJDZFhSMGIyNTlYRzRnSUNBZ0lDQjdabTl5ZDJGeVpFSjFkSFJ2Ym4xY2JpQWdJQ0E4THo1Y2JpQWdLU0E2SUNoY2JpQWdJQ0E4UGx4dUlDQWdJQ0FnZTNKbGQybHVaRUoxZEhSdmJuMWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0bWIzSjNZWEprUW5WMGRHOXVmVnh1SUNBZ0lEd3ZQbHh1SUNBcFhHNWNibU52Ym5OMElFUmxabUYxYkhSTVlYbHZkWFFnUFNBb2UxeHVJQ0IwZVhCbElEMGdKMjF2WW1sc1pTY3NYRzRnSUhOMGVXeGxMRnh1SUNCa2FYTndiR0Y1TEZ4dUlDQmpiMjUwY205c2MwUnBjM0JzWVhrZ1BTQmthWE53YkdGNUxGeHVJQ0J6YVhwbExGeHVJQ0IwYVhSc1pTQTlJQ2NuTEZ4dUlDQmphR0Z1Ym1Wc1ZHbDBiR1VnUFNBbkp5eGNiaUFnWTJoaGJtNWxiRWxqYjI0Z1BTQW5KeXhjYmlBZ2RtbGtaVzhzWEc0Z0lHaGhkbVZDYjNSMGIyMUpkR1Z0TEZ4dUlDQnpaV1ZyWW1GeUlEMGdKeWNzWEc0Z0lHTnZiblJ5YjJ4Q2RYUjBiMjV6TEZ4dUlDQjJiMngxYldWRGIyNTBjbTlzTEZ4dUlDQm1kV3hzYzJOeVpXVnVRblYwZEc5dUxGeHVJQ0JpWVdOclFuVjBkRzl1SUQwZ0p5Y3NYRzRnSUdGa1UzUmhkSFZ6SUQwZ0p5Y3NYRzRnSUdGa1RHbHVheUE5SUNjbkxGeHVJQ0JoWkZOcmFYQkNkWFIwYjI0c1hHNGdJR0poWTJ0SmRHVnRjeXhjYmlBZ1kyaHBiR1J5Wlc0c1hHNGdJR052Ym5SaGFXNWxjbEpsWml4Y2JpQWdZbUZqYTFKbFppeGNiaUFnWVdSRGIyNTBZV2x1WlhKU1pXWXNYRzRnSUM0dUxuSmxjM1JjYm4wcElEMCtJSHRjYmlBZ1kyOXVjM1FnYzJ4dmRGSmxaaUE5SUhWelpWSmxaaWg3ZlNsY2JseHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJR056Y3oxN1cxeHVJQ0FnSUNBZ0lDQmpiMjUwWVdsdVpYSlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2RtbGtaVzlEYjI1MFlXbHVaWEpUZEhsc1pTeGNiaUFnSUNBZ0lDQWdjbVZ6Y0c5dWMybDJaVk4wZVd4bGMxdHphWHBsWFN4Y2JpQWdJQ0FnSUNBZ2RIbHdaU0E5UFQwZ0oyUmxjMnQwYjNBbklDWW1JR1JsYTNOMGIzQlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2MzUjViR1VzWEc0Z0lDQWdJQ0JkZlZ4dUlDQWdJQ0FnY21WbVBYdGpiMjUwWVdsdVpYSlNaV1o5WEc0Z0lDQWdJQ0I3TGk0dWNtVnpkSDFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdkbWxrWlc5OVhHNGdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJSEpsWmoxN1ltRmphMUpsWm4xY2JpQWdJQ0FnSUNBZ1kzTnpQWHRiWEc0Z0lDQWdJQ0FnSUNBZ1ltRmphMU4wZVd4bExGeHVJQ0FnSUNBZ0lDQWdJR1JwYzNCc1lYa2dJVDA5SUNkb2FXUmtaVzRuSUNZbUlDaG9ZWFpsUW05MGRHOXRTWFJsYlNBL0lHUnliM0JVYjNBZ09pQmtjbTl3S1N4Y2JpQWdJQ0FnSUNBZ1hYMWNiaUFnSUNBZ0lENWNiaUFnSUNBZ0lDQWdlM1I1Y0dVZ0lUMDlJQ2R0YjJKcGJHVW5JQ1ltSUdKaFkydEpkR1Z0YzMxY2JpQWdJQ0FnSUNBZ2UyRmtVMnRwY0VKMWRIUnZiaUFtSmlBOFpHbDJJR056Y3oxN2MydHBjRk4wZVd4bGZUNTdZV1JUYTJsd1FuVjBkRzl1ZlR3dlpHbDJQbjFjYmlBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdHliM2RUZEhsc1pTd2dhVzVtYjFOMGVXeGxMQ0JrYVhOd2JHRjVVM1I1YkdWelcyUnBjM0JzWVhsZFhYMCtYRzRnSUNBZ0lDQWdJSHRpWVdOclFuVjBkRzl1ZlZ4dUlDQWdJQ0FnSUNCN1kyaGhibTVsYkVsamIyNTlYRzRnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMblJwZEd4bFFtRnlJRDBnWld4bGJXVnVkRnh1SUNBZ0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBZ0lDOCtYRzRnSUNBZ0lDQWdJRHhvTVQ1Y2JpQWdJQ0FnSUNBZ0lDQjdZMmhoYm01bGJGUnBkR3hsZlZ4dUlDQWdJQ0FnSUNBZ0lIdDBhWFJzWlgxY2JpQWdJQ0FnSUNBZ1BDOW9NVDVjYmlBZ0lDQWdJQ0FnUEdScGRpQmpjM005ZTJWNGNHRnVaSDBnTHo1Y2JpQWdJQ0FnSUNBZ2UzUjVjR1VnUFQwOUlDZHRiMkpwYkdVbklDWW1JQ2hjYmlBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllMkZrVTNSaGRIVnpJRDhnYUdsa1pHVnVJRG9nVzJaMWJtTjBhVzl1UW1GeVUyeHZkRk4wZVd4bFhYMWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE5zYjNSU1pXWXVZM1Z5Y21WdWRDNW1kVzVqZEdsdmJrSmhjaUE5SUdWc1pXMWxiblJjYmlBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnTHo1Y2JpQWdJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lDQWdlMkZrVEdsdWF5QW1KaUE4WkdsMklHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lQbnRoWkV4cGJtdDlQQzlrYVhZK2ZWeHVJQ0FnSUNBZ1BDOWthWFkrWEc0Z0lDQWdJQ0E4WkdsMklISmxaajE3WVdSRGIyNTBZV2x1WlhKU1pXWjlJR056Y3oxN1lXUkRiMjUwWVdsdVpYSlRkSGxzWlgwK1hHNGdJQ0FnSUNBZ0lIdDBlWEJsSUQwOVBTQW5iVzlpYVd4bEp5QW1KaUFvWEc0Z0lDQWdJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdGpiMjUwY205c2MxTjBlV3hsTENCa2FYTndiR0Y1VTNSNWJHVnpXMk52Ym5SeWIyeHpSR2x6Y0d4aGVWMWRmVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lEeERiMjUwY205c2MwSnNiMk5ySUc5eVpHVnlQVndpYlc5aWFXeGxYQ0lnZXk0dUxtTnZiblJ5YjJ4Q2RYUjBiMjV6ZlNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ0lDQXBmVnh1SUNBZ0lDQWdQQzlrYVhZK1hHNGdJQ0FnSUNCN2RIbHdaU0E5UFQwZ0oyMXZZbWxzWlNjZ0ppWWdLRnh1SUNBZ0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lDQWdZM056UFh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZrVTNSaGRIVnpYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lEOGdhR2xrWkdWdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ1cybHVabTlDWVhKVGJHOTBVM1I1YkdVc0lHTnZiblJ5YjJ4elJHbHpjR3hoZVZOMGVXeGxjMXRqYjI1MGNtOXNjMFJwYzNCc1lYbGRYVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnZlgxY2JpQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQThaR2wyWEc0Z0lDQWdJQ0FnSUdOemN6MTdXMXh1SUNBZ0lDQWdJQ0FnSUhKdmQxTjBlV3hsTEZ4dUlDQWdJQ0FnSUNBZ0lIdHRZWEpuYVc1VWIzQTZJQ2RoZFhSdkozMHNYRzRnSUNBZ0lDQWdJQ0FnZEhsd1pTQTlQVDBnSjJSbGMydDBiM0FuSUNZbUlHUmxjMnQwYjNCRGIyNTBjbTlzY3l4Y2JpQWdJQ0FnSUNBZ0lDQmpiMjUwY205c2MwUnBjM0JzWVhsVGRIbHNaWE5iWTI5dWRISnZiSE5FYVhOd2JHRjVYU3hjYmlBZ0lDQWdJQ0FnSUNCMGVYQmxJQ0U5UFNBblpHVnphM1J2Y0NjZ0ppWWdZbTkwZEc5dFUzQmhZMlVzWEc0Z0lDQWdJQ0FnSUYxOVhHNGdJQ0FnSUNBK1hHNGdJQ0FnSUNBZ0lIdHpaV1ZyWW1GeUlIeDhJRHhrYVhZZ0x6NTlYRzRnSUNBZ0lDQWdJSHQwZVhCbElEMDlQU0FuWkdWemEzUnZjQ2NnSmlZZ0tGeHVJQ0FnSUNBZ0lDQWdJRHcrWEc0Z0lDQWdJQ0FnSUNBZ0lDQThRMjl1ZEhKdmJITkNiRzlqYXlCdmNtUmxjajFjSW1SbGMydDBiM0JjSWlCN0xpNHVZMjl1ZEhKdmJFSjFkSFJ2Ym5OOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnpjejE3WVdSVGRHRjBkWE1nUHlCb2FXUmtaVzRnT2lCYmFXNW1iMEpoY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2UGx4dUlDQWdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ0lDQjdZV1JUZEdGMGRYTWdKaVlnS0Z4dUlDQWdJQ0FnSUNBZ0lEeGthWFpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllM3RtYkdWNE9pQXhMQ0IwWlhoMFUyaGhaRzkzT2lBbk1uQjRJREp3ZUNBeGNIZ2dJekF3TUNkOWZWeHVJQ0FnSUNBZ0lDQWdJRDVjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGhaRk4wWVhSMWMzMWNiaUFnSUNBZ0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTNSNWNHVWdQVDA5SUNka1pYTnJkRzl3SnlBbUppQW9YRzRnSUNBZ0lDQWdJQ0FnUEQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhZZ1kzTnpQWHRsZUhCaGJtUjlJQzgrWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdkbTlzZFcxbFEyOXVkSEp2YkgxY2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTNOelBYdGhaRk4wWVhSMWN5QS9JR2hwWkdSbGJpQTZJRnRtZFc1amRHbHZia0poY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbVoxYm1OMGFXOXVRbUZ5SUQwZ1pXeGxiV1Z1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0I5ZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdMejVjYmlBZ0lDQWdJQ0FnSUNBOEx6NWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTJaMWJHeHpZM0psWlc1Q2RYUjBiMjU5WEc0Z0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lEeFRiRzkwVUhKdmRtbGtaWElnYzJ4dmRGSmxaajE3YzJ4dmRGSmxabjArZTJOb2FXeGtjbVZ1ZlR3dlUyeHZkRkJ5YjNacFpHVnlQbHh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUVSbFptRjFiSFJNWVhsdmRYUmNiaUpkZlE9PSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kNlxufTtcblxuY29uc3QgRGVmYXVsdExheW91dCA9ICh7XG4gIHR5cGUgPSAnbW9iaWxlJyxcbiAgc3R5bGUsXG4gIGRpc3BsYXksXG4gIGNvbnRyb2xzRGlzcGxheSA9IGRpc3BsYXksXG4gIHNpemUsXG4gIHRpdGxlID0gJycsXG4gIGNoYW5uZWxUaXRsZSA9ICcnLFxuICBjaGFubmVsSWNvbiA9ICcnLFxuICB2aWRlbyxcbiAgaGF2ZUJvdHRvbUl0ZW0sXG4gIHNlZWtiYXIgPSAnJyxcbiAgY29udHJvbEJ1dHRvbnMsXG4gIHZvbHVtZUNvbnRyb2wsXG4gIGZ1bGxzY3JlZW5CdXR0b24sXG4gIGJhY2tCdXR0b24gPSAnJyxcbiAgYWRTdGF0dXMgPSAnJyxcbiAgYWRMaW5rID0gJycsXG4gIGFkU2tpcEJ1dHRvbixcbiAgYmFja0l0ZW1zLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBiYWNrUmVmLFxuICBhZENvbnRhaW5lclJlZixcbiAgLi4ucmVzdFxufSkgPT4ge1xuICBjb25zdCBzbG90UmVmID0gdXNlUmVmKHt9KTtcbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIGNzczogW2NvbnRhaW5lclN0eWxlJDEsIHZpZGVvQ29udGFpbmVyU3R5bGUsIHJlc3BvbnNpdmVTdHlsZXNbc2l6ZV0sIHR5cGUgPT09ICdkZXNrdG9wJyAmJiBkZWtzdG9wU3R5bGUsIHN0eWxlLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6RGVmYXVsdExheW91dDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtSbFptRjFiSFJNWVhsdmRYUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCTkZOTklpd2labWxzWlNJNklrUmxabUYxYkhSTVlYbHZkWFF1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUJBYW5ONFNXMXdiM0owVTI5MWNtTmxJRUJsYlc5MGFXOXVMM0psWVdOMElDb3ZYRzR2S2lCbGMyeHBiblF0WkdsellXSnNaU0J5WldGamRDOXdjbTl3TFhSNWNHVnpJQ292WEc1cGJYQnZjblFnZTNWelpWSmxabjBnWm5KdmJTQW5jbVZoWTNRblhHNXBiWEJ2Y25RZ2UxTnNiM1JRY205MmFXUmxjbjBnWm5KdmJTQW5MaTkxYVVWNGRHVnVjMmx2Ym5NblhHNWNibU52Ym5OMElHVjRjR0Z1WkNBOUlIdGNiaUFnYldGeVoybHVPaUF3TEZ4dUlDQm1iR1Y0T2lBbk1TY3NYRzU5WEc1Y2JtTnZibk4wSUdocFpHUmxiaUE5SUh0a2FYTndiR0Y1T2lBbmJtOXVaU2Q5WEc1Y2JtTnZibk4wSUdOdmJuUmhhVzVsY2xOMGVXeGxJRDBnZTF4dUlDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQm9aV2xuYUhRNklDY3hNREFsSnl4Y2JpQWdZbTk0VTJsNmFXNW5PaUFuWW05eVpHVnlMV0p2ZUNjc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWm14bGVFUnBjbVZqZEdsdmJqb2dKMk52YkhWdGJpY3NYRzRnSUc5MlpYSm1iRzkzT2lBbmFHbGtaR1Z1Snl4Y2JpQWdZMjlzYjNJNklDZDNhR2wwWlNjc1hHNGdJQzh2SUhCeVpYWmxiblFnWVc1cGJXRjBhVzl1SUdkc2FXTm9LR0ZtZEdWeWFXMWhaMlVwSUc5bUlHUmxjMk5sYm1SaGJuUWdaV3hsYldWdWRITmNiaUFnZEhKaGJuTm1iM0p0T2lBbmRISmhibk5zWVhSbFdDZ3dLU2NzWEc0Z0lIVnpaWEpUWld4bFkzUTZJQ2R1YjI1bEp5eGNiaUFnYURFNklIdGNiaUFnSUNCdFlYSm5hVzQ2SURBc1hHNGdJQ0FnWm05dWRGTnBlbVU2SUNjeFpXMG5MRnh1SUNBZ0lHeHBibVZJWldsbmFIUTZJQ2N4TGpWbGJTY3NYRzRnSUgwc1hHNGdJQ2RoTENCaE9teHBibXNzSUdFNmRtbHphWFJsWkNjNklIdGNiaUFnSUNCamIyeHZjam9nSnlObVptWW5MRnh1SUNBZ0lHOXdZV05wZEhrNklEQXVPQ3hjYmlBZ0lDQjBaWGgwUkdWamIzSmhkR2x2YmpvZ0oyNXZibVVuTEZ4dUlDQjlMRnh1SUNCaWRYUjBiMjQ2SUh0Y2JpQWdJQ0JtYjI1MFUybDZaVG9nSjJsdWFHVnlhWFFuTEZ4dUlDQWdJQ2MrSUNvbk9pQjdYRzRnSUNBZ0lDQndiMmx1ZEdWeVJYWmxiblJ6T2lBbmJtOXVaU2NzWEc0Z0lDQWdmU3hjYmlBZ2ZTeGNiaUFnSnkwdGRHaDFiV0p1WVdsc0xYZHBaSFJvSnpvZ0p6azJKeXdnTHk4Z2FHVnBaMmgwSURVMFhHNTlYRzVjYm1OdmJuTjBJSFpwWkdWdlEyOXVkR0ZwYm1WeVUzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRqcG1hWEp6ZEMxdlppMTBlWEJsSnpvZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUhwSmJtUmxlRG9nSnkweEp5eGNiaUFnSUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNBZ0lHaGxhV2RvZERvZ0p6RXdNQ1VuTEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCa2NtOXdJRDBnZTF4dUlDQmlZV05yWjNKdmRXNWtTVzFoWjJVNklHQnNhVzVsWVhJdFozSmhaR2xsYm5Rb1hHNGdJQ0FnTUdSbFp5eGNiaUFnSUNCeVoySmhLREFzTUN3d0xEQXVOU2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUdSeWIzQlViM0FnUFNCN1hHNGdJR0poWTJ0bmNtOTFibVJKYldGblpUb2dZR3hwYm1WaGNpMW5jbUZrYVdWdWRDaGNiaUFnSUNBd1pHVm5MRnh1SUNBZ0lISm5ZbUVvTUN3d0xEQXNNQ2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUhKbGMzQnZibk5wZG1WVGRIbHNaWE1nUFNCN1hHNGdJR1JsYzJ0MGIzQTZJSHRjYmlBZ0lDQm1iMjUwVTJsNlpUb2dKekkwY0hnbkxGeHVJQ0I5TENBdkx5QmhaR1FnYVdZZ2JtVmpaWE56WVhKNU9pQmlhV2N0WkdWemEzUnZjRnh1ZlZ4dVhHNWpiMjV6ZENCeWIzZFRkSGxzWlNBOUlIdGNiaUFnWW05NFUybDZhVzVuT2lBblltOXlaR1Z5TFdKdmVDY3NYRzRnSUhkcFpIUm9PaUFuTVRBd0pTY3NYRzRnSUhCaFpHUnBibWM2SUNkallXeGpLREpsYlNBdElERTJjSGdwSnl4Y2JpQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0JoYkdsbmJrbDBaVzF6T2lBblkyVnVkR1Z5Snl4Y2JpQWdhblZ6ZEdsbWVVTnZiblJsYm5RNklDZG1iR1Y0TFdWdVpDY3NYRzRnSUNjK0lHSjFkSFJ2YmpwdWIzUW9PbVJwYzJGaWJHVmtLU0IrSUdKMWRIUnZianB1YjNRb09tUnBjMkZpYkdWa0tTd2daR2wySUg0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZYRzRnSUNBZ2UxeHVJQ0FnSUNBZ2JXRnlaMmx1VEdWbWREb2dKekF1TlhKbGJTY3NYRzRnSUNBZ2ZTeGNiaUFnSno0Z1luVjBkRzl1T201dmRDZzZiR0Z6ZEMxdlppMTBlWEJsS1NjNklIdGNiaUFnSUNCdFlYSm5hVzVTYVdkb2REb2dKekF1TlhKbGJTY3NYRzRnSUgwc1hHNTlYRzVjYmk4cUlGeHVJQ0JJYVc1ME9seHVJQ0FnSUdScGMzQnNZWGxUZEhsc1pYTWdjM0JsWTJsbWFXTnBkSGtnYVhNZ2FHbG5hR1Z5SUhSb1pXNGdZMjl1ZEhKdmJITlRkSGxzWlZ4dUlDQWdJRTVsWldRZ2RHOGdjR0Y1SUdGMGRHVnVkR2x2YmlCM2FHVnVJSGRsSUhKbGRtbHpaU0IwYUdWelpTQnpkSGxzWlhNdVhHNHFMMXh1WTI5dWMzUWdaR2x6Y0d4aGVWTjBlV3hsY3lBOUlIdGNiaUFnYUdsa1pHVnVPaUI3WEc0Z0lDQWdKejRnWkdsMk9tNXZkQ2d1Y0dsdWJtVmtLU3dnUGlCaWRYUjBiMjQ2Ym05MEtDNXdhVzV1WldRcExDQStJR2d4T201dmRDZ3VjR2x1Ym1Wa0tTYzZJSHRjYmlBZ0lDQWdJSHBKYm1SbGVEb2dMVElzWEc0Z0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnZEhKaGJuTnBkR2x2YmpvZ0oyOXdZV05wZEhrZ01DNDRjeUJsWVhObExXOTFkQ3dnZWkxcGJtUmxlQ0F3Y3lBd0xqaHpKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J6YUc5M2Jqb2dlMXh1SUNBZ0lDYytJR1JwZGpwdWIzUW9MbkJwYm01bFpDa3NJRDRnWW5WMGRHOXVPbTV2ZENndWNHbHVibVZrS1N3Z1BpQm9NVHB1YjNRb0xuQnBibTVsWkNrbk9pQjdYRzRnSUNBZ0lDQjZTVzVrWlhnNklERXNYRzRnSUNBZ0lDQjBjbUZ1YzJsMGFXOXVPaUFuYjNCaFkybDBlU0F3TGpOeklHVmhjMlV0YjNWMExDQjZMV2x1WkdWNElEQnpJREJ6Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCamIyNTBjbTlzYzBScGMzQnNZWGxUZEhsc1pYTWdQU0I3WEc0Z0lHaHBaR1JsYmpvZ2UxeHVJQ0FnSUM0dUxtUnBjM0JzWVhsVGRIbHNaWE11YUdsa1pHVnVMRnh1SUNBZ0lDZCtJR1JwZGpwdWIzUW9MbkJwYm01bFpDa25PaUJrYVhOd2JHRjVVM1I1YkdWekxtaHBaR1JsYml4Y2JpQWdmU3hjYmlBZ2MyaHZkMjQ2SUh0Y2JpQWdJQ0F1TGk1a2FYTndiR0Y1VTNSNWJHVnpMbk5vYjNkdUxGeHVJQ0FnSUNkK0lHUnBkaWM2SUdScGMzQnNZWGxUZEhsc1pYTXVjMmh2ZDI0c1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHTnZiblJ5YjJ4elUzUjViR1VnUFNCN1hHNGdJRzFoY21kcGJsUnZjRG9nSjJGMWRHOG5MRnh1SUNCd2IzTnBkR2x2YmpvZ0oyRmljMjlzZFhSbEp5eGNiaUFnZWtsdVpHVjRPaUFuTWljc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWVd4cFoyNUpkR1Z0Y3pvZ0oyTmxiblJsY2ljc1hHNGdJQ2MrSUdKMWRIUnZiaWM2SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJQ2N4WlcwbkxGeHVJQ0FnSUhkcFpIUm9PaUFuTVM0M05XVnRKeXhjYmlBZ0lDQm9aV2xuYUhRNklDY3hMamMxWlcwbkxGeHVJQ0FnSUNjdGQyVmlhMmwwTFhSaGNDMW9hV2RvYkdsbmFIUXRZMjlzYjNJbk9pQW5kSEpoYm5Od1lYSmxiblFuTEZ4dUlDQWdJQ2NtT21ScGMyRmliR1ZrSnpvZ2UxeHVJQ0FnSUNBZ2IzQmhZMmwwZVRvZ01DeGNiaUFnSUNBZ0lIQnZhVzUwWlhKRmRtVnVkSE02SUNkdWIyNWxKeXhjYmlBZ0lDQjlMRnh1SUNBZ0lDY21MbkJzWVhrdFluVjBkRzl1SnpvZ2UxeHVJQ0FnSUNBZ2QybGtkR2c2SUNjelpXMG5MRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NMlZ0Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCaWIzUjBiMjFUY0dGalpTQTlJSHRjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJSEJ2Y25SeVlXbDBLU2M2SUh0Y2JpQWdJQ0J3WVdSa2FXNW5RbTkwZEc5dE9pQW5NbVZ0Snl4Y2JpQWdmU3hjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJR3hoYm1SelkyRndaU2tuT2lCN1hHNGdJQ0FnY0dGa1pHbHVaMEp2ZEhSdmJUb2dKekV1TTJWdEp5eGNiaUFnZlN4Y2JuMWNibHh1WTI5dWMzUWdablZ1WTNScGIyNUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNGdJR0oxZEhSdmJqb2dlMXh1SUNBZ0lDY3RkMlZpYTJsMExYUmhjQzFvYVdkb2JHbG5hSFF0WTI5c2IzSW5PaUFuZEhKaGJuTndZWEpsYm5RbkxGeHVJQ0FnSUdScGMzQnNZWGs2SUNkaWJHOWpheWNzWEc0Z0lDQWdiV0Z5WjJsdVRHVm1kRG9nSnpBdU56VmxiU2NzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUdsdVptOUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNTlYRzVjYm1OdmJuTjBJSFJsZUhSRmJHeHBjSE5wY3lBOUlIdGNiaUFnYjNabGNtWnNiM2M2SUNkb2FXUmtaVzRuTEZ4dUlDQjNhR2wwWlZOd1lXTmxPaUFuYm05M2NtRndKeXhjYmlBZ2RHVjRkRTkyWlhKbWJHOTNPaUFuWld4c2FYQnphWE1uTEZ4dWZWeHVYRzVqYjI1emRDQnBibVp2VTNSNWJHVWdQU0I3WEc0Z0lHOTJaWEptYkc5M09pQW5kbWx6YVdKc1pTY3NYRzRnSUdneE9pQjdYRzRnSUNBZ1ptOXVkRmRsYVdkb2REb2dKelV3TUNjc1hHNGdJQ0FnTGk0dWRHVjRkRVZzYkdsd2MybHpMRnh1SUNBZ0lDYytJR1JwZGljNklIUmxlSFJGYkd4cGNITnBjeXhjYmlBZ2ZTeGNiaUFnSjJKMWRIUnZiaUFySUdneEp6b2dlMXh1SUNBZ0lHMWhjbWRwYmt4bFpuUTZJQ2N4WlcwbkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmlZV05yVTNSNWJHVWdQU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNCNlNXNWtaWGc2SURBc1hHNGdJSGRwWkhSb09pQW5NVEF3SlNjc1hHNGdJR2hsYVdkb2REb2dKekV3TUNVbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUNkK0lHUnBkaWM2SUh0Y2JpQWdJQ0I2U1c1a1pYZzZJREFzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUhOcmFYQlRkSGxzWlNBOUlIdGNiaUFnY0c5emFYUnBiMjQ2SUNkaFluTnZiSFYwWlNjc1hHNGdJSEpwWjJoME9pQXdMRnh1SUNCaWIzUjBiMjA2SUNjNWNtVnRKeXhjYmlBZ2RHVjRkRUZzYVdkdU9pQW5jbWxuYUhRbkxGeHVJQ0JpZFhSMGIyNDZJSHRjYmlBZ0lDQjNhV1IwYURvZ0oyRjFkRzhuTEZ4dUlDQWdJR2hsYVdkb2REb2dKMkYxZEc4bkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmtaV3R6ZEc5d1UzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRpYzZJSHRjYmlBZ0lDQW5QaUJpZFhSMGIyNDZibTkwS0Rwa2FYTmhZbXhsWkNrZ2ZpQmlkWFIwYjI0NmJtOTBLRHBrYVhOaFlteGxaQ2tzSUQ0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQWdJRzFoY21kcGJreGxablE2SUNjd0xqYzFaVzBuTEZ4dUlDQWdJSDBzWEc0Z0lDQWdKejRnWW5WMGRHOXVPbVpwY25OMExXOW1MWFI1Y0dVbk9pQjdYRzRnSUNBZ0lDQnRZWEpuYVc1TVpXWjBPaUFuTUNjc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYmlBZ0p5MHRkR2gxYldKdVlXbHNMWGRwWkhSb0p6b2dKekk0T0Njc0lDOHZJR2hsYVdkb2RDQXhOakpjYm4xY2JseHVZMjl1YzNRZ1pHVnphM1J2Y0VOdmJuUnliMnh6SUQwZ2UxeHVJQ0JtYkdWNFYzSmhjRG9nSjNkeVlYQW5MRnh1SUNBblBpQmthWFk2Wm1seWMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQm1iR1Y0T2lBbk1UQXdKU2NzWEc0Z0lDQWdiV0Z5WjJsdVFtOTBkRzl0T2lBbk1DNDRPR1Z0Snl4Y2JpQWdmU3hjYmlBZ0p6NGdZblYwZEc5dVcyUnBjMkZpYkdWa1hTYzZJSHRjYmlBZ0lDQmthWE53YkdGNU9pQW5ibTl1WlNjc1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHRmtRMjl1ZEdGcGJtVnlVM1I1YkdVZ1BTQjdYRzRnSUdac1pYaEhjbTkzT2lBeExGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUhCdmFXNTBaWEpGZG1WdWRITTZJQ2R1YjI1bEp5eGNiaUFnSno0Z2FXWnlZVzFsSnpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc0Z0lHSjFkSFJ2YmpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc1OVhHNWNibU52Ym5OMElFTnZiblJ5YjJ4elFteHZZMnNnUFNBb2UxeHVJQ0J2Y21SbGNpQTlJQ2R0YjJKcGJHVW5MRnh1SUNCd2JHRjVRblYwZEc5dUxGeHVJQ0J5WlhkcGJtUkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ1ptOXlkMkZ5WkVKMWRIUnZiaUE5SUNjbkxGeHVJQ0J3Y21WMmFXOTFjMFZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ2JtVjRkRVZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYm4wcElEMCtYRzRnSUc5eVpHVnlJRDA5UFNBblpHVnphM1J2Y0NjZ1B5QW9YRzRnSUNBZ1BENWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0eVpYZHBibVJDZFhSMGIyNTlYRzRnSUNBZ0lDQjdabTl5ZDJGeVpFSjFkSFJ2Ym4xY2JpQWdJQ0E4THo1Y2JpQWdLU0E2SUNoY2JpQWdJQ0E4UGx4dUlDQWdJQ0FnZTNKbGQybHVaRUoxZEhSdmJuMWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0bWIzSjNZWEprUW5WMGRHOXVmVnh1SUNBZ0lEd3ZQbHh1SUNBcFhHNWNibU52Ym5OMElFUmxabUYxYkhSTVlYbHZkWFFnUFNBb2UxeHVJQ0IwZVhCbElEMGdKMjF2WW1sc1pTY3NYRzRnSUhOMGVXeGxMRnh1SUNCa2FYTndiR0Y1TEZ4dUlDQmpiMjUwY205c2MwUnBjM0JzWVhrZ1BTQmthWE53YkdGNUxGeHVJQ0J6YVhwbExGeHVJQ0IwYVhSc1pTQTlJQ2NuTEZ4dUlDQmphR0Z1Ym1Wc1ZHbDBiR1VnUFNBbkp5eGNiaUFnWTJoaGJtNWxiRWxqYjI0Z1BTQW5KeXhjYmlBZ2RtbGtaVzhzWEc0Z0lHaGhkbVZDYjNSMGIyMUpkR1Z0TEZ4dUlDQnpaV1ZyWW1GeUlEMGdKeWNzWEc0Z0lHTnZiblJ5YjJ4Q2RYUjBiMjV6TEZ4dUlDQjJiMngxYldWRGIyNTBjbTlzTEZ4dUlDQm1kV3hzYzJOeVpXVnVRblYwZEc5dUxGeHVJQ0JpWVdOclFuVjBkRzl1SUQwZ0p5Y3NYRzRnSUdGa1UzUmhkSFZ6SUQwZ0p5Y3NYRzRnSUdGa1RHbHVheUE5SUNjbkxGeHVJQ0JoWkZOcmFYQkNkWFIwYjI0c1hHNGdJR0poWTJ0SmRHVnRjeXhjYmlBZ1kyaHBiR1J5Wlc0c1hHNGdJR052Ym5SaGFXNWxjbEpsWml4Y2JpQWdZbUZqYTFKbFppeGNiaUFnWVdSRGIyNTBZV2x1WlhKU1pXWXNYRzRnSUM0dUxuSmxjM1JjYm4wcElEMCtJSHRjYmlBZ1kyOXVjM1FnYzJ4dmRGSmxaaUE5SUhWelpWSmxaaWg3ZlNsY2JseHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJR056Y3oxN1cxeHVJQ0FnSUNBZ0lDQmpiMjUwWVdsdVpYSlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2RtbGtaVzlEYjI1MFlXbHVaWEpUZEhsc1pTeGNiaUFnSUNBZ0lDQWdjbVZ6Y0c5dWMybDJaVk4wZVd4bGMxdHphWHBsWFN4Y2JpQWdJQ0FnSUNBZ2RIbHdaU0E5UFQwZ0oyUmxjMnQwYjNBbklDWW1JR1JsYTNOMGIzQlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2MzUjViR1VzWEc0Z0lDQWdJQ0JkZlZ4dUlDQWdJQ0FnY21WbVBYdGpiMjUwWVdsdVpYSlNaV1o5WEc0Z0lDQWdJQ0I3TGk0dWNtVnpkSDFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdkbWxrWlc5OVhHNGdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJSEpsWmoxN1ltRmphMUpsWm4xY2JpQWdJQ0FnSUNBZ1kzTnpQWHRiWEc0Z0lDQWdJQ0FnSUNBZ1ltRmphMU4wZVd4bExGeHVJQ0FnSUNBZ0lDQWdJR1JwYzNCc1lYa2dJVDA5SUNkb2FXUmtaVzRuSUNZbUlDaG9ZWFpsUW05MGRHOXRTWFJsYlNBL0lHUnliM0JVYjNBZ09pQmtjbTl3S1N4Y2JpQWdJQ0FnSUNBZ1hYMWNiaUFnSUNBZ0lENWNiaUFnSUNBZ0lDQWdlM1I1Y0dVZ0lUMDlJQ2R0YjJKcGJHVW5JQ1ltSUdKaFkydEpkR1Z0YzMxY2JpQWdJQ0FnSUNBZ2UyRmtVMnRwY0VKMWRIUnZiaUFtSmlBOFpHbDJJR056Y3oxN2MydHBjRk4wZVd4bGZUNTdZV1JUYTJsd1FuVjBkRzl1ZlR3dlpHbDJQbjFjYmlBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdHliM2RUZEhsc1pTd2dhVzVtYjFOMGVXeGxMQ0JrYVhOd2JHRjVVM1I1YkdWelcyUnBjM0JzWVhsZFhYMCtYRzRnSUNBZ0lDQWdJSHRpWVdOclFuVjBkRzl1ZlZ4dUlDQWdJQ0FnSUNCN1kyaGhibTVsYkVsamIyNTlYRzRnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMblJwZEd4bFFtRnlJRDBnWld4bGJXVnVkRnh1SUNBZ0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBZ0lDOCtYRzRnSUNBZ0lDQWdJRHhvTVQ1Y2JpQWdJQ0FnSUNBZ0lDQjdZMmhoYm01bGJGUnBkR3hsZlZ4dUlDQWdJQ0FnSUNBZ0lIdDBhWFJzWlgxY2JpQWdJQ0FnSUNBZ1BDOW9NVDVjYmlBZ0lDQWdJQ0FnUEdScGRpQmpjM005ZTJWNGNHRnVaSDBnTHo1Y2JpQWdJQ0FnSUNBZ2UzUjVjR1VnUFQwOUlDZHRiMkpwYkdVbklDWW1JQ2hjYmlBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllMkZrVTNSaGRIVnpJRDhnYUdsa1pHVnVJRG9nVzJaMWJtTjBhVzl1UW1GeVUyeHZkRk4wZVd4bFhYMWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE5zYjNSU1pXWXVZM1Z5Y21WdWRDNW1kVzVqZEdsdmJrSmhjaUE5SUdWc1pXMWxiblJjYmlBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnTHo1Y2JpQWdJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lDQWdlMkZrVEdsdWF5QW1KaUE4WkdsMklHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lQbnRoWkV4cGJtdDlQQzlrYVhZK2ZWeHVJQ0FnSUNBZ1BDOWthWFkrWEc0Z0lDQWdJQ0E4WkdsMklISmxaajE3WVdSRGIyNTBZV2x1WlhKU1pXWjlJR056Y3oxN1lXUkRiMjUwWVdsdVpYSlRkSGxzWlgwK1hHNGdJQ0FnSUNBZ0lIdDBlWEJsSUQwOVBTQW5iVzlpYVd4bEp5QW1KaUFvWEc0Z0lDQWdJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdGpiMjUwY205c2MxTjBlV3hsTENCa2FYTndiR0Y1VTNSNWJHVnpXMk52Ym5SeWIyeHpSR2x6Y0d4aGVWMWRmVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lEeERiMjUwY205c2MwSnNiMk5ySUc5eVpHVnlQVndpYlc5aWFXeGxYQ0lnZXk0dUxtTnZiblJ5YjJ4Q2RYUjBiMjV6ZlNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ0lDQXBmVnh1SUNBZ0lDQWdQQzlrYVhZK1hHNGdJQ0FnSUNCN2RIbHdaU0E5UFQwZ0oyMXZZbWxzWlNjZ0ppWWdLRnh1SUNBZ0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lDQWdZM056UFh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZrVTNSaGRIVnpYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lEOGdhR2xrWkdWdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ1cybHVabTlDWVhKVGJHOTBVM1I1YkdVc0lHTnZiblJ5YjJ4elJHbHpjR3hoZVZOMGVXeGxjMXRqYjI1MGNtOXNjMFJwYzNCc1lYbGRYVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnZlgxY2JpQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQThaR2wyWEc0Z0lDQWdJQ0FnSUdOemN6MTdXMXh1SUNBZ0lDQWdJQ0FnSUhKdmQxTjBlV3hsTEZ4dUlDQWdJQ0FnSUNBZ0lIdHRZWEpuYVc1VWIzQTZJQ2RoZFhSdkozMHNYRzRnSUNBZ0lDQWdJQ0FnZEhsd1pTQTlQVDBnSjJSbGMydDBiM0FuSUNZbUlHUmxjMnQwYjNCRGIyNTBjbTlzY3l4Y2JpQWdJQ0FnSUNBZ0lDQmpiMjUwY205c2MwUnBjM0JzWVhsVGRIbHNaWE5iWTI5dWRISnZiSE5FYVhOd2JHRjVYU3hjYmlBZ0lDQWdJQ0FnSUNCMGVYQmxJQ0U5UFNBblpHVnphM1J2Y0NjZ0ppWWdZbTkwZEc5dFUzQmhZMlVzWEc0Z0lDQWdJQ0FnSUYxOVhHNGdJQ0FnSUNBK1hHNGdJQ0FnSUNBZ0lIdHpaV1ZyWW1GeUlIeDhJRHhrYVhZZ0x6NTlYRzRnSUNBZ0lDQWdJSHQwZVhCbElEMDlQU0FuWkdWemEzUnZjQ2NnSmlZZ0tGeHVJQ0FnSUNBZ0lDQWdJRHcrWEc0Z0lDQWdJQ0FnSUNBZ0lDQThRMjl1ZEhKdmJITkNiRzlqYXlCdmNtUmxjajFjSW1SbGMydDBiM0JjSWlCN0xpNHVZMjl1ZEhKdmJFSjFkSFJ2Ym5OOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnpjejE3WVdSVGRHRjBkWE1nUHlCb2FXUmtaVzRnT2lCYmFXNW1iMEpoY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2UGx4dUlDQWdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ0lDQjdZV1JUZEdGMGRYTWdKaVlnS0Z4dUlDQWdJQ0FnSUNBZ0lEeGthWFpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllM3RtYkdWNE9pQXhMQ0IwWlhoMFUyaGhaRzkzT2lBbk1uQjRJREp3ZUNBeGNIZ2dJekF3TUNkOWZWeHVJQ0FnSUNBZ0lDQWdJRDVjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGhaRk4wWVhSMWMzMWNiaUFnSUNBZ0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTNSNWNHVWdQVDA5SUNka1pYTnJkRzl3SnlBbUppQW9YRzRnSUNBZ0lDQWdJQ0FnUEQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhZZ1kzTnpQWHRsZUhCaGJtUjlJQzgrWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdkbTlzZFcxbFEyOXVkSEp2YkgxY2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTNOelBYdGhaRk4wWVhSMWN5QS9JR2hwWkdSbGJpQTZJRnRtZFc1amRHbHZia0poY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbVoxYm1OMGFXOXVRbUZ5SUQwZ1pXeGxiV1Z1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0I5ZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdMejVjYmlBZ0lDQWdJQ0FnSUNBOEx6NWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTJaMWJHeHpZM0psWlc1Q2RYUjBiMjU5WEc0Z0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lEeFRiRzkwVUhKdmRtbGtaWElnYzJ4dmRGSmxaajE3YzJ4dmRGSmxabjArZTJOb2FXeGtjbVZ1ZlR3dlUyeHZkRkJ5YjNacFpHVnlQbHh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUVSbFptRjFiSFJNWVhsdmRYUmNiaUpkZlE9PSAqL1wiXSxcbiAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICAuLi5yZXN0LFxuICAgIGNoaWxkcmVuOiBbdmlkZW8sIGpzeHMoXCJkaXZcIiwge1xuICAgICAgcmVmOiBiYWNrUmVmLFxuICAgICAgY3NzOiBbYmFja1N0eWxlLCBkaXNwbGF5ICE9PSAnaGlkZGVuJyAmJiAoaGF2ZUJvdHRvbUl0ZW0gPyBkcm9wVG9wIDogZHJvcCksIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIjtsYWJlbDpEZWZhdWx0TGF5b3V0O1wiLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJa1JsWm1GMWJIUk1ZWGx2ZFhRdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJlVlJSSWl3aVptbHNaU0k2SWtSbFptRjFiSFJNWVhsdmRYUXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpQkFhbk40U1cxd2IzSjBVMjkxY21ObElFQmxiVzkwYVc5dUwzSmxZV04wSUNvdlhHNHZLaUJsYzJ4cGJuUXRaR2x6WVdKc1pTQnlaV0ZqZEM5d2NtOXdMWFI1Y0dWeklDb3ZYRzVwYlhCdmNuUWdlM1Z6WlZKbFpuMGdabkp2YlNBbmNtVmhZM1FuWEc1cGJYQnZjblFnZTFOc2IzUlFjbTkyYVdSbGNuMGdabkp2YlNBbkxpOTFhVVY0ZEdWdWMybHZibk1uWEc1Y2JtTnZibk4wSUdWNGNHRnVaQ0E5SUh0Y2JpQWdiV0Z5WjJsdU9pQXdMRnh1SUNCbWJHVjRPaUFuTVNjc1hHNTlYRzVjYm1OdmJuTjBJR2hwWkdSbGJpQTlJSHRrYVhOd2JHRjVPaUFuYm05dVpTZDlYRzVjYm1OdmJuTjBJR052Ym5SaGFXNWxjbE4wZVd4bElEMGdlMXh1SUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNCb1pXbG5hSFE2SUNjeE1EQWxKeXhjYmlBZ1ltOTRVMmw2YVc1bk9pQW5ZbTl5WkdWeUxXSnZlQ2NzWEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdabXhsZUVScGNtVmpkR2x2YmpvZ0oyTnZiSFZ0Ymljc1hHNGdJRzkyWlhKbWJHOTNPaUFuYUdsa1pHVnVKeXhjYmlBZ1kyOXNiM0k2SUNkM2FHbDBaU2NzWEc0Z0lDOHZJSEJ5WlhabGJuUWdZVzVwYldGMGFXOXVJR2RzYVdOb0tHRm1kR1Z5YVcxaFoyVXBJRzltSUdSbGMyTmxibVJoYm5RZ1pXeGxiV1Z1ZEhOY2JpQWdkSEpoYm5ObWIzSnRPaUFuZEhKaGJuTnNZWFJsV0Nnd0tTY3NYRzRnSUhWelpYSlRaV3hsWTNRNklDZHViMjVsSnl4Y2JpQWdhREU2SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJREFzWEc0Z0lDQWdabTl1ZEZOcGVtVTZJQ2N4WlcwbkxGeHVJQ0FnSUd4cGJtVklaV2xuYUhRNklDY3hMalZsYlNjc1hHNGdJSDBzWEc0Z0lDZGhMQ0JoT214cGJtc3NJR0U2ZG1semFYUmxaQ2M2SUh0Y2JpQWdJQ0JqYjJ4dmNqb2dKeU5tWm1ZbkxGeHVJQ0FnSUc5d1lXTnBkSGs2SURBdU9DeGNiaUFnSUNCMFpYaDBSR1ZqYjNKaGRHbHZiam9nSjI1dmJtVW5MRnh1SUNCOUxGeHVJQ0JpZFhSMGIyNDZJSHRjYmlBZ0lDQm1iMjUwVTJsNlpUb2dKMmx1YUdWeWFYUW5MRnh1SUNBZ0lDYytJQ29uT2lCN1hHNGdJQ0FnSUNCd2IybHVkR1Z5UlhabGJuUnpPaUFuYm05dVpTY3NYRzRnSUNBZ2ZTeGNiaUFnZlN4Y2JpQWdKeTB0ZEdoMWJXSnVZV2xzTFhkcFpIUm9Kem9nSnprMkp5d2dMeThnYUdWcFoyaDBJRFUwWEc1OVhHNWNibU52Ym5OMElIWnBaR1Z2UTI5dWRHRnBibVZ5VTNSNWJHVWdQU0I3WEc0Z0lDYytJR1JwZGpwbWFYSnpkQzF2WmkxMGVYQmxKem9nZTF4dUlDQWdJSEJ2YzJsMGFXOXVPaUFuWVdKemIyeDFkR1VuTEZ4dUlDQWdJSHBKYm1SbGVEb2dKeTB4Snl4Y2JpQWdJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0FnSUdobGFXZG9kRG9nSnpFd01DVW5MRnh1SUNCOUxGeHVmVnh1WEc1amIyNXpkQ0JrY205d0lEMGdlMXh1SUNCaVlXTnJaM0p2ZFc1a1NXMWhaMlU2SUdCc2FXNWxZWEl0WjNKaFpHbGxiblFvWEc0Z0lDQWdNR1JsWnl4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBdU5Ta2dNQ3hjYmlBZ0lDQnlaMkpoS0RBc01Dd3dMREFwSURoeVpXMGdZMkZzWXlneE1EQWxJQzBnT0hKbGJTa3NYRzRnSUNBZ2NtZGlZU2d3TERBc01Dd3dMalVwSURFd01DVmNiaUFnS1dBc1hHNTlYRzVjYm1OdmJuTjBJR1J5YjNCVWIzQWdQU0I3WEc0Z0lHSmhZMnRuY205MWJtUkpiV0ZuWlRvZ1lHeHBibVZoY2kxbmNtRmthV1Z1ZENoY2JpQWdJQ0F3WkdWbkxGeHVJQ0FnSUhKblltRW9NQ3d3TERBc01Da2dNQ3hjYmlBZ0lDQnlaMkpoS0RBc01Dd3dMREFwSURoeVpXMGdZMkZzWXlneE1EQWxJQzBnT0hKbGJTa3NYRzRnSUNBZ2NtZGlZU2d3TERBc01Dd3dMalVwSURFd01DVmNiaUFnS1dBc1hHNTlYRzVjYm1OdmJuTjBJSEpsYzNCdmJuTnBkbVZUZEhsc1pYTWdQU0I3WEc0Z0lHUmxjMnQwYjNBNklIdGNiaUFnSUNCbWIyNTBVMmw2WlRvZ0p6STBjSGduTEZ4dUlDQjlMQ0F2THlCaFpHUWdhV1lnYm1WalpYTnpZWEo1T2lCaWFXY3RaR1Z6YTNSdmNGeHVmVnh1WEc1amIyNXpkQ0J5YjNkVGRIbHNaU0E5SUh0Y2JpQWdZbTk0VTJsNmFXNW5PaUFuWW05eVpHVnlMV0p2ZUNjc1hHNGdJSGRwWkhSb09pQW5NVEF3SlNjc1hHNGdJSEJoWkdScGJtYzZJQ2RqWVd4aktESmxiU0F0SURFMmNIZ3BKeXhjYmlBZ1pHbHpjR3hoZVRvZ0oyWnNaWGduTEZ4dUlDQmhiR2xuYmtsMFpXMXpPaUFuWTJWdWRHVnlKeXhjYmlBZ2FuVnpkR2xtZVVOdmJuUmxiblE2SUNkbWJHVjRMV1Z1WkNjc1hHNGdJQ2MrSUdKMWRIUnZianB1YjNRb09tUnBjMkZpYkdWa0tTQitJR0oxZEhSdmJqcHViM1FvT21ScGMyRmliR1ZrS1N3Z1pHbDJJSDRnWW5WMGRHOXVPbXhoYzNRdGIyWXRkSGx3WlNjNlhHNGdJQ0FnZTF4dUlDQWdJQ0FnYldGeVoybHVUR1ZtZERvZ0p6QXVOWEpsYlNjc1hHNGdJQ0FnZlN4Y2JpQWdKejRnWW5WMGRHOXVPbTV2ZENnNmJHRnpkQzF2WmkxMGVYQmxLU2M2SUh0Y2JpQWdJQ0J0WVhKbmFXNVNhV2RvZERvZ0p6QXVOWEpsYlNjc1hHNGdJSDBzWEc1OVhHNWNiaThxSUZ4dUlDQklhVzUwT2x4dUlDQWdJR1JwYzNCc1lYbFRkSGxzWlhNZ2MzQmxZMmxtYVdOcGRIa2dhWE1nYUdsbmFHVnlJSFJvWlc0Z1kyOXVkSEp2YkhOVGRIbHNaVnh1SUNBZ0lFNWxaV1FnZEc4Z2NHRjVJR0YwZEdWdWRHbHZiaUIzYUdWdUlIZGxJSEpsZG1selpTQjBhR1Z6WlNCemRIbHNaWE11WEc0cUwxeHVZMjl1YzNRZ1pHbHpjR3hoZVZOMGVXeGxjeUE5SUh0Y2JpQWdhR2xrWkdWdU9pQjdYRzRnSUNBZ0p6NGdaR2wyT201dmRDZ3VjR2x1Ym1Wa0tTd2dQaUJpZFhSMGIyNDZibTkwS0M1d2FXNXVaV1FwTENBK0lHZ3hPbTV2ZENndWNHbHVibVZrS1NjNklIdGNiaUFnSUNBZ0lIcEpibVJsZURvZ0xUSXNYRzRnSUNBZ0lDQnZjR0ZqYVhSNU9pQXdMRnh1SUNBZ0lDQWdkSEpoYm5OcGRHbHZiam9nSjI5d1lXTnBkSGtnTUM0NGN5QmxZWE5sTFc5MWRDd2dlaTFwYm1SbGVDQXdjeUF3TGpoekp5eGNiaUFnSUNCOUxGeHVJQ0I5TEZ4dUlDQnphRzkzYmpvZ2UxeHVJQ0FnSUNjK0lHUnBkanB1YjNRb0xuQnBibTVsWkNrc0lENGdZblYwZEc5dU9tNXZkQ2d1Y0dsdWJtVmtLU3dnUGlCb01UcHViM1FvTG5CcGJtNWxaQ2tuT2lCN1hHNGdJQ0FnSUNCNlNXNWtaWGc2SURFc1hHNGdJQ0FnSUNCMGNtRnVjMmwwYVc5dU9pQW5iM0JoWTJsMGVTQXdMak56SUdWaGMyVXRiM1YwTENCNkxXbHVaR1Y0SURCeklEQnpKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVmVnh1WEc1amIyNXpkQ0JqYjI1MGNtOXNjMFJwYzNCc1lYbFRkSGxzWlhNZ1BTQjdYRzRnSUdocFpHUmxiam9nZTF4dUlDQWdJQzR1TG1ScGMzQnNZWGxUZEhsc1pYTXVhR2xrWkdWdUxGeHVJQ0FnSUNkK0lHUnBkanB1YjNRb0xuQnBibTVsWkNrbk9pQmthWE53YkdGNVUzUjViR1Z6TG1ocFpHUmxiaXhjYmlBZ2ZTeGNiaUFnYzJodmQyNDZJSHRjYmlBZ0lDQXVMaTVrYVhOd2JHRjVVM1I1YkdWekxuTm9iM2R1TEZ4dUlDQWdJQ2QrSUdScGRpYzZJR1JwYzNCc1lYbFRkSGxzWlhNdWMyaHZkMjRzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUdOdmJuUnliMnh6VTNSNWJHVWdQU0I3WEc0Z0lHMWhjbWRwYmxSdmNEb2dKMkYxZEc4bkxGeHVJQ0J3YjNOcGRHbHZiam9nSjJGaWMyOXNkWFJsSnl4Y2JpQWdla2x1WkdWNE9pQW5NaWNzWEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdZV3hwWjI1SmRHVnRjem9nSjJObGJuUmxjaWNzWEc0Z0lDYytJR0oxZEhSdmJpYzZJSHRjYmlBZ0lDQnRZWEpuYVc0NklDY3haVzBuTEZ4dUlDQWdJSGRwWkhSb09pQW5NUzQzTldWdEp5eGNiaUFnSUNCb1pXbG5hSFE2SUNjeExqYzFaVzBuTEZ4dUlDQWdJQ2N0ZDJWaWEybDBMWFJoY0Mxb2FXZG9iR2xuYUhRdFkyOXNiM0luT2lBbmRISmhibk53WVhKbGJuUW5MRnh1SUNBZ0lDY21PbVJwYzJGaWJHVmtKem9nZTF4dUlDQWdJQ0FnYjNCaFkybDBlVG9nTUN4Y2JpQWdJQ0FnSUhCdmFXNTBaWEpGZG1WdWRITTZJQ2R1YjI1bEp5eGNiaUFnSUNCOUxGeHVJQ0FnSUNjbUxuQnNZWGt0WW5WMGRHOXVKem9nZTF4dUlDQWdJQ0FnZDJsa2RHZzZJQ2N6WlcwbkxGeHVJQ0FnSUNBZ2FHVnBaMmgwT2lBbk0yVnRKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVmVnh1WEc1amIyNXpkQ0JpYjNSMGIyMVRjR0ZqWlNBOUlIdGNiaUFnSjBCdFpXUnBZU0FvYjNKcFpXNTBZWFJwYjI0NklIQnZjblJ5WVdsMEtTYzZJSHRjYmlBZ0lDQndZV1JrYVc1blFtOTBkRzl0T2lBbk1tVnRKeXhjYmlBZ2ZTeGNiaUFnSjBCdFpXUnBZU0FvYjNKcFpXNTBZWFJwYjI0NklHeGhibVJ6WTJGd1pTa25PaUI3WEc0Z0lDQWdjR0ZrWkdsdVowSnZkSFJ2YlRvZ0p6RXVNMlZ0Snl4Y2JpQWdmU3hjYm4xY2JseHVZMjl1YzNRZ1puVnVZM1JwYjI1Q1lYSlRiRzkwVTNSNWJHVWdQU0I3WEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdiV0Z5WjJsdVRHVm1kRG9nSnpBdU56VmxiU2NzWEc0Z0lHSjFkSFJ2YmpvZ2UxeHVJQ0FnSUNjdGQyVmlhMmwwTFhSaGNDMW9hV2RvYkdsbmFIUXRZMjlzYjNJbk9pQW5kSEpoYm5Od1lYSmxiblFuTEZ4dUlDQWdJR1JwYzNCc1lYazZJQ2RpYkc5amF5Y3NYRzRnSUNBZ2JXRnlaMmx1VEdWbWREb2dKekF1TnpWbGJTY3NYRzRnSUgwc1hHNTlYRzVjYm1OdmJuTjBJR2x1Wm05Q1lYSlRiRzkwVTNSNWJHVWdQU0I3WEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdiV0Z5WjJsdVRHVm1kRG9nSnpBdU56VmxiU2NzWEc1OVhHNWNibU52Ym5OMElIUmxlSFJGYkd4cGNITnBjeUE5SUh0Y2JpQWdiM1psY21ac2IzYzZJQ2RvYVdSa1pXNG5MRnh1SUNCM2FHbDBaVk53WVdObE9pQW5ibTkzY21Gd0p5eGNiaUFnZEdWNGRFOTJaWEptYkc5M09pQW5aV3hzYVhCemFYTW5MRnh1ZlZ4dVhHNWpiMjV6ZENCcGJtWnZVM1I1YkdVZ1BTQjdYRzRnSUc5MlpYSm1iRzkzT2lBbmRtbHphV0pzWlNjc1hHNGdJR2d4T2lCN1hHNGdJQ0FnWm05dWRGZGxhV2RvZERvZ0p6VXdNQ2NzWEc0Z0lDQWdMaTR1ZEdWNGRFVnNiR2x3YzJsekxGeHVJQ0FnSUNjK0lHUnBkaWM2SUhSbGVIUkZiR3hwY0hOcGN5eGNiaUFnZlN4Y2JpQWdKMkoxZEhSdmJpQXJJR2d4SnpvZ2UxeHVJQ0FnSUcxaGNtZHBia3hsWm5RNklDY3haVzBuTEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCaVlXTnJVM1I1YkdVZ1BTQjdYRzRnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0I2U1c1a1pYZzZJREFzWEc0Z0lIZHBaSFJvT2lBbk1UQXdKU2NzWEc0Z0lHaGxhV2RvZERvZ0p6RXdNQ1VuTEZ4dUlDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJR0ZzYVdkdVNYUmxiWE02SUNkalpXNTBaWEluTEZ4dUlDQnFkWE4wYVdaNVEyOXVkR1Z1ZERvZ0oyTmxiblJsY2ljc1hHNGdJQ2QrSUdScGRpYzZJSHRjYmlBZ0lDQjZTVzVrWlhnNklEQXNYRzRnSUgwc1hHNTlYRzVjYm1OdmJuTjBJSE5yYVhCVGRIbHNaU0E5SUh0Y2JpQWdjRzl6YVhScGIyNDZJQ2RoWW5OdmJIVjBaU2NzWEc0Z0lISnBaMmgwT2lBd0xGeHVJQ0JpYjNSMGIyMDZJQ2M1Y21WdEp5eGNiaUFnZEdWNGRFRnNhV2R1T2lBbmNtbG5hSFFuTEZ4dUlDQmlkWFIwYjI0NklIdGNiaUFnSUNCM2FXUjBhRG9nSjJGMWRHOG5MRnh1SUNBZ0lHaGxhV2RvZERvZ0oyRjFkRzhuTEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCa1pXdHpkRzl3VTNSNWJHVWdQU0I3WEc0Z0lDYytJR1JwZGljNklIdGNiaUFnSUNBblBpQmlkWFIwYjI0NmJtOTBLRHBrYVhOaFlteGxaQ2tnZmlCaWRYUjBiMjQ2Ym05MEtEcGthWE5oWW14bFpDa3NJRDRnWW5WMGRHOXVPbXhoYzNRdGIyWXRkSGx3WlNjNklIdGNiaUFnSUNBZ0lHMWhjbWRwYmt4bFpuUTZJQ2N3TGpjMVpXMG5MRnh1SUNBZ0lIMHNYRzRnSUNBZ0p6NGdZblYwZEc5dU9tWnBjbk4wTFc5bUxYUjVjR1VuT2lCN1hHNGdJQ0FnSUNCdFlYSm5hVzVNWldaME9pQW5NQ2NzWEc0Z0lDQWdmU3hjYmlBZ2ZTeGNiaUFnSnkwdGRHaDFiV0p1WVdsc0xYZHBaSFJvSnpvZ0p6STRPQ2NzSUM4dklHaGxhV2RvZENBeE5qSmNibjFjYmx4dVkyOXVjM1FnWkdWemEzUnZjRU52Ym5SeWIyeHpJRDBnZTF4dUlDQm1iR1Y0VjNKaGNEb2dKM2R5WVhBbkxGeHVJQ0FuUGlCa2FYWTZabWx5YzNRdGIyWXRkSGx3WlNjNklIdGNiaUFnSUNCbWJHVjRPaUFuTVRBd0pTY3NYRzRnSUNBZ2JXRnlaMmx1UW05MGRHOXRPaUFuTUM0NE9HVnRKeXhjYmlBZ2ZTeGNiaUFnSno0Z1luVjBkRzl1VzJScGMyRmliR1ZrWFNjNklIdGNiaUFnSUNCa2FYTndiR0Y1T2lBbmJtOXVaU2NzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUdGa1EyOXVkR0ZwYm1WeVUzUjViR1VnUFNCN1hHNGdJR1pzWlhoSGNtOTNPaUF4TEZ4dUlDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJR0ZzYVdkdVNYUmxiWE02SUNkalpXNTBaWEluTEZ4dUlDQnFkWE4wYVdaNVEyOXVkR1Z1ZERvZ0oyTmxiblJsY2ljc1hHNGdJSEJ2YVc1MFpYSkZkbVZ1ZEhNNklDZHViMjVsSnl4Y2JpQWdKejRnYVdaeVlXMWxKem9nZTNCdmFXNTBaWEpGZG1WdWRITTZJQ2RoZFhSdkozMHNYRzRnSUdKMWRIUnZiam9nZTNCdmFXNTBaWEpGZG1WdWRITTZJQ2RoZFhSdkozMHNYRzU5WEc1Y2JtTnZibk4wSUVOdmJuUnliMnh6UW14dlkyc2dQU0FvZTF4dUlDQnZjbVJsY2lBOUlDZHRiMkpwYkdVbkxGeHVJQ0J3YkdGNVFuVjBkRzl1TEZ4dUlDQnlaWGRwYm1SQ2RYUjBiMjRnUFNBbkp5eGNiaUFnWm05eWQyRnlaRUoxZEhSdmJpQTlJQ2NuTEZ4dUlDQndjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjRnUFNBbkp5eGNiaUFnYm1WNGRFVndhWE52WkdWQ2RYUjBiMjRnUFNBbkp5eGNibjBwSUQwK1hHNGdJRzl5WkdWeUlEMDlQU0FuWkdWemEzUnZjQ2NnUHlBb1hHNGdJQ0FnUEQ1Y2JpQWdJQ0FnSUh0d2NtVjJhVzkxYzBWd2FYTnZaR1ZDZFhSMGIyNTlYRzRnSUNBZ0lDQjdjR3hoZVVKMWRIUnZibjFjYmlBZ0lDQWdJSHR1WlhoMFJYQnBjMjlrWlVKMWRIUnZibjFjYmlBZ0lDQWdJSHR5WlhkcGJtUkNkWFIwYjI1OVhHNGdJQ0FnSUNCN1ptOXlkMkZ5WkVKMWRIUnZibjFjYmlBZ0lDQThMejVjYmlBZ0tTQTZJQ2hjYmlBZ0lDQThQbHh1SUNBZ0lDQWdlM0psZDJsdVpFSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0d2NtVjJhVzkxYzBWd2FYTnZaR1ZDZFhSMGIyNTlYRzRnSUNBZ0lDQjdjR3hoZVVKMWRIUnZibjFjYmlBZ0lDQWdJSHR1WlhoMFJYQnBjMjlrWlVKMWRIUnZibjFjYmlBZ0lDQWdJSHRtYjNKM1lYSmtRblYwZEc5dWZWeHVJQ0FnSUR3dlBseHVJQ0FwWEc1Y2JtTnZibk4wSUVSbFptRjFiSFJNWVhsdmRYUWdQU0FvZTF4dUlDQjBlWEJsSUQwZ0oyMXZZbWxzWlNjc1hHNGdJSE4wZVd4bExGeHVJQ0JrYVhOd2JHRjVMRnh1SUNCamIyNTBjbTlzYzBScGMzQnNZWGtnUFNCa2FYTndiR0Y1TEZ4dUlDQnphWHBsTEZ4dUlDQjBhWFJzWlNBOUlDY25MRnh1SUNCamFHRnVibVZzVkdsMGJHVWdQU0FuSnl4Y2JpQWdZMmhoYm01bGJFbGpiMjRnUFNBbkp5eGNiaUFnZG1sa1pXOHNYRzRnSUdoaGRtVkNiM1IwYjIxSmRHVnRMRnh1SUNCelpXVnJZbUZ5SUQwZ0p5Y3NYRzRnSUdOdmJuUnliMnhDZFhSMGIyNXpMRnh1SUNCMmIyeDFiV1ZEYjI1MGNtOXNMRnh1SUNCbWRXeHNjMk55WldWdVFuVjBkRzl1TEZ4dUlDQmlZV05yUW5WMGRHOXVJRDBnSnljc1hHNGdJR0ZrVTNSaGRIVnpJRDBnSnljc1hHNGdJR0ZrVEdsdWF5QTlJQ2NuTEZ4dUlDQmhaRk5yYVhCQ2RYUjBiMjRzWEc0Z0lHSmhZMnRKZEdWdGN5eGNiaUFnWTJocGJHUnlaVzRzWEc0Z0lHTnZiblJoYVc1bGNsSmxaaXhjYmlBZ1ltRmphMUpsWml4Y2JpQWdZV1JEYjI1MFlXbHVaWEpTWldZc1hHNGdJQzR1TG5KbGMzUmNibjBwSUQwK0lIdGNiaUFnWTI5dWMzUWdjMnh2ZEZKbFppQTlJSFZ6WlZKbFppaDdmU2xjYmx4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lHTnpjejE3VzF4dUlDQWdJQ0FnSUNCamIyNTBZV2x1WlhKVGRIbHNaU3hjYmlBZ0lDQWdJQ0FnZG1sa1pXOURiMjUwWVdsdVpYSlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2NtVnpjRzl1YzJsMlpWTjBlV3hsYzF0emFYcGxYU3hjYmlBZ0lDQWdJQ0FnZEhsd1pTQTlQVDBnSjJSbGMydDBiM0FuSUNZbUlHUmxhM04wYjNCVGRIbHNaU3hjYmlBZ0lDQWdJQ0FnYzNSNWJHVXNYRzRnSUNBZ0lDQmRmVnh1SUNBZ0lDQWdjbVZtUFh0amIyNTBZV2x1WlhKU1pXWjlYRzRnSUNBZ0lDQjdMaTR1Y21WemRIMWNiaUFnSUNBK1hHNGdJQ0FnSUNCN2RtbGtaVzk5WEc0Z0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lISmxaajE3WW1GamExSmxabjFjYmlBZ0lDQWdJQ0FnWTNOelBYdGJYRzRnSUNBZ0lDQWdJQ0FnWW1GamExTjBlV3hsTEZ4dUlDQWdJQ0FnSUNBZ0lHUnBjM0JzWVhrZ0lUMDlJQ2RvYVdSa1pXNG5JQ1ltSUNob1lYWmxRbTkwZEc5dFNYUmxiU0EvSUdSeWIzQlViM0FnT2lCa2NtOXdLU3hjYmlBZ0lDQWdJQ0FnWFgxY2JpQWdJQ0FnSUQ1Y2JpQWdJQ0FnSUNBZ2UzUjVjR1VnSVQwOUlDZHRiMkpwYkdVbklDWW1JR0poWTJ0SmRHVnRjMzFjYmlBZ0lDQWdJQ0FnZTJGa1UydHBjRUoxZEhSdmJpQW1KaUE4WkdsMklHTnpjejE3YzJ0cGNGTjBlV3hsZlQ1N1lXUlRhMmx3UW5WMGRHOXVmVHd2WkdsMlBuMWNiaUFnSUNBZ0lEd3ZaR2wyUGx4dUlDQWdJQ0FnUEdScGRpQmpjM005ZTF0eWIzZFRkSGxzWlN3Z2FXNW1iMU4wZVd4bExDQmthWE53YkdGNVUzUjViR1Z6VzJScGMzQnNZWGxkWFgwK1hHNGdJQ0FnSUNBZ0lIdGlZV05yUW5WMGRHOXVmVnh1SUNBZ0lDQWdJQ0I3WTJoaGJtNWxiRWxqYjI1OVhHNGdJQ0FnSUNBZ0lEeGthWFpjYmlBZ0lDQWdJQ0FnSUNCeVpXWTllMlZzWlcxbGJuUWdQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjMnh2ZEZKbFppNWpkWEp5Wlc1MExuUnBkR3hsUW1GeUlEMGdaV3hsYldWdWRGeHVJQ0FnSUNBZ0lDQWdJSDE5WEc0Z0lDQWdJQ0FnSUM4K1hHNGdJQ0FnSUNBZ0lEeG9NVDVjYmlBZ0lDQWdJQ0FnSUNCN1kyaGhibTVsYkZScGRHeGxmVnh1SUNBZ0lDQWdJQ0FnSUh0MGFYUnNaWDFjYmlBZ0lDQWdJQ0FnUEM5b01UNWNiaUFnSUNBZ0lDQWdQR1JwZGlCamMzTTllMlY0Y0dGdVpIMGdMejVjYmlBZ0lDQWdJQ0FnZTNSNWNHVWdQVDA5SUNkdGIySnBiR1VuSUNZbUlDaGNiaUFnSUNBZ0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYzNNOWUyRmtVM1JoZEhWeklEOGdhR2xrWkdWdUlEb2dXMloxYm1OMGFXOXVRbUZ5VTJ4dmRGTjBlV3hsWFgxY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsWmoxN1pXeGxiV1Z1ZENBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lITnNiM1JTWldZdVkzVnljbVZ1ZEM1bWRXNWpkR2x2YmtKaGNpQTlJR1ZzWlcxbGJuUmNiaUFnSUNBZ0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBZ0lDQWdMejVjYmlBZ0lDQWdJQ0FnS1gxY2JpQWdJQ0FnSUNBZ2UyRmtUR2x1YXlBbUppQThaR2wySUdOc1lYTnpUbUZ0WlQxY0luQnBibTVsWkZ3aVBudGhaRXhwYm10OVBDOWthWFkrZlZ4dUlDQWdJQ0FnUEM5a2FYWStYRzRnSUNBZ0lDQThaR2wySUhKbFpqMTdZV1JEYjI1MFlXbHVaWEpTWldaOUlHTnpjejE3WVdSRGIyNTBZV2x1WlhKVGRIbHNaWDArWEc0Z0lDQWdJQ0FnSUh0MGVYQmxJRDA5UFNBbmJXOWlhV3hsSnlBbUppQW9YRzRnSUNBZ0lDQWdJQ0FnUEdScGRpQmpjM005ZTF0amIyNTBjbTlzYzFOMGVXeGxMQ0JrYVhOd2JHRjVVM1I1YkdWelcyTnZiblJ5YjJ4elJHbHpjR3hoZVYxZGZUNWNiaUFnSUNBZ0lDQWdJQ0FnSUR4RGIyNTBjbTlzYzBKc2IyTnJJRzl5WkdWeVBWd2liVzlpYVd4bFhDSWdleTR1TG1OdmJuUnliMnhDZFhSMGIyNXpmU0F2UGx4dUlDQWdJQ0FnSUNBZ0lEd3ZaR2wyUGx4dUlDQWdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ1BDOWthWFkrWEc0Z0lDQWdJQ0I3ZEhsd1pTQTlQVDBnSjIxdlltbHNaU2NnSmlZZ0tGeHVJQ0FnSUNBZ0lDQThaR2wyWEc0Z0lDQWdJQ0FnSUNBZ1kzTnpQWHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRmtVM1JoZEhWelhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUQ4Z2FHbGtaR1Z1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRG9nVzJsdVptOUNZWEpUYkc5MFUzUjViR1VzSUdOdmJuUnliMnh6UkdsemNHeGhlVk4wZVd4bGMxdGpiMjUwY205c2MwUnBjM0JzWVhsZFhWeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCeVpXWTllMlZzWlcxbGJuUWdQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjMnh2ZEZKbFppNWpkWEp5Wlc1MExtbHVabTlDWVhJZ1BTQmxiR1Z0Wlc1MFhHNGdJQ0FnSUNBZ0lDQWdmWDFjYmlBZ0lDQWdJQ0FnTHo1Y2JpQWdJQ0FnSUNsOVhHNGdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJR056Y3oxN1cxeHVJQ0FnSUNBZ0lDQWdJSEp2ZDFOMGVXeGxMRnh1SUNBZ0lDQWdJQ0FnSUh0dFlYSm5hVzVVYjNBNklDZGhkWFJ2SjMwc1hHNGdJQ0FnSUNBZ0lDQWdkSGx3WlNBOVBUMGdKMlJsYzJ0MGIzQW5JQ1ltSUdSbGMydDBiM0JEYjI1MGNtOXNjeXhjYmlBZ0lDQWdJQ0FnSUNCamIyNTBjbTlzYzBScGMzQnNZWGxUZEhsc1pYTmJZMjl1ZEhKdmJITkVhWE53YkdGNVhTeGNiaUFnSUNBZ0lDQWdJQ0IwZVhCbElDRTlQU0FuWkdWemEzUnZjQ2NnSmlZZ1ltOTBkRzl0VTNCaFkyVXNYRzRnSUNBZ0lDQWdJRjE5WEc0Z0lDQWdJQ0ErWEc0Z0lDQWdJQ0FnSUh0elpXVnJZbUZ5SUh4OElEeGthWFlnTHo1OVhHNGdJQ0FnSUNBZ0lIdDBlWEJsSUQwOVBTQW5aR1Z6YTNSdmNDY2dKaVlnS0Z4dUlDQWdJQ0FnSUNBZ0lEdytYRzRnSUNBZ0lDQWdJQ0FnSUNBOFEyOXVkSEp2YkhOQ2JHOWpheUJ2Y21SbGNqMWNJbVJsYzJ0MGIzQmNJaUI3TGk0dVkyOXVkSEp2YkVKMWRIUnZibk45SUM4K1hHNGdJQ0FnSUNBZ0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdOemN6MTdZV1JUZEdGMGRYTWdQeUJvYVdSa1pXNGdPaUJiYVc1bWIwSmhjbE5zYjNSVGRIbHNaVjE5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWmoxN1pXeGxiV1Z1ZENBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMnh2ZEZKbFppNWpkWEp5Wlc1MExtbHVabTlDWVhJZ1BTQmxiR1Z0Wlc1MFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2UGx4dUlDQWdJQ0FnSUNBZ0lEd3ZQbHh1SUNBZ0lDQWdJQ0FwZlZ4dUlDQWdJQ0FnSUNCN1lXUlRkR0YwZFhNZ0ppWWdLRnh1SUNBZ0lDQWdJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lDQWdJQ0FnSUdOc1lYTnpUbUZ0WlQxY0luQnBibTVsWkZ3aVhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYzNNOWUzdG1iR1Y0T2lBeExDQjBaWGgwVTJoaFpHOTNPaUFuTW5CNElESndlQ0F4Y0hnZ0l6QXdNQ2Q5ZlZ4dUlDQWdJQ0FnSUNBZ0lENWNiaUFnSUNBZ0lDQWdJQ0FnSUh0aFpGTjBZWFIxYzMxY2JpQWdJQ0FnSUNBZ0lDQThMMlJwZGo1Y2JpQWdJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lDQWdlM1I1Y0dVZ1BUMDlJQ2RrWlhOcmRHOXdKeUFtSmlBb1hHNGdJQ0FnSUNBZ0lDQWdQRDVjYmlBZ0lDQWdJQ0FnSUNBZ0lEeGthWFlnWTNOelBYdGxlSEJoYm1SOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNCN2RtOXNkVzFsUTI5dWRISnZiSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lEeGthWFpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZM056UFh0aFpGTjBZWFIxY3lBL0lHaHBaR1JsYmlBNklGdG1kVzVqZEdsdmJrSmhjbE5zYjNSVGRIbHNaVjE5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWmoxN1pXeGxiV1Z1ZENBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMnh2ZEZKbFppNWpkWEp5Wlc1MExtWjFibU4wYVc5dVFtRnlJRDBnWld4bGJXVnVkRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDQWdJQ0E4THo1Y2JpQWdJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lDQWdlMloxYkd4elkzSmxaVzVDZFhSMGIyNTlYRzRnSUNBZ0lDQThMMlJwZGo1Y2JpQWdJQ0FnSUR4VGJHOTBVSEp2ZG1sa1pYSWdjMnh2ZEZKbFpqMTdjMnh2ZEZKbFpuMCtlMk5vYVd4a2NtVnVmVHd2VTJ4dmRGQnliM1pwWkdWeVBseHVJQ0FnSUR3dlpHbDJQbHh1SUNBcFhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRVJsWm1GMWJIUk1ZWGx2ZFhSY2JpSmRmUT09ICovXCJdLFxuICAgICAgY2hpbGRyZW46IFt0eXBlICE9PSAnbW9iaWxlJyAmJiBiYWNrSXRlbXMsIGFkU2tpcEJ1dHRvbiAmJiBqc3gkMShcImRpdlwiLCB7XG4gICAgICAgIGNzczogc2tpcFN0eWxlLFxuICAgICAgICBjaGlsZHJlbjogYWRTa2lwQnV0dG9uXG4gICAgICB9KV1cbiAgICB9KSwganN4cyhcImRpdlwiLCB7XG4gICAgICBjc3M6IFtyb3dTdHlsZSwgaW5mb1N0eWxlLCBkaXNwbGF5U3R5bGVzW2Rpc3BsYXldLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6RGVmYXVsdExheW91dDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtSbFptRjFiSFJNWVhsdmRYUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCYVZWWElpd2labWxzWlNJNklrUmxabUYxYkhSTVlYbHZkWFF1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUJBYW5ONFNXMXdiM0owVTI5MWNtTmxJRUJsYlc5MGFXOXVMM0psWVdOMElDb3ZYRzR2S2lCbGMyeHBiblF0WkdsellXSnNaU0J5WldGamRDOXdjbTl3TFhSNWNHVnpJQ292WEc1cGJYQnZjblFnZTNWelpWSmxabjBnWm5KdmJTQW5jbVZoWTNRblhHNXBiWEJ2Y25RZ2UxTnNiM1JRY205MmFXUmxjbjBnWm5KdmJTQW5MaTkxYVVWNGRHVnVjMmx2Ym5NblhHNWNibU52Ym5OMElHVjRjR0Z1WkNBOUlIdGNiaUFnYldGeVoybHVPaUF3TEZ4dUlDQm1iR1Y0T2lBbk1TY3NYRzU5WEc1Y2JtTnZibk4wSUdocFpHUmxiaUE5SUh0a2FYTndiR0Y1T2lBbmJtOXVaU2Q5WEc1Y2JtTnZibk4wSUdOdmJuUmhhVzVsY2xOMGVXeGxJRDBnZTF4dUlDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQm9aV2xuYUhRNklDY3hNREFsSnl4Y2JpQWdZbTk0VTJsNmFXNW5PaUFuWW05eVpHVnlMV0p2ZUNjc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWm14bGVFUnBjbVZqZEdsdmJqb2dKMk52YkhWdGJpY3NYRzRnSUc5MlpYSm1iRzkzT2lBbmFHbGtaR1Z1Snl4Y2JpQWdZMjlzYjNJNklDZDNhR2wwWlNjc1hHNGdJQzh2SUhCeVpYWmxiblFnWVc1cGJXRjBhVzl1SUdkc2FXTm9LR0ZtZEdWeWFXMWhaMlVwSUc5bUlHUmxjMk5sYm1SaGJuUWdaV3hsYldWdWRITmNiaUFnZEhKaGJuTm1iM0p0T2lBbmRISmhibk5zWVhSbFdDZ3dLU2NzWEc0Z0lIVnpaWEpUWld4bFkzUTZJQ2R1YjI1bEp5eGNiaUFnYURFNklIdGNiaUFnSUNCdFlYSm5hVzQ2SURBc1hHNGdJQ0FnWm05dWRGTnBlbVU2SUNjeFpXMG5MRnh1SUNBZ0lHeHBibVZJWldsbmFIUTZJQ2N4TGpWbGJTY3NYRzRnSUgwc1hHNGdJQ2RoTENCaE9teHBibXNzSUdFNmRtbHphWFJsWkNjNklIdGNiaUFnSUNCamIyeHZjam9nSnlObVptWW5MRnh1SUNBZ0lHOXdZV05wZEhrNklEQXVPQ3hjYmlBZ0lDQjBaWGgwUkdWamIzSmhkR2x2YmpvZ0oyNXZibVVuTEZ4dUlDQjlMRnh1SUNCaWRYUjBiMjQ2SUh0Y2JpQWdJQ0JtYjI1MFUybDZaVG9nSjJsdWFHVnlhWFFuTEZ4dUlDQWdJQ2MrSUNvbk9pQjdYRzRnSUNBZ0lDQndiMmx1ZEdWeVJYWmxiblJ6T2lBbmJtOXVaU2NzWEc0Z0lDQWdmU3hjYmlBZ2ZTeGNiaUFnSnkwdGRHaDFiV0p1WVdsc0xYZHBaSFJvSnpvZ0p6azJKeXdnTHk4Z2FHVnBaMmgwSURVMFhHNTlYRzVjYm1OdmJuTjBJSFpwWkdWdlEyOXVkR0ZwYm1WeVUzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRqcG1hWEp6ZEMxdlppMTBlWEJsSnpvZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUhwSmJtUmxlRG9nSnkweEp5eGNiaUFnSUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNBZ0lHaGxhV2RvZERvZ0p6RXdNQ1VuTEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCa2NtOXdJRDBnZTF4dUlDQmlZV05yWjNKdmRXNWtTVzFoWjJVNklHQnNhVzVsWVhJdFozSmhaR2xsYm5Rb1hHNGdJQ0FnTUdSbFp5eGNiaUFnSUNCeVoySmhLREFzTUN3d0xEQXVOU2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUdSeWIzQlViM0FnUFNCN1hHNGdJR0poWTJ0bmNtOTFibVJKYldGblpUb2dZR3hwYm1WaGNpMW5jbUZrYVdWdWRDaGNiaUFnSUNBd1pHVm5MRnh1SUNBZ0lISm5ZbUVvTUN3d0xEQXNNQ2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUhKbGMzQnZibk5wZG1WVGRIbHNaWE1nUFNCN1hHNGdJR1JsYzJ0MGIzQTZJSHRjYmlBZ0lDQm1iMjUwVTJsNlpUb2dKekkwY0hnbkxGeHVJQ0I5TENBdkx5QmhaR1FnYVdZZ2JtVmpaWE56WVhKNU9pQmlhV2N0WkdWemEzUnZjRnh1ZlZ4dVhHNWpiMjV6ZENCeWIzZFRkSGxzWlNBOUlIdGNiaUFnWW05NFUybDZhVzVuT2lBblltOXlaR1Z5TFdKdmVDY3NYRzRnSUhkcFpIUm9PaUFuTVRBd0pTY3NYRzRnSUhCaFpHUnBibWM2SUNkallXeGpLREpsYlNBdElERTJjSGdwSnl4Y2JpQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0JoYkdsbmJrbDBaVzF6T2lBblkyVnVkR1Z5Snl4Y2JpQWdhblZ6ZEdsbWVVTnZiblJsYm5RNklDZG1iR1Y0TFdWdVpDY3NYRzRnSUNjK0lHSjFkSFJ2YmpwdWIzUW9PbVJwYzJGaWJHVmtLU0IrSUdKMWRIUnZianB1YjNRb09tUnBjMkZpYkdWa0tTd2daR2wySUg0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZYRzRnSUNBZ2UxeHVJQ0FnSUNBZ2JXRnlaMmx1VEdWbWREb2dKekF1TlhKbGJTY3NYRzRnSUNBZ2ZTeGNiaUFnSno0Z1luVjBkRzl1T201dmRDZzZiR0Z6ZEMxdlppMTBlWEJsS1NjNklIdGNiaUFnSUNCdFlYSm5hVzVTYVdkb2REb2dKekF1TlhKbGJTY3NYRzRnSUgwc1hHNTlYRzVjYmk4cUlGeHVJQ0JJYVc1ME9seHVJQ0FnSUdScGMzQnNZWGxUZEhsc1pYTWdjM0JsWTJsbWFXTnBkSGtnYVhNZ2FHbG5hR1Z5SUhSb1pXNGdZMjl1ZEhKdmJITlRkSGxzWlZ4dUlDQWdJRTVsWldRZ2RHOGdjR0Y1SUdGMGRHVnVkR2x2YmlCM2FHVnVJSGRsSUhKbGRtbHpaU0IwYUdWelpTQnpkSGxzWlhNdVhHNHFMMXh1WTI5dWMzUWdaR2x6Y0d4aGVWTjBlV3hsY3lBOUlIdGNiaUFnYUdsa1pHVnVPaUI3WEc0Z0lDQWdKejRnWkdsMk9tNXZkQ2d1Y0dsdWJtVmtLU3dnUGlCaWRYUjBiMjQ2Ym05MEtDNXdhVzV1WldRcExDQStJR2d4T201dmRDZ3VjR2x1Ym1Wa0tTYzZJSHRjYmlBZ0lDQWdJSHBKYm1SbGVEb2dMVElzWEc0Z0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnZEhKaGJuTnBkR2x2YmpvZ0oyOXdZV05wZEhrZ01DNDRjeUJsWVhObExXOTFkQ3dnZWkxcGJtUmxlQ0F3Y3lBd0xqaHpKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J6YUc5M2Jqb2dlMXh1SUNBZ0lDYytJR1JwZGpwdWIzUW9MbkJwYm01bFpDa3NJRDRnWW5WMGRHOXVPbTV2ZENndWNHbHVibVZrS1N3Z1BpQm9NVHB1YjNRb0xuQnBibTVsWkNrbk9pQjdYRzRnSUNBZ0lDQjZTVzVrWlhnNklERXNYRzRnSUNBZ0lDQjBjbUZ1YzJsMGFXOXVPaUFuYjNCaFkybDBlU0F3TGpOeklHVmhjMlV0YjNWMExDQjZMV2x1WkdWNElEQnpJREJ6Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCamIyNTBjbTlzYzBScGMzQnNZWGxUZEhsc1pYTWdQU0I3WEc0Z0lHaHBaR1JsYmpvZ2UxeHVJQ0FnSUM0dUxtUnBjM0JzWVhsVGRIbHNaWE11YUdsa1pHVnVMRnh1SUNBZ0lDZCtJR1JwZGpwdWIzUW9MbkJwYm01bFpDa25PaUJrYVhOd2JHRjVVM1I1YkdWekxtaHBaR1JsYml4Y2JpQWdmU3hjYmlBZ2MyaHZkMjQ2SUh0Y2JpQWdJQ0F1TGk1a2FYTndiR0Y1VTNSNWJHVnpMbk5vYjNkdUxGeHVJQ0FnSUNkK0lHUnBkaWM2SUdScGMzQnNZWGxUZEhsc1pYTXVjMmh2ZDI0c1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHTnZiblJ5YjJ4elUzUjViR1VnUFNCN1hHNGdJRzFoY21kcGJsUnZjRG9nSjJGMWRHOG5MRnh1SUNCd2IzTnBkR2x2YmpvZ0oyRmljMjlzZFhSbEp5eGNiaUFnZWtsdVpHVjRPaUFuTWljc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWVd4cFoyNUpkR1Z0Y3pvZ0oyTmxiblJsY2ljc1hHNGdJQ2MrSUdKMWRIUnZiaWM2SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJQ2N4WlcwbkxGeHVJQ0FnSUhkcFpIUm9PaUFuTVM0M05XVnRKeXhjYmlBZ0lDQm9aV2xuYUhRNklDY3hMamMxWlcwbkxGeHVJQ0FnSUNjdGQyVmlhMmwwTFhSaGNDMW9hV2RvYkdsbmFIUXRZMjlzYjNJbk9pQW5kSEpoYm5Od1lYSmxiblFuTEZ4dUlDQWdJQ2NtT21ScGMyRmliR1ZrSnpvZ2UxeHVJQ0FnSUNBZ2IzQmhZMmwwZVRvZ01DeGNiaUFnSUNBZ0lIQnZhVzUwWlhKRmRtVnVkSE02SUNkdWIyNWxKeXhjYmlBZ0lDQjlMRnh1SUNBZ0lDY21MbkJzWVhrdFluVjBkRzl1SnpvZ2UxeHVJQ0FnSUNBZ2QybGtkR2c2SUNjelpXMG5MRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NMlZ0Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCaWIzUjBiMjFUY0dGalpTQTlJSHRjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJSEJ2Y25SeVlXbDBLU2M2SUh0Y2JpQWdJQ0J3WVdSa2FXNW5RbTkwZEc5dE9pQW5NbVZ0Snl4Y2JpQWdmU3hjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJR3hoYm1SelkyRndaU2tuT2lCN1hHNGdJQ0FnY0dGa1pHbHVaMEp2ZEhSdmJUb2dKekV1TTJWdEp5eGNiaUFnZlN4Y2JuMWNibHh1WTI5dWMzUWdablZ1WTNScGIyNUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNGdJR0oxZEhSdmJqb2dlMXh1SUNBZ0lDY3RkMlZpYTJsMExYUmhjQzFvYVdkb2JHbG5hSFF0WTI5c2IzSW5PaUFuZEhKaGJuTndZWEpsYm5RbkxGeHVJQ0FnSUdScGMzQnNZWGs2SUNkaWJHOWpheWNzWEc0Z0lDQWdiV0Z5WjJsdVRHVm1kRG9nSnpBdU56VmxiU2NzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUdsdVptOUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNTlYRzVjYm1OdmJuTjBJSFJsZUhSRmJHeHBjSE5wY3lBOUlIdGNiaUFnYjNabGNtWnNiM2M2SUNkb2FXUmtaVzRuTEZ4dUlDQjNhR2wwWlZOd1lXTmxPaUFuYm05M2NtRndKeXhjYmlBZ2RHVjRkRTkyWlhKbWJHOTNPaUFuWld4c2FYQnphWE1uTEZ4dWZWeHVYRzVqYjI1emRDQnBibVp2VTNSNWJHVWdQU0I3WEc0Z0lHOTJaWEptYkc5M09pQW5kbWx6YVdKc1pTY3NYRzRnSUdneE9pQjdYRzRnSUNBZ1ptOXVkRmRsYVdkb2REb2dKelV3TUNjc1hHNGdJQ0FnTGk0dWRHVjRkRVZzYkdsd2MybHpMRnh1SUNBZ0lDYytJR1JwZGljNklIUmxlSFJGYkd4cGNITnBjeXhjYmlBZ2ZTeGNiaUFnSjJKMWRIUnZiaUFySUdneEp6b2dlMXh1SUNBZ0lHMWhjbWRwYmt4bFpuUTZJQ2N4WlcwbkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmlZV05yVTNSNWJHVWdQU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNCNlNXNWtaWGc2SURBc1hHNGdJSGRwWkhSb09pQW5NVEF3SlNjc1hHNGdJR2hsYVdkb2REb2dKekV3TUNVbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUNkK0lHUnBkaWM2SUh0Y2JpQWdJQ0I2U1c1a1pYZzZJREFzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUhOcmFYQlRkSGxzWlNBOUlIdGNiaUFnY0c5emFYUnBiMjQ2SUNkaFluTnZiSFYwWlNjc1hHNGdJSEpwWjJoME9pQXdMRnh1SUNCaWIzUjBiMjA2SUNjNWNtVnRKeXhjYmlBZ2RHVjRkRUZzYVdkdU9pQW5jbWxuYUhRbkxGeHVJQ0JpZFhSMGIyNDZJSHRjYmlBZ0lDQjNhV1IwYURvZ0oyRjFkRzhuTEZ4dUlDQWdJR2hsYVdkb2REb2dKMkYxZEc4bkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmtaV3R6ZEc5d1UzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRpYzZJSHRjYmlBZ0lDQW5QaUJpZFhSMGIyNDZibTkwS0Rwa2FYTmhZbXhsWkNrZ2ZpQmlkWFIwYjI0NmJtOTBLRHBrYVhOaFlteGxaQ2tzSUQ0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQWdJRzFoY21kcGJreGxablE2SUNjd0xqYzFaVzBuTEZ4dUlDQWdJSDBzWEc0Z0lDQWdKejRnWW5WMGRHOXVPbVpwY25OMExXOW1MWFI1Y0dVbk9pQjdYRzRnSUNBZ0lDQnRZWEpuYVc1TVpXWjBPaUFuTUNjc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYmlBZ0p5MHRkR2gxYldKdVlXbHNMWGRwWkhSb0p6b2dKekk0T0Njc0lDOHZJR2hsYVdkb2RDQXhOakpjYm4xY2JseHVZMjl1YzNRZ1pHVnphM1J2Y0VOdmJuUnliMnh6SUQwZ2UxeHVJQ0JtYkdWNFYzSmhjRG9nSjNkeVlYQW5MRnh1SUNBblBpQmthWFk2Wm1seWMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQm1iR1Y0T2lBbk1UQXdKU2NzWEc0Z0lDQWdiV0Z5WjJsdVFtOTBkRzl0T2lBbk1DNDRPR1Z0Snl4Y2JpQWdmU3hjYmlBZ0p6NGdZblYwZEc5dVcyUnBjMkZpYkdWa1hTYzZJSHRjYmlBZ0lDQmthWE53YkdGNU9pQW5ibTl1WlNjc1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHRmtRMjl1ZEdGcGJtVnlVM1I1YkdVZ1BTQjdYRzRnSUdac1pYaEhjbTkzT2lBeExGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUhCdmFXNTBaWEpGZG1WdWRITTZJQ2R1YjI1bEp5eGNiaUFnSno0Z2FXWnlZVzFsSnpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc0Z0lHSjFkSFJ2YmpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc1OVhHNWNibU52Ym5OMElFTnZiblJ5YjJ4elFteHZZMnNnUFNBb2UxeHVJQ0J2Y21SbGNpQTlJQ2R0YjJKcGJHVW5MRnh1SUNCd2JHRjVRblYwZEc5dUxGeHVJQ0J5WlhkcGJtUkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ1ptOXlkMkZ5WkVKMWRIUnZiaUE5SUNjbkxGeHVJQ0J3Y21WMmFXOTFjMFZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ2JtVjRkRVZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYm4wcElEMCtYRzRnSUc5eVpHVnlJRDA5UFNBblpHVnphM1J2Y0NjZ1B5QW9YRzRnSUNBZ1BENWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0eVpYZHBibVJDZFhSMGIyNTlYRzRnSUNBZ0lDQjdabTl5ZDJGeVpFSjFkSFJ2Ym4xY2JpQWdJQ0E4THo1Y2JpQWdLU0E2SUNoY2JpQWdJQ0E4UGx4dUlDQWdJQ0FnZTNKbGQybHVaRUoxZEhSdmJuMWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0bWIzSjNZWEprUW5WMGRHOXVmVnh1SUNBZ0lEd3ZQbHh1SUNBcFhHNWNibU52Ym5OMElFUmxabUYxYkhSTVlYbHZkWFFnUFNBb2UxeHVJQ0IwZVhCbElEMGdKMjF2WW1sc1pTY3NYRzRnSUhOMGVXeGxMRnh1SUNCa2FYTndiR0Y1TEZ4dUlDQmpiMjUwY205c2MwUnBjM0JzWVhrZ1BTQmthWE53YkdGNUxGeHVJQ0J6YVhwbExGeHVJQ0IwYVhSc1pTQTlJQ2NuTEZ4dUlDQmphR0Z1Ym1Wc1ZHbDBiR1VnUFNBbkp5eGNiaUFnWTJoaGJtNWxiRWxqYjI0Z1BTQW5KeXhjYmlBZ2RtbGtaVzhzWEc0Z0lHaGhkbVZDYjNSMGIyMUpkR1Z0TEZ4dUlDQnpaV1ZyWW1GeUlEMGdKeWNzWEc0Z0lHTnZiblJ5YjJ4Q2RYUjBiMjV6TEZ4dUlDQjJiMngxYldWRGIyNTBjbTlzTEZ4dUlDQm1kV3hzYzJOeVpXVnVRblYwZEc5dUxGeHVJQ0JpWVdOclFuVjBkRzl1SUQwZ0p5Y3NYRzRnSUdGa1UzUmhkSFZ6SUQwZ0p5Y3NYRzRnSUdGa1RHbHVheUE5SUNjbkxGeHVJQ0JoWkZOcmFYQkNkWFIwYjI0c1hHNGdJR0poWTJ0SmRHVnRjeXhjYmlBZ1kyaHBiR1J5Wlc0c1hHNGdJR052Ym5SaGFXNWxjbEpsWml4Y2JpQWdZbUZqYTFKbFppeGNiaUFnWVdSRGIyNTBZV2x1WlhKU1pXWXNYRzRnSUM0dUxuSmxjM1JjYm4wcElEMCtJSHRjYmlBZ1kyOXVjM1FnYzJ4dmRGSmxaaUE5SUhWelpWSmxaaWg3ZlNsY2JseHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJR056Y3oxN1cxeHVJQ0FnSUNBZ0lDQmpiMjUwWVdsdVpYSlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2RtbGtaVzlEYjI1MFlXbHVaWEpUZEhsc1pTeGNiaUFnSUNBZ0lDQWdjbVZ6Y0c5dWMybDJaVk4wZVd4bGMxdHphWHBsWFN4Y2JpQWdJQ0FnSUNBZ2RIbHdaU0E5UFQwZ0oyUmxjMnQwYjNBbklDWW1JR1JsYTNOMGIzQlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2MzUjViR1VzWEc0Z0lDQWdJQ0JkZlZ4dUlDQWdJQ0FnY21WbVBYdGpiMjUwWVdsdVpYSlNaV1o5WEc0Z0lDQWdJQ0I3TGk0dWNtVnpkSDFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdkbWxrWlc5OVhHNGdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJSEpsWmoxN1ltRmphMUpsWm4xY2JpQWdJQ0FnSUNBZ1kzTnpQWHRiWEc0Z0lDQWdJQ0FnSUNBZ1ltRmphMU4wZVd4bExGeHVJQ0FnSUNBZ0lDQWdJR1JwYzNCc1lYa2dJVDA5SUNkb2FXUmtaVzRuSUNZbUlDaG9ZWFpsUW05MGRHOXRTWFJsYlNBL0lHUnliM0JVYjNBZ09pQmtjbTl3S1N4Y2JpQWdJQ0FnSUNBZ1hYMWNiaUFnSUNBZ0lENWNiaUFnSUNBZ0lDQWdlM1I1Y0dVZ0lUMDlJQ2R0YjJKcGJHVW5JQ1ltSUdKaFkydEpkR1Z0YzMxY2JpQWdJQ0FnSUNBZ2UyRmtVMnRwY0VKMWRIUnZiaUFtSmlBOFpHbDJJR056Y3oxN2MydHBjRk4wZVd4bGZUNTdZV1JUYTJsd1FuVjBkRzl1ZlR3dlpHbDJQbjFjYmlBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdHliM2RUZEhsc1pTd2dhVzVtYjFOMGVXeGxMQ0JrYVhOd2JHRjVVM1I1YkdWelcyUnBjM0JzWVhsZFhYMCtYRzRnSUNBZ0lDQWdJSHRpWVdOclFuVjBkRzl1ZlZ4dUlDQWdJQ0FnSUNCN1kyaGhibTVsYkVsamIyNTlYRzRnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMblJwZEd4bFFtRnlJRDBnWld4bGJXVnVkRnh1SUNBZ0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBZ0lDOCtYRzRnSUNBZ0lDQWdJRHhvTVQ1Y2JpQWdJQ0FnSUNBZ0lDQjdZMmhoYm01bGJGUnBkR3hsZlZ4dUlDQWdJQ0FnSUNBZ0lIdDBhWFJzWlgxY2JpQWdJQ0FnSUNBZ1BDOW9NVDVjYmlBZ0lDQWdJQ0FnUEdScGRpQmpjM005ZTJWNGNHRnVaSDBnTHo1Y2JpQWdJQ0FnSUNBZ2UzUjVjR1VnUFQwOUlDZHRiMkpwYkdVbklDWW1JQ2hjYmlBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllMkZrVTNSaGRIVnpJRDhnYUdsa1pHVnVJRG9nVzJaMWJtTjBhVzl1UW1GeVUyeHZkRk4wZVd4bFhYMWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE5zYjNSU1pXWXVZM1Z5Y21WdWRDNW1kVzVqZEdsdmJrSmhjaUE5SUdWc1pXMWxiblJjYmlBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnTHo1Y2JpQWdJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lDQWdlMkZrVEdsdWF5QW1KaUE4WkdsMklHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lQbnRoWkV4cGJtdDlQQzlrYVhZK2ZWeHVJQ0FnSUNBZ1BDOWthWFkrWEc0Z0lDQWdJQ0E4WkdsMklISmxaajE3WVdSRGIyNTBZV2x1WlhKU1pXWjlJR056Y3oxN1lXUkRiMjUwWVdsdVpYSlRkSGxzWlgwK1hHNGdJQ0FnSUNBZ0lIdDBlWEJsSUQwOVBTQW5iVzlpYVd4bEp5QW1KaUFvWEc0Z0lDQWdJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdGpiMjUwY205c2MxTjBlV3hsTENCa2FYTndiR0Y1VTNSNWJHVnpXMk52Ym5SeWIyeHpSR2x6Y0d4aGVWMWRmVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lEeERiMjUwY205c2MwSnNiMk5ySUc5eVpHVnlQVndpYlc5aWFXeGxYQ0lnZXk0dUxtTnZiblJ5YjJ4Q2RYUjBiMjV6ZlNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ0lDQXBmVnh1SUNBZ0lDQWdQQzlrYVhZK1hHNGdJQ0FnSUNCN2RIbHdaU0E5UFQwZ0oyMXZZbWxzWlNjZ0ppWWdLRnh1SUNBZ0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lDQWdZM056UFh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZrVTNSaGRIVnpYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lEOGdhR2xrWkdWdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ1cybHVabTlDWVhKVGJHOTBVM1I1YkdVc0lHTnZiblJ5YjJ4elJHbHpjR3hoZVZOMGVXeGxjMXRqYjI1MGNtOXNjMFJwYzNCc1lYbGRYVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnZlgxY2JpQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQThaR2wyWEc0Z0lDQWdJQ0FnSUdOemN6MTdXMXh1SUNBZ0lDQWdJQ0FnSUhKdmQxTjBlV3hsTEZ4dUlDQWdJQ0FnSUNBZ0lIdHRZWEpuYVc1VWIzQTZJQ2RoZFhSdkozMHNYRzRnSUNBZ0lDQWdJQ0FnZEhsd1pTQTlQVDBnSjJSbGMydDBiM0FuSUNZbUlHUmxjMnQwYjNCRGIyNTBjbTlzY3l4Y2JpQWdJQ0FnSUNBZ0lDQmpiMjUwY205c2MwUnBjM0JzWVhsVGRIbHNaWE5iWTI5dWRISnZiSE5FYVhOd2JHRjVYU3hjYmlBZ0lDQWdJQ0FnSUNCMGVYQmxJQ0U5UFNBblpHVnphM1J2Y0NjZ0ppWWdZbTkwZEc5dFUzQmhZMlVzWEc0Z0lDQWdJQ0FnSUYxOVhHNGdJQ0FnSUNBK1hHNGdJQ0FnSUNBZ0lIdHpaV1ZyWW1GeUlIeDhJRHhrYVhZZ0x6NTlYRzRnSUNBZ0lDQWdJSHQwZVhCbElEMDlQU0FuWkdWemEzUnZjQ2NnSmlZZ0tGeHVJQ0FnSUNBZ0lDQWdJRHcrWEc0Z0lDQWdJQ0FnSUNBZ0lDQThRMjl1ZEhKdmJITkNiRzlqYXlCdmNtUmxjajFjSW1SbGMydDBiM0JjSWlCN0xpNHVZMjl1ZEhKdmJFSjFkSFJ2Ym5OOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnpjejE3WVdSVGRHRjBkWE1nUHlCb2FXUmtaVzRnT2lCYmFXNW1iMEpoY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2UGx4dUlDQWdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ0lDQjdZV1JUZEdGMGRYTWdKaVlnS0Z4dUlDQWdJQ0FnSUNBZ0lEeGthWFpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllM3RtYkdWNE9pQXhMQ0IwWlhoMFUyaGhaRzkzT2lBbk1uQjRJREp3ZUNBeGNIZ2dJekF3TUNkOWZWeHVJQ0FnSUNBZ0lDQWdJRDVjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGhaRk4wWVhSMWMzMWNiaUFnSUNBZ0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTNSNWNHVWdQVDA5SUNka1pYTnJkRzl3SnlBbUppQW9YRzRnSUNBZ0lDQWdJQ0FnUEQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhZZ1kzTnpQWHRsZUhCaGJtUjlJQzgrWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdkbTlzZFcxbFEyOXVkSEp2YkgxY2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTNOelBYdGhaRk4wWVhSMWN5QS9JR2hwWkdSbGJpQTZJRnRtZFc1amRHbHZia0poY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbVoxYm1OMGFXOXVRbUZ5SUQwZ1pXeGxiV1Z1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0I5ZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdMejVjYmlBZ0lDQWdJQ0FnSUNBOEx6NWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTJaMWJHeHpZM0psWlc1Q2RYUjBiMjU5WEc0Z0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lEeFRiRzkwVUhKdmRtbGtaWElnYzJ4dmRGSmxaajE3YzJ4dmRGSmxabjArZTJOb2FXeGtjbVZ1ZlR3dlUyeHZkRkJ5YjNacFpHVnlQbHh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUVSbFptRjFiSFJNWVhsdmRYUmNiaUpkZlE9PSAqL1wiXSxcbiAgICAgIGNoaWxkcmVuOiBbYmFja0J1dHRvbiwgY2hhbm5lbEljb24sIGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgICAgcmVmOiBlbGVtZW50ID0+IHtcbiAgICAgICAgICBzbG90UmVmLmN1cnJlbnQudGl0bGVCYXIgPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9KSwganN4cyhcImgxXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFtjaGFubmVsVGl0bGUsIHRpdGxlXVxuICAgICAgfSksIGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgICAgY3NzOiBleHBhbmRcbiAgICAgIH0pLCB0eXBlID09PSAnbW9iaWxlJyAmJiBqc3gkMShcImRpdlwiLCB7XG4gICAgICAgIGNzczogYWRTdGF0dXMgPyBoaWRkZW4gOiBbZnVuY3Rpb25CYXJTbG90U3R5bGVdLFxuICAgICAgICByZWY6IGVsZW1lbnQgPT4ge1xuICAgICAgICAgIHNsb3RSZWYuY3VycmVudC5mdW5jdGlvbkJhciA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0pLCBhZExpbmsgJiYganN4JDEoXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwicGlubmVkXCIsXG4gICAgICAgIGNoaWxkcmVuOiBhZExpbmtcbiAgICAgIH0pXVxuICAgIH0pLCBqc3gkMShcImRpdlwiLCB7XG4gICAgICByZWY6IGFkQ29udGFpbmVyUmVmLFxuICAgICAgY3NzOiBhZENvbnRhaW5lclN0eWxlLFxuICAgICAgY2hpbGRyZW46IHR5cGUgPT09ICdtb2JpbGUnICYmIGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgICAgY3NzOiBbY29udHJvbHNTdHlsZSwgZGlzcGxheVN0eWxlc1tjb250cm9sc0Rpc3BsYXldLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6RGVmYXVsdExheW91dDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtSbFptRjFiSFJNWVhsdmRYUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCTUZabElpd2labWxzWlNJNklrUmxabUYxYkhSTVlYbHZkWFF1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUJBYW5ONFNXMXdiM0owVTI5MWNtTmxJRUJsYlc5MGFXOXVMM0psWVdOMElDb3ZYRzR2S2lCbGMyeHBiblF0WkdsellXSnNaU0J5WldGamRDOXdjbTl3TFhSNWNHVnpJQ292WEc1cGJYQnZjblFnZTNWelpWSmxabjBnWm5KdmJTQW5jbVZoWTNRblhHNXBiWEJ2Y25RZ2UxTnNiM1JRY205MmFXUmxjbjBnWm5KdmJTQW5MaTkxYVVWNGRHVnVjMmx2Ym5NblhHNWNibU52Ym5OMElHVjRjR0Z1WkNBOUlIdGNiaUFnYldGeVoybHVPaUF3TEZ4dUlDQm1iR1Y0T2lBbk1TY3NYRzU5WEc1Y2JtTnZibk4wSUdocFpHUmxiaUE5SUh0a2FYTndiR0Y1T2lBbmJtOXVaU2Q5WEc1Y2JtTnZibk4wSUdOdmJuUmhhVzVsY2xOMGVXeGxJRDBnZTF4dUlDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQm9aV2xuYUhRNklDY3hNREFsSnl4Y2JpQWdZbTk0VTJsNmFXNW5PaUFuWW05eVpHVnlMV0p2ZUNjc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWm14bGVFUnBjbVZqZEdsdmJqb2dKMk52YkhWdGJpY3NYRzRnSUc5MlpYSm1iRzkzT2lBbmFHbGtaR1Z1Snl4Y2JpQWdZMjlzYjNJNklDZDNhR2wwWlNjc1hHNGdJQzh2SUhCeVpYWmxiblFnWVc1cGJXRjBhVzl1SUdkc2FXTm9LR0ZtZEdWeWFXMWhaMlVwSUc5bUlHUmxjMk5sYm1SaGJuUWdaV3hsYldWdWRITmNiaUFnZEhKaGJuTm1iM0p0T2lBbmRISmhibk5zWVhSbFdDZ3dLU2NzWEc0Z0lIVnpaWEpUWld4bFkzUTZJQ2R1YjI1bEp5eGNiaUFnYURFNklIdGNiaUFnSUNCdFlYSm5hVzQ2SURBc1hHNGdJQ0FnWm05dWRGTnBlbVU2SUNjeFpXMG5MRnh1SUNBZ0lHeHBibVZJWldsbmFIUTZJQ2N4TGpWbGJTY3NYRzRnSUgwc1hHNGdJQ2RoTENCaE9teHBibXNzSUdFNmRtbHphWFJsWkNjNklIdGNiaUFnSUNCamIyeHZjam9nSnlObVptWW5MRnh1SUNBZ0lHOXdZV05wZEhrNklEQXVPQ3hjYmlBZ0lDQjBaWGgwUkdWamIzSmhkR2x2YmpvZ0oyNXZibVVuTEZ4dUlDQjlMRnh1SUNCaWRYUjBiMjQ2SUh0Y2JpQWdJQ0JtYjI1MFUybDZaVG9nSjJsdWFHVnlhWFFuTEZ4dUlDQWdJQ2MrSUNvbk9pQjdYRzRnSUNBZ0lDQndiMmx1ZEdWeVJYWmxiblJ6T2lBbmJtOXVaU2NzWEc0Z0lDQWdmU3hjYmlBZ2ZTeGNiaUFnSnkwdGRHaDFiV0p1WVdsc0xYZHBaSFJvSnpvZ0p6azJKeXdnTHk4Z2FHVnBaMmgwSURVMFhHNTlYRzVjYm1OdmJuTjBJSFpwWkdWdlEyOXVkR0ZwYm1WeVUzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRqcG1hWEp6ZEMxdlppMTBlWEJsSnpvZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUhwSmJtUmxlRG9nSnkweEp5eGNiaUFnSUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNBZ0lHaGxhV2RvZERvZ0p6RXdNQ1VuTEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCa2NtOXdJRDBnZTF4dUlDQmlZV05yWjNKdmRXNWtTVzFoWjJVNklHQnNhVzVsWVhJdFozSmhaR2xsYm5Rb1hHNGdJQ0FnTUdSbFp5eGNiaUFnSUNCeVoySmhLREFzTUN3d0xEQXVOU2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUdSeWIzQlViM0FnUFNCN1hHNGdJR0poWTJ0bmNtOTFibVJKYldGblpUb2dZR3hwYm1WaGNpMW5jbUZrYVdWdWRDaGNiaUFnSUNBd1pHVm5MRnh1SUNBZ0lISm5ZbUVvTUN3d0xEQXNNQ2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUhKbGMzQnZibk5wZG1WVGRIbHNaWE1nUFNCN1hHNGdJR1JsYzJ0MGIzQTZJSHRjYmlBZ0lDQm1iMjUwVTJsNlpUb2dKekkwY0hnbkxGeHVJQ0I5TENBdkx5QmhaR1FnYVdZZ2JtVmpaWE56WVhKNU9pQmlhV2N0WkdWemEzUnZjRnh1ZlZ4dVhHNWpiMjV6ZENCeWIzZFRkSGxzWlNBOUlIdGNiaUFnWW05NFUybDZhVzVuT2lBblltOXlaR1Z5TFdKdmVDY3NYRzRnSUhkcFpIUm9PaUFuTVRBd0pTY3NYRzRnSUhCaFpHUnBibWM2SUNkallXeGpLREpsYlNBdElERTJjSGdwSnl4Y2JpQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0JoYkdsbmJrbDBaVzF6T2lBblkyVnVkR1Z5Snl4Y2JpQWdhblZ6ZEdsbWVVTnZiblJsYm5RNklDZG1iR1Y0TFdWdVpDY3NYRzRnSUNjK0lHSjFkSFJ2YmpwdWIzUW9PbVJwYzJGaWJHVmtLU0IrSUdKMWRIUnZianB1YjNRb09tUnBjMkZpYkdWa0tTd2daR2wySUg0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZYRzRnSUNBZ2UxeHVJQ0FnSUNBZ2JXRnlaMmx1VEdWbWREb2dKekF1TlhKbGJTY3NYRzRnSUNBZ2ZTeGNiaUFnSno0Z1luVjBkRzl1T201dmRDZzZiR0Z6ZEMxdlppMTBlWEJsS1NjNklIdGNiaUFnSUNCdFlYSm5hVzVTYVdkb2REb2dKekF1TlhKbGJTY3NYRzRnSUgwc1hHNTlYRzVjYmk4cUlGeHVJQ0JJYVc1ME9seHVJQ0FnSUdScGMzQnNZWGxUZEhsc1pYTWdjM0JsWTJsbWFXTnBkSGtnYVhNZ2FHbG5hR1Z5SUhSb1pXNGdZMjl1ZEhKdmJITlRkSGxzWlZ4dUlDQWdJRTVsWldRZ2RHOGdjR0Y1SUdGMGRHVnVkR2x2YmlCM2FHVnVJSGRsSUhKbGRtbHpaU0IwYUdWelpTQnpkSGxzWlhNdVhHNHFMMXh1WTI5dWMzUWdaR2x6Y0d4aGVWTjBlV3hsY3lBOUlIdGNiaUFnYUdsa1pHVnVPaUI3WEc0Z0lDQWdKejRnWkdsMk9tNXZkQ2d1Y0dsdWJtVmtLU3dnUGlCaWRYUjBiMjQ2Ym05MEtDNXdhVzV1WldRcExDQStJR2d4T201dmRDZ3VjR2x1Ym1Wa0tTYzZJSHRjYmlBZ0lDQWdJSHBKYm1SbGVEb2dMVElzWEc0Z0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnZEhKaGJuTnBkR2x2YmpvZ0oyOXdZV05wZEhrZ01DNDRjeUJsWVhObExXOTFkQ3dnZWkxcGJtUmxlQ0F3Y3lBd0xqaHpKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J6YUc5M2Jqb2dlMXh1SUNBZ0lDYytJR1JwZGpwdWIzUW9MbkJwYm01bFpDa3NJRDRnWW5WMGRHOXVPbTV2ZENndWNHbHVibVZrS1N3Z1BpQm9NVHB1YjNRb0xuQnBibTVsWkNrbk9pQjdYRzRnSUNBZ0lDQjZTVzVrWlhnNklERXNYRzRnSUNBZ0lDQjBjbUZ1YzJsMGFXOXVPaUFuYjNCaFkybDBlU0F3TGpOeklHVmhjMlV0YjNWMExDQjZMV2x1WkdWNElEQnpJREJ6Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCamIyNTBjbTlzYzBScGMzQnNZWGxUZEhsc1pYTWdQU0I3WEc0Z0lHaHBaR1JsYmpvZ2UxeHVJQ0FnSUM0dUxtUnBjM0JzWVhsVGRIbHNaWE11YUdsa1pHVnVMRnh1SUNBZ0lDZCtJR1JwZGpwdWIzUW9MbkJwYm01bFpDa25PaUJrYVhOd2JHRjVVM1I1YkdWekxtaHBaR1JsYml4Y2JpQWdmU3hjYmlBZ2MyaHZkMjQ2SUh0Y2JpQWdJQ0F1TGk1a2FYTndiR0Y1VTNSNWJHVnpMbk5vYjNkdUxGeHVJQ0FnSUNkK0lHUnBkaWM2SUdScGMzQnNZWGxUZEhsc1pYTXVjMmh2ZDI0c1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHTnZiblJ5YjJ4elUzUjViR1VnUFNCN1hHNGdJRzFoY21kcGJsUnZjRG9nSjJGMWRHOG5MRnh1SUNCd2IzTnBkR2x2YmpvZ0oyRmljMjlzZFhSbEp5eGNiaUFnZWtsdVpHVjRPaUFuTWljc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWVd4cFoyNUpkR1Z0Y3pvZ0oyTmxiblJsY2ljc1hHNGdJQ2MrSUdKMWRIUnZiaWM2SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJQ2N4WlcwbkxGeHVJQ0FnSUhkcFpIUm9PaUFuTVM0M05XVnRKeXhjYmlBZ0lDQm9aV2xuYUhRNklDY3hMamMxWlcwbkxGeHVJQ0FnSUNjdGQyVmlhMmwwTFhSaGNDMW9hV2RvYkdsbmFIUXRZMjlzYjNJbk9pQW5kSEpoYm5Od1lYSmxiblFuTEZ4dUlDQWdJQ2NtT21ScGMyRmliR1ZrSnpvZ2UxeHVJQ0FnSUNBZ2IzQmhZMmwwZVRvZ01DeGNiaUFnSUNBZ0lIQnZhVzUwWlhKRmRtVnVkSE02SUNkdWIyNWxKeXhjYmlBZ0lDQjlMRnh1SUNBZ0lDY21MbkJzWVhrdFluVjBkRzl1SnpvZ2UxeHVJQ0FnSUNBZ2QybGtkR2c2SUNjelpXMG5MRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NMlZ0Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCaWIzUjBiMjFUY0dGalpTQTlJSHRjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJSEJ2Y25SeVlXbDBLU2M2SUh0Y2JpQWdJQ0J3WVdSa2FXNW5RbTkwZEc5dE9pQW5NbVZ0Snl4Y2JpQWdmU3hjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJR3hoYm1SelkyRndaU2tuT2lCN1hHNGdJQ0FnY0dGa1pHbHVaMEp2ZEhSdmJUb2dKekV1TTJWdEp5eGNiaUFnZlN4Y2JuMWNibHh1WTI5dWMzUWdablZ1WTNScGIyNUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNGdJR0oxZEhSdmJqb2dlMXh1SUNBZ0lDY3RkMlZpYTJsMExYUmhjQzFvYVdkb2JHbG5hSFF0WTI5c2IzSW5PaUFuZEhKaGJuTndZWEpsYm5RbkxGeHVJQ0FnSUdScGMzQnNZWGs2SUNkaWJHOWpheWNzWEc0Z0lDQWdiV0Z5WjJsdVRHVm1kRG9nSnpBdU56VmxiU2NzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUdsdVptOUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNTlYRzVjYm1OdmJuTjBJSFJsZUhSRmJHeHBjSE5wY3lBOUlIdGNiaUFnYjNabGNtWnNiM2M2SUNkb2FXUmtaVzRuTEZ4dUlDQjNhR2wwWlZOd1lXTmxPaUFuYm05M2NtRndKeXhjYmlBZ2RHVjRkRTkyWlhKbWJHOTNPaUFuWld4c2FYQnphWE1uTEZ4dWZWeHVYRzVqYjI1emRDQnBibVp2VTNSNWJHVWdQU0I3WEc0Z0lHOTJaWEptYkc5M09pQW5kbWx6YVdKc1pTY3NYRzRnSUdneE9pQjdYRzRnSUNBZ1ptOXVkRmRsYVdkb2REb2dKelV3TUNjc1hHNGdJQ0FnTGk0dWRHVjRkRVZzYkdsd2MybHpMRnh1SUNBZ0lDYytJR1JwZGljNklIUmxlSFJGYkd4cGNITnBjeXhjYmlBZ2ZTeGNiaUFnSjJKMWRIUnZiaUFySUdneEp6b2dlMXh1SUNBZ0lHMWhjbWRwYmt4bFpuUTZJQ2N4WlcwbkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmlZV05yVTNSNWJHVWdQU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNCNlNXNWtaWGc2SURBc1hHNGdJSGRwWkhSb09pQW5NVEF3SlNjc1hHNGdJR2hsYVdkb2REb2dKekV3TUNVbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUNkK0lHUnBkaWM2SUh0Y2JpQWdJQ0I2U1c1a1pYZzZJREFzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUhOcmFYQlRkSGxzWlNBOUlIdGNiaUFnY0c5emFYUnBiMjQ2SUNkaFluTnZiSFYwWlNjc1hHNGdJSEpwWjJoME9pQXdMRnh1SUNCaWIzUjBiMjA2SUNjNWNtVnRKeXhjYmlBZ2RHVjRkRUZzYVdkdU9pQW5jbWxuYUhRbkxGeHVJQ0JpZFhSMGIyNDZJSHRjYmlBZ0lDQjNhV1IwYURvZ0oyRjFkRzhuTEZ4dUlDQWdJR2hsYVdkb2REb2dKMkYxZEc4bkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmtaV3R6ZEc5d1UzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRpYzZJSHRjYmlBZ0lDQW5QaUJpZFhSMGIyNDZibTkwS0Rwa2FYTmhZbXhsWkNrZ2ZpQmlkWFIwYjI0NmJtOTBLRHBrYVhOaFlteGxaQ2tzSUQ0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQWdJRzFoY21kcGJreGxablE2SUNjd0xqYzFaVzBuTEZ4dUlDQWdJSDBzWEc0Z0lDQWdKejRnWW5WMGRHOXVPbVpwY25OMExXOW1MWFI1Y0dVbk9pQjdYRzRnSUNBZ0lDQnRZWEpuYVc1TVpXWjBPaUFuTUNjc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYmlBZ0p5MHRkR2gxYldKdVlXbHNMWGRwWkhSb0p6b2dKekk0T0Njc0lDOHZJR2hsYVdkb2RDQXhOakpjYm4xY2JseHVZMjl1YzNRZ1pHVnphM1J2Y0VOdmJuUnliMnh6SUQwZ2UxeHVJQ0JtYkdWNFYzSmhjRG9nSjNkeVlYQW5MRnh1SUNBblBpQmthWFk2Wm1seWMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQm1iR1Y0T2lBbk1UQXdKU2NzWEc0Z0lDQWdiV0Z5WjJsdVFtOTBkRzl0T2lBbk1DNDRPR1Z0Snl4Y2JpQWdmU3hjYmlBZ0p6NGdZblYwZEc5dVcyUnBjMkZpYkdWa1hTYzZJSHRjYmlBZ0lDQmthWE53YkdGNU9pQW5ibTl1WlNjc1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHRmtRMjl1ZEdGcGJtVnlVM1I1YkdVZ1BTQjdYRzRnSUdac1pYaEhjbTkzT2lBeExGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUhCdmFXNTBaWEpGZG1WdWRITTZJQ2R1YjI1bEp5eGNiaUFnSno0Z2FXWnlZVzFsSnpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc0Z0lHSjFkSFJ2YmpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc1OVhHNWNibU52Ym5OMElFTnZiblJ5YjJ4elFteHZZMnNnUFNBb2UxeHVJQ0J2Y21SbGNpQTlJQ2R0YjJKcGJHVW5MRnh1SUNCd2JHRjVRblYwZEc5dUxGeHVJQ0J5WlhkcGJtUkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ1ptOXlkMkZ5WkVKMWRIUnZiaUE5SUNjbkxGeHVJQ0J3Y21WMmFXOTFjMFZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ2JtVjRkRVZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYm4wcElEMCtYRzRnSUc5eVpHVnlJRDA5UFNBblpHVnphM1J2Y0NjZ1B5QW9YRzRnSUNBZ1BENWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0eVpYZHBibVJDZFhSMGIyNTlYRzRnSUNBZ0lDQjdabTl5ZDJGeVpFSjFkSFJ2Ym4xY2JpQWdJQ0E4THo1Y2JpQWdLU0E2SUNoY2JpQWdJQ0E4UGx4dUlDQWdJQ0FnZTNKbGQybHVaRUoxZEhSdmJuMWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0bWIzSjNZWEprUW5WMGRHOXVmVnh1SUNBZ0lEd3ZQbHh1SUNBcFhHNWNibU52Ym5OMElFUmxabUYxYkhSTVlYbHZkWFFnUFNBb2UxeHVJQ0IwZVhCbElEMGdKMjF2WW1sc1pTY3NYRzRnSUhOMGVXeGxMRnh1SUNCa2FYTndiR0Y1TEZ4dUlDQmpiMjUwY205c2MwUnBjM0JzWVhrZ1BTQmthWE53YkdGNUxGeHVJQ0J6YVhwbExGeHVJQ0IwYVhSc1pTQTlJQ2NuTEZ4dUlDQmphR0Z1Ym1Wc1ZHbDBiR1VnUFNBbkp5eGNiaUFnWTJoaGJtNWxiRWxqYjI0Z1BTQW5KeXhjYmlBZ2RtbGtaVzhzWEc0Z0lHaGhkbVZDYjNSMGIyMUpkR1Z0TEZ4dUlDQnpaV1ZyWW1GeUlEMGdKeWNzWEc0Z0lHTnZiblJ5YjJ4Q2RYUjBiMjV6TEZ4dUlDQjJiMngxYldWRGIyNTBjbTlzTEZ4dUlDQm1kV3hzYzJOeVpXVnVRblYwZEc5dUxGeHVJQ0JpWVdOclFuVjBkRzl1SUQwZ0p5Y3NYRzRnSUdGa1UzUmhkSFZ6SUQwZ0p5Y3NYRzRnSUdGa1RHbHVheUE5SUNjbkxGeHVJQ0JoWkZOcmFYQkNkWFIwYjI0c1hHNGdJR0poWTJ0SmRHVnRjeXhjYmlBZ1kyaHBiR1J5Wlc0c1hHNGdJR052Ym5SaGFXNWxjbEpsWml4Y2JpQWdZbUZqYTFKbFppeGNiaUFnWVdSRGIyNTBZV2x1WlhKU1pXWXNYRzRnSUM0dUxuSmxjM1JjYm4wcElEMCtJSHRjYmlBZ1kyOXVjM1FnYzJ4dmRGSmxaaUE5SUhWelpWSmxaaWg3ZlNsY2JseHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJR056Y3oxN1cxeHVJQ0FnSUNBZ0lDQmpiMjUwWVdsdVpYSlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2RtbGtaVzlEYjI1MFlXbHVaWEpUZEhsc1pTeGNiaUFnSUNBZ0lDQWdjbVZ6Y0c5dWMybDJaVk4wZVd4bGMxdHphWHBsWFN4Y2JpQWdJQ0FnSUNBZ2RIbHdaU0E5UFQwZ0oyUmxjMnQwYjNBbklDWW1JR1JsYTNOMGIzQlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2MzUjViR1VzWEc0Z0lDQWdJQ0JkZlZ4dUlDQWdJQ0FnY21WbVBYdGpiMjUwWVdsdVpYSlNaV1o5WEc0Z0lDQWdJQ0I3TGk0dWNtVnpkSDFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdkbWxrWlc5OVhHNGdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJSEpsWmoxN1ltRmphMUpsWm4xY2JpQWdJQ0FnSUNBZ1kzTnpQWHRiWEc0Z0lDQWdJQ0FnSUNBZ1ltRmphMU4wZVd4bExGeHVJQ0FnSUNBZ0lDQWdJR1JwYzNCc1lYa2dJVDA5SUNkb2FXUmtaVzRuSUNZbUlDaG9ZWFpsUW05MGRHOXRTWFJsYlNBL0lHUnliM0JVYjNBZ09pQmtjbTl3S1N4Y2JpQWdJQ0FnSUNBZ1hYMWNiaUFnSUNBZ0lENWNiaUFnSUNBZ0lDQWdlM1I1Y0dVZ0lUMDlJQ2R0YjJKcGJHVW5JQ1ltSUdKaFkydEpkR1Z0YzMxY2JpQWdJQ0FnSUNBZ2UyRmtVMnRwY0VKMWRIUnZiaUFtSmlBOFpHbDJJR056Y3oxN2MydHBjRk4wZVd4bGZUNTdZV1JUYTJsd1FuVjBkRzl1ZlR3dlpHbDJQbjFjYmlBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdHliM2RUZEhsc1pTd2dhVzVtYjFOMGVXeGxMQ0JrYVhOd2JHRjVVM1I1YkdWelcyUnBjM0JzWVhsZFhYMCtYRzRnSUNBZ0lDQWdJSHRpWVdOclFuVjBkRzl1ZlZ4dUlDQWdJQ0FnSUNCN1kyaGhibTVsYkVsamIyNTlYRzRnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMblJwZEd4bFFtRnlJRDBnWld4bGJXVnVkRnh1SUNBZ0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBZ0lDOCtYRzRnSUNBZ0lDQWdJRHhvTVQ1Y2JpQWdJQ0FnSUNBZ0lDQjdZMmhoYm01bGJGUnBkR3hsZlZ4dUlDQWdJQ0FnSUNBZ0lIdDBhWFJzWlgxY2JpQWdJQ0FnSUNBZ1BDOW9NVDVjYmlBZ0lDQWdJQ0FnUEdScGRpQmpjM005ZTJWNGNHRnVaSDBnTHo1Y2JpQWdJQ0FnSUNBZ2UzUjVjR1VnUFQwOUlDZHRiMkpwYkdVbklDWW1JQ2hjYmlBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllMkZrVTNSaGRIVnpJRDhnYUdsa1pHVnVJRG9nVzJaMWJtTjBhVzl1UW1GeVUyeHZkRk4wZVd4bFhYMWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE5zYjNSU1pXWXVZM1Z5Y21WdWRDNW1kVzVqZEdsdmJrSmhjaUE5SUdWc1pXMWxiblJjYmlBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnTHo1Y2JpQWdJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lDQWdlMkZrVEdsdWF5QW1KaUE4WkdsMklHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lQbnRoWkV4cGJtdDlQQzlrYVhZK2ZWeHVJQ0FnSUNBZ1BDOWthWFkrWEc0Z0lDQWdJQ0E4WkdsMklISmxaajE3WVdSRGIyNTBZV2x1WlhKU1pXWjlJR056Y3oxN1lXUkRiMjUwWVdsdVpYSlRkSGxzWlgwK1hHNGdJQ0FnSUNBZ0lIdDBlWEJsSUQwOVBTQW5iVzlpYVd4bEp5QW1KaUFvWEc0Z0lDQWdJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdGpiMjUwY205c2MxTjBlV3hsTENCa2FYTndiR0Y1VTNSNWJHVnpXMk52Ym5SeWIyeHpSR2x6Y0d4aGVWMWRmVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lEeERiMjUwY205c2MwSnNiMk5ySUc5eVpHVnlQVndpYlc5aWFXeGxYQ0lnZXk0dUxtTnZiblJ5YjJ4Q2RYUjBiMjV6ZlNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ0lDQXBmVnh1SUNBZ0lDQWdQQzlrYVhZK1hHNGdJQ0FnSUNCN2RIbHdaU0E5UFQwZ0oyMXZZbWxzWlNjZ0ppWWdLRnh1SUNBZ0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lDQWdZM056UFh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZrVTNSaGRIVnpYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lEOGdhR2xrWkdWdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ1cybHVabTlDWVhKVGJHOTBVM1I1YkdVc0lHTnZiblJ5YjJ4elJHbHpjR3hoZVZOMGVXeGxjMXRqYjI1MGNtOXNjMFJwYzNCc1lYbGRYVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnZlgxY2JpQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQThaR2wyWEc0Z0lDQWdJQ0FnSUdOemN6MTdXMXh1SUNBZ0lDQWdJQ0FnSUhKdmQxTjBlV3hsTEZ4dUlDQWdJQ0FnSUNBZ0lIdHRZWEpuYVc1VWIzQTZJQ2RoZFhSdkozMHNYRzRnSUNBZ0lDQWdJQ0FnZEhsd1pTQTlQVDBnSjJSbGMydDBiM0FuSUNZbUlHUmxjMnQwYjNCRGIyNTBjbTlzY3l4Y2JpQWdJQ0FnSUNBZ0lDQmpiMjUwY205c2MwUnBjM0JzWVhsVGRIbHNaWE5iWTI5dWRISnZiSE5FYVhOd2JHRjVYU3hjYmlBZ0lDQWdJQ0FnSUNCMGVYQmxJQ0U5UFNBblpHVnphM1J2Y0NjZ0ppWWdZbTkwZEc5dFUzQmhZMlVzWEc0Z0lDQWdJQ0FnSUYxOVhHNGdJQ0FnSUNBK1hHNGdJQ0FnSUNBZ0lIdHpaV1ZyWW1GeUlIeDhJRHhrYVhZZ0x6NTlYRzRnSUNBZ0lDQWdJSHQwZVhCbElEMDlQU0FuWkdWemEzUnZjQ2NnSmlZZ0tGeHVJQ0FnSUNBZ0lDQWdJRHcrWEc0Z0lDQWdJQ0FnSUNBZ0lDQThRMjl1ZEhKdmJITkNiRzlqYXlCdmNtUmxjajFjSW1SbGMydDBiM0JjSWlCN0xpNHVZMjl1ZEhKdmJFSjFkSFJ2Ym5OOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnpjejE3WVdSVGRHRjBkWE1nUHlCb2FXUmtaVzRnT2lCYmFXNW1iMEpoY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2UGx4dUlDQWdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ0lDQjdZV1JUZEdGMGRYTWdKaVlnS0Z4dUlDQWdJQ0FnSUNBZ0lEeGthWFpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllM3RtYkdWNE9pQXhMQ0IwWlhoMFUyaGhaRzkzT2lBbk1uQjRJREp3ZUNBeGNIZ2dJekF3TUNkOWZWeHVJQ0FnSUNBZ0lDQWdJRDVjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGhaRk4wWVhSMWMzMWNiaUFnSUNBZ0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTNSNWNHVWdQVDA5SUNka1pYTnJkRzl3SnlBbUppQW9YRzRnSUNBZ0lDQWdJQ0FnUEQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhZZ1kzTnpQWHRsZUhCaGJtUjlJQzgrWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdkbTlzZFcxbFEyOXVkSEp2YkgxY2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTNOelBYdGhaRk4wWVhSMWN5QS9JR2hwWkdSbGJpQTZJRnRtZFc1amRHbHZia0poY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbVoxYm1OMGFXOXVRbUZ5SUQwZ1pXeGxiV1Z1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0I5ZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdMejVjYmlBZ0lDQWdJQ0FnSUNBOEx6NWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTJaMWJHeHpZM0psWlc1Q2RYUjBiMjU5WEc0Z0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lEeFRiRzkwVUhKdmRtbGtaWElnYzJ4dmRGSmxaajE3YzJ4dmRGSmxabjArZTJOb2FXeGtjbVZ1ZlR3dlUyeHZkRkJ5YjNacFpHVnlQbHh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUVSbFptRjFiSFJNWVhsdmRYUmNiaUpkZlE9PSAqL1wiXSxcbiAgICAgICAgY2hpbGRyZW46IGpzeCQxKENvbnRyb2xzQmxvY2ssIHtcbiAgICAgICAgICBvcmRlcjogXCJtb2JpbGVcIixcbiAgICAgICAgICAuLi5jb250cm9sQnV0dG9uc1xuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KSwgdHlwZSA9PT0gJ21vYmlsZScgJiYganN4JDEoXCJkaXZcIiwge1xuICAgICAgY3NzOiBhZFN0YXR1cyA/IGhpZGRlbiA6IFtpbmZvQmFyU2xvdFN0eWxlLCBjb250cm9sc0Rpc3BsYXlTdHlsZXNbY29udHJvbHNEaXNwbGF5XV0sXG4gICAgICByZWY6IGVsZW1lbnQgPT4ge1xuICAgICAgICBzbG90UmVmLmN1cnJlbnQuaW5mb0JhciA9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSksIGpzeHMoXCJkaXZcIiwge1xuICAgICAgY3NzOiBbcm93U3R5bGUsIFwibWFyZ2luLXRvcDphdXRvO1wiLCB0eXBlID09PSAnZGVza3RvcCcgJiYgZGVza3RvcENvbnRyb2xzLCBjb250cm9sc0Rpc3BsYXlTdHlsZXNbY29udHJvbHNEaXNwbGF5XSwgdHlwZSAhPT0gJ2Rlc2t0b3AnICYmIGJvdHRvbVNwYWNlLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6RGVmYXVsdExheW91dDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtSbFptRjFiSFJNWVhsdmRYUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCTkZkUklpd2labWxzWlNJNklrUmxabUYxYkhSTVlYbHZkWFF1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUJBYW5ONFNXMXdiM0owVTI5MWNtTmxJRUJsYlc5MGFXOXVMM0psWVdOMElDb3ZYRzR2S2lCbGMyeHBiblF0WkdsellXSnNaU0J5WldGamRDOXdjbTl3TFhSNWNHVnpJQ292WEc1cGJYQnZjblFnZTNWelpWSmxabjBnWm5KdmJTQW5jbVZoWTNRblhHNXBiWEJ2Y25RZ2UxTnNiM1JRY205MmFXUmxjbjBnWm5KdmJTQW5MaTkxYVVWNGRHVnVjMmx2Ym5NblhHNWNibU52Ym5OMElHVjRjR0Z1WkNBOUlIdGNiaUFnYldGeVoybHVPaUF3TEZ4dUlDQm1iR1Y0T2lBbk1TY3NYRzU5WEc1Y2JtTnZibk4wSUdocFpHUmxiaUE5SUh0a2FYTndiR0Y1T2lBbmJtOXVaU2Q5WEc1Y2JtTnZibk4wSUdOdmJuUmhhVzVsY2xOMGVXeGxJRDBnZTF4dUlDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQm9aV2xuYUhRNklDY3hNREFsSnl4Y2JpQWdZbTk0VTJsNmFXNW5PaUFuWW05eVpHVnlMV0p2ZUNjc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWm14bGVFUnBjbVZqZEdsdmJqb2dKMk52YkhWdGJpY3NYRzRnSUc5MlpYSm1iRzkzT2lBbmFHbGtaR1Z1Snl4Y2JpQWdZMjlzYjNJNklDZDNhR2wwWlNjc1hHNGdJQzh2SUhCeVpYWmxiblFnWVc1cGJXRjBhVzl1SUdkc2FXTm9LR0ZtZEdWeWFXMWhaMlVwSUc5bUlHUmxjMk5sYm1SaGJuUWdaV3hsYldWdWRITmNiaUFnZEhKaGJuTm1iM0p0T2lBbmRISmhibk5zWVhSbFdDZ3dLU2NzWEc0Z0lIVnpaWEpUWld4bFkzUTZJQ2R1YjI1bEp5eGNiaUFnYURFNklIdGNiaUFnSUNCdFlYSm5hVzQ2SURBc1hHNGdJQ0FnWm05dWRGTnBlbVU2SUNjeFpXMG5MRnh1SUNBZ0lHeHBibVZJWldsbmFIUTZJQ2N4TGpWbGJTY3NYRzRnSUgwc1hHNGdJQ2RoTENCaE9teHBibXNzSUdFNmRtbHphWFJsWkNjNklIdGNiaUFnSUNCamIyeHZjam9nSnlObVptWW5MRnh1SUNBZ0lHOXdZV05wZEhrNklEQXVPQ3hjYmlBZ0lDQjBaWGgwUkdWamIzSmhkR2x2YmpvZ0oyNXZibVVuTEZ4dUlDQjlMRnh1SUNCaWRYUjBiMjQ2SUh0Y2JpQWdJQ0JtYjI1MFUybDZaVG9nSjJsdWFHVnlhWFFuTEZ4dUlDQWdJQ2MrSUNvbk9pQjdYRzRnSUNBZ0lDQndiMmx1ZEdWeVJYWmxiblJ6T2lBbmJtOXVaU2NzWEc0Z0lDQWdmU3hjYmlBZ2ZTeGNiaUFnSnkwdGRHaDFiV0p1WVdsc0xYZHBaSFJvSnpvZ0p6azJKeXdnTHk4Z2FHVnBaMmgwSURVMFhHNTlYRzVjYm1OdmJuTjBJSFpwWkdWdlEyOXVkR0ZwYm1WeVUzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRqcG1hWEp6ZEMxdlppMTBlWEJsSnpvZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUhwSmJtUmxlRG9nSnkweEp5eGNiaUFnSUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNBZ0lHaGxhV2RvZERvZ0p6RXdNQ1VuTEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCa2NtOXdJRDBnZTF4dUlDQmlZV05yWjNKdmRXNWtTVzFoWjJVNklHQnNhVzVsWVhJdFozSmhaR2xsYm5Rb1hHNGdJQ0FnTUdSbFp5eGNiaUFnSUNCeVoySmhLREFzTUN3d0xEQXVOU2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUdSeWIzQlViM0FnUFNCN1hHNGdJR0poWTJ0bmNtOTFibVJKYldGblpUb2dZR3hwYm1WaGNpMW5jbUZrYVdWdWRDaGNiaUFnSUNBd1pHVm5MRnh1SUNBZ0lISm5ZbUVvTUN3d0xEQXNNQ2tnTUN4Y2JpQWdJQ0J5WjJKaEtEQXNNQ3d3TERBcElEaHlaVzBnWTJGc1l5Z3hNREFsSUMwZ09ISmxiU2tzWEc0Z0lDQWdjbWRpWVNnd0xEQXNNQ3d3TGpVcElERXdNQ1ZjYmlBZ0tXQXNYRzU5WEc1Y2JtTnZibk4wSUhKbGMzQnZibk5wZG1WVGRIbHNaWE1nUFNCN1hHNGdJR1JsYzJ0MGIzQTZJSHRjYmlBZ0lDQm1iMjUwVTJsNlpUb2dKekkwY0hnbkxGeHVJQ0I5TENBdkx5QmhaR1FnYVdZZ2JtVmpaWE56WVhKNU9pQmlhV2N0WkdWemEzUnZjRnh1ZlZ4dVhHNWpiMjV6ZENCeWIzZFRkSGxzWlNBOUlIdGNiaUFnWW05NFUybDZhVzVuT2lBblltOXlaR1Z5TFdKdmVDY3NYRzRnSUhkcFpIUm9PaUFuTVRBd0pTY3NYRzRnSUhCaFpHUnBibWM2SUNkallXeGpLREpsYlNBdElERTJjSGdwSnl4Y2JpQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0JoYkdsbmJrbDBaVzF6T2lBblkyVnVkR1Z5Snl4Y2JpQWdhblZ6ZEdsbWVVTnZiblJsYm5RNklDZG1iR1Y0TFdWdVpDY3NYRzRnSUNjK0lHSjFkSFJ2YmpwdWIzUW9PbVJwYzJGaWJHVmtLU0IrSUdKMWRIUnZianB1YjNRb09tUnBjMkZpYkdWa0tTd2daR2wySUg0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZYRzRnSUNBZ2UxeHVJQ0FnSUNBZ2JXRnlaMmx1VEdWbWREb2dKekF1TlhKbGJTY3NYRzRnSUNBZ2ZTeGNiaUFnSno0Z1luVjBkRzl1T201dmRDZzZiR0Z6ZEMxdlppMTBlWEJsS1NjNklIdGNiaUFnSUNCdFlYSm5hVzVTYVdkb2REb2dKekF1TlhKbGJTY3NYRzRnSUgwc1hHNTlYRzVjYmk4cUlGeHVJQ0JJYVc1ME9seHVJQ0FnSUdScGMzQnNZWGxUZEhsc1pYTWdjM0JsWTJsbWFXTnBkSGtnYVhNZ2FHbG5hR1Z5SUhSb1pXNGdZMjl1ZEhKdmJITlRkSGxzWlZ4dUlDQWdJRTVsWldRZ2RHOGdjR0Y1SUdGMGRHVnVkR2x2YmlCM2FHVnVJSGRsSUhKbGRtbHpaU0IwYUdWelpTQnpkSGxzWlhNdVhHNHFMMXh1WTI5dWMzUWdaR2x6Y0d4aGVWTjBlV3hsY3lBOUlIdGNiaUFnYUdsa1pHVnVPaUI3WEc0Z0lDQWdKejRnWkdsMk9tNXZkQ2d1Y0dsdWJtVmtLU3dnUGlCaWRYUjBiMjQ2Ym05MEtDNXdhVzV1WldRcExDQStJR2d4T201dmRDZ3VjR2x1Ym1Wa0tTYzZJSHRjYmlBZ0lDQWdJSHBKYm1SbGVEb2dMVElzWEc0Z0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnZEhKaGJuTnBkR2x2YmpvZ0oyOXdZV05wZEhrZ01DNDRjeUJsWVhObExXOTFkQ3dnZWkxcGJtUmxlQ0F3Y3lBd0xqaHpKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J6YUc5M2Jqb2dlMXh1SUNBZ0lDYytJR1JwZGpwdWIzUW9MbkJwYm01bFpDa3NJRDRnWW5WMGRHOXVPbTV2ZENndWNHbHVibVZrS1N3Z1BpQm9NVHB1YjNRb0xuQnBibTVsWkNrbk9pQjdYRzRnSUNBZ0lDQjZTVzVrWlhnNklERXNYRzRnSUNBZ0lDQjBjbUZ1YzJsMGFXOXVPaUFuYjNCaFkybDBlU0F3TGpOeklHVmhjMlV0YjNWMExDQjZMV2x1WkdWNElEQnpJREJ6Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCamIyNTBjbTlzYzBScGMzQnNZWGxUZEhsc1pYTWdQU0I3WEc0Z0lHaHBaR1JsYmpvZ2UxeHVJQ0FnSUM0dUxtUnBjM0JzWVhsVGRIbHNaWE11YUdsa1pHVnVMRnh1SUNBZ0lDZCtJR1JwZGpwdWIzUW9MbkJwYm01bFpDa25PaUJrYVhOd2JHRjVVM1I1YkdWekxtaHBaR1JsYml4Y2JpQWdmU3hjYmlBZ2MyaHZkMjQ2SUh0Y2JpQWdJQ0F1TGk1a2FYTndiR0Y1VTNSNWJHVnpMbk5vYjNkdUxGeHVJQ0FnSUNkK0lHUnBkaWM2SUdScGMzQnNZWGxUZEhsc1pYTXVjMmh2ZDI0c1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHTnZiblJ5YjJ4elUzUjViR1VnUFNCN1hHNGdJRzFoY21kcGJsUnZjRG9nSjJGMWRHOG5MRnh1SUNCd2IzTnBkR2x2YmpvZ0oyRmljMjlzZFhSbEp5eGNiaUFnZWtsdVpHVjRPaUFuTWljc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWVd4cFoyNUpkR1Z0Y3pvZ0oyTmxiblJsY2ljc1hHNGdJQ2MrSUdKMWRIUnZiaWM2SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJQ2N4WlcwbkxGeHVJQ0FnSUhkcFpIUm9PaUFuTVM0M05XVnRKeXhjYmlBZ0lDQm9aV2xuYUhRNklDY3hMamMxWlcwbkxGeHVJQ0FnSUNjdGQyVmlhMmwwTFhSaGNDMW9hV2RvYkdsbmFIUXRZMjlzYjNJbk9pQW5kSEpoYm5Od1lYSmxiblFuTEZ4dUlDQWdJQ2NtT21ScGMyRmliR1ZrSnpvZ2UxeHVJQ0FnSUNBZ2IzQmhZMmwwZVRvZ01DeGNiaUFnSUNBZ0lIQnZhVzUwWlhKRmRtVnVkSE02SUNkdWIyNWxKeXhjYmlBZ0lDQjlMRnh1SUNBZ0lDY21MbkJzWVhrdFluVjBkRzl1SnpvZ2UxeHVJQ0FnSUNBZ2QybGtkR2c2SUNjelpXMG5MRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NMlZ0Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCaWIzUjBiMjFUY0dGalpTQTlJSHRjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJSEJ2Y25SeVlXbDBLU2M2SUh0Y2JpQWdJQ0J3WVdSa2FXNW5RbTkwZEc5dE9pQW5NbVZ0Snl4Y2JpQWdmU3hjYmlBZ0owQnRaV1JwWVNBb2IzSnBaVzUwWVhScGIyNDZJR3hoYm1SelkyRndaU2tuT2lCN1hHNGdJQ0FnY0dGa1pHbHVaMEp2ZEhSdmJUb2dKekV1TTJWdEp5eGNiaUFnZlN4Y2JuMWNibHh1WTI5dWMzUWdablZ1WTNScGIyNUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNGdJR0oxZEhSdmJqb2dlMXh1SUNBZ0lDY3RkMlZpYTJsMExYUmhjQzFvYVdkb2JHbG5hSFF0WTI5c2IzSW5PaUFuZEhKaGJuTndZWEpsYm5RbkxGeHVJQ0FnSUdScGMzQnNZWGs2SUNkaWJHOWpheWNzWEc0Z0lDQWdiV0Z5WjJsdVRHVm1kRG9nSnpBdU56VmxiU2NzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUdsdVptOUNZWEpUYkc5MFUzUjViR1VnUFNCN1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnYldGeVoybHVUR1ZtZERvZ0p6QXVOelZsYlNjc1hHNTlYRzVjYm1OdmJuTjBJSFJsZUhSRmJHeHBjSE5wY3lBOUlIdGNiaUFnYjNabGNtWnNiM2M2SUNkb2FXUmtaVzRuTEZ4dUlDQjNhR2wwWlZOd1lXTmxPaUFuYm05M2NtRndKeXhjYmlBZ2RHVjRkRTkyWlhKbWJHOTNPaUFuWld4c2FYQnphWE1uTEZ4dWZWeHVYRzVqYjI1emRDQnBibVp2VTNSNWJHVWdQU0I3WEc0Z0lHOTJaWEptYkc5M09pQW5kbWx6YVdKc1pTY3NYRzRnSUdneE9pQjdYRzRnSUNBZ1ptOXVkRmRsYVdkb2REb2dKelV3TUNjc1hHNGdJQ0FnTGk0dWRHVjRkRVZzYkdsd2MybHpMRnh1SUNBZ0lDYytJR1JwZGljNklIUmxlSFJGYkd4cGNITnBjeXhjYmlBZ2ZTeGNiaUFnSjJKMWRIUnZiaUFySUdneEp6b2dlMXh1SUNBZ0lHMWhjbWRwYmt4bFpuUTZJQ2N4WlcwbkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmlZV05yVTNSNWJHVWdQU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNCNlNXNWtaWGc2SURBc1hHNGdJSGRwWkhSb09pQW5NVEF3SlNjc1hHNGdJR2hsYVdkb2REb2dKekV3TUNVbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUNkK0lHUnBkaWM2SUh0Y2JpQWdJQ0I2U1c1a1pYZzZJREFzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUhOcmFYQlRkSGxzWlNBOUlIdGNiaUFnY0c5emFYUnBiMjQ2SUNkaFluTnZiSFYwWlNjc1hHNGdJSEpwWjJoME9pQXdMRnh1SUNCaWIzUjBiMjA2SUNjNWNtVnRKeXhjYmlBZ2RHVjRkRUZzYVdkdU9pQW5jbWxuYUhRbkxGeHVJQ0JpZFhSMGIyNDZJSHRjYmlBZ0lDQjNhV1IwYURvZ0oyRjFkRzhuTEZ4dUlDQWdJR2hsYVdkb2REb2dKMkYxZEc4bkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQmtaV3R6ZEc5d1UzUjViR1VnUFNCN1hHNGdJQ2MrSUdScGRpYzZJSHRjYmlBZ0lDQW5QaUJpZFhSMGIyNDZibTkwS0Rwa2FYTmhZbXhsWkNrZ2ZpQmlkWFIwYjI0NmJtOTBLRHBrYVhOaFlteGxaQ2tzSUQ0Z1luVjBkRzl1T214aGMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQWdJRzFoY21kcGJreGxablE2SUNjd0xqYzFaVzBuTEZ4dUlDQWdJSDBzWEc0Z0lDQWdKejRnWW5WMGRHOXVPbVpwY25OMExXOW1MWFI1Y0dVbk9pQjdYRzRnSUNBZ0lDQnRZWEpuYVc1TVpXWjBPaUFuTUNjc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYmlBZ0p5MHRkR2gxYldKdVlXbHNMWGRwWkhSb0p6b2dKekk0T0Njc0lDOHZJR2hsYVdkb2RDQXhOakpjYm4xY2JseHVZMjl1YzNRZ1pHVnphM1J2Y0VOdmJuUnliMnh6SUQwZ2UxeHVJQ0JtYkdWNFYzSmhjRG9nSjNkeVlYQW5MRnh1SUNBblBpQmthWFk2Wm1seWMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQm1iR1Y0T2lBbk1UQXdKU2NzWEc0Z0lDQWdiV0Z5WjJsdVFtOTBkRzl0T2lBbk1DNDRPR1Z0Snl4Y2JpQWdmU3hjYmlBZ0p6NGdZblYwZEc5dVcyUnBjMkZpYkdWa1hTYzZJSHRjYmlBZ0lDQmthWE53YkdGNU9pQW5ibTl1WlNjc1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElHRmtRMjl1ZEdGcGJtVnlVM1I1YkdVZ1BTQjdYRzRnSUdac1pYaEhjbTkzT2lBeExGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JxZFhOMGFXWjVRMjl1ZEdWdWREb2dKMk5sYm5SbGNpY3NYRzRnSUhCdmFXNTBaWEpGZG1WdWRITTZJQ2R1YjI1bEp5eGNiaUFnSno0Z2FXWnlZVzFsSnpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc0Z0lHSjFkSFJ2YmpvZ2UzQnZhVzUwWlhKRmRtVnVkSE02SUNkaGRYUnZKMzBzWEc1OVhHNWNibU52Ym5OMElFTnZiblJ5YjJ4elFteHZZMnNnUFNBb2UxeHVJQ0J2Y21SbGNpQTlJQ2R0YjJKcGJHVW5MRnh1SUNCd2JHRjVRblYwZEc5dUxGeHVJQ0J5WlhkcGJtUkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ1ptOXlkMkZ5WkVKMWRIUnZiaUE5SUNjbkxGeHVJQ0J3Y21WMmFXOTFjMFZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYmlBZ2JtVjRkRVZ3YVhOdlpHVkNkWFIwYjI0Z1BTQW5KeXhjYm4wcElEMCtYRzRnSUc5eVpHVnlJRDA5UFNBblpHVnphM1J2Y0NjZ1B5QW9YRzRnSUNBZ1BENWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0eVpYZHBibVJDZFhSMGIyNTlYRzRnSUNBZ0lDQjdabTl5ZDJGeVpFSjFkSFJ2Ym4xY2JpQWdJQ0E4THo1Y2JpQWdLU0E2SUNoY2JpQWdJQ0E4UGx4dUlDQWdJQ0FnZTNKbGQybHVaRUoxZEhSdmJuMWNiaUFnSUNBZ0lIdHdjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjU5WEc0Z0lDQWdJQ0I3Y0d4aGVVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0dVpYaDBSWEJwYzI5a1pVSjFkSFJ2Ym4xY2JpQWdJQ0FnSUh0bWIzSjNZWEprUW5WMGRHOXVmVnh1SUNBZ0lEd3ZQbHh1SUNBcFhHNWNibU52Ym5OMElFUmxabUYxYkhSTVlYbHZkWFFnUFNBb2UxeHVJQ0IwZVhCbElEMGdKMjF2WW1sc1pTY3NYRzRnSUhOMGVXeGxMRnh1SUNCa2FYTndiR0Y1TEZ4dUlDQmpiMjUwY205c2MwUnBjM0JzWVhrZ1BTQmthWE53YkdGNUxGeHVJQ0J6YVhwbExGeHVJQ0IwYVhSc1pTQTlJQ2NuTEZ4dUlDQmphR0Z1Ym1Wc1ZHbDBiR1VnUFNBbkp5eGNiaUFnWTJoaGJtNWxiRWxqYjI0Z1BTQW5KeXhjYmlBZ2RtbGtaVzhzWEc0Z0lHaGhkbVZDYjNSMGIyMUpkR1Z0TEZ4dUlDQnpaV1ZyWW1GeUlEMGdKeWNzWEc0Z0lHTnZiblJ5YjJ4Q2RYUjBiMjV6TEZ4dUlDQjJiMngxYldWRGIyNTBjbTlzTEZ4dUlDQm1kV3hzYzJOeVpXVnVRblYwZEc5dUxGeHVJQ0JpWVdOclFuVjBkRzl1SUQwZ0p5Y3NYRzRnSUdGa1UzUmhkSFZ6SUQwZ0p5Y3NYRzRnSUdGa1RHbHVheUE5SUNjbkxGeHVJQ0JoWkZOcmFYQkNkWFIwYjI0c1hHNGdJR0poWTJ0SmRHVnRjeXhjYmlBZ1kyaHBiR1J5Wlc0c1hHNGdJR052Ym5SaGFXNWxjbEpsWml4Y2JpQWdZbUZqYTFKbFppeGNiaUFnWVdSRGIyNTBZV2x1WlhKU1pXWXNYRzRnSUM0dUxuSmxjM1JjYm4wcElEMCtJSHRjYmlBZ1kyOXVjM1FnYzJ4dmRGSmxaaUE5SUhWelpWSmxaaWg3ZlNsY2JseHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJR056Y3oxN1cxeHVJQ0FnSUNBZ0lDQmpiMjUwWVdsdVpYSlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2RtbGtaVzlEYjI1MFlXbHVaWEpUZEhsc1pTeGNiaUFnSUNBZ0lDQWdjbVZ6Y0c5dWMybDJaVk4wZVd4bGMxdHphWHBsWFN4Y2JpQWdJQ0FnSUNBZ2RIbHdaU0E5UFQwZ0oyUmxjMnQwYjNBbklDWW1JR1JsYTNOMGIzQlRkSGxzWlN4Y2JpQWdJQ0FnSUNBZ2MzUjViR1VzWEc0Z0lDQWdJQ0JkZlZ4dUlDQWdJQ0FnY21WbVBYdGpiMjUwWVdsdVpYSlNaV1o5WEc0Z0lDQWdJQ0I3TGk0dWNtVnpkSDFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdkbWxrWlc5OVhHNGdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJSEpsWmoxN1ltRmphMUpsWm4xY2JpQWdJQ0FnSUNBZ1kzTnpQWHRiWEc0Z0lDQWdJQ0FnSUNBZ1ltRmphMU4wZVd4bExGeHVJQ0FnSUNBZ0lDQWdJR1JwYzNCc1lYa2dJVDA5SUNkb2FXUmtaVzRuSUNZbUlDaG9ZWFpsUW05MGRHOXRTWFJsYlNBL0lHUnliM0JVYjNBZ09pQmtjbTl3S1N4Y2JpQWdJQ0FnSUNBZ1hYMWNiaUFnSUNBZ0lENWNiaUFnSUNBZ0lDQWdlM1I1Y0dVZ0lUMDlJQ2R0YjJKcGJHVW5JQ1ltSUdKaFkydEpkR1Z0YzMxY2JpQWdJQ0FnSUNBZ2UyRmtVMnRwY0VKMWRIUnZiaUFtSmlBOFpHbDJJR056Y3oxN2MydHBjRk4wZVd4bGZUNTdZV1JUYTJsd1FuVjBkRzl1ZlR3dlpHbDJQbjFjYmlBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdHliM2RUZEhsc1pTd2dhVzVtYjFOMGVXeGxMQ0JrYVhOd2JHRjVVM1I1YkdWelcyUnBjM0JzWVhsZFhYMCtYRzRnSUNBZ0lDQWdJSHRpWVdOclFuVjBkRzl1ZlZ4dUlDQWdJQ0FnSUNCN1kyaGhibTVsYkVsamIyNTlYRzRnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMblJwZEd4bFFtRnlJRDBnWld4bGJXVnVkRnh1SUNBZ0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBZ0lDOCtYRzRnSUNBZ0lDQWdJRHhvTVQ1Y2JpQWdJQ0FnSUNBZ0lDQjdZMmhoYm01bGJGUnBkR3hsZlZ4dUlDQWdJQ0FnSUNBZ0lIdDBhWFJzWlgxY2JpQWdJQ0FnSUNBZ1BDOW9NVDVjYmlBZ0lDQWdJQ0FnUEdScGRpQmpjM005ZTJWNGNHRnVaSDBnTHo1Y2JpQWdJQ0FnSUNBZ2UzUjVjR1VnUFQwOUlDZHRiMkpwYkdVbklDWW1JQ2hjYmlBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllMkZrVTNSaGRIVnpJRDhnYUdsa1pHVnVJRG9nVzJaMWJtTjBhVzl1UW1GeVUyeHZkRk4wZVd4bFhYMWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE5zYjNSU1pXWXVZM1Z5Y21WdWRDNW1kVzVqZEdsdmJrSmhjaUE5SUdWc1pXMWxiblJjYmlBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnTHo1Y2JpQWdJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lDQWdlMkZrVEdsdWF5QW1KaUE4WkdsMklHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lQbnRoWkV4cGJtdDlQQzlrYVhZK2ZWeHVJQ0FnSUNBZ1BDOWthWFkrWEc0Z0lDQWdJQ0E4WkdsMklISmxaajE3WVdSRGIyNTBZV2x1WlhKU1pXWjlJR056Y3oxN1lXUkRiMjUwWVdsdVpYSlRkSGxzWlgwK1hHNGdJQ0FnSUNBZ0lIdDBlWEJsSUQwOVBTQW5iVzlpYVd4bEp5QW1KaUFvWEc0Z0lDQWdJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdGpiMjUwY205c2MxTjBlV3hsTENCa2FYTndiR0Y1VTNSNWJHVnpXMk52Ym5SeWIyeHpSR2x6Y0d4aGVWMWRmVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lEeERiMjUwY205c2MwSnNiMk5ySUc5eVpHVnlQVndpYlc5aWFXeGxYQ0lnZXk0dUxtTnZiblJ5YjJ4Q2RYUjBiMjV6ZlNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ0lDQXBmVnh1SUNBZ0lDQWdQQzlrYVhZK1hHNGdJQ0FnSUNCN2RIbHdaU0E5UFQwZ0oyMXZZbWxzWlNjZ0ppWWdLRnh1SUNBZ0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lDQWdZM056UFh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZrVTNSaGRIVnpYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lEOGdhR2xrWkdWdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ1cybHVabTlDWVhKVGJHOTBVM1I1YkdVc0lHTnZiblJ5YjJ4elJHbHpjR3hoZVZOMGVXeGxjMXRqYjI1MGNtOXNjMFJwYzNCc1lYbGRYVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnlaV1k5ZTJWc1pXMWxiblFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnZlgxY2JpQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQThaR2wyWEc0Z0lDQWdJQ0FnSUdOemN6MTdXMXh1SUNBZ0lDQWdJQ0FnSUhKdmQxTjBlV3hsTEZ4dUlDQWdJQ0FnSUNBZ0lIdHRZWEpuYVc1VWIzQTZJQ2RoZFhSdkozMHNYRzRnSUNBZ0lDQWdJQ0FnZEhsd1pTQTlQVDBnSjJSbGMydDBiM0FuSUNZbUlHUmxjMnQwYjNCRGIyNTBjbTlzY3l4Y2JpQWdJQ0FnSUNBZ0lDQmpiMjUwY205c2MwUnBjM0JzWVhsVGRIbHNaWE5iWTI5dWRISnZiSE5FYVhOd2JHRjVYU3hjYmlBZ0lDQWdJQ0FnSUNCMGVYQmxJQ0U5UFNBblpHVnphM1J2Y0NjZ0ppWWdZbTkwZEc5dFUzQmhZMlVzWEc0Z0lDQWdJQ0FnSUYxOVhHNGdJQ0FnSUNBK1hHNGdJQ0FnSUNBZ0lIdHpaV1ZyWW1GeUlIeDhJRHhrYVhZZ0x6NTlYRzRnSUNBZ0lDQWdJSHQwZVhCbElEMDlQU0FuWkdWemEzUnZjQ2NnSmlZZ0tGeHVJQ0FnSUNBZ0lDQWdJRHcrWEc0Z0lDQWdJQ0FnSUNBZ0lDQThRMjl1ZEhKdmJITkNiRzlqYXlCdmNtUmxjajFjSW1SbGMydDBiM0JjSWlCN0xpNHVZMjl1ZEhKdmJFSjFkSFJ2Ym5OOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnpjejE3WVdSVGRHRjBkWE1nUHlCb2FXUmtaVzRnT2lCYmFXNW1iMEpoY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbWx1Wm05Q1lYSWdQU0JsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0lDQWdJRHd2UGx4dUlDQWdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ0lDQjdZV1JUZEdGMGRYTWdKaVlnS0Z4dUlDQWdJQ0FnSUNBZ0lEeGthWFpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnNZWE56VG1GdFpUMWNJbkJwYm01bFpGd2lYRzRnSUNBZ0lDQWdJQ0FnSUNCamMzTTllM3RtYkdWNE9pQXhMQ0IwWlhoMFUyaGhaRzkzT2lBbk1uQjRJREp3ZUNBeGNIZ2dJekF3TUNkOWZWeHVJQ0FnSUNBZ0lDQWdJRDVjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGhaRk4wWVhSMWMzMWNiaUFnSUNBZ0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTNSNWNHVWdQVDA5SUNka1pYTnJkRzl3SnlBbUppQW9YRzRnSUNBZ0lDQWdJQ0FnUEQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhZZ1kzTnpQWHRsZUhCaGJtUjlJQzgrWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdkbTlzZFcxbFEyOXVkSEp2YkgxY2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTNOelBYdGhaRk4wWVhSMWN5QS9JR2hwWkdSbGJpQTZJRnRtZFc1amRHbHZia0poY2xOc2IzUlRkSGxzWlYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpqMTdaV3hsYldWdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4dmRGSmxaaTVqZFhKeVpXNTBMbVoxYm1OMGFXOXVRbUZ5SUQwZ1pXeGxiV1Z1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0I5ZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdMejVjYmlBZ0lDQWdJQ0FnSUNBOEx6NWNiaUFnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnZTJaMWJHeHpZM0psWlc1Q2RYUjBiMjU5WEc0Z0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lEeFRiRzkwVUhKdmRtbGtaWElnYzJ4dmRGSmxaajE3YzJ4dmRGSmxabjArZTJOb2FXeGtjbVZ1ZlR3dlUyeHZkRkJ5YjNacFpHVnlQbHh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUVSbFptRjFiSFJNWVhsdmRYUmNiaUpkZlE9PSAqL1wiXSxcbiAgICAgIGNoaWxkcmVuOiBbc2Vla2JhciB8fCBqc3gkMShcImRpdlwiLCB7fSksIHR5cGUgPT09ICdkZXNrdG9wJyAmJiBqc3hzKEZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbanN4JDEoQ29udHJvbHNCbG9jaywge1xuICAgICAgICAgIG9yZGVyOiBcImRlc2t0b3BcIixcbiAgICAgICAgICAuLi5jb250cm9sQnV0dG9uc1xuICAgICAgICB9KSwganN4JDEoXCJkaXZcIiwge1xuICAgICAgICAgIGNzczogYWRTdGF0dXMgPyBoaWRkZW4gOiBbaW5mb0JhclNsb3RTdHlsZV0sXG4gICAgICAgICAgcmVmOiBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHNsb3RSZWYuY3VycmVudC5pbmZvQmFyID0gZWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXVxuICAgICAgfSksIGFkU3RhdHVzICYmIGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInBpbm5lZFwiLFxuICAgICAgICBjc3M6IF9yZWYkNixcbiAgICAgICAgY2hpbGRyZW46IGFkU3RhdHVzXG4gICAgICB9KSwgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGpzeHMoRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtqc3gkMShcImRpdlwiLCB7XG4gICAgICAgICAgY3NzOiBleHBhbmRcbiAgICAgICAgfSksIHZvbHVtZUNvbnRyb2wsIGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgICAgICBjc3M6IGFkU3RhdHVzID8gaGlkZGVuIDogW2Z1bmN0aW9uQmFyU2xvdFN0eWxlXSxcbiAgICAgICAgICByZWY6IGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmZ1bmN0aW9uQmFyID0gZWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXVxuICAgICAgfSksIGZ1bGxzY3JlZW5CdXR0b25dXG4gICAgfSksIGpzeCQxKFNsb3RQcm92aWRlciwge1xuICAgICAgc2xvdFJlZjogc2xvdFJlZixcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pXVxuICB9KTtcbn07XG5cbmNvbnN0IGdldFBvaW50ZXJEYXRhID0gZXZlbnQgPT4ge1xuICB2YXIgX2V2ZW50JHRvdWNoZXMsIF9ldmVudCRjaGFuZ2VkVG91Y2hlcztcblxuICBjb25zdCB7XG4gICAgcGFnZVg6IHgsXG4gICAgcGFnZVk6IHlcbiAgfSA9ICgoX2V2ZW50JHRvdWNoZXMgPSBldmVudC50b3VjaGVzKSA9PT0gbnVsbCB8fCBfZXZlbnQkdG91Y2hlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V2ZW50JHRvdWNoZXNbMF0pIHx8ICgoX2V2ZW50JGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMpID09PSBudWxsIHx8IF9ldmVudCRjaGFuZ2VkVG91Y2hlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V2ZW50JGNoYW5nZWRUb3VjaGVzWzBdKSB8fCBldmVudDtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGxlZnRcbiAgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGxlZnRcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDUoKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuY29uc3Qgc3R5bGUkOCA9IHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICB0b3VjaEFjdGlvbjogJ25vbmUnLFxuICAnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJzogJ3RyYW5zcGFyZW50J1xufTtcbmNvbnN0IGRpc2FibGVkU3R5bGUgPSB7XG4gIHBvaW50ZXJFdmVudHM6ICdub25lJ1xufTtcbmNvbnN0IHJhaWxTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGZsZXg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnNHB4JyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBiYWNrZ3JvdW5kOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpJyxcbiAgJz4gZGl2Jzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzAnLFxuICAgIGxlZnQ6ICcwJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH1cbn07XG5jb25zdCBtYXJrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBoZWlnaHQ6IHJhaWxTdHlsZS5oZWlnaHQsXG4gIHdpZHRoOiAnNHB4JyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtNTAlKScsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZjk4MzUnXG59O1xuY29uc3QgdGh1bWJTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHRvcDogJzUwJScsXG4gIGhlaWdodDogJzE0cHgnLFxuICB3aWR0aDogJzE0cHgnLFxuICBib3JkZXJSYWRpdXM6ICcxMDAlJyxcbiAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gIGJveFNoYWRvdzogJzAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC41KScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKSdcbn07XG5cbmNvbnN0IGdldFNsaWRlclZhbHVlID0gKHtcbiAgeCxcbiAgbGVmdCxcbiAgd2lkdGhcbn0pID0+IE1hdGgubWF4KDAsIE1hdGgubWluKCh4IC0gbGVmdCkgLyB3aWR0aCwgMSkpO1xuXG5jb25zdCBkZWJvdW5jZWRQb2ludGVySGFuZGxlcnMgPSAoe1xuICBzdGF0ZSxcbiAgb25Nb3ZlLFxuICBvbkxlYXZlXG59KSA9PiB7XG4gIGNvbnN0IGVtaXQgPSAoKSA9PiB7XG4gICAgaWYgKCFzdGF0ZS5zY2hlZHVsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUudHlwZSA9PT0gJ2xlYXZlJykge1xuICAgICAgb25MZWF2ZSA9PT0gbnVsbCB8fCBvbkxlYXZlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkxlYXZlKHN0YXRlLmV2ZW50LCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uTW92ZShzdGF0ZS5ldmVudCwgc3RhdGUpO1xuICAgIH1cblxuICAgIHN0YXRlLnNjaGVkdWxlZCA9IGZhbHNlO1xuICB9O1xuXG4gIGNvbnN0IHNjaGVkdWxlID0gKCkgPT4ge1xuICAgIGlmIChzdGF0ZS5zY2hlZHVsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5zY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShlbWl0KTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG9uUG9pbnRlck1vdmU6IGV2ZW50ID0+IHtcbiAgICAgIHZhciBfZXZlbnQkdG91Y2hlcztcblxuICAgICAgY29uc3QgdHlwZSA9IGV2ZW50LmJ1dHRvbnMgPiAwIHx8ICgoX2V2ZW50JHRvdWNoZXMgPSBldmVudC50b3VjaGVzKSA9PT0gbnVsbCB8fCBfZXZlbnQkdG91Y2hlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V2ZW50JHRvdWNoZXMubGVuZ3RoKSA+IDAgPyAnY2hhbmdlJyA6ICdtb3ZlJztcbiAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGUsIHtcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIC4uLmdldFBvaW50ZXJEYXRhKGV2ZW50KVxuICAgICAgfSk7XG4gICAgICBzY2hlZHVsZSgpO1xuICAgIH0sXG4gICAgb25Qb2ludGVyTGVhdmU6IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSAnbGVhdmUnO1xuICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xuICAgICAgICBldmVudCxcbiAgICAgICAgdHlwZVxuICAgICAgfSk7XG4gICAgICBzY2hlZHVsZSgpO1xuICAgIH0sXG4gICAgZW1pdFxuICB9O1xufTtcblxuY29uc3QgZXZlbnRIYW5kbGVycyA9ICh7XG4gIG9uUG9pbnRlckRvd24sXG4gIG9uUG9pbnRlck1vdmUsXG4gIG9uUG9pbnRlckxlYXZlLFxuICBvblBvaW50ZXJVcFxufSkgPT4gKHtcbiAgb25Qb2ludGVyRG93bixcbiAgb25Qb2ludGVyTW92ZSxcbiAgb25Qb2ludGVyTGVhdmUsXG4gIG9uUG9pbnRlclVwLFxuICBvblRvdWNoU3RhcnQ6IG9uUG9pbnRlckRvd24sXG4gIG9uVG91Y2hNb3ZlOiBvblBvaW50ZXJNb3ZlLFxuICBvblRvdWNoRW5kOiBldmVudCA9PiB7XG4gICAgb25Qb2ludGVyTGVhdmUoZXZlbnQpO1xuICAgIG9uUG9pbnRlclVwKGV2ZW50KTtcbiAgfVxufSk7IC8vIFRPRE8gYWxpZ24gd2l0aCBtYXRlcmlhbCB1aSBtb3JlLCBtb3ZlIHNwZWNpYWwgaGFuZGxpbmcgb2YgcG9pbnRlciBldmVudHNcblxuXG52YXIgX3JlZiQ1ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFyd2o5YjZcIixcbiAgc3R5bGVzOiBcImJhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpXCJcbn0gOiB7XG4gIG5hbWU6IFwiMW52ZDdkZS1TaW1wbGVTbGlkZXJcIixcbiAgc3R5bGVzOiBcImJhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO2xhYmVsOlNpbXBsZVNsaWRlcjtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsTnBiWEJzWlZOc2FXUmxjaTVxYzNnaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQmFVeFpJaXdpWm1sc1pTSTZJbE5wYlhCc1pWTnNhV1JsY2k1cWMzZ2lMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lCbGMyeHBiblF0WkdsellXSnNaU0J1Ynkxd1lYSmhiUzF5WldGemMybG5iaUFxTDF4dUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ2FuTjRMV0V4TVhrdmJtOHRjM1JoZEdsakxXVnNaVzFsYm5RdGFXNTBaWEpoWTNScGIyNXpJQ292WEc0dktpQmxjMnhwYm5RdFpHbHpZV0pzWlNCcWMzZ3RZVEV4ZVM5amJHbGpheTFsZG1WdWRITXRhR0YyWlMxclpYa3RaWFpsYm5SeklDb3ZYRzR2S2lCQWFuTjRTVzF3YjNKMFUyOTFjbU5sSUVCbGJXOTBhVzl1TDNKbFlXTjBJQ292WEc1cGJYQnZjblFnZTNWelpWTjBZWFJsTENCMWMyVlNaV1o5SUdaeWIyMGdKM0psWVdOMEoxeHVhVzF3YjNKMElGQnliM0JVZVhCbGN5Qm1jbTl0SUNkd2NtOXdMWFI1Y0dWekoxeHVYRzVwYlhCdmNuUWdlMmRsZEZCdmFXNTBaWEpFWVhSaGZTQm1jbTl0SUNkMWRHbHNMM0J2YVc1MFpYSW5YRzVjYm1OdmJuTjBJSE4wZVd4bElEMGdlMXh1SUNCd2IzTnBkR2x2YmpvZ0ozSmxiR0YwYVhabEp5eGNiaUFnYUdWcFoyaDBPaUFuTVRBd0pTY3NYRzRnSUdScGMzQnNZWGs2SUNkbWJHVjRKeXhjYmlBZ1lXeHBaMjVKZEdWdGN6b2dKMk5sYm5SbGNpY3NYRzRnSUdOMWNuTnZjam9nSjNCdmFXNTBaWEluTEZ4dUlDQjFjMlZ5VTJWc1pXTjBPaUFuYm05dVpTY3NYRzRnSUhSdmRXTm9RV04wYVc5dU9pQW5ibTl1WlNjc1hHNGdJQ2N0ZDJWaWEybDBMWFJoY0Mxb2FXZG9iR2xuYUhRdFkyOXNiM0luT2lBbmRISmhibk53WVhKbGJuUW5MRnh1ZlZ4dVhHNWpiMjV6ZENCa2FYTmhZbXhsWkZOMGVXeGxJRDBnZTF4dUlDQndiMmx1ZEdWeVJYWmxiblJ6T2lBbmJtOXVaU2NzWEc1OVhHNWNibU52Ym5OMElISmhhV3hUZEhsc1pTQTlJSHRjYmlBZ2NHOXphWFJwYjI0NklDZHlaV3hoZEdsMlpTY3NYRzRnSUdac1pYZzZJQ2N4TURBbEp5eGNiaUFnYUdWcFoyaDBPaUFuTkhCNEp5eGNiaUFnYjNabGNtWnNiM2M2SUNkb2FXUmtaVzRuTEZ4dUlDQmlZV05yWjNKdmRXNWtPaUFuY21kaVlTZ3lOVFVzSURJMU5Td2dNalUxTENBd0xqSXBKeXhjYmlBZ0p6NGdaR2wySnpvZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUhSdmNEb2dKekFuTEZ4dUlDQWdJR3hsWm5RNklDY3dKeXhjYmlBZ0lDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQWdJR2hsYVdkb2REb2dKekV3TUNVbkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQnRZWEpyVTNSNWJHVWdQU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNCb1pXbG5hSFE2SUhKaGFXeFRkSGxzWlM1b1pXbG5hSFFzWEc0Z0lIZHBaSFJvT2lBbk5IQjRKeXhjYmlBZ2RISmhibk5tYjNKdE9pQW5kSEpoYm5Oc1lYUmxXQ2d0TlRBbEtTY3NYRzRnSUdKaFkydG5jbTkxYm1SRGIyeHZjam9nSnlObVpqazRNelVuTEZ4dWZWeHVYRzVqYjI1emRDQjBhSFZ0WWxOMGVXeGxJRDBnZTF4dUlDQndiM05wZEdsdmJqb2dKMkZpYzI5c2RYUmxKeXhjYmlBZ2RHOXdPaUFuTlRBbEp5eGNiaUFnYUdWcFoyaDBPaUFuTVRSd2VDY3NYRzRnSUhkcFpIUm9PaUFuTVRSd2VDY3NYRzRnSUdKdmNtUmxjbEpoWkdsMWN6b2dKekV3TUNVbkxGeHVJQ0JpWVdOclozSnZkVzVrUTI5c2IzSTZJQ2NqWm1abUp5eGNiaUFnWW05NFUyaGhaRzkzT2lBbk1DQXljSGdnTW5CNElEQWdjbWRpWVNnd0xDQXdMQ0F3TENBd0xqVXBKeXhjYmlBZ2RISmhibk5tYjNKdE9pQW5kSEpoYm5Oc1lYUmxLQzAxTUNVc0lDMDFNQ1VwSnl4Y2JuMWNibHh1WTI5dWMzUWdaMlYwVTJ4cFpHVnlWbUZzZFdVZ1BTQW9lM2dzSUd4bFpuUXNJSGRwWkhSb2ZTa2dQVDVjYmlBZ1RXRjBhQzV0WVhnb01Dd2dUV0YwYUM1dGFXNG9LSGdnTFNCc1pXWjBLU0F2SUhkcFpIUm9MQ0F4S1NsY2JseHVZMjl1YzNRZ1pHVmliM1Z1WTJWa1VHOXBiblJsY2toaGJtUnNaWEp6SUQwZ0tIdHpkR0YwWlN3Z2IyNU5iM1psTENCdmJreGxZWFpsZlNrZ1BUNGdlMXh1SUNCamIyNXpkQ0JsYldsMElEMGdLQ2tnUFQ0Z2UxeHVJQ0FnSUdsbUlDZ2hjM1JoZEdVdWMyTm9aV1IxYkdWa0tTQjdYRzRnSUNBZ0lDQnlaWFIxY201Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hOMFlYUmxMblI1Y0dVZ1BUMDlJQ2RzWldGMlpTY3BJSHRjYmlBZ0lDQWdJRzl1VEdWaGRtVS9MaWh6ZEdGMFpTNWxkbVZ1ZEN3Z2MzUmhkR1VwWEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHOXVUVzkyWlNoemRHRjBaUzVsZG1WdWRDd2djM1JoZEdVcFhHNGdJQ0FnZlZ4dUlDQWdJSE4wWVhSbExuTmphR1ZrZFd4bFpDQTlJR1poYkhObFhHNGdJSDFjYmlBZ1kyOXVjM1FnYzJOb1pXUjFiR1VnUFNBb0tTQTlQaUI3WEc0Z0lDQWdhV1lnS0hOMFlYUmxMbk5qYUdWa2RXeGxaQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVYRzRnSUNBZ2ZWeHVJQ0FnSUhOMFlYUmxMbk5qYUdWa2RXeGxaQ0E5SUhSeWRXVmNiaUFnSUNCeVpYRjFaWE4wUVc1cGJXRjBhVzl1Um5KaGJXVW9aVzFwZENsY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYjI1UWIybHVkR1Z5VFc5MlpUb2daWFpsYm5RZ1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2RIbHdaU0E5WEc0Z0lDQWdJQ0FnSUdWMlpXNTBMbUoxZEhSdmJuTWdQaUF3SUh4OElHVjJaVzUwTG5SdmRXTm9aWE0vTG14bGJtZDBhQ0ErSURBZ1B5QW5ZMmhoYm1kbEp5QTZJQ2R0YjNabEoxeHVJQ0FnSUNBZ1QySnFaV04wTG1GemMybG5iaWh6ZEdGMFpTd2dlMlYyWlc1MExDQjBlWEJsTENBdUxpNW5aWFJRYjJsdWRHVnlSR0YwWVNobGRtVnVkQ2w5S1Z4dUlDQWdJQ0FnYzJOb1pXUjFiR1VvS1Z4dUlDQWdJSDBzWEc0Z0lDQWdiMjVRYjJsdWRHVnlUR1ZoZG1VNklHVjJaVzUwSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUhSNWNHVWdQU0FuYkdWaGRtVW5YRzRnSUNBZ0lDQlBZbXBsWTNRdVlYTnphV2R1S0hOMFlYUmxMQ0I3WlhabGJuUXNJSFI1Y0dWOUtWeHVJQ0FnSUNBZ2MyTm9aV1IxYkdVb0tWeHVJQ0FnSUgwc1hHNGdJQ0FnWlcxcGRDeGNiaUFnZlZ4dWZWeHVYRzVqYjI1emRDQmxkbVZ1ZEVoaGJtUnNaWEp6SUQwZ0tIdGNiaUFnYjI1UWIybHVkR1Z5Ukc5M2JpeGNiaUFnYjI1UWIybHVkR1Z5VFc5MlpTeGNiaUFnYjI1UWIybHVkR1Z5VEdWaGRtVXNYRzRnSUc5dVVHOXBiblJsY2xWd0xGeHVmU2tnUFQ0Z0tIdGNiaUFnYjI1UWIybHVkR1Z5Ukc5M2JpeGNiaUFnYjI1UWIybHVkR1Z5VFc5MlpTeGNiaUFnYjI1UWIybHVkR1Z5VEdWaGRtVXNYRzRnSUc5dVVHOXBiblJsY2xWd0xGeHVJQ0J2YmxSdmRXTm9VM1JoY25RNklHOXVVRzlwYm5SbGNrUnZkMjRzWEc0Z0lHOXVWRzkxWTJoTmIzWmxPaUJ2YmxCdmFXNTBaWEpOYjNabExGeHVJQ0J2YmxSdmRXTm9SVzVrT2lCbGRtVnVkQ0E5UGlCN1hHNGdJQ0FnYjI1UWIybHVkR1Z5VEdWaGRtVW9aWFpsYm5RcFhHNGdJQ0FnYjI1UWIybHVkR1Z5VlhBb1pYWmxiblFwWEc0Z0lIMHNYRzU5S1Z4dVhHNHZMeUJVVDBSUElHRnNhV2R1SUhkcGRHZ2diV0YwWlhKcFlXd2dkV2tnYlc5eVpTd2diVzkyWlNCemNHVmphV0ZzSUdoaGJtUnNhVzVuSUc5bUlIQnZhVzUwWlhJZ1pYWmxiblJ6WEc1amIyNXpkQ0JUYVcxd2JHVlRiR2xrWlhJZ1BTQW9lMXh1SUNCdGFXNGdQU0F3TEZ4dUlDQnRZWGdnUFNBeE1EQXNYRzRnSUhaaGJIVmxMRnh1SUNCelpXTnZibVJoY25sVWNtRmphMVpoYkhWbExDQXZMeUJVVDBSUElHRWdZbVYwZEdWeUlHNWhiV1ZjYmlBZ2JXRnlhM01nUFNCYlhTeGNiaUFnWTJ4aGMzTk9ZVzFsSUQwZ0p5Y3NYRzRnSUdOc1lYTnpaWE1nUFNCN2ZTeGNiaUFnWkdsellXSnNaV1FzWEc0Z0lHOXVVRzlwYm5SbGNrMXZkbVVzWEc0Z0lHOXVVRzlwYm5SbGNreGxZWFpsTEZ4dUlDQnZia05vWVc1blpTeGNiaUFnYjI1RGFHRnVaMlZEYjIxdGFYUjBaV1FzWEc1OUtTQTlQaUI3WEc0Z0lHTnZibk4wSUhCdmFXNTBaWEpUZEdGMFpTQTlJSFZ6WlZKbFppaDdmU2xjYmlBZ1kyOXVjM1FnVzJadlkzVnpWbUZzZFdVc0lITmxkRVp2WTNWelZtRnNkV1ZkSUQwZ2RYTmxVM1JoZEdVb0xVbHVabWx1YVhSNUtWeHVJQ0JqYjI1emRDQjBhSFZ0WWxCdmMybDBhVzl1SUQxY2JpQWdJQ0FvS0dadlkzVnpWbUZzZFdVZ1BqMGdiV2x1SUQ4Z1ptOWpkWE5XWVd4MVpTQTZJSFpoYkhWbEtTQXRJRzFwYmlrZ0x5QW9iV0Y0SUMwZ2JXbHVLVnh1SUNCamIyNXpkQ0J6ZFdKVWNtRmphMUJ2YzJsMGFXOXVJRDBnS0hObFkyOXVaR0Z5ZVZSeVlXTnJWbUZzZFdVZ0xTQnRhVzRwSUM4Z0tHMWhlQ0F0SUcxcGJpbGNiaUFnWTI5dWMzUWdjRzlwYm5SbGNraGhibVJzWlhKeklEMGdaR1ZpYjNWdVkyVmtVRzlwYm5SbGNraGhibVJzWlhKektIdGNiaUFnSUNCemRHRjBaVG9nY0c5cGJuUmxjbE4wWVhSbExtTjFjbkpsYm5Rc1hHNGdJQ0FnYjI1TmIzWmxPaUFvWlhabGJuUXNJSHQwZVhCbExDQjRMQ0I1TENCM2FXUjBhQ3dnYkdWbWRIMHBJRDArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ2YVc1MFpYSldZV3gxWlNBOUlDaHRZWGdnTFNCdGFXNHBJQ29nWjJWMFUyeHBaR1Z5Vm1Gc2RXVW9lM2dzSUhkcFpIUm9MQ0JzWldaMGZTa2dLeUJ0YVc1Y2JpQWdJQ0FnSUc5dVVHOXBiblJsY2sxdmRtVS9MaWhsZG1WdWRDd2dlM1poYkhWbE9pQndiMmx1ZEdWeVZtRnNkV1VzSUhnc0lIbDlLVnh1SUNBZ0lDQWdhV1lnS0hSNWNHVWdQVDA5SUNkamFHRnVaMlVuS1NCN1hHNGdJQ0FnSUNBZ0lITmxkRVp2WTNWelZtRnNkV1VvY0c5cGJuUmxjbFpoYkhWbEtWeHVJQ0FnSUNBZ0lDQnZia05vWVc1blpUOHVLR1YyWlc1MExDQjdkbUZzZFdVNklIQnZhVzUwWlhKV1lXeDFaU3dnZUN3Z2VYMHBYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTeGNiaUFnSUNCdmJreGxZWFpsT2lBb0tTQTlQaUJ2YmxCdmFXNTBaWEpNWldGMlpUOHVLQ2tzWEc0Z0lIMHBYRzRnSUdOdmJuTjBJR2hoYm1Sc1pWQnZhVzUwWlhKVmNDQTlJR1YyWlc1MElEMCtJSHRjYmlBZ0lDQnBaaUFvWlhabGJuUXVjRzlwYm5SbGNrbGtLU0I3WEc0Z0lDQWdJQ0JsZG1WdWRDNWpkWEp5Wlc1MFZHRnlaMlYwTG5KbGJHVmhjMlZRYjJsdWRHVnlRMkZ3ZEhWeVpTaGxkbVZ1ZEM1d2IybHVkR1Z5U1dRcFhHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElIQnZhVzUwWlhKV1lXeDFaU0E5WEc0Z0lDQWdJQ0FvYldGNElDMGdiV2x1S1NBcUlHZGxkRk5zYVdSbGNsWmhiSFZsS0dkbGRGQnZhVzUwWlhKRVlYUmhLR1YyWlc1MEtTa2dLeUJ0YVc1Y2JpQWdJQ0J3YjJsdWRHVnlTR0Z1Wkd4bGNuTXVaVzFwZENncFhHNGdJQ0FnYjI1RGFHRnVaMlZEYjIxdGFYUjBaV1EvTGlobGRtVnVkQ3dnZTNaaGJIVmxPaUJ3YjJsdWRHVnlWbUZzZFdWOUtWeHVJQ0FnSUhObGRFWnZZM1Z6Vm1Gc2RXVW9LVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0JqYkdGemMwNWhiV1U5ZTJOc1lYTnpUbUZ0WlgxY2JpQWdJQ0FnSUdOemN6MTdXM04wZVd4bExDQmthWE5oWW14bFpDQW1KaUJrYVhOaFlteGxaRk4wZVd4bFhYMWNiaUFnSUNBZ0lHOXVRMnhwWTJzOWUyVjJaVzUwSUQwK0lHVjJaVzUwTG5OMGIzQlFjbTl3WVdkaGRHbHZiaWdwZlZ4dUlDQWdJQ0FnZXk0dUxtVjJaVzUwU0dGdVpHeGxjbk1vZTF4dUlDQWdJQ0FnSUNCdmJsQnZhVzUwWlhKRWIzZHVPaUJsZG1WdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1YyWlc1MExuUjVjR1VnUFQwOUlDZHdiMmx1ZEdWeVpHOTNiaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1YyWlc1MExtTjFjbkpsYm5SVVlYSm5aWFF1YzJWMFVHOXBiblJsY2tOaGNIUjFjbVVvWlhabGJuUXVjRzlwYm5SbGNrbGtLVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQndiMmx1ZEdWeVNHRnVaR3hsY25NdWIyNVFiMmx1ZEdWeVRXOTJaU2hsZG1WdWRDbGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnTGk0dWNHOXBiblJsY2toaGJtUnNaWEp6TEZ4dUlDQWdJQ0FnSUNCdmJsQnZhVzUwWlhKVmNEb2dhR0Z1Wkd4bFVHOXBiblJsY2xWd0xGeHVJQ0FnSUNBZ2ZTbDlYRzRnSUNBZ1BseHVJQ0FnSUNBZ1BHUnBkaUJqYkdGemMwNWhiV1U5ZTJOc1lYTnpaWE11Y21GcGJIMGdZM056UFh0eVlXbHNVM1I1YkdWOVBseHVJQ0FnSUNBZ0lDQjdjMlZqYjI1a1lYSjVWSEpoWTJ0V1lXeDFaU0FtSmlBb1hHNGdJQ0FnSUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNBZ0lDQWdZM056UFh0N1ltRmphMmR5YjNWdVpFTnZiRzl5T2lBbmNtZGlZU2d5TlRVc0lESTFOU3dnTWpVMUxDQXdMak1wSjMxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZEhsc1pUMTdlM1J5WVc1elptOXliVG9nWUhSeVlXNXpiR0YwWlZnb0pIdHpkV0pVY21GamExQnZjMmwwYVc5dUlDb2dNVEF3SUMwZ01UQXdmU1VwWUgxOVhHNGdJQ0FnSUNBZ0lDQWdMejVjYmlBZ0lDQWdJQ0FnS1gxY2JpQWdJQ0FnSUNBZ1BHUnBkbHh1SUNBZ0lDQWdJQ0FnSUdOemN6MTdlMkpoWTJ0bmNtOTFibVJEYjJ4dmNqb2dKeU5tWm1ZbmZYMWNiaUFnSUNBZ0lDQWdJQ0JqYkdGemMwNWhiV1U5ZTJOc1lYTnpaWE11ZEhKaFkydDlYRzRnSUNBZ0lDQWdJQ0FnYzNSNWJHVTllM3QwY21GdWMyWnZjbTA2SUdCMGNtRnVjMnhoZEdWWUtDUjdkR2gxYldKUWIzTnBkR2x2YmlBcUlERXdNQ0F0SURFd01IMGxLV0I5ZlZ4dUlDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ1BDOWthWFkrWEc0Z0lDQWdJQ0I3YldGeWEzTXViV0Z3S0hCdmMybDBhVzl1SUQwK0lDaGNiaUFnSUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNBZ0lHdGxlVDE3Y0c5emFYUnBiMjU5WEc0Z0lDQWdJQ0FnSUNBZ1kzTnpQWHR0WVhKclUzUjViR1Y5WEc0Z0lDQWdJQ0FnSUNBZ1kyeGhjM05PWVcxbFBYdGpiR0Z6YzJWekxtMWhjbXRsWkgxY2JpQWdJQ0FnSUNBZ0lDQnpkSGxzWlQxN2UyeGxablE2SUdBa2V5aHdiM05wZEdsdmJpQXZJRzFoZUNrZ0tpQXhNREI5SldCOWZWeHVJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdLU2w5WEc0Z0lDQWdJQ0I3YjI1RGFHRnVaMlVnSmlZZ0lXUnBjMkZpYkdWa0lEOGdLRnh1SUNBZ0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lDQWdZM056UFh0MGFIVnRZbE4wZVd4bGZWeHVJQ0FnSUNBZ0lDQWdJR05zWVhOelRtRnRaVDE3WTJ4aGMzTmxjeTUwYUhWdFluMWNiaUFnSUNBZ0lDQWdJQ0J6ZEhsc1pUMTdlMnhsWm5RNklHQmpZV3hqS0NSN2RHaDFiV0pRYjNOcGRHbHZiaUFxSURFd01IMGxLV0I5ZlZ4dUlDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0tTQTZJQ2hjYmlBZ0lDQWdJQ0FnUEdScGRpQXZQbHh1SUNBZ0lDQWdLWDFjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVnh1ZlZ4dVhHNVRhVzF3YkdWVGJHbGtaWEl1Y0hKdmNGUjVjR1Z6SUQwZ2UxeHVJQ0J0YVc0NklGQnliM0JVZVhCbGN5NXVkVzFpWlhJc1hHNGdJRzFoZURvZ1VISnZjRlI1Y0dWekxtNTFiV0psY2l4Y2JpQWdkbUZzZFdVNklGQnliM0JVZVhCbGN5NXVkVzFpWlhJc1hHNGdJSE5sWTI5dVpHRnllVlJ5WVdOclZtRnNkV1U2SUZCeWIzQlVlWEJsY3k1dWRXMWlaWElzWEc0Z0lHMWhjbXR6T2lCUWNtOXdWSGx3WlhNdVlYSnlZWGtzWEc0Z0lHTnNZWE56VG1GdFpUb2dVSEp2Y0ZSNWNHVnpMbk4wY21sdVp5eGNiaUFnWTJ4aGMzTmxjem9nVUhKdmNGUjVjR1Z6TG05aWFtVmpkQ3hjYmlBZ1pHbHpZV0pzWldRNklGQnliM0JVZVhCbGN5NWliMjlzTEZ4dUlDQnZibEJ2YVc1MFpYSk5iM1psT2lCUWNtOXdWSGx3WlhNdVpuVnVZeXhjYmlBZ2IyNVFiMmx1ZEdWeVRHVmhkbVU2SUZCeWIzQlVlWEJsY3k1bWRXNWpMRnh1SUNCdmJrTm9ZVzVuWlRvZ1VISnZjRlI1Y0dWekxtWjFibU1zWEc0Z0lHOXVRMmhoYm1kbFEyOXRiV2wwZEdWa09pQlFjbTl3Vkhsd1pYTXVablZ1WXl4Y2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdVMmx0Y0d4bFUyeHBaR1Z5WEc0aVhYMD0gKi9cIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDVcbn07XG5cbnZhciBfcmVmMiQxID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImRmamxsOFwiLFxuICBzdHlsZXM6IFwiYmFja2dyb3VuZC1jb2xvcjojZmZmXCJcbn0gOiB7XG4gIG5hbWU6IFwibWxmd21pLVNpbXBsZVNsaWRlclwiLFxuICBzdHlsZXM6IFwiYmFja2dyb3VuZC1jb2xvcjojZmZmO2xhYmVsOlNpbXBsZVNsaWRlcjtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsTnBiWEJzWlZOc2FXUmxjaTVxYzNnaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQmMweFZJaXdpWm1sc1pTSTZJbE5wYlhCc1pWTnNhV1JsY2k1cWMzZ2lMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lCbGMyeHBiblF0WkdsellXSnNaU0J1Ynkxd1lYSmhiUzF5WldGemMybG5iaUFxTDF4dUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ2FuTjRMV0V4TVhrdmJtOHRjM1JoZEdsakxXVnNaVzFsYm5RdGFXNTBaWEpoWTNScGIyNXpJQ292WEc0dktpQmxjMnhwYm5RdFpHbHpZV0pzWlNCcWMzZ3RZVEV4ZVM5amJHbGpheTFsZG1WdWRITXRhR0YyWlMxclpYa3RaWFpsYm5SeklDb3ZYRzR2S2lCQWFuTjRTVzF3YjNKMFUyOTFjbU5sSUVCbGJXOTBhVzl1TDNKbFlXTjBJQ292WEc1cGJYQnZjblFnZTNWelpWTjBZWFJsTENCMWMyVlNaV1o5SUdaeWIyMGdKM0psWVdOMEoxeHVhVzF3YjNKMElGQnliM0JVZVhCbGN5Qm1jbTl0SUNkd2NtOXdMWFI1Y0dWekoxeHVYRzVwYlhCdmNuUWdlMmRsZEZCdmFXNTBaWEpFWVhSaGZTQm1jbTl0SUNkMWRHbHNMM0J2YVc1MFpYSW5YRzVjYm1OdmJuTjBJSE4wZVd4bElEMGdlMXh1SUNCd2IzTnBkR2x2YmpvZ0ozSmxiR0YwYVhabEp5eGNiaUFnYUdWcFoyaDBPaUFuTVRBd0pTY3NYRzRnSUdScGMzQnNZWGs2SUNkbWJHVjRKeXhjYmlBZ1lXeHBaMjVKZEdWdGN6b2dKMk5sYm5SbGNpY3NYRzRnSUdOMWNuTnZjam9nSjNCdmFXNTBaWEluTEZ4dUlDQjFjMlZ5VTJWc1pXTjBPaUFuYm05dVpTY3NYRzRnSUhSdmRXTm9RV04wYVc5dU9pQW5ibTl1WlNjc1hHNGdJQ2N0ZDJWaWEybDBMWFJoY0Mxb2FXZG9iR2xuYUhRdFkyOXNiM0luT2lBbmRISmhibk53WVhKbGJuUW5MRnh1ZlZ4dVhHNWpiMjV6ZENCa2FYTmhZbXhsWkZOMGVXeGxJRDBnZTF4dUlDQndiMmx1ZEdWeVJYWmxiblJ6T2lBbmJtOXVaU2NzWEc1OVhHNWNibU52Ym5OMElISmhhV3hUZEhsc1pTQTlJSHRjYmlBZ2NHOXphWFJwYjI0NklDZHlaV3hoZEdsMlpTY3NYRzRnSUdac1pYZzZJQ2N4TURBbEp5eGNiaUFnYUdWcFoyaDBPaUFuTkhCNEp5eGNiaUFnYjNabGNtWnNiM2M2SUNkb2FXUmtaVzRuTEZ4dUlDQmlZV05yWjNKdmRXNWtPaUFuY21kaVlTZ3lOVFVzSURJMU5Td2dNalUxTENBd0xqSXBKeXhjYmlBZ0p6NGdaR2wySnpvZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUhSdmNEb2dKekFuTEZ4dUlDQWdJR3hsWm5RNklDY3dKeXhjYmlBZ0lDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQWdJR2hsYVdkb2REb2dKekV3TUNVbkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQnRZWEpyVTNSNWJHVWdQU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNCb1pXbG5hSFE2SUhKaGFXeFRkSGxzWlM1b1pXbG5hSFFzWEc0Z0lIZHBaSFJvT2lBbk5IQjRKeXhjYmlBZ2RISmhibk5tYjNKdE9pQW5kSEpoYm5Oc1lYUmxXQ2d0TlRBbEtTY3NYRzRnSUdKaFkydG5jbTkxYm1SRGIyeHZjam9nSnlObVpqazRNelVuTEZ4dWZWeHVYRzVqYjI1emRDQjBhSFZ0WWxOMGVXeGxJRDBnZTF4dUlDQndiM05wZEdsdmJqb2dKMkZpYzI5c2RYUmxKeXhjYmlBZ2RHOXdPaUFuTlRBbEp5eGNiaUFnYUdWcFoyaDBPaUFuTVRSd2VDY3NYRzRnSUhkcFpIUm9PaUFuTVRSd2VDY3NYRzRnSUdKdmNtUmxjbEpoWkdsMWN6b2dKekV3TUNVbkxGeHVJQ0JpWVdOclozSnZkVzVrUTI5c2IzSTZJQ2NqWm1abUp5eGNiaUFnWW05NFUyaGhaRzkzT2lBbk1DQXljSGdnTW5CNElEQWdjbWRpWVNnd0xDQXdMQ0F3TENBd0xqVXBKeXhjYmlBZ2RISmhibk5tYjNKdE9pQW5kSEpoYm5Oc1lYUmxLQzAxTUNVc0lDMDFNQ1VwSnl4Y2JuMWNibHh1WTI5dWMzUWdaMlYwVTJ4cFpHVnlWbUZzZFdVZ1BTQW9lM2dzSUd4bFpuUXNJSGRwWkhSb2ZTa2dQVDVjYmlBZ1RXRjBhQzV0WVhnb01Dd2dUV0YwYUM1dGFXNG9LSGdnTFNCc1pXWjBLU0F2SUhkcFpIUm9MQ0F4S1NsY2JseHVZMjl1YzNRZ1pHVmliM1Z1WTJWa1VHOXBiblJsY2toaGJtUnNaWEp6SUQwZ0tIdHpkR0YwWlN3Z2IyNU5iM1psTENCdmJreGxZWFpsZlNrZ1BUNGdlMXh1SUNCamIyNXpkQ0JsYldsMElEMGdLQ2tnUFQ0Z2UxeHVJQ0FnSUdsbUlDZ2hjM1JoZEdVdWMyTm9aV1IxYkdWa0tTQjdYRzRnSUNBZ0lDQnlaWFIxY201Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hOMFlYUmxMblI1Y0dVZ1BUMDlJQ2RzWldGMlpTY3BJSHRjYmlBZ0lDQWdJRzl1VEdWaGRtVS9MaWh6ZEdGMFpTNWxkbVZ1ZEN3Z2MzUmhkR1VwWEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHOXVUVzkyWlNoemRHRjBaUzVsZG1WdWRDd2djM1JoZEdVcFhHNGdJQ0FnZlZ4dUlDQWdJSE4wWVhSbExuTmphR1ZrZFd4bFpDQTlJR1poYkhObFhHNGdJSDFjYmlBZ1kyOXVjM1FnYzJOb1pXUjFiR1VnUFNBb0tTQTlQaUI3WEc0Z0lDQWdhV1lnS0hOMFlYUmxMbk5qYUdWa2RXeGxaQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVYRzRnSUNBZ2ZWeHVJQ0FnSUhOMFlYUmxMbk5qYUdWa2RXeGxaQ0E5SUhSeWRXVmNiaUFnSUNCeVpYRjFaWE4wUVc1cGJXRjBhVzl1Um5KaGJXVW9aVzFwZENsY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYjI1UWIybHVkR1Z5VFc5MlpUb2daWFpsYm5RZ1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2RIbHdaU0E5WEc0Z0lDQWdJQ0FnSUdWMlpXNTBMbUoxZEhSdmJuTWdQaUF3SUh4OElHVjJaVzUwTG5SdmRXTm9aWE0vTG14bGJtZDBhQ0ErSURBZ1B5QW5ZMmhoYm1kbEp5QTZJQ2R0YjNabEoxeHVJQ0FnSUNBZ1QySnFaV04wTG1GemMybG5iaWh6ZEdGMFpTd2dlMlYyWlc1MExDQjBlWEJsTENBdUxpNW5aWFJRYjJsdWRHVnlSR0YwWVNobGRtVnVkQ2w5S1Z4dUlDQWdJQ0FnYzJOb1pXUjFiR1VvS1Z4dUlDQWdJSDBzWEc0Z0lDQWdiMjVRYjJsdWRHVnlUR1ZoZG1VNklHVjJaVzUwSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUhSNWNHVWdQU0FuYkdWaGRtVW5YRzRnSUNBZ0lDQlBZbXBsWTNRdVlYTnphV2R1S0hOMFlYUmxMQ0I3WlhabGJuUXNJSFI1Y0dWOUtWeHVJQ0FnSUNBZ2MyTm9aV1IxYkdVb0tWeHVJQ0FnSUgwc1hHNGdJQ0FnWlcxcGRDeGNiaUFnZlZ4dWZWeHVYRzVqYjI1emRDQmxkbVZ1ZEVoaGJtUnNaWEp6SUQwZ0tIdGNiaUFnYjI1UWIybHVkR1Z5Ukc5M2JpeGNiaUFnYjI1UWIybHVkR1Z5VFc5MlpTeGNiaUFnYjI1UWIybHVkR1Z5VEdWaGRtVXNYRzRnSUc5dVVHOXBiblJsY2xWd0xGeHVmU2tnUFQ0Z0tIdGNiaUFnYjI1UWIybHVkR1Z5Ukc5M2JpeGNiaUFnYjI1UWIybHVkR1Z5VFc5MlpTeGNiaUFnYjI1UWIybHVkR1Z5VEdWaGRtVXNYRzRnSUc5dVVHOXBiblJsY2xWd0xGeHVJQ0J2YmxSdmRXTm9VM1JoY25RNklHOXVVRzlwYm5SbGNrUnZkMjRzWEc0Z0lHOXVWRzkxWTJoTmIzWmxPaUJ2YmxCdmFXNTBaWEpOYjNabExGeHVJQ0J2YmxSdmRXTm9SVzVrT2lCbGRtVnVkQ0E5UGlCN1hHNGdJQ0FnYjI1UWIybHVkR1Z5VEdWaGRtVW9aWFpsYm5RcFhHNGdJQ0FnYjI1UWIybHVkR1Z5VlhBb1pYWmxiblFwWEc0Z0lIMHNYRzU5S1Z4dVhHNHZMeUJVVDBSUElHRnNhV2R1SUhkcGRHZ2diV0YwWlhKcFlXd2dkV2tnYlc5eVpTd2diVzkyWlNCemNHVmphV0ZzSUdoaGJtUnNhVzVuSUc5bUlIQnZhVzUwWlhJZ1pYWmxiblJ6WEc1amIyNXpkQ0JUYVcxd2JHVlRiR2xrWlhJZ1BTQW9lMXh1SUNCdGFXNGdQU0F3TEZ4dUlDQnRZWGdnUFNBeE1EQXNYRzRnSUhaaGJIVmxMRnh1SUNCelpXTnZibVJoY25sVWNtRmphMVpoYkhWbExDQXZMeUJVVDBSUElHRWdZbVYwZEdWeUlHNWhiV1ZjYmlBZ2JXRnlhM01nUFNCYlhTeGNiaUFnWTJ4aGMzTk9ZVzFsSUQwZ0p5Y3NYRzRnSUdOc1lYTnpaWE1nUFNCN2ZTeGNiaUFnWkdsellXSnNaV1FzWEc0Z0lHOXVVRzlwYm5SbGNrMXZkbVVzWEc0Z0lHOXVVRzlwYm5SbGNreGxZWFpsTEZ4dUlDQnZia05vWVc1blpTeGNiaUFnYjI1RGFHRnVaMlZEYjIxdGFYUjBaV1FzWEc1OUtTQTlQaUI3WEc0Z0lHTnZibk4wSUhCdmFXNTBaWEpUZEdGMFpTQTlJSFZ6WlZKbFppaDdmU2xjYmlBZ1kyOXVjM1FnVzJadlkzVnpWbUZzZFdVc0lITmxkRVp2WTNWelZtRnNkV1ZkSUQwZ2RYTmxVM1JoZEdVb0xVbHVabWx1YVhSNUtWeHVJQ0JqYjI1emRDQjBhSFZ0WWxCdmMybDBhVzl1SUQxY2JpQWdJQ0FvS0dadlkzVnpWbUZzZFdVZ1BqMGdiV2x1SUQ4Z1ptOWpkWE5XWVd4MVpTQTZJSFpoYkhWbEtTQXRJRzFwYmlrZ0x5QW9iV0Y0SUMwZ2JXbHVLVnh1SUNCamIyNXpkQ0J6ZFdKVWNtRmphMUJ2YzJsMGFXOXVJRDBnS0hObFkyOXVaR0Z5ZVZSeVlXTnJWbUZzZFdVZ0xTQnRhVzRwSUM4Z0tHMWhlQ0F0SUcxcGJpbGNiaUFnWTI5dWMzUWdjRzlwYm5SbGNraGhibVJzWlhKeklEMGdaR1ZpYjNWdVkyVmtVRzlwYm5SbGNraGhibVJzWlhKektIdGNiaUFnSUNCemRHRjBaVG9nY0c5cGJuUmxjbE4wWVhSbExtTjFjbkpsYm5Rc1hHNGdJQ0FnYjI1TmIzWmxPaUFvWlhabGJuUXNJSHQwZVhCbExDQjRMQ0I1TENCM2FXUjBhQ3dnYkdWbWRIMHBJRDArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ2YVc1MFpYSldZV3gxWlNBOUlDaHRZWGdnTFNCdGFXNHBJQ29nWjJWMFUyeHBaR1Z5Vm1Gc2RXVW9lM2dzSUhkcFpIUm9MQ0JzWldaMGZTa2dLeUJ0YVc1Y2JpQWdJQ0FnSUc5dVVHOXBiblJsY2sxdmRtVS9MaWhsZG1WdWRDd2dlM1poYkhWbE9pQndiMmx1ZEdWeVZtRnNkV1VzSUhnc0lIbDlLVnh1SUNBZ0lDQWdhV1lnS0hSNWNHVWdQVDA5SUNkamFHRnVaMlVuS1NCN1hHNGdJQ0FnSUNBZ0lITmxkRVp2WTNWelZtRnNkV1VvY0c5cGJuUmxjbFpoYkhWbEtWeHVJQ0FnSUNBZ0lDQnZia05vWVc1blpUOHVLR1YyWlc1MExDQjdkbUZzZFdVNklIQnZhVzUwWlhKV1lXeDFaU3dnZUN3Z2VYMHBYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTeGNiaUFnSUNCdmJreGxZWFpsT2lBb0tTQTlQaUJ2YmxCdmFXNTBaWEpNWldGMlpUOHVLQ2tzWEc0Z0lIMHBYRzRnSUdOdmJuTjBJR2hoYm1Sc1pWQnZhVzUwWlhKVmNDQTlJR1YyWlc1MElEMCtJSHRjYmlBZ0lDQnBaaUFvWlhabGJuUXVjRzlwYm5SbGNrbGtLU0I3WEc0Z0lDQWdJQ0JsZG1WdWRDNWpkWEp5Wlc1MFZHRnlaMlYwTG5KbGJHVmhjMlZRYjJsdWRHVnlRMkZ3ZEhWeVpTaGxkbVZ1ZEM1d2IybHVkR1Z5U1dRcFhHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElIQnZhVzUwWlhKV1lXeDFaU0E5WEc0Z0lDQWdJQ0FvYldGNElDMGdiV2x1S1NBcUlHZGxkRk5zYVdSbGNsWmhiSFZsS0dkbGRGQnZhVzUwWlhKRVlYUmhLR1YyWlc1MEtTa2dLeUJ0YVc1Y2JpQWdJQ0J3YjJsdWRHVnlTR0Z1Wkd4bGNuTXVaVzFwZENncFhHNGdJQ0FnYjI1RGFHRnVaMlZEYjIxdGFYUjBaV1EvTGlobGRtVnVkQ3dnZTNaaGJIVmxPaUJ3YjJsdWRHVnlWbUZzZFdWOUtWeHVJQ0FnSUhObGRFWnZZM1Z6Vm1Gc2RXVW9LVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0JqYkdGemMwNWhiV1U5ZTJOc1lYTnpUbUZ0WlgxY2JpQWdJQ0FnSUdOemN6MTdXM04wZVd4bExDQmthWE5oWW14bFpDQW1KaUJrYVhOaFlteGxaRk4wZVd4bFhYMWNiaUFnSUNBZ0lHOXVRMnhwWTJzOWUyVjJaVzUwSUQwK0lHVjJaVzUwTG5OMGIzQlFjbTl3WVdkaGRHbHZiaWdwZlZ4dUlDQWdJQ0FnZXk0dUxtVjJaVzUwU0dGdVpHeGxjbk1vZTF4dUlDQWdJQ0FnSUNCdmJsQnZhVzUwWlhKRWIzZHVPaUJsZG1WdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1YyWlc1MExuUjVjR1VnUFQwOUlDZHdiMmx1ZEdWeVpHOTNiaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1YyWlc1MExtTjFjbkpsYm5SVVlYSm5aWFF1YzJWMFVHOXBiblJsY2tOaGNIUjFjbVVvWlhabGJuUXVjRzlwYm5SbGNrbGtLVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQndiMmx1ZEdWeVNHRnVaR3hsY25NdWIyNVFiMmx1ZEdWeVRXOTJaU2hsZG1WdWRDbGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnTGk0dWNHOXBiblJsY2toaGJtUnNaWEp6TEZ4dUlDQWdJQ0FnSUNCdmJsQnZhVzUwWlhKVmNEb2dhR0Z1Wkd4bFVHOXBiblJsY2xWd0xGeHVJQ0FnSUNBZ2ZTbDlYRzRnSUNBZ1BseHVJQ0FnSUNBZ1BHUnBkaUJqYkdGemMwNWhiV1U5ZTJOc1lYTnpaWE11Y21GcGJIMGdZM056UFh0eVlXbHNVM1I1YkdWOVBseHVJQ0FnSUNBZ0lDQjdjMlZqYjI1a1lYSjVWSEpoWTJ0V1lXeDFaU0FtSmlBb1hHNGdJQ0FnSUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNBZ0lDQWdZM056UFh0N1ltRmphMmR5YjNWdVpFTnZiRzl5T2lBbmNtZGlZU2d5TlRVc0lESTFOU3dnTWpVMUxDQXdMak1wSjMxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZEhsc1pUMTdlM1J5WVc1elptOXliVG9nWUhSeVlXNXpiR0YwWlZnb0pIdHpkV0pVY21GamExQnZjMmwwYVc5dUlDb2dNVEF3SUMwZ01UQXdmU1VwWUgxOVhHNGdJQ0FnSUNBZ0lDQWdMejVjYmlBZ0lDQWdJQ0FnS1gxY2JpQWdJQ0FnSUNBZ1BHUnBkbHh1SUNBZ0lDQWdJQ0FnSUdOemN6MTdlMkpoWTJ0bmNtOTFibVJEYjJ4dmNqb2dKeU5tWm1ZbmZYMWNiaUFnSUNBZ0lDQWdJQ0JqYkdGemMwNWhiV1U5ZTJOc1lYTnpaWE11ZEhKaFkydDlYRzRnSUNBZ0lDQWdJQ0FnYzNSNWJHVTllM3QwY21GdWMyWnZjbTA2SUdCMGNtRnVjMnhoZEdWWUtDUjdkR2gxYldKUWIzTnBkR2x2YmlBcUlERXdNQ0F0SURFd01IMGxLV0I5ZlZ4dUlDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ1BDOWthWFkrWEc0Z0lDQWdJQ0I3YldGeWEzTXViV0Z3S0hCdmMybDBhVzl1SUQwK0lDaGNiaUFnSUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNBZ0lHdGxlVDE3Y0c5emFYUnBiMjU5WEc0Z0lDQWdJQ0FnSUNBZ1kzTnpQWHR0WVhKclUzUjViR1Y5WEc0Z0lDQWdJQ0FnSUNBZ1kyeGhjM05PWVcxbFBYdGpiR0Z6YzJWekxtMWhjbXRsWkgxY2JpQWdJQ0FnSUNBZ0lDQnpkSGxzWlQxN2UyeGxablE2SUdBa2V5aHdiM05wZEdsdmJpQXZJRzFoZUNrZ0tpQXhNREI5SldCOWZWeHVJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdLU2w5WEc0Z0lDQWdJQ0I3YjI1RGFHRnVaMlVnSmlZZ0lXUnBjMkZpYkdWa0lEOGdLRnh1SUNBZ0lDQWdJQ0E4WkdsMlhHNGdJQ0FnSUNBZ0lDQWdZM056UFh0MGFIVnRZbE4wZVd4bGZWeHVJQ0FnSUNBZ0lDQWdJR05zWVhOelRtRnRaVDE3WTJ4aGMzTmxjeTUwYUhWdFluMWNiaUFnSUNBZ0lDQWdJQ0J6ZEhsc1pUMTdlMnhsWm5RNklHQmpZV3hqS0NSN2RHaDFiV0pRYjNOcGRHbHZiaUFxSURFd01IMGxLV0I5ZlZ4dUlDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0tTQTZJQ2hjYmlBZ0lDQWdJQ0FnUEdScGRpQXZQbHh1SUNBZ0lDQWdLWDFjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVnh1ZlZ4dVhHNVRhVzF3YkdWVGJHbGtaWEl1Y0hKdmNGUjVjR1Z6SUQwZ2UxeHVJQ0J0YVc0NklGQnliM0JVZVhCbGN5NXVkVzFpWlhJc1hHNGdJRzFoZURvZ1VISnZjRlI1Y0dWekxtNTFiV0psY2l4Y2JpQWdkbUZzZFdVNklGQnliM0JVZVhCbGN5NXVkVzFpWlhJc1hHNGdJSE5sWTI5dVpHRnllVlJ5WVdOclZtRnNkV1U2SUZCeWIzQlVlWEJsY3k1dWRXMWlaWElzWEc0Z0lHMWhjbXR6T2lCUWNtOXdWSGx3WlhNdVlYSnlZWGtzWEc0Z0lHTnNZWE56VG1GdFpUb2dVSEp2Y0ZSNWNHVnpMbk4wY21sdVp5eGNiaUFnWTJ4aGMzTmxjem9nVUhKdmNGUjVjR1Z6TG05aWFtVmpkQ3hjYmlBZ1pHbHpZV0pzWldRNklGQnliM0JVZVhCbGN5NWliMjlzTEZ4dUlDQnZibEJ2YVc1MFpYSk5iM1psT2lCUWNtOXdWSGx3WlhNdVpuVnVZeXhjYmlBZ2IyNVFiMmx1ZEdWeVRHVmhkbVU2SUZCeWIzQlVlWEJsY3k1bWRXNWpMRnh1SUNCdmJrTm9ZVzVuWlRvZ1VISnZjRlI1Y0dWekxtWjFibU1zWEc0Z0lHOXVRMmhoYm1kbFEyOXRiV2wwZEdWa09pQlFjbTl3Vkhsd1pYTXVablZ1WXl4Y2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdVMmx0Y0d4bFUyeHBaR1Z5WEc0aVhYMD0gKi9cIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDVcbn07XG5cbmNvbnN0IFNpbXBsZVNsaWRlciA9ICh7XG4gIG1pbiA9IDAsXG4gIG1heCA9IDEwMCxcbiAgdmFsdWUsXG4gIHNlY29uZGFyeVRyYWNrVmFsdWUsXG4gIC8vIFRPRE8gYSBiZXR0ZXIgbmFtZVxuICBtYXJrcyA9IFtdLFxuICBjbGFzc05hbWUgPSAnJyxcbiAgY2xhc3NlcyA9IHt9LFxuICBkaXNhYmxlZCxcbiAgb25Qb2ludGVyTW92ZSxcbiAgb25Qb2ludGVyTGVhdmUsXG4gIG9uQ2hhbmdlLFxuICBvbkNoYW5nZUNvbW1pdHRlZFxufSkgPT4ge1xuICBjb25zdCBwb2ludGVyU3RhdGUgPSB1c2VSZWYoe30pO1xuICBjb25zdCBbZm9jdXNWYWx1ZSwgc2V0Rm9jdXNWYWx1ZV0gPSB1c2VTdGF0ZSgtSW5maW5pdHkpO1xuICBjb25zdCB0aHVtYlBvc2l0aW9uID0gKChmb2N1c1ZhbHVlID49IG1pbiA/IGZvY3VzVmFsdWUgOiB2YWx1ZSkgLSBtaW4pIC8gKG1heCAtIG1pbik7XG4gIGNvbnN0IHN1YlRyYWNrUG9zaXRpb24gPSAoc2Vjb25kYXJ5VHJhY2tWYWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTtcbiAgY29uc3QgcG9pbnRlckhhbmRsZXJzID0gZGVib3VuY2VkUG9pbnRlckhhbmRsZXJzKHtcbiAgICBzdGF0ZTogcG9pbnRlclN0YXRlLmN1cnJlbnQsXG4gICAgb25Nb3ZlOiAoZXZlbnQsIHtcbiAgICAgIHR5cGUsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHdpZHRoLFxuICAgICAgbGVmdFxuICAgIH0pID0+IHtcbiAgICAgIGNvbnN0IHBvaW50ZXJWYWx1ZSA9IChtYXggLSBtaW4pICogZ2V0U2xpZGVyVmFsdWUoe1xuICAgICAgICB4LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgbGVmdFxuICAgICAgfSkgKyBtaW47XG4gICAgICBvblBvaW50ZXJNb3ZlID09PSBudWxsIHx8IG9uUG9pbnRlck1vdmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUG9pbnRlck1vdmUoZXZlbnQsIHtcbiAgICAgICAgdmFsdWU6IHBvaW50ZXJWYWx1ZSxcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlID09PSAnY2hhbmdlJykge1xuICAgICAgICBzZXRGb2N1c1ZhbHVlKHBvaW50ZXJWYWx1ZSk7XG4gICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShldmVudCwge1xuICAgICAgICAgIHZhbHVlOiBwb2ludGVyVmFsdWUsXG4gICAgICAgICAgeCxcbiAgICAgICAgICB5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25MZWF2ZTogKCkgPT4gb25Qb2ludGVyTGVhdmUgPT09IG51bGwgfHwgb25Qb2ludGVyTGVhdmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUG9pbnRlckxlYXZlKClcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC5wb2ludGVySWQpIHtcbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9pbnRlclZhbHVlID0gKG1heCAtIG1pbikgKiBnZXRTbGlkZXJWYWx1ZShnZXRQb2ludGVyRGF0YShldmVudCkpICsgbWluO1xuICAgIHBvaW50ZXJIYW5kbGVycy5lbWl0KCk7XG4gICAgb25DaGFuZ2VDb21taXR0ZWQgPT09IG51bGwgfHwgb25DaGFuZ2VDb21taXR0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlQ29tbWl0dGVkKGV2ZW50LCB7XG4gICAgICB2YWx1ZTogcG9pbnRlclZhbHVlXG4gICAgfSk7XG4gICAgc2V0Rm9jdXNWYWx1ZSgpO1xuICB9O1xuXG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBjc3M6IFtzdHlsZSQ4LCBkaXNhYmxlZCAmJiBkaXNhYmxlZFN0eWxlLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6U2ltcGxlU2xpZGVyO1wiLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbE5wYlhCc1pWTnNhV1JsY2k1cWMzZ2lYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJhVXROSWl3aVptbHNaU0k2SWxOcGJYQnNaVk5zYVdSbGNpNXFjM2dpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpQmxjMnhwYm5RdFpHbHpZV0pzWlNCdWJ5MXdZWEpoYlMxeVpXRnpjMmxuYmlBcUwxeHVMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdhbk40TFdFeE1Ya3ZibTh0YzNSaGRHbGpMV1ZzWlcxbGJuUXRhVzUwWlhKaFkzUnBiMjV6SUNvdlhHNHZLaUJsYzJ4cGJuUXRaR2x6WVdKc1pTQnFjM2d0WVRFeGVTOWpiR2xqYXkxbGRtVnVkSE10YUdGMlpTMXJaWGt0WlhabGJuUnpJQ292WEc0dktpQkFhbk40U1cxd2IzSjBVMjkxY21ObElFQmxiVzkwYVc5dUwzSmxZV04wSUNvdlhHNXBiWEJ2Y25RZ2UzVnpaVk4wWVhSbExDQjFjMlZTWldaOUlHWnliMjBnSjNKbFlXTjBKMXh1YVcxd2IzSjBJRkJ5YjNCVWVYQmxjeUJtY205dElDZHdjbTl3TFhSNWNHVnpKMXh1WEc1cGJYQnZjblFnZTJkbGRGQnZhVzUwWlhKRVlYUmhmU0JtY205dElDZDFkR2xzTDNCdmFXNTBaWEluWEc1Y2JtTnZibk4wSUhOMGVXeGxJRDBnZTF4dUlDQndiM05wZEdsdmJqb2dKM0psYkdGMGFYWmxKeXhjYmlBZ2FHVnBaMmgwT2lBbk1UQXdKU2NzWEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdZV3hwWjI1SmRHVnRjem9nSjJObGJuUmxjaWNzWEc0Z0lHTjFjbk52Y2pvZ0ozQnZhVzUwWlhJbkxGeHVJQ0IxYzJWeVUyVnNaV04wT2lBbmJtOXVaU2NzWEc0Z0lIUnZkV05vUVdOMGFXOXVPaUFuYm05dVpTY3NYRzRnSUNjdGQyVmlhMmwwTFhSaGNDMW9hV2RvYkdsbmFIUXRZMjlzYjNJbk9pQW5kSEpoYm5Od1lYSmxiblFuTEZ4dWZWeHVYRzVqYjI1emRDQmthWE5oWW14bFpGTjBlV3hsSUQwZ2UxeHVJQ0J3YjJsdWRHVnlSWFpsYm5Sek9pQW5ibTl1WlNjc1hHNTlYRzVjYm1OdmJuTjBJSEpoYVd4VGRIbHNaU0E5SUh0Y2JpQWdjRzl6YVhScGIyNDZJQ2R5Wld4aGRHbDJaU2NzWEc0Z0lHWnNaWGc2SUNjeE1EQWxKeXhjYmlBZ2FHVnBaMmgwT2lBbk5IQjRKeXhjYmlBZ2IzWmxjbVpzYjNjNklDZG9hV1JrWlc0bkxGeHVJQ0JpWVdOclozSnZkVzVrT2lBbmNtZGlZU2d5TlRVc0lESTFOU3dnTWpVMUxDQXdMaklwSnl4Y2JpQWdKejRnWkdsMkp6b2dlMXh1SUNBZ0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNBZ0lIUnZjRG9nSnpBbkxGeHVJQ0FnSUd4bFpuUTZJQ2N3Snl4Y2JpQWdJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0FnSUdobGFXZG9kRG9nSnpFd01DVW5MRnh1SUNCOUxGeHVmVnh1WEc1amIyNXpkQ0J0WVhKclUzUjViR1VnUFNCN1hHNGdJSEJ2YzJsMGFXOXVPaUFuWVdKemIyeDFkR1VuTEZ4dUlDQm9aV2xuYUhRNklISmhhV3hUZEhsc1pTNW9aV2xuYUhRc1hHNGdJSGRwWkhSb09pQW5OSEI0Snl4Y2JpQWdkSEpoYm5ObWIzSnRPaUFuZEhKaGJuTnNZWFJsV0NndE5UQWxLU2NzWEc0Z0lHSmhZMnRuY205MWJtUkRiMnh2Y2pvZ0p5Tm1aams0TXpVbkxGeHVmVnh1WEc1amIyNXpkQ0IwYUhWdFlsTjBlV3hsSUQwZ2UxeHVJQ0J3YjNOcGRHbHZiam9nSjJGaWMyOXNkWFJsSnl4Y2JpQWdkRzl3T2lBbk5UQWxKeXhjYmlBZ2FHVnBaMmgwT2lBbk1UUndlQ2NzWEc0Z0lIZHBaSFJvT2lBbk1UUndlQ2NzWEc0Z0lHSnZjbVJsY2xKaFpHbDFjem9nSnpFd01DVW5MRnh1SUNCaVlXTnJaM0p2ZFc1a1EyOXNiM0k2SUNjalptWm1KeXhjYmlBZ1ltOTRVMmhoWkc5M09pQW5NQ0F5Y0hnZ01uQjRJREFnY21kaVlTZ3dMQ0F3TENBd0xDQXdMalVwSnl4Y2JpQWdkSEpoYm5ObWIzSnRPaUFuZEhKaGJuTnNZWFJsS0MwMU1DVXNJQzAxTUNVcEp5eGNibjFjYmx4dVkyOXVjM1FnWjJWMFUyeHBaR1Z5Vm1Gc2RXVWdQU0FvZTNnc0lHeGxablFzSUhkcFpIUm9mU2tnUFQ1Y2JpQWdUV0YwYUM1dFlYZ29NQ3dnVFdGMGFDNXRhVzRvS0hnZ0xTQnNaV1owS1NBdklIZHBaSFJvTENBeEtTbGNibHh1WTI5dWMzUWdaR1ZpYjNWdVkyVmtVRzlwYm5SbGNraGhibVJzWlhKeklEMGdLSHR6ZEdGMFpTd2diMjVOYjNabExDQnZia3hsWVhabGZTa2dQVDRnZTF4dUlDQmpiMjV6ZENCbGJXbDBJRDBnS0NrZ1BUNGdlMXh1SUNBZ0lHbG1JQ2doYzNSaGRHVXVjMk5vWldSMWJHVmtLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNWNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tITjBZWFJsTG5SNWNHVWdQVDA5SUNkc1pXRjJaU2NwSUh0Y2JpQWdJQ0FnSUc5dVRHVmhkbVUvTGloemRHRjBaUzVsZG1WdWRDd2djM1JoZEdVcFhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJRzl1VFc5MlpTaHpkR0YwWlM1bGRtVnVkQ3dnYzNSaGRHVXBYRzRnSUNBZ2ZWeHVJQ0FnSUhOMFlYUmxMbk5qYUdWa2RXeGxaQ0E5SUdaaGJITmxYRzRnSUgxY2JpQWdZMjl1YzNRZ2MyTm9aV1IxYkdVZ1BTQW9LU0E5UGlCN1hHNGdJQ0FnYVdZZ0tITjBZWFJsTG5OamFHVmtkV3hsWkNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1WEc0Z0lDQWdmVnh1SUNBZ0lITjBZWFJsTG5OamFHVmtkV3hsWkNBOUlIUnlkV1ZjYmlBZ0lDQnlaWEYxWlhOMFFXNXBiV0YwYVc5dVJuSmhiV1VvWlcxcGRDbGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2IyNVFiMmx1ZEdWeVRXOTJaVG9nWlhabGJuUWdQVDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdkSGx3WlNBOVhHNGdJQ0FnSUNBZ0lHVjJaVzUwTG1KMWRIUnZibk1nUGlBd0lIeDhJR1YyWlc1MExuUnZkV05vWlhNL0xteGxibWQwYUNBK0lEQWdQeUFuWTJoaGJtZGxKeUE2SUNkdGIzWmxKMXh1SUNBZ0lDQWdUMkpxWldOMExtRnpjMmxuYmloemRHRjBaU3dnZTJWMlpXNTBMQ0IwZVhCbExDQXVMaTVuWlhSUWIybHVkR1Z5UkdGMFlTaGxkbVZ1ZENsOUtWeHVJQ0FnSUNBZ2MyTm9aV1IxYkdVb0tWeHVJQ0FnSUgwc1hHNGdJQ0FnYjI1UWIybHVkR1Z5VEdWaGRtVTZJR1YyWlc1MElEMCtJSHRjYmlBZ0lDQWdJR052Ym5OMElIUjVjR1VnUFNBbmJHVmhkbVVuWEc0Z0lDQWdJQ0JQWW1wbFkzUXVZWE56YVdkdUtITjBZWFJsTENCN1pYWmxiblFzSUhSNWNHVjlLVnh1SUNBZ0lDQWdjMk5vWldSMWJHVW9LVnh1SUNBZ0lIMHNYRzRnSUNBZ1pXMXBkQ3hjYmlBZ2ZWeHVmVnh1WEc1amIyNXpkQ0JsZG1WdWRFaGhibVJzWlhKeklEMGdLSHRjYmlBZ2IyNVFiMmx1ZEdWeVJHOTNiaXhjYmlBZ2IyNVFiMmx1ZEdWeVRXOTJaU3hjYmlBZ2IyNVFiMmx1ZEdWeVRHVmhkbVVzWEc0Z0lHOXVVRzlwYm5SbGNsVndMRnh1ZlNrZ1BUNGdLSHRjYmlBZ2IyNVFiMmx1ZEdWeVJHOTNiaXhjYmlBZ2IyNVFiMmx1ZEdWeVRXOTJaU3hjYmlBZ2IyNVFiMmx1ZEdWeVRHVmhkbVVzWEc0Z0lHOXVVRzlwYm5SbGNsVndMRnh1SUNCdmJsUnZkV05vVTNSaGNuUTZJRzl1VUc5cGJuUmxja1J2ZDI0c1hHNGdJRzl1Vkc5MVkyaE5iM1psT2lCdmJsQnZhVzUwWlhKTmIzWmxMRnh1SUNCdmJsUnZkV05vUlc1a09pQmxkbVZ1ZENBOVBpQjdYRzRnSUNBZ2IyNVFiMmx1ZEdWeVRHVmhkbVVvWlhabGJuUXBYRzRnSUNBZ2IyNVFiMmx1ZEdWeVZYQW9aWFpsYm5RcFhHNGdJSDBzWEc1OUtWeHVYRzR2THlCVVQwUlBJR0ZzYVdkdUlIZHBkR2dnYldGMFpYSnBZV3dnZFdrZ2JXOXlaU3dnYlc5MlpTQnpjR1ZqYVdGc0lHaGhibVJzYVc1bklHOW1JSEJ2YVc1MFpYSWdaWFpsYm5SelhHNWpiMjV6ZENCVGFXMXdiR1ZUYkdsa1pYSWdQU0FvZTF4dUlDQnRhVzRnUFNBd0xGeHVJQ0J0WVhnZ1BTQXhNREFzWEc0Z0lIWmhiSFZsTEZ4dUlDQnpaV052Ym1SaGNubFVjbUZqYTFaaGJIVmxMQ0F2THlCVVQwUlBJR0VnWW1WMGRHVnlJRzVoYldWY2JpQWdiV0Z5YTNNZ1BTQmJYU3hjYmlBZ1kyeGhjM05PWVcxbElEMGdKeWNzWEc0Z0lHTnNZWE56WlhNZ1BTQjdmU3hjYmlBZ1pHbHpZV0pzWldRc1hHNGdJRzl1VUc5cGJuUmxjazF2ZG1Vc1hHNGdJRzl1VUc5cGJuUmxja3hsWVhabExGeHVJQ0J2YmtOb1lXNW5aU3hjYmlBZ2IyNURhR0Z1WjJWRGIyMXRhWFIwWldRc1hHNTlLU0E5UGlCN1hHNGdJR052Ym5OMElIQnZhVzUwWlhKVGRHRjBaU0E5SUhWelpWSmxaaWg3ZlNsY2JpQWdZMjl1YzNRZ1cyWnZZM1Z6Vm1Gc2RXVXNJSE5sZEVadlkzVnpWbUZzZFdWZElEMGdkWE5sVTNSaGRHVW9MVWx1Wm1sdWFYUjVLVnh1SUNCamIyNXpkQ0IwYUhWdFlsQnZjMmwwYVc5dUlEMWNiaUFnSUNBb0tHWnZZM1Z6Vm1Gc2RXVWdQajBnYldsdUlEOGdabTlqZFhOV1lXeDFaU0E2SUhaaGJIVmxLU0F0SUcxcGJpa2dMeUFvYldGNElDMGdiV2x1S1Z4dUlDQmpiMjV6ZENCemRXSlVjbUZqYTFCdmMybDBhVzl1SUQwZ0tITmxZMjl1WkdGeWVWUnlZV05yVm1Gc2RXVWdMU0J0YVc0cElDOGdLRzFoZUNBdElHMXBiaWxjYmlBZ1kyOXVjM1FnY0c5cGJuUmxja2hoYm1Sc1pYSnpJRDBnWkdWaWIzVnVZMlZrVUc5cGJuUmxja2hoYm1Sc1pYSnpLSHRjYmlBZ0lDQnpkR0YwWlRvZ2NHOXBiblJsY2xOMFlYUmxMbU4xY25KbGJuUXNYRzRnSUNBZ2IyNU5iM1psT2lBb1pYWmxiblFzSUh0MGVYQmxMQ0I0TENCNUxDQjNhV1IwYUN3Z2JHVm1kSDBwSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUhCdmFXNTBaWEpXWVd4MVpTQTlJQ2h0WVhnZ0xTQnRhVzRwSUNvZ1oyVjBVMnhwWkdWeVZtRnNkV1VvZTNnc0lIZHBaSFJvTENCc1pXWjBmU2tnS3lCdGFXNWNiaUFnSUNBZ0lHOXVVRzlwYm5SbGNrMXZkbVUvTGlobGRtVnVkQ3dnZTNaaGJIVmxPaUJ3YjJsdWRHVnlWbUZzZFdVc0lIZ3NJSGw5S1Z4dUlDQWdJQ0FnYVdZZ0tIUjVjR1VnUFQwOUlDZGphR0Z1WjJVbktTQjdYRzRnSUNBZ0lDQWdJSE5sZEVadlkzVnpWbUZzZFdVb2NHOXBiblJsY2xaaGJIVmxLVnh1SUNBZ0lDQWdJQ0J2YmtOb1lXNW5aVDh1S0dWMlpXNTBMQ0I3ZG1Gc2RXVTZJSEJ2YVc1MFpYSldZV3gxWlN3Z2VDd2dlWDBwWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU3hjYmlBZ0lDQnZia3hsWVhabE9pQW9LU0E5UGlCdmJsQnZhVzUwWlhKTVpXRjJaVDh1S0Nrc1hHNGdJSDBwWEc0Z0lHTnZibk4wSUdoaGJtUnNaVkJ2YVc1MFpYSlZjQ0E5SUdWMlpXNTBJRDArSUh0Y2JpQWdJQ0JwWmlBb1pYWmxiblF1Y0c5cGJuUmxja2xrS1NCN1hHNGdJQ0FnSUNCbGRtVnVkQzVqZFhKeVpXNTBWR0Z5WjJWMExuSmxiR1ZoYzJWUWIybHVkR1Z5UTJGd2RIVnlaU2hsZG1WdWRDNXdiMmx1ZEdWeVNXUXBYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuTjBJSEJ2YVc1MFpYSldZV3gxWlNBOVhHNGdJQ0FnSUNBb2JXRjRJQzBnYldsdUtTQXFJR2RsZEZOc2FXUmxjbFpoYkhWbEtHZGxkRkJ2YVc1MFpYSkVZWFJoS0dWMlpXNTBLU2tnS3lCdGFXNWNiaUFnSUNCd2IybHVkR1Z5U0dGdVpHeGxjbk11WlcxcGRDZ3BYRzRnSUNBZ2IyNURhR0Z1WjJWRGIyMXRhWFIwWldRL0xpaGxkbVZ1ZEN3Z2UzWmhiSFZsT2lCd2IybHVkR1Z5Vm1Gc2RXVjlLVnh1SUNBZ0lITmxkRVp2WTNWelZtRnNkV1VvS1Z4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0E4WkdsMlhHNGdJQ0FnSUNCamJHRnpjMDVoYldVOWUyTnNZWE56VG1GdFpYMWNiaUFnSUNBZ0lHTnpjejE3VzNOMGVXeGxMQ0JrYVhOaFlteGxaQ0FtSmlCa2FYTmhZbXhsWkZOMGVXeGxYWDFjYmlBZ0lDQWdJRzl1UTJ4cFkyczllMlYyWlc1MElEMCtJR1YyWlc1MExuTjBiM0JRY205d1lXZGhkR2x2YmlncGZWeHVJQ0FnSUNBZ2V5NHVMbVYyWlc1MFNHRnVaR3hsY25Nb2UxeHVJQ0FnSUNBZ0lDQnZibEJ2YVc1MFpYSkViM2R1T2lCbGRtVnVkQ0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dWMlpXNTBMblI1Y0dVZ1BUMDlJQ2R3YjJsdWRHVnlaRzkzYmljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWMlpXNTBMbU4xY25KbGJuUlVZWEpuWlhRdWMyVjBVRzlwYm5SbGNrTmhjSFIxY21Vb1pYWmxiblF1Y0c5cGJuUmxja2xrS1Z4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0J3YjJsdWRHVnlTR0Z1Wkd4bGNuTXViMjVRYjJsdWRHVnlUVzkyWlNobGRtVnVkQ2xjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0xpNHVjRzlwYm5SbGNraGhibVJzWlhKekxGeHVJQ0FnSUNBZ0lDQnZibEJ2YVc1MFpYSlZjRG9nYUdGdVpHeGxVRzlwYm5SbGNsVndMRnh1SUNBZ0lDQWdmU2w5WEc0Z0lDQWdQbHh1SUNBZ0lDQWdQR1JwZGlCamJHRnpjMDVoYldVOWUyTnNZWE56WlhNdWNtRnBiSDBnWTNOelBYdHlZV2xzVTNSNWJHVjlQbHh1SUNBZ0lDQWdJQ0I3YzJWamIyNWtZWEo1VkhKaFkydFdZV3gxWlNBbUppQW9YRzRnSUNBZ0lDQWdJQ0FnUEdScGRseHVJQ0FnSUNBZ0lDQWdJQ0FnWTNOelBYdDdZbUZqYTJkeWIzVnVaRU52Ykc5eU9pQW5jbWRpWVNneU5UVXNJREkxTlN3Z01qVTFMQ0F3TGpNcEozMTlYRzRnSUNBZ0lDQWdJQ0FnSUNCemRIbHNaVDE3ZTNSeVlXNXpabTl5YlRvZ1lIUnlZVzV6YkdGMFpWZ29KSHR6ZFdKVWNtRmphMUJ2YzJsMGFXOXVJQ29nTVRBd0lDMGdNVEF3ZlNVcFlIMTlYRzRnSUNBZ0lDQWdJQ0FnTHo1Y2JpQWdJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNBZ0lHTnpjejE3ZTJKaFkydG5jbTkxYm1SRGIyeHZjam9nSnlObVptWW5mWDFjYmlBZ0lDQWdJQ0FnSUNCamJHRnpjMDVoYldVOWUyTnNZWE56WlhNdWRISmhZMnQ5WEc0Z0lDQWdJQ0FnSUNBZ2MzUjViR1U5ZTN0MGNtRnVjMlp2Y20wNklHQjBjbUZ1YzJ4aGRHVllLQ1I3ZEdoMWJXSlFiM05wZEdsdmJpQXFJREV3TUNBdElERXdNSDBsS1dCOWZWeHVJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdQQzlrYVhZK1hHNGdJQ0FnSUNCN2JXRnlhM011YldGd0tIQnZjMmwwYVc5dUlEMCtJQ2hjYmlBZ0lDQWdJQ0FnUEdScGRseHVJQ0FnSUNBZ0lDQWdJR3RsZVQxN2NHOXphWFJwYjI1OVhHNGdJQ0FnSUNBZ0lDQWdZM056UFh0dFlYSnJVM1I1YkdWOVhHNGdJQ0FnSUNBZ0lDQWdZMnhoYzNOT1lXMWxQWHRqYkdGemMyVnpMbTFoY210bFpIMWNiaUFnSUNBZ0lDQWdJQ0J6ZEhsc1pUMTdlMnhsWm5RNklHQWtleWh3YjNOcGRHbHZiaUF2SUcxaGVDa2dLaUF4TURCOUpXQjlmVnh1SUNBZ0lDQWdJQ0F2UGx4dUlDQWdJQ0FnS1NsOVhHNGdJQ0FnSUNCN2IyNURhR0Z1WjJVZ0ppWWdJV1JwYzJGaWJHVmtJRDhnS0Z4dUlDQWdJQ0FnSUNBOFpHbDJYRzRnSUNBZ0lDQWdJQ0FnWTNOelBYdDBhSFZ0WWxOMGVXeGxmVnh1SUNBZ0lDQWdJQ0FnSUdOc1lYTnpUbUZ0WlQxN1kyeGhjM05sY3k1MGFIVnRZbjFjYmlBZ0lDQWdJQ0FnSUNCemRIbHNaVDE3ZTJ4bFpuUTZJR0JqWVd4aktDUjdkR2gxYldKUWIzTnBkR2x2YmlBcUlERXdNSDBsS1dCOWZWeHVJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdLU0E2SUNoY2JpQWdJQ0FnSUNBZ1BHUnBkaUF2UGx4dUlDQWdJQ0FnS1gxY2JpQWdJQ0E4TDJScGRqNWNiaUFnS1Z4dWZWeHVYRzVUYVcxd2JHVlRiR2xrWlhJdWNISnZjRlI1Y0dWeklEMGdlMXh1SUNCdGFXNDZJRkJ5YjNCVWVYQmxjeTV1ZFcxaVpYSXNYRzRnSUcxaGVEb2dVSEp2Y0ZSNWNHVnpMbTUxYldKbGNpeGNiaUFnZG1Gc2RXVTZJRkJ5YjNCVWVYQmxjeTV1ZFcxaVpYSXNYRzRnSUhObFkyOXVaR0Z5ZVZSeVlXTnJWbUZzZFdVNklGQnliM0JVZVhCbGN5NXVkVzFpWlhJc1hHNGdJRzFoY210ek9pQlFjbTl3Vkhsd1pYTXVZWEp5WVhrc1hHNGdJR05zWVhOelRtRnRaVG9nVUhKdmNGUjVjR1Z6TG5OMGNtbHVaeXhjYmlBZ1kyeGhjM05sY3pvZ1VISnZjRlI1Y0dWekxtOWlhbVZqZEN4Y2JpQWdaR2x6WVdKc1pXUTZJRkJ5YjNCVWVYQmxjeTVpYjI5c0xGeHVJQ0J2YmxCdmFXNTBaWEpOYjNabE9pQlFjbTl3Vkhsd1pYTXVablZ1WXl4Y2JpQWdiMjVRYjJsdWRHVnlUR1ZoZG1VNklGQnliM0JVZVhCbGN5NW1kVzVqTEZ4dUlDQnZia05vWVc1blpUb2dVSEp2Y0ZSNWNHVnpMbVoxYm1Nc1hHNGdJRzl1UTJoaGJtZGxRMjl0YldsMGRHVmtPaUJRY205d1ZIbHdaWE11Wm5WdVl5eGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnVTJsdGNHeGxVMnhwWkdWeVhHNGlYWDA9ICovXCJdLFxuICAgIG9uQ2xpY2s6IGV2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLFxuICAgIC4uLmV2ZW50SGFuZGxlcnMoe1xuICAgICAgb25Qb2ludGVyRG93bjogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3BvaW50ZXJkb3duJykge1xuICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50ZXJIYW5kbGVycy5vblBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICAuLi5wb2ludGVySGFuZGxlcnMsXG4gICAgICBvblBvaW50ZXJVcDogaGFuZGxlUG9pbnRlclVwXG4gICAgfSksXG4gICAgY2hpbGRyZW46IFtqc3hzKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5yYWlsLFxuICAgICAgY3NzOiByYWlsU3R5bGUsXG4gICAgICBjaGlsZHJlbjogW3NlY29uZGFyeVRyYWNrVmFsdWUgJiYganN4JDEoXCJkaXZcIiwge1xuICAgICAgICBjc3M6IF9yZWYkNSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICB0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKCR7c3ViVHJhY2tQb3NpdGlvbiAqIDEwMCAtIDEwMH0lKWBcbiAgICAgICAgfVxuICAgICAgfSksIGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgICAgY3NzOiBfcmVmMiQxLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMudHJhY2ssXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgke3RodW1iUG9zaXRpb24gKiAxMDAgLSAxMDB9JSlgXG4gICAgICAgIH1cbiAgICAgIH0pXVxuICAgIH0pLCBtYXJrcy5tYXAocG9zaXRpb24gPT4ganN4JDEoXCJkaXZcIiwge1xuICAgICAgY3NzOiBtYXJrU3R5bGUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMubWFya2VkLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgbGVmdDogYCR7cG9zaXRpb24gLyBtYXggKiAxMDB9JWBcbiAgICAgIH1cbiAgICB9LCBwb3NpdGlvbikpLCBvbkNoYW5nZSAmJiAhZGlzYWJsZWQgPyBqc3gkMShcImRpdlwiLCB7XG4gICAgICBjc3M6IHRodW1iU3R5bGUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMudGh1bWIsXG4gICAgICBzdHlsZToge1xuICAgICAgICBsZWZ0OiBgY2FsYygke3RodW1iUG9zaXRpb24gKiAxMDB9JSlgXG4gICAgICB9XG4gICAgfSkgOiBqc3gkMShcImRpdlwiLCB7fSldXG4gIH0pO1xufTtcblxuU2ltcGxlU2xpZGVyLnByb3BUeXBlcyA9IHtcbiAgbWluOiBQcm9wVHlwZXMubnVtYmVyLFxuICBtYXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBzZWNvbmRhcnlUcmFja1ZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBtYXJrczogUHJvcFR5cGVzLmFycmF5LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25Qb2ludGVyTW92ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUG9pbnRlckxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZUNvbW1pdHRlZDogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmNvbnN0IGZvcm1hdHRlZFRpbWUgPSBzb3VyY2VUaW1lID0+IHtcbiAgY29uc3Qgc2lnbiA9IHNvdXJjZVRpbWUgPCAwID8gJy0nIDogJyc7XG4gIGNvbnN0IHRpbWUgPSBNYXRoLmFicyhzb3VyY2VUaW1lKTtcbiAgY29uc3Qgc2Vjb25kcyA9IE1hdGguZmxvb3IodGltZSAlIDYwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHRpbWUgLyA2MCAlIDYwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIGNvbnN0IGhvdXJzID0gdGltZSA+PSAzNjAwICYmIE1hdGguZmxvb3IodGltZSAvIDYwIC8gNjApLnRvU3RyaW5nKCk7XG4gIHJldHVybiBzaWduICsgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXS5maWx0ZXIoQm9vbGVhbikuam9pbignOicpO1xufTtcblxuLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuY29uc3Qgc2Vla2JhclN0eWxlID0ge1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMjRweCcsXG4gIGZvbnRTaXplOiAnNzUlJyxcbiAgbGV0dGVyU3BhY2luZzogJzFweCcsXG4gIGNvbG9yOiAnI2ZmZidcbn07XG5jb25zdCBzbGlkZXJTdHlsZSQxID0ge1xuICBmbGV4OiAxLFxuICBtYXJnaW46ICcwIDFlbScsXG4gICdAbWVkaWEgKGhvdmVyOiBob3ZlciksIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpJzoge1xuICAgICc+IGRpdjpsYXN0LW9mLXR5cGUnOiB7XG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC4ycyBlYXNlLW91dCdcbiAgICB9XG4gIH0sXG4gICcmOmhvdmVyID4gZGl2Omxhc3Qtb2YtdHlwZSc6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH1cbn07XG5cbmNvbnN0IGdldFNsaWRlclN0eWxlID0gY3NzID0+ICh7XG4gIHJhaWw6IGNzcyh7XG4gICAgaGVpZ2h0OiAnMC4zM2VtJ1xuICB9KSxcbiAgbWFya2VkOiBjc3Moe1xuICAgIGhlaWdodDogJzAuMzNlbSdcbiAgfSksXG4gIHRodW1iOiBjc3Moe1xuICAgIHdpZHRoOiAnMS4zM2VtJyxcbiAgICBoZWlnaHQ6ICcxLjMzZW0nXG4gIH0pXG59KTtcblxuY29uc3QgcmVkdWNlUG9pbnRlciA9IChzdGF0ZSwge1xuICB0eXBlLFxuICB2YWx1ZSxcbiAgeFxufSkgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdtb3ZlJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgICBob3ZlcjogdHJ1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHhcbiAgICAgIH07XG5cbiAgICBjYXNlICdjaGFuZ2UnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICAgIGZvY3VzZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlXG4gICAgICB9O1xuXG4gICAgY2FzZSAncmVsZWFzZSc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgICAgZm9jdXNlZDogZmFsc2UsXG4gICAgICAgIHZhbHVlXG4gICAgICB9O1xuXG4gICAgY2FzZSAnbGVhdmUnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICAgIGhvdmVyOiBmYWxzZVxuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07IC8vIFRPRE8gdXNlIGNsYXNzTmFtZSBpbnN0ZWFkIG9mIGNsYXNzZXMgP1xuXG5cbmNvbnN0IFNlZWtiYXIkMSA9ICh7XG4gIHN0eWxlLFxuICBjbGFzc2VzLFxuICBzdGFydFRpbWUgPSAwLFxuICBjdXJyZW50VGltZSxcbiAgYnVmZmVyVGltZSxcbiAgZHVyYXRpb24sXG4gIG1hcmtzLFxuICBwbGF5LFxuICBwYXVzZSxcbiAgc2VlayxcbiAgbGVmdFRleHQsXG4gIG9uU2Vla0V2ZW50LFxuICBjaGlsZHJlbixcbiAgLi4ucmVzdFxufSkgPT4ge1xuICB2YXIgX3JlZiRjdXJyZW50O1xuXG4gIGNvbnN0IFtwb2ludGVyU3RhdGUsIGRpc3BhdGNoUG9pbnRlcl0gPSB1c2VSZWR1Y2VyKHJlZHVjZVBvaW50ZXIsIHt9KTtcbiAgY29uc3QgcG9pbnRlckFjdGl2ZSA9IHBvaW50ZXJTdGF0ZS5ob3ZlciB8fCBwb2ludGVyU3RhdGUuZm9jdXNlZDsgLy8gdG8gcmVmbGVjdCBib3VuZGFyeSB3aGVuIGNvbnRhaW5lciByZXNpemVkXG5cbiAgY29uc3Qge1xuICAgIG9ic2VydmVcbiAgfSA9IHVzZURpbWVuc2lvbnMoKTtcbiAgY29uc3QgcmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IHJlY3QgPSAoX3JlZiRjdXJyZW50ID0gcmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9yZWYkY3VycmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3JlZiRjdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBoYW5kbGVycyA9IHNlZWsgJiYge1xuICAgIG9uUG9pbnRlck1vdmU6IChfLCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIHhcbiAgICB9KSA9PiBkaXNwYXRjaFBvaW50ZXIoe1xuICAgICAgdHlwZTogJ21vdmUnLFxuICAgICAgdmFsdWUsXG4gICAgICB4XG4gICAgfSksXG4gICAgb25Qb2ludGVyTGVhdmU6ICgpID0+IGRpc3BhdGNoUG9pbnRlcih7XG4gICAgICB0eXBlOiAnbGVhdmUnXG4gICAgfSksXG4gICAgb25DaGFuZ2U6IChfLCB7XG4gICAgICB2YWx1ZVxuICAgIH0pID0+IHtcbiAgICAgIHBhdXNlKCk7XG4gICAgICBkaXNwYXRjaFBvaW50ZXIoe1xuICAgICAgICB0eXBlOiAnY2hhbmdlJyxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb25DaGFuZ2VDb21taXR0ZWQ6IChfLCB7XG4gICAgICB2YWx1ZVxuICAgIH0pID0+IHtcbiAgICAgIG9uU2Vla0V2ZW50KCk7XG4gICAgICBkaXNwYXRjaFBvaW50ZXIoe1xuICAgICAgICB0eXBlOiAncmVsZWFzZScsXG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICAgIHNlZWsodmFsdWUpO1xuICAgICAgcGxheSgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZW5kVGltZSA9IHN0YXJ0VGltZSArIGR1cmF0aW9uO1xuICByZXR1cm4gZW5kVGltZSA+PSAwICYmIGVuZFRpbWUgPCAxZTYgJiYgZHVyYXRpb24gPiAwID8ganN4cyhcImRpdlwiLCB7XG4gICAgcmVmOiBlbGVtZW50ID0+IHtcbiAgICAgIG9ic2VydmUoZWxlbWVudCk7XG4gICAgICByZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgfSxcbiAgICBjbGFzc05hbWU6IFwia2tzLXBsYXllcl9fc2Vlay1iYXJcIixcbiAgICBjc3M6IFtzZWVrYmFyU3R5bGUsIHN0eWxlLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6U2Vla2JhcjtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxObFpXdGlZWEl1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQmRVZE5JaXdpWm1sc1pTSTZJbE5sWld0aVlYSXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpQkFhbk40U1cxd2IzSjBVMjkxY21ObElFQmxiVzkwYVc5dUwzSmxZV04wSUNvdlhHNXBiWEJ2Y25RZ2UzVnpaVkpsWkhWalpYSXNJSFZ6WlZKbFppd2dZMnh2Ym1WRmJHVnRaVzUwZlNCbWNtOXRJQ2R5WldGamRDZGNibWx0Y0c5eWRDQjdRMnhoYzNOT1lXMWxjMzBnWm5KdmJTQW5RR1Z0YjNScGIyNHZjbVZoWTNRblhHNXBiWEJ2Y25RZ1VISnZjRlI1Y0dWeklHWnliMjBnSjNCeWIzQXRkSGx3WlhNblhHNXBiWEJ2Y25RZ2RYTmxSR2x0Wlc1emFXOXVjeUJtY205dElDZHlaV0ZqZEMxamIyOXNMV1JwYldWdWMybHZibk1uWEc1Y2JtbHRjRzl5ZENCVGFXMXdiR1ZUYkdsa1pYSWdabkp2YlNBbmNHeGhlV1Z5VldrdlUybHRjR3hsVTJ4cFpHVnlKMXh1YVcxd2IzSjBJR1p2Y20xaGRIUmxaRlJwYldVZ1puSnZiU0FuZFhScGJDOW1iM0p0WVhSMFpXUlVhVzFsSjF4dWFXMXdiM0owSUh0R2IzSnRZWFIwWldSTlpYTnpZV2RsZlNCbWNtOXRJQ2RqYjI1MFpYaDBMMGt4T0c0blhHNWNibU52Ym5OMElITmxaV3RpWVhKVGRIbHNaU0E5SUh0Y2JpQWdjRzl6YVhScGIyNDZJQ2R5Wld4aGRHbDJaU2NzWEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdZV3hwWjI1SmRHVnRjem9nSjJObGJuUmxjaWNzWEc0Z0lIZHBaSFJvT2lBbk1UQXdKU2NzWEc0Z0lHaGxhV2RvZERvZ0p6STBjSGduTEZ4dUlDQm1iMjUwVTJsNlpUb2dKemMxSlNjc1hHNGdJR3hsZEhSbGNsTndZV05wYm1jNklDY3hjSGduTEZ4dUlDQmpiMnh2Y2pvZ0p5Tm1abVluTEZ4dWZWeHVYRzVqYjI1emRDQnpiR2xrWlhKVGRIbHNaU0E5SUh0Y2JpQWdabXhsZURvZ01TeGNiaUFnYldGeVoybHVPaUFuTUNBeFpXMG5MRnh1SUNBblFHMWxaR2xoSUNob2IzWmxjam9nYUc5MlpYSXBMQ0J6WTNKbFpXNGdZVzVrSUNndGJYTXRhR2xuYUMxamIyNTBjbUZ6ZERvZ1lXTjBhWFpsS1N3Z0tDMXRjeTFvYVdkb0xXTnZiblJ5WVhOME9pQnViMjVsS1NjNlhHNGdJQ0FnZTF4dUlDQWdJQ0FnSno0Z1pHbDJPbXhoYzNRdGIyWXRkSGx3WlNjNklIdGNiaUFnSUNBZ0lDQWdiM0JoWTJsMGVUb2dNQ3hjYmlBZ0lDQWdJQ0FnZEhKaGJuTnBkR2x2YmpvZ0oyOXdZV05wZEhrZ01DNHljeUJsWVhObExXOTFkQ2NzWEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJSDBzWEc0Z0lDY21PbWh2ZG1WeUlENGdaR2wyT214aGMzUXRiMll0ZEhsd1pTYzZJSHRjYmlBZ0lDQnZjR0ZqYVhSNU9pQXhMRnh1SUNCOUxGeHVmVnh1WEc1amIyNXpkQ0JuWlhSVGJHbGtaWEpUZEhsc1pTQTlJR056Y3lBOVBpQW9lMXh1SUNCeVlXbHNPaUJqYzNNb2UyaGxhV2RvZERvZ0p6QXVNek5sYlNkOUtTeGNiaUFnYldGeWEyVmtPaUJqYzNNb2UyaGxhV2RvZERvZ0p6QXVNek5sYlNkOUtTeGNiaUFnZEdoMWJXSTZJR056Y3loN2QybGtkR2c2SUNjeExqTXpaVzBuTENCb1pXbG5hSFE2SUNjeExqTXpaVzBuZlNrc1hHNTlLVnh1WEc1amIyNXpkQ0J5WldSMVkyVlFiMmx1ZEdWeUlEMGdLSE4wWVhSbExDQjdkSGx3WlN3Z2RtRnNkV1VzSUhoOUtTQTlQaUI3WEc0Z0lITjNhWFJqYUNBb2RIbHdaU2tnZTF4dUlDQWdJR05oYzJVZ0oyMXZkbVVuT2x4dUlDQWdJQ0FnY21WMGRYSnVJSHN1TGk1emRHRjBaU3dnYUc5MlpYSTZJSFJ5ZFdVc0lIWmhiSFZsTENCNGZWeHVJQ0FnSUdOaGMyVWdKMk5vWVc1blpTYzZYRzRnSUNBZ0lDQnlaWFIxY200Z2V5NHVMbk4wWVhSbExDQm1iMk4xYzJWa09pQjBjblZsTENCMllXeDFaWDFjYmlBZ0lDQmpZWE5sSUNkeVpXeGxZWE5sSnpwY2JpQWdJQ0FnSUhKbGRIVnliaUI3TGk0dWMzUmhkR1VzSUdadlkzVnpaV1E2SUdaaGJITmxMQ0IyWVd4MVpYMWNiaUFnSUNCallYTmxJQ2RzWldGMlpTYzZYRzRnSUNBZ0lDQnlaWFIxY200Z2V5NHVMbk4wWVhSbExDQm9iM1psY2pvZ1ptRnNjMlY5WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxkSFZ5YmlCemRHRjBaVnh1SUNCOVhHNTlYRzVjYmk4dklGUlBSRThnZFhObElHTnNZWE56VG1GdFpTQnBibk4wWldGa0lHOW1JR05zWVhOelpYTWdQMXh1WTI5dWMzUWdVMlZsYTJKaGNpQTlJQ2g3WEc0Z0lITjBlV3hsTEZ4dUlDQmpiR0Z6YzJWekxGeHVJQ0J6ZEdGeWRGUnBiV1VnUFNBd0xGeHVJQ0JqZFhKeVpXNTBWR2x0WlN4Y2JpQWdZblZtWm1WeVZHbHRaU3hjYmlBZ1pIVnlZWFJwYjI0c1hHNGdJRzFoY210ekxGeHVJQ0J3YkdGNUxGeHVJQ0J3WVhWelpTeGNiaUFnYzJWbGF5eGNiaUFnYkdWbWRGUmxlSFFzWEc0Z0lHOXVVMlZsYTBWMlpXNTBMRnh1SUNCamFHbHNaSEpsYml4Y2JpQWdMaTR1Y21WemRGeHVmU2tnUFQ0Z2UxeHVJQ0JqYjI1emRDQmJjRzlwYm5SbGNsTjBZWFJsTENCa2FYTndZWFJqYUZCdmFXNTBaWEpkSUQwZ2RYTmxVbVZrZFdObGNpaHlaV1IxWTJWUWIybHVkR1Z5TENCN2ZTbGNiaUFnWTI5dWMzUWdjRzlwYm5SbGNrRmpkR2wyWlNBOUlIQnZhVzUwWlhKVGRHRjBaUzVvYjNabGNpQjhmQ0J3YjJsdWRHVnlVM1JoZEdVdVptOWpkWE5sWkZ4dUlDQXZMeUIwYnlCeVpXWnNaV04wSUdKdmRXNWtZWEo1SUhkb1pXNGdZMjl1ZEdGcGJtVnlJSEpsYzJsNlpXUmNiaUFnWTI5dWMzUWdlMjlpYzJWeWRtVjlJRDBnZFhObFJHbHRaVzV6YVc5dWN5Z3BYRzRnSUdOdmJuTjBJSEpsWmlBOUlIVnpaVkpsWmlncFhHNGdJR052Ym5OMElISmxZM1FnUFNCeVpXWXVZM1Z5Y21WdWREOHVaMlYwUW05MWJtUnBibWREYkdsbGJuUlNaV04wS0NsY2JpQWdZMjl1YzNRZ2FHRnVaR3hsY25NZ1BTQnpaV1ZySUNZbUlIdGNiaUFnSUNCdmJsQnZhVzUwWlhKTmIzWmxPaUFvWHl3Z2UzWmhiSFZsTENCNGZTa2dQVDRnWkdsemNHRjBZMmhRYjJsdWRHVnlLSHQwZVhCbE9pQW5iVzkyWlNjc0lIWmhiSFZsTENCNGZTa3NYRzRnSUNBZ2IyNVFiMmx1ZEdWeVRHVmhkbVU2SUNncElEMCtJR1JwYzNCaGRHTm9VRzlwYm5SbGNpaDdkSGx3WlRvZ0oyeGxZWFpsSjMwcExGeHVJQ0FnSUc5dVEyaGhibWRsT2lBb1h5d2dlM1poYkhWbGZTa2dQVDRnZTF4dUlDQWdJQ0FnY0dGMWMyVW9LVnh1SUNBZ0lDQWdaR2x6Y0dGMFkyaFFiMmx1ZEdWeUtIdDBlWEJsT2lBblkyaGhibWRsSnl3Z2RtRnNkV1Y5S1Z4dUlDQWdJSDBzWEc0Z0lDQWdiMjVEYUdGdVoyVkRiMjF0YVhSMFpXUTZJQ2hmTENCN2RtRnNkV1Y5S1NBOVBpQjdYRzRnSUNBZ0lDQnZibE5sWld0RmRtVnVkQ2dwWEc0Z0lDQWdJQ0JrYVhOd1lYUmphRkJ2YVc1MFpYSW9lM1I1Y0dVNklDZHlaV3hsWVhObEp5d2dkbUZzZFdWOUtWeHVJQ0FnSUNBZ2MyVmxheWgyWVd4MVpTbGNiaUFnSUNBZ0lIQnNZWGtvS1Z4dUlDQWdJSDBzWEc0Z0lIMWNiaUFnWTI5dWMzUWdaVzVrVkdsdFpTQTlJSE4wWVhKMFZHbHRaU0FySUdSMWNtRjBhVzl1WEc1Y2JpQWdjbVYwZFhKdUlHVnVaRlJwYldVZ1BqMGdNQ0FtSmlCbGJtUlVhVzFsSUR3Z01XVTJJQ1ltSUdSMWNtRjBhVzl1SUQ0Z01DQS9JQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0J5WldZOWUyVnNaVzFsYm5RZ1BUNGdlMXh1SUNBZ0lDQWdJQ0J2WW5ObGNuWmxLR1ZzWlcxbGJuUXBYRzRnSUNBZ0lDQWdJSEpsWmk1amRYSnlaVzUwSUQwZ1pXeGxiV1Z1ZEZ4dUlDQWdJQ0FnZlgxY2JpQWdJQ0FnSUdOc1lYTnpUbUZ0WlQxY0ltdHJjeTF3YkdGNVpYSmZYM05sWldzdFltRnlYQ0pjYmlBZ0lDQWdJR056Y3oxN1czTmxaV3RpWVhKVGRIbHNaU3dnYzNSNWJHVmRmVnh1SUNBZ0lDQWdjM1I1YkdVOWUxeHVJQ0FnSUNBZ0lDQnlaV04wSUNZbUlIdGNiaUFnSUNBZ0lDQWdJQ0FuTFMxelpXVnJZbUZ5TFd4bFpuUW5PaUJnSkh0eVpXTjBMbXhsWm5SOWNIaGdMRnh1SUNBZ0lDQWdJQ0FnSUNjdExYTmxaV3RpWVhJdGNtbG5hSFFuT2lCZ0pIdHlaV04wTG5KcFoyaDBmWEI0WUN4Y2JpQWdJQ0FnSUNBZ0lDQW5MUzF3YjJsdWRHVnlMWGduT2lCZ0pIdHdiMmx1ZEdWeVUzUmhkR1V1ZUgxd2VHQXNYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdLSEJ2YVc1MFpYSkJZM1JwZG1VZ0ppWWdabTl5YldGMGRHVmtWR2x0WlNod2IybHVkR1Z5VTNSaGRHVXVkbUZzZFdVcEtTQjhmRnh1SUNBZ0lDQWdJQ0FvYkdWbWRGUmxlSFFnSmlZZ1BFWnZjbTFoZEhSbFpFMWxjM05oWjJVZ2V5NHVMbXhsWm5SVVpYaDBmU0F2UGlrZ2ZIeGNiaUFnSUNBZ0lDQWdabTl5YldGMGRHVmtWR2x0WlNoamRYSnlaVzUwVkdsdFpTbDlYRzRnSUNBZ0lDQThRMnhoYzNOT1lXMWxjejVjYmlBZ0lDQWdJQ0FnZXloN1kzTnpmU2tnUFQ0Z0tGeHVJQ0FnSUNBZ0lDQWdJRHhUYVcxd2JHVlRiR2xrWlhKY2JpQWdJQ0FnSUNBZ0lDQWdJR056Y3oxN2MyeHBaR1Z5VTNSNWJHVjlYRzRnSUNBZ0lDQWdJQ0FnSUNCamJHRnpjMlZ6UFh0N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhSeVlXTnJPaUJqYzNNb2UySmhZMnRuY205MWJtUkRiMnh2Y2pvZ0ozSmxaQ2Q5S1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTGk0dVoyVjBVMnhwWkdWeVUzUjViR1VvWTNOektTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0xpNHVZMnhoYzNObGN5eGNiaUFnSUNBZ0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JrYVhOaFlteGxaRDE3SVhObFpXdDlYRzRnSUNBZ0lDQWdJQ0FnSUNCelpXTnZibVJoY25sVWNtRmphMVpoYkhWbFBYdGlkV1ptWlhKVWFXMWxmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdiR2x1WldGeUlHTm9ZVzV1Wld3Z2FHRjJaU0IwYVcxbElDOGdaSFZ5WVhScGIyNGdaR2x6Y0d4aGVTd2dZblYwSUhObFpXdHBibWNnYVhNZ1pHbHpZV0pzWldRc0lHRnVaQ0J6YUc5MWJHUWdaR2x6Y0d4aGVTQm1hV3hzWldSY2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbFBYdHpaV1ZySUQ4Z1kzVnljbVZ1ZEZScGJXVWdPaUJsYm1SVWFXMWxmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2JXbHVQWHR6ZEdGeWRGUnBiV1Y5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnRZWGc5ZTJWdVpGUnBiV1Y5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnRZWEpyY3oxN2JXRnlhM045WEc0Z0lDQWdJQ0FnSUNBZ0lDQjdMaTR1YUdGdVpHeGxjbk45WEc0Z0lDQWdJQ0FnSUNBZ0lDQjdMaTR1Y21WemRIMWNiaUFnSUNBZ0lDQWdJQ0F2UGx4dUlDQWdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ1BDOURiR0Z6YzA1aGJXVnpQbHh1SUNBZ0lDQWdlM04wWVhKMFZHbHRaU0ErUFNBd0lDWW1JR1Z1WkZScGJXVWdQaUF3SUNZbUlHWnZjbTFoZEhSbFpGUnBiV1VvWlc1a1ZHbHRaU2w5WEc0Z0lDQWdJQ0I3WTJocGJHUnlaVzRnSmlaY2JpQWdJQ0FnSUNBZ1cxMWNiaUFnSUNBZ0lDQWdJQ0F1WTI5dVkyRjBLR05vYVd4a2NtVnVLVnh1SUNBZ0lDQWdJQ0FnSUM1dFlYQW9ZMmhwYkdRZ1BUNWNiaUFnSUNBZ0lDQWdJQ0FnSUdOc2IyNWxSV3hsYldWdWRDaGphR2xzWkN3Z2UzUnBiV1U2SUhCdmFXNTBaWEpCWTNScGRtVWdKaVlnY0c5cGJuUmxjbE4wWVhSbExuWmhiSFZsZlNsY2JpQWdJQ0FnSUNBZ0lDQXBmVnh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBJRG9nS0Z4dUlDQWdJRHhrYVhZZ0x6NWNiaUFnS1Z4dWZWeHVYRzVUWldWclltRnlMbkJ5YjNCVWVYQmxjeUE5SUh0Y2JpQWdjM1I1YkdVNklGQnliM0JVZVhCbGN5NXZZbXBsWTNRc1hHNGdJR05zWVhOelpYTTZJRkJ5YjNCVWVYQmxjeTV2WW1wbFkzUXNYRzRnSUhOMFlYSjBWR2x0WlRvZ1VISnZjRlI1Y0dWekxtNTFiV0psY2l4Y2JpQWdZM1Z5Y21WdWRGUnBiV1U2SUZCeWIzQlVlWEJsY3k1dWRXMWlaWElzWEc0Z0lHSjFabVpsY2xScGJXVTZJRkJ5YjNCVWVYQmxjeTV1ZFcxaVpYSXNYRzRnSUdSMWNtRjBhVzl1T2lCUWNtOXdWSGx3WlhNdWJuVnRZbVZ5TEZ4dUlDQnRZWEpyY3pvZ1VISnZjRlI1Y0dWekxtRnljbUY1TEZ4dUlDQndiR0Y1T2lCUWNtOXdWSGx3WlhNdVpuVnVZeXhjYmlBZ2NHRjFjMlU2SUZCeWIzQlVlWEJsY3k1bWRXNWpMRnh1SUNCelpXVnJPaUJRY205d1ZIbHdaWE11Wm5WdVl5eGNiaUFnWkdsellXSnNaV1E2SUZCeWIzQlVlWEJsY3k1aWIyOXNMRnh1SUNCc1pXWjBWR1Y0ZERvZ1VISnZjRlI1Y0dWekxuTm9ZWEJsS0h0Y2JpQWdJQ0JwWkRvZ1VISnZjRlI1Y0dWekxuTjBjbWx1Wnl4Y2JpQWdJQ0JrWldaaGRXeDBUV1Z6YzJGblpUb2dVSEp2Y0ZSNWNHVnpMbk4wY21sdVp5eGNiaUFnZlNrc1hHNGdJRzl1VTJWbGEwVjJaVzUwT2lCUWNtOXdWSGx3WlhNdVpuVnVZeXhjYmlBZ1kyaHBiR1J5Wlc0NklGQnliM0JVZVhCbGN5NXViMlJsTEZ4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQlRaV1ZyWW1GeVhHNGlYWDA9ICovXCJdLFxuICAgIHN0eWxlOiByZWN0ICYmIHtcbiAgICAgICctLXNlZWtiYXItbGVmdCc6IGAke3JlY3QubGVmdH1weGAsXG4gICAgICAnLS1zZWVrYmFyLXJpZ2h0JzogYCR7cmVjdC5yaWdodH1weGAsXG4gICAgICAnLS1wb2ludGVyLXgnOiBgJHtwb2ludGVyU3RhdGUueH1weGBcbiAgICB9LFxuICAgIGNoaWxkcmVuOiBbcG9pbnRlckFjdGl2ZSAmJiBmb3JtYXR0ZWRUaW1lKHBvaW50ZXJTdGF0ZS52YWx1ZSkgfHwgbGVmdFRleHQgJiYganN4JDEoRm9ybWF0dGVkTWVzc2FnZSwgeyAuLi5sZWZ0VGV4dFxuICAgIH0pIHx8IGZvcm1hdHRlZFRpbWUoY3VycmVudFRpbWUpLCBqc3gkMShDbGFzc05hbWVzLCB7XG4gICAgICBjaGlsZHJlbjogKHtcbiAgICAgICAgY3NzXG4gICAgICB9KSA9PiBqc3gkMShTaW1wbGVTbGlkZXIsIHtcbiAgICAgICAgY3NzOiBzbGlkZXJTdHlsZSQxLFxuICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgdHJhY2s6IGNzcyh7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uZ2V0U2xpZGVyU3R5bGUoY3NzKSxcbiAgICAgICAgICAuLi5jbGFzc2VzXG4gICAgICAgIH0sXG4gICAgICAgIGRpc2FibGVkOiAhc2VlayxcbiAgICAgICAgc2Vjb25kYXJ5VHJhY2tWYWx1ZTogYnVmZmVyVGltZSAvLyBsaW5lYXIgY2hhbm5lbCBoYXZlIHRpbWUgLyBkdXJhdGlvbiBkaXNwbGF5LCBidXQgc2Vla2luZyBpcyBkaXNhYmxlZCwgYW5kIHNob3VsZCBkaXNwbGF5IGZpbGxlZFxuICAgICAgICAsXG4gICAgICAgIHZhbHVlOiBzZWVrID8gY3VycmVudFRpbWUgOiBlbmRUaW1lLFxuICAgICAgICBtaW46IHN0YXJ0VGltZSxcbiAgICAgICAgbWF4OiBlbmRUaW1lLFxuICAgICAgICBtYXJrczogbWFya3MsXG4gICAgICAgIC4uLmhhbmRsZXJzLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9KVxuICAgIH0pLCBzdGFydFRpbWUgPj0gMCAmJiBlbmRUaW1lID4gMCAmJiBmb3JtYXR0ZWRUaW1lKGVuZFRpbWUpLCBjaGlsZHJlbiAmJiBbXS5jb25jYXQoY2hpbGRyZW4pLm1hcChjaGlsZCA9PiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICB0aW1lOiBwb2ludGVyQWN0aXZlICYmIHBvaW50ZXJTdGF0ZS52YWx1ZVxuICAgIH0pKV1cbiAgfSkgOiBqc3gkMShcImRpdlwiLCB7fSk7XG59O1xuXG5TZWVrYmFyJDEucHJvcFR5cGVzID0ge1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgc3RhcnRUaW1lOiBQcm9wVHlwZXMubnVtYmVyLFxuICBjdXJyZW50VGltZTogUHJvcFR5cGVzLm51bWJlcixcbiAgYnVmZmVyVGltZTogUHJvcFR5cGVzLm51bWJlcixcbiAgZHVyYXRpb246IFByb3BUeXBlcy5udW1iZXIsXG4gIG1hcmtzOiBQcm9wVHlwZXMuYXJyYXksXG4gIHBsYXk6IFByb3BUeXBlcy5mdW5jLFxuICBwYXVzZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHNlZWs6IFByb3BUeXBlcy5mdW5jLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGxlZnRUZXh0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlZmF1bHRNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBvblNlZWtFdmVudDogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZVxufTtcblxuLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuY29uc3Qgcm90YXRlSW5maW5pdGUgPSBrZXlmcmFtZXNgXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlICB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoMzYwZGVnKTsgXG4gIH1cbmA7XG5jb25zdCBzdHlsZSQ3ID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgdG9wOiAnNTAlJyxcbiAgbGVmdDogJzUwJScsXG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIGhlaWdodDogJzNlbScsXG4gIHdpZHRoOiAnM2VtJyxcbiAgYm9yZGVyOiAnMC4yNWVtIHNvbGlkICNmMjJlMDUnLFxuICBib3JkZXJSaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICBvcGFjaXR5OiAwLFxuICBhbmltYXRpb246IGAke3JvdGF0ZUluZmluaXRlfSAxLjJzIGxpbmVhciBpbmZpbml0ZWBcbn07XG5cbmNvbnN0IExvYWRpbmdTcGlubmVyID0gKCkgPT4ganN4JDEoXCJkaXZcIiwge1xuICBjbGFzc05hbWU6IFwia2tzLXBsYXllcl9fbG9hZGluZ1wiLFxuICBjc3M6IHN0eWxlJDdcbn0pO1xuXG4vKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5jb25zdCB1bFJlc2V0ID0ge1xuICBtYXJnaW5CbG9ja1N0YXJ0OiAwLFxuICBtYXJnaW5CbG9ja0VuZDogMCxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiAwXG59O1xuY29uc3QgbW9iaWxlU3R5bGUgPSB7XG4gIGhlYWQ6IHtcbiAgICBwb3NpdGlvbjogJ3N0aWNreScsXG4gICAgekluZGV4OiAnMScsXG4gICAgdG9wOiAnMCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICcxcmVtIDEuNXJlbScsXG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnaW5oZXJpdCcsXG4gICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgYnV0dG9uOiB7XG4gICAgICBtYXJnaW5SaWdodDogJzFyZW0nLFxuICAgICAgcGFkZGluZzogJzAnLFxuICAgICAgd2lkdGg6ICcxcmVtJyxcbiAgICAgIGhlaWdodDogJzFyZW0nLFxuICAgICAgYm9yZGVyOiAnbm9uZSdcbiAgICB9XG4gIH0sXG4gIG92ZXJsYXk6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICcwJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjYpJyxcbiAgICBvcGFjaXR5OiAnMCcsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTAwJSknLFxuICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDAuMnMgZWFzZSwgdHJhbnNmb3JtIDBzIGVhc2UgMC4ycycsXG4gICAgdWw6IHVsUmVzZXRcbiAgfSxcbiAgY29udGFpbmVyOiB7XG4gICAgZmxleDogJzAgMThyZW0nLFxuICAgIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDJyZW0pJyxcbiAgICBjb2xvcjogJyNjY2MnLFxuICAgIGJhY2tncm91bmQ6ICcjMzMzMzMzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICBvdmVyZmxvdzogJ2F1dG8nXG4gIH0sXG4gIG9wZW46IHtcbiAgICBvcGFjaXR5OiAnMScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsXG4gICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMHMnXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgcGFkZGluZzogJzEycHggMThweCdcbiAgfSxcbiAgZGlzbWlzczoge1xuICAgIGJhY2tncm91bmQ6IGBjZW50ZXIgLyAxcmVtIG5vLXJlcGVhdCB1cmwoJHtpY29uLmNsb3NlfSksIHRyYW5zcGFyZW50YFxuICB9LFxuICBiYWNrOiB7XG4gICAgYmFja2dyb3VuZDogYGNlbnRlciAvIDFyZW0gbm8tcmVwZWF0IHVybCgke2ljb24uYmFja30pLCB0cmFuc3BhcmVudGBcbiAgfSxcbiAgcm93OiB7XG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHBhZGRpbmc6ICcxcmVtIDEuNXJlbScsXG4gICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAnOjphZnRlcic6IHtcbiAgICAgIGNvbnRlbnQ6ICdcIiBcIicsXG4gICAgICBtYXJnaW5MZWZ0OiAnMXJlbScsXG4gICAgICB3aWR0aDogJzIwcHgnLFxuICAgICAgaGVpZ2h0OiAnMjBweCcsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgIGJhY2tncm91bmRTaXplOiAnY292ZXInXG4gICAgfVxuICB9LFxuICBzcGFjZToge1xuICAgIGZsZXg6ICcxJ1xuICB9LFxuICBoYXNPcHRpb25zOiB7XG4gICAgJzo6YWZ0ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtpY29uLmFycm93VG9wfSlgLFxuICAgICAgdHJhbnNmb3JtOiAncm90YXRlKDkwZGVnKSdcbiAgICB9XG4gIH0sXG4gIHNlbGVjdGVkOiB7XG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgJzo6YWZ0ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtpY29uLmNoZWNrfSlgXG4gICAgfVxuICB9XG59OyAvLyBUT0RPIHNvbWUgb2Ygc3R5bGVzIGFyZSBmb3Igb2xkZXIgdmVyc2lvbiBVSSBkZXNpZ24sIGNhbiBiZSBzaW1wbGlmaWVkXG5cbmNvbnN0IGRlc2t0b3BTdHlsZSA9IHtcbiAgb3ZlcmxheToge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGJvdHRvbTogJ2NhbGMoNWVtICsgdmFyKC0tYm90dG9tLXNwYWNpbmcsIDByZW0pKScsXG4gICAgcmlnaHQ6ICczcmVtJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyxcbiAgICB3aWR0aDogJzE1cmVtJyxcbiAgICBoZWlnaHQ6ICdjYWxjKDEwMCUgLSA4cmVtIC0gdmFyKC0tYm90dG9tLXNwYWNpbmcsIDByZW0pKScsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIG9wYWNpdHk6ICcwJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMDB2aCknLFxuICAgIHVsOiB1bFJlc2V0XG4gIH0sXG4gIGNvbnRhaW5lcjogeyAuLi5tb2JpbGVTdHlsZS5jb250YWluZXIsXG4gICAgbWF4SGVpZ2h0OiAnMTAwJScsXG4gICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KSdcbiAgfSxcbiAgaGVhZDogeyAuLi5tb2JpbGVTdHlsZS5oZWFkLFxuICAgIGJhY2tncm91bmQ6ICcjMDAwJ1xuICB9LFxuICByb3c6IHsgLi4ubW9iaWxlU3R5bGUucm93LFxuICAgICc6OmJlZm9yZSc6IHsgLi4ubW9iaWxlU3R5bGUucm93Wyc6OmFmdGVyJ10sXG4gICAgICBtYXJnaW5MZWZ0OiAnMCcsXG4gICAgICBtYXJnaW5SaWdodDogJzRweCdcbiAgICB9XG4gIH0sXG4gIGhhc09wdGlvbnM6IHtcbiAgICAnOjpiZWZvcmUnOiB7XG4gICAgICBkaXNwbGF5OiAnbm9uZSdcbiAgICB9LFxuICAgICc6OmFmdGVyJzoge1xuICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7aWNvbi5hcnJvd1RvcH0pYCxcbiAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSg5MGRlZyknXG4gICAgfVxuICB9LFxuICBzZWxlY3RlZDoge1xuICAgICc6OmJlZm9yZSc6IHtcbiAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2ljb24uY2hlY2t9KWBcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IE1lbnVJdGVtVGV4dCA9ICh7XG4gIHRleHQgPSAnJ1xufSkgPT4ganN4JDEoRm9ybWF0dGVkTWVzc2FnZSwge1xuICBpZDogdGV4dCxcbiAgZGVmYXVsdE1lc3NhZ2U6IGpzeCQxKEZvcm1hdHRlZE1lc3NhZ2UsIHtcbiAgICBpZDogYEtLUy5TRVRUSU5HLiR7dGV4dH1gLFxuICAgIGRlZmF1bHRNZXNzYWdlOiB0ZXh0XG4gIH0pXG59KTtcblxuTWVudUl0ZW1UZXh0LnByb3BUeXBlcyA9IHtcbiAgdGV4dDogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuY29uc3QgQ2xvc2VCdXR0b24gPSBwcm9wcyA9PiBqc3gkMShcImJ1dHRvblwiLCB7XG4gIHR5cGU6IFwiYnV0dG9uXCIsXG4gIFwiYXJpYS1sYWJlbFwiOiBcIkNsb3NlIFNldHRpbmdzXCIsXG4gIGNzczogbW9iaWxlU3R5bGUuZGlzbWlzcyxcbiAgLi4ucHJvcHNcbn0pO1xuXG5jb25zdCBCYWNrQnV0dG9uID0gcHJvcHMgPT4ganN4JDEoXCJidXR0b25cIiwge1xuICB0eXBlOiBcImJ1dHRvblwiLFxuICBcImFyaWEtbGFiZWxcIjogXCJCYWNrXCIsXG4gIGNzczogbW9iaWxlU3R5bGUuYmFjayxcbiAgLi4ucHJvcHNcbn0pO1xuXG5jb25zdCBTZXR0aW5ncyA9ICh7XG4gIG9wZW4sXG4gIHZhbHVlcyxcbiAgc2VjdGlvbnMsXG4gIHR5cGUsXG4gIHN0eWxlLFxuICBvbkNoYW5nZSxcbiAgb25PcGVuLFxuICBvbkNsb3NlXG59KSA9PiB7XG4gIGNvbnN0IGNvbW1vblN0eWxlID0gdHlwZSA9PT0gJ2Rlc2t0b3AnID8gZGVza3RvcFN0eWxlIDogbW9iaWxlU3R5bGU7XG4gIGNvbnN0IFtwYXRoLCBzZXRQYXRoXSA9IHVzZVN0YXRlKCcvJyk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICBzZXRQYXRoKCcvJyk7XG4gICAgfVxuICB9LCBbb3Blbl0pO1xuICBjb25zdCByZWYgPSB1c2VPbmNsaWNrT3V0c2lkZSgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBldmVudFR5cGVzOiBbJ2NsaWNrJ11cbiAgfSk7XG4gIGNvbnN0IGN1cnJlbnRTZWN0aW9uID0gc2VjdGlvbnMuZmluZChpdCA9PiBwYXRoID09PSBgLyR7aXQubmFtZX1gKTtcbiAgY29uc3QgbWVudSA9IHBhdGggPT09ICcvJyA/IHtcbiAgICB0aXRsZTogJ0tLUy5TRVRUSU5HJyxcbiAgICBpdGVtczogc2VjdGlvbnMubWFwKCh7XG4gICAgICBuYW1lLFxuICAgICAgdGl0bGUsXG4gICAgICBpdGVtc1xuICAgIH0pID0+IHtcbiAgICAgIHZhciBfaXRlbXMkZmluZDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluazogYC8ke25hbWV9YCxcbiAgICAgICAgbGFiZWw6IHRpdGxlLFxuICAgICAgICB2YWx1ZTogKChfaXRlbXMkZmluZCA9IGl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZXNbbmFtZV0pKSA9PT0gbnVsbCB8fCBfaXRlbXMkZmluZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2l0ZW1zJGZpbmQubGFiZWwpIHx8IHZhbHVlc1tuYW1lXVxuICAgICAgfTtcbiAgICB9KVxuICB9IDoge1xuICAgIHRpdGxlOiBjdXJyZW50U2VjdGlvbi50aXRsZSxcbiAgICBpdGVtczogY3VycmVudFNlY3Rpb24uaXRlbXMubWFwKCh7XG4gICAgICB2YWx1ZSxcbiAgICAgIGxhYmVsID0gdmFsdWVcbiAgICB9KSA9PiAoe1xuICAgICAgbGFiZWwsXG4gICAgICBjaGVja2VkOiB2YWx1ZXNbY3VycmVudFNlY3Rpb24ubmFtZV0gPT09IHZhbHVlLFxuICAgICAgZGF0YTogdmFsdWVcbiAgICB9KSksXG4gICAgcHJldmlvdXM6ICcvJ1xuICB9O1xuXG4gIGNvbnN0IG5hdmlnYXRlID0gZGVzdCA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gc2V0UGF0aChkZXN0KSk7XG5cbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIC8vIFRPRE8gcmVwbGFjZSB3aXRoIDxCYWNrZHJvcD5cbiAgICByb2xlOiBcIm1lbnVcIixcbiAgICB0YWJJbmRleDogXCIwXCIsXG4gICAgY3NzOiBbY29tbW9uU3R5bGUub3ZlcmxheSwgb3BlbiAmJiBtb2JpbGVTdHlsZS5vcGVuLCBzdHlsZSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOlNldHRpbmdzO1wiLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbE5sZEhScGJtZHpMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVRKUFRTSXNJbVpwYkdVaU9pSlRaWFIwYVc1bmN5NXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUlFQnFjM2hKYlhCdmNuUlRiM1Z5WTJVZ1FHVnRiM1JwYjI0dmNtVmhZM1FnS2k5Y2JtbHRjRzl5ZENCN2RYTmxVM1JoZEdVc0lIVnpaVVZtWm1WamRIMGdabkp2YlNBbmNtVmhZM1FuWEc1cGJYQnZjblFnVUhKdmNGUjVjR1Z6SUdaeWIyMGdKM0J5YjNBdGRIbHdaWE1uWEc1cGJYQnZjblFnZFhObFQyNWpiR2xqYTA5MWRITnBaR1VnWm5KdmJTQW5jbVZoWTNRdFkyOXZiQzF2Ym1Oc2FXTnJiM1YwYzJsa1pTZGNibHh1YVcxd2IzSjBJR2xqYjI0Z1puSnZiU0FuYzNSNWJHVXZhV052YmlkY2JtbHRjRzl5ZENCN1JtOXliV0YwZEdWa1RXVnpjMkZuWlgwZ1puSnZiU0FuWTI5dWRHVjRkQzlKTVRodUoxeHVhVzF3YjNKMElIdEdkVzVqZEdsdmJrSmhja1Y0ZEdWdWMybHZibjBnWm5KdmJTQW5MaTkxYVVWNGRHVnVjMmx2Ym5NblhHNXBiWEJ2Y25RZ2UwSjFkSFJ2Ym4wZ1puSnZiU0FuTGk5aWRYUjBiMjV6SjF4dVhHNWpiMjV6ZENCMWJGSmxjMlYwSUQwZ2UxeHVJQ0J0WVhKbmFXNUNiRzlqYTFOMFlYSjBPaUF3TEZ4dUlDQnRZWEpuYVc1Q2JHOWphMFZ1WkRvZ01DeGNiaUFnY0dGa1pHbHVaMGx1YkdsdVpWTjBZWEowT2lBd0xGeHVmVnh1WEc1amIyNXpkQ0J0YjJKcGJHVlRkSGxzWlNBOUlIdGNiaUFnYUdWaFpEb2dlMXh1SUNBZ0lIQnZjMmwwYVc5dU9pQW5jM1JwWTJ0NUp5eGNiaUFnSUNCNlNXNWtaWGc2SUNjeEp5eGNiaUFnSUNCMGIzQTZJQ2N3Snl4Y2JpQWdJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUNBZ1lXeHBaMjVKZEdWdGN6b2dKMk5sYm5SbGNpY3NYRzRnSUNBZ2NHRmtaR2x1WnpvZ0p6RnlaVzBnTVM0MWNtVnRKeXhjYmlBZ0lDQmpiMnh2Y2pvZ0ozZG9hWFJsSnl4Y2JpQWdJQ0JpWVdOclozSnZkVzVrUTI5c2IzSTZJQ2RwYm1obGNtbDBKeXhjYmlBZ0lDQm1iMjUwVTJsNlpUb2dKekUyY0hnbkxGeHVJQ0FnSUdadmJuUlhaV2xuYUhRNklDZGliMnhrSnl4Y2JpQWdJQ0JpZFhSMGIyNDZJSHRjYmlBZ0lDQWdJRzFoY21kcGJsSnBaMmgwT2lBbk1YSmxiU2NzWEc0Z0lDQWdJQ0J3WVdSa2FXNW5PaUFuTUNjc1hHNGdJQ0FnSUNCM2FXUjBhRG9nSnpGeVpXMG5MRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NWEpsYlNjc1hHNGdJQ0FnSUNCaWIzSmtaWEk2SUNkdWIyNWxKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J2ZG1WeWJHRjVPaUI3WEc0Z0lDQWdjRzl6YVhScGIyNDZJQ2RoWW5OdmJIVjBaU2NzWEc0Z0lDQWdkRzl3T2lBbk1DY3NYRzRnSUNBZ2QybGtkR2c2SUNjeE1EQWxKeXhjYmlBZ0lDQm9aV2xuYUhRNklDY3hNREFsSnl4Y2JpQWdJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUNBZ1lXeHBaMjVKZEdWdGN6b2dKMk5sYm5SbGNpY3NYRzRnSUNBZ2FuVnpkR2xtZVVOdmJuUmxiblE2SUNkalpXNTBaWEluTEZ4dUlDQWdJR0poWTJ0bmNtOTFibVJEYjJ4dmNqb2dKM0puWW1Fb01Dd2dNQ3dnTUN3Z01DNDJLU2NzWEc0Z0lDQWdiM0JoWTJsMGVUb2dKekFuTEZ4dUlDQWdJSFJ5WVc1elptOXliVG9nSjNSeVlXNXpiR0YwWlZrb0xURXdNQ1VwSnl4Y2JpQWdJQ0IwY21GdWMybDBhVzl1T2lBbmIzQmhZMmwwZVNBd0xqSnpJR1ZoYzJVc0lIUnlZVzV6Wm05eWJTQXdjeUJsWVhObElEQXVNbk1uTEZ4dUlDQWdJSFZzT2lCMWJGSmxjMlYwTEZ4dUlDQjlMRnh1SUNCamIyNTBZV2x1WlhJNklIdGNiaUFnSUNCbWJHVjRPaUFuTUNBeE9ISmxiU2NzWEc0Z0lDQWdiV0Y0U0dWcFoyaDBPaUFuWTJGc1l5Z3hNREFsSUMwZ01uSmxiU2tuTEZ4dUlDQWdJR052Ykc5eU9pQW5JMk5qWXljc1hHNGdJQ0FnWW1GamEyZHliM1Z1WkRvZ0p5TXpNek16TXpNbkxGeHVJQ0FnSUhkb2FYUmxVM0JoWTJVNklDZHViM2R5WVhBbkxGeHVJQ0FnSUdKdmNtUmxjbEpoWkdsMWN6b2dKelJ3ZUNjc1hHNGdJQ0FnZFhObGNsTmxiR1ZqZERvZ0oyNXZibVVuTEZ4dUlDQWdJRzkyWlhKbWJHOTNPaUFuWVhWMGJ5Y3NYRzRnSUgwc1hHNGdJRzl3Wlc0NklIdGNiaUFnSUNCdmNHRmphWFI1T2lBbk1TY3NYRzRnSUNBZ2RISmhibk5tYjNKdE9pQW5kSEpoYm5Oc1lYUmxXU2d3S1Njc1hHNGdJQ0FnZEhKaGJuTnBkR2x2YmpvZ0oyOXdZV05wZEhrZ01DNHljeUJsWVhObExDQjBjbUZ1YzJadmNtMGdNSE1uTEZ4dUlDQjlMRnh1SUNCMGFYUnNaVG9nZTF4dUlDQWdJSEJoWkdScGJtYzZJQ2N4TW5CNElERTRjSGduTEZ4dUlDQjlMRnh1SUNCa2FYTnRhWE56T2lCN1hHNGdJQ0FnWW1GamEyZHliM1Z1WkRvZ1lHTmxiblJsY2lBdklERnlaVzBnYm04dGNtVndaV0YwSUhWeWJDZ2tlMmxqYjI0dVkyeHZjMlY5S1N3Z2RISmhibk53WVhKbGJuUmdMRnh1SUNCOUxGeHVJQ0JpWVdOck9pQjdYRzRnSUNBZ1ltRmphMmR5YjNWdVpEb2dZR05sYm5SbGNpQXZJREZ5WlcwZ2JtOHRjbVZ3WldGMElIVnliQ2drZTJsamIyNHVZbUZqYTMwcExDQjBjbUZ1YzNCaGNtVnVkR0FzWEc0Z0lIMHNYRzRnSUhKdmR6b2dlMXh1SUNBZ0lHTjFjbk52Y2pvZ0ozQnZhVzUwWlhJbkxGeHVJQ0FnSUdScGMzQnNZWGs2SUNkbWJHVjRKeXhjYmlBZ0lDQndZV1JrYVc1bk9pQW5NWEpsYlNBeExqVnlaVzBuTEZ4dUlDQWdJR1p2Ym5SVGFYcGxPaUFuTVRad2VDY3NYRzRnSUNBZ0p6bzZZV1owWlhJbk9pQjdYRzRnSUNBZ0lDQmpiMjUwWlc1ME9pQW5YQ0lnWENJbkxGeHVJQ0FnSUNBZ2JXRnlaMmx1VEdWbWREb2dKekZ5WlcwbkxGeHVJQ0FnSUNBZ2QybGtkR2c2SUNjeU1IQjRKeXhjYmlBZ0lDQWdJR2hsYVdkb2REb2dKekl3Y0hnbkxGeHVJQ0FnSUNBZ1pHbHpjR3hoZVRvZ0oybHViR2x1WlMxaWJHOWpheWNzWEc0Z0lDQWdJQ0JqYjJ4dmNqb2dKM2RvYVhSbEp5eGNiaUFnSUNBZ0lHSmhZMnRuY205MWJtUlFiM05wZEdsdmJqb2dKMk5sYm5SbGNpY3NYRzRnSUNBZ0lDQmlZV05yWjNKdmRXNWtVMmw2WlRvZ0oyTnZkbVZ5Snl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1SUNCemNHRmpaVG9nZTF4dUlDQWdJR1pzWlhnNklDY3hKeXhjYmlBZ2ZTeGNiaUFnYUdGelQzQjBhVzl1Y3pvZ2UxeHVJQ0FnSUNjNk9tRm1kR1Z5SnpvZ2UxeHVJQ0FnSUNBZ1ltRmphMmR5YjNWdVpFbHRZV2RsT2lCZ2RYSnNLQ1I3YVdOdmJpNWhjbkp2ZDFSdmNIMHBZQ3hjYmlBZ0lDQWdJSFJ5WVc1elptOXliVG9nSjNKdmRHRjBaU2c1TUdSbFp5a25MRnh1SUNBZ0lIMHNYRzRnSUgwc1hHNGdJSE5sYkdWamRHVmtPaUI3WEc0Z0lDQWdZMjlzYjNJNklDZDNhR2wwWlNjc1hHNGdJQ0FnSnpvNllXWjBaWEluT2lCN1hHNGdJQ0FnSUNCaVlXTnJaM0p2ZFc1a1NXMWhaMlU2SUdCMWNtd29KSHRwWTI5dUxtTm9aV05yZlNsZ0xGeHVJQ0FnSUgwc1hHNGdJSDBzWEc1OVhHNWNiaTh2SUZSUFJFOGdjMjl0WlNCdlppQnpkSGxzWlhNZ1lYSmxJR1p2Y2lCdmJHUmxjaUIyWlhKemFXOXVJRlZKSUdSbGMybG5iaXdnWTJGdUlHSmxJSE5wYlhCc2FXWnBaV1JjYm1OdmJuTjBJR1JsYzJ0MGIzQlRkSGxzWlNBOUlIdGNiaUFnYjNabGNteGhlVG9nZTF4dUlDQWdJSEJ2YzJsMGFXOXVPaUFuWVdKemIyeDFkR1VuTEZ4dUlDQWdJR0p2ZEhSdmJUb2dKMk5oYkdNb05XVnRJQ3NnZG1GeUtDMHRZbTkwZEc5dExYTndZV05wYm1jc0lEQnlaVzBwS1Njc1hHNGdJQ0FnY21sbmFIUTZJQ2N6Y21WdEp5eGNiaUFnSUNCa2FYTndiR0Y1T2lBblpteGxlQ2NzWEc0Z0lDQWdZV3hwWjI1SmRHVnRjem9nSjJac1pYZ3RaVzVrSnl4Y2JpQWdJQ0IzYVdSMGFEb2dKekUxY21WdEp5eGNiaUFnSUNCb1pXbG5hSFE2SUNkallXeGpLREV3TUNVZ0xTQTRjbVZ0SUMwZ2RtRnlLQzB0WW05MGRHOXRMWE53WVdOcGJtY3NJREJ5WlcwcEtTY3NYRzRnSUNBZ2IzVjBiR2x1WlRvZ0oyNXZibVVuTEZ4dUlDQWdJRzl3WVdOcGRIazZJQ2N3Snl4Y2JpQWdJQ0IwY21GdWMyWnZjbTA2SUNkMGNtRnVjMnhoZEdWWktDMHhNREIyYUNrbkxGeHVJQ0FnSUhWc09pQjFiRkpsYzJWMExGeHVJQ0I5TEZ4dUlDQmpiMjUwWVdsdVpYSTZJSHRjYmlBZ0lDQXVMaTV0YjJKcGJHVlRkSGxzWlM1amIyNTBZV2x1WlhJc1hHNGdJQ0FnYldGNFNHVnBaMmgwT2lBbk1UQXdKU2NzWEc0Z0lDQWdZbUZqYTJkeWIzVnVaRG9nSjNKblltRW9NQ3dnTUN3Z01Dd2dNQzQzS1Njc1hHNGdJSDBzWEc0Z0lHaGxZV1E2SUh0Y2JpQWdJQ0F1TGk1dGIySnBiR1ZUZEhsc1pTNW9aV0ZrTEZ4dUlDQWdJR0poWTJ0bmNtOTFibVE2SUNjak1EQXdKeXhjYmlBZ2ZTeGNiaUFnY205M09pQjdYRzRnSUNBZ0xpNHViVzlpYVd4bFUzUjViR1V1Y205M0xGeHVJQ0FnSUNjNk9tSmxabTl5WlNjNklIdGNiaUFnSUNBZ0lDNHVMbTF2WW1sc1pWTjBlV3hsTG5KdmQxc25PanBoWm5SbGNpZGRMRnh1SUNBZ0lDQWdiV0Z5WjJsdVRHVm1kRG9nSnpBbkxGeHVJQ0FnSUNBZ2JXRnlaMmx1VW1sbmFIUTZJQ2MwY0hnbkxGeHVJQ0FnSUgwc1hHNGdJSDBzWEc0Z0lHaGhjMDl3ZEdsdmJuTTZJSHRjYmlBZ0lDQW5PanBpWldadmNtVW5PaUI3WEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYm05dVpTY3NYRzRnSUNBZ2ZTeGNiaUFnSUNBbk9qcGhablJsY2ljNklIdGNiaUFnSUNBZ0lHSmhZMnRuY205MWJtUkpiV0ZuWlRvZ1lIVnliQ2drZTJsamIyNHVZWEp5YjNkVWIzQjlLV0FzWEc0Z0lDQWdJQ0IwY21GdWMyWnZjbTA2SUNkeWIzUmhkR1VvT1RCa1pXY3BKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J6Wld4bFkzUmxaRG9nZTF4dUlDQWdJQ2M2T21KbFptOXlaU2M2SUh0Y2JpQWdJQ0FnSUdKaFkydG5jbTkxYm1SSmJXRm5aVG9nWUhWeWJDZ2tlMmxqYjI0dVkyaGxZMnQ5S1dBc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYm4xY2JseHVZMjl1YzNRZ1RXVnVkVWwwWlcxVVpYaDBJRDBnS0h0MFpYaDBJRDBnSnlkOUtTQTlQaUFvWEc0Z0lEeEdiM0p0WVhSMFpXUk5aWE56WVdkbFhHNGdJQ0FnYVdROWUzUmxlSFI5WEc0Z0lDQWdaR1ZtWVhWc2RFMWxjM05oWjJVOWUxeHVJQ0FnSUNBZ1BFWnZjbTFoZEhSbFpFMWxjM05oWjJVZ2FXUTllMkJMUzFNdVUwVlVWRWxPUnk0a2UzUmxlSFI5WUgwZ1pHVm1ZWFZzZEUxbGMzTmhaMlU5ZTNSbGVIUjlJQzgrWEc0Z0lDQWdmVnh1SUNBdlBseHVLVnh1WEc1TlpXNTFTWFJsYlZSbGVIUXVjSEp2Y0ZSNWNHVnpJRDBnZTF4dUlDQjBaWGgwT2lCUWNtOXdWSGx3WlhNdWMzUnlhVzVuTEZ4dWZWeHVYRzVqYjI1emRDQkRiRzl6WlVKMWRIUnZiaUE5SUhCeWIzQnpJRDArSUNoY2JpQWdQR0oxZEhSdmJseHVJQ0FnSUhSNWNHVTlYQ0ppZFhSMGIyNWNJbHh1SUNBZ0lHRnlhV0V0YkdGaVpXdzlYQ0pEYkc5elpTQlRaWFIwYVc1bmMxd2lYRzRnSUNBZ1kzTnpQWHR0YjJKcGJHVlRkSGxzWlM1a2FYTnRhWE56ZlZ4dUlDQWdJSHN1TGk1d2NtOXdjMzFjYmlBZ0x6NWNiaWxjYmx4dVkyOXVjM1FnUW1GamEwSjFkSFJ2YmlBOUlIQnliM0J6SUQwK0lDaGNiaUFnUEdKMWRIUnZiaUIwZVhCbFBWd2lZblYwZEc5dVhDSWdZWEpwWVMxc1lXSmxiRDFjSWtKaFkydGNJaUJqYzNNOWUyMXZZbWxzWlZOMGVXeGxMbUpoWTJ0OUlIc3VMaTV3Y205d2MzMGdMejVjYmlsY2JseHVZMjl1YzNRZ1UyVjBkR2x1WjNNZ1BTQW9lMXh1SUNCdmNHVnVMRnh1SUNCMllXeDFaWE1zWEc0Z0lITmxZM1JwYjI1ekxGeHVJQ0IwZVhCbExGeHVJQ0J6ZEhsc1pTeGNiaUFnYjI1RGFHRnVaMlVzWEc0Z0lHOXVUM0JsYml4Y2JpQWdiMjVEYkc5elpTeGNibjBwSUQwK0lIdGNiaUFnWTI5dWMzUWdZMjl0Ylc5dVUzUjViR1VnUFNCMGVYQmxJRDA5UFNBblpHVnphM1J2Y0NjZ1B5QmtaWE5yZEc5d1UzUjViR1VnT2lCdGIySnBiR1ZUZEhsc1pWeHVJQ0JqYjI1emRDQmJjR0YwYUN3Z2MyVjBVR0YwYUYwZ1BTQjFjMlZUZEdGMFpTZ25MeWNwWEc0Z0lIVnpaVVZtWm1WamRDZ29LU0E5UGlCN1hHNGdJQ0FnYVdZZ0tDRnZjR1Z1S1NCN1hHNGdJQ0FnSUNCelpYUlFZWFJvS0Njdkp5bGNiaUFnSUNCOVhHNGdJSDBzSUZ0dmNHVnVYU2xjYmx4dUlDQmpiMjV6ZENCeVpXWWdQU0IxYzJWUGJtTnNhV05yVDNWMGMybGtaU2hjYmlBZ0lDQW9LU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9iM0JsYmlrZ2UxeHVJQ0FnSUNBZ0lDQnZia05zYjNObEtDbGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUxGeHVJQ0FnSUh0bGRtVnVkRlI1Y0dWek9pQmJKMk5zYVdOckoxMTlYRzRnSUNsY2JpQWdZMjl1YzNRZ1kzVnljbVZ1ZEZObFkzUnBiMjRnUFNCelpXTjBhVzl1Y3k1bWFXNWtLR2wwSUQwK0lIQmhkR2dnUFQwOUlHQXZKSHRwZEM1dVlXMWxmV0FwWEc0Z0lHTnZibk4wSUcxbGJuVWdQVnh1SUNBZ0lIQmhkR2dnUFQwOUlDY3ZKMXh1SUNBZ0lDQWdQeUI3WEc0Z0lDQWdJQ0FnSUNBZ2RHbDBiR1U2SUNkTFMxTXVVMFZVVkVsT1J5Y3NYRzRnSUNBZ0lDQWdJQ0FnYVhSbGJYTTZJSE5sWTNScGIyNXpMbTFoY0Nnb2UyNWhiV1VzSUhScGRHeGxMQ0JwZEdWdGMzMHBJRDArSUNoN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzYVc1ck9pQmdMeVI3Ym1GdFpYMWdMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JHRmlaV3c2SUhScGRHeGxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnNkV1U2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR2wwWlcxekxtWnBibVFvYVhSbGJTQTlQaUJwZEdWdExuWmhiSFZsSUQwOVBTQjJZV3gxWlhOYmJtRnRaVjBwUHk1c1lXSmxiQ0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpYTmJibUZ0WlYwc1hHNGdJQ0FnSUNBZ0lDQWdmU2twTEZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBNklIdGNiaUFnSUNBZ0lDQWdJQ0IwYVhSc1pUb2dZM1Z5Y21WdWRGTmxZM1JwYjI0dWRHbDBiR1VzWEc0Z0lDQWdJQ0FnSUNBZ2FYUmxiWE02SUdOMWNuSmxiblJUWldOMGFXOXVMbWwwWlcxekxtMWhjQ2dvZTNaaGJIVmxMQ0JzWVdKbGJDQTlJSFpoYkhWbGZTa2dQVDRnS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hoWW1Wc0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJobFkydGxaRG9nZG1Gc2RXVnpXMk4xY25KbGJuUlRaV04wYVc5dUxtNWhiV1ZkSUQwOVBTQjJZV3gxWlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdFNklIWmhiSFZsTEZ4dUlDQWdJQ0FnSUNBZ0lIMHBLU3hjYmlBZ0lDQWdJQ0FnSUNCd2NtVjJhVzkxY3pvZ0p5OG5MRnh1SUNBZ0lDQWdJQ0I5WEc0Z0lHTnZibk4wSUc1aGRtbG5ZWFJsSUQwZ1pHVnpkQ0E5UGlCeVpYRjFaWE4wUVc1cGJXRjBhVzl1Um5KaGJXVW9LQ2tnUFQ0Z2MyVjBVR0YwYUNoa1pYTjBLU2xjYmx4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWWdMeThnVkU5RVR5QnlaWEJzWVdObElIZHBkR2dnUEVKaFkydGtjbTl3UGx4dUlDQWdJQ0FnY205c1pUMWNJbTFsYm5WY0lseHVJQ0FnSUNBZ2RHRmlTVzVrWlhnOVhDSXdYQ0pjYmlBZ0lDQWdJR056Y3oxN1cyTnZiVzF2YmxOMGVXeGxMbTkyWlhKc1lYa3NJRzl3Wlc0Z0ppWWdiVzlpYVd4bFUzUjViR1V1YjNCbGJpd2djM1I1YkdWZGZWeHVJQ0FnSUNBZ2IyNURiR2xqYXoxN1pYWmxiblFnUFQ0Z1pYWmxiblF1YzNSdmNGQnliM0JoWjJGMGFXOXVLQ2w5WEc0Z0lDQWdQbHh1SUNBZ0lDQWdQRVoxYm1OMGFXOXVRbUZ5UlhoMFpXNXphVzl1UGx4dUlDQWdJQ0FnSUNBOFFuVjBkRzl1WEc0Z0lDQWdJQ0FnSUNBZ2MzUmhjblJKWTI5dVBWd2ljMlYwZEdsdVoxd2lYRzRnSUNBZ0lDQWdJQ0FnZEdsMGJHVTlYQ0pMUzFNdVUwVlVWRWxPUjF3aVhHNGdJQ0FnSUNBZ0lDQWdaR2x6WVdKc1pXUTllM05sWTNScGIyNXpMbXhsYm1kMGFDQTlQVDBnTUgxY2JpQWdJQ0FnSUNBZ0lDQnZia05zYVdOclBYdHZiazl3Wlc1OVhHNGdJQ0FnSUNBZ0lDOCtYRzRnSUNBZ0lDQThMMFoxYm1OMGFXOXVRbUZ5UlhoMFpXNXphVzl1UGx4dUlDQWdJQ0FnUEhWc0lISnZiR1U5WENKdFpXNTFYQ0lnY21WbVBYdHlaV1o5SUdOemN6MTdZMjl0Ylc5dVUzUjViR1V1WTI5dWRHRnBibVZ5ZlQ1Y2JpQWdJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUyTnZiVzF2YmxOMGVXeGxMbWhsWVdSOVBseHVJQ0FnSUNBZ0lDQWdJSHR0Wlc1MUxuQnlaWFpwYjNWeklEOGdLRnh1SUNBZ0lDQWdJQ0FnSUNBZ1BFSmhZMnRDZFhSMGIyNGdiMjVEYkdsamF6MTdLQ2tnUFQ0Z2JtRjJhV2RoZEdVb0p5OG5LWDBnTHo1Y2JpQWdJQ0FnSUNBZ0lDQXBJRG9nS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdkSGx3WlNBaFBUMGdKMlJsYzJ0MGIzQW5JQ1ltSUR4RGJHOXpaVUoxZEhSdmJpQnZia05zYVdOclBYdHZia05zYjNObGZTQXZQbHh1SUNBZ0lDQWdJQ0FnSUNsOVhHNGdJQ0FnSUNBZ0lDQWdQRVp2Y20xaGRIUmxaRTFsYzNOaFoyVWdhV1E5ZTIxbGJuVXVkR2wwYkdWOUlDOCtYRzRnSUNBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUNBZ0lDQjdiV1Z1ZFM1cGRHVnRjeTV0WVhBb0tIdHNZV0psYkN3Z2JHbHVheXdnZG1Gc2RXVXNJR1JoZEdFc0lHTm9aV05yWldSOUtTQTlQaUFvWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElHcHplQzFoTVRGNUwyNXZMVzV2Ym1sdWRHVnlZV04wYVhabExXVnNaVzFsYm5RdGFXNTBaWEpoWTNScGIyNXpYRzRnSUNBZ0lDQWdJQ0FnUEd4cFhHNGdJQ0FnSUNBZ0lDQWdJQ0J5YjJ4bFBYdHNhVzVySUQ4Z0oyMWxiblZwZEdWdEp5QTZJQ2R0Wlc1MWFYUmxiWEpoWkdsdkozMWNiaUFnSUNBZ0lDQWdJQ0FnSUdGeWFXRXRZMmhsWTJ0bFpEMTdZMmhsWTJ0bFpIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdOemN6MTdXMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjF0YjI1VGRIbHNaUzV5YjNjc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUd4cGJtc2dKaVlnWTI5dGJXOXVVM1I1YkdVdWFHRnpUM0IwYVc5dWN5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1kyaGxZMnRsWkNBbUppQmpiMjF0YjI1VGRIbHNaUzV6Wld4bFkzUmxaQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lGMTlYRzRnSUNBZ0lDQWdJQ0FnSUNCclpYazllMnhoWW1Wc2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnYjI1RGJHbGphejE3S0NrZ1BUNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JHbHVhMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRDhnYm1GMmFXZGhkR1VvYkdsdWF5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJRzl1UTJoaGJtZGxLSHR1WVcxbE9pQmpkWEp5Wlc1MFUyVmpkR2x2Ymk1dVlXMWxMQ0IyWVd4MVpUb2daR0YwWVgwcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ1BseHVJQ0FnSUNBZ0lDQWdJQ0FnUEUxbGJuVkpkR1Z0VkdWNGRDQjBaWGgwUFh0c1lXSmxiSDBnTHo1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhZZ1kzTnpQWHR0YjJKcGJHVlRkSGxzWlM1emNHRmpaWDBnTHo1Y2JpQWdJQ0FnSUNBZ0lDQWdJSHQyWVd4MVpTQW1KaUE4VFdWdWRVbDBaVzFVWlhoMElIUmxlSFE5ZTNaaGJIVmxMblJ2VTNSeWFXNW5LQ2w5SUM4K2ZWeHVJQ0FnSUNBZ0lDQWdJRHd2YkdrK1hHNGdJQ0FnSUNBZ0lDa3BmVnh1SUNBZ0lDQWdQQzkxYkQ1Y2JpQWdJQ0E4TDJScGRqNWNiaUFnS1Z4dWZWeHVYRzVUWlhSMGFXNW5jeTV3Y205d1ZIbHdaWE1nUFNCN1hHNGdJRzl3Wlc0NklGQnliM0JVZVhCbGN5NWliMjlzTEZ4dUlDQjJZV3gxWlhNNklGQnliM0JVZVhCbGN5NXZZbXBsWTNRc1hHNGdJSE5sWTNScGIyNXpPaUJRY205d1ZIbHdaWE11WVhKeVlYa3NYRzRnSUhSNWNHVTZJRkJ5YjNCVWVYQmxjeTV6ZEhKcGJtY3NYRzRnSUhOMGVXeGxPaUJRY205d1ZIbHdaWE11WW05dmJDeGNiaUFnYjI1RGFHRnVaMlU2SUZCeWIzQlVlWEJsY3k1bWRXNWpMRnh1SUNCdmJrOXdaVzQ2SUZCeWIzQlVlWEJsY3k1bWRXNWpMRnh1SUNCdmJrTnNiM05sT2lCUWNtOXdWSGx3WlhNdVpuVnVZeXhjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1UyVjBkR2x1WjNOY2JpSmRmUT09ICovXCJdLFxuICAgIG9uQ2xpY2s6IGV2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLFxuICAgIGNoaWxkcmVuOiBbanN4JDEoRnVuY3Rpb25CYXJFeHRlbnNpb24sIHtcbiAgICAgIGNoaWxkcmVuOiBqc3gkMShCdXR0b24sIHtcbiAgICAgICAgc3RhcnRJY29uOiBcInNldHRpbmdcIixcbiAgICAgICAgdGl0bGU6IFwiS0tTLlNFVFRJTkdcIixcbiAgICAgICAgZGlzYWJsZWQ6IHNlY3Rpb25zLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgb25DbGljazogb25PcGVuXG4gICAgICB9KVxuICAgIH0pLCBqc3hzKFwidWxcIiwge1xuICAgICAgcm9sZTogXCJtZW51XCIsXG4gICAgICByZWY6IHJlZixcbiAgICAgIGNzczogY29tbW9uU3R5bGUuY29udGFpbmVyLFxuICAgICAgY2hpbGRyZW46IFtqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY3NzOiBjb21tb25TdHlsZS5oZWFkLFxuICAgICAgICBjaGlsZHJlbjogW21lbnUucHJldmlvdXMgPyBqc3gkMShCYWNrQnV0dG9uLCB7XG4gICAgICAgICAgb25DbGljazogKCkgPT4gbmF2aWdhdGUoJy8nKVxuICAgICAgICB9KSA6IHR5cGUgIT09ICdkZXNrdG9wJyAmJiBqc3gkMShDbG9zZUJ1dHRvbiwge1xuICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xvc2VcbiAgICAgICAgfSksIGpzeCQxKEZvcm1hdHRlZE1lc3NhZ2UsIHtcbiAgICAgICAgICBpZDogbWVudS50aXRsZVxuICAgICAgICB9KV1cbiAgICAgIH0pLCBtZW51Lml0ZW1zLm1hcCgoe1xuICAgICAgICBsYWJlbCxcbiAgICAgICAgbGluayxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNoZWNrZWRcbiAgICAgIH0pID0+IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9uc1xuICAgICAganN4cyhcImxpXCIsIHtcbiAgICAgICAgcm9sZTogbGluayA/ICdtZW51aXRlbScgOiAnbWVudWl0ZW1yYWRpbycsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IGNoZWNrZWQsXG4gICAgICAgIGNzczogW2NvbW1vblN0eWxlLnJvdywgbGluayAmJiBjb21tb25TdHlsZS5oYXNPcHRpb25zLCBjaGVja2VkICYmIGNvbW1vblN0eWxlLnNlbGVjdGVkLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6U2V0dGluZ3M7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsTmxkSFJwYm1kekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVzlSV1NJc0ltWnBiR1VpT2lKVFpYUjBhVzVuY3k1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxSUVCcWMzaEpiWEJ2Y25SVGIzVnlZMlVnUUdWdGIzUnBiMjR2Y21WaFkzUWdLaTljYm1sdGNHOXlkQ0I3ZFhObFUzUmhkR1VzSUhWelpVVm1abVZqZEgwZ1puSnZiU0FuY21WaFkzUW5YRzVwYlhCdmNuUWdVSEp2Y0ZSNWNHVnpJR1p5YjIwZ0ozQnliM0F0ZEhsd1pYTW5YRzVwYlhCdmNuUWdkWE5sVDI1amJHbGphMDkxZEhOcFpHVWdabkp2YlNBbmNtVmhZM1F0WTI5dmJDMXZibU5zYVdOcmIzVjBjMmxrWlNkY2JseHVhVzF3YjNKMElHbGpiMjRnWm5KdmJTQW5jM1I1YkdVdmFXTnZiaWRjYm1sdGNHOXlkQ0I3Um05eWJXRjBkR1ZrVFdWemMyRm5aWDBnWm5KdmJTQW5ZMjl1ZEdWNGRDOUpNVGh1SjF4dWFXMXdiM0owSUh0R2RXNWpkR2x2YmtKaGNrVjRkR1Z1YzJsdmJuMGdabkp2YlNBbkxpOTFhVVY0ZEdWdWMybHZibk1uWEc1cGJYQnZjblFnZTBKMWRIUnZibjBnWm5KdmJTQW5MaTlpZFhSMGIyNXpKMXh1WEc1amIyNXpkQ0IxYkZKbGMyVjBJRDBnZTF4dUlDQnRZWEpuYVc1Q2JHOWphMU4wWVhKME9pQXdMRnh1SUNCdFlYSm5hVzVDYkc5amEwVnVaRG9nTUN4Y2JpQWdjR0ZrWkdsdVowbHViR2x1WlZOMFlYSjBPaUF3TEZ4dWZWeHVYRzVqYjI1emRDQnRiMkpwYkdWVGRIbHNaU0E5SUh0Y2JpQWdhR1ZoWkRvZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lBbmMzUnBZMnQ1Snl4Y2JpQWdJQ0I2U1c1a1pYZzZJQ2N4Snl4Y2JpQWdJQ0IwYjNBNklDY3dKeXhjYmlBZ0lDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJQ0FnWVd4cFoyNUpkR1Z0Y3pvZ0oyTmxiblJsY2ljc1hHNGdJQ0FnY0dGa1pHbHVaem9nSnpGeVpXMGdNUzQxY21WdEp5eGNiaUFnSUNCamIyeHZjam9nSjNkb2FYUmxKeXhjYmlBZ0lDQmlZV05yWjNKdmRXNWtRMjlzYjNJNklDZHBibWhsY21sMEp5eGNiaUFnSUNCbWIyNTBVMmw2WlRvZ0p6RTJjSGduTEZ4dUlDQWdJR1p2Ym5SWFpXbG5hSFE2SUNkaWIyeGtKeXhjYmlBZ0lDQmlkWFIwYjI0NklIdGNiaUFnSUNBZ0lHMWhjbWRwYmxKcFoyaDBPaUFuTVhKbGJTY3NYRzRnSUNBZ0lDQndZV1JrYVc1bk9pQW5NQ2NzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dKekZ5WlcwbkxGeHVJQ0FnSUNBZ2FHVnBaMmgwT2lBbk1YSmxiU2NzWEc0Z0lDQWdJQ0JpYjNKa1pYSTZJQ2R1YjI1bEp5eGNiaUFnSUNCOUxGeHVJQ0I5TEZ4dUlDQnZkbVZ5YkdGNU9pQjdYRzRnSUNBZ2NHOXphWFJwYjI0NklDZGhZbk52YkhWMFpTY3NYRzRnSUNBZ2RHOXdPaUFuTUNjc1hHNGdJQ0FnZDJsa2RHZzZJQ2N4TURBbEp5eGNiaUFnSUNCb1pXbG5hSFE2SUNjeE1EQWxKeXhjYmlBZ0lDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJQ0FnWVd4cFoyNUpkR1Z0Y3pvZ0oyTmxiblJsY2ljc1hHNGdJQ0FnYW5WemRHbG1lVU52Ym5SbGJuUTZJQ2RqWlc1MFpYSW5MRnh1SUNBZ0lHSmhZMnRuY205MWJtUkRiMnh2Y2pvZ0ozSm5ZbUVvTUN3Z01Dd2dNQ3dnTUM0MktTY3NYRzRnSUNBZ2IzQmhZMmwwZVRvZ0p6QW5MRnh1SUNBZ0lIUnlZVzV6Wm05eWJUb2dKM1J5WVc1emJHRjBaVmtvTFRFd01DVXBKeXhjYmlBZ0lDQjBjbUZ1YzJsMGFXOXVPaUFuYjNCaFkybDBlU0F3TGpKeklHVmhjMlVzSUhSeVlXNXpabTl5YlNBd2N5QmxZWE5sSURBdU1uTW5MRnh1SUNBZ0lIVnNPaUIxYkZKbGMyVjBMRnh1SUNCOUxGeHVJQ0JqYjI1MFlXbHVaWEk2SUh0Y2JpQWdJQ0JtYkdWNE9pQW5NQ0F4T0hKbGJTY3NYRzRnSUNBZ2JXRjRTR1ZwWjJoME9pQW5ZMkZzWXlneE1EQWxJQzBnTW5KbGJTa25MRnh1SUNBZ0lHTnZiRzl5T2lBbkkyTmpZeWNzWEc0Z0lDQWdZbUZqYTJkeWIzVnVaRG9nSnlNek16TXpNek1uTEZ4dUlDQWdJSGRvYVhSbFUzQmhZMlU2SUNkdWIzZHlZWEFuTEZ4dUlDQWdJR0p2Y21SbGNsSmhaR2wxY3pvZ0p6UndlQ2NzWEc0Z0lDQWdkWE5sY2xObGJHVmpkRG9nSjI1dmJtVW5MRnh1SUNBZ0lHOTJaWEptYkc5M09pQW5ZWFYwYnljc1hHNGdJSDBzWEc0Z0lHOXdaVzQ2SUh0Y2JpQWdJQ0J2Y0dGamFYUjVPaUFuTVNjc1hHNGdJQ0FnZEhKaGJuTm1iM0p0T2lBbmRISmhibk5zWVhSbFdTZ3dLU2NzWEc0Z0lDQWdkSEpoYm5OcGRHbHZiam9nSjI5d1lXTnBkSGtnTUM0eWN5QmxZWE5sTENCMGNtRnVjMlp2Y20wZ01ITW5MRnh1SUNCOUxGeHVJQ0IwYVhSc1pUb2dlMXh1SUNBZ0lIQmhaR1JwYm1jNklDY3hNbkI0SURFNGNIZ25MRnh1SUNCOUxGeHVJQ0JrYVhOdGFYTnpPaUI3WEc0Z0lDQWdZbUZqYTJkeWIzVnVaRG9nWUdObGJuUmxjaUF2SURGeVpXMGdibTh0Y21Wd1pXRjBJSFZ5YkNna2UybGpiMjR1WTJ4dmMyVjlLU3dnZEhKaGJuTndZWEpsYm5SZ0xGeHVJQ0I5TEZ4dUlDQmlZV05yT2lCN1hHNGdJQ0FnWW1GamEyZHliM1Z1WkRvZ1lHTmxiblJsY2lBdklERnlaVzBnYm04dGNtVndaV0YwSUhWeWJDZ2tlMmxqYjI0dVltRmphMzBwTENCMGNtRnVjM0JoY21WdWRHQXNYRzRnSUgwc1hHNGdJSEp2ZHpvZ2UxeHVJQ0FnSUdOMWNuTnZjam9nSjNCdmFXNTBaWEluTEZ4dUlDQWdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnSUNCd1lXUmthVzVuT2lBbk1YSmxiU0F4TGpWeVpXMG5MRnh1SUNBZ0lHWnZiblJUYVhwbE9pQW5NVFp3ZUNjc1hHNGdJQ0FnSnpvNllXWjBaWEluT2lCN1hHNGdJQ0FnSUNCamIyNTBaVzUwT2lBblhDSWdYQ0luTEZ4dUlDQWdJQ0FnYldGeVoybHVUR1ZtZERvZ0p6RnlaVzBuTEZ4dUlDQWdJQ0FnZDJsa2RHZzZJQ2N5TUhCNEp5eGNiaUFnSUNBZ0lHaGxhV2RvZERvZ0p6SXdjSGduTEZ4dUlDQWdJQ0FnWkdsemNHeGhlVG9nSjJsdWJHbHVaUzFpYkc5amF5Y3NYRzRnSUNBZ0lDQmpiMnh2Y2pvZ0ozZG9hWFJsSnl4Y2JpQWdJQ0FnSUdKaFkydG5jbTkxYm1SUWIzTnBkR2x2YmpvZ0oyTmxiblJsY2ljc1hHNGdJQ0FnSUNCaVlXTnJaM0p2ZFc1a1UybDZaVG9nSjJOdmRtVnlKeXhjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J6Y0dGalpUb2dlMXh1SUNBZ0lHWnNaWGc2SUNjeEp5eGNiaUFnZlN4Y2JpQWdhR0Z6VDNCMGFXOXVjem9nZTF4dUlDQWdJQ2M2T21GbWRHVnlKem9nZTF4dUlDQWdJQ0FnWW1GamEyZHliM1Z1WkVsdFlXZGxPaUJnZFhKc0tDUjdhV052Ymk1aGNuSnZkMVJ2Y0gwcFlDeGNiaUFnSUNBZ0lIUnlZVzV6Wm05eWJUb2dKM0p2ZEdGMFpTZzVNR1JsWnlrbkxGeHVJQ0FnSUgwc1hHNGdJSDBzWEc0Z0lITmxiR1ZqZEdWa09pQjdYRzRnSUNBZ1kyOXNiM0k2SUNkM2FHbDBaU2NzWEc0Z0lDQWdKem82WVdaMFpYSW5PaUI3WEc0Z0lDQWdJQ0JpWVdOclozSnZkVzVrU1cxaFoyVTZJR0IxY213b0pIdHBZMjl1TG1Ob1pXTnJmU2xnTEZ4dUlDQWdJSDBzWEc0Z0lIMHNYRzU5WEc1Y2JpOHZJRlJQUkU4Z2MyOXRaU0J2WmlCemRIbHNaWE1nWVhKbElHWnZjaUJ2YkdSbGNpQjJaWEp6YVc5dUlGVkpJR1JsYzJsbmJpd2dZMkZ1SUdKbElITnBiWEJzYVdacFpXUmNibU52Ym5OMElHUmxjMnQwYjNCVGRIbHNaU0E5SUh0Y2JpQWdiM1psY214aGVUb2dlMXh1SUNBZ0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNBZ0lHSnZkSFJ2YlRvZ0oyTmhiR01vTldWdElDc2dkbUZ5S0MwdFltOTBkRzl0TFhOd1lXTnBibWNzSURCeVpXMHBLU2NzWEc0Z0lDQWdjbWxuYUhRNklDY3pjbVZ0Snl4Y2JpQWdJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUNBZ1lXeHBaMjVKZEdWdGN6b2dKMlpzWlhndFpXNWtKeXhjYmlBZ0lDQjNhV1IwYURvZ0p6RTFjbVZ0Snl4Y2JpQWdJQ0JvWldsbmFIUTZJQ2RqWVd4aktERXdNQ1VnTFNBNGNtVnRJQzBnZG1GeUtDMHRZbTkwZEc5dExYTndZV05wYm1jc0lEQnlaVzBwS1Njc1hHNGdJQ0FnYjNWMGJHbHVaVG9nSjI1dmJtVW5MRnh1SUNBZ0lHOXdZV05wZEhrNklDY3dKeXhjYmlBZ0lDQjBjbUZ1YzJadmNtMDZJQ2QwY21GdWMyeGhkR1ZaS0MweE1EQjJhQ2tuTEZ4dUlDQWdJSFZzT2lCMWJGSmxjMlYwTEZ4dUlDQjlMRnh1SUNCamIyNTBZV2x1WlhJNklIdGNiaUFnSUNBdUxpNXRiMkpwYkdWVGRIbHNaUzVqYjI1MFlXbHVaWElzWEc0Z0lDQWdiV0Y0U0dWcFoyaDBPaUFuTVRBd0pTY3NYRzRnSUNBZ1ltRmphMmR5YjNWdVpEb2dKM0puWW1Fb01Dd2dNQ3dnTUN3Z01DNDNLU2NzWEc0Z0lIMHNYRzRnSUdobFlXUTZJSHRjYmlBZ0lDQXVMaTV0YjJKcGJHVlRkSGxzWlM1b1pXRmtMRnh1SUNBZ0lHSmhZMnRuY205MWJtUTZJQ2NqTURBd0p5eGNiaUFnZlN4Y2JpQWdjbTkzT2lCN1hHNGdJQ0FnTGk0dWJXOWlhV3hsVTNSNWJHVXVjbTkzTEZ4dUlDQWdJQ2M2T21KbFptOXlaU2M2SUh0Y2JpQWdJQ0FnSUM0dUxtMXZZbWxzWlZOMGVXeGxMbkp2ZDFzbk9qcGhablJsY2lkZExGeHVJQ0FnSUNBZ2JXRnlaMmx1VEdWbWREb2dKekFuTEZ4dUlDQWdJQ0FnYldGeVoybHVVbWxuYUhRNklDYzBjSGduTEZ4dUlDQWdJSDBzWEc0Z0lIMHNYRzRnSUdoaGMwOXdkR2x2Ym5NNklIdGNiaUFnSUNBbk9qcGlaV1p2Y21Vbk9pQjdYRzRnSUNBZ0lDQmthWE53YkdGNU9pQW5ibTl1WlNjc1hHNGdJQ0FnZlN4Y2JpQWdJQ0FuT2pwaFpuUmxjaWM2SUh0Y2JpQWdJQ0FnSUdKaFkydG5jbTkxYm1SSmJXRm5aVG9nWUhWeWJDZ2tlMmxqYjI0dVlYSnliM2RVYjNCOUtXQXNYRzRnSUNBZ0lDQjBjbUZ1YzJadmNtMDZJQ2R5YjNSaGRHVW9PVEJrWldjcEp5eGNiaUFnSUNCOUxGeHVJQ0I5TEZ4dUlDQnpaV3hsWTNSbFpEb2dlMXh1SUNBZ0lDYzZPbUpsWm05eVpTYzZJSHRjYmlBZ0lDQWdJR0poWTJ0bmNtOTFibVJKYldGblpUb2dZSFZ5YkNna2UybGpiMjR1WTJobFkydDlLV0FzWEc0Z0lDQWdmU3hjYmlBZ2ZTeGNibjFjYmx4dVkyOXVjM1FnVFdWdWRVbDBaVzFVWlhoMElEMGdLSHQwWlhoMElEMGdKeWQ5S1NBOVBpQW9YRzRnSUR4R2IzSnRZWFIwWldSTlpYTnpZV2RsWEc0Z0lDQWdhV1E5ZTNSbGVIUjlYRzRnSUNBZ1pHVm1ZWFZzZEUxbGMzTmhaMlU5ZTF4dUlDQWdJQ0FnUEVadmNtMWhkSFJsWkUxbGMzTmhaMlVnYVdROWUyQkxTMU11VTBWVVZFbE9SeTRrZTNSbGVIUjlZSDBnWkdWbVlYVnNkRTFsYzNOaFoyVTllM1JsZUhSOUlDOCtYRzRnSUNBZ2ZWeHVJQ0F2UGx4dUtWeHVYRzVOWlc1MVNYUmxiVlJsZUhRdWNISnZjRlI1Y0dWeklEMGdlMXh1SUNCMFpYaDBPaUJRY205d1ZIbHdaWE11YzNSeWFXNW5MRnh1ZlZ4dVhHNWpiMjV6ZENCRGJHOXpaVUoxZEhSdmJpQTlJSEJ5YjNCeklEMCtJQ2hjYmlBZ1BHSjFkSFJ2Ymx4dUlDQWdJSFI1Y0dVOVhDSmlkWFIwYjI1Y0lseHVJQ0FnSUdGeWFXRXRiR0ZpWld3OVhDSkRiRzl6WlNCVFpYUjBhVzVuYzF3aVhHNGdJQ0FnWTNOelBYdHRiMkpwYkdWVGRIbHNaUzVrYVhOdGFYTnpmVnh1SUNBZ0lIc3VMaTV3Y205d2MzMWNiaUFnTHo1Y2JpbGNibHh1WTI5dWMzUWdRbUZqYTBKMWRIUnZiaUE5SUhCeWIzQnpJRDArSUNoY2JpQWdQR0oxZEhSdmJpQjBlWEJsUFZ3aVluVjBkRzl1WENJZ1lYSnBZUzFzWVdKbGJEMWNJa0poWTJ0Y0lpQmpjM005ZTIxdlltbHNaVk4wZVd4bExtSmhZMnQ5SUhzdUxpNXdjbTl3YzMwZ0x6NWNiaWxjYmx4dVkyOXVjM1FnVTJWMGRHbHVaM01nUFNBb2UxeHVJQ0J2Y0dWdUxGeHVJQ0IyWVd4MVpYTXNYRzRnSUhObFkzUnBiMjV6TEZ4dUlDQjBlWEJsTEZ4dUlDQnpkSGxzWlN4Y2JpQWdiMjVEYUdGdVoyVXNYRzRnSUc5dVQzQmxiaXhjYmlBZ2IyNURiRzl6WlN4Y2JuMHBJRDArSUh0Y2JpQWdZMjl1YzNRZ1kyOXRiVzl1VTNSNWJHVWdQU0IwZVhCbElEMDlQU0FuWkdWemEzUnZjQ2NnUHlCa1pYTnJkRzl3VTNSNWJHVWdPaUJ0YjJKcGJHVlRkSGxzWlZ4dUlDQmpiMjV6ZENCYmNHRjBhQ3dnYzJWMFVHRjBhRjBnUFNCMWMyVlRkR0YwWlNnbkx5Y3BYRzRnSUhWelpVVm1abVZqZENnb0tTQTlQaUI3WEc0Z0lDQWdhV1lnS0NGdmNHVnVLU0I3WEc0Z0lDQWdJQ0J6WlhSUVlYUm9LQ2N2SnlsY2JpQWdJQ0I5WEc0Z0lIMHNJRnR2Y0dWdVhTbGNibHh1SUNCamIyNXpkQ0J5WldZZ1BTQjFjMlZQYm1Oc2FXTnJUM1YwYzJsa1pTaGNiaUFnSUNBb0tTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb2IzQmxiaWtnZTF4dUlDQWdJQ0FnSUNCdmJrTnNiM05sS0NsY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5TEZ4dUlDQWdJSHRsZG1WdWRGUjVjR1Z6T2lCYkoyTnNhV05ySjExOVhHNGdJQ2xjYmlBZ1kyOXVjM1FnWTNWeWNtVnVkRk5sWTNScGIyNGdQU0J6WldOMGFXOXVjeTVtYVc1a0tHbDBJRDArSUhCaGRHZ2dQVDA5SUdBdkpIdHBkQzV1WVcxbGZXQXBYRzRnSUdOdmJuTjBJRzFsYm5VZ1BWeHVJQ0FnSUhCaGRHZ2dQVDA5SUNjdkoxeHVJQ0FnSUNBZ1B5QjdYRzRnSUNBZ0lDQWdJQ0FnZEdsMGJHVTZJQ2RMUzFNdVUwVlVWRWxPUnljc1hHNGdJQ0FnSUNBZ0lDQWdhWFJsYlhNNklITmxZM1JwYjI1ekxtMWhjQ2dvZTI1aGJXVXNJSFJwZEd4bExDQnBkR1Z0YzMwcElEMCtJQ2g3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNhVzVyT2lCZ0x5UjdibUZ0WlgxZ0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdGaVpXdzZJSFJwZEd4bExGeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbDBaVzF6TG1acGJtUW9hWFJsYlNBOVBpQnBkR1Z0TG5aaGJIVmxJRDA5UFNCMllXeDFaWE5iYm1GdFpWMHBQeTVzWVdKbGJDQjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlhOYmJtRnRaVjBzWEc0Z0lDQWdJQ0FnSUNBZ2ZTa3BMRnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0E2SUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhWFJzWlRvZ1kzVnljbVZ1ZEZObFkzUnBiMjR1ZEdsMGJHVXNYRzRnSUNBZ0lDQWdJQ0FnYVhSbGJYTTZJR04xY25KbGJuUlRaV04wYVc5dUxtbDBaVzF6TG0xaGNDZ29lM1poYkhWbExDQnNZV0psYkNBOUlIWmhiSFZsZlNrZ1BUNGdLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGhZbVZzTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMmhsWTJ0bFpEb2dkbUZzZFdWelcyTjFjbkpsYm5SVFpXTjBhVzl1TG01aGJXVmRJRDA5UFNCMllXeDFaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0U2SUhaaGJIVmxMRnh1SUNBZ0lDQWdJQ0FnSUgwcEtTeGNiaUFnSUNBZ0lDQWdJQ0J3Y21WMmFXOTFjem9nSnk4bkxGeHVJQ0FnSUNBZ0lDQjlYRzRnSUdOdmJuTjBJRzVoZG1sbllYUmxJRDBnWkdWemRDQTlQaUJ5WlhGMVpYTjBRVzVwYldGMGFXOXVSbkpoYldVb0tDa2dQVDRnYzJWMFVHRjBhQ2hrWlhOMEtTbGNibHh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHhrYVhZZ0x5OGdWRTlFVHlCeVpYQnNZV05sSUhkcGRHZ2dQRUpoWTJ0a2NtOXdQbHh1SUNBZ0lDQWdjbTlzWlQxY0ltMWxiblZjSWx4dUlDQWdJQ0FnZEdGaVNXNWtaWGc5WENJd1hDSmNiaUFnSUNBZ0lHTnpjejE3VzJOdmJXMXZibE4wZVd4bExtOTJaWEpzWVhrc0lHOXdaVzRnSmlZZ2JXOWlhV3hsVTNSNWJHVXViM0JsYml3Z2MzUjViR1ZkZlZ4dUlDQWdJQ0FnYjI1RGJHbGphejE3WlhabGJuUWdQVDRnWlhabGJuUXVjM1J2Y0ZCeWIzQmhaMkYwYVc5dUtDbDlYRzRnSUNBZ1BseHVJQ0FnSUNBZ1BFWjFibU4wYVc5dVFtRnlSWGgwWlc1emFXOXVQbHh1SUNBZ0lDQWdJQ0E4UW5WMGRHOXVYRzRnSUNBZ0lDQWdJQ0FnYzNSaGNuUkpZMjl1UFZ3aWMyVjBkR2x1WjF3aVhHNGdJQ0FnSUNBZ0lDQWdkR2wwYkdVOVhDSkxTMU11VTBWVVZFbE9SMXdpWEc0Z0lDQWdJQ0FnSUNBZ1pHbHpZV0pzWldROWUzTmxZM1JwYjI1ekxteGxibWQwYUNBOVBUMGdNSDFjYmlBZ0lDQWdJQ0FnSUNCdmJrTnNhV05yUFh0dmJrOXdaVzU5WEc0Z0lDQWdJQ0FnSUM4K1hHNGdJQ0FnSUNBOEwwWjFibU4wYVc5dVFtRnlSWGgwWlc1emFXOXVQbHh1SUNBZ0lDQWdQSFZzSUhKdmJHVTlYQ0p0Wlc1MVhDSWdjbVZtUFh0eVpXWjlJR056Y3oxN1kyOXRiVzl1VTNSNWJHVXVZMjl1ZEdGcGJtVnlmVDVjYmlBZ0lDQWdJQ0FnUEdScGRpQmpjM005ZTJOdmJXMXZibE4wZVd4bExtaGxZV1I5UGx4dUlDQWdJQ0FnSUNBZ0lIdHRaVzUxTG5CeVpYWnBiM1Z6SUQ4Z0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnUEVKaFkydENkWFIwYjI0Z2IyNURiR2xqYXoxN0tDa2dQVDRnYm1GMmFXZGhkR1VvSnk4bktYMGdMejVjYmlBZ0lDQWdJQ0FnSUNBcElEb2dLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RIbHdaU0FoUFQwZ0oyUmxjMnQwYjNBbklDWW1JRHhEYkc5elpVSjFkSFJ2YmlCdmJrTnNhV05yUFh0dmJrTnNiM05sZlNBdlBseHVJQ0FnSUNBZ0lDQWdJQ2w5WEc0Z0lDQWdJQ0FnSUNBZ1BFWnZjbTFoZEhSbFpFMWxjM05oWjJVZ2FXUTllMjFsYm5VdWRHbDBiR1Y5SUM4K1hHNGdJQ0FnSUNBZ0lEd3ZaR2wyUGx4dUlDQWdJQ0FnSUNCN2JXVnVkUzVwZEdWdGN5NXRZWEFvS0h0c1lXSmxiQ3dnYkdsdWF5d2dkbUZzZFdVc0lHUmhkR0VzSUdOb1pXTnJaV1I5S1NBOVBpQW9YRzRnSUNBZ0lDQWdJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdwemVDMWhNVEY1TDI1dkxXNXZibWx1ZEdWeVlXTjBhWFpsTFdWc1pXMWxiblF0YVc1MFpYSmhZM1JwYjI1elhHNGdJQ0FnSUNBZ0lDQWdQR3hwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnliMnhsUFh0c2FXNXJJRDhnSjIxbGJuVnBkR1Z0SnlBNklDZHRaVzUxYVhSbGJYSmhaR2x2SjMxY2JpQWdJQ0FnSUNBZ0lDQWdJR0Z5YVdFdFkyaGxZMnRsWkQxN1kyaGxZMnRsWkgxY2JpQWdJQ0FnSUNBZ0lDQWdJR056Y3oxN1cxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyMXRiMjVUZEhsc1pTNXliM2NzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR3hwYm1zZ0ppWWdZMjl0Ylc5dVUzUjViR1V1YUdGelQzQjBhVzl1Y3l4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJobFkydGxaQ0FtSmlCamIyMXRiMjVUZEhsc1pTNXpaV3hsWTNSbFpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUYxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JyWlhrOWUyeGhZbVZzZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdiMjVEYkdsamF6MTdLQ2tnUFQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdsdWExeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEOGdibUYyYVdkaGRHVW9iR2x1YXlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBNklHOXVRMmhoYm1kbEtIdHVZVzFsT2lCamRYSnlaVzUwVTJWamRHbHZiaTV1WVcxbExDQjJZV3gxWlRvZ1pHRjBZWDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnUGx4dUlDQWdJQ0FnSUNBZ0lDQWdQRTFsYm5WSmRHVnRWR1Y0ZENCMFpYaDBQWHRzWVdKbGJIMGdMejVjYmlBZ0lDQWdJQ0FnSUNBZ0lEeGthWFlnWTNOelBYdHRiMkpwYkdWVGRIbHNaUzV6Y0dGalpYMGdMejVjYmlBZ0lDQWdJQ0FnSUNBZ0lIdDJZV3gxWlNBbUppQThUV1Z1ZFVsMFpXMVVaWGgwSUhSbGVIUTllM1poYkhWbExuUnZVM1J5YVc1bktDbDlJQzgrZlZ4dUlDQWdJQ0FnSUNBZ0lEd3ZiR2srWEc0Z0lDQWdJQ0FnSUNrcGZWeHVJQ0FnSUNBZ1BDOTFiRDVjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVnh1ZlZ4dVhHNVRaWFIwYVc1bmN5NXdjbTl3Vkhsd1pYTWdQU0I3WEc0Z0lHOXdaVzQ2SUZCeWIzQlVlWEJsY3k1aWIyOXNMRnh1SUNCMllXeDFaWE02SUZCeWIzQlVlWEJsY3k1dlltcGxZM1FzWEc0Z0lITmxZM1JwYjI1ek9pQlFjbTl3Vkhsd1pYTXVZWEp5WVhrc1hHNGdJSFI1Y0dVNklGQnliM0JVZVhCbGN5NXpkSEpwYm1jc1hHNGdJSE4wZVd4bE9pQlFjbTl3Vkhsd1pYTXVZbTl2YkN4Y2JpQWdiMjVEYUdGdVoyVTZJRkJ5YjNCVWVYQmxjeTVtZFc1akxGeHVJQ0J2Yms5d1pXNDZJRkJ5YjNCVWVYQmxjeTVtZFc1akxGeHVJQ0J2YmtOc2IzTmxPaUJRY205d1ZIbHdaWE11Wm5WdVl5eGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnVTJWMGRHbHVaM05jYmlKZGZRPT0gKi9cIl0sXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IGxpbmsgPyBuYXZpZ2F0ZShsaW5rKSA6IG9uQ2hhbmdlKHtcbiAgICAgICAgICBuYW1lOiBjdXJyZW50U2VjdGlvbi5uYW1lLFxuICAgICAgICAgIHZhbHVlOiBkYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBjaGlsZHJlbjogW2pzeCQxKE1lbnVJdGVtVGV4dCwge1xuICAgICAgICAgIHRleHQ6IGxhYmVsXG4gICAgICAgIH0pLCBqc3gkMShcImRpdlwiLCB7XG4gICAgICAgICAgY3NzOiBtb2JpbGVTdHlsZS5zcGFjZVxuICAgICAgICB9KSwgdmFsdWUgJiYganN4JDEoTWVudUl0ZW1UZXh0LCB7XG4gICAgICAgICAgdGV4dDogdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICB9KV1cbiAgICAgIH0sIGxhYmVsKSldXG4gICAgfSldXG4gIH0pO1xufTtcblxuU2V0dGluZ3MucHJvcFR5cGVzID0ge1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgdmFsdWVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzZWN0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdHlsZTogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25PcGVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcHJvcC10eXBlcyAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmNvbnN0IHN0eWxlJDYgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnXG59OyAvLyBUT0RPIGFuaW1hdGlvbnNcblxuY29uc3QgUGxheVBhbmVsID0gKHtcbiAgb25DbGlja1xufSkgPT4ganN4JDEoXCJkaXZcIiwge1xuICBjc3M6IHN0eWxlJDYsXG4gIG9uQ2xpY2s6IG9uQ2xpY2tcbn0pO1xuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQ0KCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbmNvbnN0IHN0eWxlJDUgPSB7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInXG59O1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcHJvcC10eXBlcyAqL1xuXG52YXIgX3JlZiQ0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF2YXRzNWxcIixcbiAgc3R5bGVzOiBcIm1hcmdpbi1sZWZ0OjAuOHJlbTt3aWR0aDo0ZW1cIlxufSA6IHtcbiAgbmFtZTogXCIxdm9mb2pqLVZvbHVtZUNvbnRyb2xcIixcbiAgc3R5bGVzOiBcIm1hcmdpbi1sZWZ0OjAuOHJlbTt3aWR0aDo0ZW07bGFiZWw6Vm9sdW1lQ29udHJvbDtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsWnZiSFZ0WlVOdmJuUnliMnd1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQmNVTlZJaXdpWm1sc1pTSTZJbFp2YkhWdFpVTnZiblJ5YjJ3dWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lCbGMyeHBiblF0WkdsellXSnNaU0JwYm1SbGJuUWdLaTljYmk4cUlFQnFjM2hKYlhCdmNuUlRiM1Z5WTJVZ1FHVnRiM1JwYjI0dmNtVmhZM1FnS2k5Y2JtbHRjRzl5ZENCN2RYTmxSV1ptWldOMExDQjFjMlZUZEdGMFpYMGdabkp2YlNBbmNtVmhZM1FuWEc1Y2JtbHRjRzl5ZENCN1FuVjBkRzl1ZlNCbWNtOXRJQ2R3YkdGNVpYSlZhUzlpZFhSMGIyNXpKMXh1YVcxd2IzSjBJRk5wYlhCc1pWTnNhV1JsY2lCbWNtOXRJQ2R3YkdGNVpYSlZhUzlUYVcxd2JHVlRiR2xrWlhJblhHNWNibU52Ym5OMElITjBlV3hsSUQwZ2UxeHVJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV1pzWlhnbkxGeHVJQ0JoYkdsbmJrbDBaVzF6T2lBblkyVnVkR1Z5Snl4Y2JuMWNibHh1THlvZ1pYTnNhVzUwTFdScGMyRmliR1VnY21WaFkzUXZjSEp2Y0MxMGVYQmxjeUFxTDF4dVkyOXVjM1FnVm05c2RXMWxRMjl1ZEhKdmJDQTlJQ2g3WEc0Z0lITnNhV1JsY2lBOUlHWmhiSE5sTEZ4dUlDQnpkV0p6WTNKcFltVXNYRzRnSUc5dVEyaGhibWRsTEZ4dUlDQjBiMmRuYkdWTmRYUmxMRnh1SUNCdmJrRjFaR2x2Vm05c2RXMWxVMlYwZEdsdVowTm9ZVzVuWlVWMlpXNTBMRnh1SUNCdmJrRjFaR2x2VFhWMFpWTmxkSFJwYm1kRGFHRnVaMlVzWEc1OUtTQTlQaUI3WEc0Z0lHTnZibk4wSUZ0N2RtOXNkVzFsTENCdGRYUmxaSDBzSUhObGRGTjBZWFJsWFNBOUlIVnpaVk4wWVhSbEtIdHRkWFJsWkRvZ1ptRnNjMlVzSUhadmJIVnRaVG9nTVgwcFhHNGdJSFZ6WlVWbVptVmpkQ2dvS1NBOVBpQnpkV0p6WTNKcFltVW9jMlYwVTNSaGRHVXBMQ0JiWFNsY2JpQWdZMjl1YzNRZ2FXTnZiazVoYldVZ1BTQnRkWFJsWkNBL0lDZHRkWFJsSnlBNklIWnZiSFZ0WlNBOElEQXVOU0EvSUNkMmIyeDFiV1ZNYjNjbklEb2dKM1p2YkhWdFpVaHBaMmduWEc1Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNBOFpHbDJJR05zWVhOelRtRnRaVDFjSW10cmN5MXdiR0Y1WlhKZlgzWnZiSFZ0WlZ3aUlHTnpjejE3YzNSNWJHVjlQbHh1SUNBZ0lDQWdQRUoxZEhSdmJseHVJQ0FnSUNBZ0lDQnpkR0Z5ZEVsamIyNDllMmxqYjI1T1lXMWxmVnh1SUNBZ0lDQWdJQ0IwYVhSc1pUMTdiWFYwWldRZ1B5QW5TMHRUTGxCTVFWbEZVaTVWVGsxVlZFVW5JRG9nSjB0TFV5NVFURUZaUlZJdVRWVlVSU2Q5WEc0Z0lDQWdJQ0FnSUc5dVEyeHBZMnM5ZXlncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCdmJrRjFaR2x2VFhWMFpWTmxkSFJwYm1kRGFHRnVaMlVvSVcxMWRHVmtLVnh1SUNBZ0lDQWdJQ0FnSUhSdloyZHNaVTExZEdVb0tWeHVJQ0FnSUNBZ0lDQjlmVnh1SUNBZ0lDQWdMejVjYmlBZ0lDQWdJSHR6Ykdsa1pYSWdKaVlnS0Z4dUlDQWdJQ0FnSUNBOFUybHRjR3hsVTJ4cFpHVnlYRzRnSUNBZ0lDQWdJQ0FnWTNOelBYdDdYRzRnSUNBZ0lDQWdJQ0FnSUNCdFlYSm5hVzVNWldaME9pQW5NQzQ0Y21WdEp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUhkcFpIUm9PaUFuTkdWdEp5eGNiaUFnSUNBZ0lDQWdJQ0I5ZlZ4dUlDQWdJQ0FnSUNBZ0lIWmhiSFZsUFh0dGRYUmxaQ0EvSURBZ09pQjJiMngxYldWOVhHNGdJQ0FnSUNBZ0lDQWdiV0Y0UFhzeGZWeHVJQ0FnSUNBZ0lDQWdJRzl1UTJoaGJtZGxQWHNvWHl3Z2UzWmhiSFZsZlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2IyNURhR0Z1WjJVb2RtRnNkV1VwWEc0Z0lDQWdJQ0FnSUNBZ2ZYMWNiaUFnSUNBZ0lDQWdJQ0J2YmtOb1lXNW5aVU52YlcxcGRIUmxaRDE3S0Y4c0lIdDJZV3gxWlgwcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHOXVRWFZrYVc5V2IyeDFiV1ZUWlhSMGFXNW5RMmhoYm1kbFJYWmxiblFvZG1Gc2RXVXBYRzRnSUNBZ0lDQWdJQ0FnSUNCdmJrTm9ZVzVuWlNoMllXeDFaU3dnZTJOdmJXMXBkRG9nZEhKMVpYMHBYRzRnSUNBZ0lDQWdJQ0FnZlgxY2JpQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ1BDOWthWFkrWEc0Z0lDbGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnVm05c2RXMWxRMjl1ZEhKdmJGeHVJbDE5ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQ0XG59O1xuXG5jb25zdCBWb2x1bWVDb250cm9sID0gKHtcbiAgc2xpZGVyID0gZmFsc2UsXG4gIHN1YnNjcmliZSxcbiAgb25DaGFuZ2UsXG4gIHRvZ2dsZU11dGUsXG4gIG9uQXVkaW9Wb2x1bWVTZXR0aW5nQ2hhbmdlRXZlbnQsXG4gIG9uQXVkaW9NdXRlU2V0dGluZ0NoYW5nZVxufSkgPT4ge1xuICBjb25zdCBbe1xuICAgIHZvbHVtZSxcbiAgICBtdXRlZFxuICB9LCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSh7XG4gICAgbXV0ZWQ6IGZhbHNlLFxuICAgIHZvbHVtZTogMVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHN1YnNjcmliZShzZXRTdGF0ZSksIFtdKTtcbiAgY29uc3QgaWNvbk5hbWUgPSBtdXRlZCA/ICdtdXRlJyA6IHZvbHVtZSA8IDAuNSA/ICd2b2x1bWVMb3cnIDogJ3ZvbHVtZUhpZ2gnO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImtrcy1wbGF5ZXJfX3ZvbHVtZVwiLFxuICAgIGNzczogc3R5bGUkNSxcbiAgICBjaGlsZHJlbjogW2pzeCQxKEJ1dHRvbiwge1xuICAgICAgc3RhcnRJY29uOiBpY29uTmFtZSxcbiAgICAgIHRpdGxlOiBtdXRlZCA/ICdLS1MuUExBWUVSLlVOTVVURScgOiAnS0tTLlBMQVlFUi5NVVRFJyxcbiAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgb25BdWRpb011dGVTZXR0aW5nQ2hhbmdlKCFtdXRlZCk7XG4gICAgICAgIHRvZ2dsZU11dGUoKTtcbiAgICAgIH1cbiAgICB9KSwgc2xpZGVyICYmIGpzeCQxKFNpbXBsZVNsaWRlciwge1xuICAgICAgY3NzOiBfcmVmJDQsXG4gICAgICB2YWx1ZTogbXV0ZWQgPyAwIDogdm9sdW1lLFxuICAgICAgbWF4OiAxLFxuICAgICAgb25DaGFuZ2U6IChfLCB7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZUNvbW1pdHRlZDogKF8sIHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pID0+IHtcbiAgICAgICAgb25BdWRpb1ZvbHVtZVNldHRpbmdDaGFuZ2VFdmVudCh2YWx1ZSk7XG4gICAgICAgIG9uQ2hhbmdlKHZhbHVlLCB7XG4gICAgICAgICAgY29tbWl0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pXVxuICB9KTtcbn07XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDMoKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG5jb25zdCBmb3JtYXRUaW1lID0gc2Vjb25kID0+IG5ldyBEYXRlKHNlY29uZCAqIDEwMDApLnRvVGltZVN0cmluZygpLm1hdGNoKC9cXGRcXGQ6XFxkXFxkLylbMF07XG5cbnZhciBfcmVmJDMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiNXNueHhzXCIsXG4gIHN0eWxlczogXCJmb250LXNpemU6MC43NWVtXCJcbn0gOiB7XG4gIG5hbWU6IFwiMXczazg3dy1DaGFubmVsVGl0bGVcIixcbiAgc3R5bGVzOiBcImZvbnQtc2l6ZTowLjc1ZW07bGFiZWw6Q2hhbm5lbFRpdGxlO1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtOb1lXNXVaV3hVYVhSc1pTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZQVHlJc0ltWnBiR1VpT2lKRGFHRnVibVZzVkdsMGJHVXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpQkFhbk40U1cxd2IzSjBVMjkxY21ObElFQmxiVzkwYVc5dUwzSmxZV04wSUNvdlhHNXBiWEJ2Y25RZ1VISnZjRlI1Y0dWeklHWnliMjBnSjNCeWIzQXRkSGx3WlhNblhHNWNibU52Ym5OMElHWnZjbTFoZEZScGJXVWdQU0J6WldOdmJtUWdQVDVjYmlBZ2JtVjNJRVJoZEdVb2MyVmpiMjVrSUNvZ01UQXdNQ2t1ZEc5VWFXMWxVM1J5YVc1bktDa3ViV0YwWTJnb0wxeGNaRnhjWkRwY1hHUmNYR1F2S1Zzd1hWeHVYRzVqYjI1emRDQkRhR0Z1Ym1Wc1ZHbDBiR1VnUFNBb2UzUnBkR3hsSUQwZ0p5Y3NJSE4wWVhKMFZHbHRaU3dnWlc1a1ZHbHRaWDBwSUQwK0lDaGNiaUFnUEdScGRpQmpjM005ZTN0bWIyNTBVMmw2WlRvZ0p6QXVOelZsYlNkOWZUNWNiaUFnSUNCN2MzUmhjblJVYVcxbElDWW1JR1Z1WkZScGJXVWdKaVlnS0Z4dUlDQWdJQ0FnUEhOd1lXNCtYRzRnSUNBZ0lDQWdJSHRtYjNKdFlYUlVhVzFsS0hOMFlYSjBWR2x0WlNsOUlDMGdlMlp2Y20xaGRGUnBiV1VvWlc1a1ZHbHRaU2w5WEc0Z0lDQWdJQ0E4TDNOd1lXNCtYRzRnSUNBZ0tYMTdKeUFuZlZ4dUlDQWdJSHQwYVhSc1pYMWNiaUFnUEM5a2FYWStYRzRwWEc1Y2JrTm9ZVzV1Wld4VWFYUnNaUzV3Y205d1ZIbHdaWE1nUFNCN1hHNGdJSFJwZEd4bE9pQlFjbTl3Vkhsd1pYTXVjM1J5YVc1bkxGeHVJQ0J6ZEdGeWRGUnBiV1U2SUZCeWIzQlVlWEJsY3k1dWRXMWlaWElzWEc0Z0lHVnVaRlJwYldVNklGQnliM0JVZVhCbGN5NXVkVzFpWlhJc1hHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRU5vWVc1dVpXeFVhWFJzWlZ4dUlsMTkgKi9cIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDNcbn07XG5cbmNvbnN0IENoYW5uZWxUaXRsZSA9ICh7XG4gIHRpdGxlID0gJycsXG4gIHN0YXJ0VGltZSxcbiAgZW5kVGltZVxufSkgPT4ganN4cyhcImRpdlwiLCB7XG4gIGNzczogX3JlZiQzLFxuICBjaGlsZHJlbjogW3N0YXJ0VGltZSAmJiBlbmRUaW1lICYmIGpzeHMoXCJzcGFuXCIsIHtcbiAgICBjaGlsZHJlbjogW2Zvcm1hdFRpbWUoc3RhcnRUaW1lKSwgXCIgLSBcIiwgZm9ybWF0VGltZShlbmRUaW1lKV1cbiAgfSksICcgJywgdGl0bGVdXG59KTtcblxuQ2hhbm5lbFRpdGxlLnByb3BUeXBlcyA9IHtcbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN0YXJ0VGltZTogUHJvcFR5cGVzLm51bWJlcixcbiAgZW5kVGltZTogUHJvcFR5cGVzLm51bWJlclxufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmNvbnN0IGxvYWROYXRpdmUgPSAoe1xuICB2aWRlb0VsZW1lbnRcbn0pID0+ICh7XG4gIGxvYWQ6ICh7XG4gICAgbmF0aXZlOiB1cmxcbiAgfSkgPT4ge1xuICAgIHZpZGVvRWxlbWVudC5zcmMgPSB1cmw7XG4gICAgdmlkZW9FbGVtZW50LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICB2aWRlb0VsZW1lbnQuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gIH0sXG4gIHBsYXk6ICgpID0+IHZpZGVvRWxlbWVudC5wbGF5KCksXG4gIHBhdXNlOiAoKSA9PiB2aWRlb0VsZW1lbnQucGF1c2UoKSxcbiAgc2VlazogdGltZSA9PiB7XG4gICAgdmlkZW9FbGVtZW50LmN1cnJlbnRUaW1lID0gdGltZTtcbiAgfSxcbiAgZ2V0VmlkZW9FbGVtZW50OiAoKSA9PiB2aWRlb0VsZW1lbnQsXG4gIGdldFZpZGVvUXVhbGl0eTogKCkgPT4gKHt9KSxcbiAgZGVzdHJveTogKCkgPT4ge31cbn0pO1xuXG4vKlxuICBXZSBvdmVyd3JpdGUgc3RhbmRhcmQgZnVuY3Rpb24gZm9yIGdldHRpbmcgbWVkaWFTb3VyY2Ugb2JqZWN0XG4gIGJlY2F1c2UgQ2hyb21lIHN1cHBvcnRzIFZpZGVvVHJhY2sgb25seSBpbiBleHBlcmltZW50IG1vZGUuXG4qL1xuY29uc3QgZ2V0VXJsT2JqZWN0ID0gZm4gPT4ge1xuICBjb25zdCBjcmVhdGVPYmplY3RVUkwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTC5iaW5kKCk7XG5cbiAgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwgPSBibG9iID0+IHtcbiAgICBpZiAoYmxvYi5hZGRTb3VyY2VCdWZmZXIpIHtcbiAgICAgIGZuKGJsb2IpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gIH07XG59O1xuXG4vKiEgQGxpY2Vuc2VcbiAqIFNoYWthIFBsYXllclxuICogQ29weXJpZ2h0IDIwMTYgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xubGV0IHNoYWthJDE7XG5jb25zdCBzaGFrYUxvZyA9IHtcbiAgdjE6ICgpID0+IHt9XG59O1xuXG5jb25zdCBhc01hcCA9IG9iamVjdCA9PiB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgbWFwLnNldChrZXksIG9iamVjdFtrZXldKTtcbiAgfVxuXG4gIHJldHVybiBtYXA7XG59O1xuXG5jb25zdCBtYWtlUmVzcG9uc2UgPSAoaGVhZGVycywgZGF0YSwgc3RhdHVzLCB1cmksIHJlc3BvbnNlVVJMLCByZXF1ZXN0VHlwZSkgPT4ge1xuICBpZiAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPD0gMjk5ICYmIHN0YXR1cyAhPSAyMDIpIHtcbiAgICAvLyBNb3N0IDJ4eCBIVFRQIGNvZGVzIGFyZSBzdWNjZXNzIGNhc2VzLlxuXG4gICAgLyoqIEB0eXBlIHtzaGFrYS5leHRlcm4uUmVzcG9uc2V9ICovXG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICB1cmk6IHJlc3BvbnNlVVJMIHx8IHVyaSxcbiAgICAgIG9yaWdpbmFsVXJpOiB1cmksXG4gICAgICBkYXRhLFxuICAgICAgc3RhdHVzLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGZyb21DYWNoZTogISFoZWFkZXJzWyd4LXNoYWthLWZyb20tY2FjaGUnXVxuICAgIH07XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgbGV0IHJlc3BvbnNlVGV4dCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICByZXNwb25zZVRleHQgPSBzaGFrYSQxLnV0aWwuU3RyaW5nVXRpbHMuZnJvbUJ5dGVzQXV0b0RldGVjdChkYXRhKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cblxuICBjb25zdCBzZXZlcml0eSA9IHN0YXR1cyA9PSA0MDEgfHwgc3RhdHVzID09IDQwMyA/IHNoYWthJDEudXRpbC5FcnJvci5TZXZlcml0eS5DUklUSUNBTCA6IHNoYWthJDEudXRpbC5FcnJvci5TZXZlcml0eS5SRUNPVkVSQUJMRTtcbiAgdGhyb3cgbmV3IHNoYWthJDEudXRpbC5FcnJvcihzZXZlcml0eSwgc2hha2EkMS51dGlsLkVycm9yLkNhdGVnb3J5Lk5FVFdPUkssIHNoYWthJDEudXRpbC5FcnJvci5Db2RlLkJBRF9IVFRQX1NUQVRVUywgdXJpLCBzdGF0dXMsIHJlc3BvbnNlVGV4dCwgaGVhZGVycywgcmVxdWVzdFR5cGUpO1xufTtcblxuY29uc3QgZ29vZyQxID0ge1xuICBhc3NlcnRzOiB7XG4gICAgYXNzZXJ0OiAoKSA9PiB7fVxuICB9XG59O1xuLyoqXG4gKiBAc3VtbWFyeSBBIG5ldHdvcmtpbmcgcGx1Z2luIHRvIGhhbmRsZSBodHRwIGFuZCBodHRwcyBVUklzIHZpYSB0aGUgRmV0Y2ggQVBJLlxuICogQGV4cG9ydFxuICovXG5cbmNsYXNzIEh0dHBGZXRjaFBsdWdpbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJpXG4gICAqIEBwYXJhbSB7c2hha2EuZXh0ZXJuLlJlcXVlc3R9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtzaGFrYS5uZXQuTmV0d29ya2luZ0VuZ2luZS5SZXF1ZXN0VHlwZX0gcmVxdWVzdFR5cGVcbiAgICogQHBhcmFtIHtzaGFrYS5leHRlcm4uUHJvZ3Jlc3NVcGRhdGVkfSBwcm9ncmVzc1VwZGF0ZWQgQ2FsbGVkIHdoZW4gYVxuICAgKiAgIHByb2dyZXNzIGV2ZW50IGhhcHBlbmVkLlxuICAgKiBAcGFyYW0ge3NoYWthLmV4dGVybi5IZWFkZXJzUmVjZWl2ZWR9IGhlYWRlcnNSZWNlaXZlZCBDYWxsZWQgd2hlbiB0aGVcbiAgICogICBoZWFkZXJzIGZvciB0aGUgZG93bmxvYWQgYXJlIHJlY2VpdmVkLCBidXQgYmVmb3JlIHRoZSBib2R5IGlzLlxuICAgKiBAcmV0dXJuIHshc2hha2EuZXh0ZXJuLklBYm9ydGFibGVPcGVyYXRpb24uPHNoYWthLmV4dGVybi5SZXNwb25zZT59XG4gICAqIEBleHBvcnRcbiAgICovXG4gIHN0YXRpYyBwYXJzZSh1cmksIHJlcXVlc3QsIHJlcXVlc3RUeXBlLCBwcm9ncmVzc1VwZGF0ZWQsIGhlYWRlcnNSZWNlaXZlZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEZldGNoUGx1Z2luLkhlYWRlcnNfKCk7XG4gICAgYXNNYXAocmVxdWVzdC5oZWFkZXJzKS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEh0dHBGZXRjaFBsdWdpbi5BYm9ydENvbnRyb2xsZXJfKCk7XG4gICAgLyoqIEB0eXBlIHshUmVxdWVzdEluaXR9ICovXG5cbiAgICBjb25zdCBpbml0ID0ge1xuICAgICAgLy8gRWRnZSBkb2VzIG5vdCB0cmVhdCBudWxsIGFzIHVuZGVmaW5lZCBmb3IgYm9keTsgaHR0cHM6Ly9iaXQubHkvMmx1eUU2eFxuICAgICAgYm9keTogcmVxdWVzdC5ib2R5IHx8IHVuZGVmaW5lZCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0LmFsbG93Q3Jvc3NTaXRlQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIC8qKiBAdHlwZSB7c2hha2EubmV0Lkh0dHBGZXRjaFBsdWdpbi5BYm9ydFN0YXR1c30gKi9cblxuICAgIGNvbnN0IGFib3J0U3RhdHVzID0ge1xuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgdGltZWRPdXQ6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IEh0dHBGZXRjaFBsdWdpbi5yZXF1ZXN0Xyh1cmksIHJlcXVlc3RUeXBlLCBpbml0LCBhYm9ydFN0YXR1cywgcHJvZ3Jlc3NVcGRhdGVkLCBoZWFkZXJzUmVjZWl2ZWQsIHJlcXVlc3Quc3RyZWFtRGF0YUNhbGxiYWNrKTtcbiAgICAvKiogQHR5cGUgeyFzaGFrYS51dGlsLkFib3J0YWJsZU9wZXJhdGlvbn0gKi9cblxuICAgIGNvbnN0IG9wID0gbmV3IHNoYWthJDEudXRpbC5BYm9ydGFibGVPcGVyYXRpb24ocGVuZGluZ1JlcXVlc3QsICgpID0+IHtcbiAgICAgIGFib3J0U3RhdHVzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTsgLy8gVGhlIGZldGNoIEFQSSBkb2VzIG5vdCB0aW1lb3V0IG5hdGl2ZWx5LCBzbyBkbyBhIHRpbWVvdXQgbWFudWFsbHkgdXNpbmdcbiAgICAvLyB0aGUgQWJvcnRDb250cm9sbGVyLlxuXG4gICAgY29uc3QgdGltZW91dE1zID0gcmVxdWVzdC5yZXRyeVBhcmFtZXRlcnMudGltZW91dDtcblxuICAgIGlmICh0aW1lb3V0TXMpIHtcbiAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHNoYWthJDEudXRpbC5UaW1lcigoKSA9PiB7XG4gICAgICAgIGFib3J0U3RhdHVzLnRpbWVkT3V0ID0gdHJ1ZTtcbiAgICAgICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgfSk7XG4gICAgICB0aW1lci50aWNrQWZ0ZXIodGltZW91dE1zIC8gMTAwMCk7IC8vIFRvIGF2b2lkIGNhbGxpbmcgfGFib3J0fCBvbiB0aGUgbmV0d29yayByZXF1ZXN0IGFmdGVyIGl0IGZpbmlzaGVkLCB3ZVxuICAgICAgLy8gd2lsbCBzdG9wIHRoZSB0aW1lciB3aGVuIHRoZSByZXF1ZXN0cyByZXNvbHZlcy9yZWplY3RzLlxuXG4gICAgICBvcC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGltZXIuc3RvcCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJpXG4gICAqIEBwYXJhbSB7c2hha2EubmV0Lk5ldHdvcmtpbmdFbmdpbmUuUmVxdWVzdFR5cGV9IHJlcXVlc3RUeXBlXG4gICAqIEBwYXJhbSB7IVJlcXVlc3RJbml0fSBpbml0XG4gICAqIEBwYXJhbSB7c2hha2EubmV0Lkh0dHBGZXRjaFBsdWdpbi5BYm9ydFN0YXR1c30gYWJvcnRTdGF0dXNcbiAgICogQHBhcmFtIHtzaGFrYS5leHRlcm4uUHJvZ3Jlc3NVcGRhdGVkfSBwcm9ncmVzc1VwZGF0ZWRcbiAgICogQHBhcmFtIHtzaGFrYS5leHRlcm4uSGVhZGVyc1JlY2VpdmVkfSBoZWFkZXJzUmVjZWl2ZWRcbiAgICogQHBhcmFtIHs/ZnVuY3Rpb24oQnVmZmVyU291cmNlKTohUHJvbWlzZX0gc3RyZWFtRGF0YUNhbGxiYWNrXG4gICAqIEByZXR1cm4geyFQcm9taXNlPCFzaGFrYS5leHRlcm4uUmVzcG9uc2U+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIHN0YXRpYyBhc3luYyByZXF1ZXN0Xyh1cmksIHJlcXVlc3RUeXBlLCBpbml0LCBhYm9ydFN0YXR1cywgcHJvZ3Jlc3NVcGRhdGVkLCBoZWFkZXJzUmVjZWl2ZWQsIHN0cmVhbURhdGFDYWxsYmFjaykge1xuICAgIGNvbnN0IGZldGNoID0gSHR0cEZldGNoUGx1Z2luLmZldGNoXztcbiAgICBjb25zdCBSZWFkYWJsZVN0cmVhbSA9IEh0dHBGZXRjaFBsdWdpbi5SZWFkYWJsZVN0cmVhbV87XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBhcnJheUJ1ZmZlcjtcbiAgICBsZXQgbG9hZGVkID0gMDtcbiAgICBsZXQgbGFzdExvYWRlZCA9IDA7IC8vIExhc3QgdGltZSBzdGFtcCB3aGVuIHdlIGdvdCBhIHByb2dyZXNzIGV2ZW50LlxuXG4gICAgbGV0IGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgcHJvbWlzZSByZXR1cm5lZCBieSBmZXRjaCByZXNvbHZlcyBhcyBzb29uIGFzIHRoZSBIVFRQIHJlc3BvbnNlXG4gICAgICAvLyBoZWFkZXJzIGFyZSBhdmFpbGFibGUuIFRoZSBkb3dubG9hZCBpdHNlbGYgaXNuJ3QgZG9uZSB1bnRpbCB0aGUgcHJvbWlzZVxuICAgICAgLy8gZm9yIHJldHJpZXZpbmcgdGhlIGRhdGEgKGFycmF5QnVmZmVyLCBibG9iLCBldGMpIGhhcyByZXNvbHZlZC5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJpLCBpbml0KTsgLy8gQXQgdGhpcyBwb2ludCBpbiB0aGUgcHJvY2Vzcywgd2UgaGF2ZSB0aGUgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2UsIGJ1dFxuICAgICAgLy8gbm90IHRoZSBib2R5IHlldC5cblxuICAgICAgaGVhZGVyc1JlY2VpdmVkKEh0dHBGZXRjaFBsdWdpbi5oZWFkZXJzVG9HZW5lcmljT2JqZWN0XyhyZXNwb25zZS5oZWFkZXJzKSk7IC8vIEdldHRpbmcgdGhlIHJlYWRlciBpbiB0aGlzIHdheSBhbGxvd3MgdXMgdG8gb2JzZXJ2ZSB0aGUgcHJvY2VzcyBvZlxuICAgICAgLy8gZG93bmxvYWRpbmcgdGhlIGJvZHksIGluc3RlYWQgb2YganVzdCB3YWl0aW5nIGZvciBhbiBvcGFxdWUgcHJvbWlzZSB0b1xuICAgICAgLy8gcmVzb2x2ZS5cbiAgICAgIC8vIFdlIGZpcnN0IGNsb25lIHRoZSByZXNwb25zZSBiZWNhdXNlIGNhbGxpbmcgZ2V0UmVhZGVyIGxvY2tzIHRoZSBib2R5XG4gICAgICAvLyBzdHJlYW07IGlmIHdlIGRpZG4ndCBjbG9uZSBpdCBoZXJlLCB3ZSB3b3VsZCBiZSB1bmFibGUgdG8gZ2V0IHRoZVxuICAgICAgLy8gcmVzcG9uc2UncyBhcnJheUJ1ZmZlciBsYXRlci5cblxuICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuY2xvbmUoKS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgY29uc3QgY29udGVudExlbmd0aFJhdyA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhSYXcgPyBwYXJzZUludChjb250ZW50TGVuZ3RoUmF3LCAxMCkgOiAwO1xuXG4gICAgICBjb25zdCBzdGFydCA9IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICBjb25zdCBwdXNoID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGxldCByZWFkT2JqO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlYWRPYmogPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGFib3J0IHRoZSByZXF1ZXN0LCB3ZSdsbCBnZXQgYW4gZXJyb3IgaGVyZS4gIEp1c3QgaWdub3JlIGl0XG4gICAgICAgICAgICAvLyBzaW5jZSByZWFsIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHdoZW4gd2UgcmVhZCB0aGUgYnVmZmVyIGJlbG93LlxuICAgICAgICAgICAgc2hha2FMb2cudjEoJ2Vycm9yIHJlYWRpbmcgZnJvbSBzdHJlYW0nLCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcmVhZE9iai5kb25lKSB7XG4gICAgICAgICAgICBsb2FkZWQgKz0gcmVhZE9iai52YWx1ZS5ieXRlTGVuZ3RoOyAvLyBzdHJlYW1EYXRhQ2FsbGJhY2sgYWRkcyBzdHJlYW0gZGF0YSB0byBidWZmZXIgZm9yIGxvdyBsYXRlbmN5IG1vZGVcbiAgICAgICAgICAgIC8vIDR4eCByZXNwb25zZSBtZWFucyBhIHNlZ21lbnQgaXMgbm90IHJlYWR5IGFuZCBjYW4gcmV0cnkgc29vblxuICAgICAgICAgICAgLy8gb25seSBzdWNjZXNzZnVsIHJlc3BvbnNlIGRhdGEgc2hvdWxkIGJlIGFkZGVkLCBvciBwbGF5YmFjayBmcmVlemVzXG5cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCAmJiBzdHJlYW1EYXRhQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgYXdhaXQgc3RyZWFtRGF0YUNhbGxiYWNrKHJlYWRPYmoudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTsgLy8gSWYgdGhlIHRpbWUgYmV0d2VlbiBsYXN0IHRpbWUgYW5kIHRoaXMgdGltZSB3ZSBnb3QgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgICAvLyBpcyBsb25nIGVub3VnaCwgb3IgaWYgYSB3aG9sZSBzZWdtZW50IGlzIGRvd25sb2FkZWQsIGNhbGxcbiAgICAgICAgICAvLyBwcm9ncmVzc1VwZGF0ZWQoKS5cblxuICAgICAgICAgIGlmIChjdXJyZW50VGltZSAtIGxhc3RUaW1lID4gMTAwIHx8IHJlYWRPYmouZG9uZSkge1xuICAgICAgICAgICAgcHJvZ3Jlc3NVcGRhdGVkKGN1cnJlbnRUaW1lIC0gbGFzdFRpbWUsIGxvYWRlZCAtIGxhc3RMb2FkZWQsIGNvbnRlbnRMZW5ndGggLSBsb2FkZWQpO1xuICAgICAgICAgICAgbGFzdExvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlYWRPYmouZG9uZSkge1xuICAgICAgICAgICAgZ29vZyQxLmFzc2VydHMuYXNzZXJ0KCFyZWFkT2JqLnZhbHVlLCAncmVhZE9iaiBzaG91bGQgYmUgdW5zZXQgd2hlbiBcImRvbmVcIiBpcyB0cnVlLicpO1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUocmVhZE9iai52YWx1ZSk7XG4gICAgICAgICAgICBwdXNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHB1c2goKTtcbiAgICAgIH07IC8vIENyZWF0ZSBhIFJlYWRhYmxlU3RyZWFtIHRvIHVzZSB0aGUgcmVhZGVyLiBXZSBkb24ndCBuZWVkIHRvIHVzZSB0aGVcbiAgICAgIC8vIGFjdHVhbCBzdHJlYW0gZm9yIGFueXRoaW5nLCB0aG91Z2gsIGFzIHdlIGFyZSB1c2luZyB0aGUgcmVzcG9uc2Unc1xuICAgICAgLy8gYXJyYXlCdWZmZXIgbWV0aG9kIHRvIGdldCB0aGUgYm9keSwgc28gd2UgZG9uJ3Qgc3RvcmUgdGhlXG4gICAgICAvLyBSZWFkYWJsZVN0cmVhbS5cblxuXG4gICAgICBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgICBzdGFydFxuICAgICAgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG5cbiAgICAgIGFycmF5QnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGFib3J0U3RhdHVzLmNhbmNlbGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBzaGFrYSQxLnV0aWwuRXJyb3Ioc2hha2EkMS51dGlsLkVycm9yLlNldmVyaXR5LlJFQ09WRVJBQkxFLCBzaGFrYSQxLnV0aWwuRXJyb3IuQ2F0ZWdvcnkuTkVUV09SSywgc2hha2EkMS51dGlsLkVycm9yLkNvZGUuT1BFUkFUSU9OX0FCT1JURUQsIHVyaSwgcmVxdWVzdFR5cGUpO1xuICAgICAgfSBlbHNlIGlmIChhYm9ydFN0YXR1cy50aW1lZE91dCkge1xuICAgICAgICB0aHJvdyBuZXcgc2hha2EkMS51dGlsLkVycm9yKHNoYWthJDEudXRpbC5FcnJvci5TZXZlcml0eS5SRUNPVkVSQUJMRSwgc2hha2EkMS51dGlsLkVycm9yLkNhdGVnb3J5Lk5FVFdPUkssIHNoYWthJDEudXRpbC5FcnJvci5Db2RlLlRJTUVPVVQsIHVyaSwgcmVxdWVzdFR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IHNoYWthJDEudXRpbC5FcnJvcihzaGFrYSQxLnV0aWwuRXJyb3IuU2V2ZXJpdHkuUkVDT1ZFUkFCTEUsIHNoYWthJDEudXRpbC5FcnJvci5DYXRlZ29yeS5ORVRXT1JLLCBzaGFrYSQxLnV0aWwuRXJyb3IuQ29kZS5IVFRQX0VSUk9SLCB1cmksIGVycm9yLCByZXF1ZXN0VHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IEh0dHBGZXRjaFBsdWdpbi5oZWFkZXJzVG9HZW5lcmljT2JqZWN0XyhyZXNwb25zZS5oZWFkZXJzKTtcbiAgICByZXR1cm4gbWFrZVJlc3BvbnNlKGhlYWRlcnMsIGFycmF5QnVmZmVyLCByZXNwb25zZS5zdGF0dXMsIHVyaSwgcmVzcG9uc2UudXJsLCByZXF1ZXN0VHlwZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7IUhlYWRlcnN9IGhlYWRlcnNcbiAgICogQHJldHVybiB7IU9iamVjdC48c3RyaW5nLCBzdHJpbmc+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIHN0YXRpYyBoZWFkZXJzVG9HZW5lcmljT2JqZWN0XyhoZWFkZXJzKSB7XG4gICAgY29uc3QgaGVhZGVyc09iaiA9IHt9O1xuICAgIGhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgLy8gU2luY2UgRWRnZSBpbmNvcnJlY3RseSByZXR1cm4gdGhlIGhlYWRlciB3aXRoIGEgbGVhZGluZyBuZXcgbGluZVxuICAgICAgLy8gY2hhcmFjdGVyICgnXFxuJyksIHdlIHRyaW0gdGhlIGhlYWRlciBoZXJlLlxuICAgICAgaGVhZGVyc09ialtrZXkudHJpbSgpXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXJzT2JqO1xuICB9XG5cbn1cblxuSHR0cEZldGNoUGx1Z2luLnJlZ2lzdGVyID0gc2hha2FOYW1lc3BhY2UgPT4ge1xuICBzaGFrYSQxID0gc2hha2FOYW1lc3BhY2U7XG4gIC8qKlxuICAgKiBPdmVycmlkZGVuIGluIHVuaXQgdGVzdHMsIGJ1dCBjb21waWxlZCBvdXQgaW4gcHJvZHVjdGlvbi5cbiAgICpcbiAgICogQGNvbnN0IHtmdW5jdGlvbihzdHJpbmcsICFSZXF1ZXN0SW5pdCl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIEh0dHBGZXRjaFBsdWdpbi5mZXRjaF8gPSB3aW5kb3cuZmV0Y2g7XG4gIC8qKlxuICAgKiBPdmVycmlkZGVuIGluIHVuaXQgdGVzdHMsIGJ1dCBjb21waWxlZCBvdXQgaW4gcHJvZHVjdGlvbi5cbiAgICpcbiAgICogQGNvbnN0IHtmdW5jdGlvbihuZXc6IEFib3J0Q29udHJvbGxlcil9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIEh0dHBGZXRjaFBsdWdpbi5BYm9ydENvbnRyb2xsZXJfID0gd2luZG93LkFib3J0Q29udHJvbGxlcjtcbiAgLyoqXG4gICAqIE92ZXJyaWRkZW4gaW4gdW5pdCB0ZXN0cywgYnV0IGNvbXBpbGVkIG91dCBpbiBwcm9kdWN0aW9uLlxuICAgKlxuICAgKiBAY29uc3Qge2Z1bmN0aW9uKG5ldzogUmVhZGFibGVTdHJlYW0sICFPYmplY3QpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBIdHRwRmV0Y2hQbHVnaW4uUmVhZGFibGVTdHJlYW1fID0gd2luZG93LlJlYWRhYmxlU3RyZWFtO1xuICAvKipcbiAgICogT3ZlcnJpZGRlbiBpbiB1bml0IHRlc3RzLCBidXQgY29tcGlsZWQgb3V0IGluIHByb2R1Y3Rpb24uXG4gICAqXG4gICAqIEBjb25zdCB7ZnVuY3Rpb24obmV3OiBIZWFkZXJzKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgSHR0cEZldGNoUGx1Z2luLkhlYWRlcnNfID0gd2luZG93LkhlYWRlcnM7XG4gIHNoYWthJDEubmV0Lk5ldHdvcmtpbmdFbmdpbmUucmVnaXN0ZXJTY2hlbWUoJ2h0dHAnLCBIdHRwRmV0Y2hQbHVnaW4ucGFyc2UpO1xuICBzaGFrYSQxLm5ldC5OZXR3b3JraW5nRW5naW5lLnJlZ2lzdGVyU2NoZW1lKCdodHRwcycsIEh0dHBGZXRjaFBsdWdpbi5wYXJzZSk7XG4gIHNoYWthJDEubmV0Lk5ldHdvcmtpbmdFbmdpbmUucmVnaXN0ZXJTY2hlbWUoJ2Jsb2InLCBIdHRwRmV0Y2hQbHVnaW4ucGFyc2UpO1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgZ3VhcmQtZm9yLWluICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5jb25zdCBteUxvZyA9IGNvbnNvbGU7XG5jb25zdCBnb29nID0ge1xuICBhc3NlcnRzOiB7XG4gICAgYXNzZXJ0OiAocmVzdWx0LCBtZXNzYWdlKSA9PiByZXN1bHQgfHwgY29uc29sZS53YXJuKCdtZXNzYWdlJylcbiAgfVxufTtcbmNvbnN0IEFMTF9FVkVOVFNfID0gJ0FsbCc7XG5cbmZ1bmN0aW9uIFB1YmxpY1Byb21pc2UoKSB7XG4gIGxldCByZXNvbHZlUHJvbWlzZTtcbiAgbGV0IHJlamVjdFByb21pc2U7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIHJlamVjdFByb21pc2UgPSByZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5yZWplY3QgPSByZWplY3RQcm9taXNlO1xuXG4gIHRoaXMudGhlbiA9ICguLi5hcmdzKSA9PiBwcm9taXNlLnRoZW4oLi4uYXJncyk7XG5cbiAgdGhpcy5jYXRjaCA9ICguLi5hcmdzKSA9PiBwcm9taXNlLmNhdGNoKC4uLmFyZ3MpO1xufVxuXG5jbGFzcyBNdWx0aU1hcCB7XG4gIC8qKiAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKiogQHByaXZhdGUgeyFPYmplY3QuPHN0cmluZywgIUFycmF5LjxUPj59ICovXG4gICAgdGhpcy5tYXBfID0ge307XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIGtleSwgdmFsdWUgcGFpciB0byB0aGUgbWFwLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7VH0gdmFsdWVcbiAgICovXG5cblxuICBwdXNoKGtleSwgdmFsdWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKHRoaXMubWFwXy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICB0aGlzLm1hcF9ba2V5XS5wdXNoKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXBfW2tleV0gPSBbdmFsdWVdO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiB2YWx1ZXMgYnkga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge0FycmF5LjxUPn0gb3IgbnVsbCBpZiBubyBzdWNoIGtleSBleGlzdHMuXG4gICAqL1xuXG5cbiAgZ2V0KGtleSkge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm1hcF9ba2V5XTsgLy8gc2xpY2UoKSBjbG9uZXMgdGhlIGxpc3Qgc28gdGhhdCBpdCBhbmQgdGhlIG1hcCBjYW4gZWFjaCBiZSBtb2RpZmllZFxuICAgIC8vIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBvdGhlci5cblxuICAgIHJldHVybiBsaXN0ID8gbGlzdC5zbGljZSgpIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiBhbGwgdmFsdWVzLlxuICAgKiBAcmV0dXJuIHshQXJyYXkuPFQ+fVxuICAgKi9cblxuXG4gIGdldEFsbCgpIHtcbiAgICBjb25zdCBsaXN0ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1hcF8pIHtcbiAgICAgIGxpc3QucHVzaCguLi50aGlzLm1hcF9ba2V5XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNwZWNpZmljIHZhbHVlLCBpZiBpdCBleGlzdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtUfSB2YWx1ZVxuICAgKi9cblxuXG4gIHJlbW92ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMubWFwXykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1hcF9ba2V5XSA9IHRoaXMubWFwX1trZXldLmZpbHRlcihpID0+IGkgIT0gdmFsdWUpO1xuXG4gICAgaWYgKHRoaXMubWFwX1trZXldLmxlbmd0aCA9PSAwKSB7XG4gICAgICAvLyBEZWxldGUgdGhlIGFycmF5IGlmIGl0J3MgZW1wdHksIHNvIHRoYXQgfGdldHwgd2lsbCByZWxpYWJseSByZXR1cm4gbnVsbFxuICAgICAgLy8gXCJpZiBubyBzdWNoIGtleSBleGlzdHNcIiwgaW5zdGVhZCBvZiBzb21ldGltZXMgcmV0dXJuaW5nIGFuIGVtcHR5IGFycmF5LlxuICAgICAgZGVsZXRlIHRoaXMubWFwX1trZXldO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2xlYXIgYWxsIGtleXMgYW5kIHZhbHVlcyBmcm9tIHRoZSBtdWx0aW1hcC5cbiAgICovXG5cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLm1hcF8gPSB7fTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcsICFBcnJheS48VD4pfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1hcF8pIHtcbiAgICAgIGNhbGxiYWNrKGtleSwgdGhpcy5tYXBfW2tleV0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBtdWx0aW1hcC5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cblxuXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubWFwXykubGVuZ3RoO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIGFsbCB0aGUga2V5cy5cbiAgICogQHJldHVybiB7IUFycmF5LjxzdHJpbmc+fVxuICAgKi9cblxuXG4gIGtleXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubWFwXyk7XG4gIH1cblxufVxuXG5jbGFzcyBGYWtlRXZlbnRUYXJnZXQge1xuICAvKiogKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogQHByaXZhdGUge3NoYWthLnV0aWwuTXVsdGlNYXAuPHNoYWthLnV0aWwuRmFrZUV2ZW50VGFyZ2V0Lkxpc3RlbmVyVHlwZT59XG4gICAgICovXG4gICAgdGhpcy5saXN0ZW5lcnNfID0gbmV3IE11bHRpTWFwKCk7XG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBvZiBhbGwgZGlzcGF0Y2hlZCBldmVudHMuICBEZWZhdWx0cyB0byB8dGhpc3wuXG4gICAgICogQHR5cGUge0V2ZW50VGFyZ2V0fVxuICAgICAqL1xuXG4gICAgdGhpcy5kaXNwYXRjaFRhcmdldCA9IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byB0aGlzIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gbGlzdGVuIGZvci5cbiAgICogQHBhcmFtIHtzaGFrYS51dGlsLkZha2VFdmVudFRhcmdldC5MaXN0ZW5lclR5cGV9IGxpc3RlbmVyIFRoZSBjYWxsYmFjayBvclxuICAgKiAgIGxpc3RlbmVyIG9iamVjdCB0byBpbnZva2UuXG4gICAqIEBwYXJhbSB7KCFBZGRFdmVudExpc3RlbmVyT3B0aW9uc3xib29sZWFuKT19IG9wdGlvbnMgSWdub3JlZC5cbiAgICogQG92ZXJyaWRlXG4gICAqIEBleHBvcnRJbnRlcmZhY2VcbiAgICovXG5cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVyc18pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RlbmVyc18ucHVzaCh0eXBlLCBsaXN0ZW5lcik7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byB0aGlzIG9iamVjdCB0aGF0IGlzIGludm9rZWQgZm9yIGFsbCBldmVudHMgdHlwZXNcbiAgICogdGhlIG9iamVjdCBmaXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzaGFrYS51dGlsLkZha2VFdmVudFRhcmdldC5MaXN0ZW5lclR5cGV9IGxpc3RlbmVyIFRoZSBjYWxsYmFjayBvclxuICAgKiAgIGxpc3RlbmVyIG9iamVjdCB0byBpbnZva2UuXG4gICAqIEBleHBvcnRJbnRlcmZhY2VcbiAgICovXG5cblxuICBsaXN0ZW5Ub0FsbEV2ZW50cyhsaXN0ZW5lcikge1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihBTExfRVZFTlRTXywgbGlzdGVuZXIpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGlzIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJlbW92ZSBhXG4gICAqICAgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7c2hha2EudXRpbC5GYWtlRXZlbnRUYXJnZXQuTGlzdGVuZXJUeXBlfSBsaXN0ZW5lciBUaGUgY2FsbGJhY2sgb3JcbiAgICogICBsaXN0ZW5lciBvYmplY3QgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0geyhFdmVudExpc3RlbmVyT3B0aW9uc3xib29sZWFuKT19IG9wdGlvbnMgSWdub3JlZC5cbiAgICogQG92ZXJyaWRlXG4gICAqIEBleHBvcnRJbnRlcmZhY2VcbiAgICovXG5cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVyc18pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RlbmVyc18ucmVtb3ZlKHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuICAvKipcbiAgICogRGlzcGF0Y2ggYW4gZXZlbnQgZnJvbSB0aGlzIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHshRXZlbnR9IGV2ZW50IFRoZSBldmVudCB0byBiZSBkaXNwYXRjaGVkIGZyb20gdGhpcyBvYmplY3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRlZmF1bHQgYWN0aW9uIHdhcyBwcmV2ZW50ZWQuXG4gICAqIEBvdmVycmlkZVxuICAgKiBAZXhwb3J0SW50ZXJmYWNlXG4gICAqL1xuXG5cbiAgZGlzcGF0Y2hFdmVudChldmVudCkge1xuICAgIC8vIEluIG1hbnkgYnJvd3NlcnMsIGl0IGlzIGNvbXBsZXggdG8gb3ZlcndyaXRlIHByb3BlcnRpZXMgb2YgYWN0dWFsIEV2ZW50cy5cbiAgICAvLyBIZXJlIHdlIGV4cGVjdCBvbmx5IHRvIGRpc3BhdGNoIEZha2VFdmVudHMsIHdoaWNoIGFyZSBzaW1wbGVyLlxuICAgIGdvb2cuYXNzZXJ0cy5hc3NlcnQoZXZlbnQgaW5zdGFuY2VvZiBzaGFrYS51dGlsLkZha2VFdmVudCwgJ0Zha2VFdmVudFRhcmdldCBjYW4gb25seSBkaXNwYXRjaCBGYWtlRXZlbnRzIScpO1xuXG4gICAgaWYgKCF0aGlzLmxpc3RlbmVyc18pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc18uZ2V0KGV2ZW50LnR5cGUpIHx8IFtdO1xuICAgIGNvbnN0IHVuaXZlcnNhbExpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzXy5nZXQoQUxMX0VWRU5UU18pO1xuXG4gICAgaWYgKHVuaXZlcnNhbExpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmNvbmNhdCh1bml2ZXJzYWxMaXN0ZW5lcnMpO1xuICAgIH0gLy8gRXhlY3V0ZSB0aGlzIGV2ZW50IG9uIGxpc3RlbmVycyB1bnRpbCB0aGUgZXZlbnQgaGFzIGJlZW4gc3RvcHBlZCBvciB3ZVxuICAgIC8vIHJ1biBvdXQgb2YgbGlzdGVuZXJzLlxuXG5cbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgLy8gRG8gdGhpcyBldmVyeSB0aW1lLCBzaW5jZSBldmVudHMgY2FuIGJlIHJlLWRpc3BhdGNoZWQgZnJvbSBoYW5kbGVycy5cbiAgICAgIGV2ZW50LnRhcmdldCA9IHRoaXMuZGlzcGF0Y2hUYXJnZXQ7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gdGhpcy5kaXNwYXRjaFRhcmdldDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSB8aGFuZGxlRXZlbnR8IG1lbWJlciB0byB0ZXN0IGlmIHRoaXMgaXMgYVxuICAgICAgICAvLyB8RXZlbnRMaXN0ZW5lcnwgaW5zdGFuY2Ugb3IgYSBiYXNpYyBmdW5jdGlvbi5cbiAgICAgICAgaWYgKGxpc3RlbmVyLmhhbmRsZUV2ZW50KSB7XG4gICAgICAgICAgbGlzdGVuZXIuaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgLy8gRXhjZXB0aW9ucyBkdXJpbmcgZXZlbnQgaGFuZGxlcnMgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIGNhbGxlcixcbiAgICAgICAgLy8gYnV0IHNob3VsZCBhcHBlYXIgb24gdGhlIGNvbnNvbGUgYXMgdW5jYXVnaHQsIGFjY29yZGluZyB0byBNRE46XG4gICAgICAgIC8vIGh0dHBzOi8vbXpsLmxhLzJKWGd3Um9cbiAgICAgICAgbXlMb2cuZXJyb3IoJ1VuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBldmVudCBoYW5kbGVyJywgZXhjZXB0aW9uLCBleGNlcHRpb24gPyBleGNlcHRpb24ubWVzc2FnZSA6IG51bGwsIGV4Y2VwdGlvbiA/IGV4Y2VwdGlvbi5zdGFjayA6IG51bGwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuc3RvcHBlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgfVxuICAvKipcbiAgICogQG92ZXJyaWRlXG4gICAqIEBleHBvcnRJbnRlcmZhY2VcbiAgICovXG5cblxuICByZWxlYXNlKCkge1xuICAgIHRoaXMubGlzdGVuZXJzXyA9IG51bGw7XG4gIH1cblxufVxuXG5jb25zdCB3YWl0Rm9yUmVhZHlTdGF0ZSA9IChtZWRpYUVsZW1lbnQsIHJlYWR5U3RhdGUsIGV2ZW50TWFuYWdlciwgY2FsbGJhY2spID0+IHtcbiAgY29uc3QgUkVBRFlfU1RBVEVTX1RPX0VWRU5UX05BTUVTXyA9IFtbd2luZG93LkhUTUxNZWRpYUVsZW1lbnQuSEFWRV9NRVRBREFUQSwgJ2xvYWRlZG1ldGFkYXRhJ10sIFt3aW5kb3cuSFRNTE1lZGlhRWxlbWVudC5IQVZFX0NVUlJFTlRfREFUQSwgJ2xvYWRlZGRhdGEnXSwgW3dpbmRvdy5IVE1MTWVkaWFFbGVtZW50LkhBVkVfRlVUVVJFX0RBVEEsICdjYW5wbGF5J10sIFt3aW5kb3cuSFRNTE1lZGlhRWxlbWVudC5IQVZFX0VOT1VHSF9EQVRBLCAnY2FucGxheXRocm91Z2gnXV07XG5cbiAgaWYgKHJlYWR5U3RhdGUgPT0gd2luZG93LkhUTUxNZWRpYUVsZW1lbnQuSEFWRV9OT1RISU5HIHx8IG1lZGlhRWxlbWVudC5yZWFkeVN0YXRlID49IHJlYWR5U3RhdGUpIHtcbiAgICBjYWxsYmFjaygpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGV2ZW50TmFtZSA9IFJFQURZX1NUQVRFU19UT19FVkVOVF9OQU1FU18uZmluZCh4ID0+IHhbMF0gPT09IHJlYWR5U3RhdGUpWzFdO1xuICAgIGV2ZW50TWFuYWdlci5saXN0ZW5PbmNlKG1lZGlhRWxlbWVudCwgZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gIH1cbn07XG5cbmNsYXNzIFBhdGNoZWRNZWRpYUtleXNBcHBsZSB7XG4gIC8qKlxuICAgKiBJbnN0YWxscyB0aGUgcG9seWZpbGwgaWYgbmVlZGVkLlxuICAgKiBAZXhwb3J0XG4gICAqL1xuICBzdGF0aWMgaW5zdGFsbChzaGFrYSkge1xuICAgIGlmICghd2luZG93LkhUTUxWaWRlb0VsZW1lbnQgfHwgIXdpbmRvdy5XZWJLaXRNZWRpYUtleXMpIHtcbiAgICAgIC8vIE5vIEhUTUw1IHZpZGVvIG9yIG5vIHByZWZpeGVkIEVNRS5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBteUxvZy5pbmZvKCdVc2luZyBBcHBsZS1wcmVmaXhlZCBFTUUnKTsgLy8gRGVsZXRlIG1lZGlhS2V5cyB0byB3b3JrIGFyb3VuZCBzdHJpY3QgbW9kZSBjb21wYXRpYmlsaXR5IGlzc3Vlcy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcblxuICAgIGRlbGV0ZSB3aW5kb3cuSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUubWVkaWFLZXlzOyAvLyBXb3JrIGFyb3VuZCByZWFkLW9ubHkgZGVjbGFyYXRpb24gZm9yIG1lZGlhS2V5cyBieSB1c2luZyBhIHN0cmluZy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcblxuICAgIHdpbmRvdy5IVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5tZWRpYUtleXMgPSBudWxsOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcblxuICAgIHdpbmRvdy5IVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5zZXRNZWRpYUtleXMgPSBQYXRjaGVkTWVkaWFLZXlzQXBwbGUuc2V0TWVkaWFLZXlzOyAvLyBJbnN0YWxsIHBhdGNoZXNcblxuICAgIHdpbmRvdy5NZWRpYUtleXMgPSBQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlzO1xuICAgIHdpbmRvdy5NZWRpYUtleVN5c3RlbUFjY2VzcyA9IFBhdGNoZWRNZWRpYUtleXNBcHBsZS5NZWRpYUtleVN5c3RlbUFjY2VzcztcbiAgICBuYXZpZ2F0b3IucmVxdWVzdE1lZGlhS2V5U3lzdGVtQWNjZXNzID0gUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLnJlcXVlc3RNZWRpYUtleVN5c3RlbUFjY2VzcztcbiAgICB3aW5kb3cuc2hha2FNZWRpYUtleXNQb2x5ZmlsbCA9IHRydWU7XG5cbiAgICBjb25zdCBkZWZhdWx0SW5pdERhdGFUcmFuc2Zvcm0gPSAoaW5pdERhdGEsIGluaXREYXRhVHlwZSwgZHJtSW5mbykgPT4ge1xuICAgICAgaWYgKGluaXREYXRhVHlwZSA9PT0gJ3NrZCcpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGRlZmF1bHRHZXRDb250ZW50SWQsXG4gICAgICAgICAgaW5pdERhdGFUcmFuc2Zvcm1cbiAgICAgICAgfSA9IHNoYWthLnV0aWwuRmFpclBsYXlVdGlscztcbiAgICAgICAgY29uc3QgY2VydCA9IGRybUluZm8uc2VydmVyQ2VydGlmaWNhdGU7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRJZCA9IGRlZmF1bHRHZXRDb250ZW50SWQoaW5pdERhdGEpO1xuICAgICAgICByZXR1cm4gaW5pdERhdGFUcmFuc2Zvcm0oaW5pdERhdGEsIGNvbnRlbnRJZCwgY2VydCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbml0RGF0YTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dXBQbGF5ZXIgPSBwbGF5ZXIgPT4ge1xuICAgICAgcGxheWVyLmxpY2Vuc2VSZXF1ZXN0SGFuZGxlciA9IHJlcXVlc3QgPT4ge1xuICAgICAgICBjb25zdCBiYXNlNjRQYXlsb2FkID0gZW5jb2RlVVJJQ29tcG9uZW50KGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5uZXcgVWludDhBcnJheShyZXF1ZXN0LmJvZHkpKSkpO1xuICAgICAgICBjb25zdCBjb250ZW50SWQgPSBlbmNvZGVVUklDb21wb25lbnQobmV3IFRleHREZWNvZGVyKCd1dGYtOCcpLmRlY29kZShyZXF1ZXN0LmluaXREYXRhKS5zbGljZSg2KSk7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJztcbiAgICAgICAgcmVxdWVzdC5ib2R5ID0gYHNwYz0ke2Jhc2U2NFBheWxvYWR9JmFzc2V0X2lkPSR7Y29udGVudElkfWA7XG4gICAgICB9O1xuXG4gICAgICBwbGF5ZXIuY29uZmlndXJlKHtcbiAgICAgICAgZHJtOiB7XG4gICAgICAgICAgaW5pdERhdGFUcmFuc2Zvcm06IGRlZmF1bHRJbml0RGF0YVRyYW5zZm9ybVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHBsYXllci5nZXROZXR3b3JraW5nRW5naW5lKCkucmVnaXN0ZXJSZXNwb25zZUZpbHRlcigodHlwZSwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHR5cGUgIT09IHNoYWthLm5ldC5OZXR3b3JraW5nRW5naW5lLlJlcXVlc3RUeXBlLkxJQ0VOU0UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JykuZGVjb2RlKHJlc3BvbnNlLmRhdGEpLnRyaW0oKTtcblxuICAgICAgICBpZiAocmVzcG9uc2VUZXh0LnNsaWNlKDAsIDUpID09PSAnPGNrYz4nICYmIHJlc3BvbnNlVGV4dC5zbGljZSgtNikgPT09ICc8L2NrYz4nKSB7XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IFVpbnQ4QXJyYXkuZnJvbShhdG9iKHJlc3BvbnNlVGV4dC5zbGljZSg1LCAtNikpLCBjID0+IGMuY2hhckNvZGVBdCgwKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQYXRjaGVkTWVkaWFLZXlzQXBwbGUuc2V0dXBQbGF5ZXIgPSBzZXR1cFBsYXllcjtcbiAgfVxuICAvKipcbiAgICogQW4gaW1wbGVtZW50YXRpb24gb2YgbmF2aWdhdG9yLnJlcXVlc3RNZWRpYUtleVN5c3RlbUFjY2Vzcy5cbiAgICogUmV0cmlldmVzIGEgTWVkaWFLZXlTeXN0ZW1BY2Nlc3Mgb2JqZWN0LlxuICAgKlxuICAgKiBAdGhpcyB7IU5hdmlnYXRvcn1cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVN5c3RlbVxuICAgKiBAcGFyYW0geyFBcnJheS48IU1lZGlhS2V5U3lzdGVtQ29uZmlndXJhdGlvbj59IHN1cHBvcnRlZENvbmZpZ3VyYXRpb25zXG4gICAqIEByZXR1cm4geyFQcm9taXNlLjwhTWVkaWFLZXlTeXN0ZW1BY2Nlc3M+fVxuICAgKi9cblxuXG4gIHN0YXRpYyByZXF1ZXN0TWVkaWFLZXlTeXN0ZW1BY2Nlc3Moa2V5U3lzdGVtLCBzdXBwb3J0ZWRDb25maWd1cmF0aW9ucykge1xuICAgIG15TG9nLmRlYnVnKCdQYXRjaGVkTWVkaWFLZXlzQXBwbGUucmVxdWVzdE1lZGlhS2V5U3lzdGVtQWNjZXNzJyk7XG4gICAgY29uc29sZS5pbmZvKHtcbiAgICAgIGtleVN5c3RlbSxcbiAgICAgIHN1cHBvcnRlZENvbmZpZ3VyYXRpb25zXG4gICAgfSk7XG4gICAgZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzID09IG5hdmlnYXRvciwgJ2JhZCBcInRoaXNcIiBmb3IgcmVxdWVzdE1lZGlhS2V5U3lzdGVtQWNjZXNzJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKHtcbiAgICAgICAga2V5U3lzdGVtLFxuICAgICAgICBzdXBwb3J0ZWRDb25maWd1cmF0aW9uc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhY2Nlc3MgPSBuZXcgUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLk1lZGlhS2V5U3lzdGVtQWNjZXNzKGtleVN5c3RlbSwgc3VwcG9ydGVkQ29uZmlndXJhdGlvbnMpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgIC8qKiBAdHlwZSB7IU1lZGlhS2V5U3lzdGVtQWNjZXNzfSAqL1xuICAgICAgYWNjZXNzKTtcbiAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXhjZXB0aW9uKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChleGNlcHRpb24pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQW4gaW1wbGVtZW50YXRpb24gb2Ygd2luZG93LkhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnNldE1lZGlhS2V5cy5cbiAgICogQXR0YWNoZXMgYSBNZWRpYUtleXMgb2JqZWN0IHRvIHRoZSBtZWRpYSBlbGVtZW50LlxuICAgKlxuICAgKiBAdGhpcyB7IXdpbmRvdy5IVE1MTWVkaWFFbGVtZW50fVxuICAgKiBAcGFyYW0ge01lZGlhS2V5c30gbWVkaWFLZXlzXG4gICAqIEByZXR1cm4geyFQcm9taXNlfVxuICAgKi9cblxuXG4gIHN0YXRpYyBzZXRNZWRpYUtleXMobWVkaWFLZXlzKSB7XG4gICAgbXlMb2cuZGVidWcoJ1BhdGNoZWRNZWRpYUtleXNBcHBsZS5zZXRNZWRpYUtleXMnKTtcbiAgICBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTE1lZGlhRWxlbWVudCwgJ2JhZCBcInRoaXNcIiBmb3Igc2V0TWVkaWFLZXlzJyk7XG4gICAgY29uc3QgbmV3TWVkaWFLZXlzID1cbiAgICAvKiogQHR5cGUge3dpbmRvdy5zaGFrYS5wb2x5ZmlsbC5QYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlzfSAqL1xuICAgIG1lZGlhS2V5cztcbiAgICBjb25zdCBvbGRNZWRpYUtleXMgPVxuICAgIC8qKiBAdHlwZSB7d2luZG93LnNoYWthLnBvbHlmaWxsLlBhdGNoZWRNZWRpYUtleXNBcHBsZS5NZWRpYUtleXN9ICovXG4gICAgdGhpcy5tZWRpYUtleXM7XG5cbiAgICBpZiAob2xkTWVkaWFLZXlzICYmIG9sZE1lZGlhS2V5cyAhPSBuZXdNZWRpYUtleXMpIHtcbiAgICAgIGdvb2cuYXNzZXJ0cy5hc3NlcnQob2xkTWVkaWFLZXlzIGluc3RhbmNlb2YgUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLk1lZGlhS2V5cywgJ25vbi1wb2x5ZmlsbCBpbnN0YW5jZSBvZiBvbGRNZWRpYUtleXMnKTsgLy8gSGF2ZSB0aGUgb2xkIE1lZGlhS2V5cyBzdG9wIGxpc3RlbmluZyB0byBldmVudHMgb24gdGhlIHZpZGVvIHRhZy5cblxuICAgICAgb2xkTWVkaWFLZXlzLnNldE1lZGlhKG51bGwpO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLm1lZGlhS2V5czsgLy8gaW4gY2FzZSB0aGVyZSBpcyBhbiBleGlzdGluZyBnZXR0ZXJcblxuICAgIHRoaXMubWVkaWFLZXlzID0gbWVkaWFLZXlzOyAvLyB3b3JrIGFyb3VuZCByZWFkLW9ubHkgZGVjbGFyYXRpb25cblxuICAgIGlmIChuZXdNZWRpYUtleXMpIHtcbiAgICAgIGdvb2cuYXNzZXJ0cy5hc3NlcnQobmV3TWVkaWFLZXlzIGluc3RhbmNlb2YgUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLk1lZGlhS2V5cywgJ25vbi1wb2x5ZmlsbCBpbnN0YW5jZSBvZiBuZXdNZWRpYUtleXMnKTtcbiAgICAgIHJldHVybiBuZXdNZWRpYUtleXMuc2V0TWVkaWEodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGVyIGZvciB0aGUgbmF0aXZlIG1lZGlhIGVsZW1lbnRzIHdlYmtpdG5lZWRrZXkgZXZlbnQuXG4gICAqXG4gICAqIEB0aGlzIHshd2luZG93LkhUTUxNZWRpYUVsZW1lbnR9XG4gICAqIEBwYXJhbSB7IU1lZGlhS2V5RXZlbnR9IGV2ZW50XG4gICAqIEBzdXBwcmVzcyB7Y29uc3RhbnRQcm9wZXJ0eX0gV2UgcmVhc3NpZ24gd2hhdCB3b3VsZCBiZSBjb25zdCBvbiBhIHJlYWxcbiAgICogICBNZWRpYUVuY3J5cHRlZEV2ZW50LCBidXQgaW4gb3VyIGxvb2stYWxpa2UgZXZlbnQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgc3RhdGljIG9uV2Via2l0TmVlZEtleV8oZXZlbnQpIHtcbiAgICBteUxvZy5kZWJ1ZygnUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLm9uV2Via2l0TmVlZEtleV8nLCBldmVudCk7XG4gICAgY29uc3Qge1xuICAgICAgbWVkaWFLZXlzXG4gICAgfSA9IHRoaXM7XG4gICAgZ29vZy5hc3NlcnRzLmFzc2VydChtZWRpYUtleXMgaW5zdGFuY2VvZiBQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlzLCAnbm9uLXBvbHlmaWxsIGluc3RhbmNlIG9mIG5ld01lZGlhS2V5cycpO1xuICAgIGdvb2cuYXNzZXJ0cy5hc3NlcnQoZXZlbnQuaW5pdERhdGEgIT0gbnVsbCwgJ21pc3NpbmcgaW5pdCBkYXRhIScpOyAvLyBDb252ZXJ0IHRoZSBwcmVmaXhlZCBpbml0IGRhdGEgdG8gbWF0Y2ggdGhlIG5hdGl2ZSAnZW5jcnlwdGVkJyBldmVudC5cblxuICAgIGNvbnN0IHVpbnQ4ID0gd2luZG93LnNoYWthLnV0aWwuQnVmZmVyVXRpbHMudG9VaW50OChldmVudC5pbml0RGF0YSk7XG4gICAgY29uc3QgZGF0YXZpZXcgPSB3aW5kb3cuc2hha2EudXRpbC5CdWZmZXJVdGlscy50b0RhdGFWaWV3KHVpbnQ4KTsgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYSA0IGJ5dGUgbGl0dGxlLWVuZGlhbiBpbnQsIHdoaWNoIGlzIHRoZSBsZW5ndGggb2ZcbiAgICAvLyB0aGUgc2Vjb25kIHBhcnQuXG5cbiAgICBjb25zdCBsZW5ndGggPSBkYXRhdmlldy5nZXRVaW50MzIoXG4gICAgLyogcG9zaXRpb249ICovXG4gICAgMCxcbiAgICAvKiBsaXR0bGVFbmRpYW49ICovXG4gICAgdHJ1ZSk7XG5cbiAgICBpZiAobGVuZ3RoICsgNCAhPSB1aW50OC5ieXRlTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWFsZm9ybWVkIEZhaXJQbGF5IGluaXQgZGF0YScpO1xuICAgIH0gLy8gVGhlIHJlbWFpbmRlciBpcyBhIFVURi0xNiBza2QgVVJMLiAgQ29udmVydCB0aGlzIHRvIFVURi04IGFuZCBwYXNzIG9uLlxuXG5cbiAgICBjb25zdCBzdHIgPSB3aW5kb3cuc2hha2EudXRpbC5TdHJpbmdVdGlscy5mcm9tVVRGMTYodWludDguc3ViYXJyYXkoNCksXG4gICAgLyogbGl0dGxlRW5kaWFuPSAqL1xuICAgIHRydWUpO1xuICAgIGNvbnN0IGluaXREYXRhID0gd2luZG93LnNoYWthLnV0aWwuU3RyaW5nVXRpbHMudG9VVEY4KHN0cik7IC8vIE5PVEU6IEJlY2F1c2UgXCJ0aGlzXCIgaXMgYSByZWFsIEV2ZW50VGFyZ2V0LCB0aGUgZXZlbnQgd2UgZGlzcGF0Y2ggaGVyZVxuICAgIC8vIG11c3QgYWxzbyBiZSBhIHJlYWwgRXZlbnQuXG5cbiAgICBjb25zdCBldmVudDIgPSBuZXcgRXZlbnQoJ2VuY3J5cHRlZCcpO1xuICAgIGNvbnN0IGVuY3J5cHRlZEV2ZW50ID1cbiAgICAvKiogQHR5cGUgeyFNZWRpYUVuY3J5cHRlZEV2ZW50fSAqL1xuXG4gICAgLyoqIEB0eXBlIHs/fSAqL1xuICAgIGV2ZW50MjtcbiAgICBlbmNyeXB0ZWRFdmVudC5pbml0RGF0YVR5cGUgPSAnc2tkJztcbiAgICBlbmNyeXB0ZWRFdmVudC5pbml0RGF0YSA9IHdpbmRvdy5zaGFrYS51dGlsLkJ1ZmZlclV0aWxzLnRvQXJyYXlCdWZmZXIoaW5pdERhdGEpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudDIpO1xuICB9XG5cbn1cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgTWVkaWFLZXlTeXN0ZW1BY2Nlc3MuXG4gKlxuICogQGltcGxlbWVudHMge01lZGlhS2V5U3lzdGVtQWNjZXNzfVxuICovXG5cblxuUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLk1lZGlhS2V5U3lzdGVtQWNjZXNzID0gY2xhc3Mge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVN5c3RlbVxuICAgKiBAcGFyYW0geyFBcnJheS48IU1lZGlhS2V5U3lzdGVtQ29uZmlndXJhdGlvbj59IHN1cHBvcnRlZENvbmZpZ3VyYXRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihrZXlTeXN0ZW0sIHN1cHBvcnRlZENvbmZpZ3VyYXRpb25zKSB7XG4gICAgbXlMb2cuZGVidWcoJ1BhdGNoZWRNZWRpYUtleXNBcHBsZS5NZWRpYUtleVN5c3RlbUFjY2VzcycpO1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuXG4gICAgdGhpcy5rZXlTeXN0ZW0gPSBrZXlTeXN0ZW07XG4gICAgLyoqIEBwcml2YXRlIHshTWVkaWFLZXlTeXN0ZW1Db25maWd1cmF0aW9ufSAqL1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uXzsgLy8gT3B0aW1pemF0aW9uOiBXZWJLaXRNZWRpYUtleXMuaXNUeXBlU3VwcG9ydGVkIGRlbGF5cyByZXNwb25zZXMgYnkgYVxuICAgIC8vIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aW1lLCBwb3NzaWJseSB0byBkaXNjb3VyYWdlIGZpbmdlcnByaW50aW5nLlxuICAgIC8vIFNpbmNlIHdlIGtub3cgb25seSBGYWlyUGxheSBpcyBzdXBwb3J0ZWQgaGVyZSwgbGV0J3Mgc2tpcCBxdWVyaWVzIGZvclxuICAgIC8vIGFueXRoaW5nIGVsc2UgdG8gc3BlZWQgdXAgdGhlIHByb2Nlc3MuXG5cbiAgICBpZiAoa2V5U3lzdGVtLnN0YXJ0c1dpdGgoJ2NvbS5hcHBsZS5mcHMnKSkge1xuICAgICAgZm9yIChjb25zdCBjZmcgb2Ygc3VwcG9ydGVkQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbmV3Q2ZnID0gdGhpcy5jaGVja0NvbmZpZ18oY2ZnKTtcblxuICAgICAgICBpZiAobmV3Q2ZnKSB7XG4gICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uXyA9IG5ld0NmZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEFjY29yZGluZyB0byB0aGUgc3BlYywgdGhpcyBzaG91bGQgYmUgYSBET01FeGNlcHRpb24sIGJ1dCB0aGVyZSBpcyBub3QgYVxuICAgIC8vIHB1YmxpYyBjb25zdHJ1Y3RvciBmb3IgdGhhdC4gIFNvIHdlIG1ha2UgdGhpcyBsb29rLWFsaWtlIGluc3RlYWQuXG5cblxuICAgIGNvbnN0IHVuc3VwcG9ydGVkS2V5U3lzdGVtRXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGtleVN5c3RlbScpO1xuICAgIHVuc3VwcG9ydGVkS2V5U3lzdGVtRXJyb3IubmFtZSA9ICdOb3RTdXBwb3J0ZWRFcnJvcic7XG4gICAgdW5zdXBwb3J0ZWRLZXlTeXN0ZW1FcnJvci5jb2RlID0gRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSO1xuICAgIHRocm93IHVuc3VwcG9ydGVkS2V5U3lzdGVtRXJyb3I7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGEgc2luZ2xlIGNvbmZpZyBmb3IgTWVkaWFLZXlTeXN0ZW1BY2Nlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVkaWFLZXlTeXN0ZW1Db25maWd1cmF0aW9ufSBjZmcgVGhlIHJlcXVlc3RlZCBjb25maWcuXG4gICAqIEByZXR1cm4gez9NZWRpYUtleVN5c3RlbUNvbmZpZ3VyYXRpb259IEEgbWF0Y2hpbmcgY29uZmlnIHdlIGNhbiBzdXBwb3J0LCBvclxuICAgKiAgIG51bGwgaWYgdGhlIGlucHV0IGlzIG5vdCBzdXBwb3J0YWJsZS5cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBjaGVja0NvbmZpZ18oY2ZnKSB7XG4gICAgaWYgKGNmZy5wZXJzaXN0ZW50U3RhdGUgPT0gJ3JlcXVpcmVkJykge1xuICAgICAgLy8gTm90IHN1cHBvcnRlZCBieSB0aGUgcHJlZml4ZWQgQVBJLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBDcmVhdGUgYSBuZXcgY29uZmlnIG9iamVjdCBhbmQgc3RhcnQgYWRkaW5nIGluIHRoZSBwaWVjZXMgd2hpY2ggd2UgZmluZFxuICAgIC8vIHN1cHBvcnQgZm9yLiAgV2Ugd2lsbCByZXR1cm4gdGhpcyBmcm9tIGdldENvbmZpZ3VyYXRpb24oKSBsYXRlciBpZlxuICAgIC8vIGFza2VkLlxuXG4gICAgLyoqIEB0eXBlIHshTWVkaWFLZXlTeXN0ZW1Db25maWd1cmF0aW9ufSAqL1xuXG5cbiAgICBjb25zdCBuZXdDZmcgPSB7XG4gICAgICBhdWRpb0NhcGFiaWxpdGllczogW10sXG4gICAgICB2aWRlb0NhcGFiaWxpdGllczogW10sXG4gICAgICAvLyBJdCBpcyB0ZWNobmljYWxseSBhZ2FpbnN0IHNwZWMgdG8gcmV0dXJuIHRoZXNlIGFzIG9wdGlvbmFsLCBidXQgd2VcbiAgICAgIC8vIGRvbid0IHRydWx5IGtub3cgdGhlaXIgdmFsdWVzIGZyb20gdGhlIHByZWZpeGVkIEFQSTpcbiAgICAgIHBlcnNpc3RlbnRTdGF0ZTogJ29wdGlvbmFsJyxcbiAgICAgIGRpc3RpbmN0aXZlSWRlbnRpZmllcjogJ29wdGlvbmFsJyxcbiAgICAgIC8vIFByZXRlbmQgdGhlIHJlcXVlc3RlZCBpbml0IGRhdGEgdHlwZXMgYXJlIHN1cHBvcnRlZCwgc2luY2Ugd2UgZG9uJ3RcbiAgICAgIC8vIHJlYWxseSBrbm93IHRoYXQgZWl0aGVyOlxuICAgICAgaW5pdERhdGFUeXBlczogY2ZnLmluaXREYXRhVHlwZXMsXG4gICAgICBzZXNzaW9uVHlwZXM6IFsndGVtcG9yYXJ5J10sXG4gICAgICBsYWJlbDogY2ZnLmxhYmVsXG4gICAgfTsgLy8gUGF0Y2hlZE1lZGlhS2V5c0FwcGxlIHRlc3RzIGZvciBrZXkgc3lzdGVtIGF2YWlsYWJpbGl0eSB0aHJvdWdoXG4gICAgLy8gV2ViS2l0TWVkaWFLZXlzLmlzVHlwZVN1cHBvcnRlZC5cblxuICAgIGxldCByYW5BbnlUZXN0cyA9IGZhbHNlO1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBpZiAoY2ZnLmF1ZGlvQ2FwYWJpbGl0aWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhcCBvZiBjZmcuYXVkaW9DYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgaWYgKGNhcC5jb250ZW50VHlwZSkge1xuICAgICAgICAgIHJhbkFueVRlc3RzID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGNhcC5jb250ZW50VHlwZS5zcGxpdCgnOycpWzBdO1xuXG4gICAgICAgICAgaWYgKHdpbmRvdy5XZWJLaXRNZWRpYUtleXMuaXNUeXBlU3VwcG9ydGVkKHRoaXMua2V5U3lzdGVtLCBjb250ZW50VHlwZSkpIHtcbiAgICAgICAgICAgIG5ld0NmZy5hdWRpb0NhcGFiaWxpdGllcy5wdXNoKGNhcCk7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2ZnLnZpZGVvQ2FwYWJpbGl0aWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhcCBvZiBjZmcudmlkZW9DYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgaWYgKGNhcC5jb250ZW50VHlwZSkge1xuICAgICAgICAgIHJhbkFueVRlc3RzID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGNhcC5jb250ZW50VHlwZS5zcGxpdCgnOycpWzBdO1xuXG4gICAgICAgICAgaWYgKHdpbmRvdy5XZWJLaXRNZWRpYUtleXMuaXNUeXBlU3VwcG9ydGVkKHRoaXMua2V5U3lzdGVtLCBjb250ZW50VHlwZSkpIHtcbiAgICAgICAgICAgIG5ld0NmZy52aWRlb0NhcGFiaWxpdGllcy5wdXNoKGNhcCk7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJhbkFueVRlc3RzKSB7XG4gICAgICAvLyBJZiBubyBzcGVjaWZpYyB0eXBlcyB3ZXJlIHJlcXVlc3RlZCwgd2UgY2hlY2sgYWxsIGNvbW1vbiB0eXBlcyB0b1xuICAgICAgLy8gZmluZCBvdXQgaWYgdGhlIGtleSBzeXN0ZW0gaXMgcHJlc2VudCBhdCBhbGwuXG4gICAgICBzdWNjZXNzID0gd2luZG93LldlYktpdE1lZGlhS2V5cy5pc1R5cGVTdXBwb3J0ZWQodGhpcy5rZXlTeXN0ZW0sICd2aWRlby9tcDQnKTtcbiAgICB9XG5cbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG5ld0NmZztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKiogQG92ZXJyaWRlICovXG5cblxuICBjcmVhdGVNZWRpYUtleXMoKSB7XG4gICAgbXlMb2cuZGVidWcoJ1BhdGNoZWRNZWRpYUtleXNBcHBsZS5NZWRpYUtleVN5c3RlbUFjY2Vzcy5jcmVhdGVNZWRpYUtleXMnKTtcbiAgICBjb25zdCBtZWRpYUtleXMgPSBuZXcgUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLk1lZGlhS2V5cyh0aGlzLmtleVN5c3RlbSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAvKiogQHR5cGUgeyFNZWRpYUtleXN9ICovXG4gICAgbWVkaWFLZXlzKTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICovXG5cblxuICBnZXRDb25maWd1cmF0aW9uKCkge1xuICAgIG15TG9nLmRlYnVnKCdQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlTeXN0ZW1BY2Nlc3MuZ2V0Q29uZmlndXJhdGlvbicpO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25fO1xuICB9XG5cbn07XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIE1lZGlhS2V5cy5cbiAqXG4gKiBAaW1wbGVtZW50cyB7TWVkaWFLZXlzfVxuICovXG5cblBhdGNoZWRNZWRpYUtleXNBcHBsZS5NZWRpYUtleXMgPSBjbGFzcyB7XG4gIC8qKiBAcGFyYW0ge3N0cmluZ30ga2V5U3lzdGVtICovXG4gIGNvbnN0cnVjdG9yKGtleVN5c3RlbSkge1xuICAgIG15TG9nLmRlYnVnKCdQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlzJyk7XG4gICAgLyoqIEBwcml2YXRlIHshV2ViS2l0TWVkaWFLZXlzfSAqL1xuXG4gICAgdGhpcy5uYXRpdmVNZWRpYUtleXNfID0gbmV3IHdpbmRvdy5XZWJLaXRNZWRpYUtleXMoa2V5U3lzdGVtKTtcbiAgICAvKiogQHByaXZhdGUgeyF3aW5kb3cuc2hha2EudXRpbC5FdmVudE1hbmFnZXJ9ICovXG5cbiAgICB0aGlzLmV2ZW50TWFuYWdlcl8gPSBuZXcgd2luZG93LnNoYWthLnV0aWwuRXZlbnRNYW5hZ2VyKCk7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqL1xuXG5cbiAgY3JlYXRlU2Vzc2lvbihzZXNzaW9uVHlwZSkge1xuICAgIG15TG9nLmRlYnVnKCdQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlzLmNyZWF0ZVNlc3Npb24nKTtcbiAgICBzZXNzaW9uVHlwZSA9IHNlc3Npb25UeXBlIHx8ICd0ZW1wb3JhcnknOyAvLyBGb3Igbm93LCBvbmx5IHRoZSAndGVtcG9yYXJ5JyB0eXBlIGlzIHN1cHBvcnRlZC5cblxuICAgIGlmIChzZXNzaW9uVHlwZSAhPSAndGVtcG9yYXJ5Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgU2Vzc2lvbiB0eXBlICR7c2Vzc2lvblR5cGV9IGlzIHVuc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlTZXNzaW9uKHRoaXMubmF0aXZlTWVkaWFLZXlzXywgc2Vzc2lvblR5cGUpO1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKi9cblxuXG4gIHNldFNlcnZlckNlcnRpZmljYXRlKHNlcnZlckNlcnRpZmljYXRlKSB7XG4gICAgbXlMb2cuZGVidWcoJ1BhdGNoZWRNZWRpYUtleXNBcHBsZS5NZWRpYUtleXMuc2V0U2VydmVyQ2VydGlmaWNhdGUnKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHt3aW5kb3cuSFRNTE1lZGlhRWxlbWVudH0gbWVkaWFcbiAgICogQHByb3RlY3RlZFxuICAgKiBAcmV0dXJuIHshUHJvbWlzZX1cbiAgICovXG5cblxuICBzZXRNZWRpYShtZWRpYSkge1xuICAgIC8vIFJlbW92ZSBhbnkgb2xkIGxpc3RlbmVycy5cbiAgICB0aGlzLmV2ZW50TWFuYWdlcl8ucmVtb3ZlQWxsKCk7IC8vIEl0IGlzIHZhbGlkIGZvciBtZWRpYSB0byBiZSBudWxsOyBudWxsIGlzIHVzZWQgdG8gZmxhZyB0aGF0IGV2ZW50XG4gICAgLy8gaGFuZGxlcnMgbmVlZCB0byBiZSBjbGVhbmVkIHVwLlxuXG4gICAgaWYgKCFtZWRpYSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0gLy8gSW50ZXJjZXB0IGFuZCB0cmFuc2xhdGUgdGhlc2UgcHJlZml4ZWQgRU1FIGV2ZW50cy5cblxuXG4gICAgdGhpcy5ldmVudE1hbmFnZXJfLmxpc3RlbihtZWRpYSwgJ3dlYmtpdG5lZWRrZXknLFxuICAgIC8qKiBAdHlwZSB7d2luZG93LnNoYWthLnV0aWwuRXZlbnRNYW5hZ2VyLkxpc3RlbmVyVHlwZX0gKi9cbiAgICBQYXRjaGVkTWVkaWFLZXlzQXBwbGUub25XZWJraXROZWVkS2V5Xyk7IC8vIFdyYXAgbmF0aXZlIHdpbmRvdy5IVE1MTWVkaWFFbGVtZW50LndlYmtpdFNldE1lZGlhS2V5cyB3aXRoIGEgUHJvbWlzZS5cblxuICAgIHRyeSB7XG4gICAgICAvLyBTb21lIGJyb3dzZXJzIHJlcXVpcmUgdGhhdCByZWFkeVN0YXRlID49MSBiZWZvcmUgbWVkaWFLZXlzIGNhbiBiZVxuICAgICAgLy8gc2V0LCBzbyBjaGVjayB0aGlzIGFuZCB3YWl0IGZvciBsb2FkZWRtZXRhZGF0YSBpZiB3ZSBhcmUgbm90IGluIHRoZVxuICAgICAgLy8gY29ycmVjdCBzdGF0ZVxuICAgICAgd2FpdEZvclJlYWR5U3RhdGUobWVkaWEsIHdpbmRvdy5IVE1MTWVkaWFFbGVtZW50LkhBVkVfTUVUQURBVEEsIHRoaXMuZXZlbnRNYW5hZ2VyXywgKCkgPT4ge1xuICAgICAgICBtZWRpYS53ZWJraXRTZXRNZWRpYUtleXModGhpcy5uYXRpdmVNZWRpYUtleXNfKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGV4Y2VwdGlvbik7XG4gICAgfVxuICB9XG5cbn07XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIE1lZGlhS2V5U2Vzc2lvbi5cbiAqXG4gKiBAaW1wbGVtZW50cyB7TWVkaWFLZXlTZXNzaW9ufVxuICovXG5cblBhdGNoZWRNZWRpYUtleXNBcHBsZS5NZWRpYUtleVNlc3Npb24gPSBjbGFzcyBleHRlbmRzIEZha2VFdmVudFRhcmdldCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1dlYktpdE1lZGlhS2V5c30gbmF0aXZlTWVkaWFLZXlzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uVHlwZVxuICAgKi9cbiAgY29uc3RydWN0b3IobmF0aXZlTWVkaWFLZXlzLCBzZXNzaW9uVHlwZSkge1xuICAgIG15TG9nLmRlYnVnKCdQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlTZXNzaW9uJyk7XG4gICAgc3VwZXIoKTtcbiAgICAvKipcbiAgICAgKiBUaGUgbmF0aXZlIE1lZGlhS2V5U2Vzc2lvbiwgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGluIGdlbmVyYXRlUmVxdWVzdC5cbiAgICAgKiBAcHJpdmF0ZSB7V2ViS2l0TWVkaWFLZXlTZXNzaW9ufVxuICAgICAqL1xuXG4gICAgdGhpcy5uYXRpdmVNZWRpYUtleVNlc3Npb25fID0gbnVsbDtcbiAgICAvKiogQHByaXZhdGUge1dlYktpdE1lZGlhS2V5c30gKi9cblxuICAgIHRoaXMubmF0aXZlTWVkaWFLZXlzXyA9IG5hdGl2ZU1lZGlhS2V5czsgLy8gUHJvbWlzZXMgdGhhdCBhcmUgcmVzb2x2ZWQgbGF0ZXJcblxuICAgIC8qKiBAcHJpdmF0ZSB7UHVibGljUHJvbWlzZX0gKi9cblxuICAgIHRoaXMuZ2VuZXJhdGVSZXF1ZXN0UHJvbWlzZV8gPSBudWxsO1xuICAgIC8qKiBAcHJpdmF0ZSB7UHVibGljUHJvbWlzZX0gKi9cblxuICAgIHRoaXMudXBkYXRlUHJvbWlzZV8gPSBudWxsO1xuICAgIC8qKiBAcHJpdmF0ZSB7IXdpbmRvdy5zaGFrYS51dGlsLkV2ZW50TWFuYWdlcn0gKi9cblxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyXyA9IG5ldyB3aW5kb3cuc2hha2EudXRpbC5FdmVudE1hbmFnZXIoKTtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cblxuICAgIHRoaXMuc2Vzc2lvbklkID0gJyc7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG5cbiAgICB0aGlzLmV4cGlyYXRpb24gPSBOYU47XG4gICAgLyoqIEB0eXBlIHshUHVibGljUHJvbWlzZX0gKi9cblxuICAgIHRoaXMuY2xvc2VkID0gbmV3IFB1YmxpY1Byb21pc2UoKTtcbiAgICAvKiogQHR5cGUgeyF3aW5kb3cuc2hha2EucG9seWZpbGwuUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLk1lZGlhS2V5U3RhdHVzTWFwfSAqL1xuXG4gICAgdGhpcy5rZXlTdGF0dXNlcyA9IG5ldyBQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlTdGF0dXNNYXAoKTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICovXG5cblxuICBnZW5lcmF0ZVJlcXVlc3QoaW5pdERhdGFUeXBlLCBpbml0RGF0YSkge1xuICAgIG15TG9nLmRlYnVnKCdQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlTZXNzaW9uLmdlbmVyYXRlUmVxdWVzdCcpO1xuICAgIHRoaXMuZ2VuZXJhdGVSZXF1ZXN0UHJvbWlzZV8gPSBuZXcgUHVibGljUHJvbWlzZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoaXMgRU1FIHNwZWMgdmVyc2lvbiByZXF1aXJlcyBhIE1JTUUgY29udGVudCB0eXBlIGFzIHRoZSAxc3QgcGFyYW0gdG9cbiAgICAgIC8vIGNyZWF0ZVNlc3Npb24sIGJ1dCBkb2Vzbid0IHNlZW0gdG8gbWF0dGVyIHdoYXQgdGhlIHZhbHVlIGlzLlxuICAgICAgLy8gSXQgYWxzbyBvbmx5IGFjY2VwdHMgVWludDhBcnJheSwgbm90IEFycmF5QnVmZmVyLCBzbyBleHBsaWNpdGx5IG1ha2VcbiAgICAgIC8vIGluaXREYXRhIGludG8gYSBVaW50OEFycmF5LlxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMubmF0aXZlTWVkaWFLZXlzXy5jcmVhdGVTZXNzaW9uKCd2aWRlby9tcDQnLCB3aW5kb3cuc2hha2EudXRpbC5CdWZmZXJVdGlscy50b1VpbnQ4KGluaXREYXRhKSk7XG4gICAgICB0aGlzLm5hdGl2ZU1lZGlhS2V5U2Vzc2lvbl8gPSBzZXNzaW9uO1xuICAgICAgdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uLnNlc3Npb25JZCB8fCAnJzsgLy8gQXR0YWNoIHNlc3Npb24gZXZlbnQgaGFuZGxlcnMgaGVyZS5cblxuICAgICAgdGhpcy5ldmVudE1hbmFnZXJfLmxpc3Rlbih0aGlzLm5hdGl2ZU1lZGlhS2V5U2Vzc2lvbl8sICd3ZWJraXRrZXltZXNzYWdlJyxcbiAgICAgIC8qKiBAdHlwZSB7d2luZG93LnNoYWthLnV0aWwuRXZlbnRNYW5hZ2VyLkxpc3RlbmVyVHlwZX0gKi9cbiAgICAgIGV2ZW50ID0+IHRoaXMub25XZWJraXRLZXlNZXNzYWdlXyhldmVudCkpO1xuICAgICAgdGhpcy5ldmVudE1hbmFnZXJfLmxpc3RlbihzZXNzaW9uLCAnd2Via2l0a2V5YWRkZWQnLFxuICAgICAgLyoqIEB0eXBlIHt3aW5kb3cuc2hha2EudXRpbC5FdmVudE1hbmFnZXIuTGlzdGVuZXJUeXBlfSAqL1xuICAgICAgZXZlbnQgPT4gdGhpcy5vbldlYmtpdEtleUFkZGVkXyhldmVudCkpO1xuICAgICAgdGhpcy5ldmVudE1hbmFnZXJfLmxpc3RlbihzZXNzaW9uLCAnd2Via2l0a2V5ZXJyb3InLFxuICAgICAgLyoqIEB0eXBlIHt3aW5kb3cuc2hha2EudXRpbC5FdmVudE1hbmFnZXIuTGlzdGVuZXJUeXBlfSAqL1xuICAgICAgZXZlbnQgPT4gdGhpcy5vbldlYmtpdEtleUVycm9yXyhldmVudCkpO1xuICAgICAgdGhpcy51cGRhdGVLZXlTdGF0dXNfKCdzdGF0dXMtcGVuZGluZycpO1xuICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgdGhpcy5nZW5lcmF0ZVJlcXVlc3RQcm9taXNlXy5yZWplY3QoZXhjZXB0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVJlcXVlc3RQcm9taXNlXztcbiAgfVxuICAvKiogQG92ZXJyaWRlICovXG5cblxuICBsb2FkKCkge1xuICAgIG15TG9nLmRlYnVnKCdQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlTZXNzaW9uLmxvYWQnKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdNZWRpYUtleVNlc3Npb24ubG9hZCBub3QgeWV0IHN1cHBvcnRlZCcpKTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICovXG5cblxuICB1cGRhdGUocmVzcG9uc2UpIHtcbiAgICBteUxvZy5kZWJ1ZygnUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLk1lZGlhS2V5U2Vzc2lvbi51cGRhdGUnKTtcbiAgICB0aGlzLnVwZGF0ZVByb21pc2VfID0gbmV3IFB1YmxpY1Byb21pc2UoKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQYXNzIHRocm91Z2ggdG8gdGhlIG5hdGl2ZSBzZXNzaW9uLlxuICAgICAgdGhpcy5uYXRpdmVNZWRpYUtleVNlc3Npb25fLnVwZGF0ZSh3aW5kb3cuc2hha2EudXRpbC5CdWZmZXJVdGlscy50b1VpbnQ4KHJlc3BvbnNlKSk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICB0aGlzLnVwZGF0ZVByb21pc2VfLnJlamVjdChleGNlcHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVByb21pc2VfO1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKi9cblxuXG4gIGNsb3NlKCkge1xuICAgIG15TG9nLmRlYnVnKCdQYXRjaGVkTWVkaWFLZXlzQXBwbGUuTWVkaWFLZXlTZXNzaW9uLmNsb3NlJyk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUGFzcyB0aHJvdWdoIHRvIHRoZSBuYXRpdmUgc2Vzc2lvbi5cbiAgICAgIHRoaXMubmF0aXZlTWVkaWFLZXlTZXNzaW9uXy5jbG9zZSgpO1xuICAgICAgdGhpcy5jbG9zZWQucmVzb2x2ZSgpO1xuICAgICAgdGhpcy5ldmVudE1hbmFnZXJfLnJlbW92ZUFsbCgpO1xuICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgdGhpcy5jbG9zZWQucmVqZWN0KGV4Y2VwdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2xvc2VkO1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKi9cblxuXG4gIHJlbW92ZSgpIHtcbiAgICBteUxvZy5kZWJ1ZygnUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLk1lZGlhS2V5U2Vzc2lvbi5yZW1vdmUnKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdNZWRpYUtleVNlc3Npb24ucmVtb3ZlIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgcGVyc2lzdGVudCBsaWNlbnNlcywgJyArICd3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtJykpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGVyIGZvciB0aGUgbmF0aXZlIGtleW1lc3NhZ2UgZXZlbnQgb24gV2ViS2l0TWVkaWFLZXlTZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0geyFNZWRpYUtleUV2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIG9uV2Via2l0S2V5TWVzc2FnZV8oZXZlbnQpIHtcbiAgICBteUxvZy5kZWJ1ZygnUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLm9uV2Via2l0S2V5TWVzc2FnZV8nLCBldmVudCk7IC8vIFdlIGNhbiBub3cgcmVzb2x2ZSB0aGlzLmdlbmVyYXRlUmVxdWVzdFByb21pc2UsIHdoaWNoIHNob3VsZCBiZSBub24tbnVsbC5cblxuICAgIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5nZW5lcmF0ZVJlcXVlc3RQcm9taXNlXywgJ2dlbmVyYXRlUmVxdWVzdFByb21pc2VfIHNob3VsZCBiZSBzZXQgYmVmb3JlIG5vdyEnKTtcblxuICAgIGlmICh0aGlzLmdlbmVyYXRlUmVxdWVzdFByb21pc2VfKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlUmVxdWVzdFByb21pc2VfLnJlc29sdmUoKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVSZXF1ZXN0UHJvbWlzZV8gPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmV3ID0gdGhpcy5rZXlTdGF0dXNlcy5nZXRTdGF0dXMoKSA9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBNYXAoKS5zZXQoJ21lc3NhZ2VUeXBlJywgaXNOZXcgPyAnbGljZW5zZS1yZXF1ZXN0JyA6ICdsaWNlbnNlLXJlbmV3YWwnKS5zZXQoJ21lc3NhZ2UnLCB3aW5kb3cuc2hha2EudXRpbC5CdWZmZXJVdGlscy50b0FycmF5QnVmZmVyKGV2ZW50Lm1lc3NhZ2UpKTtcbiAgICBjb25zdCBldmVudDIgPSBuZXcgd2luZG93LnNoYWthLnV0aWwuRmFrZUV2ZW50KCdtZXNzYWdlJywgZGF0YSk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50Mik7XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZXIgZm9yIHRoZSBuYXRpdmUga2V5YWRkZWQgZXZlbnQgb24gV2ViS2l0TWVkaWFLZXlTZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0geyFNZWRpYUtleUV2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIG9uV2Via2l0S2V5QWRkZWRfKGV2ZW50KSB7XG4gICAgbXlMb2cuZGVidWcoJ1BhdGNoZWRNZWRpYUtleXNBcHBsZS5vbldlYmtpdEtleUFkZGVkXycsIGV2ZW50KTsgLy8gVGhpcyBzaG91bGRuJ3QgZmlyZSB3aGlsZSB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGdlbmVyYXRlUmVxdWVzdCxcbiAgICAvLyBidXQgaWYgaXQgZG9lcywgd2Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB0aGUgbG9naWMgdG8gYWNjb3VudCBmb3IgaXQuXG5cbiAgICBnb29nLmFzc2VydHMuYXNzZXJ0KCF0aGlzLmdlbmVyYXRlUmVxdWVzdFByb21pc2VfLCAnS2V5IGFkZGVkIGR1cmluZyBnZW5lcmF0ZSEnKTsgLy8gV2UgY2FuIG5vdyByZXNvbHZlIHRoaXMudXBkYXRlUHJvbWlzZSwgd2hpY2ggc2hvdWxkIGJlIG5vbi1udWxsLlxuXG4gICAgZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLnVwZGF0ZVByb21pc2VfLCAndXBkYXRlUHJvbWlzZV8gc2hvdWxkIGJlIHNldCBiZWZvcmUgbm93IScpO1xuXG4gICAgaWYgKHRoaXMudXBkYXRlUHJvbWlzZV8pIHtcbiAgICAgIHRoaXMudXBkYXRlS2V5U3RhdHVzXygndXNhYmxlJyk7XG4gICAgICB0aGlzLnVwZGF0ZVByb21pc2VfLnJlc29sdmUoKTtcbiAgICAgIHRoaXMudXBkYXRlUHJvbWlzZV8gPSBudWxsO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGFuZGxlciBmb3IgdGhlIG5hdGl2ZSBrZXllcnJvciBldmVudCBvbiBXZWJLaXRNZWRpYUtleVNlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSB7IU1lZGlhS2V5RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgb25XZWJraXRLZXlFcnJvcl8oZXZlbnQpIHtcbiAgICBteUxvZy5kZWJ1ZygnUGF0Y2hlZE1lZGlhS2V5c0FwcGxlLm9uV2Via2l0S2V5RXJyb3JfJywgZXZlbnQpO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdFTUUgUGF0Y2hlZE1lZGlhS2V5c0FwcGxlIGtleSBlcnJvcicpO1xuICAgIGVycm9yLmVycm9yQ29kZSA9IHRoaXMubmF0aXZlTWVkaWFLZXlTZXNzaW9uXy5lcnJvcjtcblxuICAgIGlmICh0aGlzLmdlbmVyYXRlUmVxdWVzdFByb21pc2VfICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVSZXF1ZXN0UHJvbWlzZV8ucmVqZWN0KGVycm9yKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVSZXF1ZXN0UHJvbWlzZV8gPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhpcy51cGRhdGVQcm9taXNlXyAhPSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVByb21pc2VfLnJlamVjdChlcnJvcik7XG4gICAgICB0aGlzLnVwZGF0ZVByb21pc2VfID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVW5leHBlY3RlZCBlcnJvciAtIG1hcCBuYXRpdmUgY29kZXMgdG8gc3RhbmRhcmRpc2VkIGtleSBzdGF0dXNlcy5cbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGlzLm5hdGl2ZU1lZGlhS2V5U2Vzc2lvbl8uZXJyb3IuY29kZTpcbiAgICAgIC8vIE1FRElBX0tFWUVSUl9VTktOT1dOICAgICAgICA9IDFcbiAgICAgIC8vIE1FRElBX0tFWUVSUl9DTElFTlQgICAgICAgICA9IDJcbiAgICAgIC8vIE1FRElBX0tFWUVSUl9TRVJWSUNFICAgICAgICA9IDNcbiAgICAgIC8vIE1FRElBX0tFWUVSUl9PVVRQVVQgICAgICAgICA9IDRcbiAgICAgIC8vIE1FRElBX0tFWUVSUl9IQVJEV0FSRUNIQU5HRSA9IDVcbiAgICAgIC8vIE1FRElBX0tFWUVSUl9ET01BSU4gICAgICAgICA9IDZcbiAgICAgIHN3aXRjaCAodGhpcy5uYXRpdmVNZWRpYUtleVNlc3Npb25fLmVycm9yLmNvZGUpIHtcbiAgICAgICAgY2FzZSB3aW5kb3cuV2ViS2l0TWVkaWFLZXlFcnJvci5NRURJQV9LRVlFUlJfT1VUUFVUOlxuICAgICAgICBjYXNlIHdpbmRvdy5XZWJLaXRNZWRpYUtleUVycm9yLk1FRElBX0tFWUVSUl9IQVJEV0FSRUNIQU5HRTpcbiAgICAgICAgICB0aGlzLnVwZGF0ZUtleVN0YXR1c18oJ291dHB1dC1ub3QtYWxsb3dlZCcpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy51cGRhdGVLZXlTdGF0dXNfKCdpbnRlcm5hbC1lcnJvcicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXBkYXRlcyBrZXkgc3RhdHVzIGFuZCBkaXNwYXRjaCBhICdrZXlzdGF0dXNlc2NoYW5nZScgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICB1cGRhdGVLZXlTdGF0dXNfKHN0YXR1cykge1xuICAgIHRoaXMua2V5U3RhdHVzZXMuc2V0U3RhdHVzKHN0YXR1cyk7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgd2luZG93LnNoYWthLnV0aWwuRmFrZUV2ZW50KCdrZXlzdGF0dXNlc2NoYW5nZScpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cblxufTtcblxuY29uc3QgZ2V0RHVtbXlLZXlJZCA9ICgpID0+IG5ldyBVaW50OEFycmF5KFswXSkuYnVmZmVyO1xuLyoqXG4gKiBAc3VtbWFyeSBBbiBpbXBsZW1lbnRhdGlvbiBvZiBNZWRpYUtleVN0YXR1c01hcC5cbiAqIFRoaXMgZmFrZXMgYSBtYXAgd2l0aCBhIHNpbmdsZSBrZXkgSUQuXG4gKlxuICogQHRvZG8gQ29uc29saWRhdGUgdGhlIE1lZGlhS2V5U3RhdHVzTWFwIHR5cGVzIGluIHRoZXNlIHBvbHlmaWxscy5cbiAqIEBpbXBsZW1lbnRzIHtNZWRpYUtleVN0YXR1c01hcH1cbiAqL1xuXG5cblBhdGNoZWRNZWRpYUtleXNBcHBsZS5NZWRpYUtleVN0YXR1c01hcCA9IGNsYXNzIHtcbiAgLyoqICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gMDtcbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZSB7c3RyaW5nfHVuZGVmaW5lZH1cbiAgICAgKi9cblxuICAgIHRoaXMuc3RhdHVzXyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogQW4gaW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgdGhlIHNlc3Npb24gdG8gc2V0IGtleSBzdGF0dXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gc3RhdHVzXG4gICAqL1xuXG5cbiAgc2V0U3RhdHVzKHN0YXR1cykge1xuICAgIHRoaXMuc2l6ZSA9IHN0YXR1cyA9PSB1bmRlZmluZWQgPyAwIDogMTtcbiAgICB0aGlzLnN0YXR1c18gPSBzdGF0dXM7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGludGVybmFsIG1ldGhvZCB1c2VkIGJ5IHRoZSBzZXNzaW9uIHRvIGdldCBrZXkgc3RhdHVzLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgKi9cblxuXG4gIGdldFN0YXR1cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNfO1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKi9cblxuXG4gIGZvckVhY2goZm4pIHtcbiAgICBpZiAodGhpcy5zdGF0dXNfKSB7XG4gICAgICBmbih0aGlzLnN0YXR1c18sIGdldER1bW15S2V5SWQoKSk7XG4gICAgfVxuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKi9cblxuXG4gIGdldChrZXlJZCkge1xuICAgIGlmICh0aGlzLmhhcyhrZXlJZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1c187XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvKiogQG92ZXJyaWRlICovXG5cblxuICBoYXMoa2V5SWQpIHtcbiAgICBjb25zdCBmYWtlS2V5SWQgPSBnZXREdW1teUtleUlkKCk7XG5cbiAgICBpZiAodGhpcy5zdGF0dXNfICYmIHdpbmRvdy5zaGFrYS51dGlsLkJ1ZmZlclV0aWxzLmVxdWFsKGtleUlkLCBmYWtlS2V5SWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEBzdXBwcmVzcyB7bWlzc2luZ1JldHVybn1cbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgZW50cmllcygpIHtcbiAgICBnb29nLmFzc2VydHMuYXNzZXJ0KGZhbHNlLCAnTm90IHVzZWQhICBQcm92aWRlZCBvbmx5IGZvciB0aGUgY29tcGlsZXIuJyk7XG4gIH1cbiAgLyoqXG4gICAqIEBzdXBwcmVzcyB7bWlzc2luZ1JldHVybn1cbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAga2V5cygpIHtcbiAgICBnb29nLmFzc2VydHMuYXNzZXJ0KGZhbHNlLCAnTm90IHVzZWQhICBQcm92aWRlZCBvbmx5IGZvciB0aGUgY29tcGlsZXIuJyk7XG4gIH1cbiAgLyoqXG4gICAqIEBzdXBwcmVzcyB7bWlzc2luZ1JldHVybn1cbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgdmFsdWVzKCkge1xuICAgIGdvb2cuYXNzZXJ0cy5hc3NlcnQoZmFsc2UsICdOb3QgdXNlZCEgIFByb3ZpZGVkIG9ubHkgZm9yIHRoZSBjb21waWxlci4nKTtcbiAgfVxuXG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuXG5jb25zdCBnZXRRdWFsaXR5SXRlbSA9IHRyYWNrID0+ICh7XG4gIGlkOiB0cmFjay5vcmlnaW5hbFZpZGVvSWQsXG4gIGJpdHJhdGU6IHRyYWNrLnZpZGVvQmFuZHdpZHRoLFxuICB3aWR0aDogdHJhY2sud2lkdGgsXG4gIGhlaWdodDogdHJhY2suaGVpZ2h0LFxuICBjb2RlYzogdHJhY2sudmlkZW9Db2RlYyxcbiAgZnJhbWVSYXRlOiB0cmFjay5mcmFtZVJhdGVcbn0pO1xuXG5jb25zdCByZXRyeVN0YXR1cyA9IHtcbiAgbGFzdFRpbWU6IDAsXG4gIGF0dGVtcHRzOiAwXG59O1xuXG5jb25zdCBoYW5kbGVTYWZhcmlOZXR3b3JrRXJyb3IgPSBwbGF5ZXIgPT4ge1xuICB2YXIgX3BsYXllciRyZWxvYWQ7XG5cbiAgaWYgKERhdGUubm93KCkgKyAzMDAwMCA8IHJldHJ5U3RhdHVzLmxhc3RUaW1lICYmIHJldHJ5U3RhdHVzLmF0dGVtcHRzID49IDMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoRGF0ZS5ub3coKSArIDMwMDAwID49IHJldHJ5U3RhdHVzLmxhc3RUaW1lKSB7XG4gICAgcmV0cnlTdGF0dXMuYXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgcmV0cnlTdGF0dXMubGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICByZXRyeVN0YXR1cy5hdHRlbXB0cyArPSAxO1xuICAoX3BsYXllciRyZWxvYWQgPSBwbGF5ZXIucmVsb2FkKSA9PT0gbnVsbCB8fCBfcGxheWVyJHJlbG9hZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllciRyZWxvYWQuY2FsbChwbGF5ZXIpO1xufTtcblxuY29uc3QgbG9hZFNoYWthID0gYXN5bmMgKHZpZGVvRWxlbWVudCwgY29uZmlnID0ge30pID0+IHtcbiAgbGV0IHBsYXllcjtcbiAgZ2V0VXJsT2JqZWN0KG1lZGlhU291cmNlID0+IHtcbiAgICBwbGF5ZXIubWVkaWFTb3VyY2UgPSBtZWRpYVNvdXJjZTtcbiAgfSk7XG4gIGNvbnN0IHNoYWthID0gYXdhaXQgaW1wb3J0KCdzaGFrYS1wbGF5ZXInKTtcbiAgd2luZG93LnNoYWthID0gc2hha2E7XG4gIHNoYWthLnBvbHlmaWxsLmluc3RhbGxBbGwoKTtcblxuICBpZiAod2luZG93LldlYktpdE1lZGlhS2V5cykge1xuICAgIFBhdGNoZWRNZWRpYUtleXNBcHBsZS5pbnN0YWxsKHNoYWthKTtcbiAgfVxuXG4gIHBsYXllciA9IG5ldyBzaGFrYS5QbGF5ZXIodmlkZW9FbGVtZW50KTtcblxuICBpZiAod2luZG93LldlYktpdE1lZGlhS2V5cykge1xuICAgIFBhdGNoZWRNZWRpYUtleXNBcHBsZS5zZXR1cFBsYXllcihwbGF5ZXIpO1xuICB9XG5cbiAgcGxheWVyLmNvbmZpZ3VyZSh7XG4gICAgbWFuaWZlc3Q6IHtcbiAgICAgIGRhc2g6IHtcbiAgICAgICAgaWdub3JlU3VnZ2VzdGVkUHJlc2VudGF0aW9uRGVsYXk6IHRydWVcbiAgICAgIH0sXG4gICAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgICAgbWF4QXR0ZW1wdHM6IDZcbiAgICAgIH1cbiAgICB9LFxuICAgIHN0cmVhbWluZzoge1xuICAgICAgLy8gVG8gcmVkdWNlIHRoZSB1bnNlZWthYmxlIHJhbmdlIGF0IHRoZSBzdGFydCBvZiB0aGUgbWFuaWZlc3RzLlxuICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vc2hha2EtcHJvamVjdC9zaGFrYS1wbGF5ZXIvaXNzdWVzLzM1MjZcbiAgICAgIHNhZmVTZWVrT2Zmc2V0OiAwLFxuICAgICAgcmVidWZmZXJpbmdHb2FsOiAwLFxuICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgIG1heEF0dGVtcHRzOiA2XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcGxheWVyLmNvbmZpZ3VyZShjb25maWcpO1xuICBwbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBldmVudCA9PiB7XG4gICAgdmFyIF93aW5kb3ckU2VudHJ5O1xuXG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgIGNvbnN0IHtcbiAgICAgIGRldGFpbCA9IHt9XG4gICAgfSA9IGV2ZW50O1xuXG4gICAgaWYgKGlzU2FmYXJpKCkgJiYgKGRldGFpbC5jb2RlID09PSAzMDE2IHx8IGRldGFpbC5jb2RlID09PSAxMDAyKSkge1xuICAgICAgcmV0dXJuIGhhbmRsZVNhZmFyaU5ldHdvcmtFcnJvcihwbGF5ZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBQbGF5ZXI6ICR7ZGV0YWlsLmNvZGV9LyR7ZGV0YWlsLm5hbWV9YCk7XG5cbiAgICBpZiAoIWRldGFpbCB8fCAvVGhlIHZpZGVvIGVsZW1lbnQgaGFzIHRocm93biBhIG1lZGlhIGVycm9yfFZpZGVvIGVsZW1lbnQgdHJpZ2dlcmVkIGFuIEVycm9yLy50ZXN0KGRldGFpbC5tZXNzYWdlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZpZGVvRWxlbWVudC5kaXNwYXRjaEV2ZW50KE9iamVjdC5hc3NpZ24obmV3IEN1c3RvbUV2ZW50KCdlcnJvcicpLCB7XG4gICAgICBlcnJvcjogZGV0YWlsLFxuICAgICAgbWVzc2FnZTogYFBsYXllciBFcnJvcjogJHtkZXRhaWwuY29kZX0vJHtkZXRhaWwubWVzc2FnZS5zcGxpdCgnICcsIDMpWzJdfWBcbiAgICB9KSk7XG4gICAgKF93aW5kb3ckU2VudHJ5ID0gd2luZG93LlNlbnRyeSkgPT09IG51bGwgfHwgX3dpbmRvdyRTZW50cnkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF93aW5kb3ckU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZXJyb3IpO1xuICB9KTtcbiAgcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZCcsICgpID0+IHZpZGVvRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2FucGxheScpKSk7XG4gIHBsYXllci5hZGRFdmVudExpc3RlbmVyKCdhZGFwdGF0aW9uJywgZXZlbnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHZpZGVvQmFuZHdpZHRoLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZXZlbnQubmV3VHJhY2s7XG4gICAgdmlkZW9FbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb3dubG9hZFF1YWxpdHlDaGFuZ2UnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgYml0cmF0ZTogcGFyc2VJbnQodmlkZW9CYW5kd2lkdGggLyAxMDAwLCAxMCksXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgd2lkdGhcbiAgICAgIH1cbiAgICB9KSk7XG4gIH0pO1xuICBjb25zdCBleHRlbnNpb25PcHRpb25zID0ge1xuICAgIGxpY2Vuc2VSZXF1ZXN0SGVhZGVyczogbnVsbFxuICB9O1xuXG4gIGNvbnN0IGdldEF2YWlsYWJsZVZpZGVvUXVhbGl0aWVzID0gKCkgPT4gcGxheWVyLmdldFZhcmlhbnRUcmFja3MoKS5yZWR1Y2UoKHRyYWNrTGlzdCwgY3VycmVudFRyYWNrKSA9PiB7XG4gICAgY29uc3Qga2VlcE9yaWduYWxUcmFjayA9IHRyYWNrTGlzdC5maW5kKHRyYWNrID0+IHRyYWNrLmhlaWdodCA9PT0gY3VycmVudFRyYWNrLmhlaWdodCk7XG5cbiAgICBpZiAoIWtlZXBPcmlnbmFsVHJhY2spIHtcbiAgICAgIHRyYWNrTGlzdC5wdXNoKGdldFF1YWxpdHlJdGVtKGN1cnJlbnRUcmFjaykpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFja0xpc3Q7XG4gIH0sIFtdKTtcblxuICBjb25zdCBnZXRWaWRlb1F1YWxpdHkgPSAoKSA9PiB7XG4gICAgY29uc3QgYWN0aXZlVHJhY2sgPSBwbGF5ZXIuZ2V0VmFyaWFudFRyYWNrcygpLmZpbmQodHJhY2sgPT4gdHJhY2suYWN0aXZlKTtcbiAgICBpZiAoIWFjdGl2ZVRyYWNrKSByZXR1cm4ge307XG4gICAgcmV0dXJuIGdldFF1YWxpdHlJdGVtKGFjdGl2ZVRyYWNrKTtcbiAgfTtcblxuICBIdHRwRmV0Y2hQbHVnaW4ucmVnaXN0ZXIoc2hha2EpO1xuICBwbGF5ZXIuZ2V0TmV0d29ya2luZ0VuZ2luZSgpLnJlZ2lzdGVyUmVxdWVzdEZpbHRlcigodHlwZSwgcmVxdWVzdCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIExJQ0VOU0UsXG4gICAgICBTRVJWRVJfQ0VSVElGSUNBVEVcbiAgICB9ID0gc2hha2EubmV0Lk5ldHdvcmtpbmdFbmdpbmUuUmVxdWVzdFR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gU0VSVkVSX0NFUlRJRklDQVRFKSB7XG4gICAgICB2YXIgX2V4dGVuc2lvbk9wdGlvbnMkZHJtO1xuXG4gICAgICByZXF1ZXN0LmhlYWRlcnMgPSB7IC4uLnJlcXVlc3QuaGVhZGVycyxcbiAgICAgICAgLi4uKChfZXh0ZW5zaW9uT3B0aW9ucyRkcm0gPSBleHRlbnNpb25PcHRpb25zLmRybVtwbGF5ZXIuZHJtSW5mbygpLmtleVN5c3RlbV0pID09PSBudWxsIHx8IF9leHRlbnNpb25PcHRpb25zJGRybSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V4dGVuc2lvbk9wdGlvbnMkZHJtLmNlcnRpZmljYXRlSGVhZGVycylcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IExJQ0VOU0UpIHtcbiAgICAgIHZhciBfZXh0ZW5zaW9uT3B0aW9ucyRkcm0yLCBfcGxheWVyJGxpY2Vuc2VSZXF1ZXMsIF9wbGF5ZXI7XG5cbiAgICAgIHJlcXVlc3QuaGVhZGVycyA9IHsgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAuLi4oKF9leHRlbnNpb25PcHRpb25zJGRybTIgPSBleHRlbnNpb25PcHRpb25zLmRybVtwbGF5ZXIuZHJtSW5mbygpLmtleVN5c3RlbV0pID09PSBudWxsIHx8IF9leHRlbnNpb25PcHRpb25zJGRybTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9leHRlbnNpb25PcHRpb25zJGRybTIuaGVhZGVycylcbiAgICAgIH07XG4gICAgICAoX3BsYXllciRsaWNlbnNlUmVxdWVzID0gKF9wbGF5ZXIgPSBwbGF5ZXIpLmxpY2Vuc2VSZXF1ZXN0SGFuZGxlcikgPT09IG51bGwgfHwgX3BsYXllciRsaWNlbnNlUmVxdWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGxheWVyJGxpY2Vuc2VSZXF1ZXMuY2FsbChfcGxheWVyLCByZXF1ZXN0KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBleHRlbnNpb25zID0ge1xuICAgIHNoYWthLFxuXG4gICAgZ2V0IG1lZGlhU291cmNlKCkge1xuICAgICAgcmV0dXJuIHBsYXllci5tZWRpYVNvdXJjZTtcbiAgICB9LFxuXG4gICAgY29uZmlndXJlRXh0ZW5zaW9uczogKHtcbiAgICAgIGRybVxuICAgIH0gPSB7fSkgPT4ge1xuICAgICAgZXh0ZW5zaW9uT3B0aW9ucy5kcm0gPSBkcm07XG4gICAgfSxcbiAgICBnZXRQbGF5YmFja1NwZWVkOiAoKSA9PiB2aWRlb0VsZW1lbnQucGxheWJhY2tSYXRlLFxuICAgIGdldFZpZGVvRWxlbWVudDogKCkgPT4gdmlkZW9FbGVtZW50LFxuICAgIHNldFF1YWxpdHk6IHJlc3RyaWN0aW9ucyA9PiB7XG4gICAgICBpZiAoIXJlc3RyaWN0aW9ucykgcmV0dXJuOyAvLyBGSVhNRTogU2V0dGluZyByZXN0cmljdGlvbnMgdG8ge30gY2Fubm90IGVuYWJsZSBhYnIuXG5cbiAgICAgIHBsYXllci5jb25maWd1cmUoJ2Fici5yZXN0cmljdGlvbnMnLCByZXN0cmljdGlvbnMpO1xuICAgIH0sXG4gICAgZ2V0VmlkZW9RdWFsaXR5LFxuICAgIGdldEF2YWlsYWJsZVZpZGVvUXVhbGl0aWVzLFxuICAgIGdldFN1YnRpdGxlczogKCkgPT4gcGxheWVyLmdldFRleHRUcmFja3MoKS5tYXAodHJhY2sgPT4gKHtcbiAgICAgIGxhYmVsOiB0cmFjay5sYWJlbCxcbiAgICAgIHZhbHVlOiB0cmFjay5sYW5ndWFnZSxcbiAgICAgIGVuYWJsZWQ6IHRyYWNrLmFjdGl2ZVxuICAgIH0pKSxcbiAgICBzZXRTdWJ0aXRsZVRyYWNrOiBsYW5nID0+IHtcbiAgICAgIHZhciBfcGxheWVyMywgX3BsYXllcjQ7XG5cbiAgICAgIGlmIChsYW5nID09PSAnb2ZmJykge1xuICAgICAgICB2YXIgX3BsYXllcjI7XG5cbiAgICAgICAgKF9wbGF5ZXIyID0gcGxheWVyKSA9PT0gbnVsbCB8fCBfcGxheWVyMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllcjIuc2V0VGV4dFRyYWNrVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgKF9wbGF5ZXIzID0gcGxheWVyKSA9PT0gbnVsbCB8fCBfcGxheWVyMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllcjMuc2VsZWN0VGV4dExhbmd1YWdlKGxhbmcpO1xuICAgICAgKF9wbGF5ZXI0ID0gcGxheWVyKSA9PT0gbnVsbCB8fCBfcGxheWVyNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllcjQuc2V0VGV4dFRyYWNrVmlzaWJpbGl0eSh0cnVlKTtcbiAgICB9LFxuICAgIGdldEF1ZGlvOiAoKSA9PiB7XG4gICAgICB2YXIgX3BsYXllcjU7XG5cbiAgICAgIGNvbnN0IGFjdGl2ZSA9IChfcGxheWVyNSA9IHBsYXllcikgPT09IG51bGwgfHwgX3BsYXllcjUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wbGF5ZXI1LmdldFZhcmlhbnRUcmFja3MoKS5maW5kKHRyYWNrID0+IHRyYWNrLmFjdGl2ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYW5nOiBhY3RpdmUgPT09IG51bGwgfHwgYWN0aXZlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhY3RpdmUubGFuZ3VhZ2UsXG4gICAgICAgIGxhYmVsOiBhY3RpdmUgPT09IG51bGwgfHwgYWN0aXZlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhY3RpdmUubGFiZWxcbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXRBdWRpb0xpc3Q6ICgpID0+IHBsYXllci5nZXRBdWRpb0xhbmd1YWdlcygpLm1hcChsYW5nID0+ICh7XG4gICAgICBsYW5nLFxuICAgICAgbGFiZWw6IGxhbmdcbiAgICB9KSksXG4gICAgc2V0QXVkaW9UcmFjazogbGFuZyA9PiB7XG4gICAgICB2YXIgX3BsYXllcjY7XG5cbiAgICAgIGlmICghbGFuZykgcmV0dXJuO1xuICAgICAgKF9wbGF5ZXI2ID0gcGxheWVyKSA9PT0gbnVsbCB8fCBfcGxheWVyNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsYXllcjYuc2VsZWN0QXVkaW9MYW5ndWFnZShsYW5nKTtcbiAgICB9LFxuICAgIG9uOiBwbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHBsYXllcilcbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihwbGF5ZXIsIGV4dGVuc2lvbnMpO1xuICByZXR1cm4gcGxheWVyO1xufTtcblxuY29uc3QgZ2V0RHJtQ29uZmlnID0gKHtcbiAgdXJsLFxuICBoZWFkZXJzLFxuICB3aWRldmluZSA9IHtcbiAgICBsZXZlbDogdW5kZWZpbmVkXG4gIH0sXG4gIGZhaXJwbGF5ID0ge31cbn0pID0+IHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZGV2aW5lOiB7XG4gICAgICBMQV9VUkw6IHVybCxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICBoZWFkZXJzLFxuICAgICAgLi4uKCh3aWRldmluZSA9PT0gbnVsbCB8fCB3aWRldmluZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2lkZXZpbmUubGV2ZWwpICYmIHtcbiAgICAgICAgdmlkZW9Sb2J1c3RuZXNzOiB3aWRldmluZSA9PT0gbnVsbCB8fCB3aWRldmluZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2lkZXZpbmUubGV2ZWxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBmYWlycGxheToge1xuICAgICAgTEFfVVJMOiB1cmwsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGNlcnRpZmljYXRlVVJMOiBmYWlycGxheS5jZXJ0aWZpY2F0ZVVSTCB8fCBkZWZhdWx0Q2VydGlmaWNhdGVVcmwodXJsKSxcbiAgICAgIGNlcnRpZmljYXRlSGVhZGVyczogZmFpcnBsYXkuY2VydGlmaWNhdGVIZWFkZXJzLFxuICAgICAgLi4uRmFpcnBsYXlLZXlTeXN0ZW1cbiAgICB9LFxuICAgIHBsYXlyZWFkeToge1xuICAgICAgTEFfVVJMOiB1cmwsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgaGVhZGVyc1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGxvYWRCaXRtb3ZpbiA9IGFzeW5jICh7XG4gIGNvbnRhaW5lcixcbiAgdmlkZW9FbGVtZW50LFxuICBhdXRvcGxheSxcbiAgY29uZmlnID0ge31cbn0pID0+IHtcbiAgLy8gRG9uJ3QgbW92ZSBtb2R1bGUgcGF0aHMgdG8gYXJyYXkgb3Igb3RoZXIgdmFyaWFibGVzISB0aGV5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgYnkgYnVuZGxlcnNcbiAgY29uc3Qge1xuICAgIFBsYXllcixcbiAgICBQbGF5ZXJFdmVudFxuICB9ID0gYXdhaXQgaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci1jb3JlJyk7XG4gIGNvbnN0IG5hdGl2ZUhscyA9IG5lZWROYXRpdmVIbHMoKTtcbiAgY29uc3QgYml0bW92aW5Nb2R1bGVzID0gW10uY29uY2F0KGF3YWl0IGltcG9ydCgnYml0bW92aW4tcGxheWVyL21vZHVsZXMvYml0bW92aW5wbGF5ZXItZW5naW5lLWJpdG1vdmluJyksIG5hdGl2ZUhscyAmJiAoYXdhaXQgaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci1lbmdpbmUtbmF0aXZlJykpLCBhd2FpdCBQcm9taXNlLmFsbChbaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci1kcm0nKSwgaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci1hYnInKSwgaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci1zdWJ0aXRsZXMnKSwgaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci1jb250YWluZXItbXA0JyldKSwgbmF0aXZlSGxzICYmIChhd2FpdCBQcm9taXNlLmFsbChbaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci1obHMnKSwgaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci1zdWJ0aXRsZXMtbmF0aXZlJyldKSksICFuYXRpdmVIbHMgJiYgKGF3YWl0IGltcG9ydCgnYml0bW92aW4tcGxheWVyL21vZHVsZXMvYml0bW92aW5wbGF5ZXItc3VidGl0bGVzLXZ0dCcpKSwgIW5hdGl2ZUhscyAmJiAoYXdhaXQgaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci14bWwnKSksICFuYXRpdmVIbHMgJiYgKGF3YWl0IFByb21pc2UuYWxsKFtpbXBvcnQoJ2JpdG1vdmluLXBsYXllci9tb2R1bGVzL2JpdG1vdmlucGxheWVyLWRhc2gnKSwgaW1wb3J0KCdiaXRtb3Zpbi1wbGF5ZXIvbW9kdWxlcy9iaXRtb3ZpbnBsYXllci1tc2VyZW5kZXJlcicpLCBpbXBvcnQoJ2JpdG1vdmluLXBsYXllci9tb2R1bGVzL2JpdG1vdmlucGxheWVyLXBvbHlmaWxsJyldKSkpLmZpbHRlcihCb29sZWFuKTtcbiAgYml0bW92aW5Nb2R1bGVzLmZvckVhY2gobW9kdWxlID0+IFBsYXllci5hZGRNb2R1bGUobW9kdWxlLmRlZmF1bHQpKTtcbiAgY29uc3QgZXh0ZW5zaW9uT3B0aW9ucyA9IHtcbiAgICBkcm06IHt9XG4gIH07XG4gIGxldCBhZGFwdGF0aW9uSGFuZGxlcjtcbiAgY29uc3QgcGxheWVyID0gbmV3IFBsYXllcihjb250YWluZXIsIHtcbiAgICB1aTogZmFsc2UsXG4gICAgLi4uY29uZmlnLFxuICAgIHBsYXliYWNrOiB7IC4uLmNvbmZpZy5wbGF5YmFjayxcbiAgICAgIGF1dG9wbGF5OiB0cnVlXG4gICAgfSxcbiAgICBhZGFwdGF0aW9uOiB7IC4uLmNvbmZpZy5hZGFwdGF0aW9uLFxuICAgICAgb25WaWRlb0FkYXB0YXRpb246IGRhdGEgPT4ge1xuICAgICAgICB2YXIgX2FkYXB0YXRpb25IYW5kbGVyO1xuXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVF1YWxpdGllcyA9IHBsYXllci5nZXRBdmFpbGFibGVWaWRlb1F1YWxpdGllcygpO1xuICAgICAgICByZXR1cm4gKChfYWRhcHRhdGlvbkhhbmRsZXIgPSBhZGFwdGF0aW9uSGFuZGxlcikgPT09IG51bGwgfHwgX2FkYXB0YXRpb25IYW5kbGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYWRhcHRhdGlvbkhhbmRsZXIoe1xuICAgICAgICAgIGF2YWlsYWJsZVF1YWxpdGllcyxcbiAgICAgICAgICBzdWdnZXN0ZWQ6IGF2YWlsYWJsZVF1YWxpdGllcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZGF0YS5zdWdnZXN0ZWQpIHx8IHtcbiAgICAgICAgICAgIGlkOiBkYXRhLnN1Z2dlc3RlZFxuICAgICAgICAgIH1cbiAgICAgICAgfSkpIHx8IGRhdGEuc3VnZ2VzdGVkO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcGxheWVyLmNvbmZpZ3VyZSA9ICh7XG4gICAgZHJtXG4gIH0pID0+IHtcbiAgICBpZiAoZHJtKSB7XG4gICAgICBleHRlbnNpb25PcHRpb25zLmRybSA9IGRybTtcbiAgICB9XG4gIH07XG5cbiAgcGxheWVyLmNvbmZpZ3VyZUV4dGVuc2lvbnMgPSAoe1xuICAgIGRybVxuICB9ID0ge30pID0+IHtcbiAgICBpZiAoZHJtKSB7XG4gICAgICB2YXIgX09iamVjdCR2YWx1ZXMkO1xuXG4gICAgICBleHRlbnNpb25PcHRpb25zLmxpY2Vuc2VSZXF1ZXN0SGVhZGVycyA9IChfT2JqZWN0JHZhbHVlcyQgPSBPYmplY3QudmFsdWVzKGRybSlbMF0pID09PSBudWxsIHx8IF9PYmplY3QkdmFsdWVzJCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX09iamVjdCR2YWx1ZXMkLmhlYWRlcnM7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9yaWdpbmFsTG9hZCA9IHBsYXllci5sb2FkO1xuXG4gIHBsYXllci5sb2FkID0gKHNyYywgc3RhcnRUaW1lLCB0eXBlKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgbXV0ZWRcbiAgICB9ID0gdmlkZW9FbGVtZW50O1xuICAgIG9yaWdpbmFsTG9hZC5jYWxsKHBsYXllciwge1xuICAgICAgW3R5cGUgPT09ICdhcHBsaWNhdGlvbi94LW1wZWd1cmwnID8gJ2hscycgOiAnZGFzaCddOiBzcmMsXG4gICAgICBkcm06IGdldERybUNvbmZpZyh7XG4gICAgICAgIHVybDogWydjb20uYXBwbGUuZnBzLjFfMCcsICdjb20ud2lkZXZpbmUuYWxwaGEnLCAnY29tLm1pY3Jvc29mdC5wbGF5cmVhZHknXS5tYXAoa2V5U3lzdGVtTmFtZSA9PiB7XG4gICAgICAgICAgdmFyIF9leHRlbnNpb25PcHRpb25zJGRybSwgX2V4dGVuc2lvbk9wdGlvbnMkZHJtMjtcblxuICAgICAgICAgIHJldHVybiAoX2V4dGVuc2lvbk9wdGlvbnMkZHJtID0gZXh0ZW5zaW9uT3B0aW9ucy5kcm0pID09PSBudWxsIHx8IF9leHRlbnNpb25PcHRpb25zJGRybSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9leHRlbnNpb25PcHRpb25zJGRybTIgPSBfZXh0ZW5zaW9uT3B0aW9ucyRkcm0uc2VydmVycykgPT09IG51bGwgfHwgX2V4dGVuc2lvbk9wdGlvbnMkZHJtMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V4dGVuc2lvbk9wdGlvbnMkZHJtMltrZXlTeXN0ZW1OYW1lXTtcbiAgICAgICAgfSkuZmluZChCb29sZWFuKSxcbiAgICAgICAgaGVhZGVyczogZXh0ZW5zaW9uT3B0aW9ucy5saWNlbnNlUmVxdWVzdEhlYWRlcnNcbiAgICAgIH0pLFxuICAgICAgLi4uKHN0YXJ0VGltZSAmJiB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBzdGFydFRpbWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAvLyBCaXRtb3ZpbiByZXNldHMgbXV0ZWQgc3RhdGUgYWZ0ZXIgbG9hZCBpbiBTYWZhcmksIHNvIHJlc3RvcmUgaXRcbiAgICAgIGlmIChtdXRlZCkge1xuICAgICAgICBwbGF5ZXIubXV0ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGxheWVyLnVubXV0ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9O1xuXG4gIHBsYXllci5zZXRBZGFwdGF0aW9uSGFuZGxlciA9IGhhbmRsZXIgPT4ge1xuICAgIGFkYXB0YXRpb25IYW5kbGVyID0gaGFuZGxlcjtcbiAgfTtcblxuICBwbGF5ZXIuc2Vla1JhbmdlID0gcGxheWVyLmdldFNlZWthYmxlUmFuZ2U7XG4gIHBsYXllci5nZXREcm1Db25maWcgPSBnZXREcm1Db25maWc7IC8vIE1vY2sgU2hha2EgcGxheWVyIGludGVyZmFjZSBmcm9tIHNoYWthLmpzXG5cbiAgcGxheWVyLmdldFN1YnRpdGxlcyA9ICgpID0+IHtcbiAgICB2YXIgX3BsYXllciRzdWJ0aXRsZXM7XG5cbiAgICByZXR1cm4gKChfcGxheWVyJHN1YnRpdGxlcyA9IHBsYXllci5zdWJ0aXRsZXMpID09PSBudWxsIHx8IF9wbGF5ZXIkc3VidGl0bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGxheWVyJHN1YnRpdGxlcy5saXN0KCkubWFwKHRyYWNrID0+ICh7XG4gICAgICBsYWJlbDogdHJhY2subGFiZWwsXG4gICAgICB2YWx1ZTogdHJhY2subGFuZyxcbiAgICAgIGVuYWJsZWQ6IHRyYWNrLmVuYWJsZWRcbiAgICB9KSkpIHx8IFtdO1xuICB9O1xuXG4gIHBsYXllci5zZXRTdWJ0aXRsZVRyYWNrID0gbGFuZ3VhZ2UgPT4ge1xuICAgIHZhciBfc3VidGl0bGVzJGxpc3Q7XG5cbiAgICBjb25zdCB7XG4gICAgICBzdWJ0aXRsZXNcbiAgICB9ID0gcGxheWVyO1xuICAgIHN1YnRpdGxlcyA9PT0gbnVsbCB8fCBzdWJ0aXRsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfc3VidGl0bGVzJGxpc3QgPSBzdWJ0aXRsZXMubGlzdCkgPT09IG51bGwgfHwgX3N1YnRpdGxlcyRsaXN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc3VidGl0bGVzJGxpc3QuY2FsbChzdWJ0aXRsZXMpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgLy8gVE9ETyBjb25zaWRlciBtdWx0aXBsZSBzdWJ0aXRsZXNcbiAgICAgIHN1YnRpdGxlc1tsYW5ndWFnZSA9PT0gdHJhY2subGFuZyA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSh0cmFjay5pZCk7IC8vIFNhZmFyaSBuZWVkIHRvIGZpcmUgY3VlRXhpdCBtYW51YWxseS5cblxuICAgICAgaWYgKGxhbmd1YWdlID09PSAnb2ZmJykgc3VidGl0bGVzLmN1ZUV4aXQoKTtcbiAgICB9KTtcbiAgfTtcblxuICBwbGF5ZXIuZ2V0QXVkaW9MaXN0ID0gKCkgPT4gcGxheWVyLmdldEF2YWlsYWJsZUF1ZGlvKCk7XG5cbiAgcGxheWVyLnNldEF1ZGlvVHJhY2sgPSBsYW5ndWFnZSA9PiB7XG4gICAgY29uc3QgdHJhY2sgPSBwbGF5ZXIuZ2V0QXZhaWxhYmxlQXVkaW8oKS5maW5kKGF1ZGlvID0+IGF1ZGlvLmxhbmcgPT09IGxhbmd1YWdlKTtcblxuICAgIGlmICh0cmFjaykge1xuICAgICAgcGxheWVyLnNldEF1ZGlvKHRyYWNrLmlkKTtcbiAgICB9XG4gIH07XG5cbiAgcGxheWVyLnNldFZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQpOyAvLyBGb3IgYSBwYXVzZWQgbGl2ZSBzdHJlYW0sIEJpdG1vdmluIGNvbnN0YW50bHkgZG93bmxvYWQgbGF0ZXN0IHNlZ21lbnRzIGFuZCB1cGRhdGUsXG4gIC8vIGFuZCBtYXkgdW5leHBlY3RlZGx5IHJlc3VtZSBwbGF5aW5nIHdoZW4gcGxheWluZyB2b2QtdG8tbGl2ZSwgc28gc2V0IHNwZWVkIDAgdG8gcHJldmVudC5cbiAgLy8gI0NQVC0xNzgzXG5cbiAgcGxheWVyLm9uKFBsYXllckV2ZW50LlBsYXksICgpID0+IHtcbiAgICBpZiAocGxheWVyLmlzTGl2ZSgpKSB7XG4gICAgICBwbGF5ZXIuc2V0UGxheWJhY2tTcGVlZCgxKTtcbiAgICB9XG4gIH0pO1xuICBwbGF5ZXIub24oUGxheWVyRXZlbnQuUGF1c2VkLCAoKSA9PiB7XG4gICAgaWYgKHBsYXllci5pc0xpdmUoKSkge1xuICAgICAgcGxheWVyLnNldFBsYXliYWNrU3BlZWQoMCk7XG4gICAgfVxuICB9KTtcbiAgcGxheWVyLm9uKFBsYXllckV2ZW50LlNvdXJjZUxvYWRlZCwgKCkgPT4ge1xuICAgIGlmIChwbGF5ZXIuaXNMaXZlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgcGxheWVyLnNldFBsYXliYWNrU3BlZWQoMSk7IC8vIG5vIHZpZGVvIGV2ZW50IGZpcmVzIHdoZW4gbGl2ZSBzdHJlYW0gbG9hZGVkLCBmaXJlIG9uZSBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgbGlrZSBWT0RcblxuICAgICAgdmlkZW9FbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjYW5wbGF5JykpO1xuICAgIH1cbiAgfSk7XG4gIHBsYXllci5vbihQbGF5ZXJFdmVudC5FcnJvciwgaW5mbyA9PiB7XG4gICAgdmFyIF93aW5kb3ckU2VudHJ5O1xuXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFBsYXllcjogJHtpbmZvLmNvZGV9LyR7aW5mby5uYW1lfWApO1xuICAgIGNvbnNvbGUud2FybihpbmZvKTtcblxuICAgIGlmICgvVGhlIHZpZGVvIGVsZW1lbnQgaGFzIHRocm93biBhIG1lZGlhIGVycm9yfFZpZGVvIGVsZW1lbnQgdHJpZ2dlcmVkIGFuIEVycm9yLy50ZXN0KGluZm8ubWVzc2FnZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAoX3dpbmRvdyRTZW50cnkgPSB3aW5kb3cuU2VudHJ5KSA9PT0gbnVsbCB8fCBfd2luZG93JFNlbnRyeSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3dpbmRvdyRTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihlcnJvcik7XG4gICAgdmlkZW9FbGVtZW50LmRpc3BhdGNoRXZlbnQoT2JqZWN0LmFzc2lnbihuZXcgQ3VzdG9tRXZlbnQoJ2Vycm9yJyksIHtcbiAgICAgIGVycm9yOiBpbmZvLFxuICAgICAgbWVzc2FnZTogYFBsYXllciBFcnJvcjogJHtpbmZvLmNvZGV9LyR7aW5mby5uYW1lfWBcbiAgICB9KSk7XG4gIH0pO1xuICBwbGF5ZXIub24oUGxheWVyRXZlbnQuU3RhbGxTdGFydGVkLCAoKSA9PiB2aWRlb0VsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3dhaXRpbmcnKSkpO1xuICBwbGF5ZXIub24oUGxheWVyRXZlbnQuVmlkZW9Eb3dubG9hZFF1YWxpdHlDaGFuZ2VkLCBldmVudCA9PiB2aWRlb0VsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rvd25sb2FkUXVhbGl0eUNoYW5nZScsIHtcbiAgICBkZXRhaWw6IHtcbiAgICAgIGJpdHJhdGU6IHBhcnNlSW50KGV2ZW50LnRhcmdldFF1YWxpdHkuYml0cmF0ZSAvIDEwMDAsIDEwKSxcbiAgICAgIGhlaWdodDogZXZlbnQudGFyZ2V0UXVhbGl0eS5oZWlnaHQsXG4gICAgICB3aWR0aDogZXZlbnQudGFyZ2V0UXVhbGl0eS53aWR0aFxuICAgIH1cbiAgfSkpKTtcbiAgcmV0dXJuIHBsYXllcjtcbn07XG5cbmNvbnN0IGxvYWRQbGF5ZXIgPSBhc3luYyAodmlkZW9FbGVtZW50LCB7XG4gIGNvbnRhaW5lcixcbiAgYXV0b3BsYXksXG4gIHNvdXJjZSxcbiAgc2hha2EsXG4gIGJpdG1vdmluXG59KSA9PiB7XG4gIGlmIChzb3VyY2UgIT09IG51bGwgJiYgc291cmNlICE9PSB2b2lkIDAgJiYgc291cmNlLm5hdGl2ZSkge1xuICAgIGNvbnN0IHBsYXllciA9IGF3YWl0IGxvYWROYXRpdmUoe1xuICAgICAgdmlkZW9FbGVtZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIHBsYXllcjtcbiAgfSAvLyBkZWZhdWx0IHRvIFNoYWthXG5cblxuICBpZiAoc2hha2EgfHwgIWJpdG1vdmluKSB7XG4gICAgY29uc3QgcGxheWVyID0gYXdhaXQgbG9hZFNoYWthKHZpZGVvRWxlbWVudCwgc2hha2EpO1xuXG4gICAgaWYgKGF1dG9wbGF5KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHZpZGVvRWxlbWVudC5hdXRvcGxheSA9IHRydWU7XG4gICAgfVxuXG4gICAgdmlkZW9FbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdwbGF5ZXJTdGFydGVkJykpO1xuICAgIHJldHVybiBwbGF5ZXI7XG4gIH1cblxuICBpZiAoYml0bW92aW4pIHtcbiAgICBjb25zdCBwbGF5ZXIgPSBhd2FpdCBsb2FkQml0bW92aW4oe1xuICAgICAgY29udGFpbmVyLFxuICAgICAgdmlkZW9FbGVtZW50LFxuICAgICAgYXV0b3BsYXksXG4gICAgICBjb25maWc6IGJpdG1vdmluXG4gICAgfSk7XG4gICAgdmlkZW9FbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdwbGF5ZXJTdGFydGVkJykpO1xuICAgIHJldHVybiBwbGF5ZXI7XG4gIH0gLy8gVE9ETyBsb2FkIG90aGVyIHBsYXllcnM6IGRhc2guanMsIGhscy5qc1xuXG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuY29uc3QgdmlkZW9TdHlsZSA9IHtcbiAgb2JqZWN0Rml0OiAnY29udGFpbicsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgcmlnaHQ6IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnXG59O1xuY29uc3QgdmlkZW9QcmVwYXJpbmdTdHlsZSA9IHtcbiAgb3BhY2l0eTogMFxufTtcblxuY29uc3QgVmlkZW8gPSAoe1xuICBzb3VyY2UsXG4gIGRybSxcbiAgcGxheWJhY2tTdGF0ZTogdGFyZ2V0U3RhdGUsXG4gIGN1cnJlbnRUaW1lOiB0YXJnZXRUaW1lLFxuICBwbGF5YmFja1JhdGUsXG4gIHF1YWxpdHksXG4gIHN1YnRpdGxlcyxcbiAgYXVkaW8sXG4gIHBsdWdpbnMgPSBbXSxcbiAgc2hha2EsXG4gIGJpdG1vdmluLFxuICB2aWRlb1JlZixcbiAgcGxheWVyUmVmLFxuICBvblBsYXllckxvYWRlZCxcbiAgb25QbGF5YmFja1N0YXRlQ2hhbmdlLFxuICBvbkJsb2NrZWRBdXRvcGxheSxcbiAgLi4udmlkZW9BdHRyaWJ1dGVzXG59KSA9PiB7XG4gIHZhciBfdmlkZW9FbGVtZW50JGN1cnJlbnQ7XG5cbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VSZWYoKTtcbiAgaGFuZGxlcnMuY3VycmVudCA9IHtcbiAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2UsXG4gICAgb25CbG9ja2VkQXV0b3BsYXlcbiAgfTtcbiAgY29uc3QgdmlkZW9Db250YWluZXIgPSB1c2VSZWYoKTtcbiAgY29uc3QgdmlkZW9FbGVtZW50ID0gdXNlUmVmKCk7XG4gIGNvbnN0IFtwbGF5YmFja1N0YXRlLCBzZXRQbGF5YmFja1N0YXRlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3BsYXllciwgc2V0UGxheWVyXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IHZpZGVvUmVhZHkgPSAoKF92aWRlb0VsZW1lbnQkY3VycmVudCA9IHZpZGVvRWxlbWVudC5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdmlkZW9FbGVtZW50JGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF92aWRlb0VsZW1lbnQkY3VycmVudC5yZWFkeVN0YXRlKSA+PSAyO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGxvYWRUYXNrID0gbG9hZFBsYXllcih2aWRlb0VsZW1lbnQuY3VycmVudCwge1xuICAgICAgY29udGFpbmVyOiB2aWRlb0NvbnRhaW5lci5jdXJyZW50LFxuICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgc291cmNlLFxuICAgICAgc2hha2EsXG4gICAgICBiaXRtb3ZpblxuICAgIH0pLnRoZW4oYmFzZVBsYXllciA9PiB7XG4gICAgICBzZXRQbGF5ZXIoYmFzZVBsYXllcik7XG4gICAgICBvblBsYXllckxvYWRlZCA9PT0gbnVsbCB8fCBvblBsYXllckxvYWRlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25QbGF5ZXJMb2FkZWQoYmFzZVBsYXllcik7XG5cbiAgICAgIGlmIChwbGF5ZXJSZWYpIHtcbiAgICAgICAgcGxheWVyUmVmLmN1cnJldCA9IGJhc2VQbGF5ZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYXNlUGxheWVyO1xuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiBsb2FkVGFzay50aGVuKGN1cnJlbnRQbGF5ZXIgPT4gY3VycmVudFBsYXllciA9PT0gbnVsbCB8fCBjdXJyZW50UGxheWVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50UGxheWVyLmRlc3Ryb3koKSk7XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc291cmNlICYmIChzb3VyY2UubGVuZ3RoID4gMCB8fCBzb3VyY2Uuc3JjIHx8IHNvdXJjZS5obHMgfHwgc291cmNlLmRhc2gpICYmIHBsYXllcikge1xuICAgICAgbG9hZCh2aWRlb0VsZW1lbnQuY3VycmVudCwge1xuICAgICAgICBwbGF5ZXIsXG4gICAgICAgIGRybSxcbiAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgc3RhcnRUaW1lOiB0YXJnZXRUaW1lXG4gICAgICB9LCBzb3VyY2UpO1xuICAgIH1cbiAgfSwgW3BsYXllciwgc291cmNlXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzdWJzY3JpYmVQbGF5YmFja1N0YXRlKHZpZGVvRWxlbWVudC5jdXJyZW50LCAoZXZlbnQsIHN0YXRlKSA9PiB7XG4gICAgdmFyIF9oYW5kbGVycyRjdXJyZW50JG9uUCwgX2hhbmRsZXJzJGN1cnJlbnQ7XG5cbiAgICAoX2hhbmRsZXJzJGN1cnJlbnQkb25QID0gKF9oYW5kbGVycyRjdXJyZW50ID0gaGFuZGxlcnMuY3VycmVudCkub25QbGF5YmFja1N0YXRlQ2hhbmdlKSA9PT0gbnVsbCB8fCBfaGFuZGxlcnMkY3VycmVudCRvblAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9oYW5kbGVycyRjdXJyZW50JG9uUC5jYWxsKF9oYW5kbGVycyRjdXJyZW50LCBldmVudCwgc3RhdGUpOyAvLyBleHRlcm5hbCBsb2dpYyBtYXkgd2FudCB0byBjaGFuZ2UgdGFyZ2V0U3RhdGUsIGhvbGQgcGxheWJhY2tTdGF0ZSB1cGRhdGVcbiAgICAvLyB0byBwcmV2ZW50IHVud2FudGVkIHN5bmNQbGF5YmFja1N0YXRlXG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gc2V0UGxheWJhY2tTdGF0ZShzdGF0ZSkpO1xuICB9KSwgW10pOyAvLyB1c2VFZmZlY3QgaXMgdG9vIGxhdGUgdG8gdW5sb2NrIHBsYXkgb24gU2FmYXJpXG4gIC8vIFRPRE8gY2hlY2sgaWYgdGhpcyB3b3JrIGFmdGVyIHVwZ3JhZGluZyBSZWFjdCAxOFxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBsYXllcikge1xuICAgICAgdmFyIF9zeW5jUGxheWJhY2tTdGF0ZTtcblxuICAgICAgKF9zeW5jUGxheWJhY2tTdGF0ZSA9IHN5bmNQbGF5YmFja1N0YXRlKHZpZGVvRWxlbWVudC5jdXJyZW50LCB7XG4gICAgICAgIHBsYXllcixcbiAgICAgICAgcGx1Z2luc1xuICAgICAgfSwgdGFyZ2V0U3RhdGUpKSA9PT0gbnVsbCB8fCBfc3luY1BsYXliYWNrU3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zeW5jUGxheWJhY2tTdGF0ZS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIHZhciBfaGFuZGxlcnMkY3VycmVudCRvbkIsIF9oYW5kbGVycyRjdXJyZW50MjtcblxuICAgICAgICByZXR1cm4gKF9oYW5kbGVycyRjdXJyZW50JG9uQiA9IChfaGFuZGxlcnMkY3VycmVudDIgPSBoYW5kbGVycy5jdXJyZW50KS5vbkJsb2NrZWRBdXRvcGxheSkgPT09IG51bGwgfHwgX2hhbmRsZXJzJGN1cnJlbnQkb25CID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaGFuZGxlcnMkY3VycmVudCRvbkIuY2FsbChfaGFuZGxlcnMkY3VycmVudDIsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3BsYXliYWNrU3RhdGUsIHBsYXllciAmJiB0YXJnZXRTdGF0ZV0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfSA9IGdldE1lZGlhVGltZSh2aWRlb0VsZW1lbnQuY3VycmVudCwgcGx1Z2lucywgcGxheWVyKTtcblxuICAgIGlmIChwbGF5ZXIgJiYgTWF0aC5hYnMoY3VycmVudFRpbWUgLSB0YXJnZXRUaW1lKSA+IDAuNSkge1xuICAgICAgLy8gc2Vla2luZyB1bmF2YWlsYWJsZSBjYXNlcyBhcmUgaGFuZGxlZCBieSBzZWVrIGZ1bmN0aW9uXG4gICAgICBzZWVrKHZpZGVvRWxlbWVudC5jdXJyZW50LCB7XG4gICAgICAgIHBsYXllcixcbiAgICAgICAgcGx1Z2luc1xuICAgICAgfSwgdGFyZ2V0VGltZSk7XG4gICAgfVxuICB9LCBbcGxheWVyICYmIHRhcmdldFRpbWVdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRQbGF5YmFja1JhdGUodmlkZW9FbGVtZW50LmN1cnJlbnQsIHtcbiAgICAgIHBsYXllclxuICAgIH0sIHBsYXliYWNrUmF0ZSk7XG4gIH0sIFtwbGF5YmFja1JhdGUsIHBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJ10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwbGF5ZXIpIHtcbiAgICAgIHNldFF1YWxpdHkodmlkZW9FbGVtZW50LmN1cnJlbnQsIHtcbiAgICAgICAgcGxheWVyXG4gICAgICB9LCBxdWFsaXR5KTtcbiAgICB9XG4gIH0sIFtxdWFsaXR5LCBwbGF5ZXJdKTtcbiAgcmV0dXJuIGpzeCQxKFwiZGl2XCIsIHtcbiAgICByZWY6IHZpZGVvQ29udGFpbmVyLFxuICAgIGNoaWxkcmVuOiBqc3gkMShcInZpZGVvXCIsIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUganN4LWExMXkvbWVkaWEtaGFzLWNhcHRpb25cbiAgICAgIHJlZjogbXVsdGlSZWYodmlkZW9SZWYsIHZpZGVvRWxlbWVudCksXG4gICAgICBtdXRlZDogdHJ1ZSxcbiAgICAgIHBsYXlzSW5saW5lOiB0cnVlLFxuICAgICAgY3NzOiBbdmlkZW9SZWFkeSB8fCB2aWRlb1ByZXBhcmluZ1N0eWxlLCB2aWRlb1N0eWxlLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6VmlkZW87XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsWnBaR1Z2TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFUUkpVU0lzSW1acGJHVWlPaUpXYVdSbGJ5NXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUlHVnpiR2x1ZEMxa2FYTmhZbXhsSUc1dkxYQmhjbUZ0TFhKbFlYTnphV2R1SUNvdlhHNHZLaUJBYW5ONFNXMXdiM0owVTI5MWNtTmxJRUJsYlc5MGFXOXVMM0psWVdOMElDb3ZYRzVwYlhCdmNuUWdlM1Z6WlVWbVptVmpkQ3dnZFhObFRHRjViM1YwUldabVpXTjBMQ0IxYzJWU1pXWXNJSFZ6WlZOMFlYUmxmU0JtY205dElDZHlaV0ZqZENkY2JtbHRjRzl5ZENCUWNtOXdWSGx3WlhNZ1puSnZiU0FuY0hKdmNDMTBlWEJsY3lkY2JseHVhVzF3YjNKMElHMTFiSFJwVW1WbUlHWnliMjBnSjNWMGFXd3ZiWFZzZEdsU1pXWW5YRzVwYlhCdmNuUWdiRzloWkZCc1lYbGxjaUJtY205dElDZHdiR0Y1WlhKRGIzSmxMMnh2WVdSUWJHRjVaWEluWEc1cGJYQnZjblFnZTF4dUlDQm5aWFJOWldScFlWUnBiV1VzWEc0Z0lITjFZbk5qY21saVpWQnNZWGxpWVdOclUzUmhkR1VzWEc0Z0lHeHZZV1FzWEc0Z0lITjVibU5RYkdGNVltRmphMU4wWVhSbExGeHVJQ0J6WldWckxGeHVJQ0J6WlhSUWJHRjVZbUZqYTFKaGRHVXNYRzRnSUhObGRGRjFZV3hwZEhrc1hHNGdJSE5sZEZOMVluUnBkR3hsTEZ4dUlDQnpaWFJCZFdScGJ5eGNibjBnWm5KdmJTQW5jR3hoZVdWeVEyOXlaUzl0WldScFlVSnBibVJwYm1kekoxeHVYRzVqYjI1emRDQjJhV1JsYjFOMGVXeGxJRDBnZTF4dUlDQnZZbXBsWTNSR2FYUTZJQ2RqYjI1MFlXbHVKeXhjYmlBZ2NHOXphWFJwYjI0NklDZGhZbk52YkhWMFpTY3NYRzRnSUhSdmNEb2dNQ3hjYmlBZ2JHVm1kRG9nTUN4Y2JpQWdZbTkwZEc5dE9pQXdMRnh1SUNCeWFXZG9kRG9nTUN4Y2JpQWdkMmxrZEdnNklDY3hNREFsSnl4Y2JpQWdhR1ZwWjJoME9pQW5NVEF3SlNjc1hHNTlYRzVjYm1OdmJuTjBJSFpwWkdWdlVISmxjR0Z5YVc1blUzUjViR1VnUFNCN1hHNGdJRzl3WVdOcGRIazZJREFzWEc1OVhHNWNibU52Ym5OMElGWnBaR1Z2SUQwZ0tIdGNiaUFnYzI5MWNtTmxMRnh1SUNCa2NtMHNYRzRnSUhCc1lYbGlZV05yVTNSaGRHVTZJSFJoY21kbGRGTjBZWFJsTEZ4dUlDQmpkWEp5Wlc1MFZHbHRaVG9nZEdGeVoyVjBWR2x0WlN4Y2JpQWdjR3hoZVdKaFkydFNZWFJsTEZ4dUlDQnhkV0ZzYVhSNUxGeHVJQ0J6ZFdKMGFYUnNaWE1zWEc0Z0lHRjFaR2x2TEZ4dUlDQndiSFZuYVc1eklEMGdXMTBzWEc0Z0lITm9ZV3RoTEZ4dUlDQmlhWFJ0YjNacGJpeGNiaUFnZG1sa1pXOVNaV1lzWEc0Z0lIQnNZWGxsY2xKbFppeGNiaUFnYjI1UWJHRjVaWEpNYjJGa1pXUXNYRzRnSUc5dVVHeGhlV0poWTJ0VGRHRjBaVU5vWVc1blpTeGNiaUFnYjI1Q2JHOWphMlZrUVhWMGIzQnNZWGtzWEc0Z0lDNHVMblpwWkdWdlFYUjBjbWxpZFhSbGMxeHVmU2tnUFQ0Z2UxeHVJQ0JqYjI1emRDQm9ZVzVrYkdWeWN5QTlJSFZ6WlZKbFppZ3BYRzRnSUdoaGJtUnNaWEp6TG1OMWNuSmxiblFnUFNCN2IyNVFiR0Y1WW1GamExTjBZWFJsUTJoaGJtZGxMQ0J2YmtKc2IyTnJaV1JCZFhSdmNHeGhlWDFjYmlBZ1kyOXVjM1FnZG1sa1pXOURiMjUwWVdsdVpYSWdQU0IxYzJWU1pXWW9LVnh1SUNCamIyNXpkQ0IyYVdSbGIwVnNaVzFsYm5RZ1BTQjFjMlZTWldZb0tWeHVJQ0JqYjI1emRDQmJjR3hoZVdKaFkydFRkR0YwWlN3Z2MyVjBVR3hoZVdKaFkydFRkR0YwWlYwZ1BTQjFjMlZUZEdGMFpTZ25KeWxjYmlBZ1kyOXVjM1FnVzNCc1lYbGxjaXdnYzJWMFVHeGhlV1Z5WFNBOUlIVnpaVk4wWVhSbEtDbGNiaUFnWTI5dWMzUWdkbWxrWlc5U1pXRmtlU0E5SUhacFpHVnZSV3hsYldWdWRDNWpkWEp5Wlc1MFB5NXlaV0ZrZVZOMFlYUmxJRDQ5SURKY2JseHVJQ0IxYzJWRlptWmxZM1FvS0NrZ1BUNGdlMXh1SUNBZ0lHTnZibk4wSUd4dllXUlVZWE5ySUQwZ2JHOWhaRkJzWVhsbGNpaDJhV1JsYjBWc1pXMWxiblF1WTNWeWNtVnVkQ3dnZTF4dUlDQWdJQ0FnWTI5dWRHRnBibVZ5T2lCMmFXUmxiME52Ym5SaGFXNWxjaTVqZFhKeVpXNTBMRnh1SUNBZ0lDQWdZWFYwYjNCc1lYazZJR1poYkhObExGeHVJQ0FnSUNBZ2MyOTFjbU5sTEZ4dUlDQWdJQ0FnYzJoaGEyRXNYRzRnSUNBZ0lDQmlhWFJ0YjNacGJpeGNiaUFnSUNCOUtTNTBhR1Z1S0dKaGMyVlFiR0Y1WlhJZ1BUNGdlMXh1SUNBZ0lDQWdjMlYwVUd4aGVXVnlLR0poYzJWUWJHRjVaWElwWEc0Z0lDQWdJQ0J2YmxCc1lYbGxja3h2WVdSbFpEOHVLR0poYzJWUWJHRjVaWElwWEc0Z0lDQWdJQ0JwWmlBb2NHeGhlV1Z5VW1WbUtTQjdYRzRnSUNBZ0lDQWdJSEJzWVhsbGNsSmxaaTVqZFhKeVpYUWdQU0JpWVhObFVHeGhlV1Z5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZbUZ6WlZCc1lYbGxjbHh1SUNBZ0lIMHBYRzRnSUNBZ2NtVjBkWEp1SUNncElEMCtJR3h2WVdSVVlYTnJMblJvWlc0b1kzVnljbVZ1ZEZCc1lYbGxjaUE5UGlCamRYSnlaVzUwVUd4aGVXVnlQeTVrWlhOMGNtOTVLQ2twWEc0Z0lIMHNJRnRkS1Z4dUlDQjFjMlZGWm1abFkzUW9LQ2tnUFQ0Z2UxeHVJQ0FnSUdsbUlDaGNiaUFnSUNBZ0lITnZkWEpqWlNBbUpseHVJQ0FnSUNBZ0tITnZkWEpqWlM1c1pXNW5kR2dnUGlBd0lIeDhJSE52ZFhKalpTNXpjbU1nZkh3Z2MyOTFjbU5sTG1oc2N5QjhmQ0J6YjNWeVkyVXVaR0Z6YUNrZ0ppWmNiaUFnSUNBZ0lIQnNZWGxsY2x4dUlDQWdJQ2tnZTF4dUlDQWdJQ0FnYkc5aFpDaGNiaUFnSUNBZ0lDQWdkbWxrWlc5RmJHVnRaVzUwTG1OMWNuSmxiblFzWEc0Z0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQndiR0Y1WlhJc1hHNGdJQ0FnSUNBZ0lDQWdaSEp0TEZ4dUlDQWdJQ0FnSUNBZ0lIQnNkV2RwYm5Nc1hHNGdJQ0FnSUNBZ0lDQWdjM1JoY25SVWFXMWxPaUIwWVhKblpYUlVhVzFsTEZ4dUlDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQnpiM1Z5WTJWY2JpQWdJQ0FnSUNsY2JpQWdJQ0I5WEc0Z0lIMHNJRnR3YkdGNVpYSXNJSE52ZFhKalpWMHBYRzVjYmlBZ2RYTmxSV1ptWldOMEtGeHVJQ0FnSUNncElEMCtYRzRnSUNBZ0lDQnpkV0p6WTNKcFltVlFiR0Y1WW1GamExTjBZWFJsS0hacFpHVnZSV3hsYldWdWRDNWpkWEp5Wlc1MExDQW9aWFpsYm5Rc0lITjBZWFJsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2hoYm1Sc1pYSnpMbU4xY25KbGJuUXViMjVRYkdGNVltRmphMU4wWVhSbFEyaGhibWRsUHk0b1pYWmxiblFzSUhOMFlYUmxLVnh1SUNBZ0lDQWdJQ0F2THlCbGVIUmxjbTVoYkNCc2IyZHBZeUJ0WVhrZ2QyRnVkQ0IwYnlCamFHRnVaMlVnZEdGeVoyVjBVM1JoZEdVc0lHaHZiR1FnY0d4aGVXSmhZMnRUZEdGMFpTQjFjR1JoZEdWY2JpQWdJQ0FnSUNBZ0x5OGdkRzhnY0hKbGRtVnVkQ0IxYm5kaGJuUmxaQ0J6ZVc1alVHeGhlV0poWTJ0VGRHRjBaVnh1SUNBZ0lDQWdJQ0J5WlhGMVpYTjBRVzVwYldGMGFXOXVSbkpoYldVb0tDa2dQVDRnYzJWMFVHeGhlV0poWTJ0VGRHRjBaU2h6ZEdGMFpTa3BYRzRnSUNBZ0lDQjlLU3hjYmlBZ0lDQmJYVnh1SUNBcFhHNGdJQzh2SUhWelpVVm1abVZqZENCcGN5QjBiMjhnYkdGMFpTQjBieUIxYm14dlkyc2djR3hoZVNCdmJpQlRZV1poY21sY2JpQWdMeThnVkU5RVR5QmphR1ZqYXlCcFppQjBhR2x6SUhkdmNtc2dZV1owWlhJZ2RYQm5jbUZrYVc1bklGSmxZV04wSURFNFhHNGdJSFZ6WlV4aGVXOTFkRVZtWm1WamRDZ29LU0E5UGlCN1hHNGdJQ0FnYVdZZ0tIQnNZWGxsY2lrZ2UxeHVJQ0FnSUNBZ2MzbHVZMUJzWVhsaVlXTnJVM1JoZEdVb1hHNGdJQ0FnSUNBZ0lIWnBaR1Z2Uld4bGJXVnVkQzVqZFhKeVpXNTBMRnh1SUNBZ0lDQWdJQ0I3Y0d4aGVXVnlMQ0J3YkhWbmFXNXpmU3hjYmlBZ0lDQWdJQ0FnZEdGeVoyVjBVM1JoZEdWY2JpQWdJQ0FnSUNrL0xtTmhkR05vS0dWeWNtOXlJRDArSUdoaGJtUnNaWEp6TG1OMWNuSmxiblF1YjI1Q2JHOWphMlZrUVhWMGIzQnNZWGsvTGlobGNuSnZjaWtwWEc0Z0lDQWdmVnh1SUNCOUxDQmJjR3hoZVdKaFkydFRkR0YwWlN3Z2NHeGhlV1Z5SUNZbUlIUmhjbWRsZEZOMFlYUmxYU2xjYmlBZ2RYTmxSV1ptWldOMEtDZ3BJRDArSUh0Y2JpQWdJQ0JqYjI1emRDQjdZM1Z5Y21WdWRGUnBiV1Y5SUQwZ1oyVjBUV1ZrYVdGVWFXMWxLSFpwWkdWdlJXeGxiV1Z1ZEM1amRYSnlaVzUwTENCd2JIVm5hVzV6TENCd2JHRjVaWElwWEc0Z0lDQWdhV1lnS0hCc1lYbGxjaUFtSmlCTllYUm9MbUZpY3loamRYSnlaVzUwVkdsdFpTQXRJSFJoY21kbGRGUnBiV1VwSUQ0Z01DNDFLU0I3WEc0Z0lDQWdJQ0F2THlCelpXVnJhVzVuSUhWdVlYWmhhV3hoWW14bElHTmhjMlZ6SUdGeVpTQm9ZVzVrYkdWa0lHSjVJSE5sWldzZ1puVnVZM1JwYjI1Y2JpQWdJQ0FnSUhObFpXc29kbWxrWlc5RmJHVnRaVzUwTG1OMWNuSmxiblFzSUh0d2JHRjVaWElzSUhCc2RXZHBibk45TENCMFlYSm5aWFJVYVcxbEtWeHVJQ0FnSUgxY2JpQWdmU3dnVzNCc1lYbGxjaUFtSmlCMFlYSm5aWFJVYVcxbFhTbGNiaUFnZFhObFJXWm1aV04wS0NncElEMCtJSHRjYmlBZ0lDQnpaWFJRYkdGNVltRmphMUpoZEdVb2RtbGtaVzlGYkdWdFpXNTBMbU4xY25KbGJuUXNJSHR3YkdGNVpYSjlMQ0J3YkdGNVltRmphMUpoZEdVcFhHNGdJSDBzSUZ0d2JHRjVZbUZqYTFKaGRHVXNJSEJzWVhsaVlXTnJVM1JoZEdVZ1BUMDlJQ2R3YkdGNWFXNW5KMTBwWEc0Z0lIVnpaVVZtWm1WamRDZ29LU0E5UGlCN1hHNGdJQ0FnYVdZZ0tIQnNZWGxsY2lrZ2UxeHVJQ0FnSUNBZ2MyVjBVWFZoYkdsMGVTaDJhV1JsYjBWc1pXMWxiblF1WTNWeWNtVnVkQ3dnZTNCc1lYbGxjbjBzSUhGMVlXeHBkSGtwWEc0Z0lDQWdmVnh1SUNCOUxDQmJjWFZoYkdsMGVTd2djR3hoZVdWeVhTbGNibHh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHhrYVhZZ2NtVm1QWHQyYVdSbGIwTnZiblJoYVc1bGNuMCtYRzRnSUNBZ0lDQThkbWxrWlc4Z0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJHbHVaU0JxYzNndFlURXhlUzl0WldScFlTMW9ZWE10WTJGd2RHbHZibHh1SUNBZ0lDQWdJQ0J5WldZOWUyMTFiSFJwVW1WbUtIWnBaR1Z2VW1WbUxDQjJhV1JsYjBWc1pXMWxiblFwZlZ4dUlDQWdJQ0FnSUNCdGRYUmxaRnh1SUNBZ0lDQWdJQ0J3YkdGNWMwbHViR2x1WlZ4dUlDQWdJQ0FnSUNCamMzTTllMXQyYVdSbGIxSmxZV1I1SUh4OElIWnBaR1Z2VUhKbGNHRnlhVzVuVTNSNWJHVXNJSFpwWkdWdlUzUjViR1ZkZlZ4dUlDQWdJQ0FnSUNCN0xpNHVkbWxrWlc5QmRIUnlhV0oxZEdWemZWeHVJQ0FnSUNBZ0x6NWNiaUFnSUNBOEwyUnBkajVjYmlBZ0tWeHVmVnh1WEc1V2FXUmxieTV3Y205d1ZIbHdaWE1nUFNCN1hHNGdJSE52ZFhKalpUb2dVSEp2Y0ZSNWNHVnpMbUZ5Y21GNVQyWW9VSEp2Y0ZSNWNHVnpMbTlpYW1WamRDa3NYRzRnSUdSeWJUb2dVSEp2Y0ZSNWNHVnpMbTlpYW1WamRDeGNiaUFnY0d4aGVXSmhZMnRUZEdGMFpUb2dVSEp2Y0ZSNWNHVnpMbk4wY21sdVp5eGNiaUFnWTNWeWNtVnVkRlJwYldVNklGQnliM0JVZVhCbGN5NXVkVzFpWlhJc1hHNGdJSEJzWVhsaVlXTnJVbUYwWlRvZ1VISnZjRlI1Y0dWekxtNTFiV0psY2l4Y2JpQWdjWFZoYkdsMGVUb2dVSEp2Y0ZSNWNHVnpMbTlpYW1WamRDeGNiaUFnYzNWaWRHbDBiR1Z6T2lCUWNtOXdWSGx3WlhNdWMzUnlhVzVuTEZ4dUlDQmhkV1JwYnpvZ1VISnZjRlI1Y0dWekxuTjBjbWx1Wnl4Y2JpQWdjMlZsYTJGaWJHVTZJRkJ5YjNCVWVYQmxjeTVpYjI5c0xGeHVJQ0J3YkhWbmFXNXpPaUJRY205d1ZIbHdaWE11WVhKeVlYa3NYRzRnSUdKcGRHMXZkbWx1T2lCUWNtOXdWSGx3WlhNdWIySnFaV04wTEZ4dUlDQnphR0ZyWVRvZ1VISnZjRlI1Y0dWekxtOWlhbVZqZEN4Y2JpQWdiMjVRYkdGNVpYSk1iMkZrWldRNklGQnliM0JVZVhCbGN5NW1kVzVqTEZ4dUlDQnZibEJzWVhsaVlXTnJVM1JoZEdWRGFHRnVaMlU2SUZCeWIzQlVlWEJsY3k1bWRXNWpMRnh1SUNCdmJrSnNiMk5yWldSQmRYUnZjR3hoZVRvZ1VISnZjRlI1Y0dWekxtWjFibU1zWEc0Z0lIWnBaR1Z2VW1WbU9pQlFjbTl3Vkhsd1pYTXViMjVsVDJaVWVYQmxLRnRRY205d1ZIbHdaWE11YjJKcVpXTjBMQ0JRY205d1ZIbHdaWE11Wm5WdVkxMHBMRnh1SUNCd2JHRjVaWEpTWldZNklGQnliM0JVZVhCbGN5NXZZbXBsWTNRc1hHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRlpwWkdWdlhHNGlYWDA9ICovXCJdLFxuICAgICAgLi4udmlkZW9BdHRyaWJ1dGVzXG4gICAgfSlcbiAgfSk7XG59O1xuXG5WaWRlby5wcm9wVHlwZXMgPSB7XG4gIHNvdXJjZTogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG4gIGRybTogUHJvcFR5cGVzLm9iamVjdCxcbiAgcGxheWJhY2tTdGF0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3VycmVudFRpbWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHBsYXliYWNrUmF0ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgcXVhbGl0eTogUHJvcFR5cGVzLm9iamVjdCxcbiAgc3VidGl0bGVzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhdWRpbzogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2Vla2FibGU6IFByb3BUeXBlcy5ib29sLFxuICBwbHVnaW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIGJpdG1vdmluOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzaGFrYTogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25QbGF5ZXJMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblBsYXliYWNrU3RhdGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsb2NrZWRBdXRvcGxheTogUHJvcFR5cGVzLmZ1bmMsXG4gIHZpZGVvUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICBwbGF5ZXJSZWY6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5cbmNvbnN0IHNob3VsZFNob3dTdWJ0aXRsZXMgPSBzdWJ0aXRsZXNNZW51ID0+IHN1YnRpdGxlc01lbnUubGVuZ3RoID4gMCB8fCBzdWJ0aXRsZXNNZW51WzBdO1xuXG5jb25zdCBzaG91bGRTaG93QXVkaW8gPSBhdWRpb01lbnUgPT4gYXVkaW9NZW51Lmxlbmd0aCA+IDE7XG5cbmNvbnN0IHNwZWVkSXRlbXMgPSBbMC4yNSwgMC41LCAwLjc1LCAxLCAxLjI1LCAxLjUsIDEuNzUsIDJdLm1hcCh2YWx1ZSA9PiAoe1xuICBsYWJlbDogYCR7dmFsdWV9eGAsXG4gIHZhbHVlXG59KSk7XG5cbmNvbnN0IGdldFF1YWxpdHlPcHRpb25zID0gKHtcbiAgc2VjdGlvbnMsXG4gIHZhbHVlczoge1xuICAgIHF1YWxpdHlcbiAgfVxufSkgPT4ge1xuICB2YXIgX3NlY3Rpb25zJGZpbmQsIF9zZWN0aW9ucyRmaW5kJGl0ZW1zJDtcblxuICByZXR1cm4gKF9zZWN0aW9ucyRmaW5kID0gc2VjdGlvbnMuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gJ3F1YWxpdHknKSkgPT09IG51bGwgfHwgX3NlY3Rpb25zJGZpbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfc2VjdGlvbnMkZmluZCRpdGVtcyQgPSBfc2VjdGlvbnMkZmluZC5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gcXVhbGl0eSkpID09PSBudWxsIHx8IF9zZWN0aW9ucyRmaW5kJGl0ZW1zJCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NlY3Rpb25zJGZpbmQkaXRlbXMkLm9wdGlvbnM7XG59O1xuXG5jb25zdCBhdXRvUXVhbGl0eU9wdGlvbiA9IHtcbiAgbGFiZWw6IGBBdXRvYCxcbiAgb3B0aW9uczoge1xuICAgIG1heEhlaWdodDogSW5maW5pdHksXG4gICAgbWluSGVpZ2h0OiAwXG4gIH0sXG4gIHZhbHVlOiAnYXV0bydcbn07XG5cbmNvbnN0IGdldFF1YWxpdHlJdGVtc0Zyb21NYW5pZmVzdCA9IHBsYXllciA9PiBbYXV0b1F1YWxpdHlPcHRpb25dLmNvbmNhdCgocGxheWVyLmdldEF2YWlsYWJsZVZpZGVvUXVhbGl0aWVzKCkgfHwgW10pLmZpbHRlcihxID0+IHEuaGVpZ2h0ID4gMCkuc29ydCgoYSwgYikgPT4gYi5oZWlnaHQgLSBhLmhlaWdodCkubWFwKHEgPT4gKHtcbiAgbGFiZWw6IGAke3EuaGVpZ2h0fXBgLFxuICAvLyBTZXQgdGhlIG1pbi9tYXggaGVpZ2h0IHRvIHRoZSBzYW1lIHZhbHVlIHRvIGZpeCB0aGUgcXVhbGl0eS5cbiAgb3B0aW9uczoge1xuICAgIG1heEhlaWdodDogcS5oZWlnaHQsXG4gICAgbWluSGVpZ2h0OiBxLmhlaWdodFxuICB9LFxuICB2YWx1ZTogcS5oZWlnaHRcbn0pKSk7XG5cbmNvbnN0IGdldFF1YWxpdHlTZXR0aW5ncyA9IChvcHRpb25zLCBwbGF5ZXIpID0+IHtcbiAgLy8gV2l0aCBuYXRpdmUgSExTLCBtYW5pZmVzdCByZXdyaXRlIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBxdWFsaXR5IHNldHRpbmdcbiAgLy8gVE9ETyBsZXQgdGhpcyBjb3ZlcmVkIGJ5IHRlc3QsIG1heWJlIHJlZmFjdG9yP1xuICBjb25zdCBpdGVtcyA9IG5lZWROYXRpdmVIbHMoKSAmJiAhb3B0aW9ucy5yZXdyaXRlTWFuaWZlc3QgPyBbXSA6IG9wdGlvbnMuaXRlbXMgfHwgZ2V0UXVhbGl0eUl0ZW1zRnJvbU1hbmlmZXN0KHBsYXllcik7XG4gIHJldHVybiBpdGVtcy5sZW5ndGggPiAwICYmIGl0ZW1zWzBdICYmIHtcbiAgICBuYW1lOiAncXVhbGl0eScsXG4gICAgdGl0bGU6ICdLS1MuUVVBTElUWScsXG4gICAgaXRlbXMsXG4gICAgZ2V0RGVmYXVsdDogKHByZWZlcnJlZCA9IG9wdGlvbnMuZGVmYXVsdCB8fCBpdGVtc1swXS52YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gcHJlZmVycmVkIHx8IGl0ZW1zWzBdLnZhbHVlO1xuICAgICAgcmV0dXJuIChuZWFyZXN0KGl0ZW1zLmZpbHRlcihpdGVtID0+IChpdGVtLmhlaWdodCB8fCBpdGVtLnZhbHVlKSA8PSBtYXhIZWlnaHQpLCBpdGVtID0+IChpdGVtLmhlaWdodCB8fCBpdGVtLnZhbHVlKSAtIG1heEhlaWdodCkgfHwgaXRlbXNbMF0pLnZhbHVlO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGdldFNlbGVjdGVkQXVkaW9OYW1lID0gcGxheWVyID0+IHtcbiAgY29uc3QgbGFuZyA9IGdldEF1ZGlvKHt9LCB7XG4gICAgcGxheWVyXG4gIH0pO1xuICAvKlxuICAgIFNvbWV0aW1lcywgSExTIG1hbmlmZXN0IGRvZXNuJ3QgZGVzY3JpYmUgdGhlIGRlZmF1bHQgYXVkaW8gdHJhY2suXG4gICAgR2V0IGN1cnJlbnQgYXVkaW8gdHJhY2sgaW5mb3JtYXRpb24gaXMgdW5kZWZpbmVkIGV2ZW4gdGhvdWdoIHRoZSBwbGF5ZXIgc3RpbGwgaGFzIGF1ZGlvIHN0cmVhbWluZy5cbiAgICBGb3IgdGhpcyBjYXNlLCB3ZSBzZWxlY3QgZmlyc3QgYXVkaW8gdHJhY2suXG4gICAgTW9yZSBkZXRhaWwgcGxlYXNlIHJlZmVyIHRvIE9UUC0zNDUwLlxuICAqL1xuXG4gIGNvbnN0IGF1ZGlvTGlzdCA9IGdldEF1ZGlvTGlzdCh7fSwge1xuICAgIHBsYXllclxuICB9KTtcbiAgY29uc3QgZGVmYXVsdEF1ZGlvTmFtZSA9IGF1ZGlvTGlzdC5sZW5ndGggPyBhdWRpb0xpc3RbMF0ubGFuZyA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGxhbmcgIT09IHVuZGVmaW5lZCA/IGxhbmcgOiBkZWZhdWx0QXVkaW9OYW1lO1xufTtcblxuY29uc3QgZ2V0RGVmYXVsdCA9IChzZWN0aW9uLCB7XG4gIHByZWZlcnJlZFxufSkgPT4ge1xuICBpZiAodHlwZW9mIHNlY3Rpb24uZ2V0RGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzZWN0aW9uLmdldERlZmF1bHQocHJlZmVycmVkKTtcbiAgfVxuXG4gIGlmIChzZWN0aW9uLm5hbWUgPT09ICdzcGVlZCcpIHtcbiAgICByZXR1cm4gcHJlZmVycmVkICE9PSBudWxsICYmIHByZWZlcnJlZCAhPT0gdm9pZCAwID8gcHJlZmVycmVkIDogMTtcbiAgfVxufTtcblxuY29uc3QgZ2V0U2V0dGluZ3NEYXRhID0gKHtcbiAgbWVkaWEsXG4gIHBsYXllcixcbiAgY29udGVudFR5cGUsXG4gIHNvdXJjZSA9IFtdLFxuICBxdWFsaXR5ID0ge30sXG4gIHByZWZlcnJlZCA9IHt9LFxuICBvdGhlclNlY3Rpb25zID0gW11cbn0pID0+IHtcbiAgdmFyIF9zdWJ0aXRsZUl0ZW1zJGZpbmQ7XG5cbiAgLy8gVE9ETyBleHRyYWN0IGJhc2UgcGxheWVyIHNwZWNpZmljIHRoaW5nc1xuICBjb25zdCBzdWJ0aXRsZUl0ZW1zID0gZ2V0U3VidGl0bGVzKHt9LCB7XG4gICAgcGxheWVyXG4gIH0pO1xuICBjb25zdCBzZWxlY3RlZFN1YnRpdGxlTmFtZSA9ICgoX3N1YnRpdGxlSXRlbXMkZmluZCA9IHN1YnRpdGxlSXRlbXMuZmluZCh0cmFjayA9PiB0cmFjay5lbmFibGVkKSkgPT09IG51bGwgfHwgX3N1YnRpdGxlSXRlbXMkZmluZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N1YnRpdGxlSXRlbXMkZmluZC52YWx1ZSkgfHwgJ29mZic7XG4gIGNvbnN0IGF1ZGlvSXRlbXMgPSBnZXRBdWRpb0xpc3Qoe30sIHtcbiAgICBwbGF5ZXJcbiAgfSkuZmlsdGVyKHRyYWNrID0+IHRyYWNrLmxhbmcgJiYgdHJhY2subGFuZyAhPT0gJ3VuZCcpLm1hcCh0cmFjayA9PiAoe1xuICAgIGxhYmVsOiB0cmFjay5sYWJlbCxcbiAgICB2YWx1ZTogdHJhY2subGFuZ1xuICB9KSkgfHwgW107XG4gIGNvbnN0IHNlbGVjdGVkU291cmNlID0gZ2V0U291cmNlKHNvdXJjZSwge1xuICAgIHByZWZlck1hbmlmZXN0VHlwZTogbmVlZE5hdGl2ZUhscygpID8gJ2hscycgOiAnZGFzaCdcbiAgfSkgfHwge307XG4gIGNvbnN0IHNlY3Rpb25zID0gW3F1YWxpdHkgJiYgZ2V0UXVhbGl0eVNldHRpbmdzKHsgLi4ucXVhbGl0eSxcbiAgICBpdGVtczogc2VsZWN0ZWRTb3VyY2UucXVhbGl0eU9wdGlvbnMsXG4gICAgdHlwZTogc2VsZWN0ZWRTb3VyY2UudHlwZVxuICB9LCBwbGF5ZXIpLCBzaG91bGRTaG93U3VidGl0bGVzKHN1YnRpdGxlSXRlbXMpICYmIHtcbiAgICBuYW1lOiAnc3VidGl0bGVzJyxcbiAgICB0aXRsZTogJ0tLUy5TVUJUSVRMRVMnLFxuICAgIGl0ZW1zOiBbLi4uc3VidGl0bGVJdGVtcywge1xuICAgICAgbGFiZWw6ICdPRkYnLFxuICAgICAgdmFsdWU6ICdvZmYnXG4gICAgfV1cbiAgfSwgc2hvdWxkU2hvd0F1ZGlvKGF1ZGlvSXRlbXMpICYmIHtcbiAgICBuYW1lOiAnYXVkaW8nLFxuICAgIHRpdGxlOiAnS0tTLkFVRElPJyxcbiAgICBpdGVtczogYXVkaW9JdGVtc1xuICB9LCBjb250ZW50VHlwZSAhPT0gJ2xpdmVzJyAmJiB7XG4gICAgbmFtZTogJ3NwZWVkJyxcbiAgICB0aXRsZTogJ0tLUy5TRVRUSU5HLlNQRUVEJyxcbiAgICBpdGVtczogc3BlZWRJdGVtc1xuICB9XS5jb25jYXQob3RoZXJTZWN0aW9ucykuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCB2YWx1ZXMgPSBzZWN0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgc2VjdGlvbikgPT4ge1xuICAgIC8vIFRPRE8gdGFrZSBmYWxsYmFjayBvcHRpb24gaWYgcHJlZmVycmVkIGlzIG5vdCBhdmFpbGFibGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICByZXN1bHRbc2VjdGlvbi5uYW1lXSA9IGdldERlZmF1bHQoc2VjdGlvbiwge1xuICAgICAgcHJlZmVycmVkOiBwcmVmZXJyZWRbc2VjdGlvbi5uYW1lXVxuICAgIH0pIHx8IHByZWZlcnJlZFtzZWN0aW9uLm5hbWVdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbiAgdmFsdWVzLnN1YnRpdGxlcyA9IHNlbGVjdGVkU3VidGl0bGVOYW1lO1xuICB2YWx1ZXMuYXVkaW8gPSBnZXRTZWxlY3RlZEF1ZGlvTmFtZShwbGF5ZXIpO1xuXG4gIGlmICghdmFsdWVzLnNwZWVkICYmIChtZWRpYSA9PT0gbnVsbCB8fCBtZWRpYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVkaWEucGxheWJhY2tSYXRlKSA+IDApIHtcbiAgICB2YWx1ZXMuc3BlZWQgPSBtZWRpYS5wbGF5YmFja1JhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNlY3Rpb25zLFxuICAgIHZhbHVlc1xuICB9O1xufTtcblxuY29uc3Qgdm9sdW1lU3RvcmFnZUtleSA9ICdLS1NQbGF5YmFjay12b2x1bWUnO1xuXG5jb25zdCBzeW5jVm9sdW1lID0gKHZpZGVvLCBzZXRJbml0Vm9sdW1lKSA9PiB7XG4gIGxldCBpbml0aWFsVm9sdW1lID0gMTtcblxuICB0cnkge1xuICAgIHZhciBfSlNPTiRwYXJzZSwgX2xvY2FsU3RvcmFnZTtcblxuICAgIGluaXRpYWxWb2x1bWUgPSAoX0pTT04kcGFyc2UgPSBKU09OLnBhcnNlKChfbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlKSA9PT0gbnVsbCB8fCBfbG9jYWxTdG9yYWdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbG9jYWxTdG9yYWdlLmdldEl0ZW0odm9sdW1lU3RvcmFnZUtleSkpKSAhPT0gbnVsbCAmJiBfSlNPTiRwYXJzZSAhPT0gdm9pZCAwID8gX0pTT04kcGFyc2UgOiAxOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZSkge31cblxuICBzZXRJbml0Vm9sdW1lKGluaXRpYWxWb2x1bWUpO1xuICB2aWRlby5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgndm9sdW1lY2hhbmdlJykpO1xuICByZXR1cm4gb24odmlkZW8sICd2b2x1bWVjaGFuZ2UnLCAoKSA9PiB7XG4gICAgdmFyIF9sb2NhbFN0b3JhZ2UyO1xuXG4gICAgY29uc3Qgdm9sdW1lID0gdmlkZW8ubXV0ZWQgPyAwIDogdmlkZW8udm9sdW1lO1xuICAgIChfbG9jYWxTdG9yYWdlMiA9IGxvY2FsU3RvcmFnZSkgPT09IG51bGwgfHwgX2xvY2FsU3RvcmFnZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9sb2NhbFN0b3JhZ2UyLnNldEl0ZW0odm9sdW1lU3RvcmFnZUtleSwgdm9sdW1lKTtcbiAgfSk7XG59O1xuXG5jb25zdCBsaW5rTWVkaWFWb2x1bWUgPSBnZXRPcHRpb25zID0+IHtcbiAgbGV0IGxhc3RWb2x1bWUgPSAxO1xuXG4gIGNvbnN0IHN1YnNjcmliZSA9IGhhbmRsZXIgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHZpZGVvOiBtZWRpYVxuICAgIH0gPSBnZXRPcHRpb25zKCk7XG4gICAgaGFuZGxlcih7XG4gICAgICB2b2x1bWU6IG1lZGlhLnZvbHVtZSxcbiAgICAgIG11dGVkOiBtZWRpYS5tdXRlZFxuICAgIH0pO1xuICAgIHJldHVybiBvbihtZWRpYSwgJ3ZvbHVtZWNoYW5nZScsICgpID0+IGhhbmRsZXIoe1xuICAgICAgdm9sdW1lOiBtZWRpYS52b2x1bWUsXG4gICAgICBtdXRlZDogbWVkaWEubXV0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgY29uc3Qgb25DaGFuZ2UgPSAodm9sdW1lLCB7XG4gICAgY29tbWl0XG4gIH0gPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHZpZGVvOiBtZWRpYSxcbiAgICAgIGdldFBsYXllclxuICAgIH0gPSBnZXRPcHRpb25zKCk7XG5cbiAgICBpZiAoY29tbWl0KSB7XG4gICAgICBpZiAodm9sdW1lID4gMCkge1xuICAgICAgICBsYXN0Vm9sdW1lID0gdm9sdW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZm9yIHVubXV0ZSB2b2x1bWVcbiAgICAgICAgc2V0Vm9sdW1lKG1lZGlhLCB7XG4gICAgICAgICAgcGxheWVyOiBnZXRQbGF5ZXIoKVxuICAgICAgICB9LCBsYXN0Vm9sdW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRWb2x1bWUobWVkaWEsIHtcbiAgICAgIHBsYXllcjogZ2V0UGxheWVyKClcbiAgICB9LCB2b2x1bWUpO1xuICB9O1xuXG4gIGNvbnN0IHRvZ2dsZU11dGUkMSA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB2aWRlbzogbWVkaWFcbiAgICB9ID0gZ2V0T3B0aW9ucygpO1xuICAgIHRvZ2dsZU11dGUobWVkaWEpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc3Vic2NyaWJlLFxuICAgIG9uQ2hhbmdlLFxuICAgIHRvZ2dsZU11dGU6IHRvZ2dsZU11dGUkMVxuICB9O1xufTtcblxuY29uc3QgcGFyc2VWVFQgPSBkYXRhID0+IHtcbiAgY29uc3QgbGluZXMgPSBkYXRhLnNwbGl0KC9cXG5cXG4vZykuc2xpY2UoMSk7IC8vIG1heSByZXBsYWNlIHdpdGggYXN5bmMgcGFyc2VyIHRvIHByZXZlbnQgYmxvY2tpbmcgcmVuZGVyXG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShsaW5lcy5tYXAobGluZSA9PiB7XG4gICAgY29uc3QgW3RpbWUsIHRleHRdID0gbGluZS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgW3N0YXJ0VGltZSwgZW5kVGltZV0gPSB0aW1lLnNwbGl0KCctLT4nKS5tYXAoY29udmVydFRvU2Vjb25kcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0VGltZSxcbiAgICAgIGVuZFRpbWUsXG4gICAgICB0ZXh0XG4gICAgfTtcbiAgfSkpO1xufTtcblxuY29uc3QgcmVwbGFjZUxhc3QgPSAodXJsLCBwYXRoKSA9PiB1cmwucmVwbGFjZSgvXFwvW14vXSskLywgYC8ke3BhdGh9YCk7XG5cbmNvbnN0IHBhcnNlVGh1bWJuYWlscyA9IChkYXRhLCB1cmwpID0+IHBhcnNlVlRUKGRhdGEpLnRoZW4oaXRlbXMgPT4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICBjb25zdCBbaW1hZ2VQYXRoLCwgeCwgeSwgd2lkdGgsIGhlaWdodF0gPSBpdGVtLnRleHQuc3BsaXQoL1sjPSxdL2cpO1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogaXRlbS5zdGFydFRpbWUsXG4gICAgZW5kVGltZTogaXRlbS5lbmRUaW1lLFxuICAgIGltYWdlOiByZXBsYWNlTGFzdCh1cmwsIGltYWdlUGF0aCksXG4gICAgcG9zaXRpb246IHtcbiAgICAgIHg6IHBhcnNlRmxvYXQoeCksXG4gICAgICB5OiBwYXJzZUZsb2F0KHkpLFxuICAgICAgd2lkdGg6IHBhcnNlRmxvYXQod2lkdGgpLFxuICAgICAgaGVpZ2h0OiBwYXJzZUZsb2F0KGhlaWdodClcbiAgICB9XG4gIH07XG59KSk7XG5cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmNvbnN0IGNvbnRhaW5lclN0eWxlID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgbGVmdDogJ2NhbGMoLTEwMDB2dyAtIDEwMCUpJyxcbiAgYm90dG9tOiAnMjhweCcsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ2JvdHRvbScsXG4gIHRyYW5zZm9ybTogYFxuICAgIHRyYW5zbGF0ZVgoY2FsYyhtYXgoXG4gICAgICB2YXIoLS10aHVtYm5haWwtd2lkdGgpICogMC41cHggLSA1MCUsXG4gICAgICBtaW4oXG4gICAgICAgIHZhcigtLXBvaW50ZXIteCkgLSB2YXIoLS1zZWVrYmFyLWxlZnQpIC0gNTAlLFxuICAgICAgICB2YXIoLS1zZWVrYmFyLXJpZ2h0KSAtIDUwJSAtIHZhcigtLXRodW1ibmFpbC13aWR0aCkgKiAwLjVweCAtIDJlbVxuICAgICAgKVxuICAgICkpKVxuICAgIHNjYWxlKGNhbGModmFyKC0tdGh1bWJuYWlsLXdpZHRoKSAvIHZhcigtLXRodW1ibmFpbC1vcmlnaW5hbC13aWR0aCkpKSBcbiAgYCxcbiAgJz4gZGl2Jzoge1xuICAgIGJvcmRlcjogJzFweCBzb2xpZCB3aGl0ZScsXG4gICAgYm94U2hhZG93OiAnMCAwIDVweCAycHggcmdiYSgwLCAwLCAwLCAwLjMpJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMDAwJ1xuICB9XG59O1xuY29uc3Qgc2hvd1N0eWxlID0ge1xuICBsZWZ0OiAwLFxuICB0cmFuc2l0aW9uOiAnei1pbmRleCAwcyBsaW5lYXIsIG9wYWNpdHkgMC41cyBlYXNlJ1xufTtcbmNvbnN0IFZpZGVvVGh1bWJuYWlsID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKHtcbiAgY2xhc3NOYW1lLFxuICBzdHlsZSxcbiAgdGltZSxcbiAgaW1hZ2UsXG4gIHgsXG4gIHksXG4gIHdpZHRoLFxuICBoZWlnaHRcbn0sIHJlZikgPT4ganN4cyhcImRpdlwiLCB7XG4gIHJlZjogcmVmIC8vIFVzZSBOdW1iZXIuaXNGaW5pdGUgdG8gZGV0ZWN0IGJvb2xlYW5cbiAgLFxuICBjc3M6IFtjb250YWluZXJTdHlsZSwgTnVtYmVyLmlzRmluaXRlKHRpbWUpICYmIHRpbWUgPj0gMCAmJiBzaG93U3R5bGUsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIjtsYWJlbDpWaWRlb1RodW1ibmFpbDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxacFpHVnZWR2gxYldKdVlXbHNMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVhWRFRTSXNJbVpwYkdVaU9pSldhV1JsYjFSb2RXMWlibUZwYkM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxSUVCcWMzaEpiWEJ2Y25SVGIzVnlZMlVnUUdWdGIzUnBiMjR2Y21WaFkzUWdLaTljYm1sdGNHOXlkQ0I3Wm05eWQyRnlaRkpsWm4wZ1puSnZiU0FuY21WaFkzUW5YRzVwYlhCdmNuUWdVSEp2Y0ZSNWNHVnpJR1p5YjIwZ0ozQnliM0F0ZEhsd1pYTW5YRzVjYm1sdGNHOXlkQ0JtYjNKdFlYUjBaV1JVYVcxbElHWnliMjBnSjNWMGFXd3ZabTl5YldGMGRHVmtWR2x0WlNkY2JseHVZMjl1YzNRZ1kyOXVkR0ZwYm1WeVUzUjViR1VnUFNCN1hHNGdJSEJ2YzJsMGFXOXVPaUFuWVdKemIyeDFkR1VuTEZ4dUlDQnNaV1owT2lBblkyRnNZeWd0TVRBd01IWjNJQzBnTVRBd0pTa25MRnh1SUNCaWIzUjBiMjA2SUNjeU9IQjRKeXhjYmlBZ2RHVjRkRUZzYVdkdU9pQW5ZMlZ1ZEdWeUp5eGNiaUFnZEhKaGJuTm1iM0p0VDNKcFoybHVPaUFuWW05MGRHOXRKeXhjYmlBZ2RISmhibk5tYjNKdE9pQmdYRzRnSUNBZ2RISmhibk5zWVhSbFdDaGpZV3hqS0cxaGVDaGNiaUFnSUNBZ0lIWmhjaWd0TFhSb2RXMWlibUZwYkMxM2FXUjBhQ2tnS2lBd0xqVndlQ0F0SURVd0pTeGNiaUFnSUNBZ0lHMXBiaWhjYmlBZ0lDQWdJQ0FnZG1GeUtDMHRjRzlwYm5SbGNpMTRLU0F0SUhaaGNpZ3RMWE5sWld0aVlYSXRiR1ZtZENrZ0xTQTFNQ1VzWEc0Z0lDQWdJQ0FnSUhaaGNpZ3RMWE5sWld0aVlYSXRjbWxuYUhRcElDMGdOVEFsSUMwZ2RtRnlLQzB0ZEdoMWJXSnVZV2xzTFhkcFpIUm9LU0FxSURBdU5YQjRJQzBnTW1WdFhHNGdJQ0FnSUNBcFhHNGdJQ0FnS1NrcFhHNGdJQ0FnYzJOaGJHVW9ZMkZzWXloMllYSW9MUzEwYUhWdFltNWhhV3d0ZDJsa2RHZ3BJQzhnZG1GeUtDMHRkR2gxYldKdVlXbHNMVzl5YVdkcGJtRnNMWGRwWkhSb0tTa3BJRnh1SUNCZ0xGeHVJQ0FuUGlCa2FYWW5PaUI3WEc0Z0lDQWdZbTl5WkdWeU9pQW5NWEI0SUhOdmJHbGtJSGRvYVhSbEp5eGNiaUFnSUNCaWIzaFRhR0ZrYjNjNklDY3dJREFnTlhCNElESndlQ0J5WjJKaEtEQXNJREFzSURBc0lEQXVNeWtuTEZ4dUlDQWdJR0poWTJ0bmNtOTFibVJEYjJ4dmNqb2dKeU13TURBbkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQnphRzkzVTNSNWJHVWdQU0I3WEc0Z0lHeGxablE2SURBc1hHNGdJSFJ5WVc1emFYUnBiMjQ2SUNkNkxXbHVaR1Y0SURCeklHeHBibVZoY2l3Z2IzQmhZMmwwZVNBd0xqVnpJR1ZoYzJVbkxGeHVmVnh1WEc1amIyNXpkQ0JXYVdSbGIxUm9kVzFpYm1GcGJDQTlJR1p2Y25kaGNtUlNaV1lvWEc0Z0lDaDdZMnhoYzNOT1lXMWxMQ0J6ZEhsc1pTd2dkR2x0WlN3Z2FXMWhaMlVzSUhnc0lIa3NJSGRwWkhSb0xDQm9aV2xuYUhSOUxDQnlaV1lwSUQwK0lDaGNiaUFnSUNBOFpHbDJYRzRnSUNBZ0lDQnlaV1k5ZTNKbFpuMWNiaUFnSUNBZ0lDOHZJRlZ6WlNCT2RXMWlaWEl1YVhOR2FXNXBkR1VnZEc4Z1pHVjBaV04wSUdKdmIyeGxZVzVjYmlBZ0lDQWdJR056Y3oxN1cyTnZiblJoYVc1bGNsTjBlV3hsTENCT2RXMWlaWEl1YVhOR2FXNXBkR1VvZEdsdFpTa2dKaVlnZEdsdFpTQStQU0F3SUNZbUlITm9iM2RUZEhsc1pWMTlYRzRnSUNBZ0lDQmpiR0Z6YzA1aGJXVTllMk5zWVhOelRtRnRaWDFjYmlBZ0lDQWdJSE4wZVd4bFBYdDdYRzRnSUNBZ0lDQWdJQzR1TG5OMGVXeGxMRnh1SUNBZ0lDQWdJQ0FuTFMxMGFIVnRZbTVoYVd3dGIzSnBaMmx1WVd3dGQybGtkR2duT2lCM2FXUjBhQ3hjYmlBZ0lDQWdJSDE5WEc0Z0lDQWdQbHh1SUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNCemRIbHNaVDE3ZTF4dUlDQWdJQ0FnSUNBZ0lIZHBaSFJvT2lCZ0pIdDNhV1IwYUgxd2VHQXNYRzRnSUNBZ0lDQWdJQ0FnYUdWcFoyaDBPaUJnSkh0b1pXbG5hSFI5Y0hoZ0xGeHVJQ0FnSUNBZ0lDQWdJR0poWTJ0bmNtOTFibVJKYldGblpUb2dZSFZ5YkNna2UybHRZV2RsZlNsZ0xGeHVJQ0FnSUNBZ0lDQWdJR0poWTJ0bmNtOTFibVJRYjNOcGRHbHZiam9nWUMwa2UzaDljSGdnTFNSN2VYMXdlR0FzWEc0Z0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBdlBseHVJQ0FnSUNBZ2UyWnZjbTFoZEhSbFpGUnBiV1VvZEdsdFpTbDlYRzRnSUNBZ1BDOWthWFkrWEc0Z0lDbGNiaWxjYmx4dVZtbGtaVzlVYUhWdFltNWhhV3d1Y0hKdmNGUjVjR1Z6SUQwZ2UxeHVJQ0JqYkdGemMwNWhiV1U2SUZCeWIzQlVlWEJsY3k1emRISnBibWNzWEc0Z0lITjBlV3hsT2lCUWNtOXdWSGx3WlhNdWIySnFaV04wTEZ4dUlDQjBhVzFsT2lCUWNtOXdWSGx3WlhNdWIyNWxUMlpVZVhCbEtGdFFjbTl3Vkhsd1pYTXViblZ0WW1WeUxDQlFjbTl3Vkhsd1pYTXViMjVsVDJZb1cyWmhiSE5sWFNsZEtTeGNiaUFnYVcxaFoyVTZJRkJ5YjNCVWVYQmxjeTV6ZEhKcGJtY3NYRzRnSUhnNklGQnliM0JVZVhCbGN5NXVkVzFpWlhJc1hHNGdJSGs2SUZCeWIzQlVlWEJsY3k1dWRXMWlaWElzWEc0Z0lIZHBaSFJvT2lCUWNtOXdWSGx3WlhNdWJuVnRZbVZ5TEZ4dUlDQm9aV2xuYUhRNklGQnliM0JVZVhCbGN5NXVkVzFpWlhJc1hHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRlpwWkdWdlZHaDFiV0p1WVdsc1hHNGlYWDA9ICovXCJdLFxuICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgc3R5bGU6IHsgLi4uc3R5bGUsXG4gICAgJy0tdGh1bWJuYWlsLW9yaWdpbmFsLXdpZHRoJzogd2lkdGhcbiAgfSxcbiAgY2hpbGRyZW46IFtqc3gkMShcImRpdlwiLCB7XG4gICAgc3R5bGU6IHtcbiAgICAgIHdpZHRoOiBgJHt3aWR0aH1weGAsXG4gICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGAsXG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtpbWFnZX0pYCxcbiAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogYC0ke3h9cHggLSR7eX1weGBcbiAgICB9XG4gIH0pLCBmb3JtYXR0ZWRUaW1lKHRpbWUpXVxufSkpO1xuVmlkZW9UaHVtYm5haWwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICB0aW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaW1hZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gIHk6IFByb3BUeXBlcy5udW1iZXIsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXJcbn07XG5cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cblxuY29uc3QgYXQgPSAoYXJyYXksIGluZGV4KSA9PiBpbmRleCA8IDAgPyBhcnJheVthcnJheS5sZW5ndGggKyBpbmRleF0gOiBhcnJheVtpbmRleF07XG5cbmNvbnN0IFNlZWtQcmV2aWV3ID0gKHtcbiAgdGh1bWJuYWlsc1VybCxcbiAgdGltZVxufSkgPT4ge1xuICBjb25zdCB0aHVtYm5haWxSZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgW3RodW1ibmFpbHMsIHNldFRodW1ibmFpbHNdID0gdXNlU3RhdGUoW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjYW5jZWwgPSBmYWxzZTtcblxuICAgIGlmICh0aHVtYm5haWxzVXJsKSB7XG4gICAgICBheGlvcy5nZXQodGh1bWJuYWlsc1VybCkudGhlbihyZXN1bHQgPT4gcGFyc2VUaHVtYm5haWxzKHJlc3VsdC5kYXRhLCB0aHVtYm5haWxzVXJsKSkudGhlbihkYXRhID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWwpIHNldFRodW1ibmFpbHMoZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2V0VGh1bWJuYWlscyhbXSk7XG4gICAgICBjYW5jZWwgPSB0cnVlO1xuICAgIH07XG4gIH0sIFt0aHVtYm5haWxzVXJsXSk7XG4gIGNvbnN0IGN1cnJlbnRUaHVtYm5haWwgPSB1c2VNZW1vKCgpID0+IHRodW1ibmFpbHMuZmluZCh0ID0+IHQuc3RhcnRUaW1lIDw9IHRpbWUgJiYgdGltZSA8PSB0LmVuZFRpbWUpIHx8IGF0KHRodW1ibmFpbHMsIC0xKSB8fCAnJywgW3RpbWUsIHRodW1ibmFpbHNdKTtcbiAgcmV0dXJuIHRodW1ibmFpbHMubGVuZ3RoID4gMCAmJiBqc3gkMShWaWRlb1RodW1ibmFpbCwge1xuICAgIHJlZjogdGh1bWJuYWlsUmVmLFxuICAgIHRpbWU6IHRpbWUsXG4gICAgaW1hZ2U6IGN1cnJlbnRUaHVtYm5haWwuaW1hZ2UsXG4gICAgLi4uY3VycmVudFRodW1ibmFpbC5wb3NpdGlvblxuICB9KTtcbn07XG5cblNlZWtQcmV2aWV3LnByb3BUeXBlcyA9IHtcbiAgdGh1bWJuYWlsc1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGltZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSlcbn07XG5cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmNvbnN0IHN1YnRpdGxlc1N0eWxlID0ge1xuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgYm90dG9tOiAnNmVtJyxcbiAgY29sb3I6ICcjZThlNmUzJyxcbiAgdGV4dFNoYWRvdzogYCMwMDAgLTFweCAtMXB4IDBweCwgIzAwMCAxcHggLTFweCAwcHgsICMwMDAgLTFweCAxcHggMHB4LCAjMDAwIDFweCAxcHggMHB4YCxcbiAgd2hpdGVTcGFjZTogJ3ByZS1saW5lJyxcbiAgdGV4dEFsaWduOiAnY2VudGVyJ1xufTtcblxuY29uc3QgU3VidGl0bGVzID0gKHtcbiAgdGV4dFxufSkgPT4ganN4JDEoXCJkaXZcIiwge1xuICBjc3M6IHN1YnRpdGxlc1N0eWxlLFxuICBjaGlsZHJlbjoganN4JDEoXCJzcGFuXCIsIHtcbiAgICBjaGlsZHJlbjogdGV4dFxuICB9KVxufSk7XG5cblN1YnRpdGxlcy5wcm9wVHlwZXMgPSB7XG4gIHRleHQ6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3Byb3AtdHlwZXMgKi9cblxuY29uc3QgQWN0aXZlU3VidGl0bGVzID0gKHtcbiAgcGxheWVyXG59KSA9PiB7XG4gIGNvbnN0IFtzdWJ0aXRsZXMsIHNldFN1YnRpdGxlc10gPSB1c2VTdGF0ZSh7fSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBsYXllcikge1xuICAgICAgcmV0dXJuIHN1YnNjcmliZVN1YnRpdGxlcyh7fSwge1xuICAgICAgICBwbGF5ZXJcbiAgICAgIH0sIGN1cnJlbnRTdWJ0aXRsZXMgPT4gc2V0U3VidGl0bGVzKGN1cnJlbnRTdWJ0aXRsZXMpKTtcbiAgICB9XG4gIH0sIFtwbGF5ZXJdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9qc3goU3VidGl0bGVzLCB7XG4gICAgdGV4dDogc3VidGl0bGVzLnRleHRcbiAgfSk7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuY29uc3Qgc2l6ZXMkMiA9IHtcbiAgJ3NtYWxsLWVtYmVkJzogMjAwLFxuICBlbWJlZDogNDAwLFxuICAndGFibGV0LXBvcnRyYWl0JzogNjAwLFxuICAndGFibGV0LWxhbmRzY2FwZSc6IDkwMCxcbiAgZGVza3RvcDogMTIwMFxufTtcblxuY29uc3QgdXNlTGlua1N0YXRlID0gKHJlcXVlc3QsIGRlcGVuZGVuY2llcyA9IFtdKSA9PiB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXF1ZXN0KHNldFN0YXRlKTtcbiAgfSwgZGVwZW5kZW5jaWVzKTtcbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuY29uc3QgZmxpcFN0YXRlID0gc3RhdGUgPT4gc3RhdGUgPT09ICdwbGF5aW5nJyA/ICdwYXVzZWQnIDogJ3BsYXlpbmcnOyAvLyBGSVhNRTogdG9vIGZldyBsaW5lcyB0byBzcGxpdCBhIGZpbGUsIGxvb2tpbmcgYSBiZXR0ZXIgcGxhY2VcblxuXG5jb25zdCBnZXRUaHVtYm5haWxzVXJsID0gc291cmNlID0+IHtcbiAgdmFyIF9jb25jYXQkZmluZDtcblxuICByZXR1cm4gKF9jb25jYXQkZmluZCA9IFtdLmNvbmNhdChzb3VyY2UpLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd0aHVtYm5haWwnKSkgPT09IG51bGwgfHwgX2NvbmNhdCRmaW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29uY2F0JGZpbmQuc3JjO1xufTtcblxuY29uc3QgbWVyZ2VTZWN0aW9ucyA9IChjdXJyZW50LCB0YXJnZXQpID0+IHtcbiAgaWYgKCFjdXJyZW50ICYmICF0YXJnZXQpIHJldHVybiBbXTtcbiAgaWYgKCFjdXJyZW50KSByZXR1cm4gdGFyZ2V0O1xuICBpZiAoIXRhcmdldCkgcmV0dXJuIGN1cnJlbnQ7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgY3VycmVudC5mb3JFYWNoKGUgPT4gbWFwLnNldChlLm5hbWUsIGUpKTtcbiAgdGFyZ2V0LmZvckVhY2goZSA9PiBtYXAuc2V0KGUubmFtZSwgZSkpO1xuICByZXR1cm4gQXJyYXkuZnJvbShtYXAudmFsdWVzKCkpO1xufTtcblxuY29uc3QgUHJlbWl1bVBsYXllciA9ICh7XG4gIHNvdXJjZSxcbiAgc3RhcnRUaW1lLFxuICBhdXRvcGxheSxcbiAgcXVhbGl0eSA9IHt9LFxuICB0aXRsZSxcbiAgY2hhbm5lbFRpdGxlLFxuICBzZWN0aW9uID0ge30sXG4gIHBsYXliYWNrU3RhdGU6IGFwcFBsYXliYWNrU3RhdGUsXG4gIGN1cnJlbnRUaW1lOiBhcHBDdXJyZW50VGltZSxcbiAgcGxheWJhY2tSYXRlOiBhcHBQbGF5YmFja1JhdGUsXG4gIHZvbHVtZTogYXBwVm9sdW1lLFxuICB0aHVtYm5haWxzVXJsLFxuICAvLyBGSVhNRSBkZXByZWNhdGVkLCBkZWZhdWx0IHZhbHVlIGlzIG5vIGxvbmdlciBuZWVkZWRcbiAgZHJtLFxuICBjb250cm9scyA9IHtcbiAgICBhdXRvaGlkZTogMzAwMFxuICB9LFxuICAvLyBUT0RPIGNoYXB0ZXJzXG4gIG1hcmtzID0gW10sXG4gIC8vIFRPRE8gc2VjdGlvbklkXG4gIGludGwsXG4gIHNldHRpbmdzOiB0YXJnZXRTZXR0aW5ncyxcbiAgcGx1Z2lucyA9IFtdLFxuICBzdHlsZSxcbiAgY2hpbGRyZW4sXG4gIHVpRWxlbWVudHM6IHtcbiAgICBjb250cm9sQnV0dG9uczogdGFyZ2V0Q29udHJvbEJ1dHRvbnMsXG4gICAgc2V0dGluZ0J1dHRvbixcbiAgICAuLi50YXJnZXRVSUVsZW1lbnRzXG4gIH0gPSB7XG4gICAgY29udHJvbEJ1dHRvbnM6IHt9XG4gIH0sXG4gIG92ZXJyaWRlU2V0dGluZ1NlY3Rpb25zID0gc2VjdGlvbnMgPT4gc2VjdGlvbnMsXG4gIG9uRXJyb3IsXG4gIG9uUGxheWJhY2tTdGF0ZUNoYW5nZSxcbiAgb25CYWNrLFxuICBvbkNoYW5nZU5leHQsXG4gIG9uQ2hhbmdlUHJldmlvdXMsXG4gIG9uT3BlblNldHRpbmdzLFxuICBvbkNoYW5nZVNldHRpbmdzLFxuICBvblBsYXllckxvYWRlZCxcbiAgc2VuZExvZyxcbiAgLi4udmlkZW9Qcm9wc1xufSkgPT4ge1xuICB2YXIgX3ZpZGVvUmVmJGN1cnJlbnQyO1xuXG4gIGNvbnN0IHVpVHlwZSA9IGlzRGVza3RvcCgpID8gJ2Rlc2t0b3AnIDogJ21vYmlsZSc7XG4gIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpO1xuICBjb25zdCBwbGF5ZXJSZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgYWRDb250YWluZXJSZWYgPSB1c2VSZWYoKTsgLy8gVE9ETyBtb3ZlIFJXRCByZWxhdGVkIHRvIExheW91dFxuXG4gIGNvbnN0IHtcbiAgICBjdXJyZW50QnJlYWtwb2ludDogc2l6ZSxcbiAgICB3aWR0aCxcbiAgICBvYnNlcnZlXG4gIH0gPSB1c2VEaW1lbnNpb25zKHtcbiAgICBwb2x5ZmlsbDogUmVzaXplT2JzZXJ2ZXIsXG4gICAgYnJlYWtwb2ludHM6IHNpemVzJDJcbiAgfSk7XG4gIGNvbnN0IFt0YXJnZXRTdGF0ZSwgc2V0VGFyZ2V0U3RhdGVdID0gdXNlU3RhdGUoKCkgPT4gKHtcbiAgICBwbGF5YmFja1N0YXRlOiBhdXRvcGxheSA/ICdwbGF5aW5nJyA6ICdwYXVzZWQnLFxuICAgIGN1cnJlbnRUaW1lOiBzdGFydFRpbWVcbiAgfSkpO1xuICBjb25zdCBbcGxheWJhY2tUaW1lLCBzZXRQbGF5YmFja1RpbWVdID0gdXNlU3RhdGUoe1xuICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgIGJ1ZmZlclRpbWU6IDBcbiAgfSk7XG5cbiAgY29uc3QgdG9nZ2xlUGxheSA9IG92ZXJyaWRlU3RhdGUgPT4ge1xuICAgIGlmICh0YXJnZXRTdGF0ZS5wbGF5YmFja1N0YXRlICE9PSBvdmVycmlkZVN0YXRlKSB7XG4gICAgICBzZXRUYXJnZXRTdGF0ZShzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICAgICAgcGxheWJhY2tTdGF0ZTogb3ZlcnJpZGVTdGF0ZSB8fCBmbGlwU3RhdGUoc3RhdGUucGxheWJhY2tTdGF0ZSlcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG92ZXJyaWRlU3RhdGUgfHwgZmxpcFN0YXRlKHRhcmdldFN0YXRlLnBsYXliYWNrU3RhdGUpO1xuICAgICAgc2VuZExvZyA9PT0gbnVsbCB8fCBzZW5kTG9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZW5kTG9nKHJlc3VsdCwgcGxheWJhY2tUaW1lKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXBwUGxheWJhY2tTdGF0ZSkge1xuICAgICAgdG9nZ2xlUGxheShhcHBQbGF5YmFja1N0YXRlKTtcbiAgICB9XG4gIH0sIFthcHBQbGF5YmFja1N0YXRlXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0Rlc2t0b3AoKSkge1xuICAgICAgcmV0dXJuIGJsdXJQYXVzZSh2aWRlb1JlZi5jdXJyZW50LCAoKSA9PiB0b2dnbGVQbGF5KCdwYXVzZWQnKSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQmxvY2tlZEF1dG9wbGF5ID0gKCkgPT4gdG9nZ2xlUGxheSgncGF1c2VkJyk7XG5cbiAgY29uc3QgdXBkYXRlUGxheWJhY2tUaW1lID0gZXZlbnQgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+ICgoZXZlbnQgPT09IG51bGwgfHwgZXZlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpICE9PSAndGltZXVwZGF0ZScgfHwgaXNCdWZmZXJlZCh2aWRlb1JlZi5jdXJyZW50KSkgJiYgc2V0UGxheWJhY2tUaW1lKHN0YXRlID0+ICh7IC4uLnN0YXRlLFxuICAgIC4uLmdldE1lZGlhVGltZSh2aWRlb1JlZi5jdXJyZW50LCBwbHVnaW5zLCBwbGF5ZXJSZWYuY3VycmVudCksXG4gICAgLi4uKChldmVudCA9PT0gbnVsbCB8fCBldmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICdkdXJhdGlvbmNoYW5nZScgJiYge1xuICAgICAgY3VycmVudFRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lXG4gICAgfSlcbiAgfSkpKTtcblxuICBjb25zdCBzZXRUYXJnZXRUaW1lID0gKHRpbWUsIGFjdGlvbikgPT4ge1xuICAgIHZhciBfdmlkZW9SZWYkY3VycmVudDtcblxuICAgIGlmIChhY3Rpb24gJiYgc2VuZExvZykge1xuICAgICAgc2VuZExvZyhhY3Rpb24sIHBsYXliYWNrVGltZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpbW1lZCA9IE1hdGgubWluKHRpbWUsICgoX3ZpZGVvUmVmJGN1cnJlbnQgPSB2aWRlb1JlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdmlkZW9SZWYkY3VycmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3ZpZGVvUmVmJGN1cnJlbnQuaW5pdGlhbER1cmF0aW9uKSB8fCBJbmZpbml0eSk7XG4gICAgc2V0VGFyZ2V0U3RhdGUoc3RhdGUgPT4gKHsgLi4uc3RhdGUsXG4gICAgICAvLyBzZWVrIHRvIDAgcmVwZWF0ZWRseSBlZGdlIGNhc2VcbiAgICAgIGN1cnJlbnRUaW1lOiBzdGF0ZS5jdXJyZW50VGltZSAhPT0gdHJpbW1lZCA/IHRyaW1tZWQgOiB0cmltbWVkICsgMC4wMVxuICAgIH0pKTtcbiAgICB1cGRhdGVQbGF5YmFja1RpbWUoKTtcbiAgfTtcblxuICBjb25zdCBbcGxheWJhY2tTdGF0ZSwgc2V0UGxheWJhY2tTdGF0ZV0gPSB1c2VTdGF0ZSgnaW5pdCcpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgYXBwQ3VycmVudFRpbWUgPT09ICdudW1iZXInKSBzZXRUYXJnZXRUaW1lKGFwcEN1cnJlbnRUaW1lIHx8IDApO1xuICAgIGlmICh0eXBlb2YgYXBwQ3VycmVudFRpbWUgPT09ICdvYmplY3QnKSBzZXRUYXJnZXRUaW1lKChhcHBDdXJyZW50VGltZSA9PT0gbnVsbCB8fCBhcHBDdXJyZW50VGltZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXBwQ3VycmVudFRpbWUudmFsdWUpIHx8IDApO1xuICB9LCBbYXBwQ3VycmVudFRpbWVdKTtcbiAgY29uc3QgW2Vycm9yRGF0YSwgc2V0RXJyb3JEYXRhXSA9IHVzZVN0YXRlKCk7XG5cbiAgY29uc3QgZXJyb3JIYW5kbGVyID0gcmVhY3RFdmVudCA9PiB7XG4gICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKHJlYWN0RXZlbnQubmF0aXZlRXZlbnQpO1xuICAgIGhhbmRsZUVycm9yKHJlYWN0RXZlbnQsIHtcbiAgICAgIGRpc3BsYXlFcnJvcjogZGF0YSA9PiB7XG4gICAgICAgIHNldFBsYXliYWNrU3RhdGUoJ2Vycm9yJyk7XG4gICAgICAgIHNldEVycm9yRGF0YShkYXRhKTtcbiAgICAgIH0sXG4gICAgICByZWxvYWQ6ICgpID0+IHtcbiAgICAgICAgaWYgKHZpZGVvUmVmLmN1cnJlbnQuY3VycmVudFRpbWUgPiAxKSB7XG4gICAgICAgICAgc2V0VGFyZ2V0VGltZSh2aWRlb1JlZi5jdXJyZW50LmN1cnJlbnRUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFBsYXliYWNrU3RhdGUoJ2Vycm9yJyk7XG4gICAgICAgIHBsYXllclJlZi5jdXJyZW50Lmxhc3RTcmMgPSAnJztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRQbGF5YmFja1N0YXRlKCdpbml0JyksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IFtzZXR0aW5ncywgc2V0U2V0dGluZ3NdID0gdXNlU3RhdGUoKCkgPT4gKHtcbiAgICBzZWN0aW9uczogW10sXG4gICAgdmFsdWVzOiB7XG4gICAgICBzcGVlZDogMVxuICAgIH1cbiAgfSkpO1xuXG4gIGNvbnN0IGZldGNoU2V0dGluZ3MgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSAhaXNMaXZlRHVyYXRpb24odmlkZW9SZWYuY3VycmVudC5kdXJhdGlvbikgPyAndmlkZW9zJyA6ICdsaXZlcyc7XG4gICAgc2V0U2V0dGluZ3MoY3VycmVudCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgc2VjdGlvbnNcbiAgICAgIH0gPSBnZXRTZXR0aW5nc0RhdGEoe1xuICAgICAgICBtZWRpYTogdmlkZW9SZWYuY3VycmVudCxcbiAgICAgICAgcGxheWVyOiBwbGF5ZXJSZWYuY3VycmVudCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBxdWFsaXR5LFxuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgcHJlZmVycmVkOiBjdXJyZW50LnByZWZlcnJlZCxcbiAgICAgICAgb3RoZXJTZWN0aW9uczogdGFyZ2V0U2V0dGluZ3MgPT09IG51bGwgfHwgdGFyZ2V0U2V0dGluZ3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldFNldHRpbmdzLnNlY3Rpb25zXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZlcnJlZDogY3VycmVudC5wcmVmZXJyZWQsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgc2VjdGlvbnM6IG92ZXJyaWRlU2V0dGluZ1NlY3Rpb25zKHNlY3Rpb25zKVxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBsYXN0U3RhdGUgPSB1c2VSZWYocGxheWJhY2tTdGF0ZSk7XG5cbiAgY29uc3QgaGFuZGxlUGxheWJhY2tTdGF0ZUNoYW5nZSA9IChldmVudCwgc3RhdGUpID0+IHtcbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdlcnJvcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2UgPT09IG51bGwgfHwgb25QbGF5YmFja1N0YXRlQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblBsYXliYWNrU3RhdGVDaGFuZ2UoZXZlbnQsIHN0YXRlKTsgLy8gbGV0IHZpZXcgbW9kZSAvIGZ1bGxzY3JlZW4gdXBkYXRlIGZpcnN0XG5cbiAgICBpZiAodmlkZW9SZWYuY3VycmVudC53ZWJraXREaXNwbGF5aW5nRnVsbHNjcmVlbiAmJiAvcGxheWluZ3xwYXVzZWQvLnRlc3Qoc3RhdGUpKSB7XG4gICAgICB0b2dnbGVQbGF5KHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUgPT09ICdlbmRlZCcpIHtcbiAgICAgIHRvZ2dsZVBsYXkoJ3BhdXNlZCcpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZSA9PT0gJ2xvYWRpbmcnICYmIGxhc3RTdGF0ZS5jdXJyZW50ICE9PSAnaW5pdCcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdG9nZ2xlUGxheSgncGxheWluZycpLCAxKTtcbiAgICB9XG5cbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdsb2FkaW5nJykge1xuICAgICAgZmV0Y2hTZXR0aW5ncygpO1xuICAgIH1cblxuICAgIGxhc3RTdGF0ZS5jdXJyZW50ID0gc3RhdGU7XG4gICAgc2V0UGxheWJhY2tTdGF0ZShzdGF0ZSk7XG4gIH07XG5cbiAgY29uc3QgW2FjdGl2ZVBhbmVsLCBzZXRBY3RpdmVQYW5lbF0gPSB1c2VTdGF0ZSgnJyk7XG5cbiAgY29uc3Qgc2VuZENoYW5nZVNldHRpbmdzTG9nID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgLy8gVE9ETzogb3RoZXIgZXZlbnRzIGJ5IHVzZXIgdHJpZ2dlciBpdC5cbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ3NwZWVkJzpcbiAgICAgICAgc2VuZExvZyA9PT0gbnVsbCB8fCBzZW5kTG9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZW5kTG9nKCdzcGVlZFNldHRpbmdDaGFuZ2UnLCBwbGF5YmFja1RpbWUsIHtcbiAgICAgICAgICBwbGF5YmFja19zcGVlZDogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdxdWFsaXR5JzpcbiAgICAgICAgc2VuZExvZyA9PT0gbnVsbCB8fCBzZW5kTG9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZW5kTG9nKCdxdWFsaXR5U2V0dGluZ0NoYW5nZScsIHBsYXliYWNrVGltZSwge1xuICAgICAgICAgIHF1YWxpdHlfbmFtZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGFuZ2VTZXR0aW5ncyA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIC8vIFRPRE8gY29uc2lkZXIgbWVyZ2UgaW50byB1c2VSZWR1Y2VyP1xuICAgIG9uQ2hhbmdlU2V0dGluZ3MgPT09IG51bGwgfHwgb25DaGFuZ2VTZXR0aW5ncyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2VTZXR0aW5ncyh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWVcbiAgICB9KTtcbiAgICBzZXRUYXJnZXRUaW1lKHBsYXliYWNrVGltZS5jdXJyZW50VGltZSk7XG4gICAgc2V0U2V0dGluZ3MoY3VycmVudCA9PiAoeyAuLi5jdXJyZW50LFxuICAgICAgdmFsdWVzOiB7IC4uLmN1cnJlbnQudmFsdWVzLFxuICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICB9LFxuICAgICAgcHJlZmVycmVkOiB7IC4uLmN1cnJlbnQucHJlZmVycmVkLFxuICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICB9XG4gICAgfSkpO1xuICAgIHNldEFjdGl2ZVBhbmVsKCcnKTtcbiAgICB0b2dnbGVQbGF5KCdwbGF5aW5nJyk7XG4gICAgc2VuZENoYW5nZVNldHRpbmdzTG9nKG5hbWUsIHZhbHVlKTtcbiAgfTtcblxuICBjb25zdCBvcGVuU2V0dGluZ3MgPSBldmVudCA9PiB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWUgPSBhY3RpdmVQYW5lbCAhPT0gJ3NldHRpbmdzJyAmJiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgb25PcGVuU2V0dGluZ3MgPT09IG51bGwgfHwgb25PcGVuU2V0dGluZ3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uT3BlblNldHRpbmdzKGV2ZW50LCBzZXR0aW5ncyk7XG5cbiAgICAgIGlmIChhY3RpdmVQYW5lbCAhPT0gJ3NldHRpbmdzJyAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiB1aVR5cGUgIT09ICdkZXNrdG9wJykge1xuICAgICAgICB0b2dnbGVQbGF5KCdwYXVzZWQnKTtcbiAgICAgIH0gLy8gSW4gaU9TIFNhZmFyaSwgd2UgbmVlZCB0byB1cGRhdGUgc2V0dGluZ3MgZGF0YVxuXG5cbiAgICAgIGZldGNoU2V0dGluZ3MoKTtcbiAgICB9KTtcbiAgICBzZXRBY3RpdmVQYW5lbChjdXJyZW50ID0+IGN1cnJlbnQgPT09ICdzZXR0aW5ncycgPyAnJyA6ICdzZXR0aW5ncycpO1xuICAgIHJldHVybiBhbmltYXRpb25GcmFtZTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhcHBQbGF5YmFja1JhdGUgPiAwKSB7XG4gICAgICBzZXRTZXR0aW5ncyhjdXJyZW50ID0+ICh7IC4uLmN1cnJlbnQsXG4gICAgICAgIHZhbHVlczogeyAuLi5jdXJyZW50LnZhbHVlcyxcbiAgICAgICAgICBzcGVlZDogYXBwUGxheWJhY2tSYXRlXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIFthcHBQbGF5YmFja1JhdGVdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZW5kTG9nID09PSBudWxsIHx8IHNlbmRMb2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbmRMb2coYWN0aXZlUGFuZWwgPT09ICdzZXR0aW5ncycgPyAnb3BlblNldHRpbmdzJyA6ICdjbG9zZVNldHRpbmdzJywgcGxheWJhY2tUaW1lKTtcbiAgfSwgW2FjdGl2ZVBhbmVsID09PSAnc2V0dGluZ3MnXSk7XG4gIGNvbnN0IHF1YWxpdHlPcHRpb25zID0gdXNlTWVtbygoKSA9PiBnZXRRdWFsaXR5T3B0aW9ucyhzZXR0aW5ncyksIFtzZXR0aW5ncy52YWx1ZXMucXVhbGl0eV0pO1xuICBjb25zdCB2aWV3TW9kZSA9IHVzZUxpbmtTdGF0ZSh1cGRhdGUgPT4gb25WaWV3TW9kZUNoYW5nZSh2aWRlb1JlZi5jdXJyZW50LCB1cGRhdGUpKTtcbiAgY29uc3Qgc291cmNlT3ZlcnJpZGUgPSB1c2VMaW5rU3RhdGUoYXN5bmMgdXBkYXRlID0+IHtcbiAgICB2YXIgX3F1YWxpdHkkcmV3cml0ZU1hbmlmO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gc291cmNlICYmIChhd2FpdCAoKF9xdWFsaXR5JHJld3JpdGVNYW5pZiA9IHF1YWxpdHkucmV3cml0ZU1hbmlmZXN0KSA9PT0gbnVsbCB8fCBfcXVhbGl0eSRyZXdyaXRlTWFuaWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9xdWFsaXR5JHJld3JpdGVNYW5pZi5jYWxsKHF1YWxpdHksIHNvdXJjZSwgcXVhbGl0eU9wdGlvbnMpKSk7XG4gICAgdXBkYXRlKHJlc3VsdCB8fCBzb3VyY2UpO1xuICB9LCBbc291cmNlLCBxdWFsaXR5T3B0aW9uc10pO1xuICBjb25zdCB3YWl0aW5nID0gdXNlTGF6eVdhaXRpbmcocGxheWJhY2tTdGF0ZSA9PT0gJ2J1ZmZlcmluZycpO1xuICBjb25zdCBhY3RpdmVQbGF5YmFjayA9IHBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJyB8fCBwbGF5YmFja1N0YXRlID09PSAnd2FpdGluZyc7XG4gIGNvbnN0IHtcbiAgICBtb2RlOiBhdXRvSGlkZU1vZGUsXG4gICAgb25DbGljayxcbiAgICBvbk1vdXNlTW92ZVxuICB9ID0gdXNlQXV0b0hpZGUoe1xuICAgIHBpbm5lZDogIWNvbnRyb2xzLmF1dG9oaWRlIHx8IHdhaXRpbmcgfHwgIWFjdGl2ZVBsYXliYWNrIHx8IGFjdGl2ZVBhbmVsLFxuICAgIHRhcFRvSGlkZTogdWlUeXBlID09PSAnbW9iaWxlJyxcbiAgICBoaWRlVGltZU1zOiBjb250cm9scy5hdXRvaGlkZVxuICB9KTtcbiAgY29uc3QgbW9kZSA9IGNvbnRyb2xzLmF1dG9oaWRlID8gYXV0b0hpZGVNb2RlIDogY29udHJvbHMgPyAnc2hvd24nIDogJ2hpZGRlbic7XG4gIGNvbnN0IGNvbnRyb2xzRGlzcGxheSA9IGNvbnRyb2xzID09PSAndGl0bGUtb25seScgPyAnaGlkZGVuJyA6IG1vZGU7XG4gIGNvbnN0IHNob3VsZEhpZGVQYW5lbHMgPSAoY29udHJvbHMgPT09ICduby1wYW5lbCcgfHwgY29udHJvbHNEaXNwbGF5ID09PSAnaGlkZGVuJykgJiYgYWN0aXZlUGFuZWw7XG4gIGNvbnN0IGhhdmVQbGF5UGFuZWwgPSB1aVR5cGUgPT09ICdkZXNrdG9wJyAmJiAhd2FpdGluZyAmJiAhYWN0aXZlUGFuZWwgJiYgIS90aXRsZS1vbmx5fG5vLXBhbmVsLy50ZXN0KGNvbnRyb2xzKSAmJiAoY29udHJvbHMuYXV0b2hpZGUgfHwgbW9kZSA9PT0gJ3Nob3duJyk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZEhpZGVQYW5lbHMpIHtcbiAgICAgIHNldEFjdGl2ZVBhbmVsKCcnKTtcbiAgICB9XG4gIH0sIFtzaG91bGRIaWRlUGFuZWxzXSk7XG4gIGNvbnN0IHVubXV0ZVZvbHVtZSA9IHVzZVJlZigxKTtcbiAgY29uc3Qge1xuICAgIHN1YnNjcmliZSxcbiAgICBvbkNoYW5nZSxcbiAgICB0b2dnbGVNdXRlXG4gIH0gPSBsaW5rTWVkaWFWb2x1bWUoKCkgPT4gKHtcbiAgICB2aWRlbzogdmlkZW9SZWYuY3VycmVudCxcbiAgICBnZXRQbGF5ZXI6ICgpID0+IHBsYXllclJlZi5jdXJyZW50LFxuICAgIGdldFVubXV0ZVZvbHVtZTogKCkgPT4gdW5tdXRlVm9sdW1lLmN1cnJlbnQsXG4gICAgc2V0VW5tdXRlVm9sdW1lOiB2b2x1bWUgPT4ge1xuICAgICAgdW5tdXRlVm9sdW1lLmN1cnJlbnQgPSB2b2x1bWU7XG4gICAgfVxuICB9KSk7XG5cbiAgY29uc3QgY2hhbmdlUHJldmlvdXMgPSBldmVudCA9PiB7XG4gICAgb25DaGFuZ2VQcmV2aW91cyhldmVudCk7XG4gICAgdG9nZ2xlUGxheSgncGF1c2VkJyk7XG4gICAgdmlkZW9SZWYuY3VycmVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbG9hZHN0YXJ0JykpO1xuICAgIHNlbmRMb2cgPT09IG51bGwgfHwgc2VuZExvZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VuZExvZygncHJldmlvdXNFcGlzb2RlJywgcGxheWJhY2tUaW1lKTtcbiAgfTtcblxuICBjb25zdCBjaGFuZ2VOZXh0ID0gZXZlbnQgPT4ge1xuICAgIG9uQ2hhbmdlTmV4dChldmVudCk7XG4gICAgdG9nZ2xlUGxheSgncGF1c2VkJyk7XG4gICAgdmlkZW9SZWYuY3VycmVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbG9hZHN0YXJ0JykpO1xuICAgIHNlbmRMb2cgPT09IG51bGwgfHwgc2VuZExvZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VuZExvZygnbmV4dEVwaXNvZGUnLCBwbGF5YmFja1RpbWUpO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFwcFZvbHVtZSA+PSAwKSB7XG4gICAgICBvbkNoYW5nZShhcHBWb2x1bWUpO1xuICAgIH1cbiAgfSwgW2FwcFZvbHVtZV0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXRTZXR0aW5ncykge1xuICAgICAgc2V0U2V0dGluZ3MoY3VycmVudCA9PiAoeyAuLi5jdXJyZW50LFxuICAgICAgICAvLyBLZWVwIHRoZSBzYW1lIG9iamVjdCByZWZlcmVuY2UgaWYgdGhlcmUgaXMgbm90aGluZyB0byBjaGFuZ2UgaW4gdGhlIHJldmFsYW50IHByb3BlcnRpZXNcbiAgICAgICAgLi4uKHRhcmdldFNldHRpbmdzLnZhbHVlcyAmJiB7XG4gICAgICAgICAgdmFsdWVzOiB7IC4uLmN1cnJlbnQudmFsdWVzLFxuICAgICAgICAgICAgLi4udGFyZ2V0U2V0dGluZ3MudmFsdWVzXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLi4uKHRhcmdldFNldHRpbmdzLnByZWZlcnJlZCAmJiB7XG4gICAgICAgICAgcHJlZmVycmVkOiB7IC4uLmN1cnJlbnQucHJlZmVycmVkLFxuICAgICAgICAgICAgLi4udGFyZ2V0U2V0dGluZ3MucHJlZmVycmVkXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBjaGVjayB0YXJnZXRTZXR0aW5ncy5zZWN0aW9ucyBiZWNhdXNlIG1lcmdlU2VjdGlvbnMgd2lsbCBrZWVwIHRoZSBvcmlnaW5hbCByZWZlcmVuY2UgaWYgdGhlcmUgaXMgbm90aGluZyB0byB1cGRhdGUuXG4gICAgICAgIHNlY3Rpb25zOiBtZXJnZVNlY3Rpb25zKGN1cnJlbnQuc2VjdGlvbnMsIHRhcmdldFNldHRpbmdzLnNlY3Rpb25zKVxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwgW3RhcmdldFNldHRpbmdzXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVGhlIGFkQ29udGFpbmVyIHNob3VsZCBiZSBzZXQgYmVmb3JlIGBsb2FkYCBiZWNhdXNlIEltYURhaS5sb2FkIG5lZWRzIGl0LlxuICAgIHBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgdmFyIF9wbHVnaW4kc2V0QWRDb250YWluZTtcblxuICAgICAgcmV0dXJuIChfcGx1Z2luJHNldEFkQ29udGFpbmUgPSBwbHVnaW4uc2V0QWRDb250YWluZXIpID09PSBudWxsIHx8IF9wbHVnaW4kc2V0QWRDb250YWluZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsdWdpbiRzZXRBZENvbnRhaW5lLmNhbGwocGx1Z2luLCBhZENvbnRhaW5lclJlZi5jdXJyZW50KTtcbiAgICB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZWVrQmFyT3ZlcnJpZGVzID0gT2JqZWN0LmFzc2lnbih7fSwgLi4ucGx1Z2lucy5tYXAocGx1Z2luID0+IHtcbiAgICB2YXIgX3BsdWdpbiRnZXRTZWVrYmFyUHJvO1xuXG4gICAgcmV0dXJuIChfcGx1Z2luJGdldFNlZWtiYXJQcm8gPSBwbHVnaW4uZ2V0U2Vla2JhclByb3BzKSA9PT0gbnVsbCB8fCBfcGx1Z2luJGdldFNlZWtiYXJQcm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wbHVnaW4kZ2V0U2Vla2JhclByby5jYWxsKHBsdWdpbik7XG4gIH0pKTtcbiAgY29uc3QgY2FuU2VlayA9IHBsYXliYWNrU3RhdGUgIT09ICdlbmRlZCcgJiYgIWlzTGl2ZUR1cmF0aW9uKChfdmlkZW9SZWYkY3VycmVudDIgPSB2aWRlb1JlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdmlkZW9SZWYkY3VycmVudDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF92aWRlb1JlZiRjdXJyZW50Mi5pbml0aWFsRHVyYXRpb24pO1xuICAvKipcbiAgICogVE9ETzogTmVlZCB0byBpbmplY3QgcHJvcHMgdG8gdGhlIHJlYWN0IGVsZW1lbnRzIGZyb20gdGFyZ2V0VUlFbGVtZW50cy5cbiAgICogVGhlIHBvc3NpYmxlIHNvbHV0aW9uIGlzIGBSZWFjdC5jbG9uZUVsZW1lbnRgXG4gICAqL1xuXG4gIGNvbnN0IGhhbmRsZVNlZWtFdmVudCA9ICgpID0+IHNlbmRMb2cgPT09IG51bGwgfHwgc2VuZExvZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VuZExvZygnc2VlaycsIHBsYXliYWNrVGltZSk7XG5cbiAgY29uc3QgaGFuZGxlQXVkaW9Wb2x1bWVTZXR0aW5nQ2hhbmdlRXZlbnQgPSB2b2x1bWUgPT4gc2VuZExvZyA9PT0gbnVsbCB8fCBzZW5kTG9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZW5kTG9nKCdhdWRpb1ZvbHVtZVNldHRpbmdDaGFuZ2UnLCBwbGF5YmFja1RpbWUsIHtcbiAgICB2b2x1bWVcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlTXV0ZVNldHRpbmdDaGFuZ2VFdmVudCA9IG11dGVkID0+IHNlbmRMb2cgPT09IG51bGwgfHwgc2VuZExvZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VuZExvZygnYXVkaW9NdXRlU2V0dGluZ0NoYW5nZScsIHBsYXliYWNrVGltZSwge1xuICAgIG11dGVkXG4gIH0pO1xuXG4gIGNvbnN0IHVpRWxlbWVudHMgPSB7XG4gICAgdGl0bGUsXG4gICAgY2hhbm5lbFRpdGxlOiAvKiNfX1BVUkVfXyovanN4KENoYW5uZWxUaXRsZSwge1xuICAgICAgdGl0bGU6IGNoYW5uZWxUaXRsZSxcbiAgICAgIHN0YXJ0VGltZTogc2VjdGlvbi5zdGFydCxcbiAgICAgIGVuZFRpbWU6IHNlY3Rpb24uZW5kXG4gICAgfSksXG4gICAgY29udHJvbEJ1dHRvbnM6IHtcbiAgICAgIHBsYXlCdXR0b246IC8qI19fUFVSRV9fKi9qc3goUGxheUJ1dHRvbiQxLCB7XG4gICAgICAgIHBsYXliYWNrU3RhdGU6IHRhcmdldFN0YXRlLnBsYXliYWNrU3RhdGUsXG4gICAgICAgIGVuZGVkOiBwbGF5YmFja1N0YXRlID09PSAnZW5kZWQnLFxuICAgICAgICBoaWRkZW46IHVpVHlwZSAhPT0gJ2Rlc2t0b3AnICYmICh3YWl0aW5nIHx8IC9sb2FkaW5nLy50ZXN0KHBsYXliYWNrU3RhdGUpKSxcbiAgICAgICAgb25DbGljazogKCkgPT4gdG9nZ2xlUGxheSgpXG4gICAgICB9KSxcbiAgICAgIC4uLihwbGF5ZXJSZWYuY3VycmVudCAmJiAhcGxheWVyUmVmLmN1cnJlbnQuaXNMaXZlKCkgJiYge1xuICAgICAgICByZXdpbmRCdXR0b246IC8qI19fUFVSRV9fKi9qc3goQnV0dG9uLCB7XG4gICAgICAgICAgc3RhcnRJY29uOiBcInJld2luZDEwXCIsXG4gICAgICAgICAgdGl0bGU6IFwiS0tTLlBMQVlFUi5SRVdJTkRcIixcbiAgICAgICAgICBkaXNhYmxlZDogIWNhblNlZWssXG4gICAgICAgICAgb25DbGljazogKCkgPT4gc2V0VGFyZ2V0VGltZShwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgLSAxMCwgJ3Jld2luZCcpXG4gICAgICAgIH0pLFxuICAgICAgICBmb3J3YXJkQnV0dG9uOiAvKiNfX1BVUkVfXyovanN4KEJ1dHRvbiwge1xuICAgICAgICAgIHN0YXJ0SWNvbjogXCJmb3J3YXJkMTBcIixcbiAgICAgICAgICB0aXRsZTogXCJLS1MuUExBWUVSLkZPUldBUkRcIixcbiAgICAgICAgICBkaXNhYmxlZDogIWNhblNlZWssXG4gICAgICAgICAgb25DbGljazogKCkgPT4gc2V0VGFyZ2V0VGltZShwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgKyAxMCwgJ2ZvcndhcmQnKVxuICAgICAgICB9KSxcbiAgICAgICAgbmV4dEVwaXNvZGVCdXR0b246IC8qI19fUFVSRV9fKi9qc3goQnV0dG9uLCB7XG4gICAgICAgICAgc3RhcnRJY29uOiBcIm5leHRFcGlzb2RlXCIsXG4gICAgICAgICAgdGl0bGU6IFwiS0tTLlBMQVlFUi5ORVhUXCIsXG4gICAgICAgICAgZGlzYWJsZWQ6ICFvbkNoYW5nZU5leHQsXG4gICAgICAgICAgb25DbGljazogY2hhbmdlTmV4dFxuICAgICAgICB9KSxcbiAgICAgICAgcHJldmlvdXNFcGlzb2RlQnV0dG9uOiAvKiNfX1BVUkVfXyovanN4KEJ1dHRvbiwge1xuICAgICAgICAgIHN0YXJ0SWNvbjogXCJwcmV2aW91c0VwaXNvZGVcIixcbiAgICAgICAgICB0aXRsZTogXCJLS1MuUExBWUVSLlBSRVZJT1VTXCIsXG4gICAgICAgICAgZGlzYWJsZWQ6ICFvbkNoYW5nZVByZXZpb3VzLFxuICAgICAgICAgIG9uQ2xpY2s6IGNoYW5nZVByZXZpb3VzXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIC4uLnRhcmdldENvbnRyb2xCdXR0b25zXG4gICAgfSxcbiAgICBzZWVrYmFyOiBwbGF5YmFja1RpbWUuZHVyYXRpb24gPiAwICYmIC8qI19fUFVSRV9fKi9qc3goU2Vla2JhciQxIC8vIFRPRE8gZW5zdXJlIHJlc3BvbnNlIHF1aWNrbHkgdG8gZm9yd2FyZCBiYWNrd2FyZCAxMFxuICAgICwge1xuICAgICAgc3RhcnRUaW1lOiBwbGF5YmFja1RpbWUuc3RhcnRUaW1lLFxuICAgICAgY3VycmVudFRpbWU6IHBsYXliYWNrVGltZS5jdXJyZW50VGltZSxcbiAgICAgIGJ1ZmZlclRpbWU6IHBsYXliYWNrVGltZS5idWZmZXJUaW1lLFxuICAgICAgZHVyYXRpb246IHBsYXliYWNrVGltZS5kdXJhdGlvbixcbiAgICAgIHBsYXk6ICgpID0+IHRvZ2dsZVBsYXkoJ3BsYXlpbmcnKSxcbiAgICAgIHBhdXNlOiAoKSA9PiB0b2dnbGVQbGF5KCdwYXVzZWQnKSxcbiAgICAgIHNlZWs6IHNldFRhcmdldFRpbWUgLy8gVE9ETyBtYXJrcyA9IGNoYXB0ZXJzXG4gICAgICAsXG4gICAgICBtYXJrczogbWFya3MsXG4gICAgICBwbHVnaW5zOiBwbHVnaW5zLFxuICAgICAgb25TZWVrRXZlbnQ6IGhhbmRsZVNlZWtFdmVudCxcbiAgICAgIC4uLnNlZWtCYXJPdmVycmlkZXMsXG4gICAgICBjaGlsZHJlbjogIWFjdGl2ZVBhbmVsICYmIHNvdXJjZSAmJiAvKiNfX1BVUkVfXyovanN4KFNlZWtQcmV2aWV3LCB7XG4gICAgICAgIHRodW1ibmFpbHNVcmw6IGdldFRodW1ibmFpbHNVcmwoc291cmNlKSB8fCB0aHVtYm5haWxzVXJsLFxuICAgICAgICBkdXJhdGlvbjogcGxheWJhY2tUaW1lLmR1cmF0aW9uXG4gICAgICB9KVxuICAgIH0pLFxuICAgIGJhY2tCdXR0b246IG9uQmFjayAmJiAvKiNfX1BVUkVfXyovanN4KEJ1dHRvbiwge1xuICAgICAgc3RhcnRJY29uOiBcImJhY2tcIixcbiAgICAgIHRpdGxlOiBcIktLUy5CQUNLXCIsXG4gICAgICBvbkNsaWNrOiBvbkJhY2tcbiAgICB9KSxcbiAgICBmdWxsc2NyZWVuQnV0dG9uOiAvKiNfX1BVUkVfXyovanN4KEZ1bGxzY3JlZW5CdXR0b24sIHtcbiAgICAgIHZpZXdNb2RlOiB2aWV3TW9kZSxcbiAgICAgIG9uQ2xpY2s6ICgpID0+IHRvZ2dsZUZ1bGxzY3JlZW4oY29udGFpbmVyUmVmLmN1cnJlbnQpXG4gICAgfSksXG4gICAgdm9sdW1lQ29udHJvbDogd2lkdGggPj0gc2l6ZXMkMlsnc21hbGwtZW1iZWQnXSAmJiAvKiNfX1BVUkVfXyovanN4KFZvbHVtZUNvbnRyb2wgLy8gaU9TIHZpZGVvIHZvbHVtZSBsb2NrcyB0byAxLCBzbGlkZXJzIGlzIG5vIHVzZSAoT1RQLTE4NzgpXG4gICAgLCB7XG4gICAgICBzbGlkZXI6ICFpc0lPUygpLFxuICAgICAgb25BdWRpb1ZvbHVtZVNldHRpbmdDaGFuZ2VFdmVudDogaGFuZGxlQXVkaW9Wb2x1bWVTZXR0aW5nQ2hhbmdlRXZlbnQsXG4gICAgICBvbkF1ZGlvTXV0ZVNldHRpbmdDaGFuZ2U6IGhhbmRsZU11dGVTZXR0aW5nQ2hhbmdlRXZlbnQsXG4gICAgICBzdWJzY3JpYmUsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIHRvZ2dsZU11dGVcbiAgICB9KSxcbiAgICBiYWNrSXRlbXM6IC8qI19fUFVSRV9fKi9qc3hzJDEoRnJhZ21lbnQkMSwge1xuICAgICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovanN4KEFjdGl2ZVN1YnRpdGxlcywge1xuICAgICAgICBwbGF5ZXI6IHBsYXllclJlZi5jdXJyZW50XG4gICAgICB9KSwgaGF2ZVBsYXlQYW5lbCAmJiAvKiNfX1BVUkVfXyovanN4KFBsYXlQYW5lbCwge1xuICAgICAgICBvbkNsaWNrOiAoKSA9PiB0b2dnbGVQbGF5KClcbiAgICAgIH0pXVxuICAgIH0pLFxuICAgIC4uLnRhcmdldFVJRWxlbWVudHNcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9qc3goSW50bFByb3ZpZGVyLCB7IC4uLmludGwsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9qc3hzJDEoRGVmYXVsdExheW91dCwge1xuICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgdHlwZTogdWlUeXBlLFxuICAgICAgZGlzcGxheTogbW9kZSxcbiAgICAgIGNvbnRyb2xzRGlzcGxheTogY29udHJvbHNEaXNwbGF5LFxuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIHZpZGVvOiAvKiNfX1BVUkVfXyovanN4KFZpZGVvLCB7IC4uLnZpZGVvUHJvcHMsXG4gICAgICAgIHZpZGVvUmVmOiBtdWx0aVJlZih2aWRlb1JlZiwgdmlkZW9Qcm9wcy52aWRlb1JlZiksXG4gICAgICAgIHNvdXJjZTogcGxheWJhY2tTdGF0ZSAhPT0gJ2Vycm9yJyAmJiBzb3VyY2VPdmVycmlkZSxcbiAgICAgICAgZHJtOiBkcm0sXG4gICAgICAgIHBsYXliYWNrU3RhdGU6IHRhcmdldFN0YXRlLnBsYXliYWNrU3RhdGUsXG4gICAgICAgIGN1cnJlbnRUaW1lOiB0YXJnZXRTdGF0ZS5jdXJyZW50VGltZSxcbiAgICAgICAgcGxheWJhY2tSYXRlOiBzZXR0aW5ncy52YWx1ZXMuc3BlZWQsXG4gICAgICAgIHF1YWxpdHk6IHF1YWxpdHlPcHRpb25zLFxuICAgICAgICBzdWJ0aXRsZXM6IHNldHRpbmdzLnZhbHVlcy5zdWJ0aXRsZXMsXG4gICAgICAgIGF1ZGlvOiBzZXR0aW5ncy52YWx1ZXMuYXVkaW8sXG4gICAgICAgIHBsdWdpbnM6IHBsdWdpbnMsXG4gICAgICAgIG9uRXJyb3I6IGVycm9ySGFuZGxlcixcbiAgICAgICAgb25QbGF5YmFja1N0YXRlQ2hhbmdlOiBoYW5kbGVQbGF5YmFja1N0YXRlQ2hhbmdlLFxuICAgICAgICBvbkJsb2NrZWRBdXRvcGxheTogaGFuZGxlQmxvY2tlZEF1dG9wbGF5LFxuICAgICAgICBvbkNhblBsYXk6IHVwZGF0ZVBsYXliYWNrVGltZSxcbiAgICAgICAgb25UaW1lVXBkYXRlOiB1cGRhdGVQbGF5YmFja1RpbWUsXG4gICAgICAgIG9uRHVyYXRpb25DaGFuZ2U6IHVwZGF0ZVBsYXliYWNrVGltZSxcbiAgICAgICAgb25QbGF5ZXJMb2FkZWQ6IHBsYXllciA9PiB7XG4gICAgICAgICAgcGxheWVyUmVmLmN1cnJlbnQgPSBwbGF5ZXI7XG4gICAgICAgICAgb25QbGF5ZXJMb2FkZWQgPT09IG51bGwgfHwgb25QbGF5ZXJMb2FkZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUGxheWVyTG9hZGVkKHBsYXllcik7XG4gICAgICAgICAgc3luY1ZvbHVtZSh2aWRlb1JlZi5jdXJyZW50LCBpbml0aWFsVm9sdW1lID0+IHNldFZvbHVtZSh2aWRlb1JlZi5jdXJyZW50LCB7XG4gICAgICAgICAgICBwbGF5ZXI6IHBsYXllclJlZi5jdXJyZW50XG4gICAgICAgICAgfSwgdWlUeXBlID09PSAnbW9iaWxlJyA/IDEgOiBpbml0aWFsVm9sdW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY29udGFpbmVyUmVmOiBlbGVtZW50ID0+IHtcbiAgICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgICBvYnNlcnZlKGVsZW1lbnQpO1xuICAgICAgfSxcbiAgICAgIGFkQ29udGFpbmVyUmVmOiBhZENvbnRhaW5lclJlZixcbiAgICAgIC4uLnVpRWxlbWVudHMsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgb25Nb3VzZU1vdmU6IG9uTW91c2VNb3ZlLFxuICAgICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgc2V0dGluZ0J1dHRvbiA9PT0gZmFsc2UgPyAnJyA6IC8qI19fUFVSRV9fKi9qc3goU2V0dGluZ3MsIHtcbiAgICAgICAgdHlwZTogdWlUeXBlLFxuICAgICAgICBzZWN0aW9uczogc2V0dGluZ3Muc2VjdGlvbnMgLy8gVE9ETyBoYXNCb3R0b21QYW5lbCBib3R0b206IDhlbVxuICAgICAgICAsXG4gICAgICAgIG9wZW46IGFjdGl2ZVBhbmVsID09PSAnc2V0dGluZ3MnLFxuICAgICAgICB2YWx1ZXM6IHNldHRpbmdzLnZhbHVlcyxcbiAgICAgICAgb25PcGVuOiBvcGVuU2V0dGluZ3MsXG4gICAgICAgIG9uQ2hhbmdlOiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSkgPT4gY2hhbmdlU2V0dGluZ3MobmFtZSwgdmFsdWUpLFxuICAgICAgICBvbkNsb3NlOiAoKSA9PiBzZXRBY3RpdmVQYW5lbCgnJylcbiAgICAgIH0pLCB3YWl0aW5nICYmIC8qI19fUFVSRV9fKi9qc3goTG9hZGluZ1NwaW5uZXIsIHt9KSwgLyojX19QVVJFX18qL2pzeChCYWNrZHJvcCwge1xuICAgICAgICBvcGVuOiAhcGxheWJhY2tTdGF0ZSB8fCBwbGF5YmFja1N0YXRlID09PSAnbG9hZGluZycsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovanN4KExvYWRpbmdTcGlubmVyLCB7fSlcbiAgICAgIH0pLCBwbGF5YmFja1N0YXRlID09PSAnZXJyb3InICYmIGVycm9yRGF0YSAmJiAvKiNfX1BVUkVfXyovanN4KEVycm9yJDEsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yRGF0YSxcbiAgICAgICAgb25CYWNrOiBvbkJhY2tcbiAgICAgIH0pXVxuICAgIH0pXG4gIH0pO1xufTtcblxuLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuY29uc3Qgc3R5bGVzID0ge1xuICBmbGV4OiAnMTAwJScsXG4gIG1hcmdpbjogJzFyZW0gMCcsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIGgyOiB7XG4gICAgZm9udFNpemU6ICcxMjAlJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCdcbiAgfVxufTtcblxuY29uc3QgTGl2ZUVuZCA9ICh7XG4gIHJlbG9hZCxcbiAgZ29CYWNrXG59KSA9PiBqc3hzKEJhY2tkcm9wLCB7XG4gIG9wZW46IHRydWUsXG4gIGNoaWxkcmVuOiBbanN4cyhcImRpdlwiLCB7XG4gICAgY3NzOiBzdHlsZXMsXG4gICAgY2hpbGRyZW46IFtqc3gkMShcImgyXCIsIHtcbiAgICAgIGNoaWxkcmVuOiBqc3gkMShGb3JtYXR0ZWRNZXNzYWdlLCB7XG4gICAgICAgIGlkOiBcIktLUy5QUk9HUkFNLlRJVExFXCJcbiAgICAgIH0pXG4gICAgfSksIGpzeCQxKEZvcm1hdHRlZE1lc3NhZ2UsIHtcbiAgICAgIGlkOiBcIktLUy5QUk9HUkFNLk1FU1NBR0VcIlxuICAgIH0pXVxuICB9KSwganN4JDEoQnV0dG9uLCB7XG4gICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxuICAgIG9uQ2xpY2s6IHJlbG9hZCxcbiAgICBjaGlsZHJlbjoganN4JDEoRm9ybWF0dGVkTWVzc2FnZSwge1xuICAgICAgaWQ6IFwiS0tTLlRSWUFHQUlOXCJcbiAgICB9KVxuICB9KSwganN4JDEoQnV0dG9uLCB7XG4gICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxuICAgIG9uQ2xpY2s6IGdvQmFjayxcbiAgICBjaGlsZHJlbjoganN4JDEoRm9ybWF0dGVkTWVzc2FnZSwge1xuICAgICAgaWQ6IFwiS0tTLlBMQVlFUi5FWElUXCJcbiAgICB9KVxuICB9KV1cbn0pO1xuXG5MaXZlRW5kLnByb3BUeXBlcyA9IHtcbiAgcmVsb2FkOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ29CYWNrOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuY29uc3QgaW1hZ2VTdHlsZSA9IHtcbiAgekluZGV4OiAxLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgdG9wOiAnNTAlJyxcbiAgbGVmdDogJzUwJScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBvYmplY3RGaXQ6ICdjb250YWluJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKC01MCUsIC01MCUpJyxcbiAgYmFja2dyb3VuZDogJyMwMDAnXG59O1xuXG5jb25zdCBDb3ZlckltYWdlID0gKHtcbiAgc3JjXG59KSA9PiBqc3gkMShcImltZ1wiLCB7XG4gIGFsdDogXCJDb3ZlclwiLFxuICBjc3M6IGltYWdlU3R5bGUsXG4gIHNyYzogc3JjXG59KTtcblxuQ292ZXJJbWFnZS5wcm9wVHlwZXMgPSB7XG4gIHNyYzogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuY29uc3QgdXVpZHY0ID0gKCkgPT4ge1xuICBjb25zdCBjcnlwdG8gPSB3aW5kb3cuY3J5cHRvIHx8IHdpbmRvdy5tc0NyeXB0bztcbiAgcmV0dXJuICcxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDAnLnJlcGxhY2UoL1swMThdL2csIGMgPT4gKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNikpO1xufTtcblxuY29uc3QgbW9kZXMgPSB7XG4gIHZpZGVvczogJ3ZpZGVvJyxcbiAgbGl2ZXM6ICdsaXZlJ1xufTtcbmNvbnN0IGxvZ0V2ZW50TmFtZXMgPSB7XG4gIHBsYXliYWNrQmVnYW46ICd2aWRlb19wbGF5YmFja19iZWdhbicsXG4gIHBsYXliYWNrU3RhcnRlZDogJ3ZpZGVvX3BsYXliYWNrX3N0YXJ0ZWQnLFxuICBwbGF5YmFja1N0b3BwZWQ6ICd2aWRlb19wbGF5YmFja19zdG9wcGVkJyxcbiAgcGxheWJhY2tFbmRlZDogJ3ZpZGVvX3BsYXliYWNrX2VuZGVkJyxcbiAgYnVmZmVyaW5nU3RhcnRlZDogJ3ZpZGVvX2J1ZmZlcmluZ19zdGFydGVkJyxcbiAgYnVmZmVyaW5nRW5kZWQ6ICd2aWRlb19idWZmZXJpbmdfZW5kZWQnLFxuICBwbGF5YmFja1NwZWVkQ2hhbmdlOiAncGxheWJhY2tfc3BlZWRfY2hhbmdlJyxcbiAgc2Vla2VkOiAndmlkZW9fc2Vla2luZ19lbmRlZCcsXG4gIHBsYXliYWNrRXJyb3I6ICd2aWRlb19wbGF5YmFja19lcnJvcl9vY2N1cnJlZCcsXG4gIHBsYXlpbmc6ICdwbGF5JyxcbiAgcGF1c2VkOiAncGF1c2UnLFxuICByZXdpbmQ6ICdyZXdpbmQnLFxuICBmb3J3YXJkOiAnZm9yd2FyZCcsXG4gIHNwZWVkU2V0dGluZ0NoYW5nZTogJ3NwZWVkX3NldHRpbmdfY2hhbmdlJyxcbiAgcHJldmlvdXNFcGlzb2RlOiAncHJldmlvdXNfZXBpc29kZScsXG4gIG5leHRFcGlzb2RlOiAnbmV4dF9lcGlzb2RlJyxcbiAgb3BlblNldHRpbmdzOiAnc2V0dGluZ19wYWdlX2VudGVyZWQnLFxuICBjbG9zZVNldHRpbmdzOiAnc2V0dGluZ19wYWdlX2V4aXRlZCcsXG4gIGFkUGxheWJhY2tTdGFydGVkOiAnYWRfcGxheWJhY2tfc3RhcnRlZCcsXG4gIGFkUGxheWJhY2tTdG9wcGVkOiAnYWRfcGxheWJhY2tfc3RvcHBlZCdcbn07XG5cbmNvbnN0IG1hcExvZ0V2ZW50cyA9ICh7XG4gIHZpZGVvLFxuICBzZXNzaW9uID0gdmlkZW8sXG4gIHZlcnNpb24sXG4gIHBsYXllck5hbWUsXG4gIGdldFBsYXliYWNrU3RhdHVzID0gKCkgPT4gdmlkZW9cbn0pID0+IHtcbiAgdmFyIF9zZXNzaW9uJGdldENvbnRlbnQ7XG5cbiAgY29uc3QgZW1pdHRlciA9IG1pdHQoKTtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgc3RhdHVzOiAnaW5pdCcsXG4gICAgc2Vla2luZzogZmFsc2UsXG4gICAgcGxheWVyU3RhcnRUaW1lOiBEYXRlLm5vdygpLFxuICAgIG1vZHVsZVN0YXJ0VGltZTogRGF0ZS5ub3coKSxcbiAgICBjb250ZW50OiAoKF9zZXNzaW9uJGdldENvbnRlbnQgPSBzZXNzaW9uLmdldENvbnRlbnQpID09PSBudWxsIHx8IF9zZXNzaW9uJGdldENvbnRlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zZXNzaW9uJGdldENvbnRlbnQuY2FsbChzZXNzaW9uKSkgfHwge31cbiAgfTtcblxuICBjb25zdCBjb21tb25Qcm9wZXJ0aWVzID0gKCkgPT4ge1xuICAgIHZhciBfc3RhdGUkY29udGVudCRzZWN0aW87XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGxheWVyX25hbWU6IHBsYXllck5hbWUsXG4gICAgICBwbGF5YmFja19tb2R1bGVfdmVyc2lvbjogdmVyc2lvbixcbiAgICAgIHBsYXliYWNrX21vZGU6IG1vZGVzW3N0YXRlLmNvbnRlbnQudHlwZV0sXG4gICAgICBwbGF5YmFja19zZXNzaW9uX2lkOiBzdGF0ZS5zZXNzaW9uSWQsXG4gICAgICBpZDogc3RhdGUuY29udGVudC5pZCxcbiAgICAgIG5hbWU6IHN0YXRlLmNvbnRlbnQudGl0bGUsXG4gICAgICAuLi4oc3RhdGUuY29udGVudC50eXBlID09PSAndmlkZW9zJyAmJiB7XG4gICAgICAgIGN1cnJlbnRfcG9zaXRpb246IHN0YXRlLmN1cnJlbnRUaW1lLFxuICAgICAgICB2aWRlb190b3RhbF9kdXJhdGlvbjogc3RhdGUuZHVyYXRpb25cbiAgICAgIH0pLFxuICAgICAgLi4uKHN0YXRlLmNvbnRlbnQudHlwZSA9PT0gJ2xpdmVzJyAmJiB7XG4gICAgICAgIHNlY3Rpb25faWQ6IChfc3RhdGUkY29udGVudCRzZWN0aW8gPSBzdGF0ZS5jb250ZW50LnNlY3Rpb24pID09PSBudWxsIHx8IF9zdGF0ZSRjb250ZW50JHNlY3RpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0YXRlJGNvbnRlbnQkc2VjdGlvLmlkLFxuICAgICAgICBuYW1lXzI6IHN0YXRlLmNvbnRlbnQuY2hhbm5lbE5hbWUsXG4gICAgICAgIGxpdmVfb2Zmc2V0OiBzdGF0ZS5saXZlT2Zmc2V0IHx8IDBcbiAgICAgIH0pLFxuICAgICAgU1NBSTogc3RhdGUuc3NhaVByb3ZpZGVyIHx8ICdOb25lJ1xuICAgIH07XG4gIH07XG5cbiAgY29uc3QgZGlzcGF0Y2hTdGFydCA9ICgpID0+IHtcbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSAnc3RhcnRlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5zdGF0dXMgPSAnc3RhcnRlZCc7XG4gICAgc3RhdGUubGFzdFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZXZlbnROYW1lID0gc3RhdGUuaXNQbGF5aW5nQWQgPyAnYWRQbGF5YmFja1N0YXJ0ZWQnIDogJ3BsYXliYWNrU3RhcnRlZCc7XG4gICAgZW1pdHRlci5lbWl0KGV2ZW50TmFtZSwgY29tbW9uUHJvcGVydGllcygpKTtcbiAgfTtcblxuICBjb25zdCBkaXNwYXRjaFN0b3AgPSAoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnN0YXR1cyAhPT0gJ3N0YXJ0ZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhdGUuc3RhdHVzID0gJ3N0b3BwZWQnO1xuICAgIGNvbnN0IHBsYXllZCA9IChEYXRlLm5vdygpIC0gc3RhdGUubGFzdFN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgaWYgKHN0YXRlLmlzUGxheWluZ0FkKSB7XG4gICAgICBzdGF0ZS5hZFBsYXllZER1cmF0aW9uICs9IHBsYXllZDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucGxheWVkRHVyYXRpb24gKz0gcGxheWVkO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50TmFtZSA9IHN0YXRlLmlzUGxheWluZ0FkID8gJ2FkUGxheWJhY2tTdG9wcGVkJyA6ICdwbGF5YmFja1N0b3BwZWQnO1xuICAgIGVtaXR0ZXIuZW1pdChldmVudE5hbWUsIHsgLi4uY29tbW9uUHJvcGVydGllcygpLFxuICAgICAgLi4uKHN0YXRlLmlzUGxheWluZ0FkICYmIHtcbiAgICAgICAgYWRfcGxheWVkX2R1cmF0aW9uOiBwbGF5ZWRcbiAgICAgIH0pXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmVnaXN0ZXJlZCA9IFtvbih2aWRlbywgJ2Vycm9yJywgZXZlbnQgPT4ge1xuICAgIHZhciBfZXZlbnQkZXJyb3IsIF9ldmVudCRlcnJvcjIsIF9ldmVudCRlcnJvcjIkZGF0YTtcblxuICAgIGVtaXR0ZXIuZW1pdCgncGxheWJhY2tFcnJvcicsIHtcbiAgICAgIG1vZHVsZV9lcnJvcl9jb2RlOiAoKF9ldmVudCRlcnJvciA9IGV2ZW50LmVycm9yKSA9PT0gbnVsbCB8fCBfZXZlbnQkZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ldmVudCRlcnJvci5jb2RlKSB8fCAoKF9ldmVudCRlcnJvcjIgPSBldmVudC5lcnJvcikgPT09IG51bGwgfHwgX2V2ZW50JGVycm9yMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9ldmVudCRlcnJvcjIkZGF0YSA9IF9ldmVudCRlcnJvcjIuZGF0YSkgPT09IG51bGwgfHwgX2V2ZW50JGVycm9yMiRkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZXZlbnQkZXJyb3IyJGRhdGEuY29kZSksXG4gICAgICAuLi5jb21tb25Qcm9wZXJ0aWVzKClcbiAgICB9KTtcbiAgfSksIG9uY2UodmlkZW8sICdwbGF5ZXJTdGFydGVkJywgKCkgPT4ge1xuICAgIHN0YXRlLnBsYXllclN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gIH0pLCBvbih2aWRlbywgJ2R1cmF0aW9uY2hhbmdlJywgKCkgPT4ge1xuICAgIC8vIGR1cmF0aW9uIG1heSBjaGFuZ2Ugd2hlbiBwbGF5aW5nIGFuIGFkIHN0aXRjaGVkIHN0cmVhbSwgdGFrZSBvbmx5IGluaXRpYWwgdmFsdWVcbiAgICBpZiAoIXN0YXRlLmR1cmF0aW9uKSB7XG4gICAgICBzdGF0ZS5kdXJhdGlvbiA9IGdldFBsYXliYWNrU3RhdHVzKCkuZHVyYXRpb247XG4gICAgfVxuICB9KSwgb25jZSh2aWRlbywgJ2NhbnBsYXknLCAoKSA9PiB7XG4gICAgc3RhdGUuc3RhdHVzID0gJ2JlZ2FuJztcbiAgICBzdGF0ZS5zZXNzaW9uSWQgPSB1dWlkdjQoKTtcbiAgICBzdGF0ZS5wbGF5ZWREdXJhdGlvbiA9IDA7XG4gICAgZW1pdHRlci5lbWl0KCdwbGF5YmFja0JlZ2FuJywge1xuICAgICAgcGxheWVyX3N0YXJ0dXBfdGltZTogKHN0YXRlLnBsYXllclN0YXJ0VGltZSAtIHN0YXRlLm1vZHVsZVN0YXJ0VGltZSkgLyAxMDAwLFxuICAgICAgdmlkZW9fc3RhcnR1cF90aW1lOiAoRGF0ZS5ub3coKSAtIHN0YXRlLm1vZHVsZVN0YXJ0VGltZSkgLyAxMDAwLFxuICAgICAgLi4uY29tbW9uUHJvcGVydGllcygpXG4gICAgfSk7XG4gIH0pLCBvbih2aWRlbywgJ3BsYXlpbmcnLCBkaXNwYXRjaFN0YXJ0KSwgb24odmlkZW8sICd3YWl0aW5nJywgKCkgPT4ge1xuICAgIGlmICghc3RhdGUuYnVmZmVyaW5nU3RhcnRUaW1lKSB7XG4gICAgICBlbWl0dGVyLmVtaXQoJ2J1ZmZlcmluZ1N0YXJ0ZWQnLCBjb21tb25Qcm9wZXJ0aWVzKCkpO1xuICAgICAgc3RhdGUuYnVmZmVyaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB9XG4gIH0pLCBvbih2aWRlbywgJ3RpbWV1cGRhdGUnLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gZ2V0UGxheWJhY2tTdGF0dXMoKTtcbiAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXR1cy5jdXJyZW50VGltZTtcblxuICAgIGlmIChzdGF0ZS5jb250ZW50LnR5cGUgPT09ICdsaXZlcycpIHtcbiAgICAgIHN0YXRlLmxpdmVPZmZzZXQgPSBzdGF0dXMubGl2ZU9mZnNldCA8IDEwID8gMCA6IHN0YXR1cy5saXZlT2Zmc2V0O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5idWZmZXJpbmdTdGFydFRpbWUpIHtcbiAgICAgIGVtaXR0ZXIuZW1pdCgnYnVmZmVyaW5nRW5kZWQnLCB7XG4gICAgICAgIGJ1ZmZlcmluZ19zZWNvbmQ6IChEYXRlLm5vdygpIC0gc3RhdGUuYnVmZmVyaW5nU3RhcnRUaW1lKSAvIDEwMDAsXG4gICAgICAgIC4uLmNvbW1vblByb3BlcnRpZXMoKVxuICAgICAgfSk7XG4gICAgICBzdGF0ZS5idWZmZXJpbmdTdGFydFRpbWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9KSwgb24odmlkZW8sICdwYXVzZScsIGRpc3BhdGNoU3RvcCksIG9uKHZpZGVvLCAnc2Vla2luZycsICgpID0+IHtcbiAgICBzdGF0ZS5zZWVraW5nRnJvbSA9IHN0YXRlLmN1cnJlbnRUaW1lO1xuICB9KSwgb24oc2Vzc2lvbiwgJ3VzZXJTZWVraW5nJywgKCkgPT4ge1xuICAgIHN0YXRlLnNlZWtpbmcgPSB0cnVlO1xuICB9KSwgb24odmlkZW8sICdzZWVrZWQnLCAoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnNlZWtpbmcpIHtcbiAgICAgIGVtaXR0ZXIuZW1pdCgnc2Vla2VkJywge1xuICAgICAgICBzZWVraW5nX2Zyb206IHN0YXRlLnNlZWtpbmdGcm9tLFxuICAgICAgICBzZWVraW5nX3RvOiB2aWRlby5jdXJyZW50VGltZSxcbiAgICAgICAgLi4uY29tbW9uUHJvcGVydGllcygpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0ZS5zZWVraW5nID0gZmFsc2U7XG4gIH0pLCBvbih2aWRlbywgJ3JhdGVjaGFuZ2UnLCAoKSA9PiB7XG4gICAgZW1pdHRlci5lbWl0KCdwbGF5YmFja1NwZWVkQ2hhbmdlJywge1xuICAgICAgcGxheWJhY2tTcGVlZDogdmlkZW8ucGxheWJhY2tSYXRlLFxuICAgICAgLi4uY29tbW9uUHJvcGVydGllcygpXG4gICAgfSk7XG4gIH0pLCBvbihzZXNzaW9uLCAnc2VjdGlvbkNoYW5nZScsICgpID0+IHtcbiAgICBkaXNwYXRjaFN0b3AoKTtcbiAgICBzdGF0ZS5jb250ZW50ID0gc2Vzc2lvbi5nZXRDb250ZW50KCk7XG4gICAgZGlzcGF0Y2hTdGFydCgpO1xuICB9KSwgb25jZSh2aWRlbywgJ2VuZGVkJywgKCkgPT4ge1xuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdzdGFydGVkJykge1xuICAgICAgZGlzcGF0Y2hTdG9wKCk7XG4gICAgfVxuXG4gICAgc3RhdGUuc3RhdHVzID0gJ2luaXQnO1xuICAgIGVtaXR0ZXIuZW1pdCgncGxheWJhY2tFbmRlZCcsIHtcbiAgICAgIHZpZGVvX3BsYXliYWNrX2VuZGVkX2F0X3BlcmNlbnRhZ2U6IHN0YXRlLmN1cnJlbnRUaW1lIC8gc3RhdGUuZHVyYXRpb24sXG4gICAgICB2aWRlb190b3RhbF9wbGF5ZWRfZHVyYXRpb246IHN0YXRlLnBsYXllZER1cmF0aW9uLFxuICAgICAgLi4uKHN0YXRlLnNzYWlQcm92aWRlciAmJiB7XG4gICAgICAgIGFkX3RvdGFsX3BsYXllZF9kdXJhdGlvbjogc3RhdGUuYWRQbGF5ZWREdXJhdGlvblxuICAgICAgfSksXG4gICAgICAuLi5jb21tb25Qcm9wZXJ0aWVzKClcbiAgICB9KTtcbiAgfSksIG9uY2UodmlkZW8sICdsb2FkZWRBZE1ldGFkYXRhJywgZXZlbnQgPT4ge1xuICAgIHN0YXRlLnNzYWlQcm92aWRlciA9IGV2ZW50LmRhdGEucHJvdmlkZXI7XG4gICAgc3RhdGUuYWRQbGF5ZWREdXJhdGlvbiA9IDA7XG4gIH0pLCBvbihzZXNzaW9uLCAnYWRCcmVha1N0YXJ0ZWQnLCAoKSA9PiB7XG4gICAgZGlzcGF0Y2hTdG9wKCk7XG4gICAgc3RhdGUuaXNQbGF5aW5nQWQgPSB0cnVlO1xuXG4gICAgaWYgKCFzdGF0ZS5zZWVraW5nKSB7XG4gICAgICBkaXNwYXRjaFN0YXJ0KCk7XG4gICAgfVxuICB9KSwgb24oc2Vzc2lvbiwgJ2FkQnJlYWtFbmRlZCcsICgpID0+IHtcbiAgICBkaXNwYXRjaFN0b3AoKTtcbiAgICBzdGF0ZS5pc1BsYXlpbmdBZCA9IGZhbHNlO1xuXG4gICAgaWYgKCFzdGF0ZS5zZWVraW5nKSB7XG4gICAgICBkaXNwYXRjaFN0YXJ0KCk7XG4gICAgfVxuICB9KV07XG4gIHJldHVybiB7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogKG5hbWUsIGhhbmRsZXIpID0+IGVtaXR0ZXIub24obmFtZSwgaGFuZGxlciksXG4gICAgYWxsOiBoYW5kbGVyID0+IGVtaXR0ZXIub24oJyonLCBoYW5kbGVyKSxcbiAgICBlbWl0OiAobmFtZSwge1xuICAgICAgY3VycmVudFRpbWVcbiAgICB9LCBwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICBpZiAobmFtZSBpbiBsb2dFdmVudE5hbWVzKSB7XG4gICAgICAgIGVtaXR0ZXIuZW1pdChuYW1lLCB7XG4gICAgICAgICAgY3VycmVudF9wb3NpdGlvbjogY3VycmVudFRpbWUsXG4gICAgICAgICAgLi4ucHJvcGVydGllcyxcbiAgICAgICAgICAuLi5jb21tb25Qcm9wZXJ0aWVzKClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVDb250ZW50OiBjb250ZW50ID0+IHtcbiAgICAgIHN0YXRlLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIH0sXG4gICAgcmVzZXQ6ICgpID0+IHJlZ2lzdGVyZWQuZm9yRWFjaChvZmYgPT4gb2ZmKCkpXG4gIH07XG59O1xuXG5jb25zdCBkZWVwRXF1YWwgPSAoY3VycmVudCwgdXBkYXRlZCkgPT4gSlNPTi5zdHJpbmdpZnkoY3VycmVudCkgPT09IEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpO1xuXG5jb25zdCBIRUFSVEJFQVRfSU5URVJWQUxfTVMgPSAxMDAwMDtcbmNvbnN0IFVQREFURV9JTlRFUlZBTF9NUyA9IDEwMDAwO1xuXG5jb25zdCBpc0NvbnRlbnRFeHBpcmVkID0gY29udGVudCA9PiB0eXBlb2YgKGNvbnRlbnQgPT09IG51bGwgfHwgY29udGVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29udGVudC5lbmRfdGltZSkgPT09ICdudW1iZXInICYmIGNvbnRlbnQuZW5kX3RpbWUgKiAxMDAwIDw9IERhdGUubm93KCk7XG5cbmNvbnN0IHN0YXJ0UGxheWJhY2tTZXNzaW9uID0gYXN5bmMgKHBsYXliYWNrQXBpLCBvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgZW1pdHRlciA9IG1pdHQoKTtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgaWQsXG4gICAgZ2V0Q3VycmVudFRpbWUsXG4gICAgY2FjaGUsXG4gICAgbWVkaWFcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICBvbkNoYW5nZUNvbnRlbnQsXG4gICAgb25Tb3VyY2VDaGFuZ2UsXG4gICAgb25JbnZhbGlkVG9rZW4sXG4gICAgb25TZXNzaW9uU3RhcnQsXG4gICAgcmVxdWVzdE5ld1Nlc3Npb24sXG4gICAgaGVhcnRiZWF0VGltZSA9IEhFQVJUQkVBVF9JTlRFUlZBTF9NUyxcbiAgICB1cGRhdGVUaW1lID0gVVBEQVRFX0lOVEVSVkFMX01TXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBzdGF0ZSA9IHt9OyAvLyBnZXQgbGFzdCBwbGF5YmFjayB0aW1lIHRvIHN0YXJ0IHBsYXliYWNrIGZhc3RcbiAgLy8gZ2V0Q29udGVudCBpcyBub3QgY3JpdGljYWwsIHNvIGRvbid0IGJsb2NrIHBsYXliYWNrIGlmIGl0IGhhbmdzIG9yIGZhaWxzKGlnbm9yZWQgaW4gQVBJIGxvZ2ljKVxuXG4gIGNvbnN0IGxvYWRDb250ZW50ID0gKCkgPT4ge1xuICAgIHZhciBfb3B0aW9ucyRjYWNoZSwgX29wdGlvbnMkY2FjaGUkZ2V0O1xuXG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgdXBkYXRlQ29udGVudCgoX29wdGlvbnMkY2FjaGUgPSBvcHRpb25zLmNhY2hlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRjYWNoZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGNhY2hlJGdldCA9IF9vcHRpb25zJGNhY2hlLmdldChgJHt0eXBlfS8ke2lkfWApKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRjYWNoZSRnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGNhY2hlJGdldC5jb250ZW50KSwgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIFVQREFURV9JTlRFUlZBTF9NUyk7XG4gICAgfSldKTtcbiAgfTtcblxuICBjb25zdCBnZXRQbGF5YmFja0luZm8gPSBhc3luYyAoKSA9PiB7XG4gICAgdmFyIF9jYWNoZSRnZXQ7XG5cbiAgICBzdGF0ZS5zb3VyY2VzID0gKChjYWNoZSA9PT0gbnVsbCB8fCBjYWNoZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9jYWNoZSRnZXQgPSBjYWNoZS5nZXQoYCR7dHlwZX0vJHtpZH1gKSkgPT09IG51bGwgfHwgX2NhY2hlJGdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NhY2hlJGdldC5wbGF5YmFja0luZm8pIHx8IChhd2FpdCBwbGF5YmFja0FwaS5nZXRQbGF5YmFja0luZm8oe1xuICAgICAgdHlwZSxcbiAgICAgIGlkLFxuICAgICAgdG9rZW46IHN0YXRlLnRva2VuXG4gICAgfSkpKS5zb3VyY2VzO1xuICAgIG9uU291cmNlQ2hhbmdlID09PSBudWxsIHx8IG9uU291cmNlQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblNvdXJjZUNoYW5nZShzdGF0ZS5zb3VyY2VzKTtcbiAgfTtcblxuICBhc3luYyBmdW5jdGlvbiB1cGRhdGVDb250ZW50KGNvbnRlbnRJbkNhY2hlKSB7XG4gICAgdmFyIF9zdGF0ZSRjb250ZW50O1xuXG4gICAgY29uc3QgY29udGVudCA9ICFjb250ZW50SW5DYWNoZSB8fCBpc0NvbnRlbnRFeHBpcmVkKGNvbnRlbnRJbkNhY2hlKSA/IGF3YWl0IHBsYXliYWNrQXBpLmdldENvbnRlbnQoe1xuICAgICAgdHlwZSxcbiAgICAgIGlkXG4gICAgfSkgOiBjb250ZW50SW5DYWNoZTtcblxuICAgIGlmICghZGVlcEVxdWFsKGNvbnRlbnQsIHN0YXRlLmNvbnRlbnQpKSB7XG4gICAgICBzdGF0ZS5jb250ZW50ID0gY29udGVudDtcbiAgICAgIG9uQ2hhbmdlQ29udGVudCA9PT0gbnVsbCB8fCBvbkNoYW5nZUNvbnRlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlQ29udGVudCh7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIC4uLmNvbnRlbnQsXG4gICAgICAgIHNvdXJjZXM6IHN0YXRlLnNvdXJjZXNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb250ZW50LmVuZF90aW1lICYmIGNvbnRlbnQuZW5kX3RpbWUgPT09ICgoX3N0YXRlJGNvbnRlbnQgPSBzdGF0ZS5jb250ZW50KSA9PT0gbnVsbCB8fCBfc3RhdGUkY29udGVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0YXRlJGNvbnRlbnQuZW5kX3RpbWUpKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc3RhdGUuZW5kVGltZW91dElkKTtcbiAgICAgIHN0YXRlLmVuZFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzTGl2ZUR1cmF0aW9uKG1lZGlhLmR1cmF0aW9uKSkge1xuICAgICAgICAgIC8vIFJlcXVlc3QgbmV3IHNlc3Npb24gZm9yIHNlbGYgbGluZWFyLlxuICAgICAgICAgIHJlcXVlc3ROZXdTZXNzaW9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVxdWVzdCBuZXcgY29udGVudCBmb3IgaXAgbGluZWFyLlxuICAgICAgICAgIHVwZGF0ZUNvbnRlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfSwgY29udGVudC5lbmRfdGltZSAqIDEwMDAgLSBEYXRlLm5vdygpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yQ29udGVudCA9IGxvYWRDb250ZW50KCk7XG4gIGNvbnN0IHNlc3Npb25JbmZvID0gYXdhaXQgcGxheWJhY2tBcGkuc3RhcnRQbGF5YmFjayh7XG4gICAgdHlwZSxcbiAgICBpZFxuICB9KTtcbiAgb25TZXNzaW9uU3RhcnQgPT09IG51bGwgfHwgb25TZXNzaW9uU3RhcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uU2Vzc2lvblN0YXJ0KHNlc3Npb25JbmZvKTtcbiAgY29uc3QgcmVxdWVzdFBhcmFtcyA9IHtcbiAgICB0eXBlLFxuICAgIGlkLFxuICAgIHRva2VuOiBzZXNzaW9uSW5mby50b2tlblxuICB9O1xuICBzdGF0ZS50b2tlbiA9IHNlc3Npb25JbmZvLnRva2VuO1xuICBhd2FpdCBnZXRQbGF5YmFja0luZm8oKTtcbiAgbGV0IHVwZGF0ZUludGVydmFsSWQ7XG5cbiAgaWYgKHR5cGUgPT09ICdsaXZlcycpIHtcbiAgICB1cGRhdGVJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwodXBkYXRlQ29udGVudCwgdXBkYXRlVGltZSk7XG4gIH1cblxuICBsZXQgbGFzdFBsYXllZFRpbWU7XG5cbiAgY29uc3QgdXBkYXRlTGFzdFBsYXllZCA9ICgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGdldEN1cnJlbnRUaW1lID09PSBudWxsIHx8IGdldEN1cnJlbnRUaW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnZXRDdXJyZW50VGltZSgpO1xuXG4gICAgaWYgKGN1cnJlbnRUaW1lID49IDAgJiYgbGFzdFBsYXllZFRpbWUgIT09IGN1cnJlbnRUaW1lKSB7XG4gICAgICBsYXN0UGxheWVkVGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgcGxheWJhY2tBcGkudXBkYXRlTGFzdFBsYXllZCh7IC4uLnJlcXVlc3RQYXJhbXMsXG4gICAgICAgIHRpbWU6IGN1cnJlbnRUaW1lXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKHR5cGUgPT09ICd2aWRlb3MnKSB7XG4gICAgdXBkYXRlSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKHVwZGF0ZUxhc3RQbGF5ZWQsIHVwZGF0ZVRpbWUpO1xuICB9XG5cbiAgY29uc3QgaGVhcnRiZWF0SW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHBsYXliYWNrQXBpLmhlYXJ0YmVhdChyZXF1ZXN0UGFyYW1zKS5jYXRjaChlcnJvciA9PiB7XG4gICAgdmFyIF9lcnJvciRyZXNwb25zZTtcblxuICAgIGlmICgvNFxcZFxcZC8udGVzdCgoX2Vycm9yJHJlc3BvbnNlID0gZXJyb3IucmVzcG9uc2UpID09PSBudWxsIHx8IF9lcnJvciRyZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Vycm9yJHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaGVhcnRiZWF0SW50ZXJ2YWxJZCk7XG4gICAgICBvbkludmFsaWRUb2tlbiA9PT0gbnVsbCB8fCBvbkludmFsaWRUb2tlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25JbnZhbGlkVG9rZW4oZXJyb3IpO1xuICAgIH1cbiAgfSksIGhlYXJ0YmVhdFRpbWUpO1xuXG4gIGNvbnN0IGVuZCA9ICgpID0+IHtcbiAgICB1cGRhdGVMYXN0UGxheWVkKCk7XG4gICAgY2xlYXJJbnRlcnZhbCh1cGRhdGVJbnRlcnZhbElkKTtcbiAgICBjbGVhckludGVydmFsKGhlYXJ0YmVhdEludGVydmFsSWQpO1xuICAgIGNsZWFyVGltZW91dChzdGF0ZS5lbmRUaW1lb3V0SWQpO1xuICAgIGVtaXR0ZXIuZW1pdCgncGxheWJhY2tFbmRlZCcpO1xuICAgIHJldHVybiBwbGF5YmFja0FwaS5lbmRQbGF5YmFjayhyZXF1ZXN0UGFyYW1zKTtcbiAgfTtcblxuICBhd2FpdCB3YWl0Rm9yQ29udGVudDtcbiAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgdG9rZW46IHNlc3Npb25JbmZvLnRva2VuLFxuICAgIGRybVBvcnRhbFVybDogc2Vzc2lvbkluZm8uZHJtX3BvcnRhbF91cmwsXG4gICAgdXBkYXRlTGFzdFBsYXllZCxcbiAgICBlbmRcbiAgfTtcbn07XG5cbmNvbnN0IHByZWxvYWQgPSAocGxheWJhY2tBcGksIHByZWxvYWRMaXN0LCBjdXJyZW50Q29udGVudCwgY2FjaGUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgdXBkYXRlVGltZSA9IDEwMDAwXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGZldGNoRGF0YSA9ICgpID0+IHtcbiAgICAvLyBUT0RPOiBtYWtlIHN1cmUgdGhlIHByZXZpb3VzIGVuZCBzZWVzaW9uIGlzIGNhbGxlZCwgdGhlbiBjYWxsIHRoZSBuZXh0IHN0YXJ0IHNlc3Npb25cbiAgICBwcmVsb2FkTGlzdC5mb3JFYWNoKGFzeW5jICh7XG4gICAgICBjb250ZW50VHlwZTogdHlwZSxcbiAgICAgIGNvbnRlbnRJZDogaWRcbiAgICB9KSA9PiB7XG4gICAgICB2YXIgX2NhY2hlJGdldCwgX2NhY2hlJGdldCRjb250ZW50O1xuXG4gICAgICBpZiAoaWQgPT09IGN1cnJlbnRDb250ZW50LmlkICYmIHR5cGUgPT09IGN1cnJlbnRDb250ZW50LnR5cGUpIHJldHVybjtcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSAoX2NhY2hlJGdldCA9IGNhY2hlLmdldChgJHt0eXBlfS8ke2lkfWApKSA9PT0gbnVsbCB8fCBfY2FjaGUkZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2NhY2hlJGdldCRjb250ZW50ID0gX2NhY2hlJGdldC5jb250ZW50KSA9PT0gbnVsbCB8fCBfY2FjaGUkZ2V0JGNvbnRlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jYWNoZSRnZXQkY29udGVudC5lbmRfdGltZTtcbiAgICAgIGlmICh0eXBlb2YgZW5kVGltZSA9PT0gJ251bWJlcicgJiYgZW5kVGltZSAqIDEwMDAgPj0gRGF0ZS5ub3coKSkgcmV0dXJuO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgdG9rZW5cbiAgICAgICAgfSA9IGF3YWl0IHBsYXliYWNrQXBpLnN0YXJ0UGxheWJhY2soe1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHdhaXRGb3JDb250ZW50ID0gcGxheWJhY2tBcGkuZ2V0Q29udGVudCh7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBpZFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgd2FpdEZvclBsYXliYWNrSW5mbyA9IHBsYXliYWNrQXBpLmdldFBsYXliYWNrSW5mbyh7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICB0b2tlblxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgW2NvbnRlbnQsIHBsYXliYWNrSW5mb10gPSBhd2FpdCBQcm9taXNlLmFsbChbd2FpdEZvckNvbnRlbnQsIHdhaXRGb3JQbGF5YmFja0luZm9dKTtcbiAgICAgICAgY2FjaGUuc2V0KGAke3R5cGV9LyR7aWR9YCwge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgcGxheWJhY2tJbmZvXG4gICAgICAgIH0pO1xuICAgICAgICBwbGF5YmFja0FwaS5lbmRQbGF5YmFjayh7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICB0b2tlblxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBmZXRjaERhdGEoKTtcbiAgY29uc3QgZmV0Y2hEYXRhSW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGZldGNoRGF0YSwgdXBkYXRlVGltZSk7XG4gIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGZldGNoRGF0YUludGVydmFsSUQpO1xufTtcblxuY29uc3QgZ2V0U291cmNlVHlwZVNldHRpbmdzID0gc291cmNlcyA9PiB7XG4gIGlmICghKChzb3VyY2VzID09PSBudWxsIHx8IHNvdXJjZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZXMubGVuZ3RoKSA+IDEpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXRlbXMgPSBzb3VyY2VzLm1hcChzb3VyY2UgPT4ge1xuICAgIHZhciBfc291cmNlJHN1YmR1YiwgX3NvdXJjZSR0eXBlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBzb3VyY2Uuc3ViZHViIHx8IHNvdXJjZS50eXBlLFxuICAgICAgbGFiZWw6ICgoX3NvdXJjZSRzdWJkdWIgPSBzb3VyY2Uuc3ViZHViKSA9PT0gbnVsbCB8fCBfc291cmNlJHN1YmR1YiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NvdXJjZSRzdWJkdWIudG9VcHBlckNhc2UoKSkgfHwgKChfc291cmNlJHR5cGUgPSBzb3VyY2UudHlwZSkgPT09IG51bGwgfHwgX3NvdXJjZSR0eXBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc291cmNlJHR5cGUudG9VcHBlckNhc2UoKSlcbiAgICB9O1xuICB9KTtcblxuICBjb25zdCBnZXREZWZhdWx0ID0gcHJlZmVycmVkID0+IChpdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gcHJlZmVycmVkKSB8fCBpdGVtc1swXSB8fCB7fSkudmFsdWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc291cmNlLXR5cGUnLFxuICAgIHRpdGxlOiAnS0tTLlNFVFRJTkcuVkVSU0lPTicsXG4gICAgaXRlbXMsXG4gICAgZ2V0RGVmYXVsdFxuICB9O1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cblxuY29uc3Qgd2FpdE1zID0gdGltZSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lKTtcbn0pO1xuXG5jb25zdCBoYW5kbGVSZXF1ZXN0RXJyb3IgPSAocmVzdWx0LCB7XG4gIG9uRXJyb3IsXG4gIHJldHJ5VGltZXMgPSAwXG59KSA9PiByZXN1bHQuY2F0Y2goZXJyb3IgPT4gb25FcnJvcihlcnJvciwge1xuICByZXRyeTogKCkgPT4gaGFuZGxlUmVxdWVzdEVycm9yKGF4aW9zKGVycm9yLmNvbmZpZyksIHtcbiAgICBvbkVycm9yLFxuICAgIHJldHJ5VGltZXM6IHJldHJ5VGltZXMgKyAxXG4gIH0pLFxuICByZXRyeVRpbWVzXG59KSk7XG5cbmNvbnN0IGlnbm9yZU1pbm9yRXJyb3IgPSBhc3luYyAoZXZlbnQsIHtcbiAgcmV0cnksXG4gIHJldHJ5VGltZXNcbn0gPSB7fSkgPT4ge1xuICB2YXIgX2V2ZW50JHJlc3BvbnNlLCBfZXZlbnQkcmVzcG9uc2UyLCBfZXZlbnQkY29uZmlnO1xuXG4gIGNvbnNvbGUud2FybihldmVudCk7XG5cbiAgaWYgKCgoKF9ldmVudCRyZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfZXZlbnQkcmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ldmVudCRyZXNwb25zZS5tZXNzYWdlKSA9PT0gJ05ldHdvcmsgRXJyb3InIHx8IC81MDJ8NTAzLy50ZXN0KChfZXZlbnQkcmVzcG9uc2UyID0gZXZlbnQucmVzcG9uc2UpID09PSBudWxsIHx8IF9ldmVudCRyZXNwb25zZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ldmVudCRyZXNwb25zZTIuc3RhdHVzKSkgJiYgcmV0cnlUaW1lcyA8IDMpIHtcbiAgICBhd2FpdCB3YWl0TXMoMzAwMCk7XG4gICAgcmV0dXJuIHJldHJ5KCk7XG4gIH1cblxuICBpZiAoL3N0YXJ0JHxpbmZvJHxoZWFydGJlYXQkLy50ZXN0KChfZXZlbnQkY29uZmlnID0gZXZlbnQuY29uZmlnKSA9PT0gbnVsbCB8fCBfZXZlbnQkY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZXZlbnQkY29uZmlnLnVybCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXZlbnQpO1xuICB9XG5cbiAgY29uc29sZS5sb2coJ0lnbm9yZSBub24tY3JpdGljYWwgcGxheWJhY2sgQVBJIGZhaWwnLCBldmVudCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoKSA9PiB7fSk7XG59O1xuXG5jb25zdCBjcmVhdGVBcGkgPSAoe1xuICBob3N0LFxuICBhY2Nlc3NUb2tlbixcbiAgZGV2aWNlSWQsXG4gIGhlYWRlcnMsXG4gIHBhcmFtc1xufSwge1xuICBvbkVycm9yID0gaWdub3JlTWlub3JFcnJvclxufSA9IHt9KSA9PiB7XG4gIGNvbnN0IGdldEhlYWRlcnMgPSAoKSA9PiAoeyAuLi4oYWNjZXNzVG9rZW4gJiYge1xuICAgICAgQXV0aG9yaXphdGlvbjogYWNjZXNzVG9rZW5cbiAgICB9KSxcbiAgICAuLi4oZGV2aWNlSWQgJiYge1xuICAgICAgJ1gtRGV2aWNlLUlEJzogZGV2aWNlSWRcbiAgICB9KSxcbiAgICAnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIC4uLmhlYWRlcnNcbiAgfSk7XG5cbiAgY29uc3QgcmVxdWVzdCA9ICh1cmwsIHtcbiAgICBtZXRob2RcbiAgfSA9IHt9KSA9PiBoYW5kbGVSZXF1ZXN0RXJyb3IoYXhpb3ModXJsLCB7XG4gICAgbWV0aG9kLFxuICAgIGhlYWRlcnM6IGdldEhlYWRlcnMoKSxcbiAgICBwYXJhbXNcbiAgfSksIHtcbiAgICBvbkVycm9yXG4gIH0pLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSk7XG5cbiAgY29uc3Qgc2Vzc2lvblJlcXVlc3QgPSAocGF0aCwge1xuICAgIG1ldGhvZCA9ICdQT1NUJyxcbiAgICB0eXBlLFxuICAgIGlkLFxuICAgIHRva2VuXG4gIH0pID0+IGhhbmRsZVJlcXVlc3RFcnJvcihheGlvcyhgJHtob3N0fS9zZXNzaW9ucy8ke3R5cGV9LyR7aWR9L3BsYXliYWNrLyR7ZGV2aWNlSWR9LyR7cGF0aH1gLCB7XG4gICAgbWV0aG9kLFxuICAgIGhlYWRlcnM6IGdldEhlYWRlcnMoKSxcbiAgICBwYXJhbXM6IHsgLi4ucGFyYW1zLFxuICAgICAgcGxheWJhY2tfdG9rZW46IHRva2VuXG4gICAgfVxuICB9KSwge1xuICAgIG9uRXJyb3JcbiAgfSkudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKTtcblxuICByZXR1cm4ge1xuICAgIGdldENvbnRlbnQ6ICh7XG4gICAgICB0eXBlLFxuICAgICAgaWRcbiAgICB9KSA9PiByZXF1ZXN0KGAke2hvc3R9LyR7dHlwZX0vJHtpZH1gLCB7fSksXG4gICAgc3RhcnRQbGF5YmFjazogKHtcbiAgICAgIHR5cGUsXG4gICAgICBpZFxuICAgIH0pID0+IHJlcXVlc3QoYCR7aG9zdH0vc2Vzc2lvbnMvJHt0eXBlfS8ke2lkfS9wbGF5YmFjay8ke2RldmljZUlkfS9zdGFydGAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnXG4gICAgfSksXG4gICAgZ2V0UGxheWJhY2tJbmZvOiAoe1xuICAgICAgdHlwZSxcbiAgICAgIGlkLFxuICAgICAgdG9rZW5cbiAgICB9KSA9PiBzZXNzaW9uUmVxdWVzdCgnaW5mbycsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB0eXBlLFxuICAgICAgaWQsXG4gICAgICB0b2tlblxuICAgIH0pLFxuICAgIGhlYXJ0YmVhdDogKHtcbiAgICAgIHR5cGUsXG4gICAgICBpZCxcbiAgICAgIHRva2VuXG4gICAgfSkgPT4gc2Vzc2lvblJlcXVlc3QoJ2hlYXJ0YmVhdCcsIHtcbiAgICAgIHR5cGUsXG4gICAgICBpZCxcbiAgICAgIHRva2VuXG4gICAgfSksXG4gICAgdXBkYXRlTGFzdFBsYXllZDogKHtcbiAgICAgIHR5cGUsXG4gICAgICBpZCxcbiAgICAgIHRva2VuLFxuICAgICAgdGltZVxuICAgIH0pID0+IHNlc3Npb25SZXF1ZXN0KGBwb3NpdGlvbi8ke01hdGguZmxvb3IodGltZSl9YCwge1xuICAgICAgdHlwZSxcbiAgICAgIGlkLFxuICAgICAgdG9rZW5cbiAgICB9KSxcbiAgICBlbmRQbGF5YmFjazogKHtcbiAgICAgIHR5cGUsXG4gICAgICBpZCxcbiAgICAgIHRva2VuXG4gICAgfSkgPT4gc2Vzc2lvblJlcXVlc3QoJ2VuZCcsIHtcbiAgICAgIHR5cGUsXG4gICAgICBpZCxcbiAgICAgIHRva2VuXG4gICAgfSlcbiAgfTtcbn07XG5cbmNvbnN0IGdldFN0cmVhbUluZm8gPSAoc291cmNlcyA9IFtdLCB7XG4gIHR5cGUgPSAnJyxcbiAgbGljZW5zZVVyaSxcbiAgY2VydGlmaWNhdGVVcmkgPSBgJHtsaWNlbnNlVXJpfS9mYWlycGxheV9jZXJ0YCxcbiAgbGljZW5zZUhlYWRlcnM6IGhlYWRlcnMsXG4gIHRodW1ibmFpbEVuYWJsZWRcbn0gPSB7fSkgPT4ge1xuICBjb25zdCBhY3RpdmVTb3VyY2UgPSBzb3VyY2VzLmZpbmQoc291cmNlID0+IChzb3VyY2Uuc3ViZHViIHx8IHNvdXJjZS50eXBlKSA9PT0gdHlwZSkgfHwgc291cmNlc1swXTtcbiAgcmV0dXJuICgoYWN0aXZlU291cmNlID09PSBudWxsIHx8IGFjdGl2ZVNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWN0aXZlU291cmNlLm1hbmlmZXN0cykgfHwgW10pLm1hcChtYW5pZmVzdCA9PiAoeyAuLi5tYW5pZmVzdCxcbiAgICB0eXBlOiBtYW5pZmVzdC5wcm90b2NvbCxcbiAgICBzcmM6IG1hbmlmZXN0LnVybCxcbiAgICBkcm06IHtcbiAgICAgIGZhaXJwbGF5OiB7XG4gICAgICAgIGxpY2Vuc2VVcmksXG4gICAgICAgIGNlcnRpZmljYXRlVXJpLFxuICAgICAgICBoZWFkZXJzXG4gICAgICB9LFxuICAgICAgd2lkZXZpbmU6IHtcbiAgICAgICAgbGljZW5zZVVyaSxcbiAgICAgICAgaGVhZGVyc1xuICAgICAgfSxcbiAgICAgIHBsYXlyZWFkeToge1xuICAgICAgICBsaWNlbnNlVXJpLFxuICAgICAgICBoZWFkZXJzXG4gICAgICB9XG4gICAgfSxcbiAgICBxdWFsaXR5T3B0aW9uczogbWFuaWZlc3QucmVzb2x1dGlvbnMubWFwKCh7XG4gICAgICBoZWlnaHRcbiAgICB9KSA9PiAoe1xuICAgICAgbGFiZWw6IGhlaWdodCxcbiAgICAgIHZhbHVlOiBoZWlnaHQsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIG1heEhlaWdodDogaGVpZ2h0XG4gICAgICB9XG4gICAgfSkpXG4gIH0pKS5jb25jYXQodGh1bWJuYWlsRW5hYmxlZCAmJiBhY3RpdmVTb3VyY2UgIT09IG51bGwgJiYgYWN0aXZlU291cmNlICE9PSB2b2lkIDAgJiYgYWN0aXZlU291cmNlLnRodW1ibmFpbF9zZWVraW5nX3VybCA/IHtcbiAgICB0eXBlOiAndGh1bWJuYWlsJyxcbiAgICBzcmM6IGFjdGl2ZVNvdXJjZS50aHVtYm5haWxfc2Vla2luZ191cmxcbiAgfSA6IFtdKTtcbn07XG5cbmNvbnN0IGdldENvbnRlbnRJbmZvID0gZGF0YSA9PiB7XG4gIHZhciBfZGF0YSR0aW1lLCBfZGF0YSR0aW1lMjtcblxuICByZXR1cm4ge1xuICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxuICAgIGNoYW5uZWxUaXRsZTogZGF0YS5zdWJ0aXRsZSxcbiAgICBjaGFubmVsSWNvbjogZGF0YS5pbWFnZV91cmwsXG4gICAgZW5kOiBkYXRhLmVuZCxcbiAgICBzZWN0aW9uOiB7XG4gICAgICBpZDogZGF0YS5zZWN0aW9uX2lkLFxuICAgICAgc3RhcnQ6IGRhdGEuc3RhcnRfdGltZSxcbiAgICAgIGVuZDogZGF0YS5lbmRfdGltZVxuICAgIH0sXG4gICAgcHJldmlvdXM6IGRhdGEucHJldl92aWRlbyxcbiAgICBuZXh0OiBkYXRhLm5leHRfdmlkZW8sXG4gICAgc3RhcnRUaW1lOiAoX2RhdGEkdGltZSA9IGRhdGEudGltZSkgPT09IG51bGwgfHwgX2RhdGEkdGltZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RhdGEkdGltZS5sYXN0X3Bvc2l0aW9uLFxuICAgIGNoYXB0ZXJzOiBbKChfZGF0YSR0aW1lMiA9IGRhdGEudGltZSkgPT09IG51bGwgfHwgX2RhdGEkdGltZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kYXRhJHRpbWUyLmVuZF9zdGFydF9wb3NpdGlvbikgJiYge1xuICAgICAgdHlwZTogJ2VuZGluZycsXG4gICAgICBzdGFydDogZGF0YS50aW1lLmVuZF9zdGFydF9wb3NpdGlvblxuICAgIH1dLmZpbHRlcihCb29sZWFuKVxuICB9O1xufTtcblxuY29uc3QgbGlua1BsdWdpbkV2ZW50cyA9IChwbHVnaW5zLCBoYW5kbGVycykgPT4ge1xuICBjb25zdCByZWdpc3RlcmVkID0gcGx1Z2lucy5tYXAocGx1Z2luID0+IE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKS5tYXAoKFtldmVudE5hbWUsIGhhbmRsZXJdKSA9PiB7XG4gICAgdmFyIF9wbHVnaW4kb247XG5cbiAgICByZXR1cm4gKF9wbHVnaW4kb24gPSBwbHVnaW4ub24pID09PSBudWxsIHx8IF9wbHVnaW4kb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wbHVnaW4kb24uY2FsbChwbHVnaW4sIGV2ZW50TmFtZSwgZXZlbnQgPT4gaGFuZGxlcihldmVudCwgcGx1Z2luKSk7XG4gIH0pKTtcbiAgcmV0dXJuICgpID0+IFtdLmNvbmNhdCguLi5yZWdpc3RlcmVkKS5mb3JFYWNoKHJlbW92ZUxpc3RlbmVyID0+IHJlbW92ZUxpc3RlbmVyID09PSBudWxsIHx8IHJlbW92ZUxpc3RlbmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZW1vdmVMaXN0ZW5lcigpKTtcbn07XG5cbmNvbnN0IHR5cGUgPSB7XG4gIFNFTEVDVF9NRURJQV9TT1VSQ0U6ICdVSV9TRUxFQ1RfTUVESUFfU09VUkNFJyxcbiAgU0VUX01FRElBX1NPVVJDRVM6ICdVSV9TRVRfTUVESUFfU09VUkNFUycsXG4gIENIQU5HRV9SRUNPTU1FTkRBVElPTl9QQU5FTDogJ0NIQU5HRV9SRUNPTU1FTkRBVElPTl9QQU5FTCcsXG4gIFRPR0dMRV9SRUNPTU1FTkRBVElPTl9QQU5FTDogJ1RPR0dMRV9SRUNPTU1FTkRBVElPTl9QQU5FTCcsXG4gIE9QRU5fUEFORUw6ICdPUEVOX1BBTkVMJyxcbiAgSElERV9QQU5FTDogJ0hJREVfUEFORUwnLFxuICBPRkZFUl9BVVRPUExBWTogJ09GRkVSX0FVVE9QTEFZJyxcbiAgRElTTUlTU19BVVRPUExBWTogJ0RJU01JU1NfQVVUT1BMQVknLFxuICBFUlJPUjogJ1VJX0VSUk9SJyxcbiAgUkVTRVRfRU5EX1JPTEw6ICdSRVNFVF9FTkRfUk9MTCcsXG4gIFNUUkVBTV9FVkVOVFNfQ0hBTkdFRDogJ1NUUkVBTV9FVkVOVFNfQ0hBTkdFRCcsXG4gIEFEX0JSRUFLX1NUQVJURUQ6ICdBRF9CUkVBS19TVEFSVEVEJyxcbiAgQURfQlJFQUtfRU5ERUQ6ICdBRF9CUkVBS19FTkRFRCcsXG4gIFZJU0lCSUxJVFlfQ0hBTkdFOiAnVklTSUJJTElUWV9DSEFOR0UnLFxuICBQTEFZQkFDS19FTkQ6ICdQTEFZQkFDS19FTkQnXG59O1xudmFyIHVpQWN0aW9ucyA9IHtcbiAgc2VsZWN0TWVkaWFTb3VyY2U6IG1lZGlhU291cmNlID0+ICh7XG4gICAgdHlwZTogdHlwZS5TRUxFQ1RfTUVESUFfU09VUkNFLFxuICAgIG1lZGlhU291cmNlXG4gIH0pLFxuICBzZXRNZWRpYVNvdXJjZXM6IChpdGVtcyA9IFtdKSA9PiAoe1xuICAgIHR5cGU6IHR5cGUuU0VUX01FRElBX1NPVVJDRVMsXG4gICAgaXRlbXNcbiAgfSksXG4gIGVuYWJsZVJlY29tbWVuZGF0aW9uUGFuZWw6ICgpID0+ICh7XG4gICAgdHlwZTogdHlwZS5DSEFOR0VfUkVDT01NRU5EQVRJT05fUEFORUwsXG4gICAgZW5hYmxlZDogdHJ1ZVxuICB9KSxcbiAgZGlzYWJsZVJlY29tbWVuZGF0aW9uUGFuZWw6ICgpID0+ICh7XG4gICAgdHlwZTogdHlwZS5DSEFOR0VfUkVDT01NRU5EQVRJT05fUEFORUwsXG4gICAgZW5hYmxlZDogZmFsc2VcbiAgfSksXG4gIHRvZ2dsZVJlY29tbWVuZGF0aW9uUGFuZWw6ICgpID0+ICh7XG4gICAgdHlwZTogdHlwZS5UT0dHTEVfUkVDT01NRU5EQVRJT05fUEFORUxcbiAgfSksXG4gIG9wZW5QYW5lbDogcGFuZWwgPT4gKHtcbiAgICB0eXBlOiB0eXBlLk9QRU5fUEFORUwsXG4gICAgcGFuZWxcbiAgfSksXG4gIGhpZGVQYW5lbDogKCkgPT4gKHtcbiAgICB0eXBlOiB0eXBlLkhJREVfUEFORUxcbiAgfSksXG4gIG9mZmVyQXV0b3BsYXk6IHN0YXRlID0+ICh7XG4gICAgdHlwZTogdHlwZS5PRkZFUl9BVVRPUExBWSxcbiAgICBlbmRTdGF0ZTogc3RhdGVcbiAgfSksXG4gIGRpc21pc3NBdXRvcGxheTogKCkgPT4gKHtcbiAgICB0eXBlOiB0eXBlLkRJU01JU1NfQVVUT1BMQVlcbiAgfSksXG4gIHN0cmVhbUV2ZW50c0NoYW5nZWQ6IChzdHJlYW1FdmVudHMsIHBsYXliYWNrU3RhdHVzKSA9PiAoe1xuICAgIHR5cGU6IHR5cGUuU1RSRUFNX0VWRU5UU19DSEFOR0VELFxuICAgIHN0cmVhbUV2ZW50cyxcbiAgICBwbGF5YmFja1N0YXR1c1xuICB9KSxcbiAgYWRCcmVha1N0YXJ0ZWQ6IChhZFByb2dyZXNzRGF0YSwgc2tpcFRpbWVPZmZzZXQpID0+ICh7XG4gICAgdHlwZTogdHlwZS5BRF9CUkVBS19TVEFSVEVELFxuICAgIGFkUHJvZ3Jlc3NEYXRhLFxuICAgIHNraXBUaW1lT2Zmc2V0XG4gIH0pLFxuICBhZEJyZWFrRW5kZWQ6ICgpID0+ICh7XG4gICAgdHlwZTogdHlwZS5BRF9CUkVBS19FTkRFRFxuICB9KSxcbiAgcGxheWJhY2tFbmQ6ICgpID0+ICh7XG4gICAgdHlwZTogdHlwZS5QTEFZQkFDS19FTkRcbiAgfSlcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3Byb3AtdHlwZXMgKi9cblxuY29uc3QgbGlua0FkU3RhdGUgPSAoe1xuICBjb250ZW50VHlwZSxcbiAgZGlzcGF0Y2gsXG4gIHBsdWdpbnMsXG4gIG9uQWRTa2lwXG59KSA9PiB7XG4gIGNvbnN0IGhhbmRsZVN0YXJ0ID0gZXZlbnQgPT4ge1xuICAgIHZhciBfZXZlbnQkZ2V0QWQ7XG5cbiAgICAvLyBUT0RPIHBsYXlsb2cgYWQgc3RhcnQgZXZlbnRcbiAgICBkaXNwYXRjaCh1aUFjdGlvbnMuYWRCcmVha1N0YXJ0ZWQoZXZlbnQuZ2V0U3RyZWFtRGF0YSgpLmFkUHJvZ3Jlc3NEYXRhLCBjb250ZW50VHlwZSAhPT0gJ2xpdmVzJyAmJiAoKF9ldmVudCRnZXRBZCA9IGV2ZW50LmdldEFkKCkpID09PSBudWxsIHx8IF9ldmVudCRnZXRBZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V2ZW50JGdldEFkLmdldFNraXBUaW1lT2Zmc2V0KCkpKSk7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmtQbHVnaW5FdmVudHMocGx1Z2lucywge1xuICAgIGN1ZXBvaW50c0NoYW5nZWQ6IChldmVudCwgcGx1Z2luKSA9PiBkaXNwYXRjaCh1aUFjdGlvbnMuc3RyZWFtRXZlbnRzQ2hhbmdlZChldmVudC5jdWVwb2ludHMsIHBsdWdpbi5nZXRQbGF5YmFja1N0YXR1cygpKSksXG4gICAgYWRCcmVha1N0YXJ0ZWQ6IGhhbmRsZVN0YXJ0LFxuICAgIGFkQnJlYWtFbmRlZDogKCkgPT4ge1xuICAgICAgLy8gVE9ETyBwbGF5bG9nIGFkIGVuZCBldmVudFxuICAgICAgZGlzcGF0Y2godWlBY3Rpb25zLmFkQnJlYWtFbmRlZCgpKTtcbiAgICB9LFxuICAgIHNraXA6IG9uQWRTa2lwXG4gIH0pO1xufTtcblxuY29uc3QgdXNlSW50ZXJ2YWxVcGRhdGUgPSBnZXQgPT4ge1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKGdldCgpKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4gc2V0VmFsdWUoZ2V0KCkpLCA1MDApO1xuICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICB9LCBbXSk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmNvbnN0IFNraXBBZEJ1dHRvbiA9ICh7XG4gIHNraXBBZCxcbiAgZ2V0V2FpdFRpbWVcbn0pID0+IHtcbiAgY29uc3Qgd2FpdFRpbWUgPSB1c2VJbnRlcnZhbFVwZGF0ZShnZXRXYWl0VGltZSk7XG4gIHJldHVybiBpc0xpdmVEdXJhdGlvbih3YWl0VGltZSkgJiYgLyojX19QVVJFX18qL2pzeChTa2lwQnV0dG9uLCB7XG4gICAgd2FpdFRpbWU6IHdhaXRUaW1lLFxuICAgIG9uQ2xpY2s6IHNraXBBZFxuICB9KTtcbn07XG5cbmNvbnN0IFN0YXR1cyA9ICh7XG4gIHRvdGFsLFxuICBwb3NpdGlvbixcbiAgZ2V0UmVtYWluaW5nVGltZVxufSkgPT4ge1xuICBjb25zdCByZW1haW5pbmdUaW1lID0gdXNlSW50ZXJ2YWxVcGRhdGUoZ2V0UmVtYWluaW5nVGltZSk7XG4gIHJldHVybiB0b3RhbCA+IDAgJiYgYEFkICR7cG9zaXRpb259IG9mICR7dG90YWx944O7JHtmb3JtYXR0ZWRUaW1lKHJlbWFpbmluZ1RpbWUpfWA7XG59O1xuXG5jb25zdCBnZXRBZFVpID0gKHtcbiAgcG9zaXRpb24sXG4gIHRvdGFsLFxuICBhZEJyZWFrRHVyYXRpb24sXG4gIHNraXBUaW1lT2Zmc2V0LFxuICBjbGlja1Rocm91Z2hVcmxcbn0sIHBsdWdpbnMsIG1lZGlhKSA9PiB7XG4gIGNvbnN0IGdldFJlbWFpbmluZ1RpbWUgPSAoKSA9PiBnZXRNZWRpYVRpbWUobWVkaWEsIHBsdWdpbnMpLmFkUmVtYWluaW5nVGltZTtcblxuICBjb25zdCBnZXRTa2lwV2FpdFRpbWUgPSAoKSA9PiBza2lwVGltZU9mZnNldCA+PSAwID8gZ2V0UmVtYWluaW5nVGltZSgpIC0gKGFkQnJlYWtEdXJhdGlvbiAtIHNraXBUaW1lT2Zmc2V0KSA6IEluZmluaXR5O1xuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6IGZhbHNlLFxuICAgIGNoYW5uZWxUaXRsZTogZmFsc2UsXG4gICAgY29udHJvbEJ1dHRvbnM6IHtcbiAgICAgIHJld2luZEJ1dHRvbjogZmFsc2UsXG4gICAgICBmb3J3YXJkQnV0dG9uOiBmYWxzZSxcbiAgICAgIG5leHRFcGlzb2RlQnV0dG9uOiBmYWxzZSxcbiAgICAgIHByZXZpb3VzRXBpc29kZUJ1dHRvbjogZmFsc2VcbiAgICB9LFxuICAgIHNlZWtiYXI6IGZhbHNlLFxuICAgIGFkTGluazogY2xpY2tUaHJvdWdoVXJsICYmIC8qI19fUFVSRV9fKi9qc3goXCJhXCIsIHtcbiAgICAgIGhyZWY6IGNsaWNrVGhyb3VnaFVybCxcbiAgICAgIHJlbDogXCJub3JlZmVycmVyXCIsXG4gICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL2pzeChGb3JtYXR0ZWRNZXNzYWdlLCB7XG4gICAgICAgIGlkOiBcIktLUy5TU0FJLkxFQVJOLk1PUkVcIlxuICAgICAgfSlcbiAgICB9KSxcbiAgICBhZFN0YXR1czogLyojX19QVVJFX18qL2pzeChTdGF0dXMsIHtcbiAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgIHRvdGFsOiB0b3RhbCxcbiAgICAgIGdldFJlbWFpbmluZ1RpbWU6IGdldFJlbWFpbmluZ1RpbWVcbiAgICB9KSxcbiAgICBhZFNraXBCdXR0b246IC8qI19fUFVSRV9fKi9qc3goU2tpcEFkQnV0dG9uLCB7XG4gICAgICBnZXRXYWl0VGltZTogZ2V0U2tpcFdhaXRUaW1lLFxuICAgICAgc2tpcEFkOiAoKSA9PiBwbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgICAgdmFyIF9wbHVnaW4kc2tpcEFkO1xuXG4gICAgICAgIHJldHVybiAoX3BsdWdpbiRza2lwQWQgPSBwbHVnaW4uc2tpcEFkKSA9PT0gbnVsbCB8fCBfcGx1Z2luJHNraXBBZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BsdWdpbiRza2lwQWQuY2FsbChwbHVnaW4pO1xuICAgICAgfSlcbiAgICB9KVxuICB9O1xufTtcblxuY29uc3QgbG9hZFNjcmlwdCA9IHVybCA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgY29uc3Qgc2NyaXB0ID0gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwge1xuICAgIGFzeW5jOiB0cnVlLFxuICAgIHNyYzogdXJsXG4gIH0pO1xuICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlc29sdmUpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG59KTtcblxuY29uc3QgU0VOREVSX1VSTCA9ICdodHRwczovL3d3dy5nc3RhdGljLmNvbS9jdi9qcy9zZW5kZXIvdjEvY2FzdF9zZW5kZXIuanM/bG9hZENhc3RGcmFtZXdvcms9MSc7XG5cbmNvbnN0IGdldENvbnRleHQgPSAoKSA9PiBjYXN0LmZyYW1ld29yay5DYXN0Q29udGV4dC5nZXRJbnN0YW5jZSgpO1xuXG5sZXQgbG9hZFNlbmRlckZyYW1ld29yaztcbi8qIGdsb2JhbCBjaHJvbWUsIGNhc3QgKi9cblxuY29uc3QgZW5zdXJlU2VuZGVyRnJhbWV3b3JrID0gKCkgPT4ge1xuICBpZiAod2luZG93LmNhc3QgJiYgY2FzdC5mcmFtZXdvcmsgJiYgd2luZG93LmNocm9tZSAmJiBjaHJvbWUuY2FzdCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZ2V0Q29udGV4dCgpKTtcbiAgfVxuXG4gIGlmICghbG9hZFNlbmRlckZyYW1ld29yaykge1xuICAgIGxvYWRTZW5kZXJGcmFtZXdvcmsgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICAgIHdpbmRvdy5fX29uR0Nhc3RBcGlBdmFpbGFibGUgPSBpc0F2YWlsYWJsZSA9PiB7XG4gICAgICAgIGlmIChpc0F2YWlsYWJsZSkge1xuICAgICAgICAgIHJlc29sdmUoZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgbG9hZFNjcmlwdChTRU5ERVJfVVJMKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsb2FkU2VuZGVyRnJhbWV3b3JrO1xufTtcblxuY29uc3QgZ2V0TWVkaWFTZXNzaW9uID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gZ2V0Q29udGV4dCgpO1xuICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IGNvbnRleHQuZ2V0Q3VycmVudFNlc3Npb24oKTtcbiAgcmV0dXJuIGN1cnJlbnRTZXNzaW9uICYmIGN1cnJlbnRTZXNzaW9uLmdldE1lZGlhU2Vzc2lvbigpO1xufTtcblxuY29uc3Qgc2V0dXBDYXN0ID0gYXN5bmMgKHtcbiAgYXBwSWRcbn0pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IGF3YWl0IGVuc3VyZVNlbmRlckZyYW1ld29yaygpO1xuXG4gIGlmIChhcHBJZCkge1xuICAgIGNvbnRleHQuc2V0T3B0aW9ucyh7XG4gICAgICByZWNlaXZlckFwcGxpY2F0aW9uSWQ6IGFwcElkLFxuICAgICAgcmVzdW1lU2F2ZWRTZXNzaW9uOiB0cnVlLFxuICAgICAgYXV0b0pvaW5Qb2xpY3k6IGNocm9tZS5jYXN0LkF1dG9Kb2luUG9saWN5Lk9SSUdJTl9TQ09QRURcbiAgICB9KTtcbiAgfVxufTtcblxuY29uc3QgY29ubmVjdCA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IGdldENvbnRleHQoKTtcbiAgY29uc3QgY3VycmVudFNlc3Npb24gPSBjb250ZXh0LmdldEN1cnJlbnRTZXNzaW9uKCk7XG5cbiAgaWYgKGN1cnJlbnRTZXNzaW9uKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjdXJyZW50U2Vzc2lvbik7XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5yZXF1ZXN0U2Vzc2lvbigpLnRoZW4oKCkgPT4gY29udGV4dC5nZXRDdXJyZW50U2Vzc2lvbigpKTtcbn07XG5cbmNvbnN0IGRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7XG4gIGNvbnRleHQuZW5kQ3VycmVudFNlc3Npb24odHJ1ZSk7XG59O1xuXG5jb25zdCBsb2FkTWVkaWEgPSAoe1xuICBjb250ZW50VHlwZSxcbiAgY29udGVudElkLFxuICBjdXJyZW50VGltZSxcbiAgYXBpQ29uZmlnXG59KSA9PiB7XG4gIHZhciBfc2Vzc2lvbiRnZXRNZWRpYVNlc3M7XG5cbiAgY29uc3QgcmVxdWVzdCA9IG5ldyBjaHJvbWUuY2FzdC5tZWRpYS5Mb2FkUmVxdWVzdChPYmplY3QuYXNzaWduKG5ldyBjaHJvbWUuY2FzdC5tZWRpYS5NZWRpYUluZm8oY29udGVudElkKSwge1xuICAgIGNvbnRlbnRJZCxcbiAgICBjb250ZW50SUQ6IGNvbnRlbnRJZCxcbiAgICAvLyBpdGVtVHlwZTogY29udGVudFR5cGUsIG1lZGlhU291cmNlLCBjdXN0b21RdWVyeTogZGF0YS5wYXJhbXMsIGxpY2Vuc2VJZCA/XG4gICAgY3VzdG9tRGF0YToge1xuICAgICAgaXRlbVR5cGU6IGNvbnRlbnRUeXBlLFxuICAgICAgLi4uYXBpQ29uZmlnLFxuICAgICAgY3VzdG9tSGVhZGVyczogYXBpQ29uZmlnLmhlYWRlcnMsXG4gICAgICBjdXN0b21RdWVyeTogYXBpQ29uZmlnLnBhcmFtc1xuICAgIH0sXG4gICAgbWV0YWRhdGE6IG5ldyBjaHJvbWUuY2FzdC5tZWRpYS5HZW5lcmljTWVkaWFNZXRhZGF0YSgpXG4gIH0pKTtcblxuICBpZiAodHlwZW9mIGN1cnJlbnRUaW1lID09PSAnbnVtYmVyJykge1xuICAgIHJlcXVlc3QuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb24gPSBnZXRDb250ZXh0KCkuZ2V0Q3VycmVudFNlc3Npb24oKTtcbiAgY29uc3QgY3VycmVudE1lZGlhID0gKChfc2Vzc2lvbiRnZXRNZWRpYVNlc3MgPSBzZXNzaW9uLmdldE1lZGlhU2Vzc2lvbigpKSA9PT0gbnVsbCB8fCBfc2Vzc2lvbiRnZXRNZWRpYVNlc3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zZXNzaW9uJGdldE1lZGlhU2Vzcy5tZWRpYSkgfHwge307IC8vIG5vIG5lZWQgdG8gbG9hZCBpZiBhbHJlYWR5IHBsYXlpbmcgVE9ETyBleHRyYWNrIGNoZWNraW5nXG5cbiAgaWYgKGNvbnRlbnRJZCA9PT0gY3VycmVudE1lZGlhLmNvbnRlbnRJZCAmJiBjb250ZW50VHlwZSA9PT0gY3VycmVudE1lZGlhLmN1c3RvbURhdGEuaXRlbVR5cGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gc2Vzc2lvbi5sb2FkTWVkaWEocmVxdWVzdCk7XG59O1xuXG5jb25zdCBzdWJzY3JpYmVDYXN0U3RhdGUgPSBoYW5kbGVTdGF0ZUNoYW5nZSA9PiB7XG4gIGNvbnN0IG5hbWUgPSBjYXN0LmZyYW1ld29yay5DYXN0Q29udGV4dEV2ZW50VHlwZS5DQVNUX1NUQVRFX0NIQU5HRUQ7XG4gIGNvbnN0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7XG5cbiAgY29uc3Qgb25DaGFuZ2UgPSAoe1xuICAgIGNhc3RTdGF0ZVxuICB9KSA9PiBoYW5kbGVTdGF0ZUNoYW5nZShjYXN0U3RhdGUpO1xuXG4gIGhhbmRsZVN0YXRlQ2hhbmdlKGNvbnRleHQuZ2V0Q2FzdFN0YXRlKCkpO1xuICBjb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgb25DaGFuZ2UpO1xuICByZXR1cm4gKCkgPT4gY29udGV4dC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIG9uQ2hhbmdlKTtcbn07XG5cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmNvbnN0IGNvbm5lY3RpbmdBbmltYXRpb24gPSBrZXlmcmFtZXNgXG4gIDAlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIke2ljb24uY2FzdENvbm50ZWN0aW5nMH1cIik7XG4gIH1cbiAgMzMlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIke2ljb24uY2FzdENvbm50ZWN0aW5nMX1cIik7XG4gIH1cbiAgNjYlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIke2ljb24uY2FzdENvbm50ZWN0aW5nMn1cIik7XG4gIH1cbiAgMTAwJSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiJHtpY29uLmNhc3RDb25udGVjdGluZzB9XCIpO1xuICB9XG5gO1xuY29uc3QgaWNvbnMgPSB7XG4gIFtDYXN0U3RhdGUuTk9UX0NPTk5FQ1RFRF06ICdjYXN0Tm90Q29ubmVjdGVkJyxcbiAgW0Nhc3RTdGF0ZS5DT05ORUNUSU5HXTogJ2Nhc3RDb25udGVjdGluZzAnLFxuICBbQ2FzdFN0YXRlLkNPTk5FQ1RFRF06ICdjYXN0Q29ubmVjdGVkJ1xufTtcbmNvbnN0IGludmVydENvbG9yID0ge1xuICBmaWx0ZXI6ICdpbnZlcnQoMTAwJSknXG59O1xuY29uc3QgY29ubmVjdGluZ1N0eWxlID0ge1xuICBhbmltYXRpb246IGAke2Nvbm5lY3RpbmdBbmltYXRpb259IDNzIGluZmluaXRlYFxufTsgLy8gZGF0YToge2l0ZW1UeXBlOiBjb250ZW50VHlwZSwgbWVkaWFTb3VyY2UsIGN1c3RvbVF1ZXJ5OiBkYXRhLnBhcmFtcywgbGljZW5zZUlkID99XG5cbmNvbnN0IENhc3RCdXR0b24gPSBwcm9wcyA9PiB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoQ2FzdFN0YXRlLk5PX0RFVklDRVNfQVZBSUxBQkxFKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZXR1cCA9IGVuc3VyZVNlbmRlckZyYW1ld29yaygpLnRoZW4oKCkgPT4gc3Vic2NyaWJlQ2FzdFN0YXRlKHNldFN0YXRlKSk7XG4gICAgcmV0dXJuICgpID0+IHNldHVwID09PSBudWxsIHx8IHNldHVwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXR1cC50aGVuKHVuc3Vic2NyaWJlID0+IHVuc3Vic2NyaWJlKCkpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgdG9nZ2xlQ29ubmVjdCA9ICgpID0+IHtcbiAgICBpZiAoc3RhdGUgPT09IENhc3RTdGF0ZS5DT05ORUNURUQpIHtcbiAgICAgIGRpc2Nvbm5lY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29ubmVjdCgpO1xuICAgICAgc2V0U3RhdGUoQ2FzdFN0YXRlLkNPTk5FQ1RJTkcpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc3RhdGUgIT09IENhc3RTdGF0ZS5OT19ERVZJQ0VTX0FWQUlMQUJMRSAmJiBqc3gkMShCdXR0b24sIHtcbiAgICBzdGFydEljb246IGpzeCQxKEljb24sIHtcbiAgICAgIHR5cGU6IGljb25zW3N0YXRlXSxcbiAgICAgIGNzczogW2ludmVydENvbG9yLCBzdGF0ZSA9PT0gQ2FzdFN0YXRlLkNPTk5FQ1RJTkcgJiYgY29ubmVjdGluZ1N0eWxlLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6Q2FzdEJ1dHRvbjtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtOaGMzUkNkWFIwYjI0dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJiMFZaSWl3aVptbHNaU0k2SWtOaGMzUkNkWFIwYjI0dWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lCQWFuTjRTVzF3YjNKMFUyOTFjbU5sSUVCbGJXOTBhVzl1TDNKbFlXTjBJQ292WEc1cGJYQnZjblFnZTNWelpVVm1abVZqZEN3Z2RYTmxVM1JoZEdWOUlHWnliMjBnSjNKbFlXTjBKMXh1YVcxd2IzSjBJSHRyWlhsbWNtRnRaWE45SUdaeWIyMGdKMEJsYlc5MGFXOXVMM0psWVdOMEoxeHVYRzVwYlhCdmNuUWdhV052YmxWeWJITWdabkp2YlNBbmMzUjViR1V2YVdOdmJpZGNibWx0Y0c5eWRDQkpZMjl1SUdaeWIyMGdKM0JzWVhsbGNsVnBMMGxqYjI0blhHNXBiWEJ2Y25RZ2UwSjFkSFJ2Ym4wZ1puSnZiU0FuY0d4aGVXVnlWV2t2WW5WMGRHOXVjeWRjYm1sdGNHOXlkQ0I3WEc0Z0lHTnZibTVsWTNRc1hHNGdJR1JwYzJOdmJtNWxZM1FzWEc0Z0lITjFZbk5qY21saVpVTmhjM1JUZEdGMFpTeGNiaUFnWlc1emRYSmxVMlZ1WkdWeVJuSmhiV1YzYjNKckxGeHVmU0JtY205dElDZGpZWE4wTDJaeVlXMWxkMjl5YXlkY2JtbHRjRzl5ZENCN1EyRnpkRk4wWVhSbGZTQm1jbTl0SUNkRmJuVnRKMXh1WEc1amIyNXpkQ0JqYjI1dVpXTjBhVzVuUVc1cGJXRjBhVzl1SUQwZ2EyVjVabkpoYldWellGeHVJQ0F3SlNCN1hHNGdJQ0FnWW1GamEyZHliM1Z1WkMxcGJXRm5aVG9nZFhKc0tGd2lKSHRwWTI5dVZYSnNjeTVqWVhOMFEyOXViblJsWTNScGJtY3dmVndpS1R0Y2JpQWdmVnh1SUNBek15VWdlMXh1SUNBZ0lHSmhZMnRuY205MWJtUXRhVzFoWjJVNklIVnliQ2hjSWlSN2FXTnZibFZ5YkhNdVkyRnpkRU52Ym01MFpXTjBhVzVuTVgxY0lpazdYRzRnSUgxY2JpQWdOallsSUh0Y2JpQWdJQ0JpWVdOclozSnZkVzVrTFdsdFlXZGxPaUIxY213b1hDSWtlMmxqYjI1VmNteHpMbU5oYzNSRGIyNXVkR1ZqZEdsdVp6SjlYQ0lwTzF4dUlDQjlYRzRnSURFd01DVWdlMXh1SUNBZ0lHSmhZMnRuY205MWJtUXRhVzFoWjJVNklIVnliQ2hjSWlSN2FXTnZibFZ5YkhNdVkyRnpkRU52Ym01MFpXTjBhVzVuTUgxY0lpazdYRzRnSUgxY2JtQmNibHh1WTI5dWMzUWdhV052Ym5NZ1BTQjdYRzRnSUZ0RFlYTjBVM1JoZEdVdVRrOVVYME5QVGs1RlExUkZSRjA2SUNkallYTjBUbTkwUTI5dWJtVmpkR1ZrSnl4Y2JpQWdXME5oYzNSVGRHRjBaUzVEVDA1T1JVTlVTVTVIWFRvZ0oyTmhjM1JEYjI1dWRHVmpkR2x1WnpBbkxGeHVJQ0JiUTJGemRGTjBZWFJsTGtOUFRrNUZRMVJGUkYwNklDZGpZWE4wUTI5dWJtVmpkR1ZrSnl4Y2JuMWNibHh1WTI5dWMzUWdhVzUyWlhKMFEyOXNiM0lnUFNCN1hHNGdJR1pwYkhSbGNqb2dKMmx1ZG1WeWRDZ3hNREFsS1Njc1hHNTlYRzVjYm1OdmJuTjBJR052Ym01bFkzUnBibWRUZEhsc1pTQTlJSHRjYmlBZ1lXNXBiV0YwYVc5dU9pQmdKSHRqYjI1dVpXTjBhVzVuUVc1cGJXRjBhVzl1ZlNBemN5QnBibVpwYm1sMFpXQXNYRzU5WEc1Y2JpOHZJR1JoZEdFNklIdHBkR1Z0Vkhsd1pUb2dZMjl1ZEdWdWRGUjVjR1VzSUcxbFpHbGhVMjkxY21ObExDQmpkWE4wYjIxUmRXVnllVG9nWkdGMFlTNXdZWEpoYlhNc0lHeHBZMlZ1YzJWSlpDQS9mVnh1WTI5dWMzUWdRMkZ6ZEVKMWRIUnZiaUE5SUhCeWIzQnpJRDArSUh0Y2JpQWdZMjl1YzNRZ1czTjBZWFJsTENCelpYUlRkR0YwWlYwZ1BTQjFjMlZUZEdGMFpTaERZWE4wVTNSaGRHVXVUazlmUkVWV1NVTkZVMTlCVmtGSlRFRkNURVVwWEc0Z0lIVnpaVVZtWm1WamRDZ29LU0E5UGlCN1hHNGdJQ0FnWTI5dWMzUWdjMlYwZFhBZ1BTQmxibk4xY21WVFpXNWtaWEpHY21GdFpYZHZjbXNvS1M1MGFHVnVLQ2dwSUQwK1hHNGdJQ0FnSUNCemRXSnpZM0pwWW1WRFlYTjBVM1JoZEdVb2MyVjBVM1JoZEdVcFhHNGdJQ0FnS1Z4dUlDQWdJSEpsZEhWeWJpQW9LU0E5UGlCelpYUjFjRDh1ZEdobGJpaDFibk4xWW5OamNtbGlaU0E5UGlCMWJuTjFZbk5qY21saVpTZ3BLVnh1SUNCOUxDQmJYU2xjYmlBZ1kyOXVjM1FnZEc5bloyeGxRMjl1Ym1WamRDQTlJQ2dwSUQwK0lIdGNiaUFnSUNCcFppQW9jM1JoZEdVZ1BUMDlJRU5oYzNSVGRHRjBaUzVEVDA1T1JVTlVSVVFwSUh0Y2JpQWdJQ0FnSUdScGMyTnZibTVsWTNRb0tWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JqYjI1dVpXTjBLQ2xjYmlBZ0lDQWdJSE5sZEZOMFlYUmxLRU5oYzNSVGRHRjBaUzVEVDA1T1JVTlVTVTVIS1Z4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdjM1JoZEdVZ0lUMDlJRU5oYzNSVGRHRjBaUzVPVDE5RVJWWkpRMFZUWDBGV1FVbE1RVUpNUlNBbUppQW9YRzRnSUNBZ0lDQThRblYwZEc5dVhHNGdJQ0FnSUNBZ0lITjBZWEowU1dOdmJqMTdYRzRnSUNBZ0lDQWdJQ0FnUEVsamIyNWNiaUFnSUNBZ0lDQWdJQ0FnSUhSNWNHVTllMmxqYjI1elczTjBZWFJsWFgxY2JpQWdJQ0FnSUNBZ0lDQWdJR056Y3oxN1cxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJuWmxjblJEYjJ4dmNpeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2MzUmhkR1VnUFQwOUlFTmhjM1JUZEdGMFpTNURUMDVPUlVOVVNVNUhJQ1ltSUdOdmJtNWxZM1JwYm1kVGRIbHNaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lGMTlYRzRnSUNBZ0lDQWdJQ0FnTHo1Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnZia05zYVdOclBYdDBiMmRuYkdWRGIyNXVaV04wZlZ4dUlDQWdJQ0FnSUNCN0xpNHVjSEp2Y0hOOVhHNGdJQ0FnSUNBdlBseHVJQ0FnSUNsY2JpQWdLVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCRFlYTjBRblYwZEc5dVhHNGlYWDA9ICovXCJdXG4gICAgfSksXG4gICAgb25DbGljazogdG9nZ2xlQ29ubmVjdCxcbiAgICAuLi5wcm9wc1xuICB9KTtcbn07XG5cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmNvbnN0IHNpemVzJDEgPSB7XG4gIG5vcm1hbDoge1xuICAgIGJvdHRvbTogJzFyZW0nLFxuICAgIHBhZGRpbmc6ICcwLjVyZW0nLFxuICAgIHdpZHRoOiAnMTguNXJlbScsXG4gICAgaGVpZ2h0OiAnNS4yNXJlbScsXG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICAnLS1zcGFjaW5nJzogJzByZW0nXG4gIH0sXG4gIGJpZzoge1xuICAgIGJvdHRvbTogJzVyZW0nLFxuICAgIHBhZGRpbmc6ICcwLjc1cmVtJyxcbiAgICB3aWR0aDogJzMycmVtJyxcbiAgICBoZWlnaHQ6ICcxMHJlbScsXG4gICAgZm9udFNpemU6ICcyMHB4JyxcbiAgICAnLS1zcGFjaW5nJzogJzAuNXJlbSdcbiAgfVxufTtcbmNvbnN0IHN0eWxlJDQgPSB7XG4gIGNvbnRhaW5lcjoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogJy0xJyxcbiAgICByaWdodDogJzEwMHZ3JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjAsIDIwLCAyMCwgMC44KScsXG4gICAgb3BhY2l0eTogJzAnLFxuICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDFzIGVhc2UnLFxuICAgICdidXR0b246Zm9jdXMnOiB7XG4gICAgICBvdXRsaW5lOiAnbm9uZSdcbiAgICB9XG4gIH0sXG4gIG9wZW5pbmc6IHtcbiAgICB6SW5kZXg6ICdpbmhlcml0JyxcbiAgICByaWdodDogJzAnLFxuICAgIG9wYWNpdHk6ICcxJ1xuICB9LFxuICBjb3ZlcjogaW1hZ2VVcmwgPT4gKHtcbiAgICBmbGV4OiAnMCA0MCUnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgYmFja2dyb3VuZDogYFxuICAgICAgY2VudGVyIC8gMzMlIG5vLXJlcGVhdCB1cmwoJHtpY29uLnBsYXlDaXJjbGVCb3JkZXJ9KSxcbiAgICAgICR7aW1hZ2VVcmwgPyBgY2VudGVyIC8gY292ZXIgdXJsKCR7aW1hZ2VVcmx9KSxgIDogJyd9IFxuICAgICAgI2NjY1xuICAgIGBcbiAgfSksXG4gIGluZm86IHtcbiAgICBtYXJnaW5MZWZ0OiAnMC41cmVtJyxcbiAgICBmbGV4OiAnMSdcbiAgfSxcbiAgbWVzc2FnZToge1xuICAgIG1hcmdpbkJvdHRvbTogWycxcmVtJywgJ3ZhcigtLXNwYWNpbmcpJ10sXG4gICAgZGlzcGxheTogJ2ZsZXgnXG4gIH0sXG4gIGRpc21pc3M6IHtcbiAgICBtYXJnaW5MZWZ0OiAnYXV0bycsXG4gICAgd2lkdGg6IFsnMnJlbScsICdjYWxjKDEuNXJlbSArIHZhcigtLXNwYWNpbmcpKSddLFxuICAgIGhlaWdodDogWycycmVtJywgJ2NhbGMoMS41cmVtICsgdmFyKC0tc3BhY2luZykpJ10sXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZDogYGNlbnRlciAvIDFyZW0gbm8tcmVwZWF0IHVybCgke2ljb24uY2xvc2V9KSwgdHJhbnNwYXJlbnRgXG4gIH1cbn07XG5cbmNvbnN0IFBsYXlEaWFsb2cgPSAoe1xuICBvcGVuaW5nLFxuICBjb3ZlckltYWdlVXJsLFxuICBtZXNzYWdlLFxuICB0aXRsZSxcbiAgcGxheSxcbiAgZGlzbWlzcyxcbiAgLi4ucmVzdFxufSkgPT4ge1xuICBjb25zdCB7XG4gICAgb2JzZXJ2ZSxcbiAgICBjdXJyZW50QnJlYWtwb2ludDogc2l6ZVxuICB9ID0gdXNlRGltZW5zaW9ucyh7XG4gICAgcG9seWZpbGw6IFJlc2l6ZU9ic2VydmVyLFxuICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICBub3JtYWw6IDAsXG4gICAgICBiaWc6IDYwMFxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9ic2VydmUoY29udGFpbmVyUmVmLmN1cnJlbnQucGFyZW50RWxlbWVudCk7XG4gIH0pO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY3NzOiBbc3R5bGUkNC5jb250YWluZXIsIHNpemVzJDFbc2l6ZV0sIG9wZW5pbmcgJiYgc3R5bGUkNC5vcGVuaW5nLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6UGxheURpYWxvZztcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtWd2FYTnZaR1ZEWVhKa0xtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVGhHVFNJc0ltWnBiR1VpT2lKRmNHbHpiMlJsUTJGeVpDNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUlFQnFjM2hKYlhCdmNuUlRiM1Z5WTJVZ1FHVnRiM1JwYjI0dmNtVmhZM1FnS2k5Y2JtbHRjRzl5ZENCN2RYTmxSV1ptWldOMExDQjFjMlZTWldaOUlHWnliMjBnSjNKbFlXTjBKMXh1YVcxd2IzSjBJRkJ5YjNCVWVYQmxjeUJtY205dElDZHdjbTl3TFhSNWNHVnpKMXh1YVcxd2IzSjBJSHRTWlhOcGVtVlBZbk5sY25abGNuMGdabkp2YlNBblFHcDFaMmRzWlM5eVpYTnBlbVV0YjJKelpYSjJaWEluWEc1cGJYQnZjblFnZFhObFJHbHRaVzV6YVc5dWN5Qm1jbTl0SUNkeVpXRmpkQzFqYjI5c0xXUnBiV1Z1YzJsdmJuTW5YRzVjYm1sdGNHOXlkQ0JwWTI5dUlHWnliMjBnSjNOMGVXeGxMMmxqYjI0blhHNWNibU52Ym5OMElITnBlbVZ6SUQwZ2UxeHVJQ0J1YjNKdFlXdzZJSHRjYmlBZ0lDQmliM1IwYjIwNklDY3hjbVZ0Snl4Y2JpQWdJQ0J3WVdSa2FXNW5PaUFuTUM0MWNtVnRKeXhjYmlBZ0lDQjNhV1IwYURvZ0p6RTRMalZ5WlcwbkxGeHVJQ0FnSUdobGFXZG9kRG9nSnpVdU1qVnlaVzBuTEZ4dUlDQWdJR1p2Ym5SVGFYcGxPaUFuTVRKd2VDY3NYRzRnSUNBZ0p5MHRjM0JoWTJsdVp5YzZJQ2N3Y21WdEp5eGNiaUFnZlN4Y2JpQWdZbWxuT2lCN1hHNGdJQ0FnWW05MGRHOXRPaUFuTlhKbGJTY3NYRzRnSUNBZ2NHRmtaR2x1WnpvZ0p6QXVOelZ5WlcwbkxGeHVJQ0FnSUhkcFpIUm9PaUFuTXpKeVpXMG5MRnh1SUNBZ0lHaGxhV2RvZERvZ0p6RXdjbVZ0Snl4Y2JpQWdJQ0JtYjI1MFUybDZaVG9nSnpJd2NIZ25MRnh1SUNBZ0lDY3RMWE53WVdOcGJtY25PaUFuTUM0MWNtVnRKeXhjYmlBZ2ZTeGNibjFjYmx4dVkyOXVjM1FnYzNSNWJHVWdQU0I3WEc0Z0lHTnZiblJoYVc1bGNqb2dlMXh1SUNBZ0lIQnZjMmwwYVc5dU9pQW5ZV0p6YjJ4MWRHVW5MRnh1SUNBZ0lIcEpibVJsZURvZ0p5MHhKeXhjYmlBZ0lDQnlhV2RvZERvZ0p6RXdNSFozSnl4Y2JpQWdJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUNBZ1ltOXlaR1Z5VW1Ga2FYVnpPaUFuTkhCNEp5eGNiaUFnSUNCamIyeHZjam9nSnlObVptWW5MRnh1SUNBZ0lHSmhZMnRuY205MWJtUkRiMnh2Y2pvZ0ozSm5ZbUVvTWpBc0lESXdMQ0F5TUN3Z01DNDRLU2NzWEc0Z0lDQWdiM0JoWTJsMGVUb2dKekFuTEZ4dUlDQWdJSFJ5WVc1emFYUnBiMjQ2SUNkdmNHRmphWFI1SURGeklHVmhjMlVuTEZ4dUlDQWdJQ2RpZFhSMGIyNDZabTlqZFhNbk9pQjdYRzRnSUNBZ0lDQnZkWFJzYVc1bE9pQW5ibTl1WlNjc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYmlBZ2IzQmxibWx1WnpvZ2UxeHVJQ0FnSUhwSmJtUmxlRG9nSjJsdWFHVnlhWFFuTEZ4dUlDQWdJSEpwWjJoME9pQW5NQ2NzWEc0Z0lDQWdiM0JoWTJsMGVUb2dKekVuTEZ4dUlDQjlMRnh1SUNCamIzWmxjam9nYVcxaFoyVlZjbXdnUFQ0Z0tIdGNiaUFnSUNCbWJHVjRPaUFuTUNBME1DVW5MRnh1SUNBZ0lHSnZjbVJsY2pvZ0oyNXZibVVuTEZ4dUlDQWdJR0p2Y21SbGNsSmhaR2wxY3pvZ0p6UndlQ2NzWEc0Z0lDQWdZbUZqYTJkeWIzVnVaRG9nWUZ4dUlDQWdJQ0FnWTJWdWRHVnlJQzhnTXpNbElHNXZMWEpsY0dWaGRDQjFjbXdvSkh0cFkyOXVMbkJzWVhsRGFYSmpiR1ZDYjNKa1pYSjlLU3hjYmlBZ0lDQWdJQ1I3YVcxaFoyVlZjbXdnUHlCZ1kyVnVkR1Z5SUM4Z1kyOTJaWElnZFhKc0tDUjdhVzFoWjJWVmNteDlLU3hnSURvZ0p5ZDlJRnh1SUNBZ0lDQWdJMk5qWTF4dUlDQWdJR0FzWEc0Z0lIMHBMRnh1SUNCcGJtWnZPaUI3WEc0Z0lDQWdiV0Z5WjJsdVRHVm1kRG9nSnpBdU5YSmxiU2NzWEc0Z0lDQWdabXhsZURvZ0p6RW5MRnh1SUNCOUxGeHVJQ0J0WlhOellXZGxPaUI3WEc0Z0lDQWdiV0Z5WjJsdVFtOTBkRzl0T2lCYkp6RnlaVzBuTENBbmRtRnlLQzB0YzNCaFkybHVaeWtuWFN4Y2JpQWdJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUgwc1hHNGdJR1JwYzIxcGMzTTZJSHRjYmlBZ0lDQnRZWEpuYVc1TVpXWjBPaUFuWVhWMGJ5Y3NYRzRnSUNBZ2QybGtkR2c2SUZzbk1uSmxiU2NzSUNkallXeGpLREV1TlhKbGJTQXJJSFpoY2lndExYTndZV05wYm1jcEtTZGRMRnh1SUNBZ0lHaGxhV2RvZERvZ1d5Y3ljbVZ0Snl3Z0oyTmhiR01vTVM0MWNtVnRJQ3NnZG1GeUtDMHRjM0JoWTJsdVp5a3BKMTBzWEc0Z0lDQWdZbTl5WkdWeU9pQW5ibTl1WlNjc1hHNGdJQ0FnWW1GamEyZHliM1Z1WkRvZ1lHTmxiblJsY2lBdklERnlaVzBnYm04dGNtVndaV0YwSUhWeWJDZ2tlMmxqYjI0dVkyeHZjMlY5S1N3Z2RISmhibk53WVhKbGJuUmdMRnh1SUNCOUxGeHVmVnh1WEc1amIyNXpkQ0JRYkdGNVJHbGhiRzluSUQwZ0tIdGNiaUFnYjNCbGJtbHVaeXhjYmlBZ1kyOTJaWEpKYldGblpWVnliQ3hjYmlBZ2JXVnpjMkZuWlN4Y2JpQWdkR2wwYkdVc1hHNGdJSEJzWVhrc1hHNGdJR1JwYzIxcGMzTXNYRzRnSUM0dUxuSmxjM1JjYm4wcElEMCtJSHRjYmlBZ1kyOXVjM1FnZTI5aWMyVnlkbVVzSUdOMWNuSmxiblJDY21WaGEzQnZhVzUwT2lCemFYcGxmU0E5SUhWelpVUnBiV1Z1YzJsdmJuTW9lMXh1SUNBZ0lIQnZiSGxtYVd4c09pQlNaWE5wZW1WUFluTmxjblpsY2l4Y2JpQWdJQ0JpY21WaGEzQnZhVzUwY3pvZ2UyNXZjbTFoYkRvZ01Dd2dZbWxuT2lBMk1EQjlMRnh1SUNCOUtWeHVJQ0JqYjI1emRDQmpiMjUwWVdsdVpYSlNaV1lnUFNCMWMyVlNaV1lvS1Z4dUlDQjFjMlZGWm1abFkzUW9LQ2tnUFQ0Z2UxeHVJQ0FnSUc5aWMyVnlkbVVvWTI5dWRHRnBibVZ5VW1WbUxtTjFjbkpsYm5RdWNHRnlaVzUwUld4bGJXVnVkQ2xjYmlBZ2ZTbGNibHh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHhrYVhaY2JpQWdJQ0FnSUdOemN6MTdXM04wZVd4bExtTnZiblJoYVc1bGNpd2djMmw2WlhOYmMybDZaVjBzSUc5d1pXNXBibWNnSmlZZ2MzUjViR1V1YjNCbGJtbHVaMTE5WEc0Z0lDQWdJQ0J5WldZOWUyTnZiblJoYVc1bGNsSmxabjFjYmlBZ0lDQWdJSHN1TGk1eVpYTjBmVnh1SUNBZ0lENWNiaUFnSUNBZ0lEeGlkWFIwYjI1Y2JpQWdJQ0FnSUNBZ2RIbHdaVDFjSW1KMWRIUnZibHdpWEc0Z0lDQWdJQ0FnSUdGeWFXRXRiR0ZpWld3OVhDSlFiR0Y1SUc1bGVIUmNJbHh1SUNBZ0lDQWdJQ0JqYzNNOWUzTjBlV3hsTG1OdmRtVnlLR052ZG1WeVNXMWhaMlZWY213cGZWeHVJQ0FnSUNBZ0lDQnZia05zYVdOclBYdHdiR0Y1ZlZ4dUlDQWdJQ0FnTHo1Y2JpQWdJQ0FnSUR4a2FYWWdZM056UFh0emRIbHNaUzVwYm1admZUNWNiaUFnSUNBZ0lDQWdQR1JwZGlCamMzTTllM04wZVd4bExtMWxjM05oWjJWOVBseHVJQ0FnSUNBZ0lDQWdJSHR0WlhOellXZGxmVnh1SUNBZ0lDQWdJQ0FnSUR4aWRYUjBiMjVjYmlBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1U5WENKaWRYUjBiMjVjSWx4dUlDQWdJQ0FnSUNBZ0lDQWdZWEpwWVMxc1lXSmxiRDFjSWtScGMyMXBjM05jSWx4dUlDQWdJQ0FnSUNBZ0lDQWdZM056UFh0emRIbHNaUzVrYVhOdGFYTnpmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2IyNURiR2xqYXoxN1pHbHpiV2x6YzMxY2JpQWdJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lDQWdlM1JwZEd4bGZWeHVJQ0FnSUNBZ1BDOWthWFkrWEc0Z0lDQWdQQzlrYVhZK1hHNGdJQ2xjYm4xY2JsQnNZWGxFYVdGc2IyY3VjSEp2Y0ZSNWNHVnpJRDBnZTF4dUlDQnZjR1Z1YVc1bk9pQlFjbTl3Vkhsd1pYTXVZbTl2YkN4Y2JpQWdZMjkyWlhKSmJXRm5aVlZ5YkRvZ1VISnZjRlI1Y0dWekxuTjBjbWx1Wnl4Y2JpQWdiV1Z6YzJGblpUb2dVSEp2Y0ZSNWNHVnpMbTV2WkdVc1hHNGdJSFJwZEd4bE9pQlFjbTl3Vkhsd1pYTXVibTlrWlN4Y2JpQWdZMjl1ZEdGcGJtVnlVbVZtT2lCUWNtOXdWSGx3WlhNdWIySnFaV04wTEZ4dUlDQndiR0Y1T2lCUWNtOXdWSGx3WlhNdVpuVnVZeXhjYmlBZ1pHbHpiV2x6Y3pvZ1VISnZjRlI1Y0dWekxtWjFibU1zWEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElGQnNZWGxFYVdGc2IyZGNiaUpkZlE9PSAqL1wiXSxcbiAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICAuLi5yZXN0LFxuICAgIGNoaWxkcmVuOiBbanN4JDEoXCJidXR0b25cIiwge1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBcIlBsYXkgbmV4dFwiLFxuICAgICAgY3NzOiBzdHlsZSQ0LmNvdmVyKGNvdmVySW1hZ2VVcmwpLFxuICAgICAgb25DbGljazogcGxheVxuICAgIH0pLCBqc3hzKFwiZGl2XCIsIHtcbiAgICAgIGNzczogc3R5bGUkNC5pbmZvLFxuICAgICAgY2hpbGRyZW46IFtqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY3NzOiBzdHlsZSQ0Lm1lc3NhZ2UsXG4gICAgICAgIGNoaWxkcmVuOiBbbWVzc2FnZSwganN4JDEoXCJidXR0b25cIiwge1xuICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbWlzc1wiLFxuICAgICAgICAgIGNzczogc3R5bGUkNC5kaXNtaXNzLFxuICAgICAgICAgIG9uQ2xpY2s6IGRpc21pc3NcbiAgICAgICAgfSldXG4gICAgICB9KSwgdGl0bGVdXG4gICAgfSldXG4gIH0pO1xufTtcblxuUGxheURpYWxvZy5wcm9wVHlwZXMgPSB7XG4gIG9wZW5pbmc6IFByb3BUeXBlcy5ib29sLFxuICBjb3ZlckltYWdlVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBtZXNzYWdlOiBQcm9wVHlwZXMubm9kZSxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICBjb250YWluZXJSZWY6IFByb3BUeXBlcy5vYmplY3QsXG4gIHBsYXk6IFByb3BUeXBlcy5mdW5jLFxuICBkaXNtaXNzOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcHJvcC10eXBlcyAqL1xuXG5jb25zdCB1c2VDb3VudGRvd25TZWNvbmQgPSAoe1xuICB0aW1lLFxuICBlbmFibGVkLFxuICBvbkVuZFxufSkgPT4ge1xuICBjb25zdCBbdGltZUxlZnQsIHNldFRpbWVMZWZ0XSA9IHVzZVN0YXRlKCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gICAgc2V0VGltZUxlZnQodGltZSk7XG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHNldFRpbWVMZWZ0KGN1cnJlbnQgPT4gY3VycmVudCAtIDEpLCAxMDAwKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgfSwgW3RpbWUsIGVuYWJsZWRdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGltZUxlZnQgPD0gMCkge1xuICAgICAgb25FbmQgPT09IG51bGwgfHwgb25FbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRW5kKCk7XG4gICAgfVxuICB9LCBbdGltZUxlZnQgPD0gMF0pO1xuICByZXR1cm4gdGltZUxlZnQ7XG59O1xuXG5jb25zdCBBdXRvcGxheVByb21wdCA9ICh7XG4gIG5leHQsXG4gIGNoYXB0ZXJzLFxuICB2aWRlb1JlZixcbiAgcGxheWJhY2tTdGF0ZSxcbiAgZ2V0TWVkaWEsXG4gIG9uQ2hhbmdlTmV4dCxcbiAgb25PcGVuLFxuICBvbkRpc21pc3Ncbn0pID0+IHtcbiAgY29uc3QgZW5kZWQgPSBwbGF5YmFja1N0YXRlID09PSAnZW5kZWQnO1xuICBjb25zdCBbZW5kU3RhdGUsIHNldEVuZFN0YXRlXSA9IHVzZVN0YXRlKHtcbiAgICBjdXJyZW50Q2hhcHRlcjogJycsXG4gICAgZGlzbWlzc2VkQXQ6ICcnXG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZUNoYXB0ZXIgPSAoe1xuICAgIGVuZFN0YXJ0LFxuICAgIHJlc2V0XG4gIH0pID0+IHNldEVuZFN0YXRlKGN1cnJlbnQgPT4gKHtcbiAgICBjdXJyZW50Q2hhcHRlcjogZ2V0TWVkaWEoKS5jdXJyZW50VGltZSA+PSBlbmRTdGFydCA/ICdlbmRpbmcnIDogJycsXG4gICAgZGlzbWlzc2VkQXQ6IHJlc2V0ID8gJycgOiBjdXJyZW50LmRpc21pc3NlZEF0XG4gIH0pKTtcblxuICBjb25zdCBkaXNtaXNzID0gKCkgPT4gc2V0RW5kU3RhdGUoY3Vycm5ldCA9PiAoeyAuLi5jdXJybmV0LFxuICAgIGRpc21pc3NlZEF0OiBjdXJybmV0LmN1cnJlbnRDaGFwdGVyXG4gIH0pKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHZhciBfY2hhcHRlcnMkZmluZDtcblxuICAgIGNvbnN0IGVuZFN0YXJ0ID0gKChfY2hhcHRlcnMkZmluZCA9IGNoYXB0ZXJzLmZpbmQoY2hhcHRlciA9PiBjaGFwdGVyLnR5cGUgPT09ICdlbmRpbmcnKSkgPT09IG51bGwgfHwgX2NoYXB0ZXJzJGZpbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jaGFwdGVycyRmaW5kLnN0YXJ0KSB8fCBnZXRNZWRpYSgpLmR1cmF0aW9uIC0gMTA7XG4gICAgdXBkYXRlQ2hhcHRlcih7XG4gICAgICBlbmRTdGFydCxcbiAgICAgIHJlc2V0OiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIG9uKHZpZGVvUmVmLmN1cnJlbnQsICd0aW1ldXBkYXRlJywgKCkgPT4gdXBkYXRlQ2hhcHRlcih7XG4gICAgICBlbmRTdGFydFxuICAgIH0pKTtcbiAgfSwgW2NoYXB0ZXJzXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVuZGVkKSB7XG4gICAgICBzZXRFbmRTdGF0ZShjdXJyZW50ID0+ICh7IC4uLmN1cnJlbnQsXG4gICAgICAgIGN1cnJlbnRDaGFwdGVyOiAnZW5kZWQnXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdoZW4gcmVwbGF5LCBubyBuZWVkIHRvIGRpc3BsYXkgYWdhaW4gYXQgZW5kIGJlZ2luXG4gICAgICBzZXRFbmRTdGF0ZShjdXJyZW50ID0+IGN1cnJlbnQuY3VycmVudENoYXB0ZXIgPT09ICdlbmRlZCcgPyB7IC4uLmN1cnJlbnQsXG4gICAgICAgIGRpc21pc3NlZEF0OiAnZW5kaW5nJ1xuICAgICAgfSA6IGN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW2VuZGVkXSk7XG4gIGNvbnN0IG9wZW4gPSAvcGxheWluZ3xlbmRlZC8udGVzdChwbGF5YmFja1N0YXRlKSAmJiBlbmRTdGF0ZS5jdXJyZW50Q2hhcHRlciAmJiBlbmRTdGF0ZS5jdXJyZW50Q2hhcHRlciAhPT0gZW5kU3RhdGUuZGlzbWlzc2VkQXQ7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIG9uT3BlbiA9PT0gbnVsbCB8fCBvbk9wZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uT3BlbihlbmRTdGF0ZS5jdXJyZW50Q2hhcHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRGlzbWlzcyA9PT0gbnVsbCB8fCBvbkRpc21pc3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRGlzbWlzcygpO1xuICAgIH1cbiAgfSwgW29wZW5dKTtcblxuICBjb25zdCBwbGF5TmV4dCA9ICgpID0+IHtcbiAgICBzZXRFbmRTdGF0ZSh7XG4gICAgICBjdXJyZW50Q2hhcHRlcjogJycsXG4gICAgICBkaXNtaXNzZWRBdDogJydcbiAgICB9KTtcbiAgICBvbkNoYW5nZU5leHQoKTtcbiAgfTtcblxuICBjb25zdCB0aW1lTGVmdCA9IHVzZUNvdW50ZG93blNlY29uZCh7XG4gICAgdGltZTogMTAsXG4gICAgZW5hYmxlZDogb3BlbixcbiAgICBvbkVuZDogcGxheU5leHRcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovanN4KFBsYXlEaWFsb2csIHtcbiAgICBjbGFzc05hbWU6IFwicGlubmVkXCIsXG4gICAgb3BlbmluZzogISFvcGVuLFxuICAgIG1lc3NhZ2U6IC8qI19fUFVSRV9fKi9qc3goRm9ybWF0dGVkTWVzc2FnZSwge1xuICAgICAgaWQ6IFwiS0tTLkVORFJPTEwuQ09VTlRET1dOXCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgdGltZUxlZnRcbiAgICAgIH1cbiAgICB9KSxcbiAgICB0aXRsZTogbmV4dC50aXRsZSxcbiAgICBjb3ZlckltYWdlVXJsOiBuZXh0LmltYWdlX3VybCxcbiAgICBwbGF5OiBwbGF5TmV4dCxcbiAgICBkaXNtaXNzOiBkaXNtaXNzXG4gIH0pO1xufTtcblxuY29uc3Qgb3Blbkljb24gPSB7XG4gIHdpZHRoOiAnMXJlbScsXG4gIGhlaWdodDogJzFyZW0nLFxuICBtYXJnaW46ICcwIDAuNXJlbScsXG4gIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7aWNvbi5hcnJvd1RvcH0pYCxcbiAgdHJhbnNpdGlvbjogJ3RyYW5zZm9ybSAxcyBlYXNlJ1xufTtcbmNvbnN0IGNsb3NlSWNvbiA9IHsgLi4ub3Blbkljb24sXG4gIHRyYW5zZm9ybTogJ3JvdGF0ZVgoMTgwZGVnKSdcbn07XG5jb25zdCB0aXRsZVN0eWxlID0ge1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgcGFkZGluZzogJzAuNXJlbSAyLjVyZW0nLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBjb2xvcjogJyNjY2MnLFxuICBmb250U2l6ZTogJzIwcHgnLFxuICBjdXJzb3I6ICdwb2ludGVyJ1xufTtcbmNvbnN0IG1hc2tTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGxlZnQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwdmgnXG59O1xuY29uc3QgY29udGVudFN0eWxlID0ge1xuICBvdmVyZmxvdzogJ2F1dG8nXG59O1xuY29uc3QgY29udGVudEhpZGRlblN0eWxlID0ge1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdG91Y2hBY3Rpb246ICdub25lJ1xufTtcbmNvbnN0IGZvbGRlZEhlaWdodCA9ICc1cmVtJztcbmNvbnN0IHN0eWxlJDMgPSB7XG4gIGNvbnRhaW5lcjoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgdHJhbnNpdGlvbjogJ3RyYW5zZm9ybSAwLjVzIGVhc2UnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknXG4gIH0sXG4gIG9wZW46IHtcbiAgICB0cmFuc2Zvcm06IGB0cmFuc2xhdGVZKC0xMDAlKSB0cmFuc2xhdGVZKCR7Zm9sZGVkSGVpZ2h0fSlgXG4gIH1cbn07XG5cbmNvbnN0IFJlY29tbWVuZGF0aW9uUGFuZWwgPSAoe1xuICBvcGVuLFxuICBvblRvZ2dsZSxcbiAgdGl0bGUsXG4gIGNoaWxkcmVuID0gbnVsbFxufSkgPT4gY2hpbGRyZW4gJiYganN4JDEoXCJkaXZcIiwge1xuICBjc3M6IC8qI19fUFVSRV9fKi9jc3Moe1xuICAgIGhlaWdodDogZm9sZGVkSGVpZ2h0LFxuICAgIG1hcmdpblRvcDogJy0xcmVtJ1xuICB9LCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6UmVjb21tZW5kYXRpb25QYW5lbDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxKbFkyOXRiV1Z1WkdGMGFXOXVVR0Z1Wld3dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJhVVZUSWl3aVptbHNaU0k2SWxKbFkyOXRiV1Z1WkdGMGFXOXVVR0Z1Wld3dWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lCbGMyeHBiblF0WkdsellXSnNaU0JxYzNndFlURXhlUzl1YnkxemRHRjBhV010Wld4bGJXVnVkQzFwYm5SbGNtRmpkR2x2Ym5NZ0tpOWNiaTh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J1YnkxMWJuVnpaV1F0ZG1GeWMxeHVMeW9nUUdwemVFbHRjRzl5ZEZOdmRYSmpaU0JBWlcxdmRHbHZiaTl5WldGamRDQXFMMXh1YVcxd2IzSjBJRkJ5YjNCVWVYQmxjeUJtY205dElDZHdjbTl3TFhSNWNHVnpKMXh1WEc1cGJYQnZjblFnYVdOdmJpQm1jbTl0SUNkemRIbHNaUzlwWTI5dUoxeHVYRzVqYjI1emRDQnZjR1Z1U1dOdmJpQTlJSHRjYmlBZ2QybGtkR2c2SUNjeGNtVnRKeXhjYmlBZ2FHVnBaMmgwT2lBbk1YSmxiU2NzWEc0Z0lHMWhjbWRwYmpvZ0p6QWdNQzQxY21WdEp5eGNiaUFnWm05dWRGZGxhV2RvZERvZ0oySnZiR1FuTEZ4dUlDQmlZV05yWjNKdmRXNWtTVzFoWjJVNklHQjFjbXdvSkh0cFkyOXVMbUZ5Y205M1ZHOXdmU2xnTEZ4dUlDQjBjbUZ1YzJsMGFXOXVPaUFuZEhKaGJuTm1iM0p0SURGeklHVmhjMlVuTEZ4dWZWeHVYRzVqYjI1emRDQmpiRzl6WlVsamIyNGdQU0I3WEc0Z0lDNHVMbTl3Wlc1SlkyOXVMRnh1SUNCMGNtRnVjMlp2Y20wNklDZHliM1JoZEdWWUtERTRNR1JsWnlrbkxGeHVmVnh1WEc1amIyNXpkQ0IwYVhSc1pWTjBlV3hsSUQwZ2UxeHVJQ0J3YjNOcGRHbHZiam9nSjNKbGJHRjBhWFpsSnl4Y2JpQWdjR0ZrWkdsdVp6b2dKekF1TlhKbGJTQXlMalZ5WlcwbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JqYjJ4dmNqb2dKeU5qWTJNbkxGeHVJQ0JtYjI1MFUybDZaVG9nSnpJd2NIZ25MRnh1SUNCamRYSnpiM0k2SUNkd2IybHVkR1Z5Snl4Y2JuMWNibHh1WTI5dWMzUWdiV0Z6YTFOMGVXeGxJRDBnZTF4dUlDQndiM05wZEdsdmJqb2dKMkZpYzI5c2RYUmxKeXhjYmlBZ2JHVm1kRG9nTUN4Y2JpQWdZbTkwZEc5dE9pQXdMRnh1SUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNCb1pXbG5hSFE2SUNjeE1EQjJhQ2NzWEc1OVhHNWNibU52Ym5OMElHTnZiblJsYm5SVGRIbHNaU0E5SUh0Y2JpQWdiM1psY21ac2IzYzZJQ2RoZFhSdkp5eGNibjFjYmx4dVkyOXVjM1FnWTI5dWRHVnVkRWhwWkdSbGJsTjBlV3hsSUQwZ2UxeHVJQ0J2ZG1WeVpteHZkem9nSjJocFpHUmxiaWNzWEc0Z0lIQnZhVzUwWlhKRmRtVnVkSE02SUNkdWIyNWxKeXhjYmlBZ2RHOTFZMmhCWTNScGIyNDZJQ2R1YjI1bEp5eGNibjFjYmx4dVkyOXVjM1FnWm05c1pHVmtTR1ZwWjJoMElEMGdKelZ5WlcwblhHNWNibU52Ym5OMElITjBlV3hsSUQwZ2UxeHVJQ0JqYjI1MFlXbHVaWEk2SUh0Y2JpQWdJQ0J3YjNOcGRHbHZiam9nSjJGaWMyOXNkWFJsSnl4Y2JpQWdJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0FnSUhSeVlXNXphWFJwYjI0NklDZDBjbUZ1YzJadmNtMGdNQzQxY3lCbFlYTmxKeXhjYmlBZ0lDQjBjbUZ1YzJadmNtMDZJQ2QwY21GdWMyeGhkR1ZaS0RBcEp5eGNiaUFnZlN4Y2JpQWdiM0JsYmpvZ2UxeHVJQ0FnSUhSeVlXNXpabTl5YlRvZ1lIUnlZVzV6YkdGMFpWa29MVEV3TUNVcElIUnlZVzV6YkdGMFpWa29KSHRtYjJ4a1pXUklaV2xuYUhSOUtXQXNYRzRnSUgwc1hHNTlYRzVjYm1OdmJuTjBJRkpsWTI5dGJXVnVaR0YwYVc5dVVHRnVaV3dnUFNBb2UyOXdaVzRzSUc5dVZHOW5aMnhsTENCMGFYUnNaU3dnWTJocGJHUnlaVzRnUFNCdWRXeHNmU2tnUFQ1Y2JpQWdZMmhwYkdSeVpXNGdKaVlnS0Z4dUlDQWdJRHhrYVhZZ1kzTnpQWHQ3YUdWcFoyaDBPaUJtYjJ4a1pXUklaV2xuYUhRc0lHMWhjbWRwYmxSdmNEb2dKeTB4Y21WdEozMTlQbHh1SUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNCamMzTTllMXR6ZEhsc1pTNWpiMjUwWVdsdVpYSXNJRzl3Wlc0Z0ppWWdjM1I1YkdVdWIzQmxibDE5WEc0Z0lDQWdJQ0FnSUc5dVEyeHBZMnM5ZXlncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JVzl3Wlc0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUc5dVZHOW5aMnhsS0NsY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDE5WEc0Z0lDQWdJQ0ErWEc0Z0lDQWdJQ0FnSUR4a2FYWWdZM056UFh0MGFYUnNaVk4wZVd4bGZTQnZia05zYVdOclBYdHZjR1Z1SUNZbUlHOXVWRzluWjJ4bElEOGdiMjVVYjJkbmJHVWdPaUIxYm1SbFptbHVaV1I5UGx4dUlDQWdJQ0FnSUNBZ0lIdHZjR1Z1SUNZbUlEeGthWFlnWTNOelBYdHRZWE5yVTNSNWJHVjlJQzgrZlZ4dUlDQWdJQ0FnSUNBZ0lIdDBhWFJzWlgxY2JpQWdJQ0FnSUNBZ0lDQThaR2wySUdOemN6MTdXMjl3Wlc0Z1B5QmpiRzl6WlVsamIyNGdPaUJ2Y0dWdVNXTnZibDE5SUM4K1hHNGdJQ0FnSUNBZ0lEd3ZaR2wyUGx4dUlDQWdJQ0FnSUNBOFpHbDJJR056Y3oxN1cyTnZiblJsYm5SVGRIbHNaU3dnSVc5d1pXNGdKaVlnWTI5dWRHVnVkRWhwWkdSbGJsTjBlV3hsWFgwK2UyTm9hV3hrY21WdWZUd3ZaR2wyUGx4dUlDQWdJQ0FnUEM5a2FYWStYRzRnSUNBZ1BDOWthWFkrWEc0Z0lDbGNibHh1VW1WamIyMXRaVzVrWVhScGIyNVFZVzVsYkM1d2NtOXdWSGx3WlhNZ1BTQjdYRzRnSUc5d1pXNDZJRkJ5YjNCVWVYQmxjeTVpYjI5c0xGeHVJQ0J2YmxSdloyZHNaVG9nVUhKdmNGUjVjR1Z6TG1aMWJtTXNYRzRnSUhScGRHeGxPaUJRY205d1ZIbHdaWE11Ym05a1pTeGNiaUFnWTJocGJHUnlaVzQ2SUZCeWIzQlVlWEJsY3k1dWIyUmxMRnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCU1pXTnZiVzFsYm1SaGRHbHZibEJoYm1Wc1hHNGlYWDA9ICovXCIpLFxuICBjaGlsZHJlbjoganN4cyhcImRpdlwiLCB7XG4gICAgY3NzOiBbc3R5bGUkMy5jb250YWluZXIsIG9wZW4gJiYgc3R5bGUkMy5vcGVuLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6UmVjb21tZW5kYXRpb25QYW5lbDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxKbFkyOXRiV1Z1WkdGMGFXOXVVR0Z1Wld3dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJiVVZSSWl3aVptbHNaU0k2SWxKbFkyOXRiV1Z1WkdGMGFXOXVVR0Z1Wld3dWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lCbGMyeHBiblF0WkdsellXSnNaU0JxYzNndFlURXhlUzl1YnkxemRHRjBhV010Wld4bGJXVnVkQzFwYm5SbGNtRmpkR2x2Ym5NZ0tpOWNiaTh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J1YnkxMWJuVnpaV1F0ZG1GeWMxeHVMeW9nUUdwemVFbHRjRzl5ZEZOdmRYSmpaU0JBWlcxdmRHbHZiaTl5WldGamRDQXFMMXh1YVcxd2IzSjBJRkJ5YjNCVWVYQmxjeUJtY205dElDZHdjbTl3TFhSNWNHVnpKMXh1WEc1cGJYQnZjblFnYVdOdmJpQm1jbTl0SUNkemRIbHNaUzlwWTI5dUoxeHVYRzVqYjI1emRDQnZjR1Z1U1dOdmJpQTlJSHRjYmlBZ2QybGtkR2c2SUNjeGNtVnRKeXhjYmlBZ2FHVnBaMmgwT2lBbk1YSmxiU2NzWEc0Z0lHMWhjbWRwYmpvZ0p6QWdNQzQxY21WdEp5eGNiaUFnWm05dWRGZGxhV2RvZERvZ0oySnZiR1FuTEZ4dUlDQmlZV05yWjNKdmRXNWtTVzFoWjJVNklHQjFjbXdvSkh0cFkyOXVMbUZ5Y205M1ZHOXdmU2xnTEZ4dUlDQjBjbUZ1YzJsMGFXOXVPaUFuZEhKaGJuTm1iM0p0SURGeklHVmhjMlVuTEZ4dWZWeHVYRzVqYjI1emRDQmpiRzl6WlVsamIyNGdQU0I3WEc0Z0lDNHVMbTl3Wlc1SlkyOXVMRnh1SUNCMGNtRnVjMlp2Y20wNklDZHliM1JoZEdWWUtERTRNR1JsWnlrbkxGeHVmVnh1WEc1amIyNXpkQ0IwYVhSc1pWTjBlV3hsSUQwZ2UxeHVJQ0J3YjNOcGRHbHZiam9nSjNKbGJHRjBhWFpsSnl4Y2JpQWdjR0ZrWkdsdVp6b2dKekF1TlhKbGJTQXlMalZ5WlcwbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JqYjJ4dmNqb2dKeU5qWTJNbkxGeHVJQ0JtYjI1MFUybDZaVG9nSnpJd2NIZ25MRnh1SUNCamRYSnpiM0k2SUNkd2IybHVkR1Z5Snl4Y2JuMWNibHh1WTI5dWMzUWdiV0Z6YTFOMGVXeGxJRDBnZTF4dUlDQndiM05wZEdsdmJqb2dKMkZpYzI5c2RYUmxKeXhjYmlBZ2JHVm1kRG9nTUN4Y2JpQWdZbTkwZEc5dE9pQXdMRnh1SUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNCb1pXbG5hSFE2SUNjeE1EQjJhQ2NzWEc1OVhHNWNibU52Ym5OMElHTnZiblJsYm5SVGRIbHNaU0E5SUh0Y2JpQWdiM1psY21ac2IzYzZJQ2RoZFhSdkp5eGNibjFjYmx4dVkyOXVjM1FnWTI5dWRHVnVkRWhwWkdSbGJsTjBlV3hsSUQwZ2UxeHVJQ0J2ZG1WeVpteHZkem9nSjJocFpHUmxiaWNzWEc0Z0lIQnZhVzUwWlhKRmRtVnVkSE02SUNkdWIyNWxKeXhjYmlBZ2RHOTFZMmhCWTNScGIyNDZJQ2R1YjI1bEp5eGNibjFjYmx4dVkyOXVjM1FnWm05c1pHVmtTR1ZwWjJoMElEMGdKelZ5WlcwblhHNWNibU52Ym5OMElITjBlV3hsSUQwZ2UxeHVJQ0JqYjI1MFlXbHVaWEk2SUh0Y2JpQWdJQ0J3YjNOcGRHbHZiam9nSjJGaWMyOXNkWFJsSnl4Y2JpQWdJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0FnSUhSeVlXNXphWFJwYjI0NklDZDBjbUZ1YzJadmNtMGdNQzQxY3lCbFlYTmxKeXhjYmlBZ0lDQjBjbUZ1YzJadmNtMDZJQ2QwY21GdWMyeGhkR1ZaS0RBcEp5eGNiaUFnZlN4Y2JpQWdiM0JsYmpvZ2UxeHVJQ0FnSUhSeVlXNXpabTl5YlRvZ1lIUnlZVzV6YkdGMFpWa29MVEV3TUNVcElIUnlZVzV6YkdGMFpWa29KSHRtYjJ4a1pXUklaV2xuYUhSOUtXQXNYRzRnSUgwc1hHNTlYRzVjYm1OdmJuTjBJRkpsWTI5dGJXVnVaR0YwYVc5dVVHRnVaV3dnUFNBb2UyOXdaVzRzSUc5dVZHOW5aMnhsTENCMGFYUnNaU3dnWTJocGJHUnlaVzRnUFNCdWRXeHNmU2tnUFQ1Y2JpQWdZMmhwYkdSeVpXNGdKaVlnS0Z4dUlDQWdJRHhrYVhZZ1kzTnpQWHQ3YUdWcFoyaDBPaUJtYjJ4a1pXUklaV2xuYUhRc0lHMWhjbWRwYmxSdmNEb2dKeTB4Y21WdEozMTlQbHh1SUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNCamMzTTllMXR6ZEhsc1pTNWpiMjUwWVdsdVpYSXNJRzl3Wlc0Z0ppWWdjM1I1YkdVdWIzQmxibDE5WEc0Z0lDQWdJQ0FnSUc5dVEyeHBZMnM5ZXlncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JVzl3Wlc0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUc5dVZHOW5aMnhsS0NsY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDE5WEc0Z0lDQWdJQ0ErWEc0Z0lDQWdJQ0FnSUR4a2FYWWdZM056UFh0MGFYUnNaVk4wZVd4bGZTQnZia05zYVdOclBYdHZjR1Z1SUNZbUlHOXVWRzluWjJ4bElEOGdiMjVVYjJkbmJHVWdPaUIxYm1SbFptbHVaV1I5UGx4dUlDQWdJQ0FnSUNBZ0lIdHZjR1Z1SUNZbUlEeGthWFlnWTNOelBYdHRZWE5yVTNSNWJHVjlJQzgrZlZ4dUlDQWdJQ0FnSUNBZ0lIdDBhWFJzWlgxY2JpQWdJQ0FnSUNBZ0lDQThaR2wySUdOemN6MTdXMjl3Wlc0Z1B5QmpiRzl6WlVsamIyNGdPaUJ2Y0dWdVNXTnZibDE5SUM4K1hHNGdJQ0FnSUNBZ0lEd3ZaR2wyUGx4dUlDQWdJQ0FnSUNBOFpHbDJJR056Y3oxN1cyTnZiblJsYm5SVGRIbHNaU3dnSVc5d1pXNGdKaVlnWTI5dWRHVnVkRWhwWkdSbGJsTjBlV3hsWFgwK2UyTm9hV3hrY21WdWZUd3ZaR2wyUGx4dUlDQWdJQ0FnUEM5a2FYWStYRzRnSUNBZ1BDOWthWFkrWEc0Z0lDbGNibHh1VW1WamIyMXRaVzVrWVhScGIyNVFZVzVsYkM1d2NtOXdWSGx3WlhNZ1BTQjdYRzRnSUc5d1pXNDZJRkJ5YjNCVWVYQmxjeTVpYjI5c0xGeHVJQ0J2YmxSdloyZHNaVG9nVUhKdmNGUjVjR1Z6TG1aMWJtTXNYRzRnSUhScGRHeGxPaUJRY205d1ZIbHdaWE11Ym05a1pTeGNiaUFnWTJocGJHUnlaVzQ2SUZCeWIzQlVlWEJsY3k1dWIyUmxMRnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCU1pXTnZiVzFsYm1SaGRHbHZibEJoYm1Wc1hHNGlYWDA9ICovXCJdLFxuICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgIGlmICghb3Blbikge1xuICAgICAgICBvblRvZ2dsZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2hpbGRyZW46IFtqc3hzKFwiZGl2XCIsIHtcbiAgICAgIGNzczogdGl0bGVTdHlsZSxcbiAgICAgIG9uQ2xpY2s6IG9wZW4gJiYgb25Ub2dnbGUgPyBvblRvZ2dsZSA6IHVuZGVmaW5lZCxcbiAgICAgIGNoaWxkcmVuOiBbb3BlbiAmJiBqc3gkMShcImRpdlwiLCB7XG4gICAgICAgIGNzczogbWFza1N0eWxlXG4gICAgICB9KSwgdGl0bGUsIGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgICAgY3NzOiBbb3BlbiA/IGNsb3NlSWNvbiA6IG9wZW5JY29uLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6UmVjb21tZW5kYXRpb25QYW5lbDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxKbFkyOXRiV1Z1WkdGMGFXOXVVR0Z1Wld3dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJOa1ZsSWl3aVptbHNaU0k2SWxKbFkyOXRiV1Z1WkdGMGFXOXVVR0Z1Wld3dWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lCbGMyeHBiblF0WkdsellXSnNaU0JxYzNndFlURXhlUzl1YnkxemRHRjBhV010Wld4bGJXVnVkQzFwYm5SbGNtRmpkR2x2Ym5NZ0tpOWNiaTh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J1YnkxMWJuVnpaV1F0ZG1GeWMxeHVMeW9nUUdwemVFbHRjRzl5ZEZOdmRYSmpaU0JBWlcxdmRHbHZiaTl5WldGamRDQXFMMXh1YVcxd2IzSjBJRkJ5YjNCVWVYQmxjeUJtY205dElDZHdjbTl3TFhSNWNHVnpKMXh1WEc1cGJYQnZjblFnYVdOdmJpQm1jbTl0SUNkemRIbHNaUzlwWTI5dUoxeHVYRzVqYjI1emRDQnZjR1Z1U1dOdmJpQTlJSHRjYmlBZ2QybGtkR2c2SUNjeGNtVnRKeXhjYmlBZ2FHVnBaMmgwT2lBbk1YSmxiU2NzWEc0Z0lHMWhjbWRwYmpvZ0p6QWdNQzQxY21WdEp5eGNiaUFnWm05dWRGZGxhV2RvZERvZ0oySnZiR1FuTEZ4dUlDQmlZV05yWjNKdmRXNWtTVzFoWjJVNklHQjFjbXdvSkh0cFkyOXVMbUZ5Y205M1ZHOXdmU2xnTEZ4dUlDQjBjbUZ1YzJsMGFXOXVPaUFuZEhKaGJuTm1iM0p0SURGeklHVmhjMlVuTEZ4dWZWeHVYRzVqYjI1emRDQmpiRzl6WlVsamIyNGdQU0I3WEc0Z0lDNHVMbTl3Wlc1SlkyOXVMRnh1SUNCMGNtRnVjMlp2Y20wNklDZHliM1JoZEdWWUtERTRNR1JsWnlrbkxGeHVmVnh1WEc1amIyNXpkQ0IwYVhSc1pWTjBlV3hsSUQwZ2UxeHVJQ0J3YjNOcGRHbHZiam9nSjNKbGJHRjBhWFpsSnl4Y2JpQWdjR0ZrWkdsdVp6b2dKekF1TlhKbGJTQXlMalZ5WlcwbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUdGc2FXZHVTWFJsYlhNNklDZGpaVzUwWlhJbkxGeHVJQ0JqYjJ4dmNqb2dKeU5qWTJNbkxGeHVJQ0JtYjI1MFUybDZaVG9nSnpJd2NIZ25MRnh1SUNCamRYSnpiM0k2SUNkd2IybHVkR1Z5Snl4Y2JuMWNibHh1WTI5dWMzUWdiV0Z6YTFOMGVXeGxJRDBnZTF4dUlDQndiM05wZEdsdmJqb2dKMkZpYzI5c2RYUmxKeXhjYmlBZ2JHVm1kRG9nTUN4Y2JpQWdZbTkwZEc5dE9pQXdMRnh1SUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNCb1pXbG5hSFE2SUNjeE1EQjJhQ2NzWEc1OVhHNWNibU52Ym5OMElHTnZiblJsYm5SVGRIbHNaU0E5SUh0Y2JpQWdiM1psY21ac2IzYzZJQ2RoZFhSdkp5eGNibjFjYmx4dVkyOXVjM1FnWTI5dWRHVnVkRWhwWkdSbGJsTjBlV3hsSUQwZ2UxeHVJQ0J2ZG1WeVpteHZkem9nSjJocFpHUmxiaWNzWEc0Z0lIQnZhVzUwWlhKRmRtVnVkSE02SUNkdWIyNWxKeXhjYmlBZ2RHOTFZMmhCWTNScGIyNDZJQ2R1YjI1bEp5eGNibjFjYmx4dVkyOXVjM1FnWm05c1pHVmtTR1ZwWjJoMElEMGdKelZ5WlcwblhHNWNibU52Ym5OMElITjBlV3hsSUQwZ2UxeHVJQ0JqYjI1MFlXbHVaWEk2SUh0Y2JpQWdJQ0J3YjNOcGRHbHZiam9nSjJGaWMyOXNkWFJsSnl4Y2JpQWdJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0FnSUhSeVlXNXphWFJwYjI0NklDZDBjbUZ1YzJadmNtMGdNQzQxY3lCbFlYTmxKeXhjYmlBZ0lDQjBjbUZ1YzJadmNtMDZJQ2QwY21GdWMyeGhkR1ZaS0RBcEp5eGNiaUFnZlN4Y2JpQWdiM0JsYmpvZ2UxeHVJQ0FnSUhSeVlXNXpabTl5YlRvZ1lIUnlZVzV6YkdGMFpWa29MVEV3TUNVcElIUnlZVzV6YkdGMFpWa29KSHRtYjJ4a1pXUklaV2xuYUhSOUtXQXNYRzRnSUgwc1hHNTlYRzVjYm1OdmJuTjBJRkpsWTI5dGJXVnVaR0YwYVc5dVVHRnVaV3dnUFNBb2UyOXdaVzRzSUc5dVZHOW5aMnhsTENCMGFYUnNaU3dnWTJocGJHUnlaVzRnUFNCdWRXeHNmU2tnUFQ1Y2JpQWdZMmhwYkdSeVpXNGdKaVlnS0Z4dUlDQWdJRHhrYVhZZ1kzTnpQWHQ3YUdWcFoyaDBPaUJtYjJ4a1pXUklaV2xuYUhRc0lHMWhjbWRwYmxSdmNEb2dKeTB4Y21WdEozMTlQbHh1SUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNCamMzTTllMXR6ZEhsc1pTNWpiMjUwWVdsdVpYSXNJRzl3Wlc0Z0ppWWdjM1I1YkdVdWIzQmxibDE5WEc0Z0lDQWdJQ0FnSUc5dVEyeHBZMnM5ZXlncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JVzl3Wlc0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUc5dVZHOW5aMnhsS0NsY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDE5WEc0Z0lDQWdJQ0ErWEc0Z0lDQWdJQ0FnSUR4a2FYWWdZM056UFh0MGFYUnNaVk4wZVd4bGZTQnZia05zYVdOclBYdHZjR1Z1SUNZbUlHOXVWRzluWjJ4bElEOGdiMjVVYjJkbmJHVWdPaUIxYm1SbFptbHVaV1I5UGx4dUlDQWdJQ0FnSUNBZ0lIdHZjR1Z1SUNZbUlEeGthWFlnWTNOelBYdHRZWE5yVTNSNWJHVjlJQzgrZlZ4dUlDQWdJQ0FnSUNBZ0lIdDBhWFJzWlgxY2JpQWdJQ0FnSUNBZ0lDQThaR2wySUdOemN6MTdXMjl3Wlc0Z1B5QmpiRzl6WlVsamIyNGdPaUJ2Y0dWdVNXTnZibDE5SUM4K1hHNGdJQ0FnSUNBZ0lEd3ZaR2wyUGx4dUlDQWdJQ0FnSUNBOFpHbDJJR056Y3oxN1cyTnZiblJsYm5SVGRIbHNaU3dnSVc5d1pXNGdKaVlnWTI5dWRHVnVkRWhwWkdSbGJsTjBlV3hsWFgwK2UyTm9hV3hrY21WdWZUd3ZaR2wyUGx4dUlDQWdJQ0FnUEM5a2FYWStYRzRnSUNBZ1BDOWthWFkrWEc0Z0lDbGNibHh1VW1WamIyMXRaVzVrWVhScGIyNVFZVzVsYkM1d2NtOXdWSGx3WlhNZ1BTQjdYRzRnSUc5d1pXNDZJRkJ5YjNCVWVYQmxjeTVpYjI5c0xGeHVJQ0J2YmxSdloyZHNaVG9nVUhKdmNGUjVjR1Z6TG1aMWJtTXNYRzRnSUhScGRHeGxPaUJRY205d1ZIbHdaWE11Ym05a1pTeGNiaUFnWTJocGJHUnlaVzQ2SUZCeWIzQlVlWEJsY3k1dWIyUmxMRnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCU1pXTnZiVzFsYm1SaGRHbHZibEJoYm1Wc1hHNGlYWDA9ICovXCJdXG4gICAgICB9KV1cbiAgICB9KSwganN4JDEoXCJkaXZcIiwge1xuICAgICAgY3NzOiBbY29udGVudFN0eWxlLCAhb3BlbiAmJiBjb250ZW50SGlkZGVuU3R5bGUsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIjtsYWJlbDpSZWNvbW1lbmRhdGlvblBhbmVsO1wiLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbEpsWTI5dGJXVnVaR0YwYVc5dVVHRnVaV3d1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQkswVmhJaXdpWm1sc1pTSTZJbEpsWTI5dGJXVnVaR0YwYVc5dVVHRnVaV3d1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUJsYzJ4cGJuUXRaR2x6WVdKc1pTQnFjM2d0WVRFeGVTOXVieTF6ZEdGMGFXTXRaV3hsYldWdWRDMXBiblJsY21GamRHbHZibk1nS2k5Y2JpOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTExYm5WelpXUXRkbUZ5YzF4dUx5b2dRR3B6ZUVsdGNHOXlkRk52ZFhKalpTQkFaVzF2ZEdsdmJpOXlaV0ZqZENBcUwxeHVhVzF3YjNKMElGQnliM0JVZVhCbGN5Qm1jbTl0SUNkd2NtOXdMWFI1Y0dWekoxeHVYRzVwYlhCdmNuUWdhV052YmlCbWNtOXRJQ2R6ZEhsc1pTOXBZMjl1SjF4dVhHNWpiMjV6ZENCdmNHVnVTV052YmlBOUlIdGNiaUFnZDJsa2RHZzZJQ2N4Y21WdEp5eGNiaUFnYUdWcFoyaDBPaUFuTVhKbGJTY3NYRzRnSUcxaGNtZHBiam9nSnpBZ01DNDFjbVZ0Snl4Y2JpQWdabTl1ZEZkbGFXZG9kRG9nSjJKdmJHUW5MRnh1SUNCaVlXTnJaM0p2ZFc1a1NXMWhaMlU2SUdCMWNtd29KSHRwWTI5dUxtRnljbTkzVkc5d2ZTbGdMRnh1SUNCMGNtRnVjMmwwYVc5dU9pQW5kSEpoYm5ObWIzSnRJREZ6SUdWaGMyVW5MRnh1ZlZ4dVhHNWpiMjV6ZENCamJHOXpaVWxqYjI0Z1BTQjdYRzRnSUM0dUxtOXdaVzVKWTI5dUxGeHVJQ0IwY21GdWMyWnZjbTA2SUNkeWIzUmhkR1ZZS0RFNE1HUmxaeWtuTEZ4dWZWeHVYRzVqYjI1emRDQjBhWFJzWlZOMGVXeGxJRDBnZTF4dUlDQndiM05wZEdsdmJqb2dKM0psYkdGMGFYWmxKeXhjYmlBZ2NHRmtaR2x1WnpvZ0p6QXVOWEpsYlNBeUxqVnlaVzBuTEZ4dUlDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJR0ZzYVdkdVNYUmxiWE02SUNkalpXNTBaWEluTEZ4dUlDQmpiMnh2Y2pvZ0p5TmpZMk1uTEZ4dUlDQm1iMjUwVTJsNlpUb2dKekl3Y0hnbkxGeHVJQ0JqZFhKemIzSTZJQ2R3YjJsdWRHVnlKeXhjYm4xY2JseHVZMjl1YzNRZ2JXRnphMU4wZVd4bElEMGdlMXh1SUNCd2IzTnBkR2x2YmpvZ0oyRmljMjlzZFhSbEp5eGNiaUFnYkdWbWREb2dNQ3hjYmlBZ1ltOTBkRzl0T2lBd0xGeHVJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0JvWldsbmFIUTZJQ2N4TURCMmFDY3NYRzU5WEc1Y2JtTnZibk4wSUdOdmJuUmxiblJUZEhsc1pTQTlJSHRjYmlBZ2IzWmxjbVpzYjNjNklDZGhkWFJ2Snl4Y2JuMWNibHh1WTI5dWMzUWdZMjl1ZEdWdWRFaHBaR1JsYmxOMGVXeGxJRDBnZTF4dUlDQnZkbVZ5Wm14dmR6b2dKMmhwWkdSbGJpY3NYRzRnSUhCdmFXNTBaWEpGZG1WdWRITTZJQ2R1YjI1bEp5eGNiaUFnZEc5MVkyaEJZM1JwYjI0NklDZHViMjVsSnl4Y2JuMWNibHh1WTI5dWMzUWdabTlzWkdWa1NHVnBaMmgwSUQwZ0p6VnlaVzBuWEc1Y2JtTnZibk4wSUhOMGVXeGxJRDBnZTF4dUlDQmpiMjUwWVdsdVpYSTZJSHRjYmlBZ0lDQndiM05wZEdsdmJqb2dKMkZpYzI5c2RYUmxKeXhjYmlBZ0lDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQWdJSFJ5WVc1emFYUnBiMjQ2SUNkMGNtRnVjMlp2Y20wZ01DNDFjeUJsWVhObEp5eGNiaUFnSUNCMGNtRnVjMlp2Y20wNklDZDBjbUZ1YzJ4aGRHVlpLREFwSnl4Y2JpQWdmU3hjYmlBZ2IzQmxiam9nZTF4dUlDQWdJSFJ5WVc1elptOXliVG9nWUhSeVlXNXpiR0YwWlZrb0xURXdNQ1VwSUhSeVlXNXpiR0YwWlZrb0pIdG1iMnhrWldSSVpXbG5hSFI5S1dBc1hHNGdJSDBzWEc1OVhHNWNibU52Ym5OMElGSmxZMjl0YldWdVpHRjBhVzl1VUdGdVpXd2dQU0FvZTI5d1pXNHNJRzl1Vkc5bloyeGxMQ0IwYVhSc1pTd2dZMmhwYkdSeVpXNGdQU0J1ZFd4c2ZTa2dQVDVjYmlBZ1kyaHBiR1J5Wlc0Z0ppWWdLRnh1SUNBZ0lEeGthWFlnWTNOelBYdDdhR1ZwWjJoME9pQm1iMnhrWldSSVpXbG5hSFFzSUcxaGNtZHBibFJ2Y0RvZ0p5MHhjbVZ0SjMxOVBseHVJQ0FnSUNBZ1BHUnBkbHh1SUNBZ0lDQWdJQ0JqYzNNOWUxdHpkSGxzWlM1amIyNTBZV2x1WlhJc0lHOXdaVzRnSmlZZ2MzUjViR1V1YjNCbGJsMTlYRzRnSUNBZ0lDQWdJRzl1UTJ4cFkyczlleWdwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb0lXOXdaVzRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzl1Vkc5bloyeGxLQ2xjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMTlYRzRnSUNBZ0lDQStYRzRnSUNBZ0lDQWdJRHhrYVhZZ1kzTnpQWHQwYVhSc1pWTjBlV3hsZlNCdmJrTnNhV05yUFh0dmNHVnVJQ1ltSUc5dVZHOW5aMnhsSUQ4Z2IyNVViMmRuYkdVZ09pQjFibVJsWm1sdVpXUjlQbHh1SUNBZ0lDQWdJQ0FnSUh0dmNHVnVJQ1ltSUR4a2FYWWdZM056UFh0dFlYTnJVM1I1YkdWOUlDOCtmVnh1SUNBZ0lDQWdJQ0FnSUh0MGFYUnNaWDFjYmlBZ0lDQWdJQ0FnSUNBOFpHbDJJR056Y3oxN1cyOXdaVzRnUHlCamJHOXpaVWxqYjI0Z09pQnZjR1Z1U1dOdmJsMTlJQzgrWEc0Z0lDQWdJQ0FnSUR3dlpHbDJQbHh1SUNBZ0lDQWdJQ0E4WkdsMklHTnpjejE3VzJOdmJuUmxiblJUZEhsc1pTd2dJVzl3Wlc0Z0ppWWdZMjl1ZEdWdWRFaHBaR1JsYmxOMGVXeGxYWDArZTJOb2FXeGtjbVZ1ZlR3dlpHbDJQbHh1SUNBZ0lDQWdQQzlrYVhZK1hHNGdJQ0FnUEM5a2FYWStYRzRnSUNsY2JseHVVbVZqYjIxdFpXNWtZWFJwYjI1UVlXNWxiQzV3Y205d1ZIbHdaWE1nUFNCN1hHNGdJRzl3Wlc0NklGQnliM0JVZVhCbGN5NWliMjlzTEZ4dUlDQnZibFJ2WjJkc1pUb2dVSEp2Y0ZSNWNHVnpMbVoxYm1Nc1hHNGdJSFJwZEd4bE9pQlFjbTl3Vkhsd1pYTXVibTlrWlN4Y2JpQWdZMmhwYkdSeVpXNDZJRkJ5YjNCVWVYQmxjeTV1YjJSbExGeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JTWldOdmJXMWxibVJoZEdsdmJsQmhibVZzWEc0aVhYMD0gKi9cIl0sXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KV1cbiAgfSlcbn0pO1xuXG5SZWNvbW1lbmRhdGlvblBhbmVsLnByb3BUeXBlcyA9IHtcbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIG9uVG9nZ2xlOiBQcm9wVHlwZXMuZnVuYyxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cbmNvbnN0IGluaXRTdGF0ZSQxID0ge1xuICBtZWRpYVNvdXJjZXM6IFtdLFxuICBzZWxlY3RlZE1lZGlhU291cmNlOiBudWxsLFxuICBtZWRpYVNvdXJjZVByZWNlZGVuY2U6ICdhcHBsaWNhdGlvbicsXG4gIHJlY29tbWVuZGF0aW9uUGFuZWw6IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBvcGVuaW5nOiBmYWxzZVxuICB9LFxuICBhZDoge30sXG4gIGVycm9yOiBudWxsXG59O1xuXG5jb25zdCBnZXRBZFN0YXR1cyA9IGFjdGlvbiA9PiB7XG4gIGNvbnN0IHtcbiAgICBhZFBvc2l0aW9uLFxuICAgIHRvdGFsQWRzLFxuICAgIGR1cmF0aW9uLFxuICAgIGNsaWNrVGhyb3VnaFVybFxuICB9ID0gYWN0aW9uLmFkUHJvZ3Jlc3NEYXRhO1xuICByZXR1cm4ge1xuICAgIHBvc2l0aW9uOiBhZFBvc2l0aW9uLFxuICAgIHRvdGFsOiB0b3RhbEFkcyxcbiAgICBhZEJyZWFrRHVyYXRpb246IGR1cmF0aW9uLFxuICAgIHNraXBUaW1lT2Zmc2V0OiBhY3Rpb24uc2tpcFRpbWVPZmZzZXQsXG4gICAgY2xpY2tUaHJvdWdoVXJsXG4gIH07XG59O1xuXG52YXIgcmVkdWNlVWkgPSAoKHN0YXRlID0gaW5pdFN0YXRlJDEsIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSB0eXBlLlNFTEVDVF9NRURJQV9TT1VSQ0U6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgICAgbWVkaWFTb3VyY2VQcmVjZWRlbmNlOiAndXNlcicsXG4gICAgICAgIHNlbGVjdGVkTWVkaWFTb3VyY2U6IGFjdGlvbi5tZWRpYVNvdXJjZVxuICAgICAgfTtcblxuICAgIGNhc2UgdHlwZS5DSEFOR0VfUkVDT01NRU5EQVRJT05fUEFORUw6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgICAgcmVjb21tZW5kYXRpb25QYW5lbDoge1xuICAgICAgICAgIGVuYWJsZWQ6IGFjdGlvbi5lbmFibGVkLFxuICAgICAgICAgIG9wZW5pbmc6IGFjdGlvbi5lbmFibGVkICYmIHN0YXRlLnJlY29tbWVuZGF0aW9uUGFuZWwub3BlbmluZ1xuICAgICAgICB9LFxuICAgICAgICBhY3RpdmVQYW5lbDogYWN0aW9uLmVuYWJsZWQgJiYgc3RhdGUucmVjb21tZW5kYXRpb25QYW5lbC5vcGVuaW5nID8gJ3JlY29tbWVuZGF0aW9uJyA6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgIGNhc2UgdHlwZS5UT0dHTEVfUkVDT01NRU5EQVRJT05fUEFORUw6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgICAgYWN0aXZlUGFuZWw6IHN0YXRlLmFjdGl2ZVBhbmVsID09PSAncmVjb21tZW5kYXRpb24nID8gdW5kZWZpbmVkIDogJ3JlY29tbWVuZGF0aW9uJ1xuICAgICAgfTtcblxuICAgIGNhc2UgdHlwZS5PUEVOX1BBTkVMOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZVBhbmVsOiBhY3Rpb24ucGFuZWxcbiAgICAgIH07XG5cbiAgICBjYXNlIHR5cGUuSElERV9QQU5FTDpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgICBhY3RpdmVQYW5lbDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgY2FzZSB0eXBlLlBMQVlCQUNLX0VORDpcbiAgICAgIHJldHVybiBzdGF0ZS5hY3RpdmVQYW5lbCA/IHN0YXRlIDogeyAuLi5zdGF0ZSxcbiAgICAgICAgYWN0aXZlUGFuZWw6ICdyZWNvbW1lbmRhdGlvbidcbiAgICAgIH07XG5cbiAgICBjYXNlIHR5cGUuT0ZGRVJfQVVUT1BMQVk6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgICAgYWN0aXZlUGFuZWw6ICdhdXRvcGxheS1uZXh0JyxcbiAgICAgICAgLi4uKGFjdGlvbi5lbmRTdGF0ZSA9PT0gJ2VuZGVkJyAmJiB7XG4gICAgICAgICAgb3Blbk5leHQ6IHN0YXRlLmFjdGl2ZVBhbmVsXG4gICAgICAgIH0pLFxuICAgICAgICByZWNvbW1lbmRhdGlvblBhbmVsOiB7IC4uLnN0YXRlLnJlY29tbWVuZGF0aW9uUGFuZWwsXG4gICAgICAgICAgb3BlbmluZzogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIGNhc2UgdHlwZS5ESVNNSVNTX0FVVE9QTEFZOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZVBhbmVsOiB1bmRlZmluZWQsXG4gICAgICAgIC4uLihzdGF0ZS5vcGVuTmV4dCAmJiB7XG4gICAgICAgICAgYWN0aXZlUGFuZWw6IHN0YXRlLm9wZW5OZXh0LFxuICAgICAgICAgIHJlY29tbWVuZGF0aW9uUGFuZWw6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBvcGVuaW5nOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgb3Blbk5leHQ6ICcnXG4gICAgICB9O1xuXG4gICAgY2FzZSAnY29udGVudC1jaGFuZ2UnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICAgIGFkOiB7fSxcbiAgICAgICAgc3RyZWFtRXZlbnRzOiBbXSxcbiAgICAgICAgYWN0aXZlUGFuZWw6IHVuZGVmaW5lZCxcbiAgICAgICAgb3Blbk5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVjb21tZW5kYXRpb25QYW5lbDogeyAuLi5zdGF0ZS5yZWNvbW1lbmRhdGlvblBhbmVsLFxuICAgICAgICAgIG9wZW5pbmc6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICBjYXNlIHR5cGUuU1RSRUFNX0VWRU5UU19DSEFOR0VEOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICAgIHN0cmVhbUV2ZW50czogYWN0aW9uLnN0cmVhbUV2ZW50c1xuICAgICAgfTtcblxuICAgIGNhc2UgdHlwZS5BRF9CUkVBS19TVEFSVEVEOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICAgIGFkOiBnZXRBZFN0YXR1cyhhY3Rpb24pLFxuICAgICAgICBhY3RpdmVQYW5lbDogJydcbiAgICAgIH07XG5cbiAgICBjYXNlIHR5cGUuQURfQlJFQUtfRU5ERUQ6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgICAgYWQ6IHtcbiAgICAgICAgICB0b3RhbDogMFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDIoKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuY29uc3Qgc3R5bGUkMiA9IHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIGZsZXhXcmFwOiAnd3JhcCcsXG4gIGZsZXg6ICcxMDAlJyxcbiAgbWFyZ2luOiAnMXJlbSAwJyxcbiAgcGFkZGluZzogJzAgMS41cmVtJyxcbiAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgYnV0dG9uOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnMzZweCcsXG4gICAgbGVmdDogJzM2cHgnXG4gIH1cbn07XG5jb25zdCBpY29uU3R5bGUgPSB7XG4gIHdpZHRoOiAnNzhweCcsXG4gIGhlaWdodDogJzc4cHgnLFxuICBmaWx0ZXI6ICdpbnZlcnQoMTAwJSknXG59O1xuXG52YXIgX3JlZiQyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjhjdWNndlwiLFxuICBzdHlsZXM6IFwiZmxleDoxMDAlXCJcbn0gOiB7XG4gIG5hbWU6IFwiNmtvZW1jLUNhc3RPdmVybGF5XCIsXG4gIHN0eWxlczogXCJmbGV4OjEwMCU7bGFiZWw6Q2FzdE92ZXJsYXk7XCIsXG4gIG1hcDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJa05oYzNSUGRtVnliR0Y1TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXdERWeUlzSW1acGJHVWlPaUpEWVhOMFQzWmxjbXhoZVM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxSUVCcWMzaEpiWEJ2Y25SVGIzVnlZMlVnUUdWdGIzUnBiMjR2Y21WaFkzUWdLaTljYm1sdGNHOXlkQ0JRY205d1ZIbHdaWE1nWm5KdmJTQW5jSEp2Y0MxMGVYQmxjeWRjYmx4dWFXMXdiM0owSUh0R2IzSnRZWFIwWldSTlpYTnpZV2RsZlNCbWNtOXRJQ2RqYjI1MFpYaDBMMGt4T0c0blhHNXBiWEJ2Y25RZ1NXTnZiaUJtY205dElDY3VMMGxqYjI0blhHNXBiWEJ2Y25RZ2UwSjFkSFJ2Ym4wZ1puSnZiU0FuTGk5aWRYUjBiMjV6SjF4dWFXMXdiM0owSUVKaFkydGtjbTl3SUdaeWIyMGdKeTR2UW1GamEyUnliM0FuWEc1Y2JtTnZibk4wSUhOMGVXeGxJRDBnZTF4dUlDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJR3AxYzNScFpubERiMjUwWlc1ME9pQW5ZMlZ1ZEdWeUp5eGNiaUFnWm14bGVGZHlZWEE2SUNkM2NtRndKeXhjYmlBZ1pteGxlRG9nSnpFd01DVW5MRnh1SUNCdFlYSm5hVzQ2SUNjeGNtVnRJREFuTEZ4dUlDQndZV1JrYVc1bk9pQW5NQ0F4TGpWeVpXMG5MRnh1SUNCMFpYaDBRV3hwWjI0NklDZGpaVzUwWlhJbkxGeHVJQ0JpZFhSMGIyNDZJSHRjYmlBZ0lDQndiM05wZEdsdmJqb2dKMkZpYzI5c2RYUmxKeXhjYmlBZ0lDQjBiM0E2SUNjek5uQjRKeXhjYmlBZ0lDQnNaV1owT2lBbk16WndlQ2NzWEc0Z0lIMHNYRzU5WEc1Y2JtTnZibk4wSUdsamIyNVRkSGxzWlNBOUlIdGNiaUFnZDJsa2RHZzZJQ2MzT0hCNEp5eGNiaUFnYUdWcFoyaDBPaUFuTnpod2VDY3NYRzRnSUdacGJIUmxjam9nSjJsdWRtVnlkQ2d4TURBbEtTY3NYRzU5WEc1Y2JtTnZibk4wSUVOaGMzUlBkbVZ5YkdGNUlEMGdLSHR2YmtKaFkydDlLU0E5UGlBb1hHNGdJRHhDWVdOclpISnZjQ0J2Y0dWdVBseHVJQ0FnSUR4a2FYWWdZM056UFh0emRIbHNaWDArWEc0Z0lDQWdJQ0E4UW5WMGRHOXVJSE4wWVhKMFNXTnZiajFjSW1KaFkydGNJaUJ2YmtOc2FXTnJQWHR2YmtKaFkydDlJQzgrWEc0Z0lDQWdJQ0E4U1dOdmJpQjBlWEJsUFZ3aVkyRnpkRU52Ym01bFkzUmxaRndpSUhOMGVXeGxQWHRwWTI5dVUzUjViR1Y5SUM4K1hHNGdJQ0FnSUNBOFpHbDJJR056Y3oxN2UyWnNaWGc2SUNjeE1EQWxKMzE5UGx4dUlDQWdJQ0FnSUNBOFJtOXliV0YwZEdWa1RXVnpjMkZuWlNCcFpEMWNJa3RMVXk1RFFWTlVTVTVIWENJZ0x6NWNiaUFnSUNBZ0lEd3ZaR2wyUGx4dUlDQWdJRHd2WkdsMlBseHVJQ0E4TDBKaFkydGtjbTl3UGx4dUtWeHVYRzVEWVhOMFQzWmxjbXhoZVM1d2NtOXdWSGx3WlhNZ1BTQjdYRzRnSUc5dVFtRmphem9nVUhKdmNGUjVjR1Z6TG1aMWJtTXNYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUVOaGMzUlBkbVZ5YkdGNVhHNGlYWDA9ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQyXG59O1xuXG5jb25zdCBDYXN0T3ZlcmxheSA9ICh7XG4gIG9uQmFja1xufSkgPT4ganN4JDEoQmFja2Ryb3AsIHtcbiAgb3BlbjogdHJ1ZSxcbiAgY2hpbGRyZW46IGpzeHMoXCJkaXZcIiwge1xuICAgIGNzczogc3R5bGUkMixcbiAgICBjaGlsZHJlbjogW2pzeCQxKEJ1dHRvbiwge1xuICAgICAgc3RhcnRJY29uOiBcImJhY2tcIixcbiAgICAgIG9uQ2xpY2s6IG9uQmFja1xuICAgIH0pLCBqc3gkMShJY29uLCB7XG4gICAgICB0eXBlOiBcImNhc3RDb25uZWN0ZWRcIixcbiAgICAgIHN0eWxlOiBpY29uU3R5bGVcbiAgICB9KSwganN4JDEoXCJkaXZcIiwge1xuICAgICAgY3NzOiBfcmVmJDIsXG4gICAgICBjaGlsZHJlbjoganN4JDEoRm9ybWF0dGVkTWVzc2FnZSwge1xuICAgICAgICBpZDogXCJLS1MuQ0FTVElOR1wiXG4gICAgICB9KVxuICAgIH0pXVxuICB9KVxufSk7XG5cbkNhc3RPdmVybGF5LnByb3BUeXBlcyA9IHtcbiAgb25CYWNrOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvbWlzZS1leGVjdXRvci1yZXR1cm4gKi9cbmNvbnN0IGNhc3RDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoKTtcbmNvbnN0IGluaXRTdGF0ZSA9IHtcbiAgY2FzdFN0YXRlOiBudWxsLFxuICBwbGF5ZXJTdGF0ZTogbnVsbCxcbiAgY2FzdGluZ01lZGlhOiBudWxsLFxuICBkZXZpY2VOYW1lOiBudWxsLFxuICBtZWRpYVRpdGxlOiBudWxsLFxuICBkdXJhdGlvbjogMCxcbiAgcHJvZ3Jlc3NUaW1lOiAwLFxuICBjdXN0b21EYXRhOiB7fSxcbiAgdm9sdW1lOiAxMDAsXG4gIG11dGVkOiBmYWxzZSxcbiAgc3RyZWFtVHlwZTogbnVsbFxufTtcbmNvbnN0IGRlZmF1bHRDYXN0Q29udGV4dCA9IHtcbiAgc3RhdGU6IHt9LFxuICBhY3Rpb25zOiB7XG4gICAgaGFzUHJldmlvdXM6ICgpID0+IGZhbHNlLFxuICAgIGhhc05leHQ6ICgpID0+IGZhbHNlXG4gIH1cbn07XG5cbmNvbnN0IGdldFZvbHVtZSA9IHNlc3Npb24gPT4gc2Vzc2lvbiAmJiB7XG4gIHZvbHVtZTogc2Vzc2lvbi5nZXRWb2x1bWUoKSxcbiAgbXV0ZWQ6IHNlc3Npb24uaXNNdXRlKClcbn07XG4vKiBnbG9iYWwgY2hyb21lLCBjYXN0ICovXG5cblxuY29uc3QgQ2FzdFByb3ZpZGVyID0gKHtcbiAgYXBwSWQsXG4gIG9uQ29ubmVjdGVkLFxuICBvbkNhc3RpbmcsXG4gIG9uRXJyb3IsXG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIGNvbnN0IGFjdGlvbnMgPSB1c2VSZWYoZGVmYXVsdENhc3RDb250ZXh0LmFjdGlvbnMpO1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKHsgLi4uaW5pdFN0YXRlLFxuICAgIGFwcElkLFxuICAgIGFjdGlvbnM6IGFjdGlvbnMuY3VycmVudFxuICB9KTtcblxuICBjb25zdCBzZXRDYXN0U3RhdGUgPSB2YWx1ZSA9PiBzZXRTdGF0ZShjdXJyZW50ID0+ICh7IC4uLmN1cnJlbnQsXG4gICAgLi4udmFsdWVcbiAgfSkpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZW5zdXJlU2VuZGVyRnJhbWV3b3JrKCkudGhlbihjb250ZXh0ID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhc3RTdGF0ZUNoYW5nZSA9ICh7XG4gICAgICAgIGNhc3RTdGF0ZVxuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IGNvbnRleHQuZ2V0Q3VycmVudFNlc3Npb24oKTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHtcbiAgICAgICAgICBjYXN0U3RhdGUsXG4gICAgICAgICAgZGV2aWNlTmFtZTogY2FzdFN0YXRlID09PSAnQ09OTkVDVEVEJyAmJiBjdXJyZW50U2Vzc2lvbi5nZXRDYXN0RGV2aWNlKCkuZnJpZW5kbHlOYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNhc3RTdGF0ZSA9PT0gJ0NPTk5FQ1RFRCcpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9uQ29ubmVjdGVkID09PSAnZnVuY3Rpb24nKSBvbkNvbm5lY3RlZChjdXJyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldENhc3RTdGF0ZShjdXJyZW50KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcihjYXN0LmZyYW1ld29yay5DYXN0Q29udGV4dEV2ZW50VHlwZS5DQVNUX1NUQVRFX0NIQU5HRUQsIGhhbmRsZUNhc3RTdGF0ZUNoYW5nZSk7XG4gICAgICBoYW5kbGVDYXN0U3RhdGVDaGFuZ2Uoe1xuICAgICAgICBjYXN0U3RhdGU6IGNvbnRleHQuZ2V0Q2FzdFN0YXRlKClcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGxheWVyID0gbmV3IGNhc3QuZnJhbWV3b3JrLlJlbW90ZVBsYXllcigpO1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBjYXN0LmZyYW1ld29yay5SZW1vdGVQbGF5ZXJDb250cm9sbGVyKHBsYXllcik7XG4gICAgICBjb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoY2FzdC5mcmFtZXdvcmsuUmVtb3RlUGxheWVyRXZlbnRUeXBlLlBMQVlFUl9TVEFURV9DSEFOR0VELCAoe1xuICAgICAgICB2YWx1ZVxuICAgICAgfSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09ICdJRExFJykge1xuICAgICAgICAgIG9uQ2FzdGluZyA9PT0gbnVsbCB8fCBvbkNhc3RpbmcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2FzdGluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0Q2FzdFN0YXRlKHtcbiAgICAgICAgICBwbGF5ZXJTdGF0ZTogdmFsdWUsXG4gICAgICAgICAgY2FzdGluZ01lZGlhOiB2YWx1ZSAhPT0gJ0lETEUnID8gZ2V0TWVkaWFTZXNzaW9uKCkubWVkaWEgOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBjb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoY2FzdC5mcmFtZXdvcmsuUmVtb3RlUGxheWVyRXZlbnRUeXBlLlRJVExFX0NIQU5HRUQsICh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KSA9PiBzZXRDYXN0U3RhdGUoe1xuICAgICAgICBtZWRpYVRpdGxlOiB2YWx1ZVxuICAgICAgfSkpO1xuICAgICAgY29udHJvbGxlci5hZGRFdmVudExpc3RlbmVyKGNhc3QuZnJhbWV3b3JrLlJlbW90ZVBsYXllckV2ZW50VHlwZS5NRURJQV9JTkZPX0NIQU5HRUQsICh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KSA9PiBzZXRDYXN0U3RhdGUoe1xuICAgICAgICBjYXN0aW5nTWVkaWE6IHZhbHVlLFxuICAgICAgICAvLyBBZnRlciBwbGF5aW5nIGEgd2hpbGUsIG1lZGlhIGluZm8gaXMgdXBkYXRlZCB3aXRob3V0IGN1c3RvbURhdGFcbiAgICAgICAgLy8gSXQncyBsaWtlbHkgcmVjZWl2ZXIgYXBwIGJ1Z1xuICAgICAgICAuLi4odmFsdWUgPyB2YWx1ZS5jdXN0b21EYXRhICYmIHtcbiAgICAgICAgICBjdXN0b21EYXRhOiB2YWx1ZS5jdXN0b21EYXRhXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgY3VzdG9tRGF0YToge31cbiAgICAgICAgfSlcbiAgICAgIH0pKTtcbiAgICAgIGNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcihjYXN0LmZyYW1ld29yay5SZW1vdGVQbGF5ZXJFdmVudFR5cGUuRFVSQVRJT05fQ0hBTkdFRCwgKHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pID0+IHNldENhc3RTdGF0ZSh7XG4gICAgICAgIGR1cmF0aW9uOiB2YWx1ZVxuICAgICAgfSkpO1xuICAgICAgY29udHJvbGxlci5hZGRFdmVudExpc3RlbmVyKGNhc3QuZnJhbWV3b3JrLlJlbW90ZVBsYXllckV2ZW50VHlwZS5DVVJSRU5UX1RJTUVfQ0hBTkdFRCwgKHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pID0+IHNldENhc3RTdGF0ZSh7XG4gICAgICAgIHByb2dyZXNzVGltZTogdmFsdWVcbiAgICAgIH0pKTtcbiAgICAgIGNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcihjYXN0LmZyYW1ld29yay5SZW1vdGVQbGF5ZXJFdmVudFR5cGUuTUVESUFfSU5GT19DSEFOR0VELCAoe1xuICAgICAgICB2YWx1ZVxuICAgICAgfSkgPT4gc2V0Q2FzdFN0YXRlKHtcbiAgICAgICAgc3RyZWFtVHlwZTogdmFsdWUgJiYgdmFsdWUuc3RyZWFtVHlwZVxuICAgICAgfSkpO1xuICAgICAgY29udHJvbGxlci5hZGRFdmVudExpc3RlbmVyKGNhc3QuZnJhbWV3b3JrLlJlbW90ZVBsYXllckV2ZW50VHlwZS5JU19QTEFZSU5HX0JSRUFLX0NIQU5HRUQsICh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KSA9PiBzZXRDYXN0U3RhdGUoe1xuICAgICAgICBpc1BsYXlpbmdCcmVhazogdmFsdWVcbiAgICAgIH0pKTtcbiAgICAgIGNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcihjYXN0LmZyYW1ld29yay5SZW1vdGVQbGF5ZXJFdmVudFR5cGUuQlJFQUtfQ0xJUF9JRF9DSEFOR0VELCAoe1xuICAgICAgICB2YWx1ZVxuICAgICAgfSkgPT4ge1xuICAgICAgICB2YXIgX2ZpbmQsIF9nZXRNZWRpYVNlc3Npb24kbWVkaTtcblxuICAgICAgICByZXR1cm4gc2V0Q2FzdFN0YXRlKHtcbiAgICAgICAgICBicmVha0NsaXBJZDogdmFsdWUsXG4gICAgICAgICAgY2xpY2tUaHJvdWdoVXJsOiAoX2ZpbmQgPSAoKChfZ2V0TWVkaWFTZXNzaW9uJG1lZGkgPSBnZXRNZWRpYVNlc3Npb24oKS5tZWRpYSkgPT09IG51bGwgfHwgX2dldE1lZGlhU2Vzc2lvbiRtZWRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZ2V0TWVkaWFTZXNzaW9uJG1lZGkuYnJlYWtDbGlwcykgfHwgW10pLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSB2YWx1ZSkpID09PSBudWxsIHx8IF9maW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZmluZC5jbGlja1Rocm91Z2hVcmxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcihjYXN0LmZyYW1ld29yay5SZW1vdGVQbGF5ZXJFdmVudFR5cGUuQ1VSUkVOVF9CUkVBS19USU1FX0NIQU5HRUQsICh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KSA9PiB7XG4gICAgICAgIHNldENhc3RTdGF0ZSh7XG4gICAgICAgICAgY3VycmVudEJyZWFrVGltZTogdmFsdWUsXG4gICAgICAgICAgd2hlblNraXBwYWJsZTogcGxheWVyLndoZW5Ta2lwcGFibGVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3Vic2NyaWJlVm9sdW1lQ2hhbmdlID0gaGFuZGxlQ2hhbmdlID0+IHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gW29uKGNvbnRyb2xsZXIsIGNhc3QuZnJhbWV3b3JrLlJlbW90ZVBsYXllckV2ZW50VHlwZS5WT0xVTUVfTEVWRUxfQ0hBTkdFRCwgKCkgPT4gaGFuZGxlQ2hhbmdlKGdldFZvbHVtZShnZXRNZWRpYVNlc3Npb24oKSkpKSwgb24oY29udHJvbGxlciwgY2FzdC5mcmFtZXdvcmsuUmVtb3RlUGxheWVyRXZlbnRUeXBlLklTX01VVEVEX0NIQU5HRUQsICgpID0+IGhhbmRsZUNoYW5nZShnZXRWb2x1bWUoZ2V0TWVkaWFTZXNzaW9uKCkpKSldO1xuICAgICAgICByZXR1cm4gKCkgPT4gbGlzdGVuZXJzLmZvckVhY2gocmVtb3ZlTGlzdGVuZXIgPT4gcmVtb3ZlTGlzdGVuZXIoKSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBnZXRJdGVtID0gKG1lZGlhLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IG1lZGlhLml0ZW1zIHx8IFtdO1xuICAgICAgICByZXR1cm4gaXRlbXNbKGl0ZW1zLmxlbmd0aCArIGluZGV4KSAlIGl0ZW1zLmxlbmd0aF0gfHwge307XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25uZWN0OiAoKSA9PiBjb25uZWN0KCksXG4gICAgICAgIHN0b3BDYXN0aW5nOiAoKSA9PiBjb250ZXh0LmVuZEN1cnJlbnRTZXNzaW9uKHRydWUpLFxuICAgICAgICBwbGF5OiAoKSA9PiBnZXRNZWRpYVNlc3Npb24oKS5wbGF5KG5ldyBjaHJvbWUuY2FzdC5tZWRpYS5QbGF5UmVxdWVzdCgpKSxcbiAgICAgICAgcGF1c2U6ICgpID0+IGdldE1lZGlhU2Vzc2lvbigpLnBhdXNlKG5ldyBjaHJvbWUuY2FzdC5tZWRpYS5QYXVzZVJlcXVlc3QoKSksXG4gICAgICAgIHNlZWs6ICh7XG4gICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgIHNlY29uZHNcbiAgICAgICAgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lZGlhID0gZ2V0TWVkaWFTZXNzaW9uKCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBzZWNvbmRzICsgKG9yaWdpbiA9PT0gU2Vla09yaWdpbi5DVVJSRU5UID8gbWVkaWEuZ2V0RXN0aW1hdGVkVGltZSgpIDogMCk7XG4gICAgICAgICAgbWVkaWEuc2VlayhPYmplY3QuYXNzaWduKG5ldyBjaHJvbWUuY2FzdC5tZWRpYS5TZWVrUmVxdWVzdCgpLCB7XG4gICAgICAgICAgICBjdXJyZW50VGltZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2tpcEFkOiAoKSA9PiBjb250cm9sbGVyLnNraXBBZCgpLFxuICAgICAgICBoYXNQcmV2aW91czogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lZGlhID0gZ2V0TWVkaWFTZXNzaW9uKCkgfHwge307XG4gICAgICAgICAgcmV0dXJuIG1lZGlhLmN1cnJlbnRJdGVtSWQgIT09IGdldEl0ZW0obWVkaWEsIDApLml0ZW1JZDtcbiAgICAgICAgfSxcbiAgICAgICAgaGFzTmV4dDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lZGlhID0gZ2V0TWVkaWFTZXNzaW9uKCkgfHwge307XG4gICAgICAgICAgcmV0dXJuIG1lZGlhLmN1cnJlbnRJdGVtSWQgIT09IGdldEl0ZW0obWVkaWEsIC0xKS5pdGVtSWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZVByZXZpb3VzRXBpc29kZTogKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gZ2V0TWVkaWFTZXNzaW9uKCkucXVldWVQcmV2KHJlc29sdmUsIHJlamVjdCkpLFxuICAgICAgICBjaGFuZ2VOZXh0RXBpc29kZTogKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gZ2V0TWVkaWFTZXNzaW9uKCkucXVldWVOZXh0KHJlc29sdmUsIHJlamVjdCkpLFxuICAgICAgICBzdWJzY3JpYmVWb2x1bWVDaGFuZ2UsXG4gICAgICAgIHNldFZvbHVtZTogdm9sdW1lID0+IGNvbnRyb2xsZXIuc2V0Vm9sdW1lTGV2ZWwodm9sdW1lICogMTAwKSxcbiAgICAgICAgc2V0TXV0ZTogKCkgPT4gY29udHJvbGxlci5tdXRlT3JVbm11dGUoKVxuICAgICAgfTtcbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBzZXRDYXN0U3RhdGUoe1xuICAgICAgICBhY3Rpb25zOiByZXN1bHRcbiAgICAgIH0pO1xuICAgICAgYWN0aW9ucy5jdXJyZW50ID0gcmVzdWx0O1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nICYmIG9uRXJyb3IoZXJyb3IpKTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL2pzeChjYXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzdGF0ZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSk7XG59O1xuXG5DYXN0UHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICBhcHBJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBvbkNvbm5lY3RlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2FzdGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5jb25zdCB1c2VDYXN0Q29udGV4dCA9ICgpID0+IHVzZUNvbnRleHQoY2FzdENvbnRleHQpIHx8IGRlZmF1bHRDYXN0Q29udGV4dDtcblxuY2FzdENvbnRleHQuQ29uc3VtZXI7XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDEoKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG5jb25zdCBnZXRFbnRlcnByaXNlRHJtSGVhZGVycyA9ICh7XG4gIHRva2VuXG59KSA9PiAoe1xuICAnWC1DdXN0b20tRGF0YSc6IGB0b2tlbl90eXBlPXBsYXliYWNrJnRva2VuX3ZhbHVlPSR7dG9rZW59YFxufSk7XG5cbmNvbnN0IHByZWxvYWRNYXAgPSBuZXcgTWFwKCk7XG5cbnZhciBfcmVmJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXExeTEyZFwiLFxuICBzdHlsZXM6IFwid2lkdGg6MmVtO2hlaWdodDoyZW07Ym9yZGVyLXJhZGl1czowLjI1ZW07bWFyZ2luOjAuNzVlbTtvYmplY3QtZml0OmNvdmVyXCJcbn0gOiB7XG4gIG5hbWU6IFwiMXRiaDR4NS1jaGFubmVsSWNvblwiLFxuICBzdHlsZXM6IFwid2lkdGg6MmVtO2hlaWdodDoyZW07Ym9yZGVyLXJhZGl1czowLjI1ZW07bWFyZ2luOjAuNzVlbTtvYmplY3QtZml0OmNvdmVyO2xhYmVsOmNoYW5uZWxJY29uO1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxCeVpXMXBkVzFRYkhWelVHeGhlV1Z5TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXOVhZeUlzSW1acGJHVWlPaUpRY21WdGFYVnRVR3gxYzFCc1lYbGxjaTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFJRUJxYzNoSmJYQnZjblJUYjNWeVkyVWdRR1Z0YjNScGIyNHZjbVZoWTNRZ0tpOWNibWx0Y0c5eWRDQjdYRzRnSUhWelpWSmxaSFZqWlhJc1hHNGdJSFZ6WlZOMFlYUmxMRnh1SUNCMWMyVkZabVpsWTNRc1hHNGdJSFZ6WlZKbFppeGNiaUFnZFhObFRXVnRieXhjYmlBZ2RYTmxTVzF3WlhKaGRHbDJaVWhoYm1Sc1pTeGNibjBnWm5KdmJTQW5jbVZoWTNRblhHNXBiWEJ2Y25RZ1VISnZjRlI1Y0dWeklHWnliMjBnSjNCeWIzQXRkSGx3WlhNblhHNWNibWx0Y0c5eWRDQjdaMlYwVFdWa2FXRlVhVzFsZlNCbWNtOXRJQ2R3YkdGNVpYSkRiM0psTDIxbFpHbGhRbWx1WkdsdVozTW5YRzVwYlhCdmNuUWdlMnh2WjBWMlpXNTBUbUZ0WlhNc0lHMWhjRXh2WjBWMlpXNTBjMzBnWm5KdmJTQW5jR3hoZVdWeVEyOXlaUzl3YkdGNWJHOW5KMXh1YVcxd2IzSjBJSHRwYzBSbGMydDBiM0I5SUdaeWIyMGdKM1YwYVd3dlpXNTJhWEp2Ym0xbGJuUW5YRzVwYlhCdmNuUWdjM1JoY25SVFpYTnphVzl1SUdaeWIyMGdKM0JzWVhsaVlXTnJVMlZ6YzJsdmJpOXpkR0Z5ZEZObGMzTnBiMjRuWEc1cGJYQnZjblFnY0hKbGJHOWhaRVJoZEdFZ1puSnZiU0FuY0d4aGVXSmhZMnRUWlhOemFXOXVMM0J5Wld4dllXUW5YRzVwYlhCdmNuUWdlMmRsZEZOdmRYSmpaVlI1Y0dWVFpYUjBhVzVuYzMwZ1puSnZiU0FuY0d4aGVXSmhZMnRUWlhOemFXOXVMM052ZFhKalpWUjVjR1VuWEc1cGJYQnZjblFnZTJOeVpXRjBaVUZ3YVN3Z1oyVjBRMjl1ZEdWdWRFbHVabThzSUdkbGRGTjBjbVZoYlVsdVptOTlJR1p5YjIwZ0ozQnNZWGxpWVdOclUyVnpjMmx2Ymk5aGNHa25YRzVwYlhCdmNuUWdlMnhwYm10QlpGTjBZWFJsTENCblpYUkJaRlZwZlNCbWNtOXRJQ2RoWkM5d2JHRjVaWEpKYm5SbFozSmhkR2x2YmlkY2JtbHRjRzl5ZENCN1JuVnVZM1JwYjI1Q1lYSkZlSFJsYm5OcGIyNHNJRWx1Wm05Q1lYSkZlSFJsYm5OcGIyNTlJR1p5YjIwZ0ozQnNZWGxsY2xWcEwzVnBSWGgwWlc1emFXOXVjeWRjYm1sdGNHOXlkQ0JRY21WdGFYVnRVR3hoZVdWeUlHWnliMjBnSjNCeVpXMXBkVzB2VUhKbGJXbDFiVkJzWVhsbGNpZGNibWx0Y0c5eWRDQkRZWE4wUW5WMGRHOXVJR1p5YjIwZ0ozQnlaVzFwZFcwdlEyRnpkRUoxZEhSdmJpZGNibWx0Y0c5eWRDQk1hWFpsUlc1a0lHWnliMjBnSjNCeVpXMXBkVzB2VEdsMlpVVnVaQ2RjYm1sdGNHOXlkQ0JCZFhSdmNHeGhlVkJ5YjIxd2RDQm1jbTl0SUNkd2NtVnRhWFZ0TDBGMWRHOXdiR0Y1VUhKdmJYQjBKMXh1YVcxd2IzSjBJRU52ZG1WeVNXMWhaMlVnWm5KdmJTQW5jSEpsYldsMWJTOURiM1psY2tsdFlXZGxKMXh1YVcxd2IzSjBJRkpsWTI5dGJXVnVaR0YwYVc5dVVHRnVaV3dnWm5KdmJTQW5jR3hoZVdWeVZXa3ZVbVZqYjIxdFpXNWtZWFJwYjI1UVlXNWxiQ2RjYm1sdGNHOXlkQ0J5WldSMVkyVlZhU3dnZTJsdWFYUlRkR0YwWlNCaGN5QnBibWwwYVdGc1ZXbFRkR0YwWlgwZ1puSnZiU0FuY0d4aGVXVnlMM04wYjNKbEwzSmxaSFZqWlhJdlZVa25YRzVwYlhCdmNuUWdkV2xCWTNScGIyNXpJR1p5YjIwZ0ozQnNZWGxsY2k5emRHOXlaUzloWTNScGIyNHZWVWtuWEc1cGJYQnZjblFnUTJGemRFOTJaWEpzWVhrZ1puSnZiU0FuY0d4aGVXVnlWV2t2UTJGemRFOTJaWEpzWVhrblhHNXBiWEJ2Y25RZ2UyeHZZV1JOWldScFlTd2djMlYwZFhCRFlYTjBMQ0J6ZFdKelkzSnBZbVZEWVhOMFUzUmhkR1Y5SUdaeWIyMGdKMk5oYzNRdlpuSmhiV1YzYjNKckoxeHVhVzF3YjNKMElIdERZWE4wVTNSaGRHVjlJR1p5YjIwZ0owVnVkVzBuWEc1cGJYQnZjblFnZTNWelpVTmhjM1JEYjI1MFpYaDBmU0JtY205dElDZGpZWE4wTDJOdmJuUmxlSFFuWEc1Y2JtTnZibk4wSUdkbGRFVnVkR1Z5Y0hKcGMyVkVjbTFJWldGa1pYSnpJRDBnS0h0MGIydGxibjBwSUQwK0lDaDdYRzRnSUNkWUxVTjFjM1J2YlMxRVlYUmhKem9nWUhSdmEyVnVYM1I1Y0dVOWNHeGhlV0poWTJzbWRHOXJaVzVmZG1Gc2RXVTlKSHQwYjJ0bGJuMWdMRnh1ZlNsY2JseHVZMjl1YzNRZ2NISmxiRzloWkUxaGNDQTlJRzVsZHlCTllYQW9LVnh1WEc1amIyNXpkQ0JRY21WdGFYVnRVR3gxYzFCc1lYbGxjaUE5SUNoN1hHNGdJR052Ym5SeWIyeHpMRnh1SUNCd2NtVnNiMkZrSUQwZ0oyRjFkRzhuTEZ4dUlDQndjbVZzYjJGa1RHbHpkQ0E5SUZ0ZExGeHVJQ0JqZFhKeVpXNTBWR2x0WlN4Y2JpQWdjWFZoYkdsMGVUb2dkR0Z5WjJWMFVYVmhiR2wwZVN4Y2JpQWdjMjkxY21ObFZIbHdaU3hjYmlBZ2FHOXpkQ3hjYmlBZ1lXTmpaWE56Vkc5clpXNHNYRzRnSUdSbGRtbGpaVWxrTEZ4dUlDQm9aV0ZrWlhKekxGeHVJQ0J3WVhKaGJYTXNYRzRnSUdOdmJuUmxiblJVZVhCbExGeHVJQ0JqYjI1MFpXNTBTV1FzWEc0Z0lHRjFkRzl3YkdGNVRtVjRkQ3hjYmlBZ2JHOXZjQ3hjYmlBZ2RHaDFiV0p1WVdsc1UyVmxhMmx1Wnl4Y2JpQWdjR3gxWjJsdWN5QTlJRnRkTEZ4dUlDQmpiM1psY2tsdFlXZGxWWEpzTEZ4dUlDQmpiM1psY2tsdFlXZGxSR2x6Y0d4aGVTQTlJQ2RoZFhSdkp5eGNiaUFnY21WamIyMXRaVzVrWVhScGIyNHNYRzRnSUhObFpXdERiMjVtYVdjZ1BTQW5ZWFYwYnljc1hHNGdJSFZwUld4bGJXVnVkSE02SUh0c2FYWmxRblYwZEc5dUxDQmpZWE4wUW5WMGRHOXVMQ0F1TGk1MWFVVnNaVzFsYm5SemZTQTlJSHQ5TEZ4dUlDQXZMeUJHU1ZoTlJUb2dRM1Z5Y21WdWRHeDVJSGRsSUhkcGJHd2daMlYwSUdCMWJtUmxabWx1WldSZ0lHWnliMjBnZEdobElHQndiR0Y1WlhKU1pXWmdJR0psWTJGMWMyVWdkMlVnZFhObElHbDBJSGRwZEdodmRYUWdZR1p2Y25kaGNtUlNaV1pnTGlCRGFHVmpheUJwWmlCM1pTQnVaV1ZrSUhSdklHWnBlQ0IwYUdseklHbHpjM1ZsWEc0Z0lIQnNZWGxsY2xKbFppeGNiaUFnWTJocGJHUnlaVzRzWEc0Z0lHOXVSWEp5YjNJc1hHNGdJRzl1UVhCcFJYSnliM0lzWEc0Z0lHOXVVR3hoZVdKaFkydFRkR0YwWlVOb1lXNW5aU3hjYmlBZ2IyNURhR0Z1WjJVc1hHNGdJRzl1VTI5MWNtTmxWSGx3WlVOb1lXNW5aV1FzWEc0Z0lHOXVVR3hoZVdKaFkydEJjR2xTWlhOd2IyNXpaU3hjYmlBZ2MyVnVaRXh2Wnl4Y2JpQWdjR3hoZVdKaFkydFRkR0YwWlRvZ1lYQndVR3hoZVdKaFkydFRkR0YwWlN4Y2JpQWdMaTR1Y21WemRGeHVmU2tnUFQ0Z2UxeHVJQ0JqYjI1emRDQjJhV1JsYjFKbFppQTlJSFZ6WlZKbFppZ3BYRzRnSUdOdmJuTjBJR3hoYzNSVFpYTnphVzl1SUQwZ2RYTmxVbVZtS0h0OUtWeHVJQ0JqYjI1emRDQnNiMmRVWVhKblpYUWdQU0IxYzJWU1pXWW9LVnh1SUNCamIyNXpkQ0J3Y21WbVpYSkJjSEJVYVcxbElEMGdkWE5sVW1WbUtHTjFjbkpsYm5SVWFXMWxJRDQ5SURBcFhHNGdJR052Ym5OMElGdHdiR0Y1WW1GamExTjBZWFJsTENCelpYUlFiR0Y1WW1GamExTjBZWFJsWFNBOUlIVnpaVk4wWVhSbEtDZHBibWwwYVdGc0p5bGNiaUFnWTI5dWMzUWdXM0JzWVhsaVlXTnJTVzVtYnl3Z2MyVjBVR3hoZVdKaFkydEpibVp2WFNBOUlIVnpaVk4wWVhSbEtIdHpiM1Z5WTJVNklIdDlmU2xjYmlBZ1kyOXVjM1FnVzJOdmJuUmxiblJFWVhSaExDQnpaWFJEYjI1MFpXNTBSR0YwWVYwZ1BTQjFjMlZUZEdGMFpTaDdmU2xjYmlBZ1kyOXVjM1FnVzNObGRIUnBibWRUZEdGMFpTd2djMlYwVTJWMGRHbHVaMU4wWVhSbFhTQTlJSFZ6WlZOMFlYUmxLSHRjYmlBZ0lDQnpaV04wYVc5dWN6b2dXMTBzWEc0Z0lDQWdjSEpsWm1WeWNtVmtPaUI3ZlN4Y2JpQWdmU2xjYmlBZ1kyOXVjM1FnVzNSaGNtZGxkRkJzWVhsaVlXTnJVM1JoZEdVc0lITmxkRlJoY21kbGRGQnNZWGxpWVdOclUzUmhkR1ZkSUQxY2JpQWdJQ0IxYzJWVGRHRjBaU2hoY0hCUWJHRjVZbUZqYTFOMFlYUmxLVnh1SUNCamIyNXpkQ0JiZFdsVGRHRjBaU3dnWkdsemNHRjBZMmhkSUQwZ2RYTmxVbVZrZFdObGNpaHlaV1IxWTJWVmFTd2dhVzVwZEdsaGJGVnBVM1JoZEdVcFhHNGdJR052Ym5OMElHRndhVU52Ym1acFp5QTlJSFZ6WlUxbGJXOG9YRzRnSUNBZ0tDa2dQVDRnS0h0b2IzTjBMQ0JoWTJObGMzTlViMnRsYml3Z1pHVjJhV05sU1dRc0lHaGxZV1JsY25Nc0lIQmhjbUZ0YzMwcExGeHVJQ0FnSUZ0b2IzTjBMQ0JoWTJObGMzTlViMnRsYml3Z1pHVjJhV05sU1dRc0lHaGxZV1JsY25Nc0lIQmhjbUZ0YzExY2JpQWdLVnh1WEc0Z0lDOHZJRkJ5YjNacFpHVWdkR2hsSUdOdmJuUmxiblFnWm5KdmJTQjBhR1VnWTJGamFHVWdZWE1nYzI5dmJpQmhjeUJ3YjNOemFXSnNaU0IzYUdWdUlIUm9aU0JqYjI1MFpXNTBJR2hoY3lCamFHRnVaMlZrWEc0Z0lIVnpaVVZtWm1WamRDZ29LU0E5UGlCN1hHNGdJQ0FnWTI5dWMzUWdaR0YwWVVsdVEyRmphR1VnUFNCd2NtVnNiMkZrVFdGd0xtZGxkQ2hnSkh0amIyNTBaVzUwVkhsd1pYMHZKSHRqYjI1MFpXNTBTV1I5WUNsY2JpQWdJQ0JwWmlBb1pHRjBZVWx1UTJGamFHVS9MbU52Ym5SbGJuUXBJSHRjYmlBZ0lDQWdJSE5sZEVOdmJuUmxiblJFWVhSaEtHZGxkRU52Ym5SbGJuUkpibVp2S0dSaGRHRkpia05oWTJobExtTnZiblJsYm5RcEtWeHVJQ0FnSUgxY2JpQWdmU3dnVzJOdmJuUmxiblJVZVhCbExDQmpiMjUwWlc1MFNXUmRLVnh1WEc0Z0lHTnZibk4wSUdWdVpGTmxjM05wYjI0Z1BTQW9lM0J5WlhObGNuWmxVMjkxY21ObGZTQTlJSHQ5S1NBOVBpQjdYRzRnSUNBZ2NISmxabVZ5UVhCd1ZHbHRaUzVqZFhKeVpXNTBJRDBnWm1Gc2MyVmNiaUFnSUNCcFppQW9iR0Z6ZEZObGMzTnBiMjR1WTNWeWNtVnVkRDh1Wlc1a0tTQjdYRzRnSUNBZ0lDQnNZWE4wVTJWemMybHZiaTVqZFhKeVpXNTBJRDBnZTF4dUlDQWdJQ0FnSUNCeVpYRjFaWE4wT2lCc1lYTjBVMlZ6YzJsdmJpNWpkWEp5Wlc1MExtVnVaQ2dwTEZ4dUlDQWdJQ0FnSUNBdUxpNG9jSEpsYzJWeWRtVlRiM1Z5WTJVZ0ppWWdlM052ZFhKalpYTTZJR3hoYzNSVFpYTnphVzl1TG1OMWNuSmxiblF1YzI5MWNtTmxjMzBwTEZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvSVhCeVpYTmxjblpsVTI5MWNtTmxLU0I3WEc0Z0lDQWdJQ0J6WlhSUWJHRjVZbUZqYTBsdVptOG9lM052ZFhKalpYTTZJRnRkZlNsY2JpQWdJQ0FnSUhObGRFTnZiblJsYm5SRVlYUmhLSHRqYUdGd2RHVnljem9nVzExOUtWeHVJQ0FnSUgxY2JpQWdmVnh1SUNCamIyNXpkQ0JoYkd4UWJIVm5hVzV6SUQwZ2NHeDFaMmx1YzF4dUlDQmpiMjV6ZENCc2IyRmtJRDBnWVhONWJtTWdLQ2tnUFQ0Z2UxeHVJQ0FnSUdOdmJuTjBJR3hoYzNSU1pYTjFiSFFnUFNCaGQyRnBkQ0JzWVhOMFUyVnpjMmx2Ymk1amRYSnlaVzUwTG5KbGNYVmxjM1JjYmlBZ0lDQnNiMmRVWVhKblpYUXVZM1Z5Y21WdWREOHVjbVZ6WlhRb0tWeHVJQ0FnSUdsbUlDaHNZWE4wVW1WemRXeDBJRDA5UFNBblkyRnVZMlZzSnlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1WEc0Z0lDQWdmVnh1SUNBZ0lITmxkRU52Ym5SbGJuUkVZWFJoS0h0M1lXbDBRMjl1ZEdWdWRFbHVabTg2SUdOdmJuUmxiblJVZVhCbElEMDlQU0FuZG1sa1pXOXpKMzBwWEc0Z0lDQWdZMjl1YzNRZ2NtVnpkRkJzWVhsbGNrNWhiV1VnUFNCYkozTm9ZV3RoSnl3Z0oySnBkRzF2ZG1sdUoxMHVabWx1WkNodVlXMWxJRDArSUc1aGJXVWdhVzRnY21WemRDbGNiaUFnSUNCc2IyZFVZWEpuWlhRdVkzVnljbVZ1ZENBOUlHMWhjRXh2WjBWMlpXNTBjeWg3WEc0Z0lDQWdJQ0J3YkdGNVpYSk9ZVzFsT2lCeVpYTjBVR3hoZVdWeVRtRnRaU0I4ZkNBbmMyaGhhMkVuTEZ4dUlDQWdJQ0FnZG1WeWMybHZiam9nWENJeExqRTFMakk1WENJc1hHNGdJQ0FnSUNCMmFXUmxiem9nZG1sa1pXOVNaV1l1WTNWeWNtVnVkQ3hjYmlBZ0lDQWdJR2RsZEZCc1lYbGlZV05yVTNSaGRIVnpPaUFvS1NBOVBpQm5aWFJOWldScFlWUnBiV1VvZG1sa1pXOVNaV1l1WTNWeWNtVnVkQ3dnWVd4c1VHeDFaMmx1Y3l3Z2NHeGhlV1Z5VW1WbUxtTjFjbkpsYm5RcExGeHVJQ0FnSUgwcFhHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCelpXNWtURzluSUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0JzYjJkVVlYSm5aWFF1WTNWeWNtVnVkQzVoYkd3b0tIUjVjR1VzSUdSaGRHRXBJRDArSUhObGJtUk1iMmNvYkc5blJYWmxiblJPWVcxbGMxdDBlWEJsWFN3Z1pHRjBZU2twWEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUhObGMzTnBiMjVQY0hScGIyNXpJRDBnZTF4dUlDQWdJQ0FnZEhsd1pUb2dZMjl1ZEdWdWRGUjVjR1VzWEc0Z0lDQWdJQ0JwWkRvZ1kyOXVkR1Z1ZEVsa0xGeHVJQ0FnSUNBZ2JXVmthV0U2SUhacFpHVnZVbVZtTG1OMWNuSmxiblFzWEc0Z0lDQWdJQ0JuWlhSRGRYSnlaVzUwVkdsdFpUb2dLQ2tnUFQ0Z1oyVjBUV1ZrYVdGVWFXMWxLSFpwWkdWdlVtVm1MbU4xY25KbGJuUXNJSEJzZFdkcGJuTXNJSEJzWVhsbGNsSmxaaTVqZFhKeVpXNTBLUzVqZFhKeVpXNTBWR2x0WlN4Y2JpQWdJQ0FnSUc5dVEyaGhibWRsUTI5dWRHVnVkRG9nWkdGMFlTQTlQaUI3WEc0Z0lDQWdJQ0FnSUc5dVVHeGhlV0poWTJ0QmNHbFNaWE53YjI1elpUOHVLQ2RqYjI1MFpXNTBKeXdnWkdGMFlTbGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1kzVnljbVZ1ZEVOdmJuUmxiblFnUFNCblpYUkRiMjUwWlc1MFNXNW1ieWhrWVhSaEtWeHVJQ0FnSUNBZ0lDQnpaWFJEYjI1MFpXNTBSR0YwWVNoamRYSnlaVzUwUTI5dWRHVnVkQ2xjYmlBZ0lDQWdJQ0FnYkc5blZHRnlaMlYwTG1OMWNuSmxiblF1ZFhCa1lYUmxRMjl1ZEdWdWRDaDdYRzRnSUNBZ0lDQWdJQ0FnTGk0dVoyVjBRMjl1ZEdWdWRFbHVabThvWkdGMFlTa3NYRzRnSUNBZ0lDQWdJQ0FnZEhsd1pUb2dZMjl1ZEdWdWRGUjVjR1VzWEc0Z0lDQWdJQ0FnSUNBZ2FXUTZJR052Ym5SbGJuUkpaQ3hjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCdmJrbHVkbUZzYVdSVWIydGxiam9nS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JqYjI1emIyeGxMbXh2WnlnbmFXNTJZV3hwWkNCMGIydGxiaXdnY21WemRHRnlkQ0J6WlhOemFXOXVKeWxjYmlBZ0lDQWdJQ0FnWlc1a1UyVnpjMmx2YmloN2NISmxjMlZ5ZG1WVGIzVnlZMlU2SUhSeWRXVjlLVnh1SUNBZ0lDQWdJQ0JzYjJGa0tDbGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQnZibE52ZFhKalpVTm9ZVzVuWlRvZ2JtVjNVMjkxY21ObGN5QTlQaUI3WEc0Z0lDQWdJQ0FnSUd4aGMzUlRaWE56YVc5dUxtTjFjbkpsYm5RdWMyOTFjbU5sY3lBOUlHNWxkMU52ZFhKalpYTmNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sVTJWMGRHbHVaM01nUFNCblpYUlRiM1Z5WTJWVWVYQmxVMlYwZEdsdVozTW9ibVYzVTI5MWNtTmxjeWxjYmlBZ0lDQWdJQ0FnYVdZZ0tITnZkWEpqWlZObGRIUnBibWR6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjMlYwVTJWMGRHbHVaMU4wWVhSbEtHTjFjbkpsYm5RZ1BUNGdLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDNHVMbU4xY25KbGJuUXNYRzRnSUNBZ0lDQWdJQ0FnSUNCelpXTjBhVzl1Y3pvZ1czTnZkWEpqWlZObGRIUnBibWR6WFN4Y2JpQWdJQ0FnSUNBZ0lDQjlLU2xjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUhKbGNYVmxjM1JPWlhkVFpYTnphVzl1T2lBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdWdVpGTmxjM05wYjI0b0tWeHVJQ0FnSUNBZ0lDQnNiMkZrS0NsY2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCdmJsTmxjM05wYjI1VGRHRnlkRG9nY21WelJHRjBZU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHOXVVR3hoZVdKaFkydEJjR2xTWlhOd2IyNXpaVDh1S0NkemRHRnlkQ2NzSUhKbGMwUmhkR0VwWEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnWTJGamFHVTZJSEJ5Wld4dllXUk5ZWEFzWEc0Z0lDQWdmVnh1SUNBZ0lDOHZJRlJQUkU4Z2FXZHViM0psSUd4cGRtVWdaVzVrSUdWeWNtOXlJR1p5YjIwZ0wzTjBZWEowSUM5cGJtWnZYRzRnSUNBZ0x5OGdWRTlFVHlCMGNua2dkRzhnWTJ4bFlYSWdjMlZ6YzJsdmJpQnZiaUJsY25KdmNseHVJQ0FnSUhOMFlYSjBVMlZ6YzJsdmJpaGpjbVZoZEdWQmNHa29ZWEJwUTI5dVptbG5MQ0I3YjI1RmNuSnZjam9nYjI1QmNHbEZjbkp2Y24wcExDQnpaWE56YVc5dVQzQjBhVzl1Y3lsY2JpQWdJQ0FnSUM1MGFHVnVLR04xY25KbGJuUlRaWE56YVc5dUlEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdGemRGTmxjM05wYjI0dVkzVnljbVZ1ZENBOUlHTjFjbkpsYm5SVFpYTnphVzl1WEc0Z0lDQWdJQ0FnSUhObGRGQnNZWGxpWVdOclNXNW1ieWg3WEc0Z0lDQWdJQ0FnSUNBZ2MyOTFjbU5sY3pvZ1kzVnljbVZ1ZEZObGMzTnBiMjR1YzI5MWNtTmxjeXhjYmlBZ0lDQWdJQ0FnSUNCMGIydGxiam9nWTNWeWNtVnVkRk5sYzNOcGIyNHVkRzlyWlc0c1hHNGdJQ0FnSUNBZ0lDQWdaSEp0VUc5eWRHRnNWWEpzT2lCamRYSnlaVzUwVTJWemMybHZiaTVrY20xUWIzSjBZV3hWY213c1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQzh2SUdsdUlHTmhjMlVnWTI5dWRHVnVkQ0JCVUVrZ1ptRnBiQ3dnY0d4aGVTQnBkQ0JoYm5sM1lYa2dkMmwwYUc5MWRDQnpkR0Z5ZEZScGJXVmNiaUFnSUNBZ0lDQWdjMlYwUTI5dWRHVnVkRVJoZEdFb1kzVnljbVZ1ZENBOVBpQW9leTR1TG1OMWNuSmxiblFzSUhkaGFYUkRiMjUwWlc1MFNXNW1iem9nWm1Gc2MyVjlLU2xjYmlBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0F1WTJGMFkyZ29jbVZ6ZFd4MElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaWEp5YjNKRVlYUmhJRDBnY21WemRXeDBMbkpsYzNCdmJuTmxQeTVrWVhSaFB5NWxjbkp2Y2x4dUlDQWdJQ0FnSUNCamIyNXpkQ0JsY25KdmNpQTlJR1Z5Y205eVJHRjBZVnh1SUNBZ0lDQWdJQ0FnSUQ4Z2UyNWhiV1U2SUNkUWJHRjVZM0poWm5SQmNHbEZjbkp2Y2ljc0lDNHVMbVZ5Y205eVJHRjBZWDFjYmlBZ0lDQWdJQ0FnSUNBNklISmxjM1ZzZEZ4dUlDQWdJQ0FnSUNCamIyNXpiMnhsTG5kaGNtNG9aWEp5YjNJcFhHNGdJQ0FnSUNBZ0lIWnBaR1Z2VW1WbUxtTjFjbkpsYm5RdVpHbHpjR0YwWTJoRmRtVnVkQ2hjYmlBZ0lDQWdJQ0FnSUNCUFltcGxZM1F1WVhOemFXZHVLRzVsZHlCRGRYTjBiMjFGZG1WdWRDZ25aWEp5YjNJbktTd2dlMlZ5Y205eWZTbGNiaUFnSUNBZ0lDQWdLVnh1SUNBZ0lDQWdmU2xjYmlBZ2ZWeHVJQ0JqYjI1emRDQmhZM1JwZG1WRVpYWnBZMlVnUFNBaEwyTmhjM1JwYm1kOFpYSnliM0l2TG5SbGMzUW9jR3hoZVdKaFkydFRkR0YwWlNsY2JpQWdkWE5sUldabVpXTjBLQ2dwSUQwK0lIdGNiaUFnSUNCcFppQW9ZWEJ3VUd4aGVXSmhZMnRUZEdGMFpTa2dlMXh1SUNBZ0lDQWdjMlYwVkdGeVoyVjBVR3hoZVdKaFkydFRkR0YwWlNoaGNIQlFiR0Y1WW1GamExTjBZWFJsS1Z4dUlDQWdJSDFjYmlBZ2ZTd2dXMkZ3Y0ZCc1lYbGlZV05yVTNSaGRHVmRLVnh1SUNCMWMyVkZabVpsWTNRb0tDa2dQVDRnZTF4dUlDQWdJR2xtSUNod2NtVnNiMkZrSUQwOVBTQW5ZWFYwYnljZ0ppWWdZV04wYVhabFJHVjJhV05sSUNZbUlHTnZiblJsYm5SVWVYQmxJQ1ltSUdOdmJuUmxiblJKWkNrZ2UxeHVJQ0FnSUNBZ2JHOWhaQ2dwWEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlBb0tTQTlQaUJsYm1SVFpYTnphVzl1S0NsY2JpQWdmU3dnVzJGamRHbDJaVVJsZG1salpTd2dZMjl1ZEdWdWRGUjVjR1VzSUdOdmJuUmxiblJKWkYwcFhHNGdJSFZ6WlVWbVptVmpkQ2hjYmlBZ0lDQW9LU0E5UGx4dUlDQWdJQ0FnY0hKbGJHOWhaRVJoZEdFb1hHNGdJQ0FnSUNBZ0lHTnlaV0YwWlVGd2FTaGhjR2xEYjI1bWFXY3BMRnh1SUNBZ0lDQWdJQ0J3Y21Wc2IyRmtUR2x6ZEN4Y2JpQWdJQ0FnSUNBZ2UybGtPaUJqYjI1MFpXNTBTV1FzSUhSNWNHVTZJR052Ym5SbGJuUlVlWEJsZlN4Y2JpQWdJQ0FnSUNBZ2NISmxiRzloWkUxaGNGeHVJQ0FnSUNBZ0tTeGNiaUFnSUNCYllYQnBRMjl1Wm1sbkxDQmpiMjUwWlc1MFNXUXNJR052Ym5SbGJuUlVlWEJsTENCd2NtVnNiMkZrVEdsemRGMWNiaUFnS1Z4dUlDQjFjMlZKYlhCbGNtRjBhWFpsU0dGdVpHeGxLSEJzWVhsbGNsSmxaaXdnS0NrZ1BUNGdLSHRjYmlBZ0lDQnNiMkZrTEZ4dUlDQWdJR2RsZEZacFpHVnZPaUFvS1NBOVBpQjJhV1JsYjFKbFppNWpkWEp5Wlc1MExGeHVJQ0I5S1NsY2JpQWdkWE5sUldabVpXTjBLRnh1SUNBZ0lDZ3BJRDArWEc0Z0lDQWdJQ0JzYVc1clFXUlRkR0YwWlNoN1hHNGdJQ0FnSUNBZ0lHTnZiblJsYm5SVWVYQmxMRnh1SUNBZ0lDQWdJQ0J3YkhWbmFXNXpMRnh1SUNBZ0lDQWdJQ0JrYVhOd1lYUmphQ3hjYmlBZ0lDQWdJQ0FnTHk4Z1ZHOGdZV3hwWjI0Z2QybDBhQ0JwVDFNZ0ppQkJibVJ5YjJsa0xDQndiR0Y1SUhSb1pTQjJhV1JsYnlCaFpuUmxjaUIwYUdVZ1lXUWdhWE1nYzJ0cGNIQmxaQ0JsZG1WdUlHbG1JR2wwY3lCd1lYVnpaV1FnYjNKcFoybHVZV3hzZVM1Y2JpQWdJQ0FnSUNBZ2IyNUJaRk5yYVhBNklDZ3BJRDArSUhObGRGUmhjbWRsZEZCc1lYbGlZV05yVTNSaGRHVW9KM0JzWVhscGJtY25LU3hjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJRnRqYjI1MFpXNTBWSGx3WlYxY2JpQWdLVnh1SUNCMWMyVkZabVpsWTNRb0tDa2dQVDRnZTF4dUlDQWdJR2xtSUNoemIzVnlZMlZVZVhCbEtTQjdYRzRnSUNBZ0lDQnpaWFJUWlhSMGFXNW5VM1JoZEdVb1kzVnljbVZ1ZENBOVBpQW9lMXh1SUNBZ0lDQWdJQ0F1TGk1amRYSnlaVzUwTEZ4dUlDQWdJQ0FnSUNCMllXeDFaWE02SUh0Y2JpQWdJQ0FnSUNBZ0lDQXVMaTVqZFhKeVpXNTBMblpoYkhWbGN5eGNiaUFnSUNBZ0lDQWdJQ0FuYzI5MWNtTmxMWFI1Y0dVbk9pQnpiM1Z5WTJWVWVYQmxMRnh1SUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNCd2NtVm1aWEp5WldRNklIdGNiaUFnSUNBZ0lDQWdJQ0F1TGk1amRYSnlaVzUwTG5CeVpXWmxjbkpsWkN4Y2JpQWdJQ0FnSUNBZ0lDQW5jMjkxY21ObExYUjVjR1VuT2lCemIzVnlZMlZVZVhCbExGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdmU2twWEc0Z0lDQWdmVnh1SUNCOUxDQmJjMjkxY21ObFZIbHdaVjBwWEc1Y2JpQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ2RYTmxUV1Z0YnloY2JpQWdJQ0FvS1NBOVBseHVJQ0FnSUNBZ1oyVjBVM1J5WldGdFNXNW1ieWh3YkdGNVltRmphMGx1Wm04dWMyOTFjbU5sY3l3Z2UxeHVJQ0FnSUNBZ0lDQjBlWEJsT2lCelpYUjBhVzVuVTNSaGRHVXVjSEpsWm1WeWNtVmtXeWR6YjNWeVkyVXRkSGx3WlNkZExGeHVJQ0FnSUNBZ0lDQnNhV05sYm5ObFZYSnBPaUJ3YkdGNVltRmphMGx1Wm04dVpISnRVRzl5ZEdGc1ZYSnNMRnh1SUNBZ0lDQWdJQ0JzYVdObGJuTmxTR1ZoWkdWeWN6b2daMlYwUlc1MFpYSndjbWx6WlVSeWJVaGxZV1JsY25Nb2UzUnZhMlZ1T2lCd2JHRjVZbUZqYTBsdVptOHVkRzlyWlc1OUtTeGNiaUFnSUNBZ0lDQWdkR2gxYldKdVlXbHNSVzVoWW14bFpEb2dkR2gxYldKdVlXbHNVMlZsYTJsdVp5eGNiaUFnSUNBZ0lIMHBMRnh1SUNBZ0lGdGNiaUFnSUNBZ0lDRmpiMjUwWlc1MFJHRjBZUzUzWVdsMFEyOXVkR1Z1ZEVsdVptOGdKaVlnY0d4aGVXSmhZMnRKYm1adkxGeHVJQ0FnSUNBZ2MyVjBkR2x1WjFOMFlYUmxMbkJ5WldabGNuSmxaRnNuYzI5MWNtTmxMWFI1Y0dVblhTeGNiaUFnSUNBZ0lIUm9kVzFpYm1GcGJGTmxaV3RwYm1jc1hHNGdJQ0FnWFZ4dUlDQXBYRzVjYmlBZ0x5OGdWRTlFVHpvZ1pYaDBjbUZqZENBL0lHTmhjM1FnZEdocGJtZHpYRzRnSUdOdmJuTjBJSHRoY0hCSlpIMGdQU0IxYzJWRFlYTjBRMjl1ZEdWNGRDZ3BYRzRnSUhWelpVVm1abVZqZENnb0tTQTlQaUI3WEc0Z0lDQWdZMjl1YzNRZ2MyVjBkWEFnUFNCelpYUjFjRU5oYzNRb2UyRndjRWxrZlNrdWRHaGxiaWdvS1NBOVBseHVJQ0FnSUNBZ2MzVmljMk55YVdKbFEyRnpkRk4wWVhSbEtHNWxlSFFnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRDQTlQVDBnUTJGemRGTjBZWFJsTGtOUFRrNUZRMVJGUkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSE5sZEZCc1lYbGlZV05yVTNSaGRHVW9KMk5oYzNScGJtY25LVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDaGNiaUFnSUNBZ0lDQWdJQ0J1WlhoMElEMDlQU0JEWVhOMFUzUmhkR1V1VGs5ZlJFVldTVU5GVTE5QlZrRkpURUZDVEVVZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0J1WlhoMElEMDlQU0JEWVhOMFUzUmhkR1V1VGs5VVgwTlBUazVGUTFSRlJGeHVJQ0FnSUNBZ0lDQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCelpYUlFiR0Y1WW1GamExTjBZWFJsS0Nkc2IyRmthVzVuSnlsY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTbGNiaUFnSUNBcFhHNGdJQ0FnY21WMGRYSnVJQ2dwSUQwK0lITmxkSFZ3TG5Sb1pXNG9jbVZ0YjNabFRHbHpkR1Z1WlhJZ1BUNGdjbVZ0YjNabFRHbHpkR1Z1WlhJb0tTbGNiaUFnZlN3Z1cyRndjRWxrWFNsY2JpQWdZMjl1YzNRZ1kyRnpkRU52Ym01bFkzUmxaQ0E5SUhCc1lYbGlZV05yVTNSaGRHVWdQVDA5SUNkallYTjBhVzVuSjF4dUlDQjFjMlZGWm1abFkzUW9LQ2tnUFQ0Z2UxeHVJQ0FnSUdsbUlDaGpZWE4wUTI5dWJtVmpkR1ZrSUNZbUlHTnZiblJsYm5SSlpDa2dlMXh1SUNBZ0lDQWdiRzloWkUxbFpHbGhLSHRqYjI1MFpXNTBTV1FzSUdOdmJuUmxiblJVZVhCbExDQmhjR2xEYjI1bWFXZDlLVnh1SUNBZ0lIMWNiaUFnSUNBdkx5QnphRzkxYkdRZ2EyVmxjQ0JqYjI1dVpXTjBhVzl1SUdGbWRHVnlJSFZ1Ylc5MWJuUmNiaUFnZlN3Z1cyTmhjM1JEYjI1dVpXTjBaV1FzSUdOdmJuUmxiblJKWkN3Z1kyOXVkR1Z1ZEZSNWNHVXNJR0Z3YVVOdmJtWnBaMTBwWEc1Y2JpQWdZMjl1YzNRZ2MyVmxhMkpoY2tocFpHVWdQVnh1SUNBZ0lDRnpaV1ZyUTI5dVptbG5JSHg4WEc0Z0lDQWdLR052Ym5SbGJuUlVlWEJsSUQwOVBTQW5iR2wyWlhNbklDWW1YRzRnSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdibTh0ZFc1ellXWmxMVzl3ZEdsdmJtRnNMV05vWVdsdWFXNW5YRzRnSUNBZ0lDQWhLR052Ym5SbGJuUkVZWFJoTG5ObFkzUnBiMjQvTG1WdVpDQXRJR052Ym5SbGJuUkVZWFJoTG5ObFkzUnBiMjQvTG5OMFlYSjBJRDRnTUNrcFhHNWNiaUFnY21WMGRYSnVJSEJzWVhsaVlXTnJVM1JoZEdVZ1BUMDlJQ2RqWVhOMGFXNW5KeUEvSUNoY2JpQWdJQ0E4UTJGemRFOTJaWEpzWVhrZ0x6NWNiaUFnS1NBNklDaGNiaUFnSUNBOFVISmxiV2wxYlZCc1lYbGxjbHh1SUNBZ0lDQWdjMjkxY21ObFBYdHdiR0Y1WW1GamExTjBZWFJsSUNFOVBTQW5aWEp5YjNJbklDWW1JSE52ZFhKalpYMWNiaUFnSUNBZ0lHTjFjbkpsYm5SVWFXMWxQWHR3Y21WbVpYSkJjSEJVYVcxbExtTjFjbkpsYm5RZ1B5QmpkWEp5Wlc1MFZHbHRaU0E2SUdOdmJuUmxiblJFWVhSaExuTjBZWEowVkdsdFpYMWNiaUFnSUNBZ0lHTnZiblJ5YjJ4elBYdGNiaUFnSUNBZ0lDQWdkV2xUZEdGMFpTNWhZM1JwZG1WUVlXNWxiQ0E5UFQwZ0oyRjFkRzl3YkdGNUxXNWxlSFFuWEc0Z0lDQWdJQ0FnSUNBZ1B5QW5kR2wwYkdVdGIyNXNlU2RjYmlBZ0lDQWdJQ0FnSUNBNklIVnBVM1JoZEdVdVlXTjBhWFpsVUdGdVpXd2dQVDA5SUNkeVpXTnZiVzFsYm1SaGRHbHZiaWRjYmlBZ0lDQWdJQ0FnSUNBL0lDZHVieTF3WVc1bGJDZGNiaUFnSUNBZ0lDQWdJQ0E2SUdOdmJuUnliMnh6WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IwYVhSc1pUMTdZMjl1ZEdWdWRFUmhkR0V1ZEdsMGJHVjlYRzRnSUNBZ0lDQmphR0Z1Ym1Wc1ZHbDBiR1U5ZTJOdmJuUmxiblJFWVhSaExtTm9ZVzV1Wld4VWFYUnNaWDFjYmlBZ0lDQWdJSE5sWTNScGIyNDllMk52Ym5SbGJuUkVZWFJoTG5ObFkzUnBiMjU5WEc0Z0lDQWdJQ0J4ZFdGc2FYUjVQWHQwWVhKblpYUlJkV0ZzYVhSNWZWeHVJQ0FnSUNBZ2MyVjBkR2x1WjNNOWUzTmxkSFJwYm1kVGRHRjBaWDFjYmlBZ0lDQWdJSE5sWld0aVlYSklhV1JsUFh0elpXVnJZbUZ5U0dsa1pYMWNiaUFnSUNBZ0lHeHZiM0E5ZTJ4dmIzQjlYRzRnSUNBZ0lDQndiSFZuYVc1elBYdGhiR3hRYkhWbmFXNXpmVnh1SUNBZ0lDQWdkbWxrWlc5U1pXWTllM1pwWkdWdlVtVm1mVnh1SUNBZ0lDQWdiV0Z5YTNNOWUzVnBVM1JoZEdVdWMzUnlaV0Z0UlhabGJuUnpQeTV0WVhBb1pYWmxiblFnUFQ0Z1pYWmxiblF1YzNSaGNuUXBmVnh1SUNBZ0lDQWdiMjVGY25KdmNqMTdiMjVGY25KdmNuMWNiaUFnSUNBZ0lITmxibVJNYjJjOWV5aHVZVzFsTENCa1lYUmhLU0E5UGlCc2IyZFVZWEpuWlhRdVkzVnljbVZ1ZEQ4dVpXMXBkQ2h1WVcxbExDQmtZWFJoS1gxY2JpQWdJQ0FnSUc5dVVHeGhlV0poWTJ0VGRHRjBaVU5vWVc1blpUMTdLR1YyWlc1MExDQnpkR0YwWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0J6WlhSUWJHRjVZbUZqYTFOMFlYUmxLSE4wWVhSbEtWeHVJQ0FnSUNBZ0lDQnBaaUFvYzNSaGRHVWdQVDA5SUNkbGNuSnZjaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNZWE4wVTJWemMybHZiaTVqZFhKeVpXNTBMbVZ1WkQ4dUtDbGNiaUFnSUNBZ0lDQWdJQ0JzWVhOMFUyVnpjMmx2Ymk1amRYSnlaVzUwSUQwZ2UzMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JwWmlBb1hHNGdJQ0FnSUNBZ0lDQWdLSE4wWVhSbElEMDlQU0FuY0dGMWMyVmtKeUFtSmlCd2JHRjVZbUZqYTFOMFlYUmxJQ0U5UFNBbmJHOWhaR2x1WnljcElIeDhYRzRnSUNBZ0lDQWdJQ0FnWlhabGJuUXVkSGx3WlNBOVBUMGdKM05sWld0cGJtY25YRzRnSUNBZ0lDQWdJQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHeGhjM1JUWlhOemFXOXVMbU4xY25KbGJuUXVkWEJrWVhSbFRHRnpkRkJzWVhsbFpEOHVLQ2xjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCcFppQW9jM1JoZEdVZ1BUMDlJQ2RsYm1SbFpDY3BJSHRjYmlBZ0lDQWdJQ0FnSUNCa2FYTndZWFJqYUNoMWFVRmpkR2x2Ym5NdWNHeGhlV0poWTJ0RmJtUW9LU2xjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlgxY2JpQWdJQ0FnSUc5dVEyaGhibWRsVG1WNGREMTdZMjl1ZEdWdWRFUmhkR0V1Ym1WNGRDQW1KaUFvS0NrZ1BUNGdiMjVEYUdGdVoyVS9MaWhqYjI1MFpXNTBSR0YwWVM1dVpYaDBLU2w5WEc0Z0lDQWdJQ0J2YmtOb1lXNW5aVkJ5WlhacGIzVnpQWHRjYmlBZ0lDQWdJQ0FnWTI5dWRHVnVkRVJoZEdFdWNISmxkbWx2ZFhNZ0ppWWdLQ2dwSUQwK0lHOXVRMmhoYm1kbFB5NG9ZMjl1ZEdWdWRFUmhkR0V1Y0hKbGRtbHZkWE1wS1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYjI1RGFHRnVaMlZUWlhSMGFXNW5jejE3S0h0dVlXMWxMQ0IyWVd4MVpYMHBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLRzVoYldVZ1BUMDlJQ2R6YjNWeVkyVXRkSGx3WlNjcElIdGNiaUFnSUNBZ0lDQWdJQ0J6WlhSVFpYUjBhVzVuVTNSaGRHVW9ZM1Z5Y21WdWRDQTlQaUFvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMaTR1WTNWeWNtVnVkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIQnlaV1psY25KbFpEb2dleWR6YjNWeVkyVXRkSGx3WlNjNklIWmhiSFZsZlN4Y2JpQWdJQ0FnSUNBZ0lDQjlLU2xjYmlBZ0lDQWdJQ0FnSUNCdmJsTnZkWEpqWlZSNWNHVkRhR0Z1WjJWa1B5NG9kbUZzZFdVcFhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMTlYRzRnSUNBZ0lDQjFhVVZzWlcxbGJuUnpQWHQ3WEc0Z0lDQWdJQ0FnSUM0dUxuVnBSV3hsYldWdWRITXNYRzRnSUNBZ0lDQWdJQzR1TGloamIyNTBaVzUwUkdGMFlUOHVZMmhoYm01bGJFbGpiMjRnSmlZZ2UxeHVJQ0FnSUNBZ0lDQWdJR05vWVc1dVpXeEpZMjl1T2lBb1hHNGdJQ0FnSUNBZ0lDQWdJQ0E4YVcxblhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdGc2REMWNJbU5vWVc1dVpXd2dhV052Ymx3aVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdOemN6MTdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGRwWkhSb09pQW5NbVZ0Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCb1pXbG5hSFE2SUNjeVpXMG5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0p2Y21SbGNsSmhaR2wxY3pvZ0p6QXVNalZsYlNjc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JXRnlaMmx1T2lBbk1DNDNOV1Z0Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltcGxZM1JHYVhRNklDZGpiM1psY2ljc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgxOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOeVl6MTdZMjl1ZEdWdWRFUmhkR0V1WTJoaGJtNWxiRWxqYjI1OVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2UGx4dUlDQWdJQ0FnSUNBZ0lDa3NYRzRnSUNBZ0lDQWdJSDBwTEZ4dUlDQWdJQ0FnSUNBdUxpNG9kV2xUZEdGMFpTNWhaQzUwYjNSaGJDQStJREFnSmlaY2JpQWdJQ0FnSUNBZ0lDQm5aWFJCWkZWcEtIVnBVM1JoZEdVdVlXUXNJSEJzZFdkcGJuTXNJSFpwWkdWdlVtVm1MbU4xY25KbGJuUXBLU3hjYmlBZ0lDQWdJSDE5WEc0Z0lDQWdJQ0J2ZG1WeWNtbGtaVk5sZEhScGJtZFRaV04wYVc5dWN6MTdjMlZqZEdsdmJuTWdQVDRnZTF4dUlDQWdJQ0FnSUNBdkx5QlRjR1ZsWkNCelpXTjBhVzl1Y3lCM2FXeHNJR0psSUhCeWIzWnBaR1ZrSUdadmNpQldUMFFnWTI5dWRHVnVkQ0JpZVNCa1pXWmhkV3gwSUdsdUlGQnlaVzFwZFcxUWJHRjVaWEl1SUZkbElIZGhiblFnZEc4Z2FHbGtaU0JwZENCbWIzSWdjMlZzWmlCc2FXNWxZWEl1WEc0Z0lDQWdJQ0FnSUdsbUlDaGpiMjUwWlc1MFZIbHdaU0E5UFQwZ0oyeHBkbVZ6SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnpaV04wYVc5dWN5NW1hV3gwWlhJb2N5QTlQaUJ6TG01aGJXVWdJVDA5SUNkemNHVmxaQ2NwWEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhObFkzUnBiMjV6WEc0Z0lDQWdJQ0I5ZlZ4dUlDQWdJQ0FnY0d4aGVXSmhZMnRUZEdGMFpUMTdkR0Z5WjJWMFVHeGhlV0poWTJ0VGRHRjBaWDFjYmlBZ0lDQWdJSHN1TGk1eVpYTjBmVnh1SUNBZ0lDQWdjM1I1YkdVOWUzSmxZMjl0YldWdVpHRjBhVzl1SUNZbUlIc25MUzFpYjNSMGIyMHRjM0JoWTJsdVp5YzZJQ2MxY21WdEozMTlYRzRnSUNBZ1BseHVJQ0FnSUNBZ2UyTm9hV3hrY21WdWZWeHVJQ0FnSUNBZ2UyTmhjM1JDZFhSMGIyNGdQVDA5SUdaaGJITmxJRDhnS0Z4dUlDQWdJQ0FnSUNBbkoxeHVJQ0FnSUNBZ0tTQTZJQ2hjYmlBZ0lDQWdJQ0FnUEVaMWJtTjBhVzl1UW1GeVJYaDBaVzV6YVc5dVBseHVJQ0FnSUNBZ0lDQWdJRHhEWVhOMFFuVjBkRzl1SUdOdmJuUmxiblJKWkQxN1kyOXVkR1Z1ZEVsa2ZTQmtZWFJoUFh0N1kyOXVkR1Z1ZEZSNWNHVXNJR0Z3YVVOdmJtWnBaMzE5SUM4K1hHNGdJQ0FnSUNBZ0lEd3ZSblZ1WTNScGIyNUNZWEpGZUhSbGJuTnBiMjQrWEc0Z0lDQWdJQ0FwZlZ4dUlDQWdJQ0FnZXlGc2IyOXdJQ1ltSUdGMWRHOXdiR0Y1VG1WNGRDQW1KaUJqYjI1MFpXNTBSR0YwWVM1dVpYaDBJQ1ltSUNoY2JpQWdJQ0FnSUNBZ1BFRjFkRzl3YkdGNVVISnZiWEIwWEc0Z0lDQWdJQ0FnSUNBZ2JtVjRkRDE3WTI5dWRHVnVkRVJoZEdFdWJtVjRkSDFjYmlBZ0lDQWdJQ0FnSUNCamFHRndkR1Z5Y3oxN1kyOXVkR1Z1ZEVSaGRHRXVZMmhoY0hSbGNuTjlYRzRnSUNBZ0lDQWdJQ0FnZG1sa1pXOVNaV1k5ZTNacFpHVnZVbVZtZlZ4dUlDQWdJQ0FnSUNBZ0lIQnNZWGxpWVdOclUzUmhkR1U5ZTNCc1lYbGlZV05yVTNSaGRHVjlYRzRnSUNBZ0lDQWdJQ0FnWjJWMFRXVmthV0U5ZXlncElEMCtJR2RsZEUxbFpHbGhWR2x0WlNoMmFXUmxiMUpsWmk1amRYSnlaVzUwTENCd2JIVm5hVzV6S1gxY2JpQWdJQ0FnSUNBZ0lDQnZia05vWVc1blpVNWxlSFE5ZXlncElEMCtJRzl1UTJoaGJtZGxQeTRvWTI5dWRHVnVkRVJoZEdFdWJtVjRkQ2w5WEc0Z0lDQWdJQ0FnSUNBZ2IyNVBjR1Z1UFh0emRHRjBaU0E5UGlCa2FYTndZWFJqYUNoMWFVRmpkR2x2Ym5NdWIyWm1aWEpCZFhSdmNHeGhlU2h6ZEdGMFpTa3BmVnh1SUNBZ0lDQWdJQ0FnSUc5dVJHbHpiV2x6Y3oxN0tDa2dQVDRnWkdsemNHRjBZMmdvZFdsQlkzUnBiMjV6TG1ScGMyMXBjM05CZFhSdmNHeGhlU2dwS1gxY2JpQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQjdjbVZqYjIxdFpXNWtZWFJwYjI0Z0ppWWdhWE5FWlhOcmRHOXdLQ2tnSmlZZ0tGeHVJQ0FnSUNBZ0lDQThVbVZqYjIxdFpXNWtZWFJwYjI1UVlXNWxiRnh1SUNBZ0lDQWdJQ0FnSUhScGRHeGxQWHR5WldOdmJXMWxibVJoZEdsdmJpNTBhWFJzWlgxY2JpQWdJQ0FnSUNBZ0lDQnZjR1Z1UFh0MWFWTjBZWFJsTG1GamRHbDJaVkJoYm1Wc0lEMDlQU0FuY21WamIyMXRaVzVrWVhScGIyNG5mVnh1SUNBZ0lDQWdJQ0FnSUc5dVZHOW5aMnhsUFhzb0tTQTlQaUJrYVhOd1lYUmphQ2gxYVVGamRHbHZibk11ZEc5bloyeGxVbVZqYjIxdFpXNWtZWFJwYjI1UVlXNWxiQ2dwS1gxY2JpQWdJQ0FnSUNBZ1BseHVJQ0FnSUNBZ0lDQWdJSHR5WldOdmJXMWxibVJoZEdsdmJpNWpiMjUwWlc1MGZWeHVJQ0FnSUNBZ0lDQThMMUpsWTI5dGJXVnVaR0YwYVc5dVVHRnVaV3crWEc0Z0lDQWdJQ0FwZlZ4dUlDQWdJQ0FnZTJOdmJuUmxiblJFWVhSaExtVnVaQ0FtSmlBOFRHbDJaVVZ1WkNBdlBuMWNiaUFnSUNBZ0lIc29ZMjkyWlhKSmJXRm5aVVJwYzNCc1lYa2dQVDA5SUNkaGJIZGhlWE1uSUh4OFhHNGdJQ0FnSUNBZ0lDaHdjbVZzYjJGa0lEMDlQU0FuYm05dVpTY2dKaVpjYmlBZ0lDQWdJQ0FnSUNCamIzWmxja2x0WVdkbFZYSnNJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ2MyOTFjbU5sTG14bGJtZDBhQ0E4UFNBd0lDWW1YRzRnSUNBZ0lDQWdJQ0FnY0d4aGVXSmhZMnRUZEdGMFpTQWhQVDBnSjJWeWNtOXlKeWtwSUNZbUlEeERiM1psY2tsdFlXZGxJSE55WXoxN1kyOTJaWEpKYldGblpWVnliSDBnTHo1OVhHNGdJQ0FnUEM5UWNtVnRhWFZ0VUd4aGVXVnlQbHh1SUNBcFhHNTlYRzVjYmxCeVpXMXBkVzFRYkhWelVHeGhlV1Z5TG5CeWIzQlVlWEJsY3lBOUlIdGNiaUFnWTI5dWRISnZiSE02SUZCeWIzQlVlWEJsY3k1dmJtVlBabFI1Y0dVb1cxQnliM0JVZVhCbGN5NXZZbXBsWTNRc0lGQnliM0JVZVhCbGN5NWliMjlzWFNrc1hHNGdJSEJ5Wld4dllXUTZJRkJ5YjNCVWVYQmxjeTV6ZEhKcGJtY3NYRzRnSUdOMWNuSmxiblJVYVcxbE9pQlFjbTl3Vkhsd1pYTXViblZ0WW1WeUxGeHVJQ0J4ZFdGc2FYUjVPaUJRY205d1ZIbHdaWE11YjJKcVpXTjBMRnh1SUNCemIzVnlZMlZVZVhCbE9pQlFjbTl3Vkhsd1pYTXVjM1J5YVc1bkxGeHVJQ0JvYjNOME9pQlFjbTl3Vkhsd1pYTXVjM1J5YVc1bkxGeHVJQ0JoWTJObGMzTlViMnRsYmpvZ1VISnZjRlI1Y0dWekxuTjBjbWx1Wnl4Y2JpQWdaR1YyYVdObFNXUTZJRkJ5YjNCVWVYQmxjeTV6ZEhKcGJtY3NYRzRnSUdobFlXUmxjbk02SUZCeWIzQlVlWEJsY3k1dlltcGxZM1FzWEc0Z0lIQmhjbUZ0Y3pvZ1VISnZjRlI1Y0dWekxtOWlhbVZqZEN4Y2JpQWdZMjl1ZEdWdWRGUjVjR1U2SUZCeWIzQlVlWEJsY3k1emRISnBibWNzWEc0Z0lHTnZiblJsYm5SSlpEb2dVSEp2Y0ZSNWNHVnpMbk4wY21sdVp5eGNiaUFnWVhWMGIzQnNZWGxPWlhoME9pQlFjbTl3Vkhsd1pYTXVZbTl2YkN4Y2JpQWdiRzl2Y0RvZ1VISnZjRlI1Y0dWekxtSnZiMndzWEc0Z0lIUm9kVzFpYm1GcGJGTmxaV3RwYm1jNklGQnliM0JVZVhCbGN5NWliMjlzTEZ4dUlDQndiSFZuYVc1ek9pQlFjbTl3Vkhsd1pYTXVZWEp5WVhrc1hHNGdJR052ZG1WeVNXMWhaMlZWY213NklGQnliM0JVZVhCbGN5NXpkSEpwYm1jc1hHNGdJR052ZG1WeVNXMWhaMlZFYVhOd2JHRjVPaUJRY205d1ZIbHdaWE11YzNSeWFXNW5MRnh1SUNCeVpXTnZiVzFsYm1SaGRHbHZiam9nVUhKdmNGUjVjR1Z6TG05dVpVOW1WSGx3WlNoYlhHNGdJQ0FnVUhKdmNGUjVjR1Z6TG05aWFtVmpkQ3hjYmlBZ0lDQlFjbTl3Vkhsd1pYTXViMjVsVDJZb1cyWmhiSE5sWFNrc1hHNGdJRjBwTEZ4dUlDQjFhVVZzWlcxbGJuUnpPaUJRY205d1ZIbHdaWE11YzJoaGNHVW9lMXh1SUNBZ0lHTnZiblJ5YjJ4Q2RYUjBiMjV6T2lCN1hHNGdJQ0FnSUNCbWIzSjNZWEprUW5WMGRHOXVPaUJRY205d1ZIbHdaWE11Ym05a1pTeGNiaUFnSUNBZ0lISmxkMmx1WkVKMWRIUnZiam9nVUhKdmNGUjVjR1Z6TG01dlpHVXNYRzRnSUNBZ2ZTeGNiaUFnZlNrc1hHNGdJSEJ5Wld4dllXUk1hWE4wT2lCUWNtOXdWSGx3WlhNdVlYSnlZWGxQWmloY2JpQWdJQ0JRY205d1ZIbHdaWE11YzJoaGNHVW9lMXh1SUNBZ0lDQWdZMjl1ZEdWdWRGUjVjR1U2SUZCeWIzQlVlWEJsY3k1dmJtVlBaaWhiSjNacFpHVnZjeWNzSUNkc2FYWmxjeWRkS1N4Y2JpQWdJQ0FnSUdOdmJuUmxiblJKWkRvZ1VISnZjRlI1Y0dWekxuTjBjbWx1Wnl4Y2JpQWdJQ0I5S1Z4dUlDQXBMRnh1SUNCd2JHRjVaWEpTWldZNklGQnliM0JVZVhCbGN5NXZZbXBsWTNRc1hHNGdJR05vYVd4a2NtVnVPaUJRY205d1ZIbHdaWE11Ym05a1pTeGNiaUFnYjI1RmNuSnZjam9nVUhKdmNGUjVjR1Z6TG1aMWJtTXNYRzRnSUc5dVFYQnBSWEp5YjNJNklGQnliM0JVZVhCbGN5NW1kVzVqTEZ4dUlDQnZibEJzWVhsaVlXTnJVM1JoZEdWRGFHRnVaMlU2SUZCeWIzQlVlWEJsY3k1bWRXNWpMRnh1SUNCdmJrTm9ZVzVuWlRvZ1VISnZjRlI1Y0dWekxtWjFibU1zWEc0Z0lHOXVVMjkxY21ObFZIbHdaVU5vWVc1blpXUTZJRkJ5YjNCVWVYQmxjeTVtZFc1akxGeHVJQ0J2YmxCc1lYbGlZV05yUVhCcFVtVnpjRzl1YzJVNklGQnliM0JVZVhCbGN5NW1kVzVqTEZ4dUlDQnpaVzVrVEc5bk9pQlFjbTl3Vkhsd1pYTXVablZ1WXl4Y2JpQWdjR3hoZVdKaFkydFRkR0YwWlRvZ1VISnZjRlI1Y0dWekxuTjBjbWx1Wnl4Y2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdVSEpsYldsMWJWQnNkWE5RYkdGNVpYSmNiaUpkZlE9PSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kMVxufTtcblxuY29uc3QgUHJlbWl1bVBsdXNQbGF5ZXIgPSAoe1xuICBjb250cm9scyxcbiAgcHJlbG9hZDogcHJlbG9hZCQxID0gJ2F1dG8nLFxuICBwcmVsb2FkTGlzdCA9IFtdLFxuICBjdXJyZW50VGltZSxcbiAgcXVhbGl0eTogdGFyZ2V0UXVhbGl0eSxcbiAgc291cmNlVHlwZSxcbiAgaG9zdCxcbiAgYWNjZXNzVG9rZW4sXG4gIGRldmljZUlkLFxuICBoZWFkZXJzLFxuICBwYXJhbXMsXG4gIGNvbnRlbnRUeXBlLFxuICBjb250ZW50SWQsXG4gIGF1dG9wbGF5TmV4dCxcbiAgbG9vcCxcbiAgdGh1bWJuYWlsU2Vla2luZyxcbiAgcGx1Z2lucyA9IFtdLFxuICBjb3ZlckltYWdlVXJsLFxuICBjb3ZlckltYWdlRGlzcGxheSA9ICdhdXRvJyxcbiAgcmVjb21tZW5kYXRpb24sXG4gIHNlZWtDb25maWcgPSAnYXV0bycsXG4gIHVpRWxlbWVudHM6IHtcbiAgICBsaXZlQnV0dG9uLFxuICAgIGNhc3RCdXR0b24sXG4gICAgLi4udWlFbGVtZW50c1xuICB9ID0ge30sXG4gIC8vIEZJWE1FOiBDdXJyZW50bHkgd2Ugd2lsbCBnZXQgYHVuZGVmaW5lZGAgZnJvbSB0aGUgYHBsYXllclJlZmAgYmVjYXVzZSB3ZSB1c2UgaXQgd2l0aG91dCBgZm9yd2FyZFJlZmAuIENoZWNrIGlmIHdlIG5lZWQgdG8gZml4IHRoaXMgaXNzdWVcbiAgcGxheWVyUmVmLFxuICBjaGlsZHJlbixcbiAgb25FcnJvcixcbiAgb25BcGlFcnJvcixcbiAgb25QbGF5YmFja1N0YXRlQ2hhbmdlLFxuICBvbkNoYW5nZSxcbiAgb25Tb3VyY2VUeXBlQ2hhbmdlZCxcbiAgb25QbGF5YmFja0FwaVJlc3BvbnNlLFxuICBzZW5kTG9nLFxuICBwbGF5YmFja1N0YXRlOiBhcHBQbGF5YmFja1N0YXRlLFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIHZhciBfY29udGVudERhdGEkc2VjdGlvbiwgX2NvbnRlbnREYXRhJHNlY3Rpb24yLCBfdWlTdGF0ZSRzdHJlYW1FdmVudHM7XG5cbiAgY29uc3QgdmlkZW9SZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgbGFzdFNlc3Npb24gPSB1c2VSZWYoe30pO1xuICBjb25zdCBsb2dUYXJnZXQgPSB1c2VSZWYoKTtcbiAgY29uc3QgcHJlZmVyQXBwVGltZSA9IHVzZVJlZihjdXJyZW50VGltZSA+PSAwKTtcbiAgY29uc3QgW3BsYXliYWNrU3RhdGUsIHNldFBsYXliYWNrU3RhdGVdID0gdXNlU3RhdGUoJ2luaXRpYWwnKTtcbiAgY29uc3QgW3BsYXliYWNrSW5mbywgc2V0UGxheWJhY2tJbmZvXSA9IHVzZVN0YXRlKHtcbiAgICBzb3VyY2U6IHt9XG4gIH0pO1xuICBjb25zdCBbY29udGVudERhdGEsIHNldENvbnRlbnREYXRhXSA9IHVzZVN0YXRlKHt9KTtcbiAgY29uc3QgW3NldHRpbmdTdGF0ZSwgc2V0U2V0dGluZ1N0YXRlXSA9IHVzZVN0YXRlKHtcbiAgICBzZWN0aW9uczogW10sXG4gICAgcHJlZmVycmVkOiB7fVxuICB9KTtcbiAgY29uc3QgW3RhcmdldFBsYXliYWNrU3RhdGUsIHNldFRhcmdldFBsYXliYWNrU3RhdGVdID0gdXNlU3RhdGUoYXBwUGxheWJhY2tTdGF0ZSk7XG4gIGNvbnN0IFt1aVN0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZVVpLCBpbml0U3RhdGUkMSk7XG4gIGNvbnN0IGFwaUNvbmZpZyA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICBob3N0LFxuICAgIGFjY2Vzc1Rva2VuLFxuICAgIGRldmljZUlkLFxuICAgIGhlYWRlcnMsXG4gICAgcGFyYW1zXG4gIH0pLCBbaG9zdCwgYWNjZXNzVG9rZW4sIGRldmljZUlkLCBoZWFkZXJzLCBwYXJhbXNdKTsgLy8gUHJvdmlkZSB0aGUgY29udGVudCBmcm9tIHRoZSBjYWNoZSBhcyBzb29uIGFzIHBvc3NpYmxlIHdoZW4gdGhlIGNvbnRlbnQgaGFzIGNoYW5nZWRcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGRhdGFJbkNhY2hlID0gcHJlbG9hZE1hcC5nZXQoYCR7Y29udGVudFR5cGV9LyR7Y29udGVudElkfWApO1xuXG4gICAgaWYgKGRhdGFJbkNhY2hlICE9PSBudWxsICYmIGRhdGFJbkNhY2hlICE9PSB2b2lkIDAgJiYgZGF0YUluQ2FjaGUuY29udGVudCkge1xuICAgICAgc2V0Q29udGVudERhdGEoZ2V0Q29udGVudEluZm8oZGF0YUluQ2FjaGUuY29udGVudCkpO1xuICAgIH1cbiAgfSwgW2NvbnRlbnRUeXBlLCBjb250ZW50SWRdKTtcblxuICBjb25zdCBlbmRTZXNzaW9uID0gKHtcbiAgICBwcmVzZXJ2ZVNvdXJjZVxuICB9ID0ge30pID0+IHtcbiAgICB2YXIgX2xhc3RTZXNzaW9uJGN1cnJlbnQ7XG5cbiAgICBwcmVmZXJBcHBUaW1lLmN1cnJlbnQgPSBmYWxzZTtcblxuICAgIGlmICgoX2xhc3RTZXNzaW9uJGN1cnJlbnQgPSBsYXN0U2Vzc2lvbi5jdXJyZW50KSAhPT0gbnVsbCAmJiBfbGFzdFNlc3Npb24kY3VycmVudCAhPT0gdm9pZCAwICYmIF9sYXN0U2Vzc2lvbiRjdXJyZW50LmVuZCkge1xuICAgICAgbGFzdFNlc3Npb24uY3VycmVudCA9IHtcbiAgICAgICAgcmVxdWVzdDogbGFzdFNlc3Npb24uY3VycmVudC5lbmQoKSxcbiAgICAgICAgLi4uKHByZXNlcnZlU291cmNlICYmIHtcbiAgICAgICAgICBzb3VyY2VzOiBsYXN0U2Vzc2lvbi5jdXJyZW50LnNvdXJjZXNcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFwcmVzZXJ2ZVNvdXJjZSkge1xuICAgICAgc2V0UGxheWJhY2tJbmZvKHtcbiAgICAgICAgc291cmNlczogW11cbiAgICAgIH0pO1xuICAgICAgc2V0Q29udGVudERhdGEoe1xuICAgICAgICBjaGFwdGVyczogW11cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhbGxQbHVnaW5zID0gcGx1Z2lucztcblxuICBjb25zdCBsb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgIHZhciBfbG9nVGFyZ2V0JGN1cnJlbnQ7XG5cbiAgICBjb25zdCBsYXN0UmVzdWx0ID0gYXdhaXQgbGFzdFNlc3Npb24uY3VycmVudC5yZXF1ZXN0O1xuICAgIChfbG9nVGFyZ2V0JGN1cnJlbnQgPSBsb2dUYXJnZXQuY3VycmVudCkgPT09IG51bGwgfHwgX2xvZ1RhcmdldCRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbG9nVGFyZ2V0JGN1cnJlbnQucmVzZXQoKTtcblxuICAgIGlmIChsYXN0UmVzdWx0ID09PSAnY2FuY2VsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldENvbnRlbnREYXRhKHtcbiAgICAgIHdhaXRDb250ZW50SW5mbzogY29udGVudFR5cGUgPT09ICd2aWRlb3MnXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdFBsYXllck5hbWUgPSBbJ3NoYWthJywgJ2JpdG1vdmluJ10uZmluZChuYW1lID0+IG5hbWUgaW4gcmVzdCk7XG4gICAgbG9nVGFyZ2V0LmN1cnJlbnQgPSBtYXBMb2dFdmVudHMoe1xuICAgICAgcGxheWVyTmFtZTogcmVzdFBsYXllck5hbWUgfHwgJ3NoYWthJyxcbiAgICAgIHZlcnNpb246IFwiMS4xNS4yOVwiLFxuICAgICAgdmlkZW86IHZpZGVvUmVmLmN1cnJlbnQsXG4gICAgICBnZXRQbGF5YmFja1N0YXR1czogKCkgPT4gZ2V0TWVkaWFUaW1lKHZpZGVvUmVmLmN1cnJlbnQsIGFsbFBsdWdpbnMsIHBsYXllclJlZi5jdXJyZW50KVxuICAgIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBzZW5kTG9nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsb2dUYXJnZXQuY3VycmVudC5hbGwoKHR5cGUsIGRhdGEpID0+IHNlbmRMb2cobG9nRXZlbnROYW1lc1t0eXBlXSwgZGF0YSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb25PcHRpb25zID0ge1xuICAgICAgdHlwZTogY29udGVudFR5cGUsXG4gICAgICBpZDogY29udGVudElkLFxuICAgICAgbWVkaWE6IHZpZGVvUmVmLmN1cnJlbnQsXG4gICAgICBnZXRDdXJyZW50VGltZTogKCkgPT4gZ2V0TWVkaWFUaW1lKHZpZGVvUmVmLmN1cnJlbnQsIHBsdWdpbnMsIHBsYXllclJlZi5jdXJyZW50KS5jdXJyZW50VGltZSxcbiAgICAgIG9uQ2hhbmdlQ29udGVudDogZGF0YSA9PiB7XG4gICAgICAgIG9uUGxheWJhY2tBcGlSZXNwb25zZSA9PT0gbnVsbCB8fCBvblBsYXliYWNrQXBpUmVzcG9uc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUGxheWJhY2tBcGlSZXNwb25zZSgnY29udGVudCcsIGRhdGEpO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGVudCA9IGdldENvbnRlbnRJbmZvKGRhdGEpO1xuICAgICAgICBzZXRDb250ZW50RGF0YShjdXJyZW50Q29udGVudCk7XG4gICAgICAgIGxvZ1RhcmdldC5jdXJyZW50LnVwZGF0ZUNvbnRlbnQoeyAuLi5nZXRDb250ZW50SW5mbyhkYXRhKSxcbiAgICAgICAgICB0eXBlOiBjb250ZW50VHlwZSxcbiAgICAgICAgICBpZDogY29udGVudElkXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uSW52YWxpZFRva2VuOiAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbnZhbGlkIHRva2VuLCByZXN0YXJ0IHNlc3Npb24nKTtcbiAgICAgICAgZW5kU2Vzc2lvbih7XG4gICAgICAgICAgcHJlc2VydmVTb3VyY2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGxvYWQoKTtcbiAgICAgIH0sXG4gICAgICBvblNvdXJjZUNoYW5nZTogbmV3U291cmNlcyA9PiB7XG4gICAgICAgIGxhc3RTZXNzaW9uLmN1cnJlbnQuc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gICAgICAgIGNvbnN0IHNvdXJjZVNldHRpbmdzID0gZ2V0U291cmNlVHlwZVNldHRpbmdzKG5ld1NvdXJjZXMpO1xuXG4gICAgICAgIGlmIChzb3VyY2VTZXR0aW5ncykge1xuICAgICAgICAgIHNldFNldHRpbmdTdGF0ZShjdXJyZW50ID0+ICh7IC4uLmN1cnJlbnQsXG4gICAgICAgICAgICBzZWN0aW9uczogW3NvdXJjZVNldHRpbmdzXVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlcXVlc3ROZXdTZXNzaW9uOiAoKSA9PiB7XG4gICAgICAgIGVuZFNlc3Npb24oKTtcbiAgICAgICAgbG9hZCgpO1xuICAgICAgfSxcbiAgICAgIG9uU2Vzc2lvblN0YXJ0OiByZXNEYXRhID0+IHtcbiAgICAgICAgb25QbGF5YmFja0FwaVJlc3BvbnNlID09PSBudWxsIHx8IG9uUGxheWJhY2tBcGlSZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25QbGF5YmFja0FwaVJlc3BvbnNlKCdzdGFydCcsIHJlc0RhdGEpO1xuICAgICAgfSxcbiAgICAgIGNhY2hlOiBwcmVsb2FkTWFwXG4gICAgfTsgLy8gVE9ETyBpZ25vcmUgbGl2ZSBlbmQgZXJyb3IgZnJvbSAvc3RhcnQgL2luZm9cbiAgICAvLyBUT0RPIHRyeSB0byBjbGVhciBzZXNzaW9uIG9uIGVycm9yXG5cbiAgICBzdGFydFBsYXliYWNrU2Vzc2lvbihjcmVhdGVBcGkoYXBpQ29uZmlnLCB7XG4gICAgICBvbkVycm9yOiBvbkFwaUVycm9yXG4gICAgfSksIHNlc3Npb25PcHRpb25zKS50aGVuKGN1cnJlbnRTZXNzaW9uID0+IHtcbiAgICAgIGxhc3RTZXNzaW9uLmN1cnJlbnQgPSBjdXJyZW50U2Vzc2lvbjtcbiAgICAgIHNldFBsYXliYWNrSW5mbyh7XG4gICAgICAgIHNvdXJjZXM6IGN1cnJlbnRTZXNzaW9uLnNvdXJjZXMsXG4gICAgICAgIHRva2VuOiBjdXJyZW50U2Vzc2lvbi50b2tlbixcbiAgICAgICAgZHJtUG9ydGFsVXJsOiBjdXJyZW50U2Vzc2lvbi5kcm1Qb3J0YWxVcmxcbiAgICAgIH0pOyAvLyBpbiBjYXNlIGNvbnRlbnQgQVBJIGZhaWwsIHBsYXkgaXQgYW55d2F5IHdpdGhvdXQgc3RhcnRUaW1lXG5cbiAgICAgIHNldENvbnRlbnREYXRhKGN1cnJlbnQgPT4gKHsgLi4uY3VycmVudCxcbiAgICAgICAgd2FpdENvbnRlbnRJbmZvOiBmYWxzZVxuICAgICAgfSkpO1xuICAgIH0pLmNhdGNoKHJlc3VsdCA9PiB7XG4gICAgICB2YXIgX3Jlc3VsdCRyZXNwb25zZSwgX3Jlc3VsdCRyZXNwb25zZSRkYXRhO1xuXG4gICAgICBjb25zdCBlcnJvckRhdGEgPSAoX3Jlc3VsdCRyZXNwb25zZSA9IHJlc3VsdC5yZXNwb25zZSkgPT09IG51bGwgfHwgX3Jlc3VsdCRyZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9yZXN1bHQkcmVzcG9uc2UkZGF0YSA9IF9yZXN1bHQkcmVzcG9uc2UuZGF0YSkgPT09IG51bGwgfHwgX3Jlc3VsdCRyZXNwb25zZSRkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcmVzdWx0JHJlc3BvbnNlJGRhdGEuZXJyb3I7XG4gICAgICBjb25zdCBlcnJvciA9IGVycm9yRGF0YSA/IHtcbiAgICAgICAgbmFtZTogJ1BsYXljcmFmdEFwaUVycm9yJyxcbiAgICAgICAgLi4uZXJyb3JEYXRhXG4gICAgICB9IDogcmVzdWx0O1xuICAgICAgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICAgIHZpZGVvUmVmLmN1cnJlbnQuZGlzcGF0Y2hFdmVudChPYmplY3QuYXNzaWduKG5ldyBDdXN0b21FdmVudCgnZXJyb3InKSwge1xuICAgICAgICBlcnJvclxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGFjdGl2ZURldmljZSA9ICEvY2FzdGluZ3xlcnJvci8udGVzdChwbGF5YmFja1N0YXRlKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXBwUGxheWJhY2tTdGF0ZSkge1xuICAgICAgc2V0VGFyZ2V0UGxheWJhY2tTdGF0ZShhcHBQbGF5YmFja1N0YXRlKTtcbiAgICB9XG4gIH0sIFthcHBQbGF5YmFja1N0YXRlXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZWxvYWQkMSA9PT0gJ2F1dG8nICYmIGFjdGl2ZURldmljZSAmJiBjb250ZW50VHlwZSAmJiBjb250ZW50SWQpIHtcbiAgICAgIGxvYWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4gZW5kU2Vzc2lvbigpO1xuICB9LCBbYWN0aXZlRGV2aWNlLCBjb250ZW50VHlwZSwgY29udGVudElkXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBwcmVsb2FkKGNyZWF0ZUFwaShhcGlDb25maWcpLCBwcmVsb2FkTGlzdCwge1xuICAgIGlkOiBjb250ZW50SWQsXG4gICAgdHlwZTogY29udGVudFR5cGVcbiAgfSwgcHJlbG9hZE1hcCksIFthcGlDb25maWcsIGNvbnRlbnRJZCwgY29udGVudFR5cGUsIHByZWxvYWRMaXN0XSk7XG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocGxheWVyUmVmLCAoKSA9PiAoe1xuICAgIGxvYWQsXG4gICAgZ2V0VmlkZW86ICgpID0+IHZpZGVvUmVmLmN1cnJlbnRcbiAgfSkpO1xuICB1c2VFZmZlY3QoKCkgPT4gbGlua0FkU3RhdGUoe1xuICAgIGNvbnRlbnRUeXBlLFxuICAgIHBsdWdpbnMsXG4gICAgZGlzcGF0Y2gsXG4gICAgLy8gVG8gYWxpZ24gd2l0aCBpT1MgJiBBbmRyb2lkLCBwbGF5IHRoZSB2aWRlbyBhZnRlciB0aGUgYWQgaXMgc2tpcHBlZCBldmVuIGlmIGl0cyBwYXVzZWQgb3JpZ2luYWxseS5cbiAgICBvbkFkU2tpcDogKCkgPT4gc2V0VGFyZ2V0UGxheWJhY2tTdGF0ZSgncGxheWluZycpXG4gIH0pLCBbY29udGVudFR5cGVdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc291cmNlVHlwZSkge1xuICAgICAgc2V0U2V0dGluZ1N0YXRlKGN1cnJlbnQgPT4gKHsgLi4uY3VycmVudCxcbiAgICAgICAgdmFsdWVzOiB7IC4uLmN1cnJlbnQudmFsdWVzLFxuICAgICAgICAgICdzb3VyY2UtdHlwZSc6IHNvdXJjZVR5cGVcbiAgICAgICAgfSxcbiAgICAgICAgcHJlZmVycmVkOiB7IC4uLmN1cnJlbnQucHJlZmVycmVkLFxuICAgICAgICAgICdzb3VyY2UtdHlwZSc6IHNvdXJjZVR5cGVcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwgW3NvdXJjZVR5cGVdKTtcbiAgY29uc3Qgc291cmNlID0gdXNlTWVtbygoKSA9PiBnZXRTdHJlYW1JbmZvKHBsYXliYWNrSW5mby5zb3VyY2VzLCB7XG4gICAgdHlwZTogc2V0dGluZ1N0YXRlLnByZWZlcnJlZFsnc291cmNlLXR5cGUnXSxcbiAgICBsaWNlbnNlVXJpOiBwbGF5YmFja0luZm8uZHJtUG9ydGFsVXJsLFxuICAgIGxpY2Vuc2VIZWFkZXJzOiBnZXRFbnRlcnByaXNlRHJtSGVhZGVycyh7XG4gICAgICB0b2tlbjogcGxheWJhY2tJbmZvLnRva2VuXG4gICAgfSksXG4gICAgdGh1bWJuYWlsRW5hYmxlZDogdGh1bWJuYWlsU2Vla2luZ1xuICB9KSwgWyFjb250ZW50RGF0YS53YWl0Q29udGVudEluZm8gJiYgcGxheWJhY2tJbmZvLCBzZXR0aW5nU3RhdGUucHJlZmVycmVkWydzb3VyY2UtdHlwZSddLCB0aHVtYm5haWxTZWVraW5nXSk7IC8vIFRPRE86IGV4dHJhY3QgPyBjYXN0IHRoaW5nc1xuXG4gIGNvbnN0IHtcbiAgICBhcHBJZFxuICB9ID0gdXNlQ2FzdENvbnRleHQoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZXR1cCA9IHNldHVwQ2FzdCh7XG4gICAgICBhcHBJZFxuICAgIH0pLnRoZW4oKCkgPT4gc3Vic2NyaWJlQ2FzdFN0YXRlKG5leHQgPT4ge1xuICAgICAgaWYgKG5leHQgPT09IENhc3RTdGF0ZS5DT05ORUNURUQpIHtcbiAgICAgICAgc2V0UGxheWJhY2tTdGF0ZSgnY2FzdGluZycpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dCA9PT0gQ2FzdFN0YXRlLk5PX0RFVklDRVNfQVZBSUxBQkxFIHx8IG5leHQgPT09IENhc3RTdGF0ZS5OT1RfQ09OTkVDVEVEKSB7XG4gICAgICAgIHNldFBsYXliYWNrU3RhdGUoJ2xvYWRpbmcnKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgcmV0dXJuICgpID0+IHNldHVwLnRoZW4ocmVtb3ZlTGlzdGVuZXIgPT4gcmVtb3ZlTGlzdGVuZXIoKSk7XG4gIH0sIFthcHBJZF0pO1xuICBjb25zdCBjYXN0Q29ubmVjdGVkID0gcGxheWJhY2tTdGF0ZSA9PT0gJ2Nhc3RpbmcnO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjYXN0Q29ubmVjdGVkICYmIGNvbnRlbnRJZCkge1xuICAgICAgbG9hZE1lZGlhKHtcbiAgICAgICAgY29udGVudElkLFxuICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgYXBpQ29uZmlnXG4gICAgICB9KTtcbiAgICB9IC8vIHNob3VsZCBrZWVwIGNvbm5lY3Rpb24gYWZ0ZXIgdW5tb3VudFxuXG4gIH0sIFtjYXN0Q29ubmVjdGVkLCBjb250ZW50SWQsIGNvbnRlbnRUeXBlLCBhcGlDb25maWddKTtcbiAgY29uc3Qgc2Vla2JhckhpZGUgPSAhc2Vla0NvbmZpZyB8fCBjb250ZW50VHlwZSA9PT0gJ2xpdmVzJyAmJiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLW9wdGlvbmFsLWNoYWluaW5nXG4gICEoKChfY29udGVudERhdGEkc2VjdGlvbiA9IGNvbnRlbnREYXRhLnNlY3Rpb24pID09PSBudWxsIHx8IF9jb250ZW50RGF0YSRzZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29udGVudERhdGEkc2VjdGlvbi5lbmQpIC0gKChfY29udGVudERhdGEkc2VjdGlvbjIgPSBjb250ZW50RGF0YS5zZWN0aW9uKSA9PT0gbnVsbCB8fCBfY29udGVudERhdGEkc2VjdGlvbjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb250ZW50RGF0YSRzZWN0aW9uMi5zdGFydCkgPiAwKTtcbiAgcmV0dXJuIHBsYXliYWNrU3RhdGUgPT09ICdjYXN0aW5nJyA/IGpzeCQxKENhc3RPdmVybGF5LCB7fSkgOiBqc3hzKFByZW1pdW1QbGF5ZXIsIHtcbiAgICBzb3VyY2U6IHBsYXliYWNrU3RhdGUgIT09ICdlcnJvcicgJiYgc291cmNlLFxuICAgIGN1cnJlbnRUaW1lOiBwcmVmZXJBcHBUaW1lLmN1cnJlbnQgPyBjdXJyZW50VGltZSA6IGNvbnRlbnREYXRhLnN0YXJ0VGltZSxcbiAgICBjb250cm9sczogdWlTdGF0ZS5hY3RpdmVQYW5lbCA9PT0gJ2F1dG9wbGF5LW5leHQnID8gJ3RpdGxlLW9ubHknIDogdWlTdGF0ZS5hY3RpdmVQYW5lbCA9PT0gJ3JlY29tbWVuZGF0aW9uJyA/ICduby1wYW5lbCcgOiBjb250cm9scyxcbiAgICB0aXRsZTogY29udGVudERhdGEudGl0bGUsXG4gICAgY2hhbm5lbFRpdGxlOiBjb250ZW50RGF0YS5jaGFubmVsVGl0bGUsXG4gICAgc2VjdGlvbjogY29udGVudERhdGEuc2VjdGlvbixcbiAgICBxdWFsaXR5OiB0YXJnZXRRdWFsaXR5LFxuICAgIHNldHRpbmdzOiBzZXR0aW5nU3RhdGUsXG4gICAgc2Vla2JhckhpZGU6IHNlZWtiYXJIaWRlLFxuICAgIGxvb3A6IGxvb3AsXG4gICAgcGx1Z2luczogYWxsUGx1Z2lucyxcbiAgICB2aWRlb1JlZjogdmlkZW9SZWYsXG4gICAgbWFya3M6IChfdWlTdGF0ZSRzdHJlYW1FdmVudHMgPSB1aVN0YXRlLnN0cmVhbUV2ZW50cykgPT09IG51bGwgfHwgX3VpU3RhdGUkc3RyZWFtRXZlbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdWlTdGF0ZSRzdHJlYW1FdmVudHMubWFwKGV2ZW50ID0+IGV2ZW50LnN0YXJ0KSxcbiAgICBvbkVycm9yOiBvbkVycm9yLFxuICAgIHNlbmRMb2c6IChuYW1lLCBkYXRhKSA9PiB7XG4gICAgICB2YXIgX2xvZ1RhcmdldCRjdXJyZW50MjtcblxuICAgICAgcmV0dXJuIChfbG9nVGFyZ2V0JGN1cnJlbnQyID0gbG9nVGFyZ2V0LmN1cnJlbnQpID09PSBudWxsIHx8IF9sb2dUYXJnZXQkY3VycmVudDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9sb2dUYXJnZXQkY3VycmVudDIuZW1pdChuYW1lLCBkYXRhKTtcbiAgICB9LFxuICAgIG9uUGxheWJhY2tTdGF0ZUNoYW5nZTogKGV2ZW50LCBzdGF0ZSkgPT4ge1xuICAgICAgc2V0UGxheWJhY2tTdGF0ZShzdGF0ZSk7XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICB2YXIgX2xhc3RTZXNzaW9uJGN1cnJlbnQkLCBfbGFzdFNlc3Npb24kY3VycmVudDI7XG5cbiAgICAgICAgKF9sYXN0U2Vzc2lvbiRjdXJyZW50JCA9IChfbGFzdFNlc3Npb24kY3VycmVudDIgPSBsYXN0U2Vzc2lvbi5jdXJyZW50KS5lbmQpID09PSBudWxsIHx8IF9sYXN0U2Vzc2lvbiRjdXJyZW50JCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2xhc3RTZXNzaW9uJGN1cnJlbnQkLmNhbGwoX2xhc3RTZXNzaW9uJGN1cnJlbnQyKTtcbiAgICAgICAgbGFzdFNlc3Npb24uY3VycmVudCA9IHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09ICdwYXVzZWQnICYmIHBsYXliYWNrU3RhdGUgIT09ICdsb2FkaW5nJyB8fCBldmVudC50eXBlID09PSAnc2Vla2luZycpIHtcbiAgICAgICAgdmFyIF9sYXN0U2Vzc2lvbiRjdXJyZW50JDIsIF9sYXN0U2Vzc2lvbiRjdXJyZW50MztcblxuICAgICAgICAoX2xhc3RTZXNzaW9uJGN1cnJlbnQkMiA9IChfbGFzdFNlc3Npb24kY3VycmVudDMgPSBsYXN0U2Vzc2lvbi5jdXJyZW50KS51cGRhdGVMYXN0UGxheWVkKSA9PT0gbnVsbCB8fCBfbGFzdFNlc3Npb24kY3VycmVudCQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbGFzdFNlc3Npb24kY3VycmVudCQyLmNhbGwoX2xhc3RTZXNzaW9uJGN1cnJlbnQzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSAnZW5kZWQnKSB7XG4gICAgICAgIGRpc3BhdGNoKHVpQWN0aW9ucy5wbGF5YmFja0VuZCgpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uQ2hhbmdlTmV4dDogY29udGVudERhdGEubmV4dCAmJiAoKCkgPT4gb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKGNvbnRlbnREYXRhLm5leHQpKSxcbiAgICBvbkNoYW5nZVByZXZpb3VzOiBjb250ZW50RGF0YS5wcmV2aW91cyAmJiAoKCkgPT4gb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKGNvbnRlbnREYXRhLnByZXZpb3VzKSksXG4gICAgb25DaGFuZ2VTZXR0aW5nczogKHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZVxuICAgIH0pID0+IHtcbiAgICAgIGlmIChuYW1lID09PSAnc291cmNlLXR5cGUnKSB7XG4gICAgICAgIHNldFNldHRpbmdTdGF0ZShjdXJyZW50ID0+ICh7IC4uLmN1cnJlbnQsXG4gICAgICAgICAgcHJlZmVycmVkOiB7XG4gICAgICAgICAgICAnc291cmNlLXR5cGUnOiB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICBvblNvdXJjZVR5cGVDaGFuZ2VkID09PSBudWxsIHx8IG9uU291cmNlVHlwZUNoYW5nZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uU291cmNlVHlwZUNoYW5nZWQodmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdWlFbGVtZW50czogeyAuLi51aUVsZW1lbnRzLFxuICAgICAgLi4uKChjb250ZW50RGF0YSA9PT0gbnVsbCB8fCBjb250ZW50RGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29udGVudERhdGEuY2hhbm5lbEljb24pICYmIHtcbiAgICAgICAgY2hhbm5lbEljb246IGpzeCQxKFwiaW1nXCIsIHtcbiAgICAgICAgICBhbHQ6IFwiY2hhbm5lbCBpY29uXCIsXG4gICAgICAgICAgY3NzOiBfcmVmJDEsXG4gICAgICAgICAgc3JjOiBjb250ZW50RGF0YS5jaGFubmVsSWNvblxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICAuLi4odWlTdGF0ZS5hZC50b3RhbCA+IDAgJiYgZ2V0QWRVaSh1aVN0YXRlLmFkLCBwbHVnaW5zLCB2aWRlb1JlZi5jdXJyZW50KSlcbiAgICB9LFxuICAgIG92ZXJyaWRlU2V0dGluZ1NlY3Rpb25zOiBzZWN0aW9ucyA9PiB7XG4gICAgICAvLyBTcGVlZCBzZWN0aW9ucyB3aWxsIGJlIHByb3ZpZGVkIGZvciBWT0QgY29udGVudCBieSBkZWZhdWx0IGluIFByZW1pdW1QbGF5ZXIuIFdlIHdhbnQgdG8gaGlkZSBpdCBmb3Igc2VsZiBsaW5lYXIuXG4gICAgICBpZiAoY29udGVudFR5cGUgPT09ICdsaXZlcycpIHtcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zLmZpbHRlcihzID0+IHMubmFtZSAhPT0gJ3NwZWVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWN0aW9ucztcbiAgICB9LFxuICAgIHBsYXliYWNrU3RhdGU6IHRhcmdldFBsYXliYWNrU3RhdGUsXG4gICAgLi4ucmVzdCxcbiAgICBzdHlsZTogcmVjb21tZW5kYXRpb24gJiYge1xuICAgICAgJy0tYm90dG9tLXNwYWNpbmcnOiAnNXJlbSdcbiAgICB9LFxuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGNhc3RCdXR0b24gPT09IGZhbHNlID8gJycgOiBqc3gkMShGdW5jdGlvbkJhckV4dGVuc2lvbiwge1xuICAgICAgY2hpbGRyZW46IGpzeCQxKENhc3RCdXR0b24sIHtcbiAgICAgICAgY29udGVudElkOiBjb250ZW50SWQsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgICBhcGlDb25maWdcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KSwgIWxvb3AgJiYgYXV0b3BsYXlOZXh0ICYmIGNvbnRlbnREYXRhLm5leHQgJiYganN4JDEoQXV0b3BsYXlQcm9tcHQsIHtcbiAgICAgIG5leHQ6IGNvbnRlbnREYXRhLm5leHQsXG4gICAgICBjaGFwdGVyczogY29udGVudERhdGEuY2hhcHRlcnMsXG4gICAgICB2aWRlb1JlZjogdmlkZW9SZWYsXG4gICAgICBwbGF5YmFja1N0YXRlOiBwbGF5YmFja1N0YXRlLFxuICAgICAgZ2V0TWVkaWE6ICgpID0+IGdldE1lZGlhVGltZSh2aWRlb1JlZi5jdXJyZW50LCBwbHVnaW5zKSxcbiAgICAgIG9uQ2hhbmdlTmV4dDogKCkgPT4gb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKGNvbnRlbnREYXRhLm5leHQpLFxuICAgICAgb25PcGVuOiBzdGF0ZSA9PiBkaXNwYXRjaCh1aUFjdGlvbnMub2ZmZXJBdXRvcGxheShzdGF0ZSkpLFxuICAgICAgb25EaXNtaXNzOiAoKSA9PiBkaXNwYXRjaCh1aUFjdGlvbnMuZGlzbWlzc0F1dG9wbGF5KCkpXG4gICAgfSksIHJlY29tbWVuZGF0aW9uICYmIGlzRGVza3RvcCgpICYmIGpzeCQxKFJlY29tbWVuZGF0aW9uUGFuZWwsIHtcbiAgICAgIHRpdGxlOiByZWNvbW1lbmRhdGlvbi50aXRsZSxcbiAgICAgIG9wZW46IHVpU3RhdGUuYWN0aXZlUGFuZWwgPT09ICdyZWNvbW1lbmRhdGlvbicsXG4gICAgICBvblRvZ2dsZTogKCkgPT4gZGlzcGF0Y2godWlBY3Rpb25zLnRvZ2dsZVJlY29tbWVuZGF0aW9uUGFuZWwoKSksXG4gICAgICBjaGlsZHJlbjogcmVjb21tZW5kYXRpb24uY29udGVudFxuICAgIH0pLCBjb250ZW50RGF0YS5lbmQgJiYganN4JDEoTGl2ZUVuZCwge30pLCAoY292ZXJJbWFnZURpc3BsYXkgPT09ICdhbHdheXMnIHx8IHByZWxvYWQkMSA9PT0gJ25vbmUnICYmIGNvdmVySW1hZ2VVcmwgJiYgc291cmNlLmxlbmd0aCA8PSAwICYmIHBsYXliYWNrU3RhdGUgIT09ICdlcnJvcicpICYmIGpzeCQxKENvdmVySW1hZ2UsIHtcbiAgICAgIHNyYzogY292ZXJJbWFnZVVybFxuICAgIH0pXVxuICB9KTtcbn07XG5cblByZW1pdW1QbHVzUGxheWVyLnByb3BUeXBlcyA9IHtcbiAgY29udHJvbHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSksXG4gIHByZWxvYWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGN1cnJlbnRUaW1lOiBQcm9wVHlwZXMubnVtYmVyLFxuICBxdWFsaXR5OiBQcm9wVHlwZXMub2JqZWN0LFxuICBzb3VyY2VUeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBob3N0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhY2Nlc3NUb2tlbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGV2aWNlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhlYWRlcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHBhcmFtczogUHJvcFR5cGVzLm9iamVjdCxcbiAgY29udGVudFR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbnRlbnRJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgYXV0b3BsYXlOZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgbG9vcDogUHJvcFR5cGVzLmJvb2wsXG4gIHRodW1ibmFpbFNlZWtpbmc6IFByb3BUeXBlcy5ib29sLFxuICBwbHVnaW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIGNvdmVySW1hZ2VVcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvdmVySW1hZ2VEaXNwbGF5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWNvbW1lbmRhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gIHVpRWxlbWVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY29udHJvbEJ1dHRvbnM6IHtcbiAgICAgIGZvcndhcmRCdXR0b246IFByb3BUeXBlcy5ub2RlLFxuICAgICAgcmV3aW5kQnV0dG9uOiBQcm9wVHlwZXMubm9kZVxuICAgIH1cbiAgfSksXG4gIHByZWxvYWRMaXN0OiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNvbnRlbnRUeXBlOiBQcm9wVHlwZXMub25lT2YoWyd2aWRlb3MnLCAnbGl2ZXMnXSksXG4gICAgY29udGVudElkOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pKSxcbiAgcGxheWVyUmVmOiBQcm9wVHlwZXMub2JqZWN0LFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICBvbkFwaUVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25QbGF5YmFja1N0YXRlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblNvdXJjZVR5cGVDaGFuZ2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25QbGF5YmFja0FwaVJlc3BvbnNlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VuZExvZzogUHJvcFR5cGVzLmZ1bmMsXG4gIHBsYXliYWNrU3RhdGU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmNvbnN0IGJ1dHRvbiA9IHtcbiAgYm9yZGVyOiAnbm9uZScsXG4gIG91dGxpbmU6ICdub25lJyxcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIHBhZGRpbmc6IDAsXG4gIGZsZXhTaHJpbms6IDAsXG4gIHdpZHRoOiAzNixcbiAgaGVpZ2h0OiAzNixcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICcqJzoge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB0b3VjaEFjdGlvbjogJ25vbmUnXG4gIH1cbn07XG5cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmNvbnN0IGJhclN0eWxlID0ge1xuICBwYWRkaW5nOiAnMzZweCAxOHB4JyxcbiAgLy8gUHJldmVudCBvdmVyZmxvdyB3aGVuIGNvbnRlbnQgdGV4dCBpcyB0b28gbG9uZ1xuICBtaW5XaWR0aDogMCxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4V3JhcDogJ3dyYXAnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgJz4gKic6IHtcbiAgICAvLyBtYXJnaW46ICcwIDE4cHgnIG1pZ2h0IG92ZXJyaWRlIHNlZWtiYXIgbWFyZ2luXG4gICAgbWFyZ2luTGVmdDogJzE4cHgnLFxuICAgIG1hcmdpblJpZ2h0OiAnMThweCdcbiAgfSxcbiAgb3BhY2l0eTogJzEnLFxuICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjVzIGVhc2UnXG59O1xuY29uc3QgZmFkZVN0eWxlID0ge1xuICBvcGFjaXR5OiAnMCcsXG4gIC8vIGRpc2FibGUgYWxsIFVJIGludGVyYWN0aW9ucyB3aGlsZSBoaWRkZW5cbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB0b3VjaEFjdGlvbjogJ25vbmUnXG59O1xuXG5jb25zdCBGdW5jdGlvbkJhciA9ICh7XG4gIHN0eWxlLFxuICBmYWRlLFxuICBjaGlsZHJlblxufSkgPT4ganN4JDEoXCJkaXZcIiwge1xuICBjbGFzc05hbWU6IFwia2tzLXBsYXllcl9fZnVuY3Rpb24tYmFyXCIsXG4gIGNzczogW2JhclN0eWxlLCBmYWRlICYmIGZhZGVTdHlsZSwgc3R5bGUsIHtcbiAgICBidXR0b25cbiAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkZ1bmN0aW9uQmFyO1wiLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJa1oxYm1OMGFXOXVRbUZ5TG1wemVDSmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRXJRa2tpTENKbWFXeGxJam9pUm5WdVkzUnBiMjVDWVhJdWFuTjRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvZ1FHcHplRWx0Y0c5eWRGTnZkWEpqWlNCQVpXMXZkR2x2Ymk5eVpXRmpkQ0FxTDF4dWFXMXdiM0owSUZCeWIzQlVlWEJsY3lCbWNtOXRJQ2R3Y205d0xYUjVjR1Z6SjF4dVhHNXBiWEJ2Y25RZ2UySjFkSFJ2Ym4wZ1puSnZiU0FuYzNSNWJHVW5YRzVjYm1OdmJuTjBJR0poY2xOMGVXeGxJRDBnZTF4dUlDQndZV1JrYVc1bk9pQW5Nelp3ZUNBeE9IQjRKeXhjYmlBZ0x5OGdVSEpsZG1WdWRDQnZkbVZ5Wm14dmR5QjNhR1Z1SUdOdmJuUmxiblFnZEdWNGRDQnBjeUIwYjI4Z2JHOXVaMXh1SUNCdGFXNVhhV1IwYURvZ01DeGNiaUFnWkdsemNHeGhlVG9nSjJac1pYZ25MRnh1SUNCbWJHVjRWM0poY0RvZ0ozZHlZWEFuTEZ4dUlDQmhiR2xuYmtsMFpXMXpPaUFuWTJWdWRHVnlKeXhjYmlBZ0p6NGdLaWM2SUh0Y2JpQWdJQ0F2THlCdFlYSm5hVzQ2SUNjd0lERTRjSGduSUcxcFoyaDBJRzkyWlhKeWFXUmxJSE5sWld0aVlYSWdiV0Z5WjJsdVhHNGdJQ0FnYldGeVoybHVUR1ZtZERvZ0p6RTRjSGduTEZ4dUlDQWdJRzFoY21kcGJsSnBaMmgwT2lBbk1UaHdlQ2NzWEc0Z0lIMHNYRzRnSUc5d1lXTnBkSGs2SUNjeEp5eGNiaUFnZEhKaGJuTnBkR2x2YmpvZ0oyOXdZV05wZEhrZ01DNDFjeUJsWVhObEp5eGNibjFjYmx4dVkyOXVjM1FnWm1Ga1pWTjBlV3hsSUQwZ2UxeHVJQ0J2Y0dGamFYUjVPaUFuTUNjc1hHNGdJQzh2SUdScGMyRmliR1VnWVd4c0lGVkpJR2x1ZEdWeVlXTjBhVzl1Y3lCM2FHbHNaU0JvYVdSa1pXNWNiaUFnY0c5cGJuUmxja1YyWlc1MGN6b2dKMjV2Ym1VbkxGeHVJQ0IwYjNWamFFRmpkR2x2YmpvZ0oyNXZibVVuTEZ4dWZWeHVYRzVqYjI1emRDQkdkVzVqZEdsdmJrSmhjaUE5SUNoN2MzUjViR1VzSUdaaFpHVXNJR05vYVd4a2NtVnVmU2tnUFQ0Z0tGeHVJQ0E4WkdsMlhHNGdJQ0FnWTJ4aGMzTk9ZVzFsUFZ3aWEydHpMWEJzWVhsbGNsOWZablZ1WTNScGIyNHRZbUZ5WENKY2JpQWdJQ0JqYzNNOWUxdGlZWEpUZEhsc1pTd2dabUZrWlNBbUppQm1ZV1JsVTNSNWJHVXNJSE4wZVd4bExDQjdZblYwZEc5dWZWMTlYRzRnSUQ1Y2JpQWdJQ0I3WTJocGJHUnlaVzU5WEc0Z0lEd3ZaR2wyUGx4dUtWeHVYRzVHZFc1amRHbHZia0poY2k1d2NtOXdWSGx3WlhNZ1BTQjdYRzRnSUhOMGVXeGxPaUJRY205d1ZIbHdaWE11YjJKcVpXTjBMRnh1SUNCbVlXUmxPaUJRY205d1ZIbHdaWE11WW05dmJDeGNiaUFnWTJocGJHUnlaVzQ2SUZCeWIzQlVlWEJsY3k1dWIyUmxMRnh1ZlZ4dVJuVnVZM1JwYjI1Q1lYSXVaR1ZtWVhWc2RGQnliM0J6SUQwZ2UxeHVJQ0J6ZEhsc1pUb2dlMzBzWEc1OVhHNWNibVY0Y0c5eWRDQmpiMjV6ZENCemRIbHNaU0E5SUh0Y2JpQWdkRzl3T2lCN1hHNGdJQ0FnWm14bGVGZHlZWEE2SUNkdWIzZHlZWEFuTEZ4dUlDQWdJR0poWTJ0bmNtOTFibVJKYldGblpUb2dZRnh1SUNBZ0lDQWdiR2x1WldGeUxXZHlZV1JwWlc1MEtGeHVJQ0FnSUNBZ0lDQjBieUIwYjNBc1hHNGdJQ0FnSUNBZ0lISm5ZbUVvTUN3Z01Dd2dNQ3dnTUNrc1hHNGdJQ0FnSUNBZ0lISm5ZbUVvTUN3Z01Dd2dNQ3dnTUM0NEtWeHVJQ0FnSUNBZ0tWeHVJQ0FnSUdBc1hHNGdJSDBzWEc0Z0lHSnZkSFJ2YlRvZ2UxeHVJQ0FnSUhCaFpHUnBibWM2SUNjd0lERTRjSGdnTXpad2VDY3NYRzRnSUgwc1hHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRVoxYm1OMGFXOXVRbUZ5WEc0aVhYMD0gKi9cIl0sXG4gIGNoaWxkcmVuOiBjaGlsZHJlblxufSk7XG5cbkZ1bmN0aW9uQmFyLnByb3BUeXBlcyA9IHtcbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGZhZGU6IFByb3BUeXBlcy5ib29sLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5GdW5jdGlvbkJhci5kZWZhdWx0UHJvcHMgPSB7XG4gIHN0eWxlOiB7fVxufTtcblxuLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuY29uc3Qgc3R5bGUkMSA9IHtcbiAgekluZGV4OiA3LFxuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgcGFkZGluZzogJzhweCAxMnB4JyxcbiAgYm9yZGVyUmFkaXVzOiA0LFxuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICBjb2xvcjogJ3doaXRlJyxcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSg1MSwgNTEsIDUxLCAwLjYyNSknXG59O1xuXG5jb25zdCBpc092ZXJmbG93aW5nID0gZWxlbWVudCA9PiBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aDtcblxuY29uc3QgVG9vbHRpcCA9ICh7XG4gIHRpdGxlLFxuICBib3R0b20gPSAnMHB4JyxcbiAgb3ZlcmZsb3dPbmx5LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyXG59KSA9PiB7XG4gIGNvbnN0IHRvb2x0aXBSZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgYm94ZXMgPSB1c2VSZWYoKTtcbiAgY29uc3QgZGVmYXVsdENvbnRhaW5lciA9IHVzZVJlZigpO1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlU3RhdGUoKCkgPT4gKHtcbiAgICBsZWZ0OiAnMTAwJSdcbiAgfSkpO1xuICBjb25zdCBjaGlsZFByb3BzID0ge1xuICAgIG9uTW91c2VFbnRlcjogZXZlbnQgPT4ge1xuICAgICAgaWYgKCFvdmVyZmxvd09ubHkgfHwgaXNPdmVyZmxvd2luZyhldmVudC5jdXJyZW50VGFyZ2V0KSkge1xuICAgICAgICBib3hlcy5jdXJyZW50ID0gW2V2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCldO1xuICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmN1cnJlbnQgPSBkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCB8fCBkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCB8fCBkb2N1bWVudC5ib2R5O1xuICAgICAgICBzZXRPcGVuKHRydWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25Nb3VzZUxlYXZlOiAoKSA9PiB7XG4gICAgICBzZXRQb3NpdGlvbih7XG4gICAgICAgIGxlZnQ6ICcxMDAlJ1xuICAgICAgfSk7XG4gICAgICBzZXRPcGVuKGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gZ2V0UG9wb3ZlclBvc2l0aW9uKHRvb2x0aXBSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgLi4uYm94ZXMuY3VycmVudCk7XG4gICAgICB0YXJnZXRQb3NpdGlvbi5sZWZ0ICE9PSBwb3NpdGlvbi5sZWZ0ICYmIHNldFBvc2l0aW9uKHRhcmdldFBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIFtvcGVuLCBwb3NpdGlvbi5sZWZ0XSk7XG4gIHJldHVybiAhaXNEZXNrdG9wKCkgfHwgIWhhdmVQb2ludGVyKCkgPyBjaGlsZHJlbiA6IGpzeHMoRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGNoaWxkUHJvcHMpLCBvcGVuICYmIC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwoanN4JDEoXCJkaXZcIiwge1xuICAgICAgc3R5bGU6IHsgLi4uc3R5bGUkMSxcbiAgICAgICAgLi4ucG9zaXRpb24sXG4gICAgICAgIHRvcDogYGNhbGMoJHtwb3NpdGlvbi50b3B9cHggLSAke2JvdHRvbX0pYFxuICAgICAgfSxcbiAgICAgIHJlZjogdG9vbHRpcFJlZixcbiAgICAgIGNoaWxkcmVuOiB0aXRsZVxuICAgIH0pLCBjb250YWluZXIgfHwgZGVmYXVsdENvbnRhaW5lci5jdXJyZW50KV1cbiAgfSk7XG59O1xuXG5Ub29sdGlwLnByb3BUeXBlcyA9IHtcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICBib3R0b206IFByb3BUeXBlcy5zdHJpbmcsXG4gIG92ZXJmbG93T25seTogUHJvcFR5cGVzLmJvb2wsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgY29udGFpbmVyOiBQcm9wVHlwZXMub2JqZWN0XG59O1xuXG4vKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5jb25zdCBfY3NzID0ge1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIGNvbG9yOiAnd2hpdGUnLFxuICBmb250U2l6ZTogMjAsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcGFydDoge1xuICAgIHdpZHRoOiAyNixcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInXG4gIH1cbn07XG5cbmNvbnN0IEZvcm1hdHRlZFRpbWUgPSAoe1xuICB0aW1lLFxuICBzaG93SG91cixcbiAgc3R5bGVcbn0pID0+IHtcbiAgdGltZSA9IE1hdGguZmxvb3IodGltZSk7XG4gIGNvbnN0IHNlY29uZCA9IHRpbWUgJSA2MDtcbiAgY29uc3QgbWludXRlID0gKHRpbWUgLSBzZWNvbmQpIC8gNjAgJSA2MDtcbiAgY29uc3QgaG91ciA9ICh0aW1lIC0gc2Vjb25kIC0gbWludXRlICogNjApIC8gNjAgLyA2MDtcbiAgcmV0dXJuIGpzeHMoXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwia2tzLXBsYXllcl9fZm9ybWF0dGVkLXRpbWVcIixcbiAgICBjc3M6IFtfY3NzLCBzdHlsZSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkZvcm1hdHRlZFRpbWU7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklrWnZjbTFoZEhSbFpGUnBiV1V1YW5ONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFYZENhVVFpTENKbWFXeGxJam9pUm05eWJXRjBkR1ZrVkdsdFpTNXFjM2dpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpQkFhbk40U1cxd2IzSjBVMjkxY21ObElFQmxiVzkwYVc5dUwzSmxZV04wSUNvdlhHNXBiWEJ2Y25RZ2UwWnlZV2R0Wlc1MGZTQm1jbTl0SUNkeVpXRmpkQ2RjYm1sdGNHOXlkQ0JRY205d1ZIbHdaWE1nWm5KdmJTQW5jSEp2Y0MxMGVYQmxjeWRjYmx4dVkyOXVjM1FnWDJOemN5QTlJSHRjYmlBZ2RYTmxjbE5sYkdWamREb2dKMjV2Ym1VbkxGeHVJQ0JqYjJ4dmNqb2dKM2RvYVhSbEp5eGNiaUFnWm05dWRGTnBlbVU2SURJd0xGeHVJQ0IzYUdsMFpWTndZV05sT2lBbmJtOTNjbUZ3Snl4Y2JpQWdaR2x6Y0d4aGVUb2dKMmx1YkdsdVpTMW1iR1Y0Snl4Y2JpQWdZV3hwWjI1SmRHVnRjem9nSjJObGJuUmxjaWNzWEc0Z0lIQmhjblE2SUh0Y2JpQWdJQ0IzYVdSMGFEb2dNallzWEc0Z0lDQWdaR2x6Y0d4aGVUb2dKMmx1YkdsdVpTMWliRzlqYXljc1hHNGdJQ0FnZEdWNGRFRnNhV2R1T2lBblkyVnVkR1Z5Snl4Y2JpQWdmU3hjYm4xY2JseHVZMjl1YzNRZ1JtOXliV0YwZEdWa1ZHbHRaU0E5SUNoN2RHbHRaU3dnYzJodmQwaHZkWElzSUhOMGVXeGxmU2tnUFQ0Z2UxeHVJQ0IwYVcxbElEMGdUV0YwYUM1bWJHOXZjaWgwYVcxbEtWeHVJQ0JqYjI1emRDQnpaV052Ym1RZ1BTQjBhVzFsSUNVZ05qQmNiaUFnWTI5dWMzUWdiV2x1ZFhSbElEMGdLQ2gwYVcxbElDMGdjMlZqYjI1a0tTQXZJRFl3S1NBbElEWXdYRzRnSUdOdmJuTjBJR2h2ZFhJZ1BTQW9kR2x0WlNBdElITmxZMjl1WkNBdElHMXBiblYwWlNBcUlEWXdLU0F2SURZd0lDOGdOakJjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0E4YzNCaGJpQmpiR0Z6YzA1aGJXVTlYQ0pyYTNNdGNHeGhlV1Z5WDE5bWIzSnRZWFIwWldRdGRHbHRaVndpSUdOemN6MTdXMTlqYzNNc0lITjBlV3hsWFgwK1hHNGdJQ0FnSUNCN0tITm9iM2RJYjNWeUlIeDhJR2h2ZFhJZ0lUMDlJREFwSUNZbUlDaGNiaUFnSUNBZ0lDQWdQRVp5WVdkdFpXNTBQbHh1SUNBZ0lDQWdJQ0FnSUR4emNHRnVYRzRnSUNBZ0lDQWdJQ0FnSUNCamJHRnpjMDVoYldVOVhDSnJhM010Y0d4aGVXVnlYMTltYjNKdFlYUjBaV1F0ZEdsdFpWOWZjR0Z5ZEZ3aVhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYzNNOWUxdGZZM056TG5CaGNuUXNJSE4wZVd4bExuQmhjblJkZlZ4dUlDQWdJQ0FnSUNBZ0lENWNiaUFnSUNBZ0lDQWdJQ0FnSUh0VGRISnBibWNvYUc5MWNpa3VjR0ZrVTNSaGNuUW9NaXdnSnpBbktYMWNiaUFnSUNBZ0lDQWdJQ0E4TDNOd1lXNCtYRzRnSUNBZ0lDQWdJQ0FnT2x4dUlDQWdJQ0FnSUNBOEwwWnlZV2R0Wlc1MFBseHVJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lEeHpjR0Z1WEc0Z0lDQWdJQ0FnSUdOc1lYTnpUbUZ0WlQxY0ltdHJjeTF3YkdGNVpYSmZYMlp2Y20xaGRIUmxaQzEwYVcxbFgxOXdZWEowWENKY2JpQWdJQ0FnSUNBZ1kzTnpQWHRiWDJOemN5NXdZWEowTENCemRIbHNaUzV3WVhKMFhYMWNiaUFnSUNBZ0lENWNiaUFnSUNBZ0lDQWdlMU4wY21sdVp5aHRhVzUxZEdVcExuQmhaRk4wWVhKMEtESXNJQ2N3SnlsOVhHNGdJQ0FnSUNBOEwzTndZVzQrWEc0Z0lDQWdJQ0E2WEc0Z0lDQWdJQ0E4YzNCaGJseHVJQ0FnSUNBZ0lDQmpiR0Z6YzA1aGJXVTlYQ0pyYTNNdGNHeGhlV1Z5WDE5bWIzSnRZWFIwWldRdGRHbHRaVjlmY0dGeWRGd2lYRzRnSUNBZ0lDQWdJR056Y3oxN1cxOWpjM011Y0dGeWRDd2djM1I1YkdVdWNHRnlkRjE5WEc0Z0lDQWdJQ0ErWEc0Z0lDQWdJQ0FnSUh0VGRISnBibWNvYzJWamIyNWtLUzV3WVdSVGRHRnlkQ2d5TENBbk1DY3BmVnh1SUNBZ0lDQWdQQzl6Y0dGdVBseHVJQ0FnSUR3dmMzQmhiajVjYmlBZ0tWeHVmVnh1Um05eWJXRjBkR1ZrVkdsdFpTNXdjbTl3Vkhsd1pYTWdQU0I3WEc0Z0lIUnBiV1U2SUZCeWIzQlVlWEJsY3k1dWRXMWlaWElzWEc0Z0lITm9iM2RJYjNWeU9pQlFjbTl3Vkhsd1pYTXVZbTl2YkN4Y2JpQWdjM1I1YkdVNklGQnliM0JVZVhCbGN5NXphR0Z3WlNoN1hHNGdJQ0FnY0dGeWREb2dVSEp2Y0ZSNWNHVnpMbTlpYW1WamRDeGNiaUFnZlNrc1hHNTlYRzVHYjNKdFlYUjBaV1JVYVcxbExtUmxabUYxYkhSUWNtOXdjeUE5SUh0Y2JpQWdjM1I1YkdVNklIdDlMRnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCR2IzSnRZWFIwWldSVWFXMWxYRzRpWFgwPSAqL1wiXSxcbiAgICBjaGlsZHJlbjogWyhzaG93SG91ciB8fCBob3VyICE9PSAwKSAmJiBqc3hzKEZyYWdtZW50JDIsIHtcbiAgICAgIGNoaWxkcmVuOiBbanN4JDEoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImtrcy1wbGF5ZXJfX2Zvcm1hdHRlZC10aW1lX19wYXJ0XCIsXG4gICAgICAgIGNzczogW19jc3MucGFydCwgc3R5bGUucGFydCwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkZvcm1hdHRlZFRpbWU7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklrWnZjbTFoZEhSbFpGUnBiV1V1YW5ONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFUWkNXU0lzSW1acGJHVWlPaUpHYjNKdFlYUjBaV1JVYVcxbExtcHplQ0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUlFQnFjM2hKYlhCdmNuUlRiM1Z5WTJVZ1FHVnRiM1JwYjI0dmNtVmhZM1FnS2k5Y2JtbHRjRzl5ZENCN1JuSmhaMjFsYm5SOUlHWnliMjBnSjNKbFlXTjBKMXh1YVcxd2IzSjBJRkJ5YjNCVWVYQmxjeUJtY205dElDZHdjbTl3TFhSNWNHVnpKMXh1WEc1amIyNXpkQ0JmWTNOeklEMGdlMXh1SUNCMWMyVnlVMlZzWldOME9pQW5ibTl1WlNjc1hHNGdJR052Ykc5eU9pQW5kMmhwZEdVbkxGeHVJQ0JtYjI1MFUybDZaVG9nTWpBc1hHNGdJSGRvYVhSbFUzQmhZMlU2SUNkdWIzZHlZWEFuTEZ4dUlDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXWnNaWGduTEZ4dUlDQmhiR2xuYmtsMFpXMXpPaUFuWTJWdWRHVnlKeXhjYmlBZ2NHRnlkRG9nZTF4dUlDQWdJSGRwWkhSb09pQXlOaXhjYmlBZ0lDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXSnNiMk5ySnl4Y2JpQWdJQ0IwWlhoMFFXeHBaMjQ2SUNkalpXNTBaWEluTEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCR2IzSnRZWFIwWldSVWFXMWxJRDBnS0h0MGFXMWxMQ0J6YUc5M1NHOTFjaXdnYzNSNWJHVjlLU0E5UGlCN1hHNGdJSFJwYldVZ1BTQk5ZWFJvTG1ac2IyOXlLSFJwYldVcFhHNGdJR052Ym5OMElITmxZMjl1WkNBOUlIUnBiV1VnSlNBMk1GeHVJQ0JqYjI1emRDQnRhVzUxZEdVZ1BTQW9LSFJwYldVZ0xTQnpaV052Ym1RcElDOGdOakFwSUNVZ05qQmNiaUFnWTI5dWMzUWdhRzkxY2lBOUlDaDBhVzFsSUMwZ2MyVmpiMjVrSUMwZ2JXbHVkWFJsSUNvZ05qQXBJQzhnTmpBZ0x5QTJNRnh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHh6Y0dGdUlHTnNZWE56VG1GdFpUMWNJbXRyY3kxd2JHRjVaWEpmWDJadmNtMWhkSFJsWkMxMGFXMWxYQ0lnWTNOelBYdGJYMk56Y3l3Z2MzUjViR1ZkZlQ1Y2JpQWdJQ0FnSUhzb2MyaHZkMGh2ZFhJZ2ZId2dhRzkxY2lBaFBUMGdNQ2tnSmlZZ0tGeHVJQ0FnSUNBZ0lDQThSbkpoWjIxbGJuUStYRzRnSUNBZ0lDQWdJQ0FnUEhOd1lXNWNiaUFnSUNBZ0lDQWdJQ0FnSUdOc1lYTnpUbUZ0WlQxY0ltdHJjeTF3YkdGNVpYSmZYMlp2Y20xaGRIUmxaQzEwYVcxbFgxOXdZWEowWENKY2JpQWdJQ0FnSUNBZ0lDQWdJR056Y3oxN1cxOWpjM011Y0dGeWRDd2djM1I1YkdVdWNHRnlkRjE5WEc0Z0lDQWdJQ0FnSUNBZ1BseHVJQ0FnSUNBZ0lDQWdJQ0FnZTFOMGNtbHVaeWhvYjNWeUtTNXdZV1JUZEdGeWRDZ3lMQ0FuTUNjcGZWeHVJQ0FnSUNBZ0lDQWdJRHd2YzNCaGJqNWNiaUFnSUNBZ0lDQWdJQ0E2WEc0Z0lDQWdJQ0FnSUR3dlJuSmhaMjFsYm5RK1hHNGdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ1BITndZVzVjYmlBZ0lDQWdJQ0FnWTJ4aGMzTk9ZVzFsUFZ3aWEydHpMWEJzWVhsbGNsOWZabTl5YldGMGRHVmtMWFJwYldWZlgzQmhjblJjSWx4dUlDQWdJQ0FnSUNCamMzTTllMXRmWTNOekxuQmhjblFzSUhOMGVXeGxMbkJoY25SZGZWeHVJQ0FnSUNBZ1BseHVJQ0FnSUNBZ0lDQjdVM1J5YVc1bktHMXBiblYwWlNrdWNHRmtVM1JoY25Rb01pd2dKekFuS1gxY2JpQWdJQ0FnSUR3dmMzQmhiajVjYmlBZ0lDQWdJRHBjYmlBZ0lDQWdJRHh6Y0dGdVhHNGdJQ0FnSUNBZ0lHTnNZWE56VG1GdFpUMWNJbXRyY3kxd2JHRjVaWEpmWDJadmNtMWhkSFJsWkMxMGFXMWxYMTl3WVhKMFhDSmNiaUFnSUNBZ0lDQWdZM056UFh0YlgyTnpjeTV3WVhKMExDQnpkSGxzWlM1d1lYSjBYWDFjYmlBZ0lDQWdJRDVjYmlBZ0lDQWdJQ0FnZTFOMGNtbHVaeWh6WldOdmJtUXBMbkJoWkZOMFlYSjBLRElzSUNjd0p5bDlYRzRnSUNBZ0lDQThMM053WVc0K1hHNGdJQ0FnUEM5emNHRnVQbHh1SUNBcFhHNTlYRzVHYjNKdFlYUjBaV1JVYVcxbExuQnliM0JVZVhCbGN5QTlJSHRjYmlBZ2RHbHRaVG9nVUhKdmNGUjVjR1Z6TG01MWJXSmxjaXhjYmlBZ2MyaHZkMGh2ZFhJNklGQnliM0JVZVhCbGN5NWliMjlzTEZ4dUlDQnpkSGxzWlRvZ1VISnZjRlI1Y0dWekxuTm9ZWEJsS0h0Y2JpQWdJQ0J3WVhKME9pQlFjbTl3Vkhsd1pYTXViMkpxWldOMExGeHVJQ0I5S1N4Y2JuMWNia1p2Y20xaGRIUmxaRlJwYldVdVpHVm1ZWFZzZEZCeWIzQnpJRDBnZTF4dUlDQnpkSGxzWlRvZ2UzMHNYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUVadmNtMWhkSFJsWkZScGJXVmNiaUpkZlE9PSAqL1wiXSxcbiAgICAgICAgY2hpbGRyZW46IFN0cmluZyhob3VyKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICB9KSwgXCI6XCJdXG4gICAgfSksIGpzeCQxKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwia2tzLXBsYXllcl9fZm9ybWF0dGVkLXRpbWVfX3BhcnRcIixcbiAgICAgIGNzczogW19jc3MucGFydCwgc3R5bGUucGFydCwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkZvcm1hdHRlZFRpbWU7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklrWnZjbTFoZEhSbFpGUnBiV1V1YW5ONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFYTkRVU0lzSW1acGJHVWlPaUpHYjNKdFlYUjBaV1JVYVcxbExtcHplQ0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUlFQnFjM2hKYlhCdmNuUlRiM1Z5WTJVZ1FHVnRiM1JwYjI0dmNtVmhZM1FnS2k5Y2JtbHRjRzl5ZENCN1JuSmhaMjFsYm5SOUlHWnliMjBnSjNKbFlXTjBKMXh1YVcxd2IzSjBJRkJ5YjNCVWVYQmxjeUJtY205dElDZHdjbTl3TFhSNWNHVnpKMXh1WEc1amIyNXpkQ0JmWTNOeklEMGdlMXh1SUNCMWMyVnlVMlZzWldOME9pQW5ibTl1WlNjc1hHNGdJR052Ykc5eU9pQW5kMmhwZEdVbkxGeHVJQ0JtYjI1MFUybDZaVG9nTWpBc1hHNGdJSGRvYVhSbFUzQmhZMlU2SUNkdWIzZHlZWEFuTEZ4dUlDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXWnNaWGduTEZ4dUlDQmhiR2xuYmtsMFpXMXpPaUFuWTJWdWRHVnlKeXhjYmlBZ2NHRnlkRG9nZTF4dUlDQWdJSGRwWkhSb09pQXlOaXhjYmlBZ0lDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXSnNiMk5ySnl4Y2JpQWdJQ0IwWlhoMFFXeHBaMjQ2SUNkalpXNTBaWEluTEZ4dUlDQjlMRnh1ZlZ4dVhHNWpiMjV6ZENCR2IzSnRZWFIwWldSVWFXMWxJRDBnS0h0MGFXMWxMQ0J6YUc5M1NHOTFjaXdnYzNSNWJHVjlLU0E5UGlCN1hHNGdJSFJwYldVZ1BTQk5ZWFJvTG1ac2IyOXlLSFJwYldVcFhHNGdJR052Ym5OMElITmxZMjl1WkNBOUlIUnBiV1VnSlNBMk1GeHVJQ0JqYjI1emRDQnRhVzUxZEdVZ1BTQW9LSFJwYldVZ0xTQnpaV052Ym1RcElDOGdOakFwSUNVZ05qQmNiaUFnWTI5dWMzUWdhRzkxY2lBOUlDaDBhVzFsSUMwZ2MyVmpiMjVrSUMwZ2JXbHVkWFJsSUNvZ05qQXBJQzhnTmpBZ0x5QTJNRnh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHh6Y0dGdUlHTnNZWE56VG1GdFpUMWNJbXRyY3kxd2JHRjVaWEpmWDJadmNtMWhkSFJsWkMxMGFXMWxYQ0lnWTNOelBYdGJYMk56Y3l3Z2MzUjViR1ZkZlQ1Y2JpQWdJQ0FnSUhzb2MyaHZkMGh2ZFhJZ2ZId2dhRzkxY2lBaFBUMGdNQ2tnSmlZZ0tGeHVJQ0FnSUNBZ0lDQThSbkpoWjIxbGJuUStYRzRnSUNBZ0lDQWdJQ0FnUEhOd1lXNWNiaUFnSUNBZ0lDQWdJQ0FnSUdOc1lYTnpUbUZ0WlQxY0ltdHJjeTF3YkdGNVpYSmZYMlp2Y20xaGRIUmxaQzEwYVcxbFgxOXdZWEowWENKY2JpQWdJQ0FnSUNBZ0lDQWdJR056Y3oxN1cxOWpjM011Y0dGeWRDd2djM1I1YkdVdWNHRnlkRjE5WEc0Z0lDQWdJQ0FnSUNBZ1BseHVJQ0FnSUNBZ0lDQWdJQ0FnZTFOMGNtbHVaeWhvYjNWeUtTNXdZV1JUZEdGeWRDZ3lMQ0FuTUNjcGZWeHVJQ0FnSUNBZ0lDQWdJRHd2YzNCaGJqNWNiaUFnSUNBZ0lDQWdJQ0E2WEc0Z0lDQWdJQ0FnSUR3dlJuSmhaMjFsYm5RK1hHNGdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ1BITndZVzVjYmlBZ0lDQWdJQ0FnWTJ4aGMzTk9ZVzFsUFZ3aWEydHpMWEJzWVhsbGNsOWZabTl5YldGMGRHVmtMWFJwYldWZlgzQmhjblJjSWx4dUlDQWdJQ0FnSUNCamMzTTllMXRmWTNOekxuQmhjblFzSUhOMGVXeGxMbkJoY25SZGZWeHVJQ0FnSUNBZ1BseHVJQ0FnSUNBZ0lDQjdVM1J5YVc1bktHMXBiblYwWlNrdWNHRmtVM1JoY25Rb01pd2dKekFuS1gxY2JpQWdJQ0FnSUR3dmMzQmhiajVjYmlBZ0lDQWdJRHBjYmlBZ0lDQWdJRHh6Y0dGdVhHNGdJQ0FnSUNBZ0lHTnNZWE56VG1GdFpUMWNJbXRyY3kxd2JHRjVaWEpmWDJadmNtMWhkSFJsWkMxMGFXMWxYMTl3WVhKMFhDSmNiaUFnSUNBZ0lDQWdZM056UFh0YlgyTnpjeTV3WVhKMExDQnpkSGxzWlM1d1lYSjBYWDFjYmlBZ0lDQWdJRDVjYmlBZ0lDQWdJQ0FnZTFOMGNtbHVaeWh6WldOdmJtUXBMbkJoWkZOMFlYSjBLRElzSUNjd0p5bDlYRzRnSUNBZ0lDQThMM053WVc0K1hHNGdJQ0FnUEM5emNHRnVQbHh1SUNBcFhHNTlYRzVHYjNKdFlYUjBaV1JVYVcxbExuQnliM0JVZVhCbGN5QTlJSHRjYmlBZ2RHbHRaVG9nVUhKdmNGUjVjR1Z6TG01MWJXSmxjaXhjYmlBZ2MyaHZkMGh2ZFhJNklGQnliM0JVZVhCbGN5NWliMjlzTEZ4dUlDQnpkSGxzWlRvZ1VISnZjRlI1Y0dWekxuTm9ZWEJsS0h0Y2JpQWdJQ0J3WVhKME9pQlFjbTl3Vkhsd1pYTXViMkpxWldOMExGeHVJQ0I5S1N4Y2JuMWNia1p2Y20xaGRIUmxaRlJwYldVdVpHVm1ZWFZzZEZCeWIzQnpJRDBnZTF4dUlDQnpkSGxzWlRvZ2UzMHNYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUVadmNtMWhkSFJsWkZScGJXVmNiaUpkZlE9PSAqL1wiXSxcbiAgICAgIGNoaWxkcmVuOiBTdHJpbmcobWludXRlKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgfSksIFwiOlwiLCBqc3gkMShcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImtrcy1wbGF5ZXJfX2Zvcm1hdHRlZC10aW1lX19wYXJ0XCIsXG4gICAgICBjc3M6IFtfY3NzLnBhcnQsIHN0eWxlLnBhcnQsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIjtsYWJlbDpGb3JtYXR0ZWRUaW1lO1wiLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJa1p2Y20xaGRIUmxaRlJwYldVdWFuTjRJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVFpEVVNJc0ltWnBiR1VpT2lKR2IzSnRZWFIwWldSVWFXMWxMbXB6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFJRUJxYzNoSmJYQnZjblJUYjNWeVkyVWdRR1Z0YjNScGIyNHZjbVZoWTNRZ0tpOWNibWx0Y0c5eWRDQjdSbkpoWjIxbGJuUjlJR1p5YjIwZ0ozSmxZV04wSjF4dWFXMXdiM0owSUZCeWIzQlVlWEJsY3lCbWNtOXRJQ2R3Y205d0xYUjVjR1Z6SjF4dVhHNWpiMjV6ZENCZlkzTnpJRDBnZTF4dUlDQjFjMlZ5VTJWc1pXTjBPaUFuYm05dVpTY3NYRzRnSUdOdmJHOXlPaUFuZDJocGRHVW5MRnh1SUNCbWIyNTBVMmw2WlRvZ01qQXNYRzRnSUhkb2FYUmxVM0JoWTJVNklDZHViM2R5WVhBbkxGeHVJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV1pzWlhnbkxGeHVJQ0JoYkdsbmJrbDBaVzF6T2lBblkyVnVkR1Z5Snl4Y2JpQWdjR0Z5ZERvZ2UxeHVJQ0FnSUhkcFpIUm9PaUF5Tml4Y2JpQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOckp5eGNiaUFnSUNCMFpYaDBRV3hwWjI0NklDZGpaVzUwWlhJbkxGeHVJQ0I5TEZ4dWZWeHVYRzVqYjI1emRDQkdiM0p0WVhSMFpXUlVhVzFsSUQwZ0tIdDBhVzFsTENCemFHOTNTRzkxY2l3Z2MzUjViR1Y5S1NBOVBpQjdYRzRnSUhScGJXVWdQU0JOWVhSb0xtWnNiMjl5S0hScGJXVXBYRzRnSUdOdmJuTjBJSE5sWTI5dVpDQTlJSFJwYldVZ0pTQTJNRnh1SUNCamIyNXpkQ0J0YVc1MWRHVWdQU0FvS0hScGJXVWdMU0J6WldOdmJtUXBJQzhnTmpBcElDVWdOakJjYmlBZ1kyOXVjM1FnYUc5MWNpQTlJQ2gwYVcxbElDMGdjMlZqYjI1a0lDMGdiV2x1ZFhSbElDb2dOakFwSUM4Z05qQWdMeUEyTUZ4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4emNHRnVJR05zWVhOelRtRnRaVDFjSW10cmN5MXdiR0Y1WlhKZlgyWnZjbTFoZEhSbFpDMTBhVzFsWENJZ1kzTnpQWHRiWDJOemN5d2djM1I1YkdWZGZUNWNiaUFnSUNBZ0lIc29jMmh2ZDBodmRYSWdmSHdnYUc5MWNpQWhQVDBnTUNrZ0ppWWdLRnh1SUNBZ0lDQWdJQ0E4Um5KaFoyMWxiblErWEc0Z0lDQWdJQ0FnSUNBZ1BITndZVzVjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnNZWE56VG1GdFpUMWNJbXRyY3kxd2JHRjVaWEpmWDJadmNtMWhkSFJsWkMxMGFXMWxYMTl3WVhKMFhDSmNiaUFnSUNBZ0lDQWdJQ0FnSUdOemN6MTdXMTlqYzNNdWNHRnlkQ3dnYzNSNWJHVXVjR0Z5ZEYxOVhHNGdJQ0FnSUNBZ0lDQWdQbHh1SUNBZ0lDQWdJQ0FnSUNBZ2UxTjBjbWx1Wnlob2IzVnlLUzV3WVdSVGRHRnlkQ2d5TENBbk1DY3BmVnh1SUNBZ0lDQWdJQ0FnSUR3dmMzQmhiajVjYmlBZ0lDQWdJQ0FnSUNBNlhHNGdJQ0FnSUNBZ0lEd3ZSbkpoWjIxbGJuUStYRzRnSUNBZ0lDQXBmVnh1SUNBZ0lDQWdQSE53WVc1Y2JpQWdJQ0FnSUNBZ1kyeGhjM05PWVcxbFBWd2lhMnR6TFhCc1lYbGxjbDlmWm05eWJXRjBkR1ZrTFhScGJXVmZYM0JoY25SY0lseHVJQ0FnSUNBZ0lDQmpjM005ZTF0ZlkzTnpMbkJoY25Rc0lITjBlV3hsTG5CaGNuUmRmVnh1SUNBZ0lDQWdQbHh1SUNBZ0lDQWdJQ0I3VTNSeWFXNW5LRzFwYm5WMFpTa3VjR0ZrVTNSaGNuUW9NaXdnSnpBbktYMWNiaUFnSUNBZ0lEd3ZjM0JoYmo1Y2JpQWdJQ0FnSURwY2JpQWdJQ0FnSUR4emNHRnVYRzRnSUNBZ0lDQWdJR05zWVhOelRtRnRaVDFjSW10cmN5MXdiR0Y1WlhKZlgyWnZjbTFoZEhSbFpDMTBhVzFsWDE5d1lYSjBYQ0pjYmlBZ0lDQWdJQ0FnWTNOelBYdGJYMk56Y3k1d1lYSjBMQ0J6ZEhsc1pTNXdZWEowWFgxY2JpQWdJQ0FnSUQ1Y2JpQWdJQ0FnSUNBZ2UxTjBjbWx1WnloelpXTnZibVFwTG5CaFpGTjBZWEowS0RJc0lDY3dKeWw5WEc0Z0lDQWdJQ0E4TDNOd1lXNCtYRzRnSUNBZ1BDOXpjR0Z1UGx4dUlDQXBYRzU5WEc1R2IzSnRZWFIwWldSVWFXMWxMbkJ5YjNCVWVYQmxjeUE5SUh0Y2JpQWdkR2x0WlRvZ1VISnZjRlI1Y0dWekxtNTFiV0psY2l4Y2JpQWdjMmh2ZDBodmRYSTZJRkJ5YjNCVWVYQmxjeTVpYjI5c0xGeHVJQ0J6ZEhsc1pUb2dVSEp2Y0ZSNWNHVnpMbk5vWVhCbEtIdGNiaUFnSUNCd1lYSjBPaUJRY205d1ZIbHdaWE11YjJKcVpXTjBMRnh1SUNCOUtTeGNibjFjYmtadmNtMWhkSFJsWkZScGJXVXVaR1ZtWVhWc2RGQnliM0J6SUQwZ2UxeHVJQ0J6ZEhsc1pUb2dlMzBzWEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElFWnZjbTFoZEhSbFpGUnBiV1ZjYmlKZGZRPT0gKi9cIl0sXG4gICAgICBjaGlsZHJlbjogU3RyaW5nKHNlY29uZCkucGFkU3RhcnQoMiwgJzAnKVxuICAgIH0pXVxuICB9KTtcbn07XG5cbkZvcm1hdHRlZFRpbWUucHJvcFR5cGVzID0ge1xuICB0aW1lOiBQcm9wVHlwZXMubnVtYmVyLFxuICBzaG93SG91cjogUHJvcFR5cGVzLmJvb2wsXG4gIHN0eWxlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcnQ6IFByb3BUeXBlcy5vYmplY3RcbiAgfSlcbn07XG5Gb3JtYXR0ZWRUaW1lLmRlZmF1bHRQcm9wcyA9IHtcbiAgc3R5bGU6IHt9XG59O1xuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5jb25zdCBzbGlkZXJTdHlsZSA9IHtcbiAgZmxleDogMSxcbiAgbWFyZ2luOiAnMCAwLjVyZW0nLFxuICBoZWlnaHQ6ICc0cHgnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnXG59O1xuXG5jb25zdCBnZXRMaXZlc0luZm8gPSAoe1xuICBzdGFydFRpbWUsXG4gIGVuZFRpbWVcbn0pID0+IHtcbiAgY29uc3QgZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xuICBjb25zdCBub3dTZWNvbmQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihub3dTZWNvbmQgLSBzdGFydFRpbWUsIGR1cmF0aW9uKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVudFRpbWUsXG4gICAgZHVyYXRpb25cbiAgfTtcbn07XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjEyNXl3czBcIixcbiAgc3R5bGVzOiBcImZsZXg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MThweFwiXG59IDoge1xuICBuYW1lOiBcIjh4MWY3cS1TZWVrYmFyXCIsXG4gIHN0eWxlczogXCJmbGV4OjEwMCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE4cHg7bGFiZWw6U2Vla2JhcjtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsTmxaV3RpWVhJdWFuTjRJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRWFZEVFNJc0ltWnBiR1VpT2lKVFpXVnJZbUZ5TG1wemVDSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxSUVCcWMzaEpiWEJ2Y25SVGIzVnlZMlVnUUdWdGIzUnBiMjR2Y21WaFkzUWdLaTljYm1sdGNHOXlkQ0JmWjJWMElHWnliMjBnSjJSc2RpZGNibHh1YVcxd2IzSjBJRVp2Y20xaGRIUmxaRlJwYldVZ1puSnZiU0FuWTI5dGNHOXVaVzUwTDBadmNtMWhkSFJsWkZScGJXVW5YRzVwYlhCdmNuUWdVMmx0Y0d4bFUyeHBaR1Z5SUdaeWIyMGdKM0JzWVhsbGNsVnBMMU5wYlhCc1pWTnNhV1JsY2lkY2JtbHRjRzl5ZENCN2RYTmxRMkZ6ZEVOdmJuUmxlSFI5SUdaeWIyMGdKMk5oYzNRdlkyOXVkR1Y0ZENkY2JtbHRjRzl5ZENCN1UyVmxhMDl5YVdkcGJuMGdabkp2YlNBblJXNTFiU2RjYmx4dVkyOXVjM1FnYzJ4cFpHVnlVM1I1YkdVZ1BTQjdYRzRnSUdac1pYZzZJREVzWEc0Z0lHMWhjbWRwYmpvZ0p6QWdNQzQxY21WdEp5eGNiaUFnYUdWcFoyaDBPaUFuTkhCNEp5eGNiaUFnWW1GamEyZHliM1Z1WkVOdmJHOXlPaUFuY21Wa0p5eGNibjFjYmx4dVkyOXVjM1FnWjJWMFRHbDJaWE5KYm1adklEMGdLSHR6ZEdGeWRGUnBiV1VzSUdWdVpGUnBiV1Y5S1NBOVBpQjdYRzRnSUdOdmJuTjBJR1IxY21GMGFXOXVJRDBnWlc1a1ZHbHRaU0F0SUhOMFlYSjBWR2x0WlZ4dUlDQmpiMjV6ZENCdWIzZFRaV052Ym1RZ1BTQk5ZWFJvTG1ac2IyOXlLRVJoZEdVdWJtOTNLQ2tnTHlBeE1EQXdLVnh1SUNCamIyNXpkQ0JqZFhKeVpXNTBWR2x0WlNBOUlFMWhkR2d1YldGNEtEQXNJRTFoZEdndWJXbHVLRzV2ZDFObFkyOXVaQ0F0SUhOMFlYSjBWR2x0WlN3Z1pIVnlZWFJwYjI0cEtWeHVYRzRnSUhKbGRIVnliaUI3WTNWeWNtVnVkRlJwYldVc0lHUjFjbUYwYVc5dWZWeHVmVnh1WEc1amIyNXpkQ0JUWldWclltRnlJRDBnS0NrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3WEc0Z0lDQWdZV04wYVc5dWN6b2dlM05sWld0OUxGeHVJQ0FnSUM0dUxuTjBZWFJsWEc0Z0lIMGdQU0IxYzJWRFlYTjBRMjl1ZEdWNGRDZ3BYRzRnSUdOdmJuTjBJSHRjYmlBZ0lDQmpkWEp5Wlc1MFZHbHRaU3hjYmlBZ0lDQndjbTluY21WemMxUnBiV1VnUFNCamRYSnlaVzUwVkdsdFpTeGNiaUFnSUNCa2RYSmhkR2x2Yml4Y2JpQWdmU0E5SUhOMFlYUmxMbk4wY21WaGJWUjVjR1VnUFQwOUlDZE1TVlpGSjF4dUlDQWdJRDhnWjJWMFRHbDJaWE5KYm1adktGOW5aWFFvYzNSaGRHVXNJQ2RqZFhOMGIyMUVZWFJoSnlrZ2ZId2dlMzBwWEc0Z0lDQWdPaUJ6ZEdGMFpWeHVYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdQR1JwZGx4dUlDQWdJQ0FnWTJ4aGMzTk9ZVzFsUFZ3aWEydHpMWEJzWVhsbGNsOWZjMlZsYXkxaVlYSmNJbHh1SUNBZ0lDQWdZM056UFh0N1hHNGdJQ0FnSUNBZ0lHWnNaWGc2SUNjeE1EQWxKeXhjYmlBZ0lDQWdJQ0FnWkdsemNHeGhlVG9nSjJac1pYZ25MRnh1SUNBZ0lDQWdJQ0JoYkdsbmJrbDBaVzF6T2lBblkyVnVkR1Z5Snl4Y2JpQWdJQ0FnSUNBZ2JXRnlaMmx1UW05MGRHOXRPaUFuTVRod2VDY3NYRzRnSUNBZ0lDQjlmVnh1SUNBZ0lENWNiaUFnSUNBZ0lEeEdiM0p0WVhSMFpXUlVhVzFsSUhScGJXVTllM0J5YjJkeVpYTnpWR2x0WlgwZ0x6NWNiaUFnSUNBZ0lIdHpkR0YwWlM1emRISmxZVzFVZVhCbElEMDlQU0FuVEVsV1JTY2dQeUFvWEc0Z0lDQWdJQ0FnSUR4a2FYWWdZM056UFh0emJHbGtaWEpUZEhsc1pYMGdMejVjYmlBZ0lDQWdJQ2tnT2lBb1hHNGdJQ0FnSUNBZ0lEeFRhVzF3YkdWVGJHbGtaWEpjYmlBZ0lDQWdJQ0FnSUNCamMzTTllM3R0WVhKbmFXNDZJQ2N3SURGeVpXMG5MQ0JtYkdWNE9pQXhmWDFjYmlBZ0lDQWdJQ0FnSUNCMllXeDFaVDE3Y0hKdlozSmxjM05VYVcxbGZWeHVJQ0FnSUNBZ0lDQWdJRzFoZUQxN1pIVnlZWFJwYjI1OVhHNGdJQ0FnSUNBZ0lDQWdiMjVEYUdGdVoyVkRiMjF0YVhSMFpXUTlleWhmTENCN2RtRnNkV1Y5S1NBOVBseHVJQ0FnSUNBZ0lDQWdJQ0FnYzJWbGF5aDdiM0pwWjJsdU9pQlRaV1ZyVDNKcFoybHVMbE5VUVZKVUxDQnpaV052Ym1Sek9pQjJZV3gxWlgwcFhHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0F2UGx4dUlDQWdJQ0FnS1gxY2JpQWdJQ0FnSUR4R2IzSnRZWFIwWldSVWFXMWxJSFJwYldVOWUwMWhkR2d1YldGNEtHUjFjbUYwYVc5dUxDQndjbTluY21WemMxUnBiV1VwZlNBdlBseHVJQ0FnSUR3dlpHbDJQbHh1SUNBcFhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRk5sWld0aVlYSmNiaUpkZlE9PSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJ0dXFtcTNcIixcbiAgc3R5bGVzOiBcIm1hcmdpbjowIDFyZW07ZmxleDoxXCJcbn0gOiB7XG4gIG5hbWU6IFwiMXlzaXd4bS1TZWVrYmFyXCIsXG4gIHN0eWxlczogXCJtYXJnaW46MCAxcmVtO2ZsZXg6MTtsYWJlbDpTZWVrYmFyO1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxObFpXdGlZWEl1YW5ONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXMUVWU0lzSW1acGJHVWlPaUpUWldWclltRnlMbXB6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFJRUJxYzNoSmJYQnZjblJUYjNWeVkyVWdRR1Z0YjNScGIyNHZjbVZoWTNRZ0tpOWNibWx0Y0c5eWRDQmZaMlYwSUdaeWIyMGdKMlJzZGlkY2JseHVhVzF3YjNKMElFWnZjbTFoZEhSbFpGUnBiV1VnWm5KdmJTQW5ZMjl0Y0c5dVpXNTBMMFp2Y20xaGRIUmxaRlJwYldVblhHNXBiWEJ2Y25RZ1UybHRjR3hsVTJ4cFpHVnlJR1p5YjIwZ0ozQnNZWGxsY2xWcEwxTnBiWEJzWlZOc2FXUmxjaWRjYm1sdGNHOXlkQ0I3ZFhObFEyRnpkRU52Ym5SbGVIUjlJR1p5YjIwZ0oyTmhjM1F2WTI5dWRHVjRkQ2RjYm1sdGNHOXlkQ0I3VTJWbGEwOXlhV2RwYm4wZ1puSnZiU0FuUlc1MWJTZGNibHh1WTI5dWMzUWdjMnhwWkdWeVUzUjViR1VnUFNCN1hHNGdJR1pzWlhnNklERXNYRzRnSUcxaGNtZHBiam9nSnpBZ01DNDFjbVZ0Snl4Y2JpQWdhR1ZwWjJoME9pQW5OSEI0Snl4Y2JpQWdZbUZqYTJkeWIzVnVaRU52Ykc5eU9pQW5jbVZrSnl4Y2JuMWNibHh1WTI5dWMzUWdaMlYwVEdsMlpYTkpibVp2SUQwZ0tIdHpkR0Z5ZEZScGJXVXNJR1Z1WkZScGJXVjlLU0E5UGlCN1hHNGdJR052Ym5OMElHUjFjbUYwYVc5dUlEMGdaVzVrVkdsdFpTQXRJSE4wWVhKMFZHbHRaVnh1SUNCamIyNXpkQ0J1YjNkVFpXTnZibVFnUFNCTllYUm9MbVpzYjI5eUtFUmhkR1V1Ym05M0tDa2dMeUF4TURBd0tWeHVJQ0JqYjI1emRDQmpkWEp5Wlc1MFZHbHRaU0E5SUUxaGRHZ3ViV0Y0S0RBc0lFMWhkR2d1YldsdUtHNXZkMU5sWTI5dVpDQXRJSE4wWVhKMFZHbHRaU3dnWkhWeVlYUnBiMjRwS1Z4dVhHNGdJSEpsZEhWeWJpQjdZM1Z5Y21WdWRGUnBiV1VzSUdSMWNtRjBhVzl1ZlZ4dWZWeHVYRzVqYjI1emRDQlRaV1ZyWW1GeUlEMGdLQ2tnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdYRzRnSUNBZ1lXTjBhVzl1Y3pvZ2UzTmxaV3Q5TEZ4dUlDQWdJQzR1TG5OMFlYUmxYRzRnSUgwZ1BTQjFjMlZEWVhOMFEyOXVkR1Y0ZENncFhHNGdJR052Ym5OMElIdGNiaUFnSUNCamRYSnlaVzUwVkdsdFpTeGNiaUFnSUNCd2NtOW5jbVZ6YzFScGJXVWdQU0JqZFhKeVpXNTBWR2x0WlN4Y2JpQWdJQ0JrZFhKaGRHbHZiaXhjYmlBZ2ZTQTlJSE4wWVhSbExuTjBjbVZoYlZSNWNHVWdQVDA5SUNkTVNWWkZKMXh1SUNBZ0lEOGdaMlYwVEdsMlpYTkpibVp2S0Y5blpYUW9jM1JoZEdVc0lDZGpkWE4wYjIxRVlYUmhKeWtnZkh3Z2UzMHBYRzRnSUNBZ09pQnpkR0YwWlZ4dVhHNGdJSEpsZEhWeWJpQW9YRzRnSUNBZ1BHUnBkbHh1SUNBZ0lDQWdZMnhoYzNOT1lXMWxQVndpYTJ0ekxYQnNZWGxsY2w5ZmMyVmxheTFpWVhKY0lseHVJQ0FnSUNBZ1kzTnpQWHQ3WEc0Z0lDQWdJQ0FnSUdac1pYZzZJQ2N4TURBbEp5eGNiaUFnSUNBZ0lDQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0FnSUNBZ0lDQmhiR2xuYmtsMFpXMXpPaUFuWTJWdWRHVnlKeXhjYmlBZ0lDQWdJQ0FnYldGeVoybHVRbTkwZEc5dE9pQW5NVGh3ZUNjc1hHNGdJQ0FnSUNCOWZWeHVJQ0FnSUQ1Y2JpQWdJQ0FnSUR4R2IzSnRZWFIwWldSVWFXMWxJSFJwYldVOWUzQnliMmR5WlhOelZHbHRaWDBnTHo1Y2JpQWdJQ0FnSUh0emRHRjBaUzV6ZEhKbFlXMVVlWEJsSUQwOVBTQW5URWxXUlNjZ1B5QW9YRzRnSUNBZ0lDQWdJRHhrYVhZZ1kzTnpQWHR6Ykdsa1pYSlRkSGxzWlgwZ0x6NWNiaUFnSUNBZ0lDa2dPaUFvWEc0Z0lDQWdJQ0FnSUR4VGFXMXdiR1ZUYkdsa1pYSmNiaUFnSUNBZ0lDQWdJQ0JqYzNNOWUzdHRZWEpuYVc0NklDY3dJREZ5WlcwbkxDQm1iR1Y0T2lBeGZYMWNiaUFnSUNBZ0lDQWdJQ0IyWVd4MVpUMTdjSEp2WjNKbGMzTlVhVzFsZlZ4dUlDQWdJQ0FnSUNBZ0lHMWhlRDE3WkhWeVlYUnBiMjU5WEc0Z0lDQWdJQ0FnSUNBZ2IyNURhR0Z1WjJWRGIyMXRhWFIwWldROWV5aGZMQ0I3ZG1Gc2RXVjlLU0E5UGx4dUlDQWdJQ0FnSUNBZ0lDQWdjMlZsYXloN2IzSnBaMmx1T2lCVFpXVnJUM0pwWjJsdUxsTlVRVkpVTENCelpXTnZibVJ6T2lCMllXeDFaWDBwWEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdLWDFjYmlBZ0lDQWdJRHhHYjNKdFlYUjBaV1JVYVcxbElIUnBiV1U5ZTAxaGRHZ3ViV0Y0S0dSMWNtRjBhVzl1TENCd2NtOW5jbVZ6YzFScGJXVXBmU0F2UGx4dUlDQWdJRHd2WkdsMlBseHVJQ0FwWEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElGTmxaV3RpWVhKY2JpSmRmUT09ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuY29uc3QgU2Vla2JhciA9ICgpID0+IHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnM6IHtcbiAgICAgIHNlZWtcbiAgICB9LFxuICAgIC4uLnN0YXRlXG4gIH0gPSB1c2VDYXN0Q29udGV4dCgpO1xuICBjb25zdCB7XG4gICAgY3VycmVudFRpbWUsXG4gICAgcHJvZ3Jlc3NUaW1lID0gY3VycmVudFRpbWUsXG4gICAgZHVyYXRpb25cbiAgfSA9IHN0YXRlLnN0cmVhbVR5cGUgPT09ICdMSVZFJyA/IGdldExpdmVzSW5mbyhfZ2V0KHN0YXRlLCAnY3VzdG9tRGF0YScpIHx8IHt9KSA6IHN0YXRlO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImtrcy1wbGF5ZXJfX3NlZWstYmFyXCIsXG4gICAgY3NzOiBfcmVmLFxuICAgIGNoaWxkcmVuOiBbanN4JDEoRm9ybWF0dGVkVGltZSwge1xuICAgICAgdGltZTogcHJvZ3Jlc3NUaW1lXG4gICAgfSksIHN0YXRlLnN0cmVhbVR5cGUgPT09ICdMSVZFJyA/IGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgIGNzczogc2xpZGVyU3R5bGVcbiAgICB9KSA6IGpzeCQxKFNpbXBsZVNsaWRlciwge1xuICAgICAgY3NzOiBfcmVmMixcbiAgICAgIHZhbHVlOiBwcm9ncmVzc1RpbWUsXG4gICAgICBtYXg6IGR1cmF0aW9uLFxuICAgICAgb25DaGFuZ2VDb21taXR0ZWQ6IChfLCB7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KSA9PiBzZWVrKHtcbiAgICAgICAgb3JpZ2luOiBTZWVrT3JpZ2luLlNUQVJULFxuICAgICAgICBzZWNvbmRzOiB2YWx1ZVxuICAgICAgfSlcbiAgICB9KSwganN4JDEoRm9ybWF0dGVkVGltZSwge1xuICAgICAgdGltZTogTWF0aC5tYXgoZHVyYXRpb24sIHByb2dyZXNzVGltZSlcbiAgICB9KV1cbiAgfSk7XG59O1xuXG4vKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5cbmNvbnN0IEljb25CdXR0b24gPSAoe1xuICBuYW1lLFxuICBzdGFydEljb24sXG4gIHRvb2x0aXAsXG4gIC4uLm90aGVyc1xufSkgPT4ganN4JDEoQnV0dG9uLCB7XG4gIHN0YXJ0SWNvbjogc3RhcnRJY29uLFxuICB0aXRsZTogdG9vbHRpcCxcbiAgLi4ub3RoZXJzXG59KTtcblxuSWNvbkJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN0YXJ0SWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdG9vbHRpcDogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmNvbnN0IFBsYXlCdXR0b24gPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwbGF5ZXJTdGF0ZSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBwbGF5LFxuICAgICAgcGF1c2VcbiAgICB9XG4gIH0gPSB1c2VDYXN0Q29udGV4dCgpO1xuICBjb25zdCBhY3Rpb24gPSBwbGF5ZXJTdGF0ZSAhPT0gJ1BMQVlJTkcnID8gJ3BsYXknIDogJ3BhdXNlJztcbiAgY29uc3QgdG9vbHRpcCA9IHBsYXllclN0YXRlICE9PSAnUExBWUlORycgPyAnS0tTLlBMQVlFUi5QTEFZJyA6ICdLS1MuUExBWUVSLlBBVVNFJztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9qc3goSWNvbkJ1dHRvbiwge1xuICAgIHN0YXJ0SWNvbjogYWN0aW9uLFxuICAgIHRvb2x0aXA6IHRvb2x0aXAsXG4gICAgb25DbGljazogYWN0aW9uID09PSAncGxheScgPyBwbGF5IDogcGF1c2VcbiAgfSk7XG59O1xuXG5jb25zdCBSZXdpbmRCdXR0b24gPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZWVrXG4gICAgfVxuICB9ID0gdXNlQ2FzdENvbnRleHQoKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9qc3goSWNvbkJ1dHRvbiwge1xuICAgIHN0YXJ0SWNvbjogXCJyZXdpbmQxMFwiLFxuICAgIHRvb2x0aXA6IFwiS0tTLlBMQVlFUi5SRVdJTkRcIixcbiAgICBvbkNsaWNrOiAoKSA9PiBzZWVrKHtcbiAgICAgIG9yaWdpbjogU2Vla09yaWdpbi5DVVJSRU5ULFxuICAgICAgc2Vjb25kczogLTEwXG4gICAgfSlcbiAgfSk7XG59O1xuXG5jb25zdCBGb3J3YXJkQnV0dG9uID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgYWN0aW9uczoge1xuICAgICAgc2Vla1xuICAgIH1cbiAgfSA9IHVzZUNhc3RDb250ZXh0KCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovanN4KEljb25CdXR0b24sIHtcbiAgICBzdGFydEljb246IFwiZm9yd2FyZDEwXCIsXG4gICAgdG9vbHRpcDogXCJLS1MuUExBWUVSLkZPUldBUkRcIixcbiAgICBvbkNsaWNrOiAoKSA9PiBzZWVrKHtcbiAgICAgIG9yaWdpbjogU2Vla09yaWdpbi5DVVJSRU5ULFxuICAgICAgc2Vjb25kczogMTBcbiAgICB9KVxuICB9KTtcbn07XG5cbmNvbnN0IFByZXZpb3VzRXBpc29kZUJ1dHRvbiA9ICgpID0+IHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnM6IHtcbiAgICAgIGhhc1ByZXZpb3VzLFxuICAgICAgY2hhbmdlUHJldmlvdXNFcGlzb2RlXG4gICAgfVxuICB9ID0gdXNlQ2FzdENvbnRleHQoKTtcbiAgcmV0dXJuIGhhc1ByZXZpb3VzKCkgJiYgLyojX19QVVJFX18qL2pzeChJY29uQnV0dG9uLCB7XG4gICAgc3RhcnRJY29uOiBcInByZXZpb3VzRXBpc29kZVwiLFxuICAgIHRvb2x0aXA6IFwiS0tTLlBMQVlFUi5QUkVWSU9VU1wiLFxuICAgIG9uQ2xpY2s6IGNoYW5nZVByZXZpb3VzRXBpc29kZVxuICB9KTtcbn07XG5cbmNvbnN0IE5leHRFcGlzb2RlQnV0dG9uID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgYWN0aW9uczoge1xuICAgICAgaGFzTmV4dCxcbiAgICAgIGNoYW5nZU5leHRFcGlzb2RlXG4gICAgfVxuICB9ID0gdXNlQ2FzdENvbnRleHQoKTtcbiAgcmV0dXJuIGhhc05leHQoKSAmJiAvKiNfX1BVUkVfXyovanN4KEljb25CdXR0b24sIHtcbiAgICBzdGFydEljb246IFwibmV4dEVwaXNvZGVcIixcbiAgICB0b29sdGlwOiBcIktLUy5QTEFZRVIuTkVYVFwiLFxuICAgIG9uQ2xpY2s6IGNoYW5nZU5leHRFcGlzb2RlXG4gIH0pO1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXRhcmdldC1ibGFuayAqL1xuY29uc3Qgc3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICBib3R0b206ICcwJyxcbiAgekluZGV4OiAnMycsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzcycHgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgzNCwgMzQsIDM0LCAwLjc1KScsXG4gIGNvbG9yOiAnI2ZmZicsXG4gICc+IConOiB7XG4gICAgZmxleDogJzEnXG4gIH1cbn07XG5jb25zdCBjb250cm9sU3R5bGUgPSB7XG4gIHBhZGRpbmc6ICcwIDE4cHggNnB4JyxcbiAgJz4gKic6IHtcbiAgICBtYXJnaW46ICcwIDhweCdcbiAgfSxcbiAgJz4gZGl2OmZpcnN0LWNoaWxkJzoge1xuICAgIC8vIHNlZWtiYXJcbiAgICBtYXJnaW46ICcwIDAgNnB4J1xuICB9XG59O1xuY29uc3QgbWVzc2FnZVN0eWxlID0ge1xuICBmbGV4OiAnMScsXG4gIG1pbldpZHRoOiAnMCcsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJ1xufTtcbmNvbnN0IGFkU3RhdHVzU3R5bGUgPSB7XG4gIGZsZXg6ICcxJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gIGE6IHtcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIHRleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJyxcbiAgICAnJjp2aXNpdGVkJzoge1xuICAgICAgY29sb3I6ICdpbmhlcml0J1xuICAgIH1cbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgbWFyZ2luOiAnMCAxLjVyZW0nLFxuICAgIHBhZGRpbmc6ICcwLjJyZW0gMC41cmVtJyxcbiAgICB3aWR0aDogJ2F1dG8nLFxuICAgIGJvcmRlcjogJzJweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGZvbnRTaXplOiAnMTIwJSdcbiAgfVxufTtcbmNvbnN0IGNhc3RCdXR0b25Ub29sdGlwID0ge1xuICBbQ2FzdFN0YXRlLkNPTk5FQ1RFRF06ICdLS1MuUExBWUVSLkNBU1QuRElTQ09OTkVDVCcsXG4gIFtDYXN0U3RhdGUuTk9UX0NPTk5FQ1RFRF06ICdLS1MuUExBWUVSLkNBU1QnXG59O1xuXG5jb25zdCBNaW5pQ29udHJvbCA9ICgpID0+IHtcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVxuICB9ID0gdXNlQ29udGV4dChJMThuLkNvbnRleHQpO1xuICBjb25zdCB7XG4gICAgY2FzdFN0YXRlLFxuICAgIGRldmljZU5hbWUsXG4gICAgbWVkaWFUaXRsZSxcbiAgICBwbGF5ZXJTdGF0ZSxcbiAgICBzdHJlYW1UeXBlLFxuICAgIGlzUGxheWluZ0JyZWFrLFxuICAgIGN1cnJlbnRCcmVha1RpbWUsXG4gICAgd2hlblNraXBwYWJsZSxcbiAgICBjbGlja1Rocm91Z2hVcmwsXG4gICAgYWN0aW9uczoge1xuICAgICAgc2tpcEFkLFxuICAgICAgc3Vic2NyaWJlVm9sdW1lQ2hhbmdlLFxuICAgICAgc2V0Vm9sdW1lLFxuICAgICAgdG9nZ2xlTXV0ZVxuICAgIH1cbiAgfSA9IHVzZUNhc3RDb250ZXh0KCk7XG4gIGNvbnN0IHNlY29uZHNUb1NraXAgPSBNYXRoLmNlaWwod2hlblNraXBwYWJsZSAtIGN1cnJlbnRCcmVha1RpbWUpO1xuICBjb25zdCBpc0lkbGUgPSBjYXN0U3RhdGUgPT09ICdDT05ORUNURUQnICYmICghcGxheWVyU3RhdGUgfHwgcGxheWVyU3RhdGUgPT09ICdJRExFJyk7XG4gIGNvbnN0IHNob3dJZkNvbm5lY3RlZCA9IHtcbiAgICBkaXNwbGF5OiBjYXN0U3RhdGUgPT09ICdDT05ORUNURUQnID8gJ2ZsZXgnIDogJ25vbmUnXG4gIH07XG4gIGNvbnN0IG1lc3NhZ2VQcm9wZXJ0aWVzID0ge1xuICAgIFZJREVPOiBtZWRpYVRpdGxlLFxuICAgIENIUk9NRUNBU1Q6IGRldmljZU5hbWVcbiAgfTtcbiAgY29uc3QgY29ubmVjdGVkTWVzc2FnZSA9IHRyYW5zbGF0ZSgnS0tTLkNBU1QuQ09OTlRFQ1RFRCcsIG1lc3NhZ2VQcm9wZXJ0aWVzKTtcbiAgY29uc3QgY2FzdGluZ01lc3NhZ2UgPSB0cmFuc2xhdGUoJ0tLUy5DQVNULlNUQVRVUycsIG1lc3NhZ2VQcm9wZXJ0aWVzKTtcbiAgcmV0dXJuIGNhc3RTdGF0ZSA9PT0gJ0NPTk5FQ1RFRCcgJiYganN4JDEoXCJkaXZcIiwge1xuICAgIGNzczogW3Nob3dJZkNvbm5lY3RlZCwgc3R5bGUsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIjtsYWJlbDpNaW5pQ29udHJvbDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWsxcGJtbERiMjUwY205c0xtcHplQ0pkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUUwUjFjaUxDSm1hV3hsSWpvaVRXbHVhVU52Ym5SeWIyd3Vhbk40SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ2NtVmhZM1F2YW5ONExXNXZMWFJoY21kbGRDMWliR0Z1YXlBcUwxeHVMeW9nUUdwemVFbHRjRzl5ZEZOdmRYSmpaU0JBWlcxdmRHbHZiaTl5WldGamRDQXFMMXh1YVcxd2IzSjBJSHQxYzJWRGIyNTBaWGgwZlNCbWNtOXRJQ2R5WldGamRDZGNibHh1YVcxd2IzSjBJRU5oYzNSQ2RYUjBiMjRnWm5KdmJTQW5jSEpsYldsMWJTOURZWE4wUW5WMGRHOXVKMXh1YVcxd2IzSjBJSHREWVhOMFUzUmhkR1Y5SUdaeWIyMGdKMFZ1ZFcwblhHNXBiWEJ2Y25RZ2UzVnpaVU5oYzNSRGIyNTBaWGgwZlNCbWNtOXRJQ2RqWVhOMEwyTnZiblJsZUhRblhHNXBiWEJ2Y25RZ1JuVnVZM1JwYjI1Q1lYSWdabkp2YlNBblkyOXRjRzl1Wlc1MEwxQmhibVZzTDBaMWJtTjBhVzl1UW1GeUoxeHVhVzF3YjNKMElGUnZiMngwYVhBZ1puSnZiU0FuWTI5dGNHOXVaVzUwTDFSdmIyeDBhWEFuWEc1cGJYQnZjblFnVm05c2RXMWxRMjl1ZEhKdmJDQm1jbTl0SUNkamIyMXdiMjVsYm5RdlZtOXNkVzFsUTI5dWRISnZiQ2RjYm1sdGNHOXlkQ0I3VTJ0cGNFSjFkSFJ2Ym4wZ1puSnZiU0FuY0d4aGVXVnlWV2t2WW5WMGRHOXVjeWRjYm1sdGNHOXlkQ0JKTVRodUlHWnliMjBnSjJOdmJuUmxlSFF2U1RFNGJpZGNibWx0Y0c5eWRDQlRaV1ZyWW1GeUlHWnliMjBnSnk0dlUyVmxhMkpoY2lkY2JtbHRjRzl5ZENCUWJHRjVRblYwZEc5dUlHWnliMjBnSnk0dlVHeGhlVUoxZEhSdmJpZGNibWx0Y0c5eWRDQlNaWGRwYm1SQ2RYUjBiMjRnWm5KdmJTQW5MaTlTWlhkcGJtUkNkWFIwYjI0blhHNXBiWEJ2Y25RZ1JtOXlkMkZ5WkVKMWRIUnZiaUJtY205dElDY3VMMFp2Y25kaGNtUkNkWFIwYjI0blhHNXBiWEJ2Y25RZ1VISmxkbWx2ZFhORmNHbHpiMlJsUW5WMGRHOXVJR1p5YjIwZ0p5NHZVSEpsUlhCcGMyOWtaVUoxZEhSdmJpZGNibWx0Y0c5eWRDQk9aWGgwVm1sa1pXOUNkWFIwYjI0Z1puSnZiU0FuTGk5T1pYaDBWbWxrWlc5Q2RYUjBiMjRuWEc1Y2JtTnZibk4wSUhOMGVXeGxJRDBnZTF4dUlDQndiM05wZEdsdmJqb2dKMlpwZUdWa0p5eGNiaUFnWW05MGRHOXRPaUFuTUNjc1hHNGdJSHBKYm1SbGVEb2dKek1uTEZ4dUlDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQm9aV2xuYUhRNklDYzNNbkI0Snl4Y2JpQWdZV3hwWjI1SmRHVnRjem9nSjJObGJuUmxjaWNzWEc0Z0lHSmhZMnRuY205MWJtUkRiMnh2Y2pvZ0ozSm5ZbUVvTXpRc0lETTBMQ0F6TkN3Z01DNDNOU2tuTEZ4dUlDQmpiMnh2Y2pvZ0p5Tm1abVluTEZ4dUlDQW5QaUFxSnpvZ2UxeHVJQ0FnSUdac1pYZzZJQ2N4Snl4Y2JpQWdmU3hjYm4xY2JseHVZMjl1YzNRZ1kyOXVkSEp2YkZOMGVXeGxJRDBnZTF4dUlDQndZV1JrYVc1bk9pQW5NQ0F4T0hCNElEWndlQ2NzWEc0Z0lDYytJQ29uT2lCN1hHNGdJQ0FnYldGeVoybHVPaUFuTUNBNGNIZ25MRnh1SUNCOUxGeHVJQ0FuUGlCa2FYWTZabWx5YzNRdFkyaHBiR1FuT2lCN1hHNGdJQ0FnTHk4Z2MyVmxhMkpoY2x4dUlDQWdJRzFoY21kcGJqb2dKekFnTUNBMmNIZ25MRnh1SUNCOUxGeHVmVnh1WEc1amIyNXpkQ0J0WlhOellXZGxVM1I1YkdVZ1BTQjdYRzRnSUdac1pYZzZJQ2N4Snl4Y2JpQWdiV2x1VjJsa2RHZzZJQ2N3Snl4Y2JpQWdkR1Y0ZEVGc2FXZHVPaUFuWTJWdWRHVnlKeXhjYmlBZ2QyaHBkR1ZUY0dGalpUb2dKMjV2ZDNKaGNDY3NYRzRnSUc5MlpYSm1iRzkzT2lBbmFHbGtaR1Z1Snl4Y2JpQWdkR1Y0ZEU5MlpYSm1iRzkzT2lBblpXeHNhWEJ6YVhNbkxGeHVmVnh1WEc1amIyNXpkQ0JoWkZOMFlYUjFjMU4wZVd4bElEMGdlMXh1SUNCbWJHVjRPaUFuTVNjc1hHNGdJR1JwYzNCc1lYazZJQ2RtYkdWNEp5eGNiaUFnWVd4cFoyNUpkR1Z0Y3pvZ0oyTmxiblJsY2ljc1hHNGdJR3AxYzNScFpubERiMjUwWlc1ME9pQW5abXhsZUMxbGJtUW5MRnh1SUNCaE9pQjdYRzRnSUNBZ1pHbHpjR3hoZVRvZ0oySnNiMk5ySnl4Y2JpQWdJQ0IwWlhoMFJHVmpiM0poZEdsdmJqb2dKM1Z1WkdWeWJHbHVaU2NzWEc0Z0lDQWdKeVk2ZG1semFYUmxaQ2M2SUh0Y2JpQWdJQ0FnSUdOdmJHOXlPaUFuYVc1b1pYSnBkQ2NzWEc0Z0lDQWdmU3hjYmlBZ2ZTeGNiaUFnWW5WMGRHOXVPaUI3WEc0Z0lDQWdiV0Z5WjJsdU9pQW5NQ0F4TGpWeVpXMG5MRnh1SUNBZ0lIQmhaR1JwYm1jNklDY3dMakp5WlcwZ01DNDFjbVZ0Snl4Y2JpQWdJQ0IzYVdSMGFEb2dKMkYxZEc4bkxGeHVJQ0FnSUdKdmNtUmxjam9nSnpKd2VDQnpiMnhwWkNCeVoySmhLREkxTlN3Z01qVTFMQ0F5TlRVc0lEQXVOeWtuTEZ4dUlDQWdJR1p2Ym5SVGFYcGxPaUFuTVRJd0pTY3NYRzRnSUgwc1hHNTlYRzVjYm1OdmJuTjBJR05oYzNSQ2RYUjBiMjVVYjI5c2RHbHdJRDBnZTF4dUlDQmJRMkZ6ZEZOMFlYUmxMa05QVGs1RlExUkZSRjA2SUNkTFMxTXVVRXhCV1VWU0xrTkJVMVF1UkVsVFEwOU9Ua1ZEVkNjc1hHNGdJRnREWVhOMFUzUmhkR1V1VGs5VVgwTlBUazVGUTFSRlJGMDZJQ2RMUzFNdVVFeEJXVVZTTGtOQlUxUW5MRnh1ZlZ4dVhHNWpiMjV6ZENCTmFXNXBRMjl1ZEhKdmJDQTlJQ2dwSUQwK0lIdGNiaUFnWTI5dWMzUWdlM1J5WVc1emJHRjBaWDBnUFNCMWMyVkRiMjUwWlhoMEtFa3hPRzR1UTI5dWRHVjRkQ2xjYmlBZ1kyOXVjM1FnZTF4dUlDQWdJR05oYzNSVGRHRjBaU3hjYmlBZ0lDQmtaWFpwWTJWT1lXMWxMRnh1SUNBZ0lHMWxaR2xoVkdsMGJHVXNYRzRnSUNBZ2NHeGhlV1Z5VTNSaGRHVXNYRzRnSUNBZ2MzUnlaV0Z0Vkhsd1pTeGNiaUFnSUNCcGMxQnNZWGxwYm1kQ2NtVmhheXhjYmlBZ0lDQmpkWEp5Wlc1MFFuSmxZV3RVYVcxbExGeHVJQ0FnSUhkb1pXNVRhMmx3Y0dGaWJHVXNYRzRnSUNBZ1kyeHBZMnRVYUhKdmRXZG9WWEpzTEZ4dUlDQWdJR0ZqZEdsdmJuTTZJSHR6YTJsd1FXUXNJSE4xWW5OamNtbGlaVlp2YkhWdFpVTm9ZVzVuWlN3Z2MyVjBWbTlzZFcxbExDQjBiMmRuYkdWTmRYUmxmU3hjYmlBZ2ZTQTlJSFZ6WlVOaGMzUkRiMjUwWlhoMEtDbGNiaUFnWTI5dWMzUWdjMlZqYjI1a2MxUnZVMnRwY0NBOUlFMWhkR2d1WTJWcGJDaDNhR1Z1VTJ0cGNIQmhZbXhsSUMwZ1kzVnljbVZ1ZEVKeVpXRnJWR2x0WlNsY2JpQWdZMjl1YzNRZ2FYTkpaR3hsSUQxY2JpQWdJQ0JqWVhOMFUzUmhkR1VnUFQwOUlDZERUMDVPUlVOVVJVUW5JQ1ltSUNnaGNHeGhlV1Z5VTNSaGRHVWdmSHdnY0d4aGVXVnlVM1JoZEdVZ1BUMDlJQ2RKUkV4Rkp5bGNiaUFnWTI5dWMzUWdjMmh2ZDBsbVEyOXVibVZqZEdWa0lEMGdlMXh1SUNBZ0lHUnBjM0JzWVhrNklHTmhjM1JUZEdGMFpTQTlQVDBnSjBOUFRrNUZRMVJGUkNjZ1B5QW5abXhsZUNjZ09pQW5ibTl1WlNjc1hHNGdJSDFjYmlBZ1kyOXVjM1FnYldWemMyRm5aVkJ5YjNCbGNuUnBaWE1nUFNCN1hHNGdJQ0FnVmtsRVJVODZJRzFsWkdsaFZHbDBiR1VzWEc0Z0lDQWdRMGhTVDAxRlEwRlRWRG9nWkdWMmFXTmxUbUZ0WlN4Y2JpQWdmVnh1SUNCamIyNXpkQ0JqYjI1dVpXTjBaV1JOWlhOellXZGxJRDBnZEhKaGJuTnNZWFJsS0NkTFMxTXVRMEZUVkM1RFQwNU9WRVZEVkVWRUp5d2diV1Z6YzJGblpWQnliM0JsY25ScFpYTXBYRzRnSUdOdmJuTjBJR05oYzNScGJtZE5aWE56WVdkbElEMGdkSEpoYm5Oc1lYUmxLQ2RMUzFNdVEwRlRWQzVUVkVGVVZWTW5MQ0J0WlhOellXZGxVSEp2Y0dWeWRHbGxjeWxjYmx4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUdOaGMzUlRkR0YwWlNBOVBUMGdKME5QVGs1RlExUkZSQ2NnSmlZZ0tGeHVJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUxdHphRzkzU1daRGIyNXVaV04wWldRc0lITjBlV3hsWFgwK1hHNGdJQ0FnSUNBZ0lIdHBjMGxrYkdVZ1B5QW9YRzRnSUNBZ0lDQWdJQ0FnUEZSdmIyeDBhWEFnYjNabGNtWnNiM2RQYm14NUlIUnBkR3hsUFh0amIyNXVaV04wWldSTlpYTnpZV2RsZlQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhrYVhZZ1kyeGhjM05PWVcxbFBWd2lhMnR6TFhCc1lYbGxjbDlmYldsdWFXTjBjbXhmWDJOaGMzUXRibUZ0WlZ3aUlHTnpjejE3YldWemMyRm5aVk4wZVd4bGZUNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2UyTnZibTVsWTNSbFpFMWxjM05oWjJWOVhHNGdJQ0FnSUNBZ0lDQWdJQ0E4TDJScGRqNWNiaUFnSUNBZ0lDQWdJQ0E4TDFSdmIyeDBhWEErWEc0Z0lDQWdJQ0FnSUNrZ09pQW9YRzRnSUNBZ0lDQWdJQ0FnUEVaMWJtTjBhVzl1UW1GeUlITjBlV3hsUFh0amIyNTBjbTlzVTNSNWJHVjlQbHh1SUNBZ0lDQWdJQ0FnSUNBZ2V5RnBjMUJzWVhscGJtZENjbVZoYXlBbUppQThVMlZsYTJKaGNpQXZQbjFjYmlBZ0lDQWdJQ0FnSUNBZ0lEeFFjbVYyYVc5MWMwVndhWE52WkdWQ2RYUjBiMjRnTHo1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhRYkdGNVFuVjBkRzl1SUM4K1hHNGdJQ0FnSUNBZ0lDQWdJQ0E4VG1WNGRGWnBaR1Z2UW5WMGRHOXVJQzgrWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdhWE5RYkdGNWFXNW5RbkpsWVdzZ1B5QW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lEeGthWFlnWTNOelBYdGhaRk4wWVhSMWMxTjBlV3hsZlQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOFlTQm9jbVZtUFh0amJHbGphMVJvY205MVoyaFZjbXg5SUhKbGJEMWNJbTV2YjNCbGJtVnlYQ0lnZEdGeVoyVjBQVndpWDJKc1lXNXJYQ0krWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOFNURTRiaTVOWlhOellXZGxJR052WkdVOVhDSkxTMU11VTFOQlNTNU1SVUZTVGk1TlQxSkZYQ0lnZDNKaGNEMTdabUZzYzJWOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQzloUGx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0M2FHVnVVMnRwY0hCaFlteGxJRDRnTUNBbUppQW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4VTJ0cGNFSjFkSFJ2YmlCeVpXMWhhVzVwYm1kVWFXMWxQWHR6WldOdmJtUnpWRzlUYTJsd2ZTQnZia05zYVdOclBYdHphMmx3UVdSOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdLWDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdQQzlrYVhZK1hHNGdJQ0FnSUNBZ0lDQWdJQ0FwSURvZ0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBOFBseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdHpkSEpsWVcxVWVYQmxJQ0U5UFNBblRFbFdSU2NnSmlZZ1BGSmxkMmx1WkVKMWRIUnZiaUF2UG4xY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN2MzUnlaV0Z0Vkhsd1pTQWhQVDBnSjB4SlZrVW5JQ1ltSUR4R2IzSjNZWEprUW5WMGRHOXVJQzgrZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4VWIyOXNkR2x3SUc5MlpYSm1iRzkzVDI1c2VTQjBhWFJzWlQxN1kyRnpkR2x1WjAxbGMzTmhaMlY5UGx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BHUnBkaUJqYzNNOWUyMWxjM05oWjJWVGRIbHNaWDArZTJOaGMzUnBibWROWlhOellXZGxmVHd2WkdsMlBseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZWRzl2YkhScGNENWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1BDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBcGZWeHVJQ0FnSUNBZ0lDQWdJQ0FnUEZadmJIVnRaVU52Ym5SeWIyeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2MyeHBaR1Z5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE4xWW5OamNtbGlaVDE3YzNWaWMyTnlhV0psVm05c2RXMWxRMmhoYm1kbGZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmJrTm9ZVzVuWlQxN2MyVjBWbTlzZFcxbGZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGIyZG5iR1ZOZFhSbFBYdDBiMmRuYkdWTmRYUmxmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0x6NWNiaUFnSUNBZ0lDQWdJQ0FnSUR4VWIyOXNkR2x3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFJwZEd4bFBYdDBjbUZ1YzJ4aGRHVW9ZMkZ6ZEVKMWRIUnZibFJ2YjJ4MGFYQmJZMkZ6ZEZOMFlYUmxYU2w5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0p2ZEhSdmJUMWNJakkwY0hoY0lseHVJQ0FnSUNBZ0lDQWdJQ0FnUGx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0E4UTJGemRFSjFkSFJ2YmlBdlBseHVJQ0FnSUNBZ0lDQWdJQ0FnUEM5VWIyOXNkR2x3UGx4dUlDQWdJQ0FnSUNBZ0lEd3ZSblZ1WTNScGIyNUNZWEkrWEc0Z0lDQWdJQ0FnSUNsOVhHNGdJQ0FnSUNBOEwyUnBkajVjYmlBZ0lDQXBYRzRnSUNsY2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdUV2x1YVVOdmJuUnliMnhjYmlKZGZRPT0gKi9cIl0sXG4gICAgY2hpbGRyZW46IGlzSWRsZSA/IGpzeCQxKFRvb2x0aXAsIHtcbiAgICAgIG92ZXJmbG93T25seTogdHJ1ZSxcbiAgICAgIHRpdGxlOiBjb25uZWN0ZWRNZXNzYWdlLFxuICAgICAgY2hpbGRyZW46IGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImtrcy1wbGF5ZXJfX21pbmljdHJsX19jYXN0LW5hbWVcIixcbiAgICAgICAgY3NzOiBtZXNzYWdlU3R5bGUsXG4gICAgICAgIGNoaWxkcmVuOiBjb25uZWN0ZWRNZXNzYWdlXG4gICAgICB9KVxuICAgIH0pIDoganN4cyhGdW5jdGlvbkJhciwge1xuICAgICAgc3R5bGU6IGNvbnRyb2xTdHlsZSxcbiAgICAgIGNoaWxkcmVuOiBbIWlzUGxheWluZ0JyZWFrICYmIGpzeCQxKFNlZWtiYXIsIHt9KSwganN4JDEoUHJldmlvdXNFcGlzb2RlQnV0dG9uLCB7fSksIGpzeCQxKFBsYXlCdXR0b24sIHt9KSwganN4JDEoTmV4dEVwaXNvZGVCdXR0b24sIHt9KSwgaXNQbGF5aW5nQnJlYWsgPyBqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY3NzOiBhZFN0YXR1c1N0eWxlLFxuICAgICAgICBjaGlsZHJlbjogW2pzeCQxKFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogY2xpY2tUaHJvdWdoVXJsLFxuICAgICAgICAgIHJlbDogXCJub29wZW5lclwiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICBjaGlsZHJlbjoganN4JDEoSTE4bi5NZXNzYWdlLCB7XG4gICAgICAgICAgICBjb2RlOiBcIktLUy5TU0FJLkxFQVJOLk1PUkVcIixcbiAgICAgICAgICAgIHdyYXA6IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgfSksIHdoZW5Ta2lwcGFibGUgPiAwICYmIGpzeCQxKFNraXBCdXR0b24sIHtcbiAgICAgICAgICByZW1haW5pbmdUaW1lOiBzZWNvbmRzVG9Ta2lwLFxuICAgICAgICAgIG9uQ2xpY2s6IHNraXBBZFxuICAgICAgICB9KV1cbiAgICAgIH0pIDoganN4cyhGcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW3N0cmVhbVR5cGUgIT09ICdMSVZFJyAmJiBqc3gkMShSZXdpbmRCdXR0b24sIHt9KSwgc3RyZWFtVHlwZSAhPT0gJ0xJVkUnICYmIGpzeCQxKEZvcndhcmRCdXR0b24sIHt9KSwganN4JDEoVG9vbHRpcCwge1xuICAgICAgICAgIG92ZXJmbG93T25seTogdHJ1ZSxcbiAgICAgICAgICB0aXRsZTogY2FzdGluZ01lc3NhZ2UsXG4gICAgICAgICAgY2hpbGRyZW46IGpzeCQxKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGNzczogbWVzc2FnZVN0eWxlLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNhc3RpbmdNZXNzYWdlXG4gICAgICAgICAgfSlcbiAgICAgICAgfSldXG4gICAgICB9KSwganN4JDEoVm9sdW1lQ29udHJvbCwge1xuICAgICAgICBzbGlkZXI6IHRydWUsXG4gICAgICAgIHN1YnNjcmliZTogc3Vic2NyaWJlVm9sdW1lQ2hhbmdlLFxuICAgICAgICBvbkNoYW5nZTogc2V0Vm9sdW1lLFxuICAgICAgICB0b2dnbGVNdXRlOiB0b2dnbGVNdXRlXG4gICAgICB9KSwganN4JDEoVG9vbHRpcCwge1xuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKGNhc3RCdXR0b25Ub29sdGlwW2Nhc3RTdGF0ZV0pLFxuICAgICAgICBib3R0b206IFwiMjRweFwiLFxuICAgICAgICBjaGlsZHJlbjoganN4JDEoQ2FzdEJ1dHRvbiwge30pXG4gICAgICB9KV1cbiAgICB9KVxuICB9KTtcbn07XG5cbmNvbnN0IENhc3RTZW5kZXIgPSAoe1xuICBsYW5nLFxuICBsYW5nQ3VzdG9tQ29kZSxcbiAgY2hpbGRyZW4sXG4gIC4uLm90aGVyXG59KSA9PiAvKiNfX1BVUkVfXyovanN4KENhc3RQcm92aWRlciwge1xuICBsYW5nOiBsYW5nLFxuICAuLi5vdGhlcixcbiAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9qc3hzJDEoSW50bFByb3ZpZGVyLCB7XG4gICAgbG9jYWxlOiBsYW5nLFxuICAgIG1lc3NhZ2VzOiBsYW5nQ3VzdG9tQ29kZSxcbiAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCAvKiNfX1BVUkVfXyovanN4KE1pbmlDb250cm9sLCB7fSldXG4gIH0pXG59KTtcblxuQ2FzdFNlbmRlci5wcm9wVHlwZXMgPSB7XG4gIGFwcElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBob3N0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhY2Nlc3NUb2tlbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGV2aWNlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGxhbmc6IFR5cGVzLkxhbmd1YWdlQ29kZSxcbiAgbGFuZ0N1c3RvbUNvZGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGN1c3RvbUhlYWRlcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uQ29ubmVjdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DYXN0aW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZVxufTtcblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcHJvcC10eXBlcyAqL1xuY29uc3Qgc2l6ZXMgPSB7XG4gICdzbWFsbC1lbWJlZCc6IDIwMCxcbiAgZW1iZWQ6IDQwMCxcbiAgJ3RhYmxldC1wb3J0cmFpdCc6IDYwMCxcbiAgJ3RhYmxldC1sYW5kc2NhcGUnOiA5MDAsXG4gIGRlc2t0b3A6IDEyMDBcbn07XG5cbmNvbnN0IEJhc2ljVWkgPSAoe1xuICBzdHlsZSxcbiAgdmlkZW8sXG4gIGF1dG9oaWRlLFxuICBjaGlsZHJlbixcbiAgZ2V0TGF5b3V0UHJvcHMsXG4gIHNlZWtiYXIgPSB7fSxcbiAgcGxheWJhY2tTdGF0ZSxcbiAgY3VycmVudFRpbWUsXG4gIGR1cmF0aW9uLFxuICBidWZmZXJUaW1lLFxuICBzZWVrRW5hYmxlZCxcbiAgb25QbGF5YmFja1N0YXRlQ2hhbmdlLFxuICBvbkN1cnJlbnRUaW1lQ2hhbmdlXG59KSA9PiB7XG4gIGNvbnN0IHVpVHlwZSA9IGlzRGVza3RvcCgpID8gJ2Rlc2t0b3AnIDogJ21vYmlsZSc7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgY3VycmVudEJyZWFrcG9pbnQ6IHNpemUsXG4gICAgb2JzZXJ2ZVxuICB9ID0gdXNlRGltZW5zaW9ucyh7XG4gICAgcG9seWZpbGw6IFJlc2l6ZU9ic2VydmVyLFxuICAgIGJyZWFrcG9pbnRzOiBzaXplc1xuICB9KTsgLy8gc2hvcnQgd2FpdGluZyBzaG91bGQgbm90IHJlZmxlY3QgdG8gVUlcblxuICBjb25zdCB3YWl0aW5nID0gdXNlTGF6eVdhaXRpbmcocGxheWJhY2tTdGF0ZSA9PT0gJ3dhaXRpbmcnKTtcbiAgY29uc3QgYWN0aXZlUGxheWJhY2sgPSBwbGF5YmFja1N0YXRlID09PSAncGxheWluZycgfHwgcGxheWJhY2tTdGF0ZSA9PT0gJ3dhaXRpbmcnO1xuICBjb25zdCB7XG4gICAgbW9kZSxcbiAgICBvbkNsaWNrLFxuICAgIG9uTW91c2VNb3ZlXG4gIH0gPSB1c2VBdXRvSGlkZSh7XG4gICAgcGlubmVkOiAhYXV0b2hpZGUgfHwgd2FpdGluZyB8fCAhYWN0aXZlUGxheWJhY2ssXG4gICAgdGFwVG9IaWRlOiB1aVR5cGUgPT09ICdtb2JpbGUnXG4gIH0pO1xuICBjb25zdCBsYXlvdXRQcm9wcyA9IChnZXRMYXlvdXRQcm9wcyA9PT0gbnVsbCB8fCBnZXRMYXlvdXRQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0TGF5b3V0UHJvcHMoe1xuICAgIHR5cGU6IHVpVHlwZSxcbiAgICBtb2RlLFxuICAgIHdpZHRoLFxuICAgIHNpemVcbiAgfSkpIHx8IHt9O1xuICByZXR1cm4gLyojX19QVVJFX18qL2pzeHMkMShEZWZhdWx0TGF5b3V0LCB7XG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIHR5cGU6IHVpVHlwZSxcbiAgICBkaXNwbGF5OiBtb2RlLFxuICAgIHNpemU6IHNpemUsXG4gICAgdmlkZW86IHZpZGVvLFxuICAgIGNvbnRhaW5lclJlZjogZWxlbWVudCA9PiB7XG4gICAgICBvYnNlcnZlKGVsZW1lbnQpO1xuICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgIH0sXG4gICAgc2Vla2JhcjogIWlzTGl2ZUR1cmF0aW9uKGR1cmF0aW9uKSAmJiAvKiNfX1BVUkVfXyovanN4KFNlZWtiYXIkMSwge1xuICAgICAgY3VycmVudFRpbWU6IGN1cnJlbnRUaW1lLFxuICAgICAgYnVmZmVyVGltZTogYnVmZmVyVGltZSxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgIG1hcmtzOiBzZWVrYmFyLm1hcmtzLFxuICAgICAgYWRkb25zOiBzZWVrYmFyLmFkZG9ucyxcbiAgICAgIC4uLihzZWVrRW5hYmxlZCAmJiB7XG4gICAgICAgIHBsYXk6ICgpID0+IG9uUGxheWJhY2tTdGF0ZUNoYW5nZSgncGxheWluZycpLFxuICAgICAgICBwYXVzZTogKCkgPT4gb25QbGF5YmFja1N0YXRlQ2hhbmdlKCdwYXVzZWQnKSxcbiAgICAgICAgc2Vlazogb25DdXJyZW50VGltZUNoYW5nZVxuICAgICAgfSksXG4gICAgICBkaXNhYmxlZDogIXNlZWtFbmFibGVkXG4gICAgfSksXG4gICAgLi4ubGF5b3V0UHJvcHMsXG4gICAgY29udHJvbEJ1dHRvbnM6IHtcbiAgICAgIHBsYXlCdXR0b246IC8qI19fUFVSRV9fKi9qc3goUGxheUJ1dHRvbiQxLCB7XG4gICAgICAgIHBsYXliYWNrU3RhdGU6IHBsYXliYWNrU3RhdGUsXG4gICAgICAgIGVuZGVkOiBwbGF5YmFja1N0YXRlID09PSAnZW5kZWQnLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBvblBsYXliYWNrU3RhdGVDaGFuZ2UocGxheWJhY2tTdGF0ZSAhPT0gJ3BsYXlpbmcnID8gJ3BsYXlpbmcnIDogJ3BhdXNlZCcpXG4gICAgICB9KSxcbiAgICAgIC8vIFRPT0QgYWRkIHN1cHBvcnQgZm9yIHByZWxvYWRcbiAgICAgIC4uLmxheW91dFByb3BzLmNvbnRyb2xCdXR0b25zXG4gICAgfSxcbiAgICBiYWNrSXRlbXM6IHdhaXRpbmcgPyAvKiNfX1BVUkVfXyovanN4KExvYWRpbmdTcGlubmVyLCB7fSkgOiBsYXlvdXRQcm9wcy5iYWNrSXRlbXMsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbk1vdXNlTW92ZTogb25Nb3VzZU1vdmUsXG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgLyojX19QVVJFX18qL2pzeChCYWNrZHJvcCwge1xuICAgICAgb3BlbjogIXBsYXliYWNrU3RhdGUgfHwgcGxheWJhY2tTdGF0ZSA9PT0gJ2xvYWRpbmcnLFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9qc3goTG9hZGluZ1NwaW5uZXIsIHt9KVxuICAgIH0pXVxuICB9KTtcbn07XG5cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cblxuY29uc3QgVmlkZW9QbGF5ZXIgPSAoe1xuICBzdHlsZSxcbiAgYXV0b2hpZGUsXG4gIHNlZWtiYXIsXG4gIGdldExheW91dFByb3BzLFxuICBjaGlsZHJlbixcbiAgYXV0b3BsYXksXG4gIC4uLnZpZGVvUHJvcHNcbn0pID0+IHtcbiAgY29uc3QgW3ZpZGVvU3RhdGUsIHNldFZpZGVvU3RhdGVdID0gdXNlU3RhdGUoe30pO1xuICBjb25zdCBbdGFyZ2V0U3RhdGUsIHNldFRhcmdldFN0YXRlXSA9IHVzZVN0YXRlKHtcbiAgICBwbGF5YmFja1N0YXRlOiBhdXRvcGxheSA/ICdwbGF5aW5nJyA6ICdwYXVzZWQnXG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3Vic2NyaWJlTWVkaWFTdGF0ZSh2aWRlb1Byb3BzLnZpZGVvUmVmLmN1cnJlbnQsIHNldFZpZGVvU3RhdGUsIHZpZGVvUHJvcHMucGx1Z2lucyk7XG4gICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdWlQcm9wcyA9IHtcbiAgICBzdHlsZSxcbiAgICBhdXRvaGlkZSxcbiAgICBnZXRMYXlvdXRQcm9wcyxcbiAgICBzZWVrYmFyLFxuICAgIG9uUGxheWJhY2tTdGF0ZUNoYW5nZTogcGxheWJhY2tTdGF0ZSA9PiBzZXRUYXJnZXRTdGF0ZShzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICAgIHBsYXliYWNrU3RhdGVcbiAgICB9KSksXG4gICAgb25DdXJyZW50VGltZUNoYW5nZTogY3VycmVudFRpbWUgPT4gc2V0VGFyZ2V0U3RhdGUoc3RhdGUgPT4gKHsgLi4uc3RhdGUsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH0pKVxuICB9O1xuICByZXR1cm4ganN4JDEoSW50bFByb3ZpZGVyLCB7XG4gICAgY2hpbGRyZW46IGpzeCQxKEJhc2ljVWksIHtcbiAgICAgIHZpZGVvOiBqc3gkMShWaWRlbywgeyAuLi52aWRlb1Byb3BzLFxuICAgICAgICAuLi50YXJnZXRTdGF0ZVxuICAgICAgfSksXG4gICAgICAuLi52aWRlb1N0YXRlLFxuICAgICAgLi4udWlQcm9wcyxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pXG4gIH0pO1xufTtcblxuVmlkZW9QbGF5ZXIucHJvcFR5cGVzID0ge1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgcGx1Z2luczogUHJvcFR5cGVzLmFycmF5LFxuICBhdXRvaGlkZTogUHJvcFR5cGVzLmJvb2wsXG4gIHNlZWtiYXI6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgZ2V0TGF5b3V0UHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICBhdXRvcGxheTogUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCB7IENhc3RTZW5kZXIsIENvdmVySW1hZ2UsIEZ1bmN0aW9uQmFyRXh0ZW5zaW9uLCBJbmZvQmFyRXh0ZW5zaW9uLCBMaXZlRW5kLCBQcmVtaXVtUGxheWVyLCBQcmVtaXVtUGx1c1BsYXllciwgVGl0bGVCYXJFeHRlbnNpb24sIFZpZGVvLCBWaWRlb1BsYXllciB9O1xuIl19 */"),"aria-label":type,...others});};Icon.propTypes={type:PropTypes$1.string};/* eslint-disable react/prop-types */const styles$1={// TODO keep only necessary
|
|
245
|
+
border:'none',outline:'none',cursor:'pointer',padding:0,flexShrink:0,backgroundColor:'transparent',userSelect:'none','> span':{width:'100%',height:'100%'}};const variants={outlined:{width:'8em',height:'2em',border:'1px solid #fff',borderRadius:'4px',background:'none',color:'inherit',opacity:0.8}};const tooltipStyle={zIndex:7,position:'fixed',padding:'8px 12px',borderRadius:4,textAlign:'center',color:'white',backgroundColor:'rgba(51, 51, 51, 0.625)'};const isOverflowing$1=element=>element.scrollWidth>element.clientWidth;const Tooltip$1=({title,bottom='0px',overflowOnly,disabled,children,container})=>{const tooltipRef=useRef();const boxes=useRef();const defaultContainer=useRef();const[open,setOpen]=useState(false);const[position,setPosition]=useState(()=>({left:'100%'}));const childProps={onMouseEnter:event=>{if(!overflowOnly||isOverflowing$1(event.currentTarget)){boxes.current=[event.currentTarget.getBoundingClientRect(),document.body.getBoundingClientRect()];defaultContainer.current=document.fullscreenElement||document.webkitFullscreenElement||document.body;setOpen(true);}},onMouseLeave:()=>{setPosition({left:'100%'});setOpen(false);}};useEffect(()=>{if(disabled){setOpen(false);}},[disabled]);useEffect(()=>{if(open){const targetPosition=getPopoverPosition(tooltipRef.current.getBoundingClientRect(),...boxes.current);targetPosition.left!==position.left&&setPosition(targetPosition);}},[open,position.left]);return !title||!isDesktop$1()||!havePointer()?children:jsxs(Fragment$1,{children:[/*#__PURE__*/cloneElement(children,childProps),open&&/*#__PURE__*/createPortal(jsx("div",{style:{...tooltipStyle,...position,top:`calc(${position.top}px - ${bottom})`},ref:tooltipRef,children:jsx(FormattedMessage,{id:title})}),container||defaultContainer.current)]});};const Button=({startIcon,variant,style,title,children,...rest})=>jsx(Tooltip$1,{title:title,bottom:"3em",disabled:rest.disabled,children:jsxs("button",{type:"button",css:[styles$1,variants[variant],process.env.NODE_ENV==="production"?"":";label:Button;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dHRvbnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEgwQiIsImZpbGUiOiJidXR0b25zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcHJvcC10eXBlcyAqL1xuLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIGNsb25lRWxlbWVudH0gZnJvbSAncmVhY3QnXG5pbXBvcnQge2NyZWF0ZVBvcnRhbH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5pbXBvcnQge2dldFBvcG92ZXJQb3NpdGlvbn0gZnJvbSAndXRpbC9pbmRleCdcbmltcG9ydCB7aGF2ZVBvaW50ZXIsIGlzRGVza3RvcH0gZnJvbSAndXRpbC9lbnZpcm9ubWVudCdcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bH0gZnJvbSAnY29udGV4dC9JMThuJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uJ1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIC8vIFRPRE8ga2VlcCBvbmx5IG5lY2Vzc2FyeVxuICBib3JkZXI6ICdub25lJyxcbiAgb3V0bGluZTogJ25vbmUnLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgcGFkZGluZzogMCxcbiAgZmxleFNocmluazogMCxcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICc+IHNwYW4nOiB7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgfSxcbn1cblxuY29uc3QgdmFyaWFudHMgPSB7XG4gIG91dGxpbmVkOiB7XG4gICAgd2lkdGg6ICc4ZW0nLFxuICAgIGhlaWdodDogJzJlbScsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNmZmYnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgIGNvbG9yOiAnaW5oZXJpdCcsXG4gICAgb3BhY2l0eTogMC44LFxuICB9LFxufVxuXG5jb25zdCB0b29sdGlwU3R5bGUgPSB7XG4gIHpJbmRleDogNyxcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHBhZGRpbmc6ICc4cHggMTJweCcsXG4gIGJvcmRlclJhZGl1czogNCxcbiAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgY29sb3I6ICd3aGl0ZScsXG4gIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoNTEsIDUxLCA1MSwgMC42MjUpJyxcbn1cblxuY29uc3QgaXNPdmVyZmxvd2luZyA9IGVsZW1lbnQgPT4gZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGhcblxuY29uc3QgVG9vbHRpcCA9ICh7XG4gIHRpdGxlLFxuICBib3R0b20gPSAnMHB4JyxcbiAgb3ZlcmZsb3dPbmx5LFxuICBkaXNhYmxlZCxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lcixcbn0pID0+IHtcbiAgY29uc3QgdG9vbHRpcFJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGJveGVzID0gdXNlUmVmKClcbiAgY29uc3QgZGVmYXVsdENvbnRhaW5lciA9IHVzZVJlZigpXG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcG9zaXRpb24sIHNldFBvc2l0aW9uXSA9IHVzZVN0YXRlKCgpID0+ICh7bGVmdDogJzEwMCUnfSkpXG5cbiAgY29uc3QgY2hpbGRQcm9wcyA9IHtcbiAgICBvbk1vdXNlRW50ZXI6IGV2ZW50ID0+IHtcbiAgICAgIGlmICghb3ZlcmZsb3dPbmx5IHx8IGlzT3ZlcmZsb3dpbmcoZXZlbnQuY3VycmVudFRhcmdldCkpIHtcbiAgICAgICAgYm94ZXMuY3VycmVudCA9IFtcbiAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIF1cbiAgICAgICAgZGVmYXVsdENvbnRhaW5lci5jdXJyZW50ID1cbiAgICAgICAgICBkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgIGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50IHx8XG4gICAgICAgICAgZG9jdW1lbnQuYm9keVxuICAgICAgICBzZXRPcGVuKHRydWUpXG4gICAgICB9XG4gICAgfSxcbiAgICBvbk1vdXNlTGVhdmU6ICgpID0+IHtcbiAgICAgIHNldFBvc2l0aW9uKHtsZWZ0OiAnMTAwJSd9KVxuICAgICAgc2V0T3BlbihmYWxzZSlcbiAgICB9LFxuICB9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICBzZXRPcGVuKGZhbHNlKVxuICAgIH1cbiAgfSwgW2Rpc2FibGVkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9IGdldFBvcG92ZXJQb3NpdGlvbihcbiAgICAgICAgdG9vbHRpcFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAuLi5ib3hlcy5jdXJyZW50XG4gICAgICApXG4gICAgICB0YXJnZXRQb3NpdGlvbi5sZWZ0ICE9PSBwb3NpdGlvbi5sZWZ0ICYmIHNldFBvc2l0aW9uKHRhcmdldFBvc2l0aW9uKVxuICAgIH1cbiAgfSwgW29wZW4sIHBvc2l0aW9uLmxlZnRdKVxuXG4gIHJldHVybiAhdGl0bGUgfHwgIWlzRGVza3RvcCgpIHx8ICFoYXZlUG9pbnRlcigpID8gKFxuICAgIGNoaWxkcmVuXG4gICkgOiAoXG4gICAgPD5cbiAgICAgIHtjbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGNoaWxkUHJvcHMpfVxuICAgICAge29wZW4gJiZcbiAgICAgICAgY3JlYXRlUG9ydGFsKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIC4uLnRvb2x0aXBTdHlsZSxcbiAgICAgICAgICAgICAgLi4ucG9zaXRpb24sXG4gICAgICAgICAgICAgIHRvcDogYGNhbGMoJHtwb3NpdGlvbi50b3B9cHggLSAke2JvdHRvbX0pYCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByZWY9e3Rvb2x0aXBSZWZ9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e3RpdGxlfSAvPlxuICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICBjb250YWluZXIgfHwgZGVmYXVsdENvbnRhaW5lci5jdXJyZW50XG4gICAgICAgICl9XG4gICAgPC8+XG4gIClcbn1cblxuY29uc3QgQnV0dG9uID0gKHtzdGFydEljb24sIHZhcmlhbnQsIHN0eWxlLCB0aXRsZSwgY2hpbGRyZW4sIC4uLnJlc3R9KSA9PiAoXG4gIDxUb29sdGlwIHRpdGxlPXt0aXRsZX0gYm90dG9tPVwiM2VtXCIgZGlzYWJsZWQ9e3Jlc3QuZGlzYWJsZWR9PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNzcz17W3N0eWxlcywgdmFyaWFudHNbdmFyaWFudF1dfSBzdHlsZT17c3R5bGUgfHwge319IHsuLi5yZXN0fT5cbiAgICAgIHt0eXBlb2Ygc3RhcnRJY29uID09PSAnc3RyaW5nJyA/IDxJY29uIHR5cGU9e3N0YXJ0SWNvbn0gLz4gOiBzdGFydEljb259XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gIDwvVG9vbHRpcD5cbilcblxuQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgc3RhcnRJY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxufVxuXG5jb25zdCBQbGF5QnV0dG9uID0gKHtwbGF5YmFja1N0YXRlLCBlbmRlZCwgaGlkZGVuLCBvbkNsaWNrLCAuLi5yZXN0fSkgPT4gKFxuICA8QnV0dG9uXG4gICAgc3R5bGU9e2hpZGRlbiAmJiB7b3BhY2l0eTogMH19XG4gICAgc3RhcnRJY29uPXtcbiAgICAgIGVuZGVkID8gJ3JlcGxheScgOiBwbGF5YmFja1N0YXRlID09PSAncGxheWluZycgPyAncGF1c2UnIDogJ3BsYXknXG4gICAgfVxuICAgIHRpdGxlPXtgS0tTLlBMQVlFUi4ke1xuICAgICAgZW5kZWQgPyAnUkVQTEFZJyA6IHBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJyA/ICdQQVVTRScgOiAnUExBWSdcbiAgICB9YH1cbiAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgIHsuLi5yZXN0fVxuICAvPlxuKVxuXG5QbGF5QnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgZW5kZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuY29uc3QgRnVsbHNjcmVlbkJ1dHRvbiA9ICh7dmlld01vZGUsIG9uQ2xpY2t9KSA9PiB7XG4gIGNvbnN0IGljb24gPSB2aWV3TW9kZSA9PT0gJ2Z1bGxzY3JlZW4nID8gJ2xlYXZlRnVsbFNjcmVlbicgOiAnZW50ZXJGdWxsU2NyZWVuJ1xuICBjb25zdCB0ZXh0ID0gdXNlSW50bCgpLmZvcm1hdE1lc3NhZ2UoXG4gICAgdmlld01vZGUgPT09ICdmdWxsc2NyZWVuJ1xuICAgICAgPyAnS0tTLlBMQVlFUi5GVUxMU0NSRUVOLkVYSVQnXG4gICAgICA6ICdLS1MuUExBWUVSLkZVTExTQ1JFRU4nXG4gIClcblxuICByZXR1cm4gPEJ1dHRvbiBzdGFydEljb249e2ljb259IHRpdGxlPXt0ZXh0fSBvbkNsaWNrPXtvbkNsaWNrfSAvPlxufVxuXG5jb25zdCBza2lwU3R5bGVzID0ge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBwYWRkaW5nOiAnMC41cmVtJyxcbiAgYm9yZGVyOiAnMXB4IHNvbGlkICNmZmYnLFxuICBjb2xvcjogJyNmZmYnLFxuICBiYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjQpJyxcbiAgZm9udFNpemU6ICcyNHB4JyxcbiAgb3BhY2l0eTogMC44LFxuICAnJjpkaXNhYmxlZCc6IHtcbiAgICBvcGFjaXR5OiAwLjUsXG4gIH0sXG4gICc+IGRpdic6IHtcbiAgICBtYXJnaW5MZWZ0OiAnMC41cmVtJyxcbiAgICB3aWR0aDogJzEuNXJlbScsXG4gICAgaGVpZ2h0OiAnMS41cmVtJyxcbiAgfSxcbn1cblxuY29uc3QgU2tpcEJ1dHRvbiA9ICh7d2FpdFRpbWUsIG9uQ2xpY2t9KSA9PiAoXG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjc3M9e3NraXBTdHlsZXN9XG4gICAgZGlzYWJsZWQ9e3dhaXRUaW1lID4gMH1cbiAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICA+XG4gICAge3dhaXRUaW1lID4gMCA/IChcbiAgICAgIDw+XG4gICAgICAgIHtNYXRoLmNlaWwod2FpdFRpbWUpfSA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cIktLUy5TU0FJLlNFQ09ORFNcIiAvPlxuICAgICAgPC8+XG4gICAgKSA6IChcbiAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiS0tTLlNTQUkuU0tJUC5BRFwiIC8+XG4gICAgKX1cbiAgICA8SWNvbiB0eXBlPVwibmV4dEVwaXNvZGVcIiAvPlxuICA8L2J1dHRvbj5cbilcblxuZXhwb3J0IHtCdXR0b24sIFBsYXlCdXR0b24sIEZ1bGxzY3JlZW5CdXR0b24sIFNraXBCdXR0b259XG4iXX0= */"],style:style||{},...rest,children:[typeof startIcon==='string'?jsx(Icon,{type:startIcon}):startIcon,children]})});Button.propTypes={startIcon:PropTypes$1.node,children:PropTypes$1.node};const PlayButton$1=({playbackState,ended,hidden,onClick,...rest})=>jsx(Button,{style:hidden&&{opacity:0},startIcon:ended?'replay':playbackState==='playing'?'pause':'play',title:`KKS.PLAYER.${ended?'REPLAY':playbackState==='playing'?'PAUSE':'PLAY'}`,onClick:onClick,...rest});PlayButton$1.propTypes={ended:PropTypes$1.bool,onClick:PropTypes$1.func};const FullscreenButton=({viewMode,onClick})=>{const icon=viewMode==='fullscreen'?'leaveFullScreen':'enterFullScreen';const text=useIntl().formatMessage(viewMode==='fullscreen'?'KKS.PLAYER.FULLSCREEN.EXIT':'KKS.PLAYER.FULLSCREEN');return jsx(Button,{startIcon:icon,title:text,onClick:onClick});};/* eslint-disable jsx-a11y/no-static-element-interactions */ /* @jsxImportSource @emotion/react */const backdropStyle={position:'absolute',zIndex:1,top:0,left:0,display:'flex',flexWrap:'wrap',alignItems:'center',alignContent:'center',justifyContent:'center',height:'100%',width:'100%',backgroundColor:'rgba(0, 0, 0, 0)',transform:'translateY(-100%)',transition:'background-color 0.5s ease, transform 0s 0.5s'};const backdropOpenStyle={backgroundColor:'rgba(0, 0, 0, 0.6)',transform:'translateY(0)',transition:'background-color 0.5s ease','~ .overlay-backdrop':{display:'none'}};// eslint-disable-next-line react/prop-types
|
|
246
|
+
const Backdrop=({open,children,onClick,...rest})=>jsx("div",{css:[backdropStyle,open&&backdropOpenStyle,process.env.NODE_ENV==="production"?"":";label:Backdrop;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhY2tkcm9wLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdDSSIsImZpbGUiOiJCYWNrZHJvcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuXG5jb25zdCBiYWNrZHJvcFN0eWxlID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAxLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDAsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleFdyYXA6ICd3cmFwJyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGFsaWduQ29udGVudDogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMCknLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMDAlKScsXG4gIHRyYW5zaXRpb246ICdiYWNrZ3JvdW5kLWNvbG9yIDAuNXMgZWFzZSwgdHJhbnNmb3JtIDBzIDAuNXMnLFxufVxuXG5jb25zdCBiYWNrZHJvcE9wZW5TdHlsZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjYpJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsXG4gIHRyYW5zaXRpb246ICdiYWNrZ3JvdW5kLWNvbG9yIDAuNXMgZWFzZScsXG4gICd+IC5vdmVybGF5LWJhY2tkcm9wJzoge1xuICAgIGRpc3BsYXk6ICdub25lJyxcbiAgfSxcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbmNvbnN0IEJhY2tkcm9wID0gKHtvcGVuLCBjaGlsZHJlbiwgb25DbGljaywgLi4ucmVzdH0pID0+IChcbiAgPGRpdlxuICAgIGNzcz17W2JhY2tkcm9wU3R5bGUsIG9wZW4gJiYgYmFja2Ryb3BPcGVuU3R5bGVdfVxuICAgIGNsYXNzTmFtZT1cIm92ZXJsYXktYmFja2Ryb3BcIlxuICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgb25DbGljaz8uKClcbiAgICAgIH1cbiAgICB9fVxuICAgIHsuLi5yZXN0fVxuICA+XG4gICAge29wZW4gJiYgY2hpbGRyZW59XG4gIDwvZGl2PlxuKVxuXG5leHBvcnQgZGVmYXVsdCBCYWNrZHJvcFxuIl19 */"],className:"overlay-backdrop",onClick:event=>{if(event.target===event.currentTarget){onClick===null||onClick===void 0?void 0:onClick();}},...rest,children:open&&children});/* @jsxImportSource @emotion/react */const iconStyle$1={width:'78px',height:'78px'};const style$9={display:'flex',justifyContent:'center',flex:'100%',margin:'1rem 0',padding:'0 1.5rem',textAlign:'center'};const Error$1=({error,onBack})=>{const intl=useIntl();const values={CODE:error.code||0,code:error.code||0,...error.data};return jsxs(Backdrop,{open:true,children:[jsx(Icon,{type:"warning",style:iconStyle$1}),jsx("div",{css:style$9,children:[error.name==='PlaycraftApiError'?`KKS.ERROR.PLAYCRAFT.${error.code}`:`KKS.ERROR.${error.code}`,`KKS.ERROR.${error.name}`,error.message,error.name,`KKS.ERROR`].reduceRight((last,id)=>intl.formatMessage({id,defaultMessage:last},values),'')}),onBack&&jsx(Button,{variant:"outlined",onClick:onBack,children:jsx(FormattedMessage,{id:"KKS.BACK"})})]});};Error$1.propTypes={error:PropTypes$1.object,onBack:PropTypes$1.func};/* eslint-disable react/prop-types */const extensionContext=/*#__PURE__*/createContext();const SlotProvider=({slotRef,children})=>{const[slots,setSlots]=useState();useEffect(()=>{setSlots(slotRef.current);},[]);return/*#__PURE__*/jsx$1(extensionContext.Provider,{value:slots,children:children});};const FunctionBarExtension=({children})=>{const slots=useContext(extensionContext);return slots!==null&&slots!==void 0&&slots.functionBar?/*#__PURE__*/createPortal(children,slots.functionBar):'';};function _EMOTION_STRINGIFIED_CSS_ERROR__$6(){return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).";}const expand={margin:0,flex:'1'};const hidden={display:'none'};const containerStyle$1={width:'100%',height:'100%',boxSizing:'border-box',display:'flex',flexDirection:'column',overflow:'hidden',color:'white',// prevent animation glich(afterimage) of descendant elements
|
|
247
|
+
transform:'translateX(0)',userSelect:'none',h1:{margin:0,fontSize:'1em',lineHeight:'1.5em'},'a, a:link, a:visited':{color:'#fff',opacity:0.8,textDecoration:'none'},button:{fontSize:'inherit','> *':{pointerEvents:'none'}},'--thumbnail-width':'96'// height 54
|
|
248
|
+
};const videoContainerStyle={'> div:first-of-type':{position:'absolute',zIndex:'-1',width:'100%',height:'100%'}};const drop={backgroundImage:`linear-gradient(
|
|
249
|
+
0deg,
|
|
250
|
+
rgba(0,0,0,0.5) 0,
|
|
251
|
+
rgba(0,0,0,0) 8rem calc(100% - 8rem),
|
|
252
|
+
rgba(0,0,0,0.5) 100%
|
|
253
|
+
)`};const dropTop={backgroundImage:`linear-gradient(
|
|
254
|
+
0deg,
|
|
255
|
+
rgba(0,0,0,0) 0,
|
|
256
|
+
rgba(0,0,0,0) 8rem calc(100% - 8rem),
|
|
257
|
+
rgba(0,0,0,0.5) 100%
|
|
258
|
+
)`};const responsiveStyles={desktop:{fontSize:'24px'}// add if necessary: big-desktop
|
|
259
|
+
};const rowStyle={boxSizing:'border-box',width:'100%',padding:'calc(2em - 16px)',display:'flex',alignItems:'center',justifyContent:'flex-end','> button:not(:disabled) ~ button:not(:disabled), div ~ button:last-of-type':{marginLeft:'0.5rem'},'> button:not(:last-of-type)':{marginRight:'0.5rem'}};/*
|
|
260
|
+
Hint:
|
|
261
|
+
displayStyles specificity is higher then controlsStyle
|
|
262
|
+
Need to pay attention when we revise these styles.
|
|
263
|
+
*/const displayStyles={hidden:{'> div:not(.pinned), > button:not(.pinned), > h1:not(.pinned)':{zIndex:-2,opacity:0,transition:'opacity 0.8s ease-out, z-index 0s 0.8s'}},shown:{'> div:not(.pinned), > button:not(.pinned), > h1:not(.pinned)':{zIndex:1,transition:'opacity 0.3s ease-out, z-index 0s 0s'}}};const controlsDisplayStyles={hidden:{...displayStyles.hidden,'~ div:not(.pinned)':displayStyles.hidden},shown:{...displayStyles.shown,'~ div':displayStyles.shown}};const controlsStyle={marginTop:'auto',position:'absolute',zIndex:'2',display:'flex',alignItems:'center','> button':{margin:'1em',width:'1.75em',height:'1.75em','-webkit-tap-highlight-color':'transparent','&:disabled':{opacity:0,pointerEvents:'none'},'&.play-button':{width:'3em',height:'3em'}}};const bottomSpace={'@media (orientation: portrait)':{paddingBottom:'2em'},'@media (orientation: landscape)':{paddingBottom:'1.3em'}};const functionBarSlotStyle={display:'flex',marginLeft:'0.75em',button:{'-webkit-tap-highlight-color':'transparent',display:'block',marginLeft:'0.75em'}};const infoBarSlotStyle={display:'flex',marginLeft:'0.75em'};const textEllipsis={overflow:'hidden',whiteSpace:'nowrap',textOverflow:'ellipsis'};const infoStyle={overflow:'visible',h1:{fontWeight:'500',...textEllipsis,'> div':textEllipsis},'button + h1':{marginLeft:'1em'}};const backStyle={position:'absolute',zIndex:0,width:'100%',height:'100%',display:'flex',alignItems:'center',justifyContent:'center','~ div':{zIndex:0}};const skipStyle={position:'absolute',right:0,bottom:'9rem',textAlign:'right',button:{width:'auto',height:'auto'}};const dekstopStyle={'> div':{'> button:not(:disabled) ~ button:not(:disabled), > button:last-of-type':{marginLeft:'0.75em'},'> button:first-of-type':{marginLeft:'0'}},'--thumbnail-width':'288'// height 162
|
|
264
|
+
};const desktopControls={flexWrap:'wrap','> div:first-of-type':{flex:'100%',marginBottom:'0.88em'},'> button[disabled]':{display:'none'}};const adContainerStyle={flexGrow:1,display:'flex',alignItems:'center',justifyContent:'center',pointerEvents:'none','> iframe':{pointerEvents:'auto'},button:{pointerEvents:'auto'}};const ControlsBlock=({order='mobile',playButton,rewindButton='',forwardButton='',previousEpisodeButton='',nextEpisodeButton=''})=>order==='desktop'?jsxs(Fragment$1,{children:[previousEpisodeButton,playButton,nextEpisodeButton,rewindButton,forwardButton]}):jsxs(Fragment$1,{children:[rewindButton,previousEpisodeButton,playButton,nextEpisodeButton,forwardButton]});var _ref$6=process.env.NODE_ENV==="production"?{name:"1n8d5lm",styles:"flex:1;text-shadow:2px 2px 1px #000"}:{name:"1iusnql-DefaultLayout",styles:"flex:1;text-shadow:2px 2px 1px #000;label:DefaultLayout;",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRlZmF1bHRMYXlvdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbVlZIiwiZmlsZSI6IkRlZmF1bHRMYXlvdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5pbXBvcnQge3VzZVJlZn0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1Nsb3RQcm92aWRlcn0gZnJvbSAnLi91aUV4dGVuc2lvbnMnXG5cbmNvbnN0IGV4cGFuZCA9IHtcbiAgbWFyZ2luOiAwLFxuICBmbGV4OiAnMScsXG59XG5cbmNvbnN0IGhpZGRlbiA9IHtkaXNwbGF5OiAnbm9uZSd9XG5cbmNvbnN0IGNvbnRhaW5lclN0eWxlID0ge1xuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgY29sb3I6ICd3aGl0ZScsXG4gIC8vIHByZXZlbnQgYW5pbWF0aW9uIGdsaWNoKGFmdGVyaW1hZ2UpIG9mIGRlc2NlbmRhbnQgZWxlbWVudHNcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgaDE6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udFNpemU6ICcxZW0nLFxuICAgIGxpbmVIZWlnaHQ6ICcxLjVlbScsXG4gIH0sXG4gICdhLCBhOmxpbmssIGE6dmlzaXRlZCc6IHtcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICB9LFxuICBidXR0b246IHtcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICc+IConOiB7XG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzk2JywgLy8gaGVpZ2h0IDU0XG59XG5cbmNvbnN0IHZpZGVvQ29udGFpbmVyU3R5bGUgPSB7XG4gICc+IGRpdjpmaXJzdC1vZi10eXBlJzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogJy0xJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9LFxufVxuXG5jb25zdCBkcm9wID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoXG4gICAgMGRlZyxcbiAgICByZ2JhKDAsMCwwLDAuNSkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IGRyb3BUb3AgPSB7XG4gIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudChcbiAgICAwZGVnLFxuICAgIHJnYmEoMCwwLDAsMCkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IHJlc3BvbnNpdmVTdHlsZXMgPSB7XG4gIGRlc2t0b3A6IHtcbiAgICBmb250U2l6ZTogJzI0cHgnLFxuICB9LCAvLyBhZGQgaWYgbmVjZXNzYXJ5OiBiaWctZGVza3RvcFxufVxuXG5jb25zdCByb3dTdHlsZSA9IHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHdpZHRoOiAnMTAwJScsXG4gIHBhZGRpbmc6ICdjYWxjKDJlbSAtIDE2cHgpJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICc+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSB+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSwgZGl2IH4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6XG4gICAge1xuICAgICAgbWFyZ2luTGVmdDogJzAuNXJlbScsXG4gICAgfSxcbiAgJz4gYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5SaWdodDogJzAuNXJlbScsXG4gIH0sXG59XG5cbi8qIFxuICBIaW50OlxuICAgIGRpc3BsYXlTdHlsZXMgc3BlY2lmaWNpdHkgaXMgaGlnaGVyIHRoZW4gY29udHJvbHNTdHlsZVxuICAgIE5lZWQgdG8gcGF5IGF0dGVudGlvbiB3aGVuIHdlIHJldmlzZSB0aGVzZSBzdHlsZXMuXG4qL1xuY29uc3QgZGlzcGxheVN0eWxlcyA9IHtcbiAgaGlkZGVuOiB7XG4gICAgJz4gZGl2Om5vdCgucGlubmVkKSwgPiBidXR0b246bm90KC5waW5uZWQpLCA+IGgxOm5vdCgucGlubmVkKSc6IHtcbiAgICAgIHpJbmRleDogLTIsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC44cyBlYXNlLW91dCwgei1pbmRleCAwcyAwLjhzJyxcbiAgICB9LFxuICB9LFxuICBzaG93bjoge1xuICAgICc+IGRpdjpub3QoLnBpbm5lZCksID4gYnV0dG9uOm5vdCgucGlubmVkKSwgPiBoMTpub3QoLnBpbm5lZCknOiB7XG4gICAgICB6SW5kZXg6IDEsXG4gICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjNzIGVhc2Utb3V0LCB6LWluZGV4IDBzIDBzJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBjb250cm9sc0Rpc3BsYXlTdHlsZXMgPSB7XG4gIGhpZGRlbjoge1xuICAgIC4uLmRpc3BsYXlTdHlsZXMuaGlkZGVuLFxuICAgICd+IGRpdjpub3QoLnBpbm5lZCknOiBkaXNwbGF5U3R5bGVzLmhpZGRlbixcbiAgfSxcbiAgc2hvd246IHtcbiAgICAuLi5kaXNwbGF5U3R5bGVzLnNob3duLFxuICAgICd+IGRpdic6IGRpc3BsYXlTdHlsZXMuc2hvd24sXG4gIH0sXG59XG5cbmNvbnN0IGNvbnRyb2xzU3R5bGUgPSB7XG4gIG1hcmdpblRvcDogJ2F1dG8nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAnMicsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICc+IGJ1dHRvbic6IHtcbiAgICBtYXJnaW46ICcxZW0nLFxuICAgIHdpZHRoOiAnMS43NWVtJyxcbiAgICBoZWlnaHQ6ICcxLjc1ZW0nLFxuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgICcmOmRpc2FibGVkJzoge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB9LFxuICAgICcmLnBsYXktYnV0dG9uJzoge1xuICAgICAgd2lkdGg6ICczZW0nLFxuICAgICAgaGVpZ2h0OiAnM2VtJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBib3R0b21TcGFjZSA9IHtcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IHBvcnRyYWl0KSc6IHtcbiAgICBwYWRkaW5nQm90dG9tOiAnMmVtJyxcbiAgfSxcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogJzEuM2VtJyxcbiAgfSxcbn1cblxuY29uc3QgZnVuY3Rpb25CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIGJ1dHRvbjoge1xuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIH0sXG59XG5cbmNvbnN0IGluZm9CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG59XG5cbmNvbnN0IHRleHRFbGxpcHNpcyA9IHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxufVxuXG5jb25zdCBpbmZvU3R5bGUgPSB7XG4gIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIGgxOiB7XG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgLi4udGV4dEVsbGlwc2lzLFxuICAgICc+IGRpdic6IHRleHRFbGxpcHNpcyxcbiAgfSxcbiAgJ2J1dHRvbiArIGgxJzoge1xuICAgIG1hcmdpbkxlZnQ6ICcxZW0nLFxuICB9LFxufVxuXG5jb25zdCBiYWNrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICd+IGRpdic6IHtcbiAgICB6SW5kZXg6IDAsXG4gIH0sXG59XG5cbmNvbnN0IHNraXBTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206ICc5cmVtJyxcbiAgdGV4dEFsaWduOiAncmlnaHQnLFxuICBidXR0b246IHtcbiAgICB3aWR0aDogJ2F1dG8nLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICB9LFxufVxuXG5jb25zdCBkZWtzdG9wU3R5bGUgPSB7XG4gICc+IGRpdic6IHtcbiAgICAnPiBidXR0b246bm90KDpkaXNhYmxlZCkgfiBidXR0b246bm90KDpkaXNhYmxlZCksID4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6IHtcbiAgICAgIG1hcmdpbkxlZnQ6ICcwLjc1ZW0nLFxuICAgIH0sXG4gICAgJz4gYnV0dG9uOmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgICBtYXJnaW5MZWZ0OiAnMCcsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzI4OCcsIC8vIGhlaWdodCAxNjJcbn1cblxuY29uc3QgZGVza3RvcENvbnRyb2xzID0ge1xuICBmbGV4V3JhcDogJ3dyYXAnLFxuICAnPiBkaXY6Zmlyc3Qtb2YtdHlwZSc6IHtcbiAgICBmbGV4OiAnMTAwJScsXG4gICAgbWFyZ2luQm90dG9tOiAnMC44OGVtJyxcbiAgfSxcbiAgJz4gYnV0dG9uW2Rpc2FibGVkXSc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZScsXG4gIH0sXG59XG5cbmNvbnN0IGFkQ29udGFpbmVyU3R5bGUgPSB7XG4gIGZsZXhHcm93OiAxLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgJz4gaWZyYW1lJzoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG4gIGJ1dHRvbjoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG59XG5cbmNvbnN0IENvbnRyb2xzQmxvY2sgPSAoe1xuICBvcmRlciA9ICdtb2JpbGUnLFxuICBwbGF5QnV0dG9uLFxuICByZXdpbmRCdXR0b24gPSAnJyxcbiAgZm9yd2FyZEJ1dHRvbiA9ICcnLFxuICBwcmV2aW91c0VwaXNvZGVCdXR0b24gPSAnJyxcbiAgbmV4dEVwaXNvZGVCdXR0b24gPSAnJyxcbn0pID0+XG4gIG9yZGVyID09PSAnZGVza3RvcCcgPyAoXG4gICAgPD5cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtyZXdpbmRCdXR0b259XG4gICAgICB7Zm9yd2FyZEJ1dHRvbn1cbiAgICA8Lz5cbiAgKSA6IChcbiAgICA8PlxuICAgICAge3Jld2luZEJ1dHRvbn1cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtmb3J3YXJkQnV0dG9ufVxuICAgIDwvPlxuICApXG5cbmNvbnN0IERlZmF1bHRMYXlvdXQgPSAoe1xuICB0eXBlID0gJ21vYmlsZScsXG4gIHN0eWxlLFxuICBkaXNwbGF5LFxuICBjb250cm9sc0Rpc3BsYXkgPSBkaXNwbGF5LFxuICBzaXplLFxuICB0aXRsZSA9ICcnLFxuICBjaGFubmVsVGl0bGUgPSAnJyxcbiAgY2hhbm5lbEljb24gPSAnJyxcbiAgdmlkZW8sXG4gIGhhdmVCb3R0b21JdGVtLFxuICBzZWVrYmFyID0gJycsXG4gIGNvbnRyb2xCdXR0b25zLFxuICB2b2x1bWVDb250cm9sLFxuICBmdWxsc2NyZWVuQnV0dG9uLFxuICBiYWNrQnV0dG9uID0gJycsXG4gIGFkU3RhdHVzID0gJycsXG4gIGFkTGluayA9ICcnLFxuICBhZFNraXBCdXR0b24sXG4gIGJhY2tJdGVtcyxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgYmFja1JlZixcbiAgYWRDb250YWluZXJSZWYsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3Qgc2xvdFJlZiA9IHVzZVJlZih7fSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17W1xuICAgICAgICBjb250YWluZXJTdHlsZSxcbiAgICAgICAgdmlkZW9Db250YWluZXJTdHlsZSxcbiAgICAgICAgcmVzcG9uc2l2ZVN0eWxlc1tzaXplXSxcbiAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRla3N0b3BTdHlsZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICBdfVxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7dmlkZW99XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17YmFja1JlZn1cbiAgICAgICAgY3NzPXtbXG4gICAgICAgICAgYmFja1N0eWxlLFxuICAgICAgICAgIGRpc3BsYXkgIT09ICdoaWRkZW4nICYmIChoYXZlQm90dG9tSXRlbSA/IGRyb3BUb3AgOiBkcm9wKSxcbiAgICAgICAgXX1cbiAgICAgID5cbiAgICAgICAge3R5cGUgIT09ICdtb2JpbGUnICYmIGJhY2tJdGVtc31cbiAgICAgICAge2FkU2tpcEJ1dHRvbiAmJiA8ZGl2IGNzcz17c2tpcFN0eWxlfT57YWRTa2lwQnV0dG9ufTwvZGl2Pn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjc3M9e1tyb3dTdHlsZSwgaW5mb1N0eWxlLCBkaXNwbGF5U3R5bGVzW2Rpc3BsYXldXX0+XG4gICAgICAgIHtiYWNrQnV0dG9ufVxuICAgICAgICB7Y2hhbm5lbEljb259XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LnRpdGxlQmFyID0gZWxlbWVudFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxoMT5cbiAgICAgICAgICB7Y2hhbm5lbFRpdGxlfVxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9oMT5cbiAgICAgICAgPGRpdiBjc3M9e2V4cGFuZH0gLz5cbiAgICAgICAge3R5cGUgPT09ICdtb2JpbGUnICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjc3M9e2FkU3RhdHVzID8gaGlkZGVuIDogW2Z1bmN0aW9uQmFyU2xvdFN0eWxlXX1cbiAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgIHNsb3RSZWYuY3VycmVudC5mdW5jdGlvbkJhciA9IGVsZW1lbnRcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FkTGluayAmJiA8ZGl2IGNsYXNzTmFtZT1cInBpbm5lZFwiPnthZExpbmt9PC9kaXY+fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHJlZj17YWRDb250YWluZXJSZWZ9IGNzcz17YWRDb250YWluZXJTdHlsZX0+XG4gICAgICAgIHt0eXBlID09PSAnbW9iaWxlJyAmJiAoXG4gICAgICAgICAgPGRpdiBjc3M9e1tjb250cm9sc1N0eWxlLCBkaXNwbGF5U3R5bGVzW2NvbnRyb2xzRGlzcGxheV1dfT5cbiAgICAgICAgICAgIDxDb250cm9sc0Jsb2NrIG9yZGVyPVwibW9iaWxlXCIgey4uLmNvbnRyb2xCdXR0b25zfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7dHlwZSA9PT0gJ21vYmlsZScgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtcbiAgICAgICAgICAgIGFkU3RhdHVzXG4gICAgICAgICAgICAgID8gaGlkZGVuXG4gICAgICAgICAgICAgIDogW2luZm9CYXJTbG90U3R5bGUsIGNvbnRyb2xzRGlzcGxheVN0eWxlc1tjb250cm9sc0Rpc3BsYXldXVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17W1xuICAgICAgICAgIHJvd1N0eWxlLFxuICAgICAgICAgIHttYXJnaW5Ub3A6ICdhdXRvJ30sXG4gICAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRlc2t0b3BDb250cm9scyxcbiAgICAgICAgICBjb250cm9sc0Rpc3BsYXlTdHlsZXNbY29udHJvbHNEaXNwbGF5XSxcbiAgICAgICAgICB0eXBlICE9PSAnZGVza3RvcCcgJiYgYm90dG9tU3BhY2UsXG4gICAgICAgIF19XG4gICAgICA+XG4gICAgICAgIHtzZWVrYmFyIHx8IDxkaXYgLz59XG4gICAgICAgIHt0eXBlID09PSAnZGVza3RvcCcgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29udHJvbHNCbG9jayBvcmRlcj1cImRlc2t0b3BcIiB7Li4uY29udHJvbEJ1dHRvbnN9IC8+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17YWRTdGF0dXMgPyBoaWRkZW4gOiBbaW5mb0JhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7YWRTdGF0dXMgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBpbm5lZFwiXG4gICAgICAgICAgICBjc3M9e3tmbGV4OiAxLCB0ZXh0U2hhZG93OiAnMnB4IDJweCAxcHggIzAwMCd9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHthZFN0YXR1c31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge3R5cGUgPT09ICdkZXNrdG9wJyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgY3NzPXtleHBhbmR9IC8+XG4gICAgICAgICAgICB7dm9sdW1lQ29udHJvbH1cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXthZFN0YXR1cyA/IGhpZGRlbiA6IFtmdW5jdGlvbkJhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmZ1bmN0aW9uQmFyID0gZWxlbWVudFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge2Z1bGxzY3JlZW5CdXR0b259XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTbG90UHJvdmlkZXIgc2xvdFJlZj17c2xvdFJlZn0+e2NoaWxkcmVufTwvU2xvdFByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRMYXlvdXRcbiJdfQ== */",toString:_EMOTION_STRINGIFIED_CSS_ERROR__$6};const DefaultLayout=({type='mobile',style,display,controlsDisplay=display,size,title='',channelTitle='',channelIcon='',video,haveBottomItem,seekbar='',controlButtons,volumeControl,fullscreenButton,backButton='',adStatus='',adLink='',adSkipButton,backItems,children,containerRef,backRef,adContainerRef,...rest})=>{const slotRef=useRef({});return jsxs("div",{css:[containerStyle$1,videoContainerStyle,responsiveStyles[size],type==='desktop'&&dekstopStyle,style,process.env.NODE_ENV==="production"?"":";label:DefaultLayout;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRlZmF1bHRMYXlvdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNFNNIiwiZmlsZSI6IkRlZmF1bHRMYXlvdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5pbXBvcnQge3VzZVJlZn0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1Nsb3RQcm92aWRlcn0gZnJvbSAnLi91aUV4dGVuc2lvbnMnXG5cbmNvbnN0IGV4cGFuZCA9IHtcbiAgbWFyZ2luOiAwLFxuICBmbGV4OiAnMScsXG59XG5cbmNvbnN0IGhpZGRlbiA9IHtkaXNwbGF5OiAnbm9uZSd9XG5cbmNvbnN0IGNvbnRhaW5lclN0eWxlID0ge1xuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgY29sb3I6ICd3aGl0ZScsXG4gIC8vIHByZXZlbnQgYW5pbWF0aW9uIGdsaWNoKGFmdGVyaW1hZ2UpIG9mIGRlc2NlbmRhbnQgZWxlbWVudHNcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgaDE6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udFNpemU6ICcxZW0nLFxuICAgIGxpbmVIZWlnaHQ6ICcxLjVlbScsXG4gIH0sXG4gICdhLCBhOmxpbmssIGE6dmlzaXRlZCc6IHtcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICB9LFxuICBidXR0b246IHtcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICc+IConOiB7XG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzk2JywgLy8gaGVpZ2h0IDU0XG59XG5cbmNvbnN0IHZpZGVvQ29udGFpbmVyU3R5bGUgPSB7XG4gICc+IGRpdjpmaXJzdC1vZi10eXBlJzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogJy0xJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9LFxufVxuXG5jb25zdCBkcm9wID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoXG4gICAgMGRlZyxcbiAgICByZ2JhKDAsMCwwLDAuNSkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IGRyb3BUb3AgPSB7XG4gIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudChcbiAgICAwZGVnLFxuICAgIHJnYmEoMCwwLDAsMCkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IHJlc3BvbnNpdmVTdHlsZXMgPSB7XG4gIGRlc2t0b3A6IHtcbiAgICBmb250U2l6ZTogJzI0cHgnLFxuICB9LCAvLyBhZGQgaWYgbmVjZXNzYXJ5OiBiaWctZGVza3RvcFxufVxuXG5jb25zdCByb3dTdHlsZSA9IHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHdpZHRoOiAnMTAwJScsXG4gIHBhZGRpbmc6ICdjYWxjKDJlbSAtIDE2cHgpJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICc+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSB+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSwgZGl2IH4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6XG4gICAge1xuICAgICAgbWFyZ2luTGVmdDogJzAuNXJlbScsXG4gICAgfSxcbiAgJz4gYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5SaWdodDogJzAuNXJlbScsXG4gIH0sXG59XG5cbi8qIFxuICBIaW50OlxuICAgIGRpc3BsYXlTdHlsZXMgc3BlY2lmaWNpdHkgaXMgaGlnaGVyIHRoZW4gY29udHJvbHNTdHlsZVxuICAgIE5lZWQgdG8gcGF5IGF0dGVudGlvbiB3aGVuIHdlIHJldmlzZSB0aGVzZSBzdHlsZXMuXG4qL1xuY29uc3QgZGlzcGxheVN0eWxlcyA9IHtcbiAgaGlkZGVuOiB7XG4gICAgJz4gZGl2Om5vdCgucGlubmVkKSwgPiBidXR0b246bm90KC5waW5uZWQpLCA+IGgxOm5vdCgucGlubmVkKSc6IHtcbiAgICAgIHpJbmRleDogLTIsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC44cyBlYXNlLW91dCwgei1pbmRleCAwcyAwLjhzJyxcbiAgICB9LFxuICB9LFxuICBzaG93bjoge1xuICAgICc+IGRpdjpub3QoLnBpbm5lZCksID4gYnV0dG9uOm5vdCgucGlubmVkKSwgPiBoMTpub3QoLnBpbm5lZCknOiB7XG4gICAgICB6SW5kZXg6IDEsXG4gICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjNzIGVhc2Utb3V0LCB6LWluZGV4IDBzIDBzJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBjb250cm9sc0Rpc3BsYXlTdHlsZXMgPSB7XG4gIGhpZGRlbjoge1xuICAgIC4uLmRpc3BsYXlTdHlsZXMuaGlkZGVuLFxuICAgICd+IGRpdjpub3QoLnBpbm5lZCknOiBkaXNwbGF5U3R5bGVzLmhpZGRlbixcbiAgfSxcbiAgc2hvd246IHtcbiAgICAuLi5kaXNwbGF5U3R5bGVzLnNob3duLFxuICAgICd+IGRpdic6IGRpc3BsYXlTdHlsZXMuc2hvd24sXG4gIH0sXG59XG5cbmNvbnN0IGNvbnRyb2xzU3R5bGUgPSB7XG4gIG1hcmdpblRvcDogJ2F1dG8nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAnMicsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICc+IGJ1dHRvbic6IHtcbiAgICBtYXJnaW46ICcxZW0nLFxuICAgIHdpZHRoOiAnMS43NWVtJyxcbiAgICBoZWlnaHQ6ICcxLjc1ZW0nLFxuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgICcmOmRpc2FibGVkJzoge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB9LFxuICAgICcmLnBsYXktYnV0dG9uJzoge1xuICAgICAgd2lkdGg6ICczZW0nLFxuICAgICAgaGVpZ2h0OiAnM2VtJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBib3R0b21TcGFjZSA9IHtcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IHBvcnRyYWl0KSc6IHtcbiAgICBwYWRkaW5nQm90dG9tOiAnMmVtJyxcbiAgfSxcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogJzEuM2VtJyxcbiAgfSxcbn1cblxuY29uc3QgZnVuY3Rpb25CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIGJ1dHRvbjoge1xuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIH0sXG59XG5cbmNvbnN0IGluZm9CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG59XG5cbmNvbnN0IHRleHRFbGxpcHNpcyA9IHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxufVxuXG5jb25zdCBpbmZvU3R5bGUgPSB7XG4gIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIGgxOiB7XG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgLi4udGV4dEVsbGlwc2lzLFxuICAgICc+IGRpdic6IHRleHRFbGxpcHNpcyxcbiAgfSxcbiAgJ2J1dHRvbiArIGgxJzoge1xuICAgIG1hcmdpbkxlZnQ6ICcxZW0nLFxuICB9LFxufVxuXG5jb25zdCBiYWNrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICd+IGRpdic6IHtcbiAgICB6SW5kZXg6IDAsXG4gIH0sXG59XG5cbmNvbnN0IHNraXBTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206ICc5cmVtJyxcbiAgdGV4dEFsaWduOiAncmlnaHQnLFxuICBidXR0b246IHtcbiAgICB3aWR0aDogJ2F1dG8nLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICB9LFxufVxuXG5jb25zdCBkZWtzdG9wU3R5bGUgPSB7XG4gICc+IGRpdic6IHtcbiAgICAnPiBidXR0b246bm90KDpkaXNhYmxlZCkgfiBidXR0b246bm90KDpkaXNhYmxlZCksID4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6IHtcbiAgICAgIG1hcmdpbkxlZnQ6ICcwLjc1ZW0nLFxuICAgIH0sXG4gICAgJz4gYnV0dG9uOmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgICBtYXJnaW5MZWZ0OiAnMCcsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzI4OCcsIC8vIGhlaWdodCAxNjJcbn1cblxuY29uc3QgZGVza3RvcENvbnRyb2xzID0ge1xuICBmbGV4V3JhcDogJ3dyYXAnLFxuICAnPiBkaXY6Zmlyc3Qtb2YtdHlwZSc6IHtcbiAgICBmbGV4OiAnMTAwJScsXG4gICAgbWFyZ2luQm90dG9tOiAnMC44OGVtJyxcbiAgfSxcbiAgJz4gYnV0dG9uW2Rpc2FibGVkXSc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZScsXG4gIH0sXG59XG5cbmNvbnN0IGFkQ29udGFpbmVyU3R5bGUgPSB7XG4gIGZsZXhHcm93OiAxLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgJz4gaWZyYW1lJzoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG4gIGJ1dHRvbjoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG59XG5cbmNvbnN0IENvbnRyb2xzQmxvY2sgPSAoe1xuICBvcmRlciA9ICdtb2JpbGUnLFxuICBwbGF5QnV0dG9uLFxuICByZXdpbmRCdXR0b24gPSAnJyxcbiAgZm9yd2FyZEJ1dHRvbiA9ICcnLFxuICBwcmV2aW91c0VwaXNvZGVCdXR0b24gPSAnJyxcbiAgbmV4dEVwaXNvZGVCdXR0b24gPSAnJyxcbn0pID0+XG4gIG9yZGVyID09PSAnZGVza3RvcCcgPyAoXG4gICAgPD5cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtyZXdpbmRCdXR0b259XG4gICAgICB7Zm9yd2FyZEJ1dHRvbn1cbiAgICA8Lz5cbiAgKSA6IChcbiAgICA8PlxuICAgICAge3Jld2luZEJ1dHRvbn1cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtmb3J3YXJkQnV0dG9ufVxuICAgIDwvPlxuICApXG5cbmNvbnN0IERlZmF1bHRMYXlvdXQgPSAoe1xuICB0eXBlID0gJ21vYmlsZScsXG4gIHN0eWxlLFxuICBkaXNwbGF5LFxuICBjb250cm9sc0Rpc3BsYXkgPSBkaXNwbGF5LFxuICBzaXplLFxuICB0aXRsZSA9ICcnLFxuICBjaGFubmVsVGl0bGUgPSAnJyxcbiAgY2hhbm5lbEljb24gPSAnJyxcbiAgdmlkZW8sXG4gIGhhdmVCb3R0b21JdGVtLFxuICBzZWVrYmFyID0gJycsXG4gIGNvbnRyb2xCdXR0b25zLFxuICB2b2x1bWVDb250cm9sLFxuICBmdWxsc2NyZWVuQnV0dG9uLFxuICBiYWNrQnV0dG9uID0gJycsXG4gIGFkU3RhdHVzID0gJycsXG4gIGFkTGluayA9ICcnLFxuICBhZFNraXBCdXR0b24sXG4gIGJhY2tJdGVtcyxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgYmFja1JlZixcbiAgYWRDb250YWluZXJSZWYsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3Qgc2xvdFJlZiA9IHVzZVJlZih7fSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17W1xuICAgICAgICBjb250YWluZXJTdHlsZSxcbiAgICAgICAgdmlkZW9Db250YWluZXJTdHlsZSxcbiAgICAgICAgcmVzcG9uc2l2ZVN0eWxlc1tzaXplXSxcbiAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRla3N0b3BTdHlsZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICBdfVxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7dmlkZW99XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17YmFja1JlZn1cbiAgICAgICAgY3NzPXtbXG4gICAgICAgICAgYmFja1N0eWxlLFxuICAgICAgICAgIGRpc3BsYXkgIT09ICdoaWRkZW4nICYmIChoYXZlQm90dG9tSXRlbSA/IGRyb3BUb3AgOiBkcm9wKSxcbiAgICAgICAgXX1cbiAgICAgID5cbiAgICAgICAge3R5cGUgIT09ICdtb2JpbGUnICYmIGJhY2tJdGVtc31cbiAgICAgICAge2FkU2tpcEJ1dHRvbiAmJiA8ZGl2IGNzcz17c2tpcFN0eWxlfT57YWRTa2lwQnV0dG9ufTwvZGl2Pn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjc3M9e1tyb3dTdHlsZSwgaW5mb1N0eWxlLCBkaXNwbGF5U3R5bGVzW2Rpc3BsYXldXX0+XG4gICAgICAgIHtiYWNrQnV0dG9ufVxuICAgICAgICB7Y2hhbm5lbEljb259XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LnRpdGxlQmFyID0gZWxlbWVudFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxoMT5cbiAgICAgICAgICB7Y2hhbm5lbFRpdGxlfVxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9oMT5cbiAgICAgICAgPGRpdiBjc3M9e2V4cGFuZH0gLz5cbiAgICAgICAge3R5cGUgPT09ICdtb2JpbGUnICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjc3M9e2FkU3RhdHVzID8gaGlkZGVuIDogW2Z1bmN0aW9uQmFyU2xvdFN0eWxlXX1cbiAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgIHNsb3RSZWYuY3VycmVudC5mdW5jdGlvbkJhciA9IGVsZW1lbnRcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FkTGluayAmJiA8ZGl2IGNsYXNzTmFtZT1cInBpbm5lZFwiPnthZExpbmt9PC9kaXY+fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHJlZj17YWRDb250YWluZXJSZWZ9IGNzcz17YWRDb250YWluZXJTdHlsZX0+XG4gICAgICAgIHt0eXBlID09PSAnbW9iaWxlJyAmJiAoXG4gICAgICAgICAgPGRpdiBjc3M9e1tjb250cm9sc1N0eWxlLCBkaXNwbGF5U3R5bGVzW2NvbnRyb2xzRGlzcGxheV1dfT5cbiAgICAgICAgICAgIDxDb250cm9sc0Jsb2NrIG9yZGVyPVwibW9iaWxlXCIgey4uLmNvbnRyb2xCdXR0b25zfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7dHlwZSA9PT0gJ21vYmlsZScgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtcbiAgICAgICAgICAgIGFkU3RhdHVzXG4gICAgICAgICAgICAgID8gaGlkZGVuXG4gICAgICAgICAgICAgIDogW2luZm9CYXJTbG90U3R5bGUsIGNvbnRyb2xzRGlzcGxheVN0eWxlc1tjb250cm9sc0Rpc3BsYXldXVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17W1xuICAgICAgICAgIHJvd1N0eWxlLFxuICAgICAgICAgIHttYXJnaW5Ub3A6ICdhdXRvJ30sXG4gICAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRlc2t0b3BDb250cm9scyxcbiAgICAgICAgICBjb250cm9sc0Rpc3BsYXlTdHlsZXNbY29udHJvbHNEaXNwbGF5XSxcbiAgICAgICAgICB0eXBlICE9PSAnZGVza3RvcCcgJiYgYm90dG9tU3BhY2UsXG4gICAgICAgIF19XG4gICAgICA+XG4gICAgICAgIHtzZWVrYmFyIHx8IDxkaXYgLz59XG4gICAgICAgIHt0eXBlID09PSAnZGVza3RvcCcgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29udHJvbHNCbG9jayBvcmRlcj1cImRlc2t0b3BcIiB7Li4uY29udHJvbEJ1dHRvbnN9IC8+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17YWRTdGF0dXMgPyBoaWRkZW4gOiBbaW5mb0JhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7YWRTdGF0dXMgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBpbm5lZFwiXG4gICAgICAgICAgICBjc3M9e3tmbGV4OiAxLCB0ZXh0U2hhZG93OiAnMnB4IDJweCAxcHggIzAwMCd9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHthZFN0YXR1c31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge3R5cGUgPT09ICdkZXNrdG9wJyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgY3NzPXtleHBhbmR9IC8+XG4gICAgICAgICAgICB7dm9sdW1lQ29udHJvbH1cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXthZFN0YXR1cyA/IGhpZGRlbiA6IFtmdW5jdGlvbkJhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmZ1bmN0aW9uQmFyID0gZWxlbWVudFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge2Z1bGxzY3JlZW5CdXR0b259XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTbG90UHJvdmlkZXIgc2xvdFJlZj17c2xvdFJlZn0+e2NoaWxkcmVufTwvU2xvdFByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRMYXlvdXRcbiJdfQ== */"],ref:containerRef,...rest,children:[video,jsxs("div",{ref:backRef,css:[backStyle,display!=='hidden'&&(haveBottomItem?dropTop:drop),process.env.NODE_ENV==="production"?"":";label:DefaultLayout;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRlZmF1bHRMYXlvdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeVRRIiwiZmlsZSI6IkRlZmF1bHRMYXlvdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5pbXBvcnQge3VzZVJlZn0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1Nsb3RQcm92aWRlcn0gZnJvbSAnLi91aUV4dGVuc2lvbnMnXG5cbmNvbnN0IGV4cGFuZCA9IHtcbiAgbWFyZ2luOiAwLFxuICBmbGV4OiAnMScsXG59XG5cbmNvbnN0IGhpZGRlbiA9IHtkaXNwbGF5OiAnbm9uZSd9XG5cbmNvbnN0IGNvbnRhaW5lclN0eWxlID0ge1xuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgY29sb3I6ICd3aGl0ZScsXG4gIC8vIHByZXZlbnQgYW5pbWF0aW9uIGdsaWNoKGFmdGVyaW1hZ2UpIG9mIGRlc2NlbmRhbnQgZWxlbWVudHNcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgaDE6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udFNpemU6ICcxZW0nLFxuICAgIGxpbmVIZWlnaHQ6ICcxLjVlbScsXG4gIH0sXG4gICdhLCBhOmxpbmssIGE6dmlzaXRlZCc6IHtcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICB9LFxuICBidXR0b246IHtcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICc+IConOiB7XG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzk2JywgLy8gaGVpZ2h0IDU0XG59XG5cbmNvbnN0IHZpZGVvQ29udGFpbmVyU3R5bGUgPSB7XG4gICc+IGRpdjpmaXJzdC1vZi10eXBlJzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogJy0xJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9LFxufVxuXG5jb25zdCBkcm9wID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoXG4gICAgMGRlZyxcbiAgICByZ2JhKDAsMCwwLDAuNSkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IGRyb3BUb3AgPSB7XG4gIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudChcbiAgICAwZGVnLFxuICAgIHJnYmEoMCwwLDAsMCkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IHJlc3BvbnNpdmVTdHlsZXMgPSB7XG4gIGRlc2t0b3A6IHtcbiAgICBmb250U2l6ZTogJzI0cHgnLFxuICB9LCAvLyBhZGQgaWYgbmVjZXNzYXJ5OiBiaWctZGVza3RvcFxufVxuXG5jb25zdCByb3dTdHlsZSA9IHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHdpZHRoOiAnMTAwJScsXG4gIHBhZGRpbmc6ICdjYWxjKDJlbSAtIDE2cHgpJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICc+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSB+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSwgZGl2IH4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6XG4gICAge1xuICAgICAgbWFyZ2luTGVmdDogJzAuNXJlbScsXG4gICAgfSxcbiAgJz4gYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5SaWdodDogJzAuNXJlbScsXG4gIH0sXG59XG5cbi8qIFxuICBIaW50OlxuICAgIGRpc3BsYXlTdHlsZXMgc3BlY2lmaWNpdHkgaXMgaGlnaGVyIHRoZW4gY29udHJvbHNTdHlsZVxuICAgIE5lZWQgdG8gcGF5IGF0dGVudGlvbiB3aGVuIHdlIHJldmlzZSB0aGVzZSBzdHlsZXMuXG4qL1xuY29uc3QgZGlzcGxheVN0eWxlcyA9IHtcbiAgaGlkZGVuOiB7XG4gICAgJz4gZGl2Om5vdCgucGlubmVkKSwgPiBidXR0b246bm90KC5waW5uZWQpLCA+IGgxOm5vdCgucGlubmVkKSc6IHtcbiAgICAgIHpJbmRleDogLTIsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC44cyBlYXNlLW91dCwgei1pbmRleCAwcyAwLjhzJyxcbiAgICB9LFxuICB9LFxuICBzaG93bjoge1xuICAgICc+IGRpdjpub3QoLnBpbm5lZCksID4gYnV0dG9uOm5vdCgucGlubmVkKSwgPiBoMTpub3QoLnBpbm5lZCknOiB7XG4gICAgICB6SW5kZXg6IDEsXG4gICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjNzIGVhc2Utb3V0LCB6LWluZGV4IDBzIDBzJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBjb250cm9sc0Rpc3BsYXlTdHlsZXMgPSB7XG4gIGhpZGRlbjoge1xuICAgIC4uLmRpc3BsYXlTdHlsZXMuaGlkZGVuLFxuICAgICd+IGRpdjpub3QoLnBpbm5lZCknOiBkaXNwbGF5U3R5bGVzLmhpZGRlbixcbiAgfSxcbiAgc2hvd246IHtcbiAgICAuLi5kaXNwbGF5U3R5bGVzLnNob3duLFxuICAgICd+IGRpdic6IGRpc3BsYXlTdHlsZXMuc2hvd24sXG4gIH0sXG59XG5cbmNvbnN0IGNvbnRyb2xzU3R5bGUgPSB7XG4gIG1hcmdpblRvcDogJ2F1dG8nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAnMicsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICc+IGJ1dHRvbic6IHtcbiAgICBtYXJnaW46ICcxZW0nLFxuICAgIHdpZHRoOiAnMS43NWVtJyxcbiAgICBoZWlnaHQ6ICcxLjc1ZW0nLFxuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgICcmOmRpc2FibGVkJzoge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB9LFxuICAgICcmLnBsYXktYnV0dG9uJzoge1xuICAgICAgd2lkdGg6ICczZW0nLFxuICAgICAgaGVpZ2h0OiAnM2VtJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBib3R0b21TcGFjZSA9IHtcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IHBvcnRyYWl0KSc6IHtcbiAgICBwYWRkaW5nQm90dG9tOiAnMmVtJyxcbiAgfSxcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogJzEuM2VtJyxcbiAgfSxcbn1cblxuY29uc3QgZnVuY3Rpb25CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIGJ1dHRvbjoge1xuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIH0sXG59XG5cbmNvbnN0IGluZm9CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG59XG5cbmNvbnN0IHRleHRFbGxpcHNpcyA9IHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxufVxuXG5jb25zdCBpbmZvU3R5bGUgPSB7XG4gIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIGgxOiB7XG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgLi4udGV4dEVsbGlwc2lzLFxuICAgICc+IGRpdic6IHRleHRFbGxpcHNpcyxcbiAgfSxcbiAgJ2J1dHRvbiArIGgxJzoge1xuICAgIG1hcmdpbkxlZnQ6ICcxZW0nLFxuICB9LFxufVxuXG5jb25zdCBiYWNrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICd+IGRpdic6IHtcbiAgICB6SW5kZXg6IDAsXG4gIH0sXG59XG5cbmNvbnN0IHNraXBTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206ICc5cmVtJyxcbiAgdGV4dEFsaWduOiAncmlnaHQnLFxuICBidXR0b246IHtcbiAgICB3aWR0aDogJ2F1dG8nLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICB9LFxufVxuXG5jb25zdCBkZWtzdG9wU3R5bGUgPSB7XG4gICc+IGRpdic6IHtcbiAgICAnPiBidXR0b246bm90KDpkaXNhYmxlZCkgfiBidXR0b246bm90KDpkaXNhYmxlZCksID4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6IHtcbiAgICAgIG1hcmdpbkxlZnQ6ICcwLjc1ZW0nLFxuICAgIH0sXG4gICAgJz4gYnV0dG9uOmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgICBtYXJnaW5MZWZ0OiAnMCcsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzI4OCcsIC8vIGhlaWdodCAxNjJcbn1cblxuY29uc3QgZGVza3RvcENvbnRyb2xzID0ge1xuICBmbGV4V3JhcDogJ3dyYXAnLFxuICAnPiBkaXY6Zmlyc3Qtb2YtdHlwZSc6IHtcbiAgICBmbGV4OiAnMTAwJScsXG4gICAgbWFyZ2luQm90dG9tOiAnMC44OGVtJyxcbiAgfSxcbiAgJz4gYnV0dG9uW2Rpc2FibGVkXSc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZScsXG4gIH0sXG59XG5cbmNvbnN0IGFkQ29udGFpbmVyU3R5bGUgPSB7XG4gIGZsZXhHcm93OiAxLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgJz4gaWZyYW1lJzoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG4gIGJ1dHRvbjoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG59XG5cbmNvbnN0IENvbnRyb2xzQmxvY2sgPSAoe1xuICBvcmRlciA9ICdtb2JpbGUnLFxuICBwbGF5QnV0dG9uLFxuICByZXdpbmRCdXR0b24gPSAnJyxcbiAgZm9yd2FyZEJ1dHRvbiA9ICcnLFxuICBwcmV2aW91c0VwaXNvZGVCdXR0b24gPSAnJyxcbiAgbmV4dEVwaXNvZGVCdXR0b24gPSAnJyxcbn0pID0+XG4gIG9yZGVyID09PSAnZGVza3RvcCcgPyAoXG4gICAgPD5cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtyZXdpbmRCdXR0b259XG4gICAgICB7Zm9yd2FyZEJ1dHRvbn1cbiAgICA8Lz5cbiAgKSA6IChcbiAgICA8PlxuICAgICAge3Jld2luZEJ1dHRvbn1cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtmb3J3YXJkQnV0dG9ufVxuICAgIDwvPlxuICApXG5cbmNvbnN0IERlZmF1bHRMYXlvdXQgPSAoe1xuICB0eXBlID0gJ21vYmlsZScsXG4gIHN0eWxlLFxuICBkaXNwbGF5LFxuICBjb250cm9sc0Rpc3BsYXkgPSBkaXNwbGF5LFxuICBzaXplLFxuICB0aXRsZSA9ICcnLFxuICBjaGFubmVsVGl0bGUgPSAnJyxcbiAgY2hhbm5lbEljb24gPSAnJyxcbiAgdmlkZW8sXG4gIGhhdmVCb3R0b21JdGVtLFxuICBzZWVrYmFyID0gJycsXG4gIGNvbnRyb2xCdXR0b25zLFxuICB2b2x1bWVDb250cm9sLFxuICBmdWxsc2NyZWVuQnV0dG9uLFxuICBiYWNrQnV0dG9uID0gJycsXG4gIGFkU3RhdHVzID0gJycsXG4gIGFkTGluayA9ICcnLFxuICBhZFNraXBCdXR0b24sXG4gIGJhY2tJdGVtcyxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgYmFja1JlZixcbiAgYWRDb250YWluZXJSZWYsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3Qgc2xvdFJlZiA9IHVzZVJlZih7fSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17W1xuICAgICAgICBjb250YWluZXJTdHlsZSxcbiAgICAgICAgdmlkZW9Db250YWluZXJTdHlsZSxcbiAgICAgICAgcmVzcG9uc2l2ZVN0eWxlc1tzaXplXSxcbiAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRla3N0b3BTdHlsZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICBdfVxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7dmlkZW99XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17YmFja1JlZn1cbiAgICAgICAgY3NzPXtbXG4gICAgICAgICAgYmFja1N0eWxlLFxuICAgICAgICAgIGRpc3BsYXkgIT09ICdoaWRkZW4nICYmIChoYXZlQm90dG9tSXRlbSA/IGRyb3BUb3AgOiBkcm9wKSxcbiAgICAgICAgXX1cbiAgICAgID5cbiAgICAgICAge3R5cGUgIT09ICdtb2JpbGUnICYmIGJhY2tJdGVtc31cbiAgICAgICAge2FkU2tpcEJ1dHRvbiAmJiA8ZGl2IGNzcz17c2tpcFN0eWxlfT57YWRTa2lwQnV0dG9ufTwvZGl2Pn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjc3M9e1tyb3dTdHlsZSwgaW5mb1N0eWxlLCBkaXNwbGF5U3R5bGVzW2Rpc3BsYXldXX0+XG4gICAgICAgIHtiYWNrQnV0dG9ufVxuICAgICAgICB7Y2hhbm5lbEljb259XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LnRpdGxlQmFyID0gZWxlbWVudFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxoMT5cbiAgICAgICAgICB7Y2hhbm5lbFRpdGxlfVxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9oMT5cbiAgICAgICAgPGRpdiBjc3M9e2V4cGFuZH0gLz5cbiAgICAgICAge3R5cGUgPT09ICdtb2JpbGUnICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjc3M9e2FkU3RhdHVzID8gaGlkZGVuIDogW2Z1bmN0aW9uQmFyU2xvdFN0eWxlXX1cbiAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgIHNsb3RSZWYuY3VycmVudC5mdW5jdGlvbkJhciA9IGVsZW1lbnRcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FkTGluayAmJiA8ZGl2IGNsYXNzTmFtZT1cInBpbm5lZFwiPnthZExpbmt9PC9kaXY+fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHJlZj17YWRDb250YWluZXJSZWZ9IGNzcz17YWRDb250YWluZXJTdHlsZX0+XG4gICAgICAgIHt0eXBlID09PSAnbW9iaWxlJyAmJiAoXG4gICAgICAgICAgPGRpdiBjc3M9e1tjb250cm9sc1N0eWxlLCBkaXNwbGF5U3R5bGVzW2NvbnRyb2xzRGlzcGxheV1dfT5cbiAgICAgICAgICAgIDxDb250cm9sc0Jsb2NrIG9yZGVyPVwibW9iaWxlXCIgey4uLmNvbnRyb2xCdXR0b25zfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7dHlwZSA9PT0gJ21vYmlsZScgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtcbiAgICAgICAgICAgIGFkU3RhdHVzXG4gICAgICAgICAgICAgID8gaGlkZGVuXG4gICAgICAgICAgICAgIDogW2luZm9CYXJTbG90U3R5bGUsIGNvbnRyb2xzRGlzcGxheVN0eWxlc1tjb250cm9sc0Rpc3BsYXldXVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17W1xuICAgICAgICAgIHJvd1N0eWxlLFxuICAgICAgICAgIHttYXJnaW5Ub3A6ICdhdXRvJ30sXG4gICAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRlc2t0b3BDb250cm9scyxcbiAgICAgICAgICBjb250cm9sc0Rpc3BsYXlTdHlsZXNbY29udHJvbHNEaXNwbGF5XSxcbiAgICAgICAgICB0eXBlICE9PSAnZGVza3RvcCcgJiYgYm90dG9tU3BhY2UsXG4gICAgICAgIF19XG4gICAgICA+XG4gICAgICAgIHtzZWVrYmFyIHx8IDxkaXYgLz59XG4gICAgICAgIHt0eXBlID09PSAnZGVza3RvcCcgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29udHJvbHNCbG9jayBvcmRlcj1cImRlc2t0b3BcIiB7Li4uY29udHJvbEJ1dHRvbnN9IC8+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17YWRTdGF0dXMgPyBoaWRkZW4gOiBbaW5mb0JhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7YWRTdGF0dXMgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBpbm5lZFwiXG4gICAgICAgICAgICBjc3M9e3tmbGV4OiAxLCB0ZXh0U2hhZG93OiAnMnB4IDJweCAxcHggIzAwMCd9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHthZFN0YXR1c31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge3R5cGUgPT09ICdkZXNrdG9wJyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgY3NzPXtleHBhbmR9IC8+XG4gICAgICAgICAgICB7dm9sdW1lQ29udHJvbH1cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXthZFN0YXR1cyA/IGhpZGRlbiA6IFtmdW5jdGlvbkJhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmZ1bmN0aW9uQmFyID0gZWxlbWVudFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge2Z1bGxzY3JlZW5CdXR0b259XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTbG90UHJvdmlkZXIgc2xvdFJlZj17c2xvdFJlZn0+e2NoaWxkcmVufTwvU2xvdFByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRMYXlvdXRcbiJdfQ== */"],children:[type!=='mobile'&&backItems,adSkipButton&&jsx("div",{css:skipStyle,children:adSkipButton})]}),jsxs("div",{css:[rowStyle,infoStyle,displayStyles[display],process.env.NODE_ENV==="production"?"":";label:DefaultLayout;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRlZmF1bHRMYXlvdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaVVXIiwiZmlsZSI6IkRlZmF1bHRMYXlvdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5pbXBvcnQge3VzZVJlZn0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1Nsb3RQcm92aWRlcn0gZnJvbSAnLi91aUV4dGVuc2lvbnMnXG5cbmNvbnN0IGV4cGFuZCA9IHtcbiAgbWFyZ2luOiAwLFxuICBmbGV4OiAnMScsXG59XG5cbmNvbnN0IGhpZGRlbiA9IHtkaXNwbGF5OiAnbm9uZSd9XG5cbmNvbnN0IGNvbnRhaW5lclN0eWxlID0ge1xuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgY29sb3I6ICd3aGl0ZScsXG4gIC8vIHByZXZlbnQgYW5pbWF0aW9uIGdsaWNoKGFmdGVyaW1hZ2UpIG9mIGRlc2NlbmRhbnQgZWxlbWVudHNcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgaDE6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udFNpemU6ICcxZW0nLFxuICAgIGxpbmVIZWlnaHQ6ICcxLjVlbScsXG4gIH0sXG4gICdhLCBhOmxpbmssIGE6dmlzaXRlZCc6IHtcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICB9LFxuICBidXR0b246IHtcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICc+IConOiB7XG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzk2JywgLy8gaGVpZ2h0IDU0XG59XG5cbmNvbnN0IHZpZGVvQ29udGFpbmVyU3R5bGUgPSB7XG4gICc+IGRpdjpmaXJzdC1vZi10eXBlJzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogJy0xJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9LFxufVxuXG5jb25zdCBkcm9wID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoXG4gICAgMGRlZyxcbiAgICByZ2JhKDAsMCwwLDAuNSkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IGRyb3BUb3AgPSB7XG4gIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudChcbiAgICAwZGVnLFxuICAgIHJnYmEoMCwwLDAsMCkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IHJlc3BvbnNpdmVTdHlsZXMgPSB7XG4gIGRlc2t0b3A6IHtcbiAgICBmb250U2l6ZTogJzI0cHgnLFxuICB9LCAvLyBhZGQgaWYgbmVjZXNzYXJ5OiBiaWctZGVza3RvcFxufVxuXG5jb25zdCByb3dTdHlsZSA9IHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHdpZHRoOiAnMTAwJScsXG4gIHBhZGRpbmc6ICdjYWxjKDJlbSAtIDE2cHgpJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICc+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSB+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSwgZGl2IH4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6XG4gICAge1xuICAgICAgbWFyZ2luTGVmdDogJzAuNXJlbScsXG4gICAgfSxcbiAgJz4gYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5SaWdodDogJzAuNXJlbScsXG4gIH0sXG59XG5cbi8qIFxuICBIaW50OlxuICAgIGRpc3BsYXlTdHlsZXMgc3BlY2lmaWNpdHkgaXMgaGlnaGVyIHRoZW4gY29udHJvbHNTdHlsZVxuICAgIE5lZWQgdG8gcGF5IGF0dGVudGlvbiB3aGVuIHdlIHJldmlzZSB0aGVzZSBzdHlsZXMuXG4qL1xuY29uc3QgZGlzcGxheVN0eWxlcyA9IHtcbiAgaGlkZGVuOiB7XG4gICAgJz4gZGl2Om5vdCgucGlubmVkKSwgPiBidXR0b246bm90KC5waW5uZWQpLCA+IGgxOm5vdCgucGlubmVkKSc6IHtcbiAgICAgIHpJbmRleDogLTIsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC44cyBlYXNlLW91dCwgei1pbmRleCAwcyAwLjhzJyxcbiAgICB9LFxuICB9LFxuICBzaG93bjoge1xuICAgICc+IGRpdjpub3QoLnBpbm5lZCksID4gYnV0dG9uOm5vdCgucGlubmVkKSwgPiBoMTpub3QoLnBpbm5lZCknOiB7XG4gICAgICB6SW5kZXg6IDEsXG4gICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjNzIGVhc2Utb3V0LCB6LWluZGV4IDBzIDBzJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBjb250cm9sc0Rpc3BsYXlTdHlsZXMgPSB7XG4gIGhpZGRlbjoge1xuICAgIC4uLmRpc3BsYXlTdHlsZXMuaGlkZGVuLFxuICAgICd+IGRpdjpub3QoLnBpbm5lZCknOiBkaXNwbGF5U3R5bGVzLmhpZGRlbixcbiAgfSxcbiAgc2hvd246IHtcbiAgICAuLi5kaXNwbGF5U3R5bGVzLnNob3duLFxuICAgICd+IGRpdic6IGRpc3BsYXlTdHlsZXMuc2hvd24sXG4gIH0sXG59XG5cbmNvbnN0IGNvbnRyb2xzU3R5bGUgPSB7XG4gIG1hcmdpblRvcDogJ2F1dG8nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAnMicsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICc+IGJ1dHRvbic6IHtcbiAgICBtYXJnaW46ICcxZW0nLFxuICAgIHdpZHRoOiAnMS43NWVtJyxcbiAgICBoZWlnaHQ6ICcxLjc1ZW0nLFxuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgICcmOmRpc2FibGVkJzoge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB9LFxuICAgICcmLnBsYXktYnV0dG9uJzoge1xuICAgICAgd2lkdGg6ICczZW0nLFxuICAgICAgaGVpZ2h0OiAnM2VtJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBib3R0b21TcGFjZSA9IHtcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IHBvcnRyYWl0KSc6IHtcbiAgICBwYWRkaW5nQm90dG9tOiAnMmVtJyxcbiAgfSxcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogJzEuM2VtJyxcbiAgfSxcbn1cblxuY29uc3QgZnVuY3Rpb25CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIGJ1dHRvbjoge1xuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIH0sXG59XG5cbmNvbnN0IGluZm9CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG59XG5cbmNvbnN0IHRleHRFbGxpcHNpcyA9IHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxufVxuXG5jb25zdCBpbmZvU3R5bGUgPSB7XG4gIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIGgxOiB7XG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgLi4udGV4dEVsbGlwc2lzLFxuICAgICc+IGRpdic6IHRleHRFbGxpcHNpcyxcbiAgfSxcbiAgJ2J1dHRvbiArIGgxJzoge1xuICAgIG1hcmdpbkxlZnQ6ICcxZW0nLFxuICB9LFxufVxuXG5jb25zdCBiYWNrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICd+IGRpdic6IHtcbiAgICB6SW5kZXg6IDAsXG4gIH0sXG59XG5cbmNvbnN0IHNraXBTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206ICc5cmVtJyxcbiAgdGV4dEFsaWduOiAncmlnaHQnLFxuICBidXR0b246IHtcbiAgICB3aWR0aDogJ2F1dG8nLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICB9LFxufVxuXG5jb25zdCBkZWtzdG9wU3R5bGUgPSB7XG4gICc+IGRpdic6IHtcbiAgICAnPiBidXR0b246bm90KDpkaXNhYmxlZCkgfiBidXR0b246bm90KDpkaXNhYmxlZCksID4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6IHtcbiAgICAgIG1hcmdpbkxlZnQ6ICcwLjc1ZW0nLFxuICAgIH0sXG4gICAgJz4gYnV0dG9uOmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgICBtYXJnaW5MZWZ0OiAnMCcsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzI4OCcsIC8vIGhlaWdodCAxNjJcbn1cblxuY29uc3QgZGVza3RvcENvbnRyb2xzID0ge1xuICBmbGV4V3JhcDogJ3dyYXAnLFxuICAnPiBkaXY6Zmlyc3Qtb2YtdHlwZSc6IHtcbiAgICBmbGV4OiAnMTAwJScsXG4gICAgbWFyZ2luQm90dG9tOiAnMC44OGVtJyxcbiAgfSxcbiAgJz4gYnV0dG9uW2Rpc2FibGVkXSc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZScsXG4gIH0sXG59XG5cbmNvbnN0IGFkQ29udGFpbmVyU3R5bGUgPSB7XG4gIGZsZXhHcm93OiAxLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgJz4gaWZyYW1lJzoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG4gIGJ1dHRvbjoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG59XG5cbmNvbnN0IENvbnRyb2xzQmxvY2sgPSAoe1xuICBvcmRlciA9ICdtb2JpbGUnLFxuICBwbGF5QnV0dG9uLFxuICByZXdpbmRCdXR0b24gPSAnJyxcbiAgZm9yd2FyZEJ1dHRvbiA9ICcnLFxuICBwcmV2aW91c0VwaXNvZGVCdXR0b24gPSAnJyxcbiAgbmV4dEVwaXNvZGVCdXR0b24gPSAnJyxcbn0pID0+XG4gIG9yZGVyID09PSAnZGVza3RvcCcgPyAoXG4gICAgPD5cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtyZXdpbmRCdXR0b259XG4gICAgICB7Zm9yd2FyZEJ1dHRvbn1cbiAgICA8Lz5cbiAgKSA6IChcbiAgICA8PlxuICAgICAge3Jld2luZEJ1dHRvbn1cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtmb3J3YXJkQnV0dG9ufVxuICAgIDwvPlxuICApXG5cbmNvbnN0IERlZmF1bHRMYXlvdXQgPSAoe1xuICB0eXBlID0gJ21vYmlsZScsXG4gIHN0eWxlLFxuICBkaXNwbGF5LFxuICBjb250cm9sc0Rpc3BsYXkgPSBkaXNwbGF5LFxuICBzaXplLFxuICB0aXRsZSA9ICcnLFxuICBjaGFubmVsVGl0bGUgPSAnJyxcbiAgY2hhbm5lbEljb24gPSAnJyxcbiAgdmlkZW8sXG4gIGhhdmVCb3R0b21JdGVtLFxuICBzZWVrYmFyID0gJycsXG4gIGNvbnRyb2xCdXR0b25zLFxuICB2b2x1bWVDb250cm9sLFxuICBmdWxsc2NyZWVuQnV0dG9uLFxuICBiYWNrQnV0dG9uID0gJycsXG4gIGFkU3RhdHVzID0gJycsXG4gIGFkTGluayA9ICcnLFxuICBhZFNraXBCdXR0b24sXG4gIGJhY2tJdGVtcyxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgYmFja1JlZixcbiAgYWRDb250YWluZXJSZWYsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3Qgc2xvdFJlZiA9IHVzZVJlZih7fSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17W1xuICAgICAgICBjb250YWluZXJTdHlsZSxcbiAgICAgICAgdmlkZW9Db250YWluZXJTdHlsZSxcbiAgICAgICAgcmVzcG9uc2l2ZVN0eWxlc1tzaXplXSxcbiAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRla3N0b3BTdHlsZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICBdfVxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7dmlkZW99XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17YmFja1JlZn1cbiAgICAgICAgY3NzPXtbXG4gICAgICAgICAgYmFja1N0eWxlLFxuICAgICAgICAgIGRpc3BsYXkgIT09ICdoaWRkZW4nICYmIChoYXZlQm90dG9tSXRlbSA/IGRyb3BUb3AgOiBkcm9wKSxcbiAgICAgICAgXX1cbiAgICAgID5cbiAgICAgICAge3R5cGUgIT09ICdtb2JpbGUnICYmIGJhY2tJdGVtc31cbiAgICAgICAge2FkU2tpcEJ1dHRvbiAmJiA8ZGl2IGNzcz17c2tpcFN0eWxlfT57YWRTa2lwQnV0dG9ufTwvZGl2Pn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjc3M9e1tyb3dTdHlsZSwgaW5mb1N0eWxlLCBkaXNwbGF5U3R5bGVzW2Rpc3BsYXldXX0+XG4gICAgICAgIHtiYWNrQnV0dG9ufVxuICAgICAgICB7Y2hhbm5lbEljb259XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LnRpdGxlQmFyID0gZWxlbWVudFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxoMT5cbiAgICAgICAgICB7Y2hhbm5lbFRpdGxlfVxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9oMT5cbiAgICAgICAgPGRpdiBjc3M9e2V4cGFuZH0gLz5cbiAgICAgICAge3R5cGUgPT09ICdtb2JpbGUnICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjc3M9e2FkU3RhdHVzID8gaGlkZGVuIDogW2Z1bmN0aW9uQmFyU2xvdFN0eWxlXX1cbiAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgIHNsb3RSZWYuY3VycmVudC5mdW5jdGlvbkJhciA9IGVsZW1lbnRcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FkTGluayAmJiA8ZGl2IGNsYXNzTmFtZT1cInBpbm5lZFwiPnthZExpbmt9PC9kaXY+fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHJlZj17YWRDb250YWluZXJSZWZ9IGNzcz17YWRDb250YWluZXJTdHlsZX0+XG4gICAgICAgIHt0eXBlID09PSAnbW9iaWxlJyAmJiAoXG4gICAgICAgICAgPGRpdiBjc3M9e1tjb250cm9sc1N0eWxlLCBkaXNwbGF5U3R5bGVzW2NvbnRyb2xzRGlzcGxheV1dfT5cbiAgICAgICAgICAgIDxDb250cm9sc0Jsb2NrIG9yZGVyPVwibW9iaWxlXCIgey4uLmNvbnRyb2xCdXR0b25zfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7dHlwZSA9PT0gJ21vYmlsZScgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtcbiAgICAgICAgICAgIGFkU3RhdHVzXG4gICAgICAgICAgICAgID8gaGlkZGVuXG4gICAgICAgICAgICAgIDogW2luZm9CYXJTbG90U3R5bGUsIGNvbnRyb2xzRGlzcGxheVN0eWxlc1tjb250cm9sc0Rpc3BsYXldXVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17W1xuICAgICAgICAgIHJvd1N0eWxlLFxuICAgICAgICAgIHttYXJnaW5Ub3A6ICdhdXRvJ30sXG4gICAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRlc2t0b3BDb250cm9scyxcbiAgICAgICAgICBjb250cm9sc0Rpc3BsYXlTdHlsZXNbY29udHJvbHNEaXNwbGF5XSxcbiAgICAgICAgICB0eXBlICE9PSAnZGVza3RvcCcgJiYgYm90dG9tU3BhY2UsXG4gICAgICAgIF19XG4gICAgICA+XG4gICAgICAgIHtzZWVrYmFyIHx8IDxkaXYgLz59XG4gICAgICAgIHt0eXBlID09PSAnZGVza3RvcCcgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29udHJvbHNCbG9jayBvcmRlcj1cImRlc2t0b3BcIiB7Li4uY29udHJvbEJ1dHRvbnN9IC8+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17YWRTdGF0dXMgPyBoaWRkZW4gOiBbaW5mb0JhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7YWRTdGF0dXMgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBpbm5lZFwiXG4gICAgICAgICAgICBjc3M9e3tmbGV4OiAxLCB0ZXh0U2hhZG93OiAnMnB4IDJweCAxcHggIzAwMCd9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHthZFN0YXR1c31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge3R5cGUgPT09ICdkZXNrdG9wJyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgY3NzPXtleHBhbmR9IC8+XG4gICAgICAgICAgICB7dm9sdW1lQ29udHJvbH1cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXthZFN0YXR1cyA/IGhpZGRlbiA6IFtmdW5jdGlvbkJhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmZ1bmN0aW9uQmFyID0gZWxlbWVudFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge2Z1bGxzY3JlZW5CdXR0b259XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTbG90UHJvdmlkZXIgc2xvdFJlZj17c2xvdFJlZn0+e2NoaWxkcmVufTwvU2xvdFByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRMYXlvdXRcbiJdfQ== */"],children:[backButton,channelIcon,jsx("div",{ref:element=>{slotRef.current.titleBar=element;}}),jsxs("h1",{children:[channelTitle,title]}),jsx("div",{css:expand}),type==='mobile'&&jsx("div",{css:adStatus?hidden:[functionBarSlotStyle],ref:element=>{slotRef.current.functionBar=element;}}),adLink&&jsx("div",{className:"pinned",children:adLink})]}),jsx("div",{ref:adContainerRef,css:adContainerStyle,children:type==='mobile'&&jsx("div",{css:[controlsStyle,displayStyles[controlsDisplay],process.env.NODE_ENV==="production"?"":";label:DefaultLayout;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRlZmF1bHRMYXlvdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMFZlIiwiZmlsZSI6IkRlZmF1bHRMYXlvdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5pbXBvcnQge3VzZVJlZn0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1Nsb3RQcm92aWRlcn0gZnJvbSAnLi91aUV4dGVuc2lvbnMnXG5cbmNvbnN0IGV4cGFuZCA9IHtcbiAgbWFyZ2luOiAwLFxuICBmbGV4OiAnMScsXG59XG5cbmNvbnN0IGhpZGRlbiA9IHtkaXNwbGF5OiAnbm9uZSd9XG5cbmNvbnN0IGNvbnRhaW5lclN0eWxlID0ge1xuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgY29sb3I6ICd3aGl0ZScsXG4gIC8vIHByZXZlbnQgYW5pbWF0aW9uIGdsaWNoKGFmdGVyaW1hZ2UpIG9mIGRlc2NlbmRhbnQgZWxlbWVudHNcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgaDE6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udFNpemU6ICcxZW0nLFxuICAgIGxpbmVIZWlnaHQ6ICcxLjVlbScsXG4gIH0sXG4gICdhLCBhOmxpbmssIGE6dmlzaXRlZCc6IHtcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICB9LFxuICBidXR0b246IHtcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICc+IConOiB7XG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzk2JywgLy8gaGVpZ2h0IDU0XG59XG5cbmNvbnN0IHZpZGVvQ29udGFpbmVyU3R5bGUgPSB7XG4gICc+IGRpdjpmaXJzdC1vZi10eXBlJzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogJy0xJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9LFxufVxuXG5jb25zdCBkcm9wID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoXG4gICAgMGRlZyxcbiAgICByZ2JhKDAsMCwwLDAuNSkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IGRyb3BUb3AgPSB7XG4gIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudChcbiAgICAwZGVnLFxuICAgIHJnYmEoMCwwLDAsMCkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IHJlc3BvbnNpdmVTdHlsZXMgPSB7XG4gIGRlc2t0b3A6IHtcbiAgICBmb250U2l6ZTogJzI0cHgnLFxuICB9LCAvLyBhZGQgaWYgbmVjZXNzYXJ5OiBiaWctZGVza3RvcFxufVxuXG5jb25zdCByb3dTdHlsZSA9IHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHdpZHRoOiAnMTAwJScsXG4gIHBhZGRpbmc6ICdjYWxjKDJlbSAtIDE2cHgpJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICc+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSB+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSwgZGl2IH4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6XG4gICAge1xuICAgICAgbWFyZ2luTGVmdDogJzAuNXJlbScsXG4gICAgfSxcbiAgJz4gYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5SaWdodDogJzAuNXJlbScsXG4gIH0sXG59XG5cbi8qIFxuICBIaW50OlxuICAgIGRpc3BsYXlTdHlsZXMgc3BlY2lmaWNpdHkgaXMgaGlnaGVyIHRoZW4gY29udHJvbHNTdHlsZVxuICAgIE5lZWQgdG8gcGF5IGF0dGVudGlvbiB3aGVuIHdlIHJldmlzZSB0aGVzZSBzdHlsZXMuXG4qL1xuY29uc3QgZGlzcGxheVN0eWxlcyA9IHtcbiAgaGlkZGVuOiB7XG4gICAgJz4gZGl2Om5vdCgucGlubmVkKSwgPiBidXR0b246bm90KC5waW5uZWQpLCA+IGgxOm5vdCgucGlubmVkKSc6IHtcbiAgICAgIHpJbmRleDogLTIsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC44cyBlYXNlLW91dCwgei1pbmRleCAwcyAwLjhzJyxcbiAgICB9LFxuICB9LFxuICBzaG93bjoge1xuICAgICc+IGRpdjpub3QoLnBpbm5lZCksID4gYnV0dG9uOm5vdCgucGlubmVkKSwgPiBoMTpub3QoLnBpbm5lZCknOiB7XG4gICAgICB6SW5kZXg6IDEsXG4gICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjNzIGVhc2Utb3V0LCB6LWluZGV4IDBzIDBzJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBjb250cm9sc0Rpc3BsYXlTdHlsZXMgPSB7XG4gIGhpZGRlbjoge1xuICAgIC4uLmRpc3BsYXlTdHlsZXMuaGlkZGVuLFxuICAgICd+IGRpdjpub3QoLnBpbm5lZCknOiBkaXNwbGF5U3R5bGVzLmhpZGRlbixcbiAgfSxcbiAgc2hvd246IHtcbiAgICAuLi5kaXNwbGF5U3R5bGVzLnNob3duLFxuICAgICd+IGRpdic6IGRpc3BsYXlTdHlsZXMuc2hvd24sXG4gIH0sXG59XG5cbmNvbnN0IGNvbnRyb2xzU3R5bGUgPSB7XG4gIG1hcmdpblRvcDogJ2F1dG8nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAnMicsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICc+IGJ1dHRvbic6IHtcbiAgICBtYXJnaW46ICcxZW0nLFxuICAgIHdpZHRoOiAnMS43NWVtJyxcbiAgICBoZWlnaHQ6ICcxLjc1ZW0nLFxuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgICcmOmRpc2FibGVkJzoge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB9LFxuICAgICcmLnBsYXktYnV0dG9uJzoge1xuICAgICAgd2lkdGg6ICczZW0nLFxuICAgICAgaGVpZ2h0OiAnM2VtJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBib3R0b21TcGFjZSA9IHtcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IHBvcnRyYWl0KSc6IHtcbiAgICBwYWRkaW5nQm90dG9tOiAnMmVtJyxcbiAgfSxcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogJzEuM2VtJyxcbiAgfSxcbn1cblxuY29uc3QgZnVuY3Rpb25CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIGJ1dHRvbjoge1xuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIH0sXG59XG5cbmNvbnN0IGluZm9CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG59XG5cbmNvbnN0IHRleHRFbGxpcHNpcyA9IHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxufVxuXG5jb25zdCBpbmZvU3R5bGUgPSB7XG4gIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIGgxOiB7XG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgLi4udGV4dEVsbGlwc2lzLFxuICAgICc+IGRpdic6IHRleHRFbGxpcHNpcyxcbiAgfSxcbiAgJ2J1dHRvbiArIGgxJzoge1xuICAgIG1hcmdpbkxlZnQ6ICcxZW0nLFxuICB9LFxufVxuXG5jb25zdCBiYWNrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICd+IGRpdic6IHtcbiAgICB6SW5kZXg6IDAsXG4gIH0sXG59XG5cbmNvbnN0IHNraXBTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206ICc5cmVtJyxcbiAgdGV4dEFsaWduOiAncmlnaHQnLFxuICBidXR0b246IHtcbiAgICB3aWR0aDogJ2F1dG8nLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICB9LFxufVxuXG5jb25zdCBkZWtzdG9wU3R5bGUgPSB7XG4gICc+IGRpdic6IHtcbiAgICAnPiBidXR0b246bm90KDpkaXNhYmxlZCkgfiBidXR0b246bm90KDpkaXNhYmxlZCksID4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6IHtcbiAgICAgIG1hcmdpbkxlZnQ6ICcwLjc1ZW0nLFxuICAgIH0sXG4gICAgJz4gYnV0dG9uOmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgICBtYXJnaW5MZWZ0OiAnMCcsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzI4OCcsIC8vIGhlaWdodCAxNjJcbn1cblxuY29uc3QgZGVza3RvcENvbnRyb2xzID0ge1xuICBmbGV4V3JhcDogJ3dyYXAnLFxuICAnPiBkaXY6Zmlyc3Qtb2YtdHlwZSc6IHtcbiAgICBmbGV4OiAnMTAwJScsXG4gICAgbWFyZ2luQm90dG9tOiAnMC44OGVtJyxcbiAgfSxcbiAgJz4gYnV0dG9uW2Rpc2FibGVkXSc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZScsXG4gIH0sXG59XG5cbmNvbnN0IGFkQ29udGFpbmVyU3R5bGUgPSB7XG4gIGZsZXhHcm93OiAxLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgJz4gaWZyYW1lJzoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG4gIGJ1dHRvbjoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG59XG5cbmNvbnN0IENvbnRyb2xzQmxvY2sgPSAoe1xuICBvcmRlciA9ICdtb2JpbGUnLFxuICBwbGF5QnV0dG9uLFxuICByZXdpbmRCdXR0b24gPSAnJyxcbiAgZm9yd2FyZEJ1dHRvbiA9ICcnLFxuICBwcmV2aW91c0VwaXNvZGVCdXR0b24gPSAnJyxcbiAgbmV4dEVwaXNvZGVCdXR0b24gPSAnJyxcbn0pID0+XG4gIG9yZGVyID09PSAnZGVza3RvcCcgPyAoXG4gICAgPD5cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtyZXdpbmRCdXR0b259XG4gICAgICB7Zm9yd2FyZEJ1dHRvbn1cbiAgICA8Lz5cbiAgKSA6IChcbiAgICA8PlxuICAgICAge3Jld2luZEJ1dHRvbn1cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtmb3J3YXJkQnV0dG9ufVxuICAgIDwvPlxuICApXG5cbmNvbnN0IERlZmF1bHRMYXlvdXQgPSAoe1xuICB0eXBlID0gJ21vYmlsZScsXG4gIHN0eWxlLFxuICBkaXNwbGF5LFxuICBjb250cm9sc0Rpc3BsYXkgPSBkaXNwbGF5LFxuICBzaXplLFxuICB0aXRsZSA9ICcnLFxuICBjaGFubmVsVGl0bGUgPSAnJyxcbiAgY2hhbm5lbEljb24gPSAnJyxcbiAgdmlkZW8sXG4gIGhhdmVCb3R0b21JdGVtLFxuICBzZWVrYmFyID0gJycsXG4gIGNvbnRyb2xCdXR0b25zLFxuICB2b2x1bWVDb250cm9sLFxuICBmdWxsc2NyZWVuQnV0dG9uLFxuICBiYWNrQnV0dG9uID0gJycsXG4gIGFkU3RhdHVzID0gJycsXG4gIGFkTGluayA9ICcnLFxuICBhZFNraXBCdXR0b24sXG4gIGJhY2tJdGVtcyxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgYmFja1JlZixcbiAgYWRDb250YWluZXJSZWYsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3Qgc2xvdFJlZiA9IHVzZVJlZih7fSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17W1xuICAgICAgICBjb250YWluZXJTdHlsZSxcbiAgICAgICAgdmlkZW9Db250YWluZXJTdHlsZSxcbiAgICAgICAgcmVzcG9uc2l2ZVN0eWxlc1tzaXplXSxcbiAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRla3N0b3BTdHlsZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICBdfVxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7dmlkZW99XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17YmFja1JlZn1cbiAgICAgICAgY3NzPXtbXG4gICAgICAgICAgYmFja1N0eWxlLFxuICAgICAgICAgIGRpc3BsYXkgIT09ICdoaWRkZW4nICYmIChoYXZlQm90dG9tSXRlbSA/IGRyb3BUb3AgOiBkcm9wKSxcbiAgICAgICAgXX1cbiAgICAgID5cbiAgICAgICAge3R5cGUgIT09ICdtb2JpbGUnICYmIGJhY2tJdGVtc31cbiAgICAgICAge2FkU2tpcEJ1dHRvbiAmJiA8ZGl2IGNzcz17c2tpcFN0eWxlfT57YWRTa2lwQnV0dG9ufTwvZGl2Pn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjc3M9e1tyb3dTdHlsZSwgaW5mb1N0eWxlLCBkaXNwbGF5U3R5bGVzW2Rpc3BsYXldXX0+XG4gICAgICAgIHtiYWNrQnV0dG9ufVxuICAgICAgICB7Y2hhbm5lbEljb259XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LnRpdGxlQmFyID0gZWxlbWVudFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxoMT5cbiAgICAgICAgICB7Y2hhbm5lbFRpdGxlfVxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9oMT5cbiAgICAgICAgPGRpdiBjc3M9e2V4cGFuZH0gLz5cbiAgICAgICAge3R5cGUgPT09ICdtb2JpbGUnICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjc3M9e2FkU3RhdHVzID8gaGlkZGVuIDogW2Z1bmN0aW9uQmFyU2xvdFN0eWxlXX1cbiAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgIHNsb3RSZWYuY3VycmVudC5mdW5jdGlvbkJhciA9IGVsZW1lbnRcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FkTGluayAmJiA8ZGl2IGNsYXNzTmFtZT1cInBpbm5lZFwiPnthZExpbmt9PC9kaXY+fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHJlZj17YWRDb250YWluZXJSZWZ9IGNzcz17YWRDb250YWluZXJTdHlsZX0+XG4gICAgICAgIHt0eXBlID09PSAnbW9iaWxlJyAmJiAoXG4gICAgICAgICAgPGRpdiBjc3M9e1tjb250cm9sc1N0eWxlLCBkaXNwbGF5U3R5bGVzW2NvbnRyb2xzRGlzcGxheV1dfT5cbiAgICAgICAgICAgIDxDb250cm9sc0Jsb2NrIG9yZGVyPVwibW9iaWxlXCIgey4uLmNvbnRyb2xCdXR0b25zfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7dHlwZSA9PT0gJ21vYmlsZScgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtcbiAgICAgICAgICAgIGFkU3RhdHVzXG4gICAgICAgICAgICAgID8gaGlkZGVuXG4gICAgICAgICAgICAgIDogW2luZm9CYXJTbG90U3R5bGUsIGNvbnRyb2xzRGlzcGxheVN0eWxlc1tjb250cm9sc0Rpc3BsYXldXVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17W1xuICAgICAgICAgIHJvd1N0eWxlLFxuICAgICAgICAgIHttYXJnaW5Ub3A6ICdhdXRvJ30sXG4gICAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRlc2t0b3BDb250cm9scyxcbiAgICAgICAgICBjb250cm9sc0Rpc3BsYXlTdHlsZXNbY29udHJvbHNEaXNwbGF5XSxcbiAgICAgICAgICB0eXBlICE9PSAnZGVza3RvcCcgJiYgYm90dG9tU3BhY2UsXG4gICAgICAgIF19XG4gICAgICA+XG4gICAgICAgIHtzZWVrYmFyIHx8IDxkaXYgLz59XG4gICAgICAgIHt0eXBlID09PSAnZGVza3RvcCcgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29udHJvbHNCbG9jayBvcmRlcj1cImRlc2t0b3BcIiB7Li4uY29udHJvbEJ1dHRvbnN9IC8+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17YWRTdGF0dXMgPyBoaWRkZW4gOiBbaW5mb0JhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7YWRTdGF0dXMgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBpbm5lZFwiXG4gICAgICAgICAgICBjc3M9e3tmbGV4OiAxLCB0ZXh0U2hhZG93OiAnMnB4IDJweCAxcHggIzAwMCd9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHthZFN0YXR1c31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge3R5cGUgPT09ICdkZXNrdG9wJyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgY3NzPXtleHBhbmR9IC8+XG4gICAgICAgICAgICB7dm9sdW1lQ29udHJvbH1cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXthZFN0YXR1cyA/IGhpZGRlbiA6IFtmdW5jdGlvbkJhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmZ1bmN0aW9uQmFyID0gZWxlbWVudFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge2Z1bGxzY3JlZW5CdXR0b259XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTbG90UHJvdmlkZXIgc2xvdFJlZj17c2xvdFJlZn0+e2NoaWxkcmVufTwvU2xvdFByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRMYXlvdXRcbiJdfQ== */"],children:jsx(ControlsBlock,{order:"mobile",...controlButtons})})}),type==='mobile'&&jsx("div",{css:adStatus?hidden:[infoBarSlotStyle,controlsDisplayStyles[controlsDisplay]],ref:element=>{slotRef.current.infoBar=element;}}),jsxs("div",{css:[rowStyle,"margin-top:auto;",type==='desktop'&&desktopControls,controlsDisplayStyles[controlsDisplay],type!=='desktop'&&bottomSpace,process.env.NODE_ENV==="production"?"":";label:DefaultLayout;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRlZmF1bHRMYXlvdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNFdRIiwiZmlsZSI6IkRlZmF1bHRMYXlvdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5pbXBvcnQge3VzZVJlZn0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1Nsb3RQcm92aWRlcn0gZnJvbSAnLi91aUV4dGVuc2lvbnMnXG5cbmNvbnN0IGV4cGFuZCA9IHtcbiAgbWFyZ2luOiAwLFxuICBmbGV4OiAnMScsXG59XG5cbmNvbnN0IGhpZGRlbiA9IHtkaXNwbGF5OiAnbm9uZSd9XG5cbmNvbnN0IGNvbnRhaW5lclN0eWxlID0ge1xuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgY29sb3I6ICd3aGl0ZScsXG4gIC8vIHByZXZlbnQgYW5pbWF0aW9uIGdsaWNoKGFmdGVyaW1hZ2UpIG9mIGRlc2NlbmRhbnQgZWxlbWVudHNcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgaDE6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udFNpemU6ICcxZW0nLFxuICAgIGxpbmVIZWlnaHQ6ICcxLjVlbScsXG4gIH0sXG4gICdhLCBhOmxpbmssIGE6dmlzaXRlZCc6IHtcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICB9LFxuICBidXR0b246IHtcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICc+IConOiB7XG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzk2JywgLy8gaGVpZ2h0IDU0XG59XG5cbmNvbnN0IHZpZGVvQ29udGFpbmVyU3R5bGUgPSB7XG4gICc+IGRpdjpmaXJzdC1vZi10eXBlJzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogJy0xJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9LFxufVxuXG5jb25zdCBkcm9wID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoXG4gICAgMGRlZyxcbiAgICByZ2JhKDAsMCwwLDAuNSkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IGRyb3BUb3AgPSB7XG4gIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudChcbiAgICAwZGVnLFxuICAgIHJnYmEoMCwwLDAsMCkgMCxcbiAgICByZ2JhKDAsMCwwLDApIDhyZW0gY2FsYygxMDAlIC0gOHJlbSksXG4gICAgcmdiYSgwLDAsMCwwLjUpIDEwMCVcbiAgKWAsXG59XG5cbmNvbnN0IHJlc3BvbnNpdmVTdHlsZXMgPSB7XG4gIGRlc2t0b3A6IHtcbiAgICBmb250U2l6ZTogJzI0cHgnLFxuICB9LCAvLyBhZGQgaWYgbmVjZXNzYXJ5OiBiaWctZGVza3RvcFxufVxuXG5jb25zdCByb3dTdHlsZSA9IHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHdpZHRoOiAnMTAwJScsXG4gIHBhZGRpbmc6ICdjYWxjKDJlbSAtIDE2cHgpJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICc+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSB+IGJ1dHRvbjpub3QoOmRpc2FibGVkKSwgZGl2IH4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6XG4gICAge1xuICAgICAgbWFyZ2luTGVmdDogJzAuNXJlbScsXG4gICAgfSxcbiAgJz4gYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5SaWdodDogJzAuNXJlbScsXG4gIH0sXG59XG5cbi8qIFxuICBIaW50OlxuICAgIGRpc3BsYXlTdHlsZXMgc3BlY2lmaWNpdHkgaXMgaGlnaGVyIHRoZW4gY29udHJvbHNTdHlsZVxuICAgIE5lZWQgdG8gcGF5IGF0dGVudGlvbiB3aGVuIHdlIHJldmlzZSB0aGVzZSBzdHlsZXMuXG4qL1xuY29uc3QgZGlzcGxheVN0eWxlcyA9IHtcbiAgaGlkZGVuOiB7XG4gICAgJz4gZGl2Om5vdCgucGlubmVkKSwgPiBidXR0b246bm90KC5waW5uZWQpLCA+IGgxOm5vdCgucGlubmVkKSc6IHtcbiAgICAgIHpJbmRleDogLTIsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC44cyBlYXNlLW91dCwgei1pbmRleCAwcyAwLjhzJyxcbiAgICB9LFxuICB9LFxuICBzaG93bjoge1xuICAgICc+IGRpdjpub3QoLnBpbm5lZCksID4gYnV0dG9uOm5vdCgucGlubmVkKSwgPiBoMTpub3QoLnBpbm5lZCknOiB7XG4gICAgICB6SW5kZXg6IDEsXG4gICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjNzIGVhc2Utb3V0LCB6LWluZGV4IDBzIDBzJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBjb250cm9sc0Rpc3BsYXlTdHlsZXMgPSB7XG4gIGhpZGRlbjoge1xuICAgIC4uLmRpc3BsYXlTdHlsZXMuaGlkZGVuLFxuICAgICd+IGRpdjpub3QoLnBpbm5lZCknOiBkaXNwbGF5U3R5bGVzLmhpZGRlbixcbiAgfSxcbiAgc2hvd246IHtcbiAgICAuLi5kaXNwbGF5U3R5bGVzLnNob3duLFxuICAgICd+IGRpdic6IGRpc3BsYXlTdHlsZXMuc2hvd24sXG4gIH0sXG59XG5cbmNvbnN0IGNvbnRyb2xzU3R5bGUgPSB7XG4gIG1hcmdpblRvcDogJ2F1dG8nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAnMicsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICc+IGJ1dHRvbic6IHtcbiAgICBtYXJnaW46ICcxZW0nLFxuICAgIHdpZHRoOiAnMS43NWVtJyxcbiAgICBoZWlnaHQ6ICcxLjc1ZW0nLFxuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgICcmOmRpc2FibGVkJzoge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB9LFxuICAgICcmLnBsYXktYnV0dG9uJzoge1xuICAgICAgd2lkdGg6ICczZW0nLFxuICAgICAgaGVpZ2h0OiAnM2VtJyxcbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBib3R0b21TcGFjZSA9IHtcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IHBvcnRyYWl0KSc6IHtcbiAgICBwYWRkaW5nQm90dG9tOiAnMmVtJyxcbiAgfSxcbiAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogJzEuM2VtJyxcbiAgfSxcbn1cblxuY29uc3QgZnVuY3Rpb25CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIGJ1dHRvbjoge1xuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG4gIH0sXG59XG5cbmNvbnN0IGluZm9CYXJTbG90U3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogJzAuNzVlbScsXG59XG5cbmNvbnN0IHRleHRFbGxpcHNpcyA9IHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxufVxuXG5jb25zdCBpbmZvU3R5bGUgPSB7XG4gIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIGgxOiB7XG4gICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgLi4udGV4dEVsbGlwc2lzLFxuICAgICc+IGRpdic6IHRleHRFbGxpcHNpcyxcbiAgfSxcbiAgJ2J1dHRvbiArIGgxJzoge1xuICAgIG1hcmdpbkxlZnQ6ICcxZW0nLFxuICB9LFxufVxuXG5jb25zdCBiYWNrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICd+IGRpdic6IHtcbiAgICB6SW5kZXg6IDAsXG4gIH0sXG59XG5cbmNvbnN0IHNraXBTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206ICc5cmVtJyxcbiAgdGV4dEFsaWduOiAncmlnaHQnLFxuICBidXR0b246IHtcbiAgICB3aWR0aDogJ2F1dG8nLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICB9LFxufVxuXG5jb25zdCBkZWtzdG9wU3R5bGUgPSB7XG4gICc+IGRpdic6IHtcbiAgICAnPiBidXR0b246bm90KDpkaXNhYmxlZCkgfiBidXR0b246bm90KDpkaXNhYmxlZCksID4gYnV0dG9uOmxhc3Qtb2YtdHlwZSc6IHtcbiAgICAgIG1hcmdpbkxlZnQ6ICcwLjc1ZW0nLFxuICAgIH0sXG4gICAgJz4gYnV0dG9uOmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgICBtYXJnaW5MZWZ0OiAnMCcsXG4gICAgfSxcbiAgfSxcbiAgJy0tdGh1bWJuYWlsLXdpZHRoJzogJzI4OCcsIC8vIGhlaWdodCAxNjJcbn1cblxuY29uc3QgZGVza3RvcENvbnRyb2xzID0ge1xuICBmbGV4V3JhcDogJ3dyYXAnLFxuICAnPiBkaXY6Zmlyc3Qtb2YtdHlwZSc6IHtcbiAgICBmbGV4OiAnMTAwJScsXG4gICAgbWFyZ2luQm90dG9tOiAnMC44OGVtJyxcbiAgfSxcbiAgJz4gYnV0dG9uW2Rpc2FibGVkXSc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZScsXG4gIH0sXG59XG5cbmNvbnN0IGFkQ29udGFpbmVyU3R5bGUgPSB7XG4gIGZsZXhHcm93OiAxLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgJz4gaWZyYW1lJzoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG4gIGJ1dHRvbjoge3BvaW50ZXJFdmVudHM6ICdhdXRvJ30sXG59XG5cbmNvbnN0IENvbnRyb2xzQmxvY2sgPSAoe1xuICBvcmRlciA9ICdtb2JpbGUnLFxuICBwbGF5QnV0dG9uLFxuICByZXdpbmRCdXR0b24gPSAnJyxcbiAgZm9yd2FyZEJ1dHRvbiA9ICcnLFxuICBwcmV2aW91c0VwaXNvZGVCdXR0b24gPSAnJyxcbiAgbmV4dEVwaXNvZGVCdXR0b24gPSAnJyxcbn0pID0+XG4gIG9yZGVyID09PSAnZGVza3RvcCcgPyAoXG4gICAgPD5cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtyZXdpbmRCdXR0b259XG4gICAgICB7Zm9yd2FyZEJ1dHRvbn1cbiAgICA8Lz5cbiAgKSA6IChcbiAgICA8PlxuICAgICAge3Jld2luZEJ1dHRvbn1cbiAgICAgIHtwcmV2aW91c0VwaXNvZGVCdXR0b259XG4gICAgICB7cGxheUJ1dHRvbn1cbiAgICAgIHtuZXh0RXBpc29kZUJ1dHRvbn1cbiAgICAgIHtmb3J3YXJkQnV0dG9ufVxuICAgIDwvPlxuICApXG5cbmNvbnN0IERlZmF1bHRMYXlvdXQgPSAoe1xuICB0eXBlID0gJ21vYmlsZScsXG4gIHN0eWxlLFxuICBkaXNwbGF5LFxuICBjb250cm9sc0Rpc3BsYXkgPSBkaXNwbGF5LFxuICBzaXplLFxuICB0aXRsZSA9ICcnLFxuICBjaGFubmVsVGl0bGUgPSAnJyxcbiAgY2hhbm5lbEljb24gPSAnJyxcbiAgdmlkZW8sXG4gIGhhdmVCb3R0b21JdGVtLFxuICBzZWVrYmFyID0gJycsXG4gIGNvbnRyb2xCdXR0b25zLFxuICB2b2x1bWVDb250cm9sLFxuICBmdWxsc2NyZWVuQnV0dG9uLFxuICBiYWNrQnV0dG9uID0gJycsXG4gIGFkU3RhdHVzID0gJycsXG4gIGFkTGluayA9ICcnLFxuICBhZFNraXBCdXR0b24sXG4gIGJhY2tJdGVtcyxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgYmFja1JlZixcbiAgYWRDb250YWluZXJSZWYsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3Qgc2xvdFJlZiA9IHVzZVJlZih7fSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17W1xuICAgICAgICBjb250YWluZXJTdHlsZSxcbiAgICAgICAgdmlkZW9Db250YWluZXJTdHlsZSxcbiAgICAgICAgcmVzcG9uc2l2ZVN0eWxlc1tzaXplXSxcbiAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRla3N0b3BTdHlsZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICBdfVxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7dmlkZW99XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17YmFja1JlZn1cbiAgICAgICAgY3NzPXtbXG4gICAgICAgICAgYmFja1N0eWxlLFxuICAgICAgICAgIGRpc3BsYXkgIT09ICdoaWRkZW4nICYmIChoYXZlQm90dG9tSXRlbSA/IGRyb3BUb3AgOiBkcm9wKSxcbiAgICAgICAgXX1cbiAgICAgID5cbiAgICAgICAge3R5cGUgIT09ICdtb2JpbGUnICYmIGJhY2tJdGVtc31cbiAgICAgICAge2FkU2tpcEJ1dHRvbiAmJiA8ZGl2IGNzcz17c2tpcFN0eWxlfT57YWRTa2lwQnV0dG9ufTwvZGl2Pn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjc3M9e1tyb3dTdHlsZSwgaW5mb1N0eWxlLCBkaXNwbGF5U3R5bGVzW2Rpc3BsYXldXX0+XG4gICAgICAgIHtiYWNrQnV0dG9ufVxuICAgICAgICB7Y2hhbm5lbEljb259XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LnRpdGxlQmFyID0gZWxlbWVudFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxoMT5cbiAgICAgICAgICB7Y2hhbm5lbFRpdGxlfVxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9oMT5cbiAgICAgICAgPGRpdiBjc3M9e2V4cGFuZH0gLz5cbiAgICAgICAge3R5cGUgPT09ICdtb2JpbGUnICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjc3M9e2FkU3RhdHVzID8gaGlkZGVuIDogW2Z1bmN0aW9uQmFyU2xvdFN0eWxlXX1cbiAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgIHNsb3RSZWYuY3VycmVudC5mdW5jdGlvbkJhciA9IGVsZW1lbnRcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FkTGluayAmJiA8ZGl2IGNsYXNzTmFtZT1cInBpbm5lZFwiPnthZExpbmt9PC9kaXY+fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHJlZj17YWRDb250YWluZXJSZWZ9IGNzcz17YWRDb250YWluZXJTdHlsZX0+XG4gICAgICAgIHt0eXBlID09PSAnbW9iaWxlJyAmJiAoXG4gICAgICAgICAgPGRpdiBjc3M9e1tjb250cm9sc1N0eWxlLCBkaXNwbGF5U3R5bGVzW2NvbnRyb2xzRGlzcGxheV1dfT5cbiAgICAgICAgICAgIDxDb250cm9sc0Jsb2NrIG9yZGVyPVwibW9iaWxlXCIgey4uLmNvbnRyb2xCdXR0b25zfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7dHlwZSA9PT0gJ21vYmlsZScgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtcbiAgICAgICAgICAgIGFkU3RhdHVzXG4gICAgICAgICAgICAgID8gaGlkZGVuXG4gICAgICAgICAgICAgIDogW2luZm9CYXJTbG90U3R5bGUsIGNvbnRyb2xzRGlzcGxheVN0eWxlc1tjb250cm9sc0Rpc3BsYXldXVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17W1xuICAgICAgICAgIHJvd1N0eWxlLFxuICAgICAgICAgIHttYXJnaW5Ub3A6ICdhdXRvJ30sXG4gICAgICAgICAgdHlwZSA9PT0gJ2Rlc2t0b3AnICYmIGRlc2t0b3BDb250cm9scyxcbiAgICAgICAgICBjb250cm9sc0Rpc3BsYXlTdHlsZXNbY29udHJvbHNEaXNwbGF5XSxcbiAgICAgICAgICB0eXBlICE9PSAnZGVza3RvcCcgJiYgYm90dG9tU3BhY2UsXG4gICAgICAgIF19XG4gICAgICA+XG4gICAgICAgIHtzZWVrYmFyIHx8IDxkaXYgLz59XG4gICAgICAgIHt0eXBlID09PSAnZGVza3RvcCcgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29udHJvbHNCbG9jayBvcmRlcj1cImRlc2t0b3BcIiB7Li4uY29udHJvbEJ1dHRvbnN9IC8+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17YWRTdGF0dXMgPyBoaWRkZW4gOiBbaW5mb0JhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmluZm9CYXIgPSBlbGVtZW50XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7YWRTdGF0dXMgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBpbm5lZFwiXG4gICAgICAgICAgICBjc3M9e3tmbGV4OiAxLCB0ZXh0U2hhZG93OiAnMnB4IDJweCAxcHggIzAwMCd9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHthZFN0YXR1c31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge3R5cGUgPT09ICdkZXNrdG9wJyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgY3NzPXtleHBhbmR9IC8+XG4gICAgICAgICAgICB7dm9sdW1lQ29udHJvbH1cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXthZFN0YXR1cyA/IGhpZGRlbiA6IFtmdW5jdGlvbkJhclNsb3RTdHlsZV19XG4gICAgICAgICAgICAgIHJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgc2xvdFJlZi5jdXJyZW50LmZ1bmN0aW9uQmFyID0gZWxlbWVudFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge2Z1bGxzY3JlZW5CdXR0b259XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTbG90UHJvdmlkZXIgc2xvdFJlZj17c2xvdFJlZn0+e2NoaWxkcmVufTwvU2xvdFByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRMYXlvdXRcbiJdfQ== */"],children:[seekbar||jsx("div",{}),type==='desktop'&&jsxs(Fragment$1,{children:[jsx(ControlsBlock,{order:"desktop",...controlButtons}),jsx("div",{css:adStatus?hidden:[infoBarSlotStyle],ref:element=>{slotRef.current.infoBar=element;}})]}),adStatus&&jsx("div",{className:"pinned",css:_ref$6,children:adStatus}),type==='desktop'&&jsxs(Fragment$1,{children:[jsx("div",{css:expand}),volumeControl,jsx("div",{css:adStatus?hidden:[functionBarSlotStyle],ref:element=>{slotRef.current.functionBar=element;}})]}),fullscreenButton]}),jsx(SlotProvider,{slotRef:slotRef,children:children})]});};const getPointerData=event=>{var _event$touches,_event$changedTouches;const{pageX:x,pageY:y}=((_event$touches=event.touches)===null||_event$touches===void 0?void 0:_event$touches[0])||((_event$changedTouches=event.changedTouches)===null||_event$changedTouches===void 0?void 0:_event$changedTouches[0])||event;const{width,left}=event.currentTarget.getBoundingClientRect();return {x,y,width,left};};function _EMOTION_STRINGIFIED_CSS_ERROR__$5(){return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).";}const style$8={position:'relative',height:'100%',display:'flex',alignItems:'center',cursor:'pointer',userSelect:'none',touchAction:'none','-webkit-tap-highlight-color':'transparent'};const disabledStyle={pointerEvents:'none'};const railStyle={position:'relative',flex:'100%',height:'4px',overflow:'hidden',background:'rgba(255, 255, 255, 0.2)','> div':{position:'absolute',top:'0',left:'0',width:'100%',height:'100%'}};const markStyle={position:'absolute',height:railStyle.height,width:'4px',transform:'translateX(-50%)',backgroundColor:'#ff9835'};const thumbStyle={position:'absolute',top:'50%',height:'14px',width:'14px',borderRadius:'100%',backgroundColor:'#fff',boxShadow:'0 2px 2px 0 rgba(0, 0, 0, 0.5)',transform:'translate(-50%, -50%)'};const getSliderValue=({x,left,width})=>Math.max(0,Math.min((x-left)/width,1));const debouncedPointerHandlers=({state,onMove,onLeave})=>{const emit=()=>{if(!state.scheduled){return;}if(state.type==='leave'){onLeave===null||onLeave===void 0?void 0:onLeave(state.event,state);}else {onMove(state.event,state);}state.scheduled=false;};const schedule=()=>{if(state.scheduled){return;}state.scheduled=true;requestAnimationFrame(emit);};return {onPointerMove:event=>{var _event$touches;const type=event.buttons>0||((_event$touches=event.touches)===null||_event$touches===void 0?void 0:_event$touches.length)>0?'change':'move';Object.assign(state,{event,type,...getPointerData(event)});schedule();},onPointerLeave:event=>{const type='leave';Object.assign(state,{event,type});schedule();},emit};};const eventHandlers=({onPointerDown,onPointerMove,onPointerLeave,onPointerUp})=>({onPointerDown,onPointerMove,onPointerLeave,onPointerUp,onTouchStart:onPointerDown,onTouchMove:onPointerMove,onTouchEnd:event=>{onPointerLeave(event);onPointerUp(event);}});// TODO align with material ui more, move special handling of pointer events
|
|
265
|
+
var _ref$5=process.env.NODE_ENV==="production"?{name:"1rwj9b6",styles:"background-color:rgba(255, 255, 255, 0.3)"}:{name:"1nvd7de-SimpleSlider",styles:"background-color:rgba(255, 255, 255, 0.3);label:SimpleSlider;",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNpbXBsZVNsaWRlci5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUxZIiwiZmlsZSI6IlNpbXBsZVNsaWRlci5qc3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5pbXBvcnQge3VzZVN0YXRlLCB1c2VSZWZ9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5pbXBvcnQge2dldFBvaW50ZXJEYXRhfSBmcm9tICd1dGlsL3BvaW50ZXInXG5cbmNvbnN0IHN0eWxlID0ge1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxufVxuXG5jb25zdCBkaXNhYmxlZFN0eWxlID0ge1xuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG59XG5cbmNvbnN0IHJhaWxTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGZsZXg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnNHB4JyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBiYWNrZ3JvdW5kOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpJyxcbiAgJz4gZGl2Jzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzAnLFxuICAgIGxlZnQ6ICcwJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9LFxufVxuXG5jb25zdCBtYXJrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBoZWlnaHQ6IHJhaWxTdHlsZS5oZWlnaHQsXG4gIHdpZHRoOiAnNHB4JyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtNTAlKScsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZjk4MzUnLFxufVxuXG5jb25zdCB0aHVtYlN0eWxlID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgdG9wOiAnNTAlJyxcbiAgaGVpZ2h0OiAnMTRweCcsXG4gIHdpZHRoOiAnMTRweCcsXG4gIGJvcmRlclJhZGl1czogJzEwMCUnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgYm94U2hhZG93OiAnMCAycHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKC01MCUsIC01MCUpJyxcbn1cblxuY29uc3QgZ2V0U2xpZGVyVmFsdWUgPSAoe3gsIGxlZnQsIHdpZHRofSkgPT5cbiAgTWF0aC5tYXgoMCwgTWF0aC5taW4oKHggLSBsZWZ0KSAvIHdpZHRoLCAxKSlcblxuY29uc3QgZGVib3VuY2VkUG9pbnRlckhhbmRsZXJzID0gKHtzdGF0ZSwgb25Nb3ZlLCBvbkxlYXZlfSkgPT4ge1xuICBjb25zdCBlbWl0ID0gKCkgPT4ge1xuICAgIGlmICghc3RhdGUuc2NoZWR1bGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHN0YXRlLnR5cGUgPT09ICdsZWF2ZScpIHtcbiAgICAgIG9uTGVhdmU/LihzdGF0ZS5ldmVudCwgc3RhdGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uTW92ZShzdGF0ZS5ldmVudCwgc3RhdGUpXG4gICAgfVxuICAgIHN0YXRlLnNjaGVkdWxlZCA9IGZhbHNlXG4gIH1cbiAgY29uc3Qgc2NoZWR1bGUgPSAoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnNjaGVkdWxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHN0YXRlLnNjaGVkdWxlZCA9IHRydWVcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZW1pdClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb25Qb2ludGVyTW92ZTogZXZlbnQgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9XG4gICAgICAgIGV2ZW50LmJ1dHRvbnMgPiAwIHx8IGV2ZW50LnRvdWNoZXM/Lmxlbmd0aCA+IDAgPyAnY2hhbmdlJyA6ICdtb3ZlJ1xuICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge2V2ZW50LCB0eXBlLCAuLi5nZXRQb2ludGVyRGF0YShldmVudCl9KVxuICAgICAgc2NoZWR1bGUoKVxuICAgIH0sXG4gICAgb25Qb2ludGVyTGVhdmU6IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSAnbGVhdmUnXG4gICAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7ZXZlbnQsIHR5cGV9KVxuICAgICAgc2NoZWR1bGUoKVxuICAgIH0sXG4gICAgZW1pdCxcbiAgfVxufVxuXG5jb25zdCBldmVudEhhbmRsZXJzID0gKHtcbiAgb25Qb2ludGVyRG93bixcbiAgb25Qb2ludGVyTW92ZSxcbiAgb25Qb2ludGVyTGVhdmUsXG4gIG9uUG9pbnRlclVwLFxufSkgPT4gKHtcbiAgb25Qb2ludGVyRG93bixcbiAgb25Qb2ludGVyTW92ZSxcbiAgb25Qb2ludGVyTGVhdmUsXG4gIG9uUG9pbnRlclVwLFxuICBvblRvdWNoU3RhcnQ6IG9uUG9pbnRlckRvd24sXG4gIG9uVG91Y2hNb3ZlOiBvblBvaW50ZXJNb3ZlLFxuICBvblRvdWNoRW5kOiBldmVudCA9PiB7XG4gICAgb25Qb2ludGVyTGVhdmUoZXZlbnQpXG4gICAgb25Qb2ludGVyVXAoZXZlbnQpXG4gIH0sXG59KVxuXG4vLyBUT0RPIGFsaWduIHdpdGggbWF0ZXJpYWwgdWkgbW9yZSwgbW92ZSBzcGVjaWFsIGhhbmRsaW5nIG9mIHBvaW50ZXIgZXZlbnRzXG5jb25zdCBTaW1wbGVTbGlkZXIgPSAoe1xuICBtaW4gPSAwLFxuICBtYXggPSAxMDAsXG4gIHZhbHVlLFxuICBzZWNvbmRhcnlUcmFja1ZhbHVlLCAvLyBUT0RPIGEgYmV0dGVyIG5hbWVcbiAgbWFya3MgPSBbXSxcbiAgY2xhc3NOYW1lID0gJycsXG4gIGNsYXNzZXMgPSB7fSxcbiAgZGlzYWJsZWQsXG4gIG9uUG9pbnRlck1vdmUsXG4gIG9uUG9pbnRlckxlYXZlLFxuICBvbkNoYW5nZSxcbiAgb25DaGFuZ2VDb21taXR0ZWQsXG59KSA9PiB7XG4gIGNvbnN0IHBvaW50ZXJTdGF0ZSA9IHVzZVJlZih7fSlcbiAgY29uc3QgW2ZvY3VzVmFsdWUsIHNldEZvY3VzVmFsdWVdID0gdXNlU3RhdGUoLUluZmluaXR5KVxuICBjb25zdCB0aHVtYlBvc2l0aW9uID1cbiAgICAoKGZvY3VzVmFsdWUgPj0gbWluID8gZm9jdXNWYWx1ZSA6IHZhbHVlKSAtIG1pbikgLyAobWF4IC0gbWluKVxuICBjb25zdCBzdWJUcmFja1Bvc2l0aW9uID0gKHNlY29uZGFyeVRyYWNrVmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbilcbiAgY29uc3QgcG9pbnRlckhhbmRsZXJzID0gZGVib3VuY2VkUG9pbnRlckhhbmRsZXJzKHtcbiAgICBzdGF0ZTogcG9pbnRlclN0YXRlLmN1cnJlbnQsXG4gICAgb25Nb3ZlOiAoZXZlbnQsIHt0eXBlLCB4LCB5LCB3aWR0aCwgbGVmdH0pID0+IHtcbiAgICAgIGNvbnN0IHBvaW50ZXJWYWx1ZSA9IChtYXggLSBtaW4pICogZ2V0U2xpZGVyVmFsdWUoe3gsIHdpZHRoLCBsZWZ0fSkgKyBtaW5cbiAgICAgIG9uUG9pbnRlck1vdmU/LihldmVudCwge3ZhbHVlOiBwb2ludGVyVmFsdWUsIHgsIHl9KVxuICAgICAgaWYgKHR5cGUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgIHNldEZvY3VzVmFsdWUocG9pbnRlclZhbHVlKVxuICAgICAgICBvbkNoYW5nZT8uKGV2ZW50LCB7dmFsdWU6IHBvaW50ZXJWYWx1ZSwgeCwgeX0pXG4gICAgICB9XG4gICAgfSxcbiAgICBvbkxlYXZlOiAoKSA9PiBvblBvaW50ZXJMZWF2ZT8uKCksXG4gIH0pXG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJVcCA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQucG9pbnRlcklkKSB7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpXG4gICAgfVxuICAgIGNvbnN0IHBvaW50ZXJWYWx1ZSA9XG4gICAgICAobWF4IC0gbWluKSAqIGdldFNsaWRlclZhbHVlKGdldFBvaW50ZXJEYXRhKGV2ZW50KSkgKyBtaW5cbiAgICBwb2ludGVySGFuZGxlcnMuZW1pdCgpXG4gICAgb25DaGFuZ2VDb21taXR0ZWQ/LihldmVudCwge3ZhbHVlOiBwb2ludGVyVmFsdWV9KVxuICAgIHNldEZvY3VzVmFsdWUoKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIGNzcz17W3N0eWxlLCBkaXNhYmxlZCAmJiBkaXNhYmxlZFN0eWxlXX1cbiAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgey4uLmV2ZW50SGFuZGxlcnMoe1xuICAgICAgICBvblBvaW50ZXJEb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKVxuICAgICAgICAgIH1cbiAgICAgICAgICBwb2ludGVySGFuZGxlcnMub25Qb2ludGVyTW92ZShldmVudClcbiAgICAgICAgfSxcbiAgICAgICAgLi4ucG9pbnRlckhhbmRsZXJzLFxuICAgICAgICBvblBvaW50ZXJVcDogaGFuZGxlUG9pbnRlclVwLFxuICAgICAgfSl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMucmFpbH0gY3NzPXtyYWlsU3R5bGV9PlxuICAgICAgICB7c2Vjb25kYXJ5VHJhY2tWYWx1ZSAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY3NzPXt7YmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJ319XG4gICAgICAgICAgICBzdHlsZT17e3RyYW5zZm9ybTogYHRyYW5zbGF0ZVgoJHtzdWJUcmFja1Bvc2l0aW9uICogMTAwIC0gMTAwfSUpYH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17e2JhY2tncm91bmRDb2xvcjogJyNmZmYnfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMudHJhY2t9XG4gICAgICAgICAgc3R5bGU9e3t0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKCR7dGh1bWJQb3NpdGlvbiAqIDEwMCAtIDEwMH0lKWB9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7bWFya3MubWFwKHBvc2l0aW9uID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGtleT17cG9zaXRpb259XG4gICAgICAgICAgY3NzPXttYXJrU3R5bGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLm1hcmtlZH1cbiAgICAgICAgICBzdHlsZT17e2xlZnQ6IGAkeyhwb3NpdGlvbiAvIG1heCkgKiAxMDB9JWB9fVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgICB7b25DaGFuZ2UgJiYgIWRpc2FibGVkID8gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXt0aHVtYlN0eWxlfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy50aHVtYn1cbiAgICAgICAgICBzdHlsZT17e2xlZnQ6IGBjYWxjKCR7dGh1bWJQb3NpdGlvbiAqIDEwMH0lKWB9fVxuICAgICAgICAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5TaW1wbGVTbGlkZXIucHJvcFR5cGVzID0ge1xuICBtaW46IFByb3BUeXBlcy5udW1iZXIsXG4gIG1heDogUHJvcFR5cGVzLm51bWJlcixcbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNlY29uZGFyeVRyYWNrVmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIG1hcmtzOiBQcm9wVHlwZXMuYXJyYXksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvblBvaW50ZXJNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Qb2ludGVyTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2hhbmdlQ29tbWl0dGVkOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlU2xpZGVyXG4iXX0= */",toString:_EMOTION_STRINGIFIED_CSS_ERROR__$5};var _ref2$1=process.env.NODE_ENV==="production"?{name:"dfjll8",styles:"background-color:#fff"}:{name:"mlfwmi-SimpleSlider",styles:"background-color:#fff;label:SimpleSlider;",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNpbXBsZVNsaWRlci5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0xVIiwiZmlsZSI6IlNpbXBsZVNsaWRlci5qc3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5pbXBvcnQge3VzZVN0YXRlLCB1c2VSZWZ9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5pbXBvcnQge2dldFBvaW50ZXJEYXRhfSBmcm9tICd1dGlsL3BvaW50ZXInXG5cbmNvbnN0IHN0eWxlID0ge1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxufVxuXG5jb25zdCBkaXNhYmxlZFN0eWxlID0ge1xuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG59XG5cbmNvbnN0IHJhaWxTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGZsZXg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnNHB4JyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBiYWNrZ3JvdW5kOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpJyxcbiAgJz4gZGl2Jzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzAnLFxuICAgIGxlZnQ6ICcwJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9LFxufVxuXG5jb25zdCBtYXJrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBoZWlnaHQ6IHJhaWxTdHlsZS5oZWlnaHQsXG4gIHdpZHRoOiAnNHB4JyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtNTAlKScsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZjk4MzUnLFxufVxuXG5jb25zdCB0aHVtYlN0eWxlID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgdG9wOiAnNTAlJyxcbiAgaGVpZ2h0OiAnMTRweCcsXG4gIHdpZHRoOiAnMTRweCcsXG4gIGJvcmRlclJhZGl1czogJzEwMCUnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgYm94U2hhZG93OiAnMCAycHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKC01MCUsIC01MCUpJyxcbn1cblxuY29uc3QgZ2V0U2xpZGVyVmFsdWUgPSAoe3gsIGxlZnQsIHdpZHRofSkgPT5cbiAgTWF0aC5tYXgoMCwgTWF0aC5taW4oKHggLSBsZWZ0KSAvIHdpZHRoLCAxKSlcblxuY29uc3QgZGVib3VuY2VkUG9pbnRlckhhbmRsZXJzID0gKHtzdGF0ZSwgb25Nb3ZlLCBvbkxlYXZlfSkgPT4ge1xuICBjb25zdCBlbWl0ID0gKCkgPT4ge1xuICAgIGlmICghc3RhdGUuc2NoZWR1bGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHN0YXRlLnR5cGUgPT09ICdsZWF2ZScpIHtcbiAgICAgIG9uTGVhdmU/LihzdGF0ZS5ldmVudCwgc3RhdGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uTW92ZShzdGF0ZS5ldmVudCwgc3RhdGUpXG4gICAgfVxuICAgIHN0YXRlLnNjaGVkdWxlZCA9IGZhbHNlXG4gIH1cbiAgY29uc3Qgc2NoZWR1bGUgPSAoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnNjaGVkdWxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHN0YXRlLnNjaGVkdWxlZCA9IHRydWVcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZW1pdClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb25Qb2ludGVyTW92ZTogZXZlbnQgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9XG4gICAgICAgIGV2ZW50LmJ1dHRvbnMgPiAwIHx8IGV2ZW50LnRvdWNoZXM/Lmxlbmd0aCA+IDAgPyAnY2hhbmdlJyA6ICdtb3ZlJ1xuICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge2V2ZW50LCB0eXBlLCAuLi5nZXRQb2ludGVyRGF0YShldmVudCl9KVxuICAgICAgc2NoZWR1bGUoKVxuICAgIH0sXG4gICAgb25Qb2ludGVyTGVhdmU6IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSAnbGVhdmUnXG4gICAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7ZXZlbnQsIHR5cGV9KVxuICAgICAgc2NoZWR1bGUoKVxuICAgIH0sXG4gICAgZW1pdCxcbiAgfVxufVxuXG5jb25zdCBldmVudEhhbmRsZXJzID0gKHtcbiAgb25Qb2ludGVyRG93bixcbiAgb25Qb2ludGVyTW92ZSxcbiAgb25Qb2ludGVyTGVhdmUsXG4gIG9uUG9pbnRlclVwLFxufSkgPT4gKHtcbiAgb25Qb2ludGVyRG93bixcbiAgb25Qb2ludGVyTW92ZSxcbiAgb25Qb2ludGVyTGVhdmUsXG4gIG9uUG9pbnRlclVwLFxuICBvblRvdWNoU3RhcnQ6IG9uUG9pbnRlckRvd24sXG4gIG9uVG91Y2hNb3ZlOiBvblBvaW50ZXJNb3ZlLFxuICBvblRvdWNoRW5kOiBldmVudCA9PiB7XG4gICAgb25Qb2ludGVyTGVhdmUoZXZlbnQpXG4gICAgb25Qb2ludGVyVXAoZXZlbnQpXG4gIH0sXG59KVxuXG4vLyBUT0RPIGFsaWduIHdpdGggbWF0ZXJpYWwgdWkgbW9yZSwgbW92ZSBzcGVjaWFsIGhhbmRsaW5nIG9mIHBvaW50ZXIgZXZlbnRzXG5jb25zdCBTaW1wbGVTbGlkZXIgPSAoe1xuICBtaW4gPSAwLFxuICBtYXggPSAxMDAsXG4gIHZhbHVlLFxuICBzZWNvbmRhcnlUcmFja1ZhbHVlLCAvLyBUT0RPIGEgYmV0dGVyIG5hbWVcbiAgbWFya3MgPSBbXSxcbiAgY2xhc3NOYW1lID0gJycsXG4gIGNsYXNzZXMgPSB7fSxcbiAgZGlzYWJsZWQsXG4gIG9uUG9pbnRlck1vdmUsXG4gIG9uUG9pbnRlckxlYXZlLFxuICBvbkNoYW5nZSxcbiAgb25DaGFuZ2VDb21taXR0ZWQsXG59KSA9PiB7XG4gIGNvbnN0IHBvaW50ZXJTdGF0ZSA9IHVzZVJlZih7fSlcbiAgY29uc3QgW2ZvY3VzVmFsdWUsIHNldEZvY3VzVmFsdWVdID0gdXNlU3RhdGUoLUluZmluaXR5KVxuICBjb25zdCB0aHVtYlBvc2l0aW9uID1cbiAgICAoKGZvY3VzVmFsdWUgPj0gbWluID8gZm9jdXNWYWx1ZSA6IHZhbHVlKSAtIG1pbikgLyAobWF4IC0gbWluKVxuICBjb25zdCBzdWJUcmFja1Bvc2l0aW9uID0gKHNlY29uZGFyeVRyYWNrVmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbilcbiAgY29uc3QgcG9pbnRlckhhbmRsZXJzID0gZGVib3VuY2VkUG9pbnRlckhhbmRsZXJzKHtcbiAgICBzdGF0ZTogcG9pbnRlclN0YXRlLmN1cnJlbnQsXG4gICAgb25Nb3ZlOiAoZXZlbnQsIHt0eXBlLCB4LCB5LCB3aWR0aCwgbGVmdH0pID0+IHtcbiAgICAgIGNvbnN0IHBvaW50ZXJWYWx1ZSA9IChtYXggLSBtaW4pICogZ2V0U2xpZGVyVmFsdWUoe3gsIHdpZHRoLCBsZWZ0fSkgKyBtaW5cbiAgICAgIG9uUG9pbnRlck1vdmU/LihldmVudCwge3ZhbHVlOiBwb2ludGVyVmFsdWUsIHgsIHl9KVxuICAgICAgaWYgKHR5cGUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgIHNldEZvY3VzVmFsdWUocG9pbnRlclZhbHVlKVxuICAgICAgICBvbkNoYW5nZT8uKGV2ZW50LCB7dmFsdWU6IHBvaW50ZXJWYWx1ZSwgeCwgeX0pXG4gICAgICB9XG4gICAgfSxcbiAgICBvbkxlYXZlOiAoKSA9PiBvblBvaW50ZXJMZWF2ZT8uKCksXG4gIH0pXG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJVcCA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQucG9pbnRlcklkKSB7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpXG4gICAgfVxuICAgIGNvbnN0IHBvaW50ZXJWYWx1ZSA9XG4gICAgICAobWF4IC0gbWluKSAqIGdldFNsaWRlclZhbHVlKGdldFBvaW50ZXJEYXRhKGV2ZW50KSkgKyBtaW5cbiAgICBwb2ludGVySGFuZGxlcnMuZW1pdCgpXG4gICAgb25DaGFuZ2VDb21taXR0ZWQ/LihldmVudCwge3ZhbHVlOiBwb2ludGVyVmFsdWV9KVxuICAgIHNldEZvY3VzVmFsdWUoKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIGNzcz17W3N0eWxlLCBkaXNhYmxlZCAmJiBkaXNhYmxlZFN0eWxlXX1cbiAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgey4uLmV2ZW50SGFuZGxlcnMoe1xuICAgICAgICBvblBvaW50ZXJEb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKVxuICAgICAgICAgIH1cbiAgICAgICAgICBwb2ludGVySGFuZGxlcnMub25Qb2ludGVyTW92ZShldmVudClcbiAgICAgICAgfSxcbiAgICAgICAgLi4ucG9pbnRlckhhbmRsZXJzLFxuICAgICAgICBvblBvaW50ZXJVcDogaGFuZGxlUG9pbnRlclVwLFxuICAgICAgfSl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMucmFpbH0gY3NzPXtyYWlsU3R5bGV9PlxuICAgICAgICB7c2Vjb25kYXJ5VHJhY2tWYWx1ZSAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY3NzPXt7YmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJ319XG4gICAgICAgICAgICBzdHlsZT17e3RyYW5zZm9ybTogYHRyYW5zbGF0ZVgoJHtzdWJUcmFja1Bvc2l0aW9uICogMTAwIC0gMTAwfSUpYH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17e2JhY2tncm91bmRDb2xvcjogJyNmZmYnfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMudHJhY2t9XG4gICAgICAgICAgc3R5bGU9e3t0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKCR7dGh1bWJQb3NpdGlvbiAqIDEwMCAtIDEwMH0lKWB9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7bWFya3MubWFwKHBvc2l0aW9uID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGtleT17cG9zaXRpb259XG4gICAgICAgICAgY3NzPXttYXJrU3R5bGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLm1hcmtlZH1cbiAgICAgICAgICBzdHlsZT17e2xlZnQ6IGAkeyhwb3NpdGlvbiAvIG1heCkgKiAxMDB9JWB9fVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgICB7b25DaGFuZ2UgJiYgIWRpc2FibGVkID8gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXt0aHVtYlN0eWxlfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy50aHVtYn1cbiAgICAgICAgICBzdHlsZT17e2xlZnQ6IGBjYWxjKCR7dGh1bWJQb3NpdGlvbiAqIDEwMH0lKWB9fVxuICAgICAgICAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5TaW1wbGVTbGlkZXIucHJvcFR5cGVzID0ge1xuICBtaW46IFByb3BUeXBlcy5udW1iZXIsXG4gIG1heDogUHJvcFR5cGVzLm51bWJlcixcbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNlY29uZGFyeVRyYWNrVmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIG1hcmtzOiBQcm9wVHlwZXMuYXJyYXksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvblBvaW50ZXJNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Qb2ludGVyTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2hhbmdlQ29tbWl0dGVkOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlU2xpZGVyXG4iXX0= */",toString:_EMOTION_STRINGIFIED_CSS_ERROR__$5};const SimpleSlider=({min=0,max=100,value,secondaryTrackValue,// TODO a better name
|
|
266
|
+
marks=[],className='',classes={},disabled,onPointerMove,onPointerLeave,onChange,onChangeCommitted})=>{const pointerState=useRef({});const[focusValue,setFocusValue]=useState(-Infinity);const thumbPosition=((focusValue>=min?focusValue:value)-min)/(max-min);const subTrackPosition=(secondaryTrackValue-min)/(max-min);const pointerHandlers=debouncedPointerHandlers({state:pointerState.current,onMove:(event,{type,x,y,width,left})=>{const pointerValue=(max-min)*getSliderValue({x,width,left})+min;onPointerMove===null||onPointerMove===void 0?void 0:onPointerMove(event,{value:pointerValue,x,y});if(type==='change'){setFocusValue(pointerValue);onChange===null||onChange===void 0?void 0:onChange(event,{value:pointerValue,x,y});}},onLeave:()=>onPointerLeave===null||onPointerLeave===void 0?void 0:onPointerLeave()});const handlePointerUp=event=>{if(event.pointerId){event.currentTarget.releasePointerCapture(event.pointerId);}const pointerValue=(max-min)*getSliderValue(getPointerData(event))+min;pointerHandlers.emit();onChangeCommitted===null||onChangeCommitted===void 0?void 0:onChangeCommitted(event,{value:pointerValue});setFocusValue();};return jsxs("div",{className:className,css:[style$8,disabled&&disabledStyle,process.env.NODE_ENV==="production"?"":";label:SimpleSlider;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNpbXBsZVNsaWRlci5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUtNIiwiZmlsZSI6IlNpbXBsZVNsaWRlci5qc3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5pbXBvcnQge3VzZVN0YXRlLCB1c2VSZWZ9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5pbXBvcnQge2dldFBvaW50ZXJEYXRhfSBmcm9tICd1dGlsL3BvaW50ZXInXG5cbmNvbnN0IHN0eWxlID0ge1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxufVxuXG5jb25zdCBkaXNhYmxlZFN0eWxlID0ge1xuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG59XG5cbmNvbnN0IHJhaWxTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGZsZXg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnNHB4JyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBiYWNrZ3JvdW5kOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpJyxcbiAgJz4gZGl2Jzoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzAnLFxuICAgIGxlZnQ6ICcwJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICB9LFxufVxuXG5jb25zdCBtYXJrU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBoZWlnaHQ6IHJhaWxTdHlsZS5oZWlnaHQsXG4gIHdpZHRoOiAnNHB4JyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtNTAlKScsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZjk4MzUnLFxufVxuXG5jb25zdCB0aHVtYlN0eWxlID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgdG9wOiAnNTAlJyxcbiAgaGVpZ2h0OiAnMTRweCcsXG4gIHdpZHRoOiAnMTRweCcsXG4gIGJvcmRlclJhZGl1czogJzEwMCUnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgYm94U2hhZG93OiAnMCAycHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKC01MCUsIC01MCUpJyxcbn1cblxuY29uc3QgZ2V0U2xpZGVyVmFsdWUgPSAoe3gsIGxlZnQsIHdpZHRofSkgPT5cbiAgTWF0aC5tYXgoMCwgTWF0aC5taW4oKHggLSBsZWZ0KSAvIHdpZHRoLCAxKSlcblxuY29uc3QgZGVib3VuY2VkUG9pbnRlckhhbmRsZXJzID0gKHtzdGF0ZSwgb25Nb3ZlLCBvbkxlYXZlfSkgPT4ge1xuICBjb25zdCBlbWl0ID0gKCkgPT4ge1xuICAgIGlmICghc3RhdGUuc2NoZWR1bGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHN0YXRlLnR5cGUgPT09ICdsZWF2ZScpIHtcbiAgICAgIG9uTGVhdmU/LihzdGF0ZS5ldmVudCwgc3RhdGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uTW92ZShzdGF0ZS5ldmVudCwgc3RhdGUpXG4gICAgfVxuICAgIHN0YXRlLnNjaGVkdWxlZCA9IGZhbHNlXG4gIH1cbiAgY29uc3Qgc2NoZWR1bGUgPSAoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnNjaGVkdWxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHN0YXRlLnNjaGVkdWxlZCA9IHRydWVcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZW1pdClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb25Qb2ludGVyTW92ZTogZXZlbnQgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9XG4gICAgICAgIGV2ZW50LmJ1dHRvbnMgPiAwIHx8IGV2ZW50LnRvdWNoZXM/Lmxlbmd0aCA+IDAgPyAnY2hhbmdlJyA6ICdtb3ZlJ1xuICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge2V2ZW50LCB0eXBlLCAuLi5nZXRQb2ludGVyRGF0YShldmVudCl9KVxuICAgICAgc2NoZWR1bGUoKVxuICAgIH0sXG4gICAgb25Qb2ludGVyTGVhdmU6IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSAnbGVhdmUnXG4gICAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7ZXZlbnQsIHR5cGV9KVxuICAgICAgc2NoZWR1bGUoKVxuICAgIH0sXG4gICAgZW1pdCxcbiAgfVxufVxuXG5jb25zdCBldmVudEhhbmRsZXJzID0gKHtcbiAgb25Qb2ludGVyRG93bixcbiAgb25Qb2ludGVyTW92ZSxcbiAgb25Qb2ludGVyTGVhdmUsXG4gIG9uUG9pbnRlclVwLFxufSkgPT4gKHtcbiAgb25Qb2ludGVyRG93bixcbiAgb25Qb2ludGVyTW92ZSxcbiAgb25Qb2ludGVyTGVhdmUsXG4gIG9uUG9pbnRlclVwLFxuICBvblRvdWNoU3RhcnQ6IG9uUG9pbnRlckRvd24sXG4gIG9uVG91Y2hNb3ZlOiBvblBvaW50ZXJNb3ZlLFxuICBvblRvdWNoRW5kOiBldmVudCA9PiB7XG4gICAgb25Qb2ludGVyTGVhdmUoZXZlbnQpXG4gICAgb25Qb2ludGVyVXAoZXZlbnQpXG4gIH0sXG59KVxuXG4vLyBUT0RPIGFsaWduIHdpdGggbWF0ZXJpYWwgdWkgbW9yZSwgbW92ZSBzcGVjaWFsIGhhbmRsaW5nIG9mIHBvaW50ZXIgZXZlbnRzXG5jb25zdCBTaW1wbGVTbGlkZXIgPSAoe1xuICBtaW4gPSAwLFxuICBtYXggPSAxMDAsXG4gIHZhbHVlLFxuICBzZWNvbmRhcnlUcmFja1ZhbHVlLCAvLyBUT0RPIGEgYmV0dGVyIG5hbWVcbiAgbWFya3MgPSBbXSxcbiAgY2xhc3NOYW1lID0gJycsXG4gIGNsYXNzZXMgPSB7fSxcbiAgZGlzYWJsZWQsXG4gIG9uUG9pbnRlck1vdmUsXG4gIG9uUG9pbnRlckxlYXZlLFxuICBvbkNoYW5nZSxcbiAgb25DaGFuZ2VDb21taXR0ZWQsXG59KSA9PiB7XG4gIGNvbnN0IHBvaW50ZXJTdGF0ZSA9IHVzZVJlZih7fSlcbiAgY29uc3QgW2ZvY3VzVmFsdWUsIHNldEZvY3VzVmFsdWVdID0gdXNlU3RhdGUoLUluZmluaXR5KVxuICBjb25zdCB0aHVtYlBvc2l0aW9uID1cbiAgICAoKGZvY3VzVmFsdWUgPj0gbWluID8gZm9jdXNWYWx1ZSA6IHZhbHVlKSAtIG1pbikgLyAobWF4IC0gbWluKVxuICBjb25zdCBzdWJUcmFja1Bvc2l0aW9uID0gKHNlY29uZGFyeVRyYWNrVmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbilcbiAgY29uc3QgcG9pbnRlckhhbmRsZXJzID0gZGVib3VuY2VkUG9pbnRlckhhbmRsZXJzKHtcbiAgICBzdGF0ZTogcG9pbnRlclN0YXRlLmN1cnJlbnQsXG4gICAgb25Nb3ZlOiAoZXZlbnQsIHt0eXBlLCB4LCB5LCB3aWR0aCwgbGVmdH0pID0+IHtcbiAgICAgIGNvbnN0IHBvaW50ZXJWYWx1ZSA9IChtYXggLSBtaW4pICogZ2V0U2xpZGVyVmFsdWUoe3gsIHdpZHRoLCBsZWZ0fSkgKyBtaW5cbiAgICAgIG9uUG9pbnRlck1vdmU/LihldmVudCwge3ZhbHVlOiBwb2ludGVyVmFsdWUsIHgsIHl9KVxuICAgICAgaWYgKHR5cGUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgIHNldEZvY3VzVmFsdWUocG9pbnRlclZhbHVlKVxuICAgICAgICBvbkNoYW5nZT8uKGV2ZW50LCB7dmFsdWU6IHBvaW50ZXJWYWx1ZSwgeCwgeX0pXG4gICAgICB9XG4gICAgfSxcbiAgICBvbkxlYXZlOiAoKSA9PiBvblBvaW50ZXJMZWF2ZT8uKCksXG4gIH0pXG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJVcCA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQucG9pbnRlcklkKSB7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpXG4gICAgfVxuICAgIGNvbnN0IHBvaW50ZXJWYWx1ZSA9XG4gICAgICAobWF4IC0gbWluKSAqIGdldFNsaWRlclZhbHVlKGdldFBvaW50ZXJEYXRhKGV2ZW50KSkgKyBtaW5cbiAgICBwb2ludGVySGFuZGxlcnMuZW1pdCgpXG4gICAgb25DaGFuZ2VDb21taXR0ZWQ/LihldmVudCwge3ZhbHVlOiBwb2ludGVyVmFsdWV9KVxuICAgIHNldEZvY3VzVmFsdWUoKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIGNzcz17W3N0eWxlLCBkaXNhYmxlZCAmJiBkaXNhYmxlZFN0eWxlXX1cbiAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgey4uLmV2ZW50SGFuZGxlcnMoe1xuICAgICAgICBvblBvaW50ZXJEb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKVxuICAgICAgICAgIH1cbiAgICAgICAgICBwb2ludGVySGFuZGxlcnMub25Qb2ludGVyTW92ZShldmVudClcbiAgICAgICAgfSxcbiAgICAgICAgLi4ucG9pbnRlckhhbmRsZXJzLFxuICAgICAgICBvblBvaW50ZXJVcDogaGFuZGxlUG9pbnRlclVwLFxuICAgICAgfSl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMucmFpbH0gY3NzPXtyYWlsU3R5bGV9PlxuICAgICAgICB7c2Vjb25kYXJ5VHJhY2tWYWx1ZSAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY3NzPXt7YmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJ319XG4gICAgICAgICAgICBzdHlsZT17e3RyYW5zZm9ybTogYHRyYW5zbGF0ZVgoJHtzdWJUcmFja1Bvc2l0aW9uICogMTAwIC0gMTAwfSUpYH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17e2JhY2tncm91bmRDb2xvcjogJyNmZmYnfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMudHJhY2t9XG4gICAgICAgICAgc3R5bGU9e3t0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKCR7dGh1bWJQb3NpdGlvbiAqIDEwMCAtIDEwMH0lKWB9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7bWFya3MubWFwKHBvc2l0aW9uID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGtleT17cG9zaXRpb259XG4gICAgICAgICAgY3NzPXttYXJrU3R5bGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLm1hcmtlZH1cbiAgICAgICAgICBzdHlsZT17e2xlZnQ6IGAkeyhwb3NpdGlvbiAvIG1heCkgKiAxMDB9JWB9fVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgICB7b25DaGFuZ2UgJiYgIWRpc2FibGVkID8gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXt0aHVtYlN0eWxlfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy50aHVtYn1cbiAgICAgICAgICBzdHlsZT17e2xlZnQ6IGBjYWxjKCR7dGh1bWJQb3NpdGlvbiAqIDEwMH0lKWB9fVxuICAgICAgICAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5TaW1wbGVTbGlkZXIucHJvcFR5cGVzID0ge1xuICBtaW46IFByb3BUeXBlcy5udW1iZXIsXG4gIG1heDogUHJvcFR5cGVzLm51bWJlcixcbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNlY29uZGFyeVRyYWNrVmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIG1hcmtzOiBQcm9wVHlwZXMuYXJyYXksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvblBvaW50ZXJNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Qb2ludGVyTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2hhbmdlQ29tbWl0dGVkOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlU2xpZGVyXG4iXX0= */"],onClick:event=>event.stopPropagation(),...eventHandlers({onPointerDown:event=>{if(event.type==='pointerdown'){event.currentTarget.setPointerCapture(event.pointerId);}pointerHandlers.onPointerMove(event);},...pointerHandlers,onPointerUp:handlePointerUp}),children:[jsxs("div",{className:classes.rail,css:railStyle,children:[secondaryTrackValue&&jsx("div",{css:_ref$5,style:{transform:`translateX(${subTrackPosition*100-100}%)`}}),jsx("div",{css:_ref2$1,className:classes.track,style:{transform:`translateX(${thumbPosition*100-100}%)`}})]}),marks.map(position=>jsx("div",{css:markStyle,className:classes.marked,style:{left:`${position/max*100}%`}},position)),onChange&&!disabled?jsx("div",{css:thumbStyle,className:classes.thumb,style:{left:`calc(${thumbPosition*100}%)`}}):jsx("div",{})]});};SimpleSlider.propTypes={min:PropTypes$1.number,max:PropTypes$1.number,value:PropTypes$1.number,secondaryTrackValue:PropTypes$1.number,marks:PropTypes$1.array,className:PropTypes$1.string,classes:PropTypes$1.object,disabled:PropTypes$1.bool,onPointerMove:PropTypes$1.func,onPointerLeave:PropTypes$1.func,onChange:PropTypes$1.func,onChangeCommitted:PropTypes$1.func};const formattedTime=sourceTime=>{const sign=sourceTime<0?'-':'';const time=Math.abs(sourceTime);const seconds=Math.floor(time%60).toString().padStart(2,'0');const minutes=Math.floor(time/60%60).toString().padStart(2,'0');const hours=time>=3600&&Math.floor(time/60/60).toString();return sign+[hours,minutes,seconds].filter(Boolean).join(':');};/* @jsxImportSource @emotion/react */const seekbarStyle={position:'relative',display:'flex',alignItems:'center',width:'100%',height:'24px',fontSize:'75%',letterSpacing:'1px',color:'#fff'};const sliderStyle$1={flex:1,margin:'0 1em','@media (hover: hover), screen and (-ms-high-contrast: active), (-ms-high-contrast: none)':{'> div:last-of-type':{opacity:0,transition:'opacity 0.2s ease-out'}},'&:hover > div:last-of-type':{opacity:1}};const getSliderStyle=css=>({rail:css({height:'0.33em'}),marked:css({height:'0.33em'}),thumb:css({width:'1.33em',height:'1.33em'})});const reducePointer=(state,{type,value,x})=>{switch(type){case'move':return {...state,hover:true,value,x};case'change':return {...state,focused:true,value};case'release':return {...state,focused:false,value};case'leave':return {...state,hover:false};default:return state;}};// TODO use className instead of classes ?
|
|
267
|
+
const Seekbar$1=({style,classes,startTime=0,currentTime,bufferTime,duration,marks,play,pause,seek,leftText,onSeekEvent,children,...rest})=>{var _ref$current;const[pointerState,dispatchPointer]=useReducer(reducePointer,{});const pointerActive=pointerState.hover||pointerState.focused;// to reflect boundary when container resized
|
|
268
|
+
const{observe}=useDimensions();const ref=useRef();const rect=(_ref$current=ref.current)===null||_ref$current===void 0?void 0:_ref$current.getBoundingClientRect();const handlers=seek&&{onPointerMove:(_,{value,x})=>dispatchPointer({type:'move',value,x}),onPointerLeave:()=>dispatchPointer({type:'leave'}),onChange:(_,{value})=>{pause();dispatchPointer({type:'change',value});},onChangeCommitted:(_,{value})=>{onSeekEvent();dispatchPointer({type:'release',value});seek(value);play();}};const endTime=startTime+duration;return endTime>=0&&endTime<1e6&&duration>0?jsxs("div",{ref:element=>{observe(element);ref.current=element;},className:"kks-player__seek-bar",css:[seekbarStyle,style,process.env.NODE_ENV==="production"?"":";label:Seekbar;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNlZWtiYXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUdNIiwiZmlsZSI6IlNlZWtiYXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5pbXBvcnQge3VzZVJlZHVjZXIsIHVzZVJlZiwgY2xvbmVFbGVtZW50fSBmcm9tICdyZWFjdCdcbmltcG9ydCB7Q2xhc3NOYW1lc30gZnJvbSAnQGVtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgdXNlRGltZW5zaW9ucyBmcm9tICdyZWFjdC1jb29sLWRpbWVuc2lvbnMnXG5cbmltcG9ydCBTaW1wbGVTbGlkZXIgZnJvbSAncGxheWVyVWkvU2ltcGxlU2xpZGVyJ1xuaW1wb3J0IGZvcm1hdHRlZFRpbWUgZnJvbSAndXRpbC9mb3JtYXR0ZWRUaW1lJ1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdjb250ZXh0L0kxOG4nXG5cbmNvbnN0IHNlZWtiYXJTdHlsZSA9IHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzI0cHgnLFxuICBmb250U2l6ZTogJzc1JScsXG4gIGxldHRlclNwYWNpbmc6ICcxcHgnLFxuICBjb2xvcjogJyNmZmYnLFxufVxuXG5jb25zdCBzbGlkZXJTdHlsZSA9IHtcbiAgZmxleDogMSxcbiAgbWFyZ2luOiAnMCAxZW0nLFxuICAnQG1lZGlhIChob3ZlcjogaG92ZXIpLCBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSc6XG4gICAge1xuICAgICAgJz4gZGl2Omxhc3Qtb2YtdHlwZSc6IHtcbiAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC4ycyBlYXNlLW91dCcsXG4gICAgICB9LFxuICAgIH0sXG4gICcmOmhvdmVyID4gZGl2Omxhc3Qtb2YtdHlwZSc6IHtcbiAgICBvcGFjaXR5OiAxLFxuICB9LFxufVxuXG5jb25zdCBnZXRTbGlkZXJTdHlsZSA9IGNzcyA9PiAoe1xuICByYWlsOiBjc3Moe2hlaWdodDogJzAuMzNlbSd9KSxcbiAgbWFya2VkOiBjc3Moe2hlaWdodDogJzAuMzNlbSd9KSxcbiAgdGh1bWI6IGNzcyh7d2lkdGg6ICcxLjMzZW0nLCBoZWlnaHQ6ICcxLjMzZW0nfSksXG59KVxuXG5jb25zdCByZWR1Y2VQb2ludGVyID0gKHN0YXRlLCB7dHlwZSwgdmFsdWUsIHh9KSA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ21vdmUnOlxuICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgaG92ZXI6IHRydWUsIHZhbHVlLCB4fVxuICAgIGNhc2UgJ2NoYW5nZSc6XG4gICAgICByZXR1cm4gey4uLnN0YXRlLCBmb2N1c2VkOiB0cnVlLCB2YWx1ZX1cbiAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgIHJldHVybiB7Li4uc3RhdGUsIGZvY3VzZWQ6IGZhbHNlLCB2YWx1ZX1cbiAgICBjYXNlICdsZWF2ZSc6XG4gICAgICByZXR1cm4gey4uLnN0YXRlLCBob3ZlcjogZmFsc2V9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZVxuICB9XG59XG5cbi8vIFRPRE8gdXNlIGNsYXNzTmFtZSBpbnN0ZWFkIG9mIGNsYXNzZXMgP1xuY29uc3QgU2Vla2JhciA9ICh7XG4gIHN0eWxlLFxuICBjbGFzc2VzLFxuICBzdGFydFRpbWUgPSAwLFxuICBjdXJyZW50VGltZSxcbiAgYnVmZmVyVGltZSxcbiAgZHVyYXRpb24sXG4gIG1hcmtzLFxuICBwbGF5LFxuICBwYXVzZSxcbiAgc2VlayxcbiAgbGVmdFRleHQsXG4gIG9uU2Vla0V2ZW50LFxuICBjaGlsZHJlbixcbiAgLi4ucmVzdFxufSkgPT4ge1xuICBjb25zdCBbcG9pbnRlclN0YXRlLCBkaXNwYXRjaFBvaW50ZXJdID0gdXNlUmVkdWNlcihyZWR1Y2VQb2ludGVyLCB7fSlcbiAgY29uc3QgcG9pbnRlckFjdGl2ZSA9IHBvaW50ZXJTdGF0ZS5ob3ZlciB8fCBwb2ludGVyU3RhdGUuZm9jdXNlZFxuICAvLyB0byByZWZsZWN0IGJvdW5kYXJ5IHdoZW4gY29udGFpbmVyIHJlc2l6ZWRcbiAgY29uc3Qge29ic2VydmV9ID0gdXNlRGltZW5zaW9ucygpXG4gIGNvbnN0IHJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IHJlY3QgPSByZWYuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgY29uc3QgaGFuZGxlcnMgPSBzZWVrICYmIHtcbiAgICBvblBvaW50ZXJNb3ZlOiAoXywge3ZhbHVlLCB4fSkgPT4gZGlzcGF0Y2hQb2ludGVyKHt0eXBlOiAnbW92ZScsIHZhbHVlLCB4fSksXG4gICAgb25Qb2ludGVyTGVhdmU6ICgpID0+IGRpc3BhdGNoUG9pbnRlcih7dHlwZTogJ2xlYXZlJ30pLFxuICAgIG9uQ2hhbmdlOiAoXywge3ZhbHVlfSkgPT4ge1xuICAgICAgcGF1c2UoKVxuICAgICAgZGlzcGF0Y2hQb2ludGVyKHt0eXBlOiAnY2hhbmdlJywgdmFsdWV9KVxuICAgIH0sXG4gICAgb25DaGFuZ2VDb21taXR0ZWQ6IChfLCB7dmFsdWV9KSA9PiB7XG4gICAgICBvblNlZWtFdmVudCgpXG4gICAgICBkaXNwYXRjaFBvaW50ZXIoe3R5cGU6ICdyZWxlYXNlJywgdmFsdWV9KVxuICAgICAgc2Vlayh2YWx1ZSlcbiAgICAgIHBsYXkoKVxuICAgIH0sXG4gIH1cbiAgY29uc3QgZW5kVGltZSA9IHN0YXJ0VGltZSArIGR1cmF0aW9uXG5cbiAgcmV0dXJuIGVuZFRpbWUgPj0gMCAmJiBlbmRUaW1lIDwgMWU2ICYmIGR1cmF0aW9uID4gMCA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2VsZW1lbnQgPT4ge1xuICAgICAgICBvYnNlcnZlKGVsZW1lbnQpXG4gICAgICAgIHJlZi5jdXJyZW50ID0gZWxlbWVudFxuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT1cImtrcy1wbGF5ZXJfX3NlZWstYmFyXCJcbiAgICAgIGNzcz17W3NlZWtiYXJTdHlsZSwgc3R5bGVdfVxuICAgICAgc3R5bGU9e1xuICAgICAgICByZWN0ICYmIHtcbiAgICAgICAgICAnLS1zZWVrYmFyLWxlZnQnOiBgJHtyZWN0LmxlZnR9cHhgLFxuICAgICAgICAgICctLXNlZWtiYXItcmlnaHQnOiBgJHtyZWN0LnJpZ2h0fXB4YCxcbiAgICAgICAgICAnLS1wb2ludGVyLXgnOiBgJHtwb2ludGVyU3RhdGUueH1weGAsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA+XG4gICAgICB7KHBvaW50ZXJBY3RpdmUgJiYgZm9ybWF0dGVkVGltZShwb2ludGVyU3RhdGUudmFsdWUpKSB8fFxuICAgICAgICAobGVmdFRleHQgJiYgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLmxlZnRUZXh0fSAvPikgfHxcbiAgICAgICAgZm9ybWF0dGVkVGltZShjdXJyZW50VGltZSl9XG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7Y3NzfSkgPT4gKFxuICAgICAgICAgIDxTaW1wbGVTbGlkZXJcbiAgICAgICAgICAgIGNzcz17c2xpZGVyU3R5bGV9XG4gICAgICAgICAgICBjbGFzc2VzPXt7XG4gICAgICAgICAgICAgIHRyYWNrOiBjc3Moe2JhY2tncm91bmRDb2xvcjogJ3JlZCd9KSxcbiAgICAgICAgICAgICAgLi4uZ2V0U2xpZGVyU3R5bGUoY3NzKSxcbiAgICAgICAgICAgICAgLi4uY2xhc3NlcyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkaXNhYmxlZD17IXNlZWt9XG4gICAgICAgICAgICBzZWNvbmRhcnlUcmFja1ZhbHVlPXtidWZmZXJUaW1lfVxuICAgICAgICAgICAgLy8gbGluZWFyIGNoYW5uZWwgaGF2ZSB0aW1lIC8gZHVyYXRpb24gZGlzcGxheSwgYnV0IHNlZWtpbmcgaXMgZGlzYWJsZWQsIGFuZCBzaG91bGQgZGlzcGxheSBmaWxsZWRcbiAgICAgICAgICAgIHZhbHVlPXtzZWVrID8gY3VycmVudFRpbWUgOiBlbmRUaW1lfVxuICAgICAgICAgICAgbWluPXtzdGFydFRpbWV9XG4gICAgICAgICAgICBtYXg9e2VuZFRpbWV9XG4gICAgICAgICAgICBtYXJrcz17bWFya3N9XG4gICAgICAgICAgICB7Li4uaGFuZGxlcnN9XG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAge3N0YXJ0VGltZSA+PSAwICYmIGVuZFRpbWUgPiAwICYmIGZvcm1hdHRlZFRpbWUoZW5kVGltZSl9XG4gICAgICB7Y2hpbGRyZW4gJiZcbiAgICAgICAgW11cbiAgICAgICAgICAuY29uY2F0KGNoaWxkcmVuKVxuICAgICAgICAgIC5tYXAoY2hpbGQgPT5cbiAgICAgICAgICAgIGNsb25lRWxlbWVudChjaGlsZCwge3RpbWU6IHBvaW50ZXJBY3RpdmUgJiYgcG9pbnRlclN0YXRlLnZhbHVlfSlcbiAgICAgICAgICApfVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDxkaXYgLz5cbiAgKVxufVxuXG5TZWVrYmFyLnByb3BUeXBlcyA9IHtcbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0YXJ0VGltZTogUHJvcFR5cGVzLm51bWJlcixcbiAgY3VycmVudFRpbWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIGJ1ZmZlclRpbWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIGR1cmF0aW9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICBtYXJrczogUHJvcFR5cGVzLmFycmF5LFxuICBwbGF5OiBQcm9wVHlwZXMuZnVuYyxcbiAgcGF1c2U6IFByb3BUeXBlcy5mdW5jLFxuICBzZWVrOiBQcm9wVHlwZXMuZnVuYyxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBsZWZ0VGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0TWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgfSksXG4gIG9uU2Vla0V2ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWVrYmFyXG4iXX0= */"],style:rect&&{'--seekbar-left':`${rect.left}px`,'--seekbar-right':`${rect.right}px`,'--pointer-x':`${pointerState.x}px`},children:[pointerActive&&formattedTime(pointerState.value)||leftText&&jsx(FormattedMessage,{...leftText})||formattedTime(currentTime),jsx(ClassNames,{children:({css})=>jsx(SimpleSlider,{css:sliderStyle$1,classes:{track:css({backgroundColor:'red'}),...getSliderStyle(css),...classes},disabled:!seek,secondaryTrackValue:bufferTime// linear channel have time / duration display, but seeking is disabled, and should display filled
|
|
269
|
+
,value:seek?currentTime:endTime,min:startTime,max:endTime,marks:marks,...handlers,...rest})}),startTime>=0&&endTime>0&&formattedTime(endTime),children&&[].concat(children).map(child=>/*#__PURE__*/cloneElement(child,{time:pointerActive&&pointerState.value}))]}):jsx("div",{});};Seekbar$1.propTypes={style:PropTypes$1.object,classes:PropTypes$1.object,startTime:PropTypes$1.number,currentTime:PropTypes$1.number,bufferTime:PropTypes$1.number,duration:PropTypes$1.number,marks:PropTypes$1.array,play:PropTypes$1.func,pause:PropTypes$1.func,seek:PropTypes$1.func,disabled:PropTypes$1.bool,leftText:PropTypes$1.shape({id:PropTypes$1.string,defaultMessage:PropTypes$1.string}),onSeekEvent:PropTypes$1.func,children:PropTypes$1.node};/* @jsxImportSource @emotion/react */const rotateInfinite=keyframes`
|
|
270
|
+
0% {
|
|
271
|
+
opacity: 1;
|
|
272
|
+
transform: translate(-50%, -50%) rotate(0deg);
|
|
273
|
+
}
|
|
274
|
+
100% {
|
|
275
|
+
opacity: 1;
|
|
276
|
+
transform: translate(-50%, -50%) rotate(360deg);
|
|
277
|
+
}
|
|
278
|
+
`;const style$7={position:'absolute',top:'50%',left:'50%',display:'block',height:'3em',width:'3em',border:'0.25em solid #f22e05',borderRightColor:'transparent',borderRadius:'50%',opacity:0,animation:`${rotateInfinite} 1.2s linear infinite`};const LoadingSpinner=()=>jsx("div",{className:"kks-player__loading",css:style$7});/* @jsxImportSource @emotion/react */const ulReset={marginBlockStart:0,marginBlockEnd:0,paddingInlineStart:0};const mobileStyle={head:{position:'sticky',zIndex:'1',top:'0',display:'flex',alignItems:'center',padding:'1rem 1.5rem',color:'white',backgroundColor:'inherit',fontSize:'16px',fontWeight:'bold',button:{marginRight:'1rem',padding:'0',width:'1rem',height:'1rem',border:'none'}},overlay:{position:'absolute',top:'0',width:'100%',height:'100%',display:'flex',alignItems:'center',justifyContent:'center',backgroundColor:'rgba(0, 0, 0, 0.6)',opacity:'0',transform:'translateY(-100%)',transition:'opacity 0.2s ease, transform 0s ease 0.2s',ul:ulReset},container:{flex:'0 18rem',maxHeight:'calc(100% - 2rem)',color:'#ccc',background:'#333333',whiteSpace:'nowrap',borderRadius:'4px',userSelect:'none',overflow:'auto'},open:{opacity:'1',transform:'translateY(0)',transition:'opacity 0.2s ease, transform 0s'},title:{padding:'12px 18px'},dismiss:{background:`center / 1rem no-repeat url(${icon.close}), transparent`},back:{background:`center / 1rem no-repeat url(${icon.back}), transparent`},row:{cursor:'pointer',display:'flex',padding:'1rem 1.5rem',fontSize:'16px','::after':{content:'" "',marginLeft:'1rem',width:'20px',height:'20px',display:'inline-block',color:'white',backgroundPosition:'center',backgroundSize:'cover'}},space:{flex:'1'},hasOptions:{'::after':{backgroundImage:`url(${icon.arrowTop})`,transform:'rotate(90deg)'}},selected:{color:'white','::after':{backgroundImage:`url(${icon.check})`}}};// TODO some of styles are for older version UI design, can be simplified
|
|
279
|
+
const desktopStyle={overlay:{position:'absolute',bottom:'calc(5em + var(--bottom-spacing, 0rem))',right:'3rem',display:'flex',alignItems:'flex-end',width:'15rem',height:'calc(100% - 8rem - var(--bottom-spacing, 0rem))',outline:'none',opacity:'0',transform:'translateY(-100vh)',ul:ulReset},container:{...mobileStyle.container,maxHeight:'100%',background:'rgba(0, 0, 0, 0.7)'},head:{...mobileStyle.head,background:'#000'},row:{...mobileStyle.row,'::before':{...mobileStyle.row['::after'],marginLeft:'0',marginRight:'4px'}},hasOptions:{'::before':{display:'none'},'::after':{backgroundImage:`url(${icon.arrowTop})`,transform:'rotate(90deg)'}},selected:{'::before':{backgroundImage:`url(${icon.check})`}}};const MenuItemText=({text=''})=>jsx(FormattedMessage,{id:text,defaultMessage:jsx(FormattedMessage,{id:`KKS.SETTING.${text}`,defaultMessage:text})});MenuItemText.propTypes={text:PropTypes$1.string};const CloseButton=props=>jsx("button",{type:"button","aria-label":"Close Settings",css:mobileStyle.dismiss,...props});const BackButton=props=>jsx("button",{type:"button","aria-label":"Back",css:mobileStyle.back,...props});const Settings=({open,values,sections,type,style,onChange,onOpen,onClose})=>{const commonStyle=type==='desktop'?desktopStyle:mobileStyle;const[path,setPath]=useState('/');useEffect(()=>{if(!open){setPath('/');}},[open]);const ref=useOnclickOutside(()=>{if(open){onClose();}},{eventTypes:['click']});const currentSection=sections.find(it=>path===`/${it.name}`);const menu=path==='/'?{title:'KKS.SETTING',items:sections.map(({name,title,items})=>{var _items$find;return {link:`/${name}`,label:title,value:((_items$find=items.find(item=>item.value===values[name]))===null||_items$find===void 0?void 0:_items$find.label)||values[name]};})}:{title:currentSection.title,items:currentSection.items.map(({value,label=value})=>({label,checked:values[currentSection.name]===value,data:value})),previous:'/'};const navigate=dest=>requestAnimationFrame(()=>setPath(dest));return jsxs("div",{// TODO replace with <Backdrop>
|
|
280
|
+
role:"menu",tabIndex:"0",css:[commonStyle.overlay,open&&mobileStyle.open,style,process.env.NODE_ENV==="production"?"":";label:Settings;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNldHRpbmdzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJPTSIsImZpbGUiOiJTZXR0aW5ncy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgdXNlT25jbGlja091dHNpZGUgZnJvbSAncmVhY3QtY29vbC1vbmNsaWNrb3V0c2lkZSdcblxuaW1wb3J0IGljb24gZnJvbSAnc3R5bGUvaWNvbidcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnY29udGV4dC9JMThuJ1xuaW1wb3J0IHtGdW5jdGlvbkJhckV4dGVuc2lvbn0gZnJvbSAnLi91aUV4dGVuc2lvbnMnXG5pbXBvcnQge0J1dHRvbn0gZnJvbSAnLi9idXR0b25zJ1xuXG5jb25zdCB1bFJlc2V0ID0ge1xuICBtYXJnaW5CbG9ja1N0YXJ0OiAwLFxuICBtYXJnaW5CbG9ja0VuZDogMCxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiAwLFxufVxuXG5jb25zdCBtb2JpbGVTdHlsZSA9IHtcbiAgaGVhZDoge1xuICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcbiAgICB6SW5kZXg6ICcxJyxcbiAgICB0b3A6ICcwJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcGFkZGluZzogJzFyZW0gMS41cmVtJyxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdpbmhlcml0JyxcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBidXR0b246IHtcbiAgICAgIG1hcmdpblJpZ2h0OiAnMXJlbScsXG4gICAgICBwYWRkaW5nOiAnMCcsXG4gICAgICB3aWR0aDogJzFyZW0nLFxuICAgICAgaGVpZ2h0OiAnMXJlbScsXG4gICAgICBib3JkZXI6ICdub25lJyxcbiAgICB9LFxuICB9LFxuICBvdmVybGF5OiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnMCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgb3BhY2l0eTogJzAnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwMCUpJyxcbiAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwcyBlYXNlIDAuMnMnLFxuICAgIHVsOiB1bFJlc2V0LFxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAnMCAxOHJlbScsXG4gICAgbWF4SGVpZ2h0OiAnY2FsYygxMDAlIC0gMnJlbSknLFxuICAgIGNvbG9yOiAnI2NjYycsXG4gICAgYmFja2dyb3VuZDogJyMzMzMzMzMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIG92ZXJmbG93OiAnYXV0bycsXG4gIH0sXG4gIG9wZW46IHtcbiAgICBvcGFjaXR5OiAnMScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsXG4gICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMHMnLFxuICB9LFxuICB0aXRsZToge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE4cHgnLFxuICB9LFxuICBkaXNtaXNzOiB7XG4gICAgYmFja2dyb3VuZDogYGNlbnRlciAvIDFyZW0gbm8tcmVwZWF0IHVybCgke2ljb24uY2xvc2V9KSwgdHJhbnNwYXJlbnRgLFxuICB9LFxuICBiYWNrOiB7XG4gICAgYmFja2dyb3VuZDogYGNlbnRlciAvIDFyZW0gbm8tcmVwZWF0IHVybCgke2ljb24uYmFja30pLCB0cmFuc3BhcmVudGAsXG4gIH0sXG4gIHJvdzoge1xuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nOiAnMXJlbSAxLjVyZW0nLFxuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgJzo6YWZ0ZXInOiB7XG4gICAgICBjb250ZW50OiAnXCIgXCInLFxuICAgICAgbWFyZ2luTGVmdDogJzFyZW0nLFxuICAgICAgd2lkdGg6ICcyMHB4JyxcbiAgICAgIGhlaWdodDogJzIwcHgnLFxuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICBiYWNrZ3JvdW5kU2l6ZTogJ2NvdmVyJyxcbiAgICB9LFxuICB9LFxuICBzcGFjZToge1xuICAgIGZsZXg6ICcxJyxcbiAgfSxcbiAgaGFzT3B0aW9uczoge1xuICAgICc6OmFmdGVyJzoge1xuICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7aWNvbi5hcnJvd1RvcH0pYCxcbiAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSg5MGRlZyknLFxuICAgIH0sXG4gIH0sXG4gIHNlbGVjdGVkOiB7XG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgJzo6YWZ0ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtpY29uLmNoZWNrfSlgLFxuICAgIH0sXG4gIH0sXG59XG5cbi8vIFRPRE8gc29tZSBvZiBzdHlsZXMgYXJlIGZvciBvbGRlciB2ZXJzaW9uIFVJIGRlc2lnbiwgY2FuIGJlIHNpbXBsaWZpZWRcbmNvbnN0IGRlc2t0b3BTdHlsZSA9IHtcbiAgb3ZlcmxheToge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGJvdHRvbTogJ2NhbGMoNWVtICsgdmFyKC0tYm90dG9tLXNwYWNpbmcsIDByZW0pKScsXG4gICAgcmlnaHQ6ICczcmVtJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyxcbiAgICB3aWR0aDogJzE1cmVtJyxcbiAgICBoZWlnaHQ6ICdjYWxjKDEwMCUgLSA4cmVtIC0gdmFyKC0tYm90dG9tLXNwYWNpbmcsIDByZW0pKScsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIG9wYWNpdHk6ICcwJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMDB2aCknLFxuICAgIHVsOiB1bFJlc2V0LFxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICAuLi5tb2JpbGVTdHlsZS5jb250YWluZXIsXG4gICAgbWF4SGVpZ2h0OiAnMTAwJScsXG4gICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScsXG4gIH0sXG4gIGhlYWQ6IHtcbiAgICAuLi5tb2JpbGVTdHlsZS5oZWFkLFxuICAgIGJhY2tncm91bmQ6ICcjMDAwJyxcbiAgfSxcbiAgcm93OiB7XG4gICAgLi4ubW9iaWxlU3R5bGUucm93LFxuICAgICc6OmJlZm9yZSc6IHtcbiAgICAgIC4uLm1vYmlsZVN0eWxlLnJvd1snOjphZnRlciddLFxuICAgICAgbWFyZ2luTGVmdDogJzAnLFxuICAgICAgbWFyZ2luUmlnaHQ6ICc0cHgnLFxuICAgIH0sXG4gIH0sXG4gIGhhc09wdGlvbnM6IHtcbiAgICAnOjpiZWZvcmUnOiB7XG4gICAgICBkaXNwbGF5OiAnbm9uZScsXG4gICAgfSxcbiAgICAnOjphZnRlcic6IHtcbiAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2ljb24uYXJyb3dUb3B9KWAsXG4gICAgICB0cmFuc2Zvcm06ICdyb3RhdGUoOTBkZWcpJyxcbiAgICB9LFxuICB9LFxuICBzZWxlY3RlZDoge1xuICAgICc6OmJlZm9yZSc6IHtcbiAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2ljb24uY2hlY2t9KWAsXG4gICAgfSxcbiAgfSxcbn1cblxuY29uc3QgTWVudUl0ZW1UZXh0ID0gKHt0ZXh0ID0gJyd9KSA9PiAoXG4gIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgaWQ9e3RleHR9XG4gICAgZGVmYXVsdE1lc3NhZ2U9e1xuICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e2BLS1MuU0VUVElORy4ke3RleHR9YH0gZGVmYXVsdE1lc3NhZ2U9e3RleHR9IC8+XG4gICAgfVxuICAvPlxuKVxuXG5NZW51SXRlbVRleHQucHJvcFR5cGVzID0ge1xuICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxufVxuXG5jb25zdCBDbG9zZUJ1dHRvbiA9IHByb3BzID0+IChcbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGFyaWEtbGFiZWw9XCJDbG9zZSBTZXR0aW5nc1wiXG4gICAgY3NzPXttb2JpbGVTdHlsZS5kaXNtaXNzfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbilcblxuY29uc3QgQmFja0J1dHRvbiA9IHByb3BzID0+IChcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkJhY2tcIiBjc3M9e21vYmlsZVN0eWxlLmJhY2t9IHsuLi5wcm9wc30gLz5cbilcblxuY29uc3QgU2V0dGluZ3MgPSAoe1xuICBvcGVuLFxuICB2YWx1ZXMsXG4gIHNlY3Rpb25zLFxuICB0eXBlLFxuICBzdHlsZSxcbiAgb25DaGFuZ2UsXG4gIG9uT3BlbixcbiAgb25DbG9zZSxcbn0pID0+IHtcbiAgY29uc3QgY29tbW9uU3R5bGUgPSB0eXBlID09PSAnZGVza3RvcCcgPyBkZXNrdG9wU3R5bGUgOiBtb2JpbGVTdHlsZVxuICBjb25zdCBbcGF0aCwgc2V0UGF0aF0gPSB1c2VTdGF0ZSgnLycpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICBzZXRQYXRoKCcvJylcbiAgICB9XG4gIH0sIFtvcGVuXSlcblxuICBjb25zdCByZWYgPSB1c2VPbmNsaWNrT3V0c2lkZShcbiAgICAoKSA9PiB7XG4gICAgICBpZiAob3Blbikge1xuICAgICAgICBvbkNsb3NlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIHtldmVudFR5cGVzOiBbJ2NsaWNrJ119XG4gIClcbiAgY29uc3QgY3VycmVudFNlY3Rpb24gPSBzZWN0aW9ucy5maW5kKGl0ID0+IHBhdGggPT09IGAvJHtpdC5uYW1lfWApXG4gIGNvbnN0IG1lbnUgPVxuICAgIHBhdGggPT09ICcvJ1xuICAgICAgPyB7XG4gICAgICAgICAgdGl0bGU6ICdLS1MuU0VUVElORycsXG4gICAgICAgICAgaXRlbXM6IHNlY3Rpb25zLm1hcCgoe25hbWUsIHRpdGxlLCBpdGVtc30pID0+ICh7XG4gICAgICAgICAgICBsaW5rOiBgLyR7bmFtZX1gLFxuICAgICAgICAgICAgbGFiZWw6IHRpdGxlLFxuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIGl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZXNbbmFtZV0pPy5sYWJlbCB8fFxuICAgICAgICAgICAgICB2YWx1ZXNbbmFtZV0sXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICB0aXRsZTogY3VycmVudFNlY3Rpb24udGl0bGUsXG4gICAgICAgICAgaXRlbXM6IGN1cnJlbnRTZWN0aW9uLml0ZW1zLm1hcCgoe3ZhbHVlLCBsYWJlbCA9IHZhbHVlfSkgPT4gKHtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgY2hlY2tlZDogdmFsdWVzW2N1cnJlbnRTZWN0aW9uLm5hbWVdID09PSB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBwcmV2aW91czogJy8nLFxuICAgICAgICB9XG4gIGNvbnN0IG5hdmlnYXRlID0gZGVzdCA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gc2V0UGF0aChkZXN0KSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgLy8gVE9ETyByZXBsYWNlIHdpdGggPEJhY2tkcm9wPlxuICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgIGNzcz17W2NvbW1vblN0eWxlLm92ZXJsYXksIG9wZW4gJiYgbW9iaWxlU3R5bGUub3Blbiwgc3R5bGVdfVxuICAgICAgb25DbGljaz17ZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgPlxuICAgICAgPEZ1bmN0aW9uQmFyRXh0ZW5zaW9uPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwic2V0dGluZ1wiXG4gICAgICAgICAgdGl0bGU9XCJLS1MuU0VUVElOR1wiXG4gICAgICAgICAgZGlzYWJsZWQ9e3NlY3Rpb25zLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICBvbkNsaWNrPXtvbk9wZW59XG4gICAgICAgIC8+XG4gICAgICA8L0Z1bmN0aW9uQmFyRXh0ZW5zaW9uPlxuICAgICAgPHVsIHJvbGU9XCJtZW51XCIgcmVmPXtyZWZ9IGNzcz17Y29tbW9uU3R5bGUuY29udGFpbmVyfT5cbiAgICAgICAgPGRpdiBjc3M9e2NvbW1vblN0eWxlLmhlYWR9PlxuICAgICAgICAgIHttZW51LnByZXZpb3VzID8gKFxuICAgICAgICAgICAgPEJhY2tCdXR0b24gb25DbGljaz17KCkgPT4gbmF2aWdhdGUoJy8nKX0gLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgdHlwZSAhPT0gJ2Rlc2t0b3AnICYmIDxDbG9zZUJ1dHRvbiBvbkNsaWNrPXtvbkNsb3NlfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e21lbnUudGl0bGV9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7bWVudS5pdGVtcy5tYXAoKHtsYWJlbCwgbGluaywgdmFsdWUsIGRhdGEsIGNoZWNrZWR9KSA9PiAoXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zXG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICByb2xlPXtsaW5rID8gJ21lbnVpdGVtJyA6ICdtZW51aXRlbXJhZGlvJ31cbiAgICAgICAgICAgIGFyaWEtY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgIGNzcz17W1xuICAgICAgICAgICAgICBjb21tb25TdHlsZS5yb3csXG4gICAgICAgICAgICAgIGxpbmsgJiYgY29tbW9uU3R5bGUuaGFzT3B0aW9ucyxcbiAgICAgICAgICAgICAgY2hlY2tlZCAmJiBjb21tb25TdHlsZS5zZWxlY3RlZCxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBrZXk9e2xhYmVsfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgbGlua1xuICAgICAgICAgICAgICAgID8gbmF2aWdhdGUobGluaylcbiAgICAgICAgICAgICAgICA6IG9uQ2hhbmdlKHtuYW1lOiBjdXJyZW50U2VjdGlvbi5uYW1lLCB2YWx1ZTogZGF0YX0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1lbnVJdGVtVGV4dCB0ZXh0PXtsYWJlbH0gLz5cbiAgICAgICAgICAgIDxkaXYgY3NzPXttb2JpbGVTdHlsZS5zcGFjZX0gLz5cbiAgICAgICAgICAgIHt2YWx1ZSAmJiA8TWVudUl0ZW1UZXh0IHRleHQ9e3ZhbHVlLnRvU3RyaW5nKCl9IC8+fVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICkpfVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5TZXR0aW5ncy5wcm9wVHlwZXMgPSB7XG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICB2YWx1ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlY3Rpb25zOiBQcm9wVHlwZXMuYXJyYXksXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN0eWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2V0dGluZ3NcbiJdfQ== */"],onClick:event=>event.stopPropagation(),children:[jsx(FunctionBarExtension,{children:jsx(Button,{startIcon:"setting",title:"KKS.SETTING",disabled:sections.length===0,onClick:onOpen})}),jsxs("ul",{role:"menu",ref:ref,css:commonStyle.container,children:[jsxs("div",{css:commonStyle.head,children:[menu.previous?jsx(BackButton,{onClick:()=>navigate('/')}):type!=='desktop'&&jsx(CloseButton,{onClick:onClose}),jsx(FormattedMessage,{id:menu.title})]}),menu.items.map(({label,link,value,data,checked})=>// eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
|
|
281
|
+
jsxs("li",{role:link?'menuitem':'menuitemradio',"aria-checked":checked,css:[commonStyle.row,link&&commonStyle.hasOptions,checked&&commonStyle.selected,process.env.NODE_ENV==="production"?"":";label:Settings;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNldHRpbmdzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9RWSIsImZpbGUiOiJTZXR0aW5ncy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgdXNlT25jbGlja091dHNpZGUgZnJvbSAncmVhY3QtY29vbC1vbmNsaWNrb3V0c2lkZSdcblxuaW1wb3J0IGljb24gZnJvbSAnc3R5bGUvaWNvbidcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnY29udGV4dC9JMThuJ1xuaW1wb3J0IHtGdW5jdGlvbkJhckV4dGVuc2lvbn0gZnJvbSAnLi91aUV4dGVuc2lvbnMnXG5pbXBvcnQge0J1dHRvbn0gZnJvbSAnLi9idXR0b25zJ1xuXG5jb25zdCB1bFJlc2V0ID0ge1xuICBtYXJnaW5CbG9ja1N0YXJ0OiAwLFxuICBtYXJnaW5CbG9ja0VuZDogMCxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiAwLFxufVxuXG5jb25zdCBtb2JpbGVTdHlsZSA9IHtcbiAgaGVhZDoge1xuICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcbiAgICB6SW5kZXg6ICcxJyxcbiAgICB0b3A6ICcwJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcGFkZGluZzogJzFyZW0gMS41cmVtJyxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdpbmhlcml0JyxcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBidXR0b246IHtcbiAgICAgIG1hcmdpblJpZ2h0OiAnMXJlbScsXG4gICAgICBwYWRkaW5nOiAnMCcsXG4gICAgICB3aWR0aDogJzFyZW0nLFxuICAgICAgaGVpZ2h0OiAnMXJlbScsXG4gICAgICBib3JkZXI6ICdub25lJyxcbiAgICB9LFxuICB9LFxuICBvdmVybGF5OiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnMCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgb3BhY2l0eTogJzAnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwMCUpJyxcbiAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwcyBlYXNlIDAuMnMnLFxuICAgIHVsOiB1bFJlc2V0LFxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICBmbGV4OiAnMCAxOHJlbScsXG4gICAgbWF4SGVpZ2h0OiAnY2FsYygxMDAlIC0gMnJlbSknLFxuICAgIGNvbG9yOiAnI2NjYycsXG4gICAgYmFja2dyb3VuZDogJyMzMzMzMzMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIG92ZXJmbG93OiAnYXV0bycsXG4gIH0sXG4gIG9wZW46IHtcbiAgICBvcGFjaXR5OiAnMScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsXG4gICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMHMnLFxuICB9LFxuICB0aXRsZToge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE4cHgnLFxuICB9LFxuICBkaXNtaXNzOiB7XG4gICAgYmFja2dyb3VuZDogYGNlbnRlciAvIDFyZW0gbm8tcmVwZWF0IHVybCgke2ljb24uY2xvc2V9KSwgdHJhbnNwYXJlbnRgLFxuICB9LFxuICBiYWNrOiB7XG4gICAgYmFja2dyb3VuZDogYGNlbnRlciAvIDFyZW0gbm8tcmVwZWF0IHVybCgke2ljb24uYmFja30pLCB0cmFuc3BhcmVudGAsXG4gIH0sXG4gIHJvdzoge1xuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nOiAnMXJlbSAxLjVyZW0nLFxuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgJzo6YWZ0ZXInOiB7XG4gICAgICBjb250ZW50OiAnXCIgXCInLFxuICAgICAgbWFyZ2luTGVmdDogJzFyZW0nLFxuICAgICAgd2lkdGg6ICcyMHB4JyxcbiAgICAgIGhlaWdodDogJzIwcHgnLFxuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICBiYWNrZ3JvdW5kU2l6ZTogJ2NvdmVyJyxcbiAgICB9LFxuICB9LFxuICBzcGFjZToge1xuICAgIGZsZXg6ICcxJyxcbiAgfSxcbiAgaGFzT3B0aW9uczoge1xuICAgICc6OmFmdGVyJzoge1xuICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7aWNvbi5hcnJvd1RvcH0pYCxcbiAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSg5MGRlZyknLFxuICAgIH0sXG4gIH0sXG4gIHNlbGVjdGVkOiB7XG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgJzo6YWZ0ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtpY29uLmNoZWNrfSlgLFxuICAgIH0sXG4gIH0sXG59XG5cbi8vIFRPRE8gc29tZSBvZiBzdHlsZXMgYXJlIGZvciBvbGRlciB2ZXJzaW9uIFVJIGRlc2lnbiwgY2FuIGJlIHNpbXBsaWZpZWRcbmNvbnN0IGRlc2t0b3BTdHlsZSA9IHtcbiAgb3ZlcmxheToge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGJvdHRvbTogJ2NhbGMoNWVtICsgdmFyKC0tYm90dG9tLXNwYWNpbmcsIDByZW0pKScsXG4gICAgcmlnaHQ6ICczcmVtJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyxcbiAgICB3aWR0aDogJzE1cmVtJyxcbiAgICBoZWlnaHQ6ICdjYWxjKDEwMCUgLSA4cmVtIC0gdmFyKC0tYm90dG9tLXNwYWNpbmcsIDByZW0pKScsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIG9wYWNpdHk6ICcwJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMDB2aCknLFxuICAgIHVsOiB1bFJlc2V0LFxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICAuLi5tb2JpbGVTdHlsZS5jb250YWluZXIsXG4gICAgbWF4SGVpZ2h0OiAnMTAwJScsXG4gICAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC43KScsXG4gIH0sXG4gIGhlYWQ6IHtcbiAgICAuLi5tb2JpbGVTdHlsZS5oZWFkLFxuICAgIGJhY2tncm91bmQ6ICcjMDAwJyxcbiAgfSxcbiAgcm93OiB7XG4gICAgLi4ubW9iaWxlU3R5bGUucm93LFxuICAgICc6OmJlZm9yZSc6IHtcbiAgICAgIC4uLm1vYmlsZVN0eWxlLnJvd1snOjphZnRlciddLFxuICAgICAgbWFyZ2luTGVmdDogJzAnLFxuICAgICAgbWFyZ2luUmlnaHQ6ICc0cHgnLFxuICAgIH0sXG4gIH0sXG4gIGhhc09wdGlvbnM6IHtcbiAgICAnOjpiZWZvcmUnOiB7XG4gICAgICBkaXNwbGF5OiAnbm9uZScsXG4gICAgfSxcbiAgICAnOjphZnRlcic6IHtcbiAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2ljb24uYXJyb3dUb3B9KWAsXG4gICAgICB0cmFuc2Zvcm06ICdyb3RhdGUoOTBkZWcpJyxcbiAgICB9LFxuICB9LFxuICBzZWxlY3RlZDoge1xuICAgICc6OmJlZm9yZSc6IHtcbiAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2ljb24uY2hlY2t9KWAsXG4gICAgfSxcbiAgfSxcbn1cblxuY29uc3QgTWVudUl0ZW1UZXh0ID0gKHt0ZXh0ID0gJyd9KSA9PiAoXG4gIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgaWQ9e3RleHR9XG4gICAgZGVmYXVsdE1lc3NhZ2U9e1xuICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e2BLS1MuU0VUVElORy4ke3RleHR9YH0gZGVmYXVsdE1lc3NhZ2U9e3RleHR9IC8+XG4gICAgfVxuICAvPlxuKVxuXG5NZW51SXRlbVRleHQucHJvcFR5cGVzID0ge1xuICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxufVxuXG5jb25zdCBDbG9zZUJ1dHRvbiA9IHByb3BzID0+IChcbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGFyaWEtbGFiZWw9XCJDbG9zZSBTZXR0aW5nc1wiXG4gICAgY3NzPXttb2JpbGVTdHlsZS5kaXNtaXNzfVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbilcblxuY29uc3QgQmFja0J1dHRvbiA9IHByb3BzID0+IChcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkJhY2tcIiBjc3M9e21vYmlsZVN0eWxlLmJhY2t9IHsuLi5wcm9wc30gLz5cbilcblxuY29uc3QgU2V0dGluZ3MgPSAoe1xuICBvcGVuLFxuICB2YWx1ZXMsXG4gIHNlY3Rpb25zLFxuICB0eXBlLFxuICBzdHlsZSxcbiAgb25DaGFuZ2UsXG4gIG9uT3BlbixcbiAgb25DbG9zZSxcbn0pID0+IHtcbiAgY29uc3QgY29tbW9uU3R5bGUgPSB0eXBlID09PSAnZGVza3RvcCcgPyBkZXNrdG9wU3R5bGUgOiBtb2JpbGVTdHlsZVxuICBjb25zdCBbcGF0aCwgc2V0UGF0aF0gPSB1c2VTdGF0ZSgnLycpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICBzZXRQYXRoKCcvJylcbiAgICB9XG4gIH0sIFtvcGVuXSlcblxuICBjb25zdCByZWYgPSB1c2VPbmNsaWNrT3V0c2lkZShcbiAgICAoKSA9PiB7XG4gICAgICBpZiAob3Blbikge1xuICAgICAgICBvbkNsb3NlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIHtldmVudFR5cGVzOiBbJ2NsaWNrJ119XG4gIClcbiAgY29uc3QgY3VycmVudFNlY3Rpb24gPSBzZWN0aW9ucy5maW5kKGl0ID0+IHBhdGggPT09IGAvJHtpdC5uYW1lfWApXG4gIGNvbnN0IG1lbnUgPVxuICAgIHBhdGggPT09ICcvJ1xuICAgICAgPyB7XG4gICAgICAgICAgdGl0bGU6ICdLS1MuU0VUVElORycsXG4gICAgICAgICAgaXRlbXM6IHNlY3Rpb25zLm1hcCgoe25hbWUsIHRpdGxlLCBpdGVtc30pID0+ICh7XG4gICAgICAgICAgICBsaW5rOiBgLyR7bmFtZX1gLFxuICAgICAgICAgICAgbGFiZWw6IHRpdGxlLFxuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIGl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZXNbbmFtZV0pPy5sYWJlbCB8fFxuICAgICAgICAgICAgICB2YWx1ZXNbbmFtZV0sXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICB0aXRsZTogY3VycmVudFNlY3Rpb24udGl0bGUsXG4gICAgICAgICAgaXRlbXM6IGN1cnJlbnRTZWN0aW9uLml0ZW1zLm1hcCgoe3ZhbHVlLCBsYWJlbCA9IHZhbHVlfSkgPT4gKHtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgY2hlY2tlZDogdmFsdWVzW2N1cnJlbnRTZWN0aW9uLm5hbWVdID09PSB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBwcmV2aW91czogJy8nLFxuICAgICAgICB9XG4gIGNvbnN0IG5hdmlnYXRlID0gZGVzdCA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gc2V0UGF0aChkZXN0KSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgLy8gVE9ETyByZXBsYWNlIHdpdGggPEJhY2tkcm9wPlxuICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgIGNzcz17W2NvbW1vblN0eWxlLm92ZXJsYXksIG9wZW4gJiYgbW9iaWxlU3R5bGUub3Blbiwgc3R5bGVdfVxuICAgICAgb25DbGljaz17ZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgPlxuICAgICAgPEZ1bmN0aW9uQmFyRXh0ZW5zaW9uPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwic2V0dGluZ1wiXG4gICAgICAgICAgdGl0bGU9XCJLS1MuU0VUVElOR1wiXG4gICAgICAgICAgZGlzYWJsZWQ9e3NlY3Rpb25zLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICBvbkNsaWNrPXtvbk9wZW59XG4gICAgICAgIC8+XG4gICAgICA8L0Z1bmN0aW9uQmFyRXh0ZW5zaW9uPlxuICAgICAgPHVsIHJvbGU9XCJtZW51XCIgcmVmPXtyZWZ9IGNzcz17Y29tbW9uU3R5bGUuY29udGFpbmVyfT5cbiAgICAgICAgPGRpdiBjc3M9e2NvbW1vblN0eWxlLmhlYWR9PlxuICAgICAgICAgIHttZW51LnByZXZpb3VzID8gKFxuICAgICAgICAgICAgPEJhY2tCdXR0b24gb25DbGljaz17KCkgPT4gbmF2aWdhdGUoJy8nKX0gLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgdHlwZSAhPT0gJ2Rlc2t0b3AnICYmIDxDbG9zZUJ1dHRvbiBvbkNsaWNrPXtvbkNsb3NlfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e21lbnUudGl0bGV9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7bWVudS5pdGVtcy5tYXAoKHtsYWJlbCwgbGluaywgdmFsdWUsIGRhdGEsIGNoZWNrZWR9KSA9PiAoXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zXG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICByb2xlPXtsaW5rID8gJ21lbnVpdGVtJyA6ICdtZW51aXRlbXJhZGlvJ31cbiAgICAgICAgICAgIGFyaWEtY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgIGNzcz17W1xuICAgICAgICAgICAgICBjb21tb25TdHlsZS5yb3csXG4gICAgICAgICAgICAgIGxpbmsgJiYgY29tbW9uU3R5bGUuaGFzT3B0aW9ucyxcbiAgICAgICAgICAgICAgY2hlY2tlZCAmJiBjb21tb25TdHlsZS5zZWxlY3RlZCxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBrZXk9e2xhYmVsfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgbGlua1xuICAgICAgICAgICAgICAgID8gbmF2aWdhdGUobGluaylcbiAgICAgICAgICAgICAgICA6IG9uQ2hhbmdlKHtuYW1lOiBjdXJyZW50U2VjdGlvbi5uYW1lLCB2YWx1ZTogZGF0YX0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1lbnVJdGVtVGV4dCB0ZXh0PXtsYWJlbH0gLz5cbiAgICAgICAgICAgIDxkaXYgY3NzPXttb2JpbGVTdHlsZS5zcGFjZX0gLz5cbiAgICAgICAgICAgIHt2YWx1ZSAmJiA8TWVudUl0ZW1UZXh0IHRleHQ9e3ZhbHVlLnRvU3RyaW5nKCl9IC8+fVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICkpfVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5TZXR0aW5ncy5wcm9wVHlwZXMgPSB7XG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICB2YWx1ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlY3Rpb25zOiBQcm9wVHlwZXMuYXJyYXksXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN0eWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2V0dGluZ3NcbiJdfQ== */"],onClick:()=>link?navigate(link):onChange({name:currentSection.name,value:data}),children:[jsx(MenuItemText,{text:label}),jsx("div",{css:mobileStyle.space}),value&&jsx(MenuItemText,{text:value.toString()})]},label))]})]});};Settings.propTypes={open:PropTypes$1.bool,values:PropTypes$1.object,sections:PropTypes$1.array,type:PropTypes$1.string,style:PropTypes$1.bool,onChange:PropTypes$1.func,onOpen:PropTypes$1.func,onClose:PropTypes$1.func};/* @jsxImportSource @emotion/react */ /* eslint-disable react/prop-types */ /* eslint-disable jsx-a11y/no-static-element-interactions */const style$6={position:'absolute',zIndex:0,width:'100%',height:'100%'};// TODO animations
|
|
282
|
+
const PlayPanel=({onClick})=>jsx("div",{css:style$6,onClick:onClick});function _EMOTION_STRINGIFIED_CSS_ERROR__$4(){return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).";}const style$5={display:'inline-flex',alignItems:'center'};/* eslint-disable react/prop-types */var _ref$4=process.env.NODE_ENV==="production"?{name:"1vats5l",styles:"margin-left:0.8rem;width:4em"}:{name:"1vofojj-VolumeControl",styles:"margin-left:0.8rem;width:4em;label:VolumeControl;",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZvbHVtZUNvbnRyb2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUNVIiwiZmlsZSI6IlZvbHVtZUNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbmRlbnQgKi9cbi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmltcG9ydCB7dXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7QnV0dG9ufSBmcm9tICdwbGF5ZXJVaS9idXR0b25zJ1xuaW1wb3J0IFNpbXBsZVNsaWRlciBmcm9tICdwbGF5ZXJVaS9TaW1wbGVTbGlkZXInXG5cbmNvbnN0IHN0eWxlID0ge1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbn1cblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcHJvcC10eXBlcyAqL1xuY29uc3QgVm9sdW1lQ29udHJvbCA9ICh7XG4gIHNsaWRlciA9IGZhbHNlLFxuICBzdWJzY3JpYmUsXG4gIG9uQ2hhbmdlLFxuICB0b2dnbGVNdXRlLFxuICBvbkF1ZGlvVm9sdW1lU2V0dGluZ0NoYW5nZUV2ZW50LFxuICBvbkF1ZGlvTXV0ZVNldHRpbmdDaGFuZ2UsXG59KSA9PiB7XG4gIGNvbnN0IFt7dm9sdW1lLCBtdXRlZH0sIHNldFN0YXRlXSA9IHVzZVN0YXRlKHttdXRlZDogZmFsc2UsIHZvbHVtZTogMX0pXG4gIHVzZUVmZmVjdCgoKSA9PiBzdWJzY3JpYmUoc2V0U3RhdGUpLCBbXSlcbiAgY29uc3QgaWNvbk5hbWUgPSBtdXRlZCA/ICdtdXRlJyA6IHZvbHVtZSA8IDAuNSA/ICd2b2x1bWVMb3cnIDogJ3ZvbHVtZUhpZ2gnXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImtrcy1wbGF5ZXJfX3ZvbHVtZVwiIGNzcz17c3R5bGV9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBzdGFydEljb249e2ljb25OYW1lfVxuICAgICAgICB0aXRsZT17bXV0ZWQgPyAnS0tTLlBMQVlFUi5VTk1VVEUnIDogJ0tLUy5QTEFZRVIuTVVURSd9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBvbkF1ZGlvTXV0ZVNldHRpbmdDaGFuZ2UoIW11dGVkKVxuICAgICAgICAgIHRvZ2dsZU11dGUoKVxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIHtzbGlkZXIgJiYgKFxuICAgICAgICA8U2ltcGxlU2xpZGVyXG4gICAgICAgICAgY3NzPXt7XG4gICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMC44cmVtJyxcbiAgICAgICAgICAgIHdpZHRoOiAnNGVtJyxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhbHVlPXttdXRlZCA/IDAgOiB2b2x1bWV9XG4gICAgICAgICAgbWF4PXsxfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoXywge3ZhbHVlfSkgPT4ge1xuICAgICAgICAgICAgb25DaGFuZ2UodmFsdWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNoYW5nZUNvbW1pdHRlZD17KF8sIHt2YWx1ZX0pID0+IHtcbiAgICAgICAgICAgIG9uQXVkaW9Wb2x1bWVTZXR0aW5nQ2hhbmdlRXZlbnQodmFsdWUpXG4gICAgICAgICAgICBvbkNoYW5nZSh2YWx1ZSwge2NvbW1pdDogdHJ1ZX0pXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVm9sdW1lQ29udHJvbFxuIl19 */",toString:_EMOTION_STRINGIFIED_CSS_ERROR__$4};const VolumeControl=({slider=false,subscribe,onChange,toggleMute,onAudioVolumeSettingChangeEvent,onAudioMuteSettingChange})=>{const[{volume,muted},setState]=useState({muted:false,volume:1});useEffect(()=>subscribe(setState),[]);const iconName=muted?'mute':volume<0.5?'volumeLow':'volumeHigh';return jsxs("div",{className:"kks-player__volume",css:style$5,children:[jsx(Button,{startIcon:iconName,title:muted?'KKS.PLAYER.UNMUTE':'KKS.PLAYER.MUTE',onClick:()=>{onAudioMuteSettingChange(!muted);toggleMute();}}),slider&&jsx(SimpleSlider,{css:_ref$4,value:muted?0:volume,max:1,onChange:(_,{value})=>{onChange(value);},onChangeCommitted:(_,{value})=>{onAudioVolumeSettingChangeEvent(value);onChange(value,{commit:true});}})]});};function _EMOTION_STRINGIFIED_CSS_ERROR__$3(){return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).";}const formatTime=second=>new Date(second*1000).toTimeString().match(/\d\d:\d\d/)[0];var _ref$3=process.env.NODE_ENV==="production"?{name:"5snxxs",styles:"font-size:0.75em"}:{name:"1w3k87w-ChannelTitle",styles:"font-size:0.75em;label:ChannelTitle;",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNoYW5uZWxUaXRsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPTyIsImZpbGUiOiJDaGFubmVsVGl0bGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmNvbnN0IGZvcm1hdFRpbWUgPSBzZWNvbmQgPT5cbiAgbmV3IERhdGUoc2Vjb25kICogMTAwMCkudG9UaW1lU3RyaW5nKCkubWF0Y2goL1xcZFxcZDpcXGRcXGQvKVswXVxuXG5jb25zdCBDaGFubmVsVGl0bGUgPSAoe3RpdGxlID0gJycsIHN0YXJ0VGltZSwgZW5kVGltZX0pID0+IChcbiAgPGRpdiBjc3M9e3tmb250U2l6ZTogJzAuNzVlbSd9fT5cbiAgICB7c3RhcnRUaW1lICYmIGVuZFRpbWUgJiYgKFxuICAgICAgPHNwYW4+XG4gICAgICAgIHtmb3JtYXRUaW1lKHN0YXJ0VGltZSl9IC0ge2Zvcm1hdFRpbWUoZW5kVGltZSl9XG4gICAgICA8L3NwYW4+XG4gICAgKX17JyAnfVxuICAgIHt0aXRsZX1cbiAgPC9kaXY+XG4pXG5cbkNoYW5uZWxUaXRsZS5wcm9wVHlwZXMgPSB7XG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdGFydFRpbWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIGVuZFRpbWU6IFByb3BUeXBlcy5udW1iZXIsXG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxUaXRsZVxuIl19 */",toString:_EMOTION_STRINGIFIED_CSS_ERROR__$3};const ChannelTitle=({title='',startTime,endTime})=>jsxs("div",{css:_ref$3,children:[startTime&&endTime&&jsxs("span",{children:[formatTime(startTime)," - ",formatTime(endTime)]}),' ',title]});ChannelTitle.propTypes={title:PropTypes$1.string,startTime:PropTypes$1.number,endTime:PropTypes$1.number};/* eslint-disable no-param-reassign */const loadNative=({videoElement})=>({load:({native:url})=>{videoElement.src=url;videoElement.style.height='100%';videoElement.style.width='100%';},play:()=>videoElement.play(),pause:()=>videoElement.pause(),seek:time=>{videoElement.currentTime=time;},getVideoElement:()=>videoElement,getVideoQuality:()=>({}),destroy:()=>{}});/*
|
|
283
|
+
We overwrite standard function for getting mediaSource object
|
|
284
|
+
because Chrome supports VideoTrack only in experiment mode.
|
|
285
|
+
*/const getUrlObject=fn=>{const createObjectURL=window.URL.createObjectURL.bind();window.URL.createObjectURL=blob=>{if(blob.addSourceBuffer){fn(blob);}return createObjectURL(blob);};};/*! @license
|
|
286
|
+
* Shaka Player
|
|
287
|
+
* Copyright 2016 Google LLC
|
|
288
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
289
|
+
*/let shaka$1;const shakaLog={v1:()=>{}};const asMap=object=>{const map=new Map();for(const key of Object.keys(object)){map.set(key,object[key]);}return map;};const makeResponse=(headers,data,status,uri,responseURL,requestType)=>{if(status>=200&&status<=299&&status!=202){// Most 2xx HTTP codes are success cases.
|
|
290
|
+
/** @type {shaka.extern.Response} */const response={uri:responseURL||uri,originalUri:uri,data,status,headers,fromCache:!!headers['x-shaka-from-cache']};return response;}let responseText=null;try{responseText=shaka$1.util.StringUtils.fromBytesAutoDetect(data);// eslint-disable-next-line no-empty
|
|
291
|
+
}catch(exception){}const severity=status==401||status==403?shaka$1.util.Error.Severity.CRITICAL:shaka$1.util.Error.Severity.RECOVERABLE;throw new shaka$1.util.Error(severity,shaka$1.util.Error.Category.NETWORK,shaka$1.util.Error.Code.BAD_HTTP_STATUS,uri,status,responseText,headers,requestType);};const goog$1={asserts:{assert:()=>{}}};/**
|
|
292
|
+
* @summary A networking plugin to handle http and https URIs via the Fetch API.
|
|
293
|
+
* @export
|
|
294
|
+
*/class HttpFetchPlugin{/**
|
|
295
|
+
* @param {string} uri
|
|
296
|
+
* @param {shaka.extern.Request} request
|
|
297
|
+
* @param {shaka.net.NetworkingEngine.RequestType} requestType
|
|
298
|
+
* @param {shaka.extern.ProgressUpdated} progressUpdated Called when a
|
|
299
|
+
* progress event happened.
|
|
300
|
+
* @param {shaka.extern.HeadersReceived} headersReceived Called when the
|
|
301
|
+
* headers for the download are received, but before the body is.
|
|
302
|
+
* @return {!shaka.extern.IAbortableOperation.<shaka.extern.Response>}
|
|
303
|
+
* @export
|
|
304
|
+
*/static parse(uri,request,requestType,progressUpdated,headersReceived){const headers=new HttpFetchPlugin.Headers_();asMap(request.headers).forEach((value,key)=>{headers.append(key,value);});const controller=new HttpFetchPlugin.AbortController_();/** @type {!RequestInit} */const init={// Edge does not treat null as undefined for body; https://bit.ly/2luyE6x
|
|
305
|
+
body:request.body||undefined,headers,method:request.method,signal:controller.signal,credentials:request.allowCrossSiteCredentials?'include':undefined};/** @type {shaka.net.HttpFetchPlugin.AbortStatus} */const abortStatus={canceled:false,timedOut:false};const pendingRequest=HttpFetchPlugin.request_(uri,requestType,init,abortStatus,progressUpdated,headersReceived,request.streamDataCallback);/** @type {!shaka.util.AbortableOperation} */const op=new shaka$1.util.AbortableOperation(pendingRequest,()=>{abortStatus.canceled=true;controller.abort();return Promise.resolve();});// The fetch API does not timeout natively, so do a timeout manually using
|
|
306
|
+
// the AbortController.
|
|
307
|
+
const timeoutMs=request.retryParameters.timeout;if(timeoutMs){const timer=new shaka$1.util.Timer(()=>{abortStatus.timedOut=true;controller.abort();});timer.tickAfter(timeoutMs/1000);// To avoid calling |abort| on the network request after it finished, we
|
|
308
|
+
// will stop the timer when the requests resolves/rejects.
|
|
309
|
+
op.finally(()=>{timer.stop();});}return op;}/**
|
|
310
|
+
* @param {string} uri
|
|
311
|
+
* @param {shaka.net.NetworkingEngine.RequestType} requestType
|
|
312
|
+
* @param {!RequestInit} init
|
|
313
|
+
* @param {shaka.net.HttpFetchPlugin.AbortStatus} abortStatus
|
|
314
|
+
* @param {shaka.extern.ProgressUpdated} progressUpdated
|
|
315
|
+
* @param {shaka.extern.HeadersReceived} headersReceived
|
|
316
|
+
* @param {?function(BufferSource):!Promise} streamDataCallback
|
|
317
|
+
* @return {!Promise<!shaka.extern.Response>}
|
|
318
|
+
* @private
|
|
319
|
+
*/static async request_(uri,requestType,init,abortStatus,progressUpdated,headersReceived,streamDataCallback){const fetch=HttpFetchPlugin.fetch_;const ReadableStream=HttpFetchPlugin.ReadableStream_;let response;let arrayBuffer;let loaded=0;let lastLoaded=0;// Last time stamp when we got a progress event.
|
|
320
|
+
let lastTime=Date.now();try{// The promise returned by fetch resolves as soon as the HTTP response
|
|
321
|
+
// headers are available. The download itself isn't done until the promise
|
|
322
|
+
// for retrieving the data (arrayBuffer, blob, etc) has resolved.
|
|
323
|
+
response=await fetch(uri,init);// At this point in the process, we have the headers of the response, but
|
|
324
|
+
// not the body yet.
|
|
325
|
+
headersReceived(HttpFetchPlugin.headersToGenericObject_(response.headers));// Getting the reader in this way allows us to observe the process of
|
|
326
|
+
// downloading the body, instead of just waiting for an opaque promise to
|
|
327
|
+
// resolve.
|
|
328
|
+
// We first clone the response because calling getReader locks the body
|
|
329
|
+
// stream; if we didn't clone it here, we would be unable to get the
|
|
330
|
+
// response's arrayBuffer later.
|
|
331
|
+
const reader=response.clone().body.getReader();const contentLengthRaw=response.headers.get('Content-Length');const contentLength=contentLengthRaw?parseInt(contentLengthRaw,10):0;const start=controller=>{const push=async()=>{let readObj;try{readObj=await reader.read();}catch(e){// If we abort the request, we'll get an error here. Just ignore it
|
|
332
|
+
// since real errors will be reported when we read the buffer below.
|
|
333
|
+
shakaLog.v1('error reading from stream',e.message);return;}if(!readObj.done){loaded+=readObj.value.byteLength;// streamDataCallback adds stream data to buffer for low latency mode
|
|
334
|
+
// 4xx response means a segment is not ready and can retry soon
|
|
335
|
+
// only successful response data should be added, or playback freezes
|
|
336
|
+
if(response.status===200&&streamDataCallback){await streamDataCallback(readObj.value);}}const currentTime=Date.now();// If the time between last time and this time we got progress event
|
|
337
|
+
// is long enough, or if a whole segment is downloaded, call
|
|
338
|
+
// progressUpdated().
|
|
339
|
+
if(currentTime-lastTime>100||readObj.done){progressUpdated(currentTime-lastTime,loaded-lastLoaded,contentLength-loaded);lastLoaded=loaded;lastTime=currentTime;}if(readObj.done){goog$1.asserts.assert(!readObj.value,'readObj should be unset when "done" is true.');controller.close();}else {controller.enqueue(readObj.value);push();}};push();};// Create a ReadableStream to use the reader. We don't need to use the
|
|
340
|
+
// actual stream for anything, though, as we are using the response's
|
|
341
|
+
// arrayBuffer method to get the body, so we don't store the
|
|
342
|
+
// ReadableStream.
|
|
343
|
+
new ReadableStream({start});// eslint-disable-line no-new
|
|
344
|
+
arrayBuffer=await response.arrayBuffer();}catch(error){if(abortStatus.canceled){throw new shaka$1.util.Error(shaka$1.util.Error.Severity.RECOVERABLE,shaka$1.util.Error.Category.NETWORK,shaka$1.util.Error.Code.OPERATION_ABORTED,uri,requestType);}else if(abortStatus.timedOut){throw new shaka$1.util.Error(shaka$1.util.Error.Severity.RECOVERABLE,shaka$1.util.Error.Category.NETWORK,shaka$1.util.Error.Code.TIMEOUT,uri,requestType);}else {throw new shaka$1.util.Error(shaka$1.util.Error.Severity.RECOVERABLE,shaka$1.util.Error.Category.NETWORK,shaka$1.util.Error.Code.HTTP_ERROR,uri,error,requestType);}}const headers=HttpFetchPlugin.headersToGenericObject_(response.headers);return makeResponse(headers,arrayBuffer,response.status,uri,response.url,requestType);}/**
|
|
345
|
+
* @param {!Headers} headers
|
|
346
|
+
* @return {!Object.<string, string>}
|
|
347
|
+
* @private
|
|
348
|
+
*/static headersToGenericObject_(headers){const headersObj={};headers.forEach((value,key)=>{// Since Edge incorrectly return the header with a leading new line
|
|
349
|
+
// character ('\n'), we trim the header here.
|
|
350
|
+
headersObj[key.trim()]=value;});return headersObj;}}HttpFetchPlugin.register=shakaNamespace=>{shaka$1=shakaNamespace;/**
|
|
351
|
+
* Overridden in unit tests, but compiled out in production.
|
|
352
|
+
*
|
|
353
|
+
* @const {function(string, !RequestInit)}
|
|
354
|
+
* @private
|
|
355
|
+
*/HttpFetchPlugin.fetch_=window.fetch;/**
|
|
356
|
+
* Overridden in unit tests, but compiled out in production.
|
|
357
|
+
*
|
|
358
|
+
* @const {function(new: AbortController)}
|
|
359
|
+
* @private
|
|
360
|
+
*/HttpFetchPlugin.AbortController_=window.AbortController;/**
|
|
361
|
+
* Overridden in unit tests, but compiled out in production.
|
|
362
|
+
*
|
|
363
|
+
* @const {function(new: ReadableStream, !Object)}
|
|
364
|
+
* @private
|
|
365
|
+
*/HttpFetchPlugin.ReadableStream_=window.ReadableStream;/**
|
|
366
|
+
* Overridden in unit tests, but compiled out in production.
|
|
367
|
+
*
|
|
368
|
+
* @const {function(new: Headers)}
|
|
369
|
+
* @private
|
|
370
|
+
*/HttpFetchPlugin.Headers_=window.Headers;shaka$1.net.NetworkingEngine.registerScheme('http',HttpFetchPlugin.parse);shaka$1.net.NetworkingEngine.registerScheme('https',HttpFetchPlugin.parse);shaka$1.net.NetworkingEngine.registerScheme('blob',HttpFetchPlugin.parse);};/* eslint-disable guard-for-in */ /* eslint-disable no-unused-vars */const myLog=console;const goog={asserts:{assert:(result,message)=>result||console.warn('message')}};const ALL_EVENTS_='All';function PublicPromise(){let resolvePromise;let rejectPromise;const promise=new Promise((resolve,reject)=>{resolvePromise=resolve;rejectPromise=reject;});this.resolve=resolvePromise;this.reject=rejectPromise;this.then=(...args)=>promise.then(...args);this.catch=(...args)=>promise.catch(...args);}class MultiMap{/** */constructor(){/** @private {!Object.<string, !Array.<T>>} */this.map_={};}/**
|
|
371
|
+
* Add a key, value pair to the map.
|
|
372
|
+
* @param {string} key
|
|
373
|
+
* @param {T} value
|
|
374
|
+
*/push(key,value){// eslint-disable-next-line no-prototype-builtins
|
|
375
|
+
if(this.map_.hasOwnProperty(key)){this.map_[key].push(value);}else {this.map_[key]=[value];}}/**
|
|
376
|
+
* Get a list of values by key.
|
|
377
|
+
* @param {string} key
|
|
378
|
+
* @return {Array.<T>} or null if no such key exists.
|
|
379
|
+
*/get(key){const list=this.map_[key];// slice() clones the list so that it and the map can each be modified
|
|
380
|
+
// without affecting the other.
|
|
381
|
+
return list?list.slice():null;}/**
|
|
382
|
+
* Get a list of all values.
|
|
383
|
+
* @return {!Array.<T>}
|
|
384
|
+
*/getAll(){const list=[];for(const key in this.map_){list.push(...this.map_[key]);}return list;}/**
|
|
385
|
+
* Remove a specific value, if it exists.
|
|
386
|
+
* @param {string} key
|
|
387
|
+
* @param {T} value
|
|
388
|
+
*/remove(key,value){if(!(key in this.map_)){return;}this.map_[key]=this.map_[key].filter(i=>i!=value);if(this.map_[key].length==0){// Delete the array if it's empty, so that |get| will reliably return null
|
|
389
|
+
// "if no such key exists", instead of sometimes returning an empty array.
|
|
390
|
+
delete this.map_[key];}}/**
|
|
391
|
+
* Clear all keys and values from the multimap.
|
|
392
|
+
*/clear(){this.map_={};}/**
|
|
393
|
+
* @param {function(string, !Array.<T>)} callback
|
|
394
|
+
*/forEach(callback){for(const key in this.map_){callback(key,this.map_[key]);}}/**
|
|
395
|
+
* Returns the number of elements in the multimap.
|
|
396
|
+
* @return {number}
|
|
397
|
+
*/size(){return Object.keys(this.map_).length;}/**
|
|
398
|
+
* Get a list of all the keys.
|
|
399
|
+
* @return {!Array.<string>}
|
|
400
|
+
*/keys(){return Object.keys(this.map_);}}class FakeEventTarget{/** */constructor(){/**
|
|
401
|
+
* @private {shaka.util.MultiMap.<shaka.util.FakeEventTarget.ListenerType>}
|
|
402
|
+
*/this.listeners_=new MultiMap();/**
|
|
403
|
+
* The target of all dispatched events. Defaults to |this|.
|
|
404
|
+
* @type {EventTarget}
|
|
405
|
+
*/this.dispatchTarget=this;}/**
|
|
406
|
+
* Add an event listener to this object.
|
|
407
|
+
*
|
|
408
|
+
* @param {string} type The event type to listen for.
|
|
409
|
+
* @param {shaka.util.FakeEventTarget.ListenerType} listener The callback or
|
|
410
|
+
* listener object to invoke.
|
|
411
|
+
* @param {(!AddEventListenerOptions|boolean)=} options Ignored.
|
|
412
|
+
* @override
|
|
413
|
+
* @exportInterface
|
|
414
|
+
*/addEventListener(type,listener,options){if(!this.listeners_){return;}this.listeners_.push(type,listener);}/**
|
|
415
|
+
* Add an event listener to this object that is invoked for all events types
|
|
416
|
+
* the object fires.
|
|
417
|
+
*
|
|
418
|
+
* @param {shaka.util.FakeEventTarget.ListenerType} listener The callback or
|
|
419
|
+
* listener object to invoke.
|
|
420
|
+
* @exportInterface
|
|
421
|
+
*/listenToAllEvents(listener){this.addEventListener(ALL_EVENTS_,listener);}/**
|
|
422
|
+
* Remove an event listener from this object.
|
|
423
|
+
*
|
|
424
|
+
* @param {string} type The event type for which you wish to remove a
|
|
425
|
+
* listener.
|
|
426
|
+
* @param {shaka.util.FakeEventTarget.ListenerType} listener The callback or
|
|
427
|
+
* listener object to remove.
|
|
428
|
+
* @param {(EventListenerOptions|boolean)=} options Ignored.
|
|
429
|
+
* @override
|
|
430
|
+
* @exportInterface
|
|
431
|
+
*/removeEventListener(type,listener,options){if(!this.listeners_){return;}this.listeners_.remove(type,listener);}/**
|
|
432
|
+
* Dispatch an event from this object.
|
|
433
|
+
*
|
|
434
|
+
* @param {!Event} event The event to be dispatched from this object.
|
|
435
|
+
* @return {boolean} True if the default action was prevented.
|
|
436
|
+
* @override
|
|
437
|
+
* @exportInterface
|
|
438
|
+
*/dispatchEvent(event){// In many browsers, it is complex to overwrite properties of actual Events.
|
|
439
|
+
// Here we expect only to dispatch FakeEvents, which are simpler.
|
|
440
|
+
goog.asserts.assert(event instanceof shaka.util.FakeEvent,'FakeEventTarget can only dispatch FakeEvents!');if(!this.listeners_){return true;}let listeners=this.listeners_.get(event.type)||[];const universalListeners=this.listeners_.get(ALL_EVENTS_);if(universalListeners){listeners=listeners.concat(universalListeners);}// Execute this event on listeners until the event has been stopped or we
|
|
441
|
+
// run out of listeners.
|
|
442
|
+
for(const listener of listeners){// Do this every time, since events can be re-dispatched from handlers.
|
|
443
|
+
event.target=this.dispatchTarget;event.currentTarget=this.dispatchTarget;try{// Check for the |handleEvent| member to test if this is a
|
|
444
|
+
// |EventListener| instance or a basic function.
|
|
445
|
+
if(listener.handleEvent){listener.handleEvent(event);}else {// eslint-disable-next-line no-restricted-syntax
|
|
446
|
+
listener.call(this,event);}}catch(exception){// Exceptions during event handlers should not affect the caller,
|
|
447
|
+
// but should appear on the console as uncaught, according to MDN:
|
|
448
|
+
// https://mzl.la/2JXgwRo
|
|
449
|
+
myLog.error('Uncaught exception in event handler',exception,exception?exception.message:null,exception?exception.stack:null);}if(event.stopped){break;}}return event.defaultPrevented;}/**
|
|
450
|
+
* @override
|
|
451
|
+
* @exportInterface
|
|
452
|
+
*/release(){this.listeners_=null;}}const waitForReadyState=(mediaElement,readyState,eventManager,callback)=>{const READY_STATES_TO_EVENT_NAMES_=[[window.HTMLMediaElement.HAVE_METADATA,'loadedmetadata'],[window.HTMLMediaElement.HAVE_CURRENT_DATA,'loadeddata'],[window.HTMLMediaElement.HAVE_FUTURE_DATA,'canplay'],[window.HTMLMediaElement.HAVE_ENOUGH_DATA,'canplaythrough']];if(readyState==window.HTMLMediaElement.HAVE_NOTHING||mediaElement.readyState>=readyState){callback();}else {const eventName=READY_STATES_TO_EVENT_NAMES_.find(x=>x[0]===readyState)[1];eventManager.listenOnce(mediaElement,eventName,callback);}};class PatchedMediaKeysApple{/**
|
|
453
|
+
* Installs the polyfill if needed.
|
|
454
|
+
* @export
|
|
455
|
+
*/static install(shaka){if(!window.HTMLVideoElement||!window.WebKitMediaKeys){// No HTML5 video or no prefixed EME.
|
|
456
|
+
return;}myLog.info('Using Apple-prefixed EME');// Delete mediaKeys to work around strict mode compatibility issues.
|
|
457
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
458
|
+
delete window.HTMLMediaElement.prototype.mediaKeys;// Work around read-only declaration for mediaKeys by using a string.
|
|
459
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
460
|
+
window.HTMLMediaElement.prototype.mediaKeys=null;// eslint-disable-next-line no-restricted-syntax
|
|
461
|
+
window.HTMLMediaElement.prototype.setMediaKeys=PatchedMediaKeysApple.setMediaKeys;// Install patches
|
|
462
|
+
window.MediaKeys=PatchedMediaKeysApple.MediaKeys;window.MediaKeySystemAccess=PatchedMediaKeysApple.MediaKeySystemAccess;navigator.requestMediaKeySystemAccess=PatchedMediaKeysApple.requestMediaKeySystemAccess;window.shakaMediaKeysPolyfill=true;const defaultInitDataTransform=(initData,initDataType,drmInfo)=>{if(initDataType==='skd'){const{defaultGetContentId,initDataTransform}=shaka.util.FairPlayUtils;const cert=drmInfo.serverCertificate;const contentId=defaultGetContentId(initData);return initDataTransform(initData,contentId,cert);}return initData;};const setupPlayer=player=>{player.licenseRequestHandler=request=>{const base64Payload=encodeURIComponent(btoa(String.fromCharCode(...new Uint8Array(request.body))));const contentId=encodeURIComponent(new TextDecoder('utf-8').decode(request.initData).slice(6));request.headers['Content-Type']='application/x-www-form-urlencoded';request.body=`spc=${base64Payload}&asset_id=${contentId}`;};player.configure({drm:{initDataTransform:defaultInitDataTransform}});player.getNetworkingEngine().registerResponseFilter((type,response)=>{if(type!==shaka.net.NetworkingEngine.RequestType.LICENSE){return;}const responseText=new TextDecoder('utf-8').decode(response.data).trim();if(responseText.slice(0,5)==='<ckc>'&&responseText.slice(-6)==='</ckc>'){response.data=Uint8Array.from(atob(responseText.slice(5,-6)),c=>c.charCodeAt(0));}});};PatchedMediaKeysApple.setupPlayer=setupPlayer;}/**
|
|
463
|
+
* An implementation of navigator.requestMediaKeySystemAccess.
|
|
464
|
+
* Retrieves a MediaKeySystemAccess object.
|
|
465
|
+
*
|
|
466
|
+
* @this {!Navigator}
|
|
467
|
+
* @param {string} keySystem
|
|
468
|
+
* @param {!Array.<!MediaKeySystemConfiguration>} supportedConfigurations
|
|
469
|
+
* @return {!Promise.<!MediaKeySystemAccess>}
|
|
470
|
+
*/static requestMediaKeySystemAccess(keySystem,supportedConfigurations){myLog.debug('PatchedMediaKeysApple.requestMediaKeySystemAccess');console.info({keySystem,supportedConfigurations});goog.asserts.assert(this==navigator,'bad "this" for requestMediaKeySystemAccess');try{console.info({keySystem,supportedConfigurations});const access=new PatchedMediaKeysApple.MediaKeySystemAccess(keySystem,supportedConfigurations);return Promise.resolve(/** @type {!MediaKeySystemAccess} */access);}catch(exception){console.error(exception);return Promise.reject(exception);}}/**
|
|
471
|
+
* An implementation of window.HTMLMediaElement.prototype.setMediaKeys.
|
|
472
|
+
* Attaches a MediaKeys object to the media element.
|
|
473
|
+
*
|
|
474
|
+
* @this {!window.HTMLMediaElement}
|
|
475
|
+
* @param {MediaKeys} mediaKeys
|
|
476
|
+
* @return {!Promise}
|
|
477
|
+
*/static setMediaKeys(mediaKeys){myLog.debug('PatchedMediaKeysApple.setMediaKeys');goog.asserts.assert(this instanceof window.HTMLMediaElement,'bad "this" for setMediaKeys');const newMediaKeys=/** @type {window.shaka.polyfill.PatchedMediaKeysApple.MediaKeys} */mediaKeys;const oldMediaKeys=/** @type {window.shaka.polyfill.PatchedMediaKeysApple.MediaKeys} */this.mediaKeys;if(oldMediaKeys&&oldMediaKeys!=newMediaKeys){goog.asserts.assert(oldMediaKeys instanceof PatchedMediaKeysApple.MediaKeys,'non-polyfill instance of oldMediaKeys');// Have the old MediaKeys stop listening to events on the video tag.
|
|
478
|
+
oldMediaKeys.setMedia(null);}delete this.mediaKeys;// in case there is an existing getter
|
|
479
|
+
this.mediaKeys=mediaKeys;// work around read-only declaration
|
|
480
|
+
if(newMediaKeys){goog.asserts.assert(newMediaKeys instanceof PatchedMediaKeysApple.MediaKeys,'non-polyfill instance of newMediaKeys');return newMediaKeys.setMedia(this);}return Promise.resolve();}/**
|
|
481
|
+
* Handler for the native media elements webkitneedkey event.
|
|
482
|
+
*
|
|
483
|
+
* @this {!window.HTMLMediaElement}
|
|
484
|
+
* @param {!MediaKeyEvent} event
|
|
485
|
+
* @suppress {constantProperty} We reassign what would be const on a real
|
|
486
|
+
* MediaEncryptedEvent, but in our look-alike event.
|
|
487
|
+
* @private
|
|
488
|
+
*/static onWebkitNeedKey_(event){myLog.debug('PatchedMediaKeysApple.onWebkitNeedKey_',event);const{mediaKeys}=this;goog.asserts.assert(mediaKeys instanceof PatchedMediaKeysApple.MediaKeys,'non-polyfill instance of newMediaKeys');goog.asserts.assert(event.initData!=null,'missing init data!');// Convert the prefixed init data to match the native 'encrypted' event.
|
|
489
|
+
const uint8=window.shaka.util.BufferUtils.toUint8(event.initData);const dataview=window.shaka.util.BufferUtils.toDataView(uint8);// The first part is a 4 byte little-endian int, which is the length of
|
|
490
|
+
// the second part.
|
|
491
|
+
const length=dataview.getUint32(/* position= */0,/* littleEndian= */true);if(length+4!=uint8.byteLength){throw new RangeError('Malformed FairPlay init data');}// The remainder is a UTF-16 skd URL. Convert this to UTF-8 and pass on.
|
|
492
|
+
const str=window.shaka.util.StringUtils.fromUTF16(uint8.subarray(4),/* littleEndian= */true);const initData=window.shaka.util.StringUtils.toUTF8(str);// NOTE: Because "this" is a real EventTarget, the event we dispatch here
|
|
493
|
+
// must also be a real Event.
|
|
494
|
+
const event2=new Event('encrypted');const encryptedEvent=/** @type {!MediaEncryptedEvent} */ /** @type {?} */event2;encryptedEvent.initDataType='skd';encryptedEvent.initData=window.shaka.util.BufferUtils.toArrayBuffer(initData);this.dispatchEvent(event2);}}/**
|
|
495
|
+
* An implementation of MediaKeySystemAccess.
|
|
496
|
+
*
|
|
497
|
+
* @implements {MediaKeySystemAccess}
|
|
498
|
+
*/PatchedMediaKeysApple.MediaKeySystemAccess=class{/**
|
|
499
|
+
* @param {string} keySystem
|
|
500
|
+
* @param {!Array.<!MediaKeySystemConfiguration>} supportedConfigurations
|
|
501
|
+
*/constructor(keySystem,supportedConfigurations){myLog.debug('PatchedMediaKeysApple.MediaKeySystemAccess');/** @type {string} */this.keySystem=keySystem;/** @private {!MediaKeySystemConfiguration} */this.configuration_;// Optimization: WebKitMediaKeys.isTypeSupported delays responses by a
|
|
502
|
+
// significant amount of time, possibly to discourage fingerprinting.
|
|
503
|
+
// Since we know only FairPlay is supported here, let's skip queries for
|
|
504
|
+
// anything else to speed up the process.
|
|
505
|
+
if(keySystem.startsWith('com.apple.fps')){for(const cfg of supportedConfigurations){const newCfg=this.checkConfig_(cfg);if(newCfg){this.configuration_=newCfg;return;}}}// According to the spec, this should be a DOMException, but there is not a
|
|
506
|
+
// public constructor for that. So we make this look-alike instead.
|
|
507
|
+
const unsupportedKeySystemError=new Error('Unsupported keySystem');unsupportedKeySystemError.name='NotSupportedError';unsupportedKeySystemError.code=DOMException.NOT_SUPPORTED_ERR;throw unsupportedKeySystemError;}/**
|
|
508
|
+
* Check a single config for MediaKeySystemAccess.
|
|
509
|
+
*
|
|
510
|
+
* @param {MediaKeySystemConfiguration} cfg The requested config.
|
|
511
|
+
* @return {?MediaKeySystemConfiguration} A matching config we can support, or
|
|
512
|
+
* null if the input is not supportable.
|
|
513
|
+
* @private
|
|
514
|
+
*/checkConfig_(cfg){if(cfg.persistentState=='required'){// Not supported by the prefixed API.
|
|
515
|
+
return null;}// Create a new config object and start adding in the pieces which we find
|
|
516
|
+
// support for. We will return this from getConfiguration() later if
|
|
517
|
+
// asked.
|
|
518
|
+
/** @type {!MediaKeySystemConfiguration} */const newCfg={audioCapabilities:[],videoCapabilities:[],// It is technically against spec to return these as optional, but we
|
|
519
|
+
// don't truly know their values from the prefixed API:
|
|
520
|
+
persistentState:'optional',distinctiveIdentifier:'optional',// Pretend the requested init data types are supported, since we don't
|
|
521
|
+
// really know that either:
|
|
522
|
+
initDataTypes:cfg.initDataTypes,sessionTypes:['temporary'],label:cfg.label};// PatchedMediaKeysApple tests for key system availability through
|
|
523
|
+
// WebKitMediaKeys.isTypeSupported.
|
|
524
|
+
let ranAnyTests=false;let success=false;if(cfg.audioCapabilities){for(const cap of cfg.audioCapabilities){if(cap.contentType){ranAnyTests=true;const contentType=cap.contentType.split(';')[0];if(window.WebKitMediaKeys.isTypeSupported(this.keySystem,contentType)){newCfg.audioCapabilities.push(cap);success=true;}}}}if(cfg.videoCapabilities){for(const cap of cfg.videoCapabilities){if(cap.contentType){ranAnyTests=true;const contentType=cap.contentType.split(';')[0];if(window.WebKitMediaKeys.isTypeSupported(this.keySystem,contentType)){newCfg.videoCapabilities.push(cap);success=true;}}}}if(!ranAnyTests){// If no specific types were requested, we check all common types to
|
|
525
|
+
// find out if the key system is present at all.
|
|
526
|
+
success=window.WebKitMediaKeys.isTypeSupported(this.keySystem,'video/mp4');}if(success){return newCfg;}return null;}/** @override */createMediaKeys(){myLog.debug('PatchedMediaKeysApple.MediaKeySystemAccess.createMediaKeys');const mediaKeys=new PatchedMediaKeysApple.MediaKeys(this.keySystem);return Promise.resolve(/** @type {!MediaKeys} */mediaKeys);}/** @override */getConfiguration(){myLog.debug('PatchedMediaKeysApple.MediaKeySystemAccess.getConfiguration');return this.configuration_;}};/**
|
|
527
|
+
* An implementation of MediaKeys.
|
|
528
|
+
*
|
|
529
|
+
* @implements {MediaKeys}
|
|
530
|
+
*/PatchedMediaKeysApple.MediaKeys=class{/** @param {string} keySystem */constructor(keySystem){myLog.debug('PatchedMediaKeysApple.MediaKeys');/** @private {!WebKitMediaKeys} */this.nativeMediaKeys_=new window.WebKitMediaKeys(keySystem);/** @private {!window.shaka.util.EventManager} */this.eventManager_=new window.shaka.util.EventManager();}/** @override */createSession(sessionType){myLog.debug('PatchedMediaKeysApple.MediaKeys.createSession');sessionType=sessionType||'temporary';// For now, only the 'temporary' type is supported.
|
|
531
|
+
if(sessionType!='temporary'){throw new TypeError(`Session type ${sessionType} is unsupported on this platform.`);}return new PatchedMediaKeysApple.MediaKeySession(this.nativeMediaKeys_,sessionType);}/** @override */setServerCertificate(serverCertificate){myLog.debug('PatchedMediaKeysApple.MediaKeys.setServerCertificate');return Promise.resolve(false);}/**
|
|
532
|
+
* @param {window.HTMLMediaElement} media
|
|
533
|
+
* @protected
|
|
534
|
+
* @return {!Promise}
|
|
535
|
+
*/setMedia(media){// Remove any old listeners.
|
|
536
|
+
this.eventManager_.removeAll();// It is valid for media to be null; null is used to flag that event
|
|
537
|
+
// handlers need to be cleaned up.
|
|
538
|
+
if(!media){return Promise.resolve();}// Intercept and translate these prefixed EME events.
|
|
539
|
+
this.eventManager_.listen(media,'webkitneedkey',/** @type {window.shaka.util.EventManager.ListenerType} */PatchedMediaKeysApple.onWebkitNeedKey_);// Wrap native window.HTMLMediaElement.webkitSetMediaKeys with a Promise.
|
|
540
|
+
try{// Some browsers require that readyState >=1 before mediaKeys can be
|
|
541
|
+
// set, so check this and wait for loadedmetadata if we are not in the
|
|
542
|
+
// correct state
|
|
543
|
+
waitForReadyState(media,window.HTMLMediaElement.HAVE_METADATA,this.eventManager_,()=>{media.webkitSetMediaKeys(this.nativeMediaKeys_);});return Promise.resolve();}catch(exception){return Promise.reject(exception);}}};/**
|
|
544
|
+
* An implementation of MediaKeySession.
|
|
545
|
+
*
|
|
546
|
+
* @implements {MediaKeySession}
|
|
547
|
+
*/PatchedMediaKeysApple.MediaKeySession=class extends FakeEventTarget{/**
|
|
548
|
+
* @param {WebKitMediaKeys} nativeMediaKeys
|
|
549
|
+
* @param {string} sessionType
|
|
550
|
+
*/constructor(nativeMediaKeys,sessionType){myLog.debug('PatchedMediaKeysApple.MediaKeySession');super();/**
|
|
551
|
+
* The native MediaKeySession, which will be created in generateRequest.
|
|
552
|
+
* @private {WebKitMediaKeySession}
|
|
553
|
+
*/this.nativeMediaKeySession_=null;/** @private {WebKitMediaKeys} */this.nativeMediaKeys_=nativeMediaKeys;// Promises that are resolved later
|
|
554
|
+
/** @private {PublicPromise} */this.generateRequestPromise_=null;/** @private {PublicPromise} */this.updatePromise_=null;/** @private {!window.shaka.util.EventManager} */this.eventManager_=new window.shaka.util.EventManager();/** @type {string} */this.sessionId='';/** @type {number} */this.expiration=NaN;/** @type {!PublicPromise} */this.closed=new PublicPromise();/** @type {!window.shaka.polyfill.PatchedMediaKeysApple.MediaKeyStatusMap} */this.keyStatuses=new PatchedMediaKeysApple.MediaKeyStatusMap();}/** @override */generateRequest(initDataType,initData){myLog.debug('PatchedMediaKeysApple.MediaKeySession.generateRequest');this.generateRequestPromise_=new PublicPromise();try{// This EME spec version requires a MIME content type as the 1st param to
|
|
555
|
+
// createSession, but doesn't seem to matter what the value is.
|
|
556
|
+
// It also only accepts Uint8Array, not ArrayBuffer, so explicitly make
|
|
557
|
+
// initData into a Uint8Array.
|
|
558
|
+
const session=this.nativeMediaKeys_.createSession('video/mp4',window.shaka.util.BufferUtils.toUint8(initData));this.nativeMediaKeySession_=session;this.sessionId=session.sessionId||'';// Attach session event handlers here.
|
|
559
|
+
this.eventManager_.listen(this.nativeMediaKeySession_,'webkitkeymessage',/** @type {window.shaka.util.EventManager.ListenerType} */event=>this.onWebkitKeyMessage_(event));this.eventManager_.listen(session,'webkitkeyadded',/** @type {window.shaka.util.EventManager.ListenerType} */event=>this.onWebkitKeyAdded_(event));this.eventManager_.listen(session,'webkitkeyerror',/** @type {window.shaka.util.EventManager.ListenerType} */event=>this.onWebkitKeyError_(event));this.updateKeyStatus_('status-pending');}catch(exception){this.generateRequestPromise_.reject(exception);}return this.generateRequestPromise_;}/** @override */load(){myLog.debug('PatchedMediaKeysApple.MediaKeySession.load');return Promise.reject(new Error('MediaKeySession.load not yet supported'));}/** @override */update(response){myLog.debug('PatchedMediaKeysApple.MediaKeySession.update');this.updatePromise_=new PublicPromise();try{// Pass through to the native session.
|
|
560
|
+
this.nativeMediaKeySession_.update(window.shaka.util.BufferUtils.toUint8(response));}catch(exception){this.updatePromise_.reject(exception);}return this.updatePromise_;}/** @override */close(){myLog.debug('PatchedMediaKeysApple.MediaKeySession.close');try{// Pass through to the native session.
|
|
561
|
+
this.nativeMediaKeySession_.close();this.closed.resolve();this.eventManager_.removeAll();}catch(exception){this.closed.reject(exception);}return this.closed;}/** @override */remove(){myLog.debug('PatchedMediaKeysApple.MediaKeySession.remove');return Promise.reject(new Error('MediaKeySession.remove is only applicable for persistent licenses, '+'which are not supported on this platform'));}/**
|
|
562
|
+
* Handler for the native keymessage event on WebKitMediaKeySession.
|
|
563
|
+
*
|
|
564
|
+
* @param {!MediaKeyEvent} event
|
|
565
|
+
* @private
|
|
566
|
+
*/onWebkitKeyMessage_(event){myLog.debug('PatchedMediaKeysApple.onWebkitKeyMessage_',event);// We can now resolve this.generateRequestPromise, which should be non-null.
|
|
567
|
+
goog.asserts.assert(this.generateRequestPromise_,'generateRequestPromise_ should be set before now!');if(this.generateRequestPromise_){this.generateRequestPromise_.resolve();this.generateRequestPromise_=null;}const isNew=this.keyStatuses.getStatus()==undefined;const data=new Map().set('messageType',isNew?'license-request':'license-renewal').set('message',window.shaka.util.BufferUtils.toArrayBuffer(event.message));const event2=new window.shaka.util.FakeEvent('message',data);this.dispatchEvent(event2);}/**
|
|
568
|
+
* Handler for the native keyadded event on WebKitMediaKeySession.
|
|
569
|
+
*
|
|
570
|
+
* @param {!MediaKeyEvent} event
|
|
571
|
+
* @private
|
|
572
|
+
*/onWebkitKeyAdded_(event){myLog.debug('PatchedMediaKeysApple.onWebkitKeyAdded_',event);// This shouldn't fire while we're in the middle of generateRequest,
|
|
573
|
+
// but if it does, we will need to change the logic to account for it.
|
|
574
|
+
goog.asserts.assert(!this.generateRequestPromise_,'Key added during generate!');// We can now resolve this.updatePromise, which should be non-null.
|
|
575
|
+
goog.asserts.assert(this.updatePromise_,'updatePromise_ should be set before now!');if(this.updatePromise_){this.updateKeyStatus_('usable');this.updatePromise_.resolve();this.updatePromise_=null;}}/**
|
|
576
|
+
* Handler for the native keyerror event on WebKitMediaKeySession.
|
|
577
|
+
*
|
|
578
|
+
* @param {!MediaKeyEvent} event
|
|
579
|
+
* @private
|
|
580
|
+
*/onWebkitKeyError_(event){myLog.debug('PatchedMediaKeysApple.onWebkitKeyError_',event);const error=new Error('EME PatchedMediaKeysApple key error');error.errorCode=this.nativeMediaKeySession_.error;if(this.generateRequestPromise_!=null){this.generateRequestPromise_.reject(error);this.generateRequestPromise_=null;}else if(this.updatePromise_!=null){this.updatePromise_.reject(error);this.updatePromise_=null;}else {// Unexpected error - map native codes to standardised key statuses.
|
|
581
|
+
// Possible values of this.nativeMediaKeySession_.error.code:
|
|
582
|
+
// MEDIA_KEYERR_UNKNOWN = 1
|
|
583
|
+
// MEDIA_KEYERR_CLIENT = 2
|
|
584
|
+
// MEDIA_KEYERR_SERVICE = 3
|
|
585
|
+
// MEDIA_KEYERR_OUTPUT = 4
|
|
586
|
+
// MEDIA_KEYERR_HARDWARECHANGE = 5
|
|
587
|
+
// MEDIA_KEYERR_DOMAIN = 6
|
|
588
|
+
switch(this.nativeMediaKeySession_.error.code){case window.WebKitMediaKeyError.MEDIA_KEYERR_OUTPUT:case window.WebKitMediaKeyError.MEDIA_KEYERR_HARDWARECHANGE:this.updateKeyStatus_('output-not-allowed');break;default:this.updateKeyStatus_('internal-error');break;}}}/**
|
|
589
|
+
* Updates key status and dispatch a 'keystatuseschange' event.
|
|
590
|
+
*
|
|
591
|
+
* @param {string} status
|
|
592
|
+
* @private
|
|
593
|
+
*/updateKeyStatus_(status){this.keyStatuses.setStatus(status);const event=new window.shaka.util.FakeEvent('keystatuseschange');this.dispatchEvent(event);}};const getDummyKeyId=()=>new Uint8Array([0]).buffer;/**
|
|
594
|
+
* @summary An implementation of MediaKeyStatusMap.
|
|
595
|
+
* This fakes a map with a single key ID.
|
|
596
|
+
*
|
|
597
|
+
* @todo Consolidate the MediaKeyStatusMap types in these polyfills.
|
|
598
|
+
* @implements {MediaKeyStatusMap}
|
|
599
|
+
*/PatchedMediaKeysApple.MediaKeyStatusMap=class{/** */constructor(){/**
|
|
600
|
+
* @type {number}
|
|
601
|
+
*/this.size=0;/**
|
|
602
|
+
* @private {string|undefined}
|
|
603
|
+
*/this.status_=undefined;}/**
|
|
604
|
+
* An internal method used by the session to set key status.
|
|
605
|
+
* @param {string|undefined} status
|
|
606
|
+
*/setStatus(status){this.size=status==undefined?0:1;this.status_=status;}/**
|
|
607
|
+
* An internal method used by the session to get key status.
|
|
608
|
+
* @return {string|undefined}
|
|
609
|
+
*/getStatus(){return this.status_;}/** @override */forEach(fn){if(this.status_){fn(this.status_,getDummyKeyId());}}/** @override */get(keyId){if(this.has(keyId)){return this.status_;}return undefined;}/** @override */has(keyId){const fakeKeyId=getDummyKeyId();if(this.status_&&window.shaka.util.BufferUtils.equal(keyId,fakeKeyId)){return true;}return false;}/**
|
|
610
|
+
* @suppress {missingReturn}
|
|
611
|
+
* @override
|
|
612
|
+
*/entries(){goog.asserts.assert(false,'Not used! Provided only for the compiler.');}/**
|
|
613
|
+
* @suppress {missingReturn}
|
|
614
|
+
* @override
|
|
615
|
+
*/keys(){goog.asserts.assert(false,'Not used! Provided only for the compiler.');}/**
|
|
616
|
+
* @suppress {missingReturn}
|
|
617
|
+
* @override
|
|
618
|
+
*/values(){goog.asserts.assert(false,'Not used! Provided only for the compiler.');}};/* eslint-disable no-param-reassign */const getQualityItem=track=>({id:track.originalVideoId,bitrate:track.videoBandwidth,width:track.width,height:track.height,codec:track.videoCodec,frameRate:track.frameRate});const retryStatus={lastTime:0,attempts:0};const handleSafariNetworkError=player=>{var _player$reload;if(Date.now()+30000<retryStatus.lastTime&&retryStatus.attempts>=3){return;}if(Date.now()+30000>=retryStatus.lastTime){retryStatus.attempts=0;}retryStatus.lastTime=Date.now();retryStatus.attempts+=1;(_player$reload=player.reload)===null||_player$reload===void 0?void 0:_player$reload.call(player);};const loadShaka=async(videoElement,config={})=>{let player;getUrlObject(mediaSource=>{player.mediaSource=mediaSource;});const shaka=await import('shaka-player');window.shaka=shaka;shaka.polyfill.installAll();if(window.WebKitMediaKeys){PatchedMediaKeysApple.install(shaka);}player=new shaka.Player(videoElement);if(window.WebKitMediaKeys){PatchedMediaKeysApple.setupPlayer(player);}player.configure({manifest:{dash:{ignoreSuggestedPresentationDelay:true},retryParameters:{maxAttempts:6}},streaming:{// To reduce the unseekable range at the start of the manifests.
|
|
619
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3526
|
|
620
|
+
safeSeekOffset:0,rebufferingGoal:0,retryParameters:{maxAttempts:6}}});player.configure(config);player.addEventListener('error',event=>{var _window$Sentry;console.log(event);const{detail={}}=event;if(isSafari()&&(detail.code===3016||detail.code===1002)){return handleSafariNetworkError(player);}const error=new Error(`Player: ${detail.code}/${detail.name}`);if(!detail||/The video element has thrown a media error|Video element triggered an Error/.test(detail.message)){return;}videoElement.dispatchEvent(Object.assign(new CustomEvent('error'),{error:detail,message:`Player Error: ${detail.code}/${detail.message.split(' ',3)[2]}`}));(_window$Sentry=window.Sentry)===null||_window$Sentry===void 0?void 0:_window$Sentry.captureException(error);});player.addEventListener('loaded',()=>videoElement.dispatchEvent(new CustomEvent('canplay')));player.addEventListener('adaptation',event=>{const{videoBandwidth,width,height}=event.newTrack;videoElement.dispatchEvent(new CustomEvent('downloadQualityChange',{detail:{bitrate:parseInt(videoBandwidth/1000,10),height,width}}));});const extensionOptions={licenseRequestHeaders:null};const getAvailableVideoQualities=()=>player.getVariantTracks().reduce((trackList,currentTrack)=>{const keepOrignalTrack=trackList.find(track=>track.height===currentTrack.height);if(!keepOrignalTrack){trackList.push(getQualityItem(currentTrack));}return trackList;},[]);const getVideoQuality=()=>{const activeTrack=player.getVariantTracks().find(track=>track.active);if(!activeTrack)return {};return getQualityItem(activeTrack);};HttpFetchPlugin.register(shaka);player.getNetworkingEngine().registerRequestFilter((type,request)=>{const{LICENSE,SERVER_CERTIFICATE}=shaka.net.NetworkingEngine.RequestType;if(type===SERVER_CERTIFICATE){var _extensionOptions$drm;request.headers={...request.headers,...((_extensionOptions$drm=extensionOptions.drm[player.drmInfo().keySystem])===null||_extensionOptions$drm===void 0?void 0:_extensionOptions$drm.certificateHeaders)};}if(type===LICENSE){var _extensionOptions$drm2,_player$licenseReques,_player;request.headers={...request.headers,...((_extensionOptions$drm2=extensionOptions.drm[player.drmInfo().keySystem])===null||_extensionOptions$drm2===void 0?void 0:_extensionOptions$drm2.headers)};(_player$licenseReques=(_player=player).licenseRequestHandler)===null||_player$licenseReques===void 0?void 0:_player$licenseReques.call(_player,request);}});const extensions={shaka,get mediaSource(){return player.mediaSource;},configureExtensions:({drm}={})=>{extensionOptions.drm=drm;},getPlaybackSpeed:()=>videoElement.playbackRate,getVideoElement:()=>videoElement,setQuality:restrictions=>{if(!restrictions)return;// FIXME: Setting restrictions to {} cannot enable abr.
|
|
621
|
+
player.configure('abr.restrictions',restrictions);},getVideoQuality,getAvailableVideoQualities,getSubtitles:()=>player.getTextTracks().map(track=>({label:track.label,value:track.language,enabled:track.active})),setSubtitleTrack:lang=>{var _player3,_player4;if(lang==='off'){var _player2;(_player2=player)===null||_player2===void 0?void 0:_player2.setTextTrackVisibility(false);return;}(_player3=player)===null||_player3===void 0?void 0:_player3.selectTextLanguage(lang);(_player4=player)===null||_player4===void 0?void 0:_player4.setTextTrackVisibility(true);},getAudio:()=>{var _player5;const active=(_player5=player)===null||_player5===void 0?void 0:_player5.getVariantTracks().find(track=>track.active);return {lang:active===null||active===void 0?void 0:active.language,label:active===null||active===void 0?void 0:active.label};},getAudioList:()=>player.getAudioLanguages().map(lang=>({lang,label:lang})),setAudioTrack:lang=>{var _player6;if(!lang)return;(_player6=player)===null||_player6===void 0?void 0:_player6.selectAudioLanguage(lang);},on:player.addEventListener.bind(player)};Object.assign(player,extensions);return player;};const getDrmConfig=({url,headers,widevine={level:undefined},fairplay={}})=>{if(!url){return {};}return {widevine:{LA_URL:url,withCredentials:false,headers,...((widevine===null||widevine===void 0?void 0:widevine.level)&&{videoRobustness:widevine===null||widevine===void 0?void 0:widevine.level})},fairplay:{LA_URL:url,withCredentials:false,headers,certificateURL:fairplay.certificateURL||defaultCertificateUrl(url),certificateHeaders:fairplay.certificateHeaders,...FairplayKeySystem},playready:{LA_URL:url,withCredentials:false,headers}};};const loadBitmovin=async({container,videoElement,autoplay,config={}})=>{// Don't move module paths to array or other variables! they need to be resolved by bundlers
|
|
622
|
+
const{Player,PlayerEvent}=await import('bitmovin-player/modules/bitmovinplayer-core');const nativeHls=needNativeHls();const bitmovinModules=[].concat(await import('bitmovin-player/modules/bitmovinplayer-engine-bitmovin'),nativeHls&&(await import('bitmovin-player/modules/bitmovinplayer-engine-native')),await Promise.all([import('bitmovin-player/modules/bitmovinplayer-drm'),import('bitmovin-player/modules/bitmovinplayer-abr'),import('bitmovin-player/modules/bitmovinplayer-subtitles'),import('bitmovin-player/modules/bitmovinplayer-container-mp4')]),nativeHls&&(await Promise.all([import('bitmovin-player/modules/bitmovinplayer-hls'),import('bitmovin-player/modules/bitmovinplayer-subtitles-native')])),!nativeHls&&(await import('bitmovin-player/modules/bitmovinplayer-subtitles-vtt')),!nativeHls&&(await import('bitmovin-player/modules/bitmovinplayer-xml')),!nativeHls&&(await Promise.all([import('bitmovin-player/modules/bitmovinplayer-dash'),import('bitmovin-player/modules/bitmovinplayer-mserenderer'),import('bitmovin-player/modules/bitmovinplayer-polyfill')]))).filter(Boolean);bitmovinModules.forEach(module=>Player.addModule(module.default));const extensionOptions={drm:{}};let adaptationHandler;const player=new Player(container,{ui:false,...config,playback:{...config.playback,autoplay:true},adaptation:{...config.adaptation,onVideoAdaptation:data=>{var _adaptationHandler;const availableQualities=player.getAvailableVideoQualities();return ((_adaptationHandler=adaptationHandler)===null||_adaptationHandler===void 0?void 0:_adaptationHandler({availableQualities,suggested:availableQualities.find(item=>item.id===data.suggested)||{id:data.suggested}}))||data.suggested;}}});player.configure=({drm})=>{if(drm){extensionOptions.drm=drm;}};player.configureExtensions=({drm}={})=>{if(drm){var _Object$values$;extensionOptions.licenseRequestHeaders=(_Object$values$=Object.values(drm)[0])===null||_Object$values$===void 0?void 0:_Object$values$.headers;}};const originalLoad=player.load;player.load=(src,startTime,type)=>{const{muted}=videoElement;originalLoad.call(player,{[type==='application/x-mpegurl'?'hls':'dash']:src,drm:getDrmConfig({url:['com.apple.fps.1_0','com.widevine.alpha','com.microsoft.playready'].map(keySystemName=>{var _extensionOptions$drm,_extensionOptions$drm2;return (_extensionOptions$drm=extensionOptions.drm)===null||_extensionOptions$drm===void 0?void 0:(_extensionOptions$drm2=_extensionOptions$drm.servers)===null||_extensionOptions$drm2===void 0?void 0:_extensionOptions$drm2[keySystemName];}).find(Boolean),headers:extensionOptions.licenseRequestHeaders}),...(startTime&&{options:{startTime}})}).then(result=>{// Bitmovin resets muted state after load in Safari, so restore it
|
|
623
|
+
if(muted){player.mute();}else {player.unmute();}return result;});};player.setAdaptationHandler=handler=>{adaptationHandler=handler;};player.seekRange=player.getSeekableRange;player.getDrmConfig=getDrmConfig;// Mock Shaka player interface from shaka.js
|
|
624
|
+
player.getSubtitles=()=>{var _player$subtitles;return ((_player$subtitles=player.subtitles)===null||_player$subtitles===void 0?void 0:_player$subtitles.list().map(track=>({label:track.label,value:track.lang,enabled:track.enabled})))||[];};player.setSubtitleTrack=language=>{var _subtitles$list;const{subtitles}=player;subtitles===null||subtitles===void 0?void 0:(_subtitles$list=subtitles.list)===null||_subtitles$list===void 0?void 0:_subtitles$list.call(subtitles).forEach(track=>{// TODO consider multiple subtitles
|
|
625
|
+
subtitles[language===track.lang?'enable':'disable'](track.id);// Safari need to fire cueExit manually.
|
|
626
|
+
if(language==='off')subtitles.cueExit();});};player.getAudioList=()=>player.getAvailableAudio();player.setAudioTrack=language=>{const track=player.getAvailableAudio().find(audio=>audio.lang===language);if(track){player.setAudio(track.id);}};player.setVideoElement(videoElement);// For a paused live stream, Bitmovin constantly download latest segments and update,
|
|
627
|
+
// and may unexpectedly resume playing when playing vod-to-live, so set speed 0 to prevent.
|
|
628
|
+
// #CPT-1783
|
|
629
|
+
player.on(PlayerEvent.Play,()=>{if(player.isLive()){player.setPlaybackSpeed(1);}});player.on(PlayerEvent.Paused,()=>{if(player.isLive()){player.setPlaybackSpeed(0);}});player.on(PlayerEvent.SourceLoaded,()=>{if(player.isLive()){// eslint-disable-next-line no-param-reassign
|
|
630
|
+
player.setPlaybackSpeed(1);// no video event fires when live stream loaded, fire one so that we can handle like VOD
|
|
631
|
+
videoElement.dispatchEvent(new Event('canplay'));}});player.on(PlayerEvent.Error,info=>{var _window$Sentry;const error=new Error(`Player: ${info.code}/${info.name}`);console.warn(info);if(/The video element has thrown a media error|Video element triggered an Error/.test(info.message)){return;}(_window$Sentry=window.Sentry)===null||_window$Sentry===void 0?void 0:_window$Sentry.captureException(error);videoElement.dispatchEvent(Object.assign(new CustomEvent('error'),{error:info,message:`Player Error: ${info.code}/${info.name}`}));});player.on(PlayerEvent.StallStarted,()=>videoElement.dispatchEvent(new Event('waiting')));player.on(PlayerEvent.VideoDownloadQualityChanged,event=>videoElement.dispatchEvent(new CustomEvent('downloadQualityChange',{detail:{bitrate:parseInt(event.targetQuality.bitrate/1000,10),height:event.targetQuality.height,width:event.targetQuality.width}})));return player;};const loadPlayer=async(videoElement,{container,autoplay,source,shaka,bitmovin})=>{if(source!==null&&source!==void 0&&source.native){const player=await loadNative({videoElement});return player;}// default to Shaka
|
|
632
|
+
if(shaka||!bitmovin){const player=await loadShaka(videoElement,shaka);if(autoplay){// eslint-disable-next-line no-param-reassign
|
|
633
|
+
videoElement.autoplay=true;}videoElement.dispatchEvent(new CustomEvent('playerStarted'));return player;}if(bitmovin){const player=await loadBitmovin({container,videoElement,autoplay,config:bitmovin});videoElement.dispatchEvent(new CustomEvent('playerStarted'));return player;}// TODO load other players: dash.js, hls.js
|
|
634
|
+
};/* eslint-disable no-param-reassign */const videoStyle={objectFit:'contain',position:'absolute',top:0,left:0,bottom:0,right:0,width:'100%',height:'100%'};const videoPreparingStyle={opacity:0};const Video=({source,drm,playbackState:targetState,currentTime:targetTime,playbackRate,quality,subtitles,audio,plugins=[],shaka,bitmovin,videoRef,playerRef,onPlayerLoaded,onPlaybackStateChange,onBlockedAutoplay,...videoAttributes})=>{var _videoElement$current;const handlers=useRef();handlers.current={onPlaybackStateChange,onBlockedAutoplay};const videoContainer=useRef();const videoElement=useRef();const[playbackState,setPlaybackState]=useState('');const[player,setPlayer]=useState();const videoReady=((_videoElement$current=videoElement.current)===null||_videoElement$current===void 0?void 0:_videoElement$current.readyState)>=2;useEffect(()=>{const loadTask=loadPlayer(videoElement.current,{container:videoContainer.current,autoplay:false,source,shaka,bitmovin}).then(basePlayer=>{setPlayer(basePlayer);onPlayerLoaded===null||onPlayerLoaded===void 0?void 0:onPlayerLoaded(basePlayer);if(playerRef){playerRef.curret=basePlayer;}return basePlayer;});return ()=>loadTask.then(currentPlayer=>currentPlayer===null||currentPlayer===void 0?void 0:currentPlayer.destroy());},[]);useEffect(()=>{if(source&&(source.length>0||source.src||source.hls||source.dash)&&player){load(videoElement.current,{player,drm,plugins,startTime:targetTime},source);}},[player,source]);useEffect(()=>subscribePlaybackState(videoElement.current,(event,state)=>{var _handlers$current$onP,_handlers$current;(_handlers$current$onP=(_handlers$current=handlers.current).onPlaybackStateChange)===null||_handlers$current$onP===void 0?void 0:_handlers$current$onP.call(_handlers$current,event,state);// external logic may want to change targetState, hold playbackState update
|
|
635
|
+
// to prevent unwanted syncPlaybackState
|
|
636
|
+
requestAnimationFrame(()=>setPlaybackState(state));}),[]);// useEffect is too late to unlock play on Safari
|
|
637
|
+
// TODO check if this work after upgrading React 18
|
|
638
|
+
useLayoutEffect(()=>{if(player){var _syncPlaybackState;(_syncPlaybackState=syncPlaybackState(videoElement.current,{player,plugins},targetState))===null||_syncPlaybackState===void 0?void 0:_syncPlaybackState.catch(error=>{var _handlers$current$onB,_handlers$current2;return (_handlers$current$onB=(_handlers$current2=handlers.current).onBlockedAutoplay)===null||_handlers$current$onB===void 0?void 0:_handlers$current$onB.call(_handlers$current2,error);});}},[playbackState,player&&targetState]);useEffect(()=>{const{currentTime}=getMediaTime(videoElement.current,plugins,player);if(player&&Math.abs(currentTime-targetTime)>0.5){// seeking unavailable cases are handled by seek function
|
|
639
|
+
seek(videoElement.current,{player,plugins},targetTime);}},[player&&targetTime]);useEffect(()=>{setPlaybackRate(videoElement.current,{player},playbackRate);},[playbackRate,playbackState==='playing']);useEffect(()=>{if(player){setQuality(videoElement.current,{player},quality);}},[quality,player]);return jsx("div",{ref:videoContainer,children:jsx("video",{// eslint-disable-line jsx-a11y/media-has-caption
|
|
640
|
+
ref:multiRef(videoRef,videoElement),muted:true,playsInline:true,css:[videoReady||videoPreparingStyle,videoStyle,process.env.NODE_ENV==="production"?"":";label:Video;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpZGVvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRJUSIsImZpbGUiOiJWaWRlby5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4vKiBAanN4SW1wb3J0U291cmNlIEBlbW90aW9uL3JlYWN0ICovXG5pbXBvcnQge3VzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcblxuaW1wb3J0IG11bHRpUmVmIGZyb20gJ3V0aWwvbXVsdGlSZWYnXG5pbXBvcnQgbG9hZFBsYXllciBmcm9tICdwbGF5ZXJDb3JlL2xvYWRQbGF5ZXInXG5pbXBvcnQge1xuICBnZXRNZWRpYVRpbWUsXG4gIHN1YnNjcmliZVBsYXliYWNrU3RhdGUsXG4gIGxvYWQsXG4gIHN5bmNQbGF5YmFja1N0YXRlLFxuICBzZWVrLFxuICBzZXRQbGF5YmFja1JhdGUsXG4gIHNldFF1YWxpdHksXG4gIHNldFN1YnRpdGxlLFxuICBzZXRBdWRpbyxcbn0gZnJvbSAncGxheWVyQ29yZS9tZWRpYUJpbmRpbmdzJ1xuXG5jb25zdCB2aWRlb1N0eWxlID0ge1xuICBvYmplY3RGaXQ6ICdjb250YWluJyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHRvcDogMCxcbiAgbGVmdDogMCxcbiAgYm90dG9tOiAwLFxuICByaWdodDogMCxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG59XG5cbmNvbnN0IHZpZGVvUHJlcGFyaW5nU3R5bGUgPSB7XG4gIG9wYWNpdHk6IDAsXG59XG5cbmNvbnN0IFZpZGVvID0gKHtcbiAgc291cmNlLFxuICBkcm0sXG4gIHBsYXliYWNrU3RhdGU6IHRhcmdldFN0YXRlLFxuICBjdXJyZW50VGltZTogdGFyZ2V0VGltZSxcbiAgcGxheWJhY2tSYXRlLFxuICBxdWFsaXR5LFxuICBzdWJ0aXRsZXMsXG4gIGF1ZGlvLFxuICBwbHVnaW5zID0gW10sXG4gIHNoYWthLFxuICBiaXRtb3ZpbixcbiAgdmlkZW9SZWYsXG4gIHBsYXllclJlZixcbiAgb25QbGF5ZXJMb2FkZWQsXG4gIG9uUGxheWJhY2tTdGF0ZUNoYW5nZSxcbiAgb25CbG9ja2VkQXV0b3BsYXksXG4gIC4uLnZpZGVvQXR0cmlidXRlc1xufSkgPT4ge1xuICBjb25zdCBoYW5kbGVycyA9IHVzZVJlZigpXG4gIGhhbmRsZXJzLmN1cnJlbnQgPSB7b25QbGF5YmFja1N0YXRlQ2hhbmdlLCBvbkJsb2NrZWRBdXRvcGxheX1cbiAgY29uc3QgdmlkZW9Db250YWluZXIgPSB1c2VSZWYoKVxuICBjb25zdCB2aWRlb0VsZW1lbnQgPSB1c2VSZWYoKVxuICBjb25zdCBbcGxheWJhY2tTdGF0ZSwgc2V0UGxheWJhY2tTdGF0ZV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3BsYXllciwgc2V0UGxheWVyXSA9IHVzZVN0YXRlKClcbiAgY29uc3QgdmlkZW9SZWFkeSA9IHZpZGVvRWxlbWVudC5jdXJyZW50Py5yZWFkeVN0YXRlID49IDJcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGxvYWRUYXNrID0gbG9hZFBsYXllcih2aWRlb0VsZW1lbnQuY3VycmVudCwge1xuICAgICAgY29udGFpbmVyOiB2aWRlb0NvbnRhaW5lci5jdXJyZW50LFxuICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgc291cmNlLFxuICAgICAgc2hha2EsXG4gICAgICBiaXRtb3ZpbixcbiAgICB9KS50aGVuKGJhc2VQbGF5ZXIgPT4ge1xuICAgICAgc2V0UGxheWVyKGJhc2VQbGF5ZXIpXG4gICAgICBvblBsYXllckxvYWRlZD8uKGJhc2VQbGF5ZXIpXG4gICAgICBpZiAocGxheWVyUmVmKSB7XG4gICAgICAgIHBsYXllclJlZi5jdXJyZXQgPSBiYXNlUGxheWVyXG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVBsYXllclxuICAgIH0pXG4gICAgcmV0dXJuICgpID0+IGxvYWRUYXNrLnRoZW4oY3VycmVudFBsYXllciA9PiBjdXJyZW50UGxheWVyPy5kZXN0cm95KCkpXG4gIH0sIFtdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcbiAgICAgIHNvdXJjZSAmJlxuICAgICAgKHNvdXJjZS5sZW5ndGggPiAwIHx8IHNvdXJjZS5zcmMgfHwgc291cmNlLmhscyB8fCBzb3VyY2UuZGFzaCkgJiZcbiAgICAgIHBsYXllclxuICAgICkge1xuICAgICAgbG9hZChcbiAgICAgICAgdmlkZW9FbGVtZW50LmN1cnJlbnQsXG4gICAgICAgIHtcbiAgICAgICAgICBwbGF5ZXIsXG4gICAgICAgICAgZHJtLFxuICAgICAgICAgIHBsdWdpbnMsXG4gICAgICAgICAgc3RhcnRUaW1lOiB0YXJnZXRUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VcbiAgICAgIClcbiAgICB9XG4gIH0sIFtwbGF5ZXIsIHNvdXJjZV0pXG5cbiAgdXNlRWZmZWN0KFxuICAgICgpID0+XG4gICAgICBzdWJzY3JpYmVQbGF5YmFja1N0YXRlKHZpZGVvRWxlbWVudC5jdXJyZW50LCAoZXZlbnQsIHN0YXRlKSA9PiB7XG4gICAgICAgIGhhbmRsZXJzLmN1cnJlbnQub25QbGF5YmFja1N0YXRlQ2hhbmdlPy4oZXZlbnQsIHN0YXRlKVxuICAgICAgICAvLyBleHRlcm5hbCBsb2dpYyBtYXkgd2FudCB0byBjaGFuZ2UgdGFyZ2V0U3RhdGUsIGhvbGQgcGxheWJhY2tTdGF0ZSB1cGRhdGVcbiAgICAgICAgLy8gdG8gcHJldmVudCB1bndhbnRlZCBzeW5jUGxheWJhY2tTdGF0ZVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gc2V0UGxheWJhY2tTdGF0ZShzdGF0ZSkpXG4gICAgICB9KSxcbiAgICBbXVxuICApXG4gIC8vIHVzZUVmZmVjdCBpcyB0b28gbGF0ZSB0byB1bmxvY2sgcGxheSBvbiBTYWZhcmlcbiAgLy8gVE9ETyBjaGVjayBpZiB0aGlzIHdvcmsgYWZ0ZXIgdXBncmFkaW5nIFJlYWN0IDE4XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBsYXllcikge1xuICAgICAgc3luY1BsYXliYWNrU3RhdGUoXG4gICAgICAgIHZpZGVvRWxlbWVudC5jdXJyZW50LFxuICAgICAgICB7cGxheWVyLCBwbHVnaW5zfSxcbiAgICAgICAgdGFyZ2V0U3RhdGVcbiAgICAgICk/LmNhdGNoKGVycm9yID0+IGhhbmRsZXJzLmN1cnJlbnQub25CbG9ja2VkQXV0b3BsYXk/LihlcnJvcikpXG4gICAgfVxuICB9LCBbcGxheWJhY2tTdGF0ZSwgcGxheWVyICYmIHRhcmdldFN0YXRlXSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB7Y3VycmVudFRpbWV9ID0gZ2V0TWVkaWFUaW1lKHZpZGVvRWxlbWVudC5jdXJyZW50LCBwbHVnaW5zLCBwbGF5ZXIpXG4gICAgaWYgKHBsYXllciAmJiBNYXRoLmFicyhjdXJyZW50VGltZSAtIHRhcmdldFRpbWUpID4gMC41KSB7XG4gICAgICAvLyBzZWVraW5nIHVuYXZhaWxhYmxlIGNhc2VzIGFyZSBoYW5kbGVkIGJ5IHNlZWsgZnVuY3Rpb25cbiAgICAgIHNlZWsodmlkZW9FbGVtZW50LmN1cnJlbnQsIHtwbGF5ZXIsIHBsdWdpbnN9LCB0YXJnZXRUaW1lKVxuICAgIH1cbiAgfSwgW3BsYXllciAmJiB0YXJnZXRUaW1lXSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRQbGF5YmFja1JhdGUodmlkZW9FbGVtZW50LmN1cnJlbnQsIHtwbGF5ZXJ9LCBwbGF5YmFja1JhdGUpXG4gIH0sIFtwbGF5YmFja1JhdGUsIHBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJ10pXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBsYXllcikge1xuICAgICAgc2V0UXVhbGl0eSh2aWRlb0VsZW1lbnQuY3VycmVudCwge3BsYXllcn0sIHF1YWxpdHkpXG4gICAgfVxuICB9LCBbcXVhbGl0eSwgcGxheWVyXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXt2aWRlb0NvbnRhaW5lcn0+XG4gICAgICA8dmlkZW8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBqc3gtYTExeS9tZWRpYS1oYXMtY2FwdGlvblxuICAgICAgICByZWY9e211bHRpUmVmKHZpZGVvUmVmLCB2aWRlb0VsZW1lbnQpfVxuICAgICAgICBtdXRlZFxuICAgICAgICBwbGF5c0lubGluZVxuICAgICAgICBjc3M9e1t2aWRlb1JlYWR5IHx8IHZpZGVvUHJlcGFyaW5nU3R5bGUsIHZpZGVvU3R5bGVdfVxuICAgICAgICB7Li4udmlkZW9BdHRyaWJ1dGVzfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5WaWRlby5wcm9wVHlwZXMgPSB7XG4gIHNvdXJjZTogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG4gIGRybTogUHJvcFR5cGVzLm9iamVjdCxcbiAgcGxheWJhY2tTdGF0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3VycmVudFRpbWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHBsYXliYWNrUmF0ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgcXVhbGl0eTogUHJvcFR5cGVzLm9iamVjdCxcbiAgc3VidGl0bGVzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhdWRpbzogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2Vla2FibGU6IFByb3BUeXBlcy5ib29sLFxuICBwbHVnaW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIGJpdG1vdmluOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzaGFrYTogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25QbGF5ZXJMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblBsYXliYWNrU3RhdGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsb2NrZWRBdXRvcGxheTogUHJvcFR5cGVzLmZ1bmMsXG4gIHZpZGVvUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICBwbGF5ZXJSZWY6IFByb3BUeXBlcy5vYmplY3QsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvXG4iXX0= */"],...videoAttributes})});};Video.propTypes={source:PropTypes$1.arrayOf(PropTypes$1.object),drm:PropTypes$1.object,playbackState:PropTypes$1.string,currentTime:PropTypes$1.number,playbackRate:PropTypes$1.number,quality:PropTypes$1.object,subtitles:PropTypes$1.string,audio:PropTypes$1.string,seekable:PropTypes$1.bool,plugins:PropTypes$1.array,bitmovin:PropTypes$1.object,shaka:PropTypes$1.object,onPlayerLoaded:PropTypes$1.func,onPlaybackStateChange:PropTypes$1.func,onBlockedAutoplay:PropTypes$1.func,videoRef:PropTypes$1.oneOfType([PropTypes$1.object,PropTypes$1.func]),playerRef:PropTypes$1.object};const shouldShowSubtitles=subtitlesMenu=>subtitlesMenu.length>0||subtitlesMenu[0];const shouldShowAudio=audioMenu=>audioMenu.length>1;const speedItems=[0.25,0.5,0.75,1,1.25,1.5,1.75,2].map(value=>({label:`${value}x`,value}));const getQualityOptions=({sections,values:{quality}})=>{var _sections$find,_sections$find$items$;return (_sections$find=sections.find(item=>item.name==='quality'))===null||_sections$find===void 0?void 0:(_sections$find$items$=_sections$find.items.find(item=>item.value===quality))===null||_sections$find$items$===void 0?void 0:_sections$find$items$.options;};const autoQualityOption={label:`Auto`,options:{maxHeight:Infinity,minHeight:0},value:'auto'};const getQualityItemsFromManifest=player=>[autoQualityOption].concat((player.getAvailableVideoQualities()||[]).filter(q=>q.height>0).sort((a,b)=>b.height-a.height).map(q=>({label:`${q.height}p`,// Set the min/max height to the same value to fix the quality.
|
|
641
|
+
options:{maxHeight:q.height,minHeight:q.height},value:q.height})));const getQualitySettings=(options,player)=>{// With native HLS, manifest rewrite is required to enable quality setting
|
|
642
|
+
// TODO let this covered by test, maybe refactor?
|
|
643
|
+
const items=needNativeHls()&&!options.rewriteManifest?[]:options.items||getQualityItemsFromManifest(player);return items.length>0&&items[0]&&{name:'quality',title:'KKS.QUALITY',items,getDefault:(preferred=options.default||items[0].value)=>{const maxHeight=preferred||items[0].value;return (nearest(items.filter(item=>(item.height||item.value)<=maxHeight),item=>(item.height||item.value)-maxHeight)||items[0]).value;}};};const getSelectedAudioName=player=>{const lang=getAudio({},{player});/*
|
|
644
|
+
Sometimes, HLS manifest doesn't describe the default audio track.
|
|
645
|
+
Get current audio track information is undefined even though the player still has audio streaming.
|
|
646
|
+
For this case, we select first audio track.
|
|
647
|
+
More detail please refer to OTP-3450.
|
|
648
|
+
*/const audioList=getAudioList({},{player});const defaultAudioName=audioList.length?audioList[0].lang:undefined;return lang!==undefined?lang:defaultAudioName;};const getDefault=(section,{preferred})=>{if(typeof section.getDefault==='function'){return section.getDefault(preferred);}if(section.name==='speed'){return preferred!==null&&preferred!==void 0?preferred:1;}};const getSettingsData=({media,player,contentType,source=[],quality={},preferred={},otherSections=[]})=>{var _subtitleItems$find;// TODO extract base player specific things
|
|
649
|
+
const subtitleItems=getSubtitles({},{player});const selectedSubtitleName=((_subtitleItems$find=subtitleItems.find(track=>track.enabled))===null||_subtitleItems$find===void 0?void 0:_subtitleItems$find.value)||'off';const audioItems=getAudioList({},{player}).filter(track=>track.lang&&track.lang!=='und').map(track=>({label:track.label,value:track.lang}))||[];const selectedSource=getSource(source,{preferManifestType:needNativeHls()?'hls':'dash'})||{};const sections=[quality&&getQualitySettings({...quality,items:selectedSource.qualityOptions,type:selectedSource.type},player),shouldShowSubtitles(subtitleItems)&&{name:'subtitles',title:'KKS.SUBTITLES',items:[...subtitleItems,{label:'OFF',value:'off'}]},shouldShowAudio(audioItems)&&{name:'audio',title:'KKS.AUDIO',items:audioItems},contentType!=='lives'&&{name:'speed',title:'KKS.SETTING.SPEED',items:speedItems}].concat(otherSections).filter(Boolean);const values=sections.reduce((result,section)=>{// TODO take fallback option if preferred is not available
|
|
650
|
+
// eslint-disable-next-line no-param-reassign
|
|
651
|
+
result[section.name]=getDefault(section,{preferred:preferred[section.name]})||preferred[section.name];return result;},{});values.subtitles=selectedSubtitleName;values.audio=getSelectedAudioName(player);if(!values.speed&&(media===null||media===void 0?void 0:media.playbackRate)>0){values.speed=media.playbackRate;}return {sections,values};};const volumeStorageKey='KKSPlayback-volume';const syncVolume=(video,setInitVolume)=>{let initialVolume=1;try{var _JSON$parse,_localStorage;initialVolume=(_JSON$parse=JSON.parse((_localStorage=localStorage)===null||_localStorage===void 0?void 0:_localStorage.getItem(volumeStorageKey)))!==null&&_JSON$parse!==void 0?_JSON$parse:1;// eslint-disable-next-line no-empty
|
|
652
|
+
}catch(e){}setInitVolume(initialVolume);video.dispatchEvent(new CustomEvent('volumechange'));return on(video,'volumechange',()=>{var _localStorage2;const volume=video.muted?0:video.volume;(_localStorage2=localStorage)===null||_localStorage2===void 0?void 0:_localStorage2.setItem(volumeStorageKey,volume);});};const linkMediaVolume=getOptions=>{let lastVolume=1;const subscribe=handler=>{const{video:media}=getOptions();handler({volume:media.volume,muted:media.muted});return on(media,'volumechange',()=>handler({volume:media.volume,muted:media.muted}));};const onChange=(volume,{commit}={})=>{const{video:media,getPlayer}=getOptions();if(commit){if(volume>0){lastVolume=volume;}else {// for unmute volume
|
|
653
|
+
setVolume$1(media,{player:getPlayer()},lastVolume);}}setVolume$1(media,{player:getPlayer()},volume);};const toggleMute$1$1=()=>{const{video:media}=getOptions();toggleMute$1(media);};return {subscribe,onChange,toggleMute:toggleMute$1$1};};const parseVTT=data=>{const lines=data.split(/\n\n/g).slice(1);// may replace with async parser to prevent blocking render
|
|
654
|
+
return Promise.resolve(lines.map(line=>{const[time,text]=line.split('\n');const[startTime,endTime]=time.split('-->').map(convertToSeconds);return {startTime,endTime,text};}));};const replaceLast=(url,path)=>url.replace(/\/[^/]+$/,`/${path}`);const parseThumbnails=(data,url)=>parseVTT(data).then(items=>items.map(item=>{const[imagePath,,x,y,width,height]=item.text.split(/[#=,]/g);return {startTime:item.startTime,endTime:item.endTime,image:replaceLast(url,imagePath),position:{x:parseFloat(x),y:parseFloat(y),width:parseFloat(width),height:parseFloat(height)}};}));/* @jsxImportSource @emotion/react */const containerStyle={position:'absolute',left:'calc(-1000vw - 100%)',bottom:'28px',textAlign:'center',transformOrigin:'bottom',transform:`
|
|
655
|
+
translateX(calc(max(
|
|
656
|
+
var(--thumbnail-width) * 0.5px - 50%,
|
|
657
|
+
min(
|
|
658
|
+
var(--pointer-x) - var(--seekbar-left) - 50%,
|
|
659
|
+
var(--seekbar-right) - 50% - var(--thumbnail-width) * 0.5px - 2em
|
|
660
|
+
)
|
|
661
|
+
)))
|
|
662
|
+
scale(calc(var(--thumbnail-width) / var(--thumbnail-original-width)))
|
|
663
|
+
`,'> div':{border:'1px solid white',boxShadow:'0 0 5px 2px rgba(0, 0, 0, 0.3)',backgroundColor:'#000'}};const showStyle={left:0,transition:'z-index 0s linear, opacity 0.5s ease'};const VideoThumbnail=/*#__PURE__*/forwardRef(({className,style,time,image,x,y,width,height},ref)=>jsxs("div",{ref:ref// Use Number.isFinite to detect boolean
|
|
664
|
+
,css:[containerStyle,Number.isFinite(time)&&time>=0&&showStyle,process.env.NODE_ENV==="production"?"":";label:VideoThumbnail;",process.env.NODE_ENV==="production"?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpZGVvVGh1bWJuYWlsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVDTSIsImZpbGUiOiJWaWRlb1RodW1ibmFpbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmltcG9ydCB7Zm9yd2FyZFJlZn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCBmb3JtYXR0ZWRUaW1lIGZyb20gJ3V0aWwvZm9ybWF0dGVkVGltZSdcblxuY29uc3QgY29udGFpbmVyU3R5bGUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBsZWZ0OiAnY2FsYygtMTAwMHZ3IC0gMTAwJSknLFxuICBib3R0b206ICcyOHB4JyxcbiAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAnYm90dG9tJyxcbiAgdHJhbnNmb3JtOiBgXG4gICAgdHJhbnNsYXRlWChjYWxjKG1heChcbiAgICAgIHZhcigtLXRodW1ibmFpbC13aWR0aCkgKiAwLjVweCAtIDUwJSxcbiAgICAgIG1pbihcbiAgICAgICAgdmFyKC0tcG9pbnRlci14KSAtIHZhcigtLXNlZWtiYXItbGVmdCkgLSA1MCUsXG4gICAgICAgIHZhcigtLXNlZWtiYXItcmlnaHQpIC0gNTAlIC0gdmFyKC0tdGh1bWJuYWlsLXdpZHRoKSAqIDAuNXB4IC0gMmVtXG4gICAgICApXG4gICAgKSkpXG4gICAgc2NhbGUoY2FsYyh2YXIoLS10aHVtYm5haWwtd2lkdGgpIC8gdmFyKC0tdGh1bWJuYWlsLW9yaWdpbmFsLXdpZHRoKSkpIFxuICBgLFxuICAnPiBkaXYnOiB7XG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkIHdoaXRlJyxcbiAgICBib3hTaGFkb3c6ICcwIDAgNXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMyknLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyMwMDAnLFxuICB9LFxufVxuXG5jb25zdCBzaG93U3R5bGUgPSB7XG4gIGxlZnQ6IDAsXG4gIHRyYW5zaXRpb246ICd6LWluZGV4IDBzIGxpbmVhciwgb3BhY2l0eSAwLjVzIGVhc2UnLFxufVxuXG5jb25zdCBWaWRlb1RodW1ibmFpbCA9IGZvcndhcmRSZWYoXG4gICh7Y2xhc3NOYW1lLCBzdHlsZSwgdGltZSwgaW1hZ2UsIHgsIHksIHdpZHRoLCBoZWlnaHR9LCByZWYpID0+IChcbiAgICA8ZGl2XG4gICAgICByZWY9e3JlZn1cbiAgICAgIC8vIFVzZSBOdW1iZXIuaXNGaW5pdGUgdG8gZGV0ZWN0IGJvb2xlYW5cbiAgICAgIGNzcz17W2NvbnRhaW5lclN0eWxlLCBOdW1iZXIuaXNGaW5pdGUodGltZSkgJiYgdGltZSA+PSAwICYmIHNob3dTdHlsZV19XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAnLS10aHVtYm5haWwtb3JpZ2luYWwtd2lkdGgnOiB3aWR0aCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHdpZHRoOiBgJHt3aWR0aH1weGAsXG4gICAgICAgICAgaGVpZ2h0OiBgJHtoZWlnaHR9cHhgLFxuICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2ltYWdlfSlgLFxuICAgICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogYC0ke3h9cHggLSR7eX1weGAsXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAge2Zvcm1hdHRlZFRpbWUodGltZSl9XG4gICAgPC9kaXY+XG4gIClcbilcblxuVmlkZW9UaHVtYm5haWwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICB0aW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgaW1hZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gIHk6IFByb3BUeXBlcy5udW1iZXIsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvVGh1bWJuYWlsXG4iXX0= */"],className:className,style:{...style,'--thumbnail-original-width':width},children:[jsx("div",{style:{width:`${width}px`,height:`${height}px`,backgroundImage:`url(${image})`,backgroundPosition:`-${x}px -${y}px`}}),formattedTime(time)]}));VideoThumbnail.propTypes={className:PropTypes$1.string,style:PropTypes$1.object,time:PropTypes$1.oneOfType([PropTypes$1.number,PropTypes$1.oneOf([false])]),image:PropTypes$1.string,x:PropTypes$1.number,y:PropTypes$1.number,width:PropTypes$1.number,height:PropTypes$1.number};/* @jsxImportSource @emotion/react */const at=(array,index)=>index<0?array[array.length+index]:array[index];const SeekPreview=({thumbnailsUrl,time})=>{const thumbnailRef=useRef();const[thumbnails,setThumbnails]=useState([]);useEffect(()=>{let cancel=false;if(thumbnailsUrl){axios.get(thumbnailsUrl).then(result=>parseThumbnails(result.data,thumbnailsUrl)).then(data=>{if(!cancel)setThumbnails(data);});}return ()=>{setThumbnails([]);cancel=true;};},[thumbnailsUrl]);const currentThumbnail=useMemo(()=>thumbnails.find(t=>t.startTime<=time&&time<=t.endTime)||at(thumbnails,-1)||'',[time,thumbnails]);return thumbnails.length>0&&jsx(VideoThumbnail,{ref:thumbnailRef,time:time,image:currentThumbnail.image,...currentThumbnail.position});};SeekPreview.propTypes={thumbnailsUrl:PropTypes$1.string,time:PropTypes$1.oneOfType([PropTypes$1.number,PropTypes$1.oneOf([false])])};/* @jsxImportSource @emotion/react */const subtitlesStyle={alignSelf:'center',display:'flex',flexDirection:'column',overflow:'visible',maxWidth:'100%',position:'absolute',bottom:'6em',color:'#e8e6e3',textShadow:`#000 -1px -1px 0px, #000 1px -1px 0px, #000 -1px 1px 0px, #000 1px 1px 0px`,whiteSpace:'pre-line',textAlign:'center'};const Subtitles=({text})=>jsx("div",{css:subtitlesStyle,children:jsx("span",{children:text})});Subtitles.propTypes={text:PropTypes$1.string};/* eslint-disable react/prop-types */const ActiveSubtitles=({player})=>{const[subtitles,setSubtitles]=useState({});useEffect(()=>{if(player){return subscribeSubtitles({},{player},currentSubtitles=>setSubtitles(currentSubtitles));}},[player]);return/*#__PURE__*/jsx$1(Subtitles,{text:subtitles.text});};/* eslint-disable no-param-reassign */const sizes$2={'small-embed':200,embed:400,'tablet-portrait':600,'tablet-landscape':900,desktop:1200};const useLinkState=(request,dependencies=[])=>{const[state,setState]=useState();useEffect(()=>{request(setState);},dependencies);return state;};const flipState=state=>state==='playing'?'paused':'playing';// FIXME: too few lines to split a file, looking a better place
|
|
665
|
+
const getThumbnailsUrl=source=>{var _concat$find;return (_concat$find=[].concat(source).find(item=>item.type==='thumbnail'))===null||_concat$find===void 0?void 0:_concat$find.src;};const mergeSections=(current,target)=>{if(!current&&!target)return [];if(!current)return target;if(!target)return current;const map=new Map();current.forEach(e=>map.set(e.name,e));target.forEach(e=>map.set(e.name,e));return Array.from(map.values());};const PremiumPlayer=({source,startTime,autoplay,quality={},title,channelTitle,section={},playbackState:appPlaybackState,currentTime:appCurrentTime,playbackRate:appPlaybackRate,volume:appVolume,thumbnailsUrl,// FIXME deprecated, default value is no longer needed
|
|
666
|
+
drm,controls={autohide:3000},// TODO chapters
|
|
667
|
+
marks=[],// TODO sectionId
|
|
668
|
+
intl,settings:targetSettings,plugins=[],style,children,uiElements:{controlButtons:targetControlButtons,settingButton,...targetUIElements}={controlButtons:{}},overrideSettingSections=sections=>sections,onError,onPlaybackStateChange,onBack,onChangeNext,onChangePrevious,onOpenSettings,onChangeSettings,onPlayerLoaded,sendLog,...videoProps})=>{var _videoRef$current2;const uiType=isDesktop$1()?'desktop':'mobile';const videoRef=useRef();const containerRef=useRef();const playerRef=useRef();const adContainerRef=useRef();// TODO move RWD related to Layout
|
|
669
|
+
const{currentBreakpoint:size,width,observe}=useDimensions({polyfill:ResizeObserver,breakpoints:sizes$2});const[targetState,setTargetState]=useState(()=>({playbackState:autoplay?'playing':'paused',currentTime:startTime}));const[playbackTime,setPlaybackTime]=useState({currentTime:0,bufferTime:0});const togglePlay=overrideState=>{if(targetState.playbackState!==overrideState){setTargetState(state=>({...state,playbackState:overrideState||flipState(state.playbackState)}));const result=overrideState||flipState(targetState.playbackState);sendLog===null||sendLog===void 0?void 0:sendLog(result,playbackTime);}};useEffect(()=>{if(appPlaybackState){togglePlay(appPlaybackState);}},[appPlaybackState]);useEffect(()=>{if(!isDesktop$1()){return blurPause(videoRef.current,()=>togglePlay('paused'));}},[]);const handleBlockedAutoplay=()=>togglePlay('paused');const updatePlaybackTime=event=>requestAnimationFrame(()=>((event===null||event===void 0?void 0:event.type)!=='timeupdate'||isBuffered(videoRef.current))&&setPlaybackTime(state=>({...state,...getMediaTime(videoRef.current,plugins,playerRef.current),...((event===null||event===void 0?void 0:event.type)==='durationchange'&&{currentTime:state.currentTime})})));const setTargetTime=(time,action)=>{var _videoRef$current;if(action&&sendLog){sendLog(action,playbackTime);}const trimmed=Math.min(time,((_videoRef$current=videoRef.current)===null||_videoRef$current===void 0?void 0:_videoRef$current.initialDuration)||Infinity);setTargetState(state=>({...state,// seek to 0 repeatedly edge case
|
|
670
|
+
currentTime:state.currentTime!==trimmed?trimmed:trimmed+0.01}));updatePlaybackTime();};const[playbackState,setPlaybackState]=useState('init');useEffect(()=>{if(typeof appCurrentTime==='number')setTargetTime(appCurrentTime||0);if(typeof appCurrentTime==='object')setTargetTime((appCurrentTime===null||appCurrentTime===void 0?void 0:appCurrentTime.value)||0);},[appCurrentTime]);const[errorData,setErrorData]=useState();const errorHandler=reactEvent=>{onError===null||onError===void 0?void 0:onError(reactEvent.nativeEvent);handleError(reactEvent,{displayError:data=>{setPlaybackState('error');setErrorData(data);},reload:()=>{if(videoRef.current.currentTime>1){setTargetTime(videoRef.current.currentTime);}setPlaybackState('error');playerRef.current.lastSrc='';setTimeout(()=>setPlaybackState('init'),1);}});};const[settings,setSettings]=useState(()=>({sections:[],values:{speed:1}}));const fetchSettings=async()=>{const contentType=!isLiveDuration(videoRef.current.duration)?'videos':'lives';setSettings(current=>{const{values,sections}=getSettingsData({media:videoRef.current,player:playerRef.current,source,quality,contentType,preferred:current.preferred,otherSections:targetSettings===null||targetSettings===void 0?void 0:targetSettings.sections});return {preferred:current.preferred,values,sections:overrideSettingSections(sections)};});};const lastState=useRef(playbackState);const handlePlaybackStateChange=(event,state)=>{if(lastState.current==='error'){return;}onPlaybackStateChange===null||onPlaybackStateChange===void 0?void 0:onPlaybackStateChange(event,state);// let view mode / fullscreen update first
|
|
671
|
+
if(videoRef.current.webkitDisplayingFullscreen&&/playing|paused/.test(state)){togglePlay(state);}if(state==='ended'){togglePlay('paused');}if(state==='loading'&&lastState.current!=='init'){setTimeout(()=>togglePlay('playing'),1);}if(lastState.current==='loading'){fetchSettings();}lastState.current=state;setPlaybackState(state);};const[activePanel,setActivePanel]=useState('');const sendChangeSettingsLog=(name,value)=>{// TODO: other events by user trigger it.
|
|
672
|
+
switch(name){case'speed':sendLog===null||sendLog===void 0?void 0:sendLog('speedSettingChange',playbackTime,{playback_speed:value});break;case'quality':sendLog===null||sendLog===void 0?void 0:sendLog('qualitySettingChange',playbackTime,{quality_name:value});break;}};const changeSettings=(name,value)=>{// TODO consider merge into useReducer?
|
|
673
|
+
onChangeSettings===null||onChangeSettings===void 0?void 0:onChangeSettings({name,value});setTargetTime(playbackTime.currentTime);setSettings(current=>({...current,values:{...current.values,[name]:value},preferred:{...current.preferred,[name]:value}}));setActivePanel('');togglePlay('playing');sendChangeSettingsLog(name,value);};const openSettings=event=>{const animationFrame=activePanel!=='settings'&&requestAnimationFrame(()=>{onOpenSettings===null||onOpenSettings===void 0?void 0:onOpenSettings(event,settings);if(activePanel!=='settings'&&!event.defaultPrevented&&uiType!=='desktop'){togglePlay('paused');}// In iOS Safari, we need to update settings data
|
|
674
|
+
fetchSettings();});setActivePanel(current=>current==='settings'?'':'settings');return animationFrame;};useEffect(()=>{if(appPlaybackRate>0){setSettings(current=>({...current,values:{...current.values,speed:appPlaybackRate}}));}},[appPlaybackRate]);useEffect(()=>{sendLog===null||sendLog===void 0?void 0:sendLog(activePanel==='settings'?'openSettings':'closeSettings',playbackTime);},[activePanel==='settings']);const qualityOptions=useMemo(()=>getQualityOptions(settings),[settings.values.quality]);const viewMode=useLinkState(update=>onViewModeChange(videoRef.current,update));const sourceOverride=useLinkState(async update=>{var _quality$rewriteManif;const result=source&&(await((_quality$rewriteManif=quality.rewriteManifest)===null||_quality$rewriteManif===void 0?void 0:_quality$rewriteManif.call(quality,source,qualityOptions)));update(result||source);},[source,qualityOptions]);const waiting=useLazyWaiting(playbackState==='buffering');const activePlayback=playbackState==='playing'||playbackState==='waiting';const{mode:autoHideMode,onClick,onMouseMove}=useAutoHide({pinned:!controls.autohide||waiting||!activePlayback||activePanel,tapToHide:uiType==='mobile',hideTimeMs:controls.autohide});const mode=controls.autohide?autoHideMode:controls?'shown':'hidden';const controlsDisplay=controls==='title-only'?'hidden':mode;const shouldHidePanels=(controls==='no-panel'||controlsDisplay==='hidden')&&activePanel;const havePlayPanel=uiType==='desktop'&&!waiting&&!activePanel&&!/title-only|no-panel/.test(controls)&&(controls.autohide||mode==='shown');useEffect(()=>{if(shouldHidePanels){setActivePanel('');}},[shouldHidePanels]);const unmuteVolume=useRef(1);const{subscribe,onChange,toggleMute}=linkMediaVolume(()=>({video:videoRef.current,getPlayer:()=>playerRef.current,getUnmuteVolume:()=>unmuteVolume.current,setUnmuteVolume:volume=>{unmuteVolume.current=volume;}}));const changePrevious=event=>{onChangePrevious(event);togglePlay('paused');videoRef.current.dispatchEvent(new CustomEvent('loadstart'));sendLog===null||sendLog===void 0?void 0:sendLog('previousEpisode',playbackTime);};const changeNext=event=>{onChangeNext(event);togglePlay('paused');videoRef.current.dispatchEvent(new CustomEvent('loadstart'));sendLog===null||sendLog===void 0?void 0:sendLog('nextEpisode',playbackTime);};useEffect(()=>{if(appVolume>=0){onChange(appVolume);}},[appVolume]);useEffect(()=>{if(targetSettings){setSettings(current=>({...current,// Keep the same object reference if there is nothing to change in the revalant properties
|
|
675
|
+
...(targetSettings.values&&{values:{...current.values,...targetSettings.values}}),...(targetSettings.preferred&&{preferred:{...current.preferred,...targetSettings.preferred}}),// Don't need to check targetSettings.sections because mergeSections will keep the original reference if there is nothing to update.
|
|
676
|
+
sections:mergeSections(current.sections,targetSettings.sections)}));}},[targetSettings]);useEffect(()=>{// The adContainer should be set before `load` because ImaDai.load needs it.
|
|
677
|
+
plugins.forEach(plugin=>{var _plugin$setAdContaine;return (_plugin$setAdContaine=plugin.setAdContainer)===null||_plugin$setAdContaine===void 0?void 0:_plugin$setAdContaine.call(plugin,adContainerRef.current);});},[]);const seekBarOverrides=Object.assign({},...plugins.map(plugin=>{var _plugin$getSeekbarPro;return (_plugin$getSeekbarPro=plugin.getSeekbarProps)===null||_plugin$getSeekbarPro===void 0?void 0:_plugin$getSeekbarPro.call(plugin);}));const canSeek=playbackState!=='ended'&&!isLiveDuration((_videoRef$current2=videoRef.current)===null||_videoRef$current2===void 0?void 0:_videoRef$current2.initialDuration);/**
|
|
678
|
+
* TODO: Need to inject props to the react elements from targetUIElements.
|
|
679
|
+
* The possible solution is `React.cloneElement`
|
|
680
|
+
*/const handleSeekEvent=()=>sendLog===null||sendLog===void 0?void 0:sendLog('seek',playbackTime);const handleAudioVolumeSettingChangeEvent=volume=>sendLog===null||sendLog===void 0?void 0:sendLog('audioVolumeSettingChange',playbackTime,{volume});const handleMuteSettingChangeEvent=muted=>sendLog===null||sendLog===void 0?void 0:sendLog('audioMuteSettingChange',playbackTime,{muted});const uiElements={title,channelTitle:/*#__PURE__*/jsx$1(ChannelTitle,{title:channelTitle,startTime:section.start,endTime:section.end}),controlButtons:{playButton:/*#__PURE__*/jsx$1(PlayButton$1,{playbackState:targetState.playbackState,ended:playbackState==='ended',hidden:uiType!=='desktop'&&(waiting||/loading/.test(playbackState)),onClick:()=>togglePlay()}),...(playerRef.current&&!playerRef.current.isLive()&&{rewindButton:/*#__PURE__*/jsx$1(Button,{startIcon:"rewind10",title:"KKS.PLAYER.REWIND",disabled:!canSeek,onClick:()=>setTargetTime(playbackTime.currentTime-10,'rewind')}),forwardButton:/*#__PURE__*/jsx$1(Button,{startIcon:"forward10",title:"KKS.PLAYER.FORWARD",disabled:!canSeek,onClick:()=>setTargetTime(playbackTime.currentTime+10,'forward')}),nextEpisodeButton:/*#__PURE__*/jsx$1(Button,{startIcon:"nextEpisode",title:"KKS.PLAYER.NEXT",disabled:!onChangeNext,onClick:changeNext}),previousEpisodeButton:/*#__PURE__*/jsx$1(Button,{startIcon:"previousEpisode",title:"KKS.PLAYER.PREVIOUS",disabled:!onChangePrevious,onClick:changePrevious})}),...targetControlButtons},seekbar:playbackTime.duration>0&&/*#__PURE__*/jsx$1(Seekbar$1// TODO ensure response quickly to forward backward 10
|
|
681
|
+
,{startTime:playbackTime.startTime,currentTime:playbackTime.currentTime,bufferTime:playbackTime.bufferTime,duration:playbackTime.duration,play:()=>togglePlay('playing'),pause:()=>togglePlay('paused'),seek:setTargetTime// TODO marks = chapters
|
|
682
|
+
,marks:marks,plugins:plugins,onSeekEvent:handleSeekEvent,...seekBarOverrides,children:!activePanel&&source&&/*#__PURE__*/jsx$1(SeekPreview,{thumbnailsUrl:getThumbnailsUrl(source)||thumbnailsUrl,duration:playbackTime.duration})}),backButton:onBack&&/*#__PURE__*/jsx$1(Button,{startIcon:"back",title:"KKS.BACK",onClick:onBack}),fullscreenButton:/*#__PURE__*/jsx$1(FullscreenButton,{viewMode:viewMode,onClick:()=>toggleFullscreen(containerRef.current)}),volumeControl:width>=sizes$2['small-embed']&&/*#__PURE__*/jsx$1(VolumeControl// iOS video volume locks to 1, sliders is no use (OTP-1878)
|
|
683
|
+
,{slider:!isIOS(),onAudioVolumeSettingChangeEvent:handleAudioVolumeSettingChangeEvent,onAudioMuteSettingChange:handleMuteSettingChangeEvent,subscribe,onChange,toggleMute}),backItems:/*#__PURE__*/jsxs$1(Fragment,{children:[/*#__PURE__*/jsx$1(ActiveSubtitles,{player:playerRef.current}),havePlayPanel&&/*#__PURE__*/jsx$1(PlayPanel,{onClick:()=>togglePlay()})]}),...targetUIElements};return/*#__PURE__*/jsx$1(IntlProvider,{...intl,children:/*#__PURE__*/jsxs$1(DefaultLayout,{style:style,type:uiType,display:mode,controlsDisplay:controlsDisplay,size:size,video:/*#__PURE__*/jsx$1(Video,{...videoProps,videoRef:multiRef(videoRef,videoProps.videoRef),source:playbackState!=='error'&&sourceOverride,drm:drm,playbackState:targetState.playbackState,currentTime:targetState.currentTime,playbackRate:settings.values.speed,quality:qualityOptions,subtitles:settings.values.subtitles,audio:settings.values.audio,plugins:plugins,onError:errorHandler,onPlaybackStateChange:handlePlaybackStateChange,onBlockedAutoplay:handleBlockedAutoplay,onCanPlay:updatePlaybackTime,onTimeUpdate:updatePlaybackTime,onDurationChange:updatePlaybackTime,onPlayerLoaded:player=>{playerRef.current=player;onPlayerLoaded===null||onPlayerLoaded===void 0?void 0:onPlayerLoaded(player);syncVolume(videoRef.current,initialVolume=>setVolume$1(videoRef.current,{player:playerRef.current},uiType==='mobile'?1:initialVolume));}}),containerRef:element=>{containerRef.current=element;observe(element);},adContainerRef:adContainerRef,...uiElements,onClick:onClick,onMouseMove:onMouseMove,children:[children,settingButton===false?'':/*#__PURE__*/jsx$1(Settings,{type:uiType,sections:settings.sections// TODO hasBottomPanel bottom: 8em
|
|
684
|
+
,open:activePanel==='settings',values:settings.values,onOpen:openSettings,onChange:({name,value})=>changeSettings(name,value),onClose:()=>setActivePanel('')}),waiting&&/*#__PURE__*/jsx$1(LoadingSpinner,{}),/*#__PURE__*/jsx$1(Backdrop,{open:!playbackState||playbackState==='loading',children:/*#__PURE__*/jsx$1(LoadingSpinner,{})}),playbackState==='error'&&errorData&&/*#__PURE__*/jsx$1(Error$1,{error:errorData,onBack:onBack})]})});};({reload:PropTypes$1.func,goBack:PropTypes$1.func});({src:PropTypes$1.string});/* @jsxImportSource @emotion/react */keyframes`
|
|
685
|
+
0% {
|
|
686
|
+
background-image: url("${icon.castConntecting0}");
|
|
687
|
+
}
|
|
688
|
+
33% {
|
|
689
|
+
background-image: url("${icon.castConntecting1}");
|
|
690
|
+
}
|
|
691
|
+
66% {
|
|
692
|
+
background-image: url("${icon.castConntecting2}");
|
|
693
|
+
}
|
|
694
|
+
100% {
|
|
695
|
+
background-image: url("${icon.castConntecting0}");
|
|
696
|
+
}
|
|
697
|
+
`;({opening:PropTypes$1.bool,coverImageUrl:PropTypes$1.string,message:PropTypes$1.node,title:PropTypes$1.node,containerRef:PropTypes$1.object,play:PropTypes$1.func,dismiss:PropTypes$1.func});({open:PropTypes$1.bool,onToggle:PropTypes$1.func,title:PropTypes$1.node,children:PropTypes$1.node});function _EMOTION_STRINGIFIED_CSS_ERROR__$2(){return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).";}process.env.NODE_ENV==="production"?{name:"8cucgv",styles:"flex:100%"}:{name:"6koemc-CastOverlay",styles:"flex:100%;label:CastOverlay;",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNhc3RPdmVybGF5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtDVyIsImZpbGUiOiJDYXN0T3ZlcmxheS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcblxuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdjb250ZXh0L0kxOG4nXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24nXG5pbXBvcnQge0J1dHRvbn0gZnJvbSAnLi9idXR0b25zJ1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4vQmFja2Ryb3AnXG5cbmNvbnN0IHN0eWxlID0ge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgZmxleFdyYXA6ICd3cmFwJyxcbiAgZmxleDogJzEwMCUnLFxuICBtYXJnaW46ICcxcmVtIDAnLFxuICBwYWRkaW5nOiAnMCAxLjVyZW0nLFxuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICBidXR0b246IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICczNnB4JyxcbiAgICBsZWZ0OiAnMzZweCcsXG4gIH0sXG59XG5cbmNvbnN0IGljb25TdHlsZSA9IHtcbiAgd2lkdGg6ICc3OHB4JyxcbiAgaGVpZ2h0OiAnNzhweCcsXG4gIGZpbHRlcjogJ2ludmVydCgxMDAlKScsXG59XG5cbmNvbnN0IENhc3RPdmVybGF5ID0gKHtvbkJhY2t9KSA9PiAoXG4gIDxCYWNrZHJvcCBvcGVuPlxuICAgIDxkaXYgY3NzPXtzdHlsZX0+XG4gICAgICA8QnV0dG9uIHN0YXJ0SWNvbj1cImJhY2tcIiBvbkNsaWNrPXtvbkJhY2t9IC8+XG4gICAgICA8SWNvbiB0eXBlPVwiY2FzdENvbm5lY3RlZFwiIHN0eWxlPXtpY29uU3R5bGV9IC8+XG4gICAgICA8ZGl2IGNzcz17e2ZsZXg6ICcxMDAlJ319PlxuICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cIktLUy5DQVNUSU5HXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L0JhY2tkcm9wPlxuKVxuXG5DYXN0T3ZlcmxheS5wcm9wVHlwZXMgPSB7XG4gIG9uQmFjazogUHJvcFR5cGVzLmZ1bmMsXG59XG5cbmV4cG9ydCBkZWZhdWx0IENhc3RPdmVybGF5XG4iXX0= */",toString:_EMOTION_STRINGIFIED_CSS_ERROR__$2};({onBack:PropTypes$1.func});/* eslint-disable no-promise-executor-return */const castContext=/*#__PURE__*/createContext();({appId:PropTypes$1.string,children:PropTypes$1.node,onConnected:PropTypes$1.func,onCasting:PropTypes$1.func,onError:PropTypes$1.func});castContext.Consumer;function _EMOTION_STRINGIFIED_CSS_ERROR__$1(){return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).";}process.env.NODE_ENV==="production"?{name:"1q1y12d",styles:"width:2em;height:2em;border-radius:0.25em;margin:0.75em;object-fit:cover"}:{name:"1tbh4x5-channelIcon",styles:"width:2em;height:2em;border-radius:0.25em;margin:0.75em;object-fit:cover;label:channelIcon;",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByZW1pdW1QbHVzUGxheWVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9XYyIsImZpbGUiOiJQcmVtaXVtUGx1c1BsYXllci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmltcG9ydCB7XG4gIHVzZVJlZHVjZXIsXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZVJlZixcbiAgdXNlTWVtbyxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCB7Z2V0TWVkaWFUaW1lfSBmcm9tICdwbGF5ZXJDb3JlL21lZGlhQmluZGluZ3MnXG5pbXBvcnQge2xvZ0V2ZW50TmFtZXMsIG1hcExvZ0V2ZW50c30gZnJvbSAncGxheWVyQ29yZS9wbGF5bG9nJ1xuaW1wb3J0IHtpc0Rlc2t0b3B9IGZyb20gJ3V0aWwvZW52aXJvbm1lbnQnXG5pbXBvcnQgc3RhcnRTZXNzaW9uIGZyb20gJ3BsYXliYWNrU2Vzc2lvbi9zdGFydFNlc3Npb24nXG5pbXBvcnQgcHJlbG9hZERhdGEgZnJvbSAncGxheWJhY2tTZXNzaW9uL3ByZWxvYWQnXG5pbXBvcnQge2dldFNvdXJjZVR5cGVTZXR0aW5nc30gZnJvbSAncGxheWJhY2tTZXNzaW9uL3NvdXJjZVR5cGUnXG5pbXBvcnQge2NyZWF0ZUFwaSwgZ2V0Q29udGVudEluZm8sIGdldFN0cmVhbUluZm99IGZyb20gJ3BsYXliYWNrU2Vzc2lvbi9hcGknXG5pbXBvcnQge2xpbmtBZFN0YXRlLCBnZXRBZFVpfSBmcm9tICdhZC9wbGF5ZXJJbnRlZ3JhdGlvbidcbmltcG9ydCB7RnVuY3Rpb25CYXJFeHRlbnNpb24sIEluZm9CYXJFeHRlbnNpb259IGZyb20gJ3BsYXllclVpL3VpRXh0ZW5zaW9ucydcbmltcG9ydCBQcmVtaXVtUGxheWVyIGZyb20gJ3ByZW1pdW0vUHJlbWl1bVBsYXllcidcbmltcG9ydCBDYXN0QnV0dG9uIGZyb20gJ3ByZW1pdW0vQ2FzdEJ1dHRvbidcbmltcG9ydCBMaXZlRW5kIGZyb20gJ3ByZW1pdW0vTGl2ZUVuZCdcbmltcG9ydCBBdXRvcGxheVByb21wdCBmcm9tICdwcmVtaXVtL0F1dG9wbGF5UHJvbXB0J1xuaW1wb3J0IENvdmVySW1hZ2UgZnJvbSAncHJlbWl1bS9Db3ZlckltYWdlJ1xuaW1wb3J0IFJlY29tbWVuZGF0aW9uUGFuZWwgZnJvbSAncGxheWVyVWkvUmVjb21tZW5kYXRpb25QYW5lbCdcbmltcG9ydCByZWR1Y2VVaSwge2luaXRTdGF0ZSBhcyBpbml0aWFsVWlTdGF0ZX0gZnJvbSAncGxheWVyL3N0b3JlL3JlZHVjZXIvVUknXG5pbXBvcnQgdWlBY3Rpb25zIGZyb20gJ3BsYXllci9zdG9yZS9hY3Rpb24vVUknXG5pbXBvcnQgQ2FzdE92ZXJsYXkgZnJvbSAncGxheWVyVWkvQ2FzdE92ZXJsYXknXG5pbXBvcnQge2xvYWRNZWRpYSwgc2V0dXBDYXN0LCBzdWJzY3JpYmVDYXN0U3RhdGV9IGZyb20gJ2Nhc3QvZnJhbWV3b3JrJ1xuaW1wb3J0IHtDYXN0U3RhdGV9IGZyb20gJ0VudW0nXG5pbXBvcnQge3VzZUNhc3RDb250ZXh0fSBmcm9tICdjYXN0L2NvbnRleHQnXG5cbmNvbnN0IGdldEVudGVycHJpc2VEcm1IZWFkZXJzID0gKHt0b2tlbn0pID0+ICh7XG4gICdYLUN1c3RvbS1EYXRhJzogYHRva2VuX3R5cGU9cGxheWJhY2smdG9rZW5fdmFsdWU9JHt0b2tlbn1gLFxufSlcblxuY29uc3QgcHJlbG9hZE1hcCA9IG5ldyBNYXAoKVxuXG5jb25zdCBQcmVtaXVtUGx1c1BsYXllciA9ICh7XG4gIGNvbnRyb2xzLFxuICBwcmVsb2FkID0gJ2F1dG8nLFxuICBwcmVsb2FkTGlzdCA9IFtdLFxuICBjdXJyZW50VGltZSxcbiAgcXVhbGl0eTogdGFyZ2V0UXVhbGl0eSxcbiAgc291cmNlVHlwZSxcbiAgaG9zdCxcbiAgYWNjZXNzVG9rZW4sXG4gIGRldmljZUlkLFxuICBoZWFkZXJzLFxuICBwYXJhbXMsXG4gIGNvbnRlbnRUeXBlLFxuICBjb250ZW50SWQsXG4gIGF1dG9wbGF5TmV4dCxcbiAgbG9vcCxcbiAgdGh1bWJuYWlsU2Vla2luZyxcbiAgcGx1Z2lucyA9IFtdLFxuICBjb3ZlckltYWdlVXJsLFxuICBjb3ZlckltYWdlRGlzcGxheSA9ICdhdXRvJyxcbiAgcmVjb21tZW5kYXRpb24sXG4gIHNlZWtDb25maWcgPSAnYXV0bycsXG4gIHVpRWxlbWVudHM6IHtsaXZlQnV0dG9uLCBjYXN0QnV0dG9uLCAuLi51aUVsZW1lbnRzfSA9IHt9LFxuICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIHdpbGwgZ2V0IGB1bmRlZmluZWRgIGZyb20gdGhlIGBwbGF5ZXJSZWZgIGJlY2F1c2Ugd2UgdXNlIGl0IHdpdGhvdXQgYGZvcndhcmRSZWZgLiBDaGVjayBpZiB3ZSBuZWVkIHRvIGZpeCB0aGlzIGlzc3VlXG4gIHBsYXllclJlZixcbiAgY2hpbGRyZW4sXG4gIG9uRXJyb3IsXG4gIG9uQXBpRXJyb3IsXG4gIG9uUGxheWJhY2tTdGF0ZUNoYW5nZSxcbiAgb25DaGFuZ2UsXG4gIG9uU291cmNlVHlwZUNoYW5nZWQsXG4gIG9uUGxheWJhY2tBcGlSZXNwb25zZSxcbiAgc2VuZExvZyxcbiAgcGxheWJhY2tTdGF0ZTogYXBwUGxheWJhY2tTdGF0ZSxcbiAgLi4ucmVzdFxufSkgPT4ge1xuICBjb25zdCB2aWRlb1JlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGxhc3RTZXNzaW9uID0gdXNlUmVmKHt9KVxuICBjb25zdCBsb2dUYXJnZXQgPSB1c2VSZWYoKVxuICBjb25zdCBwcmVmZXJBcHBUaW1lID0gdXNlUmVmKGN1cnJlbnRUaW1lID49IDApXG4gIGNvbnN0IFtwbGF5YmFja1N0YXRlLCBzZXRQbGF5YmFja1N0YXRlXSA9IHVzZVN0YXRlKCdpbml0aWFsJylcbiAgY29uc3QgW3BsYXliYWNrSW5mbywgc2V0UGxheWJhY2tJbmZvXSA9IHVzZVN0YXRlKHtzb3VyY2U6IHt9fSlcbiAgY29uc3QgW2NvbnRlbnREYXRhLCBzZXRDb250ZW50RGF0YV0gPSB1c2VTdGF0ZSh7fSlcbiAgY29uc3QgW3NldHRpbmdTdGF0ZSwgc2V0U2V0dGluZ1N0YXRlXSA9IHVzZVN0YXRlKHtcbiAgICBzZWN0aW9uczogW10sXG4gICAgcHJlZmVycmVkOiB7fSxcbiAgfSlcbiAgY29uc3QgW3RhcmdldFBsYXliYWNrU3RhdGUsIHNldFRhcmdldFBsYXliYWNrU3RhdGVdID1cbiAgICB1c2VTdGF0ZShhcHBQbGF5YmFja1N0YXRlKVxuICBjb25zdCBbdWlTdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcihyZWR1Y2VVaSwgaW5pdGlhbFVpU3RhdGUpXG4gIGNvbnN0IGFwaUNvbmZpZyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtob3N0LCBhY2Nlc3NUb2tlbiwgZGV2aWNlSWQsIGhlYWRlcnMsIHBhcmFtc30pLFxuICAgIFtob3N0LCBhY2Nlc3NUb2tlbiwgZGV2aWNlSWQsIGhlYWRlcnMsIHBhcmFtc11cbiAgKVxuXG4gIC8vIFByb3ZpZGUgdGhlIGNvbnRlbnQgZnJvbSB0aGUgY2FjaGUgYXMgc29vbiBhcyBwb3NzaWJsZSB3aGVuIHRoZSBjb250ZW50IGhhcyBjaGFuZ2VkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZGF0YUluQ2FjaGUgPSBwcmVsb2FkTWFwLmdldChgJHtjb250ZW50VHlwZX0vJHtjb250ZW50SWR9YClcbiAgICBpZiAoZGF0YUluQ2FjaGU/LmNvbnRlbnQpIHtcbiAgICAgIHNldENvbnRlbnREYXRhKGdldENvbnRlbnRJbmZvKGRhdGFJbkNhY2hlLmNvbnRlbnQpKVxuICAgIH1cbiAgfSwgW2NvbnRlbnRUeXBlLCBjb250ZW50SWRdKVxuXG4gIGNvbnN0IGVuZFNlc3Npb24gPSAoe3ByZXNlcnZlU291cmNlfSA9IHt9KSA9PiB7XG4gICAgcHJlZmVyQXBwVGltZS5jdXJyZW50ID0gZmFsc2VcbiAgICBpZiAobGFzdFNlc3Npb24uY3VycmVudD8uZW5kKSB7XG4gICAgICBsYXN0U2Vzc2lvbi5jdXJyZW50ID0ge1xuICAgICAgICByZXF1ZXN0OiBsYXN0U2Vzc2lvbi5jdXJyZW50LmVuZCgpLFxuICAgICAgICAuLi4ocHJlc2VydmVTb3VyY2UgJiYge3NvdXJjZXM6IGxhc3RTZXNzaW9uLmN1cnJlbnQuc291cmNlc30pLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXByZXNlcnZlU291cmNlKSB7XG4gICAgICBzZXRQbGF5YmFja0luZm8oe3NvdXJjZXM6IFtdfSlcbiAgICAgIHNldENvbnRlbnREYXRhKHtjaGFwdGVyczogW119KVxuICAgIH1cbiAgfVxuICBjb25zdCBhbGxQbHVnaW5zID0gcGx1Z2luc1xuICBjb25zdCBsb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGxhc3RSZXN1bHQgPSBhd2FpdCBsYXN0U2Vzc2lvbi5jdXJyZW50LnJlcXVlc3RcbiAgICBsb2dUYXJnZXQuY3VycmVudD8ucmVzZXQoKVxuICAgIGlmIChsYXN0UmVzdWx0ID09PSAnY2FuY2VsJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldENvbnRlbnREYXRhKHt3YWl0Q29udGVudEluZm86IGNvbnRlbnRUeXBlID09PSAndmlkZW9zJ30pXG4gICAgY29uc3QgcmVzdFBsYXllck5hbWUgPSBbJ3NoYWthJywgJ2JpdG1vdmluJ10uZmluZChuYW1lID0+IG5hbWUgaW4gcmVzdClcbiAgICBsb2dUYXJnZXQuY3VycmVudCA9IG1hcExvZ0V2ZW50cyh7XG4gICAgICBwbGF5ZXJOYW1lOiByZXN0UGxheWVyTmFtZSB8fCAnc2hha2EnLFxuICAgICAgdmVyc2lvbjogXCIxLjE1LjI5XCIsXG4gICAgICB2aWRlbzogdmlkZW9SZWYuY3VycmVudCxcbiAgICAgIGdldFBsYXliYWNrU3RhdHVzOiAoKSA9PiBnZXRNZWRpYVRpbWUodmlkZW9SZWYuY3VycmVudCwgYWxsUGx1Z2lucywgcGxheWVyUmVmLmN1cnJlbnQpLFxuICAgIH0pXG4gICAgaWYgKHR5cGVvZiBzZW5kTG9nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsb2dUYXJnZXQuY3VycmVudC5hbGwoKHR5cGUsIGRhdGEpID0+IHNlbmRMb2cobG9nRXZlbnROYW1lc1t0eXBlXSwgZGF0YSkpXG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb25PcHRpb25zID0ge1xuICAgICAgdHlwZTogY29udGVudFR5cGUsXG4gICAgICBpZDogY29udGVudElkLFxuICAgICAgbWVkaWE6IHZpZGVvUmVmLmN1cnJlbnQsXG4gICAgICBnZXRDdXJyZW50VGltZTogKCkgPT4gZ2V0TWVkaWFUaW1lKHZpZGVvUmVmLmN1cnJlbnQsIHBsdWdpbnMsIHBsYXllclJlZi5jdXJyZW50KS5jdXJyZW50VGltZSxcbiAgICAgIG9uQ2hhbmdlQ29udGVudDogZGF0YSA9PiB7XG4gICAgICAgIG9uUGxheWJhY2tBcGlSZXNwb25zZT8uKCdjb250ZW50JywgZGF0YSlcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBnZXRDb250ZW50SW5mbyhkYXRhKVxuICAgICAgICBzZXRDb250ZW50RGF0YShjdXJyZW50Q29udGVudClcbiAgICAgICAgbG9nVGFyZ2V0LmN1cnJlbnQudXBkYXRlQ29udGVudCh7XG4gICAgICAgICAgLi4uZ2V0Q29udGVudEluZm8oZGF0YSksXG4gICAgICAgICAgdHlwZTogY29udGVudFR5cGUsXG4gICAgICAgICAgaWQ6IGNvbnRlbnRJZCxcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBvbkludmFsaWRUb2tlbjogKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnaW52YWxpZCB0b2tlbiwgcmVzdGFydCBzZXNzaW9uJylcbiAgICAgICAgZW5kU2Vzc2lvbih7cHJlc2VydmVTb3VyY2U6IHRydWV9KVxuICAgICAgICBsb2FkKClcbiAgICAgIH0sXG4gICAgICBvblNvdXJjZUNoYW5nZTogbmV3U291cmNlcyA9PiB7XG4gICAgICAgIGxhc3RTZXNzaW9uLmN1cnJlbnQuc291cmNlcyA9IG5ld1NvdXJjZXNcbiAgICAgICAgY29uc3Qgc291cmNlU2V0dGluZ3MgPSBnZXRTb3VyY2VUeXBlU2V0dGluZ3MobmV3U291cmNlcylcbiAgICAgICAgaWYgKHNvdXJjZVNldHRpbmdzKSB7XG4gICAgICAgICAgc2V0U2V0dGluZ1N0YXRlKGN1cnJlbnQgPT4gKHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICBzZWN0aW9uczogW3NvdXJjZVNldHRpbmdzXSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlcXVlc3ROZXdTZXNzaW9uOiAoKSA9PiB7XG4gICAgICAgIGVuZFNlc3Npb24oKVxuICAgICAgICBsb2FkKClcbiAgICAgIH0sXG4gICAgICBvblNlc3Npb25TdGFydDogcmVzRGF0YSA9PiB7XG4gICAgICAgIG9uUGxheWJhY2tBcGlSZXNwb25zZT8uKCdzdGFydCcsIHJlc0RhdGEpXG4gICAgICB9LFxuICAgICAgY2FjaGU6IHByZWxvYWRNYXAsXG4gICAgfVxuICAgIC8vIFRPRE8gaWdub3JlIGxpdmUgZW5kIGVycm9yIGZyb20gL3N0YXJ0IC9pbmZvXG4gICAgLy8gVE9ETyB0cnkgdG8gY2xlYXIgc2Vzc2lvbiBvbiBlcnJvclxuICAgIHN0YXJ0U2Vzc2lvbihjcmVhdGVBcGkoYXBpQ29uZmlnLCB7b25FcnJvcjogb25BcGlFcnJvcn0pLCBzZXNzaW9uT3B0aW9ucylcbiAgICAgIC50aGVuKGN1cnJlbnRTZXNzaW9uID0+IHtcbiAgICAgICAgbGFzdFNlc3Npb24uY3VycmVudCA9IGN1cnJlbnRTZXNzaW9uXG4gICAgICAgIHNldFBsYXliYWNrSW5mbyh7XG4gICAgICAgICAgc291cmNlczogY3VycmVudFNlc3Npb24uc291cmNlcyxcbiAgICAgICAgICB0b2tlbjogY3VycmVudFNlc3Npb24udG9rZW4sXG4gICAgICAgICAgZHJtUG9ydGFsVXJsOiBjdXJyZW50U2Vzc2lvbi5kcm1Qb3J0YWxVcmwsXG4gICAgICAgIH0pXG4gICAgICAgIC8vIGluIGNhc2UgY29udGVudCBBUEkgZmFpbCwgcGxheSBpdCBhbnl3YXkgd2l0aG91dCBzdGFydFRpbWVcbiAgICAgICAgc2V0Q29udGVudERhdGEoY3VycmVudCA9PiAoey4uLmN1cnJlbnQsIHdhaXRDb250ZW50SW5mbzogZmFsc2V9KSlcbiAgICAgIH0pXG4gICAgICAuY2F0Y2gocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gcmVzdWx0LnJlc3BvbnNlPy5kYXRhPy5lcnJvclxuICAgICAgICBjb25zdCBlcnJvciA9IGVycm9yRGF0YVxuICAgICAgICAgID8ge25hbWU6ICdQbGF5Y3JhZnRBcGlFcnJvcicsIC4uLmVycm9yRGF0YX1cbiAgICAgICAgICA6IHJlc3VsdFxuICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IpXG4gICAgICAgIHZpZGVvUmVmLmN1cnJlbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBDdXN0b21FdmVudCgnZXJyb3InKSwge2Vycm9yfSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgfVxuICBjb25zdCBhY3RpdmVEZXZpY2UgPSAhL2Nhc3Rpbmd8ZXJyb3IvLnRlc3QocGxheWJhY2tTdGF0ZSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXBwUGxheWJhY2tTdGF0ZSkge1xuICAgICAgc2V0VGFyZ2V0UGxheWJhY2tTdGF0ZShhcHBQbGF5YmFja1N0YXRlKVxuICAgIH1cbiAgfSwgW2FwcFBsYXliYWNrU3RhdGVdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcmVsb2FkID09PSAnYXV0bycgJiYgYWN0aXZlRGV2aWNlICYmIGNvbnRlbnRUeXBlICYmIGNvbnRlbnRJZCkge1xuICAgICAgbG9hZCgpXG4gICAgfVxuICAgIHJldHVybiAoKSA9PiBlbmRTZXNzaW9uKClcbiAgfSwgW2FjdGl2ZURldmljZSwgY29udGVudFR5cGUsIGNvbnRlbnRJZF0pXG4gIHVzZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgcHJlbG9hZERhdGEoXG4gICAgICAgIGNyZWF0ZUFwaShhcGlDb25maWcpLFxuICAgICAgICBwcmVsb2FkTGlzdCxcbiAgICAgICAge2lkOiBjb250ZW50SWQsIHR5cGU6IGNvbnRlbnRUeXBlfSxcbiAgICAgICAgcHJlbG9hZE1hcFxuICAgICAgKSxcbiAgICBbYXBpQ29uZmlnLCBjb250ZW50SWQsIGNvbnRlbnRUeXBlLCBwcmVsb2FkTGlzdF1cbiAgKVxuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHBsYXllclJlZiwgKCkgPT4gKHtcbiAgICBsb2FkLFxuICAgIGdldFZpZGVvOiAoKSA9PiB2aWRlb1JlZi5jdXJyZW50LFxuICB9KSlcbiAgdXNlRWZmZWN0KFxuICAgICgpID0+XG4gICAgICBsaW5rQWRTdGF0ZSh7XG4gICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICBwbHVnaW5zLFxuICAgICAgICBkaXNwYXRjaCxcbiAgICAgICAgLy8gVG8gYWxpZ24gd2l0aCBpT1MgJiBBbmRyb2lkLCBwbGF5IHRoZSB2aWRlbyBhZnRlciB0aGUgYWQgaXMgc2tpcHBlZCBldmVuIGlmIGl0cyBwYXVzZWQgb3JpZ2luYWxseS5cbiAgICAgICAgb25BZFNraXA6ICgpID0+IHNldFRhcmdldFBsYXliYWNrU3RhdGUoJ3BsYXlpbmcnKSxcbiAgICAgIH0pLFxuICAgIFtjb250ZW50VHlwZV1cbiAgKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzb3VyY2VUeXBlKSB7XG4gICAgICBzZXRTZXR0aW5nU3RhdGUoY3VycmVudCA9PiAoe1xuICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAuLi5jdXJyZW50LnZhbHVlcyxcbiAgICAgICAgICAnc291cmNlLXR5cGUnOiBzb3VyY2VUeXBlLFxuICAgICAgICB9LFxuICAgICAgICBwcmVmZXJyZWQ6IHtcbiAgICAgICAgICAuLi5jdXJyZW50LnByZWZlcnJlZCxcbiAgICAgICAgICAnc291cmNlLXR5cGUnOiBzb3VyY2VUeXBlLFxuICAgICAgICB9LFxuICAgICAgfSkpXG4gICAgfVxuICB9LCBbc291cmNlVHlwZV0pXG5cbiAgY29uc3Qgc291cmNlID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZ2V0U3RyZWFtSW5mbyhwbGF5YmFja0luZm8uc291cmNlcywge1xuICAgICAgICB0eXBlOiBzZXR0aW5nU3RhdGUucHJlZmVycmVkWydzb3VyY2UtdHlwZSddLFxuICAgICAgICBsaWNlbnNlVXJpOiBwbGF5YmFja0luZm8uZHJtUG9ydGFsVXJsLFxuICAgICAgICBsaWNlbnNlSGVhZGVyczogZ2V0RW50ZXJwcmlzZURybUhlYWRlcnMoe3Rva2VuOiBwbGF5YmFja0luZm8udG9rZW59KSxcbiAgICAgICAgdGh1bWJuYWlsRW5hYmxlZDogdGh1bWJuYWlsU2Vla2luZyxcbiAgICAgIH0pLFxuICAgIFtcbiAgICAgICFjb250ZW50RGF0YS53YWl0Q29udGVudEluZm8gJiYgcGxheWJhY2tJbmZvLFxuICAgICAgc2V0dGluZ1N0YXRlLnByZWZlcnJlZFsnc291cmNlLXR5cGUnXSxcbiAgICAgIHRodW1ibmFpbFNlZWtpbmcsXG4gICAgXVxuICApXG5cbiAgLy8gVE9ETzogZXh0cmFjdCA/IGNhc3QgdGhpbmdzXG4gIGNvbnN0IHthcHBJZH0gPSB1c2VDYXN0Q29udGV4dCgpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2V0dXAgPSBzZXR1cENhc3Qoe2FwcElkfSkudGhlbigoKSA9PlxuICAgICAgc3Vic2NyaWJlQ2FzdFN0YXRlKG5leHQgPT4ge1xuICAgICAgICBpZiAobmV4dCA9PT0gQ2FzdFN0YXRlLkNPTk5FQ1RFRCkge1xuICAgICAgICAgIHNldFBsYXliYWNrU3RhdGUoJ2Nhc3RpbmcnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZXh0ID09PSBDYXN0U3RhdGUuTk9fREVWSUNFU19BVkFJTEFCTEUgfHxcbiAgICAgICAgICBuZXh0ID09PSBDYXN0U3RhdGUuTk9UX0NPTk5FQ1RFRFxuICAgICAgICApIHtcbiAgICAgICAgICBzZXRQbGF5YmFja1N0YXRlKCdsb2FkaW5nJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gICAgcmV0dXJuICgpID0+IHNldHVwLnRoZW4ocmVtb3ZlTGlzdGVuZXIgPT4gcmVtb3ZlTGlzdGVuZXIoKSlcbiAgfSwgW2FwcElkXSlcbiAgY29uc3QgY2FzdENvbm5lY3RlZCA9IHBsYXliYWNrU3RhdGUgPT09ICdjYXN0aW5nJ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjYXN0Q29ubmVjdGVkICYmIGNvbnRlbnRJZCkge1xuICAgICAgbG9hZE1lZGlhKHtjb250ZW50SWQsIGNvbnRlbnRUeXBlLCBhcGlDb25maWd9KVxuICAgIH1cbiAgICAvLyBzaG91bGQga2VlcCBjb25uZWN0aW9uIGFmdGVyIHVubW91bnRcbiAgfSwgW2Nhc3RDb25uZWN0ZWQsIGNvbnRlbnRJZCwgY29udGVudFR5cGUsIGFwaUNvbmZpZ10pXG5cbiAgY29uc3Qgc2Vla2JhckhpZGUgPVxuICAgICFzZWVrQ29uZmlnIHx8XG4gICAgKGNvbnRlbnRUeXBlID09PSAnbGl2ZXMnICYmXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLW9wdGlvbmFsLWNoYWluaW5nXG4gICAgICAhKGNvbnRlbnREYXRhLnNlY3Rpb24/LmVuZCAtIGNvbnRlbnREYXRhLnNlY3Rpb24/LnN0YXJ0ID4gMCkpXG5cbiAgcmV0dXJuIHBsYXliYWNrU3RhdGUgPT09ICdjYXN0aW5nJyA/IChcbiAgICA8Q2FzdE92ZXJsYXkgLz5cbiAgKSA6IChcbiAgICA8UHJlbWl1bVBsYXllclxuICAgICAgc291cmNlPXtwbGF5YmFja1N0YXRlICE9PSAnZXJyb3InICYmIHNvdXJjZX1cbiAgICAgIGN1cnJlbnRUaW1lPXtwcmVmZXJBcHBUaW1lLmN1cnJlbnQgPyBjdXJyZW50VGltZSA6IGNvbnRlbnREYXRhLnN0YXJ0VGltZX1cbiAgICAgIGNvbnRyb2xzPXtcbiAgICAgICAgdWlTdGF0ZS5hY3RpdmVQYW5lbCA9PT0gJ2F1dG9wbGF5LW5leHQnXG4gICAgICAgICAgPyAndGl0bGUtb25seSdcbiAgICAgICAgICA6IHVpU3RhdGUuYWN0aXZlUGFuZWwgPT09ICdyZWNvbW1lbmRhdGlvbidcbiAgICAgICAgICA/ICduby1wYW5lbCdcbiAgICAgICAgICA6IGNvbnRyb2xzXG4gICAgICB9XG4gICAgICB0aXRsZT17Y29udGVudERhdGEudGl0bGV9XG4gICAgICBjaGFubmVsVGl0bGU9e2NvbnRlbnREYXRhLmNoYW5uZWxUaXRsZX1cbiAgICAgIHNlY3Rpb249e2NvbnRlbnREYXRhLnNlY3Rpb259XG4gICAgICBxdWFsaXR5PXt0YXJnZXRRdWFsaXR5fVxuICAgICAgc2V0dGluZ3M9e3NldHRpbmdTdGF0ZX1cbiAgICAgIHNlZWtiYXJIaWRlPXtzZWVrYmFySGlkZX1cbiAgICAgIGxvb3A9e2xvb3B9XG4gICAgICBwbHVnaW5zPXthbGxQbHVnaW5zfVxuICAgICAgdmlkZW9SZWY9e3ZpZGVvUmVmfVxuICAgICAgbWFya3M9e3VpU3RhdGUuc3RyZWFtRXZlbnRzPy5tYXAoZXZlbnQgPT4gZXZlbnQuc3RhcnQpfVxuICAgICAgb25FcnJvcj17b25FcnJvcn1cbiAgICAgIHNlbmRMb2c9eyhuYW1lLCBkYXRhKSA9PiBsb2dUYXJnZXQuY3VycmVudD8uZW1pdChuYW1lLCBkYXRhKX1cbiAgICAgIG9uUGxheWJhY2tTdGF0ZUNoYW5nZT17KGV2ZW50LCBzdGF0ZSkgPT4ge1xuICAgICAgICBzZXRQbGF5YmFja1N0YXRlKHN0YXRlKVxuICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICBsYXN0U2Vzc2lvbi5jdXJyZW50LmVuZD8uKClcbiAgICAgICAgICBsYXN0U2Vzc2lvbi5jdXJyZW50ID0ge31cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHN0YXRlID09PSAncGF1c2VkJyAmJiBwbGF5YmFja1N0YXRlICE9PSAnbG9hZGluZycpIHx8XG4gICAgICAgICAgZXZlbnQudHlwZSA9PT0gJ3NlZWtpbmcnXG4gICAgICAgICkge1xuICAgICAgICAgIGxhc3RTZXNzaW9uLmN1cnJlbnQudXBkYXRlTGFzdFBsYXllZD8uKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUgPT09ICdlbmRlZCcpIHtcbiAgICAgICAgICBkaXNwYXRjaCh1aUFjdGlvbnMucGxheWJhY2tFbmQoKSlcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIG9uQ2hhbmdlTmV4dD17Y29udGVudERhdGEubmV4dCAmJiAoKCkgPT4gb25DaGFuZ2U/Lihjb250ZW50RGF0YS5uZXh0KSl9XG4gICAgICBvbkNoYW5nZVByZXZpb3VzPXtcbiAgICAgICAgY29udGVudERhdGEucHJldmlvdXMgJiYgKCgpID0+IG9uQ2hhbmdlPy4oY29udGVudERhdGEucHJldmlvdXMpKVxuICAgICAgfVxuICAgICAgb25DaGFuZ2VTZXR0aW5ncz17KHtuYW1lLCB2YWx1ZX0pID0+IHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdzb3VyY2UtdHlwZScpIHtcbiAgICAgICAgICBzZXRTZXR0aW5nU3RhdGUoY3VycmVudCA9PiAoe1xuICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgIHByZWZlcnJlZDogeydzb3VyY2UtdHlwZSc6IHZhbHVlfSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgICBvblNvdXJjZVR5cGVDaGFuZ2VkPy4odmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICB1aUVsZW1lbnRzPXt7XG4gICAgICAgIC4uLnVpRWxlbWVudHMsXG4gICAgICAgIC4uLihjb250ZW50RGF0YT8uY2hhbm5lbEljb24gJiYge1xuICAgICAgICAgIGNoYW5uZWxJY29uOiAoXG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIGFsdD1cImNoYW5uZWwgaWNvblwiXG4gICAgICAgICAgICAgIGNzcz17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnMmVtJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyZW0nLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzAuMjVlbScsXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAnMC43NWVtJyxcbiAgICAgICAgICAgICAgICBvYmplY3RGaXQ6ICdjb3ZlcicsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHNyYz17Y29udGVudERhdGEuY2hhbm5lbEljb259XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4odWlTdGF0ZS5hZC50b3RhbCA+IDAgJiZcbiAgICAgICAgICBnZXRBZFVpKHVpU3RhdGUuYWQsIHBsdWdpbnMsIHZpZGVvUmVmLmN1cnJlbnQpKSxcbiAgICAgIH19XG4gICAgICBvdmVycmlkZVNldHRpbmdTZWN0aW9ucz17c2VjdGlvbnMgPT4ge1xuICAgICAgICAvLyBTcGVlZCBzZWN0aW9ucyB3aWxsIGJlIHByb3ZpZGVkIGZvciBWT0QgY29udGVudCBieSBkZWZhdWx0IGluIFByZW1pdW1QbGF5ZXIuIFdlIHdhbnQgdG8gaGlkZSBpdCBmb3Igc2VsZiBsaW5lYXIuXG4gICAgICAgIGlmIChjb250ZW50VHlwZSA9PT0gJ2xpdmVzJykge1xuICAgICAgICAgIHJldHVybiBzZWN0aW9ucy5maWx0ZXIocyA9PiBzLm5hbWUgIT09ICdzcGVlZCcpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zXG4gICAgICB9fVxuICAgICAgcGxheWJhY2tTdGF0ZT17dGFyZ2V0UGxheWJhY2tTdGF0ZX1cbiAgICAgIHsuLi5yZXN0fVxuICAgICAgc3R5bGU9e3JlY29tbWVuZGF0aW9uICYmIHsnLS1ib3R0b20tc3BhY2luZyc6ICc1cmVtJ319XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgICAge2Nhc3RCdXR0b24gPT09IGZhbHNlID8gKFxuICAgICAgICAnJ1xuICAgICAgKSA6IChcbiAgICAgICAgPEZ1bmN0aW9uQmFyRXh0ZW5zaW9uPlxuICAgICAgICAgIDxDYXN0QnV0dG9uIGNvbnRlbnRJZD17Y29udGVudElkfSBkYXRhPXt7Y29udGVudFR5cGUsIGFwaUNvbmZpZ319IC8+XG4gICAgICAgIDwvRnVuY3Rpb25CYXJFeHRlbnNpb24+XG4gICAgICApfVxuICAgICAgeyFsb29wICYmIGF1dG9wbGF5TmV4dCAmJiBjb250ZW50RGF0YS5uZXh0ICYmIChcbiAgICAgICAgPEF1dG9wbGF5UHJvbXB0XG4gICAgICAgICAgbmV4dD17Y29udGVudERhdGEubmV4dH1cbiAgICAgICAgICBjaGFwdGVycz17Y29udGVudERhdGEuY2hhcHRlcnN9XG4gICAgICAgICAgdmlkZW9SZWY9e3ZpZGVvUmVmfVxuICAgICAgICAgIHBsYXliYWNrU3RhdGU9e3BsYXliYWNrU3RhdGV9XG4gICAgICAgICAgZ2V0TWVkaWE9eygpID0+IGdldE1lZGlhVGltZSh2aWRlb1JlZi5jdXJyZW50LCBwbHVnaW5zKX1cbiAgICAgICAgICBvbkNoYW5nZU5leHQ9eygpID0+IG9uQ2hhbmdlPy4oY29udGVudERhdGEubmV4dCl9XG4gICAgICAgICAgb25PcGVuPXtzdGF0ZSA9PiBkaXNwYXRjaCh1aUFjdGlvbnMub2ZmZXJBdXRvcGxheShzdGF0ZSkpfVxuICAgICAgICAgIG9uRGlzbWlzcz17KCkgPT4gZGlzcGF0Y2godWlBY3Rpb25zLmRpc21pc3NBdXRvcGxheSgpKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7cmVjb21tZW5kYXRpb24gJiYgaXNEZXNrdG9wKCkgJiYgKFxuICAgICAgICA8UmVjb21tZW5kYXRpb25QYW5lbFxuICAgICAgICAgIHRpdGxlPXtyZWNvbW1lbmRhdGlvbi50aXRsZX1cbiAgICAgICAgICBvcGVuPXt1aVN0YXRlLmFjdGl2ZVBhbmVsID09PSAncmVjb21tZW5kYXRpb24nfVxuICAgICAgICAgIG9uVG9nZ2xlPXsoKSA9PiBkaXNwYXRjaCh1aUFjdGlvbnMudG9nZ2xlUmVjb21tZW5kYXRpb25QYW5lbCgpKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtyZWNvbW1lbmRhdGlvbi5jb250ZW50fVxuICAgICAgICA8L1JlY29tbWVuZGF0aW9uUGFuZWw+XG4gICAgICApfVxuICAgICAge2NvbnRlbnREYXRhLmVuZCAmJiA8TGl2ZUVuZCAvPn1cbiAgICAgIHsoY292ZXJJbWFnZURpc3BsYXkgPT09ICdhbHdheXMnIHx8XG4gICAgICAgIChwcmVsb2FkID09PSAnbm9uZScgJiZcbiAgICAgICAgICBjb3ZlckltYWdlVXJsICYmXG4gICAgICAgICAgc291cmNlLmxlbmd0aCA8PSAwICYmXG4gICAgICAgICAgcGxheWJhY2tTdGF0ZSAhPT0gJ2Vycm9yJykpICYmIDxDb3ZlckltYWdlIHNyYz17Y292ZXJJbWFnZVVybH0gLz59XG4gICAgPC9QcmVtaXVtUGxheWVyPlxuICApXG59XG5cblByZW1pdW1QbHVzUGxheWVyLnByb3BUeXBlcyA9IHtcbiAgY29udHJvbHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSksXG4gIHByZWxvYWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGN1cnJlbnRUaW1lOiBQcm9wVHlwZXMubnVtYmVyLFxuICBxdWFsaXR5OiBQcm9wVHlwZXMub2JqZWN0LFxuICBzb3VyY2VUeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBob3N0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhY2Nlc3NUb2tlbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGV2aWNlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhlYWRlcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHBhcmFtczogUHJvcFR5cGVzLm9iamVjdCxcbiAgY29udGVudFR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbnRlbnRJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgYXV0b3BsYXlOZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgbG9vcDogUHJvcFR5cGVzLmJvb2wsXG4gIHRodW1ibmFpbFNlZWtpbmc6IFByb3BUeXBlcy5ib29sLFxuICBwbHVnaW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIGNvdmVySW1hZ2VVcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvdmVySW1hZ2VEaXNwbGF5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWNvbW1lbmRhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgUHJvcFR5cGVzLm9iamVjdCxcbiAgICBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSksXG4gIF0pLFxuICB1aUVsZW1lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNvbnRyb2xCdXR0b25zOiB7XG4gICAgICBmb3J3YXJkQnV0dG9uOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgIHJld2luZEJ1dHRvbjogUHJvcFR5cGVzLm5vZGUsXG4gICAgfSxcbiAgfSksXG4gIHByZWxvYWRMaXN0OiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgY29udGVudFR5cGU6IFByb3BUeXBlcy5vbmVPZihbJ3ZpZGVvcycsICdsaXZlcyddKSxcbiAgICAgIGNvbnRlbnRJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KVxuICApLFxuICBwbGF5ZXJSZWY6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgb25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQXBpRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICBvblBsYXliYWNrU3RhdGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU291cmNlVHlwZUNoYW5nZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblBsYXliYWNrQXBpUmVzcG9uc2U6IFByb3BUeXBlcy5mdW5jLFxuICBzZW5kTG9nOiBQcm9wVHlwZXMuZnVuYyxcbiAgcGxheWJhY2tTdGF0ZTogUHJvcFR5cGVzLnN0cmluZyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJlbWl1bVBsdXNQbGF5ZXJcbiJdfQ== */",toString:_EMOTION_STRINGIFIED_CSS_ERROR__$1};({controls:PropTypes$1.oneOfType([PropTypes$1.object,PropTypes$1.bool]),preload:PropTypes$1.string,currentTime:PropTypes$1.number,quality:PropTypes$1.object,sourceType:PropTypes$1.string,host:PropTypes$1.string,accessToken:PropTypes$1.string,deviceId:PropTypes$1.string,headers:PropTypes$1.object,params:PropTypes$1.object,contentType:PropTypes$1.string,contentId:PropTypes$1.string,autoplayNext:PropTypes$1.bool,loop:PropTypes$1.bool,thumbnailSeeking:PropTypes$1.bool,plugins:PropTypes$1.array,coverImageUrl:PropTypes$1.string,coverImageDisplay:PropTypes$1.string,recommendation:PropTypes$1.oneOfType([PropTypes$1.object,PropTypes$1.oneOf([false])]),uiElements:PropTypes$1.shape({controlButtons:{forwardButton:PropTypes$1.node,rewindButton:PropTypes$1.node}}),preloadList:PropTypes$1.arrayOf(PropTypes$1.shape({contentType:PropTypes$1.oneOf(['videos','lives']),contentId:PropTypes$1.string})),playerRef:PropTypes$1.object,children:PropTypes$1.node,onError:PropTypes$1.func,onApiError:PropTypes$1.func,onPlaybackStateChange:PropTypes$1.func,onChange:PropTypes$1.func,onSourceTypeChanged:PropTypes$1.func,onPlaybackApiResponse:PropTypes$1.func,sendLog:PropTypes$1.func,playbackState:PropTypes$1.string});({style:PropTypes$1.object,fade:PropTypes$1.bool,children:PropTypes$1.node});({title:PropTypes$1.node,bottom:PropTypes$1.string,overflowOnly:PropTypes$1.bool,children:PropTypes$1.node,container:PropTypes$1.object});({time:PropTypes$1.number,showHour:PropTypes$1.bool,style:PropTypes$1.shape({part:PropTypes$1.object})});function _EMOTION_STRINGIFIED_CSS_ERROR__(){return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).";}process.env.NODE_ENV==="production"?{name:"125yws0",styles:"flex:100%;display:flex;align-items:center;margin-bottom:18px"}:{name:"8x1f7q-Seekbar",styles:"flex:100%;display:flex;align-items:center;margin-bottom:18px;label:Seekbar;",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNlZWtiYXIuanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVDTSIsImZpbGUiOiJTZWVrYmFyLmpzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmltcG9ydCBfZ2V0IGZyb20gJ2RsdidcblxuaW1wb3J0IEZvcm1hdHRlZFRpbWUgZnJvbSAnY29tcG9uZW50L0Zvcm1hdHRlZFRpbWUnXG5pbXBvcnQgU2ltcGxlU2xpZGVyIGZyb20gJ3BsYXllclVpL1NpbXBsZVNsaWRlcidcbmltcG9ydCB7dXNlQ2FzdENvbnRleHR9IGZyb20gJ2Nhc3QvY29udGV4dCdcbmltcG9ydCB7U2Vla09yaWdpbn0gZnJvbSAnRW51bSdcblxuY29uc3Qgc2xpZGVyU3R5bGUgPSB7XG4gIGZsZXg6IDEsXG4gIG1hcmdpbjogJzAgMC41cmVtJyxcbiAgaGVpZ2h0OiAnNHB4JyxcbiAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbn1cblxuY29uc3QgZ2V0TGl2ZXNJbmZvID0gKHtzdGFydFRpbWUsIGVuZFRpbWV9KSA9PiB7XG4gIGNvbnN0IGR1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICBjb25zdCBub3dTZWNvbmQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxuICBjb25zdCBjdXJyZW50VGltZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5vd1NlY29uZCAtIHN0YXJ0VGltZSwgZHVyYXRpb24pKVxuXG4gIHJldHVybiB7Y3VycmVudFRpbWUsIGR1cmF0aW9ufVxufVxuXG5jb25zdCBTZWVrYmFyID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgYWN0aW9uczoge3NlZWt9LFxuICAgIC4uLnN0YXRlXG4gIH0gPSB1c2VDYXN0Q29udGV4dCgpXG4gIGNvbnN0IHtcbiAgICBjdXJyZW50VGltZSxcbiAgICBwcm9ncmVzc1RpbWUgPSBjdXJyZW50VGltZSxcbiAgICBkdXJhdGlvbixcbiAgfSA9IHN0YXRlLnN0cmVhbVR5cGUgPT09ICdMSVZFJ1xuICAgID8gZ2V0TGl2ZXNJbmZvKF9nZXQoc3RhdGUsICdjdXN0b21EYXRhJykgfHwge30pXG4gICAgOiBzdGF0ZVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwia2tzLXBsYXllcl9fc2Vlay1iYXJcIlxuICAgICAgY3NzPXt7XG4gICAgICAgIGZsZXg6ICcxMDAlJyxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgbWFyZ2luQm90dG9tOiAnMThweCcsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxGb3JtYXR0ZWRUaW1lIHRpbWU9e3Byb2dyZXNzVGltZX0gLz5cbiAgICAgIHtzdGF0ZS5zdHJlYW1UeXBlID09PSAnTElWRScgPyAoXG4gICAgICAgIDxkaXYgY3NzPXtzbGlkZXJTdHlsZX0gLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTaW1wbGVTbGlkZXJcbiAgICAgICAgICBjc3M9e3ttYXJnaW46ICcwIDFyZW0nLCBmbGV4OiAxfX1cbiAgICAgICAgICB2YWx1ZT17cHJvZ3Jlc3NUaW1lfVxuICAgICAgICAgIG1heD17ZHVyYXRpb259XG4gICAgICAgICAgb25DaGFuZ2VDb21taXR0ZWQ9eyhfLCB7dmFsdWV9KSA9PlxuICAgICAgICAgICAgc2Vlayh7b3JpZ2luOiBTZWVrT3JpZ2luLlNUQVJULCBzZWNvbmRzOiB2YWx1ZX0pXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxGb3JtYXR0ZWRUaW1lIHRpbWU9e01hdGgubWF4KGR1cmF0aW9uLCBwcm9ncmVzc1RpbWUpfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlZWtiYXJcbiJdfQ== */",toString:_EMOTION_STRINGIFIED_CSS_ERROR__};process.env.NODE_ENV==="production"?{name:"tuqmq3",styles:"margin:0 1rem;flex:1"}:{name:"1ysiwxm-Seekbar",styles:"margin:0 1rem;flex:1;label:Seekbar;",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNlZWtiYXIuanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1EVSIsImZpbGUiOiJTZWVrYmFyLmpzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBqc3hJbXBvcnRTb3VyY2UgQGVtb3Rpb24vcmVhY3QgKi9cbmltcG9ydCBfZ2V0IGZyb20gJ2RsdidcblxuaW1wb3J0IEZvcm1hdHRlZFRpbWUgZnJvbSAnY29tcG9uZW50L0Zvcm1hdHRlZFRpbWUnXG5pbXBvcnQgU2ltcGxlU2xpZGVyIGZyb20gJ3BsYXllclVpL1NpbXBsZVNsaWRlcidcbmltcG9ydCB7dXNlQ2FzdENvbnRleHR9IGZyb20gJ2Nhc3QvY29udGV4dCdcbmltcG9ydCB7U2Vla09yaWdpbn0gZnJvbSAnRW51bSdcblxuY29uc3Qgc2xpZGVyU3R5bGUgPSB7XG4gIGZsZXg6IDEsXG4gIG1hcmdpbjogJzAgMC41cmVtJyxcbiAgaGVpZ2h0OiAnNHB4JyxcbiAgYmFja2dyb3VuZENvbG9yOiAncmVkJyxcbn1cblxuY29uc3QgZ2V0TGl2ZXNJbmZvID0gKHtzdGFydFRpbWUsIGVuZFRpbWV9KSA9PiB7XG4gIGNvbnN0IGR1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICBjb25zdCBub3dTZWNvbmQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxuICBjb25zdCBjdXJyZW50VGltZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5vd1NlY29uZCAtIHN0YXJ0VGltZSwgZHVyYXRpb24pKVxuXG4gIHJldHVybiB7Y3VycmVudFRpbWUsIGR1cmF0aW9ufVxufVxuXG5jb25zdCBTZWVrYmFyID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgYWN0aW9uczoge3NlZWt9LFxuICAgIC4uLnN0YXRlXG4gIH0gPSB1c2VDYXN0Q29udGV4dCgpXG4gIGNvbnN0IHtcbiAgICBjdXJyZW50VGltZSxcbiAgICBwcm9ncmVzc1RpbWUgPSBjdXJyZW50VGltZSxcbiAgICBkdXJhdGlvbixcbiAgfSA9IHN0YXRlLnN0cmVhbVR5cGUgPT09ICdMSVZFJ1xuICAgID8gZ2V0TGl2ZXNJbmZvKF9nZXQoc3RhdGUsICdjdXN0b21EYXRhJykgfHwge30pXG4gICAgOiBzdGF0ZVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwia2tzLXBsYXllcl9fc2Vlay1iYXJcIlxuICAgICAgY3NzPXt7XG4gICAgICAgIGZsZXg6ICcxMDAlJyxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgbWFyZ2luQm90dG9tOiAnMThweCcsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxGb3JtYXR0ZWRUaW1lIHRpbWU9e3Byb2dyZXNzVGltZX0gLz5cbiAgICAgIHtzdGF0ZS5zdHJlYW1UeXBlID09PSAnTElWRScgPyAoXG4gICAgICAgIDxkaXYgY3NzPXtzbGlkZXJTdHlsZX0gLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTaW1wbGVTbGlkZXJcbiAgICAgICAgICBjc3M9e3ttYXJnaW46ICcwIDFyZW0nLCBmbGV4OiAxfX1cbiAgICAgICAgICB2YWx1ZT17cHJvZ3Jlc3NUaW1lfVxuICAgICAgICAgIG1heD17ZHVyYXRpb259XG4gICAgICAgICAgb25DaGFuZ2VDb21taXR0ZWQ9eyhfLCB7dmFsdWV9KSA9PlxuICAgICAgICAgICAgc2Vlayh7b3JpZ2luOiBTZWVrT3JpZ2luLlNUQVJULCBzZWNvbmRzOiB2YWx1ZX0pXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxGb3JtYXR0ZWRUaW1lIHRpbWU9e01hdGgubWF4KGR1cmF0aW9uLCBwcm9ncmVzc1RpbWUpfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlZWtiYXJcbiJdfQ== */",toString:_EMOTION_STRINGIFIED_CSS_ERROR__};({name:PropTypes$1.string,startIcon:PropTypes$1.string,tooltip:PropTypes$1.string,onClick:PropTypes$1.func});({appId:PropTypes$1.string,host:PropTypes$1.string,accessToken:PropTypes$1.string,deviceId:PropTypes$1.string,lang:Types.LanguageCode,langCustomCode:PropTypes$1.object,customHeaders:PropTypes$1.object,onConnected:PropTypes$1.func,onCasting:PropTypes$1.func,onError:PropTypes$1.func,children:PropTypes$1.node});({style:PropTypes$1.object,plugins:PropTypes$1.array,autohide:PropTypes$1.bool,seekbar:PropTypes$1.object,children:PropTypes$1.node,getLayoutProps:PropTypes$1.func,autoplay:PropTypes$1.bool});
|
|
698
|
+
|
|
699
|
+
var propTypes = {exports: {}};
|
|
700
|
+
|
|
701
|
+
/*
|
|
702
|
+
object-assign
|
|
703
|
+
(c) Sindre Sorhus
|
|
704
|
+
@license MIT
|
|
705
|
+
*/
|
|
706
|
+
/* eslint-disable no-unused-vars */
|
|
707
|
+
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
|
|
708
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
709
|
+
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
|
|
710
|
+
|
|
711
|
+
function toObject(val) {
|
|
712
|
+
if (val === null || val === undefined) {
|
|
713
|
+
throw new TypeError('Object.assign cannot be called with null or undefined');
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
return Object(val);
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
function shouldUseNative() {
|
|
720
|
+
try {
|
|
721
|
+
if (!Object.assign) {
|
|
722
|
+
return false;
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
// Detect buggy property enumeration order in older V8 versions.
|
|
726
|
+
|
|
727
|
+
// https://bugs.chromium.org/p/v8/issues/detail?id=4118
|
|
728
|
+
var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
|
|
729
|
+
test1[5] = 'de';
|
|
730
|
+
if (Object.getOwnPropertyNames(test1)[0] === '5') {
|
|
731
|
+
return false;
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
|
|
735
|
+
var test2 = {};
|
|
736
|
+
for (var i = 0; i < 10; i++) {
|
|
737
|
+
test2['_' + String.fromCharCode(i)] = i;
|
|
738
|
+
}
|
|
739
|
+
var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
|
|
740
|
+
return test2[n];
|
|
741
|
+
});
|
|
742
|
+
if (order2.join('') !== '0123456789') {
|
|
743
|
+
return false;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
|
|
747
|
+
var test3 = {};
|
|
748
|
+
'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
|
|
749
|
+
test3[letter] = letter;
|
|
750
|
+
});
|
|
751
|
+
if (Object.keys(Object.assign({}, test3)).join('') !==
|
|
752
|
+
'abcdefghijklmnopqrst') {
|
|
753
|
+
return false;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
return true;
|
|
757
|
+
} catch (err) {
|
|
758
|
+
// We don't expect any of the above to throw, but better to be safe.
|
|
759
|
+
return false;
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {
|
|
764
|
+
var from;
|
|
765
|
+
var to = toObject(target);
|
|
766
|
+
var symbols;
|
|
767
|
+
|
|
768
|
+
for (var s = 1; s < arguments.length; s++) {
|
|
769
|
+
from = Object(arguments[s]);
|
|
770
|
+
|
|
771
|
+
for (var key in from) {
|
|
772
|
+
if (hasOwnProperty.call(from, key)) {
|
|
773
|
+
to[key] = from[key];
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
if (getOwnPropertySymbols) {
|
|
778
|
+
symbols = getOwnPropertySymbols(from);
|
|
779
|
+
for (var i = 0; i < symbols.length; i++) {
|
|
780
|
+
if (propIsEnumerable.call(from, symbols[i])) {
|
|
781
|
+
to[symbols[i]] = from[symbols[i]];
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
return to;
|
|
788
|
+
};
|
|
789
|
+
|
|
790
|
+
/**
|
|
791
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
792
|
+
*
|
|
793
|
+
* This source code is licensed under the MIT license found in the
|
|
794
|
+
* LICENSE file in the root directory of this source tree.
|
|
795
|
+
*/
|
|
796
|
+
|
|
797
|
+
var ReactPropTypesSecret$3 = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
|
|
798
|
+
|
|
799
|
+
var ReactPropTypesSecret_1 = ReactPropTypesSecret$3;
|
|
800
|
+
|
|
801
|
+
/**
|
|
802
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
803
|
+
*
|
|
804
|
+
* This source code is licensed under the MIT license found in the
|
|
805
|
+
* LICENSE file in the root directory of this source tree.
|
|
806
|
+
*/
|
|
807
|
+
|
|
808
|
+
var printWarning$1 = function() {};
|
|
809
|
+
|
|
810
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
811
|
+
var ReactPropTypesSecret$2 = ReactPropTypesSecret_1;
|
|
812
|
+
var loggedTypeFailures = {};
|
|
813
|
+
var has$1 = Function.call.bind(Object.prototype.hasOwnProperty);
|
|
814
|
+
|
|
815
|
+
printWarning$1 = function(text) {
|
|
816
|
+
var message = 'Warning: ' + text;
|
|
817
|
+
if (typeof console !== 'undefined') {
|
|
818
|
+
console.error(message);
|
|
819
|
+
}
|
|
820
|
+
try {
|
|
821
|
+
// --- Welcome to debugging React ---
|
|
822
|
+
// This error was thrown as a convenience so that you can use this stack
|
|
823
|
+
// to find the callsite that caused this warning to fire.
|
|
824
|
+
throw new Error(message);
|
|
825
|
+
} catch (x) {}
|
|
826
|
+
};
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* Assert that the values match with the type specs.
|
|
831
|
+
* Error messages are memorized and will only be shown once.
|
|
832
|
+
*
|
|
833
|
+
* @param {object} typeSpecs Map of name to a ReactPropType
|
|
834
|
+
* @param {object} values Runtime values that need to be type-checked
|
|
835
|
+
* @param {string} location e.g. "prop", "context", "child context"
|
|
836
|
+
* @param {string} componentName Name of the component for error messages.
|
|
837
|
+
* @param {?Function} getStack Returns the component stack.
|
|
838
|
+
* @private
|
|
839
|
+
*/
|
|
840
|
+
function checkPropTypes$1(typeSpecs, values, location, componentName, getStack) {
|
|
841
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
842
|
+
for (var typeSpecName in typeSpecs) {
|
|
843
|
+
if (has$1(typeSpecs, typeSpecName)) {
|
|
844
|
+
var error;
|
|
845
|
+
// Prop type validation may throw. In case they do, we don't want to
|
|
846
|
+
// fail the render phase where it didn't fail before. So we log it.
|
|
847
|
+
// After these have been cleaned up, we'll let them throw.
|
|
848
|
+
try {
|
|
849
|
+
// This is intentionally an invariant that gets caught. It's the same
|
|
850
|
+
// behavior as without this statement except with a better message.
|
|
851
|
+
if (typeof typeSpecs[typeSpecName] !== 'function') {
|
|
852
|
+
var err = Error(
|
|
853
|
+
(componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
|
|
854
|
+
'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'
|
|
855
|
+
);
|
|
856
|
+
err.name = 'Invariant Violation';
|
|
857
|
+
throw err;
|
|
858
|
+
}
|
|
859
|
+
error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$2);
|
|
860
|
+
} catch (ex) {
|
|
861
|
+
error = ex;
|
|
862
|
+
}
|
|
863
|
+
if (error && !(error instanceof Error)) {
|
|
864
|
+
printWarning$1(
|
|
865
|
+
(componentName || 'React class') + ': type specification of ' +
|
|
866
|
+
location + ' `' + typeSpecName + '` is invalid; the type checker ' +
|
|
867
|
+
'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
|
|
868
|
+
'You may have forgotten to pass an argument to the type checker ' +
|
|
869
|
+
'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
|
|
870
|
+
'shape all require an argument).'
|
|
871
|
+
);
|
|
872
|
+
}
|
|
873
|
+
if (error instanceof Error && !(error.message in loggedTypeFailures)) {
|
|
874
|
+
// Only monitor this failure once because there tends to be a lot of the
|
|
875
|
+
// same error.
|
|
876
|
+
loggedTypeFailures[error.message] = true;
|
|
877
|
+
|
|
878
|
+
var stack = getStack ? getStack() : '';
|
|
879
|
+
|
|
880
|
+
printWarning$1(
|
|
881
|
+
'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
|
|
882
|
+
);
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
/**
|
|
890
|
+
* Resets warning cache when testing.
|
|
891
|
+
*
|
|
892
|
+
* @private
|
|
893
|
+
*/
|
|
894
|
+
checkPropTypes$1.resetWarningCache = function() {
|
|
895
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
896
|
+
loggedTypeFailures = {};
|
|
897
|
+
}
|
|
898
|
+
};
|
|
899
|
+
|
|
900
|
+
var checkPropTypes_1 = checkPropTypes$1;
|
|
901
|
+
|
|
902
|
+
/**
|
|
903
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
904
|
+
*
|
|
905
|
+
* This source code is licensed under the MIT license found in the
|
|
906
|
+
* LICENSE file in the root directory of this source tree.
|
|
907
|
+
*/
|
|
908
|
+
|
|
909
|
+
var ReactIs$1 = require$$0;
|
|
910
|
+
var assign = objectAssign;
|
|
911
|
+
|
|
912
|
+
var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;
|
|
913
|
+
var checkPropTypes = checkPropTypes_1;
|
|
914
|
+
|
|
915
|
+
var has = Function.call.bind(Object.prototype.hasOwnProperty);
|
|
916
|
+
var printWarning = function() {};
|
|
917
|
+
|
|
918
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
919
|
+
printWarning = function(text) {
|
|
920
|
+
var message = 'Warning: ' + text;
|
|
921
|
+
if (typeof console !== 'undefined') {
|
|
922
|
+
console.error(message);
|
|
923
|
+
}
|
|
924
|
+
try {
|
|
925
|
+
// --- Welcome to debugging React ---
|
|
926
|
+
// This error was thrown as a convenience so that you can use this stack
|
|
927
|
+
// to find the callsite that caused this warning to fire.
|
|
928
|
+
throw new Error(message);
|
|
929
|
+
} catch (x) {}
|
|
930
|
+
};
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
function emptyFunctionThatReturnsNull() {
|
|
934
|
+
return null;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
var factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) {
|
|
938
|
+
/* global Symbol */
|
|
939
|
+
var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
|
|
940
|
+
var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
|
|
941
|
+
|
|
942
|
+
/**
|
|
943
|
+
* Returns the iterator method function contained on the iterable object.
|
|
944
|
+
*
|
|
945
|
+
* Be sure to invoke the function with the iterable as context:
|
|
946
|
+
*
|
|
947
|
+
* var iteratorFn = getIteratorFn(myIterable);
|
|
948
|
+
* if (iteratorFn) {
|
|
949
|
+
* var iterator = iteratorFn.call(myIterable);
|
|
950
|
+
* ...
|
|
951
|
+
* }
|
|
952
|
+
*
|
|
953
|
+
* @param {?object} maybeIterable
|
|
954
|
+
* @return {?function}
|
|
955
|
+
*/
|
|
956
|
+
function getIteratorFn(maybeIterable) {
|
|
957
|
+
var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
|
|
958
|
+
if (typeof iteratorFn === 'function') {
|
|
959
|
+
return iteratorFn;
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
/**
|
|
964
|
+
* Collection of methods that allow declaration and validation of props that are
|
|
965
|
+
* supplied to React components. Example usage:
|
|
966
|
+
*
|
|
967
|
+
* var Props = require('ReactPropTypes');
|
|
968
|
+
* var MyArticle = React.createClass({
|
|
969
|
+
* propTypes: {
|
|
970
|
+
* // An optional string prop named "description".
|
|
971
|
+
* description: Props.string,
|
|
972
|
+
*
|
|
973
|
+
* // A required enum prop named "category".
|
|
974
|
+
* category: Props.oneOf(['News','Photos']).isRequired,
|
|
975
|
+
*
|
|
976
|
+
* // A prop named "dialog" that requires an instance of Dialog.
|
|
977
|
+
* dialog: Props.instanceOf(Dialog).isRequired
|
|
978
|
+
* },
|
|
979
|
+
* render: function() { ... }
|
|
980
|
+
* });
|
|
981
|
+
*
|
|
982
|
+
* A more formal specification of how these methods are used:
|
|
983
|
+
*
|
|
984
|
+
* type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
|
|
985
|
+
* decl := ReactPropTypes.{type}(.isRequired)?
|
|
986
|
+
*
|
|
987
|
+
* Each and every declaration produces a function with the same signature. This
|
|
988
|
+
* allows the creation of custom validation functions. For example:
|
|
989
|
+
*
|
|
990
|
+
* var MyLink = React.createClass({
|
|
991
|
+
* propTypes: {
|
|
992
|
+
* // An optional string or URI prop named "href".
|
|
993
|
+
* href: function(props, propName, componentName) {
|
|
994
|
+
* var propValue = props[propName];
|
|
995
|
+
* if (propValue != null && typeof propValue !== 'string' &&
|
|
996
|
+
* !(propValue instanceof URI)) {
|
|
997
|
+
* return new Error(
|
|
998
|
+
* 'Expected a string or an URI for ' + propName + ' in ' +
|
|
999
|
+
* componentName
|
|
1000
|
+
* );
|
|
1001
|
+
* }
|
|
1002
|
+
* }
|
|
1003
|
+
* },
|
|
1004
|
+
* render: function() {...}
|
|
1005
|
+
* });
|
|
1006
|
+
*
|
|
1007
|
+
* @internal
|
|
1008
|
+
*/
|
|
1009
|
+
|
|
1010
|
+
var ANONYMOUS = '<<anonymous>>';
|
|
1011
|
+
|
|
1012
|
+
// Important!
|
|
1013
|
+
// Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
|
|
1014
|
+
var ReactPropTypes = {
|
|
1015
|
+
array: createPrimitiveTypeChecker('array'),
|
|
1016
|
+
bool: createPrimitiveTypeChecker('boolean'),
|
|
1017
|
+
func: createPrimitiveTypeChecker('function'),
|
|
1018
|
+
number: createPrimitiveTypeChecker('number'),
|
|
1019
|
+
object: createPrimitiveTypeChecker('object'),
|
|
1020
|
+
string: createPrimitiveTypeChecker('string'),
|
|
1021
|
+
symbol: createPrimitiveTypeChecker('symbol'),
|
|
1022
|
+
|
|
1023
|
+
any: createAnyTypeChecker(),
|
|
1024
|
+
arrayOf: createArrayOfTypeChecker,
|
|
1025
|
+
element: createElementTypeChecker(),
|
|
1026
|
+
elementType: createElementTypeTypeChecker(),
|
|
1027
|
+
instanceOf: createInstanceTypeChecker,
|
|
1028
|
+
node: createNodeChecker(),
|
|
1029
|
+
objectOf: createObjectOfTypeChecker,
|
|
1030
|
+
oneOf: createEnumTypeChecker,
|
|
1031
|
+
oneOfType: createUnionTypeChecker,
|
|
1032
|
+
shape: createShapeTypeChecker,
|
|
1033
|
+
exact: createStrictShapeTypeChecker,
|
|
1034
|
+
};
|
|
1035
|
+
|
|
1036
|
+
/**
|
|
1037
|
+
* inlined Object.is polyfill to avoid requiring consumers ship their own
|
|
1038
|
+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
|
|
1039
|
+
*/
|
|
1040
|
+
/*eslint-disable no-self-compare*/
|
|
1041
|
+
function is(x, y) {
|
|
1042
|
+
// SameValue algorithm
|
|
1043
|
+
if (x === y) {
|
|
1044
|
+
// Steps 1-5, 7-10
|
|
1045
|
+
// Steps 6.b-6.e: +0 != -0
|
|
1046
|
+
return x !== 0 || 1 / x === 1 / y;
|
|
1047
|
+
} else {
|
|
1048
|
+
// Step 6.a: NaN == NaN
|
|
1049
|
+
return x !== x && y !== y;
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
/*eslint-enable no-self-compare*/
|
|
1053
|
+
|
|
1054
|
+
/**
|
|
1055
|
+
* We use an Error-like object for backward compatibility as people may call
|
|
1056
|
+
* PropTypes directly and inspect their output. However, we don't use real
|
|
1057
|
+
* Errors anymore. We don't inspect their stack anyway, and creating them
|
|
1058
|
+
* is prohibitively expensive if they are created too often, such as what
|
|
1059
|
+
* happens in oneOfType() for any type before the one that matched.
|
|
1060
|
+
*/
|
|
1061
|
+
function PropTypeError(message) {
|
|
1062
|
+
this.message = message;
|
|
1063
|
+
this.stack = '';
|
|
1064
|
+
}
|
|
1065
|
+
// Make `instanceof Error` still work for returned errors.
|
|
1066
|
+
PropTypeError.prototype = Error.prototype;
|
|
1067
|
+
|
|
1068
|
+
function createChainableTypeChecker(validate) {
|
|
1069
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
1070
|
+
var manualPropTypeCallCache = {};
|
|
1071
|
+
var manualPropTypeWarningCount = 0;
|
|
1072
|
+
}
|
|
1073
|
+
function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
|
|
1074
|
+
componentName = componentName || ANONYMOUS;
|
|
1075
|
+
propFullName = propFullName || propName;
|
|
1076
|
+
|
|
1077
|
+
if (secret !== ReactPropTypesSecret$1) {
|
|
1078
|
+
if (throwOnDirectAccess) {
|
|
1079
|
+
// New behavior only for users of `prop-types` package
|
|
1080
|
+
var err = new Error(
|
|
1081
|
+
'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
|
|
1082
|
+
'Use `PropTypes.checkPropTypes()` to call them. ' +
|
|
1083
|
+
'Read more at http://fb.me/use-check-prop-types'
|
|
1084
|
+
);
|
|
1085
|
+
err.name = 'Invariant Violation';
|
|
1086
|
+
throw err;
|
|
1087
|
+
} else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {
|
|
1088
|
+
// Old behavior for people using React.PropTypes
|
|
1089
|
+
var cacheKey = componentName + ':' + propName;
|
|
1090
|
+
if (
|
|
1091
|
+
!manualPropTypeCallCache[cacheKey] &&
|
|
1092
|
+
// Avoid spamming the console because they are often not actionable except for lib authors
|
|
1093
|
+
manualPropTypeWarningCount < 3
|
|
1094
|
+
) {
|
|
1095
|
+
printWarning(
|
|
1096
|
+
'You are manually calling a React.PropTypes validation ' +
|
|
1097
|
+
'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
|
|
1098
|
+
'and will throw in the standalone `prop-types` package. ' +
|
|
1099
|
+
'You may be seeing this warning due to a third-party PropTypes ' +
|
|
1100
|
+
'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
|
|
1101
|
+
);
|
|
1102
|
+
manualPropTypeCallCache[cacheKey] = true;
|
|
1103
|
+
manualPropTypeWarningCount++;
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
if (props[propName] == null) {
|
|
1108
|
+
if (isRequired) {
|
|
1109
|
+
if (props[propName] === null) {
|
|
1110
|
+
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
|
|
1111
|
+
}
|
|
1112
|
+
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
|
|
1113
|
+
}
|
|
1114
|
+
return null;
|
|
1115
|
+
} else {
|
|
1116
|
+
return validate(props, propName, componentName, location, propFullName);
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
var chainedCheckType = checkType.bind(null, false);
|
|
1121
|
+
chainedCheckType.isRequired = checkType.bind(null, true);
|
|
1122
|
+
|
|
1123
|
+
return chainedCheckType;
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
function createPrimitiveTypeChecker(expectedType) {
|
|
1127
|
+
function validate(props, propName, componentName, location, propFullName, secret) {
|
|
1128
|
+
var propValue = props[propName];
|
|
1129
|
+
var propType = getPropType(propValue);
|
|
1130
|
+
if (propType !== expectedType) {
|
|
1131
|
+
// `propValue` being instance of, say, date/regexp, pass the 'object'
|
|
1132
|
+
// check, but we can offer a more precise error message here rather than
|
|
1133
|
+
// 'of type `object`'.
|
|
1134
|
+
var preciseType = getPreciseType(propValue);
|
|
1135
|
+
|
|
1136
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
|
|
1137
|
+
}
|
|
1138
|
+
return null;
|
|
1139
|
+
}
|
|
1140
|
+
return createChainableTypeChecker(validate);
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
function createAnyTypeChecker() {
|
|
1144
|
+
return createChainableTypeChecker(emptyFunctionThatReturnsNull);
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
function createArrayOfTypeChecker(typeChecker) {
|
|
1148
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1149
|
+
if (typeof typeChecker !== 'function') {
|
|
1150
|
+
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
|
|
1151
|
+
}
|
|
1152
|
+
var propValue = props[propName];
|
|
1153
|
+
if (!Array.isArray(propValue)) {
|
|
1154
|
+
var propType = getPropType(propValue);
|
|
1155
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
|
|
1156
|
+
}
|
|
1157
|
+
for (var i = 0; i < propValue.length; i++) {
|
|
1158
|
+
var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret$1);
|
|
1159
|
+
if (error instanceof Error) {
|
|
1160
|
+
return error;
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
return null;
|
|
1164
|
+
}
|
|
1165
|
+
return createChainableTypeChecker(validate);
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
function createElementTypeChecker() {
|
|
1169
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1170
|
+
var propValue = props[propName];
|
|
1171
|
+
if (!isValidElement(propValue)) {
|
|
1172
|
+
var propType = getPropType(propValue);
|
|
1173
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
|
|
1174
|
+
}
|
|
1175
|
+
return null;
|
|
1176
|
+
}
|
|
1177
|
+
return createChainableTypeChecker(validate);
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
function createElementTypeTypeChecker() {
|
|
1181
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1182
|
+
var propValue = props[propName];
|
|
1183
|
+
if (!ReactIs$1.isValidElementType(propValue)) {
|
|
1184
|
+
var propType = getPropType(propValue);
|
|
1185
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
|
|
1186
|
+
}
|
|
1187
|
+
return null;
|
|
1188
|
+
}
|
|
1189
|
+
return createChainableTypeChecker(validate);
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
function createInstanceTypeChecker(expectedClass) {
|
|
1193
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1194
|
+
if (!(props[propName] instanceof expectedClass)) {
|
|
1195
|
+
var expectedClassName = expectedClass.name || ANONYMOUS;
|
|
1196
|
+
var actualClassName = getClassName(props[propName]);
|
|
1197
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
|
|
1198
|
+
}
|
|
1199
|
+
return null;
|
|
1200
|
+
}
|
|
1201
|
+
return createChainableTypeChecker(validate);
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
function createEnumTypeChecker(expectedValues) {
|
|
1205
|
+
if (!Array.isArray(expectedValues)) {
|
|
1206
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
1207
|
+
if (arguments.length > 1) {
|
|
1208
|
+
printWarning(
|
|
1209
|
+
'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
|
|
1210
|
+
'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
|
|
1211
|
+
);
|
|
1212
|
+
} else {
|
|
1213
|
+
printWarning('Invalid argument supplied to oneOf, expected an array.');
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
return emptyFunctionThatReturnsNull;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1220
|
+
var propValue = props[propName];
|
|
1221
|
+
for (var i = 0; i < expectedValues.length; i++) {
|
|
1222
|
+
if (is(propValue, expectedValues[i])) {
|
|
1223
|
+
return null;
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
|
|
1228
|
+
var type = getPreciseType(value);
|
|
1229
|
+
if (type === 'symbol') {
|
|
1230
|
+
return String(value);
|
|
1231
|
+
}
|
|
1232
|
+
return value;
|
|
1233
|
+
});
|
|
1234
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
|
|
1235
|
+
}
|
|
1236
|
+
return createChainableTypeChecker(validate);
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
function createObjectOfTypeChecker(typeChecker) {
|
|
1240
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1241
|
+
if (typeof typeChecker !== 'function') {
|
|
1242
|
+
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
|
|
1243
|
+
}
|
|
1244
|
+
var propValue = props[propName];
|
|
1245
|
+
var propType = getPropType(propValue);
|
|
1246
|
+
if (propType !== 'object') {
|
|
1247
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
|
|
1248
|
+
}
|
|
1249
|
+
for (var key in propValue) {
|
|
1250
|
+
if (has(propValue, key)) {
|
|
1251
|
+
var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret$1);
|
|
1252
|
+
if (error instanceof Error) {
|
|
1253
|
+
return error;
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
return null;
|
|
1258
|
+
}
|
|
1259
|
+
return createChainableTypeChecker(validate);
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
function createUnionTypeChecker(arrayOfTypeCheckers) {
|
|
1263
|
+
if (!Array.isArray(arrayOfTypeCheckers)) {
|
|
1264
|
+
process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;
|
|
1265
|
+
return emptyFunctionThatReturnsNull;
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
|
|
1269
|
+
var checker = arrayOfTypeCheckers[i];
|
|
1270
|
+
if (typeof checker !== 'function') {
|
|
1271
|
+
printWarning(
|
|
1272
|
+
'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
|
|
1273
|
+
'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
|
|
1274
|
+
);
|
|
1275
|
+
return emptyFunctionThatReturnsNull;
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1280
|
+
for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
|
|
1281
|
+
var checker = arrayOfTypeCheckers[i];
|
|
1282
|
+
if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret$1) == null) {
|
|
1283
|
+
return null;
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
|
|
1288
|
+
}
|
|
1289
|
+
return createChainableTypeChecker(validate);
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
function createNodeChecker() {
|
|
1293
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1294
|
+
if (!isNode(props[propName])) {
|
|
1295
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
|
|
1296
|
+
}
|
|
1297
|
+
return null;
|
|
1298
|
+
}
|
|
1299
|
+
return createChainableTypeChecker(validate);
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
function createShapeTypeChecker(shapeTypes) {
|
|
1303
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1304
|
+
var propValue = props[propName];
|
|
1305
|
+
var propType = getPropType(propValue);
|
|
1306
|
+
if (propType !== 'object') {
|
|
1307
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
|
|
1308
|
+
}
|
|
1309
|
+
for (var key in shapeTypes) {
|
|
1310
|
+
var checker = shapeTypes[key];
|
|
1311
|
+
if (!checker) {
|
|
1312
|
+
continue;
|
|
1313
|
+
}
|
|
1314
|
+
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret$1);
|
|
1315
|
+
if (error) {
|
|
1316
|
+
return error;
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
return null;
|
|
1320
|
+
}
|
|
1321
|
+
return createChainableTypeChecker(validate);
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
function createStrictShapeTypeChecker(shapeTypes) {
|
|
1325
|
+
function validate(props, propName, componentName, location, propFullName) {
|
|
1326
|
+
var propValue = props[propName];
|
|
1327
|
+
var propType = getPropType(propValue);
|
|
1328
|
+
if (propType !== 'object') {
|
|
1329
|
+
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
|
|
1330
|
+
}
|
|
1331
|
+
// We need to check all keys in case some are required but missing from
|
|
1332
|
+
// props.
|
|
1333
|
+
var allKeys = assign({}, props[propName], shapeTypes);
|
|
1334
|
+
for (var key in allKeys) {
|
|
1335
|
+
var checker = shapeTypes[key];
|
|
1336
|
+
if (!checker) {
|
|
1337
|
+
return new PropTypeError(
|
|
1338
|
+
'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
|
|
1339
|
+
'\nBad object: ' + JSON.stringify(props[propName], null, ' ') +
|
|
1340
|
+
'\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')
|
|
1341
|
+
);
|
|
1342
|
+
}
|
|
1343
|
+
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret$1);
|
|
1344
|
+
if (error) {
|
|
1345
|
+
return error;
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
return null;
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
return createChainableTypeChecker(validate);
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1354
|
+
function isNode(propValue) {
|
|
1355
|
+
switch (typeof propValue) {
|
|
1356
|
+
case 'number':
|
|
1357
|
+
case 'string':
|
|
1358
|
+
case 'undefined':
|
|
1359
|
+
return true;
|
|
1360
|
+
case 'boolean':
|
|
1361
|
+
return !propValue;
|
|
1362
|
+
case 'object':
|
|
1363
|
+
if (Array.isArray(propValue)) {
|
|
1364
|
+
return propValue.every(isNode);
|
|
1365
|
+
}
|
|
1366
|
+
if (propValue === null || isValidElement(propValue)) {
|
|
1367
|
+
return true;
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
var iteratorFn = getIteratorFn(propValue);
|
|
1371
|
+
if (iteratorFn) {
|
|
1372
|
+
var iterator = iteratorFn.call(propValue);
|
|
1373
|
+
var step;
|
|
1374
|
+
if (iteratorFn !== propValue.entries) {
|
|
1375
|
+
while (!(step = iterator.next()).done) {
|
|
1376
|
+
if (!isNode(step.value)) {
|
|
1377
|
+
return false;
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
} else {
|
|
1381
|
+
// Iterator will provide entry [k,v] tuples rather than values.
|
|
1382
|
+
while (!(step = iterator.next()).done) {
|
|
1383
|
+
var entry = step.value;
|
|
1384
|
+
if (entry) {
|
|
1385
|
+
if (!isNode(entry[1])) {
|
|
1386
|
+
return false;
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
} else {
|
|
1392
|
+
return false;
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
return true;
|
|
1396
|
+
default:
|
|
1397
|
+
return false;
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
function isSymbol(propType, propValue) {
|
|
1402
|
+
// Native Symbol.
|
|
1403
|
+
if (propType === 'symbol') {
|
|
1404
|
+
return true;
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
// falsy value can't be a Symbol
|
|
1408
|
+
if (!propValue) {
|
|
1409
|
+
return false;
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
// 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
|
|
1413
|
+
if (propValue['@@toStringTag'] === 'Symbol') {
|
|
1414
|
+
return true;
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1417
|
+
// Fallback for non-spec compliant Symbols which are polyfilled.
|
|
1418
|
+
if (typeof Symbol === 'function' && propValue instanceof Symbol) {
|
|
1419
|
+
return true;
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
return false;
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
// Equivalent of `typeof` but with special handling for array and regexp.
|
|
1426
|
+
function getPropType(propValue) {
|
|
1427
|
+
var propType = typeof propValue;
|
|
1428
|
+
if (Array.isArray(propValue)) {
|
|
1429
|
+
return 'array';
|
|
1430
|
+
}
|
|
1431
|
+
if (propValue instanceof RegExp) {
|
|
1432
|
+
// Old webkits (at least until Android 4.0) return 'function' rather than
|
|
1433
|
+
// 'object' for typeof a RegExp. We'll normalize this here so that /bla/
|
|
1434
|
+
// passes PropTypes.object.
|
|
1435
|
+
return 'object';
|
|
1436
|
+
}
|
|
1437
|
+
if (isSymbol(propType, propValue)) {
|
|
1438
|
+
return 'symbol';
|
|
1439
|
+
}
|
|
1440
|
+
return propType;
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
// This handles more types than `getPropType`. Only used for error messages.
|
|
1444
|
+
// See `createPrimitiveTypeChecker`.
|
|
1445
|
+
function getPreciseType(propValue) {
|
|
1446
|
+
if (typeof propValue === 'undefined' || propValue === null) {
|
|
1447
|
+
return '' + propValue;
|
|
1448
|
+
}
|
|
1449
|
+
var propType = getPropType(propValue);
|
|
1450
|
+
if (propType === 'object') {
|
|
1451
|
+
if (propValue instanceof Date) {
|
|
1452
|
+
return 'date';
|
|
1453
|
+
} else if (propValue instanceof RegExp) {
|
|
1454
|
+
return 'regexp';
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
return propType;
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1460
|
+
// Returns a string that is postfixed to a warning about an invalid type.
|
|
1461
|
+
// For example, "undefined" or "of type array"
|
|
1462
|
+
function getPostfixForTypeWarning(value) {
|
|
1463
|
+
var type = getPreciseType(value);
|
|
1464
|
+
switch (type) {
|
|
1465
|
+
case 'array':
|
|
1466
|
+
case 'object':
|
|
1467
|
+
return 'an ' + type;
|
|
1468
|
+
case 'boolean':
|
|
1469
|
+
case 'date':
|
|
1470
|
+
case 'regexp':
|
|
1471
|
+
return 'a ' + type;
|
|
1472
|
+
default:
|
|
1473
|
+
return type;
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
|
|
1477
|
+
// Returns class name of the object, if any.
|
|
1478
|
+
function getClassName(propValue) {
|
|
1479
|
+
if (!propValue.constructor || !propValue.constructor.name) {
|
|
1480
|
+
return ANONYMOUS;
|
|
1481
|
+
}
|
|
1482
|
+
return propValue.constructor.name;
|
|
1483
|
+
}
|
|
1484
|
+
|
|
1485
|
+
ReactPropTypes.checkPropTypes = checkPropTypes;
|
|
1486
|
+
ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
|
|
1487
|
+
ReactPropTypes.PropTypes = ReactPropTypes;
|
|
1488
|
+
|
|
1489
|
+
return ReactPropTypes;
|
|
1490
|
+
};
|
|
1491
|
+
|
|
1492
|
+
/**
|
|
1493
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
1494
|
+
*
|
|
1495
|
+
* This source code is licensed under the MIT license found in the
|
|
1496
|
+
* LICENSE file in the root directory of this source tree.
|
|
1497
|
+
*/
|
|
1498
|
+
|
|
1499
|
+
var ReactPropTypesSecret = ReactPropTypesSecret_1;
|
|
1500
|
+
|
|
1501
|
+
function emptyFunction() {}
|
|
1502
|
+
function emptyFunctionWithReset() {}
|
|
1503
|
+
emptyFunctionWithReset.resetWarningCache = emptyFunction;
|
|
1504
|
+
|
|
1505
|
+
var factoryWithThrowingShims = function() {
|
|
1506
|
+
function shim(props, propName, componentName, location, propFullName, secret) {
|
|
1507
|
+
if (secret === ReactPropTypesSecret) {
|
|
1508
|
+
// It is still safe when called from React.
|
|
1509
|
+
return;
|
|
1510
|
+
}
|
|
1511
|
+
var err = new Error(
|
|
1512
|
+
'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
|
|
1513
|
+
'Use PropTypes.checkPropTypes() to call them. ' +
|
|
1514
|
+
'Read more at http://fb.me/use-check-prop-types'
|
|
1515
|
+
);
|
|
1516
|
+
err.name = 'Invariant Violation';
|
|
1517
|
+
throw err;
|
|
1518
|
+
} shim.isRequired = shim;
|
|
1519
|
+
function getShim() {
|
|
1520
|
+
return shim;
|
|
1521
|
+
} // Important!
|
|
1522
|
+
// Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
|
|
1523
|
+
var ReactPropTypes = {
|
|
1524
|
+
array: shim,
|
|
1525
|
+
bool: shim,
|
|
1526
|
+
func: shim,
|
|
1527
|
+
number: shim,
|
|
1528
|
+
object: shim,
|
|
1529
|
+
string: shim,
|
|
1530
|
+
symbol: shim,
|
|
1531
|
+
|
|
1532
|
+
any: shim,
|
|
1533
|
+
arrayOf: getShim,
|
|
1534
|
+
element: shim,
|
|
1535
|
+
elementType: shim,
|
|
1536
|
+
instanceOf: getShim,
|
|
1537
|
+
node: shim,
|
|
1538
|
+
objectOf: getShim,
|
|
1539
|
+
oneOf: getShim,
|
|
1540
|
+
oneOfType: getShim,
|
|
1541
|
+
shape: getShim,
|
|
1542
|
+
exact: getShim,
|
|
1543
|
+
|
|
1544
|
+
checkPropTypes: emptyFunctionWithReset,
|
|
1545
|
+
resetWarningCache: emptyFunction
|
|
1546
|
+
};
|
|
1547
|
+
|
|
1548
|
+
ReactPropTypes.PropTypes = ReactPropTypes;
|
|
1549
|
+
|
|
1550
|
+
return ReactPropTypes;
|
|
1551
|
+
};
|
|
1552
|
+
|
|
1553
|
+
/**
|
|
1554
|
+
* Copyright (c) 2013-present, Facebook, Inc.
|
|
1555
|
+
*
|
|
1556
|
+
* This source code is licensed under the MIT license found in the
|
|
1557
|
+
* LICENSE file in the root directory of this source tree.
|
|
1558
|
+
*/
|
|
1559
|
+
|
|
1560
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
1561
|
+
var ReactIs = require$$0;
|
|
1562
|
+
|
|
1563
|
+
// By explicitly using `prop-types` you are opting into new development behavior.
|
|
1564
|
+
// http://fb.me/prop-types-in-prod
|
|
1565
|
+
var throwOnDirectAccess = true;
|
|
1566
|
+
propTypes.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess);
|
|
1567
|
+
} else {
|
|
1568
|
+
// By explicitly using `prop-types` you are opting into new production behavior.
|
|
1569
|
+
// http://fb.me/prop-types-in-prod
|
|
1570
|
+
propTypes.exports = factoryWithThrowingShims();
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
var PropTypes = propTypes.exports;
|
|
1574
|
+
|
|
1575
|
+
/* eslint-disable no-plusplus */
|
|
1576
|
+
const parser = new UAParser();
|
|
1577
|
+
function getOS() {
|
|
1578
|
+
return parser.getOS();
|
|
1579
|
+
}
|
|
1580
|
+
function getDevice() {
|
|
1581
|
+
const device = parser.getDevice();
|
|
1582
|
+
const osName = getOS().name;
|
|
1583
|
+
if (device.type === undefined && osName === 'Android') device.type = 'tablet';
|
|
1584
|
+
return device;
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1587
|
+
const isDesktop = () => !getDevice().type; // TODO solve lint error:
|
|
1588
|
+
|
|
1589
|
+
/* eslint-disable no-param-reassign */
|
|
1590
|
+
|
|
1591
|
+
const toggleMute = media => {
|
|
1592
|
+
media.muted = !media.muted;
|
|
1593
|
+
|
|
1594
|
+
if (!media.muted) {
|
|
1595
|
+
media.volume = Math.max(media.volume, 0.05);
|
|
1596
|
+
}
|
|
1597
|
+
};
|
|
1598
|
+
|
|
1599
|
+
const setVolume = (media, {
|
|
1600
|
+
player
|
|
1601
|
+
}, level) => {
|
|
1602
|
+
const capped = Math.max(0, Math.min(level, 1));
|
|
1603
|
+
media.muted = capped <= 0; // to keep volume for unmute
|
|
1604
|
+
|
|
1605
|
+
if (capped > 0) {
|
|
1606
|
+
var _player$setVolume;
|
|
1607
|
+
|
|
1608
|
+
player === null || player === void 0 ? void 0 : (_player$setVolume = player.setVolume) === null || _player$setVolume === void 0 ? void 0 : _player$setVolume.call(player, capped * 100);
|
|
1609
|
+
media.volume = capped;
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1612
|
+
if (capped <= 0) {
|
|
1613
|
+
var _player$mute;
|
|
1614
|
+
|
|
1615
|
+
player === null || player === void 0 ? void 0 : (_player$mute = player.mute) === null || _player$mute === void 0 ? void 0 : _player$mute.call(player);
|
|
1616
|
+
}
|
|
1617
|
+
};
|
|
1618
|
+
|
|
1619
|
+
const PlaybackState = {
|
|
1620
|
+
PLAYING: 'playing',
|
|
1621
|
+
PAUSED: 'paused'
|
|
1622
|
+
};
|
|
1623
|
+
/**
|
|
1624
|
+
* Enum for UI state
|
|
1625
|
+
* @readonly
|
|
1626
|
+
* @type {{AUTOHIDE: string, HIDE: string, SHOW: string}}
|
|
1627
|
+
*/
|
|
1628
|
+
|
|
1629
|
+
const UiState = {
|
|
1630
|
+
SHOW: 'SHOW',
|
|
1631
|
+
HIDE: 'HIDE',
|
|
1632
|
+
AUTOHIDE: 'AUTOHIDE'
|
|
1633
|
+
};
|
|
1634
|
+
|
|
1635
|
+
const getTitle = config => typeof config === 'object' ? config === null || config === void 0 ? void 0 : config.title : undefined;
|
|
1636
|
+
|
|
1637
|
+
const getAutoplay = config => typeof config === 'object' ? config === null || config === void 0 ? void 0 : config.autoplay : undefined;
|
|
1638
|
+
|
|
1639
|
+
const Premium = ({
|
|
1640
|
+
config,
|
|
1641
|
+
usePlayerApis
|
|
1642
|
+
}) => {
|
|
1643
|
+
const title = getTitle(config);
|
|
1644
|
+
const autoplay = getAutoplay(config);
|
|
1645
|
+
const videoRef = useRef();
|
|
1646
|
+
const playerRef = useRef();
|
|
1647
|
+
const [playbackState, setPlaybackState] = useState(autoplay ? PlaybackState.PLAYING : PlaybackState.PAUSED);
|
|
1648
|
+
const [currentTime, setCurrentTime] = useState(0);
|
|
1649
|
+
const [controls, setControls] = useState();
|
|
1650
|
+
const [source, setSource] = useState(config.source);
|
|
1651
|
+
const [, forceUpdate] = useReducer(state => !state, true); // TODO: **ISSUE** operations between player UI and SDK methods can caused problems
|
|
1652
|
+
|
|
1653
|
+
const play = () => {
|
|
1654
|
+
setPlaybackState(PlaybackState.PLAYING);
|
|
1655
|
+
forceUpdate();
|
|
1656
|
+
};
|
|
1657
|
+
|
|
1658
|
+
const pause = () => {
|
|
1659
|
+
setPlaybackState(PlaybackState.PAUSED);
|
|
1660
|
+
forceUpdate();
|
|
1661
|
+
};
|
|
1662
|
+
|
|
1663
|
+
const seek = time => {
|
|
1664
|
+
if (typeof time === 'undefined') return videoRef.current.currentTime;
|
|
1665
|
+
const timeToSet = typeof time === 'function' ? time(videoRef.current.currentTime) : time;
|
|
1666
|
+
setCurrentTime({
|
|
1667
|
+
value: timeToSet
|
|
1668
|
+
});
|
|
1669
|
+
forceUpdate();
|
|
1670
|
+
};
|
|
1671
|
+
|
|
1672
|
+
const forward = (seconds = 10) => {
|
|
1673
|
+
if (typeof seconds === 'number') seek(time => time + seconds);
|
|
1674
|
+
};
|
|
1675
|
+
|
|
1676
|
+
const rewind = (seconds = 10) => {
|
|
1677
|
+
if (typeof seconds === 'number') seek(time => time - seconds);
|
|
1678
|
+
};
|
|
1679
|
+
|
|
1680
|
+
const uiControls = state => {
|
|
1681
|
+
// TODO: find a way to get UI controls state in Premium Player
|
|
1682
|
+
// below workaround might cause issue of operations between player UI and SDK methods
|
|
1683
|
+
if (typeof state === 'undefined') {
|
|
1684
|
+
switch (controls) {
|
|
1685
|
+
case true:
|
|
1686
|
+
return UiState.SHOW;
|
|
1687
|
+
|
|
1688
|
+
case false:
|
|
1689
|
+
return UiState.HIDE;
|
|
1690
|
+
|
|
1691
|
+
default:
|
|
1692
|
+
return UiState.AUTOHIDE;
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1695
|
+
|
|
1696
|
+
if (typeof state === 'string') {
|
|
1697
|
+
switch (state) {
|
|
1698
|
+
case UiState.SHOW:
|
|
1699
|
+
setControls(true);
|
|
1700
|
+
break;
|
|
1701
|
+
|
|
1702
|
+
case UiState.HIDE:
|
|
1703
|
+
setControls(false);
|
|
1704
|
+
break;
|
|
1705
|
+
|
|
1706
|
+
case UiState.AUTOHIDE:
|
|
1707
|
+
default:
|
|
1708
|
+
setControls({
|
|
1709
|
+
autohide: 3000
|
|
1710
|
+
});
|
|
1711
|
+
break;
|
|
1712
|
+
}
|
|
1713
|
+
}
|
|
1714
|
+
};
|
|
1715
|
+
|
|
1716
|
+
const volume = value => {
|
|
1717
|
+
if (typeof value === 'undefined') return videoRef.current.volume; // TODO: return value to be defined when set volume in mobile
|
|
1718
|
+
|
|
1719
|
+
if (!isDesktop()) return null;
|
|
1720
|
+
|
|
1721
|
+
if (typeof value === 'number') {
|
|
1722
|
+
setVolume(videoRef.current, {
|
|
1723
|
+
player: playerRef.current
|
|
1724
|
+
}, value);
|
|
1725
|
+
}
|
|
1726
|
+
};
|
|
1727
|
+
|
|
1728
|
+
const mute = () => {
|
|
1729
|
+
if (!videoRef.current.muted) {
|
|
1730
|
+
toggleMute(videoRef.current);
|
|
1731
|
+
}
|
|
1732
|
+
};
|
|
1733
|
+
|
|
1734
|
+
const unmute = () => {
|
|
1735
|
+
if (videoRef.current.muted) {
|
|
1736
|
+
toggleMute(videoRef.current);
|
|
1737
|
+
}
|
|
1738
|
+
};
|
|
1739
|
+
|
|
1740
|
+
const src = sourceToSet => {
|
|
1741
|
+
setSource(sourceToSet);
|
|
1742
|
+
};
|
|
1743
|
+
|
|
1744
|
+
useEffect(() => {
|
|
1745
|
+
// TODO: fix this react-hooks/rules-of-hooks issue
|
|
1746
|
+
usePlayerApis({
|
|
1747
|
+
play,
|
|
1748
|
+
pause,
|
|
1749
|
+
seek,
|
|
1750
|
+
forward,
|
|
1751
|
+
rewind,
|
|
1752
|
+
uiControls,
|
|
1753
|
+
volume,
|
|
1754
|
+
mute,
|
|
1755
|
+
unmute,
|
|
1756
|
+
src
|
|
1757
|
+
});
|
|
1758
|
+
});
|
|
1759
|
+
|
|
1760
|
+
const handlePlaybackStateChange = ({
|
|
1761
|
+
type
|
|
1762
|
+
}) => {
|
|
1763
|
+
switch (type) {
|
|
1764
|
+
case 'canplay':
|
|
1765
|
+
case 'play':
|
|
1766
|
+
case 'playing':
|
|
1767
|
+
case 'timeupdate':
|
|
1768
|
+
setPlaybackState(PlaybackState.PLAYING);
|
|
1769
|
+
break;
|
|
1770
|
+
|
|
1771
|
+
case 'pause':
|
|
1772
|
+
setPlaybackState(PlaybackState.PAUSED);
|
|
1773
|
+
break;
|
|
1774
|
+
}
|
|
1775
|
+
};
|
|
1776
|
+
|
|
1777
|
+
return jsx(PremiumPlayer, {
|
|
1778
|
+
videoRef: videoRef,
|
|
1779
|
+
style: {
|
|
1780
|
+
height: 'calc(100vh - 8rem)'
|
|
1781
|
+
},
|
|
1782
|
+
title: title,
|
|
1783
|
+
autoplay: autoplay,
|
|
1784
|
+
source: source,
|
|
1785
|
+
controls: controls,
|
|
1786
|
+
playbackState: playbackState,
|
|
1787
|
+
currentTime: currentTime,
|
|
1788
|
+
onPlayerLoaded: player => {
|
|
1789
|
+
playerRef.current = player;
|
|
1790
|
+
},
|
|
1791
|
+
onPlaybackStateChange: handlePlaybackStateChange // TODO: config via config prop
|
|
1792
|
+
// playbackRate={+targetState.playbackRate}
|
|
1793
|
+
// shaka={shaka}
|
|
1794
|
+
// bitmovin={bitmovin}
|
|
1795
|
+
// drm={{
|
|
1796
|
+
// url: drmUrl,
|
|
1797
|
+
// headers: parseKeyValuePair(drmCommonHeaders),
|
|
1798
|
+
// widevine: {
|
|
1799
|
+
// level: drmWidevineLevel,
|
|
1800
|
+
// },
|
|
1801
|
+
// fairplay: {
|
|
1802
|
+
// certificateURL: drmFairplayCertificateURL,
|
|
1803
|
+
// },
|
|
1804
|
+
// }}
|
|
1805
|
+
// onChangeNext={onChangeNext}
|
|
1806
|
+
// onChangePrevious={onChangePrevious}
|
|
1807
|
+
|
|
1808
|
+
});
|
|
1809
|
+
};
|
|
1810
|
+
/**
|
|
1811
|
+
* This is Premium Player class constructor.
|
|
1812
|
+
* @class
|
|
1813
|
+
*/
|
|
1814
|
+
|
|
1815
|
+
|
|
1816
|
+
class PlayerSdk {
|
|
1817
|
+
constructor(targetId, config) {
|
|
1818
|
+
_defineProperty(this, "play", () => {
|
|
1819
|
+
if (this.targetNode) return this.playerApis.play();
|
|
1820
|
+
});
|
|
1821
|
+
|
|
1822
|
+
_defineProperty(this, "pause", () => {
|
|
1823
|
+
if (this.targetNode) return this.playerApis.pause();
|
|
1824
|
+
});
|
|
1825
|
+
|
|
1826
|
+
_defineProperty(this, "seek", time => {
|
|
1827
|
+
if (this.targetNode) return this.playerApis.seek(time);
|
|
1828
|
+
});
|
|
1829
|
+
|
|
1830
|
+
_defineProperty(this, "forward", seconds => {
|
|
1831
|
+
if (this.targetNode) return this.playerApis.forward(seconds);
|
|
1832
|
+
});
|
|
1833
|
+
|
|
1834
|
+
_defineProperty(this, "rewind", seconds => {
|
|
1835
|
+
if (this.targetNode) return this.playerApis.rewind(seconds);
|
|
1836
|
+
});
|
|
1837
|
+
|
|
1838
|
+
_defineProperty(this, "uiControls", state => {
|
|
1839
|
+
if (this.targetNode) return this.playerApis.uiControls(state);
|
|
1840
|
+
});
|
|
1841
|
+
|
|
1842
|
+
_defineProperty(this, "volume", value => {
|
|
1843
|
+
if (this.targetNode) return this.playerApis.volume(value);
|
|
1844
|
+
});
|
|
1845
|
+
|
|
1846
|
+
_defineProperty(this, "mute", () => {
|
|
1847
|
+
if (this.targetNode) return this.playerApis.mute();
|
|
1848
|
+
});
|
|
1849
|
+
|
|
1850
|
+
_defineProperty(this, "unmute", () => {
|
|
1851
|
+
if (this.targetNode) return this.playerApis.unmute();
|
|
1852
|
+
});
|
|
1853
|
+
|
|
1854
|
+
_defineProperty(this, "src", sourceToSet => {
|
|
1855
|
+
if (this.targetNode) return this.playerApis.src(sourceToSet);
|
|
1856
|
+
});
|
|
1857
|
+
|
|
1858
|
+
_defineProperty(this, "release", () => // `unmountComponentAtNode` has been replaced with `root.unmount()` in React 18
|
|
1859
|
+
ReactDom.unmountComponentAtNode(this.targetNode));
|
|
1860
|
+
|
|
1861
|
+
this.targetNode = document.getElementById(targetId);
|
|
1862
|
+
this.targetId = targetId;
|
|
1863
|
+
this.config = config;
|
|
1864
|
+
this.init();
|
|
1865
|
+
}
|
|
1866
|
+
/**
|
|
1867
|
+
* This method renders the player and sets player APIs.
|
|
1868
|
+
* @private
|
|
1869
|
+
*/
|
|
1870
|
+
|
|
1871
|
+
|
|
1872
|
+
init() {
|
|
1873
|
+
// `render` has been replaced with createRoot in React 18
|
|
1874
|
+
ReactDom.render(jsx(Premium, {
|
|
1875
|
+
config: this.config,
|
|
1876
|
+
usePlayerApis: playerApis => {
|
|
1877
|
+
this.playerApis = playerApis;
|
|
1878
|
+
}
|
|
1879
|
+
}), document.getElementById(this.targetId));
|
|
1880
|
+
}
|
|
1881
|
+
/**
|
|
1882
|
+
* This method plays a video.
|
|
1883
|
+
*/
|
|
1884
|
+
|
|
1885
|
+
|
|
1886
|
+
}
|
|
1887
|
+
Premium.propTypes = {
|
|
1888
|
+
config: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({
|
|
1889
|
+
title: PropTypes.string,
|
|
1890
|
+
autoplay: PropTypes.string,
|
|
1891
|
+
source: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({
|
|
1892
|
+
dash: PropTypes.string,
|
|
1893
|
+
hls: PropTypes.string,
|
|
1894
|
+
src: PropTypes.arrayOf(PropTypes.shape({
|
|
1895
|
+
src: PropTypes.string.isRequired,
|
|
1896
|
+
type: PropTypes.string.isRequired,
|
|
1897
|
+
drm: PropTypes.oneOfType([() => null, PropTypes.object])
|
|
1898
|
+
}))
|
|
1899
|
+
})]).isRequired,
|
|
1900
|
+
drm: PropTypes.shape({
|
|
1901
|
+
licenseUrl: PropTypes.string,
|
|
1902
|
+
token: PropTypes.string
|
|
1903
|
+
})
|
|
1904
|
+
})]),
|
|
1905
|
+
usePlayerApis: PropTypes.func.isRequired
|
|
1906
|
+
};
|
|
1907
|
+
/**
|
|
1908
|
+
* This is Premium Player constructor function.
|
|
1909
|
+
* @param {string} targetId The target element ID.
|
|
1910
|
+
* @param {{title: string, autoplay: string, source: string|{src: string|object, type: string}|array.<{src: string|object, type: string}> } } config The config object passed to the Premium Player constructor.
|
|
1911
|
+
* @return {PlayerSdk} * @return {PlayerSdk}
|
|
1912
|
+
*/
|
|
1913
|
+
|
|
1914
|
+
const Player = (targetId, config) => new PlayerSdk(targetId, config);
|
|
1915
|
+
|
|
1916
|
+
export { PlaybackState, PlayerSdk, UiState, Player as default };
|