typed-fetcher
Version:
2 lines • 46.6 kB
JavaScript
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.typedFetcher=e():t.typedFetcher=e()}(this,()=>(()=>{"use strict";var t={77:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HttpErrorArrayBuffer=void 0;const n=r(181),s=n.HTTP_ERROR_TYPE.ARRAY_BUFFER;class o extends n.HttpErrorBase{status;details;message;type=s;constructor(t,e,r="ArrayBuffer http error, please check details field"){super(r),this.status=t,this.details=e,this.message=r}}e.HttpErrorArrayBuffer=o},94:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HttpErrorJSON=void 0;const n=r(181),s=n.HTTP_ERROR_TYPE.JSON;class o extends n.HttpErrorBase{message;status;details;type=s;constructor(t,e,r){super(t||"Unknown error"),this.message=t,this.status=e,this.details=r}}e.HttpErrorJSON=o},181:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HttpErrorBase=e.HTTP_ERROR_TYPE=void 0,e.HTTP_ERROR_TYPE={JSON:"JSON",ARRAY_BUFFER:"ARRAY_BUFFER"};class r extends Error{}e.HttpErrorBase=r},362:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HttpErrorBase=e.HttpErrorArrayBuffer=e.HttpErrorJSON=void 0;var n=r(94);Object.defineProperty(e,"HttpErrorJSON",{enumerable:!0,get:function(){return n.HttpErrorJSON}});var s=r(77);Object.defineProperty(e,"HttpErrorArrayBuffer",{enumerable:!0,get:function(){return s.HttpErrorArrayBuffer}});var o=r(181);Object.defineProperty(e,"HttpErrorBase",{enumerable:!0,get:function(){return o.HttpErrorBase}})},677:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FetchProvider=void 0,e.FetchProvider=class{fetch(t){return globalThis.fetch(t.url,{method:t.method,...t.options})}}},708:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HttpClient=void 0;const n=r(887),s=r(739),o=r(720);e.HttpClient=class{errorManager;fetchProvider;setting={responseAs:n.RESPONSE_AS.json};normalizer=new s.HttpClientNormalizer;constructor(t,e=new o.FetchProvider){this.errorManager=t,this.fetchProvider=e}async get(t,e,r=this.setting){return await this.fetchWithShortResponse(n.REQUEST_METHOD.GET,t,e,r)}async post(t,e,r=this.setting){return await this.fetchWithShortResponse(n.REQUEST_METHOD.POST,t,e,r)}async put(t,e,r=this.setting){return await this.fetchWithShortResponse(n.REQUEST_METHOD.PUT,t,e,r)}async patch(t,e,r=this.setting){return await this.fetchWithShortResponse(n.REQUEST_METHOD.PATCH,t,e,r)}async delete(t,e,r=this.setting){return await this.fetchWithShortResponse(n.REQUEST_METHOD.DELETE,t,e,r)}async head(t,e,r=this.setting){return await this.fetchHeaders(n.REQUEST_METHOD.HEAD,t,e,r)}async options(t,e,r=this.setting){return await this.fetchHeaders(n.REQUEST_METHOD.OPTIONS,t,e,r)}async fetchGet(t,e,r=this.setting){return await this.fetch(n.REQUEST_METHOD.GET,t,e,r)}async fetchPost(t,e,r=this.setting){return await this.fetch(n.REQUEST_METHOD.POST,t,e,r)}async fetchPut(t,e,r=this.setting){return await this.fetch(n.REQUEST_METHOD.PUT,t,e,r)}async fetchPatch(t,e,r=this.setting){return await this.fetch(n.REQUEST_METHOD.PATCH,t,e,r)}async fetchDelete(t,e,r=this.setting){return await this.fetch(n.REQUEST_METHOD.DELETE,t,e,r)}fetchHead(t,e,r=this.setting){return this.fetch(n.REQUEST_METHOD.HEAD,t,e,r)}fetchOptions(t,e,r=this.setting){return this.fetch(n.REQUEST_METHOD.OPTIONS,t,e,r)}applyOptions(t){this.normalizer.setOptions(t)}unapplyOptions(){this.normalizer.setOptions({})}async fetch(t,e,r,n=this.setting){const s={...this.setting,...n},o=r??{},i=this.normalizer.normalizeOptions(o,s);try{const r={url:e,method:t,options:i},n=await this.fetchProvider.fetch(r);if(n.ok)return await this.normalizer.normalizeResponse(n,s);const o=await n.text();this.errorManager.throw(n,o)}catch(t){return this.errorManager.parse(t)}}async fetchWithShortResponse(t,e,r,n=this.setting){const s=await this.fetch(t,e,r,n);return s.error?{data:null,error:s.error}:{data:s.data,error:null}}async fetchHeaders(t,e,r,s=this.setting){const o={...r,body:void 0},i={...s,responseAs:n.RESPONSE_AS.text},{error:a,original:c}=await this.fetch(t,e,o,i);return a?{data:null,error:a}:{data:c?.headers||null,error:null}}}},720:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FetchProvider=e.XmlHttpProvider=void 0;var n=r(972);Object.defineProperty(e,"XmlHttpProvider",{enumerable:!0,get:function(){return n.XmlHttpProvider}});var s=r(677);Object.defineProperty(e,"FetchProvider",{enumerable:!0,get:function(){return s.FetchProvider}})},739:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HttpClientNormalizer=void 0;const n=r(887);e.HttpClientNormalizer=class{options={};setOptions(t){this.options=t}normalizeOptions(t,e){const r={...this.options,...t,body:this.normalizeBody(t.body)};return e.responseAs===n.RESPONSE_AS.json&&(r.headers={"Content-Type":"application/json",...r.headers}),{...r,headers:r.headers??{}}}async normalizeResponse(t,e){return{original:t,data:await t[e.responseAs](),error:null}}normalizeBody(t){return t&&t instanceof ArrayBuffer||t&&t instanceof Blob||t&&t instanceof ReadableStream||t&&t instanceof URLSearchParams||t&&"string"==typeof t?t:t&&t instanceof FormData?t.toString():t?JSON.stringify(t):void 0}}},763:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var s=Object.getOwnPropertyDescriptor(e,r);s&&!("get"in s?!e.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,s)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),s=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),e.HttpClient=void 0;var o=r(708);Object.defineProperty(e,"HttpClient",{enumerable:!0,get:function(){return o.HttpClient}}),s(r(887),e)},887:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.REQUEST_METHOD=e.RESPONSE_AS=void 0,e.RESPONSE_AS={json:"json",text:"text",arrayBuffer:"arrayBuffer"},e.REQUEST_METHOD={GET:"GET",POST:"POST",PUT:"PUT",DELETE:"DELETE",HEAD:"HEAD",OPTIONS:"OPTIONS",PATCH:"PATCH"}},888:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HttpErrorManager=void 0;var n=r(979);Object.defineProperty(e,"HttpErrorManager",{enumerable:!0,get:function(){return n.HttpErrorManager}})},972:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.XmlHttpProvider=void 0,e.XmlHttpProvider=class{constructor(){if(!globalThis.XMLHttpRequest)throw new Error("XMLHttpRequest is not supported in this environment")}fetch(t){return new Promise((e,r)=>{const n=new XMLHttpRequest;if(n.open(t.method,t.url,!0),t.options.headers)for(const[e,r]of Object.entries(t.options.headers))n.setRequestHeader(e,r);"include"===t.options?.credentials&&(n.withCredentials=!0),n.onload=()=>{const t={status:n.status,statusText:n.statusText,headers:new Headers};n.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach(e=>{const r=e.split(": "),n=r.shift(),s=r.join(": ");n&&t.headers.append(n,s)});const r=n.response||n.responseText;e(new Response(r,t))},n.onerror=()=>{r(new TypeError("Network request failed"))},n.ontimeout=()=>{r(new TypeError("Network request timed out"))};const s=JSON.stringify(t.options.body);n.send(s||null)})}}},979:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HttpErrorManager=void 0;const n=r(362);e.HttpErrorManager=class{contentType={JSON:"application/json",ARRAY_BUFFER:"application/octet-stream",TEXT:"text/plain"};constructor(){}throw(t,e){if(e){const r=t.headers.get("content-type");if(r?.includes(this.contentType.ARRAY_BUFFER)){const r=(new TextEncoder).encode(e).buffer;throw new n.HttpErrorArrayBuffer(t.status,r)}if(r?.includes(this.contentType.TEXT))throw new n.HttpErrorJSON(e,t.status,e);let s;try{s=JSON.parse(e)}catch(t){}if(s){const e="Unknown error please check details field";throw new n.HttpErrorJSON(s?.message??e,t.status,s)}}const r={status:t.status,message:t.statusText,details:"No response for details"};throw new n.HttpErrorJSON(r.message,r.status,r.details)}parse(t){if(t instanceof n.HttpErrorJSON)return{original:null,data:null,error:t};throw t}}}},e={};function r(n){var s=e[n];if(void 0!==s)return s.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,r),o.exports}var n={};return(()=>{var t=n;Object.defineProperty(t,"__esModule",{value:!0}),t.XmlHttpProvider=t.HttpErrorBase=t.HttpErrorJSON=t.HttpErrorManager=t.HttpClient=void 0;var e=r(763);Object.defineProperty(t,"HttpClient",{enumerable:!0,get:function(){return e.HttpClient}});var s=r(888);Object.defineProperty(t,"HttpErrorManager",{enumerable:!0,get:function(){return s.HttpErrorManager}});var o=r(362);Object.defineProperty(t,"HttpErrorJSON",{enumerable:!0,get:function(){return o.HttpErrorJSON}}),Object.defineProperty(t,"HttpErrorBase",{enumerable:!0,get:function(){return o.HttpErrorBase}});var i=r(720);Object.defineProperty(t,"XmlHttpProvider",{enumerable:!0,get:function(){return i.XmlHttpProvider}})})(),n})());
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RSxnQkFBZ0IsSUFDekIsYUFBUywrRUFBQTVFLGFBQWEsSUFBRSwrRUFBQVIsYUFBYSxJQUNyQyxhQUFTLGlGQUFBeUUsZUFBZSxHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdHlwZWRGZXRjaGVyL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly90eXBlZEZldGNoZXIvLi9zcmMvaHR0cC1lcnJvci9IdHRwRXJyb3JBcnJheUJ1ZmZlci50cyIsIndlYnBhY2s6Ly90eXBlZEZldGNoZXIvLi9zcmMvaHR0cC1lcnJvci9IdHRwRXJyb3JKU09OLnRzIiwid2VicGFjazovL3R5cGVkRmV0Y2hlci8uL3NyYy9odHRwLWVycm9yL0h0dHBFcnJvckJhc2UudHMiLCJ3ZWJwYWNrOi8vdHlwZWRGZXRjaGVyLy4vc3JjL2h0dHAtZXJyb3IvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vdHlwZWRGZXRjaGVyLy4vc3JjL3Byb3ZpZGVyL2ZldGNoUHJvdmlkZXIudHMiLCJ3ZWJwYWNrOi8vdHlwZWRGZXRjaGVyLy4vc3JjL2h0dHAtY2xpZW50L0h0dHBDbGllbnQudHMiLCJ3ZWJwYWNrOi8vdHlwZWRGZXRjaGVyLy4vc3JjL3Byb3ZpZGVyL2luZGV4LnRzIiwid2VicGFjazovL3R5cGVkRmV0Y2hlci8uL3NyYy9odHRwLWNsaWVudC9IdHRwQ2xpZW50Tm9ybWFsaXplci50cyIsIndlYnBhY2s6Ly90eXBlZEZldGNoZXIvLi9zcmMvaHR0cC1jbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vdHlwZWRGZXRjaGVyLy4vc3JjL2h0dHAtY2xpZW50L0h0dHBDbGllbnQudHlwZXMudHMiLCJ3ZWJwYWNrOi8vdHlwZWRGZXRjaGVyLy4vc3JjL2h0dHAtZXJyb3ItbWFuYWdlci9pbmRleC50cyIsIndlYnBhY2s6Ly90eXBlZEZldGNoZXIvLi9zcmMvcHJvdmlkZXIveG1sSHR0cFByb3ZpZGVyLnRzIiwid2VicGFjazovL3R5cGVkRmV0Y2hlci8uL3NyYy9odHRwLWVycm9yLW1hbmFnZXIvSHR0cEVycm9yTWFuYWdlci50cyIsIndlYnBhY2s6Ly90eXBlZEZldGNoZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdHlwZWRGZXRjaGVyLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInR5cGVkRmV0Y2hlclwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJ0eXBlZEZldGNoZXJcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCAoKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IHsgSFRUUF9FUlJPUl9UWVBFLCBIdHRwRXJyb3JCYXNlIH0gZnJvbSAnLi9IdHRwRXJyb3JCYXNlJztcblxuY29uc3QgdHlwZUFycmF5QnVmZmVyID0gSFRUUF9FUlJPUl9UWVBFLkFSUkFZX0JVRkZFUjtcblxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvckFycmF5QnVmZmVyXG4gIGV4dGVuZHMgSHR0cEVycm9yQmFzZTx0eXBlb2YgdHlwZUFycmF5QnVmZmVyPlxuICBpbXBsZW1lbnRzIEh0dHBFcnJvckJhc2U8dHlwZW9mIHR5cGVBcnJheUJ1ZmZlcj5cbntcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSB0eXBlQXJyYXlCdWZmZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXM6IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGV0YWlsczogbnVsbCB8IEFycmF5QnVmZmVyLFxuICAgIHB1YmxpYyByZWFkb25seSBtZXNzYWdlOiBzdHJpbmcgPSAnQXJyYXlCdWZmZXIgaHR0cCBlcnJvciwgcGxlYXNlIGNoZWNrIGRldGFpbHMgZmllbGQnLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSFRUUF9FUlJPUl9UWVBFLCBIdHRwRXJyb3JCYXNlIH0gZnJvbSAnLi9IdHRwRXJyb3JCYXNlJztcblxuY29uc3QgdHlwZUpTT04gPSBIVFRQX0VSUk9SX1RZUEUuSlNPTjtcblxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvckpTT04gZXh0ZW5kcyBIdHRwRXJyb3JCYXNlPHR5cGVvZiB0eXBlSlNPTj4gaW1wbGVtZW50cyBIdHRwRXJyb3JCYXNlPHR5cGVvZiB0eXBlSlNPTj4ge1xuICBwdWJsaWMgdHlwZSA9IHR5cGVKU09OO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyBzdGF0dXM6IG51bWJlcixcbiAgICBwdWJsaWMgZGV0YWlsczogbnVsbCB8IHVua25vd24sXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InKTtcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IEhUVFBfRVJST1JfVFlQRSA9IHtcbiAgSlNPTjogJ0pTT04nLFxuICBBUlJBWV9CVUZGRVI6ICdBUlJBWV9CVUZGRVInLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgSHR0cEVycm9yVHlwZSA9ICh0eXBlb2YgSFRUUF9FUlJPUl9UWVBFKVtrZXlvZiB0eXBlb2YgSFRUUF9FUlJPUl9UWVBFXTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEh0dHBFcnJvckJhc2U8VHlwZSBleHRlbmRzIEh0dHBFcnJvclR5cGU+IGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgYWJzdHJhY3QgdHlwZTogVHlwZTtcbiAgcHVibGljIGFic3RyYWN0IHN0YXR1czogbnVtYmVyO1xuICBwdWJsaWMgYWJzdHJhY3QgbWVzc2FnZTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgZGV0YWlsczogbnVsbCB8IHVua25vd247XG59XG5cbmV4cG9ydCB0eXBlIEh0dHBFcnJvciA9IEh0dHBFcnJvckJhc2U8dHlwZW9mIEhUVFBfRVJST1JfVFlQRS5KU09OPjtcbiIsImV4cG9ydCB7IEh0dHBFcnJvckpTT04gfSBmcm9tICcuL0h0dHBFcnJvckpTT04nO1xuZXhwb3J0IHsgSHR0cEVycm9yQXJyYXlCdWZmZXIgfSBmcm9tICcuL0h0dHBFcnJvckFycmF5QnVmZmVyJztcbmV4cG9ydCB7IEh0dHBFcnJvckJhc2UgfSBmcm9tICcuL0h0dHBFcnJvckJhc2UnO1xuIiwiaW1wb3J0IHR5cGUgeyBIdHRwRmV0Y2hQcm92aWRlciwgUmVxdWVzdFBhcmFtcyB9IGZyb20gJy4uL2h0dHAtY2xpZW50L2luZGV4JztcblxuZXhwb3J0IGNsYXNzIEZldGNoUHJvdmlkZXIgaW1wbGVtZW50cyBIdHRwRmV0Y2hQcm92aWRlciB7XG4gIHB1YmxpYyBmZXRjaChwYXJhbXM6IFJlcXVlc3RQYXJhbXMpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuZmV0Y2gocGFyYW1zLnVybCwge1xuICAgICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHtcbiAgUmVxdWVzdE9wdGlvbnNJbnB1dCxcbiAgSHR0cENsaWVudEJhc2UsXG4gIEh0dHBFcnJvck1hbmFnZXJCYXNlLFxuICBIdHRwQ2xpZW50U2V0dGluZ3MsXG4gIEh0dHBGZXRjaFByb3ZpZGVyLFxuICBIdHRwUmVzcG9uc2UsXG4gIEh0dHBSZXNwb25zZUZ1bGwsXG4gIFJlcXVlc3RNZXRob2QsXG4gIFJlcXVlc3RQYXJhbXMsXG4gIFVybCxcbiAgU3RhYmxlT3B0aW9ucyxcbn0gZnJvbSAnLi9IdHRwQ2xpZW50LnR5cGVzJztcbmltcG9ydCB7IFJFUVVFU1RfTUVUSE9ELCBSRVNQT05TRV9BUyB9IGZyb20gJy4vSHR0cENsaWVudC50eXBlcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50Tm9ybWFsaXplciB9IGZyb20gJy4vSHR0cENsaWVudE5vcm1hbGl6ZXInO1xuaW1wb3J0IHsgRmV0Y2hQcm92aWRlciB9IGZyb20gJy4uL3Byb3ZpZGVyJztcblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnQgaW1wbGVtZW50cyBIdHRwQ2xpZW50QmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0dGluZzogSHR0cENsaWVudFNldHRpbmdzID0ge1xuICAgIHJlc3BvbnNlQXM6IFJFU1BPTlNFX0FTLmpzb24sXG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBub3JtYWxpemVyID0gbmV3IEh0dHBDbGllbnROb3JtYWxpemVyKCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JNYW5hZ2VyOiBIdHRwRXJyb3JNYW5hZ2VyQmFzZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZldGNoUHJvdmlkZXI6IEh0dHBGZXRjaFByb3ZpZGVyID0gbmV3IEZldGNoUHJvdmlkZXIoKSxcbiAgKSB7fVxuXG4gIHB1YmxpYyBhc3luYyBnZXQ8RGF0YT4odXJsOiBVcmwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LCBzZXR0aW5nID0gdGhpcy5zZXR0aW5nKTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8RGF0YT4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5mZXRjaFdpdGhTaG9ydFJlc3BvbnNlPERhdGE+KFJFUVVFU1RfTUVUSE9ELkdFVCwgdXJsLCBvcHRpb25zLCBzZXR0aW5nKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwb3N0PERhdGE+KFxuICAgIHVybDogVXJsLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LFxuICAgIHNldHRpbmcgPSB0aGlzLnNldHRpbmcsXG4gICk6IFByb21pc2U8SHR0cFJlc3BvbnNlPERhdGE+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hXaXRoU2hvcnRSZXNwb25zZTxEYXRhPihSRVFVRVNUX01FVEhPRC5QT1NULCB1cmwsIG9wdGlvbnMsIHNldHRpbmcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHB1dDxEYXRhPih1cmw6IFVybCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsIHNldHRpbmcgPSB0aGlzLnNldHRpbmcpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxEYXRhPj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmZldGNoV2l0aFNob3J0UmVzcG9uc2U8RGF0YT4oUkVRVUVTVF9NRVRIT0QuUFVULCB1cmwsIG9wdGlvbnMsIHNldHRpbmcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBhdGNoPERhdGE+KFxuICAgIHVybDogVXJsLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LFxuICAgIHNldHRpbmcgPSB0aGlzLnNldHRpbmcsXG4gICk6IFByb21pc2U8SHR0cFJlc3BvbnNlPERhdGE+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hXaXRoU2hvcnRSZXNwb25zZTxEYXRhPihSRVFVRVNUX01FVEhPRC5QQVRDSCwgdXJsLCBvcHRpb25zLCBzZXR0aW5nKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGU8RGF0YT4oXG4gICAgdXJsOiBVcmwsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsXG4gICAgc2V0dGluZyA9IHRoaXMuc2V0dGluZyxcbiAgKTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8RGF0YT4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5mZXRjaFdpdGhTaG9ydFJlc3BvbnNlPERhdGE+KFJFUVVFU1RfTUVUSE9ELkRFTEVURSwgdXJsLCBvcHRpb25zLCBzZXR0aW5nKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoZWFkKHVybDogVXJsLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNJbnB1dCwgc2V0dGluZyA9IHRoaXMuc2V0dGluZyk6IFByb21pc2U8SHR0cFJlc3BvbnNlPEhlYWRlcnM+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hIZWFkZXJzKFJFUVVFU1RfTUVUSE9ELkhFQUQsIHVybCwgb3B0aW9ucywgc2V0dGluZyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb3B0aW9ucyhcbiAgICB1cmw6IFVybCxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNJbnB1dCxcbiAgICBzZXR0aW5nID0gdGhpcy5zZXR0aW5nLFxuICApOiBQcm9taXNlPEh0dHBSZXNwb25zZTxIZWFkZXJzPj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmZldGNoSGVhZGVycyhSRVFVRVNUX01FVEhPRC5PUFRJT05TLCB1cmwsIG9wdGlvbnMsIHNldHRpbmcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZldGNoR2V0PERhdGE+KFxuICAgIHVybDogVXJsLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LFxuICAgIHNldHRpbmcgPSB0aGlzLnNldHRpbmcsXG4gICk6IFByb21pc2U8SHR0cFJlc3BvbnNlRnVsbDxEYXRhPj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmZldGNoPERhdGE+KFJFUVVFU1RfTUVUSE9ELkdFVCwgdXJsLCBvcHRpb25zLCBzZXR0aW5nKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaFBvc3Q8RGF0YT4oXG4gICAgdXJsOiBVcmwsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsXG4gICAgc2V0dGluZyA9IHRoaXMuc2V0dGluZyxcbiAgKTogUHJvbWlzZTxIdHRwUmVzcG9uc2VGdWxsPERhdGE+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2g8RGF0YT4oUkVRVUVTVF9NRVRIT0QuUE9TVCwgdXJsLCBvcHRpb25zLCBzZXR0aW5nKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaFB1dDxEYXRhPihcbiAgICB1cmw6IFVybCxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNJbnB1dCxcbiAgICBzZXR0aW5nID0gdGhpcy5zZXR0aW5nLFxuICApOiBQcm9taXNlPEh0dHBSZXNwb25zZUZ1bGw8RGF0YT4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5mZXRjaDxEYXRhPihSRVFVRVNUX01FVEhPRC5QVVQsIHVybCwgb3B0aW9ucywgc2V0dGluZyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmV0Y2hQYXRjaDxEYXRhPihcbiAgICB1cmw6IFVybCxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNJbnB1dCxcbiAgICBzZXR0aW5nID0gdGhpcy5zZXR0aW5nLFxuICApOiBQcm9taXNlPEh0dHBSZXNwb25zZUZ1bGw8RGF0YT4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5mZXRjaChSRVFVRVNUX01FVEhPRC5QQVRDSCwgdXJsLCBvcHRpb25zLCBzZXR0aW5nKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaERlbGV0ZTxEYXRhPihcbiAgICB1cmw6IFVybCxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNJbnB1dCxcbiAgICBzZXR0aW5nID0gdGhpcy5zZXR0aW5nLFxuICApOiBQcm9taXNlPEh0dHBSZXNwb25zZUZ1bGw8RGF0YT4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5mZXRjaDxEYXRhPihSRVFVRVNUX01FVEhPRC5ERUxFVEUsIHVybCwgb3B0aW9ucywgc2V0dGluZyk7XG4gIH1cblxuICBwdWJsaWMgZmV0Y2hIZWFkKHVybDogVXJsLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNJbnB1dCwgc2V0dGluZyA9IHRoaXMuc2V0dGluZyk6IFByb21pc2U8SHR0cFJlc3BvbnNlRnVsbDxudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoPG51bGw+KFJFUVVFU1RfTUVUSE9ELkhFQUQsIHVybCwgb3B0aW9ucywgc2V0dGluZyk7XG4gIH1cblxuICBwdWJsaWMgZmV0Y2hPcHRpb25zKFxuICAgIHVybDogVXJsLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LFxuICAgIHNldHRpbmcgPSB0aGlzLnNldHRpbmcsXG4gICk6IFByb21pc2U8SHR0cFJlc3BvbnNlRnVsbDxudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoPG51bGw+KFJFUVVFU1RfTUVUSE9ELk9QVElPTlMsIHVybCwgb3B0aW9ucywgc2V0dGluZyk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlPcHRpb25zKG9wdGlvbnM6IFN0YWJsZU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLm5vcm1hbGl6ZXIuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyB1bmFwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLm5vcm1hbGl6ZXIuc2V0T3B0aW9ucyh7fSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoPERhdGE+KFxuICAgIG1ldGhvZDogUmVxdWVzdE1ldGhvZCxcbiAgICB1cmw6IFVybCxcbiAgICBvcHRpb25zSW5wdXQ/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LFxuICAgIHNldHRpbmdJbnB1dCA9IHRoaXMuc2V0dGluZyxcbiAgKTogUHJvbWlzZTxIdHRwUmVzcG9uc2VGdWxsPERhdGE+PiB7XG4gICAgY29uc3QgcmVxdWVzdFNldHRpbmcgPSB7IC4uLnRoaXMuc2V0dGluZywgLi4uc2V0dGluZ0lucHV0IH07XG4gICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNJbnB1dCA/PyB7fTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZU9wdGlvbnMob3B0aW9ucywgcmVxdWVzdFNldHRpbmcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RQYXJhbXM6IFJlcXVlc3RQYXJhbXMgPSB7XG4gICAgICAgIHVybCxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBvcHRpb25zOiByZXF1ZXN0T3B0aW9ucyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFByb3ZpZGVyLmZldGNoKHJlcXVlc3RQYXJhbXMpO1xuXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubm9ybWFsaXplci5ub3JtYWxpemVSZXNwb25zZTxEYXRhPihyZXNwb25zZSwgcmVxdWVzdFNldHRpbmcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhQXNUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuXG4gICAgICB0aGlzLmVycm9yTWFuYWdlci50aHJvdyhyZXNwb25zZSwgZGF0YUFzVGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNYW5hZ2VyLnBhcnNlPERhdGE+KGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hXaXRoU2hvcnRSZXNwb25zZTxEYXRhPihcbiAgICBtZXRob2Q6IFJlcXVlc3RNZXRob2QsXG4gICAgdXJsOiBVcmwsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsXG4gICAgc2V0dGluZyA9IHRoaXMuc2V0dGluZyxcbiAgKTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8RGF0YT4+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5mZXRjaDxEYXRhPihtZXRob2QsIHVybCwgb3B0aW9ucywgc2V0dGluZyk7XG5cbiAgICBpZiAocGF5bG9hZC5lcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgZXJyb3I6IHBheWxvYWQuZXJyb3IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBwYXlsb2FkLmRhdGEsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaEhlYWRlcnMoXG4gICAgbWV0aG9kOiB0eXBlb2YgUkVRVUVTVF9NRVRIT0QuSEVBRCB8IHR5cGVvZiBSRVFVRVNUX01FVEhPRC5PUFRJT05TLFxuICAgIHVybDogVXJsLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LFxuICAgIHNldHRpbmcgPSB0aGlzLnNldHRpbmcsXG4gICk6IFByb21pc2U8SHR0cFJlc3BvbnNlPEhlYWRlcnM+PiB7XG4gICAgY29uc3Qgb3B0aW9uc1dpdGhOb0JvZHkgPSB7IC4uLm9wdGlvbnMsIGJvZHk6IHVuZGVmaW5lZCB9O1xuICAgIGNvbnN0IHNldHRpbmdSZXNwb25zZUFzVGV4dCA9IHsgLi4uc2V0dGluZywgcmVzcG9uc2VBczogUkVTUE9OU0VfQVMudGV4dCB9O1xuICAgIGNvbnN0IHsgZXJyb3IsIG9yaWdpbmFsIH0gPSBhd2FpdCB0aGlzLmZldGNoPEhlYWRlcnM+KG1ldGhvZCwgdXJsLCBvcHRpb25zV2l0aE5vQm9keSwgc2V0dGluZ1Jlc3BvbnNlQXNUZXh0KTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVycyA9IG9yaWdpbmFsPy5oZWFkZXJzIHx8IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogaGVhZGVycyxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgIH07XG4gIH1cbn1cbiIsImV4cG9ydCB7IFhtbEh0dHBQcm92aWRlciB9IGZyb20gJy4veG1sSHR0cFByb3ZpZGVyJztcbmV4cG9ydCB7IEZldGNoUHJvdmlkZXIgfSBmcm9tICcuL2ZldGNoUHJvdmlkZXInO1xuIiwiaW1wb3J0IHR5cGUge1xuICBSZXF1ZXN0T3B0aW9uc0lucHV0LFxuICBIdHRwQ2xpZW50U2V0dGluZ3MsXG4gIEh0dHBSZXNwb25zZUZ1bGwsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBTdGFibGVPcHRpb25zLFxufSBmcm9tICcuL0h0dHBDbGllbnQudHlwZXMnO1xuaW1wb3J0IHsgUkVTUE9OU0VfQVMgfSBmcm9tICcuL0h0dHBDbGllbnQudHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudE5vcm1hbGl6ZXIge1xuICBwcml2YXRlIG9wdGlvbnM6IFN0YWJsZU9wdGlvbnMgPSB7fTtcblxuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBTdGFibGVPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBub3JtYWxpemVPcHRpb25zKG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zSW5wdXQsIHNldHRpbmc6IEh0dHBDbGllbnRTZXR0aW5ncyk6IFJlcXVlc3RPcHRpb25zIHtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYm9keTogdGhpcy5ub3JtYWxpemVCb2R5KG9wdGlvbnMuYm9keSksXG4gICAgfTtcblxuICAgIGlmIChzZXR0aW5nLnJlc3BvbnNlQXMgPT09IFJFU1BPTlNFX0FTLmpzb24pIHtcbiAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsIC4uLnJlcXVlc3RPcHRpb25zLmhlYWRlcnMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVxdWVzdE9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbm9ybWFsaXplUmVzcG9uc2U8RGF0YT4oXG4gICAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICAgIHNldHRpbmc6IEh0dHBDbGllbnRTZXR0aW5ncyxcbiAgKTogUHJvbWlzZTxIdHRwUmVzcG9uc2VGdWxsPERhdGE+PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9yaWdpbmFsOiByZXNwb25zZSxcbiAgICAgIGRhdGE6IGF3YWl0IHJlc3BvbnNlW3NldHRpbmcucmVzcG9uc2VBc10oKSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUJvZHkoYm9keTogUmVxdWVzdE9wdGlvbnNJbnB1dFsnYm9keSddKTogUmVxdWVzdE9wdGlvbnNbJ2JvZHknXSB7XG4gICAgaWYgKGJvZHkgJiYgYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG5cbiAgICBpZiAoYm9keSAmJiBib2R5IGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfVxuXG4gICAgaWYgKGJvZHkgJiYgYm9keSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG5cbiAgICBpZiAoYm9keSAmJiBib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG5cbiAgICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIGlmIChib2R5ICYmIGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGJvZHkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiIsImV4cG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICcuL0h0dHBDbGllbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL0h0dHBDbGllbnQudHlwZXMnO1xuIiwiaW1wb3J0IHR5cGUgeyBIdHRwRXJyb3IgfSBmcm9tICcuLi9odHRwLWVycm9yL0h0dHBFcnJvckJhc2UnO1xuXG5leHBvcnQgY29uc3QgUkVTUE9OU0VfQVMgPSB7XG4gIGpzb246ICdqc29uJyxcbiAgdGV4dDogJ3RleHQnLFxuICBhcnJheUJ1ZmZlcjogJ2FycmF5QnVmZmVyJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQXMgPSAodHlwZW9mIFJFU1BPTlNFX0FTKVtrZXlvZiB0eXBlb2YgUkVTUE9OU0VfQVNdO1xuXG5leHBvcnQgY29uc3QgUkVRVUVTVF9NRVRIT0QgPSB7XG4gIEdFVDogJ0dFVCcsXG4gIFBPU1Q6ICdQT1NUJyxcbiAgUFVUOiAnUFVUJyxcbiAgREVMRVRFOiAnREVMRVRFJyxcbiAgSEVBRDogJ0hFQUQnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIFBBVENIOiAnUEFUQ0gnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmVxdWVzdE1ldGhvZCA9ICh0eXBlb2YgUkVRVUVTVF9NRVRIT0QpW2tleW9mIHR5cGVvZiBSRVFVRVNUX01FVEhPRF07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENsaWVudFNldHRpbmdzIHtcbiAgcmVzcG9uc2VBczogUmVzcG9uc2VBcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0UGFyYW1zIHtcbiAgdXJsOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucztcbn1cblxuaW50ZXJmYWNlIEh0dHBSZXNwb25zZUVycm9yIHtcbiAgZGF0YTogbnVsbDtcbiAgZXJyb3I6IEh0dHBFcnJvcjtcbn1cblxuaW50ZXJmYWNlIEh0dHBSZXNwb25zZVN1Y2Nlc3M8RGF0YT4ge1xuICBkYXRhOiBEYXRhO1xuICBlcnJvcjogbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgSHR0cFJlc3BvbnNlPERhdGE+ID0gSHR0cFJlc3BvbnNlU3VjY2VzczxEYXRhPiB8IEh0dHBSZXNwb25zZUVycm9yO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBSZXNwb25zZUVycm9yRnVsbCBleHRlbmRzIEh0dHBSZXNwb25zZUVycm9yIHtcbiAgb3JpZ2luYWw6IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cFJlc3BvbnNlU3VjY2Vzc0Z1bGw8RGF0YT4gZXh0ZW5kcyBIdHRwUmVzcG9uc2VTdWNjZXNzPERhdGE+IHtcbiAgb3JpZ2luYWw6IFJlc3BvbnNlO1xufVxuXG5leHBvcnQgdHlwZSBIdHRwUmVzcG9uc2VGdWxsPERhdGE+ID0gSHR0cFJlc3BvbnNlU3VjY2Vzc0Z1bGw8RGF0YT4gfCBIdHRwUmVzcG9uc2VFcnJvckZ1bGw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENsaWVudEJhc2Uge1xuICBnZXQ6IDxEYXRhPih1cmw6IFVybCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsIHNldHRpbmc/OiBIdHRwQ2xpZW50U2V0dGluZ3MpID0+IFByb21pc2U8SHR0cFJlc3BvbnNlPERhdGE+PjtcblxuICBwb3N0OiA8RGF0YT4odXJsOiBVcmwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LCBzZXR0aW5nPzogSHR0cENsaWVudFNldHRpbmdzKSA9PiBQcm9taXNlPEh0dHBSZXNwb25zZTxEYXRhPj47XG5cbiAgcHV0OiA8RGF0YT4odXJsOiBVcmwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LCBzZXR0aW5nPzogSHR0cENsaWVudFNldHRpbmdzKSA9PiBQcm9taXNlPEh0dHBSZXNwb25zZTxEYXRhPj47XG5cbiAgcGF0Y2g6IDxEYXRhPih1cmw6IFVybCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsIHNldHRpbmc/OiBIdHRwQ2xpZW50U2V0dGluZ3MpID0+IFByb21pc2U8SHR0cFJlc3BvbnNlPERhdGE+PjtcblxuICBkZWxldGU6IDxEYXRhPih1cmw6IFVybCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsIHNldHRpbmc/OiBIdHRwQ2xpZW50U2V0dGluZ3MpID0+IFByb21pc2U8SHR0cFJlc3BvbnNlPERhdGE+PjtcblxuICBoZWFkOiAodXJsOiBVcmwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LCBzZXR0aW5nPzogSHR0cENsaWVudFNldHRpbmdzKSA9PiBQcm9taXNlPEh0dHBSZXNwb25zZTxIZWFkZXJzPj47XG5cbiAgb3B0aW9uczogKHVybDogVXJsLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNJbnB1dCwgc2V0dGluZz86IEh0dHBDbGllbnRTZXR0aW5ncykgPT4gUHJvbWlzZTxIdHRwUmVzcG9uc2U8SGVhZGVycz4+O1xuXG4gIGZldGNoR2V0OiA8RGF0YT4oXG4gICAgdXJsOiBVcmwsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsXG4gICAgc2V0dGluZz86IEh0dHBDbGllbnRTZXR0aW5ncyxcbiAgKSA9PiBQcm9taXNlPEh0dHBSZXNwb25zZUZ1bGw8RGF0YT4+O1xuXG4gIGZldGNoUG9zdDogPERhdGE+KFxuICAgIHVybDogVXJsLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LFxuICAgIHNldHRpbmc/OiBIdHRwQ2xpZW50U2V0dGluZ3MsXG4gICkgPT4gUHJvbWlzZTxIdHRwUmVzcG9uc2VGdWxsPERhdGE+PjtcblxuICBmZXRjaFB1dDogPERhdGE+KFxuICAgIHVybDogVXJsLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc0lucHV0LFxuICAgIHNldHRpbmc/OiBIdHRwQ2xpZW50U2V0dGluZ3MsXG4gICkgPT4gUHJvbWlzZTxIdHRwUmVzcG9uc2VGdWxsPERhdGE+PjtcblxuICBmZXRjaFBhdGNoOiA8RGF0YT4oXG4gICAgdXJsOiBVcmwsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsXG4gICAgc2V0dGluZz86IEh0dHBDbGllbnRTZXR0aW5ncyxcbiAgKSA9PiBQcm9taXNlPEh0dHBSZXNwb25zZUZ1bGw8RGF0YT4+O1xuXG4gIGZldGNoRGVsZXRlOiA8RGF0YT4oXG4gICAgdXJsOiBVcmwsXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zSW5wdXQsXG4gICAgc2V0dGluZz86IEh0dHBDbGllbnRTZXR0aW5ncyxcbiAgKSA9PiBQcm9taXNlPEh0dHBSZXNwb25zZUZ1bGw8RGF0YT4+O1xuXG4gIGZldGNoSGVhZDogKHVybDogVXJsLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNJbnB1dCwgc2V0dGluZz86IEh0dHBDbGllbnRTZXR0aW5ncykgPT4gUHJvbWlzZTxIdHRwUmVzcG9uc2VGdWxsPG51bGw+PjtcblxuICBmZXRjaE9wdGlvbnM6IChcbiAgICB1cmw6IFVybCxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNJbnB1dCxcbiAgICBzZXR0aW5nPzogSHR0cENsaWVudFNldHRpbmdzLFxuICApID0+IFByb21pc2U8SHR0cFJlc3BvbnNlRnVsbDxudWxsPj47XG5cbiAgYXBwbHlPcHRpb25zOiAob3B0aW9uczogU3RhYmxlT3B0aW9ucykgPT4gdm9pZDtcbiAgdW5hcHBseU9wdGlvbnM6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEVycm9yTWFuYWdlckJhc2Uge1xuICB0aHJvdzogKHJlc3BvbnNlOiBSZXNwb25zZSwgZGF0YVRleHQ6IHN0cmluZykgPT4gbmV2ZXI7XG4gIHBhcnNlOiA8RGF0YT4oZXJyb3JEYXRhOiB1bmtub3duKSA9PiBIdHRwUmVzcG9uc2VGdWxsPERhdGE+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBGZXRjaFByb3ZpZGVyIHtcbiAgZmV0Y2g6IChwYXJhbXM6IFJlcXVlc3RQYXJhbXMpID0+IFByb21pc2U8UmVzcG9uc2U+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RPcHRpb25zSW5wdXQgZXh0ZW5kcyBPbWl0PFJlcXVlc3RJbml0LCAnYm9keScgfCAnbWV0aG9kJz4ge1xuICBib2R5PzogUmVxdWVzdEluaXRbJ2JvZHknXSB8IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhYmxlT3B0aW9ucyBleHRlbmRzIE9taXQ8UmVxdWVzdE9wdGlvbnNJbnB1dCwgJ2JvZHknPiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RPcHRpb25zIGV4dGVuZHMgUmVxdWVzdEluaXQge31cblxuZXhwb3J0IHR5cGUgVXJsID0gc3RyaW5nO1xuIiwiZXhwb3J0IHsgSHR0cEVycm9yTWFuYWdlciB9IGZyb20gJy4vSHR0cEVycm9yTWFuYWdlcic7XG4iLCJpbXBvcnQgdHlwZSB7IEh0dHBGZXRjaFByb3ZpZGVyLCBSZXF1ZXN0UGFyYW1zIH0gZnJvbSAnLi4vaHR0cC1jbGllbnQnO1xuXG5leHBvcnQgY2xhc3MgWG1sSHR0cFByb3ZpZGVyIGltcGxlbWVudHMgSHR0cEZldGNoUHJvdmlkZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCFnbG9iYWxUaGlzLlhNTEh0dHBSZXF1ZXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1hNTEh0dHBSZXF1ZXN0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmZXRjaChwYXJhbXM6IFJlcXVlc3RQYXJhbXMpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICB4aHIub3BlbihwYXJhbXMubWV0aG9kLCBwYXJhbXMudXJsLCB0cnVlKTtcblxuICAgICAgaWYgKHBhcmFtcy5vcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zLm9wdGlvbnMuaGVhZGVycykpIHtcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLm9wdGlvbnM/LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlSW5pdCA9IHtcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoKSxcbiAgICAgICAgfTtcblxuICAgICAgICB4aHJcbiAgICAgICAgICAuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgLnNwbGl0KC9bXFxyXFxuXSsvKVxuICAgICAgICAgIC5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmUuc3BsaXQoJzogJyk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXIgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJ0cy5qb2luKCc6ICcpO1xuICAgICAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgICByZXNwb25zZUluaXQuaGVhZGVycy5hcHBlbmQoaGVhZGVyLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYm9keSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCByZXNwb25zZUluaXQpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbnRpbWVvdXQgPSAoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgdGltZWQgb3V0JykpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5vcHRpb25zLmJvZHkpO1xuICAgICAgeGhyLnNlbmQoYm9keSB8fCBudWxsKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBIdHRwRXJyb3JNYW5hZ2VyQmFzZSwgSHR0cFJlc3BvbnNlRnVsbCB9IGZyb20gJy4uL2h0dHAtY2xpZW50L2luZGV4JztcbmltcG9ydCB7IEh0dHBFcnJvckFycmF5QnVmZmVyLCBIdHRwRXJyb3JKU09OIH0gZnJvbSAnLi4vaHR0cC1lcnJvci9pbmRleCc7XG5cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3JNYW5hZ2VyIGltcGxlbWVudHMgSHR0cEVycm9yTWFuYWdlckJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnRUeXBlID0ge1xuICAgIEpTT046ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICBBUlJBWV9CVUZGRVI6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuICAgIFRFWFQ6ICd0ZXh0L3BsYWluJyxcbiAgfTtcbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgdGhyb3cocmVzcG9uc2U6IFJlc3BvbnNlLCBkYXRhVGV4dDogc3RyaW5nKTogbmV2ZXIge1xuICAgIGlmIChkYXRhVGV4dCkge1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG5cbiAgICAgIGlmIChjb250ZW50VHlwZT8uaW5jbHVkZXModGhpcy5jb250ZW50VHlwZS5BUlJBWV9CVUZGRVIpKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gZW5jb2Rlci5lbmNvZGUoZGF0YVRleHQpLmJ1ZmZlcjtcbiAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvckFycmF5QnVmZmVyKHJlc3BvbnNlLnN0YXR1cywgYnVmZmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRUeXBlPy5pbmNsdWRlcyh0aGlzLmNvbnRlbnRUeXBlLlRFWFQpKSB7XG4gICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3JKU09OKGRhdGFUZXh0LCByZXNwb25zZS5zdGF0dXMsIGRhdGFUZXh0KTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVycm9ySlNPTjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVycm9ySlNPTiA9IEpTT04ucGFyc2UoZGF0YVRleHQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3JKU09OKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRNZXNzYWdlID0gJ1Vua25vd24gZXJyb3IgcGxlYXNlIGNoZWNrIGRldGFpbHMgZmllbGQnO1xuICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9ySlNPTihlcnJvckpTT04/Lm1lc3NhZ2UgPz8gZGVmYXVsdE1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cywgZXJyb3JKU09OKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgIGRldGFpbHM6ICdObyByZXNwb25zZSBmb3IgZGV0YWlscycsXG4gICAgfTtcblxuICAgIHRocm93IG5ldyBIdHRwRXJyb3JKU09OKGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YXR1cywgZXJyb3IuZGV0YWlscyk7XG4gIH1cblxuICBwdWJsaWMgcGFyc2U8RGF0YT4oZXJyb3JEYXRhOiB1bmtub3duKTogSHR0cFJlc3BvbnNlRnVsbDxEYXRhPiB7XG4gICAgaWYgKGVycm9yRGF0YSBpbnN0YW5jZW9mIEh0dHBFcnJvckpTT04pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9yaWdpbmFsOiBudWxsLFxuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBlcnJvcjogZXJyb3JEYXRhLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvckRhdGE7XG4gIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJleHBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnLi9odHRwLWNsaWVudCc7XG5leHBvcnQgeyBIdHRwRXJyb3JNYW5hZ2VyIH0gZnJvbSAnLi9odHRwLWVycm9yLW1hbmFnZXInO1xuZXhwb3J0IHsgSHR0cEVycm9ySlNPTiwgSHR0cEVycm9yQmFzZSB9IGZyb20gJy4vaHR0cC1lcnJvcic7XG5leHBvcnQgeyBYbWxIdHRwUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVyJztcbmV4cG9ydCB0eXBlIHsgSHR0cENsaWVudEJhc2UsIEh0dHBGZXRjaFByb3ZpZGVyLCBIdHRwRXJyb3JNYW5hZ2VyQmFzZSB9IGZyb20gJy4vaHR0cC1jbGllbnQvSHR0cENsaWVudC50eXBlcyc7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsInR5cGVBcnJheUJ1ZmZlciIsIkhUVFBfRVJST1JfVFlQRSIsIkFSUkFZX0JVRkZFUiIsIkh0dHBFcnJvckFycmF5QnVmZmVyIiwiSHR0cEVycm9yQmFzZSIsInN0YXR1cyIsImRldGFpbHMiLCJtZXNzYWdlIiwidHlwZSIsInN1cGVyIiwidHlwZUpTT04iLCJKU09OIiwiSHR0cEVycm9ySlNPTiIsIkVycm9yIiwiZmV0Y2giLCJwYXJhbXMiLCJnbG9iYWxUaGlzIiwidXJsIiwibWV0aG9kIiwib3B0aW9ucyIsImVycm9yTWFuYWdlciIsImZldGNoUHJvdmlkZXIiLCJzZXR0aW5nIiwicmVzcG9uc2VBcyIsIlJFU1BPTlNFX0FTIiwianNvbiIsIm5vcm1hbGl6ZXIiLCJIdHRwQ2xpZW50Tm9ybWFsaXplciIsIkZldGNoUHJvdmlkZXIiLCJnZXQiLCJmZXRjaFdpdGhTaG9ydFJlc3BvbnNlIiwiUkVRVUVTVF9NRVRIT0QiLCJHRVQiLCJwb3N0IiwiUE9TVCIsInB1dCIsIlBVVCIsInBhdGNoIiwiUEFUQ0giLCJERUxFVEUiLCJoZWFkIiwiZmV0Y2hIZWFkZXJzIiwiSEVBRCIsIk9QVElPTlMiLCJmZXRjaEdldCIsImZldGNoUG9zdCIsImZldGNoUHV0IiwiZmV0Y2hQYXRjaCIsImZldGNoRGVsZXRlIiwiZmV0Y2hIZWFkIiwiZmV0Y2hPcHRpb25zIiwiYXBwbHlPcHRpb25zIiwic2V0T3B0aW9ucyIsInVuYXBwbHlPcHRpb25zIiwib3B0aW9uc0lucHV0Iiwic2V0dGluZ0lucHV0IiwicmVxdWVzdFNldHRpbmciLCJyZXF1ZXN0T3B0aW9ucyIsIm5vcm1hbGl6ZU9wdGlvbnMiLCJyZXF1ZXN0UGFyYW1zIiwicmVzcG9uc2UiLCJvayIsIm5vcm1hbGl6ZVJlc3BvbnNlIiwiZGF0YUFzVGV4dCIsInRleHQiLCJ0aHJvdyIsImUiLCJwYXJzZSIsInBheWxvYWQiLCJlcnJvciIsImRhdGEiLCJvcHRpb25zV2l0aE5vQm9keSIsImJvZHkiLCJ1bmRlZmluZWQiLCJzZXR0aW5nUmVzcG9uc2VBc1RleHQiLCJvcmlnaW5hbCIsImhlYWRlcnMiLCJYbWxIdHRwUHJvdmlkZXIiLCJub3JtYWxpemVCb2R5IiwiQXJyYXlCdWZmZXIiLCJCbG9iIiwiUmVhZGFibGVTdHJlYW0iLCJVUkxTZWFyY2hQYXJhbXMiLCJGb3JtRGF0YSIsInRvU3RyaW5nIiwic3RyaW5naWZ5IiwiSHR0cENsaWVudCIsImFycmF5QnVmZmVyIiwiSHR0cEVycm9yTWFuYWdlciIsIlhNTEh0dHBSZXF1ZXN0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJvcGVuIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0UmVxdWVzdEhlYWRlciIsImNyZWRlbnRpYWxzIiwid2l0aENyZWRlbnRpYWxzIiwib25sb2FkIiwicmVzcG9uc2VJbml0Iiwic3RhdHVzVGV4dCIsIkhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJ0cmltIiwic3BsaXQiLCJmb3JFYWNoIiwibGluZSIsInBhcnRzIiwiaGVhZGVyIiwic2hpZnQiLCJqb2luIiwiYXBwZW5kIiwicmVzcG9uc2VUZXh0IiwiUmVzcG9uc2UiLCJvbmVycm9yIiwiVHlwZUVycm9yIiwib250aW1lb3V0Iiwic2VuZCIsImNvbnRlbnRUeXBlIiwiVEVYVCIsImRhdGFUZXh0IiwiaW5jbHVkZXMiLCJidWZmZXIiLCJUZXh0RW5jb2RlciIsImVuY29kZSIsImVycm9ySlNPTiIsImRlZmF1bHRNZXNzYWdlIiwiZXJyb3JEYXRhIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImNhbGwiXSwic291cmNlUm9vdCI6IiJ9