@beesolve/lambda-keep-active 1.0.3 → 1.0.4

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.
@@ -1,5 +0,0 @@
1
- import{c as Kt,d as Ht,e as Pt,f as Ds,g as st,h as rt,i as al,j as hs,k as xt,l as vr,m as St,n as At,o as Ut,p as $r,q as Mt,r as Bt,s as Jt,t as yt,u as Wt,v as Ct}from"./chunk-p85vag28.js";import{w as wt,x as ht}from"./chunk-dkk1zwm0.js";import{y as is}from"./chunk-r8mj3nq7.js";import{A as at,C as Nt,F as Lt,G as Ft,K as T,z as kl}from"./chunk-fbbbv2d4.js";import{L as ks}from"./chunk-ekwpcdh4.js";import{O as et}from"./chunk-whenq5kz.js";import"./chunk-kvnavsh3.js";import{R as ps}from"./chunk-t5j8kj9p.js";import{S as Is}from"./chunk-4pkw7jk4.js";import{T as gs,U as M,V as Nd,W as Os}from"./chunk-e9mt878v.js";var fs=M((Ol)=>{var js=ks(),J=Ds(),Hs=Is(),wl=ps(),Ps=al(),Ls=(s)=>js.HttpResponse.isInstance(s)?s.headers?.date??s.headers?.Date:void 0,_s=(s)=>new Date(Date.now()+s),yl=(s,r)=>Math.abs(_s(r).getTime()-s)>=300000,xs=(s,r)=>{let l=Date.parse(s);if(yl(l,r))return l-Date.now();return r},K=(s,r)=>{if(!r)throw Error(`Property \`${s}\` is not resolved for AWS SDK SigV4Auth`);return r},qs=async(s)=>{let r=K("context",s.context),l=K("config",s.config),t=r.endpointV2?.properties?.authSchemes?.[0],e=await K("signer",l.signer)(t),a=s?.signingRegion,D=s?.signingRegionSet,b=s?.signingName;return{config:l,signer:e,signingRegion:a,signingRegionSet:D,signingName:b}};class k{async sign(s,r,l){if(!js.HttpRequest.isInstance(s))throw Error("The request is not an instance of `HttpRequest` and cannot be signed");let t=await qs(l),{config:u,signer:e}=t,{signingRegion:a,signingName:D}=t,b=l.context;if(b?.authSchemes?.length??!1){let[d,I]=b.authSchemes;if(d?.name==="sigv4a"&&I?.name==="sigv4")a=I?.signingRegion??a,D=I?.signingName??D}return await e.sign(s,{signingDate:_s(u.systemClockOffset),signingRegion:a,signingService:D})}errorHandler(s){return(r)=>{let l=r.ServerTime??Ls(r.$response);if(l){let t=K("config",s.config),u=t.systemClockOffset;if(t.systemClockOffset=xs(l,t.systemClockOffset),t.systemClockOffset!==u&&r.$metadata)r.$metadata.clockSkewCorrected=!0}throw r}}successHandler(s,r){let l=Ls(s);if(l){let t=K("config",r.config);t.systemClockOffset=xs(l,t.systemClockOffset)}}}var bl=k;class Rs extends k{async sign(s,r,l){if(!js.HttpRequest.isInstance(s))throw Error("The request is not an instance of `HttpRequest` and cannot be signed");let{config:t,signer:u,signingRegion:e,signingRegionSet:a,signingName:D}=await qs(l),y=(await t.sigv4aSigningRegionSet?.()??a??[e]).join(",");return await u.sign(s,{signingDate:_s(t.systemClockOffset),signingRegion:y,signingService:D})}}var Ss=(s)=>typeof s==="string"&&s.length>0?s.split(",").map((r)=>r.trim()):[],Ts=(s)=>`AWS_BEARER_TOKEN_${s.replace(/[\s-]/g,"_").toUpperCase()}`,As="AWS_AUTH_SCHEME_PREFERENCE",Cs="auth_scheme_preference",Dl={environmentVariableSelector:(s,r)=>{if(r?.signingName){if(Ts(r.signingName)in s)return["httpBearerAuth"]}if(!(As in s))return;return Ss(s[As])},configFileSelector:(s)=>{if(!(Cs in s))return;return Ss(s[Cs])},default:[]},Il=(s)=>{return s.sigv4aSigningRegionSet=J.normalizeProvider(s.sigv4aSigningRegionSet),s},pl={environmentVariableSelector(s){if(s.AWS_SIGV4A_SIGNING_REGION_SET)return s.AWS_SIGV4A_SIGNING_REGION_SET.split(",").map((r)=>r.trim());throw new Hs.ProviderError("AWS_SIGV4A_SIGNING_REGION_SET not set in env.",{tryNextLink:!0})},configFileSelector(s){if(s.sigv4a_signing_region_set)return(s.sigv4a_signing_region_set??"").split(",").map((r)=>r.trim());throw new Hs.ProviderError("sigv4a_signing_region_set not set in profile.",{tryNextLink:!0})},default:void 0},ms=(s)=>{let r=s.credentials,l=!!s.credentials,t=void 0;Object.defineProperty(s,"credentials",{set(y){if(y&&y!==r&&y!==t)l=!0;r=y;let d=_l(s,{credentials:r,credentialDefaultProvider:s.credentialDefaultProvider}),I=ql(s,d);if(l&&!I.attributed)t=async(j)=>I(j).then((p)=>wl.setCredentialFeature(p,"CREDENTIALS_CODE","e")),t.memoized=I.memoized,t.configBound=I.configBound,t.attributed=!0;else t=I},get(){return t},enumerable:!0,configurable:!0}),s.credentials=r;let{signingEscapePath:u=!0,systemClockOffset:e=s.systemClockOffset||0,sha256:a}=s,D;if(s.signer)D=J.normalizeProvider(s.signer);else if(s.regionInfoProvider)D=()=>J.normalizeProvider(s.region)().then(async(y)=>[await s.regionInfoProvider(y,{useFipsEndpoint:await s.useFipsEndpoint(),useDualstackEndpoint:await s.useDualstackEndpoint()})||{},y]).then(([y,d])=>{let{signingRegion:I,signingService:j}=y;s.signingRegion=s.signingRegion||I||d,s.signingName=s.signingName||j||s.serviceId;let p={...s,credentials:s.credentials,region:s.signingRegion,service:s.signingName,sha256:a,uriEscapePath:u};return new(s.signerConstructor||Ps.SignatureV4)(p)});else D=async(y)=>{y=Object.assign({},{name:"sigv4",signingName:s.signingName||s.defaultSigningName,signingRegion:await J.normalizeProvider(s.region)(),properties:{}},y);let{signingRegion:d,signingName:I}=y;s.signingRegion=s.signingRegion||d,s.signingName=s.signingName||I||s.serviceId;let j={...s,credentials:s.credentials,region:s.signingRegion,service:s.signingName,sha256:a,uriEscapePath:u};return new(s.signerConstructor||Ps.SignatureV4)(j)};return Object.assign(s,{systemClockOffset:e,signingEscapePath:u,signer:D})},jl=ms;function _l(s,{credentials:r,credentialDefaultProvider:l}){let t;if(r)if(!r?.memoized)t=J.memoizeIdentityProvider(r,J.isIdentityExpired,J.doesIdentityRequireRefresh);else t=r;else if(l)t=J.normalizeProvider(l(Object.assign({},s,{parentClientConfig:s})));else t=async()=>{throw Error("@aws-sdk/core::resolveAwsSdkSigV4Config - `credentials` not provided and no credentialDefaultProvider was configured.")};return t.memoized=!0,t}function ql(s,r){if(r.configBound)return r;let l=async(t)=>r({...t,callerClientConfig:s});return l.memoized=r.memoized,l.configBound=!0,l}Ol.AWSSDKSigV4Signer=bl;Ol.AwsSdkSigV4ASigner=Rs;Ol.AwsSdkSigV4Signer=k;Ol.NODE_AUTH_SCHEME_PREFERENCE_OPTIONS=Dl;Ol.NODE_SIGV4A_CONFIG_OPTIONS=pl;Ol.getBearerTokenEnvKey=Ts;Ol.resolveAWSSDKSigV4Config=jl;Ol.resolveAwsSdkSigV4AConfig=Il;Ol.resolveAwsSdkSigV4Config=ms;Ol.validateSigningProperties=qs});var sr=M((Ll)=>{var El=ps(),Gl=fs(),q=Is(),H=is(),Vl=Os("fs"),Xl=({logger:s,signingName:r}={})=>async()=>{if(s?.debug?.("@aws-sdk/token-providers - fromEnvSigningName"),!r)throw new q.TokenProviderError("Please pass 'signingName' to compute environment variable key",{logger:s});let l=Gl.getBearerTokenEnvKey(r);if(!(l in process.env))throw new q.TokenProviderError(`Token not present in '${l}' environment variable`,{logger:s});let t={token:process.env[l]};return El.setTokenFeature(t,"BEARER_SERVICE_ENV_VARS","3"),t},Zl=300000,Ns="To refresh this SSO session run 'aws sso login' with the corresponding profile.",vl=async(s,r={})=>{let{SSOOIDCClient:l}=await import("./chunk-pqhmh7nm.js"),t=(e)=>r.clientConfig?.[e]??r.parentClientConfig?.[e];return new l(Object.assign({},r.clientConfig??{},{region:s??r.clientConfig?.region,logger:t("logger"),userAgentAppId:t("userAgentAppId")}))},$l=async(s,r,l={})=>{let{CreateTokenCommand:t}=await import("./chunk-pqhmh7nm.js");return(await vl(r,l)).send(new t({clientId:s.clientId,clientSecret:s.clientSecret,refreshToken:s.refreshToken,grantType:"refresh_token"}))},os=(s)=>{if(s.expiration&&s.expiration.getTime()<Date.now())throw new q.TokenProviderError(`Token is expired. ${Ns}`,!1)},Y=(s,r,l=!1)=>{if(typeof r>"u")throw new q.TokenProviderError(`Value not present for '${s}' in SSO Token${l?". Cannot refresh":""}. ${Ns}`,!1)},{writeFile:Ql}=Vl.promises,Kl=(s,r)=>{let l=H.getSSOTokenFilepath(s),t=JSON.stringify(r,null,2);return Ql(l,t)},cs=new Date(0),ns=(s={})=>async({callerClientConfig:r}={})=>{let l={...s,parentClientConfig:{...r,...s.parentClientConfig}};l.logger?.debug("@aws-sdk/token-providers - fromSso");let t=await H.parseKnownFiles(l),u=H.getProfileName({profile:l.profile??r?.profile}),e=t[u];if(!e)throw new q.TokenProviderError(`Profile '${u}' could not be found in shared credentials file.`,!1);else if(!e.sso_session)throw new q.TokenProviderError(`Profile '${u}' is missing required property 'sso_session'.`);let a=e.sso_session,b=(await H.loadSsoSessionData(l))[a];if(!b)throw new q.TokenProviderError(`Sso session '${a}' could not be found in shared credentials file.`,!1);for(let _ of["sso_start_url","sso_region"])if(!b[_])throw new q.TokenProviderError(`Sso session '${a}' is missing required property '${_}'.`,!1);b.sso_start_url;let y=b.sso_region,d;try{d=await H.getSSOTokenFromFile(a)}catch(_){throw new q.TokenProviderError(`The SSO session token associated with profile=${u} was not found or is invalid. ${Ns}`,!1)}Y("accessToken",d.accessToken),Y("expiresAt",d.expiresAt);let{accessToken:I,expiresAt:j}=d,p={token:I,expiration:new Date(j)};if(p.expiration.getTime()-Date.now()>Zl)return p;if(Date.now()-cs.getTime()<30000)return os(p),p;Y("clientId",d.clientId,!0),Y("clientSecret",d.clientSecret,!0),Y("refreshToken",d.refreshToken,!0);try{cs.setTime(Date.now());let _=await $l(d,y,l);Y("accessToken",_.accessToken),Y("expiresIn",_.expiresIn);let G=new Date(Date.now()+_.expiresIn*1000);try{await Kl(a,{...d,accessToken:_.accessToken,expiresAt:G.toISOString(),refreshToken:_.refreshToken})}catch(ys){}return{token:_.accessToken,expiration:G}}catch(_){return os(p),p}},Hl=({token:s,logger:r})=>async()=>{if(r?.debug("@aws-sdk/token-providers - fromStatic"),!s||!s.token)throw new q.TokenProviderError("Please pass a valid token to fromStatic",!1);return s},Pl=(s={})=>q.memoize(q.chain(ns(s),async()=>{throw new q.TokenProviderError("Could not load token from any providers",!1)}),(r)=>r.expiration!==void 0&&r.expiration.getTime()-Date.now()<300000,(r)=>r.expiration!==void 0);Ll.fromEnvSigningName=Xl;Ll.fromSso=ns;Ll.fromStatic=Hl;Ll.nodeProvider=Pl});var Us=M((rr)=>{Object.defineProperty(rr,"__esModule",{value:!0});rr.resolveHttpAuthSchemeConfig=rr.defaultSSOHttpAuthSchemeProvider=rr.defaultSSOHttpAuthSchemeParametersProvider=void 0;var Rl=hs(),Fs=kl(),Tl=async(s,r,l)=>{return{operation:(0,Fs.getSmithyContext)(r).operation,region:await(0,Fs.normalizeProvider)(s.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()}};rr.defaultSSOHttpAuthSchemeParametersProvider=Tl;function ml(s){return{schemeId:"aws.auth#sigv4",signingProperties:{name:"awsssoportal",region:s.region},propertiesExtractor:(r,l)=>({signingProperties:{config:r,context:l}})}}function R(s){return{schemeId:"smithy.api#noAuth"}}var fl=(s)=>{let r=[];switch(s.operation){case"GetRoleCredentials":{r.push(R(s));break}case"ListAccountRoles":{r.push(R(s));break}case"ListAccounts":{r.push(R(s));break}case"Logout":{r.push(R(s));break}default:r.push(ml(s))}return r};rr.defaultSSOHttpAuthSchemeProvider=fl;var ol=(s)=>{let r=(0,Rl.resolveAwsSdkSigV4Config)(s);return Object.assign(r,{authSchemePreference:(0,Fs.normalizeProvider)(s.authSchemePreference??[])})};rr.resolveHttpAuthSchemeConfig=ol});var tr=M((Ed,il)=>{il.exports={name:"@aws-sdk/client-sso",description:"AWS SDK for JavaScript Sso Client for Node.js, Browser and React Native",version:"3.936.0",scripts:{build:"concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'","build:cjs":"node ../../scripts/compilation/inline client-sso","build:es":"tsc -p tsconfig.es.json","build:include:deps":"lerna run --scope $npm_package_name --include-dependencies build","build:types":"tsc -p tsconfig.types.json","build:types:downlevel":"downlevel-dts dist-types dist-types/ts3.4",clean:"rimraf ./dist-* && rimraf *.tsbuildinfo","extract:docs":"api-extractor run --local","generate:client":"node ../../scripts/generate-clients/single-service --solo sso"},main:"./dist-cjs/index.js",types:"./dist-types/index.d.ts",module:"./dist-es/index.js",sideEffects:!1,dependencies:{"@aws-crypto/sha256-browser":"5.2.0","@aws-crypto/sha256-js":"5.2.0","@aws-sdk/core":"3.936.0","@aws-sdk/middleware-host-header":"3.936.0","@aws-sdk/middleware-logger":"3.936.0","@aws-sdk/middleware-recursion-detection":"3.936.0","@aws-sdk/middleware-user-agent":"3.936.0","@aws-sdk/region-config-resolver":"3.936.0","@aws-sdk/types":"3.936.0","@aws-sdk/util-endpoints":"3.936.0","@aws-sdk/util-user-agent-browser":"3.936.0","@aws-sdk/util-user-agent-node":"3.936.0","@smithy/config-resolver":"^4.4.3","@smithy/core":"^3.18.5","@smithy/fetch-http-handler":"^5.3.6","@smithy/hash-node":"^4.2.5","@smithy/invalid-dependency":"^4.2.5","@smithy/middleware-content-length":"^4.2.5","@smithy/middleware-endpoint":"^4.3.12","@smithy/middleware-retry":"^4.4.12","@smithy/middleware-serde":"^4.2.6","@smithy/middleware-stack":"^4.2.5","@smithy/node-config-provider":"^4.3.5","@smithy/node-http-handler":"^4.4.5","@smithy/protocol-http":"^5.3.5","@smithy/smithy-client":"^4.9.8","@smithy/types":"^4.9.0","@smithy/url-parser":"^4.2.5","@smithy/util-base64":"^4.3.0","@smithy/util-body-length-browser":"^4.2.0","@smithy/util-body-length-node":"^4.2.1","@smithy/util-defaults-mode-browser":"^4.3.11","@smithy/util-defaults-mode-node":"^4.2.14","@smithy/util-endpoints":"^3.2.5","@smithy/util-middleware":"^4.2.5","@smithy/util-retry":"^4.2.5","@smithy/util-utf8":"^4.2.0",tslib:"^2.6.2"},devDependencies:{"@tsconfig/node18":"18.2.4","@types/node":"^18.19.69",concurrently:"7.0.0","downlevel-dts":"0.10.1",rimraf:"3.0.2",typescript:"~5.8.3"},engines:{node:">=18.0.0"},typesVersions:{"<4.0":{"dist-types/*":["dist-types/ts3.4/*"]}},files:["dist-*/**"],author:{name:"AWS SDK for JavaScript Team",url:"https://aws.amazon.com/javascript/"},license:"Apache-2.0",browser:{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.browser"},"react-native":{"./dist-es/runtimeConfig":"./dist-es/runtimeConfig.native"},homepage:"https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sso",repository:{type:"git",url:"https://github.com/aws/aws-sdk-js-v3.git",directory:"clients/client-sso"}}});var hr=M((Nr)=>{Object.defineProperty(Nr,"__esModule",{value:!0});Nr.ruleSet=void 0;var jr="required",N="fn",F="argv",v="ref",ur=!0,dr="isSet",P="booleanEquals",X="error",Z="endpoint",B="tree",Ms="PartitionResult",Bs="getAttr",er={[jr]:!1,type:"string"},ar={[jr]:!0,default:!1,type:"boolean"},wr={[v]:"Endpoint"},_r={[N]:P,[F]:[{[v]:"UseFIPS"},!0]},qr={[N]:P,[F]:[{[v]:"UseDualStack"},!0]},O={},yr={[N]:Bs,[F]:[{[v]:Ms},"supportsFIPS"]},Or={[v]:Ms},br={[N]:P,[F]:[!0,{[N]:Bs,[F]:[Or,"supportsDualStack"]}]},Dr=[_r],Ir=[qr],pr=[{[v]:"Region"}],nl={version:"1.0",parameters:{Region:er,UseDualStack:ar,UseFIPS:ar,Endpoint:er},rules:[{conditions:[{[N]:dr,[F]:[wr]}],rules:[{conditions:Dr,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:X},{conditions:Ir,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:X},{endpoint:{url:wr,properties:O,headers:O},type:Z}],type:B},{conditions:[{[N]:dr,[F]:pr}],rules:[{conditions:[{[N]:"aws.partition",[F]:pr,assign:Ms}],rules:[{conditions:[_r,qr],rules:[{conditions:[{[N]:P,[F]:[ur,yr]},br],rules:[{endpoint:{url:"https://portal.sso-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:O,headers:O},type:Z}],type:B},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:X}],type:B},{conditions:Dr,rules:[{conditions:[{[N]:P,[F]:[yr,ur]}],rules:[{conditions:[{[N]:"stringEquals",[F]:[{[N]:Bs,[F]:[Or,"name"]},"aws-us-gov"]}],endpoint:{url:"https://portal.sso.{Region}.amazonaws.com",properties:O,headers:O},type:Z},{endpoint:{url:"https://portal.sso-fips.{Region}.{PartitionResult#dnsSuffix}",properties:O,headers:O},type:Z}],type:B},{error:"FIPS is enabled but this partition does not support FIPS",type:X}],type:B},{conditions:Ir,rules:[{conditions:[br],rules:[{endpoint:{url:"https://portal.sso.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:O,headers:O},type:Z}],type:B},{error:"DualStack is enabled but this partition does not support DualStack",type:X}],type:B},{endpoint:{url:"https://portal.sso.{Region}.{PartitionResult#dnsSuffix}",properties:O,headers:O},type:Z}],type:B}],type:B},{error:"Invalid Configuration: Missing Region",type:X}]};Nr.ruleSet=nl});var Br=M((Ur)=>{Object.defineProperty(Ur,"__esModule",{value:!0});Ur.defaultEndpointResolver=void 0;var lt=rt(),Js=st(),tt=hr(),ut=new Js.EndpointCache({size:50,params:["Endpoint","Region","UseDualStack","UseFIPS"]}),dt=(s,r={})=>{return ut.get(s,()=>(0,Js.resolveEndpoint)(tt.ruleSet,{endpointParams:s,logger:r.logger}))};Ur.defaultEndpointResolver=dt;Js.customEndpointFunctions.aws=lt.awsEndpointFunctions});var Er=M((Yr)=>{Object.defineProperty(Yr,"__esModule",{value:!0});Yr.getRuntimeConfig=void 0;var bt=hs(),Dt=yt(),It=Ds(),pt=T(),jt=wt(),Jr=at(),Wr=et(),_t=Us(),qt=Br(),Ot=(s)=>{return{apiVersion:"2019-06-10",base64Decoder:s?.base64Decoder??Jr.fromBase64,base64Encoder:s?.base64Encoder??Jr.toBase64,disableHostPrefix:s?.disableHostPrefix??!1,endpointProvider:s?.endpointProvider??qt.defaultEndpointResolver,extensions:s?.extensions??[],httpAuthSchemeProvider:s?.httpAuthSchemeProvider??_t.defaultSSOHttpAuthSchemeProvider,httpAuthSchemes:s?.httpAuthSchemes??[{schemeId:"aws.auth#sigv4",identityProvider:(r)=>r.getIdentityProvider("aws.auth#sigv4"),signer:new bt.AwsSdkSigV4Signer},{schemeId:"smithy.api#noAuth",identityProvider:(r)=>r.getIdentityProvider("smithy.api#noAuth")||(async()=>({})),signer:new It.NoAuthSigner}],logger:s?.logger??new pt.NoOpLogger,protocol:s?.protocol??new Dt.AwsRestJsonProtocol({defaultNamespace:"com.amazonaws.sso"}),serviceId:s?.serviceId??"SSO",urlParser:s?.urlParser??jt.parseUrl,utf8Decoder:s?.utf8Decoder??Wr.fromUtf8,utf8Encoder:s?.utf8Encoder??Wr.toUtf8}};Yr.getRuntimeConfig=Ot});var Hr=M((Qr)=>{Object.defineProperty(Qr,"__esModule",{value:!0});Qr.getRuntimeConfig=void 0;var Yt=Ft(),zt=Yt.__importDefault(tr()),Gr=hs(),Vr=Mt(),m=vr(),Et=Bt(),Xr=$r(),z=ht(),Zr=Nt(),Gt=Jt(),Vt=Ut(),Xt=Er(),Zt=T(),vt=Wt(),$t=T(),Qt=(s)=>{(0,$t.emitWarningIfUnsupportedVersion)(process.version);let r=(0,vt.resolveDefaultsModeConfig)(s),l=()=>r().then(Zt.loadConfigsForDefaultMode),t=(0,Xt.getRuntimeConfig)(s);(0,Gr.emitWarningIfUnsupportedVersion)(process.version);let u={profile:s?.profile,logger:t.logger};return{...t,...s,runtime:"node",defaultsMode:r,authSchemePreference:s?.authSchemePreference??(0,z.loadConfig)(Gr.NODE_AUTH_SCHEME_PREFERENCE_OPTIONS,u),bodyLengthChecker:s?.bodyLengthChecker??Gt.calculateBodyLength,defaultUserAgentProvider:s?.defaultUserAgentProvider??(0,Vr.createDefaultUserAgentProvider)({serviceId:t.serviceId,clientVersion:zt.default.version}),maxAttempts:s?.maxAttempts??(0,z.loadConfig)(Xr.NODE_MAX_ATTEMPT_CONFIG_OPTIONS,s),region:s?.region??(0,z.loadConfig)(m.NODE_REGION_CONFIG_OPTIONS,{...m.NODE_REGION_CONFIG_FILE_OPTIONS,...u}),requestHandler:Zr.NodeHttpHandler.create(s?.requestHandler??l),retryMode:s?.retryMode??(0,z.loadConfig)({...Xr.NODE_RETRY_MODE_CONFIG_OPTIONS,default:async()=>(await l()).retryMode||Vt.DEFAULT_RETRY_MODE},s),sha256:s?.sha256??Et.Hash.bind(null,"sha256"),streamCollector:s?.streamCollector??Zr.streamCollector,useDualstackEndpoint:s?.useDualstackEndpoint??(0,z.loadConfig)(m.NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS,u),useFipsEndpoint:s?.useFipsEndpoint??(0,z.loadConfig)(m.NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS,u),userAgentAppId:s?.userAgentAppId??(0,z.loadConfig)(Vr.NODE_APP_ID_CONFIG_OPTIONS,u)}};Qr.getRuntimeConfig=Qt});var sl=M((Es)=>{var Pr=Kt(),kt=Ht(),Rt=Pt(),Lr=xt(),Tt=vr(),L=Ds(),$=Lt(),mt=St(),x=At(),xr=$r(),h=T(),Sr=Us(),ft=Hr(),Ar=Ct(),Cr=ks(),ot=(s)=>{return Object.assign(s,{useDualstackEndpoint:s.useDualstackEndpoint??!1,useFipsEndpoint:s.useFipsEndpoint??!1,defaultSigningName:"awsssoportal"})},f={UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}},ct=(s)=>{let{httpAuthSchemes:r,httpAuthSchemeProvider:l,credentials:t}=s;return{setHttpAuthScheme(u){let e=r.findIndex((a)=>a.schemeId===u.schemeId);if(e===-1)r.push(u);else r.splice(e,1,u)},httpAuthSchemes(){return r},setHttpAuthSchemeProvider(u){l=u},httpAuthSchemeProvider(){return l},setCredentials(u){t=u},credentials(){return t}}},gt=(s)=>{return{httpAuthSchemes:s.httpAuthSchemes(),httpAuthSchemeProvider:s.httpAuthSchemeProvider(),credentials:s.credentials()}},it=(s,r)=>{let l=Object.assign(Ar.getAwsRegionExtensionConfiguration(s),h.getDefaultExtensionConfiguration(s),Cr.getHttpHandlerExtensionConfiguration(s),ct(s));return r.forEach((t)=>t.configure(l)),Object.assign(s,Ar.resolveAwsRegionExtensionConfiguration(l),h.resolveDefaultRuntimeConfig(l),Cr.resolveHttpHandlerRuntimeConfig(l),gt(l))};class S extends h.Client{config;constructor(...[s]){let r=ft.getRuntimeConfig(s||{});super(r);this.initConfig=r;let l=ot(r),t=Lr.resolveUserAgentConfig(l),u=xr.resolveRetryConfig(t),e=Tt.resolveRegionConfig(u),a=Pr.resolveHostHeaderConfig(e),D=x.resolveEndpointConfig(a),b=Sr.resolveHttpAuthSchemeConfig(D),y=it(b,s?.extensions||[]);this.config=y,this.middlewareStack.use($.getSchemaSerdePlugin(this.config)),this.middlewareStack.use(Lr.getUserAgentPlugin(this.config)),this.middlewareStack.use(xr.getRetryPlugin(this.config)),this.middlewareStack.use(mt.getContentLengthPlugin(this.config)),this.middlewareStack.use(Pr.getHostHeaderPlugin(this.config)),this.middlewareStack.use(kt.getLoggerPlugin(this.config)),this.middlewareStack.use(Rt.getRecursionDetectionPlugin(this.config)),this.middlewareStack.use(L.getHttpAuthSchemeEndpointRuleSetPlugin(this.config,{httpAuthSchemeParametersProvider:Sr.defaultSSOHttpAuthSchemeParametersProvider,identityProviderConfigProvider:async(d)=>new L.DefaultIdentityProviderConfig({"aws.auth#sigv4":d.credentials})})),this.middlewareStack.use(L.getHttpSigningPlugin(this.config))}destroy(){super.destroy()}}var Q=class s extends h.ServiceException{constructor(r){super(r);Object.setPrototypeOf(this,s.prototype)}},kr=class s extends Q{name="InvalidRequestException";$fault="client";constructor(r){super({name:"InvalidRequestException",$fault:"client",...r});Object.setPrototypeOf(this,s.prototype)}},Rr=class s extends Q{name="ResourceNotFoundException";$fault="client";constructor(r){super({name:"ResourceNotFoundException",$fault:"client",...r});Object.setPrototypeOf(this,s.prototype)}},Tr=class s extends Q{name="TooManyRequestsException";$fault="client";constructor(r){super({name:"TooManyRequestsException",$fault:"client",...r});Object.setPrototypeOf(this,s.prototype)}},mr=class s extends Q{name="UnauthorizedException";$fault="client";constructor(r){super({name:"UnauthorizedException",$fault:"client",...r});Object.setPrototypeOf(this,s.prototype)}},nt="AccountInfo",su="AccountListType",ru="AccessTokenType",lu="GetRoleCredentials",tu="GetRoleCredentialsRequest",uu="GetRoleCredentialsResponse",du="InvalidRequestException",eu="Logout",au="ListAccounts",wu="ListAccountsRequest",yu="ListAccountRolesRequest",bu="ListAccountRolesResponse",Du="ListAccountsResponse",Iu="ListAccountRoles",pu="LogoutRequest",ju="RoleCredentials",_u="RoleInfo",qu="RoleListType",Ou="ResourceNotFoundException",Nu="SecretAccessKeyType",Fu="SessionTokenType",hu="TooManyRequestsException",Uu="UnauthorizedException",o="accountId",Mu="accessKeyId",Bu="accountList",Ju="accountName",c="accessToken",fr="account_id",g="client",i="error",Wu="emailAddress",Yu="expiration",n="http",ss="httpError",rs="httpHeader",E="httpQuery",ls="message",or="maxResults",cr="max_result",ts="nextToken",gr="next_token",zu="roleCredentials",Eu="roleList",ir="roleName",Gu="role_name",nr="smithy.ts.sdk.synthetic.com.amazonaws.sso",Vu="secretAccessKey",Xu="sessionToken",us="x-amz-sso_bearer_token",w="com.amazonaws.sso",ds=[0,w,ru,8,0],Zu=[0,w,Nu,8,0],vu=[0,w,Fu,8,0],$u=[3,w,nt,0,[o,Ju,Wu],[0,0,0]],Qu=[3,w,tu,0,[ir,o,c],[[0,{[E]:Gu}],[0,{[E]:fr}],[()=>ds,{[rs]:us}]]],Ku=[3,w,uu,0,[zu],[[()=>ku,0]]],Hu=[-3,w,du,{[i]:g,[ss]:400},[ls],[0]];$.TypeRegistry.for(w).registerError(Hu,kr);var Pu=[3,w,yu,0,[ts,or,c,o],[[0,{[E]:gr}],[1,{[E]:cr}],[()=>ds,{[rs]:us}],[0,{[E]:fr}]]],Lu=[3,w,bu,0,[ts,Eu],[0,()=>gu]],xu=[3,w,wu,0,[ts,or,c],[[0,{[E]:gr}],[1,{[E]:cr}],[()=>ds,{[rs]:us}]]],Su=[3,w,Du,0,[ts,Bu],[0,()=>cu]],Au=[3,w,pu,0,[c],[[()=>ds,{[rs]:us}]]],Cu=[-3,w,Ou,{[i]:g,[ss]:404},[ls],[0]];$.TypeRegistry.for(w).registerError(Cu,Rr);var ku=[3,w,ju,0,[Mu,Vu,Xu,Yu],[0,[()=>Zu,0],[()=>vu,0],1]],Ru=[3,w,_u,0,[ir,o],[0,0]],Tu=[-3,w,hu,{[i]:g,[ss]:429},[ls],[0]];$.TypeRegistry.for(w).registerError(Tu,Tr);var mu=[-3,w,Uu,{[i]:g,[ss]:401},[ls],[0]];$.TypeRegistry.for(w).registerError(mu,mr);var fu="unit",ou=[-3,nr,"SSOServiceException",0,[],[]];$.TypeRegistry.for(nr).registerError(ou,Q);var cu=[1,w,su,0,()=>$u],gu=[1,w,qu,0,()=>Ru],iu=[9,w,lu,{[n]:["GET","/federation/credentials",200]},()=>Qu,()=>Ku],nu=[9,w,Iu,{[n]:["GET","/assignment/roles",200]},()=>Pu,()=>Lu],sd=[9,w,au,{[n]:["GET","/assignment/accounts",200]},()=>xu,()=>Su],rd=[9,w,eu,{[n]:["POST","/logout",200]},()=>Au,()=>fu];class Ws extends h.Command.classBuilder().ep(f).m(function(s,r,l,t){return[x.getEndpointPlugin(l,s.getEndpointParameterInstructions())]}).s("SWBPortalService","GetRoleCredentials",{}).n("SSOClient","GetRoleCredentialsCommand").sc(iu).build(){}class es extends h.Command.classBuilder().ep(f).m(function(s,r,l,t){return[x.getEndpointPlugin(l,s.getEndpointParameterInstructions())]}).s("SWBPortalService","ListAccountRoles",{}).n("SSOClient","ListAccountRolesCommand").sc(nu).build(){}class as extends h.Command.classBuilder().ep(f).m(function(s,r,l,t){return[x.getEndpointPlugin(l,s.getEndpointParameterInstructions())]}).s("SWBPortalService","ListAccounts",{}).n("SSOClient","ListAccountsCommand").sc(sd).build(){}class Ys extends h.Command.classBuilder().ep(f).m(function(s,r,l,t){return[x.getEndpointPlugin(l,s.getEndpointParameterInstructions())]}).s("SWBPortalService","Logout",{}).n("SSOClient","LogoutCommand").sc(rd).build(){}var ld={GetRoleCredentialsCommand:Ws,ListAccountRolesCommand:es,ListAccountsCommand:as,LogoutCommand:Ys};class zs extends S{}h.createAggregatedClient(ld,zs);var td=L.createPaginator(S,es,"nextToken","nextToken","maxResults"),ud=L.createPaginator(S,as,"nextToken","nextToken","maxResults");Object.defineProperty(Es,"$Command",{enumerable:!0,get:function(){return h.Command}});Object.defineProperty(Es,"__Client",{enumerable:!0,get:function(){return h.Client}});Es.GetRoleCredentialsCommand=Ws;Es.InvalidRequestException=kr;Es.ListAccountRolesCommand=es;Es.ListAccountsCommand=as;Es.LogoutCommand=Ys;Es.ResourceNotFoundException=Rr;Es.SSO=zs;Es.SSOClient=S;Es.SSOServiceException=Q;Es.TooManyRequestsException=Tr;Es.UnauthorizedException=mr;Es.paginateListAccountRoles=td;Es.paginateListAccounts=ud});var ll=M((Gs)=>{var rl=sl();Object.defineProperty(Gs,"GetRoleCredentialsCommand",{enumerable:!0,get:function(){return rl.GetRoleCredentialsCommand}});Object.defineProperty(Gs,"SSOClient",{enumerable:!0,get:function(){return rl.SSOClient}})});var U,ws,tl,Fd,dl=(s)=>s&&(typeof s.sso_start_url==="string"||typeof s.sso_account_id==="string"||typeof s.sso_session==="string"||typeof s.sso_region==="string"||typeof s.sso_role_name==="string"),A=!1,ul=async({ssoStartUrl:s,ssoSession:r,ssoAccountId:l,ssoRegion:t,ssoRoleName:u,ssoClient:e,clientConfig:a,parentClientConfig:D,profile:b,filepath:y,configFilepath:d,ignoreCache:I,logger:j})=>{let p,_="To refresh this SSO session run aws sso login with the corresponding profile.";if(r)try{let W=await Fd.fromSso({profile:b,filepath:y,configFilepath:d,ignoreCache:I})();p={accessToken:W.token,expiresAt:new Date(W.expiration).toISOString()}}catch(W){throw new U.CredentialsProviderError(W.message,{tryNextLink:A,logger:j})}else try{p=await ws.getSSOTokenFromFile(s)}catch(W){throw new U.CredentialsProviderError("The SSO session associated with this profile is invalid. To refresh this SSO session run aws sso login with the corresponding profile.",{tryNextLink:A,logger:j})}if(new Date(p.expiresAt).getTime()-Date.now()<=0)throw new U.CredentialsProviderError("The SSO session associated with this profile has expired. To refresh this SSO session run aws sso login with the corresponding profile.",{tryNextLink:A,logger:j});let{accessToken:G}=p,{SSOClient:ys,GetRoleCredentialsCommand:V}=await Promise.resolve().then(function(){return ll()}),C=e||new ys(Object.assign({},a??{},{logger:a?.logger??D?.logger,region:a?.region??t,userAgentAppId:a?.userAgentAppId??D?.userAgentAppId})),Vs;try{Vs=await C.send(new V({accountId:l,roleName:u,accessToken:G}))}catch(W){throw new U.CredentialsProviderError(W,{tryNextLink:A,logger:j})}let{roleCredentials:{accessKeyId:Xs,secretAccessKey:Zs,sessionToken:vs,expiration:$s,credentialScope:Qs,accountId:Ks}={}}=Vs;if(!Xs||!Zs||!vs||!$s)throw new U.CredentialsProviderError("SSO returns an invalid temporary credential.",{tryNextLink:A,logger:j});let bs={accessKeyId:Xs,secretAccessKey:Zs,sessionToken:vs,expiration:new Date($s),...Qs&&{credentialScope:Qs},...Ks&&{accountId:Ks}};if(r)tl.setCredentialFeature(bs,"CREDENTIALS_SSO","s");else tl.setCredentialFeature(bs,"CREDENTIALS_SSO_LEGACY","u");return bs},el=(s,r)=>{let{sso_start_url:l,sso_account_id:t,sso_region:u,sso_role_name:e}=s;if(!l||!t||!u||!e)throw new U.CredentialsProviderError(`Profile is configured with invalid SSO credentials. Required parameters "sso_account_id", "sso_region", "sso_role_name", "sso_start_url". Got ${Object.keys(s).join(", ")}
2
- Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html`,{tryNextLink:!1,logger:r});return s},hd=(s={})=>async({callerClientConfig:r}={})=>{s.logger?.debug("@aws-sdk/credential-provider-sso - fromSSO");let{ssoStartUrl:l,ssoAccountId:t,ssoRegion:u,ssoRoleName:e,ssoSession:a}=s,{ssoClient:D}=s,b=ws.getProfileName({profile:s.profile??r?.profile});if(!l&&!t&&!u&&!e&&!a){let d=(await ws.parseKnownFiles(s))[b];if(!d)throw new U.CredentialsProviderError(`Profile ${b} was not found.`,{logger:s.logger});if(!dl(d))throw new U.CredentialsProviderError(`Profile ${b} is not configured with SSO credentials.`,{logger:s.logger});if(d?.sso_session){let V=(await ws.loadSsoSessionData(s))[d.sso_session],C=` configurations in profile ${b} and sso-session ${d.sso_session}`;if(u&&u!==V.sso_region)throw new U.CredentialsProviderError("Conflicting SSO region"+C,{tryNextLink:!1,logger:s.logger});if(l&&l!==V.sso_start_url)throw new U.CredentialsProviderError("Conflicting SSO start_url"+C,{tryNextLink:!1,logger:s.logger});d.sso_region=V.sso_region,d.sso_start_url=V.sso_start_url}let{sso_start_url:I,sso_account_id:j,sso_region:p,sso_role_name:_,sso_session:G}=el(d,s.logger);return ul({ssoStartUrl:I,ssoSession:G,ssoAccountId:j,ssoRegion:p,ssoRoleName:_,ssoClient:D,clientConfig:s.clientConfig,parentClientConfig:s.parentClientConfig,profile:b,filepath:s.filepath,configFilepath:s.configFilepath,ignoreCache:s.ignoreCache,logger:s.logger})}else if(!l||!t||!u||!e)throw new U.CredentialsProviderError('Incomplete configuration. The fromSSO() argument hash must include "ssoStartUrl", "ssoAccountId", "ssoRegion", "ssoRoleName"',{tryNextLink:!1,logger:s.logger});else return ul({ssoStartUrl:l,ssoSession:a,ssoAccountId:t,ssoRegion:u,ssoRoleName:e,ssoClient:D,clientConfig:s.clientConfig,parentClientConfig:s.parentClientConfig,profile:b,filepath:s.filepath,configFilepath:s.configFilepath,ignoreCache:s.ignoreCache,logger:s.logger})},Ud,Md,Bd;var Jd=Nd(()=>{U=Is(),ws=is(),tl=ps(),Fd=sr();Ud=hd,Md=dl,Bd=el});Jd();export{Bd as validateSsoProfile,Md as isSsoProfile,Ud as fromSSO};export default {get validateSsoProfile(){return Bd},get isSsoProfile(){return Md},get fromSSO(){return Ud}};
3
-
4
- //# debugId=0D0612ADA39BF1E664756E2164756E21
5
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NvcmUvZGlzdC1janMvc3VibW9kdWxlcy9odHRwQXV0aFNjaGVtZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycy9kaXN0LWNqcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9hdXRoL2h0dHBBdXRoU2NoZW1lUHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvZW5kcG9pbnQvcnVsZXNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LXNzby9kaXN0LWNqcy9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuc2hhcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYXdzLXNkay9jbGllbnQtc3NvL2Rpc3QtY2pzL3J1bnRpbWVDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NsaWVudC1zc28vZGlzdC1janMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvL2Rpc3QtY2pzL2xvYWRTc28tQ1Z5OGlxc1ouanMiLCAiLi4vbm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvL2Rpc3QtY2pzL2luZGV4LmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIHByb3RvY29sSHR0cCA9IHJlcXVpcmUoJ0BzbWl0aHkvcHJvdG9jb2wtaHR0cCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCdAc21pdGh5L2NvcmUnKTtcbnZhciBwcm9wZXJ0eVByb3ZpZGVyID0gcmVxdWlyZSgnQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlcicpO1xudmFyIGNsaWVudCA9IHJlcXVpcmUoJ0Bhd3Mtc2RrL2NvcmUvY2xpZW50Jyk7XG52YXIgc2lnbmF0dXJlVjQgPSByZXF1aXJlKCdAc21pdGh5L3NpZ25hdHVyZS12NCcpO1xuXG5jb25zdCBnZXREYXRlSGVhZGVyID0gKHJlc3BvbnNlKSA9PiBwcm90b2NvbEh0dHAuSHR0cFJlc3BvbnNlLmlzSW5zdGFuY2UocmVzcG9uc2UpID8gcmVzcG9uc2UuaGVhZGVycz8uZGF0ZSA/PyByZXNwb25zZS5oZWFkZXJzPy5EYXRlIDogdW5kZWZpbmVkO1xuXG5jb25zdCBnZXRTa2V3Q29ycmVjdGVkRGF0ZSA9IChzeXN0ZW1DbG9ja09mZnNldCkgPT4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHN5c3RlbUNsb2NrT2Zmc2V0KTtcblxuY29uc3QgaXNDbG9ja1NrZXdlZCA9IChjbG9ja1RpbWUsIHN5c3RlbUNsb2NrT2Zmc2V0KSA9PiBNYXRoLmFicyhnZXRTa2V3Q29ycmVjdGVkRGF0ZShzeXN0ZW1DbG9ja09mZnNldCkuZ2V0VGltZSgpIC0gY2xvY2tUaW1lKSA+PSAzMDAwMDA7XG5cbmNvbnN0IGdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldCA9IChjbG9ja1RpbWUsIGN1cnJlbnRTeXN0ZW1DbG9ja09mZnNldCkgPT4ge1xuICAgIGNvbnN0IGNsb2NrVGltZUluTXMgPSBEYXRlLnBhcnNlKGNsb2NrVGltZSk7XG4gICAgaWYgKGlzQ2xvY2tTa2V3ZWQoY2xvY2tUaW1lSW5NcywgY3VycmVudFN5c3RlbUNsb2NrT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gY2xvY2tUaW1lSW5NcyAtIERhdGUubm93KCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50U3lzdGVtQ2xvY2tPZmZzZXQ7XG59O1xuXG5jb25zdCB0aHJvd1NpZ25pbmdQcm9wZXJ0eUVycm9yID0gKG5hbWUsIHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5IFxcYCR7bmFtZX1cXGAgaXMgbm90IHJlc29sdmVkIGZvciBBV1MgU0RLIFNpZ1Y0QXV0aGApO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcGVydHk7XG59O1xuY29uc3QgdmFsaWRhdGVTaWduaW5nUHJvcGVydGllcyA9IGFzeW5jIChzaWduaW5nUHJvcGVydGllcykgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aHJvd1NpZ25pbmdQcm9wZXJ0eUVycm9yKFwiY29udGV4dFwiLCBzaWduaW5nUHJvcGVydGllcy5jb250ZXh0KTtcbiAgICBjb25zdCBjb25maWcgPSB0aHJvd1NpZ25pbmdQcm9wZXJ0eUVycm9yKFwiY29uZmlnXCIsIHNpZ25pbmdQcm9wZXJ0aWVzLmNvbmZpZyk7XG4gICAgY29uc3QgYXV0aFNjaGVtZSA9IGNvbnRleHQuZW5kcG9pbnRWMj8ucHJvcGVydGllcz8uYXV0aFNjaGVtZXM/LlswXTtcbiAgICBjb25zdCBzaWduZXJGdW5jdGlvbiA9IHRocm93U2lnbmluZ1Byb3BlcnR5RXJyb3IoXCJzaWduZXJcIiwgY29uZmlnLnNpZ25lcik7XG4gICAgY29uc3Qgc2lnbmVyID0gYXdhaXQgc2lnbmVyRnVuY3Rpb24oYXV0aFNjaGVtZSk7XG4gICAgY29uc3Qgc2lnbmluZ1JlZ2lvbiA9IHNpZ25pbmdQcm9wZXJ0aWVzPy5zaWduaW5nUmVnaW9uO1xuICAgIGNvbnN0IHNpZ25pbmdSZWdpb25TZXQgPSBzaWduaW5nUHJvcGVydGllcz8uc2lnbmluZ1JlZ2lvblNldDtcbiAgICBjb25zdCBzaWduaW5nTmFtZSA9IHNpZ25pbmdQcm9wZXJ0aWVzPy5zaWduaW5nTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb25maWcsXG4gICAgICAgIHNpZ25lcixcbiAgICAgICAgc2lnbmluZ1JlZ2lvbixcbiAgICAgICAgc2lnbmluZ1JlZ2lvblNldCxcbiAgICAgICAgc2lnbmluZ05hbWUsXG4gICAgfTtcbn07XG5jbGFzcyBBd3NTZGtTaWdWNFNpZ25lciB7XG4gICAgYXN5bmMgc2lnbihodHRwUmVxdWVzdCwgaWRlbnRpdHksIHNpZ25pbmdQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICghcHJvdG9jb2xIdHRwLkh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UoaHR0cFJlcXVlc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcmVxdWVzdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgYEh0dHBSZXF1ZXN0YCBhbmQgY2Fubm90IGJlIHNpZ25lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IGF3YWl0IHZhbGlkYXRlU2lnbmluZ1Byb3BlcnRpZXMoc2lnbmluZ1Byb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCB7IGNvbmZpZywgc2lnbmVyIH0gPSB2YWxpZGF0ZWRQcm9wcztcbiAgICAgICAgbGV0IHsgc2lnbmluZ1JlZ2lvbiwgc2lnbmluZ05hbWUgfSA9IHZhbGlkYXRlZFByb3BzO1xuICAgICAgICBjb25zdCBoYW5kbGVyRXhlY3V0aW9uQ29udGV4dCA9IHNpZ25pbmdQcm9wZXJ0aWVzLmNvbnRleHQ7XG4gICAgICAgIGlmIChoYW5kbGVyRXhlY3V0aW9uQ29udGV4dD8uYXV0aFNjaGVtZXM/Lmxlbmd0aCA/PyAwID4gMSkge1xuICAgICAgICAgICAgY29uc3QgW2ZpcnN0LCBzZWNvbmRdID0gaGFuZGxlckV4ZWN1dGlvbkNvbnRleHQuYXV0aFNjaGVtZXM7XG4gICAgICAgICAgICBpZiAoZmlyc3Q/Lm5hbWUgPT09IFwic2lndjRhXCIgJiYgc2Vjb25kPy5uYW1lID09PSBcInNpZ3Y0XCIpIHtcbiAgICAgICAgICAgICAgICBzaWduaW5nUmVnaW9uID0gc2Vjb25kPy5zaWduaW5nUmVnaW9uID8/IHNpZ25pbmdSZWdpb247XG4gICAgICAgICAgICAgICAgc2lnbmluZ05hbWUgPSBzZWNvbmQ/LnNpZ25pbmdOYW1lID8/IHNpZ25pbmdOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25lZFJlcXVlc3QgPSBhd2FpdCBzaWduZXIuc2lnbihodHRwUmVxdWVzdCwge1xuICAgICAgICAgICAgc2lnbmluZ0RhdGU6IGdldFNrZXdDb3JyZWN0ZWREYXRlKGNvbmZpZy5zeXN0ZW1DbG9ja09mZnNldCksXG4gICAgICAgICAgICBzaWduaW5nUmVnaW9uOiBzaWduaW5nUmVnaW9uLFxuICAgICAgICAgICAgc2lnbmluZ1NlcnZpY2U6IHNpZ25pbmdOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNpZ25lZFJlcXVlc3Q7XG4gICAgfVxuICAgIGVycm9ySGFuZGxlcihzaWduaW5nUHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXJ2ZXJUaW1lID0gZXJyb3IuU2VydmVyVGltZSA/PyBnZXREYXRlSGVhZGVyKGVycm9yLiRyZXNwb25zZSk7XG4gICAgICAgICAgICBpZiAoc2VydmVyVGltZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRocm93U2lnbmluZ1Byb3BlcnR5RXJyb3IoXCJjb25maWdcIiwgc2lnbmluZ1Byb3BlcnRpZXMuY29uZmlnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0aWFsU3lzdGVtQ2xvY2tPZmZzZXQgPSBjb25maWcuc3lzdGVtQ2xvY2tPZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uZmlnLnN5c3RlbUNsb2NrT2Zmc2V0ID0gZ2V0VXBkYXRlZFN5c3RlbUNsb2NrT2Zmc2V0KHNlcnZlclRpbWUsIGNvbmZpZy5zeXN0ZW1DbG9ja09mZnNldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvY2tTa2V3Q29ycmVjdGVkID0gY29uZmlnLnN5c3RlbUNsb2NrT2Zmc2V0ICE9PSBpbml0aWFsU3lzdGVtQ2xvY2tPZmZzZXQ7XG4gICAgICAgICAgICAgICAgaWYgKGNsb2NrU2tld0NvcnJlY3RlZCAmJiBlcnJvci4kbWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuJG1ldGFkYXRhLmNsb2NrU2tld0NvcnJlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN1Y2Nlc3NIYW5kbGVyKGh0dHBSZXNwb25zZSwgc2lnbmluZ1Byb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgZGF0ZUhlYWRlciA9IGdldERhdGVIZWFkZXIoaHR0cFJlc3BvbnNlKTtcbiAgICAgICAgaWYgKGRhdGVIZWFkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRocm93U2lnbmluZ1Byb3BlcnR5RXJyb3IoXCJjb25maWdcIiwgc2lnbmluZ1Byb3BlcnRpZXMuY29uZmlnKTtcbiAgICAgICAgICAgIGNvbmZpZy5zeXN0ZW1DbG9ja09mZnNldCA9IGdldFVwZGF0ZWRTeXN0ZW1DbG9ja09mZnNldChkYXRlSGVhZGVyLCBjb25maWcuc3lzdGVtQ2xvY2tPZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxufVxuY29uc3QgQVdTU0RLU2lnVjRTaWduZXIgPSBBd3NTZGtTaWdWNFNpZ25lcjtcblxuY2xhc3MgQXdzU2RrU2lnVjRBU2lnbmVyIGV4dGVuZHMgQXdzU2RrU2lnVjRTaWduZXIge1xuICAgIGFzeW5jIHNpZ24oaHR0cFJlcXVlc3QsIGlkZW50aXR5LCBzaWduaW5nUHJvcGVydGllcykge1xuICAgICAgICBpZiAoIXByb3RvY29sSHR0cC5IdHRwUmVxdWVzdC5pc0luc3RhbmNlKGh0dHBSZXF1ZXN0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHJlcXVlc3QgaXMgbm90IGFuIGluc3RhbmNlIG9mIGBIdHRwUmVxdWVzdGAgYW5kIGNhbm5vdCBiZSBzaWduZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBjb25maWcsIHNpZ25lciwgc2lnbmluZ1JlZ2lvbiwgc2lnbmluZ1JlZ2lvblNldCwgc2lnbmluZ05hbWUgfSA9IGF3YWl0IHZhbGlkYXRlU2lnbmluZ1Byb3BlcnRpZXMoc2lnbmluZ1Byb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCBjb25maWdSZXNvbHZlZFNpZ25pbmdSZWdpb25TZXQgPSBhd2FpdCBjb25maWcuc2lndjRhU2lnbmluZ1JlZ2lvblNldD8uKCk7XG4gICAgICAgIGNvbnN0IG11bHRpUmVnaW9uT3ZlcnJpZGUgPSAoY29uZmlnUmVzb2x2ZWRTaWduaW5nUmVnaW9uU2V0ID8/XG4gICAgICAgICAgICBzaWduaW5nUmVnaW9uU2V0ID8/IFtzaWduaW5nUmVnaW9uXSkuam9pbihcIixcIik7XG4gICAgICAgIGNvbnN0IHNpZ25lZFJlcXVlc3QgPSBhd2FpdCBzaWduZXIuc2lnbihodHRwUmVxdWVzdCwge1xuICAgICAgICAgICAgc2lnbmluZ0RhdGU6IGdldFNrZXdDb3JyZWN0ZWREYXRlKGNvbmZpZy5zeXN0ZW1DbG9ja09mZnNldCksXG4gICAgICAgICAgICBzaWduaW5nUmVnaW9uOiBtdWx0aVJlZ2lvbk92ZXJyaWRlLFxuICAgICAgICAgICAgc2lnbmluZ1NlcnZpY2U6IHNpZ25pbmdOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNpZ25lZFJlcXVlc3Q7XG4gICAgfVxufVxuXG5jb25zdCBnZXRBcnJheUZvckNvbW1hU2VwYXJhdGVkU3RyaW5nID0gKHN0cikgPT4gdHlwZW9mIHN0ciA9PT0gXCJzdHJpbmdcIiAmJiBzdHIubGVuZ3RoID4gMCA/IHN0ci5zcGxpdChcIixcIikubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSkgOiBbXTtcblxuY29uc3QgZ2V0QmVhcmVyVG9rZW5FbnZLZXkgPSAoc2lnbmluZ05hbWUpID0+IGBBV1NfQkVBUkVSX1RPS0VOXyR7c2lnbmluZ05hbWUucmVwbGFjZSgvW1xccy1dL2csIFwiX1wiKS50b1VwcGVyQ2FzZSgpfWA7XG5cbmNvbnN0IE5PREVfQVVUSF9TQ0hFTUVfUFJFRkVSRU5DRV9FTlZfS0VZID0gXCJBV1NfQVVUSF9TQ0hFTUVfUFJFRkVSRU5DRVwiO1xuY29uc3QgTk9ERV9BVVRIX1NDSEVNRV9QUkVGRVJFTkNFX0NPTkZJR19LRVkgPSBcImF1dGhfc2NoZW1lX3ByZWZlcmVuY2VcIjtcbmNvbnN0IE5PREVfQVVUSF9TQ0hFTUVfUFJFRkVSRU5DRV9PUFRJT05TID0ge1xuICAgIGVudmlyb25tZW50VmFyaWFibGVTZWxlY3RvcjogKGVudiwgb3B0aW9ucykgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucz8uc2lnbmluZ05hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlYXJlclRva2VuS2V5ID0gZ2V0QmVhcmVyVG9rZW5FbnZLZXkob3B0aW9ucy5zaWduaW5nTmFtZSk7XG4gICAgICAgICAgICBpZiAoYmVhcmVyVG9rZW5LZXkgaW4gZW52KVxuICAgICAgICAgICAgICAgIHJldHVybiBbXCJodHRwQmVhcmVyQXV0aFwiXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShOT0RFX0FVVEhfU0NIRU1FX1BSRUZFUkVOQ0VfRU5WX0tFWSBpbiBlbnYpKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGdldEFycmF5Rm9yQ29tbWFTZXBhcmF0ZWRTdHJpbmcoZW52W05PREVfQVVUSF9TQ0hFTUVfUFJFRkVSRU5DRV9FTlZfS0VZXSk7XG4gICAgfSxcbiAgICBjb25maWdGaWxlU2VsZWN0b3I6IChwcm9maWxlKSA9PiB7XG4gICAgICAgIGlmICghKE5PREVfQVVUSF9TQ0hFTUVfUFJFRkVSRU5DRV9DT05GSUdfS0VZIGluIHByb2ZpbGUpKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGdldEFycmF5Rm9yQ29tbWFTZXBhcmF0ZWRTdHJpbmcocHJvZmlsZVtOT0RFX0FVVEhfU0NIRU1FX1BSRUZFUkVOQ0VfQ09ORklHX0tFWV0pO1xuICAgIH0sXG4gICAgZGVmYXVsdDogW10sXG59O1xuXG5jb25zdCByZXNvbHZlQXdzU2RrU2lnVjRBQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICAgIGNvbmZpZy5zaWd2NGFTaWduaW5nUmVnaW9uU2V0ID0gY29yZS5ub3JtYWxpemVQcm92aWRlcihjb25maWcuc2lndjRhU2lnbmluZ1JlZ2lvblNldCk7XG4gICAgcmV0dXJuIGNvbmZpZztcbn07XG5jb25zdCBOT0RFX1NJR1Y0QV9DT05GSUdfT1BUSU9OUyA9IHtcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlU2VsZWN0b3IoZW52KSB7XG4gICAgICAgIGlmIChlbnYuQVdTX1NJR1Y0QV9TSUdOSU5HX1JFR0lPTl9TRVQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnYuQVdTX1NJR1Y0QV9TSUdOSU5HX1JFR0lPTl9TRVQuc3BsaXQoXCIsXCIpLm1hcCgoXykgPT4gXy50cmltKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLlByb3ZpZGVyRXJyb3IoXCJBV1NfU0lHVjRBX1NJR05JTkdfUkVHSU9OX1NFVCBub3Qgc2V0IGluIGVudi5cIiwge1xuICAgICAgICAgICAgdHJ5TmV4dExpbms6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY29uZmlnRmlsZVNlbGVjdG9yKHByb2ZpbGUpIHtcbiAgICAgICAgaWYgKHByb2ZpbGUuc2lndjRhX3NpZ25pbmdfcmVnaW9uX3NldCkge1xuICAgICAgICAgICAgcmV0dXJuIChwcm9maWxlLnNpZ3Y0YV9zaWduaW5nX3JlZ2lvbl9zZXQgPz8gXCJcIikuc3BsaXQoXCIsXCIpLm1hcCgoXykgPT4gXy50cmltKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLlByb3ZpZGVyRXJyb3IoXCJzaWd2NGFfc2lnbmluZ19yZWdpb25fc2V0IG5vdCBzZXQgaW4gcHJvZmlsZS5cIiwge1xuICAgICAgICAgICAgdHJ5TmV4dExpbms6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxufTtcblxuY29uc3QgcmVzb2x2ZUF3c1Nka1NpZ1Y0Q29uZmlnID0gKGNvbmZpZykgPT4ge1xuICAgIGxldCBpbnB1dENyZWRlbnRpYWxzID0gY29uZmlnLmNyZWRlbnRpYWxzO1xuICAgIGxldCBpc1VzZXJTdXBwbGllZCA9ICEhY29uZmlnLmNyZWRlbnRpYWxzO1xuICAgIGxldCByZXNvbHZlZENyZWRlbnRpYWxzID0gdW5kZWZpbmVkO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25maWcsIFwiY3JlZGVudGlhbHNcIiwge1xuICAgICAgICBzZXQoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgICAgIGlmIChjcmVkZW50aWFscyAmJiBjcmVkZW50aWFscyAhPT0gaW5wdXRDcmVkZW50aWFscyAmJiBjcmVkZW50aWFscyAhPT0gcmVzb2x2ZWRDcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgIGlzVXNlclN1cHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlucHV0Q3JlZGVudGlhbHMgPSBjcmVkZW50aWFscztcbiAgICAgICAgICAgIGNvbnN0IG1lbW9pemVkUHJvdmlkZXIgPSBub3JtYWxpemVDcmVkZW50aWFsUHJvdmlkZXIoY29uZmlnLCB7XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IGlucHV0Q3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcjogY29uZmlnLmNyZWRlbnRpYWxEZWZhdWx0UHJvdmlkZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kUHJvdmlkZXIgPSBiaW5kQ2FsbGVyQ29uZmlnKGNvbmZpZywgbWVtb2l6ZWRQcm92aWRlcik7XG4gICAgICAgICAgICBpZiAoaXNVc2VyU3VwcGxpZWQgJiYgIWJvdW5kUHJvdmlkZXIuYXR0cmlidXRlZCkge1xuICAgICAgICAgICAgICAgIHJlc29sdmVkQ3JlZGVudGlhbHMgPSBhc3luYyAob3B0aW9ucykgPT4gYm91bmRQcm92aWRlcihvcHRpb25zKS50aGVuKChjcmVkcykgPT4gY2xpZW50LnNldENyZWRlbnRpYWxGZWF0dXJlKGNyZWRzLCBcIkNSRURFTlRJQUxTX0NPREVcIiwgXCJlXCIpKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlZENyZWRlbnRpYWxzLm1lbW9pemVkID0gYm91bmRQcm92aWRlci5tZW1vaXplZDtcbiAgICAgICAgICAgICAgICByZXNvbHZlZENyZWRlbnRpYWxzLmNvbmZpZ0JvdW5kID0gYm91bmRQcm92aWRlci5jb25maWdCb3VuZDtcbiAgICAgICAgICAgICAgICByZXNvbHZlZENyZWRlbnRpYWxzLmF0dHJpYnV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRDcmVkZW50aWFscyA9IGJvdW5kUHJvdmlkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZENyZWRlbnRpYWxzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgY29uZmlnLmNyZWRlbnRpYWxzID0gaW5wdXRDcmVkZW50aWFscztcbiAgICBjb25zdCB7IHNpZ25pbmdFc2NhcGVQYXRoID0gdHJ1ZSwgc3lzdGVtQ2xvY2tPZmZzZXQgPSBjb25maWcuc3lzdGVtQ2xvY2tPZmZzZXQgfHwgMCwgc2hhMjU2LCB9ID0gY29uZmlnO1xuICAgIGxldCBzaWduZXI7XG4gICAgaWYgKGNvbmZpZy5zaWduZXIpIHtcbiAgICAgICAgc2lnbmVyID0gY29yZS5ub3JtYWxpemVQcm92aWRlcihjb25maWcuc2lnbmVyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29uZmlnLnJlZ2lvbkluZm9Qcm92aWRlcikge1xuICAgICAgICBzaWduZXIgPSAoKSA9PiBjb3JlLm5vcm1hbGl6ZVByb3ZpZGVyKGNvbmZpZy5yZWdpb24pKClcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIChyZWdpb24pID0+IFtcbiAgICAgICAgICAgIChhd2FpdCBjb25maWcucmVnaW9uSW5mb1Byb3ZpZGVyKHJlZ2lvbiwge1xuICAgICAgICAgICAgICAgIHVzZUZpcHNFbmRwb2ludDogYXdhaXQgY29uZmlnLnVzZUZpcHNFbmRwb2ludCgpLFxuICAgICAgICAgICAgICAgIHVzZUR1YWxzdGFja0VuZHBvaW50OiBhd2FpdCBjb25maWcudXNlRHVhbHN0YWNrRW5kcG9pbnQoKSxcbiAgICAgICAgICAgIH0pKSB8fCB7fSxcbiAgICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgXSlcbiAgICAgICAgICAgIC50aGVuKChbcmVnaW9uSW5mbywgcmVnaW9uXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzaWduaW5nUmVnaW9uLCBzaWduaW5nU2VydmljZSB9ID0gcmVnaW9uSW5mbztcbiAgICAgICAgICAgIGNvbmZpZy5zaWduaW5nUmVnaW9uID0gY29uZmlnLnNpZ25pbmdSZWdpb24gfHwgc2lnbmluZ1JlZ2lvbiB8fCByZWdpb247XG4gICAgICAgICAgICBjb25maWcuc2lnbmluZ05hbWUgPSBjb25maWcuc2lnbmluZ05hbWUgfHwgc2lnbmluZ1NlcnZpY2UgfHwgY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IGNvbmZpZy5jcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICByZWdpb246IGNvbmZpZy5zaWduaW5nUmVnaW9uLFxuICAgICAgICAgICAgICAgIHNlcnZpY2U6IGNvbmZpZy5zaWduaW5nTmFtZSxcbiAgICAgICAgICAgICAgICBzaGEyNTYsXG4gICAgICAgICAgICAgICAgdXJpRXNjYXBlUGF0aDogc2lnbmluZ0VzY2FwZVBhdGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgU2lnbmVyQ3RvciA9IGNvbmZpZy5zaWduZXJDb25zdHJ1Y3RvciB8fCBzaWduYXR1cmVWNC5TaWduYXR1cmVWNDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2lnbmVyQ3RvcihwYXJhbXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNpZ25lciA9IGFzeW5jIChhdXRoU2NoZW1lKSA9PiB7XG4gICAgICAgICAgICBhdXRoU2NoZW1lID0gT2JqZWN0LmFzc2lnbih7fSwge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2lndjRcIixcbiAgICAgICAgICAgICAgICBzaWduaW5nTmFtZTogY29uZmlnLnNpZ25pbmdOYW1lIHx8IGNvbmZpZy5kZWZhdWx0U2lnbmluZ05hbWUsXG4gICAgICAgICAgICAgICAgc2lnbmluZ1JlZ2lvbjogYXdhaXQgY29yZS5ub3JtYWxpemVQcm92aWRlcihjb25maWcucmVnaW9uKSgpLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgICAgfSwgYXV0aFNjaGVtZSk7XG4gICAgICAgICAgICBjb25zdCBzaWduaW5nUmVnaW9uID0gYXV0aFNjaGVtZS5zaWduaW5nUmVnaW9uO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmluZ1NlcnZpY2UgPSBhdXRoU2NoZW1lLnNpZ25pbmdOYW1lO1xuICAgICAgICAgICAgY29uZmlnLnNpZ25pbmdSZWdpb24gPSBjb25maWcuc2lnbmluZ1JlZ2lvbiB8fCBzaWduaW5nUmVnaW9uO1xuICAgICAgICAgICAgY29uZmlnLnNpZ25pbmdOYW1lID0gY29uZmlnLnNpZ25pbmdOYW1lIHx8IHNpZ25pbmdTZXJ2aWNlIHx8IGNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBjb25maWcuY3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgcmVnaW9uOiBjb25maWcuc2lnbmluZ1JlZ2lvbixcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiBjb25maWcuc2lnbmluZ05hbWUsXG4gICAgICAgICAgICAgICAgc2hhMjU2LFxuICAgICAgICAgICAgICAgIHVyaUVzY2FwZVBhdGg6IHNpZ25pbmdFc2NhcGVQYXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IFNpZ25lckN0b3IgPSBjb25maWcuc2lnbmVyQ29uc3RydWN0b3IgfHwgc2lnbmF0dXJlVjQuU2lnbmF0dXJlVjQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpZ25lckN0b3IocGFyYW1zKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWRDb25maWcgPSBPYmplY3QuYXNzaWduKGNvbmZpZywge1xuICAgICAgICBzeXN0ZW1DbG9ja09mZnNldCxcbiAgICAgICAgc2lnbmluZ0VzY2FwZVBhdGgsXG4gICAgICAgIHNpZ25lcixcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzb2x2ZWRDb25maWc7XG59O1xuY29uc3QgcmVzb2x2ZUFXU1NES1NpZ1Y0Q29uZmlnID0gcmVzb2x2ZUF3c1Nka1NpZ1Y0Q29uZmlnO1xuZnVuY3Rpb24gbm9ybWFsaXplQ3JlZGVudGlhbFByb3ZpZGVyKGNvbmZpZywgeyBjcmVkZW50aWFscywgY3JlZGVudGlhbERlZmF1bHRQcm92aWRlciwgfSkge1xuICAgIGxldCBjcmVkZW50aWFsc1Byb3ZpZGVyO1xuICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICBpZiAoIWNyZWRlbnRpYWxzPy5tZW1vaXplZCkge1xuICAgICAgICAgICAgY3JlZGVudGlhbHNQcm92aWRlciA9IGNvcmUubWVtb2l6ZUlkZW50aXR5UHJvdmlkZXIoY3JlZGVudGlhbHMsIGNvcmUuaXNJZGVudGl0eUV4cGlyZWQsIGNvcmUuZG9lc0lkZW50aXR5UmVxdWlyZVJlZnJlc2gpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3JlZGVudGlhbHNQcm92aWRlciA9IGNyZWRlbnRpYWxzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcikge1xuICAgICAgICAgICAgY3JlZGVudGlhbHNQcm92aWRlciA9IGNvcmUubm9ybWFsaXplUHJvdmlkZXIoY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcihPYmplY3QuYXNzaWduKHt9LCBjb25maWcsIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDbGllbnRDb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjcmVkZW50aWFsc1Byb3ZpZGVyID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkBhd3Mtc2RrL2NvcmU6OnJlc29sdmVBd3NTZGtTaWdWNENvbmZpZyAtIGBjcmVkZW50aWFsc2Agbm90IHByb3ZpZGVkIGFuZCBubyBjcmVkZW50aWFsRGVmYXVsdFByb3ZpZGVyIHdhcyBjb25maWd1cmVkLlwiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlZGVudGlhbHNQcm92aWRlci5tZW1vaXplZCA9IHRydWU7XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzUHJvdmlkZXI7XG59XG5mdW5jdGlvbiBiaW5kQ2FsbGVyQ29uZmlnKGNvbmZpZywgY3JlZGVudGlhbHNQcm92aWRlcikge1xuICAgIGlmIChjcmVkZW50aWFsc1Byb3ZpZGVyLmNvbmZpZ0JvdW5kKSB7XG4gICAgICAgIHJldHVybiBjcmVkZW50aWFsc1Byb3ZpZGVyO1xuICAgIH1cbiAgICBjb25zdCBmbiA9IGFzeW5jIChvcHRpb25zKSA9PiBjcmVkZW50aWFsc1Byb3ZpZGVyKHsgLi4ub3B0aW9ucywgY2FsbGVyQ2xpZW50Q29uZmlnOiBjb25maWcgfSk7XG4gICAgZm4ubWVtb2l6ZWQgPSBjcmVkZW50aWFsc1Byb3ZpZGVyLm1lbW9pemVkO1xuICAgIGZuLmNvbmZpZ0JvdW5kID0gdHJ1ZTtcbiAgICByZXR1cm4gZm47XG59XG5cbmV4cG9ydHMuQVdTU0RLU2lnVjRTaWduZXIgPSBBV1NTREtTaWdWNFNpZ25lcjtcbmV4cG9ydHMuQXdzU2RrU2lnVjRBU2lnbmVyID0gQXdzU2RrU2lnVjRBU2lnbmVyO1xuZXhwb3J0cy5Bd3NTZGtTaWdWNFNpZ25lciA9IEF3c1Nka1NpZ1Y0U2lnbmVyO1xuZXhwb3J0cy5OT0RFX0FVVEhfU0NIRU1FX1BSRUZFUkVOQ0VfT1BUSU9OUyA9IE5PREVfQVVUSF9TQ0hFTUVfUFJFRkVSRU5DRV9PUFRJT05TO1xuZXhwb3J0cy5OT0RFX1NJR1Y0QV9DT05GSUdfT1BUSU9OUyA9IE5PREVfU0lHVjRBX0NPTkZJR19PUFRJT05TO1xuZXhwb3J0cy5nZXRCZWFyZXJUb2tlbkVudktleSA9IGdldEJlYXJlclRva2VuRW52S2V5O1xuZXhwb3J0cy5yZXNvbHZlQVdTU0RLU2lnVjRDb25maWcgPSByZXNvbHZlQVdTU0RLU2lnVjRDb25maWc7XG5leHBvcnRzLnJlc29sdmVBd3NTZGtTaWdWNEFDb25maWcgPSByZXNvbHZlQXdzU2RrU2lnVjRBQ29uZmlnO1xuZXhwb3J0cy5yZXNvbHZlQXdzU2RrU2lnVjRDb25maWcgPSByZXNvbHZlQXdzU2RrU2lnVjRDb25maWc7XG5leHBvcnRzLnZhbGlkYXRlU2lnbmluZ1Byb3BlcnRpZXMgPSB2YWxpZGF0ZVNpZ25pbmdQcm9wZXJ0aWVzO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBjbGllbnQgPSByZXF1aXJlKCdAYXdzLXNkay9jb3JlL2NsaWVudCcpO1xudmFyIGh0dHBBdXRoU2NoZW1lcyA9IHJlcXVpcmUoJ0Bhd3Mtc2RrL2NvcmUvaHR0cEF1dGhTY2hlbWVzJyk7XG52YXIgcHJvcGVydHlQcm92aWRlciA9IHJlcXVpcmUoJ0BzbWl0aHkvcHJvcGVydHktcHJvdmlkZXInKTtcbnZhciBzaGFyZWRJbmlGaWxlTG9hZGVyID0gcmVxdWlyZSgnQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyJyk7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xuXG5jb25zdCBmcm9tRW52U2lnbmluZ05hbWUgPSAoeyBsb2dnZXIsIHNpZ25pbmdOYW1lIH0gPSB7fSkgPT4gYXN5bmMgKCkgPT4ge1xuICAgIGxvZ2dlcj8uZGVidWc/LihcIkBhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycyAtIGZyb21FbnZTaWduaW5nTmFtZVwiKTtcbiAgICBpZiAoIXNpZ25pbmdOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLlRva2VuUHJvdmlkZXJFcnJvcihcIlBsZWFzZSBwYXNzICdzaWduaW5nTmFtZScgdG8gY29tcHV0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBrZXlcIiwgeyBsb2dnZXIgfSk7XG4gICAgfVxuICAgIGNvbnN0IGJlYXJlclRva2VuS2V5ID0gaHR0cEF1dGhTY2hlbWVzLmdldEJlYXJlclRva2VuRW52S2V5KHNpZ25pbmdOYW1lKTtcbiAgICBpZiAoIShiZWFyZXJUb2tlbktleSBpbiBwcm9jZXNzLmVudikpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5UHJvdmlkZXIuVG9rZW5Qcm92aWRlckVycm9yKGBUb2tlbiBub3QgcHJlc2VudCBpbiAnJHtiZWFyZXJUb2tlbktleX0nIGVudmlyb25tZW50IHZhcmlhYmxlYCwgeyBsb2dnZXIgfSk7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0geyB0b2tlbjogcHJvY2Vzcy5lbnZbYmVhcmVyVG9rZW5LZXldIH07XG4gICAgY2xpZW50LnNldFRva2VuRmVhdHVyZSh0b2tlbiwgXCJCRUFSRVJfU0VSVklDRV9FTlZfVkFSU1wiLCBcIjNcIik7XG4gICAgcmV0dXJuIHRva2VuO1xufTtcblxuY29uc3QgRVhQSVJFX1dJTkRPV19NUyA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBSRUZSRVNIX01FU1NBR0UgPSBgVG8gcmVmcmVzaCB0aGlzIFNTTyBzZXNzaW9uIHJ1biAnYXdzIHNzbyBsb2dpbicgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwcm9maWxlLmA7XG5cbmNvbnN0IGdldFNzb09pZGNDbGllbnQgPSBhc3luYyAoc3NvUmVnaW9uLCBpbml0ID0ge30pID0+IHtcbiAgICBjb25zdCB7IFNTT09JRENDbGllbnQgfSA9IGF3YWl0IGltcG9ydCgnQGF3cy1zZGsvbmVzdGVkLWNsaWVudHMvc3NvLW9pZGMnKTtcbiAgICBjb25zdCBjb2FsZXNjZSA9IChwcm9wKSA9PiBpbml0LmNsaWVudENvbmZpZz8uW3Byb3BdID8/IGluaXQucGFyZW50Q2xpZW50Q29uZmlnPy5bcHJvcF07XG4gICAgY29uc3Qgc3NvT2lkY0NsaWVudCA9IG5ldyBTU09PSURDQ2xpZW50KE9iamVjdC5hc3NpZ24oe30sIGluaXQuY2xpZW50Q29uZmlnID8/IHt9LCB7XG4gICAgICAgIHJlZ2lvbjogc3NvUmVnaW9uID8/IGluaXQuY2xpZW50Q29uZmlnPy5yZWdpb24sXG4gICAgICAgIGxvZ2dlcjogY29hbGVzY2UoXCJsb2dnZXJcIiksXG4gICAgICAgIHVzZXJBZ2VudEFwcElkOiBjb2FsZXNjZShcInVzZXJBZ2VudEFwcElkXCIpLFxuICAgIH0pKTtcbiAgICByZXR1cm4gc3NvT2lkY0NsaWVudDtcbn07XG5cbmNvbnN0IGdldE5ld1Nzb09pZGNUb2tlbiA9IGFzeW5jIChzc29Ub2tlbiwgc3NvUmVnaW9uLCBpbml0ID0ge30pID0+IHtcbiAgICBjb25zdCB7IENyZWF0ZVRva2VuQ29tbWFuZCB9ID0gYXdhaXQgaW1wb3J0KCdAYXdzLXNkay9uZXN0ZWQtY2xpZW50cy9zc28tb2lkYycpO1xuICAgIGNvbnN0IHNzb09pZGNDbGllbnQgPSBhd2FpdCBnZXRTc29PaWRjQ2xpZW50KHNzb1JlZ2lvbiwgaW5pdCk7XG4gICAgcmV0dXJuIHNzb09pZGNDbGllbnQuc2VuZChuZXcgQ3JlYXRlVG9rZW5Db21tYW5kKHtcbiAgICAgICAgY2xpZW50SWQ6IHNzb1Rva2VuLmNsaWVudElkLFxuICAgICAgICBjbGllbnRTZWNyZXQ6IHNzb1Rva2VuLmNsaWVudFNlY3JldCxcbiAgICAgICAgcmVmcmVzaFRva2VuOiBzc29Ub2tlbi5yZWZyZXNoVG9rZW4sXG4gICAgICAgIGdyYW50VHlwZTogXCJyZWZyZXNoX3Rva2VuXCIsXG4gICAgfSkpO1xufTtcblxuY29uc3QgdmFsaWRhdGVUb2tlbkV4cGlyeSA9ICh0b2tlbikgPT4ge1xuICAgIGlmICh0b2tlbi5leHBpcmF0aW9uICYmIHRva2VuLmV4cGlyYXRpb24uZ2V0VGltZSgpIDwgRGF0ZS5ub3coKSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlQcm92aWRlci5Ub2tlblByb3ZpZGVyRXJyb3IoYFRva2VuIGlzIGV4cGlyZWQuICR7UkVGUkVTSF9NRVNTQUdFfWAsIGZhbHNlKTtcbiAgICB9XG59O1xuXG5jb25zdCB2YWxpZGF0ZVRva2VuS2V5ID0gKGtleSwgdmFsdWUsIGZvclJlZnJlc2ggPSBmYWxzZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5UHJvdmlkZXIuVG9rZW5Qcm92aWRlckVycm9yKGBWYWx1ZSBub3QgcHJlc2VudCBmb3IgJyR7a2V5fScgaW4gU1NPIFRva2VuJHtmb3JSZWZyZXNoID8gXCIuIENhbm5vdCByZWZyZXNoXCIgOiBcIlwifS4gJHtSRUZSRVNIX01FU1NBR0V9YCwgZmFsc2UpO1xuICAgIH1cbn07XG5cbmNvbnN0IHsgd3JpdGVGaWxlIH0gPSBmcy5wcm9taXNlcztcbmNvbnN0IHdyaXRlU1NPVG9rZW5Ub0ZpbGUgPSAoaWQsIHNzb1Rva2VuKSA9PiB7XG4gICAgY29uc3QgdG9rZW5GaWxlcGF0aCA9IHNoYXJlZEluaUZpbGVMb2FkZXIuZ2V0U1NPVG9rZW5GaWxlcGF0aChpZCk7XG4gICAgY29uc3QgdG9rZW5TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzc29Ub2tlbiwgbnVsbCwgMik7XG4gICAgcmV0dXJuIHdyaXRlRmlsZSh0b2tlbkZpbGVwYXRoLCB0b2tlblN0cmluZyk7XG59O1xuXG5jb25zdCBsYXN0UmVmcmVzaEF0dGVtcHRUaW1lID0gbmV3IERhdGUoMCk7XG5jb25zdCBmcm9tU3NvID0gKF9pbml0ID0ge30pID0+IGFzeW5jICh7IGNhbGxlckNsaWVudENvbmZpZyB9ID0ge30pID0+IHtcbiAgICBjb25zdCBpbml0ID0ge1xuICAgICAgICAuLi5faW5pdCxcbiAgICAgICAgcGFyZW50Q2xpZW50Q29uZmlnOiB7XG4gICAgICAgICAgICAuLi5jYWxsZXJDbGllbnRDb25maWcsXG4gICAgICAgICAgICAuLi5faW5pdC5wYXJlbnRDbGllbnRDb25maWcsXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBpbml0LmxvZ2dlcj8uZGVidWcoXCJAYXdzLXNkay90b2tlbi1wcm92aWRlcnMgLSBmcm9tU3NvXCIpO1xuICAgIGNvbnN0IHByb2ZpbGVzID0gYXdhaXQgc2hhcmVkSW5pRmlsZUxvYWRlci5wYXJzZUtub3duRmlsZXMoaW5pdCk7XG4gICAgY29uc3QgcHJvZmlsZU5hbWUgPSBzaGFyZWRJbmlGaWxlTG9hZGVyLmdldFByb2ZpbGVOYW1lKHtcbiAgICAgICAgcHJvZmlsZTogaW5pdC5wcm9maWxlID8/IGNhbGxlckNsaWVudENvbmZpZz8ucHJvZmlsZSxcbiAgICB9KTtcbiAgICBjb25zdCBwcm9maWxlID0gcHJvZmlsZXNbcHJvZmlsZU5hbWVdO1xuICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlQcm92aWRlci5Ub2tlblByb3ZpZGVyRXJyb3IoYFByb2ZpbGUgJyR7cHJvZmlsZU5hbWV9JyBjb3VsZCBub3QgYmUgZm91bmQgaW4gc2hhcmVkIGNyZWRlbnRpYWxzIGZpbGUuYCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmICghcHJvZmlsZVtcInNzb19zZXNzaW9uXCJdKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLlRva2VuUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAnJHtwcm9maWxlTmFtZX0nIGlzIG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgJ3Nzb19zZXNzaW9uJy5gKTtcbiAgICB9XG4gICAgY29uc3Qgc3NvU2Vzc2lvbk5hbWUgPSBwcm9maWxlW1wic3NvX3Nlc3Npb25cIl07XG4gICAgY29uc3Qgc3NvU2Vzc2lvbnMgPSBhd2FpdCBzaGFyZWRJbmlGaWxlTG9hZGVyLmxvYWRTc29TZXNzaW9uRGF0YShpbml0KTtcbiAgICBjb25zdCBzc29TZXNzaW9uID0gc3NvU2Vzc2lvbnNbc3NvU2Vzc2lvbk5hbWVdO1xuICAgIGlmICghc3NvU2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlQcm92aWRlci5Ub2tlblByb3ZpZGVyRXJyb3IoYFNzbyBzZXNzaW9uICcke3Nzb1Nlc3Npb25OYW1lfScgY291bGQgbm90IGJlIGZvdW5kIGluIHNoYXJlZCBjcmVkZW50aWFscyBmaWxlLmAsIGZhbHNlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzc29TZXNzaW9uUmVxdWlyZWRLZXkgb2YgW1wic3NvX3N0YXJ0X3VybFwiLCBcInNzb19yZWdpb25cIl0pIHtcbiAgICAgICAgaWYgKCFzc29TZXNzaW9uW3Nzb1Nlc3Npb25SZXF1aXJlZEtleV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLlRva2VuUHJvdmlkZXJFcnJvcihgU3NvIHNlc3Npb24gJyR7c3NvU2Vzc2lvbk5hbWV9JyBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICcke3Nzb1Nlc3Npb25SZXF1aXJlZEtleX0nLmAsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzc29TZXNzaW9uW1wic3NvX3N0YXJ0X3VybFwiXTtcbiAgICBjb25zdCBzc29SZWdpb24gPSBzc29TZXNzaW9uW1wic3NvX3JlZ2lvblwiXTtcbiAgICBsZXQgc3NvVG9rZW47XG4gICAgdHJ5IHtcbiAgICAgICAgc3NvVG9rZW4gPSBhd2FpdCBzaGFyZWRJbmlGaWxlTG9hZGVyLmdldFNTT1Rva2VuRnJvbUZpbGUoc3NvU2Vzc2lvbk5hbWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlQcm92aWRlci5Ub2tlblByb3ZpZGVyRXJyb3IoYFRoZSBTU08gc2Vzc2lvbiB0b2tlbiBhc3NvY2lhdGVkIHdpdGggcHJvZmlsZT0ke3Byb2ZpbGVOYW1lfSB3YXMgbm90IGZvdW5kIG9yIGlzIGludmFsaWQuICR7UkVGUkVTSF9NRVNTQUdFfWAsIGZhbHNlKTtcbiAgICB9XG4gICAgdmFsaWRhdGVUb2tlbktleShcImFjY2Vzc1Rva2VuXCIsIHNzb1Rva2VuLmFjY2Vzc1Rva2VuKTtcbiAgICB2YWxpZGF0ZVRva2VuS2V5KFwiZXhwaXJlc0F0XCIsIHNzb1Rva2VuLmV4cGlyZXNBdCk7XG4gICAgY29uc3QgeyBhY2Nlc3NUb2tlbiwgZXhwaXJlc0F0IH0gPSBzc29Ub2tlbjtcbiAgICBjb25zdCBleGlzdGluZ1Rva2VuID0geyB0b2tlbjogYWNjZXNzVG9rZW4sIGV4cGlyYXRpb246IG5ldyBEYXRlKGV4cGlyZXNBdCkgfTtcbiAgICBpZiAoZXhpc3RpbmdUb2tlbi5leHBpcmF0aW9uLmdldFRpbWUoKSAtIERhdGUubm93KCkgPiBFWFBJUkVfV0lORE9XX01TKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1Rva2VuO1xuICAgIH1cbiAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RSZWZyZXNoQXR0ZW1wdFRpbWUuZ2V0VGltZSgpIDwgMzAgKiAxMDAwKSB7XG4gICAgICAgIHZhbGlkYXRlVG9rZW5FeHBpcnkoZXhpc3RpbmdUb2tlbik7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1Rva2VuO1xuICAgIH1cbiAgICB2YWxpZGF0ZVRva2VuS2V5KFwiY2xpZW50SWRcIiwgc3NvVG9rZW4uY2xpZW50SWQsIHRydWUpO1xuICAgIHZhbGlkYXRlVG9rZW5LZXkoXCJjbGllbnRTZWNyZXRcIiwgc3NvVG9rZW4uY2xpZW50U2VjcmV0LCB0cnVlKTtcbiAgICB2YWxpZGF0ZVRva2VuS2V5KFwicmVmcmVzaFRva2VuXCIsIHNzb1Rva2VuLnJlZnJlc2hUb2tlbiwgdHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgbGFzdFJlZnJlc2hBdHRlbXB0VGltZS5zZXRUaW1lKERhdGUubm93KCkpO1xuICAgICAgICBjb25zdCBuZXdTc29PaWRjVG9rZW4gPSBhd2FpdCBnZXROZXdTc29PaWRjVG9rZW4oc3NvVG9rZW4sIHNzb1JlZ2lvbiwgaW5pdCk7XG4gICAgICAgIHZhbGlkYXRlVG9rZW5LZXkoXCJhY2Nlc3NUb2tlblwiLCBuZXdTc29PaWRjVG9rZW4uYWNjZXNzVG9rZW4pO1xuICAgICAgICB2YWxpZGF0ZVRva2VuS2V5KFwiZXhwaXJlc0luXCIsIG5ld1Nzb09pZGNUb2tlbi5leHBpcmVzSW4pO1xuICAgICAgICBjb25zdCBuZXdUb2tlbkV4cGlyYXRpb24gPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgbmV3U3NvT2lkY1Rva2VuLmV4cGlyZXNJbiAqIDEwMDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVTU09Ub2tlblRvRmlsZShzc29TZXNzaW9uTmFtZSwge1xuICAgICAgICAgICAgICAgIC4uLnNzb1Rva2VuLFxuICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBuZXdTc29PaWRjVG9rZW4uYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgZXhwaXJlc0F0OiBuZXdUb2tlbkV4cGlyYXRpb24udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICByZWZyZXNoVG9rZW46IG5ld1Nzb09pZGNUb2tlbi5yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW46IG5ld1Nzb09pZGNUb2tlbi5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIGV4cGlyYXRpb246IG5ld1Rva2VuRXhwaXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHZhbGlkYXRlVG9rZW5FeHBpcnkoZXhpc3RpbmdUb2tlbik7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1Rva2VuO1xuICAgIH1cbn07XG5cbmNvbnN0IGZyb21TdGF0aWMgPSAoeyB0b2tlbiwgbG9nZ2VyIH0pID0+IGFzeW5jICgpID0+IHtcbiAgICBsb2dnZXI/LmRlYnVnKFwiQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzIC0gZnJvbVN0YXRpY1wiKTtcbiAgICBpZiAoIXRva2VuIHx8ICF0b2tlbi50b2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlQcm92aWRlci5Ub2tlblByb3ZpZGVyRXJyb3IoYFBsZWFzZSBwYXNzIGEgdmFsaWQgdG9rZW4gdG8gZnJvbVN0YXRpY2AsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xufTtcblxuY29uc3Qgbm9kZVByb3ZpZGVyID0gKGluaXQgPSB7fSkgPT4gcHJvcGVydHlQcm92aWRlci5tZW1vaXplKHByb3BlcnR5UHJvdmlkZXIuY2hhaW4oZnJvbVNzbyhpbml0KSwgYXN5bmMgKCkgPT4ge1xuICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLlRva2VuUHJvdmlkZXJFcnJvcihcIkNvdWxkIG5vdCBsb2FkIHRva2VuIGZyb20gYW55IHByb3ZpZGVyc1wiLCBmYWxzZSk7XG59KSwgKHRva2VuKSA9PiB0b2tlbi5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQgJiYgdG9rZW4uZXhwaXJhdGlvbi5nZXRUaW1lKCkgLSBEYXRlLm5vdygpIDwgMzAwMDAwLCAodG9rZW4pID0+IHRva2VuLmV4cGlyYXRpb24gIT09IHVuZGVmaW5lZCk7XG5cbmV4cG9ydHMuZnJvbUVudlNpZ25pbmdOYW1lID0gZnJvbUVudlNpZ25pbmdOYW1lO1xuZXhwb3J0cy5mcm9tU3NvID0gZnJvbVNzbztcbmV4cG9ydHMuZnJvbVN0YXRpYyA9IGZyb21TdGF0aWM7XG5leHBvcnRzLm5vZGVQcm92aWRlciA9IG5vZGVQcm92aWRlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVIdHRwQXV0aFNjaGVtZUNvbmZpZyA9IGV4cG9ydHMuZGVmYXVsdFNTT0h0dHBBdXRoU2NoZW1lUHJvdmlkZXIgPSBleHBvcnRzLmRlZmF1bHRTU09IdHRwQXV0aFNjaGVtZVBhcmFtZXRlcnNQcm92aWRlciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jb3JlXCIpO1xuY29uc3QgdXRpbF9taWRkbGV3YXJlXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmVcIik7XG5jb25zdCBkZWZhdWx0U1NPSHR0cEF1dGhTY2hlbWVQYXJhbWV0ZXJzUHJvdmlkZXIgPSBhc3luYyAoY29uZmlnLCBjb250ZXh0LCBpbnB1dCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIG9wZXJhdGlvbjogKDAsIHV0aWxfbWlkZGxld2FyZV8xLmdldFNtaXRoeUNvbnRleHQpKGNvbnRleHQpLm9wZXJhdGlvbixcbiAgICAgICAgcmVnaW9uOiAoYXdhaXQgKDAsIHV0aWxfbWlkZGxld2FyZV8xLm5vcm1hbGl6ZVByb3ZpZGVyKShjb25maWcucmVnaW9uKSgpKSB8fFxuICAgICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHBlY3RlZCBgcmVnaW9uYCB0byBiZSBjb25maWd1cmVkIGZvciBgYXdzLmF1dGgjc2lndjRgXCIpO1xuICAgICAgICAgICAgfSkoKSxcbiAgICB9O1xufTtcbmV4cG9ydHMuZGVmYXVsdFNTT0h0dHBBdXRoU2NoZW1lUGFyYW1ldGVyc1Byb3ZpZGVyID0gZGVmYXVsdFNTT0h0dHBBdXRoU2NoZW1lUGFyYW1ldGVyc1Byb3ZpZGVyO1xuZnVuY3Rpb24gY3JlYXRlQXdzQXV0aFNpZ3Y0SHR0cEF1dGhPcHRpb24oYXV0aFBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWVJZDogXCJhd3MuYXV0aCNzaWd2NFwiLFxuICAgICAgICBzaWduaW5nUHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZTogXCJhd3Nzc29wb3J0YWxcIixcbiAgICAgICAgICAgIHJlZ2lvbjogYXV0aFBhcmFtZXRlcnMucmVnaW9uLFxuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0aWVzRXh0cmFjdG9yOiAoY29uZmlnLCBjb250ZXh0KSA9PiAoe1xuICAgICAgICAgICAgc2lnbmluZ1Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVTbWl0aHlBcGlOb0F1dGhIdHRwQXV0aE9wdGlvbihhdXRoUGFyYW1ldGVycykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtZUlkOiBcInNtaXRoeS5hcGkjbm9BdXRoXCIsXG4gICAgfTtcbn1cbmNvbnN0IGRlZmF1bHRTU09IdHRwQXV0aFNjaGVtZVByb3ZpZGVyID0gKGF1dGhQYXJhbWV0ZXJzKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtdO1xuICAgIHN3aXRjaCAoYXV0aFBhcmFtZXRlcnMub3BlcmF0aW9uKSB7XG4gICAgICAgIGNhc2UgXCJHZXRSb2xlQ3JlZGVudGlhbHNcIjoge1xuICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGNyZWF0ZVNtaXRoeUFwaU5vQXV0aEh0dHBBdXRoT3B0aW9uKGF1dGhQYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiTGlzdEFjY291bnRSb2xlc1wiOiB7XG4gICAgICAgICAgICBvcHRpb25zLnB1c2goY3JlYXRlU21pdGh5QXBpTm9BdXRoSHR0cEF1dGhPcHRpb24oYXV0aFBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJMaXN0QWNjb3VudHNcIjoge1xuICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGNyZWF0ZVNtaXRoeUFwaU5vQXV0aEh0dHBBdXRoT3B0aW9uKGF1dGhQYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiTG9nb3V0XCI6IHtcbiAgICAgICAgICAgIG9wdGlvbnMucHVzaChjcmVhdGVTbWl0aHlBcGlOb0F1dGhIdHRwQXV0aE9wdGlvbihhdXRoUGFyYW1ldGVycykpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGNyZWF0ZUF3c0F1dGhTaWd2NEh0dHBBdXRoT3B0aW9uKGF1dGhQYXJhbWV0ZXJzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59O1xuZXhwb3J0cy5kZWZhdWx0U1NPSHR0cEF1dGhTY2hlbWVQcm92aWRlciA9IGRlZmF1bHRTU09IdHRwQXV0aFNjaGVtZVByb3ZpZGVyO1xuY29uc3QgcmVzb2x2ZUh0dHBBdXRoU2NoZW1lQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZ18wID0gKDAsIGNvcmVfMS5yZXNvbHZlQXdzU2RrU2lnVjRDb25maWcpKGNvbmZpZyk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY29uZmlnXzAsIHtcbiAgICAgICAgYXV0aFNjaGVtZVByZWZlcmVuY2U6ICgwLCB1dGlsX21pZGRsZXdhcmVfMS5ub3JtYWxpemVQcm92aWRlcikoY29uZmlnLmF1dGhTY2hlbWVQcmVmZXJlbmNlID8/IFtdKSxcbiAgICB9KTtcbn07XG5leHBvcnRzLnJlc29sdmVIdHRwQXV0aFNjaGVtZUNvbmZpZyA9IHJlc29sdmVIdHRwQXV0aFNjaGVtZUNvbmZpZztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJ1bGVTZXQgPSB2b2lkIDA7XG5jb25zdCB1ID0gXCJyZXF1aXJlZFwiLCB2ID0gXCJmblwiLCB3ID0gXCJhcmd2XCIsIHggPSBcInJlZlwiO1xuY29uc3QgYSA9IHRydWUsIGIgPSBcImlzU2V0XCIsIGMgPSBcImJvb2xlYW5FcXVhbHNcIiwgZCA9IFwiZXJyb3JcIiwgZSA9IFwiZW5kcG9pbnRcIiwgZiA9IFwidHJlZVwiLCBnID0gXCJQYXJ0aXRpb25SZXN1bHRcIiwgaCA9IFwiZ2V0QXR0clwiLCBpID0geyBbdV06IGZhbHNlLCBcInR5cGVcIjogXCJzdHJpbmdcIiB9LCBqID0geyBbdV06IHRydWUsIFwiZGVmYXVsdFwiOiBmYWxzZSwgXCJ0eXBlXCI6IFwiYm9vbGVhblwiIH0sIGsgPSB7IFt4XTogXCJFbmRwb2ludFwiIH0sIGwgPSB7IFt2XTogYywgW3ddOiBbeyBbeF06IFwiVXNlRklQU1wiIH0sIHRydWVdIH0sIG0gPSB7IFt2XTogYywgW3ddOiBbeyBbeF06IFwiVXNlRHVhbFN0YWNrXCIgfSwgdHJ1ZV0gfSwgbiA9IHt9LCBvID0geyBbdl06IGgsIFt3XTogW3sgW3hdOiBnIH0sIFwic3VwcG9ydHNGSVBTXCJdIH0sIHAgPSB7IFt4XTogZyB9LCBxID0geyBbdl06IGMsIFt3XTogW3RydWUsIHsgW3ZdOiBoLCBbd106IFtwLCBcInN1cHBvcnRzRHVhbFN0YWNrXCJdIH1dIH0sIHIgPSBbbF0sIHMgPSBbbV0sIHQgPSBbeyBbeF06IFwiUmVnaW9uXCIgfV07XG5jb25zdCBfZGF0YSA9IHsgdmVyc2lvbjogXCIxLjBcIiwgcGFyYW1ldGVyczogeyBSZWdpb246IGksIFVzZUR1YWxTdGFjazogaiwgVXNlRklQUzogaiwgRW5kcG9pbnQ6IGkgfSwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt7IFt2XTogYiwgW3ddOiBba10gfV0sIHJ1bGVzOiBbeyBjb25kaXRpb25zOiByLCBlcnJvcjogXCJJbnZhbGlkIENvbmZpZ3VyYXRpb246IEZJUFMgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCB0eXBlOiBkIH0sIHsgY29uZGl0aW9uczogcywgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBEdWFsc3RhY2sgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZFwiLCB0eXBlOiBkIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBrLCBwcm9wZXJ0aWVzOiBuLCBoZWFkZXJzOiBuIH0sIHR5cGU6IGUgfV0sIHR5cGU6IGYgfSwgeyBjb25kaXRpb25zOiBbeyBbdl06IGIsIFt3XTogdCB9XSwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt7IFt2XTogXCJhd3MucGFydGl0aW9uXCIsIFt3XTogdCwgYXNzaWduOiBnIH1dLCBydWxlczogW3sgY29uZGl0aW9uczogW2wsIG1dLCBydWxlczogW3sgY29uZGl0aW9uczogW3sgW3ZdOiBjLCBbd106IFthLCBvXSB9LCBxXSwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3BvcnRhbC5zc28tZmlwcy57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogbiwgaGVhZGVyczogbiB9LCB0eXBlOiBlIH1dLCB0eXBlOiBmIH0sIHsgZXJyb3I6IFwiRklQUyBhbmQgRHVhbFN0YWNrIGFyZSBlbmFibGVkLCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBvbmUgb3IgYm90aFwiLCB0eXBlOiBkIH1dLCB0eXBlOiBmIH0sIHsgY29uZGl0aW9uczogciwgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFt7IFt2XTogYywgW3ddOiBbbywgYV0gfV0sIHJ1bGVzOiBbeyBjb25kaXRpb25zOiBbeyBbdl06IFwic3RyaW5nRXF1YWxzXCIsIFt3XTogW3sgW3ZdOiBoLCBbd106IFtwLCBcIm5hbWVcIl0gfSwgXCJhd3MtdXMtZ292XCJdIH1dLCBlbmRwb2ludDogeyB1cmw6IFwiaHR0cHM6Ly9wb3J0YWwuc3NvLntSZWdpb259LmFtYXpvbmF3cy5jb21cIiwgcHJvcGVydGllczogbiwgaGVhZGVyczogbiB9LCB0eXBlOiBlIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vcG9ydGFsLnNzby1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fVwiLCBwcm9wZXJ0aWVzOiBuLCBoZWFkZXJzOiBuIH0sIHR5cGU6IGUgfV0sIHR5cGU6IGYgfSwgeyBlcnJvcjogXCJGSVBTIGlzIGVuYWJsZWQgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgRklQU1wiLCB0eXBlOiBkIH1dLCB0eXBlOiBmIH0sIHsgY29uZGl0aW9uczogcywgcnVsZXM6IFt7IGNvbmRpdGlvbnM6IFtxXSwgcnVsZXM6IFt7IGVuZHBvaW50OiB7IHVybDogXCJodHRwczovL3BvcnRhbC5zc28ue1JlZ2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9XCIsIHByb3BlcnRpZXM6IG4sIGhlYWRlcnM6IG4gfSwgdHlwZTogZSB9XSwgdHlwZTogZiB9LCB7IGVycm9yOiBcIkR1YWxTdGFjayBpcyBlbmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IER1YWxTdGFja1wiLCB0eXBlOiBkIH1dLCB0eXBlOiBmIH0sIHsgZW5kcG9pbnQ6IHsgdXJsOiBcImh0dHBzOi8vcG9ydGFsLnNzby57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH1cIiwgcHJvcGVydGllczogbiwgaGVhZGVyczogbiB9LCB0eXBlOiBlIH1dLCB0eXBlOiBmIH1dLCB0eXBlOiBmIH0sIHsgZXJyb3I6IFwiSW52YWxpZCBDb25maWd1cmF0aW9uOiBNaXNzaW5nIFJlZ2lvblwiLCB0eXBlOiBkIH1dIH07XG5leHBvcnRzLnJ1bGVTZXQgPSBfZGF0YTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyID0gdm9pZCAwO1xuY29uc3QgdXRpbF9lbmRwb2ludHNfMSA9IHJlcXVpcmUoXCJAYXdzLXNkay91dGlsLWVuZHBvaW50c1wiKTtcbmNvbnN0IHV0aWxfZW5kcG9pbnRzXzIgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLWVuZHBvaW50c1wiKTtcbmNvbnN0IHJ1bGVzZXRfMSA9IHJlcXVpcmUoXCIuL3J1bGVzZXRcIik7XG5jb25zdCBjYWNoZSA9IG5ldyB1dGlsX2VuZHBvaW50c18yLkVuZHBvaW50Q2FjaGUoe1xuICAgIHNpemU6IDUwLFxuICAgIHBhcmFtczogW1wiRW5kcG9pbnRcIiwgXCJSZWdpb25cIiwgXCJVc2VEdWFsU3RhY2tcIiwgXCJVc2VGSVBTXCJdLFxufSk7XG5jb25zdCBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlciA9IChlbmRwb2ludFBhcmFtcywgY29udGV4dCA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGNhY2hlLmdldChlbmRwb2ludFBhcmFtcywgKCkgPT4gKDAsIHV0aWxfZW5kcG9pbnRzXzIucmVzb2x2ZUVuZHBvaW50KShydWxlc2V0XzEucnVsZVNldCwge1xuICAgICAgICBlbmRwb2ludFBhcmFtczogZW5kcG9pbnRQYXJhbXMsXG4gICAgICAgIGxvZ2dlcjogY29udGV4dC5sb2dnZXIsXG4gICAgfSkpO1xufTtcbmV4cG9ydHMuZGVmYXVsdEVuZHBvaW50UmVzb2x2ZXIgPSBkZWZhdWx0RW5kcG9pbnRSZXNvbHZlcjtcbnV0aWxfZW5kcG9pbnRzXzIuY3VzdG9tRW5kcG9pbnRGdW5jdGlvbnMuYXdzID0gdXRpbF9lbmRwb2ludHNfMS5hd3NFbmRwb2ludEZ1bmN0aW9ucztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bnRpbWVDb25maWcgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY29yZVwiKTtcbmNvbnN0IHByb3RvY29sc18xID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NvcmUvcHJvdG9jb2xzXCIpO1xuY29uc3QgY29yZV8yID0gcmVxdWlyZShcIkBzbWl0aHkvY29yZVwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCB1cmxfcGFyc2VyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS91cmwtcGFyc2VyXCIpO1xuY29uc3QgdXRpbF9iYXNlNjRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3V0aWwtYmFzZTY0XCIpO1xuY29uc3QgdXRpbF91dGY4XzEgPSByZXF1aXJlKFwiQHNtaXRoeS91dGlsLXV0ZjhcIik7XG5jb25zdCBodHRwQXV0aFNjaGVtZVByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9hdXRoL2h0dHBBdXRoU2NoZW1lUHJvdmlkZXJcIik7XG5jb25zdCBlbmRwb2ludFJlc29sdmVyXzEgPSByZXF1aXJlKFwiLi9lbmRwb2ludC9lbmRwb2ludFJlc29sdmVyXCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMTktMDYtMTBcIixcbiAgICAgICAgYmFzZTY0RGVjb2RlcjogY29uZmlnPy5iYXNlNjREZWNvZGVyID8/IHV0aWxfYmFzZTY0XzEuZnJvbUJhc2U2NCxcbiAgICAgICAgYmFzZTY0RW5jb2RlcjogY29uZmlnPy5iYXNlNjRFbmNvZGVyID8/IHV0aWxfYmFzZTY0XzEudG9CYXNlNjQsXG4gICAgICAgIGRpc2FibGVIb3N0UHJlZml4OiBjb25maWc/LmRpc2FibGVIb3N0UHJlZml4ID8/IGZhbHNlLFxuICAgICAgICBlbmRwb2ludFByb3ZpZGVyOiBjb25maWc/LmVuZHBvaW50UHJvdmlkZXIgPz8gZW5kcG9pbnRSZXNvbHZlcl8xLmRlZmF1bHRFbmRwb2ludFJlc29sdmVyLFxuICAgICAgICBleHRlbnNpb25zOiBjb25maWc/LmV4dGVuc2lvbnMgPz8gW10sXG4gICAgICAgIGh0dHBBdXRoU2NoZW1lUHJvdmlkZXI6IGNvbmZpZz8uaHR0cEF1dGhTY2hlbWVQcm92aWRlciA/PyBodHRwQXV0aFNjaGVtZVByb3ZpZGVyXzEuZGVmYXVsdFNTT0h0dHBBdXRoU2NoZW1lUHJvdmlkZXIsXG4gICAgICAgIGh0dHBBdXRoU2NoZW1lczogY29uZmlnPy5odHRwQXV0aFNjaGVtZXMgPz8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNjaGVtZUlkOiBcImF3cy5hdXRoI3NpZ3Y0XCIsXG4gICAgICAgICAgICAgICAgaWRlbnRpdHlQcm92aWRlcjogKGlwYykgPT4gaXBjLmdldElkZW50aXR5UHJvdmlkZXIoXCJhd3MuYXV0aCNzaWd2NFwiKSxcbiAgICAgICAgICAgICAgICBzaWduZXI6IG5ldyBjb3JlXzEuQXdzU2RrU2lnVjRTaWduZXIoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2NoZW1lSWQ6IFwic21pdGh5LmFwaSNub0F1dGhcIixcbiAgICAgICAgICAgICAgICBpZGVudGl0eVByb3ZpZGVyOiAoaXBjKSA9PiBpcGMuZ2V0SWRlbnRpdHlQcm92aWRlcihcInNtaXRoeS5hcGkjbm9BdXRoXCIpIHx8IChhc3luYyAoKSA9PiAoe30pKSxcbiAgICAgICAgICAgICAgICBzaWduZXI6IG5ldyBjb3JlXzIuTm9BdXRoU2lnbmVyKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBsb2dnZXI6IGNvbmZpZz8ubG9nZ2VyID8/IG5ldyBzbWl0aHlfY2xpZW50XzEuTm9PcExvZ2dlcigpLFxuICAgICAgICBwcm90b2NvbDogY29uZmlnPy5wcm90b2NvbCA/PyBuZXcgcHJvdG9jb2xzXzEuQXdzUmVzdEpzb25Qcm90b2NvbCh7IGRlZmF1bHROYW1lc3BhY2U6IFwiY29tLmFtYXpvbmF3cy5zc29cIiB9KSxcbiAgICAgICAgc2VydmljZUlkOiBjb25maWc/LnNlcnZpY2VJZCA/PyBcIlNTT1wiLFxuICAgICAgICB1cmxQYXJzZXI6IGNvbmZpZz8udXJsUGFyc2VyID8/IHVybF9wYXJzZXJfMS5wYXJzZVVybCxcbiAgICAgICAgdXRmOERlY29kZXI6IGNvbmZpZz8udXRmOERlY29kZXIgPz8gdXRpbF91dGY4XzEuZnJvbVV0ZjgsXG4gICAgICAgIHV0ZjhFbmNvZGVyOiBjb25maWc/LnV0ZjhFbmNvZGVyID8/IHV0aWxfdXRmOF8xLnRvVXRmOCxcbiAgICB9O1xufTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IGdldFJ1bnRpbWVDb25maWc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdW50aW1lQ29uZmlnID0gdm9pZCAwO1xuY29uc3QgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcbmNvbnN0IHBhY2thZ2VfanNvbl8xID0gdHNsaWJfMS5fX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL3BhY2thZ2UuanNvblwiKSk7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvY29yZVwiKTtcbmNvbnN0IHV0aWxfdXNlcl9hZ2VudF9ub2RlXzEgPSByZXF1aXJlKFwiQGF3cy1zZGsvdXRpbC11c2VyLWFnZW50LW5vZGVcIik7XG5jb25zdCBjb25maWdfcmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCJAc21pdGh5L2NvbmZpZy1yZXNvbHZlclwiKTtcbmNvbnN0IGhhc2hfbm9kZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvaGFzaC1ub2RlXCIpO1xuY29uc3QgbWlkZGxld2FyZV9yZXRyeV8xID0gcmVxdWlyZShcIkBzbWl0aHkvbWlkZGxld2FyZS1yZXRyeVwiKTtcbmNvbnN0IG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlclwiKTtcbmNvbnN0IG5vZGVfaHR0cF9oYW5kbGVyXzEgPSByZXF1aXJlKFwiQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlclwiKTtcbmNvbnN0IHV0aWxfYm9keV9sZW5ndGhfbm9kZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1ib2R5LWxlbmd0aC1ub2RlXCIpO1xuY29uc3QgdXRpbF9yZXRyeV8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1yZXRyeVwiKTtcbmNvbnN0IHJ1bnRpbWVDb25maWdfc2hhcmVkXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lQ29uZmlnLnNoYXJlZFwiKTtcbmNvbnN0IHNtaXRoeV9jbGllbnRfMSA9IHJlcXVpcmUoXCJAc21pdGh5L3NtaXRoeS1jbGllbnRcIik7XG5jb25zdCB1dGlsX2RlZmF1bHRzX21vZGVfbm9kZV8xID0gcmVxdWlyZShcIkBzbWl0aHkvdXRpbC1kZWZhdWx0cy1tb2RlLW5vZGVcIik7XG5jb25zdCBzbWl0aHlfY2xpZW50XzIgPSByZXF1aXJlKFwiQHNtaXRoeS9zbWl0aHktY2xpZW50XCIpO1xuY29uc3QgZ2V0UnVudGltZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgICAoMCwgc21pdGh5X2NsaWVudF8yLmVtaXRXYXJuaW5nSWZVbnN1cHBvcnRlZFZlcnNpb24pKHByb2Nlc3MudmVyc2lvbik7XG4gICAgY29uc3QgZGVmYXVsdHNNb2RlID0gKDAsIHV0aWxfZGVmYXVsdHNfbW9kZV9ub2RlXzEucmVzb2x2ZURlZmF1bHRzTW9kZUNvbmZpZykoY29uZmlnKTtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnUHJvdmlkZXIgPSAoKSA9PiBkZWZhdWx0c01vZGUoKS50aGVuKHNtaXRoeV9jbGllbnRfMS5sb2FkQ29uZmlnc0ZvckRlZmF1bHRNb2RlKTtcbiAgICBjb25zdCBjbGllbnRTaGFyZWRWYWx1ZXMgPSAoMCwgcnVudGltZUNvbmZpZ19zaGFyZWRfMS5nZXRSdW50aW1lQ29uZmlnKShjb25maWcpO1xuICAgICgwLCBjb3JlXzEuZW1pdFdhcm5pbmdJZlVuc3VwcG9ydGVkVmVyc2lvbikocHJvY2Vzcy52ZXJzaW9uKTtcbiAgICBjb25zdCBsb2FkZXJDb25maWcgPSB7XG4gICAgICAgIHByb2ZpbGU6IGNvbmZpZz8ucHJvZmlsZSxcbiAgICAgICAgbG9nZ2VyOiBjbGllbnRTaGFyZWRWYWx1ZXMubG9nZ2VyLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY2xpZW50U2hhcmVkVmFsdWVzLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIHJ1bnRpbWU6IFwibm9kZVwiLFxuICAgICAgICBkZWZhdWx0c01vZGUsXG4gICAgICAgIGF1dGhTY2hlbWVQcmVmZXJlbmNlOiBjb25maWc/LmF1dGhTY2hlbWVQcmVmZXJlbmNlID8/ICgwLCBub2RlX2NvbmZpZ19wcm92aWRlcl8xLmxvYWRDb25maWcpKGNvcmVfMS5OT0RFX0FVVEhfU0NIRU1FX1BSRUZFUkVOQ0VfT1BUSU9OUywgbG9hZGVyQ29uZmlnKSxcbiAgICAgICAgYm9keUxlbmd0aENoZWNrZXI6IGNvbmZpZz8uYm9keUxlbmd0aENoZWNrZXIgPz8gdXRpbF9ib2R5X2xlbmd0aF9ub2RlXzEuY2FsY3VsYXRlQm9keUxlbmd0aCxcbiAgICAgICAgZGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyOiBjb25maWc/LmRlZmF1bHRVc2VyQWdlbnRQcm92aWRlciA/P1xuICAgICAgICAgICAgKDAsIHV0aWxfdXNlcl9hZ2VudF9ub2RlXzEuY3JlYXRlRGVmYXVsdFVzZXJBZ2VudFByb3ZpZGVyKSh7IHNlcnZpY2VJZDogY2xpZW50U2hhcmVkVmFsdWVzLnNlcnZpY2VJZCwgY2xpZW50VmVyc2lvbjogcGFja2FnZV9qc29uXzEuZGVmYXVsdC52ZXJzaW9uIH0pLFxuICAgICAgICBtYXhBdHRlbXB0czogY29uZmlnPy5tYXhBdHRlbXB0cyA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShtaWRkbGV3YXJlX3JldHJ5XzEuTk9ERV9NQVhfQVRURU1QVF9DT05GSUdfT1BUSU9OUywgY29uZmlnKSxcbiAgICAgICAgcmVnaW9uOiBjb25maWc/LnJlZ2lvbiA/P1xuICAgICAgICAgICAgKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9SRUdJT05fQ09ORklHX09QVElPTlMsIHsgLi4uY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9SRUdJT05fQ09ORklHX0ZJTEVfT1BUSU9OUywgLi4ubG9hZGVyQ29uZmlnIH0pLFxuICAgICAgICByZXF1ZXN0SGFuZGxlcjogbm9kZV9odHRwX2hhbmRsZXJfMS5Ob2RlSHR0cEhhbmRsZXIuY3JlYXRlKGNvbmZpZz8ucmVxdWVzdEhhbmRsZXIgPz8gZGVmYXVsdENvbmZpZ1Byb3ZpZGVyKSxcbiAgICAgICAgcmV0cnlNb2RlOiBjb25maWc/LnJldHJ5TW9kZSA/P1xuICAgICAgICAgICAgKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoe1xuICAgICAgICAgICAgICAgIC4uLm1pZGRsZXdhcmVfcmV0cnlfMS5OT0RFX1JFVFJZX01PREVfQ09ORklHX09QVElPTlMsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogYXN5bmMgKCkgPT4gKGF3YWl0IGRlZmF1bHRDb25maWdQcm92aWRlcigpKS5yZXRyeU1vZGUgfHwgdXRpbF9yZXRyeV8xLkRFRkFVTFRfUkVUUllfTU9ERSxcbiAgICAgICAgICAgIH0sIGNvbmZpZyksXG4gICAgICAgIHNoYTI1NjogY29uZmlnPy5zaGEyNTYgPz8gaGFzaF9ub2RlXzEuSGFzaC5iaW5kKG51bGwsIFwic2hhMjU2XCIpLFxuICAgICAgICBzdHJlYW1Db2xsZWN0b3I6IGNvbmZpZz8uc3RyZWFtQ29sbGVjdG9yID8/IG5vZGVfaHR0cF9oYW5kbGVyXzEuc3RyZWFtQ29sbGVjdG9yLFxuICAgICAgICB1c2VEdWFsc3RhY2tFbmRwb2ludDogY29uZmlnPy51c2VEdWFsc3RhY2tFbmRwb2ludCA/PyAoMCwgbm9kZV9jb25maWdfcHJvdmlkZXJfMS5sb2FkQ29uZmlnKShjb25maWdfcmVzb2x2ZXJfMS5OT0RFX1VTRV9EVUFMU1RBQ0tfRU5EUE9JTlRfQ09ORklHX09QVElPTlMsIGxvYWRlckNvbmZpZyksXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogY29uZmlnPy51c2VGaXBzRW5kcG9pbnQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykoY29uZmlnX3Jlc29sdmVyXzEuTk9ERV9VU0VfRklQU19FTkRQT0lOVF9DT05GSUdfT1BUSU9OUywgbG9hZGVyQ29uZmlnKSxcbiAgICAgICAgdXNlckFnZW50QXBwSWQ6IGNvbmZpZz8udXNlckFnZW50QXBwSWQgPz8gKDAsIG5vZGVfY29uZmlnX3Byb3ZpZGVyXzEubG9hZENvbmZpZykodXRpbF91c2VyX2FnZW50X25vZGVfMS5OT0RFX0FQUF9JRF9DT05GSUdfT1BUSU9OUywgbG9hZGVyQ29uZmlnKSxcbiAgICB9O1xufTtcbmV4cG9ydHMuZ2V0UnVudGltZUNvbmZpZyA9IGdldFJ1bnRpbWVDb25maWc7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIG1pZGRsZXdhcmVIb3N0SGVhZGVyID0gcmVxdWlyZSgnQGF3cy1zZGsvbWlkZGxld2FyZS1ob3N0LWhlYWRlcicpO1xudmFyIG1pZGRsZXdhcmVMb2dnZXIgPSByZXF1aXJlKCdAYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlcicpO1xudmFyIG1pZGRsZXdhcmVSZWN1cnNpb25EZXRlY3Rpb24gPSByZXF1aXJlKCdAYXdzLXNkay9taWRkbGV3YXJlLXJlY3Vyc2lvbi1kZXRlY3Rpb24nKTtcbnZhciBtaWRkbGV3YXJlVXNlckFnZW50ID0gcmVxdWlyZSgnQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50Jyk7XG52YXIgY29uZmlnUmVzb2x2ZXIgPSByZXF1aXJlKCdAc21pdGh5L2NvbmZpZy1yZXNvbHZlcicpO1xudmFyIGNvcmUgPSByZXF1aXJlKCdAc21pdGh5L2NvcmUnKTtcbnZhciBzY2hlbWEgPSByZXF1aXJlKCdAc21pdGh5L2NvcmUvc2NoZW1hJyk7XG52YXIgbWlkZGxld2FyZUNvbnRlbnRMZW5ndGggPSByZXF1aXJlKCdAc21pdGh5L21pZGRsZXdhcmUtY29udGVudC1sZW5ndGgnKTtcbnZhciBtaWRkbGV3YXJlRW5kcG9pbnQgPSByZXF1aXJlKCdAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnQnKTtcbnZhciBtaWRkbGV3YXJlUmV0cnkgPSByZXF1aXJlKCdAc21pdGh5L21pZGRsZXdhcmUtcmV0cnknKTtcbnZhciBzbWl0aHlDbGllbnQgPSByZXF1aXJlKCdAc21pdGh5L3NtaXRoeS1jbGllbnQnKTtcbnZhciBodHRwQXV0aFNjaGVtZVByb3ZpZGVyID0gcmVxdWlyZSgnLi9hdXRoL2h0dHBBdXRoU2NoZW1lUHJvdmlkZXInKTtcbnZhciBydW50aW1lQ29uZmlnID0gcmVxdWlyZSgnLi9ydW50aW1lQ29uZmlnJyk7XG52YXIgcmVnaW9uQ29uZmlnUmVzb2x2ZXIgPSByZXF1aXJlKCdAYXdzLXNkay9yZWdpb24tY29uZmlnLXJlc29sdmVyJyk7XG52YXIgcHJvdG9jb2xIdHRwID0gcmVxdWlyZSgnQHNtaXRoeS9wcm90b2NvbC1odHRwJyk7XG5cbmNvbnN0IHJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMgPSAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHtcbiAgICAgICAgdXNlRHVhbHN0YWNrRW5kcG9pbnQ6IG9wdGlvbnMudXNlRHVhbHN0YWNrRW5kcG9pbnQgPz8gZmFsc2UsXG4gICAgICAgIHVzZUZpcHNFbmRwb2ludDogb3B0aW9ucy51c2VGaXBzRW5kcG9pbnQgPz8gZmFsc2UsXG4gICAgICAgIGRlZmF1bHRTaWduaW5nTmFtZTogXCJhd3Nzc29wb3J0YWxcIixcbiAgICB9KTtcbn07XG5jb25zdCBjb21tb25QYXJhbXMgPSB7XG4gICAgVXNlRklQUzogeyB0eXBlOiBcImJ1aWx0SW5QYXJhbXNcIiwgbmFtZTogXCJ1c2VGaXBzRW5kcG9pbnRcIiB9LFxuICAgIEVuZHBvaW50OiB7IHR5cGU6IFwiYnVpbHRJblBhcmFtc1wiLCBuYW1lOiBcImVuZHBvaW50XCIgfSxcbiAgICBSZWdpb246IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwicmVnaW9uXCIgfSxcbiAgICBVc2VEdWFsU3RhY2s6IHsgdHlwZTogXCJidWlsdEluUGFyYW1zXCIsIG5hbWU6IFwidXNlRHVhbHN0YWNrRW5kcG9pbnRcIiB9LFxufTtcblxuY29uc3QgZ2V0SHR0cEF1dGhFeHRlbnNpb25Db25maWd1cmF0aW9uID0gKHJ1bnRpbWVDb25maWcpID0+IHtcbiAgICBjb25zdCBfaHR0cEF1dGhTY2hlbWVzID0gcnVudGltZUNvbmZpZy5odHRwQXV0aFNjaGVtZXM7XG4gICAgbGV0IF9odHRwQXV0aFNjaGVtZVByb3ZpZGVyID0gcnVudGltZUNvbmZpZy5odHRwQXV0aFNjaGVtZVByb3ZpZGVyO1xuICAgIGxldCBfY3JlZGVudGlhbHMgPSBydW50aW1lQ29uZmlnLmNyZWRlbnRpYWxzO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNldEh0dHBBdXRoU2NoZW1lKGh0dHBBdXRoU2NoZW1lKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IF9odHRwQXV0aFNjaGVtZXMuZmluZEluZGV4KChzY2hlbWUpID0+IHNjaGVtZS5zY2hlbWVJZCA9PT0gaHR0cEF1dGhTY2hlbWUuc2NoZW1lSWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIF9odHRwQXV0aFNjaGVtZXMucHVzaChodHRwQXV0aFNjaGVtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBfaHR0cEF1dGhTY2hlbWVzLnNwbGljZShpbmRleCwgMSwgaHR0cEF1dGhTY2hlbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBodHRwQXV0aFNjaGVtZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2h0dHBBdXRoU2NoZW1lcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0SHR0cEF1dGhTY2hlbWVQcm92aWRlcihodHRwQXV0aFNjaGVtZVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBfaHR0cEF1dGhTY2hlbWVQcm92aWRlciA9IGh0dHBBdXRoU2NoZW1lUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIGh0dHBBdXRoU2NoZW1lUHJvdmlkZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2h0dHBBdXRoU2NoZW1lUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICBfY3JlZGVudGlhbHMgPSBjcmVkZW50aWFscztcbiAgICAgICAgfSxcbiAgICAgICAgY3JlZGVudGlhbHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWRlbnRpYWxzO1xuICAgICAgICB9LFxuICAgIH07XG59O1xuY29uc3QgcmVzb2x2ZUh0dHBBdXRoUnVudGltZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBodHRwQXV0aFNjaGVtZXM6IGNvbmZpZy5odHRwQXV0aFNjaGVtZXMoKSxcbiAgICAgICAgaHR0cEF1dGhTY2hlbWVQcm92aWRlcjogY29uZmlnLmh0dHBBdXRoU2NoZW1lUHJvdmlkZXIoKSxcbiAgICAgICAgY3JlZGVudGlhbHM6IGNvbmZpZy5jcmVkZW50aWFscygpLFxuICAgIH07XG59O1xuXG5jb25zdCByZXNvbHZlUnVudGltZUV4dGVuc2lvbnMgPSAocnVudGltZUNvbmZpZywgZXh0ZW5zaW9ucykgPT4ge1xuICAgIGNvbnN0IGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSBPYmplY3QuYXNzaWduKHJlZ2lvbkNvbmZpZ1Jlc29sdmVyLmdldEF3c1JlZ2lvbkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24ocnVudGltZUNvbmZpZyksIHNtaXRoeUNsaWVudC5nZXREZWZhdWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbihydW50aW1lQ29uZmlnKSwgcHJvdG9jb2xIdHRwLmdldEh0dHBIYW5kbGVyRXh0ZW5zaW9uQ29uZmlndXJhdGlvbihydW50aW1lQ29uZmlnKSwgZ2V0SHR0cEF1dGhFeHRlbnNpb25Db25maWd1cmF0aW9uKHJ1bnRpbWVDb25maWcpKTtcbiAgICBleHRlbnNpb25zLmZvckVhY2goKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLmNvbmZpZ3VyZShleHRlbnNpb25Db25maWd1cmF0aW9uKSk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocnVudGltZUNvbmZpZywgcmVnaW9uQ29uZmlnUmVzb2x2ZXIucmVzb2x2ZUF3c1JlZ2lvbkV4dGVuc2lvbkNvbmZpZ3VyYXRpb24oZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiksIHNtaXRoeUNsaWVudC5yZXNvbHZlRGVmYXVsdFJ1bnRpbWVDb25maWcoZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiksIHByb3RvY29sSHR0cC5yZXNvbHZlSHR0cEhhbmRsZXJSdW50aW1lQ29uZmlnKGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pLCByZXNvbHZlSHR0cEF1dGhSdW50aW1lQ29uZmlnKGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pKTtcbn07XG5cbmNsYXNzIFNTT0NsaWVudCBleHRlbmRzIHNtaXRoeUNsaWVudC5DbGllbnQge1xuICAgIGNvbmZpZztcbiAgICBjb25zdHJ1Y3RvciguLi5bY29uZmlndXJhdGlvbl0pIHtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18wID0gcnVudGltZUNvbmZpZy5nZXRSdW50aW1lQ29uZmlnKGNvbmZpZ3VyYXRpb24gfHwge30pO1xuICAgICAgICBzdXBlcihfY29uZmlnXzApO1xuICAgICAgICB0aGlzLmluaXRDb25maWcgPSBfY29uZmlnXzA7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMSA9IHJlc29sdmVDbGllbnRFbmRwb2ludFBhcmFtZXRlcnMoX2NvbmZpZ18wKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ18yID0gbWlkZGxld2FyZVVzZXJBZ2VudC5yZXNvbHZlVXNlckFnZW50Q29uZmlnKF9jb25maWdfMSk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfMyA9IG1pZGRsZXdhcmVSZXRyeS5yZXNvbHZlUmV0cnlDb25maWcoX2NvbmZpZ18yKTtcbiAgICAgICAgY29uc3QgX2NvbmZpZ180ID0gY29uZmlnUmVzb2x2ZXIucmVzb2x2ZVJlZ2lvbkNvbmZpZyhfY29uZmlnXzMpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzUgPSBtaWRkbGV3YXJlSG9zdEhlYWRlci5yZXNvbHZlSG9zdEhlYWRlckNvbmZpZyhfY29uZmlnXzQpO1xuICAgICAgICBjb25zdCBfY29uZmlnXzYgPSBtaWRkbGV3YXJlRW5kcG9pbnQucmVzb2x2ZUVuZHBvaW50Q29uZmlnKF9jb25maWdfNSk7XG4gICAgICAgIGNvbnN0IF9jb25maWdfNyA9IGh0dHBBdXRoU2NoZW1lUHJvdmlkZXIucmVzb2x2ZUh0dHBBdXRoU2NoZW1lQ29uZmlnKF9jb25maWdfNik7XG4gICAgICAgIGNvbnN0IF9jb25maWdfOCA9IHJlc29sdmVSdW50aW1lRXh0ZW5zaW9ucyhfY29uZmlnXzcsIGNvbmZpZ3VyYXRpb24/LmV4dGVuc2lvbnMgfHwgW10pO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IF9jb25maWdfODtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKHNjaGVtYS5nZXRTY2hlbWFTZXJkZVBsdWdpbih0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UobWlkZGxld2FyZVVzZXJBZ2VudC5nZXRVc2VyQWdlbnRQbHVnaW4odGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKG1pZGRsZXdhcmVSZXRyeS5nZXRSZXRyeVBsdWdpbih0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UobWlkZGxld2FyZUNvbnRlbnRMZW5ndGguZ2V0Q29udGVudExlbmd0aFBsdWdpbih0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UobWlkZGxld2FyZUhvc3RIZWFkZXIuZ2V0SG9zdEhlYWRlclBsdWdpbih0aGlzLmNvbmZpZykpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVTdGFjay51c2UobWlkZGxld2FyZUxvZ2dlci5nZXRMb2dnZXJQbHVnaW4odGhpcy5jb25maWcpKTtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlU3RhY2sudXNlKG1pZGRsZXdhcmVSZWN1cnNpb25EZXRlY3Rpb24uZ2V0UmVjdXJzaW9uRGV0ZWN0aW9uUGx1Z2luKHRoaXMuY29uZmlnKSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZShjb3JlLmdldEh0dHBBdXRoU2NoZW1lRW5kcG9pbnRSdWxlU2V0UGx1Z2luKHRoaXMuY29uZmlnLCB7XG4gICAgICAgICAgICBodHRwQXV0aFNjaGVtZVBhcmFtZXRlcnNQcm92aWRlcjogaHR0cEF1dGhTY2hlbWVQcm92aWRlci5kZWZhdWx0U1NPSHR0cEF1dGhTY2hlbWVQYXJhbWV0ZXJzUHJvdmlkZXIsXG4gICAgICAgICAgICBpZGVudGl0eVByb3ZpZGVyQ29uZmlnUHJvdmlkZXI6IGFzeW5jIChjb25maWcpID0+IG5ldyBjb3JlLkRlZmF1bHRJZGVudGl0eVByb3ZpZGVyQ29uZmlnKHtcbiAgICAgICAgICAgICAgICBcImF3cy5hdXRoI3NpZ3Y0XCI6IGNvbmZpZy5jcmVkZW50aWFscyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVN0YWNrLnVzZShjb3JlLmdldEh0dHBTaWduaW5nUGx1Z2luKHRoaXMuY29uZmlnKSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5cbmxldCBTU09TZXJ2aWNlRXhjZXB0aW9uJDEgPSBjbGFzcyBTU09TZXJ2aWNlRXhjZXB0aW9uIGV4dGVuZHMgc21pdGh5Q2xpZW50LlNlcnZpY2VFeGNlcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBTU09TZXJ2aWNlRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufTtcblxubGV0IEludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJDEgPSBjbGFzcyBJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBleHRlbmRzIFNTT1NlcnZpY2VFeGNlcHRpb24kMSB7XG4gICAgbmFtZSA9IFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIjtcbiAgICAkZmF1bHQgPSBcImNsaWVudFwiO1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn07XG5sZXQgUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbiQxID0gY2xhc3MgUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbiBleHRlbmRzIFNTT1NlcnZpY2VFeGNlcHRpb24kMSB7XG4gICAgbmFtZSA9IFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiO1xuICAgICRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuICAgIH1cbn07XG5sZXQgVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uJDEgPSBjbGFzcyBUb29NYW55UmVxdWVzdHNFeGNlcHRpb24gZXh0ZW5kcyBTU09TZXJ2aWNlRXhjZXB0aW9uJDEge1xuICAgIG5hbWUgPSBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiO1xuICAgICRmYXVsdCA9IFwiY2xpZW50XCI7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBuYW1lOiBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiLFxuICAgICAgICAgICAgJGZhdWx0OiBcImNsaWVudFwiLFxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUb29NYW55UmVxdWVzdHNFeGNlcHRpb24ucHJvdG90eXBlKTtcbiAgICB9XG59O1xubGV0IFVuYXV0aG9yaXplZEV4Y2VwdGlvbiQxID0gY2xhc3MgVW5hdXRob3JpemVkRXhjZXB0aW9uIGV4dGVuZHMgU1NPU2VydmljZUV4Y2VwdGlvbiQxIHtcbiAgICBuYW1lID0gXCJVbmF1dGhvcml6ZWRFeGNlcHRpb25cIjtcbiAgICAkZmF1bHQgPSBcImNsaWVudFwiO1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbmFtZTogXCJVbmF1dGhvcml6ZWRFeGNlcHRpb25cIixcbiAgICAgICAgICAgICRmYXVsdDogXCJjbGllbnRcIixcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVW5hdXRob3JpemVkRXhjZXB0aW9uLnByb3RvdHlwZSk7XG4gICAgfVxufTtcblxuY29uc3QgX0FJID0gXCJBY2NvdW50SW5mb1wiO1xuY29uc3QgX0FMVCA9IFwiQWNjb3VudExpc3RUeXBlXCI7XG5jb25zdCBfQVRUID0gXCJBY2Nlc3NUb2tlblR5cGVcIjtcbmNvbnN0IF9HUkMgPSBcIkdldFJvbGVDcmVkZW50aWFsc1wiO1xuY29uc3QgX0dSQ1IgPSBcIkdldFJvbGVDcmVkZW50aWFsc1JlcXVlc3RcIjtcbmNvbnN0IF9HUkNSZSA9IFwiR2V0Um9sZUNyZWRlbnRpYWxzUmVzcG9uc2VcIjtcbmNvbnN0IF9JUkUgPSBcIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uXCI7XG5jb25zdCBfTCA9IFwiTG9nb3V0XCI7XG5jb25zdCBfTEEgPSBcIkxpc3RBY2NvdW50c1wiO1xuY29uc3QgX0xBUiA9IFwiTGlzdEFjY291bnRzUmVxdWVzdFwiO1xuY29uc3QgX0xBUlIgPSBcIkxpc3RBY2NvdW50Um9sZXNSZXF1ZXN0XCI7XG5jb25zdCBfTEFSUmkgPSBcIkxpc3RBY2NvdW50Um9sZXNSZXNwb25zZVwiO1xuY29uc3QgX0xBUmkgPSBcIkxpc3RBY2NvdW50c1Jlc3BvbnNlXCI7XG5jb25zdCBfTEFSaXMgPSBcIkxpc3RBY2NvdW50Um9sZXNcIjtcbmNvbnN0IF9MUiA9IFwiTG9nb3V0UmVxdWVzdFwiO1xuY29uc3QgX1JDID0gXCJSb2xlQ3JlZGVudGlhbHNcIjtcbmNvbnN0IF9SSSA9IFwiUm9sZUluZm9cIjtcbmNvbnN0IF9STFQgPSBcIlJvbGVMaXN0VHlwZVwiO1xuY29uc3QgX1JORkUgPSBcIlJlc291cmNlTm90Rm91bmRFeGNlcHRpb25cIjtcbmNvbnN0IF9TQUtUID0gXCJTZWNyZXRBY2Nlc3NLZXlUeXBlXCI7XG5jb25zdCBfU1RUID0gXCJTZXNzaW9uVG9rZW5UeXBlXCI7XG5jb25zdCBfVE1SRSA9IFwiVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uXCI7XG5jb25zdCBfVUUgPSBcIlVuYXV0aG9yaXplZEV4Y2VwdGlvblwiO1xuY29uc3QgX2FJID0gXCJhY2NvdW50SWRcIjtcbmNvbnN0IF9hS0kgPSBcImFjY2Vzc0tleUlkXCI7XG5jb25zdCBfYUwgPSBcImFjY291bnRMaXN0XCI7XG5jb25zdCBfYU4gPSBcImFjY291bnROYW1lXCI7XG5jb25zdCBfYVQgPSBcImFjY2Vzc1Rva2VuXCI7XG5jb25zdCBfYWkgPSBcImFjY291bnRfaWRcIjtcbmNvbnN0IF9jID0gXCJjbGllbnRcIjtcbmNvbnN0IF9lID0gXCJlcnJvclwiO1xuY29uc3QgX2VBID0gXCJlbWFpbEFkZHJlc3NcIjtcbmNvbnN0IF9leCA9IFwiZXhwaXJhdGlvblwiO1xuY29uc3QgX2ggPSBcImh0dHBcIjtcbmNvbnN0IF9oRSA9IFwiaHR0cEVycm9yXCI7XG5jb25zdCBfaEggPSBcImh0dHBIZWFkZXJcIjtcbmNvbnN0IF9oUSA9IFwiaHR0cFF1ZXJ5XCI7XG5jb25zdCBfbSA9IFwibWVzc2FnZVwiO1xuY29uc3QgX21SID0gXCJtYXhSZXN1bHRzXCI7XG5jb25zdCBfbXIgPSBcIm1heF9yZXN1bHRcIjtcbmNvbnN0IF9uVCA9IFwibmV4dFRva2VuXCI7XG5jb25zdCBfbnQgPSBcIm5leHRfdG9rZW5cIjtcbmNvbnN0IF9yQyA9IFwicm9sZUNyZWRlbnRpYWxzXCI7XG5jb25zdCBfckwgPSBcInJvbGVMaXN0XCI7XG5jb25zdCBfck4gPSBcInJvbGVOYW1lXCI7XG5jb25zdCBfcm4gPSBcInJvbGVfbmFtZVwiO1xuY29uc3QgX3MgPSBcInNtaXRoeS50cy5zZGsuc3ludGhldGljLmNvbS5hbWF6b25hd3Muc3NvXCI7XG5jb25zdCBfc0FLID0gXCJzZWNyZXRBY2Nlc3NLZXlcIjtcbmNvbnN0IF9zVCA9IFwic2Vzc2lvblRva2VuXCI7XG5jb25zdCBfeGFzYnQgPSBcIngtYW16LXNzb19iZWFyZXJfdG9rZW5cIjtcbmNvbnN0IG4wID0gXCJjb20uYW1hem9uYXdzLnNzb1wiO1xudmFyIEFjY2Vzc1Rva2VuVHlwZSA9IFswLCBuMCwgX0FUVCwgOCwgMF07XG52YXIgU2VjcmV0QWNjZXNzS2V5VHlwZSA9IFswLCBuMCwgX1NBS1QsIDgsIDBdO1xudmFyIFNlc3Npb25Ub2tlblR5cGUgPSBbMCwgbjAsIF9TVFQsIDgsIDBdO1xudmFyIEFjY291bnRJbmZvID0gWzMsIG4wLCBfQUksIDAsIFtfYUksIF9hTiwgX2VBXSwgWzAsIDAsIDBdXTtcbnZhciBHZXRSb2xlQ3JlZGVudGlhbHNSZXF1ZXN0ID0gW1xuICAgIDMsXG4gICAgbjAsXG4gICAgX0dSQ1IsXG4gICAgMCxcbiAgICBbX3JOLCBfYUksIF9hVF0sXG4gICAgW1xuICAgICAgICBbXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtfaFFdOiBfcm4sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtfaFFdOiBfYWksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAoKSA9PiBBY2Nlc3NUb2tlblR5cGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW19oSF06IF94YXNidCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgXSxcbl07XG52YXIgR2V0Um9sZUNyZWRlbnRpYWxzUmVzcG9uc2UgPSBbMywgbjAsIF9HUkNSZSwgMCwgW19yQ10sIFtbKCkgPT4gUm9sZUNyZWRlbnRpYWxzLCAwXV1dO1xudmFyIEludmFsaWRSZXF1ZXN0RXhjZXB0aW9uID0gW1xuICAgIC0zLFxuICAgIG4wLFxuICAgIF9JUkUsXG4gICAge1xuICAgICAgICBbX2VdOiBfYyxcbiAgICAgICAgW19oRV06IDQwMCxcbiAgICB9LFxuICAgIFtfbV0sXG4gICAgWzBdLFxuXTtcbnNjaGVtYS5UeXBlUmVnaXN0cnkuZm9yKG4wKS5yZWdpc3RlckVycm9yKEludmFsaWRSZXF1ZXN0RXhjZXB0aW9uLCBJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiQxKTtcbnZhciBMaXN0QWNjb3VudFJvbGVzUmVxdWVzdCA9IFtcbiAgICAzLFxuICAgIG4wLFxuICAgIF9MQVJSLFxuICAgIDAsXG4gICAgW19uVCwgX21SLCBfYVQsIF9hSV0sXG4gICAgW1xuICAgICAgICBbXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtfaFFdOiBfbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtfaFFdOiBfbXIsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAoKSA9PiBBY2Nlc3NUb2tlblR5cGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW19oSF06IF94YXNidCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW19oUV06IF9haSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgXSxcbl07XG52YXIgTGlzdEFjY291bnRSb2xlc1Jlc3BvbnNlID0gWzMsIG4wLCBfTEFSUmksIDAsIFtfblQsIF9yTF0sIFswLCAoKSA9PiBSb2xlTGlzdFR5cGVdXTtcbnZhciBMaXN0QWNjb3VudHNSZXF1ZXN0ID0gW1xuICAgIDMsXG4gICAgbjAsXG4gICAgX0xBUixcbiAgICAwLFxuICAgIFtfblQsIF9tUiwgX2FUXSxcbiAgICBbXG4gICAgICAgIFtcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW19oUV06IF9udCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW19oUV06IF9tcixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICgpID0+IEFjY2Vzc1Rva2VuVHlwZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBbX2hIXTogX3hhc2J0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICBdLFxuXTtcbnZhciBMaXN0QWNjb3VudHNSZXNwb25zZSA9IFszLCBuMCwgX0xBUmksIDAsIFtfblQsIF9hTF0sIFswLCAoKSA9PiBBY2NvdW50TGlzdFR5cGVdXTtcbnZhciBMb2dvdXRSZXF1ZXN0ID0gW1xuICAgIDMsXG4gICAgbjAsXG4gICAgX0xSLFxuICAgIDAsXG4gICAgW19hVF0sXG4gICAgW1xuICAgICAgICBbXG4gICAgICAgICAgICAoKSA9PiBBY2Nlc3NUb2tlblR5cGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW19oSF06IF94YXNidCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgXSxcbl07XG52YXIgUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbiA9IFtcbiAgICAtMyxcbiAgICBuMCxcbiAgICBfUk5GRSxcbiAgICB7XG4gICAgICAgIFtfZV06IF9jLFxuICAgICAgICBbX2hFXTogNDA0LFxuICAgIH0sXG4gICAgW19tXSxcbiAgICBbMF0sXG5dO1xuc2NoZW1hLlR5cGVSZWdpc3RyeS5mb3IobjApLnJlZ2lzdGVyRXJyb3IoUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbiwgUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbiQxKTtcbnZhciBSb2xlQ3JlZGVudGlhbHMgPSBbXG4gICAgMyxcbiAgICBuMCxcbiAgICBfUkMsXG4gICAgMCxcbiAgICBbX2FLSSwgX3NBSywgX3NULCBfZXhdLFxuICAgIFswLCBbKCkgPT4gU2VjcmV0QWNjZXNzS2V5VHlwZSwgMF0sIFsoKSA9PiBTZXNzaW9uVG9rZW5UeXBlLCAwXSwgMV0sXG5dO1xudmFyIFJvbGVJbmZvID0gWzMsIG4wLCBfUkksIDAsIFtfck4sIF9hSV0sIFswLCAwXV07XG52YXIgVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uID0gW1xuICAgIC0zLFxuICAgIG4wLFxuICAgIF9UTVJFLFxuICAgIHtcbiAgICAgICAgW19lXTogX2MsXG4gICAgICAgIFtfaEVdOiA0MjksXG4gICAgfSxcbiAgICBbX21dLFxuICAgIFswXSxcbl07XG5zY2hlbWEuVHlwZVJlZ2lzdHJ5LmZvcihuMCkucmVnaXN0ZXJFcnJvcihUb29NYW55UmVxdWVzdHNFeGNlcHRpb24sIFRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbiQxKTtcbnZhciBVbmF1dGhvcml6ZWRFeGNlcHRpb24gPSBbXG4gICAgLTMsXG4gICAgbjAsXG4gICAgX1VFLFxuICAgIHtcbiAgICAgICAgW19lXTogX2MsXG4gICAgICAgIFtfaEVdOiA0MDEsXG4gICAgfSxcbiAgICBbX21dLFxuICAgIFswXSxcbl07XG5zY2hlbWEuVHlwZVJlZ2lzdHJ5LmZvcihuMCkucmVnaXN0ZXJFcnJvcihVbmF1dGhvcml6ZWRFeGNlcHRpb24sIFVuYXV0aG9yaXplZEV4Y2VwdGlvbiQxKTtcbnZhciBfX1VuaXQgPSBcInVuaXRcIjtcbnZhciBTU09TZXJ2aWNlRXhjZXB0aW9uID0gWy0zLCBfcywgXCJTU09TZXJ2aWNlRXhjZXB0aW9uXCIsIDAsIFtdLCBbXV07XG5zY2hlbWEuVHlwZVJlZ2lzdHJ5LmZvcihfcykucmVnaXN0ZXJFcnJvcihTU09TZXJ2aWNlRXhjZXB0aW9uLCBTU09TZXJ2aWNlRXhjZXB0aW9uJDEpO1xudmFyIEFjY291bnRMaXN0VHlwZSA9IFsxLCBuMCwgX0FMVCwgMCwgKCkgPT4gQWNjb3VudEluZm9dO1xudmFyIFJvbGVMaXN0VHlwZSA9IFsxLCBuMCwgX1JMVCwgMCwgKCkgPT4gUm9sZUluZm9dO1xudmFyIEdldFJvbGVDcmVkZW50aWFscyA9IFtcbiAgICA5LFxuICAgIG4wLFxuICAgIF9HUkMsXG4gICAge1xuICAgICAgICBbX2hdOiBbXCJHRVRcIiwgXCIvZmVkZXJhdGlvbi9jcmVkZW50aWFsc1wiLCAyMDBdLFxuICAgIH0sXG4gICAgKCkgPT4gR2V0Um9sZUNyZWRlbnRpYWxzUmVxdWVzdCxcbiAgICAoKSA9PiBHZXRSb2xlQ3JlZGVudGlhbHNSZXNwb25zZSxcbl07XG52YXIgTGlzdEFjY291bnRSb2xlcyA9IFtcbiAgICA5LFxuICAgIG4wLFxuICAgIF9MQVJpcyxcbiAgICB7XG4gICAgICAgIFtfaF06IFtcIkdFVFwiLCBcIi9hc3NpZ25tZW50L3JvbGVzXCIsIDIwMF0sXG4gICAgfSxcbiAgICAoKSA9PiBMaXN0QWNjb3VudFJvbGVzUmVxdWVzdCxcbiAgICAoKSA9PiBMaXN0QWNjb3VudFJvbGVzUmVzcG9uc2UsXG5dO1xudmFyIExpc3RBY2NvdW50cyA9IFtcbiAgICA5LFxuICAgIG4wLFxuICAgIF9MQSxcbiAgICB7XG4gICAgICAgIFtfaF06IFtcIkdFVFwiLCBcIi9hc3NpZ25tZW50L2FjY291bnRzXCIsIDIwMF0sXG4gICAgfSxcbiAgICAoKSA9PiBMaXN0QWNjb3VudHNSZXF1ZXN0LFxuICAgICgpID0+IExpc3RBY2NvdW50c1Jlc3BvbnNlLFxuXTtcbnZhciBMb2dvdXQgPSBbXG4gICAgOSxcbiAgICBuMCxcbiAgICBfTCxcbiAgICB7XG4gICAgICAgIFtfaF06IFtcIlBPU1RcIiwgXCIvbG9nb3V0XCIsIDIwMF0sXG4gICAgfSxcbiAgICAoKSA9PiBMb2dvdXRSZXF1ZXN0LFxuICAgICgpID0+IF9fVW5pdCxcbl07XG5cbmNsYXNzIEdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQgZXh0ZW5kcyBzbWl0aHlDbGllbnQuQ29tbWFuZFxuICAgIC5jbGFzc0J1aWxkZXIoKVxuICAgIC5lcChjb21tb25QYXJhbXMpXG4gICAgLm0oZnVuY3Rpb24gKENvbW1hbmQsIGNzLCBjb25maWcsIG8pIHtcbiAgICByZXR1cm4gW21pZGRsZXdhcmVFbmRwb2ludC5nZXRFbmRwb2ludFBsdWdpbihjb25maWcsIENvbW1hbmQuZ2V0RW5kcG9pbnRQYXJhbWV0ZXJJbnN0cnVjdGlvbnMoKSldO1xufSlcbiAgICAucyhcIlNXQlBvcnRhbFNlcnZpY2VcIiwgXCJHZXRSb2xlQ3JlZGVudGlhbHNcIiwge30pXG4gICAgLm4oXCJTU09DbGllbnRcIiwgXCJHZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kXCIpXG4gICAgLnNjKEdldFJvbGVDcmVkZW50aWFscylcbiAgICAuYnVpbGQoKSB7XG59XG5cbmNsYXNzIExpc3RBY2NvdW50Um9sZXNDb21tYW5kIGV4dGVuZHMgc21pdGh5Q2xpZW50LkNvbW1hbmRcbiAgICAuY2xhc3NCdWlsZGVyKClcbiAgICAuZXAoY29tbW9uUGFyYW1zKVxuICAgIC5tKGZ1bmN0aW9uIChDb21tYW5kLCBjcywgY29uZmlnLCBvKSB7XG4gICAgcmV0dXJuIFttaWRkbGV3YXJlRW5kcG9pbnQuZ2V0RW5kcG9pbnRQbHVnaW4oY29uZmlnLCBDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpXTtcbn0pXG4gICAgLnMoXCJTV0JQb3J0YWxTZXJ2aWNlXCIsIFwiTGlzdEFjY291bnRSb2xlc1wiLCB7fSlcbiAgICAubihcIlNTT0NsaWVudFwiLCBcIkxpc3RBY2NvdW50Um9sZXNDb21tYW5kXCIpXG4gICAgLnNjKExpc3RBY2NvdW50Um9sZXMpXG4gICAgLmJ1aWxkKCkge1xufVxuXG5jbGFzcyBMaXN0QWNjb3VudHNDb21tYW5kIGV4dGVuZHMgc21pdGh5Q2xpZW50LkNvbW1hbmRcbiAgICAuY2xhc3NCdWlsZGVyKClcbiAgICAuZXAoY29tbW9uUGFyYW1zKVxuICAgIC5tKGZ1bmN0aW9uIChDb21tYW5kLCBjcywgY29uZmlnLCBvKSB7XG4gICAgcmV0dXJuIFttaWRkbGV3YXJlRW5kcG9pbnQuZ2V0RW5kcG9pbnRQbHVnaW4oY29uZmlnLCBDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpXTtcbn0pXG4gICAgLnMoXCJTV0JQb3J0YWxTZXJ2aWNlXCIsIFwiTGlzdEFjY291bnRzXCIsIHt9KVxuICAgIC5uKFwiU1NPQ2xpZW50XCIsIFwiTGlzdEFjY291bnRzQ29tbWFuZFwiKVxuICAgIC5zYyhMaXN0QWNjb3VudHMpXG4gICAgLmJ1aWxkKCkge1xufVxuXG5jbGFzcyBMb2dvdXRDb21tYW5kIGV4dGVuZHMgc21pdGh5Q2xpZW50LkNvbW1hbmRcbiAgICAuY2xhc3NCdWlsZGVyKClcbiAgICAuZXAoY29tbW9uUGFyYW1zKVxuICAgIC5tKGZ1bmN0aW9uIChDb21tYW5kLCBjcywgY29uZmlnLCBvKSB7XG4gICAgcmV0dXJuIFttaWRkbGV3YXJlRW5kcG9pbnQuZ2V0RW5kcG9pbnRQbHVnaW4oY29uZmlnLCBDb21tYW5kLmdldEVuZHBvaW50UGFyYW1ldGVySW5zdHJ1Y3Rpb25zKCkpXTtcbn0pXG4gICAgLnMoXCJTV0JQb3J0YWxTZXJ2aWNlXCIsIFwiTG9nb3V0XCIsIHt9KVxuICAgIC5uKFwiU1NPQ2xpZW50XCIsIFwiTG9nb3V0Q29tbWFuZFwiKVxuICAgIC5zYyhMb2dvdXQpXG4gICAgLmJ1aWxkKCkge1xufVxuXG5jb25zdCBjb21tYW5kcyA9IHtcbiAgICBHZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kLFxuICAgIExpc3RBY2NvdW50Um9sZXNDb21tYW5kLFxuICAgIExpc3RBY2NvdW50c0NvbW1hbmQsXG4gICAgTG9nb3V0Q29tbWFuZCxcbn07XG5jbGFzcyBTU08gZXh0ZW5kcyBTU09DbGllbnQge1xufVxuc21pdGh5Q2xpZW50LmNyZWF0ZUFnZ3JlZ2F0ZWRDbGllbnQoY29tbWFuZHMsIFNTTyk7XG5cbmNvbnN0IHBhZ2luYXRlTGlzdEFjY291bnRSb2xlcyA9IGNvcmUuY3JlYXRlUGFnaW5hdG9yKFNTT0NsaWVudCwgTGlzdEFjY291bnRSb2xlc0NvbW1hbmQsIFwibmV4dFRva2VuXCIsIFwibmV4dFRva2VuXCIsIFwibWF4UmVzdWx0c1wiKTtcblxuY29uc3QgcGFnaW5hdGVMaXN0QWNjb3VudHMgPSBjb3JlLmNyZWF0ZVBhZ2luYXRvcihTU09DbGllbnQsIExpc3RBY2NvdW50c0NvbW1hbmQsIFwibmV4dFRva2VuXCIsIFwibmV4dFRva2VuXCIsIFwibWF4UmVzdWx0c1wiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiJENvbW1hbmRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbWl0aHlDbGllbnQuQ29tbWFuZDsgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX0NsaWVudFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNtaXRoeUNsaWVudC5DbGllbnQ7IH1cbn0pO1xuZXhwb3J0cy5HZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kID0gR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZDtcbmV4cG9ydHMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb24gPSBJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiQxO1xuZXhwb3J0cy5MaXN0QWNjb3VudFJvbGVzQ29tbWFuZCA9IExpc3RBY2NvdW50Um9sZXNDb21tYW5kO1xuZXhwb3J0cy5MaXN0QWNjb3VudHNDb21tYW5kID0gTGlzdEFjY291bnRzQ29tbWFuZDtcbmV4cG9ydHMuTG9nb3V0Q29tbWFuZCA9IExvZ291dENvbW1hbmQ7XG5leHBvcnRzLlJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gPSBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uJDE7XG5leHBvcnRzLlNTTyA9IFNTTztcbmV4cG9ydHMuU1NPQ2xpZW50ID0gU1NPQ2xpZW50O1xuZXhwb3J0cy5TU09TZXJ2aWNlRXhjZXB0aW9uID0gU1NPU2VydmljZUV4Y2VwdGlvbiQxO1xuZXhwb3J0cy5Ub29NYW55UmVxdWVzdHNFeGNlcHRpb24gPSBUb29NYW55UmVxdWVzdHNFeGNlcHRpb24kMTtcbmV4cG9ydHMuVW5hdXRob3JpemVkRXhjZXB0aW9uID0gVW5hdXRob3JpemVkRXhjZXB0aW9uJDE7XG5leHBvcnRzLnBhZ2luYXRlTGlzdEFjY291bnRSb2xlcyA9IHBhZ2luYXRlTGlzdEFjY291bnRSb2xlcztcbmV4cG9ydHMucGFnaW5hdGVMaXN0QWNjb3VudHMgPSBwYWdpbmF0ZUxpc3RBY2NvdW50cztcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xpZW50U3NvID0gcmVxdWlyZSgnQGF3cy1zZGsvY2xpZW50LXNzbycpO1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZFwiLCB7XG5cdGVudW1lcmFibGU6IHRydWUsXG5cdGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xpZW50U3NvLkdldFJvbGVDcmVkZW50aWFsc0NvbW1hbmQ7IH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU1NPQ2xpZW50XCIsIHtcblx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0Z2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjbGllbnRTc28uU1NPQ2xpZW50OyB9XG59KTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJvcGVydHlQcm92aWRlciA9IHJlcXVpcmUoJ0BzbWl0aHkvcHJvcGVydHktcHJvdmlkZXInKTtcbnZhciBzaGFyZWRJbmlGaWxlTG9hZGVyID0gcmVxdWlyZSgnQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyJyk7XG52YXIgY2xpZW50ID0gcmVxdWlyZSgnQGF3cy1zZGsvY29yZS9jbGllbnQnKTtcbnZhciB0b2tlblByb3ZpZGVycyA9IHJlcXVpcmUoJ0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycycpO1xuXG5jb25zdCBpc1Nzb1Byb2ZpbGUgPSAoYXJnKSA9PiBhcmcgJiZcbiAgICAodHlwZW9mIGFyZy5zc29fc3RhcnRfdXJsID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIHR5cGVvZiBhcmcuc3NvX2FjY291bnRfaWQgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgdHlwZW9mIGFyZy5zc29fc2Vzc2lvbiA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgYXJnLnNzb19yZWdpb24gPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgdHlwZW9mIGFyZy5zc29fcm9sZV9uYW1lID09PSBcInN0cmluZ1wiKTtcblxuY29uc3QgU0hPVUxEX0ZBSUxfQ1JFREVOVElBTF9DSEFJTiA9IGZhbHNlO1xuY29uc3QgcmVzb2x2ZVNTT0NyZWRlbnRpYWxzID0gYXN5bmMgKHsgc3NvU3RhcnRVcmwsIHNzb1Nlc3Npb24sIHNzb0FjY291bnRJZCwgc3NvUmVnaW9uLCBzc29Sb2xlTmFtZSwgc3NvQ2xpZW50LCBjbGllbnRDb25maWcsIHBhcmVudENsaWVudENvbmZpZywgcHJvZmlsZSwgZmlsZXBhdGgsIGNvbmZpZ0ZpbGVwYXRoLCBpZ25vcmVDYWNoZSwgbG9nZ2VyLCB9KSA9PiB7XG4gICAgbGV0IHRva2VuO1xuICAgIGNvbnN0IHJlZnJlc2hNZXNzYWdlID0gYFRvIHJlZnJlc2ggdGhpcyBTU08gc2Vzc2lvbiBydW4gYXdzIHNzbyBsb2dpbiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHByb2ZpbGUuYDtcbiAgICBpZiAoc3NvU2Vzc2lvbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgX3Rva2VuID0gYXdhaXQgdG9rZW5Qcm92aWRlcnMuZnJvbVNzbyh7XG4gICAgICAgICAgICAgICAgcHJvZmlsZSxcbiAgICAgICAgICAgICAgICBmaWxlcGF0aCxcbiAgICAgICAgICAgICAgICBjb25maWdGaWxlcGF0aCxcbiAgICAgICAgICAgICAgICBpZ25vcmVDYWNoZSxcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICB0b2tlbiA9IHtcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogX3Rva2VuLnRva2VuLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUoX3Rva2VuLmV4cGlyYXRpb24pLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlQcm92aWRlci5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoZS5tZXNzYWdlLCB7XG4gICAgICAgICAgICAgICAgdHJ5TmV4dExpbms6IFNIT1VMRF9GQUlMX0NSRURFTlRJQUxfQ0hBSU4sXG4gICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0b2tlbiA9IGF3YWl0IHNoYXJlZEluaUZpbGVMb2FkZXIuZ2V0U1NPVG9rZW5Gcm9tRmlsZShzc29TdGFydFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgVGhlIFNTTyBzZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2ZpbGUgaXMgaW52YWxpZC4gJHtyZWZyZXNoTWVzc2FnZX1gLCB7XG4gICAgICAgICAgICAgICAgdHJ5TmV4dExpbms6IFNIT1VMRF9GQUlMX0NSRURFTlRJQUxfQ0hBSU4sXG4gICAgICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5ldyBEYXRlKHRva2VuLmV4cGlyZXNBdCkuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgVGhlIFNTTyBzZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2ZpbGUgaGFzIGV4cGlyZWQuICR7cmVmcmVzaE1lc3NhZ2V9YCwge1xuICAgICAgICAgICAgdHJ5TmV4dExpbms6IFNIT1VMRF9GQUlMX0NSRURFTlRJQUxfQ0hBSU4sXG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IGFjY2Vzc1Rva2VuIH0gPSB0b2tlbjtcbiAgICBjb25zdCB7IFNTT0NsaWVudCwgR2V0Um9sZUNyZWRlbnRpYWxzQ29tbWFuZCB9ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1aXJlKCcuL2xvYWRTc28tQ1Z5OGlxc1ouanMnKTsgfSk7XG4gICAgY29uc3Qgc3NvID0gc3NvQ2xpZW50IHx8XG4gICAgICAgIG5ldyBTU09DbGllbnQoT2JqZWN0LmFzc2lnbih7fSwgY2xpZW50Q29uZmlnID8/IHt9LCB7XG4gICAgICAgICAgICBsb2dnZXI6IGNsaWVudENvbmZpZz8ubG9nZ2VyID8/IHBhcmVudENsaWVudENvbmZpZz8ubG9nZ2VyLFxuICAgICAgICAgICAgcmVnaW9uOiBjbGllbnRDb25maWc/LnJlZ2lvbiA/PyBzc29SZWdpb24sXG4gICAgICAgICAgICB1c2VyQWdlbnRBcHBJZDogY2xpZW50Q29uZmlnPy51c2VyQWdlbnRBcHBJZCA/PyBwYXJlbnRDbGllbnRDb25maWc/LnVzZXJBZ2VudEFwcElkLFxuICAgICAgICB9KSk7XG4gICAgbGV0IHNzb1Jlc3A7XG4gICAgdHJ5IHtcbiAgICAgICAgc3NvUmVzcCA9IGF3YWl0IHNzby5zZW5kKG5ldyBHZXRSb2xlQ3JlZGVudGlhbHNDb21tYW5kKHtcbiAgICAgICAgICAgIGFjY291bnRJZDogc3NvQWNjb3VudElkLFxuICAgICAgICAgICAgcm9sZU5hbWU6IHNzb1JvbGVOYW1lLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5UHJvdmlkZXIuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGUsIHtcbiAgICAgICAgICAgIHRyeU5leHRMaW5rOiBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOLFxuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyByb2xlQ3JlZGVudGlhbHM6IHsgYWNjZXNzS2V5SWQsIHNlY3JldEFjY2Vzc0tleSwgc2Vzc2lvblRva2VuLCBleHBpcmF0aW9uLCBjcmVkZW50aWFsU2NvcGUsIGFjY291bnRJZCB9ID0ge30sIH0gPSBzc29SZXNwO1xuICAgIGlmICghYWNjZXNzS2V5SWQgfHwgIXNlY3JldEFjY2Vzc0tleSB8fCAhc2Vzc2lvblRva2VuIHx8ICFleHBpcmF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihcIlNTTyByZXR1cm5zIGFuIGludmFsaWQgdGVtcG9yYXJ5IGNyZWRlbnRpYWwuXCIsIHtcbiAgICAgICAgICAgIHRyeU5leHRMaW5rOiBTSE9VTERfRkFJTF9DUkVERU5USUFMX0NIQUlOLFxuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB7XG4gICAgICAgIGFjY2Vzc0tleUlkLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgIHNlc3Npb25Ub2tlbixcbiAgICAgICAgZXhwaXJhdGlvbjogbmV3IERhdGUoZXhwaXJhdGlvbiksXG4gICAgICAgIC4uLihjcmVkZW50aWFsU2NvcGUgJiYgeyBjcmVkZW50aWFsU2NvcGUgfSksXG4gICAgICAgIC4uLihhY2NvdW50SWQgJiYgeyBhY2NvdW50SWQgfSksXG4gICAgfTtcbiAgICBpZiAoc3NvU2Vzc2lvbikge1xuICAgICAgICBjbGllbnQuc2V0Q3JlZGVudGlhbEZlYXR1cmUoY3JlZGVudGlhbHMsIFwiQ1JFREVOVElBTFNfU1NPXCIsIFwic1wiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNsaWVudC5zZXRDcmVkZW50aWFsRmVhdHVyZShjcmVkZW50aWFscywgXCJDUkVERU5USUFMU19TU09fTEVHQUNZXCIsIFwidVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xufTtcblxuY29uc3QgdmFsaWRhdGVTc29Qcm9maWxlID0gKHByb2ZpbGUsIGxvZ2dlcikgPT4ge1xuICAgIGNvbnN0IHsgc3NvX3N0YXJ0X3VybCwgc3NvX2FjY291bnRfaWQsIHNzb19yZWdpb24sIHNzb19yb2xlX25hbWUgfSA9IHByb2ZpbGU7XG4gICAgaWYgKCFzc29fc3RhcnRfdXJsIHx8ICFzc29fYWNjb3VudF9pZCB8fCAhc3NvX3JlZ2lvbiB8fCAhc3NvX3JvbGVfbmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlQcm92aWRlci5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoYFByb2ZpbGUgaXMgY29uZmlndXJlZCB3aXRoIGludmFsaWQgU1NPIGNyZWRlbnRpYWxzLiBSZXF1aXJlZCBwYXJhbWV0ZXJzIFwic3NvX2FjY291bnRfaWRcIiwgYCArXG4gICAgICAgICAgICBgXCJzc29fcmVnaW9uXCIsIFwic3NvX3JvbGVfbmFtZVwiLCBcInNzb19zdGFydF91cmxcIi4gR290ICR7T2JqZWN0LmtleXMocHJvZmlsZSkuam9pbihcIiwgXCIpfVxcblJlZmVyZW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvdXNlcmd1aWRlL2NsaS1jb25maWd1cmUtc3NvLmh0bWxgLCB7IHRyeU5leHRMaW5rOiBmYWxzZSwgbG9nZ2VyIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcHJvZmlsZTtcbn07XG5cbmNvbnN0IGZyb21TU08gPSAoaW5pdCA9IHt9KSA9PiBhc3luYyAoeyBjYWxsZXJDbGllbnRDb25maWcgfSA9IHt9KSA9PiB7XG4gICAgaW5pdC5sb2dnZXI/LmRlYnVnKFwiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28gLSBmcm9tU1NPXCIpO1xuICAgIGNvbnN0IHsgc3NvU3RhcnRVcmwsIHNzb0FjY291bnRJZCwgc3NvUmVnaW9uLCBzc29Sb2xlTmFtZSwgc3NvU2Vzc2lvbiB9ID0gaW5pdDtcbiAgICBjb25zdCB7IHNzb0NsaWVudCB9ID0gaW5pdDtcbiAgICBjb25zdCBwcm9maWxlTmFtZSA9IHNoYXJlZEluaUZpbGVMb2FkZXIuZ2V0UHJvZmlsZU5hbWUoe1xuICAgICAgICBwcm9maWxlOiBpbml0LnByb2ZpbGUgPz8gY2FsbGVyQ2xpZW50Q29uZmlnPy5wcm9maWxlLFxuICAgIH0pO1xuICAgIGlmICghc3NvU3RhcnRVcmwgJiYgIXNzb0FjY291bnRJZCAmJiAhc3NvUmVnaW9uICYmICFzc29Sb2xlTmFtZSAmJiAhc3NvU2Vzc2lvbikge1xuICAgICAgICBjb25zdCBwcm9maWxlcyA9IGF3YWl0IHNoYXJlZEluaUZpbGVMb2FkZXIucGFyc2VLbm93bkZpbGVzKGluaXQpO1xuICAgICAgICBjb25zdCBwcm9maWxlID0gcHJvZmlsZXNbcHJvZmlsZU5hbWVdO1xuICAgICAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgUHJvZmlsZSAke3Byb2ZpbGVOYW1lfSB3YXMgbm90IGZvdW5kLmAsIHsgbG9nZ2VyOiBpbml0LmxvZ2dlciB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzU3NvUHJvZmlsZShwcm9maWxlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHByb3BlcnR5UHJvdmlkZXIuQ3JlZGVudGlhbHNQcm92aWRlckVycm9yKGBQcm9maWxlICR7cHJvZmlsZU5hbWV9IGlzIG5vdCBjb25maWd1cmVkIHdpdGggU1NPIGNyZWRlbnRpYWxzLmAsIHtcbiAgICAgICAgICAgICAgICBsb2dnZXI6IGluaXQubG9nZ2VyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2ZpbGU/LnNzb19zZXNzaW9uKSB7XG4gICAgICAgICAgICBjb25zdCBzc29TZXNzaW9ucyA9IGF3YWl0IHNoYXJlZEluaUZpbGVMb2FkZXIubG9hZFNzb1Nlc3Npb25EYXRhKGluaXQpO1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNzb1Nlc3Npb25zW3Byb2ZpbGUuc3NvX3Nlc3Npb25dO1xuICAgICAgICAgICAgY29uc3QgY29uZmxpY3RNc2cgPSBgIGNvbmZpZ3VyYXRpb25zIGluIHByb2ZpbGUgJHtwcm9maWxlTmFtZX0gYW5kIHNzby1zZXNzaW9uICR7cHJvZmlsZS5zc29fc2Vzc2lvbn1gO1xuICAgICAgICAgICAgaWYgKHNzb1JlZ2lvbiAmJiBzc29SZWdpb24gIT09IHNlc3Npb24uc3NvX3JlZ2lvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgQ29uZmxpY3RpbmcgU1NPIHJlZ2lvbmAgKyBjb25mbGljdE1zZywge1xuICAgICAgICAgICAgICAgICAgICB0cnlOZXh0TGluazogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcjogaW5pdC5sb2dnZXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3NvU3RhcnRVcmwgJiYgc3NvU3RhcnRVcmwgIT09IHNlc3Npb24uc3NvX3N0YXJ0X3VybCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBwcm9wZXJ0eVByb3ZpZGVyLkNyZWRlbnRpYWxzUHJvdmlkZXJFcnJvcihgQ29uZmxpY3RpbmcgU1NPIHN0YXJ0X3VybGAgKyBjb25mbGljdE1zZywge1xuICAgICAgICAgICAgICAgICAgICB0cnlOZXh0TGluazogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcjogaW5pdC5sb2dnZXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9maWxlLnNzb19yZWdpb24gPSBzZXNzaW9uLnNzb19yZWdpb247XG4gICAgICAgICAgICBwcm9maWxlLnNzb19zdGFydF91cmwgPSBzZXNzaW9uLnNzb19zdGFydF91cmw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzc29fc3RhcnRfdXJsLCBzc29fYWNjb3VudF9pZCwgc3NvX3JlZ2lvbiwgc3NvX3JvbGVfbmFtZSwgc3NvX3Nlc3Npb24gfSA9IHZhbGlkYXRlU3NvUHJvZmlsZShwcm9maWxlLCBpbml0LmxvZ2dlcik7XG4gICAgICAgIHJldHVybiByZXNvbHZlU1NPQ3JlZGVudGlhbHMoe1xuICAgICAgICAgICAgc3NvU3RhcnRVcmw6IHNzb19zdGFydF91cmwsXG4gICAgICAgICAgICBzc29TZXNzaW9uOiBzc29fc2Vzc2lvbixcbiAgICAgICAgICAgIHNzb0FjY291bnRJZDogc3NvX2FjY291bnRfaWQsXG4gICAgICAgICAgICBzc29SZWdpb246IHNzb19yZWdpb24sXG4gICAgICAgICAgICBzc29Sb2xlTmFtZTogc3NvX3JvbGVfbmFtZSxcbiAgICAgICAgICAgIHNzb0NsaWVudDogc3NvQ2xpZW50LFxuICAgICAgICAgICAgY2xpZW50Q29uZmlnOiBpbml0LmNsaWVudENvbmZpZyxcbiAgICAgICAgICAgIHBhcmVudENsaWVudENvbmZpZzogaW5pdC5wYXJlbnRDbGllbnRDb25maWcsXG4gICAgICAgICAgICBwcm9maWxlOiBwcm9maWxlTmFtZSxcbiAgICAgICAgICAgIGZpbGVwYXRoOiBpbml0LmZpbGVwYXRoLFxuICAgICAgICAgICAgY29uZmlnRmlsZXBhdGg6IGluaXQuY29uZmlnRmlsZXBhdGgsXG4gICAgICAgICAgICBpZ25vcmVDYWNoZTogaW5pdC5pZ25vcmVDYWNoZSxcbiAgICAgICAgICAgIGxvZ2dlcjogaW5pdC5sb2dnZXIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICghc3NvU3RhcnRVcmwgfHwgIXNzb0FjY291bnRJZCB8fCAhc3NvUmVnaW9uIHx8ICFzc29Sb2xlTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgcHJvcGVydHlQcm92aWRlci5DcmVkZW50aWFsc1Byb3ZpZGVyRXJyb3IoXCJJbmNvbXBsZXRlIGNvbmZpZ3VyYXRpb24uIFRoZSBmcm9tU1NPKCkgYXJndW1lbnQgaGFzaCBtdXN0IGluY2x1ZGUgXCIgK1xuICAgICAgICAgICAgJ1wic3NvU3RhcnRVcmxcIiwgXCJzc29BY2NvdW50SWRcIiwgXCJzc29SZWdpb25cIiwgXCJzc29Sb2xlTmFtZVwiJywgeyB0cnlOZXh0TGluazogZmFsc2UsIGxvZ2dlcjogaW5pdC5sb2dnZXIgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVNTT0NyZWRlbnRpYWxzKHtcbiAgICAgICAgICAgIHNzb1N0YXJ0VXJsLFxuICAgICAgICAgICAgc3NvU2Vzc2lvbixcbiAgICAgICAgICAgIHNzb0FjY291bnRJZCxcbiAgICAgICAgICAgIHNzb1JlZ2lvbixcbiAgICAgICAgICAgIHNzb1JvbGVOYW1lLFxuICAgICAgICAgICAgc3NvQ2xpZW50LFxuICAgICAgICAgICAgY2xpZW50Q29uZmlnOiBpbml0LmNsaWVudENvbmZpZyxcbiAgICAgICAgICAgIHBhcmVudENsaWVudENvbmZpZzogaW5pdC5wYXJlbnRDbGllbnRDb25maWcsXG4gICAgICAgICAgICBwcm9maWxlOiBwcm9maWxlTmFtZSxcbiAgICAgICAgICAgIGZpbGVwYXRoOiBpbml0LmZpbGVwYXRoLFxuICAgICAgICAgICAgY29uZmlnRmlsZXBhdGg6IGluaXQuY29uZmlnRmlsZXBhdGgsXG4gICAgICAgICAgICBpZ25vcmVDYWNoZTogaW5pdC5pZ25vcmVDYWNoZSxcbiAgICAgICAgICAgIGxvZ2dlcjogaW5pdC5sb2dnZXIsXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuZnJvbVNTTyA9IGZyb21TU087XG5leHBvcnRzLmlzU3NvUHJvZmlsZSA9IGlzU3NvUHJvZmlsZTtcbmV4cG9ydHMudmFsaWRhdGVTc29Qcm9maWxlID0gdmFsaWRhdGVTc29Qcm9maWxlO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogImlyQkFFQSxGQUFJLEVBQ0EsQ0FDQSxFQUNBLEVBQ0EsRUFFRSxIQUFnQixMQUFDLEZBQWEsR0FBYSxhQUFhLFdBQVcsQ0FBUSxFQUFJLEVBQVMsU0FBUyxNQUFRLEVBQVMsU0FBUyxLQUFPLE9BRWxJLEdBQXVCLENBQUMsSUFBc0IsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFJLENBQWlCLEVBRXJGLEdBQWdCLENBQUMsRUFBVyxJQUFzQixLQUFLLElBQUksR0FBcUIsQ0FBaUIsRUFBRSxRQUFRLEVBQUksQ0FBUyxHQUFLLE9BRTdILEdBQThCLENBQUMsRUFBVyxJQUE2QixDQUN6RSxJQUFNLEVBQWdCLEtBQUssTUFBTSxDQUFTLEVBQzFDLEdBQUksR0FBYyxFQUFlLENBQXdCLEVBQ3JELE9BQU8sRUFBZ0IsS0FBSyxJQUFJLEVBRXBDLE9BQU8sR0FHTCxFQUE0QixDQUFDLEVBQU0sSUFBYSxDQUNsRCxHQUFJLENBQUMsRUFDRCxNQUFVLE1BQU0sY0FBYywyQ0FBOEMsRUFFaEYsT0FBTyxHQUVMLEdBQTRCLE1BQU8sSUFBc0IsQ0FDM0QsSUFBTSxFQUFVLEVBQTBCLFVBQVcsRUFBa0IsT0FBTyxFQUN4RSxFQUFTLEVBQTBCLFNBQVUsRUFBa0IsTUFBTSxFQUNyRSxFQUFhLEVBQVEsWUFBWSxZQUFZLGNBQWMsR0FFM0QsRUFBUyxNQURRLEVBQTBCLFNBQVUsRUFBTyxNQUFNLEVBQ3BDLENBQVUsRUFDeEMsRUFBZ0IsR0FBbUIsY0FDbkMsRUFBbUIsR0FBbUIsaUJBQ3RDLEVBQWMsR0FBbUIsWUFDdkMsTUFBTyxDQUNILFNBQ0EsU0FDQSxnQkFDQSxtQkFDQSxhQUNKLEdBRUosTUFBTSxDQUFrQixNQUNkLEtBQUksQ0FBQyxFQUFhLEVBQVUsRUFBbUIsQ0FDakQsR0FBSSxDQUFDLEdBQWEsWUFBWSxXQUFXLENBQVcsRUFDaEQsTUFBVSxNQUFNLHNFQUFzRSxFQUUxRixJQUFNLEVBQWlCLE1BQU0sR0FBMEIsQ0FBaUIsR0FDaEUsU0FBUSxVQUFXLEdBQ3JCLGdCQUFlLGVBQWdCLEVBQy9CLEVBQTBCLEVBQWtCLFFBQ2xELEdBQUksR0FBeUIsYUFBYSxRQUFVLEdBQU8sQ0FDdkQsSUFBTyxFQUFPLEdBQVUsRUFBd0IsWUFDaEQsR0FBSSxHQUFPLE9BQVMsVUFBWSxHQUFRLE9BQVMsUUFDN0MsRUFBZ0IsR0FBUSxlQUFpQixFQUN6QyxFQUFjLEdBQVEsYUFBZSxFQVE3QyxPQUxzQixNQUFNLEVBQU8sS0FBSyxFQUFhLENBQ2pELFlBQWEsR0FBcUIsRUFBTyxpQkFBaUIsRUFDMUQsY0FBZSxFQUNmLGVBQWdCLENBQ3BCLENBQUMsRUFHTCxZQUFZLENBQUMsRUFBbUIsQ0FDNUIsTUFBTyxDQUFDLElBQVUsQ0FDZCxJQUFNLEVBQWEsRUFBTSxZQUFjLEdBQWMsRUFBTSxTQUFTLEVBQ3BFLEdBQUksRUFBWSxDQUNaLElBQU0sRUFBUyxFQUEwQixTQUFVLEVBQWtCLE1BQU0sRUFDckUsRUFBMkIsRUFBTyxrQkFHeEMsR0FGQSxFQUFPLGtCQUFvQixHQUE0QixFQUFZLEVBQU8saUJBQWlCLEVBQ2hFLEVBQU8sb0JBQXNCLEdBQzlCLEVBQU0sVUFDNUIsRUFBTSxVQUFVLG1CQUFxQixHQUc3QyxNQUFNLEdBR2QsY0FBYyxDQUFDLEVBQWMsRUFBbUIsQ0FDNUMsSUFBTSxFQUFhLEdBQWMsQ0FBWSxFQUM3QyxHQUFJLEVBQVksQ0FDWixJQUFNLEVBQVMsRUFBMEIsU0FBVSxFQUFrQixNQUFNLEVBQzNFLEVBQU8sa0JBQW9CLEdBQTRCLEVBQVksRUFBTyxpQkFBaUIsR0FHdkcsQ0FDQSxJQUFNLEdBQW9CLEVBRTFCLE1BQU0sV0FBMkIsQ0FBa0IsTUFDekMsS0FBSSxDQUFDLEVBQWEsRUFBVSxFQUFtQixDQUNqRCxHQUFJLENBQUMsR0FBYSxZQUFZLFdBQVcsQ0FBVyxFQUNoRCxNQUFVLE1BQU0sc0VBQXNFLEVBRTFGLElBQVEsU0FBUSxTQUFRLGdCQUFlLG1CQUFrQixlQUFnQixNQUFNLEdBQTBCLENBQWlCLEVBRXBILEdBRGlDLE1BQU0sRUFBTyx5QkFBeUIsR0FFekUsR0FBb0IsQ0FBQyxDQUFhLEdBQUcsS0FBSyxHQUFHLEVBTWpELE9BTHNCLE1BQU0sRUFBTyxLQUFLLEVBQWEsQ0FDakQsWUFBYSxHQUFxQixFQUFPLGlCQUFpQixFQUMxRCxjQUFlLEVBQ2YsZUFBZ0IsQ0FDcEIsQ0FBQyxFQUdULENBRUEsSUFBTSxHQUFrQyxDQUFDLElBQVEsT0FBTyxJQUFRLFVBQVksRUFBSSxPQUFTLEVBQUksRUFBSSxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBUyxFQUFLLEtBQUssQ0FBQyxFQUFJLENBQUMsRUFFcEksR0FBdUIsQ0FBQyxJQUFnQixvQkFBb0IsRUFBWSxRQUFRLFNBQVUsR0FBRyxFQUFFLFlBQVksSUFFM0csR0FBc0MsNkJBQ3RDLEdBQXlDLHlCQUN6QyxHQUFzQyxDQUN4Qyw0QkFBNkIsQ0FBQyxFQUFLLElBQVksQ0FDM0MsR0FBSSxHQUFTLGFBRVQsR0FEdUIsR0FBcUIsRUFBUSxXQUFXLElBQ3pDLEVBQ2xCLE1BQU8sQ0FBQyxnQkFBZ0IsRUFFaEMsR0FBSSxFQUFFLE1BQXVDLEdBQ3pDLE9BQ0osT0FBTyxHQUFnQyxFQUFJLEdBQW9DLEdBRW5GLG1CQUFvQixDQUFDLElBQVksQ0FDN0IsR0FBSSxFQUFFLE1BQTBDLEdBQzVDLE9BQ0osT0FBTyxHQUFnQyxFQUFRLEdBQXVDLEdBRTFGLFFBQVMsQ0FBQyxDQUNkLEVBRU0sR0FBNEIsQ0FBQyxJQUFXLENBRTFDLE9BREEsRUFBTyx1QkFBeUIsRUFBSyxrQkFBa0IsRUFBTyxzQkFBc0IsRUFDN0UsR0FFTCxHQUE2QixDQUMvQiwyQkFBMkIsQ0FBQyxFQUFLLENBQzdCLEdBQUksRUFBSSw4QkFDSixPQUFPLEVBQUksOEJBQThCLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFNLEVBQUUsS0FBSyxDQUFDLEVBRTNFLE1BQU0sSUFBSSxHQUFpQixjQUFjLGdEQUFpRCxDQUN0RixZQUFhLEVBQ2pCLENBQUMsR0FFTCxrQkFBa0IsQ0FBQyxFQUFTLENBQ3hCLEdBQUksRUFBUSwwQkFDUixPQUFRLEVBQVEsMkJBQTZCLElBQUksTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQU0sRUFBRSxLQUFLLENBQUMsRUFFbkYsTUFBTSxJQUFJLEdBQWlCLGNBQWMsZ0RBQWlELENBQ3RGLFlBQWEsRUFDakIsQ0FBQyxHQUVMLFFBQVMsTUFDYixFQUVNLEdBQTJCLENBQUMsSUFBVyxDQUN6QyxJQUFJLEVBQW1CLEVBQU8sWUFDMUIsRUFBaUIsQ0FBQyxDQUFDLEVBQU8sWUFDMUIsRUFBc0IsT0FDMUIsT0FBTyxlQUFlLEVBQVEsY0FBZSxDQUN6QyxHQUFHLENBQUMsRUFBYSxDQUNiLEdBQUksR0FBZSxJQUFnQixHQUFvQixJQUFnQixFQUNuRSxFQUFpQixHQUVyQixFQUFtQixFQUNuQixJQUFNLEVBQW1CLEdBQTRCLEVBQVEsQ0FDekQsWUFBYSxFQUNiLDBCQUEyQixFQUFPLHlCQUN0QyxDQUFDLEVBQ0ssRUFBZ0IsR0FBaUIsRUFBUSxDQUFnQixFQUMvRCxHQUFJLEdBQWtCLENBQUMsRUFBYyxXQUNqQyxFQUFzQixNQUFPLElBQVksRUFBYyxDQUFPLEVBQUUsS0FBSyxDQUFDLElBQVUsR0FBTyxxQkFBcUIsRUFBTyxtQkFBb0IsR0FBRyxDQUFDLEVBQzNJLEVBQW9CLFNBQVcsRUFBYyxTQUM3QyxFQUFvQixZQUFjLEVBQWMsWUFDaEQsRUFBb0IsV0FBYSxHQUdqQyxPQUFzQixHQUc5QixHQUFHLEVBQUcsQ0FDRixPQUFPLEdBRVgsV0FBWSxHQUNaLGFBQWMsRUFDbEIsQ0FBQyxFQUNELEVBQU8sWUFBYyxFQUNyQixJQUFRLG9CQUFvQixHQUFNLG9CQUFvQixFQUFPLG1CQUFxQixFQUFHLFVBQVksRUFDN0YsRUFDSixHQUFJLEVBQU8sT0FDUCxFQUFTLEVBQUssa0JBQWtCLEVBQU8sTUFBTSxFQUU1QyxRQUFJLEVBQU8sbUJBQ1osRUFBUyxJQUFNLEVBQUssa0JBQWtCLEVBQU8sTUFBTSxFQUFFLEVBQ2hELEtBQUssTUFBTyxJQUFXLENBQ3ZCLE1BQU0sRUFBTyxtQkFBbUIsRUFBUSxDQUNyQyxnQkFBaUIsTUFBTSxFQUFPLGdCQUFnQixFQUM5QyxxQkFBc0IsTUFBTSxFQUFPLHFCQUFxQixDQUM1RCxDQUFDLEdBQU0sQ0FBQyxFQUNSLENBQ0osQ0FBQyxFQUNJLEtBQUssRUFBRSxFQUFZLEtBQVksQ0FDaEMsSUFBUSxnQkFBZSxrQkFBbUIsRUFDMUMsRUFBTyxjQUFnQixFQUFPLGVBQWlCLEdBQWlCLEVBQ2hFLEVBQU8sWUFBYyxFQUFPLGFBQWUsR0FBa0IsRUFBTyxVQUNwRSxJQUFNLEVBQVMsSUFDUixFQUNILFlBQWEsRUFBTyxZQUNwQixPQUFRLEVBQU8sY0FDZixRQUFTLEVBQU8sWUFDaEIsU0FDQSxjQUFlLENBQ25CLEVBRUEsT0FBTyxJQURZLEVBQU8sbUJBQXFCLEdBQVksYUFDckMsQ0FBTSxFQUMvQixFQUdELE9BQVMsTUFBTyxJQUFlLENBQzNCLEVBQWEsT0FBTyxPQUFPLENBQUMsRUFBRyxDQUMzQixLQUFNLFFBQ04sWUFBYSxFQUFPLGFBQWUsRUFBTyxtQkFDMUMsY0FBZSxNQUFNLEVBQUssa0JBQWtCLEVBQU8sTUFBTSxFQUFFLEVBQzNELFdBQVksQ0FBQyxDQUNqQixFQUFHLENBQVUsRUFDYixJQUFpQyxjQUEzQixFQUM0QixZQUE1QixHQUFpQixFQUN2QixFQUFPLGNBQWdCLEVBQU8sZUFBaUIsRUFDL0MsRUFBTyxZQUFjLEVBQU8sYUFBZSxHQUFrQixFQUFPLFVBQ3BFLElBQU0sRUFBUyxJQUNSLEVBQ0gsWUFBYSxFQUFPLFlBQ3BCLE9BQVEsRUFBTyxjQUNmLFFBQVMsRUFBTyxZQUNoQixTQUNBLGNBQWUsQ0FDbkIsRUFFQSxPQUFPLElBRFksRUFBTyxtQkFBcUIsR0FBWSxhQUNyQyxDQUFNLEdBUXBDLE9BTHVCLE9BQU8sT0FBTyxFQUFRLENBQ3pDLG9CQUNBLG9CQUNBLFFBQ0osQ0FBQyxHQUdDLEdBQTJCLEdBQ2pDLFNBQVMsRUFBMkIsQ0FBQyxHQUFVLGNBQWEsNkJBQThCLENBQ3RGLElBQUksRUFDSixHQUFJLEVBQ0EsR0FBSSxDQUFDLEdBQWEsU0FDZCxFQUFzQixFQUFLLHdCQUF3QixFQUFhLEVBQUssa0JBQW1CLEVBQUssMEJBQTBCLEVBR3ZILE9BQXNCLEVBSTFCLFFBQUksRUFDQSxFQUFzQixFQUFLLGtCQUFrQixFQUEwQixPQUFPLE9BQU8sQ0FBQyxFQUFHLEVBQVEsQ0FDN0YsbUJBQW9CLENBQ3hCLENBQUMsQ0FBQyxDQUFDLEVBR0gsT0FBc0IsU0FBWSxDQUM5QixNQUFVLE1BQU0sdUhBQXVILEdBS25KLE9BREEsRUFBb0IsU0FBVyxHQUN4QixFQUVYLFNBQVMsRUFBZ0IsQ0FBQyxFQUFRLEVBQXFCLENBQ25ELEdBQUksRUFBb0IsWUFDcEIsT0FBTyxFQUVYLElBQU0sRUFBSyxNQUFPLElBQVksRUFBb0IsSUFBSyxFQUFTLG1CQUFvQixDQUFPLENBQUMsRUFHNUYsT0FGQSxFQUFHLFNBQVcsRUFBb0IsU0FDbEMsRUFBRyxZQUFjLEdBQ1YsRUFHSCxxQkFBb0IsR0FDcEIsc0JBQXFCLEdBQ3JCLHFCQUFvQixFQUNwQix1Q0FBc0MsR0FDdEMsOEJBQTZCLEdBQzdCLHdCQUF1QixHQUN2Qiw0QkFBMkIsR0FDM0IsNkJBQTRCLEdBQzVCLDRCQUEyQixHQUMzQiw2QkFBNEIscUJDeFNwQyxJQUFJLFFBQ0EsUUFDQSxPQUNBLE9BQ0EsWUFFRSxHQUFxQixFQUFHLFNBQVEsZUFBZ0IsQ0FBQyxJQUFNLFNBQVksQ0FFckUsR0FEQSxHQUFRLFFBQVEsK0NBQStDLEVBQzNELENBQUMsRUFDRCxNQUFNLElBQUksRUFBaUIsbUJBQW1CLGdFQUFpRSxDQUFFLFFBQU8sQ0FBQyxFQUU3SCxJQUFNLEVBQWlCLEdBQWdCLHFCQUFxQixDQUFXLEVBQ3ZFLEdBQUksRUFBRSxLQUFrQixRQUFRLEtBQzVCLE1BQU0sSUFBSSxFQUFpQixtQkFBbUIseUJBQXlCLDBCQUF3QyxDQUFFLFFBQU8sQ0FBQyxFQUU3SCxJQUFNLEVBQVEsQ0FBRSxNQUFPLFFBQVEsSUFBSSxFQUFnQixFQUVuRCxPQURBLEdBQU8sZ0JBQWdCLEVBQU8sMEJBQTJCLEdBQUcsRUFDckQsR0FHTCxHQUFtQixPQUNuQixHQUFrQixrRkFFbEIsR0FBbUIsTUFBTyxFQUFXLEVBQU8sQ0FBQyxJQUFNLENBQ3JELElBQVEsaUJBQWtCLEtBQWEsK0JBQ2pDLEVBQVcsQ0FBQyxJQUFTLEVBQUssZUFBZSxJQUFTLEVBQUsscUJBQXFCLEdBTWxGLE9BTHNCLElBQUksRUFBYyxPQUFPLE9BQU8sQ0FBQyxFQUFHLEVBQUssY0FBZ0IsQ0FBQyxFQUFHLENBQy9FLE9BQVEsR0FBYSxFQUFLLGNBQWMsT0FDeEMsT0FBUSxFQUFTLFFBQVEsRUFDekIsZUFBZ0IsRUFBUyxnQkFBZ0IsQ0FDN0MsQ0FBQyxDQUFDLEdBSUEsR0FBcUIsTUFBTyxFQUFVLEVBQVcsRUFBTyxDQUFDLElBQU0sQ0FDakUsSUFBUSxzQkFBdUIsS0FBYSwrQkFFNUMsT0FEc0IsTUFBTSxHQUFpQixFQUFXLENBQUksR0FDdkMsS0FBSyxJQUFJLEVBQW1CLENBQzdDLFNBQVUsRUFBUyxTQUNuQixhQUFjLEVBQVMsYUFDdkIsYUFBYyxFQUFTLGFBQ3ZCLFVBQVcsZUFDZixDQUFDLENBQUMsR0FHQSxHQUFzQixDQUFDLElBQVUsQ0FDbkMsR0FBSSxFQUFNLFlBQWMsRUFBTSxXQUFXLFFBQVEsRUFBSSxLQUFLLElBQUksRUFDMUQsTUFBTSxJQUFJLEVBQWlCLG1CQUFtQixxQkFBcUIsS0FBbUIsRUFBSyxHQUk3RixFQUFtQixDQUFDLEVBQUssRUFBTyxFQUFhLEtBQVUsQ0FDekQsR0FBSSxPQUFPLEVBQVUsSUFDakIsTUFBTSxJQUFJLEVBQWlCLG1CQUFtQiwwQkFBMEIsa0JBQW9CLEVBQWEsbUJBQXFCLE9BQU8sS0FBbUIsRUFBSyxJQUk3SixjQUFjLEdBQUcsU0FDbkIsR0FBc0IsQ0FBQyxFQUFJLElBQWEsQ0FDMUMsSUFBTSxFQUFnQixFQUFvQixvQkFBb0IsQ0FBRSxFQUMxRCxFQUFjLEtBQUssVUFBVSxFQUFVLEtBQU0sQ0FBQyxFQUNwRCxPQUFPLEdBQVUsRUFBZSxDQUFXLEdBR3pDLEdBQXlCLElBQUksS0FBSyxDQUFDLEVBQ25DLEdBQVUsQ0FBQyxFQUFRLENBQUMsSUFBTSxPQUFTLHNCQUF1QixDQUFDLElBQU0sQ0FDbkUsSUFBTSxFQUFPLElBQ04sRUFDSCxtQkFBb0IsSUFDYixLQUNBLEVBQU0sa0JBQ2IsQ0FDSixFQUNBLEVBQUssUUFBUSxNQUFNLG9DQUFvQyxFQUN2RCxJQUFNLEVBQVcsTUFBTSxFQUFvQixnQkFBZ0IsQ0FBSSxFQUN6RCxFQUFjLEVBQW9CLGVBQWUsQ0FDbkQsUUFBUyxFQUFLLFNBQVcsR0FBb0IsT0FDakQsQ0FBQyxFQUNLLEVBQVUsRUFBUyxHQUN6QixHQUFJLENBQUMsRUFDRCxNQUFNLElBQUksRUFBaUIsbUJBQW1CLFlBQVksb0RBQStELEVBQUssRUFFN0gsUUFBSSxDQUFDLEVBQVEsWUFDZCxNQUFNLElBQUksRUFBaUIsbUJBQW1CLFlBQVksZ0RBQTBELEVBRXhILElBQU0sRUFBaUIsRUFBUSxZQUV6QixHQURjLE1BQU0sRUFBb0IsbUJBQW1CLENBQUksR0FDdEMsR0FDL0IsR0FBSSxDQUFDLEVBQ0QsTUFBTSxJQUFJLEVBQWlCLG1CQUFtQixnQkFBZ0Isb0RBQWtFLEVBQUssRUFFekksUUFBVyxJQUF5QixDQUFDLGdCQUFpQixZQUFZLEVBQzlELEdBQUksQ0FBQyxFQUFXLEdBQ1osTUFBTSxJQUFJLEVBQWlCLG1CQUFtQixnQkFBZ0Isb0NBQWlELE1BQTJCLEVBQUssRUFHdkosRUFBVyxjQUNYLElBQU0sRUFBWSxFQUFXLFdBQ3pCLEVBQ0osR0FBSSxDQUNBLEVBQVcsTUFBTSxFQUFvQixvQkFBb0IsQ0FBYyxFQUUzRSxNQUFPLEVBQUcsQ0FDTixNQUFNLElBQUksRUFBaUIsbUJBQW1CLGlEQUFpRCxrQ0FBNEMsS0FBbUIsRUFBSyxFQUV2SyxFQUFpQixjQUFlLEVBQVMsV0FBVyxFQUNwRCxFQUFpQixZQUFhLEVBQVMsU0FBUyxFQUNoRCxJQUFRLGNBQWEsYUFBYyxFQUM3QixFQUFnQixDQUFFLE1BQU8sRUFBYSxXQUFZLElBQUksS0FBSyxDQUFTLENBQUUsRUFDNUUsR0FBSSxFQUFjLFdBQVcsUUFBUSxFQUFJLEtBQUssSUFBSSxFQUFJLEdBQ2xELE9BQU8sRUFFWCxHQUFJLEtBQUssSUFBSSxFQUFJLEdBQXVCLFFBQVEsRUFBSSxNQUVoRCxPQURBLEdBQW9CLENBQWEsRUFDMUIsRUFFWCxFQUFpQixXQUFZLEVBQVMsU0FBVSxFQUFJLEVBQ3BELEVBQWlCLGVBQWdCLEVBQVMsYUFBYyxFQUFJLEVBQzVELEVBQWlCLGVBQWdCLEVBQVMsYUFBYyxFQUFJLEVBQzVELEdBQUksQ0FDQSxHQUF1QixRQUFRLEtBQUssSUFBSSxDQUFDLEVBQ3pDLElBQU0sRUFBa0IsTUFBTSxHQUFtQixFQUFVLEVBQVcsQ0FBSSxFQUMxRSxFQUFpQixjQUFlLEVBQWdCLFdBQVcsRUFDM0QsRUFBaUIsWUFBYSxFQUFnQixTQUFTLEVBQ3ZELElBQU0sRUFBcUIsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFJLEVBQWdCLFVBQVksSUFBSSxFQUNqRixHQUFJLENBQ0EsTUFBTSxHQUFvQixFQUFnQixJQUNuQyxFQUNILFlBQWEsRUFBZ0IsWUFDN0IsVUFBVyxFQUFtQixZQUFZLEVBQzFDLGFBQWMsRUFBZ0IsWUFDbEMsQ0FBQyxFQUVMLE1BQU8sR0FBTyxFQUVkLE1BQU8sQ0FDSCxNQUFPLEVBQWdCLFlBQ3ZCLFdBQVksQ0FDaEIsRUFFSixNQUFPLEVBQU8sQ0FFVixPQURBLEdBQW9CLENBQWEsRUFDMUIsSUFJVCxHQUFhLEVBQUcsUUFBTyxZQUFhLFNBQVksQ0FFbEQsR0FEQSxHQUFRLE1BQU0sdUNBQXVDLEVBQ2pELENBQUMsR0FBUyxDQUFDLEVBQU0sTUFDakIsTUFBTSxJQUFJLEVBQWlCLG1CQUFtQiwwQ0FBMkMsRUFBSyxFQUVsRyxPQUFPLEdBR0wsR0FBZSxDQUFDLEVBQU8sQ0FBQyxJQUFNLEVBQWlCLFFBQVEsRUFBaUIsTUFBTSxHQUFRLENBQUksRUFBRyxTQUFZLENBQzNHLE1BQU0sSUFBSSxFQUFpQixtQkFBbUIsMENBQTJDLEVBQUssRUFDakcsRUFBRyxDQUFDLElBQVUsRUFBTSxhQUFlLFFBQWEsRUFBTSxXQUFXLFFBQVEsRUFBSSxLQUFLLElBQUksRUFBSSxPQUFRLENBQUMsSUFBVSxFQUFNLGFBQWUsTUFBUyxFQUVwSSxzQkFBcUIsR0FDckIsV0FBVSxHQUNWLGNBQWEsR0FDYixnQkFBZSxxQkNsS3ZCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCwrQkFBc0Msb0NBQTJDLDhDQUFrRCxPQUMzSSxJQUFNLFFBQ0EsUUFDQSxHQUE2QyxNQUFPLEVBQVEsRUFBUyxJQUFVLENBQ2pGLE1BQU8sQ0FDSCxXQUFZLEVBQUcsR0FBa0Isa0JBQWtCLENBQU8sRUFBRSxVQUM1RCxPQUFTLE1BQU8sRUFBRyxHQUFrQixtQkFBbUIsRUFBTyxNQUFNLEVBQUUsSUFDbEUsSUFBTSxDQUNILE1BQVUsTUFBTSx5REFBeUQsSUFDMUUsQ0FDWCxHQUVJLDhDQUE2QyxHQUNyRCxTQUFTLEVBQWdDLENBQUMsRUFBZ0IsQ0FDdEQsTUFBTyxDQUNILFNBQVUsaUJBQ1Ysa0JBQW1CLENBQ2YsS0FBTSxlQUNOLE9BQVEsRUFBZSxNQUMzQixFQUNBLG9CQUFxQixDQUFDLEVBQVEsS0FBYSxDQUN2QyxrQkFBbUIsQ0FDZixTQUNBLFNBQ0osQ0FDSixFQUNKLEVBRUosU0FBUyxDQUFtQyxDQUFDLEVBQWdCLENBQ3pELE1BQU8sQ0FDSCxTQUFVLG1CQUNkLEVBRUosSUFBTSxHQUFtQyxDQUFDLElBQW1CLENBQ3pELElBQU0sRUFBVSxDQUFDLEVBQ2pCLE9BQVEsRUFBZSxlQUNkLHFCQUFzQixDQUN2QixFQUFRLEtBQUssRUFBb0MsQ0FBYyxDQUFDLEVBQ2hFLEtBQ0osS0FDSyxtQkFBb0IsQ0FDckIsRUFBUSxLQUFLLEVBQW9DLENBQWMsQ0FBQyxFQUNoRSxLQUNKLEtBQ0ssZUFBZ0IsQ0FDakIsRUFBUSxLQUFLLEVBQW9DLENBQWMsQ0FBQyxFQUNoRSxLQUNKLEtBQ0ssU0FBVSxDQUNYLEVBQVEsS0FBSyxFQUFvQyxDQUFjLENBQUMsRUFDaEUsS0FDSixTQUVJLEVBQVEsS0FBSyxHQUFpQyxDQUFjLENBQUMsRUFHckUsT0FBTyxHQUVILG9DQUFtQyxHQUMzQyxJQUFNLEdBQThCLENBQUMsSUFBVyxDQUM1QyxJQUFNLEdBQVksRUFBRyxHQUFPLDBCQUEwQixDQUFNLEVBQzVELE9BQU8sT0FBTyxPQUFPLEVBQVUsQ0FDM0Isc0JBQXVCLEVBQUcsR0FBa0IsbUJBQW1CLEVBQU8sc0JBQXdCLENBQUMsQ0FBQyxDQUNwRyxDQUFDLEdBRUcsK0JBQThCLDYyRkNsRXRDLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxXQUFlLE9BQ3ZCLElBQU0sR0FBSSxXQUFZLEVBQUksS0FBTSxFQUFJLE9BQVEsRUFBSSxNQUMxQyxHQUFJLEdBQU0sR0FBSSxRQUFTLEVBQUksZ0JBQWlCLEVBQUksUUFBUyxFQUFJLFdBQVksRUFBSSxPQUFRLEdBQUksa0JBQW1CLEdBQUksVUFBVyxHQUFJLEVBQUcsSUFBSSxHQUFPLEtBQVEsUUFBUyxFQUFHLEdBQUksRUFBRyxJQUFJLEdBQU0sUUFBVyxHQUFPLEtBQVEsU0FBVSxFQUFHLEdBQUksRUFBRyxHQUFJLFVBQVcsRUFBRyxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLEdBQUksU0FBVSxFQUFHLEVBQUksQ0FBRSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsR0FBSSxjQUFlLEVBQUcsRUFBSSxDQUFFLEVBQUcsRUFBSSxDQUFDLEVBQUcsR0FBSSxFQUFHLEdBQUksSUFBSSxHQUFJLENBQUMsRUFBRyxHQUFJLEVBQUUsRUFBRyxjQUFjLENBQUUsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFFLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLENBQUMsR0FBTSxFQUFHLEdBQUksSUFBSSxHQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBRSxDQUFDLENBQUUsRUFBRyxHQUFJLENBQUMsRUFBQyxFQUFHLEdBQUksQ0FBQyxFQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBSSxRQUFTLENBQUMsRUFDcGhCLEdBQVEsQ0FBRSxRQUFTLE1BQU8sV0FBWSxDQUFFLE9BQVEsR0FBRyxhQUFjLEdBQUcsUUFBUyxHQUFHLFNBQVUsRUFBRSxFQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxFQUFHLEdBQUksSUFBSSxHQUFJLENBQUMsRUFBQyxDQUFFLENBQUMsRUFBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLEdBQUcsTUFBTyxvRUFBcUUsS0FBTSxDQUFFLEVBQUcsQ0FBRSxXQUFZLEdBQUcsTUFBTyx5RUFBMEUsS0FBTSxDQUFFLEVBQUcsQ0FBRSxTQUFVLENBQUUsSUFBSyxHQUFHLFdBQVksRUFBRyxRQUFTLENBQUUsRUFBRyxLQUFNLENBQUUsQ0FBQyxFQUFHLEtBQU0sQ0FBRSxFQUFHLENBQUUsV0FBWSxDQUFDLEVBQUcsR0FBSSxJQUFJLEdBQUksRUFBRSxDQUFDLEVBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEVBQUcsR0FBSSxpQkFBa0IsR0FBSSxHQUFHLE9BQVEsRUFBRSxDQUFDLEVBQUcsTUFBTyxDQUFDLENBQUUsV0FBWSxDQUFDLEdBQUcsRUFBQyxFQUFHLE1BQU8sQ0FBQyxDQUFFLFdBQVksQ0FBQyxFQUFHLEdBQUksR0FBSSxHQUFJLENBQUMsR0FBRyxFQUFDLENBQUUsRUFBRyxFQUFDLEVBQUcsTUFBTyxDQUFDLENBQUUsU0FBVSxDQUFFLElBQUssd0VBQXlFLFdBQVksRUFBRyxRQUFTLENBQUUsRUFBRyxLQUFNLENBQUUsQ0FBQyxFQUFHLEtBQU0sQ0FBRSxFQUFHLENBQUUsTUFBTyxrRkFBbUYsS0FBTSxDQUFFLENBQUMsRUFBRyxLQUFNLENBQUUsRUFBRyxDQUFFLFdBQVksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxDQUFDLEdBQUcsRUFBQyxDQUFFLENBQUMsRUFBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsRUFBRyxHQUFJLGdCQUFpQixHQUFJLENBQUMsRUFBRyxHQUFJLElBQUksR0FBSSxDQUFDLEdBQUcsTUFBTSxDQUFFLEVBQUcsWUFBWSxDQUFFLENBQUMsRUFBRyxTQUFVLENBQUUsSUFBSyw0Q0FBNkMsV0FBWSxFQUFHLFFBQVMsQ0FBRSxFQUFHLEtBQU0sQ0FBRSxFQUFHLENBQUUsU0FBVSxDQUFFLElBQUssK0RBQWdFLFdBQVksRUFBRyxRQUFTLENBQUUsRUFBRyxLQUFNLENBQUUsQ0FBQyxFQUFHLEtBQU0sQ0FBRSxFQUFHLENBQUUsTUFBTywyREFBNEQsS0FBTSxDQUFFLENBQUMsRUFBRyxLQUFNLENBQUUsRUFBRyxDQUFFLFdBQVksR0FBRyxNQUFPLENBQUMsQ0FBRSxXQUFZLENBQUMsRUFBQyxFQUFHLE1BQU8sQ0FBQyxDQUFFLFNBQVUsQ0FBRSxJQUFLLG1FQUFvRSxXQUFZLEVBQUcsUUFBUyxDQUFFLEVBQUcsS0FBTSxDQUFFLENBQUMsRUFBRyxLQUFNLENBQUUsRUFBRyxDQUFFLE1BQU8scUVBQXNFLEtBQU0sQ0FBRSxDQUFDLEVBQUcsS0FBTSxDQUFFLEVBQUcsQ0FBRSxTQUFVLENBQUUsSUFBSywwREFBMkQsV0FBWSxFQUFHLFFBQVMsQ0FBRSxFQUFHLEtBQU0sQ0FBRSxDQUFDLEVBQUcsS0FBTSxDQUFFLENBQUMsRUFBRyxLQUFNLENBQUUsRUFBRyxDQUFFLE1BQU8sd0NBQXlDLEtBQU0sQ0FBRSxDQUFDLENBQUUsRUFDdjFELFdBQVUscUJDTGxCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCwyQkFBK0IsT0FDdkMsSUFBTSxRQUNBLFFBQ0EsUUFDQSxHQUFRLElBQUksR0FBaUIsY0FBYyxDQUM3QyxLQUFNLEdBQ04sT0FBUSxDQUFDLFdBQVksU0FBVSxlQUFnQixTQUFTLENBQzVELENBQUMsRUFDSyxHQUEwQixDQUFDLEVBQWdCLEVBQVUsQ0FBQyxJQUFNLENBQzlELE9BQU8sR0FBTSxJQUFJLEVBQWdCLEtBQU8sRUFBRyxHQUFpQixpQkFBaUIsR0FBVSxRQUFTLENBQzVGLGVBQWdCLEVBQ2hCLE9BQVEsRUFBUSxNQUNwQixDQUFDLENBQUMsR0FFRSwyQkFBMEIsR0FDbEMsR0FBaUIsd0JBQXdCLElBQU0sR0FBaUIsdUNDaEJoRSxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsb0JBQXdCLE9BQ2hDLElBQU0sUUFDQSxRQUNBLFFBQ0EsT0FDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsR0FBbUIsQ0FBQyxJQUFXLENBQ2pDLE1BQU8sQ0FDSCxXQUFZLGFBQ1osY0FBZSxHQUFRLGVBQWlCLEdBQWMsV0FDdEQsY0FBZSxHQUFRLGVBQWlCLEdBQWMsU0FDdEQsa0JBQW1CLEdBQVEsbUJBQXFCLEdBQ2hELGlCQUFrQixHQUFRLGtCQUFvQixHQUFtQix3QkFDakUsV0FBWSxHQUFRLFlBQWMsQ0FBQyxFQUNuQyx1QkFBd0IsR0FBUSx3QkFBMEIsR0FBeUIsaUNBQ25GLGdCQUFpQixHQUFRLGlCQUFtQixDQUN4QyxDQUNJLFNBQVUsaUJBQ1YsaUJBQWtCLENBQUMsSUFBUSxFQUFJLG9CQUFvQixnQkFBZ0IsRUFDbkUsT0FBUSxJQUFJLEdBQU8saUJBQ3ZCLEVBQ0EsQ0FDSSxTQUFVLG9CQUNWLGlCQUFrQixDQUFDLElBQVEsRUFBSSxvQkFBb0IsbUJBQW1CLElBQU0sVUFBYSxDQUFDLElBQzFGLE9BQVEsSUFBSSxHQUFPLFlBQ3ZCLENBQ0osRUFDQSxPQUFRLEdBQVEsUUFBVSxJQUFJLEdBQWdCLFdBQzlDLFNBQVUsR0FBUSxVQUFZLElBQUksR0FBWSxvQkFBb0IsQ0FBRSxpQkFBa0IsbUJBQW9CLENBQUMsRUFDM0csVUFBVyxHQUFRLFdBQWEsTUFDaEMsVUFBVyxHQUFRLFdBQWEsR0FBYSxTQUM3QyxZQUFhLEdBQVEsYUFBZSxHQUFZLFNBQ2hELFlBQWEsR0FBUSxhQUFlLEdBQVksTUFDcEQsR0FFSSxvQkFBbUIscUJDeEMzQixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsb0JBQXdCLE9BQ2hDLElBQU0sUUFDQSxHQUFpQixHQUFRLG9CQUEwQyxFQUNuRSxRQUNBLFFBQ0EsT0FDQSxRQUNBLFFBQ0EsT0FDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLE9BQ0EsUUFDQSxPQUNBLEdBQW1CLENBQUMsSUFBVyxFQUNoQyxFQUFHLEdBQWdCLGlDQUFpQyxRQUFRLE9BQU8sRUFDcEUsSUFBTSxHQUFnQixFQUFHLEdBQTBCLDJCQUEyQixDQUFNLEVBQzlFLEVBQXdCLElBQU0sRUFBYSxFQUFFLEtBQUssR0FBZ0IseUJBQXlCLEVBQzNGLEdBQXNCLEVBQUcsR0FBdUIsa0JBQWtCLENBQU0sR0FDN0UsRUFBRyxHQUFPLGlDQUFpQyxRQUFRLE9BQU8sRUFDM0QsSUFBTSxFQUFlLENBQ2pCLFFBQVMsR0FBUSxRQUNqQixPQUFRLEVBQW1CLE1BQy9CLEVBQ0EsTUFBTyxJQUNBLEtBQ0EsRUFDSCxRQUFTLE9BQ1QsZUFDQSxxQkFBc0IsR0FBUSx1QkFBeUIsRUFBRyxFQUF1QixZQUFZLEdBQU8sb0NBQXFDLENBQVksRUFDckosa0JBQW1CLEdBQVEsbUJBQXFCLEdBQXdCLG9CQUN4RSx5QkFBMEIsR0FBUSwyQkFDN0IsRUFBRyxHQUF1QixnQ0FBZ0MsQ0FBRSxVQUFXLEVBQW1CLFVBQVcsY0FBZSxHQUFlLFFBQVEsT0FBUSxDQUFDLEVBQ3pKLFlBQWEsR0FBUSxjQUFnQixFQUFHLEVBQXVCLFlBQVksR0FBbUIsZ0NBQWlDLENBQU0sRUFDckksT0FBUSxHQUFRLFNBQ1gsRUFBRyxFQUF1QixZQUFZLEVBQWtCLDJCQUE0QixJQUFLLEVBQWtCLG1DQUFvQyxDQUFhLENBQUMsRUFDbEssZUFBZ0IsR0FBb0IsZ0JBQWdCLE9BQU8sR0FBUSxnQkFBa0IsQ0FBcUIsRUFDMUcsVUFBVyxHQUFRLFlBQ2QsRUFBRyxFQUF1QixZQUFZLElBQ2hDLEdBQW1CLCtCQUN0QixRQUFTLFVBQWEsTUFBTSxFQUFzQixHQUFHLFdBQWEsR0FBYSxrQkFDbkYsRUFBRyxDQUFNLEVBQ2IsT0FBUSxHQUFRLFFBQVUsR0FBWSxLQUFLLEtBQUssS0FBTSxRQUFRLEVBQzlELGdCQUFpQixHQUFRLGlCQUFtQixHQUFvQixnQkFDaEUscUJBQXNCLEdBQVEsdUJBQXlCLEVBQUcsRUFBdUIsWUFBWSxFQUFrQiwyQ0FBNEMsQ0FBWSxFQUN2SyxnQkFBaUIsR0FBUSxrQkFBb0IsRUFBRyxFQUF1QixZQUFZLEVBQWtCLHNDQUF1QyxDQUFZLEVBQ3hKLGVBQWdCLEdBQVEsaUJBQW1CLEVBQUcsRUFBdUIsWUFBWSxHQUF1QiwyQkFBNEIsQ0FBWSxDQUNwSixHQUVJLG9CQUFtQixxQkNuRDNCLElBQUksUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLE9BQ0EsT0FDQSxRQUNBLE9BQ0EsUUFDQSxNQUNBLFFBQ0EsUUFDQSxRQUNBLFFBRUUsR0FBa0MsQ0FBQyxJQUFZLENBQ2pELE9BQU8sT0FBTyxPQUFPLEVBQVMsQ0FDMUIscUJBQXNCLEVBQVEsc0JBQXdCLEdBQ3RELGdCQUFpQixFQUFRLGlCQUFtQixHQUM1QyxtQkFBb0IsY0FDeEIsQ0FBQyxHQUVDLEVBQWUsQ0FDakIsUUFBUyxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0saUJBQWtCLEVBQzFELFNBQVUsQ0FBRSxLQUFNLGdCQUFpQixLQUFNLFVBQVcsRUFDcEQsT0FBUSxDQUFFLEtBQU0sZ0JBQWlCLEtBQU0sUUFBUyxFQUNoRCxhQUFjLENBQUUsS0FBTSxnQkFBaUIsS0FBTSxzQkFBdUIsQ0FDeEUsRUFFTSxHQUFvQyxDQUFDLElBQWtCLENBQ3pELElBQXVDLGdCQUFqQyxFQUNzQyx1QkFBeEMsRUFDNkIsWUFBN0IsR0FEMEIsRUFFOUIsTUFBTyxDQUNILGlCQUFpQixDQUFDLEVBQWdCLENBQzlCLElBQU0sRUFBUSxFQUFpQixVQUFVLENBQUMsSUFBVyxFQUFPLFdBQWEsRUFBZSxRQUFRLEVBQ2hHLEdBQUksSUFBVSxHQUNWLEVBQWlCLEtBQUssQ0FBYyxFQUdwQyxPQUFpQixPQUFPLEVBQU8sRUFBRyxDQUFjLEdBR3hELGVBQWUsRUFBRyxDQUNkLE9BQU8sR0FFWCx5QkFBeUIsQ0FBQyxFQUF3QixDQUM5QyxFQUEwQixHQUU5QixzQkFBc0IsRUFBRyxDQUNyQixPQUFPLEdBRVgsY0FBYyxDQUFDLEVBQWEsQ0FDeEIsRUFBZSxHQUVuQixXQUFXLEVBQUcsQ0FDVixPQUFPLEVBRWYsR0FFRSxHQUErQixDQUFDLElBQVcsQ0FDN0MsTUFBTyxDQUNILGdCQUFpQixFQUFPLGdCQUFnQixFQUN4Qyx1QkFBd0IsRUFBTyx1QkFBdUIsRUFDdEQsWUFBYSxFQUFPLFlBQVksQ0FDcEMsR0FHRSxHQUEyQixDQUFDLEVBQWUsSUFBZSxDQUM1RCxJQUFNLEVBQXlCLE9BQU8sT0FBTyxHQUFxQixtQ0FBbUMsQ0FBYSxFQUFHLEVBQWEsaUNBQWlDLENBQWEsRUFBRyxHQUFhLHFDQUFxQyxDQUFhLEVBQUcsR0FBa0MsQ0FBYSxDQUFDLEVBRXJTLE9BREEsRUFBVyxRQUFRLENBQUMsSUFBYyxFQUFVLFVBQVUsQ0FBc0IsQ0FBQyxFQUN0RSxPQUFPLE9BQU8sRUFBZSxHQUFxQix1Q0FBdUMsQ0FBc0IsRUFBRyxFQUFhLDRCQUE0QixDQUFzQixFQUFHLEdBQWEsZ0NBQWdDLENBQXNCLEVBQUcsR0FBNkIsQ0FBc0IsQ0FBQyxHQUd6VCxNQUFNLFVBQWtCLEVBQWEsTUFBTyxDQUN4QyxPQUNBLFdBQVcsS0FBSyxHQUFnQixDQUM1QixJQUFNLEVBQVksR0FBYyxpQkFBaUIsR0FBaUIsQ0FBQyxDQUFDLEVBQ3BFLE1BQU0sQ0FBUyxFQUNmLEtBQUssV0FBYSxFQUNsQixJQUFNLEVBQVksR0FBZ0MsQ0FBUyxFQUNyRCxFQUFZLEdBQW9CLHVCQUF1QixDQUFTLEVBQ2hFLEVBQVksR0FBZ0IsbUJBQW1CLENBQVMsRUFDeEQsRUFBWSxHQUFlLG9CQUFvQixDQUFTLEVBQ3hELEVBQVksR0FBcUIsd0JBQXdCLENBQVMsRUFDbEUsRUFBWSxFQUFtQixzQkFBc0IsQ0FBUyxFQUM5RCxFQUFZLEdBQXVCLDRCQUE0QixDQUFTLEVBQ3hFLEVBQVksR0FBeUIsRUFBVyxHQUFlLFlBQWMsQ0FBQyxDQUFDLEVBQ3JGLEtBQUssT0FBUyxFQUNkLEtBQUssZ0JBQWdCLElBQUksRUFBTyxxQkFBcUIsS0FBSyxNQUFNLENBQUMsRUFDakUsS0FBSyxnQkFBZ0IsSUFBSSxHQUFvQixtQkFBbUIsS0FBSyxNQUFNLENBQUMsRUFDNUUsS0FBSyxnQkFBZ0IsSUFBSSxHQUFnQixlQUFlLEtBQUssTUFBTSxDQUFDLEVBQ3BFLEtBQUssZ0JBQWdCLElBQUksR0FBd0IsdUJBQXVCLEtBQUssTUFBTSxDQUFDLEVBQ3BGLEtBQUssZ0JBQWdCLElBQUksR0FBcUIsb0JBQW9CLEtBQUssTUFBTSxDQUFDLEVBQzlFLEtBQUssZ0JBQWdCLElBQUksR0FBaUIsZ0JBQWdCLEtBQUssTUFBTSxDQUFDLEVBQ3RFLEtBQUssZ0JBQWdCLElBQUksR0FBNkIsNEJBQTRCLEtBQUssTUFBTSxDQUFDLEVBQzlGLEtBQUssZ0JBQWdCLElBQUksRUFBSyx1Q0FBdUMsS0FBSyxPQUFRLENBQzlFLGlDQUFrQyxHQUF1QiwyQ0FDekQsK0JBQWdDLE1BQU8sSUFBVyxJQUFJLEVBQUssOEJBQThCLENBQ3JGLGlCQUFrQixFQUFPLFdBQzdCLENBQUMsQ0FDTCxDQUFDLENBQUMsRUFDRixLQUFLLGdCQUFnQixJQUFJLEVBQUsscUJBQXFCLEtBQUssTUFBTSxDQUFDLEVBRW5FLE9BQU8sRUFBRyxDQUNOLE1BQU0sUUFBUSxFQUV0QixDQUVBLElBQUksRUFBd0IsTUFBTSxVQUE0QixFQUFhLGdCQUFpQixDQUN4RixXQUFXLENBQUMsRUFBUyxDQUNqQixNQUFNLENBQU8sRUFDYixPQUFPLGVBQWUsS0FBTSxFQUFvQixTQUFTLEVBRWpFLEVBRUksR0FBNEIsTUFBTSxVQUFnQyxDQUFzQixDQUN4RixLQUFPLDBCQUNQLE9BQVMsU0FDVCxXQUFXLENBQUMsRUFBTSxDQUNkLE1BQU0sQ0FDRixLQUFNLDBCQUNOLE9BQVEsWUFDTCxDQUNQLENBQUMsRUFDRCxPQUFPLGVBQWUsS0FBTSxFQUF3QixTQUFTLEVBRXJFLEVBQ0ksR0FBOEIsTUFBTSxVQUFrQyxDQUFzQixDQUM1RixLQUFPLDRCQUNQLE9BQVMsU0FDVCxXQUFXLENBQUMsRUFBTSxDQUNkLE1BQU0sQ0FDRixLQUFNLDRCQUNOLE9BQVEsWUFDTCxDQUNQLENBQUMsRUFDRCxPQUFPLGVBQWUsS0FBTSxFQUEwQixTQUFTLEVBRXZFLEVBQ0ksR0FBNkIsTUFBTSxVQUFpQyxDQUFzQixDQUMxRixLQUFPLDJCQUNQLE9BQVMsU0FDVCxXQUFXLENBQUMsRUFBTSxDQUNkLE1BQU0sQ0FDRixLQUFNLDJCQUNOLE9BQVEsWUFDTCxDQUNQLENBQUMsRUFDRCxPQUFPLGVBQWUsS0FBTSxFQUF5QixTQUFTLEVBRXRFLEVBQ0ksR0FBMEIsTUFBTSxVQUE4QixDQUFzQixDQUNwRixLQUFPLHdCQUNQLE9BQVMsU0FDVCxXQUFXLENBQUMsRUFBTSxDQUNkLE1BQU0sQ0FDRixLQUFNLHdCQUNOLE9BQVEsWUFDTCxDQUNQLENBQUMsRUFDRCxPQUFPLGVBQWUsS0FBTSxFQUFzQixTQUFTLEVBRW5FLEVBRU0sR0FBTSxjQUNOLEdBQU8sa0JBQ1AsR0FBTyxrQkFDUCxHQUFPLHFCQUNQLEdBQVEsNEJBQ1IsR0FBUyw2QkFDVCxHQUFPLDBCQUNQLEdBQUssU0FDTCxHQUFNLGVBQ04sR0FBTyxzQkFDUCxHQUFRLDBCQUNSLEdBQVMsMkJBQ1QsR0FBUSx1QkFDUixHQUFTLG1CQUNULEdBQU0sZ0JBQ04sR0FBTSxrQkFDTixHQUFNLFdBQ04sR0FBTyxlQUNQLEdBQVEsNEJBQ1IsR0FBUSxzQkFDUixHQUFPLG1CQUNQLEdBQVEsMkJBQ1IsR0FBTSx3QkFDTixFQUFNLFlBQ04sR0FBTyxjQUNQLEdBQU0sY0FDTixHQUFNLGNBQ04sRUFBTSxjQUNOLEdBQU0sYUFDTixFQUFLLFNBQ0wsRUFBSyxRQUNMLEdBQU0sZUFDTixHQUFNLGFBQ04sRUFBSyxPQUNMLEdBQU0sWUFDTixHQUFNLGFBQ04sRUFBTSxZQUNOLEdBQUssVUFDTCxHQUFNLGFBQ04sR0FBTSxhQUNOLEdBQU0sWUFDTixHQUFNLGFBQ04sR0FBTSxrQkFDTixHQUFNLFdBQ04sR0FBTSxXQUNOLEdBQU0sWUFDTixHQUFLLDRDQUNMLEdBQU8sa0JBQ1AsR0FBTSxlQUNOLEdBQVMseUJBQ1QsRUFBSyxvQkFDUCxHQUFrQixDQUFDLEVBQUcsRUFBSSxHQUFNLEVBQUcsQ0FBQyxFQUNwQyxHQUFzQixDQUFDLEVBQUcsRUFBSSxHQUFPLEVBQUcsQ0FBQyxFQUN6QyxHQUFtQixDQUFDLEVBQUcsRUFBSSxHQUFNLEVBQUcsQ0FBQyxFQUNyQyxHQUFjLENBQUMsRUFBRyxFQUFJLEdBQUssRUFBRyxDQUFDLEVBQUssR0FBSyxFQUFHLEVBQUcsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxDQUFDLEVBQ3hELEdBQTRCLENBQzVCLEVBQ0EsRUFDQSxHQUNBLEVBQ0EsQ0FBQyxHQUFLLEVBQUssQ0FBRyxFQUNkLENBQ0ksQ0FDSSxFQUNBLEVBQ0ssR0FBTSxFQUNYLENBQ0osRUFDQSxDQUNJLEVBQ0EsRUFDSyxHQUFNLEVBQ1gsQ0FDSixFQUNBLENBQ0ksSUFBTSxHQUNOLEVBQ0ssSUFBTSxFQUNYLENBQ0osQ0FDSixDQUNKLEVBQ0ksR0FBNkIsQ0FBQyxFQUFHLEVBQUksR0FBUSxFQUFHLENBQUMsRUFBRyxFQUFHLENBQUMsQ0FBQyxJQUFNLEdBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQ25GLEdBQTBCLENBQzFCLEdBQ0EsRUFDQSxHQUNBLEVBQ0ssR0FBSyxHQUNMLElBQU0sR0FDWCxFQUNBLENBQUMsRUFBRSxFQUNILENBQUMsQ0FBQyxDQUNOLEVBQ0EsRUFBTyxhQUFhLElBQUksQ0FBRSxFQUFFLGNBQWMsR0FBeUIsRUFBeUIsRUFDNUYsSUFBSSxHQUEwQixDQUMxQixFQUNBLEVBQ0EsR0FDQSxFQUNBLENBQUMsR0FBSyxHQUFLLEVBQUssQ0FBRyxFQUNuQixDQUNJLENBQ0ksRUFDQSxFQUNLLEdBQU0sRUFDWCxDQUNKLEVBQ0EsQ0FDSSxFQUNBLEVBQ0ssR0FBTSxFQUNYLENBQ0osRUFDQSxDQUNJLElBQU0sR0FDTixFQUNLLElBQU0sRUFDWCxDQUNKLEVBQ0EsQ0FDSSxFQUNBLEVBQ0ssR0FBTSxFQUNYLENBQ0osQ0FDSixDQUNKLEVBQ0ksR0FBMkIsQ0FBQyxFQUFHLEVBQUksR0FBUSxFQUFHLENBQUMsR0FBSyxFQUFHLEVBQUcsQ0FBQyxFQUFHLElBQU0sRUFBWSxDQUFDLEVBQ2pGLEdBQXNCLENBQ3RCLEVBQ0EsRUFDQSxHQUNBLEVBQ0EsQ0FBQyxHQUFLLEdBQUssQ0FBRyxFQUNkLENBQ0ksQ0FDSSxFQUNBLEVBQ0ssR0FBTSxFQUNYLENBQ0osRUFDQSxDQUNJLEVBQ0EsRUFDSyxHQUFNLEVBQ1gsQ0FDSixFQUNBLENBQ0ksSUFBTSxHQUNOLEVBQ0ssSUFBTSxFQUNYLENBQ0osQ0FDSixDQUNKLEVBQ0ksR0FBdUIsQ0FBQyxFQUFHLEVBQUksR0FBTyxFQUFHLENBQUMsR0FBSyxFQUFHLEVBQUcsQ0FBQyxFQUFHLElBQU0sRUFBZSxDQUFDLEVBQy9FLEdBQWdCLENBQ2hCLEVBQ0EsRUFDQSxHQUNBLEVBQ0EsQ0FBQyxDQUFHLEVBQ0osQ0FDSSxDQUNJLElBQU0sR0FDTixFQUNLLElBQU0sRUFDWCxDQUNKLENBQ0osQ0FDSixFQUNJLEdBQTRCLENBQzVCLEdBQ0EsRUFDQSxHQUNBLEVBQ0ssR0FBSyxHQUNMLElBQU0sR0FDWCxFQUNBLENBQUMsRUFBRSxFQUNILENBQUMsQ0FBQyxDQUNOLEVBQ0EsRUFBTyxhQUFhLElBQUksQ0FBRSxFQUFFLGNBQWMsR0FBMkIsRUFBMkIsRUFDaEcsSUFBSSxHQUFrQixDQUNsQixFQUNBLEVBQ0EsR0FDQSxFQUNBLENBQUMsR0FBTSxHQUFNLEdBQUssRUFBRyxFQUNyQixDQUFDLEVBQUcsQ0FBQyxJQUFNLEdBQXFCLENBQUMsRUFBRyxDQUFDLElBQU0sR0FBa0IsQ0FBQyxFQUFHLENBQUMsQ0FDdEUsRUFDSSxHQUFXLENBQUMsRUFBRyxFQUFJLEdBQUssRUFBRyxDQUFDLEdBQUssQ0FBRyxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUMsRUFDN0MsR0FBMkIsQ0FDM0IsR0FDQSxFQUNBLEdBQ0EsRUFDSyxHQUFLLEdBQ0wsSUFBTSxHQUNYLEVBQ0EsQ0FBQyxFQUFFLEVBQ0gsQ0FBQyxDQUFDLENBQ04sRUFDQSxFQUFPLGFBQWEsSUFBSSxDQUFFLEVBQUUsY0FBYyxHQUEwQixFQUEwQixFQUM5RixJQUFJLEdBQXdCLENBQ3hCLEdBQ0EsRUFDQSxHQUNBLEVBQ0ssR0FBSyxHQUNMLElBQU0sR0FDWCxFQUNBLENBQUMsRUFBRSxFQUNILENBQUMsQ0FBQyxDQUNOLEVBQ0EsRUFBTyxhQUFhLElBQUksQ0FBRSxFQUFFLGNBQWMsR0FBdUIsRUFBdUIsRUFDeEYsSUFBSSxHQUFTLE9BQ1QsR0FBc0IsQ0FBQyxHQUFJLEdBQUksc0JBQXVCLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUNuRSxFQUFPLGFBQWEsSUFBSSxFQUFFLEVBQUUsY0FBYyxHQUFxQixDQUFxQixFQUNwRixJQUFJLEdBQWtCLENBQUMsRUFBRyxFQUFJLEdBQU0sRUFBRyxJQUFNLEVBQVcsRUFDcEQsR0FBZSxDQUFDLEVBQUcsRUFBSSxHQUFNLEVBQUcsSUFBTSxFQUFRLEVBQzlDLEdBQXFCLENBQ3JCLEVBQ0EsRUFDQSxHQUNBLEVBQ0ssR0FBSyxDQUFDLE1BQU8sMEJBQTJCLEdBQUcsQ0FDaEQsRUFDQSxJQUFNLEdBQ04sSUFBTSxFQUNWLEVBQ0ksR0FBbUIsQ0FDbkIsRUFDQSxFQUNBLEdBQ0EsRUFDSyxHQUFLLENBQUMsTUFBTyxvQkFBcUIsR0FBRyxDQUMxQyxFQUNBLElBQU0sR0FDTixJQUFNLEVBQ1YsRUFDSSxHQUFlLENBQ2YsRUFDQSxFQUNBLEdBQ0EsRUFDSyxHQUFLLENBQUMsTUFBTyx1QkFBd0IsR0FBRyxDQUM3QyxFQUNBLElBQU0sR0FDTixJQUFNLEVBQ1YsRUFDSSxHQUFTLENBQ1QsRUFDQSxFQUNBLEdBQ0EsRUFDSyxHQUFLLENBQUMsT0FBUSxVQUFXLEdBQUcsQ0FDakMsRUFDQSxJQUFNLEdBQ04sSUFBTSxFQUNWLEVBRUEsTUFBTSxXQUFrQyxFQUFhLFFBQ2hELGFBQWEsRUFDYixHQUFHLENBQVksRUFDZixFQUFFLFFBQVMsQ0FBQyxFQUFTLEVBQUksRUFBUSxFQUFHLENBQ3JDLE1BQU8sQ0FBQyxFQUFtQixrQkFBa0IsRUFBUSxFQUFRLGlDQUFpQyxDQUFDLENBQUMsRUFDbkcsRUFDSSxFQUFFLG1CQUFvQixxQkFBc0IsQ0FBQyxDQUFDLEVBQzlDLEVBQUUsWUFBYSwyQkFBMkIsRUFDMUMsR0FBRyxFQUFrQixFQUNyQixNQUFNLENBQUUsQ0FDYixDQUVBLE1BQU0sV0FBZ0MsRUFBYSxRQUM5QyxhQUFhLEVBQ2IsR0FBRyxDQUFZLEVBQ2YsRUFBRSxRQUFTLENBQUMsRUFBUyxFQUFJLEVBQVEsRUFBRyxDQUNyQyxNQUFPLENBQUMsRUFBbUIsa0JBQWtCLEVBQVEsRUFBUSxpQ0FBaUMsQ0FBQyxDQUFDLEVBQ25HLEVBQ0ksRUFBRSxtQkFBb0IsbUJBQW9CLENBQUMsQ0FBQyxFQUM1QyxFQUFFLFlBQWEseUJBQXlCLEVBQ3hDLEdBQUcsRUFBZ0IsRUFDbkIsTUFBTSxDQUFFLENBQ2IsQ0FFQSxNQUFNLFdBQTRCLEVBQWEsUUFDMUMsYUFBYSxFQUNiLEdBQUcsQ0FBWSxFQUNmLEVBQUUsUUFBUyxDQUFDLEVBQVMsRUFBSSxFQUFRLEVBQUcsQ0FDckMsTUFBTyxDQUFDLEVBQW1CLGtCQUFrQixFQUFRLEVBQVEsaUNBQWlDLENBQUMsQ0FBQyxFQUNuRyxFQUNJLEVBQUUsbUJBQW9CLGVBQWdCLENBQUMsQ0FBQyxFQUN4QyxFQUFFLFlBQWEscUJBQXFCLEVBQ3BDLEdBQUcsRUFBWSxFQUNmLE1BQU0sQ0FBRSxDQUNiLENBRUEsTUFBTSxXQUFzQixFQUFhLFFBQ3BDLGFBQWEsRUFDYixHQUFHLENBQVksRUFDZixFQUFFLFFBQVMsQ0FBQyxFQUFTLEVBQUksRUFBUSxFQUFHLENBQ3JDLE1BQU8sQ0FBQyxFQUFtQixrQkFBa0IsRUFBUSxFQUFRLGlDQUFpQyxDQUFDLENBQUMsRUFDbkcsRUFDSSxFQUFFLG1CQUFvQixTQUFVLENBQUMsQ0FBQyxFQUNsQyxFQUFFLFlBQWEsZUFBZSxFQUM5QixHQUFHLEVBQU0sRUFDVCxNQUFNLENBQUUsQ0FDYixDQUVBLElBQU0sR0FBVyxDQUNiLDZCQUNBLDJCQUNBLHVCQUNBLGdCQUNKLEVBQ0EsTUFBTSxXQUFZLENBQVUsQ0FDNUIsQ0FDQSxFQUFhLHVCQUF1QixHQUFVLEVBQUcsRUFFakQsSUFBTSxHQUEyQixFQUFLLGdCQUFnQixFQUFXLEdBQXlCLFlBQWEsWUFBYSxZQUFZLEVBRTFILEdBQXVCLEVBQUssZ0JBQWdCLEVBQVcsR0FBcUIsWUFBYSxZQUFhLFlBQVksRUFFeEgsT0FBTyxlQUFlLEdBQVMsV0FBWSxDQUN2QyxXQUFZLEdBQ1osSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEVBQWEsUUFDM0MsQ0FBQyxFQUNELE9BQU8sZUFBZSxHQUFTLFdBQVksQ0FDdkMsV0FBWSxHQUNaLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxFQUFhLE9BQzNDLENBQUMsRUFDTyw2QkFBNEIsR0FDNUIsMkJBQTBCLEdBQzFCLDJCQUEwQixHQUMxQix1QkFBc0IsR0FDdEIsaUJBQWdCLEdBQ2hCLDZCQUE0QixHQUM1QixPQUFNLEdBQ04sYUFBWSxFQUNaLHVCQUFzQixFQUN0Qiw0QkFBMkIsR0FDM0IseUJBQXdCLEdBQ3hCLDRCQUEyQixHQUMzQix3QkFBdUIscUJDL2YvQixJQUFJLFFBSUosT0FBTyxlQUFlLEdBQVMsNEJBQTZCLENBQzNELFdBQVksR0FDWixJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSwwQkFDckMsQ0FBQyxFQUNELE9BQU8sZUFBZSxHQUFTLFlBQWEsQ0FDM0MsV0FBWSxHQUNaLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFVLFVBQ3JDLENBQUMsUUNYRyxFQUNBLEdBQ0EsR0FDQSxHQUVFLEdBQWUsQ0FBQyxJQUFRLElBQ3pCLE9BQU8sRUFBSSxnQkFBa0IsVUFDMUIsT0FBTyxFQUFJLGlCQUFtQixVQUM5QixPQUFPLEVBQUksY0FBZ0IsVUFDM0IsT0FBTyxFQUFJLGFBQWUsVUFDMUIsT0FBTyxFQUFJLGdCQUFrQixVQUUvQixFQUErQixHQUMvQixHQUF3QixPQUFTLGNBQWEsYUFBWSxlQUFjLFlBQVcsY0FBYSxZQUFXLGVBQWMscUJBQW9CLFVBQVMsV0FBVSxpQkFBZ0IsY0FBYSxZQUFjLENBQzdNLElBQUksRUFDRSxFQUFpQixnRkFDdkIsR0FBSSxFQUNBLEdBQUksQ0FDQSxJQUFNLEVBQVMsTUFBTSxHQUFlLFFBQVEsQ0FDeEMsVUFDQSxXQUNBLGlCQUNBLGFBQ0osQ0FBQyxFQUFFLEVBQ0gsRUFBUSxDQUNKLFlBQWEsRUFBTyxNQUNwQixVQUFXLElBQUksS0FBSyxFQUFPLFVBQVUsRUFBRSxZQUFZLENBQ3ZELEVBRUosTUFBTyxFQUFHLENBQ04sTUFBTSxJQUFJLEVBQWlCLHlCQUF5QixFQUFFLFFBQVMsQ0FDM0QsWUFBYSxFQUNiLFFBQ0osQ0FBQyxFQUlMLFFBQUksQ0FDQSxFQUFRLE1BQU0sR0FBb0Isb0JBQW9CLENBQVcsRUFFckUsTUFBTyxFQUFHLENBQ04sTUFBTSxJQUFJLEVBQWlCLHlCQUF5Qix5SUFBOEUsQ0FDOUgsWUFBYSxFQUNiLFFBQ0osQ0FBQyxFQUdULEdBQUksSUFBSSxLQUFLLEVBQU0sU0FBUyxFQUFFLFFBQVEsRUFBSSxLQUFLLElBQUksR0FBSyxFQUNwRCxNQUFNLElBQUksRUFBaUIseUJBQXlCLDBJQUErRSxDQUMvSCxZQUFhLEVBQ2IsUUFDSixDQUFDLEVBRUwsSUFBUSxlQUFnQixHQUNoQixhQUFXLDZCQUE4QixNQUFNLFFBQVEsUUFBUSxFQUFFLEtBQUssUUFBUyxFQUFHLENBQUUsWUFBMEMsRUFDaEksRUFBTSxHQUNSLElBQUksR0FBVSxPQUFPLE9BQU8sQ0FBQyxFQUFHLEdBQWdCLENBQUMsRUFBRyxDQUNoRCxPQUFRLEdBQWMsUUFBVSxHQUFvQixPQUNwRCxPQUFRLEdBQWMsUUFBVSxFQUNoQyxlQUFnQixHQUFjLGdCQUFrQixHQUFvQixjQUN4RSxDQUFDLENBQUMsRUFDRixHQUNKLEdBQUksQ0FDQSxHQUFVLE1BQU0sRUFBSSxLQUFLLElBQUksRUFBMEIsQ0FDbkQsVUFBVyxFQUNYLFNBQVUsRUFDVixhQUNKLENBQUMsQ0FBQyxFQUVOLE1BQU8sRUFBRyxDQUNOLE1BQU0sSUFBSSxFQUFpQix5QkFBeUIsRUFBRyxDQUNuRCxZQUFhLEVBQ2IsUUFDSixDQUFDLEVBRUwsSUFBUSxpQkFBbUIsZUFBYSxtQkFBaUIsZ0JBQWMsY0FBWSxtQkFBaUIsY0FBYyxDQUFDLEdBQU8sR0FDMUgsR0FBSSxDQUFDLElBQWUsQ0FBQyxJQUFtQixDQUFDLElBQWdCLENBQUMsR0FDdEQsTUFBTSxJQUFJLEVBQWlCLHlCQUF5QiwrQ0FBZ0QsQ0FDaEcsWUFBYSxFQUNiLFFBQ0osQ0FBQyxFQUVMLElBQU0sR0FBYyxDQUNoQixlQUNBLG1CQUNBLGdCQUNBLFdBQVksSUFBSSxLQUFLLEVBQVUsS0FDM0IsSUFBbUIsQ0FBRSxrQkFBZ0IsS0FDckMsSUFBYSxDQUFFLFlBQVUsQ0FDakMsRUFDQSxHQUFJLEVBQ0EsR0FBTyxxQkFBcUIsR0FBYSxrQkFBbUIsR0FBRyxFQUcvRCxRQUFPLHFCQUFxQixHQUFhLHlCQUEwQixHQUFHLEVBRTFFLE9BQU8sSUFHTCxHQUFxQixDQUFDLEVBQVMsSUFBVyxDQUM1QyxJQUFRLGdCQUFlLGlCQUFnQixhQUFZLGlCQUFrQixFQUNyRSxHQUFJLENBQUMsR0FBaUIsQ0FBQyxHQUFrQixDQUFDLEdBQWMsQ0FBQyxFQUNyRCxNQUFNLElBQUksRUFBaUIseUJBQXlCLGlKQUNPLE9BQU8sS0FBSyxDQUFPLEVBQUUsS0FBSyxJQUFJO0FBQUEsb0ZBQXlGLENBQUUsWUFBYSxHQUFPLFFBQU8sQ0FBQyxFQUVwTixPQUFPLEdBR0wsR0FBVSxDQUFDLEVBQU8sQ0FBQyxJQUFNLE9BQVMsc0JBQXVCLENBQUMsSUFBTSxDQUNsRSxFQUFLLFFBQVEsTUFBTSw0Q0FBNEMsRUFDL0QsSUFBUSxjQUFhLGVBQWMsWUFBVyxjQUFhLGNBQWUsR0FDbEUsYUFBYyxFQUNoQixFQUFjLEdBQW9CLGVBQWUsQ0FDbkQsUUFBUyxFQUFLLFNBQVcsR0FBb0IsT0FDakQsQ0FBQyxFQUNELEdBQUksQ0FBQyxHQUFlLENBQUMsR0FBZ0IsQ0FBQyxHQUFhLENBQUMsR0FBZSxDQUFDLEVBQVksQ0FFNUUsSUFBTSxHQURXLE1BQU0sR0FBb0IsZ0JBQWdCLENBQUksR0FDdEMsR0FDekIsR0FBSSxDQUFDLEVBQ0QsTUFBTSxJQUFJLEVBQWlCLHlCQUF5QixXQUFXLG1CQUE4QixDQUFFLE9BQVEsRUFBSyxNQUFPLENBQUMsRUFFeEgsR0FBSSxDQUFDLEdBQWEsQ0FBTyxFQUNyQixNQUFNLElBQUksRUFBaUIseUJBQXlCLFdBQVcsNENBQXVELENBQ2xILE9BQVEsRUFBSyxNQUNqQixDQUFDLEVBRUwsR0FBSSxHQUFTLFlBQWEsQ0FFdEIsSUFBTSxHQURjLE1BQU0sR0FBb0IsbUJBQW1CLENBQUksR0FDekMsRUFBUSxhQUM5QixFQUFjLDhCQUE4QixxQkFBK0IsRUFBUSxjQUN6RixHQUFJLEdBQWEsSUFBYyxFQUFRLFdBQ25DLE1BQU0sSUFBSSxFQUFpQix5QkFBeUIseUJBQTJCLEVBQWEsQ0FDeEYsWUFBYSxHQUNiLE9BQVEsRUFBSyxNQUNqQixDQUFDLEVBRUwsR0FBSSxHQUFlLElBQWdCLEVBQVEsY0FDdkMsTUFBTSxJQUFJLEVBQWlCLHlCQUF5Qiw0QkFBOEIsRUFBYSxDQUMzRixZQUFhLEdBQ2IsT0FBUSxFQUFLLE1BQ2pCLENBQUMsRUFFTCxFQUFRLFdBQWEsRUFBUSxXQUM3QixFQUFRLGNBQWdCLEVBQVEsY0FFcEMsSUFBUSxnQkFBZSxpQkFBZ0IsYUFBWSxnQkFBZSxlQUFnQixHQUFtQixFQUFTLEVBQUssTUFBTSxFQUN6SCxPQUFPLEdBQXNCLENBQ3pCLFlBQWEsRUFDYixXQUFZLEVBQ1osYUFBYyxFQUNkLFVBQVcsRUFDWCxZQUFhLEVBQ2IsVUFBVyxFQUNYLGFBQWMsRUFBSyxhQUNuQixtQkFBb0IsRUFBSyxtQkFDekIsUUFBUyxFQUNULFNBQVUsRUFBSyxTQUNmLGVBQWdCLEVBQUssZUFDckIsWUFBYSxFQUFLLFlBQ2xCLE9BQVEsRUFBSyxNQUNqQixDQUFDLEVBRUEsUUFBSSxDQUFDLEdBQWUsQ0FBQyxHQUFnQixDQUFDLEdBQWEsQ0FBQyxFQUNyRCxNQUFNLElBQUksRUFBaUIseUJBQXlCLCtIQUNhLENBQUUsWUFBYSxHQUFPLE9BQVEsRUFBSyxNQUFPLENBQUMsRUFHNUcsWUFBTyxHQUFzQixDQUN6QixjQUNBLGFBQ0EsZUFDQSxZQUNBLGNBQ0EsWUFDQSxhQUFjLEVBQUssYUFDbkIsbUJBQW9CLEVBQUssbUJBQ3pCLFFBQVMsRUFDVCxTQUFVLEVBQUssU0FDZixlQUFnQixFQUFLLGVBQ3JCLFlBQWEsRUFBSyxZQUNsQixPQUFRLEVBQUssTUFDakIsQ0FBQyxHQUlELEdBQ0EsR0FDQSxrQkEzTEosT0FDQSxRQUNBLFFBQ0EsUUFzTEksR0FBVSxHQUNWLEdBQWUsR0FDZixHQUFxQiIsCiAgImRlYnVnSWQiOiAiMEQwNjEyQURBMzlCRjFFNjY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=