@asgardeo/auth-react 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js
CHANGED
|
@@ -404,7 +404,7 @@ constructor(t){Hl._instanceID?Hl._instanceID+=1:Hl._instanceID=0,this._dataLayer
|
|
|
404
404
|
* @memberof AsgardeoAuthClient
|
|
405
405
|
*
|
|
406
406
|
* @preserve
|
|
407
|
-
*/updateConfig(t){return gi(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}}var xl,Tl;!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(xl||(xl={})),function(t){t.SignIn="sign-in",t.SignOut="sign-out",t.Initialize="initialize",t.HttpRequestStart="http-request-start",t.HttpRequestFinish="http-request-finish",t.HttpRequestError="http-request-error",t.HttpRequestSuccess="http-request-success",t.RevokeAccessToken="revoke-access-token",t.CustomGrant="custom-grant"}(Tl||(Tl={}));const kl="Y2hlY2tTZXNzaW9u";class Fl extends Error{constructor(t,i,n,l,e,c){super(null!=l?l:null==c?void 0:c.message),this.name=this.constructor.name,this.code=t,this.file=i,this.method=n,this.error=c,this.description=e,Object.setPrototypeOf(this,new.target.prototype)}}class Bl{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(){return l(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const i=parseInt(t.expires_in),n=setTimeout(()=>l(this,void 0,void 0,(function*(){yield this._authenticationClient.refreshAccessToken()})),1e3*(i<=10?i:i-10));yield this._dataLayer.setTemporaryDataParameter(Si,JSON.stringify(n))}}))}clearRefreshTokenTimeout(){return l(this,void 0,void 0,(function*(){if(yield this._dataLayer.getTemporaryDataParameter(Si)){const t=JSON.parse(yield this._dataLayer.getTemporaryDataParameter(Si));clearTimeout(t)}}))}}class zl{constructor(){}static removeAuthorizationCode(){const t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}static getPKCE(){var t;return null!==(t=sessionStorage.getItem(vi))&&void 0!==t?t:""}static setPKCE(t){sessionStorage.setItem(vi,t)}static setSignOutURL(t){sessionStorage.setItem(Ji,t)}static getSignOutURL(){var t;return null!==(t=sessionStorage.getItem(Ji))&&void 0!==t?t:""}static removePKCE(){sessionStorage.removeItem(vi)}static setInitializedSignIn(t){const i=sessionStorage.getItem("initialized-sign-in"),n=i?JSON.parse(i):null;return t&&n?(sessionStorage.setItem("initialized-sign-in","false"),!0):!t&&(n?(sessionStorage.setItem("initialized-sign-in","false"),!0):(sessionStorage.setItem("initialized-sign-in","true"),!0))}static setIsInitializedSilentSignIn(){const t=sessionStorage.getItem("initialized-silent-sign-in");return t&&JSON.parse(t)?(sessionStorage.setItem("initialized-silent-sign-in","false"),!0):(sessionStorage.setItem("initialized-silent-sign-in","true"),!1)}static wasSignInCalled(){const t=sessionStorage.getItem("initialized-sign-in"),i=t?JSON.parse(t):null,n=sessionStorage.getItem("initialized-silent-sign-in"),l=n?JSON.parse(n):null;return i&&!l}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),i=t?JSON.parse(t):null;return Boolean(i)}static isSignOutSuccessful(){if(Hl.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),!0}return!1}static isStatePresentInURL(){const t=new URL(window.location.href).searchParams.get("state");return"sign-in-silently"===t||t===kl}static hasAuthSearchParamsInURL(t=window.location.search){return/[?&]code=[^&]+/.test(t)&&/[?&]session_state=[^&]+/.test(t)}static canSendPromptNoneRequest(){const t=sessionStorage.getItem("promptNoneRequestSent");return!(t&&JSON.parse(t))}static setPromptNoneRequestSent(t){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(t))}static waitTillPageRedirect(t){return l(this,void 0,void 0,(function*(){const i=null!=t?t:3e3;yield new Promise(t=>setTimeout(t,1e3*i))}))}}const wl=(()=>{let t,i,n,e,c,o,d,r,a,u,Z,s;const b=(l,r,a,u,Z,b,h,I)=>{t=l,i=r,n=a,e=u,c=b,o=h,d=Z,s=I,e>-1&&m(),d>-1&&(Z=setInterval(()=>{p()},1e3*d))},m=()=>l(void 0,void 0,void 0,(function*(){var o;if(!i||!t||!c)return;const d="opIFrame";function r(){var e;return l(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n=`${t} ${l}`,c=document.getElementById("rpIFrame"),o=(null===(e=null==c?void 0:c.contentDocument)||void 0===e?void 0:e.getElementById(d)).contentWindow;null==o||o.postMessage(n,i)}}))}const u=document.getElementById("rpIFrame");(null===(o=null==u?void 0:u.contentDocument)||void 0===o?void 0:o.getElementById(d)).src=i+"?client_id="+t+"&redirect_uri="+c,yield r(),a=setInterval(r,1e3*e),I()})),h=()=>{clearInterval(a),clearInterval(void 0)},I=()=>{null===window||void 0===window||window.addEventListener("message",(function(t){return l(this,void 0,void 0,(function*(){!i||(null==i?void 0:i.indexOf(t.origin))<0||"unchanged"===t.data||("error"===t.data?window.parent.location.href=yield r():p())}))}),!1)},p=()=>{var i;const n=document.getElementById("rpIFrame"),l=null===(i=null==n?void 0:n.contentDocument)||void 0===i?void 0:i.getElementById("promptNoneIFrame");if(zl.canSendPromptNoneRequest()){zl.setPromptNoneRequestSent(!0);const i=t=>{var n,l,e;"set_session_state_from_iframe"===(null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.type)&&(Z(null!==(e=null===(l=null==t?void 0:t.data)||void 0===l?void 0:l.data)&&void 0!==e?e:""),null===window||void 0===window||window.removeEventListener("message",i))};u!==xl.BrowserMemory&&u!==xl.WebWorker||null===window||void 0===window||window.addEventListener("message",i);const n=new URL(o);n.searchParams.set("response_type","code"),n.searchParams.set("client_id",t),n.searchParams.set("scope","openid"),n.searchParams.set("redirect_uri",c),n.searchParams.set("state",kl),n.searchParams.set("prompt","none"),s&&(n.searchParams.set("code_challenge_method","S256"),n.searchParams.set("code_challenge",(()=>{const t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz-_";let i="";for(let n=0;n<43;n++){const n=Math.floor(Math.random()*t.length);i+=t.substring(n,n+1)}return i})())),l.src=n.toString()}},G=t=>l(void 0,void 0,void 0,(function*(){var i,n;const l=new URL(window.location.href).searchParams.get("state"),e=new URL(window.location.href).searchParams.get(Ki),c=window.parent.parent;if(null!==l&&(l===kl||"sign-in-silently"===l)){const o=new URL(window.location.href).searchParams.get("code");if(null!==o&&0!==o.length){if("sign-in-silently"===l){const t={data:{code:o,sessionState:null!=e?e:""},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),c.postMessage(t,c.origin),zl.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield zl.waitTillPageRedirect(),!0}const d=new URL(window.location.href).searchParams.get("session_state");if(u===xl.LocalStorage||u===xl.SessionStorage)t&&(yield t(d));else{const t={data:null!=d?d:"",type:"set_session_state_from_iframe"};null===(n=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===n||n.postMessage(t)}return zl.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield zl.waitTillPageRedirect(),!0}if("sign-in-silently"===l){const t={type:"check_session_signed_out"};return sessionStorage.setItem("initialized-silent-sign-in","false"),window.parent.parent.postMessage(t,c.origin),zl.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield zl.waitTillPageRedirect(),!0}return zl.setPromptNoneRequestSent(!1),c.location.href=yield r(),window.location.href="about:blank",yield zl.waitTillPageRedirect(),!0}return!1}));return(t,i,n)=>{var l,e,c,o,d;const a=document.createElement("iframe");a.setAttribute("id","opIFrame"),a.style.display="none";let s=document.createElement("iframe");s.setAttribute("id","rpIFrame"),s.style.display="none";const m=document.createElement("iframe");return m.setAttribute("id","promptNoneIFrame"),m.style.display="none",null===(l=null===document||void 0===document?void 0:document.body)||void 0===l||l.appendChild(s),s=document.getElementById("rpIFrame"),null===(c=null===(e=null==s?void 0:s.contentDocument)||void 0===e?void 0:e.body)||void 0===c||c.appendChild(a),null===(d=null===(o=null==s?void 0:s.contentDocument)||void 0===o?void 0:o.body)||void 0===d||d.appendChild(m),r=t,u=i,Z=n,{initialize:b,receivePromptNoneResponse:G,reset:h}}})();var Al;let Pl=Al=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>null,this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}static getInstance(){return this.axiosInstance||(this.axiosInstance=yi.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new Al),this.axiosInstance.interceptors.request.use(t=>l(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(t)}))),this.axiosInstance.interceptors.response.use(t=>this.clientInstance.successHandler(t),t=>this.clientInstance.errorHandler(t)),this.axiosInstance.all=yi.all,this.axiosInstance.spread=yi.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}requestHandler(t){return l(this,void 0,void 0,(function*(){return yield this.attachToken(t),Al.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw Al.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return Al.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}init(t=!0,i){return l(this,void 0,void 0,(function*(){Al.isHandlerEnabled=t,this.attachToken=i}))}enableHandler(){Al.isHandlerEnabled=!0}disableHandler(){Al.isHandlerEnabled=!1}disableHandlerWithTimeout(t=Al.DEFAULT_HANDLER_DISABLE_TIMEOUT){Al.isHandlerEnabled=!1,setTimeout(()=>{Al.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};Pl.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,Pl=Al=function(t,i,n,l){var e,c=arguments.length,o=c<3?i:null===l?l=Object.getOwnPropertyDescriptor(i,n):l;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,i,n,l);else for(var d=t.length-1;d>=0;d--)(e=t[d])&&(o=(c<3?e(o):c>3?e(i,n,o):e(i,n))||o);return c>3&&o&&Object.defineProperty(i,n,o),o}([t=>{}],Pl);class Ml{setData(t,i){return l(this,void 0,void 0,(function*(){localStorage.setItem(t,i)}))}getData(t){var i;return l(this,void 0,void 0,(function*(){return null!==(i=localStorage.getItem(t))&&void 0!==i?i:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){localStorage.removeItem(t)}))}}class Ql{constructor(){this._data=new Map}setData(t,i){return l(this,void 0,void 0,(function*(){this._data.set(t,i)}))}getData(t){var i,n;return l(this,void 0,void 0,(function*(){return null!==(n=null===(i=this._data)||void 0===i?void 0:i.get(t))&&void 0!==n?n:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){this._data.delete(t)}))}}class jl{setData(t,i){return l(this,void 0,void 0,(function*(){sessionStorage.setItem(t,i)}))}getData(t){var i;return l(this,void 0,void 0,(function*(){return null!==(i=sessionStorage.getItem(t))&&void 0!==i?i:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){sessionStorage.removeItem(t)}))}}const El=t=>l(void 0,void 0,void 0,(function*(){var i;const n=(t=>{switch(t){case xl.LocalStorage:return new Ml;case xl.SessionStorage:return new jl;case xl.BrowserMemory:return new Ql;default:return new jl}})(t.storage),e=new Hl(n);yield e.initialize(t);const c=new Bl(e),o=e.getDataLayer(),d=wl(()=>l(void 0,void 0,void 0,(function*(){return e.signOut()})),null!==(i=t.storage)&&void 0!==i?i:xl.SessionStorage,t=>o.setSessionDataParameter(Ki,null!=t?t:"")),r=Pl.getInstance();(null==r?void 0:r.init)&&(yield r.init(!0,t=>l(void 0,void 0,void 0,(function*(){Object.assign({attachToken:!0},t).attachToken&&(t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield e.getAccessToken())}))}))));const a=()=>l(void 0,void 0,void 0,(function*(){var t,i,n,c;const r=yield e.getOIDCServiceEndpoints(),a=yield o.getConfigData();d.initialize(a.clientID,null!==(t=r.checkSessionIframe)&&void 0!==t?t:"",()=>l(void 0,void 0,void 0,(function*(){return(yield e.getBasicUserInfo()).sessionState})),null!==(i=a.checkSessionInterval)&&void 0!==i?i:3,null!==(n=a.sessionRefreshInterval)&&void 0!==n?n:300,a.signInRedirectURL,null!==(c=r.authorizationEndpoint)&&void 0!==c?c:"",a.enablePKCE)})),u=(t,i)=>l(void 0,void 0,void 0,(function*(){const n=yield o.getConfigData();if(n.storage===xl.BrowserMemory&&n.enablePKCE){const t=zl.getPKCE();yield e.setPKCECode(t)}return e.requestAccessToken(t,i).then(()=>l(void 0,void 0,void 0,(function*(){return n.storage===xl.BrowserMemory&&zl.setSignOutURL(yield e.getSignOutURL()),c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),n.enableOIDCSessionManagement&&a(),e.getBasicUserInfo()}))).catch(t=>Promise.reject(t))}));return{disableHttpHandler:()=>((null==r?void 0:r.disableHandler)&&r.disableHandler(),!0),enableHttpHandler:()=>((null==r?void 0:r.enableHandler)&&r.enableHandler(),!0),getAccessToken:()=>l(void 0,void 0,void 0,(function*(){return e.getAccessToken()})),getBasicUserInfo:()=>l(void 0,void 0,void 0,(function*(){return e.getBasicUserInfo()})),getDecodedIDToken:()=>l(void 0,void 0,void 0,(function*(){return e.getDecodedIDToken()})),getHttpClient:()=>r,getIDToken:()=>l(void 0,void 0,void 0,(function*(){return e.getIDToken()})),getOIDCServiceEndpoints:()=>l(void 0,void 0,void 0,(function*(){return e.getOIDCServiceEndpoints()})),httpRequest:t=>l(void 0,void 0,void 0,(function*(){var i,n;let l=!1;const c=yield o.getConfigData();for(const e of[...null!==(i=yield null==c?void 0:c.resourceServerURLs)&&void 0!==i?i:[],null==c?void 0:c.serverOrigin])if(null===(n=null==t?void 0:t.url)||void 0===n?void 0:n.startsWith(e)){l=!0;break}return l?r.request(t).then(t=>Promise.resolve(t)).catch(i=>{var n;return 401===(null===(n=null==i?void 0:i.response)||void 0===n?void 0:n.status)?e.refreshAccessToken().then(()=>r.request(t).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(new Fl("MAIN_THREAD_CLIENT-HR-ES01","main-thread-client","httpRequest","","",t))):Promise.reject(i)}):Promise.reject(new Fl("MAIN_THREAD_CLIENT-HR-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))})),httpRequestAll:t=>l(void 0,void 0,void 0,(function*(){var i,n,l;let c=!0;const d=yield o.getConfigData();for(const e of t){let t=!1;for(const c of[...null!==(n=null===(i=yield d)||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],null==d?void 0:d.serverOrigin])if(null===(l=e.url)||void 0===l?void 0:l.startsWith(c)){t=!0;break}if(!t){c=!1;break}}const a=[];return c?(t.forEach(t=>{a.push(r.request(t))}),(null==r?void 0:r.all)&&r.all(a).then(t=>Promise.resolve(t)).catch(t=>{var i;return 401===(null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.status)?e.refreshAccessToken().then(()=>r.all&&r.all(a).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(new Fl("MAIN_THREAD_CLIENT-HRA-ES01","main-thread-client","httpRequestAll","","",t))):Promise.reject(t)})):Promise.reject(new Fl("MAIN_THREAD_CLIENT-HRA-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))})),isAuthenticated:()=>l(void 0,void 0,void 0,(function*(){return e.isAuthenticated()})),refreshAccessToken:()=>e.refreshAccessToken().then(()=>(c.refreshAccessTokenAutomatically(),e.getBasicUserInfo())).catch(t=>Promise.reject(t)),requestCustomGrant:t=>l(void 0,void 0,void 0,(function*(){var i,n,d;let r=!0,a=!1;const u=yield o.getConfigData();if(null==t?void 0:t.tokenEndpoint){r=!1;for(const l of[...null!==(n=null===(i=yield o.getConfigData())||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],null==u?void 0:u.serverOrigin])if(null===(d=t.tokenEndpoint)||void 0===d?void 0:d.startsWith(l)){a=!0;break}}return r||a?e.requestCustomGrant(t).then(i=>l(void 0,void 0,void 0,(function*(){return t.returnsSession?(c.refreshAccessTokenAutomatically(),e.getBasicUserInfo()):i}))).catch(t=>Promise.reject(t)):Promise.reject(new Fl("MAIN_THREAD_CLIENT-RCG-IV01","main-thread-client","requestCustomGrant","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`"))})),revokeAccessToken:()=>e.revokeAccessToken().then(()=>(c.clearRefreshTokenTimeout(),Promise.resolve(!0))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{(null==r?void 0:r.setHttpRequestErrorCallback)&&r.setHttpRequestErrorCallback(t)},setHttpRequestFinishCallback:t=>{(null==r?void 0:r.setHttpRequestFinishCallback)&&r.setHttpRequestFinishCallback(t)},setHttpRequestStartCallback:t=>{(null==r?void 0:r.setHttpRequestStartCallback)&&r.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==r?void 0:r.setHttpRequestSuccessCallback)&&r.setHttpRequestSuccessCallback(t)},signIn:(t,i,n)=>l(void 0,void 0,void 0,(function*(){var r,Z;const s=yield o.getConfigData();if(yield d.receivePromptNoneResponse(t=>l(void 0,void 0,void 0,(function*(){yield o.setSessionDataParameter(Ki,null!=t?t:"")}))))return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""});if(zl.wasSilentSignInCalled()&&zl.setIsInitializedSilentSignIn(),yield e.isAuthenticated())return c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),s.enableOIDCSessionManagement&&a(),Promise.resolve(yield e.getBasicUserInfo());let b,m;if((null==s?void 0:s.responseMode)===pi.formPost&&i?(b=i,m=null!=n?n:""):(b=null!==(r=new URL(window.location.href).searchParams.get(Yi))&&void 0!==r?r:"",m=null!==(Z=new URL(window.location.href).searchParams.get(Ki))&&void 0!==Z?Z:"",zl.removeAuthorizationCode()),b)return u(b,m);const h=new URL(window.location.href).searchParams.get("error"),I=new URL(window.location.href).searchParams.get("error_description");if(h){const t=new URL(window.location.href);return t.searchParams.delete("error"),t.searchParams.delete("error_description"),history.pushState(null,document.title,t.toString()),Promise.reject(new Fl("MAIN_THREAD_CLIENT-SI-BE","main-thread-client","signIn",h,null!=I?I:""))}return e.getAuthorizationURL(t).then(t=>l(void 0,void 0,void 0,(function*(){return s.storage===xl.BrowserMemory&&s.enablePKCE&&zl.setPKCE(yield e.getPKCECode()),location.href=t,yield zl.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""})})))})),signOut:()=>l(void 0,void 0,void 0,(function*(){return(yield e.isAuthenticated())?location.href=yield e.signOut():location.href=zl.getSignOutURL(),c.clearRefreshTokenTimeout(),yield zl.waitTillPageRedirect(),!0})),trySignInSilently:()=>l(void 0,void 0,void 0,(function*(){var t;const i=yield o.getConfigData();if(zl.setIsInitializedSilentSignIn())return yield d.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""});if(zl.isStatePresentInURL())return zl.setIsInitializedSilentSignIn(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""});const n=document.getElementById("rpIFrame"),c=null===(t=null==n?void 0:n.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");try{const t=yield e.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),n=new URL(t);n.searchParams.set("response_mode","query");const l=n.toString();i.storage===xl.BrowserMemory&&i.enablePKCE&&zl.setPKCE(yield e.getPKCECode()),c.src=l}catch(t){return Promise.reject(t)}return new Promise((t,i)=>{const n=e=>l(void 0,void 0,void 0,(function*(){var l,c;const o=e.data,d=setTimeout(()=>{t(!1)},1e4);"check_session_signed_out"==(null==o?void 0:o.type)&&(window.removeEventListener("message",n),clearTimeout(d),t(!1)),"check_session_signed_in"==(null==o?void 0:o.type)&&(null===(l=null==o?void 0:o.data)||void 0===l?void 0:l.code)&&u(o.data.code,null===(c=null==o?void 0:o.data)||void 0===c?void 0:c.sessionState).then(i=>{window.removeEventListener("message",n),t(i)}).catch(t=>{window.removeEventListener("message",n),i(t)}).finally(()=>{clearTimeout(d)})}));window.addEventListener("message",n)})})),updateConfig:t=>l(void 0,void 0,void 0,(function*(){const i=yield o.getConfigData(),n=!(i&&i.endpoints&&i.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&i.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),l=Object.assign(Object.assign({},i),t);yield e.updateConfig(l),l.enableOIDCSessionManagement&&n&&(d.reset(),a())}))}}));var Dl,Ol=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHI9W10sbj1bXSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89ITE7ZnVuY3Rpb24gcygpe289ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsaT1lLmxlbmd0aDt0PGk7Kyt0KXJbdF09ZVt0XSxuW2UuY2hhckNvZGVBdCh0KV09dDtuWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIGksbyxzPVtdLGE9dDthPG47YSs9MylpPShlW2FdPDwxNikrKGVbYSsxXTw8OCkrZVthKzJdLHMucHVzaChyWyhvPWkpPj4xOCY2M10rcltvPj4xMiY2M10rcltvPj42JjYzXStyWzYzJm9dKTtyZXR1cm4gcy5qb2luKCIiKX1mdW5jdGlvbiB1KGUpe3ZhciB0O298fHMoKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uJTMsdT0iIixjPVtdLGg9MTYzODMsbD0wLGY9bi1pO2w8ZjtsKz1oKWMucHVzaChhKGUsbCxsK2g+Zj9mOmwraCkpO3JldHVybiAxPT09aT8odD1lW24tMV0sdSs9clt0Pj4yXSx1Kz1yW3Q8PDQmNjNdLHUrPSI9PSIpOjI9PT1pJiYodD0oZVtuLTJdPDw4KStlW24tMV0sdSs9clt0Pj4xMF0sdSs9clt0Pj40JjYzXSx1Kz1yW3Q8PDImNjNdLHUrPSI9IiksYy5wdXNoKHUpLGMuam9pbigiIil9ZnVuY3Rpb24gYyhlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBoKGUsdCxyLG4saSxvKXt2YXIgcyxhLHUsYz04Km8taS0xLGg9KDE8PGMpLTEsbD1oPj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDpvLTEscD1uPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9aCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoodT1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSx1Kj0yKSwodCs9cytsPj0xP2YvdTpmKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKHMrKyx1Lz0yKSxzK2w+PWg/KGE9MCxzPWgpOnMrbD49MT8oYT0odCp1LTEpKk1hdGgucG93KDIsaSkscys9bCk6KGE9dCpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbcitkXT0yNTUmYSxkKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsYys9aTtjPjA7ZVtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGMtPTgpO2VbcitkLXBdfD0xMjgqZ312YXIgbD17fS50b1N0cmluZyxmPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWwuY2FsbChlKX07ZnVuY3Rpb24gZCgpe3JldHVybiBnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHAoZSx0KXtpZihkKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBnKGUsdCxyKXtpZighKGcuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBtKHRoaXMsZSl9cmV0dXJuIHYodGhpcyxlLHQscil9ZnVuY3Rpb24gdihlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO2cuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189Zy5wcm90b3R5cGU6ZT13KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIWcuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGsodCxyKSxpPShlPXAoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoXyh0KSl7dmFyIHI9MHxiKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXAoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uP3AoZSwwKTp3KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJmYodC5kYXRhKSlyZXR1cm4gdyhlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIHkoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBtKGUsdCl7aWYoeSh0KSxlPXAoZSx0PDA/MDowfGIodCkpLCFnLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gdyhlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGIodC5sZW5ndGgpO2U9cChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtpZihlPj1kKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gayhlLHQpe2lmKF8oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuICQoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuICQoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiB4KHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gSCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaih0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBVKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHEodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gRShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIFQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWcuZnJvbSh0LG4pKSxfKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6QShlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LGcuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOkEoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIEEoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gUihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gQyhlLHQscixuKXtyZXR1cm4gWCgkKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFAoZSx0LHIsbil7cmV0dXJuIFgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBEKGUsdCxyLG4pe3JldHVybiBQKGUsdCxyLG4pfWZ1bmN0aW9uIE8oZSx0LHIsbil7cmV0dXJuIFgoRyh0KSxlLHIsbil9ZnVuY3Rpb24gSShlLHQscixuKXtyZXR1cm4gWChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFUoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3UoZSk6dShlLnNsaWNlKHQscikpfWZ1bmN0aW9uIE0oZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsdSxjPWVbaV0saD1udWxsLGw9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2w8PXIpc3dpdGNoKGwpe2Nhc2UgMTpjPDEyOCYmKGg9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKHU9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKGg9dSk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYodT0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYodTw1NTI5Nnx8dT41NzM0MykmJihoPXUpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYodT0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZ1PDExMTQxMTImJihoPXUpfW51bGw9PT1oPyhoPTY1NTMzLGw9MSk6aD42NTUzNSYmKGgtPTY1NTM2LG4ucHVzaChoPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG4ucHVzaChoKSxpKz1sfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1MKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1MKSk7cmV0dXJuIHJ9KG4pfWcuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT10LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHQuVFlQRURfQVJSQVlfU1VQUE9SVCxnLnBvb2xTaXplPTgxOTIsZy5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189Zy5wcm90b3R5cGUsZX0sZy5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdihudWxsLGUsdCxyKX0sZy5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoZy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGcuX19wcm90b19fPVVpbnQ4QXJyYXkpLGcuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4geSh0KSx0PD0wP3AoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9wKGUsdCkuZmlsbChyLG4pOnAoZSx0KS5maWxsKHIpOnAoZSx0KX0obnVsbCxlLHQscil9LGcuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFooZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmWihlLnNsaWNlKDAsMCkpfShlKSl9LGcuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFfKGUpfHwhXyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sZy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxnLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFmKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGcuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj1nLmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFfKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sZy5ieXRlTGVuZ3RoPWssZy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGcucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilFKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpRSh0aGlzLHQsdCszKSxFKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClFKHRoaXMsdCx0KzcpLEUodGhpcyx0KzEsdCs2KSxFKHRoaXMsdCsyLHQrNSksRSh0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP00odGhpcywwLGUpOlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIV8oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWcuY29tcGFyZSh0aGlzLGUpfSxnLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighXyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixpKSxjPWUuc2xpY2UodCxyKSxoPTA7aDxhOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGcucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LGcucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBUKHRoaXMsZSx0LHIsITApfSxnLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFQodGhpcyxlLHQsciwhMSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBSKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRCh0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIE8odGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBJKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LGcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEw9NDA5NjtmdW5jdGlvbiBIKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geChlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVYoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gcShlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxpPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIE4oZSx0LHIsbixpLG8pe2lmKCFfKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBLKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBGKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFkoZSx0LHIsbixpLG8pe2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsNCksaChlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBKKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsOCksaChlLHQscixuLDUyLDgpLHIrOH1nLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgZyhpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0sZy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fEIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LGcucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxnLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGcucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGcucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEIoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxnLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sZy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8QihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxnLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8QihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxnLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sZy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLGModGhpcyxlLCEwLDIzLDQpfSxnLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsMjMsNCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITAsNTIsOCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsNTIsOCl9LGcucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8Tih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sZy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxOKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LGcucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDI1NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxnLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsMiw2NTUzNSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwyLDY1NTM1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOksodGhpcyxlLHQsITEpLHQrMn0sZy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Rih0aGlzLGUsdCwhMCksdCs0fSxnLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzR9LGcucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDEyNywtMTI4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGcucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpLKHRoaXMsZSx0LCExKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkYodGhpcyxlLHQsITApLHQrNH0sZy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCs0fSxnLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCEwLHIpfSxnLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCExLHIpfSxnLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gSih0aGlzLGUsdCwhMCxyKX0sZy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEoodGhpcyxlLHQsITEscil9LGcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IWcuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LGcucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9XyhlKT9lOiQobmV3IGcoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB6PS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFYoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uICQoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsYSx1LGMsaDtvfHxzKCk7dmFyIGw9ZS5sZW5ndGg7aWYobCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7Yz0iPSI9PT1lW2wtMl0/MjoiPSI9PT1lW2wtMV0/MTowLGg9bmV3IGkoMypsLzQtYyksYT1jPjA/bC00Omw7dmFyIGY9MDtmb3IodD0wLHI9MDt0PGE7dCs9NCxyKz0zKXU9bltlLmNoYXJDb2RlQXQodCldPDwxOHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8bltlLmNoYXJDb2RlQXQodCsyKV08PDZ8bltlLmNoYXJDb2RlQXQodCszKV0saFtmKytdPXU+PjE2JjI1NSxoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1O3JldHVybiAyPT09Yz8odT1uW2UuY2hhckNvZGVBdCh0KV08PDJ8bltlLmNoYXJDb2RlQXQodCsxKV0+PjQsaFtmKytdPTI1NSZ1KToxPT09YyYmKHU9bltlLmNoYXJDb2RlQXQodCldPDwxMHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxuW2UuY2hhckNvZGVBdCh0KzIpXT4+MixoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1KSxofShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKHosIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIFgoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBRPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LGVlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PWVlLmNhbGwoZSl9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gaWUoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1lZS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIG9lKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1lZS5jYWxsKGUpfWZ1bmN0aW9uIHNlKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksdGUoZSkpZm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGFlPXtpc0FycmF5OnRlLGlzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWVlLmNhbGwoZSl9LGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXJlKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIXJlKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZlIGluc3RhbmNlb2YgRm9ybURhdGF9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpuZSxpc1BsYWluT2JqZWN0OmllLGlzVW5kZWZpbmVkOnJlLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1lZS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09ZWUuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PWVlLmNhbGwoZSl9LGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIG5lKGUpJiZvZShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFVSTFNlYXJjaFBhcmFtcyYmZSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpzZSxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe2llKHRbbl0pJiZpZShyKT90W25dPWUodFtuXSxyKTppZShyKT90W25dPWUoe30scik6dGUocik/dFtuXT1yLnNsaWNlKCk6dFtuXT1yfWZvcih2YXIgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKXNlKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gc2UodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1EodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGNlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKGFlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107YWUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihhZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sYWUuZm9yRWFjaChlLChmdW5jdGlvbihlKXthZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6YWUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2godWUodCkrIj0iK3VlKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gaGUoKXt0aGlzLmhhbmRsZXJzPVtdfWhlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LGhlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0saGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7YWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGxlPWhlO2Z1bmN0aW9uIGZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZGUoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBwZT1mZSxnZT1kZTtmdW5jdGlvbiB2ZShlKXtpZihwZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigocGU9PT1mZXx8IXBlKSYmc2V0VGltZW91dClyZXR1cm4gcGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBwZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gcGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHBlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0VGltZW91dCYmKHBlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsZWFyVGltZW91dCYmKGdlPWNsZWFyVGltZW91dCk7dmFyIHllLG1lPVtdLHdlPSExLGJlPS0xO2Z1bmN0aW9uIF9lKCl7d2UmJnllJiYod2U9ITEseWUubGVuZ3RoP21lPXllLmNvbmNhdChtZSk6YmU9LTEsbWUubGVuZ3RoJiZrZSgpKX1mdW5jdGlvbiBrZSgpe2lmKCF3ZSl7dmFyIGU9dmUoX2UpO3dlPSEwO2Zvcih2YXIgdD1tZS5sZW5ndGg7dDspe2Zvcih5ZT1tZSxtZT1bXTsrK2JlPHQ7KXllJiZ5ZVtiZV0ucnVuKCk7YmU9LTEsdD1tZS5sZW5ndGh9eWU9bnVsbCx3ZT0hMSxmdW5jdGlvbihlKXtpZihnZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChnZT09PWRlfHwhZ2UpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGdlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e2dlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gZ2UuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBnZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFNlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9U2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEVlKCl7fXZhciBUZT1FZSxBZT1FZSxSZT1FZSxDZT1FZSxQZT1FZSxEZT1FZSxPZT1FZTt2YXIgSWU9dC5wZXJmb3JtYW5jZXx8e30sVWU9SWUubm93fHxJZS5tb3pOb3d8fEllLm1zTm93fHxJZS5vTm93fHxJZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBNZT1uZXcgRGF0ZTt2YXIgTGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07bWUucHVzaChuZXcgU2UoZSx0KSksMSE9PW1lLmxlbmd0aHx8d2V8fHZlKGtlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpUZSxhZGRMaXN0ZW5lcjpBZSxvbmNlOlJlLG9mZjpDZSxyZW1vdmVMaXN0ZW5lcjpQZSxyZW1vdmVBbGxMaXN0ZW5lcnM6RGUsZW1pdDpPZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpVZS5jYWxsKEllKSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1NZSkvMWUzfX0sSGU9TGUsamU9ZnVuY3Rpb24oZSx0KXthZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LHhlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxxZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4geGUobyx0LHIsbixpKX0sQmU9YWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLGFlLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksYWUuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxOZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLEtlPWFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPWFlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxpPWUuaGVhZGVycyxvPWUucmVzcG9uc2VUeXBlO2FlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBpWyJDb250ZW50LVR5cGUiXTt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgYT1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtpLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShhKyI6Iit1KX12YXIgYyxoLGw9KGM9ZS5iYXNlVVJMLGg9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChoKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGgpOmgpO2Z1bmN0aW9uIGYoKXtpZihzKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHM/ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGFlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWFlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWFlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmTmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0ocy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOm8mJiJ0ZXh0IiE9PW8mJiJqc29uIiE9PW8/cy5yZXNwb25zZTpzLnJlc3BvbnNlVGV4dCxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6c307IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QocWUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLGkpLHM9bnVsbH19aWYocy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksY2UobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gcz9zLm9ubG9hZGVuZD1mOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cyYmND09PXMucmVhZHlTdGF0ZSYmKDAhPT1zLnN0YXR1c3x8cy5yZXNwb25zZVVSTCYmMD09PXMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoZil9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKHFlKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IocWUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIocWUodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHMpKSxzPW51bGx9LGFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBkPShlLndpdGhDcmVkZW50aWFsc3x8S2UobCkpJiZlLnhzcmZDb29raWVOYW1lP0JlLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2QmJihpW2UueHNyZkhlYWRlck5hbWVdPWQpfSJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmFlLmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaVt0XTpzLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxhZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChzLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxvJiYianNvbiIhPT1vJiYocy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmcy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7cyYmKHMuYWJvcnQoKSxyKGUpLHM9bnVsbCl9KSksbnx8KG49bnVsbCkscy5zZW5kKG4pfSkpfSxZZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFdlKGUsdCl7IWFlLmlzVW5kZWZpbmVkKGUpJiZhZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgSmUsemU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PUhlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSGUpKSYmKEplPUZlKSxKZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUodCwiQWNjZXB0IiksamUodCwiQ29udGVudC1UeXBlIiksYWUuaXNGb3JtRGF0YShlKXx8YWUuaXNBcnJheUJ1ZmZlcihlKXx8YWUuaXNCdWZmZXIoZSl8fGFlLmlzU3RyZWFtKGUpfHxhZS5pc0ZpbGUoZSl8fGFlLmlzQmxvYihlKT9lOmFlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOmFlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6YWUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKGFlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksYWUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZhZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgeGUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07emUuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPXt9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7emUuaGVhZGVyc1tlXT1hZS5tZXJnZShZZSl9KSk7dmFyIFZlPXplLCRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxWZTtyZXR1cm4gYWUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sR2U9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIFhlKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBaZT1mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPSRlLmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPWFlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksYWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxWZS5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gWGUoZSksdC5kYXRhPSRlLmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIEdlKHQpfHwoWGUoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT0kZS5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxRZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxpPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLG89WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0scz1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhZS5pc1BsYWluT2JqZWN0KGUpJiZhZS5pc1BsYWluT2JqZWN0KHQpP2FlLm1lcmdlKGUsdCk6YWUuaXNQbGFpbk9iamVjdCh0KT9hZS5tZXJnZSh7fSx0KTphZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEoZVtuXSx0W25dKX1hZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe2FlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1hKHZvaWQgMCx0W2VdKSl9KSksYWUuZm9yRWFjaChpLHUpLGFlLmZvckVhY2gobywoZnVuY3Rpb24obil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEodm9pZCAwLHRbbl0pfSkpLGFlLmZvckVhY2gocywoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09YShlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09YSh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KGkpLmNvbmNhdChvKS5jb25jYXQocyksaD1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIGFlLmZvckVhY2goaCx1KSxyfSxldD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9heGlvcy8tL2F4aW9zLTAuMjEuNC50Z3oiLF9pbnRlZ3JpdHk6InNoYTUxMi11dDV2ZXdraXU4ampHQmRxcE00NFh4anVDanE5TEFLZUhWbW9WZkhWenk4ZUhneHhxOFNiQVZRTm92REE4bVZpMDVrUDBFYS9uL1V6Y1NIY1RKUWZOZz09IixfZnJvbToiYXhpb3NAMC4yMS40In0sdHQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3R0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgcnQ9e30sbnQ9ZXQudmVyc2lvbi5zcGxpdCgiLiIpO2Z1bmN0aW9uIGl0KGUsdCl7Zm9yKHZhciByPXQ/dC5zcGxpdCgiLiIpOm50LG49ZS5zcGxpdCgiLiIpLGk9MDtpPDM7aSsrKXtpZihyW2ldPm5baV0pcmV0dXJuITA7aWYocltpXTxuW2ldKXJldHVybiExfXJldHVybiExfXR0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7dmFyIG49dCYmaXQodCk7ZnVuY3Rpb24gaShlLHQpe3JldHVybiJbQXhpb3MgdiIrZXQudmVyc2lvbisiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixvLHMpe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IoaShvLCIgaGFzIGJlZW4gcmVtb3ZlZCBpbiAiK3QpKTtyZXR1cm4gbiYmIXJ0W29dJiYocnRbb109ITAsY29uc29sZS53YXJuKGkobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLG8scyl9fTt2YXIgb3Q9e2lzT2xkZXJWZXJzaW9uOml0LGFzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSx1PXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09dSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK3UpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczp0dH0sc3Q9b3QudmFsaWRhdG9ycztmdW5jdGlvbiBhdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGxlLHJlc3BvbnNlOm5ldyBsZX19YXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlPyhlPWFyZ3VtZW50c1sxXXx8e30pLnVybD1hcmd1bWVudHNbMF06ZT1lfHx7fSwoZT1RZSh0aGlzLmRlZmF1bHRzLGUpKS5tZXRob2Q/ZS5tZXRob2Q9ZS5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD9lLm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOmUubWV0aG9kPSJnZXQiO3ZhciB0PWUudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PXQmJm90LmFzc2VydE9wdGlvbnModCx7c2lsZW50SlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksZm9yY2VkSlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksY2xhcmlmeVRpbWVvdXRFcnJvcjpzdC50cmFuc2l0aW9uYWwoc3QuYm9vbGVhbiwiMS4wLjAiKX0sITEpO3ZhciByPVtdLG49ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdC5ydW5XaGVuJiYhMT09PXQucnVuV2hlbihlKXx8KG49biYmdC5zeW5jaHJvbm91cyxyLnVuc2hpZnQodC5mdWxmaWxsZWQsdC5yZWplY3RlZCkpfSkpO3ZhciBpLG89W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFuKXt2YXIgcz1bWmUsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkocyxyKSxzPXMuY29uY2F0KG8pLGk9UHJvbWlzZS5yZXNvbHZlKGUpO3MubGVuZ3RoOylpPWkudGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gaX1mb3IodmFyIGE9ZTtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxjPXIuc2hpZnQoKTt0cnl7YT11KGEpfWNhdGNoKGUpe2MoZSk7YnJlYWt9fXRyeXtpPVplKGEpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO28ubGVuZ3RoOylpPWkudGhlbihvLnNoaWZ0KCksby5zaGlmdCgpKTtyZXR1cm4gaX0sYXQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1RZSh0aGlzLmRlZmF1bHRzLGUpLGNlKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LGFlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFFlKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KSksYWUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoUWUobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6cn0pKX19KSk7dmFyIHV0PWF0O2Z1bmN0aW9uIGN0KGUpe3RoaXMubWVzc2FnZT1lfWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDYW5jZWwiKyh0aGlzLm1lc3NhZ2U/IjogIit0aGlzLm1lc3NhZ2U6IiIpfSxjdC5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgaHQ9Y3Q7ZnVuY3Rpb24gbHQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7ZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgaHQoZSksdChyLnJlYXNvbikpfSkpfWx0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGx0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IGx0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgZnQ9bHQ7ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9bmV3IHV0KGUpLHI9USh1dC5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gYWUuZXh0ZW5kKHIsdXQucHJvdG90eXBlLHQpLGFlLmV4dGVuZChyLHQpLHJ9dmFyIHB0PWR0KFZlKTtwdC5BeGlvcz11dCxwdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGR0KFFlKHB0LmRlZmF1bHRzLGUpKX0scHQuQ2FuY2VsPWh0LHB0LkNhbmNlbFRva2VuPWZ0LHB0LmlzQ2FuY2VsPUdlLHB0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LHB0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LHB0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJiEwPT09ZS5pc0F4aW9zRXJyb3J9O3ZhciBndD1wdCx2dD1wdDtndC5kZWZhdWx0PXZ0O3ZhciB5dCxtdCx3dD1ndDsKLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiBidChlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0obXQ9eXR8fCh5dD17fSkpLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLG10LnF1ZXJ5PSJxdWVyeSI7dmFyIF90OyFmdW5jdGlvbihlKXtlLkNvbmZpZ0RhdGE9ImNvbmZpZ19kYXRhIixlLk9JRENQcm92aWRlck1ldGFEYXRhPSJvaWRjX3Byb3ZpZGVyX21ldGFfZGF0YSIsZS5TZXNzaW9uRGF0YT0ic2Vzc2lvbl9kYXRhIixlLlRlbXBvcmFyeURhdGE9InRlbXBvcmFyeV9kYXRhIn0oX3R8fChfdD17fSkpO2NvbnN0IGt0PSJyZWZyZXNoX3Rva2VuX3RpbWVyIjtjbGFzcyBTdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxyLG4saSxvKXtzdXBlcihudWxsIT1uP246bnVsbD09bz92b2lkIDA6by5tZXNzYWdlKSx0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuY29kZT1lLHRoaXMuZmlsZT10LHRoaXMubWV0aG9kPXIsdGhpcy5kZXNjcmlwdGlvbj1pLHRoaXMuZXJyb3I9byxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIEV0IGV4dGVuZHMgU3R7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8scyxhLHUpe3N1cGVyKGUsdCxyLG4saSksdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLmNvZGU9ZSx0aGlzLmZpbGU9dCx0aGlzLm1ldGhvZD1yLHRoaXMuZGVzY3JpcHRpb249aSx0aGlzLm5ldHdvcmtFcnJvckNvZGU9byx0aGlzLm5ldHdvcmtFcnJvck1lc3NhZ2U9cyx0aGlzLnN0YXR1cz1hLHRoaXMubmV0d29ya0Vycm9yRGF0YT11fX12YXIgVHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBBdChlLHQscil7cmV0dXJuIGUocj17cGF0aDp0LGV4cG9ydHM6e30scmVxdWlyZTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0obnVsbD09dCYmci5wYXRoKX19LHIuZXhwb3J0cyksci5leHBvcnRzfXZhciBSdD12b2lkIDAhPT10P3Q6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LEN0PVtdLFB0PVtdLER0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LE90PSExO2Z1bmN0aW9uIEl0KCl7T3Q9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KUN0W3RdPWVbdF0sUHRbZS5jaGFyQ29kZUF0KHQpXT10O1B0WyItIi5jaGFyQ29kZUF0KDApXT02MixQdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gVXQoZSx0LHIpe2Zvcih2YXIgbixpLG89W10scz10O3M8cjtzKz0zKW49KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKEN0WyhpPW4pPj4xOCY2M10rQ3RbaT4+MTImNjNdK0N0W2k+PjYmNjNdK0N0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBNdChlKXt2YXIgdDtPdHx8SXQoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLHU9ci1uO2E8dTthKz1zKW8ucHVzaChVdChlLGEsYStzPnU/dTphK3MpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLGkrPUN0W3Q+PjJdLGkrPUN0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saSs9Q3RbdD4+MTBdLGkrPUN0W3Q+PjQmNjNdLGkrPUN0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gTHQoZSx0LHIsbixpKXt2YXIgbyxzLGE9OCppLW4tMSx1PSgxPDxhKS0xLGM9dT4+MSxoPS03LGw9cj9pLTE6MCxmPXI/LTE6MSxkPWVbdCtsXTtmb3IobCs9ZixvPWQmKDE8PC1oKS0xLGQ+Pj0taCxoKz1hO2g+MDtvPTI1NipvK2VbdCtsXSxsKz1mLGgtPTgpO2ZvcihzPW8mKDE8PC1oKS0xLG8+Pj0taCxoKz1uO2g+MDtzPTI1NipzK2VbdCtsXSxsKz1mLGgtPTgpO2lmKDA9PT1vKW89MS1jO2Vsc2V7aWYobz09PXUpcmV0dXJuIHM/TmFOOjEvMCooZD8tMToxKTtzKz1NYXRoLnBvdygyLG4pLG8tPWN9cmV0dXJuKGQ/LTE6MSkqcypNYXRoLnBvdygyLG8tbil9ZnVuY3Rpb24gSHQoZSx0LHIsbixpLG8pe3ZhciBzLGEsdSxjPTgqby1pLTEsaD0oMTw8YyktMSxsPWg+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGQ9bj8wOm8tMSxwPW4/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1oKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLXMpKTwxJiYocy0tLHUqPTIpLCh0Kz1zK2w+PTE/Zi91OmYqTWF0aC5wb3coMiwxLWwpKSp1Pj0yJiYocysrLHUvPTIpLHMrbD49aD8oYT0wLHM9aCk6cytsPj0xPyhhPSh0KnUtMSkqTWF0aC5wb3coMixpKSxzKz1sKTooYT10Kk1hdGgucG93KDIsbC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtyK2RdPTI1NSZhLGQrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSxjKz1pO2M+MDtlW3IrZF09MjU1JnMsZCs9cCxzLz0yNTYsYy09OCk7ZVtyK2QtcF18PTEyOCpnfXZhciBqdD17fS50b1N0cmluZyx4dD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qdC5jYWxsKGUpfTtLdC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PVJ0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fFJ0LlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIHF0PUJ0KCk7ZnVuY3Rpb24gQnQoKXtyZXR1cm4gS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gTnQoZSx0KXtpZihCdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1LdC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgS3QodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gS3QoZSx0LHIpe2lmKCEoS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIEt0KSlyZXR1cm4gbmV3IEt0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIFd0KHRoaXMsZSl9cmV0dXJuIEZ0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIEZ0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPUt0LnByb3RvdHlwZTplPUp0KGUsdCksZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKSwhS3QuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfCR0KHQsciksaT0oZT1OdChlLG4pKS53cml0ZSh0LHIpO3JldHVybiBpIT09biYmKGU9ZS5zbGljZSgwLGkpKSxlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihWdCh0KSl7dmFyIHI9MHx6dCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1OdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/TnQoZSwwKTpKdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZ4dCh0LmRhdGEpKXJldHVybiBKdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFl0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gV3QoZSx0KXtpZihZdCh0KSxlPU50KGUsdDwwPzA6MHx6dCh0KSksIUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gSnQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHx6dCh0Lmxlbmd0aCk7ZT1OdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24genQoZSl7aWYoZT49QnQoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrQnQoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uICR0KGUsdCl7aWYoVnQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIF9yKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4ga3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gX3IoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gR3QoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gaHIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGFyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gdXIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIHNyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIFh0KGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gWnQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PUt0LmZyb20odCxuKSksVnQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpRdChlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTpRdChlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gUXQoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZXIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHRyKGUsdCxyLG4pe3JldHVybiBTcihfcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBycihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBucihlLHQscixuKXtyZXR1cm4gcnIoZSx0LHIsbil9ZnVuY3Rpb24gaXIoZSx0LHIsbil7cmV0dXJuIFNyKGtyKHQpLGUscixuKX1mdW5jdGlvbiBvcihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBzcihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/TXQoZSk6TXQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBhcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSx1LGM9ZVtpXSxoPW51bGwsbD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkrbDw9cilzd2l0Y2gobCl7Y2FzZSAxOmM8MTI4JiYoaD1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoaD11KTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGg9dSk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJnU8MTExNDExMiYmKGg9dSl9bnVsbD09PWg/KGg9NjU1MzMsbD0xKTpoPjY1NTM1JiYoaC09NjU1MzYsbi5wdXNoKGg+Pj4xMCYxMDIzfDU1Mjk2KSxoPTU2MzIwfDEwMjMmaCksbi5wdXNoKGgpLGkrPWx9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2Zvcih2YXIgcj0iIixuPTA7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1mdW5jdGlvbiB1cihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGNyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBocihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPWJyKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGxyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGk9IiIsbz0wO288bi5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10rMjU2Km5bbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZnIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGRyKGUsdCxyLG4saSxvKXtpZighVnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHByKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBncihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7aTxvOysraSllW3IraV09dD4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiB2cihlLHQscixuLGksbyl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHlyKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDQpLEh0KGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIG1yKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDgpLEh0KGUsdCxyLG4sNTIsOCkscis4fUt0LnBvb2xTaXplPTgxOTIsS3QuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPUt0LnByb3RvdHlwZSxlfSxLdC5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRnQobnVsbCxlLHQscil9LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihLdC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLEt0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxLdC5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBZdCh0KSx0PD0wP050KGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/TnQoZSx0KS5maWxsKHIsbik6TnQoZSx0KS5maWxsKHIpOk50KGUsdCl9KG51bGwsZSx0LHIpfSxLdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gV3QobnVsbCxlKX0sS3QuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBXdChudWxsLGUpfSxLdC5pc0J1ZmZlcj1FcixLdC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIVZ0KGUpfHwhVnQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LEt0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEt0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCF4dChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBLdC5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPUt0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFWdChvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4saSksaSs9by5sZW5ndGh9cmV0dXJuIG59LEt0LmJ5dGVMZW5ndGg9JHQsS3QucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxLdC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKVh0KHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxLdC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KVh0KHRoaXMsdCx0KzMpLFh0KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpWHQodGhpcyx0LHQrNyksWHQodGhpcyx0KzEsdCs2KSxYdCh0aGlzLHQrMix0KzUpLFh0KHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2FyKHRoaXMsMCxlKTpHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEt0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1LdC5jb21wYXJlKHRoaXMsZSl9LEt0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LEt0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49aSYmdD49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLHU9dGhpcy5zbGljZShuLGkpLGM9ZS5zbGljZSh0LHIpLGg9MDtoPGE7KytoKWlmKHVbaF0hPT1jW2hdKXtvPXVbaF0scz1jW2hdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sS3QucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LEt0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gWnQodGhpcyxlLHQsciwhMCl9LEt0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFp0KHRoaXMsZSx0LHIsITEpfSxLdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgdCluPXQscj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksZS5sZW5ndGg+MCYmKHI8MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIGVyKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHRyKHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBycih0aGlzLGUsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBucih0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGlyKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gb3IodGhpcyxlLHQscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxvPSEwfX0sS3QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX0sS3QucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189S3QucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IEt0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSxLdC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sS3QucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxLdC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LEt0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxLdC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sS3QucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sS3QucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LEt0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxLdC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LEt0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sS3QucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksTHQodGhpcyxlLCEwLDIzLDQpfSxLdC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsMjMsNCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITAsNTIsOCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsNTIsOCl9LEt0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtlPStlLHR8PTAscnw9MCxufHxkcih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sS3QucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fGRyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDEsMjU1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpwcih0aGlzLGUsdCwhMCksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxLdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz1yLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMSwxMjcsLTEyOCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sS3QucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOnByKHRoaXMsZSx0LCEwKSx0KzJ9LEt0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4geXIodGhpcyxlLHQsITAscil9LEt0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB5cih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMCxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK28pLHQpO3JldHVybiBvfSxLdC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhS3QuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9VnQoZSk/ZTpfcihuZXcgS3QoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB3cj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBicihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gX3IoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIGtyKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvLHM7T3R8fEl0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IER0KDMqYS80LW8pLG49bz4wP2EtNDphO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylpPVB0W2UuY2hhckNvZGVBdCh0KV08PDE4fFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8UHRbZS5jaGFyQ29kZUF0KHQrMildPDw2fFB0W2UuY2hhckNvZGVBdCh0KzMpXSxzW3UrK109aT4+MTYmMjU1LHNbdSsrXT1pPj44JjI1NSxzW3UrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPVB0W2UuY2hhckNvZGVBdCh0KV08PDJ8UHRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbdSsrXT0yNTUmaSk6MT09PW8mJihpPVB0W2UuY2hhckNvZGVBdCh0KV08PDEwfFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxQdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1t1KytdPWk+PjgmMjU1LHNbdSsrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZSh3ciwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gU3IoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxUcihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZUcihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gVHIoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgQXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOkt0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLEt0LmFsbG9jKCtlKX0saXNCdWZmZXI6RXIsa01heExlbmd0aDpxdH0pLFJyPUF0KChmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10JTQ7aWYoIXIpcmV0dXJuIGU7dmFyIG49dCxpPTQtcixvPXQraSxzPUt0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIsbisrKTtyZXR1cm4gcy50b1N0cmluZygpfX0pKSxDcj1BdCgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuaXNCdWZmZXIoZSk/aShlLnRvU3RyaW5nKCJiYXNlNjQiKSk6aShLdC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxSci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89cjtvLmVuY29kZT1yLG8uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuZnJvbShuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sby50b0Jhc2U2ND1uLG8uZnJvbUJhc2U2ND1pLG8udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIEt0LmZyb20obihlKSwiYmFzZTY0Iil9LHQuZGVmYXVsdD1vfSkpLFByPUF0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9Q3IuZGVmYXVsdCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9KSksRHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0oQXQoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsdSxjLGgsbCxmLGQscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sdT1yWzJdLGM9clszXSxoPXJbNF0sbD1yWzVdLGY9cls2XSxkPXJbN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1Jm5bdl0pPDwyNHwoMjU1Jm5bdisxXSk8PDE2fCgyNTUmblt2KzJdKTw8OHwyNTUmblt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKyhoJmxefmgmZil8MCkrKGQrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZ1XmEmdSl8MCxkPWYsZj1sLGw9aCxoPWMreXwwLGM9dSx1PWEsYT1zLHM9eSttfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPXUsclszXSs9YyxyWzRdKz1oLHJbNV0rPWwscls2XSs9ZixyWzddKz1kLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksYz1zKHQsZSksaD1uZXcgaShjKSxsPW5ldyBVaW50OEFycmF5KGguZGlnZXN0TGVuZ3RoKSxmPWwubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkobikscD0wO3A8bjtwKyspZj09PWwubGVuZ3RoJiYoYShsLGgscixvKSxmPTApLGRbcF09bFtmKytdO3JldHVybiBoLmNsZWFuKCksbC5maWxsKDApLG8uZmlsbCgwKSxkfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkocyksYz1uZXcgVWludDhBcnJheShzKSxoPW5ldyBVaW50OEFycmF5KG4pLGw9MDtsKnM8bjtsKyspe3ZhciBmPWwrMTthWzBdPWY+Pj4yNCYyNTUsYVsxXT1mPj4+MTYmMjU1LGFbMl09Zj4+PjgmMjU1LGFbM109Zj4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaChjKTtmb3IodmFyIGQ9MDtkPHM7ZCsrKXVbZF09Y1tkXTtmb3IoZD0yO2Q8PXI7ZCsrKXtvLnJlc2V0KCksby51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgcD0wO3A8cztwKyspdVtwXV49Y1twXX1mb3IoZD0wO2Q8cyYmbCpzK2Q8bjtkKyspaFtsKnMrZF09dVtkXX1mb3IobD0wO2w8cztsKyspdVtsXT1jW2xdPTA7Zm9yKGw9MDtsPDQ7bCsrKWFbbF09MDtyZXR1cm4gby5jbGVhbigpLGh9fShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfSkpKTtmdW5jdGlvbiBPcigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIElyKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVXI9T3IsTXI9SXI7ZnVuY3Rpb24gTHIoZSl7aWYoVXI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFVyPT09T3J8fCFVcikmJnNldFRpbWVvdXQpcmV0dXJuIFVyPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVXIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFVyLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBVci5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBSdC5zZXRUaW1lb3V0JiYoVXI9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIFJ0LmNsZWFyVGltZW91dCYmKE1yPWNsZWFyVGltZW91dCk7dmFyIEhyLGpyPVtdLHhyPSExLHFyPS0xO2Z1bmN0aW9uIEJyKCl7eHImJkhyJiYoeHI9ITEsSHIubGVuZ3RoP2pyPUhyLmNvbmNhdChqcik6cXI9LTEsanIubGVuZ3RoJiZOcigpKX1mdW5jdGlvbiBOcigpe2lmKCF4cil7dmFyIGU9THIoQnIpO3hyPSEwO2Zvcih2YXIgdD1qci5sZW5ndGg7dDspe2ZvcihIcj1qcixqcj1bXTsrK3FyPHQ7KUhyJiZIcltxcl0ucnVuKCk7cXI9LTEsdD1qci5sZW5ndGh9SHI9bnVsbCx4cj0hMSxmdW5jdGlvbihlKXtpZihNcj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChNcj09PUlyfHwhTXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIE1yPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e01yKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gTXIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBNci5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIEtyKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9S3IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBGcj1SdC5wZXJmb3JtYW5jZXx8e30sWXI9KEZyLm5vd3x8RnIubW96Tm93fHxGci5tc05vd3x8RnIub05vd3x8RnIud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07anIucHVzaChuZXcgS3IoZSx0KSksMSE9PWpyLmxlbmd0aHx8eHJ8fExyKE5yKX0pLFdyPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KEFyKSxKcj1BdCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1Xci5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9V3I6KG4oV3IsdCksdC5CdWZmZXI9aSksbihyLGkpLGkuZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxpLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBXci5TbG93QnVmZmVyKGUpfX0pKSx6cj1BdCgoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj1Kci5CdWZmZXIsbj1UdC5jcnlwdG98fFR0Lm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLGkpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBvPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIHM9MDtzPGU7cys9dCluLmdldFJhbmRvbVZhbHVlcyhvLnNsaWNlKHMscyt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhvKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9ZcigoZnVuY3Rpb24oKXtpKG51bGwsbyl9KSk6b306ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKTtjb25zdCBWcj1uZXcgVGV4dEVuY29kZXIsJHI9bmV3IFRleHREZWNvZGVyO3ZhciBHcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdzt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCIpfSgpO2NvbnN0IFhyPWU9PntsZXQgdD1lO3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9JHIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIiksbmV3IFVpbnQ4QXJyYXkoR3IuYXRvYih0KS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSl9O2NsYXNzIFpyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpfX1jbGFzcyBRciBleHRlbmRzIFpye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn19Y2xhc3MgZW4gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyB0biBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyBybiBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIG5uIGV4dGVuZHMgWnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn19Y2xhc3Mgc24gZXh0ZW5kcyBRcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQifX12YXIgYW49R3IuY3J5cHRvO2Z1bmN0aW9uIHVuKCl7aWYoIUdyLmlzU2VjdXJlQ29udGV4dCYmIUdyLmNyeXB0by5zdWJ0bGUpdGhyb3cgbmV3IFpyKCJXZWIgQ3J5cHRvZ3JhcGh5IEFQSSBpcyBhdmFpbGFibGUgb25seSBpbiBTZWN1cmUgQ29udGV4dHMuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJlX0NvbnRleHRzIil9Y29uc3QgY249YXN5bmMgZT0+e3ZhciB0LHI7Y29uc3R7YWxnb3JpdGhtOm4sa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LHI7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHRuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc3Vic3RyKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnN1YnN0cigtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTplLmNydn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKTtsZXQgbz0iandrIixzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCJQQktERjIiPT09bi5uYW1lJiYobz0icmF3IixzPVhyKGUuaykpLHVuKCksYW4uc3VidGxlLmltcG9ydEtleShvLHMsbixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0ocj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1yP3I6aSl9O2Z1bmN0aW9uIGhuKGUpe3JldHVybiEhZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1hc3luYyBmdW5jdGlvbiBsbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/Y24oey4uLmUsYWxnOnQsZXh0OiExfSk6WHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHRuKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIHVuc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBjbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX1jb25zdCBmbj1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDAhPT1uLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2Zvcihjb25zdCBpIG9mIHIuY3JpdCl7aWYoIXQuaGFzKGkpKXRocm93IG5ldyB0bihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7aX0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbmApO2lmKHZvaWQgMD09PW5baV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBpcyBtaXNzaW5nYCk7aWYodC5nZXQoaSkmJnZvaWQgMD09PXJbaV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfS5iaW5kKHZvaWQgMCxybixuZXcgTWFwKFtbImI2NCIsITBdXSkpLGRuPSgoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkuYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTthc3luYyBmdW5jdGlvbiBwbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBybigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgcm4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBybigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgcm4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhaG4oZS5oZWFkZXIpKXRocm93IG5ldyBybigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBuPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVhyKGUucHJvdGVjdGVkKTtuPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkobixlLmhlYWRlcikpdGhyb3cgbmV3IHJuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3QgaT17Li4ubiwuLi5lLmhlYWRlcn07bGV0IG89ITA7aWYoZm4obixpKS5oYXMoImI2NCIpJiYobz1uLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBvKSl0aHJvdyBuZXcgcm4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOnN9PWk7aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhcyl0aHJvdyBuZXcgcm4oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IGE9ciYmZG4oci5hbGdvcml0aG1zKTtpZihhJiYhYS5oYXMocykpdGhyb3cgbmV3IGVuKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYobyl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgcm4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KG4sZSkpLCgoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fGUubWF0Y2goL15BXGR7M30oPzpHQ00pS1ckLykpe2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwic2VjcmV0Ij09PXQudHlwZSlyZXR1cm47dGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpfWlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBvciBLZXlPYmplY3QgaW5zdGFuY2VzIG11c3QgYmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIik7aWYoInNlY3JldCI9PT10LnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9KShzLHQpO2NvbnN0IHU9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KFZyLmVuY29kZShlLnByb3RlY3RlZHx8IiIpLFZyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1ZyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksYz1YcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0KGFzeW5jKGUsdCxyLG4pPT57bGV0IGk7aWYodW4oKSx0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzeW1tZXRyaWMga2V5cyBhcmUgb25seSBhcHBsaWNhYmxlIGZvciBITUFDLWJhc2VkIGFsZ29yaXRobXMiKTtpPWF3YWl0IGFuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zdWJzdHIoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFsidmVyaWZ5Il0pfWVsc2UgaT10O3JldHVybigoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7Y29uc3Qgcj1wYXJzZUludChlLnN1YnN0cigtMyksMTApLHtsZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPHIpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBzeW1tZXRyaWMga2V5cyB0byBiZSAke3J9IGJpdHMgb3IgbGFyZ2VyYCl9aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKSxhbi5zdWJ0bGUudmVyaWZ5KGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkhTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiSE1BQyJ9O2Nhc2UiSFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJITUFDIn07Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDozMn07Y2FzZSJQUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6NDh9O2Nhc2UiUFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjY0fTtjYXNlIlJTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In07Y2FzZSJFUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9O2Nhc2UiRVM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifTtkZWZhdWx0OnRocm93IG5ldyB0bihgYWxnICR7ZX0gaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUpLGkscixuKX0pKHMsdCxjLHUpKXRocm93IG5ldyBvbjtsZXQgaDtoPW8/WHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Wci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgbD17cGF5bG9hZDpofTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihsLnByb3RlY3RlZEhlYWRlcj1uKSx2b2lkIDAhPT1lLmhlYWRlciYmKGwudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGx9Y29uc3QgZ249L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIHZuPWU9Pntjb25zdCB0PWduLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKDg2NDAwKnIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IHluPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBtbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fHluKGUudHlwKSE9PXluKG4pKSl0aHJvdyBuZXcgUXIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPXR5cGVvZiBpfHwhaXx8QXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgbm4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKCJzdHJpbmciPT10eXBlb2Ygbz9bb106bykuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBRcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mKHU9aS5hdWQpP2MuaW5jbHVkZXModSk6Yy5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldCh1KSkpKSkpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIHUsYztsZXQgaDtzd2l0Y2godHlwZW9mIHIuY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpoPXZuKHIuY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpoPXIuY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmg9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpsfT1yLGY9KGQ9bHx8bmV3IERhdGUsTWF0aC5mbG9vcihkLmdldFRpbWUoKS8xZTMpKTt2YXIgZDtpZih2b2lkIDAhPT1pLmlhdHx8ci5tYXhUb2tlbkFnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwPT09aS5leHAmJmkuaWF0PmYraCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgUXIoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+ZitoKXRocm93IG5ldyBRcignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBRcignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9Zi1oKXRocm93IG5ldyBzbignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKHIubWF4VG9rZW5BZ2Upe2NvbnN0IGU9Zi1pLmlhdDtpZihlLWg+KCJudW1iZXIiPT10eXBlb2Ygci5tYXhUb2tlbkFnZT9yLm1heFRva2VuQWdlOnZuKHIubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgc24oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWgpdGhyb3cgbmV3IFFyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2NsYXNzIHdue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBiYXNlNjRVUkxFbmNvZGUoZSl7cmV0dXJuIFByLmVuY29kZShlKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0vZywiIil9c3RhdGljIGdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZSh6cigzMikpfXN0YXRpYyBnZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShuZXcgZyhEcigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKSl9c3RhdGljIGdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKXtyZXR1cm5bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il19c3RhdGljIGdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UoUHIuZGVjb2RlKGUsInV0ZjgiKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihyLmtpZD09PWUua2lkKXJldHVybiBsbih7YWxnOmUuYWxnLGU6ZS5lLGt0eTplLmt0eSxuOmUubn0pO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkNSWVBUT19VVElMLUdURlRJVC1JVjAxIiwiY3J5cHRvLXV0aWxzIiwiZ2V0SldLRm9yVGhlSWRUb2tlbiIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK3Iua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKSl9c3RhdGljIGlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxvKXtyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT0kci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgcm4oIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6biwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IHJuKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBwbih7cGF5bG9hZDppfHx2b2lkIDAscHJvdGVjdGVkOm58fHZvaWQgMCxzaWduYXR1cmU6b3x8dm9pZCAwfSx0LHIpO3JldHVybntwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9fShlLHQscik7cmV0dXJue3BheWxvYWQ6bW4obi5wcm90ZWN0ZWRIZWFkZXIsbi5wYXlsb2FkLHIpLHByb3RlY3RlZEhlYWRlcjpuLnByb3RlY3RlZEhlYWRlcn19KGUsdCx7YWxnb3JpdGhtczp0aGlzLmdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKSxhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOm8saXNzdWVyOm4sc3ViamVjdDppfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJDUllQVE9fVVRJTC1JVklULUlWMDIiLCJjcnlwdG8tdXRpbHMiLCJpc1ZhbGlkSWRUb2tlbiIsIlZhbGlkYXRpbmcgSUQgdG9rZW4gZmFpbGVkIixlKSkpKX1zdGF0aWMgZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD1Qci5kZWNvZGUoZS5zcGxpdCgiLiIpWzFdLCJ1dGY4Iik7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFN0KCJDUllQVE9fVVRJTC1ESVQtSVYwMSIsImNyeXB0by11dGlscyIsImRlY29kZUlEVG9rZW4iLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGJue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQscixuO2NvbnN0IGk9d24uZGVjb2RlSURUb2tlbihlKSxvPXRoaXMuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKGkpLHM9dGhpcy5leHRyYWN0VXNlck5hbWUoaSksYT1udWxsIT09KHQ9aS5naXZlbl9uYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPWkuZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsYz1hJiZ1P2Ake2F9ICR7dX1gOmF8fHV8fCIiLGg9bnVsbCE9PShuPWkucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09bj9uOmM7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOm8sdXNlcm5hbWU6c30sdGhpcy5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoaSkpfXN0YXRpYyBmaWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO251bGw9PXR8fGRlbGV0ZSB0LmlzcyxudWxsPT10fHxkZWxldGUgdC5zdWIsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IHI9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCBuPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtyW25dPXR9KSkscn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX19Ym4uZXh0cmFjdFVzZXJOYW1lPShlLHQ9IkAiKT0+e2NvbnN0IHI9ZS5zdWIuc3BsaXQodCk7cmV0dXJuIHIubGVuZ3RoPjImJnIucG9wKCksci5qb2luKHQpfSxibi5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9KGUsdD0iQCIpPT57Y29uc3Qgcj1lLnN1Yi5zcGxpdCh0KTtyZXR1cm4gci5sZW5ndGg+Mj9yW3IubGVuZ3RoLTFdOiIifTtjbGFzcyBfbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfXJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIGUud2VsbEtub3duRW5kcG9pbnQ/ZS5zZXJ2ZXJPcmlnaW4rZS53ZWxsS25vd25FbmRwb2ludDplLnNlcnZlck9yaWdpbisiL29hdXRoMi90b2tlbi8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiJ9KSl9cmVzb2x2ZUVuZHBvaW50cyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIHIub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWcmJnIuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhyLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W25dPShudWxsPT1yP3ZvaWQgMDpyLmVuZHBvaW50cyk/ci5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IHI9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvYXV0aG9yaXplIixlbmRfc2Vzc2lvbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29pZGMvbG9nb3V0Iixqd2tzX3VyaTp0LnNlcnZlck9yaWdpbisiL29hdXRoMi9qd2tzIixjaGVja19zZXNzaW9uX2lmcmFtZTp0LnNlcnZlck9yaWdpbisiL29pZGMvY2hlY2tzZXNzaW9uIixyZXZvY2F0aW9uX2VuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Jldm9rZSIsdG9rZW5fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvdG9rZW4ifTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHIpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gdCYmMCE9PXQudHJpbSgpLmxlbmd0aD93dC5nZXQodCx7d2l0aENyZWRlbnRpYWxzOm51bGw9PXI/dm9pZCAwOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT10LnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1WSVQtTlIwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgcmV0dXJuZWQgIit0LnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLG49KHlpZWxkIHRoaXMucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCkpLnNwbGl0KCIvLndlbGwta25vd24iKVswXTtyZXR1cm4gciYmcj09PW4/d24uZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sdC5kYXRhLmtleXMpLnRoZW4oKHQ9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHduLmlzVmFsaWRJZFRva2VuKGUsdCwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELHIsd24uZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSkudGhlbigoZT0+ZSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLVZJVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIix2b2lkIDAsdm9pZCAwLGUpKSkpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULUVTMDQiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSk6UHJvbWlzZS5yZXNvbHZlKCExKX0pKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfSEVMUEVSLVZJVC1OUjA1IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULU5GMDEiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpfSkpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlKXt2YXIgdDtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcj0ib3BlbmlkIjtjb25zdCBuPXlpZWxkIHRoaXMuX2NvbmZpZygpLGk9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7cmV0dXJuIG4uc2NvcGUmJm4uc2NvcGUubGVuZ3RoPjAmJihuLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8bi5zY29wZS5wdXNoKCJvcGVuaWQiKSxyPW4uc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsaS5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsYm4uZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGkuaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHIpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsbi5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PSh0PW4uY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09dD90OiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKCl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1IVFItTlIwMSIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgdG9rZW4gcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7aWYoKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKGUuZGF0YS5pZF90b2tlbikudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKTtjb25zdCB0PXthY2Nlc3NUb2tlbjplLmRhdGEuYWNjZXNzX3Rva2VuLGV4cGlyZXNJbjplLmRhdGEuZXhwaXJlc19pbixpZFRva2VuOmUuZGF0YS5pZF90b2tlbixyZWZyZXNoVG9rZW46ZS5kYXRhLnJlZnJlc2hfdG9rZW4sc2NvcGU6ZS5kYXRhLnNjb3BlLHRva2VuVHlwZTplLmRhdGEudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1IVFItSVYwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJUaGUgaWQgdG9rZW4gcmV0dXJuZWQgaXMgbm90IHZhbGlkLiIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBoYXMgZmFpbGVkIHRoZSB2YWxpZGF0aW9uIGNoZWNrLiIpKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLUhBVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsdm9pZCAwLHZvaWQgMCxlKSkpKTt7Y29uc3QgdD17YWNjZXNzVG9rZW46ZS5kYXRhLmFjY2Vzc190b2tlbixleHBpcmVzSW46ZS5kYXRhLmV4cGlyZXNfaW4saWRUb2tlbjplLmRhdGEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmUuZGF0YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmUuZGF0YS5zY29wZSx0b2tlblR5cGU6ZS5kYXRhLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKSxQcm9taXNlLnJlc29sdmUodCl9fSkpfX1jbGFzcyBrbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgX24oZSksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgU3QoIkFVVEhfQ09SRS1HQVUtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRBdXRob3JpemF0aW9uVVJMIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPW5ldyBVUkwodCk7bi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZXNwb25zZV90eXBlIiwiY29kZSIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIixyLmNsaWVudElEKTtsZXQgaT0ib3BlbmlkIjtpZihyLnNjb3BlJiZyLnNjb3BlLmxlbmd0aD4wJiYoci5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHIuc2NvcGUucHVzaCgib3BlbmlkIiksaT1yLnNjb3BlLmpvaW4oIiAiKSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsaSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLHIuc2lnbkluUmVkaXJlY3RVUkwpLHIucmVzcG9uc2VNb2RlJiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLHIucmVzcG9uc2VNb2RlKSxyLmVuYWJsZVBLQ0Upe2NvbnN0IGU9d24uZ2V0Q29kZVZlcmlmaWVyKCksdD13bi5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiLGUpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLHQpfXIucHJvbXB0JiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInByb21wdCIsci5wcm9tcHQpO2NvbnN0IG89ZTtpZihvKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMobykpIiIhPWUmJiIiIT10JiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoZSx0LnRvU3RyaW5nKCkpO3JldHVybiBuLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighcnx8MD09PXIudHJpbSgpLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7dCYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCkpO2NvbnN0IGk9W107aS5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLG4uY2xpZW50U2VjcmV0JiZuLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaChgY2xpZW50X3NlY3JldD0ke24uY2xpZW50U2VjcmV0fWApO2NvbnN0IG89ZTtyZXR1cm4gaS5wdXNoKGBjb2RlPSR7b31gKSxpLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIiksaS5wdXNoKGByZWRpcmVjdF91cmk9JHtuLnNpZ25JblJlZGlyZWN0VVJMfWApLG4uZW5hYmxlUEtDRSYmKGkucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIikpLHd0LnBvc3QocixpLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDEtRVMwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXF1ZXN0QWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMS1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsIlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsdD15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKCFyLnJlZnJlc2hfdG9rZW4pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBUaGUgaWRlbnRpdHkgc2VydmVyIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3Qgbj1bXTtyZXR1cm4gbi5wdXNoKGBjbGllbnRfaWQ9JHt0LmNsaWVudElEfWApLG4ucHVzaChgcmVmcmVzaF90b2tlbj0ke3IucmVmcmVzaF90b2tlbn1gKSxuLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHQuY2xpZW50U2VjcmV0JiZ0LmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJm4ucHVzaChgY2xpZW50X3NlY3JldD0ke3QuY2xpZW50U2VjcmV0fWApLHd0LnBvc3QoZSxuLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMi1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTtjb25zdCByPVtdO3JldHVybiByLnB1c2goYGNsaWVudF9pZD0ke3QuY2xpZW50SUR9YCksci5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWApLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpLHd0LnBvc3QoZSxyLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+MjAwIT09ZS5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMy1OUjAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOih0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLFByb21pc2UucmVzb2x2ZShlKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMy1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBuO2lmKG49ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnQudG9rZW5fZW5kcG9pbnQsIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3QgaT17ZGF0YTooeWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSx0XSk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3ModCk7cmV0dXJuYCR7ZX09JHtyfWB9KSkpKSkpLmpvaW4oIiYiKSxoZWFkZXJzOk9iamVjdC5hc3NpZ24oe30sYm4uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QiLHVybDpuLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c307cmV0dXJuIGUuYXR0YWNoVG9rZW4mJihpLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWB9KSksd3QoaSkudGhlbigodD0+MjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUodCkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkNHLU5SMDQiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSx0PWJuLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT1lP3ZvaWQgMDplLmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3BlczplLnNjb3BlLHNlc3Npb25TdGF0ZTplLnNlc3Npb25fc3RhdGUsdXNlcm5hbWU6dC51c2VybmFtZX07cmV0dXJuIHQuZGlzcGxheU5hbWUmJiIiIT09dC5kaXNwbGF5TmFtZXx8ZGVsZXRlIHQuZGlzcGxheU5hbWUsdC50ZW5hbnREb21haW4mJiIiIT09dC50ZW5hbnREb21haW58fGRlbGV0ZSB0LnRlbmFudERvbWFpbixyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSx0KSxyfSkpfWdldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpLmlkX3Rva2VuO3JldHVybiB3bi5kZWNvZGVJRFRva2VuKGUpfSkpfWdldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpLmlkX3Rva2VufSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKCFlJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCk7Y29uc3QgdD15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKTtyZXR1cm4gd3QuZ2V0KHQpLnRoZW4oKGU9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIDIwMCE9PWUuc3RhdHVzP1Byb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLUdPUE0tTlIwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRPSURDUHJvdmlkZXJNZXRhRGF0YSIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgdG8gZ2V0IHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCAiK2Uuc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKTooeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHMoZS5kYXRhKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoITApKX0pKSkpLmNhdGNoKCgoKT0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSghMCl9KSkpKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50OmUuYXV0aG9yaXphdGlvbl9lbmRwb2ludCxjaGVja1Nlc3Npb25JZnJhbWU6ZS5jaGVja19zZXNzaW9uX2lmcmFtZSxlbmRTZXNzaW9uRW5kcG9pbnQ6ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludCxpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6ZS5pbnRyb3NwZWN0aW9uX2VuZHBvaW50LGlzc3VlcjplLmlzc3Vlcixqd2tzVXJpOmUuandrc191cmkscmVnaXN0cmF0aW9uRW5kcG9pbnQ6ZS5yZWdpc3RyYXRpb25fZW5kcG9pbnQscmV2b2NhdGlvbkVuZHBvaW50OmUucmV2b2NhdGlvbl9lbmRwb2ludCx0b2tlbkVuZHBvaW50OmUudG9rZW5fZW5kcG9pbnQsdXNlcmluZm9FbmRwb2ludDplLnVzZXJpbmZvX2VuZHBvaW50LHdlbGxLbm93bkVuZHBvaW50OnlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpfX0pKX1nZXRTaWduT3V0VVJMKCl7dmFyIGUsdCxyO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49bnVsbD09PShlPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmVuZF9zZXNzaW9uX2VuZHBvaW50LGk9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IFN0KCJBVVRIX0NPUkUtR1NPVS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgbz1udWxsPT09KHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmlkX3Rva2VuO2lmKCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdTT1UtTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiSUQgdG9rZW4gbm90IGZvdW5kLiIsIk5vIElEIHRva2VuIGNvdWxkIGJlIGZvdW5kLiBFaXRoZXIgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24gaXMgbG9zdCBvciB5b3UgaGF2ZSBub3Qgc2lnbmVkIGluLiIpO2NvbnN0IHM9bnVsbCE9PShyPW51bGw9PWk/dm9pZCAwOmkuc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09cj9yOm51bGw9PWk/dm9pZCAwOmkuc2lnbkluUmVkaXJlY3RVUkw7aWYoIXN8fDA9PT1zLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IFN0KCJBVVRIX0NPUkUtR1NPVS1ORjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtyZXR1cm5gJHtufT9pZF90b2tlbl9oaW50PSR7b30mcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPSR7c30mc3RhdGU9c2lnbl9vdXRfc3VjY2Vzc2B9KSl9c2lnbk91dCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5nZXRTaWduT3V0VVJMKCk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKCksZX0pKX1nZXRBY2Nlc3NUb2tlbigpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmFjY2Vzc190b2tlbn0pKX1pc0F1dGhlbnRpY2F0ZWQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gQm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpfSkpfWdldFBLQ0VDb2RlKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKX0pKX1zZXRQS0NFQ29kZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIsZSl9KSl9dXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLGUub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWc/KG51bGw9PWU/dm9pZCAwOmUuZW5kcG9pbnRzKSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHt9KSkpOihudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKSl9KSl9fWNsYXNzIFNue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSx0KXt2YXIgcjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT1uJiZKU09OLnBhcnNlKG4pLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHQpLHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfXNldFZhbHVlKGUsdCxyKXt2YXIgbjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPW51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09bj9uOm51bGwsbz1pJiZKU09OLnBhcnNlKGkpLHM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtbdF06cn0pLGE9SlNPTi5zdHJpbmdpZnkocyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLGEpfSkpfXJlbW92ZVZhbHVlKGUsdCl7dmFyIHI7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9biYmSlNPTi5wYXJzZShuKSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bdF07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSl7cmV0dXJuYCR7ZX0tJHt0aGlzLl9pZH1gfXNldENvbmZpZ0RhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpLGUpfSkpfWdldENvbmZpZ0RhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRUZW1wb3JhcnlEYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0U2Vzc2lvbkRhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSkpfSkpfWdldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1zZXRDb25maWdEYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUsdCl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUsdCl9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSxlLHQpfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlLHQpfSkpfXJlbW92ZUNvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlKX0pKX19Y29uc3QgRW49e2NsaWVudEhvc3Q6b3JpZ2luLGNsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTp5dC5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITB9O2NsYXNzIFRuewovKioKICAgICAgICAgKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSAuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0b3JlfSBzdG9yZSAtIFRoZSBzdG9yZSBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CiAgICAgICAgICogY29uc3QgYXV0aCA9IG5ldyBBc2dhcmRlb0F1dGhDbGllbnQ8Q3VzdG9tQ2xpZW50Q29uZmlnPihfc3RvcmUpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2NvbnN0cnVjdG9yCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovCmNvbnN0cnVjdG9yKGUpe1RuLl9pbnN0YW5jZUlEP1RuLl9pbnN0YW5jZUlEKz0xOlRuLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBTbihgaW5zdGFuY2VfJHtUbi5faW5zdGFuY2VJRH1gLGUpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcga24odGhpcy5fZGF0YUxheWVyKQovKioKICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBTREsgd2l0aCB0aGUgY29uZmlnIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0F1dGhDbGllbnRDb25maWc8VD59IGNvbmZpZyAtIFRoZSBjb25maWcgb2JqZWN0IHRvIGluaXRpYWxpemUgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxFbiksZSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RBY2Nlc3NUb2tlbihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QXhpb3NSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGN1c3RvbS1ncmFudCByZXF1ZXN0IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlCiAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtDdXN0b21HcmFudENvbmZpZ30gY29uZmlnIC0gQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBncmFudCBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAqIG9uIHlvdXIgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgKiAgIGRhdGE6IHsKICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAogICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICogICAgICAgc2NvcGU6ICJ7e3Njb3BlfX0iLAogICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKICAgICAgICAgKiAgIH0sCiAgICAgICAgICogICBpZDogImFjY291bnQtc3dpdGNoIiwKICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAogICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICogICBzaWduSW5SZXF1aXJlZDogdHJ1ZQogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF1dGgucmVxdWVzdEN1c3RvbUdyYW50KGNvbmZpZykudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2lzQXV0aGVudGljYXRlZCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuaXNBdXRoZW50aWNhdGVkKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNsYXNzIEFuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8pe3N1cGVyKG51bGwhPW4/bjpudWxsPT1vP3ZvaWQgMDpvLm1lc3NhZ2UpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5jb2RlPWUsdGhpcy5maWxlPXQsdGhpcy5tZXRob2Q9cix0aGlzLmVycm9yPW8sdGhpcy5kZXNjcmlwdGlvbj1pLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgUm57Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZih0LnJlZnJlc2hfdG9rZW4pe2NvbnN0IHI9cGFyc2VJbnQodC5leHBpcmVzX2luKSxuPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QsSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSl7Y29uc3QgZT1KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSk7Y2xlYXJUaW1lb3V0KGUpfX0pKX19Y29uc3QgQ249ImluaXQiO3ZhciBQbixEbixPbjshZnVuY3Rpb24oZSl7ZS5Mb2NhbFN0b3JhZ2U9ImxvY2FsU3RvcmFnZSIsZS5TZXNzaW9uU3RvcmFnZT0ic2Vzc2lvblN0b3JhZ2UiLGUuV2ViV29ya2VyPSJ3ZWJXb3JrZXIiLGUuQnJvd3Nlck1lbW9yeT0iYnJvd3Nlck1lbW9yeSJ9KFBufHwoUG49e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50In0oRG58fChEbj17fSkpO2NsYXNzIElue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWxldCBVbj1Pbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT13dC5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBPbiksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9d3QuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9d3Quc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLE9uLmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKHQpLHR9KSl9ZXJyb3JIYW5kbGVyKGUpe3Rocm93IE9uLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfXN1Y2Nlc3NIYW5kbGVyKGUpe3JldHVybiBPbi5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1pbml0KHQ9ITAscil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPbi5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1yfSkpfWVuYWJsZUhhbmRsZXIoKXtPbi5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7T24uaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KGU9T24uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVCl7T24uaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e09uLmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07VW4uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsVW49T249ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PW4/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixuKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxyLHMpOmkodCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30oW2U9Pnt9XSxVbik7Y2xhc3MgTW57Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxyKX0pKX1nZXREYXRhKHQpe3ZhciByLG47cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0ocj10aGlzLl9kYXRhKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXQodCkpJiZ2b2lkIDAhPT1uP246Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fWNvbnN0IExuPXNlbGY7bGV0IEhuO0xuLm9ubWVzc2FnZT0oe2RhdGE6dCxwb3J0czpyfSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbztjb25zdCBzPXJbMF07aWYodC50eXBlPT09Q258fEhuKXN3aXRjaCh0LnR5cGUpe2Nhc2UgQ246dHJ5e2NvbnN0IHI9T2JqZWN0LmFzc2lnbih7fSx0LmRhdGEpO0huPXlpZWxkKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IE1uLG49bmV3IFRuKHIpO3lpZWxkIG4uaW5pdGlhbGl6ZSh0KTtjb25zdCBpPW5ldyBSbihuKSxvPW4uZ2V0RGF0YUxheWVyKCkscz1Vbi5nZXRJbnN0YW5jZSgpO3JldHVybihudWxsPT1zP3ZvaWQgMDpzLmluaXQpJiYoeWllbGQgcy5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCkuYXR0YWNoVG9rZW4mJih0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIG4uZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpKSkpLHtkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntzLmRpc2FibGVIYW5kbGVyJiZzLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57cy5lbmFibGVIYW5kbGVyJiZzLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9Pm4uZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnlpZWxkIG4uZ2V0UEtDRUNvZGUoKX19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgbi5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixpO2xldCBhPSExO2NvbnN0IHU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IG4gb2ZbLi4ubnVsbCE9PShyPW51bGw9PT0oZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cj9yOltdLG51bGw9PXU/dm9pZCAwOnUuc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGk9bnVsbD09dD92b2lkIDA6dC51cmwpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN0YXJ0c1dpdGgobikpe2E9ITA7YnJlYWt9cmV0dXJuIGE/cy5yZXF1ZXN0KHQpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT57dmFyIHI7cmV0dXJuIDQwMT09PShudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzKT9uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT5zLnJlcXVlc3QodCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUi1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIiIsIiIsZSkpKSk6UHJvbWlzZS5yZWplY3QoZSl9KSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUi1JVjAyIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGh0dHBSZXF1ZXN0QWxsOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHIsaTtsZXQgYT0hMDtjb25zdCB1PXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBuIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBzIG9mWy4uLm51bGwhPT0ocj1udWxsPT09KGU9eWllbGQgby5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PXI/cjpbXSxudWxsPT11P3ZvaWQgMDp1LnNlcnZlck9yaWdpbl0paWYobnVsbD09PShpPW4udXJsKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdGFydHNXaXRoKHMpKXt0PSEwO2JyZWFrfWlmKCF0KXthPSExO2JyZWFrfX1jb25zdCBjPVtdO3JldHVybiBhPyh0LmZvckVhY2goKGU9PntjLnB1c2gocy5yZXF1ZXN0KGUpKX0pKSwobnVsbD09cz92b2lkIDA6cy5hbGwpJiZzLmFsbChjKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+e3ZhciB0O3JldHVybiA0MDE9PT0obnVsbD09PSh0PW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnN0YXR1cyk/bi5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+cy5hbGwmJnMuYWxsKGMpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBbigiV09SS0VSX0NPUkUtSFJBLUVTMDEiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0QWxsIiwiIiwiIixlKSkpKTpQcm9taXNlLnJlamVjdChlKX0pKSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUkEtSVYwMiIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3QiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxpc0F1dGhlbnRpY2F0ZWQ6KCk9Pm4uaXNBdXRoZW50aWNhdGVkKCkscmVmcmVzaEFjY2Vzc1Rva2VuOigpPT5uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkscmVxdWVzdEFjY2Vzc1Rva2VuOih0LHIscyk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7cmV0dXJuIHMmJmUuZW5hYmxlUEtDRSYmKHlpZWxkIG4uc2V0UEtDRUNvZGUocykpLHQ/bi5yZXF1ZXN0QWNjZXNzVG9rZW4odCxudWxsIT1yP3I6IiIpLnRoZW4oKCgpPT4oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1SQVQxLU5GMDEiLCJ3b3JrZXItY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKX0pKSxyZXF1ZXN0Q3VzdG9tR3JhbnQ6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHIscyxhO2xldCB1PSEwLGM9ITE7Y29uc3QgaD15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtpZihudWxsPT10P3ZvaWQgMDp0LnRva2VuRW5kcG9pbnQpe3U9ITE7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShzPW51bGw9PT0ocj15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cz9zOltdLG51bGw9PWg/dm9pZCAwOmguc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGE9dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09YT92b2lkIDA6YS5zdGFydHNXaXRoKGUpKXtjPSEwO2JyZWFrfX1yZXR1cm4gdXx8Yz9uLnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdC5yZXR1cm5zU2Vzc2lvbj8oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpOnJ9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLVJDRy1JVjAxIiwid29ya2VyLWNvcmUiLCJyZXF1ZXN0Q3VzdG9tR3JhbnQiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+bi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4oaS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxQcm9taXNlLnJlc29sdmUoITApKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpLHNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s6ZT0+eyhudWxsPT1zP3ZvaWQgMDpzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LHNldFNlc3Npb25TdGF0ZTp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBvLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KX0pKSxzaWduT3V0OigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx5aWVsZCBuLnNpZ25PdXQoKX0pKSxzdGFydEF1dG9SZWZyZXNoVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2kuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCl9KSksdXBkYXRlQ29uZmlnOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIG4udXBkYXRlQ29uZmlnKHQpfSkpfX0pKSkociksSG4uc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKEJuKSxIbi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHFuKSxIbi5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soam4pLEhuLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKHhuKSxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9hdXRoX3VybCI6SG4uZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT10P3ZvaWQgMDp0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpIbi5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PShuPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY29kZSxudWxsPT09KGk9bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zZXNzaW9uU3RhdGUsbnVsbD09PShvPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW8/dm9pZCAwOm8ucGtjZSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0IjpIbi5odHRwUmVxdWVzdCh0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImh0dHAtcmVxdWVzdC1hbGwiOkhuLmh0dHBSZXF1ZXN0QWxsKHQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2Uic2lnbi1vdXQiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uc2lnbk91dCgpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpIbi5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXZva2UtYWNjZXNzLXRva2VuIjpIbi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImdldC1vaWRjLXNlcnZpY2UtZW5kcG9pbnRzIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRCYXNpY1VzZXJJbmZvKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWRlY29kZWQtaWQtdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOkhuLmVuYWJsZUh0dHBIYW5kbGVyKCkscy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiZGlzYWJsZV9odHRwX2hhbmRsZXIiOkhuLmRpc2FibGVIdHRwSGFuZGxlcigpLHMucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X3NpZ25fb3V0X3VybCI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRTaWduT3V0VVJMKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4ucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKEhuLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInNldF9zZXNzaW9uX3N0YXRlIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLnNldFNlc3Npb25TdGF0ZShudWxsPT10P3ZvaWQgMDp0LmRhdGEpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4udXBkYXRlQ29uZmlnKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7ZGVmYXVsdDpudWxsPT1zfHxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IEFuKCJDTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJjbGllbnQud29ya2VyIiwib25tZXNzYWdlIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsYFRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICR7dC50eXBlfSwgaXMgaW52YWxpZC5gKSkpfWVsc2Ugcy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBBbigiQ0xJRU5UX1dPUktFUi1PTk1TRy1ORjAxIiwiY2xpZW50LndvcmtlciIsdC50eXBlLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpO2NvbnN0IGpuPSgpPT57TG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LHhuPWU9PntMbi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0scW49KCk9PntMbi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9LEJuPWU9Pntjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7ZGVsZXRlIHQudG9KU09OLExuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPXQ/dDoiIiksdHlwZToicmVxdWVzdC1lcnJvciJ9KX07cmV0dXJue319KCk7Cgo=",null,!1,function(t){return Dl=Dl||function(t,i,n){var l=void 0===i?null:i,e=function(t,i){var n=atob(t);if(i){for(var l=new Uint8Array(n.length),e=0,c=n.length;e<c;++e)l[e]=n.charCodeAt(e);return String.fromCharCode.apply(null,new Uint16Array(l.buffer))}return n}(t,void 0!==n&&n),c=e.indexOf("\n",10)+1,o=e.substring(c)+(l?"//# sourceMappingURL="+l:""),d=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(d)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHI9W10sbj1bXSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89ITE7ZnVuY3Rpb24gcygpe289ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsaT1lLmxlbmd0aDt0PGk7Kyt0KXJbdF09ZVt0XSxuW2UuY2hhckNvZGVBdCh0KV09dDtuWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIGksbyxzPVtdLGE9dDthPG47YSs9MylpPShlW2FdPDwxNikrKGVbYSsxXTw8OCkrZVthKzJdLHMucHVzaChyWyhvPWkpPj4xOCY2M10rcltvPj4xMiY2M10rcltvPj42JjYzXStyWzYzJm9dKTtyZXR1cm4gcy5qb2luKCIiKX1mdW5jdGlvbiB1KGUpe3ZhciB0O298fHMoKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uJTMsdT0iIixjPVtdLGg9MTYzODMsbD0wLGY9bi1pO2w8ZjtsKz1oKWMucHVzaChhKGUsbCxsK2g+Zj9mOmwraCkpO3JldHVybiAxPT09aT8odD1lW24tMV0sdSs9clt0Pj4yXSx1Kz1yW3Q8PDQmNjNdLHUrPSI9PSIpOjI9PT1pJiYodD0oZVtuLTJdPDw4KStlW24tMV0sdSs9clt0Pj4xMF0sdSs9clt0Pj40JjYzXSx1Kz1yW3Q8PDImNjNdLHUrPSI9IiksYy5wdXNoKHUpLGMuam9pbigiIil9ZnVuY3Rpb24gYyhlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBoKGUsdCxyLG4saSxvKXt2YXIgcyxhLHUsYz04Km8taS0xLGg9KDE8PGMpLTEsbD1oPj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDpvLTEscD1uPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9aCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoodT1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSx1Kj0yKSwodCs9cytsPj0xP2YvdTpmKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKHMrKyx1Lz0yKSxzK2w+PWg/KGE9MCxzPWgpOnMrbD49MT8oYT0odCp1LTEpKk1hdGgucG93KDIsaSkscys9bCk6KGE9dCpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbcitkXT0yNTUmYSxkKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsYys9aTtjPjA7ZVtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGMtPTgpO2VbcitkLXBdfD0xMjgqZ312YXIgbD17fS50b1N0cmluZyxmPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWwuY2FsbChlKX07ZnVuY3Rpb24gZCgpe3JldHVybiBnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHAoZSx0KXtpZihkKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBnKGUsdCxyKXtpZighKGcuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBtKHRoaXMsZSl9cmV0dXJuIHYodGhpcyxlLHQscil9ZnVuY3Rpb24gdihlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO2cuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189Zy5wcm90b3R5cGU6ZT13KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIWcuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGsodCxyKSxpPShlPXAoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoXyh0KSl7dmFyIHI9MHxiKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXAoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uP3AoZSwwKTp3KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJmYodC5kYXRhKSlyZXR1cm4gdyhlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIHkoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBtKGUsdCl7aWYoeSh0KSxlPXAoZSx0PDA/MDowfGIodCkpLCFnLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gdyhlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGIodC5sZW5ndGgpO2U9cChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtpZihlPj1kKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gayhlLHQpe2lmKF8oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuICQoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuICQoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiB4KHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gSCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaih0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBVKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHEodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gRShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIFQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWcuZnJvbSh0LG4pKSxfKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6QShlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LGcuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOkEoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIEEoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gUihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gQyhlLHQscixuKXtyZXR1cm4gWCgkKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFAoZSx0LHIsbil7cmV0dXJuIFgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBEKGUsdCxyLG4pe3JldHVybiBQKGUsdCxyLG4pfWZ1bmN0aW9uIE8oZSx0LHIsbil7cmV0dXJuIFgoRyh0KSxlLHIsbil9ZnVuY3Rpb24gSShlLHQscixuKXtyZXR1cm4gWChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFUoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3UoZSk6dShlLnNsaWNlKHQscikpfWZ1bmN0aW9uIE0oZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsdSxjPWVbaV0saD1udWxsLGw9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2w8PXIpc3dpdGNoKGwpe2Nhc2UgMTpjPDEyOCYmKGg9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKHU9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKGg9dSk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYodT0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYodTw1NTI5Nnx8dT41NzM0MykmJihoPXUpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYodT0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZ1PDExMTQxMTImJihoPXUpfW51bGw9PT1oPyhoPTY1NTMzLGw9MSk6aD42NTUzNSYmKGgtPTY1NTM2LG4ucHVzaChoPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG4ucHVzaChoKSxpKz1sfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1MKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1MKSk7cmV0dXJuIHJ9KG4pfWcuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT10LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHQuVFlQRURfQVJSQVlfU1VQUE9SVCxnLnBvb2xTaXplPTgxOTIsZy5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189Zy5wcm90b3R5cGUsZX0sZy5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdihudWxsLGUsdCxyKX0sZy5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoZy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGcuX19wcm90b19fPVVpbnQ4QXJyYXkpLGcuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4geSh0KSx0PD0wP3AoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9wKGUsdCkuZmlsbChyLG4pOnAoZSx0KS5maWxsKHIpOnAoZSx0KX0obnVsbCxlLHQscil9LGcuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFooZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmWihlLnNsaWNlKDAsMCkpfShlKSl9LGcuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFfKGUpfHwhXyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sZy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxnLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFmKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGcuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj1nLmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFfKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sZy5ieXRlTGVuZ3RoPWssZy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGcucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilFKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpRSh0aGlzLHQsdCszKSxFKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClFKHRoaXMsdCx0KzcpLEUodGhpcyx0KzEsdCs2KSxFKHRoaXMsdCsyLHQrNSksRSh0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP00odGhpcywwLGUpOlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIV8oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWcuY29tcGFyZSh0aGlzLGUpfSxnLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighXyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixpKSxjPWUuc2xpY2UodCxyKSxoPTA7aDxhOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGcucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LGcucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBUKHRoaXMsZSx0LHIsITApfSxnLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFQodGhpcyxlLHQsciwhMSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBSKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRCh0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIE8odGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBJKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LGcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEw9NDA5NjtmdW5jdGlvbiBIKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geChlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVYoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gcShlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxpPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIE4oZSx0LHIsbixpLG8pe2lmKCFfKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBLKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBGKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFkoZSx0LHIsbixpLG8pe2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsNCksaChlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBKKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsOCksaChlLHQscixuLDUyLDgpLHIrOH1nLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgZyhpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0sZy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fEIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LGcucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxnLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGcucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGcucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEIoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxnLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sZy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8QihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxnLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8QihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxnLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sZy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLGModGhpcyxlLCEwLDIzLDQpfSxnLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsMjMsNCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITAsNTIsOCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsNTIsOCl9LGcucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8Tih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sZy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxOKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LGcucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDI1NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxnLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsMiw2NTUzNSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwyLDY1NTM1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOksodGhpcyxlLHQsITEpLHQrMn0sZy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Rih0aGlzLGUsdCwhMCksdCs0fSxnLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzR9LGcucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDEyNywtMTI4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGcucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpLKHRoaXMsZSx0LCExKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkYodGhpcyxlLHQsITApLHQrNH0sZy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCs0fSxnLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCEwLHIpfSxnLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCExLHIpfSxnLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gSih0aGlzLGUsdCwhMCxyKX0sZy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEoodGhpcyxlLHQsITEscil9LGcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IWcuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LGcucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9XyhlKT9lOiQobmV3IGcoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB6PS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFYoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uICQoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsYSx1LGMsaDtvfHxzKCk7dmFyIGw9ZS5sZW5ndGg7aWYobCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7Yz0iPSI9PT1lW2wtMl0/MjoiPSI9PT1lW2wtMV0/MTowLGg9bmV3IGkoMypsLzQtYyksYT1jPjA/bC00Omw7dmFyIGY9MDtmb3IodD0wLHI9MDt0PGE7dCs9NCxyKz0zKXU9bltlLmNoYXJDb2RlQXQodCldPDwxOHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8bltlLmNoYXJDb2RlQXQodCsyKV08PDZ8bltlLmNoYXJDb2RlQXQodCszKV0saFtmKytdPXU+PjE2JjI1NSxoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1O3JldHVybiAyPT09Yz8odT1uW2UuY2hhckNvZGVBdCh0KV08PDJ8bltlLmNoYXJDb2RlQXQodCsxKV0+PjQsaFtmKytdPTI1NSZ1KToxPT09YyYmKHU9bltlLmNoYXJDb2RlQXQodCldPDwxMHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxuW2UuY2hhckNvZGVBdCh0KzIpXT4+MixoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1KSxofShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKHosIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIFgoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBRPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LGVlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PWVlLmNhbGwoZSl9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gaWUoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1lZS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIG9lKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1lZS5jYWxsKGUpfWZ1bmN0aW9uIHNlKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksdGUoZSkpZm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGFlPXtpc0FycmF5OnRlLGlzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWVlLmNhbGwoZSl9LGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXJlKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIXJlKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZlIGluc3RhbmNlb2YgRm9ybURhdGF9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpuZSxpc1BsYWluT2JqZWN0OmllLGlzVW5kZWZpbmVkOnJlLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1lZS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09ZWUuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PWVlLmNhbGwoZSl9LGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIG5lKGUpJiZvZShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFVSTFNlYXJjaFBhcmFtcyYmZSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpzZSxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe2llKHRbbl0pJiZpZShyKT90W25dPWUodFtuXSxyKTppZShyKT90W25dPWUoe30scik6dGUocik/dFtuXT1yLnNsaWNlKCk6dFtuXT1yfWZvcih2YXIgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKXNlKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gc2UodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1EodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGNlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKGFlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107YWUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihhZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sYWUuZm9yRWFjaChlLChmdW5jdGlvbihlKXthZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6YWUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2godWUodCkrIj0iK3VlKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gaGUoKXt0aGlzLmhhbmRsZXJzPVtdfWhlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LGhlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0saGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7YWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGxlPWhlO2Z1bmN0aW9uIGZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZGUoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBwZT1mZSxnZT1kZTtmdW5jdGlvbiB2ZShlKXtpZihwZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigocGU9PT1mZXx8IXBlKSYmc2V0VGltZW91dClyZXR1cm4gcGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBwZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gcGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHBlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0VGltZW91dCYmKHBlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsZWFyVGltZW91dCYmKGdlPWNsZWFyVGltZW91dCk7dmFyIHllLG1lPVtdLHdlPSExLGJlPS0xO2Z1bmN0aW9uIF9lKCl7d2UmJnllJiYod2U9ITEseWUubGVuZ3RoP21lPXllLmNvbmNhdChtZSk6YmU9LTEsbWUubGVuZ3RoJiZrZSgpKX1mdW5jdGlvbiBrZSgpe2lmKCF3ZSl7dmFyIGU9dmUoX2UpO3dlPSEwO2Zvcih2YXIgdD1tZS5sZW5ndGg7dDspe2Zvcih5ZT1tZSxtZT1bXTsrK2JlPHQ7KXllJiZ5ZVtiZV0ucnVuKCk7YmU9LTEsdD1tZS5sZW5ndGh9eWU9bnVsbCx3ZT0hMSxmdW5jdGlvbihlKXtpZihnZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChnZT09PWRlfHwhZ2UpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGdlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e2dlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gZ2UuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBnZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFNlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9U2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEVlKCl7fXZhciBUZT1FZSxBZT1FZSxSZT1FZSxDZT1FZSxQZT1FZSxEZT1FZSxPZT1FZTt2YXIgSWU9dC5wZXJmb3JtYW5jZXx8e30sVWU9SWUubm93fHxJZS5tb3pOb3d8fEllLm1zTm93fHxJZS5vTm93fHxJZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBNZT1uZXcgRGF0ZTt2YXIgTGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07bWUucHVzaChuZXcgU2UoZSx0KSksMSE9PW1lLmxlbmd0aHx8d2V8fHZlKGtlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpUZSxhZGRMaXN0ZW5lcjpBZSxvbmNlOlJlLG9mZjpDZSxyZW1vdmVMaXN0ZW5lcjpQZSxyZW1vdmVBbGxMaXN0ZW5lcnM6RGUsZW1pdDpPZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpVZS5jYWxsKEllKSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1NZSkvMWUzfX0sSGU9TGUsamU9ZnVuY3Rpb24oZSx0KXthZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LHhlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxxZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4geGUobyx0LHIsbixpKX0sQmU9YWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLGFlLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksYWUuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxOZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLEtlPWFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPWFlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxpPWUuaGVhZGVycyxvPWUucmVzcG9uc2VUeXBlO2FlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBpWyJDb250ZW50LVR5cGUiXTt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgYT1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtpLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShhKyI6Iit1KX12YXIgYyxoLGw9KGM9ZS5iYXNlVVJMLGg9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChoKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGgpOmgpO2Z1bmN0aW9uIGYoKXtpZihzKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHM/ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGFlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWFlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWFlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmTmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0ocy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOm8mJiJ0ZXh0IiE9PW8mJiJqc29uIiE9PW8/cy5yZXNwb25zZTpzLnJlc3BvbnNlVGV4dCxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6c307IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QocWUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLGkpLHM9bnVsbH19aWYocy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksY2UobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gcz9zLm9ubG9hZGVuZD1mOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cyYmND09PXMucmVhZHlTdGF0ZSYmKDAhPT1zLnN0YXR1c3x8cy5yZXNwb25zZVVSTCYmMD09PXMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoZil9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKHFlKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IocWUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIocWUodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHMpKSxzPW51bGx9LGFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBkPShlLndpdGhDcmVkZW50aWFsc3x8S2UobCkpJiZlLnhzcmZDb29raWVOYW1lP0JlLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2QmJihpW2UueHNyZkhlYWRlck5hbWVdPWQpfSJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmFlLmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaVt0XTpzLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxhZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChzLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxvJiYianNvbiIhPT1vJiYocy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmcy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7cyYmKHMuYWJvcnQoKSxyKGUpLHM9bnVsbCl9KSksbnx8KG49bnVsbCkscy5zZW5kKG4pfSkpfSxZZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFdlKGUsdCl7IWFlLmlzVW5kZWZpbmVkKGUpJiZhZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgSmUsemU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PUhlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSGUpKSYmKEplPUZlKSxKZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUodCwiQWNjZXB0IiksamUodCwiQ29udGVudC1UeXBlIiksYWUuaXNGb3JtRGF0YShlKXx8YWUuaXNBcnJheUJ1ZmZlcihlKXx8YWUuaXNCdWZmZXIoZSl8fGFlLmlzU3RyZWFtKGUpfHxhZS5pc0ZpbGUoZSl8fGFlLmlzQmxvYihlKT9lOmFlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOmFlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6YWUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKGFlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksYWUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZhZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgeGUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07emUuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPXt9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7emUuaGVhZGVyc1tlXT1hZS5tZXJnZShZZSl9KSk7dmFyIFZlPXplLCRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxWZTtyZXR1cm4gYWUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sR2U9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIFhlKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBaZT1mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPSRlLmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPWFlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksYWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxWZS5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gWGUoZSksdC5kYXRhPSRlLmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIEdlKHQpfHwoWGUoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT0kZS5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxRZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxpPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLG89WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0scz1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhZS5pc1BsYWluT2JqZWN0KGUpJiZhZS5pc1BsYWluT2JqZWN0KHQpP2FlLm1lcmdlKGUsdCk6YWUuaXNQbGFpbk9iamVjdCh0KT9hZS5tZXJnZSh7fSx0KTphZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEoZVtuXSx0W25dKX1hZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe2FlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1hKHZvaWQgMCx0W2VdKSl9KSksYWUuZm9yRWFjaChpLHUpLGFlLmZvckVhY2gobywoZnVuY3Rpb24obil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEodm9pZCAwLHRbbl0pfSkpLGFlLmZvckVhY2gocywoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09YShlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09YSh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KGkpLmNvbmNhdChvKS5jb25jYXQocyksaD1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIGFlLmZvckVhY2goaCx1KSxyfSxldD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9heGlvcy8tL2F4aW9zLTAuMjEuNC50Z3oiLF9pbnRlZ3JpdHk6InNoYTUxMi11dDV2ZXdraXU4ampHQmRxcE00NFh4anVDanE5TEFLZUhWbW9WZkhWenk4ZUhneHhxOFNiQVZRTm92REE4bVZpMDVrUDBFYS9uL1V6Y1NIY1RKUWZOZz09IixfZnJvbToiYXhpb3NAMC4yMS40In0sdHQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3R0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgcnQ9e30sbnQ9ZXQudmVyc2lvbi5zcGxpdCgiLiIpO2Z1bmN0aW9uIGl0KGUsdCl7Zm9yKHZhciByPXQ/dC5zcGxpdCgiLiIpOm50LG49ZS5zcGxpdCgiLiIpLGk9MDtpPDM7aSsrKXtpZihyW2ldPm5baV0pcmV0dXJuITA7aWYocltpXTxuW2ldKXJldHVybiExfXJldHVybiExfXR0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7dmFyIG49dCYmaXQodCk7ZnVuY3Rpb24gaShlLHQpe3JldHVybiJbQXhpb3MgdiIrZXQudmVyc2lvbisiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixvLHMpe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IoaShvLCIgaGFzIGJlZW4gcmVtb3ZlZCBpbiAiK3QpKTtyZXR1cm4gbiYmIXJ0W29dJiYocnRbb109ITAsY29uc29sZS53YXJuKGkobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLG8scyl9fTt2YXIgb3Q9e2lzT2xkZXJWZXJzaW9uOml0LGFzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSx1PXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09dSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK3UpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczp0dH0sc3Q9b3QudmFsaWRhdG9ycztmdW5jdGlvbiBhdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGxlLHJlc3BvbnNlOm5ldyBsZX19YXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlPyhlPWFyZ3VtZW50c1sxXXx8e30pLnVybD1hcmd1bWVudHNbMF06ZT1lfHx7fSwoZT1RZSh0aGlzLmRlZmF1bHRzLGUpKS5tZXRob2Q/ZS5tZXRob2Q9ZS5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD9lLm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOmUubWV0aG9kPSJnZXQiO3ZhciB0PWUudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PXQmJm90LmFzc2VydE9wdGlvbnModCx7c2lsZW50SlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksZm9yY2VkSlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksY2xhcmlmeVRpbWVvdXRFcnJvcjpzdC50cmFuc2l0aW9uYWwoc3QuYm9vbGVhbiwiMS4wLjAiKX0sITEpO3ZhciByPVtdLG49ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdC5ydW5XaGVuJiYhMT09PXQucnVuV2hlbihlKXx8KG49biYmdC5zeW5jaHJvbm91cyxyLnVuc2hpZnQodC5mdWxmaWxsZWQsdC5yZWplY3RlZCkpfSkpO3ZhciBpLG89W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFuKXt2YXIgcz1bWmUsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkocyxyKSxzPXMuY29uY2F0KG8pLGk9UHJvbWlzZS5yZXNvbHZlKGUpO3MubGVuZ3RoOylpPWkudGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gaX1mb3IodmFyIGE9ZTtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxjPXIuc2hpZnQoKTt0cnl7YT11KGEpfWNhdGNoKGUpe2MoZSk7YnJlYWt9fXRyeXtpPVplKGEpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO28ubGVuZ3RoOylpPWkudGhlbihvLnNoaWZ0KCksby5zaGlmdCgpKTtyZXR1cm4gaX0sYXQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1RZSh0aGlzLmRlZmF1bHRzLGUpLGNlKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LGFlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFFlKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KSksYWUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoUWUobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6cn0pKX19KSk7dmFyIHV0PWF0O2Z1bmN0aW9uIGN0KGUpe3RoaXMubWVzc2FnZT1lfWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDYW5jZWwiKyh0aGlzLm1lc3NhZ2U/IjogIit0aGlzLm1lc3NhZ2U6IiIpfSxjdC5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgaHQ9Y3Q7ZnVuY3Rpb24gbHQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7ZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgaHQoZSksdChyLnJlYXNvbikpfSkpfWx0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGx0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IGx0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgZnQ9bHQ7ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9bmV3IHV0KGUpLHI9USh1dC5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gYWUuZXh0ZW5kKHIsdXQucHJvdG90eXBlLHQpLGFlLmV4dGVuZChyLHQpLHJ9dmFyIHB0PWR0KFZlKTtwdC5BeGlvcz11dCxwdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGR0KFFlKHB0LmRlZmF1bHRzLGUpKX0scHQuQ2FuY2VsPWh0LHB0LkNhbmNlbFRva2VuPWZ0LHB0LmlzQ2FuY2VsPUdlLHB0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LHB0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LHB0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJiEwPT09ZS5pc0F4aW9zRXJyb3J9O3ZhciBndD1wdCx2dD1wdDtndC5kZWZhdWx0PXZ0O3ZhciB5dCxtdCx3dD1ndDsKLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiBidChlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0obXQ9eXR8fCh5dD17fSkpLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLG10LnF1ZXJ5PSJxdWVyeSI7dmFyIF90OyFmdW5jdGlvbihlKXtlLkNvbmZpZ0RhdGE9ImNvbmZpZ19kYXRhIixlLk9JRENQcm92aWRlck1ldGFEYXRhPSJvaWRjX3Byb3ZpZGVyX21ldGFfZGF0YSIsZS5TZXNzaW9uRGF0YT0ic2Vzc2lvbl9kYXRhIixlLlRlbXBvcmFyeURhdGE9InRlbXBvcmFyeV9kYXRhIn0oX3R8fChfdD17fSkpO2NvbnN0IGt0PSJyZWZyZXNoX3Rva2VuX3RpbWVyIjtjbGFzcyBTdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxyLG4saSxvKXtzdXBlcihudWxsIT1uP246bnVsbD09bz92b2lkIDA6by5tZXNzYWdlKSx0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuY29kZT1lLHRoaXMuZmlsZT10LHRoaXMubWV0aG9kPXIsdGhpcy5kZXNjcmlwdGlvbj1pLHRoaXMuZXJyb3I9byxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIEV0IGV4dGVuZHMgU3R7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8scyxhLHUpe3N1cGVyKGUsdCxyLG4saSksdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLmNvZGU9ZSx0aGlzLmZpbGU9dCx0aGlzLm1ldGhvZD1yLHRoaXMuZGVzY3JpcHRpb249aSx0aGlzLm5ldHdvcmtFcnJvckNvZGU9byx0aGlzLm5ldHdvcmtFcnJvck1lc3NhZ2U9cyx0aGlzLnN0YXR1cz1hLHRoaXMubmV0d29ya0Vycm9yRGF0YT11fX12YXIgVHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBBdChlLHQscil7cmV0dXJuIGUocj17cGF0aDp0LGV4cG9ydHM6e30scmVxdWlyZTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0obnVsbD09dCYmci5wYXRoKX19LHIuZXhwb3J0cyksci5leHBvcnRzfXZhciBSdD12b2lkIDAhPT10P3Q6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LEN0PVtdLFB0PVtdLER0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LE90PSExO2Z1bmN0aW9uIEl0KCl7T3Q9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KUN0W3RdPWVbdF0sUHRbZS5jaGFyQ29kZUF0KHQpXT10O1B0WyItIi5jaGFyQ29kZUF0KDApXT02MixQdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gVXQoZSx0LHIpe2Zvcih2YXIgbixpLG89W10scz10O3M8cjtzKz0zKW49KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKEN0WyhpPW4pPj4xOCY2M10rQ3RbaT4+MTImNjNdK0N0W2k+PjYmNjNdK0N0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBNdChlKXt2YXIgdDtPdHx8SXQoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLHU9ci1uO2E8dTthKz1zKW8ucHVzaChVdChlLGEsYStzPnU/dTphK3MpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLGkrPUN0W3Q+PjJdLGkrPUN0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saSs9Q3RbdD4+MTBdLGkrPUN0W3Q+PjQmNjNdLGkrPUN0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gTHQoZSx0LHIsbixpKXt2YXIgbyxzLGE9OCppLW4tMSx1PSgxPDxhKS0xLGM9dT4+MSxoPS03LGw9cj9pLTE6MCxmPXI/LTE6MSxkPWVbdCtsXTtmb3IobCs9ZixvPWQmKDE8PC1oKS0xLGQ+Pj0taCxoKz1hO2g+MDtvPTI1NipvK2VbdCtsXSxsKz1mLGgtPTgpO2ZvcihzPW8mKDE8PC1oKS0xLG8+Pj0taCxoKz1uO2g+MDtzPTI1NipzK2VbdCtsXSxsKz1mLGgtPTgpO2lmKDA9PT1vKW89MS1jO2Vsc2V7aWYobz09PXUpcmV0dXJuIHM/TmFOOjEvMCooZD8tMToxKTtzKz1NYXRoLnBvdygyLG4pLG8tPWN9cmV0dXJuKGQ/LTE6MSkqcypNYXRoLnBvdygyLG8tbil9ZnVuY3Rpb24gSHQoZSx0LHIsbixpLG8pe3ZhciBzLGEsdSxjPTgqby1pLTEsaD0oMTw8YyktMSxsPWg+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGQ9bj8wOm8tMSxwPW4/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1oKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLXMpKTwxJiYocy0tLHUqPTIpLCh0Kz1zK2w+PTE/Zi91OmYqTWF0aC5wb3coMiwxLWwpKSp1Pj0yJiYocysrLHUvPTIpLHMrbD49aD8oYT0wLHM9aCk6cytsPj0xPyhhPSh0KnUtMSkqTWF0aC5wb3coMixpKSxzKz1sKTooYT10Kk1hdGgucG93KDIsbC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtyK2RdPTI1NSZhLGQrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSxjKz1pO2M+MDtlW3IrZF09MjU1JnMsZCs9cCxzLz0yNTYsYy09OCk7ZVtyK2QtcF18PTEyOCpnfXZhciBqdD17fS50b1N0cmluZyx4dD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qdC5jYWxsKGUpfTtLdC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PVJ0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fFJ0LlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIHF0PUJ0KCk7ZnVuY3Rpb24gQnQoKXtyZXR1cm4gS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gTnQoZSx0KXtpZihCdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1LdC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgS3QodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gS3QoZSx0LHIpe2lmKCEoS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIEt0KSlyZXR1cm4gbmV3IEt0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIFd0KHRoaXMsZSl9cmV0dXJuIEZ0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIEZ0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPUt0LnByb3RvdHlwZTplPUp0KGUsdCksZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKSwhS3QuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfCR0KHQsciksaT0oZT1OdChlLG4pKS53cml0ZSh0LHIpO3JldHVybiBpIT09biYmKGU9ZS5zbGljZSgwLGkpKSxlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihWdCh0KSl7dmFyIHI9MHx6dCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1OdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/TnQoZSwwKTpKdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZ4dCh0LmRhdGEpKXJldHVybiBKdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFl0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gV3QoZSx0KXtpZihZdCh0KSxlPU50KGUsdDwwPzA6MHx6dCh0KSksIUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gSnQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHx6dCh0Lmxlbmd0aCk7ZT1OdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24genQoZSl7aWYoZT49QnQoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrQnQoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uICR0KGUsdCl7aWYoVnQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIF9yKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4ga3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gX3IoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gR3QoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gaHIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGFyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gdXIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIHNyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIFh0KGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gWnQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PUt0LmZyb20odCxuKSksVnQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpRdChlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTpRdChlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gUXQoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZXIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHRyKGUsdCxyLG4pe3JldHVybiBTcihfcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBycihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBucihlLHQscixuKXtyZXR1cm4gcnIoZSx0LHIsbil9ZnVuY3Rpb24gaXIoZSx0LHIsbil7cmV0dXJuIFNyKGtyKHQpLGUscixuKX1mdW5jdGlvbiBvcihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBzcihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/TXQoZSk6TXQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBhcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSx1LGM9ZVtpXSxoPW51bGwsbD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkrbDw9cilzd2l0Y2gobCl7Y2FzZSAxOmM8MTI4JiYoaD1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoaD11KTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGg9dSk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJnU8MTExNDExMiYmKGg9dSl9bnVsbD09PWg/KGg9NjU1MzMsbD0xKTpoPjY1NTM1JiYoaC09NjU1MzYsbi5wdXNoKGg+Pj4xMCYxMDIzfDU1Mjk2KSxoPTU2MzIwfDEwMjMmaCksbi5wdXNoKGgpLGkrPWx9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2Zvcih2YXIgcj0iIixuPTA7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1mdW5jdGlvbiB1cihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGNyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBocihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPWJyKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGxyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGk9IiIsbz0wO288bi5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10rMjU2Km5bbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZnIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGRyKGUsdCxyLG4saSxvKXtpZighVnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHByKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBncihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7aTxvOysraSllW3IraV09dD4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiB2cihlLHQscixuLGksbyl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHlyKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDQpLEh0KGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIG1yKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDgpLEh0KGUsdCxyLG4sNTIsOCkscis4fUt0LnBvb2xTaXplPTgxOTIsS3QuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPUt0LnByb3RvdHlwZSxlfSxLdC5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRnQobnVsbCxlLHQscil9LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihLdC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLEt0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxLdC5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBZdCh0KSx0PD0wP050KGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/TnQoZSx0KS5maWxsKHIsbik6TnQoZSx0KS5maWxsKHIpOk50KGUsdCl9KG51bGwsZSx0LHIpfSxLdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gV3QobnVsbCxlKX0sS3QuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBXdChudWxsLGUpfSxLdC5pc0J1ZmZlcj1FcixLdC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIVZ0KGUpfHwhVnQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LEt0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEt0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCF4dChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBLdC5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPUt0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFWdChvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4saSksaSs9by5sZW5ndGh9cmV0dXJuIG59LEt0LmJ5dGVMZW5ndGg9JHQsS3QucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxLdC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKVh0KHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxLdC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KVh0KHRoaXMsdCx0KzMpLFh0KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpWHQodGhpcyx0LHQrNyksWHQodGhpcyx0KzEsdCs2KSxYdCh0aGlzLHQrMix0KzUpLFh0KHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2FyKHRoaXMsMCxlKTpHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEt0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1LdC5jb21wYXJlKHRoaXMsZSl9LEt0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LEt0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49aSYmdD49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLHU9dGhpcy5zbGljZShuLGkpLGM9ZS5zbGljZSh0LHIpLGg9MDtoPGE7KytoKWlmKHVbaF0hPT1jW2hdKXtvPXVbaF0scz1jW2hdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sS3QucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LEt0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gWnQodGhpcyxlLHQsciwhMCl9LEt0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFp0KHRoaXMsZSx0LHIsITEpfSxLdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgdCluPXQscj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksZS5sZW5ndGg+MCYmKHI8MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIGVyKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHRyKHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBycih0aGlzLGUsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBucih0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGlyKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gb3IodGhpcyxlLHQscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxvPSEwfX0sS3QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX0sS3QucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189S3QucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IEt0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSxLdC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sS3QucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxLdC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LEt0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxLdC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sS3QucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sS3QucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LEt0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxLdC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LEt0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sS3QucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksTHQodGhpcyxlLCEwLDIzLDQpfSxLdC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsMjMsNCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITAsNTIsOCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsNTIsOCl9LEt0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtlPStlLHR8PTAscnw9MCxufHxkcih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sS3QucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fGRyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDEsMjU1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpwcih0aGlzLGUsdCwhMCksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxLdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz1yLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMSwxMjcsLTEyOCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sS3QucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOnByKHRoaXMsZSx0LCEwKSx0KzJ9LEt0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4geXIodGhpcyxlLHQsITAscil9LEt0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB5cih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMCxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK28pLHQpO3JldHVybiBvfSxLdC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhS3QuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9VnQoZSk/ZTpfcihuZXcgS3QoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB3cj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBicihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gX3IoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIGtyKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvLHM7T3R8fEl0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IER0KDMqYS80LW8pLG49bz4wP2EtNDphO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylpPVB0W2UuY2hhckNvZGVBdCh0KV08PDE4fFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8UHRbZS5jaGFyQ29kZUF0KHQrMildPDw2fFB0W2UuY2hhckNvZGVBdCh0KzMpXSxzW3UrK109aT4+MTYmMjU1LHNbdSsrXT1pPj44JjI1NSxzW3UrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPVB0W2UuY2hhckNvZGVBdCh0KV08PDJ8UHRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbdSsrXT0yNTUmaSk6MT09PW8mJihpPVB0W2UuY2hhckNvZGVBdCh0KV08PDEwfFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxQdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1t1KytdPWk+PjgmMjU1LHNbdSsrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZSh3ciwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gU3IoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxUcihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZUcihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gVHIoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgQXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOkt0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLEt0LmFsbG9jKCtlKX0saXNCdWZmZXI6RXIsa01heExlbmd0aDpxdH0pLFJyPUF0KChmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10JTQ7aWYoIXIpcmV0dXJuIGU7dmFyIG49dCxpPTQtcixvPXQraSxzPUt0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIsbisrKTtyZXR1cm4gcy50b1N0cmluZygpfX0pKSxDcj1BdCgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuaXNCdWZmZXIoZSk/aShlLnRvU3RyaW5nKCJiYXNlNjQiKSk6aShLdC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxSci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89cjtvLmVuY29kZT1yLG8uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuZnJvbShuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sby50b0Jhc2U2ND1uLG8uZnJvbUJhc2U2ND1pLG8udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIEt0LmZyb20obihlKSwiYmFzZTY0Iil9LHQuZGVmYXVsdD1vfSkpLFByPUF0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9Q3IuZGVmYXVsdCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9KSksRHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0oQXQoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsdSxjLGgsbCxmLGQscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sdT1yWzJdLGM9clszXSxoPXJbNF0sbD1yWzVdLGY9cls2XSxkPXJbN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1Jm5bdl0pPDwyNHwoMjU1Jm5bdisxXSk8PDE2fCgyNTUmblt2KzJdKTw8OHwyNTUmblt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKyhoJmxefmgmZil8MCkrKGQrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZ1XmEmdSl8MCxkPWYsZj1sLGw9aCxoPWMreXwwLGM9dSx1PWEsYT1zLHM9eSttfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPXUsclszXSs9YyxyWzRdKz1oLHJbNV0rPWwscls2XSs9ZixyWzddKz1kLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksYz1zKHQsZSksaD1uZXcgaShjKSxsPW5ldyBVaW50OEFycmF5KGguZGlnZXN0TGVuZ3RoKSxmPWwubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkobikscD0wO3A8bjtwKyspZj09PWwubGVuZ3RoJiYoYShsLGgscixvKSxmPTApLGRbcF09bFtmKytdO3JldHVybiBoLmNsZWFuKCksbC5maWxsKDApLG8uZmlsbCgwKSxkfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkocyksYz1uZXcgVWludDhBcnJheShzKSxoPW5ldyBVaW50OEFycmF5KG4pLGw9MDtsKnM8bjtsKyspe3ZhciBmPWwrMTthWzBdPWY+Pj4yNCYyNTUsYVsxXT1mPj4+MTYmMjU1LGFbMl09Zj4+PjgmMjU1LGFbM109Zj4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaChjKTtmb3IodmFyIGQ9MDtkPHM7ZCsrKXVbZF09Y1tkXTtmb3IoZD0yO2Q8PXI7ZCsrKXtvLnJlc2V0KCksby51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgcD0wO3A8cztwKyspdVtwXV49Y1twXX1mb3IoZD0wO2Q8cyYmbCpzK2Q8bjtkKyspaFtsKnMrZF09dVtkXX1mb3IobD0wO2w8cztsKyspdVtsXT1jW2xdPTA7Zm9yKGw9MDtsPDQ7bCsrKWFbbF09MDtyZXR1cm4gby5jbGVhbigpLGh9fShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfSkpKTtmdW5jdGlvbiBPcigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIElyKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVXI9T3IsTXI9SXI7ZnVuY3Rpb24gTHIoZSl7aWYoVXI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFVyPT09T3J8fCFVcikmJnNldFRpbWVvdXQpcmV0dXJuIFVyPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVXIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFVyLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBVci5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBSdC5zZXRUaW1lb3V0JiYoVXI9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIFJ0LmNsZWFyVGltZW91dCYmKE1yPWNsZWFyVGltZW91dCk7dmFyIEhyLGpyPVtdLHhyPSExLHFyPS0xO2Z1bmN0aW9uIEJyKCl7eHImJkhyJiYoeHI9ITEsSHIubGVuZ3RoP2pyPUhyLmNvbmNhdChqcik6cXI9LTEsanIubGVuZ3RoJiZOcigpKX1mdW5jdGlvbiBOcigpe2lmKCF4cil7dmFyIGU9THIoQnIpO3hyPSEwO2Zvcih2YXIgdD1qci5sZW5ndGg7dDspe2ZvcihIcj1qcixqcj1bXTsrK3FyPHQ7KUhyJiZIcltxcl0ucnVuKCk7cXI9LTEsdD1qci5sZW5ndGh9SHI9bnVsbCx4cj0hMSxmdW5jdGlvbihlKXtpZihNcj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChNcj09PUlyfHwhTXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIE1yPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e01yKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gTXIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBNci5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIEtyKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9S3IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBGcj1SdC5wZXJmb3JtYW5jZXx8e30sWXI9KEZyLm5vd3x8RnIubW96Tm93fHxGci5tc05vd3x8RnIub05vd3x8RnIud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07anIucHVzaChuZXcgS3IoZSx0KSksMSE9PWpyLmxlbmd0aHx8eHJ8fExyKE5yKX0pLFdyPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KEFyKSxKcj1BdCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1Xci5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9V3I6KG4oV3IsdCksdC5CdWZmZXI9aSksbihyLGkpLGkuZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxpLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBXci5TbG93QnVmZmVyKGUpfX0pKSx6cj1BdCgoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj1Kci5CdWZmZXIsbj1UdC5jcnlwdG98fFR0Lm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLGkpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBvPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIHM9MDtzPGU7cys9dCluLmdldFJhbmRvbVZhbHVlcyhvLnNsaWNlKHMscyt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhvKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9ZcigoZnVuY3Rpb24oKXtpKG51bGwsbyl9KSk6b306ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKTtjb25zdCBWcj1uZXcgVGV4dEVuY29kZXIsJHI9bmV3IFRleHREZWNvZGVyO3ZhciBHcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdzt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCIpfSgpO2NvbnN0IFhyPWU9PntsZXQgdD1lO3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9JHIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIiksbmV3IFVpbnQ4QXJyYXkoR3IuYXRvYih0KS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSl9O2NsYXNzIFpyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpfX1jbGFzcyBRciBleHRlbmRzIFpye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn19Y2xhc3MgZW4gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyB0biBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyBybiBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIG5uIGV4dGVuZHMgWnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn19Y2xhc3Mgc24gZXh0ZW5kcyBRcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQifX12YXIgYW49R3IuY3J5cHRvO2Z1bmN0aW9uIHVuKCl7aWYoIUdyLmlzU2VjdXJlQ29udGV4dCYmIUdyLmNyeXB0by5zdWJ0bGUpdGhyb3cgbmV3IFpyKCJXZWIgQ3J5cHRvZ3JhcGh5IEFQSSBpcyBhdmFpbGFibGUgb25seSBpbiBTZWN1cmUgQ29udGV4dHMuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJlX0NvbnRleHRzIil9Y29uc3QgY249YXN5bmMgZT0+e3ZhciB0LHI7Y29uc3R7YWxnb3JpdGhtOm4sa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LHI7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHRuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc3Vic3RyKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnN1YnN0cigtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTplLmNydn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKTtsZXQgbz0iandrIixzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCJQQktERjIiPT09bi5uYW1lJiYobz0icmF3IixzPVhyKGUuaykpLHVuKCksYW4uc3VidGxlLmltcG9ydEtleShvLHMsbixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0ocj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1yP3I6aSl9O2Z1bmN0aW9uIGhuKGUpe3JldHVybiEhZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1hc3luYyBmdW5jdGlvbiBsbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/Y24oey4uLmUsYWxnOnQsZXh0OiExfSk6WHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHRuKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIHVuc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBjbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX1jb25zdCBmbj1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDAhPT1uLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2Zvcihjb25zdCBpIG9mIHIuY3JpdCl7aWYoIXQuaGFzKGkpKXRocm93IG5ldyB0bihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7aX0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbmApO2lmKHZvaWQgMD09PW5baV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBpcyBtaXNzaW5nYCk7aWYodC5nZXQoaSkmJnZvaWQgMD09PXJbaV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfS5iaW5kKHZvaWQgMCxybixuZXcgTWFwKFtbImI2NCIsITBdXSkpLGRuPSgoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkuYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTthc3luYyBmdW5jdGlvbiBwbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBybigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgcm4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBybigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgcm4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhaG4oZS5oZWFkZXIpKXRocm93IG5ldyBybigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBuPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVhyKGUucHJvdGVjdGVkKTtuPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkobixlLmhlYWRlcikpdGhyb3cgbmV3IHJuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3QgaT17Li4ubiwuLi5lLmhlYWRlcn07bGV0IG89ITA7aWYoZm4obixpKS5oYXMoImI2NCIpJiYobz1uLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBvKSl0aHJvdyBuZXcgcm4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOnN9PWk7aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhcyl0aHJvdyBuZXcgcm4oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IGE9ciYmZG4oci5hbGdvcml0aG1zKTtpZihhJiYhYS5oYXMocykpdGhyb3cgbmV3IGVuKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYobyl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgcm4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KG4sZSkpLCgoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fGUubWF0Y2goL15BXGR7M30oPzpHQ00pS1ckLykpe2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwic2VjcmV0Ij09PXQudHlwZSlyZXR1cm47dGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpfWlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBvciBLZXlPYmplY3QgaW5zdGFuY2VzIG11c3QgYmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIik7aWYoInNlY3JldCI9PT10LnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9KShzLHQpO2NvbnN0IHU9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KFZyLmVuY29kZShlLnByb3RlY3RlZHx8IiIpLFZyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1ZyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksYz1YcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0KGFzeW5jKGUsdCxyLG4pPT57bGV0IGk7aWYodW4oKSx0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzeW1tZXRyaWMga2V5cyBhcmUgb25seSBhcHBsaWNhYmxlIGZvciBITUFDLWJhc2VkIGFsZ29yaXRobXMiKTtpPWF3YWl0IGFuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zdWJzdHIoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFsidmVyaWZ5Il0pfWVsc2UgaT10O3JldHVybigoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7Y29uc3Qgcj1wYXJzZUludChlLnN1YnN0cigtMyksMTApLHtsZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPHIpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBzeW1tZXRyaWMga2V5cyB0byBiZSAke3J9IGJpdHMgb3IgbGFyZ2VyYCl9aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKSxhbi5zdWJ0bGUudmVyaWZ5KGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkhTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiSE1BQyJ9O2Nhc2UiSFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJITUFDIn07Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDozMn07Y2FzZSJQUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6NDh9O2Nhc2UiUFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjY0fTtjYXNlIlJTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In07Y2FzZSJFUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9O2Nhc2UiRVM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifTtkZWZhdWx0OnRocm93IG5ldyB0bihgYWxnICR7ZX0gaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUpLGkscixuKX0pKHMsdCxjLHUpKXRocm93IG5ldyBvbjtsZXQgaDtoPW8/WHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Wci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgbD17cGF5bG9hZDpofTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihsLnByb3RlY3RlZEhlYWRlcj1uKSx2b2lkIDAhPT1lLmhlYWRlciYmKGwudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGx9Y29uc3QgZ249L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIHZuPWU9Pntjb25zdCB0PWduLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKDg2NDAwKnIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IHluPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBtbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fHluKGUudHlwKSE9PXluKG4pKSl0aHJvdyBuZXcgUXIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPXR5cGVvZiBpfHwhaXx8QXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgbm4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKCJzdHJpbmciPT10eXBlb2Ygbz9bb106bykuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBRcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mKHU9aS5hdWQpP2MuaW5jbHVkZXModSk6Yy5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldCh1KSkpKSkpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIHUsYztsZXQgaDtzd2l0Y2godHlwZW9mIHIuY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpoPXZuKHIuY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpoPXIuY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmg9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpsfT1yLGY9KGQ9bHx8bmV3IERhdGUsTWF0aC5mbG9vcihkLmdldFRpbWUoKS8xZTMpKTt2YXIgZDtpZih2b2lkIDAhPT1pLmlhdHx8ci5tYXhUb2tlbkFnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwPT09aS5leHAmJmkuaWF0PmYraCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgUXIoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+ZitoKXRocm93IG5ldyBRcignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBRcignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9Zi1oKXRocm93IG5ldyBzbignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKHIubWF4VG9rZW5BZ2Upe2NvbnN0IGU9Zi1pLmlhdDtpZihlLWg+KCJudW1iZXIiPT10eXBlb2Ygci5tYXhUb2tlbkFnZT9yLm1heFRva2VuQWdlOnZuKHIubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgc24oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWgpdGhyb3cgbmV3IFFyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2NsYXNzIHdue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBiYXNlNjRVUkxFbmNvZGUoZSl7cmV0dXJuIFByLmVuY29kZShlKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0vZywiIil9c3RhdGljIGdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZSh6cigzMikpfXN0YXRpYyBnZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShuZXcgZyhEcigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKSl9c3RhdGljIGdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKXtyZXR1cm5bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il19c3RhdGljIGdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UoUHIuZGVjb2RlKGUsInV0ZjgiKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihyLmtpZD09PWUua2lkKXJldHVybiBsbih7YWxnOmUuYWxnLGU6ZS5lLGt0eTplLmt0eSxuOmUubn0pO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkNSWVBUT19VVElMLUdURlRJVC1JVjAxIiwiY3J5cHRvLXV0aWxzIiwiZ2V0SldLRm9yVGhlSWRUb2tlbiIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK3Iua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKSl9c3RhdGljIGlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxvKXtyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT0kci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgcm4oIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6biwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IHJuKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBwbih7cGF5bG9hZDppfHx2b2lkIDAscHJvdGVjdGVkOm58fHZvaWQgMCxzaWduYXR1cmU6b3x8dm9pZCAwfSx0LHIpO3JldHVybntwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9fShlLHQscik7cmV0dXJue3BheWxvYWQ6bW4obi5wcm90ZWN0ZWRIZWFkZXIsbi5wYXlsb2FkLHIpLHByb3RlY3RlZEhlYWRlcjpuLnByb3RlY3RlZEhlYWRlcn19KGUsdCx7YWxnb3JpdGhtczp0aGlzLmdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKSxhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOm8saXNzdWVyOm4sc3ViamVjdDppfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJDUllQVE9fVVRJTC1JVklULUlWMDIiLCJjcnlwdG8tdXRpbHMiLCJpc1ZhbGlkSWRUb2tlbiIsIlZhbGlkYXRpbmcgSUQgdG9rZW4gZmFpbGVkIixlKSkpKX1zdGF0aWMgZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD1Qci5kZWNvZGUoZS5zcGxpdCgiLiIpWzFdLCJ1dGY4Iik7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFN0KCJDUllQVE9fVVRJTC1ESVQtSVYwMSIsImNyeXB0by11dGlscyIsImRlY29kZUlEVG9rZW4iLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGJue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQscixuO2NvbnN0IGk9d24uZGVjb2RlSURUb2tlbihlKSxvPXRoaXMuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKGkpLHM9dGhpcy5leHRyYWN0VXNlck5hbWUoaSksYT1udWxsIT09KHQ9aS5naXZlbl9uYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPWkuZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsYz1hJiZ1P2Ake2F9ICR7dX1gOmF8fHV8fCIiLGg9bnVsbCE9PShuPWkucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09bj9uOmM7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOm8sdXNlcm5hbWU6c30sdGhpcy5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoaSkpfXN0YXRpYyBmaWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO251bGw9PXR8fGRlbGV0ZSB0LmlzcyxudWxsPT10fHxkZWxldGUgdC5zdWIsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IHI9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCBuPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtyW25dPXR9KSkscn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX19Ym4uZXh0cmFjdFVzZXJOYW1lPShlLHQ9IkAiKT0+e2NvbnN0IHI9ZS5zdWIuc3BsaXQodCk7cmV0dXJuIHIubGVuZ3RoPjImJnIucG9wKCksci5qb2luKHQpfSxibi5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9KGUsdD0iQCIpPT57Y29uc3Qgcj1lLnN1Yi5zcGxpdCh0KTtyZXR1cm4gci5sZW5ndGg+Mj9yW3IubGVuZ3RoLTFdOiIifTtjbGFzcyBfbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfXJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIGUud2VsbEtub3duRW5kcG9pbnQ/ZS5zZXJ2ZXJPcmlnaW4rZS53ZWxsS25vd25FbmRwb2ludDplLnNlcnZlck9yaWdpbisiL29hdXRoMi90b2tlbi8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiJ9KSl9cmVzb2x2ZUVuZHBvaW50cyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIHIub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWcmJnIuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhyLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W25dPShudWxsPT1yP3ZvaWQgMDpyLmVuZHBvaW50cyk/ci5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IHI9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvYXV0aG9yaXplIixlbmRfc2Vzc2lvbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29pZGMvbG9nb3V0Iixqd2tzX3VyaTp0LnNlcnZlck9yaWdpbisiL29hdXRoMi9qd2tzIixjaGVja19zZXNzaW9uX2lmcmFtZTp0LnNlcnZlck9yaWdpbisiL29pZGMvY2hlY2tzZXNzaW9uIixyZXZvY2F0aW9uX2VuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Jldm9rZSIsdG9rZW5fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvdG9rZW4ifTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHIpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gdCYmMCE9PXQudHJpbSgpLmxlbmd0aD93dC5nZXQodCx7d2l0aENyZWRlbnRpYWxzOm51bGw9PXI/dm9pZCAwOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT10LnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1WSVQtTlIwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgcmV0dXJuZWQgIit0LnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLG49KHlpZWxkIHRoaXMucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCkpLnNwbGl0KCIvLndlbGwta25vd24iKVswXTtyZXR1cm4gciYmcj09PW4/d24uZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sdC5kYXRhLmtleXMpLnRoZW4oKHQ9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHduLmlzVmFsaWRJZFRva2VuKGUsdCwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELHIsd24uZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSkudGhlbigoZT0+ZSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLVZJVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIix2b2lkIDAsdm9pZCAwLGUpKSkpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULUVTMDQiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSk6UHJvbWlzZS5yZXNvbHZlKCExKX0pKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfSEVMUEVSLVZJVC1OUjA1IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULU5GMDEiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpfSkpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlKXt2YXIgdDtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcj0ib3BlbmlkIjtjb25zdCBuPXlpZWxkIHRoaXMuX2NvbmZpZygpLGk9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7cmV0dXJuIG4uc2NvcGUmJm4uc2NvcGUubGVuZ3RoPjAmJihuLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8bi5zY29wZS5wdXNoKCJvcGVuaWQiKSxyPW4uc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsaS5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsYm4uZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGkuaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHIpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsbi5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PSh0PW4uY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09dD90OiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKCl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1IVFItTlIwMSIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgdG9rZW4gcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7aWYoKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKGUuZGF0YS5pZF90b2tlbikudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKTtjb25zdCB0PXthY2Nlc3NUb2tlbjplLmRhdGEuYWNjZXNzX3Rva2VuLGV4cGlyZXNJbjplLmRhdGEuZXhwaXJlc19pbixpZFRva2VuOmUuZGF0YS5pZF90b2tlbixyZWZyZXNoVG9rZW46ZS5kYXRhLnJlZnJlc2hfdG9rZW4sc2NvcGU6ZS5kYXRhLnNjb3BlLHRva2VuVHlwZTplLmRhdGEudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1IVFItSVYwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJUaGUgaWQgdG9rZW4gcmV0dXJuZWQgaXMgbm90IHZhbGlkLiIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBoYXMgZmFpbGVkIHRoZSB2YWxpZGF0aW9uIGNoZWNrLiIpKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLUhBVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsdm9pZCAwLHZvaWQgMCxlKSkpKTt7Y29uc3QgdD17YWNjZXNzVG9rZW46ZS5kYXRhLmFjY2Vzc190b2tlbixleHBpcmVzSW46ZS5kYXRhLmV4cGlyZXNfaW4saWRUb2tlbjplLmRhdGEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmUuZGF0YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmUuZGF0YS5zY29wZSx0b2tlblR5cGU6ZS5kYXRhLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKSxQcm9taXNlLnJlc29sdmUodCl9fSkpfX1jbGFzcyBrbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgX24oZSksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgU3QoIkFVVEhfQ09SRS1HQVUtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRBdXRob3JpemF0aW9uVVJMIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPW5ldyBVUkwodCk7bi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZXNwb25zZV90eXBlIiwiY29kZSIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIixyLmNsaWVudElEKTtsZXQgaT0ib3BlbmlkIjtpZihyLnNjb3BlJiZyLnNjb3BlLmxlbmd0aD4wJiYoci5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHIuc2NvcGUucHVzaCgib3BlbmlkIiksaT1yLnNjb3BlLmpvaW4oIiAiKSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsaSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLHIuc2lnbkluUmVkaXJlY3RVUkwpLHIucmVzcG9uc2VNb2RlJiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLHIucmVzcG9uc2VNb2RlKSxyLmVuYWJsZVBLQ0Upe2NvbnN0IGU9d24uZ2V0Q29kZVZlcmlmaWVyKCksdD13bi5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiLGUpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLHQpfXIucHJvbXB0JiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInByb21wdCIsci5wcm9tcHQpO2NvbnN0IG89ZTtpZihvKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMobykpIiIhPWUmJiIiIT10JiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoZSx0LnRvU3RyaW5nKCkpO3JldHVybiBuLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighcnx8MD09PXIudHJpbSgpLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7dCYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCkpO2NvbnN0IGk9W107aS5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLG4uY2xpZW50U2VjcmV0JiZuLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaChgY2xpZW50X3NlY3JldD0ke24uY2xpZW50U2VjcmV0fWApO2NvbnN0IG89ZTtyZXR1cm4gaS5wdXNoKGBjb2RlPSR7b31gKSxpLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIiksaS5wdXNoKGByZWRpcmVjdF91cmk9JHtuLnNpZ25JblJlZGlyZWN0VVJMfWApLG4uZW5hYmxlUEtDRSYmKGkucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIikpLHd0LnBvc3QocixpLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDEtRVMwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXF1ZXN0QWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMS1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsIlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsdD15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKCFyLnJlZnJlc2hfdG9rZW4pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBUaGUgaWRlbnRpdHkgc2VydmVyIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3Qgbj1bXTtyZXR1cm4gbi5wdXNoKGBjbGllbnRfaWQ9JHt0LmNsaWVudElEfWApLG4ucHVzaChgcmVmcmVzaF90b2tlbj0ke3IucmVmcmVzaF90b2tlbn1gKSxuLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHQuY2xpZW50U2VjcmV0JiZ0LmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJm4ucHVzaChgY2xpZW50X3NlY3JldD0ke3QuY2xpZW50U2VjcmV0fWApLHd0LnBvc3QoZSxuLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMi1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTtjb25zdCByPVtdO3JldHVybiByLnB1c2goYGNsaWVudF9pZD0ke3QuY2xpZW50SUR9YCksci5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWApLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpLHd0LnBvc3QoZSxyLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+MjAwIT09ZS5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMy1OUjAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOih0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLFByb21pc2UucmVzb2x2ZShlKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMy1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBuO2lmKG49ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnQudG9rZW5fZW5kcG9pbnQsIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3QgaT17ZGF0YTooeWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSx0XSk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3ModCk7cmV0dXJuYCR7ZX09JHtyfWB9KSkpKSkpLmpvaW4oIiYiKSxoZWFkZXJzOk9iamVjdC5hc3NpZ24oe30sYm4uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QiLHVybDpuLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c307cmV0dXJuIGUuYXR0YWNoVG9rZW4mJihpLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWB9KSksd3QoaSkudGhlbigodD0+MjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUodCkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkNHLU5SMDQiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSx0PWJuLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT1lP3ZvaWQgMDplLmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3BlczplLnNjb3BlLHNlc3Npb25TdGF0ZTplLnNlc3Npb25fc3RhdGUsdXNlcm5hbWU6dC51c2VybmFtZX07cmV0dXJuIHQuZGlzcGxheU5hbWUmJiIiIT09dC5kaXNwbGF5TmFtZXx8ZGVsZXRlIHQuZGlzcGxheU5hbWUsdC50ZW5hbnREb21haW4mJiIiIT09dC50ZW5hbnREb21haW58fGRlbGV0ZSB0LnRlbmFudERvbWFpbixyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSx0KSxyfSkpfWdldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpLmlkX3Rva2VuO3JldHVybiB3bi5kZWNvZGVJRFRva2VuKGUpfSkpfWdldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpLmlkX3Rva2VufSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKCFlJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCk7Y29uc3QgdD15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKTtyZXR1cm4gd3QuZ2V0KHQpLnRoZW4oKGU9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIDIwMCE9PWUuc3RhdHVzP1Byb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLUdPUE0tTlIwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRPSURDUHJvdmlkZXJNZXRhRGF0YSIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgdG8gZ2V0IHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCAiK2Uuc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKTooeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHMoZS5kYXRhKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoITApKX0pKSkpLmNhdGNoKCgoKT0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSghMCl9KSkpKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50OmUuYXV0aG9yaXphdGlvbl9lbmRwb2ludCxjaGVja1Nlc3Npb25JZnJhbWU6ZS5jaGVja19zZXNzaW9uX2lmcmFtZSxlbmRTZXNzaW9uRW5kcG9pbnQ6ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludCxpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6ZS5pbnRyb3NwZWN0aW9uX2VuZHBvaW50LGlzc3VlcjplLmlzc3Vlcixqd2tzVXJpOmUuandrc191cmkscmVnaXN0cmF0aW9uRW5kcG9pbnQ6ZS5yZWdpc3RyYXRpb25fZW5kcG9pbnQscmV2b2NhdGlvbkVuZHBvaW50OmUucmV2b2NhdGlvbl9lbmRwb2ludCx0b2tlbkVuZHBvaW50OmUudG9rZW5fZW5kcG9pbnQsdXNlcmluZm9FbmRwb2ludDplLnVzZXJpbmZvX2VuZHBvaW50LHdlbGxLbm93bkVuZHBvaW50OnlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpfX0pKX1nZXRTaWduT3V0VVJMKCl7dmFyIGUsdCxyO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49bnVsbD09PShlPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmVuZF9zZXNzaW9uX2VuZHBvaW50LGk9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IFN0KCJBVVRIX0NPUkUtR1NPVS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgbz1udWxsPT09KHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmlkX3Rva2VuO2lmKCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdTT1UtTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiSUQgdG9rZW4gbm90IGZvdW5kLiIsIk5vIElEIHRva2VuIGNvdWxkIGJlIGZvdW5kLiBFaXRoZXIgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24gaXMgbG9zdCBvciB5b3UgaGF2ZSBub3Qgc2lnbmVkIGluLiIpO2NvbnN0IHM9bnVsbCE9PShyPW51bGw9PWk/dm9pZCAwOmkuc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09cj9yOm51bGw9PWk/dm9pZCAwOmkuc2lnbkluUmVkaXJlY3RVUkw7aWYoIXN8fDA9PT1zLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IFN0KCJBVVRIX0NPUkUtR1NPVS1ORjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtyZXR1cm5gJHtufT9pZF90b2tlbl9oaW50PSR7b30mcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPSR7c30mc3RhdGU9c2lnbl9vdXRfc3VjY2Vzc2B9KSl9c2lnbk91dCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5nZXRTaWduT3V0VVJMKCk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKCksZX0pKX1nZXRBY2Nlc3NUb2tlbigpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmFjY2Vzc190b2tlbn0pKX1pc0F1dGhlbnRpY2F0ZWQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gQm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpfSkpfWdldFBLQ0VDb2RlKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKX0pKX1zZXRQS0NFQ29kZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIsZSl9KSl9dXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLGUub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWc/KG51bGw9PWU/dm9pZCAwOmUuZW5kcG9pbnRzKSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHt9KSkpOihudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKSl9KSl9fWNsYXNzIFNue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSx0KXt2YXIgcjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT1uJiZKU09OLnBhcnNlKG4pLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHQpLHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfXNldFZhbHVlKGUsdCxyKXt2YXIgbjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPW51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09bj9uOm51bGwsbz1pJiZKU09OLnBhcnNlKGkpLHM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtbdF06cn0pLGE9SlNPTi5zdHJpbmdpZnkocyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLGEpfSkpfXJlbW92ZVZhbHVlKGUsdCl7dmFyIHI7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9biYmSlNPTi5wYXJzZShuKSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bdF07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSl7cmV0dXJuYCR7ZX0tJHt0aGlzLl9pZH1gfXNldENvbmZpZ0RhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpLGUpfSkpfWdldENvbmZpZ0RhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRUZW1wb3JhcnlEYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0U2Vzc2lvbkRhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSkpfSkpfWdldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1zZXRDb25maWdEYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUsdCl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUsdCl9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSxlLHQpfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlLHQpfSkpfXJlbW92ZUNvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlKX0pKX19Y29uc3QgRW49e2NsaWVudEhvc3Q6b3JpZ2luLGNsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTp5dC5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITB9O2NsYXNzIFRuewovKioKICAgICAgICAgKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSAuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0b3JlfSBzdG9yZSAtIFRoZSBzdG9yZSBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CiAgICAgICAgICogY29uc3QgYXV0aCA9IG5ldyBBc2dhcmRlb0F1dGhDbGllbnQ8Q3VzdG9tQ2xpZW50Q29uZmlnPihfc3RvcmUpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2NvbnN0cnVjdG9yCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovCmNvbnN0cnVjdG9yKGUpe1RuLl9pbnN0YW5jZUlEP1RuLl9pbnN0YW5jZUlEKz0xOlRuLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBTbihgaW5zdGFuY2VfJHtUbi5faW5zdGFuY2VJRH1gLGUpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcga24odGhpcy5fZGF0YUxheWVyKQovKioKICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBTREsgd2l0aCB0aGUgY29uZmlnIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0F1dGhDbGllbnRDb25maWc8VD59IGNvbmZpZyAtIFRoZSBjb25maWcgb2JqZWN0IHRvIGluaXRpYWxpemUgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxFbiksZSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RBY2Nlc3NUb2tlbihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QXhpb3NSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGN1c3RvbS1ncmFudCByZXF1ZXN0IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlCiAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtDdXN0b21HcmFudENvbmZpZ30gY29uZmlnIC0gQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBncmFudCBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAqIG9uIHlvdXIgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgKiAgIGRhdGE6IHsKICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAogICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICogICAgICAgc2NvcGU6ICJ7e3Njb3BlfX0iLAogICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKICAgICAgICAgKiAgIH0sCiAgICAgICAgICogICBpZDogImFjY291bnQtc3dpdGNoIiwKICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAogICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICogICBzaWduSW5SZXF1aXJlZDogdHJ1ZQogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF1dGgucmVxdWVzdEN1c3RvbUdyYW50KGNvbmZpZykudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2lzQXV0aGVudGljYXRlZCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuaXNBdXRoZW50aWNhdGVkKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNsYXNzIEFuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8pe3N1cGVyKG51bGwhPW4/bjpudWxsPT1vP3ZvaWQgMDpvLm1lc3NhZ2UpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5jb2RlPWUsdGhpcy5maWxlPXQsdGhpcy5tZXRob2Q9cix0aGlzLmVycm9yPW8sdGhpcy5kZXNjcmlwdGlvbj1pLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgUm57Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZih0LnJlZnJlc2hfdG9rZW4pe2NvbnN0IHI9cGFyc2VJbnQodC5leHBpcmVzX2luKSxuPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QsSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSl7Y29uc3QgZT1KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSk7Y2xlYXJUaW1lb3V0KGUpfX0pKX19Y29uc3QgQ249ImluaXQiO3ZhciBQbixEbixPbjshZnVuY3Rpb24oZSl7ZS5Mb2NhbFN0b3JhZ2U9ImxvY2FsU3RvcmFnZSIsZS5TZXNzaW9uU3RvcmFnZT0ic2Vzc2lvblN0b3JhZ2UiLGUuV2ViV29ya2VyPSJ3ZWJXb3JrZXIiLGUuQnJvd3Nlck1lbW9yeT0iYnJvd3Nlck1lbW9yeSJ9KFBufHwoUG49e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50In0oRG58fChEbj17fSkpO2NsYXNzIElue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWxldCBVbj1Pbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT13dC5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBPbiksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9d3QuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9d3Quc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLE9uLmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKHQpLHR9KSl9ZXJyb3JIYW5kbGVyKGUpe3Rocm93IE9uLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfXN1Y2Nlc3NIYW5kbGVyKGUpe3JldHVybiBPbi5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1pbml0KHQ9ITAscil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPbi5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1yfSkpfWVuYWJsZUhhbmRsZXIoKXtPbi5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7T24uaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KGU9T24uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVCl7T24uaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e09uLmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07VW4uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsVW49T249ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PW4/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixuKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxyLHMpOmkodCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30oW2U9Pnt9XSxVbik7Y2xhc3MgTW57Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxyKX0pKX1nZXREYXRhKHQpe3ZhciByLG47cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0ocj10aGlzLl9kYXRhKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXQodCkpJiZ2b2lkIDAhPT1uP246Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fWNvbnN0IExuPXNlbGY7bGV0IEhuO0xuLm9ubWVzc2FnZT0oe2RhdGE6dCxwb3J0czpyfSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbztjb25zdCBzPXJbMF07aWYodC50eXBlPT09Q258fEhuKXN3aXRjaCh0LnR5cGUpe2Nhc2UgQ246dHJ5e2NvbnN0IHI9T2JqZWN0LmFzc2lnbih7fSx0LmRhdGEpO0huPXlpZWxkKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IE1uLG49bmV3IFRuKHIpO3lpZWxkIG4uaW5pdGlhbGl6ZSh0KTtjb25zdCBpPW5ldyBSbihuKSxvPW4uZ2V0RGF0YUxheWVyKCkscz1Vbi5nZXRJbnN0YW5jZSgpO3JldHVybihudWxsPT1zP3ZvaWQgMDpzLmluaXQpJiYoeWllbGQgcy5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCkuYXR0YWNoVG9rZW4mJih0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIG4uZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpKSkpLHtkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntzLmRpc2FibGVIYW5kbGVyJiZzLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57cy5lbmFibGVIYW5kbGVyJiZzLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9Pm4uZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnlpZWxkIG4uZ2V0UEtDRUNvZGUoKX19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgbi5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixpO2xldCBhPSExO2NvbnN0IHU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IG4gb2ZbLi4ubnVsbCE9PShyPW51bGw9PT0oZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cj9yOltdLG51bGw9PXU/dm9pZCAwOnUuc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGk9bnVsbD09dD92b2lkIDA6dC51cmwpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN0YXJ0c1dpdGgobikpe2E9ITA7YnJlYWt9cmV0dXJuIGE/cy5yZXF1ZXN0KHQpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT57dmFyIHI7cmV0dXJuIDQwMT09PShudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzKT9uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT5zLnJlcXVlc3QodCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUi1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIiIsIiIsZSkpKSk6UHJvbWlzZS5yZWplY3QoZSl9KSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUi1JVjAyIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGh0dHBSZXF1ZXN0QWxsOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHIsaTtsZXQgYT0hMDtjb25zdCB1PXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBuIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBzIG9mWy4uLm51bGwhPT0ocj1udWxsPT09KGU9eWllbGQgby5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PXI/cjpbXSxudWxsPT11P3ZvaWQgMDp1LnNlcnZlck9yaWdpbl0paWYobnVsbD09PShpPW4udXJsKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdGFydHNXaXRoKHMpKXt0PSEwO2JyZWFrfWlmKCF0KXthPSExO2JyZWFrfX1jb25zdCBjPVtdO3JldHVybiBhPyh0LmZvckVhY2goKGU9PntjLnB1c2gocy5yZXF1ZXN0KGUpKX0pKSwobnVsbD09cz92b2lkIDA6cy5hbGwpJiZzLmFsbChjKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+e3ZhciB0O3JldHVybiA0MDE9PT0obnVsbD09PSh0PW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnN0YXR1cyk/bi5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+cy5hbGwmJnMuYWxsKGMpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBbigiV09SS0VSX0NPUkUtSFJBLUVTMDEiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0QWxsIiwiIiwiIixlKSkpKTpQcm9taXNlLnJlamVjdChlKX0pKSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUkEtSVYwMiIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3QiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxpc0F1dGhlbnRpY2F0ZWQ6KCk9Pm4uaXNBdXRoZW50aWNhdGVkKCkscmVmcmVzaEFjY2Vzc1Rva2VuOigpPT5uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkscmVxdWVzdEFjY2Vzc1Rva2VuOih0LHIscyk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7cmV0dXJuIHMmJmUuZW5hYmxlUEtDRSYmKHlpZWxkIG4uc2V0UEtDRUNvZGUocykpLHQ/bi5yZXF1ZXN0QWNjZXNzVG9rZW4odCxudWxsIT1yP3I6IiIpLnRoZW4oKCgpPT4oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1SQVQxLU5GMDEiLCJ3b3JrZXItY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKX0pKSxyZXF1ZXN0Q3VzdG9tR3JhbnQ6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHIscyxhO2xldCB1PSEwLGM9ITE7Y29uc3QgaD15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtpZihudWxsPT10P3ZvaWQgMDp0LnRva2VuRW5kcG9pbnQpe3U9ITE7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShzPW51bGw9PT0ocj15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cz9zOltdLG51bGw9PWg/dm9pZCAwOmguc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGE9dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09YT92b2lkIDA6YS5zdGFydHNXaXRoKGUpKXtjPSEwO2JyZWFrfX1yZXR1cm4gdXx8Yz9uLnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdC5yZXR1cm5zU2Vzc2lvbj8oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpOnJ9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLVJDRy1JVjAxIiwid29ya2VyLWNvcmUiLCJyZXF1ZXN0Q3VzdG9tR3JhbnQiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+bi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4oaS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxQcm9taXNlLnJlc29sdmUoITApKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpLHNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s6ZT0+eyhudWxsPT1zP3ZvaWQgMDpzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LHNldFNlc3Npb25TdGF0ZTp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBvLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KX0pKSxzaWduT3V0OigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx5aWVsZCBuLnNpZ25PdXQoKX0pKSxzdGFydEF1dG9SZWZyZXNoVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2kuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCl9KSksdXBkYXRlQ29uZmlnOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIG4udXBkYXRlQ29uZmlnKHQpfSkpfX0pKSkociksSG4uc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKEJuKSxIbi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHFuKSxIbi5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soam4pLEhuLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKHhuKSxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9hdXRoX3VybCI6SG4uZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT10P3ZvaWQgMDp0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpIbi5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PShuPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY29kZSxudWxsPT09KGk9bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zZXNzaW9uU3RhdGUsbnVsbD09PShvPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW8/dm9pZCAwOm8ucGtjZSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0IjpIbi5odHRwUmVxdWVzdCh0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImh0dHAtcmVxdWVzdC1hbGwiOkhuLmh0dHBSZXF1ZXN0QWxsKHQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2Uic2lnbi1vdXQiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uc2lnbk91dCgpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpIbi5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXZva2UtYWNjZXNzLXRva2VuIjpIbi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImdldC1vaWRjLXNlcnZpY2UtZW5kcG9pbnRzIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRCYXNpY1VzZXJJbmZvKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWRlY29kZWQtaWQtdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOkhuLmVuYWJsZUh0dHBIYW5kbGVyKCkscy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiZGlzYWJsZV9odHRwX2hhbmRsZXIiOkhuLmRpc2FibGVIdHRwSGFuZGxlcigpLHMucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X3NpZ25fb3V0X3VybCI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRTaWduT3V0VVJMKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4ucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKEhuLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInNldF9zZXNzaW9uX3N0YXRlIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLnNldFNlc3Npb25TdGF0ZShudWxsPT10P3ZvaWQgMDp0LmRhdGEpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4udXBkYXRlQ29uZmlnKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7ZGVmYXVsdDpudWxsPT1zfHxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IEFuKCJDTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJjbGllbnQud29ya2VyIiwib25tZXNzYWdlIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsYFRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICR7dC50eXBlfSwgaXMgaW52YWxpZC5gKSkpfWVsc2Ugcy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBBbigiQ0xJRU5UX1dPUktFUi1PTk1TRy1ORjAxIiwiY2xpZW50LndvcmtlciIsdC50eXBlLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpO2NvbnN0IGpuPSgpPT57TG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LHhuPWU9PntMbi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0scW49KCk9PntMbi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9LEJuPWU9Pntjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7ZGVsZXRlIHQudG9KU09OLExuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPXQ/dDoiIiksdHlwZToicmVxdWVzdC1lcnJvciJ9KX07cmV0dXJue319KCk7Cgo=",null,!1),new Worker(Dl,t)});const ql={checkSessionInterval:3,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:xl.SessionStorage};class _l{constructor(t){this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=t}_isInitialized(){return l(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let t=0;for(;!this._initialized;)10===t&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise(t=>setTimeout(t,1e3)),t++;return!0}))}_validateMethod(){return l(this,void 0,void 0,(function*(){return(yield this._isInitialized())&&!!(yield this.isAuthenticated())||Promise.reject()}))}
|
|
407
|
+
*/updateConfig(t){return gi(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}}var xl,Tl;!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(xl||(xl={})),function(t){t.SignIn="sign-in",t.SignOut="sign-out",t.Initialize="initialize",t.HttpRequestStart="http-request-start",t.HttpRequestFinish="http-request-finish",t.HttpRequestError="http-request-error",t.HttpRequestSuccess="http-request-success",t.RevokeAccessToken="revoke-access-token",t.CustomGrant="custom-grant"}(Tl||(Tl={}));const kl="Y2hlY2tTZXNzaW9u";class Fl extends Error{constructor(t,i,n,l,e,c){super(null!=l?l:null==c?void 0:c.message),this.name=this.constructor.name,this.code=t,this.file=i,this.method=n,this.error=c,this.description=e,Object.setPrototypeOf(this,new.target.prototype)}}class Bl{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(){return l(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const i=parseInt(t.expires_in),n=setTimeout(()=>l(this,void 0,void 0,(function*(){yield this._authenticationClient.refreshAccessToken()})),1e3*(i<=10?i:i-10));yield this._dataLayer.setTemporaryDataParameter(Si,JSON.stringify(n))}}))}clearRefreshTokenTimeout(){return l(this,void 0,void 0,(function*(){if(yield this._dataLayer.getTemporaryDataParameter(Si)){const t=JSON.parse(yield this._dataLayer.getTemporaryDataParameter(Si));clearTimeout(t)}}))}}class zl{constructor(){}static removeAuthorizationCode(){const t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}static getPKCE(){var t;return null!==(t=sessionStorage.getItem(vi))&&void 0!==t?t:""}static setPKCE(t){sessionStorage.setItem(vi,t)}static setSignOutURL(t){sessionStorage.setItem(Ji,t)}static getSignOutURL(){var t;return null!==(t=sessionStorage.getItem(Ji))&&void 0!==t?t:""}static removePKCE(){sessionStorage.removeItem(vi)}static setInitializedSignIn(t){const i=sessionStorage.getItem("initialized-sign-in"),n=i?JSON.parse(i):null;return t&&n?(sessionStorage.setItem("initialized-sign-in","false"),!0):!t&&(n?(sessionStorage.setItem("initialized-sign-in","false"),!0):(sessionStorage.setItem("initialized-sign-in","true"),!0))}static setIsInitializedSilentSignIn(){const t=sessionStorage.getItem("initialized-silent-sign-in");return t&&JSON.parse(t)?(sessionStorage.setItem("initialized-silent-sign-in","false"),!0):(sessionStorage.setItem("initialized-silent-sign-in","true"),!1)}static wasSignInCalled(){const t=sessionStorage.getItem("initialized-sign-in"),i=t?JSON.parse(t):null,n=sessionStorage.getItem("initialized-silent-sign-in"),l=n?JSON.parse(n):null;return i&&!l}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),i=t?JSON.parse(t):null;return Boolean(i)}static isSignOutSuccessful(){if(Hl.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),!0}return!1}static isStatePresentInURL(){const t=new URL(window.location.href).searchParams.get("state");return"sign-in-silently"===t||t===kl}static hasAuthSearchParamsInURL(t=window.location.search){return/[?&]code=[^&]+/.test(t)&&/[?&]session_state=[^&]+/.test(t)}static canSendPromptNoneRequest(){const t=sessionStorage.getItem("promptNoneRequestSent");return!(t&&JSON.parse(t))}static setPromptNoneRequestSent(t){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(t))}static waitTillPageRedirect(t){return l(this,void 0,void 0,(function*(){const i=null!=t?t:3e3;yield new Promise(t=>setTimeout(t,1e3*i))}))}}const wl=(()=>{let t,i,n,e,c,o,d,r,a,u,Z,s;const b=(l,r,a,u,Z,b,h,I)=>{t=l,i=r,n=a,e=u,c=b,o=h,d=Z,s=I,e>-1&&m(),d>-1&&(Z=setInterval(()=>{p()},1e3*d))},m=()=>l(void 0,void 0,void 0,(function*(){var o;if(!i||!t||!c)return;const d="opIFrame";function r(){var e;return l(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n=`${t} ${l}`,c=document.getElementById("rpIFrame"),o=(null===(e=null==c?void 0:c.contentDocument)||void 0===e?void 0:e.getElementById(d)).contentWindow;null==o||o.postMessage(n,i)}}))}const u=document.getElementById("rpIFrame");(null===(o=null==u?void 0:u.contentDocument)||void 0===o?void 0:o.getElementById(d)).src=i+"?client_id="+t+"&redirect_uri="+c,yield r(),a=setInterval(r,1e3*e),I()})),h=()=>{clearInterval(a),clearInterval(void 0)},I=()=>{null===window||void 0===window||window.addEventListener("message",(function(t){return l(this,void 0,void 0,(function*(){!i||(null==i?void 0:i.indexOf(t.origin))<0||"unchanged"===t.data||("error"===t.data?window.location.href=yield r():p())}))}),!1)},p=()=>{var i;const n=document.getElementById("rpIFrame"),l=null===(i=null==n?void 0:n.contentDocument)||void 0===i?void 0:i.getElementById("promptNoneIFrame");if(zl.canSendPromptNoneRequest()){zl.setPromptNoneRequestSent(!0);const i=t=>{var n,l,e;"set_session_state_from_iframe"===(null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.type)&&(Z(null!==(e=null===(l=null==t?void 0:t.data)||void 0===l?void 0:l.data)&&void 0!==e?e:""),null===window||void 0===window||window.removeEventListener("message",i))};u!==xl.BrowserMemory&&u!==xl.WebWorker||null===window||void 0===window||window.addEventListener("message",i);const n=new URL(o);n.searchParams.set("response_type","code"),n.searchParams.set("client_id",t),n.searchParams.set("scope","openid"),n.searchParams.set("redirect_uri",c),n.searchParams.set("state",kl),n.searchParams.set("prompt","none"),s&&(n.searchParams.set("code_challenge_method","S256"),n.searchParams.set("code_challenge",(()=>{const t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz-_";let i="";for(let n=0;n<43;n++){const n=Math.floor(Math.random()*t.length);i+=t.substring(n,n+1)}return i})())),l.src=n.toString()}},G=t=>l(void 0,void 0,void 0,(function*(){var i,n;const l=new URL(window.location.href).searchParams.get("state"),e=new URL(window.location.href).searchParams.get(Ki),c=window.parent.parent;if(null!==l&&(l===kl||"sign-in-silently"===l)){const o=new URL(window.location.href).searchParams.get("code");if(null!==o&&0!==o.length){if("sign-in-silently"===l){const t={data:{code:o,sessionState:null!=e?e:""},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),c.postMessage(t,c.origin),zl.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield zl.waitTillPageRedirect(),!0}const d=new URL(window.location.href).searchParams.get("session_state");if(u===xl.LocalStorage||u===xl.SessionStorage)t&&(yield t(d));else{const t={data:null!=d?d:"",type:"set_session_state_from_iframe"};null===(n=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===n||n.postMessage(t)}return zl.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield zl.waitTillPageRedirect(),!0}if("sign-in-silently"===l){const t={type:"check_session_signed_out"};return sessionStorage.setItem("initialized-silent-sign-in","false"),window.parent.parent.postMessage(t,c.origin),zl.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield zl.waitTillPageRedirect(),!0}return zl.setPromptNoneRequestSent(!1),c.location.href=yield r(),window.location.href="about:blank",yield zl.waitTillPageRedirect(),!0}return!1}));return(t,i,n)=>{var l,e,c,o,d;const a=document.createElement("iframe");a.setAttribute("id","opIFrame"),a.style.display="none";let s=document.createElement("iframe");s.setAttribute("id","rpIFrame"),s.style.display="none";const m=document.createElement("iframe");return m.setAttribute("id","promptNoneIFrame"),m.style.display="none",null===(l=null===document||void 0===document?void 0:document.body)||void 0===l||l.appendChild(s),s=document.getElementById("rpIFrame"),null===(c=null===(e=null==s?void 0:s.contentDocument)||void 0===e?void 0:e.body)||void 0===c||c.appendChild(a),null===(d=null===(o=null==s?void 0:s.contentDocument)||void 0===o?void 0:o.body)||void 0===d||d.appendChild(m),r=t,u=i,Z=n,{initialize:b,receivePromptNoneResponse:G,reset:h}}})();var Al;let Pl=Al=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>null,this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}static getInstance(){return this.axiosInstance||(this.axiosInstance=yi.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new Al),this.axiosInstance.interceptors.request.use(t=>l(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(t)}))),this.axiosInstance.interceptors.response.use(t=>this.clientInstance.successHandler(t),t=>this.clientInstance.errorHandler(t)),this.axiosInstance.all=yi.all,this.axiosInstance.spread=yi.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}requestHandler(t){return l(this,void 0,void 0,(function*(){return yield this.attachToken(t),Al.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw Al.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return Al.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}init(t=!0,i){return l(this,void 0,void 0,(function*(){Al.isHandlerEnabled=t,this.attachToken=i}))}enableHandler(){Al.isHandlerEnabled=!0}disableHandler(){Al.isHandlerEnabled=!1}disableHandlerWithTimeout(t=Al.DEFAULT_HANDLER_DISABLE_TIMEOUT){Al.isHandlerEnabled=!1,setTimeout(()=>{Al.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};Pl.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,Pl=Al=function(t,i,n,l){var e,c=arguments.length,o=c<3?i:null===l?l=Object.getOwnPropertyDescriptor(i,n):l;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,i,n,l);else for(var d=t.length-1;d>=0;d--)(e=t[d])&&(o=(c<3?e(o):c>3?e(i,n,o):e(i,n))||o);return c>3&&o&&Object.defineProperty(i,n,o),o}([t=>{}],Pl);class Ml{setData(t,i){return l(this,void 0,void 0,(function*(){localStorage.setItem(t,i)}))}getData(t){var i;return l(this,void 0,void 0,(function*(){return null!==(i=localStorage.getItem(t))&&void 0!==i?i:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){localStorage.removeItem(t)}))}}class Ql{constructor(){this._data=new Map}setData(t,i){return l(this,void 0,void 0,(function*(){this._data.set(t,i)}))}getData(t){var i,n;return l(this,void 0,void 0,(function*(){return null!==(n=null===(i=this._data)||void 0===i?void 0:i.get(t))&&void 0!==n?n:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){this._data.delete(t)}))}}class jl{setData(t,i){return l(this,void 0,void 0,(function*(){sessionStorage.setItem(t,i)}))}getData(t){var i;return l(this,void 0,void 0,(function*(){return null!==(i=sessionStorage.getItem(t))&&void 0!==i?i:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){sessionStorage.removeItem(t)}))}}const El=t=>l(void 0,void 0,void 0,(function*(){var i;const n=(t=>{switch(t){case xl.LocalStorage:return new Ml;case xl.SessionStorage:return new jl;case xl.BrowserMemory:return new Ql;default:return new jl}})(t.storage),e=new Hl(n);yield e.initialize(t);const c=new Bl(e),o=e.getDataLayer(),d=wl(()=>l(void 0,void 0,void 0,(function*(){return e.signOut()})),null!==(i=t.storage)&&void 0!==i?i:xl.SessionStorage,t=>o.setSessionDataParameter(Ki,null!=t?t:"")),r=Pl.getInstance();(null==r?void 0:r.init)&&(yield r.init(!0,t=>l(void 0,void 0,void 0,(function*(){Object.assign({attachToken:!0},t).attachToken&&(t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield e.getAccessToken())}))}))));const a=()=>l(void 0,void 0,void 0,(function*(){var t,i,n,c;const r=yield e.getOIDCServiceEndpoints(),a=yield o.getConfigData();d.initialize(a.clientID,null!==(t=r.checkSessionIframe)&&void 0!==t?t:"",()=>l(void 0,void 0,void 0,(function*(){return(yield e.getBasicUserInfo()).sessionState})),null!==(i=a.checkSessionInterval)&&void 0!==i?i:3,null!==(n=a.sessionRefreshInterval)&&void 0!==n?n:300,a.signInRedirectURL,null!==(c=r.authorizationEndpoint)&&void 0!==c?c:"",a.enablePKCE)})),u=(t,i)=>l(void 0,void 0,void 0,(function*(){const n=yield o.getConfigData();if(n.storage===xl.BrowserMemory&&n.enablePKCE){const t=zl.getPKCE();yield e.setPKCECode(t)}return e.requestAccessToken(t,i).then(()=>l(void 0,void 0,void 0,(function*(){return n.storage===xl.BrowserMemory&&zl.setSignOutURL(yield e.getSignOutURL()),c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),n.enableOIDCSessionManagement&&a(),e.getBasicUserInfo()}))).catch(t=>Promise.reject(t))}));return{disableHttpHandler:()=>((null==r?void 0:r.disableHandler)&&r.disableHandler(),!0),enableHttpHandler:()=>((null==r?void 0:r.enableHandler)&&r.enableHandler(),!0),getAccessToken:()=>l(void 0,void 0,void 0,(function*(){return e.getAccessToken()})),getBasicUserInfo:()=>l(void 0,void 0,void 0,(function*(){return e.getBasicUserInfo()})),getDecodedIDToken:()=>l(void 0,void 0,void 0,(function*(){return e.getDecodedIDToken()})),getHttpClient:()=>r,getIDToken:()=>l(void 0,void 0,void 0,(function*(){return e.getIDToken()})),getOIDCServiceEndpoints:()=>l(void 0,void 0,void 0,(function*(){return e.getOIDCServiceEndpoints()})),httpRequest:t=>l(void 0,void 0,void 0,(function*(){var i,n;let l=!1;const c=yield o.getConfigData();for(const e of[...null!==(i=yield null==c?void 0:c.resourceServerURLs)&&void 0!==i?i:[],null==c?void 0:c.serverOrigin])if(null===(n=null==t?void 0:t.url)||void 0===n?void 0:n.startsWith(e)){l=!0;break}return l?r.request(t).then(t=>Promise.resolve(t)).catch(i=>{var n;return 401===(null===(n=null==i?void 0:i.response)||void 0===n?void 0:n.status)?e.refreshAccessToken().then(()=>r.request(t).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(new Fl("MAIN_THREAD_CLIENT-HR-ES01","main-thread-client","httpRequest","","",t))):Promise.reject(i)}):Promise.reject(new Fl("MAIN_THREAD_CLIENT-HR-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))})),httpRequestAll:t=>l(void 0,void 0,void 0,(function*(){var i,n,l;let c=!0;const d=yield o.getConfigData();for(const e of t){let t=!1;for(const c of[...null!==(n=null===(i=yield d)||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],null==d?void 0:d.serverOrigin])if(null===(l=e.url)||void 0===l?void 0:l.startsWith(c)){t=!0;break}if(!t){c=!1;break}}const a=[];return c?(t.forEach(t=>{a.push(r.request(t))}),(null==r?void 0:r.all)&&r.all(a).then(t=>Promise.resolve(t)).catch(t=>{var i;return 401===(null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.status)?e.refreshAccessToken().then(()=>r.all&&r.all(a).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(new Fl("MAIN_THREAD_CLIENT-HRA-ES01","main-thread-client","httpRequestAll","","",t))):Promise.reject(t)})):Promise.reject(new Fl("MAIN_THREAD_CLIENT-HRA-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))})),isAuthenticated:()=>l(void 0,void 0,void 0,(function*(){return e.isAuthenticated()})),refreshAccessToken:()=>e.refreshAccessToken().then(()=>(c.refreshAccessTokenAutomatically(),e.getBasicUserInfo())).catch(t=>Promise.reject(t)),requestCustomGrant:t=>l(void 0,void 0,void 0,(function*(){var i,n,d;let r=!0,a=!1;const u=yield o.getConfigData();if(null==t?void 0:t.tokenEndpoint){r=!1;for(const l of[...null!==(n=null===(i=yield o.getConfigData())||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],null==u?void 0:u.serverOrigin])if(null===(d=t.tokenEndpoint)||void 0===d?void 0:d.startsWith(l)){a=!0;break}}return r||a?e.requestCustomGrant(t).then(i=>l(void 0,void 0,void 0,(function*(){return t.returnsSession?(c.refreshAccessTokenAutomatically(),e.getBasicUserInfo()):i}))).catch(t=>Promise.reject(t)):Promise.reject(new Fl("MAIN_THREAD_CLIENT-RCG-IV01","main-thread-client","requestCustomGrant","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`"))})),revokeAccessToken:()=>e.revokeAccessToken().then(()=>(c.clearRefreshTokenTimeout(),Promise.resolve(!0))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{(null==r?void 0:r.setHttpRequestErrorCallback)&&r.setHttpRequestErrorCallback(t)},setHttpRequestFinishCallback:t=>{(null==r?void 0:r.setHttpRequestFinishCallback)&&r.setHttpRequestFinishCallback(t)},setHttpRequestStartCallback:t=>{(null==r?void 0:r.setHttpRequestStartCallback)&&r.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==r?void 0:r.setHttpRequestSuccessCallback)&&r.setHttpRequestSuccessCallback(t)},signIn:(t,i,n)=>l(void 0,void 0,void 0,(function*(){var r,Z;const s=yield o.getConfigData();if(yield d.receivePromptNoneResponse(t=>l(void 0,void 0,void 0,(function*(){yield o.setSessionDataParameter(Ki,null!=t?t:"")}))))return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""});if(zl.wasSilentSignInCalled()&&zl.setIsInitializedSilentSignIn(),yield e.isAuthenticated())return c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),s.enableOIDCSessionManagement&&a(),Promise.resolve(yield e.getBasicUserInfo());let b,m;if((null==s?void 0:s.responseMode)===pi.formPost&&i?(b=i,m=null!=n?n:""):(b=null!==(r=new URL(window.location.href).searchParams.get(Yi))&&void 0!==r?r:"",m=null!==(Z=new URL(window.location.href).searchParams.get(Ki))&&void 0!==Z?Z:"",zl.removeAuthorizationCode()),b)return u(b,m);const h=new URL(window.location.href).searchParams.get("error"),I=new URL(window.location.href).searchParams.get("error_description");if(h){const t=new URL(window.location.href);return t.searchParams.delete("error"),t.searchParams.delete("error_description"),history.pushState(null,document.title,t.toString()),Promise.reject(new Fl("MAIN_THREAD_CLIENT-SI-BE","main-thread-client","signIn",h,null!=I?I:""))}return e.getAuthorizationURL(t).then(t=>l(void 0,void 0,void 0,(function*(){return s.storage===xl.BrowserMemory&&s.enablePKCE&&zl.setPKCE(yield e.getPKCECode()),location.href=t,yield zl.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""})})))})),signOut:()=>l(void 0,void 0,void 0,(function*(){return(yield e.isAuthenticated())?location.href=yield e.signOut():location.href=zl.getSignOutURL(),c.clearRefreshTokenTimeout(),yield zl.waitTillPageRedirect(),!0})),trySignInSilently:()=>l(void 0,void 0,void 0,(function*(){var t;const i=yield o.getConfigData();if(zl.setIsInitializedSilentSignIn())return yield d.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""});if(zl.isStatePresentInURL())return zl.setIsInitializedSilentSignIn(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",tenantDomain:"",username:""});const n=document.getElementById("rpIFrame"),c=null===(t=null==n?void 0:n.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");try{const t=yield e.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),n=new URL(t);n.searchParams.set("response_mode","query");const l=n.toString();i.storage===xl.BrowserMemory&&i.enablePKCE&&zl.setPKCE(yield e.getPKCECode()),c.src=l}catch(t){return Promise.reject(t)}return new Promise((t,i)=>{const n=e=>l(void 0,void 0,void 0,(function*(){var l,c;const o=e.data,d=setTimeout(()=>{t(!1)},1e4);"check_session_signed_out"==(null==o?void 0:o.type)&&(window.removeEventListener("message",n),clearTimeout(d),t(!1)),"check_session_signed_in"==(null==o?void 0:o.type)&&(null===(l=null==o?void 0:o.data)||void 0===l?void 0:l.code)&&u(o.data.code,null===(c=null==o?void 0:o.data)||void 0===c?void 0:c.sessionState).then(i=>{window.removeEventListener("message",n),t(i)}).catch(t=>{window.removeEventListener("message",n),i(t)}).finally(()=>{clearTimeout(d)})}));window.addEventListener("message",n)})})),updateConfig:t=>l(void 0,void 0,void 0,(function*(){const i=yield o.getConfigData(),n=!(i&&i.endpoints&&i.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&i.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),l=Object.assign(Object.assign({},i),t);yield e.updateConfig(l),l.enableOIDCSessionManagement&&n&&(d.reset(),a())}))}}));var Dl,Ol=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHI9W10sbj1bXSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89ITE7ZnVuY3Rpb24gcygpe289ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsaT1lLmxlbmd0aDt0PGk7Kyt0KXJbdF09ZVt0XSxuW2UuY2hhckNvZGVBdCh0KV09dDtuWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIGksbyxzPVtdLGE9dDthPG47YSs9MylpPShlW2FdPDwxNikrKGVbYSsxXTw8OCkrZVthKzJdLHMucHVzaChyWyhvPWkpPj4xOCY2M10rcltvPj4xMiY2M10rcltvPj42JjYzXStyWzYzJm9dKTtyZXR1cm4gcy5qb2luKCIiKX1mdW5jdGlvbiB1KGUpe3ZhciB0O298fHMoKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uJTMsdT0iIixjPVtdLGg9MTYzODMsbD0wLGY9bi1pO2w8ZjtsKz1oKWMucHVzaChhKGUsbCxsK2g+Zj9mOmwraCkpO3JldHVybiAxPT09aT8odD1lW24tMV0sdSs9clt0Pj4yXSx1Kz1yW3Q8PDQmNjNdLHUrPSI9PSIpOjI9PT1pJiYodD0oZVtuLTJdPDw4KStlW24tMV0sdSs9clt0Pj4xMF0sdSs9clt0Pj40JjYzXSx1Kz1yW3Q8PDImNjNdLHUrPSI9IiksYy5wdXNoKHUpLGMuam9pbigiIil9ZnVuY3Rpb24gYyhlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBoKGUsdCxyLG4saSxvKXt2YXIgcyxhLHUsYz04Km8taS0xLGg9KDE8PGMpLTEsbD1oPj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDpvLTEscD1uPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9aCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoodT1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSx1Kj0yKSwodCs9cytsPj0xP2YvdTpmKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKHMrKyx1Lz0yKSxzK2w+PWg/KGE9MCxzPWgpOnMrbD49MT8oYT0odCp1LTEpKk1hdGgucG93KDIsaSkscys9bCk6KGE9dCpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbcitkXT0yNTUmYSxkKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsYys9aTtjPjA7ZVtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGMtPTgpO2VbcitkLXBdfD0xMjgqZ312YXIgbD17fS50b1N0cmluZyxmPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWwuY2FsbChlKX07ZnVuY3Rpb24gZCgpe3JldHVybiBnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHAoZSx0KXtpZihkKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBnKGUsdCxyKXtpZighKGcuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBtKHRoaXMsZSl9cmV0dXJuIHYodGhpcyxlLHQscil9ZnVuY3Rpb24gdihlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO2cuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189Zy5wcm90b3R5cGU6ZT13KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIWcuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGsodCxyKSxpPShlPXAoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoXyh0KSl7dmFyIHI9MHxiKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXAoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uP3AoZSwwKTp3KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJmYodC5kYXRhKSlyZXR1cm4gdyhlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIHkoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBtKGUsdCl7aWYoeSh0KSxlPXAoZSx0PDA/MDowfGIodCkpLCFnLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gdyhlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGIodC5sZW5ndGgpO2U9cChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtpZihlPj1kKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gayhlLHQpe2lmKF8oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuICQoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuICQoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiB4KHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gSCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaih0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBVKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHEodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gRShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIFQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWcuZnJvbSh0LG4pKSxfKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6QShlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LGcuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOkEoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIEEoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gUihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gQyhlLHQscixuKXtyZXR1cm4gWCgkKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFAoZSx0LHIsbil7cmV0dXJuIFgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBEKGUsdCxyLG4pe3JldHVybiBQKGUsdCxyLG4pfWZ1bmN0aW9uIE8oZSx0LHIsbil7cmV0dXJuIFgoRyh0KSxlLHIsbil9ZnVuY3Rpb24gSShlLHQscixuKXtyZXR1cm4gWChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFUoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3UoZSk6dShlLnNsaWNlKHQscikpfWZ1bmN0aW9uIE0oZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsdSxjPWVbaV0saD1udWxsLGw9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2w8PXIpc3dpdGNoKGwpe2Nhc2UgMTpjPDEyOCYmKGg9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKHU9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKGg9dSk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYodT0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYodTw1NTI5Nnx8dT41NzM0MykmJihoPXUpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYodT0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZ1PDExMTQxMTImJihoPXUpfW51bGw9PT1oPyhoPTY1NTMzLGw9MSk6aD42NTUzNSYmKGgtPTY1NTM2LG4ucHVzaChoPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG4ucHVzaChoKSxpKz1sfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1MKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1MKSk7cmV0dXJuIHJ9KG4pfWcuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT10LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHQuVFlQRURfQVJSQVlfU1VQUE9SVCxnLnBvb2xTaXplPTgxOTIsZy5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189Zy5wcm90b3R5cGUsZX0sZy5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdihudWxsLGUsdCxyKX0sZy5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoZy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGcuX19wcm90b19fPVVpbnQ4QXJyYXkpLGcuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4geSh0KSx0PD0wP3AoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9wKGUsdCkuZmlsbChyLG4pOnAoZSx0KS5maWxsKHIpOnAoZSx0KX0obnVsbCxlLHQscil9LGcuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFooZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmWihlLnNsaWNlKDAsMCkpfShlKSl9LGcuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFfKGUpfHwhXyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sZy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxnLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFmKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGcuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj1nLmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFfKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sZy5ieXRlTGVuZ3RoPWssZy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGcucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilFKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpRSh0aGlzLHQsdCszKSxFKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClFKHRoaXMsdCx0KzcpLEUodGhpcyx0KzEsdCs2KSxFKHRoaXMsdCsyLHQrNSksRSh0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP00odGhpcywwLGUpOlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIV8oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWcuY29tcGFyZSh0aGlzLGUpfSxnLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighXyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixpKSxjPWUuc2xpY2UodCxyKSxoPTA7aDxhOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGcucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LGcucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBUKHRoaXMsZSx0LHIsITApfSxnLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFQodGhpcyxlLHQsciwhMSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBSKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRCh0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIE8odGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBJKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LGcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEw9NDA5NjtmdW5jdGlvbiBIKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geChlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVYoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gcShlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxpPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIE4oZSx0LHIsbixpLG8pe2lmKCFfKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBLKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBGKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFkoZSx0LHIsbixpLG8pe2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsNCksaChlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBKKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsOCksaChlLHQscixuLDUyLDgpLHIrOH1nLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgZyhpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0sZy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fEIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LGcucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxnLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGcucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGcucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEIoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxnLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sZy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8QihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxnLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8QihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxnLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sZy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLGModGhpcyxlLCEwLDIzLDQpfSxnLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsMjMsNCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITAsNTIsOCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsNTIsOCl9LGcucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8Tih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sZy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxOKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LGcucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDI1NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxnLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsMiw2NTUzNSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwyLDY1NTM1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOksodGhpcyxlLHQsITEpLHQrMn0sZy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Rih0aGlzLGUsdCwhMCksdCs0fSxnLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzR9LGcucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDEyNywtMTI4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGcucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpLKHRoaXMsZSx0LCExKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkYodGhpcyxlLHQsITApLHQrNH0sZy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCs0fSxnLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCEwLHIpfSxnLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCExLHIpfSxnLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gSih0aGlzLGUsdCwhMCxyKX0sZy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEoodGhpcyxlLHQsITEscil9LGcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IWcuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LGcucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9XyhlKT9lOiQobmV3IGcoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB6PS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFYoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uICQoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsYSx1LGMsaDtvfHxzKCk7dmFyIGw9ZS5sZW5ndGg7aWYobCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7Yz0iPSI9PT1lW2wtMl0/MjoiPSI9PT1lW2wtMV0/MTowLGg9bmV3IGkoMypsLzQtYyksYT1jPjA/bC00Omw7dmFyIGY9MDtmb3IodD0wLHI9MDt0PGE7dCs9NCxyKz0zKXU9bltlLmNoYXJDb2RlQXQodCldPDwxOHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8bltlLmNoYXJDb2RlQXQodCsyKV08PDZ8bltlLmNoYXJDb2RlQXQodCszKV0saFtmKytdPXU+PjE2JjI1NSxoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1O3JldHVybiAyPT09Yz8odT1uW2UuY2hhckNvZGVBdCh0KV08PDJ8bltlLmNoYXJDb2RlQXQodCsxKV0+PjQsaFtmKytdPTI1NSZ1KToxPT09YyYmKHU9bltlLmNoYXJDb2RlQXQodCldPDwxMHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxuW2UuY2hhckNvZGVBdCh0KzIpXT4+MixoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1KSxofShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKHosIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIFgoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBRPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LGVlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PWVlLmNhbGwoZSl9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gaWUoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1lZS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIG9lKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1lZS5jYWxsKGUpfWZ1bmN0aW9uIHNlKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksdGUoZSkpZm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGFlPXtpc0FycmF5OnRlLGlzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWVlLmNhbGwoZSl9LGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXJlKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIXJlKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZlIGluc3RhbmNlb2YgRm9ybURhdGF9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpuZSxpc1BsYWluT2JqZWN0OmllLGlzVW5kZWZpbmVkOnJlLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1lZS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09ZWUuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PWVlLmNhbGwoZSl9LGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIG5lKGUpJiZvZShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFVSTFNlYXJjaFBhcmFtcyYmZSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpzZSxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe2llKHRbbl0pJiZpZShyKT90W25dPWUodFtuXSxyKTppZShyKT90W25dPWUoe30scik6dGUocik/dFtuXT1yLnNsaWNlKCk6dFtuXT1yfWZvcih2YXIgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKXNlKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gc2UodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1EodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGNlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKGFlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107YWUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihhZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sYWUuZm9yRWFjaChlLChmdW5jdGlvbihlKXthZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6YWUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2godWUodCkrIj0iK3VlKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gaGUoKXt0aGlzLmhhbmRsZXJzPVtdfWhlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LGhlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0saGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7YWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGxlPWhlO2Z1bmN0aW9uIGZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZGUoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBwZT1mZSxnZT1kZTtmdW5jdGlvbiB2ZShlKXtpZihwZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigocGU9PT1mZXx8IXBlKSYmc2V0VGltZW91dClyZXR1cm4gcGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBwZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gcGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHBlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0VGltZW91dCYmKHBlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsZWFyVGltZW91dCYmKGdlPWNsZWFyVGltZW91dCk7dmFyIHllLG1lPVtdLHdlPSExLGJlPS0xO2Z1bmN0aW9uIF9lKCl7d2UmJnllJiYod2U9ITEseWUubGVuZ3RoP21lPXllLmNvbmNhdChtZSk6YmU9LTEsbWUubGVuZ3RoJiZrZSgpKX1mdW5jdGlvbiBrZSgpe2lmKCF3ZSl7dmFyIGU9dmUoX2UpO3dlPSEwO2Zvcih2YXIgdD1tZS5sZW5ndGg7dDspe2Zvcih5ZT1tZSxtZT1bXTsrK2JlPHQ7KXllJiZ5ZVtiZV0ucnVuKCk7YmU9LTEsdD1tZS5sZW5ndGh9eWU9bnVsbCx3ZT0hMSxmdW5jdGlvbihlKXtpZihnZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChnZT09PWRlfHwhZ2UpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGdlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e2dlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gZ2UuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBnZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFNlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9U2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEVlKCl7fXZhciBUZT1FZSxBZT1FZSxSZT1FZSxDZT1FZSxQZT1FZSxEZT1FZSxPZT1FZTt2YXIgSWU9dC5wZXJmb3JtYW5jZXx8e30sVWU9SWUubm93fHxJZS5tb3pOb3d8fEllLm1zTm93fHxJZS5vTm93fHxJZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBNZT1uZXcgRGF0ZTt2YXIgTGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07bWUucHVzaChuZXcgU2UoZSx0KSksMSE9PW1lLmxlbmd0aHx8d2V8fHZlKGtlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpUZSxhZGRMaXN0ZW5lcjpBZSxvbmNlOlJlLG9mZjpDZSxyZW1vdmVMaXN0ZW5lcjpQZSxyZW1vdmVBbGxMaXN0ZW5lcnM6RGUsZW1pdDpPZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpVZS5jYWxsKEllKSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1NZSkvMWUzfX0sSGU9TGUsamU9ZnVuY3Rpb24oZSx0KXthZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LHhlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxxZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4geGUobyx0LHIsbixpKX0sQmU9YWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLGFlLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksYWUuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxOZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLEtlPWFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPWFlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxpPWUuaGVhZGVycyxvPWUucmVzcG9uc2VUeXBlO2FlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBpWyJDb250ZW50LVR5cGUiXTt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgYT1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtpLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShhKyI6Iit1KX12YXIgYyxoLGw9KGM9ZS5iYXNlVVJMLGg9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChoKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGgpOmgpO2Z1bmN0aW9uIGYoKXtpZihzKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHM/ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGFlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWFlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWFlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmTmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0ocy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOm8mJiJ0ZXh0IiE9PW8mJiJqc29uIiE9PW8/cy5yZXNwb25zZTpzLnJlc3BvbnNlVGV4dCxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6c307IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QocWUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLGkpLHM9bnVsbH19aWYocy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksY2UobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gcz9zLm9ubG9hZGVuZD1mOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cyYmND09PXMucmVhZHlTdGF0ZSYmKDAhPT1zLnN0YXR1c3x8cy5yZXNwb25zZVVSTCYmMD09PXMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoZil9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKHFlKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IocWUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIocWUodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHMpKSxzPW51bGx9LGFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBkPShlLndpdGhDcmVkZW50aWFsc3x8S2UobCkpJiZlLnhzcmZDb29raWVOYW1lP0JlLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2QmJihpW2UueHNyZkhlYWRlck5hbWVdPWQpfSJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmFlLmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaVt0XTpzLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxhZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChzLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxvJiYianNvbiIhPT1vJiYocy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmcy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7cyYmKHMuYWJvcnQoKSxyKGUpLHM9bnVsbCl9KSksbnx8KG49bnVsbCkscy5zZW5kKG4pfSkpfSxZZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFdlKGUsdCl7IWFlLmlzVW5kZWZpbmVkKGUpJiZhZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgSmUsemU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PUhlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSGUpKSYmKEplPUZlKSxKZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUodCwiQWNjZXB0IiksamUodCwiQ29udGVudC1UeXBlIiksYWUuaXNGb3JtRGF0YShlKXx8YWUuaXNBcnJheUJ1ZmZlcihlKXx8YWUuaXNCdWZmZXIoZSl8fGFlLmlzU3RyZWFtKGUpfHxhZS5pc0ZpbGUoZSl8fGFlLmlzQmxvYihlKT9lOmFlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOmFlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6YWUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKGFlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksYWUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZhZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgeGUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07emUuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPXt9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7emUuaGVhZGVyc1tlXT1hZS5tZXJnZShZZSl9KSk7dmFyIFZlPXplLCRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxWZTtyZXR1cm4gYWUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sR2U9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIFhlKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBaZT1mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPSRlLmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPWFlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksYWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxWZS5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gWGUoZSksdC5kYXRhPSRlLmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIEdlKHQpfHwoWGUoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT0kZS5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxRZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxpPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLG89WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0scz1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhZS5pc1BsYWluT2JqZWN0KGUpJiZhZS5pc1BsYWluT2JqZWN0KHQpP2FlLm1lcmdlKGUsdCk6YWUuaXNQbGFpbk9iamVjdCh0KT9hZS5tZXJnZSh7fSx0KTphZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEoZVtuXSx0W25dKX1hZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe2FlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1hKHZvaWQgMCx0W2VdKSl9KSksYWUuZm9yRWFjaChpLHUpLGFlLmZvckVhY2gobywoZnVuY3Rpb24obil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEodm9pZCAwLHRbbl0pfSkpLGFlLmZvckVhY2gocywoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09YShlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09YSh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KGkpLmNvbmNhdChvKS5jb25jYXQocyksaD1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIGFlLmZvckVhY2goaCx1KSxyfSxldD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9heGlvcy8tL2F4aW9zLTAuMjEuNC50Z3oiLF9pbnRlZ3JpdHk6InNoYTUxMi11dDV2ZXdraXU4ampHQmRxcE00NFh4anVDanE5TEFLZUhWbW9WZkhWenk4ZUhneHhxOFNiQVZRTm92REE4bVZpMDVrUDBFYS9uL1V6Y1NIY1RKUWZOZz09IixfZnJvbToiYXhpb3NAMC4yMS40In0sdHQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3R0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgcnQ9e30sbnQ9ZXQudmVyc2lvbi5zcGxpdCgiLiIpO2Z1bmN0aW9uIGl0KGUsdCl7Zm9yKHZhciByPXQ/dC5zcGxpdCgiLiIpOm50LG49ZS5zcGxpdCgiLiIpLGk9MDtpPDM7aSsrKXtpZihyW2ldPm5baV0pcmV0dXJuITA7aWYocltpXTxuW2ldKXJldHVybiExfXJldHVybiExfXR0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7dmFyIG49dCYmaXQodCk7ZnVuY3Rpb24gaShlLHQpe3JldHVybiJbQXhpb3MgdiIrZXQudmVyc2lvbisiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixvLHMpe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IoaShvLCIgaGFzIGJlZW4gcmVtb3ZlZCBpbiAiK3QpKTtyZXR1cm4gbiYmIXJ0W29dJiYocnRbb109ITAsY29uc29sZS53YXJuKGkobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLG8scyl9fTt2YXIgb3Q9e2lzT2xkZXJWZXJzaW9uOml0LGFzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSx1PXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09dSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK3UpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczp0dH0sc3Q9b3QudmFsaWRhdG9ycztmdW5jdGlvbiBhdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGxlLHJlc3BvbnNlOm5ldyBsZX19YXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlPyhlPWFyZ3VtZW50c1sxXXx8e30pLnVybD1hcmd1bWVudHNbMF06ZT1lfHx7fSwoZT1RZSh0aGlzLmRlZmF1bHRzLGUpKS5tZXRob2Q/ZS5tZXRob2Q9ZS5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD9lLm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOmUubWV0aG9kPSJnZXQiO3ZhciB0PWUudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PXQmJm90LmFzc2VydE9wdGlvbnModCx7c2lsZW50SlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksZm9yY2VkSlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksY2xhcmlmeVRpbWVvdXRFcnJvcjpzdC50cmFuc2l0aW9uYWwoc3QuYm9vbGVhbiwiMS4wLjAiKX0sITEpO3ZhciByPVtdLG49ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdC5ydW5XaGVuJiYhMT09PXQucnVuV2hlbihlKXx8KG49biYmdC5zeW5jaHJvbm91cyxyLnVuc2hpZnQodC5mdWxmaWxsZWQsdC5yZWplY3RlZCkpfSkpO3ZhciBpLG89W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFuKXt2YXIgcz1bWmUsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkocyxyKSxzPXMuY29uY2F0KG8pLGk9UHJvbWlzZS5yZXNvbHZlKGUpO3MubGVuZ3RoOylpPWkudGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gaX1mb3IodmFyIGE9ZTtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxjPXIuc2hpZnQoKTt0cnl7YT11KGEpfWNhdGNoKGUpe2MoZSk7YnJlYWt9fXRyeXtpPVplKGEpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO28ubGVuZ3RoOylpPWkudGhlbihvLnNoaWZ0KCksby5zaGlmdCgpKTtyZXR1cm4gaX0sYXQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1RZSh0aGlzLmRlZmF1bHRzLGUpLGNlKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LGFlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFFlKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KSksYWUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoUWUobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6cn0pKX19KSk7dmFyIHV0PWF0O2Z1bmN0aW9uIGN0KGUpe3RoaXMubWVzc2FnZT1lfWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDYW5jZWwiKyh0aGlzLm1lc3NhZ2U/IjogIit0aGlzLm1lc3NhZ2U6IiIpfSxjdC5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgaHQ9Y3Q7ZnVuY3Rpb24gbHQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7ZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgaHQoZSksdChyLnJlYXNvbikpfSkpfWx0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGx0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IGx0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgZnQ9bHQ7ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9bmV3IHV0KGUpLHI9USh1dC5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gYWUuZXh0ZW5kKHIsdXQucHJvdG90eXBlLHQpLGFlLmV4dGVuZChyLHQpLHJ9dmFyIHB0PWR0KFZlKTtwdC5BeGlvcz11dCxwdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGR0KFFlKHB0LmRlZmF1bHRzLGUpKX0scHQuQ2FuY2VsPWh0LHB0LkNhbmNlbFRva2VuPWZ0LHB0LmlzQ2FuY2VsPUdlLHB0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LHB0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LHB0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJiEwPT09ZS5pc0F4aW9zRXJyb3J9O3ZhciBndD1wdCx2dD1wdDtndC5kZWZhdWx0PXZ0O3ZhciB5dCxtdCx3dD1ndDsKLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiBidChlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0obXQ9eXR8fCh5dD17fSkpLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLG10LnF1ZXJ5PSJxdWVyeSI7dmFyIF90OyFmdW5jdGlvbihlKXtlLkNvbmZpZ0RhdGE9ImNvbmZpZ19kYXRhIixlLk9JRENQcm92aWRlck1ldGFEYXRhPSJvaWRjX3Byb3ZpZGVyX21ldGFfZGF0YSIsZS5TZXNzaW9uRGF0YT0ic2Vzc2lvbl9kYXRhIixlLlRlbXBvcmFyeURhdGE9InRlbXBvcmFyeV9kYXRhIn0oX3R8fChfdD17fSkpO2NvbnN0IGt0PSJyZWZyZXNoX3Rva2VuX3RpbWVyIjtjbGFzcyBTdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxyLG4saSxvKXtzdXBlcihudWxsIT1uP246bnVsbD09bz92b2lkIDA6by5tZXNzYWdlKSx0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuY29kZT1lLHRoaXMuZmlsZT10LHRoaXMubWV0aG9kPXIsdGhpcy5kZXNjcmlwdGlvbj1pLHRoaXMuZXJyb3I9byxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIEV0IGV4dGVuZHMgU3R7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8scyxhLHUpe3N1cGVyKGUsdCxyLG4saSksdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLmNvZGU9ZSx0aGlzLmZpbGU9dCx0aGlzLm1ldGhvZD1yLHRoaXMuZGVzY3JpcHRpb249aSx0aGlzLm5ldHdvcmtFcnJvckNvZGU9byx0aGlzLm5ldHdvcmtFcnJvck1lc3NhZ2U9cyx0aGlzLnN0YXR1cz1hLHRoaXMubmV0d29ya0Vycm9yRGF0YT11fX12YXIgVHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBBdChlLHQscil7cmV0dXJuIGUocj17cGF0aDp0LGV4cG9ydHM6e30scmVxdWlyZTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0obnVsbD09dCYmci5wYXRoKX19LHIuZXhwb3J0cyksci5leHBvcnRzfXZhciBSdD12b2lkIDAhPT10P3Q6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LEN0PVtdLFB0PVtdLER0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LE90PSExO2Z1bmN0aW9uIEl0KCl7T3Q9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KUN0W3RdPWVbdF0sUHRbZS5jaGFyQ29kZUF0KHQpXT10O1B0WyItIi5jaGFyQ29kZUF0KDApXT02MixQdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gVXQoZSx0LHIpe2Zvcih2YXIgbixpLG89W10scz10O3M8cjtzKz0zKW49KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKEN0WyhpPW4pPj4xOCY2M10rQ3RbaT4+MTImNjNdK0N0W2k+PjYmNjNdK0N0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBNdChlKXt2YXIgdDtPdHx8SXQoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLHU9ci1uO2E8dTthKz1zKW8ucHVzaChVdChlLGEsYStzPnU/dTphK3MpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLGkrPUN0W3Q+PjJdLGkrPUN0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saSs9Q3RbdD4+MTBdLGkrPUN0W3Q+PjQmNjNdLGkrPUN0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gTHQoZSx0LHIsbixpKXt2YXIgbyxzLGE9OCppLW4tMSx1PSgxPDxhKS0xLGM9dT4+MSxoPS03LGw9cj9pLTE6MCxmPXI/LTE6MSxkPWVbdCtsXTtmb3IobCs9ZixvPWQmKDE8PC1oKS0xLGQ+Pj0taCxoKz1hO2g+MDtvPTI1NipvK2VbdCtsXSxsKz1mLGgtPTgpO2ZvcihzPW8mKDE8PC1oKS0xLG8+Pj0taCxoKz1uO2g+MDtzPTI1NipzK2VbdCtsXSxsKz1mLGgtPTgpO2lmKDA9PT1vKW89MS1jO2Vsc2V7aWYobz09PXUpcmV0dXJuIHM/TmFOOjEvMCooZD8tMToxKTtzKz1NYXRoLnBvdygyLG4pLG8tPWN9cmV0dXJuKGQ/LTE6MSkqcypNYXRoLnBvdygyLG8tbil9ZnVuY3Rpb24gSHQoZSx0LHIsbixpLG8pe3ZhciBzLGEsdSxjPTgqby1pLTEsaD0oMTw8YyktMSxsPWg+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGQ9bj8wOm8tMSxwPW4/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1oKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLXMpKTwxJiYocy0tLHUqPTIpLCh0Kz1zK2w+PTE/Zi91OmYqTWF0aC5wb3coMiwxLWwpKSp1Pj0yJiYocysrLHUvPTIpLHMrbD49aD8oYT0wLHM9aCk6cytsPj0xPyhhPSh0KnUtMSkqTWF0aC5wb3coMixpKSxzKz1sKTooYT10Kk1hdGgucG93KDIsbC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtyK2RdPTI1NSZhLGQrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSxjKz1pO2M+MDtlW3IrZF09MjU1JnMsZCs9cCxzLz0yNTYsYy09OCk7ZVtyK2QtcF18PTEyOCpnfXZhciBqdD17fS50b1N0cmluZyx4dD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qdC5jYWxsKGUpfTtLdC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PVJ0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fFJ0LlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIHF0PUJ0KCk7ZnVuY3Rpb24gQnQoKXtyZXR1cm4gS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gTnQoZSx0KXtpZihCdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1LdC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgS3QodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gS3QoZSx0LHIpe2lmKCEoS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIEt0KSlyZXR1cm4gbmV3IEt0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIFd0KHRoaXMsZSl9cmV0dXJuIEZ0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIEZ0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPUt0LnByb3RvdHlwZTplPUp0KGUsdCksZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKSwhS3QuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfCR0KHQsciksaT0oZT1OdChlLG4pKS53cml0ZSh0LHIpO3JldHVybiBpIT09biYmKGU9ZS5zbGljZSgwLGkpKSxlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihWdCh0KSl7dmFyIHI9MHx6dCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1OdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/TnQoZSwwKTpKdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZ4dCh0LmRhdGEpKXJldHVybiBKdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFl0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gV3QoZSx0KXtpZihZdCh0KSxlPU50KGUsdDwwPzA6MHx6dCh0KSksIUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gSnQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHx6dCh0Lmxlbmd0aCk7ZT1OdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24genQoZSl7aWYoZT49QnQoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrQnQoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uICR0KGUsdCl7aWYoVnQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIF9yKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4ga3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gX3IoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gR3QoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gaHIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGFyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gdXIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIHNyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIFh0KGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gWnQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PUt0LmZyb20odCxuKSksVnQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpRdChlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTpRdChlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gUXQoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZXIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHRyKGUsdCxyLG4pe3JldHVybiBTcihfcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBycihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBucihlLHQscixuKXtyZXR1cm4gcnIoZSx0LHIsbil9ZnVuY3Rpb24gaXIoZSx0LHIsbil7cmV0dXJuIFNyKGtyKHQpLGUscixuKX1mdW5jdGlvbiBvcihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBzcihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/TXQoZSk6TXQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBhcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSx1LGM9ZVtpXSxoPW51bGwsbD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkrbDw9cilzd2l0Y2gobCl7Y2FzZSAxOmM8MTI4JiYoaD1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoaD11KTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGg9dSk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJnU8MTExNDExMiYmKGg9dSl9bnVsbD09PWg/KGg9NjU1MzMsbD0xKTpoPjY1NTM1JiYoaC09NjU1MzYsbi5wdXNoKGg+Pj4xMCYxMDIzfDU1Mjk2KSxoPTU2MzIwfDEwMjMmaCksbi5wdXNoKGgpLGkrPWx9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2Zvcih2YXIgcj0iIixuPTA7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1mdW5jdGlvbiB1cihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGNyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBocihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPWJyKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGxyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGk9IiIsbz0wO288bi5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10rMjU2Km5bbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZnIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGRyKGUsdCxyLG4saSxvKXtpZighVnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHByKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBncihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7aTxvOysraSllW3IraV09dD4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiB2cihlLHQscixuLGksbyl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHlyKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDQpLEh0KGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIG1yKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDgpLEh0KGUsdCxyLG4sNTIsOCkscis4fUt0LnBvb2xTaXplPTgxOTIsS3QuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPUt0LnByb3RvdHlwZSxlfSxLdC5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRnQobnVsbCxlLHQscil9LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihLdC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLEt0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxLdC5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBZdCh0KSx0PD0wP050KGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/TnQoZSx0KS5maWxsKHIsbik6TnQoZSx0KS5maWxsKHIpOk50KGUsdCl9KG51bGwsZSx0LHIpfSxLdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gV3QobnVsbCxlKX0sS3QuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBXdChudWxsLGUpfSxLdC5pc0J1ZmZlcj1FcixLdC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIVZ0KGUpfHwhVnQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LEt0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEt0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCF4dChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBLdC5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPUt0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFWdChvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4saSksaSs9by5sZW5ndGh9cmV0dXJuIG59LEt0LmJ5dGVMZW5ndGg9JHQsS3QucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxLdC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKVh0KHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxLdC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KVh0KHRoaXMsdCx0KzMpLFh0KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpWHQodGhpcyx0LHQrNyksWHQodGhpcyx0KzEsdCs2KSxYdCh0aGlzLHQrMix0KzUpLFh0KHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2FyKHRoaXMsMCxlKTpHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEt0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1LdC5jb21wYXJlKHRoaXMsZSl9LEt0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LEt0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49aSYmdD49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLHU9dGhpcy5zbGljZShuLGkpLGM9ZS5zbGljZSh0LHIpLGg9MDtoPGE7KytoKWlmKHVbaF0hPT1jW2hdKXtvPXVbaF0scz1jW2hdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sS3QucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LEt0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gWnQodGhpcyxlLHQsciwhMCl9LEt0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFp0KHRoaXMsZSx0LHIsITEpfSxLdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgdCluPXQscj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksZS5sZW5ndGg+MCYmKHI8MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIGVyKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHRyKHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBycih0aGlzLGUsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBucih0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGlyKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gb3IodGhpcyxlLHQscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxvPSEwfX0sS3QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX0sS3QucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189S3QucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IEt0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSxLdC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sS3QucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxLdC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LEt0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxLdC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sS3QucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sS3QucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LEt0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxLdC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LEt0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sS3QucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksTHQodGhpcyxlLCEwLDIzLDQpfSxLdC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsMjMsNCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITAsNTIsOCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsNTIsOCl9LEt0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtlPStlLHR8PTAscnw9MCxufHxkcih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sS3QucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fGRyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDEsMjU1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpwcih0aGlzLGUsdCwhMCksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxLdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz1yLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMSwxMjcsLTEyOCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sS3QucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOnByKHRoaXMsZSx0LCEwKSx0KzJ9LEt0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4geXIodGhpcyxlLHQsITAscil9LEt0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB5cih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMCxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK28pLHQpO3JldHVybiBvfSxLdC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhS3QuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9VnQoZSk/ZTpfcihuZXcgS3QoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB3cj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBicihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gX3IoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIGtyKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvLHM7T3R8fEl0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IER0KDMqYS80LW8pLG49bz4wP2EtNDphO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylpPVB0W2UuY2hhckNvZGVBdCh0KV08PDE4fFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8UHRbZS5jaGFyQ29kZUF0KHQrMildPDw2fFB0W2UuY2hhckNvZGVBdCh0KzMpXSxzW3UrK109aT4+MTYmMjU1LHNbdSsrXT1pPj44JjI1NSxzW3UrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPVB0W2UuY2hhckNvZGVBdCh0KV08PDJ8UHRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbdSsrXT0yNTUmaSk6MT09PW8mJihpPVB0W2UuY2hhckNvZGVBdCh0KV08PDEwfFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxQdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1t1KytdPWk+PjgmMjU1LHNbdSsrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZSh3ciwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gU3IoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxUcihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZUcihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gVHIoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgQXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOkt0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLEt0LmFsbG9jKCtlKX0saXNCdWZmZXI6RXIsa01heExlbmd0aDpxdH0pLFJyPUF0KChmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10JTQ7aWYoIXIpcmV0dXJuIGU7dmFyIG49dCxpPTQtcixvPXQraSxzPUt0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIsbisrKTtyZXR1cm4gcy50b1N0cmluZygpfX0pKSxDcj1BdCgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuaXNCdWZmZXIoZSk/aShlLnRvU3RyaW5nKCJiYXNlNjQiKSk6aShLdC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxSci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89cjtvLmVuY29kZT1yLG8uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuZnJvbShuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sby50b0Jhc2U2ND1uLG8uZnJvbUJhc2U2ND1pLG8udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIEt0LmZyb20obihlKSwiYmFzZTY0Iil9LHQuZGVmYXVsdD1vfSkpLFByPUF0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9Q3IuZGVmYXVsdCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9KSksRHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0oQXQoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsdSxjLGgsbCxmLGQscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sdT1yWzJdLGM9clszXSxoPXJbNF0sbD1yWzVdLGY9cls2XSxkPXJbN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1Jm5bdl0pPDwyNHwoMjU1Jm5bdisxXSk8PDE2fCgyNTUmblt2KzJdKTw8OHwyNTUmblt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKyhoJmxefmgmZil8MCkrKGQrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZ1XmEmdSl8MCxkPWYsZj1sLGw9aCxoPWMreXwwLGM9dSx1PWEsYT1zLHM9eSttfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPXUsclszXSs9YyxyWzRdKz1oLHJbNV0rPWwscls2XSs9ZixyWzddKz1kLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksYz1zKHQsZSksaD1uZXcgaShjKSxsPW5ldyBVaW50OEFycmF5KGguZGlnZXN0TGVuZ3RoKSxmPWwubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkobikscD0wO3A8bjtwKyspZj09PWwubGVuZ3RoJiYoYShsLGgscixvKSxmPTApLGRbcF09bFtmKytdO3JldHVybiBoLmNsZWFuKCksbC5maWxsKDApLG8uZmlsbCgwKSxkfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkocyksYz1uZXcgVWludDhBcnJheShzKSxoPW5ldyBVaW50OEFycmF5KG4pLGw9MDtsKnM8bjtsKyspe3ZhciBmPWwrMTthWzBdPWY+Pj4yNCYyNTUsYVsxXT1mPj4+MTYmMjU1LGFbMl09Zj4+PjgmMjU1LGFbM109Zj4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaChjKTtmb3IodmFyIGQ9MDtkPHM7ZCsrKXVbZF09Y1tkXTtmb3IoZD0yO2Q8PXI7ZCsrKXtvLnJlc2V0KCksby51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgcD0wO3A8cztwKyspdVtwXV49Y1twXX1mb3IoZD0wO2Q8cyYmbCpzK2Q8bjtkKyspaFtsKnMrZF09dVtkXX1mb3IobD0wO2w8cztsKyspdVtsXT1jW2xdPTA7Zm9yKGw9MDtsPDQ7bCsrKWFbbF09MDtyZXR1cm4gby5jbGVhbigpLGh9fShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfSkpKTtmdW5jdGlvbiBPcigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIElyKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVXI9T3IsTXI9SXI7ZnVuY3Rpb24gTHIoZSl7aWYoVXI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFVyPT09T3J8fCFVcikmJnNldFRpbWVvdXQpcmV0dXJuIFVyPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVXIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFVyLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBVci5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBSdC5zZXRUaW1lb3V0JiYoVXI9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIFJ0LmNsZWFyVGltZW91dCYmKE1yPWNsZWFyVGltZW91dCk7dmFyIEhyLGpyPVtdLHhyPSExLHFyPS0xO2Z1bmN0aW9uIEJyKCl7eHImJkhyJiYoeHI9ITEsSHIubGVuZ3RoP2pyPUhyLmNvbmNhdChqcik6cXI9LTEsanIubGVuZ3RoJiZOcigpKX1mdW5jdGlvbiBOcigpe2lmKCF4cil7dmFyIGU9THIoQnIpO3hyPSEwO2Zvcih2YXIgdD1qci5sZW5ndGg7dDspe2ZvcihIcj1qcixqcj1bXTsrK3FyPHQ7KUhyJiZIcltxcl0ucnVuKCk7cXI9LTEsdD1qci5sZW5ndGh9SHI9bnVsbCx4cj0hMSxmdW5jdGlvbihlKXtpZihNcj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChNcj09PUlyfHwhTXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIE1yPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e01yKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gTXIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBNci5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIEtyKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9S3IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBGcj1SdC5wZXJmb3JtYW5jZXx8e30sWXI9KEZyLm5vd3x8RnIubW96Tm93fHxGci5tc05vd3x8RnIub05vd3x8RnIud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07anIucHVzaChuZXcgS3IoZSx0KSksMSE9PWpyLmxlbmd0aHx8eHJ8fExyKE5yKX0pLFdyPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KEFyKSxKcj1BdCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1Xci5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9V3I6KG4oV3IsdCksdC5CdWZmZXI9aSksbihyLGkpLGkuZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxpLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBXci5TbG93QnVmZmVyKGUpfX0pKSx6cj1BdCgoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj1Kci5CdWZmZXIsbj1UdC5jcnlwdG98fFR0Lm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLGkpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBvPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIHM9MDtzPGU7cys9dCluLmdldFJhbmRvbVZhbHVlcyhvLnNsaWNlKHMscyt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhvKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9ZcigoZnVuY3Rpb24oKXtpKG51bGwsbyl9KSk6b306ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKTtjb25zdCBWcj1uZXcgVGV4dEVuY29kZXIsJHI9bmV3IFRleHREZWNvZGVyO3ZhciBHcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdzt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCIpfSgpO2NvbnN0IFhyPWU9PntsZXQgdD1lO3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9JHIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIiksbmV3IFVpbnQ4QXJyYXkoR3IuYXRvYih0KS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSl9O2NsYXNzIFpyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpfX1jbGFzcyBRciBleHRlbmRzIFpye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn19Y2xhc3MgZW4gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyB0biBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyBybiBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIG5uIGV4dGVuZHMgWnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn19Y2xhc3Mgc24gZXh0ZW5kcyBRcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQifX12YXIgYW49R3IuY3J5cHRvO2Z1bmN0aW9uIHVuKCl7aWYoIUdyLmlzU2VjdXJlQ29udGV4dCYmIUdyLmNyeXB0by5zdWJ0bGUpdGhyb3cgbmV3IFpyKCJXZWIgQ3J5cHRvZ3JhcGh5IEFQSSBpcyBhdmFpbGFibGUgb25seSBpbiBTZWN1cmUgQ29udGV4dHMuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJlX0NvbnRleHRzIil9Y29uc3QgY249YXN5bmMgZT0+e3ZhciB0LHI7Y29uc3R7YWxnb3JpdGhtOm4sa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LHI7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHRuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc3Vic3RyKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnN1YnN0cigtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTplLmNydn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKTtsZXQgbz0iandrIixzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCJQQktERjIiPT09bi5uYW1lJiYobz0icmF3IixzPVhyKGUuaykpLHVuKCksYW4uc3VidGxlLmltcG9ydEtleShvLHMsbixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0ocj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1yP3I6aSl9O2Z1bmN0aW9uIGhuKGUpe3JldHVybiEhZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1hc3luYyBmdW5jdGlvbiBsbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/Y24oey4uLmUsYWxnOnQsZXh0OiExfSk6WHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHRuKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIHVuc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBjbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX1jb25zdCBmbj1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDAhPT1uLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2Zvcihjb25zdCBpIG9mIHIuY3JpdCl7aWYoIXQuaGFzKGkpKXRocm93IG5ldyB0bihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7aX0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbmApO2lmKHZvaWQgMD09PW5baV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBpcyBtaXNzaW5nYCk7aWYodC5nZXQoaSkmJnZvaWQgMD09PXJbaV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfS5iaW5kKHZvaWQgMCxybixuZXcgTWFwKFtbImI2NCIsITBdXSkpLGRuPSgoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkuYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTthc3luYyBmdW5jdGlvbiBwbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBybigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgcm4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBybigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgcm4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhaG4oZS5oZWFkZXIpKXRocm93IG5ldyBybigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBuPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVhyKGUucHJvdGVjdGVkKTtuPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkobixlLmhlYWRlcikpdGhyb3cgbmV3IHJuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3QgaT17Li4ubiwuLi5lLmhlYWRlcn07bGV0IG89ITA7aWYoZm4obixpKS5oYXMoImI2NCIpJiYobz1uLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBvKSl0aHJvdyBuZXcgcm4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOnN9PWk7aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhcyl0aHJvdyBuZXcgcm4oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IGE9ciYmZG4oci5hbGdvcml0aG1zKTtpZihhJiYhYS5oYXMocykpdGhyb3cgbmV3IGVuKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYobyl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgcm4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KG4sZSkpLCgoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fGUubWF0Y2goL15BXGR7M30oPzpHQ00pS1ckLykpe2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwic2VjcmV0Ij09PXQudHlwZSlyZXR1cm47dGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpfWlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBvciBLZXlPYmplY3QgaW5zdGFuY2VzIG11c3QgYmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIik7aWYoInNlY3JldCI9PT10LnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9KShzLHQpO2NvbnN0IHU9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KFZyLmVuY29kZShlLnByb3RlY3RlZHx8IiIpLFZyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1ZyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksYz1YcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0KGFzeW5jKGUsdCxyLG4pPT57bGV0IGk7aWYodW4oKSx0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzeW1tZXRyaWMga2V5cyBhcmUgb25seSBhcHBsaWNhYmxlIGZvciBITUFDLWJhc2VkIGFsZ29yaXRobXMiKTtpPWF3YWl0IGFuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zdWJzdHIoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFsidmVyaWZ5Il0pfWVsc2UgaT10O3JldHVybigoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7Y29uc3Qgcj1wYXJzZUludChlLnN1YnN0cigtMyksMTApLHtsZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPHIpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBzeW1tZXRyaWMga2V5cyB0byBiZSAke3J9IGJpdHMgb3IgbGFyZ2VyYCl9aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKSxhbi5zdWJ0bGUudmVyaWZ5KGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkhTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiSE1BQyJ9O2Nhc2UiSFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJITUFDIn07Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDozMn07Y2FzZSJQUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6NDh9O2Nhc2UiUFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjY0fTtjYXNlIlJTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In07Y2FzZSJFUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9O2Nhc2UiRVM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifTtkZWZhdWx0OnRocm93IG5ldyB0bihgYWxnICR7ZX0gaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUpLGkscixuKX0pKHMsdCxjLHUpKXRocm93IG5ldyBvbjtsZXQgaDtoPW8/WHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Wci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgbD17cGF5bG9hZDpofTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihsLnByb3RlY3RlZEhlYWRlcj1uKSx2b2lkIDAhPT1lLmhlYWRlciYmKGwudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGx9Y29uc3QgZ249L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIHZuPWU9Pntjb25zdCB0PWduLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKDg2NDAwKnIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IHluPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBtbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fHluKGUudHlwKSE9PXluKG4pKSl0aHJvdyBuZXcgUXIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPXR5cGVvZiBpfHwhaXx8QXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgbm4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKCJzdHJpbmciPT10eXBlb2Ygbz9bb106bykuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBRcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mKHU9aS5hdWQpP2MuaW5jbHVkZXModSk6Yy5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldCh1KSkpKSkpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIHUsYztsZXQgaDtzd2l0Y2godHlwZW9mIHIuY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpoPXZuKHIuY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpoPXIuY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmg9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpsfT1yLGY9KGQ9bHx8bmV3IERhdGUsTWF0aC5mbG9vcihkLmdldFRpbWUoKS8xZTMpKTt2YXIgZDtpZih2b2lkIDAhPT1pLmlhdHx8ci5tYXhUb2tlbkFnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwPT09aS5leHAmJmkuaWF0PmYraCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgUXIoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+ZitoKXRocm93IG5ldyBRcignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBRcignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9Zi1oKXRocm93IG5ldyBzbignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKHIubWF4VG9rZW5BZ2Upe2NvbnN0IGU9Zi1pLmlhdDtpZihlLWg+KCJudW1iZXIiPT10eXBlb2Ygci5tYXhUb2tlbkFnZT9yLm1heFRva2VuQWdlOnZuKHIubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgc24oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWgpdGhyb3cgbmV3IFFyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2NsYXNzIHdue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBiYXNlNjRVUkxFbmNvZGUoZSl7cmV0dXJuIFByLmVuY29kZShlKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0vZywiIil9c3RhdGljIGdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZSh6cigzMikpfXN0YXRpYyBnZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShuZXcgZyhEcigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKSl9c3RhdGljIGdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKXtyZXR1cm5bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il19c3RhdGljIGdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UoUHIuZGVjb2RlKGUsInV0ZjgiKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihyLmtpZD09PWUua2lkKXJldHVybiBsbih7YWxnOmUuYWxnLGU6ZS5lLGt0eTplLmt0eSxuOmUubn0pO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkNSWVBUT19VVElMLUdURlRJVC1JVjAxIiwiY3J5cHRvLXV0aWxzIiwiZ2V0SldLRm9yVGhlSWRUb2tlbiIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK3Iua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKSl9c3RhdGljIGlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxvKXtyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT0kci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgcm4oIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6biwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IHJuKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBwbih7cGF5bG9hZDppfHx2b2lkIDAscHJvdGVjdGVkOm58fHZvaWQgMCxzaWduYXR1cmU6b3x8dm9pZCAwfSx0LHIpO3JldHVybntwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9fShlLHQscik7cmV0dXJue3BheWxvYWQ6bW4obi5wcm90ZWN0ZWRIZWFkZXIsbi5wYXlsb2FkLHIpLHByb3RlY3RlZEhlYWRlcjpuLnByb3RlY3RlZEhlYWRlcn19KGUsdCx7YWxnb3JpdGhtczp0aGlzLmdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKSxhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOm8saXNzdWVyOm4sc3ViamVjdDppfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJDUllQVE9fVVRJTC1JVklULUlWMDIiLCJjcnlwdG8tdXRpbHMiLCJpc1ZhbGlkSWRUb2tlbiIsIlZhbGlkYXRpbmcgSUQgdG9rZW4gZmFpbGVkIixlKSkpKX1zdGF0aWMgZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD1Qci5kZWNvZGUoZS5zcGxpdCgiLiIpWzFdLCJ1dGY4Iik7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFN0KCJDUllQVE9fVVRJTC1ESVQtSVYwMSIsImNyeXB0by11dGlscyIsImRlY29kZUlEVG9rZW4iLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGJue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQscixuO2NvbnN0IGk9d24uZGVjb2RlSURUb2tlbihlKSxvPXRoaXMuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKGkpLHM9dGhpcy5leHRyYWN0VXNlck5hbWUoaSksYT1udWxsIT09KHQ9aS5naXZlbl9uYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPWkuZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsYz1hJiZ1P2Ake2F9ICR7dX1gOmF8fHV8fCIiLGg9bnVsbCE9PShuPWkucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09bj9uOmM7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOm8sdXNlcm5hbWU6c30sdGhpcy5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoaSkpfXN0YXRpYyBmaWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO251bGw9PXR8fGRlbGV0ZSB0LmlzcyxudWxsPT10fHxkZWxldGUgdC5zdWIsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IHI9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCBuPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtyW25dPXR9KSkscn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX19Ym4uZXh0cmFjdFVzZXJOYW1lPShlLHQ9IkAiKT0+e2NvbnN0IHI9ZS5zdWIuc3BsaXQodCk7cmV0dXJuIHIubGVuZ3RoPjImJnIucG9wKCksci5qb2luKHQpfSxibi5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9KGUsdD0iQCIpPT57Y29uc3Qgcj1lLnN1Yi5zcGxpdCh0KTtyZXR1cm4gci5sZW5ndGg+Mj9yW3IubGVuZ3RoLTFdOiIifTtjbGFzcyBfbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfXJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIGUud2VsbEtub3duRW5kcG9pbnQ/ZS5zZXJ2ZXJPcmlnaW4rZS53ZWxsS25vd25FbmRwb2ludDplLnNlcnZlck9yaWdpbisiL29hdXRoMi90b2tlbi8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiJ9KSl9cmVzb2x2ZUVuZHBvaW50cyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIHIub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWcmJnIuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhyLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W25dPShudWxsPT1yP3ZvaWQgMDpyLmVuZHBvaW50cyk/ci5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IHI9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvYXV0aG9yaXplIixlbmRfc2Vzc2lvbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29pZGMvbG9nb3V0Iixqd2tzX3VyaTp0LnNlcnZlck9yaWdpbisiL29hdXRoMi9qd2tzIixjaGVja19zZXNzaW9uX2lmcmFtZTp0LnNlcnZlck9yaWdpbisiL29pZGMvY2hlY2tzZXNzaW9uIixyZXZvY2F0aW9uX2VuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Jldm9rZSIsdG9rZW5fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvdG9rZW4ifTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHIpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gdCYmMCE9PXQudHJpbSgpLmxlbmd0aD93dC5nZXQodCx7d2l0aENyZWRlbnRpYWxzOm51bGw9PXI/dm9pZCAwOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT10LnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1WSVQtTlIwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgcmV0dXJuZWQgIit0LnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLG49KHlpZWxkIHRoaXMucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCkpLnNwbGl0KCIvLndlbGwta25vd24iKVswXTtyZXR1cm4gciYmcj09PW4/d24uZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sdC5kYXRhLmtleXMpLnRoZW4oKHQ9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHduLmlzVmFsaWRJZFRva2VuKGUsdCwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELHIsd24uZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSkudGhlbigoZT0+ZSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLVZJVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIix2b2lkIDAsdm9pZCAwLGUpKSkpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULUVTMDQiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSk6UHJvbWlzZS5yZXNvbHZlKCExKX0pKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfSEVMUEVSLVZJVC1OUjA1IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULU5GMDEiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpfSkpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlKXt2YXIgdDtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcj0ib3BlbmlkIjtjb25zdCBuPXlpZWxkIHRoaXMuX2NvbmZpZygpLGk9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7cmV0dXJuIG4uc2NvcGUmJm4uc2NvcGUubGVuZ3RoPjAmJihuLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8bi5zY29wZS5wdXNoKCJvcGVuaWQiKSxyPW4uc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsaS5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsYm4uZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGkuaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHIpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsbi5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PSh0PW4uY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09dD90OiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKCl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1IVFItTlIwMSIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgdG9rZW4gcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7aWYoKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKGUuZGF0YS5pZF90b2tlbikudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKTtjb25zdCB0PXthY2Nlc3NUb2tlbjplLmRhdGEuYWNjZXNzX3Rva2VuLGV4cGlyZXNJbjplLmRhdGEuZXhwaXJlc19pbixpZFRva2VuOmUuZGF0YS5pZF90b2tlbixyZWZyZXNoVG9rZW46ZS5kYXRhLnJlZnJlc2hfdG9rZW4sc2NvcGU6ZS5kYXRhLnNjb3BlLHRva2VuVHlwZTplLmRhdGEudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1IVFItSVYwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJUaGUgaWQgdG9rZW4gcmV0dXJuZWQgaXMgbm90IHZhbGlkLiIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBoYXMgZmFpbGVkIHRoZSB2YWxpZGF0aW9uIGNoZWNrLiIpKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLUhBVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsdm9pZCAwLHZvaWQgMCxlKSkpKTt7Y29uc3QgdD17YWNjZXNzVG9rZW46ZS5kYXRhLmFjY2Vzc190b2tlbixleHBpcmVzSW46ZS5kYXRhLmV4cGlyZXNfaW4saWRUb2tlbjplLmRhdGEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmUuZGF0YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmUuZGF0YS5zY29wZSx0b2tlblR5cGU6ZS5kYXRhLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKSxQcm9taXNlLnJlc29sdmUodCl9fSkpfX1jbGFzcyBrbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgX24oZSksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgU3QoIkFVVEhfQ09SRS1HQVUtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRBdXRob3JpemF0aW9uVVJMIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPW5ldyBVUkwodCk7bi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZXNwb25zZV90eXBlIiwiY29kZSIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIixyLmNsaWVudElEKTtsZXQgaT0ib3BlbmlkIjtpZihyLnNjb3BlJiZyLnNjb3BlLmxlbmd0aD4wJiYoci5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHIuc2NvcGUucHVzaCgib3BlbmlkIiksaT1yLnNjb3BlLmpvaW4oIiAiKSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsaSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLHIuc2lnbkluUmVkaXJlY3RVUkwpLHIucmVzcG9uc2VNb2RlJiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLHIucmVzcG9uc2VNb2RlKSxyLmVuYWJsZVBLQ0Upe2NvbnN0IGU9d24uZ2V0Q29kZVZlcmlmaWVyKCksdD13bi5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiLGUpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLHQpfXIucHJvbXB0JiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInByb21wdCIsci5wcm9tcHQpO2NvbnN0IG89ZTtpZihvKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMobykpIiIhPWUmJiIiIT10JiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoZSx0LnRvU3RyaW5nKCkpO3JldHVybiBuLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighcnx8MD09PXIudHJpbSgpLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7dCYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCkpO2NvbnN0IGk9W107aS5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLG4uY2xpZW50U2VjcmV0JiZuLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaChgY2xpZW50X3NlY3JldD0ke24uY2xpZW50U2VjcmV0fWApO2NvbnN0IG89ZTtyZXR1cm4gaS5wdXNoKGBjb2RlPSR7b31gKSxpLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIiksaS5wdXNoKGByZWRpcmVjdF91cmk9JHtuLnNpZ25JblJlZGlyZWN0VVJMfWApLG4uZW5hYmxlUEtDRSYmKGkucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIikpLHd0LnBvc3QocixpLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDEtRVMwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXF1ZXN0QWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMS1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsIlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsdD15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKCFyLnJlZnJlc2hfdG9rZW4pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBUaGUgaWRlbnRpdHkgc2VydmVyIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3Qgbj1bXTtyZXR1cm4gbi5wdXNoKGBjbGllbnRfaWQ9JHt0LmNsaWVudElEfWApLG4ucHVzaChgcmVmcmVzaF90b2tlbj0ke3IucmVmcmVzaF90b2tlbn1gKSxuLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHQuY2xpZW50U2VjcmV0JiZ0LmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJm4ucHVzaChgY2xpZW50X3NlY3JldD0ke3QuY2xpZW50U2VjcmV0fWApLHd0LnBvc3QoZSxuLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMi1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTtjb25zdCByPVtdO3JldHVybiByLnB1c2goYGNsaWVudF9pZD0ke3QuY2xpZW50SUR9YCksci5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWApLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpLHd0LnBvc3QoZSxyLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+MjAwIT09ZS5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMy1OUjAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOih0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLFByb21pc2UucmVzb2x2ZShlKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMy1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBuO2lmKG49ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnQudG9rZW5fZW5kcG9pbnQsIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3QgaT17ZGF0YTooeWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSx0XSk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3ModCk7cmV0dXJuYCR7ZX09JHtyfWB9KSkpKSkpLmpvaW4oIiYiKSxoZWFkZXJzOk9iamVjdC5hc3NpZ24oe30sYm4uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QiLHVybDpuLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c307cmV0dXJuIGUuYXR0YWNoVG9rZW4mJihpLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWB9KSksd3QoaSkudGhlbigodD0+MjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUodCkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkNHLU5SMDQiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSx0PWJuLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT1lP3ZvaWQgMDplLmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3BlczplLnNjb3BlLHNlc3Npb25TdGF0ZTplLnNlc3Npb25fc3RhdGUsdXNlcm5hbWU6dC51c2VybmFtZX07cmV0dXJuIHQuZGlzcGxheU5hbWUmJiIiIT09dC5kaXNwbGF5TmFtZXx8ZGVsZXRlIHQuZGlzcGxheU5hbWUsdC50ZW5hbnREb21haW4mJiIiIT09dC50ZW5hbnREb21haW58fGRlbGV0ZSB0LnRlbmFudERvbWFpbixyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSx0KSxyfSkpfWdldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpLmlkX3Rva2VuO3JldHVybiB3bi5kZWNvZGVJRFRva2VuKGUpfSkpfWdldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpLmlkX3Rva2VufSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKCFlJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCk7Y29uc3QgdD15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKTtyZXR1cm4gd3QuZ2V0KHQpLnRoZW4oKGU9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIDIwMCE9PWUuc3RhdHVzP1Byb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLUdPUE0tTlIwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRPSURDUHJvdmlkZXJNZXRhRGF0YSIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgdG8gZ2V0IHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCAiK2Uuc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKTooeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHMoZS5kYXRhKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoITApKX0pKSkpLmNhdGNoKCgoKT0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSghMCl9KSkpKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50OmUuYXV0aG9yaXphdGlvbl9lbmRwb2ludCxjaGVja1Nlc3Npb25JZnJhbWU6ZS5jaGVja19zZXNzaW9uX2lmcmFtZSxlbmRTZXNzaW9uRW5kcG9pbnQ6ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludCxpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6ZS5pbnRyb3NwZWN0aW9uX2VuZHBvaW50LGlzc3VlcjplLmlzc3Vlcixqd2tzVXJpOmUuandrc191cmkscmVnaXN0cmF0aW9uRW5kcG9pbnQ6ZS5yZWdpc3RyYXRpb25fZW5kcG9pbnQscmV2b2NhdGlvbkVuZHBvaW50OmUucmV2b2NhdGlvbl9lbmRwb2ludCx0b2tlbkVuZHBvaW50OmUudG9rZW5fZW5kcG9pbnQsdXNlcmluZm9FbmRwb2ludDplLnVzZXJpbmZvX2VuZHBvaW50LHdlbGxLbm93bkVuZHBvaW50OnlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpfX0pKX1nZXRTaWduT3V0VVJMKCl7dmFyIGUsdCxyO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49bnVsbD09PShlPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmVuZF9zZXNzaW9uX2VuZHBvaW50LGk9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IFN0KCJBVVRIX0NPUkUtR1NPVS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgbz1udWxsPT09KHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmlkX3Rva2VuO2lmKCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdTT1UtTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiSUQgdG9rZW4gbm90IGZvdW5kLiIsIk5vIElEIHRva2VuIGNvdWxkIGJlIGZvdW5kLiBFaXRoZXIgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24gaXMgbG9zdCBvciB5b3UgaGF2ZSBub3Qgc2lnbmVkIGluLiIpO2NvbnN0IHM9bnVsbCE9PShyPW51bGw9PWk/dm9pZCAwOmkuc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09cj9yOm51bGw9PWk/dm9pZCAwOmkuc2lnbkluUmVkaXJlY3RVUkw7aWYoIXN8fDA9PT1zLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IFN0KCJBVVRIX0NPUkUtR1NPVS1ORjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtyZXR1cm5gJHtufT9pZF90b2tlbl9oaW50PSR7b30mcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPSR7c30mc3RhdGU9c2lnbl9vdXRfc3VjY2Vzc2B9KSl9c2lnbk91dCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5nZXRTaWduT3V0VVJMKCk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKCksZX0pKX1nZXRBY2Nlc3NUb2tlbigpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmFjY2Vzc190b2tlbn0pKX1pc0F1dGhlbnRpY2F0ZWQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gQm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpfSkpfWdldFBLQ0VDb2RlKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKX0pKX1zZXRQS0NFQ29kZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIsZSl9KSl9dXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLGUub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWc/KG51bGw9PWU/dm9pZCAwOmUuZW5kcG9pbnRzKSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHt9KSkpOihudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKSl9KSl9fWNsYXNzIFNue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSx0KXt2YXIgcjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT1uJiZKU09OLnBhcnNlKG4pLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHQpLHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfXNldFZhbHVlKGUsdCxyKXt2YXIgbjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPW51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09bj9uOm51bGwsbz1pJiZKU09OLnBhcnNlKGkpLHM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtbdF06cn0pLGE9SlNPTi5zdHJpbmdpZnkocyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLGEpfSkpfXJlbW92ZVZhbHVlKGUsdCl7dmFyIHI7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9biYmSlNPTi5wYXJzZShuKSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bdF07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSl7cmV0dXJuYCR7ZX0tJHt0aGlzLl9pZH1gfXNldENvbmZpZ0RhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpLGUpfSkpfWdldENvbmZpZ0RhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRUZW1wb3JhcnlEYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0U2Vzc2lvbkRhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSkpfSkpfWdldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1zZXRDb25maWdEYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUsdCl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUsdCl9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSxlLHQpfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlLHQpfSkpfXJlbW92ZUNvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlKX0pKX19Y29uc3QgRW49e2NsaWVudEhvc3Q6b3JpZ2luLGNsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTp5dC5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITB9O2NsYXNzIFRuewovKioKICAgICAgICAgKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSAuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0b3JlfSBzdG9yZSAtIFRoZSBzdG9yZSBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CiAgICAgICAgICogY29uc3QgYXV0aCA9IG5ldyBBc2dhcmRlb0F1dGhDbGllbnQ8Q3VzdG9tQ2xpZW50Q29uZmlnPihfc3RvcmUpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2NvbnN0cnVjdG9yCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovCmNvbnN0cnVjdG9yKGUpe1RuLl9pbnN0YW5jZUlEP1RuLl9pbnN0YW5jZUlEKz0xOlRuLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBTbihgaW5zdGFuY2VfJHtUbi5faW5zdGFuY2VJRH1gLGUpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcga24odGhpcy5fZGF0YUxheWVyKQovKioKICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBTREsgd2l0aCB0aGUgY29uZmlnIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0F1dGhDbGllbnRDb25maWc8VD59IGNvbmZpZyAtIFRoZSBjb25maWcgb2JqZWN0IHRvIGluaXRpYWxpemUgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxFbiksZSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RBY2Nlc3NUb2tlbihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QXhpb3NSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGN1c3RvbS1ncmFudCByZXF1ZXN0IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlCiAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtDdXN0b21HcmFudENvbmZpZ30gY29uZmlnIC0gQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBncmFudCBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAqIG9uIHlvdXIgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgKiAgIGRhdGE6IHsKICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAogICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICogICAgICAgc2NvcGU6ICJ7e3Njb3BlfX0iLAogICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKICAgICAgICAgKiAgIH0sCiAgICAgICAgICogICBpZDogImFjY291bnQtc3dpdGNoIiwKICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAogICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICogICBzaWduSW5SZXF1aXJlZDogdHJ1ZQogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF1dGgucmVxdWVzdEN1c3RvbUdyYW50KGNvbmZpZykudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2lzQXV0aGVudGljYXRlZCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuaXNBdXRoZW50aWNhdGVkKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNsYXNzIEFuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8pe3N1cGVyKG51bGwhPW4/bjpudWxsPT1vP3ZvaWQgMDpvLm1lc3NhZ2UpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5jb2RlPWUsdGhpcy5maWxlPXQsdGhpcy5tZXRob2Q9cix0aGlzLmVycm9yPW8sdGhpcy5kZXNjcmlwdGlvbj1pLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgUm57Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZih0LnJlZnJlc2hfdG9rZW4pe2NvbnN0IHI9cGFyc2VJbnQodC5leHBpcmVzX2luKSxuPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QsSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSl7Y29uc3QgZT1KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSk7Y2xlYXJUaW1lb3V0KGUpfX0pKX19Y29uc3QgQ249ImluaXQiO3ZhciBQbixEbixPbjshZnVuY3Rpb24oZSl7ZS5Mb2NhbFN0b3JhZ2U9ImxvY2FsU3RvcmFnZSIsZS5TZXNzaW9uU3RvcmFnZT0ic2Vzc2lvblN0b3JhZ2UiLGUuV2ViV29ya2VyPSJ3ZWJXb3JrZXIiLGUuQnJvd3Nlck1lbW9yeT0iYnJvd3Nlck1lbW9yeSJ9KFBufHwoUG49e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50In0oRG58fChEbj17fSkpO2NsYXNzIElue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWxldCBVbj1Pbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT13dC5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBPbiksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9d3QuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9d3Quc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLE9uLmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKHQpLHR9KSl9ZXJyb3JIYW5kbGVyKGUpe3Rocm93IE9uLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfXN1Y2Nlc3NIYW5kbGVyKGUpe3JldHVybiBPbi5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1pbml0KHQ9ITAscil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPbi5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1yfSkpfWVuYWJsZUhhbmRsZXIoKXtPbi5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7T24uaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KGU9T24uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVCl7T24uaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e09uLmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07VW4uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsVW49T249ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PW4/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixuKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxyLHMpOmkodCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30oW2U9Pnt9XSxVbik7Y2xhc3MgTW57Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxyKX0pKX1nZXREYXRhKHQpe3ZhciByLG47cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0ocj10aGlzLl9kYXRhKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXQodCkpJiZ2b2lkIDAhPT1uP246Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fWNvbnN0IExuPXNlbGY7bGV0IEhuO0xuLm9ubWVzc2FnZT0oe2RhdGE6dCxwb3J0czpyfSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbztjb25zdCBzPXJbMF07aWYodC50eXBlPT09Q258fEhuKXN3aXRjaCh0LnR5cGUpe2Nhc2UgQ246dHJ5e2NvbnN0IHI9T2JqZWN0LmFzc2lnbih7fSx0LmRhdGEpO0huPXlpZWxkKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IE1uLG49bmV3IFRuKHIpO3lpZWxkIG4uaW5pdGlhbGl6ZSh0KTtjb25zdCBpPW5ldyBSbihuKSxvPW4uZ2V0RGF0YUxheWVyKCkscz1Vbi5nZXRJbnN0YW5jZSgpO3JldHVybihudWxsPT1zP3ZvaWQgMDpzLmluaXQpJiYoeWllbGQgcy5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCkuYXR0YWNoVG9rZW4mJih0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIG4uZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpKSkpLHtkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntzLmRpc2FibGVIYW5kbGVyJiZzLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57cy5lbmFibGVIYW5kbGVyJiZzLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9Pm4uZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnlpZWxkIG4uZ2V0UEtDRUNvZGUoKX19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgbi5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixpO2xldCBhPSExO2NvbnN0IHU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IG4gb2ZbLi4ubnVsbCE9PShyPW51bGw9PT0oZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cj9yOltdLG51bGw9PXU/dm9pZCAwOnUuc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGk9bnVsbD09dD92b2lkIDA6dC51cmwpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN0YXJ0c1dpdGgobikpe2E9ITA7YnJlYWt9cmV0dXJuIGE/cy5yZXF1ZXN0KHQpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT57dmFyIHI7cmV0dXJuIDQwMT09PShudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzKT9uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT5zLnJlcXVlc3QodCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUi1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIiIsIiIsZSkpKSk6UHJvbWlzZS5yZWplY3QoZSl9KSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUi1JVjAyIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGh0dHBSZXF1ZXN0QWxsOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHIsaTtsZXQgYT0hMDtjb25zdCB1PXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBuIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBzIG9mWy4uLm51bGwhPT0ocj1udWxsPT09KGU9eWllbGQgby5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PXI/cjpbXSxudWxsPT11P3ZvaWQgMDp1LnNlcnZlck9yaWdpbl0paWYobnVsbD09PShpPW4udXJsKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdGFydHNXaXRoKHMpKXt0PSEwO2JyZWFrfWlmKCF0KXthPSExO2JyZWFrfX1jb25zdCBjPVtdO3JldHVybiBhPyh0LmZvckVhY2goKGU9PntjLnB1c2gocy5yZXF1ZXN0KGUpKX0pKSwobnVsbD09cz92b2lkIDA6cy5hbGwpJiZzLmFsbChjKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+e3ZhciB0O3JldHVybiA0MDE9PT0obnVsbD09PSh0PW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnN0YXR1cyk/bi5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+cy5hbGwmJnMuYWxsKGMpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBbigiV09SS0VSX0NPUkUtSFJBLUVTMDEiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0QWxsIiwiIiwiIixlKSkpKTpQcm9taXNlLnJlamVjdChlKX0pKSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUkEtSVYwMiIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3QiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxpc0F1dGhlbnRpY2F0ZWQ6KCk9Pm4uaXNBdXRoZW50aWNhdGVkKCkscmVmcmVzaEFjY2Vzc1Rva2VuOigpPT5uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkscmVxdWVzdEFjY2Vzc1Rva2VuOih0LHIscyk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7cmV0dXJuIHMmJmUuZW5hYmxlUEtDRSYmKHlpZWxkIG4uc2V0UEtDRUNvZGUocykpLHQ/bi5yZXF1ZXN0QWNjZXNzVG9rZW4odCxudWxsIT1yP3I6IiIpLnRoZW4oKCgpPT4oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1SQVQxLU5GMDEiLCJ3b3JrZXItY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKX0pKSxyZXF1ZXN0Q3VzdG9tR3JhbnQ6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHIscyxhO2xldCB1PSEwLGM9ITE7Y29uc3QgaD15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtpZihudWxsPT10P3ZvaWQgMDp0LnRva2VuRW5kcG9pbnQpe3U9ITE7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShzPW51bGw9PT0ocj15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cz9zOltdLG51bGw9PWg/dm9pZCAwOmguc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGE9dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09YT92b2lkIDA6YS5zdGFydHNXaXRoKGUpKXtjPSEwO2JyZWFrfX1yZXR1cm4gdXx8Yz9uLnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdC5yZXR1cm5zU2Vzc2lvbj8oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpOnJ9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLVJDRy1JVjAxIiwid29ya2VyLWNvcmUiLCJyZXF1ZXN0Q3VzdG9tR3JhbnQiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+bi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4oaS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxQcm9taXNlLnJlc29sdmUoITApKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpLHNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s6ZT0+eyhudWxsPT1zP3ZvaWQgMDpzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LHNldFNlc3Npb25TdGF0ZTp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBvLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KX0pKSxzaWduT3V0OigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx5aWVsZCBuLnNpZ25PdXQoKX0pKSxzdGFydEF1dG9SZWZyZXNoVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2kuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCl9KSksdXBkYXRlQ29uZmlnOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIG4udXBkYXRlQ29uZmlnKHQpfSkpfX0pKSkociksSG4uc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKEJuKSxIbi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHFuKSxIbi5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soam4pLEhuLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKHhuKSxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9hdXRoX3VybCI6SG4uZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT10P3ZvaWQgMDp0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpIbi5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PShuPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY29kZSxudWxsPT09KGk9bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zZXNzaW9uU3RhdGUsbnVsbD09PShvPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW8/dm9pZCAwOm8ucGtjZSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0IjpIbi5odHRwUmVxdWVzdCh0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImh0dHAtcmVxdWVzdC1hbGwiOkhuLmh0dHBSZXF1ZXN0QWxsKHQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2Uic2lnbi1vdXQiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uc2lnbk91dCgpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpIbi5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXZva2UtYWNjZXNzLXRva2VuIjpIbi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImdldC1vaWRjLXNlcnZpY2UtZW5kcG9pbnRzIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRCYXNpY1VzZXJJbmZvKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWRlY29kZWQtaWQtdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOkhuLmVuYWJsZUh0dHBIYW5kbGVyKCkscy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiZGlzYWJsZV9odHRwX2hhbmRsZXIiOkhuLmRpc2FibGVIdHRwSGFuZGxlcigpLHMucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X3NpZ25fb3V0X3VybCI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRTaWduT3V0VVJMKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4ucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKEhuLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInNldF9zZXNzaW9uX3N0YXRlIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLnNldFNlc3Npb25TdGF0ZShudWxsPT10P3ZvaWQgMDp0LmRhdGEpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4udXBkYXRlQ29uZmlnKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7ZGVmYXVsdDpudWxsPT1zfHxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IEFuKCJDTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJjbGllbnQud29ya2VyIiwib25tZXNzYWdlIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsYFRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICR7dC50eXBlfSwgaXMgaW52YWxpZC5gKSkpfWVsc2Ugcy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBBbigiQ0xJRU5UX1dPUktFUi1PTk1TRy1ORjAxIiwiY2xpZW50LndvcmtlciIsdC50eXBlLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpO2NvbnN0IGpuPSgpPT57TG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LHhuPWU9PntMbi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0scW49KCk9PntMbi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9LEJuPWU9Pntjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7ZGVsZXRlIHQudG9KU09OLExuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPXQ/dDoiIiksdHlwZToicmVxdWVzdC1lcnJvciJ9KX07cmV0dXJue319KCk7Cgo=",null,!1,function(t){return Dl=Dl||function(t,i,n){var l=void 0===i?null:i,e=function(t,i){var n=atob(t);if(i){for(var l=new Uint8Array(n.length),e=0,c=n.length;e<c;++e)l[e]=n.charCodeAt(e);return String.fromCharCode.apply(null,new Uint16Array(l.buffer))}return n}(t,void 0!==n&&n),c=e.indexOf("\n",10)+1,o=e.substring(c)+(l?"//# sourceMappingURL="+l:""),d=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(d)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHI9W10sbj1bXSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89ITE7ZnVuY3Rpb24gcygpe289ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsaT1lLmxlbmd0aDt0PGk7Kyt0KXJbdF09ZVt0XSxuW2UuY2hhckNvZGVBdCh0KV09dDtuWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIGksbyxzPVtdLGE9dDthPG47YSs9MylpPShlW2FdPDwxNikrKGVbYSsxXTw8OCkrZVthKzJdLHMucHVzaChyWyhvPWkpPj4xOCY2M10rcltvPj4xMiY2M10rcltvPj42JjYzXStyWzYzJm9dKTtyZXR1cm4gcy5qb2luKCIiKX1mdW5jdGlvbiB1KGUpe3ZhciB0O298fHMoKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uJTMsdT0iIixjPVtdLGg9MTYzODMsbD0wLGY9bi1pO2w8ZjtsKz1oKWMucHVzaChhKGUsbCxsK2g+Zj9mOmwraCkpO3JldHVybiAxPT09aT8odD1lW24tMV0sdSs9clt0Pj4yXSx1Kz1yW3Q8PDQmNjNdLHUrPSI9PSIpOjI9PT1pJiYodD0oZVtuLTJdPDw4KStlW24tMV0sdSs9clt0Pj4xMF0sdSs9clt0Pj40JjYzXSx1Kz1yW3Q8PDImNjNdLHUrPSI9IiksYy5wdXNoKHUpLGMuam9pbigiIil9ZnVuY3Rpb24gYyhlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBoKGUsdCxyLG4saSxvKXt2YXIgcyxhLHUsYz04Km8taS0xLGg9KDE8PGMpLTEsbD1oPj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDpvLTEscD1uPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9aCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoodT1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSx1Kj0yKSwodCs9cytsPj0xP2YvdTpmKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKHMrKyx1Lz0yKSxzK2w+PWg/KGE9MCxzPWgpOnMrbD49MT8oYT0odCp1LTEpKk1hdGgucG93KDIsaSkscys9bCk6KGE9dCpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbcitkXT0yNTUmYSxkKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsYys9aTtjPjA7ZVtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGMtPTgpO2VbcitkLXBdfD0xMjgqZ312YXIgbD17fS50b1N0cmluZyxmPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWwuY2FsbChlKX07ZnVuY3Rpb24gZCgpe3JldHVybiBnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHAoZSx0KXtpZihkKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBnKGUsdCxyKXtpZighKGcuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBtKHRoaXMsZSl9cmV0dXJuIHYodGhpcyxlLHQscil9ZnVuY3Rpb24gdihlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO2cuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189Zy5wcm90b3R5cGU6ZT13KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIWcuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGsodCxyKSxpPShlPXAoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoXyh0KSl7dmFyIHI9MHxiKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXAoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uP3AoZSwwKTp3KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJmYodC5kYXRhKSlyZXR1cm4gdyhlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIHkoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBtKGUsdCl7aWYoeSh0KSxlPXAoZSx0PDA/MDowfGIodCkpLCFnLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gdyhlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGIodC5sZW5ndGgpO2U9cChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtpZihlPj1kKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gayhlLHQpe2lmKF8oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuICQoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuICQoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiB4KHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gSCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaih0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBVKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHEodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gRShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIFQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWcuZnJvbSh0LG4pKSxfKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6QShlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LGcuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOkEoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIEEoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gUihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gQyhlLHQscixuKXtyZXR1cm4gWCgkKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFAoZSx0LHIsbil7cmV0dXJuIFgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBEKGUsdCxyLG4pe3JldHVybiBQKGUsdCxyLG4pfWZ1bmN0aW9uIE8oZSx0LHIsbil7cmV0dXJuIFgoRyh0KSxlLHIsbil9ZnVuY3Rpb24gSShlLHQscixuKXtyZXR1cm4gWChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFUoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3UoZSk6dShlLnNsaWNlKHQscikpfWZ1bmN0aW9uIE0oZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsdSxjPWVbaV0saD1udWxsLGw9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2w8PXIpc3dpdGNoKGwpe2Nhc2UgMTpjPDEyOCYmKGg9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKHU9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKGg9dSk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYodT0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYodTw1NTI5Nnx8dT41NzM0MykmJihoPXUpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYodT0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZ1PDExMTQxMTImJihoPXUpfW51bGw9PT1oPyhoPTY1NTMzLGw9MSk6aD42NTUzNSYmKGgtPTY1NTM2LG4ucHVzaChoPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG4ucHVzaChoKSxpKz1sfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1MKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1MKSk7cmV0dXJuIHJ9KG4pfWcuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT10LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHQuVFlQRURfQVJSQVlfU1VQUE9SVCxnLnBvb2xTaXplPTgxOTIsZy5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189Zy5wcm90b3R5cGUsZX0sZy5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdihudWxsLGUsdCxyKX0sZy5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoZy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGcuX19wcm90b19fPVVpbnQ4QXJyYXkpLGcuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4geSh0KSx0PD0wP3AoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9wKGUsdCkuZmlsbChyLG4pOnAoZSx0KS5maWxsKHIpOnAoZSx0KX0obnVsbCxlLHQscil9LGcuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFooZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmWihlLnNsaWNlKDAsMCkpfShlKSl9LGcuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFfKGUpfHwhXyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sZy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxnLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFmKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGcuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj1nLmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFfKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sZy5ieXRlTGVuZ3RoPWssZy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGcucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilFKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpRSh0aGlzLHQsdCszKSxFKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClFKHRoaXMsdCx0KzcpLEUodGhpcyx0KzEsdCs2KSxFKHRoaXMsdCsyLHQrNSksRSh0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP00odGhpcywwLGUpOlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIV8oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWcuY29tcGFyZSh0aGlzLGUpfSxnLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighXyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixpKSxjPWUuc2xpY2UodCxyKSxoPTA7aDxhOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGcucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LGcucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBUKHRoaXMsZSx0LHIsITApfSxnLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFQodGhpcyxlLHQsciwhMSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBSKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRCh0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIE8odGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBJKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LGcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEw9NDA5NjtmdW5jdGlvbiBIKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geChlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVYoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gcShlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxpPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIE4oZSx0LHIsbixpLG8pe2lmKCFfKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBLKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBGKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFkoZSx0LHIsbixpLG8pe2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsNCksaChlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBKKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsOCksaChlLHQscixuLDUyLDgpLHIrOH1nLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgZyhpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0sZy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fEIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LGcucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxnLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGcucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGcucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEIoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxnLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sZy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8QihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxnLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8QihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxnLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sZy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLGModGhpcyxlLCEwLDIzLDQpfSxnLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsMjMsNCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITAsNTIsOCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsNTIsOCl9LGcucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8Tih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sZy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxOKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LGcucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDI1NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxnLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsMiw2NTUzNSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwyLDY1NTM1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOksodGhpcyxlLHQsITEpLHQrMn0sZy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Rih0aGlzLGUsdCwhMCksdCs0fSxnLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzR9LGcucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDEyNywtMTI4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGcucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpLKHRoaXMsZSx0LCExKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkYodGhpcyxlLHQsITApLHQrNH0sZy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCs0fSxnLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCEwLHIpfSxnLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCExLHIpfSxnLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gSih0aGlzLGUsdCwhMCxyKX0sZy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEoodGhpcyxlLHQsITEscil9LGcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IWcuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LGcucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9XyhlKT9lOiQobmV3IGcoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB6PS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFYoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uICQoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsYSx1LGMsaDtvfHxzKCk7dmFyIGw9ZS5sZW5ndGg7aWYobCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7Yz0iPSI9PT1lW2wtMl0/MjoiPSI9PT1lW2wtMV0/MTowLGg9bmV3IGkoMypsLzQtYyksYT1jPjA/bC00Omw7dmFyIGY9MDtmb3IodD0wLHI9MDt0PGE7dCs9NCxyKz0zKXU9bltlLmNoYXJDb2RlQXQodCldPDwxOHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8bltlLmNoYXJDb2RlQXQodCsyKV08PDZ8bltlLmNoYXJDb2RlQXQodCszKV0saFtmKytdPXU+PjE2JjI1NSxoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1O3JldHVybiAyPT09Yz8odT1uW2UuY2hhckNvZGVBdCh0KV08PDJ8bltlLmNoYXJDb2RlQXQodCsxKV0+PjQsaFtmKytdPTI1NSZ1KToxPT09YyYmKHU9bltlLmNoYXJDb2RlQXQodCldPDwxMHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxuW2UuY2hhckNvZGVBdCh0KzIpXT4+MixoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1KSxofShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKHosIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIFgoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBRPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LGVlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PWVlLmNhbGwoZSl9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gaWUoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1lZS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIG9lKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1lZS5jYWxsKGUpfWZ1bmN0aW9uIHNlKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksdGUoZSkpZm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGFlPXtpc0FycmF5OnRlLGlzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWVlLmNhbGwoZSl9LGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXJlKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIXJlKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZlIGluc3RhbmNlb2YgRm9ybURhdGF9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpuZSxpc1BsYWluT2JqZWN0OmllLGlzVW5kZWZpbmVkOnJlLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1lZS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09ZWUuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PWVlLmNhbGwoZSl9LGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIG5lKGUpJiZvZShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFVSTFNlYXJjaFBhcmFtcyYmZSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpzZSxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe2llKHRbbl0pJiZpZShyKT90W25dPWUodFtuXSxyKTppZShyKT90W25dPWUoe30scik6dGUocik/dFtuXT1yLnNsaWNlKCk6dFtuXT1yfWZvcih2YXIgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKXNlKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gc2UodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1EodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGNlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKGFlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107YWUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihhZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sYWUuZm9yRWFjaChlLChmdW5jdGlvbihlKXthZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6YWUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2godWUodCkrIj0iK3VlKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gaGUoKXt0aGlzLmhhbmRsZXJzPVtdfWhlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LGhlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0saGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7YWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGxlPWhlO2Z1bmN0aW9uIGZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZGUoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBwZT1mZSxnZT1kZTtmdW5jdGlvbiB2ZShlKXtpZihwZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigocGU9PT1mZXx8IXBlKSYmc2V0VGltZW91dClyZXR1cm4gcGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBwZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gcGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHBlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0VGltZW91dCYmKHBlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsZWFyVGltZW91dCYmKGdlPWNsZWFyVGltZW91dCk7dmFyIHllLG1lPVtdLHdlPSExLGJlPS0xO2Z1bmN0aW9uIF9lKCl7d2UmJnllJiYod2U9ITEseWUubGVuZ3RoP21lPXllLmNvbmNhdChtZSk6YmU9LTEsbWUubGVuZ3RoJiZrZSgpKX1mdW5jdGlvbiBrZSgpe2lmKCF3ZSl7dmFyIGU9dmUoX2UpO3dlPSEwO2Zvcih2YXIgdD1tZS5sZW5ndGg7dDspe2Zvcih5ZT1tZSxtZT1bXTsrK2JlPHQ7KXllJiZ5ZVtiZV0ucnVuKCk7YmU9LTEsdD1tZS5sZW5ndGh9eWU9bnVsbCx3ZT0hMSxmdW5jdGlvbihlKXtpZihnZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChnZT09PWRlfHwhZ2UpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGdlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e2dlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gZ2UuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBnZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFNlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9U2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEVlKCl7fXZhciBUZT1FZSxBZT1FZSxSZT1FZSxDZT1FZSxQZT1FZSxEZT1FZSxPZT1FZTt2YXIgSWU9dC5wZXJmb3JtYW5jZXx8e30sVWU9SWUubm93fHxJZS5tb3pOb3d8fEllLm1zTm93fHxJZS5vTm93fHxJZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBNZT1uZXcgRGF0ZTt2YXIgTGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07bWUucHVzaChuZXcgU2UoZSx0KSksMSE9PW1lLmxlbmd0aHx8d2V8fHZlKGtlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpUZSxhZGRMaXN0ZW5lcjpBZSxvbmNlOlJlLG9mZjpDZSxyZW1vdmVMaXN0ZW5lcjpQZSxyZW1vdmVBbGxMaXN0ZW5lcnM6RGUsZW1pdDpPZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpVZS5jYWxsKEllKSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1NZSkvMWUzfX0sSGU9TGUsamU9ZnVuY3Rpb24oZSx0KXthZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LHhlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxxZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4geGUobyx0LHIsbixpKX0sQmU9YWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLGFlLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksYWUuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxOZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLEtlPWFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPWFlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxpPWUuaGVhZGVycyxvPWUucmVzcG9uc2VUeXBlO2FlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBpWyJDb250ZW50LVR5cGUiXTt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgYT1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtpLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShhKyI6Iit1KX12YXIgYyxoLGw9KGM9ZS5iYXNlVVJMLGg9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChoKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGgpOmgpO2Z1bmN0aW9uIGYoKXtpZihzKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHM/ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGFlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWFlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWFlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmTmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0ocy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOm8mJiJ0ZXh0IiE9PW8mJiJqc29uIiE9PW8/cy5yZXNwb25zZTpzLnJlc3BvbnNlVGV4dCxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6c307IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QocWUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLGkpLHM9bnVsbH19aWYocy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksY2UobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gcz9zLm9ubG9hZGVuZD1mOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cyYmND09PXMucmVhZHlTdGF0ZSYmKDAhPT1zLnN0YXR1c3x8cy5yZXNwb25zZVVSTCYmMD09PXMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoZil9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKHFlKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IocWUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIocWUodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHMpKSxzPW51bGx9LGFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBkPShlLndpdGhDcmVkZW50aWFsc3x8S2UobCkpJiZlLnhzcmZDb29raWVOYW1lP0JlLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2QmJihpW2UueHNyZkhlYWRlck5hbWVdPWQpfSJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmFlLmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaVt0XTpzLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxhZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChzLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxvJiYianNvbiIhPT1vJiYocy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmcy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7cyYmKHMuYWJvcnQoKSxyKGUpLHM9bnVsbCl9KSksbnx8KG49bnVsbCkscy5zZW5kKG4pfSkpfSxZZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFdlKGUsdCl7IWFlLmlzVW5kZWZpbmVkKGUpJiZhZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgSmUsemU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PUhlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSGUpKSYmKEplPUZlKSxKZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUodCwiQWNjZXB0IiksamUodCwiQ29udGVudC1UeXBlIiksYWUuaXNGb3JtRGF0YShlKXx8YWUuaXNBcnJheUJ1ZmZlcihlKXx8YWUuaXNCdWZmZXIoZSl8fGFlLmlzU3RyZWFtKGUpfHxhZS5pc0ZpbGUoZSl8fGFlLmlzQmxvYihlKT9lOmFlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOmFlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6YWUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKGFlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksYWUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZhZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgeGUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07emUuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPXt9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7emUuaGVhZGVyc1tlXT1hZS5tZXJnZShZZSl9KSk7dmFyIFZlPXplLCRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxWZTtyZXR1cm4gYWUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sR2U9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIFhlKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBaZT1mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPSRlLmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPWFlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksYWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxWZS5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gWGUoZSksdC5kYXRhPSRlLmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIEdlKHQpfHwoWGUoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT0kZS5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxRZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxpPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLG89WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0scz1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhZS5pc1BsYWluT2JqZWN0KGUpJiZhZS5pc1BsYWluT2JqZWN0KHQpP2FlLm1lcmdlKGUsdCk6YWUuaXNQbGFpbk9iamVjdCh0KT9hZS5tZXJnZSh7fSx0KTphZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEoZVtuXSx0W25dKX1hZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe2FlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1hKHZvaWQgMCx0W2VdKSl9KSksYWUuZm9yRWFjaChpLHUpLGFlLmZvckVhY2gobywoZnVuY3Rpb24obil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEodm9pZCAwLHRbbl0pfSkpLGFlLmZvckVhY2gocywoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09YShlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09YSh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KGkpLmNvbmNhdChvKS5jb25jYXQocyksaD1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIGFlLmZvckVhY2goaCx1KSxyfSxldD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9heGlvcy8tL2F4aW9zLTAuMjEuNC50Z3oiLF9pbnRlZ3JpdHk6InNoYTUxMi11dDV2ZXdraXU4ampHQmRxcE00NFh4anVDanE5TEFLZUhWbW9WZkhWenk4ZUhneHhxOFNiQVZRTm92REE4bVZpMDVrUDBFYS9uL1V6Y1NIY1RKUWZOZz09IixfZnJvbToiYXhpb3NAMC4yMS40In0sdHQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3R0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgcnQ9e30sbnQ9ZXQudmVyc2lvbi5zcGxpdCgiLiIpO2Z1bmN0aW9uIGl0KGUsdCl7Zm9yKHZhciByPXQ/dC5zcGxpdCgiLiIpOm50LG49ZS5zcGxpdCgiLiIpLGk9MDtpPDM7aSsrKXtpZihyW2ldPm5baV0pcmV0dXJuITA7aWYocltpXTxuW2ldKXJldHVybiExfXJldHVybiExfXR0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7dmFyIG49dCYmaXQodCk7ZnVuY3Rpb24gaShlLHQpe3JldHVybiJbQXhpb3MgdiIrZXQudmVyc2lvbisiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixvLHMpe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IoaShvLCIgaGFzIGJlZW4gcmVtb3ZlZCBpbiAiK3QpKTtyZXR1cm4gbiYmIXJ0W29dJiYocnRbb109ITAsY29uc29sZS53YXJuKGkobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLG8scyl9fTt2YXIgb3Q9e2lzT2xkZXJWZXJzaW9uOml0LGFzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSx1PXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09dSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK3UpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczp0dH0sc3Q9b3QudmFsaWRhdG9ycztmdW5jdGlvbiBhdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGxlLHJlc3BvbnNlOm5ldyBsZX19YXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlPyhlPWFyZ3VtZW50c1sxXXx8e30pLnVybD1hcmd1bWVudHNbMF06ZT1lfHx7fSwoZT1RZSh0aGlzLmRlZmF1bHRzLGUpKS5tZXRob2Q/ZS5tZXRob2Q9ZS5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD9lLm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOmUubWV0aG9kPSJnZXQiO3ZhciB0PWUudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PXQmJm90LmFzc2VydE9wdGlvbnModCx7c2lsZW50SlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksZm9yY2VkSlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksY2xhcmlmeVRpbWVvdXRFcnJvcjpzdC50cmFuc2l0aW9uYWwoc3QuYm9vbGVhbiwiMS4wLjAiKX0sITEpO3ZhciByPVtdLG49ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdC5ydW5XaGVuJiYhMT09PXQucnVuV2hlbihlKXx8KG49biYmdC5zeW5jaHJvbm91cyxyLnVuc2hpZnQodC5mdWxmaWxsZWQsdC5yZWplY3RlZCkpfSkpO3ZhciBpLG89W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFuKXt2YXIgcz1bWmUsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkocyxyKSxzPXMuY29uY2F0KG8pLGk9UHJvbWlzZS5yZXNvbHZlKGUpO3MubGVuZ3RoOylpPWkudGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gaX1mb3IodmFyIGE9ZTtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxjPXIuc2hpZnQoKTt0cnl7YT11KGEpfWNhdGNoKGUpe2MoZSk7YnJlYWt9fXRyeXtpPVplKGEpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO28ubGVuZ3RoOylpPWkudGhlbihvLnNoaWZ0KCksby5zaGlmdCgpKTtyZXR1cm4gaX0sYXQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1RZSh0aGlzLmRlZmF1bHRzLGUpLGNlKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LGFlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFFlKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KSksYWUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoUWUobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6cn0pKX19KSk7dmFyIHV0PWF0O2Z1bmN0aW9uIGN0KGUpe3RoaXMubWVzc2FnZT1lfWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDYW5jZWwiKyh0aGlzLm1lc3NhZ2U/IjogIit0aGlzLm1lc3NhZ2U6IiIpfSxjdC5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgaHQ9Y3Q7ZnVuY3Rpb24gbHQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7ZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgaHQoZSksdChyLnJlYXNvbikpfSkpfWx0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGx0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IGx0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgZnQ9bHQ7ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9bmV3IHV0KGUpLHI9USh1dC5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gYWUuZXh0ZW5kKHIsdXQucHJvdG90eXBlLHQpLGFlLmV4dGVuZChyLHQpLHJ9dmFyIHB0PWR0KFZlKTtwdC5BeGlvcz11dCxwdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGR0KFFlKHB0LmRlZmF1bHRzLGUpKX0scHQuQ2FuY2VsPWh0LHB0LkNhbmNlbFRva2VuPWZ0LHB0LmlzQ2FuY2VsPUdlLHB0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LHB0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LHB0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJiEwPT09ZS5pc0F4aW9zRXJyb3J9O3ZhciBndD1wdCx2dD1wdDtndC5kZWZhdWx0PXZ0O3ZhciB5dCxtdCx3dD1ndDsKLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiBidChlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0obXQ9eXR8fCh5dD17fSkpLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLG10LnF1ZXJ5PSJxdWVyeSI7dmFyIF90OyFmdW5jdGlvbihlKXtlLkNvbmZpZ0RhdGE9ImNvbmZpZ19kYXRhIixlLk9JRENQcm92aWRlck1ldGFEYXRhPSJvaWRjX3Byb3ZpZGVyX21ldGFfZGF0YSIsZS5TZXNzaW9uRGF0YT0ic2Vzc2lvbl9kYXRhIixlLlRlbXBvcmFyeURhdGE9InRlbXBvcmFyeV9kYXRhIn0oX3R8fChfdD17fSkpO2NvbnN0IGt0PSJyZWZyZXNoX3Rva2VuX3RpbWVyIjtjbGFzcyBTdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxyLG4saSxvKXtzdXBlcihudWxsIT1uP246bnVsbD09bz92b2lkIDA6by5tZXNzYWdlKSx0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuY29kZT1lLHRoaXMuZmlsZT10LHRoaXMubWV0aG9kPXIsdGhpcy5kZXNjcmlwdGlvbj1pLHRoaXMuZXJyb3I9byxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIEV0IGV4dGVuZHMgU3R7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8scyxhLHUpe3N1cGVyKGUsdCxyLG4saSksdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLmNvZGU9ZSx0aGlzLmZpbGU9dCx0aGlzLm1ldGhvZD1yLHRoaXMuZGVzY3JpcHRpb249aSx0aGlzLm5ldHdvcmtFcnJvckNvZGU9byx0aGlzLm5ldHdvcmtFcnJvck1lc3NhZ2U9cyx0aGlzLnN0YXR1cz1hLHRoaXMubmV0d29ya0Vycm9yRGF0YT11fX12YXIgVHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBBdChlLHQscil7cmV0dXJuIGUocj17cGF0aDp0LGV4cG9ydHM6e30scmVxdWlyZTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0obnVsbD09dCYmci5wYXRoKX19LHIuZXhwb3J0cyksci5leHBvcnRzfXZhciBSdD12b2lkIDAhPT10P3Q6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LEN0PVtdLFB0PVtdLER0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LE90PSExO2Z1bmN0aW9uIEl0KCl7T3Q9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KUN0W3RdPWVbdF0sUHRbZS5jaGFyQ29kZUF0KHQpXT10O1B0WyItIi5jaGFyQ29kZUF0KDApXT02MixQdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gVXQoZSx0LHIpe2Zvcih2YXIgbixpLG89W10scz10O3M8cjtzKz0zKW49KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKEN0WyhpPW4pPj4xOCY2M10rQ3RbaT4+MTImNjNdK0N0W2k+PjYmNjNdK0N0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBNdChlKXt2YXIgdDtPdHx8SXQoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLHU9ci1uO2E8dTthKz1zKW8ucHVzaChVdChlLGEsYStzPnU/dTphK3MpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLGkrPUN0W3Q+PjJdLGkrPUN0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saSs9Q3RbdD4+MTBdLGkrPUN0W3Q+PjQmNjNdLGkrPUN0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gTHQoZSx0LHIsbixpKXt2YXIgbyxzLGE9OCppLW4tMSx1PSgxPDxhKS0xLGM9dT4+MSxoPS03LGw9cj9pLTE6MCxmPXI/LTE6MSxkPWVbdCtsXTtmb3IobCs9ZixvPWQmKDE8PC1oKS0xLGQ+Pj0taCxoKz1hO2g+MDtvPTI1NipvK2VbdCtsXSxsKz1mLGgtPTgpO2ZvcihzPW8mKDE8PC1oKS0xLG8+Pj0taCxoKz1uO2g+MDtzPTI1NipzK2VbdCtsXSxsKz1mLGgtPTgpO2lmKDA9PT1vKW89MS1jO2Vsc2V7aWYobz09PXUpcmV0dXJuIHM/TmFOOjEvMCooZD8tMToxKTtzKz1NYXRoLnBvdygyLG4pLG8tPWN9cmV0dXJuKGQ/LTE6MSkqcypNYXRoLnBvdygyLG8tbil9ZnVuY3Rpb24gSHQoZSx0LHIsbixpLG8pe3ZhciBzLGEsdSxjPTgqby1pLTEsaD0oMTw8YyktMSxsPWg+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGQ9bj8wOm8tMSxwPW4/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1oKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLXMpKTwxJiYocy0tLHUqPTIpLCh0Kz1zK2w+PTE/Zi91OmYqTWF0aC5wb3coMiwxLWwpKSp1Pj0yJiYocysrLHUvPTIpLHMrbD49aD8oYT0wLHM9aCk6cytsPj0xPyhhPSh0KnUtMSkqTWF0aC5wb3coMixpKSxzKz1sKTooYT10Kk1hdGgucG93KDIsbC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtyK2RdPTI1NSZhLGQrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSxjKz1pO2M+MDtlW3IrZF09MjU1JnMsZCs9cCxzLz0yNTYsYy09OCk7ZVtyK2QtcF18PTEyOCpnfXZhciBqdD17fS50b1N0cmluZyx4dD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qdC5jYWxsKGUpfTtLdC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PVJ0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fFJ0LlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIHF0PUJ0KCk7ZnVuY3Rpb24gQnQoKXtyZXR1cm4gS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gTnQoZSx0KXtpZihCdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1LdC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgS3QodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gS3QoZSx0LHIpe2lmKCEoS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIEt0KSlyZXR1cm4gbmV3IEt0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIFd0KHRoaXMsZSl9cmV0dXJuIEZ0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIEZ0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPUt0LnByb3RvdHlwZTplPUp0KGUsdCksZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKSwhS3QuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfCR0KHQsciksaT0oZT1OdChlLG4pKS53cml0ZSh0LHIpO3JldHVybiBpIT09biYmKGU9ZS5zbGljZSgwLGkpKSxlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihWdCh0KSl7dmFyIHI9MHx6dCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1OdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/TnQoZSwwKTpKdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZ4dCh0LmRhdGEpKXJldHVybiBKdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFl0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gV3QoZSx0KXtpZihZdCh0KSxlPU50KGUsdDwwPzA6MHx6dCh0KSksIUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gSnQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHx6dCh0Lmxlbmd0aCk7ZT1OdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24genQoZSl7aWYoZT49QnQoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrQnQoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uICR0KGUsdCl7aWYoVnQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIF9yKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4ga3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gX3IoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gR3QoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gaHIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGFyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gdXIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIHNyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIFh0KGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gWnQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PUt0LmZyb20odCxuKSksVnQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpRdChlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTpRdChlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gUXQoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZXIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHRyKGUsdCxyLG4pe3JldHVybiBTcihfcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBycihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBucihlLHQscixuKXtyZXR1cm4gcnIoZSx0LHIsbil9ZnVuY3Rpb24gaXIoZSx0LHIsbil7cmV0dXJuIFNyKGtyKHQpLGUscixuKX1mdW5jdGlvbiBvcihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBzcihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/TXQoZSk6TXQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBhcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSx1LGM9ZVtpXSxoPW51bGwsbD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkrbDw9cilzd2l0Y2gobCl7Y2FzZSAxOmM8MTI4JiYoaD1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoaD11KTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGg9dSk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJnU8MTExNDExMiYmKGg9dSl9bnVsbD09PWg/KGg9NjU1MzMsbD0xKTpoPjY1NTM1JiYoaC09NjU1MzYsbi5wdXNoKGg+Pj4xMCYxMDIzfDU1Mjk2KSxoPTU2MzIwfDEwMjMmaCksbi5wdXNoKGgpLGkrPWx9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2Zvcih2YXIgcj0iIixuPTA7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1mdW5jdGlvbiB1cihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGNyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBocihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPWJyKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGxyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGk9IiIsbz0wO288bi5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10rMjU2Km5bbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZnIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGRyKGUsdCxyLG4saSxvKXtpZighVnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHByKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBncihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7aTxvOysraSllW3IraV09dD4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiB2cihlLHQscixuLGksbyl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHlyKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDQpLEh0KGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIG1yKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDgpLEh0KGUsdCxyLG4sNTIsOCkscis4fUt0LnBvb2xTaXplPTgxOTIsS3QuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPUt0LnByb3RvdHlwZSxlfSxLdC5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRnQobnVsbCxlLHQscil9LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihLdC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLEt0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxLdC5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBZdCh0KSx0PD0wP050KGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/TnQoZSx0KS5maWxsKHIsbik6TnQoZSx0KS5maWxsKHIpOk50KGUsdCl9KG51bGwsZSx0LHIpfSxLdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gV3QobnVsbCxlKX0sS3QuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBXdChudWxsLGUpfSxLdC5pc0J1ZmZlcj1FcixLdC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIVZ0KGUpfHwhVnQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LEt0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEt0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCF4dChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBLdC5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPUt0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFWdChvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4saSksaSs9by5sZW5ndGh9cmV0dXJuIG59LEt0LmJ5dGVMZW5ndGg9JHQsS3QucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxLdC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKVh0KHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxLdC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KVh0KHRoaXMsdCx0KzMpLFh0KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpWHQodGhpcyx0LHQrNyksWHQodGhpcyx0KzEsdCs2KSxYdCh0aGlzLHQrMix0KzUpLFh0KHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2FyKHRoaXMsMCxlKTpHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEt0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1LdC5jb21wYXJlKHRoaXMsZSl9LEt0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LEt0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49aSYmdD49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLHU9dGhpcy5zbGljZShuLGkpLGM9ZS5zbGljZSh0LHIpLGg9MDtoPGE7KytoKWlmKHVbaF0hPT1jW2hdKXtvPXVbaF0scz1jW2hdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sS3QucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LEt0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gWnQodGhpcyxlLHQsciwhMCl9LEt0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFp0KHRoaXMsZSx0LHIsITEpfSxLdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgdCluPXQscj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksZS5sZW5ndGg+MCYmKHI8MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIGVyKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHRyKHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBycih0aGlzLGUsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBucih0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGlyKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gb3IodGhpcyxlLHQscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxvPSEwfX0sS3QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX0sS3QucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189S3QucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IEt0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSxLdC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sS3QucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxLdC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LEt0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxLdC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sS3QucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sS3QucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LEt0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxLdC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LEt0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sS3QucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksTHQodGhpcyxlLCEwLDIzLDQpfSxLdC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsMjMsNCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITAsNTIsOCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsNTIsOCl9LEt0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtlPStlLHR8PTAscnw9MCxufHxkcih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sS3QucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fGRyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDEsMjU1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpwcih0aGlzLGUsdCwhMCksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxLdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz1yLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMSwxMjcsLTEyOCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sS3QucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOnByKHRoaXMsZSx0LCEwKSx0KzJ9LEt0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4geXIodGhpcyxlLHQsITAscil9LEt0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB5cih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMCxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK28pLHQpO3JldHVybiBvfSxLdC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhS3QuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9VnQoZSk/ZTpfcihuZXcgS3QoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB3cj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBicihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gX3IoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIGtyKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvLHM7T3R8fEl0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IER0KDMqYS80LW8pLG49bz4wP2EtNDphO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylpPVB0W2UuY2hhckNvZGVBdCh0KV08PDE4fFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8UHRbZS5jaGFyQ29kZUF0KHQrMildPDw2fFB0W2UuY2hhckNvZGVBdCh0KzMpXSxzW3UrK109aT4+MTYmMjU1LHNbdSsrXT1pPj44JjI1NSxzW3UrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPVB0W2UuY2hhckNvZGVBdCh0KV08PDJ8UHRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbdSsrXT0yNTUmaSk6MT09PW8mJihpPVB0W2UuY2hhckNvZGVBdCh0KV08PDEwfFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxQdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1t1KytdPWk+PjgmMjU1LHNbdSsrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZSh3ciwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gU3IoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxUcihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZUcihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gVHIoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgQXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOkt0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLEt0LmFsbG9jKCtlKX0saXNCdWZmZXI6RXIsa01heExlbmd0aDpxdH0pLFJyPUF0KChmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10JTQ7aWYoIXIpcmV0dXJuIGU7dmFyIG49dCxpPTQtcixvPXQraSxzPUt0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIsbisrKTtyZXR1cm4gcy50b1N0cmluZygpfX0pKSxDcj1BdCgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuaXNCdWZmZXIoZSk/aShlLnRvU3RyaW5nKCJiYXNlNjQiKSk6aShLdC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxSci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89cjtvLmVuY29kZT1yLG8uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuZnJvbShuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sby50b0Jhc2U2ND1uLG8uZnJvbUJhc2U2ND1pLG8udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIEt0LmZyb20obihlKSwiYmFzZTY0Iil9LHQuZGVmYXVsdD1vfSkpLFByPUF0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9Q3IuZGVmYXVsdCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9KSksRHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0oQXQoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsdSxjLGgsbCxmLGQscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sdT1yWzJdLGM9clszXSxoPXJbNF0sbD1yWzVdLGY9cls2XSxkPXJbN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1Jm5bdl0pPDwyNHwoMjU1Jm5bdisxXSk8PDE2fCgyNTUmblt2KzJdKTw8OHwyNTUmblt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKyhoJmxefmgmZil8MCkrKGQrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZ1XmEmdSl8MCxkPWYsZj1sLGw9aCxoPWMreXwwLGM9dSx1PWEsYT1zLHM9eSttfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPXUsclszXSs9YyxyWzRdKz1oLHJbNV0rPWwscls2XSs9ZixyWzddKz1kLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksYz1zKHQsZSksaD1uZXcgaShjKSxsPW5ldyBVaW50OEFycmF5KGguZGlnZXN0TGVuZ3RoKSxmPWwubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkobikscD0wO3A8bjtwKyspZj09PWwubGVuZ3RoJiYoYShsLGgscixvKSxmPTApLGRbcF09bFtmKytdO3JldHVybiBoLmNsZWFuKCksbC5maWxsKDApLG8uZmlsbCgwKSxkfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkocyksYz1uZXcgVWludDhBcnJheShzKSxoPW5ldyBVaW50OEFycmF5KG4pLGw9MDtsKnM8bjtsKyspe3ZhciBmPWwrMTthWzBdPWY+Pj4yNCYyNTUsYVsxXT1mPj4+MTYmMjU1LGFbMl09Zj4+PjgmMjU1LGFbM109Zj4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaChjKTtmb3IodmFyIGQ9MDtkPHM7ZCsrKXVbZF09Y1tkXTtmb3IoZD0yO2Q8PXI7ZCsrKXtvLnJlc2V0KCksby51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgcD0wO3A8cztwKyspdVtwXV49Y1twXX1mb3IoZD0wO2Q8cyYmbCpzK2Q8bjtkKyspaFtsKnMrZF09dVtkXX1mb3IobD0wO2w8cztsKyspdVtsXT1jW2xdPTA7Zm9yKGw9MDtsPDQ7bCsrKWFbbF09MDtyZXR1cm4gby5jbGVhbigpLGh9fShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfSkpKTtmdW5jdGlvbiBPcigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIElyKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVXI9T3IsTXI9SXI7ZnVuY3Rpb24gTHIoZSl7aWYoVXI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFVyPT09T3J8fCFVcikmJnNldFRpbWVvdXQpcmV0dXJuIFVyPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVXIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFVyLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBVci5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBSdC5zZXRUaW1lb3V0JiYoVXI9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIFJ0LmNsZWFyVGltZW91dCYmKE1yPWNsZWFyVGltZW91dCk7dmFyIEhyLGpyPVtdLHhyPSExLHFyPS0xO2Z1bmN0aW9uIEJyKCl7eHImJkhyJiYoeHI9ITEsSHIubGVuZ3RoP2pyPUhyLmNvbmNhdChqcik6cXI9LTEsanIubGVuZ3RoJiZOcigpKX1mdW5jdGlvbiBOcigpe2lmKCF4cil7dmFyIGU9THIoQnIpO3hyPSEwO2Zvcih2YXIgdD1qci5sZW5ndGg7dDspe2ZvcihIcj1qcixqcj1bXTsrK3FyPHQ7KUhyJiZIcltxcl0ucnVuKCk7cXI9LTEsdD1qci5sZW5ndGh9SHI9bnVsbCx4cj0hMSxmdW5jdGlvbihlKXtpZihNcj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChNcj09PUlyfHwhTXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIE1yPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e01yKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gTXIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBNci5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIEtyKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9S3IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBGcj1SdC5wZXJmb3JtYW5jZXx8e30sWXI9KEZyLm5vd3x8RnIubW96Tm93fHxGci5tc05vd3x8RnIub05vd3x8RnIud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07anIucHVzaChuZXcgS3IoZSx0KSksMSE9PWpyLmxlbmd0aHx8eHJ8fExyKE5yKX0pLFdyPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KEFyKSxKcj1BdCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1Xci5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9V3I6KG4oV3IsdCksdC5CdWZmZXI9aSksbihyLGkpLGkuZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxpLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBXci5TbG93QnVmZmVyKGUpfX0pKSx6cj1BdCgoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj1Kci5CdWZmZXIsbj1UdC5jcnlwdG98fFR0Lm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLGkpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBvPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIHM9MDtzPGU7cys9dCluLmdldFJhbmRvbVZhbHVlcyhvLnNsaWNlKHMscyt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhvKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9ZcigoZnVuY3Rpb24oKXtpKG51bGwsbyl9KSk6b306ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKTtjb25zdCBWcj1uZXcgVGV4dEVuY29kZXIsJHI9bmV3IFRleHREZWNvZGVyO3ZhciBHcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdzt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCIpfSgpO2NvbnN0IFhyPWU9PntsZXQgdD1lO3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9JHIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIiksbmV3IFVpbnQ4QXJyYXkoR3IuYXRvYih0KS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSl9O2NsYXNzIFpyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpfX1jbGFzcyBRciBleHRlbmRzIFpye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn19Y2xhc3MgZW4gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyB0biBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyBybiBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIG5uIGV4dGVuZHMgWnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn19Y2xhc3Mgc24gZXh0ZW5kcyBRcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQifX12YXIgYW49R3IuY3J5cHRvO2Z1bmN0aW9uIHVuKCl7aWYoIUdyLmlzU2VjdXJlQ29udGV4dCYmIUdyLmNyeXB0by5zdWJ0bGUpdGhyb3cgbmV3IFpyKCJXZWIgQ3J5cHRvZ3JhcGh5IEFQSSBpcyBhdmFpbGFibGUgb25seSBpbiBTZWN1cmUgQ29udGV4dHMuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJlX0NvbnRleHRzIil9Y29uc3QgY249YXN5bmMgZT0+e3ZhciB0LHI7Y29uc3R7YWxnb3JpdGhtOm4sa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LHI7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHRuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc3Vic3RyKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnN1YnN0cigtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTplLmNydn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKTtsZXQgbz0iandrIixzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCJQQktERjIiPT09bi5uYW1lJiYobz0icmF3IixzPVhyKGUuaykpLHVuKCksYW4uc3VidGxlLmltcG9ydEtleShvLHMsbixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0ocj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1yP3I6aSl9O2Z1bmN0aW9uIGhuKGUpe3JldHVybiEhZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1hc3luYyBmdW5jdGlvbiBsbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/Y24oey4uLmUsYWxnOnQsZXh0OiExfSk6WHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHRuKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIHVuc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBjbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX1jb25zdCBmbj1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDAhPT1uLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2Zvcihjb25zdCBpIG9mIHIuY3JpdCl7aWYoIXQuaGFzKGkpKXRocm93IG5ldyB0bihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7aX0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbmApO2lmKHZvaWQgMD09PW5baV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBpcyBtaXNzaW5nYCk7aWYodC5nZXQoaSkmJnZvaWQgMD09PXJbaV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfS5iaW5kKHZvaWQgMCxybixuZXcgTWFwKFtbImI2NCIsITBdXSkpLGRuPSgoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkuYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTthc3luYyBmdW5jdGlvbiBwbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBybigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgcm4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBybigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgcm4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhaG4oZS5oZWFkZXIpKXRocm93IG5ldyBybigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBuPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVhyKGUucHJvdGVjdGVkKTtuPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkobixlLmhlYWRlcikpdGhyb3cgbmV3IHJuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3QgaT17Li4ubiwuLi5lLmhlYWRlcn07bGV0IG89ITA7aWYoZm4obixpKS5oYXMoImI2NCIpJiYobz1uLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBvKSl0aHJvdyBuZXcgcm4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOnN9PWk7aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhcyl0aHJvdyBuZXcgcm4oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IGE9ciYmZG4oci5hbGdvcml0aG1zKTtpZihhJiYhYS5oYXMocykpdGhyb3cgbmV3IGVuKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYobyl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgcm4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KG4sZSkpLCgoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fGUubWF0Y2goL15BXGR7M30oPzpHQ00pS1ckLykpe2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwic2VjcmV0Ij09PXQudHlwZSlyZXR1cm47dGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpfWlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBvciBLZXlPYmplY3QgaW5zdGFuY2VzIG11c3QgYmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIik7aWYoInNlY3JldCI9PT10LnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9KShzLHQpO2NvbnN0IHU9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KFZyLmVuY29kZShlLnByb3RlY3RlZHx8IiIpLFZyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1ZyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksYz1YcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0KGFzeW5jKGUsdCxyLG4pPT57bGV0IGk7aWYodW4oKSx0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzeW1tZXRyaWMga2V5cyBhcmUgb25seSBhcHBsaWNhYmxlIGZvciBITUFDLWJhc2VkIGFsZ29yaXRobXMiKTtpPWF3YWl0IGFuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zdWJzdHIoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFsidmVyaWZ5Il0pfWVsc2UgaT10O3JldHVybigoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7Y29uc3Qgcj1wYXJzZUludChlLnN1YnN0cigtMyksMTApLHtsZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPHIpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBzeW1tZXRyaWMga2V5cyB0byBiZSAke3J9IGJpdHMgb3IgbGFyZ2VyYCl9aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKSxhbi5zdWJ0bGUudmVyaWZ5KGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkhTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiSE1BQyJ9O2Nhc2UiSFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJITUFDIn07Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDozMn07Y2FzZSJQUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6NDh9O2Nhc2UiUFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjY0fTtjYXNlIlJTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In07Y2FzZSJFUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9O2Nhc2UiRVM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifTtkZWZhdWx0OnRocm93IG5ldyB0bihgYWxnICR7ZX0gaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUpLGkscixuKX0pKHMsdCxjLHUpKXRocm93IG5ldyBvbjtsZXQgaDtoPW8/WHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Wci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgbD17cGF5bG9hZDpofTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihsLnByb3RlY3RlZEhlYWRlcj1uKSx2b2lkIDAhPT1lLmhlYWRlciYmKGwudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGx9Y29uc3QgZ249L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIHZuPWU9Pntjb25zdCB0PWduLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKDg2NDAwKnIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IHluPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBtbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fHluKGUudHlwKSE9PXluKG4pKSl0aHJvdyBuZXcgUXIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPXR5cGVvZiBpfHwhaXx8QXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgbm4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKCJzdHJpbmciPT10eXBlb2Ygbz9bb106bykuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBRcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mKHU9aS5hdWQpP2MuaW5jbHVkZXModSk6Yy5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldCh1KSkpKSkpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIHUsYztsZXQgaDtzd2l0Y2godHlwZW9mIHIuY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpoPXZuKHIuY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpoPXIuY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmg9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpsfT1yLGY9KGQ9bHx8bmV3IERhdGUsTWF0aC5mbG9vcihkLmdldFRpbWUoKS8xZTMpKTt2YXIgZDtpZih2b2lkIDAhPT1pLmlhdHx8ci5tYXhUb2tlbkFnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwPT09aS5leHAmJmkuaWF0PmYraCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgUXIoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+ZitoKXRocm93IG5ldyBRcignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBRcignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9Zi1oKXRocm93IG5ldyBzbignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKHIubWF4VG9rZW5BZ2Upe2NvbnN0IGU9Zi1pLmlhdDtpZihlLWg+KCJudW1iZXIiPT10eXBlb2Ygci5tYXhUb2tlbkFnZT9yLm1heFRva2VuQWdlOnZuKHIubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgc24oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWgpdGhyb3cgbmV3IFFyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2NsYXNzIHdue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBiYXNlNjRVUkxFbmNvZGUoZSl7cmV0dXJuIFByLmVuY29kZShlKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0vZywiIil9c3RhdGljIGdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZSh6cigzMikpfXN0YXRpYyBnZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShuZXcgZyhEcigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKSl9c3RhdGljIGdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKXtyZXR1cm5bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il19c3RhdGljIGdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UoUHIuZGVjb2RlKGUsInV0ZjgiKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihyLmtpZD09PWUua2lkKXJldHVybiBsbih7YWxnOmUuYWxnLGU6ZS5lLGt0eTplLmt0eSxuOmUubn0pO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkNSWVBUT19VVElMLUdURlRJVC1JVjAxIiwiY3J5cHRvLXV0aWxzIiwiZ2V0SldLRm9yVGhlSWRUb2tlbiIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK3Iua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKSl9c3RhdGljIGlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxvKXtyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT0kci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgcm4oIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6biwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IHJuKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBwbih7cGF5bG9hZDppfHx2b2lkIDAscHJvdGVjdGVkOm58fHZvaWQgMCxzaWduYXR1cmU6b3x8dm9pZCAwfSx0LHIpO3JldHVybntwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9fShlLHQscik7cmV0dXJue3BheWxvYWQ6bW4obi5wcm90ZWN0ZWRIZWFkZXIsbi5wYXlsb2FkLHIpLHByb3RlY3RlZEhlYWRlcjpuLnByb3RlY3RlZEhlYWRlcn19KGUsdCx7YWxnb3JpdGhtczp0aGlzLmdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKSxhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOm8saXNzdWVyOm4sc3ViamVjdDppfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJDUllQVE9fVVRJTC1JVklULUlWMDIiLCJjcnlwdG8tdXRpbHMiLCJpc1ZhbGlkSWRUb2tlbiIsIlZhbGlkYXRpbmcgSUQgdG9rZW4gZmFpbGVkIixlKSkpKX1zdGF0aWMgZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD1Qci5kZWNvZGUoZS5zcGxpdCgiLiIpWzFdLCJ1dGY4Iik7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFN0KCJDUllQVE9fVVRJTC1ESVQtSVYwMSIsImNyeXB0by11dGlscyIsImRlY29kZUlEVG9rZW4iLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGJue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQscixuO2NvbnN0IGk9d24uZGVjb2RlSURUb2tlbihlKSxvPXRoaXMuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKGkpLHM9dGhpcy5leHRyYWN0VXNlck5hbWUoaSksYT1udWxsIT09KHQ9aS5naXZlbl9uYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPWkuZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsYz1hJiZ1P2Ake2F9ICR7dX1gOmF8fHV8fCIiLGg9bnVsbCE9PShuPWkucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09bj9uOmM7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOm8sdXNlcm5hbWU6c30sdGhpcy5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoaSkpfXN0YXRpYyBmaWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO251bGw9PXR8fGRlbGV0ZSB0LmlzcyxudWxsPT10fHxkZWxldGUgdC5zdWIsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IHI9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCBuPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtyW25dPXR9KSkscn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX19Ym4uZXh0cmFjdFVzZXJOYW1lPShlLHQ9IkAiKT0+e2NvbnN0IHI9ZS5zdWIuc3BsaXQodCk7cmV0dXJuIHIubGVuZ3RoPjImJnIucG9wKCksci5qb2luKHQpfSxibi5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9KGUsdD0iQCIpPT57Y29uc3Qgcj1lLnN1Yi5zcGxpdCh0KTtyZXR1cm4gci5sZW5ndGg+Mj9yW3IubGVuZ3RoLTFdOiIifTtjbGFzcyBfbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfXJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIGUud2VsbEtub3duRW5kcG9pbnQ/ZS5zZXJ2ZXJPcmlnaW4rZS53ZWxsS25vd25FbmRwb2ludDplLnNlcnZlck9yaWdpbisiL29hdXRoMi90b2tlbi8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiJ9KSl9cmVzb2x2ZUVuZHBvaW50cyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIHIub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWcmJnIuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhyLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W25dPShudWxsPT1yP3ZvaWQgMDpyLmVuZHBvaW50cyk/ci5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IHI9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvYXV0aG9yaXplIixlbmRfc2Vzc2lvbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29pZGMvbG9nb3V0Iixqd2tzX3VyaTp0LnNlcnZlck9yaWdpbisiL29hdXRoMi9qd2tzIixjaGVja19zZXNzaW9uX2lmcmFtZTp0LnNlcnZlck9yaWdpbisiL29pZGMvY2hlY2tzZXNzaW9uIixyZXZvY2F0aW9uX2VuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Jldm9rZSIsdG9rZW5fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvdG9rZW4ifTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHIpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gdCYmMCE9PXQudHJpbSgpLmxlbmd0aD93dC5nZXQodCx7d2l0aENyZWRlbnRpYWxzOm51bGw9PXI/dm9pZCAwOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT10LnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1WSVQtTlIwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgcmV0dXJuZWQgIit0LnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLG49KHlpZWxkIHRoaXMucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCkpLnNwbGl0KCIvLndlbGwta25vd24iKVswXTtyZXR1cm4gciYmcj09PW4/d24uZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sdC5kYXRhLmtleXMpLnRoZW4oKHQ9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHduLmlzVmFsaWRJZFRva2VuKGUsdCwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELHIsd24uZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSkudGhlbigoZT0+ZSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLVZJVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIix2b2lkIDAsdm9pZCAwLGUpKSkpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULUVTMDQiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSk6UHJvbWlzZS5yZXNvbHZlKCExKX0pKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfSEVMUEVSLVZJVC1OUjA1IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULU5GMDEiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpfSkpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlKXt2YXIgdDtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcj0ib3BlbmlkIjtjb25zdCBuPXlpZWxkIHRoaXMuX2NvbmZpZygpLGk9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7cmV0dXJuIG4uc2NvcGUmJm4uc2NvcGUubGVuZ3RoPjAmJihuLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8bi5zY29wZS5wdXNoKCJvcGVuaWQiKSxyPW4uc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsaS5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsYm4uZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGkuaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHIpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsbi5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PSh0PW4uY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09dD90OiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKCl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1IVFItTlIwMSIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgdG9rZW4gcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7aWYoKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKGUuZGF0YS5pZF90b2tlbikudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKTtjb25zdCB0PXthY2Nlc3NUb2tlbjplLmRhdGEuYWNjZXNzX3Rva2VuLGV4cGlyZXNJbjplLmRhdGEuZXhwaXJlc19pbixpZFRva2VuOmUuZGF0YS5pZF90b2tlbixyZWZyZXNoVG9rZW46ZS5kYXRhLnJlZnJlc2hfdG9rZW4sc2NvcGU6ZS5kYXRhLnNjb3BlLHRva2VuVHlwZTplLmRhdGEudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1IVFItSVYwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJUaGUgaWQgdG9rZW4gcmV0dXJuZWQgaXMgbm90IHZhbGlkLiIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBoYXMgZmFpbGVkIHRoZSB2YWxpZGF0aW9uIGNoZWNrLiIpKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLUhBVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsdm9pZCAwLHZvaWQgMCxlKSkpKTt7Y29uc3QgdD17YWNjZXNzVG9rZW46ZS5kYXRhLmFjY2Vzc190b2tlbixleHBpcmVzSW46ZS5kYXRhLmV4cGlyZXNfaW4saWRUb2tlbjplLmRhdGEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmUuZGF0YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmUuZGF0YS5zY29wZSx0b2tlblR5cGU6ZS5kYXRhLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKSxQcm9taXNlLnJlc29sdmUodCl9fSkpfX1jbGFzcyBrbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgX24oZSksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgU3QoIkFVVEhfQ09SRS1HQVUtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRBdXRob3JpemF0aW9uVVJMIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPW5ldyBVUkwodCk7bi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZXNwb25zZV90eXBlIiwiY29kZSIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIixyLmNsaWVudElEKTtsZXQgaT0ib3BlbmlkIjtpZihyLnNjb3BlJiZyLnNjb3BlLmxlbmd0aD4wJiYoci5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHIuc2NvcGUucHVzaCgib3BlbmlkIiksaT1yLnNjb3BlLmpvaW4oIiAiKSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsaSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLHIuc2lnbkluUmVkaXJlY3RVUkwpLHIucmVzcG9uc2VNb2RlJiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLHIucmVzcG9uc2VNb2RlKSxyLmVuYWJsZVBLQ0Upe2NvbnN0IGU9d24uZ2V0Q29kZVZlcmlmaWVyKCksdD13bi5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiLGUpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLHQpfXIucHJvbXB0JiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInByb21wdCIsci5wcm9tcHQpO2NvbnN0IG89ZTtpZihvKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMobykpIiIhPWUmJiIiIT10JiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoZSx0LnRvU3RyaW5nKCkpO3JldHVybiBuLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighcnx8MD09PXIudHJpbSgpLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7dCYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCkpO2NvbnN0IGk9W107aS5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLG4uY2xpZW50U2VjcmV0JiZuLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaChgY2xpZW50X3NlY3JldD0ke24uY2xpZW50U2VjcmV0fWApO2NvbnN0IG89ZTtyZXR1cm4gaS5wdXNoKGBjb2RlPSR7b31gKSxpLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIiksaS5wdXNoKGByZWRpcmVjdF91cmk9JHtuLnNpZ25JblJlZGlyZWN0VVJMfWApLG4uZW5hYmxlUEtDRSYmKGkucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIikpLHd0LnBvc3QocixpLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDEtRVMwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXF1ZXN0QWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMS1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsIlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsdD15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKCFyLnJlZnJlc2hfdG9rZW4pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBUaGUgaWRlbnRpdHkgc2VydmVyIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3Qgbj1bXTtyZXR1cm4gbi5wdXNoKGBjbGllbnRfaWQ9JHt0LmNsaWVudElEfWApLG4ucHVzaChgcmVmcmVzaF90b2tlbj0ke3IucmVmcmVzaF90b2tlbn1gKSxuLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHQuY2xpZW50U2VjcmV0JiZ0LmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJm4ucHVzaChgY2xpZW50X3NlY3JldD0ke3QuY2xpZW50U2VjcmV0fWApLHd0LnBvc3QoZSxuLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMi1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTtjb25zdCByPVtdO3JldHVybiByLnB1c2goYGNsaWVudF9pZD0ke3QuY2xpZW50SUR9YCksci5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWApLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpLHd0LnBvc3QoZSxyLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+MjAwIT09ZS5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMy1OUjAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOih0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLFByb21pc2UucmVzb2x2ZShlKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMy1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBuO2lmKG49ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnQudG9rZW5fZW5kcG9pbnQsIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3QgaT17ZGF0YTooeWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSx0XSk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3ModCk7cmV0dXJuYCR7ZX09JHtyfWB9KSkpKSkpLmpvaW4oIiYiKSxoZWFkZXJzOk9iamVjdC5hc3NpZ24oe30sYm4uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QiLHVybDpuLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c307cmV0dXJuIGUuYXR0YWNoVG9rZW4mJihpLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWB9KSksd3QoaSkudGhlbigodD0+MjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUodCkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkNHLU5SMDQiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSx0PWJuLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT1lP3ZvaWQgMDplLmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3BlczplLnNjb3BlLHNlc3Npb25TdGF0ZTplLnNlc3Npb25fc3RhdGUsdXNlcm5hbWU6dC51c2VybmFtZX07cmV0dXJuIHQuZGlzcGxheU5hbWUmJiIiIT09dC5kaXNwbGF5TmFtZXx8ZGVsZXRlIHQuZGlzcGxheU5hbWUsdC50ZW5hbnREb21haW4mJiIiIT09dC50ZW5hbnREb21haW58fGRlbGV0ZSB0LnRlbmFudERvbWFpbixyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSx0KSxyfSkpfWdldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpLmlkX3Rva2VuO3JldHVybiB3bi5kZWNvZGVJRFRva2VuKGUpfSkpfWdldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpLmlkX3Rva2VufSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKCFlJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCk7Y29uc3QgdD15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKTtyZXR1cm4gd3QuZ2V0KHQpLnRoZW4oKGU9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIDIwMCE9PWUuc3RhdHVzP1Byb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLUdPUE0tTlIwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRPSURDUHJvdmlkZXJNZXRhRGF0YSIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgdG8gZ2V0IHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCAiK2Uuc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKTooeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHMoZS5kYXRhKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoITApKX0pKSkpLmNhdGNoKCgoKT0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSghMCl9KSkpKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50OmUuYXV0aG9yaXphdGlvbl9lbmRwb2ludCxjaGVja1Nlc3Npb25JZnJhbWU6ZS5jaGVja19zZXNzaW9uX2lmcmFtZSxlbmRTZXNzaW9uRW5kcG9pbnQ6ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludCxpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6ZS5pbnRyb3NwZWN0aW9uX2VuZHBvaW50LGlzc3VlcjplLmlzc3Vlcixqd2tzVXJpOmUuandrc191cmkscmVnaXN0cmF0aW9uRW5kcG9pbnQ6ZS5yZWdpc3RyYXRpb25fZW5kcG9pbnQscmV2b2NhdGlvbkVuZHBvaW50OmUucmV2b2NhdGlvbl9lbmRwb2ludCx0b2tlbkVuZHBvaW50OmUudG9rZW5fZW5kcG9pbnQsdXNlcmluZm9FbmRwb2ludDplLnVzZXJpbmZvX2VuZHBvaW50LHdlbGxLbm93bkVuZHBvaW50OnlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpfX0pKX1nZXRTaWduT3V0VVJMKCl7dmFyIGUsdCxyO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49bnVsbD09PShlPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmVuZF9zZXNzaW9uX2VuZHBvaW50LGk9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IFN0KCJBVVRIX0NPUkUtR1NPVS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgbz1udWxsPT09KHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmlkX3Rva2VuO2lmKCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdTT1UtTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiSUQgdG9rZW4gbm90IGZvdW5kLiIsIk5vIElEIHRva2VuIGNvdWxkIGJlIGZvdW5kLiBFaXRoZXIgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24gaXMgbG9zdCBvciB5b3UgaGF2ZSBub3Qgc2lnbmVkIGluLiIpO2NvbnN0IHM9bnVsbCE9PShyPW51bGw9PWk/dm9pZCAwOmkuc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09cj9yOm51bGw9PWk/dm9pZCAwOmkuc2lnbkluUmVkaXJlY3RVUkw7aWYoIXN8fDA9PT1zLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IFN0KCJBVVRIX0NPUkUtR1NPVS1ORjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldFNpZ25PdXRVUkwiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtyZXR1cm5gJHtufT9pZF90b2tlbl9oaW50PSR7b30mcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPSR7c30mc3RhdGU9c2lnbl9vdXRfc3VjY2Vzc2B9KSl9c2lnbk91dCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5nZXRTaWduT3V0VVJMKCk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKCksZX0pKX1nZXRBY2Nlc3NUb2tlbigpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmFjY2Vzc190b2tlbn0pKX1pc0F1dGhlbnRpY2F0ZWQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gQm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpfSkpfWdldFBLQ0VDb2RlKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKX0pKX1zZXRQS0NFQ29kZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIsZSl9KSl9dXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLGUub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWc/KG51bGw9PWU/dm9pZCAwOmUuZW5kcG9pbnRzKSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHt9KSkpOihudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKSl9KSl9fWNsYXNzIFNue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSx0KXt2YXIgcjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT1uJiZKU09OLnBhcnNlKG4pLG89T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHQpLHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfXNldFZhbHVlKGUsdCxyKXt2YXIgbjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPW51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09bj9uOm51bGwsbz1pJiZKU09OLnBhcnNlKGkpLHM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtbdF06cn0pLGE9SlNPTi5zdHJpbmdpZnkocyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLGEpfSkpfXJlbW92ZVZhbHVlKGUsdCl7dmFyIHI7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9biYmSlNPTi5wYXJzZShuKSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bdF07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSl7cmV0dXJuYCR7ZX0tJHt0aGlzLl9pZH1gfXNldENvbmZpZ0RhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpLGUpfSkpfWdldENvbmZpZ0RhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRUZW1wb3JhcnlEYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0U2Vzc2lvbkRhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSkpfSkpfWdldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1zZXRDb25maWdEYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUsdCl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUsdCl9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSxlLHQpfSkpfXNldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlLHQpfSkpfXJlbW92ZUNvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlKX0pKX19Y29uc3QgRW49e2NsaWVudEhvc3Q6b3JpZ2luLGNsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTp5dC5xdWVyeSxzY29wZTpbIm9wZW5pZCJdLHNlbmRDb29raWVzSW5SZXF1ZXN0czohMCx2YWxpZGF0ZUlEVG9rZW46ITB9O2NsYXNzIFRuewovKioKICAgICAgICAgKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSAuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0b3JlfSBzdG9yZSAtIFRoZSBzdG9yZSBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CiAgICAgICAgICogY29uc3QgYXV0aCA9IG5ldyBBc2dhcmRlb0F1dGhDbGllbnQ8Q3VzdG9tQ2xpZW50Q29uZmlnPihfc3RvcmUpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2NvbnN0cnVjdG9yCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovCmNvbnN0cnVjdG9yKGUpe1RuLl9pbnN0YW5jZUlEP1RuLl9pbnN0YW5jZUlEKz0xOlRuLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBTbihgaW5zdGFuY2VfJHtUbi5faW5zdGFuY2VJRH1gLGUpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcga24odGhpcy5fZGF0YUxheWVyKQovKioKICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBTREsgd2l0aCB0aGUgY29uZmlnIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0F1dGhDbGllbnRDb25maWc8VD59IGNvbmZpZyAtIFRoZSBjb25maWcgb2JqZWN0IHRvIGluaXRpYWxpemUgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxFbiksZSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RBY2Nlc3NUb2tlbihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QXhpb3NSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGN1c3RvbS1ncmFudCByZXF1ZXN0IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlCiAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtDdXN0b21HcmFudENvbmZpZ30gY29uZmlnIC0gQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBncmFudCBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAqIG9uIHlvdXIgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgKiAgIGRhdGE6IHsKICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAogICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICogICAgICAgc2NvcGU6ICJ7e3Njb3BlfX0iLAogICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKICAgICAgICAgKiAgIH0sCiAgICAgICAgICogICBpZDogImFjY291bnQtc3dpdGNoIiwKICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAogICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICogICBzaWduSW5SZXF1aXJlZDogdHJ1ZQogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF1dGgucmVxdWVzdEN1c3RvbUdyYW50KGNvbmZpZykudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2lzQXV0aGVudGljYXRlZCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuaXNBdXRoZW50aWNhdGVkKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNsYXNzIEFuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8pe3N1cGVyKG51bGwhPW4/bjpudWxsPT1vP3ZvaWQgMDpvLm1lc3NhZ2UpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5jb2RlPWUsdGhpcy5maWxlPXQsdGhpcy5tZXRob2Q9cix0aGlzLmVycm9yPW8sdGhpcy5kZXNjcmlwdGlvbj1pLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgUm57Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZih0LnJlZnJlc2hfdG9rZW4pe2NvbnN0IHI9cGFyc2VJbnQodC5leHBpcmVzX2luKSxuPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QsSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSl7Y29uc3QgZT1KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSk7Y2xlYXJUaW1lb3V0KGUpfX0pKX19Y29uc3QgQ249ImluaXQiO3ZhciBQbixEbixPbjshZnVuY3Rpb24oZSl7ZS5Mb2NhbFN0b3JhZ2U9ImxvY2FsU3RvcmFnZSIsZS5TZXNzaW9uU3RvcmFnZT0ic2Vzc2lvblN0b3JhZ2UiLGUuV2ViV29ya2VyPSJ3ZWJXb3JrZXIiLGUuQnJvd3Nlck1lbW9yeT0iYnJvd3Nlck1lbW9yeSJ9KFBufHwoUG49e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50In0oRG58fChEbj17fSkpO2NsYXNzIElue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWxldCBVbj1Pbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT13dC5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBPbiksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9d3QuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9d3Quc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLE9uLmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKHQpLHR9KSl9ZXJyb3JIYW5kbGVyKGUpe3Rocm93IE9uLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfXN1Y2Nlc3NIYW5kbGVyKGUpe3JldHVybiBPbi5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1pbml0KHQ9ITAscil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPbi5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1yfSkpfWVuYWJsZUhhbmRsZXIoKXtPbi5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7T24uaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KGU9T24uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVCl7T24uaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e09uLmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07VW4uREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsVW49T249ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PW4/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixuKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxyLHMpOmkodCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30oW2U9Pnt9XSxVbik7Y2xhc3MgTW57Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxyKX0pKX1nZXREYXRhKHQpe3ZhciByLG47cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0ocj10aGlzLl9kYXRhKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXQodCkpJiZ2b2lkIDAhPT1uP246Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fWNvbnN0IExuPXNlbGY7bGV0IEhuO0xuLm9ubWVzc2FnZT0oe2RhdGE6dCxwb3J0czpyfSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbztjb25zdCBzPXJbMF07aWYodC50eXBlPT09Q258fEhuKXN3aXRjaCh0LnR5cGUpe2Nhc2UgQ246dHJ5e2NvbnN0IHI9T2JqZWN0LmFzc2lnbih7fSx0LmRhdGEpO0huPXlpZWxkKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IE1uLG49bmV3IFRuKHIpO3lpZWxkIG4uaW5pdGlhbGl6ZSh0KTtjb25zdCBpPW5ldyBSbihuKSxvPW4uZ2V0RGF0YUxheWVyKCkscz1Vbi5nZXRJbnN0YW5jZSgpO3JldHVybihudWxsPT1zP3ZvaWQgMDpzLmluaXQpJiYoeWllbGQgcy5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCkuYXR0YWNoVG9rZW4mJih0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIG4uZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpKSkpLHtkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntzLmRpc2FibGVIYW5kbGVyJiZzLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57cy5lbmFibGVIYW5kbGVyJiZzLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9Pm4uZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnlpZWxkIG4uZ2V0UEtDRUNvZGUoKX19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgbi5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixpO2xldCBhPSExO2NvbnN0IHU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IG4gb2ZbLi4ubnVsbCE9PShyPW51bGw9PT0oZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cj9yOltdLG51bGw9PXU/dm9pZCAwOnUuc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGk9bnVsbD09dD92b2lkIDA6dC51cmwpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN0YXJ0c1dpdGgobikpe2E9ITA7YnJlYWt9cmV0dXJuIGE/cy5yZXF1ZXN0KHQpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT57dmFyIHI7cmV0dXJuIDQwMT09PShudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzKT9uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT5zLnJlcXVlc3QodCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUi1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIiIsIiIsZSkpKSk6UHJvbWlzZS5yZWplY3QoZSl9KSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUi1JVjAyIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGh0dHBSZXF1ZXN0QWxsOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHIsaTtsZXQgYT0hMDtjb25zdCB1PXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBuIG9mIHQpe2xldCB0PSExO2Zvcihjb25zdCBzIG9mWy4uLm51bGwhPT0ocj1udWxsPT09KGU9eWllbGQgby5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PXI/cjpbXSxudWxsPT11P3ZvaWQgMDp1LnNlcnZlck9yaWdpbl0paWYobnVsbD09PShpPW4udXJsKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdGFydHNXaXRoKHMpKXt0PSEwO2JyZWFrfWlmKCF0KXthPSExO2JyZWFrfX1jb25zdCBjPVtdO3JldHVybiBhPyh0LmZvckVhY2goKGU9PntjLnB1c2gocy5yZXF1ZXN0KGUpKX0pKSwobnVsbD09cz92b2lkIDA6cy5hbGwpJiZzLmFsbChjKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+e3ZhciB0O3JldHVybiA0MDE9PT0obnVsbD09PSh0PW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnN0YXR1cyk/bi5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+cy5hbGwmJnMuYWxsKGMpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBbigiV09SS0VSX0NPUkUtSFJBLUVTMDEiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0QWxsIiwiIiwiIixlKSkpKTpQcm9taXNlLnJlamVjdChlKX0pKSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUkEtSVYwMiIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3QiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxpc0F1dGhlbnRpY2F0ZWQ6KCk9Pm4uaXNBdXRoZW50aWNhdGVkKCkscmVmcmVzaEFjY2Vzc1Rva2VuOigpPT5uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkscmVxdWVzdEFjY2Vzc1Rva2VuOih0LHIscyk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7cmV0dXJuIHMmJmUuZW5hYmxlUEtDRSYmKHlpZWxkIG4uc2V0UEtDRUNvZGUocykpLHQ/bi5yZXF1ZXN0QWNjZXNzVG9rZW4odCxudWxsIT1yP3I6IiIpLnRoZW4oKCgpPT4oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1SQVQxLU5GMDEiLCJ3b3JrZXItY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKX0pKSxyZXF1ZXN0Q3VzdG9tR3JhbnQ6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHIscyxhO2xldCB1PSEwLGM9ITE7Y29uc3QgaD15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtpZihudWxsPT10P3ZvaWQgMDp0LnRva2VuRW5kcG9pbnQpe3U9ITE7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShzPW51bGw9PT0ocj15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cz9zOltdLG51bGw9PWg/dm9pZCAwOmguc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGE9dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09YT92b2lkIDA6YS5zdGFydHNXaXRoKGUpKXtjPSEwO2JyZWFrfX1yZXR1cm4gdXx8Yz9uLnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdC5yZXR1cm5zU2Vzc2lvbj8oaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksbi5nZXRCYXNpY1VzZXJJbmZvKCkpOnJ9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLVJDRy1JVjAxIiwid29ya2VyLWNvcmUiLCJyZXF1ZXN0Q3VzdG9tR3JhbnQiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCB0b2tlbiBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+bi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4oaS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxQcm9taXNlLnJlc29sdmUoITApKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpLHNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s6ZT0+eyhudWxsPT1zP3ZvaWQgMDpzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl9LHNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LHNldFNlc3Npb25TdGF0ZTp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBvLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KX0pKSxzaWduT3V0OigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx5aWVsZCBuLnNpZ25PdXQoKX0pKSxzdGFydEF1dG9SZWZyZXNoVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2kuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksaS5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCl9KSksdXBkYXRlQ29uZmlnOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIG4udXBkYXRlQ29uZmlnKHQpfSkpfX0pKSkociksSG4uc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKEJuKSxIbi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHFuKSxIbi5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soam4pLEhuLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKHhuKSxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9hdXRoX3VybCI6SG4uZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT10P3ZvaWQgMDp0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpIbi5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PShuPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY29kZSxudWxsPT09KGk9bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zZXNzaW9uU3RhdGUsbnVsbD09PShvPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW8/dm9pZCAwOm8ucGtjZSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0IjpIbi5odHRwUmVxdWVzdCh0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImh0dHAtcmVxdWVzdC1hbGwiOkhuLmh0dHBSZXF1ZXN0QWxsKHQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2Uic2lnbi1vdXQiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uc2lnbk91dCgpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpIbi5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXZva2UtYWNjZXNzLXRva2VuIjpIbi5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImdldC1vaWRjLXNlcnZpY2UtZW5kcG9pbnRzIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRCYXNpY1VzZXJJbmZvKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWRlY29kZWQtaWQtdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0SURUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOkhuLmVuYWJsZUh0dHBIYW5kbGVyKCkscy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiZGlzYWJsZV9odHRwX2hhbmRsZXIiOkhuLmRpc2FibGVIdHRwSGFuZGxlcigpLHMucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X3NpZ25fb3V0X3VybCI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRTaWduT3V0VVJMKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4ucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKEhuLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInNldF9zZXNzaW9uX3N0YXRlIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLnNldFNlc3Npb25TdGF0ZShudWxsPT10P3ZvaWQgMDp0LmRhdGEpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4udXBkYXRlQ29uZmlnKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7ZGVmYXVsdDpudWxsPT1zfHxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IEFuKCJDTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJjbGllbnQud29ya2VyIiwib25tZXNzYWdlIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsYFRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICR7dC50eXBlfSwgaXMgaW52YWxpZC5gKSkpfWVsc2Ugcy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBBbigiQ0xJRU5UX1dPUktFUi1PTk1TRy1ORjAxIiwiY2xpZW50LndvcmtlciIsdC50eXBlLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpO2NvbnN0IGpuPSgpPT57TG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LHhuPWU9PntMbi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0scW49KCk9PntMbi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9LEJuPWU9Pntjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7ZGVsZXRlIHQudG9KU09OLExuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPXQ/dDoiIiksdHlwZToicmVxdWVzdC1lcnJvciJ9KX07cmV0dXJue319KCk7Cgo=",null,!1),new Worker(Dl,t)});const ql={checkSessionInterval:3,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:xl.SessionStorage};class _l{constructor(t){this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=t}_isInitialized(){return l(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let t=0;for(;!this._initialized;)10===t&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise(t=>setTimeout(t,1e3)),t++;return!0}))}_validateMethod(){return l(this,void 0,void 0,(function*(){return(yield this._isInitialized())&&!!(yield this.isAuthenticated())||Promise.reject()}))}
|
|
408
408
|
/**
|
|
409
409
|
* This method returns the instance of the singleton class.
|
|
410
410
|
*
|
|
@@ -819,4 +819,4 @@ constructor(t){Hl._instanceID?Hl._instanceID+=1:Hl._instanceID=0,this._dataLayer
|
|
|
819
819
|
* @memberof AsgardeoAuthClient
|
|
820
820
|
*
|
|
821
821
|
* @preserve
|
|
822
|
-
*/updateConfig(t){return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===xl.WebWorker){const i=this._client;yield i.updateConfig(t)}else{const i=this._client;yield i.updateConfig(t)}}))}}_l._instances=new Map;class $l extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}}).call(this,n(140))},function(t,i){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,i,n){var l=n(106),e=n(59);t.exports=function(t){var i=l(t,"string");return e(i)?i:String(i)}},function(t,i,n){var l,e,c=n(4),o=n(39),d=c.process,r=c.Deno,a=d&&d.versions||r&&r.version,u=a&&a.v8;u?e=(l=u.split("."))[0]<4?1:l[0]+l[1]:o&&(!(l=o.match(/Edge\/(\d+)/))||l[1]>=74)&&(l=o.match(/Chrome\/(\d+)/))&&(e=l[1]),t.exports=e&&+e},function(t,i,n){var l=n(146),e=n(112).concat("length","prototype");i.f=Object.getOwnPropertyNames||function(t){return l(t,e)}},function(t,i,n){var l=n(30),e=Math.max,c=Math.min;t.exports=function(t,i){var n=l(t);return n<0?e(n+i,0):c(n,i)}},function(t,i,n){var l=n(46);t.exports=Array.isArray||function(t){return"Array"==l(t)}},function(t,i,n){var l=n(76),e=n(75),c=n(7)("iterator");t.exports=function(t){if(null!=t)return t[c]||t["@@iterator"]||e[l(t)]}},function(t,i,n){"use strict";var l=n(47),e=n(14),c=n(38);t.exports=function(t,i,n){var o=l(i);o in t?e.f(t,o,c(0,n)):t[o]=n}},function(t,i,n){"use strict";var l=n(11),e=n(14),c=n(7),o=n(9),d=c("species");t.exports=function(t){var i=l(t),n=e.f;o&&i&&!i[d]&&n(i,d,{configurable:!0,get:function(){return this}})}},function(t,i,n){var l=n(0),e=n(70),c=n(8),o=n(16),d=n(14).f,r=n(49),a=n(115),u=n(69),Z=n(77),s=!1,b=u("meta"),m=0,h=Object.isExtensible||function(){return!0},I=function(t){d(t,b,{value:{objectID:"O"+m++,weakData:{}}})},p=t.exports={enable:function(){p.enable=function(){},s=!0;var t=r.f,i=[].splice,n={};n[b]=1,t(n).length&&(r.f=function(n){for(var l=t(n),e=0,c=l.length;e<c;e++)if(l[e]===b){i.call(l,e,1);break}return l},l({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:a.f}))},fastKey:function(t,i){if(!c(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,b)){if(!h(t))return"F";if(!i)return"E";I(t)}return t[b].objectID},getWeakData:function(t,i){if(!o(t,b)){if(!h(t))return!0;if(!i)return!1;I(t)}return t[b].weakData},onFreeze:function(t){return Z&&s&&h(t)&&!o(t,b)&&I(t),t}};e[b]=!0},function(t,i,n){"use strict";var l=n(61),e=n(3),c=n(1),o=n(26),d=n(18),r=n(36),a=n(7),u=n(17),Z=n(11)("Promise"),s=u.set,b=u.get,m=a("toStringTag");t.exports=function(t,i){var n=function(t){t.next=e(t.iterator.next),t.done=!1,t.ignoreArgument=!i,s(this,t)};return n.prototype=r(o(l.AsyncIterator.prototype),{next:function(n){var l=this,e=!!arguments.length;return new Z((function(o){var d=b(l),r=e?[d.ignoreArgument?void 0:n]:i?[]:[void 0];d.ignoreArgument=!1,o(d.done?{done:!0,value:void 0}:c(t.call(d,Z,r)))}))},return:function(t){var i=this;return new Z((function(n,l){var e=b(i),o=e.iterator;e.done=!0;var d=o.return;if(void 0===d)return n({done:!0,value:t});Z.resolve(d.call(o,t)).then((function(i){c(i),n({done:!0,value:t})}),l)}))},throw:function(t){var i=this;return new Z((function(n,l){var e=b(i),c=e.iterator;e.done=!0;var o=c.throw;if(void 0===o)return l(t);n(o.call(c,t))}))}}),i||d(n.prototype,m,"Generator"),n}},function(t,i,n){"use strict";var l=n(61),e=n(3),c=n(1),o=n(26),d=n(18),r=n(36),a=n(7),u=n(17),Z=u.set,s=u.get,b=a("toStringTag");t.exports=function(t,i){var n=function(t){t.next=e(t.iterator.next),t.done=!1,t.ignoreArg=!i,Z(this,t)};return n.prototype=r(o(l.Iterator.prototype),{next:function(n){var l=s(this),e=arguments.length?[l.ignoreArg?void 0:n]:i?[]:[void 0];l.ignoreArg=!1;var c=l.done?void 0:t.call(l,e);return{done:l.done,value:c}},return:function(t){var i=s(this),n=i.iterator;i.done=!0;var l=n.return;return{done:!0,value:void 0===l?t:c(l.call(n,t)).value}},throw:function(t){var i=s(this),n=i.iterator;i.done=!0;var l=n.throw;if(void 0===l)throw t;return l.call(n,t)}}),i||d(n.prototype,b,"Generator"),n}},function(t,i){t.exports=function(t){return Set.prototype.values.call(t)}},function(t,i,n){var l=n(11),e=n(141);t.exports=e?function(t){return"symbol"==typeof t}:function(t){var i=l("Symbol");return"function"==typeof i&&Object(t)instanceof i}},function(t,i,n){var l=n(146),e=n(112);t.exports=Object.keys||function(t){return l(t,e)}},function(t,i,n){var l=n(4);t.exports=l},function(t,i,n){"use strict";var l=n(121).IteratorPrototype,e=n(26),c=n(38),o=n(34),d=n(75),r=function(){return this};t.exports=function(t,i,n){var a=i+" Iterator";return t.prototype=e(l,{next:c(1,n)}),o(t,a,!1,!0),d[a]=r,t}},function(t,i,n){var l=n(46),e=n(4);t.exports="process"==l(e.process)},function(t,i,n){var l=n(22),e=n(15),c="["+n(93)+"]",o=RegExp("^"+c+c+"*"),d=RegExp(c+c+"*$"),r=function(t){return function(i){var n=e(l(i));return 1&t&&(n=n.replace(o,"")),2&t&&(n=n.replace(d,"")),n}};t.exports={start:r(1),end:r(2),trim:r(3)}},function(t,i,n){"use strict";var l=n(1);t.exports=function(){var t=l(this),i="";return t.global&&(i+="g"),t.ignoreCase&&(i+="i"),t.multiline&&(i+="m"),t.dotAll&&(i+="s"),t.unicode&&(i+="u"),t.sticky&&(i+="y"),i}},function(t,i,n){var l=n(30),e=n(15),c=n(22),o=function(t){return function(i,n){var o,d,r=e(c(i)),a=l(n),u=r.length;return a<0||a>=u?t?"":void 0:(o=r.charCodeAt(a))<55296||o>56319||a+1===u||(d=r.charCodeAt(a+1))<56320||d>57343?t?r.charAt(a):o:t?r.slice(a,a+2):d-56320+(o-55296<<10)+65536}};t.exports={codeAt:o(!1),charAt:o(!0)}},function(t,i,n){var l=n(2),e=n(46),c="".split;t.exports=l((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==e(t)?c.call(t,""):Object(t)}:Object},function(t,i,n){var l=n(5),e=n(83);(t.exports=function(t,i){return e[t]||(e[t]=void 0!==i?i:{})})("versions",[]).push({version:"3.17.2",mode:l?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},function(t,i){var n=0,l=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+l).toString(36)}},function(t,i){t.exports={}},function(t,i,n){var l=n(29),e=n(10),c=n(50),o=function(t){return function(i,n,o){var d,r=l(i),a=e(r.length),u=c(o,a);if(t&&n!=n){for(;a>u;)if((d=r[u++])!=d)return!0}else for(;a>u;u++)if((t||u in r)&&r[u]===n)return t||u||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,i,n){var l=n(2),e=/#|\.prototype\./,c=function(t,i){var n=d[o(t)];return n==a||n!=r&&("function"==typeof i?l(i):!!i)},o=c.normalize=function(t){return String(t).replace(e,".").toLowerCase()},d=c.data={},r=c.NATIVE="N",a=c.POLYFILL="P";t.exports=c},function(t,i,n){var l=n(197);t.exports=function(t,i){return new(l(t))(0===i?0:i)}},function(t,i,n){var l=n(2),e=n(7),c=n(48),o=e("species");t.exports=function(t){return c>=51||!l((function(){var i=[];return(i.constructor={})[o]=function(){return{foo:1}},1!==i[t](Boolean).foo}))}},function(t,i){t.exports={}},function(t,i,n){var l=n(119),e=n(46),c=n(7)("toStringTag"),o="Arguments"==e(function(){return arguments}());t.exports=l?e:function(t){var i,n,l;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,i){try{return t[i]}catch(t){}}(i=Object(t),c))?n:o?e(i):"Object"==(l=e(i))&&"function"==typeof i.callee?"Arguments":l}},function(t,i,n){var l=n(2);t.exports=!l((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,i,n){"use strict";var l=n(3),e=function(t){var i,n;this.promise=new t((function(t,l){if(void 0!==i||void 0!==n)throw TypeError("Bad Promise constructor");i=t,n=l})),this.resolve=l(i),this.reject=l(n)};t.exports.f=function(t){return new e(t)}},function(t,i,n){var l=n(8),e=n(46),c=n(7)("match");t.exports=function(t){var i;return l(t)&&(void 0!==(i=t[c])?!!i:"RegExp"==e(t))}},function(t,i,n){var l=n(30);t.exports=function(t){var i=l(t);if(i<0)throw RangeError("The argument can't be less than 0");return i}},function(t,i,n){"use strict";var l=n(3),e=n(1),c=n(11)("Promise"),o=[].push,d=function(t){var i=0==t,n=1==t,d=2==t,r=3==t;return function(t,a){e(t);var u=l(t.next),Z=i?[]:void 0;return i||l(a),new c((function(l,s){var b=function(i,n){try{var l=t.return;if(void 0!==l)return c.resolve(l.call(t)).then((function(){i(n)}),(function(t){s(t)}))}catch(t){return s(t)}i(n)},m=function(t){b(s,t)},h=function(){try{c.resolve(e(u.call(t))).then((function(t){try{if(e(t).done)l(i?Z:!r&&(d||void 0));else{var u=t.value;i?(o.call(Z,u),h()):c.resolve(a(u)).then((function(t){n?h():d?t?h():b(l,!1):t?b(l,r||u):h()}),m)}}catch(t){m(t)}}),m)}catch(t){m(t)}};h()}))}};t.exports={toArray:d(0),forEach:d(1),every:d(2),some:d(3),find:d(4)}},function(t,i,n){"use strict";var l={}.propertyIsEnumerable,e=Object.getOwnPropertyDescriptor,c=e&&!l.call({1:2},1);i.f=c?function(t){var i=e(this,t);return!!i&&i.enumerable}:l},function(t,i,n){var l=n(4),e=n(108),c=l["__core-js_shared__"]||e("__core-js_shared__",{});t.exports=c},function(t,i,n){var l=n(68),e=n(69),c=l("keys");t.exports=function(t){return c[t]||(c[t]=e(t))}},function(t,i,n){var l=n(1);t.exports=function(t,i,n){var e,c;l(t);try{if(void 0===(e=t.return)){if("throw"===i)throw n;return n}e=e.call(t)}catch(t){c=!0,e=t}if("throw"===i)throw n;if(c)throw e;return l(e),n}},function(t,i,n){var l=n(7)("iterator"),e=!1;try{var c=0,o={next:function(){return{done:!!c++}},return:function(){e=!0}};o[l]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,i){if(!i&&!e)return!1;var n=!1;try{var c={};c[l]=function(){return{next:function(){return{done:n=!0}}}},t(c)}catch(t){}return n}},function(t,i,n){"use strict";var l=n(29),e=n(35),c=n(75),o=n(17),d=n(120),r=o.set,a=o.getterFor("Array Iterator");t.exports=d(Array,"Array",(function(t,i){r(this,{type:"Array Iterator",target:l(t),index:0,kind:i})}),(function(){var t=a(this),i=t.target,n=t.kind,l=t.index++;return!i||l>=i.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:l,done:!1}:"values"==n?{value:i[l],done:!1}:{value:[l,i[l]],done:!1}}),"values"),c.Arguments=c.Array,e("keys"),e("values"),e("entries")},function(t,i,n){var l=n(3),e=n(13),c=n(67),o=n(10),d=function(t){return function(i,n,d,r){l(n);var a=e(i),u=c(a),Z=o(a.length),s=t?Z-1:0,b=t?-1:1;if(d<2)for(;;){if(s in u){r=u[s],s+=b;break}if(s+=b,t?s<0:Z<=s)throw TypeError("Reduce of empty array with no initial value")}for(;t?s>=0:Z>s;s+=b)s in u&&(r=n(r,u[s],s,a));return r}};t.exports={left:d(!1),right:d(!0)}},function(t,i,n){"use strict";var l=n(4),e=n(9),c=n(124),o=n(18),d=n(36),r=n(2),a=n(33),u=n(30),Z=n(10),s=n(158),b=n(241),m=n(27),h=n(42),I=n(49).f,p=n(14).f,G=n(116),y=n(34),g=n(17),X=g.get,V=g.set,W=l.ArrayBuffer,C=W,R=l.DataView,f=R&&R.prototype,S=Object.prototype,v=l.RangeError,Y=b.pack,K=b.unpack,J=function(t){return[255&t]},N=function(t){return[255&t,t>>8&255]},L=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},U=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},H=function(t){return Y(t,23,4)},x=function(t){return Y(t,52,8)},T=function(t,i){p(t.prototype,i,{get:function(){return X(this)[i]}})},k=function(t,i,n,l){var e=s(n),c=X(t);if(e+i>c.byteLength)throw v("Wrong index");var o=X(c.buffer).bytes,d=e+c.byteOffset,r=o.slice(d,d+i);return l?r:r.reverse()},F=function(t,i,n,l,e,c){var o=s(n),d=X(t);if(o+i>d.byteLength)throw v("Wrong index");for(var r=X(d.buffer).bytes,a=o+d.byteOffset,u=l(+e),Z=0;Z<i;Z++)r[a+Z]=u[c?Z:i-Z-1]};if(c){if(!r((function(){W(1)}))||!r((function(){new W(-1)}))||r((function(){return new W,new W(1.5),new W(NaN),"ArrayBuffer"!=W.name}))){for(var B,z=(C=function(t){return a(this,C),new W(s(t))}).prototype=W.prototype,w=I(W),A=0;w.length>A;)(B=w[A++])in C||o(C,B,W[B]);z.constructor=C}h&&m(f)!==S&&h(f,S);var P=new R(new C(2)),M=f.setInt8;P.setInt8(0,2147483648),P.setInt8(1,2147483649),!P.getInt8(0)&&P.getInt8(1)||d(f,{setInt8:function(t,i){M.call(this,t,i<<24>>24)},setUint8:function(t,i){M.call(this,t,i<<24>>24)}},{unsafe:!0})}else C=function(t){a(this,C,"ArrayBuffer");var i=s(t);V(this,{bytes:G.call(new Array(i),0),byteLength:i}),e||(this.byteLength=i)},R=function(t,i,n){a(this,R,"DataView"),a(t,C,"DataView");var l=X(t).byteLength,c=u(i);if(c<0||c>l)throw v("Wrong offset");if(c+(n=void 0===n?l-c:Z(n))>l)throw v("Wrong length");V(this,{buffer:t,byteLength:n,byteOffset:c}),e||(this.buffer=t,this.byteLength=n,this.byteOffset=c)},e&&(T(C,"byteLength"),T(R,"buffer"),T(R,"byteLength"),T(R,"byteOffset")),d(R.prototype,{getInt8:function(t){return k(this,1,t)[0]<<24>>24},getUint8:function(t){return k(this,1,t)[0]},getInt16:function(t){var i=k(this,2,t,arguments.length>1?arguments[1]:void 0);return(i[1]<<8|i[0])<<16>>16},getUint16:function(t){var i=k(this,2,t,arguments.length>1?arguments[1]:void 0);return i[1]<<8|i[0]},getInt32:function(t){return U(k(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return U(k(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return K(k(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return K(k(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,i){F(this,1,t,J,i)},setUint8:function(t,i){F(this,1,t,J,i)},setInt16:function(t,i){F(this,2,t,N,i,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,i){F(this,2,t,N,i,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,i){F(this,4,t,L,i,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,i){F(this,4,t,L,i,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,i){F(this,4,t,H,i,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,i){F(this,8,t,x,i,arguments.length>2?arguments[2]:void 0)}});y(C,"ArrayBuffer"),y(R,"DataView"),t.exports={ArrayBuffer:C,DataView:R}},function(t,i,n){"use strict";var l=n(0),e=n(4),c=n(72),o=n(25),d=n(55),r=n(6),a=n(33),u=n(8),Z=n(2),s=n(86),b=n(34),m=n(91);t.exports=function(t,i,n){var h=-1!==t.indexOf("Map"),I=-1!==t.indexOf("Weak"),p=h?"set":"add",G=e[t],y=G&&G.prototype,g=G,X={},V=function(t){var i=y[t];o(y,t,"add"==t?function(t){return i.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(I&&!u(t))&&i.call(this,0===t?0:t)}:"get"==t?function(t){return I&&!u(t)?void 0:i.call(this,0===t?0:t)}:"has"==t?function(t){return!(I&&!u(t))&&i.call(this,0===t?0:t)}:function(t,n){return i.call(this,0===t?0:t,n),this})};if(c(t,"function"!=typeof G||!(I||y.forEach&&!Z((function(){(new G).entries().next()})))))g=n.getConstructor(i,t,h,p),d.enable();else if(c(t,!0)){var W=new g,C=W[p](I?{}:-0,1)!=W,R=Z((function(){W.has(1)})),f=s((function(t){new G(t)})),S=!I&&Z((function(){for(var t=new G,i=5;i--;)t[p](i,i);return!t.has(-0)}));f||((g=i((function(i,n){a(i,g,t);var l=m(new G,i,g);return null!=n&&r(n,l[p],{that:l,AS_ENTRIES:h}),l}))).prototype=y,y.constructor=g),(R||S)&&(V("delete"),V("has"),h&&V("get")),(S||C)&&V(p),I&&y.clear&&delete y.clear}return X[t]=g,l({global:!0,forced:g!=G},X),b(g,t),I||n.setStrong(g,t,h),g}},function(t,i,n){var l=n(8),e=n(42);t.exports=function(t,i,n){var c,o;return e&&"function"==typeof(c=i.constructor)&&c!==n&&l(o=c.prototype)&&o!==n.prototype&&e(t,o),t}},function(t,i){var n=Math.expm1,l=Math.exp;t.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:l(t)-1}:n},function(t,i){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(t,i,n){"use strict";var l=n(5),e=n(4),c=n(2),o=n(123);t.exports=l||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete e[t]}}))},function(t,i){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,i,n){var l=n(2),e=n(4).RegExp;i.UNSUPPORTED_Y=l((function(){var t=e("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),i.BROKEN_CARET=l((function(){var t=e("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,i,n){"use strict";var l,e,c=n(15),o=n(65),d=n(96),r=n(68),a=n(26),u=n(17).get,Z=n(177),s=n(178),b=RegExp.prototype.exec,m=r("native-string-replace",String.prototype.replace),h=b,I=(l=/a/,e=/b*/g,b.call(l,"a"),b.call(e,"a"),0!==l.lastIndex||0!==e.lastIndex),p=d.UNSUPPORTED_Y||d.BROKEN_CARET,G=void 0!==/()??/.exec("")[1];(I||G||p||Z||s)&&(h=function(t){var i,n,l,e,d,r,Z,s=this,y=u(s),g=c(t),X=y.raw;if(X)return X.lastIndex=s.lastIndex,i=h.call(X,g),s.lastIndex=X.lastIndex,i;var V=y.groups,W=p&&s.sticky,C=o.call(s),R=s.source,f=0,S=g;if(W&&(-1===(C=C.replace("y","")).indexOf("g")&&(C+="g"),S=g.slice(s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==g.charAt(s.lastIndex-1))&&(R="(?: "+R+")",S=" "+S,f++),n=new RegExp("^(?:"+R+")",C)),G&&(n=new RegExp("^"+R+"$(?!\\s)",C)),I&&(l=s.lastIndex),e=b.call(W?n:s,S),W?e?(e.input=e.input.slice(f),e[0]=e[0].slice(f),e.index=s.lastIndex,s.lastIndex+=e[0].length):s.lastIndex=0:I&&e&&(s.lastIndex=s.global?e.index+e[0].length:l),G&&e&&e.length>1&&m.call(e[0],n,(function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(e[d]=void 0)})),e&&V)for(e.groups=r=a(null),d=0;d<V.length;d++)r[(Z=V[d])[0]]=e[Z[1]];return e}),t.exports=h},function(t,i,n){"use strict";n(132);var l=n(25),e=n(97),c=n(2),o=n(7),d=n(18),r=o("species"),a=RegExp.prototype;t.exports=function(t,i,n,u){var Z=o(t),s=!c((function(){var i={};return i[Z]=function(){return 7},7!=""[t](i)})),b=s&&!c((function(){var i=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[r]=function(){return n},n.flags="",n[Z]=/./[Z]),n.exec=function(){return i=!0,null},n[Z](""),!i}));if(!s||!b||n){var m=/./[Z],h=i(Z,""[t],(function(t,i,n,l,c){var o=i.exec;return o===e||o===a.exec?s&&!c?{done:!0,value:m.call(i,n,l)}:{done:!0,value:t.call(n,i,l)}:{done:!1}}));l(String.prototype,t,h[0]),l(a,Z,h[1])}u&&d(a[Z],"sham",!0)}},function(t,i,n){"use strict";var l=n(66).charAt;t.exports=function(t,i,n){return i+(n?l(t,i).length:1)}},function(t,i,n){var l=n(46),e=n(97);t.exports=function(t,i){var n=t.exec;if("function"==typeof n){var c=n.call(t,i);if("object"!=typeof c)throw TypeError("RegExp exec method returned something other than an Object or null");return c}if("RegExp"!==l(t))throw TypeError("RegExp#exec called on incompatible receiver");return e.call(t,i)}},function(t,i,n){var l=n(12),e=n(28),c=l.TYPED_ARRAY_CONSTRUCTOR,o=l.aTypedArrayConstructor;t.exports=function(t){return o(e(t,t[c]))}},function(t,i,n){var l=n(3);t.exports=function(t){return null==t?void 0:l(t)}},function(t,i,n){"use strict";var l=n(1),e=n(3);t.exports=function(){for(var t,i=l(this),n=e(i.delete),c=!0,o=0,d=arguments.length;o<d;o++)t=n.call(i,arguments[o]),c=c&&t;return!!c}},function(t,i,n){"use strict";var l=n(3),e=n(19),c=n(6);t.exports=function(t){var i,n,o,d,r=arguments.length,a=r>1?arguments[1]:void 0;return l(this),(i=void 0!==a)&&l(a),null==t?new this:(n=[],i?(o=0,d=e(a,r>2?arguments[2]:void 0,2),c(t,(function(t){n.push(d(t,o++))}))):c(t,n.push,{that:n}),new this(n))}},function(t,i,n){"use strict";t.exports=function(){for(var t=arguments.length,i=new Array(t);t--;)i[t]=arguments[t];return new this(i)}},function(t,i,n){var l=n(8),e=n(59),c=n(142),o=n(7)("toPrimitive");t.exports=function(t,i){if(!l(t)||e(t))return t;var n,d=t[o];if(void 0!==d){if(void 0===i&&(i="default"),n=d.call(t,i),!l(n)||e(n))return n;throw TypeError("Can't convert object to primitive value")}return void 0===i&&(i="number"),c(t,i)}},function(t,i,n){var l=n(48),e=n(2);t.exports=!!Object.getOwnPropertySymbols&&!e((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&l&&l<41}))},function(t,i,n){var l=n(4);t.exports=function(t,i){try{Object.defineProperty(l,t,{value:i,configurable:!0,writable:!0})}catch(n){l[t]=i}return i}},function(t,i,n){var l=n(4),e=n(8),c=l.document,o=e(c)&&e(c.createElement);t.exports=function(t){return o?c.createElement(t):{}}},function(t,i,n){var l=n(83),e=Function.toString;"function"!=typeof l.inspectSource&&(l.inspectSource=function(t){return e.call(t)}),t.exports=l.inspectSource},function(t,i,n){var l=n(11),e=n(49),c=n(113),o=n(1);t.exports=l("Reflect","ownKeys")||function(t){var i=e.f(o(t)),n=c.f;return n?i.concat(n(t)):i}},function(t,i){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,i){i.f=Object.getOwnPropertySymbols},function(t,i,n){var l=n(9),e=n(14),c=n(1),o=n(60);t.exports=l?Object.defineProperties:function(t,i){c(t);for(var n,l=o(i),d=l.length,r=0;d>r;)e.f(t,n=l[r++],i[n]);return t}},function(t,i,n){var l=n(29),e=n(49).f,c={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return o&&"[object Window]"==c.call(t)?function(t){try{return e(t)}catch(t){return o.slice()}}(t):e(l(t))}},function(t,i,n){"use strict";var l=n(13),e=n(50),c=n(10);t.exports=function(t){for(var i=l(this),n=c(i.length),o=arguments.length,d=e(o>1?arguments[1]:void 0,n),r=o>2?arguments[2]:void 0,a=void 0===r?n:e(r,n);a>d;)i[d++]=t;return i}},function(t,i,n){var l=n(1),e=n(85);t.exports=function(t,i,n,c){try{return c?i(l(n)[0],n[1]):i(n)}catch(i){e(t,"throw",i)}}},function(t,i,n){var l=n(7),e=n(75),c=l("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(e.Array===t||o[c]===t)}},function(t,i,n){var l={};l[n(7)("toStringTag")]="z",t.exports="[object z]"===String(l)},function(t,i,n){"use strict";var l=n(0),e=n(62),c=n(27),o=n(42),d=n(34),r=n(18),a=n(25),u=n(7),Z=n(5),s=n(75),b=n(121),m=b.IteratorPrototype,h=b.BUGGY_SAFARI_ITERATORS,I=u("iterator"),p=function(){return this};t.exports=function(t,i,n,u,b,G,y){e(n,i,u);var g,X,V,W=function(t){if(t===b&&v)return v;if(!h&&t in f)return f[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},C=i+" Iterator",R=!1,f=t.prototype,S=f[I]||f["@@iterator"]||b&&f[b],v=!h&&S||W(b),Y="Array"==i&&f.entries||S;if(Y&&(g=c(Y.call(new t)),m!==Object.prototype&&g.next&&(Z||c(g)===m||(o?o(g,m):"function"!=typeof g[I]&&r(g,I,p)),d(g,C,!0,!0),Z&&(s[C]=p))),"values"==b&&S&&"values"!==S.name&&(R=!0,v=function(){return S.call(this)}),Z&&!y||f[I]===v||r(f,I,v),s[i]=v,b)if(X={values:W("values"),keys:G?v:W("keys"),entries:W("entries")},y)for(V in X)(h||R||!(V in f))&&a(f,V,X[V]);else l({target:i,proto:!0,forced:h||R},X);return X}},function(t,i,n){"use strict";var l,e,c,o=n(2),d=n(27),r=n(18),a=n(16),u=n(7),Z=n(5),s=u("iterator"),b=!1;[].keys&&("next"in(c=[].keys())?(e=d(d(c)))!==Object.prototype&&(l=e):b=!0);var m=null==l||o((function(){var t={};return l[s].call(t)!==t}));m&&(l={}),Z&&!m||a(l,s)||r(l,s,(function(){return this})),t.exports={IteratorPrototype:l,BUGGY_SAFARI_ITERATORS:b}},function(t,i,n){var l=n(2);t.exports=!l((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,i,n){var l=n(39).match(/AppleWebKit\/(\d+)\./);t.exports=!!l&&+l[1]},function(t,i){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,i,n){var l=n(10),e=n(15),c=n(126),o=n(22),d=Math.ceil,r=function(t){return function(i,n,r){var a,u,Z=e(o(i)),s=Z.length,b=void 0===r?" ":e(r),m=l(n);return m<=s||""==b?Z:(a=m-s,(u=c.call(b,d(a/b.length))).length>a&&(u=u.slice(0,a)),t?Z+u:u+Z)}};t.exports={start:r(!1),end:r(!0)}},function(t,i,n){"use strict";var l=n(30),e=n(15),c=n(22);t.exports=function(t){var i=e(c(this)),n="",o=l(t);if(o<0||o==1/0)throw RangeError("Wrong number of repetitions");for(;o>0;(o>>>=1)&&(i+=i))1&o&&(n+=i);return n}},function(t,i,n){"use strict";var l=n(90),e=n(161);t.exports=l("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),e)},function(t,i){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,i,n){var l=n(8),e=Math.floor;t.exports=function(t){return!l(t)&&isFinite(t)&&e(t)===t}},function(t,i,n){var l=n(4),e=n(15),c=n(64).trim,o=n(93),d=l.parseInt,r=/^[+-]?0[Xx]/,a=8!==d(o+"08")||22!==d(o+"0x16");t.exports=a?function(t,i){var n=c(e(t));return d(n,i>>>0||(r.test(n)?16:10))}:d},function(t,i,n){var l,e,c,o,d=n(4),r=n(2),a=n(19),u=n(147),Z=n(109),s=n(171),b=n(63),m=d.setImmediate,h=d.clearImmediate,I=d.process,p=d.MessageChannel,G=d.Dispatch,y=0,g={};try{l=d.location}catch(t){}var X=function(t){if(g.hasOwnProperty(t)){var i=g[t];delete g[t],i()}},V=function(t){return function(){X(t)}},W=function(t){X(t.data)},C=function(t){d.postMessage(String(t),l.protocol+"//"+l.host)};m&&h||(m=function(t){for(var i=[],n=arguments.length,l=1;n>l;)i.push(arguments[l++]);return g[++y]=function(){("function"==typeof t?t:Function(t)).apply(void 0,i)},e(y),y},h=function(t){delete g[t]},b?e=function(t){I.nextTick(V(t))}:G&&G.now?e=function(t){G.now(V(t))}:p&&!s?(o=(c=new p).port2,c.port1.onmessage=W,e=a(o.postMessage,o,1)):d.addEventListener&&"function"==typeof postMessage&&!d.importScripts&&l&&"file:"!==l.protocol&&!r(C)?(e=C,d.addEventListener("message",W,!1)):e="onreadystatechange"in Z("script")?function(t){u.appendChild(Z("script")).onreadystatechange=function(){u.removeChild(this),X(t)}}:function(t){setTimeout(V(t),0)}),t.exports={set:m,clear:h}},function(t,i,n){"use strict";var l=n(0),e=n(97);l({target:"RegExp",proto:!0,forced:/./.exec!==e},{exec:e})},function(t,i,n){var l=n(79);t.exports=function(t){if(l(t))throw TypeError("The method doesn't accept regular expressions");return t}},function(t,i,n){var l=n(7)("match");t.exports=function(t){var i=/./;try{"/./"[t](i)}catch(n){try{return i[l]=!1,"/./"[t](i)}catch(t){}}return!1}},function(t,i,n){var l=n(2),e=n(93);t.exports=function(t){return l((function(){return!!e[t]()||"
"!="
"[t]()||e[t].name!==t}))}},function(t,i,n){var l=n(4),e=n(2),c=n(86),o=n(12).NATIVE_ARRAY_BUFFER_VIEWS,d=l.ArrayBuffer,r=l.Int8Array;t.exports=!o||!e((function(){r(1)}))||!e((function(){new r(-1)}))||!c((function(t){new r,new r(null),new r(1.5),new r(t)}),!0)||e((function(){return 1!==new r(new d(2),1,void 0).length}))},function(t,i,n){"use strict";var l,e=n(4),c=n(36),o=n(55),d=n(90),r=n(186),a=n(8),u=n(17).enforce,Z=n(144),s=!e.ActiveXObject&&"ActiveXObject"in e,b=Object.isExtensible,m=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},h=t.exports=d("WeakMap",m,r);if(Z&&s){l=r.getConstructor(m,"WeakMap",!0),o.enable();var I=h.prototype,p=I.delete,G=I.has,y=I.get,g=I.set;c(I,{delete:function(t){if(a(t)&&!b(t)){var i=u(this);return i.frozen||(i.frozen=new l),p.call(this,t)||i.frozen.delete(t)}return p.call(this,t)},has:function(t){if(a(t)&&!b(t)){var i=u(this);return i.frozen||(i.frozen=new l),G.call(this,t)||i.frozen.has(t)}return G.call(this,t)},get:function(t){if(a(t)&&!b(t)){var i=u(this);return i.frozen||(i.frozen=new l),G.call(this,t)?y.call(this,t):i.frozen.get(t)}return y.call(this,t)},set:function(t,i){if(a(t)&&!b(t)){var n=u(this);n.frozen||(n.frozen=new l),G.call(this,t)?g.call(this,t,i):n.frozen.set(t,i)}else g.call(this,t,i);return this}})}},function(t,i,n){"use strict";var l=n(1);t.exports=function(t,i){var n,e=l(this),c=arguments.length>2?arguments[2]:void 0;if("function"!=typeof i&&"function"!=typeof c)throw TypeError("At least one callback required");return e.has(t)?(n=e.get(t),"function"==typeof i&&(n=i(n),e.set(t,n))):"function"==typeof c&&(n=c(),e.set(t,n)),n}},function(t,i,n){"use strict";var l=n(17),e=n(62),c=n(16),o=n(60),d=n(13),r=l.set,a=l.getterFor("Object Iterator");t.exports=e((function(t,i){var n=d(t);r(this,{type:"Object Iterator",mode:i,object:n,keys:o(n),index:0})}),"Object",(function(){for(var t=a(this),i=t.keys;;){if(null===i||t.index>=i.length)return t.object=t.keys=null,{value:void 0,done:!0};var n=i[t.index++],l=t.object;if(c(l,n)){switch(t.mode){case"keys":return{value:n,done:!1};case"values":return{value:l[n],done:!1}}return{value:[n,l[n]],done:!1}}}}))},function(t,i){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,i,n){var l=n(107);t.exports=l&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,i,n){var l=n(8);t.exports=function(t,i){var n,e;if("string"===i&&"function"==typeof(n=t.toString)&&!l(e=n.call(t)))return e;if("function"==typeof(n=t.valueOf)&&!l(e=n.call(t)))return e;if("string"!==i&&"function"==typeof(n=t.toString)&&!l(e=n.call(t)))return e;throw TypeError("Can't convert object to primitive value")}},function(t,i,n){var l=n(9),e=n(2),c=n(109);t.exports=!l&&!e((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,i,n){var l=n(4),e=n(110),c=l.WeakMap;t.exports="function"==typeof c&&/native code/.test(e(c))},function(t,i,n){var l=n(16),e=n(111),c=n(24),o=n(14);t.exports=function(t,i){for(var n=e(i),d=o.f,r=c.f,a=0;a<n.length;a++){var u=n[a];l(t,u)||d(t,u,r(i,u))}}},function(t,i,n){var l=n(16),e=n(29),c=n(71).indexOf,o=n(70);t.exports=function(t,i){var n,d=e(t),r=0,a=[];for(n in d)!l(o,n)&&l(d,n)&&a.push(n);for(;i.length>r;)l(d,n=i[r++])&&(~c(a,n)||a.push(n));return a}},function(t,i,n){var l=n(11);t.exports=l("document","documentElement")},function(t,i,n){var l=n(7);i.f=l},function(t,i,n){"use strict";var l=n(13),e=n(50),c=n(10),o=Math.min;t.exports=[].copyWithin||function(t,i){var n=l(this),d=c(n.length),r=e(t,d),a=e(i,d),u=arguments.length>2?arguments[2]:void 0,Z=o((void 0===u?d:e(u,d))-a,d-r),s=1;for(a<r&&r<a+Z&&(s=-1,a+=Z-1,r+=Z-1);Z-- >0;)a in n?n[r]=n[a]:delete n[r],r+=s,a+=s;return n}},function(t,i,n){"use strict";var l=n(51),e=n(10),c=n(19),o=function(t,i,n,d,r,a,u,Z){for(var s,b=r,m=0,h=!!u&&c(u,Z,3);m<d;){if(m in n){if(s=h?h(n[m],m,i):n[m],a>0&&l(s))b=o(t,i,s,e(s.length),b,a-1)-1;else{if(b>=9007199254740991)throw TypeError("Exceed the acceptable array length");t[b]=s}b++}m++}return b};t.exports=o},function(t,i,n){"use strict";var l=n(23).forEach,e=n(40)("forEach");t.exports=e?[].forEach:function(t){return l(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,i,n){"use strict";var l=n(19),e=n(13),c=n(117),o=n(118),d=n(10),r=n(53),a=n(41),u=n(52);t.exports=function(t){var i,n,Z,s,b,m,h=e(t),I="function"==typeof this?this:Array,p=arguments.length,G=p>1?arguments[1]:void 0,y=void 0!==G,g=u(h),X=0;if(y&&(G=l(G,p>2?arguments[2]:void 0,2)),null==g||I==Array&&o(g))for(n=new I(i=d(h.length));i>X;X++)m=y?G(h[X],X):h[X],r(n,X,m);else for(b=(s=a(h,g)).next,n=new I;!(Z=b.call(s)).done;X++)m=y?c(s,G,[Z.value,X],!0):Z.value,r(n,X,m);return n.length=X,n}},function(t,i,n){var l=n(8);t.exports=function(t){if(!l(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,i,n){"use strict";var l=n(29),e=n(30),c=n(10),o=n(40),d=Math.min,r=[].lastIndexOf,a=!!r&&1/[1].lastIndexOf(1,-0)<0,u=o("lastIndexOf"),Z=a||!u;t.exports=Z?function(t){if(a)return r.apply(this,arguments)||0;var i=l(this),n=c(i.length),o=n-1;for(arguments.length>1&&(o=d(o,e(arguments[1]))),o<0&&(o=n+o);o>=0;o--)if(o in i&&i[o]===t)return o||0;return-1}:r},function(t,i){var n=Math.floor,l=function(t,i){var o=t.length,d=n(o/2);return o<8?e(t,i):c(l(t.slice(0,d),i),l(t.slice(d),i),i)},e=function(t,i){for(var n,l,e=t.length,c=1;c<e;){for(l=c,n=t[c];l&&i(t[l-1],n)>0;)t[l]=t[--l];l!==c++&&(t[l]=n)}return t},c=function(t,i,n){for(var l=t.length,e=i.length,c=0,o=0,d=[];c<l||o<e;)c<l&&o<e?d.push(n(t[c],i[o])<=0?t[c++]:i[o++]):d.push(c<l?t[c++]:i[o++]);return d};t.exports=l},function(t,i,n){var l=n(39).match(/firefox\/(\d+)/i);t.exports=!!l&&+l[1]},function(t,i,n){var l=n(39);t.exports=/MSIE|Trident/.test(l)},function(t,i,n){var l=n(30),e=n(10);t.exports=function(t){if(void 0===t)return 0;var i=l(t),n=e(i);if(i!==n)throw RangeError("Wrong length or index");return n}},function(t,i,n){"use strict";var l=n(3),e=n(8),c=[].slice,o={},d=function(t,i,n){if(!(i in o)){for(var l=[],e=0;e<i;e++)l[e]="a["+e+"]";o[i]=Function("C,a","return new C("+l.join(",")+")")}return o[i](t,n)};t.exports=Function.bind||function(t){var i=l(this),n=c.call(arguments,1),o=function(){var l=n.concat(c.call(arguments));return this instanceof o?d(i,l.length,l):i.apply(t,l)};return e(i.prototype)&&(o.prototype=i.prototype),o}},function(t,i,n){n(0)({global:!0},{globalThis:n(4)})},function(t,i,n){"use strict";var l=n(14).f,e=n(26),c=n(36),o=n(19),d=n(33),r=n(6),a=n(120),u=n(54),Z=n(9),s=n(55).fastKey,b=n(17),m=b.set,h=b.getterFor;t.exports={getConstructor:function(t,i,n,a){var u=t((function(t,l){d(t,u,i),m(t,{type:i,index:e(null),first:void 0,last:void 0,size:0}),Z||(t.size=0),null!=l&&r(l,t[a],{that:t,AS_ENTRIES:n})})),b=h(i),I=function(t,i,n){var l,e,c=b(t),o=p(t,i);return o?o.value=n:(c.last=o={index:e=s(i,!0),key:i,value:n,previous:l=c.last,next:void 0,removed:!1},c.first||(c.first=o),l&&(l.next=o),Z?c.size++:t.size++,"F"!==e&&(c.index[e]=o)),t},p=function(t,i){var n,l=b(t),e=s(i);if("F"!==e)return l.index[e];for(n=l.first;n;n=n.next)if(n.key==i)return n};return c(u.prototype,{clear:function(){for(var t=b(this),i=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete i[n.index],n=n.next;t.first=t.last=void 0,Z?t.size=0:this.size=0},delete:function(t){var i=b(this),n=p(this,t);if(n){var l=n.next,e=n.previous;delete i.index[n.index],n.removed=!0,e&&(e.next=l),l&&(l.previous=e),i.first==n&&(i.first=l),i.last==n&&(i.last=e),Z?i.size--:this.size--}return!!n},forEach:function(t){for(var i,n=b(this),l=o(t,arguments.length>1?arguments[1]:void 0,3);i=i?i.next:n.first;)for(l(i.value,i.key,this);i&&i.removed;)i=i.previous},has:function(t){return!!p(this,t)}}),c(u.prototype,n?{get:function(t){var i=p(this,t);return i&&i.value},set:function(t,i){return I(this,0===t?0:t,i)}}:{add:function(t){return I(this,t=0===t?0:t,t)}}),Z&&l(u.prototype,"size",{get:function(){return b(this).size}}),u},setStrong:function(t,i,n){var l=i+" Iterator",e=h(i),c=h(l);a(t,i,(function(t,i){m(this,{type:l,target:t,state:e(t),kind:i,last:void 0})}),(function(){for(var t=c(this),i=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==i?{value:n.key,done:!1}:"values"==i?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(i)}}},function(t,i){var n=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:n(1+t)}},function(t,i,n){var l=n(128),e=Math.abs,c=Math.pow,o=c(2,-52),d=c(2,-23),r=c(2,127)*(2-d),a=c(2,-126);t.exports=Math.fround||function(t){var i,n,c=e(t),u=l(t);return c<a?u*(c/a/d+1/o-1/o)*a*d:(n=(i=(1+d/o)*c)-(i-c))>r||n!=n?u*(1/0):u*n}},function(t,i,n){var l=n(4).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&l(t)}},function(t,i,n){var l=n(4),e=n(15),c=n(64).trim,o=n(93),d=l.parseFloat,r=1/d(o+"-0")!=-1/0;t.exports=r?function(t){var i=c(e(t)),n=d(i);return 0===n&&"-"==i.charAt(0)?-0:n}:d},function(t,i){var n=1..valueOf;t.exports=function(t){return n.call(t)}},function(t,i,n){"use strict";var l=n(9),e=n(2),c=n(60),o=n(113),d=n(82),r=n(13),a=n(67),u=Object.assign,Z=Object.defineProperty;t.exports=!u||e((function(){if(l&&1!==u({b:1},u(Z({},"a",{enumerable:!0,get:function(){Z(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},i={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){i[t]=t})),7!=u({},t)[n]||"abcdefghijklmnopqrst"!=c(u({},i)).join("")}))?function(t,i){for(var n=r(t),e=arguments.length,u=1,Z=o.f,s=d.f;e>u;)for(var b,m=a(arguments[u++]),h=Z?c(m).concat(Z(m)):c(m),I=h.length,p=0;I>p;)b=h[p++],l&&!s.call(m,b)||(n[b]=m[b]);return n}:u},function(t,i,n){var l=n(9),e=n(60),c=n(29),o=n(82).f,d=function(t){return function(i){for(var n,d=c(i),r=e(d),a=r.length,u=0,Z=[];a>u;)n=r[u++],l&&!o.call(d,n)||Z.push(t?[n,d[n]]:d[n]);return Z}};t.exports={entries:d(!0),values:d(!1)}},function(t,i){t.exports=Object.is||function(t,i){return t===i?0!==t||1/t==1/i:t!=t&&i!=i}},function(t,i,n){var l=n(4);t.exports=l.Promise},function(t,i,n){var l=n(39);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(l)},function(t,i,n){var l,e,c,o,d,r,a,u,Z=n(4),s=n(24).f,b=n(131).set,m=n(171),h=n(316),I=n(317),p=n(63),G=Z.MutationObserver||Z.WebKitMutationObserver,y=Z.document,g=Z.process,X=Z.Promise,V=s(Z,"queueMicrotask"),W=V&&V.value;W||(l=function(){var t,i;for(p&&(t=g.domain)&&t.exit();e;){i=e.fn,e=e.next;try{i()}catch(t){throw e?o():c=void 0,t}}c=void 0,t&&t.enter()},m||p||I||!G||!y?!h&&X&&X.resolve?((a=X.resolve(void 0)).constructor=X,u=a.then,o=function(){u.call(a,l)}):o=p?function(){g.nextTick(l)}:function(){b.call(Z,l)}:(d=!0,r=y.createTextNode(""),new G(l).observe(r,{characterData:!0}),o=function(){r.data=d=!d})),t.exports=W||function(t){var i={fn:t,next:void 0};c&&(c.next=i),e||(e=i,o()),c=i}},function(t,i,n){var l=n(1),e=n(8),c=n(78);t.exports=function(t,i){if(l(t),e(i)&&i.constructor===t)return i;var n=c.f(t);return(0,n.resolve)(i),n.promise}},function(t,i,n){var l=n(4);t.exports=function(t,i){var n=l.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,i))}},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(78),o=n(95),d=n(6);l({target:"Promise",stat:!0},{allSettled:function(t){var i=this,n=c.f(i),l=n.resolve,r=n.reject,a=o((function(){var n=e(i.resolve),c=[],o=0,r=1;d(t,(function(t){var e=o++,d=!1;c.push(void 0),r++,n.call(i,t).then((function(t){d||(d=!0,c[e]={status:"fulfilled",value:t},--r||l(c))}),(function(t){d||(d=!0,c[e]={status:"rejected",reason:t},--r||l(c))}))})),--r||l(c)}));return a.error&&r(a.value),n.promise}})},function(t,i,n){var l=n(16);t.exports=function(t){return void 0!==t&&(l(t,"value")||l(t,"writable"))}},function(t,i,n){var l=n(2),e=n(4).RegExp;t.exports=l((function(){var t=e(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,i,n){var l=n(2),e=n(4).RegExp;t.exports=l((function(){var t=e("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,i,n){"use strict";var l=n(90),e=n(161);t.exports=l("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),e)},function(t,i,n){"use strict";var l=n(66).charAt,e=n(15),c=n(17),o=n(120),d=c.set,r=c.getterFor("String Iterator");o(String,"String",(function(t){d(this,{type:"String Iterator",string:e(t),index:0})}),(function(){var t,i=r(this),n=i.string,e=i.index;return e>=n.length?{value:void 0,done:!0}:(t=l(n,e),i.index+=t.length,{value:t,done:!1})}))},function(t,i,n){"use strict";var l=n(0),e=n(62),c=n(22),o=n(10),d=n(15),r=n(3),a=n(1),u=n(46),Z=n(79),s=n(65),b=n(18),m=n(2),h=n(7),I=n(28),p=n(99),G=n(17),y=n(5),g=h("matchAll"),X=G.set,V=G.getterFor("RegExp String Iterator"),W=RegExp.prototype,C=W.exec,R="".matchAll,f=!!R&&!m((function(){"a".matchAll(/./)})),S=e((function(t,i,n,l){X(this,{type:"RegExp String Iterator",regexp:t,string:i,global:n,unicode:l,done:!1})}),"RegExp String",(function(){var t=V(this);if(t.done)return{value:void 0,done:!0};var i=t.regexp,n=t.string,l=function(t,i){var n,l=t.exec;if("function"==typeof l){if("object"!=typeof(n=l.call(t,i)))throw TypeError("Incorrect exec result");return n}return C.call(t,i)}(i,n);return null===l?{value:void 0,done:t.done=!0}:t.global?(""===d(l[0])&&(i.lastIndex=p(n,o(i.lastIndex),t.unicode)),{value:l,done:!1}):(t.done=!0,{value:l,done:!1})})),v=function(t){var i,n,l,e,c,r,u=a(this),Z=d(t);return i=I(u,RegExp),void 0===(n=u.flags)&&u instanceof RegExp&&!("flags"in W)&&(n=s.call(u)),l=void 0===n?"":d(n),e=new i(i===RegExp?u.source:u,l),c=!!~l.indexOf("g"),r=!!~l.indexOf("u"),e.lastIndex=o(u.lastIndex),new S(e,Z,c,r)};l({target:"String",proto:!0,forced:f},{matchAll:function(t){var i,n,l,e=c(this);if(null!=t){if(Z(t)&&!~d(c("flags"in W?t.flags:s.call(t))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(f)return R.apply(e,arguments);if(void 0===(n=t[g])&&y&&"RegExp"==u(t)&&(n=v),null!=n)return r(n).call(t,e)}else if(f)return R.apply(e,arguments);return i=d(e),l=new RegExp(t,"g"),y?v.call(l,i):l[g](i)}}),y||g in W||b(W,g,v)},function(t,i,n){var l=n(39);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(l)},function(t,i,n){var l=n(13),e=Math.floor,c="".replace,o=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,d=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,i,n,r,a,u){var Z=n+t.length,s=r.length,b=d;return void 0!==a&&(a=l(a),b=o),c.call(u,b,(function(l,c){var o;switch(c.charAt(0)){case"$":return"$";case"&":return t;case"`":return i.slice(0,n);case"'":return i.slice(Z);case"<":o=a[c.slice(1,-1)];break;default:var d=+c;if(0===d)return l;if(d>s){var u=e(d/10);return 0===u?l:u<=s?void 0===r[u-1]?c.charAt(1):r[u-1]+c.charAt(1):l}o=r[d-1]}return void 0===o?"":o}))}},function(t,i,n){var l=n(80);t.exports=function(t,i){var n=l(t);if(n%i)throw RangeError("Wrong offset");return n}},function(t,i,n){var l=n(13),e=n(10),c=n(41),o=n(52),d=n(118),r=n(19),a=n(12).aTypedArrayConstructor;t.exports=function(t){var i,n,u,Z,s,b,m=l(t),h=arguments.length,I=h>1?arguments[1]:void 0,p=void 0!==I,G=o(m);if(null!=G&&!d(G))for(b=(s=c(m,G)).next,m=[];!(Z=b.call(s)).done;)m.push(Z.value);for(p&&h>2&&(I=r(I,arguments[2],2)),n=e(m.length),u=new(a(this))(n),i=0;n>i;i++)u[i]=p?I(m[i],i):m[i];return u}},function(t,i,n){"use strict";var l=n(36),e=n(55).getWeakData,c=n(1),o=n(8),d=n(33),r=n(6),a=n(23),u=n(16),Z=n(17),s=Z.set,b=Z.getterFor,m=a.find,h=a.findIndex,I=0,p=function(t){return t.frozen||(t.frozen=new G)},G=function(){this.entries=[]},y=function(t,i){return m(t.entries,(function(t){return t[0]===i}))};G.prototype={get:function(t){var i=y(this,t);if(i)return i[1]},has:function(t){return!!y(this,t)},set:function(t,i){var n=y(this,t);n?n[1]=i:this.entries.push([t,i])},delete:function(t){var i=h(this.entries,(function(i){return i[0]===t}));return~i&&this.entries.splice(i,1),!!~i}},t.exports={getConstructor:function(t,i,n,a){var Z=t((function(t,l){d(t,Z,i),s(t,{type:i,id:I++,frozen:void 0}),null!=l&&r(l,t[a],{that:t,AS_ENTRIES:n})})),m=b(i),h=function(t,i,n){var l=m(t),o=e(c(i),!0);return!0===o?p(l).set(i,n):o[l.id]=n,t};return l(Z.prototype,{delete:function(t){var i=m(this);if(!o(t))return!1;var n=e(t);return!0===n?p(i).delete(t):n&&u(n,i.id)&&delete n[i.id]},has:function(t){var i=m(this);if(!o(t))return!1;var n=e(t);return!0===n?p(i).has(t):n&&u(n,i.id)}}),l(Z.prototype,n?{get:function(t){var i=m(this);if(o(t)){var n=e(t);return!0===n?p(i).get(t):n?n[i.id]:void 0}},set:function(t,i){return h(this,t,i)}}:{add:function(t){return h(this,t,!0)}}),Z}}},function(t,i,n){var l=n(188),e=n(3),c=n(1),o=n(41),d=n(102),r=n(7)("asyncIterator");t.exports=function(t,i){var n=arguments.length<2?d(t[r]):i;return void 0===n?new l(o(t)):c(e(n).call(t))}},function(t,i,n){"use strict";var l=n(61),e=n(1),c=n(26),o=n(102),d=n(36),r=n(17),a=n(11)("Promise"),u=r.set,Z=r.get,s=function(t,i,n){var l=t.done;a.resolve(t.value).then((function(t){i({done:l,value:t})}),n)},b=function(t){u(this,{iterator:e(t),next:t.next})};b.prototype=d(c(l.AsyncIterator.prototype),{next:function(t){var i=Z(this),n=!!arguments.length;return new a((function(l,c){var o=e(i.next.apply(i.iterator,n?[t]:[]));s(o,l,c)}))},return:function(t){var i=Z(this).iterator,n=!!arguments.length;return new a((function(l,c){var d=o(i.return);if(void 0===d)return l({done:!0,value:t});var r=e(d.apply(i,n?[t]:[]));s(r,l,c)}))},throw:function(t){var i=Z(this).iterator,n=!!arguments.length;return new a((function(l,c){var d=o(i.throw);if(void 0===d)return c(t);var r=e(d.apply(i,n?[t]:[]));s(r,l,c)}))}}),t.exports=b},function(t,i,n){var l=n(127),e=n(137),c=n(26),o=n(8),d=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};d.prototype.get=function(t,i){return this[t]||(this[t]=i())},d.prototype.next=function(t,i,n){var c=n?this.objectsByIndex[t]||(this.objectsByIndex[t]=new e):this.primitives||(this.primitives=new l),o=c.get(i);return o||c.set(i,o=new d),o};var r=new d;t.exports=function(){var t,i,n=r,l=arguments.length;for(t=0;t<l;t++)o(i=arguments[t])&&(n=n.next(t,i,!0));if(this===Object&&n===r)throw TypeError("Composite keys must contain a non-primitive component");for(t=0;t<l;t++)o(i=arguments[t])||(n=n.next(t,i,!1));return n}},function(t,i){t.exports=Math.scale||function(t,i,n,l,e){return 0===arguments.length||t!=t||i!=i||n!=n||l!=l||e!=e?NaN:t===1/0||t===-1/0?t:(t-i)*(e-l)/(n-i)+l}},function(t,i,n){"use strict";var l=n(1),e=n(3);t.exports=function(){for(var t=l(this),i=e(t.add),n=0,c=arguments.length;n<c;n++)i.call(t,arguments[n]);return t}},function(t,i){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,i,n){var l=n(2),e=n(7),c=n(5),o=e("iterator");t.exports=!l((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),i=t.searchParams,n="";return t.pathname="c%20d",i.forEach((function(t,l){i.delete("b"),n+=l+t})),c&&!t.toJSON||!i.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==i.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!i[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},function(t,i,n){"use strict";n(87);var l=n(0),e=n(11),c=n(193),o=n(25),d=n(36),r=n(34),a=n(62),u=n(17),Z=n(33),s=n(16),b=n(19),m=n(76),h=n(1),I=n(8),p=n(15),G=n(26),y=n(38),g=n(41),X=n(52),V=n(7),W=e("fetch"),C=e("Request"),R=C&&C.prototype,f=e("Headers"),S=V("iterator"),v=u.set,Y=u.getterFor("URLSearchParams"),K=u.getterFor("URLSearchParamsIterator"),J=/\+/g,N=Array(4),L=function(t){return N[t-1]||(N[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},U=function(t){try{return decodeURIComponent(t)}catch(i){return t}},H=function(t){var i=t.replace(J," "),n=4;try{return decodeURIComponent(i)}catch(t){for(;n;)i=i.replace(L(n--),U);return i}},x=/[!'()~]|%20/g,T={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},k=function(t){return T[t]},F=function(t){return encodeURIComponent(t).replace(x,k)},B=function(t,i){if(i)for(var n,l,e=i.split("&"),c=0;c<e.length;)(n=e[c++]).length&&(l=n.split("="),t.push({key:H(l.shift()),value:H(l.join("="))}))},z=function(t){this.entries.length=0,B(this.entries,t)},w=function(t,i){if(t<i)throw TypeError("Not enough arguments")},A=a((function(t,i){v(this,{type:"URLSearchParamsIterator",iterator:g(Y(t).entries),kind:i})}),"Iterator",(function(){var t=K(this),i=t.kind,n=t.iterator.next(),l=n.value;return n.done||(n.value="keys"===i?l.key:"values"===i?l.value:[l.key,l.value]),n})),P=function(){Z(this,P,"URLSearchParams");var t,i,n,l,e,c,o,d,r,a=arguments.length>0?arguments[0]:void 0,u=this,b=[];if(v(u,{type:"URLSearchParams",entries:b,updateURL:function(){},updateSearchParams:z}),void 0!==a)if(I(a))if("function"==typeof(t=X(a)))for(n=(i=g(a,t)).next;!(l=n.call(i)).done;){if((o=(c=(e=g(h(l.value))).next).call(e)).done||(d=c.call(e)).done||!c.call(e).done)throw TypeError("Expected sequence with length 2");b.push({key:p(o.value),value:p(d.value)})}else for(r in a)s(a,r)&&b.push({key:r,value:p(a[r])});else B(b,"string"==typeof a?"?"===a.charAt(0)?a.slice(1):a:p(a))},M=P.prototype;if(d(M,{append:function(t,i){w(arguments.length,2);var n=Y(this);n.entries.push({key:p(t),value:p(i)}),n.updateURL()},delete:function(t){w(arguments.length,1);for(var i=Y(this),n=i.entries,l=p(t),e=0;e<n.length;)n[e].key===l?n.splice(e,1):e++;i.updateURL()},get:function(t){w(arguments.length,1);for(var i=Y(this).entries,n=p(t),l=0;l<i.length;l++)if(i[l].key===n)return i[l].value;return null},getAll:function(t){w(arguments.length,1);for(var i=Y(this).entries,n=p(t),l=[],e=0;e<i.length;e++)i[e].key===n&&l.push(i[e].value);return l},has:function(t){w(arguments.length,1);for(var i=Y(this).entries,n=p(t),l=0;l<i.length;)if(i[l++].key===n)return!0;return!1},set:function(t,i){w(arguments.length,1);for(var n,l=Y(this),e=l.entries,c=!1,o=p(t),d=p(i),r=0;r<e.length;r++)(n=e[r]).key===o&&(c?e.splice(r--,1):(c=!0,n.value=d));c||e.push({key:o,value:d}),l.updateURL()},sort:function(){var t,i,n,l=Y(this),e=l.entries,c=e.slice();for(e.length=0,n=0;n<c.length;n++){for(t=c[n],i=0;i<n;i++)if(e[i].key>t.key){e.splice(i,0,t);break}i===n&&e.push(t)}l.updateURL()},forEach:function(t){for(var i,n=Y(this).entries,l=b(t,arguments.length>1?arguments[1]:void 0,3),e=0;e<n.length;)l((i=n[e++]).value,i.key,this)},keys:function(){return new A(this,"keys")},values:function(){return new A(this,"values")},entries:function(){return new A(this,"entries")}},{enumerable:!0}),o(M,S,M.entries),o(M,"toString",(function(){for(var t,i=Y(this).entries,n=[],l=0;l<i.length;)t=i[l++],n.push(F(t.key)+"="+F(t.value));return n.join("&")}),{enumerable:!0}),r(P,"URLSearchParams"),l({global:!0,forced:!c},{URLSearchParams:P}),!c&&"function"==typeof f){var Q=function(t){if(I(t)){var i,n=t.body;if("URLSearchParams"===m(n))return(i=t.headers?new f(t.headers):new f).has("content-type")||i.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),G(t,{body:y(0,String(n)),headers:y(0,i)})}return t};if("function"==typeof W&&l({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return W(t,arguments.length>1?Q(arguments[1]):{})}}),"function"==typeof C){var j=function(t){return Z(this,j,"Request"),new C(t,arguments.length>1?Q(arguments[1]):{})};R.constructor=j,j.prototype=R,l({global:!0,forced:!0},{Request:j})}}t.exports={URLSearchParams:P,getState:Y}},function(t,n){t.exports=i},function(t,i,n){"use strict";var l=n(0),e=n(4),c=n(11),o=n(5),d=n(9),r=n(107),a=n(2),u=n(16),Z=n(51),s=n(8),b=n(59),m=n(1),h=n(13),I=n(29),p=n(47),G=n(15),y=n(38),g=n(26),X=n(60),V=n(49),W=n(115),C=n(113),R=n(24),f=n(14),S=n(82),v=n(18),Y=n(25),K=n(68),J=n(84),N=n(70),L=n(69),U=n(7),H=n(148),x=n(21),T=n(34),k=n(17),F=n(23).forEach,B=J("hidden"),z=U("toPrimitive"),w=k.set,A=k.getterFor("Symbol"),P=Object.prototype,M=e.Symbol,Q=c("JSON","stringify"),j=R.f,E=f.f,D=W.f,O=S.f,q=K("symbols"),_=K("op-symbols"),$=K("string-to-symbol-registry"),tt=K("symbol-to-string-registry"),it=K("wks"),nt=e.QObject,lt=!nt||!nt.prototype||!nt.prototype.findChild,et=d&&a((function(){return 7!=g(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,i,n){var l=j(P,i);l&&delete P[i],E(t,i,n),l&&t!==P&&E(P,i,l)}:E,ct=function(t,i){var n=q[t]=g(M.prototype);return w(n,{type:"Symbol",tag:t,description:i}),d||(n.description=i),n},ot=function(t,i,n){t===P&&ot(_,i,n),m(t);var l=p(i);return m(n),u(q,l)?(n.enumerable?(u(t,B)&&t[B][l]&&(t[B][l]=!1),n=g(n,{enumerable:y(0,!1)})):(u(t,B)||E(t,B,y(1,{})),t[B][l]=!0),et(t,l,n)):E(t,l,n)},dt=function(t,i){m(t);var n=I(i),l=X(n).concat(Zt(n));return F(l,(function(i){d&&!rt.call(n,i)||ot(t,i,n[i])})),t},rt=function(t){var i=p(t),n=O.call(this,i);return!(this===P&&u(q,i)&&!u(_,i))&&(!(n||!u(this,i)||!u(q,i)||u(this,B)&&this[B][i])||n)},at=function(t,i){var n=I(t),l=p(i);if(n!==P||!u(q,l)||u(_,l)){var e=j(n,l);return!e||!u(q,l)||u(n,B)&&n[B][l]||(e.enumerable=!0),e}},ut=function(t){var i=D(I(t)),n=[];return F(i,(function(t){u(q,t)||u(N,t)||n.push(t)})),n},Zt=function(t){var i=t===P,n=D(i?_:I(t)),l=[];return F(n,(function(t){!u(q,t)||i&&!u(P,t)||l.push(q[t])})),l};(r||(Y((M=function(){if(this instanceof M)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?G(arguments[0]):void 0,i=L(t),n=function(t){this===P&&n.call(_,t),u(this,B)&&u(this[B],i)&&(this[B][i]=!1),et(this,i,y(1,t))};return d&<&&et(P,i,{configurable:!0,set:n}),ct(i,t)}).prototype,"toString",(function(){return A(this).tag})),Y(M,"withoutSetter",(function(t){return ct(L(t),t)})),S.f=rt,f.f=ot,R.f=at,V.f=W.f=ut,C.f=Zt,H.f=function(t){return ct(U(t),t)},d&&(E(M.prototype,"description",{configurable:!0,get:function(){return A(this).description}}),o||Y(P,"propertyIsEnumerable",rt,{unsafe:!0}))),l({global:!0,wrap:!0,forced:!r,sham:!r},{Symbol:M}),F(X(it),(function(t){x(t)})),l({target:"Symbol",stat:!0,forced:!r},{for:function(t){var i=G(t);if(u($,i))return $[i];var n=M(i);return $[i]=n,tt[n]=i,n},keyFor:function(t){if(!b(t))throw TypeError(t+" is not a symbol");if(u(tt,t))return tt[t]},useSetter:function(){lt=!0},useSimple:function(){lt=!1}}),l({target:"Object",stat:!0,forced:!r,sham:!d},{create:function(t,i){return void 0===i?g(t):dt(g(t),i)},defineProperty:ot,defineProperties:dt,getOwnPropertyDescriptor:at}),l({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:ut,getOwnPropertySymbols:Zt}),l({target:"Object",stat:!0,forced:a((function(){C.f(1)}))},{getOwnPropertySymbols:function(t){return C.f(h(t))}}),Q)&&l({target:"JSON",stat:!0,forced:!r||a((function(){var t=M();return"[null]"!=Q([t])||"{}"!=Q({a:t})||"{}"!=Q(Object(t))}))},{stringify:function(t,i,n){for(var l,e=[t],c=1;arguments.length>c;)e.push(arguments[c++]);if(l=i,(s(i)||void 0!==t)&&!b(t))return Z(i)||(i=function(t,i){if("function"==typeof l&&(i=l.call(this,t,i)),!b(i))return i}),e[1]=i,Q.apply(null,e)}});M.prototype[z]||v(M.prototype,z,M.prototype.valueOf),T(M,"Symbol"),N[B]=!0},function(t,i,n){var l=n(8),e=n(51),c=n(7)("species");t.exports=function(t){var i;return e(t)&&("function"!=typeof(i=t.constructor)||i!==Array&&!e(i.prototype)?l(i)&&null===(i=i[c])&&(i=void 0):i=void 0),void 0===i?Array:i}},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(4),o=n(16),d=n(8),r=n(14).f,a=n(145),u=c.Symbol;if(e&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var Z={},s=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),i=this instanceof s?new u(t):void 0===t?u():u(t);return""===t&&(Z[i]=!0),i};a(s,u);var b=s.prototype=u.prototype;b.constructor=s;var m=b.toString,h="Symbol(test)"==String(u("test")),I=/^Symbol\((.*)\)[^)]+$/;r(b,"description",{configurable:!0,get:function(){var t=d(this)?this.valueOf():this,i=m.call(t);if(o(Z,t))return"";var n=h?i.slice(7,-1):i.replace(I,"$1");return""===n?void 0:n}}),l({global:!0,forced:!0},{Symbol:s})}},function(t,i,n){n(21)("asyncIterator")},function(t,i,n){n(21)("hasInstance")},function(t,i,n){n(21)("isConcatSpreadable")},function(t,i,n){n(21)("iterator")},function(t,i,n){n(21)("match")},function(t,i,n){n(21)("matchAll")},function(t,i,n){n(21)("replace")},function(t,i,n){n(21)("search")},function(t,i,n){n(21)("species")},function(t,i,n){n(21)("split")},function(t,i,n){n(21)("toPrimitive")},function(t,i,n){n(21)("toStringTag")},function(t,i,n){n(21)("unscopables")},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(51),o=n(8),d=n(13),r=n(10),a=n(53),u=n(73),Z=n(74),s=n(7),b=n(48),m=s("isConcatSpreadable"),h=b>=51||!e((function(){var t=[];return t[m]=!1,t.concat()[0]!==t})),I=Z("concat"),p=function(t){if(!o(t))return!1;var i=t[m];return void 0!==i?!!i:c(t)};l({target:"Array",proto:!0,forced:!h||!I},{concat:function(t){var i,n,l,e,c,o=d(this),Z=u(o,0),s=0;for(i=-1,l=arguments.length;i<l;i++)if(p(c=-1===i?o:arguments[i])){if(s+(e=r(c.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n<e;n++,s++)n in c&&a(Z,s,c[n])}else{if(s>=9007199254740991)throw TypeError("Maximum allowed index exceeded");a(Z,s++,c)}return Z.length=s,Z}})},function(t,i,n){var l=n(0),e=n(149),c=n(35);l({target:"Array",proto:!0},{copyWithin:e}),c("copyWithin")},function(t,i,n){"use strict";var l=n(0),e=n(23).every;l({target:"Array",proto:!0,forced:!n(40)("every")},{every:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){var l=n(0),e=n(116),c=n(35);l({target:"Array",proto:!0},{fill:e}),c("fill")},function(t,i,n){"use strict";var l=n(0),e=n(23).filter;l({target:"Array",proto:!0,forced:!n(74)("filter")},{filter:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(23).find,c=n(35),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{find:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("find")},function(t,i,n){"use strict";var l=n(0),e=n(23).findIndex,c=n(35),o=!0;"findIndex"in[]&&Array(1).findIndex((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{findIndex:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("findIndex")},function(t,i,n){"use strict";var l=n(0),e=n(150),c=n(13),o=n(10),d=n(30),r=n(73);l({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,i=c(this),n=o(i.length),l=r(i,0);return l.length=e(l,i,i,n,0,void 0===t?1:d(t)),l}})},function(t,i,n){"use strict";var l=n(0),e=n(150),c=n(13),o=n(10),d=n(3),r=n(73);l({target:"Array",proto:!0},{flatMap:function(t){var i,n=c(this),l=o(n.length);return d(t),(i=r(n,0)).length=e(i,n,n,l,0,1,t,arguments.length>1?arguments[1]:void 0),i}})},function(t,i,n){"use strict";var l=n(0),e=n(151);l({target:"Array",proto:!0,forced:[].forEach!=e},{forEach:e})},function(t,i,n){var l=n(0),e=n(152);l({target:"Array",stat:!0,forced:!n(86)((function(t){Array.from(t)}))},{from:e})},function(t,i,n){"use strict";var l=n(0),e=n(71).includes,c=n(35);l({target:"Array",proto:!0},{includes:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("includes")},function(t,i,n){"use strict";var l=n(0),e=n(71).indexOf,c=n(40),o=[].indexOf,d=!!o&&1/[1].indexOf(1,-0)<0,r=c("indexOf");l({target:"Array",proto:!0,forced:d||!r},{indexOf:function(t){return d?o.apply(this,arguments)||0:e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){n(0)({target:"Array",stat:!0},{isArray:n(51)})},function(t,i,n){"use strict";var l=n(0),e=n(67),c=n(29),o=n(40),d=[].join,r=e!=Object,a=o("join",",");l({target:"Array",proto:!0,forced:r||!a},{join:function(t){return d.call(c(this),void 0===t?",":t)}})},function(t,i,n){var l=n(0),e=n(154);l({target:"Array",proto:!0,forced:e!==[].lastIndexOf},{lastIndexOf:e})},function(t,i,n){"use strict";var l=n(0),e=n(23).map;l({target:"Array",proto:!0,forced:!n(74)("map")},{map:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(53);l({target:"Array",stat:!0,forced:e((function(){function t(){}return!(Array.of.call(t)instanceof t)}))},{of:function(){for(var t=0,i=arguments.length,n=new("function"==typeof this?this:Array)(i);i>t;)c(n,t,arguments[t++]);return n.length=i,n}})},function(t,i,n){"use strict";var l=n(0),e=n(88).left,c=n(40),o=n(48),d=n(63);l({target:"Array",proto:!0,forced:!c("reduce")||!d&&o>79&&o<83},{reduce:function(t){return e(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(88).right,c=n(40),o=n(48),d=n(63);l({target:"Array",proto:!0,forced:!c("reduceRight")||!d&&o>79&&o<83},{reduceRight:function(t){return e(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(51),c=[].reverse,o=[1,2];l({target:"Array",proto:!0,forced:String(o)===String(o.reverse())},{reverse:function(){return e(this)&&(this.length=this.length),c.call(this)}})},function(t,i,n){"use strict";var l=n(0),e=n(8),c=n(51),o=n(50),d=n(10),r=n(29),a=n(53),u=n(7),Z=n(74)("slice"),s=u("species"),b=[].slice,m=Math.max;l({target:"Array",proto:!0,forced:!Z},{slice:function(t,i){var n,l,u,Z=r(this),h=d(Z.length),I=o(t,h),p=o(void 0===i?h:i,h);if(c(Z)&&("function"!=typeof(n=Z.constructor)||n!==Array&&!c(n.prototype)?e(n)&&null===(n=n[s])&&(n=void 0):n=void 0,n===Array||void 0===n))return b.call(Z,I,p);for(l=new(void 0===n?Array:n)(m(p-I,0)),u=0;I<p;I++,u++)I in Z&&a(l,u,Z[I]);return l.length=u,l}})},function(t,i,n){"use strict";var l=n(0),e=n(23).some;l({target:"Array",proto:!0,forced:!n(40)("some")},{some:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(13),o=n(10),d=n(15),r=n(2),a=n(155),u=n(40),Z=n(156),s=n(157),b=n(48),m=n(123),h=[],I=h.sort,p=r((function(){h.sort(void 0)})),G=r((function(){h.sort(null)})),y=u("sort"),g=!r((function(){if(b)return b<70;if(!(Z&&Z>3)){if(s)return!0;if(m)return m<603;var t,i,n,l,e="";for(t=65;t<76;t++){switch(i=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(l=0;l<47;l++)h.push({k:i+l,v:n})}for(h.sort((function(t,i){return i.v-t.v})),l=0;l<h.length;l++)i=h[l].k.charAt(0),e.charAt(e.length-1)!==i&&(e+=i);return"DGBEFHACIJK"!==e}}));l({target:"Array",proto:!0,forced:p||!G||!y||!g},{sort:function(t){void 0!==t&&e(t);var i=c(this);if(g)return void 0===t?I.call(i):I.call(i,t);var n,l,r=[],u=o(i.length);for(l=0;l<u;l++)l in i&&r.push(i[l]);for(n=(r=a(r,function(t){return function(i,n){return void 0===n?-1:void 0===i?1:void 0!==t?+t(i,n)||0:d(i)>d(n)?1:-1}}(t))).length,l=0;l<n;)i[l]=r[l++];for(;l<u;)delete i[l++];return i}})},function(t,i,n){n(54)("Array")},function(t,i,n){"use strict";var l=n(0),e=n(50),c=n(30),o=n(10),d=n(13),r=n(73),a=n(53),u=n(74)("splice"),Z=Math.max,s=Math.min;l({target:"Array",proto:!0,forced:!u},{splice:function(t,i){var n,l,u,b,m,h,I=d(this),p=o(I.length),G=e(t,p),y=arguments.length;if(0===y?n=l=0:1===y?(n=0,l=p-G):(n=y-2,l=s(Z(c(i),0),p-G)),p+n-l>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(u=r(I,l),b=0;b<l;b++)(m=G+b)in I&&a(u,b,I[m]);if(u.length=l,n<l){for(b=G;b<p-l;b++)h=b+n,(m=b+l)in I?I[h]=I[m]:delete I[h];for(b=p;b>p-l+n;b--)delete I[b-1]}else if(n>l)for(b=p-l;b>G;b--)h=b+n-1,(m=b+l-1)in I?I[h]=I[m]:delete I[h];for(b=0;b<n;b++)I[b+G]=arguments[b+2];return I.length=p-l+n,u}})},function(t,i,n){n(35)("flat")},function(t,i,n){n(35)("flatMap")},function(t,i,n){"use strict";var l=n(0),e=n(4),c=n(89),o=n(54),d=c.ArrayBuffer;l({global:!0,forced:e.ArrayBuffer!==d},{ArrayBuffer:d}),o("ArrayBuffer")},function(t,i){var n=Math.abs,l=Math.pow,e=Math.floor,c=Math.log,o=Math.LN2;t.exports={pack:function(t,i,d){var r,a,u,Z=new Array(d),s=8*d-i-1,b=(1<<s)-1,m=b>>1,h=23===i?l(2,-24)-l(2,-77):0,I=t<0||0===t&&1/t<0?1:0,p=0;for((t=n(t))!=t||t===1/0?(a=t!=t?1:0,r=b):(r=e(c(t)/o),t*(u=l(2,-r))<1&&(r--,u*=2),(t+=r+m>=1?h/u:h*l(2,1-m))*u>=2&&(r++,u/=2),r+m>=b?(a=0,r=b):r+m>=1?(a=(t*u-1)*l(2,i),r+=m):(a=t*l(2,m-1)*l(2,i),r=0));i>=8;Z[p++]=255&a,a/=256,i-=8);for(r=r<<i|a,s+=i;s>0;Z[p++]=255&r,r/=256,s-=8);return Z[--p]|=128*I,Z},unpack:function(t,i){var n,e=t.length,c=8*e-i-1,o=(1<<c)-1,d=o>>1,r=c-7,a=e-1,u=t[a--],Z=127&u;for(u>>=7;r>0;Z=256*Z+t[a],a--,r-=8);for(n=Z&(1<<-r)-1,Z>>=-r,r+=i;r>0;n=256*n+t[a],a--,r-=8);if(0===Z)Z=1-d;else{if(Z===o)return n?NaN:u?-1/0:1/0;n+=l(2,i),Z-=d}return(u?-1:1)*n*l(2,Z-i)}}},function(t,i,n){var l=n(0),e=n(12);l({target:"ArrayBuffer",stat:!0,forced:!e.NATIVE_ARRAY_BUFFER_VIEWS},{isView:e.isView})},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(89),o=n(1),d=n(50),r=n(10),a=n(28),u=c.ArrayBuffer,Z=c.DataView,s=u.prototype.slice;l({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:e((function(){return!new u(2).slice(1,void 0).byteLength}))},{slice:function(t,i){if(void 0!==s&&void 0===i)return s.call(o(this),t);for(var n=o(this).byteLength,l=d(t,n),e=d(void 0===i?n:i,n),c=new(a(this,u))(r(e-l)),b=new Z(this),m=new Z(c),h=0;l<e;)m.setUint8(h++,b.getUint8(l++));return c}})},function(t,i,n){var l=n(0),e=n(89);l({global:!0,forced:!n(124)},{DataView:e.DataView})},function(t,i,n){n(0)({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},function(t,i,n){var l=n(0),e=n(247);l({target:"Date",proto:!0,forced:Date.prototype.toISOString!==e},{toISOString:e})},function(t,i,n){"use strict";var l=n(2),e=n(125).start,c=Math.abs,o=Date.prototype,d=o.getTime,r=o.toISOString;t.exports=l((function(){return"0385-07-25T07:06:39.999Z"!=r.call(new Date(-50000000000001))}))||!l((function(){r.call(new Date(NaN))}))?function(){if(!isFinite(d.call(this)))throw RangeError("Invalid time value");var t=this.getUTCFullYear(),i=this.getUTCMilliseconds(),n=t<0?"-":t>9999?"+":"";return n+e(c(t),n?6:4,0)+"-"+e(this.getUTCMonth()+1,2,0)+"-"+e(this.getUTCDate(),2,0)+"T"+e(this.getUTCHours(),2,0)+":"+e(this.getUTCMinutes(),2,0)+":"+e(this.getUTCSeconds(),2,0)+"."+e(i,3,0)+"Z"}:r},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(13),o=n(106);l({target:"Date",proto:!0,forced:e((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(t){var i=c(this),n=o(i,"number");return"number"!=typeof n||isFinite(n)?i.toISOString():null}})},function(t,i,n){var l=n(18),e=n(250),c=n(7)("toPrimitive"),o=Date.prototype;c in o||l(o,c,e)},function(t,i,n){"use strict";var l=n(1),e=n(142);t.exports=function(t){if(l(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw TypeError("Incorrect hint");return e(this,t)}},function(t,i,n){var l=n(25),e=Date.prototype,c=e.toString,o=e.getTime;"Invalid Date"!=String(new Date(NaN))&&l(e,"toString",(function(){var t=o.call(this);return t==t?c.call(this):"Invalid Date"}))},function(t,i,n){n(0)({target:"Function",proto:!0},{bind:n(159)})},function(t,i,n){"use strict";var l=n(8),e=n(14),c=n(27),o=n(7)("hasInstance"),d=Function.prototype;o in d||e.f(d,o,{value:function(t){if("function"!=typeof this||!l(t))return!1;if(!l(this.prototype))return t instanceof this;for(;t=c(t);)if(this.prototype===t)return!0;return!1}})},function(t,i,n){var l=n(9),e=n(14).f,c=Function.prototype,o=c.toString,d=/^\s*function ([^ (]*)/;l&&!("name"in c)&&e(c,"name",{configurable:!0,get:function(){try{return o.call(this).match(d)[1]}catch(t){return""}}})},function(t,i,n){var l=n(0),e=n(11),c=n(2),o=e("JSON","stringify"),d=/[\uD800-\uDFFF]/g,r=/^[\uD800-\uDBFF]$/,a=/^[\uDC00-\uDFFF]$/,u=function(t,i,n){var l=n.charAt(i-1),e=n.charAt(i+1);return r.test(t)&&!a.test(e)||a.test(t)&&!r.test(l)?"\\u"+t.charCodeAt(0).toString(16):t},Z=c((function(){return'"\\udf06\\ud834"'!==o("\udf06\ud834")||'"\\udead"'!==o("\udead")}));o&&l({target:"JSON",stat:!0,forced:Z},{stringify:function(t,i,n){var l=o.apply(null,arguments);return"string"==typeof l?l.replace(d,u):l}})},function(t,i,n){var l=n(4);n(34)(l.JSON,"JSON",!0)},function(t,i,n){var l=n(0),e=n(162),c=Math.acosh,o=Math.log,d=Math.sqrt,r=Math.LN2;l({target:"Math",stat:!0,forced:!c||710!=Math.floor(c(Number.MAX_VALUE))||c(1/0)!=1/0},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?o(t)+r:e(t-1+d(t-1)*d(t+1))}})},function(t,i,n){var l=n(0),e=Math.asinh,c=Math.log,o=Math.sqrt;l({target:"Math",stat:!0,forced:!(e&&1/e(0)>0)},{asinh:function t(i){return isFinite(i=+i)&&0!=i?i<0?-t(-i):c(i+o(i*i+1)):i}})},function(t,i,n){var l=n(0),e=Math.atanh,c=Math.log;l({target:"Math",stat:!0,forced:!(e&&1/e(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:c((1+t)/(1-t))/2}})},function(t,i,n){var l=n(0),e=n(128),c=Math.abs,o=Math.pow;l({target:"Math",stat:!0},{cbrt:function(t){return e(t=+t)*o(c(t),1/3)}})},function(t,i,n){var l=n(0),e=Math.floor,c=Math.log,o=Math.LOG2E;l({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-e(c(t+.5)*o):32}})},function(t,i,n){var l=n(0),e=n(92),c=Math.cosh,o=Math.abs,d=Math.E;l({target:"Math",stat:!0,forced:!c||c(710)===1/0},{cosh:function(t){var i=e(o(t)-1)+1;return(i+1/(i*d*d))*(d/2)}})},function(t,i,n){var l=n(0),e=n(92);l({target:"Math",stat:!0,forced:e!=Math.expm1},{expm1:e})},function(t,i,n){n(0)({target:"Math",stat:!0},{fround:n(163)})},function(t,i,n){var l=n(0),e=Math.hypot,c=Math.abs,o=Math.sqrt;l({target:"Math",stat:!0,forced:!!e&&e(1/0,NaN)!==1/0},{hypot:function(t,i){for(var n,l,e=0,d=0,r=arguments.length,a=0;d<r;)a<(n=c(arguments[d++]))?(e=e*(l=a/n)*l+1,a=n):e+=n>0?(l=n/a)*l:n;return a===1/0?1/0:a*o(e)}})},function(t,i,n){var l=n(0),e=n(2),c=Math.imul;l({target:"Math",stat:!0,forced:e((function(){return-5!=c(4294967295,5)||2!=c.length}))},{imul:function(t,i){var n=+t,l=+i,e=65535&n,c=65535&l;return 0|e*c+((65535&n>>>16)*c+e*(65535&l>>>16)<<16>>>0)}})},function(t,i,n){var l=n(0),e=Math.log,c=Math.LOG10E;l({target:"Math",stat:!0},{log10:function(t){return e(t)*c}})},function(t,i,n){n(0)({target:"Math",stat:!0},{log1p:n(162)})},function(t,i,n){var l=n(0),e=Math.log,c=Math.LN2;l({target:"Math",stat:!0},{log2:function(t){return e(t)/c}})},function(t,i,n){n(0)({target:"Math",stat:!0},{sign:n(128)})},function(t,i,n){var l=n(0),e=n(2),c=n(92),o=Math.abs,d=Math.exp,r=Math.E;l({target:"Math",stat:!0,forced:e((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){return o(t=+t)<1?(c(t)-c(-t))/2:(d(t-1)-d(-t-1))*(r/2)}})},function(t,i,n){var l=n(0),e=n(92),c=Math.exp;l({target:"Math",stat:!0},{tanh:function(t){var i=e(t=+t),n=e(-t);return i==1/0?1:n==1/0?-1:(i-n)/(c(t)+c(-t))}})},function(t,i,n){n(34)(Math,"Math",!0)},function(t,i,n){var l=n(0),e=Math.ceil,c=Math.floor;l({target:"Math",stat:!0},{trunc:function(t){return(t>0?c:e)(t)}})},function(t,i,n){"use strict";var l=n(9),e=n(4),c=n(72),o=n(25),d=n(16),r=n(46),a=n(91),u=n(59),Z=n(106),s=n(2),b=n(26),m=n(49).f,h=n(24).f,I=n(14).f,p=n(64).trim,G=e.Number,y=G.prototype,g="Number"==r(b(y)),X=function(t){if(u(t))throw TypeError("Cannot convert a Symbol value to a number");var i,n,l,e,c,o,d,r,a=Z(t,"number");if("string"==typeof a&&a.length>2)if(43===(i=(a=p(a)).charCodeAt(0))||45===i){if(88===(n=a.charCodeAt(2))||120===n)return NaN}else if(48===i){switch(a.charCodeAt(1)){case 66:case 98:l=2,e=49;break;case 79:case 111:l=8,e=55;break;default:return+a}for(o=(c=a.slice(2)).length,d=0;d<o;d++)if((r=c.charCodeAt(d))<48||r>e)return NaN;return parseInt(c,l)}return+a};if(c("Number",!G(" 0o1")||!G("0b1")||G("+0x1"))){for(var V,W=function(t){var i=arguments.length<1?0:t,n=this;return n instanceof W&&(g?s((function(){y.valueOf.call(n)})):"Number"!=r(n))?a(new G(X(i)),n,W):X(i)},C=l?m(G):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),R=0;C.length>R;R++)d(G,V=C[R])&&!d(W,V)&&I(W,V,h(G,V));W.prototype=y,y.constructor=W,o(e,"Number",W)}},function(t,i,n){n(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(t,i,n){n(0)({target:"Number",stat:!0},{isFinite:n(164)})},function(t,i,n){n(0)({target:"Number",stat:!0},{isInteger:n(129)})},function(t,i,n){n(0)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},function(t,i,n){var l=n(0),e=n(129),c=Math.abs;l({target:"Number",stat:!0},{isSafeInteger:function(t){return e(t)&&c(t)<=9007199254740991}})},function(t,i,n){n(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(t,i,n){n(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(t,i,n){var l=n(0),e=n(165);l({target:"Number",stat:!0,forced:Number.parseFloat!=e},{parseFloat:e})},function(t,i,n){var l=n(0),e=n(130);l({target:"Number",stat:!0,forced:Number.parseInt!=e},{parseInt:e})},function(t,i,n){"use strict";var l=n(0),e=n(30),c=n(166),o=n(126),d=n(2),r=1..toFixed,a=Math.floor,u=function(t,i,n){return 0===i?n:i%2==1?u(t,i-1,n*t):u(t*t,i/2,n)},Z=function(t,i,n){for(var l=-1,e=n;++l<6;)e+=i*t[l],t[l]=e%1e7,e=a(e/1e7)},s=function(t,i){for(var n=6,l=0;--n>=0;)l+=t[n],t[n]=a(l/i),l=l%i*1e7},b=function(t){for(var i=6,n="";--i>=0;)if(""!==n||0===i||0!==t[i]){var l=String(t[i]);n=""===n?l:n+o.call("0",7-l.length)+l}return n};l({target:"Number",proto:!0,forced:r&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!d((function(){r.call({})}))},{toFixed:function(t){var i,n,l,d,r=c(this),a=e(t),m=[0,0,0,0,0,0],h="",I="0";if(a<0||a>20)throw RangeError("Incorrect fraction digits");if(r!=r)return"NaN";if(r<=-1e21||r>=1e21)return String(r);if(r<0&&(h="-",r=-r),r>1e-21)if(n=(i=function(t){for(var i=0,n=t;n>=4096;)i+=12,n/=4096;for(;n>=2;)i+=1,n/=2;return i}(r*u(2,69,1))-69)<0?r*u(2,-i,1):r/u(2,i,1),n*=4503599627370496,(i=52-i)>0){for(Z(m,0,n),l=a;l>=7;)Z(m,1e7,0),l-=7;for(Z(m,u(10,l,1),0),l=i-1;l>=23;)s(m,1<<23),l-=23;s(m,1<<l),Z(m,1,1),s(m,2),I=b(m)}else Z(m,0,n),Z(m,1<<-i,0),I=b(m)+o.call("0",a);return I=a>0?h+((d=I.length)<=a?"0."+o.call("0",a-d)+I:I.slice(0,d-a)+"."+I.slice(d-a)):h+I}})},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(166),o=1..toPrecision;l({target:"Number",proto:!0,forced:e((function(){return"1"!==o.call(1,void 0)}))||!e((function(){o.call({})}))},{toPrecision:function(t){return void 0===t?o.call(c(this)):o.call(c(this),t)}})},function(t,i,n){var l=n(0),e=n(167);l({target:"Object",stat:!0,forced:Object.assign!==e},{assign:e})},function(t,i,n){n(0)({target:"Object",stat:!0,sham:!n(9)},{create:n(26)})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(94),o=n(13),d=n(3),r=n(14);e&&l({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,i){r.f(o(this),t,{get:d(i),enumerable:!0,configurable:!0})}})},function(t,i,n){var l=n(0),e=n(9);l({target:"Object",stat:!0,forced:!e,sham:!e},{defineProperties:n(114)})},function(t,i,n){var l=n(0),e=n(9);l({target:"Object",stat:!0,forced:!e,sham:!e},{defineProperty:n(14).f})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(94),o=n(13),d=n(3),r=n(14);e&&l({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,i){r.f(o(this),t,{set:d(i),enumerable:!0,configurable:!0})}})},function(t,i,n){var l=n(0),e=n(168).entries;l({target:"Object",stat:!0},{entries:function(t){return e(t)}})},function(t,i,n){var l=n(0),e=n(77),c=n(2),o=n(8),d=n(55).onFreeze,r=Object.freeze;l({target:"Object",stat:!0,forced:c((function(){r(1)})),sham:!e},{freeze:function(t){return r&&o(t)?r(d(t)):t}})},function(t,i,n){var l=n(0),e=n(6),c=n(53);l({target:"Object",stat:!0},{fromEntries:function(t){var i={};return e(t,(function(t,n){c(i,t,n)}),{AS_ENTRIES:!0}),i}})},function(t,i,n){var l=n(0),e=n(2),c=n(29),o=n(24).f,d=n(9),r=e((function(){o(1)}));l({target:"Object",stat:!0,forced:!d||r,sham:!d},{getOwnPropertyDescriptor:function(t,i){return o(c(t),i)}})},function(t,i,n){var l=n(0),e=n(9),c=n(111),o=n(29),d=n(24),r=n(53);l({target:"Object",stat:!0,sham:!e},{getOwnPropertyDescriptors:function(t){for(var i,n,l=o(t),e=d.f,a=c(l),u={},Z=0;a.length>Z;)void 0!==(n=e(l,i=a[Z++]))&&r(u,i,n);return u}})},function(t,i,n){var l=n(0),e=n(2),c=n(115).f;l({target:"Object",stat:!0,forced:e((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:c})},function(t,i,n){var l=n(0),e=n(2),c=n(13),o=n(27),d=n(122);l({target:"Object",stat:!0,forced:e((function(){o(1)})),sham:!d},{getPrototypeOf:function(t){return o(c(t))}})},function(t,i,n){n(0)({target:"Object",stat:!0},{is:n(169)})},function(t,i,n){var l=n(0),e=n(2),c=n(8),o=Object.isExtensible;l({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isExtensible:function(t){return!!c(t)&&(!o||o(t))}})},function(t,i,n){var l=n(0),e=n(2),c=n(8),o=Object.isFrozen;l({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isFrozen:function(t){return!c(t)||!!o&&o(t)}})},function(t,i,n){var l=n(0),e=n(2),c=n(8),o=Object.isSealed;l({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isSealed:function(t){return!c(t)||!!o&&o(t)}})},function(t,i,n){var l=n(0),e=n(13),c=n(60);l({target:"Object",stat:!0,forced:n(2)((function(){c(1)}))},{keys:function(t){return c(e(t))}})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(94),o=n(13),d=n(47),r=n(27),a=n(24).f;e&&l({target:"Object",proto:!0,forced:c},{__lookupGetter__:function(t){var i,n=o(this),l=d(t);do{if(i=a(n,l))return i.get}while(n=r(n))}})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(94),o=n(13),d=n(47),r=n(27),a=n(24).f;e&&l({target:"Object",proto:!0,forced:c},{__lookupSetter__:function(t){var i,n=o(this),l=d(t);do{if(i=a(n,l))return i.set}while(n=r(n))}})},function(t,i,n){var l=n(0),e=n(8),c=n(55).onFreeze,o=n(77),d=n(2),r=Object.preventExtensions;l({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{preventExtensions:function(t){return r&&e(t)?r(c(t)):t}})},function(t,i,n){var l=n(0),e=n(8),c=n(55).onFreeze,o=n(77),d=n(2),r=Object.seal;l({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{seal:function(t){return r&&e(t)?r(c(t)):t}})},function(t,i,n){n(0)({target:"Object",stat:!0},{setPrototypeOf:n(42)})},function(t,i,n){var l=n(119),e=n(25),c=n(311);l||e(Object.prototype,"toString",c,{unsafe:!0})},function(t,i,n){"use strict";var l=n(119),e=n(76);t.exports=l?{}.toString:function(){return"[object "+e(this)+"]"}},function(t,i,n){var l=n(0),e=n(168).values;l({target:"Object",stat:!0},{values:function(t){return e(t)}})},function(t,i,n){var l=n(0),e=n(165);l({global:!0,forced:parseFloat!=e},{parseFloat:e})},function(t,i,n){var l=n(0),e=n(130);l({global:!0,forced:parseInt!=e},{parseInt:e})},function(t,i,n){"use strict";var l,e,c,o,d=n(0),r=n(5),a=n(4),u=n(11),Z=n(170),s=n(25),b=n(36),m=n(42),h=n(34),I=n(54),p=n(8),G=n(3),y=n(33),g=n(110),X=n(6),V=n(86),W=n(28),C=n(131).set,R=n(172),f=n(173),S=n(174),v=n(78),Y=n(95),K=n(17),J=n(72),N=n(7),L=n(318),U=n(63),H=n(48),x=N("species"),T="Promise",k=K.get,F=K.set,B=K.getterFor(T),z=Z&&Z.prototype,w=Z,A=z,P=a.TypeError,M=a.document,Q=a.process,j=v.f,E=j,D=!!(M&&M.createEvent&&a.dispatchEvent),O="function"==typeof PromiseRejectionEvent,q=!1,_=J(T,(function(){var t=g(w),i=t!==String(w);if(!i&&66===H)return!0;if(r&&!A.finally)return!0;if(H>=51&&/native code/.test(t))return!1;var n=new w((function(t){t(1)})),l=function(t){t((function(){}),(function(){}))};return(n.constructor={})[x]=l,!(q=n.then((function(){}))instanceof l)||!i&&L&&!O})),$=_||!V((function(t){w.all(t).catch((function(){}))})),tt=function(t){var i;return!(!p(t)||"function"!=typeof(i=t.then))&&i},it=function(t,i){if(!t.notified){t.notified=!0;var n=t.reactions;R((function(){for(var l=t.value,e=1==t.state,c=0;n.length>c;){var o,d,r,a=n[c++],u=e?a.ok:a.fail,Z=a.resolve,s=a.reject,b=a.domain;try{u?(e||(2===t.rejection&&ct(t),t.rejection=1),!0===u?o=l:(b&&b.enter(),o=u(l),b&&(b.exit(),r=!0)),o===a.promise?s(P("Promise-chain cycle")):(d=tt(o))?d.call(o,Z,s):Z(o)):s(l)}catch(t){b&&!r&&b.exit(),s(t)}}t.reactions=[],t.notified=!1,i&&!t.rejection&<(t)}))}},nt=function(t,i,n){var l,e;D?((l=M.createEvent("Event")).promise=i,l.reason=n,l.initEvent(t,!1,!0),a.dispatchEvent(l)):l={promise:i,reason:n},!O&&(e=a["on"+t])?e(l):"unhandledrejection"===t&&S("Unhandled promise rejection",n)},lt=function(t){C.call(a,(function(){var i,n=t.facade,l=t.value;if(et(t)&&(i=Y((function(){U?Q.emit("unhandledRejection",l,n):nt("unhandledrejection",n,l)})),t.rejection=U||et(t)?2:1,i.error))throw i.value}))},et=function(t){return 1!==t.rejection&&!t.parent},ct=function(t){C.call(a,(function(){var i=t.facade;U?Q.emit("rejectionHandled",i):nt("rejectionhandled",i,t.value)}))},ot=function(t,i,n){return function(l){t(i,l,n)}},dt=function(t,i,n){t.done||(t.done=!0,n&&(t=n),t.value=i,t.state=2,it(t,!0))},rt=function(t,i,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===i)throw P("Promise can't be resolved itself");var l=tt(i);l?R((function(){var n={done:!1};try{l.call(i,ot(rt,n,t),ot(dt,n,t))}catch(i){dt(n,i,t)}})):(t.value=i,t.state=1,it(t,!1))}catch(i){dt({done:!1},i,t)}}};if(_&&(A=(w=function(t){y(this,w,T),G(t),l.call(this);var i=k(this);try{t(ot(rt,i),ot(dt,i))}catch(t){dt(i,t)}}).prototype,(l=function(t){F(this,{type:T,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=b(A,{then:function(t,i){var n=B(this),l=j(W(this,w));return l.ok="function"!=typeof t||t,l.fail="function"==typeof i&&i,l.domain=U?Q.domain:void 0,n.parent=!0,n.reactions.push(l),0!=n.state&&it(n,!1),l.promise},catch:function(t){return this.then(void 0,t)}}),e=function(){var t=new l,i=k(t);this.promise=t,this.resolve=ot(rt,i),this.reject=ot(dt,i)},v.f=j=function(t){return t===w||t===c?new e(t):E(t)},!r&&"function"==typeof Z&&z!==Object.prototype)){o=z.then,q||(s(z,"then",(function(t,i){var n=this;return new w((function(t,i){o.call(n,t,i)})).then(t,i)}),{unsafe:!0}),s(z,"catch",A.catch,{unsafe:!0}));try{delete z.constructor}catch(t){}m&&m(z,A)}d({global:!0,wrap:!0,forced:_},{Promise:w}),h(w,T,!1,!0),I(T),c=u(T),d({target:T,stat:!0,forced:_},{reject:function(t){var i=j(this);return i.reject.call(void 0,t),i.promise}}),d({target:T,stat:!0,forced:r||_},{resolve:function(t){return f(r&&this===c?w:this,t)}}),d({target:T,stat:!0,forced:$},{all:function(t){var i=this,n=j(i),l=n.resolve,e=n.reject,c=Y((function(){var n=G(i.resolve),c=[],o=0,d=1;X(t,(function(t){var r=o++,a=!1;c.push(void 0),d++,n.call(i,t).then((function(t){a||(a=!0,c[r]=t,--d||l(c))}),e)})),--d||l(c)}));return c.error&&e(c.value),n.promise},race:function(t){var i=this,n=j(i),l=n.reject,e=Y((function(){var e=G(i.resolve);X(t,(function(t){e.call(i,t).then(n.resolve,l)}))}));return e.error&&l(e.value),n.promise}})},function(t,i,n){var l=n(39),e=n(4);t.exports=/ipad|iphone|ipod/i.test(l)&&void 0!==e.Pebble},function(t,i,n){var l=n(39);t.exports=/web0s(?!.*chrome)/i.test(l)},function(t,i){t.exports="object"==typeof window},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(170),o=n(2),d=n(11),r=n(28),a=n(173),u=n(25);if(l({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){c.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var i=r(this,d("Promise")),n="function"==typeof t;return this.then(n?function(n){return a(i,t()).then((function(){return n}))}:t,n?function(n){return a(i,t()).then((function(){throw n}))}:t)}}),!e&&"function"==typeof c){var Z=d("Promise").prototype.finally;c.prototype.finally!==Z&&u(c.prototype,"finally",Z,{unsafe:!0})}},function(t,i,n){var l=n(0),e=n(11),c=n(3),o=n(1),d=n(2),r=e("Reflect","apply"),a=Function.apply;l({target:"Reflect",stat:!0,forced:!d((function(){r((function(){}))}))},{apply:function(t,i,n){return c(t),o(n),r?r(t,i,n):a.call(t,i,n)}})},function(t,i,n){var l=n(0),e=n(11),c=n(3),o=n(1),d=n(8),r=n(26),a=n(159),u=n(2),Z=e("Reflect","construct"),s=u((function(){function t(){}return!(Z((function(){}),[],t)instanceof t)})),b=!u((function(){Z((function(){}))})),m=s||b;l({target:"Reflect",stat:!0,forced:m,sham:m},{construct:function(t,i){c(t),o(i);var n=arguments.length<3?t:c(arguments[2]);if(b&&!s)return Z(t,i,n);if(t==n){switch(i.length){case 0:return new t;case 1:return new t(i[0]);case 2:return new t(i[0],i[1]);case 3:return new t(i[0],i[1],i[2]);case 4:return new t(i[0],i[1],i[2],i[3])}var l=[null];return l.push.apply(l,i),new(a.apply(t,l))}var e=n.prototype,u=r(d(e)?e:Object.prototype),m=Function.apply.call(t,u,i);return d(m)?m:u}})},function(t,i,n){var l=n(0),e=n(9),c=n(1),o=n(47),d=n(14);l({target:"Reflect",stat:!0,forced:n(2)((function(){Reflect.defineProperty(d.f({},1,{value:1}),1,{value:2})})),sham:!e},{defineProperty:function(t,i,n){c(t);var l=o(i);c(n);try{return d.f(t,l,n),!0}catch(t){return!1}}})},function(t,i,n){var l=n(0),e=n(1),c=n(24).f;l({target:"Reflect",stat:!0},{deleteProperty:function(t,i){var n=c(e(t),i);return!(n&&!n.configurable)&&delete t[i]}})},function(t,i,n){var l=n(0),e=n(8),c=n(1),o=n(176),d=n(24),r=n(27);l({target:"Reflect",stat:!0},{get:function t(i,n){var l,a,u=arguments.length<3?i:arguments[2];return c(i)===u?i[n]:(l=d.f(i,n))?o(l)?l.value:void 0===l.get?void 0:l.get.call(u):e(a=r(i))?t(a,n,u):void 0}})},function(t,i,n){var l=n(0),e=n(9),c=n(1),o=n(24);l({target:"Reflect",stat:!0,sham:!e},{getOwnPropertyDescriptor:function(t,i){return o.f(c(t),i)}})},function(t,i,n){var l=n(0),e=n(1),c=n(27);l({target:"Reflect",stat:!0,sham:!n(122)},{getPrototypeOf:function(t){return c(e(t))}})},function(t,i,n){n(0)({target:"Reflect",stat:!0},{has:function(t,i){return i in t}})},function(t,i,n){var l=n(0),e=n(1),c=Object.isExtensible;l({target:"Reflect",stat:!0},{isExtensible:function(t){return e(t),!c||c(t)}})},function(t,i,n){n(0)({target:"Reflect",stat:!0},{ownKeys:n(111)})},function(t,i,n){var l=n(0),e=n(11),c=n(1);l({target:"Reflect",stat:!0,sham:!n(77)},{preventExtensions:function(t){c(t);try{var i=e("Object","preventExtensions");return i&&i(t),!0}catch(t){return!1}}})},function(t,i,n){var l=n(0),e=n(1),c=n(8),o=n(176),d=n(2),r=n(14),a=n(24),u=n(27),Z=n(38);l({target:"Reflect",stat:!0,forced:d((function(){var t=function(){},i=r.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,i)}))},{set:function t(i,n,l){var d,s,b,m=arguments.length<4?i:arguments[3],h=a.f(e(i),n);if(!h){if(c(s=u(i)))return t(s,n,l,m);h=Z(0)}if(o(h)){if(!1===h.writable||!c(m))return!1;if(d=a.f(m,n)){if(d.get||d.set||!1===d.writable)return!1;d.value=l,r.f(m,n,d)}else r.f(m,n,Z(0,l))}else{if(void 0===(b=h.set))return!1;b.call(m,l)}return!0}})},function(t,i,n){var l=n(0),e=n(1),c=n(153),o=n(42);o&&l({target:"Reflect",stat:!0},{setPrototypeOf:function(t,i){e(t),c(i);try{return o(t,i),!0}catch(t){return!1}}})},function(t,i,n){var l=n(9),e=n(4),c=n(72),o=n(91),d=n(18),r=n(14).f,a=n(49).f,u=n(79),Z=n(15),s=n(65),b=n(96),m=n(25),h=n(2),I=n(16),p=n(17).enforce,G=n(54),y=n(7),g=n(177),X=n(178),V=y("match"),W=e.RegExp,C=W.prototype,R=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,f=/a/g,S=/a/g,v=new W(f)!==f,Y=b.UNSUPPORTED_Y,K=l&&(!v||Y||g||X||h((function(){return S[V]=!1,W(f)!=f||W(S)==S||"/a/i"!=W(f,"i")})));if(c("RegExp",K)){for(var J=function(t,i){var n,l,e,c,r,a,b=this instanceof J,m=u(t),h=void 0===i,G=[],y=t;if(!b&&m&&h&&t.constructor===J)return t;if((m||t instanceof J)&&(t=t.source,h&&(i="flags"in y?y.flags:s.call(y))),t=void 0===t?"":Z(t),i=void 0===i?"":Z(i),y=t,g&&"dotAll"in f&&(l=!!i&&i.indexOf("s")>-1)&&(i=i.replace(/s/g,"")),n=i,Y&&"sticky"in f&&(e=!!i&&i.indexOf("y")>-1)&&(i=i.replace(/y/g,"")),X&&(t=(c=function(t){for(var i,n=t.length,l=0,e="",c=[],o={},d=!1,r=!1,a=0,u="";l<=n;l++){if("\\"===(i=t.charAt(l)))i+=t.charAt(++l);else if("]"===i)d=!1;else if(!d)switch(!0){case"["===i:d=!0;break;case"("===i:R.test(t.slice(l+1))&&(l+=2,r=!0),e+=i,a++;continue;case">"===i&&r:if(""===u||I(o,u))throw new SyntaxError("Invalid capture group name");o[u]=!0,c.push([u,a]),r=!1,u="";continue}r?u+=i:e+=i}return[e,c]}(t))[0],G=c[1]),r=o(W(t,i),b?this:C,J),(l||e||G.length)&&(a=p(r),l&&(a.dotAll=!0,a.raw=J(function(t){for(var i,n=t.length,l=0,e="",c=!1;l<=n;l++)"\\"!==(i=t.charAt(l))?c||"."!==i?("["===i?c=!0:"]"===i&&(c=!1),e+=i):e+="[\\s\\S]":e+=i+t.charAt(++l);return e}(t),n)),e&&(a.sticky=!0),G.length&&(a.groups=G)),t!==y)try{d(r,"source",""===y?"(?:)":y)}catch(t){}return r},N=function(t){t in J||r(J,t,{configurable:!0,get:function(){return W[t]},set:function(i){W[t]=i}})},L=a(W),U=0;L.length>U;)N(L[U++]);C.constructor=J,J.prototype=C,m(e,"RegExp",J)}G("RegExp")},function(t,i,n){var l=n(9),e=n(14),c=n(65),o=n(2);l&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&e.f(RegExp.prototype,"flags",{configurable:!0,get:c})},function(t,i,n){var l=n(9),e=n(96).UNSUPPORTED_Y,c=n(14).f,o=n(17).get,d=RegExp.prototype;l&&e&&c(d,"sticky",{configurable:!0,get:function(){if(this!==d){if(this instanceof RegExp)return!!o(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}}})},function(t,i,n){"use strict";n(132);var l,e,c=n(0),o=n(8),d=(l=!1,(e=/[ac]/).exec=function(){return l=!0,/./.exec.apply(this,arguments)},!0===e.test("abc")&&l),r=/./.test;c({target:"RegExp",proto:!0,forced:!d},{test:function(t){if("function"!=typeof this.exec)return r.call(this,t);var i=this.exec(t);if(null!==i&&!o(i))throw new Error("RegExp exec method returned something other than an Object or null");return!!i}})},function(t,i,n){"use strict";var l=n(25),e=n(1),c=n(15),o=n(2),d=n(65),r=RegExp.prototype,a=r.toString,u=o((function(){return"/a/b"!=a.call({source:"a",flags:"b"})})),Z="toString"!=a.name;(u||Z)&&l(RegExp.prototype,"toString",(function(){var t=e(this),i=c(t.source),n=t.flags;return"/"+i+"/"+c(void 0===n&&t instanceof RegExp&&!("flags"in r)?d.call(t):n)}),{unsafe:!0})},function(t,i,n){"use strict";var l=n(0),e=n(66).codeAt;l({target:"String",proto:!0},{codePointAt:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l,e=n(0),c=n(24).f,o=n(10),d=n(15),r=n(133),a=n(22),u=n(134),Z=n(5),s="".endsWith,b=Math.min,m=u("endsWith");e({target:"String",proto:!0,forced:!!(Z||m||(l=c(String.prototype,"endsWith"),!l||l.writable))&&!m},{endsWith:function(t){var i=d(a(this));r(t);var n=arguments.length>1?arguments[1]:void 0,l=o(i.length),e=void 0===n?l:b(o(n),l),c=d(t);return s?s.call(i,c,e):i.slice(e-c.length,e)===c}})},function(t,i,n){var l=n(0),e=n(50),c=String.fromCharCode,o=String.fromCodePoint;l({target:"String",stat:!0,forced:!!o&&1!=o.length},{fromCodePoint:function(t){for(var i,n=[],l=arguments.length,o=0;l>o;){if(i=+arguments[o++],e(i,1114111)!==i)throw RangeError(i+" is not a valid code point");n.push(i<65536?c(i):c(55296+((i-=65536)>>10),i%1024+56320))}return n.join("")}})},function(t,i,n){"use strict";var l=n(0),e=n(133),c=n(22),o=n(15);l({target:"String",proto:!0,forced:!n(134)("includes")},{includes:function(t){return!!~o(c(this)).indexOf(o(e(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(98),e=n(1),c=n(10),o=n(15),d=n(22),r=n(99),a=n(100);l("match",(function(t,i,n){return[function(i){var n=d(this),l=null==i?void 0:i[t];return void 0!==l?l.call(i,n):new RegExp(i)[t](o(n))},function(t){var l=e(this),d=o(t),u=n(i,l,d);if(u.done)return u.value;if(!l.global)return a(l,d);var Z=l.unicode;l.lastIndex=0;for(var s,b=[],m=0;null!==(s=a(l,d));){var h=o(s[0]);b[m]=h,""===h&&(l.lastIndex=r(d,c(l.lastIndex),Z)),m++}return 0===m?null:b}]}))},function(t,i,n){"use strict";var l=n(0),e=n(125).end;l({target:"String",proto:!0,forced:n(182)},{padEnd:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(125).start;l({target:"String",proto:!0,forced:n(182)},{padStart:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){var l=n(0),e=n(29),c=n(10),o=n(15);l({target:"String",stat:!0},{raw:function(t){for(var i=e(t.raw),n=c(i.length),l=arguments.length,d=[],r=0;n>r;)d.push(o(i[r++])),r<l&&d.push(o(arguments[r]));return d.join("")}})},function(t,i,n){n(0)({target:"String",proto:!0},{repeat:n(126)})},function(t,i,n){"use strict";var l=n(98),e=n(2),c=n(1),o=n(30),d=n(10),r=n(15),a=n(22),u=n(99),Z=n(183),s=n(100),b=n(7)("replace"),m=Math.max,h=Math.min,I="$0"==="a".replace(/./,"$0"),p=!!/./[b]&&""===/./[b]("a","$0");l("replace",(function(t,i,n){var l=p?"$":"$0";return[function(t,n){var l=a(this),e=null==t?void 0:t[b];return void 0!==e?e.call(t,l,n):i.call(r(l),t,n)},function(t,e){var a=c(this),b=r(t);if("string"==typeof e&&-1===e.indexOf(l)&&-1===e.indexOf("$<")){var I=n(i,a,b,e);if(I.done)return I.value}var p="function"==typeof e;p||(e=r(e));var G=a.global;if(G){var y=a.unicode;a.lastIndex=0}for(var g=[];;){var X=s(a,b);if(null===X)break;if(g.push(X),!G)break;""===r(X[0])&&(a.lastIndex=u(b,d(a.lastIndex),y))}for(var V,W="",C=0,R=0;R<g.length;R++){X=g[R];for(var f=r(X[0]),S=m(h(o(X.index),b.length),0),v=[],Y=1;Y<X.length;Y++)v.push(void 0===(V=X[Y])?V:String(V));var K=X.groups;if(p){var J=[f].concat(v,S,b);void 0!==K&&J.push(K);var N=r(e.apply(void 0,J))}else N=Z(f,b,S,v,K,e);S>=C&&(W+=b.slice(C,S)+N,C=S+f.length)}return W+b.slice(C)}]}),!!e((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!I||p)},function(t,i,n){"use strict";var l=n(98),e=n(1),c=n(22),o=n(169),d=n(15),r=n(100);l("search",(function(t,i,n){return[function(i){var n=c(this),l=null==i?void 0:i[t];return void 0!==l?l.call(i,n):new RegExp(i)[t](d(n))},function(t){var l=e(this),c=d(t),a=n(i,l,c);if(a.done)return a.value;var u=l.lastIndex;o(u,0)||(l.lastIndex=0);var Z=r(l,c);return o(l.lastIndex,u)||(l.lastIndex=u),null===Z?-1:Z.index}]}))},function(t,i,n){"use strict";var l=n(98),e=n(79),c=n(1),o=n(22),d=n(28),r=n(99),a=n(10),u=n(15),Z=n(100),s=n(97),b=n(96),m=n(2),h=b.UNSUPPORTED_Y,I=[].push,p=Math.min;l("split",(function(t,i,n){var l;return l="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var l=u(o(this)),c=void 0===n?4294967295:n>>>0;if(0===c)return[];if(void 0===t)return[l];if(!e(t))return i.call(l,t,c);for(var d,r,a,Z=[],b=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),m=0,h=new RegExp(t.source,b+"g");(d=s.call(h,l))&&!((r=h.lastIndex)>m&&(Z.push(l.slice(m,d.index)),d.length>1&&d.index<l.length&&I.apply(Z,d.slice(1)),a=d[0].length,m=r,Z.length>=c));)h.lastIndex===d.index&&h.lastIndex++;return m===l.length?!a&&h.test("")||Z.push(""):Z.push(l.slice(m)),Z.length>c?Z.slice(0,c):Z}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:i.call(this,t,n)}:i,[function(i,n){var e=o(this),c=null==i?void 0:i[t];return void 0!==c?c.call(i,e,n):l.call(u(e),i,n)},function(t,e){var o=c(this),s=u(t),b=n(l,o,s,e,l!==i);if(b.done)return b.value;var m=d(o,RegExp),I=o.unicode,G=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(h?"g":"y"),y=new m(h?"^(?:"+o.source+")":o,G),g=void 0===e?4294967295:e>>>0;if(0===g)return[];if(0===s.length)return null===Z(y,s)?[s]:[];for(var X=0,V=0,W=[];V<s.length;){y.lastIndex=h?0:V;var C,R=Z(y,h?s.slice(V):s);if(null===R||(C=p(a(y.lastIndex+(h?V:0)),s.length))===X)V=r(s,V,I);else{if(W.push(s.slice(X,V)),W.length===g)return W;for(var f=1;f<=R.length-1;f++)if(W.push(R[f]),W.length===g)return W;V=X=C}}return W.push(s.slice(X)),W}]}),!!m((function(){var t=/(?:)/,i=t.exec;t.exec=function(){return i.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]})),h)},function(t,i,n){"use strict";var l,e=n(0),c=n(24).f,o=n(10),d=n(15),r=n(133),a=n(22),u=n(134),Z=n(5),s="".startsWith,b=Math.min,m=u("startsWith");e({target:"String",proto:!0,forced:!!(Z||m||(l=c(String.prototype,"startsWith"),!l||l.writable))&&!m},{startsWith:function(t){var i=d(a(this));r(t);var n=o(b(arguments.length>1?arguments[1]:void 0,i.length)),l=d(t);return s?s.call(i,l,n):i.slice(n,n+l.length)===l}})},function(t,i,n){"use strict";var l=n(0),e=n(64).trim;l({target:"String",proto:!0,forced:n(135)("trim")},{trim:function(){return e(this)}})},function(t,i,n){"use strict";var l=n(0),e=n(64).end,c=n(135)("trimEnd"),o=c?function(){return e(this)}:"".trimEnd;l({target:"String",proto:!0,forced:c},{trimEnd:o,trimRight:o})},function(t,i,n){"use strict";var l=n(0),e=n(64).start,c=n(135)("trimStart"),o=c?function(){return e(this)}:"".trimStart;l({target:"String",proto:!0,forced:c},{trimStart:o,trimLeft:o})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("anchor")},{anchor:function(t){return e(this,"a","name",t)}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("big")},{big:function(){return e(this,"big","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("blink")},{blink:function(){return e(this,"blink","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("bold")},{bold:function(){return e(this,"b","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("fixed")},{fixed:function(){return e(this,"tt","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("fontcolor")},{fontcolor:function(t){return e(this,"font","color",t)}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("fontsize")},{fontsize:function(t){return e(this,"font","size",t)}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("italics")},{italics:function(){return e(this,"i","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("link")},{link:function(t){return e(this,"a","href",t)}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("small")},{small:function(){return e(this,"small","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("strike")},{strike:function(){return e(this,"strike","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("sub")},{sub:function(){return e(this,"sub","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("sup")},{sup:function(){return e(this,"sup","","")}})},function(t,i,n){n(43)("Float32",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Float64",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Int8",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Int16",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Int32",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Uint8",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Uint8",(function(t){return function(i,n,l){return t(this,i,n,l)}}),!0)},function(t,i,n){n(43)("Uint16",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Uint32",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){"use strict";var l=n(12),e=n(149),c=l.aTypedArray;(0,l.exportTypedArrayMethod)("copyWithin",(function(t,i){return e.call(c(this),t,i,arguments.length>2?arguments[2]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).every,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("every",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(116),c=l.aTypedArray;(0,l.exportTypedArrayMethod)("fill",(function(t){return e.apply(c(this),arguments)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).filter,c=n(380),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("filter",(function(t){var i=e(o(this),t,arguments.length>1?arguments[1]:void 0);return c(this,i)}))},function(t,i,n){var l=n(381),e=n(101);t.exports=function(t,i){return l(e(t),i)}},function(t,i){t.exports=function(t,i){for(var n=0,l=i.length,e=new t(l);l>n;)e[n]=i[n++];return e}},function(t,i,n){"use strict";var l=n(12),e=n(23).find,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("find",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).findIndex,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("findIndex",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).forEach,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("forEach",(function(t){e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(136);(0,n(12).exportTypedArrayStaticMethod)("from",n(185),l)},function(t,i,n){"use strict";var l=n(12),e=n(71).includes,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("includes",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(71).indexOf,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("indexOf",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(4),e=n(12),c=n(87),o=n(7)("iterator"),d=l.Uint8Array,r=c.values,a=c.keys,u=c.entries,Z=e.aTypedArray,s=e.exportTypedArrayMethod,b=d&&d.prototype[o],m=!!b&&("values"==b.name||null==b.name),h=function(){return r.call(Z(this))};s("entries",(function(){return u.call(Z(this))})),s("keys",(function(){return a.call(Z(this))})),s("values",h,!m),s(o,h,!m)},function(t,i,n){"use strict";var l=n(12),e=l.aTypedArray,c=l.exportTypedArrayMethod,o=[].join;c("join",(function(t){return o.apply(e(this),arguments)}))},function(t,i,n){"use strict";var l=n(12),e=n(154),c=l.aTypedArray;(0,l.exportTypedArrayMethod)("lastIndexOf",(function(t){return e.apply(c(this),arguments)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).map,c=n(101),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("map",(function(t){return e(o(this),t,arguments.length>1?arguments[1]:void 0,(function(t,i){return new(c(t))(i)}))}))},function(t,i,n){"use strict";var l=n(12),e=n(136),c=l.aTypedArrayConstructor;(0,l.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,i=arguments.length,n=new(c(this))(i);i>t;)n[t]=arguments[t++];return n}),e)},function(t,i,n){"use strict";var l=n(12),e=n(88).left,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduce",(function(t){return e(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(88).right,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduceRight",(function(t){return e(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=l.aTypedArray,c=l.exportTypedArrayMethod,o=Math.floor;c("reverse",(function(){for(var t,i=e(this).length,n=o(i/2),l=0;l<n;)t=this[l],this[l++]=this[--i],this[i]=t;return this}))},function(t,i,n){"use strict";var l=n(12),e=n(10),c=n(184),o=n(13),d=n(2),r=l.aTypedArray;(0,l.exportTypedArrayMethod)("set",(function(t){r(this);var i=c(arguments.length>1?arguments[1]:void 0,1),n=this.length,l=o(t),d=e(l.length),a=0;if(d+i>n)throw RangeError("Wrong length");for(;a<d;)this[i+a]=l[a++]}),d((function(){new Int8Array(1).set({})})))},function(t,i,n){"use strict";var l=n(12),e=n(101),c=n(2),o=l.aTypedArray,d=l.exportTypedArrayMethod,r=[].slice;d("slice",(function(t,i){for(var n=r.call(o(this),t,i),l=e(this),c=0,d=n.length,a=new l(d);d>c;)a[c]=n[c++];return a}),c((function(){new Int8Array(1).slice()})))},function(t,i,n){"use strict";var l=n(12),e=n(23).some,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("some",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(4),c=n(2),o=n(3),d=n(10),r=n(155),a=n(156),u=n(157),Z=n(48),s=n(123),b=l.aTypedArray,m=l.exportTypedArrayMethod,h=e.Uint16Array,I=h&&h.prototype.sort,p=!!I&&!c((function(){var t=new h(2);t.sort(null),t.sort({})})),G=!!I&&!c((function(){if(Z)return Z<74;if(a)return a<67;if(u)return!0;if(s)return s<602;var t,i,n=new h(516),l=Array(516);for(t=0;t<516;t++)i=t%4,n[t]=515-t,l[t]=t-2*i+3;for(n.sort((function(t,i){return(t/4|0)-(i/4|0)})),t=0;t<516;t++)if(n[t]!==l[t])return!0}));m("sort",(function(t){if(void 0!==t&&o(t),G)return I.call(this,t);b(this);var i,n=d(this.length),l=Array(n);for(i=0;i<n;i++)l[i]=this[i];for(l=r(this,function(t){return function(i,n){return void 0!==t?+t(i,n)||0:n!=n?-1:i!=i?1:0===i&&0===n?1/i>0&&1/n<0?1:-1:i>n}}(t)),i=0;i<n;i++)this[i]=l[i];return this}),!G||p)},function(t,i,n){"use strict";var l=n(12),e=n(10),c=n(50),o=n(101),d=l.aTypedArray;(0,l.exportTypedArrayMethod)("subarray",(function(t,i){var n=d(this),l=n.length,r=c(t,l);return new(o(n))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,e((void 0===i?l:c(i,l))-r))}))},function(t,i,n){"use strict";var l=n(4),e=n(12),c=n(2),o=l.Int8Array,d=e.aTypedArray,r=e.exportTypedArrayMethod,a=[].toLocaleString,u=[].slice,Z=!!o&&c((function(){a.call(new o(1))}));r("toLocaleString",(function(){return a.apply(Z?u.call(d(this)):d(this),arguments)}),c((function(){return[1,2].toLocaleString()!=new o([1,2]).toLocaleString()}))||!c((function(){o.prototype.toLocaleString.call([1,2])})))},function(t,i,n){"use strict";var l=n(12).exportTypedArrayMethod,e=n(2),c=n(4).Uint8Array,o=c&&c.prototype||{},d=[].toString,r=[].join;e((function(){d.call({})}))&&(d=function(){return r.call(this)});var a=o.toString!=d;l("toString",d,a)},function(t,i,n){"use strict";n(90)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(186))},function(t,i,n){n(405)},function(t,i,n){"use strict";var l=n(0),e=n(27),c=n(42),o=n(26),d=n(18),r=n(38),a=n(6),u=n(15),Z=function(t,i){var n=this;if(!(n instanceof Z))return new Z(t,i);c&&(n=c(new Error(void 0),e(n))),void 0!==i&&d(n,"message",u(i));var l=[];return a(t,l.push,{that:l}),d(n,"errors",l),n};Z.prototype=o(Error.prototype,{constructor:r(5,Z),message:r(5,""),name:r(5,"AggregateError")}),l({global:!0},{AggregateError:Z})},function(t,i,n){var l=n(0),e=n(51),c=Object.isFrozen,o=function(t,i){if(!c||!e(t)||!c(t))return!1;for(var n,l=0,o=t.length;l<o;)if(!("string"==typeof(n=t[l++])||i&&void 0===n))return!1;return 0!==o};l({target:"Array",stat:!0},{isTemplateObject:function(t){if(!o(t,!0))return!1;var i=t.raw;return!(i.length!==t.length||!o(i,!1))}})},function(t,i,n){"use strict";var l=n(9),e=n(35),c=n(13),o=n(10),d=n(14).f;l&&!("lastIndex"in[])&&(d(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),i=o(t.length);return 0==i?0:i-1}}),e("lastIndex"))},function(t,i,n){"use strict";var l=n(9),e=n(35),c=n(13),o=n(10),d=n(14).f;l&&!("lastItem"in[])&&(d(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),i=o(t.length);return 0==i?void 0:t[i-1]},set:function(t){var i=c(this),n=o(i.length);return i[0==n?0:n-1]=t}}),e("lastItem"))},function(t,i,n){"use strict";var l=n(0),e=n(33),c=n(18),o=n(16),d=n(7),r=n(410),a=n(5),u=d("toStringTag"),Z=function(){e(this,Z)};Z.prototype=r,o(r,u)||c(r,u,"AsyncIterator"),o(r,"constructor")&&r.constructor!==Object||c(r,"constructor",Z),l({global:!0,forced:a},{AsyncIterator:Z})},function(t,i,n){var l,e,c=n(4),o=n(83),d=n(27),r=n(16),a=n(18),u=n(7),Z=n(5),s=u("asyncIterator"),b=c.AsyncIterator,m=o.AsyncIteratorPrototype;if(!Z)if(m)l=m;else if("function"==typeof b)l=b.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{e=d(d(d(Function("return async function*(){}()")()))),d(e)===Object.prototype&&(l=e)}catch(t){}l||(l={}),r(l,s)||a(l,s,(function(){return this})),t.exports=l},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(56)((function(t,i){var n=this,l=n.iterator;return t.resolve(e(n.next.apply(l,i))).then((function(t){return e(t).done?(n.done=!0,{done:!0,value:void 0}):{done:!1,value:[n.index++,t.value]}}))}));l({target:"AsyncIterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:e(this),index:0})}})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(80),o=n(56)((function(t,i){var n=this;return new t((function(l,c){var o=function(){try{t.resolve(e(n.next.apply(n.iterator,n.remaining?[]:i))).then((function(t){try{e(t).done?(n.done=!0,l({done:!0,value:void 0})):n.remaining?(n.remaining--,o()):l({done:!1,value:t.value})}catch(t){c(t)}}),c)}catch(t){c(t)}};o()}))}));l({target:"AsyncIterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(81).every;l({target:"AsyncIterator",proto:!0,real:!0},{every:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(56)((function(t,i){var n=this,l=n.filterer;return new t((function(e,o){var d=function(){try{t.resolve(c(n.next.apply(n.iterator,i))).then((function(i){try{if(c(i).done)n.done=!0,e({done:!0,value:void 0});else{var r=i.value;t.resolve(l(r)).then((function(t){t?e({done:!1,value:r}):d()}),o)}}catch(t){o(t)}}),o)}catch(t){o(t)}};d()}))}));l({target:"AsyncIterator",proto:!0,real:!0},{filter:function(t){return new o({iterator:c(this),filterer:e(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(81).find;l({target:"AsyncIterator",proto:!0,real:!0},{find:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(56),d=n(187),r=o((function(t){var i,n=this,l=n.mapper;return new t((function(o,r){var a=function(){try{t.resolve(c(n.next.call(n.iterator))).then((function(a){try{c(a).done?(n.done=!0,o({done:!0,value:void 0})):t.resolve(l(a.value)).then((function(t){try{return n.innerIterator=i=d(t),n.innerNext=e(i.next),u()}catch(t){r(t)}}),r)}catch(t){r(t)}}),r)}catch(t){r(t)}},u=function(){if(i=n.innerIterator)try{t.resolve(c(n.innerNext.call(i))).then((function(t){try{c(t).done?(n.innerIterator=n.innerNext=null,a()):o({done:!1,value:t.value})}catch(t){r(t)}}),r)}catch(t){r(t)}else a()};u()}))}));l({target:"AsyncIterator",proto:!0,real:!0},{flatMap:function(t){return new r({iterator:c(this),mapper:e(t),innerIterator:null,innerNext:null})}})},function(t,i,n){"use strict";var l=n(0),e=n(81).forEach;l({target:"AsyncIterator",proto:!0,real:!0},{forEach:function(t){return e(this,t)}})},function(t,i,n){var l=n(0),e=n(61),c=n(1),o=n(13),d=n(56),r=n(187),a=n(41),u=n(52),Z=n(102),s=n(7),b=n(188),m=s("asyncIterator"),h=e.AsyncIterator,I=d((function(t,i){return c(this.next.apply(this.iterator,i))}),!0);l({target:"AsyncIterator",stat:!0},{from:function(t){var i,n=o(t),l=Z(n[m]);return void 0!==l&&(i=r(n,l))instanceof h?i:void 0===i&&void 0!==(l=u(n))?new b(a(n,l)):new I({iterator:void 0!==i?i:n})}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(56)((function(t,i){var n=this,l=n.mapper;return t.resolve(c(n.next.apply(n.iterator,i))).then((function(i){return c(i).done?(n.done=!0,{done:!0,value:void 0}):t.resolve(l(i.value)).then((function(t){return{done:!1,value:t}}))}))}));l({target:"AsyncIterator",proto:!0,real:!0},{map:function(t){return new o({iterator:c(this),mapper:e(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(11)("Promise");l({target:"AsyncIterator",proto:!0,real:!0},{reduce:function(t){var i=c(this),n=e(i.next),l=arguments.length<2,d=l?void 0:arguments[1];return e(t),new o((function(e,r){var a=function(){try{o.resolve(c(n.call(i))).then((function(i){try{if(c(i).done)l?r(TypeError("Reduce of empty iterator with no initial value")):e(d);else{var n=i.value;l?(l=!1,d=n,a()):o.resolve(t(d,n)).then((function(t){d=t,a()}),r)}}catch(t){r(t)}}),r)}catch(t){r(t)}};a()}))}})},function(t,i,n){"use strict";var l=n(0),e=n(81).some;l({target:"AsyncIterator",proto:!0,real:!0},{some:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(80),o=n(56)((function(t,i){var n,l,e=this.iterator;return this.remaining--?this.next.apply(e,i):(l={done:!0,value:void 0},this.done=!0,void 0!==(n=e.return)?t.resolve(n.call(e)).then((function(){return l})):l)}));l({target:"AsyncIterator",proto:!0,real:!0},{take:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(81).toArray;l({target:"AsyncIterator",proto:!0,real:!0},{toArray:function(){return e(this)}})},function(t,i,n){var l=n(0),e=n(189),c=n(11),o=n(26),d=function(){var t=c("Object","freeze");return t?t(o(null)):o(null)};l({global:!0},{compositeKey:function(){return e.apply(Object,arguments).get("object",d)}})},function(t,i,n){var l=n(0),e=n(189),c=n(11);l({global:!0},{compositeSymbol:function(){return 1===arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):e.apply(null,arguments).get("symbol",c("Symbol"))}})},function(t,i,n){n(160)},function(t,i,n){"use strict";var l=n(0),e=n(4),c=n(33),o=n(18),d=n(2),r=n(16),a=n(7),u=n(121).IteratorPrototype,Z=n(5),s=a("iterator"),b=a("toStringTag"),m=e.Iterator,h=Z||"function"!=typeof m||m.prototype!==u||!d((function(){m({})})),I=function(){c(this,I)};Z&&o(u={},s,(function(){return this})),r(u,b)||o(u,b,"Iterator"),!h&&r(u,"constructor")&&u.constructor!==Object||o(u,"constructor",I),I.prototype=u,l({global:!0,forced:h},{Iterator:I})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(57)((function(t){var i=e(this.next.apply(this.iterator,t));if(!(this.done=!!i.done))return[this.index++,i.value]}));l({target:"Iterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:e(this),index:0})}})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(80),o=n(57)((function(t){for(var i,n=this.iterator,l=this.next;this.remaining;)if(this.remaining--,i=e(l.call(n)),this.done=!!i.done)return;if(i=e(l.apply(n,t)),!(this.done=!!i.done))return i.value}));l({target:"Iterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!0},{every:function(t){return o(this),c(t),!e(this,(function(i,n){if(!t(i))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(57),d=n(117),r=o((function(t){for(var i,n,l=this.iterator,e=this.filterer,o=this.next;;){if(i=c(o.apply(l,t)),this.done=!!i.done)return;if(n=i.value,d(l,e,n))return n}}));l({target:"Iterator",proto:!0,real:!0},{filter:function(t){return new r({iterator:c(this),filterer:e(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!0},{find:function(t){return o(this),c(t),e(this,(function(i,n){if(t(i))return n(i)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(52),d=n(57),r=n(85),a=d((function(){for(var t,i,n,l,d=this.iterator,a=this.mapper;;)try{if(l=this.innerIterator){if(!(t=c(this.innerNext.call(l))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=c(this.next.call(d)),this.done=!!t.done)return;if(i=a(t.value),void 0===(n=o(i)))throw TypeError(".flatMap callback should return an iterable object");this.innerIterator=l=c(n.call(i)),this.innerNext=e(l.next)}catch(t){r(d,"throw",t)}}));l({target:"Iterator",proto:!0,real:!0},{flatMap:function(t){return new a({iterator:c(this),mapper:e(t),innerIterator:null,innerNext:null})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(1);l({target:"Iterator",proto:!0,real:!0},{forEach:function(t){e(c(this),t,{IS_ITERATOR:!0})}})},function(t,i,n){var l=n(0),e=n(61),c=n(1),o=n(13),d=n(57),r=n(41),a=n(52),u=e.Iterator,Z=d((function(t){var i=c(this.next.apply(this.iterator,t));if(!(this.done=!!i.done))return i.value}),!0);l({target:"Iterator",stat:!0},{from:function(t){var i,n=o(t),l=a(n);if(null!=l){if((i=r(n,l))instanceof u)return i}else i=n;return new Z({iterator:i})}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(57),d=n(117),r=o((function(t){var i=this.iterator,n=c(this.next.apply(i,t));if(!(this.done=!!n.done))return d(i,this.mapper,n.value)}));l({target:"Iterator",proto:!0,real:!0},{map:function(t){return new r({iterator:c(this),mapper:e(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!0},{reduce:function(t){o(this),c(t);var i=arguments.length<2,n=i?void 0:arguments[1];if(e(this,(function(l){i?(i=!1,n=l):n=t(n,l)}),{IS_ITERATOR:!0}),i)throw TypeError("Reduce of empty iterator with no initial value");return n}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!0},{some:function(t){return o(this),c(t),e(this,(function(i,n){if(t(i))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(80),o=n(57),d=n(85),r=o((function(t){var i=this.iterator;if(!this.remaining--)return this.done=!0,d(i,"normal",void 0);var n=e(this.next.apply(i,t));return(this.done=!!n.done)?void 0:n.value}));l({target:"Iterator",proto:!0,real:!0},{take:function(t){return new r({iterator:e(this),remaining:c(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(1),o=[].push;l({target:"Iterator",proto:!0,real:!0},{toArray:function(){var t=[];return e(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(103);l({target:"Map",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{every:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(n,(function(t,n,e){if(!l(n,t,i))return e()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(37),Z=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{filter:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Map"))),s=d(e.set);return Z(n,(function(t,n){l(n,t,i)&&s.call(e,t,n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{find:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n,e){if(l(n,t,i))return e(n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{findKey:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n,e){if(l(n,t,i))return e(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){n(0)({target:"Map",stat:!0},{from:n(104)})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3);l({target:"Map",stat:!0},{groupBy:function(t,i){var n=new this;c(i);var l=c(n.has),o=c(n.get),d=c(n.set);return e(t,(function(t){var e=i(t);l.call(n,e)?o.call(n,e).push(t):d.call(n,e,[t])})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(37),d=n(449),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{includes:function(t){return r(o(c(this)),(function(i,n,l){if(d(n,t))return l()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i){t.exports=function(t,i){return t===i||t!=t&&i!=i}},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3);l({target:"Map",stat:!0},{keyBy:function(t,i){var n=new this;c(i);var l=c(n.set);return e(t,(function(t){l.call(n,i(t),t)})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(37),d=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{keyOf:function(t){return d(o(c(this)),(function(i,n,l){if(n===t)return l(i)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(37),Z=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{mapKeys:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Map"))),s=d(e.set);return Z(n,(function(t,n){s.call(e,l(n,t,i),n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(37),Z=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{mapValues:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Map"))),s=d(e.set);return Z(n,(function(t,n){s.call(e,t,l(n,t,i))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{merge:function(t){for(var i=c(this),n=o(i.set),l=arguments.length,e=0;e<l;)d(arguments[e++],n,{that:i,AS_ENTRIES:!0});return i}})},function(t,i,n){n(0)({target:"Map",stat:!0},{of:n(105)})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{reduce:function(t){var i=c(this),n=d(i),l=arguments.length<2,e=l?void 0:arguments[1];if(o(t),r(n,(function(n,c){l?(l=!1,e=c):e=t(e,c,n,i)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),l)throw TypeError("Reduce of empty map with no initial value");return e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{some:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n,e){if(l(n,t,i))return e()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3);l({target:"Map",proto:!0,real:!0,forced:e},{update:function(t,i){var n=c(this),l=arguments.length;o(i);var e=n.has(t);if(!e&&l<3)throw TypeError("Updating absent value");var d=e?n.get(t):o(l>2?arguments[2]:void 0)(t,n);return n.set(t,i(d,t,n)),n}})},function(t,i,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:n(5)},{updateOrInsert:n(138)})},function(t,i,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:n(5)},{upsert:n(138)})},function(t,i,n){var l=n(0),e=Math.min,c=Math.max;l({target:"Math",stat:!0},{clamp:function(t,i,n){return e(n,c(i,t))}})},function(t,i,n){n(0)({target:"Math",stat:!0},{DEG_PER_RAD:Math.PI/180})},function(t,i,n){var l=n(0),e=180/Math.PI;l({target:"Math",stat:!0},{degrees:function(t){return t*e}})},function(t,i,n){var l=n(0),e=n(190),c=n(163);l({target:"Math",stat:!0},{fscale:function(t,i,n,l,o){return c(e(t,i,n,l,o))}})},function(t,i,n){n(0)({target:"Math",stat:!0},{iaddh:function(t,i,n,l){var e=t>>>0,c=n>>>0;return(i>>>0)+(l>>>0)+((e&c|(e|c)&~(e+c>>>0))>>>31)|0}})},function(t,i,n){n(0)({target:"Math",stat:!0},{imulh:function(t,i){var n=+t,l=+i,e=65535&n,c=65535&l,o=n>>16,d=l>>16,r=(o*c>>>0)+(e*c>>>16);return o*d+(r>>16)+((e*d>>>0)+(65535&r)>>16)}})},function(t,i,n){n(0)({target:"Math",stat:!0},{isubh:function(t,i,n,l){var e=t>>>0,c=n>>>0;return(i>>>0)-(l>>>0)-((~e&c|~(e^c)&e-c>>>0)>>>31)|0}})},function(t,i,n){n(0)({target:"Math",stat:!0},{RAD_PER_DEG:180/Math.PI})},function(t,i,n){var l=n(0),e=Math.PI/180;l({target:"Math",stat:!0},{radians:function(t){return t*e}})},function(t,i,n){n(0)({target:"Math",stat:!0},{scale:n(190)})},function(t,i,n){var l=n(0),e=n(1),c=n(164),o=n(62),d=n(17),r=d.set,a=d.getterFor("Seeded Random Generator"),u=o((function(t){r(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=a(this);return{value:(1073741823&(t.seed=(1103515245*t.seed+12345)%2147483647))/1073741823,done:!1}}));l({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var i=e(t).seed;if(!c(i))throw TypeError('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new u(i)}})},function(t,i,n){n(0)({target:"Math",stat:!0},{signbit:function(t){return(t=+t)==t&&0==t?1/t==-1/0:t<0}})},function(t,i,n){n(0)({target:"Math",stat:!0},{umulh:function(t,i){var n=+t,l=+i,e=65535&n,c=65535&l,o=n>>>16,d=l>>>16,r=(o*c>>>0)+(e*c>>>16);return o*d+(r>>>16)+((e*d>>>0)+(65535&r)>>>16)}})},function(t,i,n){"use strict";var l=n(0),e=n(30),c=n(130),o=/^[\da-z]+$/;l({target:"Number",stat:!0},{fromString:function(t,i){var n,l,d=1;if("string"!=typeof t)throw TypeError("Invalid number representation");if(!t.length)throw SyntaxError("Invalid number representation");if("-"==t.charAt(0)&&(d=-1,!(t=t.slice(1)).length))throw SyntaxError("Invalid number representation");if((n=void 0===i?10:e(i))<2||n>36)throw RangeError("Invalid radix");if(!o.test(t)||(l=c(t,n)).toString(n)!==t)throw SyntaxError("Invalid number representation");return d*l}})},function(t,i,n){"use strict";var l=n(0),e=n(139);l({target:"Object",stat:!0},{iterateEntries:function(t){return new e(t,"entries")}})},function(t,i,n){"use strict";var l=n(0),e=n(139);l({target:"Object",stat:!0},{iterateKeys:function(t){return new e(t,"keys")}})},function(t,i,n){"use strict";var l=n(0),e=n(139);l({target:"Object",stat:!0},{iterateValues:function(t){return new e(t,"values")}})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(54),o=n(3),d=n(1),r=n(8),a=n(33),u=n(14).f,Z=n(18),s=n(36),b=n(41),m=n(102),h=n(6),I=n(174),p=n(7),G=n(17),y=p("observable"),g=G.get,X=G.set,V=function(t){var i=t.cleanup;if(i){t.cleanup=void 0;try{i()}catch(t){I(t)}}},W=function(t){return void 0===t.observer},C=function(t){var i=t.facade;if(!e){i.closed=!0;var n=t.subscriptionObserver;n&&(n.closed=!0)}t.observer=void 0},R=function(t,i){var n,l=X(this,{cleanup:void 0,observer:d(t),subscriptionObserver:void 0});e||(this.closed=!1);try{(n=m(t.start))&&n.call(t,this)}catch(t){I(t)}if(!W(l)){var c=l.subscriptionObserver=new f(this);try{var r=i(c),a=r;null!=r&&(l.cleanup="function"==typeof r.unsubscribe?function(){a.unsubscribe()}:o(r))}catch(t){return void c.error(t)}W(l)&&V(l)}};R.prototype=s({},{unsubscribe:function(){var t=g(this);W(t)||(C(t),V(t))}}),e&&u(R.prototype,"closed",{configurable:!0,get:function(){return W(g(this))}});var f=function(t){X(this,{subscription:t}),e||(this.closed=!1)};f.prototype=s({},{next:function(t){var i=g(g(this).subscription);if(!W(i)){var n=i.observer;try{var l=m(n.next);l&&l.call(n,t)}catch(t){I(t)}}},error:function(t){var i=g(g(this).subscription);if(!W(i)){var n=i.observer;C(i);try{var l=m(n.error);l?l.call(n,t):I(t)}catch(t){I(t)}V(i)}},complete:function(){var t=g(g(this).subscription);if(!W(t)){var i=t.observer;C(t);try{var n=m(i.complete);n&&n.call(i)}catch(t){I(t)}V(t)}}}),e&&u(f.prototype,"closed",{configurable:!0,get:function(){return W(g(g(this).subscription))}});var S=function(t){a(this,S,"Observable"),X(this,{subscriber:o(t)})};s(S.prototype,{subscribe:function(t){var i=arguments.length;return new R("function"==typeof t?{next:t,error:i>1?arguments[1]:void 0,complete:i>2?arguments[2]:void 0}:r(t)?t:{},g(this).subscriber)}}),s(S,{from:function(t){var i="function"==typeof this?this:S,n=m(d(t)[y]);if(n){var l=d(n.call(t));return l.constructor===i?l:new i((function(t){return l.subscribe(t)}))}var e=b(t);return new i((function(t){h(e,(function(i,n){if(t.next(i),t.closed)return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))},of:function(){for(var t="function"==typeof this?this:S,i=arguments.length,n=new Array(i),l=0;l<i;)n[l]=arguments[l++];return new t((function(t){for(var l=0;l<i;l++)if(t.next(n[l]),t.closed)return;t.complete()}))}}),Z(S.prototype,y,(function(){return this})),l({global:!0},{Observable:S}),c("Observable")},function(t,i,n){n(175)},function(t,i,n){n(481)},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(11),o=n(78),d=n(95),r=n(6);l({target:"Promise",stat:!0},{any:function(t){var i=this,n=o.f(i),l=n.resolve,a=n.reject,u=d((function(){var n=e(i.resolve),o=[],d=0,u=1,Z=!1;r(t,(function(t){var e=d++,r=!1;o.push(void 0),u++,n.call(i,t).then((function(t){r||Z||(Z=!0,l(t))}),(function(t){r||Z||(r=!0,o[e]=t,--u||a(new(c("AggregateError"))(o,"No one promise resolved")))}))})),--u||a(new(c("AggregateError"))(o,"No one promise resolved"))}));return u.error&&a(u.value),n.promise}})},function(t,i,n){"use strict";var l=n(0),e=n(78),c=n(95);l({target:"Promise",stat:!0},{try:function(t){var i=e.f(this),n=c(t);return(n.error?i.reject:i.resolve)(n.value),i.promise}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.toKey,d=e.set;l({target:"Reflect",stat:!0},{defineMetadata:function(t,i,n){var l=arguments.length<4?void 0:o(arguments[3]);d(t,i,c(n),l)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.toKey,d=e.getMap,r=e.store;l({target:"Reflect",stat:!0},{deleteMetadata:function(t,i){var n=arguments.length<3?void 0:o(arguments[2]),l=d(c(i),n,!1);if(void 0===l||!l.delete(t))return!1;if(l.size)return!0;var e=r.get(i);return e.delete(n),!!e.size||r.delete(i)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=n(27),d=e.has,r=e.get,a=e.toKey,u=function(t,i,n){if(d(t,i,n))return r(t,i,n);var l=o(i);return null!==l?u(t,l,n):void 0};l({target:"Reflect",stat:!0},{getMetadata:function(t,i){var n=arguments.length<3?void 0:a(arguments[2]);return u(t,c(i),n)}})},function(t,i,n){var l=n(0),e=n(179),c=n(44),o=n(1),d=n(27),r=n(6),a=c.keys,u=c.toKey,Z=function(t,i){var n=a(t,i),l=d(t);if(null===l)return n;var c,o,u=Z(l,i);return u.length?n.length?(c=new e(n.concat(u)),r(c,(o=[]).push,{that:o}),o):u:n};l({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var i=arguments.length<2?void 0:u(arguments[1]);return Z(o(t),i)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.get,d=e.toKey;l({target:"Reflect",stat:!0},{getOwnMetadata:function(t,i){var n=arguments.length<3?void 0:d(arguments[2]);return o(t,c(i),n)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.keys,d=e.toKey;l({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var i=arguments.length<2?void 0:d(arguments[1]);return o(c(t),i)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=n(27),d=e.has,r=e.toKey,a=function(t,i,n){if(d(t,i,n))return!0;var l=o(i);return null!==l&&a(t,l,n)};l({target:"Reflect",stat:!0},{hasMetadata:function(t,i){var n=arguments.length<3?void 0:r(arguments[2]);return a(t,c(i),n)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.has,d=e.toKey;l({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,i){var n=arguments.length<3?void 0:d(arguments[2]);return o(t,c(i),n)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.toKey,d=e.set;l({target:"Reflect",stat:!0},{metadata:function(t,i){return function(n,l){d(t,i,c(n),o(l))}}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(191);l({target:"Set",proto:!0,real:!0,forced:e},{addAll:function(){return c.apply(this,arguments)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(103);l({target:"Set",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{difference:function(t){var i=o(this),n=new(r(i,c("Set")))(i),l=d(n.delete);return a(t,(function(t){l.call(n,t)})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{every:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(n,(function(t,n){if(!l(t,t,i))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(58),Z=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{filter:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Set"))),s=d(e.add);return Z(n,(function(t){l(t,t,i)&&s.call(e,t)}),{IS_ITERATOR:!0}),e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{find:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n){if(l(t,t,i))return n(t)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){n(0)({target:"Set",stat:!0},{from:n(104)})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{intersection:function(t){var i=o(this),n=new(r(i,c("Set"))),l=d(i.has),e=d(n.add);return a(t,(function(t){l.call(i,t)&&e.call(n,t)})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{isDisjointFrom:function(t){var i=c(this),n=o(i.has);return!d(t,(function(t,l){if(!0===n.call(i,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(41),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{isSubsetOf:function(t){var i=r(this),n=o(t),l=n.has;return"function"!=typeof l&&(n=new(c("Set"))(t),l=d(n.has)),!a(i,(function(t,i){if(!1===l.call(n,t))return i()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{isSupersetOf:function(t){var i=c(this),n=o(i.has);return!d(t,(function(t,l){if(!1===n.call(i,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(58),d=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{join:function(t){var i=c(this),n=o(i),l=void 0===t?",":String(t),e=[];return d(n,e.push,{that:e,IS_ITERATOR:!0}),e.join(l)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(58),Z=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{map:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Set"))),s=d(e.add);return Z(n,(function(t){s.call(e,l(t,t,i))}),{IS_ITERATOR:!0}),e}})},function(t,i,n){n(0)({target:"Set",stat:!0},{of:n(105)})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{reduce:function(t){var i=c(this),n=d(i),l=arguments.length<2,e=l?void 0:arguments[1];if(o(t),r(n,(function(n){l?(l=!1,e=n):e=t(e,n,n,i)}),{IS_ITERATOR:!0}),l)throw TypeError("Reduce of empty set with no initial value");return e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{some:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n){if(l(t,t,i))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{symmetricDifference:function(t){var i=o(this),n=new(r(i,c("Set")))(i),l=d(n.delete),e=d(n.add);return a(t,(function(t){l.call(n,t)||e.call(n,t)})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{union:function(t){var i=o(this),n=new(r(i,c("Set")))(i);return a(t,d(n.add),{that:n}),n}})},function(t,i,n){"use strict";var l=n(0),e=n(66).charAt;l({target:"String",proto:!0,forced:n(2)((function(){return"𠮷"!=="𠮷".at(0)}))},{at:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l=n(0),e=n(62),c=n(22),o=n(15),d=n(17),r=n(66),a=r.codeAt,u=r.charAt,Z=d.set,s=d.getterFor("String Iterator"),b=e((function(t){Z(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,i=s(this),n=i.string,l=i.index;return l>=n.length?{value:void 0,done:!0}:(t=u(n,l),i.index+=t.length,{value:{codePoint:a(t,0),position:l},done:!1})}));l({target:"String",proto:!0},{codePoints:function(){return new b(o(c(this)))}})},function(t,i,n){n(181)},function(t,i,n){n(514)},function(t,i,n){"use strict";var l=n(0),e=n(22),c=n(79),o=n(15),d=n(65),r=n(183),a=n(7),u=n(5),Z=a("replace"),s=RegExp.prototype,b=Math.max,m=function(t,i,n){return n>t.length?-1:""===i?n:t.indexOf(i,n)};l({target:"String",proto:!0},{replaceAll:function(t,i){var n,l,a,h,I,p,G,y,g=e(this),X=0,V=0,W="";if(null!=t){if((n=c(t))&&!~o(e("flags"in s?t.flags:d.call(t))).indexOf("g"))throw TypeError("`.replaceAll` does not allow non-global regexes");if(void 0!==(l=t[Z]))return l.call(t,g,i);if(u&&n)return o(g).replace(t,i)}for(a=o(g),h=o(t),(I="function"==typeof i)||(i=o(i)),p=h.length,G=b(1,p),X=m(a,h,0);-1!==X;)y=I?o(i(h,X,a)):r(h,a,X,[],void 0,i),W+=a.slice(V,X)+y,V=X+p,X=m(a,h,X+G);return V<a.length&&(W+=a.slice(V)),W}})},function(t,i,n){n(21)("asyncDispose")},function(t,i,n){n(21)("dispose")},function(t,i,n){n(21)("observable")},function(t,i,n){n(21)("patternMatch")},function(t,i,n){n(21)("replaceAll")},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(103);l({target:"WeakMap",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,i,n){n(0)({target:"WeakMap",stat:!0},{from:n(104)})},function(t,i,n){n(0)({target:"WeakMap",stat:!0},{of:n(105)})},function(t,i,n){"use strict";n(0)({target:"WeakMap",proto:!0,real:!0,forced:n(5)},{upsert:n(138)})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(191);l({target:"WeakSet",proto:!0,real:!0,forced:e},{addAll:function(){return c.apply(this,arguments)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(103);l({target:"WeakSet",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,i,n){n(0)({target:"WeakSet",stat:!0},{from:n(104)})},function(t,i,n){n(0)({target:"WeakSet",stat:!0},{of:n(105)})},function(t,i,n){var l=n(4),e=n(192),c=n(151),o=n(18);for(var d in e){var r=l[d],a=r&&r.prototype;if(a&&a.forEach!==c)try{o(a,"forEach",c)}catch(t){a.forEach=c}}},function(t,i,n){var l=n(4),e=n(192),c=n(87),o=n(18),d=n(7),r=d("iterator"),a=d("toStringTag"),u=c.values;for(var Z in e){var s=l[Z],b=s&&s.prototype;if(b){if(b[r]!==u)try{o(b,r,u)}catch(t){b[r]=u}if(b[a]||o(b,a,Z),e[Z])for(var m in c)if(b[m]!==c[m])try{o(b,m,c[m])}catch(t){b[m]=c[m]}}}},function(t,i,n){var l=n(0),e=n(4),c=n(131);l({global:!0,bind:!0,enumerable:!0,forced:!e.setImmediate||!e.clearImmediate},{setImmediate:c.set,clearImmediate:c.clear})},function(t,i,n){var l=n(0),e=n(4),c=n(172),o=n(63),d=e.process;l({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){var i=o&&d.domain;c(i?i.bind(t):t)}})},function(t,i,n){var l=n(0),e=n(4),c=n(39),o=[].slice,d=function(t){return function(i,n){var l=arguments.length>2,e=l?o.call(arguments,2):void 0;return t(l?function(){("function"==typeof i?i:Function(i)).apply(this,e)}:i,n)}};l({global:!0,bind:!0,forced:/MSIE .\./.test(c)},{setTimeout:d(e.setTimeout),setInterval:d(e.setInterval)})},function(t,i,n){"use strict";n(180);var l,e=n(0),c=n(9),o=n(193),d=n(4),r=n(114),a=n(25),u=n(33),Z=n(16),s=n(167),b=n(152),m=n(66).codeAt,h=n(534),I=n(15),p=n(34),G=n(194),y=n(17),g=d.URL,X=G.URLSearchParams,V=G.getState,W=y.set,C=y.getterFor("URL"),R=Math.floor,f=Math.pow,S=/[A-Za-z]/,v=/[\d+-.A-Za-z]/,Y=/\d/,K=/^0x/i,J=/^[0-7]+$/,N=/^\d+$/,L=/^[\dA-Fa-f]+$/,U=/[\0\t\n\r #%/:<>?@[\\\]^|]/,H=/[\0\t\n\r #/:<>?@[\\\]^|]/,x=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,T=/[\t\n\r]/g,k=function(t,i){var n,l,e;if("["==i.charAt(0)){if("]"!=i.charAt(i.length-1))return"Invalid host";if(!(n=B(i.slice(1,-1))))return"Invalid host";t.host=n}else if(E(t)){if(i=h(i),U.test(i))return"Invalid host";if(null===(n=F(i)))return"Invalid host";t.host=n}else{if(H.test(i))return"Invalid host";for(n="",l=b(i),e=0;e<l.length;e++)n+=Q(l[e],w);t.host=n}},F=function(t){var i,n,l,e,c,o,d,r=t.split(".");if(r.length&&""==r[r.length-1]&&r.pop(),(i=r.length)>4)return t;for(n=[],l=0;l<i;l++){if(""==(e=r[l]))return t;if(c=10,e.length>1&&"0"==e.charAt(0)&&(c=K.test(e)?16:8,e=e.slice(8==c?1:2)),""===e)o=0;else{if(!(10==c?N:8==c?J:L).test(e))return t;o=parseInt(e,c)}n.push(o)}for(l=0;l<i;l++)if(o=n[l],l==i-1){if(o>=f(256,5-i))return null}else if(o>255)return null;for(d=n.pop(),l=0;l<n.length;l++)d+=n[l]*f(256,3-l);return d},B=function(t){var i,n,l,e,c,o,d,r=[0,0,0,0,0,0,0,0],a=0,u=null,Z=0,s=function(){return t.charAt(Z)};if(":"==s()){if(":"!=t.charAt(1))return;Z+=2,u=++a}for(;s();){if(8==a)return;if(":"!=s()){for(i=n=0;n<4&&L.test(s());)i=16*i+parseInt(s(),16),Z++,n++;if("."==s()){if(0==n)return;if(Z-=n,a>6)return;for(l=0;s();){if(e=null,l>0){if(!("."==s()&&l<4))return;Z++}if(!Y.test(s()))return;for(;Y.test(s());){if(c=parseInt(s(),10),null===e)e=c;else{if(0==e)return;e=10*e+c}if(e>255)return;Z++}r[a]=256*r[a]+e,2!=++l&&4!=l||a++}if(4!=l)return;break}if(":"==s()){if(Z++,!s())return}else if(s())return;r[a++]=i}else{if(null!==u)return;Z++,u=++a}}if(null!==u)for(o=a-u,a=7;0!=a&&o>0;)d=r[a],r[a--]=r[u+o-1],r[u+--o]=d;else if(8!=a)return;return r},z=function(t){var i,n,l,e;if("number"==typeof t){for(i=[],n=0;n<4;n++)i.unshift(t%256),t=R(t/256);return i.join(".")}if("object"==typeof t){for(i="",l=function(t){for(var i=null,n=1,l=null,e=0,c=0;c<8;c++)0!==t[c]?(e>n&&(i=l,n=e),l=null,e=0):(null===l&&(l=c),++e);return e>n&&(i=l,n=e),i}(t),n=0;n<8;n++)e&&0===t[n]||(e&&(e=!1),l===n?(i+=n?":":"::",e=!0):(i+=t[n].toString(16),n<7&&(i+=":")));return"["+i+"]"}return t},w={},A=s({},w,{" ":1,'"':1,"<":1,">":1,"`":1}),P=s({},A,{"#":1,"?":1,"{":1,"}":1}),M=s({},P,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),Q=function(t,i){var n=m(t,0);return n>32&&n<127&&!Z(i,t)?t:encodeURIComponent(t)},j={ftp:21,file:null,http:80,https:443,ws:80,wss:443},E=function(t){return Z(j,t.scheme)},D=function(t){return""!=t.username||""!=t.password},O=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},q=function(t,i){var n;return 2==t.length&&S.test(t.charAt(0))&&(":"==(n=t.charAt(1))||!i&&"|"==n)},_=function(t){var i;return t.length>1&&q(t.slice(0,2))&&(2==t.length||"/"===(i=t.charAt(2))||"\\"===i||"?"===i||"#"===i)},$=function(t){var i=t.path,n=i.length;!n||"file"==t.scheme&&1==n&&q(i[0],!0)||i.pop()},tt=function(t){return"."===t||"%2e"===t.toLowerCase()},it={},nt={},lt={},et={},ct={},ot={},dt={},rt={},at={},ut={},Zt={},st={},bt={},mt={},ht={},It={},pt={},Gt={},yt={},gt={},Xt={},Vt=function(t,i,n,e){var c,o,d,r,a,u=n||it,s=0,m="",h=!1,I=!1,p=!1;for(n||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,i=i.replace(x,"")),i=i.replace(T,""),c=b(i);s<=c.length;){switch(o=c[s],u){case it:if(!o||!S.test(o)){if(n)return"Invalid scheme";u=lt;continue}m+=o.toLowerCase(),u=nt;break;case nt:if(o&&(v.test(o)||"+"==o||"-"==o||"."==o))m+=o.toLowerCase();else{if(":"!=o){if(n)return"Invalid scheme";m="",u=lt,s=0;continue}if(n&&(E(t)!=Z(j,m)||"file"==m&&(D(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=m,n)return void(E(t)&&j[t.scheme]==t.port&&(t.port=null));m="","file"==t.scheme?u=mt:E(t)&&e&&e.scheme==t.scheme?u=et:E(t)?u=rt:"/"==c[s+1]?(u=ct,s++):(t.cannotBeABaseURL=!0,t.path.push(""),u=yt)}break;case lt:if(!e||e.cannotBeABaseURL&&"#"!=o)return"Invalid scheme";if(e.cannotBeABaseURL&&"#"==o){t.scheme=e.scheme,t.path=e.path.slice(),t.query=e.query,t.fragment="",t.cannotBeABaseURL=!0,u=Xt;break}u="file"==e.scheme?mt:ot;continue;case et:if("/"!=o||"/"!=c[s+1]){u=ot;continue}u=at,s++;break;case ct:if("/"==o){u=ut;break}u=Gt;continue;case ot:if(t.scheme=e.scheme,o==l)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query;else if("/"==o||"\\"==o&&E(t))u=dt;else if("?"==o)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query="",u=gt;else{if("#"!=o){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.path.pop(),u=Gt;continue}t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query,t.fragment="",u=Xt}break;case dt:if(!E(t)||"/"!=o&&"\\"!=o){if("/"!=o){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,u=Gt;continue}u=ut}else u=at;break;case rt:if(u=at,"/"!=o||"/"!=m.charAt(s+1))continue;s++;break;case at:if("/"!=o&&"\\"!=o){u=ut;continue}break;case ut:if("@"==o){h&&(m="%40"+m),h=!0,d=b(m);for(var G=0;G<d.length;G++){var y=d[G];if(":"!=y||p){var g=Q(y,M);p?t.password+=g:t.username+=g}else p=!0}m=""}else if(o==l||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(h&&""==m)return"Invalid authority";s-=b(m).length+1,m="",u=Zt}else m+=o;break;case Zt:case st:if(n&&"file"==t.scheme){u=It;continue}if(":"!=o||I){if(o==l||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(E(t)&&""==m)return"Invalid host";if(n&&""==m&&(D(t)||null!==t.port))return;if(r=k(t,m))return r;if(m="",u=pt,n)return;continue}"["==o?I=!0:"]"==o&&(I=!1),m+=o}else{if(""==m)return"Invalid host";if(r=k(t,m))return r;if(m="",u=bt,n==st)return}break;case bt:if(!Y.test(o)){if(o==l||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)||n){if(""!=m){var X=parseInt(m,10);if(X>65535)return"Invalid port";t.port=E(t)&&X===j[t.scheme]?null:X,m=""}if(n)return;u=pt;continue}return"Invalid port"}m+=o;break;case mt:if(t.scheme="file","/"==o||"\\"==o)u=ht;else{if(!e||"file"!=e.scheme){u=Gt;continue}if(o==l)t.host=e.host,t.path=e.path.slice(),t.query=e.query;else if("?"==o)t.host=e.host,t.path=e.path.slice(),t.query="",u=gt;else{if("#"!=o){_(c.slice(s).join(""))||(t.host=e.host,t.path=e.path.slice(),$(t)),u=Gt;continue}t.host=e.host,t.path=e.path.slice(),t.query=e.query,t.fragment="",u=Xt}}break;case ht:if("/"==o||"\\"==o){u=It;break}e&&"file"==e.scheme&&!_(c.slice(s).join(""))&&(q(e.path[0],!0)?t.path.push(e.path[0]):t.host=e.host),u=Gt;continue;case It:if(o==l||"/"==o||"\\"==o||"?"==o||"#"==o){if(!n&&q(m))u=Gt;else if(""==m){if(t.host="",n)return;u=pt}else{if(r=k(t,m))return r;if("localhost"==t.host&&(t.host=""),n)return;m="",u=pt}continue}m+=o;break;case pt:if(E(t)){if(u=Gt,"/"!=o&&"\\"!=o)continue}else if(n||"?"!=o)if(n||"#"!=o){if(o!=l&&(u=Gt,"/"!=o))continue}else t.fragment="",u=Xt;else t.query="",u=gt;break;case Gt:if(o==l||"/"==o||"\\"==o&&E(t)||!n&&("?"==o||"#"==o)){if(".."===(a=(a=m).toLowerCase())||"%2e."===a||".%2e"===a||"%2e%2e"===a?($(t),"/"==o||"\\"==o&&E(t)||t.path.push("")):tt(m)?"/"==o||"\\"==o&&E(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&q(m)&&(t.host&&(t.host=""),m=m.charAt(0)+":"),t.path.push(m)),m="","file"==t.scheme&&(o==l||"?"==o||"#"==o))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==o?(t.query="",u=gt):"#"==o&&(t.fragment="",u=Xt)}else m+=Q(o,P);break;case yt:"?"==o?(t.query="",u=gt):"#"==o?(t.fragment="",u=Xt):o!=l&&(t.path[0]+=Q(o,w));break;case gt:n||"#"!=o?o!=l&&("'"==o&&E(t)?t.query+="%27":t.query+="#"==o?"%23":Q(o,w)):(t.fragment="",u=Xt);break;case Xt:o!=l&&(t.fragment+=Q(o,A))}s++}},Wt=function(t){var i,n,l=u(this,Wt,"URL"),e=arguments.length>1?arguments[1]:void 0,o=I(t),d=W(l,{type:"URL"});if(void 0!==e)if(e instanceof Wt)i=C(e);else if(n=Vt(i={},I(e)))throw TypeError(n);if(n=Vt(d,o,null,i))throw TypeError(n);var r=d.searchParams=new X,a=V(r);a.updateSearchParams(d.query),a.updateURL=function(){d.query=String(r)||null},c||(l.href=Rt.call(l),l.origin=ft.call(l),l.protocol=St.call(l),l.username=vt.call(l),l.password=Yt.call(l),l.host=Kt.call(l),l.hostname=Jt.call(l),l.port=Nt.call(l),l.pathname=Lt.call(l),l.search=Ut.call(l),l.searchParams=Ht.call(l),l.hash=xt.call(l))},Ct=Wt.prototype,Rt=function(){var t=C(this),i=t.scheme,n=t.username,l=t.password,e=t.host,c=t.port,o=t.path,d=t.query,r=t.fragment,a=i+":";return null!==e?(a+="//",D(t)&&(a+=n+(l?":"+l:"")+"@"),a+=z(e),null!==c&&(a+=":"+c)):"file"==i&&(a+="//"),a+=t.cannotBeABaseURL?o[0]:o.length?"/"+o.join("/"):"",null!==d&&(a+="?"+d),null!==r&&(a+="#"+r),a},ft=function(){var t=C(this),i=t.scheme,n=t.port;if("blob"==i)try{return new Wt(i.path[0]).origin}catch(t){return"null"}return"file"!=i&&E(t)?i+"://"+z(t.host)+(null!==n?":"+n:""):"null"},St=function(){return C(this).scheme+":"},vt=function(){return C(this).username},Yt=function(){return C(this).password},Kt=function(){var t=C(this),i=t.host,n=t.port;return null===i?"":null===n?z(i):z(i)+":"+n},Jt=function(){var t=C(this).host;return null===t?"":z(t)},Nt=function(){var t=C(this).port;return null===t?"":String(t)},Lt=function(){var t=C(this),i=t.path;return t.cannotBeABaseURL?i[0]:i.length?"/"+i.join("/"):""},Ut=function(){var t=C(this).query;return t?"?"+t:""},Ht=function(){return C(this).searchParams},xt=function(){var t=C(this).fragment;return t?"#"+t:""},Tt=function(t,i){return{get:t,set:i,configurable:!0,enumerable:!0}};if(c&&r(Ct,{href:Tt(Rt,(function(t){var i=C(this),n=I(t),l=Vt(i,n);if(l)throw TypeError(l);V(i.searchParams).updateSearchParams(i.query)})),origin:Tt(ft),protocol:Tt(St,(function(t){var i=C(this);Vt(i,I(t)+":",it)})),username:Tt(vt,(function(t){var i=C(this),n=b(I(t));if(!O(i)){i.username="";for(var l=0;l<n.length;l++)i.username+=Q(n[l],M)}})),password:Tt(Yt,(function(t){var i=C(this),n=b(I(t));if(!O(i)){i.password="";for(var l=0;l<n.length;l++)i.password+=Q(n[l],M)}})),host:Tt(Kt,(function(t){var i=C(this);i.cannotBeABaseURL||Vt(i,I(t),Zt)})),hostname:Tt(Jt,(function(t){var i=C(this);i.cannotBeABaseURL||Vt(i,I(t),st)})),port:Tt(Nt,(function(t){var i=C(this);O(i)||(""==(t=I(t))?i.port=null:Vt(i,t,bt))})),pathname:Tt(Lt,(function(t){var i=C(this);i.cannotBeABaseURL||(i.path=[],Vt(i,I(t),pt))})),search:Tt(Ut,(function(t){var i=C(this);""==(t=I(t))?i.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),i.query="",Vt(i,t,gt)),V(i.searchParams).updateSearchParams(i.query)})),searchParams:Tt(Ht),hash:Tt(xt,(function(t){var i=C(this);""!=(t=I(t))?("#"==t.charAt(0)&&(t=t.slice(1)),i.fragment="",Vt(i,t,Xt)):i.fragment=null}))}),a(Ct,"toJSON",(function(){return Rt.call(this)}),{enumerable:!0}),a(Ct,"toString",(function(){return Rt.call(this)}),{enumerable:!0}),g){var kt=g.createObjectURL,Ft=g.revokeObjectURL;kt&&a(Wt,"createObjectURL",(function(t){return kt.apply(g,arguments)})),Ft&&a(Wt,"revokeObjectURL",(function(t){return Ft.apply(g,arguments)}))}p(Wt,"URL"),e({global:!0,forced:!o,sham:!c},{URL:Wt})},function(t,i,n){"use strict";var l=/[^\0-\u007E]/,e=/[.\u3002\uFF0E\uFF61]/g,c="Overflow: input needs wider integers to process",o=Math.floor,d=String.fromCharCode,r=function(t){return t+22+75*(t<26)},a=function(t,i,n){var l=0;for(t=n?o(t/700):t>>1,t+=o(t/i);t>455;l+=36)t=o(t/35);return o(l+36*t/(t+38))},u=function(t){var i,n,l=[],e=(t=function(t){for(var i=[],n=0,l=t.length;n<l;){var e=t.charCodeAt(n++);if(e>=55296&&e<=56319&&n<l){var c=t.charCodeAt(n++);56320==(64512&c)?i.push(((1023&e)<<10)+(1023&c)+65536):(i.push(e),n--)}else i.push(e)}return i}(t)).length,u=128,Z=0,s=72;for(i=0;i<t.length;i++)(n=t[i])<128&&l.push(d(n));var b=l.length,m=b;for(b&&l.push("-");m<e;){var h=2147483647;for(i=0;i<t.length;i++)(n=t[i])>=u&&n<h&&(h=n);var I=m+1;if(h-u>o((2147483647-Z)/I))throw RangeError(c);for(Z+=(h-u)*I,u=h,i=0;i<t.length;i++){if((n=t[i])<u&&++Z>2147483647)throw RangeError(c);if(n==u){for(var p=Z,G=36;;G+=36){var y=G<=s?1:G>=s+26?26:G-s;if(p<y)break;var g=p-y,X=36-y;l.push(d(r(y+g%X))),p=o(g/X)}l.push(d(r(p))),s=a(Z,I,m==b),Z=0,++m}}++Z,++u}return l.join("")};t.exports=function(t){var i,n,c=[],o=t.toLowerCase().replace(e,".").split(".");for(i=0;i<o.length;i++)n=o[i],c.push(l.test(n)?"xn--"+u(n):n);return c.join(".")}},function(t,i,n){"use strict";n(0)({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},function(t,i,n){var l=function(t){"use strict";var i=Object.prototype,n=i.hasOwnProperty,l="function"==typeof Symbol?Symbol:{},e=l.iterator||"@@iterator",c=l.asyncIterator||"@@asyncIterator",o=l.toStringTag||"@@toStringTag";function d(t,i,n){return Object.defineProperty(t,i,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[i]}try{d({},"")}catch(t){d=function(t,i,n){return t[i]=n}}function r(t,i,n,l){var e=i&&i.prototype instanceof Z?i:Z,c=Object.create(e.prototype),o=new W(l||[]);return c._invoke=function(t,i,n){var l="suspendedStart";return function(e,c){if("executing"===l)throw new Error("Generator is already running");if("completed"===l){if("throw"===e)throw c;return R()}for(n.method=e,n.arg=c;;){var o=n.delegate;if(o){var d=g(o,n);if(d){if(d===u)continue;return d}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===l)throw l="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);l="executing";var r=a(t,i,n);if("normal"===r.type){if(l=n.done?"completed":"suspendedYield",r.arg===u)continue;return{value:r.arg,done:n.done}}"throw"===r.type&&(l="completed",n.method="throw",n.arg=r.arg)}}}(t,n,o),c}function a(t,i,n){try{return{type:"normal",arg:t.call(i,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=r;var u={};function Z(){}function s(){}function b(){}var m={};m[e]=function(){return this};var h=Object.getPrototypeOf,I=h&&h(h(C([])));I&&I!==i&&n.call(I,e)&&(m=I);var p=b.prototype=Z.prototype=Object.create(m);function G(t){["next","throw","return"].forEach((function(i){d(t,i,(function(t){return this._invoke(i,t)}))}))}function y(t,i){var l;this._invoke=function(e,c){function o(){return new i((function(l,o){!function l(e,c,o,d){var r=a(t[e],t,c);if("throw"!==r.type){var u=r.arg,Z=u.value;return Z&&"object"==typeof Z&&n.call(Z,"__await")?i.resolve(Z.__await).then((function(t){l("next",t,o,d)}),(function(t){l("throw",t,o,d)})):i.resolve(Z).then((function(t){u.value=t,o(u)}),(function(t){return l("throw",t,o,d)}))}d(r.arg)}(e,c,l,o)}))}return l=l?l.then(o,o):o()}}function g(t,i){var n=t.iterator[i.method];if(void 0===n){if(i.delegate=null,"throw"===i.method){if(t.iterator.return&&(i.method="return",i.arg=void 0,g(t,i),"throw"===i.method))return u;i.method="throw",i.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var l=a(n,t.iterator,i.arg);if("throw"===l.type)return i.method="throw",i.arg=l.arg,i.delegate=null,u;var e=l.arg;return e?e.done?(i[t.resultName]=e.value,i.next=t.nextLoc,"return"!==i.method&&(i.method="next",i.arg=void 0),i.delegate=null,u):e:(i.method="throw",i.arg=new TypeError("iterator result is not an object"),i.delegate=null,u)}function X(t){var i={tryLoc:t[0]};1 in t&&(i.catchLoc=t[1]),2 in t&&(i.finallyLoc=t[2],i.afterLoc=t[3]),this.tryEntries.push(i)}function V(t){var i=t.completion||{};i.type="normal",delete i.arg,t.completion=i}function W(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(X,this),this.reset(!0)}function C(t){if(t){var i=t[e];if(i)return i.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var l=-1,c=function i(){for(;++l<t.length;)if(n.call(t,l))return i.value=t[l],i.done=!1,i;return i.value=void 0,i.done=!0,i};return c.next=c}}return{next:R}}function R(){return{value:void 0,done:!0}}return s.prototype=p.constructor=b,b.constructor=s,s.displayName=d(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var i="function"==typeof t&&t.constructor;return!!i&&(i===s||"GeneratorFunction"===(i.displayName||i.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,d(t,o,"GeneratorFunction")),t.prototype=Object.create(p),t},t.awrap=function(t){return{__await:t}},G(y.prototype),y.prototype[c]=function(){return this},t.AsyncIterator=y,t.async=function(i,n,l,e,c){void 0===c&&(c=Promise);var o=new y(r(i,n,l,e),c);return t.isGeneratorFunction(n)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},G(p),d(p,o,"Generator"),p[e]=function(){return this},p.toString=function(){return"[object Generator]"},t.keys=function(t){var i=[];for(var n in t)i.push(n);return i.reverse(),function n(){for(;i.length;){var l=i.pop();if(l in t)return n.value=l,n.done=!1,n}return n.done=!0,n}},t.values=C,W.prototype={constructor:W,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(V),!t)for(var i in this)"t"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function l(n,l){return o.type="throw",o.arg=t,i.next=n,l&&(i.method="next",i.arg=void 0),!!l}for(var e=this.tryEntries.length-1;e>=0;--e){var c=this.tryEntries[e],o=c.completion;if("root"===c.tryLoc)return l("end");if(c.tryLoc<=this.prev){var d=n.call(c,"catchLoc"),r=n.call(c,"finallyLoc");if(d&&r){if(this.prev<c.catchLoc)return l(c.catchLoc,!0);if(this.prev<c.finallyLoc)return l(c.finallyLoc)}else if(d){if(this.prev<c.catchLoc)return l(c.catchLoc,!0)}else{if(!r)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return l(c.finallyLoc)}}}},abrupt:function(t,i){for(var l=this.tryEntries.length-1;l>=0;--l){var e=this.tryEntries[l];if(e.tryLoc<=this.prev&&n.call(e,"finallyLoc")&&this.prev<e.finallyLoc){var c=e;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=i&&i<=c.finallyLoc&&(c=null);var o=c?c.completion:{};return o.type=t,o.arg=i,c?(this.method="next",this.next=c.finallyLoc,u):this.complete(o)},complete:function(t,i){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&i&&(this.next=i),u},finish:function(t){for(var i=this.tryEntries.length-1;i>=0;--i){var n=this.tryEntries[i];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),V(n),u}},catch:function(t){for(var i=this.tryEntries.length-1;i>=0;--i){var n=this.tryEntries[i];if(n.tryLoc===t){var l=n.completion;if("throw"===l.type){var e=l.arg;V(n)}return e}}throw new Error("illegal catch attempt")},delegateYield:function(t,i,n){return this.delegate={iterator:C(t),resultName:i,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},t}(t.exports);try{regeneratorRuntime=l}catch(t){Function("r","regeneratorRuntime = r")(l)}},function(t,i,n){"use strict";n.r(i),n.d(i,"AUTHORIZATION_CODE",(function(){return l.a})),n.d(i,"AsgardeoAuthClient",(function(){return l.b})),n.d(i,"AsgardeoSPAClient",(function(){return l.c})),n.d(i,"CLIENT_ID_TAG",(function(){return l.d})),n.d(i,"CLIENT_SECRET_TAG",(function(){return l.e})),n.d(i,"Hooks",(function(){return l.f})),n.d(i,"OIDC_SCOPE",(function(){return l.g})),n.d(i,"PKCE_CODE_VERIFIER",(function(){return l.h})),n.d(i,"REFRESH_TOKEN_TIMER",(function(){return l.i})),n.d(i,"ResponseMode",(function(){return l.j})),n.d(i,"SCOPE_TAG",(function(){return l.k})),n.d(i,"SESSION_STATE",(function(){return l.l})),n.d(i,"SIGN_OUT_SUCCESS_PARAM",(function(){return l.m})),n.d(i,"SIGN_OUT_URL",(function(){return l.n})),n.d(i,"SPAUtils",(function(){return l.o})),n.d(i,"Storage",(function(){return l.p})),n.d(i,"Stores",(function(){return l.q})),n.d(i,"TOKEN_TAG",(function(){return l.r})),n.d(i,"USERNAME_TAG",(function(){return l.s})),n.d(i,"WebWorkerClass",(function(){return l.t})),n.d(i,"AuthClient",(function(){return X})),n.d(i,"AuthProvider",(function(){return W})),n.d(i,"useAuthContext",(function(){return C})),n.d(i,"SecureRoute",(function(){return Y})),n.d(i,"AuthenticatedComponent",(function(){return K})),n.d(i,"SecureApp",(function(){return N}));n(196),n(198),n(199),n(200),n(201),n(202),n(203),n(204),n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(221),n(222),n(223),n(224),n(225),n(87),n(226),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(242),n(243),n(244),n(245),n(246),n(248),n(249),n(251),n(252),n(253),n(254),n(160),n(255),n(256),n(127),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(270),n(271),n(272),n(273),n(274),n(275),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(288),n(289),n(290),n(291),n(292),n(293),n(294),n(295),n(296),n(297),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(312),n(313),n(314),n(315),n(175),n(319),n(320),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(132),n(334),n(335),n(336),n(337),n(179),n(338),n(339),n(340),n(341),n(180),n(342),n(181),n(343),n(344),n(345),n(346),n(347),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(379),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(397),n(398),n(399),n(400),n(401),n(402),n(137),n(403),n(404),n(406),n(407),n(408),n(409),n(411),n(412),n(413),n(414),n(415),n(416),n(417),n(418),n(419),n(420),n(421),n(422),n(423),n(424),n(425),n(426),n(427),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438),n(439),n(440),n(441),n(442),n(443),n(444),n(445),n(446),n(447),n(448),n(450),n(451),n(452),n(453),n(454),n(455),n(456),n(457),n(458),n(459),n(460),n(461),n(462),n(463),n(464),n(465),n(466),n(467),n(468),n(469),n(470),n(471),n(472),n(473),n(474),n(475),n(476),n(477),n(478),n(479),n(480),n(482),n(483),n(484),n(485),n(486),n(487),n(488),n(489),n(490),n(491),n(492),n(493),n(494),n(495),n(496),n(497),n(498),n(499),n(500),n(501),n(502),n(503),n(504),n(505),n(506),n(507),n(508),n(509),n(510),n(511),n(512),n(513),n(515),n(516),n(517),n(518),n(519),n(520),n(521),n(522),n(523),n(524),n(525),n(526),n(527),n(528),n(529),n(530),n(531),n(532),n(533),n(535),n(194),n(536);var l=n(45),e=n(20),c=n.n(e);function o(t,i){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);i&&(l=l.filter((function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable}))),n.push.apply(n,l)}return n}function d(t){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?o(Object(n),!0).forEach((function(i){Z(t,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(n,i))}))}return t}function r(t,i,n,l,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void n(t)}d.done?i(r):Promise.resolve(r).then(l,e)}function a(t){return function(){var i=this,n=arguments;return new Promise((function(l,e){var c=t.apply(i,n);function o(t){r(c,l,e,o,d,"next",t)}function d(t){r(c,l,e,o,d,"throw",t)}o(void 0)}))}}function u(t,i){for(var n=0;n<i.length;n++){var l=i[n];l.enumerable=l.enumerable||!1,l.configurable=!0,"value"in l&&(l.writable=!0),Object.defineProperty(t,l.key,l)}}function Z(t,i,n){return i in t?Object.defineProperty(t,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[i]=n,t}var s=function(){function t(){!function(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}(this,t),Z(this,"_authState",t.DEFAULT_STATE),Z(this,"_client",void 0),this._client=l.c.getInstance(),this.getState=this.getState.bind(this),this.init=this.init.bind(this),this.signIn=this.signIn.bind(this),this.signOut=this.signOut.bind(this),this.updateState=this.updateState.bind(this)}var i,n,e,c,o,r,s,b,m,h,I,p,G,y,g,X,V,W,C;return i=t,(n=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(C=a(regeneratorRuntime.mark((function t(i,n,l,e,c,o){var r=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.signIn(l,e,c).then(function(){var t=a(regeneratorRuntime.mark((function t(l){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(l){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,r._client.isAuthenticated();case 4:if(!t.sent){t.next=9;break}e={allowedScopes:l.allowedScopes,displayName:l.displayName,email:l.email,isAuthenticated:!0,username:l.username,isLoading:!1,isSigningOut:!1},r.updateState(e),i(d(d({},n),e)),o&&o(l);case 9:return t.abrupt("return",l);case 10:case"end":return t.stop()}}),t)})));return function(i){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,i,n,l,e,c){return C.apply(this,arguments)})},{key:"signOut",value:function(t,i,n){return this._client.signOut().then((function(t){return n&&n(t),t})).catch((function(t){return Promise.reject(t)}))}},{key:"updateState",value:function(t){this._authState=d(d({},this._authState),t)}},{key:"getBasicUserInfo",value:(W=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getBasicUserInfo());case 1:case"end":return t.stop()}}),t,this)}))),function(){return W.apply(this,arguments)})},{key:"httpRequest",value:(V=a(regeneratorRuntime.mark((function t(i){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequest(i));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return V.apply(this,arguments)})},{key:"httpRequestAll",value:(X=a(regeneratorRuntime.mark((function t(i){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequestAll(i));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return X.apply(this,arguments)})},{key:"requestCustomGrant",value:function(t,i,n){var l=this;return this._client.requestCustomGrant(t).then((function(e){if(e)return t.returnsSession&&(l.updateState(d(d(d({},l.getState()),e),{},{isAuthenticated:!0,isLoading:!1})),n(d(d({},e),{},{isAuthenticated:!0,isLoading:!1}))),i&&i(e),e})).catch((function(t){return Promise.reject(t)}))}},{key:"revokeAccessToken",value:(g=a(regeneratorRuntime.mark((function i(n){var l=this;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.abrupt("return",this._client.revokeAccessToken().then((function(){return l.updateState(t.DEFAULT_STATE),n(t.DEFAULT_STATE),!0})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return i.stop()}}),i,this)}))),function(t){return g.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",value:(y=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)}))),function(){return y.apply(this,arguments)})},{key:"getHttpClient",value:(G=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getHttpClient());case 1:case"end":return t.stop()}}),t,this)}))),function(){return G.apply(this,arguments)})},{key:"getDecodedIDToken",value:(p=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getIDToken",value:(I=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return I.apply(this,arguments)})},{key:"getAccessToken",value:(h=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"refreshAccessToken",value:(m=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.refreshAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return m.apply(this,arguments)})},{key:"isAuthenticated",value:(b=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.isAuthenticated());case 1:case"end":return t.stop()}}),t,this)}))),function(){return b.apply(this,arguments)})},{key:"enableHttpHandler",value:(s=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.enableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return s.apply(this,arguments)})},{key:"disableHttpHandler",value:(r=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.disableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"updateConfig",value:(o=a(regeneratorRuntime.mark((function t(i){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.updateConfig(i));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"on",value:function(t,i,n){return t===l.f.CustomGrant?this._client.on(t,i,n):this._client.on(t,i)}},{key:"trySignInSilently",value:(c=a(regeneratorRuntime.mark((function t(i,n){var l=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.trySignInSilently().then(function(){var t=a(regeneratorRuntime.mark((function t(e){var c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=4;break}return l.updateState(d(d({},l.getState()),{},{isLoading:!1})),n(d(d({},i),{},{isLoading:!1})),t.abrupt("return",!1);case 4:return t.next=6,l._client.isAuthenticated();case 6:if(!t.sent){t.next=11;break}o={allowedScopes:(c=e).allowedScopes,displayName:c.displayName,email:c.email,isAuthenticated:!0,isLoading:!1,username:c.username,isSigningOut:!1},l.updateState(o),n(d(d({},i),o));case 11:return t.abrupt("return",e);case 12:case"end":return t.stop()}}),t)})));return function(i){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,i){return c.apply(this,arguments)})}])&&u(i.prototype,n),e&&u(i,e),t}();function b(t,i,n,l,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void n(t)}d.done?i(r):Promise.resolve(r).then(l,e)}function m(t){return function(){var i=this,n=arguments;return new Promise((function(l,e){var c=t.apply(i,n);function o(t){b(c,l,e,o,d,"next",t)}function d(t){b(c,l,e,o,d,"throw",t)}o(void 0)}))}}function h(t,i){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);i&&(l=l.filter((function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable}))),n.push.apply(n,l)}return n}function I(t){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?h(Object(n),!0).forEach((function(i){p(t,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach((function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(n,i))}))}return t}function p(t,i,n){return i in t?Object.defineProperty(t,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[i]=n,t}function G(t,i){return function(t){if(Array.isArray(t))return t}(t)||function(t,i){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==n)return;var l,e,c=[],o=!0,d=!1;try{for(n=n.call(t);!(o=(l=n.next()).done)&&(c.push(l.value),!i||c.length!==i);o=!0);}catch(t){d=!0,e=t}finally{try{o||null==n.return||n.return()}finally{if(d)throw e}}return c}(t,i)||function(t,i){if(!t)return;if("string"==typeof t)return y(t,i);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return y(t,i)}(t,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(t,i){(null==i||i>t.length)&&(i=t.length);for(var n=0,l=new Array(i);n<i;n++)l[n]=t[n];return l}Z(s,"DEFAULT_STATE",void 0),s.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,username:""};var g={disableTrySignInSilently:!1},X=new s,V=Object(e.createContext)(null),W=function(t){var i=G(Object(e.useState)(X.getState()),2),n=i[0],o=i[1],d=G(Object(e.useState)(!1),2),r=d[0],a=d[1],u=t.children,Z=t.config,s=t.fallback,b=t.getAuthParams,h=t.onSignOut,p=Object(e.useMemo)((function(){return I(I({},g),Z)}),[Z]),y=function(){var t=m(regeneratorRuntime.mark((function t(i,l,e,c){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,X.signIn(o,n,i,l,e,c);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(i,n,l,e){return t.apply(this,arguments)}}(),W=function(t,i,n){return t===l.f.CustomGrant?X.on(t,i,n):X.on(t,i)},C=function(){return X.trySignInSilently(n,o)};return Object(e.useEffect)((function(){n.isAuthenticated||m(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=a,t.next=3,X.init(p);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[p]),Object(e.useEffect)((function(){m(regeneratorRuntime.mark((function t(){var i,e,c,d,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=!1,t.next=3,W(l.f.SignOut,(function(){i=!0,h&&h()}));case 3:if(!n.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(p.skipRedirectCallback){t.next=14;break}if(c=null,!b||"function"!=typeof b){t.next=11;break}return t.next=10,b();case 10:c=t.sent;case 11:if(!(l.o.hasAuthSearchParamsInURL()||null!==(e=c)&&void 0!==e&&e.authorizationCode)){t.next=14;break}return t.next=14,y({callOnlyOnRedirect:!0},null===(d=c)||void 0===d?void 0:d.authorizationCode,null===(r=c)||void 0===r?void 0:r.sessionState).then((function(){})).catch((function(t){throw t}));case 14:if(!X.getState().isAuthenticated){t.next=16;break}return t.abrupt("return");case 16:if(!p.disableTrySignInSilently&&!i){t.next=19;break}return o(I(I({},n),{},{isLoading:!1})),t.abrupt("return");case 19:return t.next=21,C().then((function(t){})).catch((function(t){throw t}));case 21:case"end":return t.stop()}}),t)})))()}),[p]),c.a.createElement(V.Provider,{value:{disableHttpHandler:function(){return X.disableHttpHandler()},enableHttpHandler:function(){return X.enableHttpHandler()},getAccessToken:function(){return X.getAccessToken()},getBasicUserInfo:function(){return X.getBasicUserInfo()},getDecodedIDToken:function(){return X.getDecodedIDToken()},getHttpClient:function(){return X.getHttpClient()},getIDToken:function(){return X.getIDToken()},getOIDCServiceEndpoints:function(){return X.getOIDCServiceEndpoints()},httpRequest:function(t){return X.httpRequest(t)},httpRequestAll:function(t){return X.httpRequestAll(t)},isAuthenticated:function(){return X.isAuthenticated()},on:W,refreshAccessToken:function(){return X.refreshAccessToken()},requestCustomGrant:function(t,i){return X.requestCustomGrant(t,i,o)},revokeAccessToken:function(){return X.revokeAccessToken(o)},signIn:y,signOut:function(t){return X.signOut(o,n,t)},state:n,trySignInSilently:C,updateConfig:function(t){return X.updateConfig(t)}}},r?u:null!=s?s:null)},C=function(){return Object(e.useContext)(V)},R=n(195),f=["component","callback"];function S(){return(S=Object.assign||function(t){for(var i=1;i<arguments.length;i++){var n=arguments[i];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(t[l]=n[l])}return t}).apply(this,arguments)}function v(t,i){if(null==t)return{};var n,l,e=function(t,i){if(null==t)return{};var n,l,e={},c=Object.keys(t);for(l=0;l<c.length;l++)n=c[l],i.indexOf(n)>=0||(e[n]=t[n]);return e}(t,i);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);for(l=0;l<c.length;l++)n=c[l],i.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(e[n]=t[n])}return e}var Y=function(t){var i=C().state,n=t.component,l=t.callback,o=v(t,f);return Object(e.useEffect)((function(){i.isAuthenticated||l&&l()}),[i.isAuthenticated]),i.isAuthenticated?c.a.createElement(R.Route,S({},o,{render:function(t){return c.a.createElement(n,t)}})):null},K=function(t){var i=t.fallback,n=t.children,l=C().state.isAuthenticated;return c.a.createElement(c.a.Fragment,null," ",l?n:null!=i?i:null," ")};function J(t,i,n,l,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void n(t)}d.done?i(r):Promise.resolve(r).then(l,e)}var N=function(t){var i=t.children,n=t.fallback,l=t.onSignIn,o=t.overrideSignIn,d=C(),r=d.state,a=r.isAuthenticated,u=r.isLoading,Z=d.signIn;return Object(e.useEffect)((function(){var t;a||u||(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o||"function"!=typeof o){t.next=5;break}return t.next=3,o();case 3:t.next=7;break;case 5:return t.next=7,Z();case 7:case"end":return t.stop()}}),t)})),function(){var i=this,n=arguments;return new Promise((function(l,e){var c=t.apply(i,n);function o(t){J(c,l,e,o,d,"next",t)}function d(t){J(c,l,e,o,d,"throw",t)}o(void 0)}))})(),a&&l&&"function"==typeof l&&l()}),[a,u]),c.a.createElement(K,{fallback:n},c.a.createElement(e.Suspense,{fallback:n},i))}}])}));
|
|
822
|
+
*/updateConfig(t){return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===xl.WebWorker){const i=this._client;yield i.updateConfig(t)}else{const i=this._client;yield i.updateConfig(t)}}))}}_l._instances=new Map;class $l extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}}).call(this,n(140))},function(t,i){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,i,n){var l=n(106),e=n(59);t.exports=function(t){var i=l(t,"string");return e(i)?i:String(i)}},function(t,i,n){var l,e,c=n(4),o=n(39),d=c.process,r=c.Deno,a=d&&d.versions||r&&r.version,u=a&&a.v8;u?e=(l=u.split("."))[0]<4?1:l[0]+l[1]:o&&(!(l=o.match(/Edge\/(\d+)/))||l[1]>=74)&&(l=o.match(/Chrome\/(\d+)/))&&(e=l[1]),t.exports=e&&+e},function(t,i,n){var l=n(146),e=n(112).concat("length","prototype");i.f=Object.getOwnPropertyNames||function(t){return l(t,e)}},function(t,i,n){var l=n(30),e=Math.max,c=Math.min;t.exports=function(t,i){var n=l(t);return n<0?e(n+i,0):c(n,i)}},function(t,i,n){var l=n(46);t.exports=Array.isArray||function(t){return"Array"==l(t)}},function(t,i,n){var l=n(76),e=n(75),c=n(7)("iterator");t.exports=function(t){if(null!=t)return t[c]||t["@@iterator"]||e[l(t)]}},function(t,i,n){"use strict";var l=n(47),e=n(14),c=n(38);t.exports=function(t,i,n){var o=l(i);o in t?e.f(t,o,c(0,n)):t[o]=n}},function(t,i,n){"use strict";var l=n(11),e=n(14),c=n(7),o=n(9),d=c("species");t.exports=function(t){var i=l(t),n=e.f;o&&i&&!i[d]&&n(i,d,{configurable:!0,get:function(){return this}})}},function(t,i,n){var l=n(0),e=n(70),c=n(8),o=n(16),d=n(14).f,r=n(49),a=n(115),u=n(69),Z=n(77),s=!1,b=u("meta"),m=0,h=Object.isExtensible||function(){return!0},I=function(t){d(t,b,{value:{objectID:"O"+m++,weakData:{}}})},p=t.exports={enable:function(){p.enable=function(){},s=!0;var t=r.f,i=[].splice,n={};n[b]=1,t(n).length&&(r.f=function(n){for(var l=t(n),e=0,c=l.length;e<c;e++)if(l[e]===b){i.call(l,e,1);break}return l},l({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:a.f}))},fastKey:function(t,i){if(!c(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,b)){if(!h(t))return"F";if(!i)return"E";I(t)}return t[b].objectID},getWeakData:function(t,i){if(!o(t,b)){if(!h(t))return!0;if(!i)return!1;I(t)}return t[b].weakData},onFreeze:function(t){return Z&&s&&h(t)&&!o(t,b)&&I(t),t}};e[b]=!0},function(t,i,n){"use strict";var l=n(61),e=n(3),c=n(1),o=n(26),d=n(18),r=n(36),a=n(7),u=n(17),Z=n(11)("Promise"),s=u.set,b=u.get,m=a("toStringTag");t.exports=function(t,i){var n=function(t){t.next=e(t.iterator.next),t.done=!1,t.ignoreArgument=!i,s(this,t)};return n.prototype=r(o(l.AsyncIterator.prototype),{next:function(n){var l=this,e=!!arguments.length;return new Z((function(o){var d=b(l),r=e?[d.ignoreArgument?void 0:n]:i?[]:[void 0];d.ignoreArgument=!1,o(d.done?{done:!0,value:void 0}:c(t.call(d,Z,r)))}))},return:function(t){var i=this;return new Z((function(n,l){var e=b(i),o=e.iterator;e.done=!0;var d=o.return;if(void 0===d)return n({done:!0,value:t});Z.resolve(d.call(o,t)).then((function(i){c(i),n({done:!0,value:t})}),l)}))},throw:function(t){var i=this;return new Z((function(n,l){var e=b(i),c=e.iterator;e.done=!0;var o=c.throw;if(void 0===o)return l(t);n(o.call(c,t))}))}}),i||d(n.prototype,m,"Generator"),n}},function(t,i,n){"use strict";var l=n(61),e=n(3),c=n(1),o=n(26),d=n(18),r=n(36),a=n(7),u=n(17),Z=u.set,s=u.get,b=a("toStringTag");t.exports=function(t,i){var n=function(t){t.next=e(t.iterator.next),t.done=!1,t.ignoreArg=!i,Z(this,t)};return n.prototype=r(o(l.Iterator.prototype),{next:function(n){var l=s(this),e=arguments.length?[l.ignoreArg?void 0:n]:i?[]:[void 0];l.ignoreArg=!1;var c=l.done?void 0:t.call(l,e);return{done:l.done,value:c}},return:function(t){var i=s(this),n=i.iterator;i.done=!0;var l=n.return;return{done:!0,value:void 0===l?t:c(l.call(n,t)).value}},throw:function(t){var i=s(this),n=i.iterator;i.done=!0;var l=n.throw;if(void 0===l)throw t;return l.call(n,t)}}),i||d(n.prototype,b,"Generator"),n}},function(t,i){t.exports=function(t){return Set.prototype.values.call(t)}},function(t,i,n){var l=n(11),e=n(141);t.exports=e?function(t){return"symbol"==typeof t}:function(t){var i=l("Symbol");return"function"==typeof i&&Object(t)instanceof i}},function(t,i,n){var l=n(146),e=n(112);t.exports=Object.keys||function(t){return l(t,e)}},function(t,i,n){var l=n(4);t.exports=l},function(t,i,n){"use strict";var l=n(121).IteratorPrototype,e=n(26),c=n(38),o=n(34),d=n(75),r=function(){return this};t.exports=function(t,i,n){var a=i+" Iterator";return t.prototype=e(l,{next:c(1,n)}),o(t,a,!1,!0),d[a]=r,t}},function(t,i,n){var l=n(46),e=n(4);t.exports="process"==l(e.process)},function(t,i,n){var l=n(22),e=n(15),c="["+n(93)+"]",o=RegExp("^"+c+c+"*"),d=RegExp(c+c+"*$"),r=function(t){return function(i){var n=e(l(i));return 1&t&&(n=n.replace(o,"")),2&t&&(n=n.replace(d,"")),n}};t.exports={start:r(1),end:r(2),trim:r(3)}},function(t,i,n){"use strict";var l=n(1);t.exports=function(){var t=l(this),i="";return t.global&&(i+="g"),t.ignoreCase&&(i+="i"),t.multiline&&(i+="m"),t.dotAll&&(i+="s"),t.unicode&&(i+="u"),t.sticky&&(i+="y"),i}},function(t,i,n){var l=n(30),e=n(15),c=n(22),o=function(t){return function(i,n){var o,d,r=e(c(i)),a=l(n),u=r.length;return a<0||a>=u?t?"":void 0:(o=r.charCodeAt(a))<55296||o>56319||a+1===u||(d=r.charCodeAt(a+1))<56320||d>57343?t?r.charAt(a):o:t?r.slice(a,a+2):d-56320+(o-55296<<10)+65536}};t.exports={codeAt:o(!1),charAt:o(!0)}},function(t,i,n){var l=n(2),e=n(46),c="".split;t.exports=l((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==e(t)?c.call(t,""):Object(t)}:Object},function(t,i,n){var l=n(5),e=n(83);(t.exports=function(t,i){return e[t]||(e[t]=void 0!==i?i:{})})("versions",[]).push({version:"3.17.2",mode:l?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},function(t,i){var n=0,l=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+l).toString(36)}},function(t,i){t.exports={}},function(t,i,n){var l=n(29),e=n(10),c=n(50),o=function(t){return function(i,n,o){var d,r=l(i),a=e(r.length),u=c(o,a);if(t&&n!=n){for(;a>u;)if((d=r[u++])!=d)return!0}else for(;a>u;u++)if((t||u in r)&&r[u]===n)return t||u||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,i,n){var l=n(2),e=/#|\.prototype\./,c=function(t,i){var n=d[o(t)];return n==a||n!=r&&("function"==typeof i?l(i):!!i)},o=c.normalize=function(t){return String(t).replace(e,".").toLowerCase()},d=c.data={},r=c.NATIVE="N",a=c.POLYFILL="P";t.exports=c},function(t,i,n){var l=n(197);t.exports=function(t,i){return new(l(t))(0===i?0:i)}},function(t,i,n){var l=n(2),e=n(7),c=n(48),o=e("species");t.exports=function(t){return c>=51||!l((function(){var i=[];return(i.constructor={})[o]=function(){return{foo:1}},1!==i[t](Boolean).foo}))}},function(t,i){t.exports={}},function(t,i,n){var l=n(119),e=n(46),c=n(7)("toStringTag"),o="Arguments"==e(function(){return arguments}());t.exports=l?e:function(t){var i,n,l;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,i){try{return t[i]}catch(t){}}(i=Object(t),c))?n:o?e(i):"Object"==(l=e(i))&&"function"==typeof i.callee?"Arguments":l}},function(t,i,n){var l=n(2);t.exports=!l((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,i,n){"use strict";var l=n(3),e=function(t){var i,n;this.promise=new t((function(t,l){if(void 0!==i||void 0!==n)throw TypeError("Bad Promise constructor");i=t,n=l})),this.resolve=l(i),this.reject=l(n)};t.exports.f=function(t){return new e(t)}},function(t,i,n){var l=n(8),e=n(46),c=n(7)("match");t.exports=function(t){var i;return l(t)&&(void 0!==(i=t[c])?!!i:"RegExp"==e(t))}},function(t,i,n){var l=n(30);t.exports=function(t){var i=l(t);if(i<0)throw RangeError("The argument can't be less than 0");return i}},function(t,i,n){"use strict";var l=n(3),e=n(1),c=n(11)("Promise"),o=[].push,d=function(t){var i=0==t,n=1==t,d=2==t,r=3==t;return function(t,a){e(t);var u=l(t.next),Z=i?[]:void 0;return i||l(a),new c((function(l,s){var b=function(i,n){try{var l=t.return;if(void 0!==l)return c.resolve(l.call(t)).then((function(){i(n)}),(function(t){s(t)}))}catch(t){return s(t)}i(n)},m=function(t){b(s,t)},h=function(){try{c.resolve(e(u.call(t))).then((function(t){try{if(e(t).done)l(i?Z:!r&&(d||void 0));else{var u=t.value;i?(o.call(Z,u),h()):c.resolve(a(u)).then((function(t){n?h():d?t?h():b(l,!1):t?b(l,r||u):h()}),m)}}catch(t){m(t)}}),m)}catch(t){m(t)}};h()}))}};t.exports={toArray:d(0),forEach:d(1),every:d(2),some:d(3),find:d(4)}},function(t,i,n){"use strict";var l={}.propertyIsEnumerable,e=Object.getOwnPropertyDescriptor,c=e&&!l.call({1:2},1);i.f=c?function(t){var i=e(this,t);return!!i&&i.enumerable}:l},function(t,i,n){var l=n(4),e=n(108),c=l["__core-js_shared__"]||e("__core-js_shared__",{});t.exports=c},function(t,i,n){var l=n(68),e=n(69),c=l("keys");t.exports=function(t){return c[t]||(c[t]=e(t))}},function(t,i,n){var l=n(1);t.exports=function(t,i,n){var e,c;l(t);try{if(void 0===(e=t.return)){if("throw"===i)throw n;return n}e=e.call(t)}catch(t){c=!0,e=t}if("throw"===i)throw n;if(c)throw e;return l(e),n}},function(t,i,n){var l=n(7)("iterator"),e=!1;try{var c=0,o={next:function(){return{done:!!c++}},return:function(){e=!0}};o[l]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,i){if(!i&&!e)return!1;var n=!1;try{var c={};c[l]=function(){return{next:function(){return{done:n=!0}}}},t(c)}catch(t){}return n}},function(t,i,n){"use strict";var l=n(29),e=n(35),c=n(75),o=n(17),d=n(120),r=o.set,a=o.getterFor("Array Iterator");t.exports=d(Array,"Array",(function(t,i){r(this,{type:"Array Iterator",target:l(t),index:0,kind:i})}),(function(){var t=a(this),i=t.target,n=t.kind,l=t.index++;return!i||l>=i.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:l,done:!1}:"values"==n?{value:i[l],done:!1}:{value:[l,i[l]],done:!1}}),"values"),c.Arguments=c.Array,e("keys"),e("values"),e("entries")},function(t,i,n){var l=n(3),e=n(13),c=n(67),o=n(10),d=function(t){return function(i,n,d,r){l(n);var a=e(i),u=c(a),Z=o(a.length),s=t?Z-1:0,b=t?-1:1;if(d<2)for(;;){if(s in u){r=u[s],s+=b;break}if(s+=b,t?s<0:Z<=s)throw TypeError("Reduce of empty array with no initial value")}for(;t?s>=0:Z>s;s+=b)s in u&&(r=n(r,u[s],s,a));return r}};t.exports={left:d(!1),right:d(!0)}},function(t,i,n){"use strict";var l=n(4),e=n(9),c=n(124),o=n(18),d=n(36),r=n(2),a=n(33),u=n(30),Z=n(10),s=n(158),b=n(241),m=n(27),h=n(42),I=n(49).f,p=n(14).f,G=n(116),y=n(34),g=n(17),X=g.get,V=g.set,W=l.ArrayBuffer,C=W,R=l.DataView,f=R&&R.prototype,S=Object.prototype,v=l.RangeError,Y=b.pack,K=b.unpack,J=function(t){return[255&t]},N=function(t){return[255&t,t>>8&255]},L=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},U=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},H=function(t){return Y(t,23,4)},x=function(t){return Y(t,52,8)},T=function(t,i){p(t.prototype,i,{get:function(){return X(this)[i]}})},k=function(t,i,n,l){var e=s(n),c=X(t);if(e+i>c.byteLength)throw v("Wrong index");var o=X(c.buffer).bytes,d=e+c.byteOffset,r=o.slice(d,d+i);return l?r:r.reverse()},F=function(t,i,n,l,e,c){var o=s(n),d=X(t);if(o+i>d.byteLength)throw v("Wrong index");for(var r=X(d.buffer).bytes,a=o+d.byteOffset,u=l(+e),Z=0;Z<i;Z++)r[a+Z]=u[c?Z:i-Z-1]};if(c){if(!r((function(){W(1)}))||!r((function(){new W(-1)}))||r((function(){return new W,new W(1.5),new W(NaN),"ArrayBuffer"!=W.name}))){for(var B,z=(C=function(t){return a(this,C),new W(s(t))}).prototype=W.prototype,w=I(W),A=0;w.length>A;)(B=w[A++])in C||o(C,B,W[B]);z.constructor=C}h&&m(f)!==S&&h(f,S);var P=new R(new C(2)),M=f.setInt8;P.setInt8(0,2147483648),P.setInt8(1,2147483649),!P.getInt8(0)&&P.getInt8(1)||d(f,{setInt8:function(t,i){M.call(this,t,i<<24>>24)},setUint8:function(t,i){M.call(this,t,i<<24>>24)}},{unsafe:!0})}else C=function(t){a(this,C,"ArrayBuffer");var i=s(t);V(this,{bytes:G.call(new Array(i),0),byteLength:i}),e||(this.byteLength=i)},R=function(t,i,n){a(this,R,"DataView"),a(t,C,"DataView");var l=X(t).byteLength,c=u(i);if(c<0||c>l)throw v("Wrong offset");if(c+(n=void 0===n?l-c:Z(n))>l)throw v("Wrong length");V(this,{buffer:t,byteLength:n,byteOffset:c}),e||(this.buffer=t,this.byteLength=n,this.byteOffset=c)},e&&(T(C,"byteLength"),T(R,"buffer"),T(R,"byteLength"),T(R,"byteOffset")),d(R.prototype,{getInt8:function(t){return k(this,1,t)[0]<<24>>24},getUint8:function(t){return k(this,1,t)[0]},getInt16:function(t){var i=k(this,2,t,arguments.length>1?arguments[1]:void 0);return(i[1]<<8|i[0])<<16>>16},getUint16:function(t){var i=k(this,2,t,arguments.length>1?arguments[1]:void 0);return i[1]<<8|i[0]},getInt32:function(t){return U(k(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return U(k(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return K(k(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return K(k(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,i){F(this,1,t,J,i)},setUint8:function(t,i){F(this,1,t,J,i)},setInt16:function(t,i){F(this,2,t,N,i,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,i){F(this,2,t,N,i,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,i){F(this,4,t,L,i,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,i){F(this,4,t,L,i,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,i){F(this,4,t,H,i,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,i){F(this,8,t,x,i,arguments.length>2?arguments[2]:void 0)}});y(C,"ArrayBuffer"),y(R,"DataView"),t.exports={ArrayBuffer:C,DataView:R}},function(t,i,n){"use strict";var l=n(0),e=n(4),c=n(72),o=n(25),d=n(55),r=n(6),a=n(33),u=n(8),Z=n(2),s=n(86),b=n(34),m=n(91);t.exports=function(t,i,n){var h=-1!==t.indexOf("Map"),I=-1!==t.indexOf("Weak"),p=h?"set":"add",G=e[t],y=G&&G.prototype,g=G,X={},V=function(t){var i=y[t];o(y,t,"add"==t?function(t){return i.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(I&&!u(t))&&i.call(this,0===t?0:t)}:"get"==t?function(t){return I&&!u(t)?void 0:i.call(this,0===t?0:t)}:"has"==t?function(t){return!(I&&!u(t))&&i.call(this,0===t?0:t)}:function(t,n){return i.call(this,0===t?0:t,n),this})};if(c(t,"function"!=typeof G||!(I||y.forEach&&!Z((function(){(new G).entries().next()})))))g=n.getConstructor(i,t,h,p),d.enable();else if(c(t,!0)){var W=new g,C=W[p](I?{}:-0,1)!=W,R=Z((function(){W.has(1)})),f=s((function(t){new G(t)})),S=!I&&Z((function(){for(var t=new G,i=5;i--;)t[p](i,i);return!t.has(-0)}));f||((g=i((function(i,n){a(i,g,t);var l=m(new G,i,g);return null!=n&&r(n,l[p],{that:l,AS_ENTRIES:h}),l}))).prototype=y,y.constructor=g),(R||S)&&(V("delete"),V("has"),h&&V("get")),(S||C)&&V(p),I&&y.clear&&delete y.clear}return X[t]=g,l({global:!0,forced:g!=G},X),b(g,t),I||n.setStrong(g,t,h),g}},function(t,i,n){var l=n(8),e=n(42);t.exports=function(t,i,n){var c,o;return e&&"function"==typeof(c=i.constructor)&&c!==n&&l(o=c.prototype)&&o!==n.prototype&&e(t,o),t}},function(t,i){var n=Math.expm1,l=Math.exp;t.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:l(t)-1}:n},function(t,i){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(t,i,n){"use strict";var l=n(5),e=n(4),c=n(2),o=n(123);t.exports=l||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete e[t]}}))},function(t,i){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,i,n){var l=n(2),e=n(4).RegExp;i.UNSUPPORTED_Y=l((function(){var t=e("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),i.BROKEN_CARET=l((function(){var t=e("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,i,n){"use strict";var l,e,c=n(15),o=n(65),d=n(96),r=n(68),a=n(26),u=n(17).get,Z=n(177),s=n(178),b=RegExp.prototype.exec,m=r("native-string-replace",String.prototype.replace),h=b,I=(l=/a/,e=/b*/g,b.call(l,"a"),b.call(e,"a"),0!==l.lastIndex||0!==e.lastIndex),p=d.UNSUPPORTED_Y||d.BROKEN_CARET,G=void 0!==/()??/.exec("")[1];(I||G||p||Z||s)&&(h=function(t){var i,n,l,e,d,r,Z,s=this,y=u(s),g=c(t),X=y.raw;if(X)return X.lastIndex=s.lastIndex,i=h.call(X,g),s.lastIndex=X.lastIndex,i;var V=y.groups,W=p&&s.sticky,C=o.call(s),R=s.source,f=0,S=g;if(W&&(-1===(C=C.replace("y","")).indexOf("g")&&(C+="g"),S=g.slice(s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==g.charAt(s.lastIndex-1))&&(R="(?: "+R+")",S=" "+S,f++),n=new RegExp("^(?:"+R+")",C)),G&&(n=new RegExp("^"+R+"$(?!\\s)",C)),I&&(l=s.lastIndex),e=b.call(W?n:s,S),W?e?(e.input=e.input.slice(f),e[0]=e[0].slice(f),e.index=s.lastIndex,s.lastIndex+=e[0].length):s.lastIndex=0:I&&e&&(s.lastIndex=s.global?e.index+e[0].length:l),G&&e&&e.length>1&&m.call(e[0],n,(function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(e[d]=void 0)})),e&&V)for(e.groups=r=a(null),d=0;d<V.length;d++)r[(Z=V[d])[0]]=e[Z[1]];return e}),t.exports=h},function(t,i,n){"use strict";n(132);var l=n(25),e=n(97),c=n(2),o=n(7),d=n(18),r=o("species"),a=RegExp.prototype;t.exports=function(t,i,n,u){var Z=o(t),s=!c((function(){var i={};return i[Z]=function(){return 7},7!=""[t](i)})),b=s&&!c((function(){var i=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[r]=function(){return n},n.flags="",n[Z]=/./[Z]),n.exec=function(){return i=!0,null},n[Z](""),!i}));if(!s||!b||n){var m=/./[Z],h=i(Z,""[t],(function(t,i,n,l,c){var o=i.exec;return o===e||o===a.exec?s&&!c?{done:!0,value:m.call(i,n,l)}:{done:!0,value:t.call(n,i,l)}:{done:!1}}));l(String.prototype,t,h[0]),l(a,Z,h[1])}u&&d(a[Z],"sham",!0)}},function(t,i,n){"use strict";var l=n(66).charAt;t.exports=function(t,i,n){return i+(n?l(t,i).length:1)}},function(t,i,n){var l=n(46),e=n(97);t.exports=function(t,i){var n=t.exec;if("function"==typeof n){var c=n.call(t,i);if("object"!=typeof c)throw TypeError("RegExp exec method returned something other than an Object or null");return c}if("RegExp"!==l(t))throw TypeError("RegExp#exec called on incompatible receiver");return e.call(t,i)}},function(t,i,n){var l=n(12),e=n(28),c=l.TYPED_ARRAY_CONSTRUCTOR,o=l.aTypedArrayConstructor;t.exports=function(t){return o(e(t,t[c]))}},function(t,i,n){var l=n(3);t.exports=function(t){return null==t?void 0:l(t)}},function(t,i,n){"use strict";var l=n(1),e=n(3);t.exports=function(){for(var t,i=l(this),n=e(i.delete),c=!0,o=0,d=arguments.length;o<d;o++)t=n.call(i,arguments[o]),c=c&&t;return!!c}},function(t,i,n){"use strict";var l=n(3),e=n(19),c=n(6);t.exports=function(t){var i,n,o,d,r=arguments.length,a=r>1?arguments[1]:void 0;return l(this),(i=void 0!==a)&&l(a),null==t?new this:(n=[],i?(o=0,d=e(a,r>2?arguments[2]:void 0,2),c(t,(function(t){n.push(d(t,o++))}))):c(t,n.push,{that:n}),new this(n))}},function(t,i,n){"use strict";t.exports=function(){for(var t=arguments.length,i=new Array(t);t--;)i[t]=arguments[t];return new this(i)}},function(t,i,n){var l=n(8),e=n(59),c=n(142),o=n(7)("toPrimitive");t.exports=function(t,i){if(!l(t)||e(t))return t;var n,d=t[o];if(void 0!==d){if(void 0===i&&(i="default"),n=d.call(t,i),!l(n)||e(n))return n;throw TypeError("Can't convert object to primitive value")}return void 0===i&&(i="number"),c(t,i)}},function(t,i,n){var l=n(48),e=n(2);t.exports=!!Object.getOwnPropertySymbols&&!e((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&l&&l<41}))},function(t,i,n){var l=n(4);t.exports=function(t,i){try{Object.defineProperty(l,t,{value:i,configurable:!0,writable:!0})}catch(n){l[t]=i}return i}},function(t,i,n){var l=n(4),e=n(8),c=l.document,o=e(c)&&e(c.createElement);t.exports=function(t){return o?c.createElement(t):{}}},function(t,i,n){var l=n(83),e=Function.toString;"function"!=typeof l.inspectSource&&(l.inspectSource=function(t){return e.call(t)}),t.exports=l.inspectSource},function(t,i,n){var l=n(11),e=n(49),c=n(113),o=n(1);t.exports=l("Reflect","ownKeys")||function(t){var i=e.f(o(t)),n=c.f;return n?i.concat(n(t)):i}},function(t,i){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,i){i.f=Object.getOwnPropertySymbols},function(t,i,n){var l=n(9),e=n(14),c=n(1),o=n(60);t.exports=l?Object.defineProperties:function(t,i){c(t);for(var n,l=o(i),d=l.length,r=0;d>r;)e.f(t,n=l[r++],i[n]);return t}},function(t,i,n){var l=n(29),e=n(49).f,c={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return o&&"[object Window]"==c.call(t)?function(t){try{return e(t)}catch(t){return o.slice()}}(t):e(l(t))}},function(t,i,n){"use strict";var l=n(13),e=n(50),c=n(10);t.exports=function(t){for(var i=l(this),n=c(i.length),o=arguments.length,d=e(o>1?arguments[1]:void 0,n),r=o>2?arguments[2]:void 0,a=void 0===r?n:e(r,n);a>d;)i[d++]=t;return i}},function(t,i,n){var l=n(1),e=n(85);t.exports=function(t,i,n,c){try{return c?i(l(n)[0],n[1]):i(n)}catch(i){e(t,"throw",i)}}},function(t,i,n){var l=n(7),e=n(75),c=l("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(e.Array===t||o[c]===t)}},function(t,i,n){var l={};l[n(7)("toStringTag")]="z",t.exports="[object z]"===String(l)},function(t,i,n){"use strict";var l=n(0),e=n(62),c=n(27),o=n(42),d=n(34),r=n(18),a=n(25),u=n(7),Z=n(5),s=n(75),b=n(121),m=b.IteratorPrototype,h=b.BUGGY_SAFARI_ITERATORS,I=u("iterator"),p=function(){return this};t.exports=function(t,i,n,u,b,G,y){e(n,i,u);var g,X,V,W=function(t){if(t===b&&v)return v;if(!h&&t in f)return f[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},C=i+" Iterator",R=!1,f=t.prototype,S=f[I]||f["@@iterator"]||b&&f[b],v=!h&&S||W(b),Y="Array"==i&&f.entries||S;if(Y&&(g=c(Y.call(new t)),m!==Object.prototype&&g.next&&(Z||c(g)===m||(o?o(g,m):"function"!=typeof g[I]&&r(g,I,p)),d(g,C,!0,!0),Z&&(s[C]=p))),"values"==b&&S&&"values"!==S.name&&(R=!0,v=function(){return S.call(this)}),Z&&!y||f[I]===v||r(f,I,v),s[i]=v,b)if(X={values:W("values"),keys:G?v:W("keys"),entries:W("entries")},y)for(V in X)(h||R||!(V in f))&&a(f,V,X[V]);else l({target:i,proto:!0,forced:h||R},X);return X}},function(t,i,n){"use strict";var l,e,c,o=n(2),d=n(27),r=n(18),a=n(16),u=n(7),Z=n(5),s=u("iterator"),b=!1;[].keys&&("next"in(c=[].keys())?(e=d(d(c)))!==Object.prototype&&(l=e):b=!0);var m=null==l||o((function(){var t={};return l[s].call(t)!==t}));m&&(l={}),Z&&!m||a(l,s)||r(l,s,(function(){return this})),t.exports={IteratorPrototype:l,BUGGY_SAFARI_ITERATORS:b}},function(t,i,n){var l=n(2);t.exports=!l((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,i,n){var l=n(39).match(/AppleWebKit\/(\d+)\./);t.exports=!!l&&+l[1]},function(t,i){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,i,n){var l=n(10),e=n(15),c=n(126),o=n(22),d=Math.ceil,r=function(t){return function(i,n,r){var a,u,Z=e(o(i)),s=Z.length,b=void 0===r?" ":e(r),m=l(n);return m<=s||""==b?Z:(a=m-s,(u=c.call(b,d(a/b.length))).length>a&&(u=u.slice(0,a)),t?Z+u:u+Z)}};t.exports={start:r(!1),end:r(!0)}},function(t,i,n){"use strict";var l=n(30),e=n(15),c=n(22);t.exports=function(t){var i=e(c(this)),n="",o=l(t);if(o<0||o==1/0)throw RangeError("Wrong number of repetitions");for(;o>0;(o>>>=1)&&(i+=i))1&o&&(n+=i);return n}},function(t,i,n){"use strict";var l=n(90),e=n(161);t.exports=l("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),e)},function(t,i){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,i,n){var l=n(8),e=Math.floor;t.exports=function(t){return!l(t)&&isFinite(t)&&e(t)===t}},function(t,i,n){var l=n(4),e=n(15),c=n(64).trim,o=n(93),d=l.parseInt,r=/^[+-]?0[Xx]/,a=8!==d(o+"08")||22!==d(o+"0x16");t.exports=a?function(t,i){var n=c(e(t));return d(n,i>>>0||(r.test(n)?16:10))}:d},function(t,i,n){var l,e,c,o,d=n(4),r=n(2),a=n(19),u=n(147),Z=n(109),s=n(171),b=n(63),m=d.setImmediate,h=d.clearImmediate,I=d.process,p=d.MessageChannel,G=d.Dispatch,y=0,g={};try{l=d.location}catch(t){}var X=function(t){if(g.hasOwnProperty(t)){var i=g[t];delete g[t],i()}},V=function(t){return function(){X(t)}},W=function(t){X(t.data)},C=function(t){d.postMessage(String(t),l.protocol+"//"+l.host)};m&&h||(m=function(t){for(var i=[],n=arguments.length,l=1;n>l;)i.push(arguments[l++]);return g[++y]=function(){("function"==typeof t?t:Function(t)).apply(void 0,i)},e(y),y},h=function(t){delete g[t]},b?e=function(t){I.nextTick(V(t))}:G&&G.now?e=function(t){G.now(V(t))}:p&&!s?(o=(c=new p).port2,c.port1.onmessage=W,e=a(o.postMessage,o,1)):d.addEventListener&&"function"==typeof postMessage&&!d.importScripts&&l&&"file:"!==l.protocol&&!r(C)?(e=C,d.addEventListener("message",W,!1)):e="onreadystatechange"in Z("script")?function(t){u.appendChild(Z("script")).onreadystatechange=function(){u.removeChild(this),X(t)}}:function(t){setTimeout(V(t),0)}),t.exports={set:m,clear:h}},function(t,i,n){"use strict";var l=n(0),e=n(97);l({target:"RegExp",proto:!0,forced:/./.exec!==e},{exec:e})},function(t,i,n){var l=n(79);t.exports=function(t){if(l(t))throw TypeError("The method doesn't accept regular expressions");return t}},function(t,i,n){var l=n(7)("match");t.exports=function(t){var i=/./;try{"/./"[t](i)}catch(n){try{return i[l]=!1,"/./"[t](i)}catch(t){}}return!1}},function(t,i,n){var l=n(2),e=n(93);t.exports=function(t){return l((function(){return!!e[t]()||"
"!="
"[t]()||e[t].name!==t}))}},function(t,i,n){var l=n(4),e=n(2),c=n(86),o=n(12).NATIVE_ARRAY_BUFFER_VIEWS,d=l.ArrayBuffer,r=l.Int8Array;t.exports=!o||!e((function(){r(1)}))||!e((function(){new r(-1)}))||!c((function(t){new r,new r(null),new r(1.5),new r(t)}),!0)||e((function(){return 1!==new r(new d(2),1,void 0).length}))},function(t,i,n){"use strict";var l,e=n(4),c=n(36),o=n(55),d=n(90),r=n(186),a=n(8),u=n(17).enforce,Z=n(144),s=!e.ActiveXObject&&"ActiveXObject"in e,b=Object.isExtensible,m=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},h=t.exports=d("WeakMap",m,r);if(Z&&s){l=r.getConstructor(m,"WeakMap",!0),o.enable();var I=h.prototype,p=I.delete,G=I.has,y=I.get,g=I.set;c(I,{delete:function(t){if(a(t)&&!b(t)){var i=u(this);return i.frozen||(i.frozen=new l),p.call(this,t)||i.frozen.delete(t)}return p.call(this,t)},has:function(t){if(a(t)&&!b(t)){var i=u(this);return i.frozen||(i.frozen=new l),G.call(this,t)||i.frozen.has(t)}return G.call(this,t)},get:function(t){if(a(t)&&!b(t)){var i=u(this);return i.frozen||(i.frozen=new l),G.call(this,t)?y.call(this,t):i.frozen.get(t)}return y.call(this,t)},set:function(t,i){if(a(t)&&!b(t)){var n=u(this);n.frozen||(n.frozen=new l),G.call(this,t)?g.call(this,t,i):n.frozen.set(t,i)}else g.call(this,t,i);return this}})}},function(t,i,n){"use strict";var l=n(1);t.exports=function(t,i){var n,e=l(this),c=arguments.length>2?arguments[2]:void 0;if("function"!=typeof i&&"function"!=typeof c)throw TypeError("At least one callback required");return e.has(t)?(n=e.get(t),"function"==typeof i&&(n=i(n),e.set(t,n))):"function"==typeof c&&(n=c(),e.set(t,n)),n}},function(t,i,n){"use strict";var l=n(17),e=n(62),c=n(16),o=n(60),d=n(13),r=l.set,a=l.getterFor("Object Iterator");t.exports=e((function(t,i){var n=d(t);r(this,{type:"Object Iterator",mode:i,object:n,keys:o(n),index:0})}),"Object",(function(){for(var t=a(this),i=t.keys;;){if(null===i||t.index>=i.length)return t.object=t.keys=null,{value:void 0,done:!0};var n=i[t.index++],l=t.object;if(c(l,n)){switch(t.mode){case"keys":return{value:n,done:!1};case"values":return{value:l[n],done:!1}}return{value:[n,l[n]],done:!1}}}}))},function(t,i){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,i,n){var l=n(107);t.exports=l&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,i,n){var l=n(8);t.exports=function(t,i){var n,e;if("string"===i&&"function"==typeof(n=t.toString)&&!l(e=n.call(t)))return e;if("function"==typeof(n=t.valueOf)&&!l(e=n.call(t)))return e;if("string"!==i&&"function"==typeof(n=t.toString)&&!l(e=n.call(t)))return e;throw TypeError("Can't convert object to primitive value")}},function(t,i,n){var l=n(9),e=n(2),c=n(109);t.exports=!l&&!e((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,i,n){var l=n(4),e=n(110),c=l.WeakMap;t.exports="function"==typeof c&&/native code/.test(e(c))},function(t,i,n){var l=n(16),e=n(111),c=n(24),o=n(14);t.exports=function(t,i){for(var n=e(i),d=o.f,r=c.f,a=0;a<n.length;a++){var u=n[a];l(t,u)||d(t,u,r(i,u))}}},function(t,i,n){var l=n(16),e=n(29),c=n(71).indexOf,o=n(70);t.exports=function(t,i){var n,d=e(t),r=0,a=[];for(n in d)!l(o,n)&&l(d,n)&&a.push(n);for(;i.length>r;)l(d,n=i[r++])&&(~c(a,n)||a.push(n));return a}},function(t,i,n){var l=n(11);t.exports=l("document","documentElement")},function(t,i,n){var l=n(7);i.f=l},function(t,i,n){"use strict";var l=n(13),e=n(50),c=n(10),o=Math.min;t.exports=[].copyWithin||function(t,i){var n=l(this),d=c(n.length),r=e(t,d),a=e(i,d),u=arguments.length>2?arguments[2]:void 0,Z=o((void 0===u?d:e(u,d))-a,d-r),s=1;for(a<r&&r<a+Z&&(s=-1,a+=Z-1,r+=Z-1);Z-- >0;)a in n?n[r]=n[a]:delete n[r],r+=s,a+=s;return n}},function(t,i,n){"use strict";var l=n(51),e=n(10),c=n(19),o=function(t,i,n,d,r,a,u,Z){for(var s,b=r,m=0,h=!!u&&c(u,Z,3);m<d;){if(m in n){if(s=h?h(n[m],m,i):n[m],a>0&&l(s))b=o(t,i,s,e(s.length),b,a-1)-1;else{if(b>=9007199254740991)throw TypeError("Exceed the acceptable array length");t[b]=s}b++}m++}return b};t.exports=o},function(t,i,n){"use strict";var l=n(23).forEach,e=n(40)("forEach");t.exports=e?[].forEach:function(t){return l(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,i,n){"use strict";var l=n(19),e=n(13),c=n(117),o=n(118),d=n(10),r=n(53),a=n(41),u=n(52);t.exports=function(t){var i,n,Z,s,b,m,h=e(t),I="function"==typeof this?this:Array,p=arguments.length,G=p>1?arguments[1]:void 0,y=void 0!==G,g=u(h),X=0;if(y&&(G=l(G,p>2?arguments[2]:void 0,2)),null==g||I==Array&&o(g))for(n=new I(i=d(h.length));i>X;X++)m=y?G(h[X],X):h[X],r(n,X,m);else for(b=(s=a(h,g)).next,n=new I;!(Z=b.call(s)).done;X++)m=y?c(s,G,[Z.value,X],!0):Z.value,r(n,X,m);return n.length=X,n}},function(t,i,n){var l=n(8);t.exports=function(t){if(!l(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,i,n){"use strict";var l=n(29),e=n(30),c=n(10),o=n(40),d=Math.min,r=[].lastIndexOf,a=!!r&&1/[1].lastIndexOf(1,-0)<0,u=o("lastIndexOf"),Z=a||!u;t.exports=Z?function(t){if(a)return r.apply(this,arguments)||0;var i=l(this),n=c(i.length),o=n-1;for(arguments.length>1&&(o=d(o,e(arguments[1]))),o<0&&(o=n+o);o>=0;o--)if(o in i&&i[o]===t)return o||0;return-1}:r},function(t,i){var n=Math.floor,l=function(t,i){var o=t.length,d=n(o/2);return o<8?e(t,i):c(l(t.slice(0,d),i),l(t.slice(d),i),i)},e=function(t,i){for(var n,l,e=t.length,c=1;c<e;){for(l=c,n=t[c];l&&i(t[l-1],n)>0;)t[l]=t[--l];l!==c++&&(t[l]=n)}return t},c=function(t,i,n){for(var l=t.length,e=i.length,c=0,o=0,d=[];c<l||o<e;)c<l&&o<e?d.push(n(t[c],i[o])<=0?t[c++]:i[o++]):d.push(c<l?t[c++]:i[o++]);return d};t.exports=l},function(t,i,n){var l=n(39).match(/firefox\/(\d+)/i);t.exports=!!l&&+l[1]},function(t,i,n){var l=n(39);t.exports=/MSIE|Trident/.test(l)},function(t,i,n){var l=n(30),e=n(10);t.exports=function(t){if(void 0===t)return 0;var i=l(t),n=e(i);if(i!==n)throw RangeError("Wrong length or index");return n}},function(t,i,n){"use strict";var l=n(3),e=n(8),c=[].slice,o={},d=function(t,i,n){if(!(i in o)){for(var l=[],e=0;e<i;e++)l[e]="a["+e+"]";o[i]=Function("C,a","return new C("+l.join(",")+")")}return o[i](t,n)};t.exports=Function.bind||function(t){var i=l(this),n=c.call(arguments,1),o=function(){var l=n.concat(c.call(arguments));return this instanceof o?d(i,l.length,l):i.apply(t,l)};return e(i.prototype)&&(o.prototype=i.prototype),o}},function(t,i,n){n(0)({global:!0},{globalThis:n(4)})},function(t,i,n){"use strict";var l=n(14).f,e=n(26),c=n(36),o=n(19),d=n(33),r=n(6),a=n(120),u=n(54),Z=n(9),s=n(55).fastKey,b=n(17),m=b.set,h=b.getterFor;t.exports={getConstructor:function(t,i,n,a){var u=t((function(t,l){d(t,u,i),m(t,{type:i,index:e(null),first:void 0,last:void 0,size:0}),Z||(t.size=0),null!=l&&r(l,t[a],{that:t,AS_ENTRIES:n})})),b=h(i),I=function(t,i,n){var l,e,c=b(t),o=p(t,i);return o?o.value=n:(c.last=o={index:e=s(i,!0),key:i,value:n,previous:l=c.last,next:void 0,removed:!1},c.first||(c.first=o),l&&(l.next=o),Z?c.size++:t.size++,"F"!==e&&(c.index[e]=o)),t},p=function(t,i){var n,l=b(t),e=s(i);if("F"!==e)return l.index[e];for(n=l.first;n;n=n.next)if(n.key==i)return n};return c(u.prototype,{clear:function(){for(var t=b(this),i=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete i[n.index],n=n.next;t.first=t.last=void 0,Z?t.size=0:this.size=0},delete:function(t){var i=b(this),n=p(this,t);if(n){var l=n.next,e=n.previous;delete i.index[n.index],n.removed=!0,e&&(e.next=l),l&&(l.previous=e),i.first==n&&(i.first=l),i.last==n&&(i.last=e),Z?i.size--:this.size--}return!!n},forEach:function(t){for(var i,n=b(this),l=o(t,arguments.length>1?arguments[1]:void 0,3);i=i?i.next:n.first;)for(l(i.value,i.key,this);i&&i.removed;)i=i.previous},has:function(t){return!!p(this,t)}}),c(u.prototype,n?{get:function(t){var i=p(this,t);return i&&i.value},set:function(t,i){return I(this,0===t?0:t,i)}}:{add:function(t){return I(this,t=0===t?0:t,t)}}),Z&&l(u.prototype,"size",{get:function(){return b(this).size}}),u},setStrong:function(t,i,n){var l=i+" Iterator",e=h(i),c=h(l);a(t,i,(function(t,i){m(this,{type:l,target:t,state:e(t),kind:i,last:void 0})}),(function(){for(var t=c(this),i=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==i?{value:n.key,done:!1}:"values"==i?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(i)}}},function(t,i){var n=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:n(1+t)}},function(t,i,n){var l=n(128),e=Math.abs,c=Math.pow,o=c(2,-52),d=c(2,-23),r=c(2,127)*(2-d),a=c(2,-126);t.exports=Math.fround||function(t){var i,n,c=e(t),u=l(t);return c<a?u*(c/a/d+1/o-1/o)*a*d:(n=(i=(1+d/o)*c)-(i-c))>r||n!=n?u*(1/0):u*n}},function(t,i,n){var l=n(4).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&l(t)}},function(t,i,n){var l=n(4),e=n(15),c=n(64).trim,o=n(93),d=l.parseFloat,r=1/d(o+"-0")!=-1/0;t.exports=r?function(t){var i=c(e(t)),n=d(i);return 0===n&&"-"==i.charAt(0)?-0:n}:d},function(t,i){var n=1..valueOf;t.exports=function(t){return n.call(t)}},function(t,i,n){"use strict";var l=n(9),e=n(2),c=n(60),o=n(113),d=n(82),r=n(13),a=n(67),u=Object.assign,Z=Object.defineProperty;t.exports=!u||e((function(){if(l&&1!==u({b:1},u(Z({},"a",{enumerable:!0,get:function(){Z(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},i={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){i[t]=t})),7!=u({},t)[n]||"abcdefghijklmnopqrst"!=c(u({},i)).join("")}))?function(t,i){for(var n=r(t),e=arguments.length,u=1,Z=o.f,s=d.f;e>u;)for(var b,m=a(arguments[u++]),h=Z?c(m).concat(Z(m)):c(m),I=h.length,p=0;I>p;)b=h[p++],l&&!s.call(m,b)||(n[b]=m[b]);return n}:u},function(t,i,n){var l=n(9),e=n(60),c=n(29),o=n(82).f,d=function(t){return function(i){for(var n,d=c(i),r=e(d),a=r.length,u=0,Z=[];a>u;)n=r[u++],l&&!o.call(d,n)||Z.push(t?[n,d[n]]:d[n]);return Z}};t.exports={entries:d(!0),values:d(!1)}},function(t,i){t.exports=Object.is||function(t,i){return t===i?0!==t||1/t==1/i:t!=t&&i!=i}},function(t,i,n){var l=n(4);t.exports=l.Promise},function(t,i,n){var l=n(39);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(l)},function(t,i,n){var l,e,c,o,d,r,a,u,Z=n(4),s=n(24).f,b=n(131).set,m=n(171),h=n(316),I=n(317),p=n(63),G=Z.MutationObserver||Z.WebKitMutationObserver,y=Z.document,g=Z.process,X=Z.Promise,V=s(Z,"queueMicrotask"),W=V&&V.value;W||(l=function(){var t,i;for(p&&(t=g.domain)&&t.exit();e;){i=e.fn,e=e.next;try{i()}catch(t){throw e?o():c=void 0,t}}c=void 0,t&&t.enter()},m||p||I||!G||!y?!h&&X&&X.resolve?((a=X.resolve(void 0)).constructor=X,u=a.then,o=function(){u.call(a,l)}):o=p?function(){g.nextTick(l)}:function(){b.call(Z,l)}:(d=!0,r=y.createTextNode(""),new G(l).observe(r,{characterData:!0}),o=function(){r.data=d=!d})),t.exports=W||function(t){var i={fn:t,next:void 0};c&&(c.next=i),e||(e=i,o()),c=i}},function(t,i,n){var l=n(1),e=n(8),c=n(78);t.exports=function(t,i){if(l(t),e(i)&&i.constructor===t)return i;var n=c.f(t);return(0,n.resolve)(i),n.promise}},function(t,i,n){var l=n(4);t.exports=function(t,i){var n=l.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,i))}},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(78),o=n(95),d=n(6);l({target:"Promise",stat:!0},{allSettled:function(t){var i=this,n=c.f(i),l=n.resolve,r=n.reject,a=o((function(){var n=e(i.resolve),c=[],o=0,r=1;d(t,(function(t){var e=o++,d=!1;c.push(void 0),r++,n.call(i,t).then((function(t){d||(d=!0,c[e]={status:"fulfilled",value:t},--r||l(c))}),(function(t){d||(d=!0,c[e]={status:"rejected",reason:t},--r||l(c))}))})),--r||l(c)}));return a.error&&r(a.value),n.promise}})},function(t,i,n){var l=n(16);t.exports=function(t){return void 0!==t&&(l(t,"value")||l(t,"writable"))}},function(t,i,n){var l=n(2),e=n(4).RegExp;t.exports=l((function(){var t=e(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,i,n){var l=n(2),e=n(4).RegExp;t.exports=l((function(){var t=e("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,i,n){"use strict";var l=n(90),e=n(161);t.exports=l("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),e)},function(t,i,n){"use strict";var l=n(66).charAt,e=n(15),c=n(17),o=n(120),d=c.set,r=c.getterFor("String Iterator");o(String,"String",(function(t){d(this,{type:"String Iterator",string:e(t),index:0})}),(function(){var t,i=r(this),n=i.string,e=i.index;return e>=n.length?{value:void 0,done:!0}:(t=l(n,e),i.index+=t.length,{value:t,done:!1})}))},function(t,i,n){"use strict";var l=n(0),e=n(62),c=n(22),o=n(10),d=n(15),r=n(3),a=n(1),u=n(46),Z=n(79),s=n(65),b=n(18),m=n(2),h=n(7),I=n(28),p=n(99),G=n(17),y=n(5),g=h("matchAll"),X=G.set,V=G.getterFor("RegExp String Iterator"),W=RegExp.prototype,C=W.exec,R="".matchAll,f=!!R&&!m((function(){"a".matchAll(/./)})),S=e((function(t,i,n,l){X(this,{type:"RegExp String Iterator",regexp:t,string:i,global:n,unicode:l,done:!1})}),"RegExp String",(function(){var t=V(this);if(t.done)return{value:void 0,done:!0};var i=t.regexp,n=t.string,l=function(t,i){var n,l=t.exec;if("function"==typeof l){if("object"!=typeof(n=l.call(t,i)))throw TypeError("Incorrect exec result");return n}return C.call(t,i)}(i,n);return null===l?{value:void 0,done:t.done=!0}:t.global?(""===d(l[0])&&(i.lastIndex=p(n,o(i.lastIndex),t.unicode)),{value:l,done:!1}):(t.done=!0,{value:l,done:!1})})),v=function(t){var i,n,l,e,c,r,u=a(this),Z=d(t);return i=I(u,RegExp),void 0===(n=u.flags)&&u instanceof RegExp&&!("flags"in W)&&(n=s.call(u)),l=void 0===n?"":d(n),e=new i(i===RegExp?u.source:u,l),c=!!~l.indexOf("g"),r=!!~l.indexOf("u"),e.lastIndex=o(u.lastIndex),new S(e,Z,c,r)};l({target:"String",proto:!0,forced:f},{matchAll:function(t){var i,n,l,e=c(this);if(null!=t){if(Z(t)&&!~d(c("flags"in W?t.flags:s.call(t))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(f)return R.apply(e,arguments);if(void 0===(n=t[g])&&y&&"RegExp"==u(t)&&(n=v),null!=n)return r(n).call(t,e)}else if(f)return R.apply(e,arguments);return i=d(e),l=new RegExp(t,"g"),y?v.call(l,i):l[g](i)}}),y||g in W||b(W,g,v)},function(t,i,n){var l=n(39);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(l)},function(t,i,n){var l=n(13),e=Math.floor,c="".replace,o=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,d=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,i,n,r,a,u){var Z=n+t.length,s=r.length,b=d;return void 0!==a&&(a=l(a),b=o),c.call(u,b,(function(l,c){var o;switch(c.charAt(0)){case"$":return"$";case"&":return t;case"`":return i.slice(0,n);case"'":return i.slice(Z);case"<":o=a[c.slice(1,-1)];break;default:var d=+c;if(0===d)return l;if(d>s){var u=e(d/10);return 0===u?l:u<=s?void 0===r[u-1]?c.charAt(1):r[u-1]+c.charAt(1):l}o=r[d-1]}return void 0===o?"":o}))}},function(t,i,n){var l=n(80);t.exports=function(t,i){var n=l(t);if(n%i)throw RangeError("Wrong offset");return n}},function(t,i,n){var l=n(13),e=n(10),c=n(41),o=n(52),d=n(118),r=n(19),a=n(12).aTypedArrayConstructor;t.exports=function(t){var i,n,u,Z,s,b,m=l(t),h=arguments.length,I=h>1?arguments[1]:void 0,p=void 0!==I,G=o(m);if(null!=G&&!d(G))for(b=(s=c(m,G)).next,m=[];!(Z=b.call(s)).done;)m.push(Z.value);for(p&&h>2&&(I=r(I,arguments[2],2)),n=e(m.length),u=new(a(this))(n),i=0;n>i;i++)u[i]=p?I(m[i],i):m[i];return u}},function(t,i,n){"use strict";var l=n(36),e=n(55).getWeakData,c=n(1),o=n(8),d=n(33),r=n(6),a=n(23),u=n(16),Z=n(17),s=Z.set,b=Z.getterFor,m=a.find,h=a.findIndex,I=0,p=function(t){return t.frozen||(t.frozen=new G)},G=function(){this.entries=[]},y=function(t,i){return m(t.entries,(function(t){return t[0]===i}))};G.prototype={get:function(t){var i=y(this,t);if(i)return i[1]},has:function(t){return!!y(this,t)},set:function(t,i){var n=y(this,t);n?n[1]=i:this.entries.push([t,i])},delete:function(t){var i=h(this.entries,(function(i){return i[0]===t}));return~i&&this.entries.splice(i,1),!!~i}},t.exports={getConstructor:function(t,i,n,a){var Z=t((function(t,l){d(t,Z,i),s(t,{type:i,id:I++,frozen:void 0}),null!=l&&r(l,t[a],{that:t,AS_ENTRIES:n})})),m=b(i),h=function(t,i,n){var l=m(t),o=e(c(i),!0);return!0===o?p(l).set(i,n):o[l.id]=n,t};return l(Z.prototype,{delete:function(t){var i=m(this);if(!o(t))return!1;var n=e(t);return!0===n?p(i).delete(t):n&&u(n,i.id)&&delete n[i.id]},has:function(t){var i=m(this);if(!o(t))return!1;var n=e(t);return!0===n?p(i).has(t):n&&u(n,i.id)}}),l(Z.prototype,n?{get:function(t){var i=m(this);if(o(t)){var n=e(t);return!0===n?p(i).get(t):n?n[i.id]:void 0}},set:function(t,i){return h(this,t,i)}}:{add:function(t){return h(this,t,!0)}}),Z}}},function(t,i,n){var l=n(188),e=n(3),c=n(1),o=n(41),d=n(102),r=n(7)("asyncIterator");t.exports=function(t,i){var n=arguments.length<2?d(t[r]):i;return void 0===n?new l(o(t)):c(e(n).call(t))}},function(t,i,n){"use strict";var l=n(61),e=n(1),c=n(26),o=n(102),d=n(36),r=n(17),a=n(11)("Promise"),u=r.set,Z=r.get,s=function(t,i,n){var l=t.done;a.resolve(t.value).then((function(t){i({done:l,value:t})}),n)},b=function(t){u(this,{iterator:e(t),next:t.next})};b.prototype=d(c(l.AsyncIterator.prototype),{next:function(t){var i=Z(this),n=!!arguments.length;return new a((function(l,c){var o=e(i.next.apply(i.iterator,n?[t]:[]));s(o,l,c)}))},return:function(t){var i=Z(this).iterator,n=!!arguments.length;return new a((function(l,c){var d=o(i.return);if(void 0===d)return l({done:!0,value:t});var r=e(d.apply(i,n?[t]:[]));s(r,l,c)}))},throw:function(t){var i=Z(this).iterator,n=!!arguments.length;return new a((function(l,c){var d=o(i.throw);if(void 0===d)return c(t);var r=e(d.apply(i,n?[t]:[]));s(r,l,c)}))}}),t.exports=b},function(t,i,n){var l=n(127),e=n(137),c=n(26),o=n(8),d=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};d.prototype.get=function(t,i){return this[t]||(this[t]=i())},d.prototype.next=function(t,i,n){var c=n?this.objectsByIndex[t]||(this.objectsByIndex[t]=new e):this.primitives||(this.primitives=new l),o=c.get(i);return o||c.set(i,o=new d),o};var r=new d;t.exports=function(){var t,i,n=r,l=arguments.length;for(t=0;t<l;t++)o(i=arguments[t])&&(n=n.next(t,i,!0));if(this===Object&&n===r)throw TypeError("Composite keys must contain a non-primitive component");for(t=0;t<l;t++)o(i=arguments[t])||(n=n.next(t,i,!1));return n}},function(t,i){t.exports=Math.scale||function(t,i,n,l,e){return 0===arguments.length||t!=t||i!=i||n!=n||l!=l||e!=e?NaN:t===1/0||t===-1/0?t:(t-i)*(e-l)/(n-i)+l}},function(t,i,n){"use strict";var l=n(1),e=n(3);t.exports=function(){for(var t=l(this),i=e(t.add),n=0,c=arguments.length;n<c;n++)i.call(t,arguments[n]);return t}},function(t,i){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,i,n){var l=n(2),e=n(7),c=n(5),o=e("iterator");t.exports=!l((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),i=t.searchParams,n="";return t.pathname="c%20d",i.forEach((function(t,l){i.delete("b"),n+=l+t})),c&&!t.toJSON||!i.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==i.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!i[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},function(t,i,n){"use strict";n(87);var l=n(0),e=n(11),c=n(193),o=n(25),d=n(36),r=n(34),a=n(62),u=n(17),Z=n(33),s=n(16),b=n(19),m=n(76),h=n(1),I=n(8),p=n(15),G=n(26),y=n(38),g=n(41),X=n(52),V=n(7),W=e("fetch"),C=e("Request"),R=C&&C.prototype,f=e("Headers"),S=V("iterator"),v=u.set,Y=u.getterFor("URLSearchParams"),K=u.getterFor("URLSearchParamsIterator"),J=/\+/g,N=Array(4),L=function(t){return N[t-1]||(N[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},U=function(t){try{return decodeURIComponent(t)}catch(i){return t}},H=function(t){var i=t.replace(J," "),n=4;try{return decodeURIComponent(i)}catch(t){for(;n;)i=i.replace(L(n--),U);return i}},x=/[!'()~]|%20/g,T={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},k=function(t){return T[t]},F=function(t){return encodeURIComponent(t).replace(x,k)},B=function(t,i){if(i)for(var n,l,e=i.split("&"),c=0;c<e.length;)(n=e[c++]).length&&(l=n.split("="),t.push({key:H(l.shift()),value:H(l.join("="))}))},z=function(t){this.entries.length=0,B(this.entries,t)},w=function(t,i){if(t<i)throw TypeError("Not enough arguments")},A=a((function(t,i){v(this,{type:"URLSearchParamsIterator",iterator:g(Y(t).entries),kind:i})}),"Iterator",(function(){var t=K(this),i=t.kind,n=t.iterator.next(),l=n.value;return n.done||(n.value="keys"===i?l.key:"values"===i?l.value:[l.key,l.value]),n})),P=function(){Z(this,P,"URLSearchParams");var t,i,n,l,e,c,o,d,r,a=arguments.length>0?arguments[0]:void 0,u=this,b=[];if(v(u,{type:"URLSearchParams",entries:b,updateURL:function(){},updateSearchParams:z}),void 0!==a)if(I(a))if("function"==typeof(t=X(a)))for(n=(i=g(a,t)).next;!(l=n.call(i)).done;){if((o=(c=(e=g(h(l.value))).next).call(e)).done||(d=c.call(e)).done||!c.call(e).done)throw TypeError("Expected sequence with length 2");b.push({key:p(o.value),value:p(d.value)})}else for(r in a)s(a,r)&&b.push({key:r,value:p(a[r])});else B(b,"string"==typeof a?"?"===a.charAt(0)?a.slice(1):a:p(a))},M=P.prototype;if(d(M,{append:function(t,i){w(arguments.length,2);var n=Y(this);n.entries.push({key:p(t),value:p(i)}),n.updateURL()},delete:function(t){w(arguments.length,1);for(var i=Y(this),n=i.entries,l=p(t),e=0;e<n.length;)n[e].key===l?n.splice(e,1):e++;i.updateURL()},get:function(t){w(arguments.length,1);for(var i=Y(this).entries,n=p(t),l=0;l<i.length;l++)if(i[l].key===n)return i[l].value;return null},getAll:function(t){w(arguments.length,1);for(var i=Y(this).entries,n=p(t),l=[],e=0;e<i.length;e++)i[e].key===n&&l.push(i[e].value);return l},has:function(t){w(arguments.length,1);for(var i=Y(this).entries,n=p(t),l=0;l<i.length;)if(i[l++].key===n)return!0;return!1},set:function(t,i){w(arguments.length,1);for(var n,l=Y(this),e=l.entries,c=!1,o=p(t),d=p(i),r=0;r<e.length;r++)(n=e[r]).key===o&&(c?e.splice(r--,1):(c=!0,n.value=d));c||e.push({key:o,value:d}),l.updateURL()},sort:function(){var t,i,n,l=Y(this),e=l.entries,c=e.slice();for(e.length=0,n=0;n<c.length;n++){for(t=c[n],i=0;i<n;i++)if(e[i].key>t.key){e.splice(i,0,t);break}i===n&&e.push(t)}l.updateURL()},forEach:function(t){for(var i,n=Y(this).entries,l=b(t,arguments.length>1?arguments[1]:void 0,3),e=0;e<n.length;)l((i=n[e++]).value,i.key,this)},keys:function(){return new A(this,"keys")},values:function(){return new A(this,"values")},entries:function(){return new A(this,"entries")}},{enumerable:!0}),o(M,S,M.entries),o(M,"toString",(function(){for(var t,i=Y(this).entries,n=[],l=0;l<i.length;)t=i[l++],n.push(F(t.key)+"="+F(t.value));return n.join("&")}),{enumerable:!0}),r(P,"URLSearchParams"),l({global:!0,forced:!c},{URLSearchParams:P}),!c&&"function"==typeof f){var Q=function(t){if(I(t)){var i,n=t.body;if("URLSearchParams"===m(n))return(i=t.headers?new f(t.headers):new f).has("content-type")||i.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),G(t,{body:y(0,String(n)),headers:y(0,i)})}return t};if("function"==typeof W&&l({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return W(t,arguments.length>1?Q(arguments[1]):{})}}),"function"==typeof C){var j=function(t){return Z(this,j,"Request"),new C(t,arguments.length>1?Q(arguments[1]):{})};R.constructor=j,j.prototype=R,l({global:!0,forced:!0},{Request:j})}}t.exports={URLSearchParams:P,getState:Y}},function(t,n){t.exports=i},function(t,i,n){"use strict";var l=n(0),e=n(4),c=n(11),o=n(5),d=n(9),r=n(107),a=n(2),u=n(16),Z=n(51),s=n(8),b=n(59),m=n(1),h=n(13),I=n(29),p=n(47),G=n(15),y=n(38),g=n(26),X=n(60),V=n(49),W=n(115),C=n(113),R=n(24),f=n(14),S=n(82),v=n(18),Y=n(25),K=n(68),J=n(84),N=n(70),L=n(69),U=n(7),H=n(148),x=n(21),T=n(34),k=n(17),F=n(23).forEach,B=J("hidden"),z=U("toPrimitive"),w=k.set,A=k.getterFor("Symbol"),P=Object.prototype,M=e.Symbol,Q=c("JSON","stringify"),j=R.f,E=f.f,D=W.f,O=S.f,q=K("symbols"),_=K("op-symbols"),$=K("string-to-symbol-registry"),tt=K("symbol-to-string-registry"),it=K("wks"),nt=e.QObject,lt=!nt||!nt.prototype||!nt.prototype.findChild,et=d&&a((function(){return 7!=g(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,i,n){var l=j(P,i);l&&delete P[i],E(t,i,n),l&&t!==P&&E(P,i,l)}:E,ct=function(t,i){var n=q[t]=g(M.prototype);return w(n,{type:"Symbol",tag:t,description:i}),d||(n.description=i),n},ot=function(t,i,n){t===P&&ot(_,i,n),m(t);var l=p(i);return m(n),u(q,l)?(n.enumerable?(u(t,B)&&t[B][l]&&(t[B][l]=!1),n=g(n,{enumerable:y(0,!1)})):(u(t,B)||E(t,B,y(1,{})),t[B][l]=!0),et(t,l,n)):E(t,l,n)},dt=function(t,i){m(t);var n=I(i),l=X(n).concat(Zt(n));return F(l,(function(i){d&&!rt.call(n,i)||ot(t,i,n[i])})),t},rt=function(t){var i=p(t),n=O.call(this,i);return!(this===P&&u(q,i)&&!u(_,i))&&(!(n||!u(this,i)||!u(q,i)||u(this,B)&&this[B][i])||n)},at=function(t,i){var n=I(t),l=p(i);if(n!==P||!u(q,l)||u(_,l)){var e=j(n,l);return!e||!u(q,l)||u(n,B)&&n[B][l]||(e.enumerable=!0),e}},ut=function(t){var i=D(I(t)),n=[];return F(i,(function(t){u(q,t)||u(N,t)||n.push(t)})),n},Zt=function(t){var i=t===P,n=D(i?_:I(t)),l=[];return F(n,(function(t){!u(q,t)||i&&!u(P,t)||l.push(q[t])})),l};(r||(Y((M=function(){if(this instanceof M)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?G(arguments[0]):void 0,i=L(t),n=function(t){this===P&&n.call(_,t),u(this,B)&&u(this[B],i)&&(this[B][i]=!1),et(this,i,y(1,t))};return d&<&&et(P,i,{configurable:!0,set:n}),ct(i,t)}).prototype,"toString",(function(){return A(this).tag})),Y(M,"withoutSetter",(function(t){return ct(L(t),t)})),S.f=rt,f.f=ot,R.f=at,V.f=W.f=ut,C.f=Zt,H.f=function(t){return ct(U(t),t)},d&&(E(M.prototype,"description",{configurable:!0,get:function(){return A(this).description}}),o||Y(P,"propertyIsEnumerable",rt,{unsafe:!0}))),l({global:!0,wrap:!0,forced:!r,sham:!r},{Symbol:M}),F(X(it),(function(t){x(t)})),l({target:"Symbol",stat:!0,forced:!r},{for:function(t){var i=G(t);if(u($,i))return $[i];var n=M(i);return $[i]=n,tt[n]=i,n},keyFor:function(t){if(!b(t))throw TypeError(t+" is not a symbol");if(u(tt,t))return tt[t]},useSetter:function(){lt=!0},useSimple:function(){lt=!1}}),l({target:"Object",stat:!0,forced:!r,sham:!d},{create:function(t,i){return void 0===i?g(t):dt(g(t),i)},defineProperty:ot,defineProperties:dt,getOwnPropertyDescriptor:at}),l({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:ut,getOwnPropertySymbols:Zt}),l({target:"Object",stat:!0,forced:a((function(){C.f(1)}))},{getOwnPropertySymbols:function(t){return C.f(h(t))}}),Q)&&l({target:"JSON",stat:!0,forced:!r||a((function(){var t=M();return"[null]"!=Q([t])||"{}"!=Q({a:t})||"{}"!=Q(Object(t))}))},{stringify:function(t,i,n){for(var l,e=[t],c=1;arguments.length>c;)e.push(arguments[c++]);if(l=i,(s(i)||void 0!==t)&&!b(t))return Z(i)||(i=function(t,i){if("function"==typeof l&&(i=l.call(this,t,i)),!b(i))return i}),e[1]=i,Q.apply(null,e)}});M.prototype[z]||v(M.prototype,z,M.prototype.valueOf),T(M,"Symbol"),N[B]=!0},function(t,i,n){var l=n(8),e=n(51),c=n(7)("species");t.exports=function(t){var i;return e(t)&&("function"!=typeof(i=t.constructor)||i!==Array&&!e(i.prototype)?l(i)&&null===(i=i[c])&&(i=void 0):i=void 0),void 0===i?Array:i}},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(4),o=n(16),d=n(8),r=n(14).f,a=n(145),u=c.Symbol;if(e&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var Z={},s=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),i=this instanceof s?new u(t):void 0===t?u():u(t);return""===t&&(Z[i]=!0),i};a(s,u);var b=s.prototype=u.prototype;b.constructor=s;var m=b.toString,h="Symbol(test)"==String(u("test")),I=/^Symbol\((.*)\)[^)]+$/;r(b,"description",{configurable:!0,get:function(){var t=d(this)?this.valueOf():this,i=m.call(t);if(o(Z,t))return"";var n=h?i.slice(7,-1):i.replace(I,"$1");return""===n?void 0:n}}),l({global:!0,forced:!0},{Symbol:s})}},function(t,i,n){n(21)("asyncIterator")},function(t,i,n){n(21)("hasInstance")},function(t,i,n){n(21)("isConcatSpreadable")},function(t,i,n){n(21)("iterator")},function(t,i,n){n(21)("match")},function(t,i,n){n(21)("matchAll")},function(t,i,n){n(21)("replace")},function(t,i,n){n(21)("search")},function(t,i,n){n(21)("species")},function(t,i,n){n(21)("split")},function(t,i,n){n(21)("toPrimitive")},function(t,i,n){n(21)("toStringTag")},function(t,i,n){n(21)("unscopables")},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(51),o=n(8),d=n(13),r=n(10),a=n(53),u=n(73),Z=n(74),s=n(7),b=n(48),m=s("isConcatSpreadable"),h=b>=51||!e((function(){var t=[];return t[m]=!1,t.concat()[0]!==t})),I=Z("concat"),p=function(t){if(!o(t))return!1;var i=t[m];return void 0!==i?!!i:c(t)};l({target:"Array",proto:!0,forced:!h||!I},{concat:function(t){var i,n,l,e,c,o=d(this),Z=u(o,0),s=0;for(i=-1,l=arguments.length;i<l;i++)if(p(c=-1===i?o:arguments[i])){if(s+(e=r(c.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n<e;n++,s++)n in c&&a(Z,s,c[n])}else{if(s>=9007199254740991)throw TypeError("Maximum allowed index exceeded");a(Z,s++,c)}return Z.length=s,Z}})},function(t,i,n){var l=n(0),e=n(149),c=n(35);l({target:"Array",proto:!0},{copyWithin:e}),c("copyWithin")},function(t,i,n){"use strict";var l=n(0),e=n(23).every;l({target:"Array",proto:!0,forced:!n(40)("every")},{every:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){var l=n(0),e=n(116),c=n(35);l({target:"Array",proto:!0},{fill:e}),c("fill")},function(t,i,n){"use strict";var l=n(0),e=n(23).filter;l({target:"Array",proto:!0,forced:!n(74)("filter")},{filter:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(23).find,c=n(35),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{find:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("find")},function(t,i,n){"use strict";var l=n(0),e=n(23).findIndex,c=n(35),o=!0;"findIndex"in[]&&Array(1).findIndex((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{findIndex:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("findIndex")},function(t,i,n){"use strict";var l=n(0),e=n(150),c=n(13),o=n(10),d=n(30),r=n(73);l({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,i=c(this),n=o(i.length),l=r(i,0);return l.length=e(l,i,i,n,0,void 0===t?1:d(t)),l}})},function(t,i,n){"use strict";var l=n(0),e=n(150),c=n(13),o=n(10),d=n(3),r=n(73);l({target:"Array",proto:!0},{flatMap:function(t){var i,n=c(this),l=o(n.length);return d(t),(i=r(n,0)).length=e(i,n,n,l,0,1,t,arguments.length>1?arguments[1]:void 0),i}})},function(t,i,n){"use strict";var l=n(0),e=n(151);l({target:"Array",proto:!0,forced:[].forEach!=e},{forEach:e})},function(t,i,n){var l=n(0),e=n(152);l({target:"Array",stat:!0,forced:!n(86)((function(t){Array.from(t)}))},{from:e})},function(t,i,n){"use strict";var l=n(0),e=n(71).includes,c=n(35);l({target:"Array",proto:!0},{includes:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("includes")},function(t,i,n){"use strict";var l=n(0),e=n(71).indexOf,c=n(40),o=[].indexOf,d=!!o&&1/[1].indexOf(1,-0)<0,r=c("indexOf");l({target:"Array",proto:!0,forced:d||!r},{indexOf:function(t){return d?o.apply(this,arguments)||0:e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){n(0)({target:"Array",stat:!0},{isArray:n(51)})},function(t,i,n){"use strict";var l=n(0),e=n(67),c=n(29),o=n(40),d=[].join,r=e!=Object,a=o("join",",");l({target:"Array",proto:!0,forced:r||!a},{join:function(t){return d.call(c(this),void 0===t?",":t)}})},function(t,i,n){var l=n(0),e=n(154);l({target:"Array",proto:!0,forced:e!==[].lastIndexOf},{lastIndexOf:e})},function(t,i,n){"use strict";var l=n(0),e=n(23).map;l({target:"Array",proto:!0,forced:!n(74)("map")},{map:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(53);l({target:"Array",stat:!0,forced:e((function(){function t(){}return!(Array.of.call(t)instanceof t)}))},{of:function(){for(var t=0,i=arguments.length,n=new("function"==typeof this?this:Array)(i);i>t;)c(n,t,arguments[t++]);return n.length=i,n}})},function(t,i,n){"use strict";var l=n(0),e=n(88).left,c=n(40),o=n(48),d=n(63);l({target:"Array",proto:!0,forced:!c("reduce")||!d&&o>79&&o<83},{reduce:function(t){return e(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(88).right,c=n(40),o=n(48),d=n(63);l({target:"Array",proto:!0,forced:!c("reduceRight")||!d&&o>79&&o<83},{reduceRight:function(t){return e(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(51),c=[].reverse,o=[1,2];l({target:"Array",proto:!0,forced:String(o)===String(o.reverse())},{reverse:function(){return e(this)&&(this.length=this.length),c.call(this)}})},function(t,i,n){"use strict";var l=n(0),e=n(8),c=n(51),o=n(50),d=n(10),r=n(29),a=n(53),u=n(7),Z=n(74)("slice"),s=u("species"),b=[].slice,m=Math.max;l({target:"Array",proto:!0,forced:!Z},{slice:function(t,i){var n,l,u,Z=r(this),h=d(Z.length),I=o(t,h),p=o(void 0===i?h:i,h);if(c(Z)&&("function"!=typeof(n=Z.constructor)||n!==Array&&!c(n.prototype)?e(n)&&null===(n=n[s])&&(n=void 0):n=void 0,n===Array||void 0===n))return b.call(Z,I,p);for(l=new(void 0===n?Array:n)(m(p-I,0)),u=0;I<p;I++,u++)I in Z&&a(l,u,Z[I]);return l.length=u,l}})},function(t,i,n){"use strict";var l=n(0),e=n(23).some;l({target:"Array",proto:!0,forced:!n(40)("some")},{some:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(13),o=n(10),d=n(15),r=n(2),a=n(155),u=n(40),Z=n(156),s=n(157),b=n(48),m=n(123),h=[],I=h.sort,p=r((function(){h.sort(void 0)})),G=r((function(){h.sort(null)})),y=u("sort"),g=!r((function(){if(b)return b<70;if(!(Z&&Z>3)){if(s)return!0;if(m)return m<603;var t,i,n,l,e="";for(t=65;t<76;t++){switch(i=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(l=0;l<47;l++)h.push({k:i+l,v:n})}for(h.sort((function(t,i){return i.v-t.v})),l=0;l<h.length;l++)i=h[l].k.charAt(0),e.charAt(e.length-1)!==i&&(e+=i);return"DGBEFHACIJK"!==e}}));l({target:"Array",proto:!0,forced:p||!G||!y||!g},{sort:function(t){void 0!==t&&e(t);var i=c(this);if(g)return void 0===t?I.call(i):I.call(i,t);var n,l,r=[],u=o(i.length);for(l=0;l<u;l++)l in i&&r.push(i[l]);for(n=(r=a(r,function(t){return function(i,n){return void 0===n?-1:void 0===i?1:void 0!==t?+t(i,n)||0:d(i)>d(n)?1:-1}}(t))).length,l=0;l<n;)i[l]=r[l++];for(;l<u;)delete i[l++];return i}})},function(t,i,n){n(54)("Array")},function(t,i,n){"use strict";var l=n(0),e=n(50),c=n(30),o=n(10),d=n(13),r=n(73),a=n(53),u=n(74)("splice"),Z=Math.max,s=Math.min;l({target:"Array",proto:!0,forced:!u},{splice:function(t,i){var n,l,u,b,m,h,I=d(this),p=o(I.length),G=e(t,p),y=arguments.length;if(0===y?n=l=0:1===y?(n=0,l=p-G):(n=y-2,l=s(Z(c(i),0),p-G)),p+n-l>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(u=r(I,l),b=0;b<l;b++)(m=G+b)in I&&a(u,b,I[m]);if(u.length=l,n<l){for(b=G;b<p-l;b++)h=b+n,(m=b+l)in I?I[h]=I[m]:delete I[h];for(b=p;b>p-l+n;b--)delete I[b-1]}else if(n>l)for(b=p-l;b>G;b--)h=b+n-1,(m=b+l-1)in I?I[h]=I[m]:delete I[h];for(b=0;b<n;b++)I[b+G]=arguments[b+2];return I.length=p-l+n,u}})},function(t,i,n){n(35)("flat")},function(t,i,n){n(35)("flatMap")},function(t,i,n){"use strict";var l=n(0),e=n(4),c=n(89),o=n(54),d=c.ArrayBuffer;l({global:!0,forced:e.ArrayBuffer!==d},{ArrayBuffer:d}),o("ArrayBuffer")},function(t,i){var n=Math.abs,l=Math.pow,e=Math.floor,c=Math.log,o=Math.LN2;t.exports={pack:function(t,i,d){var r,a,u,Z=new Array(d),s=8*d-i-1,b=(1<<s)-1,m=b>>1,h=23===i?l(2,-24)-l(2,-77):0,I=t<0||0===t&&1/t<0?1:0,p=0;for((t=n(t))!=t||t===1/0?(a=t!=t?1:0,r=b):(r=e(c(t)/o),t*(u=l(2,-r))<1&&(r--,u*=2),(t+=r+m>=1?h/u:h*l(2,1-m))*u>=2&&(r++,u/=2),r+m>=b?(a=0,r=b):r+m>=1?(a=(t*u-1)*l(2,i),r+=m):(a=t*l(2,m-1)*l(2,i),r=0));i>=8;Z[p++]=255&a,a/=256,i-=8);for(r=r<<i|a,s+=i;s>0;Z[p++]=255&r,r/=256,s-=8);return Z[--p]|=128*I,Z},unpack:function(t,i){var n,e=t.length,c=8*e-i-1,o=(1<<c)-1,d=o>>1,r=c-7,a=e-1,u=t[a--],Z=127&u;for(u>>=7;r>0;Z=256*Z+t[a],a--,r-=8);for(n=Z&(1<<-r)-1,Z>>=-r,r+=i;r>0;n=256*n+t[a],a--,r-=8);if(0===Z)Z=1-d;else{if(Z===o)return n?NaN:u?-1/0:1/0;n+=l(2,i),Z-=d}return(u?-1:1)*n*l(2,Z-i)}}},function(t,i,n){var l=n(0),e=n(12);l({target:"ArrayBuffer",stat:!0,forced:!e.NATIVE_ARRAY_BUFFER_VIEWS},{isView:e.isView})},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(89),o=n(1),d=n(50),r=n(10),a=n(28),u=c.ArrayBuffer,Z=c.DataView,s=u.prototype.slice;l({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:e((function(){return!new u(2).slice(1,void 0).byteLength}))},{slice:function(t,i){if(void 0!==s&&void 0===i)return s.call(o(this),t);for(var n=o(this).byteLength,l=d(t,n),e=d(void 0===i?n:i,n),c=new(a(this,u))(r(e-l)),b=new Z(this),m=new Z(c),h=0;l<e;)m.setUint8(h++,b.getUint8(l++));return c}})},function(t,i,n){var l=n(0),e=n(89);l({global:!0,forced:!n(124)},{DataView:e.DataView})},function(t,i,n){n(0)({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},function(t,i,n){var l=n(0),e=n(247);l({target:"Date",proto:!0,forced:Date.prototype.toISOString!==e},{toISOString:e})},function(t,i,n){"use strict";var l=n(2),e=n(125).start,c=Math.abs,o=Date.prototype,d=o.getTime,r=o.toISOString;t.exports=l((function(){return"0385-07-25T07:06:39.999Z"!=r.call(new Date(-50000000000001))}))||!l((function(){r.call(new Date(NaN))}))?function(){if(!isFinite(d.call(this)))throw RangeError("Invalid time value");var t=this.getUTCFullYear(),i=this.getUTCMilliseconds(),n=t<0?"-":t>9999?"+":"";return n+e(c(t),n?6:4,0)+"-"+e(this.getUTCMonth()+1,2,0)+"-"+e(this.getUTCDate(),2,0)+"T"+e(this.getUTCHours(),2,0)+":"+e(this.getUTCMinutes(),2,0)+":"+e(this.getUTCSeconds(),2,0)+"."+e(i,3,0)+"Z"}:r},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(13),o=n(106);l({target:"Date",proto:!0,forced:e((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(t){var i=c(this),n=o(i,"number");return"number"!=typeof n||isFinite(n)?i.toISOString():null}})},function(t,i,n){var l=n(18),e=n(250),c=n(7)("toPrimitive"),o=Date.prototype;c in o||l(o,c,e)},function(t,i,n){"use strict";var l=n(1),e=n(142);t.exports=function(t){if(l(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw TypeError("Incorrect hint");return e(this,t)}},function(t,i,n){var l=n(25),e=Date.prototype,c=e.toString,o=e.getTime;"Invalid Date"!=String(new Date(NaN))&&l(e,"toString",(function(){var t=o.call(this);return t==t?c.call(this):"Invalid Date"}))},function(t,i,n){n(0)({target:"Function",proto:!0},{bind:n(159)})},function(t,i,n){"use strict";var l=n(8),e=n(14),c=n(27),o=n(7)("hasInstance"),d=Function.prototype;o in d||e.f(d,o,{value:function(t){if("function"!=typeof this||!l(t))return!1;if(!l(this.prototype))return t instanceof this;for(;t=c(t);)if(this.prototype===t)return!0;return!1}})},function(t,i,n){var l=n(9),e=n(14).f,c=Function.prototype,o=c.toString,d=/^\s*function ([^ (]*)/;l&&!("name"in c)&&e(c,"name",{configurable:!0,get:function(){try{return o.call(this).match(d)[1]}catch(t){return""}}})},function(t,i,n){var l=n(0),e=n(11),c=n(2),o=e("JSON","stringify"),d=/[\uD800-\uDFFF]/g,r=/^[\uD800-\uDBFF]$/,a=/^[\uDC00-\uDFFF]$/,u=function(t,i,n){var l=n.charAt(i-1),e=n.charAt(i+1);return r.test(t)&&!a.test(e)||a.test(t)&&!r.test(l)?"\\u"+t.charCodeAt(0).toString(16):t},Z=c((function(){return'"\\udf06\\ud834"'!==o("\udf06\ud834")||'"\\udead"'!==o("\udead")}));o&&l({target:"JSON",stat:!0,forced:Z},{stringify:function(t,i,n){var l=o.apply(null,arguments);return"string"==typeof l?l.replace(d,u):l}})},function(t,i,n){var l=n(4);n(34)(l.JSON,"JSON",!0)},function(t,i,n){var l=n(0),e=n(162),c=Math.acosh,o=Math.log,d=Math.sqrt,r=Math.LN2;l({target:"Math",stat:!0,forced:!c||710!=Math.floor(c(Number.MAX_VALUE))||c(1/0)!=1/0},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?o(t)+r:e(t-1+d(t-1)*d(t+1))}})},function(t,i,n){var l=n(0),e=Math.asinh,c=Math.log,o=Math.sqrt;l({target:"Math",stat:!0,forced:!(e&&1/e(0)>0)},{asinh:function t(i){return isFinite(i=+i)&&0!=i?i<0?-t(-i):c(i+o(i*i+1)):i}})},function(t,i,n){var l=n(0),e=Math.atanh,c=Math.log;l({target:"Math",stat:!0,forced:!(e&&1/e(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:c((1+t)/(1-t))/2}})},function(t,i,n){var l=n(0),e=n(128),c=Math.abs,o=Math.pow;l({target:"Math",stat:!0},{cbrt:function(t){return e(t=+t)*o(c(t),1/3)}})},function(t,i,n){var l=n(0),e=Math.floor,c=Math.log,o=Math.LOG2E;l({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-e(c(t+.5)*o):32}})},function(t,i,n){var l=n(0),e=n(92),c=Math.cosh,o=Math.abs,d=Math.E;l({target:"Math",stat:!0,forced:!c||c(710)===1/0},{cosh:function(t){var i=e(o(t)-1)+1;return(i+1/(i*d*d))*(d/2)}})},function(t,i,n){var l=n(0),e=n(92);l({target:"Math",stat:!0,forced:e!=Math.expm1},{expm1:e})},function(t,i,n){n(0)({target:"Math",stat:!0},{fround:n(163)})},function(t,i,n){var l=n(0),e=Math.hypot,c=Math.abs,o=Math.sqrt;l({target:"Math",stat:!0,forced:!!e&&e(1/0,NaN)!==1/0},{hypot:function(t,i){for(var n,l,e=0,d=0,r=arguments.length,a=0;d<r;)a<(n=c(arguments[d++]))?(e=e*(l=a/n)*l+1,a=n):e+=n>0?(l=n/a)*l:n;return a===1/0?1/0:a*o(e)}})},function(t,i,n){var l=n(0),e=n(2),c=Math.imul;l({target:"Math",stat:!0,forced:e((function(){return-5!=c(4294967295,5)||2!=c.length}))},{imul:function(t,i){var n=+t,l=+i,e=65535&n,c=65535&l;return 0|e*c+((65535&n>>>16)*c+e*(65535&l>>>16)<<16>>>0)}})},function(t,i,n){var l=n(0),e=Math.log,c=Math.LOG10E;l({target:"Math",stat:!0},{log10:function(t){return e(t)*c}})},function(t,i,n){n(0)({target:"Math",stat:!0},{log1p:n(162)})},function(t,i,n){var l=n(0),e=Math.log,c=Math.LN2;l({target:"Math",stat:!0},{log2:function(t){return e(t)/c}})},function(t,i,n){n(0)({target:"Math",stat:!0},{sign:n(128)})},function(t,i,n){var l=n(0),e=n(2),c=n(92),o=Math.abs,d=Math.exp,r=Math.E;l({target:"Math",stat:!0,forced:e((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){return o(t=+t)<1?(c(t)-c(-t))/2:(d(t-1)-d(-t-1))*(r/2)}})},function(t,i,n){var l=n(0),e=n(92),c=Math.exp;l({target:"Math",stat:!0},{tanh:function(t){var i=e(t=+t),n=e(-t);return i==1/0?1:n==1/0?-1:(i-n)/(c(t)+c(-t))}})},function(t,i,n){n(34)(Math,"Math",!0)},function(t,i,n){var l=n(0),e=Math.ceil,c=Math.floor;l({target:"Math",stat:!0},{trunc:function(t){return(t>0?c:e)(t)}})},function(t,i,n){"use strict";var l=n(9),e=n(4),c=n(72),o=n(25),d=n(16),r=n(46),a=n(91),u=n(59),Z=n(106),s=n(2),b=n(26),m=n(49).f,h=n(24).f,I=n(14).f,p=n(64).trim,G=e.Number,y=G.prototype,g="Number"==r(b(y)),X=function(t){if(u(t))throw TypeError("Cannot convert a Symbol value to a number");var i,n,l,e,c,o,d,r,a=Z(t,"number");if("string"==typeof a&&a.length>2)if(43===(i=(a=p(a)).charCodeAt(0))||45===i){if(88===(n=a.charCodeAt(2))||120===n)return NaN}else if(48===i){switch(a.charCodeAt(1)){case 66:case 98:l=2,e=49;break;case 79:case 111:l=8,e=55;break;default:return+a}for(o=(c=a.slice(2)).length,d=0;d<o;d++)if((r=c.charCodeAt(d))<48||r>e)return NaN;return parseInt(c,l)}return+a};if(c("Number",!G(" 0o1")||!G("0b1")||G("+0x1"))){for(var V,W=function(t){var i=arguments.length<1?0:t,n=this;return n instanceof W&&(g?s((function(){y.valueOf.call(n)})):"Number"!=r(n))?a(new G(X(i)),n,W):X(i)},C=l?m(G):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),R=0;C.length>R;R++)d(G,V=C[R])&&!d(W,V)&&I(W,V,h(G,V));W.prototype=y,y.constructor=W,o(e,"Number",W)}},function(t,i,n){n(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(t,i,n){n(0)({target:"Number",stat:!0},{isFinite:n(164)})},function(t,i,n){n(0)({target:"Number",stat:!0},{isInteger:n(129)})},function(t,i,n){n(0)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},function(t,i,n){var l=n(0),e=n(129),c=Math.abs;l({target:"Number",stat:!0},{isSafeInteger:function(t){return e(t)&&c(t)<=9007199254740991}})},function(t,i,n){n(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(t,i,n){n(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(t,i,n){var l=n(0),e=n(165);l({target:"Number",stat:!0,forced:Number.parseFloat!=e},{parseFloat:e})},function(t,i,n){var l=n(0),e=n(130);l({target:"Number",stat:!0,forced:Number.parseInt!=e},{parseInt:e})},function(t,i,n){"use strict";var l=n(0),e=n(30),c=n(166),o=n(126),d=n(2),r=1..toFixed,a=Math.floor,u=function(t,i,n){return 0===i?n:i%2==1?u(t,i-1,n*t):u(t*t,i/2,n)},Z=function(t,i,n){for(var l=-1,e=n;++l<6;)e+=i*t[l],t[l]=e%1e7,e=a(e/1e7)},s=function(t,i){for(var n=6,l=0;--n>=0;)l+=t[n],t[n]=a(l/i),l=l%i*1e7},b=function(t){for(var i=6,n="";--i>=0;)if(""!==n||0===i||0!==t[i]){var l=String(t[i]);n=""===n?l:n+o.call("0",7-l.length)+l}return n};l({target:"Number",proto:!0,forced:r&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!d((function(){r.call({})}))},{toFixed:function(t){var i,n,l,d,r=c(this),a=e(t),m=[0,0,0,0,0,0],h="",I="0";if(a<0||a>20)throw RangeError("Incorrect fraction digits");if(r!=r)return"NaN";if(r<=-1e21||r>=1e21)return String(r);if(r<0&&(h="-",r=-r),r>1e-21)if(n=(i=function(t){for(var i=0,n=t;n>=4096;)i+=12,n/=4096;for(;n>=2;)i+=1,n/=2;return i}(r*u(2,69,1))-69)<0?r*u(2,-i,1):r/u(2,i,1),n*=4503599627370496,(i=52-i)>0){for(Z(m,0,n),l=a;l>=7;)Z(m,1e7,0),l-=7;for(Z(m,u(10,l,1),0),l=i-1;l>=23;)s(m,1<<23),l-=23;s(m,1<<l),Z(m,1,1),s(m,2),I=b(m)}else Z(m,0,n),Z(m,1<<-i,0),I=b(m)+o.call("0",a);return I=a>0?h+((d=I.length)<=a?"0."+o.call("0",a-d)+I:I.slice(0,d-a)+"."+I.slice(d-a)):h+I}})},function(t,i,n){"use strict";var l=n(0),e=n(2),c=n(166),o=1..toPrecision;l({target:"Number",proto:!0,forced:e((function(){return"1"!==o.call(1,void 0)}))||!e((function(){o.call({})}))},{toPrecision:function(t){return void 0===t?o.call(c(this)):o.call(c(this),t)}})},function(t,i,n){var l=n(0),e=n(167);l({target:"Object",stat:!0,forced:Object.assign!==e},{assign:e})},function(t,i,n){n(0)({target:"Object",stat:!0,sham:!n(9)},{create:n(26)})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(94),o=n(13),d=n(3),r=n(14);e&&l({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,i){r.f(o(this),t,{get:d(i),enumerable:!0,configurable:!0})}})},function(t,i,n){var l=n(0),e=n(9);l({target:"Object",stat:!0,forced:!e,sham:!e},{defineProperties:n(114)})},function(t,i,n){var l=n(0),e=n(9);l({target:"Object",stat:!0,forced:!e,sham:!e},{defineProperty:n(14).f})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(94),o=n(13),d=n(3),r=n(14);e&&l({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,i){r.f(o(this),t,{set:d(i),enumerable:!0,configurable:!0})}})},function(t,i,n){var l=n(0),e=n(168).entries;l({target:"Object",stat:!0},{entries:function(t){return e(t)}})},function(t,i,n){var l=n(0),e=n(77),c=n(2),o=n(8),d=n(55).onFreeze,r=Object.freeze;l({target:"Object",stat:!0,forced:c((function(){r(1)})),sham:!e},{freeze:function(t){return r&&o(t)?r(d(t)):t}})},function(t,i,n){var l=n(0),e=n(6),c=n(53);l({target:"Object",stat:!0},{fromEntries:function(t){var i={};return e(t,(function(t,n){c(i,t,n)}),{AS_ENTRIES:!0}),i}})},function(t,i,n){var l=n(0),e=n(2),c=n(29),o=n(24).f,d=n(9),r=e((function(){o(1)}));l({target:"Object",stat:!0,forced:!d||r,sham:!d},{getOwnPropertyDescriptor:function(t,i){return o(c(t),i)}})},function(t,i,n){var l=n(0),e=n(9),c=n(111),o=n(29),d=n(24),r=n(53);l({target:"Object",stat:!0,sham:!e},{getOwnPropertyDescriptors:function(t){for(var i,n,l=o(t),e=d.f,a=c(l),u={},Z=0;a.length>Z;)void 0!==(n=e(l,i=a[Z++]))&&r(u,i,n);return u}})},function(t,i,n){var l=n(0),e=n(2),c=n(115).f;l({target:"Object",stat:!0,forced:e((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:c})},function(t,i,n){var l=n(0),e=n(2),c=n(13),o=n(27),d=n(122);l({target:"Object",stat:!0,forced:e((function(){o(1)})),sham:!d},{getPrototypeOf:function(t){return o(c(t))}})},function(t,i,n){n(0)({target:"Object",stat:!0},{is:n(169)})},function(t,i,n){var l=n(0),e=n(2),c=n(8),o=Object.isExtensible;l({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isExtensible:function(t){return!!c(t)&&(!o||o(t))}})},function(t,i,n){var l=n(0),e=n(2),c=n(8),o=Object.isFrozen;l({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isFrozen:function(t){return!c(t)||!!o&&o(t)}})},function(t,i,n){var l=n(0),e=n(2),c=n(8),o=Object.isSealed;l({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isSealed:function(t){return!c(t)||!!o&&o(t)}})},function(t,i,n){var l=n(0),e=n(13),c=n(60);l({target:"Object",stat:!0,forced:n(2)((function(){c(1)}))},{keys:function(t){return c(e(t))}})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(94),o=n(13),d=n(47),r=n(27),a=n(24).f;e&&l({target:"Object",proto:!0,forced:c},{__lookupGetter__:function(t){var i,n=o(this),l=d(t);do{if(i=a(n,l))return i.get}while(n=r(n))}})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(94),o=n(13),d=n(47),r=n(27),a=n(24).f;e&&l({target:"Object",proto:!0,forced:c},{__lookupSetter__:function(t){var i,n=o(this),l=d(t);do{if(i=a(n,l))return i.set}while(n=r(n))}})},function(t,i,n){var l=n(0),e=n(8),c=n(55).onFreeze,o=n(77),d=n(2),r=Object.preventExtensions;l({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{preventExtensions:function(t){return r&&e(t)?r(c(t)):t}})},function(t,i,n){var l=n(0),e=n(8),c=n(55).onFreeze,o=n(77),d=n(2),r=Object.seal;l({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{seal:function(t){return r&&e(t)?r(c(t)):t}})},function(t,i,n){n(0)({target:"Object",stat:!0},{setPrototypeOf:n(42)})},function(t,i,n){var l=n(119),e=n(25),c=n(311);l||e(Object.prototype,"toString",c,{unsafe:!0})},function(t,i,n){"use strict";var l=n(119),e=n(76);t.exports=l?{}.toString:function(){return"[object "+e(this)+"]"}},function(t,i,n){var l=n(0),e=n(168).values;l({target:"Object",stat:!0},{values:function(t){return e(t)}})},function(t,i,n){var l=n(0),e=n(165);l({global:!0,forced:parseFloat!=e},{parseFloat:e})},function(t,i,n){var l=n(0),e=n(130);l({global:!0,forced:parseInt!=e},{parseInt:e})},function(t,i,n){"use strict";var l,e,c,o,d=n(0),r=n(5),a=n(4),u=n(11),Z=n(170),s=n(25),b=n(36),m=n(42),h=n(34),I=n(54),p=n(8),G=n(3),y=n(33),g=n(110),X=n(6),V=n(86),W=n(28),C=n(131).set,R=n(172),f=n(173),S=n(174),v=n(78),Y=n(95),K=n(17),J=n(72),N=n(7),L=n(318),U=n(63),H=n(48),x=N("species"),T="Promise",k=K.get,F=K.set,B=K.getterFor(T),z=Z&&Z.prototype,w=Z,A=z,P=a.TypeError,M=a.document,Q=a.process,j=v.f,E=j,D=!!(M&&M.createEvent&&a.dispatchEvent),O="function"==typeof PromiseRejectionEvent,q=!1,_=J(T,(function(){var t=g(w),i=t!==String(w);if(!i&&66===H)return!0;if(r&&!A.finally)return!0;if(H>=51&&/native code/.test(t))return!1;var n=new w((function(t){t(1)})),l=function(t){t((function(){}),(function(){}))};return(n.constructor={})[x]=l,!(q=n.then((function(){}))instanceof l)||!i&&L&&!O})),$=_||!V((function(t){w.all(t).catch((function(){}))})),tt=function(t){var i;return!(!p(t)||"function"!=typeof(i=t.then))&&i},it=function(t,i){if(!t.notified){t.notified=!0;var n=t.reactions;R((function(){for(var l=t.value,e=1==t.state,c=0;n.length>c;){var o,d,r,a=n[c++],u=e?a.ok:a.fail,Z=a.resolve,s=a.reject,b=a.domain;try{u?(e||(2===t.rejection&&ct(t),t.rejection=1),!0===u?o=l:(b&&b.enter(),o=u(l),b&&(b.exit(),r=!0)),o===a.promise?s(P("Promise-chain cycle")):(d=tt(o))?d.call(o,Z,s):Z(o)):s(l)}catch(t){b&&!r&&b.exit(),s(t)}}t.reactions=[],t.notified=!1,i&&!t.rejection&<(t)}))}},nt=function(t,i,n){var l,e;D?((l=M.createEvent("Event")).promise=i,l.reason=n,l.initEvent(t,!1,!0),a.dispatchEvent(l)):l={promise:i,reason:n},!O&&(e=a["on"+t])?e(l):"unhandledrejection"===t&&S("Unhandled promise rejection",n)},lt=function(t){C.call(a,(function(){var i,n=t.facade,l=t.value;if(et(t)&&(i=Y((function(){U?Q.emit("unhandledRejection",l,n):nt("unhandledrejection",n,l)})),t.rejection=U||et(t)?2:1,i.error))throw i.value}))},et=function(t){return 1!==t.rejection&&!t.parent},ct=function(t){C.call(a,(function(){var i=t.facade;U?Q.emit("rejectionHandled",i):nt("rejectionhandled",i,t.value)}))},ot=function(t,i,n){return function(l){t(i,l,n)}},dt=function(t,i,n){t.done||(t.done=!0,n&&(t=n),t.value=i,t.state=2,it(t,!0))},rt=function(t,i,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===i)throw P("Promise can't be resolved itself");var l=tt(i);l?R((function(){var n={done:!1};try{l.call(i,ot(rt,n,t),ot(dt,n,t))}catch(i){dt(n,i,t)}})):(t.value=i,t.state=1,it(t,!1))}catch(i){dt({done:!1},i,t)}}};if(_&&(A=(w=function(t){y(this,w,T),G(t),l.call(this);var i=k(this);try{t(ot(rt,i),ot(dt,i))}catch(t){dt(i,t)}}).prototype,(l=function(t){F(this,{type:T,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=b(A,{then:function(t,i){var n=B(this),l=j(W(this,w));return l.ok="function"!=typeof t||t,l.fail="function"==typeof i&&i,l.domain=U?Q.domain:void 0,n.parent=!0,n.reactions.push(l),0!=n.state&&it(n,!1),l.promise},catch:function(t){return this.then(void 0,t)}}),e=function(){var t=new l,i=k(t);this.promise=t,this.resolve=ot(rt,i),this.reject=ot(dt,i)},v.f=j=function(t){return t===w||t===c?new e(t):E(t)},!r&&"function"==typeof Z&&z!==Object.prototype)){o=z.then,q||(s(z,"then",(function(t,i){var n=this;return new w((function(t,i){o.call(n,t,i)})).then(t,i)}),{unsafe:!0}),s(z,"catch",A.catch,{unsafe:!0}));try{delete z.constructor}catch(t){}m&&m(z,A)}d({global:!0,wrap:!0,forced:_},{Promise:w}),h(w,T,!1,!0),I(T),c=u(T),d({target:T,stat:!0,forced:_},{reject:function(t){var i=j(this);return i.reject.call(void 0,t),i.promise}}),d({target:T,stat:!0,forced:r||_},{resolve:function(t){return f(r&&this===c?w:this,t)}}),d({target:T,stat:!0,forced:$},{all:function(t){var i=this,n=j(i),l=n.resolve,e=n.reject,c=Y((function(){var n=G(i.resolve),c=[],o=0,d=1;X(t,(function(t){var r=o++,a=!1;c.push(void 0),d++,n.call(i,t).then((function(t){a||(a=!0,c[r]=t,--d||l(c))}),e)})),--d||l(c)}));return c.error&&e(c.value),n.promise},race:function(t){var i=this,n=j(i),l=n.reject,e=Y((function(){var e=G(i.resolve);X(t,(function(t){e.call(i,t).then(n.resolve,l)}))}));return e.error&&l(e.value),n.promise}})},function(t,i,n){var l=n(39),e=n(4);t.exports=/ipad|iphone|ipod/i.test(l)&&void 0!==e.Pebble},function(t,i,n){var l=n(39);t.exports=/web0s(?!.*chrome)/i.test(l)},function(t,i){t.exports="object"==typeof window},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(170),o=n(2),d=n(11),r=n(28),a=n(173),u=n(25);if(l({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){c.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var i=r(this,d("Promise")),n="function"==typeof t;return this.then(n?function(n){return a(i,t()).then((function(){return n}))}:t,n?function(n){return a(i,t()).then((function(){throw n}))}:t)}}),!e&&"function"==typeof c){var Z=d("Promise").prototype.finally;c.prototype.finally!==Z&&u(c.prototype,"finally",Z,{unsafe:!0})}},function(t,i,n){var l=n(0),e=n(11),c=n(3),o=n(1),d=n(2),r=e("Reflect","apply"),a=Function.apply;l({target:"Reflect",stat:!0,forced:!d((function(){r((function(){}))}))},{apply:function(t,i,n){return c(t),o(n),r?r(t,i,n):a.call(t,i,n)}})},function(t,i,n){var l=n(0),e=n(11),c=n(3),o=n(1),d=n(8),r=n(26),a=n(159),u=n(2),Z=e("Reflect","construct"),s=u((function(){function t(){}return!(Z((function(){}),[],t)instanceof t)})),b=!u((function(){Z((function(){}))})),m=s||b;l({target:"Reflect",stat:!0,forced:m,sham:m},{construct:function(t,i){c(t),o(i);var n=arguments.length<3?t:c(arguments[2]);if(b&&!s)return Z(t,i,n);if(t==n){switch(i.length){case 0:return new t;case 1:return new t(i[0]);case 2:return new t(i[0],i[1]);case 3:return new t(i[0],i[1],i[2]);case 4:return new t(i[0],i[1],i[2],i[3])}var l=[null];return l.push.apply(l,i),new(a.apply(t,l))}var e=n.prototype,u=r(d(e)?e:Object.prototype),m=Function.apply.call(t,u,i);return d(m)?m:u}})},function(t,i,n){var l=n(0),e=n(9),c=n(1),o=n(47),d=n(14);l({target:"Reflect",stat:!0,forced:n(2)((function(){Reflect.defineProperty(d.f({},1,{value:1}),1,{value:2})})),sham:!e},{defineProperty:function(t,i,n){c(t);var l=o(i);c(n);try{return d.f(t,l,n),!0}catch(t){return!1}}})},function(t,i,n){var l=n(0),e=n(1),c=n(24).f;l({target:"Reflect",stat:!0},{deleteProperty:function(t,i){var n=c(e(t),i);return!(n&&!n.configurable)&&delete t[i]}})},function(t,i,n){var l=n(0),e=n(8),c=n(1),o=n(176),d=n(24),r=n(27);l({target:"Reflect",stat:!0},{get:function t(i,n){var l,a,u=arguments.length<3?i:arguments[2];return c(i)===u?i[n]:(l=d.f(i,n))?o(l)?l.value:void 0===l.get?void 0:l.get.call(u):e(a=r(i))?t(a,n,u):void 0}})},function(t,i,n){var l=n(0),e=n(9),c=n(1),o=n(24);l({target:"Reflect",stat:!0,sham:!e},{getOwnPropertyDescriptor:function(t,i){return o.f(c(t),i)}})},function(t,i,n){var l=n(0),e=n(1),c=n(27);l({target:"Reflect",stat:!0,sham:!n(122)},{getPrototypeOf:function(t){return c(e(t))}})},function(t,i,n){n(0)({target:"Reflect",stat:!0},{has:function(t,i){return i in t}})},function(t,i,n){var l=n(0),e=n(1),c=Object.isExtensible;l({target:"Reflect",stat:!0},{isExtensible:function(t){return e(t),!c||c(t)}})},function(t,i,n){n(0)({target:"Reflect",stat:!0},{ownKeys:n(111)})},function(t,i,n){var l=n(0),e=n(11),c=n(1);l({target:"Reflect",stat:!0,sham:!n(77)},{preventExtensions:function(t){c(t);try{var i=e("Object","preventExtensions");return i&&i(t),!0}catch(t){return!1}}})},function(t,i,n){var l=n(0),e=n(1),c=n(8),o=n(176),d=n(2),r=n(14),a=n(24),u=n(27),Z=n(38);l({target:"Reflect",stat:!0,forced:d((function(){var t=function(){},i=r.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,i)}))},{set:function t(i,n,l){var d,s,b,m=arguments.length<4?i:arguments[3],h=a.f(e(i),n);if(!h){if(c(s=u(i)))return t(s,n,l,m);h=Z(0)}if(o(h)){if(!1===h.writable||!c(m))return!1;if(d=a.f(m,n)){if(d.get||d.set||!1===d.writable)return!1;d.value=l,r.f(m,n,d)}else r.f(m,n,Z(0,l))}else{if(void 0===(b=h.set))return!1;b.call(m,l)}return!0}})},function(t,i,n){var l=n(0),e=n(1),c=n(153),o=n(42);o&&l({target:"Reflect",stat:!0},{setPrototypeOf:function(t,i){e(t),c(i);try{return o(t,i),!0}catch(t){return!1}}})},function(t,i,n){var l=n(9),e=n(4),c=n(72),o=n(91),d=n(18),r=n(14).f,a=n(49).f,u=n(79),Z=n(15),s=n(65),b=n(96),m=n(25),h=n(2),I=n(16),p=n(17).enforce,G=n(54),y=n(7),g=n(177),X=n(178),V=y("match"),W=e.RegExp,C=W.prototype,R=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,f=/a/g,S=/a/g,v=new W(f)!==f,Y=b.UNSUPPORTED_Y,K=l&&(!v||Y||g||X||h((function(){return S[V]=!1,W(f)!=f||W(S)==S||"/a/i"!=W(f,"i")})));if(c("RegExp",K)){for(var J=function(t,i){var n,l,e,c,r,a,b=this instanceof J,m=u(t),h=void 0===i,G=[],y=t;if(!b&&m&&h&&t.constructor===J)return t;if((m||t instanceof J)&&(t=t.source,h&&(i="flags"in y?y.flags:s.call(y))),t=void 0===t?"":Z(t),i=void 0===i?"":Z(i),y=t,g&&"dotAll"in f&&(l=!!i&&i.indexOf("s")>-1)&&(i=i.replace(/s/g,"")),n=i,Y&&"sticky"in f&&(e=!!i&&i.indexOf("y")>-1)&&(i=i.replace(/y/g,"")),X&&(t=(c=function(t){for(var i,n=t.length,l=0,e="",c=[],o={},d=!1,r=!1,a=0,u="";l<=n;l++){if("\\"===(i=t.charAt(l)))i+=t.charAt(++l);else if("]"===i)d=!1;else if(!d)switch(!0){case"["===i:d=!0;break;case"("===i:R.test(t.slice(l+1))&&(l+=2,r=!0),e+=i,a++;continue;case">"===i&&r:if(""===u||I(o,u))throw new SyntaxError("Invalid capture group name");o[u]=!0,c.push([u,a]),r=!1,u="";continue}r?u+=i:e+=i}return[e,c]}(t))[0],G=c[1]),r=o(W(t,i),b?this:C,J),(l||e||G.length)&&(a=p(r),l&&(a.dotAll=!0,a.raw=J(function(t){for(var i,n=t.length,l=0,e="",c=!1;l<=n;l++)"\\"!==(i=t.charAt(l))?c||"."!==i?("["===i?c=!0:"]"===i&&(c=!1),e+=i):e+="[\\s\\S]":e+=i+t.charAt(++l);return e}(t),n)),e&&(a.sticky=!0),G.length&&(a.groups=G)),t!==y)try{d(r,"source",""===y?"(?:)":y)}catch(t){}return r},N=function(t){t in J||r(J,t,{configurable:!0,get:function(){return W[t]},set:function(i){W[t]=i}})},L=a(W),U=0;L.length>U;)N(L[U++]);C.constructor=J,J.prototype=C,m(e,"RegExp",J)}G("RegExp")},function(t,i,n){var l=n(9),e=n(14),c=n(65),o=n(2);l&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&e.f(RegExp.prototype,"flags",{configurable:!0,get:c})},function(t,i,n){var l=n(9),e=n(96).UNSUPPORTED_Y,c=n(14).f,o=n(17).get,d=RegExp.prototype;l&&e&&c(d,"sticky",{configurable:!0,get:function(){if(this!==d){if(this instanceof RegExp)return!!o(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}}})},function(t,i,n){"use strict";n(132);var l,e,c=n(0),o=n(8),d=(l=!1,(e=/[ac]/).exec=function(){return l=!0,/./.exec.apply(this,arguments)},!0===e.test("abc")&&l),r=/./.test;c({target:"RegExp",proto:!0,forced:!d},{test:function(t){if("function"!=typeof this.exec)return r.call(this,t);var i=this.exec(t);if(null!==i&&!o(i))throw new Error("RegExp exec method returned something other than an Object or null");return!!i}})},function(t,i,n){"use strict";var l=n(25),e=n(1),c=n(15),o=n(2),d=n(65),r=RegExp.prototype,a=r.toString,u=o((function(){return"/a/b"!=a.call({source:"a",flags:"b"})})),Z="toString"!=a.name;(u||Z)&&l(RegExp.prototype,"toString",(function(){var t=e(this),i=c(t.source),n=t.flags;return"/"+i+"/"+c(void 0===n&&t instanceof RegExp&&!("flags"in r)?d.call(t):n)}),{unsafe:!0})},function(t,i,n){"use strict";var l=n(0),e=n(66).codeAt;l({target:"String",proto:!0},{codePointAt:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l,e=n(0),c=n(24).f,o=n(10),d=n(15),r=n(133),a=n(22),u=n(134),Z=n(5),s="".endsWith,b=Math.min,m=u("endsWith");e({target:"String",proto:!0,forced:!!(Z||m||(l=c(String.prototype,"endsWith"),!l||l.writable))&&!m},{endsWith:function(t){var i=d(a(this));r(t);var n=arguments.length>1?arguments[1]:void 0,l=o(i.length),e=void 0===n?l:b(o(n),l),c=d(t);return s?s.call(i,c,e):i.slice(e-c.length,e)===c}})},function(t,i,n){var l=n(0),e=n(50),c=String.fromCharCode,o=String.fromCodePoint;l({target:"String",stat:!0,forced:!!o&&1!=o.length},{fromCodePoint:function(t){for(var i,n=[],l=arguments.length,o=0;l>o;){if(i=+arguments[o++],e(i,1114111)!==i)throw RangeError(i+" is not a valid code point");n.push(i<65536?c(i):c(55296+((i-=65536)>>10),i%1024+56320))}return n.join("")}})},function(t,i,n){"use strict";var l=n(0),e=n(133),c=n(22),o=n(15);l({target:"String",proto:!0,forced:!n(134)("includes")},{includes:function(t){return!!~o(c(this)).indexOf(o(e(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(98),e=n(1),c=n(10),o=n(15),d=n(22),r=n(99),a=n(100);l("match",(function(t,i,n){return[function(i){var n=d(this),l=null==i?void 0:i[t];return void 0!==l?l.call(i,n):new RegExp(i)[t](o(n))},function(t){var l=e(this),d=o(t),u=n(i,l,d);if(u.done)return u.value;if(!l.global)return a(l,d);var Z=l.unicode;l.lastIndex=0;for(var s,b=[],m=0;null!==(s=a(l,d));){var h=o(s[0]);b[m]=h,""===h&&(l.lastIndex=r(d,c(l.lastIndex),Z)),m++}return 0===m?null:b}]}))},function(t,i,n){"use strict";var l=n(0),e=n(125).end;l({target:"String",proto:!0,forced:n(182)},{padEnd:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){"use strict";var l=n(0),e=n(125).start;l({target:"String",proto:!0,forced:n(182)},{padStart:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,i,n){var l=n(0),e=n(29),c=n(10),o=n(15);l({target:"String",stat:!0},{raw:function(t){for(var i=e(t.raw),n=c(i.length),l=arguments.length,d=[],r=0;n>r;)d.push(o(i[r++])),r<l&&d.push(o(arguments[r]));return d.join("")}})},function(t,i,n){n(0)({target:"String",proto:!0},{repeat:n(126)})},function(t,i,n){"use strict";var l=n(98),e=n(2),c=n(1),o=n(30),d=n(10),r=n(15),a=n(22),u=n(99),Z=n(183),s=n(100),b=n(7)("replace"),m=Math.max,h=Math.min,I="$0"==="a".replace(/./,"$0"),p=!!/./[b]&&""===/./[b]("a","$0");l("replace",(function(t,i,n){var l=p?"$":"$0";return[function(t,n){var l=a(this),e=null==t?void 0:t[b];return void 0!==e?e.call(t,l,n):i.call(r(l),t,n)},function(t,e){var a=c(this),b=r(t);if("string"==typeof e&&-1===e.indexOf(l)&&-1===e.indexOf("$<")){var I=n(i,a,b,e);if(I.done)return I.value}var p="function"==typeof e;p||(e=r(e));var G=a.global;if(G){var y=a.unicode;a.lastIndex=0}for(var g=[];;){var X=s(a,b);if(null===X)break;if(g.push(X),!G)break;""===r(X[0])&&(a.lastIndex=u(b,d(a.lastIndex),y))}for(var V,W="",C=0,R=0;R<g.length;R++){X=g[R];for(var f=r(X[0]),S=m(h(o(X.index),b.length),0),v=[],Y=1;Y<X.length;Y++)v.push(void 0===(V=X[Y])?V:String(V));var K=X.groups;if(p){var J=[f].concat(v,S,b);void 0!==K&&J.push(K);var N=r(e.apply(void 0,J))}else N=Z(f,b,S,v,K,e);S>=C&&(W+=b.slice(C,S)+N,C=S+f.length)}return W+b.slice(C)}]}),!!e((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!I||p)},function(t,i,n){"use strict";var l=n(98),e=n(1),c=n(22),o=n(169),d=n(15),r=n(100);l("search",(function(t,i,n){return[function(i){var n=c(this),l=null==i?void 0:i[t];return void 0!==l?l.call(i,n):new RegExp(i)[t](d(n))},function(t){var l=e(this),c=d(t),a=n(i,l,c);if(a.done)return a.value;var u=l.lastIndex;o(u,0)||(l.lastIndex=0);var Z=r(l,c);return o(l.lastIndex,u)||(l.lastIndex=u),null===Z?-1:Z.index}]}))},function(t,i,n){"use strict";var l=n(98),e=n(79),c=n(1),o=n(22),d=n(28),r=n(99),a=n(10),u=n(15),Z=n(100),s=n(97),b=n(96),m=n(2),h=b.UNSUPPORTED_Y,I=[].push,p=Math.min;l("split",(function(t,i,n){var l;return l="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var l=u(o(this)),c=void 0===n?4294967295:n>>>0;if(0===c)return[];if(void 0===t)return[l];if(!e(t))return i.call(l,t,c);for(var d,r,a,Z=[],b=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),m=0,h=new RegExp(t.source,b+"g");(d=s.call(h,l))&&!((r=h.lastIndex)>m&&(Z.push(l.slice(m,d.index)),d.length>1&&d.index<l.length&&I.apply(Z,d.slice(1)),a=d[0].length,m=r,Z.length>=c));)h.lastIndex===d.index&&h.lastIndex++;return m===l.length?!a&&h.test("")||Z.push(""):Z.push(l.slice(m)),Z.length>c?Z.slice(0,c):Z}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:i.call(this,t,n)}:i,[function(i,n){var e=o(this),c=null==i?void 0:i[t];return void 0!==c?c.call(i,e,n):l.call(u(e),i,n)},function(t,e){var o=c(this),s=u(t),b=n(l,o,s,e,l!==i);if(b.done)return b.value;var m=d(o,RegExp),I=o.unicode,G=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(h?"g":"y"),y=new m(h?"^(?:"+o.source+")":o,G),g=void 0===e?4294967295:e>>>0;if(0===g)return[];if(0===s.length)return null===Z(y,s)?[s]:[];for(var X=0,V=0,W=[];V<s.length;){y.lastIndex=h?0:V;var C,R=Z(y,h?s.slice(V):s);if(null===R||(C=p(a(y.lastIndex+(h?V:0)),s.length))===X)V=r(s,V,I);else{if(W.push(s.slice(X,V)),W.length===g)return W;for(var f=1;f<=R.length-1;f++)if(W.push(R[f]),W.length===g)return W;V=X=C}}return W.push(s.slice(X)),W}]}),!!m((function(){var t=/(?:)/,i=t.exec;t.exec=function(){return i.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]})),h)},function(t,i,n){"use strict";var l,e=n(0),c=n(24).f,o=n(10),d=n(15),r=n(133),a=n(22),u=n(134),Z=n(5),s="".startsWith,b=Math.min,m=u("startsWith");e({target:"String",proto:!0,forced:!!(Z||m||(l=c(String.prototype,"startsWith"),!l||l.writable))&&!m},{startsWith:function(t){var i=d(a(this));r(t);var n=o(b(arguments.length>1?arguments[1]:void 0,i.length)),l=d(t);return s?s.call(i,l,n):i.slice(n,n+l.length)===l}})},function(t,i,n){"use strict";var l=n(0),e=n(64).trim;l({target:"String",proto:!0,forced:n(135)("trim")},{trim:function(){return e(this)}})},function(t,i,n){"use strict";var l=n(0),e=n(64).end,c=n(135)("trimEnd"),o=c?function(){return e(this)}:"".trimEnd;l({target:"String",proto:!0,forced:c},{trimEnd:o,trimRight:o})},function(t,i,n){"use strict";var l=n(0),e=n(64).start,c=n(135)("trimStart"),o=c?function(){return e(this)}:"".trimStart;l({target:"String",proto:!0,forced:c},{trimStart:o,trimLeft:o})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("anchor")},{anchor:function(t){return e(this,"a","name",t)}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("big")},{big:function(){return e(this,"big","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("blink")},{blink:function(){return e(this,"blink","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("bold")},{bold:function(){return e(this,"b","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("fixed")},{fixed:function(){return e(this,"tt","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("fontcolor")},{fontcolor:function(t){return e(this,"font","color",t)}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("fontsize")},{fontsize:function(t){return e(this,"font","size",t)}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("italics")},{italics:function(){return e(this,"i","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("link")},{link:function(t){return e(this,"a","href",t)}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("small")},{small:function(){return e(this,"small","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("strike")},{strike:function(){return e(this,"strike","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("sub")},{sub:function(){return e(this,"sub","","")}})},function(t,i,n){"use strict";var l=n(0),e=n(31);l({target:"String",proto:!0,forced:n(32)("sup")},{sup:function(){return e(this,"sup","","")}})},function(t,i,n){n(43)("Float32",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Float64",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Int8",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Int16",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Int32",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Uint8",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Uint8",(function(t){return function(i,n,l){return t(this,i,n,l)}}),!0)},function(t,i,n){n(43)("Uint16",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){n(43)("Uint32",(function(t){return function(i,n,l){return t(this,i,n,l)}}))},function(t,i,n){"use strict";var l=n(12),e=n(149),c=l.aTypedArray;(0,l.exportTypedArrayMethod)("copyWithin",(function(t,i){return e.call(c(this),t,i,arguments.length>2?arguments[2]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).every,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("every",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(116),c=l.aTypedArray;(0,l.exportTypedArrayMethod)("fill",(function(t){return e.apply(c(this),arguments)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).filter,c=n(380),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("filter",(function(t){var i=e(o(this),t,arguments.length>1?arguments[1]:void 0);return c(this,i)}))},function(t,i,n){var l=n(381),e=n(101);t.exports=function(t,i){return l(e(t),i)}},function(t,i){t.exports=function(t,i){for(var n=0,l=i.length,e=new t(l);l>n;)e[n]=i[n++];return e}},function(t,i,n){"use strict";var l=n(12),e=n(23).find,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("find",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).findIndex,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("findIndex",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).forEach,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("forEach",(function(t){e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(136);(0,n(12).exportTypedArrayStaticMethod)("from",n(185),l)},function(t,i,n){"use strict";var l=n(12),e=n(71).includes,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("includes",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(71).indexOf,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("indexOf",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(4),e=n(12),c=n(87),o=n(7)("iterator"),d=l.Uint8Array,r=c.values,a=c.keys,u=c.entries,Z=e.aTypedArray,s=e.exportTypedArrayMethod,b=d&&d.prototype[o],m=!!b&&("values"==b.name||null==b.name),h=function(){return r.call(Z(this))};s("entries",(function(){return u.call(Z(this))})),s("keys",(function(){return a.call(Z(this))})),s("values",h,!m),s(o,h,!m)},function(t,i,n){"use strict";var l=n(12),e=l.aTypedArray,c=l.exportTypedArrayMethod,o=[].join;c("join",(function(t){return o.apply(e(this),arguments)}))},function(t,i,n){"use strict";var l=n(12),e=n(154),c=l.aTypedArray;(0,l.exportTypedArrayMethod)("lastIndexOf",(function(t){return e.apply(c(this),arguments)}))},function(t,i,n){"use strict";var l=n(12),e=n(23).map,c=n(101),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("map",(function(t){return e(o(this),t,arguments.length>1?arguments[1]:void 0,(function(t,i){return new(c(t))(i)}))}))},function(t,i,n){"use strict";var l=n(12),e=n(136),c=l.aTypedArrayConstructor;(0,l.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,i=arguments.length,n=new(c(this))(i);i>t;)n[t]=arguments[t++];return n}),e)},function(t,i,n){"use strict";var l=n(12),e=n(88).left,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduce",(function(t){return e(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(88).right,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduceRight",(function(t){return e(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=l.aTypedArray,c=l.exportTypedArrayMethod,o=Math.floor;c("reverse",(function(){for(var t,i=e(this).length,n=o(i/2),l=0;l<n;)t=this[l],this[l++]=this[--i],this[i]=t;return this}))},function(t,i,n){"use strict";var l=n(12),e=n(10),c=n(184),o=n(13),d=n(2),r=l.aTypedArray;(0,l.exportTypedArrayMethod)("set",(function(t){r(this);var i=c(arguments.length>1?arguments[1]:void 0,1),n=this.length,l=o(t),d=e(l.length),a=0;if(d+i>n)throw RangeError("Wrong length");for(;a<d;)this[i+a]=l[a++]}),d((function(){new Int8Array(1).set({})})))},function(t,i,n){"use strict";var l=n(12),e=n(101),c=n(2),o=l.aTypedArray,d=l.exportTypedArrayMethod,r=[].slice;d("slice",(function(t,i){for(var n=r.call(o(this),t,i),l=e(this),c=0,d=n.length,a=new l(d);d>c;)a[c]=n[c++];return a}),c((function(){new Int8Array(1).slice()})))},function(t,i,n){"use strict";var l=n(12),e=n(23).some,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("some",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,i,n){"use strict";var l=n(12),e=n(4),c=n(2),o=n(3),d=n(10),r=n(155),a=n(156),u=n(157),Z=n(48),s=n(123),b=l.aTypedArray,m=l.exportTypedArrayMethod,h=e.Uint16Array,I=h&&h.prototype.sort,p=!!I&&!c((function(){var t=new h(2);t.sort(null),t.sort({})})),G=!!I&&!c((function(){if(Z)return Z<74;if(a)return a<67;if(u)return!0;if(s)return s<602;var t,i,n=new h(516),l=Array(516);for(t=0;t<516;t++)i=t%4,n[t]=515-t,l[t]=t-2*i+3;for(n.sort((function(t,i){return(t/4|0)-(i/4|0)})),t=0;t<516;t++)if(n[t]!==l[t])return!0}));m("sort",(function(t){if(void 0!==t&&o(t),G)return I.call(this,t);b(this);var i,n=d(this.length),l=Array(n);for(i=0;i<n;i++)l[i]=this[i];for(l=r(this,function(t){return function(i,n){return void 0!==t?+t(i,n)||0:n!=n?-1:i!=i?1:0===i&&0===n?1/i>0&&1/n<0?1:-1:i>n}}(t)),i=0;i<n;i++)this[i]=l[i];return this}),!G||p)},function(t,i,n){"use strict";var l=n(12),e=n(10),c=n(50),o=n(101),d=l.aTypedArray;(0,l.exportTypedArrayMethod)("subarray",(function(t,i){var n=d(this),l=n.length,r=c(t,l);return new(o(n))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,e((void 0===i?l:c(i,l))-r))}))},function(t,i,n){"use strict";var l=n(4),e=n(12),c=n(2),o=l.Int8Array,d=e.aTypedArray,r=e.exportTypedArrayMethod,a=[].toLocaleString,u=[].slice,Z=!!o&&c((function(){a.call(new o(1))}));r("toLocaleString",(function(){return a.apply(Z?u.call(d(this)):d(this),arguments)}),c((function(){return[1,2].toLocaleString()!=new o([1,2]).toLocaleString()}))||!c((function(){o.prototype.toLocaleString.call([1,2])})))},function(t,i,n){"use strict";var l=n(12).exportTypedArrayMethod,e=n(2),c=n(4).Uint8Array,o=c&&c.prototype||{},d=[].toString,r=[].join;e((function(){d.call({})}))&&(d=function(){return r.call(this)});var a=o.toString!=d;l("toString",d,a)},function(t,i,n){"use strict";n(90)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(186))},function(t,i,n){n(405)},function(t,i,n){"use strict";var l=n(0),e=n(27),c=n(42),o=n(26),d=n(18),r=n(38),a=n(6),u=n(15),Z=function(t,i){var n=this;if(!(n instanceof Z))return new Z(t,i);c&&(n=c(new Error(void 0),e(n))),void 0!==i&&d(n,"message",u(i));var l=[];return a(t,l.push,{that:l}),d(n,"errors",l),n};Z.prototype=o(Error.prototype,{constructor:r(5,Z),message:r(5,""),name:r(5,"AggregateError")}),l({global:!0},{AggregateError:Z})},function(t,i,n){var l=n(0),e=n(51),c=Object.isFrozen,o=function(t,i){if(!c||!e(t)||!c(t))return!1;for(var n,l=0,o=t.length;l<o;)if(!("string"==typeof(n=t[l++])||i&&void 0===n))return!1;return 0!==o};l({target:"Array",stat:!0},{isTemplateObject:function(t){if(!o(t,!0))return!1;var i=t.raw;return!(i.length!==t.length||!o(i,!1))}})},function(t,i,n){"use strict";var l=n(9),e=n(35),c=n(13),o=n(10),d=n(14).f;l&&!("lastIndex"in[])&&(d(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),i=o(t.length);return 0==i?0:i-1}}),e("lastIndex"))},function(t,i,n){"use strict";var l=n(9),e=n(35),c=n(13),o=n(10),d=n(14).f;l&&!("lastItem"in[])&&(d(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),i=o(t.length);return 0==i?void 0:t[i-1]},set:function(t){var i=c(this),n=o(i.length);return i[0==n?0:n-1]=t}}),e("lastItem"))},function(t,i,n){"use strict";var l=n(0),e=n(33),c=n(18),o=n(16),d=n(7),r=n(410),a=n(5),u=d("toStringTag"),Z=function(){e(this,Z)};Z.prototype=r,o(r,u)||c(r,u,"AsyncIterator"),o(r,"constructor")&&r.constructor!==Object||c(r,"constructor",Z),l({global:!0,forced:a},{AsyncIterator:Z})},function(t,i,n){var l,e,c=n(4),o=n(83),d=n(27),r=n(16),a=n(18),u=n(7),Z=n(5),s=u("asyncIterator"),b=c.AsyncIterator,m=o.AsyncIteratorPrototype;if(!Z)if(m)l=m;else if("function"==typeof b)l=b.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{e=d(d(d(Function("return async function*(){}()")()))),d(e)===Object.prototype&&(l=e)}catch(t){}l||(l={}),r(l,s)||a(l,s,(function(){return this})),t.exports=l},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(56)((function(t,i){var n=this,l=n.iterator;return t.resolve(e(n.next.apply(l,i))).then((function(t){return e(t).done?(n.done=!0,{done:!0,value:void 0}):{done:!1,value:[n.index++,t.value]}}))}));l({target:"AsyncIterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:e(this),index:0})}})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(80),o=n(56)((function(t,i){var n=this;return new t((function(l,c){var o=function(){try{t.resolve(e(n.next.apply(n.iterator,n.remaining?[]:i))).then((function(t){try{e(t).done?(n.done=!0,l({done:!0,value:void 0})):n.remaining?(n.remaining--,o()):l({done:!1,value:t.value})}catch(t){c(t)}}),c)}catch(t){c(t)}};o()}))}));l({target:"AsyncIterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(81).every;l({target:"AsyncIterator",proto:!0,real:!0},{every:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(56)((function(t,i){var n=this,l=n.filterer;return new t((function(e,o){var d=function(){try{t.resolve(c(n.next.apply(n.iterator,i))).then((function(i){try{if(c(i).done)n.done=!0,e({done:!0,value:void 0});else{var r=i.value;t.resolve(l(r)).then((function(t){t?e({done:!1,value:r}):d()}),o)}}catch(t){o(t)}}),o)}catch(t){o(t)}};d()}))}));l({target:"AsyncIterator",proto:!0,real:!0},{filter:function(t){return new o({iterator:c(this),filterer:e(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(81).find;l({target:"AsyncIterator",proto:!0,real:!0},{find:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(56),d=n(187),r=o((function(t){var i,n=this,l=n.mapper;return new t((function(o,r){var a=function(){try{t.resolve(c(n.next.call(n.iterator))).then((function(a){try{c(a).done?(n.done=!0,o({done:!0,value:void 0})):t.resolve(l(a.value)).then((function(t){try{return n.innerIterator=i=d(t),n.innerNext=e(i.next),u()}catch(t){r(t)}}),r)}catch(t){r(t)}}),r)}catch(t){r(t)}},u=function(){if(i=n.innerIterator)try{t.resolve(c(n.innerNext.call(i))).then((function(t){try{c(t).done?(n.innerIterator=n.innerNext=null,a()):o({done:!1,value:t.value})}catch(t){r(t)}}),r)}catch(t){r(t)}else a()};u()}))}));l({target:"AsyncIterator",proto:!0,real:!0},{flatMap:function(t){return new r({iterator:c(this),mapper:e(t),innerIterator:null,innerNext:null})}})},function(t,i,n){"use strict";var l=n(0),e=n(81).forEach;l({target:"AsyncIterator",proto:!0,real:!0},{forEach:function(t){return e(this,t)}})},function(t,i,n){var l=n(0),e=n(61),c=n(1),o=n(13),d=n(56),r=n(187),a=n(41),u=n(52),Z=n(102),s=n(7),b=n(188),m=s("asyncIterator"),h=e.AsyncIterator,I=d((function(t,i){return c(this.next.apply(this.iterator,i))}),!0);l({target:"AsyncIterator",stat:!0},{from:function(t){var i,n=o(t),l=Z(n[m]);return void 0!==l&&(i=r(n,l))instanceof h?i:void 0===i&&void 0!==(l=u(n))?new b(a(n,l)):new I({iterator:void 0!==i?i:n})}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(56)((function(t,i){var n=this,l=n.mapper;return t.resolve(c(n.next.apply(n.iterator,i))).then((function(i){return c(i).done?(n.done=!0,{done:!0,value:void 0}):t.resolve(l(i.value)).then((function(t){return{done:!1,value:t}}))}))}));l({target:"AsyncIterator",proto:!0,real:!0},{map:function(t){return new o({iterator:c(this),mapper:e(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(11)("Promise");l({target:"AsyncIterator",proto:!0,real:!0},{reduce:function(t){var i=c(this),n=e(i.next),l=arguments.length<2,d=l?void 0:arguments[1];return e(t),new o((function(e,r){var a=function(){try{o.resolve(c(n.call(i))).then((function(i){try{if(c(i).done)l?r(TypeError("Reduce of empty iterator with no initial value")):e(d);else{var n=i.value;l?(l=!1,d=n,a()):o.resolve(t(d,n)).then((function(t){d=t,a()}),r)}}catch(t){r(t)}}),r)}catch(t){r(t)}};a()}))}})},function(t,i,n){"use strict";var l=n(0),e=n(81).some;l({target:"AsyncIterator",proto:!0,real:!0},{some:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(80),o=n(56)((function(t,i){var n,l,e=this.iterator;return this.remaining--?this.next.apply(e,i):(l={done:!0,value:void 0},this.done=!0,void 0!==(n=e.return)?t.resolve(n.call(e)).then((function(){return l})):l)}));l({target:"AsyncIterator",proto:!0,real:!0},{take:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(81).toArray;l({target:"AsyncIterator",proto:!0,real:!0},{toArray:function(){return e(this)}})},function(t,i,n){var l=n(0),e=n(189),c=n(11),o=n(26),d=function(){var t=c("Object","freeze");return t?t(o(null)):o(null)};l({global:!0},{compositeKey:function(){return e.apply(Object,arguments).get("object",d)}})},function(t,i,n){var l=n(0),e=n(189),c=n(11);l({global:!0},{compositeSymbol:function(){return 1===arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):e.apply(null,arguments).get("symbol",c("Symbol"))}})},function(t,i,n){n(160)},function(t,i,n){"use strict";var l=n(0),e=n(4),c=n(33),o=n(18),d=n(2),r=n(16),a=n(7),u=n(121).IteratorPrototype,Z=n(5),s=a("iterator"),b=a("toStringTag"),m=e.Iterator,h=Z||"function"!=typeof m||m.prototype!==u||!d((function(){m({})})),I=function(){c(this,I)};Z&&o(u={},s,(function(){return this})),r(u,b)||o(u,b,"Iterator"),!h&&r(u,"constructor")&&u.constructor!==Object||o(u,"constructor",I),I.prototype=u,l({global:!0,forced:h},{Iterator:I})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(57)((function(t){var i=e(this.next.apply(this.iterator,t));if(!(this.done=!!i.done))return[this.index++,i.value]}));l({target:"Iterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:e(this),index:0})}})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(80),o=n(57)((function(t){for(var i,n=this.iterator,l=this.next;this.remaining;)if(this.remaining--,i=e(l.call(n)),this.done=!!i.done)return;if(i=e(l.apply(n,t)),!(this.done=!!i.done))return i.value}));l({target:"Iterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!0},{every:function(t){return o(this),c(t),!e(this,(function(i,n){if(!t(i))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(57),d=n(117),r=o((function(t){for(var i,n,l=this.iterator,e=this.filterer,o=this.next;;){if(i=c(o.apply(l,t)),this.done=!!i.done)return;if(n=i.value,d(l,e,n))return n}}));l({target:"Iterator",proto:!0,real:!0},{filter:function(t){return new r({iterator:c(this),filterer:e(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!0},{find:function(t){return o(this),c(t),e(this,(function(i,n){if(t(i))return n(i)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(52),d=n(57),r=n(85),a=d((function(){for(var t,i,n,l,d=this.iterator,a=this.mapper;;)try{if(l=this.innerIterator){if(!(t=c(this.innerNext.call(l))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=c(this.next.call(d)),this.done=!!t.done)return;if(i=a(t.value),void 0===(n=o(i)))throw TypeError(".flatMap callback should return an iterable object");this.innerIterator=l=c(n.call(i)),this.innerNext=e(l.next)}catch(t){r(d,"throw",t)}}));l({target:"Iterator",proto:!0,real:!0},{flatMap:function(t){return new a({iterator:c(this),mapper:e(t),innerIterator:null,innerNext:null})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(1);l({target:"Iterator",proto:!0,real:!0},{forEach:function(t){e(c(this),t,{IS_ITERATOR:!0})}})},function(t,i,n){var l=n(0),e=n(61),c=n(1),o=n(13),d=n(57),r=n(41),a=n(52),u=e.Iterator,Z=d((function(t){var i=c(this.next.apply(this.iterator,t));if(!(this.done=!!i.done))return i.value}),!0);l({target:"Iterator",stat:!0},{from:function(t){var i,n=o(t),l=a(n);if(null!=l){if((i=r(n,l))instanceof u)return i}else i=n;return new Z({iterator:i})}})},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(1),o=n(57),d=n(117),r=o((function(t){var i=this.iterator,n=c(this.next.apply(i,t));if(!(this.done=!!n.done))return d(i,this.mapper,n.value)}));l({target:"Iterator",proto:!0,real:!0},{map:function(t){return new r({iterator:c(this),mapper:e(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!0},{reduce:function(t){o(this),c(t);var i=arguments.length<2,n=i?void 0:arguments[1];if(e(this,(function(l){i?(i=!1,n=l):n=t(n,l)}),{IS_ITERATOR:!0}),i)throw TypeError("Reduce of empty iterator with no initial value");return n}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3),o=n(1);l({target:"Iterator",proto:!0,real:!0},{some:function(t){return o(this),c(t),e(this,(function(i,n){if(t(i))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(1),c=n(80),o=n(57),d=n(85),r=o((function(t){var i=this.iterator;if(!this.remaining--)return this.done=!0,d(i,"normal",void 0);var n=e(this.next.apply(i,t));return(this.done=!!n.done)?void 0:n.value}));l({target:"Iterator",proto:!0,real:!0},{take:function(t){return new r({iterator:e(this),remaining:c(t)})}})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(1),o=[].push;l({target:"Iterator",proto:!0,real:!0},{toArray:function(){var t=[];return e(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(103);l({target:"Map",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{every:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(n,(function(t,n,e){if(!l(n,t,i))return e()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(37),Z=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{filter:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Map"))),s=d(e.set);return Z(n,(function(t,n){l(n,t,i)&&s.call(e,t,n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{find:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n,e){if(l(n,t,i))return e(n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{findKey:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n,e){if(l(n,t,i))return e(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){n(0)({target:"Map",stat:!0},{from:n(104)})},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3);l({target:"Map",stat:!0},{groupBy:function(t,i){var n=new this;c(i);var l=c(n.has),o=c(n.get),d=c(n.set);return e(t,(function(t){var e=i(t);l.call(n,e)?o.call(n,e).push(t):d.call(n,e,[t])})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(37),d=n(449),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{includes:function(t){return r(o(c(this)),(function(i,n,l){if(d(n,t))return l()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i){t.exports=function(t,i){return t===i||t!=t&&i!=i}},function(t,i,n){"use strict";var l=n(0),e=n(6),c=n(3);l({target:"Map",stat:!0},{keyBy:function(t,i){var n=new this;c(i);var l=c(n.set);return e(t,(function(t){l.call(n,i(t),t)})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(37),d=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{keyOf:function(t){return d(o(c(this)),(function(i,n,l){if(n===t)return l(i)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(37),Z=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{mapKeys:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Map"))),s=d(e.set);return Z(n,(function(t,n){s.call(e,l(n,t,i),n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(37),Z=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{mapValues:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Map"))),s=d(e.set);return Z(n,(function(t,n){s.call(e,t,l(n,t,i))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{merge:function(t){for(var i=c(this),n=o(i.set),l=arguments.length,e=0;e<l;)d(arguments[e++],n,{that:i,AS_ENTRIES:!0});return i}})},function(t,i,n){n(0)({target:"Map",stat:!0},{of:n(105)})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{reduce:function(t){var i=c(this),n=d(i),l=arguments.length<2,e=l?void 0:arguments[1];if(o(t),r(n,(function(n,c){l?(l=!1,e=c):e=t(e,c,n,i)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),l)throw TypeError("Reduce of empty map with no initial value");return e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(37),r=n(6);l({target:"Map",proto:!0,real:!0,forced:e},{some:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n,e){if(l(n,t,i))return e()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3);l({target:"Map",proto:!0,real:!0,forced:e},{update:function(t,i){var n=c(this),l=arguments.length;o(i);var e=n.has(t);if(!e&&l<3)throw TypeError("Updating absent value");var d=e?n.get(t):o(l>2?arguments[2]:void 0)(t,n);return n.set(t,i(d,t,n)),n}})},function(t,i,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:n(5)},{updateOrInsert:n(138)})},function(t,i,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:n(5)},{upsert:n(138)})},function(t,i,n){var l=n(0),e=Math.min,c=Math.max;l({target:"Math",stat:!0},{clamp:function(t,i,n){return e(n,c(i,t))}})},function(t,i,n){n(0)({target:"Math",stat:!0},{DEG_PER_RAD:Math.PI/180})},function(t,i,n){var l=n(0),e=180/Math.PI;l({target:"Math",stat:!0},{degrees:function(t){return t*e}})},function(t,i,n){var l=n(0),e=n(190),c=n(163);l({target:"Math",stat:!0},{fscale:function(t,i,n,l,o){return c(e(t,i,n,l,o))}})},function(t,i,n){n(0)({target:"Math",stat:!0},{iaddh:function(t,i,n,l){var e=t>>>0,c=n>>>0;return(i>>>0)+(l>>>0)+((e&c|(e|c)&~(e+c>>>0))>>>31)|0}})},function(t,i,n){n(0)({target:"Math",stat:!0},{imulh:function(t,i){var n=+t,l=+i,e=65535&n,c=65535&l,o=n>>16,d=l>>16,r=(o*c>>>0)+(e*c>>>16);return o*d+(r>>16)+((e*d>>>0)+(65535&r)>>16)}})},function(t,i,n){n(0)({target:"Math",stat:!0},{isubh:function(t,i,n,l){var e=t>>>0,c=n>>>0;return(i>>>0)-(l>>>0)-((~e&c|~(e^c)&e-c>>>0)>>>31)|0}})},function(t,i,n){n(0)({target:"Math",stat:!0},{RAD_PER_DEG:180/Math.PI})},function(t,i,n){var l=n(0),e=Math.PI/180;l({target:"Math",stat:!0},{radians:function(t){return t*e}})},function(t,i,n){n(0)({target:"Math",stat:!0},{scale:n(190)})},function(t,i,n){var l=n(0),e=n(1),c=n(164),o=n(62),d=n(17),r=d.set,a=d.getterFor("Seeded Random Generator"),u=o((function(t){r(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=a(this);return{value:(1073741823&(t.seed=(1103515245*t.seed+12345)%2147483647))/1073741823,done:!1}}));l({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var i=e(t).seed;if(!c(i))throw TypeError('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new u(i)}})},function(t,i,n){n(0)({target:"Math",stat:!0},{signbit:function(t){return(t=+t)==t&&0==t?1/t==-1/0:t<0}})},function(t,i,n){n(0)({target:"Math",stat:!0},{umulh:function(t,i){var n=+t,l=+i,e=65535&n,c=65535&l,o=n>>>16,d=l>>>16,r=(o*c>>>0)+(e*c>>>16);return o*d+(r>>>16)+((e*d>>>0)+(65535&r)>>>16)}})},function(t,i,n){"use strict";var l=n(0),e=n(30),c=n(130),o=/^[\da-z]+$/;l({target:"Number",stat:!0},{fromString:function(t,i){var n,l,d=1;if("string"!=typeof t)throw TypeError("Invalid number representation");if(!t.length)throw SyntaxError("Invalid number representation");if("-"==t.charAt(0)&&(d=-1,!(t=t.slice(1)).length))throw SyntaxError("Invalid number representation");if((n=void 0===i?10:e(i))<2||n>36)throw RangeError("Invalid radix");if(!o.test(t)||(l=c(t,n)).toString(n)!==t)throw SyntaxError("Invalid number representation");return d*l}})},function(t,i,n){"use strict";var l=n(0),e=n(139);l({target:"Object",stat:!0},{iterateEntries:function(t){return new e(t,"entries")}})},function(t,i,n){"use strict";var l=n(0),e=n(139);l({target:"Object",stat:!0},{iterateKeys:function(t){return new e(t,"keys")}})},function(t,i,n){"use strict";var l=n(0),e=n(139);l({target:"Object",stat:!0},{iterateValues:function(t){return new e(t,"values")}})},function(t,i,n){"use strict";var l=n(0),e=n(9),c=n(54),o=n(3),d=n(1),r=n(8),a=n(33),u=n(14).f,Z=n(18),s=n(36),b=n(41),m=n(102),h=n(6),I=n(174),p=n(7),G=n(17),y=p("observable"),g=G.get,X=G.set,V=function(t){var i=t.cleanup;if(i){t.cleanup=void 0;try{i()}catch(t){I(t)}}},W=function(t){return void 0===t.observer},C=function(t){var i=t.facade;if(!e){i.closed=!0;var n=t.subscriptionObserver;n&&(n.closed=!0)}t.observer=void 0},R=function(t,i){var n,l=X(this,{cleanup:void 0,observer:d(t),subscriptionObserver:void 0});e||(this.closed=!1);try{(n=m(t.start))&&n.call(t,this)}catch(t){I(t)}if(!W(l)){var c=l.subscriptionObserver=new f(this);try{var r=i(c),a=r;null!=r&&(l.cleanup="function"==typeof r.unsubscribe?function(){a.unsubscribe()}:o(r))}catch(t){return void c.error(t)}W(l)&&V(l)}};R.prototype=s({},{unsubscribe:function(){var t=g(this);W(t)||(C(t),V(t))}}),e&&u(R.prototype,"closed",{configurable:!0,get:function(){return W(g(this))}});var f=function(t){X(this,{subscription:t}),e||(this.closed=!1)};f.prototype=s({},{next:function(t){var i=g(g(this).subscription);if(!W(i)){var n=i.observer;try{var l=m(n.next);l&&l.call(n,t)}catch(t){I(t)}}},error:function(t){var i=g(g(this).subscription);if(!W(i)){var n=i.observer;C(i);try{var l=m(n.error);l?l.call(n,t):I(t)}catch(t){I(t)}V(i)}},complete:function(){var t=g(g(this).subscription);if(!W(t)){var i=t.observer;C(t);try{var n=m(i.complete);n&&n.call(i)}catch(t){I(t)}V(t)}}}),e&&u(f.prototype,"closed",{configurable:!0,get:function(){return W(g(g(this).subscription))}});var S=function(t){a(this,S,"Observable"),X(this,{subscriber:o(t)})};s(S.prototype,{subscribe:function(t){var i=arguments.length;return new R("function"==typeof t?{next:t,error:i>1?arguments[1]:void 0,complete:i>2?arguments[2]:void 0}:r(t)?t:{},g(this).subscriber)}}),s(S,{from:function(t){var i="function"==typeof this?this:S,n=m(d(t)[y]);if(n){var l=d(n.call(t));return l.constructor===i?l:new i((function(t){return l.subscribe(t)}))}var e=b(t);return new i((function(t){h(e,(function(i,n){if(t.next(i),t.closed)return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))},of:function(){for(var t="function"==typeof this?this:S,i=arguments.length,n=new Array(i),l=0;l<i;)n[l]=arguments[l++];return new t((function(t){for(var l=0;l<i;l++)if(t.next(n[l]),t.closed)return;t.complete()}))}}),Z(S.prototype,y,(function(){return this})),l({global:!0},{Observable:S}),c("Observable")},function(t,i,n){n(175)},function(t,i,n){n(481)},function(t,i,n){"use strict";var l=n(0),e=n(3),c=n(11),o=n(78),d=n(95),r=n(6);l({target:"Promise",stat:!0},{any:function(t){var i=this,n=o.f(i),l=n.resolve,a=n.reject,u=d((function(){var n=e(i.resolve),o=[],d=0,u=1,Z=!1;r(t,(function(t){var e=d++,r=!1;o.push(void 0),u++,n.call(i,t).then((function(t){r||Z||(Z=!0,l(t))}),(function(t){r||Z||(r=!0,o[e]=t,--u||a(new(c("AggregateError"))(o,"No one promise resolved")))}))})),--u||a(new(c("AggregateError"))(o,"No one promise resolved"))}));return u.error&&a(u.value),n.promise}})},function(t,i,n){"use strict";var l=n(0),e=n(78),c=n(95);l({target:"Promise",stat:!0},{try:function(t){var i=e.f(this),n=c(t);return(n.error?i.reject:i.resolve)(n.value),i.promise}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.toKey,d=e.set;l({target:"Reflect",stat:!0},{defineMetadata:function(t,i,n){var l=arguments.length<4?void 0:o(arguments[3]);d(t,i,c(n),l)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.toKey,d=e.getMap,r=e.store;l({target:"Reflect",stat:!0},{deleteMetadata:function(t,i){var n=arguments.length<3?void 0:o(arguments[2]),l=d(c(i),n,!1);if(void 0===l||!l.delete(t))return!1;if(l.size)return!0;var e=r.get(i);return e.delete(n),!!e.size||r.delete(i)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=n(27),d=e.has,r=e.get,a=e.toKey,u=function(t,i,n){if(d(t,i,n))return r(t,i,n);var l=o(i);return null!==l?u(t,l,n):void 0};l({target:"Reflect",stat:!0},{getMetadata:function(t,i){var n=arguments.length<3?void 0:a(arguments[2]);return u(t,c(i),n)}})},function(t,i,n){var l=n(0),e=n(179),c=n(44),o=n(1),d=n(27),r=n(6),a=c.keys,u=c.toKey,Z=function(t,i){var n=a(t,i),l=d(t);if(null===l)return n;var c,o,u=Z(l,i);return u.length?n.length?(c=new e(n.concat(u)),r(c,(o=[]).push,{that:o}),o):u:n};l({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var i=arguments.length<2?void 0:u(arguments[1]);return Z(o(t),i)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.get,d=e.toKey;l({target:"Reflect",stat:!0},{getOwnMetadata:function(t,i){var n=arguments.length<3?void 0:d(arguments[2]);return o(t,c(i),n)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.keys,d=e.toKey;l({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var i=arguments.length<2?void 0:d(arguments[1]);return o(c(t),i)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=n(27),d=e.has,r=e.toKey,a=function(t,i,n){if(d(t,i,n))return!0;var l=o(i);return null!==l&&a(t,l,n)};l({target:"Reflect",stat:!0},{hasMetadata:function(t,i){var n=arguments.length<3?void 0:r(arguments[2]);return a(t,c(i),n)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.has,d=e.toKey;l({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,i){var n=arguments.length<3?void 0:d(arguments[2]);return o(t,c(i),n)}})},function(t,i,n){var l=n(0),e=n(44),c=n(1),o=e.toKey,d=e.set;l({target:"Reflect",stat:!0},{metadata:function(t,i){return function(n,l){d(t,i,c(n),o(l))}}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(191);l({target:"Set",proto:!0,real:!0,forced:e},{addAll:function(){return c.apply(this,arguments)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(103);l({target:"Set",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{difference:function(t){var i=o(this),n=new(r(i,c("Set")))(i),l=d(n.delete);return a(t,(function(t){l.call(n,t)})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{every:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(n,(function(t,n){if(!l(t,t,i))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(58),Z=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{filter:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Set"))),s=d(e.add);return Z(n,(function(t){l(t,t,i)&&s.call(e,t)}),{IS_ITERATOR:!0}),e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{find:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n){if(l(t,t,i))return n(t)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,i,n){n(0)({target:"Set",stat:!0},{from:n(104)})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{intersection:function(t){var i=o(this),n=new(r(i,c("Set"))),l=d(i.has),e=d(n.add);return a(t,(function(t){l.call(i,t)&&e.call(n,t)})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{isDisjointFrom:function(t){var i=c(this),n=o(i.has);return!d(t,(function(t,l){if(!0===n.call(i,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(41),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{isSubsetOf:function(t){var i=r(this),n=o(t),l=n.has;return"function"!=typeof l&&(n=new(c("Set"))(t),l=d(n.has)),!a(i,(function(t,i){if(!1===l.call(n,t))return i()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{isSupersetOf:function(t){var i=c(this),n=o(i.has);return!d(t,(function(t,l){if(!1===n.call(i,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(58),d=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{join:function(t){var i=c(this),n=o(i),l=void 0===t?",":String(t),e=[];return d(n,e.push,{that:e,IS_ITERATOR:!0}),e.join(l)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(19),a=n(28),u=n(58),Z=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{map:function(t){var i=o(this),n=u(i),l=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(i,c("Set"))),s=d(e.add);return Z(n,(function(t){s.call(e,l(t,t,i))}),{IS_ITERATOR:!0}),e}})},function(t,i,n){n(0)({target:"Set",stat:!0},{of:n(105)})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(3),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{reduce:function(t){var i=c(this),n=d(i),l=arguments.length<2,e=l?void 0:arguments[1];if(o(t),r(n,(function(n){l?(l=!1,e=n):e=t(e,n,n,i)}),{IS_ITERATOR:!0}),l)throw TypeError("Reduce of empty set with no initial value");return e}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(1),o=n(19),d=n(58),r=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{some:function(t){var i=c(this),n=d(i),l=o(t,arguments.length>1?arguments[1]:void 0,3);return r(n,(function(t,n){if(l(t,t,i))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{symmetricDifference:function(t){var i=o(this),n=new(r(i,c("Set")))(i),l=d(n.delete),e=d(n.add);return a(t,(function(t){l.call(n,t)||e.call(n,t)})),n}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(11),o=n(1),d=n(3),r=n(28),a=n(6);l({target:"Set",proto:!0,real:!0,forced:e},{union:function(t){var i=o(this),n=new(r(i,c("Set")))(i);return a(t,d(n.add),{that:n}),n}})},function(t,i,n){"use strict";var l=n(0),e=n(66).charAt;l({target:"String",proto:!0,forced:n(2)((function(){return"𠮷"!=="𠮷".at(0)}))},{at:function(t){return e(this,t)}})},function(t,i,n){"use strict";var l=n(0),e=n(62),c=n(22),o=n(15),d=n(17),r=n(66),a=r.codeAt,u=r.charAt,Z=d.set,s=d.getterFor("String Iterator"),b=e((function(t){Z(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,i=s(this),n=i.string,l=i.index;return l>=n.length?{value:void 0,done:!0}:(t=u(n,l),i.index+=t.length,{value:{codePoint:a(t,0),position:l},done:!1})}));l({target:"String",proto:!0},{codePoints:function(){return new b(o(c(this)))}})},function(t,i,n){n(181)},function(t,i,n){n(514)},function(t,i,n){"use strict";var l=n(0),e=n(22),c=n(79),o=n(15),d=n(65),r=n(183),a=n(7),u=n(5),Z=a("replace"),s=RegExp.prototype,b=Math.max,m=function(t,i,n){return n>t.length?-1:""===i?n:t.indexOf(i,n)};l({target:"String",proto:!0},{replaceAll:function(t,i){var n,l,a,h,I,p,G,y,g=e(this),X=0,V=0,W="";if(null!=t){if((n=c(t))&&!~o(e("flags"in s?t.flags:d.call(t))).indexOf("g"))throw TypeError("`.replaceAll` does not allow non-global regexes");if(void 0!==(l=t[Z]))return l.call(t,g,i);if(u&&n)return o(g).replace(t,i)}for(a=o(g),h=o(t),(I="function"==typeof i)||(i=o(i)),p=h.length,G=b(1,p),X=m(a,h,0);-1!==X;)y=I?o(i(h,X,a)):r(h,a,X,[],void 0,i),W+=a.slice(V,X)+y,V=X+p,X=m(a,h,X+G);return V<a.length&&(W+=a.slice(V)),W}})},function(t,i,n){n(21)("asyncDispose")},function(t,i,n){n(21)("dispose")},function(t,i,n){n(21)("observable")},function(t,i,n){n(21)("patternMatch")},function(t,i,n){n(21)("replaceAll")},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(103);l({target:"WeakMap",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,i,n){n(0)({target:"WeakMap",stat:!0},{from:n(104)})},function(t,i,n){n(0)({target:"WeakMap",stat:!0},{of:n(105)})},function(t,i,n){"use strict";n(0)({target:"WeakMap",proto:!0,real:!0,forced:n(5)},{upsert:n(138)})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(191);l({target:"WeakSet",proto:!0,real:!0,forced:e},{addAll:function(){return c.apply(this,arguments)}})},function(t,i,n){"use strict";var l=n(0),e=n(5),c=n(103);l({target:"WeakSet",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,i,n){n(0)({target:"WeakSet",stat:!0},{from:n(104)})},function(t,i,n){n(0)({target:"WeakSet",stat:!0},{of:n(105)})},function(t,i,n){var l=n(4),e=n(192),c=n(151),o=n(18);for(var d in e){var r=l[d],a=r&&r.prototype;if(a&&a.forEach!==c)try{o(a,"forEach",c)}catch(t){a.forEach=c}}},function(t,i,n){var l=n(4),e=n(192),c=n(87),o=n(18),d=n(7),r=d("iterator"),a=d("toStringTag"),u=c.values;for(var Z in e){var s=l[Z],b=s&&s.prototype;if(b){if(b[r]!==u)try{o(b,r,u)}catch(t){b[r]=u}if(b[a]||o(b,a,Z),e[Z])for(var m in c)if(b[m]!==c[m])try{o(b,m,c[m])}catch(t){b[m]=c[m]}}}},function(t,i,n){var l=n(0),e=n(4),c=n(131);l({global:!0,bind:!0,enumerable:!0,forced:!e.setImmediate||!e.clearImmediate},{setImmediate:c.set,clearImmediate:c.clear})},function(t,i,n){var l=n(0),e=n(4),c=n(172),o=n(63),d=e.process;l({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){var i=o&&d.domain;c(i?i.bind(t):t)}})},function(t,i,n){var l=n(0),e=n(4),c=n(39),o=[].slice,d=function(t){return function(i,n){var l=arguments.length>2,e=l?o.call(arguments,2):void 0;return t(l?function(){("function"==typeof i?i:Function(i)).apply(this,e)}:i,n)}};l({global:!0,bind:!0,forced:/MSIE .\./.test(c)},{setTimeout:d(e.setTimeout),setInterval:d(e.setInterval)})},function(t,i,n){"use strict";n(180);var l,e=n(0),c=n(9),o=n(193),d=n(4),r=n(114),a=n(25),u=n(33),Z=n(16),s=n(167),b=n(152),m=n(66).codeAt,h=n(534),I=n(15),p=n(34),G=n(194),y=n(17),g=d.URL,X=G.URLSearchParams,V=G.getState,W=y.set,C=y.getterFor("URL"),R=Math.floor,f=Math.pow,S=/[A-Za-z]/,v=/[\d+-.A-Za-z]/,Y=/\d/,K=/^0x/i,J=/^[0-7]+$/,N=/^\d+$/,L=/^[\dA-Fa-f]+$/,U=/[\0\t\n\r #%/:<>?@[\\\]^|]/,H=/[\0\t\n\r #/:<>?@[\\\]^|]/,x=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,T=/[\t\n\r]/g,k=function(t,i){var n,l,e;if("["==i.charAt(0)){if("]"!=i.charAt(i.length-1))return"Invalid host";if(!(n=B(i.slice(1,-1))))return"Invalid host";t.host=n}else if(E(t)){if(i=h(i),U.test(i))return"Invalid host";if(null===(n=F(i)))return"Invalid host";t.host=n}else{if(H.test(i))return"Invalid host";for(n="",l=b(i),e=0;e<l.length;e++)n+=Q(l[e],w);t.host=n}},F=function(t){var i,n,l,e,c,o,d,r=t.split(".");if(r.length&&""==r[r.length-1]&&r.pop(),(i=r.length)>4)return t;for(n=[],l=0;l<i;l++){if(""==(e=r[l]))return t;if(c=10,e.length>1&&"0"==e.charAt(0)&&(c=K.test(e)?16:8,e=e.slice(8==c?1:2)),""===e)o=0;else{if(!(10==c?N:8==c?J:L).test(e))return t;o=parseInt(e,c)}n.push(o)}for(l=0;l<i;l++)if(o=n[l],l==i-1){if(o>=f(256,5-i))return null}else if(o>255)return null;for(d=n.pop(),l=0;l<n.length;l++)d+=n[l]*f(256,3-l);return d},B=function(t){var i,n,l,e,c,o,d,r=[0,0,0,0,0,0,0,0],a=0,u=null,Z=0,s=function(){return t.charAt(Z)};if(":"==s()){if(":"!=t.charAt(1))return;Z+=2,u=++a}for(;s();){if(8==a)return;if(":"!=s()){for(i=n=0;n<4&&L.test(s());)i=16*i+parseInt(s(),16),Z++,n++;if("."==s()){if(0==n)return;if(Z-=n,a>6)return;for(l=0;s();){if(e=null,l>0){if(!("."==s()&&l<4))return;Z++}if(!Y.test(s()))return;for(;Y.test(s());){if(c=parseInt(s(),10),null===e)e=c;else{if(0==e)return;e=10*e+c}if(e>255)return;Z++}r[a]=256*r[a]+e,2!=++l&&4!=l||a++}if(4!=l)return;break}if(":"==s()){if(Z++,!s())return}else if(s())return;r[a++]=i}else{if(null!==u)return;Z++,u=++a}}if(null!==u)for(o=a-u,a=7;0!=a&&o>0;)d=r[a],r[a--]=r[u+o-1],r[u+--o]=d;else if(8!=a)return;return r},z=function(t){var i,n,l,e;if("number"==typeof t){for(i=[],n=0;n<4;n++)i.unshift(t%256),t=R(t/256);return i.join(".")}if("object"==typeof t){for(i="",l=function(t){for(var i=null,n=1,l=null,e=0,c=0;c<8;c++)0!==t[c]?(e>n&&(i=l,n=e),l=null,e=0):(null===l&&(l=c),++e);return e>n&&(i=l,n=e),i}(t),n=0;n<8;n++)e&&0===t[n]||(e&&(e=!1),l===n?(i+=n?":":"::",e=!0):(i+=t[n].toString(16),n<7&&(i+=":")));return"["+i+"]"}return t},w={},A=s({},w,{" ":1,'"':1,"<":1,">":1,"`":1}),P=s({},A,{"#":1,"?":1,"{":1,"}":1}),M=s({},P,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),Q=function(t,i){var n=m(t,0);return n>32&&n<127&&!Z(i,t)?t:encodeURIComponent(t)},j={ftp:21,file:null,http:80,https:443,ws:80,wss:443},E=function(t){return Z(j,t.scheme)},D=function(t){return""!=t.username||""!=t.password},O=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},q=function(t,i){var n;return 2==t.length&&S.test(t.charAt(0))&&(":"==(n=t.charAt(1))||!i&&"|"==n)},_=function(t){var i;return t.length>1&&q(t.slice(0,2))&&(2==t.length||"/"===(i=t.charAt(2))||"\\"===i||"?"===i||"#"===i)},$=function(t){var i=t.path,n=i.length;!n||"file"==t.scheme&&1==n&&q(i[0],!0)||i.pop()},tt=function(t){return"."===t||"%2e"===t.toLowerCase()},it={},nt={},lt={},et={},ct={},ot={},dt={},rt={},at={},ut={},Zt={},st={},bt={},mt={},ht={},It={},pt={},Gt={},yt={},gt={},Xt={},Vt=function(t,i,n,e){var c,o,d,r,a,u=n||it,s=0,m="",h=!1,I=!1,p=!1;for(n||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,i=i.replace(x,"")),i=i.replace(T,""),c=b(i);s<=c.length;){switch(o=c[s],u){case it:if(!o||!S.test(o)){if(n)return"Invalid scheme";u=lt;continue}m+=o.toLowerCase(),u=nt;break;case nt:if(o&&(v.test(o)||"+"==o||"-"==o||"."==o))m+=o.toLowerCase();else{if(":"!=o){if(n)return"Invalid scheme";m="",u=lt,s=0;continue}if(n&&(E(t)!=Z(j,m)||"file"==m&&(D(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=m,n)return void(E(t)&&j[t.scheme]==t.port&&(t.port=null));m="","file"==t.scheme?u=mt:E(t)&&e&&e.scheme==t.scheme?u=et:E(t)?u=rt:"/"==c[s+1]?(u=ct,s++):(t.cannotBeABaseURL=!0,t.path.push(""),u=yt)}break;case lt:if(!e||e.cannotBeABaseURL&&"#"!=o)return"Invalid scheme";if(e.cannotBeABaseURL&&"#"==o){t.scheme=e.scheme,t.path=e.path.slice(),t.query=e.query,t.fragment="",t.cannotBeABaseURL=!0,u=Xt;break}u="file"==e.scheme?mt:ot;continue;case et:if("/"!=o||"/"!=c[s+1]){u=ot;continue}u=at,s++;break;case ct:if("/"==o){u=ut;break}u=Gt;continue;case ot:if(t.scheme=e.scheme,o==l)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query;else if("/"==o||"\\"==o&&E(t))u=dt;else if("?"==o)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query="",u=gt;else{if("#"!=o){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.path.pop(),u=Gt;continue}t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query,t.fragment="",u=Xt}break;case dt:if(!E(t)||"/"!=o&&"\\"!=o){if("/"!=o){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,u=Gt;continue}u=ut}else u=at;break;case rt:if(u=at,"/"!=o||"/"!=m.charAt(s+1))continue;s++;break;case at:if("/"!=o&&"\\"!=o){u=ut;continue}break;case ut:if("@"==o){h&&(m="%40"+m),h=!0,d=b(m);for(var G=0;G<d.length;G++){var y=d[G];if(":"!=y||p){var g=Q(y,M);p?t.password+=g:t.username+=g}else p=!0}m=""}else if(o==l||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(h&&""==m)return"Invalid authority";s-=b(m).length+1,m="",u=Zt}else m+=o;break;case Zt:case st:if(n&&"file"==t.scheme){u=It;continue}if(":"!=o||I){if(o==l||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(E(t)&&""==m)return"Invalid host";if(n&&""==m&&(D(t)||null!==t.port))return;if(r=k(t,m))return r;if(m="",u=pt,n)return;continue}"["==o?I=!0:"]"==o&&(I=!1),m+=o}else{if(""==m)return"Invalid host";if(r=k(t,m))return r;if(m="",u=bt,n==st)return}break;case bt:if(!Y.test(o)){if(o==l||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)||n){if(""!=m){var X=parseInt(m,10);if(X>65535)return"Invalid port";t.port=E(t)&&X===j[t.scheme]?null:X,m=""}if(n)return;u=pt;continue}return"Invalid port"}m+=o;break;case mt:if(t.scheme="file","/"==o||"\\"==o)u=ht;else{if(!e||"file"!=e.scheme){u=Gt;continue}if(o==l)t.host=e.host,t.path=e.path.slice(),t.query=e.query;else if("?"==o)t.host=e.host,t.path=e.path.slice(),t.query="",u=gt;else{if("#"!=o){_(c.slice(s).join(""))||(t.host=e.host,t.path=e.path.slice(),$(t)),u=Gt;continue}t.host=e.host,t.path=e.path.slice(),t.query=e.query,t.fragment="",u=Xt}}break;case ht:if("/"==o||"\\"==o){u=It;break}e&&"file"==e.scheme&&!_(c.slice(s).join(""))&&(q(e.path[0],!0)?t.path.push(e.path[0]):t.host=e.host),u=Gt;continue;case It:if(o==l||"/"==o||"\\"==o||"?"==o||"#"==o){if(!n&&q(m))u=Gt;else if(""==m){if(t.host="",n)return;u=pt}else{if(r=k(t,m))return r;if("localhost"==t.host&&(t.host=""),n)return;m="",u=pt}continue}m+=o;break;case pt:if(E(t)){if(u=Gt,"/"!=o&&"\\"!=o)continue}else if(n||"?"!=o)if(n||"#"!=o){if(o!=l&&(u=Gt,"/"!=o))continue}else t.fragment="",u=Xt;else t.query="",u=gt;break;case Gt:if(o==l||"/"==o||"\\"==o&&E(t)||!n&&("?"==o||"#"==o)){if(".."===(a=(a=m).toLowerCase())||"%2e."===a||".%2e"===a||"%2e%2e"===a?($(t),"/"==o||"\\"==o&&E(t)||t.path.push("")):tt(m)?"/"==o||"\\"==o&&E(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&q(m)&&(t.host&&(t.host=""),m=m.charAt(0)+":"),t.path.push(m)),m="","file"==t.scheme&&(o==l||"?"==o||"#"==o))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==o?(t.query="",u=gt):"#"==o&&(t.fragment="",u=Xt)}else m+=Q(o,P);break;case yt:"?"==o?(t.query="",u=gt):"#"==o?(t.fragment="",u=Xt):o!=l&&(t.path[0]+=Q(o,w));break;case gt:n||"#"!=o?o!=l&&("'"==o&&E(t)?t.query+="%27":t.query+="#"==o?"%23":Q(o,w)):(t.fragment="",u=Xt);break;case Xt:o!=l&&(t.fragment+=Q(o,A))}s++}},Wt=function(t){var i,n,l=u(this,Wt,"URL"),e=arguments.length>1?arguments[1]:void 0,o=I(t),d=W(l,{type:"URL"});if(void 0!==e)if(e instanceof Wt)i=C(e);else if(n=Vt(i={},I(e)))throw TypeError(n);if(n=Vt(d,o,null,i))throw TypeError(n);var r=d.searchParams=new X,a=V(r);a.updateSearchParams(d.query),a.updateURL=function(){d.query=String(r)||null},c||(l.href=Rt.call(l),l.origin=ft.call(l),l.protocol=St.call(l),l.username=vt.call(l),l.password=Yt.call(l),l.host=Kt.call(l),l.hostname=Jt.call(l),l.port=Nt.call(l),l.pathname=Lt.call(l),l.search=Ut.call(l),l.searchParams=Ht.call(l),l.hash=xt.call(l))},Ct=Wt.prototype,Rt=function(){var t=C(this),i=t.scheme,n=t.username,l=t.password,e=t.host,c=t.port,o=t.path,d=t.query,r=t.fragment,a=i+":";return null!==e?(a+="//",D(t)&&(a+=n+(l?":"+l:"")+"@"),a+=z(e),null!==c&&(a+=":"+c)):"file"==i&&(a+="//"),a+=t.cannotBeABaseURL?o[0]:o.length?"/"+o.join("/"):"",null!==d&&(a+="?"+d),null!==r&&(a+="#"+r),a},ft=function(){var t=C(this),i=t.scheme,n=t.port;if("blob"==i)try{return new Wt(i.path[0]).origin}catch(t){return"null"}return"file"!=i&&E(t)?i+"://"+z(t.host)+(null!==n?":"+n:""):"null"},St=function(){return C(this).scheme+":"},vt=function(){return C(this).username},Yt=function(){return C(this).password},Kt=function(){var t=C(this),i=t.host,n=t.port;return null===i?"":null===n?z(i):z(i)+":"+n},Jt=function(){var t=C(this).host;return null===t?"":z(t)},Nt=function(){var t=C(this).port;return null===t?"":String(t)},Lt=function(){var t=C(this),i=t.path;return t.cannotBeABaseURL?i[0]:i.length?"/"+i.join("/"):""},Ut=function(){var t=C(this).query;return t?"?"+t:""},Ht=function(){return C(this).searchParams},xt=function(){var t=C(this).fragment;return t?"#"+t:""},Tt=function(t,i){return{get:t,set:i,configurable:!0,enumerable:!0}};if(c&&r(Ct,{href:Tt(Rt,(function(t){var i=C(this),n=I(t),l=Vt(i,n);if(l)throw TypeError(l);V(i.searchParams).updateSearchParams(i.query)})),origin:Tt(ft),protocol:Tt(St,(function(t){var i=C(this);Vt(i,I(t)+":",it)})),username:Tt(vt,(function(t){var i=C(this),n=b(I(t));if(!O(i)){i.username="";for(var l=0;l<n.length;l++)i.username+=Q(n[l],M)}})),password:Tt(Yt,(function(t){var i=C(this),n=b(I(t));if(!O(i)){i.password="";for(var l=0;l<n.length;l++)i.password+=Q(n[l],M)}})),host:Tt(Kt,(function(t){var i=C(this);i.cannotBeABaseURL||Vt(i,I(t),Zt)})),hostname:Tt(Jt,(function(t){var i=C(this);i.cannotBeABaseURL||Vt(i,I(t),st)})),port:Tt(Nt,(function(t){var i=C(this);O(i)||(""==(t=I(t))?i.port=null:Vt(i,t,bt))})),pathname:Tt(Lt,(function(t){var i=C(this);i.cannotBeABaseURL||(i.path=[],Vt(i,I(t),pt))})),search:Tt(Ut,(function(t){var i=C(this);""==(t=I(t))?i.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),i.query="",Vt(i,t,gt)),V(i.searchParams).updateSearchParams(i.query)})),searchParams:Tt(Ht),hash:Tt(xt,(function(t){var i=C(this);""!=(t=I(t))?("#"==t.charAt(0)&&(t=t.slice(1)),i.fragment="",Vt(i,t,Xt)):i.fragment=null}))}),a(Ct,"toJSON",(function(){return Rt.call(this)}),{enumerable:!0}),a(Ct,"toString",(function(){return Rt.call(this)}),{enumerable:!0}),g){var kt=g.createObjectURL,Ft=g.revokeObjectURL;kt&&a(Wt,"createObjectURL",(function(t){return kt.apply(g,arguments)})),Ft&&a(Wt,"revokeObjectURL",(function(t){return Ft.apply(g,arguments)}))}p(Wt,"URL"),e({global:!0,forced:!o,sham:!c},{URL:Wt})},function(t,i,n){"use strict";var l=/[^\0-\u007E]/,e=/[.\u3002\uFF0E\uFF61]/g,c="Overflow: input needs wider integers to process",o=Math.floor,d=String.fromCharCode,r=function(t){return t+22+75*(t<26)},a=function(t,i,n){var l=0;for(t=n?o(t/700):t>>1,t+=o(t/i);t>455;l+=36)t=o(t/35);return o(l+36*t/(t+38))},u=function(t){var i,n,l=[],e=(t=function(t){for(var i=[],n=0,l=t.length;n<l;){var e=t.charCodeAt(n++);if(e>=55296&&e<=56319&&n<l){var c=t.charCodeAt(n++);56320==(64512&c)?i.push(((1023&e)<<10)+(1023&c)+65536):(i.push(e),n--)}else i.push(e)}return i}(t)).length,u=128,Z=0,s=72;for(i=0;i<t.length;i++)(n=t[i])<128&&l.push(d(n));var b=l.length,m=b;for(b&&l.push("-");m<e;){var h=2147483647;for(i=0;i<t.length;i++)(n=t[i])>=u&&n<h&&(h=n);var I=m+1;if(h-u>o((2147483647-Z)/I))throw RangeError(c);for(Z+=(h-u)*I,u=h,i=0;i<t.length;i++){if((n=t[i])<u&&++Z>2147483647)throw RangeError(c);if(n==u){for(var p=Z,G=36;;G+=36){var y=G<=s?1:G>=s+26?26:G-s;if(p<y)break;var g=p-y,X=36-y;l.push(d(r(y+g%X))),p=o(g/X)}l.push(d(r(p))),s=a(Z,I,m==b),Z=0,++m}}++Z,++u}return l.join("")};t.exports=function(t){var i,n,c=[],o=t.toLowerCase().replace(e,".").split(".");for(i=0;i<o.length;i++)n=o[i],c.push(l.test(n)?"xn--"+u(n):n);return c.join(".")}},function(t,i,n){"use strict";n(0)({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},function(t,i,n){var l=function(t){"use strict";var i=Object.prototype,n=i.hasOwnProperty,l="function"==typeof Symbol?Symbol:{},e=l.iterator||"@@iterator",c=l.asyncIterator||"@@asyncIterator",o=l.toStringTag||"@@toStringTag";function d(t,i,n){return Object.defineProperty(t,i,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[i]}try{d({},"")}catch(t){d=function(t,i,n){return t[i]=n}}function r(t,i,n,l){var e=i&&i.prototype instanceof Z?i:Z,c=Object.create(e.prototype),o=new W(l||[]);return c._invoke=function(t,i,n){var l="suspendedStart";return function(e,c){if("executing"===l)throw new Error("Generator is already running");if("completed"===l){if("throw"===e)throw c;return R()}for(n.method=e,n.arg=c;;){var o=n.delegate;if(o){var d=g(o,n);if(d){if(d===u)continue;return d}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===l)throw l="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);l="executing";var r=a(t,i,n);if("normal"===r.type){if(l=n.done?"completed":"suspendedYield",r.arg===u)continue;return{value:r.arg,done:n.done}}"throw"===r.type&&(l="completed",n.method="throw",n.arg=r.arg)}}}(t,n,o),c}function a(t,i,n){try{return{type:"normal",arg:t.call(i,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=r;var u={};function Z(){}function s(){}function b(){}var m={};m[e]=function(){return this};var h=Object.getPrototypeOf,I=h&&h(h(C([])));I&&I!==i&&n.call(I,e)&&(m=I);var p=b.prototype=Z.prototype=Object.create(m);function G(t){["next","throw","return"].forEach((function(i){d(t,i,(function(t){return this._invoke(i,t)}))}))}function y(t,i){var l;this._invoke=function(e,c){function o(){return new i((function(l,o){!function l(e,c,o,d){var r=a(t[e],t,c);if("throw"!==r.type){var u=r.arg,Z=u.value;return Z&&"object"==typeof Z&&n.call(Z,"__await")?i.resolve(Z.__await).then((function(t){l("next",t,o,d)}),(function(t){l("throw",t,o,d)})):i.resolve(Z).then((function(t){u.value=t,o(u)}),(function(t){return l("throw",t,o,d)}))}d(r.arg)}(e,c,l,o)}))}return l=l?l.then(o,o):o()}}function g(t,i){var n=t.iterator[i.method];if(void 0===n){if(i.delegate=null,"throw"===i.method){if(t.iterator.return&&(i.method="return",i.arg=void 0,g(t,i),"throw"===i.method))return u;i.method="throw",i.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var l=a(n,t.iterator,i.arg);if("throw"===l.type)return i.method="throw",i.arg=l.arg,i.delegate=null,u;var e=l.arg;return e?e.done?(i[t.resultName]=e.value,i.next=t.nextLoc,"return"!==i.method&&(i.method="next",i.arg=void 0),i.delegate=null,u):e:(i.method="throw",i.arg=new TypeError("iterator result is not an object"),i.delegate=null,u)}function X(t){var i={tryLoc:t[0]};1 in t&&(i.catchLoc=t[1]),2 in t&&(i.finallyLoc=t[2],i.afterLoc=t[3]),this.tryEntries.push(i)}function V(t){var i=t.completion||{};i.type="normal",delete i.arg,t.completion=i}function W(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(X,this),this.reset(!0)}function C(t){if(t){var i=t[e];if(i)return i.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var l=-1,c=function i(){for(;++l<t.length;)if(n.call(t,l))return i.value=t[l],i.done=!1,i;return i.value=void 0,i.done=!0,i};return c.next=c}}return{next:R}}function R(){return{value:void 0,done:!0}}return s.prototype=p.constructor=b,b.constructor=s,s.displayName=d(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var i="function"==typeof t&&t.constructor;return!!i&&(i===s||"GeneratorFunction"===(i.displayName||i.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,d(t,o,"GeneratorFunction")),t.prototype=Object.create(p),t},t.awrap=function(t){return{__await:t}},G(y.prototype),y.prototype[c]=function(){return this},t.AsyncIterator=y,t.async=function(i,n,l,e,c){void 0===c&&(c=Promise);var o=new y(r(i,n,l,e),c);return t.isGeneratorFunction(n)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},G(p),d(p,o,"Generator"),p[e]=function(){return this},p.toString=function(){return"[object Generator]"},t.keys=function(t){var i=[];for(var n in t)i.push(n);return i.reverse(),function n(){for(;i.length;){var l=i.pop();if(l in t)return n.value=l,n.done=!1,n}return n.done=!0,n}},t.values=C,W.prototype={constructor:W,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(V),!t)for(var i in this)"t"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function l(n,l){return o.type="throw",o.arg=t,i.next=n,l&&(i.method="next",i.arg=void 0),!!l}for(var e=this.tryEntries.length-1;e>=0;--e){var c=this.tryEntries[e],o=c.completion;if("root"===c.tryLoc)return l("end");if(c.tryLoc<=this.prev){var d=n.call(c,"catchLoc"),r=n.call(c,"finallyLoc");if(d&&r){if(this.prev<c.catchLoc)return l(c.catchLoc,!0);if(this.prev<c.finallyLoc)return l(c.finallyLoc)}else if(d){if(this.prev<c.catchLoc)return l(c.catchLoc,!0)}else{if(!r)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return l(c.finallyLoc)}}}},abrupt:function(t,i){for(var l=this.tryEntries.length-1;l>=0;--l){var e=this.tryEntries[l];if(e.tryLoc<=this.prev&&n.call(e,"finallyLoc")&&this.prev<e.finallyLoc){var c=e;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=i&&i<=c.finallyLoc&&(c=null);var o=c?c.completion:{};return o.type=t,o.arg=i,c?(this.method="next",this.next=c.finallyLoc,u):this.complete(o)},complete:function(t,i){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&i&&(this.next=i),u},finish:function(t){for(var i=this.tryEntries.length-1;i>=0;--i){var n=this.tryEntries[i];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),V(n),u}},catch:function(t){for(var i=this.tryEntries.length-1;i>=0;--i){var n=this.tryEntries[i];if(n.tryLoc===t){var l=n.completion;if("throw"===l.type){var e=l.arg;V(n)}return e}}throw new Error("illegal catch attempt")},delegateYield:function(t,i,n){return this.delegate={iterator:C(t),resultName:i,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},t}(t.exports);try{regeneratorRuntime=l}catch(t){Function("r","regeneratorRuntime = r")(l)}},function(t,i,n){"use strict";n.r(i),n.d(i,"AUTHORIZATION_CODE",(function(){return l.a})),n.d(i,"AsgardeoAuthClient",(function(){return l.b})),n.d(i,"AsgardeoSPAClient",(function(){return l.c})),n.d(i,"CLIENT_ID_TAG",(function(){return l.d})),n.d(i,"CLIENT_SECRET_TAG",(function(){return l.e})),n.d(i,"Hooks",(function(){return l.f})),n.d(i,"OIDC_SCOPE",(function(){return l.g})),n.d(i,"PKCE_CODE_VERIFIER",(function(){return l.h})),n.d(i,"REFRESH_TOKEN_TIMER",(function(){return l.i})),n.d(i,"ResponseMode",(function(){return l.j})),n.d(i,"SCOPE_TAG",(function(){return l.k})),n.d(i,"SESSION_STATE",(function(){return l.l})),n.d(i,"SIGN_OUT_SUCCESS_PARAM",(function(){return l.m})),n.d(i,"SIGN_OUT_URL",(function(){return l.n})),n.d(i,"SPAUtils",(function(){return l.o})),n.d(i,"Storage",(function(){return l.p})),n.d(i,"Stores",(function(){return l.q})),n.d(i,"TOKEN_TAG",(function(){return l.r})),n.d(i,"USERNAME_TAG",(function(){return l.s})),n.d(i,"WebWorkerClass",(function(){return l.t})),n.d(i,"AuthClient",(function(){return X})),n.d(i,"AuthProvider",(function(){return W})),n.d(i,"useAuthContext",(function(){return C})),n.d(i,"SecureRoute",(function(){return Y})),n.d(i,"AuthenticatedComponent",(function(){return K})),n.d(i,"SecureApp",(function(){return N}));n(196),n(198),n(199),n(200),n(201),n(202),n(203),n(204),n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(221),n(222),n(223),n(224),n(225),n(87),n(226),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(242),n(243),n(244),n(245),n(246),n(248),n(249),n(251),n(252),n(253),n(254),n(160),n(255),n(256),n(127),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(270),n(271),n(272),n(273),n(274),n(275),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(288),n(289),n(290),n(291),n(292),n(293),n(294),n(295),n(296),n(297),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(312),n(313),n(314),n(315),n(175),n(319),n(320),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(132),n(334),n(335),n(336),n(337),n(179),n(338),n(339),n(340),n(341),n(180),n(342),n(181),n(343),n(344),n(345),n(346),n(347),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(379),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(397),n(398),n(399),n(400),n(401),n(402),n(137),n(403),n(404),n(406),n(407),n(408),n(409),n(411),n(412),n(413),n(414),n(415),n(416),n(417),n(418),n(419),n(420),n(421),n(422),n(423),n(424),n(425),n(426),n(427),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438),n(439),n(440),n(441),n(442),n(443),n(444),n(445),n(446),n(447),n(448),n(450),n(451),n(452),n(453),n(454),n(455),n(456),n(457),n(458),n(459),n(460),n(461),n(462),n(463),n(464),n(465),n(466),n(467),n(468),n(469),n(470),n(471),n(472),n(473),n(474),n(475),n(476),n(477),n(478),n(479),n(480),n(482),n(483),n(484),n(485),n(486),n(487),n(488),n(489),n(490),n(491),n(492),n(493),n(494),n(495),n(496),n(497),n(498),n(499),n(500),n(501),n(502),n(503),n(504),n(505),n(506),n(507),n(508),n(509),n(510),n(511),n(512),n(513),n(515),n(516),n(517),n(518),n(519),n(520),n(521),n(522),n(523),n(524),n(525),n(526),n(527),n(528),n(529),n(530),n(531),n(532),n(533),n(535),n(194),n(536);var l=n(45),e=n(20),c=n.n(e);function o(t,i){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);i&&(l=l.filter((function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable}))),n.push.apply(n,l)}return n}function d(t){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?o(Object(n),!0).forEach((function(i){Z(t,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(n,i))}))}return t}function r(t,i,n,l,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void n(t)}d.done?i(r):Promise.resolve(r).then(l,e)}function a(t){return function(){var i=this,n=arguments;return new Promise((function(l,e){var c=t.apply(i,n);function o(t){r(c,l,e,o,d,"next",t)}function d(t){r(c,l,e,o,d,"throw",t)}o(void 0)}))}}function u(t,i){for(var n=0;n<i.length;n++){var l=i[n];l.enumerable=l.enumerable||!1,l.configurable=!0,"value"in l&&(l.writable=!0),Object.defineProperty(t,l.key,l)}}function Z(t,i,n){return i in t?Object.defineProperty(t,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[i]=n,t}var s=function(){function t(){!function(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}(this,t),Z(this,"_authState",t.DEFAULT_STATE),Z(this,"_client",void 0),this._client=l.c.getInstance(),this.getState=this.getState.bind(this),this.init=this.init.bind(this),this.signIn=this.signIn.bind(this),this.signOut=this.signOut.bind(this),this.updateState=this.updateState.bind(this)}var i,n,e,c,o,r,s,b,m,h,I,p,G,y,g,X,V,W,C;return i=t,(n=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(C=a(regeneratorRuntime.mark((function t(i,n,l,e,c,o){var r=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.signIn(l,e,c).then(function(){var t=a(regeneratorRuntime.mark((function t(l){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(l){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,r._client.isAuthenticated();case 4:if(!t.sent){t.next=9;break}e={allowedScopes:l.allowedScopes,displayName:l.displayName,email:l.email,isAuthenticated:!0,username:l.username,isLoading:!1,isSigningOut:!1},r.updateState(e),i(d(d({},n),e)),o&&o(l);case 9:return t.abrupt("return",l);case 10:case"end":return t.stop()}}),t)})));return function(i){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,i,n,l,e,c){return C.apply(this,arguments)})},{key:"signOut",value:function(t,i,n){return this._client.signOut().then((function(t){return n&&n(t),t})).catch((function(t){return Promise.reject(t)}))}},{key:"updateState",value:function(t){this._authState=d(d({},this._authState),t)}},{key:"getBasicUserInfo",value:(W=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getBasicUserInfo());case 1:case"end":return t.stop()}}),t,this)}))),function(){return W.apply(this,arguments)})},{key:"httpRequest",value:(V=a(regeneratorRuntime.mark((function t(i){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequest(i));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return V.apply(this,arguments)})},{key:"httpRequestAll",value:(X=a(regeneratorRuntime.mark((function t(i){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequestAll(i));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return X.apply(this,arguments)})},{key:"requestCustomGrant",value:function(t,i,n){var l=this;return this._client.requestCustomGrant(t).then((function(e){if(e)return t.returnsSession&&(l.updateState(d(d(d({},l.getState()),e),{},{isAuthenticated:!0,isLoading:!1})),n(d(d({},e),{},{isAuthenticated:!0,isLoading:!1}))),i&&i(e),e})).catch((function(t){return Promise.reject(t)}))}},{key:"revokeAccessToken",value:(g=a(regeneratorRuntime.mark((function i(n){var l=this;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.abrupt("return",this._client.revokeAccessToken().then((function(){return l.updateState(t.DEFAULT_STATE),n(t.DEFAULT_STATE),!0})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return i.stop()}}),i,this)}))),function(t){return g.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",value:(y=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)}))),function(){return y.apply(this,arguments)})},{key:"getHttpClient",value:(G=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getHttpClient());case 1:case"end":return t.stop()}}),t,this)}))),function(){return G.apply(this,arguments)})},{key:"getDecodedIDToken",value:(p=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getIDToken",value:(I=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return I.apply(this,arguments)})},{key:"getAccessToken",value:(h=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"refreshAccessToken",value:(m=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.refreshAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return m.apply(this,arguments)})},{key:"isAuthenticated",value:(b=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.isAuthenticated());case 1:case"end":return t.stop()}}),t,this)}))),function(){return b.apply(this,arguments)})},{key:"enableHttpHandler",value:(s=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.enableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return s.apply(this,arguments)})},{key:"disableHttpHandler",value:(r=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.disableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"updateConfig",value:(o=a(regeneratorRuntime.mark((function t(i){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.updateConfig(i));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"on",value:function(t,i,n){return t===l.f.CustomGrant?this._client.on(t,i,n):this._client.on(t,i)}},{key:"trySignInSilently",value:(c=a(regeneratorRuntime.mark((function t(i,n){var l=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.trySignInSilently().then(function(){var t=a(regeneratorRuntime.mark((function t(e){var c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=4;break}return l.updateState(d(d({},l.getState()),{},{isLoading:!1})),n(d(d({},i),{},{isLoading:!1})),t.abrupt("return",!1);case 4:return t.next=6,l._client.isAuthenticated();case 6:if(!t.sent){t.next=11;break}o={allowedScopes:(c=e).allowedScopes,displayName:c.displayName,email:c.email,isAuthenticated:!0,isLoading:!1,username:c.username,isSigningOut:!1},l.updateState(o),n(d(d({},i),o));case 11:return t.abrupt("return",e);case 12:case"end":return t.stop()}}),t)})));return function(i){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,i){return c.apply(this,arguments)})}])&&u(i.prototype,n),e&&u(i,e),t}();function b(t,i,n,l,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void n(t)}d.done?i(r):Promise.resolve(r).then(l,e)}function m(t){return function(){var i=this,n=arguments;return new Promise((function(l,e){var c=t.apply(i,n);function o(t){b(c,l,e,o,d,"next",t)}function d(t){b(c,l,e,o,d,"throw",t)}o(void 0)}))}}function h(t,i){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);i&&(l=l.filter((function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable}))),n.push.apply(n,l)}return n}function I(t){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?h(Object(n),!0).forEach((function(i){p(t,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach((function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(n,i))}))}return t}function p(t,i,n){return i in t?Object.defineProperty(t,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[i]=n,t}function G(t,i){return function(t){if(Array.isArray(t))return t}(t)||function(t,i){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==n)return;var l,e,c=[],o=!0,d=!1;try{for(n=n.call(t);!(o=(l=n.next()).done)&&(c.push(l.value),!i||c.length!==i);o=!0);}catch(t){d=!0,e=t}finally{try{o||null==n.return||n.return()}finally{if(d)throw e}}return c}(t,i)||function(t,i){if(!t)return;if("string"==typeof t)return y(t,i);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return y(t,i)}(t,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(t,i){(null==i||i>t.length)&&(i=t.length);for(var n=0,l=new Array(i);n<i;n++)l[n]=t[n];return l}Z(s,"DEFAULT_STATE",void 0),s.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,username:""};var g={disableTrySignInSilently:!1},X=new s,V=Object(e.createContext)(null),W=function(t){var i=G(Object(e.useState)(X.getState()),2),n=i[0],o=i[1],d=G(Object(e.useState)(!1),2),r=d[0],a=d[1],u=t.children,Z=t.config,s=t.fallback,b=t.getAuthParams,h=t.onSignOut,p=Object(e.useMemo)((function(){return I(I({},g),Z)}),[Z]),y=function(){var t=m(regeneratorRuntime.mark((function t(i,l,e,c){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,X.signIn(o,n,i,l,e,c);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(i,n,l,e){return t.apply(this,arguments)}}(),W=function(t,i,n){return t===l.f.CustomGrant?X.on(t,i,n):X.on(t,i)},C=function(){return X.trySignInSilently(n,o)};return Object(e.useEffect)((function(){n.isAuthenticated||m(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=a,t.next=3,X.init(p);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[p]),Object(e.useEffect)((function(){m(regeneratorRuntime.mark((function t(){var i,e,c,d,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=!1,t.next=3,W(l.f.SignOut,(function(){i=!0,h&&h()}));case 3:if(!n.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(p.skipRedirectCallback){t.next=14;break}if(c=null,!b||"function"!=typeof b){t.next=11;break}return t.next=10,b();case 10:c=t.sent;case 11:if(!(l.o.hasAuthSearchParamsInURL()||null!==(e=c)&&void 0!==e&&e.authorizationCode||new URL(location.href).searchParams.get("error"))){t.next=14;break}return t.next=14,y({callOnlyOnRedirect:!0},null===(d=c)||void 0===d?void 0:d.authorizationCode,null===(r=c)||void 0===r?void 0:r.sessionState).then((function(){})).catch((function(t){throw t}));case 14:if(!X.getState().isAuthenticated){t.next=16;break}return t.abrupt("return");case 16:if(!p.disableTrySignInSilently&&!i){t.next=19;break}return o(I(I({},n),{},{isLoading:!1})),t.abrupt("return");case 19:return t.next=21,C().then((function(t){})).catch((function(t){throw t}));case 21:case"end":return t.stop()}}),t)})))()}),[p]),c.a.createElement(V.Provider,{value:{disableHttpHandler:function(){return X.disableHttpHandler()},enableHttpHandler:function(){return X.enableHttpHandler()},getAccessToken:function(){return X.getAccessToken()},getBasicUserInfo:function(){return X.getBasicUserInfo()},getDecodedIDToken:function(){return X.getDecodedIDToken()},getHttpClient:function(){return X.getHttpClient()},getIDToken:function(){return X.getIDToken()},getOIDCServiceEndpoints:function(){return X.getOIDCServiceEndpoints()},httpRequest:function(t){return X.httpRequest(t)},httpRequestAll:function(t){return X.httpRequestAll(t)},isAuthenticated:function(){return X.isAuthenticated()},on:W,refreshAccessToken:function(){return X.refreshAccessToken()},requestCustomGrant:function(t,i){return X.requestCustomGrant(t,i,o)},revokeAccessToken:function(){return X.revokeAccessToken(o)},signIn:y,signOut:function(t){return X.signOut(o,n,t)},state:n,trySignInSilently:C,updateConfig:function(t){return X.updateConfig(t)}}},r?u:null!=s?s:null)},C=function(){return Object(e.useContext)(V)},R=n(195),f=["component","callback"];function S(){return(S=Object.assign||function(t){for(var i=1;i<arguments.length;i++){var n=arguments[i];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(t[l]=n[l])}return t}).apply(this,arguments)}function v(t,i){if(null==t)return{};var n,l,e=function(t,i){if(null==t)return{};var n,l,e={},c=Object.keys(t);for(l=0;l<c.length;l++)n=c[l],i.indexOf(n)>=0||(e[n]=t[n]);return e}(t,i);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);for(l=0;l<c.length;l++)n=c[l],i.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(e[n]=t[n])}return e}var Y=function(t){var i=C().state,n=t.component,l=t.callback,o=v(t,f);return Object(e.useEffect)((function(){i.isAuthenticated||l&&l()}),[i.isAuthenticated]),i.isAuthenticated?c.a.createElement(R.Route,S({},o,{render:function(t){return c.a.createElement(n,t)}})):null},K=function(t){var i=t.fallback,n=t.children,l=C().state.isAuthenticated;return c.a.createElement(c.a.Fragment,null," ",l?n:null!=i?i:null," ")};function J(t,i,n,l,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void n(t)}d.done?i(r):Promise.resolve(r).then(l,e)}var N=function(t){var i=t.children,n=t.fallback,l=t.onSignIn,o=t.overrideSignIn,d=C(),r=d.state,a=r.isAuthenticated,u=r.isLoading,Z=d.signIn;return Object(e.useEffect)((function(){var t;a||u||(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o||"function"!=typeof o){t.next=5;break}return t.next=3,o();case 3:t.next=7;break;case 5:return t.next=7,Z();case 7:case"end":return t.stop()}}),t)})),function(){var i=this,n=arguments;return new Promise((function(l,e){var c=t.apply(i,n);function o(t){J(c,l,e,o,d,"next",t)}function d(t){J(c,l,e,o,d,"throw",t)}o(void 0)}))})(),a&&l&&"function"==typeof l&&l()}),[a,u]),c.a.createElement(K,{fallback:n},c.a.createElement(e.Suspense,{fallback:n},i))}}])}));
|